<?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>41043</bug_id>
          
          <creation_ts>2010-06-22 23:26:21 -0700</creation_ts>
          <short_desc>Rename HTMLDocumentParser to LegacyHTMLDocumentParser</short_desc>
          <delta_ts>2010-06-23 00:17:43 -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>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>241681</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-22 23:26:21 -0700</bug_when>
    <thetext>Rename HTMLDocumentParser to LegacyHTMLDocumentParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241682</commentid>
    <comment_count>1</comment_count>
      <attachid>59480</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-22 23:29:18 -0700</bug_when>
    <thetext>Created attachment 59480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241684</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 23:31:23 -0700</bug_when>
    <thetext>Attachment 59480 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/html/HTMLFormControlElement.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241689</commentid>
    <comment_count>3</comment_count>
      <attachid>59480</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-22 23:37:15 -0700</bug_when>
    <thetext>Comment on attachment 59480
Patch

No need to include the do-webcore-rename changes, but otherwise looks OK.  Assuming it builds. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241691</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-22 23:42:04 -0700</bug_when>
    <thetext>Committed r61662: &lt;http://trac.webkit.org/changeset/61662&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241713</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 00:17:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61662 might have broken GTK Linux 64-bit Debug
The following changes are on the blame list:
http://trac.webkit.org/changeset/61661
http://trac.webkit.org/changeset/61662
http://trac.webkit.org/changeset/61663</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59480</attachid>
            <date>2010-06-22 23:29:18 -0700</date>
            <delta_ts>2010-06-22 23:37:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41043-20100622232916.patch</filename>
            <type>text/plain</type>
            <size>253288</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTMgQEAKKzIwMTAtMDYtMjIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5h
bWUgSFRNTERvY3VtZW50UGFyc2VyIHRvIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEwNDMKKworICAgICAg
ICBBcyByZXF1ZXN0ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Y2hlY2tMb2FkZWQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d3JpdGUpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudEZyYWdtZW50LmNwcDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRQ
YXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UGFyc2VyOjphc0hUTUxEb2N1bWVu
dFBhcnNlcik6CisgICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6Cisg
ICAgICAgICogZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TDVMZXhlci5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTDVMZXhlcjo6Y29sdW1uTnVtYmVyKToK
KyAgICAgICAgKiBodG1sL0hUTUw1VHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6Y3JlYXRlUGFy
c2VyKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNl
clNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZXJDaHVua1NpemUpOgorICAg
ICAgICAqIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjpjcmVhdGVQYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkVmlld1NvdXJjZVRva2VuKToKKyAgICAgICAg
KiBodG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlci5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1l
bnRQYXJzZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
OjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXI6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlcjo6c2V0Rm9yY2VTeW5jaHJvbm91cyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NMaXN0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VOb25IVE1MVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRFeGVjdXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZUNvbW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZVNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlUHJvY2Vz
c2luZ0luc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcjo6cGFyc2VUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcjo6cGFyc2VFbnRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpwYXJzZURvY3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpwYXJzZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OmNvbnRpbnVlUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXI6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyOjp3aWxsV3JpdGVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6ZGlkV3JpdGVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lIVE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NUb2tlbik6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp+TGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZW5s
YXJnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6
OmVubGFyZ2VTY3JpcHRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFs
U2NyaXB0c0lmUmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRpbnVlRXhlY3V0aW5nRXh0ZXJuYWxTY3Jp
cHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0
aW5nRm9yU2NyaXB0cyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OnNldFNyYyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxlZ2FjeUhUTUxEb2N1bWVudEZy
YWdtZW50KToKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmguCisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmFzSFRNTERvY3VtZW50UGFyc2VyKToKKyAg
ICAgICAgKiBodG1sL0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVwb3J0RXJyb3JUb0NvbnNvbGUpOgor
ICAgICAgICAqIGh0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIGxv
YWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGVFBEaXJl
Y3RvcnlEb2N1bWVudFBhcnNlcjo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmxvYWREb2N1bWVudFRlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpmaW5p
c2gpOgorICAgICAgICAqIHBhZ2UvWFNTQXVkaXRvci5oOgorCiAyMDEwLTA2LTIyICBFcmljIFNl
aWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRo
LgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9p
ZC5tawkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29w
eSkKQEAgLTI2OCw3ICsyNjgsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklM
RVMpIFwKIAlodG1sL0hUTUxQYXJzZXJFcnJvckNvZGVzLmNwcCBcCiAJaHRtbC9IVE1MUGFyc2Vy
U2NoZWR1bGVyLmNwcCBcCiAJaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgXAotCWh0
bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBcCisJaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwIFwKIAlodG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwIFwKIAlodG1sL0ltYWdl
RGF0YS5jcHAgXAogCWh0bWwvSW1hZ2VSZXNpemVyVGhyZWFkLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDYxNjU4KQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTkzLDcgKzk5Myw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0hUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcAogICAgIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKICAg
ICBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCi0gICAgaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwCisgICAgaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuY3BwCiAgICAgaHRtbC9IVE1M
VUxpc3RFbGVtZW50LmNwcAogICAgIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAKICAg
ICBodG1sL0ltYWdlRGF0YS5jcHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY0LDggKzEyNjQsOCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmgg
XAogCVdlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcCBcCiAJV2ViQ29yZS9odG1sL0hU
TUxUaXRsZUVsZW1lbnQuaCBcCi0JV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHAg
XAotCVdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaCBcCisJV2ViQ29yZS9odG1sL0xl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAgXAorCVdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXIuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuY3BwIFwKIAlX
ZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDYxNjU4KQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE2NTIsOCArMTY1Miw4IEBACiAgICAgICAg
ICAgICAnaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRN
TFRpdGxlRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTFRpdGxlRWxlbWVudC5o
JywKLSAgICAgICAgICAgICdodG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHAnLAotICAgICAgICAg
ICAgJ2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmgnLAorICAgICAgICAgICAgJ2h0bWwvTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9MZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcCcs
CiAgICAgICAgICAgICAnaHRtbC9IVE1MVUxpc3RFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MTY1OCkKKysrIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTY5OCw3ICs2OTgsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCBcCiAgICAgaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcCBc
Ci0gICAgaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKKyAgICBodG1sL0xlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlci5jcHAgXAogICAgIGh0bWwvSFRNTFVMaXN0RWxlbWVudC5jcHAgXAogICAg
IGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgXAogICAgIGh0bWwvSW1hZ2VEYXRhLmNw
cCBcCkBAIC0xNDM3LDcgKzE0MzcsNyBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL0hUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oIFwKICAg
ICBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaCBcCi0gICAgaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIu
aCBcCisgICAgaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCBcCiAgICAgaHRtbC9IVE1M
VUxpc3RFbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5oIFwKICAgICBodG1s
L0hUTUxWaWV3U291cmNlRG9jdW1lbnQuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHJldmlzaW9uIDYxNjU4KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc1NjksMTEgKzM3NTY5LDExIEBACiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxc
SFRNTERvY3VtZW50UGFyc2VyLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXExlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxEb2N1bWVudFBhcnNlci5oIg0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQ4MSw3ICsyNDgxLDcg
QEAKIAkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyM0MwMkRFNDM5NjAx
ODYzNUNBIC8qIEhUTUxEb2N1bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzRjE5OEU2MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
M0YwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RUYwODI0NUU1OTAwMUU5QUJDIC8q
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjUxMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yLmggKi87IH07Ci0JCTkzRjE5OEYwMDgyNDVFNTkwMDFFOUFCQyAvKiBI
VE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1MjNEMjUzMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnRQYXJzZXIu
aCAqLzsgfTsKKwkJOTNGMTk4RjAwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjUyM0QyNTMwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oICov
OyB9OwogCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlBQkMgLyogVGV4dFJlc291cmNlRGVjb2Rlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNzkw
MkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTkxODA4MjQ1RTU5MDAxRTlB
QkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTIxMDgyNDVFNTkwMDFFOUFC
QyAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTERvY3VtZW50UGFy
c2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI1MTEsNyArMjUxMSw3IEBACiAJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9j
dW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjUyM0QyM0IwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5jcHAgKi87IH07CiAJCTkz
RjE5QTkyMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRTAyREU0Mzk2MDE4NjM1Q0Eg
LyogSFRNTEVsZW1lbnQuY3BwICovOyB9OwogCQk5M0YxOUE5QjA4MjQ1RTU5MDAxRTlBQkMgLyog
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvci5jcHAgKi87IH07Ci0JCTkzRjE5QTlDMDgyNDVFNTkwMDFFOUFCQyAv
KiBIVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjUyM0QyNTIwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudFBh
cnNlci5jcHAgKi87IH07CisJCTkzRjE5QTlDMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QyNTIwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlci5jcHAgKi87IH07CiAJCTkzRjE5QTlEMDgyNDVFNTkwMDFFOUFCQyAvKiBUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBQjkwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAzMDJERTQ0NzYwMTg2
MzVDQSAvKiBSYW5nZS5jcHAgKi87IH07CiAJCTkzRjE5QUJDMDgyNDVFNTkwMDFFOUFCQyAvKiBY
TUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MRG9jdW1lbnRQYXJzZXIu
Y3BwICovOyB9OwpAQCAtMTA2NTYsOCArMTA2NTYsOCBAQAogCQlGNTIzRDIzRjAyREU0Mzk2MDE4
NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjUwMDJERTQzOTYwMTg2MzVD
QSAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QyNTIwMkRFNDM5NjAxODYzNUNB
IC8qIEhUTUxEb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRG9jdW1lbnRQYXJzZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0Qy
NTMwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRG9jdW1lbnRQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CisJCUY1MjNEMjUyMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCUY1MjNEMjUzMDJERTQzOTYwMTg2MzVD
QSAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlG
NTIzRDI3ODAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UmVz
b3VyY2VEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjc5MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRleHRSZXNvdXJjZURlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAv
KiBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMTM1NTgsOCArMTM1NTgsOCBAQAogCQkJCUY1MjNEMjNC
MDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuY3BwICovLAogCQkJCUY1MjNEMjNDMDJE
RTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLywKIAkJCQkxQTQ5NEUyOTBBMTIzNTQz
MDBGREFGQzEgLyogSFRNTERvY3VtZW50LmlkbCAqLywKLQkJCQlGNTIzRDI1MjAyREU0Mzk2MDE4
NjM1Q0EgLyogSFRNTERvY3VtZW50UGFyc2VyLmNwcCAqLywKLQkJCQlGNTIzRDI1MzAyREU0Mzk2
MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50UGFyc2VyLmggKi8sCisJCQkJRjUyM0QyNTIwMkRFNDM5
NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCisJCQkJRjUyM0Qy
NTMwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oICovLAogCQkJ
CUY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi8sCiAJCQkJRjUy
M0QyM0YwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi8sCiAJCQkJMUE0OTRCQkIw
QTEyMkRDRDAwRkRBRkMxIC8qIEhUTUxFbGVtZW50LmlkbCAqLywKQEAgLTE4MDc1LDcgKzE4MDc1
LDcgQEAKIAkJCQlBOEVBN0NCNzBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTERpdkVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyog
SFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlB
QkMgLyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0YxOThGMDA4
MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOURFODA5OUU2NDkyMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzRjE5OEU2MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE3QzgxMjMwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50
RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDQxNCw3ICsyMDQxNCw3IEBACiAJCQkJQThF
QTdDQjEwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4RUE3OUY1MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBOUMwODI0NUU1OTAwMUU5QUJDIC8qIEhU
TUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0YxOUE5QzA4MjQ1RTU5
MDAxRTlBQkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzMzA5REU3MDk5RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5M0YxOUE5MjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50
RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZp
c2lvbiA2MTY1OCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgp
CiAgICAgaWYgKHBhcmVudCgpKQogICAgICAgICBwYXJlbnQoKS0+Y2hlY2tMb2FkZWQoKTsKIAot
ICAgIC8vIEF2b2lkIHx0aGlzfCBiZWluZyBkZWxldGVkIGJ5IHNjcmlwdHMgdGhhdCBydW4gdmlh
IEhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMo
KS4KKyAgICAvLyBBdm9pZCB8dGhpc3wgYmVpbmcgZGVsZXRlZCBieSBzY3JpcHRzIHRoYXQgcnVu
IHZpYSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0
eWxlc2hlZXRzKCkuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS82NjIyMzAwPi4KICAgICBS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gcHJvdGVjdG9yKHRoaXMpOwogICAgIG1fbG9hZENvbXBsZXRl
ZCA9IG93bmVyTm9kZSgpID8gb3duZXJOb2RlKCktPnNoZWV0TG9hZGVkKCkgOiB0cnVlOwpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAKICNpbmNsdWRlICJMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxUaXRsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnRQYXJzZXIuaCIKKyNp
bmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vy
cy5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3Qu
aCIKQEAgLTE5NjksNyArMTk2OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OndyaXRlKGNvbnN0IFNlZ21l
bnRlZFN0cmkKICAgICAvLyB0aGUgcGFyc2VyIChhZnRlciBydW5uaW5nIGV4dGVybmFsIHNjcmlw
dHMsIGV0Yy4pIHRodXMgbmVjZXNzaXRhdGluZyBhCiAgICAgLy8gc2VwYXJhdGUgc3RhdGUgZm9y
IGZvcmNlU3luY2hyb25vdXMuCiAgICAgYm9vbCB3YXNGb3JjZWRTeW5jaHJvbm91cyA9IGZhbHNl
OwotICAgIEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyID0gbV9wYXJzZXItPmFzSFRNTERvY3Vt
ZW50UGFyc2VyKCk7CisgICAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIgPSBtX3Bh
cnNlci0+YXNIVE1MRG9jdW1lbnRQYXJzZXIoKTsKICAgICBpZiAocGFyc2VyKSB7CiAgICAgICAg
IHdhc0ZvcmNlZFN5bmNocm9ub3VzID0gcGFyc2VyLT5mb3JjZVN5bmNocm9ub3VzKCk7CiAgICAg
ICAgIHBhcnNlci0+c2V0Rm9yY2VTeW5jaHJvbm91cyh0cnVlKTsKSW5kZXg6IFdlYkNvcmUvZG9t
L0RvY3VtZW50RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50
RnJhZ21lbnQuY3BwCShyZXZpc2lvbiA2MTY1OCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50RnJh
Z21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUw1RG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJI
VE1MRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJY
TUxEb2N1bWVudFBhcnNlci5oIgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCShyZXZpc2lvbiA2MTY1
OCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I7Ci0gICAgY2xhc3MgSFRNTERvY3VtZW50UGFyc2VyOworICAgIGNsYXNz
IExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjsKICAgICBjbGFzcyBTZWdtZW50ZWRTdHJpbmc7CiAg
ICAgY2xhc3MgWFNTQXVkaXRvcjsKIApAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3QgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNpbmcoKSB7IG1fcGFyc2VyU3RvcHBlZCA9
IHRydWU7IH0KICAgICAgICAgLy8gRklYTUU6IHByb2Nlc3NpbmdEYXRhKCkgaXMgb25seSB1c2Vk
IGJ5IERvY3VtZW50TG9hZGVyOjppc0xvYWRpbmdJbkFQSVNlbnNlCi0gICAgICAgIC8vIGFuZCBp
cyB2ZXJ5IHVuY2xlYXIgYXMgdG8gd2hhdCBpdCBhY3R1YWxseSBtZWFucy4gIE9ubHkgSFRNTERv
Y3VtZW50UGFyc2VyCisgICAgICAgIC8vIGFuZCBpcyB2ZXJ5IHVuY2xlYXIgYXMgdG8gd2hhdCBp
dCBhY3R1YWxseSBtZWFucy4gIE9ubHkgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyCiAgICAgICAg
IC8vIGFjdHVhbGx5IGltcGxlbWVudHMgaXQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNz
aW5nRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgaW50IGV4
ZWN1dGluZ1NjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAgLTYzLDcgKzYzLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0
aW5nRm9yU3R5bGVzaGVldHMoKSB7fQogCiAgICAgICAgIHZpcnR1YWwgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3RvciogaHRtbFRyZWVDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAg
ICAgICAgdmlydHVhbCBIVE1MRG9jdW1lbnRQYXJzZXIqIGFzSFRNTERvY3VtZW50UGFyc2VyKCkg
eyByZXR1cm4gMDsgfQorICAgICAgICB2aXJ0dWFsIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciog
YXNIVE1MRG9jdW1lbnRQYXJzZXIoKSB7IHJldHVybiAwOyB9CiAKICAgICAgICAgWFNTQXVkaXRv
ciogeHNzQXVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fWFNTQXVkaXRvcjsgfQogICAgICAgICB2
b2lkIHNldFhTU0F1ZGl0b3IoWFNTQXVkaXRvciogYXVkaXRvcikgeyBtX1hTU0F1ZGl0b3IgPSBh
dWRpdG9yOyB9CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJ
KHJldmlzaW9uIDYxNjU4KQorKysgV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnRQYXJzZXIuaCIgLy8gZm9yIGRlY29kZU5h
bWVkRW50aXR5CisjaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiIC8vIGZvciBk
ZWNvZGVOYW1lZEVudGl0eQogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgpJbmRl
eDogV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAJKHJldmlzaW9uIDYxNjU4KQorKysgV2Vi
Q29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTGlua0VsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3Vt
ZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5j
bHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5o
IgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTDVM
ZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MNUxleGVyLmgJKHJldmlzaW9u
IDYxNjU4KQorKysgV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICBib29sIG5leHRUb2tlbihTZWdtZW50ZWRTdHJp
bmcmLCBIVE1MNVRva2VuJik7CiAKICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fbGluZU51bWJlcjsgfQotICAgIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCB7IHJldHVybiAx
OyB9IC8vIE1hdGNoZXMgSFRNTERvY3VtZW50UGFyc2VyLmggYmVoYXZpb3IuCisgICAgaW50IGNv
bHVtbk51bWJlcigpIGNvbnN0IHsgcmV0dXJuIDE7IH0gLy8gTWF0Y2hlcyBMZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXIuaCBiZWhhdmlvci4KIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZTsgfQogICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUgc3RhdGUpIHsgbV9zdGF0ZSA9
IHN0YXRlOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUw1VHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA2MTY1
OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkhUTUw1TGV4ZXIuaCIKICNpbmNsdWRlICJIVE1M
NVRva2VuLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3Vt
ZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAko
cmV2aXNpb24gNjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQAogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgot
I2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtMjk0LDcgKzI5NCw3IEBAIERvY3VtZW50
UGFyc2VyKiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVBhcnMKICAgICBpZiAoc2V0dGluZ3MoKSAmJiBz
ZXR0aW5ncygpLT5odG1sNVBhcnNlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIG5ldyBIVE1M
NURvY3VtZW50UGFyc2VyKHRoaXMsIHJlcG9ydEVycm9ycyk7CiAKLSAgICByZXR1cm4gbmV3IEhU
TUxEb2N1bWVudFBhcnNlcih0aGlzLCByZXBvcnRFcnJvcnMpOworICAgIHJldHVybiBuZXcgTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyKHRoaXMsIHJlcG9ydEVycm9ycyk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAkocmV2aXNp
b24gNjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyMTA4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk3IE1h
cnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAxOTk3IFRvcmJl
biBXZWlzICh3ZWlzQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAxOTk4IFdhbGRvIEJhc3Rp
YW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICAgQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCi0KLSNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
LSNpbmNsdWRlICJDU1NIZWxwZXIuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkNh
Y2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAi
SFRNTFNjcmlwdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVmlld1NvdXJjZURvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlByZWxvYWRTY2FubmVyLmgiCi0j
aW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCi0j
aW5jbHVkZSAiWFNTQXVkaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLSNpbmNsdWRlICJIVE1MRW50aXR5TmFtZXMuY3Bw
IgotCi0jZGVmaW5lIFBSRUxPQURfU0NBTk5FUl9FTkFCTEVEIDEKLQotdXNpbmcgbmFtZXNwYWNl
IFdURjsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGRlZmlu
ZSBob3cgbWFueSBsb29wcyAoYXBwcm94aW1hdGVseSB0b2tlbnMpCi0vLyB0aGUgcGFyc2VyIHdp
bGwgbWFrZSBiZWZvcmUgY2hlY2tpbmcgaWYgaXQgc2hvdWxkIHlpZWxkLgotLy8gVG8gaW5jcmVh
c2UgcmVzcG9uc2l2ZW5lc3MgcmVkdWNlIGJvdGggQ2h1bmtTaXplIGFuZCBUaW1lRGVsYXkgY29u
dGFudHMuCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUb2tlbml6ZXJDaHVua1NpemUgPSA0MDk2
OwotCi0vLyBGSVhNRTogV2Ugd291bGQgbGlrZSB0aGlzIGNvbnN0YW50IHRvIGJlIDIwMG1zLgot
Ly8gWWllbGRpbmcgbW9yZSBhZ2dyZXNzaXZlbHkgcmVzdWx0cyBpbiBpbmNyZWFzZWQgcmVzcG9u
c2l2ZW5lc3MgYW5kIGJldHRlciBpbmNyZW1lbnRhbCByZW5kZXJpbmcuCi0vLyBJdCBzbG93cyBk
b3duIG92ZXJhbGwgcGFnZS1sb2FkIG9uIHNsb3dlciBtYWNoaW5lcywgdGhvdWdoLCBzbyBmb3Ig
bm93IHdlIHNldCBhIHZhbHVlIG9mIDUwMC4KLS8vIFRpbWVEZWxheSBjb250cm9scyB0aGUgbWF4
aW11bSB0aW1lIHRoZSBwYXJzZXIgd2lsbCBydW4gYmVmb3JlIHlpZWxkaW5nLgotLy8gSW5saW5l
IHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHRoZSBwYXJzZXIgdG8gZXhjZWRlIHRoaXMgbGlt
aXQuCi1zdGF0aWMgY29uc3QgZG91YmxlIGRlZmF1bHRUb2tlbml6ZXJUaW1lRGVsYXkgPSAwLjUw
MDsKLQotc3RhdGljIGNvbnN0IGNoYXIgY29tbWVudFN0YXJ0IFtdID0gIjwhLS0iOwotc3RhdGlj
IGNvbnN0IGNoYXIgZG9jdHlwZVN0YXJ0IFtdID0gIjwhZG9jdHlwZSI7Ci1zdGF0aWMgY29uc3Qg
Y2hhciBwdWJsaWNTdGFydCBbXSA9ICJwdWJsaWMiOwotc3RhdGljIGNvbnN0IGNoYXIgc3lzdGVt
U3RhcnQgW10gPSAic3lzdGVtIjsKLXN0YXRpYyBjb25zdCBjaGFyIHNjcmlwdEVuZCBbXSA9ICI8
L3NjcmlwdCI7Ci1zdGF0aWMgY29uc3QgY2hhciB4bXBFbmQgW10gPSAiPC94bXAiOwotc3RhdGlj
IGNvbnN0IGNoYXIgc3R5bGVFbmQgW10gPSAgIjwvc3R5bGUiOwotc3RhdGljIGNvbnN0IGNoYXIg
dGV4dGFyZWFFbmQgW10gPSAiPC90ZXh0YXJlYSI7Ci1zdGF0aWMgY29uc3QgY2hhciB0aXRsZUVu
ZCBbXSA9ICI8L3RpdGxlIjsKLXN0YXRpYyBjb25zdCBjaGFyIGlmcmFtZUVuZCBbXSA9ICI8L2lm
cmFtZSI7Ci0KLS8vIEZ1bGwgc3VwcG9ydCBmb3IgTVMgV2luZG93cyBleHRlbnNpb25zIHRvIExh
dGluLTEuCi0vLyBUZWNobmljYWxseSB0aGVzZSBleHRlbnNpb25zIHNob3VsZCBvbmx5IGJlIGFj
dGl2YXRlZCBmb3IgcGFnZXMKLS8vIG1hcmtlZCAid2luZG93cy0xMjUyIiBvciAiY3AxMjUyIiwg
YnV0Ci0vLyBpbiB0aGUgc3RhbmRhcmQgTWljcm9zb2Z0IHdheSwgdGhlc2UgZXh0ZW5zaW9ucyBp
bmZlY3QgaHVuZHJlZHMgb2YgdGhvdXNhbmRzCi0vLyBvZiB3ZWIgcGFnZXMuICBOb3RlIHRoYXQg
cGVvcGxlIHdpdGggbm9uLWxhdGluLTEgTWljcm9zb2Z0IGV4dGVuc2lvbnMKLS8vIGFyZSBTT0wu
Ci0vLwotLy8gU2VlOiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZ2xvYmFsZGV2L3JlZmVyZW5j
ZS9XaW5DUC5hc3AKLS8vICAgICAgaHR0cDovL3d3dy5iYnNpbmMuY29tL2lzbzg4NTkuaHRtbAot
Ly8gICAgICBodHRwOi8vd3d3Lm9idmlvdXNseS5jb20vCi0vLwotLy8gVGhlcmUgbWF5IGJlIGJl
dHRlciBlcXVpdmFsZW50cwotCi0vLyBXZSBvbmx5IG5lZWQgdGhpcyBmb3IgZW50aXRpZXMuIEZv
ciBub24tZW50aXR5IHRleHQsIHdlIGhhbmRsZSB0aGlzIGluIHRoZSB0ZXh0IGVuY29kaW5nLgot
Ci1zdGF0aWMgY29uc3QgVUNoYXIgd2luZG93c0xhdGluMUV4dGVuc2lvbkFycmF5WzMyXSA9IHsK
LSAgICAweDIwQUMsIDB4MDA4MSwgMHgyMDFBLCAweDAxOTIsIDB4MjAxRSwgMHgyMDI2LCAweDIw
MjAsIDB4MjAyMSwgLy8gODAtODcKLSAgICAweDAyQzYsIDB4MjAzMCwgMHgwMTYwLCAweDIwMzks
IDB4MDE1MiwgMHgwMDhELCAweDAxN0QsIDB4MDA4RiwgLy8gODgtOEYKLSAgICAweDAwOTAsIDB4
MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwgLy8g
OTAtOTcKLSAgICAweDAyREMsIDB4MjEyMiwgMHgwMTYxLCAweDIwM0EsIDB4MDE1MywgMHgwMDlE
LCAweDAxN0UsIDB4MDE3OCAgLy8gOTgtOUYKLX07Ci0KLXN0YXRpYyBpbmxpbmUgVUNoYXIgZml4
VXBDaGFyKFVDaGFyIGMpCi17Ci0gICAgaWYgKChjICYgfjB4MUYpICE9IDB4MDA4MCkKLSAgICAg
ICAgcmV0dXJuIGM7Ci0gICAgcmV0dXJuIHdpbmRvd3NMYXRpbjFFeHRlbnNpb25BcnJheVtjIC0g
MHg4MF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCB0YWdNYXRjaChjb25zdCBjaGFyKiBzMSwg
Y29uc3QgVUNoYXIqIHMyLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMxID0gczFb
aV07Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgdWMxID0gdG9BU0NJSVVwcGVyKHN0YXRpY19jYXN0
PGNoYXI+KGMxKSk7Ci0gICAgICAgIFVDaGFyIGMyID0gczJbaV07Ci0gICAgICAgIGlmIChjMSAh
PSBjMiAmJiB1YzEgIT0gYzIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBUb2tlbjo6YWRkQXR0cmlidXRlKEF0b21p
Y1N0cmluZyYgYXR0ck5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUsIGJv
b2wgdmlld1NvdXJjZU1vZGUpCi17Ci0gICAgaWYgKCFhdHRyTmFtZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgQVNTRVJUKCFhdHRyTmFtZS5jb250YWlucygnLycpKTsKLSAgICAgICAgUmVmUHRyPEF0
dHJpYnV0ZT4gYSA9IEF0dHJpYnV0ZTo6Y3JlYXRlTWFwcGVkKGF0dHJOYW1lLCBhdHRyaWJ1dGVW
YWx1ZSk7Ci0gICAgICAgIGlmICghYXR0cnMpIHsKLSAgICAgICAgICAgIGF0dHJzID0gTmFtZWRO
b2RlTWFwOjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGF0dHJzLT5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KDEwKTsKLSAgICAgICAgfQotICAgICAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKGEucmVs
ZWFzZSgpLCB2aWV3U291cmNlTW9kZSk7Ci0gICAgfQotCi0gICAgYXR0ck5hbWUgPSBlbXB0eUF0
b207Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTERvY3VtZW50UGFyc2VyOjpI
VE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wgcmVwb3J0RXJyb3JzKQot
ICAgIDogRG9jdW1lbnRQYXJzZXIoKQotICAgICwgbV9idWZmZXIoMCkKLSAgICAsIG1fc2NyaXB0
Q29kZSgwKQotICAgICwgbV9zY3JpcHRDb2RlU2l6ZSgwKQotICAgICwgbV9zY3JpcHRDb2RlQ2Fw
YWNpdHkoMCkKLSAgICAsIG1fc2NyaXB0Q29kZVJlc3luYygwKQotICAgICwgbV9leGVjdXRpbmdT
Y3JpcHQoMCkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKLSAgICAsIG1faGFzU2Ny
aXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyhmYWxzZSkKLSAgICAsIG1fdGltZXIodGhpcywgJkhU
TUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZXh0ZXJuYWxTY3JpcHRzVGlt
ZXIodGhpcywgJkhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c1RpbWVy
RmlyZWQpCi0gICAgLCBtX2RvYyhkb2MpCi0gICAgLCBtX3RyZWVDb25zdHJ1Y3RvcihuZXcgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcihkb2MsIHJlcG9ydEVycm9ycykpCi0gICAgLCBtX2luV3Jp
dGUoZmFsc2UpCi0gICAgLCBtX2ZyYWdtZW50KGZhbHNlKQotICAgICwgbV9zY3JpcHRpbmdQZXJt
aXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLXsKLSAgICBiZWdpbigpOwotfQotCi1I
VE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MVmlld1NvdXJjZURvY3Vt
ZW50KiBkb2MpCi0gICAgOiBEb2N1bWVudFBhcnNlcih0cnVlKQotICAgICwgbV9idWZmZXIoMCkK
LSAgICAsIG1fc2NyaXB0Q29kZSgwKQotICAgICwgbV9zY3JpcHRDb2RlU2l6ZSgwKQotICAgICwg
bV9zY3JpcHRDb2RlQ2FwYWNpdHkoMCkKLSAgICAsIG1fc2NyaXB0Q29kZVJlc3luYygwKQotICAg
ICwgbV9leGVjdXRpbmdTY3JpcHQoMCkKLSAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkK
LSAgICAsIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyhmYWxzZSkKLSAgICAsIG1f
dGltZXIodGhpcywgJkhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZXh0
ZXJuYWxTY3JpcHRzVGltZXIodGhpcywgJkhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVy
bmFsU2NyaXB0c1RpbWVyRmlyZWQpCi0gICAgLCBtX2RvYyhkb2MpCi0gICAgLCBtX2luV3JpdGUo
ZmFsc2UpCi0gICAgLCBtX2ZyYWdtZW50KGZhbHNlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNz
aW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLXsKLSAgICBiZWdpbigpOwotfQotCi1IVE1M
RG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFn
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICA6
IG1fYnVmZmVyKDApCi0gICAgLCBtX3NjcmlwdENvZGUoMCkKLSAgICAsIG1fc2NyaXB0Q29kZVNp
emUoMCkKLSAgICAsIG1fc2NyaXB0Q29kZUNhcGFjaXR5KDApCi0gICAgLCBtX3NjcmlwdENvZGVS
ZXN5bmMoMCkKLSAgICAsIG1fZXhlY3V0aW5nU2NyaXB0KDApCi0gICAgLCBtX3JlcXVlc3RpbmdT
Y3JpcHQoZmFsc2UpCi0gICAgLCBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoZmFs
c2UpCi0gICAgLCBtX3RpbWVyKHRoaXMsICZIVE1MRG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQp
Ci0gICAgLCBtX2V4dGVybmFsU2NyaXB0c1RpbWVyKHRoaXMsICZIVE1MRG9jdW1lbnRQYXJzZXI6
OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKQotICAgICwgbV9kb2MoZnJhZy0+ZG9j
dW1lbnQoKSkKLSAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yKGZyYWcsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQotICAgICwgbV9pbldyaXRlKGZhbHNl
KQotICAgICwgbV9mcmFnbWVudCh0cnVlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNj
cmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgYmVnaW4oKTsKLX0KLQotdm9pZCBIVE1MRG9jdW1l
bnRQYXJzZXI6OnJlc2V0KCkKLXsKLSAgICBBU1NFUlQobV9leGVjdXRpbmdTY3JpcHQgPT0gMCk7
Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gY3MgPSBtX3BlbmRpbmdTY3JpcHRzLnRh
a2VGaXJzdCgpOwotICAgICAgICBBU1NFUlQoY2FjaGUoKS0+ZGlzYWJsZWQoKSB8fCBjcy0+YWNj
ZXNzQ291bnQoKSA+IDApOwotICAgICAgICBjcy0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIH0K
LQotICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKLSAgICBtX2J1ZmZlciA9IG1fZGVzdCA9IDA7Ci0g
ICAgbV9idWZmZXJTaXplID0gMDsKLQotICAgIGZhc3RGcmVlKG1fc2NyaXB0Q29kZSk7Ci0gICAg
bV9zY3JpcHRDb2RlID0gMDsKLSAgICBtX3NjcmlwdENvZGVTaXplID0gbV9zY3JpcHRDb2RlQ2Fw
YWNpdHkgPSBtX3NjcmlwdENvZGVSZXN5bmMgPSAwOwotCi0gICAgbV90aW1lci5zdG9wKCk7Ci0g
ICAgbV9leHRlcm5hbFNjcmlwdHNUaW1lci5zdG9wKCk7Ci0KLSAgICBtX3N0YXRlLnNldEFsbG93
WWllbGQoZmFsc2UpOwotICAgIG1fc3RhdGUuc2V0Rm9yY2VTeW5jaHJvbm91cyhmYWxzZSk7Ci0K
LSAgICBtX2N1cnJlbnRUb2tlbi5yZXNldCgpOwotICAgIG1fZG9jdHlwZVRva2VuLnJlc2V0KCk7
Ci0gICAgbV9kb2N0eXBlU2VhcmNoQ291bnQgPSAwOwotICAgIG1fZG9jdHlwZVNlY29uZGFyeVNl
YXJjaENvdW50ID0gMDsKLSAgICBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMgPSBm
YWxzZTsKLX0KLQotdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmJlZ2luKCkKLXsKLSAgICBtX2V4
ZWN1dGluZ1NjcmlwdCA9IDA7Ci0gICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7Ci0gICAg
bV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzID0gZmFsc2U7Ci0gICAgbV9zdGF0ZS5z
ZXRMb2FkaW5nRXh0U2NyaXB0KGZhbHNlKTsKLSAgICByZXNldCgpOwotICAgIG1fYnVmZmVyU2l6
ZSA9IDI1NDsKLSAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhz
aXplb2YoVUNoYXIpICogMjU0KSk7Ci0gICAgbV9kZXN0ID0gbV9idWZmZXI7Ci0gICAgdHF1b3Rl
ID0gTm9RdW90ZTsKLSAgICBzZWFyY2hDb3VudCA9IDA7Ci0gICAgbV9zdGF0ZS5zZXRFbnRpdHlT
dGF0ZShOb0VudGl0eSk7Ci0gICAgbV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUgPSBTdHJpbmcoKTsK
LSAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjID0g
MDsKLSAgICBtX25vTW9yZURhdGEgPSBmYWxzZTsKLSAgICBtX2Jyb2tlbkNvbW1lbnRzID0gZmFs
c2U7Ci0gICAgbV9icm9rZW5TZXJ2ZXIgPSBmYWxzZTsKLSAgICBtX2xpbmVOdW1iZXIgPSAwOwot
ICAgIG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlciA9IDA7Ci0gICAgbV9jdXJyZW50
VGFnU3RhcnRMaW5lTnVtYmVyID0gMDsKLSAgICBtX3N0YXRlLnNldEZvcmNlU3luY2hyb25vdXMo
ZmFsc2UpOwotCi0gICAgUGFnZSogcGFnZSA9IG1fZG9jLT5wYWdlKCk7Ci0gICAgaWYgKHBhZ2Ug
JiYgcGFnZS0+aGFzQ3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSgpKQotICAgICAgICBtX3Rv
a2VuaXplclRpbWVEZWxheSA9IHBhZ2UtPmN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fdG9rZW5pemVyVGltZURlbGF5ID0gZGVmYXVsdFRva2VuaXpl
clRpbWVEZWxheTsKLQotICAgIGlmIChwYWdlICYmIHBhZ2UtPmhhc0N1c3RvbUhUTUxUb2tlbml6
ZXJDaHVua1NpemUoKSkKLSAgICAgICAgbV90b2tlbml6ZXJDaHVua1NpemUgPSBwYWdlLT5jdXN0
b21IVE1MVG9rZW5pemVyQ2h1bmtTaXplKCk7Ci0gICAgZWxzZQotICAgICAgICBtX3Rva2VuaXpl
ckNodW5rU2l6ZSA9IGRlZmF1bHRUb2tlbml6ZXJDaHVua1NpemU7Ci19Ci0KLXZvaWQgSFRNTERv
Y3VtZW50UGFyc2VyOjpzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgZm9yY2UpCi17Ci0gICAgbV9z
dGF0ZS5zZXRGb3JjZVN5bmNocm9ub3VzKGZvcmNlKTsKLX0KLQotSFRNTERvY3VtZW50UGFyc2Vy
OjpTdGF0ZSBIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NMaXN0aW5nKFNlZ21lbnRlZFN0cmlu
ZyBsaXN0LCBTdGF0ZSBzdGF0ZSkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGxp
c3RpbmcgJ2xpc3QnIGFzCi0gICAgLy8gcHJlZm9ybWF0dGVkIHRleHQtdG9rZW5zIHRvIHRoZSB0
b2tlbi1jb2xsZWN0aW9uCi0gICAgd2hpbGUgKCFsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBp
ZiAoc3RhdGUuc2tpcExGKCkpIHsKLSAgICAgICAgICAgIHN0YXRlLnNldFNraXBMRihmYWxzZSk7
Ci0gICAgICAgICAgICBpZiAoKmxpc3QgPT0gJ1xuJykgewotICAgICAgICAgICAgICAgIGxpc3Qu
YWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgY2hlY2tCdWZmZXIoKTsKLQotICAgICAgICBpZiAoKmxpc3QgPT0g
J1xuJyB8fCAqbGlzdCA9PSAnXHInKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZGlzY2FyZExG
KCkpCi0gICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoaXMgTEYKLSAgICAgICAgICAgICAgICBz
dGF0ZS5zZXREaXNjYXJkTEYoZmFsc2UpOyAvLyBXZSBoYXZlIGRpc2NhcmRlZCAxIExGCi0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgKm1fZGVzdCsrID0gJ1xuJzsKLQotICAgICAg
ICAgICAgLyogQ2hlY2sgZm9yIE1TLURPUyBDUkxGIHNlcXVlbmNlICovCi0gICAgICAgICAgICBp
ZiAoKmxpc3QgPT0gJ1xyJykKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRTa2lwTEYodHJ1ZSk7
Ci0KLSAgICAgICAgICAgIGxpc3QuYWR2YW5jZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgc3RhdGUuc2V0RGlzY2FyZExGKGZhbHNlKTsKLSAgICAgICAgICAgICptX2Rlc3QrKyA9
ICpsaXN0OwotICAgICAgICAgICAgbGlzdC5hZHZhbmNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRNTERv
Y3VtZW50UGFyc2VyOjpwYXJzZU5vbkhUTUxUZXh0KFNlZ21lbnRlZFN0cmluZyYgc3JjLCBTdGF0
ZSBzdGF0ZSkKLXsKLSAgICBBU1NFUlQoc3RhdGUuaW5UZXh0QXJlYSgpIHx8IHN0YXRlLmluVGl0
bGUoKSB8fCBzdGF0ZS5pbklGcmFtZSgpIHx8ICFzdGF0ZS5oYXNFbnRpdHlTdGF0ZSgpKTsKLSAg
ICBBU1NFUlQoIXN0YXRlLmhhc1RhZ1N0YXRlKCkpOwotICAgIEFTU0VSVChzdGF0ZS5pblhtcCgp
ICsgc3RhdGUuaW5UZXh0QXJlYSgpICsgc3RhdGUuaW5UaXRsZSgpICsgc3RhdGUuaW5TdHlsZSgp
ICsgc3RhdGUuaW5TY3JpcHQoKSArIHN0YXRlLmluSUZyYW1lKCkgPT0gMSk7Ci0gICAgaWYgKHN0
YXRlLmluU2NyaXB0KCkgJiYgIW1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlcikKLSAg
ICAgICAgbV9jdXJyZW50U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyID0gbV9saW5lTnVtYmVyOwot
Ci0gICAgaWYgKHN0YXRlLmluQ29tbWVudCgpKQotICAgICAgICBzdGF0ZSA9IHBhcnNlQ29tbWVu
dChzcmMsIHN0YXRlKTsKLQotICAgIGludCBsYXN0RGVjb2RlZEVudGl0eVBvc2l0aW9uID0gLTE7
Ci0gICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNoZWNrU2NyaXB0QnVmZmVy
KCk7Ci0gICAgICAgIFVDaGFyIGNoID0gKnNyYzsKLQotICAgICAgICBpZiAoIW1fc2NyaXB0Q29k
ZVJlc3luYyAmJiAhbV9icm9rZW5Db21tZW50cyAmJgotICAgICAgICAgICAgIXN0YXRlLmluWG1w
KCkgJiYgY2ggPT0gJy0nICYmIG1fc2NyaXB0Q29kZVNpemUgPj0gMyAmJiAhc3JjLmVzY2FwZWQo
KSAmJgotICAgICAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUgLSAzXSA9PSAn
PCcgJiYgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUgLSAyXSA9PSAnIScgJiYgbV9zY3Jp
cHRDb2RlW21fc2NyaXB0Q29kZVNpemUgLSAxXSA9PSAnLScgJiYKLSAgICAgICAgICAgIChsYXN0
RGVjb2RlZEVudGl0eVBvc2l0aW9uIDwgbV9zY3JpcHRDb2RlU2l6ZSAtIDMpKSB7Ci0gICAgICAg
ICAgICBzdGF0ZS5zZXRJbkNvbW1lbnQodHJ1ZSk7Ci0gICAgICAgICAgICBzdGF0ZSA9IHBhcnNl
Q29tbWVudChzcmMsIHN0YXRlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX3NjcmlwdENvZGVSZXN5bmMgJiYgIXRxdW90ZSAmJiBjaCA9PSAnPicpIHsK
LSAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgIG1f
c2NyaXB0Q29kZVNpemUgPSBtX3NjcmlwdENvZGVSZXN5bmMgLSAxOwotICAgICAgICAgICAgbV9z
Y3JpcHRDb2RlUmVzeW5jID0gMDsKLSAgICAgICAgICAgIG1fc2NyaXB0Q29kZVttX3NjcmlwdENv
ZGVTaXplXSA9IG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplICsgMV0gPSAwOwotICAgICAg
ICAgICAgaWYgKHN0YXRlLmluU2NyaXB0KCkpCi0gICAgICAgICAgICAgICAgc3RhdGUgPSBzY3Jp
cHRIYW5kbGVyKHN0YXRlKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHN0
YXRlID0gcHJvY2Vzc0xpc3RpbmcoU2VnbWVudGVkU3RyaW5nKG1fc2NyaXB0Q29kZSwgbV9zY3Jp
cHRDb2RlU2l6ZSksIHN0YXRlKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAg
ICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5TdHlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudFRva2VuLnRhZ05hbWUgPSBzdHlsZVRhZy5sb2NhbE5hbWUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0YXRlLmluVGV4dEFyZWEoKSkgewotICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0gdGV4dGFyZWFUYWcubG9jYWxOYW1lKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmJlZ2luVGFnID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pblRpdGxlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9IHRpdGxlVGFnLmxvY2FsTmFtZSgpOwotICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaW5YbXAoKSkgewotICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRUb2tlbi50YWdOYW1lID0geG1wVGFnLmxvY2FsTmFtZSgpOwotICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUuaW5JRnJhbWUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRUb2tlbi50YWdOYW1lID0gaWZyYW1lVGFnLmxvY2FsTmFtZSgpOwotICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAgICAgICAgICBzdGF0
ZS5zZXRJblN0eWxlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJblNjcmlwdChm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5UZXh0QXJlYShmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgc3RhdGUuc2V0SW5UaXRsZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgc3Rh
dGUuc2V0SW5YbXAoZmFsc2UpOwotICAgICAgICAgICAgICAgIHN0YXRlLnNldEluSUZyYW1lKGZh
bHNlKTsKLSAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwotICAgICAgICAgICAgICAg
IG1fc2NyaXB0Q29kZVNpemUgPSBtX3NjcmlwdENvZGVSZXN5bmMgPSAwOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0gICAgICAgIC8vIHBvc3Np
YmxlIGVuZCBvZiB0YWduYW1lLCBsZXRzIGNoZWNrLgotICAgICAgICBpZiAoIW1fc2NyaXB0Q29k
ZVJlc3luYyAmJiAhc3RhdGUuZXNjYXBlZCgpICYmICFzcmMuZXNjYXBlZCgpICYmIChjaCA9PSAn
PicgfHwgY2ggPT0gJy8nIHx8IGlzQVNDSUlTcGFjZShjaCkpICYmCi0gICAgICAgICAgICAgbV9z
Y3JpcHRDb2RlU2l6ZSA+PSBtX3NlYXJjaFN0b3BwZXJMZW5ndGggJiYKLSAgICAgICAgICAgICB0
YWdNYXRjaChtX3NlYXJjaFN0b3BwZXIsIG1fc2NyaXB0Q29kZSArIG1fc2NyaXB0Q29kZVNpemUg
LSBtX3NlYXJjaFN0b3BwZXJMZW5ndGgsIG1fc2VhcmNoU3RvcHBlckxlbmd0aCkgJiYKLSAgICAg
ICAgICAgICAobGFzdERlY29kZWRFbnRpdHlQb3NpdGlvbiA8IG1fc2NyaXB0Q29kZVNpemUgLSBt
X3NlYXJjaFN0b3BwZXJMZW5ndGgpKSB7Ci0gICAgICAgICAgICBtX3NjcmlwdENvZGVSZXN5bmMg
PSBtX3NjcmlwdENvZGVTaXplLW1fc2VhcmNoU3RvcHBlckxlbmd0aCsxOwotICAgICAgICAgICAg
dHF1b3RlID0gTm9RdW90ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChtX3NjcmlwdENvZGVSZXN5bmMgJiYgIXN0YXRlLmVzY2FwZWQoKSkgewotICAgICAg
ICAgICAgaWYgKGNoID09ICdcIicpCi0gICAgICAgICAgICAgICAgdHF1b3RlID0gKHRxdW90ZSA9
PSBOb1F1b3RlKSA/IERvdWJsZVF1b3RlIDogKCh0cXVvdGUgPT0gU2luZ2xlUXVvdGUpID8gU2lu
Z2xlUXVvdGUgOiBOb1F1b3RlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdcJycpCi0g
ICAgICAgICAgICAgICAgdHF1b3RlID0gKHRxdW90ZSA9PSBOb1F1b3RlKSA/IFNpbmdsZVF1b3Rl
IDogKHRxdW90ZSA9PSBEb3VibGVRdW90ZSkgPyBEb3VibGVRdW90ZSA6IE5vUXVvdGU7Ci0gICAg
ICAgICAgICBlbHNlIGlmICh0cXVvdGUgIT0gTm9RdW90ZSAmJiAoY2ggPT0gJ1xyJyB8fCBjaCA9
PSAnXG4nKSkKLSAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwotICAgICAgICB9Ci0g
ICAgICAgIHN0YXRlLnNldEVzY2FwZWQoIXN0YXRlLmVzY2FwZWQoKSAmJiBjaCA9PSAnXFwnKTsK
LSAgICAgICAgaWYgKCFtX3NjcmlwdENvZGVSZXN5bmMgJiYgKHN0YXRlLmluVGV4dEFyZWEoKSB8
fCBzdGF0ZS5pblRpdGxlKCkgfHwgc3RhdGUuaW5JRnJhbWUoKSkgJiYgIXNyYy5lc2NhcGVkKCkg
JiYgY2ggPT0gJyYnKSB7Ci0gICAgICAgICAgICBVQ2hhciogc2NyaXB0Q29kZURlc3QgPSBtX3Nj
cmlwdENvZGUgKyBtX3NjcmlwdENvZGVTaXplOwotICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0
Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgc3RhdGUgPSBwYXJzZUVudGl0eShzcmMsIHNjcmlw
dENvZGVEZXN0LCBzdGF0ZSwgbV9jQnVmZmVyUG9zLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgICAg
ICBpZiAoc2NyaXB0Q29kZURlc3QgPT0gbV9zY3JpcHRDb2RlICsgbV9zY3JpcHRDb2RlU2l6ZSkK
LSAgICAgICAgICAgICAgICBsYXN0RGVjb2RlZEVudGl0eVBvc2l0aW9uID0gbV9zY3JpcHRDb2Rl
U2l6ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3NjcmlwdENvZGVTaXpl
ID0gc2NyaXB0Q29kZURlc3QgLSBtX3NjcmlwdENvZGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZSsrXSA9IGNoOwotICAgICAgICAg
ICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBzdGF0ZTsKLX0KLQotSFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBIVE1MRG9jdW1lbnRQ
YXJzZXI6OnNjcmlwdEhhbmRsZXIoU3RhdGUgc3RhdGUpCi17Ci0gICAgLy8gV2UgYXJlIGluc2lk
ZSBhIDxzY3JpcHQ+Ci0gICAgYm9vbCBkb1NjcmlwdEV4ZWMgPSBmYWxzZTsKLSAgICBpbnQgc3Rh
cnRMaW5lID0gbV9jdXJyZW50U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyICsgMTsgLy8gU2NyaXB0
IGxpbmUgbnVtYmVycyBhcmUgMSBiYXNlZCwgSFRNTFRva2VuemllciBsaW5lIG51bWJlcnMgYXJl
IDAgYmFzZWQKLQotICAgIC8vIFJlc2V0IG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJl
ciB0byBpbmRpY2F0ZSB0aGF0IHdlJ3ZlIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGN1cnJlbnQgc2Ny
aXB0IGVsZW1lbnQKLSAgICBtX2N1cnJlbnRTY3JpcHRUYWdTdGFydExpbmVOdW1iZXIgPSAwOwot
Ci0gICAgLy8gKEJ1Z3ppbGxhIDM4MzcpIFNjcmlwdHMgZm9sbG93aW5nIGEgZnJhbWVzZXQgZWxl
bWVudCBzaG91bGQgbm90IGV4ZWN1dGUgb3IsCi0gICAgLy8gaW4gdGhlIGNhc2Ugb2YgZXh0ZXJu
IHNjcmlwdHMsIGV2ZW4gbG9hZC4KLSAgICBib29sIGZvbGxvd2luZ0ZyYW1lc2V0ID0gKG1fZG9j
LT5ib2R5KCkgJiYgbV9kb2MtPmJvZHkoKS0+aGFzVGFnTmFtZShmcmFtZXNldFRhZykpOwotCi0g
ICAgQ2FjaGVkU2NyaXB0KiBjcyA9IDA7Ci0gICAgLy8gZG9uJ3QgbG9hZCBleHRlcm5hbCBzY3Jp
cHRzIGZvciBzdGFuZGFsb25lIGRvY3VtZW50cyAoZm9yIG5vdykKLSAgICBpZiAoIWluVmlld1Nv
dXJjZU1vZGUoKSkgewotICAgICAgICBpZiAoIW1fc2NyaXB0VGFnU3JjQXR0clZhbHVlLmlzRW1w
dHkoKSAmJiBtX2RvYy0+ZnJhbWUoKSkgewotICAgICAgICAgICAgLy8gZm9yZ2V0IHdoYXQgd2Ug
anVzdCBnb3Q7IGxvYWQgZnJvbSBzcmMgdXJsIGluc3RlYWQKLSAgICAgICAgICAgIGlmICghbV90
cmVlQ29uc3RydWN0b3ItPnNraXBNb2RlKCkgJiYgIWZvbGxvd2luZ0ZyYW1lc2V0KSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVGhlIHBhcnNlciBtaWdodCBoYXZlIGJlZW4gc3RvcHBlZCBieSBmb3Ig
ZXhhbXBsZSBhIHdpbmRvdy5jbG9zZSBjYWxsIGluIGFuIGVhcmxpZXIgc2NyaXB0LgotICAgICAg
ICAgICAgICAgIC8vIElmIHNvLCB3ZSBkb24ndCB3YW50IHRvIGxvYWQgc2NyaXB0cy4KLSAgICAg
ICAgICAgICAgICBpZiAoIW1fcGFyc2VyU3RvcHBlZCAmJiBtX3NjcmlwdE5vZGUtPmRpc3BhdGNo
QmVmb3JlTG9hZEV2ZW50KG1fc2NyaXB0VGFnU3JjQXR0clZhbHVlKSAmJgotICAgICAgICAgICAg
ICAgICAgICAoY3MgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQobV9zY3JpcHRU
YWdTcmNBdHRyVmFsdWUsIG1fc2NyaXB0VGFnQ2hhcnNldEF0dHJWYWx1ZSkpKQotICAgICAgICAg
ICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHRzLmFwcGVuZChjcyk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdE5vZGUgPSAwOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsKLSAgICAgICAgICAgIG1f
c2NyaXB0VGFnU3JjQXR0clZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBQYXJzZSBtX3NjcmlwdENvZGUgY29udGFpbmluZyA8c2NyaXB0PiBpbmZvCi0g
ICAgICAgICAgICBkb1NjcmlwdEV4ZWMgPSBtX3NjcmlwdE5vZGUtPnNob3VsZEV4ZWN1dGVBc0ph
dmFTY3JpcHQoKTsKLSNpZiBFTkFCTEUoWEhUTUxNUCkKLSAgICAgICAgICAgIGlmICghZG9TY3Jp
cHRFeGVjKQotICAgICAgICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRF
bGVtZW50KHRydWUpOwotI2VuZGlmCi0gICAgICAgICAgICBtX3NjcmlwdE5vZGUgPSAwOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGUgPSBwcm9jZXNzTGlzdGluZyhTZWdtZW50ZWRTdHJp
bmcobV9zY3JpcHRDb2RlLCBtX3NjcmlwdENvZGVTaXplKSwgc3RhdGUpOwotICAgIFJlZlB0cjxO
b2RlPiBub2RlID0gcHJvY2Vzc1Rva2VuKCk7Ci0KLSAgICBpZiAobm9kZSAmJiBtX3NjcmlwdGlu
Z1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7Ci0gICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIG5vZGUtPnJlbW92ZShlYyk7Ci0gICAgICAgIG5vZGUg
PSAwOwotICAgIH0KLQotICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBub2RlID8gbm9kZS0+dGV4
dENvbnRlbnQoKSA6ICIiOwotICAgIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPSBzY3JpcHRUYWcu
bG9jYWxOYW1lKCk7Ci0gICAgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKLSAgICBw
cm9jZXNzVG9rZW4oKTsKLQotICAgIHN0YXRlLnNldEluU2NyaXB0KGZhbHNlKTsKLSAgICBtX3Nj
cmlwdENvZGVTaXplID0gbV9zY3JpcHRDb2RlUmVzeW5jID0gMDsKLQotICAgIC8vIEZJWE1FOiBU
aGUgc2NyaXB0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQuCi0gICAgaWYgKGluVmlld1Nv
dXJjZU1vZGUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRlOwotCi0gICAgU2VnbWVudGVkU3RyaW5n
KiBzYXZlZFByZXBlbmRpbmdTcmMgPSBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjOwotICAgIFNlZ21l
bnRlZFN0cmluZyBwcmVwZW5kaW5nU3JjOwotICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMgPSAm
cHJlcGVuZGluZ1NyYzsKLQotICAgIGlmICghbV90cmVlQ29uc3RydWN0b3ItPnNraXBNb2RlKCkg
JiYgIWZvbGxvd2luZ0ZyYW1lc2V0KSB7Ci0gICAgICAgIGlmIChjcykgewotICAgICAgICAgICAg
aWYgKHNhdmVkUHJlcGVuZGluZ1NyYykKLSAgICAgICAgICAgICAgICBzYXZlZFByZXBlbmRpbmdT
cmMtPmFwcGVuZChtX3NyYyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9w
ZW5kaW5nU3JjLnByZXBlbmQobV9zcmMpOwotICAgICAgICAgICAgc2V0U3JjKFNlZ21lbnRlZFN0
cmluZygpKTsKLQotICAgICAgICAgICAgLy8gdGhlIHJlZigpIGNhbGwgYmVsb3cgbWF5IGNhbGwg
bm90aWZ5RmluaXNoZWQgaWYgdGhlIHNjcmlwdCBpcyBhbHJlYWR5IGluIGNhY2hlLAotICAgICAg
ICAgICAgLy8gYW5kIHRoYXQgbXVja3Mgd2l0aCB0aGUgc3RhdGUgZGlyZWN0bHksIHNvIHdlIG11
c3Qgd3JpdGUgaXQgYmFjayB0byB0aGUgb2JqZWN0LgotICAgICAgICAgICAgbV9zdGF0ZSA9IHN0
YXRlOwotICAgICAgICAgICAgYm9vbCBzYXZlZFJlcXVlc3RpbmdTY3JpcHQgPSBtX3JlcXVlc3Rp
bmdTY3JpcHQ7Ci0gICAgICAgICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwotICAgICAg
ICAgICAgY3MtPmFkZENsaWVudCh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVxdWVzdGluZ1Njcmlw
dCA9IHNhdmVkUmVxdWVzdGluZ1NjcmlwdDsKLSAgICAgICAgICAgIHN0YXRlID0gbV9zdGF0ZTsK
LSAgICAgICAgICAgIC8vIHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFu
ZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAgICAgICAgaWYgKCFtX3BlbmRpbmdTY3JpcHRzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRMb2FkaW5nRXh0U2NyaXB0KHRydWUp
OwotICAgICAgICB9IGVsc2UgaWYgKCFtX2ZyYWdtZW50ICYmIGRvU2NyaXB0RXhlYykgewotICAg
ICAgICAgICAgaWYgKCFtX2V4ZWN1dGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICBtX3BlbmRp
bmdTcmMucHJlcGVuZChtX3NyYyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cHJlcGVuZGluZ1NyYyA9IG1fc3JjOwotICAgICAgICAgICAgc2V0U3JjKFNlZ21lbnRlZFN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHN0YXRlID0gc2NyaXB0RXhlY3V0aW9uKFNjcmlwdFNvdXJjZUNv
ZGUoc2NyaXB0U3RyaW5nLCBtX2RvYy0+ZnJhbWUoKSA/IG1fZG9jLT5mcmFtZSgpLT5kb2N1bWVu
dCgpLT51cmwoKSA6IEtVUkwoKSwgc3RhcnRMaW5lKSwgc3RhdGUpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCFtX2V4ZWN1dGluZ1NjcmlwdCAmJiAhc3RhdGUubG9hZGluZ0V4dFNjcmlw
dCgpKSB7Ci0gICAgICAgIG1fc3JjLmFwcGVuZChtX3BlbmRpbmdTcmMpOwotICAgICAgICBtX3Bl
bmRpbmdTcmMuY2xlYXIoKTsKLSAgICB9IGVsc2UgaWYgKCFwcmVwZW5kaW5nU3JjLmlzRW1wdHko
KSkgewotICAgICAgICAvLyByZXN0b3JlIGZpcnN0IHNvIHRoYXQgdGhlIHdyaXRlIGFwcGVuZHMg
aW4gdGhlIHJpZ2h0IHBsYWNlCi0gICAgICAgIC8vIChkb2VzIG5vdCBodXJ0IHRvIGRvIGl0IGFn
YWluIGJlbG93KQotICAgICAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjID0gc2F2ZWRQcmVwZW5k
aW5nU3JjOwotCi0gICAgICAgIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBzbGlnaHRseSBtb2RpZmll
ZCBiaXQgb2Ygb25lIG9mIHRoZSB3cml0ZSgpIGNhc2VzCi0gICAgICAgIC8vIGJlY2F1c2Ugd2Ug
d2FudCB0byBwcmVwZW5kIHRvIG1fcGVuZGluZ1NyYyByYXRoZXIgdGhhbiBhcHBlbmRpbmcKLSAg
ICAgICAgLy8gaWYgdGhlcmUncyBubyBwcmV2aW91cyBwcmVwZW5kaW5nU3JjCi0gICAgICAgIGlm
ICghbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRQcmVwZW5kaW5nU3JjKQotICAgICAgICAgICAgICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMt
PmFwcGVuZChwcmVwZW5kaW5nU3JjKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBtX3BlbmRpbmdTcmMucHJlcGVuZChwcmVwZW5kaW5nU3JjKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1fc3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgICAgIHdyaXRlKHByZXBlbmRp
bmdTcmMsIGZhbHNlKTsKLSAgICAgICAgICAgIHN0YXRlID0gbV9zdGF0ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotI2lmIFBSRUxPQURfU0NBTk5FUl9FTkFCTEVECi0gICAgaWYgKCFtX3BlbmRpbmdT
Y3JpcHRzLmlzRW1wdHkoKSAmJiAhbV9leGVjdXRpbmdTY3JpcHQpIHsKLSAgICAgICAgaWYgKCFt
X3ByZWxvYWRTY2FubmVyKQotICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci5zZXQobmV3IFBy
ZWxvYWRTY2FubmVyKG1fZG9jKSk7Ci0gICAgICAgIGlmICghbV9wcmVsb2FkU2Nhbm5lci0+aW5Q
cm9ncmVzcygpKSB7Ci0gICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5iZWdpbigpOwotICAg
ICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+d3JpdGUobV9wZW5kaW5nU3JjKTsKLSAgICAgICAg
fQotICAgIH0KLSNlbmRpZgotICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMgPSBzYXZlZFByZXBl
bmRpbmdTcmM7Ci0KLSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLUhUTUxEb2N1bWVudFBhcnNlcjo6
U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRFeGVjdXRpb24oY29uc3QgU2NyaXB0U291
cmNlQ29kZSYgc291cmNlQ29kZSwgU3RhdGUgc3RhdGUpCi17Ci0gICAgaWYgKG1fZnJhZ21lbnQg
fHwgIW1fZG9jLT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgbV9leGVjdXRp
bmdTY3JpcHQrKzsKLQotICAgIFNlZ21lbnRlZFN0cmluZyogc2F2ZWRQcmVwZW5kaW5nU3JjID0g
bV9jdXJyZW50UHJlcGVuZGluZ1NyYzsKLSAgICBTZWdtZW50ZWRTdHJpbmcgcHJlcGVuZGluZ1Ny
YzsKLSAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjID0gJnByZXBlbmRpbmdTcmM7Ci0KLSAgICBt
X3N0YXRlID0gc3RhdGU7Ci0gICAgbV9kb2MtPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2Ny
aXB0KHNvdXJjZUNvZGUpOwotICAgIHN0YXRlID0gbV9zdGF0ZTsKLQotICAgIHN0YXRlLnNldEFs
bG93WWllbGQodHJ1ZSk7Ci0KLSAgICBtX2V4ZWN1dGluZ1NjcmlwdC0tOwotCi0gICAgaWYgKCFt
X2V4ZWN1dGluZ1NjcmlwdCAmJiAhc3RhdGUubG9hZGluZ0V4dFNjcmlwdCgpKSB7Ci0gICAgICAg
IG1fcGVuZGluZ1NyYy5wcmVwZW5kKHByZXBlbmRpbmdTcmMpOwotICAgICAgICBtX3NyYy5hcHBl
bmQobV9wZW5kaW5nU3JjKTsKLSAgICAgICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgfSBl
bHNlIGlmICghcHJlcGVuZGluZ1NyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gcmVzdG9yZSBm
aXJzdCBzbyB0aGF0IHRoZSB3cml0ZSBhcHBlbmRzIGluIHRoZSByaWdodCBwbGFjZQotICAgICAg
ICAvLyAoZG9lcyBub3QgaHVydCB0byBkbyBpdCBhZ2FpbiBiZWxvdykKLSAgICAgICAgbV9jdXJy
ZW50UHJlcGVuZGluZ1NyYyA9IHNhdmVkUHJlcGVuZGluZ1NyYzsKLQotICAgICAgICAvLyB3ZSBu
ZWVkIHRvIGRvIHRoaXMgc2xpZ2h0bHkgbW9kaWZpZWQgYml0IG9mIG9uZSBvZiB0aGUgd3JpdGUo
KSBjYXNlcwotICAgICAgICAvLyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlcGVuZCB0byBtX3BlbmRp
bmdTcmMgcmF0aGVyIHRoYW4gYXBwZW5kaW5nCi0gICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gcHJl
dmlvdXMgcHJlcGVuZGluZ1NyYwotICAgICAgICBpZiAoIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50UHJlcGVuZGluZ1NyYykKLSAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjLT5hcHBlbmQocHJlcGVuZGluZ1NyYyk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9wZW5kaW5nU3JjLnByZXBlbmQocHJl
cGVuZGluZ1NyYyk7Ci0KLSNpZiBQUkVMT0FEX1NDQU5ORVJfRU5BQkxFRAotICAgICAgICAgICAg
Ly8gV2UgYXJlIHN0dWNrIHdhaXRpbmcgZm9yIGFub3RoZXIgc2NyaXB0LiBMZXRzIGNoZWNrIHRo
ZSBzb3VyY2UgdGhhdAotICAgICAgICAgICAgLy8gd2FzIGp1c3QgZG9jdW1lbnQud3JpdGUoKW4g
Zm9yIGFueXRoaW5nIHRvIGxvYWQuCi0gICAgICAgICAgICBQcmVsb2FkU2Nhbm5lciBkb2N1bWVu
dFdyaXRlUHJlbG9hZFNjYW5uZXIobV9kb2MpOwotICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVBy
ZWxvYWRTY2FubmVyLmJlZ2luKCk7Ci0gICAgICAgICAgICBkb2N1bWVudFdyaXRlUHJlbG9hZFNj
YW5uZXIud3JpdGUocHJlcGVuZGluZ1NyYyk7Ci0gICAgICAgICAgICBkb2N1bWVudFdyaXRlUHJl
bG9hZFNjYW5uZXIuZW5kKCk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1fc3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgICAgIHdyaXRlKHByZXBlbmRpbmdTcmMsIGZhbHNl
KTsKLSAgICAgICAgICAgIHN0YXRlID0gbV9zdGF0ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1fY3VycmVudFByZXBlbmRpbmdTcmMgPSBzYXZlZFByZXBlbmRpbmdTcmM7Ci0KLSAgICByZXR1
cm4gc3RhdGU7Ci19Ci0KLUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRNTERvY3VtZW50UGFy
c2VyOjpwYXJzZUNvbW1lbnQoU2VnbWVudGVkU3RyaW5nJiBzcmMsIFN0YXRlIHN0YXRlKQotewot
ICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGNvZGUgZXZlbiBydW4gZm9yIGNvbW1lbnRzIGlu
c2lkZSA8c2NyaXB0PiBhbmQgPHN0eWxlPj8gVGhpcyBzZWVtcyBib2d1cy4KLSAgICBjaGVja1Nj
cmlwdEJ1ZmZlcihzcmMubGVuZ3RoKCkpOwotICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewot
ICAgICAgICBVQ2hhciBjaCA9ICpzcmM7Ci0gICAgICAgIG1fc2NyaXB0Q29kZVttX3NjcmlwdENv
ZGVTaXplKytdID0gY2g7Ci0gICAgICAgIGlmIChjaCA9PSAnPicpIHsKLSAgICAgICAgICAgIGJv
b2wgaGFuZGxlQnJva2VuQ29tbWVudHMgPSBtX2Jyb2tlbkNvbW1lbnRzICYmICEoc3RhdGUuaW5T
Y3JpcHQoKSB8fCBzdGF0ZS5pblN0eWxlKCkpOwotICAgICAgICAgICAgaW50IGVuZENoYXJzQ291
bnQgPSAxOyAvLyBzdGFydCBvZmYgd2l0aCBvbmUgZm9yIHRoZSAnPicgY2hhcmFjdGVyCi0gICAg
ICAgICAgICBpZiAobV9zY3JpcHRDb2RlU2l6ZSA+IDIgJiYgbV9zY3JpcHRDb2RlW21fc2NyaXB0
Q29kZVNpemUtM10gPT0gJy0nICYmIG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplLTJdID09
ICctJykgewotICAgICAgICAgICAgICAgIGVuZENoYXJzQ291bnQgPSAzOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChtX3NjcmlwdENvZGVTaXplID4gMyAmJiBtX3NjcmlwdENvZGVbbV9zY3JpcHRD
b2RlU2l6ZS00XSA9PSAnLScgJiYgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUtM10gPT0g
Jy0nICYmCi0gICAgICAgICAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUtMl0g
PT0gJyEnKSB7Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXIgYnJvd3NlcnMgd2lsbCBhY2NlcHQg
LS0hPiBhcyBhIGNsb3NlIGNvbW1lbnQsIGV2ZW4gdGhvdWdoIGl0J3MKLSAgICAgICAgICAgICAg
ICAvLyBub3QgdGVjaG5pY2FsbHkgdmFsaWQuCi0gICAgICAgICAgICAgICAgZW5kQ2hhcnNDb3Vu
dCA9IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFuZGxlQnJva2VuQ29tbWVu
dHMgfHwgZW5kQ2hhcnNDb3VudCA+IDEpIHsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBh
c3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCEoc3RhdGUuaW5UaXRsZSgpIHx8
IHN0YXRlLmluU2NyaXB0KCkgfHwgc3RhdGUuaW5YbXAoKSB8fCBzdGF0ZS5pblRleHRBcmVhKCkg
fHwgc3RhdGUuaW5TdHlsZSgpIHx8IHN0YXRlLmluSUZyYW1lKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoZWNrU2NyaXB0QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0
Q29kZVttX3NjcmlwdENvZGVTaXplXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0
Q29kZVttX3NjcmlwdENvZGVTaXplICsgMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRUb2tlbi50YWdOYW1lID0gY29tbWVudEF0b207Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudFRva2VuLmJlZ2luVGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBwcm9jZXNzTGlzdGluZyhTZWdtZW50ZWRTdHJpbmcobV9zY3JpcHRDb2RlLCBtX3NjcmlwdENv
ZGVTaXplIC0gZW5kQ2hhcnNDb3VudCksIHN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc1Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLnRhZ05hbWUg
PSBjb21tZW50QXRvbTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYmVnaW5U
YWcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBzdGF0ZS5zZXRJbkNvbW1lbnQoZmFsc2UpOwotICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0ZTsgLy8gRmluaXNoZWQgcGFyc2luZyBjb21tZW50Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRNTERv
Y3VtZW50UGFyc2VyOjpwYXJzZVNlcnZlcihTZWdtZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3Rh
dGUpCi17Ci0gICAgY2hlY2tTY3JpcHRCdWZmZXIoc3JjLmxlbmd0aCgpKTsKLSAgICB3aGlsZSAo
IXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVUNoYXIgY2ggPSAqc3JjOwotICAgICAgICBtX3Nj
cmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZSsrXSA9IGNoOwotICAgICAgICBpZiAoY2ggPT0gJz4n
ICYmIG1fc2NyaXB0Q29kZVNpemUgPiAxICYmIG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXpl
IC0gMl0gPT0gJyUnKSB7Ci0gICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7
Ci0gICAgICAgICAgICBzdGF0ZS5zZXRJblNlcnZlcihmYWxzZSk7Ci0gICAgICAgICAgICBtX3Nj
cmlwdENvZGVTaXplID0gMDsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsgLy8gRmluaXNoZWQg
cGFyc2luZyBzZXJ2ZXIgaW5jbHVkZQotICAgICAgICB9Ci0gICAgICAgIHNyYy5hZHZhbmNlKG1f
bGluZU51bWJlcik7Ci0gICAgfQotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotSFRNTERvY3VtZW50
UGFyc2VyOjpTdGF0ZSBIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlUHJvY2Vzc2luZ0luc3RydWN0
aW9uKFNlZ21lbnRlZFN0cmluZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKLXsKLSAgICBVQ2hhciBvbGRj
aGFyID0gMDsKLSAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVUNoYXIgY2hi
ZWdpbiA9ICpzcmM7Ci0gICAgICAgIGlmIChjaGJlZ2luID09ICdcJycpCi0gICAgICAgICAgICB0
cXVvdGUgPSB0cXVvdGUgPT0gU2luZ2xlUXVvdGUgPyBOb1F1b3RlIDogU2luZ2xlUXVvdGU7Ci0g
ICAgICAgIGVsc2UgaWYgKGNoYmVnaW4gPT0gJ1wiJykKLSAgICAgICAgICAgIHRxdW90ZSA9IHRx
dW90ZSA9PSBEb3VibGVRdW90ZSA/IE5vUXVvdGUgOiBEb3VibGVRdW90ZTsKLSAgICAgICAgLy8g
TG9vayBmb3IgJz8+JwotICAgICAgICAvLyBTb21lIGNyYXBweSBzaXRlcyBvbWl0IHRoZSAiPyIg
YmVmb3JlIGl0LCBzbwotICAgICAgICAvLyB3ZSBsb29rIGZvciBhbiB1bnF1b3RlZCAnPicgaW5z
dGVhZC4gKElFIGNvbXBhdGlibGUpCi0gICAgICAgIGVsc2UgaWYgKGNoYmVnaW4gPT0gJz4nICYm
ICghdHF1b3RlIHx8IG9sZGNoYXIgPT0gJz8nKSkgewotICAgICAgICAgICAgLy8gV2UgZ290IGEg
Jz8+JyBzZXF1ZW5jZQotICAgICAgICAgICAgc3RhdGUuc2V0SW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24oZmFsc2UpOwotICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAg
ICAgICAgICAgc3RhdGUuc2V0RGlzY2FyZExGKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHN0
YXRlOyAvLyBGaW5pc2hlZCBwYXJzaW5nIGNvbW1lbnQhCi0gICAgICAgIH0KLSAgICAgICAgc3Jj
LmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgb2xkY2hhciA9IGNoYmVnaW47Ci0gICAg
fQotCi0gICAgcmV0dXJuIHN0YXRlOwotfQotCi1IVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIEhU
TUxEb2N1bWVudFBhcnNlcjo6cGFyc2VUZXh0KFNlZ21lbnRlZFN0cmluZyYgc3JjLCBTdGF0ZSBz
dGF0ZSkKLXsKLSAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVUNoYXIgY2Mg
PSAqc3JjOwotCi0gICAgICAgIGlmIChzdGF0ZS5za2lwTEYoKSkgewotICAgICAgICAgICAgc3Rh
dGUuc2V0U2tpcExGKGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChjYyA9PSAnXG4nKSB7Ci0gICAg
ICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0TmV3bGluZShtX2xpbmVOdW1iZXIpOwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gZG8gd2UgbmVlZCB0byBlbmxhcmdlIHRoZSBidWZmZXI/Ci0gICAgICAgIGNoZWNrQnVmZmVy
KCk7Ci0KLSAgICAgICAgaWYgKGNjID09ICdccicpIHsKLSAgICAgICAgICAgIHN0YXRlLnNldFNr
aXBMRih0cnVlKTsKLSAgICAgICAgICAgICptX2Rlc3QrKyA9ICdcbic7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgKm1fZGVzdCsrID0gY2M7Ci0gICAgICAgIHNyYy5hZHZhbmNlKG1fbGlu
ZU51bWJlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRlOwotfQotCi0KLUhUTUxEb2N1bWVu
dFBhcnNlcjo6U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVudGl0eShTZWdtZW50ZWRT
dHJpbmcmIHNyYywgVUNoYXIqJiBkZXN0LCBTdGF0ZSBzdGF0ZSwgdW5zaWduZWQmIGNCdWZmZXJQ
b3MsIGJvb2wgc3RhcnQsIGJvb2wgcGFyc2luZ1RhZykKLXsKLSAgICBpZiAoc3RhcnQpIHsKLSAg
ICAgICAgY0J1ZmZlclBvcyA9IDA7Ci0gICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRlKFNlYXJj
aEVudGl0eSk7Ci0gICAgICAgIEVudGl0eVVuaWNvZGVWYWx1ZSA9IDA7Ci0gICAgfQotCi0gICAg
d2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNjID0gKnNyYzsKLSAgICAg
ICAgc3dpdGNoIChzdGF0ZS5lbnRpdHlTdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9FbnRpdHk6
Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuZW50aXR5U3RhdGUoKSAhPSBOb0VudGl0eSk7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0KLSAgICAgICAgY2FzZSBTZWFyY2hFbnRpdHk6Ci0g
ICAgICAgICAgICBpZiAoY2MgPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NC
dWZmZXJQb3MrK10gPSBjYzsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXds
aW5lKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoTnVtZXJpY1NlYXJj
aCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRFbnRpdHlT
dGF0ZShFbnRpdHlOYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTnVt
ZXJpY1NlYXJjaDoKLSAgICAgICAgICAgIGlmIChjYyA9PSAneCcgfHwgY2MgPT0gJ1gnKSB7Ci0g
ICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjYzsKLSAgICAgICAgICAg
ICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUu
c2V0RW50aXR5U3RhdGUoSGV4YWRlY2ltYWwpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA+
PSAnMCcgJiYgY2MgPD0gJzknKQotICAgICAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRl
KERlY2ltYWwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlLnNldEVu
dGl0eVN0YXRlKFNlYXJjaFNlbWljb2xvbik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEhleGFkZWNpbWFsOiB7Ci0gICAgICAgICAgICBpbnQgbGwgPSBtaW4oc3JjLmxlbmd0
aCgpLCAxMCAtIGNCdWZmZXJQb3MpOwotICAgICAgICAgICAgd2hpbGUgKGxsLS0pIHsKLSAgICAg
ICAgICAgICAgICBjYyA9ICpzcmM7Ci0gICAgICAgICAgICAgICAgaWYgKCEoKGNjID49ICcwJyAm
JiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYm
IGNjIDw9ICdGJykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRl
KFNlYXJjaFNlbWljb2xvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgZGlnaXQ7Ci0gICAgICAgICAgICAgICAgaWYg
KGNjIDwgJ0EnKQotICAgICAgICAgICAgICAgICAgICBkaWdpdCA9IGNjIC0gJzAnOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGlnaXQgPSAoY2MgLSAnQScgKyAx
MCkgJiAweEY7IC8vIGhhbmRsZSBib3RoIHVwcGVyIGFuZCBsb3dlciBjYXNlIHdpdGhvdXQgYSBi
cmFuY2gKLSAgICAgICAgICAgICAgICBFbnRpdHlVbmljb2RlVmFsdWUgPSBFbnRpdHlVbmljb2Rl
VmFsdWUgKiAxNiArIGRpZ2l0OwotICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9z
KytdID0gY2M7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNCdWZmZXJQb3MgPT0gMTApCi0gICAgICAg
ICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNoU2VtaWNvbG9uKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRGVjaW1hbDoKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IGxsID0gbWluKHNyYy5sZW5ndGgoKSwgOS1jQnVmZmVyUG9zKTsKLSAg
ICAgICAgICAgIHdoaWxlIChsbC0tKSB7Ci0gICAgICAgICAgICAgICAgY2MgPSAqc3JjOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCEoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNoU2VtaWNvbG9uKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgRW50aXR5VW5pY29kZVZhbHVlID0gRW50aXR5VW5pY29kZVZhbHVlICogMTAgKyAoY2MgLSAn
MCcpOwotICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY2M7Ci0gICAg
ICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGNCdWZmZXJQb3MgPT0gOSkKLSAgICAgICAgICAgICAgICBzdGF0ZS5z
ZXRFbnRpdHlTdGF0ZShTZWFyY2hTZW1pY29sb24pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBFbnRpdHlOYW1lOgotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgbGwgPSBtaW4oc3JjLmxlbmd0aCgpLCA5LWNCdWZmZXJQb3MpOwotICAgICAgICAgICAgd2hp
bGUgKGxsLS0pIHsKLSAgICAgICAgICAgICAgICBjYyA9ICpzcmM7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoISgoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgfHwgKGNjID49ICcwJyAmJiBjYyA8PSAn
OScpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNoU2VtaWNvbG9uKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbV9jQnVmZmVy
W2NCdWZmZXJQb3MrK10gPSBjYzsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25O
ZXdsaW5lKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY0J1ZmZlclBvcyA9PSA5
KQotICAgICAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRlKFNlYXJjaFNlbWljb2xvbik7
Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZW50aXR5U3RhdGUoKSA9PSBTZWFyY2hTZW1pY29sb24p
IHsKLSAgICAgICAgICAgICAgICBpZiAoY0J1ZmZlclBvcyA+IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gU2luY2UgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGVudGl0eSBuYW1lIGlzIDksCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHNvIGEgc2luZ2xlIGNoYXIgYXJyYXkgd2hpY2ggaXMgYWxs
b2NhdGVkIG9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFjaywgaXRzIGxlbmd0aCBp
cyAxMCwgc2hvdWxkIGJlIE9LLgotICAgICAgICAgICAgICAgICAgICAvLyBBbHNvIGlmIHdlIGhh
dmUgYW4gaWxsZWdhbCBjaGFyYWN0ZXIsIHdlIHRyZWF0IGl0Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGFzIGlsbGVnYWwgZW50aXR5IG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHRlc3RlZEVudGl0eU5hbWVMZW4gPSAwOwotICAgICAgICAgICAgICAgICAgICBjaGFyIHRtcEVu
dGl0eU5hbWVCdWZmZXJbMTBdOwotCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjQnVmZmVy
UG9zIDwgMTApOwotICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdGVzdGVkRW50aXR5TmFtZUxl
biA8IGNCdWZmZXJQb3M7ICsrdGVzdGVkRW50aXR5TmFtZUxlbikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fY0J1ZmZlclt0ZXN0ZWRFbnRpdHlOYW1lTGVuXSA+IDB4N2UpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
bXBFbnRpdHlOYW1lQnVmZmVyW3Rlc3RlZEVudGl0eU5hbWVMZW5dID0gbV9jQnVmZmVyW3Rlc3Rl
ZEVudGl0eU5hbWVMZW5dOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRW50aXR5ICplOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0ZWRF
bnRpdHlOYW1lTGVuID09IGNCdWZmZXJQb3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBlID0g
ZmluZEVudGl0eSh0bXBFbnRpdHlOYW1lQnVmZmVyLCBjQnVmZmVyUG9zKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZSA9IDA7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBFbnRpdHlVbmljb2Rl
VmFsdWUgPSBlLT5jb2RlOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGJlIElFIGNvbXBhdGli
bGUKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdUYWcgJiYgRW50aXR5VW5pY29kZVZh
bHVlID4gMjU1ICYmICpzcmMgIT0gJzsnKQotICAgICAgICAgICAgICAgICAgICAgICAgRW50aXR5
VW5pY29kZVZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBTZWFyY2hTZW1pY29sb246Ci0gICAgICAgICAgICAvLyBEb24ndCBhbGxvdyB2YWx1ZXMg
dGhhdCBhcmUgbW9yZSB0aGFuIDIxIGJpdHMuCi0gICAgICAgICAgICBpZiAoRW50aXR5VW5pY29k
ZVZhbHVlID4gMCAmJiBFbnRpdHlVbmljb2RlVmFsdWUgPD0gMHgxMEZGRkYpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWluVmlld1NvdXJjZU1vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoKnNyYyA9PSAnOycpCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3RO
b25OZXdsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChFbnRpdHlVbmljb2RlVmFsdWUg
PD0gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0J1ZmZlcigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjLnB1c2goZml4VXBDaGFyKEVudGl0eVVuaWNvZGVWYWx1
ZSkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ29udmVydCB0byBVVEYtMTYsIHVzaW5nIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKDIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3JjLnB1c2goVTE2X0xFQUQoRW50aXR5VW5pY29kZVZhbHVlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzcmMucHVzaChVMTZfVFJBSUwoRW50aXR5VW5pY29kZVZhbHVlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29sb3JpemUgZW50aXRp
ZXMgYnkgc2VuZGluZyB0aGVtIGFzIGEgc3BlY2lhbCB0b2tlbi4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gMTIgYnl0ZXMgcmVxdWlyZWQ6IHVwIHRvIDEwIGJ5dGVzIGluIG1fY0J1ZmZlciBwbHVz
IHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBsZWFkaW5nICcmJyBhbmQgdHJhaWxpbmcgJzsn
Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKDEyKTsKLSAgICAgICAgICAgICAgICAg
ICAgKmRlc3QrKyA9ICcmJzsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNCdWZmZXJQb3M7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbaV0g
PSBtX2NCdWZmZXJbaV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gY0J1ZmZlclBvczsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCpzcmMgPT0gJzsnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAqZGVzdCsrID0gJzsnOwotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFu
Y2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyAxMSBieXRlcyBy
ZXF1aXJlZDogdXAgdG8gMTAgYnl0ZXMgaW4gbV9jQnVmZmVyIHBsdXMgdGhlCi0gICAgICAgICAg
ICAgICAgLy8gbGVhZGluZyAnJicKLSAgICAgICAgICAgICAgICBjaGVja0J1ZmZlcigxMSk7Ci0g
ICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBzZXF1ZW5jZSwgYWRkIGl0IHRvIHRoZSBidWZm
ZXIgYXMgcGxhaW50ZXh0Ci0gICAgICAgICAgICAgICAgKmRlc3QrKyA9ICcmJzsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY0J1ZmZlclBvczsgaSsrKQotICAgICAg
ICAgICAgICAgICAgICBkZXN0W2ldID0gbV9jQnVmZmVyW2ldOwotICAgICAgICAgICAgICAgIGRl
c3QgKz0gY0J1ZmZlclBvczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdGUuc2V0
RW50aXR5U3RhdGUoTm9FbnRpdHkpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRlOwotfQotCi1IVE1MRG9jdW1lbnRQYXJzZXI6
OlN0YXRlIEhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N0eXBlKFNlZ21lbnRlZFN0cmluZyYg
c3JjLCBTdGF0ZSBzdGF0ZSkKLXsKLSAgICBBU1NFUlQoc3RhdGUuaW5Eb2N0eXBlKCkpOwotICAg
IHdoaWxlICghc3JjLmlzRW1wdHkoKSAmJiBzdGF0ZS5pbkRvY3R5cGUoKSkgewotICAgICAgICBV
Q2hhciBjID0gKnNyYzsKLSAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBjID09ICdccicgfHwg
YyA9PSAnXG4nIHx8IGMgPT0gJ1x0JyB8fCBjID09ICcgJzsKLSAgICAgICAgc3dpdGNoIChtX2Rv
Y3R5cGVUb2tlbi5zdGF0ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIERvY3R5cGVCZWdpbjogewot
ICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVCZWZvcmVOYW1l
KTsKLSAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChp
blZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tl
bi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBEb2N0eXBlQmVmb3JlTmFt
ZTogewotICAgICAgICAgICAgICAgIGlmIChjID09ICc+JykgewotICAgICAgICAgICAgICAgICAg
ICAvLyBNYWxmb3JtZWQuICBKdXN0IGV4aXQuCi0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZh
bmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0
eXBlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9rZW4oKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBz
cmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3
U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9z
b3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlTmFtZSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIERvY3R5cGVOYW1lOiB7
Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFZhbGlkIGRvY3R5cGUuIEVtaXQgaXQuCi0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNl
UGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBl
KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RvY3R5cGVUb2tlbigpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fZG9jdHlwZVNlYXJjaENvdW50ID0gMDsgLy8gVXNlZCBub3cgdG8gc2NhbiBmb3IgUFVC
TElDCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlY29uZGFyeVNlYXJjaENvdW50ID0g
MDsgLy8gVXNlZCBub3cgdG8gc2NhbiBmb3IgU1lTVEVNCi0gICAgICAgICAgICAgICAgICAgIG1f
ZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVBZnRlck5hbWUpOwotICAgICAgICAgICAgICAg
ICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9r
ZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9kb2N0eXBlVG9rZW4ubV9uYW1lLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9j
dHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIERvY3R5cGVB
ZnRlck5hbWU6IHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnPicpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVmFsaWQgZG9jdHlwZS4gRW1pdCBpdC4KLSAgICAgICAgICAgICAgICAgICAg
c3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
ZXRJbkRvY3R5cGUoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRv
a2VuKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNXaGl0ZXNwYWNlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcihjKSA9PSBwdWJsaWNTdGFydFttX2RvY3R5cGVTZWFy
Y2hDb3VudF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENvdW50
Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9kb2N0eXBlU2VhcmNoQ291bnQgPT0g
NikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCAnUFVCTElDJyBzZXF1ZW5j
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERv
Y3R5cGVCZWZvcmVQdWJsaWNJRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9k
b2N0eXBlU2VhcmNoQ291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5
cGVTZWFyY2hDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tl
bi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHRvQVNDSUlMb3dlcihjKSA9PSBzeXN0ZW1TdGFydFttX2RvY3R5cGVTZWNvbmRhcnlTZWFyY2hD
b3VudF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlY29uZGFyeVNlYXJj
aENvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9kb2N0eXBlU2Vjb25kYXJ5
U2VhcmNoQ291bnQgPT0gNikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCAn
U1lTVEVNJyBzZXF1ZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRv
a2VuLnNldFN0YXRlKERvY3R5cGVCZWZvcmVTeXN0ZW1JRCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWNvbmRhcnlTZWFy
Y2hDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRT
dGF0ZShEb2N0eXBlQm9ndXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsgLy8gV2hp
dGVzcGFjZSBrZWVwcyB1cyBpbiB0aGUgYWZ0ZXIgbmFtZSBzdGF0ZS4KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIERvY3R5
cGVCZWZvcmVQdWJsaWNJRDogewotICAgICAgICAgICAgICAgIGlmIChjID09ICdcIicgfHwgYyA9
PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRxdW90ZSA9IGMgPT0gJ1wiJyA/IERvdWJs
ZVF1b3RlIDogU2luZ2xlUXVvdGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2Vu
LnNldFN0YXRlKERvY3R5cGVQdWJsaWNJRCk7Ci0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZh
bmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJj
ZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNl
LmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJz4nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyZWQgYm9ndXMuICBEb24ndCBwcm9jZXNzIHRoZSBk
b2N0eXBlLgotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxzZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
c1doaXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVt
YmVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4u
c2V0U3RhdGUoRG9jdHlwZUJvZ3VzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgRG9jdHlwZVB1YmxpY0lEOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKChjID09ICdcIicgJiYgdHF1b3RlID09IERvdWJsZVF1b3RlKSB8fCAoYyA9PSAnXCcn
ICYmIHRxdW90ZSA9PSBTaW5nbGVRdW90ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFk
dmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tl
bi5zZXRTdGF0ZShEb2N0eXBlQWZ0ZXJQdWJsaWNJRCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVU
b2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09
ICc+JykgewotICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXJlZCBib2d1cy4gIERvbid0
IHByb2Nlc3MgdGhlIGRvY3R5cGUuCi0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFz
dE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZh
bHNlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9rZW4oKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3B1YmxpY0lE
LmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVy
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIERvY3R5cGVBZnRlclB1YmxpY0lEOgotICAgICAgICAgICAgICAgIGlmIChj
ID09ICdcIicgfHwgYyA9PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRxdW90ZSA9IGMg
PT0gJ1wiJyA/IERvdWJsZVF1b3RlIDogU2luZ2xlUXVvdGU7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVTeXN0ZW1JRCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlw
ZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMg
PT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFZhbGlkIGRvY3R5cGUuIEVtaXQgaXQg
bm93LgotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxzZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzV2hpdGVzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xp
bmVOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMp
OwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVU
b2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBEb2N0eXBlQmVmb3JlU3lzdGVtSUQ6Ci0gICAgICAgICAgICAgICAgaWYg
KGMgPT0gJ1wiJyB8fCBjID09ICdcJycpIHsKLSAgICAgICAgICAgICAgICAgICAgdHF1b3RlID0g
YyA9PSAnXCInID8gRG91YmxlUXVvdGUgOiBTaW5nbGVRdW90ZTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZVN5c3RlbUlEKTsKLSAgICAgICAgICAg
ICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0
eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
YyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXJlZCBib2d1cy4gIERv
bid0IHByb2Nlc3MgdGhlIGRvY3R5cGUuCi0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNl
UGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBl
KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZSkgewotICAg
ICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9n
dXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb2N0eXBlU3lz
dGVtSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKChjID09ICdcIicgJiYgdHF1b3RlID09IERvdWJs
ZVF1b3RlKSB8fCAoYyA9PSAnXCcnICYmIHRxdW90ZSA9PSBTaW5nbGVRdW90ZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAg
ICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQWZ0ZXJTeXN0ZW1JRCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChjID09ICc+JykgewotICAgICAgICAgICAgICAgICAgICAgLy8gQ29u
c2lkZXJlZCBib2d1cy4gIERvbid0IHByb2Nlc3MgdGhlIGRvY3R5cGUuCi0gICAgICAgICAgICAg
ICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmll
d1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2Rv
Y3R5cGVUb2tlbi5tX3N5c3RlbUlELmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICAgICAgc3Jj
LmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1Nv
dXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291
cmNlLmFwcGVuZChjKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIERvY3R5cGVBZnRlclN5c3RlbUlEOgotICAgICAgICAgICAgICAg
IGlmIChjID09ICc+JykgewotICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZCBkb2N0eXBlLiBF
bWl0IGl0IG5vdy4KLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGlu
ZSgpOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJbkRvY3R5cGUoZmFsc2UpOwotICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChpc1doaXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFu
Y2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1v
ZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFw
cGVuZChjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9k
b2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZUJvZ3VzKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRG9jdHlwZUJvZ3VzOgotICAgICAgICAgICAgICAgIGlmIChj
ID09ICc+JykgewotICAgICAgICAgICAgICAgICAgICAvLyBEb25lIHdpdGggdGhlIGJvZ3VzIGRv
Y3R5cGUuCi0gICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc0RvY3R5cGVUb2tlbigpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7IC8vIEp1c3Qga2VlcCBz
Y2FubmluZyBmb3IgJz4nCi0gICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBl
bmQoYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gc3RhdGU7Ci19Ci0KLUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRNTERv
Y3VtZW50UGFyc2VyOjpwYXJzZVRhZyhTZWdtZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUp
Ci17Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYXNFbnRpdHlTdGF0ZSgpKTsKLQotICAgIHVuc2lnbmVk
IGNCdWZmZXJQb3MgPSBtX2NCdWZmZXJQb3M7Ci0KLSAgICBib29sIGxhc3RJc1NsYXNoID0gZmFs
c2U7Ci0KLSAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2hlY2tCdWZmZXIo
KTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZS50YWdTdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9U
YWc6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fY0J1ZmZlclBvcyA9IGNCdWZmZXJQb3M7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUYWdOYW1l
OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoQ291bnQgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCpzcmMgPT0gY29tbWVudFN0YXJ0W3NlYXJjaENvdW50XSkgewotICAgICAg
ICAgICAgICAgICAgICBzZWFyY2hDb3VudCsrOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2Vh
cmNoQ291bnQgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENv
dW50Kys7IC8vIEEgJyEnIGlzIGFsc28gcGFydCBvZiBhIGRvY3R5cGUsIHNvIHdlIGFyZSBtb3Zp
bmcgdGhyb3VnaCB0aGF0IHN0aWxsIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENvdW50ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHNlYXJjaENvdW50ID09IDQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZvdW5kICc8IS0tJyBzZXF1ZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAg
c3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9k
ZXN0ID0gbV9idWZmZXI7IC8vIGlnbm9yZSB0aGUgcHJldmlvdXMgcGFydCBvZiB0aGlzIHRhZwot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KHRydWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoTm9UYWcpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGaXggYnVnIDM0MzAyIGF0IGtkZS5idWdzLm9yZy4gIEdvIGFoZWFk
IGFuZCB0cmVhdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gPCEtLT4gYXMgYSB2YWxpZCBj
b21tZW50LCBzaW5jZSBib3RoIG1vemlsbGEgYW5kIElFIG9uIHdpbmRvd3MKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNhbiBoYW5kbGUgdGhpcyBjYXNlLiAgT25seSBkbyB0aGlzIGluIHF1
aXJrcyBtb2RlLiAtZHdoCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNyYy5pc0VtcHR5
KCkgJiYgKnNyYyA9PSAnPicgJiYgbV9kb2MtPmluQ29tcGF0TW9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzcmMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvcysrXSA9ICpzcmM7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBw
YXJzZUNvbW1lbnQoc3JjLCBzdGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY0J1
ZmZlclBvcyA9IGNCdWZmZXJQb3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGU7IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gKnNyYzsKLSAgICAgICAg
ICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
c2VhcmNoQ291bnQgPSAwOyAvLyBTdG9wIGxvb2tpbmcgZm9yICc8IS0tJyBzZXF1ZW5jZQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9kb2N0eXBlU2VhcmNoQ291bnQgPiAwKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcigqc3JjKSA9PSBkb2N0eXBlU3RhcnRb
bV9kb2N0eXBlU2VhcmNoQ291bnRdKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNl
YXJjaENvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytd
ID0gKnNyYzsKLSAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAobV9kb2N0eXBlU2VhcmNoQ291bnQgPT0gOSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgJzwhRE9DVFlQRScgc2VxdWVuY2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZSh0cnVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKE5vVGFnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChtX2NCdWZmZXIsIGNCdWZmZXJQb3MpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZURvY3R5cGUoc3JjLCBzdGF0ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVyUG9zOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICBtX2RvY3R5cGVTZWFyY2hDb3VudCA9IDA7IC8vIFN0b3AgbG9va2luZyBm
b3IgJzwhRE9DVFlQRScgc2VxdWVuY2UKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9v
bCBmaW5pc2ggPSBmYWxzZTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBsbCA9IG1pbihzcmMu
bGVuZ3RoKCksIENCVUZMRU4gLSBjQnVmZmVyUG9zKTsKLSAgICAgICAgICAgIHdoaWxlIChsbC0t
KSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9ICpzcmM7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlzQVNDSUlTcGFjZShjdXJjaGFyKSB8fCBjdXJjaGFyID09ICc+JyB8fCBjdXJjaGFy
ID09ICc8JykgewotICAgICAgICAgICAgICAgICAgICBmaW5pc2ggPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyB0b2xvd2VyKCkgc2hvd3MgdXAgb24gcHJvZmlsZXMuIFRoaXMgaXMgZmFzdGVyIQotICAgICAg
ICAgICAgICAgIGlmIChjdXJjaGFyID49ICdBJyAmJiBjdXJjaGFyIDw9ICdaJyAmJiAhaW5WaWV3
U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvcysr
XSA9IGN1cmNoYXIgKyAoJ2EnIC0gJ0EnKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY3VyY2hhcjsKLSAgICAgICAg
ICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIERpc2FkdmFudGFnZTogd2UgYWRkIHRoZSBwb3NzaWJsZSByZXN0IG9mIHRo
ZSB0YWcKLSAgICAgICAgICAgIC8vIGFzIGF0dHJpYnV0ZSBuYW1lcy4gIyMjIGp1ZGdlIGlmIHRo
aXMgY2F1c2VzIHByb2JsZW1zCi0gICAgICAgICAgICBpZiAoZmluaXNoIHx8IENCVUZMRU4gPT0g
Y0J1ZmZlclBvcykgewotICAgICAgICAgICAgICAgIGJvb2wgYmVnaW5UYWc7Ci0gICAgICAgICAg
ICAgICAgVUNoYXIqIHB0ciA9IG1fY0J1ZmZlcjsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgbGVuID0gY0J1ZmZlclBvczsKLSAgICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBv
c10gPSAnXDAnOwotICAgICAgICAgICAgICAgIGlmICgoY0J1ZmZlclBvcyA+IDApICYmICgqcHRy
ID09ICcvJykpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW5kIFRhZwotICAgICAgICAgICAg
ICAgICAgICBiZWdpblRhZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBwdHIrKzsKLSAg
ICAgICAgICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgVGFnCi0gICAgICAgICAgICAg
ICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGUg
LyBpbiBmYWtlIHhtbCB0YWdzIGxpa2UgPGJyLz4uICBXZSB0cmltIG9mZiB0aGUgIi8iIHNvIHRo
YXQgd2UnbGwgZ2V0ICJiciIgYXMgdGhlIHRhZyBuYW1lIGFuZCBub3QgImJyLyIuCi0gICAgICAg
ICAgICAgICAgaWYgKGxlbiA+IDEgJiYgcHRyW2xlbi0xXSA9PSAnLycgJiYgIWluVmlld1NvdXJj
ZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcHRyWy0tbGVuXSA9ICdcMCc7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFueSBpbnZhbGlkIC8gdGhh
dCBtaWdodCBoYXZlIGZvbGxvd2VkIHRoZSBuYW1lKSwgbWFrZSB0aGUgdGFnLgotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBGaXJlRm94IGFuZCBXaW5JRSB0dXJuICFmb28gbm9kZXMgaW50byBj
b21tZW50cywgd2UgaWdub3JlIGNvbW1lbnRzLiAoZmFzdC9wYXJzZXIvdGFnLXdpdGgtZXhjbGFt
YXRpb24tcG9pbnQuaHRtbCkKLSAgICAgICAgICAgICAgICBpZiAocHRyWzBdICE9ICchJyB8fCBp
blZpZXdTb3VyY2VNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4u
dGFnTmFtZSA9IEF0b21pY1N0cmluZyhwdHIpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRUb2tlbi5iZWdpblRhZyA9IGJlZ2luVGFnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRUYWdT
dGF0ZShTZWFyY2hBdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgIGNCdWZmZXJQb3MgPSAwOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBTZWFyY2hBdHRyaWJ1dGU6Ci0gICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKLSAgICAgICAgICAgICAgICAv
LyBJbiB0aGlzIG1vZGUganVzdCBpZ25vcmUgYW55IHF1b3RlcyB3ZSBlbmNvdW50ZXIgYW5kIHRy
ZWF0IHRoZW0gbGlrZSBzcGFjZXMuCi0gICAgICAgICAgICAgICAgaWYgKCFpc0FTQ0lJU3BhY2Uo
Y3VyY2hhcikgJiYgY3VyY2hhciAhPSAnXCcnICYmIGN1cmNoYXIgIT0gJyInKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjdXJjaGFyID09ICc8JyB8fCBjdXJjaGFyID09ICc+JykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEVuZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0
YXRlKEF0dHJpYnV0ZU5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGNCdWZmZXJQb3MgPSAw
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoY3VyY2hhcik7Ci0gICAgICAgICAgICAgICAg
c3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEF0dHJpYnV0ZU5hbWU6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuY2xlYXIoKTsKLSAgICAgICAgICAgIGludCBsbCA9
IG1pbihzcmMubGVuZ3RoKCksIENCVUZMRU4gLSBjQnVmZmVyUG9zKTsKLSAgICAgICAgICAgIHdo
aWxlIChsbC0tKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9ICpzcmM7Ci0gICAg
ICAgICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgIi8iIHdoZW4gc2Nhbm5pbmcgYW4gYXR0
cmlidXRlIG5hbWUsIHRyZWF0IGl0IGFzIGEgZGVsaW1pdGVyLiAgVGhpcyBhbGxvd3MgdGhlCi0g
ICAgICAgICAgICAgICAgLy8gY2FzZXMgbGlrZSA8aW5wdXQgdHlwZT1jaGVja2JveCBjaGVja2Vk
Lz4gdG8gd29yayAoYW5kIGFjY29tbW9kYXRlcyBYTUwtc3R5bGUgc3ludGF4IGFzIHBlciBIVE1M
NSkuCi0gICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPD0gJz4nICYmIChjdXJjaGFyID49ICc8
JyB8fCBpc0FTQ0lJU3BhY2UoY3VyY2hhcikgfHwgY3VyY2hhciA9PSAnLycpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zXSA9ICdcMCc7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fYXR0ck5hbWUgPSBBdG9taWNTdHJpbmcobV9jQnVmZmVyKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9kZXN0ID0gbV9idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICptX2Rlc3Qr
KyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEVxdWFs
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdTb3VyY2VDaGFyKCdhJyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIHRvbG93ZXIoKSBzaG93cyB1cCBvbiBwcm9maWxlcy4gVGhpcyBpcyBmYXN0ZXIh
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNoYXIgPD0gJ1onICYm
ICFpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVm
ZmVyUG9zKytdID0gY3VyY2hhciArICgnYScgLSAnQScpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjdXJjaGFyOwot
Ci0gICAgICAgICAgICAgICAgbV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5hcHBlbmQoY3VyY2hh
cik7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChjQnVmZmVyUG9zID09IENCVUZMRU4pIHsKLSAgICAgICAg
ICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvc10gPSAnXDAnOwotICAgICAgICAgICAgICAgIG1f
YXR0ck5hbWUgPSBBdG9taWNTdHJpbmcobV9jQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBtX2Rl
c3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAqbV9kZXN0KysgPSAwOwotICAgICAgICAg
ICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEVxdWFsKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tl
bi5hZGRWaWV3U291cmNlQ2hhcignYScpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTZWFyY2hFcXVhbDoKLSAgICAgICAgICAgIHdo
aWxlICghc3JjLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFVDaGFyIGN1cmNoYXIgPSAq
c3JjOwotCi0gICAgICAgICAgICAgICAgaWYgKGxhc3RJc1NsYXNoICYmIGN1cmNoYXIgPT0gJz4n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBxdWlyayAod2l0aCBhIGxvbmcg
c2FkIGhpc3RvcnkpLiAgV2UgaGF2ZSB0byBkbyB0aGlzCi0gICAgICAgICAgICAgICAgICAgIC8v
IHNpbmNlIHdpZGdldHMgZG8gPHNjcmlwdCBzcmM9ImZvby5qcyIvPiBhbmQgZXhwZWN0IHRoZSB0
YWcgdG8gY2xvc2UuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRUb2tlbi50YWdO
YW1lID09IHNjcmlwdFRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2Vu
LnNlbGZDbG9zaW5nVGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9r
ZW4uYnJva2VuWE1MU3R5bGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIEluIHRoaXMgbW9kZSBqdXN0IGlnbm9yZSBhbnkgcXVvdGVzIG9yIHNsYXNoZXMg
d2UgZW5jb3VudGVyIGFuZCB0cmVhdCB0aGVtIGxpa2Ugc3BhY2VzLgotICAgICAgICAgICAgICAg
IGlmICghaXNBU0NJSVNwYWNlKGN1cmNoYXIpICYmIGN1cmNoYXIgIT0gJ1wnJyAmJiBjdXJjaGFy
ICE9ICciJyAmJiBjdXJjaGFyICE9ICcvJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3Vy
Y2hhciA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRl
KFNlYXJjaFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VN
b2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmll
d1NvdXJjZUNoYXIoY3VyY2hhcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Jhd0F0dHJp
YnV0ZUJlZm9yZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0dHJpYnV0ZSht
X2F0dHJOYW1lLCBlbXB0eUF0b20sIGluVmlld1NvdXJjZU1vZGUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0SXNTbGFzaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGxh
c3RJc1NsYXNoID0gY3VyY2hhciA9PSAnLyc7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5WaWV3
U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRWaWV3
U291cmNlQ2hhcihjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICBtX3Jhd0F0dHJpYnV0ZUJlZm9y
ZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xp
bmVOdW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgU2VhcmNoVmFsdWU6Ci0gICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKLSAgICAgICAgICAgICAgICBpZiAo
IWlzQVNDSUlTcGFjZShjdXJjaGFyKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3VyY2hh
ciA9PSAnXCcnIHx8IGN1cmNoYXIgPT0gJ1wiJykgewotICAgICAgICAgICAgICAgICAgICAgICAg
dHF1b3RlID0gY3VyY2hhciA9PSAnXCInID8gRG91YmxlUXVvdGUgOiBTaW5nbGVRdW90ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFF1b3RlZFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoY3VyY2hh
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlLmFw
cGVuZChjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5v
bk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zZXRUYWdTdGF0ZShWYWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3Vy
Y2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdTb3Vy
Y2VDaGFyKGN1cmNoYXIpOwotICAgICAgICAgICAgICAgIG1fcmF3QXR0cmlidXRlQmVmb3JlVmFs
dWUuYXBwZW5kKGN1cmNoYXIpOwotICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51
bWJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBR
dW90ZWRWYWx1ZToKLSAgICAgICAgICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgIGNoZWNrQnVmZmVyKCk7Ci0KLSAgICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFy
ID0gKnNyYzsKLSAgICAgICAgICAgICAgICBpZiAoY3VyY2hhciA8PSAnPicgJiYgIXNyYy5lc2Nh
cGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPT0gJz4nICYmIG1fYXR0
ck5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgYSBj
YXNlIGxpa2UgPGltZyAnPi4gIEp1c3QgZ28gYWhlYWQgYW5kIGJlIHdpbGxpbmcKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRvIGNsb3NlIHRoZSB3aG9sZSB0YWcuICBEb24ndCBjb25zdW1l
IHRoZSBjaGFyYWN0ZXIgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGdvIGJh
Y2sgaW50byBTZWFyY2hFbmQgd2hpbGUgaWdub3JpbmcgdGhlIHdob2xlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBO
b3RlIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBub3QgYSB2ZXJ5IGdvb2Qgc29sdXRpb24uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJdCBkb2Vzbid0IGhhbmRsZSB0aGUgZ2VuZXJhbCBjYXNl
IG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1bm1hdGNoZWQgcXVvdGVzIGFtb25nIGF0
dHJpYnV0ZXMgdGhhdCBoYXZlIG5hbWVzLiAtZHdoCi0gICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAobV9kZXN0ID4gbV9idWZmZXIgKyAxICYmIChtX2Rlc3RbLTFdID09ICdcbicgfHwgbV9k
ZXN0Wy0xXSA9PSAnXHInKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rlc3QtLTsg
Ly8gcmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBBdG9t
aWNTdHJpbmcgYXR0cmlidXRlVmFsdWUobV9idWZmZXIgKyAxLCBtX2Rlc3QgLSBtX2J1ZmZlciAt
IDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZS5jb250YWlu
cygnLycpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXR0ck5hbWUgPSBhdHRyaWJ1
dGVWYWx1ZTsgLy8gSnVzdCBtYWtlIHRoZSBuYW1lL3ZhbHVlIG1hdGNoLiAoRklYTUU6IElzIHRo
aXMgc29tZSBXaW5JRSBxdWlyaz8pCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRU
b2tlbi5hZGRBdHRyaWJ1dGUobV9hdHRyTmFtZSwgYXR0cmlidXRlVmFsdWUsIGluVmlld1NvdXJj
ZU1vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdTb3Vy
Y2VDaGFyKCd4Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRUYWdTdGF0ZShT
ZWFyY2hBdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9kZXN0ID0gbV9idWZm
ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VyY2hhciA9PSAnJicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlID0gcGFyc2VFbnRpdHkoc3JjLCBtX2Rlc3QsIHN0YXRlLCBjQnVmZmVyUG9zLCB0cnVlLCB0
cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCh0cXVvdGUgPT0gU2luZ2xlUXVvdGUgJiYg
Y3VyY2hhciA9PSAnXCcnKSB8fCAodHF1b3RlID09IERvdWJsZVF1b3RlICYmIGN1cmNoYXIgPT0g
J1wiJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgPGlucHV0IHR5cGU9aGlk
ZGVuPiByZWx5IG9uIHRyYWlsaW5nIHNwYWNlcy4gYXJnaAotICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKG1fZGVzdCA+IG1fYnVmZmVyICsgMSAmJiAobV9kZXN0Wy0xXSA9PSAnXG4nIHx8
IG1fZGVzdFstMV0gPT0gJ1xyJykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZXN0
LS07IC8vIHJlbW92ZSB0cmFpbGluZyBuZXdsaW5lcwotICAgICAgICAgICAgICAgICAgICAgICAg
QXRvbWljU3RyaW5nIGF0dHJpYnV0ZVZhbHVlKG1fYnVmZmVyICsgMSwgbV9kZXN0IC0gbV9idWZm
ZXIgLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2F0dHJOYW1lLmlzRW1wdHko
KSAmJiAhYXR0cmlidXRlVmFsdWUuY29udGFpbnMoJy8nKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYXR0ck5hbWUgPSBhdHRyaWJ1dGVWYWx1ZTsgLy8gTWFrZSB0aGUgbmFtZSBt
YXRjaCB0aGUgdmFsdWUuIChGSVhNRTogSXMgdGhpcyBhIFdpbklFIHF1aXJrPykKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRWaWV3U291cmNlQ2hhcigneCcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpblZpZXdTb3VyY2VNb2RlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJj
ZUNoYXIoJ3YnKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudFRva2Vu
LmJlZ2luVGFnICYmIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPT0gc2NyaXB0VGFnICYmICFpblZp
ZXdTb3VyY2VNb2RlKCkgJiYgIW1fdHJlZUNvbnN0cnVjdG9yLT5za2lwTW9kZSgpICYmIG1fYXR0
ck5hbWUgPT0gc3JjQXR0cikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBj
b250ZXh0KG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuZGF0YSgpLCBtX3Jhd0F0dHJpYnV0ZUJl
Zm9yZVZhbHVlLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fWFNT
QXVkaXRvciAmJiAhbV9YU1NBdWRpdG9yLT5jYW5Mb2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3JjKGF0
dHJpYnV0ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
VmFsdWUgPSBibGFua1VSTCgpLnN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRBdHRyaWJ1dGUobV9h
dHRyTmFtZSwgYXR0cmlidXRlVmFsdWUsIGluVmlld1NvdXJjZU1vZGUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0cXVvdGUgPSBOb1F1b3RlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluVmll
d1NvdXJjZU1vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tl
bi5hZGRWaWV3U291cmNlQ2hhcihjdXJjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNy
Yy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgKm1fZGVzdCsrID0gY3VyY2hhcjsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZSht
X2xpbmVOdW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgVmFsdWU6Ci0gICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBjaGVja0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIFVDaGFyIGN1cmNoYXIg
PSAqc3JjOwotICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyIDw9ICc+JyAmJiAhc3JjLmVzY2Fw
ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBFbnRpdGllcwotICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VyY2hhciA9PSAnJicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlID0gcGFyc2VFbnRpdHkoc3JjLCBtX2Rlc3QsIHN0YXRlLCBjQnVmZmVyUG9zLCB0cnVlLCB0
cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vIHF1b3Rlcy4gRXZlcnkgc3BhY2UgbWVhbnMg
ZW5kIG9mIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIC8vICcvJyBkb2VzIG5vdCBkZWxpbWl0
IGluIElFIQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVNwYWNlKGN1cmNoYXIpIHx8
IGN1cmNoYXIgPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcg
YXR0cmlidXRlVmFsdWUobV9idWZmZXIgKyAxLCBtX2Rlc3QgLSBtX2J1ZmZlciAtIDEpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9j
dXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWcgJiYgIWluVmlld1NvdXJjZU1vZGUoKSAm
JiAhbV90cmVlQ29uc3RydWN0b3ItPnNraXBNb2RlKCkgJiYgbV9hdHRyTmFtZSA9PSBzcmNBdHRy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRleHQobV9yYXdBdHRy
aWJ1dGVCZWZvcmVWYWx1ZS5kYXRhKCksIG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuc2l6ZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9YU1NBdWRpdG9yICYmICFtX1hT
U0F1ZGl0b3ItPmNhbkxvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoYXR0cmlidXRlVmFsdWUpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGJsYW5rVVJM
KCkuc3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0dHJpYnV0ZShtX2F0dHJOYW1lLCBhdHRyaWJ1
dGVWYWx1ZSwgaW5WaWV3U291cmNlTW9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoJ3YnKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fZGVzdCA9IG1fYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFn
U3RhdGUoU2VhcmNoQXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgKm1fZGVzdCsrID0gY3VyY2hhcjsKLSAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xp
bmVOdW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgU2VhcmNoRW5kOgotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICBVQ2hhciBjaCA9ICpzcmM7Ci0gICAgICAgICAgICAgICAg
aWYgKGNoID09ICc+JyB8fCBjaCA9PSAnPCcpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFRva2VuLnNlbGZDbG9zaW5nVGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoaW5W
aWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRW
aWV3U291cmNlQ2hhcihjaCk7Ci0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVt
YmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcmMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzZWFyY2hDb3VudCA9IDA7IC8vIFN0
b3AgbG9va2luZyBmb3IgJzwhLS0nIHNlcXVlbmNlCi0gICAgICAgICAgICBzdGF0ZS5zZXRUYWdT
dGF0ZShOb1RhZyk7Ci0gICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwotCi0gICAgICAgICAg
ICBpZiAoKnNyYyAhPSAnPCcpCi0gICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVt
YmVyKTsKLQotICAgICAgICAgICAgaWYgKG1fY3VycmVudFRva2VuLnRhZ05hbWUgPT0gbnVsbEF0
b20pIHsgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCi0gICAgICAgICAgICAgICAgbV9jQnVmZmVy
UG9zID0gY0J1ZmZlclBvczsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1lID0gbV9jdXJyZW50VG9r
ZW4udGFnTmFtZTsKLQotICAgICAgICAgICAgLy8gSGFuZGxlIDxzY3JpcHQgc3JjPSJmb28iLz4g
bGlrZSBNb3ppbGxhL09wZXJhLiBXZSBoYXZlIHRvIGRvIHRoaXMgbm93IGZvciBEYXNoYm9hcmQK
LSAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICBib29sIGlzU2VsZkNs
b3NpbmdTY3JpcHQgPSBtX2N1cnJlbnRUb2tlbi5zZWxmQ2xvc2luZ1RhZyAmJiBtX2N1cnJlbnRU
b2tlbi5iZWdpblRhZyAmJiBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZzsKLSAg
ICAgICAgICAgIGJvb2wgYmVnaW5UYWcgPSAhbV9jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmdUYWcg
JiYgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWc7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50VG9r
ZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWcgJiYgIWlu
Vmlld1NvdXJjZU1vZGUoKSAmJiAhbV90cmVlQ29uc3RydWN0b3ItPnNraXBNb2RlKCkpIHsKLSAg
ICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGEgPSAwOwotICAgICAgICAgICAgICAgIG1fc2NyaXB0
VGFnU3JjQXR0clZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgbV9zY3JpcHRUYWdD
aGFyc2V0QXR0clZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY3VycmVu
dFRva2VuLmF0dHJzICYmICFtX2ZyYWdtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
X2RvYy0+ZnJhbWUoKSAmJiBtX2RvYy0+ZnJhbWUoKS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3Jp
cHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChhID0gbV9jdXJyZW50VG9rZW4uYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oc3JjQXR0cikp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0VGFnU3JjQXR0clZhbHVlID0g
bV9kb2MtPmNvbXBsZXRlVVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChhLT52YWx1ZSgpKSkuc3RyaW5n
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuID0gcHJvY2Vzc1Rva2VuKCk7Ci0gICAg
ICAgICAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVyUG9zOwotICAgICAgICAgICAgaWYgKG4gfHwg
aW5WaWV3U291cmNlTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgU3RhdGUgc2F2ZWRTdGF0ZSA9
IHN0YXRlOwotICAgICAgICAgICAgICAgIFNlZ21lbnRlZFN0cmluZyBzYXZlZFNyYyA9IHNyYzsK
LSAgICAgICAgICAgICAgICBsb25nIHNhdmVkTGluZW5vID0gbV9saW5lTnVtYmVyOwotICAgICAg
ICAgICAgICAgIGlmICgodGFnTmFtZSA9PSBwcmVUYWcgfHwgdGFnTmFtZSA9PSBsaXN0aW5nVGFn
KSAmJiAhaW5WaWV3U291cmNlTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiZWdp
blRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldERpc2NhcmRMRih0cnVlKTsg
Ly8gRGlzY2FyZCB0aGUgZmlyc3QgTEYgYWZ0ZXIgd2Ugb3BlbiBhIHByZS4KLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gc2NyaXB0VGFnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghbV9zY3JpcHROb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zY3JpcHRO
b2RlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MU2NyaXB0RWxlbWVudD4obik7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX3NjcmlwdE5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X3NjcmlwdFRhZ0NoYXJzZXRBdHRyVmFsdWUgPSBtX3NjcmlwdE5vZGUtPnNjcmlwdENoYXJzZXQo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3NlYXJjaFN0b3BwZXIgPSBzY3JpcHRFbmQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA4OwotICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc2V0SW5TY3JpcHQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9
IHBhcnNlTm9uSFRNTFRleHQoc3JjLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaXNTZWxmQ2xvc2luZ1NjcmlwdCkgeyAvLyBIYW5kbGUgPHNjcmlwdCBzcmM9ImZvbyIv
PgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5TY3JpcHQodHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHNjcmlwdEhhbmRsZXIoc3RhdGUpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IHN0
eWxlVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyID0gc3R5bGVFbmQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA3OwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc2V0SW5TdHlsZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlID0gcGFyc2VOb25IVE1MVGV4dChzcmMsIHN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSB0ZXh0YXJlYVRhZykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc2VhcmNoU3RvcHBlciA9IHRleHRhcmVhRW5kOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zZWFyY2hTdG9wcGVyTGVuZ3RoID0gMTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zZXRJblRleHRBcmVhKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBwYXJzZU5vbkhUTUxUZXh0KHNyYywgc3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IHRpdGxlVGFnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9z
ZWFyY2hTdG9wcGVyID0gdGl0bGVFbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJj
aFN0b3BwZXJMZW5ndGggPSA3OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5U
aXRsZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcGFyc2VOb25IVE1M
VGV4dChzcmMsIHN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAodGFnTmFtZSA9PSB4bXBUYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGJlZ2luVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXIgPSB4
bXBFbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA1
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5YbXAodHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlTm9uSFRNTFRleHQoc3JjLCBzdGF0ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUg
PT0gaWZyYW1lVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyID0gaWZyYW1lRW5kOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyTGVuZ3RoID0gODsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnNldEluSUZyYW1lKHRydWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxUZXh0KHNyYywgc3RhdGUpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzcmMuaXNF
bXB0eSgpICYmIChzdGF0ZS5pblRpdGxlKCkgfHwgaW5WaWV3U291cmNlTW9kZSgpKSAmJiAhc3Rh
dGUuaW5Db21tZW50KCkgJiYgIShzdGF0ZS5pblNjcmlwdCgpICYmIG1fY3VycmVudFNjcmlwdFRh
Z1N0YXJ0TGluZU51bWJlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UganVzdCBhdGUg
dGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50IGFzIHRoZSAjdGV4dCBub2RlIHVuZGVyIHRoZSBzcGVj
aWFsIHRhZyEKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHN0YXRlIHRoZW4gcmV0
b2tlbml6ZSB3aXRob3V0IHNwZWNpYWwgaGFuZGxpbmcuCi0gICAgICAgICAgICAgICAgICAgIC8v
IExldCB0aGUgcGFyc2VyIGNsZWFuIHVwIHRoZSBtaXNzaW5nIGNsb3NlIHRhZy4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0LCBiZWNhdXNlIHNyYy5pc0Vt
cHR5KCkgZG9lc24ndCBtZWFuIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBl
bmQgb2YgdGhlIGRvY3VtZW50IHVubGVzcyBtX25vTW9yZURhdGEgaXMgYWxzbyB0cnVlLiBXZSBu
ZWVkCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGRldGVjdCB0aGlzIGNhc2UgZWxzZXdoZXJl
LCBhbmQgc2F2ZSB0aGUgc3RhdGUgc29tZXdoZXJlIG90aGVyCi0gICAgICAgICAgICAgICAgICAg
IC8vIHRoYW4gYSBsb2NhbCB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBz
YXZlZFN0YXRlOwotICAgICAgICAgICAgICAgICAgICBzcmMgPSBzYXZlZFNyYzsKLSAgICAgICAg
ICAgICAgICAgICAgbV9saW5lTnVtYmVyID0gc2F2ZWRMaW5lbm87Ci0gICAgICAgICAgICAgICAg
ICAgIG1fc2NyaXB0Q29kZVNpemUgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmICh0YWdOYW1lID09IHBsYWludGV4dFRhZykKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5zZXRJblBsYWluVGV4dChiZWdpblRhZyk7Ci0gICAgICAgICAgICByZXR1cm4g
c3RhdGU7IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQotICAgICAgICB9Ci0gICAgICAgIH0gLy8g
ZW5kIHN3aXRjaAotICAgIH0KLSAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVyUG9zOwotICAgIHJl
dHVybiBzdGF0ZTsKLX0KLQotaW5saW5lIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpjb250aW51
ZVByb2Nlc3NpbmcoaW50JiBwcm9jZXNzZWRDb3VudCwgZG91YmxlIHN0YXJ0VGltZSwgU3RhdGUg
JnN0YXRlKQotewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYmUgY2hlY2tpbmcgZWxhcHNlZCB0
aW1lIHdpdGggZXZlcnkgY2hhcmFjdGVyLCBzbyB3ZSBvbmx5IGNoZWNrIGFmdGVyIHdlJ3ZlCi0g
ICAgLy8gcHJvY2Vzc2VkIGEgY2VydGFpbiBudW1iZXIgb2YgY2hhcmFjdGVycy4KLSAgICBib29s
IGFsbG93ZWRZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQoKTsKLSAgICBzdGF0ZS5zZXRBbGxvd1lp
ZWxkKGZhbHNlKTsKLSAgICBpZiAoIXN0YXRlLmxvYWRpbmdFeHRTY3JpcHQoKSAmJiAhc3RhdGUu
Zm9yY2VTeW5jaHJvbm91cygpICYmICFtX2V4ZWN1dGluZ1NjcmlwdCAmJiAocHJvY2Vzc2VkQ291
bnQgPiBtX3Rva2VuaXplckNodW5rU2l6ZSB8fCBhbGxvd2VkWWllbGQpKSB7Ci0gICAgICAgIHBy
b2Nlc3NlZENvdW50ID0gMDsKLSAgICAgICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWUg
PiBtX3Rva2VuaXplclRpbWVEZWxheSkgewotICAgICAgICAgICAgLyogRklYTUU6IFdlJ2QgbGlr
ZSB0byB5aWVsZCBhZ2dyZXNzaXZlbHkgdG8gZ2l2ZSBzdHlsZXNoZWV0cyB0aGUgb3Bwb3J0dW5p
dHkgdG8KLSAgICAgICAgICAgICAgIGxvYWQsIGJ1dCB0aGlzIGh1cnRzIG92ZXJhbGwgcGVyZm9y
bWFuY2Ugb24gc2xvd2VyIG1hY2hpbmVzLiAgRm9yIG5vdyB0dXJuIHRoaXMKLSAgICAgICAgICAg
ICAgIG9mZi4KLSAgICAgICAgICAgIHx8ICghbV9kb2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgp
ICYmCi0gICAgICAgICAgICAgICAgKG1fZG9jLT5kb2N1bWVudEVsZW1lbnQoKS0+aWQoKSAhPSBJ
RF9IVE1MIHx8IG1fZG9jLT5ib2R5KCkpKSkgeyovCi0gICAgICAgICAgICAvLyBTY2hlZHVsZSB0
aGUgdGltZXIgdG8ga2VlcCBwcm9jZXNzaW5nIGFzIHNvb24gYXMgcG9zc2libGUuCi0gICAgICAg
ICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHByb2Nlc3NlZENvdW50Kys7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLS8vIFR1cm5zIHRoZSBzdGF0ZW1hY2hpbmUgb25lIGNyYW5rIHVzaW5nIHRoZSBw
YXNzZWQgaW4gU3RhdGUgb2JqZWN0LgotLy8gVGhpcyBkb2VzIG5vdCBtb2RpZnkgbV9zdGF0ZSBk
aXJlY3RseSBpbiBvcmRlciB0byBiZSByZWVudHJhbnQuCi1BTFdBWVNfSU5MSU5FIHZvaWQgSFRN
TERvY3VtZW50UGFyc2VyOjphZHZhbmNlKFN0YXRlJiBzdGF0ZSkKLXsKLSAgICAvLyBkbyB3ZSBu
ZWVkIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlcj8KLSAgICBjaGVja0J1ZmZlcigpOwotCi0gICAgVUNo
YXIgY2MgPSAqbV9zcmM7Ci0KLSAgICBib29sIHdhc1NraXBMRiA9IHN0YXRlLnNraXBMRigpOwot
ICAgIGlmICh3YXNTa2lwTEYpCi0gICAgICAgIHN0YXRlLnNldFNraXBMRihmYWxzZSk7Ci0KLSAg
ICBpZiAod2FzU2tpcExGICYmIChjYyA9PSAnXG4nKSkKLSAgICAgICAgbV9zcmMuYWR2YW5jZSgp
OwotICAgIGVsc2UgaWYgKHN0YXRlLm5lZWRzU3BlY2lhbFdyaXRlSGFuZGxpbmcoKSkgewotICAg
ICAgICAvLyBpdCdzIGltcG9ydGFudCB0byBrZWVwIG5lZWRzU3BlY2lhbFdyaXRlSGFuZGxpbmcg
d2l0aCB0aGUgZmxhZ3MgdGhpcyBibG9jayB0ZXN0cwotICAgICAgICBpZiAoc3RhdGUuaGFzRW50
aXR5U3RhdGUoKSkKLSAgICAgICAgICAgIHN0YXRlID0gcGFyc2VFbnRpdHkobV9zcmMsIG1fZGVz
dCwgc3RhdGUsIG1fY0J1ZmZlclBvcywgZmFsc2UsIHN0YXRlLmhhc1RhZ1N0YXRlKCkpOwotICAg
ICAgICBlbHNlIGlmIChzdGF0ZS5pblBsYWluVGV4dCgpKQotICAgICAgICAgICAgc3RhdGUgPSBw
YXJzZVRleHQobV9zcmMsIHN0YXRlKTsKLSAgICAgICAgZWxzZSBpZiAoc3RhdGUuaW5BbnlOb25I
VE1MVGV4dCgpKQotICAgICAgICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxUZXh0KG1fc3JjLCBz
dGF0ZSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0YXRlLmluQ29tbWVudCgpKQotICAgICAgICAgICAg
c3RhdGUgPSBwYXJzZUNvbW1lbnQobV9zcmMsIHN0YXRlKTsKLSAgICAgICAgZWxzZSBpZiAoc3Rh
dGUuaW5Eb2N0eXBlKCkpCi0gICAgICAgICAgICBzdGF0ZSA9IHBhcnNlRG9jdHlwZShtX3NyYywg
c3RhdGUpOwotICAgICAgICBlbHNlIGlmIChzdGF0ZS5pblNlcnZlcigpKQotICAgICAgICAgICAg
c3RhdGUgPSBwYXJzZVNlcnZlcihtX3NyYywgc3RhdGUpOwotICAgICAgICBlbHNlIGlmIChzdGF0
ZS5pblByb2Nlc3NpbmdJbnN0cnVjdGlvbigpKQotICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVBy
b2Nlc3NpbmdJbnN0cnVjdGlvbihtX3NyYywgc3RhdGUpOwotICAgICAgICBlbHNlIGlmIChzdGF0
ZS5oYXNUYWdTdGF0ZSgpKQotICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVRhZyhtX3NyYywgc3Rh
dGUpOwotICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdGFydFRhZygpKSB7Ci0gICAgICAgICAgICBz
dGF0ZS5zZXRTdGFydFRhZyhmYWxzZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoY2MpIHsKLSAg
ICAgICAgICAgIGNhc2UgJy8nOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSAnISc6IHsKLSAgICAgICAgICAgICAgICAvLyA8IS0tIGNvbW1lbnQgLS0+IG9yIDwhRE9D
VFlQRSAuLi4+Ci0gICAgICAgICAgICAgICAgc2VhcmNoQ291bnQgPSAxOyAvLyBMb29rIGZvciAn
PCEtLScgc2VxdWVuY2UgdG8gc3RhcnQgY29tbWVudCBvciAnPCFET0NUWVBFJyBzZXF1ZW5jZSB0
byBzdGFydCBkb2N0eXBlCi0gICAgICAgICAgICAgICAgbV9kb2N0eXBlU2VhcmNoQ291bnQgPSAx
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZSAnPyc6IHsKLSAgICAgICAgICAgICAgICAvLyB4bWwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgot
ICAgICAgICAgICAgICAgIHN0YXRlLnNldEluUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRydWUpOwot
ICAgICAgICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7Ci0gICAgICAgICAgICAgICAgc3RhdGUg
PSBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihtX3NyYywgc3RhdGUpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJyUnOgotICAgICAg
ICAgICAgICAgIGlmICghbV9icm9rZW5TZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
PCUgc2VydmVyIHN0dWZmLCBoYW5kbGUgYXMgY29tbWVudCAlPgotICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zZXRJblNlcnZlcih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgdHF1b3RlID0g
Tm9RdW90ZTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVNlcnZlcihtX3NyYywg
c3RhdGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIC8vIGVsc2UgZmFsbCB0aHJvdWdoCi0gICAgICAgICAgICBkZWZhdWx0
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2MgPj0gJ2EnKSAmJiAoY2MgPD0gJ3onKSkgfHwg
KChjYyA+PSAnQScpICYmIChjYyA8PSAnWicpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBT
dGFydCBvZiBhIFN0YXJ0LVRhZwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEludmFsaWQgdGFnCi0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhcyBp
cwotICAgICAgICAgICAgICAgICAgICAqbV9kZXN0ID0gJzwnOwotICAgICAgICAgICAgICAgICAg
ICBtX2Rlc3QrKzsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07IC8vIGVuZCBjYXNlCi0KLSAgICAgICAg
ICAgIHByb2Nlc3NUb2tlbigpOwotCi0gICAgICAgICAgICBtX2NCdWZmZXJQb3MgPSAwOwotICAg
ICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoVGFnTmFtZSk7Ci0gICAgICAgICAgICBzdGF0ZSA9
IHBhcnNlVGFnKG1fc3JjLCBzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNjID09
ICcmJyAmJiAhbV9zcmMuZXNjYXBlZCgpKSB7Ci0gICAgICAgIG1fc3JjLmFkdmFuY2VQYXN0Tm9u
TmV3bGluZSgpOwotICAgICAgICBzdGF0ZSA9IHBhcnNlRW50aXR5KG1fc3JjLCBtX2Rlc3QsIHN0
YXRlLCBtX2NCdWZmZXJQb3MsIHRydWUsIHN0YXRlLmhhc1RhZ1N0YXRlKCkpOwotICAgIH0gZWxz
ZSBpZiAoY2MgPT0gJzwnICYmICFtX3NyYy5lc2NhcGVkKCkpIHsKLSAgICAgICAgbV9jdXJyZW50
VGFnU3RhcnRMaW5lTnVtYmVyID0gbV9saW5lTnVtYmVyOwotICAgICAgICBtX3NyYy5hZHZhbmNl
UGFzdE5vbk5ld2xpbmUoKTsKLSAgICAgICAgc3RhdGUuc2V0U3RhcnRUYWcodHJ1ZSk7Ci0gICAg
ICAgIHN0YXRlLnNldERpc2NhcmRMRihmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChjYyA9PSAnXG4n
IHx8IGNjID09ICdccicpIHsKLSAgICAgICAgaWYgKHN0YXRlLmRpc2NhcmRMRigpKQotICAgICAg
ICAgICAgLy8gSWdub3JlIHRoaXMgTEYKLSAgICAgICAgICAgIHN0YXRlLnNldERpc2NhcmRMRihm
YWxzZSk7IC8vIFdlIGhhdmUgZGlzY2FyZGVkIDEgTEYKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBQcm9jZXNzIHRoaXMgTEYKLSAgICAgICAgICAgICptX2Rlc3QrKyA9ICdcbic7Ci0g
ICAgICAgICAgICBpZiAoY2MgPT0gJ1xyJyAmJiAhbV9zcmMuZXhjbHVkZUxpbmVOdW1iZXJzKCkp
Ci0gICAgICAgICAgICAgICAgbV9saW5lTnVtYmVyKys7Ci0gICAgICAgIH0KLQotICAgICAgICAv
KiBDaGVjayBmb3IgTVMtRE9TIENSTEYgc2VxdWVuY2UgKi8KLSAgICAgICAgaWYgKGNjID09ICdc
cicpCi0gICAgICAgICAgICBzdGF0ZS5zZXRTa2lwTEYodHJ1ZSk7Ci0gICAgICAgIG1fc3JjLmFk
dmFuY2UobV9saW5lTnVtYmVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0ZS5zZXREaXNj
YXJkTEYoZmFsc2UpOwotICAgICAgICAqbV9kZXN0KysgPSBjYzsKLSAgICAgICAgbV9zcmMuYWR2
YW5jZVBhc3ROb25OZXdsaW5lKCk7Ci0gICAgfQotfQotCi12b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6d2lsbFdyaXRlSFRNTChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQq
IHRpbWVsaW5lQWdlbnQgPSBtX2RvYy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQotICAgICAg
ICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFdyaXRlSFRNTChzb3VyY2UubGVuZ3RoKCksIG1fbGlu
ZU51bWJlcik7Ci0gICAgI2VuZGlmCi19Ci0KLXZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpkaWRX
cml0ZUhUTUwoKQotewotICAgICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBpZiAoSW5z
cGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IG1fZG9jLT5pbnNwZWN0b3JUaW1l
bGluZUFnZW50KCkpCi0gICAgICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRXcml0ZUhUTUwobV9s
aW5lTnVtYmVyKTsKLSAgICAjZW5kaWYKLX0KLQotdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Ondy
aXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc3RyLCBib29sIGFwcGVuZERhdGEpCi17Ci0gICAg
aWYgKCFtX2J1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFyc2VyU3RvcHBl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2VnbWVudGVkU3RyaW5nIHNvdXJjZShzdHIpOwot
ICAgIGlmIChtX2V4ZWN1dGluZ1NjcmlwdCkKLSAgICAgICAgc291cmNlLnNldEV4Y2x1ZGVMaW5l
TnVtYmVycygpOwotCi0gICAgaWYgKChtX2V4ZWN1dGluZ1NjcmlwdCAmJiBhcHBlbmREYXRhKSB8
fCAhbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gZG9uJ3QgcGFyc2U7
IHdlIHdpbGwgZG8gdGhpcyBsYXRlcgotICAgICAgICBpZiAobV9jdXJyZW50UHJlcGVuZGluZ1Ny
YykKLSAgICAgICAgICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMtPmFwcGVuZChzb3VyY2UpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NyYy5hcHBlbmQoc291cmNlKTsK
LSNpZiBQUkVMT0FEX1NDQU5ORVJfRU5BQkxFRAotICAgICAgICAgICAgaWYgKG1fcHJlbG9hZFNj
YW5uZXIgJiYgbV9wcmVsb2FkU2Nhbm5lci0+aW5Qcm9ncmVzcygpICYmIGFwcGVuZERhdGEpCi0g
ICAgICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+d3JpdGUoc291cmNlKTsKLSNlbmRpZgot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBQUkVMT0FEX1NDQU5ORVJf
RU5BQkxFRAotICAgIGlmIChtX3ByZWxvYWRTY2FubmVyICYmIG1fcHJlbG9hZFNjYW5uZXItPmlu
UHJvZ3Jlc3MoKSAmJiBhcHBlbmREYXRhKQotICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5lbmQo
KTsKLSNlbmRpZgotCi0gICAgaWYgKCFtX3NyYy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3JjLmFw
cGVuZChzb3VyY2UpOwotICAgIGVsc2UKLSAgICAgICAgc2V0U3JjKHNvdXJjZSk7Ci0KLSAgICAv
LyBPbmNlIGEgdGltZXIgaXMgc2V0LCBpdCBoYXMgY29udHJvbCBvZiB3aGVuIHRoZSBwYXJzZXIg
Y29udGludWVzLgotICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGJvb2wgd2FzSW5Xcml0ZSA9IG1faW5Xcml0ZTsKLSAgICBtX2luV3JpdGUgPSB0cnVl
OwotCi0gICAgd2lsbFdyaXRlSFRNTChzb3VyY2UpOwotCi0gICAgRnJhbWUqIGZyYW1lID0gbV9k
b2MtPmZyYW1lKCk7Ci0gICAgU3RhdGUgc3RhdGUgPSBtX3N0YXRlOwotICAgIGludCBwcm9jZXNz
ZWRDb3VudCA9IDA7Ci0gICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0KLSAg
ICB3aGlsZSAoIW1fc3JjLmlzRW1wdHkoKSAmJiAoIWZyYW1lIHx8ICFmcmFtZS0+cmVkaXJlY3RT
Y2hlZHVsZXIoKS0+bG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkpKSB7Ci0gICAgICAgIGlmICghY29u
dGludWVQcm9jZXNzaW5nKHByb2Nlc3NlZENvdW50LCBzdGFydFRpbWUsIHN0YXRlKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBhZHZhbmNlKHN0YXRlKTsKLSAgICB9Ci0KLSAgICBkaWRX
cml0ZUhUTUwoKTsKLQotICAgIG1faW5Xcml0ZSA9IHdhc0luV3JpdGU7Ci0gICAgbV9zdGF0ZSA9
IHN0YXRlOwotCi0gICAgaWYgKG1fbm9Nb3JlRGF0YSAmJiAhbV9pbldyaXRlICYmICFzdGF0ZS5s
b2FkaW5nRXh0U2NyaXB0KCkgJiYgIW1fZXhlY3V0aW5nU2NyaXB0ICYmICFtX3RpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIGVuZCgpOyAvLyB0aGlzIGFjdHVhbGx5IGNhdXNlcyB1cyB0byBiZSBk
ZWxldGVkCi0KLSAgICAvLyBBZnRlciBwYXJzaW5nLCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2ggaW1h
Z2UgYmVmb3JlbG9hZCBldmVudHMuCi0gICAgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0Jl
Zm9yZUxvYWRFdmVudHMoKTsKLX0KLQotdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJz
aW5nKCkKLXsKLSAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKLSAgICBtX3RpbWVy
LnN0b3AoKTsKLQotICAgIC8vIEZJWE1FOiBXaHkgaXMgSFRNTERvY3VtZW50UGFyc2VyIHRoZSBv
bmx5IERvY3VtZW50UGFyc2VyIHdoaWNoIGNhbGxzIGNoZWNrQ29tcGxldGVkPwotICAgIC8vIFRo
ZSBGcmFtZUxvYWRlciBuZWVkcyB0byBrbm93IHRoYXQgdGhlIHBhcnNlciBoYXMgZmluaXNoZWQg
d2l0aCBpdHMgZGF0YSwKLSAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaGFwcGVuZWQg
bmF0dXJhbGx5IG9yIGR1ZSB0byBtYW51YWwgaW50ZXJ2ZW50aW9uLgotICAgIGlmICghbV9mcmFn
bWVudCAmJiBtX2RvYy0+ZnJhbWUoKSkKLSAgICAgICAgbV9kb2MtPmZyYW1lKCktPmxvYWRlcigp
LT5jaGVja0NvbXBsZXRlZCgpOwotfQotCi1ib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vz
c2luZ0RhdGEoKSBjb25zdAotewotICAgIHJldHVybiBtX3RpbWVyLmlzQWN0aXZlKCkgfHwgbV9p
bldyaXRlOwotfQotCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZChUaW1lcjxI
VE1MRG9jdW1lbnRQYXJzZXI+KikKLXsKLSAgICBpZiAobV9kb2MtPnZpZXcoKSAmJiBtX2RvYy0+
dmlldygpLT5sYXlvdXRQZW5kaW5nKCkgJiYgIW1fZG9jLT5taW5pbXVtTGF5b3V0RGVsYXkoKSkg
ewotICAgICAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lciBhbmQgbGV0IGxheW91dCB3aW4uICBUaGlz
IGlzIGJhc2ljYWxseSBhIHdheSBvZiBlbnN1cmluZyB0aGF0IHRoZSBsYXlvdXQKLSAgICAgICAg
Ly8gdGltZXIgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIG91ciB0aW1lci4KLSAgICAgICAgbV90
aW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJ
bnZva2Ugd3JpdGUoKSBhcyB0aG91Z2ggbW9yZSBkYXRhIGNhbWUgaW4uIFRoaXMgbWlnaHQgY2F1
c2UgdXMgdG8gZ2V0IGRlbGV0ZWQuCi0gICAgd3JpdGUoU2VnbWVudGVkU3RyaW5nKCksIHRydWUp
OwotfQotCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZW5kKCkKLXsKLSAgICBBU1NFUlQoIW1f
dGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgbV90aW1lci5zdG9wKCk7IC8vIE9ubHkgaGVscHMgaWYg
YXNzZXJ0aW9uIGFib3ZlIGZpcmVzLCBidXQgZG8gaXQgYW55d2F5LgotCi0gICAgaWYgKG1fYnVm
ZmVyKSB7Ci0gICAgICAgIC8vIHBhcnNlVGFnIGlzIHVzaW5nIHRoZSBidWZmZXIgZm9yIGRpZmZl
cmVudCBtYXR0ZXJzCi0gICAgICAgIGlmICghbV9zdGF0ZS5oYXNUYWdTdGF0ZSgpKQotICAgICAg
ICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0KLSAgICAgICAgZmFzdEZyZWUobV9zY3JpcHRDb2RlKTsK
LSAgICAgICAgbV9zY3JpcHRDb2RlID0gMDsKLSAgICAgICAgbV9zY3JpcHRDb2RlU2l6ZSA9IG1f
c2NyaXB0Q29kZUNhcGFjaXR5ID0gbV9zY3JpcHRDb2RlUmVzeW5jID0gMDsKLQotICAgICAgICBm
YXN0RnJlZShtX2J1ZmZlcik7Ci0gICAgICAgIG1fYnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBp
ZiAoIWluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgbV90cmVlQ29uc3RydWN0b3ItPmZpbmlz
aGVkKCk7Ci0gICAgZWxzZQotICAgICAgICBtX2RvYy0+ZmluaXNoZWRQYXJzaW5nKCk7Ci19Ci0K
LXZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpmaW5pc2goKQotewotICAgIC8vIGRvIHRoaXMgYXMg
bG9uZyBhcyB3ZSBkb24ndCBmaW5kIG1hdGNoaW5nIGNvbW1lbnQgZW5kcwotICAgIHdoaWxlICgo
bV9zdGF0ZS5pbkNvbW1lbnQoKSB8fCBtX3N0YXRlLmluU2VydmVyKCkpICYmIG1fc2NyaXB0Q29k
ZSAmJiBtX3NjcmlwdENvZGVTaXplKSB7Ci0gICAgICAgIC8vIHdlJ3ZlIGZvdW5kIGFuIHVubWF0
Y2hlZCBjb21tZW50IHN0YXJ0Ci0gICAgICAgIGlmIChtX3N0YXRlLmluQ29tbWVudCgpKQotICAg
ICAgICAgICAgbV9icm9rZW5Db21tZW50cyA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fYnJva2VuU2VydmVyID0gdHJ1ZTsKLSAgICAgICAgY2hlY2tTY3JpcHRCdWZmZXIoKTsK
LSAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemVdID0gMDsKLSAgICAgICAgbV9z
Y3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUgKyAxXSA9IDA7Ci0gICAgICAgIGludCBwb3M7Ci0g
ICAgICAgIFN0cmluZyBmb29kOwotICAgICAgICBpZiAobV9zdGF0ZS5pblNjcmlwdCgpIHx8IG1f
c3RhdGUuaW5TdHlsZSgpIHx8IG1fc3RhdGUuaW5UZXh0QXJlYSgpKQotICAgICAgICAgICAgZm9v
ZCA9IFN0cmluZyhtX3NjcmlwdENvZGUsIG1fc2NyaXB0Q29kZVNpemUpOwotICAgICAgICBlbHNl
IGlmIChtX3N0YXRlLmluU2VydmVyKCkpIHsKLSAgICAgICAgICAgIGZvb2QgPSAiPCI7Ci0gICAg
ICAgICAgICBmb29kLmFwcGVuZChtX3NjcmlwdENvZGUsIG1fc2NyaXB0Q29kZVNpemUpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcG9zID0gZmluZChtX3NjcmlwdENvZGUsIG1fc2Ny
aXB0Q29kZVNpemUsICc+Jyk7Ci0gICAgICAgICAgICBmb29kID0gU3RyaW5nKG1fc2NyaXB0Q29k
ZSArIHBvcyArIDEsIG1fc2NyaXB0Q29kZVNpemUgLSBwb3MgLSAxKTsKLSAgICAgICAgfQotICAg
ICAgICBmYXN0RnJlZShtX3NjcmlwdENvZGUpOwotICAgICAgICBtX3NjcmlwdENvZGUgPSAwOwot
ICAgICAgICBtX3NjcmlwdENvZGVTaXplID0gbV9zY3JpcHRDb2RlQ2FwYWNpdHkgPSBtX3Njcmlw
dENvZGVSZXN5bmMgPSAwOwotICAgICAgICBtX3N0YXRlLnNldEluQ29tbWVudChmYWxzZSk7Ci0g
ICAgICAgIG1fc3RhdGUuc2V0SW5TZXJ2ZXIoZmFsc2UpOwotICAgICAgICBpZiAoIWZvb2QuaXNF
bXB0eSgpKQotICAgICAgICAgICAgd3JpdGUoZm9vZCwgdHJ1ZSk7Ci0gICAgfQotICAgIC8vIHRo
aXMgaW5kaWNhdGVzIHdlIHdpbGwgbm90IHJlY2VpdmUgYW55IG1vcmUgZGF0YS4uLiBidXQgaWYg
d2UgYXJlIHdhaXRpbmcgb24KLSAgICAvLyBhbiBleHRlcm5hbCBzY3JpcHQgdG8gbG9hZCwgd2Ug
Y2FuJ3QgZmluaXNoIHBhcnNpbmcgdW50aWwgdGhhdCBpcyBkb25lCi0gICAgbV9ub01vcmVEYXRh
ID0gdHJ1ZTsKLSAgICBpZiAoIW1faW5Xcml0ZSAmJiAhbV9zdGF0ZS5sb2FkaW5nRXh0U2NyaXB0
KCkgJiYgIW1fZXhlY3V0aW5nU2NyaXB0ICYmICFtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAg
IGVuZCgpOyAvLyB0aGlzIGFjdHVhbGx5IGNhdXNlcyB1cyB0byBiZSBkZWxldGVkCi19Ci0KLWJv
b2wgSFRNTERvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQotewotICAgIHJldHVybiBt
X25vTW9yZURhdGE7Ci19Ci0KLVBhc3NSZWZQdHI8Tm9kZT4gSFRNTERvY3VtZW50UGFyc2VyOjpw
cm9jZXNzVG9rZW4oKQotewotICAgIGlmIChtX2Rlc3QgPiBtX2J1ZmZlcikgewotICAgICAgICBt
X2N1cnJlbnRUb2tlbi50ZXh0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5nTnVsbENoYXJh
Y3RlcnMobV9idWZmZXIsIG1fZGVzdCAtIG1fYnVmZmVyKTsKLSAgICAgICAgaWYgKG1fY3VycmVu
dFRva2VuLnRhZ05hbWUgIT0gY29tbWVudEF0b20pCi0gICAgICAgICAgICBtX2N1cnJlbnRUb2tl
bi50YWdOYW1lID0gdGV4dEF0b207Ci0gICAgfSBlbHNlIGlmIChtX2N1cnJlbnRUb2tlbi50YWdO
YW1lID09IG51bGxBdG9tKSB7Ci0gICAgICAgIG1fY3VycmVudFRva2VuLnJlc2V0KCk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG1fZGVzdCA9IG1fYnVmZmVyOwotCi0gICAgUmVm
UHRyPE5vZGU+IG47Ci0KLSAgICBpZiAoIW1fcGFyc2VyU3RvcHBlZCkgewotICAgICAgICBpZiAo
TmFtZWROb2RlTWFwKiBtYXAgPSBtX2N1cnJlbnRUb2tlbi5hdHRycy5nZXQoKSkKLSAgICAgICAg
ICAgIG1hcC0+c2hyaW5rVG9MZW5ndGgoKTsKLSAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUo
KSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxWaWV3U291cmNlRG9jdW1lbnQqPihtX2Rv
YyktPmFkZFZpZXdTb3VyY2VUb2tlbigmbV9jdXJyZW50VG9rZW4pOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAvLyBwYXNzIHRoZSB0b2tlbiBvdmVyIHRvIHRoZSBwYXJzZXIsIHRoZSBwYXJz
ZXIgRE9FUyBOT1QgZGVsZXRlIHRoZSB0b2tlbgotICAgICAgICAgICAgbiA9IG1fdHJlZUNvbnN0
cnVjdG9yLT5wYXJzZVRva2VuKCZtX2N1cnJlbnRUb2tlbik7Ci0gICAgfQotICAgIG1fY3VycmVu
dFRva2VuLnJlc2V0KCk7Ci0KLSAgICByZXR1cm4gbi5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSFRN
TERvY3VtZW50UGFyc2VyOjpwcm9jZXNzRG9jdHlwZVRva2VuKCkKLXsKLSAgICBpZiAoaW5WaWV3
U291cmNlTW9kZSgpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MVmlld1NvdXJjZURvY3VtZW50
Kj4obV9kb2MpLT5hZGRWaWV3U291cmNlRG9jdHlwZVRva2VuKCZtX2RvY3R5cGVUb2tlbik7Ci0g
ICAgZWxzZQotICAgICAgICBtX3RyZWVDb25zdHJ1Y3Rvci0+cGFyc2VEb2N0eXBlVG9rZW4oJm1f
ZG9jdHlwZVRva2VuKTsKLX0KLQotSFRNTERvY3VtZW50UGFyc2VyOjp+SFRNTERvY3VtZW50UGFy
c2VyKCkKLXsKLSAgICBBU1NFUlQoIW1faW5Xcml0ZSk7Ci0gICAgcmVzZXQoKTsKLX0KLQotCi12
b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZW5sYXJnZUJ1ZmZlcihpbnQgbGVuKQotewotICAgIC8v
IFJlc2l6ZSBwb2xpY3k6IEFsd2F5cyBhdCBsZWFzdCBkb3VibGUgdGhlIHNpemUgb2YgdGhlIGJ1
ZmZlciBlYWNoIHRpbWUuCi0gICAgaW50IGRlbHRhID0gbWF4KGxlbiwgbV9idWZmZXJTaXplKTsK
LQotICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICAvLyBGb3Igbm93LCBoYW5kbGUgb3Zl
cmZsb3cgdGhlIHNhbWUgd2F5IHdlIGhhbmRsZSBmYXN0UmVhbGxvYyBmYWlsdXJlLCB3aXRoIENS
QVNILgotICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4U2l6ZSA9IElOVF9NQVggLyBzaXplb2YoVUNo
YXIpOwotICAgIGlmIChkZWx0YSA+IG1heFNpemUgLSBtX2J1ZmZlclNpemUpCi0gICAgICAgIENS
QVNIKCk7Ci0KLSAgICBpbnQgbmV3U2l6ZSA9IG1fYnVmZmVyU2l6ZSArIGRlbHRhOwotICAgIGlu
dCBvbGRPZmZzZXQgPSBtX2Rlc3QgLSBtX2J1ZmZlcjsKLSAgICBtX2J1ZmZlciA9IHN0YXRpY19j
YXN0PFVDaGFyKj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG5ld1NpemUgKiBzaXplb2YoVUNoYXIp
KSk7Ci0gICAgbV9kZXN0ID0gbV9idWZmZXIgKyBvbGRPZmZzZXQ7Ci0gICAgbV9idWZmZXJTaXpl
ID0gbmV3U2l6ZTsKLX0KLQotdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmVubGFyZ2VTY3JpcHRC
dWZmZXIoaW50IGxlbikKLXsKLSAgICAvLyBSZXNpemUgcG9saWN5OiBBbHdheXMgYXQgbGVhc3Qg
ZG91YmxlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgZWFjaCB0aW1lLgotICAgIGludCBkZWx0YSA9
IG1heChsZW4sIG1fc2NyaXB0Q29kZUNhcGFjaXR5KTsKLQotICAgIC8vIENoZWNrIGZvciBvdmVy
Zmxvdy4KLSAgICAvLyBGb3Igbm93LCBoYW5kbGUgb3ZlcmZsb3cgdGhlIHNhbWUgd2F5IHdlIGhh
bmRsZSBmYXN0UmVhbGxvYyBmYWlsdXJlLCB3aXRoIENSQVNILgotICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4U2l6ZSA9IElOVF9NQVggLyBzaXplb2YoVUNoYXIpOwotICAgIGlmIChkZWx0YSA+IG1h
eFNpemUgLSBtX3NjcmlwdENvZGVDYXBhY2l0eSkKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIGlu
dCBuZXdTaXplID0gbV9zY3JpcHRDb2RlQ2FwYWNpdHkgKyBkZWx0YTsKLSAgICAvLyBJZiB3ZSBh
bGxvdyBmYXN0UmVhbGxvYyhwdHIsIDApLCBpdCB3aWxsIGNhbGwgQ1JBU0goKS4gV2UgcnVuIGlu
dG8gdGhpcwotICAgIC8vIGNhc2UgaWYgdGhlIEhUTUwgYmVpbmcgcGFyc2VkIGJlZ2lucyB3aXRo
ICI8IS0tIiBhbmQgdGhlcmUncyBtb3JlIGRhdGEKLSAgICAvLyBjb21pbmcuCi0gICAgaWYgKCFu
ZXdTaXplKSB7Ci0gICAgICAgIEFTU0VSVCghbV9zY3JpcHRDb2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc2NyaXB0Q29kZSA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdFJl
YWxsb2MobV9zY3JpcHRDb2RlLCBuZXdTaXplICogc2l6ZW9mKFVDaGFyKSkpOwotICAgIG1fc2Ny
aXB0Q29kZUNhcGFjaXR5ID0gbmV3U2l6ZTsKLX0KLQotdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6
OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkKLXsKLSAgICBBU1NFUlQobV9k
b2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKLQotICAgIGlmIChtX2hhc1NjcmlwdHNXYWl0
aW5nRm9yU3R5bGVzaGVldHMpCi0gICAgICAgIG5vdGlmeUZpbmlzaGVkKDApOwotfQotCi12b2lk
IEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKQotewot
ICAgIGV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5KCk7Ci19Ci0KLXZvaWQgSFRNTERvY3Vt
ZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzSWZSZWFkeSgpCi17Ci0gICAgQVNTRVJU
KCFtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBNYWtlIGV4dGVybmFsIHNj
cmlwdHMgd2FpdCBmb3IgZXh0ZXJuYWwgc3R5bGVzaGVldHMuCi0gICAgLy8gRklYTUU6IFRoaXMg
bmVlZHMgdG8gYmUgZG9uZSBmb3IgaW5saW5lIHNjcmlwdHMgdG9vLgotICAgIG1faGFzU2NyaXB0
c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyA9ICFtX2RvYy0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCk7
Ci0gICAgaWYgKG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOwotCi0gICAgZG91YmxlIHN0YXJ0VGlt
ZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgd2hpbGUgKCFmaW5pc2hlZCAmJiBtX3BlbmRpbmdTY3Jp
cHRzLmZpcnN0KCktPmlzTG9hZGVkKCkpIHsKLSAgICAgICAgaWYgKCFjb250aW51ZUV4ZWN1dGlu
Z0V4dGVybmFsU2NyaXB0cyhzdGFydFRpbWUpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBjcyA9IG1fcGVuZGluZ1Njcmlw
dHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIEFTU0VSVChjYWNoZSgpLT5kaXNhYmxlZCgpIHx8IGNz
LT5hY2Nlc3NDb3VudCgpID4gMCk7Ci0KLSAgICAgICAgc2V0U3JjKFNlZ21lbnRlZFN0cmluZygp
KTsKLQotICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZm9yZ2V0IGFib3V0IHRoZSBzY3JpcHQgYmVm
b3JlIHdlIGV4ZWN1dGUgdGhlIG5ldyBvbmUKLSAgICAgICAgLy8gaW5maW5pdGUgcmVjdXJzaW9u
IG1pZ2h0IGhhcHBlbiBvdGhlcndpc2UKLSAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VD
b2RlKGNzLmdldCgpKTsKLSAgICAgICAgYm9vbCBlcnJvck9jY3VycmVkID0gY3MtPmVycm9yT2Nj
dXJyZWQoKTsKLSAgICAgICAgY3MtPnJlbW92ZUNsaWVudCh0aGlzKTsKLQotICAgICAgICBSZWZQ
dHI8Tm9kZT4gbiA9IG1fc2NyaXB0Tm9kZS5yZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKGVycm9y
T2NjdXJyZWQpCi0gICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNo
b3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2Ny
aXB0RXhlY3V0aW9uKHNvdXJjZUNvZGUsIG1fc3RhdGUpOwotI2lmIEVOQUJMRShYSFRNTE1QKQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNz
Tm9zY3JpcHRFbGVtZW50KHRydWUpOwotI2VuZGlmCi0gICAgICAgICAgICBuLT5kaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgc3RhdGUgb2YgbV9wZW5kaW5nU2NyaXB0cy5p
c0VtcHR5KCkgY2FuIGNoYW5nZSBpbnNpZGUgdGhlIHNjcmlwdEV4ZWN1dGlvbigpCi0gICAgICAg
IC8vIGNhbGwgYWJvdmUsIHNvIHRlc3QgYWZ0ZXJ3YXJkcy4KLSAgICAgICAgZmluaXNoZWQgPSBt
X3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKTsKLSAgICAgICAgaWYgKGZpbmlzaGVkKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoIW1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyk7Ci0gICAg
ICAgICAgICBtX3N0YXRlLnNldExvYWRpbmdFeHRTY3JpcHQoZmFsc2UpOwotICAgICAgICB9IGVs
c2UgaWYgKG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykgewotICAgICAgICAgICAg
Ly8gbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzIGZsYWcgbWlnaHQgaGF2ZSBjaGFu
Z2VkIGR1cmluZyB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4KLSAgICAgICAgICAgIC8vIElmIGl0IGRp
ZCB3ZSBhcmUgbm93IGJsb2NrZWQgd2FpdGluZyBmb3Igc3R5bGVzaGVldHMgYW5kIHNob3VsZCBu
b3QgZXhlY3V0ZSBtb3JlIHNjcmlwdHMgdW50aWwgdGhleSBhcnJpdmUuCi0gICAgICAgICAgICBm
aW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAnbV9yZXF1ZXN0aW5nU2Ny
aXB0JyBpcyB0cnVlIHdoZW4gd2UgYXJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGZyb20KLSAgICAg
ICAgLy8gc2NyaXB0SGFuZGxlcigpLiBJbiB0aGF0IGNhc2Ugc2NyaXB0SGFuZGxlcigpIHdpbGwg
dGFrZSBjYXJlCi0gICAgICAgIC8vIG9mIG1fcGVuZGluZ1NyYy4KLSAgICAgICAgaWYgKCFtX3Jl
cXVlc3RpbmdTY3JpcHQpIHsKLSAgICAgICAgICAgIFNlZ21lbnRlZFN0cmluZyByZXN0ID0gbV9w
ZW5kaW5nU3JjOwotICAgICAgICAgICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7Ci0gICAgICAgICAg
ICB3cml0ZShyZXN0LCBmYWxzZSk7Ci0gICAgICAgICAgICAvLyB3ZSBtaWdodCBiZSBkZWxldGVk
IGF0IHRoaXMgcG9pbnQsIGRvIG5vdCBhY2Nlc3MgYW55IG1lbWJlcnMuCi0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRz
VGltZXJGaXJlZChUaW1lcjxIVE1MRG9jdW1lbnRQYXJzZXI+KikKLXsKLSAgICBpZiAobV9kb2Mt
PnZpZXcoKSAmJiBtX2RvYy0+dmlldygpLT5sYXlvdXRQZW5kaW5nKCkgJiYgIW1fZG9jLT5taW5p
bXVtTGF5b3V0RGVsYXkoKSkgewotICAgICAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lciBhbmQgZG8g
bGF5b3V0IGZpcnN0LgotICAgICAgICBtX2V4dGVybmFsU2NyaXB0c1RpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENvbnRpbnVlIGV4ZWN1dGlu
ZyBleHRlcm5hbCBzY3JpcHRzLgotICAgIGV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5KCk7
Ci19Ci0KLWJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpjb250aW51ZUV4ZWN1dGluZ0V4dGVybmFs
U2NyaXB0cyhkb3VibGUgc3RhcnRUaW1lKQotewotICAgIGlmIChtX2V4dGVybmFsU2NyaXB0c1Rp
bWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjdXJyZW50
VGltZSgpIC0gc3RhcnRUaW1lID4gbV90b2tlbml6ZXJUaW1lRGVsYXkpIHsKLSAgICAgICAgLy8g
U2NoZWR1bGUgdGhlIHRpbWVyIHRvIGtlZXAgcHJvY2Vzc2luZyBhcyBzb29uIGFzIHBvc3NpYmxl
LgotICAgICAgICBtX2V4dGVybmFsU2NyaXB0c1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBIVE1M
RG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAotewotICAgIHJldHVy
biBtX3N0YXRlLmxvYWRpbmdFeHRTY3JpcHQoKTsKLX0KLQotdm9pZCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OnNldFNyYyhjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICBtX3NyYyA9
IHNvdXJjZTsKLX0KLQotdm9pZCBwYXJzZUxlZ2FjeUhUTUxEb2N1bWVudEZyYWdtZW50KGNvbnN0
IFN0cmluZyYgc291cmNlLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgSFRNTERvY3VtZW50
UGFyc2VyIHBhcnNlcihmcmFnbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgcGFyc2Vy
LnNldEZvcmNlU3luY2hyb25vdXModHJ1ZSk7Ci0gICAgcGFyc2VyLndyaXRlKHNvdXJjZSwgdHJ1
ZSk7Ci0gICAgcGFyc2VyLmZpbmlzaCgpOwotICAgIEFTU0VSVCghcGFyc2VyLnByb2Nlc3NpbmdE
YXRhKCkpOyAgICAgIC8vIG1ha2Ugc3VyZSB3ZSdyZSBkb25lIChzZWUgMzk2MzE1MSkKLX0KLQot
VUNoYXIgZGVjb2RlTmFtZWRFbnRpdHkoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBjb25zdCBF
bnRpdHkqIGUgPSBmaW5kRW50aXR5KG5hbWUsIHN0cmxlbihuYW1lKSk7Ci0gICAgcmV0dXJuIGUg
PyBlLT5jb2RlIDogMDsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaAko
cmV2aXNpb24gNjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDQ5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk3
IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAxOTk3IFRv
cmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAxOTk4IFdhbGRvIEJh
c3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jaWZuZGVmIEhUTUxUb2tlbml6ZXJfaAotI2RlZmluZSBIVE1MVG9rZW5pemVyX2gKLQot
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuaCIKLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKLSNp
bmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKLSNp
bmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgiCi0jaW5jbHVkZSA8
d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFz
cyBEb2N1bWVudEZyYWdtZW50OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBIVE1MRG9jdW1lbnQ7
Ci1jbGFzcyBIVE1MU2NyaXB0RWxlbWVudDsKLWNsYXNzIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ7
Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOwotY2xh
c3MgTm9kZTsKLWNsYXNzIFByZWxvYWRTY2FubmVyOwotY2xhc3MgU2NyaXB0U291cmNlQ29kZTsK
LQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIHJlcHJlc2VudHMgb25lIEhUTUwgdGFnLiBDb25zaXN0
cyBvZiBhIG51bWVyaWNhbCBpZCwgYW5kIHRoZSBsaXN0Ci0gKiBvZiBhdHRyaWJ1dGVzLiBDYW4g
YWxzbyByZXByZXNlbnQgdGV4dC4gSW4gdGhpcyBjYXNlIHRoZSBpZCA9IDAgYW5kCi0gKiB0ZXh0
IGNvbnRhaW5zIHRoZSB0ZXh0LgotICovCi1zdHJ1Y3QgVG9rZW4gewotICAgIFRva2VuKCkKLSAg
ICAgICAgOiBiZWdpblRhZyh0cnVlKQotICAgICAgICAsIHNlbGZDbG9zaW5nVGFnKGZhbHNlKQot
ICAgICAgICAsIGJyb2tlblhNTFN0eWxlKGZhbHNlKQotICAgICAgICAsIG1fc291cmNlSW5mbygw
KQotICAgIHsgfQotICAgIH5Ub2tlbigpIHsgfQotCi0gICAgdm9pZCBhZGRBdHRyaWJ1dGUoQXRv
bWljU3RyaW5nJiBhdHRyTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2LCBib29sIHZpZXdTb3Vy
Y2VNb2RlKTsKLQotICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIGZ1bGxO
YW1lKSBjb25zdCB7IHJldHVybiBiZWdpblRhZyAmJiBmdWxsTmFtZS5sb2NhbE5hbWUoKSA9PSB0
YWdOYW1lOyB9Ci0gICAgYm9vbCBpc0Nsb3NlVGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIGZ1bGxO
YW1lKSBjb25zdCB7IHJldHVybiAhYmVnaW5UYWcgJiYgZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0g
dGFnTmFtZTsgfQotCi0gICAgdm9pZCByZXNldCgpCi0gICAgewotICAgICAgICBhdHRycyA9IDA7
Ci0gICAgICAgIHRleHQgPSAwOwotICAgICAgICB0YWdOYW1lID0gbnVsbEF0b207Ci0gICAgICAg
IGJlZ2luVGFnID0gdHJ1ZTsKLSAgICAgICAgc2VsZkNsb3NpbmdUYWcgPSBmYWxzZTsKLSAgICAg
ICAgYnJva2VuWE1MU3R5bGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fc291cmNlSW5mbykKLSAg
ICAgICAgICAgIG1fc291cmNlSW5mby0+Y2xlYXIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZFZp
ZXdTb3VyY2VDaGFyKFVDaGFyIGMpIHsgaWYgKCFtX3NvdXJjZUluZm8uZ2V0KCkpIG1fc291cmNl
SW5mby5zZXQobmV3IFZlY3RvcjxVQ2hhcj4pOyBtX3NvdXJjZUluZm8tPmFwcGVuZChjKTsgfQot
Ci0gICAgUmVmUHRyPE5hbWVkTm9kZU1hcD4gYXR0cnM7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+
IHRleHQ7Ci0gICAgQXRvbWljU3RyaW5nIHRhZ05hbWU7Ci0gICAgYm9vbCBiZWdpblRhZzsKLSAg
ICBib29sIHNlbGZDbG9zaW5nVGFnOwotICAgIGJvb2wgYnJva2VuWE1MU3R5bGU7Ci0gICAgT3du
UHRyPFZlY3RvcjxVQ2hhcj4gPiBtX3NvdXJjZUluZm87Ci19OwotCi1lbnVtIERvY3R5cGVTdGF0
ZSB7Ci0gICAgRG9jdHlwZUJlZ2luLAotICAgIERvY3R5cGVCZWZvcmVOYW1lLAotICAgIERvY3R5
cGVOYW1lLAotICAgIERvY3R5cGVBZnRlck5hbWUsCi0gICAgRG9jdHlwZUJlZm9yZVB1YmxpY0lE
LAotICAgIERvY3R5cGVQdWJsaWNJRCwKLSAgICBEb2N0eXBlQWZ0ZXJQdWJsaWNJRCwKLSAgICBE
b2N0eXBlQmVmb3JlU3lzdGVtSUQsCi0gICAgRG9jdHlwZVN5c3RlbUlELAotICAgIERvY3R5cGVB
ZnRlclN5c3RlbUlELAotICAgIERvY3R5cGVCb2d1cwotfTsKLQotY2xhc3MgRG9jdHlwZVRva2Vu
IHsKLXB1YmxpYzoKLSAgICBEb2N0eXBlVG9rZW4oKSB7fQotCi0gICAgdm9pZCByZXNldCgpCi0g
ICAgewotICAgICAgICBtX25hbWUuY2xlYXIoKTsKLSAgICAgICAgbV9wdWJsaWNJRC5jbGVhcigp
OwotICAgICAgICBtX3N5c3RlbUlELmNsZWFyKCk7Ci0gICAgICAgIG1fc3RhdGUgPSBEb2N0eXBl
QmVnaW47Ci0gICAgICAgIG1fc291cmNlLmNsZWFyKCk7Ci0gICAgICAgIG1fZm9yY2VRdWlya3Mg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBEb2N0eXBlU3RhdGUgc3RhdGUoKSB7IHJldHVybiBtX3N0
YXRlOyB9Ci0gICAgdm9pZCBzZXRTdGF0ZShEb2N0eXBlU3RhdGUgcykgeyBtX3N0YXRlID0gczsg
fQotCi0gICAgVmVjdG9yPFVDaGFyPiBtX25hbWU7Ci0gICAgVmVjdG9yPFVDaGFyPiBtX3B1Ymxp
Y0lEOwotICAgIFZlY3RvcjxVQ2hhcj4gbV9zeXN0ZW1JRDsKLSAgICBEb2N0eXBlU3RhdGUgbV9z
dGF0ZTsKLQotICAgIFZlY3RvcjxVQ2hhcj4gbV9zb3VyY2U7Ci0KLSAgICBib29sIG1fZm9yY2VR
dWlya3M7IC8vIFVzZWQgYnkgdGhlIEhUTUw1IHBhcnNlci4KLX07Ci0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLy8gRklYTUU6IFRoaXMgY2xhc3MgZG9lcyB0b28gbXVjaC4gIFJpZ2h0IG5v
dyBpdCBpcyBib3RoIGFuIEhUTUwgbGV4ZXIgYXMgd2VsbAotLy8gYXMgaGFuZGxpbmcgYWxsIG9m
IHRoZSBub24tbGV4ZXItc3BlY2lmaWMganVuayByZWxhdGVkIHRvIHRva2VuaXppbmcgSFRNTAot
Ly8gKGxpa2UgZGVhbGluZyB3aXRoIDxzY3JpcHQ+IHRhZ3MpLiAgVGhlIEhUTUwgbGV4ZXIgYml0
cyBzaG91bGQgYmUgcHVzaGVkCi0vLyBkb3duIGludG8gYSBzZXBhcmF0ZSBIVE1MIGxleGVyIGNs
YXNzLgotCi1jbGFzcyBIVE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgRG9jdW1lbnRQYXJzZXIs
IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgSFRNTERvY3VtZW50
UGFyc2VyKEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKLSAgICBIVE1MRG9jdW1l
bnRQYXJzZXIoSFRNTFZpZXdTb3VyY2VEb2N1bWVudCopOwotICAgIEhUTUxEb2N1bWVudFBhcnNl
cihEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21l
bnRTY3JpcHRpbmdBbGxvd2VkKTsKLSAgICB2aXJ0dWFsIH5IVE1MRG9jdW1lbnRQYXJzZXIoKTsK
LQotICAgIHZpcnR1YWwgdm9pZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFw
cGVuZERhdGEpOwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZmluaXNoV2FzQ2FsbGVkKCk7Ci0gICAgdmlydHVhbCBib29sIGZvcmNlU3luY2hyb25vdXMoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmZvcmNlU3luY2hyb25vdXMoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgZm9yY2UpOwotICAgIHZpcnR1YWwgYm9vbCBp
c1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BQYXJzaW5n
KCk7Ci0gICAgdmlydHVhbCBib29sIHByb2Nlc3NpbmdEYXRhKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBpbnQgZXhlY3V0aW5nU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRpbmdTY3JpcHQ7
IH0KLQotICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xpbmVO
dW1iZXI7IH0KLSAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCB7IHJldHVybiAx
OyB9Ci0KLSAgICBib29sIHByb2Nlc3NpbmdDb250ZW50V3JpdHRlbkJ5U2NyaXB0KCkgY29uc3Qg
eyByZXR1cm4gbV9zcmMuZXhjbHVkZUxpbmVOdW1iZXJzKCk7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOwotCi0gICAgdmlydHVhbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKiBodG1sVHJlZUNvbnN0cnVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmVlQ29uc3RydWN0b3IuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIEhUTUxEb2N1bWVu
dFBhcnNlciogYXNIVE1MRG9jdW1lbnRQYXJzZXIoKSB7IHJldHVybiB0aGlzOyB9Ci0KLXByaXZh
dGU6Ci0gICAgY2xhc3MgU3RhdGU7Ci0KLSAgICAvLyBXaGVyZSB3ZSBhcmUgaW4gcGFyc2luZyBh
IHRhZwotICAgIHZvaWQgYmVnaW4oKTsKLSAgICB2b2lkIGVuZCgpOwotCi0gICAgdm9pZCByZXNl
dCgpOwotCi0gICAgdm9pZCB3aWxsV3JpdGVIVE1MKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZHZhbmNlKFN0YXRlJik7Ci0gICAgdm9pZCBkaWRXcml0
ZUhUTUwoKTsKLQotICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJvY2Vzc1Rva2VuKCk7Ci0gICAgdm9p
ZCBwcm9jZXNzRG9jdHlwZVRva2VuKCk7Ci0KLSAgICBTdGF0ZSBwcm9jZXNzTGlzdGluZyhTZWdt
ZW50ZWRTdHJpbmcsIFN0YXRlKTsKLSAgICBTdGF0ZSBwYXJzZUNvbW1lbnQoU2VnbWVudGVkU3Ry
aW5nJiwgU3RhdGUpOwotICAgIFN0YXRlIHBhcnNlRG9jdHlwZShTZWdtZW50ZWRTdHJpbmcmLCBT
dGF0ZSk7Ci0gICAgU3RhdGUgcGFyc2VTZXJ2ZXIoU2VnbWVudGVkU3RyaW5nJiwgU3RhdGUpOwot
ICAgIFN0YXRlIHBhcnNlVGV4dChTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7Ci0gICAgU3RhdGUg
cGFyc2VOb25IVE1MVGV4dChTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7Ci0gICAgU3RhdGUgcGFy
c2VUYWcoU2VnbWVudGVkU3RyaW5nJiwgU3RhdGUpOwotICAgIFN0YXRlIHBhcnNlRW50aXR5KFNl
Z21lbnRlZFN0cmluZyYsIFVDaGFyKiYgZGVzdCwgU3RhdGUsIHVuc2lnbmVkJiBjQnVmZmVyUG9z
LCBib29sIHN0YXJ0LCBib29sIHBhcnNpbmdUYWcpOwotICAgIFN0YXRlIHBhcnNlUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFNlZ21lbnRlZFN0cmluZyYsIFN0YXRlKTsKLSAgICBTdGF0ZSBzY3JpcHRI
YW5kbGVyKFN0YXRlKTsKLSAgICBTdGF0ZSBzY3JpcHRFeGVjdXRpb24oY29uc3QgU2NyaXB0U291
cmNlQ29kZSYsIFN0YXRlKTsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBTZWdtZW50ZWRTdHJpbmcm
KTsKLQotICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIu
Ci0gICAgLy8gaWYgbm90IGVubGFyZ2UgaXQKLSAgICBpbmxpbmUgdm9pZCBjaGVja0J1ZmZlcihp
bnQgbGVuID0gMTApCi0gICAgewotICAgICAgICBpZiAoKG1fZGVzdCAtIG1fYnVmZmVyKSA+IG1f
YnVmZmVyU2l6ZSAtIGxlbikKLSAgICAgICAgICAgIGVubGFyZ2VCdWZmZXIobGVuKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgdm9pZCBjaGVja1NjcmlwdEJ1ZmZlcihpbnQgbGVuID0gMTApCi0gICAg
ewotICAgICAgICBpZiAobV9zY3JpcHRDb2RlU2l6ZSArIGxlbiA+PSBtX3NjcmlwdENvZGVDYXBh
Y2l0eSkKLSAgICAgICAgICAgIGVubGFyZ2VTY3JpcHRCdWZmZXIobGVuKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGVubGFyZ2VCdWZmZXIoaW50IGxlbik7Ci0gICAgdm9pZCBlbmxhcmdlU2NyaXB0QnVm
ZmVyKGludCBsZW4pOwotCi0gICAgYm9vbCBjb250aW51ZVByb2Nlc3NpbmcoaW50JiBwcm9jZXNz
ZWRDb3VudCwgZG91YmxlIHN0YXJ0VGltZSwgU3RhdGUmKTsKLSAgICB2b2lkIHRpbWVyRmlyZWQo
VGltZXI8SFRNTERvY3VtZW50UGFyc2VyPiopOwotICAgIHZvaWQgYWxsRGF0YVByb2Nlc3NlZCgp
OwotCi0gICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgIHZvaWQgbm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLQotICAgIHZvaWQgZXhlY3V0ZUV4dGVybmFsU2NyaXB0
c0lmUmVhZHkoKTsKLSAgICB2b2lkIGV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKFRp
bWVyPEhUTUxEb2N1bWVudFBhcnNlcj4qKTsKLSAgICBib29sIGNvbnRpbnVlRXhlY3V0aW5nRXh0
ZXJuYWxTY3JpcHRzKGRvdWJsZSBzdGFydFRpbWUpOwotCi0gICAgLy8gSW50ZXJuYWwgYnVmZmVy
cwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICBVQ2hhciogbV9idWZmZXI7Ci0gICAgaW50
IG1fYnVmZmVyU2l6ZTsKLSAgICBVQ2hhciogbV9kZXN0OwotCi0gICAgVG9rZW4gbV9jdXJyZW50
VG9rZW47Ci0KLSAgICAvLyBUaGlzIGJ1ZmZlciBob2xkcyB0aGUgcmF3IGNoYXJhY3RlcnMgd2Un
dmUgc2VlbiBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YKLSAgICAvLyB0aGUgYXR0cmlidXRlIG5h
bWUgYW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLSAgICBW
ZWN0b3I8VUNoYXIsIDMyPiBtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlOwotCi0gICAgLy8gRG9j
dW1lbnRQYXJzZXIgZmxhZ3MKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBhcmUgd2Ug
aW4gcXVvdGVzIHdpdGhpbiBhIGh0bWwgdGFnCi0gICAgZW51bSB7IE5vUXVvdGUsIFNpbmdsZVF1
b3RlLCBEb3VibGVRdW90ZSB9IHRxdW90ZTsKLQotICAgIC8vIEFyZSB3ZSBpbiBhICYuLi4gY2hh
cmFjdGVyIGVudGl0eSBkZXNjcmlwdGlvbj8KLSAgICBlbnVtIEVudGl0eVN0YXRlIHsKLSAgICAg
ICAgTm9FbnRpdHkgPSAwLAotICAgICAgICBTZWFyY2hFbnRpdHkgPSAxLAotICAgICAgICBOdW1l
cmljU2VhcmNoID0gMiwKLSAgICAgICAgSGV4YWRlY2ltYWwgPSAzLAotICAgICAgICBEZWNpbWFs
ID0gNCwKLSAgICAgICAgRW50aXR5TmFtZSA9IDUsCi0gICAgICAgIFNlYXJjaFNlbWljb2xvbiA9
IDYKLSAgICB9OwotICAgIHVuc2lnbmVkIEVudGl0eVVuaWNvZGVWYWx1ZTsKLQotICAgIGVudW0g
VGFnU3RhdGUgewotICAgICAgICBOb1RhZyA9IDAsCi0gICAgICAgIFRhZ05hbWUgPSAxLAotICAg
ICAgICBTZWFyY2hBdHRyaWJ1dGUgPSAyLAotICAgICAgICBBdHRyaWJ1dGVOYW1lID0gMywKLSAg
ICAgICAgU2VhcmNoRXF1YWwgPSA0LAotICAgICAgICBTZWFyY2hWYWx1ZSA9IDUsCi0gICAgICAg
IFF1b3RlZFZhbHVlID0gNiwKLSAgICAgICAgVmFsdWUgPSA3LAotICAgICAgICBTZWFyY2hFbmQg
PSA4Ci0gICAgfTsKLQotICAgIGNsYXNzIFN0YXRlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0
YXRlKCkgOiBtX2JpdHMoMCkgeyB9Ci0KLSAgICAgICAgVGFnU3RhdGUgdGFnU3RhdGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxUYWdTdGF0ZT4obV9iaXRzICYgVGFnTWFzayk7IH0KLSAg
ICAgICAgdm9pZCBzZXRUYWdTdGF0ZShUYWdTdGF0ZSB0KSB7IG1fYml0cyA9IChtX2JpdHMgJiB+
VGFnTWFzaykgfCB0OyB9Ci0gICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8RW50aXR5U3RhdGU+KChtX2JpdHMgJiBFbnRpdHlNYXNrKSA+
PiBFbnRpdHlTaGlmdCk7IH0KLSAgICAgICAgdm9pZCBzZXRFbnRpdHlTdGF0ZShFbnRpdHlTdGF0
ZSBlKSB7IG1fYml0cyA9IChtX2JpdHMgJiB+RW50aXR5TWFzaykgfCAoZSA8PCBFbnRpdHlTaGlm
dCk7IH0KLQotICAgICAgICBib29sIGluU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChJ
blNjcmlwdCk7IH0KLSAgICAgICAgdm9pZCBzZXRJblNjcmlwdChib29sIHYpIHsgc2V0Qml0KElu
U2NyaXB0LCB2KTsgfQotICAgICAgICBib29sIGluU3R5bGUoKSBjb25zdCB7IHJldHVybiB0ZXN0
Qml0KEluU3R5bGUpOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5TdHlsZShib29sIHYpIHsgc2V0Qml0
KEluU3R5bGUsIHYpOyB9Ci0gICAgICAgIGJvb2wgaW5YbXAoKSBjb25zdCB7IHJldHVybiB0ZXN0
Qml0KEluWG1wKTsgfQotICAgICAgICB2b2lkIHNldEluWG1wKGJvb2wgdikgeyBzZXRCaXQoSW5Y
bXAsIHYpOyB9Ci0gICAgICAgIGJvb2wgaW5UaXRsZSgpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQo
SW5UaXRsZSk7IH0KLSAgICAgICAgdm9pZCBzZXRJblRpdGxlKGJvb2wgdikgeyBzZXRCaXQoSW5U
aXRsZSwgdik7IH0KLSAgICAgICAgYm9vbCBpbklGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHRlc3RC
aXQoSW5JRnJhbWUpOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5JRnJhbWUoYm9vbCB2KSB7IHNldEJp
dChJbklGcmFtZSwgdik7IH0KLSAgICAgICAgYm9vbCBpblBsYWluVGV4dCgpIGNvbnN0IHsgcmV0
dXJuIHRlc3RCaXQoSW5QbGFpblRleHQpOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5QbGFpblRleHQo
Ym9vbCB2KSB7IHNldEJpdChJblBsYWluVGV4dCwgdik7IH0KLSAgICAgICAgYm9vbCBpblByb2Nl
c3NpbmdJbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoSW5Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24pOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oYm9v
bCB2KSB7IHJldHVybiBzZXRCaXQoSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIHYpOyB9Ci0gICAg
ICAgIGJvb2wgaW5Db21tZW50KCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChJbkNvbW1lbnQpOyB9
Ci0gICAgICAgIHZvaWQgc2V0SW5Db21tZW50KGJvb2wgdikgeyBzZXRCaXQoSW5Db21tZW50LCB2
KTsgfQotICAgICAgICBib29sIGluRG9jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoSW5E
b2N0eXBlKTsgfQotICAgICAgICB2b2lkIHNldEluRG9jdHlwZShib29sIHYpIHsgc2V0Qml0KElu
RG9jdHlwZSwgdik7IH0KLSAgICAgICAgYm9vbCBpblRleHRBcmVhKCkgY29uc3QgeyByZXR1cm4g
dGVzdEJpdChJblRleHRBcmVhKTsgfQotICAgICAgICB2b2lkIHNldEluVGV4dEFyZWEoYm9vbCB2
KSB7IHNldEJpdChJblRleHRBcmVhLCB2KTsgfQotICAgICAgICBib29sIGVzY2FwZWQoKSBjb25z
dCB7IHJldHVybiB0ZXN0Qml0KEVzY2FwZWQpOyB9Ci0gICAgICAgIHZvaWQgc2V0RXNjYXBlZChi
b29sIHYpIHsgc2V0Qml0KEVzY2FwZWQsIHYpOyB9Ci0gICAgICAgIGJvb2wgaW5TZXJ2ZXIoKSBj
b25zdCB7IHJldHVybiB0ZXN0Qml0KEluU2VydmVyKTsgfQotICAgICAgICB2b2lkIHNldEluU2Vy
dmVyKGJvb2wgdikgeyBzZXRCaXQoSW5TZXJ2ZXIsIHYpOyB9Ci0gICAgICAgIGJvb2wgc2tpcExG
KCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChTa2lwTEYpOyB9Ci0gICAgICAgIHZvaWQgc2V0U2tp
cExGKGJvb2wgdikgeyBzZXRCaXQoU2tpcExGLCB2KTsgfQotICAgICAgICBib29sIHN0YXJ0VGFn
KCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChTdGFydFRhZyk7IH0KLSAgICAgICAgdm9pZCBzZXRT
dGFydFRhZyhib29sIHYpIHsgc2V0Qml0KFN0YXJ0VGFnLCB2KTsgfQotICAgICAgICBib29sIGRp
c2NhcmRMRigpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoRGlzY2FyZExGKTsgfQotICAgICAgICB2
b2lkIHNldERpc2NhcmRMRihib29sIHYpIHsgc2V0Qml0KERpc2NhcmRMRiwgdik7IH0KLSAgICAg
ICAgYm9vbCBhbGxvd1lpZWxkKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChBbGxvd1lpZWxkKTsg
fQotICAgICAgICB2b2lkIHNldEFsbG93WWllbGQoYm9vbCB2KSB7IHNldEJpdChBbGxvd1lpZWxk
LCB2KTsgfQotICAgICAgICBib29sIGxvYWRpbmdFeHRTY3JpcHQoKSBjb25zdCB7IHJldHVybiB0
ZXN0Qml0KExvYWRpbmdFeHRTY3JpcHQpOyB9Ci0gICAgICAgIHZvaWQgc2V0TG9hZGluZ0V4dFNj
cmlwdChib29sIHYpIHsgc2V0Qml0KExvYWRpbmdFeHRTY3JpcHQsIHYpOyB9Ci0gICAgICAgIGJv
b2wgZm9yY2VTeW5jaHJvbm91cygpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoRm9yY2VTeW5jaHJv
bm91cyk7IH0KLSAgICAgICAgdm9pZCBzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgdikgeyBzZXRC
aXQoRm9yY2VTeW5jaHJvbm91cywgdik7IH0KLQotICAgICAgICBib29sIGluQW55Tm9uSFRNTFRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2JpdHMgJiAoSW5TY3JpcHQgfCBJblN0eWxlIHwgSW5YbXAg
fCBJblRleHRBcmVhIHwgSW5UaXRsZSB8IEluSUZyYW1lKTsgfQotICAgICAgICBib29sIGhhc1Rh
Z1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgVGFnTWFzazsgfQotICAgICAgICBib29s
IGhhc0VudGl0eVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgRW50aXR5TWFzazsgfQot
Ci0gICAgICAgIGJvb2wgbmVlZHNTcGVjaWFsV3JpdGVIYW5kbGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fYml0cyAmIChJblNjcmlwdCB8IEluU3R5bGUgfCBJblhtcCB8IEluVGV4dEFyZWEgfCBJblRp
dGxlIHwgSW5JRnJhbWUgfCBUYWdNYXNrIHwgRW50aXR5TWFzayB8IEluUGxhaW5UZXh0IHwgSW5D
b21tZW50IHwgSW5Eb2N0eXBlIHwgSW5TZXJ2ZXIgfCBJblByb2Nlc3NpbmdJbnN0cnVjdGlvbiB8
IFN0YXJ0VGFnKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBF
bnRpdHlTaGlmdCA9IDQ7Ci0gICAgICAgIGVudW0gU3RhdGVCaXRzIHsKLSAgICAgICAgICAgIFRh
Z01hc2sgPSAoMSA8PCA0KSAtIDEsCi0gICAgICAgICAgICBFbnRpdHlNYXNrID0gKDEgPDwgNykg
LSAoMSA8PCA0KSwKLSAgICAgICAgICAgIEluU2NyaXB0ID0gMSA8PCA3LAotICAgICAgICAgICAg
SW5TdHlsZSA9IDEgPDwgOCwKLSAgICAgICAgICAgIC8vIEJpdCA5IHVudXNlZAotICAgICAgICAg
ICAgSW5YbXAgPSAxIDw8IDEwLAotICAgICAgICAgICAgSW5UaXRsZSA9IDEgPDwgMTEsCi0gICAg
ICAgICAgICBJblBsYWluVGV4dCA9IDEgPDwgMTIsCi0gICAgICAgICAgICBJblByb2Nlc3NpbmdJ
bnN0cnVjdGlvbiA9IDEgPDwgMTMsCi0gICAgICAgICAgICBJbkNvbW1lbnQgPSAxIDw8IDE0LAot
ICAgICAgICAgICAgSW5UZXh0QXJlYSA9IDEgPDwgMTUsCi0gICAgICAgICAgICBFc2NhcGVkID0g
MSA8PCAxNiwKLSAgICAgICAgICAgIEluU2VydmVyID0gMSA8PCAxNywKLSAgICAgICAgICAgIFNr
aXBMRiA9IDEgPDwgMTgsCi0gICAgICAgICAgICBTdGFydFRhZyA9IDEgPDwgMTksCi0gICAgICAg
ICAgICBEaXNjYXJkTEYgPSAxIDw8IDIwLCAvLyBGSVhNRTogc2hvdWxkIGNsYXJpZnkgZGlmZmVy
ZW5jZSBiZXR3ZWVuIHNraXAgYW5kIGRpc2NhcmQKLSAgICAgICAgICAgIEFsbG93WWllbGQgPSAx
IDw8IDIxLAotICAgICAgICAgICAgTG9hZGluZ0V4dFNjcmlwdCA9IDEgPDwgMjIsCi0gICAgICAg
ICAgICBGb3JjZVN5bmNocm9ub3VzID0gMSA8PCAyMywKLSAgICAgICAgICAgIEluSUZyYW1lID0g
MSA8PCAyNCwKLSAgICAgICAgICAgIEluRG9jdHlwZSA9IDEgPDwgMjUKLSAgICAgICAgfTsKLQot
ICAgICAgICB2b2lkIHNldEJpdChTdGF0ZUJpdHMgYml0LCBib29sIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgbV9iaXRzIHw9IGJpdDsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2JpdHMgJj0gfmJpdDsKLSAgICAg
ICAgfQotICAgICAgICBib29sIHRlc3RCaXQoU3RhdGVCaXRzIGJpdCkgY29uc3QgeyByZXR1cm4g
bV9iaXRzICYgYml0OyB9Ci0KLSAgICAgICAgdW5zaWduZWQgbV9iaXRzOwotICAgIH07Ci0KLSAg
ICBTdGF0ZSBtX3N0YXRlOwotCi0gICAgRG9jdHlwZVRva2VuIG1fZG9jdHlwZVRva2VuOwotICAg
IGludCBtX2RvY3R5cGVTZWFyY2hDb3VudDsKLSAgICBpbnQgbV9kb2N0eXBlU2Vjb25kYXJ5U2Vh
cmNoQ291bnQ7Ci0KLSAgICBib29sIG1fYnJva2VuU2VydmVyOwotCi0gICAgLy8gTmFtZSBvZiBh
biBhdHRyaWJ1dGUgdGhhdCB3ZSBqdXN0IHNjYW5uZWQuCi0gICAgQXRvbWljU3RyaW5nIG1fYXR0
ck5hbWU7Ci0KLSAgICAvLyBVc2VkIHRvIHN0b3JlIHRoZSBjb2RlIG9mIGEgc2NyaXB0aW5nIHNl
cXVlbmNlCi0gICAgVUNoYXIqIG1fc2NyaXB0Q29kZTsKLSAgICAvLyBTaXplIG9mIHRoZSBzY3Jp
cHQgc2VxdWVuemUgc3RvcmVkIGluIEByZWYgI3NjcmlwdENvZGUKLSAgICBpbnQgbV9zY3JpcHRD
b2RlU2l6ZTsKLSAgICAvLyBNYXhpbWFsIHNpemUgdGhhdCBjYW4gYmUgc3RvcmVkIGluIEByZWYg
I3NjcmlwdENvZGUKLSAgICBpbnQgbV9zY3JpcHRDb2RlQ2FwYWNpdHk7Ci0gICAgLy8gcmVzeW5j
IHBvaW50IG9mIHNjcmlwdCBjb2RlIHNpemUKLSAgICBpbnQgbV9zY3JpcHRDb2RlUmVzeW5jOwot
Ci0gICAgLy8gU3RvcmVzIGNoYXJhY3RlcnMgaWYgd2UgYXJlIHNjYW5uaW5nIGZvciBhIHN0cmlu
ZyBsaWtlICI8L3NjcmlwdD4iCi0gICAgVUNoYXIgc2VhcmNoQnVmZmVyWzEwXTsKLQotICAgIC8v
IENvdW50cyB3aGVyZSB3ZSBhcmUgaW4gdGhlIHN0cmluZyB3ZSBhcmUgc2Nhbm5pbmcgZm9yCi0g
ICAgaW50IHNlYXJjaENvdW50OwotICAgIC8vIHRoZSBzdG9wcGVyIHN0cmluZwotICAgIGNvbnN0
IGNoYXIqIG1fc2VhcmNoU3RvcHBlcjsKLSAgICBpbnQgbV9zZWFyY2hTdG9wcGVyTGVuZ3RoOwot
Ci0gICAgLy8gaWYgbm8gbW9yZSBkYXRhIGlzIGNvbWluZywganVzdCBwYXJzZSB3aGF0IHdlIGhh
dmUgKGluY2x1ZGluZyBleHQgc2NyaXB0cyB0aGF0Ci0gICAgLy8gbWF5IGJlIHN0aWxsIGRvd25s
b2FkaW5nKSBhbmQgZmluaXNoCi0gICAgYm9vbCBtX25vTW9yZURhdGE7Ci0gICAgLy8gVVJMIHRv
IGdldCBzb3VyY2UgY29kZSBvZiBzY3JpcHQgZnJvbQotICAgIFN0cmluZyBtX3NjcmlwdFRhZ1Ny
Y0F0dHJWYWx1ZTsKLSAgICBTdHJpbmcgbV9zY3JpcHRUYWdDaGFyc2V0QXR0clZhbHVlOwotICAg
IC8vIHRoZSBIVE1MIGNvZGUgd2Ugd2lsbCBwYXJzZSBhZnRlciB0aGUgZXh0ZXJuYWwgc2NyaXB0
IHdlIGFyZSB3YWl0aW5nIGZvciBoYXMgbG9hZGVkCi0gICAgU2VnbWVudGVkU3RyaW5nIG1fcGVu
ZGluZ1NyYzsKLQotICAgIC8vIHRoZSBIVE1MIGNvZGUgd2Ugd2lsbCBwYXJzZSBhZnRlciB0aGlz
IHBhcnRpY3VsYXIgc2NyaXB0IGhhcwotICAgIC8vIGxvYWRlZCwgYnV0IGJlZm9yZSBhbGwgcGVu
ZGluZyBIVE1MCi0gICAgU2VnbWVudGVkU3RyaW5nKiBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjOwot
Ci0gICAgLy8gdHJ1ZSBpZiB3ZSBhcmUgZXhlY3V0aW5nIGEgc2NyaXB0IHdoaWxlIHBhcnNpbmcg
YSBkb2N1bWVudC4gVGhpcyBjYXVzZXMgdGhlIHBhcnNpbmcgb2YKLSAgICAvLyB0aGUgb3V0cHV0
IG9mIHRoZSBzY3JpcHQgdG8gYmUgcG9zdHBvbmVkIHVudGlsIGFmdGVyIHRoZSBzY3JpcHQgaGFz
IGZpbmlzaGVkIGV4ZWN1dGluZwotICAgIGludCBtX2V4ZWN1dGluZ1NjcmlwdDsKLSAgICBEZXF1
ZTxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+ID4gbV9wZW5kaW5nU2NyaXB0czsK
LSAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IG1fc2NyaXB0Tm9kZTsKLQotICAgIGJvb2wg
bV9yZXF1ZXN0aW5nU2NyaXB0OwotICAgIGJvb2wgbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxl
c2hlZXRzOwotCi0gICAgLy8gaWYgd2UgZm91bmQgb25lIGJyb2tlbiBjb21tZW50LCB0aGVyZSBh
cmUgbW9zdCBsaWtlbHkgb3RoZXJzIGFzIHdlbGwKLSAgICAvLyBzdG9yZSBhIGZsYWcgdG8gZ2V0
IHJpZCBvZiB0aGUgTyhuXjIpIGJlaGF2aW91ciBpbiBzdWNoIGEgY2FzZS4KLSAgICBib29sIG1f
YnJva2VuQ29tbWVudHM7Ci0gICAgLy8gY3VycmVudCBsaW5lIG51bWJlcgotICAgIGludCBtX2xp
bmVOdW1iZXI7Ci0gICAgaW50IG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlcjsKLSAg
ICBpbnQgbV9jdXJyZW50VGFnU3RhcnRMaW5lTnVtYmVyOwotCi0gICAgZG91YmxlIG1fdG9rZW5p
emVyVGltZURlbGF5OwotICAgIGludCBtX3Rva2VuaXplckNodW5rU2l6ZTsKLQotICAgIC8vIFRo
ZSB0aW1lciBmb3IgY29udGludWVkIHByb2Nlc3NpbmcuCi0gICAgVGltZXI8SFRNTERvY3VtZW50
UGFyc2VyPiBtX3RpbWVyOwotCi0gICAgLy8gVGhlIHRpbWVyIGZvciBjb250aW51ZWQgZXhlY3V0
aW5nIGV4dGVybmFsIHNjcmlwdHMuCi0gICAgVGltZXI8SFRNTERvY3VtZW50UGFyc2VyPiBtX2V4
dGVybmFsU2NyaXB0c1RpbWVyOwotCi0vLyBUaGlzIGJ1ZmZlciBjYW4gaG9sZCBhcmJpdHJhcmls
eSBsb25nIHVzZXItZGVmaW5lZCBhdHRyaWJ1dGUgbmFtZXMsIHN1Y2ggYXMgaW4gRU1CRUQgdGFn
cy4KLS8vIFNvIGFueSBmaXhlZCBudW1iZXIgbWlnaHQgYmUgdG9vIHNtYWxsLCBidXQgcmF0aGVy
IHRoYW4gcmV3cml0aW5nIGFsbCB1c2FnZSBvZiB0aGlzIGJ1ZmZlcgotLy8gd2UnbGwganVzdCBt
YWtlIGl0IGxhcmdlIGVub3VnaCB0byBoYW5kbGUgYWxsIGltYWdpbmFibGUgY2FzZXMuCi0jZGVm
aW5lIENCVUZMRU4gMTAyNAotICAgIFVDaGFyIG1fY0J1ZmZlcltDQlVGTEVOICsgMl07Ci0gICAg
dW5zaWduZWQgaW50IG1fY0J1ZmZlclBvczsKLQotICAgIFNlZ21lbnRlZFN0cmluZyBtX3NyYzsK
LSAgICBEb2N1bWVudCogbV9kb2M7Ci0gICAgT3duUHRyPExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I+IG1fdHJlZUNvbnN0cnVjdG9yOwotICAgIGJvb2wgbV9pbldyaXRlOwotICAgIGJvb2wgbV9m
cmFnbWVudDsKLSAgICBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gbV9zY3JpcHRpbmdQZXJt
aXNzaW9uOwotCi0gICAgT3duUHRyPFByZWxvYWRTY2FubmVyPiBtX3ByZWxvYWRTY2FubmVyOwot
fTsKLQotdm9pZCBwYXJzZUxlZ2FjeUhUTUxEb2N1bWVudEZyYWdtZW50KGNvbnN0IFN0cmluZyYs
IERvY3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVu
dFNjcmlwdGluZ0FsbG93ZWQpOwotCi1VQ2hhciBkZWNvZGVOYW1lZEVudGl0eShjb25zdCBjaGFy
Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhUTUxUb2tlbml6ZXJf
aApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24g
NjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgIkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkxhYmVsc05vZGVMaXN0LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxQYXJzZXJTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
UGFyc2VyU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFBhcnNlclNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgc3Rh
dGljIGludCBwYXJzZXJDaHVua1NpemUoUGFnZSogcGFnZSkKIHsKICAgICAvLyBGSVhNRTogV2Ug
bWF5IG5lZWQgdG8gZGl2aWRlIHRoZSB2YWx1ZSBmcm9tIGN1c3RvbUhUTUxUb2tlbml6ZXJDaHVu
a1NpemUKICAgICAvLyBieSBzb21lIGNvbnN0YW50IHRvIHRyYW5zbGF0ZSBmcm9tIHRoZSAiY2hh
cmFjdGVyIiBiYXNlZCBiZWhhdmlvciBvZiB0aGUKLSAgICAvLyBvbGQgSFRNTERvY3VtZW50UGFy
c2VyIHRvIHRoZSB0b2tlbi1iYXNlZCBiZWhhdmlvciBvZiB0aGlzIHBhcnNlci4KKyAgICAvLyBv
bGQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyIHRvIHRoZSB0b2tlbi1iYXNlZCBiZWhhdmlvciBv
ZiB0aGlzIHBhcnNlci4KICAgICBpZiAocGFnZSAmJiBwYWdlLT5oYXNDdXN0b21IVE1MVG9rZW5p
emVyQ2h1bmtTaXplKCkpCiAgICAgICAgIHJldHVybiBwYWdlLT5jdXN0b21IVE1MVG9rZW5pemVy
Q2h1bmtTaXplKCk7CiAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZXJDaHVua1NpemU7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2MTY1OCkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dERv
Y3VtZW50LmgiCiAKQEAgLTUzLDE0ICs1MywxNCBAQCBIVE1MVmlld1NvdXJjZURvY3VtZW50OjpI
VE1MVmlld1NvdXJjZURvCiAKIERvY3VtZW50UGFyc2VyKiBIVE1MVmlld1NvdXJjZURvY3VtZW50
OjpjcmVhdGVQYXJzZXIoKQogewotICAgIC8vIFVzZSBIVE1MRG9jdW1lbnRQYXJzZXIgaWYgYXBw
bGljYWJsZSwgb3RoZXJ3aXNlIHVzZSBUZXh0RG9jdW1lbnRQYXJzZXIuCisgICAgLy8gVXNlIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlciBpZiBhcHBsaWNhYmxlLCBvdGhlcndpc2UgdXNlIFRleHRE
b2N1bWVudFBhcnNlci4KICAgICBpZiAobV90eXBlID09ICJ0ZXh0L2h0bWwiIHx8IG1fdHlwZSA9
PSAiYXBwbGljYXRpb24veGh0bWwreG1sIiB8fCBtX3R5cGUgPT0gImltYWdlL3N2Zyt4bWwiIHx8
IERPTUltcGxlbWVudGF0aW9uOjppc1hNTE1JTUVUeXBlKG1fdHlwZSkKICNpZiBFTkFCTEUoWEhU
TUxNUCkKICAgICAgICAgfHwgbV90eXBlID09ICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3ht
bCIKICNlbmRpZgogICAgICAgICApIHsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCByZXNwZWN0
IFNldHRpbmdzOjpodG1sNVBhcnNlckVuYWJsZWQoKQotICAgICAgICByZXR1cm4gbmV3IEhUTUxE
b2N1bWVudFBhcnNlcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIodGhpcyk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNyZWF0ZVRleHREb2N1bWVudFBh
cnNlcih0aGlzKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1l
bnQ6OmFkZFZpZXdTb3VyCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgp
LnN0cmluZygpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBpZ25v
cmluZyBjYXNlIHNpbmNlIEhUTUxEb2N1bWVudFBhcnNlciBkb2Vzbid0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBpZ25vcmluZyBjYXNlIHNpbmNlIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlciBkb2Vzbid0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG93
ZXIgbmFtZXMgd2hlbiBwYXNzaW5nIGluIHRva2VucyB0bwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhUTUxWaWV3U291cmNlRG9jdW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRva2VuLT50YWdOYW1lLCAiYmFzZSIpICYmIGVx
dWFsSWdub3JpbmdDYXNlKGF0dHItPm5hbWUoKS5sb2NhbE5hbWUoKSwgImhyZWYiKSkgewpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oCShyZXZpc2lvbiA2MTY1OCkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDE0ICs0MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRN
TFZpZXdTb3VyY2VEb2N1bWVudChmcmFtZSwgbWltZVR5cGUpKTsKICAgICB9CiAKLSAgICB2b2lk
IGFkZFZpZXdTb3VyY2VUb2tlbihUb2tlbiopOyAvLyBVc2VkIGJ5IHRoZSBIVE1MRG9jdW1lbnRQ
YXJzZXIuCisgICAgdm9pZCBhZGRWaWV3U291cmNlVG9rZW4oVG9rZW4qKTsgLy8gVXNlZCBieSB0
aGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLgogICAgIHZvaWQgYWRkVmlld1NvdXJjZVRleHQo
Y29uc3QgU3RyaW5nJik7IC8vIFVzZWQgYnkgdGhlIFRleHREb2N1bWVudFBhcnNlci4KICAgICB2
b2lkIGFkZFZpZXdTb3VyY2VEb2N0eXBlVG9rZW4oRG9jdHlwZVRva2VuKik7CiAKIHByaXZhdGU6
CiAgICAgSFRNTFZpZXdTb3VyY2VEb2N1bWVudChGcmFtZSosIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpOwogCi0gICAgLy8gUmV0dXJucyBIVE1MRG9jdW1lbnRQYXJzZXIgb3IgVGV4dERvY3VtZW50
UGFyc2VyIGJhc2VkIG9uIG1fdHlwZS4KKyAgICAvLyBSZXR1cm5zIExlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlciBvciBUZXh0RG9jdW1lbnRQYXJzZXIgYmFzZWQgb24gbV90eXBlLgogICAgIHZpcnR1
YWwgRG9jdW1lbnRQYXJzZXIqIGNyZWF0ZVBhcnNlcigpOwogCiAgICAgdm9pZCBjcmVhdGVDb250
YWluaW5nVGFibGUoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwCShyZXZpc2lvbiA2MTY1OCkJKGZyb20gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBh
cnNlci5jcHA6NjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMDggQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCisgICAgICAgICAgICAgIChD
KSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCisgICAgICAgICAgICAgIChDKSAxOTk4
IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICAgICAgICAgICAgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAgICAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgICAgICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9w
LmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCisKKyNpbmNsdWRlICJB
dHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNsdWRlICJDYWNoZS5oIgor
I2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1
ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmgi
CisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVmlld1NvdXJj
ZURvY3VtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUaW1lbGluZUFnZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlByZWxvYWRT
Y2FubmVyLmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlNjcmlw
dFZhbHVlLmgiCisjaW5jbHVkZSAiWFNTQXVkaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKKyNpbmNsdWRlICJIVE1MRW50
aXR5TmFtZXMuY3BwIgorCisjZGVmaW5lIFBSRUxPQURfU0NBTk5FUl9FTkFCTEVEIDEKKwordXNp
bmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworLy8gVGhpcyB2YWx1ZSBpcyB1
c2VkIHRvIGRlZmluZSBob3cgbWFueSBsb29wcyAoYXBwcm94aW1hdGVseSB0b2tlbnMpCisvLyB0
aGUgcGFyc2VyIHdpbGwgbWFrZSBiZWZvcmUgY2hlY2tpbmcgaWYgaXQgc2hvdWxkIHlpZWxkLgor
Ly8gVG8gaW5jcmVhc2UgcmVzcG9uc2l2ZW5lc3MgcmVkdWNlIGJvdGggQ2h1bmtTaXplIGFuZCBU
aW1lRGVsYXkgY29udGFudHMuCitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUb2tlbml6ZXJDaHVu
a1NpemUgPSA0MDk2OworCisvLyBGSVhNRTogV2Ugd291bGQgbGlrZSB0aGlzIGNvbnN0YW50IHRv
IGJlIDIwMG1zLgorLy8gWWllbGRpbmcgbW9yZSBhZ2dyZXNzaXZlbHkgcmVzdWx0cyBpbiBpbmNy
ZWFzZWQgcmVzcG9uc2l2ZW5lc3MgYW5kIGJldHRlciBpbmNyZW1lbnRhbCByZW5kZXJpbmcuCisv
LyBJdCBzbG93cyBkb3duIG92ZXJhbGwgcGFnZS1sb2FkIG9uIHNsb3dlciBtYWNoaW5lcywgdGhv
dWdoLCBzbyBmb3Igbm93IHdlIHNldCBhIHZhbHVlIG9mIDUwMC4KKy8vIFRpbWVEZWxheSBjb250
cm9scyB0aGUgbWF4aW11bSB0aW1lIHRoZSBwYXJzZXIgd2lsbCBydW4gYmVmb3JlIHlpZWxkaW5n
LgorLy8gSW5saW5lIHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHRoZSBwYXJzZXIgdG8gZXhj
ZWRlIHRoaXMgbGltaXQuCitzdGF0aWMgY29uc3QgZG91YmxlIGRlZmF1bHRUb2tlbml6ZXJUaW1l
RGVsYXkgPSAwLjUwMDsKKworc3RhdGljIGNvbnN0IGNoYXIgY29tbWVudFN0YXJ0IFtdID0gIjwh
LS0iOworc3RhdGljIGNvbnN0IGNoYXIgZG9jdHlwZVN0YXJ0IFtdID0gIjwhZG9jdHlwZSI7Citz
dGF0aWMgY29uc3QgY2hhciBwdWJsaWNTdGFydCBbXSA9ICJwdWJsaWMiOworc3RhdGljIGNvbnN0
IGNoYXIgc3lzdGVtU3RhcnQgW10gPSAic3lzdGVtIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNjcmlw
dEVuZCBbXSA9ICI8L3NjcmlwdCI7CitzdGF0aWMgY29uc3QgY2hhciB4bXBFbmQgW10gPSAiPC94
bXAiOworc3RhdGljIGNvbnN0IGNoYXIgc3R5bGVFbmQgW10gPSAgIjwvc3R5bGUiOworc3RhdGlj
IGNvbnN0IGNoYXIgdGV4dGFyZWFFbmQgW10gPSAiPC90ZXh0YXJlYSI7CitzdGF0aWMgY29uc3Qg
Y2hhciB0aXRsZUVuZCBbXSA9ICI8L3RpdGxlIjsKK3N0YXRpYyBjb25zdCBjaGFyIGlmcmFtZUVu
ZCBbXSA9ICI8L2lmcmFtZSI7CisKKy8vIEZ1bGwgc3VwcG9ydCBmb3IgTVMgV2luZG93cyBleHRl
bnNpb25zIHRvIExhdGluLTEuCisvLyBUZWNobmljYWxseSB0aGVzZSBleHRlbnNpb25zIHNob3Vs
ZCBvbmx5IGJlIGFjdGl2YXRlZCBmb3IgcGFnZXMKKy8vIG1hcmtlZCAid2luZG93cy0xMjUyIiBv
ciAiY3AxMjUyIiwgYnV0CisvLyBpbiB0aGUgc3RhbmRhcmQgTWljcm9zb2Z0IHdheSwgdGhlc2Ug
ZXh0ZW5zaW9ucyBpbmZlY3QgaHVuZHJlZHMgb2YgdGhvdXNhbmRzCisvLyBvZiB3ZWIgcGFnZXMu
ICBOb3RlIHRoYXQgcGVvcGxlIHdpdGggbm9uLWxhdGluLTEgTWljcm9zb2Z0IGV4dGVuc2lvbnMK
Ky8vIGFyZSBTT0wuCisvLworLy8gU2VlOiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZ2xvYmFs
ZGV2L3JlZmVyZW5jZS9XaW5DUC5hc3AKKy8vICAgICAgaHR0cDovL3d3dy5iYnNpbmMuY29tL2lz
bzg4NTkuaHRtbAorLy8gICAgICBodHRwOi8vd3d3Lm9idmlvdXNseS5jb20vCisvLworLy8gVGhl
cmUgbWF5IGJlIGJldHRlciBlcXVpdmFsZW50cworCisvLyBXZSBvbmx5IG5lZWQgdGhpcyBmb3Ig
ZW50aXRpZXMuIEZvciBub24tZW50aXR5IHRleHQsIHdlIGhhbmRsZSB0aGlzIGluIHRoZSB0ZXh0
IGVuY29kaW5nLgorCitzdGF0aWMgY29uc3QgVUNoYXIgd2luZG93c0xhdGluMUV4dGVuc2lvbkFy
cmF5WzMyXSA9IHsKKyAgICAweDIwQUMsIDB4MDA4MSwgMHgyMDFBLCAweDAxOTIsIDB4MjAxRSwg
MHgyMDI2LCAweDIwMjAsIDB4MjAyMSwgLy8gODAtODcKKyAgICAweDAyQzYsIDB4MjAzMCwgMHgw
MTYwLCAweDIwMzksIDB4MDE1MiwgMHgwMDhELCAweDAxN0QsIDB4MDA4RiwgLy8gODgtOEYKKyAg
ICAweDAwOTAsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMs
IDB4MjAxNCwgLy8gOTAtOTcKKyAgICAweDAyREMsIDB4MjEyMiwgMHgwMTYxLCAweDIwM0EsIDB4
MDE1MywgMHgwMDlELCAweDAxN0UsIDB4MDE3OCAgLy8gOTgtOUYKK307CisKK3N0YXRpYyBpbmxp
bmUgVUNoYXIgZml4VXBDaGFyKFVDaGFyIGMpCit7CisgICAgaWYgKChjICYgfjB4MUYpICE9IDB4
MDA4MCkKKyAgICAgICAgcmV0dXJuIGM7CisgICAgcmV0dXJuIHdpbmRvd3NMYXRpbjFFeHRlbnNp
b25BcnJheVtjIC0gMHg4MF07Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCB0YWdNYXRjaChjb25z
dCBjaGFyKiBzMSwgY29uc3QgVUNoYXIqIHMyLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBj
aGFyIGMxID0gczFbaV07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdWMxID0gdG9BU0NJSVVwcGVy
KHN0YXRpY19jYXN0PGNoYXI+KGMxKSk7CisgICAgICAgIFVDaGFyIGMyID0gczJbaV07CisgICAg
ICAgIGlmIChjMSAhPSBjMiAmJiB1YzEgIT0gYzIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBUb2tlbjo6YWRkQXR0
cmlidXRlKEF0b21pY1N0cmluZyYgYXR0ck5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmli
dXRlVmFsdWUsIGJvb2wgdmlld1NvdXJjZU1vZGUpCit7CisgICAgaWYgKCFhdHRyTmFtZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFhdHRyTmFtZS5jb250YWlucygnLycpKTsKKyAgICAg
ICAgUmVmUHRyPEF0dHJpYnV0ZT4gYSA9IEF0dHJpYnV0ZTo6Y3JlYXRlTWFwcGVkKGF0dHJOYW1l
LCBhdHRyaWJ1dGVWYWx1ZSk7CisgICAgICAgIGlmICghYXR0cnMpIHsKKyAgICAgICAgICAgIGF0
dHJzID0gTmFtZWROb2RlTWFwOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF0dHJzLT5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEwKTsKKyAgICAgICAgfQorICAgICAgICBhdHRycy0+aW5zZXJ0QXR0
cmlidXRlKGEucmVsZWFzZSgpLCB2aWV3U291cmNlTW9kZSk7CisgICAgfQorCisgICAgYXR0ck5h
bWUgPSBlbXB0eUF0b207Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFRNTERvY3Vt
ZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wgcmVw
b3J0RXJyb3JzKQorICAgIDogRG9jdW1lbnRQYXJzZXIoKQorICAgICwgbV9idWZmZXIoMCkKKyAg
ICAsIG1fc2NyaXB0Q29kZSgwKQorICAgICwgbV9zY3JpcHRDb2RlU2l6ZSgwKQorICAgICwgbV9z
Y3JpcHRDb2RlQ2FwYWNpdHkoMCkKKyAgICAsIG1fc2NyaXB0Q29kZVJlc3luYygwKQorICAgICwg
bV9leGVjdXRpbmdTY3JpcHQoMCkKKyAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKKyAg
ICAsIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyhmYWxzZSkKKyAgICAsIG1fdGlt
ZXIodGhpcywgJkhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCkKKyAgICAsIG1fZXh0ZXJu
YWxTY3JpcHRzVGltZXIodGhpcywgJkhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFs
U2NyaXB0c1RpbWVyRmlyZWQpCisgICAgLCBtX2RvYyhkb2MpCisgICAgLCBtX3RyZWVDb25zdHJ1
Y3RvcihuZXcgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcihkb2MsIHJlcG9ydEVycm9ycykpCisg
ICAgLCBtX2luV3JpdGUoZmFsc2UpCisgICAgLCBtX2ZyYWdtZW50KGZhbHNlKQorICAgICwgbV9z
Y3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKK3sKKyAgICBiZWdp
bigpOworfQorCitIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MVmll
d1NvdXJjZURvY3VtZW50KiBkb2MpCisgICAgOiBEb2N1bWVudFBhcnNlcih0cnVlKQorICAgICwg
bV9idWZmZXIoMCkKKyAgICAsIG1fc2NyaXB0Q29kZSgwKQorICAgICwgbV9zY3JpcHRDb2RlU2l6
ZSgwKQorICAgICwgbV9zY3JpcHRDb2RlQ2FwYWNpdHkoMCkKKyAgICAsIG1fc2NyaXB0Q29kZVJl
c3luYygwKQorICAgICwgbV9leGVjdXRpbmdTY3JpcHQoMCkKKyAgICAsIG1fcmVxdWVzdGluZ1Nj
cmlwdChmYWxzZSkKKyAgICAsIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyhmYWxz
ZSkKKyAgICAsIG1fdGltZXIodGhpcywgJkhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCkK
KyAgICAsIG1fZXh0ZXJuYWxTY3JpcHRzVGltZXIodGhpcywgJkhUTUxEb2N1bWVudFBhcnNlcjo6
ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c1RpbWVyRmlyZWQpCisgICAgLCBtX2RvYyhkb2MpCisgICAg
LCBtX2luV3JpdGUoZmFsc2UpCisgICAgLCBtX2ZyYWdtZW50KGZhbHNlKQorICAgICwgbV9zY3Jp
cHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKK3sKKyAgICBiZWdpbigp
OworfQorCitIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZy
YWdtZW50KiBmcmFnLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlz
c2lvbikKKyAgICA6IG1fYnVmZmVyKDApCisgICAgLCBtX3NjcmlwdENvZGUoMCkKKyAgICAsIG1f
c2NyaXB0Q29kZVNpemUoMCkKKyAgICAsIG1fc2NyaXB0Q29kZUNhcGFjaXR5KDApCisgICAgLCBt
X3NjcmlwdENvZGVSZXN5bmMoMCkKKyAgICAsIG1fZXhlY3V0aW5nU2NyaXB0KDApCisgICAgLCBt
X3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCisgICAgLCBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5
bGVzaGVldHMoZmFsc2UpCisgICAgLCBtX3RpbWVyKHRoaXMsICZIVE1MRG9jdW1lbnRQYXJzZXI6
OnRpbWVyRmlyZWQpCisgICAgLCBtX2V4dGVybmFsU2NyaXB0c1RpbWVyKHRoaXMsICZIVE1MRG9j
dW1lbnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKQorICAgICwgbV9k
b2MoZnJhZy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yKGZyYWcsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQorICAgICwgbV9p
bldyaXRlKGZhbHNlKQorICAgICwgbV9mcmFnbWVudCh0cnVlKQorICAgICwgbV9zY3JpcHRpbmdQ
ZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgYmVnaW4oKTsKK30KKwordm9p
ZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc2V0KCkKK3sKKyAgICBBU1NFUlQobV9leGVjdXRpbmdT
Y3JpcHQgPT0gMCk7CisKKyAgICB3aGlsZSAoIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpKSB7
CisgICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gY3MgPSBtX3BlbmRp
bmdTY3JpcHRzLnRha2VGaXJzdCgpOworICAgICAgICBBU1NFUlQoY2FjaGUoKS0+ZGlzYWJsZWQo
KSB8fCBjcy0+YWNjZXNzQ291bnQoKSA+IDApOworICAgICAgICBjcy0+cmVtb3ZlQ2xpZW50KHRo
aXMpOworICAgIH0KKworICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICBtX2J1ZmZlciA9IG1f
ZGVzdCA9IDA7CisgICAgbV9idWZmZXJTaXplID0gMDsKKworICAgIGZhc3RGcmVlKG1fc2NyaXB0
Q29kZSk7CisgICAgbV9zY3JpcHRDb2RlID0gMDsKKyAgICBtX3NjcmlwdENvZGVTaXplID0gbV9z
Y3JpcHRDb2RlQ2FwYWNpdHkgPSBtX3NjcmlwdENvZGVSZXN5bmMgPSAwOworCisgICAgbV90aW1l
ci5zdG9wKCk7CisgICAgbV9leHRlcm5hbFNjcmlwdHNUaW1lci5zdG9wKCk7CisKKyAgICBtX3N0
YXRlLnNldEFsbG93WWllbGQoZmFsc2UpOworICAgIG1fc3RhdGUuc2V0Rm9yY2VTeW5jaHJvbm91
cyhmYWxzZSk7CisKKyAgICBtX2N1cnJlbnRUb2tlbi5yZXNldCgpOworICAgIG1fZG9jdHlwZVRv
a2VuLnJlc2V0KCk7CisgICAgbV9kb2N0eXBlU2VhcmNoQ291bnQgPSAwOworICAgIG1fZG9jdHlw
ZVNlY29uZGFyeVNlYXJjaENvdW50ID0gMDsKKyAgICBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5
bGVzaGVldHMgPSBmYWxzZTsKK30KKwordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmJlZ2luKCkK
K3sKKyAgICBtX2V4ZWN1dGluZ1NjcmlwdCA9IDA7CisgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0g
ZmFsc2U7CisgICAgbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzID0gZmFsc2U7Cisg
ICAgbV9zdGF0ZS5zZXRMb2FkaW5nRXh0U2NyaXB0KGZhbHNlKTsKKyAgICByZXNldCgpOworICAg
IG1fYnVmZmVyU2l6ZSA9IDI1NDsKKyAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4o
ZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogMjU0KSk7CisgICAgbV9kZXN0ID0gbV9idWZmZXI7
CisgICAgdHF1b3RlID0gTm9RdW90ZTsKKyAgICBzZWFyY2hDb3VudCA9IDA7CisgICAgbV9zdGF0
ZS5zZXRFbnRpdHlTdGF0ZShOb0VudGl0eSk7CisgICAgbV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUg
PSBTdHJpbmcoKTsKKyAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRQcmVw
ZW5kaW5nU3JjID0gMDsKKyAgICBtX25vTW9yZURhdGEgPSBmYWxzZTsKKyAgICBtX2Jyb2tlbkNv
bW1lbnRzID0gZmFsc2U7CisgICAgbV9icm9rZW5TZXJ2ZXIgPSBmYWxzZTsKKyAgICBtX2xpbmVO
dW1iZXIgPSAwOworICAgIG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlciA9IDA7Cisg
ICAgbV9jdXJyZW50VGFnU3RhcnRMaW5lTnVtYmVyID0gMDsKKyAgICBtX3N0YXRlLnNldEZvcmNl
U3luY2hyb25vdXMoZmFsc2UpOworCisgICAgUGFnZSogcGFnZSA9IG1fZG9jLT5wYWdlKCk7Cisg
ICAgaWYgKHBhZ2UgJiYgcGFnZS0+aGFzQ3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSgpKQor
ICAgICAgICBtX3Rva2VuaXplclRpbWVEZWxheSA9IHBhZ2UtPmN1c3RvbUhUTUxUb2tlbml6ZXJU
aW1lRGVsYXkoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdG9rZW5pemVyVGltZURlbGF5ID0gZGVm
YXVsdFRva2VuaXplclRpbWVEZWxheTsKKworICAgIGlmIChwYWdlICYmIHBhZ2UtPmhhc0N1c3Rv
bUhUTUxUb2tlbml6ZXJDaHVua1NpemUoKSkKKyAgICAgICAgbV90b2tlbml6ZXJDaHVua1NpemUg
PSBwYWdlLT5jdXN0b21IVE1MVG9rZW5pemVyQ2h1bmtTaXplKCk7CisgICAgZWxzZQorICAgICAg
ICBtX3Rva2VuaXplckNodW5rU2l6ZSA9IGRlZmF1bHRUb2tlbml6ZXJDaHVua1NpemU7Cit9CisK
K3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgZm9yY2Up
Cit7CisgICAgbV9zdGF0ZS5zZXRGb3JjZVN5bmNocm9ub3VzKGZvcmNlKTsKK30KKworSFRNTERv
Y3VtZW50UGFyc2VyOjpTdGF0ZSBIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NMaXN0aW5nKFNl
Z21lbnRlZFN0cmluZyBsaXN0LCBTdGF0ZSBzdGF0ZSkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IGFkZHMgdGhlIGxpc3RpbmcgJ2xpc3QnIGFzCisgICAgLy8gcHJlZm9ybWF0dGVkIHRleHQtdG9r
ZW5zIHRvIHRoZSB0b2tlbi1jb2xsZWN0aW9uCisgICAgd2hpbGUgKCFsaXN0LmlzRW1wdHkoKSkg
eworICAgICAgICBpZiAoc3RhdGUuc2tpcExGKCkpIHsKKyAgICAgICAgICAgIHN0YXRlLnNldFNr
aXBMRihmYWxzZSk7CisgICAgICAgICAgICBpZiAoKmxpc3QgPT0gJ1xuJykgeworICAgICAgICAg
ICAgICAgIGxpc3QuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY2hlY2tCdWZmZXIoKTsKKworICAgICAgICBp
ZiAoKmxpc3QgPT0gJ1xuJyB8fCAqbGlzdCA9PSAnXHInKSB7CisgICAgICAgICAgICBpZiAoc3Rh
dGUuZGlzY2FyZExGKCkpCisgICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoaXMgTEYKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5zZXREaXNjYXJkTEYoZmFsc2UpOyAvLyBXZSBoYXZlIGRpc2NhcmRl
ZCAxIExGCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKm1fZGVzdCsrID0gJ1xu
JzsKKworICAgICAgICAgICAgLyogQ2hlY2sgZm9yIE1TLURPUyBDUkxGIHNlcXVlbmNlICovCisg
ICAgICAgICAgICBpZiAoKmxpc3QgPT0gJ1xyJykKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRT
a2lwTEYodHJ1ZSk7CisKKyAgICAgICAgICAgIGxpc3QuYWR2YW5jZSgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc3RhdGUuc2V0RGlzY2FyZExGKGZhbHNlKTsKKyAgICAgICAgICAg
ICptX2Rlc3QrKyA9ICpsaXN0OworICAgICAgICAgICAgbGlzdC5hZHZhbmNlKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK0hUTUxEb2N1bWVudFBhcnNlcjo6
U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZU5vbkhUTUxUZXh0KFNlZ21lbnRlZFN0cmlu
ZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUuaW5UZXh0QXJlYSgpIHx8
IHN0YXRlLmluVGl0bGUoKSB8fCBzdGF0ZS5pbklGcmFtZSgpIHx8ICFzdGF0ZS5oYXNFbnRpdHlT
dGF0ZSgpKTsKKyAgICBBU1NFUlQoIXN0YXRlLmhhc1RhZ1N0YXRlKCkpOworICAgIEFTU0VSVChz
dGF0ZS5pblhtcCgpICsgc3RhdGUuaW5UZXh0QXJlYSgpICsgc3RhdGUuaW5UaXRsZSgpICsgc3Rh
dGUuaW5TdHlsZSgpICsgc3RhdGUuaW5TY3JpcHQoKSArIHN0YXRlLmluSUZyYW1lKCkgPT0gMSk7
CisgICAgaWYgKHN0YXRlLmluU2NyaXB0KCkgJiYgIW1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGlu
ZU51bWJlcikKKyAgICAgICAgbV9jdXJyZW50U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyID0gbV9s
aW5lTnVtYmVyOworCisgICAgaWYgKHN0YXRlLmluQ29tbWVudCgpKQorICAgICAgICBzdGF0ZSA9
IHBhcnNlQ29tbWVudChzcmMsIHN0YXRlKTsKKworICAgIGludCBsYXN0RGVjb2RlZEVudGl0eVBv
c2l0aW9uID0gLTE7CisgICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNoZWNr
U2NyaXB0QnVmZmVyKCk7CisgICAgICAgIFVDaGFyIGNoID0gKnNyYzsKKworICAgICAgICBpZiAo
IW1fc2NyaXB0Q29kZVJlc3luYyAmJiAhbV9icm9rZW5Db21tZW50cyAmJgorICAgICAgICAgICAg
IXN0YXRlLmluWG1wKCkgJiYgY2ggPT0gJy0nICYmIG1fc2NyaXB0Q29kZVNpemUgPj0gMyAmJiAh
c3JjLmVzY2FwZWQoKSAmJgorICAgICAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNp
emUgLSAzXSA9PSAnPCcgJiYgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUgLSAyXSA9PSAn
IScgJiYgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUgLSAxXSA9PSAnLScgJiYKKyAgICAg
ICAgICAgIChsYXN0RGVjb2RlZEVudGl0eVBvc2l0aW9uIDwgbV9zY3JpcHRDb2RlU2l6ZSAtIDMp
KSB7CisgICAgICAgICAgICBzdGF0ZS5zZXRJbkNvbW1lbnQodHJ1ZSk7CisgICAgICAgICAgICBz
dGF0ZSA9IHBhcnNlQ29tbWVudChzcmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChtX3NjcmlwdENvZGVSZXN5bmMgJiYgIXRxdW90ZSAmJiBj
aCA9PSAnPicpIHsKKyAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAg
ICAgICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSBtX3NjcmlwdENvZGVSZXN5bmMgLSAxOworICAg
ICAgICAgICAgbV9zY3JpcHRDb2RlUmVzeW5jID0gMDsKKyAgICAgICAgICAgIG1fc2NyaXB0Q29k
ZVttX3NjcmlwdENvZGVTaXplXSA9IG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplICsgMV0g
PSAwOworICAgICAgICAgICAgaWYgKHN0YXRlLmluU2NyaXB0KCkpCisgICAgICAgICAgICAgICAg
c3RhdGUgPSBzY3JpcHRIYW5kbGVyKHN0YXRlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHN0YXRlID0gcHJvY2Vzc0xpc3RpbmcoU2VnbWVudGVkU3RyaW5nKG1fc2NyaXB0
Q29kZSwgbV9zY3JpcHRDb2RlU2l6ZSksIHN0YXRlKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNz
VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5TdHlsZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPSBzdHlsZVRhZy5sb2NhbE5hbWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmluVGV4dEFyZWEoKSkgeworICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0gdGV4dGFyZWFUYWcubG9jYWxO
YW1lKCk7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmJlZ2luVGFnID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pblRpdGxlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9IHRpdGxlVGFnLmxvY2FsTmFt
ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGZhbHNl
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaW5YbXAoKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0geG1wVGFnLmxvY2FsTmFtZSgpOwor
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaW5JRnJhbWUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0gaWZyYW1lVGFnLmxvY2FsTmFtZSgpOwor
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5zZXRJblN0eWxlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5z
ZXRJblNjcmlwdChmYWxzZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5UZXh0QXJlYShm
YWxzZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5UaXRsZShmYWxzZSk7CisgICAgICAg
ICAgICAgICAgc3RhdGUuc2V0SW5YbXAoZmFsc2UpOworICAgICAgICAgICAgICAgIHN0YXRlLnNl
dEluSUZyYW1lKGZhbHNlKTsKKyAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOworICAg
ICAgICAgICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSBtX3NjcmlwdENvZGVSZXN5bmMgPSAwOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0YXRlOworICAgICAgICB9CisgICAg
ICAgIC8vIHBvc3NpYmxlIGVuZCBvZiB0YWduYW1lLCBsZXRzIGNoZWNrLgorICAgICAgICBpZiAo
IW1fc2NyaXB0Q29kZVJlc3luYyAmJiAhc3RhdGUuZXNjYXBlZCgpICYmICFzcmMuZXNjYXBlZCgp
ICYmIChjaCA9PSAnPicgfHwgY2ggPT0gJy8nIHx8IGlzQVNDSUlTcGFjZShjaCkpICYmCisgICAg
ICAgICAgICAgbV9zY3JpcHRDb2RlU2l6ZSA+PSBtX3NlYXJjaFN0b3BwZXJMZW5ndGggJiYKKyAg
ICAgICAgICAgICB0YWdNYXRjaChtX3NlYXJjaFN0b3BwZXIsIG1fc2NyaXB0Q29kZSArIG1fc2Ny
aXB0Q29kZVNpemUgLSBtX3NlYXJjaFN0b3BwZXJMZW5ndGgsIG1fc2VhcmNoU3RvcHBlckxlbmd0
aCkgJiYKKyAgICAgICAgICAgICAobGFzdERlY29kZWRFbnRpdHlQb3NpdGlvbiA8IG1fc2NyaXB0
Q29kZVNpemUgLSBtX3NlYXJjaFN0b3BwZXJMZW5ndGgpKSB7CisgICAgICAgICAgICBtX3Njcmlw
dENvZGVSZXN5bmMgPSBtX3NjcmlwdENvZGVTaXplLW1fc2VhcmNoU3RvcHBlckxlbmd0aCsxOwor
ICAgICAgICAgICAgdHF1b3RlID0gTm9RdW90ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChtX3NjcmlwdENvZGVSZXN5bmMgJiYgIXN0YXRlLmVzY2FwZWQo
KSkgeworICAgICAgICAgICAgaWYgKGNoID09ICdcIicpCisgICAgICAgICAgICAgICAgdHF1b3Rl
ID0gKHRxdW90ZSA9PSBOb1F1b3RlKSA/IERvdWJsZVF1b3RlIDogKCh0cXVvdGUgPT0gU2luZ2xl
UXVvdGUpID8gU2luZ2xlUXVvdGUgOiBOb1F1b3RlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNo
ID09ICdcJycpCisgICAgICAgICAgICAgICAgdHF1b3RlID0gKHRxdW90ZSA9PSBOb1F1b3RlKSA/
IFNpbmdsZVF1b3RlIDogKHRxdW90ZSA9PSBEb3VibGVRdW90ZSkgPyBEb3VibGVRdW90ZSA6IE5v
UXVvdGU7CisgICAgICAgICAgICBlbHNlIGlmICh0cXVvdGUgIT0gTm9RdW90ZSAmJiAoY2ggPT0g
J1xyJyB8fCBjaCA9PSAnXG4nKSkKKyAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwor
ICAgICAgICB9CisgICAgICAgIHN0YXRlLnNldEVzY2FwZWQoIXN0YXRlLmVzY2FwZWQoKSAmJiBj
aCA9PSAnXFwnKTsKKyAgICAgICAgaWYgKCFtX3NjcmlwdENvZGVSZXN5bmMgJiYgKHN0YXRlLmlu
VGV4dEFyZWEoKSB8fCBzdGF0ZS5pblRpdGxlKCkgfHwgc3RhdGUuaW5JRnJhbWUoKSkgJiYgIXNy
Yy5lc2NhcGVkKCkgJiYgY2ggPT0gJyYnKSB7CisgICAgICAgICAgICBVQ2hhciogc2NyaXB0Q29k
ZURlc3QgPSBtX3NjcmlwdENvZGUgKyBtX3NjcmlwdENvZGVTaXplOworICAgICAgICAgICAgc3Jj
LmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgc3RhdGUgPSBwYXJzZUVudGl0
eShzcmMsIHNjcmlwdENvZGVEZXN0LCBzdGF0ZSwgbV9jQnVmZmVyUG9zLCB0cnVlLCBmYWxzZSk7
CisgICAgICAgICAgICBpZiAoc2NyaXB0Q29kZURlc3QgPT0gbV9zY3JpcHRDb2RlICsgbV9zY3Jp
cHRDb2RlU2l6ZSkKKyAgICAgICAgICAgICAgICBsYXN0RGVjb2RlZEVudGl0eVBvc2l0aW9uID0g
bV9zY3JpcHRDb2RlU2l6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nj
cmlwdENvZGVTaXplID0gc2NyaXB0Q29kZURlc3QgLSBtX3NjcmlwdENvZGU7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZSsrXSA9IGNo
OworICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBzdGF0ZTsKK30KKworSFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBI
VE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdEhhbmRsZXIoU3RhdGUgc3RhdGUpCit7CisgICAgLy8g
V2UgYXJlIGluc2lkZSBhIDxzY3JpcHQ+CisgICAgYm9vbCBkb1NjcmlwdEV4ZWMgPSBmYWxzZTsK
KyAgICBpbnQgc3RhcnRMaW5lID0gbV9jdXJyZW50U2NyaXB0VGFnU3RhcnRMaW5lTnVtYmVyICsg
MTsgLy8gU2NyaXB0IGxpbmUgbnVtYmVycyBhcmUgMSBiYXNlZCwgSFRNTFRva2VuemllciBsaW5l
IG51bWJlcnMgYXJlIDAgYmFzZWQKKworICAgIC8vIFJlc2V0IG1fY3VycmVudFNjcmlwdFRhZ1N0
YXJ0TGluZU51bWJlciB0byBpbmRpY2F0ZSB0aGF0IHdlJ3ZlIGZpbmlzaGVkIHBhcnNpbmcgdGhl
IGN1cnJlbnQgc2NyaXB0IGVsZW1lbnQKKyAgICBtX2N1cnJlbnRTY3JpcHRUYWdTdGFydExpbmVO
dW1iZXIgPSAwOworCisgICAgLy8gKEJ1Z3ppbGxhIDM4MzcpIFNjcmlwdHMgZm9sbG93aW5nIGEg
ZnJhbWVzZXQgZWxlbWVudCBzaG91bGQgbm90IGV4ZWN1dGUgb3IsCisgICAgLy8gaW4gdGhlIGNh
c2Ugb2YgZXh0ZXJuIHNjcmlwdHMsIGV2ZW4gbG9hZC4KKyAgICBib29sIGZvbGxvd2luZ0ZyYW1l
c2V0ID0gKG1fZG9jLT5ib2R5KCkgJiYgbV9kb2MtPmJvZHkoKS0+aGFzVGFnTmFtZShmcmFtZXNl
dFRhZykpOworCisgICAgQ2FjaGVkU2NyaXB0KiBjcyA9IDA7CisgICAgLy8gZG9uJ3QgbG9hZCBl
eHRlcm5hbCBzY3JpcHRzIGZvciBzdGFuZGFsb25lIGRvY3VtZW50cyAoZm9yIG5vdykKKyAgICBp
ZiAoIWluVmlld1NvdXJjZU1vZGUoKSkgeworICAgICAgICBpZiAoIW1fc2NyaXB0VGFnU3JjQXR0
clZhbHVlLmlzRW1wdHkoKSAmJiBtX2RvYy0+ZnJhbWUoKSkgeworICAgICAgICAgICAgLy8gZm9y
Z2V0IHdoYXQgd2UganVzdCBnb3Q7IGxvYWQgZnJvbSBzcmMgdXJsIGluc3RlYWQKKyAgICAgICAg
ICAgIGlmICghbV90cmVlQ29uc3RydWN0b3ItPnNraXBNb2RlKCkgJiYgIWZvbGxvd2luZ0ZyYW1l
c2V0KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHBhcnNlciBtaWdodCBoYXZlIGJlZW4gc3Rv
cHBlZCBieSBmb3IgZXhhbXBsZSBhIHdpbmRvdy5jbG9zZSBjYWxsIGluIGFuIGVhcmxpZXIgc2Ny
aXB0LgorICAgICAgICAgICAgICAgIC8vIElmIHNvLCB3ZSBkb24ndCB3YW50IHRvIGxvYWQgc2Ny
aXB0cy4KKyAgICAgICAgICAgICAgICBpZiAoIW1fcGFyc2VyU3RvcHBlZCAmJiBtX3NjcmlwdE5v
ZGUtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KG1fc2NyaXB0VGFnU3JjQXR0clZhbHVlKSAmJgor
ICAgICAgICAgICAgICAgICAgICAoY3MgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3Jp
cHQobV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUsIG1fc2NyaXB0VGFnQ2hhcnNldEF0dHJWYWx1ZSkp
KQorICAgICAgICAgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHRzLmFwcGVuZChjcyk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdE5vZGUgPSAwOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsKKyAg
ICAgICAgICAgIG1fc2NyaXB0VGFnU3JjQXR0clZhbHVlID0gU3RyaW5nKCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBQYXJzZSBtX3NjcmlwdENvZGUgY29udGFpbmluZyA8c2Ny
aXB0PiBpbmZvCisgICAgICAgICAgICBkb1NjcmlwdEV4ZWMgPSBtX3NjcmlwdE5vZGUtPnNob3Vs
ZEV4ZWN1dGVBc0phdmFTY3JpcHQoKTsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAg
IGlmICghZG9TY3JpcHRFeGVjKQorICAgICAgICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9j
ZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworI2VuZGlmCisgICAgICAgICAgICBtX3NjcmlwdE5v
ZGUgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGUgPSBwcm9jZXNzTGlzdGluZyhT
ZWdtZW50ZWRTdHJpbmcobV9zY3JpcHRDb2RlLCBtX3NjcmlwdENvZGVTaXplKSwgc3RhdGUpOwor
ICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcHJvY2Vzc1Rva2VuKCk7CisKKyAgICBpZiAobm9kZSAm
JiBtX3NjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7
CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIG5vZGUtPnJlbW92ZShlYyk7Cisg
ICAgICAgIG5vZGUgPSAwOworICAgIH0KKworICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBub2Rl
ID8gbm9kZS0+dGV4dENvbnRlbnQoKSA6ICIiOworICAgIG1fY3VycmVudFRva2VuLnRhZ05hbWUg
PSBzY3JpcHRUYWcubG9jYWxOYW1lKCk7CisgICAgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgPSBm
YWxzZTsKKyAgICBwcm9jZXNzVG9rZW4oKTsKKworICAgIHN0YXRlLnNldEluU2NyaXB0KGZhbHNl
KTsKKyAgICBtX3NjcmlwdENvZGVTaXplID0gbV9zY3JpcHRDb2RlUmVzeW5jID0gMDsKKworICAg
IC8vIEZJWE1FOiBUaGUgc2NyaXB0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQuCisgICAg
aWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRlOworCisgICAgU2Vn
bWVudGVkU3RyaW5nKiBzYXZlZFByZXBlbmRpbmdTcmMgPSBtX2N1cnJlbnRQcmVwZW5kaW5nU3Jj
OworICAgIFNlZ21lbnRlZFN0cmluZyBwcmVwZW5kaW5nU3JjOworICAgIG1fY3VycmVudFByZXBl
bmRpbmdTcmMgPSAmcHJlcGVuZGluZ1NyYzsKKworICAgIGlmICghbV90cmVlQ29uc3RydWN0b3It
PnNraXBNb2RlKCkgJiYgIWZvbGxvd2luZ0ZyYW1lc2V0KSB7CisgICAgICAgIGlmIChjcykgewor
ICAgICAgICAgICAgaWYgKHNhdmVkUHJlcGVuZGluZ1NyYykKKyAgICAgICAgICAgICAgICBzYXZl
ZFByZXBlbmRpbmdTcmMtPmFwcGVuZChtX3NyYyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9wZW5kaW5nU3JjLnByZXBlbmQobV9zcmMpOworICAgICAgICAgICAgc2V0U3Jj
KFNlZ21lbnRlZFN0cmluZygpKTsKKworICAgICAgICAgICAgLy8gdGhlIHJlZigpIGNhbGwgYmVs
b3cgbWF5IGNhbGwgbm90aWZ5RmluaXNoZWQgaWYgdGhlIHNjcmlwdCBpcyBhbHJlYWR5IGluIGNh
Y2hlLAorICAgICAgICAgICAgLy8gYW5kIHRoYXQgbXVja3Mgd2l0aCB0aGUgc3RhdGUgZGlyZWN0
bHksIHNvIHdlIG11c3Qgd3JpdGUgaXQgYmFjayB0byB0aGUgb2JqZWN0LgorICAgICAgICAgICAg
bV9zdGF0ZSA9IHN0YXRlOworICAgICAgICAgICAgYm9vbCBzYXZlZFJlcXVlc3RpbmdTY3JpcHQg
PSBtX3JlcXVlc3RpbmdTY3JpcHQ7CisgICAgICAgICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0
cnVlOworICAgICAgICAgICAgY3MtPmFkZENsaWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVx
dWVzdGluZ1NjcmlwdCA9IHNhdmVkUmVxdWVzdGluZ1NjcmlwdDsKKyAgICAgICAgICAgIHN0YXRl
ID0gbV9zdGF0ZTsKKyAgICAgICAgICAgIC8vIHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVh
ZHkgbG9hZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAorICAgICAgICAgICAgaWYgKCFtX3BlbmRp
bmdTY3JpcHRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRMb2FkaW5nRXh0
U2NyaXB0KHRydWUpOworICAgICAgICB9IGVsc2UgaWYgKCFtX2ZyYWdtZW50ICYmIGRvU2NyaXB0
RXhlYykgeworICAgICAgICAgICAgaWYgKCFtX2V4ZWN1dGluZ1NjcmlwdCkKKyAgICAgICAgICAg
ICAgICBtX3BlbmRpbmdTcmMucHJlcGVuZChtX3NyYyk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcHJlcGVuZGluZ1NyYyA9IG1fc3JjOworICAgICAgICAgICAgc2V0U3JjKFNl
Z21lbnRlZFN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXRlID0gc2NyaXB0RXhlY3V0aW9uKFNj
cmlwdFNvdXJjZUNvZGUoc2NyaXB0U3RyaW5nLCBtX2RvYy0+ZnJhbWUoKSA/IG1fZG9jLT5mcmFt
ZSgpLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSwgc3RhcnRMaW5lKSwgc3RhdGUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX2V4ZWN1dGluZ1NjcmlwdCAmJiAhc3RhdGUubG9h
ZGluZ0V4dFNjcmlwdCgpKSB7CisgICAgICAgIG1fc3JjLmFwcGVuZChtX3BlbmRpbmdTcmMpOwor
ICAgICAgICBtX3BlbmRpbmdTcmMuY2xlYXIoKTsKKyAgICB9IGVsc2UgaWYgKCFwcmVwZW5kaW5n
U3JjLmlzRW1wdHkoKSkgeworICAgICAgICAvLyByZXN0b3JlIGZpcnN0IHNvIHRoYXQgdGhlIHdy
aXRlIGFwcGVuZHMgaW4gdGhlIHJpZ2h0IHBsYWNlCisgICAgICAgIC8vIChkb2VzIG5vdCBodXJ0
IHRvIGRvIGl0IGFnYWluIGJlbG93KQorICAgICAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjID0g
c2F2ZWRQcmVwZW5kaW5nU3JjOworCisgICAgICAgIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBzbGln
aHRseSBtb2RpZmllZCBiaXQgb2Ygb25lIG9mIHRoZSB3cml0ZSgpIGNhc2VzCisgICAgICAgIC8v
IGJlY2F1c2Ugd2Ugd2FudCB0byBwcmVwZW5kIHRvIG1fcGVuZGluZ1NyYyByYXRoZXIgdGhhbiBh
cHBlbmRpbmcKKyAgICAgICAgLy8gaWYgdGhlcmUncyBubyBwcmV2aW91cyBwcmVwZW5kaW5nU3Jj
CisgICAgICAgIGlmICghbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRQcmVwZW5kaW5nU3JjKQorICAgICAgICAgICAgICAgIG1fY3VycmVudFBy
ZXBlbmRpbmdTcmMtPmFwcGVuZChwcmVwZW5kaW5nU3JjKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3BlbmRpbmdTcmMucHJlcGVuZChwcmVwZW5kaW5nU3JjKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgIHdy
aXRlKHByZXBlbmRpbmdTcmMsIGZhbHNlKTsKKyAgICAgICAgICAgIHN0YXRlID0gbV9zdGF0ZTsK
KyAgICAgICAgfQorICAgIH0KKworI2lmIFBSRUxPQURfU0NBTk5FUl9FTkFCTEVECisgICAgaWYg
KCFtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSAmJiAhbV9leGVjdXRpbmdTY3JpcHQpIHsKKyAg
ICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyKQorICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5l
ci5zZXQobmV3IFByZWxvYWRTY2FubmVyKG1fZG9jKSk7CisgICAgICAgIGlmICghbV9wcmVsb2Fk
U2Nhbm5lci0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5i
ZWdpbigpOworICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+d3JpdGUobV9wZW5kaW5nU3Jj
KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMg
PSBzYXZlZFByZXBlbmRpbmdTcmM7CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK0hUTUxEb2N1
bWVudFBhcnNlcjo6U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRFeGVjdXRpb24oY29u
c3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgU3RhdGUgc3RhdGUpCit7CisgICAgaWYg
KG1fZnJhZ21lbnQgfHwgIW1fZG9jLT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gc3RhdGU7Cisg
ICAgbV9leGVjdXRpbmdTY3JpcHQrKzsKKworICAgIFNlZ21lbnRlZFN0cmluZyogc2F2ZWRQcmVw
ZW5kaW5nU3JjID0gbV9jdXJyZW50UHJlcGVuZGluZ1NyYzsKKyAgICBTZWdtZW50ZWRTdHJpbmcg
cHJlcGVuZGluZ1NyYzsKKyAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjID0gJnByZXBlbmRpbmdT
cmM7CisKKyAgICBtX3N0YXRlID0gc3RhdGU7CisgICAgbV9kb2MtPmZyYW1lKCktPnNjcmlwdCgp
LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOworICAgIHN0YXRlID0gbV9zdGF0ZTsKKworICAg
IHN0YXRlLnNldEFsbG93WWllbGQodHJ1ZSk7CisKKyAgICBtX2V4ZWN1dGluZ1NjcmlwdC0tOwor
CisgICAgaWYgKCFtX2V4ZWN1dGluZ1NjcmlwdCAmJiAhc3RhdGUubG9hZGluZ0V4dFNjcmlwdCgp
KSB7CisgICAgICAgIG1fcGVuZGluZ1NyYy5wcmVwZW5kKHByZXBlbmRpbmdTcmMpOworICAgICAg
ICBtX3NyYy5hcHBlbmQobV9wZW5kaW5nU3JjKTsKKyAgICAgICAgbV9wZW5kaW5nU3JjLmNsZWFy
KCk7CisgICAgfSBlbHNlIGlmICghcHJlcGVuZGluZ1NyYy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gcmVzdG9yZSBmaXJzdCBzbyB0aGF0IHRoZSB3cml0ZSBhcHBlbmRzIGluIHRoZSByaWdodCBw
bGFjZQorICAgICAgICAvLyAoZG9lcyBub3QgaHVydCB0byBkbyBpdCBhZ2FpbiBiZWxvdykKKyAg
ICAgICAgbV9jdXJyZW50UHJlcGVuZGluZ1NyYyA9IHNhdmVkUHJlcGVuZGluZ1NyYzsKKworICAg
ICAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgc2xpZ2h0bHkgbW9kaWZpZWQgYml0IG9mIG9uZSBv
ZiB0aGUgd3JpdGUoKSBjYXNlcworICAgICAgICAvLyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlcGVu
ZCB0byBtX3BlbmRpbmdTcmMgcmF0aGVyIHRoYW4gYXBwZW5kaW5nCisgICAgICAgIC8vIGlmIHRo
ZXJlJ3Mgbm8gcHJldmlvdXMgcHJlcGVuZGluZ1NyYworICAgICAgICBpZiAoIW1fcGVuZGluZ1Nj
cmlwdHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50UHJlcGVuZGluZ1Ny
YykKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjLT5hcHBlbmQocHJlcGVu
ZGluZ1NyYyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9wZW5kaW5nU3Jj
LnByZXBlbmQocHJlcGVuZGluZ1NyYyk7CisKKyNpZiBQUkVMT0FEX1NDQU5ORVJfRU5BQkxFRAor
ICAgICAgICAgICAgLy8gV2UgYXJlIHN0dWNrIHdhaXRpbmcgZm9yIGFub3RoZXIgc2NyaXB0LiBM
ZXRzIGNoZWNrIHRoZSBzb3VyY2UgdGhhdAorICAgICAgICAgICAgLy8gd2FzIGp1c3QgZG9jdW1l
bnQud3JpdGUoKW4gZm9yIGFueXRoaW5nIHRvIGxvYWQuCisgICAgICAgICAgICBQcmVsb2FkU2Nh
bm5lciBkb2N1bWVudFdyaXRlUHJlbG9hZFNjYW5uZXIobV9kb2MpOworICAgICAgICAgICAgZG9j
dW1lbnRXcml0ZVByZWxvYWRTY2FubmVyLmJlZ2luKCk7CisgICAgICAgICAgICBkb2N1bWVudFdy
aXRlUHJlbG9hZFNjYW5uZXIud3JpdGUocHJlcGVuZGluZ1NyYyk7CisgICAgICAgICAgICBkb2N1
bWVudFdyaXRlUHJlbG9hZFNjYW5uZXIuZW5kKCk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1fc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgIHdyaXRlKHByZXBlbmRp
bmdTcmMsIGZhbHNlKTsKKyAgICAgICAgICAgIHN0YXRlID0gbV9zdGF0ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMgPSBzYXZlZFByZXBlbmRpbmdTcmM7
CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK0hUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRN
TERvY3VtZW50UGFyc2VyOjpwYXJzZUNvbW1lbnQoU2VnbWVudGVkU3RyaW5nJiBzcmMsIFN0YXRl
IHN0YXRlKQoreworICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGNvZGUgZXZlbiBydW4gZm9y
IGNvbW1lbnRzIGluc2lkZSA8c2NyaXB0PiBhbmQgPHN0eWxlPj8gVGhpcyBzZWVtcyBib2d1cy4K
KyAgICBjaGVja1NjcmlwdEJ1ZmZlcihzcmMubGVuZ3RoKCkpOworICAgIHdoaWxlICghc3JjLmlz
RW1wdHkoKSkgeworICAgICAgICBVQ2hhciBjaCA9ICpzcmM7CisgICAgICAgIG1fc2NyaXB0Q29k
ZVttX3NjcmlwdENvZGVTaXplKytdID0gY2g7CisgICAgICAgIGlmIChjaCA9PSAnPicpIHsKKyAg
ICAgICAgICAgIGJvb2wgaGFuZGxlQnJva2VuQ29tbWVudHMgPSBtX2Jyb2tlbkNvbW1lbnRzICYm
ICEoc3RhdGUuaW5TY3JpcHQoKSB8fCBzdGF0ZS5pblN0eWxlKCkpOworICAgICAgICAgICAgaW50
IGVuZENoYXJzQ291bnQgPSAxOyAvLyBzdGFydCBvZmYgd2l0aCBvbmUgZm9yIHRoZSAnPicgY2hh
cmFjdGVyCisgICAgICAgICAgICBpZiAobV9zY3JpcHRDb2RlU2l6ZSA+IDIgJiYgbV9zY3JpcHRD
b2RlW21fc2NyaXB0Q29kZVNpemUtM10gPT0gJy0nICYmIG1fc2NyaXB0Q29kZVttX3NjcmlwdENv
ZGVTaXplLTJdID09ICctJykgeworICAgICAgICAgICAgICAgIGVuZENoYXJzQ291bnQgPSAzOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3NjcmlwdENvZGVTaXplID4gMyAmJiBtX3NjcmlwdENv
ZGVbbV9zY3JpcHRDb2RlU2l6ZS00XSA9PSAnLScgJiYgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29k
ZVNpemUtM10gPT0gJy0nICYmCisgICAgICAgICAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0
Q29kZVNpemUtMl0gPT0gJyEnKSB7CisgICAgICAgICAgICAgICAgLy8gT3RoZXIgYnJvd3NlcnMg
d2lsbCBhY2NlcHQgLS0hPiBhcyBhIGNsb3NlIGNvbW1lbnQsIGV2ZW4gdGhvdWdoIGl0J3MKKyAg
ICAgICAgICAgICAgICAvLyBub3QgdGVjaG5pY2FsbHkgdmFsaWQuCisgICAgICAgICAgICAgICAg
ZW5kQ2hhcnNDb3VudCA9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGFuZGxl
QnJva2VuQ29tbWVudHMgfHwgZW5kQ2hhcnNDb3VudCA+IDEpIHsKKyAgICAgICAgICAgICAgICBz
cmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7CisgICAgICAgICAgICAgICAgaWYgKCEoc3RhdGUu
aW5UaXRsZSgpIHx8IHN0YXRlLmluU2NyaXB0KCkgfHwgc3RhdGUuaW5YbXAoKSB8fCBzdGF0ZS5p
blRleHRBcmVhKCkgfHwgc3RhdGUuaW5TdHlsZSgpIHx8IHN0YXRlLmluSUZyYW1lKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNoZWNrU2NyaXB0QnVmZmVyKCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplXSA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIG1fc2NyaXB0Q29kZVttX3NjcmlwdENvZGVTaXplICsgMV0gPSAwOworICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID0gY29tbWVudEF0b207CisgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudFRva2VuLmJlZ2luVGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSBwcm9jZXNzTGlzdGluZyhTZWdtZW50ZWRTdHJpbmcobV9zY3JpcHRDb2Rl
LCBtX3NjcmlwdENvZGVTaXplIC0gZW5kQ2hhcnNDb3VudCksIHN0YXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRv
a2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2Vu
KCk7CisgICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJbkNvbW1lbnQoZmFsc2UpOworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0ZTsgLy8gRmluaXNoZWQgcGFyc2luZyBjb21tZW50Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVy
KTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK0hUTUxEb2N1bWVudFBhcnNlcjo6
U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZVNlcnZlcihTZWdtZW50ZWRTdHJpbmcmIHNy
YywgU3RhdGUgc3RhdGUpCit7CisgICAgY2hlY2tTY3JpcHRCdWZmZXIoc3JjLmxlbmd0aCgpKTsK
KyAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKKyAgICAgICAgVUNoYXIgY2ggPSAqc3JjOwor
ICAgICAgICBtX3NjcmlwdENvZGVbbV9zY3JpcHRDb2RlU2l6ZSsrXSA9IGNoOworICAgICAgICBp
ZiAoY2ggPT0gJz4nICYmIG1fc2NyaXB0Q29kZVNpemUgPiAxICYmIG1fc2NyaXB0Q29kZVttX3Nj
cmlwdENvZGVTaXplIC0gMl0gPT0gJyUnKSB7CisgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3RO
b25OZXdsaW5lKCk7CisgICAgICAgICAgICBzdGF0ZS5zZXRJblNlcnZlcihmYWxzZSk7CisgICAg
ICAgICAgICBtX3NjcmlwdENvZGVTaXplID0gMDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZTsg
Ly8gRmluaXNoZWQgcGFyc2luZyBzZXJ2ZXIgaW5jbHVkZQorICAgICAgICB9CisgICAgICAgIHNy
Yy5hZHZhbmNlKG1fbGluZU51bWJlcik7CisgICAgfQorICAgIHJldHVybiBzdGF0ZTsKK30KKwor
SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlUHJvY2Vz
c2luZ0luc3RydWN0aW9uKFNlZ21lbnRlZFN0cmluZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKK3sKKyAg
ICBVQ2hhciBvbGRjaGFyID0gMDsKKyAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgVUNoYXIgY2hiZWdpbiA9ICpzcmM7CisgICAgICAgIGlmIChjaGJlZ2luID09ICdcJycpCisg
ICAgICAgICAgICB0cXVvdGUgPSB0cXVvdGUgPT0gU2luZ2xlUXVvdGUgPyBOb1F1b3RlIDogU2lu
Z2xlUXVvdGU7CisgICAgICAgIGVsc2UgaWYgKGNoYmVnaW4gPT0gJ1wiJykKKyAgICAgICAgICAg
IHRxdW90ZSA9IHRxdW90ZSA9PSBEb3VibGVRdW90ZSA/IE5vUXVvdGUgOiBEb3VibGVRdW90ZTsK
KyAgICAgICAgLy8gTG9vayBmb3IgJz8+JworICAgICAgICAvLyBTb21lIGNyYXBweSBzaXRlcyBv
bWl0IHRoZSAiPyIgYmVmb3JlIGl0LCBzbworICAgICAgICAvLyB3ZSBsb29rIGZvciBhbiB1bnF1
b3RlZCAnPicgaW5zdGVhZC4gKElFIGNvbXBhdGlibGUpCisgICAgICAgIGVsc2UgaWYgKGNoYmVn
aW4gPT0gJz4nICYmICghdHF1b3RlIHx8IG9sZGNoYXIgPT0gJz8nKSkgeworICAgICAgICAgICAg
Ly8gV2UgZ290IGEgJz8+JyBzZXF1ZW5jZQorICAgICAgICAgICAgc3RhdGUuc2V0SW5Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oZmFsc2UpOworICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3
bGluZSgpOworICAgICAgICAgICAgc3RhdGUuc2V0RGlzY2FyZExGKHRydWUpOworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRlOyAvLyBGaW5pc2hlZCBwYXJzaW5nIGNvbW1lbnQhCisgICAgICAgIH0K
KyAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKKyAgICAgICAgb2xkY2hhciA9IGNo
YmVnaW47CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRlOworfQorCitIVE1MRG9jdW1lbnRQYXJz
ZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VUZXh0KFNlZ21lbnRlZFN0cmluZyYg
c3JjLCBTdGF0ZSBzdGF0ZSkKK3sKKyAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgVUNoYXIgY2MgPSAqc3JjOworCisgICAgICAgIGlmIChzdGF0ZS5za2lwTEYoKSkgeworICAg
ICAgICAgICAgc3RhdGUuc2V0U2tpcExGKGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChjYyA9PSAn
XG4nKSB7CisgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0TmV3bGluZShtX2xpbmVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gZG8gd2UgbmVlZCB0byBlbmxhcmdlIHRoZSBidWZmZXI/CisgICAgICAg
IGNoZWNrQnVmZmVyKCk7CisKKyAgICAgICAgaWYgKGNjID09ICdccicpIHsKKyAgICAgICAgICAg
IHN0YXRlLnNldFNraXBMRih0cnVlKTsKKyAgICAgICAgICAgICptX2Rlc3QrKyA9ICdcbic7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgKm1fZGVzdCsrID0gY2M7CisgICAgICAgIHNyYy5h
ZHZhbmNlKG1fbGluZU51bWJlcik7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRlOworfQorCisK
K0hUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVudGl0
eShTZWdtZW50ZWRTdHJpbmcmIHNyYywgVUNoYXIqJiBkZXN0LCBTdGF0ZSBzdGF0ZSwgdW5zaWdu
ZWQmIGNCdWZmZXJQb3MsIGJvb2wgc3RhcnQsIGJvb2wgcGFyc2luZ1RhZykKK3sKKyAgICBpZiAo
c3RhcnQpIHsKKyAgICAgICAgY0J1ZmZlclBvcyA9IDA7CisgICAgICAgIHN0YXRlLnNldEVudGl0
eVN0YXRlKFNlYXJjaEVudGl0eSk7CisgICAgICAgIEVudGl0eVVuaWNvZGVWYWx1ZSA9IDA7Cisg
ICAgfQorCisgICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7CisgICAgICAgIFVDaGFyIGNjID0g
KnNyYzsKKyAgICAgICAgc3dpdGNoIChzdGF0ZS5lbnRpdHlTdGF0ZSgpKSB7CisgICAgICAgIGNh
c2UgTm9FbnRpdHk6CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuZW50aXR5U3RhdGUoKSAhPSBO
b0VudGl0eSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGU7CisKKyAgICAgICAgY2FzZSBTZWFy
Y2hFbnRpdHk6CisgICAgICAgICAgICBpZiAoY2MgPT0gJyMnKSB7CisgICAgICAgICAgICAgICAg
bV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjYzsKKyAgICAgICAgICAgICAgICBzcmMuYWR2YW5j
ZVBhc3ROb25OZXdsaW5lKCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUo
TnVtZXJpY1NlYXJjaCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0
ZS5zZXRFbnRpdHlTdGF0ZShFbnRpdHlOYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgTnVtZXJpY1NlYXJjaDoKKyAgICAgICAgICAgIGlmIChjYyA9PSAneCcgfHwgY2Mg
PT0gJ1gnKSB7CisgICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjYzsK
KyAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoSGV4YWRlY2ltYWwpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQorICAgICAgICAgICAgICAgIHN0YXRlLnNl
dEVudGl0eVN0YXRlKERlY2ltYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHN0YXRlLnNldEVudGl0eVN0YXRlKFNlYXJjaFNlbWljb2xvbik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEhleGFkZWNpbWFsOiB7CisgICAgICAgICAgICBpbnQgbGwgPSBt
aW4oc3JjLmxlbmd0aCgpLCAxMCAtIGNCdWZmZXJQb3MpOworICAgICAgICAgICAgd2hpbGUgKGxs
LS0pIHsKKyAgICAgICAgICAgICAgICBjYyA9ICpzcmM7CisgICAgICAgICAgICAgICAgaWYgKCEo
KGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAo
Y2MgPj0gJ0EnICYmIGNjIDw9ICdGJykpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNl
dEVudGl0eVN0YXRlKFNlYXJjaFNlbWljb2xvbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQ7CisgICAgICAg
ICAgICAgICAgaWYgKGNjIDwgJ0EnKQorICAgICAgICAgICAgICAgICAgICBkaWdpdCA9IGNjIC0g
JzAnOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGlnaXQgPSAo
Y2MgLSAnQScgKyAxMCkgJiAweEY7IC8vIGhhbmRsZSBib3RoIHVwcGVyIGFuZCBsb3dlciBjYXNl
IHdpdGhvdXQgYSBicmFuY2gKKyAgICAgICAgICAgICAgICBFbnRpdHlVbmljb2RlVmFsdWUgPSBF
bnRpdHlVbmljb2RlVmFsdWUgKiAxNiArIGRpZ2l0OworICAgICAgICAgICAgICAgIG1fY0J1ZmZl
cltjQnVmZmVyUG9zKytdID0gY2M7CisgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9u
TmV3bGluZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNCdWZmZXJQb3MgPT0g
MTApCisgICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNoU2VtaWNvbG9u
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRGVjaW1hbDoK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IGxsID0gbWluKHNyYy5sZW5ndGgoKSwgOS1jQnVm
ZmVyUG9zKTsKKyAgICAgICAgICAgIHdoaWxlIChsbC0tKSB7CisgICAgICAgICAgICAgICAgY2Mg
PSAqc3JjOworCisgICAgICAgICAgICAgICAgaWYgKCEoY2MgPj0gJzAnICYmIGNjIDw9ICc5Jykp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNoU2VtaWNv
bG9uKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgRW50aXR5VW5pY29kZVZhbHVlID0gRW50aXR5VW5pY29kZVZhbHVlICog
MTAgKyAoY2MgLSAnMCcpOworICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytd
ID0gY2M7CisgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNCdWZmZXJQb3MgPT0gOSkKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5zZXRFbnRpdHlTdGF0ZShTZWFyY2hTZW1pY29sb24pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFbnRpdHlOYW1lOgorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQgbGwgPSBtaW4oc3JjLmxlbmd0aCgpLCA5LWNCdWZmZXJQb3MpOworICAg
ICAgICAgICAgd2hpbGUgKGxsLS0pIHsKKyAgICAgICAgICAgICAgICBjYyA9ICpzcmM7CisKKyAg
ICAgICAgICAgICAgICBpZiAoISgoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgfHwgKGNjID49ICcw
JyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoU2VhcmNoU2VtaWNvbG9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjYzsKKyAgICAgICAgICAgICAgICBzcmMuYWR2
YW5jZVBhc3ROb25OZXdsaW5lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY0J1
ZmZlclBvcyA9PSA5KQorICAgICAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0YXRlKFNlYXJj
aFNlbWljb2xvbik7CisgICAgICAgICAgICBpZiAoc3RhdGUuZW50aXR5U3RhdGUoKSA9PSBTZWFy
Y2hTZW1pY29sb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoY0J1ZmZlclBvcyA+IDEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGVudGl0eSBu
YW1lIGlzIDksCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIGEgc2luZ2xlIGNoYXIgYXJyYXkg
d2hpY2ggaXMgYWxsb2NhdGVkIG9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFjaywg
aXRzIGxlbmd0aCBpcyAxMCwgc2hvdWxkIGJlIE9LLgorICAgICAgICAgICAgICAgICAgICAvLyBB
bHNvIGlmIHdlIGhhdmUgYW4gaWxsZWdhbCBjaGFyYWN0ZXIsIHdlIHRyZWF0IGl0CisgICAgICAg
ICAgICAgICAgICAgIC8vIGFzIGlsbGVnYWwgZW50aXR5IG5hbWUuCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHRlc3RlZEVudGl0eU5hbWVMZW4gPSAwOworICAgICAgICAgICAgICAgICAg
ICBjaGFyIHRtcEVudGl0eU5hbWVCdWZmZXJbMTBdOworCisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChjQnVmZmVyUG9zIDwgMTApOworICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdGVzdGVk
RW50aXR5TmFtZUxlbiA8IGNCdWZmZXJQb3M7ICsrdGVzdGVkRW50aXR5TmFtZUxlbikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY0J1ZmZlclt0ZXN0ZWRFbnRpdHlOYW1lTGVuXSA+
IDB4N2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0bXBFbnRpdHlOYW1lQnVmZmVyW3Rlc3RlZEVudGl0eU5hbWVMZW5dID0gbV9j
QnVmZmVyW3Rlc3RlZEVudGl0eU5hbWVMZW5dOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRW50aXR5ICplOworCisgICAgICAgICAgICAgICAgICAg
IGlmICh0ZXN0ZWRFbnRpdHlOYW1lTGVuID09IGNCdWZmZXJQb3MpCisgICAgICAgICAgICAgICAg
ICAgICAgICBlID0gZmluZEVudGl0eSh0bXBFbnRpdHlOYW1lQnVmZmVyLCBjQnVmZmVyUG9zKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZSA9IDA7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUpCisgICAgICAgICAgICAgICAgICAgICAgICBF
bnRpdHlVbmljb2RlVmFsdWUgPSBlLT5jb2RlOworCisgICAgICAgICAgICAgICAgICAgIC8vIGJl
IElFIGNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdUYWcgJiYgRW50
aXR5VW5pY29kZVZhbHVlID4gMjU1ICYmICpzcmMgIT0gJzsnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgRW50aXR5VW5pY29kZVZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBTZWFyY2hTZW1pY29sb246CisgICAgICAgICAgICAvLyBEb24ndCBh
bGxvdyB2YWx1ZXMgdGhhdCBhcmUgbW9yZSB0aGFuIDIxIGJpdHMuCisgICAgICAgICAgICBpZiAo
RW50aXR5VW5pY29kZVZhbHVlID4gMCAmJiBFbnRpdHlVbmljb2RlVmFsdWUgPD0gMHgxMEZGRkYp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWluVmlld1NvdXJjZU1vZGUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoKnNyYyA9PSAnOycpCisgICAgICAgICAgICAgICAgICAgICAgICBzcmMu
YWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChFbnRpdHlV
bmljb2RlVmFsdWUgPD0gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0J1
ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgc3JjLnB1c2goZml4VXBDaGFyKEVudGl0
eVVuaWNvZGVWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29udmVydCB0byBVVEYtMTYsIHVzaW5nIHN1cnJvZ2F0ZSBjb2Rl
IHBvaW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKDIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc3JjLnB1c2goVTE2X0xFQUQoRW50aXR5VW5pY29kZVZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzcmMucHVzaChVMTZfVFJBSUwoRW50aXR5VW5pY29k
ZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29s
b3JpemUgZW50aXRpZXMgYnkgc2VuZGluZyB0aGVtIGFzIGEgc3BlY2lhbCB0b2tlbi4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gMTIgYnl0ZXMgcmVxdWlyZWQ6IHVwIHRvIDEwIGJ5dGVzIGluIG1f
Y0J1ZmZlciBwbHVzIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBsZWFkaW5nICcmJyBhbmQg
dHJhaWxpbmcgJzsnCisgICAgICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKDEyKTsKKyAgICAg
ICAgICAgICAgICAgICAgKmRlc3QrKyA9ICcmJzsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNCdWZmZXJQb3M7IGkrKykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbaV0gPSBtX2NCdWZmZXJbaV07CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0g
Y0J1ZmZlclBvczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpzcmMgPT0gJzsnKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gJzsnOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyAxMSBieXRlcyByZXF1aXJlZDogdXAgdG8gMTAgYnl0ZXMgaW4gbV9jQnVmZmVyIHBsdXMgdGhl
CisgICAgICAgICAgICAgICAgLy8gbGVhZGluZyAnJicKKyAgICAgICAgICAgICAgICBjaGVja0J1
ZmZlcigxMSk7CisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBzZXF1ZW5jZSwgYWRkIGl0
IHRvIHRoZSBidWZmZXIgYXMgcGxhaW50ZXh0CisgICAgICAgICAgICAgICAgKmRlc3QrKyA9ICcm
JzsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY0J1ZmZlclBvczsg
aSsrKQorICAgICAgICAgICAgICAgICAgICBkZXN0W2ldID0gbV9jQnVmZmVyW2ldOworICAgICAg
ICAgICAgICAgIGRlc3QgKz0gY0J1ZmZlclBvczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3RhdGUuc2V0RW50aXR5U3RhdGUoTm9FbnRpdHkpOworICAgICAgICAgICAgcmV0dXJuIHN0
YXRlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRlOworfQorCitIVE1MRG9j
dW1lbnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N0eXBlKFNlZ21l
bnRlZFN0cmluZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUuaW5Eb2N0
eXBlKCkpOworICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSAmJiBzdGF0ZS5pbkRvY3R5cGUoKSkg
eworICAgICAgICBVQ2hhciBjID0gKnNyYzsKKyAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBj
ID09ICdccicgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x0JyB8fCBjID09ICcgJzsKKyAgICAgICAg
c3dpdGNoIChtX2RvY3R5cGVUb2tlbi5zdGF0ZSgpKSB7CisgICAgICAgICAgICBjYXNlIERvY3R5
cGVCZWdpbjogeworICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5
cGVCZWZvcmVOYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBEb2N0
eXBlQmVmb3JlTmFtZTogeworICAgICAgICAgICAgICAgIGlmIChjID09ICc+JykgeworICAgICAg
ICAgICAgICAgICAgICAvLyBNYWxmb3JtZWQuICBKdXN0IGV4aXQuCisgICAgICAgICAgICAgICAg
ICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1Nv
dXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9rZW4o
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZSkgeworICAgICAgICAg
ICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0
eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlTmFtZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIERv
Y3R5cGVOYW1lOiB7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJz4nKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFZhbGlkIGRvY3R5cGUuIEVtaXQgaXQuCisgICAgICAgICAgICAgICAgICAg
IHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c2V0SW5Eb2N0eXBlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RvY3R5cGVU
b2tlbigpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENvdW50ID0gMDsgLy8gVXNlZCBub3cgdG8g
c2NhbiBmb3IgUFVCTElDCisgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlY29uZGFyeVNl
YXJjaENvdW50ID0gMDsgLy8gVXNlZCBub3cgdG8gc2NhbiBmb3IgU1lTVEVNCisgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVBZnRlck5hbWUpOworICAg
ICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
bV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9uYW1lLmFwcGVuZChjKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIERvY3R5cGVBZnRlck5hbWU6IHsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnPicpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgZG9jdHlwZS4gRW1pdCBpdC4KKyAgICAgICAg
ICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zZXRJbkRvY3R5cGUoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzRG9jdHlwZVRva2VuKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNXaGl0ZXNw
YWNlKSB7CisgICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcihjKSA9PSBwdWJsaWNTdGFydFtt
X2RvY3R5cGVTZWFyY2hDb3VudF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlw
ZVNlYXJjaENvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9kb2N0eXBlU2Vh
cmNoQ291bnQgPT0gNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCAnUFVC
TElDJyBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2Vu
LnNldFN0YXRlKERvY3R5cGVCZWZvcmVQdWJsaWNJRCk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9kb2N0eXBlU2VhcmNoQ291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2RvY3R5cGVTZWFyY2hDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMpOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRvQVNDSUlMb3dlcihjKSA9PSBzeXN0ZW1TdGFydFttX2RvY3R5cGVTZWNv
bmRhcnlTZWFyY2hDb3VudF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNl
Y29uZGFyeVNlYXJjaENvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9kb2N0
eXBlU2Vjb25kYXJ5U2VhcmNoQ291bnQgPT0gNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGb3VuZCAnU1lTVEVNJyBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVCZWZvcmVTeXN0ZW1JRCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVT
ZWNvbmRhcnlTZWFyY2hDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5
cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVt
YmVyKTsgLy8gV2hpdGVzcGFjZSBrZWVwcyB1cyBpbiB0aGUgYWZ0ZXIgbmFtZSBzdGF0ZS4KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIERvY3R5cGVCZWZvcmVQdWJsaWNJRDogeworICAgICAgICAgICAgICAgIGlmIChjID09
ICdcIicgfHwgYyA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgICAgIHRxdW90ZSA9IGMgPT0g
J1wiJyA/IERvdWJsZVF1b3RlIDogU2luZ2xlUXVvdGU7CisgICAgICAgICAgICAgICAgICAgIG1f
ZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVQdWJsaWNJRCk7CisgICAgICAgICAgICAgICAg
ICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRv
a2VuLm1fc291cmNlLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0g
Jz4nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyZWQgYm9ndXMuICBEb24ndCBw
cm9jZXNzIHRoZSBkb2N0eXBlLgorICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3RO
b25OZXdsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxz
ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChpc1doaXRlc3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFu
Y2UobV9saW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFw
cGVuZChjKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9k
b2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZUJvZ3VzKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRG9jdHlwZVB1YmxpY0lEOiB7Cisg
ICAgICAgICAgICAgICAgaWYgKChjID09ICdcIicgJiYgdHF1b3RlID09IERvdWJsZVF1b3RlKSB8
fCAoYyA9PSAnXCcnICYmIHRxdW90ZSA9PSBTaW5nbGVRdW90ZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgICAgICAgICBt
X2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQWZ0ZXJQdWJsaWNJRCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChjID09ICc+JykgeworICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXJlZCBi
b2d1cy4gIERvbid0IHByb2Nlc3MgdGhlIGRvY3R5cGUuCisgICAgICAgICAgICAgICAgICAgIHNy
Yy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0
SW5Eb2N0eXBlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9rZW4oKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tl
bi5tX3B1YmxpY0lELmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2Uo
bV9saW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVu
ZChjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIERvY3R5cGVBZnRlclB1YmxpY0lEOgorICAgICAgICAg
ICAgICAgIGlmIChjID09ICdcIicgfHwgYyA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgICAg
IHRxdW90ZSA9IGMgPT0gJ1wiJyA/IERvdWJsZVF1b3RlIDogU2luZ2xlUXVvdGU7CisgICAgICAg
ICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnNldFN0YXRlKERvY3R5cGVTeXN0ZW1JRCk7Cisg
ICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGMgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZhbGlkIGRvY3R5
cGUuIEVtaXQgaXQgbm93LgorICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25O
ZXdsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZShmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEb2N0eXBlVG9rZW4oKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZSkgeworICAgICAgICAgICAgICAgICAgICBzcmMu
YWR2YW5jZShtX2xpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291
cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3Vy
Y2UuYXBwZW5kKGMpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQm9ndXMpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb2N0eXBlQmVmb3JlU3lzdGVtSUQ6CisgICAgICAg
ICAgICAgICAgaWYgKGMgPT0gJ1wiJyB8fCBjID09ICdcJycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdHF1b3RlID0gYyA9PSAnXCInID8gRG91YmxlUXVvdGUgOiBTaW5nbGVRdW90ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZVN5c3RlbUlEKTsK
KyAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXJl
ZCBib2d1cy4gIERvbid0IHByb2Nlc3MgdGhlIGRvY3R5cGUuCisgICAgICAgICAgICAgICAgICAg
IHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c2V0SW5Eb2N0eXBlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVz
cGFjZSkgeworICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9kb2N0eXBlVG9rZW4ubV9zb3VyY2UuYXBwZW5kKGMpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0
ZShEb2N0eXBlQm9ndXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBEb2N0eXBlU3lzdGVtSUQ6CisgICAgICAgICAgICAgICAgaWYgKChjID09ICdcIicgJiYgdHF1
b3RlID09IERvdWJsZVF1b3RlKSB8fCAoYyA9PSAnXCcnICYmIHRxdW90ZSA9PSBTaW5nbGVRdW90
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwor
ICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5zZXRTdGF0ZShEb2N0eXBlQWZ0ZXJT
eXN0ZW1JRCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3NvdXJjZS5hcHBlbmQoYyk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICc+JykgeworICAgICAgICAgICAgICAg
ICAgICAgLy8gQ29uc2lkZXJlZCBib2d1cy4gIERvbid0IHByb2Nlc3MgdGhlIGRvY3R5cGUuCisg
ICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nl
c3NEb2N0eXBlVG9rZW4oKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBtX2RvY3R5cGVUb2tlbi5tX3N5c3RlbUlELmFwcGVuZChjKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlw
ZVRva2VuLm1fc291cmNlLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvY3R5cGVBZnRlclN5c3RlbUlEOgorICAg
ICAgICAgICAgICAgIGlmIChjID09ICc+JykgeworICAgICAgICAgICAgICAgICAgICAvLyBWYWxp
ZCBkb2N0eXBlLiBFbWl0IGl0IG5vdy4KKyAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQ
YXN0Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJbkRvY3R5cGUo
ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc1doaXRlc3BhY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
Vmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2Vu
Lm1fc291cmNlLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbV9kb2N0eXBlVG9rZW4uc2V0U3RhdGUoRG9jdHlwZUJvZ3VzKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG9jdHlwZUJvZ3VzOgorICAgICAgICAg
ICAgICAgIGlmIChjID09ICc+JykgeworICAgICAgICAgICAgICAgICAgICAvLyBEb25lIHdpdGgg
dGhlIGJvZ3VzIGRvY3R5cGUuCisgICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5v
bk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Eb2N0eXBlKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgcHJvY2Vzc0RvY3R5cGVUb2tlbigpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlKG1fbGluZU51bWJlcik7IC8v
IEp1c3Qga2VlcCBzY2FubmluZyBmb3IgJz4nCisgICAgICAgICAgICAgICAgICAgIGlmIChpblZp
ZXdTb3VyY2VNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVUb2tlbi5t
X3NvdXJjZS5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK0hUTUxEb2N1bWVudFBhcnNlcjo6
U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZVRhZyhTZWdtZW50ZWRTdHJpbmcmIHNyYywg
U3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKCFzdGF0ZS5oYXNFbnRpdHlTdGF0ZSgpKTsKKwor
ICAgIHVuc2lnbmVkIGNCdWZmZXJQb3MgPSBtX2NCdWZmZXJQb3M7CisKKyAgICBib29sIGxhc3RJ
c1NsYXNoID0gZmFsc2U7CisKKyAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Y2hlY2tCdWZmZXIoKTsKKyAgICAgICAgc3dpdGNoIChzdGF0ZS50YWdTdGF0ZSgpKSB7CisgICAg
ICAgIGNhc2UgTm9UYWc6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY0J1ZmZlclBvcyA9IGNC
dWZmZXJQb3M7CisgICAgICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBUYWdOYW1lOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2VhcmNoQ291bnQgPiAw
KSB7CisgICAgICAgICAgICAgICAgaWYgKCpzcmMgPT0gY29tbWVudFN0YXJ0W3NlYXJjaENvdW50
XSkgeworICAgICAgICAgICAgICAgICAgICBzZWFyY2hDb3VudCsrOworICAgICAgICAgICAgICAg
ICAgICBpZiAoc2VhcmNoQ291bnQgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9j
dHlwZVNlYXJjaENvdW50Kys7IC8vIEEgJyEnIGlzIGFsc28gcGFydCBvZiBhIGRvY3R5cGUsIHNv
IHdlIGFyZSBtb3ZpbmcgdGhyb3VnaCB0aGF0IHN0aWxsIGFzIHdlbGwuCisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVNlYXJjaENvdW50
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaENvdW50ID09IDQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kICc8IS0tJyBzZXF1ZW5jZQorICAgICAgICAgICAg
ICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kZXN0ID0gbV9idWZmZXI7IC8vIGlnbm9yZSB0aGUgcHJldmlvdXMgcGFydCBv
ZiB0aGlzIHRhZworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KHRy
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoTm9UYWcpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXggYnVnIDM0MzAyIGF0IGtkZS5idWdzLm9y
Zy4gIEdvIGFoZWFkIGFuZCB0cmVhdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gPCEtLT4g
YXMgYSB2YWxpZCBjb21tZW50LCBzaW5jZSBib3RoIG1vemlsbGEgYW5kIElFIG9uIHdpbmRvd3MK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBoYW5kbGUgdGhpcyBjYXNlLiAgT25seSBk
byB0aGlzIGluIHF1aXJrcyBtb2RlLiAtZHdoCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXNyYy5pc0VtcHR5KCkgJiYgKnNyYyA9PSAnPicgJiYgbV9kb2MtPmluQ29tcGF0TW9kZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcmMuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvcysrXSA9ICpzcmM7
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBwYXJzZUNvbW1lbnQoc3JjLCBzdGF0ZSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY0J1ZmZlclBvcyA9IGNCdWZmZXJQb3M7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGU7IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gKnNy
YzsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgc2VhcmNoQ291bnQgPSAwOyAvLyBTdG9wIGxvb2tpbmcgZm9yICc8IS0tJyBz
ZXF1ZW5jZQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9kb2N0eXBlU2VhcmNo
Q291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcigqc3JjKSA9PSBk
b2N0eXBlU3RhcnRbbV9kb2N0eXBlU2VhcmNoQ291bnRdKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fZG9jdHlwZVNlYXJjaENvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltj
QnVmZmVyUG9zKytdID0gKnNyYzsKKyAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0
Tm9uTmV3bGluZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9kb2N0eXBlU2VhcmNoQ291
bnQgPT0gOSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgJzwhRE9DVFlQRScg
c2VxdWVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluRG9jdHlwZSh0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKE5vVGFnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdHlwZVRva2VuLnJlc2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdHlwZVRva2VuLm1fc291cmNlLmFwcGVuZChtX2NCdWZmZXIsIGNCdWZm
ZXJQb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZURvY3R5cGUoc3Jj
LCBzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVy
UG9zOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2RvY3R5cGVTZWFyY2hDb3VudCA9IDA7IC8vIFN0
b3AgbG9va2luZyBmb3IgJzwhRE9DVFlQRScgc2VxdWVuY2UKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBmaW5pc2ggPSBmYWxzZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBs
bCA9IG1pbihzcmMubGVuZ3RoKCksIENCVUZMRU4gLSBjQnVmZmVyUG9zKTsKKyAgICAgICAgICAg
IHdoaWxlIChsbC0tKSB7CisgICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9ICpzcmM7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlTcGFjZShjdXJjaGFyKSB8fCBjdXJjaGFyID09ICc+
JyB8fCBjdXJjaGFyID09ICc8JykgeworICAgICAgICAgICAgICAgICAgICBmaW5pc2ggPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyB0b2xvd2VyKCkgc2hvd3MgdXAgb24gcHJvZmlsZXMuIFRoaXMgaXMgZmFz
dGVyIQorICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyID49ICdBJyAmJiBjdXJjaGFyIDw9ICda
JyAmJiAhaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2NCdWZmZXJb
Y0J1ZmZlclBvcysrXSA9IGN1cmNoYXIgKyAoJ2EnIC0gJ0EnKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY3VyY2hh
cjsKKyAgICAgICAgICAgICAgICBzcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIERpc2FkdmFudGFnZTogd2UgYWRkIHRoZSBwb3NzaWJs
ZSByZXN0IG9mIHRoZSB0YWcKKyAgICAgICAgICAgIC8vIGFzIGF0dHJpYnV0ZSBuYW1lcy4gIyMj
IGp1ZGdlIGlmIHRoaXMgY2F1c2VzIHByb2JsZW1zCisgICAgICAgICAgICBpZiAoZmluaXNoIHx8
IENCVUZMRU4gPT0gY0J1ZmZlclBvcykgeworICAgICAgICAgICAgICAgIGJvb2wgYmVnaW5UYWc7
CisgICAgICAgICAgICAgICAgVUNoYXIqIHB0ciA9IG1fY0J1ZmZlcjsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbGVuID0gY0J1ZmZlclBvczsKKyAgICAgICAgICAgICAgICBtX2NCdWZm
ZXJbY0J1ZmZlclBvc10gPSAnXDAnOworICAgICAgICAgICAgICAgIGlmICgoY0J1ZmZlclBvcyA+
IDApICYmICgqcHRyID09ICcvJykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW5kIFRhZwor
ICAgICAgICAgICAgICAgICAgICBiZWdpblRhZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBwdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgVGFnCisg
ICAgICAgICAgICAgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIC8v
IElnbm9yZSB0aGUgLyBpbiBmYWtlIHhtbCB0YWdzIGxpa2UgPGJyLz4uICBXZSB0cmltIG9mZiB0
aGUgIi8iIHNvIHRoYXQgd2UnbGwgZ2V0ICJiciIgYXMgdGhlIHRhZyBuYW1lIGFuZCBub3QgImJy
LyIuCisgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEgJiYgcHRyW2xlbi0xXSA9PSAnLycgJiYg
IWluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcHRyWy0tbGVuXSA9ICdc
MCc7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFueSBp
bnZhbGlkIC8gdGhhdCBtaWdodCBoYXZlIGZvbGxvd2VkIHRoZSBuYW1lKSwgbWFrZSB0aGUgdGFn
LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGaXJlRm94IGFuZCBXaW5JRSB0dXJuICFmb28g
bm9kZXMgaW50byBjb21tZW50cywgd2UgaWdub3JlIGNvbW1lbnRzLiAoZmFzdC9wYXJzZXIvdGFn
LXdpdGgtZXhjbGFtYXRpb24tcG9pbnQuaHRtbCkKKyAgICAgICAgICAgICAgICBpZiAocHRyWzBd
ICE9ICchJyB8fCBpblZpZXdTb3VyY2VNb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50VG9rZW4udGFnTmFtZSA9IEF0b21pY1N0cmluZyhwdHIpOworICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyA9IGJlZ2luVGFnOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zZXRUYWdTdGF0ZShTZWFyY2hBdHRyaWJ1dGUpOworICAgICAgICAgICAgICAgIGNCdWZm
ZXJQb3MgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBTZWFyY2hBdHRyaWJ1dGU6CisgICAgICAgICAgICB3aGlsZSAoIXNyYy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKKyAgICAg
ICAgICAgICAgICAvLyBJbiB0aGlzIG1vZGUganVzdCBpZ25vcmUgYW55IHF1b3RlcyB3ZSBlbmNv
dW50ZXIgYW5kIHRyZWF0IHRoZW0gbGlrZSBzcGFjZXMuCisgICAgICAgICAgICAgICAgaWYgKCFp
c0FTQ0lJU3BhY2UoY3VyY2hhcikgJiYgY3VyY2hhciAhPSAnXCcnICYmIGN1cmNoYXIgIT0gJyIn
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyID09ICc8JyB8fCBjdXJjaGFyID09
ICc+JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEVu
ZCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnNldFRhZ1N0YXRlKEF0dHJpYnV0ZU5hbWUpOworCisgICAgICAgICAgICAgICAgICAgIGNC
dWZmZXJQb3MgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoY3VyY2hhcik7CisgICAg
ICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0dHJpYnV0ZU5hbWU6CisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGludCBsbCA9IG1pbihzcmMubGVuZ3RoKCksIENCVUZMRU4gLSBjQnVmZmVyUG9zKTsKKyAg
ICAgICAgICAgIHdoaWxlIChsbC0tKSB7CisgICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9
ICpzcmM7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgIi8iIHdoZW4gc2Nh
bm5pbmcgYW4gYXR0cmlidXRlIG5hbWUsIHRyZWF0IGl0IGFzIGEgZGVsaW1pdGVyLiAgVGhpcyBh
bGxvd3MgdGhlCisgICAgICAgICAgICAgICAgLy8gY2FzZXMgbGlrZSA8aW5wdXQgdHlwZT1jaGVj
a2JveCBjaGVja2VkLz4gdG8gd29yayAoYW5kIGFjY29tbW9kYXRlcyBYTUwtc3R5bGUgc3ludGF4
IGFzIHBlciBIVE1MNSkuCisgICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPD0gJz4nICYmIChj
dXJjaGFyID49ICc8JyB8fCBpc0FTQ0lJU3BhY2UoY3VyY2hhcikgfHwgY3VyY2hhciA9PSAnLycp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fY0J1ZmZlcltjQnVmZmVyUG9zXSA9ICdcMCc7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYXR0ck5hbWUgPSBBdG9taWNTdHJpbmcobV9jQnVmZmVyKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9kZXN0ID0gbV9idWZmZXI7CisgICAgICAgICAgICAgICAg
ICAgICptX2Rlc3QrKyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRl
KFNlYXJjaEVxdWFsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdTb3VyY2VD
aGFyKCdhJyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIHRvbG93ZXIoKSBzaG93cyB1cCBvbiBwcm9maWxlcy4gVGhp
cyBpcyBmYXN0ZXIhCisgICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNo
YXIgPD0gJ1onICYmICFpblZpZXdTb3VyY2VNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIG1f
Y0J1ZmZlcltjQnVmZmVyUG9zKytdID0gY3VyY2hhciArICgnYScgLSAnQScpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9jQnVmZmVyW2NCdWZmZXJQb3MrK10g
PSBjdXJjaGFyOworCisgICAgICAgICAgICAgICAgbV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5h
cHBlbmQoY3VyY2hhcik7CisgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2UobV9saW5lTnVtYmVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjQnVmZmVyUG9zID09IENCVUZMRU4p
IHsKKyAgICAgICAgICAgICAgICBtX2NCdWZmZXJbY0J1ZmZlclBvc10gPSAnXDAnOworICAgICAg
ICAgICAgICAgIG1fYXR0ck5hbWUgPSBBdG9taWNTdHJpbmcobV9jQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICAqbV9kZXN0KysgPSAw
OworICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEVxdWFsKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRUb2tlbi5hZGRWaWV3U291cmNlQ2hhcignYScpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTZWFyY2hFcXVhbDoKKyAg
ICAgICAgICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFVDaGFy
IGN1cmNoYXIgPSAqc3JjOworCisgICAgICAgICAgICAgICAgaWYgKGxhc3RJc1NsYXNoICYmIGN1
cmNoYXIgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBxdWlyayAo
d2l0aCBhIGxvbmcgc2FkIGhpc3RvcnkpLiAgV2UgaGF2ZSB0byBkbyB0aGlzCisgICAgICAgICAg
ICAgICAgICAgIC8vIHNpbmNlIHdpZGdldHMgZG8gPHNjcmlwdCBzcmM9ImZvby5qcyIvPiBhbmQg
ZXhwZWN0IHRoZSB0YWcgdG8gY2xvc2UuCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZykKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudFRva2VuLnNlbGZDbG9zaW5nVGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50VG9rZW4uYnJva2VuWE1MU3R5bGUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgbW9kZSBqdXN0IGlnbm9yZSBhbnkgcXVvdGVz
IG9yIHNsYXNoZXMgd2UgZW5jb3VudGVyIGFuZCB0cmVhdCB0aGVtIGxpa2Ugc3BhY2VzLgorICAg
ICAgICAgICAgICAgIGlmICghaXNBU0NJSVNwYWNlKGN1cmNoYXIpICYmIGN1cmNoYXIgIT0gJ1wn
JyAmJiBjdXJjaGFyICE9ICciJyAmJiBjdXJjaGFyICE9ICcvJykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoY3VyY2hhciA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnNldFRhZ1N0YXRlKFNlYXJjaFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
blZpZXdTb3VyY2VNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoY3VyY2hhcik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFk
ZEF0dHJpYnV0ZShtX2F0dHJOYW1lLCBlbXB0eUF0b20sIGluVmlld1NvdXJjZU1vZGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEF0dHJpYnV0ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsYXN0SXNTbGFzaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGxhc3RJc1NsYXNoID0gY3VyY2hhciA9PSAnLyc7CisKKyAgICAgICAgICAgICAg
ICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRU
b2tlbi5hZGRWaWV3U291cmNlQ2hhcihjdXJjaGFyKTsKKyAgICAgICAgICAgICAgICBtX3Jhd0F0
dHJpYnV0ZUJlZm9yZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKKyAgICAgICAgICAgICAgICBzcmMu
YWR2YW5jZShtX2xpbmVOdW1iZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU2VhcmNoVmFsdWU6CisgICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBVQ2hhciBjdXJjaGFyID0gKnNyYzsKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShjdXJjaGFyKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VyY2hhciA9PSAnXCcnIHx8IGN1cmNoYXIgPT0gJ1wiJykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdHF1b3RlID0gY3VyY2hhciA9PSAnXCInID8gRG91YmxlUXVvdGUgOiBTaW5n
bGVRdW90ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFF1b3Rl
ZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJj
ZUNoYXIoY3VyY2hhcik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Jhd0F0dHJpYnV0ZUJl
Zm9yZVZhbHVlLmFwcGVuZChjdXJjaGFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5h
ZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRUYWdTdGF0ZShWYWx1ZSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChpblZpZXdTb3VyY2VNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2Vu
LmFkZFZpZXdTb3VyY2VDaGFyKGN1cmNoYXIpOworICAgICAgICAgICAgICAgIG1fcmF3QXR0cmli
dXRlQmVmb3JlVmFsdWUuYXBwZW5kKGN1cmNoYXIpOworICAgICAgICAgICAgICAgIHNyYy5hZHZh
bmNlKG1fbGluZU51bWJlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBRdW90ZWRWYWx1ZToKKyAgICAgICAgICAgIHdoaWxlICghc3JjLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKCk7CisKKyAgICAgICAgICAgICAgICBV
Q2hhciBjdXJjaGFyID0gKnNyYzsKKyAgICAgICAgICAgICAgICBpZiAoY3VyY2hhciA8PSAnPicg
JiYgIXNyYy5lc2NhcGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPT0g
Jz4nICYmIG1fYXR0ck5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBIYW5kbGUgYSBjYXNlIGxpa2UgPGltZyAnPi4gIEp1c3QgZ28gYWhlYWQgYW5kIGJlIHdpbGxp
bmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGNsb3NlIHRoZSB3aG9sZSB0YWcuICBE
b24ndCBjb25zdW1lIHRoZSBjaGFyYWN0ZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBqdXN0IGdvIGJhY2sgaW50byBTZWFyY2hFbmQgd2hpbGUgaWdub3JpbmcgdGhlIHdob2xlCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBOb3RlIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBub3QgYSB2ZXJ5IGdvb2Qgc29s
dXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBkb2Vzbid0IGhhbmRsZSB0aGUg
Z2VuZXJhbCBjYXNlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bm1hdGNoZWQgcXVv
dGVzIGFtb25nIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIG5hbWVzLiAtZHdoCisgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAobV9kZXN0ID4gbV9idWZmZXIgKyAxICYmIChtX2Rlc3RbLTFdID09
ICdcbicgfHwgbV9kZXN0Wy0xXSA9PSAnXHInKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2Rlc3QtLTsgLy8gcmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmVzCisgICAgICAgICAgICAgICAg
ICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlVmFsdWUobV9idWZmZXIgKyAxLCBtX2Rlc3Qg
LSBtX2J1ZmZlciAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVW
YWx1ZS5jb250YWlucygnLycpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXR0ck5h
bWUgPSBhdHRyaWJ1dGVWYWx1ZTsgLy8gSnVzdCBtYWtlIHRoZSBuYW1lL3ZhbHVlIG1hdGNoLiAo
RklYTUU6IElzIHRoaXMgc29tZSBXaW5JRSBxdWlyaz8pCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRUb2tlbi5hZGRBdHRyaWJ1dGUobV9hdHRyTmFtZSwgYXR0cmlidXRlVmFsdWUs
IGluVmlld1NvdXJjZU1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3
U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2Vu
LmFkZFZpZXdTb3VyY2VDaGFyKCd4Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
ZXRUYWdTdGF0ZShTZWFyY2hBdHRyaWJ1dGUpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9k
ZXN0ID0gbV9idWZmZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3Rl
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBpZiAoY3VyY2hhciA9PSAnJicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gcGFyc2VFbnRpdHkoc3JjLCBtX2Rlc3QsIHN0YXRlLCBjQnVmZmVy
UG9zLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh0cXVvdGUgPT0gU2lu
Z2xlUXVvdGUgJiYgY3VyY2hhciA9PSAnXCcnKSB8fCAodHF1b3RlID09IERvdWJsZVF1b3RlICYm
IGN1cmNoYXIgPT0gJ1wiJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgPGlu
cHV0IHR5cGU9aGlkZGVuPiByZWx5IG9uIHRyYWlsaW5nIHNwYWNlcy4gYXJnaAorICAgICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKG1fZGVzdCA+IG1fYnVmZmVyICsgMSAmJiAobV9kZXN0Wy0x
XSA9PSAnXG4nIHx8IG1fZGVzdFstMV0gPT0gJ1xyJykpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9kZXN0LS07IC8vIHJlbW92ZSB0cmFpbGluZyBuZXdsaW5lcworICAgICAgICAgICAg
ICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZVZhbHVlKG1fYnVmZmVyICsgMSwgbV9k
ZXN0IC0gbV9idWZmZXIgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2F0dHJO
YW1lLmlzRW1wdHkoKSAmJiAhYXR0cmlidXRlVmFsdWUuY29udGFpbnMoJy8nKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYXR0ck5hbWUgPSBhdHRyaWJ1dGVWYWx1ZTsgLy8gTWFr
ZSB0aGUgbmFtZSBtYXRjaCB0aGUgdmFsdWUuIChGSVhNRTogSXMgdGhpcyBhIFdpbklFIHF1aXJr
PykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRWaWV3U291
cmNlQ2hhcigneCcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpblZpZXdT
b3VyY2VNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4u
YWRkVmlld1NvdXJjZUNoYXIoJ3YnKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Y3VycmVudFRva2VuLmJlZ2luVGFnICYmIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPT0gc2NyaXB0
VGFnICYmICFpblZpZXdTb3VyY2VNb2RlKCkgJiYgIW1fdHJlZUNvbnN0cnVjdG9yLT5za2lwTW9k
ZSgpICYmIG1fYXR0ck5hbWUgPT0gc3JjQXR0cikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBjb250ZXh0KG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuZGF0YSgpLCBtX3Jh
d0F0dHJpYnV0ZUJlZm9yZVZhbHVlLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fWFNTQXVkaXRvciAmJiAhbV9YU1NBdWRpdG9yLT5jYW5Mb2FkRXh0ZXJuYWxTY3Jp
cHRGcm9tU3JjKGF0dHJpYnV0ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlVmFsdWUgPSBibGFua1VSTCgpLnN0cmluZygpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRB
dHRyaWJ1dGUobV9hdHRyTmFtZSwgYXR0cmlidXRlVmFsdWUsIGluVmlld1NvdXJjZU1vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEF0dHJpYnV0ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRUb2tlbi5hZGRWaWV3U291cmNlQ2hhcihjdXJjaGFyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgKm1fZGVzdCsrID0gY3VyY2hhcjsKKyAgICAgICAgICAgICAgICBz
cmMuYWR2YW5jZShtX2xpbmVOdW1iZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVmFsdWU6CisgICAgICAgICAgICB3aGlsZSAoIXNyYy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBjaGVja0J1ZmZlcigpOworICAgICAgICAgICAgICAgIFVD
aGFyIGN1cmNoYXIgPSAqc3JjOworICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyIDw9ICc+JyAm
JiAhc3JjLmVzY2FwZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBFbnRpdGll
cworICAgICAgICAgICAgICAgICAgICBpZiAoY3VyY2hhciA9PSAnJicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gcGFyc2VFbnRpdHkoc3JjLCBtX2Rlc3QsIHN0YXRlLCBjQnVmZmVy
UG9zLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIG5vIHF1b3Rlcy4gRXZlcnkg
c3BhY2UgbWVhbnMgZW5kIG9mIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIC8vICcvJyBkb2Vz
IG5vdCBkZWxpbWl0IGluIElFIQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVNwYWNl
KGN1cmNoYXIpIHx8IGN1cmNoYXIgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
dG9taWNTdHJpbmcgYXR0cmlidXRlVmFsdWUobV9idWZmZXIgKyAxLCBtX2Rlc3QgLSBtX2J1ZmZl
ciAtIDEpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50VG9rZW4uYmVn
aW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWcgJiYgIWluVmlld1Nv
dXJjZU1vZGUoKSAmJiAhbV90cmVlQ29uc3RydWN0b3ItPnNraXBNb2RlKCkgJiYgbV9hdHRyTmFt
ZSA9PSBzcmNBdHRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRl
eHQobV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5kYXRhKCksIG1fcmF3QXR0cmlidXRlQmVmb3Jl
VmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9YU1NBdWRp
dG9yICYmICFtX1hTU0F1ZGl0b3ItPmNhbkxvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoYXR0cmli
dXRlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1
ZSA9IGJsYW5rVVJMKCkuc3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0dHJpYnV0ZShtX2F0dHJO
YW1lLCBhdHRyaWJ1dGVWYWx1ZSwgaW5WaWV3U291cmNlTW9kZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoJ3YnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGVzdCA9IG1fYnVmZmVyOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc2V0VGFnU3RhdGUoU2VhcmNoQXR0cmlidXRlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgKm1fZGVzdCsrID0gY3VyY2hhcjsKKyAgICAgICAgICAgICAgICBzcmMu
YWR2YW5jZShtX2xpbmVOdW1iZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU2VhcmNoRW5kOgorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAo
IXNyYy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBVQ2hhciBjaCA9ICpzcmM7CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09ICc+JyB8fCBjaCA9PSAnPCcpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLycpCisgICAgICAgICAgICAg
ICAgICAgIG1fY3VycmVudFRva2VuLnNlbGZDbG9zaW5nVGFnID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRUb2tlbi5hZGRWaWV3U291cmNlQ2hhcihjaCk7CisgICAgICAgICAgICAgICAgc3JjLmFkdmFu
Y2UobV9saW5lTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBzZWFyY2hDb3Vu
dCA9IDA7IC8vIFN0b3AgbG9va2luZyBmb3IgJzwhLS0nIHNlcXVlbmNlCisgICAgICAgICAgICBz
dGF0ZS5zZXRUYWdTdGF0ZShOb1RhZyk7CisgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwor
CisgICAgICAgICAgICBpZiAoKnNyYyAhPSAnPCcpCisgICAgICAgICAgICAgICAgc3JjLmFkdmFu
Y2UobV9saW5lTnVtYmVyKTsKKworICAgICAgICAgICAgaWYgKG1fY3VycmVudFRva2VuLnRhZ05h
bWUgPT0gbnVsbEF0b20pIHsgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCisgICAgICAgICAgICAg
ICAgbV9jQnVmZmVyUG9zID0gY0J1ZmZlclBvczsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1lID0g
bV9jdXJyZW50VG9rZW4udGFnTmFtZTsKKworICAgICAgICAgICAgLy8gSGFuZGxlIDxzY3JpcHQg
c3JjPSJmb28iLz4gbGlrZSBNb3ppbGxhL09wZXJhLiBXZSBoYXZlIHRvIGRvIHRoaXMgbm93IGZv
ciBEYXNoYm9hcmQKKyAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICBi
b29sIGlzU2VsZkNsb3NpbmdTY3JpcHQgPSBtX2N1cnJlbnRUb2tlbi5zZWxmQ2xvc2luZ1RhZyAm
JiBtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyAmJiBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID09IHNj
cmlwdFRhZzsKKyAgICAgICAgICAgIGJvb2wgYmVnaW5UYWcgPSAhbV9jdXJyZW50VG9rZW4uc2Vs
ZkNsb3NpbmdUYWcgJiYgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWc7CisgICAgICAgICAgICBpZiAo
bV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3Jp
cHRUYWcgJiYgIWluVmlld1NvdXJjZU1vZGUoKSAmJiAhbV90cmVlQ29uc3RydWN0b3ItPnNraXBN
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGEgPSAwOworICAgICAgICAgICAg
ICAgIG1fc2NyaXB0VGFnU3JjQXR0clZhbHVlID0gU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
bV9zY3JpcHRUYWdDaGFyc2V0QXR0clZhbHVlID0gU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
aWYgKG1fY3VycmVudFRva2VuLmF0dHJzICYmICFtX2ZyYWdtZW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2RvYy0+ZnJhbWUoKSAmJiBtX2RvYy0+ZnJhbWUoKS0+c2NyaXB0KCktPmNh
bkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKChhID0gbV9jdXJyZW50VG9rZW4uYXR0cnMtPmdldEF0dHJpYnV0ZUl0
ZW0oc3JjQXR0cikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0VGFnU3Jj
QXR0clZhbHVlID0gbV9kb2MtPmNvbXBsZXRlVVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChhLT52YWx1
ZSgpKSkuc3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuID0gcHJvY2Vzc1Rv
a2VuKCk7CisgICAgICAgICAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVyUG9zOworICAgICAgICAg
ICAgaWYgKG4gfHwgaW5WaWV3U291cmNlTW9kZSgpKSB7CisgICAgICAgICAgICAgICAgU3RhdGUg
c2F2ZWRTdGF0ZSA9IHN0YXRlOworICAgICAgICAgICAgICAgIFNlZ21lbnRlZFN0cmluZyBzYXZl
ZFNyYyA9IHNyYzsKKyAgICAgICAgICAgICAgICBsb25nIHNhdmVkTGluZW5vID0gbV9saW5lTnVt
YmVyOworICAgICAgICAgICAgICAgIGlmICgodGFnTmFtZSA9PSBwcmVUYWcgfHwgdGFnTmFtZSA9
PSBsaXN0aW5nVGFnKSAmJiAhaW5WaWV3U291cmNlTW9kZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChiZWdpblRhZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldERpc2Nh
cmRMRih0cnVlKTsgLy8gRGlzY2FyZCB0aGUgZmlyc3QgTEYgYWZ0ZXIgd2Ugb3BlbiBhIHByZS4K
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gc2NyaXB0VGFnKSB7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghbV9zY3JpcHROb2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zY3JpcHROb2RlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MU2NyaXB0RWxlbWVudD4o
bik7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3NjcmlwdE5vZGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX3NjcmlwdFRhZ0NoYXJzZXRBdHRyVmFsdWUgPSBtX3NjcmlwdE5vZGUtPnNj
cmlwdENoYXJzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXIgPSBzY3JpcHRFbmQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA4OworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc2V0SW5TY3JpcHQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZSA9IHBhcnNlTm9uSFRNTFRleHQoc3JjLCBzdGF0ZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNTZWxmQ2xvc2luZ1NjcmlwdCkgeyAvLyBIYW5kbGUgPHNjcmlw
dCBzcmM9ImZvbyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5TY3JpcHQo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHNjcmlwdEhhbmRsZXIoc3Rh
dGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0
YWdOYW1lID09IHN0eWxlVGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyID0gc3R5bGVFbmQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA3OworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5TdHlsZSh0cnVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gcGFyc2VOb25IVE1MVGV4dChzcmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSB0ZXh0
YXJlYVRhZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc2VhcmNoU3RvcHBlciA9IHRleHRhcmVhRW5kOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyTGVuZ3RoID0gMTA7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zZXRJblRleHRBcmVhKHRydWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxUZXh0KHNyYywgc3RhdGUpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IHRpdGxlVGFn
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zZWFyY2hTdG9wcGVyID0gdGl0bGVFbmQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX3NlYXJjaFN0b3BwZXJMZW5ndGggPSA3OworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc2V0SW5UaXRsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0g
cGFyc2VOb25IVE1MVGV4dChzcmMsIHN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSB4bXBUYWcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJj
aFN0b3BwZXIgPSB4bXBFbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFN0b3Bw
ZXJMZW5ndGggPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0SW5YbXAodHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlTm9uSFRNTFRleHQoc3Jj
LCBzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRhZ05hbWUgPT0gaWZyYW1lVGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiZWdp
blRhZykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyID0gaWZyYW1l
RW5kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hTdG9wcGVyTGVuZ3RoID0gODsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluSUZyYW1lKHRydWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxUZXh0KHNyYywgc3RhdGUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChzcmMuaXNFbXB0eSgpICYmIChzdGF0ZS5pblRpdGxlKCkgfHwgaW5WaWV3U291cmNlTW9k
ZSgpKSAmJiAhc3RhdGUuaW5Db21tZW50KCkgJiYgIShzdGF0ZS5pblNjcmlwdCgpICYmIG1fY3Vy
cmVudFNjcmlwdFRhZ1N0YXJ0TGluZU51bWJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2UganVzdCBhdGUgdGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50IGFzIHRoZSAjdGV4dCBub2RlIHVu
ZGVyIHRoZSBzcGVjaWFsIHRhZyEKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHN0
YXRlIHRoZW4gcmV0b2tlbml6ZSB3aXRob3V0IHNwZWNpYWwgaGFuZGxpbmcuCisgICAgICAgICAg
ICAgICAgICAgIC8vIExldCB0aGUgcGFyc2VyIGNsZWFuIHVwIHRoZSBtaXNzaW5nIGNsb3NlIHRh
Zy4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0LCBiZWNh
dXNlIHNyYy5pc0VtcHR5KCkgZG9lc24ndCBtZWFuIHdlJ3JlCisgICAgICAgICAgICAgICAgICAg
IC8vIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50IHVubGVzcyBtX25vTW9yZURhdGEgaXMgYWxz
byB0cnVlLiBXZSBuZWVkCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIGRldGVjdCB0aGlzIGNh
c2UgZWxzZXdoZXJlLCBhbmQgc2F2ZSB0aGUgc3RhdGUgc29tZXdoZXJlIG90aGVyCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoYW4gYSBsb2NhbCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBzYXZlZFN0YXRlOworICAgICAgICAgICAgICAgICAgICBzcmMgPSBzYXZlZFNy
YzsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lTnVtYmVyID0gc2F2ZWRMaW5lbm87CisgICAg
ICAgICAgICAgICAgICAgIG1fc2NyaXB0Q29kZVNpemUgPSAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0YWdOYW1lID09IHBsYWludGV4dFRhZykK
KyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJblBsYWluVGV4dChiZWdpblRhZyk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGU7IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQorICAgICAgICB9Cisg
ICAgICAgIH0gLy8gZW5kIHN3aXRjaAorICAgIH0KKyAgICBtX2NCdWZmZXJQb3MgPSBjQnVmZmVy
UG9zOworICAgIHJldHVybiBzdGF0ZTsKK30KKworaW5saW5lIGJvb2wgSFRNTERvY3VtZW50UGFy
c2VyOjpjb250aW51ZVByb2Nlc3NpbmcoaW50JiBwcm9jZXNzZWRDb3VudCwgZG91YmxlIHN0YXJ0
VGltZSwgU3RhdGUgJnN0YXRlKQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYmUgY2hlY2tp
bmcgZWxhcHNlZCB0aW1lIHdpdGggZXZlcnkgY2hhcmFjdGVyLCBzbyB3ZSBvbmx5IGNoZWNrIGFm
dGVyIHdlJ3ZlCisgICAgLy8gcHJvY2Vzc2VkIGEgY2VydGFpbiBudW1iZXIgb2YgY2hhcmFjdGVy
cy4KKyAgICBib29sIGFsbG93ZWRZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQoKTsKKyAgICBzdGF0
ZS5zZXRBbGxvd1lpZWxkKGZhbHNlKTsKKyAgICBpZiAoIXN0YXRlLmxvYWRpbmdFeHRTY3JpcHQo
KSAmJiAhc3RhdGUuZm9yY2VTeW5jaHJvbm91cygpICYmICFtX2V4ZWN1dGluZ1NjcmlwdCAmJiAo
cHJvY2Vzc2VkQ291bnQgPiBtX3Rva2VuaXplckNodW5rU2l6ZSB8fCBhbGxvd2VkWWllbGQpKSB7
CisgICAgICAgIHByb2Nlc3NlZENvdW50ID0gMDsKKyAgICAgICAgaWYgKGN1cnJlbnRUaW1lKCkg
LSBzdGFydFRpbWUgPiBtX3Rva2VuaXplclRpbWVEZWxheSkgeworICAgICAgICAgICAgLyogRklY
TUU6IFdlJ2QgbGlrZSB0byB5aWVsZCBhZ2dyZXNzaXZlbHkgdG8gZ2l2ZSBzdHlsZXNoZWV0cyB0
aGUgb3Bwb3J0dW5pdHkgdG8KKyAgICAgICAgICAgICAgIGxvYWQsIGJ1dCB0aGlzIGh1cnRzIG92
ZXJhbGwgcGVyZm9ybWFuY2Ugb24gc2xvd2VyIG1hY2hpbmVzLiAgRm9yIG5vdyB0dXJuIHRoaXMK
KyAgICAgICAgICAgICAgIG9mZi4KKyAgICAgICAgICAgIHx8ICghbV9kb2MtPmhhdmVTdHlsZXNo
ZWV0c0xvYWRlZCgpICYmCisgICAgICAgICAgICAgICAgKG1fZG9jLT5kb2N1bWVudEVsZW1lbnQo
KS0+aWQoKSAhPSBJRF9IVE1MIHx8IG1fZG9jLT5ib2R5KCkpKSkgeyovCisgICAgICAgICAgICAv
LyBTY2hlZHVsZSB0aGUgdGltZXIgdG8ga2VlcCBwcm9jZXNzaW5nIGFzIHNvb24gYXMgcG9zc2li
bGUuCisgICAgICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb2Nlc3NlZENvdW50Kys7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFR1cm5zIHRoZSBzdGF0ZW1hY2hpbmUgb25lIGNyYW5r
IHVzaW5nIHRoZSBwYXNzZWQgaW4gU3RhdGUgb2JqZWN0LgorLy8gVGhpcyBkb2VzIG5vdCBtb2Rp
ZnkgbV9zdGF0ZSBkaXJlY3RseSBpbiBvcmRlciB0byBiZSByZWVudHJhbnQuCitBTFdBWVNfSU5M
SU5FIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphZHZhbmNlKFN0YXRlJiBzdGF0ZSkKK3sKKyAg
ICAvLyBkbyB3ZSBuZWVkIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlcj8KKyAgICBjaGVja0J1ZmZlcigp
OworCisgICAgVUNoYXIgY2MgPSAqbV9zcmM7CisKKyAgICBib29sIHdhc1NraXBMRiA9IHN0YXRl
LnNraXBMRigpOworICAgIGlmICh3YXNTa2lwTEYpCisgICAgICAgIHN0YXRlLnNldFNraXBMRihm
YWxzZSk7CisKKyAgICBpZiAod2FzU2tpcExGICYmIChjYyA9PSAnXG4nKSkKKyAgICAgICAgbV9z
cmMuYWR2YW5jZSgpOworICAgIGVsc2UgaWYgKHN0YXRlLm5lZWRzU3BlY2lhbFdyaXRlSGFuZGxp
bmcoKSkgeworICAgICAgICAvLyBpdCdzIGltcG9ydGFudCB0byBrZWVwIG5lZWRzU3BlY2lhbFdy
aXRlSGFuZGxpbmcgd2l0aCB0aGUgZmxhZ3MgdGhpcyBibG9jayB0ZXN0cworICAgICAgICBpZiAo
c3RhdGUuaGFzRW50aXR5U3RhdGUoKSkKKyAgICAgICAgICAgIHN0YXRlID0gcGFyc2VFbnRpdHko
bV9zcmMsIG1fZGVzdCwgc3RhdGUsIG1fY0J1ZmZlclBvcywgZmFsc2UsIHN0YXRlLmhhc1RhZ1N0
YXRlKCkpOworICAgICAgICBlbHNlIGlmIChzdGF0ZS5pblBsYWluVGV4dCgpKQorICAgICAgICAg
ICAgc3RhdGUgPSBwYXJzZVRleHQobV9zcmMsIHN0YXRlKTsKKyAgICAgICAgZWxzZSBpZiAoc3Rh
dGUuaW5BbnlOb25IVE1MVGV4dCgpKQorICAgICAgICAgICAgc3RhdGUgPSBwYXJzZU5vbkhUTUxU
ZXh0KG1fc3JjLCBzdGF0ZSk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlLmluQ29tbWVudCgpKQor
ICAgICAgICAgICAgc3RhdGUgPSBwYXJzZUNvbW1lbnQobV9zcmMsIHN0YXRlKTsKKyAgICAgICAg
ZWxzZSBpZiAoc3RhdGUuaW5Eb2N0eXBlKCkpCisgICAgICAgICAgICBzdGF0ZSA9IHBhcnNlRG9j
dHlwZShtX3NyYywgc3RhdGUpOworICAgICAgICBlbHNlIGlmIChzdGF0ZS5pblNlcnZlcigpKQor
ICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVNlcnZlcihtX3NyYywgc3RhdGUpOworICAgICAgICBl
bHNlIGlmIChzdGF0ZS5pblByb2Nlc3NpbmdJbnN0cnVjdGlvbigpKQorICAgICAgICAgICAgc3Rh
dGUgPSBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihtX3NyYywgc3RhdGUpOworICAgICAgICBl
bHNlIGlmIChzdGF0ZS5oYXNUYWdTdGF0ZSgpKQorICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVRh
ZyhtX3NyYywgc3RhdGUpOworICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdGFydFRhZygpKSB7Cisg
ICAgICAgICAgICBzdGF0ZS5zZXRTdGFydFRhZyhmYWxzZSk7CisKKyAgICAgICAgICAgIHN3aXRj
aCAoY2MpIHsKKyAgICAgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAnISc6IHsKKyAgICAgICAgICAgICAgICAvLyA8IS0tIGNvbW1lbnQg
LS0+IG9yIDwhRE9DVFlQRSAuLi4+CisgICAgICAgICAgICAgICAgc2VhcmNoQ291bnQgPSAxOyAv
LyBMb29rIGZvciAnPCEtLScgc2VxdWVuY2UgdG8gc3RhcnQgY29tbWVudCBvciAnPCFET0NUWVBF
JyBzZXF1ZW5jZSB0byBzdGFydCBkb2N0eXBlCisgICAgICAgICAgICAgICAgbV9kb2N0eXBlU2Vh
cmNoQ291bnQgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSAnPyc6IHsKKyAgICAgICAgICAgICAgICAvLyB4bWwgcHJvY2Vzc2luZyBp
bnN0cnVjdGlvbgorICAgICAgICAgICAgICAgIHN0YXRlLnNldEluUHJvY2Vzc2luZ0luc3RydWN0
aW9uKHRydWUpOworICAgICAgICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CisgICAgICAgICAg
ICAgICAgc3RhdGUgPSBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihtX3NyYywgc3RhdGUpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
JyUnOgorICAgICAgICAgICAgICAgIGlmICghbV9icm9rZW5TZXJ2ZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gPCUgc2VydmVyIHN0dWZmLCBoYW5kbGUgYXMgY29tbWVudCAlPgorICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zZXRJblNlcnZlcih0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgdHF1b3RlID0gTm9RdW90ZTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBwYXJzZVNl
cnZlcihtX3NyYywgc3RhdGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGVsc2UgZmFsbCB0aHJvdWdoCisgICAgICAg
ICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgaWYgKCgoY2MgPj0gJ2EnKSAmJiAoY2Mg
PD0gJ3onKSkgfHwgKChjYyA+PSAnQScpICYmIChjYyA8PSAnWicpKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBTdGFydCBvZiBhIFN0YXJ0LVRhZworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgdGFnCisgICAgICAgICAgICAgICAgICAg
IC8vIEFkZCBhcyBpcworICAgICAgICAgICAgICAgICAgICAqbV9kZXN0ID0gJzwnOworICAgICAg
ICAgICAgICAgICAgICBtX2Rlc3QrKzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07IC8vIGVuZCBjYXNl
CisKKyAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOworCisgICAgICAgICAgICBtX2NCdWZmZXJQ
b3MgPSAwOworICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoVGFnTmFtZSk7CisgICAgICAg
ICAgICBzdGF0ZSA9IHBhcnNlVGFnKG1fc3JjLCBzdGF0ZSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKGNjID09ICcmJyAmJiAhbV9zcmMuZXNjYXBlZCgpKSB7CisgICAgICAgIG1fc3JjLmFk
dmFuY2VQYXN0Tm9uTmV3bGluZSgpOworICAgICAgICBzdGF0ZSA9IHBhcnNlRW50aXR5KG1fc3Jj
LCBtX2Rlc3QsIHN0YXRlLCBtX2NCdWZmZXJQb3MsIHRydWUsIHN0YXRlLmhhc1RhZ1N0YXRlKCkp
OworICAgIH0gZWxzZSBpZiAoY2MgPT0gJzwnICYmICFtX3NyYy5lc2NhcGVkKCkpIHsKKyAgICAg
ICAgbV9jdXJyZW50VGFnU3RhcnRMaW5lTnVtYmVyID0gbV9saW5lTnVtYmVyOworICAgICAgICBt
X3NyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgc3RhdGUuc2V0U3RhcnRUYWco
dHJ1ZSk7CisgICAgICAgIHN0YXRlLnNldERpc2NhcmRMRihmYWxzZSk7CisgICAgfSBlbHNlIGlm
IChjYyA9PSAnXG4nIHx8IGNjID09ICdccicpIHsKKyAgICAgICAgaWYgKHN0YXRlLmRpc2NhcmRM
RigpKQorICAgICAgICAgICAgLy8gSWdub3JlIHRoaXMgTEYKKyAgICAgICAgICAgIHN0YXRlLnNl
dERpc2NhcmRMRihmYWxzZSk7IC8vIFdlIGhhdmUgZGlzY2FyZGVkIDEgTEYKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAvLyBQcm9jZXNzIHRoaXMgTEYKKyAgICAgICAgICAgICptX2Rlc3Qr
KyA9ICdcbic7CisgICAgICAgICAgICBpZiAoY2MgPT0gJ1xyJyAmJiAhbV9zcmMuZXhjbHVkZUxp
bmVOdW1iZXJzKCkpCisgICAgICAgICAgICAgICAgbV9saW5lTnVtYmVyKys7CisgICAgICAgIH0K
KworICAgICAgICAvKiBDaGVjayBmb3IgTVMtRE9TIENSTEYgc2VxdWVuY2UgKi8KKyAgICAgICAg
aWYgKGNjID09ICdccicpCisgICAgICAgICAgICBzdGF0ZS5zZXRTa2lwTEYodHJ1ZSk7CisgICAg
ICAgIG1fc3JjLmFkdmFuY2UobV9saW5lTnVtYmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dGF0ZS5zZXREaXNjYXJkTEYoZmFsc2UpOworICAgICAgICAqbV9kZXN0KysgPSBjYzsKKyAgICAg
ICAgbV9zcmMuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7CisgICAgfQorfQorCit2b2lkIEhUTUxE
b2N1bWVudFBhcnNlcjo6d2lsbFdyaXRlSFRNTChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSkKK3sKKyAgICAjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgaWYgKEluc3BlY3RvclRp
bWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBtX2RvYy0+aW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpKQorICAgICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFdyaXRlSFRNTChzb3VyY2UubGVu
Z3RoKCksIG1fbGluZU51bWJlcik7CisgICAgI2VuZGlmCit9CisKK3ZvaWQgSFRNTERvY3VtZW50
UGFyc2VyOjpkaWRXcml0ZUhUTUwoKQoreworICAgICNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
ICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IG1fZG9jLT5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRX
cml0ZUhUTUwobV9saW5lTnVtYmVyKTsKKyAgICAjZW5kaWYKK30KKwordm9pZCBIVE1MRG9jdW1l
bnRQYXJzZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc3RyLCBib29sIGFwcGVuZERh
dGEpCit7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
cGFyc2VyU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2VnbWVudGVkU3RyaW5nIHNv
dXJjZShzdHIpOworICAgIGlmIChtX2V4ZWN1dGluZ1NjcmlwdCkKKyAgICAgICAgc291cmNlLnNl
dEV4Y2x1ZGVMaW5lTnVtYmVycygpOworCisgICAgaWYgKChtX2V4ZWN1dGluZ1NjcmlwdCAmJiBh
cHBlbmREYXRhKSB8fCAhbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
ZG9uJ3QgcGFyc2U7IHdlIHdpbGwgZG8gdGhpcyBsYXRlcgorICAgICAgICBpZiAobV9jdXJyZW50
UHJlcGVuZGluZ1NyYykKKyAgICAgICAgICAgIG1fY3VycmVudFByZXBlbmRpbmdTcmMtPmFwcGVu
ZChzb3VyY2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NyYy5hcHBl
bmQoc291cmNlKTsKKyNpZiBQUkVMT0FEX1NDQU5ORVJfRU5BQkxFRAorICAgICAgICAgICAgaWYg
KG1fcHJlbG9hZFNjYW5uZXIgJiYgbV9wcmVsb2FkU2Nhbm5lci0+aW5Qcm9ncmVzcygpICYmIGFw
cGVuZERhdGEpCisgICAgICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+d3JpdGUoc291cmNl
KTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBQUkVM
T0FEX1NDQU5ORVJfRU5BQkxFRAorICAgIGlmIChtX3ByZWxvYWRTY2FubmVyICYmIG1fcHJlbG9h
ZFNjYW5uZXItPmluUHJvZ3Jlc3MoKSAmJiBhcHBlbmREYXRhKQorICAgICAgICBtX3ByZWxvYWRT
Y2FubmVyLT5lbmQoKTsKKyNlbmRpZgorCisgICAgaWYgKCFtX3NyYy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fc3JjLmFwcGVuZChzb3VyY2UpOworICAgIGVsc2UKKyAgICAgICAgc2V0U3JjKHNvdXJj
ZSk7CisKKyAgICAvLyBPbmNlIGEgdGltZXIgaXMgc2V0LCBpdCBoYXMgY29udHJvbCBvZiB3aGVu
IHRoZSBwYXJzZXIgY29udGludWVzLgorICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGJvb2wgd2FzSW5Xcml0ZSA9IG1faW5Xcml0ZTsKKyAgICBtX2lu
V3JpdGUgPSB0cnVlOworCisgICAgd2lsbFdyaXRlSFRNTChzb3VyY2UpOworCisgICAgRnJhbWUq
IGZyYW1lID0gbV9kb2MtPmZyYW1lKCk7CisgICAgU3RhdGUgc3RhdGUgPSBtX3N0YXRlOworICAg
IGludCBwcm9jZXNzZWRDb3VudCA9IDA7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRU
aW1lKCk7CisKKyAgICB3aGlsZSAoIW1fc3JjLmlzRW1wdHkoKSAmJiAoIWZyYW1lIHx8ICFmcmFt
ZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+bG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkpKSB7CisgICAg
ICAgIGlmICghY29udGludWVQcm9jZXNzaW5nKHByb2Nlc3NlZENvdW50LCBzdGFydFRpbWUsIHN0
YXRlKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhZHZhbmNlKHN0YXRlKTsKKyAgICB9
CisKKyAgICBkaWRXcml0ZUhUTUwoKTsKKworICAgIG1faW5Xcml0ZSA9IHdhc0luV3JpdGU7Cisg
ICAgbV9zdGF0ZSA9IHN0YXRlOworCisgICAgaWYgKG1fbm9Nb3JlRGF0YSAmJiAhbV9pbldyaXRl
ICYmICFzdGF0ZS5sb2FkaW5nRXh0U2NyaXB0KCkgJiYgIW1fZXhlY3V0aW5nU2NyaXB0ICYmICFt
X3RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIGVuZCgpOyAvLyB0aGlzIGFjdHVhbGx5IGNhdXNl
cyB1cyB0byBiZSBkZWxldGVkCisKKyAgICAvLyBBZnRlciBwYXJzaW5nLCBnbyBhaGVhZCBhbmQg
ZGlzcGF0Y2ggaW1hZ2UgYmVmb3JlbG9hZCBldmVudHMuCisgICAgSW1hZ2VMb2FkZXI6OmRpc3Bh
dGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudHMoKTsKK30KKwordm9pZCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OnN0b3BQYXJzaW5nKCkKK3sKKyAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsK
KyAgICBtX3RpbWVyLnN0b3AoKTsKKworICAgIC8vIEZJWE1FOiBXaHkgaXMgSFRNTERvY3VtZW50
UGFyc2VyIHRoZSBvbmx5IERvY3VtZW50UGFyc2VyIHdoaWNoIGNhbGxzIGNoZWNrQ29tcGxldGVk
PworICAgIC8vIFRoZSBGcmFtZUxvYWRlciBuZWVkcyB0byBrbm93IHRoYXQgdGhlIHBhcnNlciBo
YXMgZmluaXNoZWQgd2l0aCBpdHMgZGF0YSwKKyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIg
aXQgaGFwcGVuZWQgbmF0dXJhbGx5IG9yIGR1ZSB0byBtYW51YWwgaW50ZXJ2ZW50aW9uLgorICAg
IGlmICghbV9mcmFnbWVudCAmJiBtX2RvYy0+ZnJhbWUoKSkKKyAgICAgICAgbV9kb2MtPmZyYW1l
KCktPmxvYWRlcigpLT5jaGVja0NvbXBsZXRlZCgpOworfQorCitib29sIEhUTUxEb2N1bWVudFBh
cnNlcjo6cHJvY2Vzc2luZ0RhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbWVyLmlzQWN0
aXZlKCkgfHwgbV9pbldyaXRlOworfQorCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJG
aXJlZChUaW1lcjxIVE1MRG9jdW1lbnRQYXJzZXI+KikKK3sKKyAgICBpZiAobV9kb2MtPnZpZXco
KSAmJiBtX2RvYy0+dmlldygpLT5sYXlvdXRQZW5kaW5nKCkgJiYgIW1fZG9jLT5taW5pbXVtTGF5
b3V0RGVsYXkoKSkgeworICAgICAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lciBhbmQgbGV0IGxheW91
dCB3aW4uICBUaGlzIGlzIGJhc2ljYWxseSBhIHdheSBvZiBlbnN1cmluZyB0aGF0IHRoZSBsYXlv
dXQKKyAgICAgICAgLy8gdGltZXIgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIG91ciB0aW1lci4K
KyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBJbnZva2Ugd3JpdGUoKSBhcyB0aG91Z2ggbW9yZSBkYXRhIGNhbWUgaW4uIFRo
aXMgbWlnaHQgY2F1c2UgdXMgdG8gZ2V0IGRlbGV0ZWQuCisgICAgd3JpdGUoU2VnbWVudGVkU3Ry
aW5nKCksIHRydWUpOworfQorCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZW5kKCkKK3sKKyAg
ICBBU1NFUlQoIW1fdGltZXIuaXNBY3RpdmUoKSk7CisgICAgbV90aW1lci5zdG9wKCk7IC8vIE9u
bHkgaGVscHMgaWYgYXNzZXJ0aW9uIGFib3ZlIGZpcmVzLCBidXQgZG8gaXQgYW55d2F5LgorCisg
ICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIC8vIHBhcnNlVGFnIGlzIHVzaW5nIHRoZSBidWZm
ZXIgZm9yIGRpZmZlcmVudCBtYXR0ZXJzCisgICAgICAgIGlmICghbV9zdGF0ZS5oYXNUYWdTdGF0
ZSgpKQorICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7CisKKyAgICAgICAgZmFzdEZyZWUobV9z
Y3JpcHRDb2RlKTsKKyAgICAgICAgbV9zY3JpcHRDb2RlID0gMDsKKyAgICAgICAgbV9zY3JpcHRD
b2RlU2l6ZSA9IG1fc2NyaXB0Q29kZUNhcGFjaXR5ID0gbV9zY3JpcHRDb2RlUmVzeW5jID0gMDsK
KworICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgICAgIG1fYnVmZmVyID0gMDsKKyAg
ICB9CisKKyAgICBpZiAoIWluVmlld1NvdXJjZU1vZGUoKSkKKyAgICAgICAgbV90cmVlQ29uc3Ry
dWN0b3ItPmZpbmlzaGVkKCk7CisgICAgZWxzZQorICAgICAgICBtX2RvYy0+ZmluaXNoZWRQYXJz
aW5nKCk7Cit9CisKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpmaW5pc2goKQoreworICAgIC8v
IGRvIHRoaXMgYXMgbG9uZyBhcyB3ZSBkb24ndCBmaW5kIG1hdGNoaW5nIGNvbW1lbnQgZW5kcwor
ICAgIHdoaWxlICgobV9zdGF0ZS5pbkNvbW1lbnQoKSB8fCBtX3N0YXRlLmluU2VydmVyKCkpICYm
IG1fc2NyaXB0Q29kZSAmJiBtX3NjcmlwdENvZGVTaXplKSB7CisgICAgICAgIC8vIHdlJ3ZlIGZv
dW5kIGFuIHVubWF0Y2hlZCBjb21tZW50IHN0YXJ0CisgICAgICAgIGlmIChtX3N0YXRlLmluQ29t
bWVudCgpKQorICAgICAgICAgICAgbV9icm9rZW5Db21tZW50cyA9IHRydWU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fYnJva2VuU2VydmVyID0gdHJ1ZTsKKyAgICAgICAgY2hlY2tTY3Jp
cHRCdWZmZXIoKTsKKyAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemVdID0gMDsK
KyAgICAgICAgbV9zY3JpcHRDb2RlW21fc2NyaXB0Q29kZVNpemUgKyAxXSA9IDA7CisgICAgICAg
IGludCBwb3M7CisgICAgICAgIFN0cmluZyBmb29kOworICAgICAgICBpZiAobV9zdGF0ZS5pblNj
cmlwdCgpIHx8IG1fc3RhdGUuaW5TdHlsZSgpIHx8IG1fc3RhdGUuaW5UZXh0QXJlYSgpKQorICAg
ICAgICAgICAgZm9vZCA9IFN0cmluZyhtX3NjcmlwdENvZGUsIG1fc2NyaXB0Q29kZVNpemUpOwor
ICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmluU2VydmVyKCkpIHsKKyAgICAgICAgICAgIGZvb2Qg
PSAiPCI7CisgICAgICAgICAgICBmb29kLmFwcGVuZChtX3NjcmlwdENvZGUsIG1fc2NyaXB0Q29k
ZVNpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcG9zID0gZmluZChtX3Njcmlw
dENvZGUsIG1fc2NyaXB0Q29kZVNpemUsICc+Jyk7CisgICAgICAgICAgICBmb29kID0gU3RyaW5n
KG1fc2NyaXB0Q29kZSArIHBvcyArIDEsIG1fc2NyaXB0Q29kZVNpemUgLSBwb3MgLSAxKTsKKyAg
ICAgICAgfQorICAgICAgICBmYXN0RnJlZShtX3NjcmlwdENvZGUpOworICAgICAgICBtX3Njcmlw
dENvZGUgPSAwOworICAgICAgICBtX3NjcmlwdENvZGVTaXplID0gbV9zY3JpcHRDb2RlQ2FwYWNp
dHkgPSBtX3NjcmlwdENvZGVSZXN5bmMgPSAwOworICAgICAgICBtX3N0YXRlLnNldEluQ29tbWVu
dChmYWxzZSk7CisgICAgICAgIG1fc3RhdGUuc2V0SW5TZXJ2ZXIoZmFsc2UpOworICAgICAgICBp
ZiAoIWZvb2QuaXNFbXB0eSgpKQorICAgICAgICAgICAgd3JpdGUoZm9vZCwgdHJ1ZSk7CisgICAg
fQorICAgIC8vIHRoaXMgaW5kaWNhdGVzIHdlIHdpbGwgbm90IHJlY2VpdmUgYW55IG1vcmUgZGF0
YS4uLiBidXQgaWYgd2UgYXJlIHdhaXRpbmcgb24KKyAgICAvLyBhbiBleHRlcm5hbCBzY3JpcHQg
dG8gbG9hZCwgd2UgY2FuJ3QgZmluaXNoIHBhcnNpbmcgdW50aWwgdGhhdCBpcyBkb25lCisgICAg
bV9ub01vcmVEYXRhID0gdHJ1ZTsKKyAgICBpZiAoIW1faW5Xcml0ZSAmJiAhbV9zdGF0ZS5sb2Fk
aW5nRXh0U2NyaXB0KCkgJiYgIW1fZXhlY3V0aW5nU2NyaXB0ICYmICFtX3RpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIGVuZCgpOyAvLyB0aGlzIGFjdHVhbGx5IGNhdXNlcyB1cyB0byBiZSBkZWxl
dGVkCit9CisKK2Jvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQorewor
ICAgIHJldHVybiBtX25vTW9yZURhdGE7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZT4gSFRNTERvY3Vt
ZW50UGFyc2VyOjpwcm9jZXNzVG9rZW4oKQoreworICAgIGlmIChtX2Rlc3QgPiBtX2J1ZmZlcikg
eworICAgICAgICBtX2N1cnJlbnRUb2tlbi50ZXh0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBw
aW5nTnVsbENoYXJhY3RlcnMobV9idWZmZXIsIG1fZGVzdCAtIG1fYnVmZmVyKTsKKyAgICAgICAg
aWYgKG1fY3VycmVudFRva2VuLnRhZ05hbWUgIT0gY29tbWVudEF0b20pCisgICAgICAgICAgICBt
X2N1cnJlbnRUb2tlbi50YWdOYW1lID0gdGV4dEF0b207CisgICAgfSBlbHNlIGlmIChtX2N1cnJl
bnRUb2tlbi50YWdOYW1lID09IG51bGxBdG9tKSB7CisgICAgICAgIG1fY3VycmVudFRva2VuLnJl
c2V0KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG1fZGVzdCA9IG1fYnVmZmVy
OworCisgICAgUmVmUHRyPE5vZGU+IG47CisKKyAgICBpZiAoIW1fcGFyc2VyU3RvcHBlZCkgewor
ICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBtYXAgPSBtX2N1cnJlbnRUb2tlbi5hdHRycy5nZXQo
KSkKKyAgICAgICAgICAgIG1hcC0+c2hyaW5rVG9MZW5ndGgoKTsKKyAgICAgICAgaWYgKGluVmll
d1NvdXJjZU1vZGUoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxWaWV3U291cmNlRG9j
dW1lbnQqPihtX2RvYyktPmFkZFZpZXdTb3VyY2VUb2tlbigmbV9jdXJyZW50VG9rZW4pOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICAvLyBwYXNzIHRoZSB0b2tlbiBvdmVyIHRvIHRoZSBwYXJz
ZXIsIHRoZSBwYXJzZXIgRE9FUyBOT1QgZGVsZXRlIHRoZSB0b2tlbgorICAgICAgICAgICAgbiA9
IG1fdHJlZUNvbnN0cnVjdG9yLT5wYXJzZVRva2VuKCZtX2N1cnJlbnRUb2tlbik7CisgICAgfQor
ICAgIG1fY3VycmVudFRva2VuLnJlc2V0KCk7CisKKyAgICByZXR1cm4gbi5yZWxlYXNlKCk7Cit9
CisKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzRG9jdHlwZVRva2VuKCkKK3sKKyAg
ICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MVmlld1Nv
dXJjZURvY3VtZW50Kj4obV9kb2MpLT5hZGRWaWV3U291cmNlRG9jdHlwZVRva2VuKCZtX2RvY3R5
cGVUb2tlbik7CisgICAgZWxzZQorICAgICAgICBtX3RyZWVDb25zdHJ1Y3Rvci0+cGFyc2VEb2N0
eXBlVG9rZW4oJm1fZG9jdHlwZVRva2VuKTsKK30KKworSFRNTERvY3VtZW50UGFyc2VyOjp+SFRN
TERvY3VtZW50UGFyc2VyKCkKK3sKKyAgICBBU1NFUlQoIW1faW5Xcml0ZSk7CisgICAgcmVzZXQo
KTsKK30KKworCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZW5sYXJnZUJ1ZmZlcihpbnQgbGVu
KQoreworICAgIC8vIFJlc2l6ZSBwb2xpY3k6IEFsd2F5cyBhdCBsZWFzdCBkb3VibGUgdGhlIHNp
emUgb2YgdGhlIGJ1ZmZlciBlYWNoIHRpbWUuCisgICAgaW50IGRlbHRhID0gbWF4KGxlbiwgbV9i
dWZmZXJTaXplKTsKKworICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KKyAgICAvLyBGb3Igbm93
LCBoYW5kbGUgb3ZlcmZsb3cgdGhlIHNhbWUgd2F5IHdlIGhhbmRsZSBmYXN0UmVhbGxvYyBmYWls
dXJlLCB3aXRoIENSQVNILgorICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4U2l6ZSA9IElOVF9NQVgg
LyBzaXplb2YoVUNoYXIpOworICAgIGlmIChkZWx0YSA+IG1heFNpemUgLSBtX2J1ZmZlclNpemUp
CisgICAgICAgIENSQVNIKCk7CisKKyAgICBpbnQgbmV3U2l6ZSA9IG1fYnVmZmVyU2l6ZSArIGRl
bHRhOworICAgIGludCBvbGRPZmZzZXQgPSBtX2Rlc3QgLSBtX2J1ZmZlcjsKKyAgICBtX2J1ZmZl
ciA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG5ld1NpemUgKiBz
aXplb2YoVUNoYXIpKSk7CisgICAgbV9kZXN0ID0gbV9idWZmZXIgKyBvbGRPZmZzZXQ7CisgICAg
bV9idWZmZXJTaXplID0gbmV3U2l6ZTsKK30KKwordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmVu
bGFyZ2VTY3JpcHRCdWZmZXIoaW50IGxlbikKK3sKKyAgICAvLyBSZXNpemUgcG9saWN5OiBBbHdh
eXMgYXQgbGVhc3QgZG91YmxlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgZWFjaCB0aW1lLgorICAg
IGludCBkZWx0YSA9IG1heChsZW4sIG1fc2NyaXB0Q29kZUNhcGFjaXR5KTsKKworICAgIC8vIENo
ZWNrIGZvciBvdmVyZmxvdy4KKyAgICAvLyBGb3Igbm93LCBoYW5kbGUgb3ZlcmZsb3cgdGhlIHNh
bWUgd2F5IHdlIGhhbmRsZSBmYXN0UmVhbGxvYyBmYWlsdXJlLCB3aXRoIENSQVNILgorICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4U2l6ZSA9IElOVF9NQVggLyBzaXplb2YoVUNoYXIpOworICAgIGlm
IChkZWx0YSA+IG1heFNpemUgLSBtX3NjcmlwdENvZGVDYXBhY2l0eSkKKyAgICAgICAgQ1JBU0go
KTsKKworICAgIGludCBuZXdTaXplID0gbV9zY3JpcHRDb2RlQ2FwYWNpdHkgKyBkZWx0YTsKKyAg
ICAvLyBJZiB3ZSBhbGxvdyBmYXN0UmVhbGxvYyhwdHIsIDApLCBpdCB3aWxsIGNhbGwgQ1JBU0go
KS4gV2UgcnVuIGludG8gdGhpcworICAgIC8vIGNhc2UgaWYgdGhlIEhUTUwgYmVpbmcgcGFyc2Vk
IGJlZ2lucyB3aXRoICI8IS0tIiBhbmQgdGhlcmUncyBtb3JlIGRhdGEKKyAgICAvLyBjb21pbmcu
CisgICAgaWYgKCFuZXdTaXplKSB7CisgICAgICAgIEFTU0VSVCghbV9zY3JpcHRDb2RlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2NyaXB0Q29kZSA9IHN0YXRpY19jYXN0PFVD
aGFyKj4oZmFzdFJlYWxsb2MobV9zY3JpcHRDb2RlLCBuZXdTaXplICogc2l6ZW9mKFVDaGFyKSkp
OworICAgIG1fc2NyaXB0Q29kZUNhcGFjaXR5ID0gbmV3U2l6ZTsKK30KKwordm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkKK3sKKyAg
ICBBU1NFUlQobV9kb2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKKworICAgIGlmIChtX2hh
c1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMpCisgICAgICAgIG5vdGlmeUZpbmlzaGVkKDAp
OworfQorCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UqKQoreworICAgIGV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5KCk7Cit9CisKK3Zv
aWQgSFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzSWZSZWFkeSgpCit7
CisgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSk7CisKKyAgICAvLyBNYWtl
IGV4dGVybmFsIHNjcmlwdHMgd2FpdCBmb3IgZXh0ZXJuYWwgc3R5bGVzaGVldHMuCisgICAgLy8g
RklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBmb3IgaW5saW5lIHNjcmlwdHMgdG9vLgorICAg
IG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyA9ICFtX2RvYy0+aGF2ZVN0eWxlc2hl
ZXRzTG9hZGVkKCk7CisgICAgaWYgKG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykK
KyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOworCisgICAgZG91
YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgd2hpbGUgKCFmaW5pc2hlZCAmJiBt
X3BlbmRpbmdTY3JpcHRzLmZpcnN0KCktPmlzTG9hZGVkKCkpIHsKKyAgICAgICAgaWYgKCFjb250
aW51ZUV4ZWN1dGluZ0V4dGVybmFsU2NyaXB0cyhzdGFydFRpbWUpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBjcyA9IG1f
cGVuZGluZ1NjcmlwdHMudGFrZUZpcnN0KCk7CisgICAgICAgIEFTU0VSVChjYWNoZSgpLT5kaXNh
YmxlZCgpIHx8IGNzLT5hY2Nlc3NDb3VudCgpID4gMCk7CisKKyAgICAgICAgc2V0U3JjKFNlZ21l
bnRlZFN0cmluZygpKTsKKworICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZm9yZ2V0IGFib3V0IHRo
ZSBzY3JpcHQgYmVmb3JlIHdlIGV4ZWN1dGUgdGhlIG5ldyBvbmUKKyAgICAgICAgLy8gaW5maW5p
dGUgcmVjdXJzaW9uIG1pZ2h0IGhhcHBlbiBvdGhlcndpc2UKKyAgICAgICAgU2NyaXB0U291cmNl
Q29kZSBzb3VyY2VDb2RlKGNzLmdldCgpKTsKKyAgICAgICAgYm9vbCBlcnJvck9jY3VycmVkID0g
Y3MtPmVycm9yT2NjdXJyZWQoKTsKKyAgICAgICAgY3MtPnJlbW92ZUNsaWVudCh0aGlzKTsKKwor
ICAgICAgICBSZWZQdHI8Tm9kZT4gbiA9IG1fc2NyaXB0Tm9kZS5yZWxlYXNlKCk7CisKKyAgICAg
ICAgaWYgKGVycm9yT2NjdXJyZWQpCisgICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIGZhbHNlKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4o
bi5nZXQoKSktPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICAgICAgICAgICAgICBt
X3N0YXRlID0gc2NyaXB0RXhlY3V0aW9uKHNvdXJjZUNvZGUsIG1fc3RhdGUpOworI2lmIEVOQUJM
RShYSFRNTE1QKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZG9jLT5zZXRT
aG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworI2VuZGlmCisgICAgICAgICAgICBu
LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFs
c2UsIGZhbHNlKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgc3RhdGUgb2YgbV9wZW5k
aW5nU2NyaXB0cy5pc0VtcHR5KCkgY2FuIGNoYW5nZSBpbnNpZGUgdGhlIHNjcmlwdEV4ZWN1dGlv
bigpCisgICAgICAgIC8vIGNhbGwgYWJvdmUsIHNvIHRlc3QgYWZ0ZXJ3YXJkcy4KKyAgICAgICAg
ZmluaXNoZWQgPSBtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKTsKKyAgICAgICAgaWYgKGZpbmlz
aGVkKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNo
ZWV0cyk7CisgICAgICAgICAgICBtX3N0YXRlLnNldExvYWRpbmdFeHRTY3JpcHQoZmFsc2UpOwor
ICAgICAgICB9IGVsc2UgaWYgKG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykgewor
ICAgICAgICAgICAgLy8gbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzIGZsYWcgbWln
aHQgaGF2ZSBjaGFuZ2VkIGR1cmluZyB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4KKyAgICAgICAgICAg
IC8vIElmIGl0IGRpZCB3ZSBhcmUgbm93IGJsb2NrZWQgd2FpdGluZyBmb3Igc3R5bGVzaGVldHMg
YW5kIHNob3VsZCBub3QgZXhlY3V0ZSBtb3JlIHNjcmlwdHMgdW50aWwgdGhleSBhcnJpdmUuCisg
ICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyAnbV9y
ZXF1ZXN0aW5nU2NyaXB0JyBpcyB0cnVlIHdoZW4gd2UgYXJlIGNhbGxlZCBzeW5jaHJvbm91c2x5
IGZyb20KKyAgICAgICAgLy8gc2NyaXB0SGFuZGxlcigpLiBJbiB0aGF0IGNhc2Ugc2NyaXB0SGFu
ZGxlcigpIHdpbGwgdGFrZSBjYXJlCisgICAgICAgIC8vIG9mIG1fcGVuZGluZ1NyYy4KKyAgICAg
ICAgaWYgKCFtX3JlcXVlc3RpbmdTY3JpcHQpIHsKKyAgICAgICAgICAgIFNlZ21lbnRlZFN0cmlu
ZyByZXN0ID0gbV9wZW5kaW5nU3JjOworICAgICAgICAgICAgbV9wZW5kaW5nU3JjLmNsZWFyKCk7
CisgICAgICAgICAgICB3cml0ZShyZXN0LCBmYWxzZSk7CisgICAgICAgICAgICAvLyB3ZSBtaWdo
dCBiZSBkZWxldGVkIGF0IHRoaXMgcG9pbnQsIGRvIG5vdCBhY2Nlc3MgYW55IG1lbWJlcnMuCisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0
ZXJuYWxTY3JpcHRzVGltZXJGaXJlZChUaW1lcjxIVE1MRG9jdW1lbnRQYXJzZXI+KikKK3sKKyAg
ICBpZiAobV9kb2MtPnZpZXcoKSAmJiBtX2RvYy0+dmlldygpLT5sYXlvdXRQZW5kaW5nKCkgJiYg
IW1fZG9jLT5taW5pbXVtTGF5b3V0RGVsYXkoKSkgeworICAgICAgICAvLyBSZXN0YXJ0IHRoZSB0
aW1lciBhbmQgZG8gbGF5b3V0IGZpcnN0LgorICAgICAgICBtX2V4dGVybmFsU2NyaXB0c1RpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENvbnRp
bnVlIGV4ZWN1dGluZyBleHRlcm5hbCBzY3JpcHRzLgorICAgIGV4ZWN1dGVFeHRlcm5hbFNjcmlw
dHNJZlJlYWR5KCk7Cit9CisKK2Jvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpjb250aW51ZUV4ZWN1
dGluZ0V4dGVybmFsU2NyaXB0cyhkb3VibGUgc3RhcnRUaW1lKQoreworICAgIGlmIChtX2V4dGVy
bmFsU2NyaXB0c1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1lID4gbV90b2tlbml6ZXJUaW1lRGVsYXkpIHsK
KyAgICAgICAgLy8gU2NoZWR1bGUgdGhlIHRpbWVyIHRvIGtlZXAgcHJvY2Vzc2luZyBhcyBzb29u
IGFzIHBvc3NpYmxlLgorICAgICAgICBtX2V4dGVybmFsU2NyaXB0c1RpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAor
eworICAgIHJldHVybiBtX3N0YXRlLmxvYWRpbmdFeHRTY3JpcHQoKTsKK30KKwordm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OnNldFNyYyhjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKK3sK
KyAgICBtX3NyYyA9IHNvdXJjZTsKK30KKwordm9pZCBwYXJzZUxlZ2FjeUhUTUxEb2N1bWVudEZy
YWdtZW50KGNvbnN0IFN0cmluZyYgc291cmNlLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwg
RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAg
SFRNTERvY3VtZW50UGFyc2VyIHBhcnNlcihmcmFnbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7
CisgICAgcGFyc2VyLnNldEZvcmNlU3luY2hyb25vdXModHJ1ZSk7CisgICAgcGFyc2VyLndyaXRl
KHNvdXJjZSwgdHJ1ZSk7CisgICAgcGFyc2VyLmZpbmlzaCgpOworICAgIEFTU0VSVCghcGFyc2Vy
LnByb2Nlc3NpbmdEYXRhKCkpOyAgICAgIC8vIG1ha2Ugc3VyZSB3ZSdyZSBkb25lIChzZWUgMzk2
MzE1MSkKK30KKworVUNoYXIgZGVjb2RlTmFtZWRFbnRpdHkoY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICBjb25zdCBFbnRpdHkqIGUgPSBmaW5kRW50aXR5KG5hbWUsIHN0cmxlbihuYW1lKSk7Cisg
ICAgcmV0dXJuIGUgPyBlLT5jb2RlIDogMDsKK30KKworfQpJbmRleDogV2ViQ29yZS9odG1sL0xl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0xl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAJKHJldmlzaW9uIDYxNjU4KQorKysgV2ViQ29yZS9o
dG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1l
bnRQYXJzZXIuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKIAogI2lu
Y2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgpAQCAtMTQ2LDcgKzE0
Niw3IEBAIGlubGluZSB2b2lkIFRva2VuOjphZGRBdHRyaWJ1dGUoQXRvbWljU3QKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNl
cihIVE1MRG9jdW1lbnQqIGRvYywgYm9vbCByZXBvcnRFcnJvcnMpCitMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvYywgYm9v
bCByZXBvcnRFcnJvcnMpCiAgICAgOiBEb2N1bWVudFBhcnNlcigpCiAgICAgLCBtX2J1ZmZlcigw
KQogICAgICwgbV9zY3JpcHRDb2RlKDApCkBAIC0xNTYsOCArMTU2LDggQEAgSFRNTERvY3VtZW50
UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSAogICAgICwgbV9leGVjdXRpbmdTY3JpcHQoMCkK
ICAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKICAgICAsIG1faGFzU2NyaXB0c1dhaXRp
bmdGb3JTdHlsZXNoZWV0cyhmYWxzZSkKLSAgICAsIG1fdGltZXIodGhpcywgJkhUTUxEb2N1bWVu
dFBhcnNlcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZXh0ZXJuYWxTY3JpcHRzVGltZXIodGhpcywg
JkhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c1RpbWVyRmlyZWQpCisg
ICAgLCBtX3RpbWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQp
CisgICAgLCBtX2V4dGVybmFsU2NyaXB0c1RpbWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKQogICAgICwgbV9kb2MoZG9j
KQogICAgICwgbV90cmVlQ29uc3RydWN0b3IobmV3IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3Io
ZG9jLCByZXBvcnRFcnJvcnMpKQogICAgICwgbV9pbldyaXRlKGZhbHNlKQpAQCAtMTY3LDcgKzE2
Nyw3IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKEgKICAgICBiZWdp
bigpOwogfQogCi1IVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MVmll
d1NvdXJjZURvY3VtZW50KiBkb2MpCitMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcihIVE1MVmlld1NvdXJjZURvY3VtZW50KiBkb2MpCiAgICAgOiBEb2N1
bWVudFBhcnNlcih0cnVlKQogICAgICwgbV9idWZmZXIoMCkKICAgICAsIG1fc2NyaXB0Q29kZSgw
KQpAQCAtMTc3LDggKzE3Nyw4IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFy
c2VyKEgKICAgICAsIG1fZXhlY3V0aW5nU2NyaXB0KDApCiAgICAgLCBtX3JlcXVlc3RpbmdTY3Jp
cHQoZmFsc2UpCiAgICAgLCBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoZmFsc2Up
Ci0gICAgLCBtX3RpbWVyKHRoaXMsICZIVE1MRG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQpCi0g
ICAgLCBtX2V4dGVybmFsU2NyaXB0c1RpbWVyKHRoaXMsICZIVE1MRG9jdW1lbnRQYXJzZXI6OmV4
ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKQorICAgICwgbV90aW1lcih0aGlzLCAmTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyOjp0aW1lckZpcmVkKQorICAgICwgbV9leHRlcm5hbFNjcmlw
dHNUaW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxT
Y3JpcHRzVGltZXJGaXJlZCkKICAgICAsIG1fZG9jKGRvYykKICAgICAsIG1faW5Xcml0ZShmYWxz
ZSkKICAgICAsIG1fZnJhZ21lbnQoZmFsc2UpCkBAIC0xODcsNyArMTg3LDcgQEAgSFRNTERvY3Vt
ZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSAogICAgIGJlZ2luKCk7CiB9CiAKLUhUTUxE
b2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWcs
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFn
bWVudCogZnJhZywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Np
b24pCiAgICAgOiBtX2J1ZmZlcigwKQogICAgICwgbV9zY3JpcHRDb2RlKDApCiAgICAgLCBtX3Nj
cmlwdENvZGVTaXplKDApCkBAIC0xOTYsOCArMTk2LDggQEAgSFRNTERvY3VtZW50UGFyc2VyOjpI
VE1MRG9jdW1lbnRQYXJzZXIoRAogICAgICwgbV9leGVjdXRpbmdTY3JpcHQoMCkKICAgICAsIG1f
cmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKICAgICAsIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHls
ZXNoZWV0cyhmYWxzZSkKLSAgICAsIG1fdGltZXIodGhpcywgJkhUTUxEb2N1bWVudFBhcnNlcjo6
dGltZXJGaXJlZCkKLSAgICAsIG1fZXh0ZXJuYWxTY3JpcHRzVGltZXIodGhpcywgJkhUTUxEb2N1
bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c1RpbWVyRmlyZWQpCisgICAgLCBtX3Rp
bWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQpCisgICAgLCBt
X2V4dGVybmFsU2NyaXB0c1RpbWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4
ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKQogICAgICwgbV9kb2MoZnJhZy0+ZG9jdW1l
bnQoKSkKICAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yKGZyYWcsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQogICAgICwgbV9pbldyaXRlKGZhbHNlKQpA
QCAtMjA3LDcgKzIwNyw3IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2Vy
KEQKICAgICBiZWdpbigpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cmVzZXQoKQor
dm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc2V0KCkKIHsKICAgICBBU1NFUlQobV9l
eGVjdXRpbmdTY3JpcHQgPT0gMCk7CiAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIEhUTUxEb2N1
bWVudFBhcnNlcjo6cmVzZXQoKQogICAgIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0
cyA9IGZhbHNlOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6YmVnaW4oKQordm9pZCBM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmJlZ2luKCkKIHsKICAgICBtX2V4ZWN1dGluZ1Njcmlw
dCA9IDA7CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CkBAIC0yNzQsMTIgKzI3NCwx
MiBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6YmVnaW4oKQogICAgICAgICBtX3Rva2VuaXpl
ckNodW5rU2l6ZSA9IGRlZmF1bHRUb2tlbml6ZXJDaHVua1NpemU7CiB9CiAKLXZvaWQgSFRNTERv
Y3VtZW50UGFyc2VyOjpzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgZm9yY2UpCit2b2lkIExlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6c2V0Rm9yY2VTeW5jaHJvbm91cyhib29sIGZvcmNlKQogewog
ICAgIG1fc3RhdGUuc2V0Rm9yY2VTeW5jaHJvbm91cyhmb3JjZSk7CiB9CiAKLUhUTUxEb2N1bWVu
dFBhcnNlcjo6U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzTGlzdGluZyhTZWdtZW50
ZWRTdHJpbmcgbGlzdCwgU3RhdGUgc3RhdGUpCitMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0
YXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc0xpc3RpbmcoU2VnbWVudGVkU3Ry
aW5nIGxpc3QsIFN0YXRlIHN0YXRlKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUg
bGlzdGluZyAnbGlzdCcgYXMKICAgICAvLyBwcmVmb3JtYXR0ZWQgdGV4dC10b2tlbnMgdG8gdGhl
IHRva2VuLWNvbGxlY3Rpb24KQEAgLTMxNiw3ICszMTYsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6
OlN0YXRlIEhUTUxEb2N1bWVudFBhCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1IVE1MRG9jdW1l
bnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VOb25IVE1MVGV4dChTZWdt
ZW50ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCitMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6
OlN0YXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VOb25IVE1MVGV4dChTZWdtZW50
ZWRTdHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCiB7CiAgICAgQVNTRVJUKHN0YXRlLmluVGV4dEFy
ZWEoKSB8fCBzdGF0ZS5pblRpdGxlKCkgfHwgc3RhdGUuaW5JRnJhbWUoKSB8fCAhc3RhdGUuaGFz
RW50aXR5U3RhdGUoKSk7CiAgICAgQVNTRVJUKCFzdGF0ZS5oYXNUYWdTdGF0ZSgpKTsKQEAgLTQx
Myw3ICs0MTMsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhCiAg
ICAgcmV0dXJuIHN0YXRlOwogfQogCi1IVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1
bWVudFBhcnNlcjo6c2NyaXB0SGFuZGxlcihTdGF0ZSBzdGF0ZSkKK0xlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRIYW5kbGVyKFN0
YXRlIHN0YXRlKQogewogICAgIC8vIFdlIGFyZSBpbnNpZGUgYSA8c2NyaXB0PgogICAgIGJvb2wg
ZG9TY3JpcHRFeGVjID0gZmFsc2U7CkBAIC01NDUsNyArNTQ1LDcgQEAgSFRNTERvY3VtZW50UGFy
c2VyOjpTdGF0ZSBIVE1MRG9jdW1lbnRQYQogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotSFRNTERv
Y3VtZW50UGFyc2VyOjpTdGF0ZSBIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdEV4ZWN1dGlvbihj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTdGF0ZSBzdGF0ZSkKK0xlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRF
eGVjdXRpb24oY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgU3RhdGUgc3RhdGUp
CiB7CiAgICAgaWYgKG1fZnJhZ21lbnQgfHwgIW1fZG9jLT5mcmFtZSgpKQogICAgICAgICByZXR1
cm4gc3RhdGU7CkBAIC02MDEsNyArNjAxLDcgQEAgSFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBI
VE1MRG9jdW1lbnRQYQogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotSFRNTERvY3VtZW50UGFyc2Vy
OjpTdGF0ZSBIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlQ29tbWVudChTZWdtZW50ZWRTdHJpbmcm
IHNyYywgU3RhdGUgc3RhdGUpCitMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VDb21tZW50KFNlZ21lbnRlZFN0cmluZyYgc3JjLCBT
dGF0ZSBzdGF0ZSkKIHsKICAgICAvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyBjb2RlIGV2ZW4gcnVu
IGZvciBjb21tZW50cyBpbnNpZGUgPHNjcmlwdD4gYW5kIDxzdHlsZT4/IFRoaXMgc2VlbXMgYm9n
dXMuCiAgICAgY2hlY2tTY3JpcHRCdWZmZXIoc3JjLmxlbmd0aCgpKTsKQEAgLTY0NCw3ICs2NDQs
NyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhCiAgICAgcmV0dXJu
IHN0YXRlOwogfQogCi1IVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhcnNl
cjo6cGFyc2VTZXJ2ZXIoU2VnbWVudGVkU3RyaW5nJiBzcmMsIFN0YXRlIHN0YXRlKQorTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNl
U2VydmVyKFNlZ21lbnRlZFN0cmluZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKIHsKICAgICBjaGVja1Nj
cmlwdEJ1ZmZlcihzcmMubGVuZ3RoKCkpOwogICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewpA
QCAtNjYxLDcgKzY2MSw3IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRNTERvY3VtZW50
UGEKICAgICByZXR1cm4gc3RhdGU7CiB9CiAKLUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRN
TERvY3VtZW50UGFyc2VyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihTZWdtZW50ZWRTdHJp
bmcmIHNyYywgU3RhdGUgc3RhdGUpCitMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU2VnbWVu
dGVkU3RyaW5nJiBzcmMsIFN0YXRlIHN0YXRlKQogewogICAgIFVDaGFyIG9sZGNoYXIgPSAwOwog
ICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkgewpAQCAtNjg3LDcgKzY4Nyw3IEBAIEhUTUxEb2N1
bWVudFBhcnNlcjo6U3RhdGUgSFRNTERvY3VtZW50UGEKICAgICByZXR1cm4gc3RhdGU7CiB9CiAK
LUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgSFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZVRleHQo
U2VnbWVudGVkU3RyaW5nJiBzcmMsIFN0YXRlIHN0YXRlKQorTGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlVGV4dChTZWdtZW50ZWRT
dHJpbmcmIHNyYywgU3RhdGUgc3RhdGUpCiB7CiAgICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIFVDaGFyIGNjID0gKnNyYzsKQEAgLTcxNSw3ICs3MTUsNyBAQCBIVE1MRG9jdW1l
bnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhCiB9CiAKIAotSFRNTERvY3VtZW50UGFyc2Vy
OjpTdGF0ZSBIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW50aXR5KFNlZ21lbnRlZFN0cmluZyYg
c3JjLCBVQ2hhciomIGRlc3QsIFN0YXRlIHN0YXRlLCB1bnNpZ25lZCYgY0J1ZmZlclBvcywgYm9v
bCBzdGFydCwgYm9vbCBwYXJzaW5nVGFnKQorTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0
ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW50aXR5KFNlZ21lbnRlZFN0cmluZyYg
c3JjLCBVQ2hhciomIGRlc3QsIFN0YXRlIHN0YXRlLCB1bnNpZ25lZCYgY0J1ZmZlclBvcywgYm9v
bCBzdGFydCwgYm9vbCBwYXJzaW5nVGFnKQogewogICAgIGlmIChzdGFydCkgewogICAgICAgICBj
QnVmZmVyUG9zID0gMDsKQEAgLTg4OSw3ICs4ODksNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OlN0
YXRlIEhUTUxEb2N1bWVudFBhCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1IVE1MRG9jdW1lbnRQ
YXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N0eXBlKFNlZ21lbnRlZFN0
cmluZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKK0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUg
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJzZURvY3R5cGUoU2VnbWVudGVkU3RyaW5nJiBz
cmMsIFN0YXRlIHN0YXRlKQogewogICAgIEFTU0VSVChzdGF0ZS5pbkRvY3R5cGUoKSk7CiAgICAg
d2hpbGUgKCFzcmMuaXNFbXB0eSgpICYmIHN0YXRlLmluRG9jdHlwZSgpKSB7CkBAIC0xMTA1LDcg
KzExMDUsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhCiAgICAg
cmV0dXJuIHN0YXRlOwogfQogCi1IVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVu
dFBhcnNlcjo6cGFyc2VUYWcoU2VnbWVudGVkU3RyaW5nJiBzcmMsIFN0YXRlIHN0YXRlKQorTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBh
cnNlVGFnKFNlZ21lbnRlZFN0cmluZyYgc3JjLCBTdGF0ZSBzdGF0ZSkKIHsKICAgICBBU1NFUlQo
IXN0YXRlLmhhc0VudGl0eVN0YXRlKCkpOwogCkBAIC0xNTc1LDcgKzE1NzUsNyBAQCBIVE1MRG9j
dW1lbnRQYXJzZXI6OlN0YXRlIEhUTUxEb2N1bWVudFBhCiAgICAgcmV0dXJuIHN0YXRlOwogfQog
Ci1pbmxpbmUgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRpbnVlUHJvY2Vzc2luZyhpbnQm
IHByb2Nlc3NlZENvdW50LCBkb3VibGUgc3RhcnRUaW1lLCBTdGF0ZSAmc3RhdGUpCitpbmxpbmUg
Ym9vbCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRpbnVlUHJvY2Vzc2luZyhpbnQmIHBy
b2Nlc3NlZENvdW50LCBkb3VibGUgc3RhcnRUaW1lLCBTdGF0ZSAmc3RhdGUpCiB7CiAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byBiZSBjaGVja2luZyBlbGFwc2VkIHRpbWUgd2l0aCBldmVyeSBjaGFy
YWN0ZXIsIHNvIHdlIG9ubHkgY2hlY2sgYWZ0ZXIgd2UndmUKICAgICAvLyBwcm9jZXNzZWQgYSBj
ZXJ0YWluIG51bWJlciBvZiBjaGFyYWN0ZXJzLgpAQCAtMTYwMSw3ICsxNjAxLDcgQEAgaW5saW5l
IGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpjb250aW51ZQogCiAvLyBUdXJucyB0aGUgc3RhdGVt
YWNoaW5lIG9uZSBjcmFuayB1c2luZyB0aGUgcGFzc2VkIGluIFN0YXRlIG9iamVjdC4KIC8vIFRo
aXMgZG9lcyBub3QgbW9kaWZ5IG1fc3RhdGUgZGlyZWN0bHkgaW4gb3JkZXIgdG8gYmUgcmVlbnRy
YW50LgotQUxXQVlTX0lOTElORSB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6YWR2YW5jZShTdGF0
ZSYgc3RhdGUpCitBTFdBWVNfSU5MSU5FIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjph
ZHZhbmNlKFN0YXRlJiBzdGF0ZSkKIHsKICAgICAvLyBkbyB3ZSBuZWVkIHRvIGVubGFyZ2UgdGhl
IGJ1ZmZlcj8KICAgICBjaGVja0J1ZmZlcigpOwpAQCAtMTcwOSw3ICsxNzA5LDcgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6YQogICAgIH0KIH0KIAotdm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OndpbGxXcml0ZUhUTUwoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UpCit2b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6d2lsbFdyaXRlSFRNTChjb25zdCBT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKICAgICAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBtX2RvYy0+
aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQpAQCAtMTcxNyw3ICsxNzE3LDcgQEAgdm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OndpbGxXcml0ZUhUTUwoYwogICAgICNlbmRpZgogfQogCi12b2lkIEhU
TUxEb2N1bWVudFBhcnNlcjo6ZGlkV3JpdGVIVE1MKCkKK3ZvaWQgTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpkaWRXcml0ZUhUTUwoKQogewogICAgICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAg
ICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IG1fZG9jLT5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCkBAIC0xNzI1LDcgKzE3MjUsNyBAQCB2b2lkIEhUTUxE
b2N1bWVudFBhcnNlcjo6ZGlkV3JpdGVIVE1MKCkKICAgICAjZW5kaWYKIH0KIAotdm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc3RyLCBib29sIGFw
cGVuZERhdGEpCit2b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6d3JpdGUoY29uc3QgU2Vn
bWVudGVkU3RyaW5nJiBzdHIsIGJvb2wgYXBwZW5kRGF0YSkKIHsKICAgICBpZiAoIW1fYnVmZmVy
KQogICAgICAgICByZXR1cm47CkBAIC0xNzkzLDI0ICsxNzkzLDI0IEBAIHZvaWQgSFRNTERvY3Vt
ZW50UGFyc2VyOjp3cml0ZShjb25zdCBTZWcKICAgICBJbWFnZUxvYWRlcjo6ZGlzcGF0Y2hQZW5k
aW5nQmVmb3JlTG9hZEV2ZW50cygpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6c3Rv
cFBhcnNpbmcoKQordm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkK
IHsKICAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKICAgICBtX3RpbWVyLnN0b3Ao
KTsKIAotICAgIC8vIEZJWE1FOiBXaHkgaXMgSFRNTERvY3VtZW50UGFyc2VyIHRoZSBvbmx5IERv
Y3VtZW50UGFyc2VyIHdoaWNoIGNhbGxzIGNoZWNrQ29tcGxldGVkPworICAgIC8vIEZJWE1FOiBX
aHkgaXMgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyIHRoZSBvbmx5IERvY3VtZW50UGFyc2VyIHdo
aWNoIGNhbGxzIGNoZWNrQ29tcGxldGVkPwogICAgIC8vIFRoZSBGcmFtZUxvYWRlciBuZWVkcyB0
byBrbm93IHRoYXQgdGhlIHBhcnNlciBoYXMgZmluaXNoZWQgd2l0aCBpdHMgZGF0YSwKICAgICAv
LyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaGFwcGVuZWQgbmF0dXJhbGx5IG9yIGR1ZSB0byBt
YW51YWwgaW50ZXJ2ZW50aW9uLgogICAgIGlmICghbV9mcmFnbWVudCAmJiBtX2RvYy0+ZnJhbWUo
KSkKICAgICAgICAgbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5jaGVja0NvbXBsZXRlZCgpOwog
fQogCi1ib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc2luZ0RhdGEoKSBjb25zdAorYm9v
bCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdEYXRhKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV90aW1lci5pc0FjdGl2ZSgpIHx8IG1faW5Xcml0ZTsKIH0KIAotdm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQoVGltZXI8SFRNTERvY3VtZW50UGFyc2VyPiopCit2
b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZChUaW1lcjxMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXI+KikKIHsKICAgICBpZiAobV9kb2MtPnZpZXcoKSAmJiBtX2RvYy0+dmll
dygpLT5sYXlvdXRQZW5kaW5nKCkgJiYgIW1fZG9jLT5taW5pbXVtTGF5b3V0RGVsYXkoKSkgewog
ICAgICAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lciBhbmQgbGV0IGxheW91dCB3aW4uICBUaGlzIGlz
IGJhc2ljYWxseSBhIHdheSBvZiBlbnN1cmluZyB0aGF0IHRoZSBsYXlvdXQKQEAgLTE4MjMsNyAr
MTgyMyw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjp0aW1lckZpcmVkKFRpbWUKICAgICB3
cml0ZShTZWdtZW50ZWRTdHJpbmcoKSwgdHJ1ZSk7CiB9CiAKLXZvaWQgSFRNTERvY3VtZW50UGFy
c2VyOjplbmQoKQordm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmVuZCgpCiB7CiAgICAg
QVNTRVJUKCFtX3RpbWVyLmlzQWN0aXZlKCkpOwogICAgIG1fdGltZXIuc3RvcCgpOyAvLyBPbmx5
IGhlbHBzIGlmIGFzc2VydGlvbiBhYm92ZSBmaXJlcywgYnV0IGRvIGl0IGFueXdheS4KQEAgLTE4
NDcsNyArMTg0Nyw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjplbmQoKQogICAgICAgICBt
X2RvYy0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAKLXZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpm
aW5pc2goKQordm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCiB7CiAgICAg
Ly8gZG8gdGhpcyBhcyBsb25nIGFzIHdlIGRvbid0IGZpbmQgbWF0Y2hpbmcgY29tbWVudCBlbmRz
CiAgICAgd2hpbGUgKChtX3N0YXRlLmluQ29tbWVudCgpIHx8IG1fc3RhdGUuaW5TZXJ2ZXIoKSkg
JiYgbV9zY3JpcHRDb2RlICYmIG1fc2NyaXB0Q29kZVNpemUpIHsKQEAgLTE4ODUsMTIgKzE4ODUs
MTIgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCiAgICAgICAgIGVuZCgpOyAv
LyB0aGlzIGFjdHVhbGx5IGNhdXNlcyB1cyB0byBiZSBkZWxldGVkCiB9CiAKLWJvb2wgSFRNTERv
Y3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQorYm9vbCBMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCiB7CiAgICAgcmV0dXJuIG1fbm9Nb3JlRGF0YTsKIH0K
IAotUGFzc1JlZlB0cjxOb2RlPiBIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NUb2tlbigpCitQ
YXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc1Rva2VuKCkK
IHsKICAgICBpZiAobV9kZXN0ID4gbV9idWZmZXIpIHsKICAgICAgICAgbV9jdXJyZW50VG9rZW4u
dGV4dCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKG1fYnVmZmVy
LCBtX2Rlc3QgLSBtX2J1ZmZlcik7CkBAIC0xOTE5LDcgKzE5MTksNyBAQCBQYXNzUmVmUHRyPE5v
ZGU+IEhUTUxEb2N1bWVudFBhcnNlcjo6cHJvCiAgICAgcmV0dXJuIG4ucmVsZWFzZSgpOwogfQog
Ci12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc0RvY3R5cGVUb2tlbigpCit2b2lkIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc0RvY3R5cGVUb2tlbigpCiB7CiAgICAgaWYg
KGluVmlld1NvdXJjZU1vZGUoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFZpZXdTb3VyY2VE
b2N1bWVudCo+KG1fZG9jKS0+YWRkVmlld1NvdXJjZURvY3R5cGVUb2tlbigmbV9kb2N0eXBlVG9r
ZW4pOwpAQCAtMTkyNywxNCArMTkyNywxNCBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHJv
Y2Vzc0RvY3R5cGVUCiAgICAgICAgIG1fdHJlZUNvbnN0cnVjdG9yLT5wYXJzZURvY3R5cGVUb2tl
bigmbV9kb2N0eXBlVG9rZW4pOwogfQogCi1IVE1MRG9jdW1lbnRQYXJzZXI6On5IVE1MRG9jdW1l
bnRQYXJzZXIoKQorTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp+TGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyKCkKIHsKICAgICBBU1NFUlQoIW1faW5Xcml0ZSk7CiAgICAgcmVzZXQoKTsKIH0KIAog
Ci12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZW5sYXJnZUJ1ZmZlcihpbnQgbGVuKQordm9pZCBM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmVubGFyZ2VCdWZmZXIoaW50IGxlbikKIHsKICAgICAv
LyBSZXNpemUgcG9saWN5OiBBbHdheXMgYXQgbGVhc3QgZG91YmxlIHRoZSBzaXplIG9mIHRoZSBi
dWZmZXIgZWFjaCB0aW1lLgogICAgIGludCBkZWx0YSA9IG1heChsZW4sIG1fYnVmZmVyU2l6ZSk7
CkBAIC0xOTUyLDcgKzE5NTIsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZW5sYXJnZUJ1
ZmZlcihpCiAgICAgbV9idWZmZXJTaXplID0gbmV3U2l6ZTsKIH0KIAotdm9pZCBIVE1MRG9jdW1l
bnRQYXJzZXI6OmVubGFyZ2VTY3JpcHRCdWZmZXIoaW50IGxlbikKK3ZvaWQgTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyOjplbmxhcmdlU2NyaXB0QnVmZmVyKGludCBsZW4pCiB7CiAgICAgLy8gUmVz
aXplIHBvbGljeTogQWx3YXlzIGF0IGxlYXN0IGRvdWJsZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVy
IGVhY2ggdGltZS4KICAgICBpbnQgZGVsdGEgPSBtYXgobGVuLCBtX3NjcmlwdENvZGVDYXBhY2l0
eSk7CkBAIC0xOTc2LDcgKzE5NzYsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZW5sYXJn
ZVNjcmlwdEJ1CiAgICAgbV9zY3JpcHRDb2RlQ2FwYWNpdHkgPSBuZXdTaXplOwogfQogCi12b2lk
IEhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMo
KQordm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0Zv
clN0eWxlc2hlZXRzKCkKIHsKICAgICBBU1NFUlQobV9kb2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRl
ZCgpKTsKIApAQCAtMTk4NCwxMiArMTk4NCwxMiBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6
ZXhlY3V0ZVNjcmlwdHNXCiAgICAgICAgIG5vdGlmeUZpbmlzaGVkKDApOwogfQogCi12b2lkIEhU
TUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKQordm9pZCBM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikK
IHsKICAgICBleGVjdXRlRXh0ZXJuYWxTY3JpcHRzSWZSZWFkeSgpOwogfQogCi12b2lkIEhUTUxE
b2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c0lmUmVhZHkoKQordm9pZCBMZWdh
Y3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5KCkKIHsK
ICAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpKTsKIApAQCAtMjA1NSw3ICsy
MDU1LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbAogICAgIH0K
IH0KIAotdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1l
ckZpcmVkKFRpbWVyPEhUTUxEb2N1bWVudFBhcnNlcj4qKQordm9pZCBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKFRpbWVyPExlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcj4qKQogewogICAgIGlmIChtX2RvYy0+dmlldygpICYmIG1fZG9jLT52
aWV3KCktPmxheW91dFBlbmRpbmcoKSAmJiAhbV9kb2MtPm1pbmltdW1MYXlvdXREZWxheSgpKSB7
CiAgICAgICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyIGFuZCBkbyBsYXlvdXQgZmlyc3QuCkBAIC0y
MDY3LDcgKzIwNjcsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFs
CiAgICAgZXhlY3V0ZUV4dGVybmFsU2NyaXB0c0lmUmVhZHkoKTsKIH0KIAotYm9vbCBIVE1MRG9j
dW1lbnRQYXJzZXI6OmNvbnRpbnVlRXhlY3V0aW5nRXh0ZXJuYWxTY3JpcHRzKGRvdWJsZSBzdGFy
dFRpbWUpCitib29sIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6Y29udGludWVFeGVjdXRpbmdF
eHRlcm5hbFNjcmlwdHMoZG91YmxlIHN0YXJ0VGltZSkKIHsKICAgICBpZiAobV9leHRlcm5hbFNj
cmlwdHNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDgwLDE5
ICsyMDgwLDE5IEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpjb250aW51ZUV4ZWN1dGkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0Zv
clNjcmlwdHMoKSBjb25zdAorYm9vbCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGlu
Z0ZvclNjcmlwdHMoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0YXRlLmxvYWRpbmdFeHRTY3Jp
cHQoKTsKIH0KIAotdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnNldFNyYyhjb25zdCBTZWdtZW50
ZWRTdHJpbmcmIHNvdXJjZSkKK3ZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpzZXRTcmMo
Y29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiB7CiAgICAgbV9zcmMgPSBzb3VyY2U7CiB9
CiAKIHZvaWQgcGFyc2VMZWdhY3lIVE1MRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmIHNv
dXJjZSwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogewotICAgIEhUTUxEb2N1bWVudFBhcnNlciBwYXJz
ZXIoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIExlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlciBwYXJzZXIoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwogICAgIHBhcnNl
ci5zZXRGb3JjZVN5bmNocm9ub3VzKHRydWUpOwogICAgIHBhcnNlci53cml0ZShzb3VyY2UsIHRy
dWUpOwogICAgIHBhcnNlci5maW5pc2goKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyLmgJKHJldmlzaW9uIDYxNjU4KQkoZnJvbSBXZWJDb3JlL2h0bWwvSFRNTERv
Y3VtZW50UGFyc2VyLmg6NjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCisgICAgICAgICAgICAg
IChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCisgICAgICAgICAgICAgIChDKSAx
OTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIEhUTUxUb2tlbml6ZXJfaAorI2RlZmluZSBIVE1MVG9r
ZW5pemVyX2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24uaCIKKyNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRT
dHJpbmcuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgi
CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRT
Y3JpcHQ7CitjbGFzcyBEb2N1bWVudEZyYWdtZW50OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBI
VE1MRG9jdW1lbnQ7CitjbGFzcyBIVE1MU2NyaXB0RWxlbWVudDsKK2NsYXNzIEhUTUxWaWV3U291
cmNlRG9jdW1lbnQ7CitjbGFzcyBGcmFtZVZpZXc7CitjbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOworY2xhc3MgTm9kZTsKK2NsYXNzIFByZWxvYWRTY2FubmVyOworY2xhc3MgU2NyaXB0
U291cmNlQ29kZTsKKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHJlcHJlc2VudHMgb25lIEhUTUwg
dGFnLiBDb25zaXN0cyBvZiBhIG51bWVyaWNhbCBpZCwgYW5kIHRoZSBsaXN0CisgKiBvZiBhdHRy
aWJ1dGVzLiBDYW4gYWxzbyByZXByZXNlbnQgdGV4dC4gSW4gdGhpcyBjYXNlIHRoZSBpZCA9IDAg
YW5kCisgKiB0ZXh0IGNvbnRhaW5zIHRoZSB0ZXh0LgorICovCitzdHJ1Y3QgVG9rZW4geworICAg
IFRva2VuKCkKKyAgICAgICAgOiBiZWdpblRhZyh0cnVlKQorICAgICAgICAsIHNlbGZDbG9zaW5n
VGFnKGZhbHNlKQorICAgICAgICAsIGJyb2tlblhNTFN0eWxlKGZhbHNlKQorICAgICAgICAsIG1f
c291cmNlSW5mbygwKQorICAgIHsgfQorICAgIH5Ub2tlbigpIHsgfQorCisgICAgdm9pZCBhZGRB
dHRyaWJ1dGUoQXRvbWljU3RyaW5nJiBhdHRyTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2LCBi
b29sIHZpZXdTb3VyY2VNb2RlKTsKKworICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiBiZWdpblRhZyAmJiBmdWxsTmFtZS5sb2Nh
bE5hbWUoKSA9PSB0YWdOYW1lOyB9CisgICAgYm9vbCBpc0Nsb3NlVGFnKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiAhYmVnaW5UYWcgJiYgZnVsbE5hbWUubG9j
YWxOYW1lKCkgPT0gdGFnTmFtZTsgfQorCisgICAgdm9pZCByZXNldCgpCisgICAgeworICAgICAg
ICBhdHRycyA9IDA7CisgICAgICAgIHRleHQgPSAwOworICAgICAgICB0YWdOYW1lID0gbnVsbEF0
b207CisgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKKyAgICAgICAgc2VsZkNsb3NpbmdUYWcgPSBm
YWxzZTsKKyAgICAgICAgYnJva2VuWE1MU3R5bGUgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fc291
cmNlSW5mbykKKyAgICAgICAgICAgIG1fc291cmNlSW5mby0+Y2xlYXIoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZFZpZXdTb3VyY2VDaGFyKFVDaGFyIGMpIHsgaWYgKCFtX3NvdXJjZUluZm8uZ2V0
KCkpIG1fc291cmNlSW5mby5zZXQobmV3IFZlY3RvcjxVQ2hhcj4pOyBtX3NvdXJjZUluZm8tPmFw
cGVuZChjKTsgfQorCisgICAgUmVmUHRyPE5hbWVkTm9kZU1hcD4gYXR0cnM7CisgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHRleHQ7CisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWU7CisgICAgYm9vbCBi
ZWdpblRhZzsKKyAgICBib29sIHNlbGZDbG9zaW5nVGFnOworICAgIGJvb2wgYnJva2VuWE1MU3R5
bGU7CisgICAgT3duUHRyPFZlY3RvcjxVQ2hhcj4gPiBtX3NvdXJjZUluZm87Cit9OworCitlbnVt
IERvY3R5cGVTdGF0ZSB7CisgICAgRG9jdHlwZUJlZ2luLAorICAgIERvY3R5cGVCZWZvcmVOYW1l
LAorICAgIERvY3R5cGVOYW1lLAorICAgIERvY3R5cGVBZnRlck5hbWUsCisgICAgRG9jdHlwZUJl
Zm9yZVB1YmxpY0lELAorICAgIERvY3R5cGVQdWJsaWNJRCwKKyAgICBEb2N0eXBlQWZ0ZXJQdWJs
aWNJRCwKKyAgICBEb2N0eXBlQmVmb3JlU3lzdGVtSUQsCisgICAgRG9jdHlwZVN5c3RlbUlELAor
ICAgIERvY3R5cGVBZnRlclN5c3RlbUlELAorICAgIERvY3R5cGVCb2d1cworfTsKKworY2xhc3Mg
RG9jdHlwZVRva2VuIHsKK3B1YmxpYzoKKyAgICBEb2N0eXBlVG9rZW4oKSB7fQorCisgICAgdm9p
ZCByZXNldCgpCisgICAgeworICAgICAgICBtX25hbWUuY2xlYXIoKTsKKyAgICAgICAgbV9wdWJs
aWNJRC5jbGVhcigpOworICAgICAgICBtX3N5c3RlbUlELmNsZWFyKCk7CisgICAgICAgIG1fc3Rh
dGUgPSBEb2N0eXBlQmVnaW47CisgICAgICAgIG1fc291cmNlLmNsZWFyKCk7CisgICAgICAgIG1f
Zm9yY2VRdWlya3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBEb2N0eXBlU3RhdGUgc3RhdGUoKSB7
IHJldHVybiBtX3N0YXRlOyB9CisgICAgdm9pZCBzZXRTdGF0ZShEb2N0eXBlU3RhdGUgcykgeyBt
X3N0YXRlID0gczsgfQorCisgICAgVmVjdG9yPFVDaGFyPiBtX25hbWU7CisgICAgVmVjdG9yPFVD
aGFyPiBtX3B1YmxpY0lEOworICAgIFZlY3RvcjxVQ2hhcj4gbV9zeXN0ZW1JRDsKKyAgICBEb2N0
eXBlU3RhdGUgbV9zdGF0ZTsKKworICAgIFZlY3RvcjxVQ2hhcj4gbV9zb3VyY2U7CisKKyAgICBi
b29sIG1fZm9yY2VRdWlya3M7IC8vIFVzZWQgYnkgdGhlIEhUTUw1IHBhcnNlci4KK307CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gRklYTUU6IFRoaXMgY2xhc3MgZG9lcyB0b28gbXVj
aC4gIFJpZ2h0IG5vdyBpdCBpcyBib3RoIGFuIEhUTUwgbGV4ZXIgYXMgd2VsbAorLy8gYXMgaGFu
ZGxpbmcgYWxsIG9mIHRoZSBub24tbGV4ZXItc3BlY2lmaWMganVuayByZWxhdGVkIHRvIHRva2Vu
aXppbmcgSFRNTAorLy8gKGxpa2UgZGVhbGluZyB3aXRoIDxzY3JpcHQ+IHRhZ3MpLiAgVGhlIEhU
TUwgbGV4ZXIgYml0cyBzaG91bGQgYmUgcHVzaGVkCisvLyBkb3duIGludG8gYSBzZXBhcmF0ZSBI
VE1MIGxleGVyIGNsYXNzLgorCitjbGFzcyBIVE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgRG9j
dW1lbnRQYXJzZXIsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAg
SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKKyAg
ICBIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTFZpZXdTb3VyY2VEb2N1bWVudCopOworICAgIEhUTUxE
b2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKKyAgICB2aXJ0dWFsIH5IVE1MRG9jdW1l
bnRQYXJzZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJp
bmcmLCBib29sIGFwcGVuZERhdGEpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7CisgICAgdmlydHVhbCBib29sIGZvcmNlU3lu
Y2hyb25vdXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZvcmNlU3luY2hyb25vdXMoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgZm9yY2UpOworICAgIHZp
cnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHN0b3BQYXJzaW5nKCk7CisgICAgdmlydHVhbCBib29sIHByb2Nlc3NpbmdEYXRhKCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgZXhlY3V0aW5nU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9leGVj
dXRpbmdTY3JpcHQ7IH0KKworICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVOdW1iZXI7IH0KKyAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25z
dCB7IHJldHVybiAxOyB9CisKKyAgICBib29sIHByb2Nlc3NpbmdDb250ZW50V3JpdHRlbkJ5U2Ny
aXB0KCkgY29uc3QgeyByZXR1cm4gbV9zcmMuZXhjbHVkZUxpbmVOdW1iZXJzKCk7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOworCisg
ICAgdmlydHVhbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKiBodG1sVHJlZUNvbnN0cnVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV90cmVlQ29uc3RydWN0b3IuZ2V0KCk7IH0KKyAgICB2aXJ0dWFs
IEhUTUxEb2N1bWVudFBhcnNlciogYXNIVE1MRG9jdW1lbnRQYXJzZXIoKSB7IHJldHVybiB0aGlz
OyB9CisKK3ByaXZhdGU6CisgICAgY2xhc3MgU3RhdGU7CisKKyAgICAvLyBXaGVyZSB3ZSBhcmUg
aW4gcGFyc2luZyBhIHRhZworICAgIHZvaWQgYmVnaW4oKTsKKyAgICB2b2lkIGVuZCgpOworCisg
ICAgdm9pZCByZXNldCgpOworCisgICAgdm9pZCB3aWxsV3JpdGVIVE1MKGNvbnN0IFNlZ21lbnRl
ZFN0cmluZyYpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZHZhbmNlKFN0YXRlJik7CisgICAg
dm9pZCBkaWRXcml0ZUhUTUwoKTsKKworICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJvY2Vzc1Rva2Vu
KCk7CisgICAgdm9pZCBwcm9jZXNzRG9jdHlwZVRva2VuKCk7CisKKyAgICBTdGF0ZSBwcm9jZXNz
TGlzdGluZyhTZWdtZW50ZWRTdHJpbmcsIFN0YXRlKTsKKyAgICBTdGF0ZSBwYXJzZUNvbW1lbnQo
U2VnbWVudGVkU3RyaW5nJiwgU3RhdGUpOworICAgIFN0YXRlIHBhcnNlRG9jdHlwZShTZWdtZW50
ZWRTdHJpbmcmLCBTdGF0ZSk7CisgICAgU3RhdGUgcGFyc2VTZXJ2ZXIoU2VnbWVudGVkU3RyaW5n
JiwgU3RhdGUpOworICAgIFN0YXRlIHBhcnNlVGV4dChTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7
CisgICAgU3RhdGUgcGFyc2VOb25IVE1MVGV4dChTZWdtZW50ZWRTdHJpbmcmLCBTdGF0ZSk7Cisg
ICAgU3RhdGUgcGFyc2VUYWcoU2VnbWVudGVkU3RyaW5nJiwgU3RhdGUpOworICAgIFN0YXRlIHBh
cnNlRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFVDaGFyKiYgZGVzdCwgU3RhdGUsIHVuc2lnbmVk
JiBjQnVmZmVyUG9zLCBib29sIHN0YXJ0LCBib29sIHBhcnNpbmdUYWcpOworICAgIFN0YXRlIHBh
cnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKFNlZ21lbnRlZFN0cmluZyYsIFN0YXRlKTsKKyAgICBT
dGF0ZSBzY3JpcHRIYW5kbGVyKFN0YXRlKTsKKyAgICBTdGF0ZSBzY3JpcHRFeGVjdXRpb24oY29u
c3QgU2NyaXB0U291cmNlQ29kZSYsIFN0YXRlKTsKKyAgICB2b2lkIHNldFNyYyhjb25zdCBTZWdt
ZW50ZWRTdHJpbmcmKTsKKworICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGlu
IHRoZSBidWZmZXIuCisgICAgLy8gaWYgbm90IGVubGFyZ2UgaXQKKyAgICBpbmxpbmUgdm9pZCBj
aGVja0J1ZmZlcihpbnQgbGVuID0gMTApCisgICAgeworICAgICAgICBpZiAoKG1fZGVzdCAtIG1f
YnVmZmVyKSA+IG1fYnVmZmVyU2l6ZSAtIGxlbikKKyAgICAgICAgICAgIGVubGFyZ2VCdWZmZXIo
bGVuKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBjaGVja1NjcmlwdEJ1ZmZlcihpbnQgbGVu
ID0gMTApCisgICAgeworICAgICAgICBpZiAobV9zY3JpcHRDb2RlU2l6ZSArIGxlbiA+PSBtX3Nj
cmlwdENvZGVDYXBhY2l0eSkKKyAgICAgICAgICAgIGVubGFyZ2VTY3JpcHRCdWZmZXIobGVuKTsK
KyAgICB9CisKKyAgICB2b2lkIGVubGFyZ2VCdWZmZXIoaW50IGxlbik7CisgICAgdm9pZCBlbmxh
cmdlU2NyaXB0QnVmZmVyKGludCBsZW4pOworCisgICAgYm9vbCBjb250aW51ZVByb2Nlc3Npbmco
aW50JiBwcm9jZXNzZWRDb3VudCwgZG91YmxlIHN0YXJ0VGltZSwgU3RhdGUmKTsKKyAgICB2b2lk
IHRpbWVyRmlyZWQoVGltZXI8SFRNTERvY3VtZW50UGFyc2VyPiopOworICAgIHZvaWQgYWxsRGF0
YVByb2Nlc3NlZCgpOworCisgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAorICAgIHZv
aWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKKworICAgIHZvaWQgZXhlY3V0ZUV4
dGVybmFsU2NyaXB0c0lmUmVhZHkoKTsKKyAgICB2b2lkIGV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNU
aW1lckZpcmVkKFRpbWVyPEhUTUxEb2N1bWVudFBhcnNlcj4qKTsKKyAgICBib29sIGNvbnRpbnVl
RXhlY3V0aW5nRXh0ZXJuYWxTY3JpcHRzKGRvdWJsZSBzdGFydFRpbWUpOworCisgICAgLy8gSW50
ZXJuYWwgYnVmZmVycworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBVQ2hhciogbV9idWZm
ZXI7CisgICAgaW50IG1fYnVmZmVyU2l6ZTsKKyAgICBVQ2hhciogbV9kZXN0OworCisgICAgVG9r
ZW4gbV9jdXJyZW50VG9rZW47CisKKyAgICAvLyBUaGlzIGJ1ZmZlciBob2xkcyB0aGUgcmF3IGNo
YXJhY3RlcnMgd2UndmUgc2VlbiBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YKKyAgICAvLyB0aGUg
YXR0cmlidXRlIG5hbWUgYW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGF0dHJpYnV0ZSB2
YWx1ZS4KKyAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlOwor
CisgICAgLy8gRG9jdW1lbnRQYXJzZXIgZmxhZ3MKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8KKyAg
ICAvLyBhcmUgd2UgaW4gcXVvdGVzIHdpdGhpbiBhIGh0bWwgdGFnCisgICAgZW51bSB7IE5vUXVv
dGUsIFNpbmdsZVF1b3RlLCBEb3VibGVRdW90ZSB9IHRxdW90ZTsKKworICAgIC8vIEFyZSB3ZSBp
biBhICYuLi4gY2hhcmFjdGVyIGVudGl0eSBkZXNjcmlwdGlvbj8KKyAgICBlbnVtIEVudGl0eVN0
YXRlIHsKKyAgICAgICAgTm9FbnRpdHkgPSAwLAorICAgICAgICBTZWFyY2hFbnRpdHkgPSAxLAor
ICAgICAgICBOdW1lcmljU2VhcmNoID0gMiwKKyAgICAgICAgSGV4YWRlY2ltYWwgPSAzLAorICAg
ICAgICBEZWNpbWFsID0gNCwKKyAgICAgICAgRW50aXR5TmFtZSA9IDUsCisgICAgICAgIFNlYXJj
aFNlbWljb2xvbiA9IDYKKyAgICB9OworICAgIHVuc2lnbmVkIEVudGl0eVVuaWNvZGVWYWx1ZTsK
KworICAgIGVudW0gVGFnU3RhdGUgeworICAgICAgICBOb1RhZyA9IDAsCisgICAgICAgIFRhZ05h
bWUgPSAxLAorICAgICAgICBTZWFyY2hBdHRyaWJ1dGUgPSAyLAorICAgICAgICBBdHRyaWJ1dGVO
YW1lID0gMywKKyAgICAgICAgU2VhcmNoRXF1YWwgPSA0LAorICAgICAgICBTZWFyY2hWYWx1ZSA9
IDUsCisgICAgICAgIFF1b3RlZFZhbHVlID0gNiwKKyAgICAgICAgVmFsdWUgPSA3LAorICAgICAg
ICBTZWFyY2hFbmQgPSA4CisgICAgfTsKKworICAgIGNsYXNzIFN0YXRlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFN0YXRlKCkgOiBtX2JpdHMoMCkgeyB9CisKKyAgICAgICAgVGFnU3RhdGUgdGFn
U3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUYWdTdGF0ZT4obV9iaXRzICYgVGFn
TWFzayk7IH0KKyAgICAgICAgdm9pZCBzZXRUYWdTdGF0ZShUYWdTdGF0ZSB0KSB7IG1fYml0cyA9
IChtX2JpdHMgJiB+VGFnTWFzaykgfCB0OyB9CisgICAgICAgIEVudGl0eVN0YXRlIGVudGl0eVN0
YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RW50aXR5U3RhdGU+KChtX2JpdHMgJiBF
bnRpdHlNYXNrKSA+PiBFbnRpdHlTaGlmdCk7IH0KKyAgICAgICAgdm9pZCBzZXRFbnRpdHlTdGF0
ZShFbnRpdHlTdGF0ZSBlKSB7IG1fYml0cyA9IChtX2JpdHMgJiB+RW50aXR5TWFzaykgfCAoZSA8
PCBFbnRpdHlTaGlmdCk7IH0KKworICAgICAgICBib29sIGluU2NyaXB0KCkgY29uc3QgeyByZXR1
cm4gdGVzdEJpdChJblNjcmlwdCk7IH0KKyAgICAgICAgdm9pZCBzZXRJblNjcmlwdChib29sIHYp
IHsgc2V0Qml0KEluU2NyaXB0LCB2KTsgfQorICAgICAgICBib29sIGluU3R5bGUoKSBjb25zdCB7
IHJldHVybiB0ZXN0Qml0KEluU3R5bGUpOyB9CisgICAgICAgIHZvaWQgc2V0SW5TdHlsZShib29s
IHYpIHsgc2V0Qml0KEluU3R5bGUsIHYpOyB9CisgICAgICAgIGJvb2wgaW5YbXAoKSBjb25zdCB7
IHJldHVybiB0ZXN0Qml0KEluWG1wKTsgfQorICAgICAgICB2b2lkIHNldEluWG1wKGJvb2wgdikg
eyBzZXRCaXQoSW5YbXAsIHYpOyB9CisgICAgICAgIGJvb2wgaW5UaXRsZSgpIGNvbnN0IHsgcmV0
dXJuIHRlc3RCaXQoSW5UaXRsZSk7IH0KKyAgICAgICAgdm9pZCBzZXRJblRpdGxlKGJvb2wgdikg
eyBzZXRCaXQoSW5UaXRsZSwgdik7IH0KKyAgICAgICAgYm9vbCBpbklGcmFtZSgpIGNvbnN0IHsg
cmV0dXJuIHRlc3RCaXQoSW5JRnJhbWUpOyB9CisgICAgICAgIHZvaWQgc2V0SW5JRnJhbWUoYm9v
bCB2KSB7IHNldEJpdChJbklGcmFtZSwgdik7IH0KKyAgICAgICAgYm9vbCBpblBsYWluVGV4dCgp
IGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoSW5QbGFpblRleHQpOyB9CisgICAgICAgIHZvaWQgc2V0
SW5QbGFpblRleHQoYm9vbCB2KSB7IHNldEJpdChJblBsYWluVGV4dCwgdik7IH0KKyAgICAgICAg
Ym9vbCBpblByb2Nlc3NpbmdJbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoSW5Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOyB9CisgICAgICAgIHZvaWQgc2V0SW5Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oYm9vbCB2KSB7IHJldHVybiBzZXRCaXQoSW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24s
IHYpOyB9CisgICAgICAgIGJvb2wgaW5Db21tZW50KCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChJ
bkNvbW1lbnQpOyB9CisgICAgICAgIHZvaWQgc2V0SW5Db21tZW50KGJvb2wgdikgeyBzZXRCaXQo
SW5Db21tZW50LCB2KTsgfQorICAgICAgICBib29sIGluRG9jdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHRlc3RCaXQoSW5Eb2N0eXBlKTsgfQorICAgICAgICB2b2lkIHNldEluRG9jdHlwZShib29sIHYp
IHsgc2V0Qml0KEluRG9jdHlwZSwgdik7IH0KKyAgICAgICAgYm9vbCBpblRleHRBcmVhKCkgY29u
c3QgeyByZXR1cm4gdGVzdEJpdChJblRleHRBcmVhKTsgfQorICAgICAgICB2b2lkIHNldEluVGV4
dEFyZWEoYm9vbCB2KSB7IHNldEJpdChJblRleHRBcmVhLCB2KTsgfQorICAgICAgICBib29sIGVz
Y2FwZWQoKSBjb25zdCB7IHJldHVybiB0ZXN0Qml0KEVzY2FwZWQpOyB9CisgICAgICAgIHZvaWQg
c2V0RXNjYXBlZChib29sIHYpIHsgc2V0Qml0KEVzY2FwZWQsIHYpOyB9CisgICAgICAgIGJvb2wg
aW5TZXJ2ZXIoKSBjb25zdCB7IHJldHVybiB0ZXN0Qml0KEluU2VydmVyKTsgfQorICAgICAgICB2
b2lkIHNldEluU2VydmVyKGJvb2wgdikgeyBzZXRCaXQoSW5TZXJ2ZXIsIHYpOyB9CisgICAgICAg
IGJvb2wgc2tpcExGKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChTa2lwTEYpOyB9CisgICAgICAg
IHZvaWQgc2V0U2tpcExGKGJvb2wgdikgeyBzZXRCaXQoU2tpcExGLCB2KTsgfQorICAgICAgICBi
b29sIHN0YXJ0VGFnKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChTdGFydFRhZyk7IH0KKyAgICAg
ICAgdm9pZCBzZXRTdGFydFRhZyhib29sIHYpIHsgc2V0Qml0KFN0YXJ0VGFnLCB2KTsgfQorICAg
ICAgICBib29sIGRpc2NhcmRMRigpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQoRGlzY2FyZExGKTsg
fQorICAgICAgICB2b2lkIHNldERpc2NhcmRMRihib29sIHYpIHsgc2V0Qml0KERpc2NhcmRMRiwg
dik7IH0KKyAgICAgICAgYm9vbCBhbGxvd1lpZWxkKCkgY29uc3QgeyByZXR1cm4gdGVzdEJpdChB
bGxvd1lpZWxkKTsgfQorICAgICAgICB2b2lkIHNldEFsbG93WWllbGQoYm9vbCB2KSB7IHNldEJp
dChBbGxvd1lpZWxkLCB2KTsgfQorICAgICAgICBib29sIGxvYWRpbmdFeHRTY3JpcHQoKSBjb25z
dCB7IHJldHVybiB0ZXN0Qml0KExvYWRpbmdFeHRTY3JpcHQpOyB9CisgICAgICAgIHZvaWQgc2V0
TG9hZGluZ0V4dFNjcmlwdChib29sIHYpIHsgc2V0Qml0KExvYWRpbmdFeHRTY3JpcHQsIHYpOyB9
CisgICAgICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91cygpIGNvbnN0IHsgcmV0dXJuIHRlc3RCaXQo
Rm9yY2VTeW5jaHJvbm91cyk7IH0KKyAgICAgICAgdm9pZCBzZXRGb3JjZVN5bmNocm9ub3VzKGJv
b2wgdikgeyBzZXRCaXQoRm9yY2VTeW5jaHJvbm91cywgdik7IH0KKworICAgICAgICBib29sIGlu
QW55Tm9uSFRNTFRleHQoKSBjb25zdCB7IHJldHVybiBtX2JpdHMgJiAoSW5TY3JpcHQgfCBJblN0
eWxlIHwgSW5YbXAgfCBJblRleHRBcmVhIHwgSW5UaXRsZSB8IEluSUZyYW1lKTsgfQorICAgICAg
ICBib29sIGhhc1RhZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgVGFnTWFzazsgfQor
ICAgICAgICBib29sIGhhc0VudGl0eVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgRW50
aXR5TWFzazsgfQorCisgICAgICAgIGJvb2wgbmVlZHNTcGVjaWFsV3JpdGVIYW5kbGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fYml0cyAmIChJblNjcmlwdCB8IEluU3R5bGUgfCBJblhtcCB8IEluVGV4
dEFyZWEgfCBJblRpdGxlIHwgSW5JRnJhbWUgfCBUYWdNYXNrIHwgRW50aXR5TWFzayB8IEluUGxh
aW5UZXh0IHwgSW5Db21tZW50IHwgSW5Eb2N0eXBlIHwgSW5TZXJ2ZXIgfCBJblByb2Nlc3NpbmdJ
bnN0cnVjdGlvbiB8IFN0YXJ0VGFnKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBFbnRpdHlTaGlmdCA9IDQ7CisgICAgICAgIGVudW0gU3RhdGVCaXRzIHsKKyAg
ICAgICAgICAgIFRhZ01hc2sgPSAoMSA8PCA0KSAtIDEsCisgICAgICAgICAgICBFbnRpdHlNYXNr
ID0gKDEgPDwgNykgLSAoMSA8PCA0KSwKKyAgICAgICAgICAgIEluU2NyaXB0ID0gMSA8PCA3LAor
ICAgICAgICAgICAgSW5TdHlsZSA9IDEgPDwgOCwKKyAgICAgICAgICAgIC8vIEJpdCA5IHVudXNl
ZAorICAgICAgICAgICAgSW5YbXAgPSAxIDw8IDEwLAorICAgICAgICAgICAgSW5UaXRsZSA9IDEg
PDwgMTEsCisgICAgICAgICAgICBJblBsYWluVGV4dCA9IDEgPDwgMTIsCisgICAgICAgICAgICBJ
blByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IDEgPDwgMTMsCisgICAgICAgICAgICBJbkNvbW1lbnQg
PSAxIDw8IDE0LAorICAgICAgICAgICAgSW5UZXh0QXJlYSA9IDEgPDwgMTUsCisgICAgICAgICAg
ICBFc2NhcGVkID0gMSA8PCAxNiwKKyAgICAgICAgICAgIEluU2VydmVyID0gMSA8PCAxNywKKyAg
ICAgICAgICAgIFNraXBMRiA9IDEgPDwgMTgsCisgICAgICAgICAgICBTdGFydFRhZyA9IDEgPDwg
MTksCisgICAgICAgICAgICBEaXNjYXJkTEYgPSAxIDw8IDIwLCAvLyBGSVhNRTogc2hvdWxkIGNs
YXJpZnkgZGlmZmVyZW5jZSBiZXR3ZWVuIHNraXAgYW5kIGRpc2NhcmQKKyAgICAgICAgICAgIEFs
bG93WWllbGQgPSAxIDw8IDIxLAorICAgICAgICAgICAgTG9hZGluZ0V4dFNjcmlwdCA9IDEgPDwg
MjIsCisgICAgICAgICAgICBGb3JjZVN5bmNocm9ub3VzID0gMSA8PCAyMywKKyAgICAgICAgICAg
IEluSUZyYW1lID0gMSA8PCAyNCwKKyAgICAgICAgICAgIEluRG9jdHlwZSA9IDEgPDwgMjUKKyAg
ICAgICAgfTsKKworICAgICAgICB2b2lkIHNldEJpdChTdGF0ZUJpdHMgYml0LCBib29sIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgbV9i
aXRzIHw9IGJpdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2JpdHMgJj0g
fmJpdDsKKyAgICAgICAgfQorICAgICAgICBib29sIHRlc3RCaXQoU3RhdGVCaXRzIGJpdCkgY29u
c3QgeyByZXR1cm4gbV9iaXRzICYgYml0OyB9CisKKyAgICAgICAgdW5zaWduZWQgbV9iaXRzOwor
ICAgIH07CisKKyAgICBTdGF0ZSBtX3N0YXRlOworCisgICAgRG9jdHlwZVRva2VuIG1fZG9jdHlw
ZVRva2VuOworICAgIGludCBtX2RvY3R5cGVTZWFyY2hDb3VudDsKKyAgICBpbnQgbV9kb2N0eXBl
U2Vjb25kYXJ5U2VhcmNoQ291bnQ7CisKKyAgICBib29sIG1fYnJva2VuU2VydmVyOworCisgICAg
Ly8gTmFtZSBvZiBhbiBhdHRyaWJ1dGUgdGhhdCB3ZSBqdXN0IHNjYW5uZWQuCisgICAgQXRvbWlj
U3RyaW5nIG1fYXR0ck5hbWU7CisKKyAgICAvLyBVc2VkIHRvIHN0b3JlIHRoZSBjb2RlIG9mIGEg
c2NyaXB0aW5nIHNlcXVlbmNlCisgICAgVUNoYXIqIG1fc2NyaXB0Q29kZTsKKyAgICAvLyBTaXpl
IG9mIHRoZSBzY3JpcHQgc2VxdWVuemUgc3RvcmVkIGluIEByZWYgI3NjcmlwdENvZGUKKyAgICBp
bnQgbV9zY3JpcHRDb2RlU2l6ZTsKKyAgICAvLyBNYXhpbWFsIHNpemUgdGhhdCBjYW4gYmUgc3Rv
cmVkIGluIEByZWYgI3NjcmlwdENvZGUKKyAgICBpbnQgbV9zY3JpcHRDb2RlQ2FwYWNpdHk7Cisg
ICAgLy8gcmVzeW5jIHBvaW50IG9mIHNjcmlwdCBjb2RlIHNpemUKKyAgICBpbnQgbV9zY3JpcHRD
b2RlUmVzeW5jOworCisgICAgLy8gU3RvcmVzIGNoYXJhY3RlcnMgaWYgd2UgYXJlIHNjYW5uaW5n
IGZvciBhIHN0cmluZyBsaWtlICI8L3NjcmlwdD4iCisgICAgVUNoYXIgc2VhcmNoQnVmZmVyWzEw
XTsKKworICAgIC8vIENvdW50cyB3aGVyZSB3ZSBhcmUgaW4gdGhlIHN0cmluZyB3ZSBhcmUgc2Nh
bm5pbmcgZm9yCisgICAgaW50IHNlYXJjaENvdW50OworICAgIC8vIHRoZSBzdG9wcGVyIHN0cmlu
ZworICAgIGNvbnN0IGNoYXIqIG1fc2VhcmNoU3RvcHBlcjsKKyAgICBpbnQgbV9zZWFyY2hTdG9w
cGVyTGVuZ3RoOworCisgICAgLy8gaWYgbm8gbW9yZSBkYXRhIGlzIGNvbWluZywganVzdCBwYXJz
ZSB3aGF0IHdlIGhhdmUgKGluY2x1ZGluZyBleHQgc2NyaXB0cyB0aGF0CisgICAgLy8gbWF5IGJl
IHN0aWxsIGRvd25sb2FkaW5nKSBhbmQgZmluaXNoCisgICAgYm9vbCBtX25vTW9yZURhdGE7Cisg
ICAgLy8gVVJMIHRvIGdldCBzb3VyY2UgY29kZSBvZiBzY3JpcHQgZnJvbQorICAgIFN0cmluZyBt
X3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZTsKKyAgICBTdHJpbmcgbV9zY3JpcHRUYWdDaGFyc2V0QXR0
clZhbHVlOworICAgIC8vIHRoZSBIVE1MIGNvZGUgd2Ugd2lsbCBwYXJzZSBhZnRlciB0aGUgZXh0
ZXJuYWwgc2NyaXB0IHdlIGFyZSB3YWl0aW5nIGZvciBoYXMgbG9hZGVkCisgICAgU2VnbWVudGVk
U3RyaW5nIG1fcGVuZGluZ1NyYzsKKworICAgIC8vIHRoZSBIVE1MIGNvZGUgd2Ugd2lsbCBwYXJz
ZSBhZnRlciB0aGlzIHBhcnRpY3VsYXIgc2NyaXB0IGhhcworICAgIC8vIGxvYWRlZCwgYnV0IGJl
Zm9yZSBhbGwgcGVuZGluZyBIVE1MCisgICAgU2VnbWVudGVkU3RyaW5nKiBtX2N1cnJlbnRQcmVw
ZW5kaW5nU3JjOworCisgICAgLy8gdHJ1ZSBpZiB3ZSBhcmUgZXhlY3V0aW5nIGEgc2NyaXB0IHdo
aWxlIHBhcnNpbmcgYSBkb2N1bWVudC4gVGhpcyBjYXVzZXMgdGhlIHBhcnNpbmcgb2YKKyAgICAv
LyB0aGUgb3V0cHV0IG9mIHRoZSBzY3JpcHQgdG8gYmUgcG9zdHBvbmVkIHVudGlsIGFmdGVyIHRo
ZSBzY3JpcHQgaGFzIGZpbmlzaGVkIGV4ZWN1dGluZworICAgIGludCBtX2V4ZWN1dGluZ1Njcmlw
dDsKKyAgICBEZXF1ZTxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+ID4gbV9wZW5k
aW5nU2NyaXB0czsKKyAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IG1fc2NyaXB0Tm9kZTsK
KworICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OworICAgIGJvb2wgbV9oYXNTY3JpcHRzV2Fp
dGluZ0ZvclN0eWxlc2hlZXRzOworCisgICAgLy8gaWYgd2UgZm91bmQgb25lIGJyb2tlbiBjb21t
ZW50LCB0aGVyZSBhcmUgbW9zdCBsaWtlbHkgb3RoZXJzIGFzIHdlbGwKKyAgICAvLyBzdG9yZSBh
IGZsYWcgdG8gZ2V0IHJpZCBvZiB0aGUgTyhuXjIpIGJlaGF2aW91ciBpbiBzdWNoIGEgY2FzZS4K
KyAgICBib29sIG1fYnJva2VuQ29tbWVudHM7CisgICAgLy8gY3VycmVudCBsaW5lIG51bWJlcgor
ICAgIGludCBtX2xpbmVOdW1iZXI7CisgICAgaW50IG1fY3VycmVudFNjcmlwdFRhZ1N0YXJ0TGlu
ZU51bWJlcjsKKyAgICBpbnQgbV9jdXJyZW50VGFnU3RhcnRMaW5lTnVtYmVyOworCisgICAgZG91
YmxlIG1fdG9rZW5pemVyVGltZURlbGF5OworICAgIGludCBtX3Rva2VuaXplckNodW5rU2l6ZTsK
KworICAgIC8vIFRoZSB0aW1lciBmb3IgY29udGludWVkIHByb2Nlc3NpbmcuCisgICAgVGltZXI8
SFRNTERvY3VtZW50UGFyc2VyPiBtX3RpbWVyOworCisgICAgLy8gVGhlIHRpbWVyIGZvciBjb250
aW51ZWQgZXhlY3V0aW5nIGV4dGVybmFsIHNjcmlwdHMuCisgICAgVGltZXI8SFRNTERvY3VtZW50
UGFyc2VyPiBtX2V4dGVybmFsU2NyaXB0c1RpbWVyOworCisvLyBUaGlzIGJ1ZmZlciBjYW4gaG9s
ZCBhcmJpdHJhcmlseSBsb25nIHVzZXItZGVmaW5lZCBhdHRyaWJ1dGUgbmFtZXMsIHN1Y2ggYXMg
aW4gRU1CRUQgdGFncy4KKy8vIFNvIGFueSBmaXhlZCBudW1iZXIgbWlnaHQgYmUgdG9vIHNtYWxs
LCBidXQgcmF0aGVyIHRoYW4gcmV3cml0aW5nIGFsbCB1c2FnZSBvZiB0aGlzIGJ1ZmZlcgorLy8g
d2UnbGwganVzdCBtYWtlIGl0IGxhcmdlIGVub3VnaCB0byBoYW5kbGUgYWxsIGltYWdpbmFibGUg
Y2FzZXMuCisjZGVmaW5lIENCVUZMRU4gMTAyNAorICAgIFVDaGFyIG1fY0J1ZmZlcltDQlVGTEVO
ICsgMl07CisgICAgdW5zaWduZWQgaW50IG1fY0J1ZmZlclBvczsKKworICAgIFNlZ21lbnRlZFN0
cmluZyBtX3NyYzsKKyAgICBEb2N1bWVudCogbV9kb2M7CisgICAgT3duUHRyPExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I+IG1fdHJlZUNvbnN0cnVjdG9yOworICAgIGJvb2wgbV9pbldyaXRlOwor
ICAgIGJvb2wgbV9mcmFnbWVudDsKKyAgICBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gbV9z
Y3JpcHRpbmdQZXJtaXNzaW9uOworCisgICAgT3duUHRyPFByZWxvYWRTY2FubmVyPiBtX3ByZWxv
YWRTY2FubmVyOworfTsKKwordm9pZCBwYXJzZUxlZ2FjeUhUTUxEb2N1bWVudEZyYWdtZW50KGNv
bnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworCitVQ2hhciBkZWNvZGVOYW1lZEVudGl0
eShjb25zdCBjaGFyKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhU
TUxUb2tlbml6ZXJfaApJbmRleDogV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
aAkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCwxMiArMTQwLDEyIEBAIHB1YmxpYzoKIC8vIChs
aWtlIGRlYWxpbmcgd2l0aCA8c2NyaXB0PiB0YWdzKS4gIFRoZSBIVE1MIGxleGVyIGJpdHMgc2hv
dWxkIGJlIHB1c2hlZAogLy8gZG93biBpbnRvIGEgc2VwYXJhdGUgSFRNTCBsZXhlciBjbGFzcy4K
IAotY2xhc3MgSFRNTERvY3VtZW50UGFyc2VyIDogcHVibGljIERvY3VtZW50UGFyc2VyLCBwdWJs
aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
IDogcHVibGljIERvY3VtZW50UGFyc2VyLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewog
cHVibGljOgotICAgIEhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqLCBib29sIHJlcG9y
dEVycm9ycyk7Ci0gICAgSFRNTERvY3VtZW50UGFyc2VyKEhUTUxWaWV3U291cmNlRG9jdW1lbnQq
KTsKLSAgICBIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7Ci0gICAgdmlydHVh
bCB+SFRNTERvY3VtZW50UGFyc2VyKCk7CisgICAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKEhU
TUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKKyAgICBMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIoSFRNTFZpZXdTb3VyY2VEb2N1bWVudCopOworICAgIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcihEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKKyAgICB2aXJ0dWFsIH5MZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcm
LCBib29sIGFwcGVuZERhdGEpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKQEAgLTE2NSw3
ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGlu
Z0ZvclN0eWxlc2hlZXRzKCk7CiAKICAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3IqIGh0bWxUcmVlQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyZWVDb25zdHJ1Y3Rv
ci5nZXQoKTsgfQotICAgIHZpcnR1YWwgSFRNTERvY3VtZW50UGFyc2VyKiBhc0hUTUxEb2N1bWVu
dFBhcnNlcigpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIExlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlciogYXNIVE1MRG9jdW1lbnRQYXJzZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKIHByaXZh
dGU6CiAgICAgY2xhc3MgU3RhdGU7CkBAIC0yMTQsMTQgKzIxNCwxNCBAQCBwcml2YXRlOgogICAg
IHZvaWQgZW5sYXJnZVNjcmlwdEJ1ZmZlcihpbnQgbGVuKTsKIAogICAgIGJvb2wgY29udGludWVQ
cm9jZXNzaW5nKGludCYgcHJvY2Vzc2VkQ291bnQsIGRvdWJsZSBzdGFydFRpbWUsIFN0YXRlJik7
Ci0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEhUTUxEb2N1bWVudFBhcnNlcj4qKTsKKyAgICB2
b2lkIHRpbWVyRmlyZWQoVGltZXI8TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyPiopOwogICAgIHZv
aWQgYWxsRGF0YVByb2Nlc3NlZCgpOwogCiAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVu
dAogICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKIAogICAgIHZvaWQg
ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c0lmUmVhZHkoKTsKLSAgICB2b2lkIGV4ZWN1dGVFeHRlcm5h
bFNjcmlwdHNUaW1lckZpcmVkKFRpbWVyPEhUTUxEb2N1bWVudFBhcnNlcj4qKTsKKyAgICB2b2lk
IGV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKFRpbWVyPExlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlcj4qKTsKICAgICBib29sIGNvbnRpbnVlRXhlY3V0aW5nRXh0ZXJuYWxTY3JpcHRzKGRv
dWJsZSBzdGFydFRpbWUpOwogCiAgICAgLy8gSW50ZXJuYWwgYnVmZmVycwpAQCAtNDE4LDEwICs0
MTgsMTAgQEAgcHJpdmF0ZToKICAgICBpbnQgbV90b2tlbml6ZXJDaHVua1NpemU7CiAKICAgICAv
LyBUaGUgdGltZXIgZm9yIGNvbnRpbnVlZCBwcm9jZXNzaW5nLgotICAgIFRpbWVyPEhUTUxEb2N1
bWVudFBhcnNlcj4gbV90aW1lcjsKKyAgICBUaW1lcjxMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI+
IG1fdGltZXI7CiAKICAgICAvLyBUaGUgdGltZXIgZm9yIGNvbnRpbnVlZCBleGVjdXRpbmcgZXh0
ZXJuYWwgc2NyaXB0cy4KLSAgICBUaW1lcjxIVE1MRG9jdW1lbnRQYXJzZXI+IG1fZXh0ZXJuYWxT
Y3JpcHRzVGltZXI7CisgICAgVGltZXI8TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyPiBtX2V4dGVy
bmFsU2NyaXB0c1RpbWVyOwogCiAvLyBUaGlzIGJ1ZmZlciBjYW4gaG9sZCBhcmJpdHJhcmlseSBs
b25nIHVzZXItZGVmaW5lZCBhdHRyaWJ1dGUgbmFtZXMsIHN1Y2ggYXMgaW4gRU1CRUQgdGFncy4K
IC8vIFNvIGFueSBmaXhlZCBudW1iZXIgbWlnaHQgYmUgdG9vIHNtYWxsLCBidXQgcmF0aGVyIHRo
YW4gcmV3cml0aW5nIGFsbCB1c2FnZSBvZiB0aGlzIGJ1ZmZlcgpJbmRleDogV2ViQ29yZS9odG1s
L0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJD
b3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVTZWN0aW9uRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgIkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTE2NDgsNyArMTY0OCw3
IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVwb3J0RXIKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSFRNTERvY3VtZW50UGFyc2VyKiBodG1s
VG9rZW5pemVyID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50UGFyc2VyKj4obV9kb2N1bWVudC0+
cGFyc2VyKCkpOworICAgIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciogaHRtbFRva2VuaXplciA9
IHN0YXRpY19jYXN0PExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcio+KG1fZG9jdW1lbnQtPnBhcnNl
cigpKTsKICAgICBpbnQgbGluZU51bWJlciA9IGh0bWxUb2tlbml6ZXItPmxpbmVOdW1iZXIoKSAr
IDE7CiAKICAgICBBdG9taWNTdHJpbmcgdGFnMTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9MZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0xlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3IuaAkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJDb3JlL2h0bWwvTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
IHN0cnVjdCBIVE1MU3RhY2tFbGVtOwogc3RydWN0IFRva2VuOwogCiAvKioKLSAqIFRoZSBwYXJz
ZXIgZm9yIEhUTUwuIEl0IHJlY2VpdmVzIGEgc3RyZWFtIG9mIHRva2VucyBmcm9tIHRoZSBIVE1M
RG9jdW1lbnRQYXJzZXIsIGFuZAorICogVGhlIHBhcnNlciBmb3IgSFRNTC4gSXQgcmVjZWl2ZXMg
YSBzdHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciwgYW5k
CiAgKiBidWlsZHMgdXAgdGhlIERvY3VtZW50IHN0cnVjdHVyZSBmcm9tIGl0LgogICovCiBjbGFz
cyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yIDogcHVibGljIE5vbmNvcHlhYmxlIHsKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAJKHJldmlzaW9uIDYxNjU4KQor
KysgV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAi
SFRNTERvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJGVFBEaXJlY3RvcnlQYXJzZXIuaCIKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIAotY2xhc3Mg
RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgSFRNTERvY3VtZW50UGFyc2VyIHsK
K2NsYXNzIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyIDogcHVibGljIExlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlciB7CiBwdWJsaWM6CiAgICAgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXIoSFRN
TERvY3VtZW50Kik7CiAKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKIH07CiAKIEZUUERpcmVj
dG9yeURvY3VtZW50UGFyc2VyOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1l
bnQqIGRvYykKLSAgICA6IEhUTUxEb2N1bWVudFBhcnNlcihkb2MsIGZhbHNlKQorICAgIDogTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyKGRvYywgZmFsc2UpCiAgICAgLCBtX2RvYyhkb2MpCiAgICAg
LCBtX3NraXBMRihmYWxzZSkKICAgICAsIG1fcGFyc2VkVGVtcGxhdGUoZmFsc2UpCkBAIC0zMDYs
NyArMzA2LDcgQEAgYm9vbCBGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6bG9hZERvYwogICAg
IAogICAgIC8vIFRva2VuaXplIHRoZSB0ZW1wbGF0ZSBhcyBhbiBIVE1MIGRvY3VtZW50IHN5bmNo
cm9ub3VzbHkKICAgICBzZXRGb3JjZVN5bmNocm9ub3VzKHRydWUpOwotICAgIEhUTUxEb2N1bWVu
dFBhcnNlcjo6d3JpdGUoU3RyaW5nKHRlbXBsYXRlRG9jdW1lbnREYXRhLT5kYXRhKCksIHRlbXBs
YXRlRG9jdW1lbnREYXRhLT5zaXplKCkpLCB0cnVlKTsKKyAgICBMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXI6OndyaXRlKFN0cmluZyh0ZW1wbGF0ZURvY3VtZW50RGF0YS0+ZGF0YSgpLCB0ZW1wbGF0
ZURvY3VtZW50RGF0YS0+c2l6ZSgpKSwgdHJ1ZSk7CiAgICAgc2V0Rm9yY2VTeW5jaHJvbm91cyhm
YWxzZSk7CiAgICAgCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxlbWVudCA9IG1fZG9jLT5n
ZXRFbGVtZW50QnlJZCgiZnRwRGlyZWN0b3J5VGFibGUiKTsKQEAgLTQzMSw3ICs0MzEsNyBAQCB2
b2lkIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpmaW5pc2goCiAgICAgbV90YWJsZUVsZW1l
bnQgPSAwOwogICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKICAgICAgICAgCi0gICAgSFRNTERvY3Vt
ZW50UGFyc2VyOjpmaW5pc2goKTsKKyAgICBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlz
aCgpOwogfQogCiBGVFBEaXJlY3RvcnlEb2N1bWVudDo6RlRQRGlyZWN0b3J5RG9jdW1lbnQoRnJh
bWUqIGZyYW1lKQpJbmRleDogV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5oCShyZXZpc2lvbiA2MTY1OCkKKysrIFdlYkNvcmUv
cGFnZS9YU1NBdWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIC8vICogU2NyaXB0Q29udHJvbGxlcjo6ZXhlY3V0ZUlmSmF2YVNj
cmlwdFVSTCAtIHVzZWQgdG8gZXZhbHVhdGUgSmF2YVNjcmlwdCBVUkxzLgogICAgIC8vICogU2Ny
aXB0RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lciAtIHVzZWQgdG8g
Y3JlYXRlIEphdmFTY3JpcHQgZXZlbnQgaGFuZGxlcnMuCiAgICAgLy8gKiBIVE1MQmFzZUVsZW1l
bnQ6OnByb2Nlc3MgLSB1c2VkIHRvIHNldCB0aGUgZG9jdW1lbnQgYmFzZSBVUkwuCi0gICAgLy8g
KiBIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlVGFnIC0gdXNlZCB0byBsb2FkIGV4dGVybmFsIEph
dmFTY3JpcHQgc2NyaXB0cy4KKyAgICAvLyAqIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cGFy
c2VUYWcgLSB1c2VkIHRvIGxvYWQgZXh0ZXJuYWwgSmF2YVNjcmlwdCBzY3JpcHRzLgogICAgIC8v
ICogU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QgLSB1c2VkIHRvIGxvYWQgPG9iamVjdD4v
PGVtYmVkPiBlbGVtZW50cy4KICAgICAvLwogICAgIGNsYXNzIFhTU0F1ZGl0b3IgOiBwdWJsaWMg
Tm9uY29weWFibGUgewpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MTY1OCkKKysrIFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAx
MC0wNi0yMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBIVE1MRG9jdW1lbnRQYXJz
ZXIgdG8gTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTA0MworCisgICAgICAgICogc3JjL1dlYkVudGl0aWVz
LmNwcDoKKwogMjAxMC0wNi0yMiAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkVudGl0aWVzLmNwcAkocmV2aXNpb24gNjE2NTgpCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkVudGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7Ci0vLyBOb3RlIHRoYXQgdGhp
cyBmaWxlIGlzIGFsc28gaW5jbHVkZWQgYnkgSFRNTERvY3VtZW50UGFyc2VyLmNwcCBzbyB3ZSBh
cmUgZ2V0dGluZworLy8gTm90ZSB0aGF0IHRoaXMgZmlsZSBpcyBhbHNvIGluY2x1ZGVkIGJ5IExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAgc28gd2UgYXJlIGdldHRpbmcKIC8vIHR3byBjb3Bp
ZXMgb2YgdGhlIGRhdGEgaW4gbWVtb3J5LiAgV2UgY2FuIGZpeCB0aGlzIGJ5IGNoYW5naW5nIHRo
ZSBzY3JpcHQKIC8vIHRoYXQgZ2VuZXJhdGVkIHRoZSBhcnJheSB0byBjcmVhdGUgYSBzdGF0aWMg
Y29uc3QgdGhhdCBpcyBpdHMgbGVuZ3RoLCBidXQKIC8vIHRoaXMgaXMgbG93IHByaW9yaXR5IHNp
bmNlIHRoZSBkYXRhIGlzIGxlc3MgdGhhbiA0Sy4gV2UgdXNlIGFub255bW91cwpJbmRleDogV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gNjE2NTgpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNCBAQAorMjAxMC0wNi0yMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZSBIVE1MRG9jdW1lbnRQYXJzZXIgdG8gTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTA0MworCisgICAg
ICAgIFVwZGF0ZSB0aGUgaGFzaC4KKworICAgICAgICAqIFNjcmlwdHMvZG8td2ViY29yZS1yZW5h
bWU6CisKIDIwMTAtMDYtMjIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQuICBBZGQgVG9ueSBHZW50aWxjb3JlIG5vdyB0aGF0IGhlJ3MgYSBjb21t
aXR0ZXIuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL2RvLXdlYmNvcmUtcmVuYW1lCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvZG8td2ViY29yZS1yZW5hbWUJKHJldmlzaW9u
IDYxNjU4KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9kby13ZWJjb3JlLXJlbmFtZQkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBzdWIgd2FudGVkCiBteSAkaXNET01UeXBlUmVuYW1l
ID0gMDsKIG15ICVyZW5hbWVzID0gKAogICAgICMgUmVuYW1lcyBnbyBoZXJlIGluIHRoZSBmb3Jt
IG9mOgotICAgICMgIlRva2VuaXplciIgPT4gIkRvY3VtZW50UGFyc2VyIiwKKyAgICAjICJIVE1M
RG9jdW1lbnRQYXJzZXIiID0+ICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIiLAogKTsKIAogbXkg
JXJlbmFtZXNDb250ZW1wbGF0ZWRGb3JUaGVGdXR1cmUgPSAoCg==
</data>
<flag name="review"
          id="46358"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>