<?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>217119</bug_id>
          
          <creation_ts>2020-09-29 20:44:01 -0700</creation_ts>
          <short_desc>[LFC][IFC] Rename LineBreaker to InlineContentBreaker</short_desc>
          <delta_ts>2020-09-30 08:01:20 -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>1693300</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-29 20:44:01 -0700</bug_when>
    <thetext>It actually breaks inline content and not lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693301</commentid>
    <comment_count>1</comment_count>
      <attachid>410088</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-29 20:46:52 -0700</bug_when>
    <thetext>Created attachment 410088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693382</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-30 08:00:04 -0700</bug_when>
    <thetext>Committed r267790: &lt;https://trac.webkit.org/changeset/267790&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410088.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693383</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-30 08:01:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/69791468&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410088</attachid>
            <date>2020-09-29 20:46:52 -0700</date>
            <delta_ts>2020-09-30 08:00:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217119-20200929204651.patch</filename>
            <type>text/plain</type>
            <size>81267</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk5NjNmY2JkNmE2NzVh
YmExZTU5ZWUwYmYwMzIzYjk0YTJkNjVkNy4uYTEzYTViZjk3NTYzNGY4NmZkNTA3NGFkMmNkZGJm
MDY3ZTlkN2EzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTA5LTI5ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBSZW5hbWUg
TGluZUJyZWFrZXIgdG8gSW5saW5lQ29udGVudEJyZWFrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzExOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9y
IGJyZWFraW5nIGlubGluZSBjb250ZW50LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUNvbnRlbnRCcmVha2VyLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2Vy
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aXNUZXh0Q29udGVudE9ubHkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1Zpc3VhbGx5RW1wdHlXaGl0ZXNwYWNlQ29udGVudE9u
bHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc05vbkNvbnRlbnRSdW5zT25seSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmZpcnN0VGV4dFJ1bkluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6bGFzdENvbnRlbnRSdW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OmlzV3JhcHBpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6c2hv
dWxkS2VlcEJlZ2lubmluZ09mTGluZVdoaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpsYXN0V3JhcE9wcG9ydHVuaXR5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6aXNDb250ZW50V3JhcHBpbmdBbGxvd2VkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lQ29udGVudEJyZWFrZXI6OnNob3VsZEtl
ZXBFbmRPZkxpbmVXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lQ29udGVudEJyZWFrZXI6OnByb2Nlc3NJbmxpbmVDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lQ29udGVudEJyZWFrZXI6OnByb2Nlc3NPdmVyZmxvd2luZ0Nv
bnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJl
YWtlcjo6cHJvY2Vzc092ZXJmbG93aW5nVGV4dENvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6d29yZEJyZWFrQmVoYXZpb3IgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6dHJ5
QnJlYWtpbmdUZXh0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Q29udGVudEJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50OjphcHBlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQ6OnJl
c2V0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVDb250ZW50QnJl
YWtlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJyZWFrZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Q29udGVudEJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50Ojpsb2dpY2FsV2lkdGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6Q29udGludW91
c0NvbnRlbnQ6OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lQ29udGVudEJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50Ojpjb2xsYXBzaWJsZUxvZ2lj
YWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUNvbnRlbnRC
cmVha2VyOjpDb250aW51b3VzQ29udGVudDo6bm9uQ29sbGFwc2libGVMb2dpY2FsV2lkdGggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6Q29u
dGludW91c0NvbnRlbnQ6Omhhc1RyYWlsaW5nQ29sbGFwc2libGVDb250ZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lQ29udGVudEJyZWFrZXI6OkNvbnRpbnVvdXND
b250ZW50Ojppc0Z1bGx5Q29sbGFwc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQ6OnJ1bnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6c2V0SHlw
aGVuYXRpb25EaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUNvbnRl
bnRCcmVha2VyOjpDb250aW51b3VzQ29udGVudDo6UnVuOjpSdW4pOgorICAgICAgICAqIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUNhbmRpZGF0ZTo6SW5saW5lQ29udGVudDo6Y29udGludW91c0NvbnRl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cGxhY2VJ
bmxpbmVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6Omhh
bmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6Y29tbWl0UGFydGlhbENvbnRlbnQpOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6CisKIDIwMjAtMDktMjkgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIE1lcmdlIExpbmVC
cmVha2VyOjpDYW5kaWRhdGVDb250ZW50IGFuZCBDb250aW51b3VzQ29udGVudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAppbmRleCBkMzM2ODc2NDIxODc3ZTExYTg2N2YyNmMwNTZiNzA3MzYzYmRkMzUzLi5lNTVhMTk0
NmU2NzAzMTI0ZTMwYTMxOTA2YzMxNWFlNjliMTNmNGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ1
Niw2ICsxNDU2LDcgQEAgbGF5b3V0L2ZsZXhmb3JtYXR0aW5nL0ZsZXhGb3JtYXR0aW5nU3RhdGUu
Y3BwCiBsYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAKIGxheW91dC9mbG9hdHMvRmxvYXRp
bmdDb250ZXh0LmNwcAogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcAorbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lQ29udGVudEJyZWFrZXIuY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTE0NjMsNyArMTQ2
NCw2IEBAIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L3RleHQvVGV4dFV0aWwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjg2NDE3NDU2YzI4YjI0YWRiMDgzZmQ3MmNlNDI0ZmU1
NWFjZWI2MC4uZDk5NmRhYWUxODhlZjdjNDY5ZTMzZDgxOTc4YzYxNGUzYzBhMGU2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjA4Niw3ICsyMDg2LDcgQEAKIAkJNkZDRTFBMUEyMjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlS
dW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQ0Ux
QTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZEMDk1NDMyNTExMTUyMjAwOTg4NzdEIC8q
IExheW91dEdlb21ldHJ5UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkZEMDk1NDEyNTExMTUyMjAwOTg4NzdEIC8qIExheW91dEdlb21ldHJ5UmVj
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZG
RDlDRDU0MjI3RTIxQzgwMEU1Mzk1NyAvKiBEaXNwbGF5UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZEOUNENTIyMjdFMjFDODAwRTUzOTU3IC8q
IERpc3BsYXlSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNkZFMTk4MTcyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkUxOTgxNTIx
NzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RkUxOTgxNzIxNzgzOTdDMDA0NDZGMDgg
LyogSW5saW5lQ29udGVudEJyZWFrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50
QnJlYWtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1
NzMgLyogSW5saW5lSXRlbS5oICovOyB9OwogCQk2RkZBNEMwMTIzRjJGRUQ5MDA3RTRFQkMgLyog
TGF5b3V0TGluZUJyZWFrQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RkZBNEMwMDIzRjJGRUQ5MDA3RTRFQkMgLyogTGF5b3V0TGluZUJyZWFrQm94
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZG
REM0NDIyMTJFRkYxNzAwQTlDQTkxIC8qIEZsb2F0QXZvaWRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZGREM0NDAyMTJFRkYxNjAwQTlDQTkxIC8q
IEZsb2F0QXZvaWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC05NjU2LDggKzk2NTYsOCBAQAogCQk2RkNFMUExODIyNjE4QUIzMDA0RjAzNDMg
LyogRGlzcGxheVJ1bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5UnVuLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGRDA5NTQxMjUxMTE1MjIwMDk4ODc3RCAvKiBMYXlvdXRHZW9t
ZXRyeVJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0R2VvbWV0
cnlSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRDlDRDUyMjI3RTIxQzgw
MEU1Mzk1NyAvKiBEaXNwbGF5UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwbGF5UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RkUxOTgxMzIx
NzgzOTdCMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lTGluZUJyZWFrZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJy
ZWFrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lTGluZUJyZWFr
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2
RjA4IC8qIElubGluZUNvbnRlbnRCcmVha2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IElubGluZUNvbnRlbnRCcmVha2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUNvbnRlbnRCcmVh
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUNvbnRlbnRCcmVh
a2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTdBQTI2MjFDMzdCNjMwMDI5
NkRDRCAvKiBNYXJnaW5UeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJnaW5UeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMgLyogSW5s
aW5lSXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVJdGVtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRThFNkY3MjM3QkE1RTgwMDc1OEQyNiAv
KiBJbnZhbGlkYXRpb25Db250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludmFsaWRhdGlv
bkNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc2MDUsOCArMTc2
MDUsOCBAQAogCQkJCTZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmggKi8s
CiAJCQkJNkY2OUE3OTkyNEQ2RkFCODAwRTZCODVEIC8qIElubGluZUxpbmVCb3guY3BwICovLAog
CQkJCTZGQjI0MDAzMjNERkYxMjcwMDc5NjQ1OCAvKiBJbmxpbmVMaW5lQm94LmggKi8sCi0JCQkJ
NkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKLQkJ
CQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKKwkJ
CQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5lQ29udGVudEJyZWFrZXIuY3BwICov
LAorCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50QnJlYWtlci5o
ICovLAogCQkJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxpbmVMaW5lQnVpbGRlci5j
cHAgKi8sCiAJCQkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIElubGluZUxpbmVCdWlsZGVy
LmggKi8sCiAJCQkJNkY5MTQyMEYyNTE1MjEzNzAwNEU0RkVBIC8qIElubGluZUxpbmVHZW9tZXRy
eS5oICovLApAQCAtMzE4NTMsNyArMzE4NTMsNyBAQAogCQkJCUJDRTc4OTE2MTEyMEQ2MDgwMDYw
RUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYwQ0Q2OTUyMjlF
RDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjI0MDA1
MjNERkYxMjgwMDc5NjQ1OCAvKiBJbmxpbmVMaW5lQm94LmggaW4gSGVhZGVycyAqLywKLQkJCQk2
RkUxOTgxNzIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTZGRTE5ODE3MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50QnJlYWtl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkVCNDgyMzQwMDRBNTAwNjkwNkUyIC8qIElubGlu
ZUxpbmVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjkxNDIxMTI1MTUyMTM4MDA0RTRG
RUEgLyogSW5saW5lTGluZUdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkMzRjk0NzI1
MTY3NTY3MDBBNDlCRUEgLyogSW5saW5lTGluZVJ1bi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVDb250ZW50
QnJlYWtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVDb250ZW50QnJlYWtlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM1ODIyNThiNmQwNDU5ZGQ5N2YxZTQ5
ZjQzYWRkOWNlODQ1NjM3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUNvbnRlbnRCcmVha2VyLmNwcApAQCAtMCwwICsxLDQx
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVD
b250ZW50QnJlYWtlci5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CisKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCisj
aW5jbHVkZSAiSW5saW5lSXRlbS5oIgorI2luY2x1ZGUgIklubGluZVRleHRJdGVtLmgiCisjaW5j
bHVkZSAiVGV4dFV0aWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91
dCB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1RleHRDb250ZW50T25seShjb25zdCBJbmxpbmVD
b250ZW50QnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQmIGNvbnRpbnVvdXNDb250ZW50KQorewor
ICAgIC8vIDxzcGFuPnRleHQ8L3NwYW4+IGlzIGNvbnNpZGVyZWQgYSB0ZXh0IHJ1biBldmVuIHdp
dGggdGhlIFtjb250YWluZXIgc3RhcnRdW2NvbnRhaW5lciBlbmRdIGlubGluZSBpdGVtcy4KKyAg
ICAvLyBEdWUgdG8gY29tbWl0IGJvdW5kYXJ5IHJ1bGVzLCB3ZSBqdXN0IG5lZWQgdG8gY2hlY2sg
dGhlIGZpcnN0IG5vbi10eXBlbGVzcyBpbmxpbmUgaXRlbSAoY2FuJ3QgaGF2ZSBib3RoIFtpbWdd
IGFuZCBbdGV4dF0pCisgICAgZm9yIChhdXRvJiBydW4gOiBjb250aW51b3VzQ29udGVudC5ydW5z
KCkpIHsKKyAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IHJ1bi5pbmxpbmVJdGVtOworICAgICAg
ICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRh
aW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVybiBpbmxpbmVJ
dGVtLmlzVGV4dCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc1Zpc3VhbGx5RW1wdHlXaGl0ZXNwYWNlQ29udGVudE9ubHkoY29uc3QgSW5saW5l
Q29udGVudEJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50JiBjb250aW51b3VzQ29udGVudCkKK3sK
KyAgICAvLyBbPHNwYW4+PC9zcGFuPiBdIFs8c3Bhbj4gPC9zcGFuPl0gWyA8c3BhbiBzdHlsZT0i
cGFkZGluZzogMHB4OyI+PC9zcGFuPl0gYXJlIGFsbCBjb25zaWRlcmVkIHZpc3VhbGx5IGVtcHR5
IHdoaXRlc3BhY2UgY29udGVudC4KKyAgICAvLyBbPHNwYW4gc3R5bGU9ImJvcmRlcjogMXB4IHNv
bGlkIHJlZCI+PC9zcGFuPiBdIHdoaWxlIHRoaXMgaXMgd2hpdGVzcGFjZSBjb250ZW50IG9ubHks
IGl0IGlzIG5vdCBjb25zaWRlcmVkIHZpc3VhbGx5IGVtcHR5LgorICAgIC8vIER1ZSB0byBjb21t
aXQgYm91bmRhcnkgcnVsZXMsIHdlIGp1c3QgbmVlZCB0byBjaGVjayB0aGUgZmlyc3Qgbm9uLXR5
cGVsZXNzIGlubGluZSBpdGVtIChjYW4ndCBoYXZlIGJvdGggW2ltZ10gYW5kIFt0ZXh0XSkKKyAg
ICBmb3IgKGF1dG8mIHJ1biA6IGNvbnRpbnVvdXNDb250ZW50LnJ1bnMoKSkgeworICAgICAgICBh
dXRvJiBpbmxpbmVJdGVtID0gcnVuLmlubGluZUl0ZW07CisgICAgICAgIC8vIEZJWE1FOiBjaGVj
ayBmb3IgcGFkZGluZyBib3JkZXIgZXRjLgorICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRh
aW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIHJldHVybiBpbmxpbmVJdGVtLmlzVGV4dCgpICYmIGRvd25jYXN0
PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNOb25Db250ZW50UnVuc09u
bHkoY29uc3QgSW5saW5lQ29udGVudEJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50JiBjb250aW51
b3VzQ29udGVudCkKK3sKKyAgICAvLyA8c3Bhbj48L3NwYW4+IDwtIG5vbiBjb250ZW50IHJ1bnMu
CisgICAgZm9yIChhdXRvJiBydW4gOiBjb250aW51b3VzQ29udGVudC5ydW5zKCkpIHsKKyAgICAg
ICAgYXV0byYgaW5saW5lSXRlbSA9IHJ1bi5pbmxpbmVJdGVtOworICAgICAgICBpZiAoaW5saW5l
SXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgT3B0aW9uYWw8c2l6ZV90PiBmaXJzdFRl
eHRSdW5JbmRleChjb25zdCBJbmxpbmVDb250ZW50QnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQm
IGNvbnRpbnVvdXNDb250ZW50KQoreworICAgIGF1dG8mIHJ1bnMgPSBjb250aW51b3VzQ29udGVu
dC5ydW5zKCk7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHJ1bnMuc2l6ZSgp
OyArK2luZGV4KSB7CisgICAgICAgIGlmIChydW5zW2luZGV4XS5pbmxpbmVJdGVtLmlzVGV4dCgp
KQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICByZXR1cm4geyB9OworfQor
CitzdGF0aWMgaW5saW5lIE9wdGlvbmFsPHNpemVfdD4gbGFzdENvbnRlbnRSdW5JbmRleChjb25z
dCBJbmxpbmVDb250ZW50QnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQmIGNvbnRpbnVvdXNDb250
ZW50KQoreworICAgIGF1dG8mIHJ1bnMgPSBjb250aW51b3VzQ29udGVudC5ydW5zKCk7CisgICAg
Zm9yIChhdXRvIGluZGV4ID0gcnVucy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgIGlmIChy
dW5zW2luZGV4XS5pbmxpbmVJdGVtLmlzVGV4dCgpIHx8IHJ1bnNbaW5kZXhdLmlubGluZUl0ZW0u
aXNCb3goKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgcmV0dXJuIHsg
fTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzV3JhcHBpbmdBbGxvd2VkKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkKK3sKKyAgICAvLyBEbyBub3QgdHJ5IHRvIHB1c2ggb3ZlcmZsb3duICdw
cmUnIGFuZCAnbm8td3JhcCcgY29udGVudCB0byBuZXh0IGxpbmUuCisgICAgcmV0dXJuIHN0eWxl
LndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmUgJiYgc3R5bGUud2hpdGVTcGFjZSgpICE9
IFdoaXRlU3BhY2U6Ok5vV3JhcDsKK30KKworc3RhdGljIGlubGluZSBib29sIHNob3VsZEtlZXBC
ZWdpbm5pbmdPZkxpbmVXaGl0ZXNwYWNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAg
ICBhdXRvIHdoaXRlc3BhY2UgPSBzdHlsZS53aGl0ZVNwYWNlKCk7CisgICAgcmV0dXJuIHdoaXRl
c3BhY2UgPT0gV2hpdGVTcGFjZTo6UHJlIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6UHJl
V3JhcCB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OkJyZWFrU3BhY2VzOworfQorCitzdGF0
aWMgaW5saW5lIE9wdGlvbmFsPHNpemVfdD4gbGFzdFdyYXBPcHBvcnR1bml0eUluZGV4KGNvbnN0
IElubGluZUNvbnRlbnRCcmVha2VyOjpDb250aW51b3VzQ29udGVudDo6UnVuTGlzdCYgcnVuTGlz
dCkKK3sKKyAgICAvLyA8c3BhbiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZSI+bm9fd3JhcDwvc3Bh
bj48c3Bhbj55ZXMgd3JhcDwvc3Bhbj48c3BhbiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZSI+bm9f
d3JhcDwvc3Bhbj4uCisgICAgLy8gW2NvbnRhaW5lciBzdGFydF1bbm9fd3JhcF1bY29udGFpbmVy
IGVuZF1bY29udGFpbmVyIHN0YXJ0XVt5ZXNdIDwtIGNvbnRpbnVvdXMgY29udGVudAorICAgIC8v
IFsgXSA8LSBjb250aW51b3VzIGNvbnRlbnQKKyAgICAvLyBbd3JhcF1bY29udGFpbmVyIGVuZF1b
Y29udGFpbmVyIHN0YXJ0XVtub193cmFwXVtjb250YWluZXIgZW5kXSA8LSBjb250aW51b3VzIGNv
bnRlbnQKKyAgICAvLyBSZXR1cm4gIzAgYXMgdGhlIGluZGV4IHdoZXJlIHRoZSBzZWNvbmQgY29u
dGludW91cyBjb250ZW50IGNhbiB3cmFwIGF0LgorICAgIEFTU0VSVCghcnVuTGlzdC5pc0VtcHR5
KCkpOworICAgIGF1dG8gbGFzdEl0ZW1JbmRleCA9IHJ1bkxpc3Quc2l6ZSgpIC0gMTsKKyAgICBy
ZXR1cm4gaXNXcmFwcGluZ0FsbG93ZWQocnVuTGlzdFtsYXN0SXRlbUluZGV4XS5pbmxpbmVJdGVt
LnN0eWxlKCkpID8gbWFrZU9wdGlvbmFsKGxhc3RJdGVtSW5kZXgpIDogV1RGOjpudWxsb3B0Owor
fQorCitib29sIElubGluZUNvbnRlbnRCcmVha2VyOjppc0NvbnRlbnRXcmFwcGluZ0FsbG93ZWQo
Y29uc3QgQ29udGludW91c0NvbnRlbnQmIGNvbnRpbnVvdXNDb250ZW50KSBjb25zdAoreworICAg
IC8vIFVzZSB0aGUgbGFzdCBpbmxpbmUgaXRlbSB3aXRoIGNvbnRlbnQgKHdoZXJlIHdlIHdvdWxk
IGJlIHdyYXBwaW5nKSB0byBkZWNpZGUgaWYgY29udGVudCB3cmFwcGluZyBpcyBhbGxvd2VkLgor
ICAgIGF1dG8mIGNvbnRpbnVvdXNSdW5zID0gY29udGludW91c0NvbnRlbnQucnVucygpOworICAg
IGF1dG8gcnVuSW5kZXggPSBsYXN0Q29udGVudFJ1bkluZGV4KGNvbnRpbnVvdXNDb250ZW50KS52
YWx1ZU9yKGNvbnRpbnVvdXNSdW5zLnNpemUoKSAtIDEpOworICAgIHJldHVybiBpc1dyYXBwaW5n
QWxsb3dlZChjb250aW51b3VzUnVuc1tydW5JbmRleF0uaW5saW5lSXRlbS5zdHlsZSgpKTsKK30K
KworYm9vbCBJbmxpbmVDb250ZW50QnJlYWtlcjo6c2hvdWxkS2VlcEVuZE9mTGluZVdoaXRlc3Bh
Y2UoY29uc3QgQ29udGludW91c0NvbnRlbnQmIGNvbnRpbnVvdXNDb250ZW50KSBjb25zdAorewor
ICAgIC8vIEdyYWIgdGhlIHN0eWxlIGFuZCBjaGVjayBmb3Igd2hpdGUtc3BhY2UgcHJvcGVydHkg
dG8gZGVjaWRlIHdoZXRoZXIgd2Ugc2hvdWxkIGxldCB0aGlzIHdoaXRlc3BhY2UgY29udGVudCBv
dmVyZmxvdyB0aGUgY3VycmVudCBsaW5lLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgImtlZXAiIGlu
IHRoaXMgY29udGV4dCBtZWFucyB3ZSBsZXQgdGhlIHdoaXRlc3BhY2UgY29udGVudCBzaXQgb24g
dGhlIGN1cnJlbnQgbGluZS4KKyAgICAvLyBJdCBtaWdodCB2ZXJ5IHdlbGwgZ2V0IGNvbGxhcHNl
ZCB3aGVuIHdlIGNsb3NlIHRoZSBsaW5lIChub3JtYWwvbm93cmFwL3ByZS1saW5lKS4KKyAgICAv
LyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LTMvI3doaXRlLXNwYWNlLXByb3Bl
cnR5CisgICAgYXV0byB3aGl0ZXNwYWNlID0gY29udGludW91c0NvbnRlbnQucnVucygpWypmaXJz
dFRleHRSdW5JbmRleChjb250aW51b3VzQ29udGVudCldLmlubGluZUl0ZW0uc3R5bGUoKS53aGl0
ZVNwYWNlKCk7CisgICAgcmV0dXJuIHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6Tm9ybWFsIHx8
IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6Tm9XcmFwIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVT
cGFjZTo6UHJlV3JhcCB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZUxpbmU7Cit9CisK
K0lubGluZUNvbnRlbnRCcmVha2VyOjpSZXN1bHQgSW5saW5lQ29udGVudEJyZWFrZXI6OnByb2Nl
c3NJbmxpbmVDb250ZW50KGNvbnN0IENvbnRpbnVvdXNDb250ZW50JiBjYW5kaWRhdGVDb250ZW50
LCBjb25zdCBMaW5lU3RhdHVzJiBsaW5lU3RhdHVzKQoreworICAgIGF1dG8gcHJvY2Vzc0NhbmRp
ZGF0ZUNvbnRlbnQgPSBbJl0geworICAgICAgICBpZiAoY2FuZGlkYXRlQ29udGVudC5sb2dpY2Fs
V2lkdGgoKSA8PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRoKQorICAgICAgICAgICAgcmV0dXJu
IFJlc3VsdCB7IFJlc3VsdDo6QWN0aW9uOjpLZWVwIH07CisjaWYgVVNFX0ZMT0FUX0FTX0lOTElO
RV9MQVlPVVRfVU5JVAorICAgICAgICAvLyBQcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24gc3Vt
cyB1cCBmbG9hdHMgd2hpbGUgbGluZSBicmVha2VyIHN1YnRyYWN0cyB0aGVtLiBUaGlzIGNhbiBs
ZWFkIHRvIGVwc2lsb24tc2NhbGUgZGlmZmVyZW5jZXMuCisgICAgICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoY2FuZGlkYXRlQ29udGVudC5sb2dpY2FsV2lkdGgoKSwgbGluZVN0YXR1
cy5hdmFpbGFibGVXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4gUmVzdWx0IHsgUmVzdWx0OjpB
Y3Rpb246OktlZXAgfTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gcHJvY2Vzc092ZXJmbG93aW5n
Q29udGVudChjYW5kaWRhdGVDb250ZW50LCBsaW5lU3RhdHVzKTsKKyAgICB9OworCisgICAgYXV0
byByZXN1bHQgPSBwcm9jZXNzQ2FuZGlkYXRlQ29udGVudCgpOworICAgIGlmIChyZXN1bHQuYWN0
aW9uID09IFJlc3VsdDo6QWN0aW9uOjpLZWVwKSB7CisgICAgICAgIC8vIElmIHRoaXMgaXMgbm90
IHRoZSBlbmQgb2YgdGhlIGxpbmUsIGhvbGQgb24gdG8gdGhlIGxhc3QgZWxpZ2libGUgbGluZSB3
cmFwIG9wcG9ydHVuaXR5IHNvIHRoYXQgd2UgY291bGQgcmV2ZXJ0IGJhY2sKKyAgICAgICAgLy8g
dG8gdGhpcyBwb3NpdGlvbiBpZiBubyBvdGhlciBsaW5lIGJyZWFraW5nIG9wcG9ydHVuaXR5IGV4
aXN0cyBpbiB0aGlzIGNvbnRlbnQuCisgICAgICAgIGlmIChhdXRvIGxhc3RMaW5lV3JhcE9wcG9y
dHVuaXR5SW5kZXggPSBsYXN0V3JhcE9wcG9ydHVuaXR5SW5kZXgoY2FuZGlkYXRlQ29udGVudC5y
dW5zKCkpKSB7CisgICAgICAgICAgICBhdXRvIGlzRWxpZ2libGVMaW5lV3JhcE9wcG9ydHVuaXR5
ID0gWyZdIChhdXRvJiBjYW5kaWRhdGVJdGVtKSB7CisgICAgICAgICAgICAgICAgLy8gSnVzdCBj
aGVjayBmb3IgbGVhZGluZyBjb2xsYXBzaWJsZSB3aGl0ZXNwYWNlIGZvciBub3cuCisgICAgICAg
ICAgICAgICAgaWYgKCFsaW5lU3RhdHVzLmxpbmVJc0VtcHR5IHx8ICFjYW5kaWRhdGVJdGVtLmlz
VGV4dCgpIHx8ICFkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oY2FuZGlkYXRlSXRlbSkuaXNXaGl0
ZXNwYWNlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBzaG91bGRLZWVwQmVnaW5uaW5nT2ZMaW5lV2hpdGVzcGFjZShjYW5kaWRhdGVJ
dGVtLnN0eWxlKCkpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGF1dG8mIGxhc3RXcmFw
T3Bwb3J0dW5pdHlDYW5kaWRhdGVJdGVtID0gY2FuZGlkYXRlQ29udGVudC5ydW5zKClbKmxhc3RM
aW5lV3JhcE9wcG9ydHVuaXR5SW5kZXhdLmlubGluZUl0ZW07CisgICAgICAgICAgICBpZiAoaXNF
bGlnaWJsZUxpbmVXcmFwT3Bwb3J0dW5pdHkobGFzdFdyYXBPcHBvcnR1bml0eUNhbmRpZGF0ZUl0
ZW0pKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lmxhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtID0g
Jmxhc3RXcmFwT3Bwb3J0dW5pdHlDYW5kaWRhdGVJdGVtOworICAgICAgICAgICAgICAgIG1faGFz
V3JhcE9wcG9ydHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgVHJhaWxp
bmdUZXh0Q29udGVudCB7CisgICAgc2l6ZV90IHJ1bkluZGV4IHsgMCB9OworICAgIGJvb2wgaGFz
T3ZlcmZsb3cgeyBmYWxzZSB9OyAvLyBUcmFpbGluZyBjb250ZW50IHN0aWxsIG92ZXJmbG93cyB0
aGUgbGluZS4KKyAgICBPcHRpb25hbDxJbmxpbmVDb250ZW50QnJlYWtlcjo6UGFydGlhbFJ1bj4g
cGFydGlhbFJ1bjsKK307CisKK0lubGluZUNvbnRlbnRCcmVha2VyOjpSZXN1bHQgSW5saW5lQ29u
dGVudEJyZWFrZXI6OnByb2Nlc3NPdmVyZmxvd2luZ0NvbnRlbnQoY29uc3QgQ29udGludW91c0Nv
bnRlbnQmIG92ZXJmbG93Q29udGVudCwgY29uc3QgTGluZVN0YXR1cyYgbGluZVN0YXR1cykgY29u
c3QKK3sKKyAgICBhdXRvIGNvbnRpbnVvdXNDb250ZW50ID0gQ29udGludW91c0NvbnRlbnQgeyBv
dmVyZmxvd0NvbnRlbnQgfTsKKyAgICBBU1NFUlQoIWNvbnRpbnVvdXNDb250ZW50LnJ1bnMoKS5p
c0VtcHR5KCkpOworCisgICAgQVNTRVJUKGNvbnRpbnVvdXNDb250ZW50LmxvZ2ljYWxXaWR0aCgp
ID4gbGluZVN0YXR1cy5hdmFpbGFibGVXaWR0aCk7CisgICAgaWYgKGNvbnRpbnVvdXNDb250ZW50
Lmhhc1RyYWlsaW5nQ29sbGFwc2libGVDb250ZW50KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzVGV4
dENvbnRlbnRPbmx5KGNvbnRpbnVvdXNDb250ZW50KSk7CisgICAgICAgIGF1dG8gSXNFbmRPZkxp
bmUgPSBpc0NvbnRlbnRXcmFwcGluZ0FsbG93ZWQoY29udGludW91c0NvbnRlbnQpID8gSXNFbmRP
ZkxpbmU6OlllcyA6IElzRW5kT2ZMaW5lOjpObzsKKyAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYg
dGhlIGNvbnRlbnQgZml0cyB3aXRob3V0IHRoZSB0cmFpbGluZyBjb2xsYXBzaWJsZSBwYXJ0Lgor
ICAgICAgICBpZiAoY29udGludW91c0NvbnRlbnQubm9uQ29sbGFwc2libGVMb2dpY2FsV2lkdGgo
KSA8PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRoKQorICAgICAgICAgICAgcmV0dXJuIHsgUmVz
dWx0OjpBY3Rpb246OktlZXAsIElzRW5kT2ZMaW5lIH07CisgICAgICAgIC8vIE5vdyBjaGVjayBp
ZiB3ZSBjYW4gdHJpbSB0aGUgbGluZSB0b28uCisgICAgICAgIGlmIChsaW5lU3RhdHVzLmxpbmVI
YXNGdWxseUNvbGxhcHNpYmxlVHJhaWxpbmdSdW4gJiYgY29udGludW91c0NvbnRlbnQuaXNGdWxs
eUNvbGxhcHNpYmxlKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgbmV3IGNvbnRlbnQgaXMg
ZnVsbHkgY29sbGFwc2libGUsIGl0IHNob3VsZCBzdXJlbHkgZml0LgorICAgICAgICAgICAgcmV0
dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAsIElzRW5kT2ZMaW5lIH07CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKGxpbmVTdGF0dXMuY29sbGFwc2libGVXaWR0aCAmJiBpc05vbkNvbnRlbnRS
dW5zT25seShjb250aW51b3VzQ29udGVudCkpIHsKKyAgICAgICAgLy8gTGV0J3Mgc2VlIGlmIHRo
ZSBub24tY29udGVudCBydW5zIGZpdCB3aGVuIHRoZSBsaW5lIGhhcyB0cmFpbGluZyBjb2xsYXBz
aWJsZSBjb250ZW50LgorICAgICAgICAvLyAidGV4dCBjb250ZW50IDxzcGFuIHN0eWxlPSJwYWRk
aW5nOiAxcHgiPjwvc3Bhbj4iIDwtIHRoZSA8c3Bhbj48L3NwYW4+IHJ1bnMgY291bGQgZml0IGFm
dGVyIGNvbGxhcHNpbmcgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisgICAgICAgIGlmIChjb250
aW51b3VzQ29udGVudC5sb2dpY2FsV2lkdGgoKSA8PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRo
ICsgbGluZVN0YXR1cy5jb2xsYXBzaWJsZVdpZHRoKQorICAgICAgICAgICAgcmV0dXJuIHsgUmVz
dWx0OjpBY3Rpb246OktlZXAgfTsKKyAgICB9CisgICAgaWYgKGlzVmlzdWFsbHlFbXB0eVdoaXRl
c3BhY2VDb250ZW50T25seShjb250aW51b3VzQ29udGVudCkgJiYgc2hvdWxkS2VlcEVuZE9mTGlu
ZVdoaXRlc3BhY2UoY29udGludW91c0NvbnRlbnQpKSB7CisgICAgICAgIC8vIFRoaXMgb3ZlcmZs
b3dpbmcgY29udGVudCBhcHBhcmVudGx5IGZhbGxzIGludG8gdGhlIHJlbW92ZS9oYW5nIGVuZC1v
Zi1saW5lLXNwYWNlcyBjYXRlZ29yeS4KKyAgICAgICAgLy8gc2VlIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9jc3MtdGV4dC0zLyN3aGl0ZS1zcGFjZS1wcm9wZXJ0eSBtYXRyaXgKKyAgICAgICAgcmV0
dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAgfTsKKyAgICB9CisKKyAgICBpZiAoaXNUZXh0Q29u
dGVudE9ubHkoY29udGludW91c0NvbnRlbnQpKSB7CisgICAgICAgIGlmIChhdXRvIHRyYWlsaW5n
Q29udGVudCA9IHByb2Nlc3NPdmVyZmxvd2luZ1RleHRDb250ZW50KGNvbnRpbnVvdXNDb250ZW50
LCBsaW5lU3RhdHVzKSkgeworICAgICAgICAgICAgaWYgKCF0cmFpbGluZ0NvbnRlbnQtPnJ1bklu
ZGV4ICYmIHRyYWlsaW5nQ29udGVudC0+aGFzT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgICAgICAv
LyBXZSB0cmllZCB0byBicmVhayB0aGUgY29udGVudCBidXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBj
YW4ndCBldmVuIGFjY29tbW9kYXRlIHRoZSBmaXJzdCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAg
ICAgLy8gMS4gUHVzaCB0aGUgY29udGVudCBvdmVyIHRvIHRoZSBuZXh0IGxpbmUgd2hlbiB3ZSd2
ZSBnb3QgY29udGVudCBvbiB0aGUgbGluZSBhbHJlYWR5LgorICAgICAgICAgICAgICAgIC8vIDIu
IEtlZXAgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiB0aGUgZW1wdHkgbGluZSAob3Iga2VlcCB0aGUg
d2hvbGUgcnVuIGlmIGl0IGhhcyBvbmx5IG9uZSBjaGFyYWN0ZXIpLgorICAgICAgICAgICAgICAg
IGlmICghbGluZVN0YXR1cy5saW5lSXNFbXB0eSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgUmVzdWx0OjpBY3Rpb246OlB1c2gsIElzRW5kT2ZMaW5lOjpZZXMsIHsgfSB9OworICAgICAg
ICAgICAgICAgIGF1dG8gbGVhZGluZ1RleHRSdW5JbmRleCA9ICpmaXJzdFRleHRSdW5JbmRleChj
b250aW51b3VzQ29udGVudCk7CisgICAgICAgICAgICAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0g
PSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oY29udGludW91c0NvbnRlbnQucnVucygpW2xlYWRp
bmdUZXh0UnVuSW5kZXhdLmlubGluZUl0ZW0pOworICAgICAgICAgICAgICAgIEFTU0VSVChpbmxp
bmVUZXh0SXRlbS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZVRleHRJdGVt
Lmxlbmd0aCgpID09IDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQgeyBSZXN1
bHQ6OkFjdGlvbjo6S2VlcCwgSXNFbmRPZkxpbmU6OlllcyB9OworICAgICAgICAgICAgICAgIGF1
dG8gZmlyc3RDaGFyYWN0ZXJXaWR0aCA9IFRleHRVdGlsOjp3aWR0aChpbmxpbmVUZXh0SXRlbSwg
aW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSArIDEpOworICAg
ICAgICAgICAgICAgIGF1dG8gZmlyc3RDaGFyYWN0ZXJSdW4gPSBQYXJ0aWFsUnVuIHsgMSwgZmly
c3RDaGFyYWN0ZXJXaWR0aCwgZmFsc2UgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBSZXN1
bHQ6OkFjdGlvbjo6QnJlYWssIElzRW5kT2ZMaW5lOjpZZXMsIFJlc3VsdDo6UGFydGlhbFRyYWls
aW5nQ29udGVudCB7IGxlYWRpbmdUZXh0UnVuSW5kZXgsIGZpcnN0Q2hhcmFjdGVyUnVuIH0gfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gdHJhaWxpbmdQYXJ0aWFsQ29udGVudCA9
IFJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCB7IHRyYWlsaW5nQ29udGVudC0+cnVuSW5k
ZXgsIHRyYWlsaW5nQ29udGVudC0+cGFydGlhbFJ1biB9OworICAgICAgICAgICAgcmV0dXJuIHsg
UmVzdWx0OjpBY3Rpb246OkJyZWFrLCBJc0VuZE9mTGluZTo6WWVzLCB0cmFpbGluZ1BhcnRpYWxD
b250ZW50IH07CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2Vk
IHRvIGJyZWFrIHRoaXMgb3ZlcmZsb3dpbmcgY29udGVudCwgd2Ugc3RpbGwgbmVlZCB0byBkZWNp
ZGUgd2hldGhlciBrZWVwIGl0IG9yIHB1c2ggaXQgdG8gdGhlIG5leHQgbGluZS4KKyAgICBpZiAo
bGluZVN0YXR1cy5saW5lSXNFbXB0eSkgeworICAgICAgICBBU1NFUlQoIW1faGFzV3JhcE9wcG9y
dHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rp
b246OktlZXAsIElzRW5kT2ZMaW5lOjpObyB9OworICAgIH0KKyAgICAvLyBOb3cgZWl0aGVyIHdy
YXAgaGVyZSBvciBhdCBhbiBlYXJsaWVyIHBvc2l0aW9uLCBvciBub3Qgd3JhcCBhdCBhbGwuCisg
ICAgaWYgKGlzQ29udGVudFdyYXBwaW5nQWxsb3dlZChjb250aW51b3VzQ29udGVudCkpCisgICAg
ICAgIHJldHVybiB7IFJlc3VsdDo6QWN0aW9uOjpQdXNoLCBJc0VuZE9mTGluZTo6WWVzIH07Cisg
ICAgaWYgKG1faGFzV3JhcE9wcG9ydHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uKQorICAgICAgICBy
ZXR1cm4geyBSZXN1bHQ6OkFjdGlvbjo6UmV2ZXJ0VG9MYXN0V3JhcE9wcG9ydHVuaXR5LCBJc0Vu
ZE9mTGluZTo6WWVzIH07CisgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAsIElzRW5k
T2ZMaW5lOjpObyB9OworfQorCitPcHRpb25hbDxUcmFpbGluZ1RleHRDb250ZW50PiBJbmxpbmVD
b250ZW50QnJlYWtlcjo6cHJvY2Vzc092ZXJmbG93aW5nVGV4dENvbnRlbnQoY29uc3QgQ29udGlu
dW91c0NvbnRlbnQmIGNvbnRpbnVvdXNDb250ZW50LCBjb25zdCBMaW5lU3RhdHVzJiBsaW5lU3Rh
dHVzKSBjb25zdAoreworICAgIGF1dG8gaXNCcmVha2FibGVSdW4gPSBbXSAoYXV0byYgcnVuKSB7
CisgICAgICAgIEFTU0VSVChydW4uaW5saW5lSXRlbS5pc1RleHQoKSB8fCBydW4uaW5saW5lSXRl
bS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSk7
CisgICAgICAgIGlmICghcnVuLmlubGluZUl0ZW0uaXNUZXh0KCkpIHsKKyAgICAgICAgICAgIC8v
IENhbid0IGJyZWFrIGhvcml6b250YWwgc3BhY2luZyAtPiBlLmcuIDxzcGFuIHN0eWxlPSJwYWRk
aW5nLXJpZ2h0OiAxMDBweDsiPnRleHRjb250ZW50PC9zcGFuPiwgaWYgdGhlIFtjb250YWluZXIg
ZW5kXSBpcyB0aGUgb3ZlcmZsb3duIGlubGluZSBpdGVtCisgICAgICAgICAgICAvLyB3ZSBuZWVk
IHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW5vdGhlciBpbmxpbmUgaXRlbSBiZXlvbmQgdGhlIFtjb250
YWluZXIgZW5kXSB0byBzcGxpdC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHRleHQgcnVuIG5lZWRzIHRvIHN0YXkgb24gdGhl
IGN1cnJlbnQgbGluZS4gIAorICAgICAgICByZXR1cm4gaXNXcmFwcGluZ0FsbG93ZWQocnVuLmlu
bGluZUl0ZW0uc3R5bGUoKSk7CisgICAgfTsKKworICAgIC8vIENoZWNrIHdoZXJlIHRoZSBvdmVy
ZmxvdyBvY2N1cnMgYW5kIHVzZSB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSB0byBmaWd1cmUgb3V0
IHRoZSBicmVha2luZyBiZWhhdmlvdXIuCisgICAgLy8gPHNwYW4gc3R5bGU9IndvcmQtYnJlYWs6
IG5vcm1hbCI+Zmlyc3Q8L3NwYW4+PHNwYW4gc3R5bGU9IndvcmQtYnJlYWs6IGJyZWFrLWFsbCI+
c2Vjb25kPC9zcGFuPjxzcGFuIHN0eWxlPSJ3b3JkLWJyZWFrOiBub3JtYWwiPnRoaXJkPC9zcGFu
PgorICAgIGF1dG8mIHJ1bnMgPSBjb250aW51b3VzQ29udGVudC5ydW5zKCk7CisgICAgYXV0byBh
Y2N1bXVsYXRlZFJ1bldpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07IAorICAgIHNpemVfdCBp
bmRleCA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgcnVucy5zaXplKCkpIHsKKyAgICAgICAgYXV0
byYgcnVuID0gcnVuc1tpbmRleF07CisgICAgICAgIEFTU0VSVChydW4uaW5saW5lSXRlbS5pc1Rl
eHQoKSB8fCBydW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlubGluZUl0
ZW0uaXNDb250YWluZXJFbmQoKSk7CisgICAgICAgIGlmIChhY2N1bXVsYXRlZFJ1bldpZHRoICsg
cnVuLmxvZ2ljYWxXaWR0aCA+IGxpbmVTdGF0dXMuYXZhaWxhYmxlV2lkdGggJiYgaXNCcmVha2Fi
bGVSdW4ocnVuKSkgeworICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgYXZhaWxhYmxl
IHdpZHRoIGNhbiB2ZXJ5IHdlbGwgYmUgbmVnYXRpdmUgZS5nLiB3aGVuIHNvbWUgcGFydCBvZiB0
aGUgY29udGludW91cyB0ZXh0IGNvbnRlbnQgY2FuIG5vdCBiZSBicm9rZW4gaW50byBwYXJ0cyAt
PgorICAgICAgICAgICAgLy8gPHNwYW4gc3R5bGU9IndvcmQtYnJlYWs6IGtlZXAtYWxsIj50ZXh0
Y29udGVudHdpdGhub2JyZWFrPC9zcGFuPjxzcGFuPnRleHRjb250ZW50d2l0aHllc2JyZWFrPC9z
cGFuPgorICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3Qgc3BhbiBjb21wdXRlcyBsb25nZXIg
dGhhbiB0aGUgYXZhaWxhYmxlIHNwYWNlLCBieSB0aGUgdGltZSB3ZSBnZXQgdG8gdGhlIHNlY29u
ZCBzcGFuLCB0aGUgYWRqdXN0ZWQgYXZhaWxhYmxlIHNwYWNlIGJlY29tZXMgbmVnYXRpdmUuCisg
ICAgICAgICAgICBhdXRvIGFkanVzdGVkQXZhaWxhYmxlV2lkdGggPSBzdGQ6Om1heDxJbmxpbmVM
YXlvdXRVbml0PigwLCBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRoIC0gYWNjdW11bGF0ZWRSdW5X
aWR0aCk7CisgICAgICAgICAgICBpZiAoYXV0byBwYXJ0aWFsUnVuID0gdHJ5QnJlYWtpbmdUZXh0
UnVuKHJ1biwgY29udGludW91c0NvbnRlbnQubG9naWNhbExlZnQoKSArIGFjY3VtdWxhdGVkUnVu
V2lkdGgsIGFkanVzdGVkQXZhaWxhYmxlV2lkdGgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBh
cnRpYWxSdW4tPmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYWlsaW5nVGV4
dENvbnRlbnQgeyBpbmRleCwgZmFsc2UsIHBhcnRpYWxSdW4gfTsKKyAgICAgICAgICAgICAgICAv
LyBXaGVuIHRoZSBjb250ZW50IGlzIHdyYXBwZWQgYXQgdGhlIHJ1biBib3VuZGFyeSwgdGhlIHRy
YWlsaW5nIHJ1biBpcyB0aGUgcHJldmlvdXMgcnVuLgorICAgICAgICAgICAgICAgIGlmIChpbmRl
eCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYWlsaW5nVGV4dENvbnRlbnQgeyBpbmRl
eCAtIDEsIGZhbHNlLCB7IH0gfTsKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgd2UgY2Fu
J3QgYWNjb21tb2RhdGUgZXZlbiB0aGUgdmVyeSBmaXJzdCBjaGFyYWN0ZXIuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFRyYWlsaW5nVGV4dENvbnRlbnQgeyAwLCB0cnVlLCB7IH0gfTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoaXMgcnVuIGlzIG5vdCBicmVha2FibGUsIHdl
IG5lZWQgdG8gY2hlY2sgaWYgYW55IHByZXZpb3VzIHJ1biBpcyBicmVha2FibGUuCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhY2N1bXVsYXRlZFJ1bldpZHRoICs9IHJ1
bi5sb2dpY2FsV2lkdGg7CisgICAgICAgICsraW5kZXg7CisgICAgfQorICAgIC8vIFdlIGRpZCBu
b3QgbWFuYWdlIHRvIGJyZWFrIHRoZSBydW4gdGhhdCBhY3R1YWxseSBvdmVyZmxvd3MgdGhlIGxp
bmUuCisgICAgLy8gTGV0J3MgdHJ5IHRvIGZpbmQgdGhlIGxhc3QgYnJlYWthYmxlIHBvc2l0aW9u
IHN0YXJ0aW5nIGZyb20gdGhlIG92ZXJmbG93aW5nIHJ1biBhbmQgd3JhcCBpdCBhdCB0aGUgY29u
dGVudCBib3VuZGFyeSAoYXMgaXQgc3VyZWx5IGZpdHMpLgorICAgIHdoaWxlIChpbmRleC0tKSB7
CisgICAgICAgIGF1dG8mIHJ1biA9IHJ1bnNbaW5kZXhdOworICAgICAgICBhY2N1bXVsYXRlZFJ1
bldpZHRoIC09IHJ1bi5sb2dpY2FsV2lkdGg7CisgICAgICAgIGlmIChpc0JyZWFrYWJsZVJ1bihy
dW4pKSB7CisgICAgICAgICAgICBBU1NFUlQocnVuLmlubGluZUl0ZW0uaXNUZXh0KCkpOworICAg
ICAgICAgICAgaWYgKGF1dG8gcGFydGlhbFJ1biA9IHRyeUJyZWFraW5nVGV4dFJ1bihydW4sIGNv
bnRpbnVvdXNDb250ZW50LmxvZ2ljYWxMZWZ0KCkgKyBhY2N1bXVsYXRlZFJ1bldpZHRoLCBtYXhJ
bmxpbmVMYXlvdXRVbml0KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHJ1
biBmaXRzLCBzbyBpZiB3cmFwcGluZyBpcyBhbGxvd2VkIG9uIHRoZSBydW4sIGl0IHNob3VsZCBy
ZXR1cm4gYSBub24tZW1wdHkgbGVmdC1zaWRlLgorICAgICAgICAgICAgICAgIEFTU0VSVChwYXJ0
aWFsUnVuLT5sZW5ndGgpOworICAgICAgICAgICAgICAgIHJldHVybiBUcmFpbGluZ1RleHRDb250
ZW50IHsgaW5kZXgsIGZhbHNlLCBwYXJ0aWFsUnVuIH07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgLy8gR2l2ZSB1cCwgdGhlcmUncyBubyBicmVha2FibGUgcnVuIGluIGhl
cmUuCisgICAgcmV0dXJuIHsgfTsKK30KKworSW5saW5lQ29udGVudEJyZWFrZXI6OldvcmRCcmVh
a1J1bGUgSW5saW5lQ29udGVudEJyZWFrZXI6OndvcmRCcmVha0JlaGF2aW9yKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBEaXNyZWdhcmQgYW55IHByb2hpYml0aW9u
IGFnYWluc3QgbGluZSBicmVha3MgbWFuZGF0ZWQgYnkgdGhlIHdvcmQtYnJlYWsgcHJvcGVydHku
CisgICAgLy8gVGhlIGRpZmZlcmVudCB3cmFwcGluZyBvcHBvcnR1bml0aWVzIG11c3Qgbm90IGJl
IHByaW9yaXRpemVkLiBIeXBoZW5hdGlvbiBpcyBub3QgYXBwbGllZC4KKyAgICBpZiAoc3R5bGUu
bGluZUJyZWFrKCkgPT0gTGluZUJyZWFrOjpBbnl3aGVyZSkKKyAgICAgICAgcmV0dXJuIFdvcmRC
cmVha1J1bGU6OkF0QXJiaXRyYXJ5UG9zaXRpb247CisgICAgLy8gQnJlYWtpbmcgaXMgYWxsb3dl
ZCB3aXRoaW4g4oCcd29yZHPigJ0uCisgICAgaWYgKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRC
cmVhazo6QnJlYWtBbGwpCisgICAgICAgIHJldHVybiBXb3JkQnJlYWtSdWxlOjpBdEFyYml0cmFy
eVBvc2l0aW9uOworICAgIC8vIEJyZWFraW5nIGlzIGZvcmJpZGRlbiB3aXRoaW4g4oCcd29yZHPi
gJ0uCisgICAgaWYgKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6S2VlcEFsbCkKKyAg
ICAgICAgcmV0dXJuIFdvcmRCcmVha1J1bGU6Ok5vQnJlYWs7CisgICAgLy8gRm9yIGNvbXBhdGli
aWxpdHkgd2l0aCBsZWdhY3kgY29udGVudCwgdGhlIHdvcmQtYnJlYWsgcHJvcGVydHkgYWxzbyBz
dXBwb3J0cyBhIGRlcHJlY2F0ZWQgYnJlYWstd29yZCBrZXl3b3JkLgorICAgIC8vIFdoZW4gc3Bl
Y2lmaWVkLCB0aGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgd29yZC1icmVhazogbm9ybWFsIGFu
ZCBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZSwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsIHZhbHVl
IG9mIHRoZSBvdmVyZmxvdy13cmFwIHByb3BlcnR5LgorICAgIGlmIChzdHlsZS53b3JkQnJlYWso
KSA9PSBXb3JkQnJlYWs6OkJyZWFrV29yZCAmJiAhbV9oYXNXcmFwT3Bwb3J0dW5pdHlBdFByZXZp
b3VzUG9zaXRpb24pCisgICAgICAgIHJldHVybiBXb3JkQnJlYWtSdWxlOjpBdEFyYml0cmFyeVBv
c2l0aW9uOworICAgIC8vIE92ZXJmbG93V3JhcDo6QnJlYWs6IEFuIG90aGVyd2lzZSB1bmJyZWFr
YWJsZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIG1heSBiZSBicm9rZW4gYXQgYW4gYXJiaXRyYXJ5
IHBvaW50IGlmIHRoZXJlIGFyZSBubyBvdGhlcndpc2UtYWNjZXB0YWJsZSBicmVhayBwb2ludHMg
aW4gdGhlIGxpbmUuCisgICAgaWYgKHN0eWxlLm92ZXJmbG93V3JhcCgpID09IE92ZXJmbG93V3Jh
cDo6QnJlYWsgJiYgIW1faGFzV3JhcE9wcG9ydHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uKQorICAg
ICAgICByZXR1cm4gV29yZEJyZWFrUnVsZTo6QXRBcmJpdHJhcnlQb3NpdGlvbjsKKworICAgIGlm
ICghbl9oeXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6
OkF1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKQorICAgICAgICBy
ZXR1cm4gV29yZEJyZWFrUnVsZTo6T25seUh5cGhlbmF0aW9uQWxsb3dlZDsKKworICAgIHJldHVy
biBXb3JkQnJlYWtSdWxlOjpOb0JyZWFrOworfQorCitPcHRpb25hbDxJbmxpbmVDb250ZW50QnJl
YWtlcjo6UGFydGlhbFJ1bj4gSW5saW5lQ29udGVudEJyZWFrZXI6OnRyeUJyZWFraW5nVGV4dFJ1
bihjb25zdCBDb250aW51b3VzQ29udGVudDo6UnVuJiBvdmVyZmxvd2luZ1J1biwgSW5saW5lTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29u
c3QKK3sKKyAgICBBU1NFUlQob3ZlcmZsb3dpbmdSdW4uaW5saW5lSXRlbS5pc1RleHQoKSk7Cisg
ICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4ob3ZlcmZs
b3dpbmdSdW4uaW5saW5lSXRlbSk7CisgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVUZXh0SXRlbS5z
dHlsZSgpOworICAgIGF1dG8gZmluZExhc3RCcmVha2FibGVQb3NpdGlvbiA9IGF2YWlsYWJsZVdp
ZHRoID09IG1heElubGluZUxheW91dFVuaXQoKTsKKworICAgIGF1dG8gYnJlYWtSdWxlID0gd29y
ZEJyZWFrQmVoYXZpb3Ioc3R5bGUpOworICAgIGlmIChicmVha1J1bGUgPT0gV29yZEJyZWFrUnVs
ZTo6QXRBcmJpdHJhcnlQb3NpdGlvbikgeworICAgICAgICBpZiAoZmluZExhc3RCcmVha2FibGVQ
b3NpdGlvbikgeworICAgICAgICAgICAgLy8gV2hlbiB0aGUgcnVuIGNhbiBiZSBzcGxpdCBhdCBh
cmJpdHJhcnkgcG9zaXRpb24sCisgICAgICAgICAgICAvLyBsZXQncyBqdXN0IHJldHVybiB0aGUg
ZW50aXJlIHJ1biB3aGVuIGl0IGlzIGludGVuZGVkIHRvIGZpdCBvbiB0aGUgbGluZS4KKyAgICAg
ICAgICAgIEFTU0VSVChpbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSk7CisgICAgICAgICAgICBhdXRv
IHRyYWlsaW5nUGFydGlhbFJ1bldpZHRoID0gVGV4dFV0aWw6OndpZHRoKGlubGluZVRleHRJdGVt
LCBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBpbmxpbmVUZXh0SXRlbS5lbmQoKSAtIDEsIGxvZ2lj
YWxMZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBQYXJ0aWFsUnVuIHsgaW5saW5lVGV4dEl0ZW0u
bGVuZ3RoKCkgLSAxLCB0cmFpbGluZ1BhcnRpYWxSdW5XaWR0aCwgZmFsc2UgfTsKKyAgICAgICAg
fQorICAgICAgICBhdXRvIHNwbGl0RGF0YSA9IFRleHRVdGlsOjpzcGxpdChpbmxpbmVUZXh0SXRl
bS5pbmxpbmVUZXh0Qm94KCksIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVt
Lmxlbmd0aCgpLCBvdmVyZmxvd2luZ1J1bi5sb2dpY2FsV2lkdGgsIGF2YWlsYWJsZVdpZHRoLCBs
b2dpY2FsTGVmdCk7CisgICAgICAgIHJldHVybiBQYXJ0aWFsUnVuIHsgc3BsaXREYXRhLmxlbmd0
aCwgc3BsaXREYXRhLmxvZ2ljYWxXaWR0aCwgZmFsc2UgfTsKKyAgICB9CisKKyAgICBpZiAoYnJl
YWtSdWxlID09IFdvcmRCcmVha1J1bGU6Ok9ubHlIeXBoZW5hdGlvbkFsbG93ZWQpIHsKKyAgICAg
ICAgLy8gRmluZCB0aGUgaHlwaGVuIHBvc2l0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgIC8vIDEu
IFNwbGl0IHRoZSB0ZXh0IGJ5IHRha2luZyB0aGUgaHlwaGVuIHdpZHRoIGludG8gYWNjb3VudAor
ICAgICAgICAvLyAyLiBGaW5kIHRoZSBsYXN0IGh5cGhlbiBwb3NpdGlvbiBiZWZvcmUgdGhlIHNw
bGl0IHBvc2l0aW9uCisgICAgICAgIGF1dG8gcnVuTGVuZ3RoID0gaW5saW5lVGV4dEl0ZW0ubGVu
Z3RoKCk7CisgICAgICAgIHVuc2lnbmVkIGxpbWl0QmVmb3JlID0gc3R5bGUuaHlwaGVuYXRpb25M
aW1pdEJlZm9yZSgpID09IFJlbmRlclN0eWxlOjppbml0aWFsSHlwaGVuYXRpb25MaW1pdEJlZm9y
ZSgpID8gMCA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRCZWZvcmUoKTsKKyAgICAgICAgdW5zaWdu
ZWQgbGltaXRBZnRlciA9IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpID09IFJlbmRlclN0
eWxlOjppbml0aWFsSHlwaGVuYXRpb25MaW1pdEFmdGVyKCkgPyAwIDogc3R5bGUuaHlwaGVuYXRp
b25MaW1pdEFmdGVyKCk7CisgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgcnVuIGNhbiBhY2NvbW1v
ZGF0ZSB0aGUgYmVmb3JlL2FmdGVyIGxpbWl0cyBhdCBhbGwgYmVmb3JlIHN0YXJ0IG1lYXN1cmlu
ZyB0ZXh0LgorICAgICAgICBpZiAobGltaXRCZWZvcmUgPj0gcnVuTGVuZ3RoIHx8IGxpbWl0QWZ0
ZXIgPj0gcnVuTGVuZ3RoIHx8IGxpbWl0QmVmb3JlICsgbGltaXRBZnRlciA+IHJ1bkxlbmd0aCkK
KyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgdW5zaWduZWQgbGVmdFNpZGVMZW5n
dGggPSBydW5MZW5ndGg7CisgICAgICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIGNhY2hl
IHRoZSBoeXBoZW4gd2lkdGguCisgICAgICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUuZm9u
dENhc2NhZGUoKTsKKyAgICAgICAgYXV0byBoeXBoZW5XaWR0aCA9IElubGluZUxheW91dFVuaXQg
eyBmb250Q2FzY2FkZS53aWR0aChUZXh0UnVuIHsgU3RyaW5nVmlldyB7IHN0eWxlLmh5cGhlblN0
cmluZygpIH0gfSkgfTsKKyAgICAgICAgaWYgKCFmaW5kTGFzdEJyZWFrYWJsZVBvc2l0aW9uKSB7
CisgICAgICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoRXhjbHVkaW5nSHlwaGVuID0gYXZhaWxh
YmxlV2lkdGggLSBoeXBoZW5XaWR0aDsKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVXaWR0aEV4
Y2x1ZGluZ0h5cGhlbiA8PSAwIHx8ICFlbm91Z2hXaWR0aEZvckh5cGhlbmF0aW9uKGF2YWlsYWJs
ZVdpZHRoRXhjbHVkaW5nSHlwaGVuLCBmb250Q2FzY2FkZS5waXhlbFNpemUoKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGxlZnRTaWRlTGVuZ3RoID0gVGV4dFV0
aWw6OnNwbGl0KGlubGluZVRleHRJdGVtLmlubGluZVRleHRCb3goKSwgaW5saW5lVGV4dEl0ZW0u
c3RhcnQoKSwgcnVuTGVuZ3RoLCBvdmVyZmxvd2luZ1J1bi5sb2dpY2FsV2lkdGgsIGF2YWlsYWJs
ZVdpZHRoRXhjbHVkaW5nSHlwaGVuLCBsb2dpY2FsTGVmdCkubGVuZ3RoOworICAgICAgICB9Cisg
ICAgICAgIGlmIChsZWZ0U2lkZUxlbmd0aCA8IGxpbWl0QmVmb3JlKQorICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgLy8gQWRqdXN0IGJlZm9yZSBpbmRleCB0byBhY2NvbW1vZGF0ZSB0
aGUgbGltaXQtYWZ0ZXIgdmFsdWUgKGl0J3MgdGhlIGxhc3QgcG90ZW50aWFsIGh5cGhlbiBsb2Nh
dGlvbiBpbiB0aGlzIHJ1bikuCisgICAgICAgIGF1dG8gaHlwaGVuQmVmb3JlID0gc3RkOjptaW4o
bGVmdFNpZGVMZW5ndGgsIHJ1bkxlbmd0aCAtIGxpbWl0QWZ0ZXIpICsgMTsKKyAgICAgICAgdW5z
aWduZWQgaHlwaGVuTG9jYXRpb24gPSBsYXN0SHlwaGVuTG9jYXRpb24oU3RyaW5nVmlldyhpbmxp
bmVUZXh0SXRlbS5pbmxpbmVUZXh0Qm94KCkuY29udGVudCgpKS5zdWJzdHJpbmcoaW5saW5lVGV4
dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpLCBoeXBoZW5CZWZvcmUsIHN0
eWxlLmNvbXB1dGVkTG9jYWxlKCkpOworICAgICAgICBpZiAoIWh5cGhlbkxvY2F0aW9uIHx8IGh5
cGhlbkxvY2F0aW9uIDwgbGltaXRCZWZvcmUpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICAvLyBoeXBoZW5Mb2NhdGlvbiBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhpcyBJ
bmxpbmVJdGVtVGV4dC4KKyAgICAgICAgYXV0byB0cmFpbGluZ1BhcnRpYWxSdW5XaWR0aFdpdGhI
eXBoZW4gPSBUZXh0VXRpbDo6d2lkdGgoaW5saW5lVGV4dEl0ZW0sIGlubGluZVRleHRJdGVtLnN0
YXJ0KCksIGlubGluZVRleHRJdGVtLnN0YXJ0KCkgKyBoeXBoZW5Mb2NhdGlvbikgKyBoeXBoZW5X
aWR0aDsgCisgICAgICAgIHJldHVybiBQYXJ0aWFsUnVuIHsgaHlwaGVuTG9jYXRpb24sIHRyYWls
aW5nUGFydGlhbFJ1bldpZHRoV2l0aEh5cGhlbiwgdHJ1ZSB9OworICAgIH0KKworICAgIEFTU0VS
VChicmVha1J1bGUgPT0gV29yZEJyZWFrUnVsZTo6Tm9CcmVhayk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordm9pZCBJbmxpbmVDb250ZW50QnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQ6OmFwcGVu
ZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCwgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gY29sbGFwc2libGVXaWR0aCkKK3sKKyAg
ICBtX3J1bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwgbG9naWNhbFdpZHRoIH0pOworICAgIG1fbG9n
aWNhbFdpZHRoICs9IGxvZ2ljYWxXaWR0aDsKKyAgICBpZiAoIWNvbGxhcHNpYmxlV2lkdGgpIHsK
KyAgICAgICAgbV9jb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCA9IHsgfTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoKmNvbGxhcHNpYmxlV2lkdGggPT0gbG9naWNhbFdpZHRoKSB7Cisg
ICAgICAgIC8vIEZ1bGx5IGNvbGxhcHNpYmxlIHJ1bi4KKyAgICAgICAgbV9jb2xsYXBzaWJsZUxv
Z2ljYWxXaWR0aCArPSBsb2dpY2FsV2lkdGg7CisgICAgICAgIEFTU0VSVChtX2NvbGxhcHNpYmxl
TG9naWNhbFdpZHRoIDw9IG1fbG9naWNhbFdpZHRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAvLyBQYXJ0aWFsbHkgY29sbGFwc2libGUgcnVuLgorICAgIG1fY29sbGFwc2libGVMb2dp
Y2FsV2lkdGggPSAqY29sbGFwc2libGVXaWR0aDsKKyAgICBBU1NFUlQobV9jb2xsYXBzaWJsZUxv
Z2ljYWxXaWR0aCA8PSBtX2xvZ2ljYWxXaWR0aCk7Cit9CisKK3ZvaWQgSW5saW5lQ29udGVudEJy
ZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50OjpyZXNldChJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCkKK3sKKyAgICBtX2xvZ2ljYWxMZWZ0ID0gY29udGVudExvZ2ljYWxMZWZ0Owor
ICAgIG1fbG9naWNhbFdpZHRoID0geyB9OworICAgIG1fY29sbGFwc2libGVMb2dpY2FsV2lkdGgg
PSB7IH07CisgICAgbV9ydW5zLmNsZWFyKCk7Cit9CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lQ29udGVudEJy
ZWFrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUNv
bnRlbnRCcmVha2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzFmZDcyZmFkNTA3MDY1Y2Y2YWJkNGM3OGQwMWM1
YjAxZmI4N2NkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUNvbnRlbnRCcmVha2VyLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiTGF5b3V0VW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZW5kZXJTdHlsZTsKKworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIElu
bGluZUl0ZW07CitzdHJ1Y3QgVHJhaWxpbmdUZXh0Q29udGVudDsKKworY2xhc3MgSW5saW5lQ29u
dGVudEJyZWFrZXIgeworcHVibGljOgorICAgIHN0cnVjdCBQYXJ0aWFsUnVuIHsKKyAgICAgICAg
c2l6ZV90IGxlbmd0aCB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGggeyAwIH07CisgICAgICAgIGJvb2wgbmVlZHNIeXBoZW4geyBmYWxzZSB9OworICAgIH07Cisg
ICAgZW51bSBjbGFzcyBJc0VuZE9mTGluZSB7IE5vLCBZZXMgfTsKKyAgICBzdHJ1Y3QgUmVzdWx0
IHsKKyAgICAgICAgZW51bSBjbGFzcyBBY3Rpb24geworICAgICAgICAgICAgS2VlcCwgLy8gS2Vl
cCBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgICAgICBCcmVhaywgLy8gUGFy
dGlhbCBjb250ZW50IGlzIG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgICAgICBQdXNoLCAv
LyBDb250ZW50IGlzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgorICAgICAgICAgICAgUmV2ZXJ0
VG9MYXN0V3JhcE9wcG9ydHVuaXR5IC8vIFRoZSBjdXJyZW50IGNvbnRlbnQgb3ZlcmZsb3dzIGFu
ZCBjYW4ndCBnZXQgd3JhcHBlZC4gVGhlIGNvbnRlbnQgbmVlZHMgdG8gYmUgcmV2ZXJ0ZWQgYmFj
ayB0byB0aGUgbGFzdCB3cmFwcGluZyBvcHBvcnR1bml0eS4KKyAgICAgICAgfTsKKyAgICAgICAg
c3RydWN0IFBhcnRpYWxUcmFpbGluZ0NvbnRlbnQgeworICAgICAgICAgICAgc2l6ZV90IHRyYWls
aW5nUnVuSW5kZXggeyAwIH07CisgICAgICAgICAgICBPcHRpb25hbDxQYXJ0aWFsUnVuPiBwYXJ0
aWFsUnVuOyAvLyBudWxsb3B0IHBhcnRpYWwgcnVuIG1lYW5zIHRoZSB0cmFpbGluZyBydW4gaXMg
YSBjb21wbGV0ZSBydW4uCisgICAgICAgIH07CisgICAgICAgIEFjdGlvbiBhY3Rpb24geyBBY3Rp
b246OktlZXAgfTsKKyAgICAKKyAgICAgICAgSXNFbmRPZkxpbmUgaXNFbmRPZkxpbmUgeyBJc0Vu
ZE9mTGluZTo6Tm8gfTsKKyAgICAgICAgT3B0aW9uYWw8UGFydGlhbFRyYWlsaW5nQ29udGVudD4g
cGFydGlhbFRyYWlsaW5nQ29udGVudCB7IH07CisgICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGxh
c3RXcmFwT3Bwb3J0dW5pdHlJdGVtIHsgbnVsbHB0ciB9OworICAgIH07CisKKyAgICAvLyBUaGlz
IHN0cnVjdCByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgY29udGludW91cyBjb250ZW50IGNvbW1p
dHRlZCB0byBjb250ZW50IGJyZWFraW5nIGF0IGEgdGltZSAobm8gaW4tYmV0d2VlbiB3cmFwIG9w
cG9ydHVuaXRpZXMpLgorICAgIC8vIGUuZy4KKyAgICAvLyA8ZGl2PnRleHQgY29udGVudCA8c3Bh
bj5zcGFuMTwvc3Bhbj5iZXR3ZWVuPHNwYW4+c3BhbjI8L3NwYW4+PC9kaXY+CisgICAgLy8gW3Rl
eHRdWyBdW2NvbnRlbnRdWyBdW2NvbnRhaW5lciBzdGFydF1bc3BhbjFdW2NvbnRhaW5lciBlbmRd
W2JldHdlZW5dW2NvbnRhaW5lciBzdGFydF1bc3BhbjJdW2NvbnRhaW5lciBlbmRdCisgICAgLy8g
Y29udGludW91cyBjYW5kaWRhdGUgY29udGVudCBhdCBhIHRpbWU6CisgICAgLy8gMS4gW3RleHRd
CisgICAgLy8gMi4gWyBdCisgICAgLy8gMy4gW2NvbnRlbnRdCisgICAgLy8gNC4gWyBdCisgICAg
Ly8gNS4gW2NvbnRhaW5lciBzdGFydF1bc3BhbjFdW2NvbnRhaW5lciBlbmRdW2JldHdlZW5dW2Nv
bnRhaW5lciBzdGFydF1bc3BhbjJdW2NvbnRhaW5lciBlbmRdCisgICAgLy8gc2VlIGh0dHBzOi8v
ZHJhZnRzLmNzc3dnLm9yZy9jc3MtdGV4dC0zLyNsaW5lLWJyZWFrLWRldGFpbHMKKyAgICBzdHJ1
Y3QgQ29udGludW91c0NvbnRlbnQgeworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFdpZHRoOyB9CisgICAgICAgIElubGluZUxh
eW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0OyB9Cisg
ICAgICAgIElubGluZUxheW91dFVuaXQgY29sbGFwc2libGVMb2dpY2FsV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2NvbGxhcHNpYmxlTG9naWNhbFdpZHRoOyB9CisgICAgICAgIElubGluZUxheW91
dFVuaXQgbm9uQ29sbGFwc2libGVMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBsb2dpY2Fs
V2lkdGgoKSAtIGNvbGxhcHNpYmxlTG9naWNhbFdpZHRoKCk7IH0KKyAgICAgICAgYm9vbCBoYXNU
cmFpbGluZ0NvbGxhcHNpYmxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuICEhY29sbGFwc2libGVM
b2dpY2FsV2lkdGgoKTsgfQorICAgICAgICBib29sIGlzRnVsbHlDb2xsYXBzaWJsZSgpIGNvbnN0
IHsgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpID09IGNvbGxhcHNpYmxlTG9naWNhbFdpZHRoKCk7IH0K
KworICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgsIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IGNvbGxhcHNpYmxlV2lk
dGgpOworICAgICAgICB2b2lkIHJlc2V0KElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxM
ZWZ0KTsKKworICAgICAgICBzdHJ1Y3QgUnVuIHsKKyAgICAgICAgICAgIFJ1bihjb25zdCBJbmxp
bmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgUnVu
KGNvbnN0IFJ1biYpOworICAgICAgICAgICAgUnVuJiBvcGVyYXRvcj0oY29uc3QgUnVuJik7CisK
KyAgICAgICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW07CisgICAgICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCB7IDAgfTsKKyAgICAgICAgfTsKKyAgICAgICAg
dXNpbmcgUnVuTGlzdCA9IFZlY3RvcjxSdW4sIDM+OworICAgICAgICBjb25zdCBSdW5MaXN0JiBy
dW5zKCkgY29uc3QgeyByZXR1cm4gbV9ydW5zOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBS
dW5MaXN0IG1fcnVuczsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xvZ2ljYWxMZWZ0IHsg
MCB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbG9naWNhbFdpZHRoIHsgMCB9OworICAg
ICAgICBJbmxpbmVMYXlvdXRVbml0IG1fY29sbGFwc2libGVMb2dpY2FsV2lkdGggeyAwIH07Cisg
ICAgfTsKKworICAgIHN0cnVjdCBMaW5lU3RhdHVzIHsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBhdmFpbGFibGVXaWR0aCB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBjb2xsYXBz
aWJsZVdpZHRoIHsgMCB9OworICAgICAgICBib29sIGxpbmVIYXNGdWxseUNvbGxhcHNpYmxlVHJh
aWxpbmdSdW4geyBmYWxzZSB9OworICAgICAgICBib29sIGxpbmVJc0VtcHR5IHsgdHJ1ZSB9Owor
ICAgIH07CisgICAgUmVzdWx0IHByb2Nlc3NJbmxpbmVDb250ZW50KGNvbnN0IENvbnRpbnVvdXND
b250ZW50JiwgY29uc3QgTGluZVN0YXR1cyYpOworCisgICAgdm9pZCBzZXRIeXBoZW5hdGlvbkRp
c2FibGVkKCkgeyBuX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCA9IHRydWU7IH0KKworcHJpdmF0ZToK
KyAgICBSZXN1bHQgcHJvY2Vzc092ZXJmbG93aW5nQ29udGVudChjb25zdCBDb250aW51b3VzQ29u
dGVudCYsIGNvbnN0IExpbmVTdGF0dXMmKSBjb25zdDsKKyAgICBPcHRpb25hbDxUcmFpbGluZ1Rl
eHRDb250ZW50PiBwcm9jZXNzT3ZlcmZsb3dpbmdUZXh0Q29udGVudChjb25zdCBDb250aW51b3Vz
Q29udGVudCYsIGNvbnN0IExpbmVTdGF0dXMmKSBjb25zdDsKKyAgICBPcHRpb25hbDxQYXJ0aWFs
UnVuPiB0cnlCcmVha2luZ1RleHRSdW4oY29uc3QgQ29udGludW91c0NvbnRlbnQ6OlJ1biYgb3Zl
cmZsb3dSdW4sIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQg
YXZhaWxhYmxlV2lkdGgpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBXb3JkQnJlYWtSdWxlIHsK
KyAgICAgICAgTm9CcmVhaywKKyAgICAgICAgQXRBcmJpdHJhcnlQb3NpdGlvbiwKKyAgICAgICAg
T25seUh5cGhlbmF0aW9uQWxsb3dlZAorICAgIH07CisgICAgV29yZEJyZWFrUnVsZSB3b3JkQnJl
YWtCZWhhdmlvcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkS2Vl
cEVuZE9mTGluZVdoaXRlc3BhY2UoY29uc3QgQ29udGludW91c0NvbnRlbnQmKSBjb25zdDsKKyAg
ICBib29sIGlzQ29udGVudFdyYXBwaW5nQWxsb3dlZChjb25zdCBDb250aW51b3VzQ29udGVudCYp
IGNvbnN0OworCisgICAgYm9vbCBuX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2hhc1dyYXBPcHBvcnR1bml0eUF0UHJldmlvdXNQb3NpdGlvbiB7IGZhbHNlIH07
Cit9OworCitpbmxpbmUgSW5saW5lQ29udGVudEJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50OjpS
dW46OlJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCkKKyAgICA6IGlubGluZUl0ZW0oaW5saW5lSXRlbSkKKyAgICAsIGxvZ2ljYWxX
aWR0aChsb2dpY2FsV2lkdGgpCit7Cit9CisKK2lubGluZSBJbmxpbmVDb250ZW50QnJlYWtlcjo6
Q29udGludW91c0NvbnRlbnQ6OlJ1bjo6UnVuKGNvbnN0IFJ1biYgb3RoZXIpCisgICAgOiBpbmxp
bmVJdGVtKG90aGVyLmlubGluZUl0ZW0pCisgICAgLCBsb2dpY2FsV2lkdGgob3RoZXIubG9naWNh
bFdpZHRoKQoreworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzYzIxYTNlMjdhYjIwYjRjODMyNTYxYTViNWNi
NmNkNzUxM2NhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmxpbmVMaW5lQnJlYWtlci5oIgotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgotI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCi0jaW5jbHVkZSAiSW5saW5lSXRlbS5oIgotI2lu
Y2x1ZGUgIklubGluZVRleHRJdGVtLmgiCi0jaW5jbHVkZSAiVGV4dFV0aWwuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c1RleHRDb250ZW50T25seShjb25zdCBMaW5lQnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQmIGNv
bnRpbnVvdXNDb250ZW50KQotewotICAgIC8vIDxzcGFuPnRleHQ8L3NwYW4+IGlzIGNvbnNpZGVy
ZWQgYSB0ZXh0IHJ1biBldmVuIHdpdGggdGhlIFtjb250YWluZXIgc3RhcnRdW2NvbnRhaW5lciBl
bmRdIGlubGluZSBpdGVtcy4KLSAgICAvLyBEdWUgdG8gY29tbWl0IGJvdW5kYXJ5IHJ1bGVzLCB3
ZSBqdXN0IG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IG5vbi10eXBlbGVzcyBpbmxpbmUgaXRlbSAo
Y2FuJ3QgaGF2ZSBib3RoIFtpbWddIGFuZCBbdGV4dF0pCi0gICAgZm9yIChhdXRvJiBydW4gOiBj
b250aW51b3VzQ29udGVudC5ydW5zKCkpIHsKLSAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IHJ1
bi5pbmxpbmVJdGVtOwotICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkg
fHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHJldHVybiBpbmxpbmVJdGVtLmlzVGV4dCgpOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Zpc3VhbGx5RW1wdHlXaGl0ZXNwYWNlQ29u
dGVudE9ubHkoY29uc3QgTGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50JiBjb250aW51b3Vz
Q29udGVudCkKLXsKLSAgICAvLyBbPHNwYW4+PC9zcGFuPiBdIFs8c3Bhbj4gPC9zcGFuPl0gWyA8
c3BhbiBzdHlsZT0icGFkZGluZzogMHB4OyI+PC9zcGFuPl0gYXJlIGFsbCBjb25zaWRlcmVkIHZp
c3VhbGx5IGVtcHR5IHdoaXRlc3BhY2UgY29udGVudC4KLSAgICAvLyBbPHNwYW4gc3R5bGU9ImJv
cmRlcjogMXB4IHNvbGlkIHJlZCI+PC9zcGFuPiBdIHdoaWxlIHRoaXMgaXMgd2hpdGVzcGFjZSBj
b250ZW50IG9ubHksIGl0IGlzIG5vdCBjb25zaWRlcmVkIHZpc3VhbGx5IGVtcHR5LgotICAgIC8v
IER1ZSB0byBjb21taXQgYm91bmRhcnkgcnVsZXMsIHdlIGp1c3QgbmVlZCB0byBjaGVjayB0aGUg
Zmlyc3Qgbm9uLXR5cGVsZXNzIGlubGluZSBpdGVtIChjYW4ndCBoYXZlIGJvdGggW2ltZ10gYW5k
IFt0ZXh0XSkKLSAgICBmb3IgKGF1dG8mIHJ1biA6IGNvbnRpbnVvdXNDb250ZW50LnJ1bnMoKSkg
ewotICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gcnVuLmlubGluZUl0ZW07Ci0gICAgICAgIC8v
IEZJWE1FOiBjaGVjayBmb3IgcGFkZGluZyBib3JkZXIgZXRjLgotICAgICAgICBpZiAoaW5saW5l
SXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHVybiBpbmxpbmVJdGVtLmlzVGV4dCgp
ICYmIGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNOb25D
b250ZW50UnVuc09ubHkoY29uc3QgTGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50JiBjb250
aW51b3VzQ29udGVudCkKLXsKLSAgICAvLyA8c3Bhbj48L3NwYW4+IDwtIG5vbiBjb250ZW50IHJ1
bnMuCi0gICAgZm9yIChhdXRvJiBydW4gOiBjb250aW51b3VzQ29udGVudC5ydW5zKCkpIHsKLSAg
ICAgICAgYXV0byYgaW5saW5lSXRlbSA9IHJ1bi5pbmxpbmVJdGVtOwotICAgICAgICBpZiAoaW5s
aW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8c2l6ZV90PiBmaXJz
dFRleHRSdW5JbmRleChjb25zdCBMaW5lQnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQmIGNvbnRp
bnVvdXNDb250ZW50KQotewotICAgIGF1dG8mIHJ1bnMgPSBjb250aW51b3VzQ29udGVudC5ydW5z
KCk7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHJ1bnMuc2l6ZSgpOyArK2lu
ZGV4KSB7Ci0gICAgICAgIGlmIChydW5zW2luZGV4XS5pbmxpbmVJdGVtLmlzVGV4dCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICByZXR1cm4geyB9OwotfQotCi1zdGF0
aWMgaW5saW5lIE9wdGlvbmFsPHNpemVfdD4gbGFzdENvbnRlbnRSdW5JbmRleChjb25zdCBMaW5l
QnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQmIGNvbnRpbnVvdXNDb250ZW50KQotewotICAgIGF1
dG8mIHJ1bnMgPSBjb250aW51b3VzQ29udGVudC5ydW5zKCk7Ci0gICAgZm9yIChhdXRvIGluZGV4
ID0gcnVucy5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAgIGlmIChydW5zW2luZGV4XS5pbmxp
bmVJdGVtLmlzVGV4dCgpIHx8IHJ1bnNbaW5kZXhdLmlubGluZUl0ZW0uaXNCb3goKSkKLSAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotc3RhdGlj
IGlubGluZSBib29sIGlzV3JhcHBpbmdBbGxvd2VkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
LXsKLSAgICAvLyBEbyBub3QgdHJ5IHRvIHB1c2ggb3ZlcmZsb3duICdwcmUnIGFuZCAnbm8td3Jh
cCcgY29udGVudCB0byBuZXh0IGxpbmUuCi0gICAgcmV0dXJuIHN0eWxlLndoaXRlU3BhY2UoKSAh
PSBXaGl0ZVNwYWNlOjpQcmUgJiYgc3R5bGUud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6Ok5v
V3JhcDsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNob3VsZEtlZXBCZWdpbm5pbmdPZkxpbmVX
aGl0ZXNwYWNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBhdXRvIHdoaXRlc3Bh
Y2UgPSBzdHlsZS53aGl0ZVNwYWNlKCk7Ci0gICAgcmV0dXJuIHdoaXRlc3BhY2UgPT0gV2hpdGVT
cGFjZTo6UHJlIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6UHJlV3JhcCB8fCB3aGl0ZXNw
YWNlID09IFdoaXRlU3BhY2U6OkJyZWFrU3BhY2VzOwotfQotCi1zdGF0aWMgaW5saW5lIE9wdGlv
bmFsPHNpemVfdD4gbGFzdFdyYXBPcHBvcnR1bml0eUluZGV4KGNvbnN0IExpbmVCcmVha2VyOjpD
b250aW51b3VzQ29udGVudDo6UnVuTGlzdCYgcnVuTGlzdCkKLXsKLSAgICAvLyA8c3BhbiBzdHls
ZT0id2hpdGUtc3BhY2U6IHByZSI+bm9fd3JhcDwvc3Bhbj48c3Bhbj55ZXMgd3JhcDwvc3Bhbj48
c3BhbiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZSI+bm9fd3JhcDwvc3Bhbj4uCi0gICAgLy8gW2Nv
bnRhaW5lciBzdGFydF1bbm9fd3JhcF1bY29udGFpbmVyIGVuZF1bY29udGFpbmVyIHN0YXJ0XVt5
ZXNdIDwtIGNvbnRpbnVvdXMgY29udGVudAotICAgIC8vIFsgXSA8LSBjb250aW51b3VzIGNvbnRl
bnQKLSAgICAvLyBbd3JhcF1bY29udGFpbmVyIGVuZF1bY29udGFpbmVyIHN0YXJ0XVtub193cmFw
XVtjb250YWluZXIgZW5kXSA8LSBjb250aW51b3VzIGNvbnRlbnQKLSAgICAvLyBSZXR1cm4gIzAg
YXMgdGhlIGluZGV4IHdoZXJlIHRoZSBzZWNvbmQgY29udGludW91cyBjb250ZW50IGNhbiB3cmFw
IGF0LgotICAgIEFTU0VSVCghcnVuTGlzdC5pc0VtcHR5KCkpOwotICAgIGF1dG8gbGFzdEl0ZW1J
bmRleCA9IHJ1bkxpc3Quc2l6ZSgpIC0gMTsKLSAgICByZXR1cm4gaXNXcmFwcGluZ0FsbG93ZWQo
cnVuTGlzdFtsYXN0SXRlbUluZGV4XS5pbmxpbmVJdGVtLnN0eWxlKCkpID8gbWFrZU9wdGlvbmFs
KGxhc3RJdGVtSW5kZXgpIDogV1RGOjpudWxsb3B0OwotfQotCi1ib29sIExpbmVCcmVha2VyOjpp
c0NvbnRlbnRXcmFwcGluZ0FsbG93ZWQoY29uc3QgQ29udGludW91c0NvbnRlbnQmIGNvbnRpbnVv
dXNDb250ZW50KSBjb25zdAotewotICAgIC8vIFVzZSB0aGUgbGFzdCBpbmxpbmUgaXRlbSB3aXRo
IGNvbnRlbnQgKHdoZXJlIHdlIHdvdWxkIGJlIHdyYXBwaW5nKSB0byBkZWNpZGUgaWYgY29udGVu
dCB3cmFwcGluZyBpcyBhbGxvd2VkLgotICAgIGF1dG8mIGNvbnRpbnVvdXNSdW5zID0gY29udGlu
dW91c0NvbnRlbnQucnVucygpOwotICAgIGF1dG8gcnVuSW5kZXggPSBsYXN0Q29udGVudFJ1bklu
ZGV4KGNvbnRpbnVvdXNDb250ZW50KS52YWx1ZU9yKGNvbnRpbnVvdXNSdW5zLnNpemUoKSAtIDEp
OwotICAgIHJldHVybiBpc1dyYXBwaW5nQWxsb3dlZChjb250aW51b3VzUnVuc1tydW5JbmRleF0u
aW5saW5lSXRlbS5zdHlsZSgpKTsKLX0KLQotYm9vbCBMaW5lQnJlYWtlcjo6c2hvdWxkS2VlcEVu
ZE9mTGluZVdoaXRlc3BhY2UoY29uc3QgQ29udGludW91c0NvbnRlbnQmIGNvbnRpbnVvdXNDb250
ZW50KSBjb25zdAotewotICAgIC8vIEdyYWIgdGhlIHN0eWxlIGFuZCBjaGVjayBmb3Igd2hpdGUt
c3BhY2UgcHJvcGVydHkgdG8gZGVjaWRlIHdoZXRoZXIgd2Ugc2hvdWxkIGxldCB0aGlzIHdoaXRl
c3BhY2UgY29udGVudCBvdmVyZmxvdyB0aGUgY3VycmVudCBsaW5lLgotICAgIC8vIE5vdGUgdGhh
dCB0aGUgImtlZXAiIGluIHRoaXMgY29udGV4dCBtZWFucyB3ZSBsZXQgdGhlIHdoaXRlc3BhY2Ug
Y29udGVudCBzaXQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAvLyBJdCBtaWdodCB2ZXJ5IHdl
bGwgZ2V0IGNvbGxhcHNlZCB3aGVuIHdlIGNsb3NlIHRoZSBsaW5lIChub3JtYWwvbm93cmFwL3By
ZS1saW5lKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LTMvI3do
aXRlLXNwYWNlLXByb3BlcnR5Ci0gICAgYXV0byB3aGl0ZXNwYWNlID0gY29udGludW91c0NvbnRl
bnQucnVucygpWypmaXJzdFRleHRSdW5JbmRleChjb250aW51b3VzQ29udGVudCldLmlubGluZUl0
ZW0uc3R5bGUoKS53aGl0ZVNwYWNlKCk7Ci0gICAgcmV0dXJuIHdoaXRlc3BhY2UgPT0gV2hpdGVT
cGFjZTo6Tm9ybWFsIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6Tm9XcmFwIHx8IHdoaXRl
c3BhY2UgPT0gV2hpdGVTcGFjZTo6UHJlV3JhcCB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6
OlByZUxpbmU7Ci19Ci0KLUxpbmVCcmVha2VyOjpSZXN1bHQgTGluZUJyZWFrZXI6OnByb2Nlc3NJ
bmxpbmVDb250ZW50KGNvbnN0IENvbnRpbnVvdXNDb250ZW50JiBjYW5kaWRhdGVDb250ZW50LCBj
b25zdCBMaW5lU3RhdHVzJiBsaW5lU3RhdHVzKQotewotICAgIGF1dG8gcHJvY2Vzc0NhbmRpZGF0
ZUNvbnRlbnQgPSBbJl0gewotICAgICAgICBpZiAoY2FuZGlkYXRlQ29udGVudC5sb2dpY2FsV2lk
dGgoKSA8PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRoKQotICAgICAgICAgICAgcmV0dXJuIFJl
c3VsdCB7IFJlc3VsdDo6QWN0aW9uOjpLZWVwIH07Ci0jaWYgVVNFX0ZMT0FUX0FTX0lOTElORV9M
QVlPVVRfVU5JVAotICAgICAgICAvLyBQcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24gc3VtcyB1
cCBmbG9hdHMgd2hpbGUgbGluZSBicmVha2VyIHN1YnRyYWN0cyB0aGVtLiBUaGlzIGNhbiBsZWFk
IHRvIGVwc2lsb24tc2NhbGUgZGlmZmVyZW5jZXMuCi0gICAgICAgIGlmIChXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoY2FuZGlkYXRlQ29udGVudC5sb2dpY2FsV2lkdGgoKSwgbGluZVN0YXR1cy5h
dmFpbGFibGVXaWR0aCkpCi0gICAgICAgICAgICByZXR1cm4gUmVzdWx0IHsgUmVzdWx0OjpBY3Rp
b246OktlZXAgfTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gcHJvY2Vzc092ZXJmbG93aW5nQ29u
dGVudChjYW5kaWRhdGVDb250ZW50LCBsaW5lU3RhdHVzKTsKLSAgICB9OwotCi0gICAgYXV0byBy
ZXN1bHQgPSBwcm9jZXNzQ2FuZGlkYXRlQ29udGVudCgpOwotICAgIGlmIChyZXN1bHQuYWN0aW9u
ID09IFJlc3VsdDo6QWN0aW9uOjpLZWVwKSB7Ci0gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRo
ZSBlbmQgb2YgdGhlIGxpbmUsIGhvbGQgb24gdG8gdGhlIGxhc3QgZWxpZ2libGUgbGluZSB3cmFw
IG9wcG9ydHVuaXR5IHNvIHRoYXQgd2UgY291bGQgcmV2ZXJ0IGJhY2sKLSAgICAgICAgLy8gdG8g
dGhpcyBwb3NpdGlvbiBpZiBubyBvdGhlciBsaW5lIGJyZWFraW5nIG9wcG9ydHVuaXR5IGV4aXN0
cyBpbiB0aGlzIGNvbnRlbnQuCi0gICAgICAgIGlmIChhdXRvIGxhc3RMaW5lV3JhcE9wcG9ydHVu
aXR5SW5kZXggPSBsYXN0V3JhcE9wcG9ydHVuaXR5SW5kZXgoY2FuZGlkYXRlQ29udGVudC5ydW5z
KCkpKSB7Ci0gICAgICAgICAgICBhdXRvIGlzRWxpZ2libGVMaW5lV3JhcE9wcG9ydHVuaXR5ID0g
WyZdIChhdXRvJiBjYW5kaWRhdGVJdGVtKSB7Ci0gICAgICAgICAgICAgICAgLy8gSnVzdCBjaGVj
ayBmb3IgbGVhZGluZyBjb2xsYXBzaWJsZSB3aGl0ZXNwYWNlIGZvciBub3cuCi0gICAgICAgICAg
ICAgICAgaWYgKCFsaW5lU3RhdHVzLmxpbmVJc0VtcHR5IHx8ICFjYW5kaWRhdGVJdGVtLmlzVGV4
dCgpIHx8ICFkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oY2FuZGlkYXRlSXRlbSkuaXNXaGl0ZXNw
YWNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAg
IHJldHVybiBzaG91bGRLZWVwQmVnaW5uaW5nT2ZMaW5lV2hpdGVzcGFjZShjYW5kaWRhdGVJdGVt
LnN0eWxlKCkpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGF1dG8mIGxhc3RXcmFwT3Bw
b3J0dW5pdHlDYW5kaWRhdGVJdGVtID0gY2FuZGlkYXRlQ29udGVudC5ydW5zKClbKmxhc3RMaW5l
V3JhcE9wcG9ydHVuaXR5SW5kZXhdLmlubGluZUl0ZW07Ci0gICAgICAgICAgICBpZiAoaXNFbGln
aWJsZUxpbmVXcmFwT3Bwb3J0dW5pdHkobGFzdFdyYXBPcHBvcnR1bml0eUNhbmRpZGF0ZUl0ZW0p
KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lmxhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtID0gJmxh
c3RXcmFwT3Bwb3J0dW5pdHlDYW5kaWRhdGVJdGVtOwotICAgICAgICAgICAgICAgIG1faGFzV3Jh
cE9wcG9ydHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdHJ1Y3QgVHJhaWxpbmdU
ZXh0Q29udGVudCB7Ci0gICAgc2l6ZV90IHJ1bkluZGV4IHsgMCB9OwotICAgIGJvb2wgaGFzT3Zl
cmZsb3cgeyBmYWxzZSB9OyAvLyBUcmFpbGluZyBjb250ZW50IHN0aWxsIG92ZXJmbG93cyB0aGUg
bGluZS4KLSAgICBPcHRpb25hbDxMaW5lQnJlYWtlcjo6UGFydGlhbFJ1bj4gcGFydGlhbFJ1bjsK
LX07Ci0KLUxpbmVCcmVha2VyOjpSZXN1bHQgTGluZUJyZWFrZXI6OnByb2Nlc3NPdmVyZmxvd2lu
Z0NvbnRlbnQoY29uc3QgQ29udGludW91c0NvbnRlbnQmIG92ZXJmbG93Q29udGVudCwgY29uc3Qg
TGluZVN0YXR1cyYgbGluZVN0YXR1cykgY29uc3QKLXsKLSAgICBhdXRvIGNvbnRpbnVvdXNDb250
ZW50ID0gQ29udGludW91c0NvbnRlbnQgeyBvdmVyZmxvd0NvbnRlbnQgfTsKLSAgICBBU1NFUlQo
IWNvbnRpbnVvdXNDb250ZW50LnJ1bnMoKS5pc0VtcHR5KCkpOwotCi0gICAgQVNTRVJUKGNvbnRp
bnVvdXNDb250ZW50LmxvZ2ljYWxXaWR0aCgpID4gbGluZVN0YXR1cy5hdmFpbGFibGVXaWR0aCk7
Ci0gICAgaWYgKGNvbnRpbnVvdXNDb250ZW50Lmhhc1RyYWlsaW5nQ29sbGFwc2libGVDb250ZW50
KCkpIHsKLSAgICAgICAgQVNTRVJUKGlzVGV4dENvbnRlbnRPbmx5KGNvbnRpbnVvdXNDb250ZW50
KSk7Ci0gICAgICAgIGF1dG8gSXNFbmRPZkxpbmUgPSBpc0NvbnRlbnRXcmFwcGluZ0FsbG93ZWQo
Y29udGludW91c0NvbnRlbnQpID8gSXNFbmRPZkxpbmU6OlllcyA6IElzRW5kT2ZMaW5lOjpObzsK
LSAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIGNvbnRlbnQgZml0cyB3aXRob3V0IHRoZSB0
cmFpbGluZyBjb2xsYXBzaWJsZSBwYXJ0LgotICAgICAgICBpZiAoY29udGludW91c0NvbnRlbnQu
bm9uQ29sbGFwc2libGVMb2dpY2FsV2lkdGgoKSA8PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRo
KQotICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAsIElzRW5kT2ZMaW5l
IH07Ci0gICAgICAgIC8vIE5vdyBjaGVjayBpZiB3ZSBjYW4gdHJpbSB0aGUgbGluZSB0b28uCi0g
ICAgICAgIGlmIChsaW5lU3RhdHVzLmxpbmVIYXNGdWxseUNvbGxhcHNpYmxlVHJhaWxpbmdSdW4g
JiYgY29udGludW91c0NvbnRlbnQuaXNGdWxseUNvbGxhcHNpYmxlKCkpIHsKLSAgICAgICAgICAg
IC8vIElmIHRoaXMgbmV3IGNvbnRlbnQgaXMgZnVsbHkgY29sbGFwc2libGUsIGl0IHNob3VsZCBz
dXJlbHkgZml0LgotICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAsIElz
RW5kT2ZMaW5lIH07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGxpbmVTdGF0dXMuY29sbGFw
c2libGVXaWR0aCAmJiBpc05vbkNvbnRlbnRSdW5zT25seShjb250aW51b3VzQ29udGVudCkpIHsK
LSAgICAgICAgLy8gTGV0J3Mgc2VlIGlmIHRoZSBub24tY29udGVudCBydW5zIGZpdCB3aGVuIHRo
ZSBsaW5lIGhhcyB0cmFpbGluZyBjb2xsYXBzaWJsZSBjb250ZW50LgotICAgICAgICAvLyAidGV4
dCBjb250ZW50IDxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxcHgiPjwvc3Bhbj4iIDwtIHRoZSA8c3Bh
bj48L3NwYW4+IHJ1bnMgY291bGQgZml0IGFmdGVyIGNvbGxhcHNpbmcgdGhlIHRyYWlsaW5nIHdo
aXRlc3BhY2UuCi0gICAgICAgIGlmIChjb250aW51b3VzQ29udGVudC5sb2dpY2FsV2lkdGgoKSA8
PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRoICsgbGluZVN0YXR1cy5jb2xsYXBzaWJsZVdpZHRo
KQotICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAgfTsKLSAgICB9Ci0g
ICAgaWYgKGlzVmlzdWFsbHlFbXB0eVdoaXRlc3BhY2VDb250ZW50T25seShjb250aW51b3VzQ29u
dGVudCkgJiYgc2hvdWxkS2VlcEVuZE9mTGluZVdoaXRlc3BhY2UoY29udGludW91c0NvbnRlbnQp
KSB7Ci0gICAgICAgIC8vIFRoaXMgb3ZlcmZsb3dpbmcgY29udGVudCBhcHBhcmVudGx5IGZhbGxz
IGludG8gdGhlIHJlbW92ZS9oYW5nIGVuZC1vZi1saW5lLXNwYWNlcyBjYXRlZ29yeS4KLSAgICAg
ICAgLy8gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdGV4dC0zLyN3aGl0ZS1zcGFjZS1w
cm9wZXJ0eSBtYXRyaXgKLSAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAgfTsK
LSAgICB9Ci0KLSAgICBpZiAoaXNUZXh0Q29udGVudE9ubHkoY29udGludW91c0NvbnRlbnQpKSB7
Ci0gICAgICAgIGlmIChhdXRvIHRyYWlsaW5nQ29udGVudCA9IHByb2Nlc3NPdmVyZmxvd2luZ1Rl
eHRDb250ZW50KGNvbnRpbnVvdXNDb250ZW50LCBsaW5lU3RhdHVzKSkgewotICAgICAgICAgICAg
aWYgKCF0cmFpbGluZ0NvbnRlbnQtPnJ1bkluZGV4ICYmIHRyYWlsaW5nQ29udGVudC0+aGFzT3Zl
cmZsb3cpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCB0byBicmVhayB0aGUgY29udGVu
dCBidXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBjYW4ndCBldmVuIGFjY29tbW9kYXRlIHRoZSBmaXJz
dCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICAgICAgLy8gMS4gUHVzaCB0aGUgY29udGVudCBvdmVy
IHRvIHRoZSBuZXh0IGxpbmUgd2hlbiB3ZSd2ZSBnb3QgY29udGVudCBvbiB0aGUgbGluZSBhbHJl
YWR5LgotICAgICAgICAgICAgICAgIC8vIDIuIEtlZXAgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiB0
aGUgZW1wdHkgbGluZSAob3Iga2VlcCB0aGUgd2hvbGUgcnVuIGlmIGl0IGhhcyBvbmx5IG9uZSBj
aGFyYWN0ZXIpLgotICAgICAgICAgICAgICAgIGlmICghbGluZVN0YXR1cy5saW5lSXNFbXB0eSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OlB1c2gsIElzRW5k
T2ZMaW5lOjpZZXMsIHsgfSB9OwotICAgICAgICAgICAgICAgIGF1dG8gbGVhZGluZ1RleHRSdW5J
bmRleCA9ICpmaXJzdFRleHRSdW5JbmRleChjb250aW51b3VzQ29udGVudCk7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oY29u
dGludW91c0NvbnRlbnQucnVucygpW2xlYWRpbmdUZXh0UnVuSW5kZXhdLmlubGluZUl0ZW0pOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlubGluZVRleHRJdGVtLmxlbmd0aCgpID09IDEpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSZXN1bHQgeyBSZXN1bHQ6OkFjdGlvbjo6S2VlcCwgSXNFbmRPZkxpbmU6
OlllcyB9OwotICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RDaGFyYWN0ZXJXaWR0aCA9IFRleHRV
dGlsOjp3aWR0aChpbmxpbmVUZXh0SXRlbSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5l
VGV4dEl0ZW0uc3RhcnQoKSArIDEpOwotICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RDaGFyYWN0
ZXJSdW4gPSBQYXJ0aWFsUnVuIHsgMSwgZmlyc3RDaGFyYWN0ZXJXaWR0aCwgZmFsc2UgfTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkFjdGlvbjo6QnJlYWssIElzRW5kT2ZMaW5l
OjpZZXMsIFJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCB7IGxlYWRpbmdUZXh0UnVuSW5k
ZXgsIGZpcnN0Q2hhcmFjdGVyUnVuIH0gfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1
dG8gdHJhaWxpbmdQYXJ0aWFsQ29udGVudCA9IFJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVu
dCB7IHRyYWlsaW5nQ29udGVudC0+cnVuSW5kZXgsIHRyYWlsaW5nQ29udGVudC0+cGFydGlhbFJ1
biB9OwotICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OkJyZWFrLCBJc0VuZE9m
TGluZTo6WWVzLCB0cmFpbGluZ1BhcnRpYWxDb250ZW50IH07Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGJyZWFrIHRoaXMgb3ZlcmZsb3dpbmcgY29u
dGVudCwgd2Ugc3RpbGwgbmVlZCB0byBkZWNpZGUgd2hldGhlciBrZWVwIGl0IG9yIHB1c2ggaXQg
dG8gdGhlIG5leHQgbGluZS4KLSAgICBpZiAobGluZVN0YXR1cy5saW5lSXNFbXB0eSkgewotICAg
ICAgICBBU1NFUlQoIW1faGFzV3JhcE9wcG9ydHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uKTsKLSAg
ICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAsIElzRW5kT2ZMaW5lOjpObyB9Owot
ICAgIH0KLSAgICAvLyBOb3cgZWl0aGVyIHdyYXAgaGVyZSBvciBhdCBhbiBlYXJsaWVyIHBvc2l0
aW9uLCBvciBub3Qgd3JhcCBhdCBhbGwuCi0gICAgaWYgKGlzQ29udGVudFdyYXBwaW5nQWxsb3dl
ZChjb250aW51b3VzQ29udGVudCkpCi0gICAgICAgIHJldHVybiB7IFJlc3VsdDo6QWN0aW9uOjpQ
dXNoLCBJc0VuZE9mTGluZTo6WWVzIH07Ci0gICAgaWYgKG1faGFzV3JhcE9wcG9ydHVuaXR5QXRQ
cmV2aW91c1Bvc2l0aW9uKQotICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkFjdGlvbjo6UmV2ZXJ0
VG9MYXN0V3JhcE9wcG9ydHVuaXR5LCBJc0VuZE9mTGluZTo6WWVzIH07Ci0gICAgcmV0dXJuIHsg
UmVzdWx0OjpBY3Rpb246OktlZXAsIElzRW5kT2ZMaW5lOjpObyB9OwotfQotCi1PcHRpb25hbDxU
cmFpbGluZ1RleHRDb250ZW50PiBMaW5lQnJlYWtlcjo6cHJvY2Vzc092ZXJmbG93aW5nVGV4dENv
bnRlbnQoY29uc3QgQ29udGludW91c0NvbnRlbnQmIGNvbnRpbnVvdXNDb250ZW50LCBjb25zdCBM
aW5lU3RhdHVzJiBsaW5lU3RhdHVzKSBjb25zdAotewotICAgIGF1dG8gaXNCcmVha2FibGVSdW4g
PSBbXSAoYXV0byYgcnVuKSB7Ci0gICAgICAgIEFTU0VSVChydW4uaW5saW5lSXRlbS5pc1RleHQo
KSB8fCBydW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlubGluZUl0ZW0u
aXNDb250YWluZXJFbmQoKSk7Ci0gICAgICAgIGlmICghcnVuLmlubGluZUl0ZW0uaXNUZXh0KCkp
IHsKLSAgICAgICAgICAgIC8vIENhbid0IGJyZWFrIGhvcml6b250YWwgc3BhY2luZyAtPiBlLmcu
IDxzcGFuIHN0eWxlPSJwYWRkaW5nLXJpZ2h0OiAxMDBweDsiPnRleHRjb250ZW50PC9zcGFuPiwg
aWYgdGhlIFtjb250YWluZXIgZW5kXSBpcyB0aGUgb3ZlcmZsb3duIGlubGluZSBpdGVtCi0gICAg
ICAgICAgICAvLyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW5vdGhlciBpbmxpbmUgaXRl
bSBiZXlvbmQgdGhlIFtjb250YWluZXIgZW5kXSB0byBzcGxpdC4KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHRleHQgcnVuIG5l
ZWRzIHRvIHN0YXkgb24gdGhlIGN1cnJlbnQgbGluZS4gIAotICAgICAgICByZXR1cm4gaXNXcmFw
cGluZ0FsbG93ZWQocnVuLmlubGluZUl0ZW0uc3R5bGUoKSk7Ci0gICAgfTsKLQotICAgIC8vIENo
ZWNrIHdoZXJlIHRoZSBvdmVyZmxvdyBvY2N1cnMgYW5kIHVzZSB0aGUgY29ycmVzcG9uZGluZyBz
dHlsZSB0byBmaWd1cmUgb3V0IHRoZSBicmVha2luZyBiZWhhdmlvdXIuCi0gICAgLy8gPHNwYW4g
c3R5bGU9IndvcmQtYnJlYWs6IG5vcm1hbCI+Zmlyc3Q8L3NwYW4+PHNwYW4gc3R5bGU9IndvcmQt
YnJlYWs6IGJyZWFrLWFsbCI+c2Vjb25kPC9zcGFuPjxzcGFuIHN0eWxlPSJ3b3JkLWJyZWFrOiBu
b3JtYWwiPnRoaXJkPC9zcGFuPgotICAgIGF1dG8mIHJ1bnMgPSBjb250aW51b3VzQ29udGVudC5y
dW5zKCk7Ci0gICAgYXV0byBhY2N1bXVsYXRlZFJ1bldpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7
IH07IAotICAgIHNpemVfdCBpbmRleCA9IDA7Ci0gICAgd2hpbGUgKGluZGV4IDwgcnVucy5zaXpl
KCkpIHsKLSAgICAgICAgYXV0byYgcnVuID0gcnVuc1tpbmRleF07Ci0gICAgICAgIEFTU0VSVChy
dW4uaW5saW5lSXRlbS5pc1RleHQoKSB8fCBydW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0
KCkgfHwgcnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSk7Ci0gICAgICAgIGlmIChhY2N1
bXVsYXRlZFJ1bldpZHRoICsgcnVuLmxvZ2ljYWxXaWR0aCA+IGxpbmVTdGF0dXMuYXZhaWxhYmxl
V2lkdGggJiYgaXNCcmVha2FibGVSdW4ocnVuKSkgewotICAgICAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB0aGUgYXZhaWxhYmxlIHdpZHRoIGNhbiB2ZXJ5IHdlbGwgYmUgbmVnYXRpdmUgZS5nLiB3
aGVuIHNvbWUgcGFydCBvZiB0aGUgY29udGludW91cyB0ZXh0IGNvbnRlbnQgY2FuIG5vdCBiZSBi
cm9rZW4gaW50byBwYXJ0cyAtPgotICAgICAgICAgICAgLy8gPHNwYW4gc3R5bGU9IndvcmQtYnJl
YWs6IGtlZXAtYWxsIj50ZXh0Y29udGVudHdpdGhub2JyZWFrPC9zcGFuPjxzcGFuPnRleHRjb250
ZW50d2l0aHllc2JyZWFrPC9zcGFuPgotICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3Qgc3Bh
biBjb21wdXRlcyBsb25nZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHNwYWNlLCBieSB0aGUgdGltZSB3
ZSBnZXQgdG8gdGhlIHNlY29uZCBzcGFuLCB0aGUgYWRqdXN0ZWQgYXZhaWxhYmxlIHNwYWNlIGJl
Y29tZXMgbmVnYXRpdmUuCi0gICAgICAgICAgICBhdXRvIGFkanVzdGVkQXZhaWxhYmxlV2lkdGgg
PSBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PigwLCBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRo
IC0gYWNjdW11bGF0ZWRSdW5XaWR0aCk7Ci0gICAgICAgICAgICBpZiAoYXV0byBwYXJ0aWFsUnVu
ID0gdHJ5QnJlYWtpbmdUZXh0UnVuKHJ1biwgY29udGludW91c0NvbnRlbnQubG9naWNhbExlZnQo
KSArIGFjY3VtdWxhdGVkUnVuV2lkdGgsIGFkanVzdGVkQXZhaWxhYmxlV2lkdGgpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBhcnRpYWxSdW4tPmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFRyYWlsaW5nVGV4dENvbnRlbnQgeyBpbmRleCwgZmFsc2UsIHBhcnRpYWxSdW4gfTsK
LSAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBjb250ZW50IGlzIHdyYXBwZWQgYXQgdGhlIHJ1
biBib3VuZGFyeSwgdGhlIHRyYWlsaW5nIHJ1biBpcyB0aGUgcHJldmlvdXMgcnVuLgotICAgICAg
ICAgICAgICAgIGlmIChpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYWlsaW5n
VGV4dENvbnRlbnQgeyBpbmRleCAtIDEsIGZhbHNlLCB7IH0gfTsKLSAgICAgICAgICAgICAgICAv
LyBTb21ldGltZXMgd2UgY2FuJ3QgYWNjb21tb2RhdGUgZXZlbiB0aGUgdmVyeSBmaXJzdCBjaGFy
YWN0ZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRyYWlsaW5nVGV4dENvbnRlbnQgeyAwLCB0
cnVlLCB7IH0gfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIElmIHRoaXMgcnVuIGlz
IG5vdCBicmVha2FibGUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgYW55IHByZXZpb3VzIHJ1biBpcyBi
cmVha2FibGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBhY2N1bXVs
YXRlZFJ1bldpZHRoICs9IHJ1bi5sb2dpY2FsV2lkdGg7Ci0gICAgICAgICsraW5kZXg7Ci0gICAg
fQotICAgIC8vIFdlIGRpZCBub3QgbWFuYWdlIHRvIGJyZWFrIHRoZSBydW4gdGhhdCBhY3R1YWxs
eSBvdmVyZmxvd3MgdGhlIGxpbmUuCi0gICAgLy8gTGV0J3MgdHJ5IHRvIGZpbmQgdGhlIGxhc3Qg
YnJlYWthYmxlIHBvc2l0aW9uIHN0YXJ0aW5nIGZyb20gdGhlIG92ZXJmbG93aW5nIHJ1biBhbmQg
d3JhcCBpdCBhdCB0aGUgY29udGVudCBib3VuZGFyeSAoYXMgaXQgc3VyZWx5IGZpdHMpLgotICAg
IHdoaWxlIChpbmRleC0tKSB7Ci0gICAgICAgIGF1dG8mIHJ1biA9IHJ1bnNbaW5kZXhdOwotICAg
ICAgICBhY2N1bXVsYXRlZFJ1bldpZHRoIC09IHJ1bi5sb2dpY2FsV2lkdGg7Ci0gICAgICAgIGlm
IChpc0JyZWFrYWJsZVJ1bihydW4pKSB7Ci0gICAgICAgICAgICBBU1NFUlQocnVuLmlubGluZUl0
ZW0uaXNUZXh0KCkpOwotICAgICAgICAgICAgaWYgKGF1dG8gcGFydGlhbFJ1biA9IHRyeUJyZWFr
aW5nVGV4dFJ1bihydW4sIGNvbnRpbnVvdXNDb250ZW50LmxvZ2ljYWxMZWZ0KCkgKyBhY2N1bXVs
YXRlZFJ1bldpZHRoLCBtYXhJbmxpbmVMYXlvdXRVbml0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB0aGlzIHJ1biBmaXRzLCBzbyBpZiB3cmFwcGluZyBpcyBhbGxvd2VkIG9uIHRo
ZSBydW4sIGl0IHNob3VsZCByZXR1cm4gYSBub24tZW1wdHkgbGVmdC1zaWRlLgotICAgICAgICAg
ICAgICAgIEFTU0VSVChwYXJ0aWFsUnVuLT5sZW5ndGgpOwotICAgICAgICAgICAgICAgIHJldHVy
biBUcmFpbGluZ1RleHRDb250ZW50IHsgaW5kZXgsIGZhbHNlLCBwYXJ0aWFsUnVuIH07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gR2l2ZSB1cCwgdGhlcmUncyBubyBi
cmVha2FibGUgcnVuIGluIGhlcmUuCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotTGluZUJyZWFrZXI6
OldvcmRCcmVha1J1bGUgTGluZUJyZWFrZXI6OndvcmRCcmVha0JlaGF2aW9yKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBEaXNyZWdhcmQgYW55IHByb2hpYml0aW9u
IGFnYWluc3QgbGluZSBicmVha3MgbWFuZGF0ZWQgYnkgdGhlIHdvcmQtYnJlYWsgcHJvcGVydHku
Ci0gICAgLy8gVGhlIGRpZmZlcmVudCB3cmFwcGluZyBvcHBvcnR1bml0aWVzIG11c3Qgbm90IGJl
IHByaW9yaXRpemVkLiBIeXBoZW5hdGlvbiBpcyBub3QgYXBwbGllZC4KLSAgICBpZiAoc3R5bGUu
bGluZUJyZWFrKCkgPT0gTGluZUJyZWFrOjpBbnl3aGVyZSkKLSAgICAgICAgcmV0dXJuIFdvcmRC
cmVha1J1bGU6OkF0QXJiaXRyYXJ5UG9zaXRpb247Ci0gICAgLy8gQnJlYWtpbmcgaXMgYWxsb3dl
ZCB3aXRoaW4g4oCcd29yZHPigJ0uCi0gICAgaWYgKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRC
cmVhazo6QnJlYWtBbGwpCi0gICAgICAgIHJldHVybiBXb3JkQnJlYWtSdWxlOjpBdEFyYml0cmFy
eVBvc2l0aW9uOwotICAgIC8vIEJyZWFraW5nIGlzIGZvcmJpZGRlbiB3aXRoaW4g4oCcd29yZHPi
gJ0uCi0gICAgaWYgKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6S2VlcEFsbCkKLSAg
ICAgICAgcmV0dXJuIFdvcmRCcmVha1J1bGU6Ok5vQnJlYWs7Ci0gICAgLy8gRm9yIGNvbXBhdGli
aWxpdHkgd2l0aCBsZWdhY3kgY29udGVudCwgdGhlIHdvcmQtYnJlYWsgcHJvcGVydHkgYWxzbyBz
dXBwb3J0cyBhIGRlcHJlY2F0ZWQgYnJlYWstd29yZCBrZXl3b3JkLgotICAgIC8vIFdoZW4gc3Bl
Y2lmaWVkLCB0aGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgd29yZC1icmVhazogbm9ybWFsIGFu
ZCBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZSwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsIHZhbHVl
IG9mIHRoZSBvdmVyZmxvdy13cmFwIHByb3BlcnR5LgotICAgIGlmIChzdHlsZS53b3JkQnJlYWso
KSA9PSBXb3JkQnJlYWs6OkJyZWFrV29yZCAmJiAhbV9oYXNXcmFwT3Bwb3J0dW5pdHlBdFByZXZp
b3VzUG9zaXRpb24pCi0gICAgICAgIHJldHVybiBXb3JkQnJlYWtSdWxlOjpBdEFyYml0cmFyeVBv
c2l0aW9uOwotICAgIC8vIE92ZXJmbG93V3JhcDo6QnJlYWs6IEFuIG90aGVyd2lzZSB1bmJyZWFr
YWJsZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIG1heSBiZSBicm9rZW4gYXQgYW4gYXJiaXRyYXJ5
IHBvaW50IGlmIHRoZXJlIGFyZSBubyBvdGhlcndpc2UtYWNjZXB0YWJsZSBicmVhayBwb2ludHMg
aW4gdGhlIGxpbmUuCi0gICAgaWYgKHN0eWxlLm92ZXJmbG93V3JhcCgpID09IE92ZXJmbG93V3Jh
cDo6QnJlYWsgJiYgIW1faGFzV3JhcE9wcG9ydHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uKQotICAg
ICAgICByZXR1cm4gV29yZEJyZWFrUnVsZTo6QXRBcmJpdHJhcnlQb3NpdGlvbjsKLQotICAgIGlm
ICghbl9oeXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6
OkF1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKQotICAgICAgICBy
ZXR1cm4gV29yZEJyZWFrUnVsZTo6T25seUh5cGhlbmF0aW9uQWxsb3dlZDsKLQotICAgIHJldHVy
biBXb3JkQnJlYWtSdWxlOjpOb0JyZWFrOwotfQotCi1PcHRpb25hbDxMaW5lQnJlYWtlcjo6UGFy
dGlhbFJ1bj4gTGluZUJyZWFrZXI6OnRyeUJyZWFraW5nVGV4dFJ1bihjb25zdCBDb250aW51b3Vz
Q29udGVudDo6UnVuJiBvdmVyZmxvd2luZ1J1biwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
b3ZlcmZsb3dpbmdSdW4uaW5saW5lSXRlbS5pc1RleHQoKSk7Ci0gICAgYXV0byYgaW5saW5lVGV4
dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4ob3ZlcmZsb3dpbmdSdW4uaW5saW5lSXRl
bSk7Ci0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVUZXh0SXRlbS5zdHlsZSgpOwotICAgIGF1dG8g
ZmluZExhc3RCcmVha2FibGVQb3NpdGlvbiA9IGF2YWlsYWJsZVdpZHRoID09IG1heElubGluZUxh
eW91dFVuaXQoKTsKLQotICAgIGF1dG8gYnJlYWtSdWxlID0gd29yZEJyZWFrQmVoYXZpb3Ioc3R5
bGUpOwotICAgIGlmIChicmVha1J1bGUgPT0gV29yZEJyZWFrUnVsZTo6QXRBcmJpdHJhcnlQb3Np
dGlvbikgewotICAgICAgICBpZiAoZmluZExhc3RCcmVha2FibGVQb3NpdGlvbikgewotICAgICAg
ICAgICAgLy8gV2hlbiB0aGUgcnVuIGNhbiBiZSBzcGxpdCBhdCBhcmJpdHJhcnkgcG9zaXRpb24s
Ci0gICAgICAgICAgICAvLyBsZXQncyBqdXN0IHJldHVybiB0aGUgZW50aXJlIHJ1biB3aGVuIGl0
IGlzIGludGVuZGVkIHRvIGZpdCBvbiB0aGUgbGluZS4KLSAgICAgICAgICAgIEFTU0VSVChpbmxp
bmVUZXh0SXRlbS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBhdXRvIHRyYWlsaW5nUGFydGlhbFJ1
bldpZHRoID0gVGV4dFV0aWw6OndpZHRoKGlubGluZVRleHRJdGVtLCBpbmxpbmVUZXh0SXRlbS5z
dGFydCgpLCBpbmxpbmVUZXh0SXRlbS5lbmQoKSAtIDEsIGxvZ2ljYWxMZWZ0KTsKLSAgICAgICAg
ICAgIHJldHVybiBQYXJ0aWFsUnVuIHsgaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkgLSAxLCB0cmFp
bGluZ1BhcnRpYWxSdW5XaWR0aCwgZmFsc2UgfTsKLSAgICAgICAgfQotICAgICAgICBhdXRvIHNw
bGl0RGF0YSA9IFRleHRVdGlsOjpzcGxpdChpbmxpbmVUZXh0SXRlbS5pbmxpbmVUZXh0Qm94KCks
IGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVtLmxlbmd0aCgpLCBvdmVyZmxv
d2luZ1J1bi5sb2dpY2FsV2lkdGgsIGF2YWlsYWJsZVdpZHRoLCBsb2dpY2FsTGVmdCk7Ci0gICAg
ICAgIHJldHVybiBQYXJ0aWFsUnVuIHsgc3BsaXREYXRhLmxlbmd0aCwgc3BsaXREYXRhLmxvZ2lj
YWxXaWR0aCwgZmFsc2UgfTsKLSAgICB9Ci0KLSAgICBpZiAoYnJlYWtSdWxlID09IFdvcmRCcmVh
a1J1bGU6Ok9ubHlIeXBoZW5hdGlvbkFsbG93ZWQpIHsKLSAgICAgICAgLy8gRmluZCB0aGUgaHlw
aGVuIHBvc2l0aW9uIGFzIGZvbGxvd3M6Ci0gICAgICAgIC8vIDEuIFNwbGl0IHRoZSB0ZXh0IGJ5
IHRha2luZyB0aGUgaHlwaGVuIHdpZHRoIGludG8gYWNjb3VudAotICAgICAgICAvLyAyLiBGaW5k
IHRoZSBsYXN0IGh5cGhlbiBwb3NpdGlvbiBiZWZvcmUgdGhlIHNwbGl0IHBvc2l0aW9uCi0gICAg
ICAgIGF1dG8gcnVuTGVuZ3RoID0gaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCk7Ci0gICAgICAgIHVu
c2lnbmVkIGxpbWl0QmVmb3JlID0gc3R5bGUuaHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpID09IFJl
bmRlclN0eWxlOjppbml0aWFsSHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpID8gMCA6IHN0eWxlLmh5
cGhlbmF0aW9uTGltaXRCZWZvcmUoKTsKLSAgICAgICAgdW5zaWduZWQgbGltaXRBZnRlciA9IHN0
eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpID09IFJlbmRlclN0eWxlOjppbml0aWFsSHlwaGVu
YXRpb25MaW1pdEFmdGVyKCkgPyAwIDogc3R5bGUuaHlwaGVuYXRpb25MaW1pdEFmdGVyKCk7Ci0g
ICAgICAgIC8vIENoZWNrIGlmIHRoaXMgcnVuIGNhbiBhY2NvbW1vZGF0ZSB0aGUgYmVmb3JlL2Fm
dGVyIGxpbWl0cyBhdCBhbGwgYmVmb3JlIHN0YXJ0IG1lYXN1cmluZyB0ZXh0LgotICAgICAgICBp
ZiAobGltaXRCZWZvcmUgPj0gcnVuTGVuZ3RoIHx8IGxpbWl0QWZ0ZXIgPj0gcnVuTGVuZ3RoIHx8
IGxpbWl0QmVmb3JlICsgbGltaXRBZnRlciA+IHJ1bkxlbmd0aCkKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICAgICAgdW5zaWduZWQgbGVmdFNpZGVMZW5ndGggPSBydW5MZW5ndGg7Ci0g
ICAgICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIGNhY2hlIHRoZSBoeXBoZW4gd2lkdGgu
Ci0gICAgICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUuZm9udENhc2NhZGUoKTsKLSAgICAg
ICAgYXV0byBoeXBoZW5XaWR0aCA9IElubGluZUxheW91dFVuaXQgeyBmb250Q2FzY2FkZS53aWR0
aChUZXh0UnVuIHsgU3RyaW5nVmlldyB7IHN0eWxlLmh5cGhlblN0cmluZygpIH0gfSkgfTsKLSAg
ICAgICAgaWYgKCFmaW5kTGFzdEJyZWFrYWJsZVBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBhdXRv
IGF2YWlsYWJsZVdpZHRoRXhjbHVkaW5nSHlwaGVuID0gYXZhaWxhYmxlV2lkdGggLSBoeXBoZW5X
aWR0aDsKLSAgICAgICAgICAgIGlmIChhdmFpbGFibGVXaWR0aEV4Y2x1ZGluZ0h5cGhlbiA8PSAw
IHx8ICFlbm91Z2hXaWR0aEZvckh5cGhlbmF0aW9uKGF2YWlsYWJsZVdpZHRoRXhjbHVkaW5nSHlw
aGVuLCBmb250Q2FzY2FkZS5waXhlbFNpemUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICAgICAgICAgIGxlZnRTaWRlTGVuZ3RoID0gVGV4dFV0aWw6OnNwbGl0KGlubGluZVRl
eHRJdGVtLmlubGluZVRleHRCb3goKSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgcnVuTGVuZ3Ro
LCBvdmVyZmxvd2luZ1J1bi5sb2dpY2FsV2lkdGgsIGF2YWlsYWJsZVdpZHRoRXhjbHVkaW5nSHlw
aGVuLCBsb2dpY2FsTGVmdCkubGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0U2lk
ZUxlbmd0aCA8IGxpbWl0QmVmb3JlKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAg
Ly8gQWRqdXN0IGJlZm9yZSBpbmRleCB0byBhY2NvbW1vZGF0ZSB0aGUgbGltaXQtYWZ0ZXIgdmFs
dWUgKGl0J3MgdGhlIGxhc3QgcG90ZW50aWFsIGh5cGhlbiBsb2NhdGlvbiBpbiB0aGlzIHJ1biku
Ci0gICAgICAgIGF1dG8gaHlwaGVuQmVmb3JlID0gc3RkOjptaW4obGVmdFNpZGVMZW5ndGgsIHJ1
bkxlbmd0aCAtIGxpbWl0QWZ0ZXIpICsgMTsKLSAgICAgICAgdW5zaWduZWQgaHlwaGVuTG9jYXRp
b24gPSBsYXN0SHlwaGVuTG9jYXRpb24oU3RyaW5nVmlldyhpbmxpbmVUZXh0SXRlbS5pbmxpbmVU
ZXh0Qm94KCkuY29udGVudCgpKS5zdWJzdHJpbmcoaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5s
aW5lVGV4dEl0ZW0ubGVuZ3RoKCkpLCBoeXBoZW5CZWZvcmUsIHN0eWxlLmNvbXB1dGVkTG9jYWxl
KCkpOwotICAgICAgICBpZiAoIWh5cGhlbkxvY2F0aW9uIHx8IGh5cGhlbkxvY2F0aW9uIDwgbGlt
aXRCZWZvcmUpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAvLyBoeXBoZW5Mb2Nh
dGlvbiBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhpcyBJbmxpbmVJdGVtVGV4dC4KLSAg
ICAgICAgYXV0byB0cmFpbGluZ1BhcnRpYWxSdW5XaWR0aFdpdGhIeXBoZW4gPSBUZXh0VXRpbDo6
d2lkdGgoaW5saW5lVGV4dEl0ZW0sIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJ
dGVtLnN0YXJ0KCkgKyBoeXBoZW5Mb2NhdGlvbikgKyBoeXBoZW5XaWR0aDsgCi0gICAgICAgIHJl
dHVybiBQYXJ0aWFsUnVuIHsgaHlwaGVuTG9jYXRpb24sIHRyYWlsaW5nUGFydGlhbFJ1bldpZHRo
V2l0aEh5cGhlbiwgdHJ1ZSB9OwotICAgIH0KLQotICAgIEFTU0VSVChicmVha1J1bGUgPT0gV29y
ZEJyZWFrUnVsZTo6Tm9CcmVhayk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotdm9pZCBMaW5lQnJl
YWtlcjo6Q29udGludW91c0NvbnRlbnQ6OmFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgT3B0aW9uYWw8SW5saW5lTGF5b3V0
VW5pdD4gY29sbGFwc2libGVXaWR0aCkKLXsKLSAgICBtX3J1bnMuYXBwZW5kKHsgaW5saW5lSXRl
bSwgbG9naWNhbFdpZHRoIH0pOwotICAgIG1fbG9naWNhbFdpZHRoICs9IGxvZ2ljYWxXaWR0aDsK
LSAgICBpZiAoIWNvbGxhcHNpYmxlV2lkdGgpIHsKLSAgICAgICAgbV9jb2xsYXBzaWJsZUxvZ2lj
YWxXaWR0aCA9IHsgfTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoKmNvbGxhcHNp
YmxlV2lkdGggPT0gbG9naWNhbFdpZHRoKSB7Ci0gICAgICAgIC8vIEZ1bGx5IGNvbGxhcHNpYmxl
IHJ1bi4KLSAgICAgICAgbV9jb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCArPSBsb2dpY2FsV2lkdGg7
Ci0gICAgICAgIEFTU0VSVChtX2NvbGxhcHNpYmxlTG9naWNhbFdpZHRoIDw9IG1fbG9naWNhbFdp
ZHRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBQYXJ0aWFsbHkgY29sbGFwc2li
bGUgcnVuLgotICAgIG1fY29sbGFwc2libGVMb2dpY2FsV2lkdGggPSAqY29sbGFwc2libGVXaWR0
aDsKLSAgICBBU1NFUlQobV9jb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCA8PSBtX2xvZ2ljYWxXaWR0
aCk7Ci19Ci0KLXZvaWQgTGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50OjpyZXNldChJbmxp
bmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKLXsKLSAgICBtX2xvZ2ljYWxMZWZ0ID0g
Y29udGVudExvZ2ljYWxMZWZ0OwotICAgIG1fbG9naWNhbFdpZHRoID0geyB9OwotICAgIG1fY29s
bGFwc2libGVMb2dpY2FsV2lkdGggPSB7IH07Ci0gICAgbV9ydW5zLmNsZWFyKCk7Ci19Ci0KLX0K
LX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGJkZjg3MjY5ZGVmOWE2OGQ5YzQ2MDE5OTU1ZGE0M2NjZThkMzQ2NjguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkxheW91dFVuaXRzLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLW5hbWVzcGFjZSBMYXlv
dXQgewotCi1jbGFzcyBJbmxpbmVJdGVtOwotY2xhc3MgSW5saW5lVGV4dEl0ZW07Ci1zdHJ1Y3Qg
Q29udGludW91c0NvbnRlbnQ7Ci1zdHJ1Y3QgVHJhaWxpbmdUZXh0Q29udGVudDsKLQotY2xhc3Mg
TGluZUJyZWFrZXIgewotcHVibGljOgotICAgIHN0cnVjdCBQYXJ0aWFsUnVuIHsKLSAgICAgICAg
c2l6ZV90IGxlbmd0aCB7IDAgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGggeyAwIH07Ci0gICAgICAgIGJvb2wgbmVlZHNIeXBoZW4geyBmYWxzZSB9OwotICAgIH07Ci0g
ICAgZW51bSBjbGFzcyBJc0VuZE9mTGluZSB7IE5vLCBZZXMgfTsKLSAgICBzdHJ1Y3QgUmVzdWx0
IHsKLSAgICAgICAgZW51bSBjbGFzcyBBY3Rpb24gewotICAgICAgICAgICAgS2VlcCwgLy8gS2Vl
cCBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgICAgICBCcmVhaywgLy8gUGFy
dGlhbCBjb250ZW50IGlzIG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgICAgICBQdXNoLCAv
LyBDb250ZW50IGlzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgotICAgICAgICAgICAgUmV2ZXJ0
VG9MYXN0V3JhcE9wcG9ydHVuaXR5IC8vIFRoZSBjdXJyZW50IGNvbnRlbnQgb3ZlcmZsb3dzIGFu
ZCBjYW4ndCBnZXQgd3JhcHBlZC4gVGhlIGxpbmUgbmVlZHMgdG8gYmUgcmV2ZXJ0ZWQgYmFjayB0
byB0aGUgbGFzdCBsaW5lIHdyYXBwaW5nIG9wcG9ydHVuaXR5LgotICAgICAgICB9OwotICAgICAg
ICBzdHJ1Y3QgUGFydGlhbFRyYWlsaW5nQ29udGVudCB7Ci0gICAgICAgICAgICBzaXplX3QgdHJh
aWxpbmdSdW5JbmRleCB7IDAgfTsKLSAgICAgICAgICAgIE9wdGlvbmFsPFBhcnRpYWxSdW4+IHBh
cnRpYWxSdW47IC8vIG51bGxvcHQgcGFydGlhbCBydW4gbWVhbnMgdGhlIHRyYWlsaW5nIHJ1biBp
cyBhIGNvbXBsZXRlIHJ1bi4KLSAgICAgICAgfTsKLQotICAgICAgICBBY3Rpb24gYWN0aW9uIHsg
QWN0aW9uOjpLZWVwIH07Ci0gICAgICAgIElzRW5kT2ZMaW5lIGlzRW5kT2ZMaW5lIHsgSXNFbmRP
ZkxpbmU6Ok5vIH07Ci0gICAgICAgIE9wdGlvbmFsPFBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ+IHBh
cnRpYWxUcmFpbGluZ0NvbnRlbnQgeyB9OwotICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBsYXN0
V3JhcE9wcG9ydHVuaXR5SXRlbSB7IG51bGxwdHIgfTsKLSAgICB9OwotCi0gICAgLy8gVGhpcyBz
dHJ1Y3QgcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIGNvbnRpbnVvdXMgY29udGVudCBjb21taXR0
ZWQgdG8gbGluZSBicmVha2luZyBhdCBhIHRpbWUgKG5vIGluLWJldHdlZW4gd3JhcCBvcHBvcnR1
bml0aWVzKS4KLSAgICAvLyBlLmcuCi0gICAgLy8gPGRpdj50ZXh0IGNvbnRlbnQgPHNwYW4+c3Bh
bjE8L3NwYW4+YmV0d2VlbjxzcGFuPnNwYW4yPC9zcGFuPjwvZGl2PgotICAgIC8vIFt0ZXh0XVsg
XVtjb250ZW50XVsgXVtjb250YWluZXIgc3RhcnRdW3NwYW4xXVtjb250YWluZXIgZW5kXVtiZXR3
ZWVuXVtjb250YWluZXIgc3RhcnRdW3NwYW4yXVtjb250YWluZXIgZW5kXQotICAgIC8vIGNvbnRp
bnVvdXMgY2FuZGlkYXRlIGNvbnRlbnQgYXQgYSB0aW1lOgotICAgIC8vIDEuIFt0ZXh0XQotICAg
IC8vIDIuIFsgXQotICAgIC8vIDMuIFtjb250ZW50XQotICAgIC8vIDQuIFsgXQotICAgIC8vIDUu
IFtjb250YWluZXIgc3RhcnRdW3NwYW4xXVtjb250YWluZXIgZW5kXVtiZXR3ZWVuXVtjb250YWlu
ZXIgc3RhcnRdW3NwYW4yXVtjb250YWluZXIgZW5kXQotICAgIC8vIHNlZSBodHRwczovL2RyYWZ0
cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8jbGluZS1icmVhay1kZXRhaWxzCi0gICAgc3RydWN0IENv
bnRpbnVvdXNDb250ZW50IHsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxXaWR0aDsgfQotICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsTGVmdDsgfQotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGNvbGxhcHNpYmxlTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aDsgfQotICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IG5vbkNvbGxhcHNpYmxlTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbG9naWNhbFdpZHRo
KCkgLSBjb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCgpOyB9Ci0gICAgICAgIGJvb2wgaGFzVHJhaWxp
bmdDb2xsYXBzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiAhIWNvbGxhcHNpYmxlTG9naWNh
bFdpZHRoKCk7IH0KLSAgICAgICAgYm9vbCBpc0Z1bGx5Q29sbGFwc2libGUoKSBjb25zdCB7IHJl
dHVybiBsb2dpY2FsV2lkdGgoKSA9PSBjb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCgpOyB9Ci0KLSAg
ICAgICAgdm9pZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFdpZHRoLCBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBjb2xsYXBzaWJsZVdpZHRoKTsK
LSAgICAgICAgdm9pZCByZXNldChJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7
Ci0KLSAgICAgICAgc3RydWN0IFJ1biB7Ci0gICAgICAgICAgICBSdW4oY29uc3QgSW5saW5lSXRl
bSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKLSAgICAgICAgICAgIFJ1bihjb25z
dCBSdW4mKTsKLSAgICAgICAgICAgIFJ1biYgb3BlcmF0b3I9KGNvbnN0IFJ1biYpOwotCi0gICAg
ICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtOwotICAgICAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgICAgIH07Ci0gICAgICAgIHVzaW5n
IFJ1bkxpc3QgPSBWZWN0b3I8UnVuLCAzPjsKLSAgICAgICAgY29uc3QgUnVuTGlzdCYgcnVucygp
IGNvbnN0IHsgcmV0dXJuIG1fcnVuczsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUnVuTGlz
dCBtX3J1bnM7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV9sb2dpY2FsTGVmdCB7IDAgfTsK
LSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xvZ2ljYWxXaWR0aCB7IDAgfTsKLSAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCBtX2NvbGxhcHNpYmxlTG9naWNhbFdpZHRoIHsgMCB9OwotICAgIH07
Ci0KLSAgICBzdHJ1Y3QgTGluZVN0YXR1cyB7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGggeyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgY29sbGFwc2libGVX
aWR0aCB7IDAgfTsKLSAgICAgICAgYm9vbCBsaW5lSGFzRnVsbHlDb2xsYXBzaWJsZVRyYWlsaW5n
UnVuIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBsaW5lSXNFbXB0eSB7IHRydWUgfTsKLSAgICB9
OwotICAgIFJlc3VsdCBwcm9jZXNzSW5saW5lQ29udGVudChjb25zdCBDb250aW51b3VzQ29udGVu
dCYsIGNvbnN0IExpbmVTdGF0dXMmKTsKLQotICAgIHZvaWQgc2V0SHlwaGVuYXRpb25EaXNhYmxl
ZCgpIHsgbl9oeXBoZW5hdGlvbklzRGlzYWJsZWQgPSB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAg
UmVzdWx0IHByb2Nlc3NPdmVyZmxvd2luZ0NvbnRlbnQoY29uc3QgQ29udGludW91c0NvbnRlbnQm
LCBjb25zdCBMaW5lU3RhdHVzJikgY29uc3Q7Ci0gICAgT3B0aW9uYWw8VHJhaWxpbmdUZXh0Q29u
dGVudD4gcHJvY2Vzc092ZXJmbG93aW5nVGV4dENvbnRlbnQoY29uc3QgQ29udGludW91c0NvbnRl
bnQmLCBjb25zdCBMaW5lU3RhdHVzJikgY29uc3Q7Ci0gICAgT3B0aW9uYWw8UGFydGlhbFJ1bj4g
dHJ5QnJlYWtpbmdUZXh0UnVuKGNvbnN0IENvbnRpbnVvdXNDb250ZW50OjpSdW4mIG92ZXJmbG93
UnVuLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGF2YWls
YWJsZVdpZHRoKSBjb25zdDsKLQotICAgIGVudW0gY2xhc3MgV29yZEJyZWFrUnVsZSB7Ci0gICAg
ICAgIE5vQnJlYWssCi0gICAgICAgIEF0QXJiaXRyYXJ5UG9zaXRpb24sCi0gICAgICAgIE9ubHlI
eXBoZW5hdGlvbkFsbG93ZWQKLSAgICB9OwotICAgIFdvcmRCcmVha1J1bGUgd29yZEJyZWFrQmVo
YXZpb3IoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsKLSAgICBib29sIHNob3VsZEtlZXBFbmRP
ZkxpbmVXaGl0ZXNwYWNlKGNvbnN0IENvbnRpbnVvdXNDb250ZW50JikgY29uc3Q7Ci0gICAgYm9v
bCBpc0NvbnRlbnRXcmFwcGluZ0FsbG93ZWQoY29uc3QgQ29udGludW91c0NvbnRlbnQmKSBjb25z
dDsKLQotICAgIGJvb2wgbl9oeXBoZW5hdGlvbklzRGlzYWJsZWQgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9oYXNXcmFwT3Bwb3J0dW5pdHlBdFByZXZpb3VzUG9zaXRpb24geyBmYWxzZSB9OwotfTsK
LQotaW5saW5lIExpbmVCcmVha2VyOjpDb250aW51b3VzQ29udGVudDo6UnVuOjpSdW4oY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCi0g
ICAgOiBpbmxpbmVJdGVtKGlubGluZUl0ZW0pCi0gICAgLCBsb2dpY2FsV2lkdGgobG9naWNhbFdp
ZHRoKQotewotfQotCi1pbmxpbmUgTGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50OjpSdW46
OlJ1bihjb25zdCBSdW4mIG90aGVyKQotICAgIDogaW5saW5lSXRlbShvdGhlci5pbmxpbmVJdGVt
KQotICAgICwgbG9naWNhbFdpZHRoKG90aGVyLmxvZ2ljYWxXaWR0aCkKLXsKLX0KLQotfQotfQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggNmQxMTFhNDI2Mjg0ZWJjOTU0NjU2
NzMzMDI4ZDc2MzhjMDEwMGIwOC4uNDFhOTNhM2NmZDFlYjgzZmIxOGNlNjJjMzNmYTY2NzFjN2I0
MDlhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHN0cnVj
dCBMaW5lQ2FuZGlkYXRlIHsKICAgICBzdHJ1Y3QgSW5saW5lQ29udGVudCB7CiAgICAgICAgIElu
bGluZUNvbnRlbnQoYm9vbCBpZ25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcpOwogCi0gICAgICAg
IGNvbnN0IExpbmVCcmVha2VyOjpDb250aW51b3VzQ29udGVudCYgY29udGludW91c0NvbnRlbnQo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVvdXNDb250ZW50OyB9CisgICAgICAgIGNvbnN0IElu
bGluZUNvbnRlbnRCcmVha2VyOjpDb250aW51b3VzQ29udGVudCYgY29udGludW91c0NvbnRlbnQo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVvdXNDb250ZW50OyB9CiAgICAgICAgIGNvbnN0IElu
bGluZUl0ZW0qIHRyYWlsaW5nTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ0xp
bmVCcmVhazsgfQogICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiB0cmFpbGluZ1dvcmRCcmVha09w
cG9ydHVuaXR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1dvcmRCcmVha09wcG9ydHVuaXR5
OyB9CiAKQEAgLTE4MSw3ICsxODEsNyBAQCBzdHJ1Y3QgTGluZUNhbmRpZGF0ZSB7CiAgICAgcHJp
dmF0ZToKICAgICAgICAgYm9vbCBtX2lnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyB7IGZhbHNl
IH07CiAKLSAgICAgICAgTGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50IG1fY29udGludW91
c0NvbnRlbnQ7CisgICAgICAgIElubGluZUNvbnRlbnRCcmVha2VyOjpDb250aW51b3VzQ29udGVu
dCBtX2NvbnRpbnVvdXNDb250ZW50OwogICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBtX3RyYWls
aW5nTGluZUJyZWFrIHsgbnVsbHB0ciB9OwogICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBtX3Ry
YWlsaW5nV29yZEJyZWFrT3Bwb3J0dW5pdHkgeyBudWxscHRyIH07CiAgICAgfTsKQEAgLTM0OSw3
ICszNDksNyBAQCB2b2lkIExpbmVCdWlsZGVyOjppbml0aWFsaXplKGNvbnN0IFVzZWRDb25zdHJh
aW50cyYgbGluZUNvbnN0cmFpbnRzKQogTGluZUJ1aWxkZXI6OkNvbW1pdHRlZENvbnRlbnQgTGlu
ZUJ1aWxkZXI6OnBsYWNlSW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIG5lZWRz
TGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHNpemVfdD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3Ro
KQogewogICAgIGF1dG8gbGluZUNhbmRpZGF0ZSA9IExpbmVDYW5kaWRhdGUgeyBsYXlvdXRTdGF0
ZSgpLnNob3VsZElnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpIH07Ci0gICAgYXV0byBsaW5l
QnJlYWtlciA9IExpbmVCcmVha2VyIHsgfTsKKyAgICBhdXRvIGlubGluZUNvbnRlbnRCcmVha2Vy
ID0gSW5saW5lQ29udGVudEJyZWFrZXIgeyB9OwogCiAgICAgYXV0byBjdXJyZW50SXRlbUluZGV4
ID0gbmVlZHNMYXlvdXRSYW5nZS5zdGFydDsKICAgICBzaXplX3QgY29tbWl0dGVkSW5saW5lSXRl
bUNvdW50ID0gMDsKQEAgLTM2MCwxMSArMzYwLDExIEBAIExpbmVCdWlsZGVyOjpDb21taXR0ZWRD
b250ZW50IExpbmVCdWlsZGVyOjpwbGFjZUlubGluZUNvbnRlbnQoY29uc3QgSW5saW5lSXRlbVJh
CiAgICAgICAgIC8vIDQuIFJldHVybiBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBl
aXRoZXIgYnkgbm90IGJlaW5nIGFibGUgdG8gZml0IG1vcmUgY29udGVudCBvciBiZWNhdXNlIG9m
IGFuIGV4cGxpY2l0IGxpbmUgYnJlYWsuCiAgICAgICAgIG5leHRDb250ZW50Rm9yTGluZShsaW5l
Q2FuZGlkYXRlLCBjdXJyZW50SXRlbUluZGV4LCBuZWVkc0xheW91dFJhbmdlLCBwYXJ0aWFsTGVh
ZGluZ0NvbnRlbnRMZW5ndGgsIG1fbGluZS5hdmFpbGFibGVXaWR0aCgpICsgbV9saW5lLnRyaW1t
YWJsZVRyYWlsaW5nV2lkdGgoKSwgbV9saW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAg
ICAgIC8vIE5vdyBjaGVjayBpZiB3ZSBjYW4gcHV0IHRoaXMgY29udGVudCBvbiB0aGUgY3VycmVu
dCBsaW5lLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRl
bnQobGluZUJyZWFrZXIsIG5lZWRzTGF5b3V0UmFuZ2UsIGxpbmVDYW5kaWRhdGUpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoaW5saW5lQ29udGVu
dEJyZWFrZXIsIG5lZWRzTGF5b3V0UmFuZ2UsIGxpbmVDYW5kaWRhdGUpOwogICAgICAgICBjb21t
aXR0ZWRJbmxpbmVJdGVtQ291bnQgPSByZXN1bHQuY29tbWl0dGVkQ291bnQuaXNSZXZlcnQgPyBy
ZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWUgOiBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKyBy
ZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWU7CiAgICAgICAgIGF1dG8mIGlubGluZUNvbnRlbnQg
PSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRlbnQ7CiAgICAgICAgIGF1dG8gaW5saW5lQ29udGVu
dElzRnVsbHlDb21taXR0ZWQgPSBpbmxpbmVDb250ZW50LmNvbnRpbnVvdXNDb250ZW50KCkucnVu
cygpLnNpemUoKSA9PSByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWUgJiYgIXJlc3VsdC5wYXJ0
aWFsQ29udGVudDsKLSAgICAgICAgYXV0byBpc0VuZE9mTGluZSA9IHJlc3VsdC5pc0VuZE9mTGlu
ZSA9PSBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6OlllczsKKyAgICAgICAgYXV0byBpc0VuZE9m
TGluZSA9IHJlc3VsdC5pc0VuZE9mTGluZSA9PSBJbmxpbmVDb250ZW50QnJlYWtlcjo6SXNFbmRP
ZkxpbmU6OlllczsKIAogICAgICAgICBpZiAoYXV0byogd29yZEJyZWFrT3Bwb3J0dW5pdHkgPSBp
bmxpbmVDb250ZW50LnRyYWlsaW5nV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkgewogICAgICAgICAg
ICAgLy8gPHdicj4gbmVlZHMgdG8gYmUgb24gdGhlIGxpbmUgYXMgYW4gZW1wdHkgcnVuIHNvIHRo
YXQgd2UgY2FuIGNvbnN0cnVjdCBhbiBpbmxpbmUgYm94IGFuZCBjb21wdXRlIGJhc2ljIGdlb21l
dHJ5LgpAQCAtNTYxLDEyICs1NjEsMTIgQEAgdm9pZCBMaW5lQnVpbGRlcjo6Y29tbWl0RmxvYXRz
KGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2kKICAgICB9
CiB9CiAKLUxpbmVCdWlsZGVyOjpSZXN1bHQgTGluZUJ1aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElu
bGluZUNvbnRlbnQoTGluZUJyZWFrZXImIGxpbmVCcmVha2VyLCBjb25zdCBJbmxpbmVJdGVtUmFu
Z2UmIGxheW91dFJhbmdlLCBjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlKQorTGlu
ZUJ1aWxkZXI6OlJlc3VsdCBMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVu
dChJbmxpbmVDb250ZW50QnJlYWtlciYgaW5saW5lQ29udGVudEJyZWFrZXIsIGNvbnN0IElubGlu
ZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRh
dGUpCiB7CiAgICAgYXV0byYgY29udGludW91c0lubGluZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRl
LmlubGluZUNvbnRlbnQuY29udGludW91c0NvbnRlbnQoKTsKICAgICBpZiAoY29udGludW91c0lu
bGluZUNvbnRlbnQucnVucygpLmlzRW1wdHkoKSkgewogICAgICAgICBjb21taXRGbG9hdHMobGlu
ZUNhbmRpZGF0ZSk7Ci0gICAgICAgIHJldHVybiB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6
Tm8gfTsKKyAgICAgICAgcmV0dXJuIHsgSW5saW5lQ29udGVudEJyZWFrZXI6OklzRW5kT2ZMaW5l
OjpObyB9OwogICAgIH0KIAogICAgIGF1dG8gc2hvdWxkRGlzYWJsZUh5cGhlbmF0aW9uID0gWyZd
IHsKQEAgLTU3NSwzNyArNTc1LDM3IEBAIExpbmVCdWlsZGVyOjpSZXN1bHQgTGluZUJ1aWxkZXI6
OmhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXImIGxpbmVCCiAgICAgICAg
IHJldHVybiBtX3N1Y2Nlc3NpdmVIeXBoZW5hdGVkTGluZUNvdW50ID49IGxpbWl0TGluZXM7CiAg
ICAgfTsKICAgICBpZiAoc2hvdWxkRGlzYWJsZUh5cGhlbmF0aW9uKCkpCi0gICAgICAgIGxpbmVC
cmVha2VyLnNldEh5cGhlbmF0aW9uRGlzYWJsZWQoKTsKKyAgICAgICAgaW5saW5lQ29udGVudEJy
ZWFrZXIuc2V0SHlwaGVuYXRpb25EaXNhYmxlZCgpOwogCiAgICAgYXV0byYgZmxvYXRDb250ZW50
ID0gbGluZUNhbmRpZGF0ZS5mbG9hdENvbnRlbnQ7CiAgICAgLy8gQ2hlY2sgaWYgdGhpcyBuZXcg
Y29udGVudCBmaXRzLgogICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2xpbmUuYXZhaWxhYmxl
V2lkdGgoKSAtIGZsb2F0Q29udGVudC5pbnRydXNpdmVXaWR0aCgpOwogICAgIGF1dG8gaXNMaW5l
Q29uc2lkZXJlZEVtcHR5ID0gbV9saW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFtX2NvbnRlbnRJ
c0NvbnN0cmFpbmVkQnlGbG9hdDsKLSAgICBhdXRvIGxpbmVTdGF0dXMgPSBMaW5lQnJlYWtlcjo6
TGluZVN0YXR1cyB7IGF2YWlsYWJsZVdpZHRoLCBtX2xpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0
aCgpLCBtX2xpbmUuaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCksIGlzTGluZUNvbnNpZGVy
ZWRFbXB0eSB9OwotICAgIGF1dG8gcmVzdWx0ID0gbGluZUJyZWFrZXIucHJvY2Vzc0lubGluZUNv
bnRlbnQoY29udGludW91c0lubGluZUNvbnRlbnQsIGxpbmVTdGF0dXMpOworICAgIGF1dG8gbGlu
ZVN0YXR1cyA9IElubGluZUNvbnRlbnRCcmVha2VyOjpMaW5lU3RhdHVzIHsgYXZhaWxhYmxlV2lk
dGgsIG1fbGluZS50cmltbWFibGVUcmFpbGluZ1dpZHRoKCksIG1fbGluZS5pc1RyYWlsaW5nUnVu
RnVsbHlUcmltbWFibGUoKSwgaXNMaW5lQ29uc2lkZXJlZEVtcHR5IH07CisgICAgYXV0byByZXN1
bHQgPSBpbmxpbmVDb250ZW50QnJlYWtlci5wcm9jZXNzSW5saW5lQ29udGVudChjb250aW51b3Vz
SW5saW5lQ29udGVudCwgbGluZVN0YXR1cyk7CiAgICAgaWYgKHJlc3VsdC5sYXN0V3JhcE9wcG9y
dHVuaXR5SXRlbSkKICAgICAgICAgbV9sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSA9IHJlc3VsdC5s
YXN0V3JhcE9wcG9ydHVuaXR5SXRlbTsKICAgICBhdXRvJiBjYW5kaWRhdGVSdW5zID0gY29udGlu
dW91c0lubGluZUNvbnRlbnQucnVucygpOwotICAgIGlmIChyZXN1bHQuYWN0aW9uID09IExpbmVC
cmVha2VyOjpSZXN1bHQ6OkFjdGlvbjo6S2VlcCkgeworICAgIGlmIChyZXN1bHQuYWN0aW9uID09
IElubGluZUNvbnRlbnRCcmVha2VyOjpSZXN1bHQ6OkFjdGlvbjo6S2VlcCkgewogICAgICAgICAv
LyBUaGlzIGNvbnRpbnVvdXMgY29udGVudCBjYW4gYmUgZnVsbHkgcGxhY2VkIG9uIHRoZSBjdXJy
ZW50IGxpbmUgaW5jbHVkaW5nIG5vbi1pbnRydXNpdmUgZmxvYXRzLgogICAgICAgICBmb3IgKGF1
dG8mIHJ1biA6IGNhbmRpZGF0ZVJ1bnMpCiAgICAgICAgICAgICBtX2xpbmUuYXBwZW5kKHJ1bi5p
bmxpbmVJdGVtLCBydW4ubG9naWNhbFdpZHRoKTsKICAgICAgICAgY29tbWl0RmxvYXRzKGxpbmVD
YW5kaWRhdGUpOwogICAgICAgICByZXR1cm4geyByZXN1bHQuaXNFbmRPZkxpbmUsIHsgY2FuZGlk
YXRlUnVucy5zaXplKCksIGZhbHNlIH0gfTsKICAgICB9Ci0gICAgaWYgKHJlc3VsdC5hY3Rpb24g
PT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpQdXNoKSB7Ci0gICAgICAgIEFTU0VSVChy
ZXN1bHQuaXNFbmRPZkxpbmUgPT0gTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMpOworICAg
IGlmIChyZXN1bHQuYWN0aW9uID09IElubGluZUNvbnRlbnRCcmVha2VyOjpSZXN1bHQ6OkFjdGlv
bjo6UHVzaCkgeworICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IElubGluZUNv
bnRlbnRCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8gVGhpcyBjb250aW51
b3VzIGNvbnRlbnQgY2FuJ3QgYmUgcGxhY2VkIG9uIHRoZSBjdXJyZW50IGxpbmUuIE5vdGhpbmcg
dG8gY29tbWl0IGF0IHRoaXMgdGltZS4KLSAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6Oklz
RW5kT2ZMaW5lOjpZZXMgfTsKKyAgICAgICAgcmV0dXJuIHsgSW5saW5lQ29udGVudEJyZWFrZXI6
OklzRW5kT2ZMaW5lOjpZZXMgfTsKICAgICB9Ci0gICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGlu
ZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpSZXZlcnRUb0xhc3RXcmFwT3Bwb3J0dW5pdHkpIHsK
LSAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0VuZE9mTGluZSA9PSBMaW5lQnJlYWtlcjo6SXNFbmRP
ZkxpbmU6Olllcyk7CisgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gSW5saW5lQ29udGVudEJyZWFr
ZXI6OlJlc3VsdDo6QWN0aW9uOjpSZXZlcnRUb0xhc3RXcmFwT3Bwb3J0dW5pdHkpIHsKKyAgICAg
ICAgQVNTRVJUKHJlc3VsdC5pc0VuZE9mTGluZSA9PSBJbmxpbmVDb250ZW50QnJlYWtlcjo6SXNF
bmRPZkxpbmU6Olllcyk7CiAgICAgICAgIC8vIE5vdCBvbmx5IHRoaXMgY29udGVudCBjYW4ndCBi
ZSBwbGFjZWQgb24gdGhlIGN1cnJlbnQgbGluZSwgYnV0IHdlIGV2ZW4gbmVlZCB0byByZXZlcnQg
dGhlIGxpbmUgYmFjayB0byBhbiBlYXJsaWVyIHBvc2l0aW9uLgogICAgICAgICBBU1NFUlQobV9s
YXN0V3JhcE9wcG9ydHVuaXR5SXRlbSk7Ci0gICAgICAgIHJldHVybiB7IExpbmVCcmVha2VyOjpJ
c0VuZE9mTGluZTo6WWVzLCB7IHJlYnVpbGRMaW5lKGxheW91dFJhbmdlKSwgdHJ1ZSB9IH07Cisg
ICAgICAgIHJldHVybiB7IElubGluZUNvbnRlbnRCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzLCB7
IHJlYnVpbGRMaW5lKGxheW91dFJhbmdlKSwgdHJ1ZSB9IH07CiAgICAgfQotICAgIGlmIChyZXN1
bHQuYWN0aW9uID09IExpbmVCcmVha2VyOjpSZXN1bHQ6OkFjdGlvbjo6QnJlYWspIHsKLSAgICAg
ICAgQVNTRVJUKHJlc3VsdC5pc0VuZE9mTGluZSA9PSBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6
Olllcyk7CisgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gSW5saW5lQ29udGVudEJyZWFrZXI6OlJl
c3VsdDo6QWN0aW9uOjpCcmVhaykgeworICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5l
ID09IElubGluZUNvbnRlbnRCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8g
Q29tbWl0IHRoZSBjb21iaW5hdGlvbiBvZiBmdWxsIGFuZCBwYXJ0aWFsIGNvbnRlbnQgb24gdGhl
IGN1cnJlbnQgbGluZS4KICAgICAgICAgY29tbWl0RmxvYXRzKGxpbmVDYW5kaWRhdGUsIENvbW1p
dEludHJ1c2l2ZUZsb2F0c09ubHk6Olllcyk7CiAgICAgICAgIEFTU0VSVChyZXN1bHQucGFydGlh
bFRyYWlsaW5nQ29udGVudCk7CkBAIC02MTUsMTkgKzYxNSwxOSBAQCBMaW5lQnVpbGRlcjo6UmVz
dWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVha2Vy
JiBsaW5lQgogICAgICAgICBhdXRvIHRyYWlsaW5nUnVuSW5kZXggPSByZXN1bHQucGFydGlhbFRy
YWlsaW5nQ29udGVudC0+dHJhaWxpbmdSdW5JbmRleDsKICAgICAgICAgYXV0byBjb21taXR0ZWRJ
bmxpbmVJdGVtQ291bnQgPSB0cmFpbGluZ1J1bkluZGV4ICsgMTsKICAgICAgICAgaWYgKCFyZXN1
bHQucGFydGlhbFRyYWlsaW5nQ29udGVudC0+cGFydGlhbFJ1bikKLSAgICAgICAgICAgIHJldHVy
biB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzLCB7IGNvbW1pdHRlZElubGluZUl0ZW1D
b3VudCwgZmFsc2UgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW5saW5lQ29udGVudEJyZWFr
ZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCBmYWxzZSB9
IH07CiAKICAgICAgICAgYXV0byBwYXJ0aWFsUnVuID0gKnJlc3VsdC5wYXJ0aWFsVHJhaWxpbmdD
b250ZW50LT5wYXJ0aWFsUnVuOwogICAgICAgICBhdXRvJiB0cmFpbGluZ0lubGluZVRleHRJdGVt
ID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGNhbmRpZGF0ZVJ1bnNbdHJhaWxpbmdSdW5JbmRl
eF0uaW5saW5lSXRlbSk7CiAgICAgICAgIEFTU0VSVChwYXJ0aWFsUnVuLmxlbmd0aCA8IHRyYWls
aW5nSW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpOwogICAgICAgICBhdXRvIG92ZXJmbG93TGVuZ3Ro
ID0gdHJhaWxpbmdJbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSAtIHBhcnRpYWxSdW4ubGVuZ3RoOwot
ICAgICAgICByZXR1cm4geyBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmU6OlllcywgeyBjb21taXR0
ZWRJbmxpbmVJdGVtQ291bnQsIGZhbHNlIH0sIExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudCB7
IHBhcnRpYWxSdW4ubmVlZHNIeXBoZW4sIG92ZXJmbG93TGVuZ3RoIH0gfTsKKyAgICAgICAgcmV0
dXJuIHsgSW5saW5lQ29udGVudEJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsgY29tbWl0dGVk
SW5saW5lSXRlbUNvdW50LCBmYWxzZSB9LCBMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQgeyBw
YXJ0aWFsUnVuLm5lZWRzSHlwaGVuLCBvdmVyZmxvd0xlbmd0aCB9IH07CiAgICAgfQogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGlu
ZTo6Tm8gfTsKKyAgICByZXR1cm4geyBJbmxpbmVDb250ZW50QnJlYWtlcjo6SXNFbmRPZkxpbmU6
Ok5vIH07CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdFBhcnRpYWxDb250ZW50KGNvbnN0
IExpbmVCcmVha2VyOjpDb250aW51b3VzQ29udGVudDo6UnVuTGlzdCYgcnVucywgY29uc3QgTGlu
ZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYgcGFydGlhbFRyYWlsaW5n
Q29udGVudCkKK3ZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdFBhcnRpYWxDb250ZW50KGNvbnN0IElu
bGluZUNvbnRlbnRCcmVha2VyOjpDb250aW51b3VzQ29udGVudDo6UnVuTGlzdCYgcnVucywgY29u
c3QgSW5saW5lQ29udGVudEJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYg
cGFydGlhbFRyYWlsaW5nQ29udGVudCkKIHsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgcnVucy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgYXV0byYgcnVuID0gcnVuc1tp
bmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCAxNzRhNTVmYTY1YTNhNjVkYzU0YWI1NzY1
NDQ2NTk4NjEyNDc3Zjc4Li5jZjVlZTA1MDMwMGY4ZGM4MmQ3OGFkNjk1YWJkZTIxMTdhMTM2ZWVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTI3LDkgKzI3LDkgQEAKIAogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiSW5saW5lQ29udGVudEJyZWFr
ZXIuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxp
bmVMaW5lLmgiCi0jaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgdm9pZCBuZXh0Q29udGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYsIHNpemVf
dCBpbmxpbmVJdGVtSW5kZXgsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbmVlZHNMYXlvdXRSYW5n
ZSwgT3B0aW9uYWw8c2l6ZV90PiBvdmVyZmxvd0xlbmd0aCwgSW5saW5lTGF5b3V0VW5pdCBhdmFp
bGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3VycmVudExvZ2ljYWxSaWdodCk7CiAg
ICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgIExpbmVCcmVha2VyOjpJc0VuZE9mTGluZSBpc0Vu
ZE9mTGluZSB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6Tm8gfTsKKyAgICAgICAgSW5saW5l
Q29udGVudEJyZWFrZXI6OklzRW5kT2ZMaW5lIGlzRW5kT2ZMaW5lIHsgSW5saW5lQ29udGVudEJy
ZWFrZXI6OklzRW5kT2ZMaW5lOjpObyB9OwogICAgICAgICBzdHJ1Y3QgQ29tbWl0dGVkQ29udGVu
dENvdW50IHsKICAgICAgICAgICAgIHNpemVfdCB2YWx1ZSB7IDAgfTsKICAgICAgICAgICAgIGJv
b2wgaXNSZXZlcnQgeyBmYWxzZSB9OwpAQCAtOTUsOSArOTUsOSBAQCBwcml2YXRlOgogICAgIH07
CiAgICAgVXNlZENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzRm9yTGluZShjb25zdCBGb3JtYXR0aW5n
Q29udGV4dDo6Q29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBpbml0aWFsTGluZUNvbnN0cmFp
bnRzLCBib29sIGlzRmlyc3RMaW5lKTsKICAgICB2b2lkIGNvbW1pdEZsb2F0cyhjb25zdCBMaW5l
Q2FuZGlkYXRlJiwgQ29tbWl0SW50cnVzaXZlRmxvYXRzT25seSA9IENvbW1pdEludHJ1c2l2ZUZs
b2F0c09ubHk6Ok5vKTsKLSAgICBSZXN1bHQgaGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChM
aW5lQnJlYWtlciYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbmVlZHNMYXlvdXRSYW5nZSwgY29u
c3QgTGluZUNhbmRpZGF0ZSYpOworICAgIFJlc3VsdCBoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250
ZW50KElubGluZUNvbnRlbnRCcmVha2VyJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xh
eW91dFJhbmdlLCBjb25zdCBMaW5lQ2FuZGlkYXRlJik7CiAgICAgc2l6ZV90IHJlYnVpbGRMaW5l
KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbmVlZHNMYXlvdXRSYW5nZSk7Ci0gICAgdm9pZCBjb21t
aXRQYXJ0aWFsQ29udGVudChjb25zdCBMaW5lQnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQ6OlJ1
bkxpc3QmLCBjb25zdCBMaW5lQnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50
Jik7CisgICAgdm9pZCBjb21taXRQYXJ0aWFsQ29udGVudChjb25zdCBJbmxpbmVDb250ZW50QnJl
YWtlcjo6Q29udGludW91c0NvbnRlbnQ6OlJ1bkxpc3QmLCBjb25zdCBJbmxpbmVDb250ZW50QnJl
YWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50Jik7CiAgICAgdm9pZCBpbml0aWFs
aXplKGNvbnN0IFVzZWRDb25zdHJhaW50cyYpOwogICAgIHN0cnVjdCBDb21taXR0ZWRDb250ZW50
IHsKICAgICAgICAgc2l6ZV90IGlubGluZUl0ZW1Db3VudCB7IDAgfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>