<?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>226153</bug_id>
          
          <creation_ts>2021-05-23 06:46:14 -0700</creation_ts>
          <short_desc>[LFC] Rename the geometry() helpers to formattingGeometry()</short_desc>
          <delta_ts>2021-05-24 12:26:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762903</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-23 06:46:14 -0700</bug_when>
    <thetext>they return a FormattingGeometry object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762904</commentid>
    <comment_count>1</comment_count>
      <attachid>429459</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-23 06:47:51 -0700</bug_when>
    <thetext>Created attachment 429459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762905</commentid>
    <comment_count>2</comment_count>
      <attachid>429460</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-23 06:57:43 -0700</bug_when>
    <thetext>Created attachment 429460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763179</commentid>
    <comment_count>3</comment_count>
      <attachid>429545</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-24 10:24:26 -0700</bug_when>
    <thetext>Created attachment 429545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763195</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-24 11:08:19 -0700</bug_when>
    <thetext>Committed r277957 (238084@main): &lt;https://commits.webkit.org/238084@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429545.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763196</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-24 11:09:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/78409658&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429459</attachid>
            <date>2021-05-23 06:47:51 -0700</date>
            <delta_ts>2021-05-23 06:57:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226153-20210523064750.patch</filename>
            <type>text/plain</type>
            <size>56218</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDcyMDg4YzEzYTY1N2Zi
ZTYwNjZkYjJmODRlNmIwZTI2NmZhZGUxMC4uNWQ3ZTA1M2Y0OThkZDA3NDk1ZGQyNTljNGU2NThh
NDgxNmIwZWEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTA1LTIzICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBSZW5hbWUgdGhlIGdl
b21ldHJ5KCkgaGVscGVycyB0byBmb3JtYXR0aW5nR2VvbWV0cnkoKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxv
d1ZlcnRpY2FsR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93Q29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nR2VvbWV0cnkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Z2Vv
bWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdRdWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nUXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhl
ZEhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9j
ay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRp
b25lZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNlc3RvcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lk
dGhBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ0dlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5o
OgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVy
L1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRUYWJs
ZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nRm9yVGFibGVCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlV2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRN
YXJnaW5Gb3JUYWJsZUJveCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9m
bGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2lj
V2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ0dlb21ldHJ5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0Zs
ZXhGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9y
Rm9ybWF0dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ0dlb21l
dHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6Omdlb21ldHJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNl
dFVzZWRHZW9tZXRyeUZvclJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXRDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
YWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nR2VvbWV0cnkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9U
YWJsZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy90YWJsZS9UYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlTGF5b3V0OjpkaXN0cmlidXRlZFZlcnRpY2FsU3Bh
Y2UpOgorCiAyMDIxLTA1LTIyICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbTEZDXSBGb3JtYXR0aW5nR2VvbWV0cnkgZnVuY3Rpb25zIHNob3VsZCBhbGwgYmUgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMDE4MTgyZjI4YWViZjZiZmQ0ODg1
N2UxZDNhZDEyMzU3YzI2YWU1OC4uNTQ3N2JkYTY0MGRmYjUwMDI5MzAxZjM4NjViOTRhYTVjYTAz
NmVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTc1LDE4ICs3NSwxOCBAQCB2
b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5
KGNvbnN0IEJveCYgbGF5b3V0Qm94LAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpOwogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRV
bml0PiB1c2VkV2lkdGgpIHsKLSAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkub3V0T2ZGbG93SG9y
aXpvbnRhbEdlb21ldHJ5KGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgY29uc3Ry
YWludHMudmVydGljYWwsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisgICAgICAgIHJldHVybiBmb3Jt
YXR0aW5nR2VvbWV0cnkoKS5vdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkobGF5b3V0Qm94LCBj
b25zdHJhaW50cy5ob3Jpem9udGFsLCBjb25zdHJhaW50cy52ZXJ0aWNhbCwgeyB1c2VkV2lkdGgs
IHsgfSB9KTsKICAgICB9OwogCiAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnN0
cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoOwogICAgIGF1dG8gaG9yaXpvbnRhbEdlb21l
dHJ5ID0gY29tcHV0ZSh7IH0pOwotICAgIGlmIChhdXRvIG1heFdpZHRoID0gZ2VvbWV0cnkoKS5j
b21wdXRlZE1heFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CisgICAg
aWYgKGF1dG8gbWF4V2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1heFdpZHRo
KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CiAgICAgICAgIGF1dG8gbWF4SG9y
aXpvbnRhbEdlb21ldHJ5ID0gY29tcHV0ZShtYXhXaWR0aCk7CiAgICAgICAgIGlmIChob3Jpem9u
dGFsR2VvbWV0cnkuY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA+IG1heEhvcml6
b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQogICAgICAg
ICAgICAgaG9yaXpvbnRhbEdlb21ldHJ5ID0gbWF4SG9yaXpvbnRhbEdlb21ldHJ5OwogICAgIH0K
IAotICAgIGlmIChhdXRvIG1pbldpZHRoID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxh
eW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CisgICAgaWYgKGF1dG8gbWluV2lkdGgg
PSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxheW91dEJveCwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpKSB7CiAgICAgICAgIGF1dG8gbWluSG9yaXpvbnRhbEdlb21ldHJ5ID0g
Y29tcHV0ZShtaW5XaWR0aCk7CiAgICAgICAgIGlmIChob3Jpem9udGFsR2VvbWV0cnkuY29udGVu
dFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbkhvcml6b250YWxHZW9tZXRyeS5jb250
ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQogICAgICAgICAgICAgaG9yaXpvbnRhbEdl
b21ldHJ5ID0gbWluSG9yaXpvbnRhbEdlb21ldHJ5OwpAQCAtMTAzLDE4ICsxMDMsMTggQEAgdm9p
ZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29u
c3QgQm94JiBsYXlvdXRCb3gsIGMKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKTsKICAgICBhdXRvIGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5p
dD4gdXNlZEhlaWdodCkgewotICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5vdXRPZkZsb3dWZXJ0
aWNhbEdlb21ldHJ5KGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgY29uc3RyYWlu
dHMudmVydGljYWwsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdH
ZW9tZXRyeSgpLm91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkobGF5b3V0Qm94LCBjb25zdHJhaW50
cy5ob3Jpem9udGFsLCBjb25zdHJhaW50cy52ZXJ0aWNhbCwgeyB1c2VkSGVpZ2h0IH0pOwogICAg
IH07CiAKICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9ICpjb25zdHJhaW50cy52ZXJ0
aWNhbC5sb2dpY2FsSGVpZ2h0OwogICAgIGF1dG8gdmVydGljYWxHZW9tZXRyeSA9IGNvbXB1dGUo
eyB9KTsKLSAgICBpZiAoYXV0byBtYXhIZWlnaHQgPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVp
Z2h0KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSkgeworICAgIGlmIChhdXRvIG1h
eEhlaWdodCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVpZ2h0KGxheW91dEJv
eCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSkgewogICAgICAgICBhdXRvIG1heFZlcnRpY2FsR2Vv
bWV0cnkgPSBjb21wdXRlKG1heEhlaWdodCk7CiAgICAgICAgIGlmICh2ZXJ0aWNhbEdlb21ldHJ5
LmNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA+IG1heFZlcnRpY2FsR2VvbWV0
cnkuY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KQogICAgICAgICAgICAgdmVy
dGljYWxHZW9tZXRyeSA9IG1heFZlcnRpY2FsR2VvbWV0cnk7CiAgICAgfQogCi0gICAgaWYgKGF1
dG8gbWluSGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gsIGNv
bnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKKyAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBmb3JtYXR0
aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9j
a0hlaWdodCkpIHsKICAgICAgICAgYXV0byBtaW5WZXJ0aWNhbEdlb21ldHJ5ID0gY29tcHV0ZSht
aW5IZWlnaHQpOwogICAgICAgICBpZiAodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5k
TWFyZ2luLmNvbnRlbnRIZWlnaHQgPCBtaW5WZXJ0aWNhbEdlb21ldHJ5LmNvbnRlbnRIZWlnaHRB
bmRNYXJnaW4uY29udGVudEhlaWdodCkKICAgICAgICAgICAgIHZlcnRpY2FsR2VvbWV0cnkgPSBt
aW5WZXJ0aWNhbEdlb21ldHJ5OwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhj
b25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludCkKIHsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7Ci0gICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKGdl
b21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGF5b3V0Qm94KSk7Ci0gICAgYm94R2VvbWV0cnkuc2V0
UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50LmxvZ2ljYWxXaWR0aCkpOworICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcihmb3Jt
YXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKKyAgICBib3hHZW9t
ZXRyeS5zZXRQYWRkaW5nKGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlv
dXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50LmxvZ2ljYWxXaWR0aCkpOwogfQogCiB2b2lkIEZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRl
JiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50
JiBjb25zdHJhaW50cykKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25T
dAogCiAgICAgYXV0byBjb25zdHJhaW50c0ZvckxheW91dEJveCA9IFsmXSAoY29uc3QgYXV0byYg
b3V0T2ZGbG93Qm94KSB7CiAgICAgICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9IG91dE9mRmxv
d0JveC5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgcmV0dXJuICZjb250YWluaW5nQmxvY2sg
PT0gJnJvb3QoKSA/IGNvbnN0cmFpbnRzIDogZ2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvck91dE9m
Rmxvd0NvbnRlbnQoY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgcmV0dXJuICZjb250YWluaW5n
QmxvY2sgPT0gJnJvb3QoKSA/IGNvbnN0cmFpbnRzIDogZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29u
c3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgfTsKIAog
ICAgIGZvciAoYXV0byYgb3V0T2ZGbG93Qm94IDogZm9ybWF0dGluZ1N0YXRlKCkub3V0T2ZGbG93
Qm94ZXMoKSkgewpAQCAtMTYxLDkgKzE2MSw5IEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dE91dE9mRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvblN0CiAg
ICAgICAgICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KCpv
dXRPZkZsb3dCb3gpOwogICAgICAgICAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IExheW91
dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5b3V0U3Rh
dGUoKSk7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVyQm94Lmhhc0luRmxvd09yRmxvYXRpbmdD
aGlsZCgpKQotICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJbkZsb3dD
b250ZW50KGludmFsaWRhdGlvblN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudChjb250YWluZXJCb3gpKTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4
dC0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZm9ybWF0dGluZ0dlb21l
dHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5lckJveCkpOwogICAgICAg
ICAgICAgY29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29udGFpbmVyQm94LCBjb250
YWluaW5nQmxvY2tDb25zdHJhaW50cyk7Ci0gICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+
bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZ2VvbWV0cnkoKS5jb25z
dHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7CisgICAgICAgICAgICBm
b3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0
ZSwgZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNv
bnRhaW5lckJveCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNvbXB1dGVPdXRPZkZs
b3dWZXJ0aWNhbEdlb21ldHJ5KCpvdXRPZkZsb3dCb3gsIGNvbnRhaW5pbmdCbG9ja0NvbnN0cmFp
bnRzKTsKICAgICB9CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6
Y29sbGVjdE91dE9mRmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKQogICAgIH0KIH0KIAotRm9ybWF0
dGluZ0dlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSgpIGNvbnN0CitGb3JtYXR0
aW5nR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEZvcm1hdHRpbmdHZW9tZXRyeSgqdGhpcyk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRp
bmdDb250ZXh0LmgKaW5kZXggZTMyMzkwZGVlOTNiZGMyNDM1OTRmZDA2YTc1MjJhMTdjZDc1OTYx
Yy4uNzM0NDM4MGU5MzY5MWViOTQxOGI3NzUzMTllYzFmM2FkNGEwZmJhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ0NvbnRleHQuaApAQCAtOTEsNyArOTEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1c2luZyBM
YXlvdXRRdWV1ZSA9IFZlY3Rvcjxjb25zdCBCb3gqPjsKIHByaXZhdGU6Ci0gICAgRm9ybWF0dGlu
Z0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7CisgICAgRm9ybWF0dGluZ0dlb21ldHJ5IGZvcm1h
dHRpbmdHZW9tZXRyeSgpIGNvbnN0OwogICAgIEZvcm1hdHRpbmdRdWlya3MgcXVpcmtzKCkgY29u
c3Q7CiAKICAgICB2b2lkIGNvbGxlY3RPdXRPZkZsb3dEZXNjZW5kYW50c0lmTmVlZGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAppbmRleCBkNTY4YWVlYzFmNWE2ODI5MzZkNDZiYmU1MmZm
Njk0ZTRiMTYwZjU2Li5iOWU3ZmJkNTg1ZThlOGVjYmQwNDFjMDMxZTAyM2QwNGQ4ODU3YTFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAgLTU2LDkgKzU2LDkgQEAgTGF5b3V0VW5pdCBG
b3JtYXR0aW5nUXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhG
aXhlZEhlaWdodCgKICAgICAgICAgLy8gLWFuZCBpdCdzIHRvdGFsbHkgaW5zYW5lIGJlY2F1c2Ug
bm93IHdlIGZyZWVseSB0cmF2ZWwgYWNyb3NzIGZvcm1hdHRpbmcgY29udGV4dCBib3VuZGFyaWVz
IGFuZCBjb21wdXRlZCBtYXJnaW5zIGFyZSBub25leGlzdGVudC4KICAgICAgICAgaWYgKGNvbnRh
aW5pbmdCbG9jay0+aXNCb2R5Qm94KCkgfHwgY29udGFpbmluZ0Jsb2NrLT5pc0RvY3VtZW50Qm94
KCkpIHsKIAotICAgICAgICAgICAgYXV0byBnZW9tZXRyeSA9IEZvcm1hdHRpbmdHZW9tZXRyeSB7
IGZvcm1hdHRpbmdDb250ZXh0IH07Ci0gICAgICAgICAgICBhdXRvIGhvcml6b250YWxDb25zdHJh
aW50cyA9IGdlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxv
Y2stPmNvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpG
aW5kRml4ZWRIZWlnaHRBbmNlc3RvclF1aXJrKS5ob3Jpem9udGFsOwotICAgICAgICAgICAgYXV0
byB2ZXJ0aWNhbE1hcmdpbiA9IGdlb21ldHJ5LmNvbXB1dGVkVmVydGljYWxNYXJnaW4oKmNvbnRh
aW5pbmdCbG9jaywgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgIGF1dG8gZm9y
bWF0dGluZ0dlb21ldHJ5ID0gRm9ybWF0dGluZ0dlb21ldHJ5IHsgZm9ybWF0dGluZ0NvbnRleHQg
fTsKKyAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ0dl
b21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpGaW5kRml4ZWRI
ZWlnaHRBbmNlc3RvclF1aXJrKS5ob3Jpem9udGFsOworICAgICAgICAgICAgYXV0byB2ZXJ0aWNh
bE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKCpjb250
YWluaW5nQmxvY2ssIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAKICAgICAgICAgICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmNvbnRhaW5p
bmdCbG9jaywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6RmluZEZpeGVkSGVpZ2h0
QW5jZXN0b3JRdWlyayk7CiAgICAgICAgICAgICBhdXRvIHZlcnRpY2FsUGFkZGluZyA9IGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgYm94R2VvbWV0cnkucGFkZGluZ0JvdHRv
bSgpLnZhbHVlT3IoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0LmNwcAppbmRleCBmZjVjNTAzZjRkMDUxY2M1ODdlM2MwM2NhY2Q0YTMzYzBmNmJlZThlLi45
MzI4NGRkMWZlNjM0MWRhMmJhYTcwZmI2ZjY3NTAyMjQyYzkzMTgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9p
ZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlv
blN0YXRlJiBpbnZhbGlkYXRpb24KIAogICAgIGF1dG8gY29uc3RyYWludHNGb3JMYXlvdXRCb3gg
PSBbJl0gKGNvbnN0IGF1dG8mIGxheW91dEJveCkgewogICAgICAgICBhdXRvJiBjb250YWluaW5n
QmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgIHJldHVybiAmY29u
dGFpbmluZ0Jsb2NrID09ICZmb3JtYXR0aW5nUm9vdCA/IGNvbnN0cmFpbnRzIDogZ2VvbWV0cnko
KS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAg
cmV0dXJuICZjb250YWluaW5nQmxvY2sgPT0gJmZvcm1hdHRpbmdSb290ID8gY29uc3RyYWludHMg
OiBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFp
bmluZ0Jsb2NrKTsKICAgICB9OwogCiAgICAgLy8gVGhpcyBpcyBhIHBvc3Qtb3JkZXIgdHJlZSB0
cmF2ZXJzYWwgbGF5b3V0LgpAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0
aW9uCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZm9ybWF0dGluZ0NvbnRleHQgPSBMYXlvdXRD
b250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChjb250YWluZXJCb3gsIGxheW91dFN0YXRl
KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyQm94LmlzVGFibGVXcmFwcGVy
Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxUYWJsZVdyYXBwZXJCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0PigqZm9ybWF0dGluZ0NvbnRleHQpLnNldEhvcml6b250YWxDb25z
dHJhaW50c0lnbm9yaW5nRmxvYXRzKGNvbnRhaW5pbmdCbG9ja0NvbnN0cmFpbnRzLmhvcml6b250
YWwpOwotICAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0SW5GbG93
Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZ2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxv
d0NvbnRlbnQoY29udGFpbmVyQm94KSk7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdD
b250ZXh0LT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBmb3JtYXR0aW5n
R2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5G
bG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW9uCiAgICAgICAgICAgICAg
ICAgLy8gTm93IHRoYXQgd2UgY29tcHV0ZWQgdGhlIGJveCdzIGhlaWdodCwgd2UgY2FuIGxheW91
dCB0aGUgb3V0LW9mLWZsb3cgZGVzY2VuZGFudHMuCiAgICAgICAgICAgICAgICAgaWYgKGlzPENv
bnRhaW5lckJveD4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkuaGFzQ2hpbGQoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBjb250YWluZXJCb3gg
PSBkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgICAg
IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5
b3V0U3RhdGUoKSktPmxheW91dE91dE9mRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGdl
b21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnRhaW5lckJveCkpOwor
ICAgICAgICAgICAgICAgICAgICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4
dChjb250YWluZXJCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRPdXRPZkZsb3dDb250ZW50KGlu
dmFsaWRhdGlvblN0YXRlLCBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvck91dE9m
Rmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKCFlc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0ICYmIGlz
PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSkKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IENv
bnRhaW5lckJveCYgYwogICAgIGZvciAoYXV0byYgY2hpbGRCb3ggOiBjaGlsZHJlbk9mVHlwZTxC
b3g+KGNvbnRhaW5lckJveCkpIHsKICAgICAgICAgaWYgKCFjaGlsZEJveC5pc0luRmxvd1Bvc2l0
aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIHBvc2l0aW9uT2Zm
c2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY2hpbGRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgIGF1dG8gcG9zaXRpb25PZmZzZXQgPSBm
b3JtYXR0aW5nR2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY2hpbGRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJv
eEdlb21ldHJ5KGNoaWxkQm94KS5tb3ZlKHBvc2l0aW9uT2Zmc2V0KTsKICAgICB9CiAgICAgTE9H
X1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIkVuZDogbW92
ZSBpbi1mbG93IHBvc2l0aW9uZWQgY2hpbGRyZW4gLT4gcGFyZW50OiAiIDw8ICZjb250YWluZXJC
b3gpOwpAQCAtMjY2LDEyICsyNjYsMTIgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpw
bGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihjb25zdCBDb250YWluZXJCb3gmIGMKIAogdm9p
ZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbihj
b25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxD
b25zdHJhaW50cykKIHsKLSAgICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRC
b3gpLnNldExvZ2ljYWxUb3AoZ2VvbWV0cnkoKS5zdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGxheW91
dEJveCwgdmVydGljYWxDb25zdHJhaW50cykpOworICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdl
b21ldHJ5KGxheW91dEJveCkuc2V0TG9naWNhbFRvcChmb3JtYXR0aW5nR2VvbWV0cnkoKS5zdGF0
aWNWZXJ0aWNhbFBvc2l0aW9uKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cykpOwogfQog
CiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9z
aXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYg
aG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewotICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21l
dHJ5KGxheW91dEJveCkuc2V0TG9naWNhbExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNIb3Jpem9udGFs
UG9zaXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpKTsKKyAgICBmb3JtYXR0
aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldExvZ2ljYWxMZWZ0KGZvcm1hdHRp
bmdHZW9tZXRyeSgpLnN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRCb3gsIGhvcml6b250
YWxDb25zdHJhaW50cykpOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnByZWNv
bXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94QW5kQW5jZXN0b3JzKGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjb25zdCBDb25zdHJhaW50c1BhaXImIGNvbnN0cmFpbnRzUGFpcikKQEAgLTI4Niw3ICsy
ODYsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBv
c2l0aW9uRm9yQm94QW5kQW5jZXN0b3JzKGNvbnN0CiAgICAgLy8KICAgICAvLyBUaGUgaWRlYSBo
ZXJlIGlzIHRoYXQgYXMgbG9uZyBhcyB3ZSBkb24ndCBjcm9zcyB0aGUgYmxvY2sgZm9ybWF0dGlu
ZyBjb250ZXh0IGJvdW5kYXJ5LCB3ZSBzaG91bGQgYmUgYWJsZSB0byBwcmUtY29tcHV0ZSB0aGUg
ZmluYWwgdG9wIHBvc2l0aW9uLgogICAgIC8vIEZJWE1FOiB3ZSBjdXJyZW50bHkgZG9uJ3QgYWNj
b3VudCBmb3IgdGhlICJjbGVhciIgcHJvcGVydHkgd2hlbiBjb21wdXRpbmcgdGhlIGZpbmFsIHBv
c2l0aW9uIGZvciBhbiBhbmNlc3Rvci4KLSAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGdl
b21ldHJ5KCk7CisgICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0cnkgPSB0aGlzLT5mb3JtYXR0aW5n
R2VvbWV0cnkoKTsKICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gJmxheW91dEJveDsgYW5jZXN0
b3IgJiYgYW5jZXN0b3IgIT0gJnJvb3QoKTsgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5p
bmdCbG9jaygpKSB7CiAgICAgICAgIGF1dG8gY29uc3RyYWludHNGb3JBbmNlc3RvciA9IFsmXSB7
CiAgICAgICAgICAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBhbmNlc3Rvci0+Y29udGFpbmlu
Z0Jsb2NrKCk7CkBAIC0zNjAsNyArMzYwLDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGkKICAg
ICAgICAgLy8gRmxvYXQgYXZvaWRlcnMnIGF2YWlsYWJsZSB3aWR0aCBtaWdodCBiZSBzaHJ1bmsg
YnkgZXhpc3RpbmcgZmxvYXRzIGluIHRoZSBjb250ZXh0LgogICAgICAgICBhdmFpbGFibGVXaWR0
aEZsb2F0QXZvaWRlciA9IHVzZWRBdmFpbGFibGVXaWR0aEZvckZsb2F0QXZvaWRlcihmbG9hdGlu
Z0NvbnRleHQsIGxheW91dEJveCwgY29uc3RyYWludHNQYWlyKTsKICAgICB9Ci0gICAgYXV0byBj
b250ZW50V2lkdGhBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmNvbXB1dGVkQ29udGVudFdpZHRoQW5k
TWFyZ2luKGxheW91dEJveCwgY29uc3RyYWludHNQYWlyLmNvbnRhaW5pbmdCbG9jay5ob3Jpem9u
dGFsLCBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcik7CisgICAgYXV0byBjb250ZW50V2lkdGhB
bmRNYXJnaW4gPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZENvbnRlbnRXaWR0aEFuZE1h
cmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpci5jb250YWluaW5nQmxvY2suaG9yaXpvbnRh
bCwgYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpOwogICAgIGF1dG8mIGJveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KTsKICAgICBib3hHZW9tZXRy
eS5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCk7
CiAgICAgYm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IGNvbnRlbnRXaWR0aEFuZE1h
cmdpbi51c2VkTWFyZ2luLnN0YXJ0LCBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5l
bmQgfSk7CkBAIC0zNzAsMTcgKzM3MCwxNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0CiB7CiAg
ICAgYXV0byBjb21wdXRlID0gWyZdKE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpIC0+
IENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gewogICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93
KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5pbkZsb3dDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0p
OworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmluRmxvd0NvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IHVzZWRI
ZWlnaHQgfSk7CiAKICAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0p
OworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVu
dEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwsIHsgdXNl
ZEhlaWdodCB9KTsKIAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9OwogCiAgICAgYXV0byBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gY29t
cHV0ZSh7IH0pOwotICAgIGlmIChhdXRvIG1heEhlaWdodCA9IGdlb21ldHJ5KCkuY29tcHV0ZWRN
YXhIZWlnaHQobGF5b3V0Qm94KSkgeworICAgIGlmIChhdXRvIG1heEhlaWdodCA9IGZvcm1hdHRp
bmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVpZ2h0KGxheW91dEJveCkpIHsKICAgICAgICAgaWYg
KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA+ICptYXhIZWlnaHQpIHsKICAg
ICAgICAgICAgIGF1dG8gbWF4SGVpZ2h0QW5kTWFyZ2luID0gY29tcHV0ZShtYXhIZWlnaHQpOwog
ICAgICAgICAgICAgLy8gVXNlZCBoZWlnaHQgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KQEAgLTM4
OSw3ICszODksNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRB
bmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWluSGVpZ2h0KGxh
eW91dEJveCkpIHsKKyAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBmb3JtYXR0aW5nR2VvbWV0cnko
KS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChjb250ZW50SGVp
Z2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPCAqbWluSGVpZ2h0KSB7CiAgICAgICAgICAgICBh
dXRvIG1pbkhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWluSGVpZ2h0KTsKICAgICAgICAgICAg
IC8vIFVzZWQgaGVpZ2h0IHNob3VsZCByZW1haW4gdGhlIHNhbWUuCkBAIC00NzgsNyArNDc4LDcg
QEAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWkKICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9
ICpxdWV1ZS50YWtlTGFzdCgpOwogICAgICAgICAgICAgYXV0byBkZXNkZW5kYW50Q29uc3RyYWlu
dHMgPSBmb3JtYXR0aW5nU3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChsYXlv
dXRCb3gpOwogICAgICAgICAgICAgaWYgKCFkZXNkZW5kYW50Q29uc3RyYWludHMpIHsKLSAgICAg
ICAgICAgICAgICBkZXNkZW5kYW50Q29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMobGF5b3V0Qm94KTsKKyAgICAgICAgICAgICAgICBkZXNkZW5kYW50Q29u
c3RyYWludHMgPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KGxheW91dEJveCk7CiAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHNGb3JCb3gobGF5b3V0Qm94LCAqZGVzZGVuZGFudENvbnN0cmFpbnRz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnN0cmFpbnRzLm1pbmltdW0gPSBzdGQ6
Om1heChjb25zdHJhaW50cy5taW5pbXVtLCBkZXNkZW5kYW50Q29uc3RyYWludHMtPm1pbmltdW0p
OwpAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6dXBkYXRl
TWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoY29uc3QgQm94JiBsYXlvCiAgICAgfQogfQog
Ci1CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRy
eSgpIGNvbnN0CitCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpmb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdAogewogICAgIHJldHVybiBCbG9ja0Zvcm1hdHRp
bmdHZW9tZXRyeSB7ICp0aGlzIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nQ29udGV4dC5oCmluZGV4IDNjYTkwNzViOTQyZDBkYTc3NzhhMjc2MWIyOTZhODQzNDA0MTg4
OTMuLjc2MjY1NTg4ZGQ5ODliODgxMDA1NjI5YjJmYzE3ZmNkOTFjNTNmMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC04MCw3ICs4MCw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKGNv
bnN0IEJveCYpOwogCiAgICAgQmxvY2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgp
IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4
dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9Ci0gICAgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgZ2Vv
bWV0cnkoKSBjb25zdDsKKyAgICBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBmb3JtYXR0aW5nR2Vv
bWV0cnkoKSBjb25zdDsKICAgICBCbG9ja01hcmdpbkNvbGxhcHNlIG1hcmdpbkNvbGxhcHNlKCkg
Y29uc3Q7CiAKICNpZiBBU1NFUlRfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0LmNwcAppbmRleCBhYTc3NTQ2MzAyZThlOWU4ZDlkZWYwZTExMzMwYTY4Mjc2NTE4
YjhjLi45NTQzMDg4NjI0M2Q1OWY2N2ZkNGFhMTEzNjNjMTgzYmQwZTVjZDVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3Jh
cHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJs
ZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNzcsNyArNzcsNyBAQCB2b2lk
IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dFRhYmxlQm94KGNvbnN0
IENvbnRhaW5lckJveCYgdGFibAogCiAgICAgaWYgKHRhYmxlQm94Lmhhc0NoaWxkKCkpIHsKICAg
ICAgICAgYXV0byBpbnZhbGlkYXRpb25TdGF0ZSA9IEludmFsaWRhdGlvblN0YXRlIHsgfTsKLSAg
ICAgICAgTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQodGFibGVCb3gsIGxh
eW91dFN0YXRlKCkpLT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBnZW9t
ZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCh0YWJsZUJveCkpOworICAgICAgICBM
YXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dCh0YWJsZUJveCwgbGF5b3V0U3Rh
dGUoKSktPmxheW91dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGZvcm1hdHRpbmdH
ZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCh0YWJsZUJveCkpOwogICAgIH0K
IAogICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW5Gb3JUYWJsZUJveCh0YWJsZUJveCwgY29uc3Ry
YWludHMpOwpAQCAtOTksMTMgKzk5LDEzIEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmdGb3JUYWJsZUJveChjb25zCiAgICAg
Ly8gbWF4aW11bSBjb2xsYXBzZWQgdG9wIGJvcmRlci4gVGhlIGJvdHRvbSBib3JkZXIgd2lkdGgg
aXMgY29tcHV0ZWQgYnkgZXhhbWluaW5nIGFsbCBjZWxscyB3aG9zZSBib3R0b20gYm9yZGVycyBj
b2xsYXBzZQogICAgIC8vIHdpdGggdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuIFRoZSBib3R0b20g
Ym9yZGVyIHdpZHRoIGlzIGVxdWFsIHRvIGhhbGYgb2YgdGhlIG1heGltdW0gY29sbGFwc2VkIGJv
dHRvbSBib3JkZXIuCiAgICAgYXV0byYgZ3JpZCA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRU
YWJsZUZvcm1hdHRpbmdTdGF0ZSh0YWJsZUJveCkudGFibGVHcmlkKCk7Ci0gICAgYXV0byB0YWJs
ZUJvcmRlciA9IGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIodGFibGVCb3gpOworICAgIGF1dG8g
dGFibGVCb3JkZXIgPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcih0YWJsZUJv
eCk7CiAKICAgICBhdXRvJiBmaXJzdENvbHVtbkZpcnN0Um93Qm94ID0gZ3JpZC5zbG90KHsgMCAs
IDAgfSktPmNlbGwoKS5ib3goKTsKLSAgICBhdXRvIGxlZnRCb3JkZXIgPSBzdGQ6Om1heCh0YWJs
ZUJvcmRlci5ob3Jpem9udGFsLmxlZnQsIGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoZmlyc3RD
b2x1bW5GaXJzdFJvd0JveCkuaG9yaXpvbnRhbC5sZWZ0KTsKKyAgICBhdXRvIGxlZnRCb3JkZXIg
PSBzdGQ6Om1heCh0YWJsZUJvcmRlci5ob3Jpem9udGFsLmxlZnQsIGZvcm1hdHRpbmdHZW9tZXRy
eSgpLmNvbXB1dGVkQm9yZGVyKGZpcnN0Q29sdW1uRmlyc3RSb3dCb3gpLmhvcml6b250YWwubGVm
dCk7CiAKICAgICBhdXRvJiBsYXN0Q29sdW1uRmlyc3RSb3cgPSBncmlkLnNsb3QoeyBncmlkLmNv
bHVtbnMoKS5zaXplKCkgLSAxLCAwIH0pLT5jZWxsKCkuYm94KCk7Ci0gICAgYXV0byByaWdodEJv
cmRlciA9IHN0ZDo6bWF4KHRhYmxlQm9yZGVyLmhvcml6b250YWwucmlnaHQsIGdlb21ldHJ5KCku
Y29tcHV0ZWRCb3JkZXIobGFzdENvbHVtbkZpcnN0Um93KS5ob3Jpem9udGFsLnJpZ2h0KTsKKyAg
ICBhdXRvIHJpZ2h0Qm9yZGVyID0gc3RkOjptYXgodGFibGVCb3JkZXIuaG9yaXpvbnRhbC5yaWdo
dCwgZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGFzdENvbHVtbkZpcnN0Um93
KS5ob3Jpem9udGFsLnJpZ2h0KTsKIAogICAgIGF1dG8gdG9wQm9yZGVyID0gdGFibGVCb3JkZXIu
dmVydGljYWwudG9wOwogICAgIGF1dG8gYm90dG9tQm9yZGVyID0gdGFibGVCb3JkZXIudmVydGlj
YWwuYm90dG9tOwpAQCAtMTE0LDMzICsxMTQsMzMgQEAgdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZ0ZvclRhYmxlQm94KGNvbnMK
ICAgICAgICAgYXV0byYgYm94SW5GaXJzdFJveCA9IGdyaWQuc2xvdCh7IGNvbHVtbkluZGV4LCAw
IH0pLT5jZWxsKCkuYm94KCk7CiAgICAgICAgIGF1dG8mIGJveEluTGFzdFJvdyA9IGdyaWQuc2xv
dCh7IGNvbHVtbkluZGV4LCBsYXN0Um93SW5kZXggfSktPmNlbGwoKS5ib3goKTsKIAotICAgICAg
ICB0b3BCb3JkZXIgPSBzdGQ6Om1heCh0b3BCb3JkZXIsIGdlb21ldHJ5KCkuY29tcHV0ZWRCb3Jk
ZXIoYm94SW5GaXJzdFJveCkudmVydGljYWwudG9wKTsKLSAgICAgICAgYm90dG9tQm9yZGVyID0g
c3RkOjptYXgoYm90dG9tQm9yZGVyLCBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGJveEluTGFz
dFJvdykudmVydGljYWwuYm90dG9tKTsKKyAgICAgICAgdG9wQm9yZGVyID0gc3RkOjptYXgodG9w
Qm9yZGVyLCBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihib3hJbkZpcnN0Um94
KS52ZXJ0aWNhbC50b3ApOworICAgICAgICBib3R0b21Cb3JkZXIgPSBzdGQ6Om1heChib3R0b21C
b3JkZXIsIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGJveEluTGFzdFJvdyku
dmVydGljYWwuYm90dG9tKTsKICAgICB9CiAKLSAgICB0b3BCb3JkZXIgPSBzdGQ6Om1heCh0b3BC
b3JkZXIsIGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoKnRhYmxlQm94LmZpcnN0Q2hpbGQoKSku
dmVydGljYWwudG9wKTsKKyAgICB0b3BCb3JkZXIgPSBzdGQ6Om1heCh0b3BCb3JkZXIsIGZvcm1h
dHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKCp0YWJsZUJveC5maXJzdENoaWxkKCkpLnZl
cnRpY2FsLnRvcCk7CiAgICAgZm9yIChhdXRvJiBzZWN0aW9uIDogY2hpbGRyZW5PZlR5cGU8Q29u
dGFpbmVyQm94Pih0YWJsZUJveCkpIHsKLSAgICAgICAgYXV0byBob3JpenRvbmFsQm9yZGVyID0g
Z2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihzZWN0aW9uKS5ob3Jpem9udGFsOworICAgICAgICBh
dXRvIGhvcml6dG9uYWxCb3JkZXIgPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRl
cihzZWN0aW9uKS5ob3Jpem9udGFsOwogICAgICAgICBsZWZ0Qm9yZGVyID0gc3RkOjptYXgobGVm
dEJvcmRlciwgaG9yaXp0b25hbEJvcmRlci5sZWZ0KTsKICAgICAgICAgcmlnaHRCb3JkZXIgPSBz
dGQ6Om1heChyaWdodEJvcmRlciwgaG9yaXp0b25hbEJvcmRlci5yaWdodCk7CiAgICAgfQotICAg
IGJvdHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwgZ2VvbWV0cnkoKS5jb21wdXRl
ZEJvcmRlcigqdGFibGVCb3gubGFzdENoaWxkKCkpLnZlcnRpY2FsLmJvdHRvbSk7CisgICAgYm90
dG9tQm9yZGVyID0gc3RkOjptYXgoYm90dG9tQm9yZGVyLCBmb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b21wdXRlZEJvcmRlcigqdGFibGVCb3gubGFzdENoaWxkKCkpLnZlcnRpY2FsLmJvdHRvbSk7CiAK
ICAgICBhdXRvJiByb3dzID0gZ3JpZC5yb3dzKCkubGlzdCgpOwotICAgIHRvcEJvcmRlciA9IHN0
ZDo6bWF4KHRvcEJvcmRlciwgZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dzLmZpcnN0KCku
Ym94KCkpLnZlcnRpY2FsLnRvcCk7CisgICAgdG9wQm9yZGVyID0gc3RkOjptYXgodG9wQm9yZGVy
LCBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dzLmZpcnN0KCkuYm94KCkp
LnZlcnRpY2FsLnRvcCk7CiAgICAgZm9yIChhdXRvJiByb3cgOiByb3dzKSB7Ci0gICAgICAgIGF1
dG8gaG9yaXp0b25hbEJvcmRlciA9IGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93LmJveCgp
KS5ob3Jpem9udGFsOworICAgICAgICBhdXRvIGhvcml6dG9uYWxCb3JkZXIgPSBmb3JtYXR0aW5n
R2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3cuYm94KCkpLmhvcml6b250YWw7CiAgICAgICAg
IGxlZnRCb3JkZXIgPSBzdGQ6Om1heChsZWZ0Qm9yZGVyLCBob3JpenRvbmFsQm9yZGVyLmxlZnQp
OwogICAgICAgICByaWdodEJvcmRlciA9IHN0ZDo6bWF4KHJpZ2h0Qm9yZGVyLCBob3JpenRvbmFs
Qm9yZGVyLnJpZ2h0KTsKICAgICB9Ci0gICAgYm90dG9tQm9yZGVyID0gc3RkOjptYXgoYm90dG9t
Qm9yZGVyLCBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJvd3MubGFzdCgpLmJveCgpKS52ZXJ0
aWNhbC5ib3R0b20pOworICAgIGJvdHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwg
Zm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93cy5sYXN0KCkuYm94KCkpLnZl
cnRpY2FsLmJvdHRvbSk7CiAKICAgICBhdXRvIGNvbGxhcHNlZEJvcmRlciA9IEVkZ2VzIHsgeyBs
ZWZ0Qm9yZGVyLCByaWdodEJvcmRlciB9LCB7IHRvcEJvcmRlciwgYm90dG9tQm9yZGVyIH0gfTsK
ICAgICBncmlkLnNldENvbGxhcHNlZEJvcmRlcihjb2xsYXBzZWRCb3JkZXIpOwogCiAgICAgYXV0
byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeSh0YWJsZUJveCk7
CiAgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKGNvbGxhcHNlZEJvcmRlciAvIDIpOwotICAgIGJv
eEdlb21ldHJ5LnNldFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcodGFibGVCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpKTsKKyAgICBib3hHZW9tZXRyeS5z
ZXRQYWRkaW5nKGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyh0YWJsZUJveCwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCkpOwogfQogCiB2b2lkIFRhYmxlV3Jh
cHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbkZvclRhYmxl
Qm94KGNvbnN0IENvbnRhaW5lckJveCYgdGFibGVCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQpAQCAtMTg1LDEwICsxODUsMTAgQEAgdm9pZCBU
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW5G
b3JUYWJsZUJveChjb25zdAogICAgIC8vIFNpbWlsYXIgc2V0dXAgd2l0aCBub24tdGFibGUgY29u
dGVudCB3b3VsZCByZXNvbHZlIHRoZSBpbm5lciBibG9jayBsZXZlbCBib3gncyB3aWR0aCB0byA0
MHB4OwogICAgIC8vIFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbiBpbiB0aGUgc3BlYy4KICAgICBh
dXRvIGhvcml6b250YWxDb25zdHJhaW50Rm9yUmVzb2x2aW5nV2lkdGggPSBtX2hvcml6b250YWxD
b25zdHJhaW50c0lnbm9yaW5nRmxvYXRzLmxvZ2ljYWxXaWR0aDsKLSAgICBhdXRvIGdlb21ldHJ5
ID0gdGhpcy0+Z2VvbWV0cnkoKTsKLSAgICBhdXRvIGNvbXB1dGVkV2lkdGggPSBnZW9tZXRyeS5j
b21wdXRlZFdpZHRoKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmluZ1dp
ZHRoKTsKLSAgICBhdXRvIGNvbXB1dGVkTWF4V2lkdGggPSBnZW9tZXRyeS5jb21wdXRlZE1heFdp
ZHRoKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmluZ1dpZHRoKTsKLSAg
ICBhdXRvIGNvbXB1dGVkTWluV2lkdGggPSBnZW9tZXRyeS5jb21wdXRlZE1pbldpZHRoKHRhYmxl
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmluZ1dpZHRoKTsKKyAgICBhdXRvIGZv
cm1hdHRpbmdHZW9tZXRyeSA9IHRoaXMtPmZvcm1hdHRpbmdHZW9tZXRyeSgpOworICAgIGF1dG8g
Y29tcHV0ZWRXaWR0aCA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFdpZHRoKHRhYmxlQm94
LCBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmluZ1dpZHRoKTsKKyAgICBhdXRvIGNvbXB1
dGVkTWF4V2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRNYXhXaWR0aCh0YWJsZUJv
eCwgaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdXaWR0aCk7CisgICAgYXV0byBjb21w
dXRlZE1pbldpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkTWluV2lkdGgodGFibGVC
b3gsIGhvcml6b250YWxDb25zdHJhaW50Rm9yUmVzb2x2aW5nV2lkdGgpOwogICAgIC8vIFVzZSB0
aGUgZ2VuZXJpYyBzaHJpbmstdG8tZml0LXdpZHRoIGxvZ2ljIGFzIHRoZSBpbml0aWFsIHdpZHRo
IGZvciB0aGUgdGFibGUuCiAgICAgYXV0byB1c2VkV2lkdGggPSBzdGQ6Om1pbihzdGQ6Om1heChp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2YWlsYWJsZUhvcml6b250YWxTcGFj
ZSksIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSk7CiAgICAgaWYgKGNvbXB1dGVk
V2lkdGggfHwgY29tcHV0ZWRNaW5XaWR0aCB8fCBjb21wdXRlZE1heFdpZHRoKSB7CkBAIC0yMDcs
NyArMjA3LDcgQEAgdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlV2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdAogICAgICAgICAgICAgdXNlZFdpZHRo
ID0gKmNvbXB1dGVkTWluV2lkdGg7CiAgICAgfQogCi0gICAgYXV0byBjb250ZW50V2lkdGhBbmRN
YXJnaW4gPSBnZW9tZXRyeS5pbkZsb3dDb250ZW50V2lkdGhBbmRNYXJnaW4odGFibGVCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cywgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMgeyB1c2VkV2lk
dGgsIHsgfSB9KTsKKyAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGZvcm1hdHRpbmdH
ZW9tZXRyeS5pbkZsb3dDb250ZW50V2lkdGhBbmRNYXJnaW4odGFibGVCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cywgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMgeyB1c2VkV2lkdGgsIHsgfSB9
KTsKIAogICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0
cnkodGFibGVCb3gpOwogICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50
V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKTsKQEAgLTIyMywxMSArMjIzLDExIEBAIHZvaWQg
VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdp
bkZvclRhYmxlQm94KGNvbnN0CiAgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9k
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIFRhYmxlV3JhcHBlclF1aXJrcygqdGhpcykub3ZlcnJp
ZGRlblRhYmxlSGVpZ2h0KHRhYmxlQm94KTsKICAgICAgICAgaWYgKHRhYmxlQm94Lmhhc0luRmxv
d09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuY29udGVu
dEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7CisgICAgICAgICAgICBy
ZXR1cm4gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250
ZXh0Um9vdCh0YWJsZUJveCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSgpOwogCi0gICAg
YXV0byBoZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmluRmxvd0NvbnRlbnRIZWlnaHRBbmRN
YXJnaW4odGFibGVCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwsIHsgb3ZlcnJpZGRlblRhYmxl
SGVpZ2h0IH0pOworICAgIGF1dG8gaGVpZ2h0QW5kTWFyZ2luID0gZm9ybWF0dGluZ0dlb21ldHJ5
KCkuaW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbih0YWJsZUJveCwgY29uc3RyYWludHMuaG9y
aXpvbnRhbCwgeyBvdmVycmlkZGVuVGFibGVIZWlnaHQgfSk7CiAgICAgYXV0byB2ZXJ0aWNhbE1h
cmdpbiA9IG1hcmdpbkNvbGxhcHNlKCkuY29sbGFwc2VkVmVydGljYWxWYWx1ZXModGFibGVCb3gs
IGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4pOwogICAgIC8vIENhY2hlIHRoZSBj
b21wdXRlZCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2luIHZhbHVlIHBhaXIuCiAgICAgZm9y
bWF0dGluZ1N0YXRlKCkuc2V0VXNlZFZlcnRpY2FsTWFyZ2luKHRhYmxlQm94LCB2ZXJ0aWNhbE1h
cmdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4
IDYzNjFmOGU5MWU3NDQ3NDM0NjM0MjAxNDg4NmU1ZjEwZGEzYThkYjQuLmVlNTA5MGU4NDQyOTcx
MzQ3NDg4Yzc1NDVlNWU0ZTIwNjE1OGU5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9y
bWF0dGluZ0NvbnRleHQuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgRmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3Ry
YWluCiB2b2lkIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKGNv
bnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgY29uc3RyYWludHMpCiB7CiAgICAgYXV0
byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7Ci0gICAgYXV0byBn
ZW9tZXRyeSA9IHRoaXMtPmdlb21ldHJ5KCk7CisgICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0cnkg
PSB0aGlzLT5mb3JtYXR0aW5nR2VvbWV0cnkoKTsKICAgICBhdXRvIGZsZXhJdGVtTWFpbkF4aXNT
dGFydCA9IGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbExlZnQ7CiAgICAgYXV0byBmbGV4
SXRlbU1haW5BeGlzRW5kID0gZmxleEl0ZW1NYWluQXhpc1N0YXJ0OwogICAgIGF1dG8gZmxleEl0
ZW1Dcm9zQXhpc1N0YXJ0ID0gY29uc3RyYWludHMudmVydGljYWwubG9naWNhbFRvcDsKQEAgLTg3
LDE2ICs4NywxNiBAQCB2b2lkIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxl
eEl0ZW1zKGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udAogCiAgICAgICAgICAgICBmbGV4
SXRlbUdlb21ldHJ5LnNldExvZ2ljYWxUb3BMZWZ0KExheW91dFBvaW50IHsgZmxleEl0ZW1NYWlu
QXhpc0VuZCwgZmxleEl0ZW1Dcm9zQXhpc1N0YXJ0IH0pOwogCi0gICAgICAgICAgICBmbGV4SXRl
bUdlb21ldHJ5LnNldEJvcmRlcihnZW9tZXRyeS5jb21wdXRlZEJvcmRlcihmbGV4SXRlbSkpOwot
ICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21ldHJ5LmNvbXB1dGVk
UGFkZGluZyhmbGV4SXRlbSwgY29uc3RyYWludHMuaG9yaXpvbnRhbC5sb2dpY2FsV2lkdGgpKTsK
KyAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Qm9yZGVyKGZvcm1hdHRpbmdHZW9tZXRy
eS5jb21wdXRlZEJvcmRlcihmbGV4SXRlbSkpOworICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRy
eS5zZXRQYWRkaW5nKGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFBhZGRpbmcoZmxleEl0ZW0s
IGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoKSk7CiAKLSAgICAgICAgICAgIGF1
dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gZ2VvbWV0cnkuY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luKGZsZXhJdGVtLCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKKyAgICAgICAgICAgIGF1
dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbihmbGV4SXRlbSwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7CiAgICAg
ICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwX2x1KSwgY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luLmVuZC52YWx1ZU9yKDBfbHUpIH0pOwogCi0gICAgICAgICAgICBhdXRvIGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4gPSBnZW9tZXRyeS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGZsZXhJdGVtLCBj
b25zdHJhaW50cy5ob3Jpem9udGFsKTsKKyAgICAgICAgICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNh
bE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGZsZXhJ
dGVtLCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKICAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0
cnkuc2V0VmVydGljYWxNYXJnaW4oeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1
ZU9yKDBfbHUpLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMF9sdSkgfSk7
CiAKLSAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChnZW9t
ZXRyeS5jb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGZsZXhJdGVtKSk7Cisg
ICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQoZm9ybWF0dGlu
Z0dlb21ldHJ5LmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoZmxleEl0ZW0p
KTsKICAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGZsZXhJ
dGVtTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgIGZsZXhJdGVtTWFpbkF4aXNFbmQ9IEJveEdl
b21ldHJ5Ojpib3JkZXJCb3hSZWN0KGZsZXhJdGVtR2VvbWV0cnkpLnJpZ2h0KCk7CiAgICAgICAg
ICAgICBmbGV4SXRlbUNyb3NBeGlzRW5kID0gc3RkOjptYXgoZmxleEl0ZW1Dcm9zQXhpc0VuZCwg
Qm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QoZmxleEl0ZW1HZW9tZXRyeSkuYm90dG9tKCkpOwpA
QCAtMTEwLDE1ICsxMTAsMTUgQEAgdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OnNpemVBbmRQ
bGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnQKIHZvaWQgRmxleEZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckZsZXhJ
dGVtcygpCiB7CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0
YXRlKCk7Ci0gICAgYXV0byBnZW9tZXRyeSA9IHRoaXMtPmdlb21ldHJ5KCk7CisgICAgYXV0byBm
b3JtYXR0aW5nR2VvbWV0cnkgPSB0aGlzLT5mb3JtYXR0aW5nR2VvbWV0cnkoKTsKICAgICBmb3Ig
KGF1dG8mIGZsZXhJdGVtIDogY2hpbGRyZW5PZlR5cGU8Q29udGFpbmVyQm94Pihyb290KCkpKSB7
CiAgICAgICAgIGlmIChmb3JtYXR0aW5nU3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0Zv
ckJveChmbGV4SXRlbSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9ybWF0dGlu
Z1N0YXRlLnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goZmxleEl0ZW0sIGdlb21l
dHJ5LmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoZmxleEl0ZW0pKTsKKyAgICAgICAgZm9ybWF0
dGluZ1N0YXRlLnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goZmxleEl0ZW0sIGZv
cm1hdHRpbmdHZW9tZXRyeS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGZsZXhJdGVtKSk7CiAg
ICAgfQogfQogCi1GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5IEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6
Z2VvbWV0cnkoKSBjb25zdAorRmxleEZvcm1hdHRpbmdHZW9tZXRyeSBGbGV4Rm9ybWF0dGluZ0Nv
bnRleHQ6OmZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZsZXhGb3Jt
YXR0aW5nR2VvbWV0cnkoKnRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5n
Q29udGV4dC5oCmluZGV4IDNlZWZjNWU0OWNmYjYyOGM5MTY3YTUyNTRlMDgzOWZkZjU3MzgwY2Iu
LjNmNWQ1ZDlmOTNiN2E4OWNlM2RjMWQzMDFjYmI5NTMyMzI1NTQ0MzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGlu
Z0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgRmxleEZvcm1hdHRpbmdHZW9tZXRy
eSBnZW9tZXRyeSgpIGNvbnN0OworICAgIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkgZm9ybWF0dGlu
Z0dlb21ldHJ5KCkgY29uc3Q7CiAKICAgICB2b2lkIHNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25z
dCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzRm9yRmxleEl0ZW1zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggODZjODM0YzMxMmY1Y2E1ZGVmNjQw
NGE1ZjcyMDljMTMzZWE2ZWRkOC4uNTRhMWM0NzY5ZWRhYzg5ZGY2ZDZmOTViOWFjZGQ1MmFmMTEw
NDZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcApAQCAtMTA0LDkgKzEwNCw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvCiAgICAgICAg
ICAgICAgICAgaWYgKGZvcm1hdHRpbmdSb290Lmhhc0NoaWxkKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1h
dHRpbmdDb250ZXh0KGZvcm1hdHRpbmdSb290LCBsYXlvdXRTdGF0ZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGZvcm1hdHRpbmdSb290Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0Nv
bnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dD
b250ZW50KGZvcm1hdHRpbmdSb290KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0
aW5nQ29udGV4dC0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZm9ybWF0
dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGZvcm1hdHRpbmdSb290
KSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oZm9ybWF0dGlu
Z1Jvb3QsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwotICAgICAgICAgICAgICAgICAgICBmb3Jt
YXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwg
Z2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoZm9ybWF0dGluZ1Jvb3Qp
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dE91dE9mRmxv
d0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFp
bnRzRm9yT3V0T2ZGbG93Q29udGVudChmb3JtYXR0aW5nUm9vdCkpOwogICAgICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGZvcm1h
dHRpbmdSb290LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxh
eW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgaWYg
KCFsaW5lQ29udGVudFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG5lZWRz
TGF5b3V0UmFuZ2Uuc3RhcnQgPCBsaW5lQ29udGVudFJhbmdlLmVuZCk7CiAgICAgICAgICAgICBp
c0ZpcnN0TGluZSA9IGZhbHNlOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBnZW9tZXRy
eSgpLmxvZ2ljYWxUb3BGb3JOZXh0TGluZShsaW5lQ29udGVudCwgbGluZUxvZ2ljYWxSZWN0LmJv
dHRvbSgpLCBmbG9hdGluZ0NvbnRleHQpOworICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBm
b3JtYXR0aW5nR2VvbWV0cnkoKS5sb2dpY2FsVG9wRm9yTmV4dExpbmUobGluZUNvbnRlbnQsIGxp
bmVMb2dpY2FsUmVjdC5ib3R0b20oKSwgZmxvYXRpbmdDb250ZXh0KTsKICAgICAgICAgICAgIGlm
IChsaW5lQ29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgZmluYWwgY29udGVudCBoZWlnaHQgb2YgdGhpcyBpbmxpbmUgZm9ybWF0dGlu
ZyBjb250ZXh0IHNob3VsZCBpbmNsdWRlIHRoZSBjbGVhcmVkIGZsb2F0cyBhcyB3ZWxsLgogICAg
ICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRDbGVhckdhcEFmdGVyTGFzdExpbmUobGlu
ZUxvZ2ljYWxUb3AgLSBsaW5lTG9naWNhbFJlY3QuYm90dG9tKCkpOwpAQCAtMjQ5LDcgKzI0OSw3
IEBAIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhCiAgICAgQVNTRVJUKCFmb3JtYXR0aW5nU3RhdGUo
KS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOwogCiAgICAgaWYgKCFyb290KCkuaGFzSW5G
bG93T3JGbG9hdGluZ0NoaWxkKCkpIHsKLSAgICAgICAgYXV0byBjb25zdHJhaW50cyA9IGdlb21l
dHJ5KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0aChyb290KCksIHsgfSk7CisgICAgICAgIGF1dG8g
Y29uc3RyYWludHMgPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW5CeU1pbk1heFdpZHRo
KHJvb3QoKSwgeyB9KTsKICAgICAgICAgZm9ybWF0dGluZ1N0YXRlKCkuc2V0SW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyhjb25zdHJhaW50cyk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW50czsK
ICAgICB9CkBAIC0yOTYsNyArMjk2LDcgQEAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmEKIAogICAg
IGF1dG8gbWluaW11bUNvbnRlbnRXaWR0aCA9IGNlaWxlZExheW91dFVuaXQobWF4aW11bUxpbmVX
aWR0aCgwKSk7CiAgICAgYXV0byBtYXhpbXVtQ29udGVudFdpZHRoID0gY2VpbGVkTGF5b3V0VW5p
dChtYXhpbXVtTGluZVdpZHRoKG1heElubGluZUxheW91dFVuaXQoKSkpOwotICAgIGF1dG8gY29u
c3RyYWludHMgPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCgpLCB7IG1p
bmltdW1Db250ZW50V2lkdGgsIG1heGltdW1Db250ZW50V2lkdGggfSk7CisgICAgYXV0byBjb25z
dHJhaW50cyA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9v
dCgpLCB7IG1pbmltdW1Db250ZW50V2lkdGgsIG1heGltdW1Db250ZW50V2lkdGggfSk7CiAgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuc2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdHJhaW50
cyk7CiAgICAgcmV0dXJuIGNvbnN0cmFpbnRzOwogfQpAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRp
bmdSb290KGNvbnN0IEJveCYKIHsKICAgICBBU1NFUlQoZm9ybWF0dGluZ1Jvb3QuZXN0YWJsaXNo
ZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKICAgICBhdXRvIGNvbnN0cmFpbnRzID0gSW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyB7IH07Ci0gICAgaWYgKGF1dG8gZml4ZWRXaWR0aCA9IGdlb21ldHJ5
KCkuZml4ZWRWYWx1ZShmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpKSkKKyAg
ICBpZiAoYXV0byBmaXhlZFdpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuZml4ZWRWYWx1ZShm
b3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpKSkKICAgICAgICAgY29uc3RyYWlu
dHMgPSB7ICpmaXhlZFdpZHRoLCAqZml4ZWRXaWR0aCB9OwogICAgIGVsc2UgewogICAgICAgICBh
dXRvIGhhc0luZmxvd09yRmxvYXRpbmdDb250ZW50ID0gaXM8Q29udGFpbmVyQm94Pihmb3JtYXR0
aW5nUm9vdCkgJiYgZG93bmNhc3Q8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nUm9vdCkuaGFzSW5G
bG93T3JGbG9hdGluZ0NoaWxkKCk7CkBAIC0zMzIsMTQgKzMzMiwxNCBAQCB2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhGb3JGb3JtYXR0aW5nUm9vdChj
b25zdCBCb3gmCiAgICAgICAgIGlmIChoYXNJbmZsb3dPckZsb2F0aW5nQ29udGVudCAmJiAhc2hv
dWxkSWdub3JlQ2hpbGRDb250ZW50KQogICAgICAgICAgICAgY29uc3RyYWludHMgPSBMYXlvdXRD
b250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChkb3duY2FzdDxDb250YWluZXJCb3g+KGZv
cm1hdHRpbmdSb290KSwgbGF5b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cygpOwogICAgIH0KLSAgICBjb25zdHJhaW50cyA9IGdlb21ldHJ5KCkuY29uc3RyYWlu
QnlNaW5NYXhXaWR0aChmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMpOworICAgIGNvbnN0cmFp
bnRzID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0aChmb3JtYXR0
aW5nUm9vdCwgY29uc3RyYWludHMpOwogICAgIGNvbnN0cmFpbnRzLmV4cGFuZChnZW9tZXRyeUZv
ckJveChmb3JtYXR0aW5nUm9vdCkuaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSk7
CiAgICAgZm9ybWF0dGluZ1N0YXRlKCkuc2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJv
eChmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMpOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCiB7Ci0g
ICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBnZW9tZXRyeSgpLmNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgYXV0
byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRl
ZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwogICAg
IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0SG9yaXpvbnRhbE1h
cmdpbih7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfSk7CiB9CiAKQEAgLTM0NywxMSArMzQ3
LDExIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdp
bihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKIHsKICAgICBhdXRvIGNvbXB1dGUgPSBbJl0o
T3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRoKSB7CiAgICAgICAgIGlmIChsYXlvdXRCb3gu
aXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmZs
b2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCB7IHVzZWRXaWR0aCwgeyB9IH0pOworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdH
ZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCB7IHVzZWRXaWR0aCwgeyB9IH0pOwogICAgICAgICBpZiAobGF5b3V0
Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKLSAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmlu
bGluZUJsb2NrQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCB7IHVzZWRXaWR0aCwgeyB9IH0pOworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRp
bmdHZW9tZXRyeSgpLmlubGluZUJsb2NrQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRXaWR0aCwgeyB9IH0pOwogICAgICAgICBpZiAo
bGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgp
LmlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94
PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgeyB1c2VkV2lkdGgsIHsg
fSB9KTsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXR0aW5nR2VvbWV0cnkoKS5pbmxpbmVSZXBs
YWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94
KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIHsgdXNlZFdpZHRoLCB7IH0gfSk7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gQ29udGVudFdpZHRoQW5k
TWFyZ2luIHsgfTsKICAgICB9OwpAQCAtMzU5LDEzICszNTksMTMgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdAogICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0gY29tcHV0ZSh7IH0pOwog
CiAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2Fs
V2lkdGg7Ci0gICAgaWYgKGF1dG8gbWF4V2lkdGggPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWF4V2lk
dGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCkpIHsKKyAgICBpZiAoYXV0byBtYXhXaWR0aCA9
IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFpbGFi
bGVXaWR0aCkpIHsKICAgICAgICAgYXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUobWF4
V2lkdGgpOwogICAgICAgICBpZiAoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA+
IG1heFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKICAgICAgICAgICAgIGNvbnRlbnRXaWR0
aEFuZE1hcmdpbiA9IG1heFdpZHRoQW5kTWFyZ2luOwogICAgIH0KIAotICAgIGF1dG8gbWluV2lk
dGggPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWluV2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0
aCkudmFsdWVPcigwKTsKKyAgICBhdXRvIG1pbldpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5KCku
Y29tcHV0ZWRNaW5XaWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKS52YWx1ZU9yKDApOwog
ICAgIGF1dG8gbWluV2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKG1pbldpZHRoKTsKICAgICBpZiAo
Y29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNv
bnRlbnRXaWR0aCkKICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWluV2lkdGhBbmRN
YXJnaW47CkBAIC0zNzksMjMgKzM3OSwyMyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogewog
ICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KSB7
CiAgICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBnZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1hcmdpbihsYXlv
dXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkSGVpZ2h0IH0pOworICAgICAgICAg
ICAgcmV0dXJuIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1h
cmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkSGVpZ2h0IH0pOwog
ICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKLSAgICAgICAgICAgIHJl
dHVybiBnZW9tZXRyeSgpLmlubGluZUJsb2NrQ29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkSGVpZ2h0IH0pOworICAgICAgICAgICAg
cmV0dXJuIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmlubGluZUJsb2NrQ29udGVudEhlaWdodEFuZE1h
cmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkSGVpZ2h0IH0pOwog
ICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAgICAgIHJldHVy
biBnZW9tZXRyeSgpLmlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihkb3duY2Fz
dDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIHsg
dXNlZEhlaWdodCB9KTsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXR0aW5nR2VvbWV0cnkoKS5p
bmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+
KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCB7IHVzZWRIZWlnaHQgfSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gQ29udGVudEhl
aWdodEFuZE1hcmdpbiB7IH07CiAgICAgfTsKIAogICAgIGF1dG8gY29udGVudEhlaWdodEFuZE1h
cmdpbiA9IGNvbXB1dGUoeyB9KTsKLSAgICBpZiAoYXV0byBtYXhIZWlnaHQgPSBnZW9tZXRyeSgp
LmNvbXB1dGVkTWF4SGVpZ2h0KGxheW91dEJveCkpIHsKKyAgICBpZiAoYXV0byBtYXhIZWlnaHQg
PSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gpKSB7CiAg
ICAgICAgIGF1dG8gbWF4SGVpZ2h0QW5kTWFyZ2luID0gY29tcHV0ZShtYXhIZWlnaHQpOwogICAg
ICAgICBpZiAoY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0ID4gbWF4SGVpZ2h0
QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQpCiAgICAgICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFy
Z2luID0gbWF4SGVpZ2h0QW5kTWFyZ2luOwogICAgIH0KIAotICAgIGlmIChhdXRvIG1pbkhlaWdo
dCA9IGdlb21ldHJ5KCkuY29tcHV0ZWRNaW5IZWlnaHQobGF5b3V0Qm94KSkgeworICAgIGlmIChh
dXRvIG1pbkhlaWdodCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWluSGVpZ2h0KGxh
eW91dEJveCkpIHsKICAgICAgICAgYXV0byBtaW5IZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKG1p
bkhlaWdodCk7CiAgICAgICAgIGlmIChjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWln
aHQgPCBtaW5IZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCkKICAgICAgICAgICAgIGNvbnRl
bnRIZWlnaHRBbmRNYXJnaW4gPSBtaW5IZWlnaHRBbmRNYXJnaW47CkBAIC00NTYsOSArNDU2LDkg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnRJZk5l
ZWRlZCgpCiBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0
cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250
ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykK
IHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsK
LSAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2VvbWV0cnkoKTsKKyAgICBhdXRvIGZvcm1hdHRp
bmdHZW9tZXRyeSA9IHRoaXMtPmZvcm1hdHRpbmdHZW9tZXRyeSgpOwogCi0gICAgZm9ybWF0dGlu
Z1N0YXRlLmFkZExpbmVCb3goZ2VvbWV0cnkubGluZUJveEZvckxpbmVDb250ZW50KGxpbmVDb250
ZW50KSk7CisgICAgZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3goZm9ybWF0dGluZ0dlb21ldHJ5
LmxpbmVCb3hGb3JMaW5lQ29udGVudChsaW5lQ29udGVudCkpOwogICAgIGNvbnN0IGF1dG8mIGxp
bmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUubGluZUJveGVzKCkubGFzdCgpOwogICAgIGF1dG8gbGlu
ZUluZGV4ID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVzKCkuc2l6ZSgpOwogICAgIGF1dG8mIGxpbmVC
b3hMb2dpY2FsUmVjdCA9IGxpbmVCb3gubG9naWNhbFJlY3QoKTsKQEAgLTUyNyw3ICs1MjcsNyBA
QCBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JM
aW5lQ29udGVudChjb25zdCBMaW5lQnVpbAogICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBp
bmxpbmUgYm94ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsaW5lIGFuZCB0aGVpciB0b3AgcG9zaXRp
b24gY2FuIGJlIG5lZ2F0aXZlLgogICAgICAgICAgICAgICAgIGJvcmRlckJveExvZ2ljYWxUb3BM
ZWZ0Lm1vdmVCeShsaW5lQm94TG9naWNhbFJlY3QudG9wTGVmdCgpKTsKICAgICAgICAgICAgICAg
ICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgICAg
ICBib3JkZXJCb3hMb2dpY2FsVG9wTGVmdCArPSBnZW9tZXRyeS5pbkZsb3dQb3NpdGlvbmVkUG9z
aXRpb25PZmZzZXQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICAg
ICAgICAgICAgICBib3JkZXJCb3hMb2dpY2FsVG9wTGVmdCArPSBmb3JtYXR0aW5nR2VvbWV0cnku
aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzKTsKICAgICAgICAgICAgICAgICAvLyBBdG9taWMgaW5saW5lIGJveGVzIGFyZSBhbGwg
c2V0LiBUaGVpciBtYXJnaW4vYm9yZGVyL2NvbnRlbnQgYm94IGdlb21ldHJpZXMgYXJlIGFscmVh
ZHkgY29tcHV0ZWQuIFdlIGp1c3QgaGF2ZSB0byBwb3NpdGlvbiB0aGVtIGhlcmUuCiAgICAgICAg
ICAgICAgICAgYm94R2VvbWV0cnkuc2V0TG9naWNhbFRvcExlZnQodG9MYXlvdXRQb2ludChib3Jk
ZXJCb3hMb2dpY2FsVG9wTGVmdCkpOwogCkBAIC02MTIsNyArNjEyLDcgQEAgdm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6aW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlk
YXRpb25TdGF0ZSYKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHNvIHdoZXJlIHdlIHdvdWxkIGRl
bGV0ZSBpbmxpbmUgaXRlbXMgaWYgdGhlaXIgY29udGVudCBjaGFuZ2VkLgogfQogCi1JbmxpbmVG
b3JtYXR0aW5nR2VvbWV0cnkgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29u
c3QKK0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Zm9y
bWF0dGluZ0dlb21ldHJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gSW5saW5lRm9ybWF0dGluZ0dl
b21ldHJ5KCp0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oCmluZGV4IDBmOTlmOWY5MzRlYzhlZjU5NDRiZmFiOTdjNzVjYzc0NDdkYTcyZjUu
LjM3ZWYzNDM0N2ViZjRjNmFiOGY0MGUyYzk1NDgwODU5YmExMzY2MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNTYsNyArNTYsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CiAKLSAgICBJbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdDsKKyAgICBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkgZm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3Q7CiAKICAgICB2b2lkIGxpbmVMYXlvdXQoSW5s
aW5lSXRlbXMmLCBMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJhbmdlLCBjb25zdCBDb25zdHJhaW50
c0ZvckluRmxvd0NvbnRlbnQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0
aW5nQ29udGV4dC5jcHAKaW5kZXggMTZjODczZjBhOGI1YmQ2NzU4ZjgwMDYxNmRmMGM2OTJkNjE5
MjFkYy4uN2NiYmNjYzliNjEwMDg5ZjliMDlhMjkyNDNiODAyMGE4YTkwYzY2YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZv
cm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0xNzMsMTMgKzE3
MywxMyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvclJv
d3MoTGF5b3V0VW5pdCBhdmFpbGFibGVIb3Jpem9udAogICAgICAgICBhdXRvJiByb3dCb3ggPSBy
b3cuYm94KCk7CiAgICAgICAgIGF1dG8mIHJvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRl
KCkuYm94R2VvbWV0cnkocm93Qm94KTsKIAotICAgICAgICByb3dCb3hHZW9tZXRyeS5zZXRQYWRk
aW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKHJvd0JveCwgYXZhaWxhYmxlSG9yaXpvbnRh
bFNwYWNlKSk7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldFBhZGRpbmcoZm9ybWF0dGluZ0dl
b21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKHJvd0JveCwgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNl
KSk7CiAgICAgICAgIC8vIEludGVybmFsIHRhYmxlIGVsZW1lbnRzIGRvIG5vdCBoYXZlIG1hcmdp
bnMuCiAgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKICAg
ICAgICAgcm93Qm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKIAogICAgICAgICBh
dXRvIGNvbXB1dGVkUm93Qm9yZGVyID0gWyZdIHsKLSAgICAgICAgICAgIGF1dG8gYm9yZGVyID0g
Z2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dCb3gpOworICAgICAgICAgICAgYXV0byBib3Jk
ZXIgPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dCb3gpOwogICAgICAg
ICAgICAgaWYgKCFncmlkLmNvbGxhcHNlZEJvcmRlcigpKQogICAgICAgICAgICAgICAgIHJldHVy
biBib3JkZXI7CiAgICAgICAgICAgICAvLyBCb3JkZXIgY29sbGFwc2luZyBkZWxlZ2F0ZXMgYm9y
ZGVycyB0byB0YWJsZS9jZWxscy4KQEAgLTI4MCwxMyArMjgwLDEzIEBAIHZvaWQgVGFibGVGb3Jt
YXR0aW5nQ29udGV4dDo6bGF5b3V0Q2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwsIExh
eW91dFVuaXQKIHsKICAgICBBU1NFUlQoY2VsbC5ib3goKS5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0
dGluZ0NvbnRleHQoKSk7CiAKLSAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2VvbWV0cnkoKTsK
KyAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRoaXMtPmZvcm1hdHRpbmdHZW9tZXRyeSgp
OwogICAgIGF1dG8mIGdyaWQgPSBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKTsKICAgICBh
dXRvJiBjZWxsQm94ID0gY2VsbC5ib3goKTsKICAgICBhdXRvJiBjZWxsQm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShjZWxsQm94KTsKIAotICAgIGNlbGxCb3hHZW9t
ZXRyeS5zZXRCb3JkZXIoZ2VvbWV0cnkuY29tcHV0ZWRDZWxsQm9yZGVyKGNlbGwpKTsKLSAgICBj
ZWxsQm94R2VvbWV0cnkuc2V0UGFkZGluZyhnZW9tZXRyeS5jb21wdXRlZFBhZGRpbmcoY2VsbEJv
eCwgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlKSk7CisgICAgY2VsbEJveEdlb21ldHJ5LnNldEJv
cmRlcihmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRDZWxsQm9yZGVyKGNlbGwpKTsKKyAgICBj
ZWxsQm94R2VvbWV0cnkuc2V0UGFkZGluZyhmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRQYWRk
aW5nKGNlbGxCb3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOwogICAgIC8vIEludGVybmFs
IHRhYmxlIGVsZW1lbnRzIGRvIG5vdCBoYXZlIG1hcmdpbnMuCiAgICAgY2VsbEJveEdlb21ldHJ5
LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKICAgICBjZWxsQm94R2VvbWV0cnkuc2V0VmVydGlj
YWxNYXJnaW4oeyB9KTsKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6OmxheW91dENlbGwoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsLCBMYXlvdXRVbml0
CiAgICAgY2VsbEJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChhdmFpbGFibGVTcGFjZUZv
ckNvbnRlbnQpOwogCiAgICAgaWYgKGNlbGxCb3guaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkp
IHsKLSAgICAgICAgYXV0byBjb25zdHJhaW50c0ZvckNlbGxDb250ZW50ID0gZ2VvbWV0cnkuY29u
c3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNlbGxCb3gpOworICAgICAgICBhdXRvIGNvbnN0cmFp
bnRzRm9yQ2VsbENvbnRlbnQgPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29uc3RyYWludHNGb3JJbkZs
b3dDb250ZW50KGNlbGxCb3gpOwogICAgICAgICBjb25zdHJhaW50c0ZvckNlbGxDb250ZW50LnZl
cnRpY2FsLmxvZ2ljYWxIZWlnaHQgPSBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlRm9yQ29udGVudDsK
ICAgICAgICAgYXV0byBpbnZhbGlkYXRpb25TdGF0ZSA9IEludmFsaWRhdGlvblN0YXRlIHsgfTsK
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHBhcnQgb2YgdGhlIGlu
dmFsaWRhdGlvbiBzdGF0ZSB0byBpbmRpY2F0ZSB3aGVuIHdlIHJlLWxheW91dCB0aGUgY2VsbApA
QCAtMzEyLDggKzMxMiw4IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Q2Vs
bChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91dFVuaXQKICAgICAgICAgZmxvYXRp
bmdTdGF0ZUZvckNlbGxDb250ZW50LmNsZWFyKCk7CiAgICAgICAgIExheW91dENvbnRleHQ6OmNy
ZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNlbGxCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRJbkZs
b3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBjb25zdHJhaW50c0ZvckNlbGxDb250ZW50KTsK
ICAgICB9Ci0gICAgYXV0byBjb250ZW50Qm94SGVpZ2h0ID0gZ2VvbWV0cnkuY2VsbEJveENvbnRl
bnRIZWlnaHQoY2VsbEJveCk7Ci0gICAgaWYgKGF1dG8gY29tcHV0ZWRIZWlnaHQgPSBnZW9tZXRy
eS5jb21wdXRlZEhlaWdodChjZWxsQm94KSkgeworICAgIGF1dG8gY29udGVudEJveEhlaWdodCA9
IGZvcm1hdHRpbmdHZW9tZXRyeS5jZWxsQm94Q29udGVudEhlaWdodChjZWxsQm94KTsKKyAgICBp
ZiAoYXV0byBjb21wdXRlZEhlaWdodCA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZEhlaWdo
dChjZWxsQm94KSkgewogICAgICAgICBhdXRvIGhlaWdodFVzZXNCb3JkZXJCb3ggPSBsYXlvdXRT
dGF0ZSgpLmluUXVpcmtzTW9kZSgpIHx8IGNlbGxCb3guc3R5bGUoKS5ib3hTaXppbmcoKSA9PSBC
b3hTaXppbmc6OkJvcmRlckJveDsKICAgICAgICAgaWYgKGhlaWdodFVzZXNCb3JkZXJCb3gpCiAg
ICAgICAgICAgICAqY29tcHV0ZWRIZWlnaHQgLT0gY2VsbEJveEdlb21ldHJ5LnZlcnRpY2FsTWFy
Z2luQm9yZGVyQW5kUGFkZGluZygpOwpAQCAtNDA3LDcgKzQwNyw3IEBAIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRQcmVmZXJyZWRXaWR0
aEZvckNvbHVtCiAKICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aCA9IGZvcm1hdHRpbmdTdGF0
ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNlbGxCb3gpOwogICAgICAgICBpZiAo
IWludHJpbnNpY1dpZHRoKSB7Ci0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IGdlb21ldHJ5
KCkuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoKmNlbGwpOworICAgICAgICAgICAg
aW50cmluc2ljV2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5pbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzRm9yQ2VsbCgqY2VsbCk7CiAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuc2V0SW50
cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChjZWxsQm94LCAqaW50cmluc2ljV2lkdGgpOwog
ICAgICAgICB9CiAgICAgICAgIC8vIFNwYW5uZXIgY2VsbHMgcHV0IHRoZWlyIGludHJpbnNpYyB3
aWR0aHMgb24gdGhlIGluaXRpYWwgc2xvdHMuCkBAIC00MjYsNyArNDI2LDcgQEAgSW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZFByZWZlcnJl
ZFdpZHRoRm9yQ29sdW0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChhdXRvIHdpZHRo
ID0gY29sdW1uQm94LT5jb2x1bW5XaWR0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB3aWR0
aDsKLSAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbXB1dGVkQ29sdW1uV2lkdGgoKmNv
bHVtbkJveCk7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0
ZWRDb2x1bW5XaWR0aCgqY29sdW1uQm94KTsKICAgICAgICAgfTsKICAgICAgICAgZml4ZWRXaWR0
aENvbHVtbnMuYXBwZW5kKGZpeGVkV2lkdGgoKSk7CiAgICAgfQpAQCAtNTE4LDcgKzUxOCw3IEBA
IHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYVNw
YWNlKExheW91dFVuaXQgYXZhaWxhYmxlCiAgICAgICAgICAgICAvLyBUaGUgbWluaW11bSBoZWln
aHQgb2YgYSByb3cgKHdpdGhvdXQgc3Bhbm5pbmctcmVsYXRlZCBoZWlnaHQgZGlzdHJpYnV0aW9u
KSBpcyBkZWZpbmVkIGFzIHRoZSBoZWlnaHQgb2YgYW4gaHlwb3RoZXRpY2FsCiAgICAgICAgICAg
ICAvLyBsaW5lYm94IGNvbnRhaW5pbmcgdGhlIGNlbGxzIG9yaWdpbmF0aW5nIGluIHRoZSByb3cu
CiAgICAgICAgICAgICBhdXRvJiBjZWxsID0gc2xvdC5jZWxsKCk7Ci0gICAgICAgICAgICBjZWxs
LnNldEJhc2VsaW5lKGdlb21ldHJ5KCkudXNlZEJhc2VsaW5lRm9yQ2VsbChjZWxsLmJveCgpKSk7
CisgICAgICAgICAgICBjZWxsLnNldEJhc2VsaW5lKGZvcm1hdHRpbmdHZW9tZXRyeSgpLnVzZWRC
YXNlbGluZUZvckNlbGwoY2VsbC5ib3goKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzMs
NyArNTMzLDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQW5kRGlzdHJp
YnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFibGUKICAgICB9CiB9CiAKLVRhYmxlRm9y
bWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QK
K1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRp
bmdHZW9tZXRyeSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5
KCp0aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
dGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IGIwOGE4NzdhMWQwYjhkNmFlNjVl
ZDIzZTFkOTY2ZWM5MWExOWJmYTUuLmIwODQ2NGY4ODNlNmQ4N2EyNjQ4YmUwMzI3ZDBmM2JlMzc3
ZjcxMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCkBA
IC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBj
b21wdXRlZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpOwogICAgIHZvaWQgY29tcHV0ZUFuZERp
c3RyaWJ1dGVFeHRyYVNwYWNlKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlLCBP
cHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlKTsKIAotICAgIFRhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7CisgICAgVGFibGVGb3JtYXR0aW5n
R2VvbWV0cnkgZm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3Q7CiAgICAgY29uc3QgVGFibGVGb3Jt
YXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFRh
YmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkp
OyB9CiAgICAgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsgcmV0dXJu
IGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0
dGluZ1N0YXRlKCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNwcAppbmRleCA2ZjM1
ODIwYjZmZGM5ZmEyNzk5YzVjMTU2ZTU3MmJhODJhOThiNDM4Li4xNzZhMDU3NDYzNjRlNDdhMjc1
YzcyMzhkYTYzNjY4OTAyZWZlNWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNwcApAQCAt
MjcxLDcgKzI3MSw3IEBAIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlTGF5b3V0OjpEaXN0
cmlidXRlZFNwYWNlcyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpUCiAgICAgICAgIGF1dG8gbWF4
aW11bUNvbHVtbkFzY2VudCA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgICAgICBhdXRvIG1h
eGltdW1Db2x1bW5EZXNjZW50ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIC8vIElu
aXRpYWwgbWluaW11bSBoZWlnaHQgaXMgdGhlIGNvbXB1dGVkIGhlaWdodCBpZiBhdmFpbGFibGUg
PHRyIHN0eWxlPSJoZWlnaHQ6IDEwMHB4Ij48dGQ+PC90ZD48L3RyPgotICAgICAgICByb3dIZWln
aHRbcm93SW5kZXhdID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpLmNvbXB1dGVkSGVp
Z2h0KHJvd3MubGlzdCgpW3Jvd0luZGV4XS5ib3goKSwgYXZhaWxhYmxlVmVydGljYWxTcGFjZSku
dmFsdWVPcigwX2x1KTsKKyAgICAgICAgcm93SGVpZ2h0W3Jvd0luZGV4XSA9IGZvcm1hdHRpbmdD
b250ZXh0KCkuZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRIZWlnaHQocm93cy5saXN0KClb
cm93SW5kZXhdLmJveCgpLCBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlKS52YWx1ZU9yKDBfbHUpOwog
ICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1u
cy5zaXplKCk7ICsrY29sdW1uSW5kZXgpIHsKICAgICAgICAgICAgIGF1dG8mIHNsb3QgPSAqbV9n
cmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7CiAgICAgICAgICAgICBpZiAoc2xv
dC5pc1Jvd1NwYW5uZWQoKSkKQEAgLTMwMSw3ICszMDEsNyBAQCBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpUYWJsZUxheW91dDo6RGlzdHJpYnV0ZWRTcGFjZXMgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6VAogICAgICAgICBpZiAoc2xvdC5oYXNSb3dTcGFuKCkpCiAgICAgICAgICAgICByZXR1cm4g
R3JpZFNwYWNlIHsgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChzbG90LmNlbGwo
KS5ib3goKSkuYm9yZGVyQm94SGVpZ2h0KCksIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3goc2xvdC5jZWxsKCkuYm94KCkpLmJvcmRlckJveEhlaWdodCgpIH07CiAgICAgICAgIGF1
dG8mIHJvd3MgPSBtX2dyaWQucm93cygpOwotICAgICAgICBhdXRvIGNvbXB1dGVkUm93SGVpZ2h0
ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpLmNvbXB1dGVkSGVpZ2h0KHJvd3MubGlz
dCgpW3Jvd0luZGV4XS5ib3goKSwgeyB9KTsKKyAgICAgICAgYXV0byBjb21wdXRlZFJvd0hlaWdo
dCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRIZWln
aHQocm93cy5saXN0KClbcm93SW5kZXhdLmJveCgpLCB7IH0pOwogICAgICAgICBhdXRvIGhlaWdo
dCA9IHN0ZDo6bWF4PGZsb2F0Pihyb3dIZWlnaHRbcm93SW5kZXhdLCBjb21wdXRlZFJvd0hlaWdo
dC52YWx1ZU9yKDBfbHUpKTsKICAgICAgICAgcmV0dXJuIEdyaWRTcGFjZSB7IGhlaWdodCwgaGVp
Z2h0IH07CiAgICAgfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429460</attachid>
            <date>2021-05-23 06:57:43 -0700</date>
            <delta_ts>2021-05-24 10:24:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226153-20210523065742.patch</filename>
            <type>text/plain</type>
            <size>56529</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDcyMDg4YzEzYTY1N2Zi
ZTYwNjZkYjJmODRlNmIwZTI2NmZhZGUxMC4uNWQ3ZTA1M2Y0OThkZDA3NDk1ZGQyNTljNGU2NThh
NDgxNmIwZWEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTA1LTIzICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBSZW5hbWUgdGhlIGdl
b21ldHJ5KCkgaGVscGVycyB0byBmb3JtYXR0aW5nR2VvbWV0cnkoKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxv
d1ZlcnRpY2FsR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93Q29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nR2VvbWV0cnkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Z2Vv
bWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdRdWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nUXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhl
ZEhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9j
ay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRp
b25lZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNlc3RvcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lk
dGhBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ0dlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5o
OgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVy
L1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRUYWJs
ZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nRm9yVGFibGVCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlV2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRN
YXJnaW5Gb3JUYWJsZUJveCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9m
bGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2lj
V2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ0dlb21ldHJ5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0Zs
ZXhGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9y
Rm9ybWF0dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ0dlb21l
dHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6Omdlb21ldHJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNl
dFVzZWRHZW9tZXRyeUZvclJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXRDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
YWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nR2VvbWV0cnkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9U
YWJsZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy90YWJsZS9UYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlTGF5b3V0OjpkaXN0cmlidXRlZFZlcnRpY2FsU3Bh
Y2UpOgorCiAyMDIxLTA1LTIyICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbTEZDXSBGb3JtYXR0aW5nR2VvbWV0cnkgZnVuY3Rpb25zIHNob3VsZCBhbGwgYmUgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMDE4MTgyZjI4YWViZjZiZmQ0ODg1
N2UxZDNhZDEyMzU3YzI2YWU1OC4uNTQ3N2JkYTY0MGRmYjUwMDI5MzAxZjM4NjViOTRhYTVjYTAz
NmVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTc1LDE4ICs3NSwxOCBAQCB2
b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5
KGNvbnN0IEJveCYgbGF5b3V0Qm94LAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpOwogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRV
bml0PiB1c2VkV2lkdGgpIHsKLSAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkub3V0T2ZGbG93SG9y
aXpvbnRhbEdlb21ldHJ5KGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgY29uc3Ry
YWludHMudmVydGljYWwsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisgICAgICAgIHJldHVybiBmb3Jt
YXR0aW5nR2VvbWV0cnkoKS5vdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkobGF5b3V0Qm94LCBj
b25zdHJhaW50cy5ob3Jpem9udGFsLCBjb25zdHJhaW50cy52ZXJ0aWNhbCwgeyB1c2VkV2lkdGgs
IHsgfSB9KTsKICAgICB9OwogCiAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnN0
cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoOwogICAgIGF1dG8gaG9yaXpvbnRhbEdlb21l
dHJ5ID0gY29tcHV0ZSh7IH0pOwotICAgIGlmIChhdXRvIG1heFdpZHRoID0gZ2VvbWV0cnkoKS5j
b21wdXRlZE1heFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CisgICAg
aWYgKGF1dG8gbWF4V2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1heFdpZHRo
KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CiAgICAgICAgIGF1dG8gbWF4SG9y
aXpvbnRhbEdlb21ldHJ5ID0gY29tcHV0ZShtYXhXaWR0aCk7CiAgICAgICAgIGlmIChob3Jpem9u
dGFsR2VvbWV0cnkuY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA+IG1heEhvcml6
b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQogICAgICAg
ICAgICAgaG9yaXpvbnRhbEdlb21ldHJ5ID0gbWF4SG9yaXpvbnRhbEdlb21ldHJ5OwogICAgIH0K
IAotICAgIGlmIChhdXRvIG1pbldpZHRoID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxh
eW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CisgICAgaWYgKGF1dG8gbWluV2lkdGgg
PSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxheW91dEJveCwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpKSB7CiAgICAgICAgIGF1dG8gbWluSG9yaXpvbnRhbEdlb21ldHJ5ID0g
Y29tcHV0ZShtaW5XaWR0aCk7CiAgICAgICAgIGlmIChob3Jpem9udGFsR2VvbWV0cnkuY29udGVu
dFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbkhvcml6b250YWxHZW9tZXRyeS5jb250
ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQogICAgICAgICAgICAgaG9yaXpvbnRhbEdl
b21ldHJ5ID0gbWluSG9yaXpvbnRhbEdlb21ldHJ5OwpAQCAtMTAzLDE4ICsxMDMsMTggQEAgdm9p
ZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29u
c3QgQm94JiBsYXlvdXRCb3gsIGMKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKTsKICAgICBhdXRvIGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5p
dD4gdXNlZEhlaWdodCkgewotICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5vdXRPZkZsb3dWZXJ0
aWNhbEdlb21ldHJ5KGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgY29uc3RyYWlu
dHMudmVydGljYWwsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdH
ZW9tZXRyeSgpLm91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkobGF5b3V0Qm94LCBjb25zdHJhaW50
cy5ob3Jpem9udGFsLCBjb25zdHJhaW50cy52ZXJ0aWNhbCwgeyB1c2VkSGVpZ2h0IH0pOwogICAg
IH07CiAKICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9ICpjb25zdHJhaW50cy52ZXJ0
aWNhbC5sb2dpY2FsSGVpZ2h0OwogICAgIGF1dG8gdmVydGljYWxHZW9tZXRyeSA9IGNvbXB1dGUo
eyB9KTsKLSAgICBpZiAoYXV0byBtYXhIZWlnaHQgPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVp
Z2h0KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSkgeworICAgIGlmIChhdXRvIG1h
eEhlaWdodCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVpZ2h0KGxheW91dEJv
eCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSkgewogICAgICAgICBhdXRvIG1heFZlcnRpY2FsR2Vv
bWV0cnkgPSBjb21wdXRlKG1heEhlaWdodCk7CiAgICAgICAgIGlmICh2ZXJ0aWNhbEdlb21ldHJ5
LmNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA+IG1heFZlcnRpY2FsR2VvbWV0
cnkuY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KQogICAgICAgICAgICAgdmVy
dGljYWxHZW9tZXRyeSA9IG1heFZlcnRpY2FsR2VvbWV0cnk7CiAgICAgfQogCi0gICAgaWYgKGF1
dG8gbWluSGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gsIGNv
bnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKKyAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBmb3JtYXR0
aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9j
a0hlaWdodCkpIHsKICAgICAgICAgYXV0byBtaW5WZXJ0aWNhbEdlb21ldHJ5ID0gY29tcHV0ZSht
aW5IZWlnaHQpOwogICAgICAgICBpZiAodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5k
TWFyZ2luLmNvbnRlbnRIZWlnaHQgPCBtaW5WZXJ0aWNhbEdlb21ldHJ5LmNvbnRlbnRIZWlnaHRB
bmRNYXJnaW4uY29udGVudEhlaWdodCkKICAgICAgICAgICAgIHZlcnRpY2FsR2VvbWV0cnkgPSBt
aW5WZXJ0aWNhbEdlb21ldHJ5OwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhj
b25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludCkKIHsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7Ci0gICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKGdl
b21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGF5b3V0Qm94KSk7Ci0gICAgYm94R2VvbWV0cnkuc2V0
UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50LmxvZ2ljYWxXaWR0aCkpOworICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcihmb3Jt
YXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKKyAgICBib3hHZW9t
ZXRyeS5zZXRQYWRkaW5nKGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlv
dXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50LmxvZ2ljYWxXaWR0aCkpOwogfQogCiB2b2lkIEZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRl
JiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50
JiBjb25zdHJhaW50cykKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25T
dAogCiAgICAgYXV0byBjb25zdHJhaW50c0ZvckxheW91dEJveCA9IFsmXSAoY29uc3QgYXV0byYg
b3V0T2ZGbG93Qm94KSB7CiAgICAgICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9IG91dE9mRmxv
d0JveC5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgcmV0dXJuICZjb250YWluaW5nQmxvY2sg
PT0gJnJvb3QoKSA/IGNvbnN0cmFpbnRzIDogZ2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvck91dE9m
Rmxvd0NvbnRlbnQoY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgcmV0dXJuICZjb250YWluaW5n
QmxvY2sgPT0gJnJvb3QoKSA/IGNvbnN0cmFpbnRzIDogZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29u
c3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgfTsKIAog
ICAgIGZvciAoYXV0byYgb3V0T2ZGbG93Qm94IDogZm9ybWF0dGluZ1N0YXRlKCkub3V0T2ZGbG93
Qm94ZXMoKSkgewpAQCAtMTYxLDkgKzE2MSw5IEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dE91dE9mRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvblN0CiAg
ICAgICAgICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KCpv
dXRPZkZsb3dCb3gpOwogICAgICAgICAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IExheW91
dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5b3V0U3Rh
dGUoKSk7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVyQm94Lmhhc0luRmxvd09yRmxvYXRpbmdD
aGlsZCgpKQotICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJbkZsb3dD
b250ZW50KGludmFsaWRhdGlvblN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudChjb250YWluZXJCb3gpKTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4
dC0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZm9ybWF0dGluZ0dlb21l
dHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5lckJveCkpOwogICAgICAg
ICAgICAgY29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29udGFpbmVyQm94LCBjb250
YWluaW5nQmxvY2tDb25zdHJhaW50cyk7Ci0gICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+
bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZ2VvbWV0cnkoKS5jb25z
dHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7CisgICAgICAgICAgICBm
b3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0
ZSwgZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNv
bnRhaW5lckJveCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNvbXB1dGVPdXRPZkZs
b3dWZXJ0aWNhbEdlb21ldHJ5KCpvdXRPZkZsb3dCb3gsIGNvbnRhaW5pbmdCbG9ja0NvbnN0cmFp
bnRzKTsKICAgICB9CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6
Y29sbGVjdE91dE9mRmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKQogICAgIH0KIH0KIAotRm9ybWF0
dGluZ0dlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSgpIGNvbnN0CitGb3JtYXR0
aW5nR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEZvcm1hdHRpbmdHZW9tZXRyeSgqdGhpcyk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRp
bmdDb250ZXh0LmgKaW5kZXggZTMyMzkwZGVlOTNiZGMyNDM1OTRmZDA2YTc1MjJhMTdjZDc1OTYx
Yy4uNzM0NDM4MGU5MzY5MWViOTQxOGI3NzUzMTllYzFmM2FkNGEwZmJhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ0NvbnRleHQuaApAQCAtOTEsNyArOTEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1c2luZyBM
YXlvdXRRdWV1ZSA9IFZlY3Rvcjxjb25zdCBCb3gqPjsKIHByaXZhdGU6Ci0gICAgRm9ybWF0dGlu
Z0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7CisgICAgRm9ybWF0dGluZ0dlb21ldHJ5IGZvcm1h
dHRpbmdHZW9tZXRyeSgpIGNvbnN0OwogICAgIEZvcm1hdHRpbmdRdWlya3MgcXVpcmtzKCkgY29u
c3Q7CiAKICAgICB2b2lkIGNvbGxlY3RPdXRPZkZsb3dEZXNjZW5kYW50c0lmTmVlZGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAppbmRleCBkNTY4YWVlYzFmNWE2ODI5MzZkNDZiYmU1MmZm
Njk0ZTRiMTYwZjU2Li5iOWU3ZmJkNTg1ZThlOGVjYmQwNDFjMDMxZTAyM2QwNGQ4ODU3YTFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAgLTU2LDkgKzU2LDkgQEAgTGF5b3V0VW5pdCBG
b3JtYXR0aW5nUXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhG
aXhlZEhlaWdodCgKICAgICAgICAgLy8gLWFuZCBpdCdzIHRvdGFsbHkgaW5zYW5lIGJlY2F1c2Ug
bm93IHdlIGZyZWVseSB0cmF2ZWwgYWNyb3NzIGZvcm1hdHRpbmcgY29udGV4dCBib3VuZGFyaWVz
IGFuZCBjb21wdXRlZCBtYXJnaW5zIGFyZSBub25leGlzdGVudC4KICAgICAgICAgaWYgKGNvbnRh
aW5pbmdCbG9jay0+aXNCb2R5Qm94KCkgfHwgY29udGFpbmluZ0Jsb2NrLT5pc0RvY3VtZW50Qm94
KCkpIHsKIAotICAgICAgICAgICAgYXV0byBnZW9tZXRyeSA9IEZvcm1hdHRpbmdHZW9tZXRyeSB7
IGZvcm1hdHRpbmdDb250ZXh0IH07Ci0gICAgICAgICAgICBhdXRvIGhvcml6b250YWxDb25zdHJh
aW50cyA9IGdlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxv
Y2stPmNvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpG
aW5kRml4ZWRIZWlnaHRBbmNlc3RvclF1aXJrKS5ob3Jpem9udGFsOwotICAgICAgICAgICAgYXV0
byB2ZXJ0aWNhbE1hcmdpbiA9IGdlb21ldHJ5LmNvbXB1dGVkVmVydGljYWxNYXJnaW4oKmNvbnRh
aW5pbmdCbG9jaywgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgIGF1dG8gZm9y
bWF0dGluZ0dlb21ldHJ5ID0gRm9ybWF0dGluZ0dlb21ldHJ5IHsgZm9ybWF0dGluZ0NvbnRleHQg
fTsKKyAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ0dl
b21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpGaW5kRml4ZWRI
ZWlnaHRBbmNlc3RvclF1aXJrKS5ob3Jpem9udGFsOworICAgICAgICAgICAgYXV0byB2ZXJ0aWNh
bE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKCpjb250
YWluaW5nQmxvY2ssIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAKICAgICAgICAgICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmNvbnRhaW5p
bmdCbG9jaywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6RmluZEZpeGVkSGVpZ2h0
QW5jZXN0b3JRdWlyayk7CiAgICAgICAgICAgICBhdXRvIHZlcnRpY2FsUGFkZGluZyA9IGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgYm94R2VvbWV0cnkucGFkZGluZ0JvdHRv
bSgpLnZhbHVlT3IoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0LmNwcAppbmRleCBmZjVjNTAzZjRkMDUxY2M1ODdlM2MwM2NhY2Q0YTMzYzBmNmJlZThlLi5m
M2ZhZjc3MDg1M2Y2ZDliMDc3MDlhNTQ3NzgzNDdjZDhhNzMyOWVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9p
ZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlv
blN0YXRlJiBpbnZhbGlkYXRpb24KIAogICAgIGF1dG8gY29uc3RyYWludHNGb3JMYXlvdXRCb3gg
PSBbJl0gKGNvbnN0IGF1dG8mIGxheW91dEJveCkgewogICAgICAgICBhdXRvJiBjb250YWluaW5n
QmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgIHJldHVybiAmY29u
dGFpbmluZ0Jsb2NrID09ICZmb3JtYXR0aW5nUm9vdCA/IGNvbnN0cmFpbnRzIDogZ2VvbWV0cnko
KS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAg
cmV0dXJuICZjb250YWluaW5nQmxvY2sgPT0gJmZvcm1hdHRpbmdSb290ID8gY29uc3RyYWludHMg
OiBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChj
b250YWluaW5nQmxvY2spOwogICAgIH07CiAKICAgICAvLyBUaGlzIGlzIGEgcG9zdC1vcmRlciB0
cmVlIHRyYXZlcnNhbCBsYXlvdXQuCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZh
bGlkYXRpb24KICAgICAgICAgICAgICAgICAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IExh
eW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5b3V0
U3RhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJCb3guaXNUYWJsZVdy
YXBwZXJCb3goKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFRhYmxlV3JhcHBl
ckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ+KCpmb3JtYXR0aW5nQ29udGV4dCkuc2V0SG9yaXpvbnRh
bENvbnN0cmFpbnRzSWdub3JpbmdGbG9hdHMoY29udGFpbmluZ0Jsb2NrQ29uc3RyYWludHMuaG9y
aXpvbnRhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJ
bkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudChjb250YWluZXJCb3gpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0
dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5l
ckJveCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvbgogICAg
ICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGNvbXB1dGVkIHRoZSBib3gncyBoZWlnaHQsIHdl
IGNhbiBsYXlvdXQgdGhlIG91dC1vZi1mbG93IGRlc2NlbmRhbnRzLgogICAgICAgICAgICAgICAg
IGlmIChpczxDb250YWluZXJCb3g+KGxheW91dEJveCkgJiYgZG93bmNhc3Q8Q29udGFpbmVyQm94
PihsYXlvdXRCb3gpLmhhc0NoaWxkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byYgY29u
dGFpbmVyQm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOwotICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChjb250YWlu
ZXJCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRPdXRPZkZsb3dDb250ZW50KGludmFsaWRhdGlv
blN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChjb250YWlu
ZXJCb3gpKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0
dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBsYXlvdXRTdGF0ZSgpKS0+bGF5b3V0T3V0T2ZGbG93
Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25z
dHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFlc3RhYmxpc2hlc0Zvcm1hdHRp
bmdDb250ZXh0ICYmIGlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSkKQEAgLTI1OCw3ICsyNTgs
NyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENo
aWxkcmVuKGNvbnN0IENvbnRhaW5lckJveCYgYwogICAgIGZvciAoYXV0byYgY2hpbGRCb3ggOiBj
aGlsZHJlbk9mVHlwZTxCb3g+KGNvbnRhaW5lckJveCkpIHsKICAgICAgICAgaWYgKCFjaGlsZEJv
eC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBh
dXRvIHBvc2l0aW9uT2Zmc2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25P
ZmZzZXQoY2hpbGRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgIGF1dG8gcG9z
aXRpb25PZmZzZXQgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmluRmxvd1Bvc2l0aW9uZWRQ
b3NpdGlvbk9mZnNldChjaGlsZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKICAgICAgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoY2hpbGRCb3gpLm1vdmUocG9zaXRpb25PZmZz
ZXQpOwogICAgIH0KICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQs
IHN0cmVhbSA8PCAiRW5kOiBtb3ZlIGluLWZsb3cgcG9zaXRpb25lZCBjaGlsZHJlbiAtPiBwYXJl
bnQ6ICIgPDwgJmNvbnRhaW5lckJveCk7CkBAIC0yNjYsMTIgKzI2NiwxMiBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IENv
bnRhaW5lckJveCYgYwogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0
aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKQogewotICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0TG9naWNhbFRvcChnZW9tZXRyeSgpLnN0YXRpY1Zl
cnRpY2FsUG9zaXRpb24obGF5b3V0Qm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKSk7CisgICAgZm9y
bWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KS5zZXRMb2dpY2FsVG9wKGJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5KCkuc3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZl
cnRpY2FsQ29uc3RyYWludHMpKTsKIH0KIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlU3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKIHsKLSAgICBm
b3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldExvZ2ljYWxMZWZ0KGdl
b21ldHJ5KCkuc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKSk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94
KS5zZXRMb2dpY2FsTGVmdChibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLnN0YXRpY0hvcml6b250
YWxQb3NpdGlvbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cykpOwogfQogCiB2b2lk
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94
QW5kQW5jZXN0b3JzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBDb25zdHJhaW50c1BhaXIm
IGNvbnN0cmFpbnRzUGFpcikKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94QW5kQW5jZXN0b3JzKGNv
bnN0CiAgICAgLy8KICAgICAvLyBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgYXMgbG9uZyBhcyB3ZSBk
b24ndCBjcm9zcyB0aGUgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGJvdW5kYXJ5LCB3ZSBzaG91
bGQgYmUgYWJsZSB0byBwcmUtY29tcHV0ZSB0aGUgZmluYWwgdG9wIHBvc2l0aW9uLgogICAgIC8v
IEZJWE1FOiB3ZSBjdXJyZW50bHkgZG9uJ3QgYWNjb3VudCBmb3IgdGhlICJjbGVhciIgcHJvcGVy
dHkgd2hlbiBjb21wdXRpbmcgdGhlIGZpbmFsIHBvc2l0aW9uIGZvciBhbiBhbmNlc3Rvci4KLSAg
ICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGdlb21ldHJ5KCk7CisgICAgYXV0byBmb3JtYXR0
aW5nR2VvbWV0cnkgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpOwogICAgIGZvciAoYXV0byog
YW5jZXN0b3IgPSAmbGF5b3V0Qm94OyBhbmNlc3RvciAmJiBhbmNlc3RvciAhPSAmcm9vdCgpOyBh
bmNlc3RvciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgYXV0byBj
b25zdHJhaW50c0ZvckFuY2VzdG9yID0gWyZdIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5p
bmdCbG9jayA9IGFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKTsKQEAgLTM2MCw3ICszNjAsNyBA
QCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25z
dCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aQogICAgICAgICAvLyBGbG9hdCBhdm9pZGVycycgYXZh
aWxhYmxlIHdpZHRoIG1pZ2h0IGJlIHNocnVuayBieSBleGlzdGluZyBmbG9hdHMgaW4gdGhlIGNv
bnRleHQuCiAgICAgICAgIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyID0gdXNlZEF2YWlsYWJs
ZVdpZHRoRm9yRmxvYXRBdm9pZGVyKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94LCBjb25zdHJh
aW50c1BhaXIpOwogICAgIH0KLSAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGdlb21l
dHJ5KCkuY29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJhaW50
c1BhaXIuY29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwsIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9p
ZGVyKTsKKyAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5KCkuY29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJh
aW50c1BhaXIuY29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwsIGF2YWlsYWJsZVdpZHRoRmxvYXRB
dm9pZGVyKTsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdl
b21ldHJ5KGxheW91dEJveCk7CiAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGNv
bnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOwogICAgIGJveEdlb21ldHJ5LnNldEhv
cml6b250YWxNYXJnaW4oeyBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwg
Y29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIH0pOwpAQCAtMzcwLDE3ICszNzAs
MTcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogewogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShP
cHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IHsKICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvdygpKQotICAgICAgICAgICAgcmV0dXJu
IGdlb21ldHJ5KCkuaW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0
cmFpbnRzLmhvcml6b250YWwsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgICAgIHJldHVybiBi
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5
b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IHVzZWRIZWlnaHQgfSk7CiAKICAgICAg
ICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwg
Y29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0pOworICAgICAgICAgICAgcmV0
dXJuIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0pOwog
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH07CiAKICAgICBhdXRvIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7Ci0g
ICAgaWYgKGF1dG8gbWF4SGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlv
dXRCb3gpKSB7CisgICAgaWYgKGF1dG8gbWF4SGVpZ2h0ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0
cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChjb250ZW50
SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPiAqbWF4SGVpZ2h0KSB7CiAgICAgICAgICAg
ICBhdXRvIG1heEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWF4SGVpZ2h0KTsKICAgICAgICAg
ICAgIC8vIFVzZWQgaGVpZ2h0IHNob3VsZCByZW1haW4gdGhlIHNhbWUuCkBAIC0zODksNyArMzg5
LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KGF1dG8gbWluSGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gp
KSB7CisgICAgaWYgKGF1dG8gbWluSGVpZ2h0ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChjb250ZW50SGVpZ2h0
QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPCAqbWluSGVpZ2h0KSB7CiAgICAgICAgICAgICBhdXRv
IG1pbkhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWluSGVpZ2h0KTsKICAgICAgICAgICAgIC8v
IFVzZWQgaGVpZ2h0IHNob3VsZCByZW1haW4gdGhlIHNhbWUuCkBAIC00NzgsNyArNDc4LDcgQEAg
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZEludHJpbnNpY1dpZHRoQ29uc3RyYWkKICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9ICpx
dWV1ZS50YWtlTGFzdCgpOwogICAgICAgICAgICAgYXV0byBkZXNkZW5kYW50Q29uc3RyYWludHMg
PSBmb3JtYXR0aW5nU3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChsYXlvdXRC
b3gpOwogICAgICAgICAgICAgaWYgKCFkZXNkZW5kYW50Q29uc3RyYWludHMpIHsKLSAgICAgICAg
ICAgICAgICBkZXNkZW5kYW50Q29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMobGF5b3V0Qm94KTsKKyAgICAgICAgICAgICAgICBkZXNkZW5kYW50Q29uc3Ry
YWludHMgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMobGF5b3V0Qm94KTsKICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuc2V0SW50cmlu
c2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChsYXlvdXRCb3gsICpkZXNkZW5kYW50Q29uc3RyYWlu
dHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29uc3RyYWludHMubWluaW11bSA9IHN0
ZDo6bWF4KGNvbnN0cmFpbnRzLm1pbmltdW0sIGRlc2RlbmRhbnRDb25zdHJhaW50cy0+bWluaW11
bSk7CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp1cGRh
dGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZyhjb25zdCBCb3gmIGxheW8KICAgICB9CiB9
CiAKLUJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21l
dHJ5KCkgY29uc3QKK0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OmJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gQmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnkgeyAqdGhpcyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAzY2E5MDc1Yjk0MmQwZGE3Nzc4YTI3NjFiMjk2YTg0
MzQwNDE4ODkzLi43NzE5ZTQ1MTAwZWMzYzNmNjg2M2ZjNWQ2OWYwMzMxOTQ2MDFkZGRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtODAsNyArODAs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2li
bGluZyhjb25zdCBCb3gmKTsKIAogICAgIEJsb2NrRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5n
U3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGlu
Z0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQotICAgIEJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5IGdlb21ldHJ5KCkgY29uc3Q7CisgICAgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgYmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdDsKICAgICBCbG9ja01hcmdpbkNvbGxhcHNlIG1hcmdp
bkNvbGxhcHNlKCkgY29uc3Q7CiAKICNpZiBBU1NFUlRfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIv
VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBhYTc3NTQ2MzAyZThlOWU4ZDlkZWYwZTEx
MzMwYTY4Mjc2NTE4YjhjLi5iZGM2MzMwMTRiYjY2YTljN2Q2NmY0MWMwZTNmNzc2M2IwNDczMmYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxl
d3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNzcsNyAr
NzcsNyBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dFRh
YmxlQm94KGNvbnN0IENvbnRhaW5lckJveCYgdGFibAogCiAgICAgaWYgKHRhYmxlQm94Lmhhc0No
aWxkKCkpIHsKICAgICAgICAgYXV0byBpbnZhbGlkYXRpb25TdGF0ZSA9IEludmFsaWRhdGlvblN0
YXRlIHsgfTsKLSAgICAgICAgTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
dGFibGVCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlv
blN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCh0YWJsZUJveCkp
OworICAgICAgICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dCh0YWJsZUJv
eCwgbGF5b3V0U3RhdGUoKSktPmxheW91dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUs
IGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KHRh
YmxlQm94KSk7CiAgICAgfQogCiAgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRhYmxlQm94
KHRhYmxlQm94LCBjb25zdHJhaW50cyk7CkBAIC05OSwxMyArOTksMTMgQEAgdm9pZCBUYWJsZVdy
YXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZ0ZvclRh
YmxlQm94KGNvbnMKICAgICAvLyBtYXhpbXVtIGNvbGxhcHNlZCB0b3AgYm9yZGVyLiBUaGUgYm90
dG9tIGJvcmRlciB3aWR0aCBpcyBjb21wdXRlZCBieSBleGFtaW5pbmcgYWxsIGNlbGxzIHdob3Nl
IGJvdHRvbSBib3JkZXJzIGNvbGxhcHNlCiAgICAgLy8gd2l0aCB0aGUgYm90dG9tIG9mIHRoZSB0
YWJsZS4gVGhlIGJvdHRvbSBib3JkZXIgd2lkdGggaXMgZXF1YWwgdG8gaGFsZiBvZiB0aGUgbWF4
aW11bSBjb2xsYXBzZWQgYm90dG9tIGJvcmRlci4KICAgICBhdXRvJiBncmlkID0gbGF5b3V0U3Rh
dGUoKS5lc3RhYmxpc2hlZFRhYmxlRm9ybWF0dGluZ1N0YXRlKHRhYmxlQm94KS50YWJsZUdyaWQo
KTsKLSAgICBhdXRvIHRhYmxlQm9yZGVyID0gZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcih0YWJs
ZUJveCk7CisgICAgYXV0byB0YWJsZUJvcmRlciA9IGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCku
Y29tcHV0ZWRCb3JkZXIodGFibGVCb3gpOwogCiAgICAgYXV0byYgZmlyc3RDb2x1bW5GaXJzdFJv
d0JveCA9IGdyaWQuc2xvdCh7IDAgLCAwIH0pLT5jZWxsKCkuYm94KCk7Ci0gICAgYXV0byBsZWZ0
Qm9yZGVyID0gc3RkOjptYXgodGFibGVCb3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBnZW9tZXRyeSgp
LmNvbXB1dGVkQm9yZGVyKGZpcnN0Q29sdW1uRmlyc3RSb3dCb3gpLmhvcml6b250YWwubGVmdCk7
CisgICAgYXV0byBsZWZ0Qm9yZGVyID0gc3RkOjptYXgodGFibGVCb3JkZXIuaG9yaXpvbnRhbC5s
ZWZ0LCBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGZpcnN0Q29sdW1u
Rmlyc3RSb3dCb3gpLmhvcml6b250YWwubGVmdCk7CiAKICAgICBhdXRvJiBsYXN0Q29sdW1uRmly
c3RSb3cgPSBncmlkLnNsb3QoeyBncmlkLmNvbHVtbnMoKS5zaXplKCkgLSAxLCAwIH0pLT5jZWxs
KCkuYm94KCk7Ci0gICAgYXV0byByaWdodEJvcmRlciA9IHN0ZDo6bWF4KHRhYmxlQm9yZGVyLmhv
cml6b250YWwucmlnaHQsIGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGFzdENvbHVtbkZpcnN0
Um93KS5ob3Jpem9udGFsLnJpZ2h0KTsKKyAgICBhdXRvIHJpZ2h0Qm9yZGVyID0gc3RkOjptYXgo
dGFibGVCb3JkZXIuaG9yaXpvbnRhbC5yaWdodCwgYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b21wdXRlZEJvcmRlcihsYXN0Q29sdW1uRmlyc3RSb3cpLmhvcml6b250YWwucmlnaHQpOwogCiAg
ICAgYXV0byB0b3BCb3JkZXIgPSB0YWJsZUJvcmRlci52ZXJ0aWNhbC50b3A7CiAgICAgYXV0byBi
b3R0b21Cb3JkZXIgPSB0YWJsZUJvcmRlci52ZXJ0aWNhbC5ib3R0b207CkBAIC0xMTQsMzMgKzEx
NCwzMyBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVC
b3JkZXJBbmRQYWRkaW5nRm9yVGFibGVCb3goY29ucwogICAgICAgICBhdXRvJiBib3hJbkZpcnN0
Um94ID0gZ3JpZC5zbG90KHsgY29sdW1uSW5kZXgsIDAgfSktPmNlbGwoKS5ib3goKTsKICAgICAg
ICAgYXV0byYgYm94SW5MYXN0Um93ID0gZ3JpZC5zbG90KHsgY29sdW1uSW5kZXgsIGxhc3RSb3dJ
bmRleCB9KS0+Y2VsbCgpLmJveCgpOwogCi0gICAgICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4KHRv
cEJvcmRlciwgZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihib3hJbkZpcnN0Um94KS52ZXJ0aWNh
bC50b3ApOwotICAgICAgICBib3R0b21Cb3JkZXIgPSBzdGQ6Om1heChib3R0b21Cb3JkZXIsIGdl
b21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoYm94SW5MYXN0Um93KS52ZXJ0aWNhbC5ib3R0b20pOwor
ICAgICAgICB0b3BCb3JkZXIgPSBzdGQ6Om1heCh0b3BCb3JkZXIsIGJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoYm94SW5GaXJzdFJveCkudmVydGljYWwudG9wKTsKKyAg
ICAgICAgYm90dG9tQm9yZGVyID0gc3RkOjptYXgoYm90dG9tQm9yZGVyLCBibG9ja0Zvcm1hdHRp
bmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGJveEluTGFzdFJvdykudmVydGljYWwuYm90dG9t
KTsKICAgICB9CiAKLSAgICB0b3BCb3JkZXIgPSBzdGQ6Om1heCh0b3BCb3JkZXIsIGdlb21ldHJ5
KCkuY29tcHV0ZWRCb3JkZXIoKnRhYmxlQm94LmZpcnN0Q2hpbGQoKSkudmVydGljYWwudG9wKTsK
KyAgICB0b3BCb3JkZXIgPSBzdGQ6Om1heCh0b3BCb3JkZXIsIGJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5KCkuY29tcHV0ZWRCb3JkZXIoKnRhYmxlQm94LmZpcnN0Q2hpbGQoKSkudmVydGljYWwudG9w
KTsKICAgICBmb3IgKGF1dG8mIHNlY3Rpb24gOiBjaGlsZHJlbk9mVHlwZTxDb250YWluZXJCb3g+
KHRhYmxlQm94KSkgewotICAgICAgICBhdXRvIGhvcml6dG9uYWxCb3JkZXIgPSBnZW9tZXRyeSgp
LmNvbXB1dGVkQm9yZGVyKHNlY3Rpb24pLmhvcml6b250YWw7CisgICAgICAgIGF1dG8gaG9yaXp0
b25hbEJvcmRlciA9IGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoc2Vj
dGlvbikuaG9yaXpvbnRhbDsKICAgICAgICAgbGVmdEJvcmRlciA9IHN0ZDo6bWF4KGxlZnRCb3Jk
ZXIsIGhvcml6dG9uYWxCb3JkZXIubGVmdCk7CiAgICAgICAgIHJpZ2h0Qm9yZGVyID0gc3RkOjpt
YXgocmlnaHRCb3JkZXIsIGhvcml6dG9uYWxCb3JkZXIucmlnaHQpOwogICAgIH0KLSAgICBib3R0
b21Cb3JkZXIgPSBzdGQ6Om1heChib3R0b21Cb3JkZXIsIGdlb21ldHJ5KCkuY29tcHV0ZWRCb3Jk
ZXIoKnRhYmxlQm94Lmxhc3RDaGlsZCgpKS52ZXJ0aWNhbC5ib3R0b20pOworICAgIGJvdHRvbUJv
cmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwgYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b21wdXRlZEJvcmRlcigqdGFibGVCb3gubGFzdENoaWxkKCkpLnZlcnRpY2FsLmJvdHRvbSk7CiAK
ICAgICBhdXRvJiByb3dzID0gZ3JpZC5yb3dzKCkubGlzdCgpOwotICAgIHRvcEJvcmRlciA9IHN0
ZDo6bWF4KHRvcEJvcmRlciwgZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dzLmZpcnN0KCku
Ym94KCkpLnZlcnRpY2FsLnRvcCk7CisgICAgdG9wQm9yZGVyID0gc3RkOjptYXgodG9wQm9yZGVy
LCBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJvd3MuZmlyc3QoKS5i
b3goKSkudmVydGljYWwudG9wKTsKICAgICBmb3IgKGF1dG8mIHJvdyA6IHJvd3MpIHsKLSAgICAg
ICAgYXV0byBob3JpenRvbmFsQm9yZGVyID0gZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3cu
Ym94KCkpLmhvcml6b250YWw7CisgICAgICAgIGF1dG8gaG9yaXp0b25hbEJvcmRlciA9IGJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93LmJveCgpKS5ob3Jpem9udGFs
OwogICAgICAgICBsZWZ0Qm9yZGVyID0gc3RkOjptYXgobGVmdEJvcmRlciwgaG9yaXp0b25hbEJv
cmRlci5sZWZ0KTsKICAgICAgICAgcmlnaHRCb3JkZXIgPSBzdGQ6Om1heChyaWdodEJvcmRlciwg
aG9yaXp0b25hbEJvcmRlci5yaWdodCk7CiAgICAgfQotICAgIGJvdHRvbUJvcmRlciA9IHN0ZDo6
bWF4KGJvdHRvbUJvcmRlciwgZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dzLmxhc3QoKS5i
b3goKSkudmVydGljYWwuYm90dG9tKTsKKyAgICBib3R0b21Cb3JkZXIgPSBzdGQ6Om1heChib3R0
b21Cb3JkZXIsIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93cy5s
YXN0KCkuYm94KCkpLnZlcnRpY2FsLmJvdHRvbSk7CiAKICAgICBhdXRvIGNvbGxhcHNlZEJvcmRl
ciA9IEVkZ2VzIHsgeyBsZWZ0Qm9yZGVyLCByaWdodEJvcmRlciB9LCB7IHRvcEJvcmRlciwgYm90
dG9tQm9yZGVyIH0gfTsKICAgICBncmlkLnNldENvbGxhcHNlZEJvcmRlcihjb2xsYXBzZWRCb3Jk
ZXIpOwogCiAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9t
ZXRyeSh0YWJsZUJveCk7CiAgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKGNvbGxhcHNlZEJvcmRl
ciAvIDIpOwotICAgIGJveEdlb21ldHJ5LnNldFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBh
ZGRpbmcodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpKTsKKyAg
ICBib3hHZW9tZXRyeS5zZXRQYWRkaW5nKGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0
ZWRQYWRkaW5nKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKSk7
CiB9CiAKIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdp
ZHRoQW5kTWFyZ2luRm9yVGFibGVCb3goY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCwgY29u
c3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCkBAIC0xODUs
MTAgKzE4NSwxMCBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVXaWR0aEFuZE1hcmdpbkZvclRhYmxlQm94KGNvbnN0CiAgICAgLy8gU2ltaWxhciBzZXR1
cCB3aXRoIG5vbi10YWJsZSBjb250ZW50IHdvdWxkIHJlc29sdmUgdGhlIGlubmVyIGJsb2NrIGxl
dmVsIGJveCdzIHdpZHRoIHRvIDQwcHg7CiAgICAgLy8gVGhpcyBuZWVkcyBjbGFyaWZpY2F0aW9u
IGluIHRoZSBzcGVjLgogICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdX
aWR0aCA9IG1faG9yaXpvbnRhbENvbnN0cmFpbnRzSWdub3JpbmdGbG9hdHMubG9naWNhbFdpZHRo
OwotICAgIGF1dG8gZ2VvbWV0cnkgPSB0aGlzLT5nZW9tZXRyeSgpOwotICAgIGF1dG8gY29tcHV0
ZWRXaWR0aCA9IGdlb21ldHJ5LmNvbXB1dGVkV2lkdGgodGFibGVCb3gsIGhvcml6b250YWxDb25z
dHJhaW50Rm9yUmVzb2x2aW5nV2lkdGgpOwotICAgIGF1dG8gY29tcHV0ZWRNYXhXaWR0aCA9IGdl
b21ldHJ5LmNvbXB1dGVkTWF4V2lkdGgodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50Rm9y
UmVzb2x2aW5nV2lkdGgpOwotICAgIGF1dG8gY29tcHV0ZWRNaW5XaWR0aCA9IGdlb21ldHJ5LmNv
bXB1dGVkTWluV2lkdGgodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50Rm9yUmVzb2x2aW5n
V2lkdGgpOworICAgIGF1dG8gZm9ybWF0dGluZ0dlb21ldHJ5ID0gYmxvY2tGb3JtYXR0aW5nR2Vv
bWV0cnkoKTsKKyAgICBhdXRvIGNvbXB1dGVkV2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29t
cHV0ZWRXaWR0aCh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdXaWR0
aCk7CisgICAgYXV0byBjb21wdXRlZE1heFdpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1
dGVkTWF4V2lkdGgodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50Rm9yUmVzb2x2aW5nV2lk
dGgpOworICAgIGF1dG8gY29tcHV0ZWRNaW5XaWR0aCA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21w
dXRlZE1pbldpZHRoKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmluZ1dp
ZHRoKTsKICAgICAvLyBVc2UgdGhlIGdlbmVyaWMgc2hyaW5rLXRvLWZpdC13aWR0aCBsb2dpYyBh
cyB0aGUgaW5pdGlhbCB3aWR0aCBmb3IgdGhlIHRhYmxlLgogICAgIGF1dG8gdXNlZFdpZHRoID0g
c3RkOjptaW4oc3RkOjptYXgoaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCBhdmFp
bGFibGVIb3Jpem9udGFsU3BhY2UpLCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0p
OwogICAgIGlmIChjb21wdXRlZFdpZHRoIHx8IGNvbXB1dGVkTWluV2lkdGggfHwgY29tcHV0ZWRN
YXhXaWR0aCkgewpAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luRm9yVGFibGVCb3goY29uc3QKICAg
ICAgICAgICAgIHVzZWRXaWR0aCA9ICpjb21wdXRlZE1pbldpZHRoOwogICAgIH0KIAotICAgIGF1
dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0gZ2VvbWV0cnkuaW5GbG93Q29udGVudFdpZHRoQW5k
TWFyZ2luKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIE92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisgICAgYXV0byBjb250ZW50V2lkdGhBbmRN
YXJnaW4gPSBmb3JtYXR0aW5nR2VvbWV0cnkuaW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKHRh
YmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
IHsgdXNlZFdpZHRoLCB7IH0gfSk7CiAKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdTdGF0ZSgpLmJveEdlb21ldHJ5KHRhYmxlQm94KTsKICAgICBib3hHZW9tZXRyeS5zZXRDb250
ZW50Qm94V2lkdGgoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCk7CkBAIC0yMjMs
MTEgKzIyMywxMSBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVIZWlnaHRBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdAogICAgICAgICBpZiAobGF5b3V0
U3RhdGUoKS5pblF1aXJrc01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBUYWJsZVdyYXBwZXJR
dWlya3MoKnRoaXMpLm92ZXJyaWRkZW5UYWJsZUhlaWdodCh0YWJsZUJveCk7CiAgICAgICAgIGlm
ICh0YWJsZUJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVy
biBnZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QodGFibGVC
b3gpOworICAgICAgICAgICAgcmV0dXJuIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29udGVu
dEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfSgpOwogCi0gICAgYXV0byBoZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgp
LmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4odGFibGVCb3gsIGNvbnN0cmFpbnRzLmhvcml6
b250YWwsIHsgb3ZlcnJpZGRlblRhYmxlSGVpZ2h0IH0pOworICAgIGF1dG8gaGVpZ2h0QW5kTWFy
Z2luID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5pbkZsb3dDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKHRhYmxlQm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IG92ZXJyaWRkZW5UYWJsZUhl
aWdodCB9KTsKICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gbWFyZ2luQ29sbGFwc2UoKS5jb2xs
YXBzZWRWZXJ0aWNhbFZhbHVlcyh0YWJsZUJveCwgaGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNl
ZE1hcmdpbik7CiAgICAgLy8gQ2FjaGUgdGhlIGNvbXB1dGVkIHBvc2l0aXZlIGFuZCBuZWdhdGl2
ZSBtYXJnaW4gdmFsdWUgcGFpci4KICAgICBmb3JtYXR0aW5nU3RhdGUoKS5zZXRVc2VkVmVydGlj
YWxNYXJnaW4odGFibGVCb3gsIHZlcnRpY2FsTWFyZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0Zs
ZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggNjM2MWY4ZTkxZTc0NDc0MzQ2MzQyMDE0ODg2
ZTVmMTBkYTNhOGRiNC4uNmEyZDI3YzY5NWI4MjFhODFiYTY1ZjllYTE3YzJjZmM0NmY3MTAxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4
L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTY3LDcg
KzY3LDcgQEAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW4KIHZvaWQgRmxleEZvcm1hdHRpbmdDb250
ZXh0OjpzaXplQW5kUGxhY2VGbGV4SXRlbXMoY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250
ZW50JiBjb25zdHJhaW50cykKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5m
b3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2VvbWV0cnkoKTsK
KyAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoKTsK
ICAgICBhdXRvIGZsZXhJdGVtTWFpbkF4aXNTdGFydCA9IGNvbnN0cmFpbnRzLmhvcml6b250YWwu
bG9naWNhbExlZnQ7CiAgICAgYXV0byBmbGV4SXRlbU1haW5BeGlzRW5kID0gZmxleEl0ZW1NYWlu
QXhpc1N0YXJ0OwogICAgIGF1dG8gZmxleEl0ZW1Dcm9zQXhpc1N0YXJ0ID0gY29uc3RyYWludHMu
dmVydGljYWwubG9naWNhbFRvcDsKQEAgLTg3LDE2ICs4NywxNiBAQCB2b2lkIEZsZXhGb3JtYXR0
aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKGNvbnN0IENvbnN0cmFpbnRzRm9ySW5G
bG93Q29udAogCiAgICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldExvZ2ljYWxUb3BMZWZ0
KExheW91dFBvaW50IHsgZmxleEl0ZW1NYWluQXhpc0VuZCwgZmxleEl0ZW1Dcm9zQXhpc1N0YXJ0
IH0pOwogCi0gICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldEJvcmRlcihnZW9tZXRyeS5j
b21wdXRlZEJvcmRlcihmbGV4SXRlbSkpOwotICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5z
ZXRQYWRkaW5nKGdlb21ldHJ5LmNvbXB1dGVkUGFkZGluZyhmbGV4SXRlbSwgY29uc3RyYWludHMu
aG9yaXpvbnRhbC5sb2dpY2FsV2lkdGgpKTsKKyAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnku
c2V0Qm9yZGVyKGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZEJvcmRlcihmbGV4SXRlbSkpOwor
ICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRQYWRkaW5nKGZvcm1hdHRpbmdHZW9tZXRy
eS5jb21wdXRlZFBhZGRpbmcoZmxleEl0ZW0sIGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNh
bFdpZHRoKSk7CiAKLSAgICAgICAgICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0g
Z2VvbWV0cnkuY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGZsZXhJdGVtLCBjb25zdHJhaW50cy5o
b3Jpem9udGFsKTsKKyAgICAgICAgICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0g
Zm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihmbGV4SXRlbSwgY29u
c3RyYWludHMuaG9yaXpvbnRhbCk7CiAgICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldEhv
cml6b250YWxNYXJnaW4oeyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigw
X2x1KSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpIH0pOwogCi0g
ICAgICAgICAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBnZW9tZXRyeS5jb21wdXRl
ZFZlcnRpY2FsTWFyZ2luKGZsZXhJdGVtLCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKKyAgICAg
ICAgICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9tZXRyeS5j
b21wdXRlZFZlcnRpY2FsTWFyZ2luKGZsZXhJdGVtLCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsK
ICAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyBjb21wdXRl
ZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDBfbHUpLCBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmFmdGVyLnZhbHVlT3IoMF9sdSkgfSk7CiAKLSAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0
cnkuc2V0Q29udGVudEJveEhlaWdodChnZW9tZXRyeS5jb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGlu
Z0NvbnRleHRSb290KGZsZXhJdGVtKSk7CisgICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNl
dENvbnRlbnRCb3hIZWlnaHQoZm9ybWF0dGluZ0dlb21ldHJ5LmNvbnRlbnRIZWlnaHRGb3JGb3Jt
YXR0aW5nQ29udGV4dFJvb3QoZmxleEl0ZW0pKTsKICAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0
cnkuc2V0Q29udGVudEJveFdpZHRoKGZsZXhJdGVtTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAg
IGZsZXhJdGVtTWFpbkF4aXNFbmQ9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGZsZXhJdGVt
R2VvbWV0cnkpLnJpZ2h0KCk7CiAgICAgICAgICAgICBmbGV4SXRlbUNyb3NBeGlzRW5kID0gc3Rk
OjptYXgoZmxleEl0ZW1Dcm9zQXhpc0VuZCwgQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QoZmxl
eEl0ZW1HZW9tZXRyeSkuYm90dG9tKCkpOwpAQCAtMTEwLDE1ICsxMTAsMTUgQEAgdm9pZCBGbGV4
Rm9ybWF0dGluZ0NvbnRleHQ6OnNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJhaW50
c0ZvckluRmxvd0NvbnQKIHZvaWQgRmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcygpCiB7CiAgICAgYXV0byYgZm9ybWF0dGlu
Z1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7Ci0gICAgYXV0byBnZW9tZXRyeSA9IHRo
aXMtPmdlb21ldHJ5KCk7CisgICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0cnkgPSBmbGV4Rm9ybWF0
dGluZ0dlb21ldHJ5KCk7CiAgICAgZm9yIChhdXRvJiBmbGV4SXRlbSA6IGNoaWxkcmVuT2ZUeXBl
PENvbnRhaW5lckJveD4ocm9vdCgpKSkgewogICAgICAgICBpZiAoZm9ybWF0dGluZ1N0YXRlLmlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goZmxleEl0ZW0pKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9yQm94KGZsZXhJdGVtLCBnZW9tZXRyeS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGZs
ZXhJdGVtKSk7CisgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzRm9yQm94KGZsZXhJdGVtLCBmb3JtYXR0aW5nR2VvbWV0cnkuaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyhmbGV4SXRlbSkpOwogICAgIH0KIH0KIAotRmxleEZvcm1hdHRpbmdHZW9tZXRy
eSBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK0ZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkgRmxleEZvcm1hdHRpbmdDb250ZXh0OjpmbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gRmxleEZvcm1hdHRpbmdHZW9tZXRyeSgqdGhpcyk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgv
RmxleEZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggM2VlZmM1ZTQ5Y2Zi
NjI4YzkxNjdhNTI1NGUwODM5ZmRmNTczODBjYi4uMjIzZmEwODYwODdmOWUzNzk4ZWFhNzc0Y2Yz
MDVkOGU5YzJhYzAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQu
aApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBvdmVycmlkZTsKIAogcHJpdmF0
ZToKLSAgICBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7CisgICAgRmxl
eEZvcm1hdHRpbmdHZW9tZXRyeSBmbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0Nv
bnRlbnQmKTsKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yRmxl
eEl0ZW1zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5jcHAKaW5kZXggODZjODM0YzMxMmY1Y2E1ZGVmNjQwNGE1ZjcyMDljMTMzZWE2ZWRkOC4uNTYw
MmM4MTc5YjRlMWI1ZGJkMGMyMjdlYWU2MWU2MGQ3OGEwNzlmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMTA0LDkgKzEwNCw5IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxp
ZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvCiAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRpbmdS
b290Lmhhc0NoaWxkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBmb3JtYXR0aW5nQ29u
dGV4dCA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdS
b290LCBsYXlvdXRTdGF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRpbmdS
b290Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUs
IGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGZvcm1hdHRpbmdSb290KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0SW5GbG93
Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29u
c3RyYWludHNGb3JJbkZsb3dDb250ZW50KGZvcm1hdHRpbmdSb290KSk7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRz
Lmhvcml6b250YWwpOwotICAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5
b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZ2VvbWV0cnkoKS5jb25zdHJh
aW50c0Zvck91dE9mRmxvd0NvbnRlbnQoZm9ybWF0dGluZ1Jvb3QpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dE91dE9mRmxvd0NvbnRlbnQoaW52YWxpZGF0
aW9uU3RhdGUsIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9yT3V0T2ZG
bG93Q29udGVudChmb3JtYXR0aW5nUm9vdCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGZvcm1hdHRpbmdSb290LCBj
b25zdHJhaW50cy5ob3Jpem9udGFsKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMDgsNyAr
MjA4LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJ
dGVtcyYgaW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgaWYgKCFsaW5lQ29udGVu
dFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG5lZWRzTGF5b3V0UmFuZ2Uu
c3RhcnQgPCBsaW5lQ29udGVudFJhbmdlLmVuZCk7CiAgICAgICAgICAgICBpc0ZpcnN0TGluZSA9
IGZhbHNlOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBnZW9tZXRyeSgpLmxvZ2ljYWxU
b3BGb3JOZXh0TGluZShsaW5lQ29udGVudCwgbGluZUxvZ2ljYWxSZWN0LmJvdHRvbSgpLCBmbG9h
dGluZ0NvbnRleHQpOworICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBpbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkoKS5sb2dpY2FsVG9wRm9yTmV4dExpbmUobGluZUNvbnRlbnQsIGxpbmVMb2dp
Y2FsUmVjdC5ib3R0b20oKSwgZmxvYXRpbmdDb250ZXh0KTsKICAgICAgICAgICAgIGlmIChsaW5l
Q29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIHsKICAgICAgICAgICAgICAgICAv
LyBUaGUgZmluYWwgY29udGVudCBoZWlnaHQgb2YgdGhpcyBpbmxpbmUgZm9ybWF0dGluZyBjb250
ZXh0IHNob3VsZCBpbmNsdWRlIHRoZSBjbGVhcmVkIGZsb2F0cyBhcyB3ZWxsLgogICAgICAgICAg
ICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRDbGVhckdhcEFmdGVyTGFzdExpbmUobGluZUxvZ2lj
YWxUb3AgLSBsaW5lTG9naWNhbFJlY3QuYm90dG9tKCkpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVk
SW50cmluc2ljV2lkdGhDb25zdHJhCiAgICAgQVNTRVJUKCFmb3JtYXR0aW5nU3RhdGUoKS5pbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOwogCiAgICAgaWYgKCFyb290KCkuaGFzSW5GbG93T3JG
bG9hdGluZ0NoaWxkKCkpIHsKLSAgICAgICAgYXV0byBjb25zdHJhaW50cyA9IGdlb21ldHJ5KCku
Y29uc3RyYWluQnlNaW5NYXhXaWR0aChyb290KCksIHsgfSk7CisgICAgICAgIGF1dG8gY29uc3Ry
YWludHMgPSBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW5CeU1pbk1heFdpZHRo
KHJvb3QoKSwgeyB9KTsKICAgICAgICAgZm9ybWF0dGluZ1N0YXRlKCkuc2V0SW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyhjb25zdHJhaW50cyk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW50czsK
ICAgICB9CkBAIC0yOTYsNyArMjk2LDcgQEAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmEKIAogICAg
IGF1dG8gbWluaW11bUNvbnRlbnRXaWR0aCA9IGNlaWxlZExheW91dFVuaXQobWF4aW11bUxpbmVX
aWR0aCgwKSk7CiAgICAgYXV0byBtYXhpbXVtQ29udGVudFdpZHRoID0gY2VpbGVkTGF5b3V0VW5p
dChtYXhpbXVtTGluZVdpZHRoKG1heElubGluZUxheW91dFVuaXQoKSkpOwotICAgIGF1dG8gY29u
c3RyYWludHMgPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCgpLCB7IG1p
bmltdW1Db250ZW50V2lkdGgsIG1heGltdW1Db250ZW50V2lkdGggfSk7CisgICAgYXV0byBjb25z
dHJhaW50cyA9IGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lk
dGgocm9vdCgpLCB7IG1pbmltdW1Db250ZW50V2lkdGgsIG1heGltdW1Db250ZW50V2lkdGggfSk7
CiAgICAgZm9ybWF0dGluZ1N0YXRlKCkuc2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25z
dHJhaW50cyk7CiAgICAgcmV0dXJuIGNvbnN0cmFpbnRzOwogfQpAQCAtMzIzLDcgKzMyMyw3IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZv
cm1hdHRpbmdSb290KGNvbnN0IEJveCYKIHsKICAgICBBU1NFUlQoZm9ybWF0dGluZ1Jvb3QuZXN0
YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKICAgICBhdXRvIGNvbnN0cmFpbnRzID0gSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07Ci0gICAgaWYgKGF1dG8gZml4ZWRXaWR0aCA9IGdl
b21ldHJ5KCkuZml4ZWRWYWx1ZShmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgp
KSkKKyAgICBpZiAoYXV0byBmaXhlZFdpZHRoID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCku
Zml4ZWRWYWx1ZShmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpKSkKICAgICAg
ICAgY29uc3RyYWludHMgPSB7ICpmaXhlZFdpZHRoLCAqZml4ZWRXaWR0aCB9OwogICAgIGVsc2Ug
ewogICAgICAgICBhdXRvIGhhc0luZmxvd09yRmxvYXRpbmdDb250ZW50ID0gaXM8Q29udGFpbmVy
Qm94Pihmb3JtYXR0aW5nUm9vdCkgJiYgZG93bmNhc3Q8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5n
Um9vdCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7CkBAIC0zMzIsMTQgKzMzMiwxNCBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhGb3JGb3Jt
YXR0aW5nUm9vdChjb25zdCBCb3gmCiAgICAgICAgIGlmIChoYXNJbmZsb3dPckZsb2F0aW5nQ29u
dGVudCAmJiAhc2hvdWxkSWdub3JlQ2hpbGRDb250ZW50KQogICAgICAgICAgICAgY29uc3RyYWlu
dHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChkb3duY2FzdDxDb250
YWluZXJCb3g+KGZvcm1hdHRpbmdSb290KSwgbGF5b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cygpOwogICAgIH0KLSAgICBjb25zdHJhaW50cyA9IGdlb21ldHJ5
KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0aChmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMpOwor
ICAgIGNvbnN0cmFpbnRzID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWluQnlN
aW5NYXhXaWR0aChmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMpOwogICAgIGNvbnN0cmFpbnRz
LmV4cGFuZChnZW9tZXRyeUZvckJveChmb3JtYXR0aW5nUm9vdCkuaG9yaXpvbnRhbE1hcmdpbkJv
cmRlckFuZFBhZGRpbmcoKSk7CiAgICAgZm9ybWF0dGluZ1N0YXRlKCkuc2V0SW50cmluc2ljV2lk
dGhDb25zdHJhaW50c0ZvckJveChmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMpOwogfQogCiB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25z
dCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMpCiB7Ci0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBnZW9t
ZXRyeSgpLmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7CisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBpbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOwogICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxh
eW91dEJveCkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkg
fSk7CiB9CiAKQEAgLTM0NywxMSArMzQ3LDExIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKIHsK
ICAgICBhdXRvIGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRoKSB7
CiAgICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBnZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91
dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRXaWR0aCwgeyB9IH0pOworICAgICAg
ICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudFdp
ZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRXaWR0
aCwgeyB9IH0pOwogICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKLSAg
ICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmlubGluZUJsb2NrQ29udGVudFdpZHRoQW5kTWFy
Z2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRXaWR0aCwgeyB9IH0p
OworICAgICAgICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmlubGluZUJs
b2NrQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCB7IHVzZWRXaWR0aCwgeyB9IH0pOwogICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRC
b3goKSkKLSAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmlubGluZVJlcGxhY2VkQ29udGVu
dFdpZHRoQW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9u
dGFsQ29uc3RyYWludHMsIHsgfSwgeyB1c2VkV2lkdGgsIHsgfSB9KTsKKyAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5pbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0
aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCB7IH0sIHsgdXNlZFdpZHRoLCB7IH0gfSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsgfTsKICAg
ICB9OwpAQCAtMzU5LDEzICszNTksMTMgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgIGF1
dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0gY29tcHV0ZSh7IH0pOwogCiAgICAgYXV0byBhdmFp
bGFibGVXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0gICAgaWYg
KGF1dG8gbWF4V2lkdGggPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBh
dmFpbGFibGVXaWR0aCkpIHsKKyAgICBpZiAoYXV0byBtYXhXaWR0aCA9IGlubGluZUZvcm1hdHRp
bmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCkp
IHsKICAgICAgICAgYXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUobWF4V2lkdGgpOwog
ICAgICAgICBpZiAoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA+IG1heFdpZHRo
QW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKICAgICAgICAgICAgIGNvbnRlbnRXaWR0aEFuZE1hcmdp
biA9IG1heFdpZHRoQW5kTWFyZ2luOwogICAgIH0KIAotICAgIGF1dG8gbWluV2lkdGggPSBnZW9t
ZXRyeSgpLmNvbXB1dGVkTWluV2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCkudmFsdWVP
cigwKTsKKyAgICBhdXRvIG1pbldpZHRoID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29t
cHV0ZWRNaW5XaWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKS52YWx1ZU9yKDApOwogICAg
IGF1dG8gbWluV2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKG1pbldpZHRoKTsKICAgICBpZiAoY29u
dGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNvbnRl
bnRXaWR0aCkKICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWluV2lkdGhBbmRNYXJn
aW47CkBAIC0zNzksMjMgKzM3OSwyMyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogewogICAg
IGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KSB7CiAg
ICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAg
IHJldHVybiBnZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkSGVpZ2h0IH0pOworICAgICAgICAgICAg
cmV0dXJuIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudEhlaWdodEFu
ZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkSGVpZ2h0IH0p
OwogICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKLSAgICAgICAgICAg
IHJldHVybiBnZW9tZXRyeSgpLmlubGluZUJsb2NrQ29udGVudEhlaWdodEFuZE1hcmdpbihsYXlv
dXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkSGVpZ2h0IH0pOworICAgICAgICAg
ICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmlubGluZUJsb2NrQ29udGVudEhl
aWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkSGVp
Z2h0IH0pOwogICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAg
ICAgIHJldHVybiBnZW9tZXRyeSgpLmlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdp
bihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCB7IH0sIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgICAgIHJldHVybiBpbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkoKS5pbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNh
c3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCB7
IHVzZWRIZWlnaHQgfSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7IH07CiAgICAgfTsKIAogICAgIGF1dG8gY29u
dGVudEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUoeyB9KTsKLSAgICBpZiAoYXV0byBtYXhIZWln
aHQgPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVpZ2h0KGxheW91dEJveCkpIHsKKyAgICBpZiAo
YXV0byBtYXhIZWlnaHQgPSBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1heEhl
aWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGF1dG8gbWF4SGVpZ2h0QW5kTWFyZ2luID0gY29t
cHV0ZShtYXhIZWlnaHQpOwogICAgICAgICBpZiAoY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250
ZW50SGVpZ2h0ID4gbWF4SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQpCiAgICAgICAgICAg
ICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gbWF4SGVpZ2h0QW5kTWFyZ2luOwogICAgIH0KIAot
ICAgIGlmIChhdXRvIG1pbkhlaWdodCA9IGdlb21ldHJ5KCkuY29tcHV0ZWRNaW5IZWlnaHQobGF5
b3V0Qm94KSkgeworICAgIGlmIChhdXRvIG1pbkhlaWdodCA9IGlubGluZUZvcm1hdHRpbmdHZW9t
ZXRyeSgpLmNvbXB1dGVkTWluSGVpZ2h0KGxheW91dEJveCkpIHsKICAgICAgICAgYXV0byBtaW5I
ZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKG1pbkhlaWdodCk7CiAgICAgICAgIGlmIChjb250ZW50
SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPCBtaW5IZWlnaHRBbmRNYXJnaW4uY29udGVu
dEhlaWdodCkKICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBtaW5IZWlnaHRB
bmRNYXJnaW47CkBAIC00NTYsOSArNDU2LDkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29sbGVjdElubGluZUNvbnRlbnRJZk5lZWRlZCgpCiBJbmxpbmVSZWN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVp
bGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmIGhvcml6b250YWxDb25zdHJhaW50cykKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUg
PSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2Vv
bWV0cnkoKTsKKyAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdH
ZW9tZXRyeSgpOwogCi0gICAgZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3goZ2VvbWV0cnkubGlu
ZUJveEZvckxpbmVDb250ZW50KGxpbmVDb250ZW50KSk7CisgICAgZm9ybWF0dGluZ1N0YXRlLmFk
ZExpbmVCb3goZm9ybWF0dGluZ0dlb21ldHJ5LmxpbmVCb3hGb3JMaW5lQ29udGVudChsaW5lQ29u
dGVudCkpOwogICAgIGNvbnN0IGF1dG8mIGxpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUubGluZUJv
eGVzKCkubGFzdCgpOwogICAgIGF1dG8gbGluZUluZGV4ID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVz
KCkuc2l6ZSgpOwogICAgIGF1dG8mIGxpbmVCb3hMb2dpY2FsUmVjdCA9IGxpbmVCb3gubG9naWNh
bFJlY3QoKTsKQEAgLTUyNyw3ICs1MjcsNyBAQCBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbAogICAg
ICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpbmxpbmUgYm94ZXMgYXJlIHJlbGF0aXZlIHRvIHRo
ZSBsaW5lIGFuZCB0aGVpciB0b3AgcG9zaXRpb24gY2FuIGJlIG5lZ2F0aXZlLgogICAgICAgICAg
ICAgICAgIGJvcmRlckJveExvZ2ljYWxUb3BMZWZ0Lm1vdmVCeShsaW5lQm94TG9naWNhbFJlY3Qu
dG9wTGVmdCgpKTsKICAgICAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRp
b25lZCgpKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3hMb2dpY2FsVG9wTGVmdCArPSBn
ZW9tZXRyeS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCBob3Jpem9u
dGFsQ29uc3RyYWludHMpOworICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3hMb2dpY2FsVG9w
TGVmdCArPSBmb3JtYXR0aW5nR2VvbWV0cnkuaW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0
KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKICAgICAgICAgICAgICAgICAvLyBB
dG9taWMgaW5saW5lIGJveGVzIGFyZSBhbGwgc2V0LiBUaGVpciBtYXJnaW4vYm9yZGVyL2NvbnRl
bnQgYm94IGdlb21ldHJpZXMgYXJlIGFscmVhZHkgY29tcHV0ZWQuIFdlIGp1c3QgaGF2ZSB0byBw
b3NpdGlvbiB0aGVtIGhlcmUuCiAgICAgICAgICAgICAgICAgYm94R2VvbWV0cnkuc2V0TG9naWNh
bFRvcExlZnQodG9MYXlvdXRQb2ludChib3JkZXJCb3hMb2dpY2FsVG9wTGVmdCkpOwogCkBAIC02
MTIsNyArNjEyLDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW52YWxpZGF0ZUZv
cm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYKICAgICAvLyBGSVhNRTogVGhp
cyBpcyBhbHNvIHdoZXJlIHdlIHdvdWxkIGRlbGV0ZSBpbmxpbmUgaXRlbXMgaWYgdGhlaXIgY29u
dGVudCBjaGFuZ2VkLgogfQogCi1JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QK
IHsKICAgICByZXR1cm4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDBmOTlmOWY5
MzRlYzhlZjU5NDRiZmFiOTdjNzVjYzc0NDdkYTcyZjUuLmRjZThjM2VmOTZjN2ZkZGZlZTJiYjFj
ZWIwMWIzMjNlMDg2OTZhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KCkgb3ZlcnJpZGU7CiAKLSAgICBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBj
b25zdDsKKyAgICBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgaW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5KCkgY29uc3Q7CiAKICAgICB2b2lkIGxpbmVMYXlvdXQoSW5saW5lSXRlbXMmLCBMaW5lQnVp
bGRlcjo6SW5saW5lSXRlbVJhbmdlLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQm
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5k
ZXggMTZjODczZjBhOGI1YmQ2NzU4ZjgwMDYxNmRmMGM2OTJkNjE5MjFkYy4uN2Q4YTY0MjEwM2Mx
MjkwODBjZWJmZThkNzcwZDI3MzE0N2Y2MTliNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1Rh
YmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0xNzMsMTMgKzE3MywxMyBAQCB2b2lkIFRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvclJvd3MoTGF5b3V0VW5pdCBhdmFp
bGFibGVIb3Jpem9udAogICAgICAgICBhdXRvJiByb3dCb3ggPSByb3cuYm94KCk7CiAgICAgICAg
IGF1dG8mIHJvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkocm93
Qm94KTsKIAotICAgICAgICByb3dCb3hHZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29t
cHV0ZWRQYWRkaW5nKHJvd0JveCwgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlKSk7CisgICAgICAg
IHJvd0JveEdlb21ldHJ5LnNldFBhZGRpbmcodGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21w
dXRlZFBhZGRpbmcocm93Qm94LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsKICAgICAgICAg
Ly8gSW50ZXJuYWwgdGFibGUgZWxlbWVudHMgZG8gbm90IGhhdmUgbWFyZ2lucy4KICAgICAgICAg
cm93Qm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOwogICAgICAgICByb3dCb3hH
ZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IH0pOwogCiAgICAgICAgIGF1dG8gY29tcHV0ZWRS
b3dCb3JkZXIgPSBbJl0gewotICAgICAgICAgICAgYXV0byBib3JkZXIgPSBnZW9tZXRyeSgpLmNv
bXB1dGVkQm9yZGVyKHJvd0JveCk7CisgICAgICAgICAgICBhdXRvIGJvcmRlciA9IHRhYmxlRm9y
bWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93Qm94KTsKICAgICAgICAgICAgIGlm
ICghZ3JpZC5jb2xsYXBzZWRCb3JkZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYm9yZGVy
OwogICAgICAgICAgICAgLy8gQm9yZGVyIGNvbGxhcHNpbmcgZGVsZWdhdGVzIGJvcmRlcnMgdG8g
dGFibGUvY2VsbHMuCkBAIC0yODAsMTMgKzI4MCwxMyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6OmxheW91dENlbGwoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsLCBMYXlvdXRVbml0
CiB7CiAgICAgQVNTRVJUKGNlbGwuYm94KCkuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0KCkpOwogCi0gICAgYXV0byBnZW9tZXRyeSA9IHRoaXMtPmdlb21ldHJ5KCk7CisgICAgYXV0
byBmb3JtYXR0aW5nR2VvbWV0cnkgPSB0YWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgpOwogICAgIGF1
dG8mIGdyaWQgPSBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKTsKICAgICBhdXRvJiBjZWxs
Qm94ID0gY2VsbC5ib3goKTsKICAgICBhdXRvJiBjZWxsQm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
U3RhdGUoKS5ib3hHZW9tZXRyeShjZWxsQm94KTsKIAotICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRC
b3JkZXIoZ2VvbWV0cnkuY29tcHV0ZWRDZWxsQm9yZGVyKGNlbGwpKTsKLSAgICBjZWxsQm94R2Vv
bWV0cnkuc2V0UGFkZGluZyhnZW9tZXRyeS5jb21wdXRlZFBhZGRpbmcoY2VsbEJveCwgYXZhaWxh
YmxlSG9yaXpvbnRhbFNwYWNlKSk7CisgICAgY2VsbEJveEdlb21ldHJ5LnNldEJvcmRlcihmb3Jt
YXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRDZWxsQm9yZGVyKGNlbGwpKTsKKyAgICBjZWxsQm94R2Vv
bWV0cnkuc2V0UGFkZGluZyhmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRQYWRkaW5nKGNlbGxC
b3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOwogICAgIC8vIEludGVybmFsIHRhYmxlIGVs
ZW1lbnRzIGRvIG5vdCBoYXZlIG1hcmdpbnMuCiAgICAgY2VsbEJveEdlb21ldHJ5LnNldEhvcml6
b250YWxNYXJnaW4oeyB9KTsKICAgICBjZWxsQm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4o
eyB9KTsKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dENlbGwoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsLCBMYXlvdXRVbml0CiAgICAgY2Vs
bEJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChhdmFpbGFibGVTcGFjZUZvckNvbnRlbnQp
OwogCiAgICAgaWYgKGNlbGxCb3guaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpIHsKLSAgICAg
ICAgYXV0byBjb25zdHJhaW50c0ZvckNlbGxDb250ZW50ID0gZ2VvbWV0cnkuY29uc3RyYWludHNG
b3JJbkZsb3dDb250ZW50KGNlbGxCb3gpOworICAgICAgICBhdXRvIGNvbnN0cmFpbnRzRm9yQ2Vs
bENvbnRlbnQgPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50
KGNlbGxCb3gpOwogICAgICAgICBjb25zdHJhaW50c0ZvckNlbGxDb250ZW50LnZlcnRpY2FsLmxv
Z2ljYWxIZWlnaHQgPSBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlRm9yQ29udGVudDsKICAgICAgICAg
YXV0byBpbnZhbGlkYXRpb25TdGF0ZSA9IEludmFsaWRhdGlvblN0YXRlIHsgfTsKICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHBhcnQgb2YgdGhlIGludmFsaWRhdGlv
biBzdGF0ZSB0byBpbmRpY2F0ZSB3aGVuIHdlIHJlLWxheW91dCB0aGUgY2VsbApAQCAtMzEyLDgg
KzMxMiw4IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Q2VsbChjb25zdCBU
YWJsZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91dFVuaXQKICAgICAgICAgZmxvYXRpbmdTdGF0ZUZv
ckNlbGxDb250ZW50LmNsZWFyKCk7CiAgICAgICAgIExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1h
dHRpbmdDb250ZXh0KGNlbGxCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRJbkZsb3dDb250ZW50
KGludmFsaWRhdGlvblN0YXRlLCBjb25zdHJhaW50c0ZvckNlbGxDb250ZW50KTsKICAgICB9Ci0g
ICAgYXV0byBjb250ZW50Qm94SGVpZ2h0ID0gZ2VvbWV0cnkuY2VsbEJveENvbnRlbnRIZWlnaHQo
Y2VsbEJveCk7Ci0gICAgaWYgKGF1dG8gY29tcHV0ZWRIZWlnaHQgPSBnZW9tZXRyeS5jb21wdXRl
ZEhlaWdodChjZWxsQm94KSkgeworICAgIGF1dG8gY29udGVudEJveEhlaWdodCA9IGZvcm1hdHRp
bmdHZW9tZXRyeS5jZWxsQm94Q29udGVudEhlaWdodChjZWxsQm94KTsKKyAgICBpZiAoYXV0byBj
b21wdXRlZEhlaWdodCA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZEhlaWdodChjZWxsQm94
KSkgewogICAgICAgICBhdXRvIGhlaWdodFVzZXNCb3JkZXJCb3ggPSBsYXlvdXRTdGF0ZSgpLmlu
UXVpcmtzTW9kZSgpIHx8IGNlbGxCb3guc3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6
OkJvcmRlckJveDsKICAgICAgICAgaWYgKGhlaWdodFVzZXNCb3JkZXJCb3gpCiAgICAgICAgICAg
ICAqY29tcHV0ZWRIZWlnaHQgLT0gY2VsbEJveEdlb21ldHJ5LnZlcnRpY2FsTWFyZ2luQm9yZGVy
QW5kUGFkZGluZygpOwpAQCAtNDA3LDcgKzQwNyw3IEBAIEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRQcmVmZXJyZWRXaWR0aEZvckNvbHVt
CiAKICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aCA9IGZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNlbGxCb3gpOwogICAgICAgICBpZiAoIWludHJpbnNp
Y1dpZHRoKSB7Ci0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IGdlb21ldHJ5KCkuaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoKmNlbGwpOworICAgICAgICAgICAgaW50cmluc2lj
V2lkdGggPSB0YWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHNGb3JDZWxsKCpjZWxsKTsKICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNlbGxCb3gsICppbnRyaW5zaWNXaWR0aCk7CiAgICAg
ICAgIH0KICAgICAgICAgLy8gU3Bhbm5lciBjZWxscyBwdXQgdGhlaXIgaW50cmluc2ljIHdpZHRo
cyBvbiB0aGUgaW5pdGlhbCBzbG90cy4KQEAgLTQyNiw3ICs0MjYsNyBAQCBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlZmVycmVkV2lk
dGhGb3JDb2x1bQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBj
b2x1bW5Cb3gtPmNvbHVtbldpZHRoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwot
ICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuY29tcHV0ZWRDb2x1bW5XaWR0aCgqY29sdW1u
Qm94KTsKKyAgICAgICAgICAgIHJldHVybiB0YWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1
dGVkQ29sdW1uV2lkdGgoKmNvbHVtbkJveCk7CiAgICAgICAgIH07CiAgICAgICAgIGZpeGVkV2lk
dGhDb2x1bW5zLmFwcGVuZChmaXhlZFdpZHRoKCkpOwogICAgIH0KQEAgLTUxOCw3ICs1MTgsNyBA
QCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFT
cGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZQogICAgICAgICAgICAgLy8gVGhlIG1pbmltdW0gaGVp
Z2h0IG9mIGEgcm93ICh3aXRob3V0IHNwYW5uaW5nLXJlbGF0ZWQgaGVpZ2h0IGRpc3RyaWJ1dGlv
bikgaXMgZGVmaW5lZCBhcyB0aGUgaGVpZ2h0IG9mIGFuIGh5cG90aGV0aWNhbAogICAgICAgICAg
ICAgLy8gbGluZWJveCBjb250YWluaW5nIHRoZSBjZWxscyBvcmlnaW5hdGluZyBpbiB0aGUgcm93
LgogICAgICAgICAgICAgYXV0byYgY2VsbCA9IHNsb3QuY2VsbCgpOwotICAgICAgICAgICAgY2Vs
bC5zZXRCYXNlbGluZShnZW9tZXRyeSgpLnVzZWRCYXNlbGluZUZvckNlbGwoY2VsbC5ib3goKSkp
OworICAgICAgICAgICAgY2VsbC5zZXRCYXNlbGluZSh0YWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgp
LnVzZWRCYXNlbGluZUZvckNlbGwoY2VsbC5ib3goKSkpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC01MzMsNyArNTMzLDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQW5k
RGlzdHJpYnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFibGUKICAgICB9CiB9CiAKLVRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkg
Y29uc3QKK1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gVGFibGVGb3JtYXR0
aW5nR2VvbWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUv
VGFibGVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggYjA4YTg3N2Ex
ZDBiOGQ2YWU2NWVkMjNlMWQ5NjZlYzkxYTE5YmZhNS4uZTY4YzJjMzcxY2RkZjg2N2U3MTFiNGYw
NjMzNTJkYzQwMjlmY2MwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdD
b250ZXh0LmgKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIGNvbXB1dGVkUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCk7CiAgICAgdm9pZCBj
b21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFibGVIb3Jpem9u
dGFsU3BhY2UsIE9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UpOwog
Ci0gICAgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdDsKKyAgICBUYWJs
ZUZvcm1hdHRpbmdHZW9tZXRyeSB0YWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0OwogICAg
IGNvbnN0IFRhYmxlRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZv
cm1hdHRpbmdTdGF0ZSgpKTsgfQogICAgIFRhYmxlRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5n
U3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGlu
Z0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVMYXlvdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUxheW91
dC5jcHAKaW5kZXggNmYzNTgyMGI2ZmRjOWZhMjc5OWM1YzE1NmU1NzJiYTgyYTk4YjQzOC4uZDIx
NmNlNWNlYzYzZTRmMjIzOWNmNWU4MTJhMTM0Y2NjYTJmZmYyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUxheW91dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJs
ZUxheW91dC5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpU
YWJsZUxheW91dDo6RGlzdHJpYnV0ZWRTcGFjZXMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6VAog
ICAgICAgICBhdXRvIG1heGltdW1Db2x1bW5Bc2NlbnQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
ICAgICAgICAgYXV0byBtYXhpbXVtQ29sdW1uRGVzY2VudCA9IElubGluZUxheW91dFVuaXQgeyB9
OwogICAgICAgICAvLyBJbml0aWFsIG1pbmltdW0gaGVpZ2h0IGlzIHRoZSBjb21wdXRlZCBoZWln
aHQgaWYgYXZhaWxhYmxlIDx0ciBzdHlsZT0iaGVpZ2h0OiAxMDBweCI+PHRkPjwvdGQ+PC90cj4K
LSAgICAgICAgcm93SGVpZ2h0W3Jvd0luZGV4XSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnkoKS5jb21wdXRlZEhlaWdodChyb3dzLmxpc3QoKVtyb3dJbmRleF0uYm94KCksIGF2YWlsYWJs
ZVZlcnRpY2FsU3BhY2UpLnZhbHVlT3IoMF9sdSk7CisgICAgICAgIHJvd0hlaWdodFtyb3dJbmRl
eF0gPSBmb3JtYXR0aW5nQ29udGV4dCgpLnRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0
ZWRIZWlnaHQocm93cy5saXN0KClbcm93SW5kZXhdLmJveCgpLCBhdmFpbGFibGVWZXJ0aWNhbFNw
YWNlKS52YWx1ZU9yKDBfbHUpOwogICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7
IGNvbHVtbkluZGV4IDwgY29sdW1ucy5zaXplKCk7ICsrY29sdW1uSW5kZXgpIHsKICAgICAgICAg
ICAgIGF1dG8mIHNsb3QgPSAqbV9ncmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7
CiAgICAgICAgICAgICBpZiAoc2xvdC5pc1Jvd1NwYW5uZWQoKSkKQEAgLTMwMSw3ICszMDEsNyBA
QCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpUYWJsZUxheW91dDo6RGlzdHJpYnV0ZWRTcGFjZXMg
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6VAogICAgICAgICBpZiAoc2xvdC5oYXNSb3dTcGFuKCkp
CiAgICAgICAgICAgICByZXR1cm4gR3JpZFNwYWNlIHsgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveChzbG90LmNlbGwoKS5ib3goKSkuYm9yZGVyQm94SGVpZ2h0KCksIGZvcm1hdHRp
bmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goc2xvdC5jZWxsKCkuYm94KCkpLmJvcmRlckJveEhl
aWdodCgpIH07CiAgICAgICAgIGF1dG8mIHJvd3MgPSBtX2dyaWQucm93cygpOwotICAgICAgICBh
dXRvIGNvbXB1dGVkUm93SGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpLmNv
bXB1dGVkSGVpZ2h0KHJvd3MubGlzdCgpW3Jvd0luZGV4XS5ib3goKSwgeyB9KTsKKyAgICAgICAg
YXV0byBjb21wdXRlZFJvd0hlaWdodCA9IGZvcm1hdHRpbmdDb250ZXh0KCkudGFibGVGb3JtYXR0
aW5nR2VvbWV0cnkoKS5jb21wdXRlZEhlaWdodChyb3dzLmxpc3QoKVtyb3dJbmRleF0uYm94KCks
IHsgfSk7CiAgICAgICAgIGF1dG8gaGVpZ2h0ID0gc3RkOjptYXg8ZmxvYXQ+KHJvd0hlaWdodFty
b3dJbmRleF0sIGNvbXB1dGVkUm93SGVpZ2h0LnZhbHVlT3IoMF9sdSkpOwogICAgICAgICByZXR1
cm4gR3JpZFNwYWNlIHsgaGVpZ2h0LCBoZWlnaHQgfTsKICAgICB9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429545</attachid>
            <date>2021-05-24 10:24:26 -0700</date>
            <delta_ts>2021-05-24 12:26:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226153-20210524102426.patch</filename>
            <type>text/plain</type>
            <size>56531</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk0NDgxMGU3NGU3MjAw
NzBkODczYjliOGNiNmQ0YWU3ODQzZTRkOC4uOGY1YzVmZTExMzJmM2I5ODZhNzQ3YTQxNmY3NjY1
ODNjOGZhYTA1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTA1LTI0ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBSZW5hbWUgdGhlIGdl
b21ldHJ5KCkgaGVscGVycyB0byBmb3JtYXR0aW5nR2VvbWV0cnkoKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTUzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxv
d1ZlcnRpY2FsR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93Q29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nR2VvbWV0cnkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Z2Vv
bWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdRdWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nUXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhl
ZEhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9j
ay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRp
b25lZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNlc3RvcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lk
dGhBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ0dlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5o
OgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVy
L1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRUYWJs
ZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nRm9yVGFibGVCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlV2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRN
YXJnaW5Gb3JUYWJsZUJveCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9m
bGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2lj
V2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ0dlb21ldHJ5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0Zs
ZXhGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9y
Rm9ybWF0dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ0dlb21l
dHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6Omdlb21ldHJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNl
dFVzZWRHZW9tZXRyeUZvclJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXRDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
YWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nR2VvbWV0cnkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9U
YWJsZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy90YWJsZS9UYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlTGF5b3V0OjpkaXN0cmlidXRlZFZlcnRpY2FsU3Bh
Y2UpOgorCiAyMDIxLTA1LTI0ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbTEZDXSBGb3JtYXR0aW5nR2VvbWV0cnkgZnVuY3Rpb25zIHNob3VsZCBhbGwgYmUgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMDE4MTgyZjI4YWViZjZiZmQ0ODg1
N2UxZDNhZDEyMzU3YzI2YWU1OC4uNTQ3N2JkYTY0MGRmYjUwMDI5MzAxZjM4NjViOTRhYTVjYTAz
NmVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTc1LDE4ICs3NSwxOCBAQCB2
b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5
KGNvbnN0IEJveCYgbGF5b3V0Qm94LAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpOwogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRV
bml0PiB1c2VkV2lkdGgpIHsKLSAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkub3V0T2ZGbG93SG9y
aXpvbnRhbEdlb21ldHJ5KGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgY29uc3Ry
YWludHMudmVydGljYWwsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisgICAgICAgIHJldHVybiBmb3Jt
YXR0aW5nR2VvbWV0cnkoKS5vdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkobGF5b3V0Qm94LCBj
b25zdHJhaW50cy5ob3Jpem9udGFsLCBjb25zdHJhaW50cy52ZXJ0aWNhbCwgeyB1c2VkV2lkdGgs
IHsgfSB9KTsKICAgICB9OwogCiAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnN0
cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoOwogICAgIGF1dG8gaG9yaXpvbnRhbEdlb21l
dHJ5ID0gY29tcHV0ZSh7IH0pOwotICAgIGlmIChhdXRvIG1heFdpZHRoID0gZ2VvbWV0cnkoKS5j
b21wdXRlZE1heFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CisgICAg
aWYgKGF1dG8gbWF4V2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1heFdpZHRo
KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CiAgICAgICAgIGF1dG8gbWF4SG9y
aXpvbnRhbEdlb21ldHJ5ID0gY29tcHV0ZShtYXhXaWR0aCk7CiAgICAgICAgIGlmIChob3Jpem9u
dGFsR2VvbWV0cnkuY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA+IG1heEhvcml6
b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQogICAgICAg
ICAgICAgaG9yaXpvbnRhbEdlb21ldHJ5ID0gbWF4SG9yaXpvbnRhbEdlb21ldHJ5OwogICAgIH0K
IAotICAgIGlmIChhdXRvIG1pbldpZHRoID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxh
eW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CisgICAgaWYgKGF1dG8gbWluV2lkdGgg
PSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxheW91dEJveCwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpKSB7CiAgICAgICAgIGF1dG8gbWluSG9yaXpvbnRhbEdlb21ldHJ5ID0g
Y29tcHV0ZShtaW5XaWR0aCk7CiAgICAgICAgIGlmIChob3Jpem9udGFsR2VvbWV0cnkuY29udGVu
dFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbkhvcml6b250YWxHZW9tZXRyeS5jb250
ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQogICAgICAgICAgICAgaG9yaXpvbnRhbEdl
b21ldHJ5ID0gbWluSG9yaXpvbnRhbEdlb21ldHJ5OwpAQCAtMTAzLDE4ICsxMDMsMTggQEAgdm9p
ZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29u
c3QgQm94JiBsYXlvdXRCb3gsIGMKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKTsKICAgICBhdXRvIGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5p
dD4gdXNlZEhlaWdodCkgewotICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5vdXRPZkZsb3dWZXJ0
aWNhbEdlb21ldHJ5KGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgY29uc3RyYWlu
dHMudmVydGljYWwsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdH
ZW9tZXRyeSgpLm91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkobGF5b3V0Qm94LCBjb25zdHJhaW50
cy5ob3Jpem9udGFsLCBjb25zdHJhaW50cy52ZXJ0aWNhbCwgeyB1c2VkSGVpZ2h0IH0pOwogICAg
IH07CiAKICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9ICpjb25zdHJhaW50cy52ZXJ0
aWNhbC5sb2dpY2FsSGVpZ2h0OwogICAgIGF1dG8gdmVydGljYWxHZW9tZXRyeSA9IGNvbXB1dGUo
eyB9KTsKLSAgICBpZiAoYXV0byBtYXhIZWlnaHQgPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVp
Z2h0KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSkgeworICAgIGlmIChhdXRvIG1h
eEhlaWdodCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVpZ2h0KGxheW91dEJv
eCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSkgewogICAgICAgICBhdXRvIG1heFZlcnRpY2FsR2Vv
bWV0cnkgPSBjb21wdXRlKG1heEhlaWdodCk7CiAgICAgICAgIGlmICh2ZXJ0aWNhbEdlb21ldHJ5
LmNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA+IG1heFZlcnRpY2FsR2VvbWV0
cnkuY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KQogICAgICAgICAgICAgdmVy
dGljYWxHZW9tZXRyeSA9IG1heFZlcnRpY2FsR2VvbWV0cnk7CiAgICAgfQogCi0gICAgaWYgKGF1
dG8gbWluSGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gsIGNv
bnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKKyAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBmb3JtYXR0
aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9j
a0hlaWdodCkpIHsKICAgICAgICAgYXV0byBtaW5WZXJ0aWNhbEdlb21ldHJ5ID0gY29tcHV0ZSht
aW5IZWlnaHQpOwogICAgICAgICBpZiAodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5k
TWFyZ2luLmNvbnRlbnRIZWlnaHQgPCBtaW5WZXJ0aWNhbEdlb21ldHJ5LmNvbnRlbnRIZWlnaHRB
bmRNYXJnaW4uY29udGVudEhlaWdodCkKICAgICAgICAgICAgIHZlcnRpY2FsR2VvbWV0cnkgPSBt
aW5WZXJ0aWNhbEdlb21ldHJ5OwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhj
b25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludCkKIHsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7Ci0gICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKGdl
b21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGF5b3V0Qm94KSk7Ci0gICAgYm94R2VvbWV0cnkuc2V0
UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50LmxvZ2ljYWxXaWR0aCkpOworICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcihmb3Jt
YXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKKyAgICBib3hHZW9t
ZXRyeS5zZXRQYWRkaW5nKGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlv
dXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50LmxvZ2ljYWxXaWR0aCkpOwogfQogCiB2b2lkIEZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRl
JiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50
JiBjb25zdHJhaW50cykKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25T
dAogCiAgICAgYXV0byBjb25zdHJhaW50c0ZvckxheW91dEJveCA9IFsmXSAoY29uc3QgYXV0byYg
b3V0T2ZGbG93Qm94KSB7CiAgICAgICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9IG91dE9mRmxv
d0JveC5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgcmV0dXJuICZjb250YWluaW5nQmxvY2sg
PT0gJnJvb3QoKSA/IGNvbnN0cmFpbnRzIDogZ2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvck91dE9m
Rmxvd0NvbnRlbnQoY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgcmV0dXJuICZjb250YWluaW5n
QmxvY2sgPT0gJnJvb3QoKSA/IGNvbnN0cmFpbnRzIDogZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29u
c3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgfTsKIAog
ICAgIGZvciAoYXV0byYgb3V0T2ZGbG93Qm94IDogZm9ybWF0dGluZ1N0YXRlKCkub3V0T2ZGbG93
Qm94ZXMoKSkgewpAQCAtMTYxLDkgKzE2MSw5IEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dE91dE9mRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvblN0CiAg
ICAgICAgICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KCpv
dXRPZkZsb3dCb3gpOwogICAgICAgICAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IExheW91
dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5b3V0U3Rh
dGUoKSk7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVyQm94Lmhhc0luRmxvd09yRmxvYXRpbmdD
aGlsZCgpKQotICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJbkZsb3dD
b250ZW50KGludmFsaWRhdGlvblN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudChjb250YWluZXJCb3gpKTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4
dC0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZm9ybWF0dGluZ0dlb21l
dHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5lckJveCkpOwogICAgICAg
ICAgICAgY29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29udGFpbmVyQm94LCBjb250
YWluaW5nQmxvY2tDb25zdHJhaW50cyk7Ci0gICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+
bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZ2VvbWV0cnkoKS5jb25z
dHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7CisgICAgICAgICAgICBm
b3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0
ZSwgZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNv
bnRhaW5lckJveCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNvbXB1dGVPdXRPZkZs
b3dWZXJ0aWNhbEdlb21ldHJ5KCpvdXRPZkZsb3dCb3gsIGNvbnRhaW5pbmdCbG9ja0NvbnN0cmFp
bnRzKTsKICAgICB9CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6
Y29sbGVjdE91dE9mRmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKQogICAgIH0KIH0KIAotRm9ybWF0
dGluZ0dlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSgpIGNvbnN0CitGb3JtYXR0
aW5nR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEZvcm1hdHRpbmdHZW9tZXRyeSgqdGhpcyk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRp
bmdDb250ZXh0LmgKaW5kZXggZTMyMzkwZGVlOTNiZGMyNDM1OTRmZDA2YTc1MjJhMTdjZDc1OTYx
Yy4uNzM0NDM4MGU5MzY5MWViOTQxOGI3NzUzMTllYzFmM2FkNGEwZmJhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ0NvbnRleHQuaApAQCAtOTEsNyArOTEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1c2luZyBM
YXlvdXRRdWV1ZSA9IFZlY3Rvcjxjb25zdCBCb3gqPjsKIHByaXZhdGU6Ci0gICAgRm9ybWF0dGlu
Z0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7CisgICAgRm9ybWF0dGluZ0dlb21ldHJ5IGZvcm1h
dHRpbmdHZW9tZXRyeSgpIGNvbnN0OwogICAgIEZvcm1hdHRpbmdRdWlya3MgcXVpcmtzKCkgY29u
c3Q7CiAKICAgICB2b2lkIGNvbGxlY3RPdXRPZkZsb3dEZXNjZW5kYW50c0lmTmVlZGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAppbmRleCBjMzAxYjFhOTMzNWFmNDUxNjY3MDk2N2E4OGYw
Y2VhYzEwYmJhODE2Li41YzA3ZDg2ZjY5YzJmNTdhNDBjMDcxNmNhNWM0ZGQ0MDFkNDVmZmQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgTGF5b3V0VW5pdCBG
b3JtYXR0aW5nUXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhG
aXhlZEhlaWdodCgKICAgICAgICAgLy8gLWFuZCBpdCdzIHRvdGFsbHkgaW5zYW5lIGJlY2F1c2Ug
bm93IHdlIGZyZWVseSB0cmF2ZWwgYWNyb3NzIGZvcm1hdHRpbmcgY29udGV4dCBib3VuZGFyaWVz
IGFuZCBjb21wdXRlZCBtYXJnaW5zIGFyZSBub25leGlzdGVudC4KICAgICAgICAgaWYgKGNvbnRh
aW5pbmdCbG9jay0+aXNCb2R5Qm94KCkgfHwgY29udGFpbmluZ0Jsb2NrLT5pc0RvY3VtZW50Qm94
KCkpIHsKIAotICAgICAgICAgICAgYXV0byBnZW9tZXRyeSA9IEZvcm1hdHRpbmdHZW9tZXRyeSB7
IGZvcm1hdHRpbmdDb250ZXh0IH07Ci0gICAgICAgICAgICBhdXRvIGhvcml6b250YWxDb25zdHJh
aW50cyA9IGdlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxv
Y2stPmNvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpG
aW5kRml4ZWRIZWlnaHRBbmNlc3RvclF1aXJrKS5ob3Jpem9udGFsOwotICAgICAgICAgICAgYXV0
byB2ZXJ0aWNhbE1hcmdpbiA9IGdlb21ldHJ5LmNvbXB1dGVkVmVydGljYWxNYXJnaW4oKmNvbnRh
aW5pbmdCbG9jaywgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgIGF1dG8gZm9y
bWF0dGluZ0dlb21ldHJ5ID0gRm9ybWF0dGluZ0dlb21ldHJ5IHsgZm9ybWF0dGluZ0NvbnRleHQg
fTsKKyAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ0dl
b21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpGaW5kRml4ZWRI
ZWlnaHRBbmNlc3RvclF1aXJrKS5ob3Jpem9udGFsOworICAgICAgICAgICAgYXV0byB2ZXJ0aWNh
bE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKCpjb250
YWluaW5nQmxvY2ssIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAKICAgICAgICAgICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmNvbnRhaW5p
bmdCbG9jaywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6RmluZEZpeGVkSGVpZ2h0
QW5jZXN0b3JRdWlyayk7CiAgICAgICAgICAgICBhdXRvIHZlcnRpY2FsUGFkZGluZyA9IGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgYm94R2VvbWV0cnkucGFkZGluZ0JvdHRv
bSgpLnZhbHVlT3IoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0LmNwcAppbmRleCBmZjVjNTAzZjRkMDUxY2M1ODdlM2MwM2NhY2Q0YTMzYzBmNmJlZThlLi5m
M2ZhZjc3MDg1M2Y2ZDliMDc3MDlhNTQ3NzgzNDdjZDhhNzMyOWVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9p
ZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlv
blN0YXRlJiBpbnZhbGlkYXRpb24KIAogICAgIGF1dG8gY29uc3RyYWludHNGb3JMYXlvdXRCb3gg
PSBbJl0gKGNvbnN0IGF1dG8mIGxheW91dEJveCkgewogICAgICAgICBhdXRvJiBjb250YWluaW5n
QmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgIHJldHVybiAmY29u
dGFpbmluZ0Jsb2NrID09ICZmb3JtYXR0aW5nUm9vdCA/IGNvbnN0cmFpbnRzIDogZ2VvbWV0cnko
KS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAg
cmV0dXJuICZjb250YWluaW5nQmxvY2sgPT0gJmZvcm1hdHRpbmdSb290ID8gY29uc3RyYWludHMg
OiBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChj
b250YWluaW5nQmxvY2spOwogICAgIH07CiAKICAgICAvLyBUaGlzIGlzIGEgcG9zdC1vcmRlciB0
cmVlIHRyYXZlcnNhbCBsYXlvdXQuCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZh
bGlkYXRpb24KICAgICAgICAgICAgICAgICAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IExh
eW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5b3V0
U3RhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJCb3guaXNUYWJsZVdy
YXBwZXJCb3goKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFRhYmxlV3JhcHBl
ckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ+KCpmb3JtYXR0aW5nQ29udGV4dCkuc2V0SG9yaXpvbnRh
bENvbnN0cmFpbnRzSWdub3JpbmdGbG9hdHMoY29udGFpbmluZ0Jsb2NrQ29uc3RyYWludHMuaG9y
aXpvbnRhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJ
bkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudChjb250YWluZXJCb3gpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0
dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5l
ckJveCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvbgogICAg
ICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGNvbXB1dGVkIHRoZSBib3gncyBoZWlnaHQsIHdl
IGNhbiBsYXlvdXQgdGhlIG91dC1vZi1mbG93IGRlc2NlbmRhbnRzLgogICAgICAgICAgICAgICAg
IGlmIChpczxDb250YWluZXJCb3g+KGxheW91dEJveCkgJiYgZG93bmNhc3Q8Q29udGFpbmVyQm94
PihsYXlvdXRCb3gpLmhhc0NoaWxkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byYgY29u
dGFpbmVyQm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOwotICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChjb250YWlu
ZXJCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRPdXRPZkZsb3dDb250ZW50KGludmFsaWRhdGlv
blN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChjb250YWlu
ZXJCb3gpKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0
dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBsYXlvdXRTdGF0ZSgpKS0+bGF5b3V0T3V0T2ZGbG93
Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25z
dHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFlc3RhYmxpc2hlc0Zvcm1hdHRp
bmdDb250ZXh0ICYmIGlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSkKQEAgLTI1OCw3ICsyNTgs
NyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENo
aWxkcmVuKGNvbnN0IENvbnRhaW5lckJveCYgYwogICAgIGZvciAoYXV0byYgY2hpbGRCb3ggOiBj
aGlsZHJlbk9mVHlwZTxCb3g+KGNvbnRhaW5lckJveCkpIHsKICAgICAgICAgaWYgKCFjaGlsZEJv
eC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBh
dXRvIHBvc2l0aW9uT2Zmc2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25P
ZmZzZXQoY2hpbGRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgIGF1dG8gcG9z
aXRpb25PZmZzZXQgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmluRmxvd1Bvc2l0aW9uZWRQ
b3NpdGlvbk9mZnNldChjaGlsZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKICAgICAgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoY2hpbGRCb3gpLm1vdmUocG9zaXRpb25PZmZz
ZXQpOwogICAgIH0KICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQs
IHN0cmVhbSA8PCAiRW5kOiBtb3ZlIGluLWZsb3cgcG9zaXRpb25lZCBjaGlsZHJlbiAtPiBwYXJl
bnQ6ICIgPDwgJmNvbnRhaW5lckJveCk7CkBAIC0yNjYsMTIgKzI2NiwxMiBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IENv
bnRhaW5lckJveCYgYwogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0
aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKQogewotICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0TG9naWNhbFRvcChnZW9tZXRyeSgpLnN0YXRpY1Zl
cnRpY2FsUG9zaXRpb24obGF5b3V0Qm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKSk7CisgICAgZm9y
bWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KS5zZXRMb2dpY2FsVG9wKGJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5KCkuc3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZl
cnRpY2FsQ29uc3RyYWludHMpKTsKIH0KIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlU3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKIHsKLSAgICBm
b3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldExvZ2ljYWxMZWZ0KGdl
b21ldHJ5KCkuc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKSk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94
KS5zZXRMb2dpY2FsTGVmdChibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLnN0YXRpY0hvcml6b250
YWxQb3NpdGlvbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cykpOwogfQogCiB2b2lk
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94
QW5kQW5jZXN0b3JzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBDb25zdHJhaW50c1BhaXIm
IGNvbnN0cmFpbnRzUGFpcikKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94QW5kQW5jZXN0b3JzKGNv
bnN0CiAgICAgLy8KICAgICAvLyBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgYXMgbG9uZyBhcyB3ZSBk
b24ndCBjcm9zcyB0aGUgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGJvdW5kYXJ5LCB3ZSBzaG91
bGQgYmUgYWJsZSB0byBwcmUtY29tcHV0ZSB0aGUgZmluYWwgdG9wIHBvc2l0aW9uLgogICAgIC8v
IEZJWE1FOiB3ZSBjdXJyZW50bHkgZG9uJ3QgYWNjb3VudCBmb3IgdGhlICJjbGVhciIgcHJvcGVy
dHkgd2hlbiBjb21wdXRpbmcgdGhlIGZpbmFsIHBvc2l0aW9uIGZvciBhbiBhbmNlc3Rvci4KLSAg
ICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGdlb21ldHJ5KCk7CisgICAgYXV0byBmb3JtYXR0
aW5nR2VvbWV0cnkgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpOwogICAgIGZvciAoYXV0byog
YW5jZXN0b3IgPSAmbGF5b3V0Qm94OyBhbmNlc3RvciAmJiBhbmNlc3RvciAhPSAmcm9vdCgpOyBh
bmNlc3RvciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgYXV0byBj
b25zdHJhaW50c0ZvckFuY2VzdG9yID0gWyZdIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5p
bmdCbG9jayA9IGFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKTsKQEAgLTM2MCw3ICszNjAsNyBA
QCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25z
dCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aQogICAgICAgICAvLyBGbG9hdCBhdm9pZGVycycgYXZh
aWxhYmxlIHdpZHRoIG1pZ2h0IGJlIHNocnVuayBieSBleGlzdGluZyBmbG9hdHMgaW4gdGhlIGNv
bnRleHQuCiAgICAgICAgIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyID0gdXNlZEF2YWlsYWJs
ZVdpZHRoRm9yRmxvYXRBdm9pZGVyKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94LCBjb25zdHJh
aW50c1BhaXIpOwogICAgIH0KLSAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGdlb21l
dHJ5KCkuY29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJhaW50
c1BhaXIuY29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwsIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9p
ZGVyKTsKKyAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5KCkuY29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJh
aW50c1BhaXIuY29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwsIGF2YWlsYWJsZVdpZHRoRmxvYXRB
dm9pZGVyKTsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdl
b21ldHJ5KGxheW91dEJveCk7CiAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGNv
bnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOwogICAgIGJveEdlb21ldHJ5LnNldEhv
cml6b250YWxNYXJnaW4oeyBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwg
Y29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIH0pOwpAQCAtMzcwLDE3ICszNzAs
MTcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogewogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShP
cHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IHsKICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvdygpKQotICAgICAgICAgICAgcmV0dXJu
IGdlb21ldHJ5KCkuaW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0
cmFpbnRzLmhvcml6b250YWwsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgICAgIHJldHVybiBi
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5
b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IHVzZWRIZWlnaHQgfSk7CiAKICAgICAg
ICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwg
Y29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0pOworICAgICAgICAgICAgcmV0
dXJuIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0pOwog
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH07CiAKICAgICBhdXRvIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7Ci0g
ICAgaWYgKGF1dG8gbWF4SGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlv
dXRCb3gpKSB7CisgICAgaWYgKGF1dG8gbWF4SGVpZ2h0ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0
cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChjb250ZW50
SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPiAqbWF4SGVpZ2h0KSB7CiAgICAgICAgICAg
ICBhdXRvIG1heEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWF4SGVpZ2h0KTsKICAgICAgICAg
ICAgIC8vIFVzZWQgaGVpZ2h0IHNob3VsZCByZW1haW4gdGhlIHNhbWUuCkBAIC0zODksNyArMzg5
LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KGF1dG8gbWluSGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gp
KSB7CisgICAgaWYgKGF1dG8gbWluSGVpZ2h0ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChjb250ZW50SGVpZ2h0
QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPCAqbWluSGVpZ2h0KSB7CiAgICAgICAgICAgICBhdXRv
IG1pbkhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWluSGVpZ2h0KTsKICAgICAgICAgICAgIC8v
IFVzZWQgaGVpZ2h0IHNob3VsZCByZW1haW4gdGhlIHNhbWUuCkBAIC00NzgsNyArNDc4LDcgQEAg
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZEludHJpbnNpY1dpZHRoQ29uc3RyYWkKICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9ICpx
dWV1ZS50YWtlTGFzdCgpOwogICAgICAgICAgICAgYXV0byBkZXNkZW5kYW50Q29uc3RyYWludHMg
PSBmb3JtYXR0aW5nU3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChsYXlvdXRC
b3gpOwogICAgICAgICAgICAgaWYgKCFkZXNkZW5kYW50Q29uc3RyYWludHMpIHsKLSAgICAgICAg
ICAgICAgICBkZXNkZW5kYW50Q29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMobGF5b3V0Qm94KTsKKyAgICAgICAgICAgICAgICBkZXNkZW5kYW50Q29uc3Ry
YWludHMgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMobGF5b3V0Qm94KTsKICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuc2V0SW50cmlu
c2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChsYXlvdXRCb3gsICpkZXNkZW5kYW50Q29uc3RyYWlu
dHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29uc3RyYWludHMubWluaW11bSA9IHN0
ZDo6bWF4KGNvbnN0cmFpbnRzLm1pbmltdW0sIGRlc2RlbmRhbnRDb25zdHJhaW50cy0+bWluaW11
bSk7CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp1cGRh
dGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZyhjb25zdCBCb3gmIGxheW8KICAgICB9CiB9
CiAKLUJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21l
dHJ5KCkgY29uc3QKK0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OmJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gQmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnkgeyAqdGhpcyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAzY2E5MDc1Yjk0MmQwZGE3Nzc4YTI3NjFiMjk2YTg0
MzQwNDE4ODkzLi43NzE5ZTQ1MTAwZWMzYzNmNjg2M2ZjNWQ2OWYwMzMxOTQ2MDFkZGRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtODAsNyArODAs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2li
bGluZyhjb25zdCBCb3gmKTsKIAogICAgIEJsb2NrRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5n
U3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGlu
Z0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQotICAgIEJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5IGdlb21ldHJ5KCkgY29uc3Q7CisgICAgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgYmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdDsKICAgICBCbG9ja01hcmdpbkNvbGxhcHNlIG1hcmdp
bkNvbGxhcHNlKCkgY29uc3Q7CiAKICNpZiBBU1NFUlRfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIv
VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA5YzY5YmIwNmEzM2E3MTg3M2Y0MzIyOGMz
NTNlYjE4ZWMxYmZlZWYyLi44ODg2ZWExYTRmMzM0OTljNDNjNzFlNjU2ZTc2YzYwYjUxZGU4NTA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxl
d3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNzgsNyAr
NzgsNyBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dFRh
YmxlQm94KGNvbnN0IENvbnRhaW5lckJveCYgdGFibAogCiAgICAgaWYgKHRhYmxlQm94Lmhhc0No
aWxkKCkpIHsKICAgICAgICAgYXV0byBpbnZhbGlkYXRpb25TdGF0ZSA9IEludmFsaWRhdGlvblN0
YXRlIHsgfTsKLSAgICAgICAgTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
dGFibGVCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlv
blN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCh0YWJsZUJveCkp
OworICAgICAgICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dCh0YWJsZUJv
eCwgbGF5b3V0U3RhdGUoKSktPmxheW91dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUs
IGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KHRh
YmxlQm94KSk7CiAgICAgfQogCiAgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRhYmxlQm94
KHRhYmxlQm94LCBjb25zdHJhaW50cyk7CkBAIC0xMDAsMTMgKzEwMCwxMyBAQCB2b2lkIFRhYmxl
V3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nRm9y
VGFibGVCb3goY29ucwogICAgIC8vIG1heGltdW0gY29sbGFwc2VkIHRvcCBib3JkZXIuIFRoZSBi
b3R0b20gYm9yZGVyIHdpZHRoIGlzIGNvbXB1dGVkIGJ5IGV4YW1pbmluZyBhbGwgY2VsbHMgd2hv
c2UgYm90dG9tIGJvcmRlcnMgY29sbGFwc2UKICAgICAvLyB3aXRoIHRoZSBib3R0b20gb2YgdGhl
IHRhYmxlLiBUaGUgYm90dG9tIGJvcmRlciB3aWR0aCBpcyBlcXVhbCB0byBoYWxmIG9mIHRoZSBt
YXhpbXVtIGNvbGxhcHNlZCBib3R0b20gYm9yZGVyLgogICAgIGF1dG8mIGdyaWQgPSBsYXlvdXRT
dGF0ZSgpLmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3RhdGUodGFibGVCb3gpLnRhYmxlR3Jp
ZCgpOwotICAgIGF1dG8gdGFibGVCb3JkZXIgPSBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHRh
YmxlQm94KTsKKyAgICBhdXRvIHRhYmxlQm9yZGVyID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnko
KS5jb21wdXRlZEJvcmRlcih0YWJsZUJveCk7CiAKICAgICBhdXRvJiBmaXJzdENvbHVtbkZpcnN0
Um93Qm94ID0gZ3JpZC5zbG90KHsgMCAsIDAgfSktPmNlbGwoKS5ib3goKTsKLSAgICBhdXRvIGxl
ZnRCb3JkZXIgPSBzdGQ6Om1heCh0YWJsZUJvcmRlci5ob3Jpem9udGFsLmxlZnQsIGdlb21ldHJ5
KCkuY29tcHV0ZWRCb3JkZXIoZmlyc3RDb2x1bW5GaXJzdFJvd0JveCkuaG9yaXpvbnRhbC5sZWZ0
KTsKKyAgICBhdXRvIGxlZnRCb3JkZXIgPSBzdGQ6Om1heCh0YWJsZUJvcmRlci5ob3Jpem9udGFs
LmxlZnQsIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoZmlyc3RDb2x1
bW5GaXJzdFJvd0JveCkuaG9yaXpvbnRhbC5sZWZ0KTsKIAogICAgIGF1dG8mIGxhc3RDb2x1bW5G
aXJzdFJvdyA9IGdyaWQuc2xvdCh7IGdyaWQuY29sdW1ucygpLnNpemUoKSAtIDEsIDAgfSktPmNl
bGwoKS5ib3goKTsKLSAgICBhdXRvIHJpZ2h0Qm9yZGVyID0gc3RkOjptYXgodGFibGVCb3JkZXIu
aG9yaXpvbnRhbC5yaWdodCwgZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXN0Q29sdW1uRmly
c3RSb3cpLmhvcml6b250YWwucmlnaHQpOworICAgIGF1dG8gcmlnaHRCb3JkZXIgPSBzdGQ6Om1h
eCh0YWJsZUJvcmRlci5ob3Jpem9udGFsLnJpZ2h0LCBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgp
LmNvbXB1dGVkQm9yZGVyKGxhc3RDb2x1bW5GaXJzdFJvdykuaG9yaXpvbnRhbC5yaWdodCk7CiAK
ICAgICBhdXRvIHRvcEJvcmRlciA9IHRhYmxlQm9yZGVyLnZlcnRpY2FsLnRvcDsKICAgICBhdXRv
IGJvdHRvbUJvcmRlciA9IHRhYmxlQm9yZGVyLnZlcnRpY2FsLmJvdHRvbTsKQEAgLTExNSwzMyAr
MTE1LDMzIEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUJvcmRlckFuZFBhZGRpbmdGb3JUYWJsZUJveChjb25zCiAgICAgICAgIGF1dG8mIGJveEluRmly
c3RSb3ggPSBncmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgMCB9KS0+Y2VsbCgpLmJveCgpOwogICAg
ICAgICBhdXRvJiBib3hJbkxhc3RSb3cgPSBncmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgbGFzdFJv
d0luZGV4IH0pLT5jZWxsKCkuYm94KCk7CiAKLSAgICAgICAgdG9wQm9yZGVyID0gc3RkOjptYXgo
dG9wQm9yZGVyLCBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGJveEluRmlyc3RSb3gpLnZlcnRp
Y2FsLnRvcCk7Ci0gICAgICAgIGJvdHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwg
Z2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihib3hJbkxhc3RSb3cpLnZlcnRpY2FsLmJvdHRvbSk7
CisgICAgICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4KHRvcEJvcmRlciwgYmxvY2tGb3JtYXR0aW5n
R2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihib3hJbkZpcnN0Um94KS52ZXJ0aWNhbC50b3ApOwor
ICAgICAgICBib3R0b21Cb3JkZXIgPSBzdGQ6Om1heChib3R0b21Cb3JkZXIsIGJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoYm94SW5MYXN0Um93KS52ZXJ0aWNhbC5ib3R0
b20pOwogICAgIH0KIAotICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4KHRvcEJvcmRlciwgZ2VvbWV0
cnkoKS5jb21wdXRlZEJvcmRlcigqdGFibGVCb3guZmlyc3RDaGlsZCgpKS52ZXJ0aWNhbC50b3Ap
OworICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4KHRvcEJvcmRlciwgYmxvY2tGb3JtYXR0aW5nR2Vv
bWV0cnkoKS5jb21wdXRlZEJvcmRlcigqdGFibGVCb3guZmlyc3RDaGlsZCgpKS52ZXJ0aWNhbC50
b3ApOwogICAgIGZvciAoYXV0byYgc2VjdGlvbiA6IGNoaWxkcmVuT2ZUeXBlPENvbnRhaW5lckJv
eD4odGFibGVCb3gpKSB7Ci0gICAgICAgIGF1dG8gaG9yaXp0b25hbEJvcmRlciA9IGdlb21ldHJ5
KCkuY29tcHV0ZWRCb3JkZXIoc2VjdGlvbikuaG9yaXpvbnRhbDsKKyAgICAgICAgYXV0byBob3Jp
enRvbmFsQm9yZGVyID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihz
ZWN0aW9uKS5ob3Jpem9udGFsOwogICAgICAgICBsZWZ0Qm9yZGVyID0gc3RkOjptYXgobGVmdEJv
cmRlciwgaG9yaXp0b25hbEJvcmRlci5sZWZ0KTsKICAgICAgICAgcmlnaHRCb3JkZXIgPSBzdGQ6
Om1heChyaWdodEJvcmRlciwgaG9yaXp0b25hbEJvcmRlci5yaWdodCk7CiAgICAgfQotICAgIGJv
dHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwgZ2VvbWV0cnkoKS5jb21wdXRlZEJv
cmRlcigqdGFibGVCb3gubGFzdENoaWxkKCkpLnZlcnRpY2FsLmJvdHRvbSk7CisgICAgYm90dG9t
Qm9yZGVyID0gc3RkOjptYXgoYm90dG9tQm9yZGVyLCBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgp
LmNvbXB1dGVkQm9yZGVyKCp0YWJsZUJveC5sYXN0Q2hpbGQoKSkudmVydGljYWwuYm90dG9tKTsK
IAogICAgIGF1dG8mIHJvd3MgPSBncmlkLnJvd3MoKS5saXN0KCk7Ci0gICAgdG9wQm9yZGVyID0g
c3RkOjptYXgodG9wQm9yZGVyLCBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJvd3MuZmlyc3Qo
KS5ib3goKSkudmVydGljYWwudG9wKTsKKyAgICB0b3BCb3JkZXIgPSBzdGQ6Om1heCh0b3BCb3Jk
ZXIsIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93cy5maXJzdCgp
LmJveCgpKS52ZXJ0aWNhbC50b3ApOwogICAgIGZvciAoYXV0byYgcm93IDogcm93cykgewotICAg
ICAgICBhdXRvIGhvcml6dG9uYWxCb3JkZXIgPSBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJv
dy5ib3goKSkuaG9yaXpvbnRhbDsKKyAgICAgICAgYXV0byBob3JpenRvbmFsQm9yZGVyID0gYmxv
Y2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3cuYm94KCkpLmhvcml6b250
YWw7CiAgICAgICAgIGxlZnRCb3JkZXIgPSBzdGQ6Om1heChsZWZ0Qm9yZGVyLCBob3JpenRvbmFs
Qm9yZGVyLmxlZnQpOwogICAgICAgICByaWdodEJvcmRlciA9IHN0ZDo6bWF4KHJpZ2h0Qm9yZGVy
LCBob3JpenRvbmFsQm9yZGVyLnJpZ2h0KTsKICAgICB9Ci0gICAgYm90dG9tQm9yZGVyID0gc3Rk
OjptYXgoYm90dG9tQm9yZGVyLCBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJvd3MubGFzdCgp
LmJveCgpKS52ZXJ0aWNhbC5ib3R0b20pOworICAgIGJvdHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJv
dHRvbUJvcmRlciwgYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dz
Lmxhc3QoKS5ib3goKSkudmVydGljYWwuYm90dG9tKTsKIAogICAgIGF1dG8gY29sbGFwc2VkQm9y
ZGVyID0gRWRnZXMgeyB7IGxlZnRCb3JkZXIsIHJpZ2h0Qm9yZGVyIH0sIHsgdG9wQm9yZGVyLCBi
b3R0b21Cb3JkZXIgfSB9OwogICAgIGdyaWQuc2V0Q29sbGFwc2VkQm9yZGVyKGNvbGxhcHNlZEJv
cmRlcik7CiAKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdl
b21ldHJ5KHRhYmxlQm94KTsKICAgICBib3hHZW9tZXRyeS5zZXRCb3JkZXIoY29sbGFwc2VkQm9y
ZGVyIC8gMik7Ci0gICAgYm94R2VvbWV0cnkuc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVk
UGFkZGluZyh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCkpOwor
ICAgIGJveEdlb21ldHJ5LnNldFBhZGRpbmcoYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21w
dXRlZFBhZGRpbmcodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgp
KTsKIH0KIAogdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
V2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdCBDb250YWluZXJCb3gmIHRhYmxlQm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKQEAgLTE4
NiwxMCArMTg2LDEwIEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZVdpZHRoQW5kTWFyZ2luRm9yVGFibGVCb3goY29uc3QKICAgICAvLyBTaW1pbGFyIHNl
dHVwIHdpdGggbm9uLXRhYmxlIGNvbnRlbnQgd291bGQgcmVzb2x2ZSB0aGUgaW5uZXIgYmxvY2sg
bGV2ZWwgYm94J3Mgd2lkdGggdG8gNDBweDsKICAgICAvLyBUaGlzIG5lZWRzIGNsYXJpZmljYXRp
b24gaW4gdGhlIHNwZWMuCiAgICAgYXV0byBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmlu
Z1dpZHRoID0gbV9ob3Jpem9udGFsQ29uc3RyYWludHNJZ25vcmluZ0Zsb2F0cy5sb2dpY2FsV2lk
dGg7Ci0gICAgYXV0byBnZW9tZXRyeSA9IHRoaXMtPmdlb21ldHJ5KCk7Ci0gICAgYXV0byBjb21w
dXRlZFdpZHRoID0gZ2VvbWV0cnkuY29tcHV0ZWRXaWR0aCh0YWJsZUJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRGb3JSZXNvbHZpbmdXaWR0aCk7Ci0gICAgYXV0byBjb21wdXRlZE1heFdpZHRoID0g
Z2VvbWV0cnkuY29tcHV0ZWRNYXhXaWR0aCh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRG
b3JSZXNvbHZpbmdXaWR0aCk7Ci0gICAgYXV0byBjb21wdXRlZE1pbldpZHRoID0gZ2VvbWV0cnku
Y29tcHV0ZWRNaW5XaWR0aCh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZp
bmdXaWR0aCk7CisgICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0cnkgPSBibG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeSgpOworICAgIGF1dG8gY29tcHV0ZWRXaWR0aCA9IGZvcm1hdHRpbmdHZW9tZXRyeS5j
b21wdXRlZFdpZHRoKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmluZ1dp
ZHRoKTsKKyAgICBhdXRvIGNvbXB1dGVkTWF4V2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29t
cHV0ZWRNYXhXaWR0aCh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdX
aWR0aCk7CisgICAgYXV0byBjb21wdXRlZE1pbldpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNv
bXB1dGVkTWluV2lkdGgodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50Rm9yUmVzb2x2aW5n
V2lkdGgpOwogICAgIC8vIFVzZSB0aGUgZ2VuZXJpYyBzaHJpbmstdG8tZml0LXdpZHRoIGxvZ2lj
IGFzIHRoZSBpbml0aWFsIHdpZHRoIGZvciB0aGUgdGFibGUuCiAgICAgYXV0byB1c2VkV2lkdGgg
PSBzdGQ6Om1pbihzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2
YWlsYWJsZUhvcml6b250YWxTcGFjZSksIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11
bSk7CiAgICAgaWYgKGNvbXB1dGVkV2lkdGggfHwgY29tcHV0ZWRNaW5XaWR0aCB8fCBjb21wdXRl
ZE1heFdpZHRoKSB7CkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdAog
ICAgICAgICAgICAgdXNlZFdpZHRoID0gKmNvbXB1dGVkTWluV2lkdGg7CiAgICAgfQogCi0gICAg
YXV0byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBnZW9tZXRyeS5pbkZsb3dDb250ZW50V2lkdGhB
bmRNYXJnaW4odGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgT3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMgeyB1c2VkV2lkdGgsIHsgfSB9KTsKKyAgICBhdXRvIGNvbnRlbnRXaWR0aEFu
ZE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9tZXRyeS5pbkZsb3dDb250ZW50V2lkdGhBbmRNYXJnaW4o
dGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1
ZXMgeyB1c2VkV2lkdGgsIHsgfSB9KTsKIAogICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0
dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkodGFibGVCb3gpOwogICAgIGJveEdlb21ldHJ5LnNldENv
bnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKTsKQEAgLTIy
NCwxMSArMjI0LDExIEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRhYmxlQm94KGNvbnN0CiAgICAgICAgIGlmIChsYXlv
dXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIFRhYmxlV3JhcHBl
clF1aXJrcygqdGhpcykub3ZlcnJpZGRlblRhYmxlSGVpZ2h0KHRhYmxlQm94KTsKICAgICAgICAg
aWYgKHRhYmxlQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlb21ldHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJs
ZUJveCk7CisgICAgICAgICAgICByZXR1cm4gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb250
ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KHRhYmxlQm94KTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9KCk7CiAKLSAgICBhdXRvIGhlaWdodEFuZE1hcmdpbiA9IGdlb21ldHJ5
KCkuaW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbih0YWJsZUJveCwgY29uc3RyYWludHMuaG9y
aXpvbnRhbCwgeyBvdmVycmlkZGVuVGFibGVIZWlnaHQgfSk7CisgICAgYXV0byBoZWlnaHRBbmRN
YXJnaW4gPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmluRmxvd0NvbnRlbnRIZWlnaHRBbmRN
YXJnaW4odGFibGVCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwsIHsgb3ZlcnJpZGRlblRhYmxl
SGVpZ2h0IH0pOwogICAgIGF1dG8gdmVydGljYWxNYXJnaW4gPSBtYXJnaW5Db2xsYXBzZSgpLmNv
bGxhcHNlZFZlcnRpY2FsVmFsdWVzKHRhYmxlQm94LCBoZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFw
c2VkTWFyZ2luKTsKICAgICAvLyBDYWNoZSB0aGUgY29tcHV0ZWQgcG9zaXRpdmUgYW5kIG5lZ2F0
aXZlIG1hcmdpbiB2YWx1ZSBwYWlyLgogICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNldFVzZWRWZXJ0
aWNhbE1hcmdpbih0YWJsZUJveCwgdmVydGljYWxNYXJnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgv
RmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA2MzYxZjhlOTFlNzQ0NzQzNDYzNDIwMTQ4
ODZlNWYxMGRhM2E4ZGI0Li42YTJkMjdjNjk1YjgyMWE4MWJhNjVmOWVhMTdjMmNmYzQ2ZjcxMDE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Zs
ZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNjcs
NyArNjcsNyBAQCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZsZXhGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbgogdm9pZCBGbGV4Rm9ybWF0dGluZ0Nv
bnRleHQ6OnNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0Nv
bnRlbnQmIGNvbnN0cmFpbnRzKQogewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMt
PmZvcm1hdHRpbmdTdGF0ZSgpOwotICAgIGF1dG8gZ2VvbWV0cnkgPSB0aGlzLT5nZW9tZXRyeSgp
OworICAgIGF1dG8gZm9ybWF0dGluZ0dlb21ldHJ5ID0gZmxleEZvcm1hdHRpbmdHZW9tZXRyeSgp
OwogICAgIGF1dG8gZmxleEl0ZW1NYWluQXhpc1N0YXJ0ID0gY29uc3RyYWludHMuaG9yaXpvbnRh
bC5sb2dpY2FsTGVmdDsKICAgICBhdXRvIGZsZXhJdGVtTWFpbkF4aXNFbmQgPSBmbGV4SXRlbU1h
aW5BeGlzU3RhcnQ7CiAgICAgYXV0byBmbGV4SXRlbUNyb3NBeGlzU3RhcnQgPSBjb25zdHJhaW50
cy52ZXJ0aWNhbC5sb2dpY2FsVG9wOwpAQCAtODcsMTYgKzg3LDE2IEBAIHZvaWQgRmxleEZvcm1h
dHRpbmdDb250ZXh0OjpzaXplQW5kUGxhY2VGbGV4SXRlbXMoY29uc3QgQ29uc3RyYWludHNGb3JJ
bkZsb3dDb250CiAKICAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0TG9naWNhbFRvcExl
ZnQoTGF5b3V0UG9pbnQgeyBmbGV4SXRlbU1haW5BeGlzRW5kLCBmbGV4SXRlbUNyb3NBeGlzU3Rh
cnQgfSk7CiAKLSAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Qm9yZGVyKGdlb21ldHJ5
LmNvbXB1dGVkQm9yZGVyKGZsZXhJdGVtKSk7Ci0gICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5
LnNldFBhZGRpbmcoZ2VvbWV0cnkuY29tcHV0ZWRQYWRkaW5nKGZsZXhJdGVtLCBjb25zdHJhaW50
cy5ob3Jpem9udGFsLmxvZ2ljYWxXaWR0aCkpOworICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRy
eS5zZXRCb3JkZXIoZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkQm9yZGVyKGZsZXhJdGVtKSk7
CisgICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldFBhZGRpbmcoZm9ybWF0dGluZ0dlb21l
dHJ5LmNvbXB1dGVkUGFkZGluZyhmbGV4SXRlbSwgY29uc3RyYWludHMuaG9yaXpvbnRhbC5sb2dp
Y2FsV2lkdGgpKTsKIAotICAgICAgICAgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4g
PSBnZW9tZXRyeS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4oZmxleEl0ZW0sIGNvbnN0cmFpbnRz
Lmhvcml6b250YWwpOworICAgICAgICAgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4g
PSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGZsZXhJdGVtLCBj
b25zdHJhaW50cy5ob3Jpem9udGFsKTsKICAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0
SG9yaXpvbnRhbE1hcmdpbih7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9y
KDBfbHUpLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMF9sdSkgfSk7CiAK
LSAgICAgICAgICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IGdlb21ldHJ5LmNvbXB1
dGVkVmVydGljYWxNYXJnaW4oZmxleEl0ZW0sIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOworICAg
ICAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gZm9ybWF0dGluZ0dlb21ldHJ5
LmNvbXB1dGVkVmVydGljYWxNYXJnaW4oZmxleEl0ZW0sIGNvbnN0cmFpbnRzLmhvcml6b250YWwp
OwogICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IGNvbXB1
dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMF9sdSksIGNvbXB1dGVkVmVydGljYWxN
YXJnaW4uYWZ0ZXIudmFsdWVPcigwX2x1KSB9KTsKIAotICAgICAgICAgICAgZmxleEl0ZW1HZW9t
ZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KGdlb21ldHJ5LmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0
aW5nQ29udGV4dFJvb3QoZmxleEl0ZW0pKTsKKyAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnku
c2V0Q29udGVudEJveEhlaWdodChmb3JtYXR0aW5nR2VvbWV0cnkuY29udGVudEhlaWdodEZvckZv
cm1hdHRpbmdDb250ZXh0Um9vdChmbGV4SXRlbSkpOwogICAgICAgICAgICAgZmxleEl0ZW1HZW9t
ZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoZmxleEl0ZW1Mb2dpY2FsV2lkdGgpOwogICAgICAgICAg
ICAgZmxleEl0ZW1NYWluQXhpc0VuZD0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QoZmxleEl0
ZW1HZW9tZXRyeSkucmlnaHQoKTsKICAgICAgICAgICAgIGZsZXhJdGVtQ3Jvc0F4aXNFbmQgPSBz
dGQ6Om1heChmbGV4SXRlbUNyb3NBeGlzRW5kLCBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChm
bGV4SXRlbUdlb21ldHJ5KS5ib3R0b20oKSk7CkBAIC0xMTAsMTUgKzExMCwxNSBAQCB2b2lkIEZs
ZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKGNvbnN0IENvbnN0cmFp
bnRzRm9ySW5GbG93Q29udAogdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yRmxleEl0ZW1zKCkKIHsKICAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvIGdlb21ldHJ5ID0g
dGhpcy0+Z2VvbWV0cnkoKTsKKyAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZsZXhGb3Jt
YXR0aW5nR2VvbWV0cnkoKTsKICAgICBmb3IgKGF1dG8mIGZsZXhJdGVtIDogY2hpbGRyZW5PZlR5
cGU8Q29udGFpbmVyQm94Pihyb290KCkpKSB7CiAgICAgICAgIGlmIChmb3JtYXR0aW5nU3RhdGUu
aW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChmbGV4SXRlbSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHNGb3JCb3goZmxleEl0ZW0sIGdlb21ldHJ5LmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
ZmxleEl0ZW0pKTsKKyAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHNGb3JCb3goZmxleEl0ZW0sIGZvcm1hdHRpbmdHZW9tZXRyeS5pbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzKGZsZXhJdGVtKSk7CiAgICAgfQogfQogCi1GbGV4Rm9ybWF0dGluZ0dlb21l
dHJ5IEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkoKSBjb25zdAorRmxleEZvcm1hdHRp
bmdHZW9tZXRyeSBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmZsZXhGb3JtYXR0aW5nR2VvbWV0cnko
KSBjb25zdAogewogICAgIHJldHVybiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxl
eC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAzZWVmYzVlNDlj
ZmI2MjhjOTE2N2E1MjU0ZTA4MzlmZGY1NzM4MGNiLi4yMjNmYTA4NjA4N2Y5ZTM3OThlYWE3NzRj
ZjMwNWQ4ZTljMmFjMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4
dC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgotICAgIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdDsKKyAgICBG
bGV4Rm9ybWF0dGluZ0dlb21ldHJ5IGZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdDsKIAog
ICAgIHZvaWQgc2l6ZUFuZFBsYWNlRmxleEl0ZW1zKGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudCYpOwogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JG
bGV4SXRlbXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcAppbmRleCA4NmM4MzRjMzEyZjVjYTVkZWY2NDA0YTVmNzIwOWMxMzNlYTZlZGQ4Li41
NjAyYzgxNzliNGUxYjVkYmQwYzIyN2VhZTYxZTYwZDc4YTA3OWY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0xMDQsOSArMTA0LDkg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZh
bGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW8KICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGlu
Z1Jvb3QuaGFzQ2hpbGQoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIGZvcm1hdHRpbmdD
b250ZXh0ID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGlu
Z1Jvb3QsIGxheW91dFN0YXRlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGlu
Z1Jvb3QuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0
ZSwgZ2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoZm9ybWF0dGluZ1Jvb3Qp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJbkZs
b3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoZm9ybWF0dGluZ1Jvb3QpKTsKICAgICAgICAgICAg
ICAgICAgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWlu
dHMuaG9yaXpvbnRhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5s
YXlvdXRPdXRPZkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBnZW9tZXRyeSgpLmNvbnN0
cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChmb3JtYXR0aW5nUm9vdCkpOworICAgICAgICAgICAg
ICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlk
YXRpb25TdGF0ZSwgaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRP
ZkZsb3dDb250ZW50KGZvcm1hdHRpbmdSb290KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oZm9ybWF0dGluZ1Jvb3Qs
IGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIwOCw3
ICsyMDgsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGlu
ZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUJ1aWxkZXI6OgogICAgICAgICBpZiAoIWxpbmVDb250
ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmVlZHNMYXlvdXRSYW5n
ZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKICAgICAgICAgICAgIGlzRmlyc3RMaW5l
ID0gZmFsc2U7Ci0gICAgICAgICAgICBsaW5lTG9naWNhbFRvcCA9IGdlb21ldHJ5KCkubG9naWNh
bFRvcEZvck5leHRMaW5lKGxpbmVDb250ZW50LCBsaW5lTG9naWNhbFJlY3QuYm90dG9tKCksIGZs
b2F0aW5nQ29udGV4dCk7CisgICAgICAgICAgICBsaW5lTG9naWNhbFRvcCA9IGlubGluZUZvcm1h
dHRpbmdHZW9tZXRyeSgpLmxvZ2ljYWxUb3BGb3JOZXh0TGluZShsaW5lQ29udGVudCwgbGluZUxv
Z2ljYWxSZWN0LmJvdHRvbSgpLCBmbG9hdGluZ0NvbnRleHQpOwogICAgICAgICAgICAgaWYgKGxp
bmVDb250ZW50LmlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgewogICAgICAgICAgICAgICAg
IC8vIFRoZSBmaW5hbCBjb250ZW50IGhlaWdodCBvZiB0aGlzIGlubGluZSBmb3JtYXR0aW5nIGNv
bnRleHQgc2hvdWxkIGluY2x1ZGUgdGhlIGNsZWFyZWQgZmxvYXRzIGFzIHdlbGwuCiAgICAgICAg
ICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldENsZWFyR2FwQWZ0ZXJMYXN0TGluZShsaW5lTG9n
aWNhbFRvcCAtIGxpbmVMb2dpY2FsUmVjdC5ib3R0b20oKSk7CkBAIC0yNDksNyArMjQ5LDcgQEAg
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmEKICAgICBBU1NFUlQoIWZvcm1hdHRpbmdTdGF0ZSgpLmlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSk7CiAKICAgICBpZiAoIXJvb3QoKS5oYXNJbkZsb3dP
ckZsb2F0aW5nQ2hpbGQoKSkgewotICAgICAgICBhdXRvIGNvbnN0cmFpbnRzID0gZ2VvbWV0cnko
KS5jb25zdHJhaW5CeU1pbk1heFdpZHRoKHJvb3QoKSwgeyB9KTsKKyAgICAgICAgYXV0byBjb25z
dHJhaW50cyA9IGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lk
dGgocm9vdCgpLCB7IH0pOwogICAgICAgICBmb3JtYXR0aW5nU3RhdGUoKS5zZXRJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRz
OwogICAgIH0KQEAgLTI5Niw3ICsyOTYsNyBAQCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYQogCiAg
ICAgYXV0byBtaW5pbXVtQ29udGVudFdpZHRoID0gY2VpbGVkTGF5b3V0VW5pdChtYXhpbXVtTGlu
ZVdpZHRoKDApKTsKICAgICBhdXRvIG1heGltdW1Db250ZW50V2lkdGggPSBjZWlsZWRMYXlvdXRV
bml0KG1heGltdW1MaW5lV2lkdGgobWF4SW5saW5lTGF5b3V0VW5pdCgpKSk7Ci0gICAgYXV0byBj
b25zdHJhaW50cyA9IGdlb21ldHJ5KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0aChyb290KCksIHsg
bWluaW11bUNvbnRlbnRXaWR0aCwgbWF4aW11bUNvbnRlbnRXaWR0aCB9KTsKKyAgICBhdXRvIGNv
bnN0cmFpbnRzID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWluQnlNaW5NYXhX
aWR0aChyb290KCksIHsgbWluaW11bUNvbnRlbnRXaWR0aCwgbWF4aW11bUNvbnRlbnRXaWR0aCB9
KTsKICAgICBmb3JtYXR0aW5nU3RhdGUoKS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNv
bnN0cmFpbnRzKTsKICAgICByZXR1cm4gY29uc3RyYWludHM7CiB9CkBAIC0zMjMsNyArMzIzLDcg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9y
Rm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JgogewogICAgIEFTU0VSVChmb3JtYXR0aW5nUm9vdC5l
c3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwogICAgIGF1dG8gY29uc3RyYWludHMgPSBJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgfTsKLSAgICBpZiAoYXV0byBmaXhlZFdpZHRoID0g
Z2VvbWV0cnkoKS5maXhlZFZhbHVlKGZvcm1hdHRpbmdSb290LnN0eWxlKCkubG9naWNhbFdpZHRo
KCkpKQorICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnko
KS5maXhlZFZhbHVlKGZvcm1hdHRpbmdSb290LnN0eWxlKCkubG9naWNhbFdpZHRoKCkpKQogICAg
ICAgICBjb25zdHJhaW50cyA9IHsgKmZpeGVkV2lkdGgsICpmaXhlZFdpZHRoIH07CiAgICAgZWxz
ZSB7CiAgICAgICAgIGF1dG8gaGFzSW5mbG93T3JGbG9hdGluZ0NvbnRlbnQgPSBpczxDb250YWlu
ZXJCb3g+KGZvcm1hdHRpbmdSb290KSAmJiBkb3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1hdHRp
bmdSb290KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKQEAgLTMzMiwxNCArMzMyLDE0IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZv
cm1hdHRpbmdSb290KGNvbnN0IEJveCYKICAgICAgICAgaWYgKGhhc0luZmxvd09yRmxvYXRpbmdD
b250ZW50ICYmICFzaG91bGRJZ25vcmVDaGlsZENvbnRlbnQpCiAgICAgICAgICAgICBjb25zdHJh
aW50cyA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGRvd25jYXN0PENv
bnRhaW5lckJveD4oZm9ybWF0dGluZ1Jvb3QpLCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CiAgICAgfQotICAgIGNvbnN0cmFpbnRzID0gZ2VvbWV0
cnkoKS5jb25zdHJhaW5CeU1pbk1heFdpZHRoKGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cyk7
CisgICAgY29uc3RyYWludHMgPSBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW5C
eU1pbk1heFdpZHRoKGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cyk7CiAgICAgY29uc3RyYWlu
dHMuZXhwYW5kKGdlb21ldHJ5Rm9yQm94KGZvcm1hdHRpbmdSb290KS5ob3Jpem9udGFsTWFyZ2lu
Qm9yZGVyQW5kUGFkZGluZygpKTsKICAgICBmb3JtYXR0aW5nU3RhdGUoKS5zZXRJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzRm9yQm94KGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cyk7CiB9CiAK
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250
YWxDb25zdHJhaW50cykKIHsKLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IGdl
b21ldHJ5KCkuY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKTsKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IGlubGluZUZv
cm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cyk7CiAgICAgZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnko
bGF5b3V0Qm94KS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigw
KSB9KTsKIH0KIApAQCAtMzQ3LDExICszNDcsMTEgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAog
ewogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgp
IHsKICAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5
b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisgICAg
ICAgICAgICByZXR1cm4gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50
V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgdXNlZFdp
ZHRoLCB7IH0gfSk7CiAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuaW5saW5lQmxvY2tDb250ZW50V2lkdGhBbmRN
YXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgdXNlZFdpZHRoLCB7IH0g
fSk7CisgICAgICAgICAgICByZXR1cm4gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuaW5saW5l
QmxvY2tDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CiAgICAgICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNl
ZEJveCgpKQotICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuaW5saW5lUmVwbGFjZWRDb250
ZW50V2lkdGhBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6
b250YWxDb25zdHJhaW50cywgeyB9LCB7IHVzZWRXaWR0aCwgeyB9IH0pOworICAgICAgICAgICAg
cmV0dXJuIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmlubGluZVJlcGxhY2VkQ29udGVudFdp
ZHRoQW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFs
Q29uc3RyYWludHMsIHsgfSwgeyB1c2VkV2lkdGgsIHsgfSB9KTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyB9Owog
ICAgIH07CkBAIC0zNTksMTMgKzM1OSwxMyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0CiAgICAg
YXV0byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7CiAKICAgICBhdXRvIGF2
YWlsYWJsZVdpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBp
ZiAoYXV0byBtYXhXaWR0aCA9IGdlb21ldHJ5KCkuY29tcHV0ZWRNYXhXaWR0aChsYXlvdXRCb3gs
IGF2YWlsYWJsZVdpZHRoKSkgeworICAgIGlmIChhdXRvIG1heFdpZHRoID0gaW5saW5lRm9ybWF0
dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRNYXhXaWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRo
KSkgewogICAgICAgICBhdXRvIG1heFdpZHRoQW5kTWFyZ2luID0gY29tcHV0ZShtYXhXaWR0aCk7
CiAgICAgICAgIGlmIChjb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoID4gbWF4V2lk
dGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQogICAgICAgICAgICAgY29udGVudFdpZHRoQW5kTWFy
Z2luID0gbWF4V2lkdGhBbmRNYXJnaW47CiAgICAgfQogCi0gICAgYXV0byBtaW5XaWR0aCA9IGdl
b21ldHJ5KCkuY29tcHV0ZWRNaW5XaWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKS52YWx1
ZU9yKDApOworICAgIGF1dG8gbWluV2lkdGggPSBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b21wdXRlZE1pbldpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpLnZhbHVlT3IoMCk7CiAg
ICAgYXV0byBtaW5XaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUobWluV2lkdGgpOwogICAgIGlmIChj
b250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoIDwgbWluV2lkdGhBbmRNYXJnaW4uY29u
dGVudFdpZHRoKQogICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBtaW5XaWR0aEFuZE1h
cmdpbjsKQEAgLTM3OSwyMyArMzc5LDIzIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0CiB7CiAg
ICAgYXV0byBjb21wdXRlID0gWyZdKE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpIHsK
ICAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxheW91
dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRIZWlnaHQgfSk7CisgICAgICAgICAg
ICByZXR1cm4gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0
QW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRIZWlnaHQg
fSk7CiAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGdlb21ldHJ5KCkuaW5saW5lQmxvY2tDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxh
eW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRIZWlnaHQgfSk7CisgICAgICAg
ICAgICByZXR1cm4gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuaW5saW5lQmxvY2tDb250ZW50
SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRI
ZWlnaHQgfSk7CiAgICAgICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuaW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIHsgfSwgeyB1c2VkSGVpZ2h0IH0pOworICAgICAgICAgICAgcmV0dXJuIGlubGluZUZvcm1h
dHRpbmdHZW9tZXRyeSgpLmlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihkb3du
Y2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0s
IHsgdXNlZEhlaWdodCB9KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsgfTsKICAgICB9OwogCiAgICAgYXV0byBj
b250ZW50SGVpZ2h0QW5kTWFyZ2luID0gY29tcHV0ZSh7IH0pOwotICAgIGlmIChhdXRvIG1heEhl
aWdodCA9IGdlb21ldHJ5KCkuY29tcHV0ZWRNYXhIZWlnaHQobGF5b3V0Qm94KSkgeworICAgIGlm
IChhdXRvIG1heEhlaWdodCA9IGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4
SGVpZ2h0KGxheW91dEJveCkpIHsKICAgICAgICAgYXV0byBtYXhIZWlnaHRBbmRNYXJnaW4gPSBj
b21wdXRlKG1heEhlaWdodCk7CiAgICAgICAgIGlmIChjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNv
bnRlbnRIZWlnaHQgPiBtYXhIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCkKICAgICAgICAg
ICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBtYXhIZWlnaHRBbmRNYXJnaW47CiAgICAgfQog
Ci0gICAgaWYgKGF1dG8gbWluSGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChs
YXlvdXRCb3gpKSB7CisgICAgaWYgKGF1dG8gbWluSGVpZ2h0ID0gaW5saW5lRm9ybWF0dGluZ0dl
b21ldHJ5KCkuY29tcHV0ZWRNaW5IZWlnaHQobGF5b3V0Qm94KSkgewogICAgICAgICBhdXRvIG1p
bkhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWluSGVpZ2h0KTsKICAgICAgICAgaWYgKGNvbnRl
bnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA8IG1pbkhlaWdodEFuZE1hcmdpbi5jb250
ZW50SGVpZ2h0KQogICAgICAgICAgICAgY29udGVudEhlaWdodEFuZE1hcmdpbiA9IG1pbkhlaWdo
dEFuZE1hcmdpbjsKQEAgLTQ1Niw5ICs0NTYsOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudElmTmVlZGVkKCkKIElubGluZVJlY3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRyeUZvckxpbmVDb250ZW50KGNvbnN0IExpbmVC
dWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0
ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwotICAgIGF1dG8gZ2VvbWV0cnkgPSB0aGlzLT5n
ZW9tZXRyeSgpOworICAgIGF1dG8gZm9ybWF0dGluZ0dlb21ldHJ5ID0gaW5saW5lRm9ybWF0dGlu
Z0dlb21ldHJ5KCk7CiAKLSAgICBmb3JtYXR0aW5nU3RhdGUuYWRkTGluZUJveChnZW9tZXRyeS5s
aW5lQm94Rm9yTGluZUNvbnRlbnQobGluZUNvbnRlbnQpKTsKKyAgICBmb3JtYXR0aW5nU3RhdGUu
YWRkTGluZUJveChmb3JtYXR0aW5nR2VvbWV0cnkubGluZUJveEZvckxpbmVDb250ZW50KGxpbmVD
b250ZW50KSk7CiAgICAgY29uc3QgYXV0byYgbGluZUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5saW5l
Qm94ZXMoKS5sYXN0KCk7CiAgICAgYXV0byBsaW5lSW5kZXggPSBmb3JtYXR0aW5nU3RhdGUubGlu
ZXMoKS5zaXplKCk7CiAgICAgYXV0byYgbGluZUJveExvZ2ljYWxSZWN0ID0gbGluZUJveC5sb2dp
Y2FsUmVjdCgpOwpAQCAtNTI3LDcgKzUyNyw3IEBAIElubGluZVJlY3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRyeUZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsCiAg
ICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGlubGluZSBib3hlcyBhcmUgcmVsYXRpdmUgdG8g
dGhlIGxpbmUgYW5kIHRoZWlyIHRvcCBwb3NpdGlvbiBjYW4gYmUgbmVnYXRpdmUuCiAgICAgICAg
ICAgICAgICAgYm9yZGVyQm94TG9naWNhbFRvcExlZnQubW92ZUJ5KGxpbmVCb3hMb2dpY2FsUmVj
dC50b3BMZWZ0KCkpOwogICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3Np
dGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlckJveExvZ2ljYWxUb3BMZWZ0ICs9
IGdlb21ldHJ5LmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gsIGhvcml6
b250YWxDb25zdHJhaW50cyk7CisgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveExvZ2ljYWxU
b3BMZWZ0ICs9IGZvcm1hdHRpbmdHZW9tZXRyeS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZz
ZXQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwogICAgICAgICAgICAgICAgIC8v
IEF0b21pYyBpbmxpbmUgYm94ZXMgYXJlIGFsbCBzZXQuIFRoZWlyIG1hcmdpbi9ib3JkZXIvY29u
dGVudCBib3ggZ2VvbWV0cmllcyBhcmUgYWxyZWFkeSBjb21wdXRlZC4gV2UganVzdCBoYXZlIHRv
IHBvc2l0aW9uIHRoZW0gaGVyZS4KICAgICAgICAgICAgICAgICBib3hHZW9tZXRyeS5zZXRMb2dp
Y2FsVG9wTGVmdCh0b0xheW91dFBvaW50KGJvcmRlckJveExvZ2ljYWxUb3BMZWZ0KSk7CiAKQEAg
LTYxMiw3ICs2MTIsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjppbnZhbGlkYXRl
Rm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJgogICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGFsc28gd2hlcmUgd2Ugd291bGQgZGVsZXRlIGlubGluZSBpdGVtcyBpZiB0aGVpciBj
b250ZW50IGNoYW5nZWQuCiB9CiAKLUlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkoKSBjb25zdAorSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjppbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25z
dAogewogICAgIHJldHVybiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMGY5OWY5
ZjkzNGVjOGVmNTk0NGJmYWI5N2M3NWNjNzQ0N2RhNzJmNS4uZGNlOGMzZWY5NmM3ZmRkZmVlMmJi
MWNlYjAxYjMyM2UwODY5NmEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKSBvdmVycmlkZTsKIAotICAgIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBnZW9tZXRyeSgp
IGNvbnN0OworICAgIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBpbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkoKSBjb25zdDsKIAogICAgIHZvaWQgbGluZUxheW91dChJbmxpbmVJdGVtcyYsIExpbmVC
dWlsZGVyOjpJbmxpbmVJdGVtUmFuZ2UsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVu
dCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCAxNmM4NzNmMGE4YjViZDY3NThmODAwNjE2ZGYwYzY5MmQ2MTkyMWRjLi43ZDhhNjQyMTAz
YzEyOTA4MGNlYmZlOGQ3NzBkMjczMTQ3ZjYxOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUv
VGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTE3MywxMyArMTczLDEzIEBAIHZvaWQgVGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yUm93cyhMYXlvdXRVbml0IGF2
YWlsYWJsZUhvcml6b250CiAgICAgICAgIGF1dG8mIHJvd0JveCA9IHJvdy5ib3goKTsKICAgICAg
ICAgYXV0byYgcm93Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShy
b3dCb3gpOwogCi0gICAgICAgIHJvd0JveEdlb21ldHJ5LnNldFBhZGRpbmcoZ2VvbWV0cnkoKS5j
b21wdXRlZFBhZGRpbmcocm93Qm94LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsKKyAgICAg
ICAgcm93Qm94R2VvbWV0cnkuc2V0UGFkZGluZyh0YWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNv
bXB1dGVkUGFkZGluZyhyb3dCb3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOwogICAgICAg
ICAvLyBJbnRlcm5hbCB0YWJsZSBlbGVtZW50cyBkbyBub3QgaGF2ZSBtYXJnaW5zLgogICAgICAg
ICByb3dCb3hHZW9tZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgfSk7CiAgICAgICAgIHJvd0Jv
eEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CiAKICAgICAgICAgYXV0byBjb21wdXRl
ZFJvd0JvcmRlciA9IFsmXSB7Ci0gICAgICAgICAgICBhdXRvIGJvcmRlciA9IGdlb21ldHJ5KCku
Y29tcHV0ZWRCb3JkZXIocm93Qm94KTsKKyAgICAgICAgICAgIGF1dG8gYm9yZGVyID0gdGFibGVG
b3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dCb3gpOwogICAgICAgICAgICAg
aWYgKCFncmlkLmNvbGxhcHNlZEJvcmRlcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBib3Jk
ZXI7CiAgICAgICAgICAgICAvLyBCb3JkZXIgY29sbGFwc2luZyBkZWxlZ2F0ZXMgYm9yZGVycyB0
byB0YWJsZS9jZWxscy4KQEAgLTI4MCwxMyArMjgwLDEzIEBAIHZvaWQgVGFibGVGb3JtYXR0aW5n
Q29udGV4dDo6bGF5b3V0Q2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91dFVu
aXQKIHsKICAgICBBU1NFUlQoY2VsbC5ib3goKS5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0Nv
bnRleHQoKSk7CiAKLSAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2VvbWV0cnkoKTsKKyAgICBh
dXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCk7CiAgICAg
YXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpOwogICAgIGF1dG8mIGNl
bGxCb3ggPSBjZWxsLmJveCgpOwogICAgIGF1dG8mIGNlbGxCb3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdTdGF0ZSgpLmJveEdlb21ldHJ5KGNlbGxCb3gpOwogCi0gICAgY2VsbEJveEdlb21ldHJ5LnNl
dEJvcmRlcihnZW9tZXRyeS5jb21wdXRlZENlbGxCb3JkZXIoY2VsbCkpOwotICAgIGNlbGxCb3hH
ZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21ldHJ5LmNvbXB1dGVkUGFkZGluZyhjZWxsQm94LCBhdmFp
bGFibGVIb3Jpem9udGFsU3BhY2UpKTsKKyAgICBjZWxsQm94R2VvbWV0cnkuc2V0Qm9yZGVyKGZv
cm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZENlbGxCb3JkZXIoY2VsbCkpOworICAgIGNlbGxCb3hH
ZW9tZXRyeS5zZXRQYWRkaW5nKGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFBhZGRpbmcoY2Vs
bEJveCwgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlKSk7CiAgICAgLy8gSW50ZXJuYWwgdGFibGUg
ZWxlbWVudHMgZG8gbm90IGhhdmUgbWFyZ2lucy4KICAgICBjZWxsQm94R2VvbWV0cnkuc2V0SG9y
aXpvbnRhbE1hcmdpbih7IH0pOwogICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdp
bih7IH0pOwpAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0Q2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91dFVuaXQKICAgICBj
ZWxsQm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGF2YWlsYWJsZVNwYWNlRm9yQ29udGVu
dCk7CiAKICAgICBpZiAoY2VsbEJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkgewotICAg
ICAgICBhdXRvIGNvbnN0cmFpbnRzRm9yQ2VsbENvbnRlbnQgPSBnZW9tZXRyeS5jb25zdHJhaW50
c0ZvckluRmxvd0NvbnRlbnQoY2VsbEJveCk7CisgICAgICAgIGF1dG8gY29uc3RyYWludHNGb3JD
ZWxsQ29udGVudCA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRl
bnQoY2VsbEJveCk7CiAgICAgICAgIGNvbnN0cmFpbnRzRm9yQ2VsbENvbnRlbnQudmVydGljYWwu
bG9naWNhbEhlaWdodCA9IGF2YWlsYWJsZVZlcnRpY2FsU3BhY2VGb3JDb250ZW50OwogICAgICAg
ICBhdXRvIGludmFsaWRhdGlvblN0YXRlID0gSW52YWxpZGF0aW9uU3RhdGUgeyB9OwogICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgcGFydCBvZiB0aGUgaW52YWxpZGF0
aW9uIHN0YXRlIHRvIGluZGljYXRlIHdoZW4gd2UgcmUtbGF5b3V0IHRoZSBjZWxsCkBAIC0zMTIs
OCArMzEyLDggQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRDZWxsKGNvbnN0
IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCwgTGF5b3V0VW5pdAogICAgICAgICBmbG9hdGluZ1N0YXRl
Rm9yQ2VsbENvbnRlbnQuY2xlYXIoKTsKICAgICAgICAgTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9y
bWF0dGluZ0NvbnRleHQoY2VsbEJveCwgbGF5b3V0U3RhdGUoKSktPmxheW91dEluRmxvd0NvbnRl
bnQoaW52YWxpZGF0aW9uU3RhdGUsIGNvbnN0cmFpbnRzRm9yQ2VsbENvbnRlbnQpOwogICAgIH0K
LSAgICBhdXRvIGNvbnRlbnRCb3hIZWlnaHQgPSBnZW9tZXRyeS5jZWxsQm94Q29udGVudEhlaWdo
dChjZWxsQm94KTsKLSAgICBpZiAoYXV0byBjb21wdXRlZEhlaWdodCA9IGdlb21ldHJ5LmNvbXB1
dGVkSGVpZ2h0KGNlbGxCb3gpKSB7CisgICAgYXV0byBjb250ZW50Qm94SGVpZ2h0ID0gZm9ybWF0
dGluZ0dlb21ldHJ5LmNlbGxCb3hDb250ZW50SGVpZ2h0KGNlbGxCb3gpOworICAgIGlmIChhdXRv
IGNvbXB1dGVkSGVpZ2h0ID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkSGVpZ2h0KGNlbGxC
b3gpKSB7CiAgICAgICAgIGF1dG8gaGVpZ2h0VXNlc0JvcmRlckJveCA9IGxheW91dFN0YXRlKCku
aW5RdWlya3NNb2RlKCkgfHwgY2VsbEJveC5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemlu
Zzo6Qm9yZGVyQm94OwogICAgICAgICBpZiAoaGVpZ2h0VXNlc0JvcmRlckJveCkKICAgICAgICAg
ICAgICpjb21wdXRlZEhlaWdodCAtPSBjZWxsQm94R2VvbWV0cnkudmVydGljYWxNYXJnaW5Cb3Jk
ZXJBbmRQYWRkaW5nKCk7CkBAIC00MDcsNyArNDA3LDcgQEAgSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZFByZWZlcnJlZFdpZHRoRm9yQ29s
dW0KIAogICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoID0gZm9ybWF0dGluZ1N0YXRlLmludHJp
bnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY2VsbEJveCk7CiAgICAgICAgIGlmICghaW50cmlu
c2ljV2lkdGgpIHsKLSAgICAgICAgICAgIGludHJpbnNpY1dpZHRoID0gZ2VvbWV0cnkoKS5pbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbCgqY2VsbCk7CisgICAgICAgICAgICBpbnRyaW5z
aWNXaWR0aCA9IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkuaW50cmluc2ljV2lkdGhDb25zdHJh
aW50c0ZvckNlbGwoKmNlbGwpOwogICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY2VsbEJveCwgKmludHJpbnNpY1dpZHRoKTsKICAg
ICAgICAgfQogICAgICAgICAvLyBTcGFubmVyIGNlbGxzIHB1dCB0aGVpciBpbnRyaW5zaWMgd2lk
dGhzIG9uIHRoZSBpbml0aWFsIHNsb3RzLgpAQCAtNDI2LDcgKzQyNiw3IEBAIEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRQcmVmZXJyZWRX
aWR0aEZvckNvbHVtCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYXV0byB3aWR0aCA9
IGNvbHVtbkJveC0+Y29sdW1uV2lkdGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gd2lkdGg7
Ci0gICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5jb21wdXRlZENvbHVtbldpZHRoKCpjb2x1
bW5Cb3gpOworICAgICAgICAgICAgcmV0dXJuIHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29t
cHV0ZWRDb2x1bW5XaWR0aCgqY29sdW1uQm94KTsKICAgICAgICAgfTsKICAgICAgICAgZml4ZWRX
aWR0aENvbHVtbnMuYXBwZW5kKGZpeGVkV2lkdGgoKSk7CiAgICAgfQpAQCAtNTE4LDcgKzUxOCw3
IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRy
YVNwYWNlKExheW91dFVuaXQgYXZhaWxhYmxlCiAgICAgICAgICAgICAvLyBUaGUgbWluaW11bSBo
ZWlnaHQgb2YgYSByb3cgKHdpdGhvdXQgc3Bhbm5pbmctcmVsYXRlZCBoZWlnaHQgZGlzdHJpYnV0
aW9uKSBpcyBkZWZpbmVkIGFzIHRoZSBoZWlnaHQgb2YgYW4gaHlwb3RoZXRpY2FsCiAgICAgICAg
ICAgICAvLyBsaW5lYm94IGNvbnRhaW5pbmcgdGhlIGNlbGxzIG9yaWdpbmF0aW5nIGluIHRoZSBy
b3cuCiAgICAgICAgICAgICBhdXRvJiBjZWxsID0gc2xvdC5jZWxsKCk7Ci0gICAgICAgICAgICBj
ZWxsLnNldEJhc2VsaW5lKGdlb21ldHJ5KCkudXNlZEJhc2VsaW5lRm9yQ2VsbChjZWxsLmJveCgp
KSk7CisgICAgICAgICAgICBjZWxsLnNldEJhc2VsaW5lKHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5
KCkudXNlZEJhc2VsaW5lRm9yQ2VsbChjZWxsLmJveCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVB
bmREaXN0cmlidXRlRXh0cmFTcGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZQogICAgIH0KIH0KIAot
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnko
KSBjb25zdAorVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
dGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdAogewogICAgIHJldHVybiBUYWJsZUZvcm1h
dHRpbmdHZW9tZXRyeSgqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJs
ZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBiMDhhODc3
YTFkMGI4ZDZhZTY1ZWQyM2UxZDk2NmVjOTFhMTliZmE1Li5lNjhjMmMzNzFjZGRmODY3ZTcxMWI0
ZjA2MzM1MmRjNDAyOWZjYzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGlu
Z0NvbnRleHQuaApAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgY29tcHV0ZWRQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMoKTsKICAgICB2b2lk
IGNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFTcGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6
b250YWxTcGFjZSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlVmVydGljYWxTcGFjZSk7
CiAKLSAgICBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0OworICAgIFRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3Q7CiAg
ICAgY29uc3QgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiAgICAgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRp
bmdTdGF0ZSgpIHsgcmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0
aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUxheW91dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5
b3V0LmNwcAppbmRleCBiYjE4ZTEyN2VlYzAxODVjYjc1MmY3NDFiYzNlZjI0ZTUyNzkwYjIwLi5l
YmZiZTlkMzFjZTVjYmVhN2MxMzA5ZmMyZGU4ZjhjZTczNTIxNzQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1Rh
YmxlTGF5b3V0LmNwcApAQCAtMjcyLDcgKzI3Miw3IEBAIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6
OlRhYmxlTGF5b3V0OjpEaXN0cmlidXRlZFNwYWNlcyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpU
CiAgICAgICAgIGF1dG8gbWF4aW11bUNvbHVtbkFzY2VudCA9IElubGluZUxheW91dFVuaXQgeyB9
OwogICAgICAgICBhdXRvIG1heGltdW1Db2x1bW5EZXNjZW50ID0gSW5saW5lTGF5b3V0VW5pdCB7
IH07CiAgICAgICAgIC8vIEluaXRpYWwgbWluaW11bSBoZWlnaHQgaXMgdGhlIGNvbXB1dGVkIGhl
aWdodCBpZiBhdmFpbGFibGUgPHRyIHN0eWxlPSJoZWlnaHQ6IDEwMHB4Ij48dGQ+PC90ZD48L3Ry
PgotICAgICAgICByb3dIZWlnaHRbcm93SW5kZXhdID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeSgpLmNvbXB1dGVkSGVpZ2h0KHJvd3MubGlzdCgpW3Jvd0luZGV4XS5ib3goKSwgYXZhaWxh
YmxlVmVydGljYWxTcGFjZSkudmFsdWVPcigwX2x1KTsKKyAgICAgICAgcm93SGVpZ2h0W3Jvd0lu
ZGV4XSA9IGZvcm1hdHRpbmdDb250ZXh0KCkudGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21w
dXRlZEhlaWdodChyb3dzLmxpc3QoKVtyb3dJbmRleF0uYm94KCksIGF2YWlsYWJsZVZlcnRpY2Fs
U3BhY2UpLnZhbHVlT3IoMF9sdSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNvbHVtbkluZGV4ID0g
MDsgY29sdW1uSW5kZXggPCBjb2x1bW5zLnNpemUoKTsgKytjb2x1bW5JbmRleCkgewogICAgICAg
ICAgICAgYXV0byYgc2xvdCA9ICptX2dyaWQuc2xvdCh7IGNvbHVtbkluZGV4LCByb3dJbmRleCB9
KTsKICAgICAgICAgICAgIGlmIChzbG90LmlzUm93U3Bhbm5lZCgpKQpAQCAtMzAyLDcgKzMwMiw3
IEBAIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlTGF5b3V0OjpEaXN0cmlidXRlZFNwYWNl
cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpUCiAgICAgICAgIGlmIChzbG90Lmhhc1Jvd1NwYW4o
KSkKICAgICAgICAgICAgIHJldHVybiBHcmlkU3BhY2UgeyBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KHNsb3QuY2VsbCgpLmJveCgpKS5ib3JkZXJCb3hIZWlnaHQoKSwgZm9ybWF0
dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChzbG90LmNlbGwoKS5ib3goKSkuYm9yZGVyQm94
SGVpZ2h0KCkgfTsKICAgICAgICAgYXV0byYgcm93cyA9IG1fZ3JpZC5yb3dzKCk7Ci0gICAgICAg
IGF1dG8gY29tcHV0ZWRSb3dIZWlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5KCku
Y29tcHV0ZWRIZWlnaHQocm93cy5saXN0KClbcm93SW5kZXhdLmJveCgpLCB7IH0pOworICAgICAg
ICBhdXRvIGNvbXB1dGVkUm93SGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQoKS50YWJsZUZvcm1h
dHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkSGVpZ2h0KHJvd3MubGlzdCgpW3Jvd0luZGV4XS5ib3go
KSwgeyB9KTsKICAgICAgICAgYXV0byBoZWlnaHQgPSBzdGQ6Om1heDxmbG9hdD4ocm93SGVpZ2h0
W3Jvd0luZGV4XSwgY29tcHV0ZWRSb3dIZWlnaHQudmFsdWVPcigwX2x1KSk7CiAgICAgICAgIHJl
dHVybiBHcmlkU3BhY2UgeyBoZWlnaHQsIGhlaWdodCB9OwogICAgIH0pOwo=
</data>
<flag name="commit-queue"
          id="450767"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>