<?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>93296</bug_id>
          
          <creation_ts>2012-08-06 14:37:49 -0700</creation_ts>
          <short_desc>run-webkit-tests should have ability to add description to its JSON output</short_desc>
          <delta_ts>2012-08-06 14:59:12 -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>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77037</blocked>
    
    <blocked>92913</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>688426</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-06 14:37:49 -0700</bug_when>
    <thetext>run-webkit-tests should have ability to add description to its JSON output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688432</commentid>
    <comment_count>1</comment_count>
      <attachid>156763</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-06 14:43:08 -0700</bug_when>
    <thetext>Created attachment 156763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688433</commentid>
    <comment_count>2</comment_count>
      <attachid>156764</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-06 14:43:14 -0700</bug_when>
    <thetext>Created attachment 156764
Screenshot of new graphs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688435</commentid>
    <comment_count>3</comment_count>
      <attachid>156765</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-06 14:44:17 -0700</bug_when>
    <thetext>Created attachment 156765
Sample results page</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688445</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-06 14:59:12 -0700</bug_when>
    <thetext>Committed r124802: &lt;http://trac.webkit.org/changeset/124802&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156763</attachid>
            <date>2012-08-06 14:43:08 -0700</date>
            <delta_ts>2012-08-06 14:49:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93296-20120806144244.patch</filename>
            <type>text/plain</type>
            <size>9989</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjQ4MDEpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA4LTA2ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIHJ1bi13ZWJraXQtdGVz
dHMgc2hvdWxkIGhhdmUgYWJpbGl0eSB0byBhZGQgZGVzY3JpcHRpb24gdG8gaXRzIEpTT04gb3V0
cHV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzI5
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnNl
IGRlc2NyaXB0aW9uIGFuZCBzaG93IGl0IHdpdGggdGhlIFdlYktpdCByZXZpc2lvbiBvbiB0aGUg
cmVzdWx0cyBwYWdlLiBBbHNvIHVzZSBiYXIgZ3JhcGhzCisgICAgICAgIGluc3RlYWQgb2YgbGlu
ZSBncmFwaHMgc2luY2Ugd2UncmUgbm90IGRlcGljdGluZyB0aGUgdGltZSBzZXJpZXMgaGVyZSBw
ZXIgYXJ2J3Mgc3VnZ2VzdGlvbi4KKyAgICAgICAgRmluYWxseSwgYWRkIHRoZSBhYmlsaXR5IHRv
IGFkanVzdCB5LWF4aXMgYmV0d2VlbiB0aGUgYWRqdXN0ZWQgdmFsdWUgYW5kIDAgKHBsb3QgZXZl
biBkb2Vzbid0IGFkanVzdAorICAgICAgICB5LWF4aXMgYXV0b21hdGljYWxseSBub3cpIGJ5IGEg
bW91c2UgY2xpY2suCisKKyAgICAgICAgKiByZXNvdXJjZXMvcmVzdWx0cy10ZW1wbGF0ZS5odG1s
OgorCiAyMDEyLTA4LTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVzZSB0ZXN0UnVubmVyIGluc3RlYWQgb2YgbGF5b3V0VGVzdENvbnRyb2xsZXIgaW4gcGVy
Zm9ybWFuY2UgdGVzdHMKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3Jlc3VsdHMt
dGVtcGxhdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9y
ZXN1bHRzLXRlbXBsYXRlLmh0bWwJKHJldmlzaW9uIDEyNDUxNCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvcmVzb3VyY2VzL3Jlc3VsdHMtdGVtcGxhdGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MjIgKzQwLDI5IEBAIHNlY3Rpb24gLnRvb2x0aXAgewogPGRpdiBpZD0iY29udGFpbmVyIj48L2Rp
dj4KIDxzY3JpcHQ+CiAKLWZ1bmN0aW9uIGF0dGFjaFBsb3QodGVzdE5hbWUpIHsKLSAgICB2YXIg
c2VjdGlvbiA9ICQoJzxzZWN0aW9uPjxoMT48L2gxPjxkaXYgY2xhc3M9InBsb3QiIHN0eWxlPSJ3
aWR0aDogMjAwcHg7IGhlaWdodDogMzAwcHg7Ij48L2Rpdj4nCitmdW5jdGlvbiBjcmVhdGVQbG90
KHRlc3ROYW1lKSB7CisgICAgdmFyIHNlY3Rpb24gPSAkKCc8c2VjdGlvbj48aDE+PC9oMT48ZGl2
IGNsYXNzPSJwbG90Ij48L2Rpdj4nCiAgICAgICAgICsgJzxzcGFuIGNsYXNzPSJ0b29sdGlwIj48
L3NwYW4+PHNlY3Rpb24+Jyk7CiAgICAgdmFyIHVuaXQgPSB0ZXN0VW5pdHNbdGVzdE5hbWVdOwor
ICAgIHNlY3Rpb24uY2hpbGRyZW4oJy5wbG90JykuY3NzKHsnd2lkdGgnOiAxMDAgKiBtYXhMZW5n
dGggKyAncHgnLCAnaGVpZ2h0JzogJzMwMHB4J30pOwogICAgIHNlY3Rpb24uY2hpbGRyZW4oJ2gx
JykuaHRtbCh0ZXN0TmFtZSArICh1bml0ID8gJyAoJyArIHVuaXQgKyAnKScgOiAnJykpOwogICAg
ICQoJyNjb250YWluZXInKS5hcHBlbmQoc2VjdGlvbik7CisgICAgCisgICAgYXR0YWNoUGxvdCh0
ZXN0TmFtZSwgc2VjdGlvbik7Cit9CiAKK2Z1bmN0aW9uIGF0dGFjaFBsb3QodGVzdE5hbWUsIHNl
Y3Rpb24sIG1pbklzWmVybykgewogICAgIHZhciBhdmVyYWdlcyA9IHRlc3RSZXN1bHRzW3Rlc3RO
YW1lXTsKICAgICB2YXIgY29sb3IgPSAncmdiKDIzMCw1MCw1MCknOwogCiAgICAgdmFyIG1pbk1h
eE9wdGlvbnMgPSB7bGluZXM6IHtzaG93OnRydWUsIGxpbmVXaWR0aDogMH0sCiAgICAgICAgIGNv
bG9yOiBjb2xvciwKLSAgICAgICAgcG9pbnRzOiB7c2hvdzogdHJ1ZSwgcmFkaXVzOiAxfX07Cisg
ICAgICAgIHBvaW50czoge3Nob3c6IHRydWUsIHJhZGl1czogMX0sCisgICAgICAgIGJhcnM6IHtz
aG93OiBmYWxzZX19OworCiAgICAgZnVuY3Rpb24gbWFrZUxvd1Bsb3QoaWQsIGRhdGEpIHsgcmV0
dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBtaW5NYXhPcHRpb25zLCB7aWQ6IGlkLCBkYXRhOiBkYXRh
fSk7IH0gICAgCiAgICAgZnVuY3Rpb24gbWFrZUhpZ2hQbG90KGZyb20sIHRvLCBmaWxsLCBkYXRh
KSB7IHJldHVybiAkLmV4dGVuZCh0cnVlLCB7fSwgbWluTWF4T3B0aW9ucywKLSAgICAgICAge2lk
OiB0bywgZGF0YTogZGF0YSwgbGluZXM6IHtmaWxsOiBmaWxsfSwgZmlsbEJldHdlZW46IGZyb219
KTsgfQorICAgICAgICB7aWQ6IHRvLCBkYXRhOiBkYXRhfSk7IH0KIAogICAgIHZhciBwbG90RGF0
YSA9IFsKICAgICAgICAgbWFrZUxvd1Bsb3QoJ21pbicsIHRlc3RSZXN1bHRzTWluW3Rlc3ROYW1l
XSksCkBAIC02NywyMSArNzQsMzAgQEAgZnVuY3Rpb24gYXR0YWNoUGxvdCh0ZXN0TmFtZSkgewog
ICAgIHZhciBwbG90Q29udGFpbmVyID0gc2VjdGlvbi5jaGlsZHJlbignLnBsb3QnKTsKICAgICAk
LnBsb3QocGxvdENvbnRhaW5lciwgcGxvdERhdGEsIHsKICAgICAgICAgeGF4aXM6IHsKLSAgICAg
ICAgICAgIG1pbjogYXZlcmFnZXNbMF1bMF0gLSAwLjI1LAotICAgICAgICAgICAgbWF4OiBhdmVy
YWdlc1thdmVyYWdlcy5sZW5ndGggLSAxXVswXSArIDAuMjUsCisgICAgICAgICAgICBtaW46IGF2
ZXJhZ2VzWzBdWzBdIC0gMC41LAorICAgICAgICAgICAgbWF4OiBhdmVyYWdlc1thdmVyYWdlcy5s
ZW5ndGggLSAxXVswXSArIDAuNSwKICAgICAgICAgICAgIHRpY2tTaXplOiAxLAotICAgICAgICAg
ICAgdGlja0RlY2ltYWxzOiAwLAotICAgICAgICAgICAgdGlja0Zvcm1hdHRlcjogZnVuY3Rpb24g
KHgpIHsgcmV0dXJuIHggPj0gMCA/IHggOiAnJzsgfX0sCi0gICAgICAgIHlheGlzOiB7fSwKKyAg
ICAgICAgICAgIHRpY2tzOiBhdmVyYWdlcy5tYXAoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgewor
ICAgICAgICAgICAgICAgIHZhciBsYWJlbCA9ICdyJyArIHdlYmtpdFJldmlzaW9uc1tpbmRleF07
CisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1tpbmRleF0pCisgICAgICAgICAgICAg
ICAgICAgIGxhYmVsICs9ICcgJmRhc2g7ICcgKyBkZXNjcmlwdGlvbnNbaW5kZXhdCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFtpbmRleCwgbGFiZWxdOworICAgICAgICAgICAgfSksCisgICAgICAg
IH0sCisgICAgICAgIHlheGlzOiB7CisgICAgICAgICAgICBtaW46IG1pbklzWmVybyA/IDAgOiBN
YXRoLm1heC5hcHBseShNYXRoLCAkLm1hcCh0ZXN0UmVzdWx0c01pblt0ZXN0TmFtZV0sIGZ1bmN0
aW9uIChlbnRyeSkgeyByZXR1cm4gZW50cnlbMV07IH0pKSAqIDAuOTgsCisgICAgICAgICAgICBt
YXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsICQubWFwKHRlc3RSZXN1bHRzTWF4W3Rlc3ROYW1lXSwg
ZnVuY3Rpb24gKGVudHJ5KSB7IHJldHVybiBlbnRyeVsxXTsgfSkpICogKG1pbklzWmVybyA/IDEu
MSA6IDEuMDEpLAorICAgICAgICB9LAogICAgICAgICBjcm9zc2hhaXI6IHsgbW9kZTogJ3knIH0s
CiAgICAgICAgIHNlcmllczogeyBzaGFkb3dTaXplOiAwIH0sCisgICAgICAgIGJhcnM6IHtzaG93
OiB0cnVlLCBhbGlnbjogJ2NlbnRlcicsIGJhcldpZHRoOiAwLjV9LAogICAgICAgICBsaW5lczog
eyBzaG93OiBmYWxzZSB9LAogICAgICAgICBwb2ludHM6IHsgc2hvdzogdHJ1ZSB9LAogICAgICAg
ICBncmlkOiB7CiAgICAgICAgICAgICBib3JkZXJXaWR0aDogMiwKICAgICAgICAgICAgIGJhY2tn
cm91bmRDb2xvcjogJyNmZmYnLAogICAgICAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAotICAgICAg
ICAgICAgYXV0b0hpZ2hsaWdodDogdHJ1ZSwKKyAgICAgICAgICAgIGF1dG9IaWdobGlnaHQ6IGZh
bHNlLAogICAgICAgICB9CiAgICAgfSk7CiAKQEAgLTk1LDEzICsxMTEsMjYgQEAgZnVuY3Rpb24g
YXR0YWNoUGxvdCh0ZXN0TmFtZSkgewogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRvb2x0
aXAuaGlkZSgpOwogICAgIH0pOworICAgIHBsb3RDb250YWluZXIubW91c2VvdXQoZnVuY3Rpb24g
KCkgeworICAgICAgICB0b29sdGlwLmhpZGUoKTsKKyAgICB9KTsKKworICAgIHBsb3RDb250YWlu
ZXIuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7CisgICAgICAgIGF0dGFjaFBsb3QodGVzdE5hbWUsIHNlY3Rpb24sICFtaW5Jc1plcm8pOwor
ICAgIH0pOwogfQogCiB2YXIgcmVzdWx0cyA9IEpTT04ucGFyc2UoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2pzb24nKS50ZXh0Q29udGVudCk7CiB2YXIgdGVzdHMgPSBbXTsKIHZhciB0ZXN0UmVz
dWx0cyA9IHt9LCB0ZXN0UmVzdWx0c01pbiA9IHt9LCB0ZXN0UmVzdWx0c01heCA9IHt9LCB0ZXN0
UmVzdWx0c1N0ZGV2TG93ID0ge30sIHRlc3RSZXN1bHRzU3RkZXZIaWdoID0ge307CiB2YXIgdGVz
dFVuaXRzID0ge307Cit2YXIgd2Via2l0UmV2aXNpb25zID0gW107Cit2YXIgZGVzY3JpcHRpb25z
ID0gW107Cit2YXIgbWF4TGVuZ3RoID0gMDsKICQuZWFjaChyZXN1bHRzLCBmdW5jdGlvbiAoaW5k
ZXgsIGVudHJ5KSB7CisgICAgd2Via2l0UmV2aXNpb25zLnB1c2goZW50cnlbJ3dlYmtpdC1yZXZp
c2lvbiddKTsKKyAgICBkZXNjcmlwdGlvbnMucHVzaChlbnRyeVsnZGVzY3JpcHRpb24nXSk7CiAg
ICAgJC5lYWNoKGVudHJ5LnJlc3VsdHMsIGZ1bmN0aW9uICh0ZXN0LCByZXN1bHQpIHsKICAgICAg
ICAgaWYgKHRlc3RzLmluZGV4T2YodGVzdCkgPCAwKQogICAgICAgICAgICAgdGVzdHMucHVzaCh0
ZXN0KTsKQEAgLTEyNSwxMSArMTU0LDEyIEBAICQuZWFjaChyZXN1bHRzLCBmdW5jdGlvbiAoaW5k
ZXgsIGVudHJ5KSAKICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0c1N0ZGV2SGlnaFt0ZXN0XS5w
dXNoKFtpbmRleCwgcmVzdWx0WydhdmcnXSArIHJlc3VsdFsnc3RkZXYnXV0pOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CisgICAgICAgIG1heExlbmd0aCA9IE1hdGgubWF4KG1heExlbmd0aCwg
dGVzdFJlc3VsdHNbdGVzdF0ubGVuZ3RoKTsKICAgICAgICAgdGVzdFVuaXRzW3Rlc3RdID0gcmVz
dWx0LnVuaXQ7CiAgICAgfSk7CiB9KTsKLSQuZWFjaCh0ZXN0cy5zb3J0KCksIGZ1bmN0aW9uIChp
bmRleCwgdGVzdCkgeyBhdHRhY2hQbG90KHRlc3QpOyB9KTsKKyQuZWFjaCh0ZXN0cy5zb3J0KCks
IGZ1bmN0aW9uIChpbmRleCwgdGVzdCkgeyBjcmVhdGVQbG90KHRlc3QpOyB9KTsKIAogPC9zY3Jp
cHQ+CiA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9odG1s
PgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTI0ODAxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTItMDgtMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgcnVuLXdlYmtpdC10ZXN0cyBzaG91bGQgaGF2ZSBhYmlsaXR5IHRvIGFkZCBk
ZXNjcmlwdGlvbiB0byBpdHMgSlNPTiBvdXRwdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIC0tZGVzY3JpcHRpb24gb3B0aW9uLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHk6
CisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX3BhcnNlX2FyZ3MpOgorICAgICAgICAoUGVyZlRl
c3RzUnVubmVyLl9nZW5lcmF0ZV9hbmRfc2hvd19yZXN1bHRzKToKKyAgICAgICAgKFBlcmZUZXN0
c1J1bm5lci5fZ2VuZXJhdGVfcmVzdWx0c19kaWN0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5weToKKyAgICAg
ICAgKHRlc3RfcnVuX3dpdGhfZGVzY3JpcHRpb24pOgorCiAyMDEyLTA4LTA2ICBEaXJrIFByYW5r
ZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIG5yd3Q6IGhhbmRsZSBlcnJvcnMg
ZnJvbSBpbWFnZSBkaWZmIGJldHRlcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJm
b3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkJKHJldmlz
aW9uIDEyNDgwMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMv
cGVyZnRlc3RzcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDggQEAgY2xh
c3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgaGVscD0iRmlsZW5h
bWUgb2YgdGhlIEpTT04gZmlsZSB0aGF0IHN1bW1hcmllcyB0aGUgcmVzdWx0cy4iKSwKICAgICAg
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNvdXJjZS1qc29uLXBhdGgiLAogICAgICAg
ICAgICAgICAgIGhlbHA9IlBhdGggdG8gYSBKU09OIGZpbGUgdG8gYmUgbWVyZ2VkIGludG8gdGhl
IEpTT04gZmlsZSB3aGVuIC0tb3V0cHV0LWpzb24tcGF0aCBpcyBwcmVzZW50LiIpLAorICAgICAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZGVzY3JpcHRpb24iLAorICAgICAgICAgICAg
ICAgIGhlbHA9IkFkZCBhIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgSlNPTiBmaWxlIGlmIG9u
ZSBpcyBnZW5lcmF0ZWQiKSwKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRl
c3QtcmVzdWx0cy1zZXJ2ZXIiLAogICAgICAgICAgICAgICAgIGhlbHA9IlVwbG9hZCB0aGUgZ2Vu
ZXJhdGVkIEpTT04gZmlsZSB0byB0aGUgc3BlY2lmaWVkIHNlcnZlciB3aGVuIC0tb3V0cHV0LWpz
b24tcGF0aCBpcyBwcmVzZW50LiIpLAogICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Ii0td2Via2l0LXRlc3QtcnVubmVyIiwgIi0yIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKQEAgLTE3
MCw3ICsxNzIsNyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgaWYg
bm90IG91dHB1dF9qc29uX3BhdGg6CiAgICAgICAgICAgICBvdXRwdXRfanNvbl9wYXRoID0gc2Vs
Zi5faG9zdC5maWxlc3lzdGVtLmpvaW4oc2VsZi5fcG9ydC5wZXJmX3Jlc3VsdHNfZGlyZWN0b3J5
KCksIHNlbGYuX0RFRkFVTFRfSlNPTl9GSUxFTkFNRSkKIAotICAgICAgICBvdXRwdXQgPSBzZWxm
Ll9nZW5lcmF0ZV9yZXN1bHRzX2RpY3Qoc2VsZi5fdGltZXN0YW1wLCBvcHRpb25zLnBsYXRmb3Jt
LCBvcHRpb25zLmJ1aWxkZXJfbmFtZSwgb3B0aW9ucy5idWlsZF9udW1iZXIpCisgICAgICAgIG91
dHB1dCA9IHNlbGYuX2dlbmVyYXRlX3Jlc3VsdHNfZGljdChzZWxmLl90aW1lc3RhbXAsIG9wdGlv
bnMuZGVzY3JpcHRpb24sIG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMuYnVpbGRlcl9uYW1lLCBv
cHRpb25zLmJ1aWxkX251bWJlcikKIAogICAgICAgICBpZiBvcHRpb25zLnNvdXJjZV9qc29uX3Bh
dGg6CiAgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9tZXJnZV9zb3VyY2VfanNvbihvcHRpb25z
LnNvdXJjZV9qc29uX3BhdGgsIG91dHB1dCkKQEAgLTE5Myw4ICsxOTUsMTAgQEAgY2xhc3MgUGVy
ZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9w
b3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUocmVzdWx0c19wYWdlX3BhdGgpCiAKLSAgICBkZWYg
X2dlbmVyYXRlX3Jlc3VsdHNfZGljdChzZWxmLCB0aW1lc3RhbXAsIHBsYXRmb3JtLCBidWlsZGVy
X25hbWUsIGJ1aWxkX251bWJlcik6CisgICAgZGVmIF9nZW5lcmF0ZV9yZXN1bHRzX2RpY3Qoc2Vs
ZiwgdGltZXN0YW1wLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0sIGJ1aWxkZXJfbmFtZSwgYnVpbGRf
bnVtYmVyKToKICAgICAgICAgY29udGVudHMgPSB7J3Jlc3VsdHMnOiBzZWxmLl9yZXN1bHRzfQor
ICAgICAgICBpZiBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgIGNvbnRlbnRzWydkZXNjcmlwdGlv
biddID0gZGVzY3JpcHRpb24KICAgICAgICAgZm9yIChuYW1lLCBwYXRoKSBpbiBzZWxmLl9wb3J0
LnJlcG9zaXRvcnlfcGF0aHMoKToKICAgICAgICAgICAgIGNvbnRlbnRzW25hbWUgKyAnLXJldmlz
aW9uJ10gPSBzZWxmLl9ob3N0LnNjbSgpLnN2bl9yZXZpc2lvbihwYXRoKQogCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNl
X3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5weQkocmV2aXNpb24gMTI0ODAxKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAsMTYgQEAgbWF4IDExMjAK
ICAgICAgICAgICAgICJpbnNwZWN0b3IvcGFzcy5odG1sOmdyb3VwX25hbWU6dGVzdF9uYW1lIjog
NDJ9LAogICAgICAgICAgICAgIndlYmtpdC1yZXZpc2lvbiI6IDU2NzgsICJicmFuY2giOiAid2Vi
a2l0LXRydW5rIn0pCiAKKyAgICBkZWYgdGVzdF9ydW5fd2l0aF9kZXNjcmlwdGlvbihzZWxmKToK
KyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3M9WyctLW91dHB1
dC1qc29uLXBhdGg9L21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLAorICAgICAgICAgICAgJy0t
dGVzdC1yZXN1bHRzLXNlcnZlcj1zb21lLmhvc3QnLCAnLS1kZXNjcmlwdGlvbicsICdzb21lIGRl
c2NyaXB0aW9uJ10pCisgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQocnVu
bmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29u
LmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKCcvbW9jay1jaGVja291
dC9vdXRwdXQuanNvbicpKSwgeworICAgICAgICAgICAgInRpbWVzdGFtcCI6IDEyMzQ1Njc4OSwg
ImRlc2NyaXB0aW9uIjogInNvbWUgZGVzY3JpcHRpb24iLCAicmVzdWx0cyI6CisgICAgICAgICAg
ICB7IkJpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyIjogeyJtYXgiOiAxNTEwLCAiYXZnIjog
MTQ4OS4wNSwgIm1lZGlhbiI6IDE0ODcsICJtaW4iOiAxNDcxLCAic3RkZXYiOiAxNC40NiwgInVu
aXQiOiAibXMifSwKKyAgICAgICAgICAgICJpbnNwZWN0b3IvcGFzcy5odG1sOmdyb3VwX25hbWU6
dGVzdF9uYW1lIjogNDJ9LAorICAgICAgICAgICAgIndlYmtpdC1yZXZpc2lvbiI6IDU2NzgsICJi
cmFuY2giOiAid2Via2l0LXRydW5rIn0pCisKICAgICBkZWYgY3JlYXRlX3J1bm5lcl9hbmRfc2V0
dXBfcmVzdWx0c190ZW1wbGF0ZShzZWxmLCBhcmdzPVtdKToKICAgICAgICAgcnVubmVyLCBwb3J0
ID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3MpCiAgICAgICAgIGZpbGVzeXN0ZW0gPSBwb3J0Lmhv
c3QuZmlsZXN5c3RlbQo=
</data>
<flag name="review"
          id="166525"
          type_id="1"
          status="+"
          setter="dpranke"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>156764</attachid>
            <date>2012-08-06 14:43:14 -0700</date>
            <delta_ts>2012-08-06 14:44:17 -0700</delta_ts>
            <desc>Screenshot of new graphs</desc>
            <filename>Screen shot 2012-08-06 at 2.37.09 PM.png</filename>
            <type>image/png</type>
            <size>28110</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">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
AQCanBgAACAASURBVHgB7Z0JfFTV2f8n22RfICIkAkGWKGCIsggIAhXBCoSCVlGi1lcWF/T9F1Bb
bV9ZfPG1RUHf1hdE6/tqAakWCgKKgg1CK4sFVEBi2EkkJmYh+zqZ/y85enp7585ktszcufObD59w
7nPP8pzvOffc56w3xGq1mvgjARIgARIgARIgARLQK4FQvSpGvUiABEiABEiABEiABFoJ0FxjPSAB
EiABEiABEiABXROguabr4qFyJEACJEACJEACJEBzjXWABEiABEiABEiABHRNgOaarouHypEACZAA
CZAACZAAzTXWARIgARIgARIgARLQNQGaa7ouHipHAiRAAiRAAiRAAjTXWAdIgARIgARIgARIQNcE
aK7punioHAmQAAmQAAmQAAnQXGMdIAESIAESIAESIAFdE6C5puvioXIkQAIkQAIkQAIkQHONdYAE
SIAESIAESIAEdE2A5pqui4fKkQAJkAAJkAAJkADNNdYBEiABEiABEiABEtA1gSA115qbm/Py8ior
K0XhFBcXK0sJl59++um5c+daWlrgLi8vl3cd3LJarbt3725oaJCeOyIVGXlgORxw80FGLBbLyZMn
7RW3DxRQJlFRUaG87CC3bW1EQvX19cr62UFJM1o9ECgtLT1z5gyqgVAGD6DUqqmp6fjx44cOHaqq
qoIwNzfXmVvwgwiVniHpiFSkMnQYhoBvGj3gsq2iEPos9Y4ur6Az19BOjR8//sc//vEHH3zw+9//
fsqUKY899tiYMWNgWoE1GrLZs2ffd999RUVFH374YUZGxrBhwxDE8S1RSPv27bvrrrsiIiJw6fVU
vvnmmzvuuCOk7depU6f777+/Z8+e/fv3/+Uvf+nfunj27FmRfXt/HSC1FwRyVbSqSwcBVbdOnDhx
00033XLLLe+//z6KOysra968eePGjRPFrfKsvFSlqLpU+nTeXVZWtmTJEt+Ul7I2Sg1DQ0N/+9vf
Hj16VEroMBgBVOzf/OY3/fr1W7Zs2a5du9C43XrrrQ8++OB///d/i5z+7W9/y8zM3LZtW2Fh4aOP
Pjpw4MCf//zn7d4SHh566KGPP/4Y7o5I5Y033ujevbto4tBE47FNTU2F8miHRep++Ys+HkxSB0lD
7R49egi1R40atWnTJniG0XDnnXdCOHXq1G+//dZBcOWtP/zhD127dkWoOXPmKOWabseKvf766wkJ
CUKrSZMmCYYlJSW//vWvw8PDQdWBVi+//LIIiFekZtKuCrds2SKwuBrQDf+yiirDfvHFF8gUOu1K
YUC60f0Knt+f/vQnmFMjR47EMIPINfqXeJej5GBVQIKWDq+07777Ttw9ffp0dHT03r17Hd8SnufP
n4+6AncHpQKdIyMjoer06dORyqVLl+Lj43EJ/YUCvv+L98ENN9zgOF0HSO0FVEWrurQXylaOgoiK
ihoxYkRdXZ24qypu2yBCokpRdWkvlGM5kp4wYYKsWo49e35X1kZVVBgwvv3227/88kuVnJcGIIB6
Pnz4cLQJ7733nswOLDOz2fyrX/0KErzjYRDAhpN3586dC9vI8S3hGVYL4rl48WLHpbJo0SIojx/e
r0j0mWeegTssLAwmplTYlw68FG6++ebt27c7TlToCVU/++wzpc/09PTq6mqlpF33zJkzEc+sWbMc
+3RGsRdeeAFR4ffmm2/K2PD4o8WWrz8pVzrgRww6tJtxZSh7bpiz//mf/2nvrnflsoraRrtnz54H
HnjAVh5YElNgqeuJtqdOnRL2zbvvvquMB2WMbpww19A9Qv1ev3699IBOKiZGcenglvCclpa2c+fO
Dk3l8ssvh3q33XabSBFNCS7RnDl+/GRevOvA+A3G+TD66DjadrmpgquiVV2qPDu4xHhYu8WtGVyV
oupSM4gzwp/+9KdPPfWUMz694kfURs2o0NXu1auXqy8Szago1BWBRx55BA0CBsxUWv3Xf/2XMNfQ
QMHDddddJ0sfI76YTIB/B7dEbHjv4lmGu+NS+Z//+R+oh5/oTsBKE5dCeVWmOvqysbHx3nvvhQLt
Wi1y5LKgoECpFaZulJfOuFEWSBEzPA48O6kYTHPRAGLuSMaWk5Pz/PPPy0t7DvRyoQZmJOx5cFKO
Cfe4uDj0VJ3076E3WUU148EwDSZYNG8FijCIzLV///d/Fw8/7DNV8Rw7dgxdCghFS4Sh4OzsbKxd
U3pzcAve0K/q3LkzbL4OTUVlruE5RI7wYsa8xk9+8hN0rNE5QzcCzTG6UHiqoRjamh/96EcY9sPk
Am5BgiFxjM/BM4Kgfl999dWYV0WLIzOLgXTcxRjMggULMOuhGflXX30l2gL8hRobN27E/DJC4fd/
//d/aLYAEBMBGExyzE2VFlaYKaN9++23lZdimFMVRFM95B2TnqK48UKSWRMOWdy4VMXmRQWUicKI
hzIfffQRhJoKYxwXMxSgh3kQDNqjvNpYDofRmZ+fj3Yfl//2b/+GURMU7jXXXPPqq6+K+FEQCILJ
cQzdYZJXCGVt1LxbW1uL3jOKXqkh3YFOAPVcVHjl4JnIFGoUlmfAjSkwzB7AG+bvMOgCucy1g1vC
z+TJk1esWNGhqajMtb/+9a8iR6ira9asEU8EHiI82pg2XbduHRSDUYKxKDRW+KHtFR1XZA1j6vCP
6UXI0avE03HhwgWREQwQoseL1gmzhGLcTjNyPIMidTxuSOKll14SCtx99914JP/4xz8iCfEQtWuu
tasPNEHb/rOf/QzaIlFpru3YsQN9PBQoRkCfeOIJrKJGFlSKQWKbI5FT2QaK0ocQI0zwLO7ir2b8
kEtzTeb6wIEDmAfHAAEgSOvZXroy/nvuuUdOv2hCdhD/7373OwEcHQmQSUlJAfnz58+LyHEX080z
ZsxA24hqI4SiisKteRdqo5sqXvRSw8ByBJG5BqsFTwJm7h0UGIZSMFglnlKM/D/++ONy4MrBLRQ5
1pDhbQpHh6aiNNfwgo+NjYW2oslYvXo11L7ssstgiuEv3OihonsE01OMRWN2DC/p/fv3Q0k0H/CA
ZxLtLx6Abt264VJ0ImFswY3xRRhqiAfrWuBfM3LRtl5//fXwgN9rr72GgICGBhSXWCuwefNmOBxw
00xLFa3qUjOIpnrClnVc3JqxqVJUXWoG0VSgFcoPP4zRAg7MRCHQ9L906VL4QRcQfmBSw42faGfR
qMGN/gCWvr344otw46WL5ZXwCStZjI5gLTkMdxG/rI2ad+EHFQkvMOGZf41B4JNPPmmtMSYTKpKD
HMEyEN7wF2tzxdSB8O/gFhZcYiUGerAdmop41qCYGF0TdsngwYNFj0s0U+iuoFbDD0wutOR4XhIT
EzFYCD9oDLE4VeTlyiuvhB9YVNgbsXjxYrjFPAA6cljYh1W/MFXxWMGSExsybCNHPKK9FYNMCIiX
PeLBwyWSgAklXiXtmmvwb08fxIBSQLRokzEFDDMUbmGuoauG5uvpp59GcPHUw2oRSasU08wRfKK3
htjwgyGLS7TMMHFEDPjrIH5prmEAAk06YsCQPIJgsSPcWEUNtz2SMn7sasIbCrMKUmIL2UH8CJWU
lITk0AvF6jcsuIQbBijkeIvBLQoO5uzKlSshlFVU8y48iNr197//He4A/QWRuSYeGFQgx0WFmiEe
BlQI/PCQS4vNwS08MFgjgpg7NBWhGFoN9FquvfZadMXQ8xDZWbt2LbSFcYYBLexLQOdPNgTiSXvr
rbfgQaxTEQs/0VSJsHj8cGvatGlS/88//xxuNJQY3MITpRm5yo4BpeTkZMQjzEeM98DgE/Hb4yZY
qdJSRau61AyiqZ5oWzEUL3TQ/KsZmypF1aVmEE0FlCmKOQ7Zv9f0D9MZ9ERnFE0h3PihwUU8GAKE
W1hjoIpSxiX6u6KxA3YxboelwSJRURvt3YWfvn37SttOqSfdgUtA9MFQMZYvX+4gF3hni+cdPvGD
QYAlnsK/g1sYyho6dCi8dWgq4lmDVmiLYJOh7cXLWM7botLilhg7RAv29ddfY1AfEtHDgW69e/fG
pZhDGDRoENzoNEKOPg/c+KGpEfqLtg5j1RBicS382EYOodIqwiXAwj8aFjStsAkwhAMhfs6Ya/b0
wVsDcaJjLKIS069i7Rq2SeGWmFHdunUr3JgJEd6UitnLkfCJSRUEhN1TU1ODZuTPf/6zkOOvg/il
uQZv2LKAGEQLA9sRbmHzOU4XAWFOwbNyxZgmZHvxIwZhvP7v//4v3GKBIKYg4EavFTFjAgfTrLDS
hAUmq6jmXYQSra6IDZeB+AtFtoPk16dPH+QUtVaO52tmHIPk6JBhHlD0KjCvJMZC4NneLWy1w1AH
hivgp+NSkdrCioI1duTIETx7YvmavIXHGE8+luLBnsOcF4ZzcEvMJ6IPCrcYXRP+5TjiFVdcAQme
LrSM6HLBjQ46LAxcYqeFkECojFxYDCIe8Redb9HWQDcM2kMNGb8mN8dpKWOWbsdBVOqJthtBYLyK
GNDaAhfeOvihx/bOO+84yKxMVOlwSQFlQEyA4hK2o1KoUlh5S9MteOKvcMAaw7sW5h0m9ydOnIhR
VdEBlbVR866IGZoIlTQTojAQCYiWB5qjV+BAf7QGqPmYBRMGBKx/jFhgqAlBHNyCYSTm6To0Fak2
2h/0PQ4ePPjcc8+hgy3lcAwYMAB/UduxkF+Mo4j2DULRxGE4X/oXT4po3yBEEye2RaNhRPu2atUq
PINioYIIooxcRiIdGNzCBAWGGLEqA1MHmImTt5x02OoDCxJhMdMnYhDtqvgL4wx6YjgfC87QB4YH
NOm2CTnOkRgPw740GOWw+TD6KGNwMn7pX+VwnC48azZ6kDuGrEoFlwKaeB2j0YNEzJzAPkMjj7EA
tIEQyiqqeRceRPOLCVy4A/QXROaaGHNGOUn7w7bM0JmDEMNOGHyGPYQKjUu0Gvjr4BYqCvpAoj51
XCq22tpKlFaUWOAJP6K6i7/Y1SVqvDKsqMfobcCWFfKFCxdiNA79V5ihGKoRQmXkyuDSjU4h3Dh8
TiwdEHJ73BynJeNUOhwHUamHFScirLBZ4cbiDyxuwOpX/DDdMHbsWOFBM7PKdKXbJQVkKDjwVsBf
wFcKVQorbznvxr4Z0YHG+0N0GJS10fauiBmayHeY82nRp54JyArvoH3DigUx5oHt5IcPHxbjEJh5
h9DBLVgJMO+EudZxqTjJVvnUYDgQoUTLJh1o91RRyW4Smjj0uHAXY+Ro3zDLifYNa6qkf2XkUigd
Xbp0Qc8TlwiLpHEpbgkzEW6VOWXb0gr/Sn3Esgex5V/cVf5FuYwePRoWiUhXeUu6HecIAbFOEZ5h
AWNcULykZFhn4peeVQ7H6cKzZqMHuWPIqlQ0L9HZxlBZTEwMppJgdmPYQllFbe+KSETzK0bsNKPV
vzCIzDUcPoSxIhQJxk5VBYOWSzzkGzZskPNQ6ARgmQJ8imrn4Ja06+G541JR6dzuJRYKwO6EN0xT
4q+orOgcq55Y3BJNBswybPIXfVkAaTd+Ww9oyrE4FG0itghgIkN4sMfNjbRcCoK1emJIX5pr0Ac9
cqHVVVdd5VJsIpQbQURAbNaDQ7xdhMQrf2E+4rRnnDMCswzmFyZ90MeQtVHzrkgXmmCM1is6MBKd
EIDRgIknKIM6oOoYwG4QjR5esfIELFg5//Ef/yEm92F5OLiFgS60G6Lb1nGpuIERS9AQSrRvcIhc
C6EyNrkSFFkQg+5YJSYGFJXenHGjmwdvmFATG95FEDR6woH1xDISDFtizlReKh1KfYQthQFypQfh
xtJ+TNoiHqyxkxahrTfHOUIpP/zwwwiFQUEsUFEGdzJ+ZRCl23G68AkPeOF6vdFDzNAc2w6wLUzk
CPM5yipqe1eoLTQJ6HYviMw1vKFxRihKDrPgcoIMl1jBgMUHon+DeVI0YaJ08RdjyBj9FoNG9m5h
CArdWcypi1AdlAoiR6sEfeDQHM7FU41beEPDWhKa4C9MFvzFgyr/YiQJbvFDA4316fCP5caQ4AQm
/BUH/2CzN+YIcBf9bywO0IxcmH3onqL1wfSKiFOwwnHB4hJ/7XGzl5YqWtWl8+qhK4kF/ujJwXaU
Dbq0xcX+OM3YVCmqLjWDaPKRBOAQI3lyFl7TP6Zo4RMb9LBEV64RFr0I0U0XLxiUF37wiUuUIN7Q
eCtgPS82lMA8RcyyNtreFe9m+EdFGjJkiFJDug1AAO91FDEaN2UjhucXIxDSOsGhHrL1Q21BJcHT
KtZ027uF0QtUMMmng1JB/PLsVgdNnHLwDPnCogvRvuGhwCwwnnpsQZCqiqFEYapiiRumPnAXjwla
Now2wbzDul7MqcG/eCSVkUMonn1sxkIXSLzsseoABhasEGyrl6mgzUe6uPzLX/4ihViHpzKPcMtW
H4x+4RWDrfQoFDz4Ym5UqIFdHXhU0WRBT5jgCC7tP6ViUEkzR1ITmJh4u2GLBpY7SyEc9uIHSVFb
BBPRLgEyhHjZIaBQzx5JmQTaWAwNykYPck3I9uKHf2W7J1QSf1EhsRkOa35gN2MNLgZWlFXU9q5Q
CTYxBuRsrXmpcAA4Wtv+YPph/yP6WOisYKEiuh0oaSyfRDUSDLAWElsdMeyPHeBY0oFBEXngpL1b
sAmUm19EPF5PBc+zmIxAlcKaJOz0wfCvLDfYTGL+HnexFBdPuLiF5x9rFzDoBXsU+wqxkxnVHbdE
DxtrPGF84DHGcwUTVgTBsjM58I65YLSA9iJH0yP2FmBiBW2NCI5GDeNz6PeIS/y1xw23bNOCUBWt
6tI2iD31hALoaWFEDRsssAQE43zoE+PNhHIXh7nYxuZ1BYQa+AuLDQdXwuFAYVGIGBb9xS9+AUMT
Qxpo8dFlF6YVignTIq+88opoVrB8B9jRZqELjncD1o9jYbWyNuLlp7orlMHQKUZTfHZgryRAhw8I
oGLj6Bw0ERhFwOw/aj5emZj9F0ljOwseAbyxUE+wYgFurDfFU4C79m6hq4PFYRiiVirv9VQQORbC
ywl6VHjVoV+YfxSTaFAeB3xIZbBSDaYSzFO0WmivsKBK3BIr89A0YYUA9Eebj3FocQtD0WgM8RDB
TgIHCO1FLrq7GFPHQydTRFp4d8hL4UD7LOYTsLsWczJYIobGFtaV9OZAH0xDw/zCJB1W1sL2graw
LJFH9NnEtCmsTLyPYGqgBQAlxKlSzDZHMl3hQCnjFaAS2osfGy1FC4PKg9LHywJJAz5aMBipeGtg
NFGUTrvpYtUdXrXipWMPsr34cVaRUANr0fBCEQCROuJEA449v3hxY5sIgMOIVFZR1V0YmiLjqCHY
I6yCEFiXQbQzVFkweM9hCgmjSjAvlHKxdw/DRWjgpAkiPNi7hXF1WSGUUcHtxVRUMbt0ie413tDo
RstQwlyDsQUJlEcHSN4SDmiuNLlUd+UlTEaBRUrggIWhvLTHTfqxTUsVreoSAW2DyNg0HXi7oCuJ
lh29dmUbKjzbxqZKUXXphgIIgj0r8pQBTSWFEMYZkoOSMLYceBO3YJfD6kKTikqIniiEytpoe1eE
wodo5GbAdpOgh0AkgPEYjNNgwZm0UUQuUP/RNcXrE7sCYdmgpsnc2buFoRSleST9w+HFVJTRuurG
w4IXNh4cZUDxdodJiqcDW8dUTz36scg+sqYMoulG84gYlLewakrux1fK4caLAyt38VoRvUHlXcf6
4DWELMA/+nJy7ACXKCCscBCPNkbEMXAu41Qp5jhHsCZVbzoRj4P4ZUJwYNIG3WY40Noo1YPEcbrw
gE1veNXC4eDnIH7NUGixIceop3i5qKqo6q6IASVy4403yoEMzWj1LwxSc03/BdOhGgpzDeNM3koF
TQn6uLAD0LJjcsFb0RosHnRn/b6NHN1iDA8YDCyzQwIqAsI8wrytSu72JfaVY/8mdjti0YjK+HMm
Tq/r40yievADVtjMoTKmfawYhipwhh+6KD5O1+vJBdHaNTGyyr/oYYizLmFjYTshHifPmaD/h44X
bBE8mW7sb/dcgYCIAfM42Joq16X5XmeMs6L0sWrH90kzRRLwGQHMDGDwCcnh6AosU/NKuhg5g62G
JQeYUxPTss5H2xH6OJ+6f32CFT67gmEwP6qB9x0aPXHOgx/V8DzpEBiAnsfCGAKIAKw05d5YrEiQ
G8s9yQVMAYxCizN1PImHYUmABEjAEwJYeCCtNAyJeWszIFYaYCWu6hw4Z/TsIH2cSZp+jESA5pqR
SpN5IQESIAESIAESMCABToYasFCZJRIgARIgARIgASMRoLlmpNJkXkiABEiABEiABAxIgOaaAQuV
WSIBEiABEiABEjASAZprRipN5oUESIAESIAESMCABGiuGbBQmSUSIAESIAESIAEjEaC5ZqTSZF5I
gARIgARIgAQMSIDmmgELlVkiARIgARIgARIwEgGaa0YqTeaFBEiABEiABEjAgARorhmwUJklEiAB
EiABEiABIxGguWak0mReSIAESIAESIAEDEiA5poBC5VZIgESIAESIAESMBIBmmtGKk3mhQRIgARI
gARIwIAEaK4ZsFCZJRIgARIgARIgASMRoLlmpNJkXkiABEiABEiABAxIINy/ebrjjjv8qwBTJwES
CGgCISEh77zzjv6zwLZO/2VEDUlAzwQ4uqbn0qFuJEACJEACJEACJGDy8+iaKIF3331XD0WRl5eX
np6uB030oANpKEuBNHRIw2q13nnnnUrF9O9mW6fDMuLTrSwU0tAhDdHWcXRNWTR0kwAJkAAJkAAJ
kIDuCNBc012RUCESIAESIAESIAESUBKguaakQTcJkAAJkAAJkAAJ6I4AzTXdFQkVIgESIAESIAES
IAElAZprShp0kwAJkAAJkAAJkIDuCNBc012RUCESIAESIAESIAESUBKguaakQTcJkAAJkAAJkAAJ
6I4AzTXdFQkVIgESIAESIAESIAElAZprShp0kwAJkAAJkAAJkIDuCNBc012RUCESIAESIAESIAES
UBKguaakQTcJkAAJkAAJkAAJ6I4AzTXdFQkVIgESIAESIAESIAElAZprShp0kwAJkAAJkAAJkIDu
CNBc012RUCESIAESIAESIAESUBKguaakQTcJkAAJkAAJkAAJ6I4AzTXdFQkVIgESIAESIAESIAEl
AZprShp0kwAJkAAJkAAJkIDuCNBc012RUCESIAESIAESIAESUBKguaakQTcJkAAJkAAJkAAJ6I4A
zTXdFQkVIgESIAESIAESIAElAZprShp0kwAJkAAJkAAJkIDuCNBc012RUCESIAESIAESIAESUBKg
uaakQTcJkAAJkAAJkAAJ6I4AzTXdFQkVIgESIAESIAESIAElAZprShp0kwAJkAAJkAAJkIDuCNBc
012RUCESIAESIAESIAESUBKguaakQTcJkAAJkAAJkAAJ6I4AzTXdFQkVIgESIAESIAESIAElAZpr
Shp0kwAJkAAJkAAJkIDuCNBc012RUCESIAESIAESIAESUBKguaakQTcJkAAJkAAJkAAJ6I4AzTXd
FQkVIgESIAESIAESIAElAZprShp0kwAJkAAJkAAJkIDuCNBc012RUCESIAESIAESIAESUBKguaak
QTcJkAAJkAAJkAAJ6I4AzTXdFQkVIgESIIGOI1C3fbt5x46WqqqOS4IxBygBS2GhedOmxkOHAlR/
Y6sdbuzsMXckQAIkQAKSQOXKlTVr10aaTGUHDly2bp2U00EClosXS+65J7KiovTddzutWBE1diyZ
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
AElFTkSuQmCC
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>156765</attachid>
            <date>2012-08-06 14:44:17 -0700</date>
            <delta_ts>2012-08-06 14:44:17 -0700</delta_ts>
            <desc>Sample results page</desc>
            <filename>PerformanceTestsResults.html</filename>
            <type>text/html</type>
            <size>425370</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPldlYktpdCBQZXJmb3JtYW5jZSBU
ZXN0IFJlc3VsdHM8L3RpdGxlPgo8c2NyaXB0Pi8qIQogKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJy
YXJ5IHYxLjYuNAogKiBodHRwOi8vanF1ZXJ5LmNvbS8KICoKICogQ29weXJpZ2h0IDIwMTEsIEpv
aG4gUmVzaWcKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIg
bGljZW5zZXMuCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKICoKICogSW5jbHVkZXMgU2l6
emxlLmpzCiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCiAqIENvcHlyaWdodCAyMDExLCBUaGUgRG9q
byBGb3VuZGF0aW9uCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQsIEJTRCwgYW5kIEdQTCBMaWNl
bnNlcy4KICoKICogRGF0ZTogTW9uIFNlcCAxMiAxODo1NDo0OCAyMDExIC0wNDAwCiAqLwooZnVu
Y3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgewoKLy8gVXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50
IGFjY29yZGluZ2x5IHdpdGggd2luZG93IGFyZ3VtZW50IChzYW5kYm94KQp2YXIgZG9jdW1lbnQg
PSB3aW5kb3cuZG9jdW1lbnQsCiAgICAgICAgbmF2aWdhdG9yID0gd2luZG93Lm5hdmlnYXRvciwK
ICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjsKdmFyIGpRdWVyeSA9IChmdW5jdGlv
bigpIHsKCi8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5CnZhciBqUXVlcnkgPSBmdW5j
dGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgalF1ZXJ5
IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcK
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250
ZXh0LCByb290alF1ZXJ5ICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gTWFwIG92ZXIgalF1ZXJ5
IGluIGNhc2Ugb2Ygb3ZlcndyaXRlCiAgICAgICAgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCgog
ICAgICAgIC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlCiAgICAgICAgXyQg
PSB3aW5kb3cuJCwKCiAgICAgICAgLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBq
UXVlcnkoZG9jdW1lbnQpCiAgICAgICAgcm9vdGpRdWVyeSwKCiAgICAgICAgLy8gQSBzaW1wbGUg
d2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Mgb3IgSUQgc3RyaW5ncwogICAgICAgIC8vIFBy
aW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgj
OTUyMSkKICAgICAgICBxdWlja0V4cHIgPSAvXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMo
W1x3XC1dKikkKS8sCgogICAgICAgIC8vIENoZWNrIGlmIGEgc3RyaW5nIGhhcyBhIG5vbi13aGl0
ZXNwYWNlIGNoYXJhY3RlciBpbiBpdAogICAgICAgIHJub3R3aGl0ZSA9IC9cUy8sCgogICAgICAg
IC8vIFVzZWQgZm9yIHRyaW1taW5nIHdoaXRlc3BhY2UKICAgICAgICB0cmltTGVmdCA9IC9eXHMr
LywKICAgICAgICB0cmltUmlnaHQgPSAvXHMrJC8sCgogICAgICAgIC8vIENoZWNrIGZvciBkaWdp
dHMKICAgICAgICByZGlnaXQgPSAvXGQvLAoKICAgICAgICAvLyBNYXRjaCBhIHN0YW5kYWxvbmUg
dGFnCiAgICAgICAgcnNpbmdsZVRhZyA9IC9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sCgog
ICAgICAgIC8vIEpTT04gUmVnRXhwCiAgICAgICAgcnZhbGlkY2hhcnMgPSAvXltcXSw6e31cc10q
JC8sCiAgICAgICAgcnZhbGlkZXNjYXBlID0gL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1G
XXs0fSkvZywKICAgICAgICBydmFsaWR0b2tlbnMgPSAvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNl
fG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csCiAgICAgICAgcnZhbGlk
YnJhY2VzID0gLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywKCiAgICAgICAgLy8gVXNlcmFnZW50IFJl
Z0V4cAogICAgICAgIHJ3ZWJraXQgPSAvKHdlYmtpdClbIFwvXShbXHcuXSspLywKICAgICAgICBy
b3BlcmEgPSAvKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sCiAgICAgICAgcm1z
aWUgPSAvKG1zaWUpIChbXHcuXSspLywKICAgICAgICBybW96aWxsYSA9IC8obW96aWxsYSkoPzou
Kj8gcnY6KFtcdy5dKykpPy8sCgogICAgICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3Ig
Y2FtZWxpemluZwogICAgICAgIHJkYXNoQWxwaGEgPSAvLShbYS16XXxbMC05XSkvaWcsCiAgICAg
ICAgcm1zUHJlZml4ID0gL14tbXMtLywKCiAgICAgICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxD
YXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKQogICAgICAgIGZjYW1lbENhc2UgPSBmdW5jdGlv
biggYWxsLCBsZXR0ZXIgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKCBsZXR0ZXIgKyAiIiAp
LnRvVXBwZXJDYXNlKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gS2VlcCBhIFVzZXJBZ2VudCBz
dHJpbmcgZm9yIHVzZSB3aXRoIGpRdWVyeS5icm93c2VyCiAgICAgICAgdXNlckFnZW50ID0gbmF2
aWdhdG9yLnVzZXJBZ2VudCwKCiAgICAgICAgLy8gRm9yIG1hdGNoaW5nIHRoZSBlbmdpbmUgYW5k
IHZlcnNpb24gb2YgdGhlIGJyb3dzZXIKICAgICAgICBicm93c2VyTWF0Y2gsCgogICAgICAgIC8v
IFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQogICAgICAgIHJlYWR5TGlzdCwKCiAgICAg
ICAgLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIKICAgICAgICBET01Db250ZW50TG9hZGVkLAoK
ICAgICAgICAvLyBTYXZlIGEgcmVmZXJlbmNlIHRvIHNvbWUgY29yZSBtZXRob2RzCiAgICAgICAg
dG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLAogICAgICAgIGhhc093biA9IE9i
amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksCiAgICAgICAgcHVzaCA9IEFycmF5LnByb3Rv
dHlwZS5wdXNoLAogICAgICAgIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAogICAgICAg
IHRyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRyaW0sCiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnBy
b3RvdHlwZS5pbmRleE9mLAoKICAgICAgICAvLyBbW0NsYXNzXV0gLT4gdHlwZSBwYWlycwogICAg
ICAgIGNsYXNzMnR5cGUgPSB7fTsKCmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgY29uc3RydWN0b3I6IGpRdWVyeSwKICAgICAgICBpbml0OiBmdW5jdGlvbiggc2VsZWN0
b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKSB7CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2gsIGVs
ZW0sIHJldCwgZG9jOwoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSAkKCIiKSwgJChudWxsKSwg
b3IgJCh1bmRlZmluZWQpCiAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gSGFuZGxlICQoRE9NRWxlbWVudCkKICAgICAgICAgICAgICAgIGlmICggc2Vs
ZWN0b3Iubm9kZVR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9
IHRoaXNbMF0gPSBzZWxlY3RvcjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGgg
PSAxOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBUaGUgYm9keSBlbGVtZW50IG9ubHkgZXhpc3RzIG9uY2Us
IG9wdGltaXplIGZpbmRpbmcgaXQKICAgICAgICAgICAgICAgIGlmICggc2VsZWN0b3IgPT09ICJi
b2R5IiAmJiAhY29udGV4dCAmJiBkb2N1bWVudC5ib2R5ICkgewogICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhp
c1swXSA9IGRvY3VtZW50LmJvZHk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0
b3IgPSBzZWxlY3RvcjsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOwog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvLyBIYW5kbGUgSFRNTCBzdHJpbmdzCiAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEFyZSB3ZSBkZWFsaW5nIHdpdGggSFRNTCBzdHJpbmcgb3IgYW4gSUQ/CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc2VsZWN0b3IuY2hhckF0KDApID09PSAiPCIgJiYgc2VsZWN0b3Iu
Y2hhckF0KCBzZWxlY3Rvci5sZW5ndGggLSAxICkgPT09ICI+IiAmJiBzZWxlY3Rvci5sZW5ndGgg
Pj0gMyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhhdCBz
dHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSBy
ZWdleCBjaGVjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gWyBudWxs
LCBzZWxlY3RvciwgbnVsbCBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHF1aWNrRXhwci5leGVjKCBzZWxl
Y3RvciApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBWZXJpZnkgYSBtYXRjaCwgYW5kIHRoYXQgbm8gY29udGV4dCB3YXMgc3BlY2lmaWVkIGZv
ciAjaWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwg
IWNvbnRleHQpICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6
ICQoaHRtbCkgLT4gJChhcnJheSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG1hdGNoWzFdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WzBdIDogY29udGV4dDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IChjb250ZXh0ID8g
Y29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBzaW5nbGUgc3RyaW5nIGlzIHBh
c3NlZCBpbiBhbmQgaXQncyBhIHNpbmdsZSB0YWcKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGp1c3QgZG8gYSBjcmVhdGVFbGVtZW50IGFuZCBza2lwIHRoZSByZXN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSByc2luZ2xlVGFn
LmV4ZWMoIHNlbGVjdG9yICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCByZXQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9
IFsgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggcmV0WzFdICkgXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZm4uYXR0ci5jYWxs
KCBzZWxlY3RvciwgY29udGV4dCwgdHJ1ZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IFsgZG9jLmNyZWF0ZUVsZW1l
bnQoIHJldFsxXSApIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBq
UXVlcnkuYnVpbGRGcmFnbWVudCggWyBtYXRjaFsxXSBdLCBbIGRvYyBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gKHJldC5jYWNo
ZWFibGUgPyBqUXVlcnkuY2xvbmUocmV0LmZyYWdtZW50KSA6IHJldC5mcmFnbWVudCkuY2hpbGRO
b2RlczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm1lcmdlKCB0aGlz
LCBzZWxlY3RvciApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6
ICQoIiNpZCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCggbWF0Y2hbMl0gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0
dXJucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhh
dCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIElFIGFuZCBPcGVyYSByZXR1cm4gaXRlbXMKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5p
ZCAhPT0gbWF0Y2hbMl0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0b3IgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBp
bmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbMF0g
PSBlbGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGRvY3VtZW50
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9
IHNlbGVjdG9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjb250ZXh0IHx8IHJvb3RqUXVlcnkpLmZpbmQo
IHNlbGVjdG9yICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwg
Y29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZh
bGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCiAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3Ry
dWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQogICAgICAgICAgICAg
ICAgLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5CiAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJvb3RqUXVlcnkucmVhZHkoIHNlbGVjdG9yICk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVj
dG9yOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250
ZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWFr
ZUFycmF5KCBzZWxlY3RvciwgdGhpcyApOwogICAgICAgIH0sCgogICAgICAgIC8vIFN0YXJ0IHdp
dGggYW4gZW1wdHkgc2VsZWN0b3IKICAgICAgICBzZWxlY3RvcjogIiIsCgogICAgICAgIC8vIFRo
ZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKICAgICAgICBqcXVlcnk6ICIx
LjYuNCIsCgogICAgICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3Qg
aXMgMAogICAgICAgIGxlbmd0aDogMCwKCiAgICAgICAgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50
cyBjb250YWluZWQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQKICAgICAgICBzaXplOiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aDsKICAgICAgICB9LAoK
ICAgICAgICB0b0FycmF5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzbGlj
ZS5jYWxsKCB0aGlzLCAwICk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gR2V0IHRoZSBOdGggZWxl
bWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUgogICAgICAgIC8vIEdldCB0aGUgd2hv
bGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5CiAgICAgICAgZ2V0OiBmdW5j
dGlvbiggbnVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bSA9PSBudWxsID8KCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBhICdjbGVhbicgYXJyYXkKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b0FycmF5KCkgOgoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UmV0dXJuIGp1c3QgdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAoIG51bSA8IDAg
PyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKICAgICAgICB9LAoK
ICAgICAgICAvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhl
IHN0YWNrCiAgICAgICAgLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQp
CiAgICAgICAgcHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMsIG5hbWUsIHNlbGVjdG9yICkgewog
ICAgICAgICAgICAgICAgLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQK
ICAgICAgICAgICAgICAgIHZhciByZXQgPSB0aGlzLmNvbnN0cnVjdG9yKCk7CgogICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggZWxlbXMgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaC5hcHBseSggcmV0LCBlbGVtcyApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggcmV0LCBlbGVtcyApOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRv
IHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCiAgICAgICAgICAgICAgICByZXQucHJldk9iamVj
dCA9IHRoaXM7CgogICAgICAgICAgICAgICAgcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7Cgog
ICAgICAgICAgICAgICAgaWYgKCBuYW1lID09PSAiZmluZCIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAodGhpcy5zZWxlY3RvciA/ICIg
IiA6ICIiKSArIHNlbGVjdG9yOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbmFtZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICIu
IiArIG5hbWUgKyAiKCIgKyBzZWxlY3RvciArICIpIjsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAogICAgICAg
ICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9LAoKICAgICAgICAvLyBFeGVjdXRlIGEgY2Fs
bGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LgogICAgICAgIC8vIChZ
b3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5IG9mIGFyZ3MsIGJ1dCB0aGlz
IGlzCiAgICAgICAgLy8gb25seSB1c2VkIGludGVybmFsbHkuKQogICAgICAgIGVhY2g6IGZ1bmN0
aW9uKCBjYWxsYmFjaywgYXJncyApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZWFj
aCggdGhpcywgY2FsbGJhY2ssIGFyZ3MgKTsKICAgICAgICB9LAoKICAgICAgICByZWFkeTogZnVu
Y3Rpb24oIGZuICkgewogICAgICAgICAgICAgICAgLy8gQXR0YWNoIHRoZSBsaXN0ZW5lcnMKICAg
ICAgICAgICAgICAgIGpRdWVyeS5iaW5kUmVhZHkoKTsKCiAgICAgICAgICAgICAgICAvLyBBZGQg
dGhlIGNhbGxiYWNrCiAgICAgICAgICAgICAgICByZWFkeUxpc3QuZG9uZSggZm4gKTsKCiAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBlcTogZnVuY3Rpb24o
IGkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gLTEgPwogICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNsaWNlKCBpICkgOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNs
aWNlKCBpLCAraSArIDEgKTsKICAgICAgICB9LAoKICAgICAgICBmaXJzdDogZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcSggMCApOwogICAgICAgIH0sCgogICAgICAg
IGxhc3Q6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7
CiAgICAgICAgfSwKCiAgICAgICAgc2xpY2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICksCiAg
ICAgICAgICAgICAgICAgICAgICAgICJzbGljZSIsIHNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2lu
KCIsIikgKTsKICAgICAgICB9LAoKICAgICAgICBtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCh0aGlzLCBm
dW5jdGlvbiggZWxlbSwgaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxi
YWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICB9
LAoKICAgICAgICBlbmQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
cHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKG51bGwpOwogICAgICAgIH0sCgogICAgICAg
IC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KICAgICAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJy
YXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC4KICAgICAgICBwdXNoOiBwdXNo
LAogICAgICAgIHNvcnQ6IFtdLnNvcnQsCiAgICAgICAgc3BsaWNlOiBbXS5zcGxpY2UKfTsKCi8v
IEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGlu
c3RhbnRpYXRpb24KalF1ZXJ5LmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOwoKalF1ZXJ5
LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb3B0
aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsCiAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sCiAgICAgICAgICAgICAgICBpID0gMSwKICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgICAgICAgICBk
ZWVwID0gZmFsc2U7CgogICAgICAgIC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb24KICAg
ICAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKICAgICAgICAgICAgICAg
IGRlZXAgPSB0YXJnZXQ7CiAgICAgICAgICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwg
e307CiAgICAgICAgICAgICAgICAvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0CiAg
ICAgICAgICAgICAgICBpID0gMjsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBjYXNlIHdo
ZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5
KQogICAgICAgIGlmICggdHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgIWpRdWVyeS5pc0Z1
bmN0aW9uKHRhcmdldCkgKSB7CiAgICAgICAgICAgICAgICB0YXJnZXQgPSB7fTsKICAgICAgICB9
CgogICAgICAgIC8vIGV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlz
IHBhc3NlZAogICAgICAgIGlmICggbGVuZ3RoID09PSBpICkgewogICAgICAgICAgICAgICAgdGFy
Z2V0ID0gdGhpczsKICAgICAgICAgICAgICAgIC0taTsKICAgICAgICB9CgogICAgICAgIGZvciAo
IDsgaSA8IGxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAgICAgLy8gT25seSBkZWFsIHdpdGgg
bm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcwogICAgICAgICAgICAgICAgaWYgKCAob3B0aW9ucyA9
IGFyZ3VtZW50c1sgaSBdKSAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBF
eHRlbmQgdGhlIGJhc2Ugb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5hbWUg
aW4gb3B0aW9ucyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSB0YXJn
ZXRbIG5hbWUgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gb3B0aW9u
c1sgbmFtZSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG5l
dmVyLWVuZGluZyBsb29wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0YXJn
ZXQgPT09IGNvcHkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmpl
Y3RzIG9yIGFycmF5cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVlcCAm
JiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0g
alF1ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNvcHlJc0FycmF5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb3B5SXNBcnJheSA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnku
aXNBcnJheShzcmMpID8gc3JjIDogW107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6
IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2Jq
ZWN0cywgY2xvbmUgdGhlbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQg
dmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29weSAh
PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGFyZ2V0WyBuYW1lIF0gPSBjb3B5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAg
ICAgICAgLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QKICAgICAgICByZXR1cm4gdGFyZ2V0
Owp9OwoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgbm9Db25mbGljdDogZnVuY3Rpb24oIGRlZXAg
KSB7CiAgICAgICAgICAgICAgICBpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvdy4kID0gXyQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgaWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeTsKICAgICAgICB9LAoKICAgICAgICAv
LyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJz
LgogICAgICAgIGlzUmVhZHk6IGZhbHNlLAoKICAgICAgICAvLyBBIGNvdW50ZXIgdG8gdHJhY2sg
aG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlCiAgICAgICAgLy8gdGhlIHJlYWR5IGV2
ZW50IGZpcmVzLiBTZWUgIzY3ODEKICAgICAgICByZWFkeVdhaXQ6IDEsCgogICAgICAgIC8vIEhv
bGQgKG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVudAogICAgICAgIGhvbGRSZWFkeTogZnVuY3Rp
b24oIGhvbGQgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGhvbGQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5yZWFkeVdhaXQrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeSggdHJ1ZSApOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkK
ICAgICAgICByZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7CiAgICAgICAgICAgICAgICAvLyBFaXRo
ZXIgYSByZWxlYXNlZCBob2xkIG9yIGFuIERPTXJlYWR5L2xvYWQgZXZlbnQgYW5kIG5vdCB5ZXQg
cmVhZHkKICAgICAgICAgICAgICAgIGlmICggKHdhaXQgPT09IHRydWUgJiYgIS0talF1ZXJ5LnJl
YWR5V2FpdCkgfHwgKHdhaXQgIT09IHRydWUgJiYgIWpRdWVyeS5pc1JlYWR5KSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4g
Y2FzZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFkb2N1bWVudC5ib2R5ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtZW1i
ZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5p
c1JlYWR5ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgbm9ybWFsIERP
TSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdh
aXQgPiAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUg
YXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZQogICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHMKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuZm4udHJpZ2dlciApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlciggInJlYWR5IiApLnVu
YmluZCggInJlYWR5IiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKCiAgICAgICAgYmluZFJlYWR5OiBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgIGlmICggcmVhZHlMaXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmVhZHlMaXN0ID0galF1ZXJ5Ll9E
ZWZlcnJlZCgpOwoKICAgICAgICAgICAgICAgIC8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1l
bnQpLnJlYWR5KCkgaXMgY2FsbGVkIGFmdGVyIHRoZQogICAgICAgICAgICAgICAgLy8gYnJvd3Nl
ciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4KICAgICAgICAgICAgICAgIGlmICggZG9jdW1l
bnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVu
aXR5IHRvIGRlbGF5IHJlYWR5CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1l
b3V0KCBqUXVlcnkucmVhZHksIDEgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAvLyBNb3ppbGxhLCBPcGVyYSBhbmQgd2Via2l0IG5pZ2h0bGllcyBjdXJyZW50bHkgc3VwcG9y
dCB0aGlzIGV2ZW50CiAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVu
ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2Fs
bGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigg
IkRPTUNvbnRlbnRMb2FkZWQiLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSApOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwg
YWx3YXlzIHdvcmsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoICJsb2FkIiwgalF1ZXJ5LnJlYWR5LCBmYWxzZSApOwoKICAgICAgICAgICAgICAgIC8vIElm
IElFIGV2ZW50IG1vZGVsIGlzIHVzZWQKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGRvY3Vt
ZW50LmF0dGFjaEV2ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgZmly
aW5nIGJlZm9yZSBvbmxvYWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heWJlIGxhdGUg
YnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcwogICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVu
dC5hdHRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIERPTUNvbnRlbnRMb2FkZWQgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwg
dGhhdCB3aWxsIGFsd2F5cyB3b3JrCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hdHRh
Y2hFdmVudCggIm9ubG9hZCIsIGpRdWVyeS5yZWFkeSApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgSUUgYW5kIG5vdCBhIGZyYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNv
bnRpbnVhbGx5IGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHRvcGxldmVsID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID0gd2lu
ZG93LmZyYW1lRWxlbWVudCA9PSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNo
KGUpIHt9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5kb1Njcm9sbCAmJiB0b3BsZXZlbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb1Njcm9sbENoZWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9y
IGRldGFpbHMgY29uY2VybmluZyBpc0Z1bmN0aW9uLgogICAgICAgIC8vIFNpbmNlIHZlcnNpb24g
MS4zLCBET00gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGxpa2UgYWxlcnQKICAgICAgICAvLyBhcmVu
J3Qgc3VwcG9ydGVkLiBUaGV5IHJldHVybiBmYWxzZSBvbiBJRSAoIzI5NjgpLgogICAgICAgIGlz
RnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5
LnR5cGUob2JqKSA9PT0gImZ1bmN0aW9uIjsKICAgICAgICB9LAoKICAgICAgICBpc0FycmF5OiBB
cnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LnR5cGUob2JqKSA9PT0gImFycmF5IjsKICAgICAgICB9LAoKICAgICAgICAvLyBBIGNy
dWRlIHdheSBvZiBkZXRlcm1pbmluZyBpZiBhbiBvYmplY3QgaXMgYSB3aW5kb3cKICAgICAgICBp
c1dpbmRvdzogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYg
dHlwZW9mIG9iaiA9PT0gIm9iamVjdCIgJiYgInNldEludGVydmFsIiBpbiBvYmo7CiAgICAgICAg
fSwKCiAgICAgICAgaXNOYU46IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4gb2JqID09IG51bGwgfHwgIXJkaWdpdC50ZXN0KCBvYmogKSB8fCBpc05hTiggb2JqICk7CiAg
ICAgICAgfSwKCiAgICAgICAgdHlwZTogZnVuY3Rpb24oIG9iaiApIHsKICAgICAgICAgICAgICAg
IHJldHVybiBvYmogPT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyggb2Jq
ICkgOgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKG9i
aikgXSB8fCAib2JqZWN0IjsKICAgICAgICB9LAoKICAgICAgICBpc1BsYWluT2JqZWN0OiBmdW5j
dGlvbiggb2JqICkgewogICAgICAgICAgICAgICAgLy8gTXVzdCBiZSBhbiBPYmplY3QuCiAgICAg
ICAgICAgICAgICAvLyBCZWNhdXNlIG9mIElFLCB3ZSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhlIHBy
ZXNlbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eS4KICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IERPTSBub2RlcyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFzcyB0aHJv
dWdoLCBhcyB3ZWxsCiAgICAgICAgICAgICAgICBpZiAoICFvYmogfHwgalF1ZXJ5LnR5cGUob2Jq
KSAhPT0gIm9iamVjdCIgfHwgb2JqLm5vZGVUeXBlIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3Qg
b3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggb2JqLmNvbnN0cnVjdG9yICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIWhhc093bi5jYWxsKG9iaiwgImNvbnN0cnVjdG9yIikgJiYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwg
ImlzUHJvdG90eXBlT2YiKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKCBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTgsOSBXaWxsIHRocm93IGV4
Y2VwdGlvbnMgb24gY2VydGFpbiBob3N0IG9iamVjdHMgIzk4OTcKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8v
IE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLAog
ICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVz
IGFyZSBvd24uCgogICAgICAgICAgICAgICAgdmFyIGtleTsKICAgICAgICAgICAgICAgIGZvciAo
IGtleSBpbiBvYmogKSB7fQoKICAgICAgICAgICAgICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5l
ZCB8fCBoYXNPd24uY2FsbCggb2JqLCBrZXkgKTsKICAgICAgICB9LAoKICAgICAgICBpc0VtcHR5
T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewogICAgICAgICAgICAgICAgZm9yICggdmFyIG5hbWUg
aW4gb2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9LAoKICAgICAg
ICBlcnJvcjogZnVuY3Rpb24oIG1zZyApIHsKICAgICAgICAgICAgICAgIHRocm93IG1zZzsKICAg
ICAgICB9LAoKICAgICAgICBwYXJzZUpTT046IGZ1bmN0aW9uKCBkYXRhICkgewogICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgfHwgIWRhdGEgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVtb3Zl
ZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQogICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS50cmlt
KCBkYXRhICk7CgogICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBwYXJzZSB1c2luZyB0aGUg
bmF0aXZlIEpTT04gcGFyc2VyIGZpcnN0CiAgICAgICAgICAgICAgICBpZiAoIHdpbmRvdy5KU09O
ICYmIHdpbmRvdy5KU09OLnBhcnNlICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
d2luZG93LkpTT04ucGFyc2UoIGRhdGEgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGluY29taW5nIGRhdGEgaXMgYWN0dWFsIEpTT04KICAgICAg
ICAgICAgICAgIC8vIExvZ2ljIGJvcnJvd2VkIGZyb20gaHR0cDovL2pzb24ub3JnL2pzb24yLmpz
CiAgICAgICAgICAgICAgICBpZiAoIHJ2YWxpZGNoYXJzLnRlc3QoIGRhdGEucmVwbGFjZSggcnZh
bGlkZXNjYXBlLCAiQCIgKQogICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSggcnZhbGlk
dG9rZW5zLCAiXSIgKQogICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSggcnZhbGlkYnJh
Y2VzLCAiIikpICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgRnVuY3Rp
b24oICJyZXR1cm4gIiArIGRhdGEgKSkoKTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBqUXVlcnkuZXJyb3IoICJJbnZhbGlkIEpTT046ICIgKyBkYXRhICk7CiAgICAgICAgfSwK
CiAgICAgICAgLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZwogICAgICAgIHBhcnNlWE1MOiBm
dW5jdGlvbiggZGF0YSApIHsKICAgICAgICAgICAgICAgIHZhciB4bWwsIHRtcDsKICAgICAgICAg
ICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggd2luZG93LkRPTVBhcnNl
ciApIHsgLy8gU3RhbmRhcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBu
ZXcgRE9NUGFyc2VyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0gdG1w
LnBhcnNlRnJvbVN0cmluZyggZGF0YSAsICJ0ZXh0L3htbCIgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsgLy8gSUUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwg
PSBuZXcgQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxET00iICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeG1sLmFzeW5jID0gImZhbHNlIjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4bWwubG9hZFhNTCggZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoKCBlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB4bWwgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAo
ICF4bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCAicGFyc2VyZXJyb3IiICkubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiArIGRhdGEgKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIHJldHVybiB4bWw7CiAgICAgICAgfSwKCiAgICAgICAgbm9vcDogZnVuY3Rp
b24oKSB7fSwKCiAgICAgICAgLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRl
eHQKICAgICAgICAvLyBXb3JrYXJvdW5kcyBiYXNlZCBvbiBmaW5kaW5ncyBieSBKaW0gRHJpc2Nv
bGwKICAgICAgICAvLyBodHRwOi8vd2VibG9ncy5qYXZhLm5ldC9ibG9nL2RyaXNjb2xsL2FyY2hp
dmUvMjAwOS8wOS8wOC9ldmFsLWphdmFzY3JpcHQtZ2xvYmFsLWNvbnRleHQKICAgICAgICBnbG9i
YWxFdmFsOiBmdW5jdGlvbiggZGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggZGF0YSAmJiBy
bm90d2hpdGUudGVzdCggZGF0YSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1
c2UgZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSB1c2UgYW4gYW5vbnltb3VzIGZ1bmN0aW9uIHNvIHRoYXQgY29udGV4dCBpcyB3aW5k
b3cKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4galF1ZXJ5IGluIEZpcmVm
b3gKICAgICAgICAgICAgICAgICAgICAgICAgKCB3aW5kb3cuZXhlY1NjcmlwdCB8fCBmdW5jdGlv
biggZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbICJldmFs
IiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICB9ICkoIGRh
dGEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBDb252ZXJ0IGRh
c2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzCiAgICAg
ICAgLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcy
KQogICAgICAgIGNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmluZyApIHsKICAgICAgICAgICAgICAg
IHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNo
QWxwaGEsIGZjYW1lbENhc2UgKTsKICAgICAgICB9LAoKICAgICAgICBub2RlTmFtZTogZnVuY3Rp
b24oIGVsZW0sIG5hbWUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAm
JiBlbGVtLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5hbWUudG9VcHBlckNhc2UoKTsKICAg
ICAgICB9LAoKICAgICAgICAvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CiAgICAg
ICAgZWFjaDogZnVuY3Rpb24oIG9iamVjdCwgY2FsbGJhY2ssIGFyZ3MgKSB7CiAgICAgICAgICAg
ICAgICB2YXIgbmFtZSwgaSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG9i
amVjdC5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2JqID0gbGVuZ3RoID09PSB1
bmRlZmluZWQgfHwgalF1ZXJ5LmlzRnVuY3Rpb24oIG9iamVjdCApOwoKICAgICAgICAgICAgICAg
IGlmICggYXJncyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc09iaiApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9iamVjdCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHko
IG9iamVjdFsgbmFtZSBdLCBhcmdzICkgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9iamVjdFsgaSsrIF0sIGFyZ3MgKSA9
PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhlIG1vc3QgY29t
bW9uIHVzZSBvZiBlYWNoCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGlzT2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIG5hbWUgaW4gb2JqZWN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjYWxsYmFjay5jYWxsKCBvYmplY3RbIG5hbWUgXSwgbmFtZSwgb2JqZWN0WyBu
YW1lIF0gKSA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkg
PCBsZW5ndGg7ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBjYWxsYmFjay5jYWxsKCBvYmplY3RbIGkgXSwgaSwgb2JqZWN0WyBpKysgXSApID09PSBmYWxz
ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICB9LAoKICAg
ICAgICAvLyBVc2UgbmF0aXZlIFN0cmluZy50cmltIGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxl
CiAgICAgICAgdHJpbTogdHJpbSA/CiAgICAgICAgICAgICAgICBmdW5jdGlvbiggdGV4dCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiIgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyaW0uY2FsbCggdGV4dCApOwogICAgICAgICAgICAgICAgfSA6CgogICAgICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlIHVzZSBvdXIgb3duIHRyaW1taW5nIGZ1bmN0aW9uYWxpdHkKICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGV4dCA9PSBudWxsID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiA6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC50b1N0cmluZygpLnJlcGxhY2UoIHRyaW1M
ZWZ0LCAiIiApLnJlcGxhY2UoIHRyaW1SaWdodCwgIiIgKTsKICAgICAgICAgICAgICAgIH0sCgog
ICAgICAgIC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKICAgICAgICBtYWtl
QXJyYXk6IGZ1bmN0aW9uKCBhcnJheSwgcmVzdWx0cyApIHsKICAgICAgICAgICAgICAgIHZhciBy
ZXQgPSByZXN1bHRzIHx8IFtdOwoKICAgICAgICAgICAgICAgIGlmICggYXJyYXkgIT0gbnVsbCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHdpbmRvdywgc3RyaW5ncyAoYW5kIGZ1
bmN0aW9ucykgYWxzbyBoYXZlICdsZW5ndGgnCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
ZSBleHRyYSB0eXBlb2YgZnVuY3Rpb24gY2hlY2sgaXMgdG8gcHJldmVudCBjcmFzaGVzCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGluIFNhZmFyaSAyIChTZWU6ICMzMDM5KQogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUd2Vha2VkIGxvZ2ljIHNsaWdodGx5IHRvIGhhbmRsZSBCbGFja2Jl
cnJ5IDQuNyBSZWdFeHAgaXNzdWVzICM2OTMwCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0
eXBlID0galF1ZXJ5LnR5cGUoIGFycmF5ICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGFycmF5Lmxlbmd0aCA9PSBudWxsIHx8IHR5cGUgPT09ICJzdHJpbmciIHx8IHR5cGUgPT09ICJm
dW5jdGlvbiIgfHwgdHlwZSA9PT0gInJlZ2V4cCIgfHwgalF1ZXJ5LmlzV2luZG93KCBhcnJheSAp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guY2FsbCggcmV0LCBhcnJh
eSApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggcmV0LCBhcnJheSApOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK
ICAgICAgICB9LAoKICAgICAgICBpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyYXkgKSB7CiAg
ICAgICAgICAgICAgICBpZiAoICFhcnJheSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIC0xOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggaW5kZXhPZiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YuY2FsbCggYXJyYXksIGVs
ZW0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAs
IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGFycmF5WyBpIF0gPT09IGVsZW0gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfSwKCiAgICAg
ICAgbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgewogICAgICAgICAgICAgICAgdmFy
IGkgPSBmaXJzdC5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGogPSAwOwoKICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIHNlY29uZC5sZW5ndGggPT09ICJudW1iZXIiICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbCA9IHNlY29uZC5sZW5ndGg7IGogPCBsOyBq
KysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RbIGkrKyBdID0gc2Vj
b25kWyBqIF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHNlY29uZFtqXSAhPT0gdW5kZWZp
bmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNl
Y29uZFsgaisrIF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBmaXJzdC5sZW5ndGggPSBpOwoKICAgICAgICAgICAgICAgIHJldHVy
biBmaXJzdDsKICAgICAgICB9LAoKICAgICAgICBncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxi
YWNrLCBpbnYgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gW10sIHJldFZhbDsKICAgICAg
ICAgICAgICAgIGludiA9ICEhaW52OwoKICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggdGhl
IGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKICAgICAgICAgICAgICAgIC8vIHRoYXQgcGFz
cyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAs
IGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAg
ICAgICAgICAgICByZXRWYWwgPSAhIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaW52ICE9PSByZXRWYWwgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0LnB1c2goIGVsZW1zWyBpIF0gKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAg
ICAgICAgfSwKCiAgICAgICAgLy8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CiAgICAg
ICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7CiAgICAgICAgICAgICAg
ICB2YXIgdmFsdWUsIGtleSwgcmV0ID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAw
LAogICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGpxdWVyeSBvYmplY3RzIGFyZSB0cmVhdGVkIGFzIGFycmF5cwog
ICAgICAgICAgICAgICAgICAgICAgICBpc0FycmF5ID0gZWxlbXMgaW5zdGFuY2VvZiBqUXVlcnkg
fHwgbGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYg
KCAoIGxlbmd0aCA+IDAgJiYgZWxlbXNbIDAgXSAmJiBlbGVtc1sgbGVuZ3RoIC0xIF0gKSB8fCBs
ZW5ndGggPT09IDAgfHwgalF1ZXJ5LmlzQXJyYXkoIGVsZW1zICkgKSA7CgogICAgICAgICAgICAg
ICAgLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1z
IHRvIHRoZWlyCiAgICAgICAgICAgICAgICBpZiAoIGlzQXJyYXkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRbIHJldC5sZW5ndGggXSA9IHZh
bHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBv
YmplY3QsCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBrZXkgaW4gZWxlbXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBjYWxsYmFjayggZWxlbXNbIGtleSBdLCBrZXksIGFyZyApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXRbIHJldC5sZW5ndGggXSA9IHZhbHVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJh
eXMKICAgICAgICAgICAgICAgIHJldHVybiByZXQuY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7CiAg
ICAgICAgfSwKCiAgICAgICAgLy8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCiAg
ICAgICAgZ3VpZDogMSwKCiAgICAgICAgLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwg
b3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55CiAgICAgICAgLy8gYXJndW1lbnRzLgog
ICAgICAgIHByb3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICBp
ZiAoIHR5cGVvZiBjb250ZXh0ID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHRtcCA9IGZuWyBjb250ZXh0IF07CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQgPSBmbjsKICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSB0bXA7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdl
dCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWMKICAgICAgICAgICAgICAgIC8vIHRoaXMgdGhyb3dz
IGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCiAgICAgICAg
ICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAvLyBTaW11bGF0ZWQgYmluZAogICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5j
YWxsKCBhcmd1bWVudHMsIDIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgcHJveHkgPSBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHko
IGNvbnRleHQsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBndWlkIG9m
IHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNh
biBiZSByZW1vdmVkCiAgICAgICAgICAgICAgICBwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1
aWQgfHwgcHJveHkuZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwoKICAgICAgICAgICAgICAgIHJldHVy
biBwcm94eTsKICAgICAgICB9LAoKICAgICAgICAvLyBNdXRpZnVuY3Rpb25hbCBtZXRob2QgdG8g
Z2V0IGFuZCBzZXQgdmFsdWVzIHRvIGEgY29sbGVjdGlvbgogICAgICAgIC8vIFRoZSB2YWx1ZS9z
IGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgogICAgICAgIGFj
Y2VzczogZnVuY3Rpb24oIGVsZW1zLCBrZXksIHZhbHVlLCBleGVjLCBmbiwgcGFzcyApIHsKICAg
ICAgICAgICAgICAgIHZhciBsZW5ndGggPSBlbGVtcy5sZW5ndGg7CgogICAgICAgICAgICAgICAg
Ly8gU2V0dGluZyBtYW55IGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGtl
eSA9PT0gIm9iamVjdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBrIGlu
IGtleSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYWNjZXNzKCBl
bGVtcywgaywga2V5W2tdLCBleGVjLCBmbiwgdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbXM7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgLy8gU2V0dGluZyBvbmUgYXR0cmlidXRlCiAgICAgICAgICAg
ICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE9wdGlvbmFsbHksIGZ1bmN0aW9uIHZhbHVlcyBnZXQgZXhlY3V0ZWQgaWYgZXhlYyBpcyB0
cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMgPSAhcGFzcyAmJiBleGVjICYmIGpRdWVy
eS5pc0Z1bmN0aW9uKHZhbHVlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZuKCBlbGVtc1tpXSwga2V5LCBleGVjID8gdmFsdWUuY2FsbCggZWxlbXNbaV0sIGksIGZuKCBl
bGVtc1tpXSwga2V5ICkgKSA6IHZhbHVlLCBwYXNzICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtczsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBHZXR0aW5nIGFuIGF0dHJpYnV0ZQogICAgICAgICAgICAg
ICAgcmV0dXJuIGxlbmd0aCA/IGZuKCBlbGVtc1swXSwga2V5ICkgOiB1bmRlZmluZWQ7CiAgICAg
ICAgfSwKCiAgICAgICAgbm93OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAo
bmV3IERhdGUoKSkuZ2V0VGltZSgpOwogICAgICAgIH0sCgogICAgICAgIC8vIFVzZSBvZiBqUXVl
cnkuYnJvd3NlciBpcyBmcm93bmVkIHVwb24uCiAgICAgICAgLy8gTW9yZSBkZXRhaWxzOiBodHRw
Oi8vZG9jcy5qcXVlcnkuY29tL1V0aWxpdGllcy9qUXVlcnkuYnJvd3NlcgogICAgICAgIHVhTWF0
Y2g6IGZ1bmN0aW9uKCB1YSApIHsKICAgICAgICAgICAgICAgIHVhID0gdWEudG9Mb3dlckNhc2Uo
KTsKCiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSByd2Via2l0LmV4ZWMoIHVhICkgfHwKICAg
ICAgICAgICAgICAgICAgICAgICAgcm9wZXJhLmV4ZWMoIHVhICkgfHwKICAgICAgICAgICAgICAg
ICAgICAgICAgcm1zaWUuZXhlYyggdWEgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICB1YS5p
bmRleE9mKCJjb21wYXRpYmxlIikgPCAwICYmIHJtb3ppbGxhLmV4ZWMoIHVhICkgfHwKICAgICAg
ICAgICAgICAgICAgICAgICAgW107CgogICAgICAgICAgICAgICAgcmV0dXJuIHsgYnJvd3Nlcjog
bWF0Y2hbMV0gfHwgIiIsIHZlcnNpb246IG1hdGNoWzJdIHx8ICIwIiB9OwogICAgICAgIH0sCgog
ICAgICAgIHN1YjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBqUXVlcnlT
dWIoIHNlbGVjdG9yLCBjb250ZXh0ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IGpRdWVyeVN1Yi5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlz
ICk7CiAgICAgICAgICAgICAgICBqUXVlcnlTdWIuc3VwZXJjbGFzcyA9IHRoaXM7CiAgICAgICAg
ICAgICAgICBqUXVlcnlTdWIuZm4gPSBqUXVlcnlTdWIucHJvdG90eXBlID0gdGhpcygpOwogICAg
ICAgICAgICAgICAgalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOwogICAgICAg
ICAgICAgICAgalF1ZXJ5U3ViLnN1YiA9IHRoaXMuc3ViOwogICAgICAgICAgICAgICAgalF1ZXJ5
U3ViLmZuLmluaXQgPSBmdW5jdGlvbiBpbml0KCBzZWxlY3RvciwgY29udGV4dCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0ICYmIGNvbnRleHQgaW5zdGFuY2VvZiBqUXVl
cnkgJiYgIShjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5U3ViKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0ID0galF1ZXJ5U3ViKCBjb250ZXh0ICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnku
Zm4uaW5pdC5jYWxsKCB0aGlzLCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeVN1YiApOwog
ICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGpRdWVyeVN1Yi5mbi5pbml0LnByb3Rv
dHlwZSA9IGpRdWVyeVN1Yi5mbjsKICAgICAgICAgICAgICAgIHZhciByb290alF1ZXJ5U3ViID0g
alF1ZXJ5U3ViKGRvY3VtZW50KTsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnlTdWI7CiAg
ICAgICAgfSwKCiAgICAgICAgYnJvd3Nlcjoge30KfSk7CgovLyBQb3B1bGF0ZSB0aGUgY2xhc3My
dHlwZSBtYXAKalF1ZXJ5LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJh
eSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksIGZ1bmN0aW9uKGksIG5hbWUpIHsKICAg
ICAgICBjbGFzczJ0eXBlWyAiW29iamVjdCAiICsgbmFtZSArICJdIiBdID0gbmFtZS50b0xvd2Vy
Q2FzZSgpOwp9KTsKCmJyb3dzZXJNYXRjaCA9IGpRdWVyeS51YU1hdGNoKCB1c2VyQWdlbnQgKTsK
aWYgKCBicm93c2VyTWF0Y2guYnJvd3NlciApIHsKICAgICAgICBqUXVlcnkuYnJvd3NlclsgYnJv
d3Nlck1hdGNoLmJyb3dzZXIgXSA9IHRydWU7CiAgICAgICAgalF1ZXJ5LmJyb3dzZXIudmVyc2lv
biA9IGJyb3dzZXJNYXRjaC52ZXJzaW9uOwp9CgovLyBEZXByZWNhdGVkLCB1c2UgalF1ZXJ5LmJy
b3dzZXIud2Via2l0IGluc3RlYWQKaWYgKCBqUXVlcnkuYnJvd3Nlci53ZWJraXQgKSB7CiAgICAg
ICAgalF1ZXJ5LmJyb3dzZXIuc2FmYXJpID0gdHJ1ZTsKfQoKLy8gSUUgZG9lc24ndCBtYXRjaCBu
b24tYnJlYWtpbmcgc3BhY2VzIHdpdGggXHMKaWYgKCBybm90d2hpdGUudGVzdCggIlx4QTAiICkg
KSB7CiAgICAgICAgdHJpbUxlZnQgPSAvXltcc1x4QTBdKy87CiAgICAgICAgdHJpbVJpZ2h0ID0g
L1tcc1x4QTBdKyQvOwp9CgovLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sg
dG8gdGhlc2UKcm9vdGpRdWVyeSA9IGpRdWVyeShkb2N1bWVudCk7CgovLyBDbGVhbnVwIGZ1bmN0
aW9ucyBmb3IgdGhlIGRvY3VtZW50IHJlYWR5IG1ldGhvZAppZiAoIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIgKSB7CiAgICAgICAgRE9NQ29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2Fk
ZWQiLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSApOwogICAgICAgICAgICAgICAgalF1ZXJ5LnJl
YWR5KCk7CiAgICAgICAgfTsKCn0gZWxzZSBpZiAoIGRvY3VtZW50LmF0dGFjaEV2ZW50ICkgewog
ICAgICAgIERPTUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSBib2R5IGV4aXN0cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRs
ZSBvdmVyemVhbG91cyAodGlja2V0ICM1NDQzKS4KICAgICAgICAgICAgICAgIGlmICggZG9jdW1l
bnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ZG9jdW1lbnQuZGV0YWNoRXZlbnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBET01Db250ZW50TG9h
ZGVkICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH07Cn0KCi8vIFRoZSBET00gcmVhZHkgY2hlY2sgZm9yIEludGVybmV0
IEV4cGxvcmVyCmZ1bmN0aW9uIGRvU2Nyb2xsQ2hlY2soKSB7CiAgICAgICAgaWYgKCBqUXVlcnku
aXNSZWFkeSApIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHRy
eSB7CiAgICAgICAgICAgICAgICAvLyBJZiBJRSBpcyB1c2VkLCB1c2UgdGhlIHRyaWNrIGJ5IERp
ZWdvIFBlcmluaQogICAgICAgICAgICAgICAgLy8gaHR0cDovL2phdmFzY3JpcHQubndib3guY29t
L0lFQ29udGVudExvYWRlZC8KICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dC5kb1Njcm9sbCgibGVmdCIpOwogICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgICAg
c2V0VGltZW91dCggZG9TY3JvbGxDaGVjaywgMSApOwogICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgIH0KCiAgICAgICAgLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRpbmcgZnVuY3Rpb25zCiAg
ICAgICAgalF1ZXJ5LnJlYWR5KCk7Cn0KCnJldHVybiBqUXVlcnk7Cgp9KSgpOwoKCnZhciAvLyBQ
cm9taXNlIG1ldGhvZHMKICAgICAgICBwcm9taXNlTWV0aG9kcyA9ICJkb25lIGZhaWwgaXNSZXNv
bHZlZCBpc1JlamVjdGVkIHByb21pc2UgdGhlbiBhbHdheXMgcGlwZSIuc3BsaXQoICIgIiApLAog
ICAgICAgIC8vIFN0YXRpYyByZWZlcmVuY2UgdG8gc2xpY2UKICAgICAgICBzbGljZURlZmVycmVk
ID0gW10uc2xpY2U7CgpqUXVlcnkuZXh0ZW5kKHsKICAgICAgICAvLyBDcmVhdGUgYSBzaW1wbGUg
ZGVmZXJyZWQgKG9uZSBjYWxsYmFja3MgbGlzdCkKICAgICAgICBfRGVmZXJyZWQ6IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgdmFyIC8vIGNhbGxiYWNrcyBsaXN0CiAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrcyA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9y
ZWQgWyBjb250ZXh0ICwgYXJncyBdCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBmaXJpbmcgd2hlbiBhbHJlYWR5IGRvaW5n
IHNvCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZywKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZmxhZyB0byBrbm93IGlmIHRoZSBkZWZlcnJlZCBoYXMgYmVlbiBjYW5jZWxsZWQKICAg
ICAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgZGVmZXJyZWQgaXRzZWxmCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkICA9
IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uZSggZjEsIGYyLCAuLi4p
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjYW5jZWxsZWQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0g
YXJndW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmlyZWQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyZWQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpcmVkID0gZmlyZWQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlyZWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IGkgPSAwLCBsZW5ndGggPSBhcmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBh
cmdzWyBpIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiYXJyYXki
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQuZG9uZS5hcHBseSggZGVmZXJyZWQsIGVsZW0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCB0eXBlID09PSAiZnVuY3Rpb24iICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goIGVsZW0g
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBfZmlyZWQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIF9maXJlZFsgMCBdLCBfZmlyZWRbIDEgXSApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHdpdGggZ2l2
ZW4gY29udGV4dCBhbmQgYXJncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29s
dmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWNhbmNlbGxlZCAmJiAhZmlyZWQgJiYgIWZpcmluZyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFr
ZSBzdXJlIGFyZ3MgYXJlIGF2YWlsYWJsZSAoIzg0MjEpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IFtdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmcgPSAxOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCBjYWxsYmFj
a3NbIDAgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zaGlmdCgpLmFwcGx5KCBjb250ZXh0LCBhcmdz
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
cmVkID0gWyBjb250ZXh0LCBhcmdzIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nID0gMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aXRoIHRoaXMgYXMgY29udGV4dCBhbmQg
Z2l2ZW4gYXJndW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTog
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5yZXNvbHZlV2l0aCggdGhpcywgYXJndW1lbnRzICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYXMgdGhpcyBk
ZWZlcnJlZCBiZWVuIHJlc29sdmVkPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
UmVzb2x2ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICEhKCBmaXJpbmcgfHwgZmlyZWQgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW5jZWwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkID0gMTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcyA9IFtdOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAg
ICAgICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgICAgICB9LAoKICAgICAgICAvLyBGdWxsIGZs
ZWRnZWQgZGVmZXJyZWQgKHR3byBjYWxsYmFja3MgbGlzdCkKICAgICAgICBEZWZlcnJlZDogZnVu
Y3Rpb24oIGZ1bmMgKSB7CiAgICAgICAgICAgICAgICB2YXIgZGVmZXJyZWQgPSBqUXVlcnkuX0Rl
ZmVycmVkKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxEZWZlcnJlZCA9IGpRdWVyeS5f
RGVmZXJyZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTsKICAgICAgICAgICAg
ICAgIC8vIEFkZCBlcnJvckRlZmVycmVkIG1ldGhvZHMsIHRoZW4gYW5kIHByb21pc2UKICAgICAg
ICAgICAgICAgIGpRdWVyeS5leHRlbmQoIGRlZmVycmVkLCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHRoZW46IGZ1bmN0aW9uKCBkb25lQ2FsbGJhY2tzLCBmYWlsQ2FsbGJhY2tzICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLmRvbmUoIGRvbmVDYWxsYmFja3Mg
KS5mYWlsKCBmYWlsQ2FsbGJhY2tzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAg
ICAgICAgIGFsd2F5czogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGRlZmVycmVkLmRvbmUuYXBwbHkoIGRlZmVycmVkLCBhcmd1bWVudHMgKS5mYWls
LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAg
ICAgICAgICAgICAgICAgICAgICAgZmFpbDogZmFpbERlZmVycmVkLmRvbmUsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJlamVjdFdpdGg6IGZhaWxEZWZlcnJlZC5yZXNvbHZlV2l0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgcmVqZWN0OiBmYWlsRGVmZXJyZWQucmVzb2x2ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFpbERlZmVycmVkLmlzUmVzb2x2ZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHBpcGU6IGZ1bmN0aW9uKCBmbkRvbmUsIGZuRmFpbCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LkRlZmVycmVkKGZ1bmN0
aW9uKCBuZXdEZWZlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5lYWNoKCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvbmU6IFsgZm5Eb25lLCAicmVzb2x2ZSIgXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbDogWyBmbkZhaWwsICJyZWplY3QiIF0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCBoYW5kbGVy
LCBkYXRhICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZm4gPSBkYXRhWyAwIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gZGF0YVsgMSBdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBmbiApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkWyBoYW5kbGVyIF0oZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm5lZCA9IGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0dXJu
ZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuZWQucHJvbWlzZSgpLnRoZW4oIG5ld0RlZmVyLnJlc29sdmUsIG5ld0RlZmVy
LnJlamVjdCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVmZXJbIGFjdGlv
biArICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IG5ld0RlZmVyIDogdGhpcywgWyByZXR1
cm5lZCBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRbIGhhbmRsZXIgXSggbmV3RGVmZXJbIGFjdGlv
biBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pLnByb21pc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZl
cnJlZAogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBw
cm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAg
ICAgIHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBvYmogPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcHJvbWlzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9taXNlID0gb2JqID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gcHJvbWlzZU1ldGhvZHMubGVu
Z3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCBpLS0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpbIHByb21pc2VNZXRob2RzW2ld
IF0gPSBkZWZlcnJlZFsgcHJvbWlzZU1ldGhvZHNbaV0gXTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgb25seSBvbmUgY2FsbGJhY2sgbGlzdCB3aWxsIGJlIHVzZWQKICAg
ICAgICAgICAgICAgIGRlZmVycmVkLmRvbmUoIGZhaWxEZWZlcnJlZC5jYW5jZWwgKS5mYWlsKCBk
ZWZlcnJlZC5jYW5jZWwgKTsKICAgICAgICAgICAgICAgIC8vIFVuZXhwb3NlIGNhbmNlbAogICAg
ICAgICAgICAgICAgZGVsZXRlIGRlZmVycmVkLmNhbmNlbDsKICAgICAgICAgICAgICAgIC8vIENh
bGwgZ2l2ZW4gZnVuYyBpZiBhbnkKICAgICAgICAgICAgICAgIGlmICggZnVuYyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgICAgICB9LAoK
ICAgICAgICAvLyBEZWZlcnJlZCBoZWxwZXIKICAgICAgICB3aGVuOiBmdW5jdGlvbiggZmlyc3RQ
YXJhbSApIHsKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLAogICAgICAgICAg
ICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJn
cy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gbGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZCA9IGxlbmd0aCA8PSAxICYmIGZpcnN0UGFyYW0gJiYg
alF1ZXJ5LmlzRnVuY3Rpb24oIGZpcnN0UGFyYW0ucHJvbWlzZSApID8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaXJzdFBhcmFtIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuRGVmZXJyZWQoKTsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVG
dW5jKCBpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIHZhbHVl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbIGkgXSA9IGFyZ3VtZW50
cy5sZW5ndGggPiAxID8gc2xpY2VEZWZlcnJlZC5jYWxsKCBhcmd1bWVudHMsIDAgKSA6IHZhbHVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISggLS1jb3VudCApICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyYW5nZSBidWcgaW4g
RkY0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsdWVzIGNo
YW5nZWQgb250byB0aGUgYXJndW1lbnRzIG9iamVjdCBzb21ldGltZXMgZW5kIHVwIGFzIHVuZGVm
aW5lZCB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91
dHNpZGUgdGhlICQud2hlbiBtZXRob2QuIENsb25pbmcgdGhlIG9iamVjdCBpbnRvIGEgZnJlc2gg
YXJyYXkgc29sdmVzIHRoZSBpc3N1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGRlZmVycmVkLCBzbGljZURlZmVycmVkLmNhbGwo
IGFyZ3MsIDAgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgg
bGVuZ3RoID4gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCA7IGkgPCBsZW5ndGg7
IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFyZ3NbIGkgXSAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggYXJnc1sgaSBdLnByb21pc2UgKSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbIGkgXS5wcm9taXNlKCkudGhlbiggcmVz
b2x2ZUZ1bmMoaSksIGRlZmVycmVkLnJlamVjdCApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
LWNvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb3VudCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQs
IGFyZ3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggZGVmZXJyZWQgIT09IGZpcnN0UGFyYW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLnJlc29sdmVXaXRoKCBkZWZlcnJlZCwgbGVuZ3RoID8gWyBmaXJzdFBhcmFtIF0g
OiBbXSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVk
LnByb21pc2UoKTsKICAgICAgICB9Cn0pOwoKCgpqUXVlcnkuc3VwcG9ydCA9IChmdW5jdGlvbigp
IHsKCiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICksCiAg
ICAgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQs
CiAgICAgICAgICAgICAgICBhbGwsCiAgICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgICAg
c2VsZWN0LAogICAgICAgICAgICAgICAgb3B0LAogICAgICAgICAgICAgICAgaW5wdXQsCiAgICAg
ICAgICAgICAgICBtYXJnaW5EaXYsCiAgICAgICAgICAgICAgICBzdXBwb3J0LAogICAgICAgICAg
ICAgICAgZnJhZ21lbnQsCiAgICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgICAgdGVz
dEVsZW1lbnRQYXJlbnQsCiAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudCwKICAgICAgICAgICAg
ICAgIHRlc3RFbGVtZW50U3R5bGUsCiAgICAgICAgICAgICAgICB0ZHMsCiAgICAgICAgICAgICAg
ICBldmVudHMsCiAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICBpLAog
ICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQ7CgogICAgICAgIC8vIFByZWxpbWluYXJ5IHRlc3Rz
CiAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwgInQiKTsKICAgICAgICBkaXYu
aW5uZXJIVE1MID0gIiAgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYScgc3R5bGU9
J3RvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNr
Ym94Jy8+IjsKCgogICAgICAgIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICk7
CiAgICAgICAgYSA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggImEiIClbIDAgXTsKCiAgICAg
ICAgLy8gQ2FuJ3QgZ2V0IGJhc2ljIHRlc3Qgc3VwcG9ydAogICAgICAgIGlmICggIWFsbCB8fCAh
YWxsLmxlbmd0aCB8fCAhYSApIHsKICAgICAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9
CgogICAgICAgIC8vIEZpcnN0IGJhdGNoIG9mIHN1cHBvcnRzIHRlc3RzCiAgICAgICAgc2VsZWN0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNlbGVjdCIgKTsKICAgICAgICBvcHQgPSBzZWxl
Y3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpICk7CiAgICAg
ICAgaW5wdXQgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJpbnB1dCIgKVsgMCBdOwoKICAg
ICAgICBzdXBwb3J0ID0gewogICAgICAgICAgICAgICAgLy8gSUUgc3RyaXBzIGxlYWRpbmcgd2hp
dGVzcGFjZSB3aGVuIC5pbm5lckhUTUwgaXMgdXNlZAogICAgICAgICAgICAgICAgbGVhZGluZ1do
aXRlc3BhY2U6ICggZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMgKSwKCiAgICAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0Ym9keSBlbGVtZW50cyBhcmVuJ3QgYXV0b21hdGljYWxs
eSBpbnNlcnRlZAogICAgICAgICAgICAgICAgLy8gSUUgd2lsbCBpbnNlcnQgdGhlbSBpbnRvIGVt
cHR5IHRhYmxlcwogICAgICAgICAgICAgICAgdGJvZHk6ICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoICJ0Ym9keSIgKS5sZW5ndGgsCgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
bGluayBlbGVtZW50cyBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MCiAgICAg
ICAgICAgICAgICAvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFCiAgICAg
ICAgICAgICAgICBodG1sU2VyaWFsaXplOiAhIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggImxp
bmsiICkubGVuZ3RoLAoKICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgc3R5bGUgaW5mb3JtYXRp
b24gZnJvbSBnZXRBdHRyaWJ1dGUKICAgICAgICAgICAgICAgIC8vIChJRSB1c2VzIC5jc3NUZXh0
IGluc3RlYWQpCiAgICAgICAgICAgICAgICBzdHlsZTogL3RvcC8udGVzdCggYS5nZXRBdHRyaWJ1
dGUoInN0eWxlIikgKSwKCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBVUkxzIGFy
ZW4ndCBtYW5pcHVsYXRlZAogICAgICAgICAgICAgICAgLy8gKElFIG5vcm1hbGl6ZXMgaXQgYnkg
ZGVmYXVsdCkKICAgICAgICAgICAgICAgIGhyZWZOb3JtYWxpemVkOiAoIGEuZ2V0QXR0cmlidXRl
KCAiaHJlZiIgKSA9PT0gIi9hIiApLAoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGVsZW1lbnQgb3BhY2l0eSBleGlzdHMKICAgICAgICAgICAgICAgIC8vIChJRSB1c2VzIGZpbHRl
ciBpbnN0ZWFkKQogICAgICAgICAgICAgICAgLy8gVXNlIGEgcmVnZXggdG8gd29yayBhcm91bmQg
YSBXZWJLaXQgaXNzdWUuIFNlZSAjNTE0NQogICAgICAgICAgICAgICAgb3BhY2l0eTogL14wLjU1
JC8udGVzdCggYS5zdHlsZS5vcGFjaXR5ICksCgogICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHN0
eWxlIGZsb2F0IGV4aXN0ZW5jZQogICAgICAgICAgICAgICAgLy8gKElFIHVzZXMgc3R5bGVGbG9h
dCBpbnN0ZWFkIG9mIGNzc0Zsb2F0KQogICAgICAgICAgICAgICAgY3NzRmxvYXQ6ICEhYS5zdHls
ZS5jc3NGbG9hdCwKCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBubyB2YWx1
ZSBpcyBzcGVjaWZpZWQgZm9yIGEgY2hlY2tib3gKICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQg
ZGVmYXVsdHMgdG8gIm9uIi4KICAgICAgICAgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8g
IiIgaW5zdGVhZCkKICAgICAgICAgICAgICAgIGNoZWNrT246ICggaW5wdXQudmFsdWUgPT09ICJv
biIgKSwKCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNlbGVjdGVkLWJ5LWRl
ZmF1bHQgb3B0aW9uIGhhcyBhIHdvcmtpbmcgc2VsZWN0ZWQgcHJvcGVydHkuCiAgICAgICAgICAg
ICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZSwgSUUgdG9v
LCBpZiBpdCdzIGluIGFuIG9wdGdyb3VwKQogICAgICAgICAgICAgICAgb3B0U2VsZWN0ZWQ6IG9w
dC5zZWxlY3RlZCwKCiAgICAgICAgICAgICAgICAvLyBUZXN0IHNldEF0dHJpYnV0ZSBvbiBjYW1l
bENhc2UgY2xhc3MuIElmIGl0IHdvcmtzLCB3ZSBuZWVkIGF0dHJGaXhlcyB3aGVuIGRvaW5nIGdl
dC9zZXRBdHRyaWJ1dGUgKGllNi83KQogICAgICAgICAgICAgICAgZ2V0U2V0QXR0cmlidXRlOiBk
aXYuY2xhc3NOYW1lICE9PSAidCIsCgogICAgICAgICAgICAgICAgLy8gV2lsbCBiZSBkZWZpbmVk
IGxhdGVyCiAgICAgICAgICAgICAgICBzdWJtaXRCdWJibGVzOiB0cnVlLAogICAgICAgICAgICAg
ICAgY2hhbmdlQnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAgIGZvY3VzaW5CdWJibGVzOiBm
YWxzZSwKICAgICAgICAgICAgICAgIGRlbGV0ZUV4cGFuZG86IHRydWUsCiAgICAgICAgICAgICAg
ICBub0Nsb25lRXZlbnQ6IHRydWUsCiAgICAgICAgICAgICAgICBpbmxpbmVCbG9ja05lZWRzTGF5
b3V0OiBmYWxzZSwKICAgICAgICAgICAgICAgIHNocmlua1dyYXBCbG9ja3M6IGZhbHNlLAogICAg
ICAgICAgICAgICAgcmVsaWFibGVNYXJnaW5SaWdodDogdHJ1ZQogICAgICAgIH07CgogICAgICAg
IC8vIE1ha2Ugc3VyZSBjaGVja2VkIHN0YXR1cyBpcyBwcm9wZXJseSBjbG9uZWQKICAgICAgICBp
bnB1dC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICBzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gaW5w
dXQuY2xvbmVOb2RlKCB0cnVlICkuY2hlY2tlZDsKCiAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIG9wdGlvbnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlbid0IG1hcmtlZCBhcyBkaXNh
YmxlZAogICAgICAgIC8vIChXZWJLaXQgbWFya3MgdGhlbSBhcyBkaXNhYmxlZCkKICAgICAgICBz
ZWxlY3QuZGlzYWJsZWQgPSB0cnVlOwogICAgICAgIHN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0
LmRpc2FibGVkOwoKICAgICAgICAvLyBUZXN0IHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRl
bGV0ZSBhbiBleHBhbmRvIGZyb20gYW4gZWxlbWVudAogICAgICAgIC8vIEZhaWxzIGluIEludGVy
bmV0IEV4cGxvcmVyCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGRlbGV0ZSBkaXYudGVz
dDsKICAgICAgICB9IGNhdGNoKCBlICkgewogICAgICAgICAgICAgICAgc3VwcG9ydC5kZWxldGVF
eHBhbmRvID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoICFkaXYuYWRkRXZlbnRMaXN0
ZW5lciAmJiBkaXYuYXR0YWNoRXZlbnQgJiYgZGl2LmZpcmVFdmVudCApIHsKICAgICAgICAgICAg
ICAgIGRpdi5hdHRhY2hFdmVudCggIm9uY2xpY2siLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2xvbmluZyBhIG5vZGUgc2hvdWxkbid0IGNvcHkgb3ZlciBhbnkKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYm91bmQgZXZlbnQgaGFuZGxlcnMgKElFIGRvZXMgdGhp
cykKICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5ub0Nsb25lRXZlbnQgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZGl2LmNsb25lTm9kZSggdHJ1ZSAp
LmZpcmVFdmVudCggIm9uY2xpY2siICk7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiBh
IHJhZGlvIG1haW50YWlucyBpdCdzIHZhbHVlCiAgICAgICAgLy8gYWZ0ZXIgYmVpbmcgYXBwZW5k
ZWQgdG8gdGhlIERPTQogICAgICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5w
dXQiKTsKICAgICAgICBpbnB1dC52YWx1ZSA9ICJ0IjsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1
dGUoInR5cGUiLCAicmFkaW8iKTsKICAgICAgICBzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52
YWx1ZSA9PT0gInQiOwoKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCAiY2hl
Y2tlZCIpOwogICAgICAgIGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsKICAgICAgICBmcmFnbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAgICBmcmFnbWVudC5h
cHBlbmRDaGlsZCggZGl2LmZpcnN0Q2hpbGQgKTsKCiAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3Qg
Y2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzCiAgICAgICAgc3VwcG9y
dC5jaGVja0Nsb25lID0gZnJhZ21lbnQuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVl
ICkubGFzdENoaWxkLmNoZWNrZWQ7CgogICAgICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKCiAgICAg
ICAgLy8gRmlndXJlIG91dCBpZiB0aGUgVzNDIGJveCBtb2RlbCB3b3JrcyBhcyBleHBlY3RlZAog
ICAgICAgIGRpdi5zdHlsZS53aWR0aCA9IGRpdi5zdHlsZS5wYWRkaW5nTGVmdCA9ICIxcHgiOwoK
ICAgICAgICBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJib2R5IiApWyAw
IF07CiAgICAgICAgLy8gV2UgdXNlIG91ciBvd24sIGludmlzaWJsZSwgYm9keSB1bmxlc3MgdGhl
IGJvZHkgaXMgYWxyZWFkeSBwcmVzZW50CiAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSB1c2Ug
YSBkaXYgKCM5MjM5KQogICAgICAgIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggYm9keSA/ICJkaXYiIDogImJvZHkiICk7CiAgICAgICAgdGVzdEVsZW1lbnRTdHlsZSA9IHsK
ICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICJoaWRkZW4iLAogICAgICAgICAgICAgICAgd2lk
dGg6IDAsCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsCiAgICAgICAgICAgICAgICBib3JkZXI6
IDAsCiAgICAgICAgICAgICAgICBtYXJnaW46IDAsCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5k
OiAibm9uZSIKICAgICAgICB9OwogICAgICAgIGlmICggYm9keSApIHsKICAgICAgICAgICAgICAg
IGpRdWVyeS5leHRlbmQoIHRlc3RFbGVtZW50U3R5bGUsIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcG9zaXRpb246ICJhYnNvbHV0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICIt
MTAwMHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAiLTEwMDBweCIKICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBmb3IgKCBpIGluIHRlc3RFbGVtZW50U3R5bGUg
KSB7CiAgICAgICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZVsgaSBdID0gdGVzdEVsZW1lbnRT
dHlsZVsgaSBdOwogICAgICAgIH0KICAgICAgICB0ZXN0RWxlbWVudC5hcHBlbmRDaGlsZCggZGl2
ICk7CiAgICAgICAgdGVzdEVsZW1lbnRQYXJlbnQgPSBib2R5IHx8IGRvY3VtZW50RWxlbWVudDsK
ICAgICAgICB0ZXN0RWxlbWVudFBhcmVudC5pbnNlcnRCZWZvcmUoIHRlc3RFbGVtZW50LCB0ZXN0
RWxlbWVudFBhcmVudC5maXJzdENoaWxkICk7CgogICAgICAgIC8vIENoZWNrIGlmIGEgZGlzY29u
bmVjdGVkIGNoZWNrYm94IHdpbGwgcmV0YWluIGl0cyBjaGVja2VkCiAgICAgICAgLy8gdmFsdWUg
b2YgdHJ1ZSBhZnRlciBhcHBlbmRlZCB0byB0aGUgRE9NIChJRTYvNykKICAgICAgICBzdXBwb3J0
LmFwcGVuZENoZWNrZWQgPSBpbnB1dC5jaGVja2VkOwoKICAgICAgICBzdXBwb3J0LmJveE1vZGVs
ID0gZGl2Lm9mZnNldFdpZHRoID09PSAyOwoKICAgICAgICBpZiAoICJ6b29tIiBpbiBkaXYuc3R5
bGUgKSB7CiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBuYXRpdmVseSBibG9jay1sZXZlbCBl
bGVtZW50cyBhY3QgbGlrZSBpbmxpbmUtYmxvY2sKICAgICAgICAgICAgICAgIC8vIGVsZW1lbnRz
IHdoZW4gc2V0dGluZyB0aGVpciBkaXNwbGF5IHRvICdpbmxpbmUnIGFuZCBnaXZpbmcKICAgICAg
ICAgICAgICAgIC8vIHRoZW0gbGF5b3V0CiAgICAgICAgICAgICAgICAvLyAoSUUgPCA4IGRvZXMg
dGhpcykKICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7CiAgICAg
ICAgICAgICAgICBkaXYuc3R5bGUuem9vbSA9IDE7CiAgICAgICAgICAgICAgICBzdXBwb3J0Lmlu
bGluZUJsb2NrTmVlZHNMYXlvdXQgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0gMiApOwoKICAgICAg
ICAgICAgICAgIC8vIENoZWNrIGlmIGVsZW1lbnRzIHdpdGggbGF5b3V0IHNocmluay13cmFwIHRo
ZWlyIGNoaWxkcmVuCiAgICAgICAgICAgICAgICAvLyAoSUUgNiBkb2VzIHRoaXMpCiAgICAgICAg
ICAgICAgICBkaXYuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgICAgICAgICAgZGl2LmlubmVy
SFRNTCA9ICI8ZGl2IHN0eWxlPSd3aWR0aDo0cHg7Jz48L2Rpdj4iOwogICAgICAgICAgICAgICAg
c3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzID0gKCBkaXYub2Zmc2V0V2lkdGggIT09IDIgKTsKICAg
ICAgICB9CgogICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPHRhYmxlPjx0cj48dGQgc3R5bGU9J3Bh
ZGRpbmc6MDtib3JkZXI6MDtkaXNwbGF5Om5vbmUnPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJs
ZT4iOwogICAgICAgIHRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggInRkIiApOwoKICAg
ICAgICAvLyBDaGVjayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdo
dCB3aGVuIHRoZXkgYXJlIHNldAogICAgICAgIC8vIHRvIGRpc3BsYXk6bm9uZSBhbmQgdGhlcmUg
YXJlIHN0aWxsIG90aGVyIHZpc2libGUgdGFibGUgY2VsbHMgaW4gYQogICAgICAgIC8vIHRhYmxl
IHJvdzsgaWYgc28sIG9mZnNldFdpZHRoL0hlaWdodCBhcmUgbm90IHJlbGlhYmxlIGZvciB1c2Ug
d2hlbgogICAgICAgIC8vIGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVu
IGRpcmVjdGx5IHVzaW5nCiAgICAgICAgLy8gZGlzcGxheTpub25lIChpdCBpcyBzdGlsbCBzYWZl
IHRvIHVzZSBvZmZzZXRzIGlmIGEgcGFyZW50IGVsZW1lbnQgaXMKICAgICAgICAvLyBoaWRkZW47
IGRvbiBzYWZldHkgZ29nZ2xlcyBhbmQgc2VlIGJ1ZyAjNDUxMiBmb3IgbW9yZSBpbmZvcm1hdGlv
bikuCiAgICAgICAgLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRlc3QpCiAgICAgICAgaXNTdXBw
b3J0ZWQgPSAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOwoKICAgICAgICB0ZHNbIDAg
XS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgdGRzWyAxIF0uc3R5bGUuZGlzcGxheSA9ICJu
b25lIjsKCiAgICAgICAgLy8gQ2hlY2sgaWYgZW1wdHkgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBv
ZmZzZXRXaWR0aC9IZWlnaHQKICAgICAgICAvLyAoSUUgPCA4IGZhaWwgdGhpcyB0ZXN0KQogICAg
ICAgIHN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzID0gaXNTdXBwb3J0ZWQgJiYgKCB0ZHNb
IDAgXS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKICAgICAgICBkaXYuaW5uZXJIVE1MID0gIiI7Cgog
ICAgICAgIC8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4t
cmlnaHQgaW5jb3JyZWN0bHkKICAgICAgICAvLyBnZXRzIGNvbXB1dGVkIG1hcmdpbi1yaWdodCBi
YXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuIEZvciBtb3JlCiAgICAgICAgLy8gaW5mbyBzZWUg
YnVnICMzMzMzCiAgICAgICAgLy8gRmFpbHMgaW4gV2ViS2l0IGJlZm9yZSBGZWIgMjAxMSBuaWdo
dGxpZXMKICAgICAgICAvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1
cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKICAgICAgICBpZiAoIGRvY3VtZW50LmRl
ZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUgKSB7CiAg
ICAgICAgICAgICAgICBtYXJnaW5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiAp
OwogICAgICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gIjAiOwogICAgICAgICAg
ICAgICAgbWFyZ2luRGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAiOwogICAgICAgICAgICAgICAg
ZGl2LmFwcGVuZENoaWxkKCBtYXJnaW5EaXYgKTsKICAgICAgICAgICAgICAgIHN1cHBvcnQucmVs
aWFibGVNYXJnaW5SaWdodCA9CiAgICAgICAgICAgICAgICAgICAgICAgICggcGFyc2VJbnQoICgg
ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBudWxsICkg
fHwgeyBtYXJnaW5SaWdodDogMCB9ICkubWFyZ2luUmlnaHQsIDEwICkgfHwgMCApID09PSAwOwog
ICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIHRoZSBib2R5IGVsZW1lbnQgd2UgYWRkZWQKICAg
ICAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB0ZXN0RWxlbWVudFBhcmVu
dC5yZW1vdmVDaGlsZCggdGVzdEVsZW1lbnQgKTsKCiAgICAgICAgLy8gVGVjaG5pcXVlIGZyb20g
SnVyaXkgWmF5dHNldgogICAgICAgIC8vIGh0dHA6Ly90aGlua3dlYjIuY29tL3Byb2plY3RzL3By
b3RvdHlwZS9kZXRlY3RpbmctZXZlbnQtc3VwcG9ydC13aXRob3V0LWJyb3dzZXItc25pZmZpbmcv
CiAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBjYXNlIHdoZXJlIG5vbi1zdGFuZGFy
ZCBldmVudCBzeXN0ZW1zCiAgICAgICAgLy8gYXJlIHVzZWQsIG5hbWVseSBpbiBJRS4gU2hvcnQt
Y2lyY3VpdGluZyBoZXJlIGhlbHBzIHVzIHRvCiAgICAgICAgLy8gYXZvaWQgYW4gZXZhbCBjYWxs
IChpbiBzZXRBdHRyaWJ1dGUpIHdoaWNoIGNhbiBjYXVzZSBDU1AKICAgICAgICAvLyB0byBnbyBo
YXl3aXJlLiBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL1NlY3VyaXR5L0NT
UAogICAgICAgIGlmICggZGl2LmF0dGFjaEV2ZW50ICkgewogICAgICAgICAgICAgICAgZm9yKCBp
IGluIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0OiAxLAogICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2U6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzaW46IDEKICAg
ICAgICAgICAgICAgIH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJv
biIgKyBpOwogICAgICAgICAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggZXZlbnROYW1l
IGluIGRpdiApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc1N1cHBvcnRlZCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCBldmVudE5h
bWUsICJyZXR1cm47IiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VwcG9y
dGVkID0gKCB0eXBlb2YgZGl2WyBldmVudE5hbWUgXSA9PT0gImZ1bmN0aW9uIiApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRbIGkgKyAi
QnViYmxlcyIgXSA9IGlzU3VwcG9ydGVkOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAg
ICAgICAgLy8gTnVsbCBjb25uZWN0ZWQgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUKICAg
ICAgICB0ZXN0RWxlbWVudCA9IGZyYWdtZW50ID0gc2VsZWN0ID0gb3B0ID0gYm9keSA9IG1hcmdp
bkRpdiA9IGRpdiA9IGlucHV0ID0gbnVsbDsKCiAgICAgICAgcmV0dXJuIHN1cHBvcnQ7Cn0pKCk7
CgovLyBLZWVwIHRyYWNrIG9mIGJveE1vZGVsCmpRdWVyeS5ib3hNb2RlbCA9IGpRdWVyeS5zdXBw
b3J0LmJveE1vZGVsOwoKCgoKdmFyIHJicmFjZSA9IC9eKD86XHsuKlx9fFxbLipcXSkkLywKICAg
ICAgICBybXVsdGlEYXNoID0gLyhbQS1aXSkvZzsKCmpRdWVyeS5leHRlbmQoewogICAgICAgIGNh
Y2hlOiB7fSwKCiAgICAgICAgLy8gUGxlYXNlIHVzZSB3aXRoIGNhdXRpb24KICAgICAgICB1dWlk
OiAwLAoKICAgICAgICAvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBh
Z2UKICAgICAgICAvLyBOb24tZGlnaXRzIHJlbW92ZWQgdG8gbWF0Y2ggcmlubGluZWpRdWVyeQog
ICAgICAgIGV4cGFuZG86ICJqUXVlcnkiICsgKCBqUXVlcnkuZm4uanF1ZXJ5ICsgTWF0aC5yYW5k
b20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAoKICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGVs
ZW1lbnRzIHRocm93IHVuY2F0Y2hhYmxlIGV4Y2VwdGlvbnMgaWYgeW91CiAgICAgICAgLy8gYXR0
ZW1wdCB0byBhZGQgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIHRoZW0uCiAgICAgICAgbm9EYXRhOiB7
CiAgICAgICAgICAgICAgICAiZW1iZWQiOiB0cnVlLAogICAgICAgICAgICAgICAgLy8gQmFuIGFs
bCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxhc2ggKHdoaWNoIGhhbmRsZSBleHBhbmRvcykKICAgICAg
ICAgICAgICAgICJvYmplY3QiOiAiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUz
NTQwMDAwIiwKICAgICAgICAgICAgICAgICJhcHBsZXQiOiB0cnVlCiAgICAgICAgfSwKCiAgICAg
ICAgaGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICBlbGVtID0gZWxl
bS5ub2RlVHlwZSA/IGpRdWVyeS5jYWNoZVsgZWxlbVtqUXVlcnkuZXhwYW5kb10gXSA6IGVsZW1b
IGpRdWVyeS5leHBhbmRvIF07CgogICAgICAgICAgICAgICAgcmV0dXJuICEhZWxlbSAmJiAhaXNF
bXB0eURhdGFPYmplY3QoIGVsZW0gKTsKICAgICAgICB9LAoKICAgICAgICBkYXRhOiBmdW5jdGlv
biggZWxlbSwgbmFtZSwgZGF0YSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgewogICAg
ICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHZhciB0aGlzQ2FjaGUsIHJldCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxLZXkg
PSBqUXVlcnkuZXhwYW5kbywKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QnlOYW1lID0gdHlw
ZW9mIG5hbWUgPT09ICJzdHJpbmciLAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSB0byBoYW5kbGUgRE9NIG5vZGVzIGFuZCBKUyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2Ug
SUU2LTcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3QgR0Mgb2JqZWN0IHJlZmVyZW5j
ZXMgcHJvcGVybHkgYWNyb3NzIHRoZSBET00tSlMgYm91bmRhcnkKICAgICAgICAgICAgICAgICAg
ICAgICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE9ubHkgRE9NIG5vZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9iamVjdCBk
YXRhIGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRo
ZSBvYmplY3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2FsbHkKICAgICAgICAgICAgICAgICAg
ICAgICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gT25seSBkZWZpbmluZyBhbiBJRCBmb3IgSlMgb2JqZWN0cyBpZiBpdHMg
Y2FjaGUgYWxyZWFkeSBleGlzdHMgYWxsb3dzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRo
ZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1lIHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5v
IGNhY2hlCiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5
LmV4cGFuZG8gXSA6IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gJiYgalF1ZXJ5LmV4cGFuZG87Cgog
ICAgICAgICAgICAgICAgLy8gQXZvaWQgZG9pbmcgYW55IG1vcmUgd29yayB0aGFuIHdlIG5lZWQg
dG8gd2hlbiB0cnlpbmcgdG8gZ2V0IGRhdGEgb24gYW4KICAgICAgICAgICAgICAgIC8vIG9iamVj
dCB0aGF0IGhhcyBubyBkYXRhIGF0IGFsbAogICAgICAgICAgICAgICAgaWYgKCAoIWlkIHx8IChw
dnQgJiYgaWQgJiYgKGNhY2hlWyBpZCBdICYmICFjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSkp
KSAmJiBnZXRCeU5hbWUgJiYgZGF0YSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAh
aWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgYSBu
ZXcgdW5pcXVlIElEIGZvciBlYWNoIGVsZW1lbnQgc2luY2UgdGhlaXIgZGF0YQogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBlbmRzIHVwIGluIHRoZSBnbG9iYWwgY2FjaGUKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpc05vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSA9IGlkID0gKytqUXVlcnkudXVpZDsKICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZCA9IGpRdWVyeS5leHBhbmRvOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhY2FjaGVbIGlkIF0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlWyBpZCBdID0ge307CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkuIEF2b2lkcyBleHBvc2luZyBqUXVl
cnkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWV0YWRhdGEgb24gcGxhaW4gSlMgb2JqZWN0
cyB3aGVuIHRoZSBvYmplY3QgaXMgc2VyaWFsaXplZCB1c2luZwogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBKU09OLnN0cmluZ2lmeQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc05v
ZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0udG9KU09O
ID0galF1ZXJ5Lm5vb3A7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBBbiBvYmplY3QgY2FuIGJlIHBhc3NlZCB0byBqUXVlcnku
ZGF0YSBpbnN0ZWFkIG9mIGEga2V5L3ZhbHVlIHBhaXI7IHRoaXMgZ2V0cwogICAgICAgICAgICAg
ICAgLy8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQogICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgbmFtZSA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG5hbWUgPT09
ICJmdW5jdGlvbiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHZ0ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdID0g
alF1ZXJ5LmV4dGVuZChjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSwgbmFtZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FjaGVbIGlkIF0gPSBqUXVlcnkuZXh0ZW5kKGNhY2hlWyBpZCBdLCBuYW1lKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXND
YWNoZSA9IGNhY2hlWyBpZCBdOwoKICAgICAgICAgICAgICAgIC8vIEludGVybmFsIGpRdWVyeSBk
YXRhIGlzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVjdCBpbnNpZGUgdGhlIG9iamVjdCdzIGRh
dGEKICAgICAgICAgICAgICAgIC8vIGNhY2hlIGluIG9yZGVyIHRvIGF2b2lkIGtleSBjb2xsaXNp
b25zIGJldHdlZW4gaW50ZXJuYWwgZGF0YSBhbmQgdXNlci1kZWZpbmVkCiAgICAgICAgICAgICAg
ICAvLyBkYXRhCiAgICAgICAgICAgICAgICBpZiAoIHB2dCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXNDYWNoZVsgaW50ZXJuYWxLZXkgXSA9IHt9OwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2FjaGUgPSB0aGlz
Q2FjaGVbIGludGVybmFsS2V5IF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXND
YWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF0gPSBkYXRhOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIGZvciAxLjUgT05MWS4g
SXQgd2lsbCBiZSByZW1vdmVkIGluIDEuNi4gVXNlcnMgc2hvdWxkCiAgICAgICAgICAgICAgICAv
LyBub3QgYXR0ZW1wdCB0byBpbnNwZWN0IHRoZSBpbnRlcm5hbCBldmVudHMgb2JqZWN0IHVzaW5n
IGpRdWVyeS5kYXRhLCBhcyB0aGlzCiAgICAgICAgICAgICAgICAvLyBpbnRlcm5hbCBkYXRhIG9i
amVjdCBpcyB1bmRvY3VtZW50ZWQgYW5kIHN1YmplY3QgdG8gY2hhbmdlLgogICAgICAgICAgICAg
ICAgaWYgKCBuYW1lID09PSAiZXZlbnRzIiAmJiAhdGhpc0NhY2hlW25hbWVdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdICYmIHRoaXND
YWNoZVsgaW50ZXJuYWxLZXkgXS5ldmVudHM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgZm9yIGJvdGggY29udmVydGVkLXRvLWNhbWVsIGFuZCBub24tY29udmVy
dGVkIGRhdGEgcHJvcGVydHkgbmFtZXMKICAgICAgICAgICAgICAgIC8vIElmIGEgZGF0YSBwcm9w
ZXJ0eSB3YXMgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICBpZiAoIGdldEJ5TmFtZSApIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IFRyeSB0byBmaW5kIGFzLWlzIHByb3BlcnR5
IGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhpc0NhY2hlWyBuYW1lIF07Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IGZvciBudWxsfHVuZGVmaW5lZCBwcm9wZXJ0
eSBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09IG51bGwgKSB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBmaW5kIHRoZSBjYW1lbENhc2Vk
IHByb3BlcnR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhpc0NhY2hl
WyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhp
c0NhY2hlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAg
ICAgICAgfSwKCiAgICAgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHB2dCAv
KiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5h
Y2NlcHREYXRhKCBlbGVtICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdGhpc0NhY2hlLAoKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVmZXJlbmNlIHRvIGludGVybmFsIGRhdGEgY2FjaGUga2V5CiAg
ICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCgogICAg
ICAgICAgICAgICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxlbSwK
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZv
cm1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVy
eS5leHBhbmRvIF0gOiBqUXVlcnkuZXhwYW5kbzsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBhbHJlYWR5IG5vIGNhY2hlIGVudHJ5IGZvciB0aGlzIG9iamVjdCwgdGhlcmUgaXMgbm8K
ICAgICAgICAgICAgICAgIC8vIHB1cnBvc2UgaW4gY29udGludWluZwogICAgICAgICAgICAgICAg
aWYgKCAhY2FjaGVbIGlkIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIG5hbWUgKSB7CgogICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzQ2FjaGUgPSBwdnQgPyBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkg
XSA6IGNhY2hlWyBpZCBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzQ2FjaGUg
KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaW50ZXJvcGVy
YWJsZSByZW1vdmFsIG9mIGh5cGhlbmF0ZWQgb3IgY2FtZWxjYXNlZCBrZXlzCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGhpc0NhY2hlWyBuYW1lIF0gKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSgg
bmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNDYWNoZVsgbmFtZSBdOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIGxlZnQgaW4gdGhlIGNh
Y2hlLCB3ZSB3YW50IHRvIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYW5kIGxldCB0aGUgY2FjaGUgb2JqZWN0IGl0c2VsZiBnZXQgZGVzdHJveWVkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNFbXB0eURhdGFPYmplY3QodGhpc0NhY2hl
KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9y
IG1vcmUgaW5mb3JtYXRpb24KICAgICAgICAgICAgICAgIGlmICggcHZ0ICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF07CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBwYXJlbnQgY2FjaGUgdW5sZXNz
IHRoZSBpbnRlcm5hbCBkYXRhIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAvLyBoYWQg
YmVlbiB0aGUgb25seSB0aGluZyBsZWZ0IGluIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWlzRW1wdHlEYXRhT2JqZWN0KGNhY2hlWyBpZCBdKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxDYWNoZSA9IGNhY2hlWyBpZCBd
WyBpbnRlcm5hbEtleSBdOwoKICAgICAgICAgICAgICAgIC8vIEJyb3dzZXJzIHRoYXQgZmFpbCBl
eHBhbmRvIGRlbGV0aW9uIGFsc28gcmVmdXNlIHRvIGRlbGV0ZSBleHBhbmRvcyBvbgogICAgICAg
ICAgICAgICAgLy8gdGhlIHdpbmRvdywgYnV0IGl0IHdpbGwgYWxsb3cgaXQgb24gYWxsIG90aGVy
IEpTIG9iamVjdHM7IG90aGVyIGJyb3dzZXJzCiAgICAgICAgICAgICAgICAvLyBkb24ndCBjYXJl
CiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBgY2FjaGVgIGlzIG5vdCBhIHdpbmRvdyBv
YmplY3QgIzEwMDgwCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4
cGFuZG8gfHwgIWNhY2hlLnNldEludGVydmFsICkgewogICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgY2FjaGVbIGlkIF07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICBjYWNoZVsgaWQgXSA9IG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gV2UgZGVzdHJveWVkIHRoZSBlbnRpcmUgdXNlciBjYWNoZSBhdCBvbmNlIGJl
Y2F1c2UgaXQncyBmYXN0ZXIgdGhhbgogICAgICAgICAgICAgICAgLy8gaXRlcmF0aW5nIHRocm91
Z2ggZWFjaCBrZXksIGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIHBlcnNpc3QgaW50ZXJuYWwK
ICAgICAgICAgICAgICAgIC8vIGRhdGEgaWYgaXQgZXhpc3RlZAogICAgICAgICAgICAgICAgaWYg
KCBpbnRlcm5hbENhY2hlICkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9
IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3Ig
MS41IE9OTFkuIEF2b2lkcyBleHBvc2luZyBqUXVlcnkKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbWV0YWRhdGEgb24gcGxhaW4gSlMgb2JqZWN0cyB3aGVuIHRoZSBvYmplY3QgaXMgc2VyaWFs
aXplZCB1c2luZwogICAgICAgICAgICAgICAgICAgICAgICAvLyBKU09OLnN0cmluZ2lmeQogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFpc05vZGUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FjaGVbIGlkIF0udG9KU09OID0galF1ZXJ5Lm5vb3A7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdWyBpbnRl
cm5hbEtleSBdID0gaW50ZXJuYWxDYWNoZTsKCiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Us
IHdlIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBleHBhbmRvIG9uIHRoZSBub2RlIHRvIGF2b2lkCiAg
ICAgICAgICAgICAgICAvLyBmYWxzZSBsb29rdXBzIGluIHRoZSBjYWNoZSBmb3IgZW50cmllcyB0
aGF0IG5vIGxvbmdlciBleGlzdAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaXNOb2RlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBkb2VzIG5vdCBhbGxvdyB1cyB0byBkZWxl
dGUgZXhwYW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5vciBkb2VzIGl0IGhhdmUgYSByZW1vdmVBdHRyaWJ1dGUgZnVuY3Rpb24gb24gRG9jdW1l
bnQgbm9kZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG11c3QgaGFuZGxlIGFsbCBv
ZiB0aGVzZSBjYXNlcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0
LmRlbGV0ZUV4cGFuZG8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1b
IGpRdWVyeS5leHBhbmRvIF0gPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gRm9yIGludGVybmFsIHVzZSBvbmx5
LgogICAgICAgIF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgdHJ1ZSApOwogICAg
ICAgIH0sCgogICAgICAgIC8vIEEgbWV0aG9kIGZvciBkZXRlcm1pbmluZyBpZiBhIERPTSBub2Rl
IGNhbiBoYW5kbGUgdGhlIGRhdGEgZXhwYW5kbwogICAgICAgIGFjY2VwdERhdGE6IGZ1bmN0aW9u
KCBlbGVtICkgewogICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVOYW1lICkgewogICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBqUXVlcnkubm9EYXRhWyBlbGVtLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2ggKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEobWF0Y2ggPT09IHRydWUg
fHwgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKSAhPT0gbWF0Y2gpOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgfQp9KTsKCmpRdWVyeS5mbi5leHRlbmQoewogICAgICAgIGRhdGE6IGZ1bmN0
aW9uKCBrZXksIHZhbHVlICkgewogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBudWxsOwoKICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIGtleSA9PT0gInVuZGVmaW5lZCIgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdGhpcy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlzWzBdICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdGhpc1swXS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyID0gdGhpc1swXS5hdHRyaWJ1dGVzLCBuYW1l
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBsID0gYXR0ci5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBhdHRyW2ldLm5hbWU7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUuaW5kZXhPZigg
ImRhdGEtIiApID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnN1YnN0cmlu
Zyg1KSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhQXR0ciggdGhpc1swXSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBkYXRhOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBrZXkgPT09ICJv
YmplY3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlz
LCBrZXkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KCIuIik7CiAgICAgICAgICAgICAg
ICBwYXJ0c1sxXSA9IHBhcnRzWzFdID8gIi4iICsgcGFydHNbMV0gOiAiIjsKCiAgICAgICAgICAg
ICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEgPSB0aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIiArIHBhcnRzWzFdICsgIiEiLCBb
cGFydHNbMF1dKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBmZXRjaCBhbnkg
aW50ZXJuYWxseSBzdG9yZWQgZGF0YSBmaXJzdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGRhdGEgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LmRhdGEoIHRoaXNbMF0sIGtleSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhQXR0ciggdGhpc1swXSwga2V5LCBk
YXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZGF0YSggcGFydHNbMF0gKSA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9IGpRdWVyeSggdGhpcyApLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFsgcGFydHNbMF0sIHZhbHVlIF07
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRyaWdnZXJIYW5kbGVyKCAi
c2V0RGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgYXJncyApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlzLCBrZXksIHZhbHVlICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJHRoaXMudHJpZ2dlckhhbmRsZXIoICJjaGFuZ2VEYXRhIiArIHBh
cnRzWzFdICsgIiEiLCBhcmdzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkg
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywga2V5ICk7CiAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICB9Cn0pOwoKZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwg
ZGF0YSApIHsKICAgICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkg
dG8gZmV0Y2ggYW55CiAgICAgICAgLy8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmli
dXRlCiAgICAgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0g
MSApIHsKCiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9ICJkYXRhLSIgKyBrZXkucmVwbGFjZSgg
cm11bHRpRGFzaCwgIi0kMSIgKS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgICAgIGRhdGEg
PSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOwoKICAgICAgICAgICAgICAgIGlmICggdHlwZW9m
IGRhdGEgPT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAidHJ1ZSIgPyB0cnVl
IDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID09PSAiZmFsc2UiID8gZmFs
c2UgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPT09ICJudWxsIiA/IG51
bGwgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFqUXVlcnkuaXNOYU4oIGRhdGEg
KSA/IHBhcnNlRmxvYXQoIGRhdGEgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSApIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyCiAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRhdGEgKTsKCiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZp
bmVkOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGRhdGE7Cn0K
Ci8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIGZvciAxLjUgT05MWSB0byBhbGxvdyBvYmplY3RzIHdp
dGggYSBzaW5nbGUgdG9KU09OCi8vIHByb3BlcnR5IHRvIGJlIGNvbnNpZGVyZWQgZW1wdHkgb2Jq
ZWN0czsgdGhpcyBwcm9wZXJ0eSBhbHdheXMgZXhpc3RzIGluCi8vIG9yZGVyIHRvIG1ha2Ugc3Vy
ZSBKU09OLnN0cmluZ2lmeSBkb2VzIG5vdCBleHBvc2UgaW50ZXJuYWwgbWV0YWRhdGEKZnVuY3Rp
b24gaXNFbXB0eURhdGFPYmplY3QoIG9iaiApIHsKICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBv
YmogKSB7CiAgICAgICAgICAgICAgICBpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fQoKICAgICAgICByZXR1cm4gdHJ1ZTsKfQoKCgoKZnVuY3Rpb24gaGFuZGxlUXVldWVNYXJrRGVm
ZXIoIGVsZW0sIHR5cGUsIHNyYyApIHsKICAgICAgICB2YXIgZGVmZXJEYXRhS2V5ID0gdHlwZSAr
ICJkZWZlciIsCiAgICAgICAgICAgICAgICBxdWV1ZURhdGFLZXkgPSB0eXBlICsgInF1ZXVlIiwK
ICAgICAgICAgICAgICAgIG1hcmtEYXRhS2V5ID0gdHlwZSArICJtYXJrIiwKICAgICAgICAgICAg
ICAgIGRlZmVyID0galF1ZXJ5LmRhdGEoIGVsZW0sIGRlZmVyRGF0YUtleSwgdW5kZWZpbmVkLCB0
cnVlICk7CiAgICAgICAgaWYgKCBkZWZlciAmJgogICAgICAgICAgICAgICAgKCBzcmMgPT09ICJx
dWV1ZSIgfHwgIWpRdWVyeS5kYXRhKCBlbGVtLCBxdWV1ZURhdGFLZXksIHVuZGVmaW5lZCwgdHJ1
ZSApICkgJiYKICAgICAgICAgICAgICAgICggc3JjID09PSAibWFyayIgfHwgIWpRdWVyeS5kYXRh
KCBlbGVtLCBtYXJrRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgKSApIHsKICAgICAgICAgICAg
ICAgIC8vIEdpdmUgcm9vbSBmb3IgaGFyZC1jb2RlZCBjYWxsYmFja3MgdG8gZmlyZSBmaXJzdAog
ICAgICAgICAgICAgICAgLy8gYW5kIGV2ZW50dWFsbHkgbWFyay9xdWV1ZSBzb21ldGhpbmcgZWxz
ZSBvbiB0aGUgZWxlbWVudAogICAgICAgICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5kYXRhKCBlbGVtLCBxdWV1ZURh
dGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIWpRdWVyeS5kYXRhKCBlbGVtLCBtYXJrRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0s
IGRlZmVyRGF0YUtleSwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVyLnJlc29sdmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fSwgMCApOwogICAgICAgIH0KfQoKalF1ZXJ5LmV4dGVuZCh7CgogICAgICAgIF9tYXJrOiBmdW5j
dGlvbiggZWxlbSwgdHlwZSApIHsKICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9ICh0eXBlIHx8ICJmeCIpICsgIm1hcmsiOwogICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSwgKGpRdWVyeS5kYXRhKGVs
ZW0sdHlwZSx1bmRlZmluZWQsdHJ1ZSkgfHwgMCkgKyAxLCB0cnVlICk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfSwKCiAgICAgICAgX3VubWFyazogZnVuY3Rpb24oIGZvcmNlLCBlbGVtLCB0
eXBlICkgewogICAgICAgICAgICAgICAgaWYgKCBmb3JjZSAhPT0gdHJ1ZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZSA9IGVsZW07CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0g
PSBmb3JjZTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2UgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtl
eSA9IHR5cGUgKyAibWFyayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQg
PSBmb3JjZSA/IDAgOiAoIChqUXVlcnkuZGF0YSggZWxlbSwga2V5LCB1bmRlZmluZWQsIHRydWUp
IHx8IDEgKSAtIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3VudCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggZWxlbSwga2V5LCBjb3Vu
dCwgdHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBrZXksIHRydWUgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVRdWV1ZU1hcmtEZWZlciggZWxl
bSwgdHlwZSwgIm1hcmsiICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9LAoKICAgICAgICBxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRh
dGEgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUgPSAodHlwZSB8fCAiZngiKSArICJxdWV1ZSI7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBxID0galF1ZXJ5LmRhdGEoIGVsZW0sIHR5cGUsIHVuZGVmaW5lZCwgdHJ1ZSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0
IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFxIHx8
IGpRdWVyeS5pc0FycmF5KGRhdGEpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcSA9IGpRdWVyeS5kYXRhKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRh
dGEpLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEucHVzaCggZGF0YSApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcSB8fCBbXTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9LAoKICAgICAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKICAg
ICAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CgogICAgICAgICAgICAgICAgdmFyIHF1
ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksCiAgICAgICAgICAgICAgICAgICAgICAg
IGZuID0gcXVldWUuc2hpZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXI7CgogICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3Zl
IHRoZSBwcm9ncmVzcyBzZW50aW5lbAogICAgICAgICAgICAgICAgaWYgKCBmbiA9PT0gImlucHJv
Z3Jlc3MiICkgewogICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBmbiApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZngg
cXVldWUgZnJvbSBiZWluZwogICAgICAgICAgICAgICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5
IGRlcXVldWVkCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS51bnNoaWZ0KCJpbnByb2dyZXNz
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZu
LmNhbGwoZWxlbSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmRlcXVldWUoZWxlbSwgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIXF1ZXVlLmxlbmd0aCApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIHR5cGUgKyAi
cXVldWUiLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVF1ZXVlTWFya0Rl
ZmVyKCBlbGVtLCB0eXBlLCAicXVldWUiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9
KTsKCmpRdWVyeS5mbi5leHRlbmQoewogICAgICAgIHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0
YSApIHsKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9ICJmeCI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBk
YXRhID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkucXVldWUoIHRoaXNbMF0sIHR5cGUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWzBdICE9PSAiaW5wcm9n
cmVzcyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUo
IHRoaXMsIHR5cGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgfSwKICAgICAgICBkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CiAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICB9LAogICAgICAgIC8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhl
bGZlcnMsIHdpdGggcGVybWlzc2lvbi4KICAgICAgICAvLyBodHRwOi8vYmxpbmRzaWduYWxzLmNv
bS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvCiAgICAgICAgZGVsYXk6IGZ1bmN0aW9u
KCB0aW1lLCB0eXBlICkgewogICAgICAgICAgICAgICAgdGltZSA9IGpRdWVyeS5meCA/IGpRdWVy
eS5meC5zcGVlZHNbdGltZV0gfHwgdGltZSA6IHRpbWU7CiAgICAgICAgICAgICAgICB0eXBlID0g
dHlwZSB8fCAiZngiOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzOwogICAg
ICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0sIHRpbWUgKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0s
CiAgICAgICAgY2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOwogICAgICAgIH0sCiAgICAgICAg
Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQog
ICAgICAgIC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KQogICAgICAg
IHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmplY3QgKSB7CiAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0ID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CiAgICAg
ICAgICAgICAgICB2YXIgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudHMgPSB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICBpID0gZWxl
bWVudHMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmVyRGF0YUtleSA9IHR5cGUgKyAiZGVmZXIiLAogICAgICAgICAg
ICAgICAgICAgICAgICBxdWV1ZURhdGFLZXkgPSB0eXBlICsgInF1ZXVlIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgbWFya0RhdGFLZXkgPSB0eXBlICsgIm1hcmsiLAogICAgICAgICAgICAgICAg
ICAgICAgICB0bXA7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSAp
OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB3aGlsZSggaS0tICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCB0bXAgPSBq
UXVlcnkuZGF0YSggZWxlbWVudHNbIGkgXSwgZGVmZXJEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUg
KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuZGF0
YSggZWxlbWVudHNbIGkgXSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSB8fAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSgg
ZWxlbWVudHNbIGkgXSwgbWFya0RhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApICkgJiYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtZW50c1sg
aSBdLCBkZWZlckRhdGFLZXksIGpRdWVyeS5fRGVmZXJyZWQoKSwgdHJ1ZSApICkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRtcC5kb25lKCByZXNvbHZlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAg
ICAgIHJldHVybiBkZWZlci5wcm9taXNlKCk7CiAgICAgICAgfQp9KTsKCgoKCnZhciByY2xhc3Mg
PSAvW1xuXHRccl0vZywKICAgICAgICByc3BhY2UgPSAvXHMrLywKICAgICAgICBycmV0dXJuID0g
L1xyL2csCiAgICAgICAgcnR5cGUgPSAvXig/OmJ1dHRvbnxpbnB1dCkkL2ksCiAgICAgICAgcmZv
Y3VzYWJsZSA9IC9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLAog
ICAgICAgIHJjbGlja2FibGUgPSAvXmEoPzpyZWEpPyQvaSwKICAgICAgICByYm9vbGVhbiA9IC9e
KD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJs
ZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2Vs
ZWN0ZWQpJC9pLAogICAgICAgIG5vZGVIb29rLCBib29sSG9vazsKCmpRdWVyeS5mbi5leHRlbmQo
ewogICAgICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBuYW1lLCB2YWx1ZSwgdHJ1ZSwgalF1ZXJ5LmF0
dHIgKTsKICAgICAgICB9LAoKICAgICAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7CiAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIHByb3A6IGZ1bmN0aW9uKCBuYW1l
LCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBu
YW1lLCB2YWx1ZSwgdHJ1ZSwgalF1ZXJ5LnByb3AgKTsKICAgICAgICB9LAogICAgICAgIAogICAg
ICAgIHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgewogICAgICAgICAgICAgICAgbmFtZSA9
IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeS9jYXRj
aCBoYW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92aW5nIGEgcHJvcGVy
dHkgb24gd2luZG93KQogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXNbIG5hbWUgXSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1sgbmFtZSBdOwogICAgICAgICAgICAgICAg
ICAgICAgICB9IGNhdGNoKCBlICkge30KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgog
ICAgICAgIGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICB2YXIg
Y2xhc3NOYW1lcywgaSwgbCwgZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3Ms
IGMsIGNsOwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGog
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuYWRkQ2xh
c3MoIHZhbHVlLmNhbGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggdmFs
dWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KCByc3BhY2UgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbIGkgXTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxlbS5jbGFzc05hbWUgJiYg
Y2xhc3NOYW1lcy5sZW5ndGggPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWU7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgPSAiICIgKyBlbGVtLmNsYXNzTmFt
ZSArICIgIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICF+c2V0Q2xhc3MuaW5kZXhPZiggIiAiICsgY2xhc3NOYW1lc1sgYyBdICsgIiAiICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRDbGFzcyArPSBjbGFzc05hbWVzWyBjIF0gKyAiICI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNl
dENsYXNzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwK
CiAgICAgICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAg
IHZhciBjbGFzc05hbWVzLCBpLCBsLCBlbGVtLCBjbGFzc05hbWUsIGMsIGNsOwoKICAgICAgICAg
ICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwo
dGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggKHZhbHVlICYmIHR5cGVvZiB2
YWx1ZSA9PT0gInN0cmluZyIpIHx8IHZhbHVlID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSAodmFsdWUgfHwgIiIpLnNwbGl0KCByc3BhY2UgKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkg
PCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNb
IGkgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSAxICYmIGVsZW0uY2xhc3NOYW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gKCIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAi
KS5yZXBsYWNlKCByY2xhc3MsICIgIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBjbGFzc05hbWVzLmxlbmd0aDsgYyA8
IGNsOyBjKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoIiAiICsgY2xhc3NOYW1l
c1sgYyBdICsgIiAiLCAiICIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gIiI7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgdG9nZ2xl
Q2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7CiAgICAgICAgICAgICAgICB2YXIg
dHlwZSA9IHR5cGVvZiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgaXNCb29sID0gdHlw
ZW9mIHN0YXRlVmFsID09PSAiYm9vbGVhbiI7CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbiggaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBpLCB0aGlzLmNsYXNz
TmFtZSwgc3RhdGVWYWwpLCBzdGF0ZVZhbCApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNs
YXNzIG5hbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiA9IGpRdWVyeSggdGhpcyApLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVZhbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5z
cGxpdCggcnNwYWNlICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgg
KGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBz
ZXBlcmF0ZWQgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbIHN0YXRlID8gImFkZENsYXNz
IiA6ICJyZW1vdmVDbGFzcyIgXSggY2xhc3NOYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0g
InVuZGVmaW5lZCIgfHwgdHlwZSA9PT0gImJvb2xlYW4iICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdGhpcy5jbGFzc05hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNz
TmFtZV9fIiwgdGhpcy5jbGFzc05hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvZ2dsZSB3aG9sZSBjbGFz
c05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRo
aXMuY2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/ICIiIDogalF1ZXJ5Ll9kYXRhKCB0aGlz
LCAiX19jbGFzc05hbWVfXyIgKSB8fCAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgaGFzQ2xhc3M6IGZ1bmN0aW9uKCBz
ZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSAiICIgKyBzZWxlY3Rv
ciArICIgIjsKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3Ro
OyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbaV0ubm9k
ZVR5cGUgPT09IDEgJiYgKCIgIiArIHRoaXNbaV0uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKHJj
bGFzcywgIiAiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0s
CgogICAgICAgIHZhbDogZnVuY3Rpb24oIHZhbHVlICkgewogICAgICAgICAgICAgICAgdmFyIGhv
b2tzLCByZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWzBdOwogICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNh
c2UoKSBdIHx8IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF07CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhv
b2tzLmdldCggZWxlbSwgInZhbHVlIiApKSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVs
ZW0udmFsdWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Yg
cmV0ID09PSAic3RyaW5nIiA/IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlcwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0LnJlcGxhY2UocnJldHVybiwgIiIpIDogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgY2FzZXMgd2hlcmUgdmFs
dWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9PSBudWxsID8gIiIgOiByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlv
biggdmFsdWUgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwgdmFs
OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Z1bmN0aW9uICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIHNl
bGYudmFsKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgIiI7
IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2
YWwgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAiIjsK
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJl
ciIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9ICIiOwogICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1hcCh2YWwsIGZ1bmN0
aW9uICggdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKyAiIjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF07CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3Jt
YWwgc2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJzZXQi
IGluIGhvb2tzKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgInZhbHVlIiApID09PSB1bmRlZmlu
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQp9
KTsKCmpRdWVyeS5leHRlbmQoewogICAgICAgIHZhbEhvb2tzOiB7CiAgICAgICAgICAgICAgICBv
cHRpb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzLnZhbHVlIGlzIHVu
ZGVmaW5lZCBpbiBCbGFja2JlcnJ5IDQuNyBidXQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB1c2VzIC52YWx1ZS4gU2VlICM2OTMyCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbCA9IGVsZW0uYXR0cmlidXRlcy52YWx1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIXZhbCB8fCB2YWwuc3BlY2lmaWVkID8gZWxlbS52YWx1ZSA6
IGVsZW0udGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwK
ICAgICAgICAgICAgICAgIHNlbGVjdDogewogICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZWxlbS5z
ZWxlY3RlZEluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25z
ID0gZWxlbS5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b25lID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSI7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vdGhpbmcgd2FzIHNlbGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBpbmRleCA8IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhl
IHNlbGVjdGVkIG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IG9uZSA/IGluZGV4IDogMCwgbWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5s
ZW5ndGg7IGkgPCBtYXg7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBvcHRpb24gPSBvcHRpb25zWyBpIF07CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJs
ZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvcHRpb24uc2VsZWN0ZWQgJiYgKGpRdWVyeS5zdXBwb3J0Lm9wdERp
c2FibGVkID8gIW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoImRpc2FibGVk
IikgPT09IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAhalF1ZXJ5Lm5v
ZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiApKSApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgc3BlY2lmaWMg
dmFsdWUgZm9yIHRoZSBvcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBh
cnJheSBmb3Igb25lIHNlbGVjdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVz
aCggdmFsdWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZpeGVzIEJ1ZyAjMjU1MSAtLSBzZWxlY3QudmFsKCkgYnJva2VuIGluIElFIGFm
dGVyIGZvcm0ucmVzZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25l
ICYmICF2YWx1ZXMubGVuZ3RoICYmIG9wdGlvbnMubGVuZ3RoICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggb3B0aW9uc1sgaW5kZXggXSAp
LnZhbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKICAgICAgICAgICAgICAgICAgICAgICAg
fSwKCiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBqUXVlcnkubWFr
ZUFycmF5KCB2YWx1ZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnko
ZWxlbSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBqUXVlcnkuaW5BcnJheSggalF1
ZXJ5KHRoaXMpLnZhbCgpLCB2YWx1ZXMgKSA+PSAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF2YWx1ZXMu
bGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5z
ZWxlY3RlZEluZGV4ID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBhdHRyRm46
IHsKICAgICAgICAgICAgICAgIHZhbDogdHJ1ZSwKICAgICAgICAgICAgICAgIGNzczogdHJ1ZSwK
ICAgICAgICAgICAgICAgIGh0bWw6IHRydWUsCiAgICAgICAgICAgICAgICB0ZXh0OiB0cnVlLAog
ICAgICAgICAgICAgICAgZGF0YTogdHJ1ZSwKICAgICAgICAgICAgICAgIHdpZHRoOiB0cnVlLAog
ICAgICAgICAgICAgICAgaGVpZ2h0OiB0cnVlLAogICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVl
CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBhdHRyRml4OiB7CiAgICAgICAgICAgICAgICAv
LyBBbHdheXMgbm9ybWFsaXplIHRvIGVuc3VyZSBob29rIHVzYWdlCiAgICAgICAgICAgICAgICB0
YWJpbmRleDogInRhYkluZGV4IgogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgYXR0cjogZnVu
Y3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBwYXNzICkgewogICAgICAgICAgICAgICAgdmFyIG5U
eXBlID0gZWxlbS5ub2RlVHlwZTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8g
ZG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBu
b2RlcwogICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9
PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVu
ZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIHBhc3MgJiYg
bmFtZSBpbiBqUXVlcnkuYXR0ckZuICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5KCBlbGVtIClbIG5hbWUgXSggdmFsdWUgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1
cHBvcnRlZAogICAgICAgICAgICAgICAgaWYgKCAhKCJnZXRBdHRyaWJ1dGUiIGluIGVsZW0pICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUs
IHZhbHVlICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHJldCwgaG9v
a3MsCiAgICAgICAgICAgICAgICAgICAgICAgIG5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVl
cnkuaXNYTUxEb2MoIGVsZW0gKTsKCiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIG5h
bWUgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICBpZiAoIG5vdHhtbCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5hdHRyRml4WyBuYW1lIF0gfHwgbmFtZTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaG9va3MgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVXNlIGJvb2xIb29rIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJib29sZWFuLnRlc3QoIG5hbWUgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzID0gYm9vbEhvb2s7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBub2RlSG9vayBpZiBhdmFp
bGFibGUoIElFNi83ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBub2RlSG9vayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhv
b2tzID0gbm9kZUhvb2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg
KCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2
YWx1ZSA9PT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
cmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB1bmRlZmluZWQ7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBo
b29rcyAmJiAic2V0IiBpbiBob29rcyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLnNldCggZWxl
bSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0OwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwg
IiIgKyB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIG5vdHhtbCAmJiAocmV0ID0gaG9va3MuZ2V0KCBl
bGVtLCBuYW1lICkpICE9PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmV0OwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBy
ZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1
bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAg
ICAgcmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CiAgICAgICAgICAgICAgICB2
YXIgcHJvcE5hbWU7CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuYXR0ckZpeFsgbmFtZSBdIHx8
IG5hbWU7CgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ciggZWxlbSwgbmFtZSwg
IiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUg
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5
IHRvIGZhbHNlIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgJiYgKHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhb
IG5hbWUgXSB8fCBuYW1lKSBpbiBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGF0dHJIb29rczogewogICAgICAg
ICAgICAgICAgdHlwZTogewogICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4n
dCBhbGxvdyB0aGUgdHlwZSBwcm9wZXJ0eSB0byBiZSBjaGFuZ2VkIChzaW5jZSBpdCBjYXVzZXMg
cHJvYmxlbXMgaW4gSUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBydHlw
ZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5wYXJlbnROb2RlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAidHlwZSBwcm9wZXJ0
eSBjYW4ndCBiZSBjaGFuZ2VkIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoICFqUXVlcnkuc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSAicmFkaW8i
ICYmIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAiaW5wdXQiKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIHR5cGUgb24gYSByYWRpbyBidXR0
b24gYWZ0ZXIgdGhlIHZhbHVlIHJlc2V0cyB0aGUgdmFsdWUgaW4gSUU2LTkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHZhbHVlIHRvIGl0J3MgZGVmYXVs
dCBpbiBjYXNlIHR5cGUgaXMgc2V0IGFmdGVyIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciBlbGVtZW50IGNyZWF0aW9uCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gZWxlbS52YWx1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCAi
dHlwZSIsIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHZhbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS52YWx1ZSA9IHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHZhbHVl
IHByb3BlcnR5IGZvciBiYWNrIGNvbXBhdAogICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBub2Rl
SG9vayBmb3IgYnV0dG9uIGVsZW1lbnRzIGluIElFNi83ICgjMTk1NCkKICAgICAgICAgICAgICAg
IHZhbHVlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5h
bWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlSG9vayAmJiBq
UXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUhvb2suZ2V0KCBlbGVtLCBuYW1lICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBuYW1lIGluIGVsZW0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS52YWx1ZSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAg
ICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxl
bSwgImJ1dHRvbiIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERv
ZXMgbm90IHJldHVybiBzbyB0aGF0IHNldEF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBwcm9wRml4
OiB7CiAgICAgICAgICAgICAgICB0YWJpbmRleDogInRhYkluZGV4IiwKICAgICAgICAgICAgICAg
IHJlYWRvbmx5OiAicmVhZE9ubHkiLAogICAgICAgICAgICAgICAgImZvciI6ICJodG1sRm9yIiwK
ICAgICAgICAgICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUiLAogICAgICAgICAgICAgICAgbWF4
bGVuZ3RoOiAibWF4TGVuZ3RoIiwKICAgICAgICAgICAgICAgIGNlbGxzcGFjaW5nOiAiY2VsbFNw
YWNpbmciLAogICAgICAgICAgICAgICAgY2VsbHBhZGRpbmc6ICJjZWxsUGFkZGluZyIsCiAgICAg
ICAgICAgICAgICByb3dzcGFuOiAicm93U3BhbiIsCiAgICAgICAgICAgICAgICBjb2xzcGFuOiAi
Y29sU3BhbiIsCiAgICAgICAgICAgICAgICB1c2VtYXA6ICJ1c2VNYXAiLAogICAgICAgICAgICAg
ICAgZnJhbWVib3JkZXI6ICJmcmFtZUJvcmRlciIsCiAgICAgICAgICAgICAgICBjb250ZW50ZWRp
dGFibGU6ICJjb250ZW50RWRpdGFibGUiCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBwcm9w
OiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICB2YXIgblR5
cGUgPSBlbGVtLm5vZGVUeXBlOwoKICAgICAgICAgICAgICAgIC8vIGRvbid0IGdldC9zZXQgcHJv
cGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKICAgICAgICAgICAg
ICAgIGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09
IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHJldCwgaG9va3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgIG5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0g
KTsKCiAgICAgICAgICAgICAgICBpZiAoIG5vdHhtbCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rcwogICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwogICAgICAgICAgICAgICAgICAg
ICAgICBob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tz
LnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwoKICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGVsZW1bIG5h
bWUgXSA9IHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4g
aG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwoKICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbVsgbmFtZSBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBwcm9wSG9va3M6IHsKICAgICAgICAgICAgICAg
IHRhYkluZGV4OiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vz
bid0IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBl
eHBsaWNpdGx5IHNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9m
bHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92
aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInRh
YmluZGV4Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1
dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkID8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KCBhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCApIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJmb2N1c2FibGUudGVzdCgg
ZWxlbS5ub2RlTmFtZSApIHx8IHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVs
ZW0uaHJlZiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRl
ZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg
ICB9Cn0pOwoKLy8gQWRkIHRoZSB0YWJpbmRleCBwcm9wSG9vayB0byBhdHRySG9va3MgZm9yIGJh
Y2stY29tcGF0CmpRdWVyeS5hdHRySG9va3MudGFiSW5kZXggPSBqUXVlcnkucHJvcEhvb2tzLnRh
YkluZGV4OwoKLy8gSG9vayBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCmJvb2xIb29rID0gewogICAg
ICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CiAgICAgICAgICAgICAgICAvLyBBbGln
biBib29sZWFuIGF0dHJpYnV0ZXMgd2l0aCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMKICAgICAg
ICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBhdHRyaWJ1dGUgcHJlc2VuY2Ugd2hlcmUgc29tZSBi
b29sZWFucyBhcmUgbm90IHN1cHBvcnRlZAogICAgICAgICAgICAgICAgdmFyIGF0dHJOb2RlOwog
ICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lICkgPT09IHRydWUg
fHwgKCBhdHRyTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgYXR0ck5v
ZGUubm9kZVZhbHVlICE9PSBmYWxzZSA/CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUudG9M
b3dlckNhc2UoKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKICAgICAgICB9
LAogICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewogICAgICAgICAg
ICAgICAgdmFyIHByb3BOYW1lOwogICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2Ug
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMg
d2hlbiBzZXQgdG8gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0
dHIoIGVsZW0sIG5hbWUgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHZhbHVlIGlzIHRydWUgc2luY2Ugd2Uga25vdyBhdCB0aGlzIHBvaW50IGl0
J3MgdHlwZSBib29sZWFuIGFuZCBub3QgZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUgc2FtZSBuYW1lIGFuZCBzZXQgdGhlIERPTSBw
cm9wZXJ0eQogICAgICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4
WyBuYW1lIF0gfHwgbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwcm9wTmFtZSBp
biBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgc2V0IHRo
ZSBJREwgc3BlY2lmaWNhbGx5IGlmIGl0IGFscmVhZHkgZXhpc3RzIG9uIHRoZSBlbGVtZW50CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0
QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIHJldHVybiBuYW1lOwogICAgICAgIH0KfTsKCi8vIElFNi83IGRvIG5v
dCBzdXBwb3J0IGdldHRpbmcvc2V0dGluZyBzb21lIGF0dHJpYnV0ZXMgd2l0aCBnZXQvc2V0QXR0
cmlidXRlCmlmICggIWpRdWVyeS5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSApIHsKICAgICAgICAK
ICAgICAgICAvLyBVc2UgdGhpcyBmb3IgYW55IGF0dHJpYnV0ZSBpbiBJRTYvNwogICAgICAgIC8v
IFRoaXMgZml4ZXMgYWxtb3N0IGV2ZXJ5IElFNi83IGlzc3VlCiAgICAgICAgbm9kZUhvb2sgPSBq
UXVlcnkudmFsSG9va3MuYnV0dG9uID0gewogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigg
ZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB1bmRlZmluZWQgaWYgbm9kZVZhbHVlIGlzIGVt
cHR5IHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ICYmIHJldC5ub2Rl
VmFsdWUgIT09ICIiID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQubm9kZVZh
bHVlIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CiAgICAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5h
bWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZXhpc3Rpbmcgb3IgY3Jl
YXRlIGEgbmV3IGF0dHJpYnV0ZSBub2RlCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQg
PSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhcmV0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGRvY3Vt
ZW50LmNyZWF0ZUF0dHJpYnV0ZSggbmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uc2V0QXR0cmlidXRlTm9kZSggcmV0ICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXQubm9kZVZhbHVlID0gdmFsdWUg
KyAiIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLy8gU2V0IHdpZHRo
IGFuZCBoZWlnaHQgdG8gYXV0byBpbnN0ZWFkIG9mIDAgb24gZW1wdHkgc3RyaW5nKCBCdWcgIzgx
NTAgKQogICAgICAgIC8vIFRoaXMgaXMgZm9yIHJlbW92YWxzCiAgICAgICAgalF1ZXJ5LmVhY2go
WyAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKICAgICAgICAgICAg
ICAgIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRy
SG9va3NbIG5hbWUgXSwgewogICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVl
ID09PSAiIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0u
c2V0QXR0cmlidXRlKCBuYW1lLCAiYXV0byIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAg
IH0pOwp9CgoKLy8gU29tZSBhdHRyaWJ1dGVzIHJlcXVpcmUgYSBzcGVjaWFsIGNhbGwgb24gSUUK
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7CiAgICAgICAgalF1ZXJ5LmVh
Y2goWyAiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFt
ZSApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSA9IGpRdWVyeS5l
eHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSwgewogICAgICAgICAgICAgICAgICAgICAg
ICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgMiApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwp9
CgppZiAoICFqUXVlcnkuc3VwcG9ydC5zdHlsZSApIHsKICAgICAgICBqUXVlcnkuYXR0ckhvb2tz
LnN0eWxlID0gewogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBlbXB0
eSBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRvIGxvd2VyY2Fz
ZSBzaW5jZSBJRSB1cHBlcmNhc2VzIGNzcyBwcm9wZXJ0eSBuYW1lcwogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCkgfHwgdW5kZWZp
bmVkOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVs
ZW0sIHZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGVsZW0uc3R5bGUu
Y3NzVGV4dCA9ICIiICsgdmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cn0KCi8v
IFNhZmFyaSBtaXMtcmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBhbiBv
cHRpb24KLy8gQWNjZXNzaW5nIHRoZSBwYXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZp
eGVzIGl0CmlmICggIWpRdWVyeS5zdXBwb3J0Lm9wdFNlbGVjdGVkICkgewogICAgICAgIGpRdWVy
eS5wcm9wSG9va3Muc2VsZWN0ZWQgPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkucHJvcEhvb2tzLnNl
bGVjdGVkLCB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50LnNlbGVjdGVkSW5kZXg7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGl0IGFsc28gd29ya3Mgd2l0aCBvcHRncm91cHMsIHNlZSAj
NTcwMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50LnBhcmVudE5v
ZGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQucGFy
ZW50Tm9kZS5zZWxlY3RlZEluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9KTsKfQoKLy8gUmFkaW9zIGFuZCBjaGVj
a2JveGVzIGdldHRlci9zZXR0ZXIKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tPbiApIHsKICAg
ICAgICBqUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgaW4gV2Via2l0ICIiIGlzIHJldHVybmVk
IGluc3RlYWQgb2YgIm9uIiBpZiBhIHZhbHVlIGlzbid0IHNwZWNpZmllZAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgidmFsdWUiKSA9PT0g
bnVsbCA/ICJvbiIgOiBlbGVtLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9OwogICAgICAgIH0pOwp9CmpRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNr
Ym94IiBdLCBmdW5jdGlvbigpIHsKICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpR
dWVyeS5leHRlbmQoIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLCB7CiAgICAgICAgICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoZWxlbSku
dmFsKCksIHZhbHVlICkgPj0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9KTsKfSk7CgoKCgp2YXIgcm5hbWVzcGFjZXMgPSAvXC4oLiopJC8s
CiAgICAgICAgcmZvcm1FbGVtcyA9IC9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSwKICAg
ICAgICBycGVyaW9kID0gL1wuL2csCiAgICAgICAgcnNwYWNlcyA9IC8gL2csCiAgICAgICAgcmVz
Y2FwZSA9IC9bXlx3XHMufGBdL2csCiAgICAgICAgZmNsZWFudXAgPSBmdW5jdGlvbiggbm0gKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gbm0ucmVwbGFjZShyZXNjYXBlLCAiXFwkJiIpOwogICAg
ICAgIH07CgovKgogKiBBIG51bWJlciBvZiBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgZm9yIG1hbmFn
aW5nIGV2ZW50cy4KICogTWFueSBvZiB0aGUgaWRlYXMgYmVoaW5kIHRoaXMgY29kZSBvcmlnaW5h
dGVkIGZyb20KICogRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5LgogKi8KalF1ZXJ5LmV2
ZW50ID0gewoKICAgICAgICAvLyBCaW5kIGFuIGV2ZW50IHRvIGFuIGVsZW1lbnQKICAgICAgICAv
LyBPcmlnaW5hbCBieSBEZWFuIEVkd2FyZHMKICAgICAgICBhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0
eXBlcywgaGFuZGxlciwgZGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlw
ZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVy
ID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IHJldHVybkZh
bHNlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIWhhbmRsZXIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAjNzIyOS4gRml4IHJlY29tbWVuZGVkIGJ5IGpkYWx0
b24KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHZhciBoYW5kbGVPYmpJbiwgaGFuZGxlT2JqOwoKICAgICAgICAgICAgICAg
IGlmICggaGFuZGxlci5oYW5kbGVyICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVP
YmpJbiA9IGhhbmRsZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVP
YmpJbi5oYW5kbGVyOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBiZWluZyBleGVjdXRlZCBoYXMgYSB1bmlxdWUgSUQKICAg
ICAgICAgICAgICAgIGlmICggIWhhbmRsZXIuZ3VpZCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKzsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlCiAgICAgICAg
ICAgICAgICB2YXIgZWxlbURhdGEgPSBqUXVlcnkuX2RhdGEoIGVsZW0gKTsKCiAgICAgICAgICAg
ICAgICAvLyBJZiBubyBlbGVtRGF0YSBpcyBmb3VuZCB0aGVuIHdlIG11c3QgYmUgdHJ5aW5nIHRv
IGJpbmQgdG8gb25lIG9mIHRoZQogICAgICAgICAgICAgICAgLy8gYmFubmVkIG5vRGF0YSBlbGVt
ZW50cwogICAgICAgICAgICAgICAgaWYgKCAhZWxlbURhdGEgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZXZl
bnRzID0gZWxlbURhdGEuZXZlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRs
ZSA9IGVsZW1EYXRhLmhhbmRsZTsKCiAgICAgICAgICAgICAgICBpZiAoICFldmVudHMgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW1EYXRhLmV2ZW50cyA9IGV2ZW50cyA9IHt9OwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIWV2ZW50SGFuZGxlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtRGF0YS5oYW5kbGUgPSBldmVudEhhbmRsZSA9IGZ1bmN0
aW9uKCBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdGhl
IHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBw
YWdlIGhhcyB1bmxvYWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAoIWUgfHwgalF1ZXJ5LmV2ZW50LnRyaWdn
ZXJlZCAhPT0gZS50eXBlKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KCBldmVudEhhbmRsZS5lbGVtLCBhcmd1bWVudHMg
KSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBvZiB0aGUgaGFuZGxlIGZ1bmN0aW9uCiAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHRvIHByZXZlbnQgYSBtZW1vcnkgbGVhayB3aXRoIG5vbi1u
YXRpdmUgZXZlbnRzIGluIElFLgogICAgICAgICAgICAgICAgZXZlbnRIYW5kbGUuZWxlbSA9IGVs
ZW07CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQg
YnkgYSBzcGFjZQogICAgICAgICAgICAgICAgLy8galF1ZXJ5KC4uLikuYmluZCgibW91c2VvdmVy
IG1vdXNlb3V0IiwgZm4pOwogICAgICAgICAgICAgICAgdHlwZXMgPSB0eXBlcy5zcGxpdCgiICIp
OwoKICAgICAgICAgICAgICAgIHZhciB0eXBlLCBpID0gMCwgbmFtZXNwYWNlczsKCiAgICAgICAg
ICAgICAgICB3aGlsZSAoICh0eXBlID0gdHlwZXNbIGkrKyBdKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlT2JqSW4gPwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5leHRlbmQoe30sIGhhbmRsZU9iakluKSA6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyBoYW5kbGVyOiBoYW5kbGVyLCBkYXRhOiBkYXRhIH07CgogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJzCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdHlwZS5pbmRleE9mKCIuIikgPiAtMSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLm5hbWVzcGFjZSA9IG5hbWVz
cGFjZXMuc2xpY2UoMCkuc29ydCgpLmpvaW4oIi4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IFtd
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPSAi
IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlT2JqLnR5cGUgPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVP
YmouZ3VpZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmouZ3Vp
ZCA9IGhhbmRsZXIuZ3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IGxpc3Qgb2YgZnVuY3Rpb25zIGJvdW5kIHRv
IHRoaXMgZXZlbnQKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gZXZlbnRz
WyB0eXBlIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVy
eS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlCiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWhhbmRsZXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJz
ID0gZXZlbnRzWyB0eXBlIF0gPSBbXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgZm9yIGEgc3BlY2lhbCBldmVudCBoYW5kbGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0
aGUgc3BlY2lhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50cyBoYW5k
bGVyIHJldHVybnMgZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFz
cGVjaWFsLnNldHVwIHx8IHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNl
cywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBCaW5kIHRoZSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxl
bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLmFk
ZEV2ZW50TGlzdGVuZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNl
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
ZWxlbS5hdHRhY2hFdmVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5hdHRhY2hFdmVudCggIm9uIiArIHR5cGUsIGV2ZW50SGFuZGxlICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwuYWRkICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmhhbmRsZXIu
Z3VpZCA9IGhhbmRsZXIuZ3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0
aGUgZnVuY3Rpb24gdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QKICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGJlZW4gdXNlZCwgZm9yIGV2
ZW50IG9wdGltaXphdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZ2xv
YmFsWyB0eXBlIF0gPSB0cnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8v
IE51bGxpZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQogICAgICAgICAgICAg
ICAgZWxlbSA9IG51bGw7CiAgICAgICAgfSwKCiAgICAgICAgZ2xvYmFsOiB7fSwKCiAgICAgICAg
Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50CiAgICAg
ICAgcmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHBvcyApIHsKICAgICAg
ICAgICAgICAgIC8vIGRvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCiAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9
PT0gOCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmICggaGFuZGxlciA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIgPSByZXR1cm5GYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICB2YXIgcmV0LCB0eXBlLCBmbiwgaiwgaSA9IDAsIGFsbCwgbmFtZXNwYWNl
cywgbmFtZXNwYWNlLCBzcGVjaWFsLCBldmVudFR5cGUsIGhhbmRsZU9iaiwgb3JpZ1R5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW1EYXRhID0galF1ZXJ5Lmhhc0RhdGEoIGVsZW0gKSAm
JiBqUXVlcnkuX2RhdGEoIGVsZW0gKSwKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzID0g
ZWxlbURhdGEgJiYgZWxlbURhdGEuZXZlbnRzOwoKICAgICAgICAgICAgICAgIGlmICggIWVsZW1E
YXRhIHx8ICFldmVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyB0eXBlcyBpcyBhY3R1YWxseSBhbiBldmVu
dCBvYmplY3QgaGVyZQogICAgICAgICAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy50eXBlICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gdHlwZXMuaGFuZGxlcjsKICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZXMgPSB0eXBlcy50eXBlOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIFVuYmluZCBhbGwgZXZlbnRzIGZvciB0aGUgZWxlbWVudAogICAg
ICAgICAgICAgICAgaWYgKCAhdHlwZXMgfHwgdHlwZW9mIHR5cGVzID09PSAic3RyaW5nIiAmJiB0
eXBlcy5jaGFyQXQoMCkgPT09ICIuIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMg
PSB0eXBlcyB8fCAiIjsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gZXZl
bnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1v
dmUoIGVsZW0sIHR5cGUgKyB0eXBlcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQogICAg
ICAgICAgICAgICAgLy8galF1ZXJ5KC4uLikudW5iaW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBm
bik7CiAgICAgICAgICAgICAgICB0eXBlcyA9IHR5cGVzLnNwbGl0KCIgIik7CgogICAgICAgICAg
ICAgICAgd2hpbGUgKCAodHlwZSA9IHR5cGVzWyBpKysgXSkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIG9yaWdUeXBlID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2Jq
ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgYWxsID0gdHlwZS5pbmRleE9mKCIuIikg
PCAwOwogICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gW107CgogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFhbGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTmFtZXNwYWNlZCBldmVudCBoYW5kbGVycwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1hcCggbmFtZXNwYWNlcy5z
bGljZSgwKS5zb3J0KCksIGZjbGVhbnVwICkuam9pbigiXFwuKD86LipcXC4pPyIpICsgIihcXC58
JCkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnRUeXBlID0gZXZlbnRzWyB0eXBlIF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFldmVudFR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWhhbmRsZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IDA7
IGogPCBldmVudFR5cGUubGVuZ3RoOyBqKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGogXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFsbCB8fCBuYW1lc3BhY2UudGVzdCggaGFu
ZGxlT2JqLm5hbWVzcGFjZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCBvcmlnVHlwZSwgaGFuZGxl
T2JqLmhhbmRsZXIsIGogKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnRUeXBlLnNwbGljZSggai0tLCAxICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVu
dC5zcGVjaWFsWyB0eXBlIF0gfHwge307CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBq
ID0gcG9zIHx8IDA7IGogPCBldmVudFR5cGUubGVuZ3RoOyBqKysgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gZXZlbnRUeXBlWyBqIF07CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3Vp
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0
aGUgZ2l2ZW4gaGFuZGxlciBmb3IgdGhlIGdpdmVuIHR5cGUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggYWxsIHx8IG5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmou
bmFtZXNwYWNlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcG9zID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlLnNwbGljZSggai0tLCAxICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbC5yZW1v
dmUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHBvcyAhPSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBnZW5lcmlj
IGV2ZW50IGhhbmRsZXIgaWYgbm8gbW9yZSBoYW5kbGVycyBleGlzdAogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGV2ZW50VHlwZS5sZW5ndGggPT09IDAgfHwgcG9zICE9IG51bGwgJiYgZXZl
bnRUeXBlLmxlbmd0aCA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFt
ZXNwYWNlcyApID09PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBldmVudHNbIHR5cGUgXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBpdCdzIG5v
IGxvbmdlciB1c2VkCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBl
dmVudHMgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGVsZW1EYXRh
LmhhbmRsZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGUgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmVsZW0gPSBudWxsOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxlbURhdGEuZXZl
bnRzOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxlbURhdGEuaGFuZGxlOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZWxlbURhdGEg
KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSgg
ZWxlbSwgdW5kZWZpbmVkLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIAogICAgICAgIC8vIEV2ZW50cyB0aGF0IGFy
ZSBzYWZlIHRvIHNob3J0LWNpcmN1aXQgaWYgbm8gaGFuZGxlcnMgYXJlIGF0dGFjaGVkLgogICAg
ICAgIC8vIE5hdGl2ZSBET00gZXZlbnRzIHNob3VsZCBub3QgYmUgYWRkZWQsIHRoZXkgbWF5IGhh
dmUgaW5saW5lIGhhbmRsZXJzLgogICAgICAgIGN1c3RvbUV2ZW50OiB7CiAgICAgICAgICAgICAg
ICAiZ2V0RGF0YSI6IHRydWUsCiAgICAgICAgICAgICAgICAic2V0RGF0YSI6IHRydWUsCiAgICAg
ICAgICAgICAgICAiY2hhbmdlRGF0YSI6IHRydWUKICAgICAgICB9LAoKICAgICAgICB0cmlnZ2Vy
OiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKICAgICAgICAg
ICAgICAgIC8vIEV2ZW50IG9iamVjdCBvciBldmVudCB0eXBlCiAgICAgICAgICAgICAgICB2YXIg
dHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVz
cGFjZXMgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaXZlOwoKICAgICAgICAg
ICAgICAgIGlmICggdHlwZS5pbmRleE9mKCIhIikgPj0gMCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRXhjbHVzaXZlIGV2ZW50cyB0cmlnZ2VyIG9ubHkgZm9yIHRoZSBleGFjdCBldmVu
dCAobm8gbmFtZXNwYWNlcykKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUuc2xp
Y2UoMCwgLTEpOwogICAgICAgICAgICAgICAgICAgICAgICBleGNsdXNpdmUgPSB0cnVlOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggdHlwZS5pbmRleE9mKCIuIikgPj0g
MCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVh
dGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKQogICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lc3BhY2VzLnNvcnQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBp
ZiAoICghZWxlbSB8fCBqUXVlcnkuZXZlbnQuY3VzdG9tRXZlbnRbIHR5cGUgXSkgJiYgIWpRdWVy
eS5ldmVudC5nbG9iYWxbIHR5cGUgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8g
alF1ZXJ5IGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50IHR5cGUsIGFuZCBpdCBjYW4ndCBoYXZlIGlu
bGluZSBoYW5kbGVycwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIEV2ZW50LCBP
YmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKICAgICAgICAgICAgICAgIGV2ZW50
ID0gdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiA/CiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGpRdWVyeS5FdmVudCBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRbIGpRdWVy
eS5leHBhbmRvIF0gPyBldmVudCA6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9iamVjdCBs
aXRlcmFsCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIGV2
ZW50ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHRoZSBldmVudCB0eXBlIChz
dHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUgKTsK
CiAgICAgICAgICAgICAgICBldmVudC50eXBlID0gdHlwZTsKICAgICAgICAgICAgICAgIGV2ZW50
LmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2ZTsKICAgICAgICAgICAgICAgIGV2ZW50Lm5hbWVzcGFjZSA9
IG5hbWVzcGFjZXMuam9pbigiLiIpOwogICAgICAgICAgICAgICAgZXZlbnQubmFtZXNwYWNlX3Jl
ID0gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwuKT8i
KSArICIoXFwufCQpIik7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIHRyaWdn
ZXJIYW5kbGVyKCkgYW5kIGdsb2JhbCBldmVudHMgZG9uJ3QgYnViYmxlIG9yIHJ1biB0aGUgZGVm
YXVsdCBhY3Rpb24KICAgICAgICAgICAgICAgIGlmICggb25seUhhbmRsZXJzIHx8ICFlbGVtICkg
ewogICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgYSBnbG9iYWwgdHJpZ2dlcgogICAgICAgICAg
ICAgICAgaWYgKCAhZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogU3Rv
cCB0YXVudGluZyB0aGUgZGF0YSBjYWNoZTsgcmVtb3ZlIGdsb2JhbCBldmVudHMgYW5kIGFsd2F5
cyBhdHRhY2ggdG8gZG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2go
IGpRdWVyeS5jYWNoZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaW50ZXJuYWxLZXkgdmFyaWFibGUgaXMganVzdCB1c2VkIHRvIG1ha2UgaXQgZWFzaWVy
IHRvIGZpbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcG90ZW50aWFs
bHkgY2hhbmdlIHRoaXMgc3R1ZmYgbGF0ZXI7IGN1cnJlbnRseSBpdCBqdXN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRzIHRvIGpRdWVyeS5leHBhbmRvCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbENhY2hlID0g
dGhpc1sgaW50ZXJuYWxLZXkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGludGVybmFsQ2FjaGUgJiYgaW50ZXJuYWxDYWNoZS5ldmVudHMgJiYgaW50ZXJuYWxDYWNoZS5l
dmVudHNbIHR5cGUgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC50cmlnZ2VyKCBldmVudCwgZGF0YSwgaW50ZXJuYWxDYWNoZS5oYW5kbGUu
ZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29t
bWVudCBub2RlcwogICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4g
Y2FzZSBpdCBpcyBiZWluZyByZXVzZWQKICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IHVu
ZGVmaW5lZDsKICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGVsZW07CgogICAgICAgICAg
ICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBj
cmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAogICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEg
IT0gbnVsbCA/IGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSA6IFtdOwogICAgICAgICAgICAgICAg
ZGF0YS51bnNoaWZ0KCBldmVudCApOwoKICAgICAgICAgICAgICAgIHZhciBjdXIgPSBlbGVtLAog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBkb2Vzbid0IGxpa2UgbWV0aG9kIG5hbWVzIHdp
dGggYSBjb2xvbiAoIzM1MzMsICM4MjcyKQogICAgICAgICAgICAgICAgICAgICAgICBvbnR5cGUg
PSB0eXBlLmluZGV4T2YoIjoiKSA8IDAgPyAib24iICsgdHlwZSA6ICIiOwoKICAgICAgICAgICAg
ICAgIC8vIEZpcmUgZXZlbnQgb24gdGhlIGN1cnJlbnQgZWxlbWVudCwgdGhlbiBidWJibGUgdXAg
dGhlIERPTSB0cmVlCiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBoYW5kbGUgPSBqUXVlcnkuX2RhdGEoIGN1ciwgImhhbmRsZSIgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBjdXI7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaGFuZGxlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZS5hcHBseSggY3VyLCBkYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYW4gaW5saW5lIGJvdW5kIHNjcmlwdAogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG9udHlwZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3Vy
ICkgJiYgY3VyWyBvbnR5cGUgXSAmJiBjdXJbIG9udHlwZSBdLmFwcGx5KCBjdXIsIGRhdGEgKSA9
PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVzdWx0
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdwogICAgICAgICAgICAg
ICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCBjdXIub3duZXJEb2N1bWVudCB8fCBj
dXIgPT09IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50ICYmIHdpbmRvdzsKICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKCBjdXIgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKTsKCiAg
ICAgICAgICAgICAgICAvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwg
ZG8gaXQgbm93CiAgICAgICAgICAgICAgICBpZiAoICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQo
KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9sZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7
fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCFzcGVjaWFsLl9kZWZhdWx0IHx8IHNw
ZWNpYWwuX2RlZmF1bHQuY2FsbCggZWxlbS5vd25lckRvY3VtZW50LCBldmVudCApID09PSBmYWxz
ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHR5cGUgPT09ICJjbGljayIg
JiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYSIgKSkgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGVs
ZW0gKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBhIG5hdGl2
ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIG5hbWUgYXMgdGhl
IGV2ZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbid0IHVzZSBhbiAu
aXNGdW5jdGlvbikoKSBjaGVjayBoZXJlIGJlY2F1c2UgSUU2LzcgZmFpbHMgdGhhdCB0ZXN0Lgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFPDkgZGllcyBvbiBmb2N1cyB0byBo
aWRkZW4gZWxlbWVudCAoIzE0ODYpLCBtYXkgd2FudCB0byByZXZpc2l0IGEgdHJ5L2NhdGNoLgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG9udHlwZSAmJiBlbGVtWyB0eXBlIF0gKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlLXRy
aWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkID0gZWxlbVsgb250
eXBlIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG9sZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyB0eXBlIF0oKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoICggaWVFcnJvciApIHt9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggb2xkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBvbGQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
dHJpZ2dlcmVkID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5y
ZXN1bHQ7CiAgICAgICAgfSwKCiAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7CiAg
ICAgICAgICAgICAgICBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8IHdpbmRvdy5l
dmVudCApOwogICAgICAgICAgICAgICAgLy8gU25hcHNob3QgdGhlIGhhbmRsZXJzIGxpc3Qgc2lu
Y2UgYSBjYWxsZWQgaGFuZGxlciBtYXkgYWRkL3JlbW92ZSBldmVudHMuCiAgICAgICAgICAgICAg
ICB2YXIgaGFuZGxlcnMgPSAoKGpRdWVyeS5fZGF0YSggdGhpcywgImV2ZW50cyIgKSB8fCB7fSlb
IGV2ZW50LnR5cGUgXSB8fCBbXSkuc2xpY2UoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIHJ1
bl9hbGwgPSAhZXZlbnQuZXhjbHVzaXZlICYmICFldmVudC5uYW1lc3BhY2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJndW1lbnRz
LCAwICk7CgogICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBmaXgtZWQgRXZlbnQgcmF0aGVyIHRo
YW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudAogICAgICAgICAgICAgICAgYXJnc1swXSA9
IGV2ZW50OwogICAgICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IHRoaXM7CgogICAg
ICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoOyBqIDwgbDsg
aisrICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlT2JqID0gaGFuZGxlcnNb
IGogXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlZCBldmVudCBtdXN0IDEp
IGJlIG5vbi1leGNsdXNpdmUgYW5kIGhhdmUgbm8gbmFtZXNwYWNlLCBvcgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyAyKSBoYXZlIG5hbWVzcGFjZShzKSBhIHN1YnNldCBvciBlcXVhbCB0byB0
aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcnVu
X2FsbCB8fCBldmVudC5uYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhc3MgaW4gYSByZWZlcmVuY2Ug
dG8gdGhlIGhhbmRsZXIgZnVuY3Rpb24gaXRzZWxmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gU28gdGhhdCB3ZSBjYW4gbGF0ZXIgcmVtb3ZlIGl0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlciA9IGhhbmRsZU9iai5oYW5kbGVyOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBoYW5kbGVPYmouaGFu
ZGxlci5hcHBseSggdGhpcywgYXJncyApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXZlbnQucmVzdWx0ID0gcmV0OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXQgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKICAgICAgICB9LAoK
ICAgICAgICBwcm9wczogImFsdEtleSBhdHRyQ2hhbmdlIGF0dHJOYW1lIGJ1YmJsZXMgYnV0dG9u
IGNhbmNlbGFibGUgY2hhckNvZGUgY2xpZW50WCBjbGllbnRZIGN0cmxLZXkgY3VycmVudFRhcmdl
dCBkYXRhIGRldGFpbCBldmVudFBoYXNlIGZyb21FbGVtZW50IGhhbmRsZXIga2V5Q29kZSBsYXll
clggbGF5ZXJZIG1ldGFLZXkgbmV3VmFsdWUgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHBy
ZXZWYWx1ZSByZWxhdGVkTm9kZSByZWxhdGVkVGFyZ2V0IHNjcmVlblggc2NyZWVuWSBzaGlmdEtl
eSBzcmNFbGVtZW50IHRhcmdldCB0b0VsZW1lbnQgdmlldyB3aGVlbERlbHRhIHdoaWNoIi5zcGxp
dCgiICIpLAoKICAgICAgICBmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAgICAgICAgICAg
IGlmICggZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBldmVudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBzdG9y
ZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IG9iamVjdAogICAgICAgICAgICAgICAgLy8g
YW5kICJjbG9uZSIgdG8gc2V0IHJlYWQtb25seSBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICB2
YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50OwogICAgICAgICAgICAgICAgZXZlbnQgPSBqUXVlcnku
RXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKCiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IHRo
aXMucHJvcHMubGVuZ3RoLCBwcm9wOyBpOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cCA9IHRoaXMucHJvcHNbIC0taSBdOwogICAgICAgICAgICAgICAgICAgICAgICBldmVudFsgcHJv
cCBdID0gb3JpZ2luYWxFdmVudFsgcHJvcCBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIC8vIEZpeCB0YXJnZXQgcHJvcGVydHksIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICAg
ICAgaWYgKCAhZXZlbnQudGFyZ2V0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhl
cyAjMTkyNSB3aGVyZSBzcmNFbGVtZW50IG1pZ2h0IG5vdCBiZSBkZWZpbmVkIGVpdGhlcgogICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgPSBldmVudC5zcmNFbGVtZW50IHx8IGRv
Y3VtZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRh
cmdldCBpcyBhIHRleHRub2RlIChzYWZhcmkpCiAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LnRh
cmdldC5ub2RlVHlwZSA9PT0gMyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFy
Z2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gQWRkIHJlbGF0ZWRUYXJnZXQsIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICAg
ICAgaWYgKCAhZXZlbnQucmVsYXRlZFRhcmdldCAmJiBldmVudC5mcm9tRWxlbWVudCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVsYXRlZFRhcmdldCA9IGV2ZW50LmZyb21FbGVt
ZW50ID09PSBldmVudC50YXJnZXQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVu
dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZVgv
WSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICBpZiAo
IGV2ZW50LnBhZ2VYID09IG51bGwgJiYgZXZlbnQuY2xpZW50WCAhPSBudWxsICkgewogICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZXZlbnREb2N1bWVudCA9IGV2ZW50LnRhcmdldC5vd25lckRv
Y3VtZW50IHx8IGRvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9
IGV2ZW50RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvZHkgPSBldmVudERvY3VtZW50LmJvZHk7CgogICAgICAgICAgICAgICAgICAgICAg
ICBldmVudC5wYWdlWCA9IGV2ZW50LmNsaWVudFggKyAoZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8
IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDApIC0gKGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8
fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnQucGFnZVkgPSBldmVudC5jbGllbnRZICsgKGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBi
b2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwg
Ym9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCiAgICAgICAgICAgICAgICBpZiAo
IGV2ZW50LndoaWNoID09IG51bGwgJiYgKGV2ZW50LmNoYXJDb2RlICE9IG51bGwgfHwgZXZlbnQu
a2V5Q29kZSAhPSBudWxsKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQud2hpY2gg
PSBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2Rl
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCBtZXRhS2V5IHRvIG5v
bi1NYWMgYnJvd3NlcnMgKHVzZSBjdHJsIGZvciBQQydzIGFuZCBNZXRhIGZvciBNYWNzKQogICAg
ICAgICAgICAgICAgaWYgKCAhZXZlbnQubWV0YUtleSAmJiBldmVudC5jdHJsS2V5ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5tZXRhS2V5ID0gZXZlbnQuY3RybEtleTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09
PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0CiAgICAgICAgICAgICAgICAvLyBOb3Rl
OiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAogICAgICAgICAgICAg
ICAgaWYgKCAhZXZlbnQud2hpY2ggJiYgZXZlbnQuYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gKGV2ZW50LmJ1dHRvbiAmIDEgPyAx
IDogKCBldmVudC5idXR0b24gJiAyID8gMyA6ICggZXZlbnQuYnV0dG9uICYgNCA/IDIgOiAwICkg
KSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAg
ICAgIH0sCgogICAgICAgIC8vIERlcHJlY2F0ZWQsIHVzZSBqUXVlcnkuZ3VpZCBpbnN0ZWFkCiAg
ICAgICAgZ3VpZDogMUU4LAoKICAgICAgICAvLyBEZXByZWNhdGVkLCB1c2UgalF1ZXJ5LnByb3h5
IGluc3RlYWQKICAgICAgICBwcm94eTogalF1ZXJ5LnByb3h5LAoKICAgICAgICBzcGVjaWFsOiB7
CiAgICAgICAgICAgICAgICByZWFkeTogewogICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlIHJlYWR5IGV2ZW50IGlzIHNldHVwCiAgICAgICAgICAgICAgICAgICAgICAgIHNl
dHVwOiBqUXVlcnkuYmluZFJlYWR5LAogICAgICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bjog
alF1ZXJ5Lm5vb3AKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgbGl2ZTogewog
ICAgICAgICAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKCBoYW5kbGVPYmogKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVDb252ZXJ0KCBoYW5kbGVPYmou
b3JpZ1R5cGUsIGhhbmRsZU9iai5zZWxlY3RvciApLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCh7fSwgaGFuZGxlT2JqLCB7aGFuZGxlcjogbGl2
ZUhhbmRsZXIsIGd1aWQ6IGhhbmRsZU9iai5oYW5kbGVyLmd1aWR9KSApOwogICAgICAgICAgICAg
ICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigg
aGFuZGxlT2JqICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC5yZW1vdmUoIHRoaXMsIGxpdmVDb252ZXJ0KCBoYW5kbGVPYmoub3JpZ1R5cGUsIGhhbmRsZU9i
ai5zZWxlY3RvciApLCBoYW5kbGVPYmogKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBiZWZvcmV1bmxvYWQ6IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhh
bmRsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQg
dG8gZG8gdGhpcyBzcGVjaWFsIGNhc2Ugb24gd2luZG93cwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCB0aGlzICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5sb2FkID0gZXZlbnRIYW5k
bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1l
c3BhY2VzLCBldmVudEhhbmRsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRoaXMub25iZWZvcmV1bmxvYWQgPT09IGV2ZW50SGFuZGxlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmJlZm9yZXVubG9hZCA9IG51bGw7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9OwoKalF1ZXJ5LnJlbW92ZUV2ZW50ID0gZG9j
dW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciA/CiAgICAgICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUs
IGhhbmRsZSApIHsKICAgICAgICAgICAgICAgIGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVy
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5
cGUsIGhhbmRsZSwgZmFsc2UgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9IDoKICAgICAg
ICBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgewogICAgICAgICAgICAgICAgaWYgKCBl
bGVtLmRldGFjaEV2ZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmRldGFjaEV2
ZW50KCAib24iICsgdHlwZSwgaGFuZGxlICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsK
CmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkgewogICAgICAgIC8vIEFsbG93
IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZAogICAgICAgIGlmICggIXRo
aXMucHJldmVudERlZmF1bHQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGpRdWVyeS5F
dmVudCggc3JjLCBwcm9wcyApOwogICAgICAgIH0KCiAgICAgICAgLy8gRXZlbnQgb2JqZWN0CiAg
ICAgICAgaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9yaWdp
bmFsRXZlbnQgPSBzcmM7CiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTsKCiAg
ICAgICAgICAgICAgICAvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZl
IGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAogICAgICAgICAgICAgICAgLy8gYnkgYSBoYW5kbGVy
IGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCiAgICAgICAg
ICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IChzcmMuZGVmYXVsdFByZXZlbnRlZCB8
fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIHNy
Yy5nZXRQcmV2ZW50RGVmYXVsdCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSkgPyByZXR1cm5U
cnVlIDogcmV0dXJuRmFsc2U7CgogICAgICAgIC8vIEV2ZW50IHR5cGUKICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgdGhpcy50eXBlID0gc3JjOwogICAgICAgIH0KCiAgICAgICAgLy8g
UHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QK
ICAgICAgICBpZiAoIHByb3BzICkgewogICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGhp
cywgcHJvcHMgKTsKICAgICAgICB9CgogICAgICAgIC8vIHRpbWVTdGFtcCBpcyBidWdneSBmb3Ig
c29tZSBldmVudHMgb24gRmlyZWZveCgjMzg0MykKICAgICAgICAvLyBTbyB3ZSB3b24ndCByZWx5
IG9uIHRoZSBuYXRpdmUgdmFsdWUKICAgICAgICB0aGlzLnRpbWVTdGFtcCA9IGpRdWVyeS5ub3co
KTsKCiAgICAgICAgLy8gTWFyayBpdCBhcyBmaXhlZAogICAgICAgIHRoaXNbIGpRdWVyeS5leHBh
bmRvIF0gPSB0cnVlOwp9OwoKZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7CiAgICAgICAgcmV0dXJu
IGZhbHNlOwp9CmZ1bmN0aW9uIHJldHVyblRydWUoKSB7CiAgICAgICAgcmV0dXJuIHRydWU7Cn0K
Ci8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkg
dGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZwovLyBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0
bWwKalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVy
blRydWU7CgogICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CiAgICAg
ICAgICAgICAgICBpZiAoICFlICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gaWYgcHJldmVudERlZmF1bHQgZXhp
c3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKICAgICAgICAgICAgICAgIGlmICggZS5w
cmV2ZW50RGVmYXVsdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVs
dCgpOwoKICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQgdGhlIHJldHVyblZhbHVlIHBy
b3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBmYWxzZSAoSUUpCiAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJl
dHVyblRydWU7CgogICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CiAg
ICAgICAgICAgICAgICBpZiAoICFlICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBpZiBzdG9wUHJvcGFnYXRpb24g
ZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKICAgICAgICAgICAgICAgIGlmICgg
ZS5zdG9wUHJvcGFnYXRpb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3Bh
Z2F0aW9uKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ug
c2V0IHRoZSBjYW5jZWxCdWJibGUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIHRy
dWUgKElFKQogICAgICAgICAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwogICAgICAgIH0s
CiAgICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwog
ICAgICAgICAgICAgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9LAogICAgICAg
IGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsCiAgICAgICAgaXNQcm9wYWdhdGlvblN0
b3BwZWQ6IHJldHVybkZhbHNlLAogICAgICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVk
OiByZXR1cm5GYWxzZQp9OwoKLy8gQ2hlY2tzIGlmIGFuIGV2ZW50IGhhcHBlbmVkIG9uIGFuIGVs
ZW1lbnQgd2l0aGluIGFub3RoZXIgZWxlbWVudAovLyBVc2VkIGluIGpRdWVyeS5ldmVudC5zcGVj
aWFsLm1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgaGFuZGxlcnMKdmFyIHdpdGhpbkVsZW1lbnQg
PSBmdW5jdGlvbiggZXZlbnQgKSB7CgogICAgICAgIC8vIENoZWNrIGlmIG1vdXNlKG92ZXJ8b3V0
KSBhcmUgc3RpbGwgd2l0aGluIHRoZSBzYW1lIHBhcmVudCBlbGVtZW50CiAgICAgICAgdmFyIHJl
bGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LAogICAgICAgICAgICAgICAgaW5zaWRlID0gZmFs
c2UsCiAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBldmVudC50eXBlOwoKICAgICAgICBldmVu
dC50eXBlID0gZXZlbnQuZGF0YTsKCiAgICAgICAgaWYgKCByZWxhdGVkICE9PSB0aGlzICkgewoK
ICAgICAgICAgICAgICAgIGlmICggcmVsYXRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aW5zaWRlID0galF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCByZWxhdGVkICk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgaWYgKCAhaW5zaWRlICkgewoKICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZXZlbnRUeXBlOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIH0KfSwKCi8vIEluIGNhc2Ugb2YgZXZlbnQgZGVsZWdhdGlvbiwgd2Ugb25s
eSBuZWVkIHRvIHJlbmFtZSB0aGUgZXZlbnQudHlwZSwKLy8gbGl2ZUhhbmRsZXIgd2lsbCB0YWtl
IGNhcmUgb2YgdGhlIHJlc3QuCmRlbGVnYXRlID0gZnVuY3Rpb24oIGV2ZW50ICkgewogICAgICAg
IGV2ZW50LnR5cGUgPSBldmVudC5kYXRhOwogICAgICAgIGpRdWVyeS5ldmVudC5oYW5kbGUuYXBw
bHkoIHRoaXMsIGFyZ3VtZW50cyApOwp9OwoKLy8gQ3JlYXRlIG1vdXNlZW50ZXIgYW5kIG1vdXNl
bGVhdmUgZXZlbnRzCmpRdWVyeS5lYWNoKHsKICAgICAgICBtb3VzZWVudGVyOiAibW91c2VvdmVy
IiwKICAgICAgICBtb3VzZWxlYXZlOiAibW91c2VvdXQiCn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXgg
KSB7CiAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKICAgICAgICAgICAg
ICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LmFkZCggdGhpcywgZml4LCBkYXRhICYmIGRhdGEuc2VsZWN0b3IgPyBkZWxlZ2F0
ZSA6IHdpdGhpbkVsZW1lbnQsIG9yaWcgKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAg
ICAgICB0ZWFyZG93bjogZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIGZpeCwgZGF0YSAmJiBkYXRhLnNlbGVjdG9yID8g
ZGVsZWdhdGUgOiB3aXRoaW5FbGVtZW50ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsK
fSk7CgovLyBzdWJtaXQgZGVsZWdhdGlvbgppZiAoICFqUXVlcnkuc3VwcG9ydC5zdWJtaXRCdWJi
bGVzICkgewoKICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7CiAgICAgICAg
ICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgImZvcm0iICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCh0aGlzLCAiY2xp
Y2suc3BlY2lhbFN1Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQXZvaWQgdHJpZ2dlcmluZyBlcnJvciBvbiBub24tZXhpc3Rl
bnQgdHlwZSBhdHRyaWJ1dGUgaW4gSUUgVk1MICgjNzA3MSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBqUXVlcnkubm9kZU5hbWUoIGVs
ZW0sICJpbnB1dCIgKSB8fCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgPyBlbGVt
LnR5cGUgOiAiIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICh0eXBlID09PSAic3VibWl0IiB8fCB0eXBlID09PSAiaW1hZ2UiKSAmJiBqUXVlcnkoIGVsZW0g
KS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCAic3VibWl0IiwgdGhpcywgYXJndW1lbnRzICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5ldmVudC5hZGQodGhpcywgImtleXByZXNzLnNwZWNpYWxTdWJtaXQiLCBmdW5jdGlvbigg
ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0g
ZS50YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSB8fCBqUXVlcnkubm9kZU5h
bWUoIGVsZW0sICJidXR0b24iICkgPyBlbGVtLnR5cGUgOiAiIjsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICh0eXBlID09PSAidGV4dCIgfHwgdHlwZSA9PT0g
InBhc3N3b3JkIikgJiYgalF1ZXJ5KCBlbGVtICkuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCAmJiBl
LmtleUNvZGUgPT09IDEzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmlnZ2VyKCAic3VibWl0IiwgdGhpcywgYXJndW1lbnRzICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rp
b24oIG5hbWVzcGFjZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5y
ZW1vdmUoIHRoaXMsICIuc3BlY2lhbFN1Ym1pdCIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICB9OwoKfQoKLy8gY2hhbmdlIGRlbGVnYXRpb24sIGhhcHBlbnMgaGVyZSBzbyB3ZSBoYXZlIGJp
bmQuCmlmICggIWpRdWVyeS5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMgKSB7CgogICAgICAgIHZhciBj
aGFuZ2VGaWx0ZXJzLAoKICAgICAgICBnZXRWYWwgPSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAg
ICAgICAgICAgIHZhciB0eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgPyBl
bGVtLnR5cGUgOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZWxlbS52YWx1ZTsK
CiAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJyYWRpbyIgfHwgdHlwZSA9PT0gImNoZWNr
Ym94IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZWxlbS5jaGVja2VkOwoKICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJzZWxlY3QtbXVsdGlwbGUiICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbGVtLnNlbGVjdGVkSW5kZXggPiAtMSA/CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1hcCggZWxlbS5vcHRpb25zLCBm
dW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtLnNlbGVjdGVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
LmpvaW4oIi0iKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiI7CgogICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbGVtLnNlbGVjdGVkSW5kZXg7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9LAoKICAg
ICAgICB0ZXN0Q2hhbmdlID0gZnVuY3Rpb24gdGVzdENoYW5nZSggZSApIHsKICAgICAgICAgICAg
ICAgIHZhciBlbGVtID0gZS50YXJnZXQsIGRhdGEsIHZhbDsKCiAgICAgICAgICAgICAgICBpZiAo
ICFyZm9ybUVsZW1zLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCBlbGVtLnJlYWRPbmx5ICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgZGF0YSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfZGF0YSIgKTsKICAg
ICAgICAgICAgICAgIHZhbCA9IGdldFZhbChlbGVtKTsKCiAgICAgICAgICAgICAgICAvLyB0aGUg
Y3VycmVudCBkYXRhIHdpbGwgYmUgYWxzbyByZXRyaWV2ZWQgYnkgYmVmb3JlYWN0aXZhdGUKICAg
ICAgICAgICAgICAgIGlmICggZS50eXBlICE9PSAiZm9jdXNvdXQiIHx8IGVsZW0udHlwZSAhPT0g
InJhZGlvIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAi
X2NoYW5nZV9kYXRhIiwgdmFsICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
aWYgKCBkYXRhID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBkYXRhICkgewogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg
KCBkYXRhICE9IG51bGwgfHwgdmFsICkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnR5cGUg
PSAiY2hhbmdlIjsKICAgICAgICAgICAgICAgICAgICAgICAgZS5saXZlRmlyZWQgPSB1bmRlZmlu
ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBhcmd1
bWVudHNbMV0sIGVsZW0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBq
UXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFuZ2UgPSB7CiAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3Vzb3V0OiB0ZXN0Q2hhbmdlLAoKICAgICAgICAg
ICAgICAgICAgICAgICAgYmVmb3JlZGVhY3RpdmF0ZTogdGVzdENoYW5nZSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiggZSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LCB0eXBlID0galF1ZXJ5Lm5vZGVOYW1lKCBl
bGVtLCAiaW5wdXQiICkgPyBlbGVtLnR5cGUgOiAiIjsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0eXBlID09PSAicmFkaW8iIHx8IHR5cGUgPT09ICJjaGVja2JveCIgfHwg
alF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdENoYW5nZS5jYWxsKCB0aGlzLCBlICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIGhhcyB0byBiZSBjYWxsZWQgYmVmb3JlIHN1
Ym1pdAogICAgICAgICAgICAgICAgICAgICAgICAvLyBLZXlkb3duIHdpbGwgYmUgY2FsbGVkIGJl
Zm9yZSBrZXlwcmVzcywgd2hpY2ggaXMgdXNlZCBpbiBzdWJtaXQtZXZlbnQgZGVsZWdhdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiggZSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LCB0eXBlID0galF1ZXJ5
Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgPyBlbGVtLnR5cGUgOiAiIjsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZS5rZXlDb2RlID09PSAxMyAmJiAhalF1ZXJ5Lm5v
ZGVOYW1lKCBlbGVtLCAidGV4dGFyZWEiICkgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGUua2V5Q29kZSA9PT0gMzIgJiYgKHR5cGUgPT09ICJjaGVja2JveCIg
fHwgdHlwZSA9PT0gInJhZGlvIikpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID09PSAic2VsZWN0LW11bHRpcGxlIiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RDaGFuZ2UuY2FsbCggdGhpcywgZSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEJlZm9yZWFjdGl2YXRlIGhhcHBlbnMgYWxzbyBiZWZv
cmUgdGhlIHByZXZpb3VzIGVsZW1lbnQgaXMgYmx1cnJlZAogICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3aXRoIHRoaXMgZXZlbnQgeW91IGNhbid0IHRyaWdnZXIgYSBjaGFuZ2UgZXZlbnQsIGJ1
dCB5b3UgY2FuIHN0b3JlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZm9ybWF0aW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZWFjdGl2YXRlOiBmdW5jdGlvbiggZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfZGF0
YSIsIGdldFZhbChlbGVtKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9LAoKICAgICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwgbmFtZXNwYWNl
cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnR5cGUgPT09ICJmaWxlIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciB0eXBl
IGluIGNoYW5nZUZpbHRlcnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZSArICIuc3BlY2lhbENoYW5nZSIsIGNoYW5nZUZpbHRl
cnNbdHlwZV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJmb3JtRWxlbXMudGVzdCggdGhpcy5ub2RlTmFtZSApOwogICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oIG5hbWVzcGFjZXMg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsICIu
c3BlY2lhbENoYW5nZSIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZm9ybUVs
ZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwoK
ICAgICAgICBjaGFuZ2VGaWx0ZXJzID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdlLmZpbHRl
cnM7CgogICAgICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBpbnB1dCBpcyAuZm9jdXMoKSdkCiAgICAg
ICAgY2hhbmdlRmlsdGVycy5mb2N1cyA9IGNoYW5nZUZpbHRlcnMuYmVmb3JlYWN0aXZhdGU7Cn0K
CmZ1bmN0aW9uIHRyaWdnZXIoIHR5cGUsIGVsZW0sIGFyZ3MgKSB7CiAgICAgICAgLy8gUGlnZ3li
YWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lLgogICAgICAg
IC8vIEZha2Ugb3JpZ2luYWxFdmVudCB0byBhdm9pZCBkb25vcidzIHN0b3BQcm9wYWdhdGlvbiwg
YnV0IGlmIHRoZQogICAgICAgIC8vIHNpbXVsYXRlZCBldmVudCBwcmV2ZW50cyBkZWZhdWx0IHRo
ZW4gd2UgZG8gdGhlIHNhbWUgb24gdGhlIGRvbm9yLgogICAgICAgIC8vIERvbid0IHBhc3MgYXJn
cyBvciByZW1lbWJlciBsaXZlRmlyZWQ7IHRoZXkgYXBwbHkgdG8gdGhlIGRvbm9yIGV2ZW50Lgog
ICAgICAgIHZhciBldmVudCA9IGpRdWVyeS5leHRlbmQoIHt9LCBhcmdzWyAwIF0gKTsKICAgICAg
ICBldmVudC50eXBlID0gdHlwZTsKICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50ID0ge307CiAg
ICAgICAgZXZlbnQubGl2ZUZpcmVkID0gdW5kZWZpbmVkOwogICAgICAgIGpRdWVyeS5ldmVudC5o
YW5kbGUuY2FsbCggZWxlbSwgZXZlbnQgKTsKICAgICAgICBpZiAoIGV2ZW50LmlzRGVmYXVsdFBy
ZXZlbnRlZCgpICkgewogICAgICAgICAgICAgICAgYXJnc1sgMCBdLnByZXZlbnREZWZhdWx0KCk7
CiAgICAgICAgfQp9CgovLyBDcmVhdGUgImJ1YmJsaW5nIiBmb2N1cyBhbmQgYmx1ciBldmVudHMK
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgKSB7CiAgICAgICAgalF1ZXJ5LmVh
Y2goeyBmb2N1czogImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uKCBvcmln
LCBmaXggKSB7CgogICAgICAgICAgICAgICAgLy8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBo
YW5kbGVyIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dAogICAgICAgICAgICAg
ICAgdmFyIGF0dGFjaGVzID0gMDsKCiAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lh
bFsgZml4IF0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGF0dGFjaGVzKysgPT09IDAgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAg
ICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAtLWF0dGFjaGVzID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwg
dHJ1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBo
YW5kbGVyKCBkb25vciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9ub3IgZXZlbnQg
aXMgYWx3YXlzIGEgbmF0aXZlIG9uZTsgZml4IGl0IGFuZCBzd2l0Y2ggaXRzIHR5cGUuCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIExldCBmb2N1c2luL291dCBoYW5kbGVyIGNhbmNlbCB0aGUg
ZG9ub3IgZm9jdXMvYmx1ciBldmVudC4KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBq
UXVlcnkuZXZlbnQuZml4KCBkb25vciApOwogICAgICAgICAgICAgICAgICAgICAgICBlLnR5cGUg
PSBmaXg7CiAgICAgICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudCA9IHt9OwogICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZS50YXJn
ZXQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgp
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbm9yLnByZXZlbnREZWZhdWx0
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9
KTsKfQoKalF1ZXJ5LmVhY2goWyJiaW5kIiwgIm9uZSJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsK
ICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsK
ICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyOwoKICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBv
YmplY3QgbGl0ZXJhbHMKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUgPT09ICJvYmpl
Y3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIga2V5IGluIHR5cGUgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1sgbmFtZSBdKGtleSwgZGF0YSwg
dHlwZVtrZXldLCBmbik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
aWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAyIHx8IGRhdGEgPT09IGZhbHNlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBmbiA9IGRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEg
PSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBuYW1l
ID09PSAib25lIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGZ1bmN0aW9u
KCBldmVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMg
KS51bmJpbmQoIGV2ZW50LCBoYW5kbGVyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5ndWlkID0gZm4uZ3VpZCB8
fCBqUXVlcnkuZ3VpZCsrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlciA9IGZuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IGlmICggdHlwZSA9PT0gInVubG9hZCIgJiYgbmFtZSAhPT0gIm9uZSIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMub25lKCB0eXBlLCBkYXRhLCBmbiApOwoKICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5hZGQoIHRoaXNbaV0sIHR5cGUsIGhhbmRsZXIsIGRhdGEgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgIH07Cn0pOwoKalF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAgICAgdW5i
aW5kOiBmdW5jdGlvbiggdHlwZSwgZm4gKSB7CiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgb2Jq
ZWN0IGxpdGVyYWxzCiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlID09PSAib2JqZWN0
IiAmJiAhdHlwZS5wcmV2ZW50RGVmYXVsdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggdmFyIGtleSBpbiB0eXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudW5iaW5kKGtleSwgdHlwZVtrZXldKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXNbaV0sIHR5cGUsIGZuICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oIHNl
bGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5s
aXZlKCB0eXBlcywgZGF0YSwgZm4sIHNlbGVjdG9yICk7CiAgICAgICAgfSwKCiAgICAgICAgdW5k
ZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7CiAgICAgICAgICAgICAg
ICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnVuYmluZCggImxpdmUiICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGllKCB0eXBlcywgbnVsbCwgZm4s
IHNlbGVjdG9yICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgdHJpZ2dl
cjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJp
Z2dlciggdHlwZSwgZGF0YSwgdGhpcyApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwK
CiAgICAgICAgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewogICAgICAg
ICAgICAgICAgaWYgKCB0aGlzWzBdICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXNbMF0sIHRydWUgKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKCBmbiApIHsK
ICAgICAgICAgICAgICAgIC8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNz
IGluIGNsb3N1cmUKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLAogICAgICAg
ICAgICAgICAgICAgICAgICBndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrLAogICAgICAg
ICAgICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlciA9
IGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
aWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIHRvIGV4ZWN1dGUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbGFzdFRvZ2dsZSA9ICggalF1ZXJ5LmRhdGEoIHRoaXMsICJsYXN0VG9n
Z2xlIiArIGZuLmd1aWQgKSB8fCAwICkgJSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlkLCBsYXN0VG9nZ2xl
ICsgMSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBjbGlja3Mgc3RvcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBleGVj
dXRlIHRoZSBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
cmdzWyBsYXN0VG9nZ2xlIF0uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIHx8IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIGxpbmsgYWxsIHRoZSBm
dW5jdGlvbnMsIHNvIGFueSBvZiB0aGVtIGNhbiB1bmJpbmQgdGhpcyBjbGljayBoYW5kbGVyCiAg
ICAgICAgICAgICAgICB0b2dnbGVyLmd1aWQgPSBndWlkOwogICAgICAgICAgICAgICAgd2hpbGUg
KCBpIDwgYXJncy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbIGkrKyBd
Lmd1aWQgPSBndWlkOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmNsaWNrKCB0b2dnbGVyICk7CiAgICAgICAgfSwKCiAgICAgICAgaG92ZXI6IGZ1bmN0aW9u
KCBmbk92ZXIsIGZuT3V0ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2VlbnRl
ciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7CiAgICAgICAgfQp9KTsK
CnZhciBsaXZlTWFwID0gewogICAgICAgIGZvY3VzOiAiZm9jdXNpbiIsCiAgICAgICAgYmx1cjog
ImZvY3Vzb3V0IiwKICAgICAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKICAgICAgICBtb3Vz
ZWxlYXZlOiAibW91c2VvdXQiCn07CgpqUXVlcnkuZWFjaChbImxpdmUiLCAiZGllIl0sIGZ1bmN0
aW9uKCBpLCBuYW1lICkgewogICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHR5
cGVzLCBkYXRhLCBmbiwgb3JpZ1NlbGVjdG9yIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgewog
ICAgICAgICAgICAgICAgdmFyIHR5cGUsIGkgPSAwLCBtYXRjaCwgbmFtZXNwYWNlcywgcHJlVHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBvcmlnU2VsZWN0b3IgfHwgdGhp
cy5zZWxlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IG9yaWdTZWxlY3Rv
ciA/IHRoaXMgOiBqUXVlcnkoIHRoaXMuY29udGV4dCApOwoKICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiAmJiAhdHlwZXMucHJldmVudERlZmF1bHQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gdHlwZXMgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFsgbmFtZSBdKCBrZXksIGRhdGEsIHR5cGVz
W2tleV0sIHNlbGVjdG9yICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIGlmICggbmFtZSA9PT0gImRpZSIgJiYgIXR5cGVzICYmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcmlnU2VsZWN0b3IgJiYgb3JpZ1NlbGVjdG9yLmNoYXJBdCgw
KSA9PT0gIi4iICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC51bmJpbmQoIG9y
aWdTZWxlY3RvciApOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBkYXRhID09PSBmYWxzZSB8fCBqUXVl
cnkuaXNGdW5jdGlvbiggZGF0YSApICkgewogICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGRh
dGEgfHwgcmV0dXJuRmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmlu
ZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHlwZXMgPSAodHlwZXMgfHwg
IiIpLnNwbGl0KCIgIik7CgogICAgICAgICAgICAgICAgd2hpbGUgKCAodHlwZSA9IHR5cGVzWyBp
KysgXSkgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBybmFtZXNw
YWNlcy5leGVjKCB0eXBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSAi
IjsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2ggKSAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBtYXRjaFswXTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZS5yZXBsYWNlKCBybmFtZXNwYWNlcywgIiIgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0
eXBlID09PSAiaG92ZXIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVz
LnB1c2goICJtb3VzZWVudGVyIiArIG5hbWVzcGFjZXMsICJtb3VzZWxlYXZlIiArIG5hbWVzcGFj
ZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcHJlVHlwZSA9IHR5cGU7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxpdmVNYXBbIHR5cGUgXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKCBsaXZlTWFwWyB0eXBlIF0gKyBu
YW1lc3BhY2VzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUg
KyBuYW1lc3BhY2VzOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gKGxpdmVNYXBbIHR5cGUgXSB8fCB0eXBlKSAr
IG5hbWVzcGFjZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbmFtZSA9PT0gImxpdmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJpbmQgbGl2ZSBoYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGogPSAwLCBsID0gY29udGV4dC5sZW5ndGg7IGogPCBsOyBqKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCBj
b250ZXh0W2pdLCAibGl2ZS4iICsgbGl2ZUNvbnZlcnQoIHR5cGUsIHNlbGVjdG9yICksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGF0YTogZGF0YSwg
c2VsZWN0b3I6IHNlbGVjdG9yLCBoYW5kbGVyOiBmbiwgb3JpZ1R5cGU6IHR5cGUsIG9yaWdIYW5k
bGVyOiBmbiwgcHJlVHlwZTogcHJlVHlwZSB9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB1bmJpbmQgbGl2ZSBoYW5kbGVyCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC51bmJpbmQoICJsaXZlLiIgKyBsaXZlQ29udmVydCggdHlw
ZSwgc2VsZWN0b3IgKSwgZm4gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH07Cn0pOwoKZnVu
Y3Rpb24gbGl2ZUhhbmRsZXIoIGV2ZW50ICkgewogICAgICAgIHZhciBzdG9wLCBtYXhMZXZlbCwg
cmVsYXRlZCwgbWF0Y2gsIGhhbmRsZU9iaiwgZWxlbSwgaiwgaSwgbCwgZGF0YSwgY2xvc2UsIG5h
bWVzcGFjZSwgcmV0LAogICAgICAgICAgICAgICAgZWxlbXMgPSBbXSwKICAgICAgICAgICAgICAg
IHNlbGVjdG9ycyA9IFtdLAogICAgICAgICAgICAgICAgZXZlbnRzID0galF1ZXJ5Ll9kYXRhKCB0
aGlzLCAiZXZlbnRzIiApOwoKICAgICAgICAvLyBNYWtlIHN1cmUgd2UgYXZvaWQgbm9uLWxlZnQt
Y2xpY2sgYnViYmxpbmcgaW4gRmlyZWZveCAoIzM4NjEpIGFuZCBkaXNhYmxlZCBlbGVtZW50cyBp
biBJRSAoIzY5MTEpCiAgICAgICAgaWYgKCBldmVudC5saXZlRmlyZWQgPT09IHRoaXMgfHwgIWV2
ZW50cyB8fCAhZXZlbnRzLmxpdmUgfHwgZXZlbnQudGFyZ2V0LmRpc2FibGVkIHx8IGV2ZW50LmJ1
dHRvbiAmJiBldmVudC50eXBlID09PSAiY2xpY2siICkgewogICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgIH0KCiAgICAgICAgaWYgKCBldmVudC5uYW1lc3BhY2UgKSB7CiAgICAgICAgICAg
ICAgICBuYW1lc3BhY2UgPSBuZXcgUmVnRXhwKCIoXnxcXC4pIiArIGV2ZW50Lm5hbWVzcGFjZS5z
cGxpdCgiLiIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSArICIoXFwufCQpIik7CiAgICAgICAgfQoK
ICAgICAgICBldmVudC5saXZlRmlyZWQgPSB0aGlzOwoKICAgICAgICB2YXIgbGl2ZSA9IGV2ZW50
cy5saXZlLnNsaWNlKDApOwoKICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGxpdmUubGVuZ3RoOyBq
KysgKSB7CiAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBsaXZlW2pdOwoKICAgICAgICAgICAg
ICAgIGlmICggaGFuZGxlT2JqLm9yaWdUeXBlLnJlcGxhY2UoIHJuYW1lc3BhY2VzLCAiIiApID09
PSBldmVudC50eXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMucHVzaCgg
aGFuZGxlT2JqLnNlbGVjdG9yICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgbGl2ZS5zcGxpY2UoIGotLSwgMSApOwogICAgICAgICAgICAgICAgfQog
ICAgICAgIH0KCiAgICAgICAgbWF0Y2ggPSBqUXVlcnkoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3Qo
IHNlbGVjdG9ycywgZXZlbnQuY3VycmVudFRhcmdldCApOwoKICAgICAgICBmb3IgKCBpID0gMCwg
bCA9IG1hdGNoLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgIGNsb3NlID0g
bWF0Y2hbaV07CgogICAgICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCBsaXZlLmxlbmd0aDsg
aisrICkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBsaXZlW2pdOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjbG9zZS5zZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNl
bGVjdG9yICYmICghbmFtZXNwYWNlIHx8IG5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNw
YWNlICkpICYmICFjbG9zZS5lbGVtLmRpc2FibGVkICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0gPSBjbG9zZS5lbGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbGF0ZWQgPSBudWxsOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aG9zZSB0d28gZXZlbnRzIHJlcXVpcmUgYWRkaXRpb25hbCBjaGVja2luZwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlT2JqLnByZVR5cGUgPT09ICJtb3VzZWVudGVy
IiB8fCBoYW5kbGVPYmoucHJlVHlwZSA9PT0gIm1vdXNlbGVhdmUiICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGhhbmRsZU9iai5wcmVUeXBl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCA9IGpRdWVy
eSggZXZlbnQucmVsYXRlZFRhcmdldCApLmNsb3Nlc3QoIGhhbmRsZU9iai5zZWxlY3RvciApWzBd
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBu
b3QgdG8gYWNjaWRlbnRhbGx5IG1hdGNoIGEgY2hpbGQgZWxlbWVudCB3aXRoIHRoZSBzYW1lIHNl
bGVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlbGF0
ZWQgJiYgalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLCByZWxhdGVkICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSBlbGVtOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmVsYXRl
ZCB8fCByZWxhdGVkICE9PSBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbXMucHVzaCh7IGVsZW06IGVsZW0sIGhhbmRsZU9iajogaGFuZGxlT2JqLCBs
ZXZlbDogY2xvc2UubGV2ZWwgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICBmb3IgKCBpID0gMCwgbCA9IGVsZW1zLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAg
ICAgICAgICAgIG1hdGNoID0gZWxlbXNbaV07CgogICAgICAgICAgICAgICAgaWYgKCBtYXhMZXZl
bCAmJiBtYXRjaC5sZXZlbCA+IG1heExldmVsICkgewogICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFy
Z2V0ID0gbWF0Y2guZWxlbTsKICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEgPSBtYXRjaC5oYW5k
bGVPYmouZGF0YTsKICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IG1hdGNoLmhhbmRs
ZU9iajsKCiAgICAgICAgICAgICAgICByZXQgPSBtYXRjaC5oYW5kbGVPYmoub3JpZ0hhbmRsZXIu
YXBwbHkoIG1hdGNoLmVsZW0sIGFyZ3VtZW50cyApOwoKICAgICAgICAgICAgICAgIGlmICggcmV0
ID09PSBmYWxzZSB8fCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBtYXhMZXZlbCA9IG1hdGNoLmxldmVsOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCByZXQgPT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3AgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBzdG9w
Owp9CgpmdW5jdGlvbiBsaXZlQ29udmVydCggdHlwZSwgc2VsZWN0b3IgKSB7CiAgICAgICAgcmV0
dXJuICh0eXBlICYmIHR5cGUgIT09ICIqIiA/IHR5cGUgKyAiLiIgOiAiIikgKyBzZWxlY3Rvci5y
ZXBsYWNlKHJwZXJpb2QsICJgIikucmVwbGFjZShyc3BhY2VzLCAiJiIpOwp9CgpqUXVlcnkuZWFj
aCggKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9h
ZCBjbGljayBkYmxjbGljayAiICsKICAgICAgICAibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3Zl
IG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgIiArCiAgICAgICAgImNo
YW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiKS5zcGxpdCgi
ICIpLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCiAgICAgICAgLy8gSGFuZGxlIGV2ZW50IGJpbmRp
bmcKICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHsKICAg
ICAgICAgICAgICAgIGlmICggZm4gPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Zm4gPSBkYXRhOwogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gbnVsbDsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgPwog
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmQoIG5hbWUsIGRhdGEsIGZuICkgOgogICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoIG5hbWUgKTsKICAgICAgICB9OwoKICAg
ICAgICBpZiAoIGpRdWVyeS5hdHRyRm4gKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ckZu
WyBuYW1lIF0gPSB0cnVlOwogICAgICAgIH0KfSk7CgoKCi8qIQogKiBTaXp6bGUgQ1NTIFNlbGVj
dG9yIEVuZ2luZQogKiAgQ29weXJpZ2h0IDIwMTEsIFRoZSBEb2pvIEZvdW5kYXRpb24KICogIFJl
bGVhc2VkIHVuZGVyIHRoZSBNSVQsIEJTRCwgYW5kIEdQTCBMaWNlbnNlcy4KICogIE1vcmUgaW5m
b3JtYXRpb246IGh0dHA6Ly9zaXp6bGVqcy5jb20vCiAqLwooZnVuY3Rpb24oKXsKCnZhciBjaHVu
a2VyID0gLygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxb
JyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSko
XHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZywKICAgICAgICBkb25lID0gMCwKICAgICAgICB0b1N0
cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsCiAgICAgICAgaGFzRHVwbGljYXRlID0g
ZmFsc2UsCiAgICAgICAgYmFzZUhhc0R1cGxpY2F0ZSA9IHRydWUsCiAgICAgICAgckJhY2tzbGFz
aCA9IC9cXC9nLAogICAgICAgIHJOb25Xb3JkID0gL1xXLzsKCi8vIEhlcmUgd2UgY2hlY2sgaWYg
dGhlIEphdmFTY3JpcHQgZW5naW5lIGlzIHVzaW5nIHNvbWUgc29ydCBvZgovLyBvcHRpbWl6YXRp
b24gd2hlcmUgaXQgZG9lcyBub3QgYWx3YXlzIGNhbGwgb3VyIGNvbXBhcmlzaW9uCi8vIGZ1bmN0
aW9uLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBkaXNjYXJkIHRoZSBoYXNEdXBsaWNhdGUgdmFsdWUu
Ci8vICAgVGh1cyBmYXIgdGhhdCBpbmNsdWRlcyBHb29nbGUgQ2hyb21lLgpbMCwgMF0uc29ydChm
dW5jdGlvbigpIHsKICAgICAgICBiYXNlSGFzRHVwbGljYXRlID0gZmFsc2U7CiAgICAgICAgcmV0
dXJuIDA7Cn0pOwoKdmFyIFNpenpsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVz
dWx0cywgc2VlZCApIHsKICAgICAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKICAgICAgICBj
b250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKCiAgICAgICAgdmFyIG9yaWdDb250ZXh0ID0g
Y29udGV4dDsKCiAgICAgICAgaWYgKCBjb250ZXh0Lm5vZGVUeXBlICE9PSAxICYmIGNvbnRleHQu
bm9kZVR5cGUgIT09IDkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQog
ICAgICAgIAogICAgICAgIGlmICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0
cmluZyIgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICB9CgogICAg
ICAgIHZhciBtLCBzZXQsIGNoZWNrU2V0LCBleHRyYSwgcmV0LCBjdXIsIHBvcCwgaSwKICAgICAg
ICAgICAgICAgIHBydW5lID0gdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbnRleHRYTUwgPSBTaXp6
bGUuaXNYTUwoIGNvbnRleHQgKSwKICAgICAgICAgICAgICAgIHBhcnRzID0gW10sCiAgICAgICAg
ICAgICAgICBzb0ZhciA9IHNlbGVjdG9yOwogICAgICAgIAogICAgICAgIC8vIFJlc2V0IHRoZSBw
b3NpdGlvbiBvZiB0aGUgY2h1bmtlciByZWdleHAgKHN0YXJ0IGZyb20gaGVhZCkKICAgICAgICBk
byB7CiAgICAgICAgICAgICAgICBjaHVua2VyLmV4ZWMoICIiICk7CiAgICAgICAgICAgICAgICBt
ID0gY2h1bmtlci5leGVjKCBzb0ZhciApOwoKICAgICAgICAgICAgICAgIGlmICggbSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgc29GYXIgPSBtWzNdOwogICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goIG1bMV0gKTsKICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1bMl0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmEgPSBtWzNdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgfSB3aGlsZSAoIG0gKTsKCiAgICAgICAgaWYgKCBwYXJ0cy5sZW5ndGggPiAxICYmIG9yaWdQ
T1MuZXhlYyggc2VsZWN0b3IgKSApIHsKCiAgICAgICAgICAgICAgICBpZiAoIHBhcnRzLmxlbmd0
aCA9PT0gMiAmJiBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBdICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBzZXQgPSBwb3NQcm9jZXNzKCBwYXJ0c1swXSArIHBhcnRzWzFdLCBjb250ZXh0ICk7
CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0g
RXhwci5yZWxhdGl2ZVsgcGFydHNbMF0gXSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWyBjb250ZXh0IF0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZSgg
cGFydHMuc2hpZnQoKSwgY29udGV4dCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KCBwYXJ0cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
b3IgPSBwYXJ0cy5zaGlmdCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IEV4cHIucmVsYXRpdmVbIHNlbGVjdG9yIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3RvciArPSBwYXJ0cy5zaGlmdCgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBwb3NQcm9jZXNzKCBzZWxlY3Rvciwgc2V0
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBj
b250ZXh0IGlmIHRoZSByb290IHNlbGVjdG9yIGlzIGFuIElECiAgICAgICAgICAgICAgICAvLyAo
YnV0IG5vdCBpZiBpdCdsbCBiZSBmYXN0ZXIgaWYgdGhlIGlubmVyIHNlbGVjdG9yIGlzIGFuIElE
KQogICAgICAgICAgICAgICAgaWYgKCAhc2VlZCAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIGNvbnRl
eHQubm9kZVR5cGUgPT09IDkgJiYgIWNvbnRleHRYTUwgJiYKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFeHByLm1hdGNoLklELnRlc3QocGFydHNbMF0pICYmICFFeHByLm1hdGNoLklE
LnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pICkgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gU2l6emxlLmZpbmQoIHBhcnRzLnNoaWZ0KCksIGNvbnRleHQsIGNvbnRleHRYTUwg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHJldC5leHByID8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0LnNldCAp
WzBdIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuc2V0WzBdOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggY29udGV4dCApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gc2VlZCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBleHByOiBwYXJ0cy5wb3AoKSwgc2V0OiBtYWtlQXJyYXkoc2VlZCkgfSA6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmZpbmQoIHBhcnRzLnBvcCgpLCBwYXJ0cy5sZW5n
dGggPT09IDEgJiYgKHBhcnRzWzBdID09PSAifiIgfHwgcGFydHNbMF0gPT09ICIrIikgJiYgY29u
dGV4dC5wYXJlbnROb2RlID8gY29udGV4dC5wYXJlbnROb2RlIDogY29udGV4dCwgY29udGV4dFhN
TCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gcmV0LmV4cHIgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5maWx0ZXIoIHJldC5leHByLCByZXQuc2V0ICkg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zZXQ7CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHBhcnRzLmxlbmd0aCA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tTZXQgPSBtYWtlQXJyYXkoIHNldCApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZSA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIHBhcnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXIgPSBwYXJ0cy5wb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Ag
PSBjdXI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIUV4cHIucmVsYXRp
dmVbIGN1ciBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcCA9IHBhcnRzLnBvcCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBwb3AgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvcCA9IGNvbnRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByLnJlbGF0aXZlWyBjdXIgXSggY2hl
Y2tTZXQsIHBvcCwgY29udGV4dFhNTCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXQgPSBw
YXJ0cyA9IFtdOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAhY2hl
Y2tTZXQgKSB7CiAgICAgICAgICAgICAgICBjaGVja1NldCA9IHNldDsKICAgICAgICB9CgogICAg
ICAgIGlmICggIWNoZWNrU2V0ICkgewogICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBjdXIg
fHwgc2VsZWN0b3IgKTsKICAgICAgICB9CgogICAgICAgIGlmICggdG9TdHJpbmcuY2FsbChjaGVj
a1NldCkgPT09ICJbb2JqZWN0IEFycmF5XSIgKSB7CiAgICAgICAgICAgICAgICBpZiAoICFwcnVu
ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoLmFwcGx5KCByZXN1bHRz
LCBjaGVja1NldCApOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnRleHQgJiYgY29u
dGV4dC5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9
IDA7IGNoZWNrU2V0W2ldICE9IG51bGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGNoZWNrU2V0W2ldICYmIChjaGVja1NldFtpXSA9PT0gdHJ1ZSB8fCBjaGVj
a1NldFtpXS5ub2RlVHlwZSA9PT0gMSAmJiBTaXp6bGUuY29udGFpbnMoY29udGV4dCwgY2hlY2tT
ZXRbaV0pKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHMucHVzaCggc2V0W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGNoZWNrU2V0W2ldICE9IG51bGw7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNoZWNrU2V0W2ldICYmIGNoZWNr
U2V0W2ldLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0cy5wdXNoKCBzZXRbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1ha2VBcnJheSggY2hlY2tTZXQsIHJlc3Vs
dHMgKTsKICAgICAgICB9CgogICAgICAgIGlmICggZXh0cmEgKSB7CiAgICAgICAgICAgICAgICBT
aXp6bGUoIGV4dHJhLCBvcmlnQ29udGV4dCwgcmVzdWx0cywgc2VlZCApOwogICAgICAgICAgICAg
ICAgU2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKICAgICAgICB9CgogICAgICAgIHJldHVy
biByZXN1bHRzOwp9OwoKU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsK
ICAgICAgICBpZiAoIHNvcnRPcmRlciApIHsKICAgICAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9
IGJhc2VIYXNEdXBsaWNhdGU7CiAgICAgICAgICAgICAgICByZXN1bHRzLnNvcnQoIHNvcnRPcmRl
ciApOwoKICAgICAgICAgICAgICAgIGlmICggaGFzRHVwbGljYXRlICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDE7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0c1tpXSA9PT0gcmVzdWx0
c1sgaSAtIDEgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHMuc3BsaWNlKCBpLS0sIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cgog
ICAgICAgIHJldHVybiByZXN1bHRzOwp9OwoKU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhw
ciwgc2V0ICkgewogICAgICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIHNldCAp
Owp9OwoKU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBub2RlLCBleHByICkgewog
ICAgICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIFtub2RlXSApLmxlbmd0aCA+
IDA7Cn07CgpTaXp6bGUuZmluZCA9IGZ1bmN0aW9uKCBleHByLCBjb250ZXh0LCBpc1hNTCApIHsK
ICAgICAgICB2YXIgc2V0OwoKICAgICAgICBpZiAoICFleHByICkgewogICAgICAgICAgICAgICAg
cmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gRXhwci5v
cmRlci5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2gsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBFeHByLm9yZGVyW2ldOwogICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICBpZiAoIChtYXRjaCA9IEV4cHIubGVmdE1hdGNoWyB0eXBlIF0u
ZXhlYyggZXhwciApKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBtYXRj
aFsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guc3BsaWNlKCAxLCAxICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGxlZnQuc3Vic3RyKCBsZWZ0Lmxlbmd0aCAtIDEgKSAh
PT0gIlxcIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9ICht
YXRjaFsxXSB8fCAiIikucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXQgPSBFeHByLmZpbmRbIHR5cGUgXSggbWF0Y2gsIGNvbnRleHQs
IGlzWE1MICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2V0ICE9IG51
bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gZXhw
ci5yZXBsYWNlKCBFeHByLm1hdGNoWyB0eXBlIF0sICIiICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9
CgogICAgICAgIGlmICggIXNldCApIHsKICAgICAgICAgICAgICAgIHNldCA9IHR5cGVvZiBjb250
ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiA/CiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICIqIiApIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgW107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4geyBzZXQ6IHNldCwg
ZXhwcjogZXhwciB9Owp9OwoKU2l6emxlLmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBzZXQsIGlu
cGxhY2UsIG5vdCApIHsKICAgICAgICB2YXIgbWF0Y2gsIGFueUZvdW5kLAogICAgICAgICAgICAg
ICAgb2xkID0gZXhwciwKICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdLAogICAgICAgICAgICAg
ICAgY3VyTG9vcCA9IHNldCwKICAgICAgICAgICAgICAgIGlzWE1MRmlsdGVyID0gc2V0ICYmIHNl
dFswXSAmJiBTaXp6bGUuaXNYTUwoIHNldFswXSApOwoKICAgICAgICB3aGlsZSAoIGV4cHIgJiYg
c2V0Lmxlbmd0aCApIHsKICAgICAgICAgICAgICAgIGZvciAoIHZhciB0eXBlIGluIEV4cHIuZmls
dGVyICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChtYXRjaCA9IEV4cHIubGVmdE1h
dGNoWyB0eXBlIF0uZXhlYyggZXhwciApKSAhPSBudWxsICYmIG1hdGNoWzJdICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgaXRlbSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IEV4cHIuZmlsdGVyWyB0eXBlIF0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWF0Y2hbMV07Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueUZvdW5kID0gZmFsc2U7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLnNwbGljZSgxLDEpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGxlZnQuc3Vic3RyKCBsZWZ0Lmxlbmd0aCAtIDEgKSA9
PT0gIlxcIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjdXJMb29wID09PSByZXN1bHQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggRXhw
ci5wcmVGaWx0ZXJbIHR5cGUgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gRXhwci5wcmVGaWx0ZXJbIHR5cGUgXSggbWF0Y2gsIGN1ckxvb3AsIGlu
cGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTEZpbHRlciApOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIW1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IGZvdW5kID0gdHJ1ZTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaCA9PT0g
dHJ1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwOyAoaXRlbSA9IGN1ckxvb3BbaV0pICE9IG51bGw7IGkrKyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpdGVt
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gZmlsdGVyKCBpdGVtLCBtYXRjaCwgaSwgY3VyTG9vcCApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXNzID0g
bm90IF4gISFmb3VuZDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBpbnBsYWNlICYmIGZvdW5kICE9IG51bGwgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHBhc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueUZvdW5kID0gdHJ1ZTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJMb29wW2ldID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIHBhc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCggaXRlbSApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55Rm91bmQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBmb3VuZCAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaW5wbGFjZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyTG9vcCA9IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHByID0gZXhwci5yZXBsYWNlKCBFeHByLm1hdGNoWyB0eXBlIF0sICIiICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhYW55Rm91bmQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvLyBJbXByb3BlciBleHByZXNzaW9uCiAgICAgICAgICAgICAgICBpZiAo
IGV4cHIgPT09IG9sZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhbnlGb3VuZCA9
PSBudWxsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvcigg
ZXhwciApOwoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG9sZCA9IGV4cHI7CiAgICAgICAgfQoKICAgICAg
ICByZXR1cm4gY3VyTG9vcDsKfTsKClNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CiAg
ICAgICAgdGhyb3cgIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIgKyBt
c2c7Cn07Cgp2YXIgRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7CiAgICAgICAgb3JkZXI6IFsg
IklEIiwgIk5BTUUiLCAiVEFHIiBdLAoKICAgICAgICBtYXRjaDogewogICAgICAgICAgICAgICAg
SUQ6IC8jKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLywKICAgICAgICAgICAgICAgIENM
QVNTOiAvXC4oKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAogICAgICAgICAgICAgICAg
TkFNRTogL1xbbmFtZT1bJyJdKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVsnIl0qXF0v
LAogICAgICAgICAgICAgICAgQVRUUjogL1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwu
KSspXHMqKD86KFxTPz0pXHMqKD86KFsnIl0pKC4qPylcM3woIz8oPzpbXHdcdTAwYzAtXHVGRkZG
XC1dfFxcLikqKXwpfClccypcXS8sCiAgICAgICAgICAgICAgICBUQUc6IC9eKCg/Oltcd1x1MDBj
MC1cdUZGRkZcKlwtXXxcXC4pKykvLAogICAgICAgICAgICAgICAgQ0hJTEQ6IC86KG9ubHl8bnRo
fGxhc3R8Zmlyc3QpLWNoaWxkKD86XChccyooZXZlbnxvZGR8KD86WytcLV0/XGQrfCg/OlsrXC1d
P1xkKik/blxzKig/OlsrXC1dXHMqXGQrKT8pKVxzKlwpKT8vLAogICAgICAgICAgICAgICAgUE9T
OiAvOihudGh8ZXF8Z3R8bHR8Zmlyc3R8bGFzdHxldmVufG9kZCkoPzpcKChcZCopXCkpPyg/PVte
XC1dfCQpLywKICAgICAgICAgICAgICAgIFBTRVVETzogLzooKD86W1x3XHUwMGMwLVx1RkZGRlwt
XXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwpXStcKXxbXlwoXCldKikrKVwyXCkpPy8KICAg
ICAgICB9LAoKICAgICAgICBsZWZ0TWF0Y2g6IHt9LAoKICAgICAgICBhdHRyTWFwOiB7CiAgICAg
ICAgICAgICAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIiwKICAgICAgICAgICAgICAgICJmb3IiOiAi
aHRtbEZvciIKICAgICAgICB9LAoKICAgICAgICBhdHRySGFuZGxlOiB7CiAgICAgICAgICAgICAg
ICBocmVmOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW0uZ2V0QXR0cmlidXRlKCAiaHJlZiIgKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICAgICB0eXBlOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAidHlwZSIgKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9LAoKICAgICAgICByZWxhdGl2ZTogewogICAgICAgICAgICAgICAgIisiOiBmdW5jdGlv
bihjaGVja1NldCwgcGFydCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1BhcnRTdHIg
PSB0eXBlb2YgcGFydCA9PT0gInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNUYWcgPSBpc1BhcnRTdHIgJiYgIXJOb25Xb3JkLnRlc3QoIHBhcnQgKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc1BhcnRTdHJOb3RUYWcgPSBpc1BhcnRTdHIgJiYgIWlz
VGFnOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1RhZyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAs
IGwgPSBjaGVja1NldC5sZW5ndGgsIGVsZW07IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IGNoZWNrU2V0W2ldKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVtLnByZXZp
b3VzU2libGluZykgJiYgZWxlbS5ub2RlVHlwZSAhPT0gMSApIHt9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTZXRbaV0gPSBpc1BhcnRTdHJOb3RUYWcgfHwg
ZWxlbSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBhcnQgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtIHx8IGZhbHNlIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9PT0gcGFy
dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNQYXJ0U3RyTm90VGFnICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5maWx0ZXIoIHBhcnQsIGNoZWNr
U2V0LCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0s
CgogICAgICAgICAgICAgICAgIj4iOiBmdW5jdGlvbiggY2hlY2tTZXQsIHBhcnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzUGFydFN0ciA9IHR5cGVvZiBwYXJ0ID09PSAic3RyaW5nIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ID0gY2hlY2tTZXQubGVuZ3RoOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1BhcnRT
dHIgJiYgIXJOb25Xb3JkLnRlc3QoIHBhcnQgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtID0gY2hlY2tTZXRbaV07CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtp
XSA9IHBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBwYXJ0ID8gcGFyZW50IDogZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gY2hlY2tTZXRbaV07
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtp
XSA9IGlzUGFydFN0ciA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlIDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUgPT09IHBhcnQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGlzUGFydFN0ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNp
enpsZS5maWx0ZXIoIHBhcnQsIGNoZWNrU2V0LCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
LAoKICAgICAgICAgICAgICAgICIiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwgaXNYTUwpewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZUNoZWNrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvbmVOYW1lID0gZG9uZSsrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrRm4gPSBkaXJDaGVjazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlQ2hlY2sgPSBwYXJ0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm4oICJwYXJl
bnROb2RlIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICk7CiAg
ICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICJ+IjogZnVuY3Rpb24oIGNoZWNrU2V0
LCBwYXJ0LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVDaGVjaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lTmFtZSA9IGRvbmUrKywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGlyQ2hlY2s7CgogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBwYXJ0ID09PSAic3RyaW5nIiAmJiAhck5vbldvcmQu
dGVzdCggcGFydCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBw
YXJ0LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUNo
ZWNrID0gcGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGly
Tm9kZUNoZWNrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICBjaGVja0ZuKCAicHJldmlvdXNTaWJsaW5nIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0
LCBub2RlQ2hlY2ssIGlzWE1MICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAg
ICAgZmluZDogewogICAgICAgICAgICAgICAgSUQ6IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCwg
aXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0
RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmICFpc1hNTCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbMV0p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8g
Y2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2
MwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtICYmIG0ucGFyZW50Tm9k
ZSA/IFttXSA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
LAoKICAgICAgICAgICAgICAgIE5BTUU6IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5TmFt
ZSAhPT0gInVuZGVmaW5lZCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHJldCA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIG1hdGNoWzFdICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHJlc3VsdHMubGVuZ3RoOyBp
IDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCByZXN1bHRzW2ldLmdldEF0dHJpYnV0ZSgibmFtZSIpID09PSBtYXRjaFsxXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIHJlc3Vs
dHNbaV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXQubGVuZ3RoID09PSAwID8gbnVsbCA6IHJldDsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBUQUc6IGZ1bmN0
aW9uKCBtYXRjaCwgY29udGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBl
b2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoIG1hdGNoWzFdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9LAogICAgICAgIHByZUZpbHRlcjogewogICAgICAgICAgICAgICAgQ0xB
U1M6IGZ1bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1M
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9ICIgIiArIG1hdGNoWzFdLnJlcGxh
Y2UoIHJCYWNrc2xhc2gsICIiICkgKyAiICI7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGlzWE1MICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGN1ckxvb3BbaV0pICE9IG51bGw7IGkrKyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdCBeIChlbGVtLmNsYXNzTmFtZSAmJiAo
IiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UoL1tcdFxuXHJdL2csICIgIikuaW5k
ZXhPZihtYXRjaCkgPj0gMCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goIGVsZW0gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGlucGxhY2UgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3BbaV0gPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0sCgogICAg
ICAgICAgICAgICAgSUQ6IGZ1bmN0aW9uKCBtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7CiAgICAgICAgICAg
ICAgICB9LAoKICAgICAgICAgICAgICAgIFRBRzogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV0ucmVwbGFjZSggckJhY2tz
bGFzaCwgIiIgKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAg
ICAgICBDSElMRDogZnVuY3Rpb24oIG1hdGNoICkgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG1hdGNoWzFdID09PSAibnRoIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFtYXRjaFsyXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gbWF0Y2hb
Ml0ucmVwbGFjZSgvXlwrfFxzKi9nLCAnJyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHBhcnNlIGVxdWF0aW9ucyBsaWtlICdldmVuJywgJ29kZCcsICc1JywgJzJuJywgJzNu
KzInLCAnNG4tMScsICctbis2JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0
ZXN0ID0gLygtPykoXGQqKSg/Om4oWytcLV0/XGQqKSk/Ly5leGVjKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPT09ICJldmVuIiAmJiAiMm4iIHx8IG1h
dGNoWzJdID09PSAib2RkIiAmJiAiMm4rMSIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICEvXEQvLnRlc3QoIG1hdGNoWzJdICkgJiYgIjBuKyIgKyBtYXRjaFsyXSB8
fCBtYXRjaFsyXSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0
ZSB0aGUgbnVtYmVycyAoZmlyc3QpbisobGFzdCkgaW5jbHVkaW5nIGlmIHRoZXkgYXJlIG5lZ2F0
aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSAodGVzdFsxXSAr
ICh0ZXN0WzJdIHx8IDEpKSAtIDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hbM10gPSB0ZXN0WzNdIC0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmICggbWF0Y2hbMl0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRvIG5vcm1hbCBj
YWNoaW5nIHN5c3RlbQogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFswXSA9IGRvbmUrKzsK
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgICAgICAgIH0s
CgogICAgICAgICAgICAgICAgQVRUUjogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNl
LCByZXN1bHQsIG5vdCwgaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1l
ID0gbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOwogICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNYTUwgJiYg
RXhwci5hdHRyTWFwW25hbWVdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoWzFdID0gRXhwci5hdHRyTWFwW25hbWVdOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgaWYgYW4gdW4tcXVvdGVkIHZhbHVlIHdh
cyB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzRdID0gKCBtYXRjaFs0XSB8fCBt
YXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG1hdGNoWzJdID09PSAifj0iICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoWzRdID0gIiAiICsgbWF0Y2hbNF0gKyAiICI7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKICAg
ICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgUFNFVURPOiBmdW5jdGlvbiggbWF0Y2gs
IGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90ICkgewogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hdGNoWzFdID09PSAibm90IiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb21wbGV4IGV4cHJlc3Npb24sIG9yIGEg
c2ltcGxlIG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBjaHVua2Vy
LmV4ZWMobWF0Y2hbM10pIHx8ICIiICkubGVuZ3RoID4gMSB8fCAvXlx3Ly50ZXN0KG1hdGNoWzNd
KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzNdID0g
U2l6emxlKG1hdGNoWzNdLCBudWxsLCBudWxsLCBjdXJMb29wKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciByZXQgPSBTaXp6bGUuZmlsdGVyKG1hdGNoWzNdLCBjdXJMb29wLCBpbnBsYWNl
LCB0cnVlIF4gbm90KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFpbnBsYWNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQucHVzaC5hcHBseSggcmVzdWx0LCByZXQgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggRXhwci5tYXRjaC5QT1MudGVz
dCggbWF0Y2hbMF0gKSB8fCBFeHByLm1hdGNoLkNISUxELnRlc3QoIG1hdGNoWzBdICkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgUE9T
OiBmdW5jdGlvbiggbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLnVuc2hp
ZnQoIHRydWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIAogICAgICAgIGZpbHRlcnM6IHsKICAgICAg
ICAgICAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgJiYgZWxlbS50eXBlICE9PSAiaGlk
ZGVuIjsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0
aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxl
ZCA9PT0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgY2hlY2tlZDog
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmNo
ZWNrZWQgPT09IHRydWU7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICBzZWxlY3RlZDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1
bHQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9w
ZXJseQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRl
eDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7CiAgICAg
ICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWVsZW0uZmlyc3RDaGlsZDsKICAgICAg
ICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCBlbGVtICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWVsZW0uZmlyc3RDaGlsZDsKICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2gg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIVNpenpsZSggbWF0Y2hbM10sIGVs
ZW0gKS5sZW5ndGg7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIGhlYWRlcjog
ZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoL2hcZC9p
KS50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAg
ICAgIHRleHQ6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIg
YXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCAidHlwZSIgKSwgdHlwZSA9IGVsZW0udHlwZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSUU2IGFuZCA3IHdpbGwgbWFwIGVsZW0udHlwZSB0byAn
dGV4dCcgZm9yIG5ldyBIVE1MNSB0eXBlcyAoc2VhcmNoLCBldGMpIAogICAgICAgICAgICAgICAg
ICAgICAgICAvLyB1c2UgZ2V0QXR0cmlidXRlIGluc3RlYWQgdG8gdGVzdCB0aGlzIGNhc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9
PT0gImlucHV0IiAmJiAidGV4dCIgPT09IHR5cGUgJiYgKCBhdHRyID09PSB0eXBlIHx8IGF0dHIg
PT09IG51bGwgKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgcmFkaW86IGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJyYWRpbyIgPT09IGVsZW0udHlwZTsK
ICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgY2hlY2tib3g6IGZ1bmN0aW9uKCBl
bGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJjaGVja2JveCIgPT09IGVsZW0udHlwZTsKICAgICAg
ICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgZmlsZTogZnVuY3Rpb24oIGVsZW0gKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkg
PT09ICJpbnB1dCIgJiYgImZpbGUiID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoK
ICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0
IiAmJiAicGFzc3dvcmQiID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAg
ICAgICAgICAgIHN1Ym1pdDogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIp
ICYmICJzdWJtaXQiID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAg
ICAgICAgIGltYWdlOiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAiaW1hZ2Ui
ID09PSBlbGVtLnR5cGU7CiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIHJlc2V0
OiBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBl
bGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgInJlc2V0IiA9PT0g
ZWxlbS50eXBlOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBidXR0b246IGZ1
bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5h
bWUgPT09ICJpbnB1dCIgJiYgImJ1dHRvbiIgPT09IGVsZW0udHlwZSB8fCBuYW1lID09PSAiYnV0
dG9uIjsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9u
KCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC9pbnB1dHxzZWxlY3R8
dGV4dGFyZWF8YnV0dG9uL2kpLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZWxlbS5vd25lckRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXRGaWx0ZXJzOiB7
CiAgICAgICAgICAgICAgICBmaXJzdDogZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpID09PSAwOwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAg
ICAgICAgICBsYXN0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gYXJyYXkubGVuZ3RoIC0gMTsKICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgZXZlbjogZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpICUgMiA9PT0gMDsKICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgb2RkOiBmdW5jdGlvbiggZWxlbSwgaSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgJSAyID09PSAxOwogICAgICAgICAgICAgICAgfSwKCiAg
ICAgICAgICAgICAgICBsdDogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaSA8IG1hdGNoWzNdIC0gMDsKICAgICAgICAgICAgICAgIH0s
CgogICAgICAgICAgICAgICAgZ3Q6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPiBtYXRjaFszXSAtIDA7CiAgICAgICAgICAgICAg
ICB9LAoKICAgICAgICAgICAgICAgIG50aDogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hbM10gLSAwID09PSBpOwogICAgICAg
ICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICBlcTogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNo
ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hbM10gLSAwID09PSBpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZmlsdGVyOiB7CiAgICAgICAgICAg
ICAgICBQU0VVRE86IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCwgaSwgYXJyYXkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWF0Y2hbMV0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsdGVyID0gRXhwci5maWx0ZXJzWyBuYW1lIF07CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGZpbHRlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmlsdGVyKCBlbGVtLCBpLCBtYXRjaCwgYXJyYXkgKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgPT09ICJjb250YWlucyIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5u
ZXJUZXh0IHx8IFNpenpsZS5nZXRUZXh0KFsgZWxlbSBdKSB8fCAiIikuaW5kZXhPZihtYXRjaFsz
XSkgPj0gMDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgPT09ICJu
b3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3QgPSBtYXRjaFsz
XTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBsID0g
bm90Lmxlbmd0aDsgaiA8IGw7IGorKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbm90W2pdID09PSBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2l6emxlLmVycm9yKCBuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0sCgogICAgICAgICAgICAgICAgQ0hJTEQ6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBtYXRjaFsxXSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoIHR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAib25seSI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZmlyc3QiOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9IG5v
ZGUucHJldmlvdXNTaWJsaW5nKSApICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZpcnN0IiApIHsgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAibGFzdCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5uZXh0U2libGluZykgKSAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVU
eXBlID09PSAxICkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIm50aCI6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3QgPSBtYXRjaFsyXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG1hdGNo
WzNdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3Qg
PT09IDEgJiYgbGFzdCA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb25lTmFtZSA9IG1hdGNo
WzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnQgPSBlbGVtLnBhcmVudE5vZGU7CiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHBhcmVudCAmJiAocGFyZW50LnNpemNhY2hlICE9PSBkb25lTmFt
ZSB8fCAhZWxlbS5ub2RlSW5kZXgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggbm9kZSA9IHBhcmVudC5maXJzdENoaWxkOyBub2RlOyBub2Rl
ID0gbm9kZS5uZXh0U2libGluZyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLm5vZGVJbmRleCA9ICsrY291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyZW50LnNpemNhY2hlID0gZG9uZU5hbWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBk
aWZmID0gZWxlbS5ub2RlSW5kZXggLSBsYXN0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZmlyc3QgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWZmID09PSAwOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIGRpZmYgJSBmaXJzdCA9PT0gMCAm
JiBkaWZmIC8gZmlyc3QgPj0gMCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAoKICAg
ICAgICAgICAgICAgIElEOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxICYmIGVsZW0uZ2V0QXR0cmlidXRl
KCJpZCIpID09PSBtYXRjaDsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgVEFH
OiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAobWF0Y2ggPT09ICIqIiAmJiBlbGVtLm5vZGVUeXBlID09PSAxKSB8fCBlbGVtLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgPT09IG1hdGNoOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgQ0xBU1M6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiICIgKyAoZWxlbS5jbGFzc05hbWUgfHwgZWxl
bS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpICsgIiAiKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5pbmRleE9mKCBtYXRjaCApID4gLTE7CiAgICAgICAgICAgICAgICB9LAoKICAgICAg
ICAgICAgICAgIEFUVFI6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG5hbWUgPSBtYXRjaFsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSA/CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSggZWxlbSApIDoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG5hbWUgXSAhPSBu
dWxsID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bVsgbmFtZSBdIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHJlc3VsdCArICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBtYXRjaFsyXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayA9
IG1hdGNoWzRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudWxs
ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAiIT0iIDoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAiPSIgPwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID09PSBjaGVjayA6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9PT0gIio9IiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUuaW5kZXhPZihjaGVjaykgPj0gMCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9PT0gIn49IiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIgIiAr
IHZhbHVlICsgIiAiKS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAhY2hlY2sgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ICYmIHJlc3VsdCAhPT0gZmFsc2UgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUgPT09ICIhPSIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSBj
aGVjayA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gIl49IiA/CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuaW5kZXhPZihjaGVjaykgPT09IDAg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT09ICIkPSIgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnN1YnN0cih2YWx1ZS5sZW5ndGggLSBjaGVj
ay5sZW5ndGgpID09PSBjaGVjayA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9PT0gInw9IiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPT09IGNo
ZWNrIHx8IHZhbHVlLnN1YnN0cigwLCBjaGVjay5sZW5ndGggKyAxKSA9PT0gY2hlY2sgKyAiLSIg
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICAgICAgICAgICAg
fSwKCiAgICAgICAgICAgICAgICBQT1M6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCwgaSwgYXJyYXkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWF0Y2hbMl0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gRXhwci5zZXRGaWx0ZXJzWyBuYW1lIF07
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpbHRlciApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyKCBlbGVtLCBpLCBtYXRjaCwgYXJyYXkgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfTsK
CnZhciBvcmlnUE9TID0gRXhwci5tYXRjaC5QT1MsCiAgICAgICAgZmVzY2FwZSA9IGZ1bmN0aW9u
KGFsbCwgbnVtKXsKICAgICAgICAgICAgICAgIHJldHVybiAiXFwiICsgKG51bSAtIDAgKyAxKTsK
ICAgICAgICB9OwoKZm9yICggdmFyIHR5cGUgaW4gRXhwci5tYXRjaCApIHsKICAgICAgICBFeHBy
Lm1hdGNoWyB0eXBlIF0gPSBuZXcgUmVnRXhwKCBFeHByLm1hdGNoWyB0eXBlIF0uc291cmNlICsg
KC8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSkgKTsKICAgICAgICBFeHByLmxlZnRN
YXRjaFsgdHlwZSBdID0gbmV3IFJlZ0V4cCggLyheKD86LnxccnxcbikqPykvLnNvdXJjZSArIEV4
cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UucmVwbGFjZSgvXFwoXGQrKS9nLCBmZXNjYXBlKSApOwp9
Cgp2YXIgbWFrZUFycmF5ID0gZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkgewogICAgICAgIGFy
cmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFycmF5LCAwICk7CgogICAgICAgIGlm
ICggcmVzdWx0cyApIHsKICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaC5hcHBseSggcmVzdWx0
cywgYXJyYXkgKTsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgICAgIH0KICAg
ICAgICAKICAgICAgICByZXR1cm4gYXJyYXk7Cn07CgovLyBQZXJmb3JtIGEgc2ltcGxlIGNoZWNr
IHRvIGRldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBjYXBhYmxlIG9mCi8vIGNvbnZlcnRpbmcg
YSBOb2RlTGlzdCB0byBhbiBhcnJheSB1c2luZyBidWlsdGluIG1ldGhvZHMuCi8vIEFsc28gdmVy
aWZpZXMgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgaG9sZHMgRE9NIG5vZGVzCi8vICh3aGljaCBp
cyBub3QgdGhlIGNhc2UgaW4gdGhlIEJsYWNrYmVycnkgYnJvd3NlcikKdHJ5IHsKICAgICAgICBB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNoaWxk
Tm9kZXMsIDAgKVswXS5ub2RlVHlwZTsKCi8vIFByb3ZpZGUgYSBmYWxsYmFjayBtZXRob2QgaWYg
aXQgZG9lcyBub3Qgd29yawp9IGNhdGNoKCBlICkgewogICAgICAgIG1ha2VBcnJheSA9IGZ1bmN0
aW9uKCBhcnJheSwgcmVzdWx0cyApIHsKICAgICAgICAgICAgICAgIHZhciBpID0gMCwKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gcmVzdWx0cyB8fCBbXTsKCiAgICAgICAgICAgICAgICBp
ZiAoIHRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAiW29iamVjdCBBcnJheV0iICkgewogICAgICAg
ICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSggcmV0LCBhcnJheSAp
OwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIGFycmF5Lmxlbmd0aCA9PT0gIm51bWJlciIgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggYXJyYXlbaV0g
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgYXJy
YXlbaV07IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dC5wdXNoKCBhcnJheVtpXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7CiAgICAgICAgfTsKfQoKdmFyIHNvcnRPcmRlciwgc2libGluZ0NoZWNrOwoK
aWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7
CiAgICAgICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CiAgICAgICAgICAgICAgICBp
ZiAoIGEgPT09IGIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIGlmICggIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29t
cGFyZURvY3VtZW50UG9zaXRpb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8gLTEgOiAxOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0x
IDogMTsKICAgICAgICB9OwoKfSBlbHNlIHsKICAgICAgICBzb3J0T3JkZXIgPSBmdW5jdGlvbigg
YSwgYiApIHsKICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgaWRlbnRpY2FsLCB3ZSBj
YW4gZXhpdCBlYXJseQogICAgICAgICAgICAgICAgaWYgKCBhID09PSBiICkgewogICAgICAgICAg
ICAgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKCiAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byB1c2luZyBzb3VyY2VJ
bmRleCAoaW4gSUUpIGlmIGl0J3MgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIGEuc291cmNlSW5kZXggJiYgYi5zb3VyY2VJbmRleCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4Owog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBhbCwgYmwsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGFwID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIGJwID0gW10sCiAg
ICAgICAgICAgICAgICAgICAgICAgIGF1cCA9IGEucGFyZW50Tm9kZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgYnVwID0gYi5wYXJlbnROb2RlLAogICAgICAgICAgICAgICAgICAgICAgICBjdXIg
PSBhdXA7CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncyAob3Ig
aWRlbnRpY2FsKSB3ZSBjYW4gZG8gYSBxdWljayBjaGVjawogICAgICAgICAgICAgICAgaWYgKCBh
dXAgPT09IGJ1cCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVj
ayggYSwgYiApOwoKICAgICAgICAgICAgICAgIC8vIElmIG5vIHBhcmVudHMgd2VyZSBmb3VuZCB0
aGVuIHRoZSBub2RlcyBhcmUgZGlzY29ubmVjdGVkCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCAhYXVwICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggIWJ1cCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkn
cmUgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHRyZWUgc28gd2UgbmVlZAogICAgICAgICAgICAgICAg
Ly8gdG8gYnVpbGQgdXAgYSBmdWxsIGxpc3Qgb2YgdGhlIHBhcmVudE5vZGVzIGZvciBjb21wYXJp
c29uCiAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgYXAudW5zaGlmdCggY3VyICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5w
YXJlbnROb2RlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGN1ciA9IGJ1cDsK
CiAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
YnAudW5zaGlmdCggY3VyICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJl
bnROb2RlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGFsID0gYXAubGVuZ3Ro
OwogICAgICAgICAgICAgICAgYmwgPSBicC5sZW5ndGg7CgogICAgICAgICAgICAgICAgLy8gU3Rh
cnQgd2Fsa2luZyBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3kKICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGFsICYmIGkgPCBibDsgaSsrICkgewogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGFwW2ldICE9PSBicFtpXSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIC8vIFdlIGVuZGVkIHNvbWVwbGFjZSB1cCB0aGUgdHJlZSBzbyBkbyBhIHNpYmxpbmcgY2hl
Y2sKICAgICAgICAgICAgICAgIHJldHVybiBpID09PSBhbCA/CiAgICAgICAgICAgICAgICAgICAg
ICAgIHNpYmxpbmdDaGVjayggYSwgYnBbaV0sIC0xICkgOgogICAgICAgICAgICAgICAgICAgICAg
ICBzaWJsaW5nQ2hlY2soIGFwW2ldLCBiLCAxICk7CiAgICAgICAgfTsKCiAgICAgICAgc2libGlu
Z0NoZWNrID0gZnVuY3Rpb24oIGEsIGIsIHJldCApIHsKICAgICAgICAgICAgICAgIGlmICggYSA9
PT0gYiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgY3VyID0gYS5uZXh0U2libGluZzsKCiAgICAgICAg
ICAgICAgICB3aGlsZSAoIGN1ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIg
PT09IGIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIu
bmV4dFNpYmxpbmc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIDE7
CiAgICAgICAgfTsKfQoKLy8gVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmVpdmluZyB0aGUgdGV4
dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKU2l6emxlLmdldFRleHQgPSBmdW5jdGlv
biggZWxlbXMgKSB7CiAgICAgICAgdmFyIHJldCA9ICIiLCBlbGVtOwoKICAgICAgICBmb3IgKCB2
YXIgaSA9IDA7IGVsZW1zW2ldOyBpKysgKSB7CiAgICAgICAgICAgICAgICBlbGVtID0gZWxlbXNb
aV07CgogICAgICAgICAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGZyb20gdGV4dCBub2RlcyBhbmQg
Q0RBVEEgbm9kZXMKICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBl
bGVtLm5vZGVUeXBlID09PSA0ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gZWxl
bS5ub2RlVmFsdWU7CgogICAgICAgICAgICAgICAgLy8gVHJhdmVyc2UgZXZlcnl0aGluZyBlbHNl
LCBleGNlcHQgY29tbWVudCBub2RlcwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5u
b2RlVHlwZSAhPT0gOCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IFNpenpsZS5n
ZXRUZXh0KCBlbGVtLmNoaWxkTm9kZXMgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cgog
ICAgICAgIHJldHVybiByZXQ7Cn07CgovLyBDaGVjayB0byBzZWUgaWYgdGhlIGJyb3dzZXIgcmV0
dXJucyBlbGVtZW50cyBieSBuYW1lIHdoZW4KLy8gcXVlcnlpbmcgYnkgZ2V0RWxlbWVudEJ5SWQg
KGFuZCBwcm92aWRlIGEgd29ya2Fyb3VuZCkKKGZ1bmN0aW9uKCl7CiAgICAgICAgLy8gV2UncmUg
Z29pbmcgdG8gaW5qZWN0IGEgZmFrZSBpbnB1dCBlbGVtZW50IHdpdGggYSBzcGVjaWZpZWQgbmFt
ZQogICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCiAgICAg
ICAgICAgICAgICBpZCA9ICJzY3JpcHQiICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwKICAgICAg
ICAgICAgICAgIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CgogICAgICAgIGZvcm0u
aW5uZXJIVE1MID0gIjxhIG5hbWU9JyIgKyBpZCArICInLz4iOwoKICAgICAgICAvLyBJbmplY3Qg
aXQgaW50byB0aGUgcm9vdCBlbGVtZW50LCBjaGVjayBpdHMgc3RhdHVzLCBhbmQgcmVtb3ZlIGl0
IHF1aWNrbHkKICAgICAgICByb290Lmluc2VydEJlZm9yZSggZm9ybSwgcm9vdC5maXJzdENoaWxk
ICk7CgogICAgICAgIC8vIFRoZSB3b3JrYXJvdW5kIGhhcyB0byBkbyBhZGRpdGlvbmFsIGNoZWNr
cyBhZnRlciBhIGdldEVsZW1lbnRCeUlkCiAgICAgICAgLy8gV2hpY2ggc2xvd3MgdGhpbmdzIGRv
d24gZm9yIG90aGVyIGJyb3dzZXJzIChoZW5jZSB0aGUgYnJhbmNoaW5nKQogICAgICAgIGlmICgg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGlkICkgKSB7CiAgICAgICAgICAgICAgICBFeHByLmZp
bmQuSUQgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5kZWZp
bmVkIiAmJiAhaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0g
PSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbS5pZCA9PT0gbWF0Y2hbMV0gfHwgdHlwZW9mIG0uZ2V0QXR0cmlidXRlTm9kZSAhPT0g
InVuZGVmaW5lZCIgJiYgbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZSA9PT0gbWF0
Y2hbMV0gPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
bV0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRl
ZmluZWQgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW107CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAg
RXhwci5maWx0ZXIuSUQgPSBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gInVu
ZGVmaW5lZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgbm9kZSAmJiBub2RlLm5vZGVW
YWx1ZSA9PT0gbWF0Y2g7CiAgICAgICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgcm9v
dC5yZW1vdmVDaGlsZCggZm9ybSApOwoKICAgICAgICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQog
ICAgICAgIHJvb3QgPSBmb3JtID0gbnVsbDsKfSkoKTsKCihmdW5jdGlvbigpewogICAgICAgIC8v
IENoZWNrIHRvIHNlZSBpZiB0aGUgYnJvd3NlciByZXR1cm5zIG9ubHkgZWxlbWVudHMKICAgICAg
ICAvLyB3aGVuIGRvaW5nIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikKCiAgICAgICAgLy8gQ3Jl
YXRlIGEgZmFrZSBlbGVtZW50CiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwogICAgICAgIGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVu
dCgiIikgKTsKCiAgICAgICAgLy8gTWFrZSBzdXJlIG5vIGNvbW1lbnRzIGFyZSBmb3VuZAogICAg
ICAgIGlmICggZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoID4gMCApIHsKICAg
ICAgICAgICAgICAgIEV4cHIuZmluZC5UQUcgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZSggbWF0Y2hbMV0gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRl
ciBvdXQgcG9zc2libGUgY29tbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRj
aFsxXSA9PT0gIioiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXAg
PSBbXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBy
ZXN1bHRzW2ldOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHJlc3VsdHNbaV0ubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNoKCByZXN1bHRzW2ldICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0g
dG1wOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAvLyBD
aGVjayB0byBzZWUgaWYgYW4gYXR0cmlidXRlIHJldHVybnMgbm9ybWFsaXplZCBocmVmIGF0dHJp
YnV0ZXMKICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iOwoKICAgICAg
ICBpZiAoIGRpdi5maXJzdENoaWxkICYmIHR5cGVvZiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1
dGUgIT09ICJ1bmRlZmluZWQiICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJzdENo
aWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpICE9PSAiIyIgKSB7CgogICAgICAgICAgICAgICAgRXhw
ci5hdHRySGFuZGxlLmhyZWYgPSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAiaHJlZiIsIDIgKTsKICAgICAgICAgICAg
ICAgIH07CiAgICAgICAgfQoKICAgICAgICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQogICAgICAg
IGRpdiA9IG51bGw7Cn0pKCk7CgppZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7CiAg
ICAgICAgKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB2YXIgb2xkU2l6emxlID0gU2l6emxl
LAogICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKSwKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAiX19zaXp6bGVfXyI7CgogICAgICAg
ICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7CgogICAgICAg
ICAgICAgICAgLy8gU2FmYXJpIGNhbid0IGhhbmRsZSB1cHBlcmNhc2Ugb3IgdW5pY29kZSBjaGFy
YWN0ZXJzIHdoZW4KICAgICAgICAgICAgICAgIC8vIGluIHF1aXJrcyBtb2RlLgogICAgICAgICAg
ICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCAmJiBkaXYucXVlcnlTZWxlY3RvckFsbCgi
LlRFU1QiKS5sZW5ndGggPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIFNpenpsZSA9IGZ1bmN0
aW9uKCBxdWVyeSwgY29udGV4dCwgZXh0cmEsIHNlZWQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gT25seSB1c2UgcXVlcnlTZWxlY3RvckFsbCBvbiBub24tWE1MIGRvY3VtZW50cwogICAg
ICAgICAgICAgICAgICAgICAgICAvLyAoSUQgc2VsZWN0b3JzIGRvbid0IHdvcmsgaW4gbm9uLUhU
TUwgZG9jdW1lbnRzKQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWVkICYmICFTaXp6
bGUuaXNYTUwoY29udGV4dCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U2VlIGlmIHdlIGZpbmQgYSBzZWxlY3RvciB0byBzcGVlZCB1cAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1d
KyQpLy5leGVjKCBxdWVyeSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2ggJiYgKGNvbnRleHQubm9kZVR5
cGUgPT09IDEgfHwgY29udGV4dC5ub2RlVHlwZSA9PT0gOSkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCJUQUciKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJh
eSggY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggcXVlcnkgKSwgZXh0cmEgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiLkNMQVNTIikKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGNoWzJdICYmIEV4
cHIuZmluZC5DTEFTUyAmJiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJy
YXkoIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbWF0Y2hbMl0gKSwgZXh0cmEgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNp
enpsZSgiYm9keSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGUgYm9keSBlbGVtZW50IG9ubHkgZXhpc3RzIG9uY2UsIG9wdGltaXplIGZpbmRpbmcgaXQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcXVlcnkgPT09ICJib2R5
IiAmJiBjb250ZXh0LmJvZHkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoIFsgY29udGV4dC5ib2R5IF0sIGV4dHJhICk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiI0lE
IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1h
dGNoICYmIG1hdGNoWzNdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzNdICk7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVj
ayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFy
ZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFIGFuZCBPcGVyYSByZXR1cm4gaXRlbXMKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBu
YW1lIGluc3RlYWQgb2YgSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgPT09IG1hdGNoWzNdICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VBcnJheSggWyBlbGVtIF0sIGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoIFtdLCBl
eHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChxdWVyeSks
IGV4dHJhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNo
KHFzYUVycm9yKSB7fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBxU0Egd29y
a3Mgc3RyYW5nZWx5IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFu
IGV4dHJhIElEIG9uIHRoZSByb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YW5kIHdvcmtpbmcgdXAgZnJvbSB0aGVyZSAoVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRo
ZSB0ZWNobmlxdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgOCBkb2Vz
bid0IHdvcmsgb24gb2JqZWN0IGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG9sZENvbnRleHQgPSBjb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQgPSBjb250ZXh0LmdldEF0dHJpYnV0
ZSggImlkIiApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuaWQgPSBvbGQgfHwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc1BhcmVudCA9IGNvbnRleHQucGFyZW50Tm9kZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3Rv
ciA9IC9eXHMqWyt+XS8udGVzdCggcXVlcnkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFvbGQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKCAiaWQiLCBuaWQgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pZCA9IG5pZC5yZXBsYWNlKCAv
Jy9nLCAiXFwkJiIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVsYXRpdmVIaWVy
YXJjaHlTZWxlY3RvciAmJiBoYXNQYXJlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciB8fCBoYXNQ
YXJlbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCAiW2lk
PSciICsgbmlkICsgIiddICIgKyBxdWVyeSApLCBleHRyYSApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaChwc2V1ZG9FcnJvcikgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb2xkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZENvbnRleHQucmVtb3ZlQXR0
cmlidXRlKCAiaWQiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkU2l6emxlKHF1
ZXJ5LCBjb250ZXh0LCBleHRyYSwgc2VlZCk7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBwcm9wIGluIG9sZFNpenpsZSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgU2l6emxlWyBwcm9wIF0gPSBvbGRTaXp6bGVbIHByb3AgXTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQogICAgICAgICAgICAg
ICAgZGl2ID0gbnVsbDsKICAgICAgICB9KSgpOwp9CgooZnVuY3Rpb24oKXsKICAgICAgICB2YXIg
aHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKICAgICAgICAgICAgICAgIG1hdGNoZXMg
PSBodG1sLm1hdGNoZXNTZWxlY3RvciB8fCBodG1sLm1vek1hdGNoZXNTZWxlY3RvciB8fCBodG1s
LndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBodG1sLm1zTWF0Y2hlc1NlbGVjdG9yOwoKICAgICAg
ICBpZiAoIG1hdGNoZXMgKSB7CiAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgaXQn
cyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3IKICAgICAgICAgICAgICAgIC8vIG9uIGEg
ZGlzY29ubmVjdGVkIG5vZGUgKElFIDkgZmFpbHMgdGhpcykKICAgICAgICAgICAgICAgIHZhciBk
aXNjb25uZWN0ZWRNYXRjaCA9ICFtYXRjaGVzLmNhbGwoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ICJkaXYiICksICJkaXYiICksCiAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkb1dvcmtzID0g
ZmFsc2U7CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCiAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZXMuY2FsbCggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAi
W3Rlc3QhPScnXTpzaXp6bGUiICk7CiAgICAgICAgCiAgICAgICAgICAgICAgICB9IGNhdGNoKCBw
c2V1ZG9FcnJvciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvV29ya3MgPSB0cnVl
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIFNpenpsZS5tYXRjaGVzU2VsZWN0
b3IgPSBmdW5jdGlvbiggbm9kZSwgZXhwciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCiAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2cs
ICI9JyQxJ10iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIVNpenpsZS5pc1hNTCgg
bm9kZSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwc2V1ZG9Xb3JrcyB8fCAhRXhw
ci5tYXRjaC5QU0VVRE8udGVzdCggZXhwciApICYmICEvIT0vLnRlc3QoIGV4cHIgKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IG1h
dGNoZXMuY2FsbCggbm9kZSwgZXhwciApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNl
IG9uIGRpc2Nvbm5lY3RlZCBub2RlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJldCB8fCAhZGlzY29ubmVjdGVkTWF0Y2ggfHwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBmcmFnbWVudCBpbiBJRSA5LCBzbyBjaGVjayBmb3IgdGhhdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS5kb2N1bWVudCAmJiBub2RlLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBjYXRjaChlKSB7fQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2l6emxlKGV4cHIsIG51bGwsIG51bGwsIFtub2Rl
XSkubGVuZ3RoID4gMDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQp9KSgpOwoKKGZ1bmN0
aW9uKCl7CiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoK
ICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBj
bGFzcz0ndGVzdCc+PC9kaXY+IjsKCiAgICAgICAgLy8gT3BlcmEgY2FuJ3QgZmluZCBhIHNlY29u
ZCBjbGFzc25hbWUgKGluIDkuNikKICAgICAgICAvLyBBbHNvLCBtYWtlIHN1cmUgdGhhdCBnZXRF
bGVtZW50c0J5Q2xhc3NOYW1lIGFjdHVhbGx5IGV4aXN0cwogICAgICAgIGlmICggIWRpdi5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lIHx8IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVu
Z3RoID09PSAwICkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAg
Ly8gU2FmYXJpIGNhY2hlcyBjbGFzcyBhdHRyaWJ1dGVzLCBkb2Vzbid0IGNhdGNoIGNoYW5nZXMg
KGluIDMuMikKICAgICAgICBkaXYubGFzdENoaWxkLmNsYXNzTmFtZSA9ICJlIjsKCiAgICAgICAg
aWYgKCBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMSApIHsKICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgRXhwci5vcmRl
ci5zcGxpY2UoMSwgMCwgIkNMQVNTIik7CiAgICAgICAgRXhwci5maW5kLkNMQVNTID0gZnVuY3Rp
b24oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApIHsKICAgICAgICAgICAgICAgIGlmICggdHlwZW9m
IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1M
ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKG1hdGNoWzFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAg
ICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQogICAgICAgIGRpdiA9IG51bGw7Cn0pKCk7CgpmdW5j
dGlvbiBkaXJOb2RlQ2hlY2soIGRpciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVj
aywgaXNYTUwgKSB7CiAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3Ro
OyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBjaGVja1NldFtpXTsK
CiAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBtYXRjaCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1bZGly
XTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc2l6Y2FjaGUgPT09IGRvbmVOYW1lICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjaGVja1NldFtl
bGVtLnNpenNldF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNYTUwgKXsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6Y2FjaGUgPSBkb25lTmFt
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0g
aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGVsZW07CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0gPSBlbGVtW2Rpcl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNoZWNrU2V0W2ldID0gbWF0Y2g7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fQp9CgpmdW5jdGlvbiBkaXJDaGVjayggZGlyLCBjdXIsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9k
ZUNoZWNrLCBpc1hNTCApIHsKICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5s
ZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGNoZWNrU2V0
W2ldOwoKICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtID0gZWxlbVtkaXJdOwoKICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bS5zaXpjYWNoZSA9PT0gZG9uZU5hbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaCA9IGNoZWNrU2V0W2VsZW0uc2l6c2V0XTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhaXNYTUwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uc2l6Y2FjaGUgPSBkb25lTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpzZXQgPSBpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIGN1ciAhPT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSA9PT0gY3VyICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIFNpenpsZS5maWx0ZXIoIGN1ciwgW2VsZW1dICkubGVuZ3RoID4gMCApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBlbGVtOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVt
W2Rpcl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IGNoZWNrU2V0W2ldID0gbWF0Y2g7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9CgppZiAo
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyApIHsKICAgICAgICBTaXp6bGUuY29u
dGFpbnMgPSBmdW5jdGlvbiggYSwgYiApIHsKICAgICAgICAgICAgICAgIHJldHVybiBhICE9PSBi
ICYmIChhLmNvbnRhaW5zID8gYS5jb250YWlucyhiKSA6IHRydWUpOwogICAgICAgIH07Cgp9IGVs
c2UgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24g
KSB7CiAgICAgICAgU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDE2KTsKICAg
ICAgICB9OwoKfSBlbHNlIHsKICAgICAgICBTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Owp9CgpTaXp6bGUuaXNYTUwg
PSBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZp
ZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0CiAgICAgICAgLy8gKHN1Y2gg
YXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpIAogICAgICAgIHZhciBkb2N1bWVudEVs
ZW1lbnQgPSAoZWxlbSA/IGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtIDogMCkuZG9jdW1lbnRF
bGVtZW50OwoKICAgICAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50
Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKfTsKCnZhciBwb3NQcm9jZXNzID0gZnVuY3Rp
b24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewogICAgICAgIHZhciBtYXRjaCwKICAgICAgICAgICAg
ICAgIHRtcFNldCA9IFtdLAogICAgICAgICAgICAgICAgbGF0ZXIgPSAiIiwKICAgICAgICAgICAg
ICAgIHJvb3QgPSBjb250ZXh0Lm5vZGVUeXBlID8gW2NvbnRleHRdIDogY29udGV4dDsKCiAgICAg
ICAgLy8gUG9zaXRpb24gc2VsZWN0b3JzIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgZmlsdGVyCiAg
ICAgICAgLy8gQW5kIHNvIG11c3QgOm5vdChwb3NpdGlvbmFsKSBzbyB3ZSBtb3ZlIGFsbCBQU0VV
RE9zIHRvIHRoZSBlbmQKICAgICAgICB3aGlsZSAoIChtYXRjaCA9IEV4cHIubWF0Y2guUFNFVURP
LmV4ZWMoIHNlbGVjdG9yICkpICkgewogICAgICAgICAgICAgICAgbGF0ZXIgKz0gbWF0Y2hbMF07
CiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnJlcGxhY2UoIEV4cHIubWF0Y2gu
UFNFVURPLCAiIiApOwogICAgICAgIH0KCiAgICAgICAgc2VsZWN0b3IgPSBFeHByLnJlbGF0aXZl
W3NlbGVjdG9yXSA/IHNlbGVjdG9yICsgIioiIDogc2VsZWN0b3I7CgogICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IHJvb3QubGVuZ3RoOyBpIDwgbDsgaSsrICkgewogICAgICAgICAgICAgICAg
U2l6emxlKCBzZWxlY3Rvciwgcm9vdFtpXSwgdG1wU2V0ICk7CiAgICAgICAgfQoKICAgICAgICBy
ZXR1cm4gU2l6emxlLmZpbHRlciggbGF0ZXIsIHRtcFNldCApOwp9OwoKLy8gRVhQT1NFCmpRdWVy
eS5maW5kID0gU2l6emxlOwpqUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7CmpRdWVyeS5l
eHByWyI6Il0gPSBqUXVlcnkuZXhwci5maWx0ZXJzOwpqUXVlcnkudW5pcXVlID0gU2l6emxlLnVu
aXF1ZVNvcnQ7CmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7CmpRdWVyeS5pc1hNTERvYyA9
IFNpenpsZS5pc1hNTDsKalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOwoKCn0pKCk7
CgoKdmFyIHJ1bnRpbCA9IC9VbnRpbCQvLAogICAgICAgIHJwYXJlbnRzcHJldiA9IC9eKD86cGFy
ZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLAogICAgICAgIC8vIE5vdGU6IFRoaXMgUmVnRXhwIHNo
b3VsZCBiZSBpbXByb3ZlZCwgb3IgbGlrZWx5IHB1bGxlZCBmcm9tIFNpenpsZQogICAgICAgIHJt
dWx0aXNlbGVjdG9yID0gLywvLAogICAgICAgIGlzU2ltcGxlID0gL14uW146I1xbXC4sXSokLywK
ICAgICAgICBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwKICAgICAgICBQT1MgPSBqUXVl
cnkuZXhwci5tYXRjaC5QT1MsCiAgICAgICAgLy8gbWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1
Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXQKICAgICAgICBn
dWFyYW50ZWVkVW5pcXVlID0gewogICAgICAgICAgICAgICAgY2hpbGRyZW46IHRydWUsCiAgICAg
ICAgICAgICAgICBjb250ZW50czogdHJ1ZSwKICAgICAgICAgICAgICAgIG5leHQ6IHRydWUsCiAg
ICAgICAgICAgICAgICBwcmV2OiB0cnVlCiAgICAgICAgfTsKCmpRdWVyeS5mbi5leHRlbmQoewog
ICAgICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIHZhciBz
ZWxmID0gdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgaSwgbDsKCiAgICAgICAgICAgICAg
ICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gc2VsZi5sZW5ndGg7
IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgdmFyIHJldCA9IHRoaXMucHVzaFN0YWNrKCAiIiwgImZpbmQiLCBzZWxl
Y3RvciApLAogICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIG4sIHI7CgogICAgICAgICAg
ICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcmV0Lmxlbmd0aDsKICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCB0aGlzW2ldLCByZXQgKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdHMgYXJlIHVuaXF1ZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIG4gPSBsZW5ndGg7IG4gPCByZXQubGVuZ3RoOyBuKysg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCByID0gMDsg
ciA8IGxlbmd0aDsgcisrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHJldFtyXSA9PT0gcmV0W25dICkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zcGxpY2Uobi0tLCAxKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfSwKCiAgICAgICAgaGFz
OiBmdW5jdGlvbiggdGFyZ2V0ICkgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldHMgPSBqUXVl
cnkoIHRhcmdldCApOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0YXJnZXRz
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1tpXSApICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICB9LAoKICAgICAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9y
LCBmYWxzZSksICJub3QiLCBzZWxlY3Rvcik7CiAgICAgICAgfSwKCiAgICAgICAgZmlsdGVyOiBm
dW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3Rh
Y2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciwgdHJ1ZSksICJmaWx0ZXIiLCBzZWxlY3RvciApOwog
ICAgICAgIH0sCgogICAgICAgIGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gISFzZWxlY3RvciAmJiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIg
PwogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgdGhpcyAp
Lmxlbmd0aCA+IDAgOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciggc2VsZWN0
b3IgKS5sZW5ndGggPiAwICk7CiAgICAgICAgfSwKCiAgICAgICAgY2xvc2VzdDogZnVuY3Rpb24o
IHNlbGVjdG9ycywgY29udGV4dCApIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXSwgaSwg
bCwgY3VyID0gdGhpc1swXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gQXJy
YXkKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHNlbGVjdG9ycyApICkgewog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2gsIHNlbGVjdG9yLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSB7fSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZXZlbCA9IDE7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ciAmJiBz
ZWxlY3RvcnMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IGkgPSAwLCBsID0gc2VsZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW1hdGNoZXNbIHNlbGVj
dG9yIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoZXNbIHNlbGVjdG9yIF0gPSBQT1MudGVzdCggc2VsZWN0b3IgKSA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxl
Y3RvciwgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciAmJiBjdXIu
b3duZXJEb2N1bWVudCAmJiBjdXIgIT09IGNvbnRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBzZWxlY3RvciBpbiBtYXRjaGVzICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNb
IHNlbGVjdG9yIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG1hdGNoLmpxdWVyeSA/IG1hdGNoLmluZGV4KCBjdXIgKSA+IC0xIDogalF1ZXJ5
KCBjdXIgKS5pcyggbWF0Y2ggKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCh7IHNlbGVjdG9yOiBzZWxlY3RvciwgZWxl
bTogY3VyLCBsZXZlbDogbGV2ZWwgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFy
ZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKys7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIC8vIFN0cmluZwogICAgICAgICAgICAgICAgdmFyIHBvcyA9IFBP
Uy50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiA/CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQg
fHwgdGhpcy5jb250ZXh0ICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7Cgog
ICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gdGhpc1tpXTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlICggY3VyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcG9zID8gcG9zLmluZGV4KGN1cikgPiAtMSA6IGpRdWVyeS5maW5kLm1hdGNoZXNTZWxl
Y3RvcihjdXIsIHNlbGVjdG9ycykgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXQucHVzaCggY3VyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnRO
b2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY3VyIHx8
ICFjdXIub3duZXJEb2N1bWVudCB8fCBjdXIgPT09IGNvbnRleHQgfHwgY3VyLm5vZGVUeXBlID09
PSAxMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0ID0gcmV0Lmxlbmd0aCA+IDEgPyBqUXVl
cnkudW5pcXVlKCByZXQgKSA6IHJldDsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNo
U3RhY2soIHJldCwgImNsb3Nlc3QiLCBzZWxlY3RvcnMgKTsKICAgICAgICB9LAoKICAgICAgICAv
LyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluCiAgICAgICAgLy8g
dGhlIG1hdGNoZWQgc2V0IG9mIGVsZW1lbnRzCiAgICAgICAgaW5kZXg6IGZ1bmN0aW9uKCBlbGVt
ICkgewoKICAgICAgICAgICAgICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFy
ZW50CiAgICAgICAgICAgICAgICBpZiAoICFlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApID8gdGhpcy5wcmV2QWxs
KCkubGVuZ3RoIDogLTE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gaW5k
ZXggaW4gc2VsZWN0b3IKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJp
bmciICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIHRo
aXNbMF0sIGpRdWVyeSggZWxlbSApICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50CiAgICAgICAg
ICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNl
ZAogICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmpxdWVyeSA/IGVsZW1bMF0gOiBlbGVtLCB0
aGlzICk7CiAgICAgICAgfSwKCiAgICAgICAgYWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRl
eHQgKSB7CiAgICAgICAgICAgICAgICB2YXIgc2V0ID0gdHlwZW9mIHNlbGVjdG9yID09PSAic3Ry
aW5nIiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3Rvciwg
Y29udGV4dCApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFrZUFy
cmF5KCBzZWxlY3RvciAmJiBzZWxlY3Rvci5ub2RlVHlwZSA/IFsgc2VsZWN0b3IgXSA6IHNlbGVj
dG9yICksCiAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA9IGpRdWVyeS5tZXJnZSggdGhpcy5n
ZXQoKSwgc2V0ICk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBpc0Rp
c2Nvbm5lY3RlZCggc2V0WzBdICkgfHwgaXNEaXNjb25uZWN0ZWQoIGFsbFswXSApID8KICAgICAg
ICAgICAgICAgICAgICAgICAgYWxsIDoKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnVu
aXF1ZSggYWxsICkgKTsKICAgICAgICB9LAoKICAgICAgICBhbmRTZWxmOiBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZCggdGhpcy5wcmV2T2JqZWN0ICk7CiAgICAg
ICAgfQp9KTsKCi8vIEEgcGFpbmZ1bGx5IHNpbXBsZSBjaGVjayB0byBzZWUgaWYgYW4gZWxlbWVu
dCBpcyBkaXNjb25uZWN0ZWQKLy8gZnJvbSBhIGRvY3VtZW50IChzaG91bGQgYmUgaW1wcm92ZWQs
IHdoZXJlIGZlYXNpYmxlKS4KZnVuY3Rpb24gaXNEaXNjb25uZWN0ZWQoIG5vZGUgKSB7CiAgICAg
ICAgcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwgbm9kZS5wYXJlbnROb2RlLm5v
ZGVUeXBlID09PSAxMTsKfQoKalF1ZXJ5LmVhY2goewogICAgICAgIHBhcmVudDogZnVuY3Rpb24o
IGVsZW0gKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwog
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8g
cGFyZW50IDogbnVsbDsKICAgICAgICB9LAogICAgICAgIHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVt
ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2Rl
IiApOwogICAgICAgIH0sCiAgICAgICAgcGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwg
dW50aWwgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVu
dE5vZGUiLCB1bnRpbCApOwogICAgICAgIH0sCiAgICAgICAgbmV4dDogZnVuY3Rpb24oIGVsZW0g
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm50aCggZWxlbSwgMiwgIm5leHRTaWJs
aW5nIiApOwogICAgICAgIH0sCiAgICAgICAgcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm50aCggZWxlbSwgMiwgInByZXZpb3VzU2libGluZyIg
KTsKICAgICAgICB9LAogICAgICAgIG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKICAgICAg
ICB9LAogICAgICAgIHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CiAgICAgICAgfSwK
ICAgICAgICBuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRpbCApOwog
ICAgICAgIH0sCiAgICAgICAgcHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGlu
ZyIsIHVudGlsICk7CiAgICAgICAgfSwKICAgICAgICBzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0g
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0ucGFyZW50Tm9k
ZS5maXJzdENoaWxkLCBlbGVtICk7CiAgICAgICAgfSwKICAgICAgICBjaGlsZHJlbjogZnVuY3Rp
b24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0u
Zmlyc3RDaGlsZCApOwogICAgICAgIH0sCiAgICAgICAgY29udGVudHM6IGZ1bmN0aW9uKCBlbGVt
ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlmcmFt
ZSIgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY29udGVudERvY3VtZW50IHx8IGVs
ZW0uY29udGVudFdpbmRvdy5kb2N1bWVudCA6CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5tYWtlQXJyYXkoIGVsZW0uY2hpbGROb2RlcyApOwogICAgICAgIH0KfSwgZnVuY3Rpb24oIG5h
bWUsIGZuICkgewogICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBz
ZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBqUXVlcnkubWFwKCB0aGlzLCBm
biwgdW50aWwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHZhcmlhYmxlICdhcmdz
JyB3YXMgaW50cm9kdWNlZCBpbgogICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dp
dGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9jb21taXQvNTJhMDIzOAogICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBDaHJvbWUgMTAgKERldikgYW5kIHNob3Vs
ZCBiZSByZW1vdmVkIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZC4KICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTA1MAog
ICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpOwoKICAg
ICAgICAgICAgICAgIGlmICggIXJ1bnRpbC50ZXN0KCBuYW1lICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgaWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewog
ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0
ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5sZW5ndGgg
PiAxICYmICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6
IHJldDsKCiAgICAgICAgICAgICAgICBpZiAoICh0aGlzLmxlbmd0aCA+IDEgfHwgcm11bHRpc2Vs
ZWN0b3IudGVzdCggc2VsZWN0b3IgKSkgJiYgcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0LnJldmVyc2UoKTsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwg
YXJncy5qb2luKCIsIikgKTsKICAgICAgICB9Owp9KTsKCmpRdWVyeS5leHRlbmQoewogICAgICAg
IGZpbHRlcjogZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7CiAgICAgICAgICAgICAgICBp
ZiAoIG5vdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9ICI6bm90KCIgKyBleHBy
ICsgIikiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBlbGVtcy5s
ZW5ndGggPT09IDEgPwogICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVz
U2VsZWN0b3IoZWxlbXNbMF0sIGV4cHIpID8gWyBlbGVtc1swXSBdIDogW10gOgogICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzKGV4cHIsIGVsZW1zKTsKICAgICAgICB9
LAoKICAgICAgICBkaXI6IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkgewogICAgICAgICAg
ICAgICAgdmFyIG1hdGNoZWQgPSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gZWxl
bVsgZGlyIF07CgogICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm5vZGVUeXBlICE9
PSA5ICYmICh1bnRpbCA9PT0gdW5kZWZpbmVkIHx8IGN1ci5ub2RlVHlwZSAhPT0gMSB8fCAhalF1
ZXJ5KCBjdXIgKS5pcyggdW50aWwgKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y3VyLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZWQucHVzaCggY3VyICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgY3VyID0gY3VyW2Rpcl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hlZDsKICAgICAgICB9LAoKICAgICAgICBudGg6IGZ1bmN0aW9uKCBj
dXIsIHJlc3VsdCwgZGlyLCBlbGVtICkgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0
IHx8IDE7CiAgICAgICAgICAgICAgICB2YXIgbnVtID0gMDsKCiAgICAgICAgICAgICAgICBmb3Ig
KCA7IGN1cjsgY3VyID0gY3VyW2Rpcl0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y3VyLm5vZGVUeXBlID09PSAxICYmICsrbnVtID09PSByZXN1bHQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY3VyOwogICAgICAgIH0sCgogICAg
ICAgIHNpYmxpbmc6IGZ1bmN0aW9uKCBuLCBlbGVtICkgewogICAgICAgICAgICAgICAgdmFyIHIg
PSBbXTsKCiAgICAgICAgICAgICAgICBmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxl
bSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnB1c2goIG4gKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJl
dHVybiByOwogICAgICAgIH0KfSk7CgovLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlv
bmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdApmdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFs
aWZpZXIsIGtlZXAgKSB7CgogICAgICAgIC8vIENhbid0IHBhc3MgbnVsbCBvciB1bmRlZmluZWQg
dG8gaW5kZXhPZiBpbiBGaXJlZm94IDQKICAgICAgICAvLyBTZXQgdG8gMCB0byBza2lwIHN0cmlu
ZyBjaGVjawogICAgICAgIHF1YWxpZmllciA9IHF1YWxpZmllciB8fCAwOwoKICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciByZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVt
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWwgPT09IGtlZXA7CiAgICAg
ICAgICAgICAgICB9KTsKCiAgICAgICAgfSBlbHNlIGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbigg
ZWxlbSwgaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtID09PSBxdWFs
aWZpZXIpID09PSBrZWVwOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgIH0gZWxzZSBpZiAo
IHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAgdmFyIGZp
bHRlcmVkID0galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKICAgICAgICAgICAg
ICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICggaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZmlsdGVyKHF1YWxpZmll
ciwgZmlsdGVyZWQsICFrZWVwKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZmlsdGVy
ZWQgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBqUXVlcnku
Z3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4gKGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwKSA9PT0ga2VlcDsKICAg
ICAgICB9KTsKfQoKCgoKdmFyIHJpbmxpbmVqUXVlcnkgPSAvIGpRdWVyeVxkKz0iKD86XGQrfG51
bGwpIi9nLAogICAgICAgIHJsZWFkaW5nV2hpdGVzcGFjZSA9IC9eXHMrLywKICAgICAgICByeGh0
bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFy
YW0pKChbXHc6XSspW14+XSopXC8+L2lnLAogICAgICAgIHJ0YWdOYW1lID0gLzwoW1x3Ol0rKS8s
CiAgICAgICAgcnRib2R5ID0gLzx0Ym9keS9pLAogICAgICAgIHJodG1sID0gLzx8JiM/XHcrOy8s
CiAgICAgICAgcm5vY2FjaGUgPSAvPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxl
KS9pLAogICAgICAgIC8vIGNoZWNrZWQ9ImNoZWNrZWQiIG9yIGNoZWNrZWQKICAgICAgICByY2hl
Y2tlZCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAogICAgICAgIHJzY3Jp
cHRUeXBlID0gL1wvKGphdmF8ZWNtYSlzY3JpcHQvaSwKICAgICAgICByY2xlYW5TY3JpcHQgPSAv
XlxzKjwhKD86XFtDREFUQVxbfFwtXC0pLywKICAgICAgICB3cmFwTWFwID0gewogICAgICAgICAg
ICAgICAgb3B0aW9uOiBbIDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2Vs
ZWN0PiIgXSwKICAgICAgICAgICAgICAgIGxlZ2VuZDogWyAxLCAiPGZpZWxkc2V0PiIsICI8L2Zp
ZWxkc2V0PiIgXSwKICAgICAgICAgICAgICAgIHRoZWFkOiBbIDEsICI8dGFibGU+IiwgIjwvdGFi
bGU+IiBdLAogICAgICAgICAgICAgICAgdHI6IFsgMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJv
ZHk+PC90YWJsZT4iIF0sCiAgICAgICAgICAgICAgICB0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48
dHI+IiwgIjwvdHI+PC90Ym9keT48L3RhYmxlPiIgXSwKICAgICAgICAgICAgICAgIGNvbDogWyAy
LCAiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxl
PiIgXSwKICAgICAgICAgICAgICAgIGFyZWE6IFsgMSwgIjxtYXA+IiwgIjwvbWFwPiIgXSwKICAg
ICAgICAgICAgICAgIF9kZWZhdWx0OiBbIDAsICIiLCAiIiBdCiAgICAgICAgfTsKCndyYXBNYXAu
b3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjsKd3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3Qg
PSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDsKd3Jh
cE1hcC50aCA9IHdyYXBNYXAudGQ7CgovLyBJRSBjYW4ndCBzZXJpYWxpemUgPGxpbms+IGFuZCA8
c2NyaXB0PiB0YWdzIG5vcm1hbGx5CmlmICggIWpRdWVyeS5zdXBwb3J0Lmh0bWxTZXJpYWxpemUg
KSB7CiAgICAgICAgd3JhcE1hcC5fZGVmYXVsdCA9IFsgMSwgImRpdjxkaXY+IiwgIjwvZGl2PiIg
XTsKfQoKalF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAgICAgdGV4dDogZnVuY3Rpb24oIHRleHQgKSB7
CiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKHRleHQpICkgewogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHQoIHRleHQuY2FsbCh0aGlzLCBpLCBz
ZWxmLnRleHQoKSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdGV4dCAhPT0gIm9iamVjdCIgJiYgdGV4
dCAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
bXB0eSgpLmFwcGVuZCggKHRoaXNbMF0gJiYgdGhpc1swXS5vd25lckRvY3VtZW50IHx8IGRvY3Vt
ZW50KS5jcmVhdGVUZXh0Tm9kZSggdGV4dCApICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS50ZXh0KCB0aGlzICk7CiAgICAgICAgfSwKCiAgICAgICAg
d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCBodG1sICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eSh0aGlzKS53cmFwQWxsKCBodG1sLmNhbGwodGhpcywgaSkgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBd
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUg
dGFyZ2V0IGFyb3VuZAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcCA9IGpRdWVyeSgg
aHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50ICkuZXEoMCkuY2xvbmUodHJ1ZSk7CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1swXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB3cmFwLm1hcChmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxk
ICYmIGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXBwZW5kKCB0aGlzICk7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwK
CiAgICAgICAgd3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHsKICAgICAgICAgICAgICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5KHRoaXMpLndyYXBJbm5lciggaHRtbC5jYWxsKHRoaXMsIGkpICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBzZWxmID0galF1ZXJ5KCB0aGlzICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGNvbnRlbnRzLmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZW50cy53cmFwQWxsKCBodG1sICk7CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCBodG1sICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAg
ICAgIHdyYXA6IGZ1bmN0aW9uKCBodG1sICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICku
d3JhcEFsbCggaHRtbCApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAg
dW53cmFwOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgp
LmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5u
b2RlTmFtZSggdGhpcywgImJvZHkiICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KS5lbmQoKTsKICAgICAgICB9LAoK
ICAgICAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgcHJlcGVu
ZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1
bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMuZmlyc3RDaGlsZCApOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBi
ZWZvcmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICYmIHRoaXNb
MF0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9t
TWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhp
cyApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZXQg
PSBqUXVlcnkoYXJndW1lbnRzWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0LnB1c2gu
YXBwbHkoIHNldCwgdGhpcy50b0FycmF5KCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCBzZXQsICJiZWZvcmUiLCBhcmd1bWVudHMgKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBhZnRlcjogZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICBpZiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZhbHNlLCBmdW5j
dGlvbiggZWxlbSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVu
dE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYXJndW1lbnRzLmxl
bmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNldCA9IHRoaXMucHVzaFN0YWNr
KCB0aGlzLCAiYWZ0ZXIiLCBhcmd1bWVudHMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0
LnB1c2guYXBwbHkoIHNldCwgalF1ZXJ5KGFyZ3VtZW50c1swXSkudG9BcnJheSgpICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
fSwKCiAgICAgICAgLy8ga2VlcERhdGEgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LS1kbyBub3Qg
ZG9jdW1lbnQKICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3Rvciwga2VlcERhdGEgKSB7
CiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gdGhpc1tpXSkg
IT0gbnVsbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciB8
fCBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgWyBlbGVtIF0gKS5sZW5ndGggKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAha2VlcERhdGEgJiYgZWxlbS5ub2RlVHlwZSA9
PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5j
bGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggWyBlbGVtIF0gKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
fSwKCiAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBlbGVtOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5
IGxlYWtzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVt
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVDaGlsZCggZWxlbS5maXJzdENoaWxk
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBjbG9uZTogZnVuY3Rpb24o
IGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgewogICAgICAgICAgICAgICAgZGF0
YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50
czsKICAgICAgICAgICAgICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMg
PT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50czsKCiAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRF
dmVudHMgKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIGh0bWw6IGZ1
bmN0aW9uKCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5l
ZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbMF0gJiYgdGhpc1swXS5u
b2RlVHlwZSA9PT0gMSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1swXS5p
bm5lckhUTUwucmVwbGFjZShyaW5saW5lalF1ZXJ5LCAiIikgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bGw7CgogICAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiB0YWtl
IGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTAogICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhcm5vY2FjaGUudGVzdCggdmFsdWUg
KSAmJgogICAgICAgICAgICAgICAgICAgICAgICAoalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRl
c3BhY2UgfHwgIXJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCB2YWx1ZSApKSAmJgogICAgICAgICAg
ICAgICAgICAgICAgICAhd3JhcE1hcFsgKHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyIiLCAi
Il0pWzFdLnRvTG93ZXJDYXNlKCkgXSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gdmFsdWUucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVu
dCBtZW1vcnkgbGVha3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdGhpc1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggdGhpc1tpXS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiKiIpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXNbaV0uaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBl
eGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gY2F0Y2goZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1wdHko
KS5hcHBlbmQoIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGkpewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICk7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuaHRtbCggdmFsdWUuY2FsbCh0aGlzLCBpLCBzZWxmLmh0bWwo
KSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9
LAoKICAgICAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oIHZhbHVlICkgewogICAgICAgICAgICAg
ICAgaWYgKCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20g
dGhlIERPTSBiZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpcyBjYW4gaGVscCBmaXggcmVwbGFjaW5nIGEgcGFyZW50IHdpdGggY2hpbGQgZWxlbWVu
dHMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUg
KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
ZWxmID0galF1ZXJ5KHRoaXMpLCBvbGQgPSBzZWxmLmh0bWwoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRoaXMs
IGksIG9sZCApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHZh
bHVlICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGpRdWVyeSggdmFsdWUgKS5kZXRhY2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dFNpYmxpbmcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSB0aGlzLnBh
cmVudE5vZGU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyAp
LnJlbW92ZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5leHQgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkobmV4dCkuYmVm
b3JlKCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkocGFyZW50KS5hcHBl
bmQoIHZhbHVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5wdXNoU3RhY2soIGpRdWVyeShqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgPyB2
YWx1ZSgpIDogdmFsdWUpLCAicmVwbGFjZVdpdGgiLCB2YWx1ZSApIDoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAg
ICAgIGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewogICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMucmVtb3ZlKCBzZWxlY3RvciwgdHJ1ZSApOwogICAgICAgIH0sCgogICAgICAgIGRvbU1h
bmlwOiBmdW5jdGlvbiggYXJncywgdGFibGUsIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAg
dmFyIHJlc3VsdHMsIGZpcnN0LCBmcmFnbWVudCwgcGFyZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGFyZ3NbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgPSBb
XTsKCiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQg
Y29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXQKICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5z
dXBwb3J0LmNoZWNrQ2xvbmUgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2YgdmFs
dWUgPT09ICJzdHJpbmciICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmRvbU1hbmlwKCBhcmdzLCB0YWJsZSwgY2Fs
bGJhY2ssIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKHRoaXMsIGks
IHRhYmxlID8gc2VsZi5odG1sKCkgOiB1bmRlZmluZWQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBp
ZiAoIHRoaXNbMF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHZhbHVlICYm
IHZhbHVlLnBhcmVudE5vZGU7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBp
biBhIGZyYWdtZW50LCBqdXN0IHVzZSB0aGF0IGluc3RlYWQgb2YgYnVpbGRpbmcgYSBuZXcgb25l
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQucGFyZW50Tm9kZSAm
JiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxMSAmJiBwYXJlbnQuY2hpbGROb2Rlcy5s
ZW5ndGggPT09IHRoaXMubGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdHMgPSB7IGZyYWdtZW50OiBwYXJlbnQgfTsKCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGpRdWVy
eS5idWlsZEZyYWdtZW50KCBhcmdzLCB0aGlzLCBzY3JpcHRzICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gcmVzdWx0cy5mcmFn
bWVudDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5s
ZW5ndGggPT09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBm
cmFnbWVudCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmcmFnbWVudC5m
aXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGZpcnN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxl
ID0gdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBmaXJzdCwgInRyIiApOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCwgbGFz
dEluZGV4ID0gbCAtIDE7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YWJsZSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCh0aGlzW2ldLCBmaXJzdCkgOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbaV0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHdlIGRvIG5vdCBsZWFrIG1lbW9yeSBieSBpbmFkdmVydGVudGx5IGRpc2NhcmRp
bmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IG9yaWdpbmFsIGZyYWdtZW50ICh3aGljaCBtaWdodCBoYXZlIGF0dGFjaGVkIGRhdGEpIGluc3Rl
YWQgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dXNpbmcgaXQ7IGluIGFkZGl0aW9uLCB1c2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IG9iamVjdCBm
b3IgdGhlIGxhc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaXRlbSBpbnN0ZWFkIG9mIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cCBiZWluZyBl
bXB0aWVkIGluY29ycmVjdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoQnVnICM4MDcwKS4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJhZ21lbnRzIGZyb20g
dGhlIGZyYWdtZW50IGNhY2hlIG11c3QgYWx3YXlzIGJlIGNsb25lZCBhbmQgbmV2ZXIgdXNlZAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBwbGFj
ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
cy5jYWNoZWFibGUgfHwgKGwgPiAxICYmIGkgPCBsYXN0SW5kZXgpID8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xvbmUoIGZy
YWdtZW50LCB0cnVlLCB0cnVlICkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzY3JpcHRz
Lmxlbmd0aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCgg
c2NyaXB0cywgZXZhbFNjcmlwdCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQp9KTsKCmZ1
bmN0aW9uIHJvb3QoIGVsZW0sIGN1ciApIHsKICAgICAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1l
KGVsZW0sICJ0YWJsZSIpID8KICAgICAgICAgICAgICAgIChlbGVtLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJ0Ym9keSIpWzBdIHx8CiAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGVsZW0u
b3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKSkgOgogICAgICAgICAgICAgICAg
ZWxlbTsKfQoKZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKCiAgICAgICAg
aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0YSggc3JjICkgKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgaW50ZXJuYWxLZXkg
PSBqUXVlcnkuZXhwYW5kbywKICAgICAgICAgICAgICAgIG9sZERhdGEgPSBqUXVlcnkuZGF0YSgg
c3JjICksCiAgICAgICAgICAgICAgICBjdXJEYXRhID0galF1ZXJ5LmRhdGEoIGRlc3QsIG9sZERh
dGEgKTsKCiAgICAgICAgLy8gU3dpdGNoIHRvIHVzZSB0aGUgaW50ZXJuYWwgZGF0YSBvYmplY3Qs
IGlmIGl0IGV4aXN0cywgZm9yIHRoZSBuZXh0CiAgICAgICAgLy8gc3RhZ2Ugb2YgZGF0YSBjb3B5
aW5nCiAgICAgICAgaWYgKCAob2xkRGF0YSA9IG9sZERhdGFbIGludGVybmFsS2V5IF0pICkgewog
ICAgICAgICAgICAgICAgdmFyIGV2ZW50cyA9IG9sZERhdGEuZXZlbnRzOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1ckRhdGEgPSBjdXJEYXRhWyBpbnRlcm5hbEtleSBdID0galF1
ZXJ5LmV4dGVuZCh7fSwgb2xkRGF0YSk7CgogICAgICAgICAgICAgICAgaWYgKCBldmVudHMgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJEYXRhLmhhbmRsZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyRGF0YS5ldmVudHMgPSB7fTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIHZhciB0eXBlIGluIGV2ZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBs
OyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQuYWRkKCBkZXN0LCB0eXBlICsgKCBldmVudHNbIHR5cGUgXVsgaSBdLm5hbWVzcGFjZSA/
ICIuIiA6ICIiICkgKyBldmVudHNbIHR5cGUgXVsgaSBdLm5hbWVzcGFjZSwgZXZlbnRzWyB0eXBl
IF1bIGkgXSwgZXZlbnRzWyB0eXBlIF1bIGkgXS5kYXRhICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQp9CgpmdW5jdGlvbiBjbG9uZUZpeEF0dHJpYnV0ZXMoIHNyYywgZGVzdCApIHsK
ICAgICAgICB2YXIgbm9kZU5hbWU7CgogICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGRvIGFu
eXRoaW5nIGZvciBub24tRWxlbWVudHMKICAgICAgICBpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEg
KSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBjbGVhckF0
dHJpYnV0ZXMgcmVtb3ZlcyB0aGUgYXR0cmlidXRlcywgd2hpY2ggd2UgZG9uJ3Qgd2FudCwKICAg
ICAgICAvLyBidXQgYWxzbyByZW1vdmVzIHRoZSBhdHRhY2hFdmVudCBldmVudHMsIHdoaWNoIHdl
ICpkbyogd2FudAogICAgICAgIGlmICggZGVzdC5jbGVhckF0dHJpYnV0ZXMgKSB7CiAgICAgICAg
ICAgICAgICBkZXN0LmNsZWFyQXR0cmlidXRlcygpOwogICAgICAgIH0KCiAgICAgICAgLy8gbWVy
Z2VBdHRyaWJ1dGVzLCBpbiBjb250cmFzdCwgb25seSBtZXJnZXMgYmFjayBvbiB0aGUKICAgICAg
ICAvLyBvcmlnaW5hbCBhdHRyaWJ1dGVzLCBub3QgdGhlIGV2ZW50cwogICAgICAgIGlmICggZGVz
dC5tZXJnZUF0dHJpYnV0ZXMgKSB7CiAgICAgICAgICAgICAgICBkZXN0Lm1lcmdlQXR0cmlidXRl
cyggc3JjICk7CiAgICAgICAgfQoKICAgICAgICBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9M
b3dlckNhc2UoKTsKCiAgICAgICAgLy8gSUU2LTggZmFpbCB0byBjbG9uZSBjaGlsZHJlbiBpbnNp
ZGUgb2JqZWN0IGVsZW1lbnRzIHRoYXQgdXNlCiAgICAgICAgLy8gdGhlIHByb3ByaWV0YXJ5IGNs
YXNzaWQgYXR0cmlidXRlIHZhbHVlIChyYXRoZXIgdGhhbiB0aGUgdHlwZQogICAgICAgIC8vIGF0
dHJpYnV0ZSkgdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgY29udGVudCB0byBkaXNwbGF5CiAgICAg
ICAgaWYgKCBub2RlTmFtZSA9PT0gIm9iamVjdCIgKSB7CiAgICAgICAgICAgICAgICBkZXN0Lm91
dGVySFRNTCA9IHNyYy5vdXRlckhUTUw7CgogICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09
PSAiaW5wdXQiICYmIChzcmMudHlwZSA9PT0gImNoZWNrYm94IiB8fCBzcmMudHlwZSA9PT0gInJh
ZGlvIikgKSB7CiAgICAgICAgICAgICAgICAvLyBJRTYtOCBmYWlscyB0byBwZXJzaXN0IHRoZSBj
aGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94CiAgICAgICAgICAgICAgICAvLyBvciBy
YWRpbyBidXR0b24uIFdvcnNlLCBJRTYtNyBmYWlsIHRvIGdpdmUgdGhlIGNsb25lZCBlbGVtZW50
CiAgICAgICAgICAgICAgICAvLyBhIGNoZWNrZWQgYXBwZWFyYW5jZSBpZiB0aGUgZGVmYXVsdENo
ZWNrZWQgdmFsdWUgaXNuJ3QgYWxzbyBzZXQKICAgICAgICAgICAgICAgIGlmICggc3JjLmNoZWNr
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0
LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5kIGVuZCB1cCBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBh
IGNsb25lZAogICAgICAgICAgICAgICAgLy8gY2hlY2tib3gvcmFkaW8gYnV0dG9uIHRvIGFuIGVt
cHR5IHN0cmluZyBpbnN0ZWFkIG9mICJvbiIKICAgICAgICAgICAgICAgIGlmICggZGVzdC52YWx1
ZSAhPT0gc3JjLnZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnZhbHVlID0g
c3JjLnZhbHVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAvLyBJRTYtOCBmYWlscyB0byBy
ZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZAogICAgICAg
IC8vIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zCiAgICAgICAgfSBlbHNlIGlmICggbm9kZU5h
bWUgPT09ICJvcHRpb24iICkgewogICAgICAgICAgICAgICAgZGVzdC5zZWxlY3RlZCA9IHNyYy5k
ZWZhdWx0U2VsZWN0ZWQ7CgogICAgICAgIC8vIElFNi04IGZhaWxzIHRvIHNldCB0aGUgZGVmYXVs
dFZhbHVlIHRvIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4KICAgICAgICAvLyBjbG9uaW5nIG90aGVy
IHR5cGVzIG9mIGlucHV0IGZpZWxkcwogICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAi
aW5wdXQiIHx8IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgewogICAgICAgICAgICAgICAgZGVz
dC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOwogICAgICAgIH0KCiAgICAgICAgLy8g
RXZlbnQgZGF0YSBnZXRzIHJlZmVyZW5jZWQgaW5zdGVhZCBvZiBjb3BpZWQgaWYgdGhlIGV4cGFu
ZG8KICAgICAgICAvLyBnZXRzIGNvcGllZCB0b28KICAgICAgICBkZXN0LnJlbW92ZUF0dHJpYnV0
ZSggalF1ZXJ5LmV4cGFuZG8gKTsKfQoKalF1ZXJ5LmJ1aWxkRnJhZ21lbnQgPSBmdW5jdGlvbigg
YXJncywgbm9kZXMsIHNjcmlwdHMgKSB7CiAgICAgICAgdmFyIGZyYWdtZW50LCBjYWNoZWFibGUs
IGNhY2hlcmVzdWx0cywgZG9jOwoKICAvLyBub2RlcyBtYXkgY29udGFpbiBlaXRoZXIgYW4gZXhw
bGljaXQgZG9jdW1lbnQgb2JqZWN0LAogIC8vIGEgalF1ZXJ5IGNvbGxlY3Rpb24gb3IgY29udGV4
dCBvYmplY3QuCiAgLy8gSWYgbm9kZXNbMF0gY29udGFpbnMgYSB2YWxpZCBvYmplY3QgdG8gYXNz
aWduIHRvIGRvYwogIGlmICggbm9kZXMgJiYgbm9kZXNbMF0gKSB7CiAgICBkb2MgPSBub2Rlc1sw
XS5vd25lckRvY3VtZW50IHx8IG5vZGVzWzBdOwogIH0KCiAgLy8gRW5zdXJlIHRoYXQgYW4gYXR0
ciBvYmplY3QgZG9lc24ndCBpbmNvcnJlY3RseSBzdGFuZCBpbiBhcyBhIGRvY3VtZW50IG9iamVj
dAogICAgICAgIC8vIENocm9tZSBhbmQgRmlyZWZveCBzZWVtIHRvIGFsbG93IHRoaXMgdG8gb2Nj
dXIgYW5kIHdpbGwgdGhyb3cgZXhjZXB0aW9uCiAgICAgICAgLy8gRml4ZXMgIzg5NTAKICAgICAg
ICBpZiAoICFkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCApIHsKICAgICAgICAgICAgICAgIGRv
YyA9IGRvY3VtZW50OwogICAgICAgIH0KCiAgICAgICAgLy8gT25seSBjYWNoZSAic21hbGwiICgx
LzIgS0IpIEhUTUwgc3RyaW5ncyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gZG9j
dW1lbnQKICAgICAgICAvLyBDbG9uaW5nIG9wdGlvbnMgbG9zZXMgdGhlIHNlbGVjdGVkIHN0YXRl
LCBzbyBkb24ndCBjYWNoZSB0aGVtCiAgICAgICAgLy8gSUUgNiBkb2Vzbid0IGxpa2UgaXQgd2hl
biB5b3UgcHV0IDxvYmplY3Q+IG9yIDxlbWJlZD4gZWxlbWVudHMgaW4gYSBmcmFnbWVudAogICAg
ICAgIC8vIEFsc28sIFdlYktpdCBkb2VzIG5vdCBjbG9uZSAnY2hlY2tlZCcgYXR0cmlidXRlcyBv
biBjbG9uZU5vZGUsIHNvIGRvbid0IGNhY2hlCiAgICAgICAgaWYgKCBhcmdzLmxlbmd0aCA9PT0g
MSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gInN0cmluZyIgJiYgYXJnc1swXS5sZW5ndGggPCA1MTIg
JiYgZG9jID09PSBkb2N1bWVudCAmJgogICAgICAgICAgICAgICAgYXJnc1swXS5jaGFyQXQoMCkg
PT09ICI8IiAmJiAhcm5vY2FjaGUudGVzdCggYXJnc1swXSApICYmIChqUXVlcnkuc3VwcG9ydC5j
aGVja0Nsb25lIHx8ICFyY2hlY2tlZC50ZXN0KCBhcmdzWzBdICkpICkgewoKICAgICAgICAgICAg
ICAgIGNhY2hlYWJsZSA9IHRydWU7CgogICAgICAgICAgICAgICAgY2FjaGVyZXN1bHRzID0galF1
ZXJ5LmZyYWdtZW50c1sgYXJnc1swXSBdOwogICAgICAgICAgICAgICAgaWYgKCBjYWNoZXJlc3Vs
dHMgJiYgY2FjaGVyZXN1bHRzICE9PSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICBmcmFn
bWVudCA9IGNhY2hlcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IGlmICggIWZyYWdtZW50ICkgewogICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBkb2MuY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpOwogICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuKCBhcmdzLCBk
b2MsIGZyYWdtZW50LCBzY3JpcHRzICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIGNhY2hlYWJs
ZSApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5mcmFnbWVudHNbIGFyZ3NbMF0gXSA9IGNhY2hl
cmVzdWx0cyA/IGZyYWdtZW50IDogMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB7IGZyYWdt
ZW50OiBmcmFnbWVudCwgY2FjaGVhYmxlOiBjYWNoZWFibGUgfTsKfTsKCmpRdWVyeS5mcmFnbWVu
dHMgPSB7fTsKCmpRdWVyeS5lYWNoKHsKICAgICAgICBhcHBlbmRUbzogImFwcGVuZCIsCiAgICAg
ICAgcHJlcGVuZFRvOiAicHJlcGVuZCIsCiAgICAgICAgaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwK
ICAgICAgICBpbnNlcnRBZnRlcjogImFmdGVyIiwKICAgICAgICByZXBsYWNlQWxsOiAicmVwbGFj
ZVdpdGgiCn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHsKICAgICAgICBqUXVlcnkuZm5b
IG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKICAgICAgICAgICAgICAgIHZhciByZXQg
PSBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciAp
LAogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0
aGlzWzBdLnBhcmVudE5vZGU7CgogICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQgJiYgcGFyZW50
Lm5vZGVUeXBlID09PSAxMSAmJiBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgJiYgaW5z
ZXJ0Lmxlbmd0aCA9PT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0WyBvcmln
aW5hbCBdKCB0aGlzWzBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwoK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IGluc2VydC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGVsZW1zID0gKGkgPiAwID8gdGhpcy5jbG9uZSh0cnVlKSA6
IHRoaXMpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggaW5z
ZXJ0W2ldIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gcmV0LmNvbmNhdCggZWxlbXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5h
bWUsIGluc2VydC5zZWxlY3RvciApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cn0pOwoK
ZnVuY3Rpb24gZ2V0QWxsKCBlbGVtICkgewogICAgICAgIGlmICggImdldEVsZW1lbnRzQnlUYWdO
YW1lIiBpbiBlbGVtICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNC
eVRhZ05hbWUoICIqIiApOwoKICAgICAgICB9IGVsc2UgaWYgKCAicXVlcnlTZWxlY3RvckFsbCIg
aW4gZWxlbSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwo
ICIqIiApOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAg
ICAgIH0KfQoKLy8gVXNlZCBpbiBjbGVhbiwgZml4ZXMgdGhlIGRlZmF1bHRDaGVja2VkIHByb3Bl
cnR5CmZ1bmN0aW9uIGZpeERlZmF1bHRDaGVja2VkKCBlbGVtICkgewogICAgICAgIGlmICggZWxl
bS50eXBlID09PSAiY2hlY2tib3giIHx8IGVsZW0udHlwZSA9PT0gInJhZGlvIiApIHsKICAgICAg
ICAgICAgICAgIGVsZW0uZGVmYXVsdENoZWNrZWQgPSBlbGVtLmNoZWNrZWQ7CiAgICAgICAgfQp9
Ci8vIEZpbmRzIGFsbCBpbnB1dHMgYW5kIHBhc3NlcyB0aGVtIHRvIGZpeERlZmF1bHRDaGVja2Vk
CmZ1bmN0aW9uIGZpbmRJbnB1dHMoIGVsZW0gKSB7CiAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5h
bWUoIGVsZW0sICJpbnB1dCIgKSApIHsKICAgICAgICAgICAgICAgIGZpeERlZmF1bHRDaGVja2Vk
KCBlbGVtICk7CiAgICAgICAgfSBlbHNlIGlmICggImdldEVsZW1lbnRzQnlUYWdOYW1lIiBpbiBl
bGVtICkgewogICAgICAgICAgICAgICAgalF1ZXJ5LmdyZXAoIGVsZW0uZ2V0RWxlbWVudHNCeVRh
Z05hbWUoImlucHV0IiksIGZpeERlZmF1bHRDaGVja2VkICk7CiAgICAgICAgfQp9CgpqUXVlcnku
ZXh0ZW5kKHsKICAgICAgICBjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRl
ZXBEYXRhQW5kRXZlbnRzICkgewogICAgICAgICAgICAgICAgdmFyIGNsb25lID0gZWxlbS5jbG9u
ZU5vZGUodHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjRWxlbWVudHMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEVsZW1lbnRzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGk7CgogICAgICAgICAgICAgICAgaWYgKCAoIWpRdWVyeS5z
dXBwb3J0Lm5vQ2xvbmVFdmVudCB8fCAhalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpICYm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwg
ZWxlbS5ub2RlVHlwZSA9PT0gMTEpICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElFIGNvcGllcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2
ZW50IHdoZW4gdXNpbmcgY2xvbmVOb2RlLgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxs
aW5nIGRldGFjaEV2ZW50IG9uIHRoZSBjbG9uZSB3aWxsIGFsc28gcmVtb3ZlIHRoZSBldmVudHMK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwuIEluIG9yZGVyIHRv
IGdldCBhcm91bmQgdGhpcywgd2UgdXNlIHNvbWUKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cHJvcHJpZXRhcnkgbWV0aG9kcyB0byBjbGVhciB0aGUgZXZlbnRzLiBUaGFua3MgdG8gTW9vVG9v
bHMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ3V5cyBmb3IgdGhpcyBob3RuZXNzLgoKICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBlbGVtLCBjbG9uZSApOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNpbmcgU2l6emxlIGhlcmUgaXMgY3Jhenkgc2xv
dywgc28gd2UgdXNlIGdldEVsZW1lbnRzQnlUYWdOYW1lCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGluc3RlYWQKICAgICAgICAgICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRBbGwo
IGVsZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBj
bG9uZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VpcmQgaXRlcmF0aW9uIGJlY2F1
c2UgSUUgd2lsbCByZXBsYWNlIHRoZSBsZW5ndGggcHJvcGVydHkKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gd2l0aCBhbiBlbGVtZW50IGlmIHlvdSBhcmUgY2xvbmluZyB0aGUgYm9keSBhbmQg
b25lIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50cyBvbiB0aGUgcGFn
ZSBoYXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCiAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIG5vdCBudWxs
OyBGaXhlcyAjOTU4NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVzdEVs
ZW1lbnRzW2ldICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xv
bmVGaXhBdHRyaWJ1dGVzKCBzcmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgZXZlbnRzIGZyb20g
dGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQogICAgICAgICAgICAgICAgaWYgKCBkYXRhQW5kRXZl
bnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xv
bmUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVs
ZW0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRB
bGwoIGNsb25lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
OyBzcmNFbGVtZW50c1tpXTsgKytpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0g
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGRl
c3RFbGVtZW50cyA9IG51bGw7CgogICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBjbG9uZWQg
c2V0CiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7CiAgICAgICAgfSwKCiAgICAgICAgY2xl
YW46IGZ1bmN0aW9uKCBlbGVtcywgY29udGV4dCwgZnJhZ21lbnQsIHNjcmlwdHMgKSB7CiAgICAg
ICAgICAgICAgICB2YXIgY2hlY2tTY3JpcHRUeXBlOwoKICAgICAgICAgICAgICAgIGNvbnRleHQg
PSBjb250ZXh0IHx8IGRvY3VtZW50OwoKICAgICAgICAgICAgICAgIC8vICFjb250ZXh0LmNyZWF0
ZUVsZW1lbnQgZmFpbHMgaW4gSUUgd2l0aCBhbiBlcnJvciBidXQgcmV0dXJucyB0eXBlb2YgJ29i
amVjdCcKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuY3JlYXRlRWxlbWVudCA9
PT0gInVuZGVmaW5lZCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250
ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dFswXSAmJiBjb250ZXh0WzBdLm93bmVyRG9jdW1l
bnQgfHwgZG9jdW1lbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHJl
dCA9IFtdLCBqOwoKICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0g
PSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiBlbGVtID09PSAibnVtYmVyIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtICs9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDb252ZXJ0IGh0bWwgc3RyaW5nIGludG8gRE9NIG5vZGVzCiAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJpbmciICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjb250ZXh0LmNyZWF0ZVRleHRO
b2RlKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeCAiWEhUTUwiLXN0eWxl
IHRhZ3MgaW4gYWxsIGJyb3dzZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtID0gZWxlbS5yZXBsYWNlKHJ4aHRtbFRhZywgIjwkMT48LyQyPiIpOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaW0gd2hpdGVzcGFjZSwgb3Ro
ZXJ3aXNlIGluZGV4T2Ygd29uJ3Qgd29yayBhcyBleHBlY3RlZAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IChydGFnTmFtZS5leGVjKCBlbGVtICkgfHwg
WyIiLCAiIl0pWzFdLnRvTG93ZXJDYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZh
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0
aCA9IHdyYXBbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpdiA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gR28gdG8gaHRtbCBhbmQgYmFjaywgdGhlbiBwZWVs
IG9mZiBleHRyYSB3cmFwcGVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGl2LmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtICsgd3JhcFsyXTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSByaWdodCBkZXB0aAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBkZXB0aC0tICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBk
aXYubGFzdENoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJRSdzIGF1
dG9pbnNlcnRlZCA8dGJvZHk+IGZyb20gdGFibGUgZnJhZ21lbnRzCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC50Ym9keSApIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3
YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc0JvZHkgPSBydGJvZHkudGVz
dChlbGVtKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0Ym9keSA9IHRhZyA9PT0gInRhYmxlIiAmJiAhaGFzQm9keSA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYu
Zmlyc3RDaGlsZCAmJiBkaXYuZmlyc3RDaGlsZC5jaGlsZE5vZGVzIDoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJp
bmcgd2FzIGEgYmFyZSA8dGhlYWQ+IG9yIDx0Zm9vdD4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBbMV0gPT09ICI8dGFi
bGU+IiAmJiAhaGFzQm9keSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5jaGlsZE5vZGVzIDoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBqID0gdGJvZHkubGVuZ3RoIC0gMTsgaiA+PSAwIDsgLS1qICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5Lm5vZGVOYW1lKCB0Ym9keVsgaiBdLCAidGJvZHkiICkgJiYgIXRib2R5WyBqIF0uY2hpbGRO
b2Rlcy5sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0Ym9keVsgaiBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
IHRib2R5WyBqIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBjb21wbGV0ZWx5IGtpbGxz
IGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIGlubmVySFRNTCBpcyB1c2VkCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5sZWFkaW5nV2hp
dGVzcGFjZSAmJiBybGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxlbSApICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuaW5zZXJ0QmVmb3JlKCBj
b250ZXh0LmNyZWF0ZVRleHROb2RlKCBybGVhZGluZ1doaXRlc3BhY2UuZXhlYyhlbGVtKVswXSAp
LCBkaXYuZmlyc3RDaGlsZCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkaXYu
Y2hpbGROb2RlczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0cyBkZWZhdWx0
Q2hlY2tlZCBmb3IgYW55IHJhZGlvcyBhbmQgY2hlY2tib3hlcwogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhYm91dCB0byBiZSBhcHBlbmRlZCB0byB0aGUgRE9NIGluIElFIDYvNyAoIzgwNjAp
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW47CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWpRdWVyeS5zdXBwb3J0LmFwcGVuZENoZWNrZWQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtWzBdICYmIHR5cGVvZiAobGVuID0gZWxlbS5sZW5ndGgp
ID09PSAibnVtYmVyIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGogPSAwOyBqIDwgbGVuOyBqKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbmRJbnB1dHMoIGVsZW1bal0gKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlu
ZElucHV0cyggZWxlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBlbGVt
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0ID0galF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZnJh
Z21lbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2NyaXB0VHlwZSA9IGZ1bmN0
aW9uKCBlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhZWxl
bS50eXBlIHx8IHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSApOwogICAgICAgICAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgcmV0W2ldOyBp
KysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzY3JpcHRzICYmIGpR
dWVyeS5ub2RlTmFtZSggcmV0W2ldLCAic2NyaXB0IiApICYmICghcmV0W2ldLnR5cGUgfHwgcmV0
W2ldLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gInRleHQvamF2YXNjcmlwdCIpICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cy5wdXNoKCByZXRbaV0ucGFy
ZW50Tm9kZSA/IHJldFtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCByZXRbaV0gKSA6IHJldFtp
XSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXRbaV0ubm9kZVR5cGUgPT09IDEg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBq
c1RhZ3MgPSBqUXVlcnkuZ3JlcCggcmV0W2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAic2NyaXB0
IiApLCBjaGVja1NjcmlwdFR5cGUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldC5zcGxpY2UuYXBwbHkoIHJldCwgW2kgKyAxLCAwXS5jb25jYXQo
IGpzVGFncyApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGls
ZCggcmV0W2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJu
IHJldDsKICAgICAgICB9LAoKICAgICAgICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHsK
ICAgICAgICAgICAgICAgIHZhciBkYXRhLCBpZCwgY2FjaGUgPSBqUXVlcnkuY2FjaGUsIGludGVy
bmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRXhwYW5kbyA9IGpRdWVyeS5zdXBwb3J0LmRl
bGV0ZUV4cGFuZG87CgogICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxl
bSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZWxlbS5ub2RlTmFtZSAmJiBqUXVlcnkubm9EYXRhW2VsZW0ubm9kZU5hbWUudG9Mb3dlckNh
c2UoKV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gZWxlbVsg
alF1ZXJ5LmV4cGFuZG8gXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaWQgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGNhY2hlWyBpZCBdICYmIGNhY2hl
WyBpZCBdWyBpbnRlcm5hbEtleSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEgJiYgZGF0YS5ldmVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBkYXRhLmV2ZW50cyApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsWyB0eXBlIF0g
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2
b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxl
bSwgdHlwZSwgZGF0YS5oYW5kbGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bGwgdGhlIERP
TSByZWZlcmVuY2UgdG8gYXZvaWQgSUU2LzcvOCBsZWFrICgjNzA1NCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5oYW5kbGUgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaGFuZGxlLmVsZW0gPSBu
dWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBkZWxldGVFeHBhbmRvICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGVsZW1bIGpRdWVyeS5leHBhbmRvIF07CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGpR
dWVyeS5leHBhbmRvICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbIGlkIF07CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0pOwoKZnVuY3Rpb24g
ZXZhbFNjcmlwdCggaSwgZWxlbSApIHsKICAgICAgICBpZiAoIGVsZW0uc3JjICkgewogICAgICAg
ICAgICAgICAgalF1ZXJ5LmFqYXgoewogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGVsZW0u
c3JjLAogICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCAoIGVsZW0udGV4dCB8
fCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJIVE1MIHx8ICIiICkucmVwbGFjZSggcmNs
ZWFuU2NyaXB0LCAiLyokMCovIiApICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIGVsZW0ucGFy
ZW50Tm9kZSApIHsKICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgg
ZWxlbSApOwogICAgICAgIH0KfQoKCgoKdmFyIHJhbHBoYSA9IC9hbHBoYVwoW14pXSpcKS9pLAog
ICAgICAgIHJvcGFjaXR5ID0gL29wYWNpdHk9KFteKV0qKS8sCiAgICAgICAgLy8gZml4ZWQgZm9y
IElFOSwgc2VlICM4MzQ2CiAgICAgICAgcnVwcGVyID0gLyhbQS1aXXxebXMpL2csCiAgICAgICAg
cm51bXB4ID0gL14tP1xkKyg/OnB4KT8kL2ksCiAgICAgICAgcm51bSA9IC9eLT9cZC8sCiAgICAg
ICAgcnJlbE51bSA9IC9eKFtcLStdKT0oW1wtKy5cZGVdKykvLAoKICAgICAgICBjc3NTaG93ID0g
eyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJi
bG9jayIgfSwKICAgICAgICBjc3NXaWR0aCA9IFsgIkxlZnQiLCAiUmlnaHQiIF0sCiAgICAgICAg
Y3NzSGVpZ2h0ID0gWyAiVG9wIiwgIkJvdHRvbSIgXSwKICAgICAgICBjdXJDU1MsCgogICAgICAg
IGdldENvbXB1dGVkU3R5bGUsCiAgICAgICAgY3VycmVudFN0eWxlOwoKalF1ZXJ5LmZuLmNzcyA9
IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKICAgICAgICAvLyBTZXR0aW5nICd1bmRlZmluZWQn
IGlzIGEgbm8tb3AKICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdmFsdWUg
PT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0K
CiAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIG5hbWUsIHZhbHVlLCB0cnVlLCBm
dW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUgIT09IHVuZGVmaW5lZCA/CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSgg
ZWxlbSwgbmFtZSwgdmFsdWUgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3Mo
IGVsZW0sIG5hbWUgKTsKICAgICAgICB9KTsKfTsKCmpRdWVyeS5leHRlbmQoewogICAgICAgIC8v
IEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAog
ICAgICAgIC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0
eQogICAgICAgIGNzc0hvb2tzOiB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJl
ciBiYWNrIGZyb20gb3BhY2l0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiLCAib3BhY2l0eSIgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09ICIiID8gIjEi
IDogcmV0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc3R5bGUub3BhY2l0
eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBFeGNsdWRlIHRo
ZSBmb2xsb3dpbmcgY3NzIHByb3BlcnRpZXMgdG8gYWRkIHB4CiAgICAgICAgY3NzTnVtYmVyOiB7
CiAgICAgICAgICAgICAgICAiZmlsbE9wYWNpdHkiOiB0cnVlLAogICAgICAgICAgICAgICAgImZv
bnRXZWlnaHQiOiB0cnVlLAogICAgICAgICAgICAgICAgImxpbmVIZWlnaHQiOiB0cnVlLAogICAg
ICAgICAgICAgICAgIm9wYWNpdHkiOiB0cnVlLAogICAgICAgICAgICAgICAgIm9ycGhhbnMiOiB0
cnVlLAogICAgICAgICAgICAgICAgIndpZG93cyI6IHRydWUsCiAgICAgICAgICAgICAgICAieklu
ZGV4IjogdHJ1ZSwKICAgICAgICAgICAgICAgICJ6b29tIjogdHJ1ZQogICAgICAgIH0sCgogICAg
ICAgIC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZv
cmUKICAgICAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlCiAgICAgICAgY3NzUHJv
cHM6IHsKICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBmbG9hdCBjc3MgcHJvcGVydHkKICAg
ICAgICAgICAgICAgICJmbG9hdCI6IGpRdWVyeS5zdXBwb3J0LmNzc0Zsb2F0ID8gImNzc0Zsb2F0
IiA6ICJzdHlsZUZsb2F0IgogICAgICAgIH0sCgogICAgICAgIC8vIEdldCBhbmQgc2V0IHRoZSBz
dHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCiAgICAgICAgc3R5bGU6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CiAgICAgICAgICAgICAgICAvLyBEb24ndCBzZXQgc3R5
bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKICAgICAgICAgICAgICAgIGlmICggIWVsZW0g
fHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0
eWxlICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRo
ZSByaWdodCBuYW1lCiAgICAgICAgICAgICAgICB2YXIgcmV0LCB0eXBlLCBvcmlnTmFtZSA9IGpR
dWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBl
bGVtLnN0eWxlLCBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKCiAgICAgICAg
ICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8IG9yaWdOYW1lOwoK
ICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZQogICAgICAg
ICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gdHlwZW9mIHZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29u
dmVydCByZWxhdGl2ZSBudW1iZXIgc3RyaW5ncyAoKz0gb3IgLT0pIHRvIHJlbGF0aXZlIG51bWJl
cnMuICM3MzQ1CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIg
JiYgKHJldCA9IHJyZWxOdW0uZXhlYyggdmFsdWUgKSkgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSAoICsoIHJldFsxXSArIDEpICogK3JldFsyXSApICsgcGFyc2VG
bG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRml4ZXMgYnVnICM5MjM3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9ICJudW1iZXIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwgdmFsdWVzIGFyZW4n
dCBzZXQuIFNlZTogIzcxMTYKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PSBu
dWxsIHx8IHR5cGUgPT09ICJudW1iZXIiICYmIGlzTmFOKCB2YWx1ZSApICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRk
ICdweCcgdG8gdGhlIChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gIm51bWJlciIgJiYgIWpRdWVyeS5jc3NOdW1i
ZXJbIG9yaWdOYW1lIF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
Kz0gInB4IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBq
dXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWhvb2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwg
dmFsdWUgKSkgIT09IHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXcmFwcGVkIHRvIHByZXZlbnQgSUUgZnJvbSB0aHJvd2luZyBlcnJvcnMgd2hlbiAnaW52
YWxpZCcgdmFsdWVzIGFyZSBwcm92aWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZpeGVzIGJ1ZyAjNTUwOQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0g
dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21w
dXRlZCB2YWx1ZSBmcm9tIHRoZXJlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaG9va3Mg
JiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJh
ICkpICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJldDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlWyBuYW1lIF07CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0
cmEgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0LCBob29rczsKCiAgICAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKICAgICAg
ICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CiAgICAgICAgICAgICAg
ICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdOwogICAgICAgICAgICAgICAgbmFtZSA9
IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IG5hbWU7CgogICAgICAgICAgICAgICAgLy8gY3Nz
RmxvYXQgbmVlZHMgYSBzcGVjaWFsIHRyZWF0bWVudAogICAgICAgICAgICAgICAgaWYgKCBuYW1l
ID09PSAiY3NzRmxvYXQiICkgewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImZsb2F0
IjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHBy
b3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQogICAgICAgICAgICAgICAg
aWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCB0
cnVlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0OwoKICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0
IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0CiAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBjdXJDU1MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJDU1Mo
IGVsZW0sIG5hbWUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBB
IG1ldGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NTIHByb3BlcnRpZXMgdG8gZ2V0
IGNvcnJlY3QgY2FsY3VsYXRpb25zCiAgICAgICAgc3dhcDogZnVuY3Rpb24oIGVsZW0sIG9wdGlv
bnMsIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgdmFyIG9sZCA9IHt9OwoKICAgICAgICAg
ICAgICAgIC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25l
cwogICAgICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gb3B0aW9ucyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgb2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07CiAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKCBlbGVtICk7Cgog
ICAgICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCiAgICAgICAgICAgICAgICBm
b3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5
bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfSk7
CgovLyBERVBSRUNBVEVELCBVc2UgalF1ZXJ5LmNzcygpIGluc3RlYWQKalF1ZXJ5LmN1ckNTUyA9
IGpRdWVyeS5jc3M7CgpqUXVlcnkuZWFjaChbImhlaWdodCIsICJ3aWR0aCJdLCBmdW5jdGlvbigg
aSwgbmFtZSApIHsKICAgICAgICBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHZhbDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29t
cHV0ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm9mZnNl
dFdpZHRoICE9PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdldFdIKCBlbGVtLCBuYW1lLCBleHRyYSApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGdldFdIKCBlbGVtLCBuYW1l
LCBleHRyYSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9LAoKICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJudW1weC50ZXN0KCB2YWx1ZSApICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBuZWdhdGl2ZSB3aWR0aCBhbmQg
aGVpZ2h0IHZhbHVlcyAjMTU5OQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gcGFyc2VGbG9hdCggdmFsdWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB2YWx1ZSA+PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlICsgInB4IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQogICAgICAgIH07Cn0pOwoKaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3BhY2l0eSAp
IHsKICAgICAgICBqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHsKICAgICAgICAgICAgICAgIGdl
dDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewogICAgICAgICAgICAgICAgICAgICAgICAv
LyBJRSB1c2VzIGZpbHRlcnMgZm9yIG9wYWNpdHkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJvcGFjaXR5LnRlc3QoIChjb21wdXRlZCAmJiBlbGVtLmN1cnJlbnRTdHlsZSA/IGVsZW0u
Y3VycmVudFN0eWxlLmZpbHRlciA6IGVsZW0uc3R5bGUuZmlsdGVyKSB8fCAiIiApID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBhcnNlRmxvYXQoIFJlZ0V4cC4kMSApIC8gMTAw
ICkgKyAiIiA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPyAiMSIg
OiAiIjsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigg
ZWxlbSwgdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IGVsZW0u
c3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0eWxlID0gZWxl
bS5jdXJyZW50U3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eSA9
IGpRdWVyeS5pc05hTiggdmFsdWUgKSA/ICIiIDogImFscGhhKG9wYWNpdHk9IiArIHZhbHVlICog
MTAwICsgIikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGN1cnJl
bnRTdHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGhhcyB0cm91YmxlIHdpdGggb3BhY2l0eSBpZiBp
dCBkb2VzIG5vdCBoYXZlIGxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBp
dCBieSBzZXR0aW5nIHRoZSB6b29tIGxldmVsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
Lnpvb20gPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2V0dGluZyBvcGFjaXR5
IHRvIDEsIGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0ZW1wdCB0byByZW1vdmUgZmls
dGVyIGF0dHJpYnV0ZSAjNjY1MgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID49
IDEgJiYgalF1ZXJ5LnRyaW0oIGZpbHRlci5yZXBsYWNlKCByYWxwaGEsICIiICkgKSA9PT0gIiIg
KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgc3R5bGUuZmls
dGVyIHRvIG51bGwsICIiICYgIiAiIHN0aWxsIGxlYXZlICJmaWx0ZXI6IiBpbiB0aGUgY3NzVGV4
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICJmaWx0ZXI6IiBpcyBwcmVz
ZW50IGF0IGFsbCwgY2xlYXJUeXBlIGlzIGRpc2FibGVkLCB3ZSB3YW50IHRvIGF2b2lkIHRoaXMK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUg
aXMgSUUgT25seSwgYnV0IHNvIGFwcGFyZW50bHkgaXMgdGhpcyBjb2RlIHBhdGguLi4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoICJmaWx0ZXIi
ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHRoZXJlIGlz
IG5vIGZpbHRlciBzdHlsZSBhcHBsaWVkIGluIGEgY3NzIHJ1bGUsIHdlIGFyZSBkb25lCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50U3R5bGUgJiYgIWN1cnJlbnRT
dHlsZS5maWx0ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHNldCBuZXcg
ZmlsdGVyIHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5maWx0ZXIgPSByYWxw
aGEudGVzdCggZmlsdGVyICkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRl
ci5yZXBsYWNlKCByYWxwaGEsIG9wYWNpdHkgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsdGVyICsgIiAiICsgb3BhY2l0eTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
Owp9CgpqUXVlcnkoZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gVGhpcyBob29rIGNhbm5vdCBiZSBh
ZGRlZCB1bnRpbCBET00gcmVhZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0CiAgICAgICAgLy8g
Zm9yIGl0IGlzIG5vdCBydW4gdW50aWwgYWZ0ZXIgRE9NIHJlYWR5CiAgICAgICAgaWYgKCAhalF1
ZXJ5LnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCApIHsKICAgICAgICAgICAgICAgIGpRdWVy
eS5jc3NIb29rcy5tYXJnaW5SaWdodCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2
YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V29yayBhcm91bmQgYnkgdGVtcG9yYXJpbHkgc2V0dGluZyBlbGVtZW50IGRpc3BsYXkgdG8gaW5s
aW5lLWJsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3dhcCggZWxlbSwgeyAiZGlzcGxheSI6
ICJpbmxpbmUtYmxvY2siIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gY3VyQ1NTKCBlbGVtLCAibWFyZ2luLXJpZ2h0
IiwgIm1hcmdpblJpZ2h0IiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gZWxlbS5zdHlsZS5tYXJnaW5SaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwogICAgICAgIH0KfSk7CgppZiAoIGRvY3VtZW50
LmRlZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUgKSB7
CiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewogICAg
ICAgICAgICAgICAgdmFyIHJldCwgZGVmYXVsdFZpZXcsIGNvbXB1dGVkU3R5bGU7CgogICAgICAg
ICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSggcnVwcGVyLCAiLSQxIiApLnRvTG93ZXJDYXNl
KCk7CgogICAgICAgICAgICAgICAgaWYgKCAhKGRlZmF1bHRWaWV3ID0gZWxlbS5vd25lckRvY3Vt
ZW50LmRlZmF1bHRWaWV3KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIChjb21wdXRlZFN0
eWxlID0gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVl
KCBuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSAiIiAmJiAhalF1
ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBlbGVtICkg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1ZXJ5LnN0eWxlKCBl
bGVtLCBuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07Cn0KCmlmICggZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSApIHsKICAgICAgICBjdXJyZW50U3R5bGUgPSBm
dW5jdGlvbiggZWxlbSwgbmFtZSApIHsKICAgICAgICAgICAgICAgIHZhciBsZWZ0LAogICAgICAg
ICAgICAgICAgICAgICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJlbnRT
dHlsZVsgbmFtZSBdLAogICAgICAgICAgICAgICAgICAgICAgICByc0xlZnQgPSBlbGVtLnJ1bnRp
bWVTdHlsZSAmJiBlbGVtLnJ1bnRpbWVTdHlsZVsgbmFtZSBdLAogICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7CgogICAgICAgICAgICAgICAgLy8gRnJvbSB0aGUgYXdl
c29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcwogICAgICAgICAgICAgICAgLy8gaHR0cDovL2VyaWsu
ZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5MQoKICAg
ICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSByZWd1bGFyIHBpeGVs
IG51bWJlcgogICAgICAgICAgICAgICAgLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEgd2VpcmQg
ZW5kaW5nLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCiAgICAgICAgICAgICAgICBp
ZiAoICFybnVtcHgudGVzdCggcmV0ICkgJiYgcm51bS50ZXN0KCByZXQgKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcwogICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0ID0gc3R5bGUubGVmdDsKCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXQKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCByc0xlZnQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVudFN0eWxlLmxl
ZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGUubGVmdCA9IG5hbWUgPT09ICJmb250U2l6ZSIgPyAiMWVtIiA6IChyZXQgfHwgMCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCA9IHN0eWxlLnBpeGVsTGVmdCArICJweCI7CgogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzCiAgICAgICAgICAg
ICAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHJzTGVmdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJ1bnRp
bWVTdHlsZS5sZWZ0ID0gcnNMZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIgPyAiYXV0byIgOiBy
ZXQ7CiAgICAgICAgfTsKfQoKY3VyQ1NTID0gZ2V0Q29tcHV0ZWRTdHlsZSB8fCBjdXJyZW50U3R5
bGU7CgpmdW5jdGlvbiBnZXRXSCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7CgogICAgICAgIC8vIFN0
YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5CiAgICAgICAgdmFyIHZhbCA9IG5hbWUgPT09ICJ3aWR0
aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsCiAgICAgICAgICAgICAg
ICB3aGljaCA9IG5hbWUgPT09ICJ3aWR0aCIgPyBjc3NXaWR0aCA6IGNzc0hlaWdodDsKCiAgICAg
ICAgaWYgKCB2YWwgPiAwICkgewogICAgICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gImJvcmRl
ciIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCB3aGljaCwgZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZXh0cmEgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgLT0gcGFyc2VGbG9hdCgg
alF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgdGhpcyApICkgfHwgMDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBleHRyYSA9PT0gIm1hcmdpbiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyB0aGlz
ICkgKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgLT0gcGFyc2VGbG9hdCggalF1
ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyB0aGlzICsgIldpZHRoIiApICkgfHwgMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB2YWwgKyAicHgiOwogICAg
ICAgIH0KCiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBj
c3MgaWYgbmVjZXNzYXJ5CiAgICAgICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBuYW1lICk7
CiAgICAgICAgaWYgKCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgewogICAgICAgICAgICAgICAg
dmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdIHx8IDA7CiAgICAgICAgfQogICAgICAgIC8vIE5vcm1h
bGl6ZSAiIiwgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4dHJhCiAgICAgICAgdmFsID0gcGFyc2VG
bG9hdCggdmFsICkgfHwgMDsKCiAgICAgICAgLy8gQWRkIHBhZGRpbmcsIGJvcmRlciwgbWFyZ2lu
CiAgICAgICAgaWYgKCBleHRyYSApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCB3aGlj
aCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSBwYXJzZUZsb2F0
KCBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyB0aGlzICkgKSB8fCAwOwogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAicGFkZGluZyIgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJi
b3JkZXIiICsgdGhpcyArICJXaWR0aCIgKSApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gIm1hcmdpbiIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5j
c3MoIGVsZW0sIGV4dHJhICsgdGhpcyApICkgfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdmFsICsgInB4
IjsKfQoKaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewogICAgICAg
IGpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAg
ICAgICAgICB2YXIgd2lkdGggPSBlbGVtLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQgPSBlbGVtLm9mZnNldEhlaWdodDsKCiAgICAgICAgICAgICAgICByZXR1cm4g
KHdpZHRoID09PSAwICYmIGhlaWdodCA9PT0gMCkgfHwgKCFqUXVlcnkuc3VwcG9ydC5yZWxpYWJs
ZUhpZGRlbk9mZnNldHMgJiYgKGVsZW0uc3R5bGUuZGlzcGxheSB8fCBqUXVlcnkuY3NzKCBlbGVt
LCAiZGlzcGxheSIgKSkgPT09ICJub25lIik7CiAgICAgICAgfTsKCiAgICAgICAgalF1ZXJ5LmV4
cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuKCBlbGVtICk7CiAgICAgICAgfTsKfQoK
CgoKdmFyIHIyMCA9IC8lMjAvZywKICAgICAgICByYnJhY2tldCA9IC9cW1xdJC8sCiAgICAgICAg
ckNSTEYgPSAvXHI/XG4vZywKICAgICAgICByaGFzaCA9IC8jLiokLywKICAgICAgICByaGVhZGVy
cyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsIC8vIElFIGxlYXZlcyBhbiBcciBj
aGFyYWN0ZXIgYXQgRU9MCiAgICAgICAgcmlucHV0ID0gL14oPzpjb2xvcnxkYXRlfGRhdGV0aW1l
fGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8
c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLAogICAgICAgIC8vICM3NjUzLCAjODEy
NSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgogICAgICAgIHJsb2NhbFByb3RvY29s
ID0gL14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lk
Z2V0KTokLywKICAgICAgICBybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKICAgICAgICBy
cHJvdG9jb2wgPSAvXlwvXC8vLAogICAgICAgIHJxdWVyeSA9IC9cPy8sCiAgICAgICAgcnNjcmlw
dCA9IC88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dp
LAogICAgICAgIHJzZWxlY3RUZXh0YXJlYSA9IC9eKD86c2VsZWN0fHRleHRhcmVhKS9pLAogICAg
ICAgIHJzcGFjZXNBamF4ID0gL1xzKy8sCiAgICAgICAgcnRzID0gLyhbPyZdKV89W14mXSovLAog
ICAgICAgIHJ1cmwgPSAvXihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCsp
KT8pPy8sCgogICAgICAgIC8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKICAg
ICAgICBfbG9hZCA9IGpRdWVyeS5mbi5sb2FkLAoKICAgICAgICAvKiBQcmVmaWx0ZXJzCiAgICAg
ICAgICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChz
ZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKICAgICAgICAgKiAyKSBUaGVzZSBhcmUg
Y2FsbGVkOgogICAgICAgICAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnQKICAg
ICAgICAgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmlu
ZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpCiAgICAgICAgICogMykga2V5IGlzIHRoZSBkYXRh
VHlwZQogICAgICAgICAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCiAg
ICAgICAgICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUg
YW5kIFRIRU4gY29udGludWUgZG93biB0byAiKiIgaWYgbmVlZGVkCiAgICAgICAgICovCiAgICAg
ICAgcHJlZmlsdGVycyA9IHt9LAoKICAgICAgICAvKiBUcmFuc3BvcnRzIGJpbmRpbmdzCiAgICAg
ICAgICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZQogICAgICAgICAqIDIpIHRoZSBjYXRjaGFsbCBz
eW1ib2wgIioiIGNhbiBiZSB1c2VkCiAgICAgICAgICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQg
d2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gIioiIGlmIG5lZWRlZAogICAg
ICAgICAqLwogICAgICAgIHRyYW5zcG9ydHMgPSB7fSwKCiAgICAgICAgLy8gRG9jdW1lbnQgbG9j
YXRpb24KICAgICAgICBhamF4TG9jYXRpb24sCgogICAgICAgIC8vIERvY3VtZW50IGxvY2F0aW9u
IHNlZ21lbnRzCiAgICAgICAgYWpheExvY1BhcnRzLAogICAgICAgIAogICAgICAgIC8vIEF2b2lk
IGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50
IGFuZCBldmFkZSBjb21wcmVzc2lvbgogICAgICAgIGFsbFR5cGVzID0gWyIqLyJdICsgWyIqIl07
CgovLyAjODEzOCwgSUUgbWF5IHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwovLyBh
IGZpZWxkIGZyb20gd2luZG93LmxvY2F0aW9uIGlmIGRvY3VtZW50LmRvbWFpbiBoYXMgYmVlbiBz
ZXQKdHJ5IHsKICAgICAgICBhamF4TG9jYXRpb24gPSBsb2NhdGlvbi5ocmVmOwp9IGNhdGNoKCBl
ICkgewogICAgICAgIC8vIFVzZSB0aGUgaHJlZiBhdHRyaWJ1dGUgb2YgYW4gQSBlbGVtZW50CiAg
ICAgICAgLy8gc2luY2UgSUUgd2lsbCBtb2RpZnkgaXQgZ2l2ZW4gZG9jdW1lbnQubG9jYXRpb24K
ICAgICAgICBhamF4TG9jYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKICAg
ICAgICBhamF4TG9jYXRpb24uaHJlZiA9ICIiOwogICAgICAgIGFqYXhMb2NhdGlvbiA9IGFqYXhM
b2NhdGlvbi5ocmVmOwp9CgovLyBTZWdtZW50IGxvY2F0aW9uIGludG8gcGFydHMKYWpheExvY1Bh
cnRzID0gcnVybC5leGVjKCBhamF4TG9jYXRpb24udG9Mb3dlckNhc2UoKSApIHx8IFtdOwoKLy8g
QmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFq
YXhUcmFuc3BvcnQKZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1
cmUgKSB7CgogICAgICAgIC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVm
YXVsdHMgdG8gIioiCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24s
IGZ1bmMgKSB7CgogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9u
ICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9IGRhdGFUeXBl
RXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVFeHByZXNzaW9uID0g
IioiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVu
Y3Rpb24oIGZ1bmMgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFUeXBlcyA9
IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLnNwbGl0KCByc3BhY2VzQWpheCApLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZUJlZm9yZTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4
cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgZm9yKDsgaSA8IGxlbmd0aDsgaSsrICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBp
IF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY29udHJvbCBpZiB3ZSdy
ZSBhc2tlZCB0byBhZGQgYmVmb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YW55IGV4aXN0aW5nIGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFj
ZUJlZm9yZSA9IC9eXCsvLnRlc3QoIGRhdGFUeXBlICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBwbGFjZUJlZm9yZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFUeXBlID0gZGF0YVR5cGUuc3Vic3RyKCAxICkgfHwgIioiOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBd
IHx8IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2UgYWRkIHRv
IHRoZSBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0WyBwbGFjZUJlZm9yZSA/ICJ1bnNoaWZ0IiA6ICJwdXNoIiBdKCBmdW5jICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9CgovLyBC
YXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHMKZnVu
Y3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywg
b3JpZ2luYWxPcHRpb25zLCBqcVhIUiwKICAgICAgICAgICAgICAgIGRhdGFUeXBlIC8qIGludGVy
bmFsICovLCBpbnNwZWN0ZWQgLyogaW50ZXJuYWwgKi8gKSB7CgogICAgICAgIGRhdGFUeXBlID0g
ZGF0YVR5cGUgfHwgb3B0aW9ucy5kYXRhVHlwZXNbIDAgXTsKICAgICAgICBpbnNwZWN0ZWQgPSBp
bnNwZWN0ZWQgfHwge307CgogICAgICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7Cgog
ICAgICAgIHZhciBsaXN0ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdLAogICAgICAgICAgICAgICAg
aSA9IDAsCiAgICAgICAgICAgICAgICBsZW5ndGggPSBsaXN0ID8gbGlzdC5sZW5ndGggOiAwLAog
ICAgICAgICAgICAgICAgZXhlY3V0ZU9ubHkgPSAoIHN0cnVjdHVyZSA9PT0gcHJlZmlsdGVycyAp
LAogICAgICAgICAgICAgICAgc2VsZWN0aW9uOwoKICAgICAgICBmb3IoOyBpIDwgbGVuZ3RoICYm
ICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApOyBpKysgKSB7CiAgICAgICAgICAgICAgICBz
ZWxlY3Rpb24gPSBsaXN0WyBpIF0oIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsK
ICAgICAgICAgICAgICAgIC8vIElmIHdlIGdvdCByZWRpcmVjdGVkIHRvIGFub3RoZXIgZGF0YVR5
cGUKICAgICAgICAgICAgICAgIC8vIHdlIHRyeSB0aGVyZSBpZiBleGVjdXRpbmcgb25seSBhbmQg
bm90IGRvbmUgYWxyZWFkeQogICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0aW9uID09
PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZXhlY3V0ZU9ubHkg
fHwgaW5zcGVjdGVkWyBzZWxlY3Rpb24gXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxlY3Rpb24gPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZXMudW5z
aGlmdCggc2VsZWN0aW9uICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxP
cHRpb25zLCBqcVhIUiwgc2VsZWN0aW9uLCBpbnNwZWN0ZWQgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBJZiB3ZSdyZSBv
bmx5IGV4ZWN1dGluZyBvciBub3RoaW5nIHdhcyBzZWxlY3RlZAogICAgICAgIC8vIHdlIHRyeSB0
aGUgY2F0Y2hhbGwgZGF0YVR5cGUgaWYgbm90IGRvbmUgYWxyZWFkeQogICAgICAgIGlmICggKCBl
eGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICkgJiYgIWluc3BlY3RlZFsgIioiIF0gKSB7CiAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFs
T3B0aW9ucywganFYSFIsICIqIiwgaW5zcGVjdGVkICk7CiAgICAgICAgfQogICAgICAgIC8vIHVu
bmVjZXNzYXJ5IHdoZW4gb25seSBleGVjdXRpbmcgKHByZWZpbHRlcnMpCiAgICAgICAgLy8gYnV0
IGl0J2xsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbGxlciBpbiB0aGF0IGNhc2UKICAgICAgICByZXR1
cm4gc2VsZWN0aW9uOwp9CgovLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnMKLy8g
dGhhdCB0YWtlcyAiZmxhdCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpCi8vIEZp
eGVzICM5ODg3CmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkgewogICAgICAgIHZh
ciBrZXksIGRlZXAsCiAgICAgICAgICAgICAgICBmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0
dGluZ3MuZmxhdE9wdGlvbnMgfHwge307CiAgICAgICAgZm9yKCBrZXkgaW4gc3JjICkgewogICAg
ICAgICAgICAgICAgaWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICgg
ZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICAgIGlmICggZGVlcCApIHsKICAgICAgICAgICAgICAgIGpRdWVyeS5leHRl
bmQoIHRydWUsIHRhcmdldCwgZGVlcCApOwogICAgICAgIH0KfQoKalF1ZXJ5LmZuLmV4dGVuZCh7
CiAgICAgICAgbG9hZDogZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHsKICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYgX2xvYWQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7
CgogICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gYSByZXF1ZXN0IGlmIG5vIGVsZW1lbnRzIGFy
ZSBiZWluZyByZXF1ZXN0ZWQKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICF0aGlzLmxlbmd0
aCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgdmFyIG9mZiA9IHVybC5pbmRleE9mKCAiICIgKTsKICAgICAg
ICAgICAgICAgIGlmICggb2ZmID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
ZWxlY3RvciA9IHVybC5zbGljZSggb2ZmLCB1cmwubGVuZ3RoICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBhIEdFVCByZXF1ZXN0CiAgICAgICAgICAgICAgICB2
YXIgdHlwZSA9ICJHRVQiOwoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgcGFyYW1l
dGVyIHdhcyBwcm92aWRlZAogICAgICAgICAgICAgICAgaWYgKCBwYXJhbXMgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjawogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHVuZGVmaW5lZDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmcKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHBhcmFtcyA9PT0gIm9iamVjdCIgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0galF1ZXJ5LnBhcmFtKCBwYXJh
bXMsIGpRdWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlID0gIlBPU1QiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAg
ICAgICAgICAgIC8vIFJlcXVlc3QgdGhlIHJlbW90ZSBkb2N1bWVudAogICAgICAgICAgICAgICAg
alF1ZXJ5LmFqYXgoewogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5
cGU6ICJodG1sIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyYW1zLAogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDb21wbGV0ZSBjYWxsYmFjayAocmVzcG9uc2VUZXh0IGlzIHVz
ZWQgaW50ZXJuYWxseSkKICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9u
KCBqcVhIUiwgc3RhdHVzLCByZXNwb25zZVRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU3RvcmUgdGhlIHJlc3BvbnNlIGFzIHNwZWNpZmllZCBieSB0aGUganFYSFIg
b2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0ID0ganFY
SFIucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHN1
Y2Nlc3NmdWwsIGluamVjdCB0aGUgSFRNTCBpbnRvIGFsbCB0aGUgbWF0Y2hlZCBlbGVtZW50cwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgganFYSFIuaXNSZXNvbHZlZCgpICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIzQ4MjU6IEdldCB0
aGUgYWN0dWFsIHJlc3BvbnNlIGluIGNhc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGEgZGF0YUZpbHRlciBpcyBwcmVzZW50IGluIGFqYXhTZXR0aW5ncwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuZG9uZShmdW5jdGlvbigg
ciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
cG9uc2VUZXh0ID0gcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIGEgc2Vs
ZWN0b3Igd2FzIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5odG1sKCBzZWxlY3RvciA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGR1bW15IGRpdiB0byBob2xkIHRoZSByZXN1bHRz
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgi
PGRpdj4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGluamVjdCB0aGUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50IGluLCByZW1vdmlu
ZyB0aGUgc2NyaXB0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGFueSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9ycyBp
biBJRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5hcHBlbmQocmVzcG9uc2VUZXh0LnJlcGxhY2UocnNjcmlwdCwgIiIpKQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2NhdGUg
dGhlIHNwZWNpZmllZCBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHNlbGVjdG9yKSA6CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QsIGp1c3QgaW5qZWN0IHRo
ZSBmdWxsIHJlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZVRleHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVhY2goIGNhbGxiYWNrLCBbIHJl
c3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBzZXJpYWxpemU6
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5z
ZXJpYWxpemVBcnJheSgpICk7CiAgICAgICAgfSwKCiAgICAgICAgc2VyaWFsaXplQXJyYXk6IGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzID8galF1ZXJ5Lm1ha2VB
cnJheSggdGhpcy5lbGVtZW50cyApIDogdGhpczsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAg
ICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLm5hbWUgJiYgIXRoaXMuZGlzYWJsZWQgJiYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoIHRoaXMuY2hlY2tlZCB8fCByc2VsZWN0VGV4dGFyZWEudGVzdCggdGhpcy5ub2Rl
TmFtZSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW5wdXQu
dGVzdCggdGhpcy50eXBlICkgKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAu
bWFwKGZ1bmN0aW9uKCBpLCBlbGVtICl7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwg
PSBqUXVlcnkoIHRoaXMgKS52YWwoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2
YWwgPT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzQXJyYXkoIHZhbCApID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rp
b24oIHZhbCwgaSApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYs
ICJcclxuIiApIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGVsZW0ubmFt
ZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKICAgICAgICAgICAgICAg
IH0pLmdldCgpOwogICAgICAgIH0KfSk7CgovLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMg
Zm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cwpqUXVlcnkuZWFjaCggImFqYXhTdGFydCBh
amF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxp
dCggIiAiICksIGZ1bmN0aW9uKCBpLCBvICl7CiAgICAgICAgalF1ZXJ5LmZuWyBvIF0gPSBmdW5j
dGlvbiggZiApewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmluZCggbywgZiApOwogICAg
ICAgIH07Cn0pOwoKalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlvbiggaSwg
bWV0aG9kICkgewogICAgICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRh
LCBjYWxsYmFjaywgdHlwZSApIHsKICAgICAgICAgICAgICAgIC8vIHNoaWZ0IGFyZ3VtZW50cyBp
ZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCiAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCBkYXRhICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBl
IHx8IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGRhdGE7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZTogbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg
c3VjY2VzczogY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiB0eXBl
CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9Owp9KTsKCmpRdWVyeS5leHRlbmQoewoKICAg
ICAgICBnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkgewogICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgInNjcmlwdCIg
KTsKICAgICAgICB9LAoKICAgICAgICBnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxs
YmFjayApIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNh
bGxiYWNrLCAianNvbiIgKTsKICAgICAgICB9LAoKICAgICAgICAvLyBDcmVhdGVzIGEgZnVsbCBm
bGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAogICAgICAgIC8vIHdpdGggYm90aCBh
amF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy4KICAgICAgICAvLyBJZiB0YXJnZXQgaXMg
b21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLgogICAgICAgIGFqYXhTZXR1cDogZnVu
Y3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHNldHRpbmdz
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVj
dAogICAgICAgICAgICAgICAgICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4
U2V0dGluZ3MgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MKICAgICAgICAgICAgICAgICAgICAgICAgc2V0
dGluZ3MgPSB0YXJnZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGpRdWVyeS5h
amF4U2V0dGluZ3M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhamF4RXh0ZW5k
KCB0YXJnZXQsIHNldHRpbmdzICk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAg
ICAgIH0sCgogICAgICAgIGFqYXhTZXR0aW5nczogewogICAgICAgICAgICAgICAgdXJsOiBhamF4
TG9jYXRpb24sCiAgICAgICAgICAgICAgICBpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBh
amF4TG9jUGFydHNbIDEgXSApLAogICAgICAgICAgICAgICAgZ2xvYmFsOiB0cnVlLAogICAgICAg
ICAgICAgICAgdHlwZTogIkdFVCIsCiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogImFwcGxp
Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsCiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0
YTogdHJ1ZSwKICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLAogICAgICAgICAgICAgICAgLyoK
ICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDAsCiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLAog
ICAgICAgICAgICAgICAgZGF0YVR5cGU6IG51bGwsCiAgICAgICAgICAgICAgICB1c2VybmFtZTog
bnVsbCwKICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBudWxsLAogICAgICAgICAgICAgICAgY2Fj
aGU6IG51bGwsCiAgICAgICAgICAgICAgICB0cmFkaXRpb25hbDogZmFsc2UsCiAgICAgICAgICAg
ICAgICBoZWFkZXJzOiB7fSwKICAgICAgICAgICAgICAgICovCgogICAgICAgICAgICAgICAgYWNj
ZXB0czogewogICAgICAgICAgICAgICAgICAgICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRl
eHQveG1sIiwKICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogInRleHQvaHRtbCIsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ0ZXh0L3BsYWluIiwKICAgICAgICAgICAgICAgICAg
ICAgICAganNvbjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICIqIjogYWxsVHlwZXMKICAgICAgICAgICAgICAgIH0sCgogICAgICAg
ICAgICAgICAgY29udGVudHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgeG1sOiAveG1sLywK
ICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogL2h0bWwvLAogICAgICAgICAgICAgICAgICAg
ICAgICBqc29uOiAvanNvbi8KICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgcmVz
cG9uc2VGaWVsZHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgeG1sOiAicmVzcG9uc2VYTUwi
LAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IgogICAgICAgICAg
ICAgICAgfSwKCiAgICAgICAgICAgICAgICAvLyBMaXN0IG9mIGRhdGEgY29udmVydGVycwogICAg
ICAgICAgICAgICAgLy8gMSkga2V5IGZvcm1hdCBpcyAic291cmNlX3R5cGUgZGVzdGluYXRpb25f
dHlwZSIgKGEgc2luZ2xlIHNwYWNlIGluLWJldHdlZW4pCiAgICAgICAgICAgICAgICAvLyAyKSB0
aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZCBmb3Igc291cmNlX3R5cGUKICAgICAg
ICAgICAgICAgIGNvbnZlcnRlcnM6IHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZl
cnQgYW55dGhpbmcgdG8gdGV4dAogICAgICAgICAgICAgICAgICAgICAgICAiKiB0ZXh0Ijogd2lu
ZG93LlN0cmluZywKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRleHQgdG8gaHRtbCAodHJ1
ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAidGV4dCBodG1s
IjogdHJ1ZSwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2YWx1YXRlIHRleHQgYXMgYSBq
c29uIGV4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgInRleHQganNvbiI6IGpRdWVy
eS5wYXJzZUpTT04sCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0ZXh0IGFzIHht
bAogICAgICAgICAgICAgICAgICAgICAgICAidGV4dCB4bWwiOiBqUXVlcnkucGFyc2VYTUwKICAg
ICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgLy8gRm9yIG9wdGlvbnMgdGhhdCBzaG91
bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKICAgICAgICAgICAgICAgIC8vIHlvdSBjYW4gYWRkIHlv
dXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKICAgICAgICAgICAgICAgIC8vIGFuZCB3aGVu
IHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlCiAgICAgICAgICAgICAgICAvLyBkZWVw
IGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZCkKICAgICAgICAgICAgICAgIGZsYXRPcHRpb25zOiB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRydWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHVybDogdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGFq
YXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLAog
ICAgICAgIGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNw
b3J0cyApLAoKICAgICAgICAvLyBNYWluIG1ldGhvZAogICAgICAgIGFqYXg6IGZ1bmN0aW9uKCB1
cmwsIG9wdGlvbnMgKSB7CgogICAgICAgICAgICAgICAgLy8gSWYgdXJsIGlzIGFuIG9iamVjdCwg
c2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHVy
bCA9PT0gIm9iamVjdCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB1cmw7
CiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdAogICAg
ICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgdmFy
IC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKICAgICAgICAgICAgICAgICAgICAg
ICAgcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENhbGxiYWNrcyBjb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBD
b250ZXh0IGZvciBnbG9iYWwgZXZlbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mg
dGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2FzIHByb3ZpZGVkIGluIHRoZSBvcHRpb25zCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpZiBpdCdzIGEgRE9NIG5vZGUgb3IgYSBqUXVl
cnkgY29sbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQg
PSBjYWxsYmFja0NvbnRleHQgIT09IHMgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQgaW5zdGFuY2Vv
ZiBqUXVlcnkgKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOiBqUXVlcnkuZXZlbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIERlZmVycmVkcwogICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZURl
ZmVycmVkID0galF1ZXJ5Ll9EZWZlcnJlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBT
dGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXND
b2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LAogICAgICAgICAgICAgICAgICAgICAgICAvLyBpZk1v
ZGlmaWVkIGtleQogICAgICAgICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5LAogICAgICAg
ICAgICAgICAgICAgICAgICAvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQog
ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVycyA9IHt9LAogICAgICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sCiAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlc3BvbnNlIGhlYWRlcnMKICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VI
ZWFkZXJzU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zcG9ydAogICAgICAgICAgICAgICAgICAgICAg
ICB0cmFuc3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRpbWVvdXQgaGFuZGxlCiAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRUaW1lciwKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ3Jvc3MtZG9tYWluIGRldGVjdGlvbiB2YXJzCiAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnRzLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUganFYSFIgc3RhdGUKICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBU
byBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWQKICAgICAgICAgICAg
ICAgICAgICAgICAgZmlyZUdsb2JhbHMsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb3Ag
dmFyaWFibGUKICAgICAgICAgICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRmFrZSB4aHIKICAgICAgICAgICAgICAgICAgICAgICAganFYSFIgPSB7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5U3RhdGU6IDAsCgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENhY2hlcyB0aGUgaGVhZGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsbmFtZSA9
IG5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0
SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8IG5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhdyBzdHJp
bmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2g7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNwb25zZUhl
YWRlcnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoICggbWF0Y2ggPSByaGVhZGVycy5l
eGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJz
WyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRv
TG93ZXJDYXNlKCkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCA9PT0g
dW5kZWZpbmVkID8gbnVsbCA6IG1hdGNoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlcyByZXNwb25z
ZSBjb250ZW50LXR5cGUgaGVhZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Zl
cnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFzdGF0ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcy5taW1lVHlwZSA9IHR5cGU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW5jZWwgdGhlIHJlcXVlc3QK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1Rl
eHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0
ID0gc3RhdHVzVGV4dCB8fCAiYWJvcnQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0cmFuc3BvcnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5hYm9ydCggc3RhdHVzVGV4dCApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9uZSggMCwgc3RhdHVzVGV4dCApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAg
IC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQogICAgICAgICAgICAgICAg
Ly8gSXQgaXMgZGVmaW5lZCBoZXJlIGJlY2F1c2UganNsaW50IGNvbXBsYWlucyBpZiBpdCBpcyBk
ZWNsYXJlZAogICAgICAgICAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gKHdo
aWNoIHdvdWxkIGJlIG1vcmUgbG9naWNhbCBhbmQgcmVhZGFibGUpCiAgICAgICAgICAgICAgICBm
dW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVy
cyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlZCBvbmNlCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93CiAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlID0gMjsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYg
aXQgZXhpc3RzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGltZW91dFRpbWVyICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCggdGltZW91dFRpbWVy
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVj
dCB3aWxsIGJlIHVzZWQpCiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydCA9IHVuZGVm
aW5lZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnMK
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8
fCAiIjsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCByZWFkeVN0YXRlCiAgICAgICAg
ICAgICAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTdWNjZXNzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IG5hdGl2ZVN0
YXR1c1RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNw
b25zZXMgPyBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgOiB1bmRl
ZmluZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0YWc7CgogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0g
MzA0ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIElmLU1v
ZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmll
ZCBtb2RlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5pZk1vZGlmaWVk
ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBsYXN0
TW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkxhc3QtTW9kaWZpZWQiICkgKSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdID0gbGFzdE1vZGlmaWVkOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAoIGV0YWcgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkV0
YWciICkgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSA9IGV0YWc7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgbW9kaWZpZWQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA9PT0gMzA0ICkgewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAibm90bW9k
aWZpZWQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdWNjZXNz
ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBk
YXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gYWpheENvbnZlcnQoIHMsIHJlc3Bv
bnNlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXR1c1RleHQgPSAic3VjY2VzcyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHBhcnNlcmVycm9yCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAicGFyc2VyZXJy
b3IiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
ciA9IGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4dHJhY3QgZXJyb3IgZnJv
bSBzdGF0dXNUZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBub3Jt
YWxpemUgc3RhdHVzVGV4dCBhbmQgc3RhdHVzIGZvciBub24tYWJvcnRzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3IgPSBzdGF0dXNUZXh0OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKCAhc3RhdHVzVGV4dCB8fCBzdGF0dXMgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gImVycm9yIjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0CiAgICAgICAgICAg
ICAgICAgICAgICAgIGpxWEhSLnN0YXR1cyA9IHN0YXR1czsKICAgICAgICAgICAgICAgICAgICAg
ICAganFYSFIuc3RhdHVzVGV4dCA9ICIiICsgKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1Rl
eHQgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MvRXJyb3IKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBpc1N1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNz
LCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aCggY2Fs
bGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRl
bnQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnN0YXR1c0NvZGUoIHN0
YXR1c0NvZGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHVuZGVmaW5l
ZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4
IiArICggaXNTdWNjZXNzID8gIlN1Y2Nlc3MiIDogIkVycm9yIiApLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBz
dWNjZXNzIDogZXJyb3IgXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDb21wbGV0ZQogICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0
ZURlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1Rl
eHQgXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlcigg
ImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHMgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlcgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhT
dG9wIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBk
ZWZlcnJlZHMKICAgICAgICAgICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7CiAgICAg
ICAgICAgICAgICBqcVhIUi5zdWNjZXNzID0ganFYSFIuZG9uZTsKICAgICAgICAgICAgICAgIGpx
WEhSLmVycm9yID0ganFYSFIuZmFpbDsKICAgICAgICAgICAgICAgIGpxWEhSLmNvbXBsZXRlID0g
Y29tcGxldGVEZWZlcnJlZC5kb25lOwoKICAgICAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRl
bnQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlID0gZnVuY3Rpb24o
IG1hcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXAgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHN0YXRlIDwgMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciggdG1wIGluIG1hcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZVsgdG1wIF0gPSBbIHN0YXR1c0NvZGVbdG1wXSwg
bWFwW3RtcF0gXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG1wID0gbWFwWyBqcVhIUi5zdGF0dXMgXTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnRoZW4oIHRtcCwgdG1wICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfTsK
CiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgaGFzaCBjaGFyYWN0ZXIgKCM3NTMxOiBhbmQgc3Ry
aW5nIHByb21vdGlvbikKICAgICAgICAgICAgICAgIC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJv
dmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUgd2l0aCBwcm90b2NvbC1sZXNzIHVybHMpCiAgICAgICAg
ICAgICAgICAvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGUKICAg
ICAgICAgICAgICAgIHMudXJsID0gKCAoIHVybCB8fCBzLnVybCApICsgIiIgKS5yZXBsYWNlKCBy
aGFzaCwgIiIgKS5yZXBsYWNlKCBycHJvdG9jb2wsIGFqYXhMb2NQYXJ0c1sgMSBdICsgIi8vIiAp
OwoKICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QKICAgICAgICAgICAg
ICAgIHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICkudG9Mb3dl
ckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKTsKCiAgICAgICAgICAgICAgICAvLyBEZXRlcm1p
bmUgaWYgYSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlcgogICAgICAgICAgICAgICAg
aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHMuY3Jvc3NEb21haW4gPSAhISggcGFydHMgJiYKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoIHBhcnRzWyAxIF0gIT0gYWpheExvY1BhcnRzWyAxIF0gfHwgcGFydHNbIDIg
XSAhPSBhamF4TG9jUGFydHNbIDIgXSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCBwYXJ0c1sgMyBdIHx8ICggcGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgwIDog
NDQzICkgKSAhPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoIGFqYXhMb2NQYXJ0c1sgMyBdIHx8ICggYWpheExvY1BhcnRzWyAxIF0gPT09ICJodHRwOiIg
PyA4MCA6IDQ0MyApICkgKQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0
cmluZwogICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBl
b2Ygcy5kYXRhICE9PSAic3RyaW5nIiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRh
ID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICAvLyBBcHBseSBwcmVmaWx0ZXJzCiAgICAgICAgICAgICAgICBp
bnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFY
SFIgKTsKCiAgICAgICAgICAgICAgICAvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBh
IHByZWZpbGVyLCBzdG9wIHRoZXJlCiAgICAgICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkg
ewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgLy8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cg
aWYgYXNrZWQgdG8KICAgICAgICAgICAgICAgIGZpcmVHbG9iYWxzID0gcy5nbG9iYWw7CgogICAg
ICAgICAgICAgICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCiAgICAgICAgICAgICAgICBzLnR5cGUg
PSBzLnR5cGUudG9VcHBlckNhc2UoKTsKCiAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYg
cmVxdWVzdCBoYXMgY29udGVudAogICAgICAgICAgICAgICAgcy5oYXNDb250ZW50ID0gIXJub0Nv
bnRlbnQudGVzdCggcy50eXBlICk7CgogICAgICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGEgbmV3
IHNldCBvZiByZXF1ZXN0cwogICAgICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyAmJiBqUXVl
cnkuYWN0aXZlKysgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC50cmlnZ2VyKCAiYWpheFN0YXJ0IiApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50
CiAgICAgICAgICAgICAgICBpZiAoICFzLmhhc0NvbnRlbnQgKSB7CgogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcy5kYXRhICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSAr
IHMuZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjOTY4MjogcmVtb3Zl
IGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMuZGF0YTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGlmTW9kaWZpZWRLZXkgYmVm
b3JlIGFkZGluZyB0aGUgYW50aS1jYWNoZSBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgICAgICAg
ICAgaWZNb2RpZmllZEtleSA9IHMudXJsOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRk
IGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHMuY2FjaGUgPT09IGZhbHNlICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdHMgPSBqUXVlcnkubm93KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzLnVybC5yZXBsYWNlKCBydHMsICIkMV89IiAr
IHRzICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdGhpbmcgd2Fz
IHJlcGxhY2VkLCBhZGQgdGltZXN0YW1wIHRvIHRoZSBlbmQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzLnVybCA9IHJldCArICggKHJldCA9PT0gcy51cmwgKSA/ICggcnF1ZXJ5LnRl
c3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyB0cyA6ICIiICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZXQg
dGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnQKICAgICAgICAgICAgICAg
IGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8
fCBvcHRpb25zLmNvbnRlbnRUeXBlICkgewogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5z
ZXRSZXF1ZXN0SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2Ug
YW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCiAgICAg
ICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWZNb2RpZmllZEtleSA9IGlmTW9kaWZpZWRLZXkgfHwgcy51cmw7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1N
b2RpZmllZC1TaW5jZSIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5ldGFn
WyBpZk1vZGlmaWVkS2V5IF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRo
ZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGUKICAgICAgICAgICAgICAgIGpxWEhS
LnNldFJlcXVlc3RIZWFkZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICJBY2NlcHQiLAogICAg
ICAgICAgICAgICAgICAgICAgICBzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRh
VHlwZXNbMF0gXSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hY2NlcHRzWyBz
LmRhdGFUeXBlc1swXSBdICsgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxs
VHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcy5hY2NlcHRzWyAiKiIgXQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAv
LyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gcy5o
ZWFkZXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVy
KCBpLCBzLmhlYWRlcnNbIGkgXSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnQKICAgICAg
ICAgICAgICAgIGlmICggcy5iZWZvcmVTZW5kICYmICggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxi
YWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgc3RhdGUgPT09IDIgKSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuYWJvcnQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkcwogICAgICAg
ICAgICAgICAgZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9
ICkgewogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUlsgaSBdKCBzWyBpIF0gKTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBHZXQgdHJhbnNwb3J0CiAgICAgICAgICAg
ICAgICB0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0
cywgcywgb3B0aW9ucywganFYSFIgKTsKCiAgICAgICAgICAgICAgICAvLyBJZiBubyB0cmFuc3Bv
cnQsIHdlIGF1dG8tYWJvcnQKICAgICAgICAgICAgICAgIGlmICggIXRyYW5zcG9ydCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZG9uZSggLTEsICJObyBUcmFuc3BvcnQiICk7CiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRl
ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCBnbG9iYWwgZXZlbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBq
cVhIUiwgcyBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGltZW91dAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuYXN5bmMgJiYg
cy50aW1lb3V0ID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0
VGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAganFYSFIuYWJvcnQoICJ0aW1lb3V0IiApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sIHMudGltZW91dCApOwogICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3Bv
cnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BhZ2F0
ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmUKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHN0YXRlIDwgMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbmUoIC0xLCBlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU2ltcGx5IHJldGhyb3cgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5lcnJvciggZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVy
biBqcVhIUjsKICAgICAgICB9LAoKICAgICAgICAvLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9y
bSBlbGVtZW50cyBvciBhIHNldCBvZgogICAgICAgIC8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5
IHN0cmluZwogICAgICAgIHBhcmFtOiBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7CiAgICAg
ICAgICAgICAgICB2YXIgcyA9IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBhZGQgPSBmdW5j
dGlvbigga2V5LCB2YWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2
YWx1ZSApID8gdmFsdWUoKSA6IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2Rl
VVJJQ29tcG9uZW50KCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAg
ICAgICAgICAgIC8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIg
YmVoYXZpb3IuCiAgICAgICAgICAgICAgICBpZiAoIHRyYWRpdGlvbmFsID09PSB1bmRlZmluZWQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0
aW5ncy50cmFkaXRpb25hbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJ
ZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBm
b3JtIGVsZW1lbnRzLgogICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8
ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCiAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApOwogICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3
YXkgMS4zLjIgb3Igb2xkZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlkIGl0KSwgb3Ro
ZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuCiAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBwcmVmaXggaW4gYSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvbgogICAgICAgICAgICAgICAg
cmV0dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsKICAgICAgICB9Cn0pOwoK
ZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgewog
ICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIG9iaiApICkgewogICAgICAgICAgICAgICAgLy8g
U2VyaWFsaXplIGFycmF5IGl0ZW0uCiAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggb2JqLCBm
dW5jdGlvbiggaSwgdiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmFkaXRpb25h
bCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkKCBwcmVmaXgsIHYgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXJy
YXkgaXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbnVtZXJpYyBpbmRleCB0byByZXNvbHZlIGRl
c2VyaWFsaXphdGlvbiBhbWJpZ3VpdHkgaXNzdWVzLgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCByYWNrIChhcyBvZiAxLjAuMCkgY2FuJ3QgY3VycmVudGx5IGRl
c2VyaWFsaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVzdGVkIGFycmF5
cyBwcm9wZXJseSwgYW5kIGF0dGVtcHRpbmcgdG8gZG8gc28gbWF5IGNhdXNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYSBzZXJ2ZXIgZXJyb3IuIFBvc3NpYmxlIGZpeGVzIGFy
ZSB0byBtb2RpZnkgcmFjaydzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVz
ZXJpYWxpemF0aW9uIGFsZ29yaXRobSBvciB0byBwcm92aWRlIGFuIG9wdGlvbiBvciBmbGFnCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZm9yY2UgYXJyYXkgc2VyaWFsaXph
dGlvbiB0byBiZSBzaGFsbG93LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxk
UGFyYW1zKCBwcmVmaXggKyAiWyIgKyAoIHR5cGVvZiB2ID09PSAib2JqZWN0IiB8fCBqUXVlcnku
aXNBcnJheSh2KSA/IGkgOiAiIiApICsgIl0iLCB2LCB0cmFkaXRpb25hbCwgYWRkICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICB9IGVsc2Ug
aWYgKCAhdHJhZGl0aW9uYWwgJiYgb2JqICE9IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gIm9iamVj
dCIgKSB7CiAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uCiAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBvYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGJ1aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJh
ZGl0aW9uYWwsIGFkZCApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgLy8gU2VyaWFsaXplIHNjYWxhciBpdGVtLgogICAgICAgICAgICAgICAgYWRk
KCBwcmVmaXgsIG9iaiApOwogICAgICAgIH0KfQoKLy8gVGhpcyBpcyBzdGlsbCBvbiB0aGUgalF1
ZXJ5IG9iamVjdC4uLiBmb3Igbm93Ci8vIFdhbnQgdG8gbW92ZSB0aGlzIHRvIGpRdWVyeS5hamF4
IHNvbWUgZGF5CmpRdWVyeS5leHRlbmQoewoKICAgICAgICAvLyBDb3VudGVyIGZvciBob2xkaW5n
IHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXMKICAgICAgICBhY3RpdmU6IDAsCgogICAgICAg
IC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3QKICAgICAgICBs
YXN0TW9kaWZpZWQ6IHt9LAogICAgICAgIGV0YWc6IHt9Cgp9KTsKCi8qIEhhbmRsZXMgcmVzcG9u
c2VzIHRvIGFuIGFqYXggcmVxdWVzdDoKICogLSBzZXRzIGFsbCByZXNwb25zZVhYWCBmaWVsZHMg
YWNjb3JkaW5nbHkKICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdl
ZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSkKICogLSByZXR1cm5zIHRoZSBj
b3JyZXNwb25kaW5nIHJlc3BvbnNlCiAqLwpmdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBz
LCBqcVhIUiwgcmVzcG9uc2VzICkgewoKICAgICAgICB2YXIgY29udGVudHMgPSBzLmNvbnRlbnRz
LAogICAgICAgICAgICAgICAgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMsCiAgICAgICAgICAgICAg
ICByZXNwb25zZUZpZWxkcyA9IHMucmVzcG9uc2VGaWVsZHMsCiAgICAgICAgICAgICAgICBjdCwK
ICAgICAgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlLAogICAg
ICAgICAgICAgICAgZmlyc3REYXRhVHlwZTsKCiAgICAgICAgLy8gRmlsbCByZXNwb25zZVhYWCBm
aWVsZHMKICAgICAgICBmb3IoIHR5cGUgaW4gcmVzcG9uc2VGaWVsZHMgKSB7CiAgICAgICAgICAg
ICAgICBpZiAoIHR5cGUgaW4gcmVzcG9uc2VzICkgewogICAgICAgICAgICAgICAgICAgICAgICBq
cVhIUlsgcmVzcG9uc2VGaWVsZHNbdHlwZV0gXSA9IHJlc3BvbnNlc1sgdHlwZSBdOwogICAgICAg
ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5k
IGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3MKICAgICAgICB3aGlsZSggZGF0YVR5cGVz
WyAwIF0gPT09ICIqIiApIHsKICAgICAgICAgICAgICAgIGRhdGFUeXBlcy5zaGlmdCgpOwogICAg
ICAgICAgICAgICAgaWYgKCBjdCA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJjb250ZW50
LXR5cGUiICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKICAgICAgICBpZiAoIGN0
ICkgewogICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0u
dGVzdCggY3QgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZXMu
dW5zaGlmdCggdHlwZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0
ZWQgZGF0YVR5cGUKICAgICAgICBpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHsK
ICAgICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgLy8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlcwogICAg
ICAgICAgICAgICAgZm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArICIgIiAr
IGRhdGFUeXBlc1swXSBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFs
RGF0YVR5cGUgPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWZp
cnN0RGF0YVR5cGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REYXRh
VHlwZSA9IHR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZQogICAgICAgICAgICAgICAg
ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKICAgICAgICB9
CgogICAgICAgIC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKICAgICAgICAvLyBXZSBhZGQgdGhl
IGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZAogICAgICAgIC8vIGFuZCByZXR1cm4gdGhl
IGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKICAgICAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7CiAg
ICAgICAgICAgICAgICBpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlc1sgZmlu
YWxEYXRhVHlwZSBdOwogICAgICAgIH0KfQoKLy8gQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhl
IHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZQpmdW5jdGlvbiBhamF4Q29udmVydCgg
cywgcmVzcG9uc2UgKSB7CgogICAgICAgIC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3Zp
ZGVkCiAgICAgICAgaWYgKCBzLmRhdGFGaWx0ZXIgKSB7CiAgICAgICAgICAgICAgICByZXNwb25z
ZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKICAgICAgICB9CgogICAg
ICAgIHZhciBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywKICAgICAgICAgICAgICAgIGNvbnZlcnRl
cnMgPSB7fSwKICAgICAgICAgICAgICAgIGksCiAgICAgICAgICAgICAgICBrZXksCiAgICAgICAg
ICAgICAgICBsZW5ndGggPSBkYXRhVHlwZXMubGVuZ3RoLAogICAgICAgICAgICAgICAgdG1wLAog
ICAgICAgICAgICAgICAgLy8gQ3VycmVudCBhbmQgcHJldmlvdXMgZGF0YVR5cGVzCiAgICAgICAg
ICAgICAgICBjdXJyZW50ID0gZGF0YVR5cGVzWyAwIF0sCiAgICAgICAgICAgICAgICBwcmV2LAog
ICAgICAgICAgICAgICAgLy8gQ29udmVyc2lvbiBleHByZXNzaW9uCiAgICAgICAgICAgICAgICBj
b252ZXJzaW9uLAogICAgICAgICAgICAgICAgLy8gQ29udmVyc2lvbiBmdW5jdGlvbgogICAgICAg
ICAgICAgICAgY29udiwKICAgICAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZnVuY3Rpb25zICh0
cmFuc2l0aXZlIGNvbnZlcnNpb24pCiAgICAgICAgICAgICAgICBjb252MSwKICAgICAgICAgICAg
ICAgIGNvbnYyOwoKICAgICAgICAvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgY2hhaW4KICAg
ICAgICBmb3IoIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgogICAgICAgICAgICAgICAgLy8g
Q3JlYXRlIGNvbnZlcnRlcnMgbWFwCiAgICAgICAgICAgICAgICAvLyB3aXRoIGxvd2VyY2FzZWQg
a2V5cwogICAgICAgICAgICAgICAgaWYgKCBpID09PSAxICkgewogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IoIGtleSBpbiBzLmNvbnZlcnRlcnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYoIHR5cGVvZiBrZXkgPT09ICJzdHJpbmciICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXSA9
IHMuY29udmVydGVyc1sga2V5IF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgLy8gR2V0IHRoZSBkYXRhVHlwZXMKICAgICAgICAgICAgICAgIHByZXYgPSBjdXJyZW50Owog
ICAgICAgICAgICAgICAgY3VycmVudCA9IGRhdGFUeXBlc1sgaSBdOwoKICAgICAgICAgICAgICAg
IC8vIElmIGN1cnJlbnQgaXMgYXV0byBkYXRhVHlwZSwgdXBkYXRlIGl0IHRvIHByZXYKICAgICAg
ICAgICAgICAgIGlmKCBjdXJyZW50ID09PSAiKiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnQgPSBwcmV2OwogICAgICAgICAgICAgICAgLy8gSWYgbm8gYXV0byBhbmQgZGF0YVR5
cGVzIGFyZSBhY3R1YWxseSBkaWZmZXJlbnQKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHBy
ZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gR2V0IHRoZSBjb252ZXJ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lv
biA9IHByZXYgKyAiICIgKyBjdXJyZW50OwogICAgICAgICAgICAgICAgICAgICAgICBjb252ID0g
Y29udmVydGVyc1sgY29udmVyc2lvbiBdIHx8IGNvbnZlcnRlcnNbICIqICIgKyBjdXJyZW50IF07
CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkaXJlY3QgY29udmVy
dGVyLCBzZWFyY2ggdHJhbnNpdGl2ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNv
bnYgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udjIgPSB1bmRlZmluZWQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBjb252MSBpbiBjb252ZXJ0ZXJz
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gY29udjEu
c3BsaXQoICIgIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0bXBbIDAgXSA9PT0gcHJldiB8fCB0bXBbIDAgXSA9PT0gIioiICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252MiA9IGNvbnZlcnRlcnNbIHRt
cFsxXSArICIgIiArIGN1cnJlbnQgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjb252MiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252MSA9IGNvbnZlcnRlcnNbIGNvbnYxIF07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjb252MSA9PT0gdHJ1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252MjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBj
b252MiA9PT0gdHJ1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252MTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
d2UgZm91bmQgbm8gY29udmVydGVyLCBkaXNwYXRjaCBhbiBlcnJvcgogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICEoIGNvbnYgfHwgY29udjIgKSApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXJyb3IoICJObyBjb252ZXJzaW9uIGZyb20gIiArIGNvbnZlcnNp
b24ucmVwbGFjZSgiICIsIiB0byAiKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIGZvdW5kIGNvbnZlcnRlciBpcyBub3QgYW4gZXF1aXZh
bGVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICE9PSB0cnVlICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgd2l0aCAxIG9yIDIgY29udmVy
dGVycyBhY2NvcmRpbmdseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
ID0gY29udiA/IGNvbnYoIHJlc3BvbnNlICkgOiBjb252MiggY29udjEocmVzcG9uc2UpICk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIHJlc3BvbnNlOwp9CgoKCgp2YXIganNjID0galF1ZXJ5Lm5vdygpLAogICAgICAg
IGpzcmUgPSAvKFw9KVw/KCZ8JCl8XD9cPy9pOwoKLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5ncwpq
UXVlcnkuYWpheFNldHVwKHsKICAgICAgICBqc29ucDogImNhbGxiYWNrIiwKICAgICAgICBqc29u
cENhbGxiYWNrOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZXhw
YW5kbyArICJfIiArICgganNjKysgKTsKICAgICAgICB9Cn0pOwoKLy8gRGV0ZWN0LCBub3JtYWxp
emUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCmpRdWVy
eS5hamF4UHJlZmlsdGVyKCAianNvbiBqc29ucCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRp
bmdzLCBqcVhIUiApIHsKCiAgICAgICAgdmFyIGluc3BlY3REYXRhID0gcy5jb250ZW50VHlwZSA9
PT0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIgJiYKICAgICAgICAgICAgICAg
ICggdHlwZW9mIHMuZGF0YSA9PT0gInN0cmluZyIgKTsKCiAgICAgICAgaWYgKCBzLmRhdGFUeXBl
c1sgMCBdID09PSAianNvbnAiIHx8CiAgICAgICAgICAgICAgICBzLmpzb25wICE9PSBmYWxzZSAm
JiAoIGpzcmUudGVzdCggcy51cmwgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluc3BlY3REYXRhICYmIGpzcmUudGVzdCggcy5kYXRhICkgKSApIHsKCiAgICAgICAgICAgICAg
ICB2YXIgcmVzcG9uc2VDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25wQ2Fs
bGJhY2sgPSBzLmpzb25wQ2FsbGJhY2sgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/IHMuanNvbnBDYWxsYmFjaygp
IDogcy5qc29ucENhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IHdp
bmRvd1sganNvbnBDYWxsYmFjayBdLAogICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBzLnVy
bCwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHMuZGF0YSwKICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZSA9ICIkMSIgKyBqc29ucENhbGxiYWNrICsgIiQyIjsKCiAgICAgICAg
ICAgICAgICBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAg
ICB1cmwgPSB1cmwucmVwbGFjZSgganNyZSwgcmVwbGFjZSApOwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHMudXJsID09PSB1cmwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBpbnNwZWN0RGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoIGpzcmUsIHJlcGxhY2UgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBzLmRhdGEgPT09IGRhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBZGQgY2FsbGJhY2sgbWFudWFsbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVybCArPSAoL1w/Ly50ZXN0KCB1cmwgKSA/ICImIiA6ICI/IikgKyBzLmpz
b25wICsgIj0iICsganNvbnBDYWxsYmFjazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBzLnVybCA9IHVybDsKICAgICAgICAgICAgICAgIHMuZGF0YSA9IGRhdGE7CgogICAg
ICAgICAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFjawogICAgICAgICAgICAgICAgd2luZG93WyBq
c29ucENhbGxiYWNrIF0gPSBmdW5jdGlvbiggcmVzcG9uc2UgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gWyByZXNwb25zZSBdOwogICAgICAgICAgICAgICAg
fTsKCiAgICAgICAgICAgICAgICAvLyBDbGVhbi11cCBmdW5jdGlvbgogICAgICAgICAgICAgICAg
anFYSFIuYWx3YXlzKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQg
Y2FsbGJhY2sgYmFjayB0byBwcmV2aW91cyB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICB3
aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSA9IHByZXZpb3VzOwogICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNG
dW5jdGlvbiggcHJldmlvdXMgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAv
LyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0
aW9uCiAgICAgICAgICAgICAgICBzLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl0gPSBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBqc29ucENhbGxi
YWNrICsgIiB3YXMgbm90IGNhbGxlZCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsKICAgICAg
ICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gZm9yY2UganNvbiBkYXRhVHlwZQogICAg
ICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSA9ICJqc29uIjsKCiAgICAgICAgICAgICAgICAv
LyBEZWxlZ2F0ZSB0byBzY3JpcHQKICAgICAgICAgICAgICAgIHJldHVybiAic2NyaXB0IjsKICAg
ICAgICB9Cn0pOwoKCgoKLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGUKalF1ZXJ5LmFqYXhTZXR1
cCh7CiAgICAgICAgYWNjZXB0czogewogICAgICAgICAgICAgICAgc2NyaXB0OiAidGV4dC9qYXZh
c2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBh
cHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiCiAgICAgICAgfSwKICAgICAgICBjb250ZW50czogewog
ICAgICAgICAgICAgICAgc2NyaXB0OiAvamF2YXNjcmlwdHxlY21hc2NyaXB0LwogICAgICAgIH0s
CiAgICAgICAgY29udmVydGVyczogewogICAgICAgICAgICAgICAgInRleHQgc2NyaXB0IjogZnVu
Y3Rpb24oIHRleHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFs
KCB0ZXh0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0OwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0KfSk7CgovLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5k
IGdsb2JhbApqUXVlcnkuYWpheFByZWZpbHRlciggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgewog
ICAgICAgIGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgcy5j
YWNoZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7CiAg
ICAgICAgICAgICAgICBzLnR5cGUgPSAiR0VUIjsKICAgICAgICAgICAgICAgIHMuZ2xvYmFsID0g
ZmFsc2U7CiAgICAgICAgfQp9KTsKCi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydApq
UXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKHMpIHsKCiAgICAgICAgLy8g
VGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0cwogICAg
ICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKCiAgICAgICAgICAgICAgICB2YXIgc2NyaXB0LAog
ICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSggImhlYWQiIClbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50OwoKICAgICAgICAgICAgICAgIHJldHVybiB7CgogICAgICAgICAgICAgICAgICAgICAgICBz
ZW5kOiBmdW5jdGlvbiggXywgY2FsbGJhY2sgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzY3JpcHQiICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9ICJhc3luYyI7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5zY3JpcHRDaGFyc2V0ICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmNoYXJzZXQgPSBzLnNj
cmlwdENoYXJzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuc3JjID0gcy51cmw7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBoYW5kbGVycyBmb3IgYWxsIGJyb3dzZXJzCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzQWJvcnQgfHwgIXNjcmlwdC5yZWFkeVN0
YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoIHNjcmlwdC5yZWFkeVN0YXRlICkgKSB7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUg
bWVtb3J5IGxlYWsgaW4gSUUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxs
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVt
b3ZlIHRoZSBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBoZWFkICYmIHNjcmlwdC5wYXJlbnROb2RlICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQucmVtb3ZlQ2hpbGQo
IHNjcmlwdCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBE
ZXJlZmVyZW5jZSB0aGUgc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmlwdCA9IHVuZGVmaW5lZDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrIGlmIG5vdCBhYm9ydAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBVc2UgaW5zZXJ0QmVmb3JlIGluc3RlYWQgb2YgYXBwZW5kQ2hp
bGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5IGFuZCAj
NDM3OCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUo
IHNjcmlwdCwgaGVhZC5maXJzdENoaWxkICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgog
ICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBzY3JpcHQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkKCAwLCAxICk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9OwogICAgICAgIH0KfSk7CgoKCgp2YXIgLy8gIzUyODA6IEludGVybmV0IEV4cGxvcmVyIHdp
bGwga2VlcCBjb25uZWN0aW9ucyBhbGl2ZSBpZiB3ZSBkb24ndCBhYm9ydCBvbiB1bmxvYWQKICAg
ICAgICB4aHJPblVubG9hZEFib3J0ID0gd2luZG93LkFjdGl2ZVhPYmplY3QgPyBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgIC8vIEFib3J0IGFsbCBwZW5kaW5nIHJlcXVlc3RzCiAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIga2V5IGluIHhockNhbGxiYWNrcyApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgeGhyQ2FsbGJhY2tzWyBrZXkgXSggMCwgMSApOwogICAgICAgICAgICAgICAgfQog
ICAgICAgIH0gOiBmYWxzZSwKICAgICAgICB4aHJJZCA9IDAsCiAgICAgICAgeGhyQ2FsbGJhY2tz
OwoKLy8gRnVuY3Rpb25zIHRvIGNyZWF0ZSB4aHJzCmZ1bmN0aW9uIGNyZWF0ZVN0YW5kYXJkWEhS
KCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxI
dHRwUmVxdWVzdCgpOwogICAgICAgIH0gY2F0Y2goIGUgKSB7fQp9CgpmdW5jdGlvbiBjcmVhdGVB
Y3RpdmVYSFIoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2lu
ZG93LkFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MSFRUUCIgKTsKICAgICAgICB9IGNhdGNo
KCBlICkge30KfQoKLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9iamVjdAovLyAoVGhpcyBpcyBzdGls
bCBhdHRhY2hlZCB0byBhamF4U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpCmpR
dWVyeS5hamF4U2V0dGluZ3MueGhyID0gd2luZG93LkFjdGl2ZVhPYmplY3QgPwogICAgICAgIC8q
IE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVybHkKICAgICAgICAgKiBpbXBsZW1lbnQgdGhlIFhN
TEh0dHBSZXF1ZXN0IGluIElFNyAoY2FuJ3QgcmVxdWVzdCBsb2NhbCBmaWxlcyksCiAgICAgICAg
ICogc28gd2UgdXNlIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gaXQgaXMgYXZhaWxhYmxlCiAgICAg
ICAgICogQWRkaXRpb25hbGx5IFhNTEh0dHBSZXF1ZXN0IGNhbiBiZSBkaXNhYmxlZCBpbiBJRTcv
SUU4IHNvCiAgICAgICAgICogd2UgbmVlZCBhIGZhbGxiYWNrLgogICAgICAgICAqLwogICAgICAg
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTG9jYWwgJiYgY3Jl
YXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVhdGVBY3RpdmVYSFIoKTsKICAgICAgICB9IDoKICAgICAg
ICAvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1c2UgdGhlIHN0YW5kYXJkIFhNTEh0dHBSZXF1
ZXN0IG9iamVjdAogICAgICAgIGNyZWF0ZVN0YW5kYXJkWEhSOwoKLy8gRGV0ZXJtaW5lIHN1cHBv
cnQgcHJvcGVydGllcwooZnVuY3Rpb24oIHhociApIHsKICAgICAgICBqUXVlcnkuZXh0ZW5kKCBq
UXVlcnkuc3VwcG9ydCwgewogICAgICAgICAgICAgICAgYWpheDogISF4aHIsCiAgICAgICAgICAg
ICAgICBjb3JzOiAhIXhociAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHhociApCiAgICAgICAg
fSk7Cn0pKCBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpICk7CgovLyBDcmVhdGUgdHJhbnNwb3J0
IGlmIHRoZSBicm93c2VyIGNhbiBwcm92aWRlIGFuIHhocgppZiAoIGpRdWVyeS5zdXBwb3J0LmFq
YXggKSB7CgogICAgICAgIGpRdWVyeS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBzICkgewogICAg
ICAgICAgICAgICAgLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhy
b3VnaCBYTUxIdHRwUmVxdWVzdAogICAgICAgICAgICAgICAgaWYgKCAhcy5jcm9zc0RvbWFpbiB8
fCBqUXVlcnkuc3VwcG9ydC5jb3JzICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNh
bGxiYWNrOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IHhocgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IHMueGhyKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVuIHRoZSBzb2NrZXQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhc3NpbmcgbnVsbCB1c2Vy
bmFtZSwgZ2VuZXJhdGVzIGEgbG9naW4gcG9wdXAgb24gT3BlcmEgKCMyODY1KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnVzZXJuYW1lICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3Blbiggcy50eXBl
LCBzLnVybCwgcy5hc3luYywgcy51c2VybmFtZSwgcy5wYXNzd29yZCApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5
bmMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSBjdXN0b20gZmllbGRzIGlm
IHByb3ZpZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMu
eGhyRmllbGRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBpIGluIHMueGhyRmllbGRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoclsgaSBdID0gcy54aHJGaWVsZHNbIGkg
XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5taW1lVHlwZSAmJiB4
aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoIHMubWltZVR5cGUgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0
cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdl
IHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0
IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2Ug
aGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyJYLVJlcXVlc3RlZC1X
aXRoIl0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdID0gIlhNTEh0dHBSZXF1ZXN0IjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIGFuIGV4dHJhIHRyeS9jYXRjaCBmb3IgY3Jvc3Mg
ZG9tYWluIHJlcXVlc3RzIGluIEZpcmVmb3ggMwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSBpbiBoZWFkZXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBo
ZWFkZXJzWyBpIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCgg
XyApIHt9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gc2Vu
ZCB0aGUgcmVxdWVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uIHdoaWNoIGlzIGFjdHVhbGx5CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGluIGpRdWVyeS5hamF4IChz
byBubyB0cnkvY2F0Y2ggaGVyZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlzdGVuZXIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oIF8sIGlz
QWJvcnQgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXR1c1RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWw7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94
IHRocm93cyBleGNlcHRpb25zIHdoZW4gYWNjZXNzaW5nIHByb3BlcnRpZXMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYW4geGhyIHdoZW4gYSBu
ZXR3b3JrIGVycm9yIG9jY3VyZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaHR0cDovL2hlbHBmdWwua25vYnMtZGlhbHMuY29tL2luZGV4LnBocC9D
b21wb25lbnRfcmV0dXJuZWRfZmFpbHVyZV9jb2RlOl8weDgwMDQwMTExXyhOU19FUlJPUl9OT1Rf
QVZBSUxBQkxFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXYXMgbmV2ZXIgY2FsbGVkIGFuZCBpcyBhYm9ydGVkIG9yIGNvbXBsZXRlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBjYWxsYmFjayAmJiAoIGlzQWJvcnQgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSApIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPbmx5IGNhbGxlZCBvbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEbyBub3Qga2VlcCBhcyBhY3RpdmUgYW55bW9yZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGUg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBqUXVlcnkubm9vcDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSB4aHJDYWxsYmFja3NbIGhhbmRsZSBdOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhbiBhYm9ydAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Fib3J0ICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBYm9ydCBpdCBtYW51YWxseSBpZiBuZWVkZWQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4aHIuYWJvcnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzID0geGhyLnN0YXR1czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJz
ID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMg
PSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeG1sID0geGhyLnJlc3BvbnNlWE1MOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4bWwgJiYg
eG1sLmRvY3VtZW50RWxlbWVudCAvKiAjNDk1OCAqLyApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNwb25zZXMueG1sID0geG1sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlcy50ZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVm
b3ggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
dGF0dXNUZXh0IGZvciBmYXVsdHkgY3Jvc3MtZG9tYWluIHJlcXVlc3RzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoKCBlICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG5vcm1hbGl6ZSB3aXRoIFdlYmtpdCBnaXZpbmcgYW4gZW1wdHkgc3RhdHVzVGV4dAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRmlsdGVyIHN0YXR1cyBmb3Igbm9uIHN0YW5kYXJkIGJlaGF2aW9ycwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUgZGF0
YTogYXNzdW1lIGEgc3VjY2VzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoc3VjY2VzcyB3aXRoIG5vIGRh
dGEgd29uJ3QgZ2V0IG5vdGlmaWVkLCB0aGF0J3MgdGhlIGJlc3Qgd2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY2FuIGRvIGdpdmVuIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFzdGF0dXMgJiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3BvbnNlcy50ZXh0ID8gMjAwIDogNDA0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJRSAtICMxNDUwOiBzb21ldGltZXMgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hv
dWxkIGJlIDIwNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDEyMjMgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMjA0OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wbGV0ZSggLTEsIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgY29tcGxldGUgaWYgbmVlZGVkCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9u
c2VzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBsZXRlKCBzdGF0dXMsIHN0YXR1c1RleHQsIHJlc3BvbnNlcywgcmVzcG9uc2VI
ZWFkZXJzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gc3luYyBtb2RlIG9y
IGl0J3MgaW4gY2FjaGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCBoYXMgYmVlbiByZXRyaWV2ZWQgZGlyZWN0bHkgKElFNiAmIElFNykKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gbWFudWFsbHkgZmlyZSB0
aGUgY2FsbGJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IXMuYXN5bmMgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSArK3hocklkOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ3JlYXRlIHRoZSBhY3RpdmUgeGhycyBjYWxsYmFja3MgbGlzdCBpZiBuZWVkZWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQg
YXR0YWNoIHRoZSB1bmxvYWQgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXhockNhbGxiYWNrcyApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHho
ckNhbGxiYWNrcyA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB3aW5kb3cgKS51bmxvYWQoIHhock9uVW5s
b2FkQWJvcnQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQWRkIHRvIGxpc3Qgb2YgYWN0aXZlIHhocnMgY2FsbGJhY2tzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyQ2Fs
bGJhY2tzWyBoYW5kbGUgXSA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjYWxsYmFjazsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxi
YWNrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjaygwLDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9KTsKfQoKCgoKdmFyIGVsZW1kaXNwbGF5ID0g
e30sCiAgICAgICAgaWZyYW1lLCBpZnJhbWVEb2MsCiAgICAgICAgcmZ4dHlwZXMgPSAvXig/OnRv
Z2dsZXxzaG93fGhpZGUpJC8sCiAgICAgICAgcmZ4bnVtID0gL14oWytcLV09KT8oW1xkKy5cLV0r
KShbYS16JV0qKSQvaSwKICAgICAgICB0aW1lcklkLAogICAgICAgIGZ4QXR0cnMgPSBbCiAgICAg
ICAgICAgICAgICAvLyBoZWlnaHQgYW5pbWF0aW9ucwogICAgICAgICAgICAgICAgWyAiaGVpZ2h0
IiwgIm1hcmdpblRvcCIsICJtYXJnaW5Cb3R0b20iLCAicGFkZGluZ1RvcCIsICJwYWRkaW5nQm90
dG9tIiBdLAogICAgICAgICAgICAgICAgLy8gd2lkdGggYW5pbWF0aW9ucwogICAgICAgICAgICAg
ICAgWyAid2lkdGgiLCAibWFyZ2luTGVmdCIsICJtYXJnaW5SaWdodCIsICJwYWRkaW5nTGVmdCIs
ICJwYWRkaW5nUmlnaHQiIF0sCiAgICAgICAgICAgICAgICAvLyBvcGFjaXR5IGFuaW1hdGlvbnMK
ICAgICAgICAgICAgICAgIFsgIm9wYWNpdHkiIF0KICAgICAgICBdLAogICAgICAgIGZ4Tm93OwoK
alF1ZXJ5LmZuLmV4dGVuZCh7CiAgICAgICAgc2hvdzogZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgdmFyIGVsZW0sIGRpc3BsYXk7CgogICAgICAg
ICAgICAgICAgaWYgKCBzcGVlZCB8fCBzcGVlZCA9PT0gMCApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggZ2VuRngoInNob3ciLCAzKSwgc3BlZWQsIGVhc2lu
ZywgY2FsbGJhY2spOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMCwgaiA9IHRoaXMubGVuZ3RoOyBpIDwgajsgaSsrICkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzW2ldOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc3R5bGUgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBpbmxp
bmUgZGlzcGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBy
dWxlcyBvciBub3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWpRdWVyeS5fZGF0YShlbGVtLCAib2xkZGlzcGxheSIpICYmIGRpc3BsYXkgPT09ICJub25lIiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxh
eSA9IGVsZW0uc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5v
bmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGEgc3R5bGVz
aGVldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBicm93c2VyIHN0eWxlIGlzCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igc3VjaCBhbiBlbGVtZW50CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICIiICYm
IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSIgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YShlbGVtLCAi
b2xkZGlzcGxheSIsIGRlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBs
b29wCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZs
b3cKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBqOyBpKysgKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbaV07CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZSApIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAi
IiB8fCBkaXNwbGF5ID09PSAibm9uZSIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9IGpRdWVyeS5fZGF0YShlbGVt
LCAib2xkZGlzcGxheSIpIHx8ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgaGlkZTogZnVuY3Rpb24oIHNwZWVkLCBlYXNp
bmcsIGNhbGxiYWNrICkgewogICAgICAgICAgICAgICAgaWYgKCBzcGVlZCB8fCBzcGVlZCA9PT0g
MCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggZ2VuRngo
ImhpZGUiLCAzKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2spOwoKICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaiA9IHRoaXMu
bGVuZ3RoOyBpIDwgajsgaSsrICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdGhpc1tpXS5zdHlsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGhpc1tpXSwgImRpc3BsYXkiICk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXNwbGF5ICE9PSAibm9u
ZSIgJiYgIWpRdWVyeS5fZGF0YSggdGhpc1tpXSwgIm9sZGRpc3BsYXkiICkgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggdGhp
c1tpXSwgIm9sZGRpc3BsYXkiLCBkaXNwbGF5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGRp
c3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvdwogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBpID0gMDsgaSA8IGo7IGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRoaXNbaV0uc3R5bGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzW2ldLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
LAoKICAgICAgICAvLyBTYXZlIHRoZSBvbGQgdG9nZ2xlIGZ1bmN0aW9uCiAgICAgICAgX3RvZ2ds
ZTogalF1ZXJ5LmZuLnRvZ2dsZSwKCiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbiggZm4sIGZuMiwg
Y2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICB2YXIgYm9vbCA9IHR5cGVvZiBmbiA9PT0gImJv
b2xlYW4iOwoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oZm4pICYmIGpR
dWVyeS5pc0Z1bmN0aW9uKGZuMikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rv
Z2dsZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CgogICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggZm4gPT0gbnVsbCB8fCBib29sICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVh
Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRl
ID0gYm9vbCA/IGZuIDogalF1ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpWyBzdGF0ZSA/ICJzaG93IiA6ICJoaWRlIiBd
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZShnZW5GeCgidG9nZ2xlIiwgMyks
IGZuLCBmbjIsIGNhbGxiYWNrKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwg
dG8sIGVhc2luZywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0
ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLCAwKS5zaG93KCkuZW5kKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hbmltYXRlKHtvcGFjaXR5OiB0b30sIHNwZWVk
LCBlYXNpbmcsIGNhbGxiYWNrKTsKICAgICAgICB9LAoKICAgICAgICBhbmltYXRlOiBmdW5jdGlv
biggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CiAgICAgICAgICAgICAgICB2YXIg
b3B0YWxsID0galF1ZXJ5LnNwZWVkKHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKCiAgICAgICAg
ICAgICAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICkgKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIG9wdGFsbC5jb21wbGV0ZSwgWyBmYWxzZSBd
ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRG8gbm90IGNoYW5nZSBy
ZWZlcmVuY2VkIHByb3BlcnRpZXMgYXMgcGVyLXByb3BlcnR5IGVhc2luZyB3aWxsIGJlIGxvc3QK
ICAgICAgICAgICAgICAgIHByb3AgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApOwoKICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzWyBvcHRhbGwucXVldWUgPT09IGZhbHNlID8gImVhY2giIDog
InF1ZXVlIiBdKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBYWFggJ3Ro
aXMnIGRvZXMgbm90IGFsd2F5cyBoYXZlIGEgbm9kZU5hbWUgd2hlbiBydW5uaW5nIHRoZQogICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0IHN1aXRlCgogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5Ll9tYXJrKCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHQgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0
YWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFbGVtZW50ID0gdGhpcy5u
b2RlVHlwZSA9PT0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW4gPSBp
c0VsZW1lbnQgJiYgalF1ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSwgdmFsLCBwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc3BsYXksIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMsIHN0
YXJ0LCBlbmQsIHVuaXQ7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIHN0b3JlIHBl
ciBwcm9wZXJ0eSBlYXNpbmcgYW5kIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZW4gYW4gYW5pbWF0
aW9uIGlzIGNvbXBsZXRlCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5hbmltYXRlZFByb3Bl
cnRpZXMgPSB7fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHAgaW4gcHJvcCApIHsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkgbmFtZSBub3JtYWxp
emF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1l
bENhc2UoIHAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHAgIT09IG5h
bWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wWyBuYW1l
IF0gPSBwcm9wWyBwIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgcHJvcFsgcCBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcHJvcFsgbmFtZSBdOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXNpbmcgcmVzb2x1dGlvbjogcGVyIHByb3BlcnR5
ID4gb3B0LnNwZWNpYWxFYXNpbmcgPiBvcHQuZWFzaW5nID4gJ3N3aW5nJyAoZGVmYXVsdCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5hbmltYXRlZFBy
b3BlcnRpZXNbIG5hbWUgXSA9IHZhbFsgMSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsID0gcHJvcFsgbmFtZSBdID0gdmFsWyAwIF07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdC5hbmltYXRlZFByb3BlcnRpZXNbIG5hbWUgXSA9IG9wdC5zcGVjaWFsRWFz
aW5nICYmIG9wdC5zcGVjaWFsRWFzaW5nWyBuYW1lIF0gfHwgb3B0LmVhc2luZyB8fCAnc3dpbmcn
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB2YWwgPT09ICJoaWRlIiAmJiBoaWRkZW4gfHwgdmFsID09PSAic2hv
dyIgJiYgIWhpZGRlbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBvcHQuY29tcGxldGUuY2FsbCggdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0VsZW1l
bnQgJiYgKCBuYW1lID09PSAiaGVpZ2h0IiB8fCBuYW1lID09PSAid2lkdGgiICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBub3Ro
aW5nIHNuZWFrcyBvdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgb3ZlcmZs
b3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gb3ZlcmZsb3dZIGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5vdmVyZmxvdyA9IFsgdGhp
cy5zdHlsZS5vdmVyZmxvdywgdGhpcy5zdHlsZS5vdmVyZmxvd1gsIHRoaXMuc3R5bGUub3ZlcmZs
b3dZIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGRp
c3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWlnaHQvd2lkdGgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVs
ZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jc3MoIHRoaXMsICJkaXNwbGF5IiApID09PSAiaW5s
aW5lIiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5jc3MoIHRoaXMsICJmbG9hdCIgKSA9PT0gIm5vbmUiICkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3Vw
cG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICJpbmxp
bmUtYmxvY2siOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXkoIHRoaXMubm9kZU5hbWUgKTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aW5saW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2stbGV2ZWwg
ZWxlbWVudHMgbmVlZCB0byBiZSBpbmxpbmUgd2l0aCBsYXlvdXQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJp
bmxpbmUiICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
c3R5bGUuem9vbSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9wdC5vdmVyZmxvdyAhPSBudWxsICkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVu
IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggcCBpbiBwcm9wICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcg
alF1ZXJ5LmZ4KCB0aGlzLCBvcHQsIHAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWwgPSBwcm9wWyBwIF07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cmZ4dHlwZXMudGVzdCh2YWwpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZVsgdmFsID09PSAidG9nZ2xlIiA/IGhpZGRlbiA/ICJzaG93IiA6ICJoaWRlIiA6IHZh
bCBdKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJmeG51bS5leGVjKCB2YWwg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZS5jdXIo
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcnRzICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBw
YXJzZUZsb2F0KCBwYXJ0c1syXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bml0ID0gcGFydHNbM10gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwIF0g
PyAiIiA6ICJweCIgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcHV0ZSBzdGFydGluZyB2YWx1ZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHVuaXQgIT09ICJweCIgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnN0eWxlKCB0aGlzLCBwLCAoZW5kIHx8IDEpICsgdW5pdCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAoKGVuZCB8
fCAxKSAvIGUuY3VyKCkpICogc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0aGlzLCBwLCBzdGFydCArIHVu
aXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhICs9
Ly09IHRva2VuIHdhcyBwcm92aWRlZCwgd2UncmUgZG9pbmcgYSByZWxhdGl2ZSBhbmltYXRpb24K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJ0
c1sxXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQgPSAoIChwYXJ0c1sgMSBdID09PSAiLT0iID8gLTEgOiAxKSAqIGVuZCApICsg
c3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VzdG9t
KCBzdGFydCwgZW5kLCB1bml0ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZS5jdXN0b20oIHN0YXJ0LCB2YWwsICIiICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgSlMg
c3RyaWN0IGNvbXBsaWFuY2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBzdG9wOiBmdW5jdGlvbiggY2xl
YXJRdWV1ZSwgZ290b0VuZCApIHsKICAgICAgICAgICAgICAgIGlmICggY2xlYXJRdWV1ZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZShbXSk7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgdGltZXJzID0galF1ZXJ5LnRpbWVycywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpID0gdGltZXJzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y2xlYXIgbWFya2VyIGNvdW50ZXJzIGlmIHdlIGtub3cgdGhleSB3b24ndCBiZQogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFnb3RvRW5kICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5fdW5tYXJrKCB0cnVlLCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbaV0uZWxlbSA9PT0gdGhpcyApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnb3RvRW5kKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcmNlIHRoZSBu
ZXh0IHN0ZXAgdG8gYmUgdGhlIGxhc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZXJzW2ldKHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVycy5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAg
ICAgICAvLyBzdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNu
J3QgZm9yY2VkCiAgICAgICAgICAgICAgICBpZiAoICFnb3RvRW5kICkgewogICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmRlcXVldWUoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKICAgICAgICB9Cgp9KTsKCi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBz
eW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKZnVuY3Rpb24gY3JlYXRlRnhOb3co
KSB7CiAgICAgICAgc2V0VGltZW91dCggY2xlYXJGeE5vdywgMCApOwogICAgICAgIHJldHVybiAo
IGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7Cn0KCmZ1bmN0aW9uIGNsZWFyRnhOb3coKSB7CiAgICAg
ICAgZnhOb3cgPSB1bmRlZmluZWQ7Cn0KCi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRl
IGEgc3RhbmRhcmQgYW5pbWF0aW9uCmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBudW0gKSB7CiAgICAg
ICAgdmFyIG9iaiA9IHt9OwoKICAgICAgICBqUXVlcnkuZWFjaCggZnhBdHRycy5jb25jYXQuYXBw
bHkoW10sIGZ4QXR0cnMuc2xpY2UoMCxudW0pKSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICBvYmpbIHRoaXMgXSA9IHR5cGU7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBvYmo7Cn0K
Ci8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKalF1ZXJ5LmVhY2go
ewogICAgICAgIHNsaWRlRG93bjogZ2VuRngoInNob3ciLCAxKSwKICAgICAgICBzbGlkZVVwOiBn
ZW5GeCgiaGlkZSIsIDEpLAogICAgICAgIHNsaWRlVG9nZ2xlOiBnZW5GeCgidG9nZ2xlIiwgMSks
CiAgICAgICAgZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LAogICAgICAgIGZhZGVPdXQ6IHsg
b3BhY2l0eTogImhpZGUiIH0sCiAgICAgICAgZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiAidG9nZ2xl
IiB9Cn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKICAgICAgICBqUXVlcnkuZm5bIG5hbWUg
XSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwog
ICAgICAgIH07Cn0pOwoKalF1ZXJ5LmV4dGVuZCh7CiAgICAgICAgc3BlZWQ6IGZ1bmN0aW9uKCBz
cGVlZCwgZWFzaW5nLCBmbiApIHsKICAgICAgICAgICAgICAgIHZhciBvcHQgPSBzcGVlZCAmJiB0
eXBlb2Ygc3BlZWQgPT09ICJvYmplY3QiID8galF1ZXJ5LmV4dGVuZCh7fSwgc3BlZWQpIDogewog
ICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCAp
ICYmIHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogc3BlZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1
ZXJ5LmlzRnVuY3Rpb24oZWFzaW5nKSAmJiBlYXNpbmcKICAgICAgICAgICAgICAgIH07CgogICAg
ICAgICAgICAgICAgb3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygb3B0
LmR1cmF0aW9uID09PSAibnVtYmVyIiA/IG9wdC5kdXJhdGlvbiA6CiAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzID8galF1ZXJ5LmZ4LnNwZWVk
c1tvcHQuZHVyYXRpb25dIDogalF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDsKCiAgICAgICAgICAg
ICAgICAvLyBRdWV1ZWluZwogICAgICAgICAgICAgICAgb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsK
ICAgICAgICAgICAgICAgIG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCBub1VubWFyayApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9w
dC5xdWV1ZSAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmRlcXVldWUoIHRoaXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
bm9Vbm1hcmsgIT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5fdW5tYXJrKCB0aGlzICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH07CgogICAgICAgICAgICAgICAgcmV0dXJuIG9wdDsKICAgICAgICB9LAoKICAgICAg
ICBlYXNpbmc6IHsKICAgICAgICAgICAgICAgIGxpbmVhcjogZnVuY3Rpb24oIHAsIG4sIGZpcnN0
TnVtLCBkaWZmICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3ROdW0gKyBk
aWZmICogcDsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzd2luZzogZnVuY3Rp
b24oIHAsIG4sIGZpcnN0TnVtLCBkaWZmICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKCgtTWF0aC5jb3MocCpNYXRoLlBJKS8yKSArIDAuNSkgKiBkaWZmICsgZmlyc3ROdW07CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgdGltZXJzOiBbXSwKCiAgICAgICAg
Zng6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wICkgewogICAgICAgICAgICAgICAgdGhp
cy5vcHRpb25zID0gb3B0aW9uczsKICAgICAgICAgICAgICAgIHRoaXMuZWxlbSA9IGVsZW07CiAg
ICAgICAgICAgICAgICB0aGlzLnByb3AgPSBwcm9wOwoKICAgICAgICAgICAgICAgIG9wdGlvbnMu
b3JpZyA9IG9wdGlvbnMub3JpZyB8fCB7fTsKICAgICAgICB9Cgp9KTsKCmpRdWVyeS5meC5wcm90
b3R5cGUgPSB7CiAgICAgICAgLy8gU2ltcGxlIGZ1bmN0aW9uIGZvciBzZXR0aW5nIGEgc3R5bGUg
dmFsdWUKICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCB0
aGlzLm9wdGlvbnMuc3RlcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25z
LnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIChqUXVlcnkuZnguc3RlcFt0aGlzLnByb3BdIHx8IGpRdWVyeS5m
eC5zdGVwLl9kZWZhdWx0KSggdGhpcyApOwogICAgICAgIH0sCgogICAgICAgIC8vIEdldCB0aGUg
Y3VycmVudCBzaXplCiAgICAgICAgY3VyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlm
ICggdGhpcy5lbGVtW3RoaXMucHJvcF0gIT0gbnVsbCAmJiAoIXRoaXMuZWxlbS5zdHlsZSB8fCB0
aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXSA9PSBudWxsKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZWxlbVsgdGhpcy5wcm9wIF07CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgdmFyIHBhcnNlZCwKICAgICAgICAgICAgICAgICAgICAgICAgciA9IGpR
dWVyeS5jc3MoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7CiAgICAgICAgICAgICAgICAvLyBFbXB0
eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kICJhdXRvIiBhcmUgY29udmVydGVkIHRvIDAs
CiAgICAgICAgICAgICAgICAvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCki
IGFyZSByZXR1cm5lZCBhcyBpcywKICAgICAgICAgICAgICAgIC8vIHNpbXBsZSB2YWx1ZXMgc3Vj
aCBhcyAiMTBweCIgYXJlIHBhcnNlZCB0byBGbG9hdC4KICAgICAgICAgICAgICAgIHJldHVybiBp
c05hTiggcGFyc2VkID0gcGFyc2VGbG9hdCggciApICkgPyAhciB8fCByID09PSAiYXV0byIgPyAw
IDogciA6IHBhcnNlZDsKICAgICAgICB9LAoKICAgICAgICAvLyBTdGFydCBhbiBhbmltYXRpb24g
ZnJvbSBvbmUgbnVtYmVyIHRvIGFub3RoZXIKICAgICAgICBjdXN0b206IGZ1bmN0aW9uKCBmcm9t
LCB0bywgdW5pdCApIHsKICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICAg
ICAgICAgICAgICAgICAgZnggPSBqUXVlcnkuZng7CgogICAgICAgICAgICAgICAgdGhpcy5zdGFy
dFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpOwogICAgICAgICAgICAgICAgdGhpcy5zdGFy
dCA9IGZyb207CiAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IHRvOwogICAgICAgICAgICAgICAg
dGhpcy51bml0ID0gdW5pdCB8fCB0aGlzLnVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyB0aGlz
LnByb3AgXSA/ICIiIDogInB4IiApOwogICAgICAgICAgICAgICAgdGhpcy5ub3cgPSB0aGlzLnN0
YXJ0OwogICAgICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXRlID0gMDsKCiAgICAgICAg
ICAgICAgICBmdW5jdGlvbiB0KCBnb3RvRW5kICkgewogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5zdGVwKGdvdG9FbmQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHQuZWxlbSA9IHRoaXMuZWxlbTsKCiAgICAgICAgICAgICAgICBpZiAoIHQoKSAmJiBqUXVl
cnkudGltZXJzLnB1c2godCkgJiYgIXRpbWVySWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVySWQgPSBzZXRJbnRlcnZhbCggZngudGljaywgZnguaW50ZXJ2YWwgKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBTaW1wbGUgJ3Nob3cnIGZ1bmN0aW9uCiAg
ICAgICAgc2hvdzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB3aGVy
ZSB3ZSBzdGFydGVkLCBzbyB0aGF0IHdlIGNhbiBnbyBiYWNrIHRvIGl0IGxhdGVyCiAgICAgICAg
ICAgICAgICB0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdID0galF1ZXJ5LnN0eWxlKCB0aGlz
LmVsZW0sIHRoaXMucHJvcCApOwogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNob3cgPSB0
cnVlOwoKICAgICAgICAgICAgICAgIC8vIEJlZ2luIHRoZSBhbmltYXRpb24KICAgICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIHN0YXJ0IGF0IGEgc21hbGwgd2lkdGgvaGVpZ2h0IHRv
IGF2b2lkIGFueQogICAgICAgICAgICAgICAgLy8gZmxhc2ggb2YgY29udGVudAogICAgICAgICAg
ICAgICAgdGhpcy5jdXN0b20odGhpcy5wcm9wID09PSAid2lkdGgiIHx8IHRoaXMucHJvcCA9PT0g
ImhlaWdodCIgPyAxIDogMCwgdGhpcy5jdXIoKSk7CgogICAgICAgICAgICAgICAgLy8gU3RhcnQg
Ynkgc2hvd2luZyB0aGUgZWxlbWVudAogICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzLmVsZW0g
KS5zaG93KCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gU2ltcGxlICdoaWRlJyBmdW5jdGlvbgog
ICAgICAgIGhpZGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgd2hl
cmUgd2Ugc3RhcnRlZCwgc28gdGhhdCB3ZSBjYW4gZ28gYmFjayB0byBpdCBsYXRlcgogICAgICAg
ICAgICAgICAgdGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXSA9IGpRdWVyeS5zdHlsZSggdGhp
cy5lbGVtLCB0aGlzLnByb3AgKTsKICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oaWRlID0g
dHJ1ZTsKCiAgICAgICAgICAgICAgICAvLyBCZWdpbiB0aGUgYW5pbWF0aW9uCiAgICAgICAgICAg
ICAgICB0aGlzLmN1c3RvbSh0aGlzLmN1cigpLCAwKTsKICAgICAgICB9LAoKICAgICAgICAvLyBF
YWNoIHN0ZXAgb2YgYW4gYW5pbWF0aW9uCiAgICAgICAgc3RlcDogZnVuY3Rpb24oIGdvdG9FbmQg
KSB7CiAgICAgICAgICAgICAgICB2YXIgdCA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBl
bGVtID0gdGhpcy5lbGVtLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhpcy5v
cHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICBpLCBuOwoKICAgICAgICAgICAgICAgIGlm
ICggZ290b0VuZCB8fCB0ID49IG9wdGlvbnMuZHVyYXRpb24gKyB0aGlzLnN0YXJ0VGltZSApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3cgPSB0aGlzLmVuZDsKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXRlID0gMTsKICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy51cGRhdGUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYW5p
bWF0ZWRQcm9wZXJ0aWVzWyB0aGlzLnByb3AgXSA9IHRydWU7CgogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBpIGluIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzICkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXNbaV0g
IT09IHRydWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25l
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRvbmUgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIG92ZXJmbG93CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLm92ZXJmbG93ICE9IG51bGwgJiYg
IWpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MgKSB7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIFsgIiIsICJYIiwgIlkiIF0sIGZ1bmN0
aW9uIChpbmRleCwgdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5zdHlsZVsgIm92ZXJmbG93IiArIHZhbHVlIF0gPSBvcHRpb25zLm92
ZXJmbG93W2luZGV4XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSGlkZSB0aGUgZWxlbWVudCBpZiB0aGUgImhpZGUiIG9wZXJhdGlvbiB3
YXMgZG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5oaWRl
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW0p
LmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwcm9wZXJ0aWVzLCBpZiB0aGUgaXRlbSBo
YXMgYmVlbiBoaWRkZW4gb3Igc2hvd24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG9wdGlvbnMuaGlkZSB8fCBvcHRpb25zLnNob3cgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgcCBpbiBvcHRpb25zLmFuaW1hdGVkUHJvcGVy
dGllcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnN0eWxlKCBlbGVtLCBwLCBvcHRpb25zLm9yaWdbcF0gKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvbXBs
ZXRlIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb21w
bGV0ZS5jYWxsKCBlbGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjbGFzc2ljYWwgZWFzaW5nIGNhbm5vdCBiZSB1c2VkIHdp
dGggYW4gSW5maW5pdHkgZHVyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRp
b25zLmR1cmF0aW9uID09IEluZmluaXR5ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMubm93ID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gdCAtIHRoaXMuc3RhcnRUaW1lOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBuIC8gb3B0aW9ucy5kdXJhdGlv
bjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSB0aGUgZWFzaW5n
IGZ1bmN0aW9uLCBkZWZhdWx0cyB0byBzd2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucG9zID0galF1ZXJ5LmVhc2luZ1sgb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXNb
IHRoaXMucHJvcCBdIF0oIHRoaXMuc3RhdGUsIG4sIDAsIDEsIG9wdGlvbnMuZHVyYXRpb24gKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IHRoaXMuc3RhcnQgKyAo
KHRoaXMuZW5kIC0gdGhpcy5zdGFydCkgKiB0aGlzLnBvcyk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSB0aGUgbmV4dCBzdGVwIG9m
IHRoZSBhbmltYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoKTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9Cn07
CgpqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZngsIHsKICAgICAgICB0aWNrOiBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgIGZvciAoIHZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzLCBpID0gMCA7
IGkgPCB0aW1lcnMubGVuZ3RoIDsgKytpICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICF0aW1lcnNbaV0oKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcnMu
c3BsaWNlKGktLSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICBpZiAoICF0aW1lcnMubGVuZ3RoICkgewogICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZnguc3RvcCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0s
CgogICAgICAgIGludGVydmFsOiAxMywKCiAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICAgICBjbGVhckludGVydmFsKCB0aW1lcklkICk7CiAgICAgICAgICAgICAgICB0aW1l
cklkID0gbnVsbDsKICAgICAgICB9LAoKICAgICAgICBzcGVlZHM6IHsKICAgICAgICAgICAgICAg
IHNsb3c6IDYwMCwKICAgICAgICAgICAgICAgIGZhc3Q6IDIwMCwKICAgICAgICAgICAgICAgIC8v
IERlZmF1bHQgc3BlZWQKICAgICAgICAgICAgICAgIF9kZWZhdWx0OiA0MDAKICAgICAgICB9LAoK
ICAgICAgICBzdGVwOiB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiBmdW5jdGlvbiggZnggKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZnguZWxlbSwgIm9wYWNpdHki
LCBmeC5ub3cgKTsKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgX2RlZmF1bHQ6
IGZ1bmN0aW9uKCBmeCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmeC5lbGVtLnN0
eWxlICYmIGZ4LmVsZW0uc3R5bGVbIGZ4LnByb3AgXSAhPSBudWxsICkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ4LmVsZW0uc3R5bGVbIGZ4LnByb3AgXSA9IChmeC5wcm9wID09
PSAid2lkdGgiIHx8IGZ4LnByb3AgPT09ICJoZWlnaHQiID8gTWF0aC5tYXgoMCwgZngubm93KSA6
IGZ4Lm5vdykgKyBmeC51bml0OwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ4LmVsZW1bIGZ4LnByb3AgXSA9IGZ4Lm5vdzsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfSk7
CgppZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHByLmZpbHRlcnMgKSB7CiAgICAgICAgalF1
ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGZuLmVsZW07CiAgICAgICAg
ICAgICAgICB9KS5sZW5ndGg7CiAgICAgICAgfTsKfQoKLy8gVHJ5IHRvIHJlc3RvcmUgdGhlIGRl
ZmF1bHQgZGlzcGxheSB2YWx1ZSBvZiBhbiBlbGVtZW50CmZ1bmN0aW9uIGRlZmF1bHREaXNwbGF5
KCBub2RlTmFtZSApIHsKCiAgICAgICAgaWYgKCAhZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gKSB7
CgogICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5LAogICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtID0galF1ZXJ5KCAiPCIgKyBub2RlTmFtZSArICI+IiApLmFwcGVuZFRv
KCBib2R5ICksCiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBlbGVtLmNzcyggImRp
c3BsYXkiICk7CgogICAgICAgICAgICAgICAgZWxlbS5yZW1vdmUoKTsKCiAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgc2ltcGxlIHdheSBmYWlscywKICAgICAgICAgICAgICAgIC8vIGdldCBlbGVt
ZW50J3MgcmVhbCBkZWZhdWx0IGRpc3BsYXkgYnkgYXR0YWNoaW5nIGl0IHRvIGEgdGVtcCBpZnJh
bWUKICAgICAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gIm5vbmUiIHx8IGRpc3BsYXkgPT09
ICIiICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBpZnJhbWUgdG8gdXNlIHlldCwg
c28gY3JlYXRlIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlmcmFtZSApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCAiaWZyYW1lIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS5m
cmFtZUJvcmRlciA9IGlmcmFtZS53aWR0aCA9IGlmcmFtZS5oZWlnaHQgPSAwOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZENoaWxk
KCBpZnJhbWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNhY2hlYWJs
ZSBjb3B5IG9mIHRoZSBpZnJhbWUgZG9jdW1lbnQgb24gZmlyc3QgY2FsbC4KICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSUUgYW5kIE9wZXJhIHdpbGwgYWxsb3cgdXMgdG8gcmV1c2UgdGhlIGlm
cmFtZURvYyB3aXRob3V0IHJlLXdyaXRpbmcgdGhlIGZha2UgSFRNTAogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBkb2N1bWVudCB0byBpdDsgV2ViS2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyBy
ZXVzaW5nIHRoZSBpZnJhbWUgZG9jdW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWlmcmFtZURvYyB8fCAhaWZyYW1lLmNyZWF0ZUVsZW1lbnQgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWZyYW1lRG9jID0gKCBpZnJhbWUuY29udGVudFdpbmRvdyB8fCBpZnJh
bWUuY29udGVudERvY3VtZW50ICkuZG9jdW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWZyYW1lRG9jLndyaXRlKCAoIGRvY3VtZW50LmNvbXBhdE1vZGUgPT09ICJDU1MxQ29t
cGF0IiA/ICI8IWRvY3R5cGUgaHRtbD4iIDogIiIgKSArICI8aHRtbD48Ym9keT4iICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jLmNsb3NlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBpZnJhbWVEb2Mu
Y3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFt
ZURvYy5ib2R5LmFwcGVuZENoaWxkKCBlbGVtICk7CgogICAgICAgICAgICAgICAgICAgICAgICBk
aXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICk7CgogICAgICAgICAgICAgICAg
ICAgICAgICBib2R5LnJlbW92ZUNoaWxkKCBpZnJhbWUgKTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKICAgICAg
ICAgICAgICAgIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTsKICAgICAgICB9Cgog
ICAgICAgIHJldHVybiBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXTsKfQoKCgoKdmFyIHJ0YWJsZSA9
IC9edCg/OmFibGV8ZHxoKSQvaSwKICAgICAgICBycm9vdCA9IC9eKD86Ym9keXxodG1sKSQvaTsK
CmlmICggImdldEJvdW5kaW5nQ2xpZW50UmVjdCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
ICkgewogICAgICAgIGpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKICAg
ICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXSwgYm94OwoKICAgICAgICAgICAgICAgIGlm
ICggb3B0aW9ucyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbiggaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkub2Zm
c2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8ICFl
bGVtLm93bmVyRG9jdW1lbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZWxlbSA9PT0gZWxlbS5v
d25lckRvY3VtZW50LmJvZHkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkub2Zmc2V0LmJvZHlPZmZzZXQoIGVsZW0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBlbGVtLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQoKICAgICAgICAg
ICAgICAgIHZhciBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OwoKICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgZGlzY29ubmVjdGVkIERPTSBub2RlCiAg
ICAgICAgICAgICAgICBpZiAoICFib3ggfHwgIWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxl
bSApICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94ID8geyB0b3A6IGJveC50
b3AsIGxlZnQ6IGJveC5sZWZ0IH0gOiB7IHRvcDogMCwgbGVmdDogMCB9OwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHZhciBib2R5ID0gZG9jLmJvZHksCiAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbiA9IGdldFdpbmRvdyhkb2MpLAogICAgICAgICAgICAgICAgICAgICAgICBj
bGllbnRUb3AgID0gZG9jRWxlbS5jbGllbnRUb3AgIHx8IGJvZHkuY2xpZW50VG9wICB8fCAwLAog
ICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRMZWZ0ID0gZG9jRWxlbS5jbGllbnRMZWZ0IHx8
IGJvZHkuY2xpZW50TGVmdCB8fCAwLAogICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3Ag
ID0gd2luLnBhZ2VZT2Zmc2V0IHx8IGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYmIGRvY0VsZW0u
c2Nyb2xsVG9wICB8fCBib2R5LnNjcm9sbFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldCB8fCBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBk
b2NFbGVtLnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0LAogICAgICAgICAgICAgICAgICAg
ICAgICB0b3AgID0gYm94LnRvcCAgKyBzY3JvbGxUb3AgIC0gY2xpZW50VG9wLAogICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0ID0gYm94LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdDsK
CiAgICAgICAgICAgICAgICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwogICAgICAg
IH07Cgp9IGVsc2UgewogICAgICAgIGpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9u
cyApIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXTsKCiAgICAgICAgICAgICAg
ICBpZiAoIG9wdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oIGkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8
fCAhZWxlbS5vd25lckRvY3VtZW50ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGVsZW0gPT09IGVs
ZW0ub3duZXJEb2N1bWVudC5ib2R5ICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5Lm9mZnNldC5ib2R5T2Zmc2V0KCBlbGVtICk7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5pbml0aWFsaXplKCk7CgogICAgICAgICAgICAgICAg
dmFyIGNvbXB1dGVkU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9
IGVsZW0ub2Zmc2V0UGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICBwcmV2T2Zmc2V0UGFy
ZW50ID0gZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gZWxlbS5vd25lckRvY3Vt
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGRvYy5ib2R5LAogICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0VmlldyA9IGRvYy5kZWZhdWx0VmlldywKICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldkNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3Lmdl
dENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKSA6IGVsZW0uY3VycmVudFN0eWxlLAogICAgICAg
ICAgICAgICAgICAgICAgICB0b3AgPSBlbGVtLm9mZnNldFRvcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdCA9IGVsZW0ub2Zmc2V0TGVmdDsKCiAgICAgICAgICAgICAgICB3aGlsZSAoIChl
bGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtICE9PSBib2R5ICYmIGVsZW0gIT09IGRvY0Vs
ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm9mZnNldC5zdXBwb3J0
c0ZpeGVkUG9zaXRpb24gJiYgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICJmaXhlZCIg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGUgPSBkZWZh
dWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkgOiBlbGVt
LmN1cnJlbnRTdHlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgdG9wICAtPSBlbGVtLnNjcm9s
bFRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSBlbGVtLnNjcm9sbExlZnQ7Cgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gPT09IG9mZnNldFBhcmVudCApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgICs9IGVsZW0ub2Zmc2V0VG9wOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gZWxlbS5vZmZzZXRMZWZ0OwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuZG9lc05vdEFk
ZEJvcmRlciAmJiAhKGpRdWVyeS5vZmZzZXQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHMg
JiYgcnRhYmxlLnRlc3QoZWxlbS5ub2RlTmFtZSkpICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRl
clRvcFdpZHRoICApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0ICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoICkgfHwg
MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZPZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5Lm9mZnNldC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUgJiYgY29tcHV0
ZWRTdHlsZS5vdmVyZmxvdyAhPT0gInZpc2libGUiICkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvcCAgKz0gcGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0
aCAgKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gcGFyc2VG
bG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGggKSB8fCAwOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q29tcHV0ZWRTdHlsZSA9
IGNvbXB1dGVkU3R5bGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBw
cmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gInJlbGF0aXZlIiB8fCBwcmV2Q29tcHV0ZWRT
dHlsZS5wb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRv
cCAgKz0gYm9keS5vZmZzZXRUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gYm9k
eS5vZmZzZXRMZWZ0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5Lm9mZnNldC5zdXBwb3J0c0ZpeGVkUG9zaXRpb24gJiYgcHJldkNvbXB1dGVkU3R5bGUucG9z
aXRpb24gPT09ICJmaXhlZCIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gTWF0
aC5tYXgoIGRvY0VsZW0uc2Nyb2xsVG9wLCBib2R5LnNjcm9sbFRvcCApOwogICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0ICs9IE1hdGgubWF4KCBkb2NFbGVtLnNjcm9sbExlZnQsIGJvZHkuc2Ny
b2xsTGVmdCApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB7IHRv
cDogdG9wLCBsZWZ0OiBsZWZ0IH07CiAgICAgICAgfTsKfQoKalF1ZXJ5Lm9mZnNldCA9IHsKICAg
ICAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBib2R5ID0g
ZG9jdW1lbnQuYm9keSwgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiks
IGlubmVyRGl2LCBjaGVja0RpdiwgdGFibGUsIHRkLCBib2R5TWFyZ2luVG9wID0gcGFyc2VGbG9h
dCggalF1ZXJ5LmNzcyhib2R5LCAibWFyZ2luVG9wIikgKSB8fCAwLAogICAgICAgICAgICAgICAg
ICAgICAgICBodG1sID0gIjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6
MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWln
aHQ6MXB4Oyc+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
O3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dp
ZHRoOjFweDtoZWlnaHQ6MXB4OycgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+
PHRkPjwvdGQ+PC90cj48L3RhYmxlPiI7CgogICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCgg
Y29udGFpbmVyLnN0eWxlLCB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCB0b3A6IDAsIGxlZnQ6IDAs
IG1hcmdpbjogMCwgYm9yZGVyOiAwLCB3aWR0aDogIjFweCIsIGhlaWdodDogIjFweCIsIHZpc2li
aWxpdHk6ICJoaWRkZW4iIH0gKTsKCiAgICAgICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1M
ID0gaHRtbDsKICAgICAgICAgICAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKCBjb250YWluZXIsIGJv
ZHkuZmlyc3RDaGlsZCApOwogICAgICAgICAgICAgICAgaW5uZXJEaXYgPSBjb250YWluZXIuZmly
c3RDaGlsZDsKICAgICAgICAgICAgICAgIGNoZWNrRGl2ID0gaW5uZXJEaXYuZmlyc3RDaGlsZDsK
ICAgICAgICAgICAgICAgIHRkID0gaW5uZXJEaXYubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJz
dENoaWxkOwoKICAgICAgICAgICAgICAgIHRoaXMuZG9lc05vdEFkZEJvcmRlciA9IChjaGVja0Rp
di5vZmZzZXRUb3AgIT09IDUpOwogICAgICAgICAgICAgICAgdGhpcy5kb2VzQWRkQm9yZGVyRm9y
VGFibGVBbmRDZWxscyA9ICh0ZC5vZmZzZXRUb3AgPT09IDUpOwoKICAgICAgICAgICAgICAgIGNo
ZWNrRGl2LnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgICAgICAgICAgIGNoZWNrRGl2
LnN0eWxlLnRvcCA9ICIyMHB4IjsKCiAgICAgICAgICAgICAgICAvLyBzYWZhcmkgc3VidHJhY3Rz
IHBhcmVudCBib3JkZXIgd2lkdGggaGVyZSB3aGljaCBpcyA1cHgKICAgICAgICAgICAgICAgIHRo
aXMuc3VwcG9ydHNGaXhlZFBvc2l0aW9uID0gKGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0gMjAgfHwg
Y2hlY2tEaXYub2Zmc2V0VG9wID09PSAxNSk7CiAgICAgICAgICAgICAgICBjaGVja0Rpdi5zdHls
ZS5wb3NpdGlvbiA9IGNoZWNrRGl2LnN0eWxlLnRvcCA9ICIiOwoKICAgICAgICAgICAgICAgIGlu
bmVyRGl2LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgICAgICAgICAgICBpbm5lckRp
di5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CgogICAgICAgICAgICAgICAgdGhpcy5zdWJ0
cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUgPSAoY2hlY2tEaXYub2Zmc2V0VG9wID09
PSAtNSk7CgogICAgICAgICAgICAgICAgdGhpcy5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9m
ZnNldCA9IChib2R5Lm9mZnNldFRvcCAhPT0gYm9keU1hcmdpblRvcCk7CgogICAgICAgICAgICAg
ICAgYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7CiAgICAgICAgICAgICAgICBqUXVlcnku
b2Zmc2V0LmluaXRpYWxpemUgPSBqUXVlcnkubm9vcDsKICAgICAgICB9LAoKICAgICAgICBib2R5
T2Zmc2V0OiBmdW5jdGlvbiggYm9keSApIHsKICAgICAgICAgICAgICAgIHZhciB0b3AgPSBib2R5
Lm9mZnNldFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGJvZHkub2Zmc2V0TGVm
dDsKCiAgICAgICAgICAgICAgICBqUXVlcnkub2Zmc2V0LmluaXRpYWxpemUoKTsKCiAgICAgICAg
ICAgICAgICBpZiAoIGpRdWVyeS5vZmZzZXQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZz
ZXQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gcGFyc2VGbG9hdCggalF1ZXJ5
LmNzcyhib2R5LCAibWFyZ2luVG9wIikgKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHsgdG9wOiB0b3AsIGxl
ZnQ6IGxlZnQgfTsKICAgICAgICB9LAoKICAgICAgICBzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVt
LCBvcHRpb25zLCBpICkgewogICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0galF1ZXJ5LmNz
cyggZWxlbSwgInBvc2l0aW9uIiApOwoKICAgICAgICAgICAgICAgIC8vIHNldCBwb3NpdGlvbiBm
aXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KICAgICAg
ICAgICAgICAgIGlmICggcG9zaXRpb24gPT09ICJzdGF0aWMiICkgewogICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICB2YXIgY3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLAogICAgICAg
ICAgICAgICAgICAgICAgICBjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICBjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiApLAogICAg
ICAgICAgICAgICAgICAgICAgICBjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgImxlZnQi
ICksCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBvc2l0aW9uID0gKHBvc2l0aW9u
ID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiKSAmJiBqUXVlcnkuaW5BcnJh
eSgiYXV0byIsIFtjdXJDU1NUb3AsIGN1ckNTU0xlZnRdKSA+IC0xLAogICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wcyA9IHt9LCBjdXJQb3NpdGlvbiA9IHt9LCBjdXJUb3AsIGN1ckxlZnQ7Cgog
ICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBp
ZiBlaXRoZXIgdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29s
dXRlIG9yIGZpeGVkCiAgICAgICAgICAgICAgICBpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOwogICAgICAg
ICAgICAgICAgICAgICAgICBjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDsKICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1clRvcCA9IHBhcnNlRmxvYXQo
IGN1ckNTU1RvcCApIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxlZnQgPSBwYXJz
ZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGN1ck9mZnNldCApOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnRvcCAhPSBudWxs
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnRvcCA9IChvcHRpb25zLnRvcCAtIGN1
ck9mZnNldC50b3ApICsgY3VyVG9wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
aWYgKG9wdGlvbnMubGVmdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bz
LmxlZnQgPSAob3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQpICsgY3VyTGVmdDsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyAp
OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyRWxl
bS5jc3MoIHByb3BzICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9OwoKCmpRdWVyeS5m
bi5leHRlbmQoewogICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAg
IGlmICggIXRoaXNbMF0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXSwKCiAg
ICAgICAgICAgICAgICAvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAogICAgICAgICAgICAgICAg
b2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKSwKCiAgICAgICAgICAgICAgICAvLyBH
ZXQgY29ycmVjdCBvZmZzZXRzCiAgICAgICAgICAgICAgICBvZmZzZXQgICAgICAgPSB0aGlzLm9m
ZnNldCgpLAogICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0gcnJvb3QudGVzdChvZmZzZXRQ
YXJlbnRbMF0ubm9kZU5hbWUpID8geyB0b3A6IDAsIGxlZnQ6IDAgfSA6IG9mZnNldFBhcmVudC5v
ZmZzZXQoKTsKCiAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBlbGVtZW50IG1hcmdpbnMKICAg
ICAgICAgICAgICAgIC8vIG5vdGU6IHdoZW4gYW4gZWxlbWVudCBoYXMgbWFyZ2luOiBhdXRvIHRo
ZSBvZmZzZXRMZWZ0IGFuZCBtYXJnaW5MZWZ0CiAgICAgICAgICAgICAgICAvLyBhcmUgdGhlIHNh
bWUgaW4gU2FmYXJpIGNhdXNpbmcgb2Zmc2V0LmxlZnQgdG8gaW5jb3JyZWN0bHkgYmUgMAogICAg
ICAgICAgICAgICAgb2Zmc2V0LnRvcCAgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAi
bWFyZ2luVG9wIikgKSB8fCAwOwogICAgICAgICAgICAgICAgb2Zmc2V0LmxlZnQgLT0gcGFyc2VG
bG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAibWFyZ2luTGVmdCIpICkgfHwgMDsKCiAgICAgICAgICAg
ICAgICAvLyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKICAgICAgICAgICAgICAgIHBhcmVudE9m
ZnNldC50b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9y
ZGVyVG9wV2lkdGgiKSApIHx8IDA7CiAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQubGVmdCAr
PSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKG9mZnNldFBhcmVudFswXSwgImJvcmRlckxlZnRXaWR0
aCIpICkgfHwgMDsKCiAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgdHdvIG9mZnNldHMK
ICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogIG9m
ZnNldC50b3AgIC0gcGFyZW50T2Zmc2V0LnRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdAogICAgICAgICAgICAgICAgfTsKICAg
ICAgICB9LAoKICAgICAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2
YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgKCFycm9vdC50ZXN0
KG9mZnNldFBhcmVudC5ub2RlTmFtZSkgJiYgalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnQsICJwb3Np
dGlvbiIpID09PSAic3RhdGljIikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50Owog
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQp9KTsKCgovLyBDcmVhdGUgc2Nyb2xsTGVmdCBh
bmQgc2Nyb2xsVG9wIG1ldGhvZHMKalF1ZXJ5LmVhY2goIFsiTGVmdCIsICJUb3AiXSwgZnVuY3Rp
b24oIGksIG5hbWUgKSB7CiAgICAgICAgdmFyIG1ldGhvZCA9ICJzY3JvbGwiICsgbmFtZTsKCiAg
ICAgICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7CiAgICAgICAgICAg
ICAgICB2YXIgZWxlbSwgd2luOwoKICAgICAgICAgICAgICAgIGlmICggdmFsID09PSB1bmRlZmlu
ZWQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyAwIF07CgogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFlbGVtICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICB3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFJldHVybiB0aGUgc2Nyb2xsIG9mZnNldAogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gd2luID8gKCJwYWdlWE9mZnNldCIgaW4gd2luKSA/IHdpblsgaSA/ICJwYWdlWU9m
ZnNldCIgOiAicGFnZVhPZmZzZXQiIF0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYmIHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRb
IG1ldGhvZCBdIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW4u
ZG9jdW1lbnQuYm9keVsgbWV0aG9kIF0gOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1bIG1ldGhvZCBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNl
dCB0aGUgc2Nyb2xsIG9mZnNldAogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luID0gZ2V0V2luZG93KCB0aGlzICk7
CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHdpbiApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aW4uc2Nyb2xsVG8oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAhaSA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsTGVmdCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPyB2YWwgOiBqUXVlcnkoIHdpbiAp
LnNjcm9sbFRvcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpc1sgbWV0aG9kIF0gPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgIH07Cn0pOwoKZnVuY3Rpb24gZ2V0V2luZG93KCBlbGVtICkgewog
ICAgICAgIHJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSA/CiAgICAgICAgICAgICAgICBl
bGVtIDoKICAgICAgICAgICAgICAgIGVsZW0ubm9kZVR5cGUgPT09IDkgPwogICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLmRlZmF1bHRWaWV3IHx8IGVsZW0ucGFyZW50V2luZG93IDoKICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2U7Cn0KCgoKCi8vIENyZWF0ZSB3aWR0aCwgaGVpZ2h0LCBp
bm5lckhlaWdodCwgaW5uZXJXaWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9k
cwpqUXVlcnkuZWFjaChbICJIZWlnaHQiLCAiV2lkdGgiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkg
ewoKICAgICAgICB2YXIgdHlwZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgLy8gaW5u
ZXJIZWlnaHQgYW5kIGlubmVyV2lkdGgKICAgICAgICBqUXVlcnkuZm5bICJpbm5lciIgKyBuYW1l
IF0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXTsKICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtICYmIGVsZW0uc3R5bGUgPwogICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCAicGFkZGluZyIgKSAp
IDoKICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKICAgICAgICB9OwoKICAgICAgICAvLyBv
dXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aAogICAgICAgIGpRdWVyeS5mblsgIm91dGVyIiArIG5h
bWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4gKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRo
aXNbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSAmJiBlbGVtLnN0eWxlID8KICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgbWFy
Z2luID8gIm1hcmdpbiIgOiAiYm9yZGVyIiApICkgOgogICAgICAgICAgICAgICAgICAgICAgICBu
dWxsOwogICAgICAgIH07CgogICAgICAgIGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIHNp
emUgKSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgd2luZG93IHdpZHRoIG9yIGhlaWdodAogICAg
ICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdOwogICAgICAgICAgICAgICAgaWYgKCAhZWxl
bSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemUgPT0gbnVsbCA/IG51bGwg
OiB0aGlzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHNpemUgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbiggaSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
c2VsZiA9IGpRdWVyeSggdGhpcyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGZbIHR5cGUgXSggc2l6ZS5jYWxsKCB0aGlzLCBpLCBzZWxmWyB0eXBlIF0oKSApICk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEV2ZXJ5b25lIGVsc2UgdXNlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCBvciBkb2N1bWVu
dC5ib2R5IGRlcGVuZGluZyBvbiBRdWlya3MgdnMgU3RhbmRhcmRzIG1vZGUKICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gM3JkIGNvbmRpdGlvbiBhbGxvd3MgTm9raWEgc3VwcG9ydCwgYXMgaXQg
c3VwcG9ydHMgdGhlIGRvY0VsZW0gcHJvcCBidXQgbm90IENTUzFDb21wYXQKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGRvY0VsZW1Qcm9wID0gZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1l
bnRbICJjbGllbnQiICsgbmFtZSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
ZHkgPSBlbGVtLmRvY3VtZW50LmJvZHk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtLmRvY3VtZW50LmNvbXBhdE1vZGUgPT09ICJDU1MxQ29tcGF0IiAmJiBkb2NFbGVtUHJvcCB8
fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgJiYgYm9keVsgImNsaWVudCIg
KyBuYW1lIF0gfHwgZG9jRWxlbVByb3A7CgogICAgICAgICAgICAgICAgLy8gR2V0IGRvY3VtZW50
IHdpZHRoIG9yIGhlaWdodAogICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5ub2RlVHlw
ZSA9PT0gOSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHNjcm9sbFtXaWR0
aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdLCB3aGljaGV2ZXIgaXMgZ3JlYXRlcgog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIgKyBuYW1lXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbInNjcm9sbCIgKyBuYW1lXSwg
ZWxlbS5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIgKyBuYW1lXSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLmJvZHlbIm9mZnNldCIgKyBuYW1lXSwgZWxlbS5kb2N1bWVudEVs
ZW1lbnRbIm9mZnNldCIgKyBuYW1lXQogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAg
ICAgICAgICAgIC8vIEdldCBvciBzZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50CiAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzaXplID09PSB1bmRlZmluZWQgKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBvcmlnID0galF1ZXJ5LmNzcyggZWxlbSwgdHlwZSApLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHBhcnNlRmxvYXQoIG9yaWcgKTsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuaXNOYU4oIHJldCApID8gb3JpZyA6
IHJldDsKCiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHdpZHRoIG9yIGhlaWdodCBvbiB0aGUg
ZWxlbWVudCAoZGVmYXVsdCB0byBwaXhlbHMgaWYgdmFsdWUgaXMgdW5pdGxlc3MpCiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jc3Mo
IHR5cGUsIHR5cGVvZiBzaXplID09PSAic3RyaW5nIiA/IHNpemUgOiBzaXplICsgInB4IiApOwog
ICAgICAgICAgICAgICAgfQogICAgICAgIH07Cgp9KTsKCgovLyBFeHBvc2UgalF1ZXJ5IHRvIHRo
ZSBnbG9iYWwgb2JqZWN0CndpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKfSkod2lu
ZG93KTsKPC9zY3JpcHQ+PHNjcmlwdCBpZD0ianNvbiI+W3sidGltZXN0YW1wIjogMTM0Mzk1MDEz
NSwgInJlc3VsdHMiOiB7IkNTUy9DU1NQcm9wZXJ0eVNldHRlckdldHRlciI6IHsibWluIjogMzgy
OS43ODcyMzQwNDI1NTMzLCAibWF4IjogNDAwMC4wLCAibWVkaWFuIjogMzg0OC40NjgwMTgxNDMx
MDg2LCAic3RkZXYiOiA2Ny44NDkxNTcwNzE4OTE1MjYsICJhdmciOiAzODk0LjUzNzk2NzI4ODYz
NywgInVuaXQiOiAicnVucy9zIn0sICJDU1MvQ1NTUHJvcGVydHlVcGRhdGVWYWx1ZSI6IHsibWlu
IjogODQ0My4yNzE3Njc4MTAwMjcxLCAibWF4IjogODgxMS4wMTM3NjcyMDkwMTEzLCAibWVkaWFu
IjogODYyOC4yMzEwMTA0MzEwODczLCAic3RkZXYiOiAxNTAuMTA1Mjc0MzM2MzUxMzksICJhdmci
OiA4NjIzLjY3MTYwMjU5NDg5NTQsICJ1bml0IjogInJ1bnMvcyJ9fSwgImJyYW5jaCI6ICJ3ZWJr
aXQtdHJ1bmsiLCAid2Via2l0LXJldmlzaW9uIjogIjEyNDUxMyJ9LCB7InRpbWVzdGFtcCI6IDEz
NDQwMjU3MTIsICJyZXN1bHRzIjogeyJDU1MvQ1NTUHJvcGVydHlTZXR0ZXJHZXR0ZXIiOiB7Im1p
biI6IDM4MTQuNTY5NTM2NDIzODQwOSwgIm1heCI6IDM5OTAuMDI0OTM3NjU1ODYwNCwgIm1lZGlh
biI6IDM4NTAuMDM2MTg4MTc4NTI4NCwgInN0ZGV2IjogNjEuNzkwOTAwMzk1MTIyNzE5LCAiYXZn
IjogMzg3OC4yMjIwODQwNzMwODYxLCAidW5pdCI6ICJydW5zL3MifSwgIkNTUy9DU1NQcm9wZXJ0
eVVwZGF0ZVZhbHVlIjogeyJtaW4iOiA4NDQzLjI3MTc2NzgxMDAyNzEsICJtYXgiOiA4NzIzLjY2
NzkwNTgyNDAzODgsICJtZWRpYW4iOiA4NDU0LjQyNTM2MzI3NjA5MDEsICJzdGRldiI6IDU4Ljg1
MzEwNjIyOTM4MDg5MiwgImF2ZyI6IDg0NzIuOTM0NjgwOTUzMzQ5LCAidW5pdCI6ICJydW5zL3Mi
fX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMjQ1MTMi
fSwgeyJ0aW1lc3RhbXAiOiAxMzQ0MDI2MjY4LCAicmVzdWx0cyI6IHsiQ1NTL0NTU1Byb3BlcnR5
U2V0dGVyR2V0dGVyIjogeyJtaW4iOiAzODc0LjA5MjAwOTY4NTIzMDEsICJtYXgiOiAzOTg1LjA1
NjAzOTg1MDU2MDQsICJtZWRpYW4iOiAzOTY1LjMwMzU5MzU1NjM4MTcsICJzdGRldiI6IDIzLjE4
NDY3NTM3NjA3Nzk0MSwgImF2ZyI6IDM5NjIuNzQwNzU4NDI1OTgxMywgInVuaXQiOiAicnVucy9z
In0sICJDU1MvQ1NTUHJvcGVydHlVcGRhdGVWYWx1ZSI6IHsibWluIjogODQzMi4xNDc1NjI1ODIz
NDU5LCAibWF4IjogODgxMS4wMTM3NjcyMDkwMTEzLCAibWVkaWFuIjogODQ3MS4yMTQ4Mjg4MzA3
MjE3LCAic3RkZXYiOiAxMjIuOTI1Mjg3NTU4MTE3ODIsICJhdmciOiA4NTMwLjkzNDc4MjE5Mzky
MDksICJ1bml0IjogInJ1bnMvcyJ9fSwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAid2Via2l0
LXJldmlzaW9uIjogIjEyNDUxNCJ9LCB7InRpbWVzdGFtcCI6IDEzNDQyODg0MzAsICJ3ZWJraXQt
cmV2aXNpb24iOiAiMTI0NTE0IiwgInJlc3VsdHMiOiB7IkNTUy9DU1NQcm9wZXJ0eVNldHRlckdl
dHRlciI6IHsibWluIjogMzgyNC43MDExOTUyMTkxMjMzLCAibWF4IjogMzg0Ni4xNTM4NDYxNTM4
NDYyLCAibWVkaWFuIjogMzgzMi4zMzcwMjU4MDk1NTkyLCAic3RkZXYiOiA2LjYwNzMyMTAwNzg2
MTQyMTUsICJhdmciOiAzODMzLjE2MjgyMjI1OTU5NTksICJ1bml0IjogInJ1bnMvcyJ9LCAiQ1NT
L0NTU1Byb3BlcnR5VXBkYXRlVmFsdWUiOiB7Im1pbiI6IDgzNTUuMDkxMzgzODEyMDEwNSwgIm1h
eCI6IDg1MTAuNjM4Mjk3ODcyMzM5NSwgIm1lZGlhbiI6IDg0NjUuNjA4NDY1NjA4NDY1OCwgInN0
ZGV2IjogNTMuMDkzMzUwMTY4NzYwNTM3LCAiYXZnIjogODQ0MC44MjI5NTAwNjQ2ODEyLCAidW5p
dCI6ICJydW5zL3MifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImRlc2NyaXB0aW9uIjog
InlheSJ9XTwvc2NyaXB0Pgo8c2NyaXB0IHRpdGxlPSJqcXVlcnkuZmxvdC5taW4uanMiPgovKiBK
YXZhc2NyaXB0IHBsb3R0aW5nIGxpYnJhcnkgZm9yIGpRdWVyeSwgdi4gMC43LgogKgogKiBSZWxl
YXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgYnkgSU9MQSwgRGVjZW1iZXIgMjAwNy4KICoKICov
CihmdW5jdGlvbihiKXtiLmNvbG9yPXt9O2IuY29sb3IubWFrZT1mdW5jdGlvbihkLGUsZyxmKXt2
YXIgYz17fTtjLnI9ZHx8MDtjLmc9ZXx8MDtjLmI9Z3x8MDtjLmE9ZiE9bnVsbD9mOjE7Yy5hZGQ9
ZnVuY3Rpb24oaCxqKXtmb3IodmFyIGs9MDtrPGgubGVuZ3RoOysrayl7Y1toLmNoYXJBdChrKV0r
PWp9cmV0dXJuIGMubm9ybWFsaXplKCl9O2Muc2NhbGU9ZnVuY3Rpb24oaCxqKXtmb3IodmFyIGs9
MDtrPGgubGVuZ3RoOysrayl7Y1toLmNoYXJBdChrKV0qPWp9cmV0dXJuIGMubm9ybWFsaXplKCl9
O2MudG9TdHJpbmc9ZnVuY3Rpb24oKXtpZihjLmE+PTEpe3JldHVybiJyZ2IoIitbYy5yLGMuZyxj
LmJdLmpvaW4oIiwiKSsiKSJ9ZWxzZXtyZXR1cm4icmdiYSgiK1tjLnIsYy5nLGMuYixjLmFdLmpv
aW4oIiwiKSsiKSJ9fTtjLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoayxqLGwpe3Jl
dHVybiBqPGs/azooaj5sP2w6ail9Yy5yPWgoMCxwYXJzZUludChjLnIpLDI1NSk7Yy5nPWgoMCxw
YXJzZUludChjLmcpLDI1NSk7Yy5iPWgoMCxwYXJzZUludChjLmIpLDI1NSk7Yy5hPWgoMCxjLmEs
MSk7cmV0dXJuIGN9O2MuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gYi5jb2xvci5tYWtlKGMucixj
LmIsYy5nLGMuYSl9O3JldHVybiBjLm5vcm1hbGl6ZSgpfTtiLmNvbG9yLmV4dHJhY3Q9ZnVuY3Rp
b24oZCxlKXt2YXIgYztkb3tjPWQuY3NzKGUpLnRvTG93ZXJDYXNlKCk7aWYoYyE9IiImJmMhPSJ0
cmFuc3BhcmVudCIpe2JyZWFrfWQ9ZC5wYXJlbnQoKX13aGlsZSghYi5ub2RlTmFtZShkLmdldCgw
KSwiYm9keSIpKTtpZihjPT0icmdiYSgwLCAwLCAwLCAwKSIpe2M9InRyYW5zcGFyZW50In1yZXR1
cm4gYi5jb2xvci5wYXJzZShjKX07Yi5jb2xvci5wYXJzZT1mdW5jdGlvbihjKXt2YXIgZCxmPWIu
Y29sb3IubWFrZTtpZihkPS9yZ2JcKFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlc
cyosXHMqKFswLTldezEsM30pXHMqXCkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlSW50KGRbMV0s
MTApLHBhcnNlSW50KGRbMl0sMTApLHBhcnNlSW50KGRbM10sMTApKX1pZihkPS9yZ2JhXChccyoo
WzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKixccyoo
WzAtOV0rKD86XC5bMC05XSspPylccypcKS8uZXhlYyhjKSl7cmV0dXJuIGYocGFyc2VJbnQoZFsx
XSwxMCkscGFyc2VJbnQoZFsyXSwxMCkscGFyc2VJbnQoZFszXSwxMCkscGFyc2VGbG9hdChkWzRd
KSl9aWYoZD0vcmdiXChccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86
XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKlwpLy5leGVjKGMp
KXtyZXR1cm4gZihwYXJzZUZsb2F0KGRbMV0pKjIuNTUscGFyc2VGbG9hdChkWzJdKSoyLjU1LHBh
cnNlRmxvYXQoZFszXSkqMi41NSl9aWYoZD0vcmdiYVwoXHMqKFswLTldKyg/OlwuWzAtOV0rKT8p
XCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0r
KT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXHMqXCkvLmV4ZWMoYykpe3JldHVybiBm
KHBhcnNlRmxvYXQoZFsxXSkqMi41NSxwYXJzZUZsb2F0KGRbMl0pKjIuNTUscGFyc2VGbG9hdChk
WzNdKSoyLjU1LHBhcnNlRmxvYXQoZFs0XSkpfWlmKGQ9LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZB
LUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkvLmV4ZWMoYykpe3JldHVybiBmKHBhcnNlSW50KGRb
MV0sMTYpLHBhcnNlSW50KGRbMl0sMTYpLHBhcnNlSW50KGRbM10sMTYpKX1pZihkPS8jKFthLWZB
LUYwLTldKShbYS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pLy5leGVjKGMpKXtyZXR1cm4gZihwYXJz
ZUludChkWzFdK2RbMV0sMTYpLHBhcnNlSW50KGRbMl0rZFsyXSwxNikscGFyc2VJbnQoZFszXStk
WzNdLDE2KSl9dmFyIGU9Yi50cmltKGMpLnRvTG93ZXJDYXNlKCk7aWYoZT09InRyYW5zcGFyZW50
Iil7cmV0dXJuIGYoMjU1LDI1NSwyNTUsMCl9ZWxzZXtkPWFbZV18fFswLDAsMF07cmV0dXJuIGYo
ZFswXSxkWzFdLGRbMl0pfX07dmFyIGE9e2FxdWE6WzAsMjU1LDI1NV0sYXp1cmU6WzI0MCwyNTUs
MjU1XSxiZWlnZTpbMjQ1LDI0NSwyMjBdLGJsYWNrOlswLDAsMF0sYmx1ZTpbMCwwLDI1NV0sYnJv
d246WzE2NSw0Miw0Ml0sY3lhbjpbMCwyNTUsMjU1XSxkYXJrYmx1ZTpbMCwwLDEzOV0sZGFya2N5
YW46WzAsMTM5LDEzOV0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJrZ3JlZW46WzAsMTAwLDBd
LGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2
ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUz
LDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmt2
aW9sZXQ6WzE0OCwwLDIxMV0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnb2xkOlsyNTUsMjE1LDBdLGdy
ZWVuOlswLDEyOCwwXSxpbmRpZ286Wzc1LDAsMTMwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxpZ2h0
Ymx1ZTpbMTczLDIxNiwyMzBdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z3JlZW46WzE0
NCwyMzgsMTQ0XSxsaWdodGdyZXk6WzIxMSwyMTEsMjExXSxsaWdodHBpbms6WzI1NSwxODIsMTkz
XSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLG1hZ2VudGE6WzI1NSww
LDI1NV0sbWFyb29uOlsxMjgsMCwwXSxuYXZ5OlswLDAsMTI4XSxvbGl2ZTpbMTI4LDEyOCwwXSxv
cmFuZ2U6WzI1NSwxNjUsMF0scGluazpbMjU1LDE5MiwyMDNdLHB1cnBsZTpbMTI4LDAsMTI4XSx2
aW9sZXQ6WzEyOCwwLDEyOF0scmVkOlsyNTUsMCwwXSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSx3aGl0
ZTpbMjU1LDI1NSwyNTVdLHllbGxvdzpbMjU1LDI1NSwwXX19KShqUXVlcnkpOyhmdW5jdGlvbihj
KXtmdW5jdGlvbiBiKGF2LGFpLEosYWYpe3ZhciBRPVtdLE89e2NvbG9yczpbIiNlZGMyNDAiLCIj
YWZkOGY4IiwiI2NiNGI0YiIsIiM0ZGE3NGQiLCIjOTQ0MGVkIl0sbGVnZW5kOntzaG93OnRydWUs
bm9Db2x1bW5zOjEsbGFiZWxGb3JtYXR0ZXI6bnVsbCxsYWJlbEJveEJvcmRlckNvbG9yOiIjY2Nj
Iixjb250YWluZXI6bnVsbCxwb3NpdGlvbjoibmUiLG1hcmdpbjo1LGJhY2tncm91bmRDb2xvcjpu
dWxsLGJhY2tncm91bmRPcGFjaXR5OjAuODV9LHhheGlzOntzaG93Om51bGwscG9zaXRpb246ImJv
dHRvbSIsbW9kZTpudWxsLGNvbG9yOm51bGwsdGlja0NvbG9yOm51bGwsdHJhbnNmb3JtOm51bGws
aW52ZXJzZVRyYW5zZm9ybTpudWxsLG1pbjpudWxsLG1heDpudWxsLGF1dG9zY2FsZU1hcmdpbjpu
dWxsLHRpY2tzOm51bGwsdGlja0Zvcm1hdHRlcjpudWxsLGxhYmVsV2lkdGg6bnVsbCxsYWJlbEhl
aWdodDpudWxsLHJlc2VydmVTcGFjZTpudWxsLHRpY2tMZW5ndGg6bnVsbCxhbGlnblRpY2tzV2l0
aEF4aXM6bnVsbCx0aWNrRGVjaW1hbHM6bnVsbCx0aWNrU2l6ZTpudWxsLG1pblRpY2tTaXplOm51
bGwsbW9udGhOYW1lczpudWxsLHRpbWVmb3JtYXQ6bnVsbCx0d2VsdmVIb3VyQ2xvY2s6ZmFsc2V9
LHlheGlzOnthdXRvc2NhbGVNYXJnaW46MC4wMixwb3NpdGlvbjoibGVmdCJ9LHhheGVzOltdLHlh
eGVzOltdLHNlcmllczp7cG9pbnRzOntzaG93OmZhbHNlLHJhZGl1czozLGxpbmVXaWR0aDoyLGZp
bGw6dHJ1ZSxmaWxsQ29sb3I6IiNmZmZmZmYiLHN5bWJvbDoiY2lyY2xlIn0sbGluZXM6e2xpbmVX
aWR0aDoyLGZpbGw6ZmFsc2UsZmlsbENvbG9yOm51bGwsc3RlcHM6ZmFsc2V9LGJhcnM6e3Nob3c6
ZmFsc2UsbGluZVdpZHRoOjIsYmFyV2lkdGg6MSxmaWxsOnRydWUsZmlsbENvbG9yOm51bGwsYWxp
Z246ImxlZnQiLGhvcml6b250YWw6ZmFsc2V9LHNoYWRvd1NpemU6M30sZ3JpZDp7c2hvdzp0cnVl
LGFib3ZlRGF0YTpmYWxzZSxjb2xvcjoiIzU0NTQ1NCIsYmFja2dyb3VuZENvbG9yOm51bGwsYm9y
ZGVyQ29sb3I6bnVsbCx0aWNrQ29sb3I6bnVsbCxsYWJlbE1hcmdpbjo1LGF4aXNNYXJnaW46OCxi
b3JkZXJXaWR0aDoyLG1pbkJvcmRlck1hcmdpbjpudWxsLG1hcmtpbmdzOm51bGwsbWFya2luZ3ND
b2xvcjoiI2Y0ZjRmNCIsbWFya2luZ3NMaW5lV2lkdGg6MixjbGlja2FibGU6ZmFsc2UsaG92ZXJh
YmxlOmZhbHNlLGF1dG9IaWdobGlnaHQ6dHJ1ZSxtb3VzZUFjdGl2ZVJhZGl1czoxMH0saG9va3M6
e319LGF6PW51bGwsYWQ9bnVsbCx5PW51bGwsSD1udWxsLEE9bnVsbCxwPVtdLGF3PVtdLHE9e2xl
ZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowfSxHPTAsST0wLGg9MCx3PTAsYWs9e3Byb2Nlc3NP
cHRpb25zOltdLHByb2Nlc3NSYXdEYXRhOltdLHByb2Nlc3NEYXRhcG9pbnRzOltdLGRyYXdTZXJp
ZXM6W10sZHJhdzpbXSxiaW5kRXZlbnRzOltdLGRyYXdPdmVybGF5OltdLHNodXRkb3duOltdfSxh
cT10aGlzO2FxLnNldERhdGE9YWo7YXEuc2V0dXBHcmlkPXQ7YXEuZHJhdz1XO2FxLmdldFBsYWNl
aG9sZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGF2fTthcS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1
cm4gYXp9O2FxLmdldFBsb3RPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gcX07YXEud2lkdGg9ZnVu
Y3Rpb24oKXtyZXR1cm4gaH07YXEuaGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHd9O2FxLm9mZnNl
dD1mdW5jdGlvbigpe3ZhciBhQj15Lm9mZnNldCgpO2FCLmxlZnQrPXEubGVmdDthQi50b3ArPXEu
dG9wO3JldHVybiBhQn07YXEuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBRfTthcS5nZXRBeGVz
PWZ1bmN0aW9uKCl7dmFyIGFDPXt9LGFCO2MuZWFjaChwLmNvbmNhdChhdyksZnVuY3Rpb24oYUQs
YUUpe2lmKGFFKXthQ1thRS5kaXJlY3Rpb24rKGFFLm4hPTE/YUUubjoiIikrImF4aXMiXT1hRX19
KTtyZXR1cm4gYUN9O2FxLmdldFhBeGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHB9O2FxLmdldFlBeGVz
PWZ1bmN0aW9uKCl7cmV0dXJuIGF3fTthcS5jMnA9QzthcS5wMmM9YXI7YXEuZ2V0T3B0aW9ucz1m
dW5jdGlvbigpe3JldHVybiBPfTthcS5oaWdobGlnaHQ9eDthcS51bmhpZ2hsaWdodD1UO2FxLnRy
aWdnZXJSZWRyYXdPdmVybGF5PWY7YXEucG9pbnRPZmZzZXQ9ZnVuY3Rpb24oYUIpe3JldHVybnts
ZWZ0OnBhcnNlSW50KHBbYUEoYUIsIngiKS0xXS5wMmMoK2FCLngpK3EubGVmdCksdG9wOnBhcnNl
SW50KGF3W2FBKGFCLCJ5IiktMV0ucDJjKCthQi55KStxLnRvcCl9fTthcS5zaHV0ZG93bj1hZzth
cS5yZXNpemU9ZnVuY3Rpb24oKXtCKCk7Zyhheik7ZyhhZCl9O2FxLmhvb2tzPWFrO0YoYXEpO1oo
Sik7WCgpO2FqKGFpKTt0KCk7VygpO2FoKCk7ZnVuY3Rpb24gYW4oYUQsYUIpe2FCPVthcV0uY29u
Y2F0KGFCKTtmb3IodmFyIGFDPTA7YUM8YUQubGVuZ3RoOysrYUMpe2FEW2FDXS5hcHBseSh0aGlz
LGFCKX19ZnVuY3Rpb24gRigpe2Zvcih2YXIgYUI9MDthQjxhZi5sZW5ndGg7KythQil7dmFyIGFD
PWFmW2FCXTthQy5pbml0KGFxKTtpZihhQy5vcHRpb25zKXtjLmV4dGVuZCh0cnVlLE8sYUMub3B0
aW9ucyl9fX1mdW5jdGlvbiBaKGFDKXt2YXIgYUI7Yy5leHRlbmQodHJ1ZSxPLGFDKTtpZihPLnhh
eGlzLmNvbG9yPT1udWxsKXtPLnhheGlzLmNvbG9yPU8uZ3JpZC5jb2xvcn1pZihPLnlheGlzLmNv
bG9yPT1udWxsKXtPLnlheGlzLmNvbG9yPU8uZ3JpZC5jb2xvcn1pZihPLnhheGlzLnRpY2tDb2xv
cj09bnVsbCl7Ty54YXhpcy50aWNrQ29sb3I9Ty5ncmlkLnRpY2tDb2xvcn1pZihPLnlheGlzLnRp
Y2tDb2xvcj09bnVsbCl7Ty55YXhpcy50aWNrQ29sb3I9Ty5ncmlkLnRpY2tDb2xvcn1pZihPLmdy
aWQuYm9yZGVyQ29sb3I9PW51bGwpe08uZ3JpZC5ib3JkZXJDb2xvcj1PLmdyaWQuY29sb3J9aWYo
Ty5ncmlkLnRpY2tDb2xvcj09bnVsbCl7Ty5ncmlkLnRpY2tDb2xvcj1jLmNvbG9yLnBhcnNlKE8u
Z3JpZC5jb2xvcikuc2NhbGUoImEiLDAuMjIpLnRvU3RyaW5nKCl9Zm9yKGFCPTA7YUI8TWF0aC5t
YXgoMSxPLnhheGVzLmxlbmd0aCk7KythQil7Ty54YXhlc1thQl09Yy5leHRlbmQodHJ1ZSx7fSxP
LnhheGlzLE8ueGF4ZXNbYUJdKX1mb3IoYUI9MDthQjxNYXRoLm1heCgxLE8ueWF4ZXMubGVuZ3Ro
KTsrK2FCKXtPLnlheGVzW2FCXT1jLmV4dGVuZCh0cnVlLHt9LE8ueWF4aXMsTy55YXhlc1thQl0p
fWlmKE8ueGF4aXMubm9UaWNrcyYmTy54YXhpcy50aWNrcz09bnVsbCl7Ty54YXhpcy50aWNrcz1P
LnhheGlzLm5vVGlja3N9aWYoTy55YXhpcy5ub1RpY2tzJiZPLnlheGlzLnRpY2tzPT1udWxsKXtP
LnlheGlzLnRpY2tzPU8ueWF4aXMubm9UaWNrc31pZihPLngyYXhpcyl7Ty54YXhlc1sxXT1jLmV4
dGVuZCh0cnVlLHt9LE8ueGF4aXMsTy54MmF4aXMpO08ueGF4ZXNbMV0ucG9zaXRpb249InRvcCJ9
aWYoTy55MmF4aXMpe08ueWF4ZXNbMV09Yy5leHRlbmQodHJ1ZSx7fSxPLnlheGlzLE8ueTJheGlz
KTtPLnlheGVzWzFdLnBvc2l0aW9uPSJyaWdodCJ9aWYoTy5ncmlkLmNvbG9yZWRBcmVhcyl7Ty5n
cmlkLm1hcmtpbmdzPU8uZ3JpZC5jb2xvcmVkQXJlYXN9aWYoTy5ncmlkLmNvbG9yZWRBcmVhc0Nv
bG9yKXtPLmdyaWQubWFya2luZ3NDb2xvcj1PLmdyaWQuY29sb3JlZEFyZWFzQ29sb3J9aWYoTy5s
aW5lcyl7Yy5leHRlbmQodHJ1ZSxPLnNlcmllcy5saW5lcyxPLmxpbmVzKX1pZihPLnBvaW50cyl7
Yy5leHRlbmQodHJ1ZSxPLnNlcmllcy5wb2ludHMsTy5wb2ludHMpfWlmKE8uYmFycyl7Yy5leHRl
bmQodHJ1ZSxPLnNlcmllcy5iYXJzLE8uYmFycyl9aWYoTy5zaGFkb3dTaXplIT1udWxsKXtPLnNl
cmllcy5zaGFkb3dTaXplPU8uc2hhZG93U2l6ZX1mb3IoYUI9MDthQjxPLnhheGVzLmxlbmd0aDsr
K2FCKXtWKHAsYUIrMSkub3B0aW9ucz1PLnhheGVzW2FCXX1mb3IoYUI9MDthQjxPLnlheGVzLmxl
bmd0aDsrK2FCKXtWKGF3LGFCKzEpLm9wdGlvbnM9Ty55YXhlc1thQl19Zm9yKHZhciBhRCBpbiBh
ayl7aWYoTy5ob29rc1thRF0mJk8uaG9va3NbYURdLmxlbmd0aCl7YWtbYURdPWFrW2FEXS5jb25j
YXQoTy5ob29rc1thRF0pfX1hbihhay5wcm9jZXNzT3B0aW9ucyxbT10pfWZ1bmN0aW9uIGFqKGFC
KXtRPVkoYUIpO2F4KCk7eigpfWZ1bmN0aW9uIFkoYUUpe3ZhciBhQz1bXTtmb3IodmFyIGFCPTA7
YUI8YUUubGVuZ3RoOysrYUIpe3ZhciBhRD1jLmV4dGVuZCh0cnVlLHt9LE8uc2VyaWVzKTtpZihh
RVthQl0uZGF0YSE9bnVsbCl7YUQuZGF0YT1hRVthQl0uZGF0YTtkZWxldGUgYUVbYUJdLmRhdGE7
Yy5leHRlbmQodHJ1ZSxhRCxhRVthQl0pO2FFW2FCXS5kYXRhPWFELmRhdGF9ZWxzZXthRC5kYXRh
PWFFW2FCXX1hQy5wdXNoKGFEKX1yZXR1cm4gYUN9ZnVuY3Rpb24gYUEoYUMsYUQpe3ZhciBhQj1h
Q1thRCsiYXhpcyJdO2lmKHR5cGVvZiBhQj09Im9iamVjdCIpe2FCPWFCLm59aWYodHlwZW9mIGFC
IT0ibnVtYmVyIil7YUI9MX1yZXR1cm4gYUJ9ZnVuY3Rpb24gbSgpe3JldHVybiBjLmdyZXAocC5j
b25jYXQoYXcpLGZ1bmN0aW9uKGFCKXtyZXR1cm4gYUJ9KX1mdW5jdGlvbiBDKGFFKXt2YXIgYUM9
e30sYUIsYUQ7Zm9yKGFCPTA7YUI8cC5sZW5ndGg7KythQil7YUQ9cFthQl07aWYoYUQmJmFELnVz
ZWQpe2FDWyJ4IithRC5uXT1hRC5jMnAoYUUubGVmdCl9fWZvcihhQj0wO2FCPGF3Lmxlbmd0aDsr
K2FCKXthRD1hd1thQl07aWYoYUQmJmFELnVzZWQpe2FDWyJ5IithRC5uXT1hRC5jMnAoYUUudG9w
KX19aWYoYUMueDEhPT11bmRlZmluZWQpe2FDLng9YUMueDF9aWYoYUMueTEhPT11bmRlZmluZWQp
e2FDLnk9YUMueTF9cmV0dXJuIGFDfWZ1bmN0aW9uIGFyKGFGKXt2YXIgYUQ9e30sYUMsYUUsYUI7
Zm9yKGFDPTA7YUM8cC5sZW5ndGg7KythQyl7YUU9cFthQ107aWYoYUUmJmFFLnVzZWQpe2FCPSJ4
IithRS5uO2lmKGFGW2FCXT09bnVsbCYmYUUubj09MSl7YUI9IngifWlmKGFGW2FCXSE9bnVsbCl7
YUQubGVmdD1hRS5wMmMoYUZbYUJdKTticmVha319fWZvcihhQz0wO2FDPGF3Lmxlbmd0aDsrK2FD
KXthRT1hd1thQ107aWYoYUUmJmFFLnVzZWQpe2FCPSJ5IithRS5uO2lmKGFGW2FCXT09bnVsbCYm
YUUubj09MSl7YUI9InkifWlmKGFGW2FCXSE9bnVsbCl7YUQudG9wPWFFLnAyYyhhRlthQl0pO2Jy
ZWFrfX19cmV0dXJuIGFEfWZ1bmN0aW9uIFYoYUMsYUIpe2lmKCFhQ1thQi0xXSl7YUNbYUItMV09
e246YUIsZGlyZWN0aW9uOmFDPT1wPyJ4IjoieSIsb3B0aW9uczpjLmV4dGVuZCh0cnVlLHt9LGFD
PT1wP08ueGF4aXM6Ty55YXhpcyl9fXJldHVybiBhQ1thQi0xXX1mdW5jdGlvbiBheCgpe3ZhciBh
Rzt2YXIgYU09US5sZW5ndGgsYUI9W10sYUU9W107Zm9yKGFHPTA7YUc8US5sZW5ndGg7KythRyl7
dmFyIGFKPVFbYUddLmNvbG9yO2lmKGFKIT1udWxsKXstLWFNO2lmKHR5cGVvZiBhSj09Im51bWJl
ciIpe2FFLnB1c2goYUopfWVsc2V7YUIucHVzaChjLmNvbG9yLnBhcnNlKFFbYUddLmNvbG9yKSl9
fX1mb3IoYUc9MDthRzxhRS5sZW5ndGg7KythRyl7YU09TWF0aC5tYXgoYU0sYUVbYUddKzEpfXZh
ciBhQz1bXSxhRj0wO2FHPTA7d2hpbGUoYUMubGVuZ3RoPGFNKXt2YXIgYUk7aWYoTy5jb2xvcnMu
bGVuZ3RoPT1hRyl7YUk9Yy5jb2xvci5tYWtlKDEwMCwxMDAsMTAwKX1lbHNle2FJPWMuY29sb3Iu
cGFyc2UoTy5jb2xvcnNbYUddKX12YXIgYUQ9YUYlMj09MT8tMToxO2FJLnNjYWxlKCJyZ2IiLDEr
YUQqTWF0aC5jZWlsKGFGLzIpKjAuMik7YUMucHVzaChhSSk7KythRztpZihhRz49Ty5jb2xvcnMu
bGVuZ3RoKXthRz0wOysrYUZ9fXZhciBhSD0wLGFOO2ZvcihhRz0wO2FHPFEubGVuZ3RoOysrYUcp
e2FOPVFbYUddO2lmKGFOLmNvbG9yPT1udWxsKXthTi5jb2xvcj1hQ1thSF0udG9TdHJpbmcoKTsr
K2FIfWVsc2V7aWYodHlwZW9mIGFOLmNvbG9yPT0ibnVtYmVyIil7YU4uY29sb3I9YUNbYU4uY29s
b3JdLnRvU3RyaW5nKCl9fWlmKGFOLmxpbmVzLnNob3c9PW51bGwpe3ZhciBhTCxhSz10cnVlO2Zv
cihhTCBpbiBhTil7aWYoYU5bYUxdJiZhTlthTF0uc2hvdyl7YUs9ZmFsc2U7YnJlYWt9fWlmKGFL
KXthTi5saW5lcy5zaG93PXRydWV9fWFOLnhheGlzPVYocCxhQShhTiwieCIpKTthTi55YXhpcz1W
KGF3LGFBKGFOLCJ5IikpfX1mdW5jdGlvbiB6KCl7dmFyIGFPPU51bWJlci5QT1NJVElWRV9JTkZJ
TklUWSxhST1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksYUI9TnVtYmVyLk1BWF9WQUxVRSxhVSxh
UyxhUixhTixhRCxhSixhVCxhUCxhSCxhRyxhQyxhMCxhWCxhTDtmdW5jdGlvbiBhRihhMyxhMixh
MSl7aWYoYTI8YTMuZGF0YW1pbiYmYTIhPS1hQil7YTMuZGF0YW1pbj1hMn1pZihhMT5hMy5kYXRh
bWF4JiZhMSE9YUIpe2EzLmRhdGFtYXg9YTF9fWMuZWFjaChtKCksZnVuY3Rpb24oYTEsYTIpe2Ey
LmRhdGFtaW49YU87YTIuZGF0YW1heD1hSTthMi51c2VkPWZhbHNlfSk7Zm9yKGFVPTA7YVU8US5s
ZW5ndGg7KythVSl7YUo9UVthVV07YUouZGF0YXBvaW50cz17cG9pbnRzOltdfTthbihhay5wcm9j
ZXNzUmF3RGF0YSxbYUosYUouZGF0YSxhSi5kYXRhcG9pbnRzXSl9Zm9yKGFVPTA7YVU8US5sZW5n
dGg7KythVSl7YUo9UVthVV07dmFyIGFaPWFKLmRhdGEsYVc9YUouZGF0YXBvaW50cy5mb3JtYXQ7
aWYoIWFXKXthVz1bXTthVy5wdXNoKHt4OnRydWUsbnVtYmVyOnRydWUscmVxdWlyZWQ6dHJ1ZX0p
O2FXLnB1c2goe3k6dHJ1ZSxudW1iZXI6dHJ1ZSxyZXF1aXJlZDp0cnVlfSk7aWYoYUouYmFycy5z
aG93fHwoYUoubGluZXMuc2hvdyYmYUoubGluZXMuZmlsbCkpe2FXLnB1c2goe3k6dHJ1ZSxudW1i
ZXI6dHJ1ZSxyZXF1aXJlZDpmYWxzZSxkZWZhdWx0VmFsdWU6MH0pO2lmKGFKLmJhcnMuaG9yaXpv
bnRhbCl7ZGVsZXRlIGFXW2FXLmxlbmd0aC0xXS55O2FXW2FXLmxlbmd0aC0xXS54PXRydWV9fWFK
LmRhdGFwb2ludHMuZm9ybWF0PWFXfWlmKGFKLmRhdGFwb2ludHMucG9pbnRzaXplIT1udWxsKXtj
b250aW51ZX1hSi5kYXRhcG9pbnRzLnBvaW50c2l6ZT1hVy5sZW5ndGg7YVA9YUouZGF0YXBvaW50
cy5wb2ludHNpemU7YVQ9YUouZGF0YXBvaW50cy5wb2ludHM7aW5zZXJ0U3RlcHM9YUoubGluZXMu
c2hvdyYmYUoubGluZXMuc3RlcHM7YUoueGF4aXMudXNlZD1hSi55YXhpcy51c2VkPXRydWU7Zm9y
KGFTPWFSPTA7YVM8YVoubGVuZ3RoOysrYVMsYVIrPWFQKXthTD1hWlthU107dmFyIGFFPWFMPT1u
dWxsO2lmKCFhRSl7Zm9yKGFOPTA7YU48YVA7KythTil7YTA9YUxbYU5dO2FYPWFXW2FOXTtpZihh
WCl7aWYoYVgubnVtYmVyJiZhMCE9bnVsbCl7YTA9K2EwO2lmKGlzTmFOKGEwKSl7YTA9bnVsbH1l
bHNle2lmKGEwPT1JbmZpbml0eSl7YTA9YUJ9ZWxzZXtpZihhMD09LUluZmluaXR5KXthMD0tYUJ9
fX19aWYoYTA9PW51bGwpe2lmKGFYLnJlcXVpcmVkKXthRT10cnVlfWlmKGFYLmRlZmF1bHRWYWx1
ZSE9bnVsbCl7YTA9YVguZGVmYXVsdFZhbHVlfX19YVRbYVIrYU5dPWEwfX1pZihhRSl7Zm9yKGFO
PTA7YU48YVA7KythTil7YTA9YVRbYVIrYU5dO2lmKGEwIT1udWxsKXthWD1hV1thTl07aWYoYVgu
eCl7YUYoYUoueGF4aXMsYTAsYTApfWlmKGFYLnkpe2FGKGFKLnlheGlzLGEwLGEwKX19YVRbYVIr
YU5dPW51bGx9fWVsc2V7aWYoaW5zZXJ0U3RlcHMmJmFSPjAmJmFUW2FSLWFQXSE9bnVsbCYmYVRb
YVItYVBdIT1hVFthUl0mJmFUW2FSLWFQKzFdIT1hVFthUisxXSl7Zm9yKGFOPTA7YU48YVA7Kyth
Til7YVRbYVIrYVArYU5dPWFUW2FSK2FOXX1hVFthUisxXT1hVFthUi1hUCsxXTthUis9YVB9fX19
Zm9yKGFVPTA7YVU8US5sZW5ndGg7KythVSl7YUo9UVthVV07YW4oYWsucHJvY2Vzc0RhdGFwb2lu
dHMsW2FKLGFKLmRhdGFwb2ludHNdKX1mb3IoYVU9MDthVTxRLmxlbmd0aDsrK2FVKXthSj1RW2FV
XTthVD1hSi5kYXRhcG9pbnRzLnBvaW50cyxhUD1hSi5kYXRhcG9pbnRzLnBvaW50c2l6ZTt2YXIg
YUs9YU8sYVE9YU8sYU09YUksYVY9YUk7Zm9yKGFTPTA7YVM8YVQubGVuZ3RoO2FTKz1hUCl7aWYo
YVRbYVNdPT1udWxsKXtjb250aW51ZX1mb3IoYU49MDthTjxhUDsrK2FOKXthMD1hVFthUythTl07
YVg9YVdbYU5dO2lmKCFhWHx8YTA9PWFCfHxhMD09LWFCKXtjb250aW51ZX1pZihhWC54KXtpZihh
MDxhSyl7YUs9YTB9aWYoYTA+YU0pe2FNPWEwfX1pZihhWC55KXtpZihhMDxhUSl7YVE9YTB9aWYo
YTA+YVYpe2FWPWEwfX19fWlmKGFKLmJhcnMuc2hvdyl7dmFyIGFZPWFKLmJhcnMuYWxpZ249PSJs
ZWZ0Ij8wOi1hSi5iYXJzLmJhcldpZHRoLzI7aWYoYUouYmFycy5ob3Jpem9udGFsKXthUSs9YVk7
YVYrPWFZK2FKLmJhcnMuYmFyV2lkdGh9ZWxzZXthSys9YVk7YU0rPWFZK2FKLmJhcnMuYmFyV2lk
dGh9fWFGKGFKLnhheGlzLGFLLGFNKTthRihhSi55YXhpcyxhUSxhVil9Yy5lYWNoKG0oKSxmdW5j
dGlvbihhMSxhMil7aWYoYTIuZGF0YW1pbj09YU8pe2EyLmRhdGFtaW49bnVsbH1pZihhMi5kYXRh
bWF4PT1hSSl7YTIuZGF0YW1heD1udWxsfX0pfWZ1bmN0aW9uIGooYUIsYUMpe3ZhciBhRD1kb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTthRC5jbGFzc05hbWU9YUM7YUQud2lkdGg9Rzth
RC5oZWlnaHQ9STtpZighYUIpe2MoYUQpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAs
dG9wOjB9KX1jKGFEKS5hcHBlbmRUbyhhdik7aWYoIWFELmdldENvbnRleHQpe2FEPXdpbmRvdy5H
X3ZtbENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQoYUQpfWFELmdldENvbnRleHQoIjJkIikuc2F2
ZSgpO3JldHVybiBhRH1mdW5jdGlvbiBCKCl7Rz1hdi53aWR0aCgpO0k9YXYuaGVpZ2h0KCk7aWYo
Rzw9MHx8STw9MCl7dGhyb3ciSW52YWxpZCBkaW1lbnNpb25zIGZvciBwbG90LCB3aWR0aCA9ICIr
RysiLCBoZWlnaHQgPSAiK0l9fWZ1bmN0aW9uIGcoYUMpe2lmKGFDLndpZHRoIT1HKXthQy53aWR0
aD1HfWlmKGFDLmhlaWdodCE9SSl7YUMuaGVpZ2h0PUl9dmFyIGFCPWFDLmdldENvbnRleHQoIjJk
Iik7YUIucmVzdG9yZSgpO2FCLnNhdmUoKX1mdW5jdGlvbiBYKCl7dmFyIGFDLGFCPWF2LmNoaWxk
cmVuKCJjYW52YXMuYmFzZSIpLGFEPWF2LmNoaWxkcmVuKCJjYW52YXMub3ZlcmxheSIpO2lmKGFC
Lmxlbmd0aD09MHx8YUQ9PTApe2F2Lmh0bWwoIiIpO2F2LmNzcyh7cGFkZGluZzowfSk7aWYoYXYu
Y3NzKCJwb3NpdGlvbiIpPT0ic3RhdGljIil7YXYuY3NzKCJwb3NpdGlvbiIsInJlbGF0aXZlIil9
QigpO2F6PWoodHJ1ZSwiYmFzZSIpO2FkPWooZmFsc2UsIm92ZXJsYXkiKTthQz1mYWxzZX1lbHNl
e2F6PWFCLmdldCgwKTthZD1hRC5nZXQoMCk7YUM9dHJ1ZX1IPWF6LmdldENvbnRleHQoIjJkIik7
QT1hZC5nZXRDb250ZXh0KCIyZCIpO3k9YyhbYWQsYXpdKTtpZihhQyl7YXYuZGF0YSgicGxvdCIp
LnNodXRkb3duKCk7YXEucmVzaXplKCk7QS5jbGVhclJlY3QoMCwwLEcsSSk7eS51bmJpbmQoKTth
di5jaGlsZHJlbigpLm5vdChbYXosYWRdKS5yZW1vdmUoKX1hdi5kYXRhKCJwbG90IixhcSl9ZnVu
Y3Rpb24gYWgoKXtpZihPLmdyaWQuaG92ZXJhYmxlKXt5Lm1vdXNlbW92ZShhYSk7eS5tb3VzZWxl
YXZlKGwpfWlmKE8uZ3JpZC5jbGlja2FibGUpe3kuY2xpY2soUil9YW4oYWsuYmluZEV2ZW50cyxb
eV0pfWZ1bmN0aW9uIGFnKCl7aWYoTSl7Y2xlYXJUaW1lb3V0KE0pfXkudW5iaW5kKCJtb3VzZW1v
dmUiLGFhKTt5LnVuYmluZCgibW91c2VsZWF2ZSIsbCk7eS51bmJpbmQoImNsaWNrIixSKTthbihh
ay5zaHV0ZG93bixbeV0pfWZ1bmN0aW9uIHIoYUcpe2Z1bmN0aW9uIGFDKGFIKXtyZXR1cm4gYUh9
dmFyIGFGLGFCLGFEPWFHLm9wdGlvbnMudHJhbnNmb3JtfHxhQyxhRT1hRy5vcHRpb25zLmludmVy
c2VUcmFuc2Zvcm07aWYoYUcuZGlyZWN0aW9uPT0ieCIpe2FGPWFHLnNjYWxlPWgvTWF0aC5hYnMo
YUQoYUcubWF4KS1hRChhRy5taW4pKTthQj1NYXRoLm1pbihhRChhRy5tYXgpLGFEKGFHLm1pbikp
fWVsc2V7YUY9YUcuc2NhbGU9dy9NYXRoLmFicyhhRChhRy5tYXgpLWFEKGFHLm1pbikpO2FGPS1h
RjthQj1NYXRoLm1heChhRChhRy5tYXgpLGFEKGFHLm1pbikpfWlmKGFEPT1hQyl7YUcucDJjPWZ1
bmN0aW9uKGFIKXtyZXR1cm4oYUgtYUIpKmFGfX1lbHNle2FHLnAyYz1mdW5jdGlvbihhSCl7cmV0
dXJuKGFEKGFIKS1hQikqYUZ9fWlmKCFhRSl7YUcuYzJwPWZ1bmN0aW9uKGFIKXtyZXR1cm4gYUIr
YUgvYUZ9fWVsc2V7YUcuYzJwPWZ1bmN0aW9uKGFIKXtyZXR1cm4gYUUoYUIrYUgvYUYpfX19ZnVu
Y3Rpb24gTChhRCl7dmFyIGFCPWFELm9wdGlvbnMsYUYsYUo9YUQudGlja3N8fFtdLGFJPVtdLGFF
LGFLPWFCLmxhYmVsV2lkdGgsYUc9YUIubGFiZWxIZWlnaHQsYUM7ZnVuY3Rpb24gYUgoYU0sYUwp
e3JldHVybiBjKCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTEwMDAwcHg7Jyth
TCsnZm9udC1zaXplOnNtYWxsZXIiPjxkaXYgY2xhc3M9IicrYUQuZGlyZWN0aW9uKyJBeGlzICIr
YUQuZGlyZWN0aW9uK2FELm4rJ0F4aXMiPicrYU0uam9pbigiIikrIjwvZGl2PjwvZGl2PiIpLmFw
cGVuZFRvKGF2KX1pZihhRC5kaXJlY3Rpb249PSJ4Iil7aWYoYUs9PW51bGwpe2FLPU1hdGguZmxv
b3IoRy8oYUoubGVuZ3RoPjA/YUoubGVuZ3RoOjEpKX1pZihhRz09bnVsbCl7YUk9W107Zm9yKGFG
PTA7YUY8YUoubGVuZ3RoOysrYUYpe2FFPWFKW2FGXS5sYWJlbDtpZihhRSl7YUkucHVzaCgnPGRp
diBjbGFzcz0idGlja0xhYmVsIiBzdHlsZT0iZmxvYXQ6bGVmdDt3aWR0aDonK2FLKydweCI+Jyth
RSsiPC9kaXY+Iil9fWlmKGFJLmxlbmd0aD4wKXthSS5wdXNoKCc8ZGl2IHN0eWxlPSJjbGVhcjps
ZWZ0Ij48L2Rpdj4nKTthQz1hSChhSSwid2lkdGg6MTAwMDBweDsiKTthRz1hQy5oZWlnaHQoKTth
Qy5yZW1vdmUoKX19fWVsc2V7aWYoYUs9PW51bGx8fGFHPT1udWxsKXtmb3IoYUY9MDthRjxhSi5s
ZW5ndGg7KythRil7YUU9YUpbYUZdLmxhYmVsO2lmKGFFKXthSS5wdXNoKCc8ZGl2IGNsYXNzPSJ0
aWNrTGFiZWwiPicrYUUrIjwvZGl2PiIpfX1pZihhSS5sZW5ndGg+MCl7YUM9YUgoYUksIiIpO2lm
KGFLPT1udWxsKXthSz1hQy5jaGlsZHJlbigpLndpZHRoKCl9aWYoYUc9PW51bGwpe2FHPWFDLmZp
bmQoImRpdi50aWNrTGFiZWwiKS5oZWlnaHQoKX1hQy5yZW1vdmUoKX19fWlmKGFLPT1udWxsKXth
Sz0wfWlmKGFHPT1udWxsKXthRz0wfWFELmxhYmVsV2lkdGg9YUs7YUQubGFiZWxIZWlnaHQ9YUd9
ZnVuY3Rpb24gYXUoYUQpe3ZhciBhQz1hRC5sYWJlbFdpZHRoLGFMPWFELmxhYmVsSGVpZ2h0LGFI
PWFELm9wdGlvbnMucG9zaXRpb24sYUY9YUQub3B0aW9ucy50aWNrTGVuZ3RoLGFHPU8uZ3JpZC5h
eGlzTWFyZ2luLGFKPU8uZ3JpZC5sYWJlbE1hcmdpbixhSz1hRC5kaXJlY3Rpb249PSJ4Ij9wOmF3
LGFFO3ZhciBhQj1jLmdyZXAoYUssZnVuY3Rpb24oYU4pe3JldHVybiBhTiYmYU4ub3B0aW9ucy5w
b3NpdGlvbj09YUgmJmFOLnJlc2VydmVTcGFjZX0pO2lmKGMuaW5BcnJheShhRCxhQik9PWFCLmxl
bmd0aC0xKXthRz0wfWlmKGFGPT1udWxsKXthRj0iZnVsbCJ9dmFyIGFJPWMuZ3JlcChhSyxmdW5j
dGlvbihhTil7cmV0dXJuIGFOJiZhTi5yZXNlcnZlU3BhY2V9KTt2YXIgYU09Yy5pbkFycmF5KGFE
LGFJKT09MDtpZighYU0mJmFGPT0iZnVsbCIpe2FGPTV9aWYoIWlzTmFOKCthRikpe2FKKz0rYUZ9
aWYoYUQuZGlyZWN0aW9uPT0ieCIpe2FMKz1hSjtpZihhSD09ImJvdHRvbSIpe3EuYm90dG9tKz1h
TCthRzthRC5ib3g9e3RvcDpJLXEuYm90dG9tLGhlaWdodDphTH19ZWxzZXthRC5ib3g9e3RvcDpx
LnRvcCthRyxoZWlnaHQ6YUx9O3EudG9wKz1hTCthR319ZWxzZXthQys9YUo7aWYoYUg9PSJsZWZ0
Iil7YUQuYm94PXtsZWZ0OnEubGVmdCthRyx3aWR0aDphQ307cS5sZWZ0Kz1hQythR31lbHNle3Eu
cmlnaHQrPWFDK2FHO2FELmJveD17bGVmdDpHLXEucmlnaHQsd2lkdGg6YUN9fX1hRC5wb3NpdGlv
bj1hSDthRC50aWNrTGVuZ3RoPWFGO2FELmJveC5wYWRkaW5nPWFKO2FELmlubmVybW9zdD1hTX1m
dW5jdGlvbiBVKGFCKXtpZihhQi5kaXJlY3Rpb249PSJ4Iil7YUIuYm94LmxlZnQ9cS5sZWZ0O2FC
LmJveC53aWR0aD1ofWVsc2V7YUIuYm94LnRvcD1xLnRvcDthQi5ib3guaGVpZ2h0PXd9fWZ1bmN0
aW9uIHQoKXt2YXIgYUMsYUU9bSgpO2MuZWFjaChhRSxmdW5jdGlvbihhRixhRyl7YUcuc2hvdz1h
Ry5vcHRpb25zLnNob3c7aWYoYUcuc2hvdz09bnVsbCl7YUcuc2hvdz1hRy51c2VkfWFHLnJlc2Vy
dmVTcGFjZT1hRy5zaG93fHxhRy5vcHRpb25zLnJlc2VydmVTcGFjZTtuKGFHKX0pO2FsbG9jYXRl
ZEF4ZXM9Yy5ncmVwKGFFLGZ1bmN0aW9uKGFGKXtyZXR1cm4gYUYucmVzZXJ2ZVNwYWNlfSk7cS5s
ZWZ0PXEucmlnaHQ9cS50b3A9cS5ib3R0b209MDtpZihPLmdyaWQuc2hvdyl7Yy5lYWNoKGFsbG9j
YXRlZEF4ZXMsZnVuY3Rpb24oYUYsYUcpe1MoYUcpO1AoYUcpO2FwKGFHLGFHLnRpY2tzKTtMKGFH
KX0pO2ZvcihhQz1hbGxvY2F0ZWRBeGVzLmxlbmd0aC0xO2FDPj0wOy0tYUMpe2F1KGFsbG9jYXRl
ZEF4ZXNbYUNdKX12YXIgYUQ9Ty5ncmlkLm1pbkJvcmRlck1hcmdpbjtpZihhRD09bnVsbCl7YUQ9
MDtmb3IoYUM9MDthQzxRLmxlbmd0aDsrK2FDKXthRD1NYXRoLm1heChhRCxRW2FDXS5wb2ludHMu
cmFkaXVzK1FbYUNdLnBvaW50cy5saW5lV2lkdGgvMil9fWZvcih2YXIgYUIgaW4gcSl7cVthQl0r
PU8uZ3JpZC5ib3JkZXJXaWR0aDtxW2FCXT1NYXRoLm1heChhRCxxW2FCXSl9fWg9Ry1xLmxlZnQt
cS5yaWdodDt3PUktcS5ib3R0b20tcS50b3A7Yy5lYWNoKGFFLGZ1bmN0aW9uKGFGLGFHKXtyKGFH
KX0pO2lmKE8uZ3JpZC5zaG93KXtjLmVhY2goYWxsb2NhdGVkQXhlcyxmdW5jdGlvbihhRixhRyl7
VShhRyl9KTtrKCl9bygpfWZ1bmN0aW9uIG4oYUUpe3ZhciBhRj1hRS5vcHRpb25zLGFEPSsoYUYu
bWluIT1udWxsP2FGLm1pbjphRS5kYXRhbWluKSxhQj0rKGFGLm1heCE9bnVsbD9hRi5tYXg6YUUu
ZGF0YW1heCksYUg9YUItYUQ7aWYoYUg9PTApe3ZhciBhQz1hQj09MD8xOjAuMDE7aWYoYUYubWlu
PT1udWxsKXthRC09YUN9aWYoYUYubWF4PT1udWxsfHxhRi5taW4hPW51bGwpe2FCKz1hQ319ZWxz
ZXt2YXIgYUc9YUYuYXV0b3NjYWxlTWFyZ2luO2lmKGFHIT1udWxsKXtpZihhRi5taW49PW51bGwp
e2FELT1hSCphRztpZihhRDwwJiZhRS5kYXRhbWluIT1udWxsJiZhRS5kYXRhbWluPj0wKXthRD0w
fX1pZihhRi5tYXg9PW51bGwpe2FCKz1hSCphRztpZihhQj4wJiZhRS5kYXRhbWF4IT1udWxsJiZh
RS5kYXRhbWF4PD0wKXthQj0wfX19fWFFLm1pbj1hRDthRS5tYXg9YUJ9ZnVuY3Rpb24gUyhhRyl7
dmFyIGFNPWFHLm9wdGlvbnM7dmFyIGFIO2lmKHR5cGVvZiBhTS50aWNrcz09Im51bWJlciImJmFN
LnRpY2tzPjApe2FIPWFNLnRpY2tzfWVsc2V7YUg9MC4zKk1hdGguc3FydChhRy5kaXJlY3Rpb249
PSJ4Ij9HOkkpfXZhciBhVD0oYUcubWF4LWFHLm1pbikvYUgsYU8sYUIsYU4sYVIsYVMsYVEsYUk7
aWYoYU0ubW9kZT09InRpbWUiKXt2YXIgYUo9e3NlY29uZDoxMDAwLG1pbnV0ZTo2MCoxMDAwLGhv
dXI6NjAqNjAqMTAwMCxkYXk6MjQqNjAqNjAqMTAwMCxtb250aDozMCoyNCo2MCo2MCoxMDAwLHll
YXI6MzY1LjI0MjUqMjQqNjAqNjAqMTAwMH07dmFyIGFLPVtbMSwic2Vjb25kIl0sWzIsInNlY29u
ZCJdLFs1LCJzZWNvbmQiXSxbMTAsInNlY29uZCJdLFszMCwic2Vjb25kIl0sWzEsIm1pbnV0ZSJd
LFsyLCJtaW51dGUiXSxbNSwibWludXRlIl0sWzEwLCJtaW51dGUiXSxbMzAsIm1pbnV0ZSJdLFsx
LCJob3VyIl0sWzIsImhvdXIiXSxbNCwiaG91ciJdLFs4LCJob3VyIl0sWzEyLCJob3VyIl0sWzEs
ImRheSJdLFsyLCJkYXkiXSxbMywiZGF5Il0sWzAuMjUsIm1vbnRoIl0sWzAuNSwibW9udGgiXSxb
MSwibW9udGgiXSxbMiwibW9udGgiXSxbMywibW9udGgiXSxbNiwibW9udGgiXSxbMSwieWVhciJd
XTt2YXIgYUM9MDtpZihhTS5taW5UaWNrU2l6ZSE9bnVsbCl7aWYodHlwZW9mIGFNLnRpY2tTaXpl
PT0ibnVtYmVyIil7YUM9YU0udGlja1NpemV9ZWxzZXthQz1hTS5taW5UaWNrU2l6ZVswXSphSlth
TS5taW5UaWNrU2l6ZVsxXV19fWZvcih2YXIgYVM9MDthUzxhSy5sZW5ndGgtMTsrK2FTKXtpZihh
VDwoYUtbYVNdWzBdKmFKW2FLW2FTXVsxXV0rYUtbYVMrMV1bMF0qYUpbYUtbYVMrMV1bMV1dKS8y
JiZhS1thU11bMF0qYUpbYUtbYVNdWzFdXT49YUMpe2JyZWFrfX1hTz1hS1thU11bMF07YU49YUtb
YVNdWzFdO2lmKGFOPT0ieWVhciIpe2FRPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2co
YVQvYUoueWVhcikvTWF0aC5MTjEwKSk7YUk9KGFUL2FKLnllYXIpL2FRO2lmKGFJPDEuNSl7YU89
MX1lbHNle2lmKGFJPDMpe2FPPTJ9ZWxzZXtpZihhSTw3LjUpe2FPPTV9ZWxzZXthTz0xMH19fWFP
Kj1hUX1hRy50aWNrU2l6ZT1hTS50aWNrU2l6ZXx8W2FPLGFOXTthQj1mdW5jdGlvbihhWCl7dmFy
IGEyPVtdLGEwPWFYLnRpY2tTaXplWzBdLGEzPWFYLnRpY2tTaXplWzFdLGExPW5ldyBEYXRlKGFY
Lm1pbik7dmFyIGFXPWEwKmFKW2EzXTtpZihhMz09InNlY29uZCIpe2ExLnNldFVUQ1NlY29uZHMo
YShhMS5nZXRVVENTZWNvbmRzKCksYTApKX1pZihhMz09Im1pbnV0ZSIpe2ExLnNldFVUQ01pbnV0
ZXMoYShhMS5nZXRVVENNaW51dGVzKCksYTApKX1pZihhMz09ImhvdXIiKXthMS5zZXRVVENIb3Vy
cyhhKGExLmdldFVUQ0hvdXJzKCksYTApKX1pZihhMz09Im1vbnRoIil7YTEuc2V0VVRDTW9udGgo
YShhMS5nZXRVVENNb250aCgpLGEwKSl9aWYoYTM9PSJ5ZWFyIil7YTEuc2V0VVRDRnVsbFllYXIo
YShhMS5nZXRVVENGdWxsWWVhcigpLGEwKSl9YTEuc2V0VVRDTWlsbGlzZWNvbmRzKDApO2lmKGFX
Pj1hSi5taW51dGUpe2ExLnNldFVUQ1NlY29uZHMoMCl9aWYoYVc+PWFKLmhvdXIpe2ExLnNldFVU
Q01pbnV0ZXMoMCl9aWYoYVc+PWFKLmRheSl7YTEuc2V0VVRDSG91cnMoMCl9aWYoYVc+PWFKLmRh
eSo0KXthMS5zZXRVVENEYXRlKDEpfWlmKGFXPj1hSi55ZWFyKXthMS5zZXRVVENNb250aCgwKX12
YXIgYTU9MCxhND1OdW1iZXIuTmFOLGFZO2Rve2FZPWE0O2E0PWExLmdldFRpbWUoKTthMi5wdXNo
KGE0KTtpZihhMz09Im1vbnRoIil7aWYoYTA8MSl7YTEuc2V0VVRDRGF0ZSgxKTt2YXIgYVY9YTEu
Z2V0VGltZSgpO2ExLnNldFVUQ01vbnRoKGExLmdldFVUQ01vbnRoKCkrMSk7dmFyIGFaPWExLmdl
dFRpbWUoKTthMS5zZXRUaW1lKGE0K2E1KmFKLmhvdXIrKGFaLWFWKSphMCk7YTU9YTEuZ2V0VVRD
SG91cnMoKTthMS5zZXRVVENIb3VycygwKX1lbHNle2ExLnNldFVUQ01vbnRoKGExLmdldFVUQ01v
bnRoKCkrYTApfX1lbHNle2lmKGEzPT0ieWVhciIpe2ExLnNldFVUQ0Z1bGxZZWFyKGExLmdldFVU
Q0Z1bGxZZWFyKCkrYTApfWVsc2V7YTEuc2V0VGltZShhNCthVyl9fX13aGlsZShhNDxhWC5tYXgm
JmE0IT1hWSk7cmV0dXJuIGEyfTthUj1mdW5jdGlvbihhVixhWSl7dmFyIGEwPW5ldyBEYXRlKGFW
KTtpZihhTS50aW1lZm9ybWF0IT1udWxsKXtyZXR1cm4gYy5wbG90LmZvcm1hdERhdGUoYTAsYU0u
dGltZWZvcm1hdCxhTS5tb250aE5hbWVzKX12YXIgYVc9YVkudGlja1NpemVbMF0qYUpbYVkudGlj
a1NpemVbMV1dO3ZhciBhWD1hWS5tYXgtYVkubWluO3ZhciBhWj0oYU0udHdlbHZlSG91ckNsb2Nr
KT8iICVwIjoiIjtpZihhVzxhSi5taW51dGUpe2ZtdD0iJWg6JU06JVMiK2FafWVsc2V7aWYoYVc8
YUouZGF5KXtpZihhWDwyKmFKLmRheSl7Zm10PSIlaDolTSIrYVp9ZWxzZXtmbXQ9IiViICVkICVo
OiVNIithWn19ZWxzZXtpZihhVzxhSi5tb250aCl7Zm10PSIlYiAlZCJ9ZWxzZXtpZihhVzxhSi55
ZWFyKXtpZihhWDxhSi55ZWFyKXtmbXQ9IiViIn1lbHNle2ZtdD0iJWIgJXkifX1lbHNle2ZtdD0i
JXkifX19fXJldHVybiBjLnBsb3QuZm9ybWF0RGF0ZShhMCxmbXQsYU0ubW9udGhOYW1lcyl9fWVs
c2V7dmFyIGFVPWFNLnRpY2tEZWNpbWFsczt2YXIgYVA9LU1hdGguZmxvb3IoTWF0aC5sb2coYVQp
L01hdGguTE4xMCk7aWYoYVUhPW51bGwmJmFQPmFVKXthUD1hVX1hUT1NYXRoLnBvdygxMCwtYVAp
O2FJPWFUL2FRO2lmKGFJPDEuNSl7YU89MX1lbHNle2lmKGFJPDMpe2FPPTI7aWYoYUk+Mi4yNSYm
KGFVPT1udWxsfHxhUCsxPD1hVSkpe2FPPTIuNTsrK2FQfX1lbHNle2lmKGFJPDcuNSl7YU89NX1l
bHNle2FPPTEwfX19YU8qPWFRO2lmKGFNLm1pblRpY2tTaXplIT1udWxsJiZhTzxhTS5taW5UaWNr
U2l6ZSl7YU89YU0ubWluVGlja1NpemV9YUcudGlja0RlY2ltYWxzPU1hdGgubWF4KDAsYVUhPW51
bGw/YVU6YVApO2FHLnRpY2tTaXplPWFNLnRpY2tTaXplfHxhTzthQj1mdW5jdGlvbihhWCl7dmFy
IGFaPVtdO3ZhciBhMD1hKGFYLm1pbixhWC50aWNrU2l6ZSksYVc9MCxhVj1OdW1iZXIuTmFOLGFZ
O2Rve2FZPWFWO2FWPWEwK2FXKmFYLnRpY2tTaXplO2FaLnB1c2goYVYpOysrYVd9d2hpbGUoYVY8
YVgubWF4JiZhViE9YVkpO3JldHVybiBhWn07YVI9ZnVuY3Rpb24oYVYsYVcpe3JldHVybiBhVi50
b0ZpeGVkKGFXLnRpY2tEZWNpbWFscyl9fWlmKGFNLmFsaWduVGlja3NXaXRoQXhpcyE9bnVsbCl7
dmFyIGFGPShhRy5kaXJlY3Rpb249PSJ4Ij9wOmF3KVthTS5hbGlnblRpY2tzV2l0aEF4aXMtMV07
aWYoYUYmJmFGLnVzZWQmJmFGIT1hRyl7dmFyIGFMPWFCKGFHKTtpZihhTC5sZW5ndGg+MCl7aWYo
YU0ubWluPT1udWxsKXthRy5taW49TWF0aC5taW4oYUcubWluLGFMWzBdKX1pZihhTS5tYXg9PW51
bGwmJmFMLmxlbmd0aD4xKXthRy5tYXg9TWF0aC5tYXgoYUcubWF4LGFMW2FMLmxlbmd0aC0xXSl9
fWFCPWZ1bmN0aW9uKGFYKXt2YXIgYVk9W10sYVYsYVc7Zm9yKGFXPTA7YVc8YUYudGlja3MubGVu
Z3RoOysrYVcpe2FWPShhRi50aWNrc1thV10udi1hRi5taW4pLyhhRi5tYXgtYUYubWluKTthVj1h
WC5taW4rYVYqKGFYLm1heC1hWC5taW4pO2FZLnB1c2goYVYpfXJldHVybiBhWX07aWYoYUcubW9k
ZSE9InRpbWUiJiZhTS50aWNrRGVjaW1hbHM9PW51bGwpe3ZhciBhRT1NYXRoLm1heCgwLC1NYXRo
LmZsb29yKE1hdGgubG9nKGFUKS9NYXRoLkxOMTApKzEpLGFEPWFCKGFHKTtpZighKGFELmxlbmd0
aD4xJiYvXC4uKjAkLy50ZXN0KChhRFsxXS1hRFswXSkudG9GaXhlZChhRSkpKSl7YUcudGlja0Rl
Y2ltYWxzPWFFfX19fWFHLnRpY2tHZW5lcmF0b3I9YUI7aWYoYy5pc0Z1bmN0aW9uKGFNLnRpY2tG
b3JtYXR0ZXIpKXthRy50aWNrRm9ybWF0dGVyPWZ1bmN0aW9uKGFWLGFXKXtyZXR1cm4iIithTS50
aWNrRm9ybWF0dGVyKGFWLGFXKX19ZWxzZXthRy50aWNrRm9ybWF0dGVyPWFSfX1mdW5jdGlvbiBQ
KGFGKXt2YXIgYUg9YUYub3B0aW9ucy50aWNrcyxhRz1bXTtpZihhSD09bnVsbHx8KHR5cGVvZiBh
SD09Im51bWJlciImJmFIPjApKXthRz1hRi50aWNrR2VuZXJhdG9yKGFGKX1lbHNle2lmKGFIKXtp
ZihjLmlzRnVuY3Rpb24oYUgpKXthRz1hSCh7bWluOmFGLm1pbixtYXg6YUYubWF4fSl9ZWxzZXth
Rz1hSH19fXZhciBhRSxhQjthRi50aWNrcz1bXTtmb3IoYUU9MDthRTxhRy5sZW5ndGg7KythRSl7
dmFyIGFDPW51bGw7dmFyIGFEPWFHW2FFXTtpZih0eXBlb2YgYUQ9PSJvYmplY3QiKXthQj0rYURb
MF07aWYoYUQubGVuZ3RoPjEpe2FDPWFEWzFdfX1lbHNle2FCPSthRH1pZihhQz09bnVsbCl7YUM9
YUYudGlja0Zvcm1hdHRlcihhQixhRil9aWYoIWlzTmFOKGFCKSl7YUYudGlja3MucHVzaCh7djph
QixsYWJlbDphQ30pfX19ZnVuY3Rpb24gYXAoYUIsYUMpe2lmKGFCLm9wdGlvbnMuYXV0b3NjYWxl
TWFyZ2luJiZhQy5sZW5ndGg+MCl7aWYoYUIub3B0aW9ucy5taW49PW51bGwpe2FCLm1pbj1NYXRo
Lm1pbihhQi5taW4sYUNbMF0udil9aWYoYUIub3B0aW9ucy5tYXg9PW51bGwmJmFDLmxlbmd0aD4x
KXthQi5tYXg9TWF0aC5tYXgoYUIubWF4LGFDW2FDLmxlbmd0aC0xXS52KX19fWZ1bmN0aW9uIFco
KXtILmNsZWFyUmVjdCgwLDAsRyxJKTt2YXIgYUM9Ty5ncmlkO2lmKGFDLnNob3cmJmFDLmJhY2tn
cm91bmRDb2xvcil7TigpfWlmKGFDLnNob3cmJiFhQy5hYm92ZURhdGEpe2FjKCl9Zm9yKHZhciBh
Qj0wO2FCPFEubGVuZ3RoOysrYUIpe2FuKGFrLmRyYXdTZXJpZXMsW0gsUVthQl1dKTtkKFFbYUJd
KX1hbihhay5kcmF3LFtIXSk7aWYoYUMuc2hvdyYmYUMuYWJvdmVEYXRhKXthYygpfX1mdW5jdGlv
biBEKGFCLGFJKXt2YXIgYUUsYUgsYUcsYUQsYUY9bSgpO2ZvcihpPTA7aTxhRi5sZW5ndGg7Kytp
KXthRT1hRltpXTtpZihhRS5kaXJlY3Rpb249PWFJKXthRD1hSSthRS5uKyJheGlzIjtpZighYUJb
YURdJiZhRS5uPT0xKXthRD1hSSsiYXhpcyJ9aWYoYUJbYURdKXthSD1hQlthRF0uZnJvbTthRz1h
QlthRF0udG87YnJlYWt9fX1pZighYUJbYURdKXthRT1hST09IngiP3BbMF06YXdbMF07YUg9YUJb
YUkrIjEiXTthRz1hQlthSSsiMiJdfWlmKGFIIT1udWxsJiZhRyE9bnVsbCYmYUg+YUcpe3ZhciBh
Qz1hSDthSD1hRzthRz1hQ31yZXR1cm57ZnJvbTphSCx0bzphRyxheGlzOmFFfX1mdW5jdGlvbiBO
KCl7SC5zYXZlKCk7SC50cmFuc2xhdGUocS5sZWZ0LHEudG9wKTtILmZpbGxTdHlsZT1hbShPLmdy
aWQuYmFja2dyb3VuZENvbG9yLHcsMCwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKSIpO0guZmlsbFJl
Y3QoMCwwLGgsdyk7SC5yZXN0b3JlKCl9ZnVuY3Rpb24gYWMoKXt2YXIgYUY7SC5zYXZlKCk7SC50
cmFuc2xhdGUocS5sZWZ0LHEudG9wKTt2YXIgYUg9Ty5ncmlkLm1hcmtpbmdzO2lmKGFIKXtpZihj
LmlzRnVuY3Rpb24oYUgpKXt2YXIgYUs9YXEuZ2V0QXhlcygpO2FLLnhtaW49YUsueGF4aXMubWlu
O2FLLnhtYXg9YUsueGF4aXMubWF4O2FLLnltaW49YUsueWF4aXMubWluO2FLLnltYXg9YUsueWF4
aXMubWF4O2FIPWFIKGFLKX1mb3IoYUY9MDthRjxhSC5sZW5ndGg7KythRil7dmFyIGFEPWFIW2FG
XSxhQz1EKGFELCJ4IiksYUk9RChhRCwieSIpO2lmKGFDLmZyb209PW51bGwpe2FDLmZyb209YUMu
YXhpcy5taW59aWYoYUMudG89PW51bGwpe2FDLnRvPWFDLmF4aXMubWF4fWlmKGFJLmZyb209PW51
bGwpe2FJLmZyb209YUkuYXhpcy5taW59aWYoYUkudG89PW51bGwpe2FJLnRvPWFJLmF4aXMubWF4
fWlmKGFDLnRvPGFDLmF4aXMubWlufHxhQy5mcm9tPmFDLmF4aXMubWF4fHxhSS50bzxhSS5heGlz
Lm1pbnx8YUkuZnJvbT5hSS5heGlzLm1heCl7Y29udGludWV9YUMuZnJvbT1NYXRoLm1heChhQy5m
cm9tLGFDLmF4aXMubWluKTthQy50bz1NYXRoLm1pbihhQy50byxhQy5heGlzLm1heCk7YUkuZnJv
bT1NYXRoLm1heChhSS5mcm9tLGFJLmF4aXMubWluKTthSS50bz1NYXRoLm1pbihhSS50byxhSS5h
eGlzLm1heCk7aWYoYUMuZnJvbT09YUMudG8mJmFJLmZyb209PWFJLnRvKXtjb250aW51ZX1hQy5m
cm9tPWFDLmF4aXMucDJjKGFDLmZyb20pO2FDLnRvPWFDLmF4aXMucDJjKGFDLnRvKTthSS5mcm9t
PWFJLmF4aXMucDJjKGFJLmZyb20pO2FJLnRvPWFJLmF4aXMucDJjKGFJLnRvKTtpZihhQy5mcm9t
PT1hQy50b3x8YUkuZnJvbT09YUkudG8pe0guYmVnaW5QYXRoKCk7SC5zdHJva2VTdHlsZT1hRC5j
b2xvcnx8Ty5ncmlkLm1hcmtpbmdzQ29sb3I7SC5saW5lV2lkdGg9YUQubGluZVdpZHRofHxPLmdy
aWQubWFya2luZ3NMaW5lV2lkdGg7SC5tb3ZlVG8oYUMuZnJvbSxhSS5mcm9tKTtILmxpbmVUbyhh
Qy50byxhSS50byk7SC5zdHJva2UoKX1lbHNle0guZmlsbFN0eWxlPWFELmNvbG9yfHxPLmdyaWQu
bWFya2luZ3NDb2xvcjtILmZpbGxSZWN0KGFDLmZyb20sYUkudG8sYUMudG8tYUMuZnJvbSxhSS5m
cm9tLWFJLnRvKX19fXZhciBhSz1tKCksYU09Ty5ncmlkLmJvcmRlcldpZHRoO2Zvcih2YXIgYUU9
MDthRTxhSy5sZW5ndGg7KythRSl7dmFyIGFCPWFLW2FFXSxhRz1hQi5ib3gsYVE9YUIudGlja0xl
bmd0aCxhTixhTCxhUCxhSjtpZighYUIuc2hvd3x8YUIudGlja3MubGVuZ3RoPT0wKXtjb250aW51
ZX1ILnN0cm9rZVN0eWxlPWFCLm9wdGlvbnMudGlja0NvbG9yfHxjLmNvbG9yLnBhcnNlKGFCLm9w
dGlvbnMuY29sb3IpLnNjYWxlKCJhIiwwLjIyKS50b1N0cmluZygpO0gubGluZVdpZHRoPTE7aWYo
YUIuZGlyZWN0aW9uPT0ieCIpe2FOPTA7aWYoYVE9PSJmdWxsIil7YUw9KGFCLnBvc2l0aW9uPT0i
dG9wIj8wOncpfWVsc2V7YUw9YUcudG9wLXEudG9wKyhhQi5wb3NpdGlvbj09InRvcCI/YUcuaGVp
Z2h0OjApfX1lbHNle2FMPTA7aWYoYVE9PSJmdWxsIil7YU49KGFCLnBvc2l0aW9uPT0ibGVmdCI/
MDpoKX1lbHNle2FOPWFHLmxlZnQtcS5sZWZ0KyhhQi5wb3NpdGlvbj09ImxlZnQiP2FHLndpZHRo
OjApfX1pZighYUIuaW5uZXJtb3N0KXtILmJlZ2luUGF0aCgpO2FQPWFKPTA7aWYoYUIuZGlyZWN0
aW9uPT0ieCIpe2FQPWh9ZWxzZXthSj13fWlmKEgubGluZVdpZHRoPT0xKXthTj1NYXRoLmZsb29y
KGFOKSswLjU7YUw9TWF0aC5mbG9vcihhTCkrMC41fUgubW92ZVRvKGFOLGFMKTtILmxpbmVUbyhh
TithUCxhTCthSik7SC5zdHJva2UoKX1ILmJlZ2luUGF0aCgpO2ZvcihhRj0wO2FGPGFCLnRpY2tz
Lmxlbmd0aDsrK2FGKXt2YXIgYU89YUIudGlja3NbYUZdLnY7YVA9YUo9MDtpZihhTzxhQi5taW58
fGFPPmFCLm1heHx8KGFRPT0iZnVsbCImJmFNPjAmJihhTz09YUIubWlufHxhTz09YUIubWF4KSkp
e2NvbnRpbnVlfWlmKGFCLmRpcmVjdGlvbj09IngiKXthTj1hQi5wMmMoYU8pO2FKPWFRPT0iZnVs
bCI/LXc6YVE7aWYoYUIucG9zaXRpb249PSJ0b3AiKXthSj0tYUp9fWVsc2V7YUw9YUIucDJjKGFP
KTthUD1hUT09ImZ1bGwiPy1oOmFRO2lmKGFCLnBvc2l0aW9uPT0ibGVmdCIpe2FQPS1hUH19aWYo
SC5saW5lV2lkdGg9PTEpe2lmKGFCLmRpcmVjdGlvbj09IngiKXthTj1NYXRoLmZsb29yKGFOKSsw
LjV9ZWxzZXthTD1NYXRoLmZsb29yKGFMKSswLjV9fUgubW92ZVRvKGFOLGFMKTtILmxpbmVUbyhh
TithUCxhTCthSil9SC5zdHJva2UoKX1pZihhTSl7SC5saW5lV2lkdGg9YU07SC5zdHJva2VTdHls
ZT1PLmdyaWQuYm9yZGVyQ29sb3I7SC5zdHJva2VSZWN0KC1hTS8yLC1hTS8yLGgrYU0sdythTSl9
SC5yZXN0b3JlKCl9ZnVuY3Rpb24gaygpe2F2LmZpbmQoIi50aWNrTGFiZWxzIikucmVtb3ZlKCk7
dmFyIGFHPVsnPGRpdiBjbGFzcz0idGlja0xhYmVscyIgc3R5bGU9ImZvbnQtc2l6ZTpzbWFsbGVy
Ij4nXTt2YXIgYUo9bSgpO2Zvcih2YXIgYUQ9MDthRDxhSi5sZW5ndGg7KythRCl7dmFyIGFDPWFK
W2FEXSxhRj1hQy5ib3g7aWYoIWFDLnNob3cpe2NvbnRpbnVlfWFHLnB1c2goJzxkaXYgY2xhc3M9
IicrYUMuZGlyZWN0aW9uKyJBeGlzICIrYUMuZGlyZWN0aW9uK2FDLm4rJ0F4aXMiIHN0eWxlPSJj
b2xvcjonK2FDLm9wdGlvbnMuY29sb3IrJyI+Jyk7Zm9yKHZhciBhRT0wO2FFPGFDLnRpY2tzLmxl
bmd0aDsrK2FFKXt2YXIgYUg9YUMudGlja3NbYUVdO2lmKCFhSC5sYWJlbHx8YUgudjxhQy5taW58
fGFILnY+YUMubWF4KXtjb250aW51ZX12YXIgYUs9e30sYUk7aWYoYUMuZGlyZWN0aW9uPT0ieCIp
e2FJPSJjZW50ZXIiO2FLLmxlZnQ9TWF0aC5yb3VuZChxLmxlZnQrYUMucDJjKGFILnYpLWFDLmxh
YmVsV2lkdGgvMik7aWYoYUMucG9zaXRpb249PSJib3R0b20iKXthSy50b3A9YUYudG9wK2FGLnBh
ZGRpbmd9ZWxzZXthSy5ib3R0b209SS0oYUYudG9wK2FGLmhlaWdodC1hRi5wYWRkaW5nKX19ZWxz
ZXthSy50b3A9TWF0aC5yb3VuZChxLnRvcCthQy5wMmMoYUgudiktYUMubGFiZWxIZWlnaHQvMik7
aWYoYUMucG9zaXRpb249PSJsZWZ0Iil7YUsucmlnaHQ9Ry0oYUYubGVmdCthRi53aWR0aC1hRi5w
YWRkaW5nKTthST0icmlnaHQifWVsc2V7YUsubGVmdD1hRi5sZWZ0K2FGLnBhZGRpbmc7YUk9Imxl
ZnQifX1hSy53aWR0aD1hQy5sYWJlbFdpZHRoO3ZhciBhQj1bInBvc2l0aW9uOmFic29sdXRlIiwi
dGV4dC1hbGlnbjoiK2FJXTtmb3IodmFyIGFMIGluIGFLKXthQi5wdXNoKGFMKyI6IithS1thTF0r
InB4Iil9YUcucHVzaCgnPGRpdiBjbGFzcz0idGlja0xhYmVsIiBzdHlsZT0iJythQi5qb2luKCI7
IikrJyI+JythSC5sYWJlbCsiPC9kaXY+Iil9YUcucHVzaCgiPC9kaXY+Iil9YUcucHVzaCgiPC9k
aXY+Iik7YXYuYXBwZW5kKGFHLmpvaW4oIiIpKX1mdW5jdGlvbiBkKGFCKXtpZihhQi5saW5lcy5z
aG93KXthdChhQil9aWYoYUIuYmFycy5zaG93KXtlKGFCKX1pZihhQi5wb2ludHMuc2hvdyl7YW8o
YUIpfX1mdW5jdGlvbiBhdChhRSl7ZnVuY3Rpb24gYUQoYVAsYVEsYUksYVUsYVQpe3ZhciBhVj1h
UC5wb2ludHMsYUo9YVAucG9pbnRzaXplLGFOPW51bGwsYU09bnVsbDtILmJlZ2luUGF0aCgpO2Zv
cih2YXIgYU89YUo7YU88YVYubGVuZ3RoO2FPKz1hSil7dmFyIGFMPWFWW2FPLWFKXSxhUz1hVlth
Ty1hSisxXSxhSz1hVlthT10sYVI9YVZbYU8rMV07aWYoYUw9PW51bGx8fGFLPT1udWxsKXtjb250
aW51ZX1pZihhUzw9YVImJmFTPGFULm1pbil7aWYoYVI8YVQubWluKXtjb250aW51ZX1hTD0oYVQu
bWluLWFTKS8oYVItYVMpKihhSy1hTCkrYUw7YVM9YVQubWlufWVsc2V7aWYoYVI8PWFTJiZhUjxh
VC5taW4pe2lmKGFTPGFULm1pbil7Y29udGludWV9YUs9KGFULm1pbi1hUykvKGFSLWFTKSooYUst
YUwpK2FMO2FSPWFULm1pbn19aWYoYVM+PWFSJiZhUz5hVC5tYXgpe2lmKGFSPmFULm1heCl7Y29u
dGludWV9YUw9KGFULm1heC1hUykvKGFSLWFTKSooYUstYUwpK2FMO2FTPWFULm1heH1lbHNle2lm
KGFSPj1hUyYmYVI+YVQubWF4KXtpZihhUz5hVC5tYXgpe2NvbnRpbnVlfWFLPShhVC5tYXgtYVMp
LyhhUi1hUykqKGFLLWFMKSthTDthUj1hVC5tYXh9fWlmKGFMPD1hSyYmYUw8YVUubWluKXtpZihh
SzxhVS5taW4pe2NvbnRpbnVlfWFTPShhVS5taW4tYUwpLyhhSy1hTCkqKGFSLWFTKSthUzthTD1h
VS5taW59ZWxzZXtpZihhSzw9YUwmJmFLPGFVLm1pbil7aWYoYUw8YVUubWluKXtjb250aW51ZX1h
Uj0oYVUubWluLWFMKS8oYUstYUwpKihhUi1hUykrYVM7YUs9YVUubWlufX1pZihhTD49YUsmJmFM
PmFVLm1heCl7aWYoYUs+YVUubWF4KXtjb250aW51ZX1hUz0oYVUubWF4LWFMKS8oYUstYUwpKihh
Ui1hUykrYVM7YUw9YVUubWF4fWVsc2V7aWYoYUs+PWFMJiZhSz5hVS5tYXgpe2lmKGFMPmFVLm1h
eCl7Y29udGludWV9YVI9KGFVLm1heC1hTCkvKGFLLWFMKSooYVItYVMpK2FTO2FLPWFVLm1heH19
aWYoYUwhPWFOfHxhUyE9YU0pe0gubW92ZVRvKGFVLnAyYyhhTCkrYVEsYVQucDJjKGFTKSthSSl9
YU49YUs7YU09YVI7SC5saW5lVG8oYVUucDJjKGFLKSthUSxhVC5wMmMoYVIpK2FJKX1ILnN0cm9r
ZSgpfWZ1bmN0aW9uIGFGKGFJLGFRLGFQKXt2YXIgYVc9YUkucG9pbnRzLGFWPWFJLnBvaW50c2l6
ZSxhTj1NYXRoLm1pbihNYXRoLm1heCgwLGFQLm1pbiksYVAubWF4KSxhWD0wLGFVLGFUPWZhbHNl
LGFNPTEsYUw9MCxhUj0wO3doaWxlKHRydWUpe2lmKGFWPjAmJmFYPmFXLmxlbmd0aCthVil7YnJl
YWt9YVgrPWFWO3ZhciBhWj1hV1thWC1hVl0sYUs9YVdbYVgtYVYrYU1dLGFZPWFXW2FYXSxhSj1h
V1thWCthTV07aWYoYVQpe2lmKGFWPjAmJmFaIT1udWxsJiZhWT09bnVsbCl7YVI9YVg7YVY9LWFW
O2FNPTI7Y29udGludWV9aWYoYVY8MCYmYVg9PWFMK2FWKXtILmZpbGwoKTthVD1mYWxzZTthVj0t
YVY7YU09MTthWD1hTD1hUithVjtjb250aW51ZX19aWYoYVo9PW51bGx8fGFZPT1udWxsKXtjb250
aW51ZX1pZihhWjw9YVkmJmFaPGFRLm1pbil7aWYoYVk8YVEubWluKXtjb250aW51ZX1hSz0oYVEu
bWluLWFaKS8oYVktYVopKihhSi1hSykrYUs7YVo9YVEubWlufWVsc2V7aWYoYVk8PWFaJiZhWTxh
US5taW4pe2lmKGFaPGFRLm1pbil7Y29udGludWV9YUo9KGFRLm1pbi1hWikvKGFZLWFaKSooYUot
YUspK2FLO2FZPWFRLm1pbn19aWYoYVo+PWFZJiZhWj5hUS5tYXgpe2lmKGFZPmFRLm1heCl7Y29u
dGludWV9YUs9KGFRLm1heC1hWikvKGFZLWFaKSooYUotYUspK2FLO2FaPWFRLm1heH1lbHNle2lm
KGFZPj1hWiYmYVk+YVEubWF4KXtpZihhWj5hUS5tYXgpe2NvbnRpbnVlfWFKPShhUS5tYXgtYVop
LyhhWS1hWikqKGFKLWFLKSthSzthWT1hUS5tYXh9fWlmKCFhVCl7SC5iZWdpblBhdGgoKTtILm1v
dmVUbyhhUS5wMmMoYVopLGFQLnAyYyhhTikpO2FUPXRydWV9aWYoYUs+PWFQLm1heCYmYUo+PWFQ
Lm1heCl7SC5saW5lVG8oYVEucDJjKGFaKSxhUC5wMmMoYVAubWF4KSk7SC5saW5lVG8oYVEucDJj
KGFZKSxhUC5wMmMoYVAubWF4KSk7Y29udGludWV9ZWxzZXtpZihhSzw9YVAubWluJiZhSjw9YVAu
bWluKXtILmxpbmVUbyhhUS5wMmMoYVopLGFQLnAyYyhhUC5taW4pKTtILmxpbmVUbyhhUS5wMmMo
YVkpLGFQLnAyYyhhUC5taW4pKTtjb250aW51ZX19dmFyIGFPPWFaLGFTPWFZO2lmKGFLPD1hSiYm
YUs8YVAubWluJiZhSj49YVAubWluKXthWj0oYVAubWluLWFLKS8oYUotYUspKihhWS1hWikrYVo7
YUs9YVAubWlufWVsc2V7aWYoYUo8PWFLJiZhSjxhUC5taW4mJmFLPj1hUC5taW4pe2FZPShhUC5t
aW4tYUspLyhhSi1hSykqKGFZLWFaKSthWjthSj1hUC5taW59fWlmKGFLPj1hSiYmYUs+YVAubWF4
JiZhSjw9YVAubWF4KXthWj0oYVAubWF4LWFLKS8oYUotYUspKihhWS1hWikrYVo7YUs9YVAubWF4
fWVsc2V7aWYoYUo+PWFLJiZhSj5hUC5tYXgmJmFLPD1hUC5tYXgpe2FZPShhUC5tYXgtYUspLyhh
Si1hSykqKGFZLWFaKSthWjthSj1hUC5tYXh9fWlmKGFaIT1hTyl7SC5saW5lVG8oYVEucDJjKGFP
KSxhUC5wMmMoYUspKX1ILmxpbmVUbyhhUS5wMmMoYVopLGFQLnAyYyhhSykpO0gubGluZVRvKGFR
LnAyYyhhWSksYVAucDJjKGFKKSk7aWYoYVkhPWFTKXtILmxpbmVUbyhhUS5wMmMoYVkpLGFQLnAy
YyhhSikpO0gubGluZVRvKGFRLnAyYyhhUyksYVAucDJjKGFKKSl9fX1ILnNhdmUoKTtILnRyYW5z
bGF0ZShxLmxlZnQscS50b3ApO0gubGluZUpvaW49InJvdW5kIjt2YXIgYUc9YUUubGluZXMubGlu
ZVdpZHRoLGFCPWFFLnNoYWRvd1NpemU7aWYoYUc+MCYmYUI+MCl7SC5saW5lV2lkdGg9YUI7SC5z
dHJva2VTdHlsZT0icmdiYSgwLDAsMCwwLjEpIjt2YXIgYUg9TWF0aC5QSS8xODthRChhRS5kYXRh
cG9pbnRzLE1hdGguc2luKGFIKSooYUcvMithQi8yKSxNYXRoLmNvcyhhSCkqKGFHLzIrYUIvMiks
YUUueGF4aXMsYUUueWF4aXMpO0gubGluZVdpZHRoPWFCLzI7YUQoYUUuZGF0YXBvaW50cyxNYXRo
LnNpbihhSCkqKGFHLzIrYUIvNCksTWF0aC5jb3MoYUgpKihhRy8yK2FCLzQpLGFFLnhheGlzLGFF
LnlheGlzKX1ILmxpbmVXaWR0aD1hRztILnN0cm9rZVN0eWxlPWFFLmNvbG9yO3ZhciBhQz1hZShh
RS5saW5lcyxhRS5jb2xvciwwLHcpO2lmKGFDKXtILmZpbGxTdHlsZT1hQzthRihhRS5kYXRhcG9p
bnRzLGFFLnhheGlzLGFFLnlheGlzKX1pZihhRz4wKXthRChhRS5kYXRhcG9pbnRzLDAsMCxhRS54
YXhpcyxhRS55YXhpcyl9SC5yZXN0b3JlKCl9ZnVuY3Rpb24gYW8oYUUpe2Z1bmN0aW9uIGFIKGFO
LGFNLGFVLGFLLGFTLGFULGFRLGFKKXt2YXIgYVI9YU4ucG9pbnRzLGFJPWFOLnBvaW50c2l6ZTtm
b3IodmFyIGFMPTA7YUw8YVIubGVuZ3RoO2FMKz1hSSl7dmFyIGFQPWFSW2FMXSxhTz1hUlthTCsx
XTtpZihhUD09bnVsbHx8YVA8YVQubWlufHxhUD5hVC5tYXh8fGFPPGFRLm1pbnx8YU8+YVEubWF4
KXtjb250aW51ZX1ILmJlZ2luUGF0aCgpO2FQPWFULnAyYyhhUCk7YU89YVEucDJjKGFPKSthSztp
ZihhSj09ImNpcmNsZSIpe0guYXJjKGFQLGFPLGFNLDAsYVM/TWF0aC5QSTpNYXRoLlBJKjIsZmFs
c2UpfWVsc2V7YUooSCxhUCxhTyxhTSxhUyl9SC5jbG9zZVBhdGgoKTtpZihhVSl7SC5maWxsU3R5
bGU9YVU7SC5maWxsKCl9SC5zdHJva2UoKX19SC5zYXZlKCk7SC50cmFuc2xhdGUocS5sZWZ0LHEu
dG9wKTt2YXIgYUc9YUUucG9pbnRzLmxpbmVXaWR0aCxhQz1hRS5zaGFkb3dTaXplLGFCPWFFLnBv
aW50cy5yYWRpdXMsYUY9YUUucG9pbnRzLnN5bWJvbDtpZihhRz4wJiZhQz4wKXt2YXIgYUQ9YUMv
MjtILmxpbmVXaWR0aD1hRDtILnN0cm9rZVN0eWxlPSJyZ2JhKDAsMCwwLDAuMSkiO2FIKGFFLmRh
dGFwb2ludHMsYUIsbnVsbCxhRCthRC8yLHRydWUsYUUueGF4aXMsYUUueWF4aXMsYUYpO0guc3Ry
b2tlU3R5bGU9InJnYmEoMCwwLDAsMC4yKSI7YUgoYUUuZGF0YXBvaW50cyxhQixudWxsLGFELzIs
dHJ1ZSxhRS54YXhpcyxhRS55YXhpcyxhRil9SC5saW5lV2lkdGg9YUc7SC5zdHJva2VTdHlsZT1h
RS5jb2xvcjthSChhRS5kYXRhcG9pbnRzLGFCLGFlKGFFLnBvaW50cyxhRS5jb2xvciksMCxmYWxz
ZSxhRS54YXhpcyxhRS55YXhpcyxhRik7SC5yZXN0b3JlKCl9ZnVuY3Rpb24gRShhTixhTSxhVixh
SSxhUSxhRixhRCxhTCxhSyxhVSxhUixhQyl7dmFyIGFFLGFULGFKLGFQLGFHLGFCLGFPLGFILGFT
O2lmKGFSKXthSD1hQj1hTz10cnVlO2FHPWZhbHNlO2FFPWFWO2FUPWFOO2FQPWFNK2FJO2FKPWFN
K2FRO2lmKGFUPGFFKXthUz1hVDthVD1hRTthRT1hUzthRz10cnVlO2FCPWZhbHNlfX1lbHNle2FH
PWFCPWFPPXRydWU7YUg9ZmFsc2U7YUU9YU4rYUk7YVQ9YU4rYVE7YUo9YVY7YVA9YU07aWYoYVA8
YUope2FTPWFQO2FQPWFKO2FKPWFTO2FIPXRydWU7YU89ZmFsc2V9fWlmKGFUPGFMLm1pbnx8YUU+
YUwubWF4fHxhUDxhSy5taW58fGFKPmFLLm1heCl7cmV0dXJufWlmKGFFPGFMLm1pbil7YUU9YUwu
bWluO2FHPWZhbHNlfWlmKGFUPmFMLm1heCl7YVQ9YUwubWF4O2FCPWZhbHNlfWlmKGFKPGFLLm1p
bil7YUo9YUsubWluO2FIPWZhbHNlfWlmKGFQPmFLLm1heCl7YVA9YUsubWF4O2FPPWZhbHNlfWFF
PWFMLnAyYyhhRSk7YUo9YUsucDJjKGFKKTthVD1hTC5wMmMoYVQpO2FQPWFLLnAyYyhhUCk7aWYo
YUQpe2FVLmJlZ2luUGF0aCgpO2FVLm1vdmVUbyhhRSxhSik7YVUubGluZVRvKGFFLGFQKTthVS5s
aW5lVG8oYVQsYVApO2FVLmxpbmVUbyhhVCxhSik7YVUuZmlsbFN0eWxlPWFEKGFKLGFQKTthVS5m
aWxsKCl9aWYoYUM+MCYmKGFHfHxhQnx8YU98fGFIKSl7YVUuYmVnaW5QYXRoKCk7YVUubW92ZVRv
KGFFLGFKK2FGKTtpZihhRyl7YVUubGluZVRvKGFFLGFQK2FGKX1lbHNle2FVLm1vdmVUbyhhRSxh
UCthRil9aWYoYU8pe2FVLmxpbmVUbyhhVCxhUCthRil9ZWxzZXthVS5tb3ZlVG8oYVQsYVArYUYp
fWlmKGFCKXthVS5saW5lVG8oYVQsYUorYUYpfWVsc2V7YVUubW92ZVRvKGFULGFKK2FGKX1pZihh
SCl7YVUubGluZVRvKGFFLGFKK2FGKX1lbHNle2FVLm1vdmVUbyhhRSxhSithRil9YVUuc3Ryb2tl
KCl9fWZ1bmN0aW9uIGUoYUQpe2Z1bmN0aW9uIGFDKGFKLGFJLGFMLGFHLGFLLGFOLGFNKXt2YXIg
YU89YUoucG9pbnRzLGFGPWFKLnBvaW50c2l6ZTtmb3IodmFyIGFIPTA7YUg8YU8ubGVuZ3RoO2FI
Kz1hRil7aWYoYU9bYUhdPT1udWxsKXtjb250aW51ZX1FKGFPW2FIXSxhT1thSCsxXSxhT1thSCsy
XSxhSSxhTCxhRyxhSyxhTixhTSxILGFELmJhcnMuaG9yaXpvbnRhbCxhRC5iYXJzLmxpbmVXaWR0
aCl9fUguc2F2ZSgpO0gudHJhbnNsYXRlKHEubGVmdCxxLnRvcCk7SC5saW5lV2lkdGg9YUQuYmFy
cy5saW5lV2lkdGg7SC5zdHJva2VTdHlsZT1hRC5jb2xvcjt2YXIgYUI9YUQuYmFycy5hbGlnbj09
ImxlZnQiPzA6LWFELmJhcnMuYmFyV2lkdGgvMjt2YXIgYUU9YUQuYmFycy5maWxsP2Z1bmN0aW9u
KGFGLGFHKXtyZXR1cm4gYWUoYUQuYmFycyxhRC5jb2xvcixhRixhRyl9Om51bGw7YUMoYUQuZGF0
YXBvaW50cyxhQixhQithRC5iYXJzLmJhcldpZHRoLDAsYUUsYUQueGF4aXMsYUQueWF4aXMpO0gu
cmVzdG9yZSgpfWZ1bmN0aW9uIGFlKGFELGFCLGFDLGFGKXt2YXIgYUU9YUQuZmlsbDtpZighYUUp
e3JldHVybiBudWxsfWlmKGFELmZpbGxDb2xvcil7cmV0dXJuIGFtKGFELmZpbGxDb2xvcixhQyxh
RixhQil9dmFyIGFHPWMuY29sb3IucGFyc2UoYUIpO2FHLmE9dHlwZW9mIGFFPT0ibnVtYmVyIj9h
RTowLjQ7YUcubm9ybWFsaXplKCk7cmV0dXJuIGFHLnRvU3RyaW5nKCl9ZnVuY3Rpb24gbygpe2F2
LmZpbmQoIi5sZWdlbmQiKS5yZW1vdmUoKTtpZighTy5sZWdlbmQuc2hvdyl7cmV0dXJufXZhciBh
SD1bXSxhRj1mYWxzZSxhTj1PLmxlZ2VuZC5sYWJlbEZvcm1hdHRlcixhTSxhSjtmb3IodmFyIGFF
PTA7YUU8US5sZW5ndGg7KythRSl7YU09UVthRV07YUo9YU0ubGFiZWw7aWYoIWFKKXtjb250aW51
ZX1pZihhRSVPLmxlZ2VuZC5ub0NvbHVtbnM9PTApe2lmKGFGKXthSC5wdXNoKCI8L3RyPiIpfWFI
LnB1c2goIjx0cj4iKTthRj10cnVlfWlmKGFOKXthSj1hTihhSixhTSl9YUgucHVzaCgnPHRkIGNs
YXNzPSJsZWdlbmRDb2xvckJveCI+PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAnK08ubGVn
ZW5kLmxhYmVsQm94Qm9yZGVyQ29sb3IrJztwYWRkaW5nOjFweCI+PGRpdiBzdHlsZT0id2lkdGg6
NHB4O2hlaWdodDowO2JvcmRlcjo1cHggc29saWQgJythTS5jb2xvcisnO292ZXJmbG93OmhpZGRl
biI+PC9kaXY+PC9kaXY+PC90ZD48dGQgY2xhc3M9ImxlZ2VuZExhYmVsIj4nK2FKKyI8L3RkPiIp
fWlmKGFGKXthSC5wdXNoKCI8L3RyPiIpfWlmKGFILmxlbmd0aD09MCl7cmV0dXJufXZhciBhTD0n
PHRhYmxlIHN0eWxlPSJmb250LXNpemU6c21hbGxlcjtjb2xvcjonK08uZ3JpZC5jb2xvcisnIj4n
K2FILmpvaW4oIiIpKyI8L3RhYmxlPiI7aWYoTy5sZWdlbmQuY29udGFpbmVyIT1udWxsKXtjKE8u
bGVnZW5kLmNvbnRhaW5lcikuaHRtbChhTCl9ZWxzZXt2YXIgYUk9IiIsYUM9Ty5sZWdlbmQucG9z
aXRpb24sYUQ9Ty5sZWdlbmQubWFyZ2luO2lmKGFEWzBdPT1udWxsKXthRD1bYUQsYURdfWlmKGFD
LmNoYXJBdCgwKT09Im4iKXthSSs9InRvcDoiKyhhRFsxXStxLnRvcCkrInB4OyJ9ZWxzZXtpZihh
Qy5jaGFyQXQoMCk9PSJzIil7YUkrPSJib3R0b206IisoYURbMV0rcS5ib3R0b20pKyJweDsifX1p
ZihhQy5jaGFyQXQoMSk9PSJlIil7YUkrPSJyaWdodDoiKyhhRFswXStxLnJpZ2h0KSsicHg7In1l
bHNle2lmKGFDLmNoYXJBdCgxKT09InciKXthSSs9ImxlZnQ6IisoYURbMF0rcS5sZWZ0KSsicHg7
In19dmFyIGFLPWMoJzxkaXYgY2xhc3M9ImxlZ2VuZCI+JythTC5yZXBsYWNlKCdzdHlsZT0iJywn
c3R5bGU9InBvc2l0aW9uOmFic29sdXRlOycrYUkrIjsiKSsiPC9kaXY+IikuYXBwZW5kVG8oYXYp
O2lmKE8ubGVnZW5kLmJhY2tncm91bmRPcGFjaXR5IT0wKXt2YXIgYUc9Ty5sZWdlbmQuYmFja2dy
b3VuZENvbG9yO2lmKGFHPT1udWxsKXthRz1PLmdyaWQuYmFja2dyb3VuZENvbG9yO2lmKGFHJiZ0
eXBlb2YgYUc9PSJzdHJpbmciKXthRz1jLmNvbG9yLnBhcnNlKGFHKX1lbHNle2FHPWMuY29sb3Iu
ZXh0cmFjdChhSywiYmFja2dyb3VuZC1jb2xvciIpfWFHLmE9MTthRz1hRy50b1N0cmluZygpfXZh
ciBhQj1hSy5jaGlsZHJlbigpO2MoJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRo
OicrYUIud2lkdGgoKSsicHg7aGVpZ2h0OiIrYUIuaGVpZ2h0KCkrInB4OyIrYUkrImJhY2tncm91
bmQtY29sb3I6IithRysnOyI+IDwvZGl2PicpLnByZXBlbmRUbyhhSykuY3NzKCJvcGFjaXR5IixP
LmxlZ2VuZC5iYWNrZ3JvdW5kT3BhY2l0eSl9fX12YXIgYWI9W10sTT1udWxsO2Z1bmN0aW9uIEso
YUksYUcsYUQpe3ZhciBhTz1PLmdyaWQubW91c2VBY3RpdmVSYWRpdXMsYTA9YU8qYU8rMSxhWT1u
dWxsLGFSPWZhbHNlLGFXLGFVO2ZvcihhVz1RLmxlbmd0aC0xO2FXPj0wOy0tYVcpe2lmKCFhRChR
W2FXXSkpe2NvbnRpbnVlfXZhciBhUD1RW2FXXSxhSD1hUC54YXhpcyxhRj1hUC55YXhpcyxhVj1h
UC5kYXRhcG9pbnRzLnBvaW50cyxhVD1hUC5kYXRhcG9pbnRzLnBvaW50c2l6ZSxhUT1hSC5jMnAo
YUkpLGFOPWFGLmMycChhRyksYUM9YU8vYUguc2NhbGUsYUI9YU8vYUYuc2NhbGU7aWYoYUgub3B0
aW9ucy5pbnZlcnNlVHJhbnNmb3JtKXthQz1OdW1iZXIuTUFYX1ZBTFVFfWlmKGFGLm9wdGlvbnMu
aW52ZXJzZVRyYW5zZm9ybSl7YUI9TnVtYmVyLk1BWF9WQUxVRX1pZihhUC5saW5lcy5zaG93fHxh
UC5wb2ludHMuc2hvdyl7Zm9yKGFVPTA7YVU8YVYubGVuZ3RoO2FVKz1hVCl7dmFyIGFLPWFWW2FV
XSxhSj1hVlthVSsxXTtpZihhSz09bnVsbCl7Y29udGludWV9aWYoYUstYVE+YUN8fGFLLWFRPC1h
Q3x8YUotYU4+YUJ8fGFKLWFOPC1hQil7Y29udGludWV9dmFyIGFNPU1hdGguYWJzKGFILnAyYyhh
SyktYUkpLGFMPU1hdGguYWJzKGFGLnAyYyhhSiktYUcpLGFTPWFNKmFNK2FMKmFMO2lmKGFTPGEw
KXthMD1hUzthWT1bYVcsYVUvYVRdfX19aWYoYVAuYmFycy5zaG93JiYhYVkpe3ZhciBhRT1hUC5i
YXJzLmFsaWduPT0ibGVmdCI/MDotYVAuYmFycy5iYXJXaWR0aC8yLGFYPWFFK2FQLmJhcnMuYmFy
V2lkdGg7Zm9yKGFVPTA7YVU8YVYubGVuZ3RoO2FVKz1hVCl7dmFyIGFLPWFWW2FVXSxhSj1hVlth
VSsxXSxhWj1hVlthVSsyXTtpZihhSz09bnVsbCl7Y29udGludWV9aWYoUVthV10uYmFycy5ob3Jp
em9udGFsPyhhUTw9TWF0aC5tYXgoYVosYUspJiZhUT49TWF0aC5taW4oYVosYUspJiZhTj49YUor
YUUmJmFOPD1hSithWCk6KGFRPj1hSythRSYmYVE8PWFLK2FYJiZhTj49TWF0aC5taW4oYVosYUop
JiZhTjw9TWF0aC5tYXgoYVosYUopKSl7YVk9W2FXLGFVL2FUXX19fX1pZihhWSl7YVc9YVlbMF07
YVU9YVlbMV07YVQ9UVthV10uZGF0YXBvaW50cy5wb2ludHNpemU7cmV0dXJue2RhdGFwb2ludDpR
W2FXXS5kYXRhcG9pbnRzLnBvaW50cy5zbGljZShhVSphVCwoYVUrMSkqYVQpLGRhdGFJbmRleDph
VSxzZXJpZXM6UVthV10sc2VyaWVzSW5kZXg6YVd9fXJldHVybiBudWxsfWZ1bmN0aW9uIGFhKGFC
KXtpZihPLmdyaWQuaG92ZXJhYmxlKXt1KCJwbG90aG92ZXIiLGFCLGZ1bmN0aW9uKGFDKXtyZXR1
cm4gYUMuaG92ZXJhYmxlIT1mYWxzZX0pfX1mdW5jdGlvbiBsKGFCKXtpZihPLmdyaWQuaG92ZXJh
YmxlKXt1KCJwbG90aG92ZXIiLGFCLGZ1bmN0aW9uKGFDKXtyZXR1cm4gZmFsc2V9KX19ZnVuY3Rp
b24gUihhQil7dSgicGxvdGNsaWNrIixhQixmdW5jdGlvbihhQyl7cmV0dXJuIGFDLmNsaWNrYWJs
ZSE9ZmFsc2V9KX1mdW5jdGlvbiB1KGFDLGFCLGFEKXt2YXIgYUU9eS5vZmZzZXQoKSxhSD1hQi5w
YWdlWC1hRS5sZWZ0LXEubGVmdCxhRj1hQi5wYWdlWS1hRS50b3AtcS50b3AsYUo9Qyh7bGVmdDph
SCx0b3A6YUZ9KTthSi5wYWdlWD1hQi5wYWdlWDthSi5wYWdlWT1hQi5wYWdlWTt2YXIgYUs9Syhh
SCxhRixhRCk7aWYoYUspe2FLLnBhZ2VYPXBhcnNlSW50KGFLLnNlcmllcy54YXhpcy5wMmMoYUsu
ZGF0YXBvaW50WzBdKSthRS5sZWZ0K3EubGVmdCk7YUsucGFnZVk9cGFyc2VJbnQoYUsuc2VyaWVz
LnlheGlzLnAyYyhhSy5kYXRhcG9pbnRbMV0pK2FFLnRvcCtxLnRvcCl9aWYoTy5ncmlkLmF1dG9I
aWdobGlnaHQpe2Zvcih2YXIgYUc9MDthRzxhYi5sZW5ndGg7KythRyl7dmFyIGFJPWFiW2FHXTtp
ZihhSS5hdXRvPT1hQyYmIShhSyYmYUkuc2VyaWVzPT1hSy5zZXJpZXMmJmFJLnBvaW50WzBdPT1h
Sy5kYXRhcG9pbnRbMF0mJmFJLnBvaW50WzFdPT1hSy5kYXRhcG9pbnRbMV0pKXtUKGFJLnNlcmll
cyxhSS5wb2ludCl9fWlmKGFLKXt4KGFLLnNlcmllcyxhSy5kYXRhcG9pbnQsYUMpfX1hdi50cmln
Z2VyKGFDLFthSixhS10pfWZ1bmN0aW9uIGYoKXtpZighTSl7TT1zZXRUaW1lb3V0KHMsMzApfX1m
dW5jdGlvbiBzKCl7TT1udWxsO0Euc2F2ZSgpO0EuY2xlYXJSZWN0KDAsMCxHLEkpO0EudHJhbnNs
YXRlKHEubGVmdCxxLnRvcCk7dmFyIGFDLGFCO2ZvcihhQz0wO2FDPGFiLmxlbmd0aDsrK2FDKXth
Qj1hYlthQ107aWYoYUIuc2VyaWVzLmJhcnMuc2hvdyl7dihhQi5zZXJpZXMsYUIucG9pbnQpfWVs
c2V7YXkoYUIuc2VyaWVzLGFCLnBvaW50KX19QS5yZXN0b3JlKCk7YW4oYWsuZHJhd092ZXJsYXks
W0FdKX1mdW5jdGlvbiB4KGFELGFCLGFGKXtpZih0eXBlb2YgYUQ9PSJudW1iZXIiKXthRD1RW2FE
XX1pZih0eXBlb2YgYUI9PSJudW1iZXIiKXt2YXIgYUU9YUQuZGF0YXBvaW50cy5wb2ludHNpemU7
YUI9YUQuZGF0YXBvaW50cy5wb2ludHMuc2xpY2UoYUUqYUIsYUUqKGFCKzEpKX12YXIgYUM9YWwo
YUQsYUIpO2lmKGFDPT0tMSl7YWIucHVzaCh7c2VyaWVzOmFELHBvaW50OmFCLGF1dG86YUZ9KTtm
KCl9ZWxzZXtpZighYUYpe2FiW2FDXS5hdXRvPWZhbHNlfX19ZnVuY3Rpb24gVChhRCxhQil7aWYo
YUQ9PW51bGwmJmFCPT1udWxsKXthYj1bXTtmKCl9aWYodHlwZW9mIGFEPT0ibnVtYmVyIil7YUQ9
UVthRF19aWYodHlwZW9mIGFCPT0ibnVtYmVyIil7YUI9YUQuZGF0YVthQl19dmFyIGFDPWFsKGFE
LGFCKTtpZihhQyE9LTEpe2FiLnNwbGljZShhQywxKTtmKCl9fWZ1bmN0aW9uIGFsKGFELGFFKXtm
b3IodmFyIGFCPTA7YUI8YWIubGVuZ3RoOysrYUIpe3ZhciBhQz1hYlthQl07aWYoYUMuc2VyaWVz
PT1hRCYmYUMucG9pbnRbMF09PWFFWzBdJiZhQy5wb2ludFsxXT09YUVbMV0pe3JldHVybiBhQn19
cmV0dXJuIC0xfWZ1bmN0aW9uIGF5KGFFLGFEKXt2YXIgYUM9YURbMF0sYUk9YURbMV0sYUg9YUUu
eGF4aXMsYUc9YUUueWF4aXM7aWYoYUM8YUgubWlufHxhQz5hSC5tYXh8fGFJPGFHLm1pbnx8YUk+
YUcubWF4KXtyZXR1cm59dmFyIGFGPWFFLnBvaW50cy5yYWRpdXMrYUUucG9pbnRzLmxpbmVXaWR0
aC8yO0EubGluZVdpZHRoPWFGO0Euc3Ryb2tlU3R5bGU9Yy5jb2xvci5wYXJzZShhRS5jb2xvciku
c2NhbGUoImEiLDAuNSkudG9TdHJpbmcoKTt2YXIgYUI9MS41KmFGLGFDPWFILnAyYyhhQyksYUk9
YUcucDJjKGFJKTtBLmJlZ2luUGF0aCgpO2lmKGFFLnBvaW50cy5zeW1ib2w9PSJjaXJjbGUiKXtB
LmFyYyhhQyxhSSxhQiwwLDIqTWF0aC5QSSxmYWxzZSl9ZWxzZXthRS5wb2ludHMuc3ltYm9sKEEs
YUMsYUksYUIsZmFsc2UpfUEuY2xvc2VQYXRoKCk7QS5zdHJva2UoKX1mdW5jdGlvbiB2KGFFLGFC
KXtBLmxpbmVXaWR0aD1hRS5iYXJzLmxpbmVXaWR0aDtBLnN0cm9rZVN0eWxlPWMuY29sb3IucGFy
c2UoYUUuY29sb3IpLnNjYWxlKCJhIiwwLjUpLnRvU3RyaW5nKCk7dmFyIGFEPWMuY29sb3IucGFy
c2UoYUUuY29sb3IpLnNjYWxlKCJhIiwwLjUpLnRvU3RyaW5nKCk7dmFyIGFDPWFFLmJhcnMuYWxp
Z249PSJsZWZ0Ij8wOi1hRS5iYXJzLmJhcldpZHRoLzI7RShhQlswXSxhQlsxXSxhQlsyXXx8MCxh
QyxhQythRS5iYXJzLmJhcldpZHRoLDAsZnVuY3Rpb24oKXtyZXR1cm4gYUR9LGFFLnhheGlzLGFF
LnlheGlzLEEsYUUuYmFycy5ob3Jpem9udGFsLGFFLmJhcnMubGluZVdpZHRoKX1mdW5jdGlvbiBh
bShhSixhQixhSCxhQyl7aWYodHlwZW9mIGFKPT0ic3RyaW5nIil7cmV0dXJuIGFKfWVsc2V7dmFy
IGFJPUguY3JlYXRlTGluZWFyR3JhZGllbnQoMCxhSCwwLGFCKTtmb3IodmFyIGFFPTAsYUQ9YUou
Y29sb3JzLmxlbmd0aDthRTxhRDsrK2FFKXt2YXIgYUY9YUouY29sb3JzW2FFXTtpZih0eXBlb2Yg
YUYhPSJzdHJpbmciKXt2YXIgYUc9Yy5jb2xvci5wYXJzZShhQyk7aWYoYUYuYnJpZ2h0bmVzcyE9
bnVsbCl7YUc9YUcuc2NhbGUoInJnYiIsYUYuYnJpZ2h0bmVzcyl9aWYoYUYub3BhY2l0eSE9bnVs
bCl7YUcuYSo9YUYub3BhY2l0eX1hRj1hRy50b1N0cmluZygpfWFJLmFkZENvbG9yU3RvcChhRS8o
YUQtMSksYUYpfXJldHVybiBhSX19fWMucGxvdD1mdW5jdGlvbihnLGUsZCl7dmFyIGY9bmV3IGIo
YyhnKSxlLGQsYy5wbG90LnBsdWdpbnMpO3JldHVybiBmfTtjLnBsb3QudmVyc2lvbj0iMC43Ijtj
LnBsb3QucGx1Z2lucz1bXTtjLnBsb3QuZm9ybWF0RGF0ZT1mdW5jdGlvbihsLGYsaCl7dmFyIG89
ZnVuY3Rpb24oZCl7ZD0iIitkO3JldHVybiBkLmxlbmd0aD09MT8iMCIrZDpkfTt2YXIgZT1bXTt2
YXIgcD1mYWxzZSxqPWZhbHNlO3ZhciBuPWwuZ2V0VVRDSG91cnMoKTt2YXIgaz1uPDEyO2lmKGg9
PW51bGwpe2g9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWci
LCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX1pZihmLnNlYXJjaCgvJXB8JVAvKSE9LTEpe2lmKG4+
MTIpe249bi0xMn1lbHNle2lmKG49PTApe249MTJ9fX1mb3IodmFyIGc9MDtnPGYubGVuZ3RoOysr
Zyl7dmFyIG09Zi5jaGFyQXQoZyk7aWYocCl7c3dpdGNoKG0pe2Nhc2UiaCI6bT0iIituO2JyZWFr
O2Nhc2UiSCI6bT1vKG4pO2JyZWFrO2Nhc2UiTSI6bT1vKGwuZ2V0VVRDTWludXRlcygpKTticmVh
aztjYXNlIlMiOm09byhsLmdldFVUQ1NlY29uZHMoKSk7YnJlYWs7Y2FzZSJkIjptPSIiK2wuZ2V0
VVRDRGF0ZSgpO2JyZWFrO2Nhc2UibSI6bT0iIisobC5nZXRVVENNb250aCgpKzEpO2JyZWFrO2Nh
c2UieSI6bT0iIitsLmdldFVUQ0Z1bGxZZWFyKCk7YnJlYWs7Y2FzZSJiIjptPSIiK2hbbC5nZXRV
VENNb250aCgpXTticmVhaztjYXNlInAiOm09KGspPygiYW0iKTooInBtIik7YnJlYWs7Y2FzZSJQ
IjptPShrKT8oIkFNIik6KCJQTSIpO2JyZWFrO2Nhc2UiMCI6bT0iIjtqPXRydWU7YnJlYWt9aWYo
bSYmail7bT1vKG0pO2o9ZmFsc2V9ZS5wdXNoKG0pO2lmKCFqKXtwPWZhbHNlfX1lbHNle2lmKG09
PSIlIil7cD10cnVlfWVsc2V7ZS5wdXNoKG0pfX19cmV0dXJuIGUuam9pbigiIil9O2Z1bmN0aW9u
IGEoZSxkKXtyZXR1cm4gZCpNYXRoLmZsb29yKGUvZCl9fSkoalF1ZXJ5KTsKPC9zY3JpcHQ+Cjxz
Y3JpcHQgdGl0bGU9ImpxdWVyeS5mbG90LmZpbGxiZXR3ZWVuLm1pbi5qcyI+CihmdW5jdGlvbihi
KXt2YXIgYT17c2VyaWVzOntmaWxsQmV0d2VlbjpudWxsfX07ZnVuY3Rpb24gYyhmKXtmdW5jdGlv
biBkKGosaCl7dmFyIGc7Zm9yKGc9MDtnPGgubGVuZ3RoOysrZyl7aWYoaFtnXS5pZD09ai5maWxs
QmV0d2Vlbil7cmV0dXJuIGhbZ119fWlmKHR5cGVvZiBqLmZpbGxCZXR3ZWVuPT0ibnVtYmVyIil7
Zz1qLmZpbGxCZXR3ZWVuO2lmKGc8MHx8Zz49aC5sZW5ndGgpe3JldHVybiBudWxsfXJldHVybiBo
W2ddfXJldHVybiBudWxsfWZ1bmN0aW9uIGUoQix1LGcpe2lmKHUuZmlsbEJldHdlZW49PW51bGwp
e3JldHVybn12YXIgcD1kKHUsQi5nZXREYXRhKCkpO2lmKCFwKXtyZXR1cm59dmFyIHk9Zy5wb2lu
dHNpemUsRT1nLnBvaW50cyxoPXAuZGF0YXBvaW50cy5wb2ludHNpemUseD1wLmRhdGFwb2ludHMu
cG9pbnRzLHI9W10sdyx2LGssRyxGLHEsdD11LmxpbmVzLnNob3csbz15PjImJmcuZm9ybWF0WzJd
Lnksbj10JiZ1LmxpbmVzLnN0ZXBzLEQ9dHJ1ZSxDPTAsQT0wLHo7d2hpbGUodHJ1ZSl7aWYoQz49
RS5sZW5ndGgpe2JyZWFrfXo9ci5sZW5ndGg7aWYoRVtDXT09bnVsbCl7Zm9yKG09MDttPHk7Kytt
KXtyLnB1c2goRVtDK21dKX1DKz15fWVsc2V7aWYoQT49eC5sZW5ndGgpe2lmKCF0KXtmb3IobT0w
O208eTsrK20pe3IucHVzaChFW0MrbV0pfX1DKz15fWVsc2V7aWYoeFtBXT09bnVsbCl7Zm9yKG09
MDttPHk7KyttKXtyLnB1c2gobnVsbCl9RD10cnVlO0ErPWh9ZWxzZXt3PUVbQ107dj1FW0MrMV07
Rz14W0FdO0Y9eFtBKzFdO3E9MDtpZih3PT1HKXtmb3IobT0wO208eTsrK20pe3IucHVzaChFW0Mr
bV0pfXE9RjtDKz15O0ErPWh9ZWxzZXtpZih3Pkcpe2lmKHQmJkM+MCYmRVtDLXldIT1udWxsKXtr
PXYrKEVbQy15KzFdLXYpKihHLXcpLyhFW0MteV0tdyk7ci5wdXNoKEcpO3IucHVzaChrKTtmb3Io
bT0yO208eTsrK20pe3IucHVzaChFW0MrbV0pfXE9Rn1BKz1ofWVsc2V7aWYoRCYmdCl7Qys9eTtj
b250aW51ZX1mb3IobT0wO208eTsrK20pe3IucHVzaChFW0MrbV0pfWlmKHQmJkE+MCYmeFtBLWhd
IT1udWxsKXtxPUYrKHhbQS1oKzFdLUYpKih3LUcpLyh4W0EtaF0tRyl9Qys9eX19RD1mYWxzZTtp
Zih6IT1yLmxlbmd0aCYmbyl7clt6KzJdPXF9fX19aWYobiYmeiE9ci5sZW5ndGgmJno+MCYmclt6
XSE9bnVsbCYmclt6XSE9clt6LXldJiZyW3orMV0hPXJbei15KzFdKXtmb3IobT0wO208eTsrK20p
e3Jbeit5K21dPXJbeittXX1yW3orMV09clt6LXkrMV19fWcucG9pbnRzPXJ9Zi5ob29rcy5wcm9j
ZXNzRGF0YXBvaW50cy5wdXNoKGUpfWIucGxvdC5wbHVnaW5zLnB1c2goe2luaXQ6YyxvcHRpb25z
OmEsbmFtZToiZmlsbGJldHdlZW4iLHZlcnNpb246IjEuMCJ9KX0pKGpRdWVyeSk7Cjwvc2NyaXB0
Pgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKc2VjdGlvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUt
YmxvY2s7CiAgICBwYWRkaW5nOiAwIDEwcHg7Cn0KCnNlY3Rpb24gaDEgewogICAgdGV4dC1hbGln
bjogY2VudGVyOwogICAgZm9udC1zaXplOiAxZW07Cn0KCnNlY3Rpb24gLnRvb2x0aXAgewogICAg
cG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgYmFja2dyb3Vu
ZDogI2ZmY2M2NjsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIHBhZGRpbmc6IDBweCA1cHg7
Cn0KCjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Cjxz
Y3JpcHQ+CgpmdW5jdGlvbiBjcmVhdGVQbG90KHRlc3ROYW1lKSB7CiAgICB2YXIgc2VjdGlvbiA9
ICQoJzxzZWN0aW9uPjxoMT48L2gxPjxkaXYgY2xhc3M9InBsb3QiPjwvZGl2PicKICAgICAgICAr
ICc8c3BhbiBjbGFzcz0idG9vbHRpcCI+PC9zcGFuPjxzZWN0aW9uPicpOwogICAgdmFyIHVuaXQg
PSB0ZXN0VW5pdHNbdGVzdE5hbWVdOwogICAgc2VjdGlvbi5jaGlsZHJlbignLnBsb3QnKS5jc3Mo
eyd3aWR0aCc6IDEwMCAqIG1heExlbmd0aCArICdweCcsICdoZWlnaHQnOiAnMzAwcHgnfSk7CiAg
ICBzZWN0aW9uLmNoaWxkcmVuKCdoMScpLmh0bWwodGVzdE5hbWUgKyAodW5pdCA/ICcgKCcgKyB1
bml0ICsgJyknIDogJycpKTsKICAgICQoJyNjb250YWluZXInKS5hcHBlbmQoc2VjdGlvbik7CiAg
ICAKICAgIGF0dGFjaFBsb3QodGVzdE5hbWUsIHNlY3Rpb24pOwp9CgpmdW5jdGlvbiBhdHRhY2hQ
bG90KHRlc3ROYW1lLCBzZWN0aW9uLCBtaW5Jc1plcm8pIHsKICAgIHZhciBhdmVyYWdlcyA9IHRl
c3RSZXN1bHRzW3Rlc3ROYW1lXTsKICAgIHZhciBjb2xvciA9ICdyZ2IoMjMwLDUwLDUwKSc7Cgog
ICAgdmFyIG1pbk1heE9wdGlvbnMgPSB7bGluZXM6IHtzaG93OnRydWUsIGxpbmVXaWR0aDogMH0s
CiAgICAgICAgY29sb3I6IGNvbG9yLAogICAgICAgIHBvaW50czoge3Nob3c6IHRydWUsIHJhZGl1
czogMX0sCiAgICAgICAgYmFyczoge3Nob3c6IGZhbHNlfX07CgogICAgZnVuY3Rpb24gbWFrZUxv
d1Bsb3QoaWQsIGRhdGEpIHsgcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBtaW5NYXhPcHRpb25z
LCB7aWQ6IGlkLCBkYXRhOiBkYXRhfSk7IH0gICAgCiAgICBmdW5jdGlvbiBtYWtlSGlnaFBsb3Qo
ZnJvbSwgdG8sIGZpbGwsIGRhdGEpIHsgcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBtaW5NYXhP
cHRpb25zLAogICAgICAgIHtpZDogdG8sIGRhdGE6IGRhdGF9KTsgfQoKICAgIHZhciBwbG90RGF0
YSA9IFsKICAgICAgICBtYWtlTG93UGxvdCgnbWluJywgdGVzdFJlc3VsdHNNaW5bdGVzdE5hbWVd
KSwKICAgICAgICBtYWtlSGlnaFBsb3QoJ21pbicsICdtYXgnLCAwLjIsIHRlc3RSZXN1bHRzTWF4
W3Rlc3ROYW1lXSksCiAgICAgICAgbWFrZUxvd1Bsb3QoJy0mIzk2MzsnLCB0ZXN0UmVzdWx0c1N0
ZGV2TG93W3Rlc3ROYW1lXSksIC8vIHNtYWxsIGxldHRlciBzZ2ltYS4KICAgICAgICBtYWtlSGln
aFBsb3QoJy0mIzk2MzsnLCAnKyYjOTYzOycsIDAuNCwgdGVzdFJlc3VsdHNTdGRldkhpZ2hbdGVz
dE5hbWVdKSwKICAgICAgICB7ZGF0YTogYXZlcmFnZXMsIGNvbG9yOiBjb2xvcn1dOwoKICAgIHZh
ciBwbG90Q29udGFpbmVyID0gc2VjdGlvbi5jaGlsZHJlbignLnBsb3QnKTsKICAgICQucGxvdChw
bG90Q29udGFpbmVyLCBwbG90RGF0YSwgewogICAgICAgIHhheGlzOiB7CiAgICAgICAgICAgIG1p
bjogYXZlcmFnZXNbMF1bMF0gLSAwLjUsCiAgICAgICAgICAgIG1heDogYXZlcmFnZXNbYXZlcmFn
ZXMubGVuZ3RoIC0gMV1bMF0gKyAwLjUsCiAgICAgICAgICAgIHRpY2tTaXplOiAxLAogICAgICAg
ICAgICB0aWNrczogYXZlcmFnZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsKICAgICAg
ICAgICAgICAgIHZhciBsYWJlbCA9ICdyJyArIHdlYmtpdFJldmlzaW9uc1tpbmRleF07CiAgICAg
ICAgICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2luZGV4XSkKICAgICAgICAgICAgICAgICAgICBs
YWJlbCArPSAnICZkYXNoOyAnICsgZGVzY3JpcHRpb25zW2luZGV4XQogICAgICAgICAgICAgICAg
cmV0dXJuIFtpbmRleCwgbGFiZWxdOwogICAgICAgICAgICB9KSwKICAgICAgICB9LAogICAgICAg
IHlheGlzOiB7CiAgICAgICAgICAgIG1pbjogbWluSXNaZXJvID8gMCA6IE1hdGgubWF4LmFwcGx5
KE1hdGgsICQubWFwKHRlc3RSZXN1bHRzTWluW3Rlc3ROYW1lXSwgZnVuY3Rpb24gKGVudHJ5KSB7
IHJldHVybiBlbnRyeVsxXTsgfSkpICogMC45OCwKICAgICAgICAgICAgbWF4OiBNYXRoLm1heC5h
cHBseShNYXRoLCAkLm1hcCh0ZXN0UmVzdWx0c01heFt0ZXN0TmFtZV0sIGZ1bmN0aW9uIChlbnRy
eSkgeyByZXR1cm4gZW50cnlbMV07IH0pKSAqIChtaW5Jc1plcm8gPyAxLjEgOiAxLjAxKSwKICAg
ICAgICB9LAogICAgICAgIGNyb3NzaGFpcjogeyBtb2RlOiAneScgfSwKICAgICAgICBzZXJpZXM6
IHsgc2hhZG93U2l6ZTogMCB9LAogICAgICAgIGJhcnM6IHtzaG93OiB0cnVlLCBhbGlnbjogJ2Nl
bnRlcicsIGJhcldpZHRoOiAwLjV9LAogICAgICAgIGxpbmVzOiB7IHNob3c6IGZhbHNlIH0sCiAg
ICAgICAgcG9pbnRzOiB7IHNob3c6IHRydWUgfSwKICAgICAgICBncmlkOiB7CiAgICAgICAgICAg
IGJvcmRlcldpZHRoOiAyLAogICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJywKICAg
ICAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBhdXRvSGlnaGxpZ2h0OiBmYWxz
ZSwKICAgICAgICB9CiAgICB9KTsKCiAgICB2YXIgdG9vbHRpcCA9IHNlY3Rpb24uY2hpbGRyZW4o
Jy50b29sdGlwJyk7CiAgICBwbG90Q29udGFpbmVyLmJpbmQoJ3Bsb3Rob3ZlcicsIGZ1bmN0aW9u
IChldmVudCwgcG9zaXRpb24sIGl0ZW0pIHsKICAgICAgICBpZiAoaXRlbSkgewogICAgICAgICAg
ICB2YXIgcG9zdGZpeCA9IGl0ZW0uc2VyaWVzLmlkID8gJyAoJyArIGl0ZW0uc2VyaWVzLmlkICsg
JyknIDogJyc7CiAgICAgICAgICAgIHRvb2x0aXAuaHRtbChpdGVtLmRhdGFwb2ludFsxXS50b1By
ZWNpc2lvbig0KSArIHBvc3RmaXgpOwogICAgICAgICAgICB0b29sdGlwLmNzcyh7bGVmdDogaXRl
bS5wYWdlWCAtIHRvb2x0aXAub3V0ZXJXaWR0aCgpIC8gMiwgdG9wOiBpdGVtLnBhZ2VZICsgMTB9
KTsKICAgICAgICAgICAgdG9vbHRpcC5mYWRlSW4oMjAwKTsKICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgdG9vbHRpcC5oaWRlKCk7CiAgICB9KTsKICAgIHBsb3RDb250YWluZXIubW91c2VvdXQo
ZnVuY3Rpb24gKCkgewogICAgICAgIHRvb2x0aXAuaGlkZSgpOwogICAgfSk7CgogICAgcGxvdENv
bnRhaW5lci5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwogICAgICAgIGF0dGFjaFBsb3QodGVzdE5hbWUsIHNlY3Rpb24sICFtaW5Jc1plcm8p
OwogICAgfSk7Cn0KCnZhciByZXN1bHRzID0gSlNPTi5wYXJzZShkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnanNvbicpLnRleHRDb250ZW50KTsKdmFyIHRlc3RzID0gW107CnZhciB0ZXN0UmVzdWx0
cyA9IHt9LCB0ZXN0UmVzdWx0c01pbiA9IHt9LCB0ZXN0UmVzdWx0c01heCA9IHt9LCB0ZXN0UmVz
dWx0c1N0ZGV2TG93ID0ge30sIHRlc3RSZXN1bHRzU3RkZXZIaWdoID0ge307CnZhciB0ZXN0VW5p
dHMgPSB7fTsKdmFyIHdlYmtpdFJldmlzaW9ucyA9IFtdOwp2YXIgZGVzY3JpcHRpb25zID0gW107
CnZhciBtYXhMZW5ndGggPSAwOwokLmVhY2gocmVzdWx0cywgZnVuY3Rpb24gKGluZGV4LCBlbnRy
eSkgewogICAgd2Via2l0UmV2aXNpb25zLnB1c2goZW50cnlbJ3dlYmtpdC1yZXZpc2lvbiddKTsK
ICAgIGRlc2NyaXB0aW9ucy5wdXNoKGVudHJ5WydkZXNjcmlwdGlvbiddKTsKICAgICQuZWFjaChl
bnRyeS5yZXN1bHRzLCBmdW5jdGlvbiAodGVzdCwgcmVzdWx0KSB7CiAgICAgICAgaWYgKHRlc3Rz
LmluZGV4T2YodGVzdCkgPCAwKQogICAgICAgICAgICB0ZXN0cy5wdXNoKHRlc3QpOwogICAgICAg
IGlmICghdGVzdFJlc3VsdHNbdGVzdF0pIHsKICAgICAgICAgICAgdGVzdFJlc3VsdHNbdGVzdF0g
PSBbXTsKICAgICAgICAgICAgdGVzdFJlc3VsdHNNaW5bdGVzdF0gPSBbXTsKICAgICAgICAgICAg
dGVzdFJlc3VsdHNNYXhbdGVzdF0gPSBbXTsKICAgICAgICAgICAgdGVzdFJlc3VsdHNTdGRldkxv
d1t0ZXN0XSA9IFtdOwogICAgICAgICAgICB0ZXN0UmVzdWx0c1N0ZGV2SGlnaFt0ZXN0XSA9IFtd
OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnbnVtYmVyJykKICAgICAg
ICAgICAgdGVzdFJlc3VsdHNbdGVzdF0ucHVzaChbaW5kZXgsIHJlc3VsdF0pOwogICAgICAgIGVs
c2UgewogICAgICAgICAgICB0ZXN0UmVzdWx0c1t0ZXN0XS5wdXNoKFtpbmRleCwgcmVzdWx0Wydh
dmcnXV0pOwogICAgICAgICAgICBpZiAoJ21pbicgaW4gcmVzdWx0KQogICAgICAgICAgICAgICAg
dGVzdFJlc3VsdHNNaW5bdGVzdF0ucHVzaChbaW5kZXgsIHJlc3VsdFsnbWluJ11dKTsKICAgICAg
ICAgICAgaWYgKCdtYXgnIGluIHJlc3VsdCkKICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzTWF4
W3Rlc3RdLnB1c2goW2luZGV4LCByZXN1bHRbJ21heCddXSk7CiAgICAgICAgICAgIGlmICgnc3Rk
ZXYnIGluIHJlc3VsdCkgewogICAgICAgICAgICAgICAgdGVzdFJlc3VsdHNTdGRldkxvd1t0ZXN0
XS5wdXNoKFtpbmRleCwgcmVzdWx0WydhdmcnXSAtIHJlc3VsdFsnc3RkZXYnXV0pOwogICAgICAg
ICAgICAgICAgdGVzdFJlc3VsdHNTdGRldkhpZ2hbdGVzdF0ucHVzaChbaW5kZXgsIHJlc3VsdFsn
YXZnJ10gKyByZXN1bHRbJ3N0ZGV2J11dKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ICBtYXhMZW5ndGggPSBNYXRoLm1heChtYXhMZW5ndGgsIHRlc3RSZXN1bHRzW3Rlc3RdLmxlbmd0
aCk7CiAgICAgICAgdGVzdFVuaXRzW3Rlc3RdID0gcmVzdWx0LnVuaXQ7CiAgICB9KTsKfSk7CiQu
ZWFjaCh0ZXN0cy5zb3J0KCksIGZ1bmN0aW9uIChpbmRleCwgdGVzdCkgeyBjcmVhdGVQbG90KHRl
c3QpOyB9KTsKCjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>