<?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>225754</bug_id>
          
          <creation_ts>2021-05-13 04:48:09 -0700</creation_ts>
          <short_desc>[LFC] Move inline formatting geometry to its own class</short_desc>
          <delta_ts>2021-05-15 16:57:18 -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>
          
          <blocked>225731</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1759633</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-13 04:48:09 -0700</bug_when>
    <thetext>This is part of bug 225731 activity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759663</commentid>
    <comment_count>1</comment_count>
      <attachid>428502</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-13 05:48:21 -0700</bug_when>
    <thetext>Created attachment 428502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760492</commentid>
    <comment_count>2</comment_count>
      <attachid>428748</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-15 16:09:38 -0700</bug_when>
    <thetext>Created attachment 428748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760497</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-15 16:56:05 -0700</bug_when>
    <thetext>Committed r277552 (237780@main): &lt;https://commits.webkit.org/237780@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428748.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760499</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-15 16:57:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/78065788&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428502</attachid>
            <date>2021-05-13 05:48:21 -0700</date>
            <delta_ts>2021-05-15 16:09:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225754-20210513054820.patch</filename>
            <type>text/plain</type>
            <size>94439</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE5ZDEyNDY2NTYyNDFh
MTM2ZGYzNzJjYjQxZjMyZGViNWY0MzYwNy4uNTg0MTFjMzdmY2Q5MGZhNjYzNWM1MzgzNWU4MGQz
NGEwYWQyNjQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA1LTEzICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIGlubGluZSBm
b3JtYXR0aW5nIGdlb21ldHJ5IHRvIGl0cyBvd24gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc1NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6Okdlb21ldHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDogUmVtb3ZlZC4KKwogMjAyMS0wNS0wNSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFi
b3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW01TRV1bR1N0cmVhbWVyXSBXZWJLaXRNZWRpYVNy
YyByZXdvcmsgdjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI1MDlmYjc3ZDg0ODFhMzgzNDI3MjIxYmM1
ZDVhNzJiNDVjMmU5OS4uZDVhNjQzZjFmYWU5ODJlYmNlOThkODljZDRlMmVhZjI4MWQwMjlhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTE1MzUsNyArMTUzNSw3IEBAIGxheW91dC9mbG9hdHMvRmxvYXRp
bmdDb250ZXh0LmNwcAogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcAogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lQ29udGVudEJyZWFrZXIuY3BwCiBsYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKLWxh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwCitsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVG
b3JtYXR0aW5nUXVpcmtzLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lSXRlbS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjOGJkNjc3NmVkNTA0ZWUxZmJlMjk2Y2RlMDViNDQxZThmYWE5
NGVmLi44M2Y3N2EzMDI3YTgyN2NjNWY5ZTZjNGE1YTM5ODJmOWY0ZjcxMjUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTMw
LDYgKzIxMzAsNyBAQAogCQk2RjFDQzFERTIyNUY4QjQ5MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0
ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMUND
MUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMjZCQjZDMjMzNDNFNkYwMDJGMkJF
QSAvKiBMYXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMjZFQjQ4
MjM0MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8q
IElubGluZUxpbmVCdWlsZGVyLmggKi87IH07CisJCTZGMjkxRjRBMjY0ODgyMUUwMEIxNTc4NSAv
KiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMjkxRjQ5MjY0ODgyMUUwMEIxNTc4NSAvKiBJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RjM2MEU1MDIzOTk5NDIxMDAxNTEyQTcgLyogSW5saW5lU29mdExpbmVCcmVh
a0l0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZG
MzYwRTRFMjM5OTk0MjAwMDE1MTJBNyAvKiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGM0ZCQTk4MjU1
NkUzMTMwMDM1MzBGRCAvKiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjNGQkE5NzI1
NTZFMzEyMDAzNTMwRkQgLyogTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGNDBE
QTgyMjUxMzAzM0EwMEVDMDRCNyAvKiBJbmxpbmVSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjQwREE4MTI1MTMwMzNBMDBFQzA0QjcgLyogSW5s
aW5lUmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC05OTYxLDcgKzk5NjIsOCBAQAogCQk2RjI2QkI2OTIzMzQzRTVBMDAyRjJCRUEgLyogTGF5
b3V0Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRDb250ZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyNkJCNkIyMzM0M0U1QjAwMkYyQkVBIC8qIExh
eW91dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Q29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RjI2RUI0NjIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGlu
ZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lTGluZUJ1
aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkYzNUVGQUYyMTg3Q0JENTAw
NDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMjkxRjQ5MjY0ODgyMUUwMEIx
NTc4NSAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5l
Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYz
NjBFNEUyMzk5OTQyMDAwMTUxMkE3IC8qIElubGluZVNvZnRMaW5lQnJlYWtJdGVtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVNvZnRMaW5lQnJlYWtJdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0ZCQTk2MjU1NkUzMDgwMDM1MzBGRCAvKiBM
YXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RjNGQkE5NzI1NTZFMzEyMDAzNTMwRkQgLyogTGF5b3V0SW50
ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODI2OSw3ICsxODI3MSw4IEBACiAJCQkJNkZFMTk4MTUy
MTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUNvbnRlbnRCcmVha2VyLmggKi8sCiAJCQkJNkY3Q0Ez
QzkyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCAqLywKIAkJ
CQk2RjdDQTNDODIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCAq
LywKLQkJCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkYyOTFGNDkyNjQ4ODIxRTAwQjE1Nzg1IC8qIElubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeS5oICovLAorCQkJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAv
KiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwICovLAogCQkJCTZGRTYzNkU3MjY0Nzk2Mjkw
MEYwOTUxRSAvKiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmggKi8sCiAJCQkJNkYxMEIwODYyMkI4
NTY4RDAwOTBFNjlDIC8qIElubGluZUZvcm1hdHRpbmdRdWlya3MuY3BwICovLAogCQkJCTExNUNG
QTdEMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwICovLApAQCAt
MzM5MDYsNiArMzM5MDksNyBAQAogCQkJCTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VGRTFFQjBEQ0E1RjY0MDA3MzkyMTkg
LyogSlNYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0I3NEVGNjFGM0UwQkYy
MDA5OTZCQzcgLyogS2VlcGFsaXZlUmVxdWVzdFRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTZGMjkxRjRBMjY0ODgyMUUwMEIxNTc4NSAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQ0MEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ1OTE4MkRBQzhEMDAwODdERDcgLyogS2V5
ZWRDb2RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0E2M0M1MUI3NDMxOEYwMEU3RENEQyAv
KiBLZXllZERlY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMmQyOTE5NDBlOWMxNmVhNzg0OWJi
NTE5ZWFhOTFkN2M1Y2Q4ZTE4OS4uMzc3NDg5OTE0ODJjZWMxN2RkYjUxZGQ3YThmOGY5NGE3NWY1
MmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxp
bmVGb3JtYXR0aW5nUXVpcmtzLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgpAQCAtNjA2
LDYgKzYwNywxMSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjppbnZhbGlkYXRlRm9y
bWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJgogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGFsc28gd2hlcmUgd2Ugd291bGQgZGVsZXRlIGlubGluZSBpdGVtcyBpZiB0aGVpciBjb250
ZW50IGNoYW5nZWQuCiB9CiAKK0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Z2VvbWV0cnkoKSBjb25zdAoreworICAgIHJldHVybiBJbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkoKnRoaXMpOworfQorCiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpxdWlya3MoKSBjb25zdAogewogICAgIHJldHVybiBJbmxpbmVGb3Jt
YXR0aW5nUXVpcmtzKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oCmluZGV4IDE2ZTJiNzkzMDg2NGFjNjEzMmE2OWNkYWU5Mzg1YmJmNmQ3Y2E5
YTAuLmNkNzE4M2NkNTQzNTA2MjM2NDQzOGQ4ZWEwMTAwNTAxZTRlMTI0ZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMzQsNiArMzQsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKK2NsYXNzIElubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNz
IElubGluZUZvcm1hdHRpbmdRdWlya3M7CiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKQEAgLTU4
LDIyICs1OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBvdmVycmlkZTsKIAotICAg
IGNsYXNzIEdlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSB7Ci0g
ICAgcHVibGljOgotICAgICAgICBMaW5lQm94IGxpbmVCb3hGb3JMaW5lQ29udGVudChjb25zdCBM
aW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmKTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wRm9yTmV4dExpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgSW5saW5l
TGF5b3V0VW5pdCBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBGbG9hdGluZ0NvbnRl
eHQmKSBjb25zdDsKLQotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2Nr
Q29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKLSAgICAgICAg
Q29udGVudFdpZHRoQW5kTWFyZ2luIGlubGluZUJsb2NrQ29udGVudFdpZHRoQW5kTWFyZ2luKGNv
bnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5I
b3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3Mg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAgICAgIEdlb21ldHJ5KGNvbnN0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0Jik7Ci0KLSAgICAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0Nv
bnRleHQoKSk7IH0KLQotICAgIH07Ci0gICAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gR2VvbWV0cnkoKnRoaXMpOyB9CisgICAgSW5s
aW5lRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3Q7CiAKICAgICB2b2lkIGxpbmVM
YXlvdXQoSW5saW5lSXRlbXMmLCBMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJhbmdlLCBjb25zdCBD
b25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKIApAQCAtODksMTEgKzc1LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29uc3QgSW52YWxpZGF0aW9u
U3RhdGUmKTsKIH07CiAKLWlubGluZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
Okdlb21ldHJ5KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKLXsKLX0KLQogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5s
aW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiMjRlNzg4MzMzODBmYjRjYzIwNTEzNTlhMzZiNTA0OTU0OWI5YWQwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzI3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVk
ZSAiRmxvYXRpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKLSNp
bmNsdWRlICJJbmxpbmVMaW5lQm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0Qm94LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIK
LSNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFt
ZXNwYWNlIExheW91dCB7Ci0KLWNsYXNzIExpbmVCb3hCdWlsZGVyIHsKLXB1YmxpYzoKLSAgICBM
aW5lQm94QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwotICAgIExpbmVC
b3ggYnVpbGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50Jik7Ci0KLXByaXZhdGU6Ci0g
ICAgc3RydWN0IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCB7Ci0gICAgICAgIFNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElu
bGluZUJveCk7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgY2FuVXNlU2ltcGxpZmllZEFsaWdubWVu
dChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGluZUJveCwgY29uc3QgTGlu
ZUJveDo6SW5saW5lTGV2ZWxCb3gmLCBPcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4gaW5saW5l
TGV2ZWxCb3hHZW9tZXRyeSk7Ci0KLSAgICAgICAgdm9pZCBhbGlnbihMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveCYpOwotCi0gICAgICAgIElubGluZUxheW91dFVuaXQgcm9vdElubGluZUJveExvZ2lj
YWxUb3AoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wOyB9Ci0gICAg
ICAgIElubGluZUxheW91dFVuaXQgbGluZUJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUJveExvZ2ljYWxCb3R0b20gLSBtX2xpbmVCb3hMb2dpY2FsVG9wOyB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KLSAg
ICAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRW5hYmxlZDsgfQotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGp1c3QoY29uc3QgTGluZUJveDo6SW5saW5lTGV2
ZWxCb3gmKTsKLQotICAgICAgICBjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgbV9yb290
SW5saW5lQm94OwotICAgICAgICBib29sIG1faXNFbmFibGVkIHsgdHJ1ZSB9OwotICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IG1fbGluZUJveExvZ2ljYWxUb3AgeyAwIH07Ci0gICAgICAgIElubGlu
ZUxheW91dFVuaXQgbV9saW5lQm94TG9naWNhbEJvdHRvbSB7IDAgfTsKLSAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wIHsgMCB9OwotICAgIH07Ci0KLSAg
ICB2b2lkIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goTGluZUJveDo6SW5saW5lTGV2
ZWxCb3gmKSBjb25zdDsKLSAgICB2b2lkIGNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hl
cyhMaW5lQm94JiwgY29uc3QgTGluZTo6UnVuTGlzdCYpOwotICAgIHZvaWQgY29tcHV0ZUxpbmVC
b3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5KExpbmVCb3gmKTsKLQot
ICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KLSAgICBjb25zdCBCb3gm
IHJvb3RCb3goKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKTsgfQot
ICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdD
b250ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQotCi0gICAgYm9vbCBpc1Jvb3RMYXlvdXRCb3goY29u
c3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gpIGNvbnN0IHsgcmV0dXJuICZjb250YWluZXJC
b3ggPT0gJnJvb3RCb3goKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwotfTsKLQotc3RydWN0IEhhbmdp
bmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50IHsKLXB1YmxpYzoKLSAgICB2b2lkIHJlc2V0KCk7
Ci0KLSAgICBJbmxpbmVMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQotICAgIGJvb2wgaXNDb25kaXRpb25hbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb25kaXRpb25h
bDsgfQotCi0gICAgdm9pZCBzZXRJc0NvbmRpdGlvbmFsKCkgeyBtX2lzQ29uZGl0aW9uYWwgPSB0
cnVlOyB9Ci0gICAgdm9pZCBleHBhbmQoSW5saW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRo
ICs9IHdpZHRoOyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzQ29uZGl0aW9uYWwgeyBmYWxz
ZSB9OwotICAgIElubGluZUxheW91dFVuaXQgbV93aWR0aCB7IDAgfTsKLX07Ci0KLXZvaWQgSGFu
Z2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRlbnQ6OnJlc2V0KCkKLXsKLSAgICBtX2lzQ29uZGl0
aW9uYWwgPSBmYWxzZTsKLSAgICBtX3dpZHRoID0gIDA7Ci19Ci0KLXN0YXRpYyBIYW5naW5nVHJh
aWxpbmdXaGl0ZXNwYWNlQ29udGVudCBjb2xsZWN0SGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNv
bnRlbnQoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgYm9vbCBpc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQpCi17Ci0gICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdUcmFpbGluZ1do
aXRlc3BhY2VDb250ZW50IHsgfTsKLSAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
KQotICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgZm9yIChh
dXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKHJ1bnMpKSB7Ci0gICAgICAgIGlmIChy
dW4uaXNJbmxpbmVCb3hTdGFydCgpIHx8IHJ1bi5pc0lubGluZUJveEVuZCgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAg
ICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXNl
cnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0ZVNw
YWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJh
aWxpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFp
bGluZ1doaXRlc3BhY2VXaWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhbmdpbmdDb250ZW50
OwotfQotCi1zdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gaG9yaXpvbnRhbEFsaWdu
bWVudE9mZnNldChjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBUZXh0QWxpZ25Nb2RlIHRleHRB
bGlnbiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGJvb2wgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGF2YWls
YWJsZVdpZHRoID0gbGluZUxvZ2ljYWxXaWR0aCAtIGNvbnRlbnRMb2dpY2FsV2lkdGg7Ci0gICAg
YXV0byBoYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudCA9IGNvbGxlY3RIYW5naW5nVHJh
aWxpbmdXaGl0ZXNwYWNlQ29udGVudChydW5zLCBpc0xhc3RMaW5lKTsKLSAgICBhdmFpbGFibGVX
aWR0aCArPSBoYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudC53aWR0aCgpOwotICAgIGlm
IChhdmFpbGFibGVXaWR0aCA8PSAwKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBj
b21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0gewotICAgICAgICBpZiAodGV4dEFsaWdu
ICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAgICByZXR1cm4gdGV4dEFsaWdu
OwotICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBz
cGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgLy8gaW4gb3Jk
ZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZp
ZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAotICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBh
IGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgot
ICAgICAgICBpZiAoaXNMYXN0TGluZSB8fCAoIXJ1bnMuaXNFbXB0eSgpICYmIHJ1bnMubGFzdCgp
LmlzTGluZUJyZWFrKCkpKQotICAgICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6OlN0YXJ0
OwotICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKLSAgICB9OwotCi0gICAg
c3dpdGNoIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSkgewotICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Umln
aHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBhdmFpbGFi
bGVXaWR0aDsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVdpZHRoIC8g
MjsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgIC8vIFRleHRBbGln
bk1vZGU6Okp1c3RpZnkgaXMgYSBydW4gYWxpZ25tZW50IChhbmQgd2Ugb25seSBkbyBpbmxpbmUg
Ym94IGFsaWdubWVudCBoZXJlKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0K
LUxpbmVCb3hCdWlsZGVyOjpMaW5lQm94QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBtX2lubGluZUZvcm1hdHRpbmdD
b250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotewotfQotCi1MaW5lQm94IExpbmVCb3hC
dWlsZGVyOjpidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50
KQotewotICAgIGF1dG8mIHJ1bnMgPSBsaW5lQ29udGVudC5ydW5zOwotICAgIGF1dG8gbGluZUxv
Z2ljYWxXaWR0aCA9IGxpbmVDb250ZW50LmxpbmVMb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBjb250
ZW50TG9naWNhbFdpZHRoID0gbGluZUNvbnRlbnQuY29udGVudExvZ2ljYWxXaWR0aDsKLSAgICBh
dXRvIGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlvdXQ6Omhvcml6b250YWxBbGlnbm1l
bnRPZmZzZXQocnVucywgcm9vdEJveCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmVMb2dpY2Fs
V2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250ZW50LmlzTGFzdExpbmVXaXRoSW5s
aW5lQ29udGVudCk7Ci0gICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IHJvb3RCb3goKSwgbGlu
ZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVMb2dpY2FsV2lkdGgsIGhvcml6b250YWxBbGln
bm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSksIGNvbnRlbnRMb2dpY2Fs
V2lkdGgsIGxpbmVDb250ZW50Lm5vblNwYW5uaW5nSW5saW5lTGV2ZWxCb3hDb3VudCB9OwotICAg
IGNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBydW5zKTsKLSAgICBy
ZXR1cm4gbGluZUJveDsKLX0KLQotdm9pZCBMaW5lQm94QnVpbGRlcjo6c2V0VmVydGljYWxHZW9t
ZXRyeUZvcklubGluZUJveChMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5lTGV2ZWxCb3gp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94KCkgfHwgaW5s
aW5lTGV2ZWxCb3guaXNMaW5lQnJlYWtCb3goKSk7Ci0gICAgYXV0byYgZm9udE1ldHJpY3MgPSBp
bmxpbmVMZXZlbEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgSW5saW5lTGF5b3V0VW5p
dCBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGRl
c2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7Ci0gICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0g
YXNjZW50ICsgZGVzY2VudDsKLSAgICAvLyBXZSBuZWVkIGZsb29yL2NlaWwgdG8gbWF0Y2ggbGVn
YWN5IGxheW91dCBpbnRlZ3JhbCBwb3NpdGlvbmluZy4KLSAgICBpbmxpbmVMZXZlbEJveC5zZXRC
YXNlbGluZShmbG9vcmYoYXNjZW50KSk7Ci0gICAgaW5saW5lTGV2ZWxCb3guc2V0RGVzY2VudChj
ZWlsKGRlc2NlbnQpKTsKLSAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsSGVpZ2h0KGxvZ2lj
YWxIZWlnaHQpOwotCi0gICAgLy8gRklYTUU6IEFkanVzdCBsYXlvdXQgYm91bmRzIHdpdGggZmFs
bGJhY2sgZm9udCB3aGVuIGFwcGxpY2FibGUuCi0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZl
bEJveC5sYXlvdXRCb3goKS5zdHlsZSgpOwotICAgIGF1dG8gbGluZUhlaWdodCA9IHN0eWxlLmxp
bmVIZWlnaHQoKTsKLSAgICBpZiAobGluZUhlaWdodC5pc05lZ2F0aXZlKCkpIHsKLSAgICAgICAg
Ly8gSWYgbGluZS1oZWlnaHQgY29tcHV0ZXMgdG8gbm9ybWFsIGFuZCBlaXRoZXIgdGV4dC1lZGdl
IGlzIGxlYWRpbmcgb3IgdGhpcyBpcyB0aGUgcm9vdCBpbmxpbmUgYm94LAotICAgICAgICAvLyB0
aGUgZm9udOKAmXMgbGluZSBnYXAgbWV0cmljIG1heSBhbHNvIGJlIGluY29ycG9yYXRlZCBpbnRv
IEEgYW5kIEQgYnkgYWRkaW5nIGhhbGYgdG8gZWFjaCBzaWRlIGFzIGhhbGYtbGVhZGluZy4KLSAg
ICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUtMy8jaW5saW5lLWhlaWdo
dAotICAgICAgICAvLyBTaW5jZSB0ZXh0LWVkZ2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQgYW5kIHRo
ZSBpbml0aWFsIHZhbHVlIGlzIGxlYWRpbmcsIHdlIHNob3VsZCBqdXN0IGFwcGx5IGl0IHRvCi0g
ICAgICAgIC8vIGFsbCBpbmxpbmUgYm94ZXMuCi0gICAgICAgIGF1dG8gaGFsZkxpbmVHYXAgPSAo
Zm9udE1ldHJpY3MubGluZVNwYWNpbmcoKSAtIGxvZ2ljYWxIZWlnaHQpIC8gMjsKLSAgICAgICAg
YXNjZW50ICs9IGhhbGZMaW5lR2FwOwotICAgICAgICBkZXNjZW50ICs9IGhhbGZMaW5lR2FwOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbGluZUhlaWdodCA9IHN0eWxl
LmNvbXB1dGVkTGluZUhlaWdodCgpOwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGhhbGZMZWFk
aW5nID0gKGxpbmVIZWlnaHQgLSAoYXNjZW50ICsgZGVzY2VudCkpIC8gMjsKLSAgICAgICAgYXNj
ZW50ICs9IGhhbGZMZWFkaW5nOwotICAgICAgICBkZXNjZW50ICs9IGhhbGZMZWFkaW5nOwotICAg
IH0KLSAgICAvLyBXZSBuZWVkIGZsb29yL2NlaWwgdG8gbWF0Y2ggbGVnYWN5IGxheW91dCBpbnRl
Z3JhbCBwb3NpdGlvbmluZy4KLSAgICBpbmxpbmVMZXZlbEJveC5zZXRMYXlvdXRCb3VuZHMoTGlu
ZUJveDo6SW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGZsb29yZihhc2NlbnQpLCBjZWls
KGRlc2NlbnQpIH0pOwotfQotCi12b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRBbGln
bklubGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZTo6UnVuTGlzdCYg
cnVucykKLXsKLSAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94
KCk7Ci0gICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChyb290SW5saW5lQm94KTsK
LQotICAgIGF1dG8gc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50ID0gU2ltcGxpZmllZFZlcnRp
Y2FsQWxpZ25tZW50IHsgcm9vdElubGluZUJveCB9OwotICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBw
YXRoIHN1cHBvcnQgZm9yIGxpbmUtaGVpZ2h0IGNvbnRlbnQuCi0gICAgc2ltcGxpZmllZFZlcnRp
Y2FsQWxpZ25tZW50LnNldEVuYWJsZWQobGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSAm
JiByb290Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKTsKLQotICAgIGF1
dG8gc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZSA9IFsmXShhdXRvJiBpbmxp
bmVMZXZlbEJveCwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGJveEdlb21ldHJ5KSB7Ci0g
ICAgICAgIGlmICghc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LmlzRW5hYmxlZCgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIVNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVu
dDo6Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChyb290SW5saW5lQm94LCBpbmxpbmVMZXZlbEJv
eCwgYm94R2VvbWV0cnkpKSB7Ci0gICAgICAgICAgICBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1l
bnQuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LmFsaWduKGlubGluZUxldmVsQm94KTsK
LSAgICB9OwotCi0gICAgYXV0byBjcmVhdGVXcmFwcGVkSW5saW5lQm94ZXMgPSBbJl0gewotICAg
ICAgICBpZiAocnVucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8v
IEFuIGlubGluZSBib3ggbWF5IG5vdCBuZWNlc3NhcmlseSBzdGFydCBvbiB0aGUgY3VycmVudCBs
aW5lOgotICAgICAgICAvLyA8c3BhbiBpZD1vdXRlcj5saW5lIGJyZWFrPGJyPnRoaXMgY29udGVu
dCdzIHBhcmVudCBpbmxpbmUgYm94KCdvdXRlcicpIDxzcGFuIGlkPWlubmVyPnN0YXJ0cyBvbiB0
aGUgcHJldmlvdXMgbGluZTwvc3Bhbj48L3NwYW4+Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gbWFr
ZSBzdXJlIHRoYXQgdGhlcmUncyBhbiBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCBmb3IgZXZlcnkg
aW5saW5lIGJveCB0aGF0J3MgcHJlc2VudCBvbiB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAv
LyBJbiBuZXN0aW5nIGNhc2Ugd2UgbmVlZCB0byBjcmVhdGUgTGluZUJveDo6SW5saW5lTGV2ZWxC
b3hlcyBmb3IgdGhlIGlubGluZSBib3ggYW5jZXN0b3JzLgotICAgICAgICAvLyBXZSBvbmx5IGhh
dmUgdG8gZG8gaXQgb24gdGhlIGZpcnN0IHJ1biBhcyBhbnkgc3Vic2VxdWVudCBpbmxpbmUgY29u
dGVudCBpcyBlaXRoZXIgYXQgdGhlIHNhbWUvaGlnaGVyIG5lc3RpbmcgbGV2ZWwgb3IKLSAgICAg
ICAgLy8gbmVzdGVkIHdpdGggYSBbaW5saW5lIGJveCBzdGFydF0gcnVuLgotICAgICAgICBhdXRv
JiBmaXJzdFJ1biA9IHJ1bnNbMF07Ci0gICAgICAgIGF1dG8mIGZpcnN0UnVuUGFyZW50TGF5b3V0
Qm94ID0gZmlyc3RSdW4ubGF5b3V0Qm94KCkucGFyZW50KCk7Ci0gICAgICAgIC8vIElmIHRoZSBw
YXJlbnQgaXMgdGhlIGZvcm1hdHRpbmcgcm9vdCwgd2UgY2FuIHN0b3AgaGVyZS4gVGhpcyBpcyBy
b290IGlubGluZSBib3ggY29udGVudCwgdGhlcmUncyBubyBuZXN0aW5nIGlubGluZSBib3ggZnJv
bSB0aGUgcHJldmlvdXMgbGluZShzKQotICAgICAgICAvLyB1bmxlc3MgdGhlIGlubGluZSBib3gg
Y2xvc2luZyBpcyBmb3JjZWQgb3ZlciB0byB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAvLyBl
LmcuCi0gICAgICAgIC8vIDxzcGFuPm5vcm1hbGx5IHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgZm9y
bXMgYSBjb250aW51b3VzIGNvbnRlbnQ8L3NwYW4+Ci0gICAgICAgIC8vIDxzcGFuPnVubGVzcyBp
dCdzIGZvcmNlZCB0byB0aGUgbmV4dCBsaW5lPGJyPjwvc3Bhbj4KLSAgICAgICAgYXV0byBmaXJz
dFJ1bk5lZWRzSW5saW5lQm94ID0gZmlyc3RSdW4uaXNJbmxpbmVCb3hFbmQoKTsKLSAgICAgICAg
aWYgKCFmaXJzdFJ1bk5lZWRzSW5saW5lQm94ICYmIGlzUm9vdExheW91dEJveChmaXJzdFJ1blBh
cmVudExheW91dEJveCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFZlY3Rvcjxjb25z
dCBCb3gqPiBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlczsKLSAgICAgICAgaWYgKGZpcnN0
UnVuTmVlZHNJbmxpbmVCb3gpCi0gICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVC
b3hlcy5hcHBlbmQoJmZpcnN0UnVuLmxheW91dEJveCgpKTsKLSAgICAgICAgYXV0byogYW5jZXN0
b3IgPSAmZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3g7Ci0gICAgICAgIHdoaWxlICghaXNSb290TGF5
b3V0Qm94KCphbmNlc3RvcikpIHsKLSAgICAgICAgICAgIGxheW91dEJveGVzV2l0aG91dElubGlu
ZUJveGVzLmFwcGVuZChhbmNlc3Rvcik7Ci0gICAgICAgICAgICBhbmNlc3RvciA9ICZhbmNlc3Rv
ci0+cGFyZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBtaXNzaW5n
IExpbmVCb3g6OklubGluZUJveGVzIHN0YXJ0aW5nIHdpdGggdGhlIHRvcG1vc3QgbGF5b3V0IGJv
eC4KLSAgICAgICAgZm9yIChhdXRvKiBsYXlvdXRCb3ggOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdl
KGxheW91dEJveGVzV2l0aG91dElubGluZUJveGVzKSkgewotICAgICAgICAgICAgYXV0byBpbmxp
bmVCb3ggPSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KCpsYXlvdXRC
b3gsIHJvb3RJbmxpbmVCb3gubG9naWNhbExlZnQoKSwgbGluZUJveC5jb250ZW50TG9naWNhbFdp
ZHRoKCkpOwotICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChpbmxp
bmVCb3gpOwotICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJs
ZShpbmxpbmVCb3gsIHsgfSk7Ci0gICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94
KFdURk1vdmUoaW5saW5lQm94KSk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIGNyZWF0ZVdyYXBw
ZWRJbmxpbmVCb3hlcygpOwotCi0gICAgYXV0byBsaW5lSGFzQ29udGVudCA9IGZhbHNlOwotICAg
IGZvciAoYXV0byYgcnVuIDogcnVucykgewotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4u
bGF5b3V0Qm94KCk7Ci0gICAgICAgIGF1dG8gcnVuSGFzQ29udGVudCA9IFsmXSAoKSAtPiBib29s
IHsKLSAgICAgICAgICAgIEFTU0VSVCghbGluZUhhc0NvbnRlbnQpOwotICAgICAgICAgICAgaWYg
KHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSB8fCBydW4uaXNTb2Z0TGluZUJyZWFrKCkgfHwg
cnVuLmlzSGFyZExpbmVCcmVhaygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgYXV0byYgaW5saW5lQm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAvLyBFdmVuIG5lZ2F0aXZlIGhv
cml6b250YWwgbWFyZ2luIG1ha2VzIHRoZSBsaW5lICJjb250ZW50ZnVsIi4KLSAgICAgICAgICAg
IGlmIChydW4uaXNJbmxpbmVCb3hTdGFydCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmxp
bmVCb3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpIHx8IGlubGluZUJveEdlb21ldHJ5LmJvcmRlckxl
ZnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMF9sdSk7Ci0g
ICAgICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGlubGluZUJveEdlb21ldHJ5Lm1hcmdpbkVuZCgpIHx8IGlubGluZUJveEdlb21ldHJ5LmJv
cmRlclJpZ2h0KCkgfHwgaW5saW5lQm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigw
X2x1KTsKLSAgICAgICAgICAgIGlmIChydW4uaXNXb3JkQnJlYWtPcHBvcnR1bml0eSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH07Ci0gICAgICAgIGxpbmVI
YXNDb250ZW50ID0gbGluZUhhc0NvbnRlbnQgfHwgcnVuSGFzQ29udGVudCgpOwotICAgICAgICBh
dXRvIGxvZ2ljYWxMZWZ0ID0gcm9vdElubGluZUJveC5sb2dpY2FsTGVmdCgpICsgcnVuLmxvZ2lj
YWxMZWZ0KCk7Ci0gICAgICAgIGlmIChydW4uaXNCb3goKSkgewotICAgICAgICAgICAgYXV0byYg
aW5saW5lTGV2ZWxCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gaW5saW5l
TGV2ZWxCb3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLSAgICAgICAgICAgIGF1dG8gYXNj
ZW50ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUo
KS5zaG91bGROb3RTeW50aGVzaXplSW5saW5lQmxvY2tCYXNlbGluZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSW50ZWdyYXRpb24gY29kZXBhdGggY29uc3RydWN0cyByZXBsYWNlZCBib3hlcyBm
b3IgaW5saW5lLWJsb2NrIGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGxheW91dEJv
eC5pc1JlcGxhY2VkQm94KCkpOwotICAgICAgICAgICAgICAgIGFzY2VudCA9ICpkb3duY2FzdDxS
ZXBsYWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhl
IGJhc2VsaW5lIG9mIGFuICdpbmxpbmUtYmxvY2snIGlzIHRoZSBiYXNlbGluZSBvZiBpdHMgbGFz
dCBsaW5lIGJveCBpbiB0aGUgbm9ybWFsIGZsb3csIHVubGVzcyBpdCBoYXMgZWl0aGVyIG5vIGlu
LWZsb3cgbGluZSBib3hlcyBvcgotICAgICAgICAgICAgICAgIC8vIGlmIGl0cyAnb3ZlcmZsb3cn
IHByb3BlcnR5IGhhcyBhIGNvbXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ3Zpc2libGUnLCBpbiB3
aGljaCBjYXNlIHRoZSBiYXNlbGluZSBpcyB0aGUgYm90dG9tIG1hcmdpbiBlZGdlLgotICAgICAg
ICAgICAgICAgIGF1dG8gc3ludGhlc2l6ZUJhc2VsaW5lID0gIWxheW91dEJveC5lc3RhYmxpc2hl
c0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkgfHwgIWxheW91dEJveC5zdHlsZSgpLmlzT3ZlcmZs
b3dWaXNpYmxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN5bnRoZXNpemVCYXNlbGluZSkKLSAg
ICAgICAgICAgICAgICAgICAgYXNjZW50ID0gbWFyZ2luQm94SGVpZ2h0OwotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBs
YXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENv
bnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RM
aW5lID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVzKCkubGFzdCgpOwotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZS5saW5lQm94TG9naWNhbFJlY3Qo
KS50b3AoKSArIGxhc3RMaW5lLmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzY2Vu
dCA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBpbmxpbmVMZXZlbEJv
eEdlb21ldHJ5LmJvcmRlclRvcCgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5wYWRkaW5nVG9w
KCkudmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAg
ICAgICAgICAgIGFzY2VudCA9IGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLmJhc2Vs
aW5lKCkudmFsdWVPcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGFzY2VudCA9IG1hcmdpbkJveEhlaWdodDsKLSAgICAgICAgICAgIGxvZ2ljYWxM
ZWZ0ICs9IHN0ZDo6bWF4KDBfbHUsIGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luU3RhcnQo
KSk7Ci0gICAgICAgICAgICBhdXRvIGF0b21pY0lubGluZUxldmVsQm94ID0gTGluZUJveDo6SW5s
aW5lTGV2ZWxCb3g6OmNyZWF0ZUF0b21pY0lubGluZUxldmVsQm94KGxheW91dEJveCwgbG9naWNh
bExlZnQsIHsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJCb3hXaWR0aCgpLCBtYXJnaW5C
b3hIZWlnaHQgfSk7Ci0gICAgICAgICAgICBhdG9taWNJbmxpbmVMZXZlbEJveC5zZXRCYXNlbGlu
ZShhc2NlbnQpOwotICAgICAgICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91
bmRzKExpbmVCb3g6OklubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBhc2NlbnQsIG1hcmdp
bkJveEhlaWdodCAtIGFzY2VudCB9KTsKLSAgICAgICAgICAgIHNpbXBsaWZpZWRBbGlnblZlcnRp
Y2FsbHlJZkFwcGxpY2FibGUoYXRvbWljSW5saW5lTGV2ZWxCb3gsIGlubGluZUxldmVsQm94R2Vv
bWV0cnkpOwotICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGF0
b21pY0lubGluZUxldmVsQm94KSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQoKSkgewotICAgICAgICAgICAgLy8gQXQg
dGhpcyBwb2ludCB3ZSBkb24ndCBrbm93IHlldCBob3cgd2lkZSB0aGlzIGlubGluZSBib3ggaXMu
IExldCdzIGFzc3VtZSBpdCdzIGFzIGxvbmcgYXMgdGhlIGxpbmUgaXMKLSAgICAgICAgICAgIC8v
IGFuZCBhZGp1c3QgaXQgbGF0ZXIgaWYgd2UgY29tZSBhY3Jvc3MgYW4gaW5saW5lQm94RW5kIHJ1
biAoc2VlIGJlbG93KS4KLSAgICAgICAgICAgIGF1dG8gaW5pdGlhbExvZ2ljYWxXaWR0aCA9IGxp
bmVCb3guY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoaW5pdGlhbExvZ2ljYWxXaWR0aCA+PSAwKTsKLSAgICAgICAgICAgIC8vIElu
bGluZSBib3ggcnVuIGlzIGJhc2VkIG9uIG1hcmdpbiBib3guIExldCdzIGNvbnZlcnQgaXQgdG8g
Ym9yZGVyIGJveC4KLSAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnQgPSBzdGQ6Om1heCgwX2x1
LCBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luU3Rh
cnQoKSk7Ci0gICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBtYXJnaW5TdGFydDsKLSAgICAgICAg
ICAgIGluaXRpYWxMb2dpY2FsV2lkdGggLT0gbWFyZ2luU3RhcnQ7Ci0gICAgICAgICAgICBhdXRv
IGlubGluZUJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVJbmxpbmVCb3gobGF5
b3V0Qm94LCBsb2dpY2FsTGVmdCwgaW5pdGlhbExvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICBz
ZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGlubGluZUJveCk7Ci0gICAgICAgICAgICBz
aW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGlubGluZUJveCwgeyB9KTsKLSAg
ICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShpbmxpbmVCb3gpKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChydW4uaXNJbmxp
bmVCb3hFbmQoKSkgewotICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBsb2dpY2FsIHdpZHRoIHdo
ZW4gdGhlIGlubGluZSBib3ggY2xvc2VzIG9uIHRoaXMgbGluZS4KLSAgICAgICAgICAgIGF1dG8m
IGlubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
KTsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVCb3guaXNJbmxpbmVCb3goKSk7Ci0gICAgICAg
ICAgICAvLyBJbmxpbmUgYm94IHJ1biBpcyBiYXNlZCBvbiBtYXJnaW4gYm94LiBMZXQncyBjb252
ZXJ0IGl0IHRvIGJvcmRlciBib3guCi0gICAgICAgICAgICBhdXRvIG1hcmdpbkVuZCA9IHN0ZDo6
bWF4KDBfbHUsIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5t
YXJnaW5FbmQoKSk7Ci0gICAgICAgICAgICBhdXRvIGlubGluZUJveExvZ2ljYWxSaWdodCA9IGxv
Z2ljYWxMZWZ0ICsgcnVuLmxvZ2ljYWxXaWR0aCgpIC0gbWFyZ2luRW5kOwotICAgICAgICAgICAg
aW5saW5lQm94LnNldExvZ2ljYWxXaWR0aChpbmxpbmVCb3hMb2dpY2FsUmlnaHQgLSBpbmxpbmVC
b3gubG9naWNhbExlZnQoKSk7Ci0gICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5
SWZBcHBsaWNhYmxlKGlubGluZUJveCwgeyB9KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygp
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRqdXN0IG5vbi1lbXB0eSBpbmxpbmUgYm94IGhl
aWdodCB3aGVuIGdseXBocyBmcm9tIHRoZSBub24tcHJpbWFyeSBmb250IHN0cmV0Y2ggdGhlIGJv
eC4KLSAgICAgICAgICAgIGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94LnBhcmVudCgpKS5zZXRIYXNDb250ZW50KCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAocnVuLmlzSGFyZExpbmVCcmVhaygpKSB7Ci0gICAgICAgICAg
ICBhdXRvIGxpbmVCcmVha0JveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVMaW5l
QnJlYWtCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBzZXRWZXJ0aWNh
bEdlb21ldHJ5Rm9ySW5saW5lQm94KGxpbmVCcmVha0JveCk7Ci0gICAgICAgICAgICBzaW1wbGlm
aWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGxpbmVCcmVha0JveCwgeyB9KTsKLSAgICAg
ICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShsaW5lQnJlYWtCb3gpKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChydW4uaXNXb3Jk
QnJlYWtPcHBvcnR1bml0eSgpKSB7Ci0gICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVs
Qm94KExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVHZW5lcmljSW5saW5lTGV2ZWxCb3go
bGF5b3V0Qm94LCBsb2dpY2FsTGVmdCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbGluZUJveC5z
ZXRIYXNDb250ZW50KGxpbmVIYXNDb250ZW50KTsKLSAgICBpZiAoc2ltcGxpZmllZFZlcnRpY2Fs
QWxpZ25tZW50LmlzRW5hYmxlZCgpIHx8ICFsaW5lSGFzQ29udGVudCkgewotICAgICAgICAvLyBX
ZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhlIGZhc3QgcGF0aCB3aGVuIHRo
ZSBsaW5lIGhhcyBubyBjb250ZW50IGF0IGFsbCwgZXZlbiBpbiBub24tc3RhbmRhcmRzIG1vZGUg
b3Igd2l0aCBsaW5lLWhlaWdodCBzZXQuCi0gICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNh
bFRvcChsaW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5yb290SW5s
aW5lQm94TG9naWNhbFRvcCgpIDogLXJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAg
IGxpbmVCb3guc2V0TG9naWNhbEhlaWdodChsaW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0
aWNhbEFsaWdubWVudC5saW5lQm94SGVpZ2h0KCkgOiBJbmxpbmVMYXlvdXRVbml0KCkpOwotICAg
IH0gZWxzZQotICAgICAgICBjb21wdXRlTGluZUJveEhlaWdodEFuZEFsaWduSW5saW5lTGV2ZWxC
b3hlc1ZlcnRpY2FsbHkobGluZUJveCk7Ci19Ci0KLXZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbXB1
dGVMaW5lQm94SGVpZ2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94
JiBsaW5lQm94KQotewotICAgIEFTU0VSVChsaW5lQm94Lmhhc0NvbnRlbnQoKSk7Ci0gICAgLy8g
VGhpcyBmdW5jdGlvbiAocGFydGlhbGx5KSBpbXBsZW1lbnRzOgotICAgIC8vIDIuMi4gTGF5b3V0
IFdpdGhpbiBMaW5lIEJveGVzCi0gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxp
bmUtMy8jbGluZS1sYXlvdXQKLSAgICAvLyAxLiBDb21wdXRlIHRoZSBsaW5lIGJveCBoZWlnaHQg
dXNpbmcgdGhlIGxheW91dCBib3VuZHMgZ2VvbWV0cnkuIFRoaXMgaGVpZ2h0IGNvbXB1dGF0aW9u
IHN0cmljdGx5IHVzZXMgbGF5b3V0IGJvdW5kcyBhbmQgbm90IG5vcm1hbCBpbmxpbmUgbGV2ZWwg
Ym94IGdlb21ldHJpZXMuCi0gICAgLy8gMi4gQ29tcHV0ZSB0aGUgYmFzZWxpbmUvbG9naWNhbCB0
b3AgcG9zaXRpb24gb2YgdGhlIHJvb3QgaW5saW5lIGJveC4gQWxpZ25lZCBib3hlcyBwdXNoIHRo
ZSByb290IGlubGluZSBib3ggYXJvdW5kIGluc2lkZSB0aGUgbGluZSBib3guCi0gICAgLy8gMy4g
RmluYWxseSBhbGlnbiB0aGUgaW5saW5lIGxldmVsIGJveGVzIHVzaW5nIChtb3N0bHkpIG5vcm1h
bCBpbmxpbmUgbGV2ZWwgYm94IGdlb21ldHJpZXMuCi0gICAgYXV0byBxdWlya3MgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLnF1aXJrcygpOwotICAgIGF1dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94
LnJvb3RJbmxpbmVCb3goKTsKLQotICAgIGF1dG8gY29tcHV0ZUxpbmVCb3hMb2dpY2FsSGVpZ2h0
ID0gWyZdIHsKLSAgICAgICAgLy8gTGluZSBib3ggaGVpZ2h0IGNvbXB1dGF0aW9uIGlzIGJhc2Vk
IG9uIHRoZSBsYXlvdXQgYm91bmRzIG9mIHRoZSBpbmxpbmUgYm94ZXMgYW5kIG5vdCB0aGVpciBs
b2dpY2FsIChhc2NlbnQvZGVzY2VudCkgZGltZW5zaW9ucy4KLSAgICAgICAgc3RydWN0IEFic29s
dXRlVG9wQW5kQm90dG9tIHsKLSAgICAgICAgICAgIElubGluZUxheW91dFVuaXQgdG9wIHsgMCB9
OwotICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBib3R0b20geyAwIH07Ci0gICAgICAgIH07
Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gqLCBBYnNvbHV0
ZVRvcEFuZEJvdHRvbT4gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcDsKLQot
ICAgICAgICBhdXRvIG1pbmltdW1Mb2dpY2FsVG9wID0gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5p
dD4geyB9OwotICAgICAgICBhdXRvIG1heGltdW1Mb2dpY2FsQm90dG9tID0gT3B0aW9uYWw8SW5s
aW5lTGF5b3V0VW5pdD4geyB9OwotICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94QWZm
ZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGluZUJveCkpIHsKLSAgICAgICAgICAgIG1pbmlt
dW1Mb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgICAgICBtYXhpbXVt
TG9naWNhbEJvdHRvbSA9IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCk7Ci0g
ICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFkZCgmcm9v
dElubGluZUJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyAqbWluaW11bUxvZ2ljYWxUb3AsICpt
YXhpbXVtTG9naWNhbEJvdHRvbSB9KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbmxp
bmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFkZCgmcm9vdElubGluZUJveCwgQWJz
b2x1dGVUb3BBbmRCb3R0b20geyB9KTsKLQotICAgICAgICBWZWN0b3I8TGluZUJveDo6SW5saW5l
TGV2ZWxCb3gqPiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVzOwotICAgICAgICBmb3Ig
KGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRC
b3goKTsKLSAgICAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5oYXNMaW5lQm94UmVsYXRpdmVB
bGlnbm1lbnQoKSkgewotICAgICAgICAgICAgICAgIGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVs
Qm94ZXMuYXBwZW5kKCZpbmxpbmVMZXZlbEJveCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5l
Qm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAg
ICAgICAgICAvLyBMb2dpY2FsIHRvcCBpcyByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBi
b3gncyBsYXlvdXQgYm91bmRzLgotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbG9naWNh
bCB0b3AgaXMgbm90IHRoZSBmaW5hbCBsb2dpY2FsIHRvcCBvZiB0aGUgaW5saW5lIGxldmVsIGJv
eC4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvZ2ljYWwgdG9wIGluIHRoZSBjb250ZXh0
IG9mIHRoZSBsYXlvdXQgYm91bmRzIGdlb21ldHJ5IHdoaWNoIG1heSBiZSB2ZXJ5IGRpZmZlcmVu
dCBmcm9tIHRoZSBpbmxpbmUgYm94J3Mgbm9ybWFsIGdlb21ldHJ5LgotICAgICAgICAgICAgYXV0
byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgICAgICBzd2l0Y2gg
KGlubGluZUxldmVsQm94LnZlcnRpY2FsQWxpZ24oKSkgewotICAgICAgICAgICAgY2FzZSBWZXJ0
aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFz
Y2VudDsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxheW91
dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZl
cnRpY2FsQWxpZ246Ok1pZGRsZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhl
aWdodCgpIC8gMiArIHBhcmVudElubGluZUJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdo
dCgpIC8gMjsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7Ci0gICAgICAgICAgICAgICAgYXV0byBs
b2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAg
YXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOwotICAgICAgICAgICAgICAgIGF1
dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGZsb2F0VmFsdWVGb3JMZW5n
dGgoc3R5bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQo
KSkgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBs
b2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9w
OiB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRleHQtdG9wIGFsaWducyB3aXRoIHRo
ZSBpbmxpbmUgYm94J3MgZm9udCBtZXRyaWNzIHRvcCAoYXNjZW50KSBhbmQgbm90IHRoZSBsYXlv
dXQgYm91bmRzIHRvcC4KLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5l
Qm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBW
ZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOiB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHRleHQtYm90dG9tIGFsaWducyB3aXRoIHRoZSBpbmxpbmUgYm94J3MgZm9udCBtZXRyaWNzIGJv
dHRvbSAoZGVzY2VudCkgYW5kIG5vdCB0aGUgbGF5b3V0IGJvdW5kcyBib3R0b20uCi0gICAgICAg
ICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3VuZHMgPSBwYXJlbnRJbmxpbmVC
b3gubGF5b3V0Qm91bmRzKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hM
b2dpY2FsQm90dG9tID0gcGFyZW50SW5saW5lQm94TGF5b3V0Qm91bmRzLmhlaWdodCgpIC0gcGFy
ZW50SW5saW5lQm94TGF5b3V0Qm91bmRzLmRlc2NlbnQgKyBwYXJlbnRJbmxpbmVCb3guZGVzY2Vu
dCgpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICAgICAgICAgICAgICBsb2dpY2Fs
VG9wID0gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSAtIGlubGluZUxldmVsQm94LmxheW91
dEJvdW5kcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExF
TUVOVEVEX1lFVCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbSA9IGlubGlu
ZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuZ2V0KCZwYXJlbnRJbmxpbmVCb3gpOwot
ICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3hBYnNv
bHV0ZVRvcEFuZEJvdHRvbS50b3AgKyBsb2dpY2FsVG9wOwotICAgICAgICAgICAgYXV0byBhYnNv
bHV0ZUxvZ2ljYWxCb3R0b20gPSBhYnNvbHV0ZUxvZ2ljYWxUb3AgKyBpbmxpbmVMZXZlbEJveC5s
YXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1
dGVUb3BBbmRCb3R0b21NYXAuYWRkKCZpbmxpbmVMZXZlbEJveCwgQWJzb2x1dGVUb3BBbmRCb3R0
b20geyBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGFic29sdXRlTG9naWNhbEJvdHRvbSB9KTsKLSAgICAg
ICAgICAgIC8vIFN0cmV0Y2ggdGhlIG1pbi9tYXggYWJzb2x1dGUgdmFsdWVzIGlmIGFwcGxpY2Fi
bGUuCi0gICAgICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3go
aW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKSB7Ci0gICAgICAgICAgICAgICAgbWluaW11bUxvZ2lj
YWxUb3AgPSBzdGQ6Om1pbihtaW5pbXVtTG9naWNhbFRvcC52YWx1ZU9yKGFic29sdXRlTG9naWNh
bFRvcCksIGFic29sdXRlTG9naWNhbFRvcCk7Ci0gICAgICAgICAgICAgICAgbWF4aW11bUxvZ2lj
YWxCb3R0b20gPSBzdGQ6Om1heChtYXhpbXVtTG9naWNhbEJvdHRvbS52YWx1ZU9yKGFic29sdXRl
TG9naWNhbEJvdHRvbSksIGFic29sdXRlTG9naWNhbEJvdHRvbSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gVGhlIGxpbmUgYm94IGhlaWdodCBjb21wdXRhdGlvbiBpcyBh
cyBmb2xsb3dzOgotICAgICAgICAvLyAxLiBTdHJldGNoIHRoZSBsaW5lIGJveCB3aXRoIHRoZSBu
b24tbGluZS1ib3ggcmVsYXRpdmUgYWxpZ25lZCBpbmxpbmUgYm94IGFic29sdXRlIHRvcCBhbmQg
Ym90dG9tIHZhbHVlcy4KLSAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhlIGxpbmUgYm94IHJlbGF0
aXZlIGFsaWduZWQgaW5saW5lIGJveGVzICh0b3AsIGJvdHRvbSBldGMpIGhhdmUgZW5vdWdoIHJv
b20gYW5kIHN0cmV0Y2ggdGhlIGxpbmUgYm94IGZ1cnRoZXIgaWYgbmVlZGVkLgotICAgICAgICBh
dXRvIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gbWF4aW11bUxvZ2ljYWxCb3R0b20udmFsdWVPcihJ
bmxpbmVMYXlvdXRVbml0KCkpIC0gbWluaW11bUxvZ2ljYWxUb3AudmFsdWVPcihJbmxpbmVMYXlv
dXRVbml0KCkpOwotICAgICAgICBmb3IgKGF1dG8qIGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVs
Qm94IDogbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlcykgewotICAgICAgICAgICAgaWYg
KCFxdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveCgqbGluZUJveFJlbGF0aXZlSW5s
aW5lTGV2ZWxCb3gsIGxpbmVCb3gpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgbGluZUJveExvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1heChsaW5lQm94TG9naWNhbEhlaWdo
dCwgbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gtPmxheW91dEJvdW5kcygpLmhlaWdodCgp
KTsKLSAgICAgICAgfQotICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQobGluZUJveExv
Z2ljYWxIZWlnaHQpOwotICAgIH07Ci0gICAgY29tcHV0ZUxpbmVCb3hMb2dpY2FsSGVpZ2h0KCk7
Ci0KLSAgICBhdXRvIGNvbXB1dGVSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbiA9IFsmXSB7
Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gqLCBJbmxpbmVM
YXlvdXRVbml0PiBpbmxpbmVMZXZlbEJveEFic29sdXRlQmFzZWxpbmVPZmZzZXRNYXA7Ci0gICAg
ICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1hcC5hZGQoJnJvb3RJbmxp
bmVCb3gsIElubGluZUxheW91dFVuaXQgeyB9KTsKLQotICAgICAgICBhdXRvIG1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5p
dD4geyB9OwotICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3go
cm9vdElubGluZUJveCwgbGluZUJveCkpCi0gICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJv
bVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNj
ZW50OwotCi0gICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5vblJv
b3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKLSAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVCYXNlbGlu
ZU9mZnNldCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgaWYgKCFpbmxpbmVM
ZXZlbEJveC5oYXNMaW5lQm94UmVsYXRpdmVBbGlnbm1lbnQoKSkgewotICAgICAgICAgICAgICAg
IGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJveCgpOwotICAgICAgICAg
ICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKLSAgICAgICAgICAgICAgICBhdXRvIGJhc2Vs
aW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0KLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRpY2FsQWxpZ24oKSkgewot
ICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6Ci0gICAgICAgICAg
ICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0geyB9OwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
Ok1pZGRsZTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgPSAoaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkg
LyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAy
KTsKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUg
PSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lIC0gaW5saW5lTGV2ZWxCb3gubGF5
b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZU1p
ZGRsZTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFy
ZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDI7
Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0g
bG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmxheW91
dEJvdW5kcygpLmFzY2VudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2ZWxCb3guc3R5bGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zmc2V0ID0gZmxvYXRWYWx1
ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0eWxlLmNvbXB1dGVkTGlu
ZUhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJv
bVBhcmVudEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNldCArIGlubGluZUxldmVsQm94LmJh
c2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVs
Qm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRUb3A6Ci0gICAg
ICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gcGFyZW50
SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2Nl
bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VGV4dEJvdHRvbToKLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZz
ZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5kZXNj
ZW50IC0gKnBhcmVudElubGluZUJveC5kZXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0ID0g
aW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwLmdldCgmcGFyZW50SW5saW5l
Qm94KSArIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRpY2FsQWxp
Z24oKSkgewotICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSByb290SW5saW5lQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2Vu
dDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMo
KS5kZXNjZW50IC0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50OwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQo
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0
TWFwLmFkZCgmaW5saW5lTGV2ZWxCb3gsIGFic29sdXRlQmFzZWxpbmVPZmZzZXQpOwotICAgICAg
ICAgICAgYXV0byBhZmZlY3RzUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBxdWlya3Mu
aW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChpbmxpbmVMZXZlbEJveCwgbGluZUJveCk7Ci0g
ICAgICAgICAgICBpZiAoYWZmZWN0c1Jvb3RJbmxpbmVCb3hWZXJ0aWNhbFBvc2l0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byB0b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0g
YWJzb2x1dGVCYXNlbGluZU9mZnNldCArIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFz
Y2VudDsKLSAgICAgICAgICAgICAgICBpZiAobWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5l
Qm94QmFzZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIG1heGltdW1Ub3BPZmZzZXRGcm9tUm9v
dElubGluZUJveEJhc2VsaW5lID0gc3RkOjptYXgoKm1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElu
bGluZUJveEJhc2VsaW5lLCB0b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGlzIHF1
aXJrIG1vZGUgYW5kIHRoZSByb290IGlubGluZSBib3ggaGFzIG5vIGNvbnRlbnQuIFRoZSByb290
IGlubGluZSBib3gncyBiYXNlbGluZSBpcyBhbmNob3JlZCBhdCAwLgotICAgICAgICAgICAgICAg
ICAgICAvLyBIb3dldmVyIG5lZ2F0aXZlIGFzY2VudCAoZS5nIG5lZ2F0aXZlIHRvcCBtYXJnaW4p
IGNhbiAicHVzaCIgdGhlIHJvb3QgaW5saW5lIGJveCB1cHdhcmRzIGFuZCBoYXZlIGEgbmVnYXRp
dmUgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElu
bGluZUJveEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50ID49
IDAKLSAgICAgICAgICAgICAgICAgICAgICAgID8gc3RkOjptYXgoMC4wZiwgdG9wT2Zmc2V0RnJv
bVJvb3RJbmxpbmVCb3hCYXNlbGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogdG9wT2Zm
c2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byByb290SW5saW5lQm94TG9naWNhbFRvcCA9
IG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lLnZhbHVlT3IoMC5mKSAt
IHJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgcm9vdElubGluZUJveC5zZXRMb2dp
Y2FsVG9wKHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wKTsKLSAgICB9OwotICAgIGNvbXB1dGVSb290
SW5saW5lQm94VmVydGljYWxQb3NpdGlvbigpOwotCi0gICAgYXV0byBhbGlnbklubGluZUxldmVs
Qm94ZXMgPSBbJl0gewotICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJv
eC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7Ci0gICAgICAgICAgICBhdXRvJiBsYXlvdXRC
b3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgICAgIGF1dG8mIHBhcmVu
dElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
LnBhcmVudCgpKTsKLSAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVu
aXQgeyB9OwotICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWdu
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6Ci0gICAgICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gaW5saW5l
TGV2ZWxCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dp
Y2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gKGlubGluZUxldmVsQm94LmxvZ2ljYWxI
ZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVCb3guc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWln
aHQoKSAvIDIpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gu
YmFzZWxpbmUoKSAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2Fs
QWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9w
T2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubG9naWNhbEhlaWdodCgp
IC8gMjsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2Vs
aW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWdu
OjpMZW5ndGg6IHsKLSAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94
LnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zmc2V0ID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0eWxlLmNvbXB1
dGVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSB2ZXJ0aWNhbEFsaWduT2Zmc2V0ICsgaW5saW5lTGV2ZWxCb3gu
YmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94
LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gTm90ZSB0aGF0
ICh0ZXh0KXRvcC9ib3R0b20gYWxpZ24gdGhlaXIgbGF5b3V0IGJvdW5kcy4KLSAgICAgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDoKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9w
ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2ZWxCb3gu
YmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VGV4dEJvdHRvbToKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFy
ZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5k
cygpLmRlc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbG9naWNhbCB0b3AgaXMgbm90IHJlbGF0aXZlIHRvIHRo
ZSBwYXJlbnQgaW5saW5lIGJveC4KLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6Qm90dG9tOgotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwgdG9w
IGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3guCi0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IGxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsVG9wKGxv
Z2ljYWxUb3ApOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBhbGlnbklubGluZUxldmVsQm94ZXMo
KTsKLX0KLQotTGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6U2lt
cGxpZmllZFZlcnRpY2FsQWxpZ25tZW50KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBy
b290SW5saW5lQm94KQotICAgIDogbV9yb290SW5saW5lQm94KHJvb3RJbmxpbmVCb3gpCi17Ci0g
ICAgYWRqdXN0KHJvb3RJbmxpbmVCb3gpOwotfQotCi1ib29sIExpbmVCb3hCdWlsZGVyOjpTaW1w
bGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoY29uc3Qg
TGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNvbnN0IExpbmVCb3g6Oklu
bGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+
IGlubGluZUxldmVsQm94R2VvbWV0cnkpCi17Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzQXRv
bWljSW5saW5lTGV2ZWxCb3goKSkgewotICAgICAgICBBU1NFUlQoaW5saW5lTGV2ZWxCb3hHZW9t
ZXRyeSk7Ci0gICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1zdHJldGNoeSBkaXJlY3Qg
Y2hpbGRyZW4gYXJlIGNvbnNpZGVyZWQgdG8gYmUgc2ltcGxlIGZvciBub3cuCi0gICAgICAgIGF1
dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJveCgpOwotICAgICAgICByZXR1
cm4gJmxheW91dEJveC5wYXJlbnQoKSA9PSAmcm9vdElubGluZUJveC5sYXlvdXRCb3goKQotICAg
ICAgICAgICAgJiYgbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpID09IFZlcnRpY2Fs
QWxpZ246OkJhc2VsaW5lCi0gICAgICAgICAgICAmJiAhaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+
bWFyZ2luQmVmb3JlKCkKLSAgICAgICAgICAgICYmICFpbmxpbmVMZXZlbEJveEdlb21ldHJ5LT5t
YXJnaW5BZnRlcigpCi0gICAgICAgICAgICAmJiBpbmxpbmVMZXZlbEJveEdlb21ldHJ5LT5tYXJn
aW5Cb3hIZWlnaHQoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgfQotICAgIGlm
IChpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpKSB7Ci0gICAgICAgIC8vIEJhc2VsaW5l
IGFsaWduZWQsIG5vbi1zdHJldGNoeSBsaW5lIGJyZWFrcyBlLmcuIDxkaXY+PHNwYW4+PGJyPjwv
c3Bhbj48L2Rpdj4gYnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4OyI+
PGJyPjwvc3Bhbj48L2Rpdj4uCi0gICAgICAgIHJldHVybiBpbmxpbmVMZXZlbEJveC5sYXlvdXRC
b3goKS5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSAm
JiBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpIDw9IHJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsK
LSAgICB9Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94KCkpIHsKLSAgICAgICAg
Ly8gQmFzZWxpbmUgYWxpZ25lZCwgbm9uLXN0cmV0Y2h5IGlubGluZSBib3hlcyBlLmcuIDxkaXY+
PHNwYW4+PC9zcGFuPjwvZGl2PiBidXQgbm90IDxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTog
MTAwcHg7Ij48L3NwYW4+PC9kaXY+LgotICAgICAgICByZXR1cm4gaW5saW5lTGV2ZWxCb3gubGF5
b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxp
bmUgJiYgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkgPT0gcm9vdElubGluZUJveC5sYXlv
dXRCb3VuZHMoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIExpbmVCb3hC
dWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmFsaWduKExpbmVCb3g6OklubGlu
ZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCkKLXsKLSAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNB
dG9taWNJbmxpbmVMZXZlbEJveCgpIHx8IGlubGluZUxldmVsQm94LmlzTGluZUJyZWFrQm94KCkg
fHwgaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkgewotICAgICAgICAvLyBPbmx5IGJhc2Vs
aW5lIGFsaWdubWVudCBmb3Igbm93LgotICAgICAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2Fs
VG9wKG1fcm9vdElubGluZUJveC5iYXNlbGluZSgpIC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUo
KSk7Ci0gICAgICAgIGFkanVzdChpbmxpbmVMZXZlbEJveCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLX0KLQotdm9pZCBMaW5lQm94
QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OjphZGp1c3QoY29uc3QgTGluZUJv
eDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KQotewotICAgIGF1dG8gbGF5b3V0Qm91
bmRzTG9naWNhbFRvcCA9IG1fcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgbV9saW5lQm94TG9naWNh
bFRvcCA9IHN0ZDo6bWluKG1fbGluZUJveExvZ2ljYWxUb3AsIGxheW91dEJvdW5kc0xvZ2ljYWxU
b3ApOwotICAgIG1fbGluZUJveExvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChtX2xpbmVCb3hMb2dp
Y2FsQm90dG9tLCBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wICsgaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm91bmRzKCkuaGVpZ2h0KCkpOwotICAgIG1fcm9vdElubGluZUJveExvZ2ljYWxUb3AgPSBzdGQ6
Om1heChtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wLCBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBtX3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSk7Ci19Ci0KLUxpbmVCb3gg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpsaW5lQm94Rm9yTGluZUNvbnRlbnQo
Y29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKLXsKLSAgICByZXR1
cm4gTGluZUJveEJ1aWxkZXIoZm9ybWF0dGluZ0NvbnRleHQoKSkuYnVpbGQobGluZUNvbnRlbnQp
OwotfQotCi1JbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6bG9naWNhbFRvcEZvck5leHRMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYg
bGluZUNvbnRlbnQsIElubGluZUxheW91dFVuaXQgcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbSwg
Y29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8g
Tm9ybWFsbHkgdGhlIG5leHQgbGluZSdzIGxvZ2ljYWwgdG9wIGlzIHRoZSBwcmV2aW91cyBsaW5l
J3MgbG9naWNhbCBib3R0b20sIGJ1dCB3aGVuIHRoZSBsaW5lIGVuZHMKLSAgICAvLyB3aXRoIHRo
ZSBjbGVhciBwcm9wZXJ0eSBzZXQsIHRoZSBuZXh0IGxpbmUgbmVlZHMgdG8gY2xlYXIgdGhlIGV4
aXN0aW5nIGZsb2F0cy4KLSAgICBpZiAobGluZUNvbnRlbnQucnVucy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tOwotICAgIGF1dG8mIGxhc3RSdW5M
YXlvdXRCb3ggPSBsaW5lQ29udGVudC5ydW5zLmxhc3QoKS5sYXlvdXRCb3goKTsgCi0gICAgaWYg
KGxhc3RSdW5MYXlvdXRCb3guc3R5bGUoKS5jbGVhcigpID09IENsZWFyOjpOb25lKQotICAgICAg
ICByZXR1cm4gcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbTsKLSAgICBhdXRvIHBvc2l0aW9uV2l0
aENsZWFyYW5jZSA9IGZsb2F0aW5nQ29udGV4dC52ZXJ0aWNhbFBvc2l0aW9uV2l0aENsZWFyYW5j
ZShsYXN0UnVuTGF5b3V0Qm94KTsKLSAgICBpZiAoIXBvc2l0aW9uV2l0aENsZWFyYW5jZSkKLSAg
ICAgICAgcmV0dXJuIHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b207Ci0gICAgcmV0dXJuIHN0ZDo6
bWF4KHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b20sIElubGluZUxheW91dFVuaXQocG9zaXRpb25X
aXRoQ2xlYXJhbmNlLT5wb3NpdGlvbikpOwotfQotCi1Db250ZW50V2lkdGhBbmRNYXJnaW4gSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFu
ZE1hcmdpbihjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKLXsKLSAgICBBU1NFUlQo
Zm9ybWF0dGluZ0NvbnRleHRSb290LmlzSW5GbG93KCkpOwotCi0gICAgLy8gMTAuMy4xMCAnSW5s
aW5lLWJsb2NrJywgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cKLQotICAgIC8vIEV4
YWN0bHkgYXMgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgotICAgIGlmIChmb3JtYXR0aW5nQ29u
dGV4dFJvb3QuaXNSZXBsYWNlZEJveCgpKQotICAgICAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGZvcm1hdHRpbmdDb250
ZXh0Um9vdCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyk7Ci0KLSAgICAvLyAxMC4zLjkgJ0lubGluZS1ibG9jaycsIG5vbi1yZXBsYWNlZCBl
bGVtZW50cyBpbiBub3JtYWwgZmxvdwotCi0gICAgLy8gSWYgJ3dpZHRoJyBpcyAnYXV0bycsIHRo
ZSB1c2VkIHZhbHVlIGlzIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGFzIGZvciBmbG9hdGluZyBl
bGVtZW50cy4KLSAgICAvLyBBIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJyBmb3IgJ21hcmdpbi1s
ZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBiZWNvbWVzIGEgdXNlZCB2YWx1ZSBvZiAnMCcuCi0gICAg
Ly8gIzEKLSAgICBhdXRvIHdpZHRoID0gY29tcHV0ZWRWYWx1ZShmb3JtYXR0aW5nQ29udGV4dFJv
b3Quc3R5bGUoKS5sb2dpY2FsV2lkdGgoKSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRo
KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0
aCk7Ci0KLSAgICAvLyAjMgotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2Vv
bWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGhv
cml6b250YWxDb25zdHJhaW50cyk7Ci0KLSAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2lu
IHsgKndpZHRoLCB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDBfbHUp
LCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMF9sdSkgfSB9OwotfQotCi1D
b250ZW50SGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
aW5saW5lQmxvY2tDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
T3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKLQotICAgIC8vIDEwLjYuMiBJ
bmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGlu
IG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwg
ZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFjZWQgZWxlbWVudHMKLSAgICBpZiAobGF5b3V0Qm94Lmlz
UmVwbGFjZWRCb3goKSkKLSAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudEhlaWdo
dEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci0KLSAgICAvLyAxMC42
LjYgQ29tcGxpY2F0ZWQgY2FzZXMKLSAgICAvLyAtICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFj
ZWQgZWxlbWVudHMuCi0gICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci19Ci0KLX0KLX0K
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xODdkZmY0YmQ4MjdjMGIzZmUxZjFkMmJjZDQ4YTliODgxNGIx
ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMCwwICsxLDcz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVG
b3JtYXR0aW5nR2VvbWV0cnkuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05U
RVhUKQorCisjaW5jbHVkZSAiRmxvYXRpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRm9ybWF0dGlu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbmxpbmVMaW5lQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0
Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0
UmVwbGFjZWRCb3guaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIExpbmVCb3hCdWlsZGVyIHsK
K3B1YmxpYzoKKyAgICBMaW5lQm94QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYpOworICAgIExpbmVCb3ggYnVpbGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50Jik7
CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCB7Cisg
ICAgICAgIFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveCYgcm9vdElubGluZUJveCk7CisKKyAgICAgICAgc3RhdGljIGJvb2wgY2FuVXNlU2lt
cGxpZmllZEFsaWdubWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGlu
ZUJveCwgY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmLCBPcHRpb25hbDxjb25zdCBCb3hH
ZW9tZXRyeT4gaW5saW5lTGV2ZWxCb3hHZW9tZXRyeSk7CisKKyAgICAgICAgdm9pZCBhbGlnbihM
aW5lQm94OjpJbmxpbmVMZXZlbEJveCYpOworCisgICAgICAgIElubGluZUxheW91dFVuaXQgcm9v
dElubGluZUJveExvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3hMb2dp
Y2FsVG9wOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbGluZUJveEhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUJveExvZ2ljYWxCb3R0b20gLSBtX2xpbmVCb3hMb2dpY2FsVG9wOyB9
CisKKyAgICAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9
IGVuYWJsZWQ7IH0KKyAgICAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
RW5hYmxlZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBhZGp1c3QoY29uc3QgTGlu
ZUJveDo6SW5saW5lTGV2ZWxCb3gmKTsKKworICAgICAgICBjb25zdCBMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveCYgbV9yb290SW5saW5lQm94OworICAgICAgICBib29sIG1faXNFbmFibGVkIHsgdHJ1
ZSB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbGluZUJveExvZ2ljYWxUb3AgeyAwIH07
CisgICAgICAgIElubGluZUxheW91dFVuaXQgbV9saW5lQm94TG9naWNhbEJvdHRvbSB7IDAgfTsK
KyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wIHsgMCB9
OworICAgIH07CisKKyAgICB2b2lkIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goTGlu
ZUJveDo6SW5saW5lTGV2ZWxCb3gmKSBjb25zdDsKKyAgICB2b2lkIGNvbnN0cnVjdEFuZEFsaWdu
SW5saW5lTGV2ZWxCb3hlcyhMaW5lQm94JiwgY29uc3QgTGluZTo6UnVuTGlzdCYpOworICAgIHZv
aWQgY29tcHV0ZUxpbmVCb3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5
KExpbmVCb3gmKTsKKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0
aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0K
KyAgICBjb25zdCBCb3gmIHJvb3RCb3goKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4
dCgpLnJvb3QoKTsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQorCisgICAgYm9vbCBpc1Jv
b3RMYXlvdXRCb3goY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gpIGNvbnN0IHsgcmV0
dXJuICZjb250YWluZXJCb3ggPT0gJnJvb3RCb3goKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0
IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworfTsK
Kworc3RydWN0IEhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50IHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHJlc2V0KCk7CisKKyAgICBJbmxpbmVMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aDsgfQorICAgIGJvb2wgaXNDb25kaXRpb25hbCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb25kaXRpb25hbDsgfQorCisgICAgdm9pZCBzZXRJc0NvbmRpdGlvbmFsKCkgeyBtX2lz
Q29uZGl0aW9uYWwgPSB0cnVlOyB9CisgICAgdm9pZCBleHBhbmQoSW5saW5lTGF5b3V0VW5pdCB3
aWR0aCkgeyBtX3dpZHRoICs9IHdpZHRoOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzQ29u
ZGl0aW9uYWwgeyBmYWxzZSB9OworICAgIElubGluZUxheW91dFVuaXQgbV93aWR0aCB7IDAgfTsK
K307CisKK3ZvaWQgSGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRlbnQ6OnJlc2V0KCkKK3sK
KyAgICBtX2lzQ29uZGl0aW9uYWwgPSBmYWxzZTsKKyAgICBtX3dpZHRoID0gIDA7Cit9CisKK3N0
YXRpYyBIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudCBjb2xsZWN0SGFuZ2luZ1RyYWls
aW5nV2hpdGVzcGFjZUNvbnRlbnQoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgYm9vbCBpc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQpCit7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhh
bmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50IHsgfTsKKyAgICBpZiAoaXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50KQorICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFs
KCk7CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKHJ1bnMpKSB7
CisgICAgICAgIGlmIChydW4uaXNJbmxpbmVCb3hTdGFydCgpIHx8IHJ1bi5pc0lubGluZUJveEVu
ZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWso
KSkgeworICAgICAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxp
bmdXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gQ2hlY2sgaWYg
d2UgaGF2ZSBhIHByZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCisgICAgICAgIGlmIChydW4u
c3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25h
bGx5IGhhbmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaGFuZ2luZ0NvbnRlbnQu
ZXhwYW5kKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IGhhbmdpbmdDb250ZW50OworfQorCitzdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4g
aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldChjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBUZXh0
QWxpZ25Nb2RlIHRleHRBbGlnbiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRoLCBJ
bmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGJvb2wgaXNMYXN0TGluZSkKK3sK
KyAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZUxvZ2ljYWxXaWR0aCAtIGNvbnRlbnRMb2dp
Y2FsV2lkdGg7CisgICAgYXV0byBoYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudCA9IGNv
bGxlY3RIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudChydW5zLCBpc0xhc3RMaW5lKTsK
KyAgICBhdmFpbGFibGVXaWR0aCArPSBoYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudC53
aWR0aCgpOworICAgIGlmIChhdmFpbGFibGVXaWR0aCA8PSAwKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0geworICAgICAg
ICBpZiAodGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICBy
ZXR1cm4gdGV4dEFsaWduOworICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcg
dG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKKyAg
ICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90
aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAorICAgICAgICAvLyB0aGUgbGFz
dCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBz
dGFydC1hbGlnbmVkLgorICAgICAgICBpZiAoaXNMYXN0TGluZSB8fCAoIXJ1bnMuaXNFbXB0eSgp
ICYmIHJ1bnMubGFzdCgpLmlzTGluZUJyZWFrKCkpKQorICAgICAgICAgICAgcmV0dXJuIFRleHRB
bGlnbk1vZGU6OlN0YXJ0OworICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsK
KyAgICB9OworCisgICAgc3dpdGNoIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSkgewor
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Oldl
YktpdExlZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6V2ViS2l0UmlnaHQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAg
IHJldHVybiBhdmFpbGFibGVXaWR0aDsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoK
KyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKKyAgICAgICAgcmV0dXJuIGF2
YWlsYWJsZVdpZHRoIC8gMjsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAg
ICAgIC8vIFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgaXMgYSBydW4gYWxpZ25tZW50IChhbmQgd2Ug
b25seSBkbyBpbmxpbmUgYm94IGFsaWdubWVudCBoZXJlKQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiB7IH07Cit9CisKK0xpbmVCb3hCdWlsZGVyOjpMaW5lQm94QnVpbGRlcihjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBtX2lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQoreworfQorCitM
aW5lQm94IExpbmVCb3hCdWlsZGVyOjpidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRl
bnQmIGxpbmVDb250ZW50KQoreworICAgIGF1dG8mIHJ1bnMgPSBsaW5lQ29udGVudC5ydW5zOwor
ICAgIGF1dG8gbGluZUxvZ2ljYWxXaWR0aCA9IGxpbmVDb250ZW50LmxpbmVMb2dpY2FsV2lkdGg7
CisgICAgYXV0byBjb250ZW50TG9naWNhbFdpZHRoID0gbGluZUNvbnRlbnQuY29udGVudExvZ2lj
YWxXaWR0aDsKKyAgICBhdXRvIGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlvdXQ6Omhv
cml6b250YWxBbGlnbm1lbnRPZmZzZXQocnVucywgcm9vdEJveCgpLnN0eWxlKCkudGV4dEFsaWdu
KCksIGxpbmVMb2dpY2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250ZW50Lmlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7
IHJvb3RCb3goKSwgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVMb2dpY2FsV2lkdGgs
IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSks
IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250ZW50Lm5vblNwYW5uaW5nSW5saW5lTGV2ZWxC
b3hDb3VudCB9OworICAgIGNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94
LCBydW5zKTsKKyAgICByZXR1cm4gbGluZUJveDsKK30KKwordm9pZCBMaW5lQm94QnVpbGRlcjo6
c2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYg
aW5saW5lTGV2ZWxCb3gpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlubGluZUxldmVsQm94LmlzSW5s
aW5lQm94KCkgfHwgaW5saW5lTGV2ZWxCb3guaXNMaW5lQnJlYWtCb3goKSk7CisgICAgYXV0byYg
Zm9udE1ldHJpY3MgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAg
SW5saW5lTGF5b3V0VW5pdCBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAgICBJbmxp
bmVMYXlvdXRVbml0IGRlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7CisgICAgYXV0byBs
b2dpY2FsSGVpZ2h0ID0gYXNjZW50ICsgZGVzY2VudDsKKyAgICAvLyBXZSBuZWVkIGZsb29yL2Nl
aWwgdG8gbWF0Y2ggbGVnYWN5IGxheW91dCBpbnRlZ3JhbCBwb3NpdGlvbmluZy4KKyAgICBpbmxp
bmVMZXZlbEJveC5zZXRCYXNlbGluZShmbG9vcmYoYXNjZW50KSk7CisgICAgaW5saW5lTGV2ZWxC
b3guc2V0RGVzY2VudChjZWlsKGRlc2NlbnQpKTsKKyAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dp
Y2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOworCisgICAgLy8gRklYTUU6IEFkanVzdCBsYXlvdXQg
Ym91bmRzIHdpdGggZmFsbGJhY2sgZm9udCB3aGVuIGFwcGxpY2FibGUuCisgICAgYXV0byYgc3R5
bGUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKS5zdHlsZSgpOworICAgIGF1dG8gbGluZUhl
aWdodCA9IHN0eWxlLmxpbmVIZWlnaHQoKTsKKyAgICBpZiAobGluZUhlaWdodC5pc05lZ2F0aXZl
KCkpIHsKKyAgICAgICAgLy8gSWYgbGluZS1oZWlnaHQgY29tcHV0ZXMgdG8gbm9ybWFsIGFuZCBl
aXRoZXIgdGV4dC1lZGdlIGlzIGxlYWRpbmcgb3IgdGhpcyBpcyB0aGUgcm9vdCBpbmxpbmUgYm94
LAorICAgICAgICAvLyB0aGUgZm9udOKAmXMgbGluZSBnYXAgbWV0cmljIG1heSBhbHNvIGJlIGlu
Y29ycG9yYXRlZCBpbnRvIEEgYW5kIEQgYnkgYWRkaW5nIGhhbGYgdG8gZWFjaCBzaWRlIGFzIGhh
bGYtbGVhZGluZy4KKyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUt
My8jaW5saW5lLWhlaWdodAorICAgICAgICAvLyBTaW5jZSB0ZXh0LWVkZ2UgaXMgbm90IHN1cHBv
cnRlZCB5ZXQgYW5kIHRoZSBpbml0aWFsIHZhbHVlIGlzIGxlYWRpbmcsIHdlIHNob3VsZCBqdXN0
IGFwcGx5IGl0IHRvCisgICAgICAgIC8vIGFsbCBpbmxpbmUgYm94ZXMuCisgICAgICAgIGF1dG8g
aGFsZkxpbmVHYXAgPSAoZm9udE1ldHJpY3MubGluZVNwYWNpbmcoKSAtIGxvZ2ljYWxIZWlnaHQp
IC8gMjsKKyAgICAgICAgYXNjZW50ICs9IGhhbGZMaW5lR2FwOworICAgICAgICBkZXNjZW50ICs9
IGhhbGZMaW5lR2FwOworICAgIH0gZWxzZSB7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbGlu
ZUhlaWdodCA9IHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpOworICAgICAgICBJbmxpbmVMYXlv
dXRVbml0IGhhbGZMZWFkaW5nID0gKGxpbmVIZWlnaHQgLSAoYXNjZW50ICsgZGVzY2VudCkpIC8g
MjsKKyAgICAgICAgYXNjZW50ICs9IGhhbGZMZWFkaW5nOworICAgICAgICBkZXNjZW50ICs9IGhh
bGZMZWFkaW5nOworICAgIH0KKyAgICAvLyBXZSBuZWVkIGZsb29yL2NlaWwgdG8gbWF0Y2ggbGVn
YWN5IGxheW91dCBpbnRlZ3JhbCBwb3NpdGlvbmluZy4KKyAgICBpbmxpbmVMZXZlbEJveC5zZXRM
YXlvdXRCb3VuZHMoTGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGZsb29y
Zihhc2NlbnQpLCBjZWlsKGRlc2NlbnQpIH0pOworfQorCit2b2lkIExpbmVCb3hCdWlsZGVyOjpj
b25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3Qg
TGluZTo6UnVuTGlzdCYgcnVucykKK3sKKyAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJv
eC5yb290SW5saW5lQm94KCk7CisgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChy
b290SW5saW5lQm94KTsKKworICAgIGF1dG8gc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50ID0g
U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50IHsgcm9vdElubGluZUJveCB9OworICAgIC8vIEZJ
WE1FOiBBZGQgZmFzdCBwYXRoIHN1cHBvcnQgZm9yIGxpbmUtaGVpZ2h0IGNvbnRlbnQuCisgICAg
c2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LnNldEVuYWJsZWQobGF5b3V0U3RhdGUoKS5pblN0
YW5kYXJkc01vZGUoKSAmJiByb290Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2
ZSgpKTsKKworICAgIGF1dG8gc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZSA9
IFsmXShhdXRvJiBpbmxpbmVMZXZlbEJveCwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGJv
eEdlb21ldHJ5KSB7CisgICAgICAgIGlmICghc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50Lmlz
RW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIVNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudDo6Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChyb290SW5saW5lQm94
LCBpbmxpbmVMZXZlbEJveCwgYm94R2VvbWV0cnkpKSB7CisgICAgICAgICAgICBzaW1wbGlmaWVk
VmVydGljYWxBbGlnbm1lbnQuc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LmFsaWduKGlu
bGluZUxldmVsQm94KTsKKyAgICB9OworCisgICAgYXV0byBjcmVhdGVXcmFwcGVkSW5saW5lQm94
ZXMgPSBbJl0geworICAgICAgICBpZiAocnVucy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIC8vIEFuIGlubGluZSBib3ggbWF5IG5vdCBuZWNlc3NhcmlseSBzdGFydCBv
biB0aGUgY3VycmVudCBsaW5lOgorICAgICAgICAvLyA8c3BhbiBpZD1vdXRlcj5saW5lIGJyZWFr
PGJyPnRoaXMgY29udGVudCdzIHBhcmVudCBpbmxpbmUgYm94KCdvdXRlcicpIDxzcGFuIGlkPWlu
bmVyPnN0YXJ0cyBvbiB0aGUgcHJldmlvdXMgbGluZTwvc3Bhbj48L3NwYW4+CisgICAgICAgIC8v
IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUncyBhbiBMaW5lQm94OjpJbmxpbmVMZXZl
bEJveCBmb3IgZXZlcnkgaW5saW5lIGJveCB0aGF0J3MgcHJlc2VudCBvbiB0aGUgY3VycmVudCBs
aW5lLgorICAgICAgICAvLyBJbiBuZXN0aW5nIGNhc2Ugd2UgbmVlZCB0byBjcmVhdGUgTGluZUJv
eDo6SW5saW5lTGV2ZWxCb3hlcyBmb3IgdGhlIGlubGluZSBib3ggYW5jZXN0b3JzLgorICAgICAg
ICAvLyBXZSBvbmx5IGhhdmUgdG8gZG8gaXQgb24gdGhlIGZpcnN0IHJ1biBhcyBhbnkgc3Vic2Vx
dWVudCBpbmxpbmUgY29udGVudCBpcyBlaXRoZXIgYXQgdGhlIHNhbWUvaGlnaGVyIG5lc3Rpbmcg
bGV2ZWwgb3IKKyAgICAgICAgLy8gbmVzdGVkIHdpdGggYSBbaW5saW5lIGJveCBzdGFydF0gcnVu
LgorICAgICAgICBhdXRvJiBmaXJzdFJ1biA9IHJ1bnNbMF07CisgICAgICAgIGF1dG8mIGZpcnN0
UnVuUGFyZW50TGF5b3V0Qm94ID0gZmlyc3RSdW4ubGF5b3V0Qm94KCkucGFyZW50KCk7CisgICAg
ICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgdGhlIGZvcm1hdHRpbmcgcm9vdCwgd2UgY2FuIHN0b3Ag
aGVyZS4gVGhpcyBpcyByb290IGlubGluZSBib3ggY29udGVudCwgdGhlcmUncyBubyBuZXN0aW5n
IGlubGluZSBib3ggZnJvbSB0aGUgcHJldmlvdXMgbGluZShzKQorICAgICAgICAvLyB1bmxlc3Mg
dGhlIGlubGluZSBib3ggY2xvc2luZyBpcyBmb3JjZWQgb3ZlciB0byB0aGUgY3VycmVudCBsaW5l
LgorICAgICAgICAvLyBlLmcuCisgICAgICAgIC8vIDxzcGFuPm5vcm1hbGx5IHRoZSBpbmxpbmUg
Ym94IGNsb3NpbmcgZm9ybXMgYSBjb250aW51b3VzIGNvbnRlbnQ8L3NwYW4+CisgICAgICAgIC8v
IDxzcGFuPnVubGVzcyBpdCdzIGZvcmNlZCB0byB0aGUgbmV4dCBsaW5lPGJyPjwvc3Bhbj4KKyAg
ICAgICAgYXV0byBmaXJzdFJ1bk5lZWRzSW5saW5lQm94ID0gZmlyc3RSdW4uaXNJbmxpbmVCb3hF
bmQoKTsKKyAgICAgICAgaWYgKCFmaXJzdFJ1bk5lZWRzSW5saW5lQm94ICYmIGlzUm9vdExheW91
dEJveChmaXJzdFJ1blBhcmVudExheW91dEJveCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlczsKKyAg
ICAgICAgaWYgKGZpcnN0UnVuTmVlZHNJbmxpbmVCb3gpCisgICAgICAgICAgICBsYXlvdXRCb3hl
c1dpdGhvdXRJbmxpbmVCb3hlcy5hcHBlbmQoJmZpcnN0UnVuLmxheW91dEJveCgpKTsKKyAgICAg
ICAgYXV0byogYW5jZXN0b3IgPSAmZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3g7CisgICAgICAgIHdo
aWxlICghaXNSb290TGF5b3V0Qm94KCphbmNlc3RvcikpIHsKKyAgICAgICAgICAgIGxheW91dEJv
eGVzV2l0aG91dElubGluZUJveGVzLmFwcGVuZChhbmNlc3Rvcik7CisgICAgICAgICAgICBhbmNl
c3RvciA9ICZhbmNlc3Rvci0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29uc3Ry
dWN0IHRoZSBtaXNzaW5nIExpbmVCb3g6OklubGluZUJveGVzIHN0YXJ0aW5nIHdpdGggdGhlIHRv
cG1vc3QgbGF5b3V0IGJveC4KKyAgICAgICAgZm9yIChhdXRvKiBsYXlvdXRCb3ggOiBXVEY6Om1h
a2VSZXZlcnNlZFJhbmdlKGxheW91dEJveGVzV2l0aG91dElubGluZUJveGVzKSkgeworICAgICAg
ICAgICAgYXV0byBpbmxpbmVCb3ggPSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5s
aW5lQm94KCpsYXlvdXRCb3gsIHJvb3RJbmxpbmVCb3gubG9naWNhbExlZnQoKSwgbGluZUJveC5j
b250ZW50TG9naWNhbFdpZHRoKCkpOworICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZv
cklubGluZUJveChpbmxpbmVCb3gpOworICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGlj
YWxseUlmQXBwbGljYWJsZShpbmxpbmVCb3gsIHsgfSk7CisgICAgICAgICAgICBsaW5lQm94LmFk
ZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIGNyZWF0ZVdyYXBwZWRJbmxpbmVCb3hlcygpOworCisgICAgYXV0byBsaW5lSGFzQ29udGVu
dCA9IGZhbHNlOworICAgIGZvciAoYXV0byYgcnVuIDogcnVucykgeworICAgICAgICBhdXRvJiBs
YXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8gcnVuSGFzQ29udGVudCA9
IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgIEFTU0VSVCghbGluZUhhc0NvbnRlbnQpOwor
ICAgICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSB8fCBydW4uaXNTb2Z0
TGluZUJyZWFrKCkgfHwgcnVuLmlzSGFyZExpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgYXV0byYgaW5saW5lQm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAvLyBF
dmVuIG5lZ2F0aXZlIGhvcml6b250YWwgbWFyZ2luIG1ha2VzIHRoZSBsaW5lICJjb250ZW50ZnVs
Ii4KKyAgICAgICAgICAgIGlmIChydW4uaXNJbmxpbmVCb3hTdGFydCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpbmxpbmVCb3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpIHx8IGlubGluZUJveEdl
b21ldHJ5LmJvcmRlckxlZnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZh
bHVlT3IoMF9sdSk7CisgICAgICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGlubGluZUJveEdlb21ldHJ5Lm1hcmdpbkVuZCgpIHx8IGlubGlu
ZUJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCkgfHwgaW5saW5lQm94R2VvbWV0cnkucGFkZGluZ1Jp
Z2h0KCkudmFsdWVPcigwX2x1KTsKKyAgICAgICAgICAgIGlmIChydW4uaXNXb3JkQnJlYWtPcHBv
cnR1bml0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07
CisgICAgICAgIGxpbmVIYXNDb250ZW50ID0gbGluZUhhc0NvbnRlbnQgfHwgcnVuSGFzQ29udGVu
dCgpOworICAgICAgICBhdXRvIGxvZ2ljYWxMZWZ0ID0gcm9vdElubGluZUJveC5sb2dpY2FsTGVm
dCgpICsgcnVuLmxvZ2ljYWxMZWZ0KCk7CisgICAgICAgIGlmIChydW4uaXNCb3goKSkgeworICAg
ICAgICAgICAgYXV0byYgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94
SGVpZ2h0ID0gaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKKyAgICAg
ICAgICAgIGF1dG8gYXNjZW50ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgICAgICBp
ZiAobGF5b3V0U3RhdGUoKS5zaG91bGROb3RTeW50aGVzaXplSW5saW5lQmxvY2tCYXNlbGluZSgp
KSB7CisgICAgICAgICAgICAgICAgLy8gSW50ZWdyYXRpb24gY29kZXBhdGggY29uc3RydWN0cyBy
ZXBsYWNlZCBib3hlcyBmb3IgaW5saW5lLWJsb2NrIGNvbnRlbnQuCisgICAgICAgICAgICAgICAg
QVNTRVJUKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpOworICAgICAgICAgICAgICAgIGFzY2Vu
dCA9ICpkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gVGhlIGJhc2VsaW5lIG9mIGFuICdpbmxpbmUtYmxvY2snIGlzIHRoZSBiYXNl
bGluZSBvZiBpdHMgbGFzdCBsaW5lIGJveCBpbiB0aGUgbm9ybWFsIGZsb3csIHVubGVzcyBpdCBo
YXMgZWl0aGVyIG5vIGluLWZsb3cgbGluZSBib3hlcyBvcgorICAgICAgICAgICAgICAgIC8vIGlm
IGl0cyAnb3ZlcmZsb3cnIHByb3BlcnR5IGhhcyBhIGNvbXB1dGVkIHZhbHVlIG90aGVyIHRoYW4g
J3Zpc2libGUnLCBpbiB3aGljaCBjYXNlIHRoZSBiYXNlbGluZSBpcyB0aGUgYm90dG9tIG1hcmdp
biBlZGdlLgorICAgICAgICAgICAgICAgIGF1dG8gc3ludGhlc2l6ZUJhc2VsaW5lID0gIWxheW91
dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkgfHwgIWxheW91dEJveC5z
dHlsZSgpLmlzT3ZlcmZsb3dWaXNpYmxlKCk7CisgICAgICAgICAgICAgICAgaWYgKHN5bnRoZXNp
emVCYXNlbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYXNjZW50ID0gbWFyZ2luQm94SGVpZ2h0
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3Jt
YXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0
YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8mIGxhc3RMaW5lID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVzKCkubGFzdCgpOworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZS5saW5l
Qm94TG9naWNhbFJlY3QoKS50b3AoKSArIGxhc3RMaW5lLmJhc2VsaW5lKCk7CisgICAgICAgICAg
ICAgICAgICAgIGFzY2VudCA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkg
KyBpbmxpbmVMZXZlbEJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgaW5saW5lTGV2ZWxCb3hHZW9t
ZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNSZXBsYWNl
ZEJveCgpKQorICAgICAgICAgICAgICAgIGFzY2VudCA9IGRvd25jYXN0PFJlcGxhY2VkQm94Pihs
YXlvdXRCb3gpLmJhc2VsaW5lKCkudmFsdWVPcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGFzY2VudCA9IG1hcmdpbkJveEhlaWdodDsKKyAgICAg
ICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHN0ZDo6bWF4KDBfbHUsIGlubGluZUxldmVsQm94R2VvbWV0
cnkubWFyZ2luU3RhcnQoKSk7CisgICAgICAgICAgICBhdXRvIGF0b21pY0lubGluZUxldmVsQm94
ID0gTGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUF0b21pY0lubGluZUxldmVsQm94KGxh
eW91dEJveCwgbG9naWNhbExlZnQsIHsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJCb3hX
aWR0aCgpLCBtYXJnaW5Cb3hIZWlnaHQgfSk7CisgICAgICAgICAgICBhdG9taWNJbmxpbmVMZXZl
bEJveC5zZXRCYXNlbGluZShhc2NlbnQpOworICAgICAgICAgICAgYXRvbWljSW5saW5lTGV2ZWxC
b3guc2V0TGF5b3V0Qm91bmRzKExpbmVCb3g6OklubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMg
eyBhc2NlbnQsIG1hcmdpbkJveEhlaWdodCAtIGFzY2VudCB9KTsKKyAgICAgICAgICAgIHNpbXBs
aWZpZWRBbGlnblZlcnRpY2FsbHlJZkFwcGxpY2FibGUoYXRvbWljSW5saW5lTGV2ZWxCb3gsIGlu
bGluZUxldmVsQm94R2VvbWV0cnkpOworICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZl
bEJveChXVEZNb3ZlKGF0b21pY0lubGluZUxldmVsQm94KSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQoKSkgeworICAg
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBkb24ndCBrbm93IHlldCBob3cgd2lkZSB0aGlz
IGlubGluZSBib3ggaXMuIExldCdzIGFzc3VtZSBpdCdzIGFzIGxvbmcgYXMgdGhlIGxpbmUgaXMK
KyAgICAgICAgICAgIC8vIGFuZCBhZGp1c3QgaXQgbGF0ZXIgaWYgd2UgY29tZSBhY3Jvc3MgYW4g
aW5saW5lQm94RW5kIHJ1biAoc2VlIGJlbG93KS4KKyAgICAgICAgICAgIGF1dG8gaW5pdGlhbExv
Z2ljYWxXaWR0aCA9IGxpbmVCb3guY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxM
ZWZ0KCk7CisgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbExvZ2ljYWxXaWR0aCA+PSAwKTsKKyAg
ICAgICAgICAgIC8vIElubGluZSBib3ggcnVuIGlzIGJhc2VkIG9uIG1hcmdpbiBib3guIExldCdz
IGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveC4KKyAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnQg
PSBzdGQ6Om1heCgwX2x1LCBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91
dEJveCkubWFyZ2luU3RhcnQoKSk7CisgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBtYXJnaW5T
dGFydDsKKyAgICAgICAgICAgIGluaXRpYWxMb2dpY2FsV2lkdGggLT0gbWFyZ2luU3RhcnQ7Cisg
ICAgICAgICAgICBhdXRvIGlubGluZUJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVh
dGVJbmxpbmVCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCwgaW5pdGlhbExvZ2ljYWxXaWR0aCk7
CisgICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGlubGluZUJveCk7
CisgICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGlubGlu
ZUJveCwgeyB9KTsKKyAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92
ZShpbmxpbmVCb3gpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChydW4uaXNJbmxpbmVCb3hFbmQoKSkgeworICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBs
b2dpY2FsIHdpZHRoIHdoZW4gdGhlIGlubGluZSBib3ggY2xvc2VzIG9uIHRoaXMgbGluZS4KKyAg
ICAgICAgICAgIGF1dG8mIGlubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVCb3guaXNJbmxpbmVC
b3goKSk7CisgICAgICAgICAgICAvLyBJbmxpbmUgYm94IHJ1biBpcyBiYXNlZCBvbiBtYXJnaW4g
Ym94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3guCisgICAgICAgICAgICBhdXRvIG1h
cmdpbkVuZCA9IHN0ZDo6bWF4KDBfbHUsIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KS5tYXJnaW5FbmQoKSk7CisgICAgICAgICAgICBhdXRvIGlubGluZUJveExv
Z2ljYWxSaWdodCA9IGxvZ2ljYWxMZWZ0ICsgcnVuLmxvZ2ljYWxXaWR0aCgpIC0gbWFyZ2luRW5k
OworICAgICAgICAgICAgaW5saW5lQm94LnNldExvZ2ljYWxXaWR0aChpbmxpbmVCb3hMb2dpY2Fs
UmlnaHQgLSBpbmxpbmVCb3gubG9naWNhbExlZnQoKSk7CisgICAgICAgICAgICBzaW1wbGlmaWVk
QWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGlubGluZUJveCwgeyB9KTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlz
U29mdExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRqdXN0IG5vbi1lbXB0
eSBpbmxpbmUgYm94IGhlaWdodCB3aGVuIGdseXBocyBmcm9tIHRoZSBub24tcHJpbWFyeSBmb250
IHN0cmV0Y2ggdGhlIGJveC4KKyAgICAgICAgICAgIGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKS5zZXRIYXNDb250ZW50KCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnVuLmlzSGFyZExpbmVCcmVhaygp
KSB7CisgICAgICAgICAgICBhdXRvIGxpbmVCcmVha0JveCA9IExpbmVCb3g6OklubGluZUxldmVs
Qm94OjpjcmVhdGVMaW5lQnJlYWtCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7CisgICAgICAg
ICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGxpbmVCcmVha0JveCk7CisgICAg
ICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGxpbmVCcmVha0Jv
eCwgeyB9KTsKKyAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShs
aW5lQnJlYWtCb3gpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChydW4uaXNXb3JkQnJlYWtPcHBvcnR1bml0eSgpKSB7CisgICAgICAgICAgICBsaW5lQm94
LmFkZElubGluZUxldmVsQm94KExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVHZW5lcmlj
SW5saW5lTGV2ZWxCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgbGluZUJveC5zZXRIYXNDb250ZW50KGxpbmVIYXNDb250ZW50KTsKKyAgICBpZiAoc2lt
cGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LmlzRW5hYmxlZCgpIHx8ICFsaW5lSGFzQ29udGVudCkg
eworICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhlIGZh
c3QgcGF0aCB3aGVuIHRoZSBsaW5lIGhhcyBubyBjb250ZW50IGF0IGFsbCwgZXZlbiBpbiBub24t
c3RhbmRhcmRzIG1vZGUgb3Igd2l0aCBsaW5lLWhlaWdodCBzZXQuCisgICAgICAgIHJvb3RJbmxp
bmVCb3guc2V0TG9naWNhbFRvcChsaW5lSGFzQ29udGVudCA/IHNpbXBsaWZpZWRWZXJ0aWNhbEFs
aWdubWVudC5yb290SW5saW5lQm94TG9naWNhbFRvcCgpIDogLXJvb3RJbmxpbmVCb3guYmFzZWxp
bmUoKSk7CisgICAgICAgIGxpbmVCb3guc2V0TG9naWNhbEhlaWdodChsaW5lSGFzQ29udGVudCA/
IHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5saW5lQm94SGVpZ2h0KCkgOiBJbmxpbmVMYXlv
dXRVbml0KCkpOworICAgIH0gZWxzZQorICAgICAgICBjb21wdXRlTGluZUJveEhlaWdodEFuZEFs
aWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2FsbHkobGluZUJveCk7Cit9CisKK3ZvaWQgTGluZUJv
eEJ1aWxkZXI6OmNvbXB1dGVMaW5lQm94SGVpZ2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVy
dGljYWxseShMaW5lQm94JiBsaW5lQm94KQoreworICAgIEFTU0VSVChsaW5lQm94Lmhhc0NvbnRl
bnQoKSk7CisgICAgLy8gVGhpcyBmdW5jdGlvbiAocGFydGlhbGx5KSBpbXBsZW1lbnRzOgorICAg
IC8vIDIuMi4gTGF5b3V0IFdpdGhpbiBMaW5lIEJveGVzCisgICAgLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL2Nzcy1pbmxpbmUtMy8jbGluZS1sYXlvdXQKKyAgICAvLyAxLiBDb21wdXRlIHRoZSBs
aW5lIGJveCBoZWlnaHQgdXNpbmcgdGhlIGxheW91dCBib3VuZHMgZ2VvbWV0cnkuIFRoaXMgaGVp
Z2h0IGNvbXB1dGF0aW9uIHN0cmljdGx5IHVzZXMgbGF5b3V0IGJvdW5kcyBhbmQgbm90IG5vcm1h
bCBpbmxpbmUgbGV2ZWwgYm94IGdlb21ldHJpZXMuCisgICAgLy8gMi4gQ29tcHV0ZSB0aGUgYmFz
ZWxpbmUvbG9naWNhbCB0b3AgcG9zaXRpb24gb2YgdGhlIHJvb3QgaW5saW5lIGJveC4gQWxpZ25l
ZCBib3hlcyBwdXNoIHRoZSByb290IGlubGluZSBib3ggYXJvdW5kIGluc2lkZSB0aGUgbGluZSBi
b3guCisgICAgLy8gMy4gRmluYWxseSBhbGlnbiB0aGUgaW5saW5lIGxldmVsIGJveGVzIHVzaW5n
IChtb3N0bHkpIG5vcm1hbCBpbmxpbmUgbGV2ZWwgYm94IGdlb21ldHJpZXMuCisgICAgYXV0byBx
dWlya3MgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpOworICAgIGF1dG8mIHJvb3RJbmxp
bmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKKworICAgIGF1dG8gY29tcHV0ZUxpbmVC
b3hMb2dpY2FsSGVpZ2h0ID0gWyZdIHsKKyAgICAgICAgLy8gTGluZSBib3ggaGVpZ2h0IGNvbXB1
dGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBsYXlvdXQgYm91bmRzIG9mIHRoZSBpbmxpbmUgYm94ZXMg
YW5kIG5vdCB0aGVpciBsb2dpY2FsIChhc2NlbnQvZGVzY2VudCkgZGltZW5zaW9ucy4KKyAgICAg
ICAgc3RydWN0IEFic29sdXRlVG9wQW5kQm90dG9tIHsKKyAgICAgICAgICAgIElubGluZUxheW91
dFVuaXQgdG9wIHsgMCB9OworICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBib3R0b20geyAw
IH07CisgICAgICAgIH07CisgICAgICAgIEhhc2hNYXA8Y29uc3QgTGluZUJveDo6SW5saW5lTGV2
ZWxCb3gqLCBBYnNvbHV0ZVRvcEFuZEJvdHRvbT4gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRvcEFu
ZEJvdHRvbU1hcDsKKworICAgICAgICBhdXRvIG1pbmltdW1Mb2dpY2FsVG9wID0gT3B0aW9uYWw8
SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBhdXRvIG1heGltdW1Mb2dpY2FsQm90dG9t
ID0gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBpZiAocXVpcmtzLmlu
bGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGluZUJveCkpIHsKKyAg
ICAgICAgICAgIG1pbmltdW1Mb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAg
ICAgICAgICBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRz
KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90
dG9tTWFwLmFkZCgmcm9vdElubGluZUJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyAqbWluaW11
bUxvZ2ljYWxUb3AsICptYXhpbXVtTG9naWNhbEJvdHRvbSB9KTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFkZCgmcm9v
dElubGluZUJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20geyB9KTsKKworICAgICAgICBWZWN0b3I8
TGluZUJveDo6SW5saW5lTGV2ZWxCb3gqPiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVz
OworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5s
aW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVM
ZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5oYXNM
aW5lQm94UmVsYXRpdmVBbGlnbm1lbnQoKSkgeworICAgICAgICAgICAgICAgIGxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94ZXMuYXBwZW5kKCZpbmxpbmVMZXZlbEJveCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5w
YXJlbnQoKSk7CisgICAgICAgICAgICAvLyBMb2dpY2FsIHRvcCBpcyByZWxhdGl2ZSB0byB0aGUg
cGFyZW50IGlubGluZSBib3gncyBsYXlvdXQgYm91bmRzLgorICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgbG9naWNhbCB0b3AgaXMgbm90IHRoZSBmaW5hbCBsb2dpY2FsIHRvcCBvZiB0aGUg
aW5saW5lIGxldmVsIGJveC4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvZ2ljYWwgdG9w
IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXlvdXQgYm91bmRzIGdlb21ldHJ5IHdoaWNoIG1heSBi
ZSB2ZXJ5IGRpZmZlcmVudCBmcm9tIHRoZSBpbmxpbmUgYm94J3Mgbm9ybWFsIGdlb21ldHJ5Lgor
ICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAg
ICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgICAgIGF1
dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50
SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFy
ZW50QmFzZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgICAgIGF1
dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJveC5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCkueEhlaWdodCgpIC8gMjsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFy
ZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7CisgICAgICAg
ICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOworICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNh
bFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOworICAg
ICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGZs
b2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21w
dXRlZExpbmVIZWlnaHQoKSkgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpUZXh0VG9wOiB7CisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRleHQtdG9w
IGFsaWducyB3aXRoIHRoZSBpbmxpbmUgYm94J3MgZm9udCBtZXRyaWNzIHRvcCAoYXNjZW50KSBh
bmQgbm90IHRoZSBsYXlvdXQgYm91bmRzIHRvcC4KKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9w
ID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIHBhcmVudElubGluZUJv
eC5iYXNlbGluZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOiB7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHRleHQtYm90dG9tIGFsaWducyB3aXRoIHRoZSBpbmxpbmUgYm94J3Mg
Zm9udCBtZXRyaWNzIGJvdHRvbSAoZGVzY2VudCkgYW5kIG5vdCB0aGUgbGF5b3V0IGJvdW5kcyBi
b3R0b20uCisgICAgICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hMYXlvdXRCb3VuZHMg
PSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCk7CisgICAgICAgICAgICAgICAgYXV0byBw
YXJlbnRJbmxpbmVCb3hMb2dpY2FsQm90dG9tID0gcGFyZW50SW5saW5lQm94TGF5b3V0Qm91bmRz
LmhlaWdodCgpIC0gcGFyZW50SW5saW5lQm94TGF5b3V0Qm91bmRzLmRlc2NlbnQgKyBwYXJlbnRJ
bmxpbmVCb3guZGVzY2VudCgpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKKyAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSAtIGlubGlu
ZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFu
ZEJvdHRvbSA9IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuZ2V0KCZwYXJl
bnRJbmxpbmVCb3gpOworICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbS50b3AgKyBsb2dpY2FsVG9wOworICAgICAg
ICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gPSBhYnNvbHV0ZUxvZ2ljYWxUb3AgKyBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIGlubGlu
ZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXAuYWRkKCZpbmxpbmVMZXZlbEJveCwgQWJz
b2x1dGVUb3BBbmRCb3R0b20geyBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGFic29sdXRlTG9naWNhbEJv
dHRvbSB9KTsKKyAgICAgICAgICAgIC8vIFN0cmV0Y2ggdGhlIG1pbi9tYXggYWJzb2x1dGUgdmFs
dWVzIGlmIGFwcGxpY2FibGUuCisgICAgICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94
QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKSB7CisgICAgICAgICAgICAg
ICAgbWluaW11bUxvZ2ljYWxUb3AgPSBzdGQ6Om1pbihtaW5pbXVtTG9naWNhbFRvcC52YWx1ZU9y
KGFic29sdXRlTG9naWNhbFRvcCksIGFic29sdXRlTG9naWNhbFRvcCk7CisgICAgICAgICAgICAg
ICAgbWF4aW11bUxvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChtYXhpbXVtTG9naWNhbEJvdHRvbS52
YWx1ZU9yKGFic29sdXRlTG9naWNhbEJvdHRvbSksIGFic29sdXRlTG9naWNhbEJvdHRvbSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIGxpbmUgYm94IGhlaWdodCBj
b21wdXRhdGlvbiBpcyBhcyBmb2xsb3dzOgorICAgICAgICAvLyAxLiBTdHJldGNoIHRoZSBsaW5l
IGJveCB3aXRoIHRoZSBub24tbGluZS1ib3ggcmVsYXRpdmUgYWxpZ25lZCBpbmxpbmUgYm94IGFi
c29sdXRlIHRvcCBhbmQgYm90dG9tIHZhbHVlcy4KKyAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhl
IGxpbmUgYm94IHJlbGF0aXZlIGFsaWduZWQgaW5saW5lIGJveGVzICh0b3AsIGJvdHRvbSBldGMp
IGhhdmUgZW5vdWdoIHJvb20gYW5kIHN0cmV0Y2ggdGhlIGxpbmUgYm94IGZ1cnRoZXIgaWYgbmVl
ZGVkLgorICAgICAgICBhdXRvIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gbWF4aW11bUxvZ2ljYWxC
b3R0b20udmFsdWVPcihJbmxpbmVMYXlvdXRVbml0KCkpIC0gbWluaW11bUxvZ2ljYWxUb3AudmFs
dWVPcihJbmxpbmVMYXlvdXRVbml0KCkpOworICAgICAgICBmb3IgKGF1dG8qIGxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94IDogbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlcykgewor
ICAgICAgICAgICAgaWYgKCFxdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveCgqbGlu
ZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgbGluZUJveExvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1heChsaW5l
Qm94TG9naWNhbEhlaWdodCwgbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gtPmxheW91dEJv
dW5kcygpLmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQobGluZUJveExvZ2ljYWxIZWlnaHQpOworICAgIH07CisgICAgY29tcHV0ZUxpbmVCb3hM
b2dpY2FsSGVpZ2h0KCk7CisKKyAgICBhdXRvIGNvbXB1dGVSb290SW5saW5lQm94VmVydGljYWxQ
b3NpdGlvbiA9IFsmXSB7CisgICAgICAgIEhhc2hNYXA8Y29uc3QgTGluZUJveDo6SW5saW5lTGV2
ZWxCb3gqLCBJbmxpbmVMYXlvdXRVbml0PiBpbmxpbmVMZXZlbEJveEFic29sdXRlQmFzZWxpbmVP
ZmZzZXRNYXA7CisgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1h
cC5hZGQoJnJvb3RJbmxpbmVCb3gsIElubGluZUxheW91dFVuaXQgeyB9KTsKKworICAgICAgICBh
dXRvIG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gT3B0aW9uYWw8
SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAgICAgICBpZiAocXVpcmtzLmlubGluZUxldmVsQm94
QWZmZWN0c0xpbmVCb3gocm9vdElubGluZUJveCwgbGluZUJveCkpCisgICAgICAgICAgICBtYXhp
bXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IHJvb3RJbmxpbmVCb3gubGF5
b3V0Qm91bmRzKCkuYXNjZW50OworCisgICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3gg
OiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKKyAgICAgICAgICAgIGF1dG8g
YWJzb2x1dGVCYXNlbGluZU9mZnNldCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAg
ICAgaWYgKCFpbmxpbmVMZXZlbEJveC5oYXNMaW5lQm94UmVsYXRpdmVBbGlnbm1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJv
eCgpOworICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5s
aW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gSW5saW5lTGF5b3V0
VW5pdCB7IH07CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVsQm94LnZlcnRp
Y2FsQWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxp
bmU6CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
ID0geyB9OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2lj
YWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSAoaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91
bmRzKCkuaGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3Mo
KS54SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgPSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lIC0gaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZU1pZGRsZTogeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxU
b3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMo
KS5oZWlnaHQoKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBh
cmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGlu
ZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6TGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2
ZWxCb3guc3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduT2Zm
c2V0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3RoKCksIHN0
eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dp
Y2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNldCArIGlu
bGluZUxldmVsQm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zm
c2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OlRleHRUb3A6CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3VuZHMoKS5hc2NlbnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlv
dXRCb3VuZHMoKS5kZXNjZW50IC0gKnBhcmVudElubGluZUJveC5kZXNjZW50KCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhYnNvbHV0ZUJh
c2VsaW5lT2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwLmdl
dCgmcGFyZW50SW5saW5lQm94KSArIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUxldmVs
Qm94LnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6VG9wOiB7CisgICAgICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBy
b290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmxheW91
dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Cisg
ICAgICAgICAgICAgICAgICAgIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5k
ZXNjZW50OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9J
TVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0
ZUJhc2VsaW5lT2Zmc2V0TWFwLmFkZCgmaW5saW5lTGV2ZWxCb3gsIGFic29sdXRlQmFzZWxpbmVP
ZmZzZXQpOworICAgICAgICAgICAgYXV0byBhZmZlY3RzUm9vdElubGluZUJveFZlcnRpY2FsUG9z
aXRpb24gPSBxdWlya3MuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChpbmxpbmVMZXZlbEJv
eCwgbGluZUJveCk7CisgICAgICAgICAgICBpZiAoYWZmZWN0c1Jvb3RJbmxpbmVCb3hWZXJ0aWNh
bFBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgYXV0byB0b3BPZmZzZXRGcm9tUm9vdElubGlu
ZUJveEJhc2VsaW5lID0gYWJzb2x1dGVCYXNlbGluZU9mZnNldCArIGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICBpZiAobWF4aW11bVRvcE9mZnNl
dEZyb21Sb290SW5saW5lQm94QmFzZWxpbmUpCisgICAgICAgICAgICAgICAgICAgIG1heGltdW1U
b3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gc3RkOjptYXgoKm1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lLCB0b3BPZmZzZXRGcm9tUm9vdElubGluZUJv
eEJhc2VsaW5lKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgYXJlIGlzIHF1aXJrIG1vZGUgYW5kIHRoZSByb290IGlubGluZSBib3ggaGFzIG5vIGNv
bnRlbnQuIFRoZSByb290IGlubGluZSBib3gncyBiYXNlbGluZSBpcyBhbmNob3JlZCBhdCAwLgor
ICAgICAgICAgICAgICAgICAgICAvLyBIb3dldmVyIG5lZ2F0aXZlIGFzY2VudCAoZS5nIG5lZ2F0
aXZlIHRvcCBtYXJnaW4pIGNhbiAicHVzaCIgdGhlIHJvb3QgaW5saW5lIGJveCB1cHdhcmRzIGFu
ZCBoYXZlIGEgbmVnYXRpdmUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIG1heGltdW1Ub3BP
ZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91
bmRzKCkuYXNjZW50ID49IDAKKyAgICAgICAgICAgICAgICAgICAgICAgID8gc3RkOjptYXgoMC4w
ZiwgdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDogdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXV0byByb290SW5saW5l
Qm94TG9naWNhbFRvcCA9IG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5l
LnZhbHVlT3IoMC5mKSAtIHJvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgcm9vdElu
bGluZUJveC5zZXRMb2dpY2FsVG9wKHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wKTsKKyAgICB9Owor
ICAgIGNvbXB1dGVSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbigpOworCisgICAgYXV0byBh
bGlnbklubGluZUxldmVsQm94ZXMgPSBbJl0geworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxl
dmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAg
ICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9
IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJv
eC52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFz
ZWxpbmU6CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNl
bGluZSgpIC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7CisgICAgICAgICAg
ICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gKGlubGluZUxl
dmVsQm94LmxvZ2ljYWxIZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVCb3guc3R5bGUoKS5mb250
TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFz
ZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lTWlkZGxlOiB7CisgICAgICAgICAgICAgICAg
YXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gu
bG9naWNhbEhlaWdodCgpIC8gMjsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50
SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9
IGlubGluZUxldmVsQm94LnN0eWxlKCk7CisgICAgICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFs
aWduT2Zmc2V0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChzdHlsZS52ZXJ0aWNhbEFsaWduTGVuZ3Ro
KCksIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxv
Z2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSB2ZXJ0aWNhbEFsaWduT2Zmc2V0ICsg
aW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
cGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0ICh0ZXh0KXRvcC9ib3R0b20gYWxpZ24gdGhlaXIgbGF5b3V0IGJvdW5k
cy4KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDoKKyAgICAgICAgICAg
ICAgICBsb2dpY2FsVG9wID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0g
aW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKKyAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVs
Qm94LmxheW91dEJvdW5kcygpLmRlc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpU
b3A6CisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbG9naWNhbCB0b3AgaXMgbm90
IHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgaW5saW5lIGJveC4KKyAgICAgICAgICAgICAgICBsb2dp
Y2FsVG9wID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2
ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3gu
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0g
aW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIGlubGluZUxldmVsQm94LmJh
c2VsaW5lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJveC5z
ZXRMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgICAgICB9CisgICAgfTsKKyAgICBhbGlnbklu
bGluZUxldmVsQm94ZXMoKTsKK30KKworTGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0aWNh
bEFsaWdubWVudDo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50KGNvbnN0IExpbmVCb3g6Oklu
bGluZUxldmVsQm94JiByb290SW5saW5lQm94KQorICAgIDogbV9yb290SW5saW5lQm94KHJvb3RJ
bmxpbmVCb3gpCit7CisgICAgYWRqdXN0KHJvb3RJbmxpbmVCb3gpOworfQorCitib29sIExpbmVC
b3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNpbXBsaWZpZWRB
bGlnbm1lbnQoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCwgT3B0aW9uYWw8Y29u
c3QgQm94R2VvbWV0cnk+IGlubGluZUxldmVsQm94R2VvbWV0cnkpCit7CisgICAgaWYgKGlubGlu
ZUxldmVsQm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSkgeworICAgICAgICBBU1NFUlQoaW5s
aW5lTGV2ZWxCb3hHZW9tZXRyeSk7CisgICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1z
dHJldGNoeSBkaXJlY3QgY2hpbGRyZW4gYXJlIGNvbnNpZGVyZWQgdG8gYmUgc2ltcGxlIGZvciBu
b3cuCisgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LmxheW91dEJveCgp
OworICAgICAgICByZXR1cm4gJmxheW91dEJveC5wYXJlbnQoKSA9PSAmcm9vdElubGluZUJveC5s
YXlvdXRCb3goKQorICAgICAgICAgICAgJiYgbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGln
bigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lCisgICAgICAgICAgICAmJiAhaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQmVmb3JlKCkKKyAgICAgICAgICAgICYmICFpbmxpbmVMZXZl
bEJveEdlb21ldHJ5LT5tYXJnaW5BZnRlcigpCisgICAgICAgICAgICAmJiBpbmxpbmVMZXZlbEJv
eEdlb21ldHJ5LT5tYXJnaW5Cb3hIZWlnaHQoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7
CisgICAgfQorICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpKSB7CisgICAg
ICAgIC8vIEJhc2VsaW5lIGFsaWduZWQsIG5vbi1zdHJldGNoeSBsaW5lIGJyZWFrcyBlLmcuIDxk
aXY+PHNwYW4+PGJyPjwvc3Bhbj48L2Rpdj4gYnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250
LXNpemU6IDEwMHB4OyI+PGJyPjwvc3Bhbj48L2Rpdj4uCisgICAgICAgIHJldHVybiBpbmxpbmVM
ZXZlbEJveC5sYXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZSAmJiBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpIDw9IHJvb3RJbmxpbmVC
b3guYmFzZWxpbmUoKTsKKyAgICB9CisgICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQm94
KCkpIHsKKyAgICAgICAgLy8gQmFzZWxpbmUgYWxpZ25lZCwgbm9uLXN0cmV0Y2h5IGlubGluZSBi
b3hlcyBlLmcuIDxkaXY+PHNwYW4+PC9zcGFuPjwvZGl2PiBidXQgbm90IDxkaXY+PHNwYW4gc3R5
bGU9ImZvbnQtc2l6ZTogMTAwcHg7Ij48L3NwYW4+PC9kaXY+LgorICAgICAgICByZXR1cm4gaW5s
aW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGlj
YWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkgPT0gcm9v
dElubGluZUJveC5sYXlvdXRCb3VuZHMoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIExpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmFsaWdu
KExpbmVCb3g6OklubGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCkKK3sKKyAgICBpZiAoaW5s
aW5lTGV2ZWxCb3guaXNBdG9taWNJbmxpbmVMZXZlbEJveCgpIHx8IGlubGluZUxldmVsQm94Lmlz
TGluZUJyZWFrQm94KCkgfHwgaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkgeworICAgICAg
ICAvLyBPbmx5IGJhc2VsaW5lIGFsaWdubWVudCBmb3Igbm93LgorICAgICAgICBpbmxpbmVMZXZl
bEJveC5zZXRMb2dpY2FsVG9wKG1fcm9vdElubGluZUJveC5iYXNlbGluZSgpIC0gaW5saW5lTGV2
ZWxCb3guYmFzZWxpbmUoKSk7CisgICAgICAgIGFkanVzdChpbmxpbmVMZXZlbEJveCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30K
Kwordm9pZCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OjphZGp1
c3QoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KQoreworICAg
IGF1dG8gbGF5b3V0Qm91bmRzTG9naWNhbFRvcCA9IG1fcm9vdElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7CisgICAg
bV9saW5lQm94TG9naWNhbFRvcCA9IHN0ZDo6bWluKG1fbGluZUJveExvZ2ljYWxUb3AsIGxheW91
dEJvdW5kc0xvZ2ljYWxUb3ApOworICAgIG1fbGluZUJveExvZ2ljYWxCb3R0b20gPSBzdGQ6Om1h
eChtX2xpbmVCb3hMb2dpY2FsQm90dG9tLCBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wICsgaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkpOworICAgIG1fcm9vdElubGluZUJveExv
Z2ljYWxUb3AgPSBzdGQ6Om1heChtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wLCBpbmxpbmVMZXZl
bEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBtX3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSk7
Cit9CisKK0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkK
KyAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCkKK3sKK30KKworTGluZUJveCBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmxpbmVCb3hGb3JM
aW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KQor
eworICAgIHJldHVybiBMaW5lQm94QnVpbGRlcihmb3JtYXR0aW5nQ29udGV4dCgpKS5idWlsZChs
aW5lQ29udGVudCk7Cit9CisKK0lubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5Ojpsb2dpY2FsVG9wRm9yTmV4dExpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50
JiBsaW5lQ29udGVudCwgSW5saW5lTGF5b3V0VW5pdCBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9t
LCBjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCkgY29uc3QKK3sKKyAgICAv
LyBOb3JtYWxseSB0aGUgbmV4dCBsaW5lJ3MgbG9naWNhbCB0b3AgaXMgdGhlIHByZXZpb3VzIGxp
bmUncyBsb2dpY2FsIGJvdHRvbSwgYnV0IHdoZW4gdGhlIGxpbmUgZW5kcworICAgIC8vIHdpdGgg
dGhlIGNsZWFyIHByb3BlcnR5IHNldCwgdGhlIG5leHQgbGluZSBuZWVkcyB0byBjbGVhciB0aGUg
ZXhpc3RpbmcgZmxvYXRzLgorICAgIGlmIChsaW5lQ29udGVudC5ydW5zLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b207CisgICAgYXV0byYgbGFzdFJ1
bkxheW91dEJveCA9IGxpbmVDb250ZW50LnJ1bnMubGFzdCgpLmxheW91dEJveCgpOyAKKyAgICBp
ZiAobGFzdFJ1bkxheW91dEJveC5zdHlsZSgpLmNsZWFyKCkgPT0gQ2xlYXI6Ok5vbmUpCisgICAg
ICAgIHJldHVybiBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tOworICAgIGF1dG8gcG9zaXRpb25X
aXRoQ2xlYXJhbmNlID0gZmxvYXRpbmdDb250ZXh0LnZlcnRpY2FsUG9zaXRpb25XaXRoQ2xlYXJh
bmNlKGxhc3RSdW5MYXlvdXRCb3gpOworICAgIGlmICghcG9zaXRpb25XaXRoQ2xlYXJhbmNlKQor
ICAgICAgICByZXR1cm4gcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbTsKKyAgICByZXR1cm4gc3Rk
OjptYXgocHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbSwgSW5saW5lTGF5b3V0VW5pdChwb3NpdGlv
bldpdGhDbGVhcmFuY2UtPnBvc2l0aW9uKSk7Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBJ
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmlubGluZUJsb2NrQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChmb3JtYXR0
aW5nQ29udGV4dFJvb3QuaXNJbkZsb3coKSk7CisKKyAgICAvLyAxMC4zLjEwICdJbmxpbmUtYmxv
Y2snLCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworCisgICAgLy8gRXhhY3RseSBh
cyBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRX
aWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290
KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
KTsKKworICAgIC8vIDEwLjMuOSAnSW5saW5lLWJsb2NrJywgbm9uLXJlcGxhY2VkIGVsZW1lbnRz
IGluIG5vcm1hbCBmbG93CisKKyAgICAvLyBJZiAnd2lkdGgnIGlzICdhdXRvJywgdGhlIHVzZWQg
dmFsdWUgaXMgdGhlIHNocmluay10by1maXQgd2lkdGggYXMgZm9yIGZsb2F0aW5nIGVsZW1lbnRz
LgorICAgIC8vIEEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nIGZvciAnbWFyZ2luLWxlZnQnIG9y
ICdtYXJnaW4tcmlnaHQnIGJlY29tZXMgYSB1c2VkIHZhbHVlIG9mICcwJy4KKyAgICAvLyAjMQor
ICAgIGF1dG8gd2lkdGggPSBjb21wdXRlZFZhbHVlKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5zdHls
ZSgpLmxvZ2ljYWxXaWR0aCgpLCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsK
KyAgICBpZiAoIXdpZHRoKQorICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgoZm9ybWF0
dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKKwor
ICAgIC8vICMyCisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKTsKKworICAgIHJldHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyAqd2lk
dGgsIHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMF9sdSksIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwX2x1KSB9IH07Cit9CisKK0NvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjppbmxpbmVCbG9ja0NvbnRl
bnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKK3sKKyAgICBBU1NFUlQo
bGF5b3V0Qm94LmlzSW5GbG93KCkpOworCisgICAgLy8gMTAuNi4yIElubGluZSByZXBsYWNlZCBl
bGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3csICdp
bmxpbmUtYmxvY2snIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGlu
ZyByZXBsYWNlZCBlbGVtZW50cworICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQor
ICAgICAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGRvd25j
YXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwg
b3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKKworICAgIC8vIDEwLjYuNiBDb21wbGljYXRlZCBj
YXNlcworICAgIC8vIC0gJ0lubGluZS1ibG9jaycsIG5vbi1yZXBsYWNlZCBlbGVtZW50cy4KKyAg
ICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKK30KKworfQorfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODliZjg3ZjM0YmFmYTQwNTc4NzhhMmE2YTE5ZTU3Y2NmNjhkODJhMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5j
bHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIExheW91dCB7CisKK2NsYXNzIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgeworcHVibGljOgorICAgIExpbmVCb3ggbGluZUJv
eEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYpOworICAgIElu
bGluZUxheW91dFVuaXQgbG9naWNhbFRvcEZvck5leHRMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpM
aW5lQ29udGVudCYsIElubGluZUxheW91dFVuaXQgcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbSwg
Y29uc3QgRmxvYXRpbmdDb250ZXh0JikgY29uc3Q7CisKKyAgICBDb250ZW50SGVpZ2h0QW5kTWFy
Z2luIGlubGluZUJsb2NrQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBj
b25zdDsKKyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5saW5lQmxvY2tDb250ZW50V2lkdGhB
bmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
T3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jik7CisKKyAgICBjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2Fz
dDxJbmxpbmVGb3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpm
b3JtYXR0aW5nQ29udGV4dCgpKTsgfQorCit9OworCit9Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428748</attachid>
            <date>2021-05-15 16:09:38 -0700</date>
            <delta_ts>2021-05-15 16:56:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225754-20210515160937.patch</filename>
            <type>text/plain</type>
            <size>95673</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUyYjczMWFkYzQ3ZTRm
OTQzMWI4MmU0ZTViM2Q3NWM2NzBiMmU0ZS4uNzc0OWQ3MzQ0ODBkNzQ2ODMyNTA1YTUzMWRkNzJl
MTBmOTc5MDU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIGlubGluZSBm
b3JtYXR0aW5nIGdlb21ldHJ5IHRvIGl0cyBvd24gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTc1NAorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6Okdlb21ldHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDogUmVtb3ZlZC4KKwogMjAyMS0wNS0xNSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0xGQ10gTW92ZSBmbGV4IGZvcm1hdHRpbmcgZ2VvbWV0cnkgdG8g
aXRzIG93biBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBmY2RiYzVmNDQ5MDk3OGUzOTc5MTNmMmRi
ZTIwYjgxMDZjMjE2ZjBmLi4xMzgzNmFlNDhiNjBiZTEwMTE5YmU2NTAxMWI1NDVjZWUyYWUwNWRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTUzNCw3ICsxNTM0LDcgQEAgbGF5b3V0L2Zsb2F0cy9GbG9h
dGluZ0NvbnRleHQuY3BwCiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwCiBsYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHAKIGxheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAot
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1h
dHRpbmdHZW9tZXRyeS5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdRdWlya3MuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVJdGVtLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGYxYTI2YWE1ZGYyODFhMjUzODE2Y2M5NGMxMzVhMTMyNDNj
NTIzOTEuLjU1M2M1N2NmMmJjM2VmNTFmYzk0MzUyNTJmNWZhYzRlNTk5NjY0M2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEz
MzQsNiArMTMzNCw3IEBACiAJCTQ2RjAyQTFBMjM3MzdGODMwMDEwNkE2NCAvKiBFdmVudExvb3Au
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMEFCQ0Ex
MjM2NzlBQjMwMEI0NTA4NSAvKiBFdmVudExvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NkZDQjYxODFBNzA4MjBFMDBDNUEyMUUgLyogRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDM3QjM3NTE1QzFBN0UxMDA2REM4OTggLyogRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDc4NjM1NjUyNjUwN0EzODAwQzVFMkUwIC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Nzg2MzU2NDI2NTA3
QTM3MDBDNUUyRTAgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0N0M0RDU3RDI2NTA4QkNCMDBDN0FC
MUYgLyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0N0M0RDU3QzI2NTA4QkNBMDBDN0FCMUYgLyogSW5saW5l
Rm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNDdGOTQ3REIyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGlu
Z1F1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDdGOTQ3REEyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5MjkxRTRCMTM0
MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5MjkxRTRBMTM0MTcyQzgwMEU3NTNERSAvKiBJ
bWFnZVJlbmRlcmluZ01vZGUuaCAqLzsgfTsKIAkJNDkzRTVFMDkxMkQ2NDIwNTAwMDIwMDgxIC8q
IFBsYXRmb3JtQ0FMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDkzRTVFMDgxMkQ2NDIwNTAwMDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXll
ckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04Mzg5LDYgKzgzOTAsNyBAQAogCQk0NkVGQUYxMDFFNUZCOUUxMDBFN0YzNEIgLyogTG93
UG93ZXJNb2RlTm90aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG93
UG93ZXJNb2RlTm90aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOTFC
QzkxRkNERDBGRTAwMTU5OUMzIC8qIEpTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDc4NjM1NjQyNjUwN0EzNzAwQzVFMkUw
IC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ3QzRENTdDMjY1MDhCQ0EwMEM3QUIxRiAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0dl
b21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ3Rjk0N0RBMjY1MDJGMkYw
MDg3OTY4QyAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ5MjkxRTRBMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VSZW5kZXJpbmdNb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5M0U1RTA4MTJENjQyMDUwMDAyMDA4MSAv
KiBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxhdGZvcm1DQUxheWVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05OTY0LDcgKzk5NjYsNyBAQAogCQk2RjI2QkI2OTIzMzQzRTVBMDAyRjJCRUEgLyogTGF5b3V0
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRDb250ZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyNkJCNkIyMzM0M0U1QjAwMkYyQkVBIC8qIExheW91
dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Q29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RjI2RUI0NjIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lTGluZUJ1aWxk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkYzNUVGQUYyMTg3Q0JENTAwNDRF
MEY0IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBG
NCAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkYzNjBFNEUyMzk5OTQyMDAwMTUxMkE3IC8qIElubGluZVNvZnRM
aW5lQnJlYWtJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVNv
ZnRMaW5lQnJlYWtJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0ZCQTk2
MjU1NkUzMDgwMDM1MzBGRCAvKiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1
aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjNGQkE5NzI1NTZFMzEy
MDAzNTMwRkQgLyogTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRl
bnRCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODI2NCw3ICsxODI2
Niw4IEBACiAJCQkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUNvbnRlbnRCcmVh
a2VyLmggKi8sCiAJCQkJNkY3Q0EzQzkyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRp
bmdDb250ZXh0LmNwcCAqLywKIAkJCQk2RjdDQTNDODIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaCAqLywKLQkJCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyog
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkYzNUVGQUYyMTg3
Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8sCisJCQkJNDdD
NEQ1N0MyNjUwOEJDQTAwQzdBQjFGIC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oICovLAog
CQkJCTZGMTBCMDg2MjJCODU2OEQwMDkwRTY5QyAvKiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmNw
cCAqLywKIAkJCQk2RkU2MzZFNzI2NDc5NjI5MDBGMDk1MUUgLyogSW5saW5lRm9ybWF0dGluZ1F1
aXJrcy5oICovLAogCQkJCTExNUNGQTdEMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0
aW5nU3RhdGUuY3BwICovLApAQCAtMzI5NTMsNiArMzI5NTYsNyBAQAogCQkJCUI1N0NCNTJFMTgy
QTNFRkMwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OENGRjVFMzBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lRmxvd0JveC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNkY3Q0EzQ0EyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0N0M0RDU3RDI2NTA4QkNCMDBDN0FCMUYgLyogSW5saW5l
Rm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkU2MzZFODI2NDc5NjI5
MDBGMDk1MUUgLyogSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTE1Q0ZBN0UyMDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkZFN0NGQTIyMTc3RUVGMjAwNUIxNTczIC8qIElubGluZUl0ZW0uaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCmluZGV4IGMxMjgyNzdlMjg4Njc4NDc2ZDU0ODU1NzI1NWI3MGQ3NTM3ZGMzZDIu
LjE4MDU3ODY3MTdkZWZiNTNmYTFiOWQxYjc2MjdhNGY2MGI1NDYwMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCisjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiSW5s
aW5lRm9ybWF0dGluZ1F1aXJrcy5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5o
IgogI2luY2x1ZGUgIklubGluZUxpbmVCb3guaCIKQEAgLTYwNiw2ICs2MDcsMTEgQEAgdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJ
bnZhbGlkYXRpb25TdGF0ZSYKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHNvIHdoZXJlIHdlIHdv
dWxkIGRlbGV0ZSBpbmxpbmUgaXRlbXMgaWYgdGhlaXIgY29udGVudCBjaGFuZ2VkLgogfQogCitJ
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsK
K30KKwogSW5saW5lRm9ybWF0dGluZ1F1aXJrcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6cXVp
cmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gSW5saW5lRm9ybWF0dGluZ1F1aXJrcygqdGhpcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAx
NmUyYjc5MzA4NjRhYzYxMzJhNjljZGFlOTM4NWJiZjZkN2NhOWEwLi5jZDcxODNjZDU0MzUwNjIz
NjQ0MzhkOGVhMDEwMDUwMWU0ZTEyNGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTM0LDYgKzM0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk7
CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nUXVp
cmtzOwogY2xhc3MgSW52YWxpZGF0aW9uU3RhdGU7CkBAIC01OCwyMiArNTksNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CiAKLSAgICBjbGFzcyBHZW9tZXRyeSA6IHB1
YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAg
TGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250
ZW50Jik7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcEZvck5leHRMaW5lKGNv
bnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIElubGluZUxheW91dFVuaXQgcHJldmlvdXNM
aW5lTG9naWNhbEJvdHRvbSwgY29uc3QgRmxvYXRpbmdDb250ZXh0JikgY29uc3Q7Ci0KLSAgICAg
ICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVCbG9ja0NvbnRlbnRIZWlnaHRBbmRNYXJn
aW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdp
biBpbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OwotICAgICAgICBHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwot
Ci0gICAgICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdDb250ZXh0PihGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9Ci0KLSAgICB9
OwotICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0
IHsgcmV0dXJuIEdlb21ldHJ5KCp0aGlzKTsgfQorICAgIElubGluZUZvcm1hdHRpbmdHZW9tZXRy
eSBnZW9tZXRyeSgpIGNvbnN0OwogCiAgICAgdm9pZCBsaW5lTGF5b3V0KElubGluZUl0ZW1zJiwg
TGluZUJ1aWxkZXI6OklubGluZUl0ZW1SYW5nZSwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dD
b250ZW50Jik7CiAKQEAgLTg5LDExICs3NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlk
YXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJik7CiB9OwogCi1pbmxp
bmUgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnkoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi17Ci19Ci0K
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0ZTc4
ODMzMzgwZmI0Y2MyMDUxMzU5YTM2YjUwNDk1NDliOWFkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5o
IgotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW5saW5lTGluZUJv
eC5oIgotI2luY2x1ZGUgIkxheW91dEJveC5oIgotI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJv
eC5oIgotI2luY2x1ZGUgIkxheW91dFJlcGxhY2VkQm94LmgiCi0jaW5jbHVkZSAiTGVuZ3RoRnVu
Y3Rpb25zLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1j
bGFzcyBMaW5lQm94QnVpbGRlciB7Ci1wdWJsaWM6Ci0gICAgTGluZUJveEJ1aWxkZXIoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKLSAgICBMaW5lQm94IGJ1aWxkKGNvbnN0IExpbmVC
dWlsZGVyOjpMaW5lQ29udGVudCYpOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBTaW1wbGlmaWVk
VmVydGljYWxBbGlnbm1lbnQgewotICAgICAgICBTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQo
Y29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gpOwotCi0gICAgICAg
IHN0YXRpYyBib29sIGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoY29uc3QgTGluZUJveDo6SW5s
aW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94
JiwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGlubGluZUxldmVsQm94R2VvbWV0cnkpOwot
Ci0gICAgICAgIHZvaWQgYWxpZ24oTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmKTsKLQotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1
cm4gbV9yb290SW5saW5lQm94TG9naWNhbFRvcDsgfQotICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IGxpbmVCb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hMb2dpY2FsQm90dG9tIC0g
bV9saW5lQm94TG9naWNhbFRvcDsgfQotCi0gICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9pc0VuYWJsZWQgPSBlbmFibGVkOyB9Ci0gICAgICAgIGJvb2wgaXNFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0VuYWJsZWQ7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IHZvaWQgYWRqdXN0KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94Jik7Ci0KLSAgICAgICAg
Y29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIG1fcm9vdElubGluZUJveDsKLSAgICAgICAg
Ym9vbCBtX2lzRW5hYmxlZCB7IHRydWUgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xp
bmVCb3hMb2dpY2FsVG9wIHsgMCB9OwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbGluZUJv
eExvZ2ljYWxCb3R0b20geyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV9yb290SW5s
aW5lQm94TG9naWNhbFRvcCB7IDAgfTsKLSAgICB9OwotCi0gICAgdm9pZCBzZXRWZXJ0aWNhbEdl
b21ldHJ5Rm9ySW5saW5lQm94KExpbmVCb3g6OklubGluZUxldmVsQm94JikgY29uc3Q7Ci0gICAg
dm9pZCBjb25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMoTGluZUJveCYsIGNvbnN0IExp
bmU6OlJ1bkxpc3QmKTsKLSAgICB2b2lkIGNvbXB1dGVMaW5lQm94SGVpZ2h0QW5kQWxpZ25Jbmxp
bmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94Jik7Ci0KLSAgICBjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OyB9Ci0gICAgY29uc3QgQm94JiByb290Qm94KCkgY29uc3QgeyBy
ZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0KLSAgICBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRl
KCk7IH0KLQotICAgIGJvb2wgaXNSb290TGF5b3V0Qm94KGNvbnN0IENvbnRhaW5lckJveCYgY29u
dGFpbmVyQm94KSBjb25zdCB7IHJldHVybiAmY29udGFpbmVyQm94ID09ICZyb290Qm94KCk7IH0K
LQotcHJpdmF0ZToKLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDsKLX07Ci0KLXN0cnVjdCBIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNl
Q29udGVudCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgSW5saW5lTGF5b3V0
VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICBib29sIGlzQ29uZGl0
aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uZGl0aW9uYWw7IH0KLQotICAgIHZvaWQgc2V0
SXNDb25kaXRpb25hbCgpIHsgbV9pc0NvbmRpdGlvbmFsID0gdHJ1ZTsgfQotICAgIHZvaWQgZXhw
YW5kKElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCArPSB3aWR0aDsgfQotCi1wcml2
YXRlOgotICAgIGJvb2wgbV9pc0NvbmRpdGlvbmFsIHsgZmFsc2UgfTsKLSAgICBJbmxpbmVMYXlv
dXRVbml0IG1fd2lkdGggeyAwIH07Ci19OwotCi12b2lkIEhhbmdpbmdUcmFpbGluZ1doaXRlc3Bh
Y2VDb250ZW50OjpyZXNldCgpCi17Ci0gICAgbV9pc0NvbmRpdGlvbmFsID0gZmFsc2U7Ci0gICAg
bV93aWR0aCA9ICAwOwotfQotCi1zdGF0aWMgSGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRl
bnQgY29sbGVjdEhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50KGNvbnN0IExpbmU6OlJ1
bkxpc3QmIHJ1bnMsIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotewotICAgIGF1
dG8gaGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudCB7IH07
Ci0gICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKLSAgICAgICAgaGFuZ2luZ0Nv
bnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgIGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtl
UmV2ZXJzZWRSYW5nZShydW5zKSkgewotICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQo
KSB8fCBydW4uaXNJbmxpbmVCb3hFbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNl
dElzQ29uZGl0aW9uYWwoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNw
YWNlLgotICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6
OlByZVdyYXApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIg
YSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0g
ICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgo
KSk7Ci0gICAgfQotICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKLX0KLQotc3RhdGljIE9wdGlv
bmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29uc3QgTGlu
ZTo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIElubGluZUxheW91dFVu
aXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRo
LCBib29sIGlzTGFzdExpbmUpCi17Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmVMb2dp
Y2FsV2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoOwotICAgIGF1dG8gaGFuZ2luZ1RyYWlsaW5n
V2hpdGVzcGFjZUNvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRl
bnQocnVucywgaXNMYXN0TGluZSk7Ci0gICAgYXZhaWxhYmxlV2lkdGggKz0gaGFuZ2luZ1RyYWls
aW5nV2hpdGVzcGFjZUNvbnRlbnQud2lkdGgoKTsKLSAgICBpZiAoYXZhaWxhYmxlV2lkdGggPD0g
MCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxp
Z25tZW50ID0gWyZdIHsKLSAgICAgICAgaWYgKHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5KQotICAgICAgICAgICAgcmV0dXJuIHRleHRBbGlnbjsKLSAgICAgICAgLy8gVGV4dCBp
cyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0
LWp1c3RpZnkgcHJvcGVydHksCi0gICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0
aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFz
dCwKLSAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhl
IGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KLSAgICAgICAgaWYgKGlzTGFzdExp
bmUgfHwgKCFydW5zLmlzRW1wdHkoKSAmJiBydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpKSkKLSAg
ICAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKLSAgICAgICAgcmV0dXJuIFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0gICAgfTsKLQotICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jp
em9udGFsQWxpZ25tZW50KCkpIHsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6Ci0gICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
U3RhcnQ6Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdo
dDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6RW5kOgotICAgICAgICByZXR1cm4gYXZhaWxhYmxlV2lkdGg7Ci0gICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50
ZXI6Ci0gICAgICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCAvIDI7Ci0gICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpKdXN0aWZ5OgotICAgICAgICAvLyBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5IGlzIGEg
cnVuIGFsaWdubWVudCAoYW5kIHdlIG9ubHkgZG8gaW5saW5lIGJveCBhbGlnbm1lbnQgaGVyZSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX0lN
UExFTUVOVEVEX1lFVCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1MaW5lQm94QnVpbGRlcjo6TGlu
ZUJveEJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKLXsKLX0KLQotTGluZUJveCBMaW5lQm94QnVpbGRlcjo6YnVpbGQoY29uc3Qg
TGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKLXsKLSAgICBhdXRvJiBydW5z
ID0gbGluZUNvbnRlbnQucnVuczsKLSAgICBhdXRvIGxpbmVMb2dpY2FsV2lkdGggPSBsaW5lQ29u
dGVudC5saW5lTG9naWNhbFdpZHRoOwotICAgIGF1dG8gY29udGVudExvZ2ljYWxXaWR0aCA9IGxp
bmVDb250ZW50LmNvbnRlbnRMb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBob3Jpem9udGFsQWxpZ25t
ZW50T2Zmc2V0ID0gTGF5b3V0Ojpob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KHJ1bnMsIHJvb3RC
b3goKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lTG9naWNhbFdpZHRoLCBjb250ZW50TG9naWNh
bFdpZHRoLCBsaW5lQ29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIGF1
dG8gbGluZUJveCA9IExpbmVCb3ggeyByb290Qm94KCksIGxpbmVDb250ZW50LmxvZ2ljYWxUb3BM
ZWZ0LCBsaW5lTG9naWNhbFdpZHRoLCBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVlT3Io
SW5saW5lTGF5b3V0VW5pdCB7IH0pLCBjb250ZW50TG9naWNhbFdpZHRoLCBsaW5lQ29udGVudC5u
b25TcGFubmluZ0lubGluZUxldmVsQm94Q291bnQgfTsKLSAgICBjb25zdHJ1Y3RBbmRBbGlnbklu
bGluZUxldmVsQm94ZXMobGluZUJveCwgcnVucyk7Ci0gICAgcmV0dXJuIGxpbmVCb3g7Ci19Ci0K
LXZvaWQgTGluZUJveEJ1aWxkZXI6OnNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goTGlu
ZUJveDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KSBjb25zdAotewotICAgIEFTU0VS
VChpbmxpbmVMZXZlbEJveC5pc0lubGluZUJveCgpIHx8IGlubGluZUxldmVsQm94LmlzTGluZUJy
ZWFrQm94KCkpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gaW5saW5lTGV2ZWxCb3guc3R5bGUo
KS5mb250TWV0cmljcygpOwotICAgIElubGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9udE1ldHJp
Y3MuYXNjZW50KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1ldHJpY3Mu
ZGVzY2VudCgpOwotICAgIGF1dG8gbG9naWNhbEhlaWdodCA9IGFzY2VudCArIGRlc2NlbnQ7Ci0g
ICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwg
cG9zaXRpb25pbmcuCi0gICAgaW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoZmxvb3JmKGFzY2Vu
dCkpOwotICAgIGlubGluZUxldmVsQm94LnNldERlc2NlbnQoY2VpbChkZXNjZW50KSk7Ci0gICAg
aW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKLQotICAgIC8v
IEZJWE1FOiBBZGp1c3QgbGF5b3V0IGJvdW5kcyB3aXRoIGZhbGxiYWNrIGZvbnQgd2hlbiBhcHBs
aWNhYmxlLgotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5
bGUoKTsKLSAgICBhdXRvIGxpbmVIZWlnaHQgPSBzdHlsZS5saW5lSGVpZ2h0KCk7Ci0gICAgaWYg
KGxpbmVIZWlnaHQuaXNOZWdhdGl2ZSgpKSB7Ci0gICAgICAgIC8vIElmIGxpbmUtaGVpZ2h0IGNv
bXB1dGVzIHRvIG5vcm1hbCBhbmQgZWl0aGVyIHRleHQtZWRnZSBpcyBsZWFkaW5nIG9yIHRoaXMg
aXMgdGhlIHJvb3QgaW5saW5lIGJveCwKLSAgICAgICAgLy8gdGhlIGZvbnTigJlzIGxpbmUgZ2Fw
IG1ldHJpYyBtYXkgYWxzbyBiZSBpbmNvcnBvcmF0ZWQgaW50byBBIGFuZCBEIGJ5IGFkZGluZyBo
YWxmIHRvIGVhY2ggc2lkZSBhcyBoYWxmLWxlYWRpbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2lubGluZS1oZWlnaHQKLSAgICAgICAgLy8gU2luY2Ug
dGV4dC1lZGdlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGFuZCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBs
ZWFkaW5nLCB3ZSBzaG91bGQganVzdCBhcHBseSBpdCB0bwotICAgICAgICAvLyBhbGwgaW5saW5l
IGJveGVzLgotICAgICAgICBhdXRvIGhhbGZMaW5lR2FwID0gKGZvbnRNZXRyaWNzLmxpbmVTcGFj
aW5nKCkgLSBsb2dpY2FsSGVpZ2h0KSAvIDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGluZUdh
cDsKLSAgICAgICAgZGVzY2VudCArPSBoYWxmTGluZUdhcDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQo
KTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBoYWxmTGVhZGluZyA9IChsaW5lSGVpZ2h0IC0g
KGFzY2VudCArIGRlc2NlbnQpKSAvIDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGVhZGluZzsK
LSAgICAgICAgZGVzY2VudCArPSBoYWxmTGVhZGluZzsKLSAgICB9Ci0gICAgLy8gV2UgbmVlZCBm
bG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCi0g
ICAgaW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRzKExpbmVCb3g6OklubGluZUxldmVsQm94
OjpMYXlvdXRCb3VuZHMgeyBmbG9vcmYoYXNjZW50KSwgY2VpbChkZXNjZW50KSB9KTsKLX0KLQot
dm9pZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExp
bmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMpCi17Ci0gICAgYXV0byYg
cm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJveCgpOwotICAgIHNldFZlcnRpY2Fs
R2VvbWV0cnlGb3JJbmxpbmVCb3gocm9vdElubGluZUJveCk7Ci0KLSAgICBhdXRvIHNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudCA9IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCB7IHJvb3RJ
bmxpbmVCb3ggfTsKLSAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aCBzdXBwb3J0IGZvciBsaW5l
LWhlaWdodCBjb250ZW50LgotICAgIHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5zZXRFbmFi
bGVkKGxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2RlKCkgJiYgcm9vdEJveCgpLnN0eWxlKCku
bGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSk7Ci0KLSAgICBhdXRvIHNpbXBsaWZpZWRBbGlnblZl
cnRpY2FsbHlJZkFwcGxpY2FibGUgPSBbJl0oYXV0byYgaW5saW5lTGV2ZWxCb3gsIE9wdGlvbmFs
PGNvbnN0IEJveEdlb21ldHJ5PiBib3hHZW9tZXRyeSkgewotICAgICAgICBpZiAoIXNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudC5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKCFTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNhblVzZVNpbXBsaWZpZWRB
bGlnbm1lbnQocm9vdElubGluZUJveCwgaW5saW5lTGV2ZWxCb3gsIGJveEdlb21ldHJ5KSkgewot
ICAgICAgICAgICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LnNldEVuYWJsZWQoZmFsc2Up
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNpbXBsaWZpZWRWZXJ0
aWNhbEFsaWdubWVudC5hbGlnbihpbmxpbmVMZXZlbEJveCk7Ci0gICAgfTsKLQotICAgIGF1dG8g
Y3JlYXRlV3JhcHBlZElubGluZUJveGVzID0gWyZdIHsKLSAgICAgICAgaWYgKHJ1bnMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBBbiBpbmxpbmUgYm94IG1heSBu
b3QgbmVjZXNzYXJpbHkgc3RhcnQgb24gdGhlIGN1cnJlbnQgbGluZToKLSAgICAgICAgLy8gPHNw
YW4gaWQ9b3V0ZXI+bGluZSBicmVhazxicj50aGlzIGNvbnRlbnQncyBwYXJlbnQgaW5saW5lIGJv
eCgnb3V0ZXInKSA8c3BhbiBpZD1pbm5lcj5zdGFydHMgb24gdGhlIHByZXZpb3VzIGxpbmU8L3Nw
YW4+PC9zcGFuPgotICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3Mg
YW4gTGluZUJveDo6SW5saW5lTGV2ZWxCb3ggZm9yIGV2ZXJ5IGlubGluZSBib3ggdGhhdCdzIHBy
ZXNlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gSW4gbmVzdGluZyBjYXNlIHdl
IG5lZWQgdG8gY3JlYXRlIExpbmVCb3g6OklubGluZUxldmVsQm94ZXMgZm9yIHRoZSBpbmxpbmUg
Ym94IGFuY2VzdG9ycy4KLSAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRvIGRvIGl0IG9uIHRoZSBm
aXJzdCBydW4gYXMgYW55IHN1YnNlcXVlbnQgaW5saW5lIGNvbnRlbnQgaXMgZWl0aGVyIGF0IHRo
ZSBzYW1lL2hpZ2hlciBuZXN0aW5nIGxldmVsIG9yCi0gICAgICAgIC8vIG5lc3RlZCB3aXRoIGEg
W2lubGluZSBib3ggc3RhcnRdIHJ1bi4KLSAgICAgICAgYXV0byYgZmlyc3RSdW4gPSBydW5zWzBd
OwotICAgICAgICBhdXRvJiBmaXJzdFJ1blBhcmVudExheW91dEJveCA9IGZpcnN0UnVuLmxheW91
dEJveCgpLnBhcmVudCgpOwotICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIHRoZSBmb3JtYXR0
aW5nIHJvb3QsIHdlIGNhbiBzdG9wIGhlcmUuIFRoaXMgaXMgcm9vdCBpbmxpbmUgYm94IGNvbnRl
bnQsIHRoZXJlJ3Mgbm8gbmVzdGluZyBpbmxpbmUgYm94IGZyb20gdGhlIHByZXZpb3VzIGxpbmUo
cykKLSAgICAgICAgLy8gdW5sZXNzIHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgaXMgZm9yY2VkIG92
ZXIgdG8gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gZS5nLgotICAgICAgICAvLyA8c3Bh
bj5ub3JtYWxseSB0aGUgaW5saW5lIGJveCBjbG9zaW5nIGZvcm1zIGEgY29udGludW91cyBjb250
ZW50PC9zcGFuPgotICAgICAgICAvLyA8c3Bhbj51bmxlc3MgaXQncyBmb3JjZWQgdG8gdGhlIG5l
eHQgbGluZTxicj48L3NwYW4+Ci0gICAgICAgIGF1dG8gZmlyc3RSdW5OZWVkc0lubGluZUJveCA9
IGZpcnN0UnVuLmlzSW5saW5lQm94RW5kKCk7Ci0gICAgICAgIGlmICghZmlyc3RSdW5OZWVkc0lu
bGluZUJveCAmJiBpc1Jvb3RMYXlvdXRCb3goZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3gpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gbGF5b3V0Qm94ZXNX
aXRob3V0SW5saW5lQm94ZXM7Ci0gICAgICAgIGlmIChmaXJzdFJ1bk5lZWRzSW5saW5lQm94KQot
ICAgICAgICAgICAgbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXMuYXBwZW5kKCZmaXJzdFJ1
bi5sYXlvdXRCb3goKSk7Ci0gICAgICAgIGF1dG8qIGFuY2VzdG9yID0gJmZpcnN0UnVuUGFyZW50
TGF5b3V0Qm94OwotICAgICAgICB3aGlsZSAoIWlzUm9vdExheW91dEJveCgqYW5jZXN0b3IpKSB7
Ci0gICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcy5hcHBlbmQoYW5jZXN0
b3IpOwotICAgICAgICAgICAgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPnBhcmVudCgpOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbWlzc2luZyBMaW5lQm94OjpJbmxpbmVCb3hl
cyBzdGFydGluZyB3aXRoIHRoZSB0b3Btb3N0IGxheW91dCBib3guCi0gICAgICAgIGZvciAoYXV0
byogbGF5b3V0Qm94IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShsYXlvdXRCb3hlc1dpdGhvdXRJ
bmxpbmVCb3hlcykpIHsKLSAgICAgICAgICAgIGF1dG8gaW5saW5lQm94ID0gTGluZUJveDo6SW5s
aW5lTGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveCgqbGF5b3V0Qm94LCByb290SW5saW5lQm94Lmxv
Z2ljYWxMZWZ0KCksIGxpbmVCb3guY29udGVudExvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAg
IHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goaW5saW5lQm94KTsKLSAgICAgICAgICAg
IHNpbXBsaWZpZWRBbGlnblZlcnRpY2FsbHlJZkFwcGxpY2FibGUoaW5saW5lQm94LCB7IH0pOwot
ICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGlubGluZUJveCkp
OwotICAgICAgICB9Ci0gICAgfTsKLSAgICBjcmVhdGVXcmFwcGVkSW5saW5lQm94ZXMoKTsKLQot
ICAgIGF1dG8gbGluZUhhc0NvbnRlbnQgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1
bnMpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAg
ICBhdXRvIHJ1bkhhc0NvbnRlbnQgPSBbJl0gKCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWxpbmVIYXNDb250ZW50KTsKLSAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVu
LmlzQm94KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpIHx8IHJ1bi5pc0hhcmRMaW5lQnJlYWso
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8mIGlubGlu
ZUJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOwotICAgICAgICAgICAgLy8gRXZlbiBuZWdhdGl2ZSBob3Jpem9udGFsIG1hcmdpbiBtYWtl
cyB0aGUgbGluZSAiY29udGVudGZ1bCIuCi0gICAgICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94
U3RhcnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lQm94R2VvbWV0cnkubWFyZ2lu
U3RhcnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCkgfHwgaW5saW5lQm94R2Vv
bWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDBfbHUpOwotICAgICAgICAgICAgaWYgKHJ1bi5p
c0lubGluZUJveEVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVCb3hHZW9tZXRy
eS5tYXJnaW5FbmQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpIHx8IGlubGlu
ZUJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMF9sdSk7Ci0gICAgICAgICAgICBp
ZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9OwotICAgICAgICBsaW5lSGFzQ29udGVudCA9IGxpbmVIYXND
b250ZW50IHx8IHJ1bkhhc0NvbnRlbnQoKTsKLSAgICAgICAgYXV0byBsb2dpY2FsTGVmdCA9IHJv
b3RJbmxpbmVCb3gubG9naWNhbExlZnQoKSArIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICBp
ZiAocnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUxldmVsQm94R2VvbWV0
cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAg
ICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFy
Z2luQm94SGVpZ2h0KCk7Ci0gICAgICAgICAgICBhdXRvIGFzY2VudCA9IElubGluZUxheW91dFVu
aXQgeyB9OwotICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlKCkuc2hvdWxkTm90U3ludGhlc2l6
ZUlubGluZUJsb2NrQmFzZWxpbmUoKSkgewotICAgICAgICAgICAgICAgIC8vIEludGVncmF0aW9u
IGNvZGVwYXRoIGNvbnN0cnVjdHMgcmVwbGFjZWQgYm94ZXMgZm9yIGlubGluZS1ibG9jayBjb250
ZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsK
LSAgICAgICAgICAgICAgICBhc2NlbnQgPSAqZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJv
eCkuYmFzZWxpbmUoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5l
QmxvY2tCb3goKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNlbGluZSBvZiBhbiAnaW5s
aW5lLWJsb2NrJyBpcyB0aGUgYmFzZWxpbmUgb2YgaXRzIGxhc3QgbGluZSBib3ggaW4gdGhlIG5v
cm1hbCBmbG93LCB1bmxlc3MgaXQgaGFzIGVpdGhlciBubyBpbi1mbG93IGxpbmUgYm94ZXMgb3IK
LSAgICAgICAgICAgICAgICAvLyBpZiBpdHMgJ292ZXJmbG93JyBwcm9wZXJ0eSBoYXMgYSBjb21w
dXRlZCB2YWx1ZSBvdGhlciB0aGFuICd2aXNpYmxlJywgaW4gd2hpY2ggY2FzZSB0aGUgYmFzZWxp
bmUgaXMgdGhlIGJvdHRvbSBtYXJnaW4gZWRnZS4KLSAgICAgICAgICAgICAgICBhdXRvIHN5bnRo
ZXNpemVCYXNlbGluZSA9ICFsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCgpIHx8ICFsYXlvdXRCb3guc3R5bGUoKS5pc092ZXJmbG93VmlzaWJsZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChzeW50aGVzaXplQmFzZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGFz
Y2VudCA9IG1hcmdpbkJveEhlaWdodDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZSA9IGZvcm1hdHRpbmdTdGF0
ZS5saW5lcygpLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jh
c2VsaW5lID0gbGFzdExpbmUubGluZUJveExvZ2ljYWxSZWN0KCkudG9wKCkgKyBsYXN0TGluZS5i
YXNlbGluZSgpOwotICAgICAgICAgICAgICAgICAgICBhc2NlbnQgPSBpbmxpbmVMZXZlbEJveEdl
b21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJUb3Ao
KSArIGlubGluZUxldmVsQm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxp
bmVCbG9ja0Jhc2VsaW5lOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAgICAgICAgICBhc2NlbnQgPSBk
b3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpLnZhbHVlT3IobWFyZ2lu
Qm94SGVpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhc2NlbnQgPSBt
YXJnaW5Cb3hIZWlnaHQ7Ci0gICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBzdGQ6Om1heCgwX2x1
LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkpOwotICAgICAgICAgICAgYXV0
byBhdG9taWNJbmxpbmVMZXZlbEJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVB
dG9taWNJbmxpbmVMZXZlbEJveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0LCB7IGlubGluZUxldmVs
Qm94R2VvbWV0cnkuYm9yZGVyQm94V2lkdGgoKSwgbWFyZ2luQm94SGVpZ2h0IH0pOwotICAgICAg
ICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoYXNjZW50KTsKLSAgICAgICAg
ICAgIGF0b21pY0lubGluZUxldmVsQm94LnNldExheW91dEJvdW5kcyhMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveDo6TGF5b3V0Qm91bmRzIHsgYXNjZW50LCBtYXJnaW5Cb3hIZWlnaHQgLSBhc2NlbnQg
fSk7Ci0gICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5SWZBcHBsaWNhYmxlKGF0
b21pY0lubGluZUxldmVsQm94LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5KTsKLSAgICAgICAgICAg
IGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShhdG9taWNJbmxpbmVMZXZlbEJveCkp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bi5pc0lu
bGluZUJveFN0YXJ0KCkpIHsKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgZG9uJ3Qg
a25vdyB5ZXQgaG93IHdpZGUgdGhpcyBpbmxpbmUgYm94IGlzLiBMZXQncyBhc3N1bWUgaXQncyBh
cyBsb25nIGFzIHRoZSBsaW5lIGlzCi0gICAgICAgICAgICAvLyBhbmQgYWRqdXN0IGl0IGxhdGVy
IGlmIHdlIGNvbWUgYWNyb3NzIGFuIGlubGluZUJveEVuZCBydW4gKHNlZSBiZWxvdykuCi0gICAg
ICAgICAgICBhdXRvIGluaXRpYWxMb2dpY2FsV2lkdGggPSBsaW5lQm94LmNvbnRlbnRMb2dpY2Fs
V2lkdGgoKSAtIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxM
b2dpY2FsV2lkdGggPj0gMCk7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgYm94IHJ1biBpcyBiYXNl
ZCBvbiBtYXJnaW4gYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3guCi0gICAgICAg
ICAgICBhdXRvIG1hcmdpblN0YXJ0ID0gc3RkOjptYXgoMF9sdSwgZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCkpOwotICAgICAgICAgICAg
bG9naWNhbExlZnQgKz0gbWFyZ2luU3RhcnQ7Ci0gICAgICAgICAgICBpbml0aWFsTG9naWNhbFdp
ZHRoIC09IG1hcmdpblN0YXJ0OwotICAgICAgICAgICAgYXV0byBpbmxpbmVCb3ggPSBMaW5lQm94
OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91dEJveCwgbG9naWNhbExlZnQs
IGluaXRpYWxMb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZv
cklubGluZUJveChpbmxpbmVCb3gpOwotICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGlj
YWxseUlmQXBwbGljYWJsZShpbmxpbmVCb3gsIHsgfSk7Ci0gICAgICAgICAgICBsaW5lQm94LmFk
ZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkpIHsKLSAgICAg
ICAgICAgIC8vIEFkanVzdCB0aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRoZSBpbmxpbmUgYm94IGNs
b3NlcyBvbiB0aGlzIGxpbmUuCi0gICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBsaW5lQm94
LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBBU1NF
UlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotICAgICAgICAgICAgLy8gSW5saW5lIGJveCBy
dW4gaXMgYmFzZWQgb24gbWFyZ2luIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94
LgotICAgICAgICAgICAgYXV0byBtYXJnaW5FbmQgPSBzdGQ6Om1heCgwX2x1LCBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luRW5kKCkpOwotICAgICAg
ICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsUmlnaHQgPSBsb2dpY2FsTGVmdCArIHJ1bi5sb2dp
Y2FsV2lkdGgoKSAtIG1hcmdpbkVuZDsKLSAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2Fs
V2lkdGgoaW5saW5lQm94TG9naWNhbFJpZ2h0IC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwot
ICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZShpbmxpbmVC
b3gsIHsgfSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc1NvZnRMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IEFkanVzdCBub24tZW1wdHkgaW5saW5lIGJveCBoZWlnaHQgd2hlbiBnbHlwaHMgZnJv
bSB0aGUgbm9uLXByaW1hcnkgZm9udCBzdHJldGNoIHRoZSBib3guCi0gICAgICAgICAgICBsaW5l
Qm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSkuc2V0SGFz
Q29udGVudCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHJ1bi5pc0hhcmRMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtCb3gg
PSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlTGluZUJyZWFrQm94KGxheW91dEJveCwg
bG9naWNhbExlZnQpOwotICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJv
eChsaW5lQnJlYWtCb3gpOwotICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlm
QXBwbGljYWJsZShsaW5lQnJlYWtCb3gsIHsgfSk7Ci0gICAgICAgICAgICBsaW5lQm94LmFkZElu
bGluZUxldmVsQm94KFdURk1vdmUobGluZUJyZWFrQm94KSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkg
ewotICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveDo6Y3JlYXRlR2VuZXJpY0lubGluZUxldmVsQm94KGxheW91dEJveCwgbG9naWNhbExl
ZnQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGxpbmVCb3guc2V0SGFzQ29udGVudChsaW5lSGFz
Q29udGVudCk7Ci0gICAgaWYgKHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5pc0VuYWJsZWQo
KSB8fCAhbGluZUhhc0NvbnRlbnQpIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBh
YmxlIHRvIGV4ZXJjaXNlIHRoZSBmYXN0IHBhdGggd2hlbiB0aGUgbGluZSBoYXMgbm8gY29udGVu
dCBhdCBhbGwsIGV2ZW4gaW4gbm9uLXN0YW5kYXJkcyBtb2RlIG9yIHdpdGggbGluZS1oZWlnaHQg
c2V0LgotICAgICAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3AobGluZUhhc0NvbnRlbnQg
PyBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQucm9vdElubGluZUJveExvZ2ljYWxUb3AoKSA6
IC1yb290SW5saW5lQm94LmJhc2VsaW5lKCkpOwotICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQobGluZUhhc0NvbnRlbnQgPyBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQubGluZUJv
eEhlaWdodCgpIDogSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29t
cHV0ZUxpbmVCb3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5KGxpbmVC
b3gpOwotfQotCi12b2lkIExpbmVCb3hCdWlsZGVyOjpjb21wdXRlTGluZUJveEhlaWdodEFuZEFs
aWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2FsbHkoTGluZUJveCYgbGluZUJveCkKLXsKLSAgICBB
U1NFUlQobGluZUJveC5oYXNDb250ZW50KCkpOwotICAgIC8vIFRoaXMgZnVuY3Rpb24gKHBhcnRp
YWxseSkgaW1wbGVtZW50czoKLSAgICAvLyAyLjIuIExheW91dCBXaXRoaW4gTGluZSBCb3hlcwot
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2xpbmUtbGF5b3V0Ci0g
ICAgLy8gMS4gQ29tcHV0ZSB0aGUgbGluZSBib3ggaGVpZ2h0IHVzaW5nIHRoZSBsYXlvdXQgYm91
bmRzIGdlb21ldHJ5LiBUaGlzIGhlaWdodCBjb21wdXRhdGlvbiBzdHJpY3RseSB1c2VzIGxheW91
dCBib3VuZHMgYW5kIG5vdCBub3JtYWwgaW5saW5lIGxldmVsIGJveCBnZW9tZXRyaWVzLgotICAg
IC8vIDIuIENvbXB1dGUgdGhlIGJhc2VsaW5lL2xvZ2ljYWwgdG9wIHBvc2l0aW9uIG9mIHRoZSBy
b290IGlubGluZSBib3guIEFsaWduZWQgYm94ZXMgcHVzaCB0aGUgcm9vdCBpbmxpbmUgYm94IGFy
b3VuZCBpbnNpZGUgdGhlIGxpbmUgYm94LgotICAgIC8vIDMuIEZpbmFsbHkgYWxpZ24gdGhlIGlu
bGluZSBsZXZlbCBib3hlcyB1c2luZyAobW9zdGx5KSBub3JtYWwgaW5saW5lIGxldmVsIGJveCBn
ZW9tZXRyaWVzLgotICAgIGF1dG8gcXVpcmtzID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3Mo
KTsKLSAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94KCk7Ci0K
LSAgICBhdXRvIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCA9IFsmXSB7Ci0gICAgICAgIC8v
IExpbmUgYm94IGhlaWdodCBjb21wdXRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgbGF5b3V0IGJvdW5k
cyBvZiB0aGUgaW5saW5lIGJveGVzIGFuZCBub3QgdGhlaXIgbG9naWNhbCAoYXNjZW50L2Rlc2Nl
bnQpIGRpbWVuc2lvbnMuCi0gICAgICAgIHN0cnVjdCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7Ci0g
ICAgICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRvcCB7IDAgfTsKLSAgICAgICAgICAgIElubGlu
ZUxheW91dFVuaXQgYm90dG9tIHsgMCB9OwotICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94KiwgQWJzb2x1dGVUb3BBbmRCb3R0b20+IGlubGlu
ZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXA7Ci0KLSAgICAgICAgYXV0byBtaW5pbXVt
TG9naWNhbFRvcCA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKLSAgICAgICAgYXV0
byBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsK
LSAgICAgICAgaWYgKHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KHJvb3RJbmxp
bmVCb3gsIGxpbmVCb3gpKSB7Ci0gICAgICAgICAgICBtaW5pbXVtTG9naWNhbFRvcCA9IElubGlu
ZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgbWF4aW11bUxvZ2ljYWxCb3R0b20gPSByb290
SW5saW5lQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOwotICAgICAgICAgICAgaW5saW5lTGV2
ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29sdXRl
VG9wQW5kQm90dG9tIHsgKm1pbmltdW1Mb2dpY2FsVG9wLCAqbWF4aW11bUxvZ2ljYWxCb3R0b20g
fSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRv
cEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29sdXRlVG9wQW5kQm90dG9tIHsg
fSk7Ci0KLSAgICAgICAgVmVjdG9yPExpbmVCb3g6OklubGluZUxldmVsQm94Kj4gbGluZUJveFJl
bGF0aXZlSW5saW5lTGV2ZWxCb3hlczsKLSAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJv
eCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgewotICAgICAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBp
ZiAoaW5saW5lTGV2ZWxCb3guaGFzTGluZUJveFJlbGF0aXZlQWxpZ25tZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVzLmFwcGVuZCgmaW5saW5l
TGV2ZWxCb3gpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVMZXZlbEJveEZv
ckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAgICAgICAgLy8gTG9naWNhbCB0
b3AgaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBpbmxpbmUgYm94J3MgbGF5b3V0IGJvdW5kcy4K
LSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCB0aGUgZmlu
YWwgbG9naWNhbCB0b3Agb2YgdGhlIGlubGluZSBsZXZlbCBib3guCi0gICAgICAgICAgICAvLyBU
aGlzIGlzIHRoZSBsb2dpY2FsIHRvcCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGF5b3V0IGJvdW5k
cyBnZW9tZXRyeSB3aGljaCBtYXkgYmUgdmVyeSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5saW5lIGJv
eCdzIG5vcm1hbCBnZW9tZXRyeS4KLSAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGlu
ZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0
aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBs
b2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxp
bmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDIgKyBwYXJlbnRJ
bmxpbmVCb3guc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDI7Ci0gICAgICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNl
bGluZU1pZGRsZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8g
MjsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxheW91dEJv
dW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246Okxlbmd0aDogewotICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gaW5saW5l
TGV2ZWxCb3guc3R5bGUoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHN0eWxlLnZlcnRpY2FsQWxp
Z25MZW5ndGgoKSwgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpICsgaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJl
bnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNhbFRvcE9mZnNldEZyb21Q
YXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDogewotICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCB0ZXh0LXRvcCBhbGlnbnMgd2l0aCB0aGUgaW5saW5lIGJveCdzIGZvbnQg
bWV0cmljcyB0b3AgKGFzY2VudCkgYW5kIG5vdCB0aGUgbGF5b3V0IGJvdW5kcyB0b3AuCi0gICAg
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5h
c2NlbnQgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJv
dHRvbTogewotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0ZXh0LWJvdHRvbSBhbGlnbnMg
d2l0aCB0aGUgaW5saW5lIGJveCdzIGZvbnQgbWV0cmljcyBib3R0b20gKGRlc2NlbnQpIGFuZCBu
b3QgdGhlIGxheW91dCBib3VuZHMgYm90dG9tLgotICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50
SW5saW5lQm94TGF5b3V0Qm91bmRzID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpOwot
ICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50SW5saW5lQm94TG9naWNhbEJvdHRvbSA9IHBhcmVu
dElubGluZUJveExheW91dEJvdW5kcy5oZWlnaHQoKSAtIHBhcmVudElubGluZUJveExheW91dEJv
dW5kcy5kZXNjZW50ICsgcGFyZW50SW5saW5lQm94LmRlc2NlbnQoKS52YWx1ZU9yKElubGluZUxh
eW91dFVuaXQoKSk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJv
eExvZ2ljYWxCb3R0b20gLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gcGFyZW50
SW5saW5lQm94QWJzb2x1dGVUb3BBbmRCb3R0b20gPSBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9w
QW5kQm90dG9tTWFwLmdldCgmcGFyZW50SW5saW5lQm94KTsKLSAgICAgICAgICAgIGF1dG8gYWJz
b2x1dGVMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94QWJzb2x1dGVUb3BBbmRCb3R0b20udG9w
ICsgbG9naWNhbFRvcDsKLSAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVMb2dpY2FsQm90dG9tID0g
YWJzb2x1dGVMb2dpY2FsVG9wICsgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0
KCk7Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmFk
ZCgmaW5saW5lTGV2ZWxCb3gsIEFic29sdXRlVG9wQW5kQm90dG9tIHsgYWJzb2x1dGVMb2dpY2Fs
VG9wLCBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gfSk7Ci0gICAgICAgICAgICAvLyBTdHJldGNoIHRo
ZSBtaW4vbWF4IGFic29sdXRlIHZhbHVlcyBpZiBhcHBsaWNhYmxlLgotICAgICAgICAgICAgaWYg
KHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGlubGluZUxldmVsQm94LCBsaW5l
Qm94KSkgewotICAgICAgICAgICAgICAgIG1pbmltdW1Mb2dpY2FsVG9wID0gc3RkOjptaW4obWlu
aW11bUxvZ2ljYWxUb3AudmFsdWVPcihhYnNvbHV0ZUxvZ2ljYWxUb3ApLCBhYnNvbHV0ZUxvZ2lj
YWxUb3ApOwotICAgICAgICAgICAgICAgIG1heGltdW1Mb2dpY2FsQm90dG9tID0gc3RkOjptYXgo
bWF4aW11bUxvZ2ljYWxCb3R0b20udmFsdWVPcihhYnNvbHV0ZUxvZ2ljYWxCb3R0b20pLCBhYnNv
bHV0ZUxvZ2ljYWxCb3R0b20pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8v
IFRoZSBsaW5lIGJveCBoZWlnaHQgY29tcHV0YXRpb24gaXMgYXMgZm9sbG93czoKLSAgICAgICAg
Ly8gMS4gU3RyZXRjaCB0aGUgbGluZSBib3ggd2l0aCB0aGUgbm9uLWxpbmUtYm94IHJlbGF0aXZl
IGFsaWduZWQgaW5saW5lIGJveCBhYnNvbHV0ZSB0b3AgYW5kIGJvdHRvbSB2YWx1ZXMuCi0gICAg
ICAgIC8vIDIuIENoZWNrIGlmIHRoZSBsaW5lIGJveCByZWxhdGl2ZSBhbGlnbmVkIGlubGluZSBi
b3hlcyAodG9wLCBib3R0b20gZXRjKSBoYXZlIGVub3VnaCByb29tIGFuZCBzdHJldGNoIHRoZSBs
aW5lIGJveCBmdXJ0aGVyIGlmIG5lZWRlZC4KLSAgICAgICAgYXV0byBsaW5lQm94TG9naWNhbEhl
aWdodCA9IG1heGltdW1Mb2dpY2FsQm90dG9tLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKSAt
IG1pbmltdW1Mb2dpY2FsVG9wLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCgpKTsKLSAgICAgICAg
Zm9yIChhdXRvKiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveCA6IGxpbmVCb3hSZWxhdGl2
ZUlubGluZUxldmVsQm94ZXMpIHsKLSAgICAgICAgICAgIGlmICghcXVpcmtzLmlubGluZUxldmVs
Qm94QWZmZWN0c0xpbmVCb3goKmxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94LCBsaW5lQm94
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxpbmVCb3hMb2dpY2Fs
SGVpZ2h0ID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxIZWlnaHQsIGxpbmVCb3hSZWxhdGl2ZUlu
bGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3hMb2dpY2FsSGVpZ2h0KTsKLSAgICB9
OwotICAgIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCgpOwotCi0gICAgYXV0byBjb21wdXRl
Um9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBbJl0gewotICAgICAgICBIYXNoTWFwPGNv
bnN0IExpbmVCb3g6OklubGluZUxldmVsQm94KiwgSW5saW5lTGF5b3V0VW5pdD4gaW5saW5lTGV2
ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwOwotICAgICAgICBpbmxpbmVMZXZlbEJveEFi
c29sdXRlQmFzZWxpbmVPZmZzZXRNYXAuYWRkKCZyb290SW5saW5lQm94LCBJbmxpbmVMYXlvdXRV
bml0IHsgfSk7Ci0KLSAgICAgICAgYXV0byBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVC
b3hCYXNlbGluZSA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKLSAgICAgICAgaWYg
KHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KHJvb3RJbmxpbmVCb3gsIGxpbmVC
b3gpKQotICAgICAgICAgICAgbWF4aW11bVRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxp
bmUgPSByb290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsKLQotICAgICAgICBmb3Ig
KGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygp
KSB7Ci0gICAgICAgICAgICBhdXRvIGFic29sdXRlQmFzZWxpbmVPZmZzZXQgPSBJbmxpbmVMYXlv
dXRVbml0IHsgfTsKLSAgICAgICAgICAgIGlmICghaW5saW5lTGV2ZWxCb3guaGFzTGluZUJveFJl
bGF0aXZlQWxpZ25tZW50KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBp
bmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5w
YXJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRC
YXNlbGluZSA9IElubGluZUxheW91dFVuaXQgeyB9OwotCi0gICAgICAgICAgICAgICAgc3dpdGNo
IChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgotICAgICAgICAgICAgICAgICAgICBiYXNlbGluZU9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gKGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJv
eC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9naWNhbFRvcE9mZnNldEZy
b21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmVNaWRkbGU6IHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOwotICAgICAgICAgICAgICAgICAg
ICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxUb3BPZmZzZXRGcm9t
UGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Okxlbmd0aDogewotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5bGUudmVy
dGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHZl
cnRpY2FsQWxpZ25PZmZzZXQgKyBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAg
ICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2ljYWxUb3BP
ZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgotICAgICAgICAgICAgICAgICAgICBiYXNl
bGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgp
IC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0
b206Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5l
ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtICpwYXJlbnRJbmxpbmVC
b3guZGVzY2VudCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYWJzb2x1dGVCYXNlbGluZU9mZnNldCA9IGlubGluZUxldmVsQm94QWJzb2x1
dGVCYXNlbGluZU9mZnNldE1hcC5nZXQoJnBhcmVudElubGluZUJveCkgKyBiYXNlbGluZU9mZnNl
dEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDogewotICAgICAgICAgICAgICAgICAgICBhYnNv
bHV0ZUJhc2VsaW5lT2Zmc2V0ID0gcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQg
LSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJvdHRvbTogewotICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUJhc2VsaW5l
T2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAtIHJvb3RJbmxp
bmVCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1hcC5hZGQoJmlubGluZUxldmVs
Qm94LCBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0KTsKLSAgICAgICAgICAgIGF1dG8gYWZmZWN0c1Jv
b3RJbmxpbmVCb3hWZXJ0aWNhbFBvc2l0aW9uID0gcXVpcmtzLmlubGluZUxldmVsQm94QWZmZWN0
c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpOwotICAgICAgICAgICAgaWYgKGFmZmVj
dHNSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIGF1dG8g
dG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGFic29sdXRlQmFzZWxpbmVPZmZz
ZXQgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJhc2VsaW5lKQotICAgICAg
ICAgICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9
IHN0ZDo6bWF4KCptYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSwgdG9w
T2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpcyBxdWlyayBtb2RlIGFuZCB0aGUgcm9v
dCBpbmxpbmUgYm94IGhhcyBubyBjb250ZW50LiBUaGUgcm9vdCBpbmxpbmUgYm94J3MgYmFzZWxp
bmUgaXMgYW5jaG9yZWQgYXQgMC4KLSAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciBuZWdh
dGl2ZSBhc2NlbnQgKGUuZyBuZWdhdGl2ZSB0b3AgbWFyZ2luKSBjYW4gInB1c2giIHRoZSByb290
IGlubGluZSBib3ggdXB3YXJkcyBhbmQgaGF2ZSBhIG5lZ2F0aXZlIHZhbHVlLgotICAgICAgICAg
ICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCA+PSAwCi0gICAgICAgICAgICAgICAg
ICAgICAgICA/IHN0ZDo6bWF4KDAuMGYsIHRvcE9mZnNldEZyb21Sb290SW5saW5lQm94QmFzZWxp
bmUpCi0gICAgICAgICAgICAgICAgICAgICAgICA6IHRvcE9mZnNldEZyb21Sb290SW5saW5lQm94
QmFzZWxpbmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGF1dG8gcm9vdElubGluZUJveExvZ2ljYWxUb3AgPSBtYXhpbXVtVG9wT2Zmc2V0RnJv
bVJvb3RJbmxpbmVCb3hCYXNlbGluZS52YWx1ZU9yKDAuZikgLSByb290SW5saW5lQm94LmJhc2Vs
aW5lKCk7Ci0gICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5lQm94
TG9naWNhbFRvcCk7Ci0gICAgfTsKLSAgICBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9z
aXRpb24oKTsKLQotICAgIGF1dG8gYWxpZ25JbmxpbmVMZXZlbEJveGVzID0gWyZdIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVs
Qm94ZXMoKSkgewotICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94
LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAgICAg
ICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAg
IHN3aXRjaCAoaW5saW5lTGV2ZWxCb3gudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3Ag
PSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
Ok1pZGRsZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJl
bnRCYXNlbGluZSA9IChpbmxpbmVMZXZlbEJveC5sb2dpY2FsSGVpZ2h0KCkgLyAyICsgcGFyZW50
SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKLSAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBsb2dpY2Fs
VG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZU1pZGRs
ZTogewotICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNl
bGluZSA9IGlubGluZUxldmVsQm94LmxvZ2ljYWxIZWlnaHQoKSAvIDI7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNhbFRvcE9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVuZ3RoOiB7Ci0gICAgICAg
ICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJveC5zdHlsZSgpOwotICAgICAgICAg
ICAgICAgIGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoc3R5
bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0g
dmVydGljYWxBbGlnbk9mZnNldCArIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gbG9naWNh
bFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCAodGV4dCl0b3AvYm90dG9tIGFs
aWduIHRoZWlyIGxheW91dCBib3VuZHMuCi0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OlRleHRUb3A6Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0
b206Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sb2dpY2Fs
SGVpZ2h0KCkgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5kZXNjZW50IC0gaW5saW5l
TGV2ZWxCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGlubGluZSBib3gu
Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5k
cygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBub3QgcmVsYXRpdmUgdG8g
dGhlIHBhcmVudCBpbmxpbmUgYm94LgotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsaW5l
Qm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmRlc2Nl
bnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVO
VEVEX1lFVCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKLSAgICAgICAg
fQotICAgIH07Ci0gICAgYWxpZ25JbmxpbmVMZXZlbEJveGVzKCk7Ci19Ci0KLUxpbmVCb3hCdWls
ZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdu
bWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElubGluZUJveCkKLSAgICA6
IG1fcm9vdElubGluZUJveChyb290SW5saW5lQm94KQotewotICAgIGFkanVzdChyb290SW5saW5l
Qm94KTsKLX0KLQotYm9vbCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25t
ZW50OjpjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVs
Qm94JiByb290SW5saW5lQm94LCBjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5l
TGV2ZWxCb3gsIE9wdGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBpbmxpbmVMZXZlbEJveEdlb21l
dHJ5KQotewotICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkp
IHsKLSAgICAgICAgQVNTRVJUKGlubGluZUxldmVsQm94R2VvbWV0cnkpOwotICAgICAgICAvLyBC
YXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRjaHkgZGlyZWN0IGNoaWxkcmVuIGFyZSBjb25zaWRl
cmVkIHRvIGJlIHNpbXBsZSBmb3Igbm93LgotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxp
bmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgcmV0dXJuICZsYXlvdXRCb3gucGFyZW50
KCkgPT0gJnJvb3RJbmxpbmVCb3gubGF5b3V0Qm94KCkKLSAgICAgICAgICAgICYmIGxheW91dEJv
eC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZQotICAg
ICAgICAgICAgJiYgIWlubGluZUxldmVsQm94R2VvbWV0cnktPm1hcmdpbkJlZm9yZSgpCi0gICAg
ICAgICAgICAmJiAhaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQWZ0ZXIoKQotICAgICAg
ICAgICAgJiYgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQm94SGVpZ2h0KCkgPD0gcm9v
dElubGluZUJveC5iYXNlbGluZSgpOwotICAgIH0KLSAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNM
aW5lQnJlYWtCb3goKSkgewotICAgICAgICAvLyBCYXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRj
aHkgbGluZSBicmVha3MgZS5nLiA8ZGl2PjxzcGFuPjxicj48L3NwYW4+PC9kaXY+IGJ1dCBub3Qg
PGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMDBweDsiPjxicj48L3NwYW4+PC9kaXY+Lgot
ICAgICAgICByZXR1cm4gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNh
bEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5saW5lTGV2ZWxCb3guYmFz
ZWxpbmUoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgfQotICAgIGlmIChpbmxp
bmVMZXZlbEJveC5pc0lubGluZUJveCgpKSB7Ci0gICAgICAgIC8vIEJhc2VsaW5lIGFsaWduZWQs
IG5vbi1zdHJldGNoeSBpbmxpbmUgYm94ZXMgZS5nLiA8ZGl2PjxzcGFuPjwvc3Bhbj48L2Rpdj4g
YnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4OyI+PC9zcGFuPjwvZGl2
Pi4KLSAgICAgICAgcmV0dXJuIGlubGluZUxldmVsQm94LmxheW91dEJveCgpLnN0eWxlKCkudmVy
dGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lICYmIGlubGluZUxldmVsQm94
LmxheW91dEJvdW5kcygpID09IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCk7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmllZFZl
cnRpY2FsQWxpZ25tZW50OjphbGlnbihMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5lTGV2
ZWxCb3gpCi17Ci0gICAgaWYgKGlubGluZUxldmVsQm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3go
KSB8fCBpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpIHx8IGlubGluZUxldmVsQm94Lmlz
SW5saW5lQm94KCkpIHsKLSAgICAgICAgLy8gT25seSBiYXNlbGluZSBhbGlnbm1lbnQgZm9yIG5v
dy4KLSAgICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbFRvcChtX3Jvb3RJbmxpbmVCb3gu
YmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCkpOwotICAgICAgICBhZGp1c3Qo
aW5saW5lTGV2ZWxCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
SU1QTEVNRU5URURfWUVUKCk7Ci19Ci0KLXZvaWQgTGluZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRW
ZXJ0aWNhbEFsaWdubWVudDo6YWRqdXN0KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94JiBp
bmxpbmVMZXZlbEJveCkKLXsKLSAgICBhdXRvIGxheW91dEJvdW5kc0xvZ2ljYWxUb3AgPSBtX3Jv
b3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm91bmRzKCkuYXNjZW50OwotICAgIG1fbGluZUJveExvZ2ljYWxUb3AgPSBzdGQ6Om1pbihtX2xp
bmVCb3hMb2dpY2FsVG9wLCBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wKTsKLSAgICBtX2xpbmVCb3hM
b2dpY2FsQm90dG9tID0gc3RkOjptYXgobV9saW5lQm94TG9naWNhbEJvdHRvbSwgbGF5b3V0Qm91
bmRzTG9naWNhbFRvcCArIGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpKTsK
LSAgICBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wID0gc3RkOjptYXgobV9yb290SW5saW5lQm94
TG9naWNhbFRvcCwgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbV9yb290
SW5saW5lQm94LmJhc2VsaW5lKCkpOwotfQotCi1MaW5lQm94IElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpM
aW5lQ29udGVudCYgbGluZUNvbnRlbnQpCi17Ci0gICAgcmV0dXJuIExpbmVCb3hCdWlsZGVyKGZv
cm1hdHRpbmdDb250ZXh0KCkpLmJ1aWxkKGxpbmVDb250ZW50KTsKLX0KLQotSW5saW5lTGF5b3V0
VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmxvZ2ljYWxUb3BGb3JOZXh0
TGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBJbmxpbmVM
YXlvdXRVbml0IHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b20sIGNvbnN0IEZsb2F0aW5nQ29udGV4
dCYgZmxvYXRpbmdDb250ZXh0KSBjb25zdAotewotICAgIC8vIE5vcm1hbGx5IHRoZSBuZXh0IGxp
bmUncyBsb2dpY2FsIHRvcCBpcyB0aGUgcHJldmlvdXMgbGluZSdzIGxvZ2ljYWwgYm90dG9tLCBi
dXQgd2hlbiB0aGUgbGluZSBlbmRzCi0gICAgLy8gd2l0aCB0aGUgY2xlYXIgcHJvcGVydHkgc2V0
LCB0aGUgbmV4dCBsaW5lIG5lZWRzIHRvIGNsZWFyIHRoZSBleGlzdGluZyBmbG9hdHMuCi0gICAg
aWYgKGxpbmVDb250ZW50LnJ1bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcHJldmlvdXNM
aW5lTG9naWNhbEJvdHRvbTsKLSAgICBhdXRvJiBsYXN0UnVuTGF5b3V0Qm94ID0gbGluZUNvbnRl
bnQucnVucy5sYXN0KCkubGF5b3V0Qm94KCk7IAotICAgIGlmIChsYXN0UnVuTGF5b3V0Qm94LnN0
eWxlKCkuY2xlYXIoKSA9PSBDbGVhcjo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzTGlu
ZUxvZ2ljYWxCb3R0b207Ci0gICAgYXV0byBwb3NpdGlvbldpdGhDbGVhcmFuY2UgPSBmbG9hdGlu
Z0NvbnRleHQudmVydGljYWxQb3NpdGlvbldpdGhDbGVhcmFuY2UobGFzdFJ1bkxheW91dEJveCk7
Ci0gICAgaWYgKCFwb3NpdGlvbldpdGhDbGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBwcmV2aW91
c0xpbmVMb2dpY2FsQm90dG9tOwotICAgIHJldHVybiBzdGQ6Om1heChwcmV2aW91c0xpbmVMb2dp
Y2FsQm90dG9tLCBJbmxpbmVMYXlvdXRVbml0KHBvc2l0aW9uV2l0aENsZWFyYW5jZS0+cG9zaXRp
b24pKTsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBm
b3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc0luRmxvdygpKTsKLQotICAgIC8vIDEwLjMuMTAgJ0lubGluZS1ibG9jaycsIHJlcGxhY2Vk
IGVsZW1lbnRzIGluIG5vcm1hbCBmbG93Ci0KLSAgICAvLyBFeGFjdGx5IGFzIGlubGluZSByZXBs
YWNlZCBlbGVtZW50cy4KLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290LmlzUmVwbGFjZWRC
b3goKSkKLSAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGRvd25jYXN0PFJlcGxhY2VkQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpLCBob3Jpem9udGFs
Q29uc3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwotCi0gICAgLy8g
MTAuMy45ICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZs
b3cKLQotICAgIC8vIElmICd3aWR0aCcgaXMgJ2F1dG8nLCB0aGUgdXNlZCB2YWx1ZSBpcyB0aGUg
c2hyaW5rLXRvLWZpdCB3aWR0aCBhcyBmb3IgZmxvYXRpbmcgZWxlbWVudHMuCi0gICAgLy8gQSBj
b21wdXRlZCB2YWx1ZSBvZiAnYXV0bycgZm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdo
dCcgYmVjb21lcyBhIHVzZWQgdmFsdWUgb2YgJzAnLgotICAgIC8vICMxCi0gICAgYXV0byB3aWR0
aCA9IGNvbXB1dGVkVmFsdWUoZm9ybWF0dGluZ0NvbnRleHRSb290LnN0eWxlKCkubG9naWNhbFdp
ZHRoKCksIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwotICAgIGlmICghd2lk
dGgpCi0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwotCi0gICAgLy8gIzIKLSAg
ICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6
b250YWxNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OwotCi0gICAgcmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgeyBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwX2x1KSwgY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpIH0gfTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1hcmdp
biBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrQ29udGVudEhl
aWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlv
dXRCb3guaXNJbkZsb3coKSk7Ci0KLSAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1l
bnRzLCBibG9jay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGlu
ZS1ibG9jaycgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJl
cGxhY2VkIGVsZW1lbnRzCi0gICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAg
ICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8
UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpOwotCi0gICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2Vz
Ci0gICAgLy8gLSAnSW5saW5lLWJsb2NrJywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzLgotICAgIHJl
dHVybiBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTg3ZGZmNGJkODI3YzBiM2ZlMWYxZDJiY2Q0OGE5Yjg4MTRiMWRjOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSw3MzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5Lmgi
CisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZs
b2F0aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW5saW5lTGluZUJveC5oIgorI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIkxh
eW91dENvbnRhaW5lckJveC5oIgorI2luY2x1ZGUgIkxheW91dFJlcGxhY2VkQm94LmgiCisjaW5j
bHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBMYXlvdXQgeworCitjbGFzcyBMaW5lQm94QnVpbGRlciB7CitwdWJsaWM6CisgICAgTGluZUJv
eEJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKKyAgICBMaW5lQm94IGJ1
aWxkKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYpOworCitwcml2YXRlOgorICAgIHN0
cnVjdCBTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQgeworICAgICAgICBTaW1wbGlmaWVkVmVy
dGljYWxBbGlnbm1lbnQoY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVC
b3gpOworCisgICAgICAgIHN0YXRpYyBib29sIGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoY29u
c3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIHJvb3RJbmxpbmVCb3gsIGNvbnN0IExpbmVCb3g6
OklubGluZUxldmVsQm94JiwgT3B0aW9uYWw8Y29uc3QgQm94R2VvbWV0cnk+IGlubGluZUxldmVs
Qm94R2VvbWV0cnkpOworCisgICAgICAgIHZvaWQgYWxpZ24oTGluZUJveDo6SW5saW5lTGV2ZWxC
b3gmKTsKKworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHJvb3RJbmxpbmVCb3hMb2dpY2FsVG9w
KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94TG9naWNhbFRvcDsgfQorICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IGxpbmVCb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hM
b2dpY2FsQm90dG9tIC0gbV9saW5lQm94TG9naWNhbFRvcDsgfQorCisgICAgICAgIHZvaWQgc2V0
RW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9pc0VuYWJsZWQgPSBlbmFibGVkOyB9CisgICAgICAg
IGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0VuYWJsZWQ7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgYWRqdXN0KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94
Jik7CisKKyAgICAgICAgY29uc3QgTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIG1fcm9vdElubGlu
ZUJveDsKKyAgICAgICAgYm9vbCBtX2lzRW5hYmxlZCB7IHRydWUgfTsKKyAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBtX2xpbmVCb3hMb2dpY2FsVG9wIHsgMCB9OworICAgICAgICBJbmxpbmVMYXlv
dXRVbml0IG1fbGluZUJveExvZ2ljYWxCb3R0b20geyAwIH07CisgICAgICAgIElubGluZUxheW91
dFVuaXQgbV9yb290SW5saW5lQm94TG9naWNhbFRvcCB7IDAgfTsKKyAgICB9OworCisgICAgdm9p
ZCBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KExpbmVCb3g6OklubGluZUxldmVsQm94
JikgY29uc3Q7CisgICAgdm9pZCBjb25zdHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMoTGlu
ZUJveCYsIGNvbnN0IExpbmU6OlJ1bkxpc3QmKTsKKyAgICB2b2lkIGNvbXB1dGVMaW5lQm94SGVp
Z2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lQm94Jik7CisKKyAgICBj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9CisgICAgY29uc3QgQm94JiByb290
Qm94KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0KKyAgICBM
YXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4
dCgpLmxheW91dFN0YXRlKCk7IH0KKworICAgIGJvb2wgaXNSb290TGF5b3V0Qm94KGNvbnN0IENv
bnRhaW5lckJveCYgY29udGFpbmVyQm94KSBjb25zdCB7IHJldHVybiAmY29udGFpbmVyQm94ID09
ICZyb290Qm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK307CisKK3N0cnVjdCBIYW5naW5nVHJh
aWxpbmdXaGl0ZXNwYWNlQ29udGVudCB7CitwdWJsaWM6CisgICAgdm9pZCByZXNldCgpOworCisg
ICAgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAg
ICBib29sIGlzQ29uZGl0aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uZGl0aW9uYWw7IH0K
KworICAgIHZvaWQgc2V0SXNDb25kaXRpb25hbCgpIHsgbV9pc0NvbmRpdGlvbmFsID0gdHJ1ZTsg
fQorICAgIHZvaWQgZXhwYW5kKElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCArPSB3
aWR0aDsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9pc0NvbmRpdGlvbmFsIHsgZmFsc2UgfTsK
KyAgICBJbmxpbmVMYXlvdXRVbml0IG1fd2lkdGggeyAwIH07Cit9OworCit2b2lkIEhhbmdpbmdU
cmFpbGluZ1doaXRlc3BhY2VDb250ZW50OjpyZXNldCgpCit7CisgICAgbV9pc0NvbmRpdGlvbmFs
ID0gZmFsc2U7CisgICAgbV93aWR0aCA9ICAwOworfQorCitzdGF0aWMgSGFuZ2luZ1RyYWlsaW5n
V2hpdGVzcGFjZUNvbnRlbnQgY29sbGVjdEhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50
KGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KQoreworICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nVHJhaWxpbmdXaGl0ZXNw
YWNlQ29udGVudCB7IH07CisgICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKKyAg
ICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOworICAgIGZvciAoYXV0byYg
cnVuIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShydW5zKSkgeworICAgICAgICBpZiAocnVuLmlz
SW5saW5lQm94U3RhcnQoKSB8fCBydW4uaXNJbmxpbmVCb3hFbmQoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGhh
bmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQg
b3IgaHVuZyB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgp
ICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8g
VGhpcyBpcyBlaXRoZXIgYSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5n
IHdoaXRlc3BhY2UuCisgICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdX
aGl0ZXNwYWNlV2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKK30K
Kworc3RhdGljIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRP
ZmZzZXQoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24s
IElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbFdpZHRoLCBib29sIGlzTGFzdExpbmUpCit7CisgICAgYXV0byBhdmFpbGFibGVX
aWR0aCA9IGxpbmVMb2dpY2FsV2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoOworICAgIGF1dG8g
aGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ1RyYWlsaW5n
V2hpdGVzcGFjZUNvbnRlbnQocnVucywgaXNMYXN0TGluZSk7CisgICAgYXZhaWxhYmxlV2lkdGgg
Kz0gaGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRlbnQud2lkdGgoKTsKKyAgICBpZiAoYXZh
aWxhYmxlV2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gY29tcHV0
ZWRIb3Jpem9udGFsQWxpZ25tZW50ID0gWyZdIHsKKyAgICAgICAgaWYgKHRleHRBbGlnbiAhPSBU
ZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQorICAgICAgICAgICAgcmV0dXJuIHRleHRBbGlnbjsKKyAg
ICAgICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lm
aWVkIGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJvcGVydHksCisgICAgICAgIC8vIGluIG9yZGVyIHRv
IGV4YWN0bHkgZmlsbCB0aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5
IHRleHQtYWxpZ24tbGFzdCwKKyAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3Jj
ZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAg
ICAgaWYgKGlzTGFzdExpbmUgfHwgKCFydW5zLmlzRW1wdHkoKSAmJiBydW5zLmxhc3QoKS5pc0xp
bmVCcmVhaygpKSkKKyAgICAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKKyAg
ICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7CisgICAgfTsKKworICAgIHN3aXRj
aCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KCkpIHsKKyAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OkxlZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6U3RhcnQ6CisgICAgICAgIHJldHVybiB7IH07CisgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0Ogor
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAgICByZXR1cm4gYXZhaWxhYmxlV2lk
dGg7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCAvIDI7Cisg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAvLyBUZXh0QWxpZ25Nb2Rl
OjpKdXN0aWZ5IGlzIGEgcnVuIGFsaWdubWVudCAoYW5kIHdlIG9ubHkgZG8gaW5saW5lIGJveCBh
bGlnbm1lbnQgaGVyZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitMaW5l
Qm94QnVpbGRlcjo6TGluZUJveEJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4
dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKK3sKK30KKworTGluZUJveCBMaW5lQm94QnVpbGRl
cjo6YnVpbGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKK3sK
KyAgICBhdXRvJiBydW5zID0gbGluZUNvbnRlbnQucnVuczsKKyAgICBhdXRvIGxpbmVMb2dpY2Fs
V2lkdGggPSBsaW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRoOworICAgIGF1dG8gY29udGVudExv
Z2ljYWxXaWR0aCA9IGxpbmVDb250ZW50LmNvbnRlbnRMb2dpY2FsV2lkdGg7CisgICAgYXV0byBo
b3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0ID0gTGF5b3V0Ojpob3Jpem9udGFsQWxpZ25tZW50T2Zm
c2V0KHJ1bnMsIHJvb3RCb3goKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lTG9naWNhbFdpZHRo
LCBjb250ZW50TG9naWNhbFdpZHRoLCBsaW5lQ29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQpOworICAgIGF1dG8gbGluZUJveCA9IExpbmVCb3ggeyByb290Qm94KCksIGxpbmVDb250
ZW50LmxvZ2ljYWxUb3BMZWZ0LCBsaW5lTG9naWNhbFdpZHRoLCBob3Jpem9udGFsQWxpZ25tZW50
T2Zmc2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pLCBjb250ZW50TG9naWNhbFdpZHRo
LCBsaW5lQ29udGVudC5ub25TcGFubmluZ0lubGluZUxldmVsQm94Q291bnQgfTsKKyAgICBjb25z
dHJ1Y3RBbmRBbGlnbklubGluZUxldmVsQm94ZXMobGluZUJveCwgcnVucyk7CisgICAgcmV0dXJu
IGxpbmVCb3g7Cit9CisKK3ZvaWQgTGluZUJveEJ1aWxkZXI6OnNldFZlcnRpY2FsR2VvbWV0cnlG
b3JJbmxpbmVCb3goTGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KSBjb25z
dAoreworICAgIEFTU0VSVChpbmxpbmVMZXZlbEJveC5pc0lubGluZUJveCgpIHx8IGlubGluZUxl
dmVsQm94LmlzTGluZUJyZWFrQm94KCkpOworICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gaW5saW5l
TGV2ZWxCb3guc3R5bGUoKS5mb250TWV0cmljcygpOworICAgIElubGluZUxheW91dFVuaXQgYXNj
ZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisgICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50
ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOworICAgIGF1dG8gbG9naWNhbEhlaWdodCA9IGFzY2Vu
dCArIGRlc2NlbnQ7CisgICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBs
YXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCisgICAgaW5saW5lTGV2ZWxCb3guc2V0QmFzZWxp
bmUoZmxvb3JmKGFzY2VudCkpOworICAgIGlubGluZUxldmVsQm94LnNldERlc2NlbnQoY2VpbChk
ZXNjZW50KSk7CisgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVp
Z2h0KTsKKworICAgIC8vIEZJWE1FOiBBZGp1c3QgbGF5b3V0IGJvdW5kcyB3aXRoIGZhbGxiYWNr
IGZvbnQgd2hlbiBhcHBsaWNhYmxlLgorICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2ZWxCb3gu
bGF5b3V0Qm94KCkuc3R5bGUoKTsKKyAgICBhdXRvIGxpbmVIZWlnaHQgPSBzdHlsZS5saW5lSGVp
Z2h0KCk7CisgICAgaWYgKGxpbmVIZWlnaHQuaXNOZWdhdGl2ZSgpKSB7CisgICAgICAgIC8vIElm
IGxpbmUtaGVpZ2h0IGNvbXB1dGVzIHRvIG5vcm1hbCBhbmQgZWl0aGVyIHRleHQtZWRnZSBpcyBs
ZWFkaW5nIG9yIHRoaXMgaXMgdGhlIHJvb3QgaW5saW5lIGJveCwKKyAgICAgICAgLy8gdGhlIGZv
bnTigJlzIGxpbmUgZ2FwIG1ldHJpYyBtYXkgYWxzbyBiZSBpbmNvcnBvcmF0ZWQgaW50byBBIGFu
ZCBEIGJ5IGFkZGluZyBoYWxmIHRvIGVhY2ggc2lkZSBhcyBoYWxmLWxlYWRpbmcuCisgICAgICAg
IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2lubGluZS1oZWlnaHQKKyAg
ICAgICAgLy8gU2luY2UgdGV4dC1lZGdlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGFuZCB0aGUgaW5p
dGlhbCB2YWx1ZSBpcyBsZWFkaW5nLCB3ZSBzaG91bGQganVzdCBhcHBseSBpdCB0bworICAgICAg
ICAvLyBhbGwgaW5saW5lIGJveGVzLgorICAgICAgICBhdXRvIGhhbGZMaW5lR2FwID0gKGZvbnRN
ZXRyaWNzLmxpbmVTcGFjaW5nKCkgLSBsb2dpY2FsSGVpZ2h0KSAvIDI7CisgICAgICAgIGFzY2Vu
dCArPSBoYWxmTGluZUdhcDsKKyAgICAgICAgZGVzY2VudCArPSBoYWxmTGluZUdhcDsKKyAgICB9
IGVsc2UgeworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBzdHlsZS5jb21w
dXRlZExpbmVIZWlnaHQoKTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBoYWxmTGVhZGluZyA9
IChsaW5lSGVpZ2h0IC0gKGFzY2VudCArIGRlc2NlbnQpKSAvIDI7CisgICAgICAgIGFzY2VudCAr
PSBoYWxmTGVhZGluZzsKKyAgICAgICAgZGVzY2VudCArPSBoYWxmTGVhZGluZzsKKyAgICB9Cisg
ICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwg
cG9zaXRpb25pbmcuCisgICAgaW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRzKExpbmVCb3g6
OklubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBmbG9vcmYoYXNjZW50KSwgY2VpbChkZXNj
ZW50KSB9KTsKK30KKwordm9pZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0QW5kQWxpZ25Jbmxp
bmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMp
Cit7CisgICAgYXV0byYgcm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJveCgpOwor
ICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3gocm9vdElubGluZUJveCk7CisKKyAg
ICBhdXRvIHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudCA9IFNpbXBsaWZpZWRWZXJ0aWNhbEFs
aWdubWVudCB7IHJvb3RJbmxpbmVCb3ggfTsKKyAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aCBz
dXBwb3J0IGZvciBsaW5lLWhlaWdodCBjb250ZW50LgorICAgIHNpbXBsaWZpZWRWZXJ0aWNhbEFs
aWdubWVudC5zZXRFbmFibGVkKGxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2RlKCkgJiYgcm9v
dEJveCgpLnN0eWxlKCkubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSk7CisKKyAgICBhdXRvIHNp
bXBsaWZpZWRBbGlnblZlcnRpY2FsbHlJZkFwcGxpY2FibGUgPSBbJl0oYXV0byYgaW5saW5lTGV2
ZWxCb3gsIE9wdGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBib3hHZW9tZXRyeSkgeworICAgICAg
ICBpZiAoIXNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5pc0VuYWJsZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmNh
blVzZVNpbXBsaWZpZWRBbGlnbm1lbnQocm9vdElubGluZUJveCwgaW5saW5lTGV2ZWxCb3gsIGJv
eEdlb21ldHJ5KSkgeworICAgICAgICAgICAgc2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50LnNl
dEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudC5hbGlnbihpbmxpbmVMZXZlbEJveCk7CisgICAg
fTsKKworICAgIGF1dG8gY3JlYXRlV3JhcHBlZElubGluZUJveGVzID0gWyZdIHsKKyAgICAgICAg
aWYgKHJ1bnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBBbiBp
bmxpbmUgYm94IG1heSBub3QgbmVjZXNzYXJpbHkgc3RhcnQgb24gdGhlIGN1cnJlbnQgbGluZToK
KyAgICAgICAgLy8gPHNwYW4gaWQ9b3V0ZXI+bGluZSBicmVhazxicj50aGlzIGNvbnRlbnQncyBw
YXJlbnQgaW5saW5lIGJveCgnb3V0ZXInKSA8c3BhbiBpZD1pbm5lcj5zdGFydHMgb24gdGhlIHBy
ZXZpb3VzIGxpbmU8L3NwYW4+PC9zcGFuPgorICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGF0IHRoZXJlJ3MgYW4gTGluZUJveDo6SW5saW5lTGV2ZWxCb3ggZm9yIGV2ZXJ5IGlubGlu
ZSBib3ggdGhhdCdzIHByZXNlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KKyAgICAgICAgLy8gSW4g
bmVzdGluZyBjYXNlIHdlIG5lZWQgdG8gY3JlYXRlIExpbmVCb3g6OklubGluZUxldmVsQm94ZXMg
Zm9yIHRoZSBpbmxpbmUgYm94IGFuY2VzdG9ycy4KKyAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRv
IGRvIGl0IG9uIHRoZSBmaXJzdCBydW4gYXMgYW55IHN1YnNlcXVlbnQgaW5saW5lIGNvbnRlbnQg
aXMgZWl0aGVyIGF0IHRoZSBzYW1lL2hpZ2hlciBuZXN0aW5nIGxldmVsIG9yCisgICAgICAgIC8v
IG5lc3RlZCB3aXRoIGEgW2lubGluZSBib3ggc3RhcnRdIHJ1bi4KKyAgICAgICAgYXV0byYgZmly
c3RSdW4gPSBydW5zWzBdOworICAgICAgICBhdXRvJiBmaXJzdFJ1blBhcmVudExheW91dEJveCA9
IGZpcnN0UnVuLmxheW91dEJveCgpLnBhcmVudCgpOworICAgICAgICAvLyBJZiB0aGUgcGFyZW50
IGlzIHRoZSBmb3JtYXR0aW5nIHJvb3QsIHdlIGNhbiBzdG9wIGhlcmUuIFRoaXMgaXMgcm9vdCBp
bmxpbmUgYm94IGNvbnRlbnQsIHRoZXJlJ3Mgbm8gbmVzdGluZyBpbmxpbmUgYm94IGZyb20gdGhl
IHByZXZpb3VzIGxpbmUocykKKyAgICAgICAgLy8gdW5sZXNzIHRoZSBpbmxpbmUgYm94IGNsb3Np
bmcgaXMgZm9yY2VkIG92ZXIgdG8gdGhlIGN1cnJlbnQgbGluZS4KKyAgICAgICAgLy8gZS5nLgor
ICAgICAgICAvLyA8c3Bhbj5ub3JtYWxseSB0aGUgaW5saW5lIGJveCBjbG9zaW5nIGZvcm1zIGEg
Y29udGludW91cyBjb250ZW50PC9zcGFuPgorICAgICAgICAvLyA8c3Bhbj51bmxlc3MgaXQncyBm
b3JjZWQgdG8gdGhlIG5leHQgbGluZTxicj48L3NwYW4+CisgICAgICAgIGF1dG8gZmlyc3RSdW5O
ZWVkc0lubGluZUJveCA9IGZpcnN0UnVuLmlzSW5saW5lQm94RW5kKCk7CisgICAgICAgIGlmICgh
Zmlyc3RSdW5OZWVkc0lubGluZUJveCAmJiBpc1Jvb3RMYXlvdXRCb3goZmlyc3RSdW5QYXJlbnRM
YXlvdXRCb3gpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBWZWN0b3I8Y29uc3QgQm94
Kj4gbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXM7CisgICAgICAgIGlmIChmaXJzdFJ1bk5l
ZWRzSW5saW5lQm94KQorICAgICAgICAgICAgbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXMu
YXBwZW5kKCZmaXJzdFJ1bi5sYXlvdXRCb3goKSk7CisgICAgICAgIGF1dG8qIGFuY2VzdG9yID0g
JmZpcnN0UnVuUGFyZW50TGF5b3V0Qm94OworICAgICAgICB3aGlsZSAoIWlzUm9vdExheW91dEJv
eCgqYW5jZXN0b3IpKSB7CisgICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hl
cy5hcHBlbmQoYW5jZXN0b3IpOworICAgICAgICAgICAgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPnBh
cmVudCgpOworICAgICAgICB9CisgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbWlzc2luZyBMaW5l
Qm94OjpJbmxpbmVCb3hlcyBzdGFydGluZyB3aXRoIHRoZSB0b3Btb3N0IGxheW91dCBib3guCisg
ICAgICAgIGZvciAoYXV0byogbGF5b3V0Qm94IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShsYXlv
dXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcykpIHsKKyAgICAgICAgICAgIGF1dG8gaW5saW5lQm94
ID0gTGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveCgqbGF5b3V0Qm94LCBy
b290SW5saW5lQm94LmxvZ2ljYWxMZWZ0KCksIGxpbmVCb3guY29udGVudExvZ2ljYWxXaWR0aCgp
KTsKKyAgICAgICAgICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goaW5saW5lQm94
KTsKKyAgICAgICAgICAgIHNpbXBsaWZpZWRBbGlnblZlcnRpY2FsbHlJZkFwcGxpY2FibGUoaW5s
aW5lQm94LCB7IH0pOworICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZN
b3ZlKGlubGluZUJveCkpOworICAgICAgICB9CisgICAgfTsKKyAgICBjcmVhdGVXcmFwcGVkSW5s
aW5lQm94ZXMoKTsKKworICAgIGF1dG8gbGluZUhhc0NvbnRlbnQgPSBmYWxzZTsKKyAgICBmb3Ig
KGF1dG8mIHJ1biA6IHJ1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91
dEJveCgpOworICAgICAgICBhdXRvIHJ1bkhhc0NvbnRlbnQgPSBbJl0gKCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWxpbmVIYXNDb250ZW50KTsKKyAgICAgICAgICAgIGlmIChydW4u
aXNUZXh0KCkgfHwgcnVuLmlzQm94KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpIHx8IHJ1bi5p
c0hhcmRMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIGF1dG8mIGlubGluZUJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgLy8gRXZlbiBuZWdhdGl2ZSBob3Jpem9u
dGFsIG1hcmdpbiBtYWtlcyB0aGUgbGluZSAiY29udGVudGZ1bCIuCisgICAgICAgICAgICBpZiAo
cnVuLmlzSW5saW5lQm94U3RhcnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lQm94
R2VvbWV0cnkubWFyZ2luU3RhcnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCkg
fHwgaW5saW5lQm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDBfbHUpOworICAgICAg
ICAgICAgaWYgKHJ1bi5pc0lubGluZUJveEVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBp
bmxpbmVCb3hHZW9tZXRyeS5tYXJnaW5FbmQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJS
aWdodCgpIHx8IGlubGluZUJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMF9sdSk7
CisgICAgICAgICAgICBpZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworICAgICAgICBsaW5lSGFzQ29u
dGVudCA9IGxpbmVIYXNDb250ZW50IHx8IHJ1bkhhc0NvbnRlbnQoKTsKKyAgICAgICAgYXV0byBs
b2dpY2FsTGVmdCA9IHJvb3RJbmxpbmVCb3gubG9naWNhbExlZnQoKSArIHJ1bi5sb2dpY2FsTGVm
dCgpOworICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGlubGlu
ZUxldmVsQm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7CisgICAgICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGlubGluZUxldmVs
Qm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7CisgICAgICAgICAgICBhdXRvIGFzY2VudCA9
IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlKCkuc2hv
dWxkTm90U3ludGhlc2l6ZUlubGluZUJsb2NrQmFzZWxpbmUoKSkgeworICAgICAgICAgICAgICAg
IC8vIEludGVncmF0aW9uIGNvZGVwYXRoIGNvbnN0cnVjdHMgcmVwbGFjZWQgYm94ZXMgZm9yIGlu
bGluZS1ibG9jayBjb250ZW50LgorICAgICAgICAgICAgICAgIEFTU0VSVChsYXlvdXRCb3guaXNS
ZXBsYWNlZEJveCgpKTsKKyAgICAgICAgICAgICAgICBhc2NlbnQgPSAqZG93bmNhc3Q8UmVwbGFj
ZWRCb3g+KGxheW91dEJveCkuYmFzZWxpbmUoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5
b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNl
bGluZSBvZiBhbiAnaW5saW5lLWJsb2NrJyBpcyB0aGUgYmFzZWxpbmUgb2YgaXRzIGxhc3QgbGlu
ZSBib3ggaW4gdGhlIG5vcm1hbCBmbG93LCB1bmxlc3MgaXQgaGFzIGVpdGhlciBubyBpbi1mbG93
IGxpbmUgYm94ZXMgb3IKKyAgICAgICAgICAgICAgICAvLyBpZiBpdHMgJ292ZXJmbG93JyBwcm9w
ZXJ0eSBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvdGhlciB0aGFuICd2aXNpYmxlJywgaW4gd2hpY2gg
Y2FzZSB0aGUgYmFzZWxpbmUgaXMgdGhlIGJvdHRvbSBtYXJnaW4gZWRnZS4KKyAgICAgICAgICAg
ICAgICBhdXRvIHN5bnRoZXNpemVCYXNlbGluZSA9ICFsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCgpIHx8ICFsYXlvdXRCb3guc3R5bGUoKS5pc092ZXJmbG93Vmlz
aWJsZSgpOworICAgICAgICAgICAgICAgIGlmIChzeW50aGVzaXplQmFzZWxpbmUpCisgICAgICAg
ICAgICAgICAgICAgIGFzY2VudCA9IG1hcmdpbkJveEhlaWdodDsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0
U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWlu
ZXJCb3g+KGxheW91dEJveCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZSA9
IGZvcm1hdHRpbmdTdGF0ZS5saW5lcygpLmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmxpbmVCbG9ja0Jhc2VsaW5lID0gbGFzdExpbmUubGluZUJveExvZ2ljYWxSZWN0KCkudG9w
KCkgKyBsYXN0TGluZS5iYXNlbGluZSgpOworICAgICAgICAgICAgICAgICAgICBhc2NlbnQgPSBp
bmxpbmVMZXZlbEJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgaW5saW5lTGV2ZWxCb3hHZW9t
ZXRyeS5ib3JkZXJUb3AoKSArIGlubGluZUxldmVsQm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZh
bHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgICAg
ICAgICBhc2NlbnQgPSBkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgp
LnZhbHVlT3IobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhc2NlbnQgPSBtYXJnaW5Cb3hIZWlnaHQ7CisgICAgICAgICAgICBsb2dpY2FsTGVmdCAr
PSBzdGQ6Om1heCgwX2x1LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkpOwor
ICAgICAgICAgICAgYXV0byBhdG9taWNJbmxpbmVMZXZlbEJveCA9IExpbmVCb3g6OklubGluZUxl
dmVsQm94OjpjcmVhdGVBdG9taWNJbmxpbmVMZXZlbEJveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0
LCB7IGlubGluZUxldmVsQm94R2VvbWV0cnkuYm9yZGVyQm94V2lkdGgoKSwgbWFyZ2luQm94SGVp
Z2h0IH0pOworICAgICAgICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoYXNj
ZW50KTsKKyAgICAgICAgICAgIGF0b21pY0lubGluZUxldmVsQm94LnNldExheW91dEJvdW5kcyhM
aW5lQm94OjpJbmxpbmVMZXZlbEJveDo6TGF5b3V0Qm91bmRzIHsgYXNjZW50LCBtYXJnaW5Cb3hI
ZWlnaHQgLSBhc2NlbnQgfSk7CisgICAgICAgICAgICBzaW1wbGlmaWVkQWxpZ25WZXJ0aWNhbGx5
SWZBcHBsaWNhYmxlKGF0b21pY0lubGluZUxldmVsQm94LCBpbmxpbmVMZXZlbEJveEdlb21ldHJ5
KTsKKyAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShhdG9taWNJ
bmxpbmVMZXZlbEJveCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHJ1bi5pc0lubGluZUJveFN0YXJ0KCkpIHsKKyAgICAgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQgd2UgZG9uJ3Qga25vdyB5ZXQgaG93IHdpZGUgdGhpcyBpbmxpbmUgYm94IGlzLiBMZXQn
cyBhc3N1bWUgaXQncyBhcyBsb25nIGFzIHRoZSBsaW5lIGlzCisgICAgICAgICAgICAvLyBhbmQg
YWRqdXN0IGl0IGxhdGVyIGlmIHdlIGNvbWUgYWNyb3NzIGFuIGlubGluZUJveEVuZCBydW4gKHNl
ZSBiZWxvdykuCisgICAgICAgICAgICBhdXRvIGluaXRpYWxMb2dpY2FsV2lkdGggPSBsaW5lQm94
LmNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHJ1bi5sb2dpY2FsTGVmdCgpOworICAgICAgICAgICAg
QVNTRVJUKGluaXRpYWxMb2dpY2FsV2lkdGggPj0gMCk7CisgICAgICAgICAgICAvLyBJbmxpbmUg
Ym94IHJ1biBpcyBiYXNlZCBvbiBtYXJnaW4gYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRl
ciBib3guCisgICAgICAgICAgICBhdXRvIG1hcmdpblN0YXJ0ID0gc3RkOjptYXgoMF9sdSwgZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCkp
OworICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gbWFyZ2luU3RhcnQ7CisgICAgICAgICAgICBp
bml0aWFsTG9naWNhbFdpZHRoIC09IG1hcmdpblN0YXJ0OworICAgICAgICAgICAgYXV0byBpbmxp
bmVCb3ggPSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91dEJv
eCwgbG9naWNhbExlZnQsIGluaXRpYWxMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgc2V0VmVy
dGljYWxHZW9tZXRyeUZvcklubGluZUJveChpbmxpbmVCb3gpOworICAgICAgICAgICAgc2ltcGxp
ZmllZEFsaWduVmVydGljYWxseUlmQXBwbGljYWJsZShpbmxpbmVCb3gsIHsgfSk7CisgICAgICAg
ICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94
RW5kKCkpIHsKKyAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRo
ZSBpbmxpbmUgYm94IGNsb3NlcyBvbiB0aGlzIGxpbmUuCisgICAgICAgICAgICBhdXRvJiBpbmxp
bmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOworICAgICAgICAgICAg
Ly8gSW5saW5lIGJveCBydW4gaXMgYmFzZWQgb24gbWFyZ2luIGJveC4gTGV0J3MgY29udmVydCBp
dCB0byBib3JkZXIgYm94LgorICAgICAgICAgICAgYXV0byBtYXJnaW5FbmQgPSBzdGQ6Om1heCgw
X2x1LCBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2lu
RW5kKCkpOworICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsUmlnaHQgPSBsb2dpY2Fs
TGVmdCArIHJ1bi5sb2dpY2FsV2lkdGgoKSAtIG1hcmdpbkVuZDsKKyAgICAgICAgICAgIGlubGlu
ZUJveC5zZXRMb2dpY2FsV2lkdGgoaW5saW5lQm94TG9naWNhbFJpZ2h0IC0gaW5saW5lQm94Lmxv
Z2ljYWxMZWZ0KCkpOworICAgICAgICAgICAgc2ltcGxpZmllZEFsaWduVmVydGljYWxseUlmQXBw
bGljYWJsZShpbmxpbmVCb3gsIHsgfSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc1NvZnRMaW5lQnJlYWsoKSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IEFkanVzdCBub24tZW1wdHkgaW5saW5lIGJveCBoZWlnaHQg
d2hlbiBnbHlwaHMgZnJvbSB0aGUgbm9uLXByaW1hcnkgZm9udCBzdHJldGNoIHRoZSBib3guCisg
ICAgICAgICAgICBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5w
YXJlbnQoKSkuc2V0SGFzQ29udGVudCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJ1bi5pc0hhcmRMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgYXV0
byBsaW5lQnJlYWtCb3ggPSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlTGluZUJyZWFr
Qm94KGxheW91dEJveCwgbG9naWNhbExlZnQpOworICAgICAgICAgICAgc2V0VmVydGljYWxHZW9t
ZXRyeUZvcklubGluZUJveChsaW5lQnJlYWtCb3gpOworICAgICAgICAgICAgc2ltcGxpZmllZEFs
aWduVmVydGljYWxseUlmQXBwbGljYWJsZShsaW5lQnJlYWtCb3gsIHsgfSk7CisgICAgICAgICAg
ICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUobGluZUJyZWFrQm94KSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnVuLmlzV29yZEJyZWFr
T3Bwb3J0dW5pdHkoKSkgeworICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChM
aW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlR2VuZXJpY0lubGluZUxldmVsQm94KGxheW91
dEJveCwgbG9naWNhbExlZnQpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGxpbmVCb3guc2V0SGFz
Q29udGVudChsaW5lSGFzQ29udGVudCk7CisgICAgaWYgKHNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdu
bWVudC5pc0VuYWJsZWQoKSB8fCAhbGluZUhhc0NvbnRlbnQpIHsKKyAgICAgICAgLy8gV2Ugc2hv
dWxkIGFsd2F5cyBiZSBhYmxlIHRvIGV4ZXJjaXNlIHRoZSBmYXN0IHBhdGggd2hlbiB0aGUgbGlu
ZSBoYXMgbm8gY29udGVudCBhdCBhbGwsIGV2ZW4gaW4gbm9uLXN0YW5kYXJkcyBtb2RlIG9yIHdp
dGggbGluZS1oZWlnaHQgc2V0LgorICAgICAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3Ao
bGluZUhhc0NvbnRlbnQgPyBzaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQucm9vdElubGluZUJv
eExvZ2ljYWxUb3AoKSA6IC1yb290SW5saW5lQm94LmJhc2VsaW5lKCkpOworICAgICAgICBsaW5l
Qm94LnNldExvZ2ljYWxIZWlnaHQobGluZUhhc0NvbnRlbnQgPyBzaW1wbGlmaWVkVmVydGljYWxB
bGlnbm1lbnQubGluZUJveEhlaWdodCgpIDogSW5saW5lTGF5b3V0VW5pdCgpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgY29tcHV0ZUxpbmVCb3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94ZXNW
ZXJ0aWNhbGx5KGxpbmVCb3gpOworfQorCit2b2lkIExpbmVCb3hCdWlsZGVyOjpjb21wdXRlTGlu
ZUJveEhlaWdodEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2FsbHkoTGluZUJveCYgbGlu
ZUJveCkKK3sKKyAgICBBU1NFUlQobGluZUJveC5oYXNDb250ZW50KCkpOworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gKHBhcnRpYWxseSkgaW1wbGVtZW50czoKKyAgICAvLyAyLjIuIExheW91dCBXaXRo
aW4gTGluZSBCb3hlcworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMv
I2xpbmUtbGF5b3V0CisgICAgLy8gMS4gQ29tcHV0ZSB0aGUgbGluZSBib3ggaGVpZ2h0IHVzaW5n
IHRoZSBsYXlvdXQgYm91bmRzIGdlb21ldHJ5LiBUaGlzIGhlaWdodCBjb21wdXRhdGlvbiBzdHJp
Y3RseSB1c2VzIGxheW91dCBib3VuZHMgYW5kIG5vdCBub3JtYWwgaW5saW5lIGxldmVsIGJveCBn
ZW9tZXRyaWVzLgorICAgIC8vIDIuIENvbXB1dGUgdGhlIGJhc2VsaW5lL2xvZ2ljYWwgdG9wIHBv
c2l0aW9uIG9mIHRoZSByb290IGlubGluZSBib3guIEFsaWduZWQgYm94ZXMgcHVzaCB0aGUgcm9v
dCBpbmxpbmUgYm94IGFyb3VuZCBpbnNpZGUgdGhlIGxpbmUgYm94LgorICAgIC8vIDMuIEZpbmFs
bHkgYWxpZ24gdGhlIGlubGluZSBsZXZlbCBib3hlcyB1c2luZyAobW9zdGx5KSBub3JtYWwgaW5s
aW5lIGxldmVsIGJveCBnZW9tZXRyaWVzLgorICAgIGF1dG8gcXVpcmtzID0gZm9ybWF0dGluZ0Nv
bnRleHQoKS5xdWlya3MoKTsKKyAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290
SW5saW5lQm94KCk7CisKKyAgICBhdXRvIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCA9IFsm
XSB7CisgICAgICAgIC8vIExpbmUgYm94IGhlaWdodCBjb21wdXRhdGlvbiBpcyBiYXNlZCBvbiB0
aGUgbGF5b3V0IGJvdW5kcyBvZiB0aGUgaW5saW5lIGJveGVzIGFuZCBub3QgdGhlaXIgbG9naWNh
bCAoYXNjZW50L2Rlc2NlbnQpIGRpbWVuc2lvbnMuCisgICAgICAgIHN0cnVjdCBBYnNvbHV0ZVRv
cEFuZEJvdHRvbSB7CisgICAgICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRvcCB7IDAgfTsKKyAg
ICAgICAgICAgIElubGluZUxheW91dFVuaXQgYm90dG9tIHsgMCB9OworICAgICAgICB9OworICAg
ICAgICBIYXNoTWFwPGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94KiwgQWJzb2x1dGVUb3BB
bmRCb3R0b20+IGlubGluZUxldmVsQm94QWJzb2x1dGVUb3BBbmRCb3R0b21NYXA7CisKKyAgICAg
ICAgYXV0byBtaW5pbXVtTG9naWNhbFRvcCA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsg
fTsKKyAgICAgICAgYXV0byBtYXhpbXVtTG9naWNhbEJvdHRvbSA9IE9wdGlvbmFsPElubGluZUxh
eW91dFVuaXQ+IHsgfTsKKyAgICAgICAgaWYgKHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNM
aW5lQm94KHJvb3RJbmxpbmVCb3gsIGxpbmVCb3gpKSB7CisgICAgICAgICAgICBtaW5pbXVtTG9n
aWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgbWF4aW11bUxvZ2lj
YWxCb3R0b20gPSByb290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpOworICAgICAg
ICAgICAgaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxp
bmVCb3gsIEFic29sdXRlVG9wQW5kQm90dG9tIHsgKm1pbmltdW1Mb2dpY2FsVG9wLCAqbWF4aW11
bUxvZ2ljYWxCb3R0b20gfSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5saW5lTGV2
ZWxCb3hBYnNvbHV0ZVRvcEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29sdXRl
VG9wQW5kQm90dG9tIHsgfSk7CisKKyAgICAgICAgVmVjdG9yPExpbmVCb3g6OklubGluZUxldmVs
Qm94Kj4gbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlczsKKyAgICAgICAgZm9yIChhdXRv
JiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgewor
ICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7
CisgICAgICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3guaGFzTGluZUJveFJlbGF0aXZlQWxpZ25t
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVz
LmFwcGVuZCgmaW5saW5lTGV2ZWxCb3gpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5p
bmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpOworICAgICAgICAg
ICAgLy8gTG9naWNhbCB0b3AgaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBpbmxpbmUgYm94J3Mg
bGF5b3V0IGJvdW5kcy4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwgdG9w
IGlzIG5vdCB0aGUgZmluYWwgbG9naWNhbCB0b3Agb2YgdGhlIGlubGluZSBsZXZlbCBib3guCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBsb2dpY2FsIHRvcCBpbiB0aGUgY29udGV4dCBvZiB0
aGUgbGF5b3V0IGJvdW5kcyBnZW9tZXRyeSB3aGljaCBtYXkgYmUgdmVyeSBkaWZmZXJlbnQgZnJv
bSB0aGUgaW5saW5lIGJveCdzIG5vcm1hbCBnZW9tZXRyeS4KKyAgICAgICAgICAgIGF1dG8gbG9n
aWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgc3dpdGNoIChpbmxp
bmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxB
bGlnbjo6QmFzZWxpbmU6IHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpNaWRkbGU6IHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3BPZmZzZXRG
cm9tUGFyZW50QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQo
KSAvIDIgKyBwYXJlbnRJbmxpbmVCb3guc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAv
IDI7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRC
b3VuZHMoKS5hc2NlbnQgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0
aWNhbEFsaWduOjpCYXNlbGluZU1pZGRsZTogeworICAgICAgICAgICAgICAgIGF1dG8gbG9naWNh
bFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5k
cygpLmhlaWdodCgpIC8gMjsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5s
aW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50
QmFzZWxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Okxlbmd0aDogeworICAgICAgICAgICAgICAgIGF1dG8m
IHN0eWxlID0gaW5saW5lTGV2ZWxCb3guc3R5bGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxv
Z2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHN0
eWxlLnZlcnRpY2FsQWxpZ25MZW5ndGgoKSwgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpICsg
aW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gbG9naWNh
bFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDogewor
ICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0ZXh0LXRvcCBhbGlnbnMgd2l0aCB0aGUgaW5s
aW5lIGJveCdzIGZvbnQgbWV0cmljcyB0b3AgKGFzY2VudCkgYW5kIG5vdCB0aGUgbGF5b3V0IGJv
dW5kcyB0b3AuCisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5s
YXlvdXRCb3VuZHMoKS5hc2NlbnQgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGlj
YWxBbGlnbjo6VGV4dEJvdHRvbTogeworICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0ZXh0
LWJvdHRvbSBhbGlnbnMgd2l0aCB0aGUgaW5saW5lIGJveCdzIGZvbnQgbWV0cmljcyBib3R0b20g
KGRlc2NlbnQpIGFuZCBub3QgdGhlIGxheW91dCBib3VuZHMgYm90dG9tLgorICAgICAgICAgICAg
ICAgIGF1dG8gcGFyZW50SW5saW5lQm94TGF5b3V0Qm91bmRzID0gcGFyZW50SW5saW5lQm94Lmxh
eW91dEJvdW5kcygpOworICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50SW5saW5lQm94TG9naWNh
bEJvdHRvbSA9IHBhcmVudElubGluZUJveExheW91dEJvdW5kcy5oZWlnaHQoKSAtIHBhcmVudElu
bGluZUJveExheW91dEJvdW5kcy5kZXNjZW50ICsgcGFyZW50SW5saW5lQm94LmRlc2NlbnQoKS52
YWx1ZU9yKElubGluZUxheW91dFVuaXQoKSk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9
IHBhcmVudElubGluZUJveExvZ2ljYWxCb3R0b20gLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3Vu
ZHMoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRF
RF9ZRVQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGF1dG8gcGFyZW50SW5saW5lQm94QWJzb2x1dGVUb3BBbmRCb3R0b20gPSBpbmxpbmVMZXZl
bEJveEFic29sdXRlVG9wQW5kQm90dG9tTWFwLmdldCgmcGFyZW50SW5saW5lQm94KTsKKyAgICAg
ICAgICAgIGF1dG8gYWJzb2x1dGVMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94QWJzb2x1dGVU
b3BBbmRCb3R0b20udG9wICsgbG9naWNhbFRvcDsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVM
b2dpY2FsQm90dG9tID0gYWJzb2x1dGVMb2dpY2FsVG9wICsgaW5saW5lTGV2ZWxCb3gubGF5b3V0
Qm91bmRzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJveEFic29sdXRlVG9w
QW5kQm90dG9tTWFwLmFkZCgmaW5saW5lTGV2ZWxCb3gsIEFic29sdXRlVG9wQW5kQm90dG9tIHsg
YWJzb2x1dGVMb2dpY2FsVG9wLCBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20gfSk7CisgICAgICAgICAg
ICAvLyBTdHJldGNoIHRoZSBtaW4vbWF4IGFic29sdXRlIHZhbHVlcyBpZiBhcHBsaWNhYmxlLgor
ICAgICAgICAgICAgaWYgKHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGlubGlu
ZUxldmVsQm94LCBsaW5lQm94KSkgeworICAgICAgICAgICAgICAgIG1pbmltdW1Mb2dpY2FsVG9w
ID0gc3RkOjptaW4obWluaW11bUxvZ2ljYWxUb3AudmFsdWVPcihhYnNvbHV0ZUxvZ2ljYWxUb3Ap
LCBhYnNvbHV0ZUxvZ2ljYWxUb3ApOworICAgICAgICAgICAgICAgIG1heGltdW1Mb2dpY2FsQm90
dG9tID0gc3RkOjptYXgobWF4aW11bUxvZ2ljYWxCb3R0b20udmFsdWVPcihhYnNvbHV0ZUxvZ2lj
YWxCb3R0b20pLCBhYnNvbHV0ZUxvZ2ljYWxCb3R0b20pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIC8vIFRoZSBsaW5lIGJveCBoZWlnaHQgY29tcHV0YXRpb24gaXMgYXMgZm9s
bG93czoKKyAgICAgICAgLy8gMS4gU3RyZXRjaCB0aGUgbGluZSBib3ggd2l0aCB0aGUgbm9uLWxp
bmUtYm94IHJlbGF0aXZlIGFsaWduZWQgaW5saW5lIGJveCBhYnNvbHV0ZSB0b3AgYW5kIGJvdHRv
bSB2YWx1ZXMuCisgICAgICAgIC8vIDIuIENoZWNrIGlmIHRoZSBsaW5lIGJveCByZWxhdGl2ZSBh
bGlnbmVkIGlubGluZSBib3hlcyAodG9wLCBib3R0b20gZXRjKSBoYXZlIGVub3VnaCByb29tIGFu
ZCBzdHJldGNoIHRoZSBsaW5lIGJveCBmdXJ0aGVyIGlmIG5lZWRlZC4KKyAgICAgICAgYXV0byBs
aW5lQm94TG9naWNhbEhlaWdodCA9IG1heGltdW1Mb2dpY2FsQm90dG9tLnZhbHVlT3IoSW5saW5l
TGF5b3V0VW5pdCgpKSAtIG1pbmltdW1Mb2dpY2FsVG9wLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5p
dCgpKTsKKyAgICAgICAgZm9yIChhdXRvKiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveCA6
IGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94ZXMpIHsKKyAgICAgICAgICAgIGlmICghcXVp
cmtzLmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goKmxpbmVCb3hSZWxhdGl2ZUlubGluZUxl
dmVsQm94LCBsaW5lQm94KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxIZWlnaHQsIGxp
bmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3hMb2dpY2Fs
SGVpZ2h0KTsKKyAgICB9OworICAgIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCgpOworCisg
ICAgYXV0byBjb21wdXRlUm9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBbJl0geworICAg
ICAgICBIYXNoTWFwPGNvbnN0IExpbmVCb3g6OklubGluZUxldmVsQm94KiwgSW5saW5lTGF5b3V0
VW5pdD4gaW5saW5lTGV2ZWxCb3hBYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0TWFwOworICAgICAgICBp
bmxpbmVMZXZlbEJveEFic29sdXRlQmFzZWxpbmVPZmZzZXRNYXAuYWRkKCZyb290SW5saW5lQm94
LCBJbmxpbmVMYXlvdXRVbml0IHsgfSk7CisKKyAgICAgICAgYXV0byBtYXhpbXVtVG9wT2Zmc2V0
RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsg
fTsKKyAgICAgICAgaWYgKHF1aXJrcy5pbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KHJvb3RJ
bmxpbmVCb3gsIGxpbmVCb3gpKQorICAgICAgICAgICAgbWF4aW11bVRvcE9mZnNldEZyb21Sb290
SW5saW5lQm94QmFzZWxpbmUgPSByb290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmFzY2VudDsK
KworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5s
aW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAgICBhdXRvIGFic29sdXRlQmFzZWxpbmVPZmZz
ZXQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgICAgIGlmICghaW5saW5lTGV2ZWxC
b3guaGFzTGluZUJveFJlbGF0aXZlQWxpZ25tZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0
Qm94KGxheW91dEJveC5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZU9m
ZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IElubGluZUxheW91dFVuaXQgeyB9OworCisgICAgICAg
ICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgorICAgICAgICAgICAgICAg
ICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHsgfTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRk
bGU6IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVu
dEJhc2VsaW5lID0gKGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiAr
IHBhcmVudElubGluZUJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMik7Cisg
ICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lID0gbG9n
aWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSAtIGlubGluZUxldmVsQm94LmxheW91dEJv
dW5kcygpLmFzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmVNaWRkbGU6
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJh
c2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyOworICAg
ICAgICAgICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IGxvZ2lj
YWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3Vu
ZHMoKS5hc2NlbnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Okxlbmd0aDogeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94LnN0eWxlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFsdWVGb3JM
ZW5ndGgoc3R5bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExpbmVIZWln
aHQoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNldEZyb21QYXJl
bnRCYXNlbGluZSA9IHZlcnRpY2FsQWxpZ25PZmZzZXQgKyBpbmxpbmVMZXZlbEJveC5iYXNlbGlu
ZSgpOworICAgICAgICAgICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGlu
ZSA9IGxvZ2ljYWxUb3BPZmZzZXRGcm9tUGFyZW50QmFzZWxpbmUgLSBpbmxpbmVMZXZlbEJveC5i
YXNlbGluZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgorICAgICAgICAg
ICAgICAgICAgICBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IHBhcmVudElubGlu
ZUJveC5iYXNlbGluZSgpIC0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2Fs
QWxpZ246OlRleHRCb3R0b206CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0RnJv
bVBhcmVudEJhc2VsaW5lID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudCAt
ICpwYXJlbnRJbmxpbmVCb3guZGVzY2VudCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYWJzb2x1dGVCYXNlbGluZU9mZnNldCA9IGlubGlu
ZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1hcC5nZXQoJnBhcmVudElubGluZUJveCkg
KyBiYXNlbGluZU9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVMZXZlbEJveC52ZXJ0aWNhbEFsaWduKCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDogeworICAgICAgICAg
ICAgICAgICAgICBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0ID0gcm9vdElubGluZUJveC5sYXlvdXRC
b3VuZHMoKS5hc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbTogeworICAgICAgICAgICAgICAgICAgICBh
YnNvbHV0ZUJhc2VsaW5lT2Zmc2V0ID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuZGVz
Y2VudCAtIHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuZGVzY2VudDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlubGluZUxldmVsQm94QWJzb2x1dGVCYXNlbGluZU9mZnNldE1hcC5h
ZGQoJmlubGluZUxldmVsQm94LCBhYnNvbHV0ZUJhc2VsaW5lT2Zmc2V0KTsKKyAgICAgICAgICAg
IGF1dG8gYWZmZWN0c1Jvb3RJbmxpbmVCb3hWZXJ0aWNhbFBvc2l0aW9uID0gcXVpcmtzLmlubGlu
ZUxldmVsQm94QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpOworICAgICAg
ICAgICAgaWYgKGFmZmVjdHNSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbikgeworICAgICAg
ICAgICAgICAgIGF1dG8gdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGFic29s
dXRlQmFzZWxpbmVPZmZzZXQgKyBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5hc2NlbnQ7
CisgICAgICAgICAgICAgICAgaWYgKG1heGltdW1Ub3BPZmZzZXRGcm9tUm9vdElubGluZUJveEJh
c2VsaW5lKQorICAgICAgICAgICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxp
bmVCb3hCYXNlbGluZSA9IHN0ZDo6bWF4KCptYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVC
b3hCYXNlbGluZSwgdG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZSk7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpcyBxdWlyayBt
b2RlIGFuZCB0aGUgcm9vdCBpbmxpbmUgYm94IGhhcyBubyBjb250ZW50LiBUaGUgcm9vdCBpbmxp
bmUgYm94J3MgYmFzZWxpbmUgaXMgYW5jaG9yZWQgYXQgMC4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gSG93ZXZlciBuZWdhdGl2ZSBhc2NlbnQgKGUuZyBuZWdhdGl2ZSB0b3AgbWFyZ2luKSBjYW4g
InB1c2giIHRoZSByb290IGlubGluZSBib3ggdXB3YXJkcyBhbmQgaGF2ZSBhIG5lZ2F0aXZlIHZh
bHVlLgorICAgICAgICAgICAgICAgICAgICBtYXhpbXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVC
b3hCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCA+PSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICA/IHN0ZDo6bWF4KDAuMGYsIHRvcE9mZnNldEZyb21Sb290
SW5saW5lQm94QmFzZWxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICA6IHRvcE9mZnNldEZy
b21Sb290SW5saW5lQm94QmFzZWxpbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGF1dG8gcm9vdElubGluZUJveExvZ2ljYWxUb3AgPSBtYXhp
bXVtVG9wT2Zmc2V0RnJvbVJvb3RJbmxpbmVCb3hCYXNlbGluZS52YWx1ZU9yKDAuZikgLSByb290
SW5saW5lQm94LmJhc2VsaW5lKCk7CisgICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRv
cChyb290SW5saW5lQm94TG9naWNhbFRvcCk7CisgICAgfTsKKyAgICBjb21wdXRlUm9vdElubGlu
ZUJveFZlcnRpY2FsUG9zaXRpb24oKTsKKworICAgIGF1dG8gYWxpZ25JbmxpbmVMZXZlbEJveGVz
ID0gWyZdIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9u
Um9vdElubGluZUxldmVsQm94ZXMoKSkgeworICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0g
aW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRvJiBwYXJlbnRJbmxp
bmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJl
bnQoKSk7CisgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsg
fTsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lTGV2ZWxCb3gudmVydGljYWxBbGlnbigpKSB7
CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOgorICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGlubGluZUxldmVs
Qm94LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRv
cE9mZnNldEZyb21QYXJlbnRCYXNlbGluZSA9IChpbmxpbmVMZXZlbEJveC5sb2dpY2FsSGVpZ2h0
KCkgLyAyICsgcGFyZW50SW5saW5lQm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkg
LyAyKTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2Vs
aW5lKCkgLSBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBhcmVudEJhc2VsaW5lOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWdu
OjpCYXNlbGluZU1pZGRsZTogeworICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcE9mZnNl
dEZyb21QYXJlbnRCYXNlbGluZSA9IGlubGluZUxldmVsQm94LmxvZ2ljYWxIZWlnaHQoKSAvIDI7
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgp
IC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TGVu
Z3RoOiB7CisgICAgICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVMZXZlbEJveC5zdHls
ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gdmVydGljYWxBbGlnbk9mZnNldCA9IGZsb2F0VmFs
dWVGb3JMZW5ndGgoc3R5bGUudmVydGljYWxBbGlnbkxlbmd0aCgpLCBzdHlsZS5jb21wdXRlZExp
bmVIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wT2Zmc2V0RnJvbVBh
cmVudEJhc2VsaW5lID0gdmVydGljYWxBbGlnbk9mZnNldCArIGlubGluZUxldmVsQm94LmJhc2Vs
aW5lKCk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNl
bGluZSgpIC0gbG9naWNhbFRvcE9mZnNldEZyb21QYXJlbnRCYXNlbGluZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCAodGV4
dCl0b3AvYm90dG9tIGFsaWduIHRoZWlyIGxheW91dCBib3VuZHMuCisgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OlRleHRUb3A6CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlu
bGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2Vs
aW5lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2Fs
QWxpZ246OlRleHRCb3R0b206CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElu
bGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3VuZHMoKS5k
ZXNjZW50IC0gaW5saW5lTGV2ZWxCb3guYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCB0aGlzIGxvZ2ljYWwgdG9wIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcGFy
ZW50IGlubGluZSBib3guCisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGlubGluZUxldmVs
Qm94LmxheW91dEJvdW5kcygpLmFzY2VudCAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJv
dHRvbToKKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBsb2dpY2FsIHRvcCBpcyBu
b3QgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBpbmxpbmUgYm94LgorICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBsaW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVsQm94LmxheW91
dEJvdW5kcygpLmRlc2NlbnQgLSBpbmxpbmVMZXZlbEJveC5iYXNlbGluZSgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbFRvcChsb2dpY2Fs
VG9wKTsKKyAgICAgICAgfQorICAgIH07CisgICAgYWxpZ25JbmxpbmVMZXZlbEJveGVzKCk7Cit9
CisKK0xpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OlNpbXBsaWZp
ZWRWZXJ0aWNhbEFsaWdubWVudChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgcm9vdElu
bGluZUJveCkKKyAgICA6IG1fcm9vdElubGluZUJveChyb290SW5saW5lQm94KQoreworICAgIGFk
anVzdChyb290SW5saW5lQm94KTsKK30KKworYm9vbCBMaW5lQm94QnVpbGRlcjo6U2ltcGxpZmll
ZFZlcnRpY2FsQWxpZ25tZW50OjpjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGNvbnN0IExpbmVC
b3g6OklubGluZUxldmVsQm94JiByb290SW5saW5lQm94LCBjb25zdCBMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveCYgaW5saW5lTGV2ZWxCb3gsIE9wdGlvbmFsPGNvbnN0IEJveEdlb21ldHJ5PiBpbmxp
bmVMZXZlbEJveEdlb21ldHJ5KQoreworICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lu
bGluZUxldmVsQm94KCkpIHsKKyAgICAgICAgQVNTRVJUKGlubGluZUxldmVsQm94R2VvbWV0cnkp
OworICAgICAgICAvLyBCYXNlbGluZSBhbGlnbmVkLCBub24tc3RyZXRjaHkgZGlyZWN0IGNoaWxk
cmVuIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNpbXBsZSBmb3Igbm93LgorICAgICAgICBhdXRvJiBs
YXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgcmV0dXJuICZs
YXlvdXRCb3gucGFyZW50KCkgPT0gJnJvb3RJbmxpbmVCb3gubGF5b3V0Qm94KCkKKyAgICAgICAg
ICAgICYmIGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWdu
OjpCYXNlbGluZQorICAgICAgICAgICAgJiYgIWlubGluZUxldmVsQm94R2VvbWV0cnktPm1hcmdp
bkJlZm9yZSgpCisgICAgICAgICAgICAmJiAhaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2lu
QWZ0ZXIoKQorICAgICAgICAgICAgJiYgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS0+bWFyZ2luQm94
SGVpZ2h0KCkgPD0gcm9vdElubGluZUJveC5iYXNlbGluZSgpOworICAgIH0KKyAgICBpZiAoaW5s
aW5lTGV2ZWxCb3guaXNMaW5lQnJlYWtCb3goKSkgeworICAgICAgICAvLyBCYXNlbGluZSBhbGln
bmVkLCBub24tc3RyZXRjaHkgbGluZSBicmVha3MgZS5nLiA8ZGl2PjxzcGFuPjxicj48L3NwYW4+
PC9kaXY+IGJ1dCBub3QgPGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMDBweDsiPjxicj48
L3NwYW4+PC9kaXY+LgorICAgICAgICByZXR1cm4gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCku
c3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUgJiYgaW5s
aW5lTGV2ZWxCb3guYmFzZWxpbmUoKSA8PSByb290SW5saW5lQm94LmJhc2VsaW5lKCk7CisgICAg
fQorICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0lubGluZUJveCgpKSB7CisgICAgICAgIC8vIEJh
c2VsaW5lIGFsaWduZWQsIG5vbi1zdHJldGNoeSBpbmxpbmUgYm94ZXMgZS5nLiA8ZGl2PjxzcGFu
Pjwvc3Bhbj48L2Rpdj4gYnV0IG5vdCA8ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwMHB4
OyI+PC9zcGFuPjwvZGl2Pi4KKyAgICAgICAgcmV0dXJuIGlubGluZUxldmVsQm94LmxheW91dEJv
eCgpLnN0eWxlKCkudmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lICYm
IGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpID09IHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91
bmRzKCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMaW5lQm94QnVpbGRl
cjo6U2ltcGxpZmllZFZlcnRpY2FsQWxpZ25tZW50OjphbGlnbihMaW5lQm94OjpJbmxpbmVMZXZl
bEJveCYgaW5saW5lTGV2ZWxCb3gpCit7CisgICAgaWYgKGlubGluZUxldmVsQm94LmlzQXRvbWlj
SW5saW5lTGV2ZWxCb3goKSB8fCBpbmxpbmVMZXZlbEJveC5pc0xpbmVCcmVha0JveCgpIHx8IGlu
bGluZUxldmVsQm94LmlzSW5saW5lQm94KCkpIHsKKyAgICAgICAgLy8gT25seSBiYXNlbGluZSBh
bGlnbm1lbnQgZm9yIG5vdy4KKyAgICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbFRvcCht
X3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LmJhc2VsaW5lKCkpOwor
ICAgICAgICBhZGp1c3QoaW5saW5lTGV2ZWxCb3gpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisKK3ZvaWQgTGluZUJveEJ1aWxk
ZXI6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6YWRqdXN0KGNvbnN0IExpbmVCb3g6Oklu
bGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveCkKK3sKKyAgICBhdXRvIGxheW91dEJvdW5kc0xv
Z2ljYWxUb3AgPSBtX3Jvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50IC0gaW5saW5l
TGV2ZWxCb3gubGF5b3V0Qm91bmRzKCkuYXNjZW50OworICAgIG1fbGluZUJveExvZ2ljYWxUb3Ag
PSBzdGQ6Om1pbihtX2xpbmVCb3hMb2dpY2FsVG9wLCBsYXlvdXRCb3VuZHNMb2dpY2FsVG9wKTsK
KyAgICBtX2xpbmVCb3hMb2dpY2FsQm90dG9tID0gc3RkOjptYXgobV9saW5lQm94TG9naWNhbEJv
dHRvbSwgbGF5b3V0Qm91bmRzTG9naWNhbFRvcCArIGlubGluZUxldmVsQm94LmxheW91dEJvdW5k
cygpLmhlaWdodCgpKTsKKyAgICBtX3Jvb3RJbmxpbmVCb3hMb2dpY2FsVG9wID0gc3RkOjptYXgo
bV9yb290SW5saW5lQm94TG9naWNhbFRvcCwgaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm91bmRzKCku
YXNjZW50IC0gbV9yb290SW5saW5lQm94LmJhc2VsaW5lKCkpOworfQorCitJbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnk6OklubGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnkoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCit7Cit9CisKK0xpbmVCb3gg
SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGlu
ZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKK3sKKyAgICByZXR1cm4gTGluZUJv
eEJ1aWxkZXIoZm9ybWF0dGluZ0NvbnRleHQoKSkuYnVpbGQobGluZUNvbnRlbnQpOworfQorCitJ
bmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6bG9naWNhbFRvcEZvck5l
eHRMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIElubGlu
ZUxheW91dFVuaXQgcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbSwgY29uc3QgRmxvYXRpbmdDb250
ZXh0JiBmbG9hdGluZ0NvbnRleHQpIGNvbnN0Cit7CisgICAgLy8gTm9ybWFsbHkgdGhlIG5leHQg
bGluZSdzIGxvZ2ljYWwgdG9wIGlzIHRoZSBwcmV2aW91cyBsaW5lJ3MgbG9naWNhbCBib3R0b20s
IGJ1dCB3aGVuIHRoZSBsaW5lIGVuZHMKKyAgICAvLyB3aXRoIHRoZSBjbGVhciBwcm9wZXJ0eSBz
ZXQsIHRoZSBuZXh0IGxpbmUgbmVlZHMgdG8gY2xlYXIgdGhlIGV4aXN0aW5nIGZsb2F0cy4KKyAg
ICBpZiAobGluZUNvbnRlbnQucnVucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwcmV2aW91
c0xpbmVMb2dpY2FsQm90dG9tOworICAgIGF1dG8mIGxhc3RSdW5MYXlvdXRCb3ggPSBsaW5lQ29u
dGVudC5ydW5zLmxhc3QoKS5sYXlvdXRCb3goKTsgCisgICAgaWYgKGxhc3RSdW5MYXlvdXRCb3gu
c3R5bGUoKS5jbGVhcigpID09IENsZWFyOjpOb25lKQorICAgICAgICByZXR1cm4gcHJldmlvdXNM
aW5lTG9naWNhbEJvdHRvbTsKKyAgICBhdXRvIHBvc2l0aW9uV2l0aENsZWFyYW5jZSA9IGZsb2F0
aW5nQ29udGV4dC52ZXJ0aWNhbFBvc2l0aW9uV2l0aENsZWFyYW5jZShsYXN0UnVuTGF5b3V0Qm94
KTsKKyAgICBpZiAoIXBvc2l0aW9uV2l0aENsZWFyYW5jZSkKKyAgICAgICAgcmV0dXJuIHByZXZp
b3VzTGluZUxvZ2ljYWxCb3R0b207CisgICAgcmV0dXJuIHN0ZDo6bWF4KHByZXZpb3VzTGluZUxv
Z2ljYWxCb3R0b20sIElubGluZUxheW91dFVuaXQocG9zaXRpb25XaXRoQ2xlYXJhbmNlLT5wb3Np
dGlvbikpOworfQorCitDb250ZW50V2lkdGhBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5OjppbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGZvcm1hdHRp
bmdDb250ZXh0Um9vdCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29u
c3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQoZm9ybWF0dGluZ0NvbnRleHRSb290LmlzSW5G
bG93KCkpOworCisgICAgLy8gMTAuMy4xMCAnSW5saW5lLWJsb2NrJywgcmVwbGFjZWQgZWxlbWVu
dHMgaW4gbm9ybWFsIGZsb3cKKworICAgIC8vIEV4YWN0bHkgYXMgaW5saW5lIHJlcGxhY2VkIGVs
ZW1lbnRzLgorICAgIGlmIChmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNSZXBsYWNlZEJveCgpKQor
ICAgICAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oZG93bmNh
c3Q8UmVwbGFjZWRCb3g+KGZvcm1hdHRpbmdDb250ZXh0Um9vdCksIGhvcml6b250YWxDb25zdHJh
aW50cywgeyB9LCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7CisKKyAgICAvLyAxMC4zLjkg
J0lubGluZS1ibG9jaycsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworCisg
ICAgLy8gSWYgJ3dpZHRoJyBpcyAnYXV0bycsIHRoZSB1c2VkIHZhbHVlIGlzIHRoZSBzaHJpbmst
dG8tZml0IHdpZHRoIGFzIGZvciBmbG9hdGluZyBlbGVtZW50cy4KKyAgICAvLyBBIGNvbXB1dGVk
IHZhbHVlIG9mICdhdXRvJyBmb3IgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBiZWNv
bWVzIGEgdXNlZCB2YWx1ZSBvZiAnMCcuCisgICAgLy8gIzEKKyAgICBhdXRvIHdpZHRoID0gY29t
cHV0ZWRWYWx1ZShmb3JtYXR0aW5nQ29udGV4dFJvb3Quc3R5bGUoKS5sb2dpY2FsV2lkdGgoKSwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7CisgICAgaWYgKCF3aWR0aCkKKyAg
ICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7CisKKyAgICAvLyAjMgorICAgIGF1dG8g
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbihmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisKKyAg
ICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsgKndpZHRoLCB7IGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDBfbHUpLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
ZW5kLnZhbHVlT3IoMF9sdSkgfSB9OworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIElubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250
YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygp
KTsKKworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVs
IHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJyByZXBsYWNl
ZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFjZWQgZWxlbWVudHMK
KyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJuIGlubGlu
ZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5
b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyk7CisKKyAgICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKKyAgICAvLyAtICdJbmxp
bmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMuCisgICAgcmV0dXJuIGNvbXBsaWNhdGVk
Q2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcyk7Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5YmY4N2YzNGJhZmE0MDU3ODc4
YTJhNmExOWU1N2NjZjY4ZDgyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnku
aApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250
ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitjbGFz
cyBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5IHsKK3B1YmxpYzoKKyAgICBMaW5lQm94IGxpbmVCb3hGb3JMaW5lQ29udGVudChjb25z
dCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmKTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxUb3BGb3JOZXh0TGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmLCBJbmxpbmVM
YXlvdXRVbml0IHByZXZpb3VzTGluZUxvZ2ljYWxCb3R0b20sIGNvbnN0IEZsb2F0aW5nQ29udGV4
dCYpIGNvbnN0OworCisgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVCbG9ja0NvbnRl
bnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRz
JiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7CisgICAgQ29udGVudFdp
ZHRoQW5kTWFyZ2luIGlubGluZUJsb2NrQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzJik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OworICAgIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYpOworCisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1h
dHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7
IH0KKworfTsKKworfQorfQorCisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>