<?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>229299</bug_id>
          
          <creation_ts>2021-08-19 10:59:54 -0700</creation_ts>
          <short_desc>[LFC][IFC] Move LineBoxBuilder to a dedicated file</short_desc>
          <delta_ts>2021-09-04 15:19:55 -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>DUPLICATE</resolution>
          <dup_id>229616</dup_id>
          
          <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>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>1785520</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-08-19 10:59:54 -0700</bug_when>
    <thetext>It&apos;s in preparation for being able re-build a LineBox using the final runs (as opposed to using the output of a line builder)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785522</commentid>
    <comment_count>1</comment_count>
      <attachid>435885</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-08-19 11:03:33 -0700</bug_when>
    <thetext>Created attachment 435885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787683</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-26 11:00:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/82398368&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790517</commentid>
    <comment_count>3</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-09-04 15:19:55 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 229616 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435885</attachid>
            <date>2021-08-19 11:03:33 -0700</date>
            <delta_ts>2021-08-19 11:03:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229299-20210819110333.patch</filename>
            <type>text/plain</type>
            <size>48796</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2YxZWM0OGQwYzJkN2Zh
YTg0YmY3ZDdjMTNlMjYzOGViMzkyNmYzYy4uOThiZTE4OWQ4YmNjMTRjOGMwZWQ2NDk1NjY4ZjVh
NDM2ZTg0MzU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA4LTE5ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIE1vdmUgTGlu
ZUJveEJ1aWxkZXIgdG8gYSBkZWRpY2F0ZWQgZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5Mjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3Igc3VwcG9y
dGluZyBwYXJ0aWFsIGxheW91dC4gSW4gY2VydGFpbiBjYXNlcyB3ZSB3aWxsIG5lZWQgdG8gcmUt
YnVpbGQgdGhlIExpbmVCb3gKKyAgICAgICAgdXNpbmcgdGhlIGZpbmFsIHJ1bnMuIEN1cnJlbnRs
eSB3ZSBidWlsZCB0aGUgTGluZUJveCBvbmx5IHVzaW5nIHRoZSByZXN1bHQgb2YgdGhlIGxpbmUg
YnJlYWtpbmcuIAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRyeUZvckxp
bmVDb250ZW50KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQm94QnVpbGRlcjo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6cm9vdEJveCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpsYXlvdXRTdGF0
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWls
ZGVyOjppc1Jvb3RMYXlvdXRCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpoYW5naW5nR2x5cGhXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6Omhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6TGluZUJveEJ1aWxkZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6YnVpbGQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6c2V0VmVydGljYWxH
ZW9tZXRyeUZvcklubGluZUJveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
Lmg6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSW52
YWxpZGF0aW9uU2NvcGUuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVMaW5lQm94QnVpbGRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRy
eS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmhhbmdpbmdHbHlwaFdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpMaW5lQm94QnVpbGRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpidWlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9y
SW5saW5lQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxk
ZXI6OmNvbnN0cnVjdElubGluZUxldmVsQm94ZXMpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hCdWlsZGVyLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1h
dHRpbmdHZW9tZXRyeS5oLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRl
cjo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQm94QnVpbGRlcjo6cm9vdEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCb3hCdWlsZGVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjppc1Jvb3RMYXlvdXRCb3ggY29uc3QpOgorCiAyMDIxLTA4
LTE5ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRl
Z3JhdGlvbl0gU3RhcnQgdXNpbmcgSW52YWxpZGF0aW9uU2NvcGUgdG8gY2xlYW4gcnVucyBhbmQg
bGluZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggMGFiMDU1Y2JkMWRlN2I3ZDU0OGExZWJkM2ZiMjZiMjIy
ZjQ0OTc1ZS4uZjFmYTM4MTA5NzMxZGJkMjM5MGFiZjRiMzQyNDI0OTAzYzMzZmQ0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTE1NDIsNiArMTU0Miw3IEBAIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUludmFsaWRhdGlvbi5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUl0ZW0uY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVMaW5lLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGlu
ZUJveC5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hC
dWlsZGVyLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJv
eFZlcnRpY2FsQWxpZ25lci5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUxpbmVCdWlsZGVyLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lVGV4dEl0ZW0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYThhNzZhNDExZTNmZmI0YTRhMzRhYWNmN2UzNzUxMmYwMzAw
ZTlkOS4uNmEwOWNkZjljZGM1ZGQwYmY5NTNlMjIzZGFjYjhhY2NiNDA1M2Q5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE1
Niw2ICsyMTU2LDcgQEAKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFCIC8qIExheW91dFN0YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTND
NDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMyQjJFMDAyRjI5QUIgLyog
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZGOTE0MjExMjUxNTIxMzgwMDRFNEZFQSAvKiBJbmxpbmVMaW5lR2VvbWV0cnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGOTE0MjBGMjUx
NTIxMzcwMDRFNEZFQSAvKiBJbmxpbmVMaW5lR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2Rjk4NUNCMDI2Q0VDQjRDMDA1N0ZEMUQg
LyogSW5saW5lTGluZUJveEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGOTg1Q0FFMjZDRUNCNEMwMDU3RkQxRCAvKiBJbmxpbmVMaW5lQm94
QnVpbGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTZGOTk1QTE2MUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5bmMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGOTk1QTE0MUE3MDc1NjIwMEE3MzVG
NCAvKiBXZWJHTFN5bmMuaCAqLzsgfTsKIAkJNkY5OTVBMjAxQTcwNzhCMTAwQTczNUY0IC8qIFdl
YkdMUXVlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGOTk1QTE4MUE3MDc4QjEwMEE3MzVGNCAvKiBXZWJHTFF1ZXJ5LmggKi87IH07CiAJCTZGOTk1
QTIyMUE3MDc4QjEwMEE3MzVGNCAvKiBXZWJHTFNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGOTk1QTFBMUE3MDc4QjEwMEE3MzVGNCAvKiBX
ZWJHTFNhbXBsZXIuaCAqLzsgfTsKQEAgLTEwMDUzLDYgKzEwMDU0LDggQEAKIAkJNkY4RjQ2MDEy
MUIwM0JCNDAwNDFBQzNBIC8qIEZvcm1hdHRpbmdRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRm9ybWF0dGluZ1F1aXJrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
OEY0NjAzMjFCMDNCQzYwMDQxQUMzQSAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkY5MTQyMEYyNTE1MjEzNzAwNEU0RkVBIC8qIElubGluZUxpbmVHZW9t
ZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lR2VvbWV0
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkY5ODVDQUUyNkNFQ0I0QzAwNTdG
RDFEIC8qIElubGluZUxpbmVCb3hCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElubGluZUxpbmVCb3hCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTZGOTg1Q0IxMjZDRUNCNzMwMDU3RkQxRCAvKiBJbmxpbmVMaW5lQm94QnVpbGRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQm94QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGOTk1QTA5MUE3MDcwRTYwMEE3MzVGNCAvKiBXZWJHTFF1ZXJ5
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTFF1ZXJ5LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkY5OTVBMEExQTcwNzBFNjAwQTczNUY0IC8qIFdlYkdMU2FtcGxl
ci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xTYW1wbGVyLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY5OTVBMEIxQTcwNzBFNjAwQTczNUY0IC8qIFdlYkdMU3lu
Yy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xTeW5jLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NDE1LDYgKzE4NDE4LDggQEAKIAkJCQk2RjBDRDY5NDIyOUVE
MzI3MDBDNTk5NEUgLyogSW5saW5lTGluZS5oICovLAogCQkJCTZGNjlBNzk5MjRENkZBQjgwMEU2
Qjg1RCAvKiBJbmxpbmVMaW5lQm94LmNwcCAqLywKIAkJCQk2RkIyNDAwMzIzREZGMTI3MDA3OTY0
NTggLyogSW5saW5lTGluZUJveC5oICovLAorCQkJCTZGOTg1Q0FFMjZDRUNCNEMwMDU3RkQxRCAv
KiBJbmxpbmVMaW5lQm94QnVpbGRlci5oICovLAorCQkJCTZGOTg1Q0IxMjZDRUNCNzMwMDU3RkQx
RCAvKiBJbmxpbmVMaW5lQm94QnVpbGRlci5jcHAgKi8sCiAJCQkJNkYyNUIyMDAyMjBBODVBQjAw
MDAwMTFCIC8qIElubGluZUxpbmVCdWlsZGVyLmNwcCAqLywKIAkJCQk2RjI2RUI0NjIzNDAwNEE1
MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1aWxkZXIuaCAqLywKIAkJCQk2RjkxNDIwRjI1MTUyMTM3
MDA0RTRGRUEgLyogSW5saW5lTGluZUdlb21ldHJ5LmggKi8sCkBAIC0zMjQxOCw2ICszMjQyMyw3
IEBACiAJCQkJRTVGMDZBRTcyNEQ0ODQ3QjAwQkJDNEY4IC8qIERhdGVUaW1lRmllbGRFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNUYwNkFGMzI0RDRBQUU0MDBCQkM0RjggLyogRGF0ZVRp
bWVGaWVsZEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNTFENkExRjI0RTFFMjU1MDA4
OTFDRkEgLyogRGF0ZVRpbWVGaWVsZHNTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkY5ODVD
QjAyNkNFQ0I0QzAwNTdGRDFEIC8qIElubGluZUxpbmVCb3hCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NTNFQjYzNzE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY1NUIzREJBMTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUxvY2Fs
SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNUYwNkFFQjI0RDQ5QkY3MDBCQkM0Rjgg
LyogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCAzMjk2MDIw
NTI3NDBhODJkY2U3YjNjZDY3OWMyZWVlNmJmYThlZDQ5Li5jYzE5N2M0M2UxNmYwNGU3MmJlOWQ2
OGNmZjg3ZGE3MDRlMzYxMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lSW52YWxpZGF0aW9uU2NvcGUuaCIKICNp
bmNsdWRlICJJbmxpbmVMaW5lQm94LmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveEJ1aWxkZXIu
aCIKICNpbmNsdWRlICJJbmxpbmVMaW5lUnVuLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0u
aCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKQEAgLTU1OCw3ICs1NTksNyBAQCBJbmxpbmVSZWN0
IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChj
b25zdCBMaW5lQnVpbAogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRp
bmdTdGF0ZSgpOwogICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRoaXMtPmZvcm1hdHRp
bmdHZW9tZXRyeSgpOwogCi0gICAgZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3goZm9ybWF0dGlu
Z0dlb21ldHJ5LmxpbmVCb3hGb3JMaW5lQ29udGVudChsaW5lQ29udGVudCkpOworICAgIGZvcm1h
dHRpbmdTdGF0ZS5hZGRMaW5lQm94KExpbmVCb3hCdWlsZGVyKCp0aGlzKS5idWlsZChsaW5lQ29u
dGVudCkpOwogICAgIGNvbnN0IGF1dG8mIGxpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUubGluZUJv
eGVzKCkubGFzdCgpOwogICAgIGF1dG8gbGluZUluZGV4ID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVz
KCkuc2l6ZSgpOwogICAgIGF1dG8mIGxpbmVCb3hMb2dpY2FsUmVjdCA9IGxpbmVCb3gubG9naWNh
bFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkuY3BwCmluZGV4IDQwMTZjNTBlMWI5MDg2OGYxNTBmOGI2MWZlYjk1MTliNTRiOTdiNWQuLmNl
MmEyMTlkODMwNjRiN2IzNWQ1MjU5YmViNDgzODRkYjE1NGVjMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRp
bmdHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmgiCi0jaW5j
bHVkZSAiSW5saW5lTGluZUJveFZlcnRpY2FsQWxpZ25lci5oIgogI2luY2x1ZGUgIkxheW91dEJv
eC5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgogI2luY2x1ZGUgIkxheW91dFJl
cGxhY2VkQm94LmgiCkBAIC00MSwzMDggKzQwLDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgTGF5b3V0IHsKIAotY2xhc3MgTGluZUJveEJ1aWxkZXIgewotcHVibGljOgotICAg
IExpbmVCb3hCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jik7Ci0KLSAgICBM
aW5lQm94IGJ1aWxkKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYpOwotCi1wcml2YXRl
OgotICAgIHZvaWQgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChJbmxpbmVMZXZlbEJv
eCYpIGNvbnN0OwotICAgIHZvaWQgY29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExp
bmVCb3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7Ci0KLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZv
cm1hdHRpbmdDb250ZXh0OyB9Ci0gICAgY29uc3QgQm94JiByb290Qm94KCkgY29uc3QgeyByZXR1
cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0KLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7
IH0KLQotICAgIGJvb2wgaXNSb290TGF5b3V0Qm94KGNvbnN0IENvbnRhaW5lckJveCYgY29udGFp
bmVyQm94KSBjb25zdCB7IHJldHVybiAmY29udGFpbmVyQm94ID09ICZyb290Qm94KCk7IH0KLQot
cHJpdmF0ZToKLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDsKLX07Ci0KLXN0YXRpYyBJbmxpbmVMYXlvdXRVbml0IGhhbmdpbmdHbHlw
aFdpZHRoKElubGluZUxheW91dFVuaXQgZXh0cmFIb3Jpem9udGFsU3BhY2UsIGNvbnN0IExpbmU6
OlJ1bkxpc3QmIHJ1bnMsIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotewotICAg
IC8vIFdoZW4gYSBnbHlwaCBhdCB0aGUgc3RhcnQgb3IgZW5kIGVkZ2Ugb2YgYSBsaW5lIGhhbmdz
LCBpdCBpcyBub3QgY29uc2lkZXJlZCB3aGVuIG1lYXN1cmluZyB0aGUgbGluZeKAmXMgY29udGVu
dHMgZm9yIGZpdCwgYWxpZ25tZW50LCBvciBqdXN0aWZpY2F0aW9uLgotICAgIC8vIERlcGVuZGlu
ZyBvbiB0aGUgbGluZeKAmXMgYWxpZ25tZW50L2p1c3RpZmljYXRpb24sIHRoaXMgY2FuIHJlc3Vs
dCBpbiB0aGUgbWFyayBiZWluZyBwbGFjZWQgb3V0c2lkZSB0aGUgbGluZSBib3guCi0gICAgLy8g
aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10ZXh0LTMvI2hhbmdpbmcKLSAgICBhdXRvIGlz
Q29uZGl0aW9uYWwgPSBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ7Ci0gICAgYXV0byBoYW5n
aW5nV2lkdGggPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IFdU
Rjo6bWFrZVJldmVyc2VkUmFuZ2UocnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0lubGluZUJv
eFN0YXJ0KCkgfHwgcnVuLmlzSW5saW5lQm94RW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBpc0NvbmRpdGlv
bmFsID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNwYWNlLgot
ICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdy
YXApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYSBub3Jt
YWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAg
IGhhbmdpbmdXaWR0aCArPSBydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKTsKLSAgICB9Ci0g
ICAgLy8gSW4gc29tZSBjYXNlcywgYSBnbHlwaCBhdCB0aGUgZW5kIG9mIGEgbGluZSBjYW4gY29u
ZGl0aW9uYWxseSBoYW5nOiBpdCBoYW5ncyBvbmx5IGlmIGl0IGRvZXMgbm90IG90aGVyd2lzZSBm
aXQgaW4gdGhlIGxpbmUgcHJpb3IgdG8ganVzdGlmaWNhdGlvbi4KLSAgICByZXR1cm4gIWlzQ29u
ZGl0aW9uYWwgfHwgZXh0cmFIb3Jpem9udGFsU3BhY2UgPCAwID8gaGFuZ2luZ1dpZHRoIDogSW5s
aW5lTGF5b3V0VW5pdCB7IH07Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPElubGluZUxheW91
dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVu
cywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxX
aWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBib29sIGlzTGFzdExp
bmUpCi17Ci0gICAgYXV0byBleHRyYUhvcml6b250YWxTcGFjZSA9IGxpbmVMb2dpY2FsV2lkdGgg
LSBjb250ZW50TG9naWNhbFdpZHRoOwotICAgIC8vIERlcGVuZGluZyBvbiB0aGUgbGluZeKAmXMg
YWxpZ25tZW50L2p1c3RpZmljYXRpb24sIHRoZSBoYW5naW5nIGdseXBoIGNhbiBiZSBwbGFjZWQg
b3V0c2lkZSB0aGUgbGluZSBib3guCi0gICAgZXh0cmFIb3Jpem9udGFsU3BhY2UgKz0gaGFuZ2lu
Z0dseXBoV2lkdGgoZXh0cmFIb3Jpem9udGFsU3BhY2UsIHJ1bnMsIGlzTGFzdExpbmUpOwotICAg
IGlmIChleHRyYUhvcml6b250YWxTcGFjZSA8PSAwKQotICAgICAgICByZXR1cm4geyB9OwotCi0g
ICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0gewotICAgICAgICBpZiAo
dGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAgICByZXR1cm4g
dGV4dEFsaWduOwotICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhl
IG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAg
Ly8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lz
ZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAotICAgICAgICAvLyB0aGUgbGFzdCBsaW5l
IGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1h
bGlnbmVkLgotICAgICAgICBpZiAoaXNMYXN0TGluZSB8fCAoIXJ1bnMuaXNFbXB0eSgpICYmIHJ1
bnMubGFzdCgpLmlzTGluZUJyZWFrKCkpKQotICAgICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1v
ZGU6OlN0YXJ0OwotICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKLSAgICB9
OwotCi0gICAgc3dpdGNoIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSkgewotICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExl
ZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
V2ViS2l0UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJldHVy
biBleHRyYUhvcml6b250YWxTcGFjZTsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoK
LSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgcmV0dXJuIGV4
dHJhSG9yaXpvbnRhbFNwYWNlIC8gMjsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6
Ci0gICAgICAgIC8vIFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgaXMgYSBydW4gYWxpZ25tZW50IChh
bmQgd2Ugb25seSBkbyBpbmxpbmUgYm94IGFsaWdubWVudCBoZXJlKQotICAgICAgICByZXR1cm4g
eyB9OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiB7IH07Ci19Ci0KLUxpbmVCb3hCdWlsZGVyOjpMaW5lQm94QnVpbGRlcihjb25z
dCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAg
OiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotewot
fQotCi1MaW5lQm94IExpbmVCb3hCdWlsZGVyOjpidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGlu
ZUNvbnRlbnQmIGxpbmVDb250ZW50KQotewotICAgIGF1dG8mIHJ1bnMgPSBsaW5lQ29udGVudC5y
dW5zOwotICAgIGF1dG8gbGluZUxvZ2ljYWxXaWR0aCA9IGxpbmVDb250ZW50LmxpbmVMb2dpY2Fs
V2lkdGg7Ci0gICAgYXV0byBjb250ZW50TG9naWNhbFdpZHRoID0gbGluZUNvbnRlbnQuY29udGVu
dExvZ2ljYWxXaWR0aDsKLSAgICBhdXRvIGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlv
dXQ6Omhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQocnVucywgcm9vdEJveCgpLnN0eWxlKCkudGV4
dEFsaWduKCksIGxpbmVMb2dpY2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250
ZW50LmlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgYXV0byBsaW5lQm94ID0gTGlu
ZUJveCB7IHJvb3RCb3goKSwgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVMb2dpY2Fs
V2lkdGgsIGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQudmFsdWVfb3IoSW5saW5lTGF5b3V0VW5p
dCB7IH0pLCBjb250ZW50TG9naWNhbFdpZHRoLCBsaW5lQ29udGVudC5ub25TcGFubmluZ0lubGlu
ZUxldmVsQm94Q291bnQgfTsKLSAgICBjb25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMo
bGluZUJveCwgcnVucyk7Ci0gICAgcmV0dXJuIGxpbmVCb3g7Ci19Ci0KLXZvaWQgTGluZUJveEJ1
aWxkZXI6OnNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goSW5saW5lTGV2ZWxCb3gmIGlu
bGluZUxldmVsQm94KSBjb25zdAotewotICAgIEFTU0VSVChpbmxpbmVMZXZlbEJveC5pc0lubGlu
ZUJveCgpIHx8IGlubGluZUxldmVsQm94LmlzTGluZUJyZWFrQm94KCkpOwotICAgIGF1dG8mIGZv
bnRNZXRyaWNzID0gaW5saW5lTGV2ZWxCb3guc3R5bGUoKS5mb250TWV0cmljcygpOwotICAgIElu
bGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7Ci0gICAgSW5saW5l
TGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOwotICAgIGF1dG8gbG9n
aWNhbEhlaWdodCA9IGFzY2VudCArIGRlc2NlbnQ7Ci0gICAgLy8gV2UgbmVlZCBmbG9vci9jZWls
IHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCi0gICAgaW5saW5l
TGV2ZWxCb3guc2V0QmFzZWxpbmUoZmxvb3JmKGFzY2VudCkpOwotICAgIGlubGluZUxldmVsQm94
LnNldERlc2NlbnQoY2VpbChkZXNjZW50KSk7Ci0gICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNh
bEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKLQotICAgIC8vIEZJWE1FOiBBZGp1c3QgbGF5b3V0IGJv
dW5kcyB3aXRoIGZhbGxiYWNrIGZvbnQgd2hlbiBhcHBsaWNhYmxlLgotICAgIGF1dG8mIHN0eWxl
ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKTsKLSAgICBhdXRvIGxpbmVIZWln
aHQgPSBzdHlsZS5saW5lSGVpZ2h0KCk7Ci0gICAgaWYgKGxpbmVIZWlnaHQuaXNOZWdhdGl2ZSgp
KSB7Ci0gICAgICAgIC8vIElmIGxpbmUtaGVpZ2h0IGNvbXB1dGVzIHRvIG5vcm1hbCBhbmQgZWl0
aGVyIHRleHQtZWRnZSBpcyBsZWFkaW5nIG9yIHRoaXMgaXMgdGhlIHJvb3QgaW5saW5lIGJveCwK
LSAgICAgICAgLy8gdGhlIGZvbnTigJlzIGxpbmUgZ2FwIG1ldHJpYyBtYXkgYWxzbyBiZSBpbmNv
cnBvcmF0ZWQgaW50byBBIGFuZCBEIGJ5IGFkZGluZyBoYWxmIHRvIGVhY2ggc2lkZSBhcyBoYWxm
LWxlYWRpbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMv
I2lubGluZS1oZWlnaHQKLSAgICAgICAgLy8gU2luY2UgdGV4dC1lZGdlIGlzIG5vdCBzdXBwb3J0
ZWQgeWV0IGFuZCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBsZWFkaW5nLCB3ZSBzaG91bGQganVzdCBh
cHBseSBpdCB0bwotICAgICAgICAvLyBhbGwgaW5saW5lIGJveGVzLgotICAgICAgICBhdXRvIGhh
bGZMaW5lR2FwID0gKGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5nKCkgLSBsb2dpY2FsSGVpZ2h0KSAv
IDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGluZUdhcDsKLSAgICAgICAgZGVzY2VudCArPSBo
YWxmTGluZUdhcDsKLSAgICB9IGVsc2UgewotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVI
ZWlnaHQgPSBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsKLSAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCBoYWxmTGVhZGluZyA9IChsaW5lSGVpZ2h0IC0gKGFzY2VudCArIGRlc2NlbnQpKSAvIDI7
Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGVhZGluZzsKLSAgICAgICAgZGVzY2VudCArPSBoYWxm
TGVhZGluZzsKLSAgICB9Ci0gICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxlZ2Fj
eSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCi0gICAgaW5saW5lTGV2ZWxCb3guc2V0TGF5
b3V0Qm91bmRzKElubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBmbG9vcmYoYXNjZW50KSwg
Y2VpbChkZXNjZW50KSB9KTsKLX0KLQotdm9pZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0QW5k
QWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bkxp
c3QmIHJ1bnMpCi17Ci0gICAgYXV0byYgcm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGlu
ZUJveCgpOwotICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3gocm9vdElubGluZUJv
eCk7Ci0KLSAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aCBzdXBwb3J0IGZvciBsaW5lLWhlaWdo
dCBjb250ZW50LgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZXhl
cmNpc2UgdGhlIGZhc3QgcGF0aCB3aGVuIHRoZSBsaW5lIGhhcyBubyBjb250ZW50IGF0IGFsbCwg
ZXZlbiBpbiBub24tc3RhbmRhcmRzIG1vZGUgb3Igd2l0aCBsaW5lLWhlaWdodCBzZXQuCi0gICAg
YXV0byBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50ID0gbGF5b3V0U3RhdGUoKS5pblN0YW5kYXJk
c01vZGUoKSAmJiByb290Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpOwot
ICAgIGF1dG8gdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCA9IFsmXShhdXRvJiBpbmxp
bmVMZXZlbEJveCwgc3RkOjpvcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4gYm94R2VvbWV0cnkg
PSBzdGQ6Om51bGxvcHQpIHsKLSAgICAgICAgaWYgKCFjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50
ID0gTGluZUJveFZlcnRpY2FsQWxpZ25lcjo6Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudEZvcklu
bGluZUxldmVsQm94KHJvb3RJbmxpbmVCb3gsIGlubGluZUxldmVsQm94LCBib3hHZW9tZXRyeSk7
Ci0gICAgfTsKLQotICAgIGF1dG8gY3JlYXRlV3JhcHBlZElubGluZUJveGVzID0gWyZdIHsKLSAg
ICAgICAgaWYgKHJ1bnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAv
LyBBbiBpbmxpbmUgYm94IG1heSBub3QgbmVjZXNzYXJpbHkgc3RhcnQgb24gdGhlIGN1cnJlbnQg
bGluZToKLSAgICAgICAgLy8gPHNwYW4gaWQ9b3V0ZXI+bGluZSBicmVhazxicj50aGlzIGNvbnRl
bnQncyBwYXJlbnQgaW5saW5lIGJveCgnb3V0ZXInKSA8c3BhbiBpZD1pbm5lcj5zdGFydHMgb24g
dGhlIHByZXZpb3VzIGxpbmU8L3NwYW4+PC9zcGFuPgotICAgICAgICAvLyBXZSBuZWVkIHRvIG1h
a2Ugc3VyZSB0aGF0IHRoZXJlJ3MgYW4gSW5saW5lTGV2ZWxCb3ggZm9yIGV2ZXJ5IGlubGluZSBi
b3ggdGhhdCdzIHByZXNlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gSW4gbmVz
dGluZyBjYXNlIHdlIG5lZWQgdG8gY3JlYXRlIElubGluZUxldmVsQm94ZXMgZm9yIHRoZSBpbmxp
bmUgYm94IGFuY2VzdG9ycy4KLSAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRvIGRvIGl0IG9uIHRo
ZSBmaXJzdCBydW4gYXMgYW55IHN1YnNlcXVlbnQgaW5saW5lIGNvbnRlbnQgaXMgZWl0aGVyIGF0
IHRoZSBzYW1lL2hpZ2hlciBuZXN0aW5nIGxldmVsIG9yCi0gICAgICAgIC8vIG5lc3RlZCB3aXRo
IGEgW2lubGluZSBib3ggc3RhcnRdIHJ1bi4KLSAgICAgICAgYXV0byYgZmlyc3RSdW4gPSBydW5z
WzBdOwotICAgICAgICBhdXRvJiBmaXJzdFJ1blBhcmVudExheW91dEJveCA9IGZpcnN0UnVuLmxh
eW91dEJveCgpLnBhcmVudCgpOwotICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIHRoZSBmb3Jt
YXR0aW5nIHJvb3QsIHdlIGNhbiBzdG9wIGhlcmUuIFRoaXMgaXMgcm9vdCBpbmxpbmUgYm94IGNv
bnRlbnQsIHRoZXJlJ3Mgbm8gbmVzdGluZyBpbmxpbmUgYm94IGZyb20gdGhlIHByZXZpb3VzIGxp
bmUocykKLSAgICAgICAgLy8gdW5sZXNzIHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgaXMgZm9yY2Vk
IG92ZXIgdG8gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gZS5nLgotICAgICAgICAvLyA8
c3Bhbj5ub3JtYWxseSB0aGUgaW5saW5lIGJveCBjbG9zaW5nIGZvcm1zIGEgY29udGludW91cyBj
b250ZW50PC9zcGFuPgotICAgICAgICAvLyA8c3Bhbj51bmxlc3MgaXQncyBmb3JjZWQgdG8gdGhl
IG5leHQgbGluZTxicj48L3NwYW4+Ci0gICAgICAgIGF1dG8gZmlyc3RSdW5OZWVkc0lubGluZUJv
eCA9IGZpcnN0UnVuLmlzSW5saW5lQm94RW5kKCk7Ci0gICAgICAgIGlmICghZmlyc3RSdW5OZWVk
c0lubGluZUJveCAmJiBpc1Jvb3RMYXlvdXRCb3goZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3gpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gbGF5b3V0Qm94
ZXNXaXRob3V0SW5saW5lQm94ZXM7Ci0gICAgICAgIGlmIChmaXJzdFJ1bk5lZWRzSW5saW5lQm94
KQotICAgICAgICAgICAgbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXMuYXBwZW5kKCZmaXJz
dFJ1bi5sYXlvdXRCb3goKSk7Ci0gICAgICAgIGF1dG8qIGFuY2VzdG9yID0gJmZpcnN0UnVuUGFy
ZW50TGF5b3V0Qm94OwotICAgICAgICB3aGlsZSAoIWlzUm9vdExheW91dEJveCgqYW5jZXN0b3Ip
KSB7Ci0gICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcy5hcHBlbmQoYW5j
ZXN0b3IpOwotICAgICAgICAgICAgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPnBhcmVudCgpOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbWlzc2luZyBMaW5lQm94OjpJbmxpbmVC
b3hlcyBzdGFydGluZyB3aXRoIHRoZSB0b3Btb3N0IGxheW91dCBib3guCi0gICAgICAgIGZvciAo
YXV0byogbGF5b3V0Qm94IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShsYXlvdXRCb3hlc1dpdGhv
dXRJbmxpbmVCb3hlcykpIHsKLSAgICAgICAgICAgIGF1dG8gaW5saW5lQm94ID0gSW5saW5lTGV2
ZWxCb3g6OmNyZWF0ZUlubGluZUJveCgqbGF5b3V0Qm94LCByb290SW5saW5lQm94LmxvZ2ljYWxM
ZWZ0KCksIGxpbmVCb3guY29udGVudExvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAgIHNldFZl
cnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goaW5saW5lQm94KTsKLSAgICAgICAgICAgIHVwZGF0
ZUNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoaW5saW5lQm94KTsKLSAgICAgICAgICAgIGxpbmVC
b3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShpbmxpbmVCb3gpKTsKLSAgICAgICAgfQotICAg
IH07Ci0gICAgY3JlYXRlV3JhcHBlZElubGluZUJveGVzKCk7Ci0KLSAgICBhdXRvIGxpbmVIYXND
b250ZW50ID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBydW5zKSB7Ci0gICAgICAgIGF1
dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byBydW5IYXNDb250
ZW50ID0gWyZdICgpIC0+IGJvb2wgewotICAgICAgICAgICAgQVNTRVJUKCFsaW5lSGFzQ29udGVu
dCk7Ci0gICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpIHx8IHJ1bi5p
c1NvZnRMaW5lQnJlYWsoKSB8fCBydW4uaXNIYXJkTGluZUJyZWFrKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAg
IC8vIEV2ZW4gbmVnYXRpdmUgaG9yaXpvbnRhbCBtYXJnaW4gbWFrZXMgdGhlIGxpbmUgImNvbnRl
bnRmdWwiLgotICAgICAgICAgICAgaWYgKHJ1bi5pc0lubGluZUJveFN0YXJ0KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGlubGluZUJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkgfHwgaW5saW5l
Qm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpIHx8IGlubGluZUJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0
KCkudmFsdWVfb3IoMF9sdSk7Ci0gICAgICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZUJveEdlb21ldHJ5Lm1hcmdpbkVuZCgpIHx8
IGlubGluZUJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCkgfHwgaW5saW5lQm94R2VvbWV0cnkucGFk
ZGluZ1JpZ2h0KCkudmFsdWVfb3IoMF9sdSk7Ci0gICAgICAgICAgICBpZiAocnVuLmlzV29yZEJy
ZWFrT3Bwb3J0dW5pdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9OwotICAgICAgICBsaW5lSGFzQ29udGVudCA9IGxpbmVIYXNDb250ZW50IHx8IHJ1bkhh
c0NvbnRlbnQoKTsKLSAgICAgICAgYXV0byBsb2dpY2FsTGVmdCA9IHJvb3RJbmxpbmVCb3gubG9n
aWNhbExlZnQoKSArIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICBpZiAocnVuLmlzQm94KCkp
IHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUxldmVsQm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBhdXRvIG1h
cmdpbkJveEhlaWdodCA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7
Ci0gICAgICAgICAgICBhdXRvIGFzY2VudCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAg
ICAgICAgaWYgKGxheW91dFN0YXRlKCkuc2hvdWxkTm90U3ludGhlc2l6ZUlubGluZUJsb2NrQmFz
ZWxpbmUoKSkgewotICAgICAgICAgICAgICAgIC8vIEludGVncmF0aW9uIGNvZGVwYXRoIGNvbnN0
cnVjdHMgcmVwbGFjZWQgYm94ZXMgZm9yIGlubGluZS1ibG9jayBjb250ZW50LgotICAgICAgICAg
ICAgICAgIEFTU0VSVChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKLSAgICAgICAgICAgICAg
ICBhc2NlbnQgPSAqZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCkuYmFzZWxpbmUoKTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkgewot
ICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNlbGluZSBvZiBhbiAnaW5saW5lLWJsb2NrJyBpcyB0
aGUgYmFzZWxpbmUgb2YgaXRzIGxhc3QgbGluZSBib3ggaW4gdGhlIG5vcm1hbCBmbG93LCB1bmxl
c3MgaXQgaGFzIGVpdGhlciBubyBpbi1mbG93IGxpbmUgYm94ZXMgb3IKLSAgICAgICAgICAgICAg
ICAvLyBpZiBpdHMgJ292ZXJmbG93JyBwcm9wZXJ0eSBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvdGhl
ciB0aGFuICd2aXNpYmxlJywgaW4gd2hpY2ggY2FzZSB0aGUgYmFzZWxpbmUgaXMgdGhlIGJvdHRv
bSBtYXJnaW4gZWRnZS4KLSAgICAgICAgICAgICAgICBhdXRvIHN5bnRoZXNpemVCYXNlbGluZSA9
ICFsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpIHx8ICFsYXlv
dXRCb3guc3R5bGUoKS5pc092ZXJmbG93VmlzaWJsZSgpOwotICAgICAgICAgICAgICAgIGlmIChz
eW50aGVzaXplQmFzZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGFzY2VudCA9IG1hcmdpbkJv
eEhlaWdodDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5mb3JtYXR0aW5nU3RhdGVGb3JJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dChkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOwot
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZSA9IGZvcm1hdHRpbmdTdGF0ZS5saW5l
cygpLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5l
ID0gbGFzdExpbmUubGluZUJveExvZ2ljYWxSZWN0KCkudG9wKCkgKyBsYXN0TGluZS5iYXNlbGlu
ZSgpOwotICAgICAgICAgICAgICAgICAgICBhc2NlbnQgPSBpbmxpbmVMZXZlbEJveEdlb21ldHJ5
Lm1hcmdpbkJlZm9yZSgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGlu
bGluZUxldmVsQm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlX29yKDApICsgaW5saW5lQmxv
Y2tCYXNlbGluZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgICAgICAgICAgYXNjZW50ID0gZG93bmNh
c3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCkuYmFzZWxpbmUoKS52YWx1ZV9vcihtYXJnaW5Cb3hI
ZWlnaHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFzY2VudCA9IG1hcmdp
bkJveEhlaWdodDsKLSAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHN0ZDo6bWF4KDBfbHUsIGlu
bGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSk7Ci0gICAgICAgICAgICBhdXRvIGF0
b21pY0lubGluZUxldmVsQm94ID0gSW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUF0b21pY0lubGluZUxl
dmVsQm94KGxheW91dEJveCwgbG9naWNhbExlZnQsIHsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5i
b3JkZXJCb3hXaWR0aCgpLCBtYXJnaW5Cb3hIZWlnaHQgfSk7Ci0gICAgICAgICAgICBhdG9taWNJ
bmxpbmVMZXZlbEJveC5zZXRCYXNlbGluZShhc2NlbnQpOwotICAgICAgICAgICAgYXRvbWljSW5s
aW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRzKElubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMg
eyBhc2NlbnQsIG1hcmdpbkJveEhlaWdodCAtIGFzY2VudCB9KTsKLSAgICAgICAgICAgIHVwZGF0
ZUNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoYXRvbWljSW5saW5lTGV2ZWxCb3gsIGlubGluZUxl
dmVsQm94R2VvbWV0cnkpOwotICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChX
VEZNb3ZlKGF0b21pY0lubGluZUxldmVsQm94KSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQoKSkgewotICAgICAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBkb24ndCBrbm93IHlldCBob3cgd2lkZSB0aGlzIGlubGlu
ZSBib3ggaXMuIExldCdzIGFzc3VtZSBpdCdzIGFzIGxvbmcgYXMgdGhlIGxpbmUgaXMKLSAgICAg
ICAgICAgIC8vIGFuZCBhZGp1c3QgaXQgbGF0ZXIgaWYgd2UgY29tZSBhY3Jvc3MgYW4gaW5saW5l
Qm94RW5kIHJ1biAoc2VlIGJlbG93KS4KLSAgICAgICAgICAgIGF1dG8gaW5pdGlhbExvZ2ljYWxX
aWR0aCA9IGxpbmVCb3guY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7
Ci0gICAgICAgICAgICBBU1NFUlQoaW5pdGlhbExvZ2ljYWxXaWR0aCA+PSAwKTsKLSAgICAgICAg
ICAgIC8vIElubGluZSBib3ggcnVuIGlzIGJhc2VkIG9uIG1hcmdpbiBib3guIExldCdzIGNvbnZl
cnQgaXQgdG8gYm9yZGVyIGJveC4KLSAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnQgPSBzdGQ6
Om1heCgwX2x1LCBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCku
bWFyZ2luU3RhcnQoKSk7Ci0gICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBtYXJnaW5TdGFydDsK
LSAgICAgICAgICAgIGluaXRpYWxMb2dpY2FsV2lkdGggLT0gbWFyZ2luU3RhcnQ7Ci0gICAgICAg
ICAgICBhdXRvIGlubGluZUJveCA9IElubGluZUxldmVsQm94OjpjcmVhdGVJbmxpbmVCb3gobGF5
b3V0Qm94LCBsb2dpY2FsTGVmdCwgaW5pdGlhbExvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICBz
ZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGlubGluZUJveCk7Ci0gICAgICAgICAgICB1
cGRhdGVDYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGlubGluZUJveCk7Ci0gICAgICAgICAgICBs
aW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkp
IHsKLSAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRoZSBpbmxp
bmUgYm94IGNsb3NlcyBvbiB0aGlzIGxpbmUuCi0gICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3gg
PSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotICAgICAgICAgICAgLy8gSW5s
aW5lIGJveCBydW4gaXMgYmFzZWQgb24gbWFyZ2luIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBi
b3JkZXIgYm94LgotICAgICAgICAgICAgYXV0byBtYXJnaW5FbmQgPSBzdGQ6Om1heCgwX2x1LCBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luRW5kKCkp
OwotICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsUmlnaHQgPSBsb2dpY2FsTGVmdCAr
IHJ1bi5sb2dpY2FsV2lkdGgoKSAtIG1hcmdpbkVuZDsKLSAgICAgICAgICAgIGlubGluZUJveC5z
ZXRMb2dpY2FsV2lkdGgoaW5saW5lQm94TG9naWNhbFJpZ2h0IC0gaW5saW5lQm94LmxvZ2ljYWxM
ZWZ0KCkpOwotICAgICAgICAgICAgdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChpbmxp
bmVCb3gpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJ1
bi5pc1RleHQoKSB8fCBydW4uaXNTb2Z0TGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBBZGp1c3Qgbm9uLWVtcHR5IGlubGluZSBib3ggaGVpZ2h0IHdoZW4gZ2x5cGhzIGZyb20g
dGhlIG5vbi1wcmltYXJ5IGZvbnQgc3RyZXRjaCB0aGUgYm94LgotICAgICAgICAgICAgbGluZUJv
eC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpLnNldEhhc0Nv
bnRlbnQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChy
dW4uaXNIYXJkTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGF1dG8gbGluZUJyZWFrQm94ID0g
SW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUxpbmVCcmVha0JveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0
KTsKLSAgICAgICAgICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3gobGluZUJyZWFr
Qm94KTsKLSAgICAgICAgICAgIHVwZGF0ZUNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQobGluZUJy
ZWFrQm94KTsKLSAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShs
aW5lQnJlYWtCb3gpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChydW4uaXNXb3JkQnJlYWtPcHBvcnR1bml0eSgpKSB7Ci0gICAgICAgICAgICBsaW5lQm94
LmFkZElubGluZUxldmVsQm94KElubGluZUxldmVsQm94OjpjcmVhdGVHZW5lcmljSW5saW5lTGV2
ZWxCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbGlu
ZUJveC5zZXRIYXNDb250ZW50KGxpbmVIYXNDb250ZW50KTsKLSAgICBhdXRvIHZlcnRpY2FsQWxp
Z25lciA9IExpbmVCb3hWZXJ0aWNhbEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpIH07Ci0g
ICAgY2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCA9IGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQg
fHwgIWxpbmVIYXNDb250ZW50OwotICAgIHZlcnRpY2FsQWxpZ25lci5hbGlnbihsaW5lQm94LCBj
YW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KTsKLX0KLQogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
OjpJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogICAgIDogRm9ybWF0dGluZ0dlb21ldHJ5KGlubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KQogewogfQogCi1MaW5lQm94IElubGluZUZvcm1hdHRpbmdHZW9t
ZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVu
dCYgbGluZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExpbmVCb3hCdWlsZGVyKGZvcm1h
dHRpbmdDb250ZXh0KCkpLmJ1aWxkKGxpbmVDb250ZW50KTsKLX0KLQogSW5saW5lTGF5b3V0VW5p
dCBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmxvZ2ljYWxUb3BGb3JOZXh0TGluZShjb25zdCBM
aW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBJbmxpbmVMYXlvdXRVbml0IHBy
ZXZpb3VzTGluZUxvZ2ljYWxCb3R0b20sIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdD
b250ZXh0KSBjb25zdAogewogICAgIC8vIE5vcm1hbGx5IHRoZSBuZXh0IGxpbmUncyBsb2dpY2Fs
IHRvcCBpcyB0aGUgcHJldmlvdXMgbGluZSdzIGxvZ2ljYWwgYm90dG9tLCBidXQgd2hlbiB0aGUg
bGluZSBlbmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRy
eS5oCmluZGV4IGUwZWVmN2M4ZmVkMjUyNmQ1NjRmZjU4NTBhMmVlNjdhOGM2NTFiMTcuLmY5NjZm
Njk5NDY2NjNlMjQ0N2RjNzJhYTFkMTM2YmU2ZjhmMjMxOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdH
ZW9tZXRyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC00MCw3ICs0MCw2IEBAIGNsYXNz
IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nR2VvbWV0cnkgewog
cHVibGljOgogICAgIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYpOwogCi0gICAgTGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3Qg
TGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JikgY29uc3Q7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsVG9wRm9yTmV4dExpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgSW5s
aW5lTGF5b3V0VW5pdCBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBGbG9hdGluZ0Nv
bnRleHQmKSBjb25zdDsKIAogICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lQmxvY2tD
b250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
SW52YWxpZGF0aW9uU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUludmFsaWRhdGlvblNjb3BlLmgKaW5kZXggYjU2MjNhMDcxNzc4
NTE4YzVmNzM0OWZjMzI2YTE1NzJjNjczZmZjZS4uZWUzNzI4ZWE2YmY2MzVhODQ0NjcyZjZlNTk4
YmJkNjQxMjQyNWVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSW52YWxpZGF0aW9uU2NvcGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVJbnZhbGlkYXRp
b25TY29wZS5oCkBAIC0zMiw2ICszMiw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgTGF5b3V0IHsKIAorY2xhc3MgTGF5b3V0U3RhdGU7CisKIGNsYXNzIElubGluZUludmFsaWRh
dGlvblNjb3BlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lOTElORShJbmxpbmVJbnZh
bGlkYXRpb25TY29wZSk7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94QnVpbGRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5l
Qm94QnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdkOTBiYmIwYzIzN2JjNDdkNTVhMDJmNGNiOGI5
NzZkZDUzNmIxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hCdWlsZGVyLmNwcApAQCAtMCwwICsx
LDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxp
bmVMaW5lQm94QnVpbGRlci5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCisKKyNpbmNsdWRlICJJbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmgiCisjaW5jbHVk
ZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworCitzdGF0aWMgSW5s
aW5lTGF5b3V0VW5pdCBoYW5naW5nR2x5cGhXaWR0aChJbmxpbmVMYXlvdXRVbml0IGV4dHJhSG9y
aXpvbnRhbFNwYWNlLCBjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBib29sIGlzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCkKK3sKKyAgICAvLyBXaGVuIGEgZ2x5cGggYXQgdGhlIHN0YXJ0IG9y
IGVuZCBlZGdlIG9mIGEgbGluZSBoYW5ncywgaXQgaXMgbm90IGNvbnNpZGVyZWQgd2hlbiBtZWFz
dXJpbmcgdGhlIGxpbmXigJlzIGNvbnRlbnRzIGZvciBmaXQsIGFsaWdubWVudCwgb3IganVzdGlm
aWNhdGlvbi4KKyAgICAvLyBEZXBlbmRpbmcgb24gdGhlIGxpbmXigJlzIGFsaWdubWVudC9qdXN0
aWZpY2F0aW9uLCB0aGlzIGNhbiByZXN1bHQgaW4gdGhlIG1hcmsgYmVpbmcgcGxhY2VkIG91dHNp
ZGUgdGhlIGxpbmUgYm94LgorICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdGV4
dC0zLyNoYW5naW5nCisgICAgYXV0byBpc0NvbmRpdGlvbmFsID0gaXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OworICAgIGF1dG8gaGFuZ2luZ1dpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07
CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKHJ1bnMpKSB7Cisg
ICAgICAgIGlmIChydW4uaXNJbmxpbmVCb3hTdGFydCgpIHx8IHJ1bi5pc0lubGluZUJveEVuZCgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkg
eworICAgICAgICAgICAgaXNDb25kaXRpb25hbCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2Vy
dmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3Bh
Y2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFp
bGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBoYW5naW5nV2lkdGggKz0gcnVuLnRyYWlsaW5nV2hp
dGVzcGFjZVdpZHRoKCk7CisgICAgfQorICAgIC8vIEluIHNvbWUgY2FzZXMsIGEgZ2x5cGggYXQg
dGhlIGVuZCBvZiBhIGxpbmUgY2FuIGNvbmRpdGlvbmFsbHkgaGFuZzogaXQgaGFuZ3Mgb25seSBp
ZiBpdCBkb2VzIG5vdCBvdGhlcndpc2UgZml0IGluIHRoZSBsaW5lIHByaW9yIHRvIGp1c3RpZmlj
YXRpb24uCisgICAgcmV0dXJuICFpc0NvbmRpdGlvbmFsIHx8IGV4dHJhSG9yaXpvbnRhbFNwYWNl
IDwgMCA/IGhhbmdpbmdXaWR0aCA6IElubGluZUxheW91dFVuaXQgeyB9OworfQorCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0
KGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBJbmxp
bmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29udGVudExv
Z2ljYWxXaWR0aCwgYm9vbCBpc0xhc3RMaW5lKQoreworICAgIGF1dG8gZXh0cmFIb3Jpem9udGFs
U3BhY2UgPSBsaW5lTG9naWNhbFdpZHRoIC0gY29udGVudExvZ2ljYWxXaWR0aDsKKyAgICAvLyBE
ZXBlbmRpbmcgb24gdGhlIGxpbmXigJlzIGFsaWdubWVudC9qdXN0aWZpY2F0aW9uLCB0aGUgaGFu
Z2luZyBnbHlwaCBjYW4gYmUgcGxhY2VkIG91dHNpZGUgdGhlIGxpbmUgYm94LgorICAgIGV4dHJh
SG9yaXpvbnRhbFNwYWNlICs9IGhhbmdpbmdHbHlwaFdpZHRoKGV4dHJhSG9yaXpvbnRhbFNwYWNl
LCBydW5zLCBpc0xhc3RMaW5lKTsKKyAgICBpZiAoZXh0cmFIb3Jpem9udGFsU3BhY2UgPD0gMCkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25t
ZW50ID0gWyZdIHsKKyAgICAgICAgaWYgKHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5KQorICAgICAgICAgICAgcmV0dXJuIHRleHRBbGlnbjsKKyAgICAgICAgLy8gVGV4dCBpcyBq
dXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0LWp1
c3RpZnkgcHJvcGVydHksCisgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0aGUg
bGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFzdCwK
KyAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVu
ZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAgICAgaWYgKGlzTGFzdExpbmUg
fHwgKCFydW5zLmlzRW1wdHkoKSAmJiBydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpKSkKKyAgICAg
ICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKKyAgICAgICAgcmV0dXJuIFRleHRB
bGlnbk1vZGU6Okp1c3RpZnk7CisgICAgfTsKKworICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9u
dGFsQWxpZ25tZW50KCkpIHsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3Rh
cnQ6CisgICAgICAgIHJldHVybiB7IH07CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoK
KyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6RW5kOgorICAgICAgICByZXR1cm4gZXh0cmFIb3Jpem9udGFsU3BhY2U7CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRD
ZW50ZXI6CisgICAgICAgIHJldHVybiBleHRyYUhvcml6b250YWxTcGFjZSAvIDI7CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAvLyBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5IGlzIGEgcnVuIGFsaWdubWVudCAoYW5kIHdlIG9ubHkgZG8gaW5saW5lIGJveCBhbGlnbm1l
bnQgaGVyZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitMaW5lQm94QnVp
bGRlcjo6TGluZUJveEJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KQorICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCkKK3sKK30KKworTGluZUJveCBMaW5lQm94QnVpbGRlcjo6YnVp
bGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKK3sKKyAgICBh
dXRvJiBydW5zID0gbGluZUNvbnRlbnQucnVuczsKKyAgICBhdXRvIGxpbmVMb2dpY2FsV2lkdGgg
PSBsaW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRoOworICAgIGF1dG8gY29udGVudExvZ2ljYWxX
aWR0aCA9IGxpbmVDb250ZW50LmNvbnRlbnRMb2dpY2FsV2lkdGg7CisgICAgYXV0byBob3Jpem9u
dGFsQWxpZ25tZW50T2Zmc2V0ID0gTGF5b3V0Ojpob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KHJ1
bnMsIHJvb3RCb3goKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lTG9naWNhbFdpZHRoLCBjb250
ZW50TG9naWNhbFdpZHRoLCBsaW5lQ29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQp
OworICAgIAorICAgIGF1dG8gbGluZUJveCA9IExpbmVCb3ggeyByb290Qm94KCksIGxpbmVDb250
ZW50LmxvZ2ljYWxUb3BMZWZ0LCBsaW5lTG9naWNhbFdpZHRoLCBob3Jpem9udGFsQWxpZ25tZW50
T2Zmc2V0LnZhbHVlX29yKElubGluZUxheW91dFVuaXQgeyB9KSwgY29udGVudExvZ2ljYWxXaWR0
aCwgbGluZUNvbnRlbnQubm9uU3Bhbm5pbmdJbmxpbmVMZXZlbEJveENvdW50IH07CisKKyAgICBh
dXRvIGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQgPSBjb25zdHJ1Y3RJbmxpbmVMZXZlbEJveGVz
KGxpbmVCb3gsIHJ1bnMpOworICAgIAorICAgIGF1dG8gdmVydGljYWxseUFsaWduSW5saW5lTGV2
ZWxCb3hlcyA9IFsmXSB7IAorICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ25lciA9IExpbmVCb3hW
ZXJ0aWNhbEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpIH07CisgICAgICAgIGNhblVzZVNp
bXBsaWZpZWRBbGlnbm1lbnQgPSBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50IHx8ICFsaW5lQm94
Lmhhc0NvbnRlbnQoKTsKKyAgICAgICAgdmVydGljYWxBbGlnbmVyLmFsaWduKGxpbmVCb3gsIGNh
blVzZVNpbXBsaWZpZWRBbGlnbm1lbnQpOworICAgIH07CisgICAgdmVydGljYWxseUFsaWduSW5s
aW5lTGV2ZWxCb3hlcygpOworCisgICAgcmV0dXJuIGxpbmVCb3g7Cit9CisKK3ZvaWQgTGluZUJv
eEJ1aWxkZXI6OnNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goSW5saW5lTGV2ZWxCb3gm
IGlubGluZUxldmVsQm94KSBjb25zdAoreworICAgIEFTU0VSVChpbmxpbmVMZXZlbEJveC5pc0lu
bGluZUJveCgpIHx8IGlubGluZUxldmVsQm94LmlzTGluZUJyZWFrQm94KCkpOworICAgIGF1dG8m
IGZvbnRNZXRyaWNzID0gaW5saW5lTGV2ZWxCb3guc3R5bGUoKS5mb250TWV0cmljcygpOworICAg
IElubGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisgICAgSW5s
aW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOworICAgIGF1dG8g
bG9naWNhbEhlaWdodCA9IGFzY2VudCArIGRlc2NlbnQ7CisgICAgLy8gV2UgbmVlZCBmbG9vci9j
ZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCisgICAgaW5s
aW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoZmxvb3JmKGFzY2VudCkpOworICAgIGlubGluZUxldmVs
Qm94LnNldERlc2NlbnQoY2VpbChkZXNjZW50KSk7CisgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9n
aWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKKworICAgIC8vIEZJWE1FOiBBZGp1c3QgbGF5b3V0
IGJvdW5kcyB3aXRoIGZhbGxiYWNrIGZvbnQgd2hlbiBhcHBsaWNhYmxlLgorICAgIGF1dG8mIHN0
eWxlID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKTsKKyAgICBhdXRvIGxpbmVI
ZWlnaHQgPSBzdHlsZS5saW5lSGVpZ2h0KCk7CisgICAgaWYgKGxpbmVIZWlnaHQuaXNOZWdhdGl2
ZSgpKSB7CisgICAgICAgIC8vIElmIGxpbmUtaGVpZ2h0IGNvbXB1dGVzIHRvIG5vcm1hbCBhbmQg
ZWl0aGVyIHRleHQtZWRnZSBpcyBsZWFkaW5nIG9yIHRoaXMgaXMgdGhlIHJvb3QgaW5saW5lIGJv
eCwKKyAgICAgICAgLy8gdGhlIGZvbnTigJlzIGxpbmUgZ2FwIG1ldHJpYyBtYXkgYWxzbyBiZSBp
bmNvcnBvcmF0ZWQgaW50byBBIGFuZCBEIGJ5IGFkZGluZyBoYWxmIHRvIGVhY2ggc2lkZSBhcyBo
YWxmLWxlYWRpbmcuCisgICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5l
LTMvI2lubGluZS1oZWlnaHQKKyAgICAgICAgLy8gU2luY2UgdGV4dC1lZGdlIGlzIG5vdCBzdXBw
b3J0ZWQgeWV0IGFuZCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBsZWFkaW5nLCB3ZSBzaG91bGQganVz
dCBhcHBseSBpdCB0bworICAgICAgICAvLyBhbGwgaW5saW5lIGJveGVzLgorICAgICAgICBhdXRv
IGhhbGZMaW5lR2FwID0gKGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5nKCkgLSBsb2dpY2FsSGVpZ2h0
KSAvIDI7CisgICAgICAgIGFzY2VudCArPSBoYWxmTGluZUdhcDsKKyAgICAgICAgZGVzY2VudCAr
PSBoYWxmTGluZUdhcDsKKyAgICB9IGVsc2UgeworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxp
bmVIZWlnaHQgPSBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsKKyAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBoYWxmTGVhZGluZyA9IChsaW5lSGVpZ2h0IC0gKGFzY2VudCArIGRlc2NlbnQpKSAv
IDI7CisgICAgICAgIGFzY2VudCArPSBoYWxmTGVhZGluZzsKKyAgICAgICAgZGVzY2VudCArPSBo
YWxmTGVhZGluZzsKKyAgICB9CisgICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxl
Z2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCisgICAgaW5saW5lTGV2ZWxCb3guc2V0
TGF5b3V0Qm91bmRzKElubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBmbG9vcmYoYXNjZW50
KSwgY2VpbChkZXNjZW50KSB9KTsKK30KKworYm9vbCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0
SW5saW5lTGV2ZWxCb3hlcyhMaW5lQm94JiBsaW5lQm94LCBjb25zdCBMaW5lOjpSdW5MaXN0JiBy
dW5zKQoreworICAgIGF1dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3go
KTsKKyAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KHJvb3RJbmxpbmVCb3gpOwor
CisgICAgLy8gRklYTUU6IEFkZCBmYXN0IHBhdGggc3VwcG9ydCBmb3IgbGluZS1oZWlnaHQgY29u
dGVudC4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGV4ZXJjaXNl
IHRoZSBmYXN0IHBhdGggd2hlbiB0aGUgbGluZSBoYXMgbm8gY29udGVudCBhdCBhbGwsIGV2ZW4g
aW4gbm9uLXN0YW5kYXJkcyBtb2RlIG9yIHdpdGggbGluZS1oZWlnaHQgc2V0LgorICAgIGF1dG8g
Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCA9IGxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2Rl
KCkgJiYgcm9vdEJveCgpLnN0eWxlKCkubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKTsKKyAgICBh
dXRvIHVwZGF0ZUNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQgPSBbJl0oYXV0byYgaW5saW5lTGV2
ZWxCb3gsIHN0ZDo6b3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGJveEdlb21ldHJ5ID0gc3Rk
OjpudWxsb3B0KSB7CisgICAgICAgIGlmICghY2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCA9IExp
bmVCb3hWZXJ0aWNhbEFsaWduZXI6OmNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnRGb3JJbmxpbmVM
ZXZlbEJveChyb290SW5saW5lQm94LCBpbmxpbmVMZXZlbEJveCwgYm94R2VvbWV0cnkpOworICAg
IH07CisKKyAgICBhdXRvIGNyZWF0ZVdyYXBwZWRJbmxpbmVCb3hlcyA9IFsmXSB7CisgICAgICAg
IGlmIChydW5zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gQW4g
aW5saW5lIGJveCBtYXkgbm90IG5lY2Vzc2FyaWx5IHN0YXJ0IG9uIHRoZSBjdXJyZW50IGxpbmU6
CisgICAgICAgIC8vIDxzcGFuIGlkPW91dGVyPmxpbmUgYnJlYWs8YnI+dGhpcyBjb250ZW50J3Mg
cGFyZW50IGlubGluZSBib3goJ291dGVyJykgPHNwYW4gaWQ9aW5uZXI+c3RhcnRzIG9uIHRoZSBw
cmV2aW91cyBsaW5lPC9zcGFuPjwvc3Bhbj4KKyAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCB0aGVyZSdzIGFuIElubGluZUxldmVsQm94IGZvciBldmVyeSBpbmxpbmUgYm94IHRo
YXQncyBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgIC8vIEluIG5lc3Rpbmcg
Y2FzZSB3ZSBuZWVkIHRvIGNyZWF0ZSBJbmxpbmVMZXZlbEJveGVzIGZvciB0aGUgaW5saW5lIGJv
eCBhbmNlc3RvcnMuCisgICAgICAgIC8vIFdlIG9ubHkgaGF2ZSB0byBkbyBpdCBvbiB0aGUgZmly
c3QgcnVuIGFzIGFueSBzdWJzZXF1ZW50IGlubGluZSBjb250ZW50IGlzIGVpdGhlciBhdCB0aGUg
c2FtZS9oaWdoZXIgbmVzdGluZyBsZXZlbCBvcgorICAgICAgICAvLyBuZXN0ZWQgd2l0aCBhIFtp
bmxpbmUgYm94IHN0YXJ0XSBydW4uCisgICAgICAgIGF1dG8mIGZpcnN0UnVuID0gcnVuc1swXTsK
KyAgICAgICAgYXV0byYgZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3ggPSBmaXJzdFJ1bi5sYXlvdXRC
b3goKS5wYXJlbnQoKTsKKyAgICAgICAgLy8gSWYgdGhlIHBhcmVudCBpcyB0aGUgZm9ybWF0dGlu
ZyByb290LCB3ZSBjYW4gc3RvcCBoZXJlLiBUaGlzIGlzIHJvb3QgaW5saW5lIGJveCBjb250ZW50
LCB0aGVyZSdzIG5vIG5lc3RpbmcgaW5saW5lIGJveCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lKHMp
CisgICAgICAgIC8vIHVubGVzcyB0aGUgaW5saW5lIGJveCBjbG9zaW5nIGlzIGZvcmNlZCBvdmVy
IHRvIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgIC8vIGUuZy4KKyAgICAgICAgLy8gPHNwYW4+
bm9ybWFsbHkgdGhlIGlubGluZSBib3ggY2xvc2luZyBmb3JtcyBhIGNvbnRpbnVvdXMgY29udGVu
dDwvc3Bhbj4KKyAgICAgICAgLy8gPHNwYW4+dW5sZXNzIGl0J3MgZm9yY2VkIHRvIHRoZSBuZXh0
IGxpbmU8YnI+PC9zcGFuPgorICAgICAgICBhdXRvIGZpcnN0UnVuTmVlZHNJbmxpbmVCb3ggPSBm
aXJzdFJ1bi5pc0lubGluZUJveEVuZCgpOworICAgICAgICBpZiAoIWZpcnN0UnVuTmVlZHNJbmxp
bmVCb3ggJiYgaXNSb290TGF5b3V0Qm94KGZpcnN0UnVuUGFyZW50TGF5b3V0Qm94KSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgVmVjdG9yPGNvbnN0IEJveCo+IGxheW91dEJveGVzV2l0
aG91dElubGluZUJveGVzOworICAgICAgICBpZiAoZmlyc3RSdW5OZWVkc0lubGluZUJveCkKKyAg
ICAgICAgICAgIGxheW91dEJveGVzV2l0aG91dElubGluZUJveGVzLmFwcGVuZCgmZmlyc3RSdW4u
bGF5b3V0Qm94KCkpOworICAgICAgICBhdXRvKiBhbmNlc3RvciA9ICZmaXJzdFJ1blBhcmVudExh
eW91dEJveDsKKyAgICAgICAgd2hpbGUgKCFpc1Jvb3RMYXlvdXRCb3goKmFuY2VzdG9yKSkgewor
ICAgICAgICAgICAgbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXMuYXBwZW5kKGFuY2VzdG9y
KTsKKyAgICAgICAgICAgIGFuY2VzdG9yID0gJmFuY2VzdG9yLT5wYXJlbnQoKTsKKyAgICAgICAg
fQorICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIG1pc3NpbmcgTGluZUJveDo6SW5saW5lQm94ZXMg
c3RhcnRpbmcgd2l0aCB0aGUgdG9wbW9zdCBsYXlvdXQgYm94LgorICAgICAgICBmb3IgKGF1dG8q
IGxheW91dEJveCA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UobGF5b3V0Qm94ZXNXaXRob3V0SW5s
aW5lQm94ZXMpKSB7CisgICAgICAgICAgICBhdXRvIGlubGluZUJveCA9IElubGluZUxldmVsQm94
OjpjcmVhdGVJbmxpbmVCb3goKmxheW91dEJveCwgcm9vdElubGluZUJveC5sb2dpY2FsTGVmdCgp
LCBsaW5lQm94LmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICBzZXRWZXJ0aWNh
bEdlb21ldHJ5Rm9ySW5saW5lQm94KGlubGluZUJveCk7CisgICAgICAgICAgICB1cGRhdGVDYW5V
c2VTaW1wbGlmaWVkQWxpZ25tZW50KGlubGluZUJveCk7CisgICAgICAgICAgICBsaW5lQm94LmFk
ZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIGNyZWF0ZVdyYXBwZWRJbmxpbmVCb3hlcygpOworCisgICAgYXV0byBsaW5lSGFzQ29udGVu
dCA9IGZhbHNlOworICAgIGZvciAoYXV0byYgcnVuIDogcnVucykgeworICAgICAgICBhdXRvJiBs
YXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8gcnVuSGFzQ29udGVudCA9
IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgIEFTU0VSVCghbGluZUhhc0NvbnRlbnQpOwor
ICAgICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSB8fCBydW4uaXNTb2Z0
TGluZUJyZWFrKCkgfHwgcnVuLmlzSGFyZExpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgYXV0byYgaW5saW5lQm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAvLyBF
dmVuIG5lZ2F0aXZlIGhvcml6b250YWwgbWFyZ2luIG1ha2VzIHRoZSBsaW5lICJjb250ZW50ZnVs
Ii4KKyAgICAgICAgICAgIGlmIChydW4uaXNJbmxpbmVCb3hTdGFydCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpbmxpbmVCb3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpIHx8IGlubGluZUJveEdl
b21ldHJ5LmJvcmRlckxlZnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZh
bHVlX29yKDBfbHUpOworICAgICAgICAgICAgaWYgKHJ1bi5pc0lubGluZUJveEVuZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBpbmxpbmVCb3hHZW9tZXRyeS5tYXJnaW5FbmQoKSB8fCBpbmxp
bmVCb3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpIHx8IGlubGluZUJveEdlb21ldHJ5LnBhZGRpbmdS
aWdodCgpLnZhbHVlX29yKDBfbHUpOworICAgICAgICAgICAgaWYgKHJ1bi5pc1dvcmRCcmVha09w
cG9ydHVuaXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fTsKKyAgICAgICAgbGluZUhhc0NvbnRlbnQgPSBsaW5lSGFzQ29udGVudCB8fCBydW5IYXNDb250
ZW50KCk7CisgICAgICAgIGF1dG8gbG9naWNhbExlZnQgPSByb290SW5saW5lQm94LmxvZ2ljYWxM
ZWZ0KCkgKyBydW4ubG9naWNhbExlZnQoKTsKKyAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7Cisg
ICAgICAgICAgICBhdXRvJiBpbmxpbmVMZXZlbEJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byBtYXJnaW5C
b3hIZWlnaHQgPSBpbmxpbmVMZXZlbEJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOworICAg
ICAgICAgICAgYXV0byBhc2NlbnQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgICAg
IGlmIChsYXlvdXRTdGF0ZSgpLnNob3VsZE5vdFN5bnRoZXNpemVJbmxpbmVCbG9ja0Jhc2VsaW5l
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnRlZ3JhdGlvbiBjb2RlcGF0aCBjb25zdHJ1Y3Rz
IHJlcGxhY2VkIGJveGVzIGZvciBpbmxpbmUtYmxvY2sgY29udGVudC4KKyAgICAgICAgICAgICAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CisgICAgICAgICAgICAgICAgYXNj
ZW50ID0gKmRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLmJhc2VsaW5lKCk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGUgYmFzZWxpbmUgb2YgYW4gJ2lubGluZS1ibG9jaycgaXMgdGhlIGJh
c2VsaW5lIG9mIGl0cyBsYXN0IGxpbmUgYm94IGluIHRoZSBub3JtYWwgZmxvdywgdW5sZXNzIGl0
IGhhcyBlaXRoZXIgbm8gaW4tZmxvdyBsaW5lIGJveGVzIG9yCisgICAgICAgICAgICAgICAgLy8g
aWYgaXRzICdvdmVyZmxvdycgcHJvcGVydHkgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb3RoZXIgdGhh
biAndmlzaWJsZScsIGluIHdoaWNoIGNhc2UgdGhlIGJhc2VsaW5lIGlzIHRoZSBib3R0b20gbWFy
Z2luIGVkZ2UuCisgICAgICAgICAgICAgICAgYXV0byBzeW50aGVzaXplQmFzZWxpbmUgPSAhbGF5
b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSB8fCAhbGF5b3V0Qm94
LnN0eWxlKCkuaXNPdmVyZmxvd1Zpc2libGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3ludGhl
c2l6ZUJhc2VsaW5lKQorICAgICAgICAgICAgICAgICAgICBhc2NlbnQgPSBtYXJnaW5Cb3hIZWln
aHQ7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGZv
cm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZm9ybWF0dGluZ1N0YXRlRm9ySW5saW5lRm9y
bWF0dGluZ0NvbnRleHQoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmUgPSBmb3JtYXR0aW5nU3RhdGUubGluZXMoKS5s
YXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGxh
c3RMaW5lLmxpbmVCb3hMb2dpY2FsUmVjdCgpLnRvcCgpICsgbGFzdExpbmUuYmFzZWxpbmUoKTsK
KyAgICAgICAgICAgICAgICAgICAgYXNjZW50ID0gaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5tYXJn
aW5CZWZvcmUoKSArIGlubGluZUxldmVsQm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBpbmxpbmVM
ZXZlbEJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZV9vcigwKSArIGlubGluZUJsb2NrQmFz
ZWxpbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRC
b3guaXNSZXBsYWNlZEJveCgpKQorICAgICAgICAgICAgICAgIGFzY2VudCA9IGRvd25jYXN0PFJl
cGxhY2VkQm94PihsYXlvdXRCb3gpLmJhc2VsaW5lKCkudmFsdWVfb3IobWFyZ2luQm94SGVpZ2h0
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhc2NlbnQgPSBtYXJnaW5Cb3hI
ZWlnaHQ7CisgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBzdGQ6Om1heCgwX2x1LCBpbmxpbmVM
ZXZlbEJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkpOworICAgICAgICAgICAgYXV0byBhdG9taWNJ
bmxpbmVMZXZlbEJveCA9IElubGluZUxldmVsQm94OjpjcmVhdGVBdG9taWNJbmxpbmVMZXZlbEJv
eChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0LCB7IGlubGluZUxldmVsQm94R2VvbWV0cnkuYm9yZGVy
Qm94V2lkdGgoKSwgbWFyZ2luQm94SGVpZ2h0IH0pOworICAgICAgICAgICAgYXRvbWljSW5saW5l
TGV2ZWxCb3guc2V0QmFzZWxpbmUoYXNjZW50KTsKKyAgICAgICAgICAgIGF0b21pY0lubGluZUxl
dmVsQm94LnNldExheW91dEJvdW5kcyhJbmxpbmVMZXZlbEJveDo6TGF5b3V0Qm91bmRzIHsgYXNj
ZW50LCBtYXJnaW5Cb3hIZWlnaHQgLSBhc2NlbnQgfSk7CisgICAgICAgICAgICB1cGRhdGVDYW5V
c2VTaW1wbGlmaWVkQWxpZ25tZW50KGF0b21pY0lubGluZUxldmVsQm94LCBpbmxpbmVMZXZlbEJv
eEdlb21ldHJ5KTsKKyAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92
ZShhdG9taWNJbmxpbmVMZXZlbEJveCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJ1bi5pc0lubGluZUJveFN0YXJ0KCkpIHsKKyAgICAgICAgICAgIC8v
IEF0IHRoaXMgcG9pbnQgd2UgZG9uJ3Qga25vdyB5ZXQgaG93IHdpZGUgdGhpcyBpbmxpbmUgYm94
IGlzLiBMZXQncyBhc3N1bWUgaXQncyBhcyBsb25nIGFzIHRoZSBsaW5lIGlzCisgICAgICAgICAg
ICAvLyBhbmQgYWRqdXN0IGl0IGxhdGVyIGlmIHdlIGNvbWUgYWNyb3NzIGFuIGlubGluZUJveEVu
ZCBydW4gKHNlZSBiZWxvdykuCisgICAgICAgICAgICBhdXRvIGluaXRpYWxMb2dpY2FsV2lkdGgg
PSBsaW5lQm94LmNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHJ1bi5sb2dpY2FsTGVmdCgpOworICAg
ICAgICAgICAgQVNTRVJUKGluaXRpYWxMb2dpY2FsV2lkdGggPj0gMCk7CisgICAgICAgICAgICAv
LyBJbmxpbmUgYm94IHJ1biBpcyBiYXNlZCBvbiBtYXJnaW4gYm94LiBMZXQncyBjb252ZXJ0IGl0
IHRvIGJvcmRlciBib3guCisgICAgICAgICAgICBhdXRvIG1hcmdpblN0YXJ0ID0gc3RkOjptYXgo
MF9sdSwgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdp
blN0YXJ0KCkpOworICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gbWFyZ2luU3RhcnQ7CisgICAg
ICAgICAgICBpbml0aWFsTG9naWNhbFdpZHRoIC09IG1hcmdpblN0YXJ0OworICAgICAgICAgICAg
YXV0byBpbmxpbmVCb3ggPSBJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91dEJv
eCwgbG9naWNhbExlZnQsIGluaXRpYWxMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgc2V0VmVy
dGljYWxHZW9tZXRyeUZvcklubGluZUJveChpbmxpbmVCb3gpOworICAgICAgICAgICAgdXBkYXRl
Q2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChpbmxpbmVCb3gpOworICAgICAgICAgICAgbGluZUJv
eC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGlubGluZUJveCkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJ1bi5pc0lubGluZUJveEVuZCgpKSB7Cisg
ICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGxvZ2ljYWwgd2lkdGggd2hlbiB0aGUgaW5saW5lIGJv
eCBjbG9zZXMgb24gdGhpcyBsaW5lLgorICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gbGlu
ZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgICAgICAgICAg
QVNTRVJUKGlubGluZUJveC5pc0lubGluZUJveCgpKTsKKyAgICAgICAgICAgIC8vIElubGluZSBi
b3ggcnVuIGlzIGJhc2VkIG9uIG1hcmdpbiBib3guIExldCdzIGNvbnZlcnQgaXQgdG8gYm9yZGVy
IGJveC4KKyAgICAgICAgICAgIGF1dG8gbWFyZ2luRW5kID0gc3RkOjptYXgoMF9sdSwgZm9ybWF0
dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpbkVuZCgpKTsKKyAg
ICAgICAgICAgIGF1dG8gaW5saW5lQm94TG9naWNhbFJpZ2h0ID0gbG9naWNhbExlZnQgKyBydW4u
bG9naWNhbFdpZHRoKCkgLSBtYXJnaW5FbmQ7CisgICAgICAgICAgICBpbmxpbmVCb3guc2V0TG9n
aWNhbFdpZHRoKGlubGluZUJveExvZ2ljYWxSaWdodCAtIGlubGluZUJveC5sb2dpY2FsTGVmdCgp
KTsKKyAgICAgICAgICAgIHVwZGF0ZUNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoaW5saW5lQm94
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChydW4uaXNU
ZXh0KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRqdXN0IG5vbi1lbXB0eSBpbmxpbmUgYm94IGhlaWdodCB3aGVuIGdseXBocyBmcm9tIHRoZSBu
b24tcHJpbWFyeSBmb250IHN0cmV0Y2ggdGhlIGJveC4KKyAgICAgICAgICAgIGxpbmVCb3guaW5s
aW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKS5zZXRIYXNDb250ZW50
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnVuLmlz
SGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBhdXRvIGxpbmVCcmVha0JveCA9IElubGlu
ZUxldmVsQm94OjpjcmVhdGVMaW5lQnJlYWtCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7Cisg
ICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGxpbmVCcmVha0JveCk7
CisgICAgICAgICAgICB1cGRhdGVDYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGxpbmVCcmVha0Jv
eCk7CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUobGluZUJy
ZWFrQm94KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkgeworICAgICAgICAgICAgbGluZUJveC5hZGRJ
bmxpbmVMZXZlbEJveChJbmxpbmVMZXZlbEJveDo6Y3JlYXRlR2VuZXJpY0lubGluZUxldmVsQm94
KGxheW91dEJveCwgbG9naWNhbExlZnQpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBsaW5lQm94LnNl
dEhhc0NvbnRlbnQobGluZUhhc0NvbnRlbnQpOworCisgICAgcmV0dXJuIGNhblVzZVNpbXBsaWZp
ZWRBbGlnbm1lbnQ7Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94QnVpbGRl
ci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lTGluZUJveEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTczYjMzMzk3ZmIwOGM2YTVkZGY5ZTQ4
ZjBiZTBiYTJkMTExMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveEJ1aWxkZXIuaApAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgorI2luY2x1ZGUgIklubGluZUxpbmVCdWls
ZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitjbGFz
cyBCb3g7CitjbGFzcyBJbmxpbmVMZXZlbEJveDsKK2NsYXNzIExheW91dFN0YXRlOworCitjbGFz
cyBMaW5lQm94QnVpbGRlciB7CitwdWJsaWM6CisgICAgTGluZUJveEJ1aWxkZXIoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKKworICAgIExpbmVCb3ggYnVpbGQoY29uc3QgTGluZUJ1
aWxkZXI6OkxpbmVDb250ZW50Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRWZXJ0aWNhbEdl
b21ldHJ5Rm9ySW5saW5lQm94KElubGluZUxldmVsQm94JikgY29uc3Q7CisgICAgYm9vbCBjb25z
dHJ1Y3RJbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7CisK
KyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9CisgICAgY29uc3QgQm94
JiByb290Qm94KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0K
KyAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5n
Q29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KKworICAgIGJvb2wgaXNSb290TGF5b3V0Qm94KGNv
bnN0IENvbnRhaW5lckJveCYgY29udGFpbmVyQm94KSBjb25zdCB7IHJldHVybiAmY29udGFpbmVy
Qm94ID09ICZyb290Qm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK307CisKK30KK30KKworI2Vu
ZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>