<?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>205973</bug_id>
          
          <creation_ts>2020-01-08 16:42:43 -0800</creation_ts>
          <short_desc>[LFC] Use Horizontal/VerticalConstraints wherever possible</short_desc>
          <delta_ts>2020-01-09 11:09:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>aakash_jain</cc>
    
    <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>1604365</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-01-08 16:42:43 -0800</bug_when>
    <thetext>instead of passing in UserHorizontal/VerticalValues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604366</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-08 16:43:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/58426772&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604367</commentid>
    <comment_count>2</comment_count>
      <attachid>387161</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-01-08 16:48:19 -0800</bug_when>
    <thetext>Created attachment 387161
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604615</commentid>
    <comment_count>3</comment_count>
      <attachid>387161</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-01-09 07:25:56 -0800</bug_when>
    <thetext>Comment on attachment 387161
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Let&apos;s pass in Horizontal/VerticalConstraints struct instead of the UserHorizontal/VerticalValues

User -&gt; Used</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604697</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-01-09 10:25:09 -0800</bug_when>
    <thetext>Committed r254271: &lt;https://trac.webkit.org/changeset/254271&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387161</attachid>
            <date>2020-01-08 16:48:19 -0800</date>
            <delta_ts>2020-01-09 07:25:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205973-20200108164818.patch</filename>
            <type>text/plain</type>
            <size>91044</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWUxNTA2M2FlOTM2NjMw
OTI4YTcwYzNiN2Y5Y2Y2OTZmNTUzNjM0MS4uYTI4YjAxZWQ4MjkwNWExOWViNDliMWM0Nzg1ZTk4
MjVkMjU3MDA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDIwLTAxLTA4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gVXNlIEhvcml6b250
YWwvVmVydGljYWxDb25zdHJhaW50cyB3aGVyZXZlciBwb3NzaWJsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1OTczCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS81ODQyNjc3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBMZXQncyBwYXNzIGluIEhvcml6b250YWwvVmVydGljYWxDb25zdHJhaW50cyBz
dHJ1Y3QgaW5zdGVhZCBvZiB0aGUgVXNlckhvcml6b250YWwvVmVydGljYWxWYWx1ZXMKKyAgICAg
ICAgdG8gdGhlICJjb21wdXRlIGdlb21ldHJ5IiBmdW5jdGlvbnMgd2hlbiBvbmx5IHRoZSBjb25z
dHJhaW50IHZhbHVlcyBhcmUgbmVlZGVkL2F2YWlsYWJsZS4KKyAgICAgICAgVGhpcyBpcyBhbHNv
IGluIHByZXBhcmF0aW9uIGZvciBkZWNvdXBsaW5nIHVzZWQgYW5kIGNvbnN0cmFpbnQgdmFsdWVz
LgorCisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9u
dGFsR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcpOgorICAg
ICAgICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9Gb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZG
bG93UG9zaXRpb25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93
UG9zaXRpb25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVw
bGFjZWRWZXJ0aWNhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxH
ZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6Y29tcGxpY2F0ZWRDYXNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdOb25SZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpm
bG9hdGluZ1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1ZlcnRpY2FsR2Vv
bWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Om91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdIZWlnaHRB
bmRNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojppbmxp
bmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25P
ZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5p
bmdCbG9ja1dpdGhGaXhlZEhlaWdodCk6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGlu
Zy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
U3RhdGljVmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0
aW1hdGVkVmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxh
eW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAq
IGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJl
cGxhY2VkV2lkdGhBbmRNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UmVwbGFjZWRXaWR0aEFuZE1h
cmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRp
Y0hvcml6b250YWxQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRp
bmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVp
Z2h0KToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFw
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpNYXJnaW5Db2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2ZVZhbHVlcyBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0
SW5GbG93Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpv
bnRhbEFuZFZlcnRpY2FsR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVkSW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZv
ckZvcm1hdHRpbmdSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbik6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bnN0cmFpbnRzRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKToKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmlubGluZUJsb2NrV2lkdGhBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrSGVpZ2h0
QW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKToKKwogMjAy
MC0wMS0wOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNd
IE1vdmUgQ29uc3RyYWludHMgc3RydWN0IG91dCBvZiBVc2VkSG9yaXpvbnRhbChWZXJ0aWNhbCl2
YWx1ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRl
eCA5YzgwNmZhMmNhNWMwZTk1NTBhMWZlNmFkNTI4NDNiMTFiMDc0MWYyLi5mNDg0ODk1MjM5YjQw
OTAwYzNlYzY4NDlmNTU0MzU2YWJhZDIyYWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
b3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTY5LDExICs2OSw5IEBAIExheW91dFN0YXRlJiBGb3Jt
YXR0aW5nQ29udGV4dDo6bGF5b3V0U3RhdGUoKSBjb25zdAogdm9pZCBGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNv
bnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpCiB7CiAgICAgQVNT
RVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0gICAgYXV0byB1c2VkVmVy
dGljYWxWYWx1ZXMgPSBVc2VkVmVydGljYWxWYWx1ZXMgeyB2ZXJ0aWNhbENvbnN0cmFpbnRzLCB7
IH0gfTsKLQogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2Vk
V2lkdGgpIHsKICAgICAgICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9u
dGFsVmFsdWVzIHsgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB1c2VkV2lkdGgsIHsgfSB9OwotICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkoKS5vdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkobGF5b3V0
Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcywgdXNlZFZlcnRpY2FsVmFsdWVzKTsKKyAgICAgICAg
cmV0dXJuIGdlb21ldHJ5KCkub3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGxheW91dEJveCwg
dXNlZEhvcml6b250YWxWYWx1ZXMsIHZlcnRpY2FsQ29uc3RyYWludHMpOwogICAgIH07CiAKICAg
ICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2lj
YWxXaWR0aDsKQEAgLTEwMCwyMSArOTgsMjEgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwKIHZv
aWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250
YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJh
aW50cykKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsK
LSAgICBhdXRvIGNvbXB1dGUgPSBbJl0oY29uc3QgYXV0byYgdXNlZEhvcml6b250YWxWYWx1ZXMs
IGNvbnN0IGF1dG8mIHVzZWRWZXJ0aWNhbFZhbHVlcykgewotICAgICAgICByZXR1cm4gZ2VvbWV0
cnkoKS5vdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGxheW91dEJveCwgdXNlZEhvcml6b250YWxW
YWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CisgICAgYXV0byBjb21wdXRlID0gWyZdKE9wdGlv
bmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpIHsKKyAgICAgICAgYXV0byB1c2VkVmVydGljYWxW
YWx1ZXMgPSBVc2VkVmVydGljYWxWYWx1ZXMgeyB2ZXJ0aWNhbENvbnN0cmFpbnRzLCB1c2VkSGVp
Z2h0IH07CisgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLm91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0
cnkobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7
CiAgICAgfTsKIAotICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRh
bFZhbHVlcyB7IGhvcml6b250YWxDb25zdHJhaW50cyB9OwogICAgIGF1dG8gY29udGFpbmluZ0Js
b2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodDsKLSAgICBhdXRv
IHZlcnRpY2FsR2VvbWV0cnkgPSBjb21wdXRlKHVzZWRIb3Jpem9udGFsVmFsdWVzLCBVc2VkVmVy
dGljYWxWYWx1ZXMgeyB2ZXJ0aWNhbENvbnN0cmFpbnRzLCB7IH0gfSk7CisgICAgYXV0byB2ZXJ0
aWNhbEdlb21ldHJ5ID0gY29tcHV0ZSh7IH0pOwogICAgIGlmIChhdXRvIG1heEhlaWdodCA9IGdl
b21ldHJ5KCkuY29tcHV0ZWRNYXhIZWlnaHQobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tIZWln
aHQpKSB7Ci0gICAgICAgIGF1dG8gbWF4VmVydGljYWxHZW9tZXRyeSA9IGNvbXB1dGUodXNlZEhv
cml6b250YWxWYWx1ZXMsIFVzZWRWZXJ0aWNhbFZhbHVlcyB7IHZlcnRpY2FsQ29uc3RyYWludHMs
IG1heEhlaWdodCB9KTsKKyAgICAgICAgYXV0byBtYXhWZXJ0aWNhbEdlb21ldHJ5ID0gY29tcHV0
ZShtYXhIZWlnaHQpOwogICAgICAgICBpZiAodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0
QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPiBtYXhWZXJ0aWNhbEdlb21ldHJ5LmNvbnRlbnRIZWln
aHRBbmRNYXJnaW4uY29udGVudEhlaWdodCkKICAgICAgICAgICAgIHZlcnRpY2FsR2VvbWV0cnkg
PSBtYXhWZXJ0aWNhbEdlb21ldHJ5OwogICAgIH0KIAogICAgIGlmIChhdXRvIG1pbkhlaWdodCA9
IGdlb21ldHJ5KCkuY29tcHV0ZWRNaW5IZWlnaHQobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tI
ZWlnaHQpKSB7Ci0gICAgICAgIGF1dG8gbWluVmVydGljYWxHZW9tZXRyeSA9IGNvbXB1dGUodXNl
ZEhvcml6b250YWxWYWx1ZXMsIFVzZWRWZXJ0aWNhbFZhbHVlcyB7IHZlcnRpY2FsQ29uc3RyYWlu
dHMsIG1pbkhlaWdodCB9KTsKKyAgICAgICAgYXV0byBtaW5WZXJ0aWNhbEdlb21ldHJ5ID0gY29t
cHV0ZShtaW5IZWlnaHQpOwogICAgICAgICBpZiAodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVp
Z2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPCBtaW5WZXJ0aWNhbEdlb21ldHJ5LmNvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCkKICAgICAgICAgICAgIHZlcnRpY2FsR2VvbWV0
cnkgPSBtaW5WZXJ0aWNhbEdlb21ldHJ5OwogICAgIH0KQEAgLTEzMSw3ICsxMjksNyBAQCB2b2lk
IEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaQogewogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5n
U3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5zZXRCb3JkZXIo
Z2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKLSAgICBkaXNwbGF5Qm94LnNl
dFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcobGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB7IGhvcml6b250YWxDb25zdHJhaW50IH0pKTsKKyAgICBkaXNwbGF5Qm94LnNl
dFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcobGF5b3V0Qm94LCBob3Jpem9udGFs
Q29uc3RyYWludCkpOwogfQogCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZs
b3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiByb290SG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBWZXJ0
aWNhbENvbnN0cmFpbnRzJiByb290VmVydGljYWxDb25zdHJhaW50cykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggN2QxOGE5ZDFlMTY3YWJhODJjMDM0OWQ4
OTg1NDM2OTk4Yzc0OWMwNS4uYTBiMjk5Njg2ZjBjMTRmOTk2MDc2YWUxNDEwYjAyMmQ4NTM5Mjhk
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTEwOSwy
NSArMTA5LDI1IEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgZ2Vu
ZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nLgogICAgIGNsYXNzIEdlb21ldHJ5IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93VmVydGljYWxHZW9tZXRy
eShjb25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYsIGNvbnN0IFVzZWRWZXJ0
aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBIb3Jpem9udGFsR2VvbWV0cnkgb3V0T2ZGbG93
SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVz
JiwgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJik7CisgICAgICAgIFZlcnRpY2FsR2VvbWV0cnkg
b3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICAgICAgSG9y
aXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmLCBj
b25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmKTsK
IAotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGZsb2F0aW5nSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiwgY29uc3QgVXNlZFZlcnRp
Y2FsVmFsdWVzJikgY29uc3Q7CisgICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gZmxvYXRp
bmdIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRz
JiwgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJikgY29uc3Q7CiAgICAgICAgIENvbnRlbnRXaWR0
aEFuZE1hcmdpbiBmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRI
b3Jpem9udGFsVmFsdWVzJik7CiAKLSAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxp
bmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpvbnRh
bFZhbHVlcyYsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBDb250
ZW50V2lkdGhBbmRNYXJnaW4gaW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gm
LCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYsIE9wdGlvbmFsPFVzZWRWZXJ0aWNhbFZhbHVl
cz4gPSBXVEY6Om51bGxvcHQpIGNvbnN0OworICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IGlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OworICAgICAg
ICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYsIGNvbnN0IFZlcnRpY2FsQ29uc3Ry
YWludHMmKSBjb25zdDsKIAotICAgICAgICBMYXlvdXRTaXplIGluRmxvd1Bvc2l0aW9uZWRQb3Np
dGlvbk9mZnNldChjb25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYpIGNvbnN0
OworICAgICAgICBMYXlvdXRTaXplIGluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKIAotICAgICAgICBD
b250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiwgY29uc3Qg
VXNlZEhvcml6b250YWxWYWx1ZXMmLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmKSBjb25zdDsK
KyAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBjb21wbGljYXRlZENhc2VzKGNvbnN0IEJv
eCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVl
cyYpIGNvbnN0OwogICAgICAgICBMYXlvdXRVbml0IHNocmlua1RvRml0V2lkdGgoY29uc3QgQm94
JiwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CiAKICAgICAgICAgRWRnZXMgY29tcHV0ZWRC
b3JkZXIoY29uc3QgQm94JikgY29uc3Q7Ci0gICAgICAgIE9wdGlvbmFsPEVkZ2VzPiBjb21wdXRl
ZFBhZGRpbmcoY29uc3QgQm94JiwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmKSBjb25zdDsK
KyAgICAgICAgT3B0aW9uYWw8RWRnZXM+IGNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmLCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKIAotICAgICAgICBDb21wdXRlZEhvcml6
b250YWxNYXJnaW4gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IFVz
ZWRIb3Jpem9udGFsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENvbXB1dGVkVmVydGljYWxNYXJn
aW4gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpvbnRh
bFZhbHVlcyYpIGNvbnN0OworICAgICAgICBDb21wdXRlZEhvcml6b250YWxNYXJnaW4gY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYpIGNvbnN0OworICAgICAgICBDb21wdXRlZFZlcnRpY2FsTWFyZ2luIGNvbXB1dGVkVmVydGlj
YWxNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7
CiAKICAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhj
b25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHksIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpIGNvbnN0OwogICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBmaXhlZFZhbHVlKGNv
bnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSkgY29uc3Q7CkBAIC0xNjEsMTkgKzE2MSwxOSBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5n
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNh
bEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiwgY29uc3Qg
VXNlZFZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIEhvcml6b250YWxHZW9tZXRyeSBv
dXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBVc2Vk
SG9yaXpvbnRhbFZhbHVlcyYsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OworICAg
ICAgICBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBVc2VkVmVydGlj
YWxWYWx1ZXMmKSBjb25zdDsKKyAgICAgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd1Jl
cGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFs
VmFsdWVzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYpIGNvbnN0OwogCi0gICAgICAgIFZl
cnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0
IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiwgY29uc3QgVXNlZFZlcnRpY2FsVmFs
dWVzJikgY29uc3Q7CisgICAgICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFj
ZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwogICAgICAgICBIb3Jpem9udGFs
R2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94
JiwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmKTsKIAotICAgICAgICBDb250ZW50SGVpZ2h0
QW5kTWFyZ2luIGZsb2F0aW5nUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29u
c3QgVXNlZEhvcml6b250YWxWYWx1ZXMmLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmKSBjb25z
dDsKKyAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBmbG9hdGluZ1JlcGxhY2VkSGVpZ2h0
QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0
IFVzZWRWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwogICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJn
aW4gZmxvYXRpbmdSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRI
b3Jpem9udGFsVmFsdWVzJikgY29uc3Q7CiAKICAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2lu
IGZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBVc2Vk
SG9yaXpvbnRhbFZhbHVlcyYpOwogCi0gICAgICAgIExheW91dFVuaXQgc3RhdGljVmVydGljYWxQ
b3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgQm94JiwgY29uc3QgVXNlZFZlcnRp
Y2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIExheW91dFVuaXQgc3RhdGljSG9yaXpvbnRhbFBv
c2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyYpIGNvbnN0OworICAgICAgICBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9z
aXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmKSBjb25zdDsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9z
aXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYpIGNvbnN0OwogCiAgICAgICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBt
X2Zvcm1hdHRpbmdDb250ZXh0OwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggMjZkNjNiMjlhZmJjZmM3NmM3
M2YzOWZkMWRjMTBkZTE2OGVlYjY1Ni4uNGE5MTBlMWI2ZTU2N2NmYWE2OTY1MWU4MjExZjZhNzIx
MmJjMDk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29u
dGV4dEdlb21ldHJ5LmNwcApAQCAtMjEyLDcgKzIxMiw3IEBAIE9wdGlvbmFsPExheW91dFVuaXQ+
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNYXhXaWR0aChjb25zdCBCb3gm
IGxhCiAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8obGF5b3V0Qm94LnN0eWxlKCku
bG9naWNhbE1heFdpZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKIH0KIAotTGF5b3V0VW5p
dCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JP
dXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBVc2VkVmVydGlj
YWxWYWx1ZXMmIHVzZWRWZXJ0aWNhbFZhbHVlcykgY29uc3QKK0xheW91dFVuaXQgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9z
aXRpb25lZChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYg
dmVydGljYWxDb25zdHJhaW50cykgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpKTsKIApAQCAtMjQ0LDEwICsyNDQsMTAgQEAgTGF5b3V0VW5pdCBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRP
ZkZsb3dQb3NpdGkKICAgICAgICAgQVNTRVJUKCFjb250YWluZXItPmlzUG9zaXRpb25lZCgpIHx8
IGxheW91dEJveC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKICAgICB9CiAgICAgLy8gTW92ZSB0aGUg
c3RhdGljIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5
IHNwZWNpZmljIHRvIGFib2x1dGVseSBwb3NpdGlvbmVkIGJveGVzLgotICAgIHJldHVybiB0b3Ag
LSB1c2VkVmVydGljYWxWYWx1ZXMuY29uc3RyYWludHMubG9naWNhbFRvcDsKKyAgICByZXR1cm4g
dG9wIC0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOwogfQogCi1MYXlvdXRVbml0IEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0
T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVXNlZEhvcml6b250
YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdAorTGF5b3V0VW5pdCBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxv
d1Bvc2l0aW9uZWQoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAogewogICAgIEFTU0VSVChsYXlvdXRC
b3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwogICAgIC8vIFNlZSBzdGF0aWNWZXJ0aWNhbFBv
c2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZCBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN0
YXRpYyBwb3NpdGlvbi4KQEAgLTI2Nyw3ICsyNjcsNyBAQCBMYXlvdXRVbml0IEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9z
aQogICAgICAgICBBU1NFUlQoIWNvbnRhaW5lci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94
LmlzRml4ZWRQb3NpdGlvbmVkKCkpOwogICAgIH0KICAgICAvLyBNb3ZlIHRoZSBzdGF0aWMgcG9z
aXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhZGRpbmcgYm94LiBUaGlzIGlzIHZlcnkgc3BlY2lmaWMg
dG8gYWJvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMuCi0gICAgcmV0dXJuIGxlZnQgLSB1c2VkSG9y
aXpvbnRhbFZhbHVlcy5jb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKKyAgICByZXR1cm4gbGVmdCAt
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKIH0KIAogTGF5b3V0VW5pdCBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnNocmlua1RvRml0V2lkdGgoY29uc3QgQm94JiBmb3Jt
YXR0aW5nUm9vdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKQEAgLTI5NSw3ICsyOTUsNyBA
QCBMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0
aChjb25zdCBCb3gmIGZvcm1hdHRpbmdSbwogICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heChp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2YWlsYWJsZVdpZHRoKSwgaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtKTsKIH0KIAotVmVydGljYWxHZW9tZXRyeSBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9t
ZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVz
ZWRIb3Jpem9udGFsVmFsdWVzLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmIHVzZWRWZXJ0aWNh
bFZhbHVlcykgY29uc3QKK1ZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmIHVzZWRWZXJ0aWNhbFZhbHVlcykgY29uc3QKIHsK
ICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFsYXlvdXRC
b3gucmVwbGFjZWQoKSk7CiAgICAgQVNTRVJUKHVzZWRWZXJ0aWNhbFZhbHVlcy5jb25zdHJhaW50
cy5sb2dpY2FsSGVpZ2h0KTsKQEAgLTMyOCwxMiArMzI4LDEyIEBAIFZlcnRpY2FsR2VvbWV0cnkg
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2Fs
R2VvbWV0CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7
CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSAqdXNlZFZlcnRpY2FsVmFsdWVzLmNv
bnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQ7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9
IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKKyAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0
aDsKIAogICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5sb2dpY2Fs
VG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVk
VmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0
aCk7CiAgICAgYXV0byBoZWlnaHQgPSB1c2VkVmVydGljYWxWYWx1ZXMuaGVpZ2h0ID8gdXNlZFZl
cnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRDb250ZW50SGVpZ2h0KGxheW91
dEJveCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxN
YXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRI
b3Jpem9udGFsVmFsdWVzKTsKKyAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9t
ZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJh
aW50cyk7CiAgICAgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgdXNlZFZl
cnRpY2FsTWFyZ2luOyAKICAgICBhdXRvIHBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5wYWRkaW5n
VG9wKCkudmFsdWVPcigwKTsKICAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBib3hHZW9tZXRyeS5w
YWRkaW5nQm90dG9tKCkudmFsdWVPcigwKTsKQEAgLTM0MSw3ICszNDEsNyBAQCBWZXJ0aWNhbEdl
b21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRW
ZXJ0aWNhbEdlb21ldAogICAgIGF1dG8gYm9yZGVyQm90dG9tID0gYm94R2VvbWV0cnkuYm9yZGVy
Qm90dG9tKCk7CiAKICAgICBpZiAoIXRvcCAmJiAhaGVpZ2h0ICYmICFib3R0b20pCi0gICAgICAg
IHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91
dEJveCwgdXNlZFZlcnRpY2FsVmFsdWVzKTsKKyAgICAgICAgdG9wID0gc3RhdGljVmVydGljYWxQ
b3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCB1c2VkVmVydGljYWxWYWx1
ZXMuY29uc3RyYWludHMpOwogCiAgICAgaWYgKHRvcCAmJiBoZWlnaHQgJiYgYm90dG9tKSB7CiAg
ICAgICAgIGlmICghY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgJiYgIWNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYWZ0ZXIpIHsKQEAgLTM3MCw3ICszNzAsNyBAQCBWZXJ0aWNhbEdlb21ldHJ5
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNh
bEdlb21ldAogCiAgICAgaWYgKCF0b3AgJiYgIWJvdHRvbSAmJiBoZWlnaHQpIHsKICAgICAgICAg
Ly8gIzIKLSAgICAgICAgdG9wID0gc3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bv
c2l0aW9uZWQobGF5b3V0Qm94LCB1c2VkVmVydGljYWxWYWx1ZXMpOworICAgICAgICB0b3AgPSBz
dGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHVz
ZWRWZXJ0aWNhbFZhbHVlcy5jb25zdHJhaW50cyk7CiAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdp
biA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CiAgICAgICAgIGJvdHRvbSA9IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJv
cmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJv
dHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcik7CiAgICAgfQpAQCAtNDUzLDcgKzQ1Myw3
IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9m
Rmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAgICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1
ZUlmTm90QXV0byhzdHlsZS5sb2dpY2FsTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAg
ICAgYXV0byByaWdodCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFJpZ2h0
KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBhdXRvIHdpZHRoID0gdXNlZEhvcml6b250
YWxWYWx1ZXMud2lkdGggPyB1c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkQ29u
dGVudFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICBhdXRvIGNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0
Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb25zdHJhaW50cyk7CiAgICAgVXNlZEhvcml6b250
YWxNYXJnaW4gdXNlZEhvcml6b250YWxNYXJnaW47CiAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJv
eEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKICAgICBhdXRvIHBhZGRpbmdSaWdo
dCA9IGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CkBAIC00NjUsNyArNDY1
LDcgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2UKICAgICAgICAgLy8gcG9zaXRpb24gYW5kIGFw
cGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93OyBvdGhlcndpc2UsIHNldCAncmlnaHQnIHRvIHRo
ZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIG9uZSBiZWxvdy4KICAgICAg
ICAgdXNlZEhvcml6b250YWxNYXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsK
IAotICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250
YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRh
bFZhbHVlcyk7CisgICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHVzZWRI
b3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzKTsKICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24pCiAgICAgICAgICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwog
ICAgICAgICBlbHNlCkBAIC01MTcsNyArNTE3LDcgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2UK
ICAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFy
Z2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1Jp
Z2h0ICArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsK
ICAgICB9IGVsc2UgaWYgKCFsZWZ0ICYmICFyaWdodCAmJiB3aWR0aCkgewogICAgICAgICAvLyAj
MgotICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250
YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRh
bFZhbHVlcyk7CisgICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHVzZWRI
b3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzKTsKICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24pIHsKICAgICAgICAgICAgIGxlZnQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247
CiAgICAgICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lk
dGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCk7CkBAIC01NTcsNyArNTU3LDcgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2UKICAgICByZXR1
cm4geyAqbGVmdCwgKnJpZ2h0LCB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxNYXJnaW4sIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiB9IH07CiB9CiAKLVZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1c2VkSG9yaXpv
bnRhbFZhbHVlcywgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJiB1c2VkVmVydGljYWxWYWx1ZXMp
IGNvbnN0CitWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVXNl
ZFZlcnRpY2FsVmFsdWVzJiB1c2VkVmVydGljYWxWYWx1ZXMpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQo
KSk7CiAgICAgQVNTRVJUKHVzZWRWZXJ0aWNhbFZhbHVlcy5jb25zdHJhaW50cy5sb2dpY2FsSGVp
Z2h0KTsKQEAgLTU3NiwxMiArNTc2LDEyIEBAIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoCiAgICAg
YXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAgICAgYXV0byBj
b250YWluaW5nQmxvY2tIZWlnaHQgPSAqdXNlZFZlcnRpY2FsVmFsdWVzLmNvbnN0cmFpbnRzLmxv
Z2ljYWxIZWlnaHQ7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRIb3Jpem9u
dGFsVmFsdWVzLmNvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKKyAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKIAogICAgIGF1
dG8gdG9wID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5sb2dpY2FsVG9wKCksIGNvbnRh
aW5pbmdCbG9ja1dpZHRoKTsKICAgICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1
dG8oc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0
byBoZWlnaHQgPSBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRI
b3Jpem9udGFsVmFsdWVzLCB1c2VkVmVydGljYWxWYWx1ZXMpLmNvbnRlbnRIZWlnaHQ7Ci0gICAg
YXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxN
YXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgYXV0byBoZWlnaHQg
PSBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cywgdXNlZFZlcnRpY2FsVmFsdWVzKS5jb250ZW50SGVpZ2h0OworICAgIGF1dG8gY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxh
eW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKICAgICBPcHRpb25hbDxMYXlvdXRVbml0
PiB1c2VkTWFyZ2luQmVmb3JlID0gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmU7CiAgICAg
T3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkFmdGVyID0gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5hZnRlcjsKICAgICBhdXRvIHBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5wYWRkaW5nVG9w
KCkudmFsdWVPcigwKTsKQEAgLTU5MSw3ICs1OTEsNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5
KAogCiAgICAgaWYgKCF0b3AgJiYgIWJvdHRvbSkgewogICAgICAgICAvLyAjMQotICAgICAgICB0
b3AgPSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRC
b3gsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CisgICAgICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9z
aXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCwgdXNlZFZlcnRpY2FsVmFsdWVz
LmNvbnN0cmFpbnRzKTsKICAgICB9CiAKICAgICBpZiAoIWJvdHRvbSkgewpAQCAtNjM5LDcgKzYz
OSw3IEBAIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRP
ZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoCiAgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRv
bSwgeyBoZWlnaHQsIHsgKnVzZWRNYXJnaW5CZWZvcmUsICp1c2VkTWFyZ2luQWZ0ZXIgfSB9IH07
CiB9CiAKLUhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91
dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxWYWx1ZXMsIGNvbnN0IFVz
ZWRWZXJ0aWNhbFZhbHVlcyYgdXNlZFZlcnRpY2FsVmFsdWVzKSBjb25zdAorSG9yaXpvbnRhbEdl
b21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jp
em9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jpem9udGFs
VmFsdWVzJiB1c2VkSG9yaXpvbnRhbFZhbHVlcywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYg
dmVydGljYWxDb25zdHJhaW50cykgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsKIApAQCAtNjY1LDEw
ICs2NjUsMTAgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKIAogICAgIGF1dG8gbGVmdCA9IGNv
bXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbExlZnQoKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOwogICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxv
Z2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91
dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVz
ZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzKTsKICAgICBPcHRpb25hbDxMYXlvdXRVbml0
PiB1c2VkTWFyZ2luU3RhcnQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CiAgICAg
T3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkVuZCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQ7Ci0gICAgYXV0byB3aWR0aCA9IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4o
bGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcywgdXNlZFZlcnRpY2FsVmFsdWVzKS5jb250
ZW50V2lkdGg7CisgICAgYXV0byB3aWR0aCA9IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4o
bGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcywgdmVydGljYWxDb25zdHJhaW50cykuY29u
dGVudFdpZHRoOwogICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9tZXRyeS5wYWRkaW5nTGVm
dCgpLnZhbHVlT3IoMCk7CiAgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRk
aW5nUmlnaHQoKS52YWx1ZU9yKDApOwogICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5
LmJvcmRlckxlZnQoKTsKQEAgLTY3Niw3ICs2NzYsNyBAQCBIb3Jpem9udGFsR2VvbWV0cnkgRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9t
ZQogCiAgICAgaWYgKCFsZWZ0ICYmICFyaWdodCkgewogICAgICAgICAvLyAjMQotICAgICAgICBh
dXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZv
ck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7Cisg
ICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBv
c2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFs
dWVzLmNvbnN0cmFpbnRzKTsKICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCiAg
ICAgICAgICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwogICAgICAgICBlbHNl
CkBAIC03NDMsNyArNzQzLDcgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKICAgICByZXR1cm4g
eyAqbGVmdCwgKnJpZ2h0LCB7IHdpZHRoLCB7ICp1c2VkTWFyZ2luU3RhcnQsICp1c2VkTWFyZ2lu
RW5kIH0sIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiB9IH07CiB9CiAKLUNvbnRlbnRIZWlnaHRB
bmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6
b250YWxWYWx1ZXMsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYgdXNlZFZlcnRpY2FsVmFsdWVz
KSBjb25zdAorQ29udGVudEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBVc2VkVmVydGljYWxW
YWx1ZXMmIHVzZWRWZXJ0aWNhbFZhbHVlcykgY29uc3QKIHsKICAgICBBU1NFUlQoIWxheW91dEJv
eC5yZXBsYWNlZCgpKTsKICAgICAvLyBUT0RPOiBVc2UgY29tcGxpY2F0ZWQtY2FzZSBmb3IgZG9j
dW1lbnQgcmVuZGVyZXIgZm9yIG5vdyAoc2VlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pLgpAQCAtNzU5LDcgKzc1OSw3IEBAIENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENh
c2VzKGNvbnN0IEJveCYKICAgICAvLyAyLiBJZiAnaGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWln
aHQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudCdzIGRlc2NlbmRhbnRzIHBlciAxMC42LjcuCiAKICAg
ICBhdXRvIGhlaWdodCA9IHVzZWRWZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyB1c2VkVmVydGljYWxW
YWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZENvbnRlbnRIZWlnaHQobGF5b3V0Qm94KTsK
LSAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICBhdXRvIGNv
bXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihs
YXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgLy8gIzEKICAgICBhdXRvIHVz
ZWRWZXJ0aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVz
IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07IAogICAgIC8vICMyCkBAIC03ODMsNyArNzgz
LDcgQEAgQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
ZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRoQW5kTWEKICAgICAvLyAxLiBJZiAnbWFyZ2luLWxlZnQn
LCBvciAnbWFyZ2luLXJpZ2h0JyBhcmUgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0aGVpciB1c2VkIHZh
bHVlIGlzICcwJy4KICAgICAvLyAyLiBJZiAnd2lkdGgnIGlzIGNvbXB1dGVkIGFzICdhdXRvJywg
dGhlIHVzZWQgdmFsdWUgaXMgdGhlICJzaHJpbmstdG8tZml0IiB3aWR0aC4KIAotICAgIGF1dG8g
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICBhdXRvIGNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5
b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb25zdHJhaW50cyk7CiAKICAgICAvLyAjMQog
ICAgIGF1dG8gdXNlZEhvcml6b250YWxsTWFyZ2luID0gVXNlZEhvcml6b250YWxNYXJnaW4geyBj
b21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CkBAIC03OTYsMTQgKzc5NiwxNCBAQCBDb250ZW50
V2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ05vblJl
cGxhY2VkV2lkdGhBbmRNYQogICAgIHJldHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyAqd2lk
dGgsIHVzZWRIb3Jpem9udGFsbE1hcmdpbiwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luIH07CiB9
CiAKLUNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpm
bG9hdGluZ1JlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxWYWx1ZXMsIGNvbnN0IFVzZWRW
ZXJ0aWNhbFZhbHVlcyYgdXNlZFZlcnRpY2FsVmFsdWVzKSBjb25zdAorQ29udGVudEhlaWdodEFu
ZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRIZWln
aHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmIHVz
ZWRWZXJ0aWNhbFZhbHVlcykgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRp
bmdQb3NpdGlvbmVkKCkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCiAgICAgLy8gMTAuNi4y
IElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMg
aW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCiAgICAgLy8gcmVwbGFjZWQgZWxlbWVudHMg
aW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRzCiAgICAgTE9HX1dJ
VEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01h
cmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFjZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUgcmVwbGFj
ZWQiKTsKLSAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94
LCB1c2VkSG9yaXpvbnRhbFZhbHVlcywgdXNlZFZlcnRpY2FsVmFsdWVzKTsKKyAgICByZXR1cm4g
aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludHMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CiB9CiAKIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRXaWR0aEFuZE1hcmdp
bihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRI
b3Jpem9udGFsVmFsdWVzKSBjb25zdApAQCAtODE0LDM4ICs4MTQsMzggQEAgQ29udGVudFdpZHRo
QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZFdp
ZHRoQW5kTWFyZ2kKICAgICAvLwogICAgIC8vIDEuIElmICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdp
bi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcu
CiAgICAgLy8gMi4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZv
ciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgdXNl
ZEhvcml6b250YWxWYWx1ZXMpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0g
R2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9u
dGFsVmFsdWVzLmNvbnN0cmFpbnRzKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5n
Q29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGZsb2F0aW5nIHJl
cGxhY2VkIC0+IHJlZGlyZWN0ZWQgdG8gaW5saW5lIHJlcGxhY2VkIik7CiAgICAgYXV0byB1c2Vk
TWFyZ2luID0gVXNlZEhvcml6b250YWxNYXJnaW4geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
c3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDAp
IH07Ci0gICAgcmV0dXJuIGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBV
c2VkSG9yaXpvbnRhbFZhbHVlcyB7IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzLCB1
c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0aCwgdXNlZE1hcmdpbiB9KTsKKyAgICByZXR1cm4gaW5s
aW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVz
IHsgdXNlZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMsIHVzZWRIb3Jpem9udGFsVmFsdWVz
LndpZHRoLCB1c2VkTWFyZ2luIH0sIHsgfSk7CiB9CiAKLVZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJv
eCYgbGF5b3V0Qm94LCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxW
YWx1ZXMsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYgdXNlZFZlcnRpY2FsVmFsdWVzKSBjb25z
dAorVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxv
d1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBVc2VkVmVydGljYWxWYWx1
ZXMmIHVzZWRWZXJ0aWNhbFZhbHVlcykgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94Lmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKIAogICAgIGlmICghbGF5b3V0Qm94LnJlcGxhY2VkKCkp
Ci0gICAgICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkobGF5
b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcywgdXNlZFZlcnRpY2FsVmFsdWVzKTsKLSAgICBy
ZXR1cm4gb3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGxheW91dEJveCwgdXNlZEhv
cml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CisgICAgICAgIHJldHVybiBvdXRP
ZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkobGF5b3V0Qm94LCBob3Jpem9udGFsQ29u
c3RyYWludHMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CisgICAgcmV0dXJuIG91dE9mRmxvd1JlcGxh
Y2VkVmVydGljYWxHZW9tZXRyeShsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgdXNl
ZFZlcnRpY2FsVmFsdWVzKTsKIH0KIAotSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxWYWx1ZXMs
IGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYgdXNlZFZlcnRpY2FsVmFsdWVzKQorSG9yaXpvbnRh
bEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93SG9yaXpvbnRh
bEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVl
cyYgdXNlZEhvcml6b250YWxWYWx1ZXMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRp
Y2FsQ29uc3RyYWludHMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSk7CiAKICAgICBpZiAoIWxheW91dEJveC5yZXBsYWNlZCgpKQogICAgICAgICByZXR1
cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkobGF5b3V0Qm94LCB1c2Vk
SG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIG91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRh
bEdlb21ldHJ5KGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZh
bHVlcyk7CisgICAgcmV0dXJuIG91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGxh
eW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHZlcnRpY2FsQ29uc3RyYWludHMpOwogfQog
Ci1Db250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zmxv
YXRpbmdIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jp
em9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbnRhbFZhbHVlcywgY29uc3QgVXNlZFZlcnRpY2FsVmFs
dWVzJiB1c2VkVmVydGljYWxWYWx1ZXMpIGNvbnN0CitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmIHVzZWRWZXJ0aWNhbFZhbHVlcykg
Y29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwog
CiAgICAgaWYgKCFsYXlvdXRCb3gucmVwbGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGNvbXBsaWNh
dGVkQ2FzZXMobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcywgdXNlZFZlcnRpY2FsVmFs
dWVzKTsKLSAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRC
b3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzLCB1c2VkVmVydGljYWxWYWx1ZXMpOworICAgICAgICBy
ZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywg
dXNlZFZlcnRpY2FsVmFsdWVzKTsKKyAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZEhlaWdodEFu
ZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgdXNlZFZlcnRpY2FsVmFs
dWVzKTsKIH0KIAogQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6ZmxvYXRpbmdXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
VXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzKQpAQCAtODU3LDcgKzg1
Nyw3IEBAIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmZsb2F0aW5nV2lkdGhBbmRNYXJnaW4oY29uc3QKICAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogfQogCi1D
b250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5l
UmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRI
b3Jpem9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbnRhbFZhbHVlcywgY29uc3QgVXNlZFZlcnRpY2Fs
VmFsdWVzJiB1c2VkVmVydGljYWxWYWx1ZXMpIGNvbnN0CitDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJn
aW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9y
aXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmIHVzZWRWZXJ0aWNh
bFZhbHVlcykgY29uc3QKIHsKICAgICBBU1NFUlQoKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3gu
aXNJbkZsb3coKSkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCkBAIC04NzMsNyArODczLDcg
QEAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Omlu
bGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2kKIAogICAgIC8vICMxCiAgICAgYXV0byYgZm9ybWF0
dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8gY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91
dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOworICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzKTsKICAgICBhdXRvIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IFVzZWRWZXJ0
aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5i
ZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDAp
IH07CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAgICBhdXRvIHJlcGxh
Y2VkID0gbGF5b3V0Qm94LnJlcGxhY2VkKCk7CkBAIC05MDMsNyArOTAzLDcgQEAgQ29udGVudEhl
aWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2Vk
SGVpZ2h0QW5kTWFyZ2kKICAgICByZXR1cm4geyAqaGVpZ2h0LCB1c2VkVmVydGljYWxNYXJnaW4g
fTsKIH0KIAotQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6aW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29u
c3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzLCBPcHRpb25hbDxV
c2VkVmVydGljYWxWYWx1ZXM+IHVzZWRWZXJ0aWNhbFZhbHVlcykgY29uc3QKK0NvbnRlbnRXaWR0
aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkV2lk
dGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFs
dWVzJiB1c2VkSG9yaXpvbnRhbFZhbHVlcywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVy
dGljYWxDb25zdHJhaW50cykgY29uc3QKIHsKICAgICBBU1NFUlQoKGxheW91dEJveC5pc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBs
YXlvdXRCb3guaXNJbkZsb3coKSkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCkBAIC05MjYs
NyArOTI2LDcgQEAgQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbigKICAgICAvLyA1LiBPdGhlcndpc2Us
IGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0
aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0
aCcgYmVjb21lcyAzMDBweC4KICAgICAvLyAgICBJZiAzMDBweCBpcyB0b28gd2lkZSB0byBmaXQg
dGhlIGRldmljZSwgVUFzIHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHJlY3Rh
bmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbyBhbmQgZml0cyB0aGUgZGV2aWNlIGluc3RlYWQuCiAK
LSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhv
cml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgYXV0
byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luKGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMpOwogCiAg
ICAgYXV0byB1c2VkTWFyZ2luU3RhcnQgPSBbJl0gewogICAgICAgICBpZiAodXNlZEhvcml6b250
YWxWYWx1ZXMubWFyZ2luKQpAQCAtOTQ1LDcgKzk0NSw3IEBAIENvbnRlbnRXaWR0aEFuZE1hcmdp
biBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJn
aW4oCiAKICAgICBhdXRvIHdpZHRoID0gdXNlZEhvcml6b250YWxWYWx1ZXMud2lkdGggPyB1c2Vk
SG9yaXpvbnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkQ29udGVudFdpZHRoKGxheW91dEJveCwg
dXNlZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKICAgICBhdXRv
IGhlaWdodElzQXV0byA9IGlzSGVpZ2h0QXV0byhsYXlvdXRCb3gpOwotICAgIGF1dG8gaGVpZ2h0
ID0gY29tcHV0ZWRDb250ZW50SGVpZ2h0KGxheW91dEJveCwgdXNlZFZlcnRpY2FsVmFsdWVzID8g
dXNlZFZlcnRpY2FsVmFsdWVzLT5jb25zdHJhaW50cy5sb2dpY2FsSGVpZ2h0IDogV1RGOjpudWxs
b3B0KTsKKyAgICBhdXRvIGhlaWdodCA9IGNvbXB1dGVkQ29udGVudEhlaWdodChsYXlvdXRCb3gs
IHZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodCk7CiAKICAgICBpZiAoIXdpZHRoICYm
IGhlaWdodElzQXV0byAmJiByZXBsYWNlZC0+aGFzSW50cmluc2ljV2lkdGgoKSkgewogICAgICAg
ICAvLyAjMQpAQCAtOTcyLDcgKzk3Miw3IEBAIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oCiAgICAg
cmV0dXJuIHsgKndpZHRoLCB7IHVzZWRNYXJnaW5TdGFydCgpLCB1c2VkTWFyZ2luRW5kKCkgfSwg
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luIH07CiB9CiAKLUxheW91dFNpemUgRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbnRhbFZh
bHVlcykgY29uc3QKK0xheW91dFNpemUgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZs
b3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAogewogICAg
IEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpOwogCkBAIC05ODYsNyArOTg2
LDcgQEAgTGF5b3V0U2l6ZSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0
aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBCb3gKICAgICAvLyAzLiBJZiBuZWl0aGVyIGlzICdh
dXRvJywgJ2JvdHRvbScgaXMgaWdub3JlZCAoaS5lLiwgdGhlIHVzZWQgdmFsdWUgb2YgJ2JvdHRv
bScgd2lsbCBiZSBtaW51cyB0aGUgdmFsdWUgb2YgJ3RvcCcpLgogCiAgICAgYXV0byYgc3R5bGUg
PSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNl
ZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMubG9naWNhbFdpZHRoOworICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwog
CiAgICAgYXV0byB0b3AgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxUb3Ao
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwogICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1
ZUlmTm90QXV0byhzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
QEAgLTEwNTcsMTMgKzEwNTcsMTMgQEAgRWRnZXMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
Ojpjb21wdXRlZEJvcmRlcihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKICAgICB9OwogfQog
Ci1PcHRpb25hbDxFZGdlcz4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFBh
ZGRpbmcoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1
c2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3QKK09wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJveCwgY29u
c3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0CiB7
CiAgICAgaWYgKCFsYXlvdXRCb3guaXNQYWRkaW5nQXBwbGljYWJsZSgpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
LSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZEhvcml6b250YWxWYWx1ZXMuY29u
c3RyYWludHMubG9naWNhbFdpZHRoOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBo
b3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwogICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUGFkZGluZ10gLT4gbGF5b3V0Qm94
OiAiIDw8ICZsYXlvdXRCb3gpOwogICAgIHJldHVybiBFZGdlcyB7CiAgICAgICAgIHsgdmFsdWVG
b3JMZW5ndGgoc3R5bGUucGFkZGluZ0xlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCB2YWx1
ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH0s
CkBAIC0xMDcxLDE3ICsxMDcxLDE3IEBAIE9wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJvCiAgICAgfTsK
IH0KIAotQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBV
c2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0CitDb21wdXRl
ZEhvcml6b250YWxNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhv
cml6b250YWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAogewogICAgIGF1dG8mIHN0eWxl
ID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IHVz
ZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKKyAgICBhdXRvIGNv
bnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsK
ICAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLm1hcmdpblN0YXJ0KCks
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJn
aW5FbmQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07CiB9CiAKLUNvbXB1dGVkVmVydGljYWxN
YXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhv
cml6b250YWxWYWx1ZXMpIGNvbnN0CitDb21wdXRlZFZlcnRpY2FsTWFyZ2luIEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25zdCBCb3gmIGxheW91
dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMp
IGNvbnN0CiB7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMu
bG9naWNhbFdpZHRoOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFs
Q29uc3RyYWludHMubG9naWNhbFdpZHRoOwogICAgIHJldHVybiB7IGNvbXB1dGVkVmFsdWVJZk5v
dEF1dG8oc3R5bGUubWFyZ2luQmVmb3JlKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0
ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5BZnRlcigpLCBjb250YWluaW5nQmxvY2tXaWR0
aCkgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdD
b250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dFF1aXJrcy5jcHAKaW5kZXggMDkzYzJkODJjMDU1MmZkODViYjQ5MzZiMTJlNDJiZTYwMzMxODI2
Zi4uZWNiMjMwZjE2ZjhmNmI0OGVlMDBjMjgyZDc1YjIyMzE0NjNmNzFhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCkBAIC01MSw4
ICs1MSw4IEBAIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6aGVpZ2h0VmFs
dWVPZk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4CiAgICAgICAgICAgICBhdXRvJiBib3hH
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluaW5nQmxv
Y2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NBbmNlc3RvckZvcm1hdHRp
bmdDb250ZXh0KTsKIAogICAgICAgICAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJv
eCA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluaW5nQmxvY2stPmNv
bnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzQW5j
ZXN0b3JGb3JtYXR0aW5nQ29udGV4dCk7Ci0gICAgICAgICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBV
c2VkSG9yaXpvbnRhbFZhbHVlcyB7IEdlb21ldHJ5Ojpob3Jpem9udGFsQ29uc3RyYWludHNGb3JJ
bkZsb3coY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCkgfTsKLSAgICAgICAgICAgIGF1dG8gdmVy
dGljYWxNYXJnaW4gPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeSgpLmNvbXB1dGVkVmVydGlj
YWxNYXJnaW4oKmNvbnRhaW5pbmdCbG9jaywgdXNlZFZhbHVlcyk7CisgICAgICAgICAgICBhdXRv
IGhvcml6b250YWxDb25zdHJhaW50cyA9IEdlb21ldHJ5Ojpob3Jpem9udGFsQ29uc3RyYWludHNG
b3JJbkZsb3coY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCk7CisgICAgICAgICAgICBhdXRvIHZl
cnRpY2FsTWFyZ2luID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnkoKS5jb21wdXRlZFZlcnRp
Y2FsTWFyZ2luKCpjb250YWluaW5nQmxvY2ssIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAg
ICAgICAgICBhdXRvIHZlcnRpY2FsUGFkZGluZyA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52
YWx1ZU9yKDApICsgYm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7CiAgICAg
ICAgICAgICBhdXRvIHZlcnRpY2FsQm9yZGVyID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBi
b3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKICAgICAgICAgICAgIGJvZHlBbmREb2N1bWVudFZl
cnRpY2FsTWFyZ2luUGFkZGluZ0FuZEJvcmRlciArPSB2ZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFs
dWVPcigwKSArIHZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgKyB2ZXJ0aWNhbFBhZGRp
bmcgKyB2ZXJ0aWNhbEJvcmRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9i
bG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4
IDZlYjkzOWI3ZjY1YjE5Y2M3MzY5Yjg0YzA2MTkwMjEwZWIzM2ZmZDIuLjk3ODIwNzk4NjBkMjNk
YTlmNjlhOTkxNTg2ZWIwM2ExNTc2NjQ3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcApAQCAtMjMwLDEyICsyMzAsMTIgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpw
bGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihjb25zdCBCb3gmIGxheW91dEJveCwKICAgICAg
ICAgcmV0dXJuOwogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwg
c3RyZWFtIDw8ICJTdGFydDogbW92ZSBpbi1mbG93IHBvc2l0aW9uZWQgY2hpbGRyZW4gLT4gcGFy
ZW50OiAiIDw8ICZsYXlvdXRCb3gpOwogCi0gICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9
IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgaG9yaXpvbnRhbENvbnN0cmFpbnRzID8gKmhvcml6b250
YWxDb25zdHJhaW50cyA6IEdlb21ldHJ5Ojpob3Jpem9udGFsQ29uc3RyYWludHNGb3JJbkZsb3co
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KSkgfTsKKyAgICBhdXRvIHVzZWRIb3Jpem9udGFsQ29u
c3RyYWludHMgPSBIb3Jpem9udGFsQ29uc3RyYWludHMgeyBob3Jpem9udGFsQ29uc3RyYWludHMg
PyAqaG9yaXpvbnRhbENvbnN0cmFpbnRzIDogR2VvbWV0cnk6Omhvcml6b250YWxDb25zdHJhaW50
c0ZvckluRmxvdyhnZW9tZXRyeUZvckJveChsYXlvdXRCb3gpKSB9OwogICAgIGF1dG8mIGNvbnRh
aW5lciA9IGRvd25jYXN0PENvbnRhaW5lcj4obGF5b3V0Qm94KTsKICAgICBmb3IgKGF1dG8mIGNo
aWxkQm94IDogY2hpbGRyZW5PZlR5cGU8Qm94Pihjb250YWluZXIpKSB7CiAgICAgICAgIGlmICgh
Y2hpbGRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgYXV0byBwb3NpdGlvbk9mZnNldCA9IGdlb21ldHJ5KCkuaW5GbG93UG9zaXRpb25lZFBv
c2l0aW9uT2Zmc2V0KGNoaWxkQm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgIGF1
dG8gcG9zaXRpb25PZmZzZXQgPSBnZW9tZXRyeSgpLmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9m
ZnNldChjaGlsZEJveCwgdXNlZEhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgICAgIGZvcm1h
dHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goY2hpbGRCb3gpLm1vdmUocG9zaXRpb25PZmZzZXQpOwog
ICAgIH0KICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVh
bSA8PCAiRW5kOiBtb3ZlIGluLWZsb3cgcG9zaXRpb25lZCBjaGlsZHJlbiAtPiBwYXJlbnQ6ICIg
PDwgJmxheW91dEJveCk7CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihjb25zdCBCb3gmIGxheW91dEJv
eCwKIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljVmVydGljYWxQ
b3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWlu
dHMpCiB7Ci0gICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldFRv
cChnZW9tZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94LCBVc2VkVmVydGlj
YWxWYWx1ZXMgeyB2ZXJ0aWNhbENvbnN0cmFpbnRzIH0pKTsKKyAgICBmb3JtYXR0aW5nU3RhdGUo
KS5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VG9wKGdlb21ldHJ5KCkuc3RhdGljVmVydGljYWxQ
b3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpKTsKICAgICBpZiAobGF5b3V0
Qm94Lmhhc0Zsb2F0Q2xlYXIoKSkKICAgICAgICAgY29tcHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9z
aXRpb25Gb3JGbG9hdENsZWFyKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94KTsKICAgICBlbHNl
IGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKQpAQCAtMjUyLDcg
KzI1Miw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRp
Y2FsUG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250ZXh0CiAKIHZvaWQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZVN0YXRpY0hvcml6b250YWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91
dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMp
CiB7Ci0gICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldExlZnQo
Z2VvbWV0cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB7IGhvcml6b250YWxDb25zdHJhaW50cyB9KSk7CisgICAgZm9ybWF0dGluZ1N0
YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNIb3Jp
em9udGFsUG9zaXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpKTsKIH0KIAog
dm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljUG9zaXRpb24oY29uc3Qg
RmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cykKQEAgLTI2NCw3ICsyNjQs
NyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNQb3NpdGlvbihj
b25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aQogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCkK
IHsKICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMg
eyBHZW9tZXRyeTo6aG9yaXpvbnRhbENvbnN0cmFpbnRzRm9ySW5GbG93KGdlb21ldHJ5Rm9yQm94
KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpKSB9OwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbiA9IGdlb21ldHJ5KCkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gs
IHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4g
PSBnZW9tZXRyeSgpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcy5jb25zdHJhaW50cyk7CiAgICAgYXV0byB1c2VkTm9uQ29sbGFwc2VkTWFyZ2lu
ID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVy
LnZhbHVlT3IoMCkgfTsKICAgICBhdXRvIGVzdGltYXRlZE1hcmdpbkJlZm9yZSA9IG1hcmdpbkNv
bGxhcHNlKCkuZXN0aW1hdGVkTWFyZ2luQmVmb3JlKGxheW91dEJveCwgdXNlZE5vbkNvbGxhcHNl
ZE1hcmdpbik7CiAgICAgc2V0RXN0aW1hdGVkTWFyZ2luQmVmb3JlKGxheW91dEJveCwgZXN0aW1h
dGVkTWFyZ2luQmVmb3JlKTsKQEAgLTQxNSwyMiArNDE1LDIyIEBAIHZvaWQgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBICiAKIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1h
cmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBo
b3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2Fs
Q29uc3RyYWludHMpCiB7Ci0gICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jp
em9udGFsVmFsdWVzIHsgaG9yaXpvbnRhbENvbnN0cmFpbnRzIH07Ci0gICAgYXV0byBjb21wdXRl
ID0gWyZdKGF1dG8gdXNlZFZlcnRpY2FsVmFsdWVzKSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IHsKKyAgICBhdXRvIGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdo
dCkgLT4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7CisgICAgICAgIGF1dG8gdXNlZFZlcnRpY2Fs
VmFsdWVzID0gVXNlZFZlcnRpY2FsVmFsdWVzIHsgdmVydGljYWxDb25zdHJhaW50cywgdXNlZEhl
aWdodCB9OwogICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2VvbWV0cnkoKS5pbkZsb3dIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9y
aXpvbnRhbFZhbHVlcywgdXNlZFZlcnRpY2FsVmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybiBn
ZW9tZXRyeSgpLmluRmxvd0hlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cywgdXNlZFZlcnRpY2FsVmFsdWVzKTsKIAogICAgICAgICBpZiAobGF5b3V0Qm94Lmlz
RmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5mbG9h
dGluZ0hlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzLCB1c2Vk
VmVydGljYWxWYWx1ZXMpOworICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdI
ZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHVzZWRWZXJ0
aWNhbFZhbHVlcyk7CiAKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8gY29udGVudEhlaWdodEFuZE1hcmdpbiA9IGNv
bXB1dGUoVXNlZFZlcnRpY2FsVmFsdWVzIHsgdmVydGljYWxDb25zdHJhaW50cyB9KTsKKyAgICBh
dXRvIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7CiAgICAgaWYgKGF1dG8g
bWF4SGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gpKSB7CiAg
ICAgICAgIGlmIChjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPiAqbWF4SGVp
Z2h0KSB7Ci0gICAgICAgICAgICBhdXRvIG1heEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUoVXNl
ZFZlcnRpY2FsVmFsdWVzIHsgdmVydGljYWxDb25zdHJhaW50cywgbWF4SGVpZ2h0IH0pOworICAg
ICAgICAgICAgYXV0byBtYXhIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKG1heEhlaWdodCk7CiAg
ICAgICAgICAgICAvLyBVc2VkIGhlaWdodCBzaG91bGQgcmVtYWluIHRoZSBzYW1lLgogICAgICAg
ICAgICAgQVNTRVJUKChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpICYmIChsYXlvdXRCb3gu
aXNCb2R5Qm94KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkpIHx8IG1heEhlaWdodEFu
ZE1hcmdpbi5jb250ZW50SGVpZ2h0ID09ICptYXhIZWlnaHQpOwogICAgICAgICAgICAgY29udGVu
dEhlaWdodEFuZE1hcmdpbiA9IHsgKm1heEhlaWdodCwgbWF4SGVpZ2h0QW5kTWFyZ2luLm5vbkNv
bGxhcHNlZE1hcmdpbiB9OwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29u
c3QKIAogICAgIGlmIChhdXRvIG1pbkhlaWdodCA9IGdlb21ldHJ5KCkuY29tcHV0ZWRNaW5IZWln
aHQobGF5b3V0Qm94KSkgewogICAgICAgICBpZiAoY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250
ZW50SGVpZ2h0IDwgKm1pbkhlaWdodCkgewotICAgICAgICAgICAgYXV0byBtaW5IZWlnaHRBbmRN
YXJnaW4gPSBjb21wdXRlKFVzZWRWZXJ0aWNhbFZhbHVlcyB7IHZlcnRpY2FsQ29uc3RyYWludHMs
IG1pbkhlaWdodCB9KTsKKyAgICAgICAgICAgIGF1dG8gbWluSGVpZ2h0QW5kTWFyZ2luID0gY29t
cHV0ZShtaW5IZWlnaHQpOwogICAgICAgICAgICAgLy8gVXNlZCBoZWlnaHQgc2hvdWxkIHJlbWFp
biB0aGUgc2FtZS4KICAgICAgICAgICAgIEFTU0VSVCgobGF5b3V0U3RhdGUoKS5pblF1aXJrc01v
ZGUoKSAmJiAobGF5b3V0Qm94LmlzQm9keUJveCgpIHx8IGxheW91dEJveC5pc0RvY3VtZW50Qm94
KCkpKSB8fCBtaW5IZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA9PSAqbWluSGVpZ2h0KTsK
ICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSB7ICptaW5IZWlnaHQsIG1pbkhl
aWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4gfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0LmgKaW5kZXggZTNmNzg1Zjg5N2MxZDdjODBiZmJmZjRjOTQ1NWY3Mjk4ZmEyNDhmOC4uOWFi
OGRkYWY1NTYxNGRhOWZhNmU2NDY3MTQ4ZWM3MTk5NjExYjQ5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0LmgKQEAgLTc0LDEyICs3NCwxMiBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgY2xh
c3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nIGZvciBib3hlcyBwYXJ0aWNpcGF0
aW5nIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LgogICAgIGNsYXNzIEdlb21ldHJ5IDog
cHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSB7CiAgICAgcHVibGljOgotICAgICAg
ICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGluRmxvd0hlaWdodEFuZE1hcmdpbihjb25zdCBCb3gm
LCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYp
OworICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGluRmxvd0hlaWdodEFuZE1hcmdpbihj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBVc2VkVmVydGlj
YWxWYWx1ZXMmKTsKICAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd1dpZHRoQW5k
TWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJik7CiAKLSAgICAg
ICAgUG9pbnQgc3RhdGljUG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgVXNlZEhvcml6b250YWxW
YWx1ZXMmLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKLSAgICAgICAgTGF5b3V0
VW5pdCBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRWZXJ0aWNh
bFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0IHN0YXRpY0hvcml6b250YWxQb3Np
dGlvbihjb25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYpIGNvbnN0OworICAg
ICAgICBQb2ludCBzdGF0aWNQb3NpdGlvbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7CisgICAgICAgIExh
eW91dFVuaXQgc3RhdGljVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gmLCBjb25zdCBWZXJ0aWNh
bENvbnN0cmFpbnRzJikgY29uc3Q7CisgICAgICAgIExheW91dFVuaXQgc3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpIGNvbnN0
OwogCiAgICAgICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyhjb25zdCBCb3gmKTsKIApAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDsKICAgICAgICAgR2VvbWV0cnko
Y29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYpOwogCi0gICAgICAgIENvbnRlbnRIZWlnaHRB
bmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29u
c3QgVXNlZEhvcml6b250YWxWYWx1ZXMmLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmKTsKKyAg
ICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1h
cmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBVc2Vk
VmVydGljYWxWYWx1ZXMmKTsKICAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd05v
blJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgVXNlZEhvcml6b250YWxW
YWx1ZXMmKSBjb25zdDsKICAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd1JlcGxh
Y2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMm
KSBjb25zdDsKICAgICAgICAgUG9pbnQgc3RhdGljUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlv
bmVkKGNvbnN0IEJveCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCmluZGV4IDhkNTk5MTVlM2MyNWMzYWI4Y2NmNTNmYTFkZDFlMmJmYmI5ZWZk
NTYuLjY3ZGU4MzNjYmUyM2ZlYWQyYjVkYzAzY2FiOWM5YzE4NTBiOWI4MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0
aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1Db250ZW50SGVpZ2h0
QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBs
YWNlZEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVXNlZEhvcml6
b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzLCBjb25zdCBVc2VkVmVydGljYWxWYWx1
ZXMmIHVzZWRWZXJ0aWNhbFZhbHVlcykKK0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cywgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJiB1c2VkVmVydGljYWxW
YWx1ZXMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3gu
cmVwbGFjZWQoKSk7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpKTsK
QEAgLTU4LDcgKzU4LDcgQEAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHQKICAgICAgICAgLy8gYW5k
IHJlbGF0aXZlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgY29uc2lkZXJlZCB3aXRob3V0IHRoZWly
IG9mZnNldCkuIE5vdGUgdGhhdCB0aGUgY2hpbGQgYm94IG1heSBiZSBhbiBhbm9ueW1vdXMgYmxv
Y2sgYm94LgogCiAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICBhdXRvIGNvbXB1dGVkVmVydGlj
YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIHVz
ZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
ID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFs
Q29uc3RyYWludHMpOwogICAgICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRWZXJ0
aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5i
ZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDAp
IH07IAogICAgICAgICBhdXRvIGJvcmRlckFuZFBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5ib3Jk
ZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwogICAgICAgICBh
dXRvIGhlaWdodCA9IHVzZWRWZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyB1c2VkVmVydGljYWxWYWx1
ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZENvbnRlbnRIZWlnaHQobGF5b3V0Qm94KTsKQEAg
LTEzOCw3ICsxMzgsNyBAQCBDb250ZW50V2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkV2lkdGhBbgogICAgICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94
KTsKIAogICAgICAgICBhdXRvIHdpZHRoID0gdXNlZEhvcml6b250YWxWYWx1ZXMud2lkdGggPyB1
c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkQ29udGVudFdpZHRoKGxheW91dEJv
eCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1
c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRI
b3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzKTsKICAgICAgICAgVXNlZEhvcml6b250YWxNYXJn
aW4gdXNlZEhvcml6b250YWxNYXJnaW47CiAgICAgICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdl
b21ldHJ5LmJvcmRlckxlZnQoKTsKICAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21l
dHJ5LmJvcmRlclJpZ2h0KCk7CkBAIC0yMDcsNyArMjA3LDcgQEAgQ29udGVudFdpZHRoQW5kTWFy
Z2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dSZXBsYWNlZFdpZHRo
QW5kTWEKICAgICAvLyAyLiBUaGVuIHRoZSBydWxlcyBmb3Igbm9uLXJlcGxhY2VkIGJsb2NrLWxl
dmVsIGVsZW1lbnRzIGFyZSBhcHBsaWVkIHRvIGRldGVybWluZSB0aGUgbWFyZ2lucy4KIAogICAg
IC8vICMxCi0gICAgYXV0byB1c2VkV2lkdGggPSBpbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2lu
KGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpLmNvbnRlbnRXaWR0aDsKKyAgICBhdXRv
IHVzZWRXaWR0aCA9IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
SG9yaXpvbnRhbFZhbHVlcywgeyB9KS5jb250ZW50V2lkdGg7CiAgICAgLy8gIzIKICAgICBhdXRv
IG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZFdpZHRoQW5kTWFy
Z2luKGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgeyB1c2VkSG9yaXpvbnRhbFZhbHVl
cy5jb25zdHJhaW50cywgdXNlZFdpZHRoLCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4gfSk7
CiAKQEAgLTIxNSw3ICsyMTUsNyBAQCBDb250ZW50V2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1JlcGxhY2VkV2lkdGhBbmRNYQogICAgIHJldHVy
biB7IHVzZWRXaWR0aCwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLCBub25S
ZXBsYWNlZFdpZHRoQW5kTWFyZ2luLmNvbXB1dGVkTWFyZ2luIH07CiB9CiAKLUxheW91dFVuaXQg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24o
Y29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYgdXNlZFZlcnRp
Y2FsVmFsdWVzKSBjb25zdAorTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6c3RhdGljVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cykgY29uc3QKIHsKICAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZvcm1hdHRp
bmcKICAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgYm94ZXMgYXJlIGxhaWQg
b3V0IG9uZSBhZnRlciB0aGUgb3RoZXIsIHZlcnRpY2FsbHksIGJlZ2lubmluZyBhdCB0aGUgdG9w
IG9mIGEgY29udGFpbmluZyBibG9jay4KQEAgLTIyNSw0MSArMjI1LDQxIEBAIExheW91dFVuaXQg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24o
Y29uc3QgQm94JiBsCiAgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcp
OwogICAgICAgICByZXR1cm4gcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRyeS5ib3R0b20oKSArIHBy
ZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKTsKICAgICB9Ci0gICAgcmV0dXJu
IHVzZWRWZXJ0aWNhbFZhbHVlcy5jb25zdHJhaW50cy5sb2dpY2FsVG9wOworICAgIHJldHVybiB2
ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7CiB9CiAKLUxheW91dFVuaXQgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbihjb25zdCBC
b3gmIGxheW91dEJveCwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFs
VmFsdWVzKSBjb25zdAorTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykgY29uc3QKIHsKICAg
ICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZvcm1h
dHRpbmcKICAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgZWFjaCBib3gncyBs
ZWZ0IG91dGVyIGVkZ2UgdG91Y2hlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBjb250YWluaW5nIGJs
b2NrIChmb3IgcmlnaHQtdG8tbGVmdCBmb3JtYXR0aW5nLCByaWdodCBlZGdlcyB0b3VjaCkuCi0g
ICAgcmV0dXJuIHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0ICsg
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0
KCk7CisgICAgcmV0dXJuIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdCArIGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5tYXJnaW5TdGFydCgpOwog
fQogCi1Qb2ludCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljUG9zaXRp
b24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1c2Vk
SG9yaXpvbnRhbFZhbHVlcywgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJiB1c2VkVmVydGljYWxW
YWx1ZXMpIGNvbnN0CitQb2ludCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3Rh
dGljUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2
ZXJ0aWNhbENvbnN0cmFpbnRzKSBjb25zdAogewotICAgIHJldHVybiB7IHN0YXRpY0hvcml6b250
YWxQb3NpdGlvbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKSwgc3RhdGljVmVydGlj
YWxQb3NpdGlvbihsYXlvdXRCb3gsIHVzZWRWZXJ0aWNhbFZhbHVlcykgfTsKKyAgICByZXR1cm4g
eyBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpLCBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50
cykgfTsKIH0KIAotQ29udGVudEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW5GbG93SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxWYWx1ZXMsIGNvbnN0IFVz
ZWRWZXJ0aWNhbFZhbHVlcyYgdXNlZFZlcnRpY2FsVmFsdWVzKQorQ29udGVudEhlaWdodEFuZE1h
cmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93SGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJiB1c2VkVmVydGlj
YWxWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKIAogICAgIC8v
IDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVs
ZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJwogICAgIC8vIHJlcGxhY2VkIGVs
ZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cwogICAg
IGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2Vk
SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0
aWNhbFZhbHVlcyk7CisgICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdp
bihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgdXNlZFZlcnRpY2FsVmFsdWVzKTsK
IAogICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gY29udGVudEhlaWdodEFuZE1hcmdpbjsKICAg
ICAvLyBGSVhNRTogTGV0J3Mgc3BlY2lhbCBjYXNlIHRoZSB0YWJsZSBoZWlnaHQgY29tcHV0YXRp
b24gZm9yIG5vdyAtPiBmaWd1cmUgb3V0IHdoZXRoZXIgdGFibGVzIGZhbGwgaW50byB0aGUgImlu
Rmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luIiBjYXRlZ29yeS4KICAgICBpZiAobGF5b3V0
Qm94LmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29udGV4dCgpKQotICAgICAgICBjb250ZW50
SGVpZ2h0QW5kTWFyZ2luID0gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIHVzZWRIb3Jpem9u
dGFsVmFsdWVzLCB1c2VkVmVydGljYWxWYWx1ZXMpOworICAgICAgICBjb250ZW50SGVpZ2h0QW5k
TWFyZ2luID0gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cywgdXNlZFZlcnRpY2FsVmFsdWVzKTsKICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNPdmVyZmxv
d1Zpc2libGUoKSAmJiAhbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewogICAgICAgICAvLyBU
T0RPOiBGaWd1cmUgb3V0IHRoZSBjYXNlIGZvciB0aGUgZG9jdW1lbnQgZWxlbWVudC4gTGV0J3Mg
anVzdCBjb21wbGljYXRlZC1jYXNlIGl0IGZvciBub3cuCi0gICAgICAgIGNvbnRlbnRIZWlnaHRB
bmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIHVz
ZWRIb3Jpem9udGFsVmFsdWVzLCB1c2VkVmVydGljYWxWYWx1ZXMpOworICAgICAgICBjb250ZW50
SGVpZ2h0QW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4obGF5b3V0
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCiAgICAgICAgIC8vIEJs
b2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3Zl
cmZsb3cnIGRvZXMgbm90IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQgaWYgdGhlICdvdmVy
ZmxvdycgcHJvcGVydHkncyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZSB2aWV3cG9y
dCkuCi0gICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wbGljYXRlZENhc2VzKGxh
eW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CisgICAg
ICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLCB1c2VkVmVydGljYWxWYWx1ZXMpOwogICAgIH0KIAogICAg
IGF1dG8gcXVpcmtzID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmluZGV4IDAxNWU0N2RmMjk1NjM2Y2VjNDVm
NmQyZmNlYjY3YjZmMjJlNThlMDMuLmY0MDFlYmViNDI3NzdkMWJhOTU1Njg4OTk1ODNlMzA5MDgx
MGM0YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApAQCAt
ODIsNyArODIsNyBAQCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbgogICAgICAgICAvLyBIZXJlIGlz
IHRoZSBxdWlya3kgcGFydCBmb3IgYm9keSBib3g6CiAgICAgICAgIC8vIFN0cmV0Y2ggdGhlIGJv
ZHkgdXNpbmcgdGhlIGluaXRpYWwgY29udGFpbmluZyBibG9jaydzIGhlaWdodCBhbmQgc2hyaW5r
IGl0IHdpdGggZG9jdW1lbnQgYm94J3MgbWFyZ2luL2JvcmRlci9wYWRkaW5nLgogICAgICAgICAv
LyBUaGlzIGxvb2tzIGV4dHJlbWVseSBvZGQgd2hlbiBodG1sIGhhcyBub24tYXV0byBoZWlnaHQu
Ci0gICAgICAgIGF1dG8gZG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdDb250
ZXh0Lmdlb21ldHJ5KCkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihkb2N1bWVudEJveCwgVXNlZEhv
cml6b250YWxWYWx1ZXMgeyBHZW9tZXRyeTo6aG9yaXpvbnRhbENvbnN0cmFpbnRzRm9ySW5GbG93
KGluaXRpYWxDb250YWluaW5nQmxvY2tHZW9tZXRyeSkgfSk7CisgICAgICAgIGF1dG8gZG9jdW1l
bnRCb3hWZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5KCkuY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbihkb2N1bWVudEJveCwgR2VvbWV0cnk6Omhvcml6b250YWxDb25zdHJh
aW50c0ZvckluRmxvdyhpbml0aWFsQ29udGFpbmluZ0Jsb2NrR2VvbWV0cnkpKTsKICAgICAgICAg
c3RyZWNoZWRIZWlnaHQgLT0gKGRvY3VtZW50Qm94VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVl
T3IoMCkgKyBkb2N1bWVudEJveFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkpOwogCiAg
ICAgICAgIGF1dG8mIGJvZHlCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KGxheW91dEJveCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxv
Y2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcAppbmRleCBhZTA2YjE2
ZDZhZTE3MTUyZTEzZjY0OTY2YTg3ODQwMTIxYzJkZmRiLi42YTE1YzUxOWVmNTM5YTE1NTdhYjdm
M2I3YjY5MTVmZjFhMzQ1YmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxv
Y2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKQEAgLTUxMiw4
ICs1MTIsNyBAQCBQb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46OlZhbHVlcyBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZQogICAgICAgICByZXR1cm4gbWFyZ2lu
VHlwZSA9PSBNYXJnaW5UeXBlOjpCZWZvcmUgPyBwb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxN
YXJnaW4uYmVmb3JlIDogcG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luLmFmdGVyOyAK
ICAgICB9CiAgICAgLy8gVGhpcyBpcyB0aGUgZXN0aW1hdGUgcGF0aC4gV2UgZG9uJ3QgeWV0IGhh
dmUgcG9zaXRpdmUvbmVnYXRpdmUgbWFyZ2luIGNvbXB1dGVkLgotICAgIGF1dG8gdXNlZFZhbHVl
cyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgR2VvbWV0cnk6Omhvcml6b250YWxDb25zdHJhaW50
c0ZvckluRmxvdyhmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpsYXlvdXRCb3gu
Y29udGFpbmluZ0Jsb2NrKCkpKSB9OwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnkoKS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxh
eW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5
b3V0Qm94LCBHZW9tZXRyeTo6aG9yaXpvbnRhbENvbnN0cmFpbnRzRm9ySW5GbG93KGZvcm1hdHRp
bmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkp
KTsKICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9u
Q29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigw
KSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07IAogCiAgICAgaWYg
KG1hcmdpblR5cGUgPT0gTWFyZ2luVHlwZTo6QmVmb3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCmluZGV4IDIxODI2YTBlMGJlMGYwOGMzNWJiNDJlMGJiOTFiNmU3MDYwNzgz
ZjAuLjU2OWI5NWZkZTI2YTgxN2I2NzNjYWJhZTNmZThlYTNlY2Q4NjUzZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTY0LDMyICs2NCwzMCBAQCBzdGF0aWMgaW5s
aW5lIGNvbnN0IEJveCogbmV4dEluUHJlT3JkZXIoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0
IENvbnRhaW5lciYgcwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZh
bGlkYXRpb25TdGF0ZSwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3JpenRvbmFsQ29u
c3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMp
Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFs
aWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZl
cnRpY2FsQ29uc3RyYWludHMpCiB7CiAgICAgaWYgKCFyb290KCkuaGFzSW5GbG93T3JGbG9hdGlu
Z0NoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGludmFsaWRhdGVGb3JtYXR0aW5nU3Rh
dGUoaW52YWxpZGF0aW9uU3RhdGUpOwogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29u
dGV4dExheW91dCwgc3RyZWFtIDw8ICJbU3RhcnRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRl
eHQgLT4gZm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwotICAgIGF1dG8gdXNl
ZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGhvcml6dG9uYWxDb25z
dHJhaW50cyB9OwotICAgIGF1dG8gdXNlZFZlcnRpY2FsVmFsdWVzID0gVXNlZFZlcnRpY2FsVmFs
dWVzIHsgdmVydGljYWxDb25zdHJhaW50cyB9OwogICAgIGF1dG8qIGxheW91dEJveCA9IHJvb3Qo
KS5maXJzdEluRmxvd09yRmxvYXRpbmdDaGlsZCgpOwogICAgIC8vIDEuIFZpc2l0IGVhY2ggaW5s
aW5lIGJveCBhbmQgcGFydGlhbGx5IGNvbXB1dGUgdGhlaXIgZ2VvbWV0cnkgKG1hcmdpbnMsIHBh
ZGRpbmdzIGFuZCBib3JkZXJzKS4KICAgICAvLyAyLiBDb2xsZWN0IHRoZSBpbmxpbmUgaXRlbXMg
KGZsYXR0ZW4gdGhlIHRoZSBsYXlvdXQgdHJlZSkgYW5kIHBsYWNlIHRoZW0gb24gbGluZXMgaW4g
YmlkaXJlY3Rpb25hbCBvcmRlci4gCiAgICAgd2hpbGUgKGxheW91dEJveCkgewogICAgICAgICBp
ZiAobGF5b3V0Qm94LT5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpCi0gICAgICAgICAg
ICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoKmxheW91dEJveCwgaW52YWxpZGF0aW9uU3Rh
dGUsIHVzZWRIb3Jpem9udGFsVmFsdWVzLCB1c2VkVmVydGljYWxWYWx1ZXMpOworICAgICAgICAg
ICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KCpsYXlvdXRCb3gsIGludmFsaWRhdGlvblN0
YXRlLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHZlcnRpY2FsQ29uc3RyYWludHMpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlSG9yaXpvbnRhbEFuZFZlcnRpY2FsR2VvbWV0cnko
KmxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7Cisg
ICAgICAgICAgICBjb21wdXRlSG9yaXpvbnRhbEFuZFZlcnRpY2FsR2VvbWV0cnkoKmxheW91dEJv
eCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzKTsKICAgICAgICAg
bGF5b3V0Qm94ID0gbmV4dEluUHJlT3JkZXIoKmxheW91dEJveCwgcm9vdCgpKTsKICAgICB9CiAK
ICAgICBjb2xsZWN0SW5saW5lQ29udGVudElmTmVlZGVkKCk7Ci0gICAgbGluZUxheW91dCh1c2Vk
SG9yaXpvbnRhbFZhbHVlcyk7CisgICAgbGluZUxheW91dChob3Jpem9udGFsQ29uc3RyYWludHMp
OwogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8
ICJbRW5kXSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgi
IDw8ICZyb290KCkgPDwgIikiKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
bGluZUxheW91dChjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b250YWxWYWx1
ZXMpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1dG8mIGlu
bGluZUl0ZW1zID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKTsKICAgICBhdXRvIGxp
bmVMb2dpY2FsVG9wID0gZ2VvbWV0cnlGb3JCb3gocm9vdCgpKS5jb250ZW50Qm94VG9wKCk7CkBA
IC05OSw5ICs5Nyw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQo
Y29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9uCiAgICAgYXV0byBsaW5lTGF5
b3V0Q29udGV4dCA9IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIHJvb3QoKSwgaW5saW5lSXRl
bXMgfTsKIAogICAgIHdoaWxlIChsZWFkaW5nSW5saW5lSXRlbUluZGV4IDwgaW5saW5lSXRlbXMu
c2l6ZSgpKSB7Ci0gICAgICAgIGxpbmVCdWlsZGVyLmluaXRpYWxpemUoY29uc3RyYWludHNGb3JM
aW5lKHVzZWRIb3Jpem9udGFsVmFsdWVzLCBsaW5lTG9naWNhbFRvcCkpOworICAgICAgICBsaW5l
QnVpbGRlci5pbml0aWFsaXplKGNvbnN0cmFpbnRzRm9yTGluZShob3Jpem9udGFsQ29uc3RyYWlu
dHMsIGxpbmVMb2dpY2FsVG9wKSk7CiAgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5
b3V0Q29udGV4dC5sYXlvdXRMaW5lKGxpbmVCdWlsZGVyLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4
LCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOwotICAgICAgICBzZXREaXNwbGF5Qm94ZXNG
b3JMaW5lKGxpbmVDb250ZW50LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgIHNldERp
c3BsYXlCb3hlc0ZvckxpbmUobGluZUNvbnRlbnQsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAK
ICAgICAgICAgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoID0geyB9OwogICAgICAgICBpZiAo
bGluZUNvbnRlbnQudHJhaWxpbmdJbmxpbmVJdGVtSW5kZXgpIHsKQEAgLTEyOSwzNCArMTI3LDM0
IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoY29uc3QgVXNlZEhv
cml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9uCiAgICAgfQogfQogCi12b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiBmb3Jt
YXR0aW5nQ29udGV4dFJvb3QsIEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdGF0ZSwg
Y29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzLCBjb25zdCBV
c2VkVmVydGljYWxWYWx1ZXMmIHVzZWRWZXJ0aWNhbFZhbHVlcykKK3ZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIGZvcm1h
dHRpbmdDb250ZXh0Um9vdCwgSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvblN0YXRlLCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cykKIHsKICAgICBBU1NFUlQo
Zm9ybWF0dGluZ0NvbnRleHRSb290LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgfHwgZm9ybWF0dGlu
Z0NvbnRleHRSb290LmlzSW5saW5lQmxvY2tCb3goKSk7CiAKLSAgICBjb21wdXRlQm9yZGVyQW5k
UGFkZGluZyhmb3JtYXR0aW5nQ29udGV4dFJvb3QsIHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0
cmFpbnRzKTsKLSAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290
LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcoZm9y
bWF0dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgIGNvbXB1dGVX
aWR0aEFuZE1hcmdpbihmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGhvcml6b250YWxDb25zdHJhaW50
cyk7CiAgICAgLy8gU3dpY2ggb3ZlciB0byB0aGUgbmV3IGZvcm1hdHRpbmcgY29udGV4dCAodGhl
IG9uZSB0aGF0IHRoZSByb290IGNyZWF0ZXMpLgogICAgIGlmIChpczxDb250YWluZXI+KGZvcm1h
dHRpbmdDb250ZXh0Um9vdCkpIHsKICAgICAgICAgYXV0byYgcm9vdENvbnRhaW5lciA9IGRvd25j
YXN0PENvbnRhaW5lcj4oZm9ybWF0dGluZ0NvbnRleHRSb290KTsKICAgICAgICAgYXV0byBmb3Jt
YXR0aW5nQ29udGV4dCA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KHJv
b3RDb250YWluZXIsIGxheW91dFN0YXRlKCkpOwotICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+
bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgdXNlZEhvcml6b250YWxWYWx1
ZXMuY29uc3RyYWludHMsIHVzZWRWZXJ0aWNhbFZhbHVlcy5jb25zdHJhaW50cyk7CisgICAgICAg
IGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRl
LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHZlcnRpY2FsQ29uc3RyYWludHMpOwogICAgICAgICAv
LyBDb21lIGJhY2sgYW5kIGZpbmFsaXplIHRoZSByb290J3MgaGVpZ2h0IGFuZCBtYXJnaW4uCi0g
ICAgICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4ocm9vdENvbnRhaW5lciwgdXNlZEhvcml6b250
YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CisgICAgICAgIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4ocm9vdENvbnRhaW5lciwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0
cmFpbnRzKTsKICAgICAgICAgLy8gTm93IHRoYXQgd2UgY29tcHV0ZWQgdGhlIHJvb3QncyBoZWln
aHQsIHdlIGNhbiBnbyBiYWNrIGFuZCBsYXlvdXQgdGhlIG91dC1vZi1mbG93IGNvbnRlbnQuCiAg
ICAgICAgIGF1dG8mIHJvb3RDb250YWluZXJEaXNwbGF5Qm94ID0gZ2VvbWV0cnlGb3JCb3gocm9v
dENvbnRhaW5lcik7Ci0gICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzRm9yT3V0T2ZG
bG93ID0gIEdlb21ldHJ5Ojpob3Jpem9udGFsQ29uc3RyYWludHNGb3JPdXRPZkZsb3cocm9vdENv
bnRhaW5lckRpc3BsYXlCb3gpOworICAgICAgICBhdXRvIGhvcml6b250YWxDb25zdHJhaW50c0Zv
ck91dE9mRmxvdyA9IEdlb21ldHJ5Ojpob3Jpem9udGFsQ29uc3RyYWludHNGb3JPdXRPZkZsb3co
cm9vdENvbnRhaW5lckRpc3BsYXlCb3gpOwogICAgICAgICBhdXRvIHZlcnRpY2FsQ29uc3RyYWlu
dHNGb3JPdXRPZkZsb3cgPSBHZW9tZXRyeTo6dmVydGljYWxDb25zdHJhaW50c0Zvck91dE9mRmxv
dyhyb290Q29udGFpbmVyRGlzcGxheUJveCk7CiAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5s
YXlvdXRPdXRPZkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBob3Jpem9udGFsQ29uc3Ry
YWludHNGb3JPdXRPZkZsb3csIHZlcnRpY2FsQ29uc3RyYWludHNGb3JPdXRPZkZsb3cpOwogICAg
IH0gZWxzZQotICAgICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGZvcm1hdHRpbmdDb250ZXh0
Um9vdCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CisgICAgICAg
IGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFs
Q29uc3RyYWludHMsIHZlcnRpY2FsQ29uc3RyYWludHMpOwogfQogCi12b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbEFuZFZlcnRpY2FsR2VvbWV0cnkoY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbnRh
bFZhbHVlcywgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJiB1c2VkVmVydGljYWxWYWx1ZXMpCit2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbEFuZFZlcnRpY2Fs
R2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0
aWNhbENvbnN0cmFpbnRzKQogewogICAgIGlmIChpczxDb250YWluZXI+KGxheW91dEJveCkpIHsK
ICAgICAgICAgLy8gSW5saW5lIGNvbnRhaW5lcnMgKDxzcGFuPikgY2FuJ3QgZ2V0IHNpemVkL3Bv
c2l0aW9uZWQgeWV0LiBBdCB0aGlzIHBvaW50IHdlIGNhbiBvbmx5IGNvbXB1dGUgdGhlaXIgbWFy
Z2lucywgYm9yZGVycyBhbmQgcGFkZGluZ3MuCi0gICAgICAgIGNvbXB1dGVIb3Jpem9udGFsTWFy
Z2luKGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwotICAgICAgICBjb21wdXRlQm9y
ZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRz
KTsKKyAgICAgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFs
Q29uc3RyYWludHMpOworICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgICAgIC8vIElubGluZSBjb250YWluZXJzIGhh
dmUgMCBjb21wdXRlZCB2ZXJ0aWNhbCBtYXJnaW5zLgogICAgICAgICBmb3JtYXR0aW5nU3RhdGUo
KS5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VmVydGljYWxNYXJnaW4oeyB7IH0sIHsgfSB9KTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTY0LDkgKzE2Miw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVIb3Jpem9udGFsQW5kVmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gm
IGxhCiAKICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWQoKSkgewogICAgICAgICAvLyBSZXBs
YWNlZCBlbGVtZW50cyAoaW1nLCB2aWRlbykgY2FuIGJlIHNpemVkIGJ1dCBub3QgeWV0IHBvc2l0
aW9uZWQuCi0gICAgICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCwgdXNlZEhv
cml6b250YWxWYWx1ZXMuY29uc3RyYWludHMpOwotICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJn
aW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgICAgIGNvbXB1dGVIZWln
aHRBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcywgdXNlZFZlcnRpY2Fs
VmFsdWVzKTsKKyAgICAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcobGF5b3V0Qm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOworICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4obGF5b3V0
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICBjb21wdXRlSGVpZ2h0QW5kTWFy
Z2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRz
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTkyLDIxICsxOTAsMjEgQEAgRm9ybWF0
dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVkSW4KICAgICB9CiAKICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gZm9ybWF0
dGluZ0NvbnRleHRSb290TGlzdDsKLSAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNl
ZEhvcml6b250YWxWYWx1ZXMgeyBIb3Jpem9udGFsQ29uc3RyYWludHMgeyAwX2x1LCAwX2x1IH0g
fTsKKyAgICBhdXRvIGhvcml6b250YWxDb25zdHJhaW50cyA9IEhvcml6b250YWxDb25zdHJhaW50
cyB7IDBfbHUsIDBfbHUgfTsKICAgICBhdXRvKiBsYXlvdXRCb3ggPSByb290KCkuZmlyc3RJbkZs
b3dPckZsb2F0aW5nQ2hpbGQoKTsKICAgICB3aGlsZSAobGF5b3V0Qm94KSB7CiAgICAgICAgIGlm
IChsYXlvdXRCb3gtPmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAgICAgICAg
ICAgZm9ybWF0dGluZ0NvbnRleHRSb290TGlzdC5hcHBlbmQobGF5b3V0Qm94KTsKLSAgICAgICAg
ICAgIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KCpsYXlvdXRCb3gsIHVz
ZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICAgICAgICAgIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZv
ckZvcm1hdHRpbmdSb290KCpsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAg
ICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LT5pc1JlcGxhY2VkKCkgfHwgaXM8Q29udGFpbmVyPigq
bGF5b3V0Qm94KSkgewotICAgICAgICAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcoKmxheW91
dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMpOworICAgICAgICAgICAgY29t
cHV0ZUJvcmRlckFuZFBhZGRpbmcoKmxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsK
ICAgICAgICAgICAgIC8vIGlubGluZS1ibG9jayBhbmQgcmVwbGFjZWQuCiAgICAgICAgICAgICBh
dXRvIG5lZWRzV2lkdGhDb21wdXRhdGlvbiA9IGxheW91dEJveC0+aXNSZXBsYWNlZCgpOwogICAg
ICAgICAgICAgaWYgKG5lZWRzV2lkdGhDb21wdXRhdGlvbikKLSAgICAgICAgICAgICAgICBjb21w
dXRlV2lkdGhBbmRNYXJnaW4oKmxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOworICAg
ICAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbigqbGF5b3V0Qm94LCBob3Jpem9udGFs
Q29uc3RyYWludHMpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU2lt
cGxlIGlubGluZSBjb250YWluZXIgd2l0aCBubyBpbnRyaW5zaWMgd2lkdGggPHNwYW4+LgotICAg
ICAgICAgICAgICAgIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKCpsYXlvdXRCb3gsIHVzZWRIb3Jp
em9udGFsVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbigq
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGxheW91dEJveCA9IG5leHRJblByZU9yZGVyKCpsYXlvdXRCb3gsIHJvb3Qo
KSk7CkBAIC0yMjIsOCArMjIwLDcgQEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW4KICAgICAgICAg
ICAgIGF1dG8gY29udGVudFdpZHRoID0gKGF2YWlsYWJsZVdpZHRoID8gaW50cmluc2ljV2lkdGhz
LT5tYXhpbXVtIDogaW50cmluc2ljV2lkdGhzLT5taW5pbXVtKSAtIGRpc3BsYXlCb3guaG9yaXpv
bnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKTsKICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0
Q29udGVudEJveFdpZHRoKGNvbnRlbnRXaWR0aCk7CiAgICAgICAgIH0KLSAgICAgICAgYXV0byB1
c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgSG9yaXpvbnRhbENv
bnN0cmFpbnRzIHsgMF9sdSwgdG9MYXlvdXRVbml0KGF2YWlsYWJsZVdpZHRoKSB9IH07Ci0gICAg
ICAgIHJldHVybiBjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29uc3RyYWludCh1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CisgICAgICAgIHJldHVybiBjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29u
c3RyYWludCh7IDBfbHUsIHRvTGF5b3V0VW5pdChhdmFpbGFibGVXaWR0aCkgfSk7CiAgICAgfTsK
IAogICAgIGF1dG8gY29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lk
dGgocm9vdCgpLCB7IHRvTGF5b3V0VW5pdChtYXhpbXVtTGluZVdpZHRoKDApKSwgdG9MYXlvdXRV
bml0KG1heGltdW1MaW5lV2lkdGgobWF4SW5saW5lTGF5b3V0VW5pdCgpKSkgfSk7CkBAIC0yMzEs
NyArMjI4LDcgQEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW4KICAgICByZXR1cm4gY29uc3RyYWlu
dHM7CiB9CiAKLUlubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVkSW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVz
JiB1c2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3QKK0lubGluZUxheW91dFVuaXQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAogewog
ICAgIGF1dG8mIGlubGluZUl0ZW1zID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKTsK
ICAgICBJbmxpbmVMYXlvdXRVbml0IG1heGltdW1MaW5lV2lkdGggPSAwOwpAQCAtMjQwLDcgKzIz
Nyw3IEBAIElubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVk
SW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KGNvCiAgICAgYXV0byBsaW5lTGF5b3V0Q29udGV4
dCA9IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIHJvb3QoKSwgaW5saW5lSXRlbXMgfTsKICAg
ICB3aGlsZSAobGVhZGluZ0lubGluZUl0ZW1JbmRleCA8IGlubGluZUl0ZW1zLnNpemUoKSkgewog
ICAgICAgICAvLyBPbmx5IHRoZSBob3JpenRvbmFsIGF2YWlsYWJsZSB3aWR0aCBpcyBjb25zdHJh
aW5lZCB3aGVuIGNvbXB1dGluZyBpbnRyaW5zaWMgd2lkdGguCi0gICAgICAgIGxpbmVCdWlsZGVy
LmluaXRpYWxpemUoTGluZUJ1aWxkZXI6OkNvbnN0cmFpbnRzIHsgeyB9LCB1c2VkSG9yaXpvbnRh
bFZhbHVlcy5jb25zdHJhaW50cy5sb2dpY2FsV2lkdGgsIGZhbHNlLCB7IH0gfSk7CisgICAgICAg
IGxpbmVCdWlsZGVyLmluaXRpYWxpemUoTGluZUJ1aWxkZXI6OkNvbnN0cmFpbnRzIHsgeyB9LCBo
b3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoLCBmYWxzZSwgeyB9IH0pOwogICAgICAg
ICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUxheW91dENvbnRleHQubGF5b3V0TGluZShsaW5lQnVp
bGRlciwgbGVhZGluZ0lubGluZUl0ZW1JbmRleCwgeyB9KTsKIAogICAgICAgICBsZWFkaW5nSW5s
aW5lSXRlbUluZGV4ID0gKmxpbmVDb250ZW50LnRyYWlsaW5nSW5saW5lSXRlbUluZGV4ICsgMTsK
QEAgLTI1MiwxMiArMjQ5LDEyIEBAIElubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KGNvCiAgICAgcmV0dXJu
IG1heGltdW1MaW5lV2lkdGg7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYgZm9ybWF0dGlu
Z1Jvb3QsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbnRhbFZhbHVlcykK
K3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZv
cm1hdHRpbmdSb290KGNvbnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIEFTU0VSVChmb3JtYXR0
aW5nUm9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwogCi0gICAgY29tcHV0ZUJv
cmRlckFuZFBhZGRpbmcoZm9ybWF0dGluZ1Jvb3QsIHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0
cmFpbnRzKTsKLSAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihmb3JtYXR0aW5nUm9vdCwgdXNl
ZEhvcml6b250YWxWYWx1ZXMpOworICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGZvcm1hdHRp
bmdSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgIGNvbXB1dGVIb3Jpem9udGFsTWFy
Z2luKGZvcm1hdHRpbmdSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwogCiAgICAgYXV0byBj
b25zdHJhaW50cyA9IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwogICAgIGlmIChhdXRv
IGZpeGVkV2lkdGggPSBnZW9tZXRyeSgpLmZpeGVkVmFsdWUoZm9ybWF0dGluZ1Jvb3Quc3R5bGUo
KS5sb2dpY2FsV2lkdGgoKSkpCkBAIC0yNjksMjMgKzI2NiwyNSBAQCB2b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhGb3JGb3JtYXR0aW5nUm9vdChjb25z
dCBCb3gmCiAgICAgZm9ybWF0dGluZ1N0YXRlKCkuc2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50
c0ZvckJveChmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMpOwogfQogCi12b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91
dEJveCwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzKQor
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKQogewotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gZ2Vv
bWV0cnkoKS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRh
bFZhbHVlcyk7CisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBnZW9tZXRyeSgp
LmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cyk7CiAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3go
bGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxDb21wdXRlZE1hcmdpbihj
b21wdXRlZEhvcml6b250YWxNYXJnaW4pOwogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1h
cmdpbih7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfSk7CiB9CiAKLXZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzKQordm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJv
eCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25z
dHJhaW50cykKIHsKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG1pbi9tYXgtd2lkdGgu
CisgICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsg
aG9yaXpvbnRhbENvbnN0cmFpbnRzIH07IAogICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBjb250
ZW50V2lkdGhBbmRNYXJnaW47CiAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpKQogICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmZsb2F0aW5n
V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgZWxz
ZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKICAgICAgICAgY29udGVudFdpZHRo
QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5pbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKGxheW91dEJv
eCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogICAgIGVsc2UgaWYgKGxheW91dEJveC5yZXBsYWNl
ZCgpKQotICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmlubGluZVJl
cGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7Cisg
ICAgICAgIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGdlb21ldHJ5KCkuaW5saW5lUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzLCB7IH0pOwogICAg
IGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKQEAgLTI5NSwxNSArMjk0LDE3
IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxD
b21wdXRlZE1hcmdpbihjb250ZW50V2lkdGhBbmRNYXJnaW4uY29tcHV0ZWRNYXJnaW4pOwogfQog
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6
b250YWxWYWx1ZXMsIGNvbnN0IFVzZWRWZXJ0aWNhbFZhbHVlcyYgdXNlZFZlcnRpY2FsVmFsdWVz
KQordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3Ry
YWludHMpCiB7CisgICAgLy8gRklYTUU6IEFkZCBtaW4vbWF4LWhlaWdodCBzdXBwb3J0LgogICAg
IENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gY29udGVudEhlaWdodEFuZE1hcmdpbjsKKyAgICBhdXRv
IHVzZWRWZXJ0aWNhbFZhbHVlcyA9IFVzZWRWZXJ0aWNhbFZhbHVlcyB7IHZlcnRpY2FsQ29uc3Ry
YWludHMgfTsKICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAg
ICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmZsb2F0aW5nSGVpZ2h0QW5k
TWFyZ2luKGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVl
cyk7CisgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmZsb2F0aW5n
SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB1c2VkVmVy
dGljYWxWYWx1ZXMpOwogICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkp
Ci0gICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmlubGluZUJsb2Nr
SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0
aWNhbFZhbHVlcyk7CisgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgp
LmlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCB1c2VkVmVydGljYWxWYWx1ZXMpOwogICAgIGVsc2UgaWYgKGxheW91dEJveC5yZXBsYWNl
ZCgpKQotICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5pbmxpbmVS
ZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzLCB1
c2VkVmVydGljYWxWYWx1ZXMpOworICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gZ2Vv
bWV0cnkoKS5pbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250
YWxDb25zdHJhaW50cywgdXNlZFZlcnRpY2FsVmFsdWVzKTsKICAgICBlbHNlCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0zMTIsMTUgKzMxMywxNSBAQCB2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjb25zdAogICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyBjb250ZW50SGVp
Z2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbiwgeyB9IH0pOwogfQogCi12b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGlu
ZUJveChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVz
ZWRIb3Jpem9udGFsVmFsdWVzLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmIHVzZWRWZXJ0aWNh
bFZhbHVlcykKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZEhl
aWdodEZvclJlcGxhY2VkSW5saW5lQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxD
b25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cykKIHsKICAgICBBU1NFUlQoIWxheW91dEJv
eC5pc0NvbnRhaW5lcigpKTsKICAgICBBU1NFUlQoIWxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1h
dHRpbmdDb250ZXh0KCkpOwogICAgIEFTU0VSVChsYXlvdXRCb3gucmVwbGFjZWQoKSk7CiAKLSAg
ICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVz
LmNvbnN0cmFpbnRzKTsKLSAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
SG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gs
IHVzZWRIb3Jpem9udGFsVmFsdWVzLCB1c2VkVmVydGljYWxWYWx1ZXMpOworICAgIGNvbXB1dGVC
b3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICBj
b21wdXRlV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwor
ICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIHZlcnRpY2FsQ29uc3RyYWludHMpOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudElmTmVlZGVkKCkKQEAgLTM3NCwxMCArMzc1LDEwIEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVk
ZWQoKQogICAgIH0KIH0KIAotTGluZUJ1aWxkZXI6OkNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMm
IHVzZWRIb3Jpem9udGFsVmFsdWVzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wKQor
TGluZUJ1aWxkZXI6OkNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25zdHJh
aW50c0ZvckxpbmUoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3Ry
YWludHMsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApCiB7CiAgICAgYXV0byBsaW5l
TG9naWNhbExlZnQgPSBnZW9tZXRyeUZvckJveChyb290KCkpLmNvbnRlbnRCb3hMZWZ0KCk7Ci0g
ICAgYXV0byBsaW5lTG9naWNhbFJpZ2h0ID0gbGluZUxvZ2ljYWxMZWZ0ICsgdXNlZEhvcml6b250
YWxWYWx1ZXMuY29uc3RyYWludHMubG9naWNhbFdpZHRoOworICAgIGF1dG8gbGluZUxvZ2ljYWxS
aWdodCA9IGxpbmVMb2dpY2FsTGVmdCArIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lk
dGg7CiAgICAgYXV0byBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBmYWxzZTsKIAogICAgIGF1
dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9y
bWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07CkBAIC00MzYsMTMgKzQzNywxMyBAQCBM
aW5lQnVpbGRlcjo6Q29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFp
bnRzRm9yTGluZShjb25zdCBVc2VkSAogICAgICAgICBhdXRvIHNob3VsZEluZGVudCA9IGludmVy
dExpbmVSYW5nZSAhPSBpc0ZpcnN0TGluZTsKICAgICAgICAgaWYgKCFzaG91bGRJbmRlbnQpCiAg
ICAgICAgICAgICByZXR1cm4gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIHJldHVybiBn
ZW9tZXRyeSgpLmNvbXB1dGVkVGV4dEluZGVudChyb290LCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5j
b25zdHJhaW50cykudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSk7CisgICAgICAgIHJldHVy
biBnZW9tZXRyeSgpLmNvbXB1dGVkVGV4dEluZGVudChyb290LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pOwogICAgIH07CiAgICAgbGluZUxvZ2lj
YWxMZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOwogICAgIHJldHVybiBMaW5lQnVpbGRlcjo6
Q29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgbGluZUxv
Z2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0LCBx
dWlya3MoKS5saW5lSGVpZ2h0Q29uc3RyYWludHMocm9vdCgpKSB9OwogfQogCi12b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlv
dXRDb250ZXh0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IFVzZWRIb3Jpem9udGFs
VmFsdWVzJiB1c2VkSG9yaXpvbnRhbFZhbHVlcykKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpbmVD
b250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludHMpCiB7CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9y
bWF0dGluZ1N0YXRlKCk7CiAKQEAgLTUxNiw3ICs1MTcsNyBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0
OjpMaQogICAgICAgICBpZiAobGluZVJ1bi5pc0JveCgpKSB7CiAgICAgICAgICAgICBhdXRvIHRv
cExlZnQgPSBsb2dpY2FsUmVjdC50b3BMZWZ0KCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0Qm94
LmlzSW5GbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIHRvcExlZnQgKz0gZ2VvbWV0
cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CisgICAgICAgICAgICAgICAgdG9wTGVmdCArPSBnZW9tZXRyeSgpLmluRmxv
d1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cyk7CiAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQodG9MYXlvdXRQb2ludCh0b3BM
ZWZ0KSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTMwLDcgKzUzMSw3
IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUo
Y29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpCiAgICAgICAgIC8vIElubGluZSBsZXZlbCBjb250
YWluZXIgZW5kICg8L3NwYW4+KQogICAgICAgICBpZiAobGluZVJ1bi5pc0NvbnRhaW5lckVuZCgp
KSB7CiAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBpbmZsb3dPZmZzZXQgPSBnZW9tZXRyeSgpLmluRmxvd1Bvc2l0
aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGluZmxvd09mZnNldCA9IGdlb21ldHJ5KCkuaW5GbG93UG9zaXRp
b25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKICAg
ICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVIb3Jpem9udGFsbHkoaW5mbG93T2Zmc2V0Lndp
ZHRoKCkpOwogICAgICAgICAgICAgICAgIGRpc3BsYXlCb3gubW92ZVZlcnRpY2FsbHkoaW5mbG93
T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5oCmluZGV4IGJlODkyNjAxNjNlNWRmNGQyODNjZjI3ZWFjNGFjZjFlYTg4N2NhYTMuLmJk
ZjVjNTliNjBlNDFjMTY4MDhkNzI0NWNjYzA5NDc5NzZjODUyOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuaApAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgogCiAgICAgY2xhc3Mg
R2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lQmxvY2tIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JiwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmLCBjb25zdCBVc2Vk
VmVydGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBp
bmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKICAgICAgICAgQ29u
dGVudFdpZHRoQW5kTWFyZ2luIGlubGluZUJsb2NrV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94Jiwg
Y29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmKTsKICAgICAgICAgT3B0aW9uYWw8SW5saW5lTGF5
b3V0VW5pdD4gY29tcHV0ZWRUZXh0SW5kZW50KGNvbnN0IENvbnRhaW5lciYgZm9ybWF0dGluZ0Nv
bnRleHRSb290LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKIApAQCAtNzcs
MjEgKzc3LDIxIEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBHZW9tZXRyeSgqdGhpcyk7IH0K
IAotICAgIHZvaWQgbGluZUxheW91dChjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYpOwotICAg
IHZvaWQgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IEJveCYsIEludmFsaWRhdGlv
blN0YXRlJiwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmLCBjb25zdCBVc2VkVmVydGljYWxW
YWx1ZXMmKTsKLSAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsQW5kVmVydGljYWxHZW9tZXRyeShj
b25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYsIGNvbnN0IFVzZWRWZXJ0aWNh
bFZhbHVlcyYpOworICAgIHZvaWQgbGluZUxheW91dChjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmKTsKKyAgICB2b2lkIGxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmLCBJ
bnZhbGlkYXRpb25TdGF0ZSYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZl
cnRpY2FsQ29uc3RyYWludHMmKTsKKyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsQW5kVmVydGlj
YWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25z
dCBWZXJ0aWNhbENvbnN0cmFpbnRzJik7CiAKLSAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0
aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVz
Jik7Ci0gICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChj
b25zdCBCb3gmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYsIGNvbnN0IFVzZWRWZXJ0aWNh
bFZhbHVlcyYpOwotICAgIElubGluZUxheW91dFVuaXQgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZv
ckNvbnN0cmFpbnQoY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmKSBjb25zdDsKKyAgICB2b2lk
IGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYpOworICAgIHZvaWQgY29tcHV0ZVdpZHRoQW5kSGVpZ2h0
Rm9yUmVwbGFjZWRJbmxpbmVCb3goY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYpOworICAgIElubGluZUxheW91dFVuaXQg
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0
IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJik7Ci0gICAgdm9pZCBjb21wdXRlSGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiwgY29u
c3QgVXNlZFZlcnRpY2FsVmFsdWVzJik7Ci0gICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4o
Y29uc3QgQm94JiwgY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmKTsKKyAgICB2b2lkIGNvbXB1
dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYpOworICAgIHZvaWQgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJik7CisgICAg
dm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJik7CiAKICAgICB2b2lkIGNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQoKTsK
LSAgICBMaW5lQnVpbGRlcjo6Q29uc3RyYWludHMgY29uc3RyYWludHNGb3JMaW5lKGNvbnN0IFVz
ZWRIb3Jpem9udGFsVmFsdWVzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7Ci0g
ICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpM
aW5lQ29udGVudCYsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJik7CisgICAgTGluZUJ1aWxk
ZXI6OkNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzRm9yTGluZShjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wKTsKKyAgICB2b2lkIHNldERp
c3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50Jiwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlRm9ybWF0
dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJik7CiAKICAgICBjb25zdCBJbmxpbmVG
b3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0
PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0
ZSgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNw
cAppbmRleCAyMGRiMTRlNDhmZmNiY2I5YWYwMGMzNWUwODFlMTM2ZDkxZTFiODVhLi45YWM2NTVh
NTY1ZjI1NWU5MzM4YWI2NjM3YmMyODY2NjdmNGNjNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtNDQsNyArNDQsNyBAQCBDb250ZW50
V2lkdGhBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVC
bG9ja1dpZHRoQW5kTWFyZwogCiAgICAgLy8gRXhhY3RseSBhcyBpbmxpbmUgcmVwbGFjZWQgZWxl
bWVudHMuCiAgICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5yZXBsYWNlZCgpKQotICAgICAg
ICByZXR1cm4gaW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2Vk
V2lkdGhBbmRNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290LCB1c2VkSG9yaXpvbnRhbFZhbHVl
cywgeyB9KTsKIAogICAgIC8vIDEwLjMuOSAnSW5saW5lLWJsb2NrJywgbm9uLXJlcGxhY2VkIGVs
ZW1lbnRzIGluIG5vcm1hbCBmbG93CiAKQEAgLTU2LDIyICs1NiwyMiBAQCBDb250ZW50V2lkdGhB
bmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja1dp
ZHRoQW5kTWFyZwogICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgoZm9ybWF0dGluZ0Nv
bnRleHRSb290LCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb25zdHJhaW50cy5sb2dpY2FsV2lkdGgp
OwogCiAgICAgLy8gIzIKLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21l
dHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290LCB1c2Vk
SG9yaXpvbnRhbFZhbHVlcyk7CisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBH
ZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGZvcm1hdHRpbmdDb250ZXh0Um9vdCwg
dXNlZEhvcml6b250YWxWYWx1ZXMuY29uc3RyYWludHMpOwogCiAgICAgcmV0dXJuIENvbnRlbnRX
aWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgeyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQu
dmFsdWVPcigwX2x1KSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUp
IH0sIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiB9OwogfQogCi1Db250ZW50SGVpZ2h0QW5kTWFy
Z2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRB
bmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVz
JiB1c2VkSG9yaXpvbnRhbFZhbHVlcywgY29uc3QgVXNlZFZlcnRpY2FsVmFsdWVzJiB1c2VkVmVy
dGljYWxWYWx1ZXMpIGNvbnN0CitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBjb25zdCBVc2VkVmVydGljYWxWYWx1ZXMmIHVzZWRWZXJ0aWNhbFZhbHVlcykgY29u
c3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwogCiAgICAgLy8gMTAuNi4y
IElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMg
aW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1h
bCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cwogICAgIGlmIChsYXlvdXRCb3gu
cmVwbGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2lu
KGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7Cisg
ICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cywgdXNlZFZlcnRpY2FsVmFsdWVzKTsKIAogICAgIC8vIDEwLjYu
NiBDb21wbGljYXRlZCBjYXNlcwogICAgIC8vIC0gJ0lubGluZS1ibG9jaycsIG5vbi1yZXBsYWNl
ZCBlbGVtZW50cy4KLSAgICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIHVzZWRI
b3Jpem9udGFsVmFsdWVzLCB1c2VkVmVydGljYWxWYWx1ZXMpOworICAgIHJldHVybiBjb21wbGlj
YXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB1c2VkVmVydGljYWxW
YWx1ZXMpOwogfQogCiBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVGV4dEluZGVudChjb25zdCBDb250YWluZXImIGZv
cm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRl
eCA0ZGJiMjBjZGI5ZWRmMzgzZDk0ZDIwM2FlZDM3ZDYzMmJkYmE2YzMwLi4zY2I5Y2EzZjdjNDIz
MmVhNzc5Nzc2OTNiOWU5YjYyODVlNDNmNWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4
dC5jcHAKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMoKQogICAgICAgICAgICAgICAgIGludHJpbnNp
Y1dpZHRoID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZG93bmNhc3Q8
Q29udGFpbmVyPih0YWJsZUNlbGxCb3gpLCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCk7CiAgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IGdlb21l
dHJ5KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0aCh0YWJsZUNlbGxCb3gsICppbnRyaW5zaWNXaWR0
aCk7CiAgICAgICAgICAgICBhdXRvIGJvcmRlciA9IGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIo
dGFibGVDZWxsQm94KTsKLSAgICAgICAgICAgIGF1dG8gcGFkZGluZyA9ICpnZW9tZXRyeSgpLmNv
bXB1dGVkUGFkZGluZyh0YWJsZUNlbGxCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgSG9yaXpv
bnRhbENvbnN0cmFpbnRzIHsgeyB9LCB7IH0gfSB9KTsKKyAgICAgICAgICAgIGF1dG8gcGFkZGlu
ZyA9ICpnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyh0YWJsZUNlbGxCb3gsIHsgfSk7CiAKICAg
ICAgICAgICAgIGludHJpbnNpY1dpZHRoLT5leHBhbmQoYm9yZGVyLmhvcml6b250YWwud2lkdGgo
KSArIHBhZGRpbmcuaG9yaXpvbnRhbC53aWR0aCgpKTsKICAgICAgICAgICAgIGZvcm1hdHRpbmdT
dGF0ZS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KHRhYmxlQ2VsbEJveCwgKmlu
dHJpbnNpY1dpZHRoKTsK
</data>
<flag name="review"
          id="402943"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>