<?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>55107</bug_id>
          
          <creation_ts>2011-02-23 17:14:10 -0800</creation_ts>
          <short_desc>REGRESSION(r79502): Does not compile on mac (Requested by jamesr_ on #webkit).</short_desc>
          <delta_ts>2011-02-23 18:18:31 -0800</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>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>47615</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>jamesr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>356577</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-23 17:14:10 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/79502 broke the build:
Does not compile on mac (Requested by jamesr_ on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356579</commentid>
    <comment_count>1</comment_count>
      <attachid>83588</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-23 17:14:32 -0800</bug_when>
    <thetext>Created attachment 83588
ROLLOUT of r79502

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID --ignore-builders

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356593</commentid>
    <comment_count>2</comment_count>
      <attachid>83588</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-23 17:40:37 -0800</bug_when>
    <thetext>Comment on attachment 83588
ROLLOUT of r79502

Rejecting attachment 83588 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;land-a...&quot; exit_code: 2

Last 500 characters of output:
ile Source/WebCore/platform/mac/PasteboardMac.mm

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1
Updating OpenSource
From git://git.webkit.org/WebKit
   c548238..d164f33  master     -&gt; origin/master
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/platform/mac/HTMLConverter.h
r79508 = d164f3377468e4d630428f9338126e37a3e72974 (refs/remotes/trunk)
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/trunk.

Full output: http://queues.webkit.org/results/7981249</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356618</commentid>
    <comment_count>3</comment_count>
      <attachid>83588</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-23 18:18:21 -0800</bug_when>
    <thetext>Comment on attachment 83588
ROLLOUT of r79502

ggaren reverted manually</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83588</attachid>
            <date>2011-02-23 17:14:32 -0800</date>
            <delta_ts>2011-02-23 18:18:21 -0800</delta_ts>
            <desc>ROLLOUT of r79502</desc>
            <filename>bug-55107-20110224011340.patch</filename>
            <type>text/plain</type>
            <size>104554</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk1MDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNTMxM2I1Njk0OThhZDEy
NzEwMzhhNjMxM2Y3MTM3MTFkZDA1OTBiLi5mYzliYmIyZWM5M2E1NjBhMTVjMWU5NGI2MjA4Yjc2
ZGJkZjJlMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDItMjMgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgorCisgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHI3OTUwMi4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvNzk1MDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU1MTA3CisKKyAgICAgICAgRG9lcyBub3QgY29tcGlsZSBvbiBtYWMgKFJlcXVlc3Rl
ZCBieSBqYW1lc3JfIG9uICN3ZWJraXQpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIubW06IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisKIDIwMTEtMDItMTcgIEVucmlj
YSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAxYWJjM2JjNDk2MzkyYWMxODIwMzRmZjQ4NTcyN2RiMWYwOWRlMDJjLi41
Nzc1Mzc2N2YxNjliN2ZhYmRmMjc3ZjE4NDViMjMwNGVlYTlkZTI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01Mjc1LDggKzUy
NzUsNiBAQAogCQlDNTEzN0NGMzExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEzN0NGMTEx
QTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmggKi87IH07CiAJCUM1MTYwRUVBMTAw
NDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxNjBFRTgxMDA0NTQzQTAwQTdDRUUyIC8qIFN0
b3JhZ2VBcmVhSW1wbC5jcHAgKi87IH07CiAJCUM1MTYwRUVCMTAwNDU0M0EwMEE3Q0VFMiAvKiBT
dG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1MTYwRUU5MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCAqLzsg
fTsKLQkJQzUyNDM0RkMxMzBDRDA5QjAwQkQ3QTRGIC8qIEhUTUxDb252ZXJ0ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MjQzNEZBMTMwQ0QwOUIw
MEJEN0E0RiAvKiBIVE1MQ29udmVydGVyLmggKi87IH07Ci0JCUM1MjQzNEZEMTMwQ0QwOUIwMEJE
N0E0RiAvKiBIVE1MQ29udmVydGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUyNDM0RkIxMzBDRDA5QjAwQkQ3QTRGIC8qIEhUTUxDb252ZXJ0ZXIu
bW0gKi87IH07CiAJCUM1NDQyNzRCMTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQ0Mjc0OTEx
QTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5oICovOyB9OwogCQlDNTU2MTBGMTExQTcw
NEVCMDBCODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTU2MTBGMDExQTcwNEVCMDBCODJEMjcgLyogRE9NU3Ry
aW5nTGlzdC5jcHAgKi87IH07CiAJCUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdl
TmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgg
Ki87IH07CkBAIC0xMTYyNSw4ICsxMTYyMyw2IEBACiAJCUM1MTM3Q0YxMTFBNTgzNzgwMDRBREI5
OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNET01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTYwRUU4
MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzUxNjBFRTkxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYUltcGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzUyNDM0RkExMzBDRDA5QjAwQkQ3QTRGIC8q
IEhUTUxDb252ZXJ0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENv
bnZlcnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTI0MzRGQjEzMENEMDlC
MDBCRDdBNEYgLyogSFRNTENvbnZlcnRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEhUTUxDb252ZXJ0ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUM1NDQyNzQ5MTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0cmluZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzU0NDI3NEExMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3Qu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERPTVN0cmluZ0xpc3QuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDNTU2MTBGMDExQTcwNEVCMDBCODJEMjcgLyogRE9NU3RyaW5n
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01TdHJpbmdM
aXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzODYxLDggKzEzODU3LDYg
QEAKIAkJCQkwNjZDNzcyQzBBQjYwM0QyMDAyMzhDQzQgLyogRmlsZUNob29zZXJNYWMubW0gKi8s
CiAJCQkJNTE0QjNGNzUwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0ZW1NYWMubW0gKi8sCiAJ
CQkJOTM1QzQ3NkMwOUFDNEQ2MzAwQTZBQUI0IC8qIEZvdW5kYXRpb25FeHRyYXMuaCAqLywKLQkJ
CQlDNTI0MzRGQTEzMENEMDlCMDBCRDdBNEYgLyogSFRNTENvbnZlcnRlci5oICovLAotCQkJCUM1
MjQzNEZCMTMwQ0QwOUIwMEJEN0E0RiAvKiBIVE1MQ29udmVydGVyLm1tICovLAogCQkJCTkzNUM0
NzZFMDlBQzRENzMwMEE2QUFCNCAvKiBLZXlFdmVudE1hYy5tbSAqLywKIAkJCQk1MjFENDZGNTEx
QUVDOTgxMDA1MTQ2MTMgLyogS2lsbFJpbmdNYWMubW0gKi8sCiAJCQkJNjU5MzkyMzkwOUFFNDM1
QzAwMkM1MzFGIC8qIEtVUkxNYWMubW0gKi8sCkBAIC0yMjQ0OSw3ICsyMjQ0Myw2IEBACiAJCQkJ
RTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOThFQjFGOTUxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDNTI0MzRGQzEzMENEMDlCMDBCRDdBNEYgLyogSFRNTENvbnZl
cnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTA5Myw3ICsyNTA4Niw2IEBACiAJCQkJOTNGMTlC
MDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3RTJFMEUxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTI0MzRGRDEzMENEMDlCMDBCRDdBNEYgLyogSFRN
TENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9IVE1MQ29udmVydGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNWI1ZmI0
MDQzNjE4MGRhZTE4NGY0OTk3NDBjZmYyOWU1YTVjMGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxD
b252ZXJ0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgotI2ltcG9ydCAiRE9NRG9jdW1lbnQuaCIKLSNpbXBv
cnQgIkRPTVJhbmdlLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJmYWNl
IFdlYkhUTUxDb252ZXJ0ZXIgOiBOU09iamVjdCB7Ci0gICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyAqX2F0dHJTdHI7Ci0gICAgTlNVUkwgKl9iYXNlVVJMOwotICAgIERPTURvY3VtZW50ICpf
ZG9jdW1lbnQ7Ci0gICAgRE9NUmFuZ2UgKl9kb21SYW5nZTsKLSAgICBOU011dGFibGVBcnJheSAq
X2RvbVN0YXJ0QW5jZXN0b3JzOwotICAgIERvY3VtZW50TG9hZGVyICpfZGF0YVNvdXJjZTsKLSAg
ICBOU1N0cmluZyAqX3N0YW5kYXJkRm9udEZhbWlseTsKLSAgICBDR0Zsb2F0IF90ZXh0U2l6ZU11
bHRpcGxpZXI7Ci0gICAgQ0dGbG9hdCBfd2ViVmlld1RleHRTaXplTXVsdGlwbGllcjsKLSAgICBD
R0Zsb2F0IF9kZWZhdWx0VGFiSW50ZXJ2YWw7Ci0gICAgQ0dGbG9hdCBfZGVmYXVsdEZvbnRTaXpl
OwotICAgIENHRmxvYXQgX21pbmltdW1Gb250U2l6ZTsKLSAgICBOU011dGFibGVBcnJheSAqX3Rl
eHRMaXN0czsKLSAgICBOU011dGFibGVBcnJheSAqX3RleHRCbG9ja3M7Ci0gICAgTlNNdXRhYmxl
QXJyYXkgKl90ZXh0VGFibGVzOwotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl90ZXh0VGFibGVG
b290ZXJzOwotICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxlU3BhY2luZ3M7Ci0gICAgTlNN
dXRhYmxlQXJyYXkgKl90ZXh0VGFibGVQYWRkaW5nczsKLSAgICBOU011dGFibGVBcnJheSAqX3Rl
eHRUYWJsZVJvd3M7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVSb3dBcnJheXM7Ci0g
ICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3JzOwotICAgIE5T
TXV0YWJsZURpY3Rpb25hcnkgKl9jb21wdXRlZFN0eWxlc0ZvckVsZW1lbnRzOwotICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKl9zcGVjaWZpZWRTdHlsZXNGb3JFbGVtZW50czsKLSAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpfc3RyaW5nc0Zvck5vZGVzOwotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkg
Kl9mbG9hdHNGb3JOb2RlczsKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfY29sb3JzRm9yTm9k
ZXM7Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKLSAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZWxlbWVudElzQmxvY2tMZXZlbDsKLSAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpfZm9udENhY2hlOwotICAgIE5TTXV0YWJsZUFycmF5ICpfd3JpdGluZ0Rp
cmVjdGlvbkFycmF5OwotICAgIE5TVUludGVnZXIgX2RvbVJhbmdlU3RhcnRJbmRleDsKLSAgICBO
U0ludGVnZXIgX2luZGV4aW5nTGltaXQ7Ci0gICAgTlNVSW50ZWdlciBfdGh1bWJuYWlsTGltaXQ7
Ci0gICAgTlNJbnRlZ2VyIF9lcnJvckNvZGU7Ci0gICAgTlNJbnRlZ2VyIF9xdW90ZUxldmVsOwot
Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdW5zaWduZWQgaW50IGlzU29mdDoxOwotICAgICAgICB1
bnNpZ25lZCBpbnQgcmVhY2hlZFN0YXJ0OjE7Ci0gICAgICAgIHVuc2lnbmVkIGludCByZWFjaGVk
RW5kOjE7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpc0luZGV4aW5nOjE7Ci0gICAgICAgIHVuc2ln
bmVkIGludCBpc1Rlc3Rpbmc6MTsKLSAgICAgICAgdW5zaWduZWQgaW50IGhhc1RyYWlsaW5nTmV3
bGluZToxOwotICAgICAgICB1bnNpZ25lZCBpbnQgcGFkOjI2OwotICAgIH0gX2ZsYWdzOwotfQot
Ci0tIChpZClpbml0OwotLSAoaWQpaW5pdFdpdGhET01SYW5nZTooRE9NUmFuZ2UgKilkb21SYW5n
ZTsKLQotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZzsKLQotQGVuZAot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmZkYTk3ZWM5ZGRhMGRjOWY2YTcwYzI3NmVjYTc2MjQ5
ZmM5MzExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMTY4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJIVE1MQ29udmVydGVyLmgiCi0KLSNpbXBvcnQgIkFyY2hpdmVSZXNvdXJjZS5oIgotI2lt
cG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW1wb3J0ICJE
T00uaCIKLSNpbXBvcnQgIkRPTURvY3VtZW50SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUVsZW1l
bnRJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKLSNpbXBv
cnQgIkRPTVByaXZhdGUuaCIKLSNpbXBvcnQgIkVsZW1lbnQuaCIKLSNpbXBvcnQgIkZyYW1lLmgi
Ci0jaW1wb3J0ICJIVE1MTmFtZXMuaCIKLSNpbXBvcnQgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNp
bXBvcnQgPEZvdW5kYXRpb24vTlNVUkxfTlNVUkxFeHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi9BU0NJ
SUNUeXBlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKLQotLy8gQWRkaXRpb25hbCBjb250cm9sIFVuaWNvZGUgY2hhcmFjdGVycwotY29u
c3QgdW5pY2hhciBXZWJOZXh0TGluZUNoYXJhY3RlciA9IDB4MDA4NTsKLQotQGludGVyZmFjZSBO
U1RleHRMaXN0IChUZXh0TGlzdFByaXZhdGUpCi0rIChOU0RpY3Rpb25hcnkgKilfc3RhbmRhcmRN
YXJrZXJBdHRyaWJ1dGVzRm9yQXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICopYXR0cnM7Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgTlNUZXh0QXR0YWNobWVudCAoTlNJZ25vcmVPcmllbnRhdGlvbikKLS0g
KHZvaWQpc2V0SWdub3Jlc09yaWVudGF0aW9uOihCT09MKWZsYWc7Ci0tIChCT09MKWlnbm9yZXNP
cmllbnRhdGlvbjsKLUBlbmQKLQotQGludGVyZmFjZSBOU1VSTCAoV2ViRGF0YVVSTCkKLSsgKE5T
VVJMICopX3dlYl91bmlxdWVXZWJEYXRhVVJMOwotKyAoTlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRh
dGFVUkxXaXRoUmVsYXRpdmVTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwotQGVuZAotCi1AaW50
ZXJmYWNlIFdlYkhUTUxDb252ZXJ0ZXIoV2ViSFRNTENvbnZlcnRlclByaXZhdGUpCi0KLS0gKE5T
U3RyaW5nICopX3N0cmluZ0Zvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmlu
ZyAqKWtleTsKLS0gKE5TQ29sb3IgKilfY29sb3JGb3JOb2RlOihET01Ob2RlICopbm9kZSBwcm9w
ZXJ0eTooTlNTdHJpbmcgKilrZXk7Ci0tIChCT09MKV9nZXRGbG9hdDooQ0dGbG9hdCAqKXZhbCBm
b3JOb2RlOihET01Ob2RlICopbm9kZSBwcm9wZXJ0eTooTlNTdHJpbmcgKilrZXk7Ci0tICh2b2lk
KV90cmF2ZXJzZU5vZGU6KERPTU5vZGUgKilub2RlIGRlcHRoOihOU0ludGVnZXIpZGVwdGggZW1i
ZWRkZWQ6KEJPT0wpZW1iZWRkZWQ7Ci0tICh2b2lkKV90cmF2ZXJzZUZvb3Rlck5vZGU6KERPTU5v
ZGUgKilub2RlIGRlcHRoOihOU0ludGVnZXIpZGVwdGg7Ci0KLUBlbmQKLQotLy8gUmV0dXJucyB0
aGUgZm9udCB0byBiZSB1c2VkIGlmIHRoZSBOU0ZvbnRBdHRyaWJ1dGVOYW1lIGRvZXNuJ3QgZXhp
c3QKLXN0YXRpYyBOU0ZvbnQgKldlYkRlZmF1bHRGb250KCkKLXsKLSAgICBzdGF0aWMgTlNGb250
ICpkZWZhdWx0Rm9udCA9IG5pbDsKLSAgICAKLSAgICBpZiAoZGVmYXVsdEZvbnQpCi0gICAgICAg
IHJldHVybiBkZWZhdWx0Rm9udDsKLSAgICAKLSAgICBOU0ZvbnQgKmZvbnQgPSBbTlNGb250IGZv
bnRXaXRoTmFtZTpAIkhlbHZldGljYSIgc2l6ZToxMi4wXTsgICAgCi0gICAgaWYgKCFmb250KQot
ICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjEyLjBdOwotICAgIAotICAg
IGRlZmF1bHRGb250ID0gW2ZvbnQgcmV0YWluXTsKLSAgICAKLSAgICByZXR1cm4gZGVmYXVsdEZv
bnQ7Ci19Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MQ29udmVydGVyCi0KLXN0YXRpYyBOU0Zv
bnQgKl9mb250Rm9yTmFtZUFuZFNpemUoTlNTdHJpbmcgKmZvbnROYW1lLCBDR0Zsb2F0IHNpemUs
IE5TTXV0YWJsZURpY3Rpb25hcnkgKmNhY2hlKQotewotICAgIE5TRm9udE1hbmFnZXIgKmZvbnRN
YW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotICAgIE5TRm9udCAq
Zm9udCA9IFtjYWNoZSBvYmplY3RGb3JLZXk6Zm9udE5hbWVdOwotCi0gICAgaWYgKGZvbnQpIHsK
LSAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpzaXpl
XTsKLSAgICAgICAgcmV0dXJuIGZvbnQ7Ci0gICAgfQotICAgIGZvbnQgPSBbZm9udE1hbmFnZXIg
Zm9udFdpdGhGYW1pbHk6Zm9udE5hbWUgdHJhaXRzOjAgd2VpZ2h0OjAgc2l6ZTpzaXplXTsKLSAg
ICBpZiAoIWZvbnQpIHsKLSAgICAgICAgTlNBcnJheSAqYXZhaWxhYmxlRmFtaWx5TmFtZXMgPSBb
Zm9udE1hbmFnZXIgYXZhaWxhYmxlRm9udEZhbWlsaWVzXTsKLSAgICAgICAgTlNSYW5nZSBkaXZp
ZGluZ1JhbmdlLCBkaXZpZGluZ1NwYWNlUmFuZ2UgPSBbZm9udE5hbWUgcmFuZ2VPZlN0cmluZzpA
IiAiIG9wdGlvbnM6TlNCYWNrd2FyZHNTZWFyY2hdLCBkaXZpZGluZ0Rhc2hSYW5nZSA9IFtmb250
TmFtZSByYW5nZU9mU3RyaW5nOkAiLSIgb3B0aW9uczpOU0JhY2t3YXJkc1NlYXJjaF07Ci0gICAg
ICAgIGRpdmlkaW5nUmFuZ2UgPSAoMCA8IGRpdmlkaW5nU3BhY2VSYW5nZS5sZW5ndGggJiYgMCA8
IGRpdmlkaW5nRGFzaFJhbmdlLmxlbmd0aCkgPyAoZGl2aWRpbmdTcGFjZVJhbmdlLmxvY2F0aW9u
ID4gZGl2aWRpbmdEYXNoUmFuZ2UubG9jYXRpb24gPyBkaXZpZGluZ1NwYWNlUmFuZ2UgOiBkaXZp
ZGluZ0Rhc2hSYW5nZSkgOiAoMCA8IGRpdmlkaW5nU3BhY2VSYW5nZS5sZW5ndGggPyBkaXZpZGlu
Z1NwYWNlUmFuZ2UgOiBkaXZpZGluZ0Rhc2hSYW5nZSk7Ci0gICAgICAgIHdoaWxlICgwIDwgZGl2
aWRpbmdSYW5nZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICpmYW1pbHlOYW1lID0g
W2ZvbnROYW1lIHN1YnN0cmluZ1RvSW5kZXg6ZGl2aWRpbmdSYW5nZS5sb2NhdGlvbl07Ci0gICAg
ICAgICAgICBpZiAoW2F2YWlsYWJsZUZhbWlseU5hbWVzIGNvbnRhaW5zT2JqZWN0OmZhbWlseU5h
bWVdKSB7Ci0gICAgICAgICAgICAgICAgTlNBcnJheSAqZmFtaWx5TWVtYmVyQXJyYXk7Ci0gICAg
ICAgICAgICAgICAgTlNTdHJpbmcgKmZhY2VOYW1lID0gW2ZvbnROYW1lIHN1YnN0cmluZ0Zyb21J
bmRleDooZGl2aWRpbmdSYW5nZS5sb2NhdGlvbiArIGRpdmlkaW5nUmFuZ2UubGVuZ3RoKV07Ci0g
ICAgICAgICAgICAgICAgTlNBcnJheSAqZmFtaWx5TWVtYmVyQXJyYXlzID0gW2ZvbnRNYW5hZ2Vy
IGF2YWlsYWJsZU1lbWJlcnNPZkZvbnRGYW1pbHk6ZmFtaWx5TmFtZV07Ci0gICAgICAgICAgICAg
ICAgTlNFbnVtZXJhdG9yICpmYW1pbHlNZW1iZXJBcnJheXNFbnVtID0gW2ZhbWlseU1lbWJlckFy
cmF5cyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGZhbWlseU1l
bWJlckFycmF5ID0gW2ZhbWlseU1lbWJlckFycmF5c0VudW0gbmV4dE9iamVjdF0pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIE5TU3RyaW5nICpmYW1pbHlNZW1iZXJGYWNlTmFtZSA9IFtmYW1pbHlN
ZW1iZXJBcnJheSBvYmplY3RBdEluZGV4OjFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoW2Zh
bWlseU1lbWJlckZhY2VOYW1lIGNvbXBhcmU6ZmFjZU5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNp
dGl2ZVNlYXJjaF0gPT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
TlNGb250VHJhaXRNYXNrIHRyYWl0cyA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRl
eDozXSBpbnRlZ2VyVmFsdWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgTlNJbnRlZ2VyIHdl
aWdodCA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDoyXSBpbnRlZ2VyVmFsdWVd
OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBmb250V2l0aEZh
bWlseTpmYW1pbHlOYW1lIHRyYWl0czp0cmFpdHMgd2VpZ2h0OndlaWdodCBzaXplOnNpemVdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFmb250KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICgwIDwgW2ZhbWlseU1lbWJlckFycmF5cyBjb3VudF0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE5TQXJyYXkgKmZhbWlseU1lbWJlckFycmF5ID0gW2ZhbWlseU1lbWJl
ckFycmF5cyBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgICAgICAgICAgICAgTlNGb250
VHJhaXRNYXNrIHRyYWl0cyA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDozXSBp
bnRlZ2VyVmFsdWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgTlNJbnRlZ2VyIHdlaWdodCA9
IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDoyXSBpbnRlZ2VyVmFsdWVdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBmb250V2l0aEZhbWlseTpm
YW1pbHlOYW1lIHRyYWl0czp0cmFpdHMgd2VpZ2h0OndlaWdodCBzaXplOnNpemVdOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkaXZpZGluZ1NwYWNlUmFu
Z2UgPSBbZmFtaWx5TmFtZSByYW5nZU9mU3RyaW5nOkAiICIgb3B0aW9uczpOU0JhY2t3YXJkc1Nl
YXJjaF07Ci0gICAgICAgICAgICAgICAgZGl2aWRpbmdEYXNoUmFuZ2UgPSBbZmFtaWx5TmFtZSBy
YW5nZU9mU3RyaW5nOkAiLSIgb3B0aW9uczpOU0JhY2t3YXJkc1NlYXJjaF07Ci0gICAgICAgICAg
ICAgICAgZGl2aWRpbmdSYW5nZSA9ICgwIDwgZGl2aWRpbmdTcGFjZVJhbmdlLmxlbmd0aCAmJiAw
IDwgZGl2aWRpbmdEYXNoUmFuZ2UubGVuZ3RoKSA/IChkaXZpZGluZ1NwYWNlUmFuZ2UubG9jYXRp
b24gPiBkaXZpZGluZ0Rhc2hSYW5nZS5sb2NhdGlvbiA/IGRpdmlkaW5nU3BhY2VSYW5nZSA6IGRp
dmlkaW5nRGFzaFJhbmdlKSA6ICgwIDwgZGl2aWRpbmdTcGFjZVJhbmdlLmxlbmd0aCA/IGRpdmlk
aW5nU3BhY2VSYW5nZSA6IGRpdmlkaW5nRGFzaFJhbmdlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAoIWZvbnQpIGZvbnQgPSBbTlNGb250IGZvbnRXaXRoTmFtZTpA
IlRpbWVzIiBzaXplOnNpemVdOwotICAgIGlmICghZm9udCkgZm9udCA9IFtOU0ZvbnQgdXNlckZv
bnRPZlNpemU6c2l6ZV07Ci0gICAgaWYgKCFmb250KSBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZl
cnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnNpemVdOwotICAgIGlmICghZm9udCkgZm9u
dCA9IFdlYkRlZmF1bHRGb250KCk7Ci0gICAgW2NhY2hlIHNldE9iamVjdDpmb250IGZvcktleTpm
b250TmFtZV07Ci0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLSsgKE5TUGFyYWdyYXBoU3R5bGUgKilk
ZWZhdWx0UGFyYWdyYXBoU3R5bGUKLXsKLSAgICBzdGF0aWMgTlNNdXRhYmxlUGFyYWdyYXBoU3R5
bGUgKmRlZmF1bHRQYXJhZ3JhcGhTdHlsZSA9IG5pbDsKLSAgICBpZiAoIWRlZmF1bHRQYXJhZ3Jh
cGhTdHlsZSkgewotICAgICAgICBkZWZhdWx0UGFyYWdyYXBoU3R5bGUgPSBbW05TUGFyYWdyYXBo
U3R5bGUgZGVmYXVsdFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV07Ci0gICAgICAgIFtkZWZh
dWx0UGFyYWdyYXBoU3R5bGUgc2V0RGVmYXVsdFRhYkludGVydmFsOjM2LjBdOwotICAgICAgICBb
ZGVmYXVsdFBhcmFncmFwaFN0eWxlIHNldFRhYlN0b3BzOltOU0FycmF5IGFycmF5XV07Ci0gICAg
fQotICAgIHJldHVybiBkZWZhdWx0UGFyYWdyYXBoU3R5bGU7Ci19Ci0KLS0gKE5TQXJyYXkgKilf
Y2hpbGRyZW5Gb3JOb2RlOihET01Ob2RlICopbm9kZQotewotICAgIE5TTXV0YWJsZUFycmF5ICph
cnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgRE9NTm9kZSAqY2hpbGQgPSBbbm9k
ZSBmaXJzdENoaWxkXTsKLSAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgW2FycmF5IGFkZE9i
amVjdDpjaGlsZF07Ci0gICAgICAgIGNoaWxkID0gW2NoaWxkIG5leHRTaWJsaW5nXTsKLSAgICB9
Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi0tIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX2Nv
bXB1dGVkU3R5bGVGb3JFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAotewotICAgIERPTURv
Y3VtZW50ICpkb2N1bWVudCA9IFtlbGVtZW50IG93bmVyRG9jdW1lbnRdOwotICAgIERPTUNTU1N0
eWxlRGVjbGFyYXRpb24gKnJlc3VsdCA9IG5pbDsKLSAgICByZXN1bHQgPSBbX2NvbXB1dGVkU3R5
bGVzRm9yRWxlbWVudHMgb2JqZWN0Rm9yS2V5OmVsZW1lbnRdOwotICAgIGlmIChyZXN1bHQpIHsK
LSAgICAgICAgaWYgKFtbTlNOdWxsIG51bGxdIGlzRXF1YWw6cmVzdWx0XSkgcmVzdWx0ID0gbmls
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IFtkb2N1bWVudCBnZXRDb21wdXRlZFN0
eWxlOmVsZW1lbnQgcHNldWRvRWxlbWVudDpAIiJdIDsKLSAgICAgICAgW19jb21wdXRlZFN0eWxl
c0ZvckVsZW1lbnRzIHNldE9iamVjdDoocmVzdWx0ID8gKGlkKXJlc3VsdCA6IChpZClbTlNOdWxs
IG51bGxdKSBmb3JLZXk6ZWxlbWVudF07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3BlY2lmaWVkU3R5bGVGb3JFbGVtZW50OihE
T01FbGVtZW50ICopZWxlbWVudAotewotICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnJlc3Vs
dCA9IFtfc3BlY2lmaWVkU3R5bGVzRm9yRWxlbWVudHMgb2JqZWN0Rm9yS2V5OmVsZW1lbnRdOwot
ICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgaWYgKFtbTlNOdWxsIG51bGxdIGlzRXF1YWw6cmVz
dWx0XSkgcmVzdWx0ID0gbmlsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IFtlbGVt
ZW50IHN0eWxlXTsKLSAgICAgICAgW19zcGVjaWZpZWRTdHlsZXNGb3JFbGVtZW50cyBzZXRPYmpl
Y3Q6KHJlc3VsdCA/IChpZClyZXN1bHQgOiAoaWQpW05TTnVsbCBudWxsXSkgZm9yS2V5OmVsZW1l
bnRdOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChOU1N0cmluZyAqKV9jb21w
dXRlZFN0cmluZ0Zvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtl
eQotewotICAgIE5TU3RyaW5nICpyZXN1bHQgPSBuaWw7Ci0gICAgQk9PTCBpbmhlcml0ID0gWUVT
OwotICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7ICAgIAotICAg
IGlmIChlbGVtZW50ICYmIFtlbGVtZW50IG5vZGVUeXBlXSA9PSBET01fRUxFTUVOVF9OT0RFKSB7
Ci0gICAgICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKmNvbXB1dGVkU3R5bGUsICpzcGVjaWZp
ZWRTdHlsZTsKLSAgICAgICAgaW5oZXJpdCA9IE5POwotICAgICAgICBpZiAoIXJlc3VsdCAmJiAo
Y29tcHV0ZWRTdHlsZSA9IFtzZWxmIF9jb21wdXRlZFN0eWxlRm9yRWxlbWVudDplbGVtZW50XSkp
IHsKLSAgICAgICAgICAgIERPTUNTU1ByaW1pdGl2ZVZhbHVlICpjb21wdXRlZFZhbHVlID0gKERP
TUNTU1ByaW1pdGl2ZVZhbHVlICopW2NvbXB1dGVkU3R5bGUgZ2V0UHJvcGVydHlDU1NWYWx1ZTpr
ZXldOwotICAgICAgICAgICAgaWYgKGNvbXB1dGVkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCB2YWx1ZVR5cGUgPSBbY29tcHV0ZWRWYWx1ZSBjc3NWYWx1ZVR5cGVdOwot
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19QUklNSVRJVkVfVkFMVUUp
IHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSA9IFtj
b21wdXRlZFZhbHVlIHByaW1pdGl2ZVR5cGVdOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVHlwZSA9PSBET01fQ1NTX1NUUklORyB8fCBwcmltaXRpdmVUeXBlID09IERPTV9DU1Nf
VVJJIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19JREVOVCB8fCBwcmltaXRpdmVUeXBlID09
IERPTV9DU1NfQVRUUikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW2NvbXB1
dGVkVmFsdWUgZ2V0U3RyaW5nVmFsdWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCAmJiBbcmVzdWx0IGxlbmd0aF0gPT0gMCkgcmVzdWx0ID0gbmlsOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NT
U19WQUxVRV9MSVNUKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtjb21wdXRlZFN0
eWxlIGdldFByb3BlcnR5VmFsdWU6a2V5XTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZXN1bHQgJiYgKHNwZWNpZmllZFN0eWxlID0g
W3NlbGYgX3NwZWNpZmllZFN0eWxlRm9yRWxlbWVudDplbGVtZW50XSkpIHsKLSAgICAgICAgICAg
IERPTUNTU1ByaW1pdGl2ZVZhbHVlICpzcGVjaWZpZWRWYWx1ZSA9IChET01DU1NQcmltaXRpdmVW
YWx1ZSAqKVtzcGVjaWZpZWRTdHlsZSBnZXRQcm9wZXJ0eUNTU1ZhbHVlOmtleV07Ci0gICAgICAg
ICAgICBpZiAoc3BlY2lmaWVkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCB2YWx1ZVR5cGUgPSBbc3BlY2lmaWVkVmFsdWUgY3NzVmFsdWVUeXBlXTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfUFJJTUlUSVZFX1ZBTFVFKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSBbc3BlY2lmaWVkVmFs
dWUgcHJpbWl0aXZlVHlwZV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBl
ID09IERPTV9DU1NfU1RSSU5HIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19VUkkgfHwgcHJp
bWl0aXZlVHlwZSA9PSBET01fQ1NTX0lERU5UIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19B
VFRSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbc3BlY2lmaWVkVmFsdWUg
Z2V0U3RyaW5nVmFsdWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBb
cmVzdWx0IGxlbmd0aF0gPT0gMCkgcmVzdWx0ID0gbmlsOwotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gPz8/IGhhY2sgYWxlcnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW3NwZWNpZmllZFN0eWxl
IGdldFByb3BlcnR5VmFsdWU6a2V5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09
IERPTV9DU1NfSU5IRVJJVCkgewotICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gWUVTOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfVkFMVUVfTElT
VCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbc3BlY2lmaWVkU3R5bGUgZ2V0UHJv
cGVydHlWYWx1ZTprZXldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgRWxlbWVudCogY29yZUVs
ZW1lbnQgPSBjb3JlKGVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKFtAImRpc3BsYXkiIGlzRXF1
YWxUb1N0cmluZzprZXldKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKGhlYWRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHNjcmlwdFRhZykgfHwg
Y29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFn
TmFtZShub2ZyYW1lc1RhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAibm9uZSI7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoYWRkcmVz
c1RhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykgfHwgY29yZUVs
ZW1lbnQtPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoY2Vu
dGVyVGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKGRkVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShkaXJUYWcpIHx8IGNvcmVFbGVt
ZW50LT5oYXNUYWdOYW1lKGRpdlRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZGxUYWcp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZHRU
YWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSB8fCBjb3JlRWxlbWVu
dC0+aGFzVGFnTmFtZShmb3JtVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRh
ZykKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShm
cmFtZXNldFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaHJUYWcpIHx8IGNvcmVFbGVt
ZW50LT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGgxVGFn
KQotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGgy
VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShoM1RhZykgfHwgY29yZUVsZW1lbnQtPmhh
c1RhZ05hbWUoaDRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGg1VGFnKQotICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGg2VGFnKSB8fCBj
b3JlRWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKG1lbnVUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKG5vc2NyaXB0VGFnKQotICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKG9sVGFnKSB8
fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShwVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZShwcmVUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQCJibG9jayI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29y
ZUVsZW1lbnQtPmhhc1RhZ05hbWUobGlUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBAImxpc3QtaXRlbSI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhh
c1RhZ05hbWUodGFibGVUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAInRhYmxl
IjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0clRh
ZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAidGFibGUtcm93IjsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykgfHwgY29yZUVs
ZW1lbnQtPmhhc1RhZ05hbWUodGRUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBA
InRhYmxlLWNlbGwiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKHRoZWFkVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZS1o
ZWFkZXItZ3JvdXAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKHRib2R5VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZS1y
b3ctZ3JvdXAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKHRmb290VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZS1mb290
ZXItZ3JvdXAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKGNvbFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAidGFibGUtY29sdW1u
IjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShjb2xn
cm91cFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAidGFibGUtY29sdW1uLWdy
b3VwIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShj
YXB0aW9uVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZS1jYXB0aW9u
IjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoW0Aid2hpdGUtc3BhY2UiIGlzRXF1YWxUb1N0cmlu
ZzprZXldKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHBy
ZVRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAicHJlIjsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKFtAImZvbnQtc3R5bGUiIGlzRXF1YWxUb1N0cmluZzprZXldKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGlUYWcpIHx8IGNvcmVFbGVt
ZW50LT5oYXNUYWdOYW1lKGNpdGVUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGVtVGFn
KSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh2YXJUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKGFkZHJlc3NUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAIml0YWxp
YyI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0g
WUVTOwotICAgICAgICAgICAgfSBlbHNlIGlmIChbQCJmb250LXdlaWdodCIgaXNFcXVhbFRvU3Ry
aW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUo
YlRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoc3Ryb25nVGFnKSB8fCBjb3JlRWxlbWVu
dC0+aGFzVGFnTmFtZSh0aFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAiYm9s
ZGVyIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGluaGVyaXQg
PSBZRVM7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFtAInRleHQtZGVjb3JhdGlvbiIgaXNFcXVh
bFRvU3RyaW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1Rh
Z05hbWUodVRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoaW5zVGFnKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gQCJ1bmRlcmxpbmUiOwotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHNUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKHN0cmlrZVRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZGVsVGFnKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJsaW5lLXRocm91Z2giOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsgLy8gPz8/IHRoaXMgaXMg
bm90IHN0cmljdGx5IGNvcnJlY3QKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoW0AidGV4dC1hbGln
biIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1l
bnQtPmhhc1RhZ05hbWUoY2VudGVyVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShjYXB0
aW9uVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZykpCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEAiY2VudGVyIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFtAInZl
cnRpY2FsLWFsaWduIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSkgewotICAgICAgICAgICAgICAgIGlm
IChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShzdXBUYWcpKQotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBAInN1cGVyIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZShzdWJUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAInN1YiI7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGhlYWRU
YWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRib2R5VGFnKSB8fCBjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZSh0Zm9vdFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAibWlk
ZGxlIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0
clRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGhUYWcpIHx8IGNvcmVFbGVtZW50LT5o
YXNUYWdOYW1lKHRkVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoW0AiZm9udC1mYW1pbHkiIGlzRXF1YWxUb1N0cmluZzprZXld
IHx8IFtAImZvbnQtdmFyaWFudCIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0AiZm9udC1lZmZl
Y3QiIGlzRXF1YWxUb1N0cmluZzprZXldCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IFtAInRl
eHQtdHJhbnNmb3JtIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJ0ZXh0LXNoYWRvdyIgaXNF
cXVhbFRvU3RyaW5nOmtleV0gfHwgW0AidmlzaWJpbGl0eSIgaXNFcXVhbFRvU3RyaW5nOmtleV0K
LSAgICAgICAgICAgICAgICAgICAgICAgfHwgW0AiYm9yZGVyLWNvbGxhcHNlIiBpc0VxdWFsVG9T
dHJpbmc6a2V5XSB8fCBbQCJlbXB0eS1jZWxscyIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0Ai
d29yZC1zcGFjaW5nIiBpc0VxdWFsVG9TdHJpbmc6a2V5XQotICAgICAgICAgICAgICAgICAgICAg
ICB8fCBbQCJsaXN0LXN0eWxlLXR5cGUiIGlzRXF1YWxUb1N0cmluZzprZXldIHx8IFtAImRpcmVj
dGlvbiIgaXNFcXVhbFRvU3RyaW5nOmtleV0pIHsKLSAgICAgICAgICAgICAgICBpbmhlcml0ID0g
WUVTOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghcmVzdWx0ICYm
IGluaGVyaXQpIHsKLSAgICAgICAgRE9NTm9kZSAqcGFyZW50Tm9kZSA9IFtub2RlIHBhcmVudE5v
ZGVdOwotICAgICAgICBpZiAocGFyZW50Tm9kZSkgcmVzdWx0ID0gW3NlbGYgX3N0cmluZ0Zvck5v
ZGU6cGFyZW50Tm9kZSBwcm9wZXJ0eTprZXldOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0ID8g
W3Jlc3VsdCBsb3dlcmNhc2VTdHJpbmddIDogbmlsOwotfQotCi0tIChOU1N0cmluZyAqKV9zdHJp
bmdGb3JOb2RlOihET01Ob2RlICopbm9kZSBwcm9wZXJ0eTooTlNTdHJpbmcgKilrZXkKLXsKLSAg
ICBOU1N0cmluZyAqcmVzdWx0ID0gbmlsOwotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJp
YnV0ZURpY3Rpb25hcnkgPSBbX3N0cmluZ3NGb3JOb2RlcyBvYmplY3RGb3JLZXk6bm9kZV07Ci0g
ICAgaWYgKCFhdHRyaWJ1dGVEaWN0aW9uYXJ5KSB7Ci0gICAgICAgIGF0dHJpYnV0ZURpY3Rpb25h
cnkgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICBbX3N0cmlu
Z3NGb3JOb2RlcyBzZXRPYmplY3Q6YXR0cmlidXRlRGljdGlvbmFyeSBmb3JLZXk6bm9kZV07Ci0g
ICAgICAgIFthdHRyaWJ1dGVEaWN0aW9uYXJ5IHJlbGVhc2VdOwotICAgIH0KLSAgICByZXN1bHQg
PSBbYXR0cmlidXRlRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XTsKLSAgICBpZiAocmVzdWx0
KSB7Ci0gICAgICAgIGlmIChbQCIiIGlzRXF1YWxUb1N0cmluZzpyZXN1bHRdKSByZXN1bHQgPSBu
aWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gW3NlbGYgX2NvbXB1dGVkU3RyaW5n
Rm9yTm9kZTpub2RlIHByb3BlcnR5OmtleV07Ci0gICAgICAgIFthdHRyaWJ1dGVEaWN0aW9uYXJ5
IHNldE9iamVjdDoocmVzdWx0ID8gcmVzdWx0IDogQCIiKSBmb3JLZXk6a2V5XTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBCT09MIF9nZXRGbG9hdChET01D
U1NQcmltaXRpdmVWYWx1ZSAqcHJpbWl0aXZlVmFsdWUsIENHRmxvYXQgKnZhbCkKLXsKLSAgICBp
ZiAoIXZhbCkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHN3aXRjaCAoW3ByaW1pdGl2ZVZhbHVl
IHByaW1pdGl2ZVR5cGVdKSB7Ci0gICAgICAgIGNhc2UgRE9NX0NTU19QWDoKLSAgICAgICAgICAg
ICp2YWwgPSBbcHJpbWl0aXZlVmFsdWUgZ2V0RmxvYXRWYWx1ZTpET01fQ1NTX1BYXTsKLSAgICAg
ICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIGNhc2UgRE9NX0NTU19QVDoKLSAgICAgICAgICAg
ICp2YWwgPSA0LjAgKiBbcHJpbWl0aXZlVmFsdWUgZ2V0RmxvYXRWYWx1ZTpET01fQ1NTX1BUXSAv
IDMuMDsKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIGNhc2UgRE9NX0NTU19QQzoK
LSAgICAgICAgICAgICp2YWwgPSAxNi4wICogW3ByaW1pdGl2ZVZhbHVlIGdldEZsb2F0VmFsdWU6
RE9NX0NTU19QQ107Ci0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAgICAgICBjYXNlIERPTV9D
U1NfQ006Ci0gICAgICAgICAgICAqdmFsID0gOTYuMCAqIFtwcmltaXRpdmVWYWx1ZSBnZXRGbG9h
dFZhbHVlOkRPTV9DU1NfQ01dIC8gMi41NDsKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAg
ICAgIGNhc2UgRE9NX0NTU19NTToKLSAgICAgICAgICAgICp2YWwgPSA5Ni4wICogW3ByaW1pdGl2
ZVZhbHVlIGdldEZsb2F0VmFsdWU6RE9NX0NTU19NTV0gLyAyNS40OwotICAgICAgICAgICAgcmV0
dXJuIFlFUzsKLSAgICAgICAgY2FzZSBET01fQ1NTX0lOOgotICAgICAgICAgICAgKnZhbCA9IDk2
LjAgKiBbcHJpbWl0aXZlVmFsdWUgZ2V0RmxvYXRWYWx1ZTpET01fQ1NTX0lOXTsKLSAgICAgICAg
ICAgIHJldHVybiBZRVM7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTk87
Ci0gICAgfQotfQotCi0tIChCT09MKV9nZXRDb21wdXRlZEZsb2F0OihDR0Zsb2F0ICopdmFsIGZv
ck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleQotewotICAgIEJP
T0wgcmVzdWx0ID0gTk8sIGluaGVyaXQgPSBZRVM7Ci0gICAgQ0dGbG9hdCBmbG9hdFZhbCA9IDAu
MDsKLSAgICBET01FbGVtZW50ICplbGVtZW50ID0gKERPTUVsZW1lbnQgKilub2RlOyAgICAKLSAg
ICBpZiAoZWxlbWVudCAmJiBbZWxlbWVudCBub2RlVHlwZV0gPT0gRE9NX0VMRU1FTlRfTk9ERSkg
ewotICAgICAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpjb21wdXRlZFN0eWxlLCAqc3BlY2lm
aWVkU3R5bGU7Ci0gICAgICAgIGluaGVyaXQgPSBOTzsKLSAgICAgICAgaWYgKCFyZXN1bHQgJiYg
KGNvbXB1dGVkU3R5bGUgPSBbc2VsZiBfY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQ6ZWxlbWVudF0p
KSB7Ci0gICAgICAgICAgICBET01DU1NQcmltaXRpdmVWYWx1ZSAqY29tcHV0ZWRWYWx1ZSA9IChE
T01DU1NQcmltaXRpdmVWYWx1ZSAqKVtjb21wdXRlZFN0eWxlIGdldFByb3BlcnR5Q1NTVmFsdWU6
a2V5XTsKLSAgICAgICAgICAgIGlmIChjb21wdXRlZFZhbHVlICYmIFtjb21wdXRlZFZhbHVlIGNz
c1ZhbHVlVHlwZV0gPT0gRE9NX0NTU19QUklNSVRJVkVfVkFMVUUpIHsKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBfZ2V0RmxvYXQoY29tcHV0ZWRWYWx1ZSwgJmZsb2F0VmFsKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIXJlc3VsdCAmJiAoc3BlY2lmaWVkU3R5bGUg
PSBbc2VsZiBfc3BlY2lmaWVkU3R5bGVGb3JFbGVtZW50OmVsZW1lbnRdKSkgewotICAgICAgICAg
ICAgRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKnNwZWNpZmllZFZhbHVlID0gKERPTUNTU1ByaW1pdGl2
ZVZhbHVlICopW3NwZWNpZmllZFN0eWxlIGdldFByb3BlcnR5Q1NTVmFsdWU6a2V5XTsKLSAgICAg
ICAgICAgIGlmIChzcGVjaWZpZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IHZhbHVlVHlwZSA9IFtzcGVjaWZpZWRWYWx1ZSBjc3NWYWx1ZVR5cGVdOwotICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19QUklNSVRJVkVfVkFMVUUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gX2dldEZsb2F0KHNwZWNpZmllZFZhbHVlLCAmZmxvYXRW
YWwpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfSU5I
RVJJVCkgewotICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gWUVTOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIXJlc3VsdCkgewot
ICAgICAgICAgICAgaWYgKFtAInRleHQtaW5kZW50IiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBb
QCJsZXR0ZXItc3BhY2luZyIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0Aid29yZC1zcGFjaW5n
IiBpc0VxdWFsVG9TdHJpbmc6a2V5XQotICAgICAgICAgICAgICAgIHx8IFtAImxpbmUtaGVpZ2h0
IiBpc0VxdWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJ3aWRvd3MiIGlzRXF1YWxUb1N0cmluZzprZXld
IHx8IFtAIm9ycGhhbnMiIGlzRXF1YWxUb1N0cmluZzprZXldKQotICAgICAgICAgICAgICAgIGlu
aGVyaXQgPSBZRVM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFyZXN1bHQgJiYgaW5oZXJp
dCkgewotICAgICAgICBET01Ob2RlICpwYXJlbnROb2RlID0gW25vZGUgcGFyZW50Tm9kZV07Ci0g
ICAgICAgIGlmIChwYXJlbnROb2RlKSByZXN1bHQgPSBbc2VsZiBfZ2V0RmxvYXQ6JmZsb2F0VmFs
IGZvck5vZGU6cGFyZW50Tm9kZSBwcm9wZXJ0eTprZXldOwotICAgIH0KLSAgICBpZiAocmVzdWx0
ICYmIHZhbCkKLSAgICAgICAgKnZhbCA9IGZsb2F0VmFsOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLS0gKEJPT0wpX2dldEZsb2F0OihDR0Zsb2F0ICopdmFsIGZvck5vZGU6KERPTU5vZGUgKilu
b2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleQotewotICAgIEJPT0wgcmVzdWx0ID0gTk87Ci0g
ICAgQ0dGbG9hdCBmbG9hdFZhbCA9IDAuMDsKLSAgICBOU051bWJlciAqZmxvYXROdW1iZXI7Ci0g
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cmlidXRlRGljdGlvbmFyeSA9IFtfZmxvYXRzRm9y
Tm9kZXMgb2JqZWN0Rm9yS2V5Om5vZGVdOwotICAgIGlmICghYXR0cmlidXRlRGljdGlvbmFyeSkg
ewotICAgICAgICBhdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0XTsKLSAgICAgICAgW19mbG9hdHNGb3JOb2RlcyBzZXRPYmplY3Q6YXR0cmlidXRl
RGljdGlvbmFyeSBmb3JLZXk6bm9kZV07Ci0gICAgICAgIFthdHRyaWJ1dGVEaWN0aW9uYXJ5IHJl
bGVhc2VdOwotICAgIH0KLSAgICBmbG9hdE51bWJlciA9IFthdHRyaWJ1dGVEaWN0aW9uYXJ5IG9i
amVjdEZvcktleTprZXldOwotICAgIGlmIChmbG9hdE51bWJlcikgewotICAgICAgICBpZiAoIVtb
TlNOdWxsIG51bGxdIGlzRXF1YWw6ZmxvYXROdW1iZXJdKSB7Ci0gICAgICAgICAgICByZXN1bHQg
PSBZRVM7Ci0gICAgICAgICAgICBmbG9hdFZhbCA9IFtmbG9hdE51bWJlciBkb3VibGVWYWx1ZV07
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBbc2VsZiBfZ2V0Q29t
cHV0ZWRGbG9hdDomZmxvYXRWYWwgZm9yTm9kZTpub2RlIHByb3BlcnR5OmtleV07Ci0gICAgICAg
IFthdHRyaWJ1dGVEaWN0aW9uYXJ5IHNldE9iamVjdDoocmVzdWx0ID8gKGlkKVtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOmZsb2F0VmFsXSA6IChpZClbTlNOdWxsIG51bGxdKSBmb3JLZXk6a2V5
XTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCAmJiB2YWwpICp2YWwgPSBmbG9hdFZhbDsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIE5TQ29sb3IgKl9jb2xvckZvclJHQkNv
bG9yKERPTVJHQkNvbG9yICpkb21SR0JDb2xvciwgQk9PTCBpZ25vcmVCbGFjaykKLXsKLSAgICBO
U0NvbG9yICpjb2xvciA9IFtkb21SR0JDb2xvciBfY29sb3JdOwotICAgIE5TQ29sb3JTcGFjZSAq
Y29sb3JTcGFjZSA9IFtjb2xvciBjb2xvclNwYWNlXTsKLSAgICBjb25zdCBDR0Zsb2F0IENvbG9y
RXBzaWxvbiA9IDEgLyAoMiAqIDI1NS4wKTsKLSAgICAKLSAgICBpZiAoY29sb3IpIHsKLSAgICAg
ICAgaWYgKFtjb2xvclNwYWNlIGlzRXF1YWw6W05TQ29sb3JTcGFjZSBnZW5lcmljR3JheUNvbG9y
U3BhY2VdXSB8fCBbY29sb3JTcGFjZSBpc0VxdWFsOltOU0NvbG9yU3BhY2UgZGV2aWNlR3JheUNv
bG9yU3BhY2VdXSkgewotICAgICAgICAgICAgQ0dGbG9hdCB3aGl0ZSwgYWxwaGE7Ci0gICAgICAg
ICAgICBbY29sb3IgZ2V0V2hpdGU6JndoaXRlIGFscGhhOiZhbHBoYV07Ci0gICAgICAgICAgICBp
ZiAod2hpdGUgPCBDb2xvckVwc2lsb24gJiYgKGlnbm9yZUJsYWNrIHx8IGFscGhhIDwgQ29sb3JF
cHNpbG9uKSkgY29sb3IgPSBuaWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOU0Nv
bG9yICpyZ2JDb2xvciA9IG5pbDsKLSAgICAgICAgICAgIGlmIChbY29sb3JTcGFjZSBpc0VxdWFs
OltOU0NvbG9yU3BhY2UgZ2VuZXJpY1JHQkNvbG9yU3BhY2VdXSB8fCBbY29sb3JTcGFjZSBpc0Vx
dWFsOltOU0NvbG9yU3BhY2UgZGV2aWNlUkdCQ29sb3JTcGFjZV1dKSByZ2JDb2xvciA9IGNvbG9y
OwotICAgICAgICAgICAgaWYgKCFyZ2JDb2xvcikgcmdiQ29sb3IgPSBbY29sb3IgY29sb3JVc2lu
Z0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAgICAgICAgICBpZiAo
cmdiQ29sb3IpIHsKLSAgICAgICAgICAgICAgICBDR0Zsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhOwotICAgICAgICAgICAgICAgIFtyZ2JDb2xvciBnZXRSZWQ6JnJlZCBncmVlbjomZ3JlZW4g
Ymx1ZTomYmx1ZSBhbHBoYTomYWxwaGFdOwotICAgICAgICAgICAgICAgIGlmIChyZWQgPCBDb2xv
ckVwc2lsb24gJiYgZ3JlZW4gPCBDb2xvckVwc2lsb24gJiYgYmx1ZSA8IENvbG9yRXBzaWxvbiAm
JiAoaWdub3JlQmxhY2sgfHwgYWxwaGEgPCBDb2xvckVwc2lsb24pKSBjb2xvciA9IG5pbDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY29sb3I7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgTlNTaGFkb3cgKl9zaGFkb3dGb3JTaGFkb3dTdHlsZShOU1N0cmluZyAqc2hh
ZG93U3R5bGUpCi17Ci0gICAgTlNTaGFkb3cgKnNoYWRvdyA9IG5pbDsKLSAgICBOU1VJbnRlZ2Vy
IHNoYWRvd1N0eWxlTGVuZ3RoID0gW3NoYWRvd1N0eWxlIGxlbmd0aF07Ci0gICAgTlNSYW5nZSBv
cGVuUGFyZW5SYW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAiKCJdLCBjbG9zZVBh
cmVuUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIikiXSwgZmlyc3RSYW5nZSA9
IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApLCBzZWNvbmRSYW5nZSA9IE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApLCB0aGlyZFJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCksIHNw
YWNlUmFuZ2U7Ci0gICAgaWYgKG9wZW5QYXJlblJhbmdlLmxlbmd0aCA+IDAgJiYgY2xvc2VQYXJl
blJhbmdlLmxlbmd0aCA+IDAgJiYgTlNNYXhSYW5nZShvcGVuUGFyZW5SYW5nZSkgPCBjbG9zZVBh
cmVuUmFuZ2UubG9jYXRpb24pIHsKLSAgICAgICAgTlNBcnJheSAqY29tcG9uZW50cyA9IFtbc2hh
ZG93U3R5bGUgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJhbmdlKE5TTWF4UmFuZ2Uob3BlblBh
cmVuUmFuZ2UpLCBjbG9zZVBhcmVuUmFuZ2UubG9jYXRpb24gLSBOU01heFJhbmdlKG9wZW5QYXJl
blJhbmdlKSldIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiwiXTsKLSAgICAgICAgaWYg
KFtjb21wb25lbnRzIGNvdW50XSA+PSAzKSB7Ci0gICAgICAgICAgICBDR0Zsb2F0IHJlZCA9IFtb
Y29tcG9uZW50cyBvYmplY3RBdEluZGV4OjBdIGZsb2F0VmFsdWVdIC8gMjU1LjAsIGdyZWVuID0g
W1tjb21wb25lbnRzIG9iamVjdEF0SW5kZXg6MV0gZmxvYXRWYWx1ZV0gLyAyNTUuMCwgYmx1ZSA9
IFtbY29tcG9uZW50cyBvYmplY3RBdEluZGV4OjJdIGZsb2F0VmFsdWVdIC8gMjU1LjAsIGFscGhh
ID0gKFtjb21wb25lbnRzIGNvdW50XSA+PSA0KSA/IFtbY29tcG9uZW50cyBvYmplY3RBdEluZGV4
OjNdIGZsb2F0VmFsdWVdIC8gMjU1LjAgOiAxLjA7Ci0gICAgICAgICAgICBOU0NvbG9yICpzaGFk
b3dDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aENhbGlicmF0ZWRSZWQ6cmVkIGdyZWVuOmdyZWVu
IGJsdWU6Ymx1ZSBhbHBoYTphbHBoYV07Ci0gICAgICAgICAgICBOU1NpemUgc2hhZG93T2Zmc2V0
OwotICAgICAgICAgICAgQ0dGbG9hdCBzaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAgICAgZmly
c3RSYW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAicHgiXTsKLSAgICAgICAgICAg
IGlmIChmaXJzdFJhbmdlLmxlbmd0aCA+IDAgJiYgTlNNYXhSYW5nZShmaXJzdFJhbmdlKSA8IHNo
YWRvd1N0eWxlTGVuZ3RoKSBzZWNvbmRSYW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5n
OkAicHgiIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKGZpcnN0UmFuZ2Up
LCBzaGFkb3dTdHlsZUxlbmd0aCAtIE5TTWF4UmFuZ2UoZmlyc3RSYW5nZSkpXTsKLSAgICAgICAg
ICAgIGlmIChzZWNvbmRSYW5nZS5sZW5ndGggPiAwICYmIE5TTWF4UmFuZ2Uoc2Vjb25kUmFuZ2Up
IDwgc2hhZG93U3R5bGVMZW5ndGgpIHRoaXJkUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0
cmluZzpAInB4IiBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoTlNNYXhSYW5nZShzZWNvbmRS
YW5nZSksIHNoYWRvd1N0eWxlTGVuZ3RoIC0gTlNNYXhSYW5nZShzZWNvbmRSYW5nZSkpXTsKLSAg
ICAgICAgICAgIGlmIChmaXJzdFJhbmdlLmxvY2F0aW9uID4gMCAmJiBmaXJzdFJhbmdlLmxlbmd0
aCA+IDAgJiYgc2Vjb25kUmFuZ2UubGVuZ3RoID4gMCAmJiB0aGlyZFJhbmdlLmxlbmd0aCA+IDAp
IHsKLSAgICAgICAgICAgICAgICBzcGFjZVJhbmdlID0gW3NoYWRvd1N0eWxlIHJhbmdlT2ZTdHJp
bmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNoIHJhbmdlOk5TTWFrZVJhbmdlKDAsIGZp
cnN0UmFuZ2UubG9jYXRpb24pXTsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VSYW5nZS5sZW5n
dGggPT0gMCkgc3BhY2VSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDApOwotICAgICAgICAgICAgICAg
IHNoYWRvd09mZnNldC53aWR0aCA9IFtbc2hhZG93U3R5bGUgc3Vic3RyaW5nV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKE5TTWF4UmFuZ2Uoc3BhY2VSYW5nZSksIGZpcnN0UmFuZ2UubG9jYXRpb24gLSBO
U01heFJhbmdlKHNwYWNlUmFuZ2UpKV0gZmxvYXRWYWx1ZV07Ci0gICAgICAgICAgICAgICAgc3Bh
Y2VSYW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAiICIgb3B0aW9uczpOU0JhY2t3
YXJkc1NlYXJjaCByYW5nZTpOU01ha2VSYW5nZSgwLCBzZWNvbmRSYW5nZS5sb2NhdGlvbildOwot
ICAgICAgICAgICAgICAgIGlmIChzcGFjZVJhbmdlLmxlbmd0aCA9PSAwKSBzcGFjZVJhbmdlID0g
TlNNYWtlUmFuZ2UoMCwgMCk7Ci0gICAgICAgICAgICAgICAgc2hhZG93T2Zmc2V0LmhlaWdodCA9
IC1bW3NoYWRvd1N0eWxlIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdl
KHNwYWNlUmFuZ2UpLCBzZWNvbmRSYW5nZS5sb2NhdGlvbiAtIE5TTWF4UmFuZ2Uoc3BhY2VSYW5n
ZSkpXSBmbG9hdFZhbHVlXTsKLSAgICAgICAgICAgICAgICBzcGFjZVJhbmdlID0gW3NoYWRvd1N0
eWxlIHJhbmdlT2ZTdHJpbmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNoIHJhbmdlOk5T
TWFrZVJhbmdlKDAsIHRoaXJkUmFuZ2UubG9jYXRpb24pXTsKLSAgICAgICAgICAgICAgICBpZiAo
c3BhY2VSYW5nZS5sZW5ndGggPT0gMCkgc3BhY2VSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDApOwot
ICAgICAgICAgICAgICAgIHNoYWRvd0JsdXJSYWRpdXMgPSBbW3NoYWRvd1N0eWxlIHN1YnN0cmlu
Z1dpdGhSYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKHNwYWNlUmFuZ2UpLCB0aGlyZFJhbmdl
LmxvY2F0aW9uIC0gTlNNYXhSYW5nZShzcGFjZVJhbmdlKSldIGZsb2F0VmFsdWVdOwotICAgICAg
ICAgICAgICAgIHNoYWRvdyA9IFtbW05TU2hhZG93IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
Ci0gICAgICAgICAgICAgICAgW3NoYWRvdyBzZXRTaGFkb3dDb2xvcjpzaGFkb3dDb2xvcl07Ci0g
ICAgICAgICAgICAgICAgW3NoYWRvdyBzZXRTaGFkb3dPZmZzZXQ6c2hhZG93T2Zmc2V0XTsKLSAg
ICAgICAgICAgICAgICBbc2hhZG93IHNldFNoYWRvd0JsdXJSYWRpdXM6c2hhZG93Qmx1clJhZGl1
c107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNoYWRvdzsK
LX0KLQotLSAoQk9PTClfZWxlbWVudElzQmxvY2tMZXZlbDooRE9NRWxlbWVudCAqKWVsZW1lbnQK
LXsKLSAgICBCT09MIGlzQmxvY2tMZXZlbCA9IE5POwotICAgIE5TTnVtYmVyICp2YWwgPSBuaWw7
Ci0gICAgdmFsID0gW19lbGVtZW50SXNCbG9ja0xldmVsIG9iamVjdEZvcktleTplbGVtZW50XTsK
LSAgICBpZiAodmFsKSB7Ci0gICAgICAgIGlzQmxvY2tMZXZlbCA9IFt2YWwgYm9vbFZhbHVlXTsK
LSAgICB9IGVsc2UgewotICAgICAgICBOU1N0cmluZyAqZGlzcGxheVZhbCA9IFtzZWxmIF9zdHJp
bmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJkaXNwbGF5Il0sICpmbG9hdFZhbCA9IFtzZWxm
IF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJmbG9hdCJdOwotICAgICAgICBpZiAo
ZmxvYXRWYWwgJiYgKFtAImxlZnQiIGlzRXF1YWxUb1N0cmluZzpmbG9hdFZhbF0gfHwgW0Aicmln
aHQiIGlzRXF1YWxUb1N0cmluZzpmbG9hdFZhbF0pKSB7Ci0gICAgICAgICAgICBpc0Jsb2NrTGV2
ZWwgPSBZRVM7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbCkgewotICAgICAgICAgICAg
aXNCbG9ja0xldmVsID0gKFtAImJsb2NrIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gfHwg
W0AibGlzdC1pdGVtIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gfHwgW2Rpc3BsYXlWYWwg
aGFzUHJlZml4OkAidGFibGUiXSk7Ci0gICAgICAgIH0KLSAgICAgICAgW19lbGVtZW50SXNCbG9j
a0xldmVsIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6aXNCbG9ja0xldmVsXSBm
b3JLZXk6ZWxlbWVudF07Ci0gICAgfQotICAgIHJldHVybiBpc0Jsb2NrTGV2ZWw7Ci19Ci0KLS0g
KEJPT0wpX2VsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3I6KERPTUVsZW1lbnQgKillbGVtZW50
Ci17Ci0gICAgLy8gSW4gdGhlIHRleHQgc3lzdGVtLCB0ZXh0IGJsb2NrcyAodGFibGUgZWxlbWVu
dHMpIGFuZCBkb2N1bWVudHMgKGJvZHkgZWxlbWVudHMpIGhhdmUgdGhlaXIgb3duIGJhY2tncm91
bmQgY29sb3JzLCB3aGljaCBzaG91bGQgbm90IGJlIGluaGVyaXRlZAotICAgIGlmIChbc2VsZiBf
ZWxlbWVudElzQmxvY2tMZXZlbDplbGVtZW50XSkgewotICAgICAgICBFbGVtZW50KiBjb3JlRWxl
bWVudCA9IGNvcmUoZWxlbWVudCk7Ci0gICAgICAgIE5TU3RyaW5nICpkaXNwbGF5VmFsID0gW3Nl
bGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImRpc3BsYXkiXTsKLSAgICAgICAg
aWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKGJvZHlUYWcpIHx8IFtkaXNwbGF5VmFsIGhhc1ByZWZpeDpAInRhYmxlIl0pCi0gICAg
ICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICByZXR1cm4gTk87Ci19Ci0gICAgCi0tIChE
T01FbGVtZW50ICopX2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZTooRE9NTm9kZSAqKW5vZGUKLXsK
LSAgICBET01FbGVtZW50ICplbGVtZW50ID0gKERPTUVsZW1lbnQgKilub2RlOwotICAgIHdoaWxl
IChlbGVtZW50ICYmIFtlbGVtZW50IG5vZGVUeXBlXSAhPSBET01fRUxFTUVOVF9OT0RFKQotICAg
ICAgICBlbGVtZW50ID0gKERPTUVsZW1lbnQgKilbZWxlbWVudCBwYXJlbnROb2RlXTsKLSAgICBp
ZiAoZWxlbWVudCAmJiAhW3NlbGYgX2VsZW1lbnRJc0Jsb2NrTGV2ZWw6ZWxlbWVudF0pCi0gICAg
ICAgIGVsZW1lbnQgPSBbc2VsZiBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlOltlbGVtZW50IHBh
cmVudE5vZGVdXTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotLSAoTlNDb2xvciAqKV9jb21w
dXRlZENvbG9yRm9yTm9kZTooRE9NTm9kZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5
Ci17Ci0gICAgTlNDb2xvciAqcmVzdWx0ID0gbmlsOwotICAgIEJPT0wgaW5oZXJpdCA9IFlFUywg
aGF2ZVJlc3VsdCA9IE5PLCBpc0NvbG9yID0gW0AiY29sb3IiIGlzRXF1YWxUb1N0cmluZzprZXld
LCBpc0JhY2tncm91bmRDb2xvciA9IFtAImJhY2tncm91bmQtY29sb3IiIGlzRXF1YWxUb1N0cmlu
ZzprZXldOwotICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7ICAg
IAotICAgIGlmIChlbGVtZW50ICYmIFtlbGVtZW50IG5vZGVUeXBlXSA9PSBET01fRUxFTUVOVF9O
T0RFKSB7Ci0gICAgICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKmNvbXB1dGVkU3R5bGUsICpz
cGVjaWZpZWRTdHlsZTsKLSAgICAgICAgaW5oZXJpdCA9IE5POwotICAgICAgICBpZiAoIWhhdmVS
ZXN1bHQgJiYgKGNvbXB1dGVkU3R5bGUgPSBbc2VsZiBfY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQ6
ZWxlbWVudF0pKSB7Ci0gICAgICAgICAgICBET01DU1NQcmltaXRpdmVWYWx1ZSAqY29tcHV0ZWRW
YWx1ZSA9IChET01DU1NQcmltaXRpdmVWYWx1ZSAqKVtjb21wdXRlZFN0eWxlIGdldFByb3BlcnR5
Q1NTVmFsdWU6a2V5XTsKLSAgICAgICAgICAgIGlmIChjb21wdXRlZFZhbHVlICYmIFtjb21wdXRl
ZFZhbHVlIGNzc1ZhbHVlVHlwZV0gPT0gRE9NX0NTU19QUklNSVRJVkVfVkFMVUUgJiYgW2NvbXB1
dGVkVmFsdWUgcHJpbWl0aXZlVHlwZV0gPT0gRE9NX0NTU19SR0JDT0xPUikgewotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IF9jb2xvckZvclJHQkNvbG9yKFtjb21wdXRlZFZhbHVlIGdldFJHQkNv
bG9yVmFsdWVdLCBpc0NvbG9yKTsKLSAgICAgICAgICAgICAgICBoYXZlUmVzdWx0ID0gWUVTOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghaGF2ZVJlc3VsdCAmJiAoc3Bl
Y2lmaWVkU3R5bGUgPSBbc2VsZiBfc3BlY2lmaWVkU3R5bGVGb3JFbGVtZW50OmVsZW1lbnRdKSkg
ewotICAgICAgICAgICAgRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKnNwZWNpZmllZFZhbHVlID0gKERP
TUNTU1ByaW1pdGl2ZVZhbHVlICopW3NwZWNpZmllZFN0eWxlIGdldFByb3BlcnR5Q1NTVmFsdWU6
a2V5XTsKLSAgICAgICAgICAgIGlmIChzcGVjaWZpZWRWYWx1ZSkgewotICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHZhbHVlVHlwZSA9IFtzcGVjaWZpZWRWYWx1ZSBjc3NWYWx1ZVR5cGVd
OwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gRE9NX0NTU19QUklNSVRJVkVfVkFM
VUUgJiYgW3NwZWNpZmllZFZhbHVlIHByaW1pdGl2ZVR5cGVdID09IERPTV9DU1NfUkdCQ09MT1Ip
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9yRm9yUkdCQ29sb3IoW3NwZWNp
ZmllZFZhbHVlIGdldFJHQkNvbG9yVmFsdWVdLCBpc0NvbG9yKTsKLSAgICAgICAgICAgICAgICAg
ICAgaGF2ZVJlc3VsdCA9IFlFUzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlw
ZSA9PSBET01fQ1NTX0lOSEVSSVQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlF
UzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIGlmICgoaXNDb2xvciAmJiAhaGF2ZVJlc3VsdCkg
fHwgKGlzQmFja2dyb3VuZENvbG9yICYmICFbc2VsZiBfZWxlbWVudEhhc093bkJhY2tncm91bmRD
b2xvcjplbGVtZW50XSkpIGluaGVyaXQgPSBZRVM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KCFyZXN1bHQgJiYgaW5oZXJpdCkgewotICAgICAgICBET01Ob2RlICpwYXJlbnROb2RlID0gW25v
ZGUgcGFyZW50Tm9kZV07Ci0gICAgICAgIGlmIChwYXJlbnROb2RlICYmICEoaXNCYWNrZ3JvdW5k
Q29sb3IgJiYgW3BhcmVudE5vZGUgbm9kZVR5cGVdID09IERPTV9FTEVNRU5UX05PREUgJiYgW3Nl
bGYgX2VsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3I6KERPTUVsZW1lbnQgKilwYXJlbnROb2Rl
XSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFtzZWxmIF9jb2xvckZvck5vZGU6cGFyZW50Tm9k
ZSBwcm9wZXJ0eTprZXldOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLS0gKE5TQ29sb3IgKilfY29sb3JGb3JOb2RlOihET01Ob2RlICopbm9kZSBwcm9wZXJ0eToo
TlNTdHJpbmcgKilrZXkKLXsKLSAgICBOU0NvbG9yICpyZXN1bHQgPSBuaWw7Ci0gICAgTlNNdXRh
YmxlRGljdGlvbmFyeSAqYXR0cmlidXRlRGljdGlvbmFyeSA9IFtfY29sb3JzRm9yTm9kZXMgb2Jq
ZWN0Rm9yS2V5Om5vZGVdOwotICAgIGlmICghYXR0cmlidXRlRGljdGlvbmFyeSkgewotICAgICAg
ICBhdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
XTsKLSAgICAgICAgW19jb2xvcnNGb3JOb2RlcyBzZXRPYmplY3Q6YXR0cmlidXRlRGljdGlvbmFy
eSBmb3JLZXk6bm9kZV07Ci0gICAgICAgIFthdHRyaWJ1dGVEaWN0aW9uYXJ5IHJlbGVhc2VdOwot
ICAgIH0KLSAgICByZXN1bHQgPSBbYXR0cmlidXRlRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5
XTsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChbW05TQ29sb3IgY2xlYXJDb2xvcl0g
aXNFcXVhbDpyZXN1bHRdKSByZXN1bHQgPSBuaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVz
dWx0ID0gW3NlbGYgX2NvbXB1dGVkQ29sb3JGb3JOb2RlOm5vZGUgcHJvcGVydHk6a2V5XTsKLSAg
ICAgICAgW2F0dHJpYnV0ZURpY3Rpb25hcnkgc2V0T2JqZWN0OihyZXN1bHQgPyByZXN1bHQgOiBb
TlNDb2xvciBjbGVhckNvbG9yXSkgZm9yS2V5OmtleV07Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9jb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50
OihET01FbGVtZW50ICopZWxlbWVudAotewotICAgIERPTUVsZW1lbnQgKmJsb2NrRWxlbWVudCA9
IFtzZWxmIF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGU6ZWxlbWVudF07Ci0gICAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqYXR0cnMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKLSAg
ICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRN
YW5hZ2VyXTsKLSAgICBOU1N0cmluZyAqZm9udEVmZmVjdCA9IFtzZWxmIF9zdHJpbmdGb3JOb2Rl
OmVsZW1lbnQgcHJvcGVydHk6QCJmb250LWVmZmVjdCJdLCAqdGV4dERlY29yYXRpb24gPSBbc2Vs
ZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAidGV4dC1kZWNvcmF0aW9uIl0sICp2
ZXJ0aWNhbEFsaWduID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInZl
cnRpY2FsLWFsaWduIl0sICp0ZXh0U2hhZG93ID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVu
dCBwcm9wZXJ0eTpAInRleHQtc2hhZG93Il07Ci0gICAgQ0dGbG9hdCBmb250U2l6ZSA9IDAuMCwg
YmFzZWxpbmVPZmZzZXQgPSAwLjAsIGtlcm5pbmcgPSAwLjA7Ci0gICAgTlNGb250ICpmb250ID0g
bmlsLCAqYWN0dWFsRm9udCA9IFtlbGVtZW50IF9mb250XTsKLSAgICBOU0NvbG9yICpmb3JlZ3Jv
dW5kQ29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJjb2xvciJd
LCAqYmFja2dyb3VuZENvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9kZTplbGVtZW50IHByb3BlcnR5
OkAiYmFja2dyb3VuZC1jb2xvciJdOwotCi0gICAgaWYgKCFbc2VsZiBfZ2V0RmxvYXQ6JmZvbnRT
aXplIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImZvbnQtc2l6ZSJdIHx8IGZvbnRTaXplIDw9
IDAuMCkgZm9udFNpemUgPSBfZGVmYXVsdEZvbnRTaXplOwotICAgIGZvbnRTaXplICo9IF90ZXh0
U2l6ZU11bHRpcGxpZXI7Ci0gICAgaWYgKGZvbnRTaXplIDwgX21pbmltdW1Gb250U2l6ZSkgZm9u
dFNpemUgPSBfbWluaW11bUZvbnRTaXplOwotICAgIGlmIChmYWJzKGZsb29yKDIuMCAqIGZvbnRT
aXplICsgMC41KSAvIDIuMCAtIGZvbnRTaXplKSA8IDAuMDUpIHsKLSAgICAgICAgZm9udFNpemUg
PSBmbG9vcigyLjAgKiBmb250U2l6ZSArIDAuNSkgLyAyLjA7Ci0gICAgfSBlbHNlIGlmIChmYWJz
KGZsb29yKDEwLjAgKiBmb250U2l6ZSArIDAuNSkgLyAxMC4wIC0gZm9udFNpemUpIDwgMC4wMDUp
IHsKLSAgICAgICAgZm9udFNpemUgPSBmbG9vcigxMC4wICogZm9udFNpemUgKyAwLjUpIC8gMTAu
MDsKLSAgICB9Ci0gICAgaWYgKGZvbnRTaXplIDw9IDAuMCkgZm9udFNpemUgPSAxMi4wOwotICAg
IAotICAgIGlmIChhY3R1YWxGb250KSBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmFj
dHVhbEZvbnQgdG9TaXplOmZvbnRTaXplXTsKLSAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgTlNT
dHJpbmcgKmZvbnROYW1lID0gW1tzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6
QCJmb250LWZhbWlseSJdIGNhcGl0YWxpemVkU3RyaW5nXSwgKmZvbnRTdHlsZSA9IFtzZWxmIF9z
dHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJmb250LXN0eWxlIl0sICpmb250V2VpZ2h0
ID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImZvbnQtd2VpZ2h0Il0s
ICpmb250VmFyaWFudCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJm
b250LXZhcmlhbnQiXTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZm9udE5hbWUpIGZvbnROYW1l
ID0gX3N0YW5kYXJkRm9udEZhbWlseTsKLSAgICAgICAgaWYgKGZvbnROYW1lKSBmb250ID0gX2Zv
bnRGb3JOYW1lQW5kU2l6ZShmb250TmFtZSwgZm9udFNpemUsIF9mb250Q2FjaGUpOwotICAgICAg
ICBpZiAoIWZvbnQpIGZvbnQgPSBbTlNGb250IGZvbnRXaXRoTmFtZTpAIlRpbWVzIiBzaXplOmZv
bnRTaXplXTsKLSAgICAgICAgaWYgKFtAIml0YWxpYyIgaXNFcXVhbFRvU3RyaW5nOmZvbnRTdHls
ZV0gfHwgW0Aib2JsaXF1ZSIgaXNFcXVhbFRvU3RyaW5nOmZvbnRTdHlsZV0pIHsKLSAgICAgICAg
ICAgIE5TRm9udCAqb3JpZ2luYWxGb250ID0gZm9udDsKLSAgICAgICAgICAgIGZvbnQgPSBbZm9u
dE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b0hhdmVUcmFpdDpOU0l0YWxpY0ZvbnRNYXNrXTsK
LSAgICAgICAgICAgIGlmICghZm9udCkgZm9udCA9IG9yaWdpbmFsRm9udDsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoW2ZvbnRXZWlnaHQgaGFzUHJlZml4OkAiYm9sZCJdIHx8IFtmb250V2VpZ2h0
IGludGVnZXJWYWx1ZV0gPj0gNzAwKSB7Ci0gICAgICAgICAgICAvLyA/Pz8gaGFuZGxlIHdlaWdo
dCBwcm9wZXJseSB1c2luZyBOU0ZvbnRNYW5hZ2VyCi0gICAgICAgICAgICBOU0ZvbnQgKm9yaWdp
bmFsRm9udCA9IGZvbnQ7Ci0gICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRG
b250OmZvbnQgdG9IYXZlVHJhaXQ6TlNCb2xkRm9udE1hc2tdOwotICAgICAgICAgICAgaWYgKCFm
b250KSBmb250ID0gb3JpZ2luYWxGb250OwotICAgICAgICB9Ci0gICAgICAgIGlmIChbQCJzbWFs
bC1jYXBzIiBpc0VxdWFsVG9TdHJpbmc6Zm9udFZhcmlhbnRdKSB7Ci0gICAgICAgICAgICAvLyA/
Pz8gc3ludGhlc2l6ZSBzbWFsbC1jYXBzIGlmIFtmb250IGlzRXF1YWw6b3JpZ2luYWxGb250XQot
ICAgICAgICAgICAgTlNGb250ICpvcmlnaW5hbEZvbnQgPSBmb250OwotICAgICAgICAgICAgZm9u
dCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvSGF2ZVRyYWl0Ok5TU21hbGxDYXBz
Rm9udE1hc2tdOwotICAgICAgICAgICAgaWYgKCFmb250KSBmb250ID0gb3JpZ2luYWxGb250Owot
ICAgICAgICB9Ci0gICAgfQotICAgIGlmIChmb250KSBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9y
S2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAgIGlmIChmb3JlZ3JvdW5kQ29sb3IpIFthdHRy
cyBzZXRPYmplY3Q6Zm9yZWdyb3VuZENvbG9yIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOwotICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IgJiYgIVtzZWxmIF9lbGVtZW50SGFz
T3duQmFja2dyb3VuZENvbG9yOmVsZW1lbnRdKSBbYXR0cnMgc2V0T2JqZWN0OmJhY2tncm91bmRD
b2xvciBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoZm9u
dEVmZmVjdCkgewotICAgICAgICBpZiAoW2ZvbnRFZmZlY3QgcmFuZ2VPZlN0cmluZzpAIm91dGxp
bmUiXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOjMuMF0gZm9yS2V5Ok5TU3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1lXTsK
LSAgICAgICAgaWYgKFtmb250RWZmZWN0IHJhbmdlT2ZTdHJpbmc6QCJlbWJvc3MiXS5sb2NhdGlv
biAhPSBOU05vdEZvdW5kKSBbYXR0cnMgc2V0T2JqZWN0OltbW05TU2hhZG93IGFsbG9jXSBpbml0
XSBhdXRvcmVsZWFzZV0gZm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07Ci0gICAgfQotICAg
IGlmICh0ZXh0RGVjb3JhdGlvbiAmJiBbdGV4dERlY29yYXRpb24gbGVuZ3RoXSA+IDQpIHsKLSAg
ICAgICAgaWYgKFt0ZXh0RGVjb3JhdGlvbiByYW5nZU9mU3RyaW5nOkAidW5kZXJsaW5lIl0ubG9j
YXRpb24gIT0gTlNOb3RGb3VuZCkgW2F0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0
aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVB
dHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKFt0ZXh0RGVjb3JhdGlvbiByYW5nZU9mU3RyaW5n
OkAibGluZS10aHJvdWdoIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgW2F0dHJzIHNldE9iamVj
dDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9y
S2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAgfQotICAgIGlmICh2
ZXJ0aWNhbEFsaWduKSB7Ci0gICAgICAgIGlmIChbdmVydGljYWxBbGlnbiByYW5nZU9mU3RyaW5n
OkAic3VwZXIiXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSBbYXR0cnMgc2V0T2JqZWN0OltOU051
bWJlciBudW1iZXJXaXRoSW50ZWdlcjoxXSBmb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5h
bWVdOwotICAgICAgICBpZiAoW3ZlcnRpY2FsQWxpZ24gcmFuZ2VPZlN0cmluZzpAInN1YiJdLmxv
Y2F0aW9uICE9IE5TTm90Rm91bmQpIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnRlZ2VyOi0xXSBmb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdOwotICAgIH0K
LSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZiYXNlbGluZU9mZnNldCBmb3JOb2RlOmVsZW1lbnQg
cHJvcGVydHk6QCJ2ZXJ0aWNhbC1hbGlnbiJdKSBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOmJhc2VsaW5lT2Zmc2V0XSBmb3JLZXk6TlNCYXNlbGluZU9mZnNldEF0
dHJpYnV0ZU5hbWVdOwotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6Jmtlcm5pbmcgZm9yTm9kZTpl
bGVtZW50IHByb3BlcnR5OkAibGV0dGVyLXNwYWNpbmciXSkgW2F0dHJzIHNldE9iamVjdDpbTlNO
dW1iZXIgbnVtYmVyV2l0aERvdWJsZTprZXJuaW5nXSBmb3JLZXk6TlNLZXJuQXR0cmlidXRlTmFt
ZV07Ci0gICAgaWYgKHRleHRTaGFkb3cgJiYgW3RleHRTaGFkb3cgbGVuZ3RoXSA+IDQpIHsKLSAg
ICAgICAgTlNTaGFkb3cgKnNoYWRvdyA9IF9zaGFkb3dGb3JTaGFkb3dTdHlsZSh0ZXh0U2hhZG93
KTsKLSAgICAgICAgaWYgKHNoYWRvdykgW2F0dHJzIHNldE9iamVjdDpzaGFkb3cgZm9yS2V5Ok5T
U2hhZG93QXR0cmlidXRlTmFtZV07Ci0gICAgfQotICAgIGlmIChlbGVtZW50ICE9IGJsb2NrRWxl
bWVudCAmJiBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSBjb3VudF0gPiAwKSBbYXR0cnMgc2V0T2Jq
ZWN0OltOU0FycmF5IGFycmF5V2l0aEFycmF5Ol93cml0aW5nRGlyZWN0aW9uQXJyYXldIGZvcktl
eTpOU1dyaXRpbmdEaXJlY3Rpb25BdHRyaWJ1dGVOYW1lXTsKLSAgICAKLSAgICBpZiAoYmxvY2tF
bGVtZW50KSB7Ci0gICAgICAgIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlICpwYXJhZ3JhcGhTdHls
ZSA9IFtbW3NlbGYgY2xhc3NdIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZV0gbXV0YWJsZUNvcHldOwot
ICAgICAgICBOU1N0cmluZyAqYmxvY2tUYWcgPSBbYmxvY2tFbGVtZW50IHRhZ05hbWVdOwotICAg
ICAgICBCT09MIGlzUGFyYWdyYXBoID0gKFtAIlAiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10g
fHwgW0AiTEkiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10gfHwgKFtibG9ja1RhZyBoYXNQcmVm
aXg6QCJIIl0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkpOwotICAgICAgICBOU1N0cmluZyAq
dGV4dEFsaWduID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkAi
dGV4dC1hbGlnbiJdLCAqZGlyZWN0aW9uID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6YmxvY2tFbGVt
ZW50IHByb3BlcnR5OkAiZGlyZWN0aW9uIl07Ci0gICAgICAgIENHRmxvYXQgbGVmdE1hcmdpbiA9
IDAuMCwgcmlnaHRNYXJnaW4gPSAwLjAsIGJvdHRvbU1hcmdpbiA9IDAuMCwgdGV4dEluZGVudCA9
IDAuMCwgbGluZUhlaWdodCA9IDAuMDsKLSAgICAgICAgaWYgKHRleHRBbGlnbikgewotICAgICAg
ICAgICAgLy8gV2ViS2l0IGNhbiByZXR1cm4gLWtodG1sLWxlZnQsIC1raHRtbC1yaWdodCwgLWto
dG1sLWNlbnRlcgotICAgICAgICAgICAgaWYgKFt0ZXh0QWxpZ24gaGFzU3VmZml4OkAibGVmdCJd
KSBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TTGVmdFRleHRBbGlnbm1lbnRdOwotICAg
ICAgICAgICAgZWxzZSBpZiAoW3RleHRBbGlnbiBoYXNTdWZmaXg6QCJyaWdodCJdKSBbcGFyYWdy
YXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TUmlnaHRUZXh0QWxpZ25tZW50XTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKFt0ZXh0QWxpZ24gaGFzU3VmZml4OkAiY2VudGVyIl0pIFtwYXJhZ3JhcGhTdHls
ZSBzZXRBbGlnbm1lbnQ6TlNDZW50ZXJUZXh0QWxpZ25tZW50XTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKFt0ZXh0QWxpZ24gaGFzU3VmZml4OkAianVzdGlmeSJdKSBbcGFyYWdyYXBoU3R5bGUgc2V0
QWxpZ25tZW50Ok5TSnVzdGlmaWVkVGV4dEFsaWdubWVudF07Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGRpcmVjdGlvbikgewotICAgICAgICAgICAgaWYgKFtkaXJlY3Rpb24gaXNFcXVhbFRvU3Ry
aW5nOkAibHRyIl0pIFtwYXJhZ3JhcGhTdHlsZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjpOU1dy
aXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodF07Ci0gICAgICAgICAgICBlbHNlIGlmIChbZGlyZWN0
aW9uIGlzRXF1YWxUb1N0cmluZzpAInJ0bCJdKSBbcGFyYWdyYXBoU3R5bGUgc2V0QmFzZVdyaXRp
bmdEaXJlY3Rpb246TlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnRdOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChbYmxvY2tUYWcgaGFzUHJlZml4OkAiSCJdICYmIDIgPT0gW2Jsb2NrVGFnIGxl
bmd0aF0pIHsKLSAgICAgICAgICAgIE5TSW50ZWdlciBoZWFkZXJMZXZlbCA9IFtibG9ja1RhZyBj
aGFyYWN0ZXJBdEluZGV4OjFdIC0gJzAnOwotICAgICAgICAgICAgaWYgKDEgPD0gaGVhZGVyTGV2
ZWwgJiYgaGVhZGVyTGV2ZWwgPD0gNikgW3BhcmFncmFwaFN0eWxlIHNldEhlYWRlckxldmVsOmhl
YWRlckxldmVsXTsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNQYXJhZ3Jh
cGgpIHsKLSAgICAgICAgICAgIC8vaWYgKFtzZWxmIF9nZXRGbG9hdDomdG9wTWFyZ2luIGZvck5v
ZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkAibWFyZ2luLXRvcCJdICYmIHRvcE1hcmdpbiA+IDAu
MCkgW3BhcmFncmFwaFN0eWxlIHNldFBhcmFncmFwaFNwYWNpbmdCZWZvcmU6dG9wTWFyZ2luXTsK
LSAgICAgICAgICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JmxlZnRNYXJnaW4gZm9yTm9kZTpibG9j
a0VsZW1lbnQgcHJvcGVydHk6QCJtYXJnaW4tbGVmdCJdICYmIGxlZnRNYXJnaW4gPiAwLjApIFtw
YXJhZ3JhcGhTdHlsZSBzZXRIZWFkSW5kZW50OmxlZnRNYXJnaW5dOwotICAgICAgICAgICAgaWYg
KFtzZWxmIF9nZXRGbG9hdDomdGV4dEluZGVudCBmb3JOb2RlOmJsb2NrRWxlbWVudCBwcm9wZXJ0
eTpAInRleHQtaW5kZW50Il0pIFtwYXJhZ3JhcGhTdHlsZSBzZXRGaXJzdExpbmVIZWFkSW5kZW50
OltwYXJhZ3JhcGhTdHlsZSBoZWFkSW5kZW50XSArIHRleHRJbmRlbnRdOwotICAgICAgICAgICAg
aWYgKFtzZWxmIF9nZXRGbG9hdDomcmlnaHRNYXJnaW4gZm9yTm9kZTpibG9ja0VsZW1lbnQgcHJv
cGVydHk6QCJtYXJnaW4tcmlnaHQiXSAmJiByaWdodE1hcmdpbiA+IDAuMCkgW3BhcmFncmFwaFN0
eWxlIHNldFRhaWxJbmRlbnQ6LXJpZ2h0TWFyZ2luXTsKLSAgICAgICAgICAgIGlmIChbc2VsZiBf
Z2V0RmxvYXQ6JmJvdHRvbU1hcmdpbiBmb3JOb2RlOmJsb2NrRWxlbWVudCBwcm9wZXJ0eTpAIm1h
cmdpbi1ib3R0b20iXSAmJiBib3R0b21NYXJnaW4gPiAwLjApIFtwYXJhZ3JhcGhTdHlsZSBzZXRQ
YXJhZ3JhcGhTcGFjaW5nOmJvdHRvbU1hcmdpbl07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKF93
ZWJWaWV3VGV4dFNpemVNdWx0aXBsaWVyID4gMC4wICYmIFtzZWxmIF9nZXRGbG9hdDombGluZUhl
aWdodCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJsaW5lLWhlaWdodCJdICYmIGxpbmVIZWln
aHQgPiAwLjApIHsKLSAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRNaW5pbXVtTGluZUhl
aWdodDpsaW5lSGVpZ2h0IC8gX3dlYlZpZXdUZXh0U2l6ZU11bHRpcGxpZXJdOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChbX3RleHRMaXN0cyBjb3VudF0gPiAwKSBbcGFyYWdyYXBoU3R5bGUgc2V0
VGV4dExpc3RzOl90ZXh0TGlzdHNdOwotICAgICAgICBpZiAoW190ZXh0QmxvY2tzIGNvdW50XSA+
IDApIFtwYXJhZ3JhcGhTdHlsZSBzZXRUZXh0QmxvY2tzOl90ZXh0QmxvY2tzXTsKLSAgICAgICAg
W2F0dHJzIHNldE9iamVjdDpwYXJhZ3JhcGhTdHlsZSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0
dHJpYnV0ZU5hbWVdOwotICAgICAgICBbcGFyYWdyYXBoU3R5bGUgcmVsZWFzZV07Ci0gICAgfQot
ICAgIHJldHVybiBhdHRyczsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2F0dHJpYnV0ZXNGb3JF
bGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAotewotICAgIE5TRGljdGlvbmFyeSAqcmVzdWx0
OwotICAgIGlmIChlbGVtZW50KSB7Ci0gICAgICAgIHJlc3VsdCA9IFtfYXR0cmlidXRlc0ZvckVs
ZW1lbnRzIG9iamVjdEZvcktleTplbGVtZW50XTsKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IFtzZWxmIF9jb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50OmVs
ZW1lbnRdOwotICAgICAgICAgICAgW19hdHRyaWJ1dGVzRm9yRWxlbWVudHMgc2V0T2JqZWN0OnJl
c3VsdCBmb3JLZXk6ZWxlbWVudF07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBy
ZXN1bHQgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0OwotCi19Ci0KLS0gKHZvaWQpX25ld1BhcmFncmFwaEZvckVsZW1lbnQ6KERPTUVsZW1lbnQg
KillbGVtZW50IHRhZzooTlNTdHJpbmcgKil0YWcgYWxsb3dFbXB0eTooQk9PTClmbGFnIHN1cHBy
ZXNzVHJhaWxpbmdTcGFjZTooQk9PTClzdXBwcmVzcwotewotICAgIE5TVUludGVnZXIgdGV4dExl
bmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAgIHVuaWNoYXIgbGFzdENoYXIgPSAodGV4dExl
bmd0aCA+IDApID8gW1tfYXR0clN0ciBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6dGV4dExlbmd0
aCAtIDFdIDogJ1xuJzsKLSAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gKHN1cHByZXNzICYm
IF9mbGFncy5pc1NvZnQgJiYgKGxhc3RDaGFyID09ICcgJyB8fCBsYXN0Q2hhciA9PSBOU0xpbmVT
ZXBhcmF0b3JDaGFyYWN0ZXIpKSA/IE5TTWFrZVJhbmdlKHRleHRMZW5ndGggLSAxLCAxKSA6IE5T
TWFrZVJhbmdlKHRleHRMZW5ndGgsIDApOwotICAgIEJPT0wgbmVlZEJyZWFrID0gKGZsYWcgfHwg
bGFzdENoYXIgIT0gJ1xuJyk7Ci0gICAgaWYgKG5lZWRCcmVhaykgewotICAgICAgICBOU1N0cmlu
ZyAqc3RyaW5nID0gKChbQCJCT0RZIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSB8fCBbQCJIVE1MIiBp
c0VxdWFsVG9TdHJpbmc6dGFnXSkgPyBAIiIgOiBAIlxuIik7Ci0gICAgICAgIFtfd3JpdGluZ0Rp
cmVjdGlvbkFycmF5IHJlbW92ZUFsbE9iamVjdHNdOwotICAgICAgICBbX2F0dHJTdHIgcmVwbGFj
ZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nXTsKLSAg
ICAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkg
X2RvbVJhbmdlU3RhcnRJbmRleCArPSBbc3RyaW5nIGxlbmd0aF0gLSByYW5nZVRvUmVwbGFjZS5s
ZW5ndGg7Ci0gICAgICAgIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsK
LSAgICAgICAgaWYgKCFfZmxhZ3MuaXNJbmRleGluZykgewotICAgICAgICAgICAgTlNEaWN0aW9u
YXJ5ICphdHRycyA9IFtzZWxmIF9hdHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICAg
ICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiByYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAw
KSBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07Ci0g
ICAgICAgIH0KLSAgICAgICAgX2ZsYWdzLmlzU29mdCA9IFlFUzsKLSAgICB9Ci19Ci0KLS0gKHZv
aWQpX25ld0xpbmVGb3JFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAotewotICAgIHVuaWNo
YXIgYyA9IE5TTGluZVNlcGFyYXRvckNoYXJhY3RlcjsKLSAgICBOU1N0cmluZyAqc3RyaW5nID0g
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzOiZjIGxlbmd0aDoxXTsKLSAgICBO
U1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKLSAgICBOU1JhbmdlIHJh
bmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCk7Ci0gICAgW19hdHRyU3Ry
IHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOnN0cmlu
Z107Ci0gICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOwotICAgIGlm
IChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpIF9kb21SYW5n
ZVN0YXJ0SW5kZXggKz0gcmFuZ2VUb1JlcGxhY2UubGVuZ3RoOwotICAgIGlmICghX2ZsYWdzLmlz
SW5kZXhpbmcpIHsKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IFtzZWxmIF9hdHRyaWJ1
dGVzRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYm
IHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJz
IHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKLSAgICB9Ci0gICAgW3N0cmluZyByZWxlYXNlXTsKLSAg
ICBfZmxhZ3MuaXNTb2Z0ID0gWUVTOwotfQotCi0tICh2b2lkKV9uZXdUYWJGb3JFbGVtZW50OihE
T01FbGVtZW50ICopZWxlbWVudAotewotICAgIE5TU3RyaW5nICpzdHJpbmcgPSBAIlx0IjsKLSAg
ICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKLSAgICB1bmljaGFy
IGxhc3RDaGFyID0gKHRleHRMZW5ndGggPiAwKSA/IFtbX2F0dHJTdHIgc3RyaW5nXSBjaGFyYWN0
ZXJBdEluZGV4OnRleHRMZW5ndGggLSAxXSA6ICdcbic7Ci0gICAgTlNSYW5nZSByYW5nZVRvUmVw
bGFjZSA9IChfZmxhZ3MuaXNTb2Z0ICYmIGxhc3RDaGFyID09ICcgJykgPyBOU01ha2VSYW5nZSh0
ZXh0TGVuZ3RoIC0gMSwgMSkgOiBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKLSAgICBbX2F0
dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6
c3RyaW5nXTsKLSAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07Ci0g
ICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkgX2Rv
bVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7Ci0gICAgaWYgKCFfZmxh
Z3MuaXNJbmRleGluZykgewotICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3NlbGYgX2F0
dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOwotICAgICAgICBpZiAoIV9mbGFncy5pc1Rlc3Rp
bmcgJiYgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6
YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwotICAgIH0KLSAgICBbc3RyaW5nIHJlbGVhc2Vd
OwotICAgIF9mbGFncy5pc1NvZnQgPSBZRVM7Ci19Ci0KLXN0YXRpYyBOU0ZpbGVXcmFwcGVyICpm
aWxlV3JhcHBlckZvclVSTChEb2N1bWVudExvYWRlciAqZGF0YVNvdXJjZSwgTlNVUkwgKlVSTCkK
LXsKLSAgICBpZiAoW1VSTCBpc0ZpbGVVUkxdKSB7Ci0gICAgICAgIE5TU3RyaW5nICpwYXRoID0g
W1tVUkwgcGF0aF0gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aF07Ci0gICAgICAgIHJl
dHVybiBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFBhdGg6cGF0aF0gYXV0b3JlbGVh
c2VdOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9
IGRhdGFTb3VyY2UtPnN1YnJlc291cmNlKFVSTCk7Ci0gICAgaWYgKHJlc291cmNlKSB7Ci0gICAg
ICAgIE5TRmlsZVdyYXBwZXIgKndyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0
UmVndWxhckZpbGVXaXRoQ29udGVudHM6W3Jlc291cmNlLT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgp
IGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBOU1N0cmluZyAqZmlsZW5hbWUg
PSByZXNvdXJjZS0+cmVzcG9uc2UoKS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwotICAgICAgICBpZiAo
IWZpbGVuYW1lIHx8ICFbZmlsZW5hbWUgbGVuZ3RoXSkgewotICAgICAgICAgICAgTlNVUkwgKlVS
TCA9IHJlc291cmNlLT51cmwoKTsKLSAgICAgICAgICAgIGZpbGVuYW1lID0gW1VSTCBfd2ViX3N1
Z2dlc3RlZEZpbGVuYW1lV2l0aE1JTUVUeXBlOnJlc291cmNlLT5taW1lVHlwZSgpXTsKLSAgICAg
ICAgfQotICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07Ci0g
ICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIH0KLSAgICAKLSAgICBOU011dGFibGVVUkxSZXF1
ZXN0ICpyZXF1ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpV
UkxdOwotCi0gICAgTlNDYWNoZWRVUkxSZXNwb25zZSAqY2FjaGVkUmVzcG9uc2UgPSBbW05TVVJM
Q2FjaGUgc2hhcmVkVVJMQ2FjaGVdIGNhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdDpyZXF1ZXN0XTsK
LSAgICBbcmVxdWVzdCByZWxlYXNlXTsKLSAgICAKLSAgICBpZiAoY2FjaGVkUmVzcG9uc2UpIHsK
LSAgICAgICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2Nd
IGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpbY2FjaGVkUmVzcG9uc2UgZGF0YV1dIGF1dG9y
ZWxlYXNlXTsKLSAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6W1tjYWNoZWRS
ZXNwb25zZSByZXNwb25zZV0gc3VnZ2VzdGVkRmlsZW5hbWVdXTsKLSAgICAgICAgcmV0dXJuIHdy
YXBwZXI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuaWw7Ci19Ci0gICAgCi0tIChCT09MKV9h
ZGRBdHRhY2htZW50Rm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgVVJMOihOU1VSTCAq
KXVybCBuZWVkc1BhcmFncmFwaDooQk9PTCluZWVkc1BhcmFncmFwaCB1c2VQbGFjZWhvbGRlcjoo
Qk9PTClmbGFnCi17Ci0gICAgQk9PTCByZXR2YWwgPSBOTywgbm90Rm91bmQgPSBOTzsKLSAgICBO
U0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlciA9IG5pbDsKLSAgICBzdGF0aWMgTlNJbWFnZSAqbWlz
c2luZ0ltYWdlID0gbmlsOwotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW2VsZW1lbnQgb3duZXJE
b2N1bWVudF0pLT5mcmFtZSgpOwotICAgIERvY3VtZW50TG9hZGVyICpkYXRhU291cmNlID0gZnJh
bWUtPmxvYWRlcigpLT5mcmFtZUhhc0xvYWRlZCgpID8gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpIDogMDsKLSAgICBCT09MIGlnbm9yZU9yaWVudGF0aW9uID0gWUVTOwotCi0gICAg
aWYgKF9mbGFncy5pc0luZGV4aW5nKSByZXR1cm4gTk87Ci0gICAgaWYgKFt1cmwgaXNGaWxlVVJM
XSkgewotICAgICAgICBOU1N0cmluZyAqcGF0aCA9IFtbdXJsIHBhdGhdIHN0cmluZ0J5U3RhbmRh
cmRpemluZ1BhdGhdOwotICAgICAgICBpZiAocGF0aCkgZmlsZVdyYXBwZXIgPSBbW1tOU0ZpbGVX
cmFwcGVyIGFsbG9jXSBpbml0V2l0aFBhdGg6cGF0aF0gYXV0b3JlbGVhc2VdOwotICAgIH0KLSAg
ICBpZiAoIWZpbGVXcmFwcGVyKSB7Ci0gICAgICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJl
c291cmNlID0gZGF0YVNvdXJjZS0+c3VicmVzb3VyY2UodXJsKTsKLSAgICAgICAgaWYgKCFyZXNv
dXJjZSkgcmVzb3VyY2UgPSBkYXRhU291cmNlLT5zdWJyZXNvdXJjZSh1cmwpOwotICAgICAgICBp
ZiAoZmxhZyAmJiByZXNvdXJjZSAmJiBbQCJ0ZXh0L2h0bWwiIGlzRXF1YWw6cmVzb3VyY2UtPm1p
bWVUeXBlKCldKSBub3RGb3VuZCA9IFlFUzsKLSAgICAgICAgaWYgKHJlc291cmNlICYmICFub3RG
b3VuZCkgewotICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9j
XSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6W3Jlc291cmNlLT5kYXRhKCktPmNyZWF0ZU5T
RGF0YSgpIGF1dG9yZWxlYXNlXV0gYXV0b3JlbGVhc2VdOwotICAgICAgICAgICAgW2ZpbGVXcmFw
cGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOlt1cmwgX3dlYl9zdWdnZXN0ZWRGaWxlbmFtZVdpdGhN
SU1FVHlwZTpyZXNvdXJjZS0+bWltZVR5cGUoKV1dOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
ICghZmlsZVdyYXBwZXIgJiYgIW5vdEZvdW5kKSB7Ci0gICAgICAgIGZpbGVXcmFwcGVyID0gZmls
ZVdyYXBwZXJGb3JVUkwoZGF0YVNvdXJjZSwgdXJsKTsKLSAgICAgICAgaWYgKGZsYWcgJiYgZmls
ZVdyYXBwZXIgJiYgW1tbW2ZpbGVXcmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXSBwYXRoRXh0ZW5z
aW9uXSBsb3dlcmNhc2VTdHJpbmddIGhhc1ByZWZpeDpAImh0bSJdKSBub3RGb3VuZCA9IFlFUzsK
LSAgICAgICAgaWYgKG5vdEZvdW5kKSBmaWxlV3JhcHBlciA9IG5pbDsKLSAgICB9Ci0gICAgaWYg
KCFmaWxlV3JhcHBlciAmJiAhbm90Rm91bmQpIHsKLSAgICAgICAgZmlsZVdyYXBwZXIgPSBmaWxl
V3JhcHBlckZvclVSTChfZGF0YVNvdXJjZSwgdXJsKTsKLSAgICAgICAgaWYgKGZsYWcgJiYgZmls
ZVdyYXBwZXIgJiYgW1tbW2ZpbGVXcmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXSBwYXRoRXh0ZW5z
aW9uXSBsb3dlcmNhc2VTdHJpbmddIGhhc1ByZWZpeDpAImh0bSJdKSBub3RGb3VuZCA9IFlFUzsK
LSAgICAgICAgaWYgKG5vdEZvdW5kKSBmaWxlV3JhcHBlciA9IG5pbDsKLSAgICB9Ci0gICAgaWYg
KGZpbGVXcmFwcGVyIHx8IGZsYWcpIHsKLSAgICAgICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0g
W19hdHRyU3RyIGxlbmd0aF07Ci0gICAgICAgIE5TVGV4dEF0dGFjaG1lbnQgKmF0dGFjaG1lbnQg
PSBbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBw
ZXJdOwotICAgICAgICBOU1RleHRBdHRhY2htZW50Q2VsbCAqY2VsbDsKLSAgICAgICAgTlNTdHJp
bmcgKnN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRm9ybWF0OihuZWVkc1BhcmFn
cmFwaCA/IEAiJUNcbiIgOiBAIiVDIiksIE5TQXR0YWNobWVudENoYXJhY3Rlcl07Ci0gICAgICAg
IE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKLSAg
ICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyczsKLSAgICAgICAgaWYgKGZpbGVXcmFwcGVyKSB7Ci0g
ICAgICAgICAgICBpZiAoaWdub3JlT3JpZW50YXRpb24pIFthdHRhY2htZW50IHNldElnbm9yZXNP
cmllbnRhdGlvbjpZRVNdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2VsbCA9IFtb
TlNUZXh0QXR0YWNobWVudENlbGwgYWxsb2NdIGluaXRJbWFnZUNlbGw6bWlzc2luZ0ltYWdlXTsK
LSAgICAgICAgICAgIFthdHRhY2htZW50IHNldEF0dGFjaG1lbnRDZWxsOmNlbGxdOwotICAgICAg
ICAgICAgW2NlbGwgcmVsZWFzZV07Ci0gICAgICAgIH0KLSAgICAgICAgW19hdHRyU3RyIHJlcGxh
Y2VDaGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOnN0cmluZ107Ci0g
ICAgICAgIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKLSAgICAgICAg
aWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkgX2RvbVJh
bmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7Ci0gICAgICAgIGF0dHJzID0g
W3NlbGYgX2F0dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOwotICAgICAgICBpZiAoIV9mbGFn
cy5pc1Rlc3RpbmcgJiYgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkgewotICAgICAgICAgICAg
W19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwotICAg
ICAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gMTsKLSAgICAgICAgICAgIFtfYXR0clN0
ciBhZGRBdHRyaWJ1dGU6TlNBdHRhY2htZW50QXR0cmlidXRlTmFtZSB2YWx1ZTphdHRhY2htZW50
IHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKLSAgICAgICAgfQotICAgICAgICBbc3RyaW5nIHJlbGVh
c2VdOwotICAgICAgICBbYXR0YWNobWVudCByZWxlYXNlXTsKLSAgICAgICAgX2ZsYWdzLmlzU29m
dCA9IE5POwotICAgICAgICByZXR2YWwgPSBZRVM7Ci0gICAgfQotICAgIHJldHVybiByZXR2YWw7
Ci19Ci0KLS0gKHZvaWQpX2FkZFF1b3RlRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQg
b3BlbmluZzooQk9PTClvcGVuaW5nIGxldmVsOihOU0ludGVnZXIpbGV2ZWwKLXsKLSAgICB1bmlj
aGFyIGMgPSAoKGxldmVsICUgMikgPT0gMCkgPyAob3BlbmluZyA/IDB4MjAxYyA6IDB4MjAxZCkg
OiAob3BlbmluZyA/IDB4MjAxOCA6IDB4MjAxOSk7Ci0gICAgTlNTdHJpbmcgKnN0cmluZyA9IFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyczomYyBsZW5ndGg6MV07Ci0gICAgTlNV
SW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgTlNSYW5nZSByYW5n
ZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGgsIDApOwotICAgIFtfYXR0clN0ciBy
ZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpzdHJpbmdd
OwotICAgIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKLSAgICBpZiAo
cmFuZ2VUb1JlcGxhY2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KSBfZG9tUmFuZ2VT
dGFydEluZGV4ICs9IHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKLSAgICBpZiAoIV9mbGFncy5pc0lu
ZGV4aW5nKSB7Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cnMgPSBbc2VsZiBfYXR0cmlidXRl
c0ZvckVsZW1lbnQ6ZWxlbWVudF07Ci0gICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiBy
YW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKSBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyBy
YW5nZTpyYW5nZVRvUmVwbGFjZV07Ci0gICAgfQotICAgIFtzdHJpbmcgcmVsZWFzZV07Ci0gICAg
X2ZsYWdzLmlzU29mdCA9IE5POwotfQotCi0tICh2b2lkKV9hZGRWYWx1ZTooTlNTdHJpbmcgKil2
YWx1ZSBmb3JFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAotewotICAgIE5TVUludGVnZXIg
dGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdLCB2YWx1ZUxlbmd0aCA9IFt2YWx1ZSBsZW5n
dGhdOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3Ro
LCAwKTsKLSAgICBpZiAodmFsdWVMZW5ndGggPiAwKSB7Ci0gICAgICAgIFtfYXR0clN0ciByZXBs
YWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzp2YWx1ZV07Ci0g
ICAgICAgIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IHZhbHVlTGVuZ3RoOwotICAgICAgICBpZiAo
cmFuZ2VUb1JlcGxhY2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KSBfZG9tUmFuZ2VT
dGFydEluZGV4ICs9IHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKLSAgICAgICAgaWYgKCFfZmxhZ3Mu
aXNJbmRleGluZykgewotICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IFtzZWxmIF9h
dHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICAgICAgICAgIGlmICghX2ZsYWdzLmlz
VGVzdGluZyAmJiByYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKSBbX2F0dHJTdHIgc2V0QXR0cmli
dXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07Ci0gICAgICAgIH0KLSAgICAgICAgX2Zs
YWdzLmlzU29mdCA9IE5POwotICAgIH0KLX0KLQotLSAodm9pZClfZmlsbEluQmxvY2s6KE5TVGV4
dEJsb2NrICopYmxvY2sgZm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgYmFja2dyb3Vu
ZENvbG9yOihOU0NvbG9yICopYmFja2dyb3VuZENvbG9yIGV4dHJhTWFyZ2luOihDR0Zsb2F0KWV4
dHJhTWFyZ2luIGV4dHJhUGFkZGluZzooQ0dGbG9hdClleHRyYVBhZGRpbmcgaXNUYWJsZTooQk9P
TClpc1RhYmxlCi17Ci0gICAgQ0dGbG9hdCB2YWwgPSAwLjA7Ci0gICAgTlNDb2xvciAqY29sb3Ig
PSBuaWw7Ci0gICAgQk9PTCBpc1RhYmxlQ2VsbEVsZW1lbnQgPSBbZWxlbWVudCBpc0tpbmRPZkNs
YXNzOltET01IVE1MVGFibGVDZWxsRWxlbWVudCBjbGFzc11dOwotICAgIE5TU3RyaW5nICp3aWR0
aCA9IGlzVGFibGVDZWxsRWxlbWVudCA/IFsoRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgKillbGVt
ZW50IHdpZHRoXSA6IFtlbGVtZW50IGdldEF0dHJpYnV0ZTpAIndpZHRoIl07Ci0KLSAgICBpZiAo
KHdpZHRoICYmIFt3aWR0aCBsZW5ndGhdID4gMCkgfHwgIWlzVGFibGUpIHsKLSAgICAgICAgaWYg
KFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIndpZHRoIl0p
IFtibG9jayBzZXRWYWx1ZTp2YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZv
ckRpbWVuc2lvbjpOU1RleHRCbG9ja1dpZHRoXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFtzZWxm
IF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIm1pbi13aWR0aCJdKSBb
YmxvY2sgc2V0VmFsdWU6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JE
aW1lbnNpb246TlNUZXh0QmxvY2tNaW5pbXVtV2lkdGhdOwotICAgIGlmIChbc2VsZiBfZ2V0Rmxv
YXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJtYXgtd2lkdGgiXSkgW2Jsb2NrIHNl
dFZhbHVlOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9u
Ok5TVGV4dEJsb2NrTWF4aW11bVdpZHRoXTsKLSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwg
Zm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibWluLWhlaWdodCJdKSBbYmxvY2sgc2V0VmFsdWU6
dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0
QmxvY2tNaW5pbXVtSGVpZ2h0XTsKLSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkAibWF4LWhlaWdodCJdKSBbYmxvY2sgc2V0VmFsdWU6dmFsIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tN
YXhpbXVtSGVpZ2h0XTsKLQotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVs
ZW1lbnQgcHJvcGVydHk6QCJwYWRkaW5nLWxlZnQiXSkgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4
dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNU
ZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5YRWRnZV07IGVsc2UgW2Jsb2NrIHNldFdpZHRoOmV4
dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNU
ZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5YRWRnZV07Ci0gICAgaWYgKFtzZWxmIF9nZXRGbG9h
dDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAInBhZGRpbmctdG9wIl0pIFtibG9jayBz
ZXRXaWR0aDp2YWwgKyBleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVU
eXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWluWUVkZ2VdOyBlbHNlIFti
bG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVU
eXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWluWUVkZ2VdOwotICAgIGlm
IChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJwYWRkaW5n
LXJpZ2h0Il0pIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRC
bG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5T
TWF4WEVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRC
bG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5T
TWF4WEVkZ2VdOwotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQg
cHJvcGVydHk6QCJwYWRkaW5nLWJvdHRvbSJdKSBbYmxvY2sgc2V0V2lkdGg6dmFsICsgZXh0cmFQ
YWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRC
bG9ja1BhZGRpbmcgZWRnZTpOU01heFlFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFQ
YWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRC
bG9ja1BhZGRpbmcgZWRnZTpOU01heFlFZGdlXTsKLSAgICAKLSAgICBpZiAoW3NlbGYgX2dldEZs
b2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLWxlZnQtd2lkdGgiXSkg
W2Jsb2NrIHNldFdpZHRoOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9y
TGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01pblhFZGdlXTsKLSAgICBpZiAoW3NlbGYg
X2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9yZGVyLXRvcC13aWR0
aCJdKSBbYmxvY2sgc2V0V2lkdGg6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlw
ZSBmb3JMYXllcjpOU1RleHRCbG9ja0JvcmRlciBlZGdlOk5TTWluWUVkZ2VdOwotICAgIGlmIChb
c2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJib3JkZXItcmln
aHQtd2lkdGgiXSkgW2Jsb2NrIHNldFdpZHRoOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVW
YWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01heFhFZGdlXTsKLSAg
ICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiYm9y
ZGVyLWJvdHRvbS13aWR0aCJdKSBbYmxvY2sgc2V0V2lkdGg6dmFsIHR5cGU6TlNUZXh0QmxvY2tB
YnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja0JvcmRlciBlZGdlOk5TTWF4WUVk
Z2VdOwotCi0gICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9w
ZXJ0eTpAIm1hcmdpbi1sZWZ0Il0pIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYU1hcmdpbiB0
eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJn
aW4gZWRnZTpOU01pblhFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlw
ZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2lu
IGVkZ2U6TlNNaW5YRWRnZV07Ci0gICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6
ZWxlbWVudCBwcm9wZXJ0eTpAIm1hcmdpbi10b3AiXSkgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4
dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1Rl
eHRCbG9ja01hcmdpbiBlZGdlOk5TTWluWUVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRy
YU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0
QmxvY2tNYXJnaW4gZWRnZTpOU01pbllFZGdlXTsKLSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2
YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAibWFyZ2luLXJpZ2h0Il0pIFtibG9jayBzZXRX
aWR0aDp2YWwgKyBleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUg
Zm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01heFhFZGdlXTsgZWxzZSBbYmxvY2sg
c2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZv
ckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhYRWRnZV07Ci0gICAgaWYgKFtzZWxm
IF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAIm1hcmdpbi1ib3R0b20i
XSkgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNv
bHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WUVkZ2Vd
OyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1
dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01heFlFZGdlXTsK
LQotICAgIGlmICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6
QCJiYWNrZ3JvdW5kLWNvbG9yIl0pKSBbYmxvY2sgc2V0QmFja2dyb3VuZENvbG9yOmNvbG9yXTsK
LSAgICBpZiAoIWNvbG9yICYmIGJhY2tncm91bmRDb2xvcikgW2Jsb2NrIHNldEJhY2tncm91bmRD
b2xvcjpiYWNrZ3JvdW5kQ29sb3JdOwotICAgIGlmICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JO
b2RlOmVsZW1lbnQgcHJvcGVydHk6QCJib3JkZXItbGVmdC1jb2xvciJdKSkgW2Jsb2NrIHNldEJv
cmRlckNvbG9yOmNvbG9yIGZvckVkZ2U6TlNNaW5YRWRnZV07Ci0gICAgaWYgKChjb2xvciA9IFtz
ZWxmIF9jb2xvckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImJvcmRlci10b3AtY29sb3IiXSkp
IFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWluWUVkZ2VdOwotICAgIGlm
ICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJib3JkZXIt
cmlnaHQtY29sb3IiXSkpIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWF4
WEVkZ2VdOwotICAgIGlmICgoY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJv
cGVydHk6QCJib3JkZXItYm90dG9tLWNvbG9yIl0pKSBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29s
b3IgZm9yRWRnZTpOU01heFlFZGdlXTsKLX0KLQotc3RhdGljIGlubGluZSBCT09MIHJlYWQyRGln
aXROdW1iZXIoY29uc3QgY2hhciAqKnBwLCBpbnQ4X3QgKm91dHZhbCkKLXsKLSAgICBCT09MIHJl
c3VsdCA9IE5POwotICAgIGNoYXIgYzEgPSAqKCpwcCkrKywgYzI7Ci0gICAgaWYgKGlzQVNDSUlE
aWdpdChjMSkpIHsKLSAgICAgICAgYzIgPSAqKCpwcCkrKzsKLSAgICAgICAgaWYgKGlzQVNDSUlE
aWdpdChjMikpIHsKLSAgICAgICAgICAgICpvdXR2YWwgPSAxMCAqIChjMSAtICcwJykgKyAoYzIg
LSAnMCcpOwotICAgICAgICAgICAgcmVzdWx0ID0gWUVTOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTlNEYXRlICpfZGF0ZUZvclN0cmlu
ZyhOU1N0cmluZyAqc3RyaW5nKQotewotICAgIENGR3JlZ29yaWFuRGF0ZSBkYXRlOwotICAgIGNv
bnN0IGNoYXIgKnAgPSBbc3RyaW5nIFVURjhTdHJpbmddOwotICAgIGludDhfdCBzZWN2YWwgPSAw
OwotICAgIEJPT0wgd2VsbEZvcm1lZCA9IFlFUzsKLQotICAgIGRhdGUueWVhciA9IDA7Ci0gICAg
d2hpbGUgKCpwICYmIGlzQVNDSUlEaWdpdCgqcCkpIGRhdGUueWVhciA9IDEwICogZGF0ZS55ZWFy
ICsgKnArKyAtICcwJzsKLSAgICBpZiAoKnArKyAhPSAnLScpIHdlbGxGb3JtZWQgPSBOTzsKLSAg
ICBpZiAoIXdlbGxGb3JtZWQgfHwgIXJlYWQyRGlnaXROdW1iZXIoJnAsICZkYXRlLm1vbnRoKSB8
fCAqcCsrICE9ICctJykgd2VsbEZvcm1lZCA9IE5POwotICAgIGlmICghd2VsbEZvcm1lZCB8fCAh
cmVhZDJEaWdpdE51bWJlcigmcCwgJmRhdGUuZGF5KSB8fCAqcCsrICE9ICdUJykgd2VsbEZvcm1l
ZCA9IE5POwotICAgIGlmICghd2VsbEZvcm1lZCB8fCAhcmVhZDJEaWdpdE51bWJlcigmcCwgJmRh
dGUuaG91cikgfHwgKnArKyAhPSAnOicpIHdlbGxGb3JtZWQgPSBOTzsKLSAgICBpZiAoIXdlbGxG
b3JtZWQgfHwgIXJlYWQyRGlnaXROdW1iZXIoJnAsICZkYXRlLm1pbnV0ZSkgfHwgKnArKyAhPSAn
OicpIHdlbGxGb3JtZWQgPSBOTzsKLSAgICBpZiAoIXdlbGxGb3JtZWQgfHwgIXJlYWQyRGlnaXRO
dW1iZXIoJnAsICZzZWN2YWwpIHx8ICpwKysgIT0gJ1onKSB3ZWxsRm9ybWVkID0gTk87Ci0gICAg
aWYgKHdlbGxGb3JtZWQpIGRhdGUuc2Vjb25kID0gc2VjdmFsOwotICAgIHJldHVybiB3ZWxsRm9y
bWVkID8gWyhOU0RhdGUgKilDRkRhdGVDcmVhdGUoTlVMTCwgQ0ZHcmVnb3JpYW5EYXRlR2V0QWJz
b2x1dGVUaW1lKGRhdGUsIE5VTEwpKSBhdXRvcmVsZWFzZV0gOiBuaWw7Ci19Ci0KLXN0YXRpYyBO
U0ludGVnZXIgX2NvbENvbXBhcmUoaWQgYmxvY2sxLCBpZCBibG9jazIsIHZvaWQgKikKLXsKLSAg
ICBOU0ludGVnZXIgY29sMSA9IFsoTlNUZXh0VGFibGVCbG9jayAqKWJsb2NrMSBzdGFydGluZ0Nv
bHVtbl0sIGNvbDIgPSBbKE5TVGV4dFRhYmxlQmxvY2sgKilibG9jazIgc3RhcnRpbmdDb2x1bW5d
OwotICAgIHJldHVybiAoKGNvbDEgPCBjb2wyKSA/IE5TT3JkZXJlZEFzY2VuZGluZyA6ICgoY29s
MSA9PSBjb2wyKSA/IE5TT3JkZXJlZFNhbWUgOiBOU09yZGVyZWREZXNjZW5kaW5nKSk7Ci19Ci0K
LS0gKEJPT0wpX2VudGVyRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgdGFnOihOU1N0cmlu
ZyAqKXRhZyBkaXNwbGF5OihOU1N0cmluZyAqKWRpc3BsYXlWYWwKLXsKLSAgICBpZiAoIWRpc3Bs
YXlWYWwgfHwgIShbQCJub25lIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gfHwgW0AidGFi
bGUtY29sdW1uIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gfHwgW0AidGFibGUtY29sdW1u
LWdyb3VwIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0pKSB7Ci0gICAgICAgIGlmIChbc2Vs
ZiBfZWxlbWVudElzQmxvY2tMZXZlbDplbGVtZW50XSAmJiAhW0AiQlIiIGlzRXF1YWxUb1N0cmlu
Zzp0YWddICYmICEoW0AidGFibGUtY2VsbCIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdICYm
IFtfdGV4dFRhYmxlcyBjb3VudF0gPT0gMCkgCi0gICAgICAgICAgICAmJiAhKFtfdGV4dExpc3Rz
IGNvdW50XSA+IDAgJiYgW0AiYmxvY2siIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSAmJiAh
W0AiTEkiIGlzRXF1YWxUb1N0cmluZzp0YWddICYmICFbQCJVTCIgaXNFcXVhbFRvU3RyaW5nOnRh
Z10gJiYgIVtAIk9MIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkpCi0gICAgICAgICAgICBbc2VsZiBf
bmV3UGFyYWdyYXBoRm9yRWxlbWVudDplbGVtZW50IHRhZzp0YWcgYWxsb3dFbXB0eTpOTyBzdXBw
cmVzc1RyYWlsaW5nU3BhY2U6WUVTXTsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAg
cmV0dXJuIE5POwotfQotCi0tICh2b2lkKV9hZGRUYWJsZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQg
Kil0YWJsZUVsZW1lbnQKLXsKLSAgICBOU1RleHRUYWJsZSAqdGFibGUgPSBbW05TVGV4dFRhYmxl
IGFsbG9jXSBpbml0XTsKLSAgICBDR0Zsb2F0IGNlbGxTcGFjaW5nVmFsID0gMS4wLCBjZWxsUGFk
ZGluZ1ZhbCA9IDEuMDsKLSAgICBbdGFibGUgc2V0TnVtYmVyT2ZDb2x1bW5zOjFdOwotICAgIFt0
YWJsZSBzZXRMYXlvdXRBbGdvcml0aG06TlNUZXh0VGFibGVBdXRvbWF0aWNMYXlvdXRBbGdvcml0
aG1dOwotICAgIFt0YWJsZSBzZXRDb2xsYXBzZXNCb3JkZXJzOk5PXTsKLSAgICBbdGFibGUgc2V0
SGlkZXNFbXB0eUNlbGxzOk5PXTsKLSAgICBpZiAodGFibGVFbGVtZW50KSB7Ci0gICAgICAgIE5T
U3RyaW5nICpib3JkZXJDb2xsYXBzZSA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOnRhYmxlRWxlbWVu
dCBwcm9wZXJ0eTpAImJvcmRlci1jb2xsYXBzZSJdLCAqZW1wdHlDZWxscyA9IFtzZWxmIF9zdHJp
bmdGb3JOb2RlOnRhYmxlRWxlbWVudCBwcm9wZXJ0eTpAImVtcHR5LWNlbGxzIl0sICp0YWJsZUxh
eW91dCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOnRhYmxlRWxlbWVudCBwcm9wZXJ0eTpAInRhYmxl
LWxheW91dCJdOwotICAgICAgICBpZiAoW3RhYmxlRWxlbWVudCByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGNlbGxTcGFjaW5nKV0pIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICpjZWxsU3Bh
Y2luZyA9IFsoRE9NSFRNTFRhYmxlRWxlbWVudCAqKXRhYmxlRWxlbWVudCBjZWxsU3BhY2luZ107
Ci0gICAgICAgICAgICBpZiAoY2VsbFNwYWNpbmcgJiYgW2NlbGxTcGFjaW5nIGxlbmd0aF0gPiAw
ICYmICFbY2VsbFNwYWNpbmcgaGFzU3VmZml4OkAiJSJdKSBjZWxsU3BhY2luZ1ZhbCA9IFtjZWxs
U3BhY2luZyBkb3VibGVWYWx1ZV07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFt0YWJsZUVsZW1l
bnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihjZWxsUGFkZGluZyldKSB7Ci0gICAgICAg
ICAgICBOU1N0cmluZyAqY2VsbFBhZGRpbmcgPSBbKERPTUhUTUxUYWJsZUVsZW1lbnQgKil0YWJs
ZUVsZW1lbnQgY2VsbFBhZGRpbmddOwotICAgICAgICAgICAgaWYgKGNlbGxQYWRkaW5nICYmIFtj
ZWxsUGFkZGluZyBsZW5ndGhdID4gMCAmJiAhW2NlbGxQYWRkaW5nIGhhc1N1ZmZpeDpAIiUiXSkg
Y2VsbFBhZGRpbmdWYWwgPSBbY2VsbFBhZGRpbmcgZG91YmxlVmFsdWVdOwotICAgICAgICB9Ci0g
ICAgICAgIFtzZWxmIF9maWxsSW5CbG9jazp0YWJsZSBmb3JFbGVtZW50OnRhYmxlRWxlbWVudCBi
YWNrZ3JvdW5kQ29sb3I6bmlsIGV4dHJhTWFyZ2luOjAuMCBleHRyYVBhZGRpbmc6MC4wIGlzVGFi
bGU6WUVTXTsKLSAgICAgICAgaWYgKFtAImNvbGxhcHNlIiBpc0VxdWFsVG9TdHJpbmc6Ym9yZGVy
Q29sbGFwc2VdKSB7Ci0gICAgICAgICAgICBbdGFibGUgc2V0Q29sbGFwc2VzQm9yZGVyczpZRVNd
OwotICAgICAgICAgICAgY2VsbFNwYWNpbmdWYWwgPSAwLjA7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKFtAImhpZGUiIGlzRXF1YWxUb1N0cmluZzplbXB0eUNlbGxzXSkgW3RhYmxlIHNldEhpZGVz
RW1wdHlDZWxsczpZRVNdOwotICAgICAgICBpZiAoW0AiZml4ZWQiIGlzRXF1YWxUb1N0cmluZzp0
YWJsZUxheW91dF0pIFt0YWJsZSBzZXRMYXlvdXRBbGdvcml0aG06TlNUZXh0VGFibGVGaXhlZExh
eW91dEFsZ29yaXRobV07Ci0gICAgfQotICAgIFtfdGV4dFRhYmxlcyBhZGRPYmplY3Q6dGFibGVd
OwotICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOmNlbGxTcGFjaW5nVmFsXV07Ci0gICAgW190ZXh0VGFibGVQYWRkaW5ncyBhZGRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6Y2VsbFBhZGRpbmdWYWxdXTsKLSAgICBbX3Rl
eHRUYWJsZVJvd3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjowXV07Ci0g
ICAgW190ZXh0VGFibGVSb3dBcnJheXMgYWRkT2JqZWN0OltOU011dGFibGVBcnJheSBhcnJheV1d
OwotICAgIFt0YWJsZSByZWxlYXNlXTsKLX0KLQotLSAodm9pZClfYWRkVGFibGVDZWxsRm9yRWxl
bWVudDooRE9NRWxlbWVudCAqKXRhYmxlQ2VsbEVsZW1lbnQKLXsKLSAgICBOU1RleHRUYWJsZSAq
dGFibGUgPSBbX3RleHRUYWJsZXMgbGFzdE9iamVjdF07Ci0gICAgTlNJbnRlZ2VyIHJvd051bWJl
ciA9IFtbX3RleHRUYWJsZVJvd3MgbGFzdE9iamVjdF0gaW50ZWdlclZhbHVlXSwgY29sdW1uTnVt
YmVyID0gMCwgcm93U3BhbiA9IDEsIGNvbFNwYW4gPSAxOwotICAgIE5TTXV0YWJsZUFycmF5ICpy
b3dBcnJheSA9IFtfdGV4dFRhYmxlUm93QXJyYXlzIGxhc3RPYmplY3RdOwotICAgIE5TVUludGVn
ZXIgaSwgY291bnQgPSBbcm93QXJyYXkgY291bnRdOwotICAgIE5TQ29sb3IgKmNvbG9yID0gKFtf
dGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBjb3VudF0gPiAwKSA/IFtfdGV4dFRhYmxlUm93
QmFja2dyb3VuZENvbG9ycyBsYXN0T2JqZWN0XSA6IG5pbDsKLSAgICBOU1RleHRUYWJsZUJsb2Nr
ICpibG9jaywgKnByZXZpb3VzQmxvY2s7Ci0gICAgQ0dGbG9hdCBjZWxsU3BhY2luZ1ZhbCA9IFtb
X3RleHRUYWJsZVNwYWNpbmdzIGxhc3RPYmplY3RdIGRvdWJsZVZhbHVlXTsKLSAgICBpZiAoW2Nv
bG9yIGlzRXF1YWw6W05TQ29sb3IgY2xlYXJDb2xvcl1dKSBjb2xvciA9IG5pbDsKLSAgICBmb3Ig
KGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBwcmV2aW91c0Jsb2NrID0gW3Jvd0Fy
cmF5IG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChjb2x1bW5OdW1iZXIgPj0gW3ByZXZp
b3VzQmxvY2sgc3RhcnRpbmdDb2x1bW5dICYmIGNvbHVtbk51bWJlciA8IFtwcmV2aW91c0Jsb2Nr
IHN0YXJ0aW5nQ29sdW1uXSArIFtwcmV2aW91c0Jsb2NrIGNvbHVtblNwYW5dKSBjb2x1bW5OdW1i
ZXIgPSBbcHJldmlvdXNCbG9jayBzdGFydGluZ0NvbHVtbl0gKyBbcHJldmlvdXNCbG9jayBjb2x1
bW5TcGFuXTsKLSAgICB9Ci0gICAgaWYgKHRhYmxlQ2VsbEVsZW1lbnQpIHsKLSAgICAgICAgaWYg
KFt0YWJsZUNlbGxFbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iocm93U3Bhbild
KSB7Ci0gICAgICAgICAgICByb3dTcGFuID0gWyhET01IVE1MVGFibGVDZWxsRWxlbWVudCAqKXRh
YmxlQ2VsbEVsZW1lbnQgcm93U3Bhbl07Ci0gICAgICAgICAgICBpZiAocm93U3BhbiA8IDEpIHJv
d1NwYW4gPSAxOwotICAgICAgICB9Ci0gICAgICAgIGlmIChbdGFibGVDZWxsRWxlbWVudCByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbFNwYW4pXSkgewotICAgICAgICAgICAgY29sU3Bh
biA9IFsoRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgKil0YWJsZUNlbGxFbGVtZW50IGNvbFNwYW5d
OwotICAgICAgICAgICAgaWYgKGNvbFNwYW4gPCAxKSBjb2xTcGFuID0gMTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBibG9jayA9IFtbTlNUZXh0VGFibGVCbG9jayBhbGxvY10gaW5pdFdpdGhUYWJs
ZTp0YWJsZSBzdGFydGluZ1Jvdzpyb3dOdW1iZXIgcm93U3Bhbjpyb3dTcGFuIHN0YXJ0aW5nQ29s
dW1uOmNvbHVtbk51bWJlciBjb2x1bW5TcGFuOmNvbFNwYW5dOwotICAgIGlmICh0YWJsZUNlbGxF
bGVtZW50KSB7Ci0gICAgICAgIE5TU3RyaW5nICp2ZXJ0aWNhbEFsaWduID0gW3NlbGYgX3N0cmlu
Z0Zvck5vZGU6dGFibGVDZWxsRWxlbWVudCBwcm9wZXJ0eTpAInZlcnRpY2FsLWFsaWduIl07Ci0g
ICAgICAgIFtzZWxmIF9maWxsSW5CbG9jazpibG9jayBmb3JFbGVtZW50OnRhYmxlQ2VsbEVsZW1l
bnQgYmFja2dyb3VuZENvbG9yOmNvbG9yIGV4dHJhTWFyZ2luOmNlbGxTcGFjaW5nVmFsIC8gMi4w
IGV4dHJhUGFkZGluZzowLjAgaXNUYWJsZTpOT107Ci0gICAgICAgIGlmIChbQCJtaWRkbGUiIGlz
RXF1YWxUb1N0cmluZzp2ZXJ0aWNhbEFsaWduXSkgW2Jsb2NrIHNldFZlcnRpY2FsQWxpZ25tZW50
Ok5TVGV4dEJsb2NrTWlkZGxlQWxpZ25tZW50XTsKLSAgICAgICAgZWxzZSBpZiAoW0AiYm90dG9t
IiBpc0VxdWFsVG9TdHJpbmc6dmVydGljYWxBbGlnbl0pIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdu
bWVudDpOU1RleHRCbG9ja0JvdHRvbUFsaWdubWVudF07Ci0gICAgICAgIGVsc2UgaWYgKFtAImJh
c2VsaW5lIiBpc0VxdWFsVG9TdHJpbmc6dmVydGljYWxBbGlnbl0pIFtibG9jayBzZXRWZXJ0aWNh
bEFsaWdubWVudDpOU1RleHRCbG9ja0Jhc2VsaW5lQWxpZ25tZW50XTsKLSAgICAgICAgZWxzZSBp
ZiAoW0AidG9wIiBpc0VxdWFsVG9TdHJpbmc6dmVydGljYWxBbGlnbl0pIFtibG9jayBzZXRWZXJ0
aWNhbEFsaWdubWVudDpOU1RleHRCbG9ja1RvcEFsaWdubWVudF07Ci0gICAgfQotICAgIFtfdGV4
dEJsb2NrcyBhZGRPYmplY3Q6YmxvY2tdOwotICAgIFtyb3dBcnJheSBhZGRPYmplY3Q6YmxvY2td
OwotICAgIFtyb3dBcnJheSBzb3J0VXNpbmdGdW5jdGlvbjpfY29sQ29tcGFyZSBjb250ZXh0Ok5V
TExdOwotICAgIFtibG9jayByZWxlYXNlXTsKLX0KLQotLSAoQk9PTClfcHJvY2Vzc0VsZW1lbnQ6
KERPTUVsZW1lbnQgKillbGVtZW50IHRhZzooTlNTdHJpbmcgKil0YWcgZGlzcGxheTooTlNTdHJp
bmcgKilkaXNwbGF5VmFsIGRlcHRoOihOU0ludGVnZXIpZGVwdGgKLXsKLSAgICBCT09MIHJldHZh
bCA9IFlFUywgaXNCbG9ja0xldmVsID0gW3NlbGYgX2VsZW1lbnRJc0Jsb2NrTGV2ZWw6ZWxlbWVu
dF07Ci0gICAgaWYgKGlzQmxvY2tMZXZlbCkgewotICAgICAgICBbX3dyaXRpbmdEaXJlY3Rpb25B
cnJheSByZW1vdmVBbGxPYmplY3RzXTsKLSAgICB9IGVsc2UgewotICAgICAgICBOU1N0cmluZyAq
YmlkaSA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJ1bmljb2RlLWJp
ZGkiXTsKLSAgICAgICAgaWYgKGJpZGkgJiYgW2JpZGkgaXNFcXVhbFRvU3RyaW5nOkAiZW1iZWQi
XSkgewotICAgICAgICAgICAgTlNVSW50ZWdlciB2YWwgPSBOU1RleHRXcml0aW5nRGlyZWN0aW9u
RW1iZWRkaW5nOwotICAgICAgICAgICAgTlNTdHJpbmcgKmRpcmVjdGlvbiA9IFtzZWxmIF9zdHJp
bmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJkaXJlY3Rpb24iXTsKLSAgICAgICAgICAgIGlm
IChbZGlyZWN0aW9uIGlzRXF1YWxUb1N0cmluZzpAInJ0bCJdKSB2YWwgfD0gTlNXcml0aW5nRGly
ZWN0aW9uUmlnaHRUb0xlZnQ7Ci0gICAgICAgICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSBh
ZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6dmFsXV07Ci0gICAg
ICAgIH0gZWxzZSBpZiAoYmlkaSAmJiBbYmlkaSBpc0VxdWFsVG9TdHJpbmc6QCJiaWRpLW92ZXJy
aWRlIl0pIHsKLSAgICAgICAgICAgIE5TVUludGVnZXIgdmFsID0gTlNUZXh0V3JpdGluZ0RpcmVj
dGlvbk92ZXJyaWRlOwotICAgICAgICAgICAgTlNTdHJpbmcgKmRpcmVjdGlvbiA9IFtzZWxmIF9z
dHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6QCJkaXJlY3Rpb24iXTsKLSAgICAgICAgICAg
IGlmIChbZGlyZWN0aW9uIGlzRXF1YWxUb1N0cmluZzpAInJ0bCJdKSB2YWwgfD0gTlNXcml0aW5n
RGlyZWN0aW9uUmlnaHRUb0xlZnQ7Ci0gICAgICAgICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJh
eSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6dmFsXV07Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKFtAInRhYmxlIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxh
eVZhbF0gfHwgKFtfdGV4dFRhYmxlcyBjb3VudF0gPT0gMCAmJiBbQCJ0YWJsZS1yb3ctZ3JvdXAi
IGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSkpIHsKLSAgICAgICAgRE9NRWxlbWVudCAqdGFi
bGVFbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgaWYgKFtAInRhYmxlLXJvdy1ncm91cCIgaXNF
cXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgc3Rh
cnRpbmcgaW4gbWVkaWFzIHJlcywgdGhlIGZpcnN0IHRoaW5nIHdlIHNlZSBtYXkgYmUgdGhlIHRi
b2R5LCBzbyBnbyB1cCB0byB0aGUgdGFibGUKLSAgICAgICAgICAgIHRhYmxlRWxlbWVudCA9IFtz
ZWxmIF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGU6W2VsZW1lbnQgcGFyZW50Tm9kZV1dOwotICAg
ICAgICAgICAgaWYgKCFbQCJ0YWJsZSIgaXNFcXVhbFRvU3RyaW5nOltzZWxmIF9zdHJpbmdGb3JO
b2RlOnRhYmxlRWxlbWVudCBwcm9wZXJ0eTpAImRpc3BsYXkiXV0pIHRhYmxlRWxlbWVudCA9IGVs
ZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKFtfdGV4dFRhYmxlcyBjb3VudF0gPiBb
X3RleHRCbG9ja3MgY291bnRdKSB7Ci0gICAgICAgICAgICBbc2VsZiBfYWRkVGFibGVDZWxsRm9y
RWxlbWVudDpuaWxdOwotICAgICAgICB9Ci0gICAgICAgIFtzZWxmIF9hZGRUYWJsZUZvckVsZW1l
bnQ6dGFibGVFbGVtZW50XTsKLSAgICB9IGVsc2UgaWYgKFtAInRhYmxlLWZvb3Rlci1ncm91cCIg
aXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPiAwKSB7
Ci0gICAgICAgIFtfdGV4dFRhYmxlRm9vdGVycyBzZXRPYmplY3Q6ZWxlbWVudCBmb3JLZXk6W05T
VmFsdWUgdmFsdWVXaXRoTm9ucmV0YWluZWRPYmplY3Q6W190ZXh0VGFibGVzIGxhc3RPYmplY3Rd
XV07Ci0gICAgICAgIHJldHZhbCA9IE5POwotICAgIH0gZWxzZSBpZiAoW0AidGFibGUtcm93IiBp
c0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gJiYgW190ZXh0VGFibGVzIGNvdW50XSA+IDApIHsK
LSAgICAgICAgTlNDb2xvciAqY29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJv
cGVydHk6QCJiYWNrZ3JvdW5kLWNvbG9yIl07Ci0gICAgICAgIGlmICghY29sb3IpIGNvbG9yID0g
W05TQ29sb3IgY2xlYXJDb2xvcl07Ci0gICAgICAgIFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENv
bG9ycyBhZGRPYmplY3Q6Y29sb3JdOwotICAgIH0gZWxzZSBpZiAoW0AidGFibGUtY2VsbCIgaXNF
cXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdKSB7Ci0gICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMg
Y291bnRdIDwgW190ZXh0QmxvY2tzIGNvdW50XSArIDEpIHsKLSAgICAgICAgICAgIFtzZWxmIF9h
ZGRUYWJsZUZvckVsZW1lbnQ6bmlsXTsKLSAgICAgICAgfQotICAgICAgICBbc2VsZiBfYWRkVGFi
bGVDZWxsRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICB9IGVsc2UgaWYgKFtAIklNRyIgaXNFcXVh
bFRvU3RyaW5nOnRhZ10pIHsKLSAgICAgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFtlbGVtZW50
IGdldEF0dHJpYnV0ZTpAInNyYyJdOwotICAgICAgICBpZiAodXJsU3RyaW5nICYmIFt1cmxTdHJp
bmcgbGVuZ3RoXSA+IDApIHsKLSAgICAgICAgICAgIE5TVVJMICp1cmwgPSBjb3JlKFtlbGVtZW50
IG93bmVyRG9jdW1lbnRdKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1M
U3BhY2VzKHVybFN0cmluZykpOwotICAgICAgICAgICAgaWYgKCF1cmwpIHVybCA9IFtOU1VSTCBf
d2ViX1VSTFdpdGhTdHJpbmc6W3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0lu
U2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dIHJl
bGF0aXZlVG9VUkw6X2Jhc2VVUkxdOwotICAgICAgICAgICAgaWYgKHVybCkgW3NlbGYgX2FkZEF0
dGFjaG1lbnRGb3JFbGVtZW50OmVsZW1lbnQgVVJMOnVybCBuZWVkc1BhcmFncmFwaDppc0Jsb2Nr
TGV2ZWwgdXNlUGxhY2Vob2xkZXI6WUVTXTsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSBO
TzsKLSAgICB9IGVsc2UgaWYgKFtAIk9CSkVDVCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKLSAg
ICAgICAgTlNTdHJpbmcgKmJhc2VTdHJpbmcgPSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJjb2Rl
YmFzZSJdLCAqdXJsU3RyaW5nID0gW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAiZGF0YSJdLCAqZGVj
bGFyZVN0cmluZyA9IFtlbGVtZW50IGdldEF0dHJpYnV0ZTpAImRlY2xhcmUiXTsKLSAgICAgICAg
aWYgKHVybFN0cmluZyAmJiBbdXJsU3RyaW5nIGxlbmd0aF0gPiAwICYmICFbQCJ0cnVlIiBpc0Vx
dWFsVG9TdHJpbmc6ZGVjbGFyZVN0cmluZ10pIHsKLSAgICAgICAgICAgIE5TVVJMICpiYXNlVVJM
ID0gbmlsLCAqdXJsID0gbmlsOwotICAgICAgICAgICAgaWYgKGJhc2VTdHJpbmcgJiYgW2Jhc2VT
dHJpbmcgbGVuZ3RoXSA+IDApIHsKLSAgICAgICAgICAgICAgICBiYXNlVVJMID0gY29yZShbZWxl
bWVudCBvd25lckRvY3VtZW50XSktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhiYXNlU3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFiYXNlVVJMKSBi
YXNlVVJMID0gW05TVVJMIF93ZWJfVVJMV2l0aFN0cmluZzpbYmFzZVN0cmluZyBzdHJpbmdCeVRy
aW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGlu
ZUNoYXJhY3RlclNldF1dIHJlbGF0aXZlVG9VUkw6X2Jhc2VVUkxdOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGJhc2VVUkwpIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6
W3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNl
dCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dIHJlbGF0aXZlVG9VUkw6YmFzZVVS
TF07Ci0gICAgICAgICAgICBpZiAoIXVybCkgdXJsID1jb3JlKFtlbGVtZW50IG93bmVyRG9jdW1l
bnRdKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0
cmluZykpOwotICAgICAgICAgICAgaWYgKCF1cmwpIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhT
dHJpbmc6W3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJh
Y3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dIHJlbGF0aXZlVG9VUkw6
X2Jhc2VVUkxdOwotICAgICAgICAgICAgaWYgKHVybCkgcmV0dmFsID0gIVtzZWxmIF9hZGRBdHRh
Y2htZW50Rm9yRWxlbWVudDplbGVtZW50IFVSTDp1cmwgbmVlZHNQYXJhZ3JhcGg6aXNCbG9ja0xl
dmVsIHVzZVBsYWNlaG9sZGVyOk5PXTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoW0AiRlJB
TUUiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7Ci0gICAgICAgIGlmIChbZWxlbWVudCByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnREb2N1bWVudCldKSB7Ci0gICAgICAgICAgICBE
T01Eb2N1bWVudCAqY29udGVudERvY3VtZW50ID0gWyhET01IVE1MRnJhbWVFbGVtZW50ICopZWxl
bWVudCBjb250ZW50RG9jdW1lbnRdOwotICAgICAgICAgICAgaWYgKGNvbnRlbnREb2N1bWVudCkg
W3NlbGYgX3RyYXZlcnNlTm9kZTpjb250ZW50RG9jdW1lbnQgZGVwdGg6ZGVwdGggKyAxIGVtYmVk
ZGVkOllFU107Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gTk87Ci0gICAgfSBlbHNlIGlm
IChbQCJJRlJBTUUiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7Ci0gICAgICAgIGlmIChbZWxlbWVu
dCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnREb2N1bWVudCldKSB7Ci0gICAg
ICAgICAgICBET01Eb2N1bWVudCAqY29udGVudERvY3VtZW50ID0gWyhET01IVE1MSUZyYW1lRWxl
bWVudCAqKWVsZW1lbnQgY29udGVudERvY3VtZW50XTsKLSAgICAgICAgICAgIGlmIChjb250ZW50
RG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBbc2VsZiBfdHJhdmVyc2VOb2RlOmNvbnRlbnRE
b2N1bWVudCBkZXB0aDpkZXB0aCArIDEgZW1iZWRkZWQ6WUVTXTsKLSAgICAgICAgICAgICAgICBy
ZXR2YWwgPSBOTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoW0Ai
QlIiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7Ci0gICAgICAgIERPTUVsZW1lbnQgKmJsb2NrRWxl
bWVudCA9IFtzZWxmIF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGU6W2VsZW1lbnQgcGFyZW50Tm9k
ZV1dOwotICAgICAgICBOU1N0cmluZyAqYnJlYWtDbGFzcyA9IFtlbGVtZW50IGdldEF0dHJpYnV0
ZTpAImNsYXNzIl0sICpibG9ja1RhZyA9IFtibG9ja0VsZW1lbnQgdGFnTmFtZV07Ci0gICAgICAg
IEJPT0wgaXNFeHRyYUJyZWFrID0gW0AiQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSIgaXNFcXVh
bFRvU3RyaW5nOmJyZWFrQ2xhc3NdLCBibG9ja0VsZW1lbnRJc1BhcmFncmFwaCA9IChbQCJQIiBp
c0VxdWFsVG9TdHJpbmc6YmxvY2tUYWddIHx8IFtAIkxJIiBpc0VxdWFsVG9TdHJpbmc6YmxvY2tU
YWddIHx8IChbYmxvY2tUYWcgaGFzUHJlZml4OkAiSCJdICYmIDIgPT0gW2Jsb2NrVGFnIGxlbmd0
aF0pKTsKLSAgICAgICAgaWYgKGlzRXh0cmFCcmVhaykgewotICAgICAgICAgICAgX2ZsYWdzLmhh
c1RyYWlsaW5nTmV3bGluZSA9IFlFUzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChibG9ja0VsZW1lbnQgJiYgYmxvY2tFbGVtZW50SXNQYXJhZ3JhcGgpIHsKLSAgICAgICAgICAg
ICAgICBbc2VsZiBfbmV3TGluZUZvckVsZW1lbnQ6ZWxlbWVudF07Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIFtzZWxmIF9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50OmVsZW1l
bnQgdGFnOnRhZyBhbGxvd0VtcHR5OllFUyBzdXBwcmVzc1RyYWlsaW5nU3BhY2U6Tk9dOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChbQCJVTCIgaXNFcXVhbFRvU3Ry
aW5nOnRhZ10pIHsKLSAgICAgICAgTlNUZXh0TGlzdCAqbGlzdDsKLSAgICAgICAgTlNTdHJpbmcg
Kmxpc3RTdHlsZVR5cGUgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAi
bGlzdC1zdHlsZS10eXBlIl07Ci0gICAgICAgIGlmICghbGlzdFN0eWxlVHlwZSB8fCBbbGlzdFN0
eWxlVHlwZSBsZW5ndGhdID09IDApIGxpc3RTdHlsZVR5cGUgPSBAImRpc2MiOwotICAgICAgICBs
aXN0ID0gW1tOU1RleHRMaXN0IGFsbG9jXSBpbml0V2l0aE1hcmtlckZvcm1hdDpbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAInslQH0iLCBsaXN0U3R5bGVUeXBlXSBvcHRpb25zOjBdOwotICAg
ICAgICBbX3RleHRMaXN0cyBhZGRPYmplY3Q6bGlzdF07Ci0gICAgICAgIFtsaXN0IHJlbGVhc2Vd
OwotICAgIH0gZWxzZSBpZiAoW0AiT0wiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7Ci0gICAgICAg
IE5TVGV4dExpc3QgKmxpc3Q7Ci0gICAgICAgIE5TU3RyaW5nICpsaXN0U3R5bGVUeXBlID0gW3Nl
bGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpAImxpc3Qtc3R5bGUtdHlwZSJdOwot
ICAgICAgICBpZiAoIWxpc3RTdHlsZVR5cGUgfHwgW2xpc3RTdHlsZVR5cGUgbGVuZ3RoXSA9PSAw
KSBsaXN0U3R5bGVUeXBlID0gQCJkZWNpbWFsIjsKLSAgICAgICAgbGlzdCA9IFtbTlNUZXh0TGlz
dCBhbGxvY10gaW5pdFdpdGhNYXJrZXJGb3JtYXQ6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJ7JUB9LiIsIGxpc3RTdHlsZVR5cGVdIG9wdGlvbnM6MF07Ci0gICAgICAgIGlmIChbZWxlbWVu
dCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0YXJ0KV0pIHsKLSAgICAgICAgICAgIE5T
SW50ZWdlciBzdGFydGluZ0l0ZW1OdW1iZXIgPSBbKERPTUhUTUxPTGlzdEVsZW1lbnQgKillbGVt
ZW50IHN0YXJ0XTsKLSAgICAgICAgICAgIFtsaXN0IHNldFN0YXJ0aW5nSXRlbU51bWJlcjpzdGFy
dGluZ0l0ZW1OdW1iZXJdOwotICAgICAgICB9Ci0gICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVj
dDpsaXN0XTsKLSAgICAgICAgW2xpc3QgcmVsZWFzZV07Ci0gICAgfSBlbHNlIGlmIChbQCJRIiBp
c0VxdWFsVG9TdHJpbmc6dGFnXSkgewotICAgICAgICBbc2VsZiBfYWRkUXVvdGVGb3JFbGVtZW50
OmVsZW1lbnQgb3BlbmluZzpZRVMgbGV2ZWw6X3F1b3RlTGV2ZWwrK107Ci0gICAgfSBlbHNlIGlm
IChbQCJJTlBVVCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKLSAgICAgICAgaWYgKFtlbGVtZW50
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodHlwZSldICYmIFtlbGVtZW50IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IodmFsdWUpXSAmJiBbQCJ0ZXh0IiBjb21wYXJlOlsoRE9NSFRN
TElucHV0RWxlbWVudCAqKWVsZW1lbnQgdHlwZV0gb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNl
YXJjaF0gPT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAgICAgICAgTlNTdHJpbmcgKnZhbHVlID0g
WyhET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVudCB2YWx1ZV07Ci0gICAgICAgICAgICBpZiAo
dmFsdWUgJiYgW3ZhbHVlIGxlbmd0aF0gPiAwKSBbc2VsZiBfYWRkVmFsdWU6dmFsdWUgZm9yRWxl
bWVudDplbGVtZW50XTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoW0AiVEVYVEFSRUEiIGlz
RXF1YWxUb1N0cmluZzp0YWddKSB7Ci0gICAgICAgIGlmIChbZWxlbWVudCByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHZhbHVlKV0pIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICp2YWx1ZSA9
IFsoRE9NSFRNTFRleHRBcmVhRWxlbWVudCAqKWVsZW1lbnQgdmFsdWVdOwotICAgICAgICAgICAg
aWYgKHZhbHVlICYmIFt2YWx1ZSBsZW5ndGhdID4gMCkgW3NlbGYgX2FkZFZhbHVlOnZhbHVlIGZv
ckVsZW1lbnQ6ZWxlbWVudF07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gTk87Ci0gICAg
fQotICAgIHJldHVybiByZXR2YWw7Ci19Ci0KLS0gKHZvaWQpX2FkZE1hcmtlcnNUb0xpc3Q6KE5T
VGV4dExpc3QgKilsaXN0IHJhbmdlOihOU1JhbmdlKXJhbmdlCi17Ci0gICAgTlNJbnRlZ2VyIGl0
ZW1OdW0gPSBbbGlzdCBzdGFydGluZ0l0ZW1OdW1iZXJdOwotICAgIE5TU3RyaW5nICpzdHJpbmcg
PSBbX2F0dHJTdHIgc3RyaW5nXSwgKnN0cmluZ1RvSW5zZXJ0OwotICAgIE5TRGljdGlvbmFyeSAq
YXR0cnNUb0luc2VydCA9IG5pbDsKLSAgICBOU0ZvbnQgKmZvbnQ7Ci0gICAgTlNQYXJhZ3JhcGhT
dHlsZSAqcGFyYWdyYXBoU3R5bGU7Ci0gICAgTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgKm5ld1N0
eWxlOwotICAgIE5TVGV4dFRhYiAqdGFiID0gbmlsLCAqdGFiVG9SZW1vdmU7Ci0gICAgTlNSYW5n
ZSBwYXJhZ3JhcGhSYW5nZSwgc3R5bGVSYW5nZTsKLSAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGgg
PSBbX2F0dHJTdHIgbGVuZ3RoXSwgbGlzdEluZGV4LCBpZHgsIGluc2VydExlbmd0aCwgaSwgY291
bnQ7Ci0gICAgTlNBcnJheSAqdGV4dExpc3RzOwotICAgIENHRmxvYXQgbWFya2VyTG9jYXRpb24s
IGxpc3RMb2NhdGlvbiwgcG9pbnRTaXplOwotICAgIAotICAgIGlmIChyYW5nZS5sZW5ndGggPT0g
MCB8fCByYW5nZS5sb2NhdGlvbiA+PSB0ZXh0TGVuZ3RoKSByZXR1cm47Ci0gICAgaWYgKE5TTWF4
UmFuZ2UocmFuZ2UpID4gdGV4dExlbmd0aCkgcmFuZ2UubGVuZ3RoID0gdGV4dExlbmd0aCAtIHJh
bmdlLmxvY2F0aW9uOwotICAgIHBhcmFncmFwaFN0eWxlID0gW19hdHRyU3RyIGF0dHJpYnV0ZTpO
U1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZSBhdEluZGV4OnJhbmdlLmxvY2F0aW9uIGVmZmVj
dGl2ZVJhbmdlOk5VTExdOwotICAgIGlmIChwYXJhZ3JhcGhTdHlsZSkgewotICAgICAgICB0ZXh0
TGlzdHMgPSBbcGFyYWdyYXBoU3R5bGUgdGV4dExpc3RzXTsKLSAgICAgICAgbGlzdEluZGV4ID0g
W3RleHRMaXN0cyBpbmRleE9mT2JqZWN0Omxpc3RdOwotICAgICAgICBpZiAodGV4dExpc3RzICYm
IGxpc3RJbmRleCAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICBmb3IgKGlkeCA9IHJhbmdl
LmxvY2F0aW9uOyBpZHggPCBOU01heFJhbmdlKHJhbmdlKTspIHsKLSAgICAgICAgICAgICAgICBw
YXJhZ3JhcGhSYW5nZSA9IFtzdHJpbmcgcGFyYWdyYXBoUmFuZ2VGb3JSYW5nZTpOU01ha2VSYW5n
ZShpZHgsIDApXTsKLSAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTdHlsZSA9IFtfYXR0clN0ciBh
dHRyaWJ1dGU6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDppZHggZWZmZWN0
aXZlUmFuZ2U6JnN0eWxlUmFuZ2VdOwotICAgICAgICAgICAgICAgIGZvbnQgPSBbX2F0dHJTdHIg
YXR0cmlidXRlOk5TRm9udEF0dHJpYnV0ZU5hbWUgYXRJbmRleDppZHggZWZmZWN0aXZlUmFuZ2U6
TlVMTF07Ci0gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gZm9udCA/IFtmb250IHBvaW50U2l6
ZV0gOiAxMi4wOwotICAgICAgICAgICAgICAgIGlmIChbW3BhcmFncmFwaFN0eWxlIHRleHRMaXN0
c10gY291bnRdID09IGxpc3RJbmRleCArIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5n
VG9JbnNlcnQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlx0JUBcdCIsIFtsaXN0IG1h
cmtlckZvckl0ZW1OdW1iZXI6aXRlbU51bSsrXV07Ci0gICAgICAgICAgICAgICAgICAgIGluc2Vy
dExlbmd0aCA9IFtzdHJpbmdUb0luc2VydCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIV9mbGFncy5pc0luZGV4aW5nICYmICFfZmxhZ3MuaXNUZXN0aW5nKSBhdHRyc1RvSW5zZXJ0
ID0gW05TVGV4dExpc3QgX3N0YW5kYXJkTWFya2VyQXR0cmlidXRlc0ZvckF0dHJpYnV0ZXM6W19h
dHRyU3RyIGF0dHJpYnV0ZXNBdEluZGV4OnBhcmFncmFwaFJhbmdlLmxvY2F0aW9uIGVmZmVjdGl2
ZVJhbmdlOk5VTExdXTsKLSAgICAgICAgICAgICAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFy
YWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShwYXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiwgMCkgd2l0
aFN0cmluZzpzdHJpbmdUb0luc2VydF07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghX2ZsYWdz
LmlzSW5kZXhpbmcgJiYgIV9mbGFncy5pc1Rlc3RpbmcpIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVz
OmF0dHJzVG9JbnNlcnQgcmFuZ2U6TlNNYWtlUmFuZ2UocGFyYWdyYXBoUmFuZ2UubG9jYXRpb24s
IGluc2VydExlbmd0aCldOwotICAgICAgICAgICAgICAgICAgICByYW5nZS5sZW5ndGggKz0gaW5z
ZXJ0TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhSYW5nZS5sZW5ndGggKz0g
aW5zZXJ0TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoUmFuZ2UubG9j
YXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KSBfZG9tUmFuZ2VTdGFydEluZGV4ICs9IGluc2Vy
dExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5ld1N0
eWxlID0gW3BhcmFncmFwaFN0eWxlIG11dGFibGVDb3B5XTsKLSAgICAgICAgICAgICAgICAgICAg
bGlzdExvY2F0aW9uID0gKGxpc3RJbmRleCArIDEpICogMzYuMDsKLSAgICAgICAgICAgICAgICAg
ICAgbWFya2VyTG9jYXRpb24gPSBsaXN0TG9jYXRpb24gLSAyNS4wOwotICAgICAgICAgICAgICAg
ICAgICBbbmV3U3R5bGUgc2V0Rmlyc3RMaW5lSGVhZEluZGVudDowLjBdOwotICAgICAgICAgICAg
ICAgICAgICBbbmV3U3R5bGUgc2V0SGVhZEluZGVudDpsaXN0TG9jYXRpb25dOwotICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoKGNvdW50ID0gW1tuZXdTdHlsZSB0YWJTdG9wc10gY291bnRdKSA+
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIHRhYlRvUmVtb3ZlID0g
bmlsOyAhdGFiVG9SZW1vdmUgJiYgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YWIgPSBbW25ld1N0eWxlIHRhYlN0b3BzXSBvYmplY3RBdEluZGV4OmldOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbdGFiIGxvY2F0aW9uXSA8PSBsaXN0TG9j
YXRpb24pIHRhYlRvUmVtb3ZlID0gdGFiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYlRvUmVtb3ZlKSBbbmV3U3R5bGUgcmVtb3ZlVGFi
U3RvcDp0YWJdOyBlbHNlIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHRhYiA9IFtbTlNUZXh0VGFiIGFsbG9jXSBpbml0V2l0aFR5cGU6TlNMZWZ0VGFi
U3RvcFR5cGUgbG9jYXRpb246bWFya2VyTG9jYXRpb25dOwotICAgICAgICAgICAgICAgICAgICBb
bmV3U3R5bGUgYWRkVGFiU3RvcDp0YWJdOwotICAgICAgICAgICAgICAgICAgICBbdGFiIHJlbGVh
c2VdOwotICAgICAgICAgICAgICAgICAgICB0YWIgPSBbW05TVGV4dFRhYiBhbGxvY10gaW5pdFdp
dGhUZXh0QWxpZ25tZW50Ok5TTmF0dXJhbFRleHRBbGlnbm1lbnQgbG9jYXRpb246bGlzdExvY2F0
aW9uIG9wdGlvbnM6bmlsXTsKLSAgICAgICAgICAgICAgICAgICAgW25ld1N0eWxlIGFkZFRhYlN0
b3A6dGFiXTsKLSAgICAgICAgICAgICAgICAgICAgW3RhYiByZWxlYXNlXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFfZmxhZ3MuaXNJbmRleGluZyAmJiAhX2ZsYWdzLmlzVGVzdGluZykgW19h
dHRyU3RyIGFkZEF0dHJpYnV0ZTpOU1BhcmFncmFwaFN0eWxlQXR0cmlidXRlTmFtZSB2YWx1ZTpu
ZXdTdHlsZSByYW5nZTpwYXJhZ3JhcGhSYW5nZV07Ci0gICAgICAgICAgICAgICAgICAgIFtuZXdT
dHlsZSByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGlkeCA9IE5TTWF4UmFuZ2UocGFyYWdyYXBoUmFuZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNraXAgYW55IGRlZXBlci1uZXN0ZWQgbGlzdHMK
LSAgICAgICAgICAgICAgICAgICAgaWR4ID0gTlNNYXhSYW5nZShzdHlsZVJhbmdlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS0gKHZv
aWQpX2V4aXRFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudCB0YWc6KE5TU3RyaW5nICopdGFn
IGRpc3BsYXk6KE5TU3RyaW5nICopZGlzcGxheVZhbCBkZXB0aDooTlNJbnRlZ2VyKWRlcHRoIHN0
YXJ0SW5kZXg6KE5TVUludGVnZXIpc3RhcnRJbmRleAotewotICAgIE5TUmFuZ2UgcmFuZ2UgPSBO
U01ha2VSYW5nZShzdGFydEluZGV4LCBbX2F0dHJTdHIgbGVuZ3RoXSAtIHN0YXJ0SW5kZXgpOwot
ICAgIGlmIChyYW5nZS5sZW5ndGggPiAwICYmIFtAIkEiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7
Ci0gICAgICAgIE5TU3RyaW5nICp1cmxTdHJpbmcgPSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJo
cmVmIl0sICpzdHJpcHBlZFN0cmluZyA9IFt1cmxTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJh
Y3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJT
ZXRdXTsKLSAgICAgICAgaWYgKHVybFN0cmluZyAmJiBbdXJsU3RyaW5nIGxlbmd0aF0gPiAwICYm
IHN0cmlwcGVkU3RyaW5nICYmIFtzdHJpcHBlZFN0cmluZyBsZW5ndGhdID4gMCAmJiAhW3N0cmlw
cGVkU3RyaW5nIGhhc1ByZWZpeDpAIiMiXSkgewotICAgICAgICAgICAgTlNVUkwgKnVybCA9IGNv
cmUoW2VsZW1lbnQgb3duZXJEb2N1bWVudF0pLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRU
cmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7Ci0gICAgICAgICAgICBpZiAoIXVybCkgdXJs
ID0gY29yZShbZWxlbWVudCBvd25lckRvY3VtZW50XSktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGlu
Z0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzdHJpcHBlZFN0cmluZykpOwotICAgICAgICAgICAgaWYg
KCF1cmwpIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6c3RyaXBwZWRTdHJpbmcgcmVs
YXRpdmVUb1VSTDpfYmFzZVVSTF07Ci0gICAgICAgICAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5n
ICYmICFfZmxhZ3MuaXNUZXN0aW5nKSBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5TTGlua0F0dHJp
YnV0ZU5hbWUgdmFsdWU6dXJsID8gKGlkKXVybCA6IChpZCl1cmxTdHJpbmcgcmFuZ2U6cmFuZ2Vd
OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghX2ZsYWdzLnJlYWNoZWRFbmQgJiYgW3NlbGYg
X2VsZW1lbnRJc0Jsb2NrTGV2ZWw6ZWxlbWVudF0pIHsKLSAgICAgICAgW193cml0aW5nRGlyZWN0
aW9uQXJyYXkgcmVtb3ZlQWxsT2JqZWN0c107Ci0gICAgICAgIGlmIChbQCJ0YWJsZS1jZWxsIiBp
c0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gJiYgW190ZXh0QmxvY2tzIGNvdW50XSA9PSAwKSB7
Ci0gICAgICAgICAgICBbc2VsZiBfbmV3VGFiRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICAgICAg
fSBlbHNlIGlmIChbX3RleHRMaXN0cyBjb3VudF0gPiAwICYmIFtAImJsb2NrIiBpc0VxdWFsVG9T
dHJpbmc6ZGlzcGxheVZhbF0gJiYgIVtAIkxJIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSAmJiAhW0Ai
VUwiIGlzRXF1YWxUb1N0cmluZzp0YWddICYmICFbQCJPTCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10p
IHsKLSAgICAgICAgICAgIFtzZWxmIF9uZXdMaW5lRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFtzZWxmIF9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50OmVs
ZW1lbnQgdGFnOnRhZyBhbGxvd0VtcHR5OihyYW5nZS5sZW5ndGggPT0gMCkgc3VwcHJlc3NUcmFp
bGluZ1NwYWNlOllFU107Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFtfd3JpdGluZ0RpcmVj
dGlvbkFycmF5IGNvdW50XSA+IDApIHsKLSAgICAgICAgTlNTdHJpbmcgKmJpZGkgPSBbc2VsZiBf
c3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAidW5pY29kZS1iaWRpIl07Ci0gICAgICAg
IGlmIChiaWRpICYmIChbYmlkaSBpc0VxdWFsVG9TdHJpbmc6QCJlbWJlZCJdIHx8IFtiaWRpIGlz
RXF1YWxUb1N0cmluZzpAImJpZGktb3ZlcnJpZGUiXSkpIHsKLSAgICAgICAgICAgIFtfd3JpdGlu
Z0RpcmVjdGlvbkFycmF5IHJlbW92ZUxhc3RPYmplY3RdOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJhbmdlID0gTlNNYWtlUmFuZ2Uoc3RhcnRJbmRleCwgW19hdHRyU3RyIGxlbmd0aF0gLSBzdGFy
dEluZGV4KTsKLSAgICBpZiAoW0AidGFibGUiIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSAm
JiBbX3RleHRUYWJsZXMgY291bnRdID4gMCkgewotICAgICAgICBOU1ZhbHVlICprZXkgPSBbTlNW
YWx1ZSB2YWx1ZVdpdGhOb25yZXRhaW5lZE9iamVjdDpbX3RleHRUYWJsZXMgbGFzdE9iamVjdF1d
OwotICAgICAgICBET01Ob2RlICpmb290ZXIgPSBbX3RleHRUYWJsZUZvb3RlcnMgb2JqZWN0Rm9y
S2V5OmtleV07Ci0gICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdIDwgW190ZXh0Qmxv
Y2tzIGNvdW50XSArIDEpIHsKLSAgICAgICAgICAgIFtfdGV4dEJsb2NrcyByZW1vdmVMYXN0T2Jq
ZWN0XTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZm9vdGVyKSB7Ci0gICAgICAgICAgICBbc2Vs
ZiBfdHJhdmVyc2VGb290ZXJOb2RlOmZvb3RlciBkZXB0aDpkZXB0aCArIDFdOwotICAgICAgICAg
ICAgW190ZXh0VGFibGVGb290ZXJzIHJlbW92ZU9iamVjdEZvcktleTprZXldOwotICAgICAgICB9
Ci0gICAgICAgIFtfdGV4dFRhYmxlcyByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICAgICAgW190ZXh0
VGFibGVTcGFjaW5ncyByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICAgICAgW190ZXh0VGFibGVQYWRk
aW5ncyByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICAgICAgW190ZXh0VGFibGVSb3dzIHJlbW92ZUxh
c3RPYmplY3RdOwotICAgICAgICBbX3RleHRUYWJsZVJvd0FycmF5cyByZW1vdmVMYXN0T2JqZWN0
XTsKLSAgICB9IGVsc2UgaWYgKFtAInRhYmxlLXJvdyIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlW
YWxdICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPiAwKSB7Ci0gICAgICAgIE5TVGV4dFRhYmxlICp0
YWJsZSA9IFtfdGV4dFRhYmxlcyBsYXN0T2JqZWN0XTsKLSAgICAgICAgTlNUZXh0VGFibGVCbG9j
ayAqYmxvY2s7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5ICpyb3dBcnJheSA9IFtfdGV4dFRhYmxl
Um93QXJyYXlzIGxhc3RPYmplY3RdLCAqcHJldmlvdXNSb3dBcnJheTsKLSAgICAgICAgTlNVSW50
ZWdlciBpLCBjb3VudDsKLSAgICAgICAgTlNJbnRlZ2VyIG51bWJlck9mQ29sdW1ucyA9IFt0YWJs
ZSBudW1iZXJPZkNvbHVtbnNdOwotICAgICAgICBOU0ludGVnZXIgb3BlbkNvbHVtbjsKLSAgICAg
ICAgTlNJbnRlZ2VyIHJvd051bWJlciA9IFtbX3RleHRUYWJsZVJvd3MgbGFzdE9iamVjdF0gaW50
ZWdlclZhbHVlXTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgcm93TnVtYmVyKys7Ci0gICAg
ICAgICAgICBwcmV2aW91c1Jvd0FycmF5ID0gcm93QXJyYXk7Ci0gICAgICAgICAgICByb3dBcnJh
eSA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgICAgICBjb3VudCA9IFtwcmV2aW91
c1Jvd0FycmF5IGNvdW50XTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSBbcHJldmlvdXNSb3dBcnJheSBvYmplY3RBdElu
ZGV4OmldOwotICAgICAgICAgICAgICAgIGlmIChbYmxvY2sgc3RhcnRpbmdDb2x1bW5dICsgW2Js
b2NrIGNvbHVtblNwYW5dID4gbnVtYmVyT2ZDb2x1bW5zKSBudW1iZXJPZkNvbHVtbnMgPSBbYmxv
Y2sgc3RhcnRpbmdDb2x1bW5dICsgW2Jsb2NrIGNvbHVtblNwYW5dOwotICAgICAgICAgICAgICAg
IGlmIChbYmxvY2sgc3RhcnRpbmdSb3ddICsgW2Jsb2NrIHJvd1NwYW5dID4gcm93TnVtYmVyKSBb
cm93QXJyYXkgYWRkT2JqZWN0OmJsb2NrXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNv
dW50ID0gW3Jvd0FycmF5IGNvdW50XTsKLSAgICAgICAgICAgIG9wZW5Db2x1bW4gPSAwOwotICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBi
bG9jayA9IFtyb3dBcnJheSBvYmplY3RBdEluZGV4OmldOwotICAgICAgICAgICAgICAgIGlmIChv
cGVuQ29sdW1uID49IFtibG9jayBzdGFydGluZ0NvbHVtbl0gJiYgb3BlbkNvbHVtbiA8IFtibG9j
ayBzdGFydGluZ0NvbHVtbl0gKyBbYmxvY2sgY29sdW1uU3Bhbl0pIG9wZW5Db2x1bW4gPSBbYmxv
Y2sgc3RhcnRpbmdDb2x1bW5dICsgW2Jsb2NrIGNvbHVtblNwYW5dOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IHdoaWxlIChvcGVuQ29sdW1uID49IG51bWJlck9mQ29sdW1ucyk7Ci0gICAgICAg
IGlmICgoTlNVSW50ZWdlciludW1iZXJPZkNvbHVtbnMgPiBbdGFibGUgbnVtYmVyT2ZDb2x1bW5z
XSkgW3RhYmxlIHNldE51bWJlck9mQ29sdW1uczpudW1iZXJPZkNvbHVtbnNdOwotICAgICAgICBb
X3RleHRUYWJsZVJvd3MgcmVtb3ZlTGFzdE9iamVjdF07Ci0gICAgICAgIFtfdGV4dFRhYmxlUm93
cyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOnJvd051bWJlcl1dOwotICAg
ICAgICBbX3RleHRUYWJsZVJvd0FycmF5cyByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICAgICAgW190
ZXh0VGFibGVSb3dBcnJheXMgYWRkT2JqZWN0OnJvd0FycmF5XTsKLSAgICAgICAgaWYgKFtfdGV4
dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBjb3VudF0gPiAwKSBbX3RleHRUYWJsZVJvd0JhY2tn
cm91bmRDb2xvcnMgcmVtb3ZlTGFzdE9iamVjdF07Ci0gICAgfSBlbHNlIGlmIChbQCJ0YWJsZS1j
ZWxsIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0gJiYgW190ZXh0QmxvY2tzIGNvdW50XSA+
IDApIHsKLSAgICAgICAgd2hpbGUgKFtfdGV4dFRhYmxlcyBjb3VudF0gPiBbX3RleHRCbG9ja3Mg
Y291bnRdKSB7Ci0gICAgICAgICAgICBbX3RleHRUYWJsZXMgcmVtb3ZlTGFzdE9iamVjdF07Ci0g
ICAgICAgICAgICBbX3RleHRUYWJsZVNwYWNpbmdzIHJlbW92ZUxhc3RPYmplY3RdOwotICAgICAg
ICAgICAgW190ZXh0VGFibGVQYWRkaW5ncyByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICAgICAgICAg
IFtfdGV4dFRhYmxlUm93cyByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICAgICAgICAgIFtfdGV4dFRh
YmxlUm93QXJyYXlzIHJlbW92ZUxhc3RPYmplY3RdOwotICAgICAgICB9Ci0gICAgICAgIFtfdGV4
dEJsb2NrcyByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICB9IGVsc2UgaWYgKChbQCJVTCIgaXNFcXVh
bFRvU3RyaW5nOnRhZ10gfHwgW0AiT0wiIGlzRXF1YWxUb1N0cmluZzp0YWddKSAmJiBbX3RleHRM
aXN0cyBjb3VudF0gPiAwKSB7Ci0gICAgICAgIE5TVGV4dExpc3QgKmxpc3QgPSBbX3RleHRMaXN0
cyBsYXN0T2JqZWN0XTsKLSAgICAgICAgW3NlbGYgX2FkZE1hcmtlcnNUb0xpc3Q6bGlzdCByYW5n
ZTpyYW5nZV07Ci0gICAgICAgIFtfdGV4dExpc3RzIHJlbW92ZUxhc3RPYmplY3RdOwotICAgIH0g
ZWxzZSBpZiAoW0AiUSIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKLSAgICAgICAgW3NlbGYgX2Fk
ZFF1b3RlRm9yRWxlbWVudDplbGVtZW50IG9wZW5pbmc6Tk8gbGV2ZWw6LS1fcXVvdGVMZXZlbF07
Ci0gICAgfSBlbHNlIGlmIChbQCJTUEFOIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkgewotICAgICAg
ICBOU1N0cmluZyAqY2xhc3NOYW1lID0gW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAiY2xhc3MiXTsK
LSAgICAgICAgTlNNdXRhYmxlU3RyaW5nICptdXRhYmxlU3RyaW5nOwotICAgICAgICBOU1VJbnRl
Z2VyIGksIGNvdW50ID0gMDsKLSAgICAgICAgdW5pY2hhciBjOwotICAgICAgICBpZiAoW0AiQXBw
bGUtY29udmVydGVkLXNwYWNlIiBpc0VxdWFsVG9TdHJpbmc6Y2xhc3NOYW1lXSkgewotICAgICAg
ICAgICAgbXV0YWJsZVN0cmluZyA9IFtfYXR0clN0ciBtdXRhYmxlU3RyaW5nXTsKLSAgICAgICAg
ICAgIGZvciAoaSA9IHJhbmdlLmxvY2F0aW9uOyBpIDwgTlNNYXhSYW5nZShyYW5nZSk7IGkrKykg
ewotICAgICAgICAgICAgICAgIGMgPSBbbXV0YWJsZVN0cmluZyBjaGFyYWN0ZXJBdEluZGV4Omld
OwotICAgICAgICAgICAgICAgIGlmICgweGEwID09IGMpIFttdXRhYmxlU3RyaW5nIHJlcGxhY2VD
aGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShpLCAxKSB3aXRoU3RyaW5nOkAiICJdOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFtAIkFwcGxlLWNvbnZlcnRlZC10YWIiIGlz
RXF1YWxUb1N0cmluZzpjbGFzc05hbWVdKSB7Ci0gICAgICAgICAgICBtdXRhYmxlU3RyaW5nID0g
W19hdHRyU3RyIG11dGFibGVTdHJpbmddOwotICAgICAgICAgICAgZm9yIChpID0gcmFuZ2UubG9j
YXRpb247IGkgPCBOU01heFJhbmdlKHJhbmdlKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgTlNS
YW5nZSByYW5nZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAg
ICAgICAgICAgIGMgPSBbbXV0YWJsZVN0cmluZyBjaGFyYWN0ZXJBdEluZGV4OmldOwotICAgICAg
ICAgICAgICAgIGlmICgnICcgPT0gYyB8fCAweGEwID09IGMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID49IDQgfHwgaSArIDEg
Pj0gTlNNYXhSYW5nZShyYW5nZSkpIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UoaSArIDEg
LSBjb3VudCwgY291bnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChjb3VudCA+IDApIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UoaSAtIGNv
dW50LCBjb3VudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyYW5n
ZVRvUmVwbGFjZS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFttdXRhYmxlU3Ry
aW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOkAi
XHQiXTsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoIC09IChyYW5nZVRvUmVwbGFj
ZS5sZW5ndGggLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgaSAtPSAocmFuZ2VUb1JlcGxhY2Uu
bGVuZ3RoIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChOU01heFJhbmdlKHJhbmdlVG9S
ZXBsYWNlKSA8PSBfZG9tUmFuZ2VTdGFydEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBfZG9tUmFuZ2VTdGFydEluZGV4IC09IChyYW5nZVRvUmVwbGFjZS5sZW5ndGggLSAxKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9k
b21SYW5nZVN0YXJ0SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9kb21SYW5nZVN0
YXJ0SW5kZXggPSByYW5nZVRvUmVwbGFjZS5sb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0tICh2b2lkKV9wcm9jZXNzVGV4dDoo
RE9NQ2hhcmFjdGVyRGF0YSAqKXRleHQKLXsKLSAgICBOU1N0cmluZyAqaW5zdHIgPSBbdGV4dCBk
YXRhXSwgKm91dHN0ciA9IGluc3RyLCAqd2hpdGVzcGFjZVZhbCwgKnRyYW5zZm9ybVZhbDsKLSAg
ICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXSwgc3RhcnRPZmZzZXQg
PSAwLCBlbmRPZmZzZXQgPSBbaW5zdHIgbGVuZ3RoXTsKLSAgICB1bmljaGFyIGxhc3RDaGFyID0g
KHRleHRMZW5ndGggPiAwKSA/IFtbX2F0dHJTdHIgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OnRl
eHRMZW5ndGggLSAxXSA6ICdcbic7Ci0gICAgQk9PTCB3YXNTcGFjZSA9IE5PLCB3YXNMZWFkaW5n
ID0gWUVTLCBzdXBwcmVzc0xlYWRpbmdTcGFjZSA9ICgoX2ZsYWdzLmlzU29mdCAmJiBsYXN0Q2hh
ciA9PSAnICcpIHx8IGxhc3RDaGFyID09ICdcbicgfHwgbGFzdENoYXIgPT0gJ1xyJyB8fCBsYXN0
Q2hhciA9PSAnXHQnIHx8IGxhc3RDaGFyID09IE5TUGFyYWdyYXBoU2VwYXJhdG9yQ2hhcmFjdGVy
IHx8IGxhc3RDaGFyID09IE5TTGluZVNlcGFyYXRvckNoYXJhY3RlciB8fCBsYXN0Q2hhciA9PSBO
U0Zvcm1GZWVkQ2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IFdlYk5leHRMaW5lQ2hhcmFjdGVyKTsK
LSAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCk7
Ci0gICAgQ0ZNdXRhYmxlU3RyaW5nUmVmIG11dHN0ciA9IE5VTEw7Ci0gICAgd2hpdGVzcGFjZVZh
bCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOnRleHQgcHJvcGVydHk6QCJ3aGl0ZS1zcGFjZSJdOwot
ICAgIHRyYW5zZm9ybVZhbCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOnRleHQgcHJvcGVydHk6QCJ0
ZXh0LXRyYW5zZm9ybSJdOwotICAgIAotICAgIGlmIChfZG9tUmFuZ2UpIHsKLSAgICAgICAgaWYg
KHRleHQgPT0gW19kb21SYW5nZSBzdGFydENvbnRhaW5lcl0pIHsKLSAgICAgICAgICAgIHN0YXJ0
T2Zmc2V0ID0gKE5TVUludGVnZXIpW19kb21SYW5nZSBzdGFydE9mZnNldF07Ci0gICAgICAgICAg
ICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgICAgICAgICBf
ZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0ZXh0ID09
IFtfZG9tUmFuZ2UgZW5kQ29udGFpbmVyXSkgewotICAgICAgICAgICAgZW5kT2Zmc2V0ID0gKE5T
VUludGVnZXIpW19kb21SYW5nZSBlbmRPZmZzZXRdOwotICAgICAgICAgICAgX2ZsYWdzLnJlYWNo
ZWRFbmQgPSBZRVM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChzdGFydE9mZnNldCA+IDAgfHwg
ZW5kT2Zmc2V0IDwgW2luc3RyIGxlbmd0aF0pICYmIGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkg
ewotICAgICAgICAgICAgaW5zdHIgPSBbaW5zdHIgc3Vic3RyaW5nV2l0aFJhbmdlOk5TTWFrZVJh
bmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCldOwotICAgICAgICAgICAg
b3V0c3RyID0gaW5zdHI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKFt3aGl0ZXNwYWNlVmFs
IGhhc1ByZWZpeDpAInByZSJdKSB7Ci0gICAgICAgIGlmICh0ZXh0TGVuZ3RoID4gMCAmJiBbaW5z
dHIgbGVuZ3RoXSA+IDAgJiYgX2ZsYWdzLmlzU29mdCkgewotICAgICAgICAgICAgdW5pY2hhciBj
ID0gW2luc3RyIGNoYXJhY3RlckF0SW5kZXg6MF07Ci0gICAgICAgICAgICBpZiAoYyA9PSAnXG4n
IHx8IGMgPT0gJ1xyJyB8fCBjID09IE5TUGFyYWdyYXBoU2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGMg
PT0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGMgPT0gTlNGb3JtRmVlZENoYXJhY3RlciB8
fCBjID09IFdlYk5leHRMaW5lQ2hhcmFjdGVyKSByYW5nZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdl
KHRleHRMZW5ndGggLSAxLCAxKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIENG
U3RyaW5nSW5saW5lQnVmZmVyIGlubGluZUJ1ZmZlcjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IFRleHRCdWZmZXJTaXplID0gMjU1OwotCi0gICAgICAgIHVuaWNoYXIgYnVmZmVyW1RleHRC
dWZmZXJTaXplICsgMV07Ci0gICAgICAgIE5TVUludGVnZXIgaSwgY291bnQgPSBbaW5zdHIgbGVu
Z3RoXSwgaWR4ID0gMDsKLQotICAgICAgICBtdXRzdHIgPSBDRlN0cmluZ0NyZWF0ZU11dGFibGUo
TlVMTCwgMCk7Ci0gICAgICAgIENGU3RyaW5nSW5pdElubGluZUJ1ZmZlcigoQ0ZTdHJpbmdSZWYp
aW5zdHIsICZpbmxpbmVCdWZmZXIsIENGUmFuZ2VNYWtlKDAsIGNvdW50KSk7Ci0gICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICB1bmljaGFyIGMgPSBDRlN0
cmluZ0dldENoYXJhY3RlckZyb21JbmxpbmVCdWZmZXIoJmlubGluZUJ1ZmZlciwgaSk7Ci0gICAg
ICAgICAgICBpZiAoYyA9PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdc
dCcgfHwgYyA9PSAweGMgfHwgYyA9PSAweDIwMGIpIHsKLSAgICAgICAgICAgICAgICB3YXNTcGFj
ZSA9ICghd2FzTGVhZGluZyB8fCAhc3VwcHJlc3NMZWFkaW5nU3BhY2UpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod2FzU3BhY2UpIGJ1ZmZlcltpZHgrK10gPSAn
ICc7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2lkeCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAg
aWYgKGlkeCA+PSBUZXh0QnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBDRlN0cmlu
Z0FwcGVuZENoYXJhY3RlcnMobXV0c3RyLCBidWZmZXIsIGlkeCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlkeCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdhc1NwYWNl
ID0gd2FzTGVhZGluZyA9IE5POwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
ICh3YXNTcGFjZSkgYnVmZmVyW2lkeCsrXSA9ICcgJzsKLSAgICAgICAgaWYgKGlkeCA+IDApIENG
U3RyaW5nQXBwZW5kQ2hhcmFjdGVycyhtdXRzdHIsIGJ1ZmZlciwgaWR4KTsKLSAgICAgICAgb3V0
c3RyID0gKE5TU3RyaW5nICopbXV0c3RyOwotICAgIH0KLSAgICBpZiAoW291dHN0ciBsZW5ndGhd
ID4gMCkgewotICAgICAgICBpZiAoW0AiY2FwaXRhbGl6ZSIgaXNFcXVhbFRvU3RyaW5nOnRyYW5z
Zm9ybVZhbF0pIHsKLSAgICAgICAgICAgIG91dHN0ciA9IFtvdXRzdHIgY2FwaXRhbGl6ZWRTdHJp
bmddOwotICAgICAgICB9IGVsc2UgaWYgKFtAInVwcGVyY2FzZSIgaXNFcXVhbFRvU3RyaW5nOnRy
YW5zZm9ybVZhbF0pIHsKLSAgICAgICAgICAgIG91dHN0ciA9IFtvdXRzdHIgdXBwZXJjYXNlU3Ry
aW5nXTsKLSAgICAgICAgfSBlbHNlIGlmIChbQCJsb3dlcmNhc2UiIGlzRXF1YWxUb1N0cmluZzp0
cmFuc2Zvcm1WYWxdKSB7Ci0gICAgICAgICAgICBvdXRzdHIgPSBbb3V0c3RyIGxvd2VyY2FzZVN0
cmluZ107Ci0gICAgICAgIH0KLSAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5S
YW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOm91dHN0cl07Ci0gICAgICAgIHJhbmdlVG9S
ZXBsYWNlLmxlbmd0aCA9IFtvdXRzdHIgbGVuZ3RoXTsKLSAgICAgICAgaWYgKCFfZmxhZ3MuaXNJ
bmRleGluZykgewotICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyczsKLSAgICAgICAgICAg
IERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKXRleHQ7Ci0gICAgICAgICAgICB3
aGlsZSAoZWxlbWVudCAmJiBbZWxlbWVudCBub2RlVHlwZV0gIT0gRE9NX0VMRU1FTlRfTk9ERSkg
ZWxlbWVudCA9IChET01FbGVtZW50ICopW2VsZW1lbnQgcGFyZW50Tm9kZV07Ci0gICAgICAgICAg
ICBhdHRycyA9IFtzZWxmIF9hdHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICAgICAg
ICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiByYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKSBb
X2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07Ci0gICAg
ICAgIH0KLSAgICAgICAgX2ZsYWdzLmlzU29mdCA9IHdhc1NwYWNlOwotICAgIH0KLSAgICBpZiAo
bXV0c3RyKSBDRlJlbGVhc2UobXV0c3RyKTsKLX0KLQotLSAodm9pZClfdHJhdmVyc2VOb2RlOihE
T01Ob2RlICopbm9kZSBkZXB0aDooTlNJbnRlZ2VyKWRlcHRoIGVtYmVkZGVkOihCT09MKWVtYmVk
ZGVkCi17Ci0gICAgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGU7Ci0gICAgTlNBcnJheSAqY2hpbGRO
b2RlczsKLSAgICBOU1VJbnRlZ2VyIGksIGNvdW50LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0Owot
ICAgIEJPT0wgaXNTdGFydCA9IE5PLCBpc0VuZCA9IE5POwotCi0gICAgaWYgKF9mbGFncy5yZWFj
aGVkRW5kKSByZXR1cm47Ci0gICAgaWYgKF9kb21SYW5nZSAmJiAhX2ZsYWdzLnJlYWNoZWRTdGFy
dCAmJiBfZG9tU3RhcnRBbmNlc3RvcnMgJiYgIVtfZG9tU3RhcnRBbmNlc3RvcnMgY29udGFpbnNP
YmplY3Q6bm9kZV0pIHJldHVybjsKLSAgICAKLSAgICBub2RlVHlwZSA9IFtub2RlIG5vZGVUeXBl
XTsKLSAgICBjaGlsZE5vZGVzID0gW3NlbGYgX2NoaWxkcmVuRm9yTm9kZTpub2RlXTsKLSAgICBj
b3VudCA9IFtjaGlsZE5vZGVzIGNvdW50XTsKLSAgICBzdGFydE9mZnNldCA9IDA7Ci0gICAgZW5k
T2Zmc2V0ID0gY291bnQ7Ci0KLSAgICBpZiAoX2RvbVJhbmdlKSB7Ci0gICAgICAgIGlmIChub2Rl
ID09IFtfZG9tUmFuZ2Ugc3RhcnRDb250YWluZXJdKSB7Ci0gICAgICAgICAgICBzdGFydE9mZnNl
dCA9IChOU1VJbnRlZ2VyKVtfZG9tUmFuZ2Ugc3RhcnRPZmZzZXRdOwotICAgICAgICAgICAgaXNT
dGFydCA9IFlFUzsKLSAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkU3RhcnQgPSBZRVM7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG5vZGUgPT0gW19kb21SYW5nZSBlbmRDb250YWluZXJdKSB7Ci0g
ICAgICAgICAgICBlbmRPZmZzZXQgPSAoTlNVSW50ZWdlcilbX2RvbVJhbmdlIGVuZE9mZnNldF07
Ci0gICAgICAgICAgICBpc0VuZCA9IFlFUzsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBp
ZiAobm9kZVR5cGUgPT0gRE9NX0RPQ1VNRU5UX05PREUgfHwgbm9kZVR5cGUgPT0gRE9NX0RPQ1VN
RU5UX0ZSQUdNRU5UX05PREUpIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKLSAgICAgICAgICAgIGlmIChpc1N0YXJ0ICYmIGkgPT0gc3RhcnRPZmZzZXQpIF9kb21SYW5n
ZVN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKLSAgICAgICAgICAgIGlmICgoIWlzU3Rh
cnQgfHwgc3RhcnRPZmZzZXQgPD0gaSkgJiYgKCFpc0VuZCB8fCBlbmRPZmZzZXQgPiBpKSkgW3Nl
bGYgX3RyYXZlcnNlTm9kZTpbY2hpbGROb2RlcyBvYmplY3RBdEluZGV4OmldIGRlcHRoOmRlcHRo
ICsgMSBlbWJlZGRlZDplbWJlZGRlZF07Ci0gICAgICAgICAgICBpZiAoaXNFbmQgJiYgaSArIDEg
Pj0gZW5kT2Zmc2V0KSBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKLSAgICAgICAgICAgIGlmIChf
dGh1bWJuYWlsTGltaXQgPiAwICYmIFtfYXR0clN0ciBsZW5ndGhdID49IF90aHVtYm5haWxMaW1p
dCkgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7Ci0gICAgICAgICAgICBpZiAoX2ZsYWdzLnJlYWNo
ZWRFbmQpIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PSBET01f
RUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVu
dCAqKW5vZGU7Ci0gICAgICAgIE5TU3RyaW5nICp0YWcgPSBbZWxlbWVudCB0YWdOYW1lXSwgKmRp
c3BsYXlWYWwgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAiZGlzcGxh
eSJdLCAqZmxvYXRWYWwgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkAi
ZmxvYXQiXTsKLSAgICAgICAgQk9PTCBpc0Jsb2NrTGV2ZWwgPSBOTzsKLSAgICAgICAgaWYgKGZs
b2F0VmFsICYmIChbQCJsZWZ0IiBpc0VxdWFsVG9TdHJpbmc6ZmxvYXRWYWxdIHx8IFtAInJpZ2h0
IiBpc0VxdWFsVG9TdHJpbmc6ZmxvYXRWYWxdKSkgewotICAgICAgICAgICAgaXNCbG9ja0xldmVs
ID0gWUVTOwotICAgICAgICB9IGVsc2UgaWYgKGRpc3BsYXlWYWwpIHsKLSAgICAgICAgICAgIGlz
QmxvY2tMZXZlbCA9IChbQCJibG9jayIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdIHx8IFtA
Imxpc3QtaXRlbSIgaXNFcXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdIHx8IFtkaXNwbGF5VmFsIGhh
c1ByZWZpeDpAInRhYmxlIl0pOwotICAgICAgICB9Ci0gICAgICAgIFtfZWxlbWVudElzQmxvY2tM
ZXZlbCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOmlzQmxvY2tMZXZlbF0gZm9y
S2V5OmVsZW1lbnRdOwotICAgICAgICBpZiAoW3NlbGYgX2VudGVyRWxlbWVudDplbGVtZW50IHRh
Zzp0YWcgZGlzcGxheTpkaXNwbGF5VmFsXSkgewotICAgICAgICAgICAgTlNVSW50ZWdlciBzdGFy
dEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgICAgICAgICBpZiAoW3NlbGYgX3Byb2Nl
c3NFbGVtZW50OmVsZW1lbnQgdGFnOnRhZyBkaXNwbGF5OmRpc3BsYXlWYWwgZGVwdGg6ZGVwdGhd
KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzU3RhcnQgJiYgaSA9PSBzdGFydE9mZnNldCkgX2RvbVJhbmdl
U3RhcnRJbmRleCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICBpZiAo
KCFpc1N0YXJ0IHx8IHN0YXJ0T2Zmc2V0IDw9IGkpICYmICghaXNFbmQgfHwgZW5kT2Zmc2V0ID4g
aSkpIFtzZWxmIF90cmF2ZXJzZU5vZGU6W2NoaWxkTm9kZXMgb2JqZWN0QXRJbmRleDppXSBkZXB0
aDpkZXB0aCArIDEgZW1iZWRkZWQ6ZW1iZWRkZWRdOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0KSBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKF9mbGFncy5yZWFjaGVkRW5kKSBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgW3NlbGYgX2V4aXRFbGVtZW50OmVsZW1lbnQgdGFn
OnRhZyBkaXNwbGF5OmRpc3BsYXlWYWwgZGVwdGg6ZGVwdGggc3RhcnRJbmRleDpzdGFydEluZGV4
XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT0g
RE9NX1RFWFRfTk9ERSB8fCBub2RlVHlwZSA9PSBET01fQ0RBVEFfU0VDVElPTl9OT0RFKSB7Ci0g
ICAgICAgIFtzZWxmIF9wcm9jZXNzVGV4dDooRE9NQ2hhcmFjdGVyRGF0YSAqKW5vZGVdOwotICAg
IH0KLSAgICAKLSAgICBpZiAoaXNFbmQpIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwotfQotCi0t
ICh2b2lkKV90cmF2ZXJzZUZvb3Rlck5vZGU6KERPTU5vZGUgKilub2RlIGRlcHRoOihOU0ludGVn
ZXIpZGVwdGgKLXsKLSAgICBET01FbGVtZW50ICplbGVtZW50ID0gKERPTUVsZW1lbnQgKilub2Rl
OwotICAgIE5TQXJyYXkgKmNoaWxkTm9kZXMgPSBbc2VsZiBfY2hpbGRyZW5Gb3JOb2RlOm5vZGVd
OwotICAgIE5TU3RyaW5nICp0YWcgPSBAIlRCT0RZIiwgKmRpc3BsYXlWYWwgPSBAInRhYmxlLXJv
dy1ncm91cCI7Ci0gICAgTlNVSW50ZWdlciBpLCBjb3VudCA9IFtjaGlsZE5vZGVzIGNvdW50XSwg
c3RhcnRPZmZzZXQgPSAwLCBlbmRPZmZzZXQgPSBjb3VudDsKLSAgICBCT09MIGlzU3RhcnQgPSBO
TywgaXNFbmQgPSBOTzsKLQotICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkgcmV0dXJuOwotICAg
IGlmIChfZG9tUmFuZ2UgJiYgIV9mbGFncy5yZWFjaGVkU3RhcnQgJiYgX2RvbVN0YXJ0QW5jZXN0
b3JzICYmICFbX2RvbVN0YXJ0QW5jZXN0b3JzIGNvbnRhaW5zT2JqZWN0Om5vZGVdKSByZXR1cm47
Ci0gICAgaWYgKF9kb21SYW5nZSkgewotICAgICAgICBpZiAobm9kZSA9PSBbX2RvbVJhbmdlIHN0
YXJ0Q29udGFpbmVyXSkgewotICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAoTlNVSW50ZWdlcilb
X2RvbVJhbmdlIHN0YXJ0T2Zmc2V0XTsKLSAgICAgICAgICAgIGlzU3RhcnQgPSBZRVM7Ci0gICAg
ICAgICAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChub2RlID09IFtfZG9tUmFuZ2UgZW5kQ29udGFpbmVyXSkgewotICAgICAgICAgICAgZW5kT2Zm
c2V0ID0gKE5TVUludGVnZXIpW19kb21SYW5nZSBlbmRPZmZzZXRdOwotICAgICAgICAgICAgaXNF
bmQgPSBZRVM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKFtzZWxmIF9lbnRlckVsZW1lbnQ6
ZWxlbWVudCB0YWc6dGFnIGRpc3BsYXk6ZGlzcGxheVZhbF0pIHsKLSAgICAgICAgTlNVSW50ZWdl
ciBzdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgICAgIGlmIChbc2VsZiBfcHJv
Y2Vzc0VsZW1lbnQ6ZWxlbWVudCB0YWc6dGFnIGRpc3BsYXk6ZGlzcGxheVZhbCBkZXB0aDpkZXB0
aF0pIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzU3RhcnQgJiYgaSA9PSBzdGFydE9mZnNldCkgX2RvbVJhbmdlU3RhcnRJ
bmRleCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAgICAgICAgICAgICAgIGlmICgoIWlzU3RhcnQg
fHwgc3RhcnRPZmZzZXQgPD0gaSkgJiYgKCFpc0VuZCB8fCBlbmRPZmZzZXQgPiBpKSkgW3NlbGYg
X3RyYXZlcnNlTm9kZTpbY2hpbGROb2RlcyBvYmplY3RBdEluZGV4OmldIGRlcHRoOmRlcHRoICsg
MSBlbWJlZGRlZDpZRVNdOwotICAgICAgICAgICAgICAgIGlmIChpc0VuZCAmJiBpICsgMSA+PSBl
bmRPZmZzZXQpIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwotICAgICAgICAgICAgICAgIGlmIChf
ZmxhZ3MucmVhY2hlZEVuZCkgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBbc2Vs
ZiBfZXhpdEVsZW1lbnQ6ZWxlbWVudCB0YWc6dGFnIGRpc3BsYXk6ZGlzcGxheVZhbCBkZXB0aDpk
ZXB0aCBzdGFydEluZGV4OnN0YXJ0SW5kZXhdOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChp
c0VuZCkgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7Ci19Ci0KLS0gKHZvaWQpX2FkanVzdFRyYWls
aW5nTmV3bGluZQotewotICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5n
dGhdOwotICAgIHVuaWNoYXIgbGFzdENoYXIgPSAodGV4dExlbmd0aCA+IDApID8gW1tfYXR0clN0
ciBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6dGV4dExlbmd0aCAtIDFdIDogMDsKLSAgICBCT09M
IGFscmVhZHlIYXNUcmFpbGluZ05ld2xpbmUgPSAobGFzdENoYXIgPT0gJ1xuJyB8fCBsYXN0Q2hh
ciA9PSAnXHInIHx8IGxhc3RDaGFyID09IE5TUGFyYWdyYXBoU2VwYXJhdG9yQ2hhcmFjdGVyIHx8
IGxhc3RDaGFyID09IE5TTGluZVNlcGFyYXRvckNoYXJhY3RlciB8fCBsYXN0Q2hhciA9PSBXZWJO
ZXh0TGluZUNoYXJhY3Rlcik7Ci0gICAgaWYgKF9mbGFncy5oYXNUcmFpbGluZ05ld2xpbmUgJiYg
IWFscmVhZHlIYXNUcmFpbGluZ05ld2xpbmUpCi0gICAgICAgIFtfYXR0clN0ciByZXBsYWNlQ2hh
cmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCkgd2l0aFN0cmluZzpAIlxu
Il07Ci19Ci0KLS0gKHZvaWQpX2xvYWRGcm9tRE9NUmFuZ2UKLXsKLSAgICBpZiAoLTEgPT0gX2Vy
cm9yQ29kZSkgewotICAgICAgICBET01Ob2RlICpjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IFtf
ZG9tUmFuZ2UgY29tbW9uQW5jZXN0b3JDb250YWluZXJdLCAqYW5jZXN0b3JDb250YWluZXIgPSBb
X2RvbVJhbmdlIHN0YXJ0Q29udGFpbmVyXTsKLSAgICAgICAgCi0gICAgICAgIF9kb21TdGFydEFu
Y2VzdG9ycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgICAgICB3aGlsZSAo
YW5jZXN0b3JDb250YWluZXIpIHsKLSAgICAgICAgICAgIFtfZG9tU3RhcnRBbmNlc3RvcnMgYWRk
T2JqZWN0OmFuY2VzdG9yQ29udGFpbmVyXTsKLSAgICAgICAgICAgIGlmIChhbmNlc3RvckNvbnRh
aW5lciA9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lcikgYnJlYWs7Ci0gICAgICAgICAgICBhbmNl
c3RvckNvbnRhaW5lciA9IFthbmNlc3RvckNvbnRhaW5lciBwYXJlbnROb2RlXTsKLSAgICAgICAg
fQotICAgICAgICBfZG9jdW1lbnQgPSBbY29tbW9uQW5jZXN0b3JDb250YWluZXIgb3duZXJEb2N1
bWVudF07Ci0gICAgICAgIF9kYXRhU291cmNlID0gKERvY3VtZW50TG9hZGVyICopY29yZShfZG9j
dW1lbnQpLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKLSAgICAgICAgaWYg
KF90ZXh0U2l6ZU11bHRpcGxpZXIgPD0gMC4wKSBfdGV4dFNpemVNdWx0aXBsaWVyID0gMS4wOwot
ICAgICAgICBpZiAoX2RlZmF1bHRGb250U2l6ZSA8PSAwLjApIF9kZWZhdWx0Rm9udFNpemUgPSAx
Mi4wOwotICAgICAgICBpZiAoX21pbmltdW1Gb250U2l6ZSA8IDEuMCkgX21pbmltdW1Gb250U2l6
ZSA9IDEuMDsKLSAgICAgICAgaWYgKF9kb2N1bWVudCAmJiBfZGF0YVNvdXJjZSkgewotICAgICAg
ICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBfZXJyb3JDb2RlID0g
MDsKLSAgICAgICAgICAgIFtzZWxmIF90cmF2ZXJzZU5vZGU6Y29tbW9uQW5jZXN0b3JDb250YWlu
ZXIgZGVwdGg6MCBlbWJlZGRlZDpOT107Ci0gICAgICAgICAgICBpZiAoX2RvbVJhbmdlU3RhcnRJ
bmRleCA+IDAgJiYgX2RvbVJhbmdlU3RhcnRJbmRleCA8PSBbX2F0dHJTdHIgbGVuZ3RoXSkgW19h
dHRyU3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9kb21SYW5nZVN0
YXJ0SW5kZXgpXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0g
ICAgW19hdHRyU3RyIHJlbGVhc2VdOwotICAgIFtfZG9tUmFuZ2UgcmVsZWFzZV07Ci0gICAgW19k
b21TdGFydEFuY2VzdG9ycyByZWxlYXNlXTsKLSAgICBbX3N0YW5kYXJkRm9udEZhbWlseSByZWxl
YXNlXTsKLSAgICBbX3RleHRMaXN0cyByZWxlYXNlXTsKLSAgICBbX3RleHRCbG9ja3MgcmVsZWFz
ZV07Ci0gICAgW190ZXh0VGFibGVzIHJlbGVhc2VdOwotICAgIFtfdGV4dFRhYmxlRm9vdGVycyBy
ZWxlYXNlXTsKLSAgICBbX3RleHRUYWJsZVNwYWNpbmdzIHJlbGVhc2VdOwotICAgIFtfdGV4dFRh
YmxlUGFkZGluZ3MgcmVsZWFzZV07Ci0gICAgW190ZXh0VGFibGVSb3dzIHJlbGVhc2VdOwotICAg
IFtfdGV4dFRhYmxlUm93QXJyYXlzIHJlbGVhc2VdOwotICAgIFtfdGV4dFRhYmxlUm93QmFja2dy
b3VuZENvbG9ycyByZWxlYXNlXTsKLSAgICBbX2NvbXB1dGVkU3R5bGVzRm9yRWxlbWVudHMgcmVs
ZWFzZV07Ci0gICAgW19zcGVjaWZpZWRTdHlsZXNGb3JFbGVtZW50cyByZWxlYXNlXTsKLSAgICBb
X3N0cmluZ3NGb3JOb2RlcyByZWxlYXNlXTsKLSAgICBbX2Zsb2F0c0Zvck5vZGVzIHJlbGVhc2Vd
OwotICAgIFtfY29sb3JzRm9yTm9kZXMgcmVsZWFzZV07Ci0gICAgW19hdHRyaWJ1dGVzRm9yRWxl
bWVudHMgcmVsZWFzZV07Ci0gICAgW19lbGVtZW50SXNCbG9ja0xldmVsIHJlbGVhc2VdOwotICAg
IFtfZm9udENhY2hlIHJlbGVhc2VdOwotICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbGVh
c2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaWQpaW5pdAotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKSByZXR1cm4gbmlsOwotICAgIAotICAgIF9h
dHRyU3RyID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKLQotICAg
IF90ZXh0TGlzdHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBfdGV4dEJs
b2NrcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIF90ZXh0VGFibGVzID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgX3RleHRUYWJsZUZvb3RlcnMgPSBb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIF90ZXh0VGFibGVTcGFjaW5n
cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIF90ZXh0VGFibGVQYWRkaW5n
cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIF90ZXh0VGFibGVSb3dzID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgX3RleHRUYWJsZVJvd0FycmF5cyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIF90ZXh0VGFibGVSb3dCYWNrZ3Jv
dW5kQ29sb3JzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgX2NvbXB1dGVk
U3R5bGVzRm9yRWxlbWVudHMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwot
ICAgIF9zcGVjaWZpZWRTdHlsZXNGb3JFbGVtZW50cyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF07Ci0gICAgX3N0cmluZ3NGb3JOb2RlcyA9IFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdF07Ci0gICAgX2Zsb2F0c0Zvck5vZGVzID0gW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XTsKLSAgICBfY29sb3JzRm9yTm9kZXMgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwotICAgIF9hdHRyaWJ1dGVzRm9yRWxlbWVudHMgPSBbW05TTXV0
YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIF9lbGVtZW50SXNCbG9ja0xldmVsID0g
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBfZm9udENhY2hlID0gW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBfd3JpdGluZ0RpcmVjdGlvbkFy
cmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBfdGV4dFNpemVNdWx0
aXBsaWVyID0gMS4wOwotICAgIF93ZWJWaWV3VGV4dFNpemVNdWx0aXBsaWVyID0gMC4wOwotICAg
IF9kZWZhdWx0VGFiSW50ZXJ2YWwgPSAzNi4wOwotICAgIF9kZWZhdWx0Rm9udFNpemUgPSAxMi4w
OwotICAgIF9taW5pbXVtRm9udFNpemUgPSAxLjA7Ci0gICAgX2Vycm9yQ29kZSA9IC0xOwotICAg
IF9pbmRleGluZ0xpbWl0ID0gMDsKLSAgICBfdGh1bWJuYWlsTGltaXQgPSAwOwotCi0gICAgX2Zs
YWdzLmlzSW5kZXhpbmcgPSAoX2luZGV4aW5nTGltaXQgPiAwKTsKLSAgICBfZmxhZ3MuaXNUZXN0
aW5nID0gMDsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaWQpaW5pdFdpdGhET01S
YW5nZTooRE9NUmFuZ2UgKilkb21SYW5nZQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpIHJldHVybiBuaWw7Ci0gICAgX2RvbVJhbmdlID0gW2RvbVJhbmdlIHJldGFp
bl07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJp
YnV0ZWRTdHJpbmcKLXsKLSAgICBbc2VsZiBfbG9hZEZyb21ET01SYW5nZV07Ci0gICAgcmV0dXJu
ICgwID09IF9lcnJvckNvZGUpID8gW1tfYXR0clN0ciByZXRhaW5dIGF1dG9yZWxlYXNlXSA6IG5p
bDsKLX0KLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bh
c3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1h
Yy5tbQppbmRleCA5NzQ1NmI1YWEyZDZkNDU5ODUwMDk5OTNiZWE0MGEwY2Q5NjI3NDlmLi44YzY2
MTBhMzA5ODA0NDk5ZjczY2Q2ZGQzOTI4ODY4OTRlNDY2ZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQpAQCAtMzgsNyArMzgsNiBAQAogI2ltcG9y
dCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKICNpbXBv
cnQgIkhUTUxBbmNob3JFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1MQ29udmVydGVyLmgiCiAjaW1w
b3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkltYWdlLmgiCiAjaW1wb3J0ICJLVVJMLmgiCkBA
IC0xNDYsMTUgKzE0NSw4IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oTlNQYXN0
ZWJvYXJkKiBwYXN0ZWJvYXJkLCBOU0FycmF5KiBwYXN0ZWJvYXJkVHlwCiAgICAgQVNTRVJUKHNl
bGVjdGVkUmFuZ2UpOwogICAgIAogICAgIC8vIFVzaW5nIGRpZmZlcmVudCBBUEkgZm9yIFdlYktp
dCBhbmQgV2ViS2l0Mi4KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7
Ci0gICAgaWYgKGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIGF0dHJp
YnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIF9pbml0V2l0aERPTVJh
bmdlOmtpdChzZWxlY3RlZFJhbmdlKV0gYXV0b3JlbGVhc2VdOwotICAgIGVsc2UgewotICAgICAg
ICAvLyBJbiBXZWJLaXQyIHdlIGFyZSB1c2luZyBhIGRpZmZlcmVudCB3YXkgdG8gY3JlYXRlIHRo
ZSBOU0F0dHJpYnV0ZWRTdHJpbmcgZnJvbSB0aGUgRE9NIHJhbmdlIHRoYXQgZG9lc24ndCByZXF1
aXJlIGFjY2VzcyB0byB0aGUgV2ViVmlldy4KLSAgICAgICAgUmV0YWluUHRyPFdlYkhUTUxDb252
ZXJ0ZXI+IGNvbnZlcnRlciA9IFtbV2ViSFRNTENvbnZlcnRlciBhbGxvY10gaW5pdFdpdGhET01S
YW5nZTpraXQoc2VsZWN0ZWRSYW5nZSldOwotICAgICAgICBpZiAoY29udmVydGVyKQotICAgICAg
ICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtjb252ZXJ0ZXIuZ2V0KCkgYXR0cmlidXRlZFN0cmlu
Z107Ci0gICAgfQorICAgIC8vIEZJWE1FIC0gV2UgbmVlZCB0byBoYXZlIGEgd2F5IHRvIGNyZWF0
ZSB0aGUgTlNBdHRyaWJ1dGVkU3RyaW5nIGZvciBXZWJLaXQyIHRoYXQgZG9lc24ndCByZXF1aXJl
IGFjY2Vzc2luZyB0aGUgV2ViRnJhbWUuCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1
dGVkU3RyaW5nID0gKGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpID8gW1tbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhET01SYW5nZTpraXQoc2VsZWN0ZWRSYW5nZSld
IGF1dG9yZWxlYXNlXSA6IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJp
bmc6c2VsZWN0ZWRSYW5nZS0+dGV4dCgpXSBhdXRvcmVsZWFzZV07CiAjaWZkZWYgQlVJTERJTkdf
T05fVElHRVIKICAgICAvLyA0OTMwMTk3OiBNYWlsIG92ZXJyaWRlcyBbV2ViSFRNTFZpZXcgcGFz
dGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXSBpbiBvcmRlciB0byBhZGQgYW5vdGhlciB0eXBlIHRv
IHRoZSBwYXN0ZWJvYXJkCiAgICAgLy8gYWZ0ZXIgV2ViS2l0IGRvZXMuICBPbiBUaWdlciB3ZSBt
dXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBzbyB0aGF0IE1haWwgY29kZSB3aWxsIGJlIGV4ZWN1dGVk
LCBtZWFuaW5nIHRoYXQgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>