<?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>136871</bug_id>
          
          <creation_ts>2014-09-16 14:57:44 -0700</creation_ts>
          <short_desc>REGRESSION(r173670): Creates layering violation (Requested by enrica on #webkit).</short_desc>
          <delta_ts>2014-09-16 16:33:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>136474</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>benjamin</cc>
    
    <cc>enrica</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1035597</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-16 14:57:44 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/173670 broke the build:
Creates layering violation (Requested by enrica on #webkit).

This is an automatic bug report generated by webkitbot. 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 fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035598</commentid>
    <comment_count>1</comment_count>
      <attachid>238214</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-16 14:58:10 -0700</bug_when>
    <thetext>Created attachment 238214
ROLLOUT of r173670

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

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035618</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-16 16:33:01 -0700</bug_when>
    <thetext>Attachment 238214 did not pass style-queue:


ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:210:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:211:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:247:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:248:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:249:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:250:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:251:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:255:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:256:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:257:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:347:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:382:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:410:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:477:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:478:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:479:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:480:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:481:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:499:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:502:  The parameter name &quot;block&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:513:  The parameter name &quot;list&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:513:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:626:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:724:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:724:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:765:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:768:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:769:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:770:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:771:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:772:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:773:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:812:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:824:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:986:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1236:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1236:  Line contains only semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1238:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1240:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1561:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1758:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1760:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1822:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1882:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1918:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:1946:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2038:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2088:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2171:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2175:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2176:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2177:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2213:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2214:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2220:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2279:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/editing/cocoa/HTMLConverter.mm:2344:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 57 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035619</commentid>
    <comment_count>3</comment_count>
      <attachid>238214</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-09-16 16:33:18 -0700</bug_when>
    <thetext>Comment on attachment 238214
ROLLOUT of r173670

Clearing flags on attachment: 238214

Committed r173679: &lt;http://trac.webkit.org/changeset/173679&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035620</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-09-16 16:33:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238214</attachid>
            <date>2014-09-16 14:58:10 -0700</date>
            <delta_ts>2014-09-16 16:33:18 -0700</delta_ts>
            <desc>ROLLOUT of r173670</desc>
            <filename>bug-136871-20140916145807.patch</filename>
            <type>text/plain</type>
            <size>256145</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjMyMjY3MGIzZjUzMDFj
YTczM2E1MGZhODE1NzU3OTYwNDZjZGM1MC4uMDNhYzIxZWQwNDMxY2YwNmIzOWFiYWQ1YTNkNmI2
ZjA5ZTk4OGY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTA5LTE2ICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTczNjcwLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM2ODcxCisKKyAgICAgICAgQ3JlYXRlcyBsYXllcmluZyB2aW9sYXRp
b24gKFJlcXVlc3RlZCBieSBlbnJpY2Egb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0ZWQg
Y2hhbmdlc2V0OgorCisgICAgICAgICJNb3ZlIEhUTUxDb252ZXJ0ZXIgZnJvbSBlZGl0aW5nL2Nv
Y29hIHRvIHBsYXRmb3JtL2NvY29hLiIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNjQ3NAorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8xNzM2NzAKKwogMjAxNC0wOS0xNiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBw
bGUuY29tPgogCiAgICAgICAgIE1vdmUgSFRNTENvbnZlcnRlciBmcm9tIGVkaXRpbmcvY29jb2Eg
dG8gcGxhdGZvcm0vY29jb2EuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjYzY2Y2YzI0ZjM5ZTBmNzA5ZWJiNzk4Yjg0OWEzOTcw
NmIzNDQzMS4uNWI0ZDM4ZWJlMDI5NDAwMzcwNjg0OGMzYmQwYWZlZjI4MDlhN2U1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjM4Miw2ICsyMzgyLDggQEAKIAkJN0MyQkREM0UxN0M3Rjk4QzAwMzhGRjE1IC8qIEpTRE9NR2xv
YmFsT2JqZWN0VGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MyQkREM0MxN0M3Rjk4QjAwMzhGRjE1IC8qIEpTRE9NR2xvYmFsT2JqZWN0VGFzay5o
ICovOyB9OwogCQk3QzNCNzk3MTE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0I3
OTZGMTkwODc1N0IwMEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuY3BwICovOyB9OwogCQk3
QzNCNzk3MjE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNCNzk3MDE5MDg3NTdCMDBC
NDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MzRTUxMEExOERGOEYzNTAwQzExMkY3IC8qIEhUTUxD
b252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDM0U1MTA4MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MzRTUxMEIxOERGOEYzNTAw
QzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzNFNTEwOTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRl
ci5tbSAqLzsgfTsKIAkJN0M0OEE2RDAxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ4
QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCAqLzsgfTsKIAkJN0M0
OEE2RDExOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0OEE2Q0YxOTFDOUQ2NTAwMDI2Njc0
IC8qIFdlYktpdE5hbWVzcGFjZS5oICovOyB9OwogCQk3QzQ5MDJBMjE4QjgyNUY4MDA3RDkyOTgg
LyogRE9NV2hlZWxFdmVudEludGVybmFsLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTk4OURDQTBBQ0M4QkJEMDBBMEJDNTEg
LyogRE9NV2hlZWxFdmVudEludGVybmFsLmggKi87IH07CkBAIC01NTI2LDggKzU1MjgsNiBAQAog
CQlDNTVDN0JBMTE3MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVDN0JBMDE3MThBRkJBMDAx
MzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0gKi87IH07CiAJCUM1NUUzOEJGMTAwNDBENUQwMEE1
NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmggKi87IH07CiAJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9y
YWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwICovOyB9OwotCQlDNTY0RkE3ODE5QzhEODVDMDA0ODhDQUMgLyogSFRNTENvbnZlcnRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU2NEZB
NzYxOUM4RDg1QzAwNDg4Q0FDIC8qIEhUTUxDb252ZXJ0ZXIuaCAqLzsgfTsKLQkJQzU2NEZBNzkx
OUM4RDg1QzAwNDg4Q0FDIC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTY0RkE3NzE5QzhEODVDMDA0ODhDQUMgLyogSFRN
TENvbnZlcnRlci5tbSAqLzsgfTsKIAkJQzU3MkVFMUYxMjAxQzlCQzAwN0Q4RjgyIC8qIEpTSURC
SW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
NzJFRTFEMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmggKi87IH07CiAJCUM1N0ZFREUx
MTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1N0ZFREUwMTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxl
U3lzdGVtLmNwcCAqLzsgfTsKIAkJQzU4MzYxQTkxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2
aWNlc0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oICovOyB9OwpAQCAt
OTUxNyw2ICs5NTE3LDggQEAKIAkJN0MyQkREM0MxN0M3Rjk4QjAwMzhGRjE1IC8qIEpTRE9NR2xv
YmFsT2JqZWN0VGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUds
b2JhbE9iamVjdFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzQjc5NkYx
OTA4NzU3QjAwQjQ3QTJEIC8qIFVzZXJNZXNzYWdlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzNCNzk3MDE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3Nh
Z2VIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZXNzYWdl
SGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNFNTEwODE4REY4RjM1
MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIVE1MQ29udmVydGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDM0U1
MTA5MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gSFRNTENvbnZlcnRlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0M0OEE2Q0UxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXROYW1lc3Bh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ4QTZDRjE5MUM5RDY1MDAw
MjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYktpdE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ4
QTZEMjE5MUM5RDhFMDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRO
YW1lc3BhY2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5MzYsOCArMTI5
MzgsNiBAQAogCQlDNTVDN0JBMDE3MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJUaGVtZUlPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRC
IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1NjRGQTc2MTlDOEQ4NUMwMDQ4OENB
QyAvKiBIVE1MQ29udmVydGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhU
TUxDb252ZXJ0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU2NEZBNzcxOUM4
RDg1QzAwNDg4Q0FDIC8qIEhUTUxDb252ZXJ0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBIVE1MQ29udmVydGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNTcyRUUxRDEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQkluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM1N0ZFREUwMTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTeXN0ZW0uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTgzNjFBNzE3NDQ1MjNGMDAxNzM1MTEgLyogRm9u
dFNlcnZpY2VzSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRTZXJ2
aWNlc0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2NzQsNiArMTY2NzQs
MTUgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJN0MzRTUx
MDcxOERGOEYxMjAwQzExMkY3IC8qIGNvY29hICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3QzNFNTEwODE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZl
cnRlci5oICovLAorCQkJCTdDM0U1MTA5MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVy
Lm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBjb2NvYTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTdDNzRENDMwMTg4MjNBNDIwMEU1RUQ1NyAvKiBpY3UgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTczMjUsNiArMTczMzQsNyBAQAog
CQk5MzMwOUQ4NjA5OUU2NDkxMDA1NkU1ODEgLyogZWRpdGluZyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0MzRTUxMDcxOERGOEYxMjAwQzExMkY3IC8q
IGNvY29hICovLAogCQkJCTQ0MzI5MkMxMEVCQTZENzMwMEU2MjAxNiAvKiBpb3MgKi8sCiAJCQkJ
RUQ1MDFEQzkwQjI0OUYzOTAwQUUxOEQ5IC8qIG1hYyAqLywKIAkJCQlDRTA4QzNDRjE1MkI1OTlB
MDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgKi8sCkBAIC0xODQ4Myw4
ICsxODQ5Myw2IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1RDhDNERCRDE0MjgyMjJDMDAyNkNF
NzIgLyogRGlzcGxheVNsZWVwRGlzYWJsZXJDb2NvYS5jcHAgKi8sCiAJCQkJNUQ4QzREQkUxNDI4
MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVlcERpc2FibGVyQ29jb2EuaCAqLywKLQkJCQlDNTY0
RkE3NjE5QzhEODVDMDA0ODhDQUMgLyogSFRNTENvbnZlcnRlci5oICovLAotCQkJCUM1NjRGQTc3
MTlDOEQ4NUMwMDQ4OENBQyAvKiBIVE1MQ29udmVydGVyLm1tICovLAogCQkJCUE1Qzk3NENGMTE0
ODVGRjEwMDY2RjJBQiAvKiBLZXlFdmVudENvY29hLmggKi8sCiAJCQkJQTVDOTc0RDAxMTQ4NUZG
MTAwNjZGMkFCIC8qIEtleUV2ZW50Q29jb2EubW0gKi8sCiAJCQkJQURCNkIyOTcxOEZCOTAyNDAw
ODE5NjNFIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlckNvY29hLm1tICovLApAQCAtMjM2NzEsNiAr
MjM2NzksNyBAQAogCQkJCUZEMDZERkE2MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjdFQkY2MTAyOTYyQkEwMDNE
MjUyQSAvKiBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFGNENFRUExOEJDMzUwMTAwQkMyRDM0IC8qIERlZmF1bHRWaXNpdGVkTGlua1N0b3JlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3QzNFNTEwQTE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZl
cnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMkMxMkIwMjY3NjAwQzFBMzU5IC8qIERl
bGF5RFNQS2VybmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAyRTEyQjAyNjc2MDBDMUEz
NTkgLyogRGVsYXlOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAzMTEyQjAyNjc2MDBD
MUEzNTkgLyogRGVsYXlQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLApAQCAtMjQyNDksNyArMjQy
NTgsNiBAQAogCQkJCUM0Q0Q2MjlCMTgzODM3NjYwMDdFQkFGMSAvKiBGcmFtZVNuYXBzaG90dGlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVBMjE0ODUwOTdBM0Y1MzAwQjkwNTBBIC8qIEZyYW1l
VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDQkZFRkEwOTc0RjYwNzAwMURBQzI1IC8qIEZy
YW1lVmlldy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzU2NEZBNzgxOUM4RDg1QzAwNDg4Q0FDIC8q
IEhUTUxDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MjA1QUIwMTIzOTI4Q0EwMEIx
NzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFDODFC
OEEwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZCOTk5OTMxODAzQjlEOTAwRDAxMTIxIC8qIEZ1bmN0aW9uQ2FsbC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yODkwOCw2ICsyODkxNiw3IEBACiAJCQkJMzEwNzhDQzcxODgwQUFCNTAwODA5
OURDIC8qIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzdBMTdBNzExMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZEQTNFOTU5MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0MzRTUxMEIxOERGOEYzNTAw
QzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlGREE5MzI1RDE2
NzAzQjJBMDA4OTgyREMgLyogT2ZmbGluZUF1ZGlvQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGREEzRTk1QjEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERTdGQzQ0MTgxOTA0QjEwMDJCQkI3NyAvKiBP
cmRlckl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk2MzcsNyArMjk2NDYsNiBAQAog
CQkJCTA3MUE5RUMyMTY4RkJDNDMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3NTlFOTQ1MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tD
dWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3Njk3MDg2MTQ2M0FEODcwMEY1MDJDRiAv
KiBUZXh0VHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1NjRGQTc5MTlDOEQ4NUMw
MDQ4OENBQyAvKiBIVE1MQ29udmVydGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjFBRDRFNzMx
M0ExMkE0NjAwODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDRDFFNzM0NzE2N0JDNzhFMDA5QTg4NUQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDQTgyOTYxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSU9TLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NjI1YjY0YjIzZGIxYThm
MWUxOTM4OTJhNTc5MDNlZWE3MWZiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLTIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEhUTUxDb252ZXJ0ZXJfaAorI2RlZmluZSBIVE1MQ29udmVydGVy
X2gKKworT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKK2NsYXNzIFJhbmdlOworICAgIAorV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVk
U3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJik7CisjaWYgIVBMQVRGT1JN
KElPUykKK1dFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0
ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmKTsKKyNlbmRpZgorCit9CisKKyNlbmRpZiAvLyBIVE1M
Q29udmVydGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRN
TENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRl
ci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41MThlNGZhOTllNDJiN2E5MWMzZWViY2E2Nzc4YTI5ODNjMjI5MzRj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29u
dmVydGVyLm1tCkBAIC0wLDAgKzEsMjYxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgorCisjaW1wb3J0ICJBcmNoaXZl
UmVzb3VyY2UuaCIKKyNpbXBvcnQgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgorI2lt
cG9ydCAiQ1NTUGFyc2VyLmgiCisjaW1wb3J0ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2ltcG9y
dCAiQ2FjaGVkSW1hZ2UuaCIKKyNpbXBvcnQgIkNoYXJhY3RlckRhdGEuaCIKKyNpbXBvcnQgIkNv
bG9yTWFjLmgiCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIu
aCIKKyNpbXBvcnQgIkVsZW1lbnQuaCIKKyNpbXBvcnQgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKKyNp
bXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZUxvYWRlci5o
IgorI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxGcmFtZUVsZW1lbnRCYXNl
LmgiCisjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MTWV0YUVsZW1l
bnQuaCIKKyNpbXBvcnQgIkhUTUxOYW1lcy5oIgorI2ltcG9ydCAiSFRNTE9MaXN0RWxlbWVudC5o
IgorI2ltcG9ydCAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2ltcG9ydCAiSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNpbXBvcnQgIkxvYWRl
ck5TVVJMRXh0cmFzLmgiCisjaW1wb3J0ICJSR0JDb2xvci5oIgorI2ltcG9ydCAiUmVuZGVySW1h
Z2UuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJTdHlsZVByb3BlcnRpZXMu
aCIKKyNpbXBvcnQgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgor
I2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvQVNDSUlDVHlwZS5oPgorI2lt
cG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQor
U09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUNvbG9yKQorCitTT0ZUX0xJTktfUFJJVkFURV9GUkFN
RVdPUksoVUlGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwgVUlGb250
KQorU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwgTlNDb2xvcikKK1NPRlRfTElOS19DTEFT
UyhVSUZvdW5kYXRpb24sIE5TU2hhZG93KQorU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwg
TlNUZXh0QXR0YWNobWVudCkKK1NPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5TTXV0YWJs
ZVBhcmFncmFwaFN0eWxlKQorU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwgTlNQYXJhZ3Jh
cGhTdHlsZSkKK1NPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5TVGV4dExpc3QpCitTT0ZU
X0xJTktfQ0xBU1MoVUlGb3VuZGF0aW9uLCBOU1RleHRCbG9jaykKK1NPRlRfTElOS19DTEFTUyhV
SUZvdW5kYXRpb24sIE5TVGV4dFRhYmxlQmxvY2spCitTT0ZUX0xJTktfQ0xBU1MoVUlGb3VuZGF0
aW9uLCBOU1RleHRUYWJsZSkKK1NPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5TVGV4dFRh
YikKKworU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNGb250QXR0cmlidXRlTmFt
ZSwgTlNTdHJpbmcgKikKKyNkZWZpbmUgTlNGb250QXR0cmlidXRlTmFtZSBnZXROU0ZvbnRBdHRy
aWJ1dGVOYW1lKCkKK1NPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TRm9yZWdyb3Vu
ZENvbG9yQXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKKyNkZWZpbmUgTlNGb3JlZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lIGdldE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSgpCitTT0ZU
X0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5h
bWUsIE5TU3RyaW5nICopCisjZGVmaW5lIE5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZSBn
ZXROU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUoKQorU09GVF9MSU5LX0NPTlNUQU5UKFVJ
Rm91bmRhdGlvbiwgTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICopCisjZGVm
aW5lIE5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lIGdldE5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVO
YW1lKCkKK1NPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TU3Ryb2tlV2lkdGhBdHRy
aWJ1dGVOYW1lLCBOU1N0cmluZyAqKQorI2RlZmluZSBOU1N0cm9rZVdpZHRoQXR0cmlidXRlTmFt
ZSBnZXROU1N0cm9rZVdpZHRoQXR0cmlidXRlTmFtZSgpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlG
b3VuZGF0aW9uLCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICopCisjZGVmaW5lIE5T
U2hhZG93QXR0cmlidXRlTmFtZSBnZXROU1NoYWRvd0F0dHJpYnV0ZU5hbWUoKQorU09GVF9MSU5L
X0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNLZXJuQXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikK
KyNkZWZpbmUgTlNLZXJuQXR0cmlidXRlTmFtZSBnZXROU0tlcm5BdHRyaWJ1dGVOYW1lKCkKK1NP
RlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TTGlnYXR1cmVBdHRyaWJ1dGVOYW1lLCBO
U1N0cmluZyAqKQorI2RlZmluZSBOU0xpZ2F0dXJlQXR0cmlidXRlTmFtZSBnZXROU0xpZ2F0dXJl
QXR0cmlidXRlTmFtZSgpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU1VuZGVy
bGluZVN0eWxlQXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKKyNkZWZpbmUgTlNVbmRlcmxpbmVT
dHlsZUF0dHJpYnV0ZU5hbWUgZ2V0TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUoKQorU09G
VF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1
dGVOYW1lLCBOU1N0cmluZyAqKQorI2RlZmluZSBOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0
ZU5hbWUgZ2V0TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lKCkKK1NPRlRfTElOS19D
T05TVEFOVChVSUZvdW5kYXRpb24sIE5TQmFzZWxpbmVPZmZzZXRBdHRyaWJ1dGVOYW1lLCBOU1N0
cmluZyAqKQorI2RlZmluZSBOU0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRlTmFtZSBnZXROU0Jhc2Vs
aW5lT2Zmc2V0QXR0cmlidXRlTmFtZSgpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9u
LCBOU1dyaXRpbmdEaXJlY3Rpb25BdHRyaWJ1dGVOYW1lLCBOU1N0cmluZyAqKQorI2RlZmluZSBO
U1dyaXRpbmdEaXJlY3Rpb25BdHRyaWJ1dGVOYW1lIGdldE5TV3JpdGluZ0RpcmVjdGlvbkF0dHJp
YnV0ZU5hbWUoKQorU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNQYXJhZ3JhcGhT
dHlsZUF0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICopCisjZGVmaW5lIE5TUGFyYWdyYXBoU3R5bGVB
dHRyaWJ1dGVOYW1lIGdldE5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lKCkKK1NPRlRfTElO
S19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TQXR0YWNobWVudEF0dHJpYnV0ZU5hbWUsIE5TU3Ry
aW5nICopCisjZGVmaW5lIE5TQXR0YWNobWVudEF0dHJpYnV0ZU5hbWUgZ2V0TlNBdHRhY2htZW50
QXR0cmlidXRlTmFtZSgpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0xpbmtB
dHRyaWJ1dGVOYW1lLCBOU1N0cmluZyAqKQorI2RlZmluZSBOU0xpbmtBdHRyaWJ1dGVOYW1lIGdl
dE5TTGlua0F0dHJpYnV0ZU5hbWUoKQorU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwg
TlNBdXRob3JEb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKKyNkZWZpbmUgTlNBdXRob3JE
b2N1bWVudEF0dHJpYnV0ZSBnZXROU0F1dGhvckRvY3VtZW50QXR0cmlidXRlKCkKK1NPRlRfTElO
S19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TRWRpdG9yRG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3Ry
aW5nICopCisjZGVmaW5lIE5TRWRpdG9yRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNFZGl0b3JEb2N1
bWVudEF0dHJpYnV0ZSgpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0dlbmVy
YXRvckRvY3VtZW50QXR0cmlidXRlLCBOU1N0cmluZyAqKQorI2RlZmluZSBOU0dlbmVyYXRvckRv
Y3VtZW50QXR0cmlidXRlIGdldE5TR2VuZXJhdG9yRG9jdW1lbnRBdHRyaWJ1dGUoKQorU09GVF9M
SU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNDb21wYW55RG9jdW1lbnRBdHRyaWJ1dGUsIE5T
U3RyaW5nICopCisjZGVmaW5lIE5TQ29tcGFueURvY3VtZW50QXR0cmlidXRlIGdldE5TQ29tcGFu
eURvY3VtZW50QXR0cmlidXRlKCkKK1NPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5T
RGlzcGxheU5hbWVEb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKKyNkZWZpbmUgTlNEaXNw
bGF5TmFtZURvY3VtZW50QXR0cmlidXRlIGdldE5TRGlzcGxheU5hbWVEb2N1bWVudEF0dHJpYnV0
ZSgpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0NvcHlyaWdodERvY3VtZW50
QXR0cmlidXRlLCBOU1N0cmluZyAqKQorI2RlZmluZSBOU0NvcHlyaWdodERvY3VtZW50QXR0cmli
dXRlIGdldE5TQ29weXJpZ2h0RG9jdW1lbnRBdHRyaWJ1dGUoKQorU09GVF9MSU5LX0NPTlNUQU5U
KFVJRm91bmRhdGlvbiwgTlNTdWJqZWN0RG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5nICopCisj
ZGVmaW5lIE5TU3ViamVjdERvY3VtZW50QXR0cmlidXRlIGdldE5TU3ViamVjdERvY3VtZW50QXR0
cmlidXRlKCkKK1NPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TQ29tbWVudERvY3Vt
ZW50QXR0cmlidXRlLCBOU1N0cmluZyAqKQorI2RlZmluZSBOU0NvbW1lbnREb2N1bWVudEF0dHJp
YnV0ZSBnZXROU0NvbW1lbnREb2N1bWVudEF0dHJpYnV0ZSgpCitTT0ZUX0xJTktfQ09OU1RBTlQo
VUlGb3VuZGF0aW9uLCBOU05vSW5kZXhEb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKKyNk
ZWZpbmUgTlNOb0luZGV4RG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNOb0luZGV4RG9jdW1lbnRBdHRy
aWJ1dGUoKQorU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNLZXl3b3Jkc0RvY3Vt
ZW50QXR0cmlidXRlLCBOU1N0cmluZyAqKQorI2RlZmluZSBOU0tleXdvcmRzRG9jdW1lbnRBdHRy
aWJ1dGUgZ2V0TlNLZXl3b3Jkc0RvY3VtZW50QXR0cmlidXRlKCkKK1NPRlRfTElOS19DT05TVEFO
VChVSUZvdW5kYXRpb24sIE5TQ3JlYXRpb25UaW1lRG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5n
ICopCisjZGVmaW5lIE5TQ3JlYXRpb25UaW1lRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNDcmVhdGlv
blRpbWVEb2N1bWVudEF0dHJpYnV0ZSgpCitTT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9u
LCBOU01vZGlmaWNhdGlvblRpbWVEb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKKyNkZWZp
bmUgTlNNb2RpZmljYXRpb25UaW1lRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNNb2RpZmljYXRpb25U
aW1lRG9jdW1lbnRBdHRyaWJ1dGUoKQorU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwg
TlNDb252ZXJ0ZWREb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKKyNkZWZpbmUgTlNDb252
ZXJ0ZWREb2N1bWVudEF0dHJpYnV0ZSBnZXROU0NvbnZlcnRlZERvY3VtZW50QXR0cmlidXRlKCkK
K1NPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TQ29jb2FWZXJzaW9uRG9jdW1lbnRB
dHRyaWJ1dGUsIE5TU3RyaW5nICopCisjZGVmaW5lIE5TQ29jb2FWZXJzaW9uRG9jdW1lbnRBdHRy
aWJ1dGUgZ2V0TlNDb2NvYVZlcnNpb25Eb2N1bWVudEF0dHJpYnV0ZSgpCisKKyNkZWZpbmUgUGxh
dGZvcm1OU1NoYWRvdyAgICAgICAgICAgIGdldE5TU2hhZG93Q2xhc3MoKQorI2RlZmluZSBQbGF0
Zm9ybU5TVGV4dEF0dGFjaG1lbnQgICAgZ2V0TlNUZXh0QXR0YWNobWVudENsYXNzKCkKKyNkZWZp
bmUgUGxhdGZvcm1OU1BhcmFncmFwaFN0eWxlICAgIGdldE5TUGFyYWdyYXBoU3R5bGVDbGFzcygp
CisjZGVmaW5lIFBsYXRmb3JtTlNUZXh0TGlzdCAgICAgICAgICBnZXROU1RleHRMaXN0Q2xhc3Mo
KQorI2RlZmluZSBQbGF0Zm9ybU5TVGV4dFRhYmxlQmxvY2sgICAgZ2V0TlNUZXh0VGFibGVCbG9j
a0NsYXNzKCkKKyNkZWZpbmUgUGxhdGZvcm1OU1RleHRUYWJsZSAgICAgICAgIGdldE5TVGV4dFRh
YmxlQ2xhc3MoKQorI2RlZmluZSBQbGF0Zm9ybU5TVGV4dFRhYiAgICAgICAgICAgZ2V0TlNUZXh0
VGFiQ2xhc3MoKQorI2RlZmluZSBQbGF0Zm9ybUNvbG9yICAgICAgICAgICAgICAgVUlDb2xvcgor
I2RlZmluZSBQbGF0Zm9ybUNvbG9yQ2xhc3MgICAgICAgICAgZ2V0VUlDb2xvckNsYXNzKCkKKyNk
ZWZpbmUgUGxhdGZvcm1OU0NvbG9yQ2xhc3MgICAgICAgIGdldE5TQ29sb3JDbGFzcygpCisjZGVm
aW5lIFBsYXRmb3JtRm9udCAgICAgICAgICAgICAgICBVSUZvbnQKKyNkZWZpbmUgUGxhdGZvcm1G
b250Q2xhc3MgICAgICAgICAgIGdldFVJRm9udENsYXNzKCkKKworLy8gV2UgZG9uJ3Qgc29mdGxp
bmsgTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWUgYmVjYXVzZSBVSUZvdW5kYXRpb24gc3RvcHBl
ZCBleHBvcnRpbmcgaXQuCisvLyBUaGlzIGF0dHJpYnV0ZSBpcyBiZWluZyBkZXByZWNhdGVkIGF0
IHRoZSBBUEkgbGV2ZWwsIGJ1dCBpbnRlcm5hbGx5IFVJRm91bmRhdGlvbgorLy8gd2lsbCBjb250
aW51ZSB0byBzdXBwb3J0IGl0Lgorc3RhdGljIE5TU3RyaW5nICpjb25zdCBOU1N1cGVyc2NyaXB0
QXR0cmlidXRlTmFtZSA9IEAiTlNTdXBlcnNjcmlwdCI7CisjZWxzZQorCisjZGVmaW5lIFBsYXRm
b3JtTlNTaGFkb3cgICAgICAgICAgICBOU1NoYWRvdworI2RlZmluZSBQbGF0Zm9ybU5TVGV4dEF0
dGFjaG1lbnQgICAgTlNUZXh0QXR0YWNobWVudAorI2RlZmluZSBQbGF0Zm9ybU5TUGFyYWdyYXBo
U3R5bGUgICAgTlNQYXJhZ3JhcGhTdHlsZQorI2RlZmluZSBQbGF0Zm9ybU5TVGV4dExpc3QgICAg
ICAgICAgTlNUZXh0TGlzdAorI2RlZmluZSBQbGF0Zm9ybU5TVGV4dFRhYmxlQmxvY2sgICAgTlNU
ZXh0VGFibGVCbG9jaworI2RlZmluZSBQbGF0Zm9ybU5TVGV4dFRhYmxlICAgICAgICAgTlNUZXh0
VGFibGUKKyNkZWZpbmUgUGxhdGZvcm1OU1RleHRUYWIgICAgICAgICAgIE5TVGV4dFRhYgorI2Rl
ZmluZSBQbGF0Zm9ybUNvbG9yICAgICAgICAgICAgICAgTlNDb2xvcgorI2RlZmluZSBQbGF0Zm9y
bUNvbG9yQ2xhc3MgICAgICAgICAgTlNDb2xvcgorI2RlZmluZSBQbGF0Zm9ybU5TQ29sb3JDbGFz
cyAgICAgICAgTlNDb2xvcgorI2RlZmluZSBQbGF0Zm9ybUZvbnQgICAgICAgICAgICAgICAgTlNG
b250CisjZGVmaW5lIFBsYXRmb3JtRm9udENsYXNzICAgICAgICAgICBOU0ZvbnQKKworI2RlZmlu
ZSBOU1RleHRBbGlnbm1lbnRMZWZ0ICAgICAgICAgTlNMZWZ0VGV4dEFsaWdubWVudAorI2RlZmlu
ZSBOU1RleHRBbGlnbm1lbnRSaWdodCAgICAgICAgTlNSaWdodFRleHRBbGlnbm1lbnQKKyNkZWZp
bmUgTlNUZXh0QWxpZ25tZW50Q2VudGVyICAgICAgIE5TQ2VudGVyVGV4dEFsaWdubWVudAorI2Rl
ZmluZSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQgICAgTlNKdXN0aWZpZWRUZXh0QWxpZ25tZW50
CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOworCisjaWYgUExBVEZPUk0oSU9TKQorCit0eXBlZGVmIGVudW0geworICAgIFVJRm9u
dFRyYWl0UGxhaW4gICAgICAgPSAweDAwMDAwMDAwLAorICAgIFVJRm9udFRyYWl0SXRhbGljICAg
ICAgPSAweDAwMDAwMDAxLCAvLyAxIDw8IDAKKyAgICBVSUZvbnRUcmFpdEJvbGQgICAgICAgID0g
MHgwMDAwMDAwMiwgLy8gMSA8PCAxCisgICAgVUlGb250VHJhaXRUaGluICAgICAgICA9ICgxIDw8
IDIpLAorICAgIFVJRm9udFRyYWl0TGlnaHQgICAgICAgPSAoMSA8PCAzKSwKKyAgICBVSUZvbnRU
cmFpdFVsdHJhTGlnaHQgID0gKDEgPDwgNCkKK30gVUlGb250VHJhaXQ7CisKK3R5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIE5TVW5kZXJsaW5lU3R5bGUpIHsKKyAgICBOU1VuZGVybGluZVN0eWxl
Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwLAorICAgIE5TVW5kZXJs
aW5lU3R5bGVTaW5nbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDEsCisgICAg
TlNVbmRlcmxpbmVTdHlsZVRoaWNrIE5TX0VOVU1fQVZBSUxBQkxFX0lPUyg3XzApICAgID0gMHgw
MiwKKyAgICBOU1VuZGVybGluZVN0eWxlRG91YmxlIE5TX0VOVU1fQVZBSUxBQkxFX0lPUyg3XzAp
ICAgPSAweDA5LAorCisgICAgTlNVbmRlcmxpbmVQYXR0ZXJuU29saWQgTlNfRU5VTV9BVkFJTEFC
TEVfSU9TKDdfMCkgICAgICA9IDB4MDAwMCwKKyAgICBOU1VuZGVybGluZVBhdHRlcm5Eb3QgTlNf
RU5VTV9BVkFJTEFCTEVfSU9TKDdfMCkgICAgICAgID0gMHgwMTAwLAorICAgIE5TVW5kZXJsaW5l
UGF0dGVybkRhc2ggTlNfRU5VTV9BVkFJTEFCTEVfSU9TKDdfMCkgICAgICAgPSAweDAyMDAsCisg
ICAgTlNVbmRlcmxpbmVQYXR0ZXJuRGFzaERvdCBOU19FTlVNX0FWQUlMQUJMRV9JT1MoN18wKSAg
ICA9IDB4MDMwMCwKKyAgICBOU1VuZGVybGluZVBhdHRlcm5EYXNoRG90RG90IE5TX0VOVU1fQVZB
SUxBQkxFX0lPUyg3XzApID0gMHgwNDAwLAorCisgICAgTlNVbmRlcmxpbmVCeVdvcmQgTlNfRU5V
TV9BVkFJTEFCTEVfSU9TKDdfMCkgPSAweDgwMDAKK307CisKK2VudW0geworICAgIE5TVGV4dEJs
b2NrQWJzb2x1dGVWYWx1ZVR5cGUgICAgPSAwLCAgICAvLyBBYnNvbHV0ZSB2YWx1ZSBpbiBwb2lu
dHMKKyAgICBOU1RleHRCbG9ja1BlcmNlbnRhZ2VWYWx1ZVR5cGUgID0gMSAgICAgLy8gUGVyY2Vu
dGFnZSB2YWx1ZSAob3V0IG9mIDEwMCkKK307Cit0eXBlZGVmIE5TVUludGVnZXIgTlNUZXh0Qmxv
Y2tWYWx1ZVR5cGU7CisKK2VudW0geworICAgIE5TVGV4dEJsb2NrV2lkdGggICAgICAgICAgICA9
IDAsCisgICAgTlNUZXh0QmxvY2tNaW5pbXVtV2lkdGggICAgID0gMSwKKyAgICBOU1RleHRCbG9j
a01heGltdW1XaWR0aCAgICAgPSAyLAorICAgIE5TVGV4dEJsb2NrSGVpZ2h0ICAgICAgICAgICA9
IDQsCisgICAgTlNUZXh0QmxvY2tNaW5pbXVtSGVpZ2h0ICAgID0gNSwKKyAgICBOU1RleHRCbG9j
a01heGltdW1IZWlnaHQgICAgPSA2Cit9OwordHlwZWRlZiBOU1VJbnRlZ2VyIE5TVGV4dEJsb2Nr
RGltZW5zaW9uOworCitlbnVtIHsKKyAgICBOU1RleHRCbG9ja1BhZGRpbmcgID0gLTEsCisgICAg
TlNUZXh0QmxvY2tCb3JkZXIgICA9ICAwLAorICAgIE5TVGV4dEJsb2NrTWFyZ2luICAgPSAgMQor
fTsKK3R5cGVkZWYgTlNJbnRlZ2VyIE5TVGV4dEJsb2NrTGF5ZXI7CisKK2VudW0geworICAgIE5T
VGV4dFRhYmxlQXV0b21hdGljTGF5b3V0QWxnb3JpdGhtID0gMCwKKyAgICBOU1RleHRUYWJsZUZp
eGVkTGF5b3V0QWxnb3JpdGhtICAgICA9IDEKK307Cit0eXBlZGVmIE5TVUludGVnZXIgTlNUZXh0
VGFibGVMYXlvdXRBbGdvcml0aG07CisKK2VudW0geworICAgIE5TVGV4dEJsb2NrVG9wQWxpZ25t
ZW50ICAgICAgICAgPSAwLAorICAgIE5TVGV4dEJsb2NrTWlkZGxlQWxpZ25tZW50ICAgICAgPSAx
LAorICAgIE5TVGV4dEJsb2NrQm90dG9tQWxpZ25tZW50ICAgICAgPSAyLAorICAgIE5TVGV4dEJs
b2NrQmFzZWxpbmVBbGlnbm1lbnQgICAgPSAzCit9OwordHlwZWRlZiBOU1VJbnRlZ2VyIE5TVGV4
dEJsb2NrVmVydGljYWxBbGlnbm1lbnQ7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIE5T
VGV4dEFsaWdubWVudCkgeworICAgIE5TVGV4dEFsaWdubWVudExlZnQgICAgICA9IDAsICAgIC8v
IFZpc3VhbGx5IGxlZnQgYWxpZ25lZAorICAgIE5TVGV4dEFsaWdubWVudENlbnRlciAgICA9IDEs
ICAgIC8vIFZpc3VhbGx5IGNlbnRlcmVkCisgICAgTlNUZXh0QWxpZ25tZW50UmlnaHQgICAgID0g
MiwgICAgLy8gVmlzdWFsbHkgcmlnaHQgYWxpZ25lZAorICAgIE5TVGV4dEFsaWdubWVudEp1c3Rp
ZmllZCA9IDMsICAgIC8vIEZ1bGx5LWp1c3RpZmllZC4gVGhlIGxhc3QgbGluZSBpbiBhIHBhcmFn
cmFwaCBpcyBuYXR1cmFsLWFsaWduZWQuCisgICAgTlNUZXh0QWxpZ25tZW50TmF0dXJhbCAgID0g
NCwgICAgLy8gSW5kaWNhdGVzIHRoZSBkZWZhdWx0IGFsaWdubWVudCBmb3Igc2NyaXB0Cit9IE5T
X0VOVU1fQVZBSUxBQkxFX0lPUyg2XzApOworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBO
U1dyaXRpbmdEaXJlY3Rpb24pIHsKKyAgICBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsICAgICAg
ID0gLTEsICAgIC8vIERldGVybWluZXMgZGlyZWN0aW9uIHVzaW5nIHRoZSBVbmljb2RlIEJpZGkg
QWxnb3JpdGhtIHJ1bGVzIFAyIGFuZCBQMworICAgIE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0ICAgPSAgMCwgICAgLy8gTGVmdCB0byByaWdodCB3cml0aW5nIGRpcmVjdGlvbgorICAgIE5T
V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0ICAgPSAgMSAgICAgLy8gUmlnaHQgdG8gbGVmdCB3
cml0aW5nIGRpcmVjdGlvbgorfSBOU19FTlVNX0FWQUlMQUJMRV9JT1MoNl8wKTsKKwordHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgTlNUZXh0V3JpdGluZ0RpcmVjdGlvbikgeworICAgIE5TVGV4
dFdyaXRpbmdEaXJlY3Rpb25FbWJlZGRpbmcgICAgID0gKDAgPDwgMSksCisgICAgTlNUZXh0V3Jp
dGluZ0RpcmVjdGlvbk92ZXJyaWRlICAgICAgPSAoMSA8PCAxKQorfSBOU19FTlVNX0FWQUlMQUJM
RV9JT1MoN18wKTsKKworZW51bSB7CisgICAgTlNFbnRlckNoYXJhY3RlciAgICAgICAgICAgICAg
ICA9IDB4MDAwMywKKyAgICBOU0JhY2tzcGFjZUNoYXJhY3RlciAgICAgICAgICAgID0gMHgwMDA4
LAorICAgIE5TVGFiQ2hhcmFjdGVyICAgICAgICAgICAgICAgICAgPSAweDAwMDksCisgICAgTlNO
ZXdsaW5lQ2hhcmFjdGVyICAgICAgICAgICAgICA9IDB4MDAwYSwKKyAgICBOU0Zvcm1GZWVkQ2hh
cmFjdGVyICAgICAgICAgICAgID0gMHgwMDBjLAorICAgIE5TQ2FycmlhZ2VSZXR1cm5DaGFyYWN0
ZXIgICAgICAgPSAweDAwMGQsCisgICAgTlNCYWNrVGFiQ2hhcmFjdGVyICAgICAgICAgICAgICA9
IDB4MDAxOSwKKyAgICBOU0RlbGV0ZUNoYXJhY3RlciAgICAgICAgICAgICAgID0gMHgwMDdmLAor
ICAgIE5TTGluZVNlcGFyYXRvckNoYXJhY3RlciAgICAgICAgPSAweDIwMjgsCisgICAgTlNQYXJh
Z3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgICA9IDB4MjAyOSwKKyAgICBOU0F0dGFjaG1lbnRDaGFy
YWN0ZXIgICAgICAgICAgID0gMHhGRkZDIC8vIFJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyB1c2Vk
IGZvciBhdHRhY2htZW50cworfTsKKworZW51bSB7CisgICAgTlNMZWZ0VGFiU3RvcFR5cGUgPSAw
LAorICAgIE5TUmlnaHRUYWJTdG9wVHlwZSwKKyAgICBOU0NlbnRlclRhYlN0b3BUeXBlLAorICAg
IE5TRGVjaW1hbFRhYlN0b3BUeXBlCit9OwordHlwZWRlZiBOU1VJbnRlZ2VyIE5TVGV4dFRhYlR5
cGU7CisKK0BpbnRlcmZhY2UgVUlDb2xvciA6IE5TT2JqZWN0CisrIChVSUNvbG9yICopY2xlYXJD
b2xvcjsKKy0gKENHRmxvYXQpYWxwaGFDb21wb25lbnQ7CisrIChVSUNvbG9yICopX2Rpc2FtYmln
dWF0ZWRfZHVlX3RvX0NJSW1hZ2VfY29sb3JXaXRoQ0dDb2xvcjooQ0dDb2xvclJlZiljZ0NvbG9y
OworQGVuZAorCitAaW50ZXJmYWNlIE5TQ29sb3IgOiBVSUNvbG9yCisrIChpZCljb2xvcldpdGhD
YWxpYnJhdGVkUmVkOihDR0Zsb2F0KXJlZCBncmVlbjooQ0dGbG9hdClncmVlbiBibHVlOihDR0Zs
b2F0KWJsdWUgYWxwaGE6KENHRmxvYXQpYWxwaGE7CitAZW5kCisKK0BpbnRlcmZhY2UgVUlGb250
CisrIChVSUZvbnQgKilmb250V2l0aE5hbWU6KE5TU3RyaW5nICopZm9udE5hbWUgc2l6ZTooQ0dG
bG9hdClmb250U2l6ZTsKKysgKFVJRm9udCAqKWZvbnRXaXRoRmFtaWx5TmFtZTooTlNTdHJpbmcg
KilmYW1pbHlOYW1lIHRyYWl0czooVUlGb250VHJhaXQpdHJhaXRzIHNpemU6KENHRmxvYXQpZm9u
dFNpemU7CistIChOU1N0cmluZyAqKWZhbWlseU5hbWU7CistIChDR0Zsb2F0KXBvaW50U2l6ZTsK
Ky0gKFVJRm9udCAqKWZvbnRXaXRoU2l6ZTooQ0dGbG9hdClmb250U2l6ZTsKKysgKE5TQXJyYXkg
KilmYW1pbHlOYW1lczsKKysgKE5TQXJyYXkgKilmb250TmFtZXNGb3JGYW1pbHlOYW1lOihOU1N0
cmluZyAqKWZhbWlseU5hbWU7CisrIChVSUZvbnQgKilzeXN0ZW1Gb250T2ZTaXplOihDR0Zsb2F0
KWZvbnRTaXplOworQGVuZAorCitAaW50ZXJmYWNlIE5TVGV4dFRhYgorLSAoaWQpaW5pdFdpdGhU
eXBlOihOU1RleHRUYWJUeXBlKXR5cGUgbG9jYXRpb246KENHRmxvYXQpbG9jOworLSAoaWQpaW5p
dFdpdGhUZXh0QWxpZ25tZW50OihOU1RleHRBbGlnbm1lbnQpYWxpZ25tZW50IGxvY2F0aW9uOihD
R0Zsb2F0KWxvYyBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zOworLSAoQ0dGbG9hdCls
b2NhdGlvbjsKKy0gKHZvaWQpcmVsZWFzZTsKK0BlbmQKKworQGludGVyZmFjZSBOU1BhcmFncmFw
aFN0eWxlIDogTlNPYmplY3QKKysgKE5TUGFyYWdyYXBoU3R5bGUgKilkZWZhdWx0UGFyYWdyYXBo
U3R5bGU7CistICh2b2lkKXNldEFsaWdubWVudDooTlNUZXh0QWxpZ25tZW50KWFsaWdubWVudDsK
Ky0gKHZvaWQpc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb246KE5TV3JpdGluZ0RpcmVjdGlvbil3cml0
aW5nRGlyZWN0aW9uOworLSAodm9pZClzZXRIZWFkSW5kZW50OihDR0Zsb2F0KWFGbG9hdDsKKy0g
KENHRmxvYXQpaGVhZEluZGVudDsKKy0gKHZvaWQpc2V0SGVhZGVyTGV2ZWw6KE5TSW50ZWdlcils
ZXZlbDsKKy0gKHZvaWQpc2V0Rmlyc3RMaW5lSGVhZEluZGVudDooQ0dGbG9hdClhRmxvYXQ7Cist
ICh2b2lkKXNldFRhaWxJbmRlbnQ6KENHRmxvYXQpYUZsb2F0OworLSAodm9pZClzZXRQYXJhZ3Jh
cGhTcGFjaW5nOihDR0Zsb2F0KXBhcmFncmFwaFNwYWNpbmc7CistICh2b2lkKXNldFRleHRMaXN0
czooTlNBcnJheSAqKWFycmF5OworLSAodm9pZClzZXRUZXh0QmxvY2tzOihOU0FycmF5ICopYXJy
YXk7CistICh2b2lkKXNldE1pbmltdW1MaW5lSGVpZ2h0OihDR0Zsb2F0KWFGbG9hdDsKKy0gKE5T
QXJyYXkgKil0ZXh0TGlzdHM7CistICh2b2lkKXJlbW92ZVRhYlN0b3A6KE5TVGV4dFRhYiAqKWFu
T2JqZWN0OworLSAodm9pZClhZGRUYWJTdG9wOihOU1RleHRUYWIgKilhbk9iamVjdDsKKy0gKE5T
QXJyYXkgKil0YWJTdG9wczsKKy0gKHZvaWQpc2V0SHlwaGVuYXRpb25GYWN0b3I6KGZsb2F0KWFG
YWN0b3I7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNTaGFkb3cKKy0gKHZvaWQpc2V0U2hhZG93T2Zm
c2V0OihDR1NpemUpc2l6ZTsKKy0gKHZvaWQpc2V0U2hhZG93Qmx1clJhZGl1czooQ0dGbG9hdCly
YWRpdXM7CistICh2b2lkKXNldFNoYWRvd0NvbG9yOihVSUNvbG9yICopY29sb3I7CitAZW5kCisK
K0BpbnRlcmZhY2UgTlNUZXh0QmxvY2sgOiBOU09iamVjdAorLSAodm9pZClzZXRWYWx1ZTooQ0dG
bG9hdCl2YWwgdHlwZTooTlNUZXh0QmxvY2tWYWx1ZVR5cGUpdHlwZSBmb3JEaW1lbnNpb246KE5T
VGV4dEJsb2NrRGltZW5zaW9uKWRpbWVuc2lvbjsKKy0gKHZvaWQpc2V0V2lkdGg6KENHRmxvYXQp
dmFsIHR5cGU6KE5TVGV4dEJsb2NrVmFsdWVUeXBlKXR5cGUgZm9yTGF5ZXI6KE5TVGV4dEJsb2Nr
TGF5ZXIpbGF5ZXIgZWRnZTooTlNSZWN0RWRnZSllZGdlOworLSAodm9pZClzZXRCYWNrZ3JvdW5k
Q29sb3I6KFVJQ29sb3IgKiljb2xvcjsKKy0gKFVJQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3I7Cist
ICh2b2lkKXNldEJvcmRlckNvbG9yOihVSUNvbG9yICopY29sb3IgZm9yRWRnZTooTlNSZWN0RWRn
ZSllZGdlOworLSAodm9pZClzZXRCb3JkZXJDb2xvcjooVUlDb2xvciAqKWNvbG9yOyAgICAgICAg
Ly8gQ29udmVuaWVuY2UgbWV0aG9kIHNldHMgYWxsIGVkZ2VzIGF0IG9uY2UKKy0gKHZvaWQpc2V0
VmVydGljYWxBbGlnbm1lbnQ6KE5TVGV4dEJsb2NrVmVydGljYWxBbGlnbm1lbnQpYWxpZ25tZW50
OworQGVuZAorCitAaW50ZXJmYWNlIE5TVGV4dExpc3QKKy0gKGlkKWluaXRXaXRoTWFya2VyRm9y
bWF0OihOU1N0cmluZyAqKWZvcm1hdCBvcHRpb25zOihOU1VJbnRlZ2VyKW1hc2s7CistICh2b2lk
KXNldFN0YXJ0aW5nSXRlbU51bWJlcjooTlNJbnRlZ2VyKWl0ZW1OdW07CistIChOU0ludGVnZXIp
c3RhcnRpbmdJdGVtTnVtYmVyOworLSAoTlNTdHJpbmcgKiltYXJrZXJGb3JJdGVtTnVtYmVyOihO
U0ludGVnZXIpaXRlbU51bTsKKy0gKHZvaWQpcmVsZWFzZTsKK0BlbmQKKworQGludGVyZmFjZSBO
U011dGFibGVQYXJhZ3JhcGhTdHlsZSA6IE5TUGFyYWdyYXBoU3R5bGUKKy0gKHZvaWQpc2V0RGVm
YXVsdFRhYkludGVydmFsOihDR0Zsb2F0KWFGbG9hdDsKKy0gKHZvaWQpc2V0VGFiU3RvcHM6KE5T
QXJyYXkgKilhcnJheTsKK0BlbmQKKworQGludGVyZmFjZSBOU1RleHRBdHRhY2htZW50IDogTlNP
YmplY3QKKy0gKGlkKWluaXRXaXRoRmlsZVdyYXBwZXI6KE5TRmlsZVdyYXBwZXIgKilmaWxlV3Jh
cHBlcjsKKyNpZiBQTEFURk9STShJT1MpCistICh2b2lkKXNldEJvdW5kczooQ0dSZWN0KWJvdW5k
czsKKyNlbmRpZgorLSAodm9pZClyZWxlYXNlOworQGVuZAorCitAaW50ZXJmYWNlIE5TVGV4dFRh
YmxlIDogTlNUZXh0QmxvY2sKKy0gKHZvaWQpc2V0TnVtYmVyT2ZDb2x1bW5zOihOU1VJbnRlZ2Vy
KW51bUNvbHM7CistICh2b2lkKXNldENvbGxhcHNlc0JvcmRlcnM6KEJPT0wpZmxhZzsKKy0gKHZv
aWQpc2V0SGlkZXNFbXB0eUNlbGxzOihCT09MKWZsYWc7CistICh2b2lkKXNldExheW91dEFsZ29y
aXRobTooTlNUZXh0VGFibGVMYXlvdXRBbGdvcml0aG0pYWxnb3JpdGhtOworLSAoTlNVSW50ZWdl
ciludW1iZXJPZkNvbHVtbnM7CistICh2b2lkKXJlbGVhc2U7CitAZW5kCisKK0BpbnRlcmZhY2Ug
TlNUZXh0VGFibGVCbG9jayA6IE5TVGV4dEJsb2NrCistIChpZClpbml0V2l0aFRhYmxlOihOU1Rl
eHRUYWJsZSAqKXRhYmxlIHN0YXJ0aW5nUm93OihOU0ludGVnZXIpcm93IHJvd1NwYW46KE5TSW50
ZWdlcilyb3dTcGFuIHN0YXJ0aW5nQ29sdW1uOihOU0ludGVnZXIpY29sIGNvbHVtblNwYW46KE5T
SW50ZWdlciljb2xTcGFuOyAgICAgLy8gRGVzaWduYXRlZCBpbml0aWFsaXplcgorLSAoTlNJbnRl
Z2VyKXN0YXJ0aW5nQ29sdW1uOworLSAoTlNJbnRlZ2VyKXN0YXJ0aW5nUm93OworLSAoTlNVSW50
ZWdlciludW1iZXJPZkNvbHVtbnM7CistIChOU0ludGVnZXIpY29sdW1uU3BhbjsKKy0gKE5TSW50
ZWdlcilyb3dTcGFuOworQGVuZAorCisjZWxzZQorc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVX
cmFwcGVyRm9yVVJMKERvY3VtZW50TG9hZGVyICosIE5TVVJMICopOworc3RhdGljIE5TRmlsZVdy
YXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbWVudChFbGVtZW50Kik7CisKK0BpbnRlcmZhY2UgTlNU
ZXh0QXR0YWNobWVudCAoV2ViQ29yZU5TVGV4dEF0dGFjaG1lbnQpCistICh2b2lkKXNldElnbm9y
ZXNPcmllbnRhdGlvbjooQk9PTClmbGFnOworLSAodm9pZClzZXRCb3VuZHM6KENHUmVjdClib3Vu
ZHM7CistIChCT09MKWlnbm9yZXNPcmllbnRhdGlvbjsKK0BlbmQKKworI2VuZGlmCisKKy8vIEFk
ZGl0aW9uYWwgY29udHJvbCBVbmljb2RlIGNoYXJhY3RlcnMKK2NvbnN0IHVuaWNoYXIgV2ViTmV4
dExpbmVDaGFyYWN0ZXIgPSAweDAwODU7CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IGRlZmF1bHRG
b250U2l6ZSA9IDEyOworc3RhdGljIGNvbnN0IENHRmxvYXQgbWluaW11bUZvbnRTaXplID0gMTsK
KworY2xhc3MgSFRNTENvbnZlcnRlckNhY2hlcyB7CitwdWJsaWM6CisgICAgU3RyaW5nIHByb3Bl
cnR5VmFsdWVGb3JOb2RlKE5vZGUmLCBDU1NQcm9wZXJ0eUlEICk7CisgICAgYm9vbCBmbG9hdFBy
b3BlcnR5VmFsdWVGb3JOb2RlKE5vZGUmLCBDU1NQcm9wZXJ0eUlELCBmbG9hdCYpOworICAgIENv
bG9yIGNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYsIENTU1Byb3BlcnR5SUQpOworCisg
ICAgYm9vbCBpc0Jsb2NrRWxlbWVudChFbGVtZW50Jik7CisgICAgYm9vbCBlbGVtZW50SGFzT3du
QmFja2dyb3VuZENvbG9yKEVsZW1lbnQmKTsKKworICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNv
bXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoRWxlbWVudCYsIENTU1Byb3BlcnR5SUQpOwor
ICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVs
ZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKTsKKworICAgIE5vZGUqIGNhY2hlQW5jZXN0b3JzT2ZTdGFy
dFRvQmVDb252ZXJ0ZWQoY29uc3QgUmFuZ2UmKTsKKyAgICBib29sIGlzQW5jZXN0b3JzT2ZTdGFy
dFRvQmVDb252ZXJ0ZWQoTm9kZSYgbm9kZSkgY29uc3QgeyByZXR1cm4gbV9hbmNlc3RvcnNVbmRl
ckNvbW1vbkFuY2VzdG9yLmNvbnRhaW5zKCZub2RlKTsgfQorCitwcml2YXRlOgorICAgIEhhc2hN
YXA8RWxlbWVudCosIHN0ZDo6dW5pcXVlX3B0cjxDb21wdXRlZFN0eWxlRXh0cmFjdG9yPj4gbV9j
b21wdXRlZFN0eWxlczsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2FuY2VzdG9yc1VuZGVyQ29tbW9u
QW5jZXN0b3I7Cit9OworCitAaW50ZXJmYWNlIE5TVGV4dExpc3QgKFdlYkNvcmVOU1RleHRMaXN0
RGV0YWlscykKKysgKE5TRGljdGlvbmFyeSAqKV9zdGFuZGFyZE1hcmtlckF0dHJpYnV0ZXNGb3JB
dHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilhdHRyczsKK0BlbmQKKworQGludGVyZmFjZSBOU1VS
TCAoV2ViQ29yZU5TVVJMRGV0YWlscykKKy8vIEZJWE1FOiBXaGF0IGlzIHRoZSByZWFzb24gdG8g
dXNlIHRoaXMgRm91bmRhdGlvbiBtZXRob2QsIGFuZCBub3QgK1tOU1VSTCBVUkxXaXRoU3RyaW5n
OnJlbGF0aXZlVG9VUkw6XT8KKysgKE5TVVJMICopX3dlYl9VUkxXaXRoU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZyByZWxhdGl2ZVRvVVJMOihOU1VSTCAqKWJhc2VVUkw7CitAZW5kCisKK0BpbnRl
cmZhY2UgTlNPYmplY3QoV2ViTWVzc2FnZURvY3VtZW50U2ltdWxhdGlvbikKKysgKHZvaWQpZG9j
dW1lbnQ6KE5TT2JqZWN0ICoqKW91dERvY3VtZW50IGF0dGFjaG1lbnQ6KE5TVGV4dEF0dGFjaG1l
bnQgKiopb3V0QXR0YWNobWVudCBmb3JVUkw6KE5TVVJMICopdXJsOworQGVuZAorCitjbGFzcyBI
VE1MQ29udmVydGVyIHsKK3B1YmxpYzoKKyAgICBIVE1MQ29udmVydGVyKFJhbmdlJik7CisgICAg
fkhUTUxDb252ZXJ0ZXIoKTsKKyAgICAKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGNvbnZlcnQo
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmPFJhbmdlPiBtX3JhbmdlOworICAgIERvY3VtZW50
TG9hZGVyKiBtX2RhdGFTb3VyY2U7CisgICAgCisgICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4s
IFJldGFpblB0cjxOU0RpY3Rpb25hcnk+PiBtX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKKyAgICBI
YXNoTWFwPFJldGFpblB0cjxOU1RleHRUYWJsZT4sIFJlZlB0cjxFbGVtZW50Pj4gbV90ZXh0VGFi
bGVGb290ZXJzOworICAgIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5Pj4gbV9hZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRzOworCisgICAgTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyAqX2F0dHJTdHI7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAq
X2RvY3VtZW50QXR0cnM7CisgICAgTlNVUkwgKl9iYXNlVVJMOworICAgIE5TTXV0YWJsZUFycmF5
ICpfdGV4dExpc3RzOworICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dEJsb2NrczsKKyAgICBOU011
dGFibGVBcnJheSAqX3RleHRUYWJsZXM7CisgICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVT
cGFjaW5nczsKKyAgICBOU011dGFibGVBcnJheSAqX3RleHRUYWJsZVBhZGRpbmdzOworICAgIE5T
TXV0YWJsZUFycmF5ICpfdGV4dFRhYmxlUm93czsKKyAgICBOU011dGFibGVBcnJheSAqX3RleHRU
YWJsZVJvd0FycmF5czsKKyAgICBOU011dGFibGVBcnJheSAqX3RleHRUYWJsZVJvd0JhY2tncm91
bmRDb2xvcnM7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2ZvbnRDYWNoZTsKKyAgICBOU011
dGFibGVBcnJheSAqX3dyaXRpbmdEaXJlY3Rpb25BcnJheTsKKyAgICAKKyAgICBDR0Zsb2F0IF9k
ZWZhdWx0VGFiSW50ZXJ2YWw7CisgICAgTlNVSW50ZWdlciBfZG9tUmFuZ2VTdGFydEluZGV4Owor
ICAgIE5TSW50ZWdlciBfcXVvdGVMZXZlbDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxIVE1MQ29u
dmVydGVyQ2FjaGVzPiBfY2FjaGVzOworCisgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQg
aW50IGlzU29mdDoxOworICAgICAgICB1bnNpZ25lZCBpbnQgcmVhY2hlZFN0YXJ0OjE7CisgICAg
ICAgIHVuc2lnbmVkIGludCByZWFjaGVkRW5kOjE7CisgICAgICAgIHVuc2lnbmVkIGludCBoYXNU
cmFpbGluZ05ld2xpbmU6MTsKKyAgICAgICAgdW5zaWduZWQgaW50IHBhZDoyNjsKKyAgICB9IF9m
bGFnczsKKyAgICAKKyAgICBQbGF0Zm9ybUNvbG9yICpfY29sb3JGb3JFbGVtZW50KEVsZW1lbnQm
LCBDU1NQcm9wZXJ0eUlEKTsKKyAgICAKKyAgICB2b2lkIF90cmF2ZXJzZU5vZGUoTm9kZSYsIHVu
c2lnbmVkIGRlcHRoLCBib29sIGVtYmVkZGVkKTsKKyAgICB2b2lkIF90cmF2ZXJzZUZvb3Rlck5v
ZGUoRWxlbWVudCYsIHVuc2lnbmVkIGRlcHRoKTsKKyAgICAKKyAgICBOU0RpY3Rpb25hcnkgKmNv
bXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQoRWxlbWVudCYpOworICAgIE5TRGljdGlvbmFyeSAq
YXR0cmlidXRlc0ZvckVsZW1lbnQoRWxlbWVudCYpOworICAgIE5TRGljdGlvbmFyeSAqYWdncmVn
YXRlZEF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMoQ2hhcmFjdGVyRGF0YSYpOworICAgIE5TRGljdGlv
bmFyeSogYWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50QW5kSXRzQW5jZXN0b3JzKEVsZW1l
bnQmKTsKKworICAgIEVsZW1lbnQqIF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoTm9kZSopOwor
ICAgIAorICAgIHZvaWQgX25ld1BhcmFncmFwaEZvckVsZW1lbnQoRWxlbWVudCYsIE5TU3RyaW5n
ICp0YWcsIEJPT0wgZmxhZywgQk9PTCBzdXBwcmVzc1RyYWlsaW5nU3BhY2UpOworICAgIHZvaWQg
X25ld0xpbmVGb3JFbGVtZW50KEVsZW1lbnQmKTsKKyAgICB2b2lkIF9uZXdUYWJGb3JFbGVtZW50
KEVsZW1lbnQmKTsKKyAgICBCT09MIF9hZGRBdHRhY2htZW50Rm9yRWxlbWVudChFbGVtZW50Jiwg
TlNVUkwgKnVybCwgQk9PTCBuZWVkc1BhcmFncmFwaCwgQk9PTCB1c2VQbGFjZWhvbGRlcik7Cisg
ICAgdm9pZCBfYWRkUXVvdGVGb3JFbGVtZW50KEVsZW1lbnQmLCBCT09MIG9wZW5pbmcsIE5TSW50
ZWdlciBsZXZlbCk7CisgICAgdm9pZCBfYWRkVmFsdWUoTlNTdHJpbmcgKnZhbHVlLCBFbGVtZW50
Jik7CisgICAgdm9pZCBfZmlsbEluQmxvY2soTlNUZXh0QmxvY2sgKmJsb2NrLCBFbGVtZW50Jiwg
UGxhdGZvcm1Db2xvciAqYmFja2dyb3VuZENvbG9yLCBDR0Zsb2F0IGV4dHJhTWFyZ2luLCBDR0Zs
b2F0IGV4dHJhUGFkZGluZywgQk9PTCBpc1RhYmxlKTsKKyAgICAKKyAgICBCT09MIF9lbnRlckVs
ZW1lbnQoRWxlbWVudCYsIEJPT0wgZW1iZWRkZWQpOworICAgIEJPT0wgX3Byb2Nlc3NFbGVtZW50
KEVsZW1lbnQmLCBOU0ludGVnZXIgZGVwdGgpOworICAgIHZvaWQgX2V4aXRFbGVtZW50KEVsZW1l
bnQmLCBOU0ludGVnZXIgZGVwdGgsIE5TVUludGVnZXIgc3RhcnRJbmRleCk7CisgICAgCisgICAg
dm9pZCBfcHJvY2Vzc0hlYWRFbGVtZW50KEVsZW1lbnQmKTsKKyAgICB2b2lkIF9wcm9jZXNzTWV0
YUVsZW1lbnRXaXRoTmFtZShOU1N0cmluZyAqbmFtZSwgTlNTdHJpbmcgKmNvbnRlbnQpOworICAg
IAorICAgIHZvaWQgX2FkZFRhYmxlRm9yRWxlbWVudChFbGVtZW50KiB0YWJsZUVsZW1lbnQpOwor
ICAgIHZvaWQgX2FkZFRhYmxlQ2VsbEZvckVsZW1lbnQoRWxlbWVudCogdGFibGVDZWxsRWxlbWVu
dCk7CisgICAgdm9pZCBfYWRkTWFya2Vyc1RvTGlzdChOU1RleHRMaXN0ICpsaXN0LCBOU1Jhbmdl
IHJhbmdlKTsKKyAgICB2b2lkIF9wcm9jZXNzVGV4dChDaGFyYWN0ZXJEYXRhJik7CisgICAgdm9p
ZCBfYWRqdXN0VHJhaWxpbmdOZXdsaW5lKCk7Cit9OworCitIVE1MQ29udmVydGVyOjpIVE1MQ29u
dmVydGVyKFJhbmdlJiByYW5nZSkKKyAgICA6IG1fcmFuZ2UocmFuZ2UpCisgICAgLCBtX2RhdGFT
b3VyY2UobnVsbHB0cikKK3sKKyAgICBfYXR0clN0ciA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdF07CisgICAgX2RvY3VtZW50QXR0cnMgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOworICAgIF9iYXNlVVJMID0gbmlsOworICAgIF90ZXh0TGlzdHMg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBfdGV4dEJsb2NrcyA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgIF90ZXh0VGFibGVzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVNwYWNpbmdzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVBhZGRpbmdzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVJvd3MgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0XTsKKyAgICBfdGV4dFRhYmxlUm93QXJyYXlzID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBfZm9udENhY2hlID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBfd3JpdGluZ0RpcmVjdGlvbkFycmF5ID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisKKyAgICBfZGVmYXVsdFRhYkludGVydmFsID0g
MzY7CisgICAgX2RvbVJhbmdlU3RhcnRJbmRleCA9IDA7CisgICAgX3F1b3RlTGV2ZWwgPSAwOwor
ICAgIAorICAgIF9mbGFncy5pc1NvZnQgPSBmYWxzZTsKKyAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0
ID0gZmFsc2U7CisgICAgX2ZsYWdzLnJlYWNoZWRFbmQgPSBmYWxzZTsKKyAgICAKKyAgICBfY2Fj
aGVzID0gc3RkOjptYWtlX3VuaXF1ZTxIVE1MQ29udmVydGVyQ2FjaGVzPigpOworfQorCitIVE1M
Q29udmVydGVyOjp+SFRNTENvbnZlcnRlcigpCit7CisgICAgW19hdHRyU3RyIHJlbGVhc2VdOwor
ICAgIFtfZG9jdW1lbnRBdHRycyByZWxlYXNlXTsKKyAgICBbX3RleHRMaXN0cyByZWxlYXNlXTsK
KyAgICBbX3RleHRCbG9ja3MgcmVsZWFzZV07CisgICAgW190ZXh0VGFibGVzIHJlbGVhc2VdOwor
ICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgcmVsZWFzZV07CisgICAgW190ZXh0VGFibGVQYWRkaW5n
cyByZWxlYXNlXTsKKyAgICBbX3RleHRUYWJsZVJvd3MgcmVsZWFzZV07CisgICAgW190ZXh0VGFi
bGVSb3dBcnJheXMgcmVsZWFzZV07CisgICAgW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3Jz
IHJlbGVhc2VdOworICAgIFtfZm9udENhY2hlIHJlbGVhc2VdOworICAgIFtfd3JpdGluZ0RpcmVj
dGlvbkFycmF5IHJlbGVhc2VdOworfQorCitOU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0
ZXI6OmNvbnZlcnQoKQoreworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gX2Nh
Y2hlcy0+Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChtX3JhbmdlLmdldCgpKTsK
KyAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3JDb250YWluZXIpOworCisgICAgbV9kYXRhU291cmNl
ID0gY29tbW9uQW5jZXN0b3JDb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKS0+bG9hZGVyKCku
ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIW1fZGF0YVNvdXJjZSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gMDsKKyAgICBfdHJhdmVyc2VO
b2RlKCpjb21tb25BbmNlc3RvckNvbnRhaW5lciwgMCwgZmFsc2UgLyogZW1iZWRkZWQgKi8pOwor
ICAgIGlmIChfZG9tUmFuZ2VTdGFydEluZGV4ID4gMCAmJiBfZG9tUmFuZ2VTdGFydEluZGV4IDw9
IFtfYXR0clN0ciBsZW5ndGhdKQorICAgICAgICBbX2F0dHJTdHIgZGVsZXRlQ2hhcmFjdGVyc0lu
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgX2RvbVJhbmdlU3RhcnRJbmRleCldOworICAgIAorICAgIHJl
dHVybiBbW19hdHRyU3RyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworfQorCisjaWYgIVBMQVRGT1JN
KElPUykKKy8vIFJldHVybnMgdGhlIGZvbnQgdG8gYmUgdXNlZCBpZiB0aGUgTlNGb250QXR0cmli
dXRlTmFtZSBkb2Vzbid0IGV4aXN0CitzdGF0aWMgTlNGb250ICpXZWJEZWZhdWx0Rm9udCgpCit7
CisgICAgc3RhdGljIE5TRm9udCAqZGVmYXVsdEZvbnQgPSBuaWw7CisgICAgaWYgKGRlZmF1bHRG
b250KQorICAgICAgICByZXR1cm4gZGVmYXVsdEZvbnQ7CisKKyAgICBOU0ZvbnQgKmZvbnQgPSBb
TlNGb250IGZvbnRXaXRoTmFtZTpAIkhlbHZldGljYSIgc2l6ZToxMl07CisgICAgaWYgKCFmb250
KQorICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjEyXTsKKworICAgIGRl
ZmF1bHRGb250ID0gW2ZvbnQgcmV0YWluXTsKKyAgICByZXR1cm4gZGVmYXVsdEZvbnQ7Cit9Cisj
ZW5kaWYKKworc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnRGb3JOYW1lQW5kU2l6ZShOU1N0cmlu
ZyAqZm9udE5hbWUsIENHRmxvYXQgc2l6ZSwgTlNNdXRhYmxlRGljdGlvbmFyeSAqY2FjaGUpCit7
CisgICAgUGxhdGZvcm1Gb250ICpmb250ID0gW2NhY2hlIG9iamVjdEZvcktleTpmb250TmFtZV07
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChmb250KQorICAgICAgICByZXR1cm4gW2ZvbnQg
Zm9udFdpdGhTaXplOnNpemVdOworCisgICAgZm9udCA9IFtQbGF0Zm9ybUZvbnRDbGFzcyBmb250
V2l0aE5hbWU6Zm9udE5hbWUgc2l6ZTpzaXplXTsKKyNlbHNlCisgICAgTlNGb250TWFuYWdlciAq
Zm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgaWYg
KGZvbnQpIHsKKyAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRv
U2l6ZTpzaXplXTsKKyAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAgfQorICAgIGZvbnQgPSBbZm9u
dE1hbmFnZXIgZm9udFdpdGhGYW1pbHk6Zm9udE5hbWUgdHJhaXRzOjAgd2VpZ2h0OjAgc2l6ZTpz
aXplXTsKKyNlbmRpZgorICAgIGlmICghZm9udCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAg
ICAgTlNBcnJheSAqYXZhaWxhYmxlRmFtaWx5TmFtZXMgPSBbUGxhdGZvcm1Gb250Q2xhc3MgZmFt
aWx5TmFtZXNdOworI2Vsc2UKKyAgICAgICAgTlNBcnJheSAqYXZhaWxhYmxlRmFtaWx5TmFtZXMg
PSBbZm9udE1hbmFnZXIgYXZhaWxhYmxlRm9udEZhbWlsaWVzXTsKKyNlbmRpZgorICAgICAgICBO
U1JhbmdlIGRpdmlkaW5nUmFuZ2U7CisgICAgICAgIE5TUmFuZ2UgZGl2aWRpbmdTcGFjZVJhbmdl
ID0gW2ZvbnROYW1lIHJhbmdlT2ZTdHJpbmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNo
XTsKKyAgICAgICAgTlNSYW5nZSBkaXZpZGluZ0Rhc2hSYW5nZSA9IFtmb250TmFtZSByYW5nZU9m
U3RyaW5nOkAiLSIgb3B0aW9uczpOU0JhY2t3YXJkc1NlYXJjaF07CisgICAgICAgIGRpdmlkaW5n
UmFuZ2UgPSAoMCA8IGRpdmlkaW5nU3BhY2VSYW5nZS5sZW5ndGggJiYgMCA8IGRpdmlkaW5nRGFz
aFJhbmdlLmxlbmd0aCkgPyAoZGl2aWRpbmdTcGFjZVJhbmdlLmxvY2F0aW9uID4gZGl2aWRpbmdE
YXNoUmFuZ2UubG9jYXRpb24gPyBkaXZpZGluZ1NwYWNlUmFuZ2UgOiBkaXZpZGluZ0Rhc2hSYW5n
ZSkgOiAoMCA8IGRpdmlkaW5nU3BhY2VSYW5nZS5sZW5ndGggPyBkaXZpZGluZ1NwYWNlUmFuZ2Ug
OiBkaXZpZGluZ0Rhc2hSYW5nZSk7CisKKyAgICAgICAgd2hpbGUgKGRpdmlkaW5nUmFuZ2UubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbZm9udE5hbWUg
c3Vic3RyaW5nVG9JbmRleDpkaXZpZGluZ1JhbmdlLmxvY2F0aW9uXTsKKyAgICAgICAgICAgIGlm
IChbYXZhaWxhYmxlRmFtaWx5TmFtZXMgY29udGFpbnNPYmplY3Q6ZmFtaWx5TmFtZV0pIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmZhY2VOYW1lID0gW2Zv
bnROYW1lIHN1YnN0cmluZ0Zyb21JbmRleDooZGl2aWRpbmdSYW5nZS5sb2NhdGlvbiArIGRpdmlk
aW5nUmFuZ2UubGVuZ3RoKV07CisgICAgICAgICAgICAgICAgTlNBcnJheSAqZmFtaWx5TWVtYmVy
RmFjZU5hbWVzID0gW1BsYXRmb3JtRm9udENsYXNzIGZvbnROYW1lc0ZvckZhbWlseU5hbWU6ZmFt
aWx5TmFtZV07CisgICAgICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqZmFtaWx5TWVtYmVyRmFj
ZU5hbWUgaW4gZmFtaWx5TWVtYmVyRmFjZU5hbWVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChbZmFtaWx5TWVtYmVyRmFjZU5hbWUgY29tcGFyZTpmYWNlTmFtZSBvcHRpb25zOk5TQ2FzZUlu
c2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb250ID0gW1BsYXRmb3JtRm9udENsYXNzIGZvbnRXaXRoTmFtZTpmYW1pbHlNZW1iZXJG
YWNlTmFtZSBzaXplOnNpemVdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCFmb250ICYmIFtmYW1pbHlNZW1iZXJGYWNlTmFtZXMgY291bnRdKQorICAgICAgICAgICAgICAg
ICAgICBmb250ID0gW2dldFVJRm9udENsYXNzKCkgZm9udFdpdGhOYW1lOmZhbWlseU5hbWUgc2l6
ZTpzaXplXTsKKyNlbHNlCisgICAgICAgICAgICAgICAgTlNBcnJheSAqZmFtaWx5TWVtYmVyQXJy
YXk7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmZhY2VOYW1lID0gW2ZvbnROYW1lIHN1YnN0
cmluZ0Zyb21JbmRleDooZGl2aWRpbmdSYW5nZS5sb2NhdGlvbiArIGRpdmlkaW5nUmFuZ2UubGVu
Z3RoKV07CisgICAgICAgICAgICAgICAgTlNBcnJheSAqZmFtaWx5TWVtYmVyQXJyYXlzID0gW2Zv
bnRNYW5hZ2VyIGF2YWlsYWJsZU1lbWJlcnNPZkZvbnRGYW1pbHk6ZmFtaWx5TmFtZV07CisgICAg
ICAgICAgICAgICAgTlNFbnVtZXJhdG9yICpmYW1pbHlNZW1iZXJBcnJheXNFbnVtID0gW2ZhbWls
eU1lbWJlckFycmF5cyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
KGZhbWlseU1lbWJlckFycmF5ID0gW2ZhbWlseU1lbWJlckFycmF5c0VudW0gbmV4dE9iamVjdF0p
KSB7CisgICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICpmYW1pbHlNZW1iZXJGYWNlTmFtZSA9
IFtmYW1pbHlNZW1iZXJBcnJheSBvYmplY3RBdEluZGV4OjFdOworICAgICAgICAgICAgICAgICAg
ICBpZiAoW2ZhbWlseU1lbWJlckZhY2VOYW1lIGNvbXBhcmU6ZmFjZU5hbWUgb3B0aW9uczpOU0Nh
c2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0gTlNPcmRlcmVkU2FtZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgTlNGb250VHJhaXRNYXNrIHRyYWl0cyA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2Jq
ZWN0QXRJbmRleDozXSBpbnRlZ2VyVmFsdWVdOworICAgICAgICAgICAgICAgICAgICAgICAgTlNJ
bnRlZ2VyIHdlaWdodCA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDoyXSBpbnRl
Z2VyVmFsdWVdOworICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBm
b250V2l0aEZhbWlseTpmYW1pbHlOYW1lIHRyYWl0czp0cmFpdHMgd2VpZ2h0OndlaWdodCBzaXpl
OnNpemVdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFmb250KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgwIDwgW2ZhbWlseU1lbWJlckFycmF5cyBjb3VudF0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5TQXJyYXkgKmZhbWlseU1lbWJlckFycmF5ID0gW2Zh
bWlseU1lbWJlckFycmF5cyBvYmplY3RBdEluZGV4OjBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgTlNGb250VHJhaXRNYXNrIHRyYWl0cyA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJ
bmRleDozXSBpbnRlZ2VyVmFsdWVdOworICAgICAgICAgICAgICAgICAgICAgICAgTlNJbnRlZ2Vy
IHdlaWdodCA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDoyXSBpbnRlZ2VyVmFs
dWVdOworICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBmb250V2l0
aEZhbWlseTpmYW1pbHlOYW1lIHRyYWl0czp0cmFpdHMgd2VpZ2h0OndlaWdodCBzaXplOnNpemVd
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGRpdmlkaW5nU3BhY2VSYW5nZSA9IFtmYW1pbHlOYW1lIHJhbmdlT2ZTdHJpbmc6QCIgIiBvcHRp
b25zOk5TQmFja3dhcmRzU2VhcmNoXTsKKyAgICAgICAgICAgICAgICBkaXZpZGluZ0Rhc2hSYW5n
ZSA9IFtmYW1pbHlOYW1lIHJhbmdlT2ZTdHJpbmc6QCItIiBvcHRpb25zOk5TQmFja3dhcmRzU2Vh
cmNoXTsKKyAgICAgICAgICAgICAgICBkaXZpZGluZ1JhbmdlID0gKDAgPCBkaXZpZGluZ1NwYWNl
UmFuZ2UubGVuZ3RoICYmIDAgPCBkaXZpZGluZ0Rhc2hSYW5nZS5sZW5ndGgpID8gKGRpdmlkaW5n
U3BhY2VSYW5nZS5sb2NhdGlvbiA+IGRpdmlkaW5nRGFzaFJhbmdlLmxvY2F0aW9uID8gZGl2aWRp
bmdTcGFjZVJhbmdlIDogZGl2aWRpbmdEYXNoUmFuZ2UpIDogKDAgPCBkaXZpZGluZ1NwYWNlUmFu
Z2UubGVuZ3RoID8gZGl2aWRpbmdTcGFjZVJhbmdlIDogZGl2aWRpbmdEYXNoUmFuZ2UpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAo
IWZvbnQpCisgICAgICAgIGZvbnQgPSBbUGxhdGZvcm1Gb250Q2xhc3Mgc3lzdGVtRm9udE9mU2l6
ZTpzaXplXTsKKyNlbHNlCisgICAgaWYgKCFmb250KQorICAgICAgICBmb250ID0gW05TRm9udCBm
b250V2l0aE5hbWU6QCJUaW1lcyIgc2l6ZTpzaXplXTsKKyAgICBpZiAoIWZvbnQpCisgICAgICAg
IGZvbnQgPSBbTlNGb250IHVzZXJGb250T2ZTaXplOnNpemVdOworICAgIGlmICghZm9udCkKKyAg
ICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJEZWZhdWx0Rm9udCgpIHRv
U2l6ZTpzaXplXTsKKyAgICBpZiAoIWZvbnQpCisgICAgICAgIGZvbnQgPSBXZWJEZWZhdWx0Rm9u
dCgpOworI2VuZGlmCisgICAgW2NhY2hlIHNldE9iamVjdDpmb250IGZvcktleTpmb250TmFtZV07
CisKKyAgICByZXR1cm4gZm9udDsKK30KKworc3RhdGljIE5TUGFyYWdyYXBoU3R5bGUgKmRlZmF1
bHRQYXJhZ3JhcGhTdHlsZSgpCit7CisgICAgc3RhdGljIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxl
ICpkZWZhdWx0UGFyYWdyYXBoU3R5bGUgPSBuaWw7CisgICAgaWYgKCFkZWZhdWx0UGFyYWdyYXBo
U3R5bGUpIHsKKyAgICAgICAgZGVmYXVsdFBhcmFncmFwaFN0eWxlID0gW1tQbGF0Zm9ybU5TUGFy
YWdyYXBoU3R5bGUgZGVmYXVsdFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV07CisgICAgICAg
IFtkZWZhdWx0UGFyYWdyYXBoU3R5bGUgc2V0RGVmYXVsdFRhYkludGVydmFsOjM2XTsKKyAgICAg
ICAgW2RlZmF1bHRQYXJhZ3JhcGhTdHlsZSBzZXRUYWJTdG9wczpbTlNBcnJheSBhcnJheV1dOwor
ICAgIH0KKyAgICByZXR1cm4gZGVmYXVsdFBhcmFncmFwaFN0eWxlOworfQorCitQYXNzUmVmUHRy
PENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjpjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JF
bGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKK3sKKyAg
ICBpZiAocHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byByZXN1bHQgPSBtX2NvbXB1dGVkU3R5bGVzLmFkZCgmZWxlbWVu
dCwgbnVsbHB0cik7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxDb21wdXRlZFN0eWxlRXh0cmFjdG9y
PigmZWxlbWVudCwgdHJ1ZSk7CisgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciYgY29tcHV0ZWRT
dHlsZSA9ICpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIHJldHVybiBjb21wdXRlZFN0eWxl
LnByb3BlcnR5VmFsdWUocHJvcGVydHlJZCk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IEhU
TUxDb252ZXJ0ZXJDYWNoZXM6OmlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKK3sKKyAgICBpZiAocHJvcGVydHlJ
ZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQgfHwgIWVsZW1lbnQuaXNTdHlsZWRFbGVtZW50KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyogcHJvcGVy
dGllcyA9IHRvU3R5bGVkRWxlbWVudChlbGVtZW50KS5pbmxpbmVTdHlsZSgpOworICAgIGlmICgh
cHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb3BlcnRp
ZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJZCk7Cit9CisKK3N0YXRpYyBib29sIHN0
cmluZ0Zyb21DU1NWYWx1ZShDU1NWYWx1ZSYgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQoreworICAg
IGlmICh2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQg
cHJpbWl0aXZlVHlwZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLnByaW1pdGl2ZVR5cGUo
KTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcgfHwgcHJpbWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSB8fAor
ICAgICAgICAgICAgcHJpbWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5U
IHx8IHByaW1pdGl2ZVR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSKSB7CisgICAg
ICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS5jc3NUZXh0KCk7CisgICAgICAgICAg
ICBpZiAoc3RyaW5nVmFsdWUubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBz
dHJpbmdWYWx1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAodmFsdWUuaXNWYWx1ZUxpc3QoKSkgeworICAgICAg
ICByZXN1bHQgPSB2YWx1ZS5jc3NUZXh0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBIVE1MQ29udmVydGVyQ2FjaGVzOjpwcm9w
ZXJ0eVZhbHVlRm9yTm9kZShOb2RlJiBub2RlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCit7
CisgICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICBpZiAoTm9kZSogcGFy
ZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1
ZUZvck5vZGUoKnBhcmVudCwgcHJvcGVydHlJZCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICB9CisKKyAgICBib29sIGluaGVyaXQgPSBmYWxzZTsKKyAgICBFbGVtZW50JiBlbGVtZW50
ID0gdG9FbGVtZW50KG5vZGUpOworICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29t
cHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgeworICAg
ICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICBpZiAoc3RyaW5nRnJvbUNTU1ZhbHVlKCp2YWx1
ZSwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYg
KFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChl
bGVtZW50LCBwcm9wZXJ0eUlkKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICBp
ZiAodmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSkKKyAgICAgICAgICAgIGluaGVyaXQgPSB0cnVl
OworICAgICAgICBlbHNlIGlmIChzdHJpbmdGcm9tQ1NTVmFsdWUoKnZhbHVlLCByZXN1bHQpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5RGlzcGxheToKKyAgICAgICAgaWYgKGVsZW1lbnQu
aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUobm9mcmFt
ZXNUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJub25lIjsKKyAgICAgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNUYWdOYW1lKGFkZHJlc3NUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShibG9ja3F1
b3RlVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoYm9keVRhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKGNlbnRlclRhZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZGRUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZShkaXJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShkaXZU
YWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShkbFRhZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50
Lmhhc1RhZ05hbWUoZHRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShmaWVsZHNldFRhZykgfHwg
ZWxlbWVudC5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShmcmFtZVRh
ZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpIHx8IGVs
ZW1lbnQuaGFzVGFnTmFtZShoclRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8
IGVsZW1lbnQuaGFzVGFnTmFtZShoMVRhZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1Rh
Z05hbWUoaDJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShoM1RhZykgfHwgZWxlbWVudC5oYXNU
YWdOYW1lKGg0VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaDVUYWcpCisgICAgICAgICAgICAg
fHwgZWxlbWVudC5oYXNUYWdOYW1lKGg2VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1l
VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUobWVudVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1l
KG5vc2NyaXB0VGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShvbFRhZykg
fHwgZWxlbWVudC5oYXNUYWdOYW1lKHBUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShwcmVUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh1bFRhZykpCisgICAgICAgICAgICByZXR1cm4gImJsb2Nr
IjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGxpVGFnKSkKKyAgICAgICAg
ICAgIHJldHVybiAibGlzdC1pdGVtIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdO
YW1lKHRhYmxlVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUiOworICAgICAgICBlbHNl
IGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodHJUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJ0YWJs
ZS1yb3ciOworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGhUYWcpIHx8IGVs
ZW1lbnQuaGFzVGFnTmFtZSh0ZFRhZykpCisgICAgICAgICAgICByZXR1cm4gInRhYmxlLWNlbGwi
OworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGhlYWRUYWcpKQorICAgICAg
ICAgICAgcmV0dXJuICJ0YWJsZS1oZWFkZXItZ3JvdXAiOworICAgICAgICBlbHNlIGlmIChlbGVt
ZW50Lmhhc1RhZ05hbWUodGJvZHlUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJ0YWJsZS1yb3ct
Z3JvdXAiOworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGZvb3RUYWcpKQor
ICAgICAgICAgICAgcmV0dXJuICJ0YWJsZS1mb290ZXItZ3JvdXAiOworICAgICAgICBlbHNlIGlm
IChlbGVtZW50Lmhhc1RhZ05hbWUoY29sVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUt
Y29sdW1uIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGNvbGdyb3VwVGFn
KSkKKyAgICAgICAgICAgIHJldHVybiAidGFibGUtY29sdW1uLWdyb3VwIjsKKyAgICAgICAgZWxz
ZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGNhcHRpb25UYWcpKQorICAgICAgICAgICAgcmV0dXJu
ICJ0YWJsZS1jYXB0aW9uIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdo
aXRlU3BhY2U6CisgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUocHJlVGFnKSkKKyAgICAg
ICAgICAgIHJldHVybiAicHJlIjsKKyAgICAgICAgaW5oZXJpdCA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6CisgICAgICAgIGlmIChlbGVtZW50
Lmhhc1RhZ05hbWUoaVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGNpdGVUYWcpIHx8IGVsZW1l
bnQuaGFzVGFnTmFtZShlbVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHZhclRhZykgfHwgZWxl
bWVudC5oYXNUYWdOYW1lKGFkZHJlc3NUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJpdGFsaWMi
OworICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUZvbnRXZWlnaHQ6CisgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoYlRhZykg
fHwgZWxlbWVudC5oYXNUYWdOYW1lKHN0cm9uZ1RhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRo
VGFnKSkKKyAgICAgICAgICAgIHJldHVybiAiYm9sZGVyIjsKKyAgICAgICAgaW5oZXJpdCA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoK
KyAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZSh1VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05h
bWUoaW5zVGFnKSkKKyAgICAgICAgICAgIHJldHVybiAidW5kZXJsaW5lIjsKKyAgICAgICAgZWxz
ZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHNUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShzdHJp
a2VUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShkZWxUYWcpKQorICAgICAgICAgICAgcmV0dXJu
ICJsaW5lLXRocm91Z2giOworICAgICAgICBpbmhlcml0ID0gdHJ1ZTsgLy8gRklYTUU6IFRoaXMg
aXMgbm90IHN0cmljdGx5IGNvcnJlY3QKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRBbGlnbjoKKyAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShjZW50ZXJUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZShjYXB0aW9uVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUo
dGhUYWcpKQorICAgICAgICAgICAgcmV0dXJuICJjZW50ZXIiOworICAgICAgICBpbmhlcml0ID0g
dHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ246
CisgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoc3VwVGFnKSkKKyAgICAgICAgICAgIHJl
dHVybiAic3VwZXIiOworICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoc3ViVGFn
KSkKKyAgICAgICAgICAgIHJldHVybiAic3ViIjsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNUYWdOYW1lKHRoZWFkVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGJvZHlUYWcpIHx8IGVs
ZW1lbnQuaGFzVGFnTmFtZSh0Zm9vdFRhZykpCisgICAgICAgICAgICByZXR1cm4gIm1pZGRsZSI7
CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZSh0clRhZykgfHwgZWxlbWVudC5o
YXNUYWdOYW1lKHRoVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGRUYWcpKQorICAgICAgICAg
ICAgaW5oZXJpdCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250RmFtaWx5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dFRyYW5zZm9ybToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoK
KyAgICBjYXNlIENTU1Byb3BlcnR5VmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246CisgICAgICAgIGluaGVyaXQgPSB0cnVl
OyAvLyBGSVhNRTogTGV0IGNsYXNzZXMgaW4gdGhlIGNzcyBjb21wb25lbnQgZmlndXJlIHRoaXMg
b3V0LgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBpZiAoaW5oZXJpdCkgeworICAgICAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS5w
YXJlbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZUZvck5vZGUoKnBh
cmVudCwgcHJvcGVydHlJZCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBTdHJpbmcoKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlLCBmbG9hdCYgcmVzdWx0KQoreworICAgIC8vIEZJ
WE1FOiBVc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVWYWx1ZS4KKyAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVZhbHVlLnByaW1pdGl2ZVR5cGUoKSkgeworICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWDoKKyAgICAgICAgcmVzdWx0ID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgorICAgICAgICByZXN1bHQgPSA0ICogcHJp
bWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUKSAvIDM7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
QzoKKyAgICAgICAgcmVzdWx0ID0gMTYgKiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ006CisgICAgICAgIHJlc3VsdCA9IDk2ICogcHJpbWl0
aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDKSAvIDIuNTQ7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19N
TToKKyAgICAgICAgcmVzdWx0ID0gOTYgKiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEMpIC8gMjUuNDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgorICAgICAgICByZXN1bHQgPSA5NiAq
IHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTik7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgSFRNTENvbnZlcnRlckNhY2hlczo6ZmxvYXRQcm9wZXJ0eVZh
bHVlRm9yTm9kZShOb2RlJiBub2RlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIGZsb2F0JiBy
ZXN1bHQpCit7CisgICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICBpZiAo
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZSgqcGFyZW50LCBwcm9wZXJ0eUlkLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgRWxlbWVudCYgZWxlbWVu
dCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNv
bXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKKyAg
ICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgZmxvYXRWYWx1ZUZyb21Qcmlt
aXRpdmVWYWx1ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSksIHJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGluaGVyaXQgPSBmYWxzZTsKKyAg
ICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVt
ZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpICYmIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUodG9DU1NQcmltaXRpdmVW
YWx1ZSgqdmFsdWUpLCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmICh2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKQorICAgICAgICAgICAgaW5oZXJpdCA9IHRy
dWU7CisgICAgfQorCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRJbmRlbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmc6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVp
Z2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXaWRvd3M6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU9y
cGhhbnM6CisgICAgICAgIGluaGVyaXQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaW5oZXJpdCkgeworICAgICAg
ICBpZiAoQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZSgqcGFyZW50LCBwcm9wZXJ0eUlk
LCByZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIFBMQVRGT1JN
KElPUykKK3N0YXRpYyBOU1N0cmluZyAqX05TRmlyc3RQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFp
bnMoTlNTZWFyY2hQYXRoRGlyZWN0b3J5IGRpcmVjdG9yeSwgTlNTZWFyY2hQYXRoRG9tYWluTWFz
ayBkb21haW5NYXNrLCBCT09MIGV4cGFuZFRpbGRlKQoreworICAgIE5TQXJyYXkgKmFycmF5ID0g
TlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoZGlyZWN0b3J5LCBkb21haW5NYXNr
LCBleHBhbmRUaWxkZSk7CisgICAgcmV0dXJuIFthcnJheSBjb3VudF0gPj0gMSA/IFthcnJheSBv
YmplY3RBdEluZGV4OjBdIDogbmlsOworfQorCitzdGF0aWMgTlNTdHJpbmcgKl9OU1N5c3RlbUxp
YnJhcnlQYXRoKHZvaWQpCit7CisgICAgcmV0dXJuIF9OU0ZpcnN0UGF0aEZvckRpcmVjdG9yaWVz
SW5Eb21haW5zKE5TTGlicmFyeURpcmVjdG9yeSwgTlNTeXN0ZW1Eb21haW5NYXNrLCBZRVMpOwor
fQorCitzdGF0aWMgTlNCdW5kbGUgKl93ZWJLaXRCdW5kbGUoKQoreworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIFdlYkNvcmUgYnVuZGxlIHRvIGF2b2lkIHRoZSBs
YXllcmluZyB2aW9sYXRpb24uCisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5k
bGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXTsKKyAgICBpZiAoIWJ1bmRsZSkK
KyAgICAgICAgYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOltfTlNTeXN0ZW1MaWJy
YXJ5UGF0aCgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkZyYW1ld29ya3MvV2Vi
S2l0LmZyYW1ld29yayJdXTsKKyAgICByZXR1cm4gYnVuZGxlOworfQorCitzdGF0aWMgaW5saW5l
IFVJQ29sb3IgKl9wbGF0Zm9ybUNvbG9yKENvbG9yIGNvbG9yKQoreworICAgIHJldHVybiBbZ2V0
VUlDb2xvckNsYXNzKCkgX2Rpc2FtYmlndWF0ZWRfZHVlX3RvX0NJSW1hZ2VfY29sb3JXaXRoQ0dD
b2xvcjpjYWNoZWRDR0NvbG9yKGNvbG9yLCBXZWJDb3JlOjpDb2xvclNwYWNlRGV2aWNlUkdCKV07
Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBOU0NvbG9yICpfcGxhdGZvcm1Db2xvcihDb2xvciBj
b2xvcikKK3sKKyAgICByZXR1cm4gbnNDb2xvcihjb2xvcik7Cit9CisjZW5kaWYKKworc3RhdGlj
IGlubGluZSBOU1NoYWRvdyAqX3NoYWRvd0ZvclNoYWRvd1N0eWxlKE5TU3RyaW5nICpzaGFkb3dT
dHlsZSkKK3sKKyAgICBOU1NoYWRvdyAqc2hhZG93ID0gbmlsOworICAgIE5TVUludGVnZXIgc2hh
ZG93U3R5bGVMZW5ndGggPSBbc2hhZG93U3R5bGUgbGVuZ3RoXTsKKyAgICBOU1JhbmdlIG9wZW5Q
YXJlblJhbmdlID0gW3NoYWRvd1N0eWxlIHJhbmdlT2ZTdHJpbmc6QCIoIl07CisgICAgTlNSYW5n
ZSBjbG9zZVBhcmVuUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIikiXTsKKyAg
ICBOU1JhbmdlIGZpcnN0UmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICBO
U1JhbmdlIHNlY29uZFJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgTlNS
YW5nZSB0aGlyZFJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgTlNSYW5n
ZSBzcGFjZVJhbmdlOworICAgIGlmIChvcGVuUGFyZW5SYW5nZS5sZW5ndGggPiAwICYmIGNsb3Nl
UGFyZW5SYW5nZS5sZW5ndGggPiAwICYmIE5TTWF4UmFuZ2Uob3BlblBhcmVuUmFuZ2UpIDwgY2xv
c2VQYXJlblJhbmdlLmxvY2F0aW9uKSB7CisgICAgICAgIE5TQXJyYXkgKmNvbXBvbmVudHMgPSBb
W3NoYWRvd1N0eWxlIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKG9w
ZW5QYXJlblJhbmdlKSwgY2xvc2VQYXJlblJhbmdlLmxvY2F0aW9uIC0gTlNNYXhSYW5nZShvcGVu
UGFyZW5SYW5nZSkpXSBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIsIl07CisgICAgICAg
IGlmIChbY29tcG9uZW50cyBjb3VudF0gPj0gMykgeworICAgICAgICAgICAgQ0dGbG9hdCByZWQg
PSBbW2NvbXBvbmVudHMgb2JqZWN0QXRJbmRleDowXSBmbG9hdFZhbHVlXSAvIDI1NTsKKyAgICAg
ICAgICAgIENHRmxvYXQgZ3JlZW4gPSBbW2NvbXBvbmVudHMgb2JqZWN0QXRJbmRleDoxXSBmbG9h
dFZhbHVlXSAvIDI1NTsKKyAgICAgICAgICAgIENHRmxvYXQgYmx1ZSA9IFtbY29tcG9uZW50cyBv
YmplY3RBdEluZGV4OjJdIGZsb2F0VmFsdWVdIC8gMjU1OworICAgICAgICAgICAgQ0dGbG9hdCBh
bHBoYSA9IChbY29tcG9uZW50cyBjb3VudF0gPj0gNCkgPyBbW2NvbXBvbmVudHMgb2JqZWN0QXRJ
bmRleDozXSBmbG9hdFZhbHVlXSAvIDI1NSA6IDE7CisgICAgICAgICAgICBOU0NvbG9yICpzaGFk
b3dDb2xvciA9IFtQbGF0Zm9ybU5TQ29sb3JDbGFzcyBjb2xvcldpdGhDYWxpYnJhdGVkUmVkOnJl
ZCBncmVlbjpncmVlbiBibHVlOmJsdWUgYWxwaGE6YWxwaGFdOworICAgICAgICAgICAgTlNTaXpl
IHNoYWRvd09mZnNldDsKKyAgICAgICAgICAgIENHRmxvYXQgc2hhZG93Qmx1clJhZGl1czsKKyAg
ICAgICAgICAgIGZpcnN0UmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAInB4Il07
CisgICAgICAgICAgICBpZiAoZmlyc3RSYW5nZS5sZW5ndGggPiAwICYmIE5TTWF4UmFuZ2UoZmly
c3RSYW5nZSkgPCBzaGFkb3dTdHlsZUxlbmd0aCkKKyAgICAgICAgICAgICAgICBzZWNvbmRSYW5n
ZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAicHgiIG9wdGlvbnM6MCByYW5nZTpOU01h
a2VSYW5nZShOU01heFJhbmdlKGZpcnN0UmFuZ2UpLCBzaGFkb3dTdHlsZUxlbmd0aCAtIE5TTWF4
UmFuZ2UoZmlyc3RSYW5nZSkpXTsKKyAgICAgICAgICAgIGlmIChzZWNvbmRSYW5nZS5sZW5ndGgg
PiAwICYmIE5TTWF4UmFuZ2Uoc2Vjb25kUmFuZ2UpIDwgc2hhZG93U3R5bGVMZW5ndGgpCisgICAg
ICAgICAgICAgICAgdGhpcmRSYW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAicHgi
IG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKHNlY29uZFJhbmdlKSwgc2hh
ZG93U3R5bGVMZW5ndGggLSBOU01heFJhbmdlKHNlY29uZFJhbmdlKSldOworICAgICAgICAgICAg
aWYgKGZpcnN0UmFuZ2UubG9jYXRpb24gPiAwICYmIGZpcnN0UmFuZ2UubGVuZ3RoID4gMCAmJiBz
ZWNvbmRSYW5nZS5sZW5ndGggPiAwICYmIHRoaXJkUmFuZ2UubGVuZ3RoID4gMCkgeworICAgICAg
ICAgICAgICAgIHNwYWNlUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIiAiIG9w
dGlvbnM6TlNCYWNrd2FyZHNTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgZmlyc3RSYW5nZS5s
b2NhdGlvbildOworICAgICAgICAgICAgICAgIGlmIChzcGFjZVJhbmdlLmxlbmd0aCA9PSAwKQor
ICAgICAgICAgICAgICAgICAgICBzcGFjZVJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgMCk7CisgICAg
ICAgICAgICAgICAgc2hhZG93T2Zmc2V0LndpZHRoID0gW1tzaGFkb3dTdHlsZSBzdWJzdHJpbmdX
aXRoUmFuZ2U6TlNNYWtlUmFuZ2UoTlNNYXhSYW5nZShzcGFjZVJhbmdlKSwgZmlyc3RSYW5nZS5s
b2NhdGlvbiAtIE5TTWF4UmFuZ2Uoc3BhY2VSYW5nZSkpXSBmbG9hdFZhbHVlXTsKKyAgICAgICAg
ICAgICAgICBzcGFjZVJhbmdlID0gW3NoYWRvd1N0eWxlIHJhbmdlT2ZTdHJpbmc6QCIgIiBvcHRp
b25zOk5TQmFja3dhcmRzU2VhcmNoIHJhbmdlOk5TTWFrZVJhbmdlKDAsIHNlY29uZFJhbmdlLmxv
Y2F0aW9uKV07CisgICAgICAgICAgICAgICAgaWYgKCFzcGFjZVJhbmdlLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgc3BhY2VSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDApOworICAgICAgICAg
ICAgICAgIENHRmxvYXQgc2hhZG93SGVpZ2h0ID0gW1tzaGFkb3dTdHlsZSBzdWJzdHJpbmdXaXRo
UmFuZ2U6TlNNYWtlUmFuZ2UoTlNNYXhSYW5nZShzcGFjZVJhbmdlKSwgc2Vjb25kUmFuZ2UubG9j
YXRpb24gLSBOU01heFJhbmdlKHNwYWNlUmFuZ2UpKV0gZmxvYXRWYWx1ZV07CisgICAgICAgICAg
ICAgICAgLy8gSSBkb24ndCBrbm93IHdoeSB3ZSBoYXZlIHRoaXMgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSB0d28gcGxhdGZvcm1zLgorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgICAgICBz
aGFkb3dPZmZzZXQuaGVpZ2h0ID0gc2hhZG93SGVpZ2h0OworI2Vsc2UKKyAgICAgICAgICAgICAg
ICBzaGFkb3dPZmZzZXQuaGVpZ2h0ID0gLXNoYWRvd0hlaWdodDsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIHNwYWNlUmFuZ2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIiAiIG9wdGlv
bnM6TlNCYWNrd2FyZHNTZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgdGhpcmRSYW5nZS5sb2Nh
dGlvbildOworICAgICAgICAgICAgICAgIGlmICghc3BhY2VSYW5nZS5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgICAgIHNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKKyAgICAgICAgICAg
ICAgICBzaGFkb3dCbHVyUmFkaXVzID0gW1tzaGFkb3dTdHlsZSBzdWJzdHJpbmdXaXRoUmFuZ2U6
TlNNYWtlUmFuZ2UoTlNNYXhSYW5nZShzcGFjZVJhbmdlKSwgdGhpcmRSYW5nZS5sb2NhdGlvbiAt
IE5TTWF4UmFuZ2Uoc3BhY2VSYW5nZSkpXSBmbG9hdFZhbHVlXTsKKyAgICAgICAgICAgICAgICBz
aGFkb3cgPSBbW1tQbGF0Zm9ybU5TU2hhZG93IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgICAgICAgICAgW3NoYWRvdyBzZXRTaGFkb3dDb2xvcjpzaGFkb3dDb2xvcl07CisgICAg
ICAgICAgICAgICAgW3NoYWRvdyBzZXRTaGFkb3dPZmZzZXQ6c2hhZG93T2Zmc2V0XTsKKyAgICAg
ICAgICAgICAgICBbc2hhZG93IHNldFNoYWRvd0JsdXJSYWRpdXM6c2hhZG93Qmx1clJhZGl1c107
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNoYWRvdzsKK30K
KworYm9vbCBIVE1MQ29udmVydGVyQ2FjaGVzOjppc0Jsb2NrRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQoreworICAgIFN0cmluZyBkaXNwbGF5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlRm9yTm9kZShl
bGVtZW50LCBDU1NQcm9wZXJ0eURpc3BsYXkpOworICAgIGlmIChkaXNwbGF5VmFsdWUgPT0gImJs
b2NrIiB8fCBkaXNwbGF5VmFsdWUgPT0gImxpc3QtaXRlbSIgfHwgZGlzcGxheVZhbHVlLnN0YXJ0
c1dpdGgoInRhYmxlIikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIFN0cmluZyBmbG9hdFZh
bHVlID0gcHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlGbG9hdCk7Cisg
ICAgaWYgKGZsb2F0VmFsdWUgPT0gImxlZnQiIHx8IGZsb2F0VmFsdWUgPT0gInJpZ2h0IikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxDb252
ZXJ0ZXJDYWNoZXM6OmVsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3IoRWxlbWVudCYgZWxlbWVu
dCkKK3sKKyAgICBpZiAoIWlzQmxvY2tFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gSW4gdGhlIHRleHQgc3lzdGVtLCB0ZXh0IGJsb2NrcyAodGFibGUgZWxl
bWVudHMpIGFuZCBkb2N1bWVudHMgKGJvZHkgZWxlbWVudHMpCisgICAgLy8gaGF2ZSB0aGVpciBv
d24gYmFja2dyb3VuZCBjb2xvcnMsIHdoaWNoIHNob3VsZCBub3QgYmUgaW5oZXJpdGVkLgorICAg
IHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoaHRtbFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1l
KGJvZHlUYWcpIHx8IHByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5RGlz
cGxheSkuc3RhcnRzV2l0aCgidGFibGUiKTsKK30KKworRWxlbWVudCogSFRNTENvbnZlcnRlcjo6
X2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBub2RlLT5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKGVsZW1lbnQgJiYgIV9jYWNo
ZXMtPmlzQmxvY2tFbGVtZW50KCplbGVtZW50KSkKKyAgICAgICAgZWxlbWVudCA9IF9ibG9ja0xl
dmVsRWxlbWVudEZvck5vZGUoZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gZWxl
bWVudDsKK30KKworc3RhdGljIENvbG9yIG5vcm1hbGl6ZWRDb2xvcihDb2xvciBjb2xvciwgYm9v
bCBpZ25vcmVCbGFjaykKK3sKKyAgICBjb25zdCBkb3VibGUgQ29sb3JFcHNpbG9uID0gMSAvICgy
ICogKGRvdWJsZSkyNTUuMCk7CisgICAgCisgICAgZG91YmxlIHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhOworICAgIGNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGlm
IChyZWQgPCBDb2xvckVwc2lsb24gJiYgZ3JlZW4gPCBDb2xvckVwc2lsb24gJiYgYmx1ZSA8IENv
bG9yRXBzaWxvbiAmJiAoaWdub3JlQmxhY2sgfHwgYWxwaGEgPCBDb2xvckVwc2lsb24pKQorICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICByZXR1cm4gY29sb3I7Cit9CisKK0NvbG9y
IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9k
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQoreworICAgIGlmICghbm9kZS5pc0VsZW1lbnRO
b2RlKCkpIHsKKyAgICAgICAgaWYgKE5vZGUqIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUoKnBhcmVudCwgcHJv
cGVydHlJZCk7CisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIH0KKworICAgIEVsZW1lbnQm
IGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQp
KSB7CisgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0
aXZlVmFsdWUoKnZhbHVlKS5pc1JHQkNvbG9yKCkpCisgICAgICAgICAgICByZXR1cm4gbm9ybWFs
aXplZENvbG9yKENvbG9yKHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5nZXRSR0JBMzJWYWx1
ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICB9CisKKyAgICBib29s
IGluaGVyaXQgPSBmYWxzZTsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGlubGlu
ZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7CisgICAgICAg
IGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZh
bHVlKS5pc1JHQkNvbG9yKCkpCisgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENv
bG9yKHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5nZXRSR0JBMzJWYWx1ZSgpKSwgcHJvcGVy
dHlJZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgaWYgKHZhbHVlLT5pc0luaGVyaXRl
ZFZhbHVlKCkpCisgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgICAgIGlu
aGVyaXQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yOgorICAgICAgICBpZiAoIWVsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3IoZWxl
bWVudCkpIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gbm9kZS5w
YXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRIYXNPd25CYWNr
Z3JvdW5kQ29sb3IoKnBhcmVudEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaW5oZXJpdCkgeworICAg
ICAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gY29sb3JQcm9wZXJ0eVZhbHVlRm9yTm9kZSgqcGFyZW50LCBwcm9wZXJ0eUlkKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gQ29sb3IoKTsKK30KKworUGxhdGZvcm1Db2xvciAqSFRNTENvbnZl
cnRlcjo6X2NvbG9yRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SWQpCit7CisgICAgQ29sb3IgcmVzdWx0ID0gX2NhY2hlcy0+Y29sb3JQcm9wZXJ0eVZh
bHVlRm9yTm9kZShlbGVtZW50LCBwcm9wZXJ0eUlkKTsKKyAgICBpZiAoIXJlc3VsdC5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgUGxhdGZvcm1Db2xvciAqcGxhdGZvcm1SZXN1
bHQgPSBfcGxhdGZvcm1Db2xvcihyZXN1bHQpOworICAgIGlmIChbW1BsYXRmb3JtQ29sb3JDbGFz
cyBjbGVhckNvbG9yXSBpc0VxdWFsOnBsYXRmb3JtUmVzdWx0XSB8fCAoW3BsYXRmb3JtUmVzdWx0
IGFscGhhQ29tcG9uZW50XSA9PSAwLjApKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVy
biBwbGF0Zm9ybVJlc3VsdDsKK30KKworI2lmICFQTEFURk9STShJT1MpCitzdGF0aWMgUGxhdGZv
cm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtZW50KQoreworICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmdl
dE5TRm9udCgpOworfQorI2Vsc2UKK3N0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQm
IGVsZW1lbnQpCit7CisgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAg
ICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiAoUGxhdGZv
cm1Gb250ICopcmVuZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmdldENURm9u
dCgpOworfQorI2VuZGlmCisKKyNkZWZpbmUgVUlGbG9hdElzWmVybyhudW1iZXIpIChmYWJzKG51
bWJlciAtIDApIDwgRkxUX0VQU0lMT04pCisKK05TRGljdGlvbmFyeSAqSFRNTENvbnZlcnRlcjo6
Y29tcHV0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQoreworICAgIE5T
TXV0YWJsZURpY3Rpb25hcnkgKmF0dHJzID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFy
eV07CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9
IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKyNlbmRpZgorCisgICAgUGxhdGZv
cm1Gb250ICpmb250ID0gbmlsOworICAgIFBsYXRmb3JtRm9udCAqYWN0dWFsRm9udCA9IF9mb250
KGVsZW1lbnQpOworICAgIFBsYXRmb3JtQ29sb3IgKmZvcmVncm91bmRDb2xvciA9IF9jb2xvckZv
ckVsZW1lbnQoZWxlbWVudCwgQ1NTUHJvcGVydHlDb2xvcik7CisgICAgUGxhdGZvcm1Db2xvciAq
YmFja2dyb3VuZENvbG9yID0gX2NvbG9yRm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcik7CisgICAgUGxhdGZvcm1Db2xvciAqc3Ryb2tlQ29sb3IgPSBfY29sb3JG
b3JFbGVtZW50KGVsZW1lbnQsIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKTsKKwor
ICAgIGZsb2F0IGZvbnRTaXplID0gMDsKKyAgICBpZiAoIV9jYWNoZXMtPmZsb2F0UHJvcGVydHlW
YWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udFNpemUpIHx8IGZv
bnRTaXplIDw9IDAuMCkKKyAgICAgICAgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7CisgICAg
aWYgKGZvbnRTaXplIDwgbWluaW11bUZvbnRTaXplKQorICAgICAgICBmb250U2l6ZSA9IG1pbmlt
dW1Gb250U2l6ZTsKKyAgICBpZiAoZmFicyhmbG9vcigyLjAgKiBmb250U2l6ZSArIDAuNSkgLyAy
LjAgLSBmb250U2l6ZSkgPCAwLjA1KQorICAgICAgICBmb250U2l6ZSA9IGZsb29yKDIuMCAqIGZv
bnRTaXplICsgMC41KSAvIDI7CisgICAgZWxzZSBpZiAoZmFicyhmbG9vcigxMC4wICogZm9udFNp
emUgKyAwLjUpIC8gMTAuMCAtIGZvbnRTaXplKSA8IDAuMDA1KQorICAgICAgICBmb250U2l6ZSA9
IGZsb29yKDEwLjAgKiBmb250U2l6ZSArIDAuNSkgLyAxMDsKKworICAgIGlmIChmb250U2l6ZSA8
PSAwLjApCisgICAgICAgIGZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOworICAgIAorI2lmIFBM
QVRGT1JNKElPUykKKyAgICBpZiAoYWN0dWFsRm9udCkKKyAgICAgICAgZm9udCA9IFthY3R1YWxG
b250IGZvbnRXaXRoU2l6ZTpmb250U2l6ZV07CisjZWxzZQorICAgIGlmIChhY3R1YWxGb250KQor
ICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmFjdHVhbEZvbnQgdG9TaXpl
OmZvbnRTaXplXTsKKyNlbmRpZgorICAgIGlmICghZm9udCkgeworICAgICAgICBTdHJpbmcgZm9u
dE5hbWUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0
eUZvbnRGYW1pbHkpOworICAgICAgICBpZiAoZm9udE5hbWUubGVuZ3RoKCkpCisgICAgICAgICAg
ICBmb250ID0gX2ZvbnRGb3JOYW1lQW5kU2l6ZShmb250TmFtZS51cHBlcigpLCBmb250U2l6ZSwg
X2ZvbnRDYWNoZSk7CisgICAgICAgIGlmICghZm9udCkKKyAgICAgICAgICAgIGZvbnQgPSBbUGxh
dGZvcm1Gb250Q2xhc3MgZm9udFdpdGhOYW1lOkAiVGltZXMiIHNpemU6Zm9udFNpemVdOworCisg
ICAgICAgIFN0cmluZyBmb250U3R5bGUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShl
bGVtZW50LCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSk7CisgICAgICAgIGlmIChmb250U3R5bGUgPT0g
Iml0YWxpYyIgfHwgZm9udFN0eWxlID09ICJvYmxpcXVlIikgeworICAgICAgICAgICAgUGxhdGZv
cm1Gb250ICpvcmlnaW5hbEZvbnQgPSBmb250OworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAg
ICAgIGZvbnQgPSBbUGxhdGZvcm1Gb250Q2xhc3MgZm9udFdpdGhGYW1pbHlOYW1lOltmb250IGZh
bWlseU5hbWVdIHRyYWl0czpVSUZvbnRUcmFpdEl0YWxpYyBzaXplOltmb250IHBvaW50U2l6ZV1d
OworI2Vsc2UKKyAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9u
dCB0b0hhdmVUcmFpdDpOU0l0YWxpY0ZvbnRNYXNrXTsKKyNlbmRpZgorICAgICAgICAgICAgaWYg
KCFmb250KQorICAgICAgICAgICAgICAgIGZvbnQgPSBvcmlnaW5hbEZvbnQ7CisgICAgICAgIH0K
KworICAgICAgICBTdHJpbmcgZm9udFdlaWdodCA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JO
b2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKKyAgICAgICAgaWYgKGZvbnRXZWln
aHQuc3RhcnRzV2l0aCgiYm9sZCIpIHx8IGZvbnRXZWlnaHQudG9JbnQoKSA+PSA3MDApIHsKKyAg
ICAgICAgICAgIC8vID8/PyBoYW5kbGUgd2VpZ2h0IHByb3Blcmx5IHVzaW5nIE5TRm9udE1hbmFn
ZXIKKyAgICAgICAgICAgIFBsYXRmb3JtRm9udCAqb3JpZ2luYWxGb250ID0gZm9udDsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgICAgICBmb250ID0gW1BsYXRmb3JtRm9udENsYXNzIGZvbnRX
aXRoRmFtaWx5TmFtZTpbZm9udCBmYW1pbHlOYW1lXSB0cmFpdHM6VUlGb250VHJhaXRCb2xkIHNp
emU6W2ZvbnQgcG9pbnRTaXplXV07CisjZWxzZQorICAgICAgICAgICAgZm9udCA9IFtmb250TWFu
YWdlciBjb252ZXJ0Rm9udDpmb250IHRvSGF2ZVRyYWl0Ok5TQm9sZEZvbnRNYXNrXTsKKyNlbmRp
ZgorICAgICAgICAgICAgaWYgKCFmb250KQorICAgICAgICAgICAgICAgIGZvbnQgPSBvcmlnaW5h
bEZvbnQ7CisgICAgICAgIH0KKyNpZiAhUExBVEZPUk0oSU9TKSAvLyBJSkI6IE5vIHNtYWxsIGNh
cHMgc3VwcG9ydCBvbiBpT1MKKyAgICAgICAgaWYgKF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JO
b2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpID09ICJzbWFsbC1jYXBzIikgewor
ICAgICAgICAgICAgLy8gPz8/IHN5bnRoZXNpemUgc21hbGwtY2FwcyBpZiBbZm9udCBpc0VxdWFs
Om9yaWdpbmFsRm9udF0KKyAgICAgICAgICAgIE5TRm9udCAqb3JpZ2luYWxGb250ID0gZm9udDsK
KyAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b0hhdmVU
cmFpdDpOU1NtYWxsQ2Fwc0ZvbnRNYXNrXTsKKyAgICAgICAgICAgIGlmICghZm9udCkKKyAgICAg
ICAgICAgICAgICBmb250ID0gb3JpZ2luYWxGb250OworICAgICAgICB9CisjZW5kaWYKKyAgICB9
CisgICAgaWYgKGZvbnQpCisgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNG
b250QXR0cmlidXRlTmFtZV07CisgICAgaWYgKGZvcmVncm91bmRDb2xvcikKKyAgICAgICAgW2F0
dHJzIHNldE9iamVjdDpmb3JlZ3JvdW5kQ29sb3IgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0
cmlidXRlTmFtZV07CisgICAgaWYgKGJhY2tncm91bmRDb2xvciAmJiAhX2NhY2hlcy0+ZWxlbWVu
dEhhc093bkJhY2tncm91bmRDb2xvcihlbGVtZW50KSkKKyAgICAgICAgW2F0dHJzIHNldE9iamVj
dDpiYWNrZ3JvdW5kQ29sb3IgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07
CisKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IDAuMDsKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQ
cm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VX
aWR0aCwgc3Ryb2tlV2lkdGgpKSB7CisgICAgICAgIGZsb2F0IHRleHRTdHJva2VXaWR0aCA9IHN0
cm9rZVdpZHRoIC8gKFtmb250IHBvaW50U2l6ZV0gKiAwLjAxKTsKKyAgICAgICAgW2F0dHJzIHNl
dE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp0ZXh0U3Ryb2tlV2lkdGhdIGZvcktl
eTpOU1N0cm9rZVdpZHRoQXR0cmlidXRlTmFtZV07CisgICAgfQorICAgIGlmIChzdHJva2VDb2xv
cikKKyAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHJva2VDb2xvciBmb3JLZXk6TlNTdHJva2VD
b2xvckF0dHJpYnV0ZU5hbWVdOworCisgICAgU3RyaW5nIGZvbnRLZXJuaW5nID0gX2NhY2hlcy0+
cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlXZWJraXRGb250S2Vybmlu
Zyk7CisgICAgU3RyaW5nIGxldHRlclNwYWNpbmcgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9y
Tm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmcpOworICAgIGlmIChmb250S2Vy
bmluZy5sZW5ndGgoKSB8fCBsZXR0ZXJTcGFjaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChm
b250S2VybmluZyA9PSAibm9uZSIpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OkAwLjAg
Zm9yS2V5Ok5TS2VybkF0dHJpYnV0ZU5hbWVdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGRvdWJsZSBrZXJuVmFsID0gbGV0dGVyU3BhY2luZy5sZW5ndGgoKSA/IGxldHRlclNwYWNpbmcu
dG9Eb3VibGUoKSA6IDAuMDsKKyAgICAgICAgICAgIGlmIChVSUZsb2F0SXNaZXJvKGtlcm5WYWwp
KQorICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6QDAuMCBmb3JLZXk6TlNLZXJuQXR0
cmlidXRlTmFtZV07IC8vIGF1dG8gYW5kIG5vcm1hbCwgdGhlIG90aGVyIHBvc3NpYmxlIHZhbHVl
cywgYXJlIGJvdGggImtlcm5pbmcgZW5hYmxlZCIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmtlcm5W
YWxdIGZvcktleTpOU0tlcm5BdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFN0cmluZyBmb250TGlnYXR1cmVzID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxl
bWVudCwgQ1NTUHJvcGVydHlXZWJraXRGb250VmFyaWFudExpZ2F0dXJlcyk7CisgICAgaWYgKGZv
bnRMaWdhdHVyZXMubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKGZvbnRMaWdhdHVyZXMuY29udGFp
bnMoIm5vcm1hbCIpKQorICAgICAgICAgICAgOyAgIC8vIGRlZmF1bHQ6IHdoYXRldmVyIHRoZSBz
eXN0ZW0gZGVjaWRlcyB0byBkbworICAgICAgICBlbHNlIGlmIChmb250TGlnYXR1cmVzLmNvbnRh
aW5zKCJjb21tb24tbGlnYXR1cmVzIikpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OkAx
IGZvcktleTpOU0xpZ2F0dXJlQXR0cmlidXRlTmFtZV07ICAgLy8gZXhwbGljaXRseSBlbmFibGVk
CisgICAgICAgIGVsc2UgaWYgKGZvbnRMaWdhdHVyZXMuY29udGFpbnMoIm5vLWNvbW1vbi1saWdh
dHVyZXMiKSkKKyAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6QDAgZm9yS2V5Ok5TTGlnYXR1
cmVBdHRyaWJ1dGVOYW1lXTsgIC8vIGV4cGxpY2l0bHkgZGlzYWJsZWQKKyAgICB9CisKKyAgICBT
dHJpbmcgdGV4dERlY29yYXRpb24gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVt
ZW50LCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICBpZiAodGV4dERlY29yYXRpb24u
bGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKHRleHREZWNvcmF0aW9uLmNvbnRhaW5zKCJ1bmRlcmxp
bmUiKSkKKyAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJ
bnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0
cmlidXRlTmFtZV07CisgICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvbi5jb250YWlucygibGluZS10
aHJvdWdoIikpCisgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNTdHJpa2V0aHJvdWdo
U3R5bGVBdHRyaWJ1dGVOYW1lXTsKKyAgICB9CisKKyAgICBTdHJpbmcgdmVydGljYWxBbGlnbiA9
IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5VmVydGlj
YWxBbGlnbik7CisgICAgaWYgKHZlcnRpY2FsQWxpZ24ubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYg
KHZlcnRpY2FsQWxpZ24gPT0gInN1cGVyIikKKyAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOjFdIGZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmli
dXRlTmFtZV07CisgICAgICAgIGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT0gInN1YiIpCisgICAg
ICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjotMV0g
Zm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXTsKKyAgICB9CisKKyAgICBmbG9hdCBi
YXNlbGluZU9mZnNldCA9IDAuMDsKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVl
Rm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24sIGJhc2VsaW5lT2Zmc2V0
KSkKKyAgICAgICAgW2F0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpi
YXNlbGluZU9mZnNldF0gZm9yS2V5Ok5TQmFzZWxpbmVPZmZzZXRBdHRyaWJ1dGVOYW1lXTsKKwor
ICAgIFN0cmluZyB0ZXh0U2hhZG93ID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxl
bWVudCwgQ1NTUHJvcGVydHlUZXh0U2hhZG93KTsKKyAgICBpZiAodGV4dFNoYWRvdy5sZW5ndGgo
KSA+IDQpIHsKKyAgICAgICAgTlNTaGFkb3cgKnNoYWRvdyA9IF9zaGFkb3dGb3JTaGFkb3dTdHls
ZSh0ZXh0U2hhZG93KTsKKyAgICAgICAgaWYgKHNoYWRvdykKKyAgICAgICAgICAgIFthdHRycyBz
ZXRPYmplY3Q6c2hhZG93IGZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOworICAgIH0KKwor
ICAgIEVsZW1lbnQqIGJsb2NrRWxlbWVudCA9IF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoJmVs
ZW1lbnQpOworICAgIGlmICgmZWxlbWVudCAhPSBibG9ja0VsZW1lbnQgJiYgW193cml0aW5nRGly
ZWN0aW9uQXJyYXkgY291bnRdID4gMCkKKyAgICAgICAgW2F0dHJzIHNldE9iamVjdDpbTlNBcnJh
eSBhcnJheVdpdGhBcnJheTpfd3JpdGluZ0RpcmVjdGlvbkFycmF5XSBmb3JLZXk6TlNXcml0aW5n
RGlyZWN0aW9uQXR0cmlidXRlTmFtZV07CisKKyAgICBpZiAoYmxvY2tFbGVtZW50KSB7CisgICAg
ICAgIEVsZW1lbnQmIGNvcmVCbG9ja0VsZW1lbnQgPSAqYmxvY2tFbGVtZW50OworICAgICAgICBO
U011dGFibGVQYXJhZ3JhcGhTdHlsZSAqcGFyYWdyYXBoU3R5bGUgPSBbZGVmYXVsdFBhcmFncmFw
aFN0eWxlKCkgbXV0YWJsZUNvcHldOworICAgICAgICB1bnNpZ25lZCBoZWFkaW5nID0gMDsKKyAg
ICAgICAgaWYgKGNvcmVCbG9ja0VsZW1lbnQuaGFzVGFnTmFtZShoMVRhZykpCisgICAgICAgICAg
ICBoZWFkaW5nID0gMTsKKyAgICAgICAgZWxzZSBpZiAoY29yZUJsb2NrRWxlbWVudC5oYXNUYWdO
YW1lKGgyVGFnKSkKKyAgICAgICAgICAgIGhlYWRpbmcgPSAyOworICAgICAgICBlbHNlIGlmIChj
b3JlQmxvY2tFbGVtZW50Lmhhc1RhZ05hbWUoaDNUYWcpKQorICAgICAgICAgICAgaGVhZGluZyA9
IDM7CisgICAgICAgIGVsc2UgaWYgKGNvcmVCbG9ja0VsZW1lbnQuaGFzVGFnTmFtZShoNFRhZykp
CisgICAgICAgICAgICBoZWFkaW5nID0gNDsKKyAgICAgICAgZWxzZSBpZiAoY29yZUJsb2NrRWxl
bWVudC5oYXNUYWdOYW1lKGg1VGFnKSkKKyAgICAgICAgICAgIGhlYWRpbmcgPSA1OworICAgICAg
ICBlbHNlIGlmIChjb3JlQmxvY2tFbGVtZW50Lmhhc1RhZ05hbWUoaDZUYWcpKQorICAgICAgICAg
ICAgaGVhZGluZyA9IDY7CisgICAgICAgIGJvb2wgaXNQYXJhZ3JhcGggPSBjb3JlQmxvY2tFbGVt
ZW50Lmhhc1RhZ05hbWUocFRhZykgfHwgY29yZUJsb2NrRWxlbWVudC5oYXNUYWdOYW1lKGxpVGFn
KSB8fCBoZWFkaW5nOworCisgICAgICAgIFN0cmluZyB0ZXh0QWxpZ24gPSBfY2FjaGVzLT5wcm9w
ZXJ0eVZhbHVlRm9yTm9kZShjb3JlQmxvY2tFbGVtZW50LCBDU1NQcm9wZXJ0eVRleHRBbGlnbik7
CisgICAgICAgIGlmICh0ZXh0QWxpZ24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIC8vIFdlYktp
dCBjYW4gcmV0dXJuIC1raHRtbC1sZWZ0LCAta2h0bWwtcmlnaHQsIC1raHRtbC1jZW50ZXIKKyAg
ICAgICAgICAgIGlmICh0ZXh0QWxpZ24uZW5kc1dpdGgoImxlZnQiKSkKKyAgICAgICAgICAgICAg
ICBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudExlZnRdOworICAg
ICAgICAgICAgZWxzZSBpZiAodGV4dEFsaWduLmVuZHNXaXRoKCJyaWdodCIpKQorICAgICAgICAg
ICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50UmlnaHRd
OworICAgICAgICAgICAgZWxzZSBpZiAodGV4dEFsaWduLmVuZHNXaXRoKCJjZW50ZXIiKSkKKyAg
ICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVu
dENlbnRlcl07CisgICAgICAgICAgICBlbHNlIGlmICh0ZXh0QWxpZ24uZW5kc1dpdGgoImp1c3Rp
ZnkiKSkKKyAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TVGV4
dEFsaWdubWVudEp1c3RpZmllZF07CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgZGlyZWN0
aW9uID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZUJsb2NrRWxlbWVudCwgQ1NT
UHJvcGVydHlEaXJlY3Rpb24pOworICAgICAgICBpZiAoZGlyZWN0aW9uLmxlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09ICJsdHIiKQorICAgICAgICAgICAgICAgIFtwYXJh
Z3JhcGhTdHlsZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjpOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodF07CisgICAgICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gInJ0bCIpCisgICAg
ICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEJhc2VXcml0aW5nRGlyZWN0aW9uOk5TV3Jp
dGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBo
eXBoZW5hdGlvbiA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVCbG9ja0VsZW1l
bnQsIENTU1Byb3BlcnR5V2Via2l0SHlwaGVucyk7CisgICAgICAgIGlmIChoeXBoZW5hdGlvbi5s
ZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKGh5cGhlbmF0aW9uID09ICJhdXRvIikKKyAgICAg
ICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0SHlwaGVuYXRpb25GYWN0b3I6MS4wXTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0SHlwaGVu
YXRpb25GYWN0b3I6MC4wXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGVhZGluZykKKyAgICAg
ICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRIZWFkZXJMZXZlbDpoZWFkaW5nXTsKKyAgICAgICAg
aWYgKGlzUGFyYWdyYXBoKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGFyZSB3ZSBpZ25v
cmluZyBtYXJnaW4tdG9wPworICAgICAgICAgICAgZmxvYXQgbWFyZ2luTGVmdCA9IDAuMDsKKyAg
ICAgICAgICAgIGlmIChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVCbG9j
a0VsZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgbWFyZ2luTGVmdCkgJiYgbWFyZ2luTGVm
dCA+IDAuMCkKKyAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0SGVhZEluZGVudDpt
YXJnaW5MZWZ0XTsKKyAgICAgICAgICAgIGZsb2F0IHRleHRJbmRlbnQgPSAwLjA7CisgICAgICAg
ICAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShjb3JlQmxvY2tFbGVt
ZW50LCBDU1NQcm9wZXJ0eVRleHRJbmRlbnQsIHRleHRJbmRlbnQpICYmIHRleHRJbmRlbnQgPiAw
LjApCisgICAgICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEZpcnN0TGluZUhlYWRJbmRl
bnQ6W3BhcmFncmFwaFN0eWxlIGhlYWRJbmRlbnRdICsgdGV4dEluZGVudF07CisgICAgICAgICAg
ICBmbG9hdCBtYXJnaW5SaWdodCA9IDAuMDsKKyAgICAgICAgICAgIGlmIChfY2FjaGVzLT5mbG9h
dFByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVCbG9ja0VsZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2lu
UmlnaHQsIG1hcmdpblJpZ2h0KSAmJiBtYXJnaW5SaWdodCA+IDAuMCkKKyAgICAgICAgICAgICAg
ICBbcGFyYWdyYXBoU3R5bGUgc2V0VGFpbEluZGVudDotbWFyZ2luUmlnaHRdOworICAgICAgICAg
ICAgZmxvYXQgbWFyZ2luQm90dG9tID0gMC4wOworICAgICAgICAgICAgaWYgKF9jYWNoZXMtPmZs
b2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZUJsb2NrRWxlbWVudCwgQ1NTUHJvcGVydHlNYXJn
aW5SaWdodCwgbWFyZ2luQm90dG9tKSAmJiBtYXJnaW5Cb3R0b20gPiAwLjApCisgICAgICAgICAg
ICAgICAgW3BhcmFncmFwaFN0eWxlIHNldFBhcmFncmFwaFNwYWNpbmc6bWFyZ2luQm90dG9tXTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoW190ZXh0TGlzdHMgY291bnRdID4gMCkKKyAgICAgICAg
ICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRUZXh0TGlzdHM6X3RleHRMaXN0c107CisgICAgICAgIGlm
IChbX3RleHRCbG9ja3MgY291bnRdID4gMCkKKyAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBz
ZXRUZXh0QmxvY2tzOl90ZXh0QmxvY2tzXTsKKyAgICAgICAgW2F0dHJzIHNldE9iamVjdDpwYXJh
Z3JhcGhTdHlsZSBmb3JLZXk6TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdOworICAgICAg
ICBbcGFyYWdyYXBoU3R5bGUgcmVsZWFzZV07CisgICAgfQorICAgIHJldHVybiBhdHRyczsKK30K
KworCitOU0RpY3Rpb25hcnkqIEhUTUxDb252ZXJ0ZXI6OmF0dHJpYnV0ZXNGb3JFbGVtZW50KEVs
ZW1lbnQmIGVsZW1lbnQpCit7CisgICAgYXV0byYgYXR0cmlidXRlcyA9IG1fYXR0cmlidXRlc0Zv
ckVsZW1lbnRzLmFkZCgmZWxlbWVudCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlm
ICghYXR0cmlidXRlcykKKyAgICAgICAgYXR0cmlidXRlcyA9IGNvbXB1dGVkQXR0cmlidXRlc0Zv
ckVsZW1lbnQoZWxlbWVudCk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KCk7Cit9CisKK05T
RGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JBbmNlc3Rv
cnMoQ2hhcmFjdGVyRGF0YSYgbm9kZSkKK3sKKyAgICBOb2RlKiBhbmNlc3RvciA9IG5vZGUucGFy
ZW50Tm9kZSgpOworICAgIHdoaWxlIChhbmNlc3RvciAmJiAhYW5jZXN0b3ItPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOworICAgIGlm
ICghYW5jZXN0b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZ2dyZWdh
dGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoKnRvRWxlbWVudChhbmNlc3Rv
cikpOworfQorCitOU0RpY3Rpb25hcnkqIEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1
dGVzRm9yRWxlbWVudEFuZEl0c0FuY2VzdG9ycyhFbGVtZW50JiBlbGVtZW50KQoreworICAgIGF1
dG8mIGNhY2hlZEF0dHJpYnV0ZXMgPSBtX2FnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudHMu
YWRkKCZlbGVtZW50LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKGNhY2hlZEF0
dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBjYWNoZWRBdHRyaWJ1dGVzLmdldCgpOworCisgICAg
TlNEaWN0aW9uYXJ5KiBhdHRyaWJ1dGVzRm9yQ3VycmVudEVsZW1lbnQgPSBhdHRyaWJ1dGVzRm9y
RWxlbWVudChlbGVtZW50KTsKKyAgICBBU1NFUlQoYXR0cmlidXRlc0ZvckN1cnJlbnRFbGVtZW50
KTsKKworICAgIE5vZGUqIGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CisgICAgd2hp
bGUgKGFuY2VzdG9yICYmICFhbmNlc3Rvci0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBhbmNl
c3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCk7CisKKyAgICBpZiAoIWFuY2VzdG9yKSB7Cisg
ICAgICAgIGNhY2hlZEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzRm9yQ3VycmVudEVsZW1lbnQ7Cisg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGVzRm9yQ3VycmVudEVsZW1lbnQ7CisgICAgfQorCisgICAg
UmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMgPSBh
ZG9wdE5TKFthZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoKnRv
RWxlbWVudChhbmNlc3RvcikpIG11dGFibGVDb3B5XSk7CisgICAgW2F0dHJpYnV0ZXNGb3JBbmNl
c3RvcnMgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmF0dHJpYnV0ZXNGb3JDdXJyZW50RWxlbWVu
dF07CisgICAgbV9hZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRzLnNldCgmZWxlbWVudCwg
YXR0cmlidXRlc0ZvckFuY2VzdG9ycyk7CisKKyAgICByZXR1cm4gYXR0cmlidXRlc0ZvckFuY2Vz
dG9ycy5nZXQoKTsKK30KKwordm9pZCBIVE1MQ29udmVydGVyOjpfbmV3UGFyYWdyYXBoRm9yRWxl
bWVudChFbGVtZW50JiBlbGVtZW50LCBOU1N0cmluZyAqdGFnLCBCT09MIGZsYWcsIEJPT0wgc3Vw
cHJlc3NUcmFpbGluZ1NwYWNlKQoreworICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0
clN0ciBsZW5ndGhdOworICAgIHVuaWNoYXIgbGFzdENoYXIgPSAodGV4dExlbmd0aCA+IDApID8g
W1tfYXR0clN0ciBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6dGV4dExlbmd0aCAtIDFdIDogJ1xu
JzsKKyAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gKHN1cHByZXNzVHJhaWxpbmdTcGFjZSAm
JiBfZmxhZ3MuaXNTb2Z0ICYmIChsYXN0Q2hhciA9PSAnICcgfHwgbGFzdENoYXIgPT0gTlNMaW5l
U2VwYXJhdG9yQ2hhcmFjdGVyKSkgPyBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoIC0gMSwgMSkgOiBO
U01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKKyAgICBCT09MIG5lZWRCcmVhayA9IChmbGFnIHx8
IGxhc3RDaGFyICE9ICdcbicpOworICAgIGlmIChuZWVkQnJlYWspIHsKKyAgICAgICAgTlNTdHJp
bmcgKnN0cmluZyA9ICgoW0AiQk9EWSIgaXNFcXVhbFRvU3RyaW5nOnRhZ10gfHwgW0AiSFRNTCIg
aXNFcXVhbFRvU3RyaW5nOnRhZ10pID8gQCIiIDogQCJcbiIpOworICAgICAgICBbX3dyaXRpbmdE
aXJlY3Rpb25BcnJheSByZW1vdmVBbGxPYmplY3RzXTsKKyAgICAgICAgW19hdHRyU3RyIHJlcGxh
Y2VDaGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOnN0cmluZ107Cisg
ICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0SW5kZXgp
CisgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ICs9IFtzdHJpbmcgbGVuZ3RoXSAtIHJh
bmdlVG9SZXBsYWNlLmxlbmd0aDsKKyAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gW3N0
cmluZyBsZW5ndGhdOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gYXR0cmlidXRlc0Zv
ckVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAw
KQorICAgICAgICAgICAgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VU
b1JlcGxhY2VdOworICAgICAgICBfZmxhZ3MuaXNTb2Z0ID0gWUVTOworICAgIH0KK30KKwordm9p
ZCBIVE1MQ29udmVydGVyOjpfbmV3TGluZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKK3sK
KyAgICB1bmljaGFyIGMgPSBOU0xpbmVTZXBhcmF0b3JDaGFyYWN0ZXI7CisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hh
cmFjdGVyczomYyBsZW5ndGg6MV0pOworICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0
clN0ciBsZW5ndGhdOworICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0
ZXh0TGVuZ3RoLCAwKTsKKyAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJh
bmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nLmdldCgpXTsKKyAgICByYW5nZVRvUmVwbGFj
ZS5sZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07CisgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0
aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkKKyAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCAr
PSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7CisgICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IGF0dHJp
YnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQpOworICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGgg
PiAwKQorICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRv
UmVwbGFjZV07CisgICAgX2ZsYWdzLmlzU29mdCA9IFlFUzsKK30KKwordm9pZCBIVE1MQ29udmVy
dGVyOjpfbmV3VGFiRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQoreworICAgIE5TU3RyaW5n
ICpzdHJpbmcgPSBAIlx0IjsKKyAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIg
bGVuZ3RoXTsKKyAgICB1bmljaGFyIGxhc3RDaGFyID0gKHRleHRMZW5ndGggPiAwKSA/IFtbX2F0
dHJTdHIgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OnRleHRMZW5ndGggLSAxXSA6ICdcbic7Cisg
ICAgTlNSYW5nZSByYW5nZVRvUmVwbGFjZSA9IChfZmxhZ3MuaXNTb2Z0ICYmIGxhc3RDaGFyID09
ICcgJykgPyBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoIC0gMSwgMSkgOiBOU01ha2VSYW5nZSh0ZXh0
TGVuZ3RoLCAwKTsKKyAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdl
VG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nXTsKKyAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGgg
PSBbc3RyaW5nIGxlbmd0aF07CisgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2Rv
bVJhbmdlU3RhcnRJbmRleCkKKyAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRv
UmVwbGFjZS5sZW5ndGg7CisgICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IGF0dHJpYnV0ZXNGb3JF
bGVtZW50KGVsZW1lbnQpOworICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQorICAg
ICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07
CisgICAgX2ZsYWdzLmlzU29mdCA9IFlFUzsKK30KKworc3RhdGljIENsYXNzIF9XZWJNZXNzYWdl
RG9jdW1lbnRDbGFzcygpCit7CisgICAgc3RhdGljIENsYXNzIF9XZWJNZXNzYWdlRG9jdW1lbnRD
bGFzcyA9IE5pbDsKKyAgICBzdGF0aWMgQk9PTCBsb29rZWRVcENsYXNzID0gTk87CisgICAgaWYg
KCFsb29rZWRVcENsYXNzKSB7CisgICAgICAgIC8vIElmIHRoZSBjbGFzcyBpcyBub3QgdGhlcmUs
IHdlIGRvbid0IHdhbnQgdG8gdHJ5IGFnYWluCisgICAgICAgIF9XZWJNZXNzYWdlRG9jdW1lbnRD
bGFzcyA9IG9iamNfbG9va1VwQ2xhc3MoIk1GV2ViTWVzc2FnZURvY3VtZW50Iik7CisgICAgICAg
IGlmIChfV2ViTWVzc2FnZURvY3VtZW50Q2xhc3MgJiYgIVtfV2ViTWVzc2FnZURvY3VtZW50Q2xh
c3MgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihkb2N1bWVudDphdHRhY2htZW50OmZvclVS
TDopXSkKKyAgICAgICAgICAgIF9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyA9IE5pbDsKKyAgICAg
ICAgbG9va2VkVXBDbGFzcyA9IFlFUzsKKyAgICB9CisgICAgcmV0dXJuIF9XZWJNZXNzYWdlRG9j
dW1lbnRDbGFzczsKK30KKworQk9PTCBIVE1MQ29udmVydGVyOjpfYWRkQXR0YWNobWVudEZvckVs
ZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgTlNVUkwgKnVybCwgQk9PTCBuZWVkc1BhcmFncmFwaCwg
Qk9PTCB1c2VQbGFjZWhvbGRlcikKK3sKKyAgICBCT09MIHJldHZhbCA9IE5POworICAgIEJPT0wg
bm90Rm91bmQgPSBOTzsKKyAgICBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlciA9IG5pbDsKKyAg
ICBGcmFtZSogZnJhbWUgPSBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBEb2N1bWVu
dExvYWRlciAqZGF0YVNvdXJjZSA9IGZyYW1lLT5sb2FkZXIoKS5mcmFtZUhhc0xvYWRlZCgpID8g
ZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgOiAwOworICAgIEJPT0wgaWdub3JlT3Jp
ZW50YXRpb24gPSBZRVM7CisKKyAgICBpZiAoW3VybCBpc0ZpbGVVUkxdKSB7CisgICAgICAgIE5T
U3RyaW5nICpwYXRoID0gW1t1cmwgcGF0aF0gc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aF07Cisg
ICAgICAgIGlmIChwYXRoKQorICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFw
cGVyIGFsbG9jXSBpbml0V2l0aFVSTDp1cmwgb3B0aW9uczowIGVycm9yOk5VTExdIGF1dG9yZWxl
YXNlXTsKKyAgICB9CisgICAgaWYgKCFmaWxlV3JhcHBlcikgeworICAgICAgICBSZWZQdHI8QXJj
aGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IGRhdGFTb3VyY2UtPnN1YnJlc291cmNlKHVybCk7Cisg
ICAgICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgICAgICByZXNvdXJjZSA9IGRhdGFTb3VyY2Ut
PnN1YnJlc291cmNlKHVybCk7CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSA9IHJl
c291cmNlLT5taW1lVHlwZSgpOworICAgICAgICBpZiAodXNlUGxhY2Vob2xkZXIgJiYgcmVzb3Vy
Y2UgJiYgbWltZVR5cGUgPT0gInRleHQvaHRtbCIpCisgICAgICAgICAgICBub3RGb3VuZCA9IFlF
UzsKKyAgICAgICAgaWYgKHJlc291cmNlICYmICFub3RGb3VuZCkgeworICAgICAgICAgICAgZmls
ZVdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29u
dGVudHM6cmVzb3VyY2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgICAgIFtmaWxlV3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpzdWdnZXN0
ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZSh1cmwsIG1pbWVUeXBlKV07CisgICAgICAgIH0KKyAgICB9
CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBpZiAoIWZpbGVXcmFwcGVyICYmICFub3RGb3VuZCkg
eworICAgICAgICBmaWxlV3JhcHBlciA9IGZpbGVXcmFwcGVyRm9yVVJMKGRhdGFTb3VyY2UsIHVy
bCk7CisgICAgICAgIGlmICh1c2VQbGFjZWhvbGRlciAmJiBmaWxlV3JhcHBlciAmJiBbW1tbZmls
ZVdyYXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdIHBhdGhFeHRlbnNpb25dIGxvd2VyY2FzZVN0cmlu
Z10gaGFzUHJlZml4OkAiaHRtIl0pCisgICAgICAgICAgICBub3RGb3VuZCA9IFlFUzsKKyAgICAg
ICAgaWYgKG5vdEZvdW5kKQorICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBuaWw7CisgICAgfQor
ICAgIGlmICghZmlsZVdyYXBwZXIgJiYgIW5vdEZvdW5kKSB7CisgICAgICAgIGZpbGVXcmFwcGVy
ID0gZmlsZVdyYXBwZXJGb3JVUkwobV9kYXRhU291cmNlLCB1cmwpOworICAgICAgICBpZiAodXNl
UGxhY2Vob2xkZXIgJiYgZmlsZVdyYXBwZXIgJiYgW1tbW2ZpbGVXcmFwcGVyIHByZWZlcnJlZEZp
bGVuYW1lXSBwYXRoRXh0ZW5zaW9uXSBsb3dlcmNhc2VTdHJpbmddIGhhc1ByZWZpeDpAImh0bSJd
KQorICAgICAgICAgICAgbm90Rm91bmQgPSBZRVM7CisgICAgICAgIGlmIChub3RGb3VuZCkKKyAg
ICAgICAgICAgIGZpbGVXcmFwcGVyID0gbmlsOworICAgIH0KKyNlbmRpZgorICAgIGlmICghZmls
ZVdyYXBwZXIgJiYgIW5vdEZvdW5kICYmIHVybCkgeworICAgICAgICAvLyBTcGVjaWFsIGhhbmRs
aW5nIGZvciBNYWlsIGF0dGFjaG1lbnRzLCB1bnRpbCBXZWJLaXQgcHJvdmlkZXMgYSBzdGFuZGFy
ZCB3YXkgdG8gZ2V0IHRoZSBkYXRhLgorICAgICAgICBDbGFzcyBXZWJNZXNzYWdlRG9jdW1lbnRD
bGFzcyA9IF9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcygpOworICAgICAgICBpZiAoV2ViTWVzc2Fn
ZURvY3VtZW50Q2xhc3MpIHsKKyAgICAgICAgICAgIE5TVGV4dEF0dGFjaG1lbnQgKm1pbWVUZXh0
QXR0YWNobWVudCA9IG5pbDsKKyAgICAgICAgICAgIFtXZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyBk
b2N1bWVudDpOVUxMIGF0dGFjaG1lbnQ6Jm1pbWVUZXh0QXR0YWNobWVudCBmb3JVUkw6dXJsXTsK
KyAgICAgICAgICAgIGlmIChtaW1lVGV4dEF0dGFjaG1lbnQgJiYgW21pbWVUZXh0QXR0YWNobWVu
dCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGZpbGVXcmFwcGVyKV0pIHsKKyAgICAgICAg
ICAgICAgICBmaWxlV3JhcHBlciA9IFttaW1lVGV4dEF0dGFjaG1lbnQgcGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3RvcihmaWxlV3JhcHBlcildOworICAgICAgICAgICAgICAgIGlnbm9yZU9yaWVudGF0
aW9uID0gTk87CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZpbGVX
cmFwcGVyIHx8IHVzZVBsYWNlaG9sZGVyKSB7CisgICAgICAgIE5TVUludGVnZXIgdGV4dExlbmd0
aCA9IFtfYXR0clN0ciBsZW5ndGhdOworICAgICAgICBSZXRhaW5QdHI8TlNUZXh0QXR0YWNobWVu
dD4gYXR0YWNobWVudCA9IGFkb3B0TlMoW1tQbGF0Zm9ybU5TVGV4dEF0dGFjaG1lbnQgYWxsb2Nd
IGluaXRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXJdKTsKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgICAgIGZsb2F0IHZlcnRpY2FsQWxpZ24gPSAwLjA7CisgICAgICAgIF9jYWNoZXMtPmZsb2F0
UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduLCB2
ZXJ0aWNhbEFsaWduKTsKKyAgICAgICAgYXR0YWNobWVudC5nZXQoKS5ib3VuZHMgPSBDR1JlY3RN
YWtlKDAsICh2ZXJ0aWNhbEFsaWduIC8gMTAwKSAqIGVsZW1lbnQuY2xpZW50SGVpZ2h0KCksIGVs
ZW1lbnQuY2xpZW50V2lkdGgoKSwgZWxlbWVudC5jbGllbnRIZWlnaHQoKSk7CisjZW5kaWYKKyAg
ICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxs
b2NdIGluaXRXaXRoRm9ybWF0OihuZWVkc1BhcmFncmFwaCA/IEAiJUNcbiIgOiBAIiVDIiksIHN0
YXRpY19jYXN0PHVuaWNoYXI+KE5TQXR0YWNobWVudENoYXJhY3RlcildKTsKKyAgICAgICAgTlNS
YW5nZSByYW5nZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGgsIDApOworICAgICAg
ICBOU0RpY3Rpb25hcnkgKmF0dHJzOworICAgICAgICBpZiAoZmlsZVdyYXBwZXIpIHsKKyNpZiAh
UExBVEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKGlnbm9yZU9yaWVudGF0aW9uKQorICAgICAg
ICAgICAgICAgIFthdHRhY2htZW50IHNldElnbm9yZXNPcmllbnRhdGlvbjpZRVNdOworI2VuZGlm
CisgICAgICAgIH0gZWxzZSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgW2F0dGFj
aG1lbnQgcmVsZWFzZV07CisgICAgICAgICAgICBOU1VSTCAqbWlzc2luZ0ltYWdlVVJMID0gW193
ZWJLaXRCdW5kbGUoKSBVUkxGb3JSZXNvdXJjZTpAIm1pc3NpbmdfaW1hZ2UiIHdpdGhFeHRlbnNp
b246QCJ0aWZmIl07CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1pc3NpbmdJbWFn
ZVVSTCAhPSBuaWwsICJVbmFibGUgdG8gZmluZCBtaXNzaW5nX2ltYWdlLnRpZmYhIik7CisgICAg
ICAgICAgICBOU0ZpbGVXcmFwcGVyICptaXNzaW5nSW1hZ2VGaWxlV3JhcHBlciA9IFtbW05TRmls
ZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOm1pc3NpbmdJbWFnZVVSTCBvcHRpb25zOjAgZXJy
b3I6TlVMTF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgYXR0YWNobWVudCA9IFtbUGxhdGZv
cm1OU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aEZpbGVXcmFwcGVyOm1pc3NpbmdJbWFn
ZUZpbGVXcmFwcGVyXTsKKyNlbHNlCisgICAgICAgICAgICBzdGF0aWMgTlNJbWFnZSAqbWlzc2lu
Z0ltYWdlID0gbmlsOworICAgICAgICAgICAgTlNUZXh0QXR0YWNobWVudENlbGwgKmNlbGw7Cisg
ICAgICAgICAgICBjZWxsID0gW1tOU1RleHRBdHRhY2htZW50Q2VsbCBhbGxvY10gaW5pdEltYWdl
Q2VsbDptaXNzaW5nSW1hZ2VdOworICAgICAgICAgICAgW2F0dGFjaG1lbnQgc2V0QXR0YWNobWVu
dENlbGw6Y2VsbF07CisgICAgICAgICAgICBbY2VsbCByZWxlYXNlXTsKKyNlbmRpZgorICAgICAg
ICB9CisgICAgICAgIFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1Jl
cGxhY2Ugd2l0aFN0cmluZzpzdHJpbmcuZ2V0KCldOworICAgICAgICByYW5nZVRvUmVwbGFjZS5s
ZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07CisgICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2Nh
dGlvbiA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpCisgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydElu
ZGV4ICs9IHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKKyAgICAgICAgYXR0cnMgPSBhdHRyaWJ1dGVz
Rm9yRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJh
bmdlVG9SZXBsYWNlXTsKKyAgICAgICAgICAgIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IDE7Cisg
ICAgICAgICAgICBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5TQXR0YWNobWVudEF0dHJpYnV0ZU5h
bWUgdmFsdWU6YXR0YWNobWVudC5nZXQoKSByYW5nZTpyYW5nZVRvUmVwbGFjZV07CisgICAgICAg
IH0KKyAgICAgICAgX2ZsYWdzLmlzU29mdCA9IE5POworICAgICAgICByZXR2YWwgPSBZRVM7Cisg
ICAgfQorICAgIHJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZFF1
b3RlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBCT09MIG9wZW5pbmcsIE5TSW50ZWdlciBs
ZXZlbCkKK3sKKyAgICB1bmljaGFyIGMgPSAoKGxldmVsICUgMikgPT0gMCkgPyAob3BlbmluZyA/
IDB4MjAxYyA6IDB4MjAxZCkgOiAob3BlbmluZyA/IDB4MjAxOCA6IDB4MjAxOSk7CisgICAgUmV0
YWluUHRyPE5TU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRX
aXRoQ2hhcmFjdGVyczomYyBsZW5ndGg6MV0pOworICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9
IFtfYXR0clN0ciBsZW5ndGhdOworICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VS
YW5nZSh0ZXh0TGVuZ3RoLCAwKTsKKyAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJh
bmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6c3RyaW5nLmdldCgpXTsKKyAgICByYW5nZVRv
UmVwbGFjZS5sZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07CisgICAgaWYgKHJhbmdlVG9SZXBsYWNl
LmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkKKyAgICAgICAgX2RvbVJhbmdlU3RhcnRJ
bmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFy
eT4gYXR0cnMgPSBhdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50KTsKKyAgICBpZiAocmFuZ2VU
b1JlcGxhY2UubGVuZ3RoID4gMCkKKyAgICAgICAgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0
cnMuZ2V0KCkgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOworICAgIF9mbGFncy5pc1NvZnQgPSBOTzsK
K30KKwordm9pZCBIVE1MQ29udmVydGVyOjpfYWRkVmFsdWUoTlNTdHJpbmcgKnZhbHVlLCBFbGVt
ZW50JiBlbGVtZW50KQoreworICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBs
ZW5ndGhdOworICAgIE5TVUludGVnZXIgdmFsdWVMZW5ndGggPSBbdmFsdWUgbGVuZ3RoXTsKKyAg
ICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCk7Cisg
ICAgaWYgKHZhbHVlTGVuZ3RoKSB7CisgICAgICAgIFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVy
c0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzp2YWx1ZV07CisgICAgICAgIHJhbmdl
VG9SZXBsYWNlLmxlbmd0aCA9IHZhbHVlTGVuZ3RoOworICAgICAgICBpZiAocmFuZ2VUb1JlcGxh
Y2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KQorICAgICAgICAgICAgX2RvbVJhbmdl
U3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7CisgICAgICAgIFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+IGF0dHJzID0gYXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7CisgICAg
ICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQorICAgICAgICAgICAgW19hdHRyU3Ry
IHNldEF0dHJpYnV0ZXM6YXR0cnMuZ2V0KCkgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOworICAgICAg
ICBfZmxhZ3MuaXNTb2Z0ID0gTk87CisgICAgfQorfQorCit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9m
aWxsSW5CbG9jayhOU1RleHRCbG9jayAqYmxvY2ssIEVsZW1lbnQmIGVsZW1lbnQsIFBsYXRmb3Jt
Q29sb3IgKmJhY2tncm91bmRDb2xvciwgQ0dGbG9hdCBleHRyYU1hcmdpbiwgQ0dGbG9hdCBleHRy
YVBhZGRpbmcsIEJPT0wgaXNUYWJsZSkKK3sKKyAgICBmbG9hdCByZXN1bHQgPSAwOworICAgIAor
ICAgIE5TU3RyaW5nICp3aWR0aCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKHdpZHRoQXR0cik7Cisg
ICAgaWYgKCh3aWR0aCAmJiBbd2lkdGggbGVuZ3RoXSkgfHwgIWlzVGFibGUpIHsKKyAgICAgICAg
aWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVy
dHlXaWR0aCwgcmVzdWx0KSkKKyAgICAgICAgICAgIFtibG9jayBzZXRWYWx1ZTpyZXN1bHQgdHlw
ZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckRpbWVuc2lvbjpOU1RleHRCbG9ja1dp
ZHRoXTsKKyAgICB9CisgICAgCisgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZv
ck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlNaW5XaWR0aCwgcmVzdWx0KSkKKyAgICAgICAgW2Js
b2NrIHNldFZhbHVlOnJlc3VsdCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9y
RGltZW5zaW9uOk5TVGV4dEJsb2NrTWluaW11bVdpZHRoXTsKKyAgICBpZiAoX2NhY2hlcy0+Zmxv
YXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eU1heFdpZHRoLCByZXN1
bHQpKQorICAgICAgICBbYmxvY2sgc2V0VmFsdWU6cmVzdWx0IHR5cGU6TlNUZXh0QmxvY2tBYnNv
bHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tNYXhpbXVtV2lkdGhdOworICAg
IGlmIChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3Bl
cnR5TWluSGVpZ2h0LCByZXN1bHQpKQorICAgICAgICBbYmxvY2sgc2V0VmFsdWU6cmVzdWx0IHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tN
aW5pbXVtSGVpZ2h0XTsKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9k
ZShlbGVtZW50LCBDU1NQcm9wZXJ0eU1heEhlaWdodCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2Nr
IHNldFZhbHVlOnJlc3VsdCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGlt
ZW5zaW9uOk5TVGV4dEJsb2NrTWF4aW11bUhlaWdodF07CisKKyAgICBpZiAoX2NhY2hlcy0+Zmxv
YXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCBy
ZXN1bHQpKQorICAgICAgICBbYmxvY2sgc2V0V2lkdGg6cmVzdWx0ICsgZXh0cmFQYWRkaW5nIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRp
bmcgZWRnZTpOU01pblhFZGdlXTsKKyAgICBlbHNlCisgICAgICAgIFtibG9jayBzZXRXaWR0aDpl
eHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5T
VGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWluWEVkZ2VdOworICAgIAorICAgIGlmIChfY2FjaGVz
LT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5UGFkZGluZ1Rv
cCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCArIGV4dHJhUGFkZGlu
ZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQ
YWRkaW5nIGVkZ2U6TlNNaW5ZRWRnZV07CisgICAgZWxzZQorICAgICAgICBbYmxvY2sgc2V0V2lk
dGg6ZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXll
cjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01pbllFZGdlXTsKKyAgICAKKyAgICBpZiAoX2Nh
Y2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVBhZGRp
bmdSaWdodCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCArIGV4dHJh
UGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0
QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhYRWRnZV07CisgICAgZWxzZQorICAgICAgICBbYmxvY2sg
c2V0V2lkdGg6ZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBm
b3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01heFhFZGdlXTsKKyAgICAKKyAgICBp
ZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0
eVBhZGRpbmdCb3R0b20sIHJlc3VsdCkpCisgICAgICAgIFtibG9jayBzZXRXaWR0aDpyZXN1bHQg
KyBleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVy
Ok5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWF4WUVkZ2VdOworICAgIGVsc2UKKyAgICAgICAg
W2Jsb2NrIHNldFdpZHRoOmV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1
ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhZRWRnZV07CisgICAg
CisgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIHJlc3VsdCkpCisgICAgICAgIFtibG9jayBzZXRXaWR0
aDpyZXN1bHQgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4
dEJsb2NrQm9yZGVyIGVkZ2U6TlNNaW5YRWRnZV07CisgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJv
cGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgcmVz
dWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCB0eXBlOk5TVGV4dEJsb2NrQWJz
b2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01pbllFZGdl
XTsKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBD
U1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsIHJlc3VsdCkpCisgICAgICAgIFtibG9jayBzZXRX
aWR0aDpyZXN1bHQgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5T
VGV4dEJsb2NrQm9yZGVyIGVkZ2U6TlNNYXhYRWRnZV07CisgICAgaWYgKF9jYWNoZXMtPmZsb2F0
UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0
aCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCB0eXBlOk5TVGV4dEJs
b2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01h
eFlFZGdlXTsKKworICAgIGlmIChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVs
ZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNl
dFdpZHRoOnJlc3VsdCArIGV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVl
VHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWluWEVkZ2VdOworICAgIGVs
c2UKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOmV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tB
YnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWluWEVk
Z2VdOworICAgIGlmIChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQs
IENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZXN1bHQpKQorICAgICAgICBbYmxvY2sgc2V0V2lkdGg6
cmVzdWx0ICsgZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZv
ckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNaW5ZRWRnZV07CisgICAgZWxzZQorICAg
ICAgICBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRl
VmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNaW5ZRWRnZV07Cisg
ICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJv
cGVydHlNYXJnaW5SaWdodCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3Vs
dCArIGV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXll
cjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WEVkZ2VdOworICAgIGVsc2UKKyAgICAgICAg
W2Jsb2NrIHNldFdpZHRoOmV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVl
VHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WEVkZ2VdOworICAgIGlm
IChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5
TWFyZ2luQm90dG9tLCByZXN1bHQpKQorICAgICAgICBbYmxvY2sgc2V0V2lkdGg6cmVzdWx0ICsg
ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5T
VGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhZRWRnZV07CisgICAgZWxzZQorICAgICAgICBbYmxv
Y2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBl
IGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhZRWRnZV07CisgICAgCisgICAg
UGxhdGZvcm1Db2xvciAqY29sb3IgPSBuaWw7CisgICAgaWYgKChjb2xvciA9IF9jb2xvckZvckVs
ZW1lbnQoZWxlbWVudCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSkKKyAgICAgICAgW2Js
b2NrIHNldEJhY2tncm91bmRDb2xvcjpjb2xvcl07CisgICAgaWYgKCFjb2xvciAmJiBiYWNrZ3Jv
dW5kQ29sb3IpCisgICAgICAgIFtibG9jayBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENv
bG9yXTsKKyAgICAKKyAgICBpZiAoKGNvbG9yID0gX2NvbG9yRm9yRWxlbWVudChlbGVtZW50LCBD
U1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcikpKQorICAgICAgICBbYmxvY2sgc2V0Qm9yZGVyQ29s
b3I6Y29sb3IgZm9yRWRnZTpOU01pblhFZGdlXTsKKyAgICAKKyAgICBpZiAoKGNvbG9yID0gX2Nv
bG9yRm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKSkpCisgICAg
ICAgIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWluWUVkZ2VdOworICAg
IGlmICgoY29sb3IgPSBfY29sb3JGb3JFbGVtZW50KGVsZW1lbnQsIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRDb2xvcikpKQorICAgICAgICBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29sb3IgZm9yRWRn
ZTpOU01heFhFZGdlXTsKKyAgICBpZiAoKGNvbG9yID0gX2NvbG9yRm9yRWxlbWVudChlbGVtZW50
LCBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yKSkpCisgICAgICAgIFtibG9jayBzZXRCb3Jk
ZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWF4WUVkZ2VdOworfQorCitzdGF0aWMgaW5saW5lIEJP
T0wgcmVhZDJEaWdpdE51bWJlcihjb25zdCBjaGFyICoqcHAsIGludDhfdCAqb3V0dmFsKQorewor
ICAgIEJPT0wgcmVzdWx0ID0gTk87CisgICAgY2hhciBjMSA9ICooKnBwKSsrLCBjMjsKKyAgICBp
ZiAoaXNBU0NJSURpZ2l0KGMxKSkgeworICAgICAgICBjMiA9ICooKnBwKSsrOworICAgICAgICBp
ZiAoaXNBU0NJSURpZ2l0KGMyKSkgeworICAgICAgICAgICAgKm91dHZhbCA9IDEwICogKGMxIC0g
JzAnKSArIChjMiAtICcwJyk7CisgICAgICAgICAgICByZXN1bHQgPSBZRVM7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBOU0RhdGUgKl9k
YXRlRm9yU3RyaW5nKE5TU3RyaW5nICpzdHJpbmcpCit7CisgICAgY29uc3QgY2hhciAqcCA9IFtz
dHJpbmcgVVRGOFN0cmluZ107CisgICAgUmV0YWluUHRyPE5TRGF0ZUNvbXBvbmVudHM+IGRhdGVD
b21wb25lbnRzID0gYWRvcHROUyhbW05TRGF0ZUNvbXBvbmVudHMgYWxsb2NdIGluaXRdKTsKKwor
ICAgIC8vIFNldCB0aGUgdGltZSB6b25lIHRvIEdNVAorICAgIFtkYXRlQ29tcG9uZW50cyBzZXRU
aW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1lWm9uZUZvclNlY29uZHNGcm9tR01UOjBdXTsKKworICAg
IE5TSW50ZWdlciB5ZWFyID0gMDsKKyAgICB3aGlsZSAoKnAgJiYgaXNBU0NJSURpZ2l0KCpwKSkK
KyAgICAgICAgeWVhciA9IDEwICogeWVhciArICpwKysgLSAnMCc7CisgICAgaWYgKCpwKysgIT0g
Jy0nKQorICAgICAgICByZXR1cm4gbmlsOworICAgIFtkYXRlQ29tcG9uZW50cyBzZXRZZWFyOnll
YXJdOworCisgICAgaW50OF90IGNvbXBvbmVudDsKKyAgICBpZiAoIXJlYWQyRGlnaXROdW1iZXIo
JnAsICZjb21wb25lbnQpIHx8ICpwKysgIT0gJy0nKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IFtkYXRlQ29tcG9uZW50cyBzZXRNb250aDpjb21wb25lbnRdOworCisgICAgaWYgKCFyZWFkMkRp
Z2l0TnVtYmVyKCZwLCAmY29tcG9uZW50KSB8fCAqcCsrICE9ICdUJykKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBbZGF0ZUNvbXBvbmVudHMgc2V0RGF5OmNvbXBvbmVudF07CisKKyAgICBpZiAo
IXJlYWQyRGlnaXROdW1iZXIoJnAsICZjb21wb25lbnQpIHx8ICpwKysgIT0gJzonKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIFtkYXRlQ29tcG9uZW50cyBzZXRIb3VyOmNvbXBvbmVudF07CisK
KyAgICBpZiAoIXJlYWQyRGlnaXROdW1iZXIoJnAsICZjb21wb25lbnQpIHx8ICpwKysgIT0gJzon
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIFtkYXRlQ29tcG9uZW50cyBzZXRNaW51dGU6Y29t
cG9uZW50XTsKKworICAgIGlmICghcmVhZDJEaWdpdE51bWJlcigmcCwgJmNvbXBvbmVudCkgfHwg
KnArKyAhPSAnWicpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgW2RhdGVDb21wb25lbnRzIHNl
dFNlY29uZDpjb21wb25lbnRdOworICAgIAorI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBIT05F
X09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTApCisgICAgTlNTdHJpbmcgKmNh
bGVuZGFySWRlbnRpZmllciA9IE5TQ2FsZW5kYXJJZGVudGlmaWVyR3JlZ29yaWFuOworI2Vsc2UK
KyAgICBOU1N0cmluZyAqY2FsZW5kYXJJZGVudGlmaWVyID0gTlNHcmVnb3JpYW5DYWxlbmRhcjsK
KyNlbmRpZgorCisgICAgcmV0dXJuIFtbW1tOU0NhbGVuZGFyIGFsbG9jXSBpbml0V2l0aENhbGVu
ZGFySWRlbnRpZmllcjpjYWxlbmRhcklkZW50aWZpZXJdIGF1dG9yZWxlYXNlXSBkYXRlRnJvbUNv
bXBvbmVudHM6ZGF0ZUNvbXBvbmVudHMuZ2V0KCldOworfQorCitzdGF0aWMgTlNJbnRlZ2VyIF9j
b2xDb21wYXJlKGlkIGJsb2NrMSwgaWQgYmxvY2syLCB2b2lkICopCit7CisgICAgTlNJbnRlZ2Vy
IGNvbDEgPSBbKE5TVGV4dFRhYmxlQmxvY2sgKilibG9jazEgc3RhcnRpbmdDb2x1bW5dOworICAg
IE5TSW50ZWdlciBjb2wyID0gWyhOU1RleHRUYWJsZUJsb2NrICopYmxvY2syIHN0YXJ0aW5nQ29s
dW1uXTsKKyAgICByZXR1cm4gKChjb2wxIDwgY29sMikgPyBOU09yZGVyZWRBc2NlbmRpbmcgOiAo
KGNvbDEgPT0gY29sMikgPyBOU09yZGVyZWRTYW1lIDogTlNPcmRlcmVkRGVzY2VuZGluZykpOwor
fQorCit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzTWV0YUVsZW1lbnRXaXRoTmFtZShOU1N0
cmluZyAqbmFtZSwgTlNTdHJpbmcgKmNvbnRlbnQpCit7CisgICAgTlNTdHJpbmcgKmtleSA9IG5p
bDsKKyAgICBpZiAoTlNPcmRlcmVkU2FtZSA9PSBbQCJDb2NvYVZlcnNpb24iIGNvbXBhcmU6bmFt
ZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkgeworICAgICAgICBDR0Zsb2F0IHZl
cnNpb25OdW1iZXIgPSBbY29udGVudCBkb3VibGVWYWx1ZV07CisgICAgICAgIGlmICh2ZXJzaW9u
TnVtYmVyID4gMC4wKSB7CisgICAgICAgICAgICAvLyA/Pz8gdGhpcyBzaG91bGQgYmUga2V5ZWQg
b2ZmIG9mIHZlcnNpb24gbnVtYmVyIGluIGZ1dHVyZQorICAgICAgICAgICAgW19kb2N1bWVudEF0
dHJzIHJlbW92ZU9iamVjdEZvcktleTpOU0NvbnZlcnRlZERvY3VtZW50QXR0cmlidXRlXTsKKyAg
ICAgICAgICAgIFtfZG9jdW1lbnRBdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6dmVyc2lvbk51bWJlcl0gZm9yS2V5Ok5TQ29jb2FWZXJzaW9uRG9jdW1lbnRBdHRyaWJ1
dGVdOworICAgICAgICB9CisjaWYgUExBVEZPUk0oSU9TKQorICAgIH0gZWxzZSBpZiAoTlNPcmRl
cmVkU2FtZSA9PSBbQCJHZW5lcmF0b3IiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vu
c2l0aXZlU2VhcmNoXSkgeworICAgICAgICBrZXkgPSBOU0dlbmVyYXRvckRvY3VtZW50QXR0cmli
dXRlOworI2VuZGlmCisgICAgfSBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIktleXdvcmRz
IiBjb21wYXJlOm5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0pIHsKKyAgICAg
ICAgaWYgKGNvbnRlbnQgJiYgW2NvbnRlbnQgbGVuZ3RoXSA+IDApIHsKKyAgICAgICAgICAgIE5T
QXJyYXkgKmFycmF5OworICAgICAgICAgICAgLy8gPz8/IG5lZWQgYmV0dGVyIGhhbmRsaW5nIGhl
cmUgYW5kIHRocm91Z2hvdXQKKyAgICAgICAgICAgIGlmIChbY29udGVudCByYW5nZU9mU3RyaW5n
OkAiLCAiXS5sZW5ndGggPT0gMCAmJiBbY29udGVudCByYW5nZU9mU3RyaW5nOkAiLCJdLmxlbmd0
aCA+IDApCisgICAgICAgICAgICAgICAgYXJyYXkgPSBbY29udGVudCBjb21wb25lbnRzU2VwYXJh
dGVkQnlTdHJpbmc6QCIsIl07CisgICAgICAgICAgICBlbHNlIGlmIChbY29udGVudCByYW5nZU9m
U3RyaW5nOkAiLCAiXS5sZW5ndGggPT0gMCAmJiBbY29udGVudCByYW5nZU9mU3RyaW5nOkAiICJd
Lmxlbmd0aCA+IDApCisgICAgICAgICAgICAgICAgYXJyYXkgPSBbY29udGVudCBjb21wb25lbnRz
U2VwYXJhdGVkQnlTdHJpbmc6QCIgIl07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgYXJyYXkgPSBbY29udGVudCBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIsICJdOwor
ICAgICAgICAgICAgW19kb2N1bWVudEF0dHJzIHNldE9iamVjdDphcnJheSBmb3JLZXk6TlNLZXl3
b3Jkc0RvY3VtZW50QXR0cmlidXRlXTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoTlNPcmRl
cmVkU2FtZSA9PSBbQCJBdXRob3IiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0
aXZlU2VhcmNoXSkKKyAgICAgICAga2V5ID0gTlNBdXRob3JEb2N1bWVudEF0dHJpYnV0ZTsKKyAg
ICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIkxhc3RBdXRob3IiIGNvbXBhcmU6bmFtZSBv
cHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkKKyAgICAgICAga2V5ID0gTlNFZGl0b3JE
b2N1bWVudEF0dHJpYnV0ZTsKKyAgICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIkNvbXBh
bnkiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkKKyAgICAg
ICAga2V5ID0gTlNDb21wYW55RG9jdW1lbnRBdHRyaWJ1dGU7CisgICAgZWxzZSBpZiAoTlNPcmRl
cmVkU2FtZSA9PSBbQCJDb3B5cmlnaHQiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vu
c2l0aXZlU2VhcmNoXSkKKyAgICAgICAga2V5ID0gTlNDb3B5cmlnaHREb2N1bWVudEF0dHJpYnV0
ZTsKKyAgICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIlN1YmplY3QiIGNvbXBhcmU6bmFt
ZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkKKyAgICAgICAga2V5ID0gTlNTdWJq
ZWN0RG9jdW1lbnRBdHRyaWJ1dGU7CisgICAgZWxzZSBpZiAoTlNPcmRlcmVkU2FtZSA9PSBbQCJE
ZXNjcmlwdGlvbiIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hd
IHx8IE5TT3JkZXJlZFNhbWUgPT0gW0AiQ29tbWVudCIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlND
YXNlSW5zZW5zaXRpdmVTZWFyY2hdKQorICAgICAgICBrZXkgPSBOU0NvbW1lbnREb2N1bWVudEF0
dHJpYnV0ZTsKKyAgICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIkNyZWF0aW9uVGltZSIg
Y29tcGFyZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdKSB7CisgICAgICAg
IGlmIChjb250ZW50ICYmIFtjb250ZW50IGxlbmd0aF0gPiAwKSB7CisgICAgICAgICAgICBOU0Rh
dGUgKmRhdGUgPSBfZGF0ZUZvclN0cmluZyhjb250ZW50KTsKKyAgICAgICAgICAgIGlmIChkYXRl
KQorICAgICAgICAgICAgICAgIFtfZG9jdW1lbnRBdHRycyBzZXRPYmplY3Q6ZGF0ZSBmb3JLZXk6
TlNDcmVhdGlvblRpbWVEb2N1bWVudEF0dHJpYnV0ZV07CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKE5TT3JkZXJlZFNhbWUgPT0gW0AiTW9kaWZpY2F0aW9uVGltZSIgY29tcGFyZTpuYW1lIG9w
dGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdKSB7CisgICAgICAgIGlmIChjb250ZW50ICYm
IFtjb250ZW50IGxlbmd0aF0gPiAwKSB7CisgICAgICAgICAgICBOU0RhdGUgKmRhdGUgPSBfZGF0
ZUZvclN0cmluZyhjb250ZW50KTsKKyAgICAgICAgICAgIGlmIChkYXRlKQorICAgICAgICAgICAg
ICAgIFtfZG9jdW1lbnRBdHRycyBzZXRPYmplY3Q6ZGF0ZSBmb3JLZXk6TlNNb2RpZmljYXRpb25U
aW1lRG9jdW1lbnRBdHRyaWJ1dGVdOworICAgICAgICB9CisgICAgfQorI2lmIFBMQVRGT1JNKElP
UykKKyAgICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIkRpc3BsYXlOYW1lIiBjb21wYXJl
Om5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gfHwgTlNPcmRlcmVkU2FtZSA9
PSBbQCJJbmRleFRpdGxlIiBjb21wYXJlOm5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNl
YXJjaF0pCisgICAgICAgIGtleSA9IE5TRGlzcGxheU5hbWVEb2N1bWVudEF0dHJpYnV0ZTsKKyAg
ICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAInJvYm90cyIgY29tcGFyZTpuYW1lIG9wdGlv
bnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdKSB7CisgICAgICAgIGlmIChbY29udGVudCByYW5n
ZU9mU3RyaW5nOkAibm9pbmRleCIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0ubGVu
Z3RoID4gMCkKKyAgICAgICAgICAgIFtfZG9jdW1lbnRBdHRycyBzZXRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhJbnRlZ2VyOjFdIGZvcktleTpOU05vSW5kZXhEb2N1bWVudEF0dHJpYnV0ZV07
CisgICAgfQorI2VuZGlmCisgICAgaWYgKGtleSAmJiBjb250ZW50ICYmIFtjb250ZW50IGxlbmd0
aF0gPiAwKQorICAgICAgICBbX2RvY3VtZW50QXR0cnMgc2V0T2JqZWN0OmNvbnRlbnQgZm9yS2V5
OmtleV07Cit9CisKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NIZWFkRWxlbWVudChFbGVt
ZW50JiBlbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgZ2F0aGVyIGRhdGEgZnJvbSBv
dGhlciBzb3VyY2VzIGUuZy4gV29yZCwgYnV0IGZvciB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gYmUg
YWJsZSB0byBnZXQgY29tbWVudHMgZnJvbSBET00KKyAgICAKKyAgICBmb3IgKEhUTUxNZXRhRWxl
bWVudCogY2hpbGQgPSBUcmF2ZXJzYWw8SFRNTE1ldGFFbGVtZW50Pjo6Zmlyc3RDaGlsZCgmZWxl
bWVudCk7IGNoaWxkOyBjaGlsZCA9IFRyYXZlcnNhbDxIVE1MTWV0YUVsZW1lbnQ+OjpuZXh0U2li
bGluZyhjaGlsZCkpIHsKKyAgICAgICAgTlNTdHJpbmcgKm5hbWUgPSBjaGlsZC0+bmFtZSgpOwor
ICAgICAgICBOU1N0cmluZyAqY29udGVudCA9IGNoaWxkLT5jb250ZW50KCk7CisgICAgICAgIGlm
IChuYW1lICYmIGNvbnRlbnQpCisgICAgICAgICAgICBfcHJvY2Vzc01ldGFFbGVtZW50V2l0aE5h
bWUobmFtZSwgY29udGVudCk7CisgICAgfQorfQorCitCT09MIEhUTUxDb252ZXJ0ZXI6Ol9lbnRl
ckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgQk9PTCBlbWJlZGRlZCkKK3sKKyAgICBTdHJpbmcg
ZGlzcGxheVZhbHVlID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NT
UHJvcGVydHlEaXNwbGF5KTsKKworICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoaGVhZFRhZykg
JiYgIWVtYmVkZGVkKQorICAgICAgICBfcHJvY2Vzc0hlYWRFbGVtZW50KGVsZW1lbnQpOworICAg
IGVsc2UgaWYgKCFkaXNwbGF5VmFsdWUubGVuZ3RoKCkgfHwgIShkaXNwbGF5VmFsdWUgPT0gIm5v
bmUiIHx8IGRpc3BsYXlWYWx1ZSA9PSAidGFibGUtY29sdW1uIiB8fCBkaXNwbGF5VmFsdWUgPT0g
InRhYmxlLWNvbHVtbi1ncm91cCIpKSB7CisgICAgICAgIGlmIChfY2FjaGVzLT5pc0Jsb2NrRWxl
bWVudChlbGVtZW50KSAmJiAhZWxlbWVudC5oYXNUYWdOYW1lKGJyVGFnKSAmJiAhKGRpc3BsYXlW
YWx1ZSA9PSAidGFibGUtY2VsbCIgJiYgW190ZXh0VGFibGVzIGNvdW50XSA9PSAwKQorICAgICAg
ICAgICAgJiYgIShbX3RleHRMaXN0cyBjb3VudF0gPiAwICYmIGRpc3BsYXlWYWx1ZSA9PSAiYmxv
Y2siICYmICFlbGVtZW50Lmhhc1RhZ05hbWUobGlUYWcpICYmICFlbGVtZW50Lmhhc1RhZ05hbWUo
dWxUYWcpICYmICFlbGVtZW50Lmhhc1RhZ05hbWUob2xUYWcpKSkKKyAgICAgICAgICAgIF9uZXdQ
YXJhZ3JhcGhGb3JFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnQudGFnTmFtZSgpLCBOTywgWUVTKTsK
KyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgcmV0dXJuIE5POworfQorCit2b2lkIEhU
TUxDb252ZXJ0ZXI6Ol9hZGRUYWJsZUZvckVsZW1lbnQoRWxlbWVudCAqdGFibGVFbGVtZW50KQor
eworICAgIFJldGFpblB0cjxOU1RleHRUYWJsZT4gdGFibGUgPSBhZG9wdE5TKFtbUGxhdGZvcm1O
U1RleHRUYWJsZSBhbGxvY10gaW5pdF0pOworICAgIENHRmxvYXQgY2VsbFNwYWNpbmdWYWwgPSAx
OworICAgIENHRmxvYXQgY2VsbFBhZGRpbmdWYWwgPSAxOworICAgIFt0YWJsZSBzZXROdW1iZXJP
ZkNvbHVtbnM6MV07CisgICAgW3RhYmxlIHNldExheW91dEFsZ29yaXRobTpOU1RleHRUYWJsZUF1
dG9tYXRpY0xheW91dEFsZ29yaXRobV07CisgICAgW3RhYmxlIHNldENvbGxhcHNlc0JvcmRlcnM6
Tk9dOworICAgIFt0YWJsZSBzZXRIaWRlc0VtcHR5Q2VsbHM6Tk9dOworICAgIAorICAgIGlmICh0
YWJsZUVsZW1lbnQpIHsKKyAgICAgICAgQVNTRVJUKHRhYmxlRWxlbWVudCk7CisgICAgICAgIEVs
ZW1lbnQmIGNvcmVUYWJsZUVsZW1lbnQgPSAqdGFibGVFbGVtZW50OworICAgICAgICAKKyAgICAg
ICAgTlNTdHJpbmcgKmNlbGxTcGFjaW5nID0gY29yZVRhYmxlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
Y2VsbHNwYWNpbmdBdHRyKTsKKyAgICAgICAgaWYgKGNlbGxTcGFjaW5nICYmIFtjZWxsU3BhY2lu
ZyBsZW5ndGhdID4gMCAmJiAhW2NlbGxTcGFjaW5nIGhhc1N1ZmZpeDpAIiUiXSkKKyAgICAgICAg
ICAgIGNlbGxTcGFjaW5nVmFsID0gW2NlbGxTcGFjaW5nIGZsb2F0VmFsdWVdOworICAgICAgICBO
U1N0cmluZyAqY2VsbFBhZGRpbmcgPSBjb3JlVGFibGVFbGVtZW50LmdldEF0dHJpYnV0ZShjZWxs
cGFkZGluZ0F0dHIpOworICAgICAgICBpZiAoY2VsbFBhZGRpbmcgJiYgW2NlbGxQYWRkaW5nIGxl
bmd0aF0gPiAwICYmICFbY2VsbFBhZGRpbmcgaGFzU3VmZml4OkAiJSJdKQorICAgICAgICAgICAg
Y2VsbFBhZGRpbmdWYWwgPSBbY2VsbFBhZGRpbmcgZmxvYXRWYWx1ZV07CisgICAgICAgIAorICAg
ICAgICBfZmlsbEluQmxvY2sodGFibGUuZ2V0KCksIGNvcmVUYWJsZUVsZW1lbnQsIG5pbCwgMCwg
MCwgWUVTKTsKKworICAgICAgICBpZiAoX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoY29y
ZVRhYmxlRWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZSkgPT0gImNvbGxhcHNlIikg
eworICAgICAgICAgICAgW3RhYmxlIHNldENvbGxhcHNlc0JvcmRlcnM6WUVTXTsKKyAgICAgICAg
ICAgIGNlbGxTcGFjaW5nVmFsID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoX2NhY2hlcy0+
cHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZVRhYmxlRWxlbWVudCwgQ1NTUHJvcGVydHlFbXB0eUNl
bGxzKSA9PSAiaGlkZSIpCisgICAgICAgICAgICBbdGFibGUgc2V0SGlkZXNFbXB0eUNlbGxzOllF
U107CisgICAgICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjb3JlVGFibGVF
bGVtZW50LCBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0KSA9PSAiZml4ZWQiKQorICAgICAgICAgICAg
W3RhYmxlIHNldExheW91dEFsZ29yaXRobTpOU1RleHRUYWJsZUZpeGVkTGF5b3V0QWxnb3JpdGht
XTsKKyAgICB9CisgICAgCisgICAgW190ZXh0VGFibGVzIGFkZE9iamVjdDp0YWJsZS5nZXQoKV07
CisgICAgW190ZXh0VGFibGVTcGFjaW5ncyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6Y2VsbFNwYWNpbmdWYWxdXTsKKyAgICBbX3RleHRUYWJsZVBhZGRpbmdzIGFkZE9iamVj
dDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpjZWxsUGFkZGluZ1ZhbF1dOworICAgIFtfdGV4
dFRhYmxlUm93cyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOjBdXTsKKyAg
ICBbX3RleHRUYWJsZVJvd0FycmF5cyBhZGRPYmplY3Q6W05TTXV0YWJsZUFycmF5IGFycmF5XV07
Cit9CisKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZFRhYmxlQ2VsbEZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICBOU1RleHRUYWJsZSAqdGFibGUgPSBbX3RleHRUYWJsZXMgbGFz
dE9iamVjdF07CisgICAgTlNJbnRlZ2VyIHJvd051bWJlciA9IFtbX3RleHRUYWJsZVJvd3MgbGFz
dE9iamVjdF0gaW50ZWdlclZhbHVlXTsKKyAgICBOU0ludGVnZXIgY29sdW1uTnVtYmVyID0gMDsK
KyAgICBOU0ludGVnZXIgcm93U3BhbiA9IDE7CisgICAgTlNJbnRlZ2VyIGNvbFNwYW4gPSAxOwor
ICAgIE5TTXV0YWJsZUFycmF5ICpyb3dBcnJheSA9IFtfdGV4dFRhYmxlUm93QXJyYXlzIGxhc3RP
YmplY3RdOworICAgIE5TVUludGVnZXIgY291bnQgPSBbcm93QXJyYXkgY291bnRdOworICAgIFBs
YXRmb3JtQ29sb3IgKmNvbG9yID0gKFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBjb3Vu
dF0gPiAwKSA/IFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBsYXN0T2JqZWN0XSA6IG5p
bDsKKyAgICBOU1RleHRUYWJsZUJsb2NrICpwcmV2aW91c0Jsb2NrOworICAgIENHRmxvYXQgY2Vs
bFNwYWNpbmdWYWwgPSBbW190ZXh0VGFibGVTcGFjaW5ncyBsYXN0T2JqZWN0XSBmbG9hdFZhbHVl
XTsKKyAgICBpZiAoW2NvbG9yIGlzRXF1YWw6W1BsYXRmb3JtQ29sb3JDbGFzcyBjbGVhckNvbG9y
XV0pIGNvbG9yID0gbmlsOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKKyAgICAgICAgcHJldmlvdXNCbG9jayA9IFtyb3dBcnJheSBvYmplY3RBdEluZGV4Omld
OworICAgICAgICBpZiAoY29sdW1uTnVtYmVyID49IFtwcmV2aW91c0Jsb2NrIHN0YXJ0aW5nQ29s
dW1uXSAmJiBjb2x1bW5OdW1iZXIgPCBbcHJldmlvdXNCbG9jayBzdGFydGluZ0NvbHVtbl0gKyBb
cHJldmlvdXNCbG9jayBjb2x1bW5TcGFuXSkKKyAgICAgICAgICAgIGNvbHVtbk51bWJlciA9IFtw
cmV2aW91c0Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSArIFtwcmV2aW91c0Jsb2NrIGNvbHVtblNwYW5d
OworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8TlNUZXh0VGFibGVCbG9jaz4gYmxvY2s7Cisg
ICAgCisgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKGlzSFRNTFRhYmxlQ2VsbEVsZW1l
bnQoKmVsZW1lbnQpKSB7CisgICAgICAgICAgICBIVE1MVGFibGVDZWxsRWxlbWVudCYgdGFibGVD
ZWxsRWxlbWVudCA9IHRvSFRNTFRhYmxlQ2VsbEVsZW1lbnQoKmVsZW1lbnQpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICByb3dTcGFuID0gdGFibGVDZWxsRWxlbWVudC5yb3dTcGFuKCk7Cisg
ICAgICAgICAgICBpZiAocm93U3BhbiA8IDEpCisgICAgICAgICAgICAgICAgcm93U3BhbiA9IDE7
CisgICAgICAgICAgICBjb2xTcGFuID0gdGFibGVDZWxsRWxlbWVudC5jb2xTcGFuKCk7CisgICAg
ICAgICAgICBpZiAoY29sU3BhbiA8IDEpCisgICAgICAgICAgICAgICAgY29sU3BhbiA9IDE7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJsb2NrID0gYWRvcHROUyhbW1BsYXRmb3JtTlNU
ZXh0VGFibGVCbG9jayBhbGxvY10gaW5pdFdpdGhUYWJsZTp0YWJsZSBzdGFydGluZ1Jvdzpyb3dO
dW1iZXIgcm93U3Bhbjpyb3dTcGFuIHN0YXJ0aW5nQ29sdW1uOmNvbHVtbk51bWJlciBjb2x1bW5T
cGFuOmNvbFNwYW5dKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyB2ZXJ0aWNhbEFsaWduID0g
X2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoKmVsZW1lbnQsIENTU1Byb3BlcnR5VmVydGlj
YWxBbGlnbik7CisgICAgICAgIAorICAgICAgICBfZmlsbEluQmxvY2soYmxvY2suZ2V0KCksICpl
bGVtZW50LCBjb2xvciwgY2VsbFNwYWNpbmdWYWwgLyAyLCAwLCBOTyk7CisgICAgICAgIGlmICh2
ZXJ0aWNhbEFsaWduID09ICJtaWRkbGUiKQorICAgICAgICAgICAgW2Jsb2NrIHNldFZlcnRpY2Fs
QWxpZ25tZW50Ok5TVGV4dEJsb2NrTWlkZGxlQWxpZ25tZW50XTsKKyAgICAgICAgZWxzZSBpZiAo
dmVydGljYWxBbGlnbiA9PSAiYm90dG9tIikKKyAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNh
bEFsaWdubWVudDpOU1RleHRCbG9ja0JvdHRvbUFsaWdubWVudF07CisgICAgICAgIGVsc2UgaWYg
KHZlcnRpY2FsQWxpZ24gPT0gImJhc2VsaW5lIikKKyAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0
aWNhbEFsaWdubWVudDpOU1RleHRCbG9ja0Jhc2VsaW5lQWxpZ25tZW50XTsKKyAgICAgICAgZWxz
ZSBpZiAodmVydGljYWxBbGlnbiA9PSAidG9wIikKKyAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0
aWNhbEFsaWdubWVudDpOU1RleHRCbG9ja1RvcEFsaWdubWVudF07CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYmxvY2sgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRUYWJsZUJsb2NrIGFsbG9jXSBp
bml0V2l0aFRhYmxlOnRhYmxlIHN0YXJ0aW5nUm93OnJvd051bWJlciByb3dTcGFuOnJvd1NwYW4g
c3RhcnRpbmdDb2x1bW46Y29sdW1uTnVtYmVyIGNvbHVtblNwYW46Y29sU3Bhbl0pOworICAgIH0K
KyAgICAKKyAgICBbX3RleHRCbG9ja3MgYWRkT2JqZWN0OmJsb2NrLmdldCgpXTsKKyAgICBbcm93
QXJyYXkgYWRkT2JqZWN0OmJsb2NrLmdldCgpXTsKKyAgICBbcm93QXJyYXkgc29ydFVzaW5nRnVu
Y3Rpb246X2NvbENvbXBhcmUgY29udGV4dDpOVUxMXTsKK30KKworQk9PTCBIVE1MQ29udmVydGVy
OjpfcHJvY2Vzc0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgTlNJbnRlZ2VyIGRlcHRoKQorewor
ICAgIEJPT0wgcmV0dmFsID0gWUVTOworICAgIEJPT0wgaXNCbG9ja0xldmVsID0gX2NhY2hlcy0+
aXNCbG9ja0VsZW1lbnQoZWxlbWVudCk7CisgICAgU3RyaW5nIGRpc3BsYXlWYWx1ZSA9IF9jYWNo
ZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5RGlzcGxheSk7Cisg
ICAgaWYgKGlzQmxvY2tMZXZlbCkKKyAgICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgcmVt
b3ZlQWxsT2JqZWN0c107CisgICAgZWxzZSB7CisgICAgICAgIFN0cmluZyBiaWRpID0gX2NhY2hl
cy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7
CisgICAgICAgIGlmIChiaWRpID09ICJlbWJlZCIpIHsKKyAgICAgICAgICAgIE5TVUludGVnZXIg
dmFsID0gTlNUZXh0V3JpdGluZ0RpcmVjdGlvbkVtYmVkZGluZzsKKyAgICAgICAgICAgIGlmIChf
Y2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eURpcmVjdGlv
bikgPT0gInJ0bCIpCisgICAgICAgICAgICAgICAgdmFsIHw9IE5TV3JpdGluZ0RpcmVjdGlvblJp
Z2h0VG9MZWZ0OworICAgICAgICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgYWRkT2JqZWN0
OltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOnZhbF1dOworICAgICAgICB9IGVs
c2UgaWYgKGJpZGkgPT0gImJpZGktb3ZlcnJpZGUiKSB7CisgICAgICAgICAgICBOU1VJbnRlZ2Vy
IHZhbCA9IE5TVGV4dFdyaXRpbmdEaXJlY3Rpb25PdmVycmlkZTsKKyAgICAgICAgICAgIGlmIChf
Y2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eURpcmVjdGlv
bikgPT0gInJ0bCIpCisgICAgICAgICAgICAgICAgdmFsIHw9IE5TV3JpdGluZ0RpcmVjdGlvblJp
Z2h0VG9MZWZ0OworICAgICAgICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgYWRkT2JqZWN0
OltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOnZhbF1dOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChkaXNwbGF5VmFsdWUgPT0gInRhYmxlIiB8fCAoW190ZXh0VGFibGVzIGNv
dW50XSA9PSAwICYmIGRpc3BsYXlWYWx1ZSA9PSAidGFibGUtcm93LWdyb3VwIikpIHsKKyAgICAg
ICAgRWxlbWVudCogdGFibGVFbGVtZW50ID0gJmVsZW1lbnQ7CisgICAgICAgIGlmIChkaXNwbGF5
VmFsdWUgPT0gInRhYmxlLXJvdy1ncm91cCIpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBz
dGFydGluZyBpbiBtZWRpYXMgcmVzLCB0aGUgZmlyc3QgdGhpbmcgd2Ugc2VlIG1heSBiZSB0aGUg
dGJvZHksIHNvIGdvIHVwIHRvIHRoZSB0YWJsZQorICAgICAgICAgICAgdGFibGVFbGVtZW50ID0g
X2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZShlbGVtZW50LnBhcmVudE5vZGUoKSk7CisgICAgICAg
ICAgICBpZiAoIXRhYmxlRWxlbWVudCB8fCBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZSgq
dGFibGVFbGVtZW50LCBDU1NQcm9wZXJ0eURpc3BsYXkpICE9ICJ0YWJsZSIpCisgICAgICAgICAg
ICAgICAgdGFibGVFbGVtZW50ID0gJmVsZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg
KFtfdGV4dFRhYmxlcyBjb3VudF0gPiBbX3RleHRCbG9ja3MgY291bnRdKQorICAgICAgICAgICAg
X2FkZFRhYmxlQ2VsbEZvckVsZW1lbnQobmlsKTsKKyAgICAgICAgX2FkZFRhYmxlRm9yRWxlbWVu
dCh0YWJsZUVsZW1lbnQpOworICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1m
b290ZXItZ3JvdXAiICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPiAwKSB7CisgICAgICAgIG1fdGV4
dFRhYmxlRm9vdGVycy5hZGQoW190ZXh0VGFibGVzIGxhc3RPYmplY3RdLCAmZWxlbWVudCk7Cisg
ICAgICAgIHJldHZhbCA9IE5POworICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJs
ZS1yb3ciICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPiAwKSB7CisgICAgICAgIFBsYXRmb3JtQ29s
b3IgKmNvbG9yID0gX2NvbG9yRm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7CisgICAgICAgIGlmICghY29sb3IpCisgICAgICAgICAgICBjb2xvciA9IFtQbGF0
Zm9ybUNvbG9yQ2xhc3MgY2xlYXJDb2xvcl07CisgICAgICAgIFtfdGV4dFRhYmxlUm93QmFja2dy
b3VuZENvbG9ycyBhZGRPYmplY3Q6Y29sb3JdOworICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVl
ID09ICJ0YWJsZS1jZWxsIikgeworICAgICAgICB3aGlsZSAoW190ZXh0VGFibGVzIGNvdW50XSA8
IFtfdGV4dEJsb2NrcyBjb3VudF0gKyAxKQorICAgICAgICAgICAgX2FkZFRhYmxlRm9yRWxlbWVu
dChuaWwpOworICAgICAgICBfYWRkVGFibGVDZWxsRm9yRWxlbWVudCgmZWxlbWVudCk7CisgICAg
fSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoaW1nVGFnKSkgeworICAgICAgICBOU1N0cmlu
ZyAqdXJsU3RyaW5nID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoc3JjQXR0cik7CisgICAgICAgIGlm
ICh1cmxTdHJpbmcgJiYgW3VybFN0cmluZyBsZW5ndGhdID4gMCkgeworICAgICAgICAgICAgTlNV
UkwgKnVybCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRU
cmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7CisgICAgICAgICAgICBpZiAoIXVybCkKKyAg
ICAgICAgICAgICAgICB1cmwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoU3RyaW5nOlt1cmxTdHJpbmcg
c3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFj
ZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXSByZWxhdGl2ZVRvVVJMOl9iYXNlVVJMXTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgICAgICBCT09MIHVzZVBsYWNlaG9sZGVySW1hZ2UgPSBOTzsK
KyNlbHNlCisgICAgICAgICAgICBCT09MIHVzZVBsYWNlaG9sZGVySW1hZ2UgPSBZRVM7CisjZW5k
aWYKKyAgICAgICAgICAgIGlmICh1cmwpCisgICAgICAgICAgICAgICAgX2FkZEF0dGFjaG1lbnRG
b3JFbGVtZW50KGVsZW1lbnQsIHVybCwgaXNCbG9ja0xldmVsLCB1c2VQbGFjZWhvbGRlckltYWdl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSBOTzsKKyAgICB9IGVsc2UgaWYgKGVsZW1l
bnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKSB7CisgICAgICAgIE5TU3RyaW5nICpiYXNlU3RyaW5n
ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyKTsKKyAgICAgICAgTlNTdHJpbmcg
KnVybFN0cmluZyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGRhdGFBdHRyKTsKKyAgICAgICAgTlNT
dHJpbmcgKmRlY2xhcmVTdHJpbmcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShkZWNsYXJlQXR0cik7
CisgICAgICAgIGlmICh1cmxTdHJpbmcgJiYgW3VybFN0cmluZyBsZW5ndGhdID4gMCAmJiAhW0Ai
dHJ1ZSIgaXNFcXVhbFRvU3RyaW5nOmRlY2xhcmVTdHJpbmddKSB7CisgICAgICAgICAgICBOU1VS
TCAqYmFzZVVSTCA9IG5pbDsKKyAgICAgICAgICAgIE5TVVJMICp1cmwgPSBuaWw7CisgICAgICAg
ICAgICBpZiAoYmFzZVN0cmluZyAmJiBbYmFzZVN0cmluZyBsZW5ndGhdID4gMCkgeworICAgICAg
ICAgICAgICAgIGJhc2VVUkwgPSBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3RyaXBM
ZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGJhc2VTdHJpbmcpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWJhc2VVUkwpCisgICAgICAgICAgICAgICAgICAgIGJhc2VVUkwgPSBbTlNVUkwgX3dl
Yl9VUkxXaXRoU3RyaW5nOltiYXNlU3RyaW5nIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5T
ZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV0gcmVs
YXRpdmVUb1VSTDpfYmFzZVVSTF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYmFz
ZVVSTCkKKyAgICAgICAgICAgICAgICB1cmwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoU3RyaW5nOlt1
cmxTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQg
d2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXSByZWxhdGl2ZVRvVVJMOmJhc2VVUkxd
OworICAgICAgICAgICAgaWYgKCF1cmwpCisgICAgICAgICAgICAgICAgdXJsID0gZWxlbWVudC5k
b2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1
cmxTdHJpbmcpKTsKKyAgICAgICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAgICAgIHVybCA9
IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6W3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hh
cmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3Rl
clNldF1dIHJlbGF0aXZlVG9VUkw6X2Jhc2VVUkxdOworICAgICAgICAgICAgaWYgKHVybCkKKyAg
ICAgICAgICAgICAgICByZXR2YWwgPSAhX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50KGVsZW1lbnQs
IHVybCwgaXNCbG9ja0xldmVsLCBOTyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGVsZW1l
bnQuaGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGlmcmFtZVRhZykp
IHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSB0b0hUTUxGcmFtZUVs
ZW1lbnRCYXNlKGVsZW1lbnQpLmNvbnRlbnREb2N1bWVudCgpKSB7CisgICAgICAgICAgICBfdHJh
dmVyc2VOb2RlKCpjb250ZW50RG9jdW1lbnQsIGRlcHRoICsgMSwgdHJ1ZSAvKiBlbWJlZGRlZCAq
Lyk7CisgICAgICAgICAgICByZXR2YWwgPSBOTzsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
ZWxlbWVudC5oYXNUYWdOYW1lKGJyVGFnKSkgeworICAgICAgICBFbGVtZW50KiBibG9ja0VsZW1l
bnQgPSBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlKGVsZW1lbnQucGFyZW50Tm9kZSgpKTsKKyAg
ICAgICAgTlNTdHJpbmcgKmJyZWFrQ2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShjbGFzc0F0
dHIpOworICAgICAgICBOU1N0cmluZyAqYmxvY2tUYWcgPSBibG9ja0VsZW1lbnQgPyAoTlNTdHJp
bmcgKilibG9ja0VsZW1lbnQtPnRhZ05hbWUoKSA6IG5pbDsKKyAgICAgICAgQk9PTCBpc0V4dHJh
QnJlYWsgPSBbQCJBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lIiBpc0VxdWFsVG9TdHJpbmc6YnJl
YWtDbGFzc107CisgICAgICAgIEJPT0wgYmxvY2tFbGVtZW50SXNQYXJhZ3JhcGggPSAoW0AiUCIg
aXNFcXVhbFRvU3RyaW5nOmJsb2NrVGFnXSB8fCBbQCJMSSIgaXNFcXVhbFRvU3RyaW5nOmJsb2Nr
VGFnXSB8fCAoW2Jsb2NrVGFnIGhhc1ByZWZpeDpAIkgiXSAmJiAyID09IFtibG9ja1RhZyBsZW5n
dGhdKSk7CisgICAgICAgIGlmIChpc0V4dHJhQnJlYWspCisgICAgICAgICAgICBfZmxhZ3MuaGFz
VHJhaWxpbmdOZXdsaW5lID0gWUVTOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChi
bG9ja0VsZW1lbnQgJiYgYmxvY2tFbGVtZW50SXNQYXJhZ3JhcGgpCisgICAgICAgICAgICAgICAg
X25ld0xpbmVGb3JFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIF9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnQudGFnTmFtZSgp
LCBZRVMsIE5PKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1l
KHVsVGFnKSkgeworICAgICAgICBSZXRhaW5QdHI8TlNUZXh0TGlzdD4gbGlzdDsKKyAgICAgICAg
U3RyaW5nIGxpc3RTdHlsZVR5cGUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVt
ZW50LCBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGUpOworICAgICAgICBpZiAoIWxpc3RTdHlsZVR5
cGUubGVuZ3RoKCkpCisgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gQCJkaXNjIjsKKyAgICAg
ICAgbGlzdCA9IGFkb3B0TlMoW1tQbGF0Zm9ybU5TVGV4dExpc3QgYWxsb2NdIGluaXRXaXRoTWFy
a2VyRm9ybWF0OlN0cmluZygieyIgKyBsaXN0U3R5bGVUeXBlICsgIn0iKSBvcHRpb25zOjBdKTsK
KyAgICAgICAgW190ZXh0TGlzdHMgYWRkT2JqZWN0Omxpc3QuZ2V0KCldOworICAgIH0gZWxzZSBp
ZiAoZWxlbWVudC5oYXNUYWdOYW1lKG9sVGFnKSkgeworICAgICAgICBSZXRhaW5QdHI8TlNUZXh0
TGlzdD4gbGlzdDsKKyAgICAgICAgU3RyaW5nIGxpc3RTdHlsZVR5cGUgPSBfY2FjaGVzLT5wcm9w
ZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGUpOworICAg
ICAgICBpZiAoIWxpc3RTdHlsZVR5cGUubGVuZ3RoKCkpCisgICAgICAgICAgICBsaXN0U3R5bGVU
eXBlID0gImRlY2ltYWwiOworICAgICAgICBsaXN0ID0gYWRvcHROUyhbW1BsYXRmb3JtTlNUZXh0
TGlzdCBhbGxvY10gaW5pdFdpdGhNYXJrZXJGb3JtYXQ6U3RyaW5nKCJ7IiArIGxpc3RTdHlsZVR5
cGUgKyAifSIpIG9wdGlvbnM6MF0pOworICAgICAgICBpZiAoaXNIVE1MT0xpc3RFbGVtZW50KGVs
ZW1lbnQpKSB7CisgICAgICAgICAgICBOU0ludGVnZXIgc3RhcnRpbmdJdGVtTnVtYmVyID0gdG9I
VE1MT0xpc3RFbGVtZW50KGVsZW1lbnQpLnN0YXJ0KCk7OworICAgICAgICAgICAgW2xpc3Qgc2V0
U3RhcnRpbmdJdGVtTnVtYmVyOnN0YXJ0aW5nSXRlbU51bWJlcl07CisgICAgICAgIH0KKyAgICAg
ICAgW190ZXh0TGlzdHMgYWRkT2JqZWN0Omxpc3QuZ2V0KCldOworICAgIH0gZWxzZSBpZiAoZWxl
bWVudC5oYXNUYWdOYW1lKHFUYWcpKSB7CisgICAgICAgIF9hZGRRdW90ZUZvckVsZW1lbnQoZWxl
bWVudCwgWUVTLCBfcXVvdGVMZXZlbCsrKTsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFn
TmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50
KSkgeworICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gdG9IVE1M
SW5wdXRFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudC50eXBl
KCkgPT0gInRleHQiKSB7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnZhbHVlID0gaW5wdXRF
bGVtZW50LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIFt2YWx1ZSBsZW5n
dGhdID4gMCkKKyAgICAgICAgICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVlLCBlbGVtZW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdO
YW1lKHRleHRhcmVhVGFnKSkgeworICAgICAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KGVs
ZW1lbnQpKSB7CisgICAgICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0QXJlYUVsZW1l
bnQgPSB0b0hUTUxUZXh0QXJlYUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBOU1N0cmlu
ZyAqdmFsdWUgPSB0ZXh0QXJlYUVsZW1lbnQudmFsdWUoKTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSAmJiBbdmFsdWUgbGVuZ3RoXSA+IDApCisgICAgICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVl
LCBlbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSBOTzsKKyAgICB9CisgICAg
cmV0dXJuIHJldHZhbDsKK30KKwordm9pZCBIVE1MQ29udmVydGVyOjpfYWRkTWFya2Vyc1RvTGlz
dChOU1RleHRMaXN0ICpsaXN0LCBOU1JhbmdlIHJhbmdlKQoreworICAgIE5TSW50ZWdlciBpdGVt
TnVtID0gW2xpc3Qgc3RhcnRpbmdJdGVtTnVtYmVyXTsKKyAgICBOU1N0cmluZyAqc3RyaW5nID0g
W19hdHRyU3RyIHN0cmluZ107CisgICAgTlNTdHJpbmcgKnN0cmluZ1RvSW5zZXJ0OworICAgIE5T
RGljdGlvbmFyeSAqYXR0cnNUb0luc2VydCA9IG5pbDsKKyAgICBQbGF0Zm9ybUZvbnQgKmZvbnQ7
CisgICAgTlNQYXJhZ3JhcGhTdHlsZSAqcGFyYWdyYXBoU3R5bGU7CisgICAgTlNNdXRhYmxlUGFy
YWdyYXBoU3R5bGUgKm5ld1N0eWxlOworICAgIE5TVGV4dFRhYiAqdGFiID0gbmlsOworICAgIE5T
VGV4dFRhYiAqdGFiVG9SZW1vdmU7CisgICAgTlNSYW5nZSBwYXJhZ3JhcGhSYW5nZTsKKyAgICBO
U1JhbmdlIHN0eWxlUmFuZ2U7CisgICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3Ry
IGxlbmd0aF07CisgICAgTlNVSW50ZWdlciBsaXN0SW5kZXg7CisgICAgTlNVSW50ZWdlciBpbnNl
cnRMZW5ndGg7CisgICAgTlNVSW50ZWdlciBpOworICAgIE5TVUludGVnZXIgY291bnQ7CisgICAg
TlNBcnJheSAqdGV4dExpc3RzOworICAgIENHRmxvYXQgbWFya2VyTG9jYXRpb247CisgICAgQ0dG
bG9hdCBsaXN0TG9jYXRpb247CisgICAgQ0dGbG9hdCBwb2ludFNpemU7CisgICAgCisgICAgaWYg
KHJhbmdlLmxlbmd0aCA9PSAwIHx8IHJhbmdlLmxvY2F0aW9uID49IHRleHRMZW5ndGgpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoTlNNYXhSYW5nZShyYW5nZSkgPiB0ZXh0TGVuZ3RoKQorICAg
ICAgICByYW5nZS5sZW5ndGggPSB0ZXh0TGVuZ3RoIC0gcmFuZ2UubG9jYXRpb247CisgICAgcGFy
YWdyYXBoU3R5bGUgPSBbX2F0dHJTdHIgYXR0cmlidXRlOk5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1
dGVOYW1lIGF0SW5kZXg6cmFuZ2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6TlVMTF07CisgICAg
aWYgKHBhcmFncmFwaFN0eWxlKSB7CisgICAgICAgIHRleHRMaXN0cyA9IFtwYXJhZ3JhcGhTdHls
ZSB0ZXh0TGlzdHNdOworICAgICAgICBsaXN0SW5kZXggPSBbdGV4dExpc3RzIGluZGV4T2ZPYmpl
Y3Q6bGlzdF07CisgICAgICAgIGlmICh0ZXh0TGlzdHMgJiYgbGlzdEluZGV4ICE9IE5TTm90Rm91
bmQpIHsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpZHggPSByYW5nZS5sb2NhdGlvbjsg
aWR4IDwgTlNNYXhSYW5nZShyYW5nZSk7KSB7CisgICAgICAgICAgICAgICAgcGFyYWdyYXBoUmFu
Z2UgPSBbc3RyaW5nIHBhcmFncmFwaFJhbmdlRm9yUmFuZ2U6TlNNYWtlUmFuZ2UoaWR4LCAwKV07
CisgICAgICAgICAgICAgICAgcGFyYWdyYXBoU3R5bGUgPSBbX2F0dHJTdHIgYXR0cmlidXRlOk5T
UGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6aWR4IGVmZmVjdGl2ZVJhbmdlOiZz
dHlsZVJhbmdlXTsKKyAgICAgICAgICAgICAgICBmb250ID0gW19hdHRyU3RyIGF0dHJpYnV0ZTpO
U0ZvbnRBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6aWR4IGVmZmVjdGl2ZVJhbmdlOk5VTExdOworICAg
ICAgICAgICAgICAgIHBvaW50U2l6ZSA9IGZvbnQgPyBbZm9udCBwb2ludFNpemVdIDogMTI7Cisg
ICAgICAgICAgICAgICAgaWYgKFtbcGFyYWdyYXBoU3R5bGUgdGV4dExpc3RzXSBjb3VudF0gPT0g
bGlzdEluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgICAgICBzdHJpbmdUb0luc2VydCA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiXHQlQFx0IiwgW2xpc3QgbWFya2VyRm9ySXRlbU51
bWJlcjppdGVtTnVtKytdXTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVuZ3RoID0gW3N0
cmluZ1RvSW5zZXJ0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgIGF0dHJzVG9JbnNlcnQg
PSBbUGxhdGZvcm1OU1RleHRMaXN0IF9zdGFuZGFyZE1hcmtlckF0dHJpYnV0ZXNGb3JBdHRyaWJ1
dGVzOltfYXR0clN0ciBhdHRyaWJ1dGVzQXRJbmRleDpwYXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiBl
ZmZlY3RpdmVSYW5nZTpOVUxMXV07CisKKyAgICAgICAgICAgICAgICAgICAgW19hdHRyU3RyIHJl
cGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShwYXJhZ3JhcGhSYW5nZS5sb2NhdGlv
biwgMCkgd2l0aFN0cmluZzpzdHJpbmdUb0luc2VydF07CisgICAgICAgICAgICAgICAgICAgIFtf
YXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzVG9JbnNlcnQgcmFuZ2U6TlNNYWtlUmFuZ2UocGFy
YWdyYXBoUmFuZ2UubG9jYXRpb24sIGluc2VydExlbmd0aCldOworICAgICAgICAgICAgICAgICAg
ICByYW5nZS5sZW5ndGggKz0gaW5zZXJ0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBwYXJh
Z3JhcGhSYW5nZS5sZW5ndGggKz0gaW5zZXJ0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyYWdyYXBoUmFuZ2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KQorICAgICAg
ICAgICAgICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSBpbnNlcnRMZW5ndGg7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBuZXdTdHlsZSA9IFtwYXJh
Z3JhcGhTdHlsZSBtdXRhYmxlQ29weV07CisgICAgICAgICAgICAgICAgICAgIGxpc3RMb2NhdGlv
biA9IChsaXN0SW5kZXggKyAxKSAqIDM2OworICAgICAgICAgICAgICAgICAgICBtYXJrZXJMb2Nh
dGlvbiA9IGxpc3RMb2NhdGlvbiAtIDI1OworICAgICAgICAgICAgICAgICAgICBbbmV3U3R5bGUg
c2V0Rmlyc3RMaW5lSGVhZEluZGVudDowXTsKKyAgICAgICAgICAgICAgICAgICAgW25ld1N0eWxl
IHNldEhlYWRJbmRlbnQ6bGlzdExvY2F0aW9uXTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KChjb3VudCA9IFtbbmV3U3R5bGUgdGFiU3RvcHNdIGNvdW50XSkgPiAwKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwLCB0YWJUb1JlbW92ZSA9IG5pbDsgIXRhYlRvUmVtb3Zl
ICYmIGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiID0g
W1tuZXdTdHlsZSB0YWJTdG9wc10gb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoW3RhYiBsb2NhdGlvbl0gPD0gbGlzdExvY2F0aW9uKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YWJUb1JlbW92ZSA9IHRhYjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJUb1JlbW92ZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbbmV3U3R5bGUgcmVtb3ZlVGFiU3RvcDp0YWJdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRhYiA9
IFtbUGxhdGZvcm1OU1RleHRUYWIgYWxsb2NdIGluaXRXaXRoVHlwZTpOU0xlZnRUYWJTdG9wVHlw
ZSBsb2NhdGlvbjptYXJrZXJMb2NhdGlvbl07CisgICAgICAgICAgICAgICAgICAgIFtuZXdTdHls
ZSBhZGRUYWJTdG9wOnRhYl07CisgICAgICAgICAgICAgICAgICAgIFt0YWIgcmVsZWFzZV07Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgICAgICAgICB0YWIgPSBbW1BsYXRmb3JtTlNU
ZXh0VGFiIGFsbG9jXSBpbml0V2l0aFRleHRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50TmF0dXJh
bCBsb2NhdGlvbjpsaXN0TG9jYXRpb24gb3B0aW9uczpuaWxdOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICAgICAgdGFiID0gW1tQbGF0Zm9ybU5TVGV4dFRhYiBhbGxvY10gaW5pdFdpdGhUZXh0QWxp
Z25tZW50Ok5TTmF0dXJhbFRleHRBbGlnbm1lbnQgbG9jYXRpb246bGlzdExvY2F0aW9uIG9wdGlv
bnM6bmlsXTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBbbmV3U3R5bGUgYWRkVGFiU3Rv
cDp0YWJdOworICAgICAgICAgICAgICAgICAgICBbdGFiIHJlbGVhc2VdOworICAgICAgICAgICAg
ICAgICAgICBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVO
YW1lIHZhbHVlOm5ld1N0eWxlIHJhbmdlOnBhcmFncmFwaFJhbmdlXTsKKyAgICAgICAgICAgICAg
ICAgICAgW25ld1N0eWxlIHJlbGVhc2VdOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWR4ID0gTlNNYXhSYW5nZShwYXJhZ3JhcGhSYW5nZSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCBhbnkgZGVlcGVyLW5l
c3RlZCBsaXN0cworICAgICAgICAgICAgICAgICAgICBpZHggPSBOU01heFJhbmdlKHN0eWxlUmFu
Z2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBIVE1MQ29udmVydGVyOjpfZXhpdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwg
TlNJbnRlZ2VyIGRlcHRoLCBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXgpCit7CisgICAgU3RyaW5nIGRp
c3BsYXlWYWx1ZSA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1By
b3BlcnR5RGlzcGxheSk7CisgICAgTlNSYW5nZSByYW5nZSA9IE5TTWFrZVJhbmdlKHN0YXJ0SW5k
ZXgsIFtfYXR0clN0ciBsZW5ndGhdIC0gc3RhcnRJbmRleCk7CisgICAgaWYgKHJhbmdlLmxlbmd0
aCA+IDAgJiYgZWxlbWVudC5oYXNUYWdOYW1lKGFUYWcpKSB7CisgICAgICAgIE5TU3RyaW5nICp1
cmxTdHJpbmcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgICAgIE5TU3Ry
aW5nICpzdHJpcHBlZFN0cmluZyA9IFt1cmxTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3Rl
cnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRd
XTsKKyAgICAgICAgaWYgKHVybFN0cmluZyAmJiBbdXJsU3RyaW5nIGxlbmd0aF0gPiAwICYmIHN0
cmlwcGVkU3RyaW5nICYmIFtzdHJpcHBlZFN0cmluZyBsZW5ndGhdID4gMCAmJiAhW3N0cmlwcGVk
U3RyaW5nIGhhc1ByZWZpeDpAIiMiXSkgeworICAgICAgICAgICAgTlNVUkwgKnVybCA9IGVsZW1l
bnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFj
ZXModXJsU3RyaW5nKSk7CisgICAgICAgICAgICBpZiAoIXVybCkKKyAgICAgICAgICAgICAgICB1
cmwgPSBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxp
bmdIVE1MU3BhY2VzKHN0cmlwcGVkU3RyaW5nKSk7CisgICAgICAgICAgICBpZiAoIXVybCkKKyAg
ICAgICAgICAgICAgICB1cmwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoU3RyaW5nOnN0cmlwcGVkU3Ry
aW5nIHJlbGF0aXZlVG9VUkw6X2Jhc2VVUkxdOworICAgICAgICAgICAgW19hdHRyU3RyIGFkZEF0
dHJpYnV0ZTpOU0xpbmtBdHRyaWJ1dGVOYW1lIHZhbHVlOnVybCA/IChpZCl1cmwgOiAoaWQpdXJs
U3RyaW5nIHJhbmdlOnJhbmdlXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIV9mbGFncy5y
ZWFjaGVkRW5kICYmIF9jYWNoZXMtPmlzQmxvY2tFbGVtZW50KGVsZW1lbnQpKSB7CisgICAgICAg
IFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbW92ZUFsbE9iamVjdHNdOworICAgICAgICBpZiAo
ZGlzcGxheVZhbHVlID09ICJ0YWJsZS1jZWxsIiAmJiBbX3RleHRCbG9ja3MgY291bnRdID09IDAp
IHsKKyAgICAgICAgICAgIF9uZXdUYWJGb3JFbGVtZW50KGVsZW1lbnQpOworICAgICAgICB9IGVs
c2UgaWYgKFtfdGV4dExpc3RzIGNvdW50XSA+IDAgJiYgZGlzcGxheVZhbHVlID09ICJibG9jayIg
JiYgIWVsZW1lbnQuaGFzVGFnTmFtZShsaVRhZykgJiYgIWVsZW1lbnQuaGFzVGFnTmFtZSh1bFRh
ZykgJiYgIWVsZW1lbnQuaGFzVGFnTmFtZShvbFRhZykpIHsKKyAgICAgICAgICAgIF9uZXdMaW5l
Rm9yRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIF9uZXdQ
YXJhZ3JhcGhGb3JFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnQudGFnTmFtZSgpLCAocmFuZ2UubGVu
Z3RoID09IDApLCBZRVMpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChbX3dyaXRpbmdEaXJl
Y3Rpb25BcnJheSBjb3VudF0gPiAwKSB7CisgICAgICAgIFN0cmluZyBiaWRpID0gX2NhY2hlcy0+
cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7Cisg
ICAgICAgIGlmIChiaWRpID09ICJlbWJlZCIgfHwgYmlkaSA9PSAiYmlkaS1vdmVycmlkZSIpCisg
ICAgICAgICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZW1vdmVMYXN0T2JqZWN0XTsKKyAg
ICB9CisgICAgcmFuZ2UgPSBOU01ha2VSYW5nZShzdGFydEluZGV4LCBbX2F0dHJTdHIgbGVuZ3Ro
XSAtIHN0YXJ0SW5kZXgpOworICAgIGlmIChkaXNwbGF5VmFsdWUgPT0gInRhYmxlIiAmJiBbX3Rl
eHRUYWJsZXMgY291bnRdID4gMCkgeworICAgICAgICBOU1RleHRUYWJsZSAqa2V5ID0gW190ZXh0
VGFibGVzIGxhc3RPYmplY3RdOworICAgICAgICBFbGVtZW50KiBmb290ZXIgPSBtX3RleHRUYWJs
ZUZvb3RlcnMuZ2V0KGtleSk7CisgICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdIDwg
W190ZXh0QmxvY2tzIGNvdW50XSArIDEpCisgICAgICAgICAgICBbX3RleHRCbG9ja3MgcmVtb3Zl
TGFzdE9iamVjdF07CisgICAgICAgIGlmIChmb290ZXIpIHsKKyAgICAgICAgICAgIF90cmF2ZXJz
ZUZvb3Rlck5vZGUoKmZvb3RlciwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIG1fdGV4dFRhYmxl
Rm9vdGVycy5yZW1vdmUoa2V5KTsKKyAgICAgICAgfQorICAgICAgICBbX3RleHRUYWJsZXMgcmVt
b3ZlTGFzdE9iamVjdF07CisgICAgICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgcmVtb3ZlTGFzdE9i
amVjdF07CisgICAgICAgIFtfdGV4dFRhYmxlUGFkZGluZ3MgcmVtb3ZlTGFzdE9iamVjdF07Cisg
ICAgICAgIFtfdGV4dFRhYmxlUm93cyByZW1vdmVMYXN0T2JqZWN0XTsKKyAgICAgICAgW190ZXh0
VGFibGVSb3dBcnJheXMgcmVtb3ZlTGFzdE9iamVjdF07CisgICAgfSBlbHNlIGlmIChkaXNwbGF5
VmFsdWUgPT0gInRhYmxlLXJvdyIgJiYgW190ZXh0VGFibGVzIGNvdW50XSA+IDApIHsKKyAgICAg
ICAgTlNUZXh0VGFibGUgKnRhYmxlID0gW190ZXh0VGFibGVzIGxhc3RPYmplY3RdOworICAgICAg
ICBOU1RleHRUYWJsZUJsb2NrICpibG9jazsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnJvd0Fy
cmF5ID0gW190ZXh0VGFibGVSb3dBcnJheXMgbGFzdE9iamVjdF0sICpwcmV2aW91c1Jvd0FycmF5
OworICAgICAgICBOU1VJbnRlZ2VyIGksIGNvdW50OworICAgICAgICBOU0ludGVnZXIgbnVtYmVy
T2ZDb2x1bW5zID0gW3RhYmxlIG51bWJlck9mQ29sdW1uc107CisgICAgICAgIE5TSW50ZWdlciBv
cGVuQ29sdW1uOworICAgICAgICBOU0ludGVnZXIgcm93TnVtYmVyID0gW1tfdGV4dFRhYmxlUm93
cyBsYXN0T2JqZWN0XSBpbnRlZ2VyVmFsdWVdOworICAgICAgICBkbyB7CisgICAgICAgICAgICBy
b3dOdW1iZXIrKzsKKyAgICAgICAgICAgIHByZXZpb3VzUm93QXJyYXkgPSByb3dBcnJheTsKKyAg
ICAgICAgICAgIHJvd0FycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICAgICAgICAg
IGNvdW50ID0gW3ByZXZpb3VzUm93QXJyYXkgY291bnRdOworICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBibG9jayA9IFtwcmV2aW91c1Jv
d0FycmF5IG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgICAgICAgICAgaWYgKFtibG9jayBzdGFy
dGluZ0NvbHVtbl0gKyBbYmxvY2sgY29sdW1uU3Bhbl0gPiBudW1iZXJPZkNvbHVtbnMpIG51bWJl
ck9mQ29sdW1ucyA9IFtibG9jayBzdGFydGluZ0NvbHVtbl0gKyBbYmxvY2sgY29sdW1uU3Bhbl07
CisgICAgICAgICAgICAgICAgaWYgKFtibG9jayBzdGFydGluZ1Jvd10gKyBbYmxvY2sgcm93U3Bh
bl0gPiByb3dOdW1iZXIpIFtyb3dBcnJheSBhZGRPYmplY3Q6YmxvY2tdOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY291bnQgPSBbcm93QXJyYXkgY291bnRdOworICAgICAgICAgICAgb3Bl
bkNvbHVtbiA9IDA7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewor
ICAgICAgICAgICAgICAgIGJsb2NrID0gW3Jvd0FycmF5IG9iamVjdEF0SW5kZXg6aV07CisgICAg
ICAgICAgICAgICAgaWYgKG9wZW5Db2x1bW4gPj0gW2Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSAmJiBv
cGVuQ29sdW1uIDwgW2Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSArIFtibG9jayBjb2x1bW5TcGFuXSkg
b3BlbkNvbHVtbiA9IFtibG9jayBzdGFydGluZ0NvbHVtbl0gKyBbYmxvY2sgY29sdW1uU3Bhbl07
CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKG9wZW5Db2x1bW4gPj0gbnVtYmVyT2ZD
b2x1bW5zKTsKKyAgICAgICAgaWYgKChOU1VJbnRlZ2VyKW51bWJlck9mQ29sdW1ucyA+IFt0YWJs
ZSBudW1iZXJPZkNvbHVtbnNdKQorICAgICAgICAgICAgW3RhYmxlIHNldE51bWJlck9mQ29sdW1u
czpudW1iZXJPZkNvbHVtbnNdOworICAgICAgICBbX3RleHRUYWJsZVJvd3MgcmVtb3ZlTGFzdE9i
amVjdF07CisgICAgICAgIFtfdGV4dFRhYmxlUm93cyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJl
cldpdGhJbnRlZ2VyOnJvd051bWJlcl1dOworICAgICAgICBbX3RleHRUYWJsZVJvd0FycmF5cyBy
ZW1vdmVMYXN0T2JqZWN0XTsKKyAgICAgICAgW190ZXh0VGFibGVSb3dBcnJheXMgYWRkT2JqZWN0
OnJvd0FycmF5XTsKKyAgICAgICAgaWYgKFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBj
b3VudF0gPiAwKQorICAgICAgICAgICAgW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3JzIHJl
bW92ZUxhc3RPYmplY3RdOworICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1j
ZWxsIiAmJiBbX3RleHRCbG9ja3MgY291bnRdID4gMCkgeworICAgICAgICB3aGlsZSAoW190ZXh0
VGFibGVzIGNvdW50XSA+IFtfdGV4dEJsb2NrcyBjb3VudF0pIHsKKyAgICAgICAgICAgIFtfdGV4
dFRhYmxlcyByZW1vdmVMYXN0T2JqZWN0XTsKKyAgICAgICAgICAgIFtfdGV4dFRhYmxlU3BhY2lu
Z3MgcmVtb3ZlTGFzdE9iamVjdF07CisgICAgICAgICAgICBbX3RleHRUYWJsZVBhZGRpbmdzIHJl
bW92ZUxhc3RPYmplY3RdOworICAgICAgICAgICAgW190ZXh0VGFibGVSb3dzIHJlbW92ZUxhc3RP
YmplY3RdOworICAgICAgICAgICAgW190ZXh0VGFibGVSb3dBcnJheXMgcmVtb3ZlTGFzdE9iamVj
dF07CisgICAgICAgIH0KKyAgICAgICAgW190ZXh0QmxvY2tzIHJlbW92ZUxhc3RPYmplY3RdOwor
ICAgIH0gZWxzZSBpZiAoKGVsZW1lbnQuaGFzVGFnTmFtZSh1bFRhZykgfHwgZWxlbWVudC5oYXNU
YWdOYW1lKG9sVGFnKSkgJiYgW190ZXh0TGlzdHMgY291bnRdID4gMCkgeworICAgICAgICBOU1Rl
eHRMaXN0ICpsaXN0ID0gW190ZXh0TGlzdHMgbGFzdE9iamVjdF07CisgICAgICAgIF9hZGRNYXJr
ZXJzVG9MaXN0KGxpc3QsIHJhbmdlKTsKKyAgICAgICAgW190ZXh0TGlzdHMgcmVtb3ZlTGFzdE9i
amVjdF07CisgICAgfSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUocVRhZykpIHsKKyAgICAg
ICAgX2FkZFF1b3RlRm9yRWxlbWVudChlbGVtZW50LCBOTywgLS1fcXVvdGVMZXZlbCk7CisgICAg
fSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoc3BhblRhZykpIHsKKyAgICAgICAgTlNTdHJp
bmcgKmNsYXNzTmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGNsYXNzQXR0cik7CisgICAgICAg
IE5TTXV0YWJsZVN0cmluZyAqbXV0YWJsZVN0cmluZzsKKyAgICAgICAgTlNVSW50ZWdlciBpLCBj
b3VudCA9IDA7CisgICAgICAgIHVuaWNoYXIgYzsKKyAgICAgICAgaWYgKFtAIkFwcGxlLWNvbnZl
cnRlZC1zcGFjZSIgaXNFcXVhbFRvU3RyaW5nOmNsYXNzTmFtZV0pIHsKKyAgICAgICAgICAgIG11
dGFibGVTdHJpbmcgPSBbX2F0dHJTdHIgbXV0YWJsZVN0cmluZ107CisgICAgICAgICAgICBmb3Ig
KGkgPSByYW5nZS5sb2NhdGlvbjsgaSA8IE5TTWF4UmFuZ2UocmFuZ2UpOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBjID0gW211dGFibGVTdHJpbmcgY2hhcmFjdGVyQXRJbmRleDppXTsKKyAgICAg
ICAgICAgICAgICBpZiAoMHhhMCA9PSBjKQorICAgICAgICAgICAgICAgICAgICBbbXV0YWJsZVN0
cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoaSwgMSkgd2l0aFN0cmlu
ZzpAIiAiXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChbQCJBcHBsZS1jb252
ZXJ0ZWQtdGFiIiBpc0VxdWFsVG9TdHJpbmc6Y2xhc3NOYW1lXSkgeworICAgICAgICAgICAgbXV0
YWJsZVN0cmluZyA9IFtfYXR0clN0ciBtdXRhYmxlU3RyaW5nXTsKKyAgICAgICAgICAgIGZvciAo
aSA9IHJhbmdlLmxvY2F0aW9uOyBpIDwgTlNNYXhSYW5nZShyYW5nZSk7IGkrKykgeworICAgICAg
ICAgICAgICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5k
LCAwKTsKKyAgICAgICAgICAgICAgICBjID0gW211dGFibGVTdHJpbmcgY2hhcmFjdGVyQXRJbmRl
eDppXTsKKyAgICAgICAgICAgICAgICBpZiAoJyAnID09IGMgfHwgMHhhMCA9PSBjKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+
PSA0IHx8IGkgKyAxID49IE5TTWF4UmFuZ2UocmFuZ2UpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZShpICsgMSAtIGNvdW50LCBjb3VudCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4g
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2Uo
aSAtIGNvdW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIFttdXRh
YmxlU3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3Ry
aW5nOkAiXHQiXTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoIC09IChyYW5nZVRv
UmVwbGFjZS5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgaSAtPSAocmFuZ2VUb1Jl
cGxhY2UubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChOU01heFJhbmdlKHJh
bmdlVG9SZXBsYWNlKSA8PSBfZG9tUmFuZ2VTdGFydEluZGV4KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4IC09IChyYW5nZVRvUmVwbGFjZS5sZW5ndGggLSAx
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlv
biA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9kb21S
YW5nZVN0YXJ0SW5kZXggPSByYW5nZVRvUmVwbGFjZS5sb2NhdGlvbjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEhUTUxDb252ZXJ0
ZXI6Ol9wcm9jZXNzVGV4dChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQoreworICAgIE5T
VUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdOworICAgIHVuaWNoYXIgbGFz
dENoYXIgPSAodGV4dExlbmd0aCA+IDApID8gW1tfYXR0clN0ciBzdHJpbmddIGNoYXJhY3RlckF0
SW5kZXg6dGV4dExlbmd0aCAtIDFdIDogJ1xuJzsKKyAgICBCT09MIHN1cHByZXNzTGVhZGluZ1Nw
YWNlID0gKChfZmxhZ3MuaXNTb2Z0ICYmIGxhc3RDaGFyID09ICcgJykgfHwgbGFzdENoYXIgPT0g
J1xuJyB8fCBsYXN0Q2hhciA9PSAnXHInIHx8IGxhc3RDaGFyID09ICdcdCcgfHwgbGFzdENoYXIg
PT0gTlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gTlNMaW5lU2Vw
YXJhdG9yQ2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IE5TRm9ybUZlZWRDaGFyYWN0ZXIgfHwgbGFz
dENoYXIgPT0gV2ViTmV4dExpbmVDaGFyYWN0ZXIpOworICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxh
Y2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKKyAgICBDRk11dGFibGVTdHJpbmdSZWYg
bXV0c3RyID0gTlVMTDsKKworICAgIFN0cmluZyBvcmlnaW5hbFN0cmluZyA9IGNoYXJhY3RlckRh
dGEuZGF0YSgpOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBvcmlnaW5hbFN0cmluZy5sZW5ndGgoKTsKKyAgICBpZiAoJmNoYXJhY3RlckRh
dGEgPT0gbV9yYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAgICAgICBzdGFydE9mZnNldCA9
IG1fcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSBb
X2F0dHJTdHIgbGVuZ3RoXTsKKyAgICAgICAgX2ZsYWdzLnJlYWNoZWRTdGFydCA9IFlFUzsKKyAg
ICB9CisgICAgaWYgKCZjaGFyYWN0ZXJEYXRhID09IG1fcmFuZ2UtPmVuZENvbnRhaW5lcigpKSB7
CisgICAgICAgIGVuZE9mZnNldCA9IG1fcmFuZ2UtPmVuZE9mZnNldCgpOworICAgICAgICBfZmxh
Z3MucmVhY2hlZEVuZCA9IFlFUzsKKyAgICB9CisgICAgaWYgKChzdGFydE9mZnNldCA+IDAgfHwg
ZW5kT2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoKCkpICYmIGVuZE9mZnNldCA+PSBzdGFy
dE9mZnNldCkKKyAgICAgICAgb3JpZ2luYWxTdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHJp
bmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKKyAgICBTdHJpbmcgb3V0
cHV0U3RyaW5nID0gb3JpZ2luYWxTdHJpbmc7CisKKyAgICAvLyBGSVhNRTogVXNlIFJlbmRlclRl
eHQncyBjb250ZW50IGluc3RlYWQuCisgICAgYm9vbCB3YXNTcGFjZSA9IGZhbHNlOworICAgIGlm
IChfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjaGFyYWN0ZXJEYXRhLCBDU1NQcm9wZXJ0
eVdoaXRlU3BhY2UpLnN0YXJ0c1dpdGgoInByZSIpKSB7CisgICAgICAgIGlmICh0ZXh0TGVuZ3Ro
ICYmIG9yaWdpbmFsU3RyaW5nLmxlbmd0aCgpICYmIF9mbGFncy5pc1NvZnQpIHsKKyAgICAgICAg
ICAgIHVuaWNoYXIgYyA9IG9yaWdpbmFsU3RyaW5nLmF0KDApOworICAgICAgICAgICAgaWYgKGMg
PT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSBOU1BhcmFncmFwaFNlcGFyYXRvckNoYXJhY3Rl
ciB8fCBjID09IE5TTGluZVNlcGFyYXRvckNoYXJhY3RlciB8fCBjID09IE5TRm9ybUZlZWRDaGFy
YWN0ZXIgfHwgYyA9PSBXZWJOZXh0TGluZUNoYXJhY3RlcikKKyAgICAgICAgICAgICAgICByYW5n
ZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGggLSAxLCAxKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gb3JpZ2luYWxTdHJpbmcubGVu
Z3RoKCk7CisgICAgICAgIGJvb2wgd2FzTGVhZGluZyA9IHRydWU7CisgICAgICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKKyAgICAgICAgICAgIFVDaGFyIGMgPSBvcmlnaW5hbFN0cmluZy5hdChpKTsKKyAgICAg
ICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlID0gYyA9PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0g
J1xyJyB8fCBjID09ICdcdCcgfHwgYyA9PSAweGMgfHwgYyA9PSAweDIwMGI7CisgICAgICAgICAg
ICBpZiAoaXNXaGl0ZXNwYWNlKQorICAgICAgICAgICAgICAgIHdhc1NwYWNlID0gKCF3YXNMZWFk
aW5nIHx8ICFzdXBwcmVzc0xlYWRpbmdTcGFjZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAod2FzU3BhY2UpCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCcgJyk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7CisgICAgICAgICAg
ICAgICAgd2FzU3BhY2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB3YXNMZWFkaW5nID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdhc1NwYWNlKQorICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICAgICAgb3V0cHV0U3RyaW5nID0gYnVp
bGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChvdXRwdXRTdHJpbmcubGVuZ3RoKCkp
IHsKKyAgICAgICAgU3RyaW5nIHRleHRUcmFuc2Zvcm0gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVl
Rm9yTm9kZShjaGFyYWN0ZXJEYXRhLCBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm0pOworICAgICAg
ICBpZiAodGV4dFRyYW5zZm9ybS5sZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKHRleHRUcmFu
c2Zvcm0gPT0gImNhcGl0YWxpemUiKSB7Ly8gRklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZm
aWNpZW50LgorICAgICAgICAgICAgICAgIE5TU3RyaW5nICp0ZW1wb3JhcnlTdHJpbmcgPSBvdXRw
dXRTdHJpbmc7CisgICAgICAgICAgICAgICAgb3V0cHV0U3RyaW5nID0gW3RlbXBvcmFyeVN0cmlu
ZyBjYXBpdGFsaXplZFN0cmluZ107CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRUcmFuc2Zv
cm0gPT0gInVwcGVyY2FzZSIpCisgICAgICAgICAgICAgICAgb3V0cHV0U3RyaW5nID0gb3V0cHV0
U3RyaW5nLnVwcGVyKCk7CisgICAgICAgICAgICBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09ICJs
b3dlcmNhc2UiKQorICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IG91dHB1dFN0cmluZy5s
b3dlcigpOworICAgICAgICB9CisKKyAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJz
SW5SYW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOm91dHB1dFN0cmluZ107CisgICAgICAg
IHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IG91dHB1dFN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAg
aWYgKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCkKKyAgICAgICAgICAgIFtfYXR0clN0ciBzZXRBdHRy
aWJ1dGVzOmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yQW5jZXN0b3JzKGNoYXJhY3RlckRhdGEpIHJh
bmdlOnJhbmdlVG9SZXBsYWNlXTsKKyAgICAgICAgX2ZsYWdzLmlzU29mdCA9IHdhc1NwYWNlOwor
ICAgIH0KKyAgICBpZiAobXV0c3RyKQorICAgICAgICBDRlJlbGVhc2UobXV0c3RyKTsKK30KKwor
dm9pZCBIVE1MQ29udmVydGVyOjpfdHJhdmVyc2VOb2RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGRl
cHRoLCBib29sIGVtYmVkZGVkKQoreworICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiAhX2NhY2hlcy0+aXNB
bmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChub2RlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJ
TlRfTUFYOworICAgIGJvb2wgaXNTdGFydCA9IGZhbHNlOworICAgIGJvb2wgaXNFbmQgPSBmYWxz
ZTsKKyAgICBpZiAoJm5vZGUgPT0gbV9yYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAgICAg
ICBzdGFydE9mZnNldCA9IG1fcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIGlzU3RhcnQg
PSB0cnVlOworICAgICAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOworICAgIH0KKyAgICBp
ZiAoJm5vZGUgPT0gbV9yYW5nZS0+ZW5kQ29udGFpbmVyKCkpIHsKKyAgICAgICAgZW5kT2Zmc2V0
ID0gbV9yYW5nZS0+ZW5kT2Zmc2V0KCk7CisgICAgICAgIGlzRW5kID0gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG5vZGUuaXNEb2N1bWVudE5vZGUoKSB8fCBub2RlLmlzRG9jdW1lbnRGcmFn
bWVudCgpKSB7CisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CisgICAg
ICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgY2hpbGQ7IGkrKykgeworICAgICAgICAgICAgaWYg
KGlzU3RhcnQgJiYgaSA9PSBzdGFydE9mZnNldCkKKyAgICAgICAgICAgICAgICBfZG9tUmFuZ2VT
dGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07CisgICAgICAgICAgICBpZiAoKCFpc1N0YXJ0
IHx8IHN0YXJ0T2Zmc2V0IDw9IGkpICYmICghaXNFbmQgfHwgZW5kT2Zmc2V0ID4gaSkpCisgICAg
ICAgICAgICAgICAgX3RyYXZlcnNlTm9kZSgqY2hpbGQsIGRlcHRoICsgMSwgZW1iZWRkZWQpOwor
ICAgICAgICAgICAgaWYgKGlzRW5kICYmIGkgKyAxID49IGVuZE9mZnNldCkKKyAgICAgICAgICAg
ICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKKyAgICAgICAgICAgIGlmIChfZmxhZ3MucmVh
Y2hlZEVuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG5vZGUuaXNFbGVt
ZW50Tm9kZSgpKSB7CisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7
CisgICAgICAgIGlmIChfZW50ZXJFbGVtZW50KGVsZW1lbnQsIGVtYmVkZGVkKSkgeworICAgICAg
ICAgICAgTlNVSW50ZWdlciBzdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07CisgICAgICAg
ICAgICBpZiAoX3Byb2Nlc3NFbGVtZW50KGVsZW1lbnQsIGRlcHRoKSkgeworICAgICAgICAgICAg
ICAgIE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBjaGlsZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpc1N0YXJ0ICYmIGkgPT0gc3RhcnRPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBf
ZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07CisgICAgICAgICAgICAgICAg
ICAgIGlmICgoIWlzU3RhcnQgfHwgc3RhcnRPZmZzZXQgPD0gaSkgJiYgKCFpc0VuZCB8fCBlbmRP
ZmZzZXQgPiBpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF90cmF2ZXJzZU5vZGUoKmNoaWxk
LCBkZXB0aCArIDEsIGVtYmVkZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW5kICYm
IGkgKyAxID49IGVuZE9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9mbGFncy5yZWFj
aGVkRW5kID0gWUVTOworICAgICAgICAgICAgICAgICAgICBpZiAoX2ZsYWdzLnJlYWNoZWRFbmQp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgX2V4aXRFbGVtZW50KGVsZW1lbnQsIGRlcHRoLCBzdGFydEluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobm9kZS5pc0NoYXJhY3RlckRhdGFOb2Rl
KCkpCisgICAgICAgIF9wcm9jZXNzVGV4dCh0b0NoYXJhY3RlckRhdGEobm9kZSkpOworCisgICAg
aWYgKGlzRW5kKQorICAgICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKK30KKwordm9pZCBI
VE1MQ29udmVydGVyOjpfdHJhdmVyc2VGb290ZXJOb2RlKEVsZW1lbnQmIGVsZW1lbnQsIHVuc2ln
bmVkIGRlcHRoKQoreworICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiAhX2NhY2hlcy0+aXNBbmNlc3RvcnNP
ZlN0YXJ0VG9CZUNvbnZlcnRlZChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFY
OworICAgIGJvb2wgaXNTdGFydCA9IGZhbHNlOworICAgIGJvb2wgaXNFbmQgPSBmYWxzZTsKKyAg
ICBpZiAoJmVsZW1lbnQgPT0gbV9yYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAgICAgICBz
dGFydE9mZnNldCA9IG1fcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIGlzU3RhcnQgPSB0
cnVlOworICAgICAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOworICAgIH0KKyAgICBpZiAo
JmVsZW1lbnQgPT0gbV9yYW5nZS0+ZW5kQ29udGFpbmVyKCkpIHsKKyAgICAgICAgZW5kT2Zmc2V0
ID0gbV9yYW5nZS0+ZW5kT2Zmc2V0KCk7CisgICAgICAgIGlzRW5kID0gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKF9lbnRlckVsZW1lbnQoZWxlbWVudCwgWUVTKSkgeworICAgICAgICBOU1VJ
bnRlZ2VyIHN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKKyAgICAgICAgaWYgKF9wcm9j
ZXNzRWxlbWVudChlbGVtZW50LCBkZXB0aCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0g
ZWxlbWVudC5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7
IGNoaWxkOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNTdGFydCAmJiBpID09IHN0YXJ0
T2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRy
U3RyIGxlbmd0aF07CisgICAgICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNl
dCA8PSBpKSAmJiAoIWlzRW5kIHx8IGVuZE9mZnNldCA+IGkpKQorICAgICAgICAgICAgICAgICAg
ICBfdHJhdmVyc2VOb2RlKCpjaGlsZCwgZGVwdGggKyAxLCB0cnVlIC8qIGVtYmVkZGVkICovKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0KQorICAgICAg
ICAgICAgICAgICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKKyAgICAgICAgICAgICAgICBp
ZiAoX2ZsYWdzLnJlYWNoZWRFbmQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBfZXhpdEVsZW1lbnQoZWxlbWVudCwgZGVwdGgsIHN0YXJ0SW5kZXgpOworICAg
ICAgICB9CisgICAgfQorICAgIGlmIChpc0VuZCkKKyAgICAgICAgX2ZsYWdzLnJlYWNoZWRFbmQg
PSBZRVM7Cit9CisKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X2FkanVzdFRyYWlsaW5nTmV3bGluZSgp
Cit7CisgICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07CisgICAg
dW5pY2hhciBsYXN0Q2hhciA9ICh0ZXh0TGVuZ3RoID4gMCkgPyBbW19hdHRyU3RyIHN0cmluZ10g
Y2hhcmFjdGVyQXRJbmRleDp0ZXh0TGVuZ3RoIC0gMV0gOiAwOworICAgIEJPT0wgYWxyZWFkeUhh
c1RyYWlsaW5nTmV3bGluZSA9IChsYXN0Q2hhciA9PSAnXG4nIHx8IGxhc3RDaGFyID09ICdccicg
fHwgbGFzdENoYXIgPT0gTlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIg
PT0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IFdlYk5leHRMaW5lQ2hh
cmFjdGVyKTsKKyAgICBpZiAoX2ZsYWdzLmhhc1RyYWlsaW5nTmV3bGluZSAmJiAhYWxyZWFkeUhh
c1RyYWlsaW5nTmV3bGluZSkKKyAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5S
YW5nZTpOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKSB3aXRoU3RyaW5nOkAiXG4iXTsKK30KKwor
Tm9kZSogSFRNTENvbnZlcnRlckNhY2hlczo6Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZl
cnRlZChjb25zdCBSYW5nZSYgcmFuZ2UpCit7CisgICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBy
YW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcihBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBO
b2RlKiBhbmNlc3RvciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7CisKKyAgICB3aGlsZSAoYW5j
ZXN0b3IpIHsKKyAgICAgICAgbV9hbmNlc3RvcnNVbmRlckNvbW1vbkFuY2VzdG9yLmFkZChhbmNl
c3Rvcik7CisgICAgICAgIGlmIChhbmNlc3RvciA9PSBjb21tb25BbmNlc3RvcikKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yOworfQorCisjaWYgIVBMQVRGT1JNKElP
UykKKworc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yVVJMKERvY3VtZW50TG9h
ZGVyICpkYXRhU291cmNlLCBOU1VSTCAqVVJMKQoreworICAgIGlmIChbVVJMIGlzRmlsZVVSTF0p
CisgICAgICAgIHJldHVybiBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVSTDpbVVJM
IFVSTEJ5UmVzb2x2aW5nU3ltbGlua3NJblBhdGhdIG9wdGlvbnM6MCBlcnJvcjpudWxscHRyXSBh
dXRvcmVsZWFzZV07CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IGRh
dGFTb3VyY2UtPnN1YnJlc291cmNlKFVSTCk7CisgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAg
IE5TRmlsZVdyYXBwZXIgKndyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVn
dWxhckZpbGVXaXRoQ29udGVudHM6cmVzb3VyY2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0
KCldIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgTlNTdHJpbmcgKmZpbGVuYW1lID0gcmVzb3VyY2Ut
PnJlc3BvbnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKKyAgICAgICAgaWYgKCFmaWxlbmFtZSB8
fCAhW2ZpbGVuYW1lIGxlbmd0aF0pCisgICAgICAgICAgICBmaWxlbmFtZSA9IHN1Z2dlc3RlZEZp
bGVuYW1lV2l0aE1JTUVUeXBlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPm1pbWVUeXBlKCkp
OworICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07CisgICAg
ICAgIHJldHVybiB3cmFwcGVyOworICAgIH0KKyAgICAKKyAgICBOU011dGFibGVVUkxSZXF1ZXN0
ICpyZXF1ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpVUkxd
OworCisgICAgTlNDYWNoZWRVUkxSZXNwb25zZSAqY2FjaGVkUmVzcG9uc2UgPSBbW05TVVJMQ2Fj
aGUgc2hhcmVkVVJMQ2FjaGVdIGNhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdDpyZXF1ZXN0XTsKKyAg
ICBbcmVxdWVzdCByZWxlYXNlXTsKKyAgICAKKyAgICBpZiAoY2FjaGVkUmVzcG9uc2UpIHsKKyAg
ICAgICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGlu
aXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpbY2FjaGVkUmVzcG9uc2UgZGF0YV1dIGF1dG9yZWxl
YXNlXTsKKyAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6W1tjYWNoZWRSZXNw
b25zZSByZXNwb25zZV0gc3VnZ2VzdGVkRmlsZW5hbWVdXTsKKyAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CisgICAgfQorICAgIAorICAgIHJldHVybiBuaWw7Cit9CisKK3N0YXRpYyBOU0ZpbGVXcmFw
cGVyICpmaWxlV3JhcHBlckZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBOU0Zp
bGVXcmFwcGVyICp3cmFwcGVyID0gbmlsOworICAgIAorICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0ciA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShzcmNBdHRyKTsKKyAgICBpZiAoIWF0dHIuaXNF
bXB0eSgpKSB7CisgICAgICAgIE5TVVJMICpVUkwgPSBlbGVtZW50LT5kb2N1bWVudCgpLmNvbXBs
ZXRlVVJMKGF0dHIpOworICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGVsZW1l
bnQtPmRvY3VtZW50KCkubG9hZGVyKCkpCisgICAgICAgICAgICB3cmFwcGVyID0gZmlsZVdyYXBw
ZXJGb3JVUkwobG9hZGVyLCBVUkwpOworICAgIH0KKyAgICBpZiAoIXdyYXBwZXIpIHsKKyAgICAg
ICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50LT5yZW5kZXJl
cigpKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpICYmICFyZW5kZXJlci0+
Y2FjaGVkSW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgICAgICB3cmFwcGVyID0g
W1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6KE5TRGF0
YSAqKShyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcikt
PmdldFRJRkZSZXByZXNlbnRhdGlvbigpKV07CisgICAgICAgICAgICBbd3JhcHBlciBzZXRQcmVm
ZXJyZWRGaWxlbmFtZTpAImltYWdlLnRpZmYiXTsKKyAgICAgICAgICAgIFt3cmFwcGVyIGF1dG9y
ZWxlYXNlXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB3cmFwcGVyOworfQorCisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorLy8gVGhpcyBmdW5jdGlvbiBzdXBw
b3J0cyBtb3JlIEhUTUwgZmVhdHVyZXMgdGhhbiB0aGUgZWRpdGluZyB2YXJpYW50IGJlbG93LCBz
dWNoIGFzIHRhYmxlcy4KK05TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZShSYW5nZSYgcmFuZ2UpCit7CisgICAgSFRNTENvbnZlcnRlciBjb252ZXJ0ZXIocmFuZ2Up
OworICAgIHJldHVybiBjb252ZXJ0ZXIuY29udmVydCgpOworfQorICAgIAorI2lmICFQTEFURk9S
TShJT1MpCisvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgVGV4dEl0ZXJhdG9yLCB3aGljaCBtYWtlcyBv
ZmZzZXRzIGluIGl0cyByZXN1bHQgY29tcGF0aWJsZSB3aXRoIEhUTUwgZWRpdGluZy4KK05TQXR0
cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJh
bmdlKQoreworICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIg
c2hhcmVkRm9udE1hbmFnZXJdOworICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmlu
ZyA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CisgICAgTlNVSW50
ZWdlciBzdHJpbmdMZW5ndGggPSAwOworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5
PiBhdHRycyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisK
KyAgICBmb3IgKFRleHRJdGVyYXRvciBpdCgmcmFuZ2UpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5j
ZSgpKSB7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFRleHRSYW5nZSA9IGl0LnJhbmdl
KCk7CisgICAgICAgIE5vZGUqIHN0YXJ0Q29udGFpbmVyID0gY3VycmVudFRleHRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKTsKKyAgICAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gY3VycmVudFRleHRS
YW5nZS0+ZW5kQ29udGFpbmVyKCk7CisgICAgICAgIGludCBzdGFydE9mZnNldCA9IGN1cnJlbnRU
ZXh0UmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBjdXJyZW50
VGV4dFJhbmdlLT5lbmRPZmZzZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGFydENvbnRh
aW5lciA9PSBlbmRDb250YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAtIDEpKSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXItPmNoaWxkTm9kZShzdGFy
dE9mZnNldCk7CisgICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGltZ1Rh
ZykpIHsKKyAgICAgICAgICAgICAgICBOU0ZpbGVXcmFwcGVyKiBmaWxlV3JhcHBlciA9IGZpbGVX
cmFwcGVyRm9yRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpOworICAgICAgICAgICAgICAgIE5TVGV4
dEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRX
aXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXJdOworICAgICAgICAgICAgICAgIFtzdHJpbmcgYXBw
ZW5kQXR0cmlidXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdX
aXRoQXR0YWNobWVudDphdHRhY2htZW50XV07CisgICAgICAgICAgICAgICAgW2F0dGFjaG1lbnQg
cmVsZWFzZV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQgY3VycmVu
dFRleHRMZW5ndGggPSBpdC50ZXh0KCkubGVuZ3RoKCk7CisgICAgICAgIGlmICghY3VycmVudFRl
eHRMZW5ndGgpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gc3RhcnRDb250YWluZXItPnJlbmRlcmVyKCk7CisgICAgICAgIEFTU0VSVChy
ZW5kZXJlcik7CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Cisg
ICAgICAgIGlmIChzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRp
b25VbmRlcmxpbmUpCisgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJl
ciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRl
cmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoc3R5bGUudGV4dERlY29yYXRp
b25zSW5FZmZlY3QoKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpCisgICAgICAgICAgICBb
YXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVy
bGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1l
XTsKKyAgICAgICAgaWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgp
LT5nZXROU0ZvbnQoKSkKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFth
dHRycy5nZXQoKSBzZXRPYmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRG
b250KCkgdG9TaXplOnN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5z
aXplKCldIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKHN0eWxlLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQorICAgICAgICAg
ICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSByZW1vdmVPYmpl
Y3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYgKHN0
eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxw
aGEoKSkKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6
TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgW2F0dHJzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOworCisgICAgICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5T
TWFrZVJhbmdlKHN0cmluZ0xlbmd0aCwgMCkgd2l0aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNT
dHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpXTsKKyAgICAgICAgW3N0cmluZyBzZXRBdHRyaWJ1
dGVzOmF0dHJzLmdldCgpIHJhbmdlOk5TTWFrZVJhbmdlKHN0cmluZ0xlbmd0aCwgY3VycmVudFRl
eHRMZW5ndGgpXTsKKyAgICAgICAgc3RyaW5nTGVuZ3RoICs9IGN1cnJlbnRUZXh0TGVuZ3RoOwor
ICAgIH0KKworICAgIHJldHVybiBbc3RyaW5nIGF1dG9yZWxlYXNlXTsKK30KKyNlbmRpZgorICAg
IAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvSFRNTENvbnZl
cnRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvSFRNTENvbnZlcnRlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTYyNWI2NGIyM2RiMWE4ZjFlMTkzODkyYTU3
OTAzZWVhNzFmYjlkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0hUTUxDb252ZXJ0ZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSFRNTENv
bnZlcnRlcl9oCi0jZGVmaW5lIEhUTUxDb252ZXJ0ZXJfaAotCi1PQkpDX0NMQVNTIE5TQXR0cmli
dXRlZFN0cmluZzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgUmFuZ2U7Ci0g
ICAgCi1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2UoUmFuZ2UmKTsKLSNpZiAhUExBVEZPUk0oSU9TKQotV0VCQ09SRV9FWFBPUlQgTlNB
dHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYp
OwotI2VuZGlmCi0KLX0KLQotI2VuZGlmIC8vIEhUTUxDb252ZXJ0ZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDUxOGU0ZmE5OWU0MmI3YTkxYzNlZWJjYTY3NzhhMjk4M2MyMjkzNGMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDI2
MTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiSFRNTENvbnZlcnRlci5oIgotCi0jaW1wb3J0ICJBcmNoaXZlUmVzb3VyY2UuaCIKLSNpbXBv
cnQgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2ltcG9ydCAiQ1NTUGFyc2VyLmgi
Ci0jaW1wb3J0ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2ltcG9ydCAiQ2FjaGVkSW1hZ2UuaCIK
LSNpbXBvcnQgIkNoYXJhY3RlckRhdGEuaCIKLSNpbXBvcnQgIkNvbG9yTWFjLmgiCi0jaW1wb3J0
ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbXBvcnQgIkVsZW1l
bnQuaCIKLSNpbXBvcnQgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLSNp
bXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZUxvYWRlci5oIgotI2ltcG9ydCAiSFRNTEVs
ZW1lbnQuaCIKLSNpbXBvcnQgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCi0jaW1wb3J0ICJIVE1M
SW5wdXRFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1MTWV0YUVsZW1lbnQuaCIKLSNpbXBvcnQgIkhU
TUxOYW1lcy5oIgotI2ltcG9ydCAiSFRNTE9MaXN0RWxlbWVudC5oIgotI2ltcG9ydCAiSFRNTFBh
cnNlcklkaW9tcy5oIgotI2ltcG9ydCAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKLSNpbXBvcnQg
IkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgiCi0j
aW1wb3J0ICJSR0JDb2xvci5oIgotI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKLSNpbXBvcnQgIlNv
ZnRMaW5raW5nLmgiCi0jaW1wb3J0ICJTdHlsZVByb3BlcnRpZXMuaCIKLSNpbXBvcnQgIlN0eWxl
ZEVsZW1lbnQuaCIKLSNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgotI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+Ci0jaW1wb3J0IDx3dGYvQVNDSUlDVHlwZS5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJXQUtBcHBLaXRT
dHVicy5oIgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQotU09GVF9MSU5LX0NMQVNTKFVJ
S2l0LCBVSUNvbG9yKQotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoVUlGb3VuZGF0aW9u
KQotU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwgVUlGb250KQotU09GVF9MSU5LX0NMQVNT
KFVJRm91bmRhdGlvbiwgTlNDb2xvcikKLVNPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5T
U2hhZG93KQotU09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwgTlNUZXh0QXR0YWNobWVudCkK
LVNPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlKQot
U09GVF9MSU5LX0NMQVNTKFVJRm91bmRhdGlvbiwgTlNQYXJhZ3JhcGhTdHlsZSkKLVNPRlRfTElO
S19DTEFTUyhVSUZvdW5kYXRpb24sIE5TVGV4dExpc3QpCi1TT0ZUX0xJTktfQ0xBU1MoVUlGb3Vu
ZGF0aW9uLCBOU1RleHRCbG9jaykKLVNPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5TVGV4
dFRhYmxlQmxvY2spCi1TT0ZUX0xJTktfQ0xBU1MoVUlGb3VuZGF0aW9uLCBOU1RleHRUYWJsZSkK
LVNPRlRfTElOS19DTEFTUyhVSUZvdW5kYXRpb24sIE5TVGV4dFRhYikKLQotU09GVF9MSU5LX0NP
TlNUQU5UKFVJRm91bmRhdGlvbiwgTlNGb250QXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKLSNk
ZWZpbmUgTlNGb250QXR0cmlidXRlTmFtZSBnZXROU0ZvbnRBdHRyaWJ1dGVOYW1lKCkKLVNPRlRf
TElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lIGdl
dE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlG
b3VuZGF0aW9uLCBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICopCi0j
ZGVmaW5lIE5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZSBnZXROU0JhY2tncm91bmRDb2xv
ckF0dHJpYnV0ZU5hbWUoKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNTdHJv
a2VDb2xvckF0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TU3Ryb2tlQ29sb3JB
dHRyaWJ1dGVOYW1lIGdldE5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lKCkKLVNPRlRfTElOS19D
T05TVEFOVChVSUZvdW5kYXRpb24sIE5TU3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1lLCBOU1N0cmlu
ZyAqKQotI2RlZmluZSBOU1N0cm9rZVdpZHRoQXR0cmlidXRlTmFtZSBnZXROU1N0cm9rZVdpZHRo
QXR0cmlidXRlTmFtZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU1NoYWRv
d0F0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TU2hhZG93QXR0cmlidXRlTmFt
ZSBnZXROU1NoYWRvd0F0dHJpYnV0ZU5hbWUoKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRh
dGlvbiwgTlNLZXJuQXR0cmlidXRlTmFtZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNLZXJuQXR0
cmlidXRlTmFtZSBnZXROU0tlcm5BdHRyaWJ1dGVOYW1lKCkKLVNPRlRfTElOS19DT05TVEFOVChV
SUZvdW5kYXRpb24sIE5TTGlnYXR1cmVBdHRyaWJ1dGVOYW1lLCBOU1N0cmluZyAqKQotI2RlZmlu
ZSBOU0xpZ2F0dXJlQXR0cmlidXRlTmFtZSBnZXROU0xpZ2F0dXJlQXR0cmlidXRlTmFtZSgpCi1T
T0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRl
TmFtZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUg
Z2V0TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUoKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJ
Rm91bmRhdGlvbiwgTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lLCBOU1N0cmluZyAq
KQotI2RlZmluZSBOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWUgZ2V0TlNTdHJpa2V0
aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRp
b24sIE5TQmFzZWxpbmVPZmZzZXRBdHRyaWJ1dGVOYW1lLCBOU1N0cmluZyAqKQotI2RlZmluZSBO
U0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRlTmFtZSBnZXROU0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRl
TmFtZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU1dyaXRpbmdEaXJlY3Rp
b25BdHRyaWJ1dGVOYW1lLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU1dyaXRpbmdEaXJlY3Rpb25B
dHRyaWJ1dGVOYW1lIGdldE5TV3JpdGluZ0RpcmVjdGlvbkF0dHJpYnV0ZU5hbWUoKQotU09GVF9M
SU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWUs
IE5TU3RyaW5nICopCi0jZGVmaW5lIE5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lIGdldE5T
UGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5k
YXRpb24sIE5TQXR0YWNobWVudEF0dHJpYnV0ZU5hbWUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5T
QXR0YWNobWVudEF0dHJpYnV0ZU5hbWUgZ2V0TlNBdHRhY2htZW50QXR0cmlidXRlTmFtZSgpCi1T
T0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0xpbmtBdHRyaWJ1dGVOYW1lLCBOU1N0
cmluZyAqKQotI2RlZmluZSBOU0xpbmtBdHRyaWJ1dGVOYW1lIGdldE5TTGlua0F0dHJpYnV0ZU5h
bWUoKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNBdXRob3JEb2N1bWVudEF0
dHJpYnV0ZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNBdXRob3JEb2N1bWVudEF0dHJpYnV0ZSBn
ZXROU0F1dGhvckRvY3VtZW50QXR0cmlidXRlKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5k
YXRpb24sIE5TRWRpdG9yRG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5T
RWRpdG9yRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNFZGl0b3JEb2N1bWVudEF0dHJpYnV0ZSgpCi1T
T0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0dlbmVyYXRvckRvY3VtZW50QXR0cmli
dXRlLCBOU1N0cmluZyAqKQotI2RlZmluZSBOU0dlbmVyYXRvckRvY3VtZW50QXR0cmlidXRlIGdl
dE5TR2VuZXJhdG9yRG9jdW1lbnRBdHRyaWJ1dGUoKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91
bmRhdGlvbiwgTlNDb21wYW55RG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi0jZGVmaW5l
IE5TQ29tcGFueURvY3VtZW50QXR0cmlidXRlIGdldE5TQ29tcGFueURvY3VtZW50QXR0cmlidXRl
KCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TRGlzcGxheU5hbWVEb2N1bWVu
dEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNEaXNwbGF5TmFtZURvY3VtZW50QXR0
cmlidXRlIGdldE5TRGlzcGxheU5hbWVEb2N1bWVudEF0dHJpYnV0ZSgpCi1TT0ZUX0xJTktfQ09O
U1RBTlQoVUlGb3VuZGF0aW9uLCBOU0NvcHlyaWdodERvY3VtZW50QXR0cmlidXRlLCBOU1N0cmlu
ZyAqKQotI2RlZmluZSBOU0NvcHlyaWdodERvY3VtZW50QXR0cmlidXRlIGdldE5TQ29weXJpZ2h0
RG9jdW1lbnRBdHRyaWJ1dGUoKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNT
dWJqZWN0RG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TU3ViamVjdERv
Y3VtZW50QXR0cmlidXRlIGdldE5TU3ViamVjdERvY3VtZW50QXR0cmlidXRlKCkKLVNPRlRfTElO
S19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TQ29tbWVudERvY3VtZW50QXR0cmlidXRlLCBOU1N0
cmluZyAqKQotI2RlZmluZSBOU0NvbW1lbnREb2N1bWVudEF0dHJpYnV0ZSBnZXROU0NvbW1lbnRE
b2N1bWVudEF0dHJpYnV0ZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU05v
SW5kZXhEb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNOb0luZGV4RG9j
dW1lbnRBdHRyaWJ1dGUgZ2V0TlNOb0luZGV4RG9jdW1lbnRBdHRyaWJ1dGUoKQotU09GVF9MSU5L
X0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNLZXl3b3Jkc0RvY3VtZW50QXR0cmlidXRlLCBOU1N0
cmluZyAqKQotI2RlZmluZSBOU0tleXdvcmRzRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNLZXl3b3Jk
c0RvY3VtZW50QXR0cmlidXRlKCkKLVNPRlRfTElOS19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5T
Q3JlYXRpb25UaW1lRG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi0jZGVmaW5lIE5TQ3Jl
YXRpb25UaW1lRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNDcmVhdGlvblRpbWVEb2N1bWVudEF0dHJp
YnV0ZSgpCi1TT0ZUX0xJTktfQ09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU01vZGlmaWNhdGlvblRp
bWVEb2N1bWVudEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNNb2RpZmljYXRpb25U
aW1lRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNNb2RpZmljYXRpb25UaW1lRG9jdW1lbnRBdHRyaWJ1
dGUoKQotU09GVF9MSU5LX0NPTlNUQU5UKFVJRm91bmRhdGlvbiwgTlNDb252ZXJ0ZWREb2N1bWVu
dEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLSNkZWZpbmUgTlNDb252ZXJ0ZWREb2N1bWVudEF0dHJp
YnV0ZSBnZXROU0NvbnZlcnRlZERvY3VtZW50QXR0cmlidXRlKCkKLVNPRlRfTElOS19DT05TVEFO
VChVSUZvdW5kYXRpb24sIE5TQ29jb2FWZXJzaW9uRG9jdW1lbnRBdHRyaWJ1dGUsIE5TU3RyaW5n
ICopCi0jZGVmaW5lIE5TQ29jb2FWZXJzaW9uRG9jdW1lbnRBdHRyaWJ1dGUgZ2V0TlNDb2NvYVZl
cnNpb25Eb2N1bWVudEF0dHJpYnV0ZSgpCi0KLSNkZWZpbmUgUGxhdGZvcm1OU1NoYWRvdyAgICAg
ICAgICAgIGdldE5TU2hhZG93Q2xhc3MoKQotI2RlZmluZSBQbGF0Zm9ybU5TVGV4dEF0dGFjaG1l
bnQgICAgZ2V0TlNUZXh0QXR0YWNobWVudENsYXNzKCkKLSNkZWZpbmUgUGxhdGZvcm1OU1BhcmFn
cmFwaFN0eWxlICAgIGdldE5TUGFyYWdyYXBoU3R5bGVDbGFzcygpCi0jZGVmaW5lIFBsYXRmb3Jt
TlNUZXh0TGlzdCAgICAgICAgICBnZXROU1RleHRMaXN0Q2xhc3MoKQotI2RlZmluZSBQbGF0Zm9y
bU5TVGV4dFRhYmxlQmxvY2sgICAgZ2V0TlNUZXh0VGFibGVCbG9ja0NsYXNzKCkKLSNkZWZpbmUg
UGxhdGZvcm1OU1RleHRUYWJsZSAgICAgICAgIGdldE5TVGV4dFRhYmxlQ2xhc3MoKQotI2RlZmlu
ZSBQbGF0Zm9ybU5TVGV4dFRhYiAgICAgICAgICAgZ2V0TlNUZXh0VGFiQ2xhc3MoKQotI2RlZmlu
ZSBQbGF0Zm9ybUNvbG9yICAgICAgICAgICAgICAgVUlDb2xvcgotI2RlZmluZSBQbGF0Zm9ybUNv
bG9yQ2xhc3MgICAgICAgICAgZ2V0VUlDb2xvckNsYXNzKCkKLSNkZWZpbmUgUGxhdGZvcm1OU0Nv
bG9yQ2xhc3MgICAgICAgIGdldE5TQ29sb3JDbGFzcygpCi0jZGVmaW5lIFBsYXRmb3JtRm9udCAg
ICAgICAgICAgICAgICBVSUZvbnQKLSNkZWZpbmUgUGxhdGZvcm1Gb250Q2xhc3MgICAgICAgICAg
IGdldFVJRm9udENsYXNzKCkKLQotLy8gV2UgZG9uJ3Qgc29mdGxpbmsgTlNTdXBlcnNjcmlwdEF0
dHJpYnV0ZU5hbWUgYmVjYXVzZSBVSUZvdW5kYXRpb24gc3RvcHBlZCBleHBvcnRpbmcgaXQuCi0v
LyBUaGlzIGF0dHJpYnV0ZSBpcyBiZWluZyBkZXByZWNhdGVkIGF0IHRoZSBBUEkgbGV2ZWwsIGJ1
dCBpbnRlcm5hbGx5IFVJRm91bmRhdGlvbgotLy8gd2lsbCBjb250aW51ZSB0byBzdXBwb3J0IGl0
Lgotc3RhdGljIE5TU3RyaW5nICpjb25zdCBOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZSA9IEAi
TlNTdXBlcnNjcmlwdCI7Ci0jZWxzZQotCi0jZGVmaW5lIFBsYXRmb3JtTlNTaGFkb3cgICAgICAg
ICAgICBOU1NoYWRvdwotI2RlZmluZSBQbGF0Zm9ybU5TVGV4dEF0dGFjaG1lbnQgICAgTlNUZXh0
QXR0YWNobWVudAotI2RlZmluZSBQbGF0Zm9ybU5TUGFyYWdyYXBoU3R5bGUgICAgTlNQYXJhZ3Jh
cGhTdHlsZQotI2RlZmluZSBQbGF0Zm9ybU5TVGV4dExpc3QgICAgICAgICAgTlNUZXh0TGlzdAot
I2RlZmluZSBQbGF0Zm9ybU5TVGV4dFRhYmxlQmxvY2sgICAgTlNUZXh0VGFibGVCbG9jawotI2Rl
ZmluZSBQbGF0Zm9ybU5TVGV4dFRhYmxlICAgICAgICAgTlNUZXh0VGFibGUKLSNkZWZpbmUgUGxh
dGZvcm1OU1RleHRUYWIgICAgICAgICAgIE5TVGV4dFRhYgotI2RlZmluZSBQbGF0Zm9ybUNvbG9y
ICAgICAgICAgICAgICAgTlNDb2xvcgotI2RlZmluZSBQbGF0Zm9ybUNvbG9yQ2xhc3MgICAgICAg
ICAgTlNDb2xvcgotI2RlZmluZSBQbGF0Zm9ybU5TQ29sb3JDbGFzcyAgICAgICAgTlNDb2xvcgot
I2RlZmluZSBQbGF0Zm9ybUZvbnQgICAgICAgICAgICAgICAgTlNGb250Ci0jZGVmaW5lIFBsYXRm
b3JtRm9udENsYXNzICAgICAgICAgICBOU0ZvbnQKLQotI2RlZmluZSBOU1RleHRBbGlnbm1lbnRM
ZWZ0ICAgICAgICAgTlNMZWZ0VGV4dEFsaWdubWVudAotI2RlZmluZSBOU1RleHRBbGlnbm1lbnRS
aWdodCAgICAgICAgTlNSaWdodFRleHRBbGlnbm1lbnQKLSNkZWZpbmUgTlNUZXh0QWxpZ25tZW50
Q2VudGVyICAgICAgIE5TQ2VudGVyVGV4dEFsaWdubWVudAotI2RlZmluZSBOU1RleHRBbGlnbm1l
bnRKdXN0aWZpZWQgICAgTlNKdXN0aWZpZWRUZXh0QWxpZ25tZW50Ci0jZW5kaWYKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi0jaWYgUExB
VEZPUk0oSU9TKQotCi10eXBlZGVmIGVudW0gewotICAgIFVJRm9udFRyYWl0UGxhaW4gICAgICAg
PSAweDAwMDAwMDAwLAotICAgIFVJRm9udFRyYWl0SXRhbGljICAgICAgPSAweDAwMDAwMDAxLCAv
LyAxIDw8IDAKLSAgICBVSUZvbnRUcmFpdEJvbGQgICAgICAgID0gMHgwMDAwMDAwMiwgLy8gMSA8
PCAxCi0gICAgVUlGb250VHJhaXRUaGluICAgICAgICA9ICgxIDw8IDIpLAotICAgIFVJRm9udFRy
YWl0TGlnaHQgICAgICAgPSAoMSA8PCAzKSwKLSAgICBVSUZvbnRUcmFpdFVsdHJhTGlnaHQgID0g
KDEgPDwgNCkKLX0gVUlGb250VHJhaXQ7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIE5T
VW5kZXJsaW5lU3R5bGUpIHsKLSAgICBOU1VuZGVybGluZVN0eWxlTm9uZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAwLAotICAgIE5TVW5kZXJsaW5lU3R5bGVTaW5nbGUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDEsCi0gICAgTlNVbmRlcmxpbmVTdHlsZVRo
aWNrIE5TX0VOVU1fQVZBSUxBQkxFX0lPUyg3XzApICAgID0gMHgwMiwKLSAgICBOU1VuZGVybGlu
ZVN0eWxlRG91YmxlIE5TX0VOVU1fQVZBSUxBQkxFX0lPUyg3XzApICAgPSAweDA5LAotCi0gICAg
TlNVbmRlcmxpbmVQYXR0ZXJuU29saWQgTlNfRU5VTV9BVkFJTEFCTEVfSU9TKDdfMCkgICAgICA9
IDB4MDAwMCwKLSAgICBOU1VuZGVybGluZVBhdHRlcm5Eb3QgTlNfRU5VTV9BVkFJTEFCTEVfSU9T
KDdfMCkgICAgICAgID0gMHgwMTAwLAotICAgIE5TVW5kZXJsaW5lUGF0dGVybkRhc2ggTlNfRU5V
TV9BVkFJTEFCTEVfSU9TKDdfMCkgICAgICAgPSAweDAyMDAsCi0gICAgTlNVbmRlcmxpbmVQYXR0
ZXJuRGFzaERvdCBOU19FTlVNX0FWQUlMQUJMRV9JT1MoN18wKSAgICA9IDB4MDMwMCwKLSAgICBO
U1VuZGVybGluZVBhdHRlcm5EYXNoRG90RG90IE5TX0VOVU1fQVZBSUxBQkxFX0lPUyg3XzApID0g
MHgwNDAwLAotCi0gICAgTlNVbmRlcmxpbmVCeVdvcmQgTlNfRU5VTV9BVkFJTEFCTEVfSU9TKDdf
MCkgPSAweDgwMDAKLX07Ci0KLWVudW0gewotICAgIE5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5
cGUgICAgPSAwLCAgICAvLyBBYnNvbHV0ZSB2YWx1ZSBpbiBwb2ludHMKLSAgICBOU1RleHRCbG9j
a1BlcmNlbnRhZ2VWYWx1ZVR5cGUgID0gMSAgICAgLy8gUGVyY2VudGFnZSB2YWx1ZSAob3V0IG9m
IDEwMCkKLX07Ci10eXBlZGVmIE5TVUludGVnZXIgTlNUZXh0QmxvY2tWYWx1ZVR5cGU7Ci0KLWVu
dW0gewotICAgIE5TVGV4dEJsb2NrV2lkdGggICAgICAgICAgICA9IDAsCi0gICAgTlNUZXh0Qmxv
Y2tNaW5pbXVtV2lkdGggICAgID0gMSwKLSAgICBOU1RleHRCbG9ja01heGltdW1XaWR0aCAgICAg
PSAyLAotICAgIE5TVGV4dEJsb2NrSGVpZ2h0ICAgICAgICAgICA9IDQsCi0gICAgTlNUZXh0Qmxv
Y2tNaW5pbXVtSGVpZ2h0ICAgID0gNSwKLSAgICBOU1RleHRCbG9ja01heGltdW1IZWlnaHQgICAg
PSA2Ci19OwotdHlwZWRlZiBOU1VJbnRlZ2VyIE5TVGV4dEJsb2NrRGltZW5zaW9uOwotCi1lbnVt
IHsKLSAgICBOU1RleHRCbG9ja1BhZGRpbmcgID0gLTEsCi0gICAgTlNUZXh0QmxvY2tCb3JkZXIg
ICA9ICAwLAotICAgIE5TVGV4dEJsb2NrTWFyZ2luICAgPSAgMQotfTsKLXR5cGVkZWYgTlNJbnRl
Z2VyIE5TVGV4dEJsb2NrTGF5ZXI7Ci0KLWVudW0gewotICAgIE5TVGV4dFRhYmxlQXV0b21hdGlj
TGF5b3V0QWxnb3JpdGhtID0gMCwKLSAgICBOU1RleHRUYWJsZUZpeGVkTGF5b3V0QWxnb3JpdGht
ICAgICA9IDEKLX07Ci10eXBlZGVmIE5TVUludGVnZXIgTlNUZXh0VGFibGVMYXlvdXRBbGdvcml0
aG07Ci0KLWVudW0gewotICAgIE5TVGV4dEJsb2NrVG9wQWxpZ25tZW50ICAgICAgICAgPSAwLAot
ICAgIE5TVGV4dEJsb2NrTWlkZGxlQWxpZ25tZW50ICAgICAgPSAxLAotICAgIE5TVGV4dEJsb2Nr
Qm90dG9tQWxpZ25tZW50ICAgICAgPSAyLAotICAgIE5TVGV4dEJsb2NrQmFzZWxpbmVBbGlnbm1l
bnQgICAgPSAzCi19OwotdHlwZWRlZiBOU1VJbnRlZ2VyIE5TVGV4dEJsb2NrVmVydGljYWxBbGln
bm1lbnQ7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIE5TVGV4dEFsaWdubWVudCkgewot
ICAgIE5TVGV4dEFsaWdubWVudExlZnQgICAgICA9IDAsICAgIC8vIFZpc3VhbGx5IGxlZnQgYWxp
Z25lZAotICAgIE5TVGV4dEFsaWdubWVudENlbnRlciAgICA9IDEsICAgIC8vIFZpc3VhbGx5IGNl
bnRlcmVkCi0gICAgTlNUZXh0QWxpZ25tZW50UmlnaHQgICAgID0gMiwgICAgLy8gVmlzdWFsbHkg
cmlnaHQgYWxpZ25lZAotICAgIE5TVGV4dEFsaWdubWVudEp1c3RpZmllZCA9IDMsICAgIC8vIEZ1
bGx5LWp1c3RpZmllZC4gVGhlIGxhc3QgbGluZSBpbiBhIHBhcmFncmFwaCBpcyBuYXR1cmFsLWFs
aWduZWQuCi0gICAgTlNUZXh0QWxpZ25tZW50TmF0dXJhbCAgID0gNCwgICAgLy8gSW5kaWNhdGVz
IHRoZSBkZWZhdWx0IGFsaWdubWVudCBmb3Igc2NyaXB0Ci19IE5TX0VOVU1fQVZBSUxBQkxFX0lP
Uyg2XzApOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBOU1dyaXRpbmdEaXJlY3Rpb24p
IHsKLSAgICBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsICAgICAgID0gLTEsICAgIC8vIERldGVy
bWluZXMgZGlyZWN0aW9uIHVzaW5nIHRoZSBVbmljb2RlIEJpZGkgQWxnb3JpdGhtIHJ1bGVzIFAy
IGFuZCBQMwotICAgIE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ICAgPSAgMCwgICAgLy8g
TGVmdCB0byByaWdodCB3cml0aW5nIGRpcmVjdGlvbgotICAgIE5TV3JpdGluZ0RpcmVjdGlvblJp
Z2h0VG9MZWZ0ICAgPSAgMSAgICAgLy8gUmlnaHQgdG8gbGVmdCB3cml0aW5nIGRpcmVjdGlvbgot
fSBOU19FTlVNX0FWQUlMQUJMRV9JT1MoNl8wKTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgTlNUZXh0V3JpdGluZ0RpcmVjdGlvbikgewotICAgIE5TVGV4dFdyaXRpbmdEaXJlY3Rpb25F
bWJlZGRpbmcgICAgID0gKDAgPDwgMSksCi0gICAgTlNUZXh0V3JpdGluZ0RpcmVjdGlvbk92ZXJy
aWRlICAgICAgPSAoMSA8PCAxKQotfSBOU19FTlVNX0FWQUlMQUJMRV9JT1MoN18wKTsKLQotZW51
bSB7Ci0gICAgTlNFbnRlckNoYXJhY3RlciAgICAgICAgICAgICAgICA9IDB4MDAwMywKLSAgICBO
U0JhY2tzcGFjZUNoYXJhY3RlciAgICAgICAgICAgID0gMHgwMDA4LAotICAgIE5TVGFiQ2hhcmFj
dGVyICAgICAgICAgICAgICAgICAgPSAweDAwMDksCi0gICAgTlNOZXdsaW5lQ2hhcmFjdGVyICAg
ICAgICAgICAgICA9IDB4MDAwYSwKLSAgICBOU0Zvcm1GZWVkQ2hhcmFjdGVyICAgICAgICAgICAg
ID0gMHgwMDBjLAotICAgIE5TQ2FycmlhZ2VSZXR1cm5DaGFyYWN0ZXIgICAgICAgPSAweDAwMGQs
Ci0gICAgTlNCYWNrVGFiQ2hhcmFjdGVyICAgICAgICAgICAgICA9IDB4MDAxOSwKLSAgICBOU0Rl
bGV0ZUNoYXJhY3RlciAgICAgICAgICAgICAgID0gMHgwMDdmLAotICAgIE5TTGluZVNlcGFyYXRv
ckNoYXJhY3RlciAgICAgICAgPSAweDIwMjgsCi0gICAgTlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFy
YWN0ZXIgICA9IDB4MjAyOSwKLSAgICBOU0F0dGFjaG1lbnRDaGFyYWN0ZXIgICAgICAgICAgID0g
MHhGRkZDIC8vIFJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyB1c2VkIGZvciBhdHRhY2htZW50cwot
fTsKLQotZW51bSB7Ci0gICAgTlNMZWZ0VGFiU3RvcFR5cGUgPSAwLAotICAgIE5TUmlnaHRUYWJT
dG9wVHlwZSwKLSAgICBOU0NlbnRlclRhYlN0b3BUeXBlLAotICAgIE5TRGVjaW1hbFRhYlN0b3BU
eXBlCi19OwotdHlwZWRlZiBOU1VJbnRlZ2VyIE5TVGV4dFRhYlR5cGU7Ci0KLUBpbnRlcmZhY2Ug
VUlDb2xvciA6IE5TT2JqZWN0Ci0rIChVSUNvbG9yICopY2xlYXJDb2xvcjsKLS0gKENHRmxvYXQp
YWxwaGFDb21wb25lbnQ7Ci0rIChVSUNvbG9yICopX2Rpc2FtYmlndWF0ZWRfZHVlX3RvX0NJSW1h
Z2VfY29sb3JXaXRoQ0dDb2xvcjooQ0dDb2xvclJlZiljZ0NvbG9yOwotQGVuZAotCi1AaW50ZXJm
YWNlIE5TQ29sb3IgOiBVSUNvbG9yCi0rIChpZCljb2xvcldpdGhDYWxpYnJhdGVkUmVkOihDR0Zs
b2F0KXJlZCBncmVlbjooQ0dGbG9hdClncmVlbiBibHVlOihDR0Zsb2F0KWJsdWUgYWxwaGE6KENH
RmxvYXQpYWxwaGE7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlGb250Ci0rIChVSUZvbnQgKilmb250
V2l0aE5hbWU6KE5TU3RyaW5nICopZm9udE5hbWUgc2l6ZTooQ0dGbG9hdClmb250U2l6ZTsKLSsg
KFVJRm9udCAqKWZvbnRXaXRoRmFtaWx5TmFtZTooTlNTdHJpbmcgKilmYW1pbHlOYW1lIHRyYWl0
czooVUlGb250VHJhaXQpdHJhaXRzIHNpemU6KENHRmxvYXQpZm9udFNpemU7Ci0tIChOU1N0cmlu
ZyAqKWZhbWlseU5hbWU7Ci0tIChDR0Zsb2F0KXBvaW50U2l6ZTsKLS0gKFVJRm9udCAqKWZvbnRX
aXRoU2l6ZTooQ0dGbG9hdClmb250U2l6ZTsKLSsgKE5TQXJyYXkgKilmYW1pbHlOYW1lczsKLSsg
KE5TQXJyYXkgKilmb250TmFtZXNGb3JGYW1pbHlOYW1lOihOU1N0cmluZyAqKWZhbWlseU5hbWU7
Ci0rIChVSUZvbnQgKilzeXN0ZW1Gb250T2ZTaXplOihDR0Zsb2F0KWZvbnRTaXplOwotQGVuZAot
Ci1AaW50ZXJmYWNlIE5TVGV4dFRhYgotLSAoaWQpaW5pdFdpdGhUeXBlOihOU1RleHRUYWJUeXBl
KXR5cGUgbG9jYXRpb246KENHRmxvYXQpbG9jOwotLSAoaWQpaW5pdFdpdGhUZXh0QWxpZ25tZW50
OihOU1RleHRBbGlnbm1lbnQpYWxpZ25tZW50IGxvY2F0aW9uOihDR0Zsb2F0KWxvYyBvcHRpb25z
OihOU0RpY3Rpb25hcnkgKilvcHRpb25zOwotLSAoQ0dGbG9hdClsb2NhdGlvbjsKLS0gKHZvaWQp
cmVsZWFzZTsKLUBlbmQKLQotQGludGVyZmFjZSBOU1BhcmFncmFwaFN0eWxlIDogTlNPYmplY3QK
LSsgKE5TUGFyYWdyYXBoU3R5bGUgKilkZWZhdWx0UGFyYWdyYXBoU3R5bGU7Ci0tICh2b2lkKXNl
dEFsaWdubWVudDooTlNUZXh0QWxpZ25tZW50KWFsaWdubWVudDsKLS0gKHZvaWQpc2V0QmFzZVdy
aXRpbmdEaXJlY3Rpb246KE5TV3JpdGluZ0RpcmVjdGlvbil3cml0aW5nRGlyZWN0aW9uOwotLSAo
dm9pZClzZXRIZWFkSW5kZW50OihDR0Zsb2F0KWFGbG9hdDsKLS0gKENHRmxvYXQpaGVhZEluZGVu
dDsKLS0gKHZvaWQpc2V0SGVhZGVyTGV2ZWw6KE5TSW50ZWdlcilsZXZlbDsKLS0gKHZvaWQpc2V0
Rmlyc3RMaW5lSGVhZEluZGVudDooQ0dGbG9hdClhRmxvYXQ7Ci0tICh2b2lkKXNldFRhaWxJbmRl
bnQ6KENHRmxvYXQpYUZsb2F0OwotLSAodm9pZClzZXRQYXJhZ3JhcGhTcGFjaW5nOihDR0Zsb2F0
KXBhcmFncmFwaFNwYWNpbmc7Ci0tICh2b2lkKXNldFRleHRMaXN0czooTlNBcnJheSAqKWFycmF5
OwotLSAodm9pZClzZXRUZXh0QmxvY2tzOihOU0FycmF5ICopYXJyYXk7Ci0tICh2b2lkKXNldE1p
bmltdW1MaW5lSGVpZ2h0OihDR0Zsb2F0KWFGbG9hdDsKLS0gKE5TQXJyYXkgKil0ZXh0TGlzdHM7
Ci0tICh2b2lkKXJlbW92ZVRhYlN0b3A6KE5TVGV4dFRhYiAqKWFuT2JqZWN0OwotLSAodm9pZClh
ZGRUYWJTdG9wOihOU1RleHRUYWIgKilhbk9iamVjdDsKLS0gKE5TQXJyYXkgKil0YWJTdG9wczsK
LS0gKHZvaWQpc2V0SHlwaGVuYXRpb25GYWN0b3I6KGZsb2F0KWFGYWN0b3I7Ci1AZW5kCi0KLUBp
bnRlcmZhY2UgTlNTaGFkb3cKLS0gKHZvaWQpc2V0U2hhZG93T2Zmc2V0OihDR1NpemUpc2l6ZTsK
LS0gKHZvaWQpc2V0U2hhZG93Qmx1clJhZGl1czooQ0dGbG9hdClyYWRpdXM7Ci0tICh2b2lkKXNl
dFNoYWRvd0NvbG9yOihVSUNvbG9yICopY29sb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNUZXh0
QmxvY2sgOiBOU09iamVjdAotLSAodm9pZClzZXRWYWx1ZTooQ0dGbG9hdCl2YWwgdHlwZTooTlNU
ZXh0QmxvY2tWYWx1ZVR5cGUpdHlwZSBmb3JEaW1lbnNpb246KE5TVGV4dEJsb2NrRGltZW5zaW9u
KWRpbWVuc2lvbjsKLS0gKHZvaWQpc2V0V2lkdGg6KENHRmxvYXQpdmFsIHR5cGU6KE5TVGV4dEJs
b2NrVmFsdWVUeXBlKXR5cGUgZm9yTGF5ZXI6KE5TVGV4dEJsb2NrTGF5ZXIpbGF5ZXIgZWRnZToo
TlNSZWN0RWRnZSllZGdlOwotLSAodm9pZClzZXRCYWNrZ3JvdW5kQ29sb3I6KFVJQ29sb3IgKilj
b2xvcjsKLS0gKFVJQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3I7Ci0tICh2b2lkKXNldEJvcmRlckNv
bG9yOihVSUNvbG9yICopY29sb3IgZm9yRWRnZTooTlNSZWN0RWRnZSllZGdlOwotLSAodm9pZClz
ZXRCb3JkZXJDb2xvcjooVUlDb2xvciAqKWNvbG9yOyAgICAgICAgLy8gQ29udmVuaWVuY2UgbWV0
aG9kIHNldHMgYWxsIGVkZ2VzIGF0IG9uY2UKLS0gKHZvaWQpc2V0VmVydGljYWxBbGlnbm1lbnQ6
KE5TVGV4dEJsb2NrVmVydGljYWxBbGlnbm1lbnQpYWxpZ25tZW50OwotQGVuZAotCi1AaW50ZXJm
YWNlIE5TVGV4dExpc3QKLS0gKGlkKWluaXRXaXRoTWFya2VyRm9ybWF0OihOU1N0cmluZyAqKWZv
cm1hdCBvcHRpb25zOihOU1VJbnRlZ2VyKW1hc2s7Ci0tICh2b2lkKXNldFN0YXJ0aW5nSXRlbU51
bWJlcjooTlNJbnRlZ2VyKWl0ZW1OdW07Ci0tIChOU0ludGVnZXIpc3RhcnRpbmdJdGVtTnVtYmVy
OwotLSAoTlNTdHJpbmcgKiltYXJrZXJGb3JJdGVtTnVtYmVyOihOU0ludGVnZXIpaXRlbU51bTsK
LS0gKHZvaWQpcmVsZWFzZTsKLUBlbmQKLQotQGludGVyZmFjZSBOU011dGFibGVQYXJhZ3JhcGhT
dHlsZSA6IE5TUGFyYWdyYXBoU3R5bGUKLS0gKHZvaWQpc2V0RGVmYXVsdFRhYkludGVydmFsOihD
R0Zsb2F0KWFGbG9hdDsKLS0gKHZvaWQpc2V0VGFiU3RvcHM6KE5TQXJyYXkgKilhcnJheTsKLUBl
bmQKLQotQGludGVyZmFjZSBOU1RleHRBdHRhY2htZW50IDogTlNPYmplY3QKLS0gKGlkKWluaXRX
aXRoRmlsZVdyYXBwZXI6KE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBlcjsKLSNpZiBQTEFURk9S
TShJT1MpCi0tICh2b2lkKXNldEJvdW5kczooQ0dSZWN0KWJvdW5kczsKLSNlbmRpZgotLSAodm9p
ZClyZWxlYXNlOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TVGV4dFRhYmxlIDogTlNUZXh0QmxvY2sK
LS0gKHZvaWQpc2V0TnVtYmVyT2ZDb2x1bW5zOihOU1VJbnRlZ2VyKW51bUNvbHM7Ci0tICh2b2lk
KXNldENvbGxhcHNlc0JvcmRlcnM6KEJPT0wpZmxhZzsKLS0gKHZvaWQpc2V0SGlkZXNFbXB0eUNl
bGxzOihCT09MKWZsYWc7Ci0tICh2b2lkKXNldExheW91dEFsZ29yaXRobTooTlNUZXh0VGFibGVM
YXlvdXRBbGdvcml0aG0pYWxnb3JpdGhtOwotLSAoTlNVSW50ZWdlciludW1iZXJPZkNvbHVtbnM7
Ci0tICh2b2lkKXJlbGVhc2U7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNUZXh0VGFibGVCbG9jayA6
IE5TVGV4dEJsb2NrCi0tIChpZClpbml0V2l0aFRhYmxlOihOU1RleHRUYWJsZSAqKXRhYmxlIHN0
YXJ0aW5nUm93OihOU0ludGVnZXIpcm93IHJvd1NwYW46KE5TSW50ZWdlcilyb3dTcGFuIHN0YXJ0
aW5nQ29sdW1uOihOU0ludGVnZXIpY29sIGNvbHVtblNwYW46KE5TSW50ZWdlciljb2xTcGFuOyAg
ICAgLy8gRGVzaWduYXRlZCBpbml0aWFsaXplcgotLSAoTlNJbnRlZ2VyKXN0YXJ0aW5nQ29sdW1u
OwotLSAoTlNJbnRlZ2VyKXN0YXJ0aW5nUm93OwotLSAoTlNVSW50ZWdlciludW1iZXJPZkNvbHVt
bnM7Ci0tIChOU0ludGVnZXIpY29sdW1uU3BhbjsKLS0gKE5TSW50ZWdlcilyb3dTcGFuOwotQGVu
ZAotCi0jZWxzZQotc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yVVJMKERvY3Vt
ZW50TG9hZGVyICosIE5TVVJMICopOwotc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVy
Rm9yRWxlbWVudChFbGVtZW50Kik7Ci0KLUBpbnRlcmZhY2UgTlNUZXh0QXR0YWNobWVudCAoV2Vi
Q29yZU5TVGV4dEF0dGFjaG1lbnQpCi0tICh2b2lkKXNldElnbm9yZXNPcmllbnRhdGlvbjooQk9P
TClmbGFnOwotLSAodm9pZClzZXRCb3VuZHM6KENHUmVjdClib3VuZHM7Ci0tIChCT09MKWlnbm9y
ZXNPcmllbnRhdGlvbjsKLUBlbmQKLQotI2VuZGlmCi0KLS8vIEFkZGl0aW9uYWwgY29udHJvbCBV
bmljb2RlIGNoYXJhY3RlcnMKLWNvbnN0IHVuaWNoYXIgV2ViTmV4dExpbmVDaGFyYWN0ZXIgPSAw
eDAwODU7Ci0KLXN0YXRpYyBjb25zdCBDR0Zsb2F0IGRlZmF1bHRGb250U2l6ZSA9IDEyOwotc3Rh
dGljIGNvbnN0IENHRmxvYXQgbWluaW11bUZvbnRTaXplID0gMTsKLQotY2xhc3MgSFRNTENvbnZl
cnRlckNhY2hlcyB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nIHByb3BlcnR5VmFsdWVGb3JOb2RlKE5v
ZGUmLCBDU1NQcm9wZXJ0eUlEICk7Ci0gICAgYm9vbCBmbG9hdFByb3BlcnR5VmFsdWVGb3JOb2Rl
KE5vZGUmLCBDU1NQcm9wZXJ0eUlELCBmbG9hdCYpOwotICAgIENvbG9yIGNvbG9yUHJvcGVydHlW
YWx1ZUZvck5vZGUoTm9kZSYsIENTU1Byb3BlcnR5SUQpOwotCi0gICAgYm9vbCBpc0Jsb2NrRWxl
bWVudChFbGVtZW50Jik7Ci0gICAgYm9vbCBlbGVtZW50SGFzT3duQmFja2dyb3VuZENvbG9yKEVs
ZW1lbnQmKTsKLQotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkU3R5bGVQcm9wZXJ0
eUZvckVsZW1lbnQoRWxlbWVudCYsIENTU1Byb3BlcnR5SUQpOwotICAgIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IGlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmLCBDU1NQcm9wZXJ0
eUlEKTsKLQotICAgIE5vZGUqIGNhY2hlQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoY29u
c3QgUmFuZ2UmKTsKLSAgICBib29sIGlzQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoTm9k
ZSYgbm9kZSkgY29uc3QgeyByZXR1cm4gbV9hbmNlc3RvcnNVbmRlckNvbW1vbkFuY2VzdG9yLmNv
bnRhaW5zKCZub2RlKTsgfQotCi1wcml2YXRlOgotICAgIEhhc2hNYXA8RWxlbWVudCosIHN0ZDo6
dW5pcXVlX3B0cjxDb21wdXRlZFN0eWxlRXh0cmFjdG9yPj4gbV9jb21wdXRlZFN0eWxlczsKLSAg
ICBIYXNoU2V0PE5vZGUqPiBtX2FuY2VzdG9yc1VuZGVyQ29tbW9uQW5jZXN0b3I7Ci19OwotCi1A
aW50ZXJmYWNlIE5TVGV4dExpc3QgKFdlYkNvcmVOU1RleHRMaXN0RGV0YWlscykKLSsgKE5TRGlj
dGlvbmFyeSAqKV9zdGFuZGFyZE1hcmtlckF0dHJpYnV0ZXNGb3JBdHRyaWJ1dGVzOihOU0RpY3Rp
b25hcnkgKilhdHRyczsKLUBlbmQKLQotQGludGVyZmFjZSBOU1VSTCAoV2ViQ29yZU5TVVJMRGV0
YWlscykKLS8vIEZJWE1FOiBXaGF0IGlzIHRoZSByZWFzb24gdG8gdXNlIHRoaXMgRm91bmRhdGlv
biBtZXRob2QsIGFuZCBub3QgK1tOU1VSTCBVUkxXaXRoU3RyaW5nOnJlbGF0aXZlVG9VUkw6XT8K
LSsgKE5TVVJMICopX3dlYl9VUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2
ZVRvVVJMOihOU1VSTCAqKWJhc2VVUkw7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNPYmplY3QoV2Vi
TWVzc2FnZURvY3VtZW50U2ltdWxhdGlvbikKLSsgKHZvaWQpZG9jdW1lbnQ6KE5TT2JqZWN0ICoq
KW91dERvY3VtZW50IGF0dGFjaG1lbnQ6KE5TVGV4dEF0dGFjaG1lbnQgKiopb3V0QXR0YWNobWVu
dCBmb3JVUkw6KE5TVVJMICopdXJsOwotQGVuZAotCi1jbGFzcyBIVE1MQ29udmVydGVyIHsKLXB1
YmxpYzoKLSAgICBIVE1MQ29udmVydGVyKFJhbmdlJik7Ci0gICAgfkhUTUxDb252ZXJ0ZXIoKTsK
LSAgICAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGNvbnZlcnQoKTsKLSAgICAKLXByaXZhdGU6
Ci0gICAgUmVmPFJhbmdlPiBtX3JhbmdlOwotICAgIERvY3VtZW50TG9hZGVyKiBtX2RhdGFTb3Vy
Y2U7Ci0gICAgCi0gICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJldGFpblB0cjxOU0RpY3Rp
b25hcnk+PiBtX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKLSAgICBIYXNoTWFwPFJldGFpblB0cjxO
U1RleHRUYWJsZT4sIFJlZlB0cjxFbGVtZW50Pj4gbV90ZXh0VGFibGVGb290ZXJzOwotICAgIEhh
c2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5Pj4gbV9hZ2dyZWdh
dGVkQXR0cmlidXRlc0ZvckVsZW1lbnRzOwotCi0gICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyAqX2F0dHJTdHI7Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2RvY3VtZW50QXR0cnM7Ci0g
ICAgTlNVUkwgKl9iYXNlVVJMOwotICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dExpc3RzOwotICAg
IE5TTXV0YWJsZUFycmF5ICpfdGV4dEJsb2NrczsKLSAgICBOU011dGFibGVBcnJheSAqX3RleHRU
YWJsZXM7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVTcGFjaW5nczsKLSAgICBOU011
dGFibGVBcnJheSAqX3RleHRUYWJsZVBhZGRpbmdzOwotICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4
dFRhYmxlUm93czsKLSAgICBOU011dGFibGVBcnJheSAqX3RleHRUYWJsZVJvd0FycmF5czsKLSAg
ICBOU011dGFibGVBcnJheSAqX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnM7Ci0gICAgTlNN
dXRhYmxlRGljdGlvbmFyeSAqX2ZvbnRDYWNoZTsKLSAgICBOU011dGFibGVBcnJheSAqX3dyaXRp
bmdEaXJlY3Rpb25BcnJheTsKLSAgICAKLSAgICBDR0Zsb2F0IF9kZWZhdWx0VGFiSW50ZXJ2YWw7
Ci0gICAgTlNVSW50ZWdlciBfZG9tUmFuZ2VTdGFydEluZGV4OwotICAgIE5TSW50ZWdlciBfcXVv
dGVMZXZlbDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxIVE1MQ29udmVydGVyQ2FjaGVzPiBfY2Fj
aGVzOwotCi0gICAgc3RydWN0IHsKLSAgICAgICAgdW5zaWduZWQgaW50IGlzU29mdDoxOwotICAg
ICAgICB1bnNpZ25lZCBpbnQgcmVhY2hlZFN0YXJ0OjE7Ci0gICAgICAgIHVuc2lnbmVkIGludCBy
ZWFjaGVkRW5kOjE7Ci0gICAgICAgIHVuc2lnbmVkIGludCBoYXNUcmFpbGluZ05ld2xpbmU6MTsK
LSAgICAgICAgdW5zaWduZWQgaW50IHBhZDoyNjsKLSAgICB9IF9mbGFnczsKLSAgICAKLSAgICBQ
bGF0Zm9ybUNvbG9yICpfY29sb3JGb3JFbGVtZW50KEVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKTsK
LSAgICAKLSAgICB2b2lkIF90cmF2ZXJzZU5vZGUoTm9kZSYsIHVuc2lnbmVkIGRlcHRoLCBib29s
IGVtYmVkZGVkKTsKLSAgICB2b2lkIF90cmF2ZXJzZUZvb3Rlck5vZGUoRWxlbWVudCYsIHVuc2ln
bmVkIGRlcHRoKTsKLSAgICAKLSAgICBOU0RpY3Rpb25hcnkgKmNvbXB1dGVkQXR0cmlidXRlc0Zv
ckVsZW1lbnQoRWxlbWVudCYpOwotICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlc0ZvckVsZW1l
bnQoRWxlbWVudCYpOwotICAgIE5TRGljdGlvbmFyeSAqYWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JB
bmNlc3RvcnMoQ2hhcmFjdGVyRGF0YSYpOwotICAgIE5TRGljdGlvbmFyeSogYWdncmVnYXRlZEF0
dHJpYnV0ZXNGb3JFbGVtZW50QW5kSXRzQW5jZXN0b3JzKEVsZW1lbnQmKTsKLQotICAgIEVsZW1l
bnQqIF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoTm9kZSopOwotICAgIAotICAgIHZvaWQgX25l
d1BhcmFncmFwaEZvckVsZW1lbnQoRWxlbWVudCYsIE5TU3RyaW5nICp0YWcsIEJPT0wgZmxhZywg
Qk9PTCBzdXBwcmVzc1RyYWlsaW5nU3BhY2UpOwotICAgIHZvaWQgX25ld0xpbmVGb3JFbGVtZW50
KEVsZW1lbnQmKTsKLSAgICB2b2lkIF9uZXdUYWJGb3JFbGVtZW50KEVsZW1lbnQmKTsKLSAgICBC
T09MIF9hZGRBdHRhY2htZW50Rm9yRWxlbWVudChFbGVtZW50JiwgTlNVUkwgKnVybCwgQk9PTCBu
ZWVkc1BhcmFncmFwaCwgQk9PTCB1c2VQbGFjZWhvbGRlcik7Ci0gICAgdm9pZCBfYWRkUXVvdGVG
b3JFbGVtZW50KEVsZW1lbnQmLCBCT09MIG9wZW5pbmcsIE5TSW50ZWdlciBsZXZlbCk7Ci0gICAg
dm9pZCBfYWRkVmFsdWUoTlNTdHJpbmcgKnZhbHVlLCBFbGVtZW50Jik7Ci0gICAgdm9pZCBfZmls
bEluQmxvY2soTlNUZXh0QmxvY2sgKmJsb2NrLCBFbGVtZW50JiwgUGxhdGZvcm1Db2xvciAqYmFj
a2dyb3VuZENvbG9yLCBDR0Zsb2F0IGV4dHJhTWFyZ2luLCBDR0Zsb2F0IGV4dHJhUGFkZGluZywg
Qk9PTCBpc1RhYmxlKTsKLSAgICAKLSAgICBCT09MIF9lbnRlckVsZW1lbnQoRWxlbWVudCYsIEJP
T0wgZW1iZWRkZWQpOwotICAgIEJPT0wgX3Byb2Nlc3NFbGVtZW50KEVsZW1lbnQmLCBOU0ludGVn
ZXIgZGVwdGgpOwotICAgIHZvaWQgX2V4aXRFbGVtZW50KEVsZW1lbnQmLCBOU0ludGVnZXIgZGVw
dGgsIE5TVUludGVnZXIgc3RhcnRJbmRleCk7Ci0gICAgCi0gICAgdm9pZCBfcHJvY2Vzc0hlYWRF
bGVtZW50KEVsZW1lbnQmKTsKLSAgICB2b2lkIF9wcm9jZXNzTWV0YUVsZW1lbnRXaXRoTmFtZShO
U1N0cmluZyAqbmFtZSwgTlNTdHJpbmcgKmNvbnRlbnQpOwotICAgIAotICAgIHZvaWQgX2FkZFRh
YmxlRm9yRWxlbWVudChFbGVtZW50KiB0YWJsZUVsZW1lbnQpOwotICAgIHZvaWQgX2FkZFRhYmxl
Q2VsbEZvckVsZW1lbnQoRWxlbWVudCogdGFibGVDZWxsRWxlbWVudCk7Ci0gICAgdm9pZCBfYWRk
TWFya2Vyc1RvTGlzdChOU1RleHRMaXN0ICpsaXN0LCBOU1JhbmdlIHJhbmdlKTsKLSAgICB2b2lk
IF9wcm9jZXNzVGV4dChDaGFyYWN0ZXJEYXRhJik7Ci0gICAgdm9pZCBfYWRqdXN0VHJhaWxpbmdO
ZXdsaW5lKCk7Ci19OwotCi1IVE1MQ29udmVydGVyOjpIVE1MQ29udmVydGVyKFJhbmdlJiByYW5n
ZSkKLSAgICA6IG1fcmFuZ2UocmFuZ2UpCi0gICAgLCBtX2RhdGFTb3VyY2UobnVsbHB0cikKLXsK
LSAgICBfYXR0clN0ciA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07
Ci0gICAgX2RvY3VtZW50QXR0cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
OwotICAgIF9iYXNlVVJMID0gbmlsOwotICAgIF90ZXh0TGlzdHMgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0XTsKLSAgICBfdGV4dEJsb2NrcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdOwotICAgIF90ZXh0VGFibGVzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07
Ci0gICAgX3RleHRUYWJsZVNwYWNpbmdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07
Ci0gICAgX3RleHRUYWJsZVBhZGRpbmdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07
Ci0gICAgX3RleHRUYWJsZVJvd3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAg
ICBfdGV4dFRhYmxlUm93QXJyYXlzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0g
ICAgX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKLSAgICBfZm9udENhY2hlID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0XTsKLSAgICBfd3JpdGluZ0RpcmVjdGlvbkFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07Ci0KLSAgICBfZGVmYXVsdFRhYkludGVydmFsID0gMzY7Ci0gICAgX2RvbVJhbmdl
U3RhcnRJbmRleCA9IDA7Ci0gICAgX3F1b3RlTGV2ZWwgPSAwOwotICAgIAotICAgIF9mbGFncy5p
c1NvZnQgPSBmYWxzZTsKLSAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0ID0gZmFsc2U7Ci0gICAgX2Zs
YWdzLnJlYWNoZWRFbmQgPSBmYWxzZTsKLSAgICAKLSAgICBfY2FjaGVzID0gc3RkOjptYWtlX3Vu
aXF1ZTxIVE1MQ29udmVydGVyQ2FjaGVzPigpOwotfQotCi1IVE1MQ29udmVydGVyOjp+SFRNTENv
bnZlcnRlcigpCi17Ci0gICAgW19hdHRyU3RyIHJlbGVhc2VdOwotICAgIFtfZG9jdW1lbnRBdHRy
cyByZWxlYXNlXTsKLSAgICBbX3RleHRMaXN0cyByZWxlYXNlXTsKLSAgICBbX3RleHRCbG9ja3Mg
cmVsZWFzZV07Ci0gICAgW190ZXh0VGFibGVzIHJlbGVhc2VdOwotICAgIFtfdGV4dFRhYmxlU3Bh
Y2luZ3MgcmVsZWFzZV07Ci0gICAgW190ZXh0VGFibGVQYWRkaW5ncyByZWxlYXNlXTsKLSAgICBb
X3RleHRUYWJsZVJvd3MgcmVsZWFzZV07Ci0gICAgW190ZXh0VGFibGVSb3dBcnJheXMgcmVsZWFz
ZV07Ci0gICAgW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3JzIHJlbGVhc2VdOwotICAgIFtf
Zm9udENhY2hlIHJlbGVhc2VdOwotICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbGVhc2Vd
OwotfQotCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoKQotewot
ICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gX2NhY2hlcy0+Y2FjaGVBbmNlc3Rv
cnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChtX3JhbmdlLmdldCgpKTsKLSAgICBBU1NFUlQoY29tbW9u
QW5jZXN0b3JDb250YWluZXIpOwotCi0gICAgbV9kYXRhU291cmNlID0gY29tbW9uQW5jZXN0b3JD
b250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsK
LSAgICBpZiAoIW1fZGF0YVNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBf
ZG9tUmFuZ2VTdGFydEluZGV4ID0gMDsKLSAgICBfdHJhdmVyc2VOb2RlKCpjb21tb25BbmNlc3Rv
ckNvbnRhaW5lciwgMCwgZmFsc2UgLyogZW1iZWRkZWQgKi8pOwotICAgIGlmIChfZG9tUmFuZ2VT
dGFydEluZGV4ID4gMCAmJiBfZG9tUmFuZ2VTdGFydEluZGV4IDw9IFtfYXR0clN0ciBsZW5ndGhd
KQotICAgICAgICBbX2F0dHJTdHIgZGVsZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgX2RvbVJhbmdlU3RhcnRJbmRleCldOwotICAgIAotICAgIHJldHVybiBbW19hdHRyU3RyIHJl
dGFpbl0gYXV0b3JlbGVhc2VdOwotfQotCi0jaWYgIVBMQVRGT1JNKElPUykKLS8vIFJldHVybnMg
dGhlIGZvbnQgdG8gYmUgdXNlZCBpZiB0aGUgTlNGb250QXR0cmlidXRlTmFtZSBkb2Vzbid0IGV4
aXN0Ci1zdGF0aWMgTlNGb250ICpXZWJEZWZhdWx0Rm9udCgpCi17Ci0gICAgc3RhdGljIE5TRm9u
dCAqZGVmYXVsdEZvbnQgPSBuaWw7Ci0gICAgaWYgKGRlZmF1bHRGb250KQotICAgICAgICByZXR1
cm4gZGVmYXVsdEZvbnQ7Ci0KLSAgICBOU0ZvbnQgKmZvbnQgPSBbTlNGb250IGZvbnRXaXRoTmFt
ZTpAIkhlbHZldGljYSIgc2l6ZToxMl07Ci0gICAgaWYgKCFmb250KQotICAgICAgICBmb250ID0g
W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjEyXTsKLQotICAgIGRlZmF1bHRGb250ID0gW2ZvbnQg
cmV0YWluXTsKLSAgICByZXR1cm4gZGVmYXVsdEZvbnQ7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFBs
YXRmb3JtRm9udCAqX2ZvbnRGb3JOYW1lQW5kU2l6ZShOU1N0cmluZyAqZm9udE5hbWUsIENHRmxv
YXQgc2l6ZSwgTlNNdXRhYmxlRGljdGlvbmFyeSAqY2FjaGUpCi17Ci0gICAgUGxhdGZvcm1Gb250
ICpmb250ID0gW2NhY2hlIG9iamVjdEZvcktleTpmb250TmFtZV07Ci0jaWYgUExBVEZPUk0oSU9T
KQotICAgIGlmIChmb250KQotICAgICAgICByZXR1cm4gW2ZvbnQgZm9udFdpdGhTaXplOnNpemVd
OwotCi0gICAgZm9udCA9IFtQbGF0Zm9ybUZvbnRDbGFzcyBmb250V2l0aE5hbWU6Zm9udE5hbWUg
c2l6ZTpzaXplXTsKLSNlbHNlCi0gICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0gICAgaWYgKGZvbnQpIHsKLSAgICAgICAg
Zm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpzaXplXTsKLSAgICAg
ICAgcmV0dXJuIGZvbnQ7Ci0gICAgfQotICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgZm9udFdpdGhG
YW1pbHk6Zm9udE5hbWUgdHJhaXRzOjAgd2VpZ2h0OjAgc2l6ZTpzaXplXTsKLSNlbmRpZgotICAg
IGlmICghZm9udCkgewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgTlNBcnJheSAqYXZhaWxh
YmxlRmFtaWx5TmFtZXMgPSBbUGxhdGZvcm1Gb250Q2xhc3MgZmFtaWx5TmFtZXNdOwotI2Vsc2UK
LSAgICAgICAgTlNBcnJheSAqYXZhaWxhYmxlRmFtaWx5TmFtZXMgPSBbZm9udE1hbmFnZXIgYXZh
aWxhYmxlRm9udEZhbWlsaWVzXTsKLSNlbmRpZgotICAgICAgICBOU1JhbmdlIGRpdmlkaW5nUmFu
Z2U7Ci0gICAgICAgIE5TUmFuZ2UgZGl2aWRpbmdTcGFjZVJhbmdlID0gW2ZvbnROYW1lIHJhbmdl
T2ZTdHJpbmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNoXTsKLSAgICAgICAgTlNSYW5n
ZSBkaXZpZGluZ0Rhc2hSYW5nZSA9IFtmb250TmFtZSByYW5nZU9mU3RyaW5nOkAiLSIgb3B0aW9u
czpOU0JhY2t3YXJkc1NlYXJjaF07Ci0gICAgICAgIGRpdmlkaW5nUmFuZ2UgPSAoMCA8IGRpdmlk
aW5nU3BhY2VSYW5nZS5sZW5ndGggJiYgMCA8IGRpdmlkaW5nRGFzaFJhbmdlLmxlbmd0aCkgPyAo
ZGl2aWRpbmdTcGFjZVJhbmdlLmxvY2F0aW9uID4gZGl2aWRpbmdEYXNoUmFuZ2UubG9jYXRpb24g
PyBkaXZpZGluZ1NwYWNlUmFuZ2UgOiBkaXZpZGluZ0Rhc2hSYW5nZSkgOiAoMCA8IGRpdmlkaW5n
U3BhY2VSYW5nZS5sZW5ndGggPyBkaXZpZGluZ1NwYWNlUmFuZ2UgOiBkaXZpZGluZ0Rhc2hSYW5n
ZSk7Ci0KLSAgICAgICAgd2hpbGUgKGRpdmlkaW5nUmFuZ2UubGVuZ3RoID4gMCkgewotICAgICAg
ICAgICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbZm9udE5hbWUgc3Vic3RyaW5nVG9JbmRleDpk
aXZpZGluZ1JhbmdlLmxvY2F0aW9uXTsKLSAgICAgICAgICAgIGlmIChbYXZhaWxhYmxlRmFtaWx5
TmFtZXMgY29udGFpbnNPYmplY3Q6ZmFtaWx5TmFtZV0pIHsKLSNpZiBQTEFURk9STShJT1MpCi0g
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKmZhY2VOYW1lID0gW2ZvbnROYW1lIHN1YnN0cmluZ0Zy
b21JbmRleDooZGl2aWRpbmdSYW5nZS5sb2NhdGlvbiArIGRpdmlkaW5nUmFuZ2UubGVuZ3RoKV07
Ci0gICAgICAgICAgICAgICAgTlNBcnJheSAqZmFtaWx5TWVtYmVyRmFjZU5hbWVzID0gW1BsYXRm
b3JtRm9udENsYXNzIGZvbnROYW1lc0ZvckZhbWlseU5hbWU6ZmFtaWx5TmFtZV07Ci0gICAgICAg
ICAgICAgICAgZm9yIChOU1N0cmluZyAqZmFtaWx5TWVtYmVyRmFjZU5hbWUgaW4gZmFtaWx5TWVt
YmVyRmFjZU5hbWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChbZmFtaWx5TWVtYmVyRmFj
ZU5hbWUgY29tcGFyZTpmYWNlTmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9
PSBOU09yZGVyZWRTYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gW1BsYXRm
b3JtRm9udENsYXNzIGZvbnRXaXRoTmFtZTpmYW1pbHlNZW1iZXJGYWNlTmFtZSBzaXplOnNpemVd
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFmb250ICYmIFtmYW1pbHlN
ZW1iZXJGYWNlTmFtZXMgY291bnRdKQotICAgICAgICAgICAgICAgICAgICBmb250ID0gW2dldFVJ
Rm9udENsYXNzKCkgZm9udFdpdGhOYW1lOmZhbWlseU5hbWUgc2l6ZTpzaXplXTsKLSNlbHNlCi0g
ICAgICAgICAgICAgICAgTlNBcnJheSAqZmFtaWx5TWVtYmVyQXJyYXk7Ci0gICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKmZhY2VOYW1lID0gW2ZvbnROYW1lIHN1YnN0cmluZ0Zyb21JbmRleDooZGl2
aWRpbmdSYW5nZS5sb2NhdGlvbiArIGRpdmlkaW5nUmFuZ2UubGVuZ3RoKV07Ci0gICAgICAgICAg
ICAgICAgTlNBcnJheSAqZmFtaWx5TWVtYmVyQXJyYXlzID0gW2ZvbnRNYW5hZ2VyIGF2YWlsYWJs
ZU1lbWJlcnNPZkZvbnRGYW1pbHk6ZmFtaWx5TmFtZV07Ci0gICAgICAgICAgICAgICAgTlNFbnVt
ZXJhdG9yICpmYW1pbHlNZW1iZXJBcnJheXNFbnVtID0gW2ZhbWlseU1lbWJlckFycmF5cyBvYmpl
Y3RFbnVtZXJhdG9yXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGZhbWlseU1lbWJlckFycmF5
ID0gW2ZhbWlseU1lbWJlckFycmF5c0VudW0gbmV4dE9iamVjdF0pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIE5TU3RyaW5nICpmYW1pbHlNZW1iZXJGYWNlTmFtZSA9IFtmYW1pbHlNZW1iZXJBcnJh
eSBvYmplY3RBdEluZGV4OjFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoW2ZhbWlseU1lbWJl
ckZhY2VOYW1lIGNvbXBhcmU6ZmFjZU5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJj
aF0gPT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTlNGb250VHJh
aXRNYXNrIHRyYWl0cyA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDozXSBpbnRl
Z2VyVmFsdWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgTlNJbnRlZ2VyIHdlaWdodCA9IFtb
ZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDoyXSBpbnRlZ2VyVmFsdWVdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBmb250V2l0aEZhbWlseTpmYW1p
bHlOYW1lIHRyYWl0czp0cmFpdHMgd2VpZ2h0OndlaWdodCBzaXplOnNpemVdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFmb250KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICgwIDwgW2ZhbWlseU1lbWJlckFycmF5cyBjb3VudF0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE5TQXJyYXkgKmZhbWlseU1lbWJlckFycmF5ID0gW2ZhbWlseU1lbWJlckFycmF5cyBv
YmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgICAgICAgICAgICAgTlNGb250VHJhaXRNYXNr
IHRyYWl0cyA9IFtbZmFtaWx5TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDozXSBpbnRlZ2VyVmFs
dWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgTlNJbnRlZ2VyIHdlaWdodCA9IFtbZmFtaWx5
TWVtYmVyQXJyYXkgb2JqZWN0QXRJbmRleDoyXSBpbnRlZ2VyVmFsdWVdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBmb250V2l0aEZhbWlseTpmYW1pbHlOYW1l
IHRyYWl0czp0cmFpdHMgd2VpZ2h0OndlaWdodCBzaXplOnNpemVdOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpdmlkaW5nU3BhY2VSYW5n
ZSA9IFtmYW1pbHlOYW1lIHJhbmdlT2ZTdHJpbmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2Vh
cmNoXTsKLSAgICAgICAgICAgICAgICBkaXZpZGluZ0Rhc2hSYW5nZSA9IFtmYW1pbHlOYW1lIHJh
bmdlT2ZTdHJpbmc6QCItIiBvcHRpb25zOk5TQmFja3dhcmRzU2VhcmNoXTsKLSAgICAgICAgICAg
ICAgICBkaXZpZGluZ1JhbmdlID0gKDAgPCBkaXZpZGluZ1NwYWNlUmFuZ2UubGVuZ3RoICYmIDAg
PCBkaXZpZGluZ0Rhc2hSYW5nZS5sZW5ndGgpID8gKGRpdmlkaW5nU3BhY2VSYW5nZS5sb2NhdGlv
biA+IGRpdmlkaW5nRGFzaFJhbmdlLmxvY2F0aW9uID8gZGl2aWRpbmdTcGFjZVJhbmdlIDogZGl2
aWRpbmdEYXNoUmFuZ2UpIDogKDAgPCBkaXZpZGluZ1NwYWNlUmFuZ2UubGVuZ3RoID8gZGl2aWRp
bmdTcGFjZVJhbmdlIDogZGl2aWRpbmdEYXNoUmFuZ2UpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAoIWZvbnQpCi0gICAgICAgIGZv
bnQgPSBbUGxhdGZvcm1Gb250Q2xhc3Mgc3lzdGVtRm9udE9mU2l6ZTpzaXplXTsKLSNlbHNlCi0g
ICAgaWYgKCFmb250KQotICAgICAgICBmb250ID0gW05TRm9udCBmb250V2l0aE5hbWU6QCJUaW1l
cyIgc2l6ZTpzaXplXTsKLSAgICBpZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSBbTlNGb250IHVz
ZXJGb250T2ZTaXplOnNpemVdOwotICAgIGlmICghZm9udCkKLSAgICAgICAgZm9udCA9IFtmb250
TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJEZWZhdWx0Rm9udCgpIHRvU2l6ZTpzaXplXTsKLSAgICBp
ZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSBXZWJEZWZhdWx0Rm9udCgpOwotI2VuZGlmCi0gICAg
W2NhY2hlIHNldE9iamVjdDpmb250IGZvcktleTpmb250TmFtZV07Ci0KLSAgICByZXR1cm4gZm9u
dDsKLX0KLQotc3RhdGljIE5TUGFyYWdyYXBoU3R5bGUgKmRlZmF1bHRQYXJhZ3JhcGhTdHlsZSgp
Ci17Ci0gICAgc3RhdGljIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlICpkZWZhdWx0UGFyYWdyYXBo
U3R5bGUgPSBuaWw7Ci0gICAgaWYgKCFkZWZhdWx0UGFyYWdyYXBoU3R5bGUpIHsKLSAgICAgICAg
ZGVmYXVsdFBhcmFncmFwaFN0eWxlID0gW1tQbGF0Zm9ybU5TUGFyYWdyYXBoU3R5bGUgZGVmYXVs
dFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV07Ci0gICAgICAgIFtkZWZhdWx0UGFyYWdyYXBo
U3R5bGUgc2V0RGVmYXVsdFRhYkludGVydmFsOjM2XTsKLSAgICAgICAgW2RlZmF1bHRQYXJhZ3Jh
cGhTdHlsZSBzZXRUYWJTdG9wczpbTlNBcnJheSBhcnJheV1dOwotICAgIH0KLSAgICByZXR1cm4g
ZGVmYXVsdFBhcmFncmFwaFN0eWxlOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQ29u
dmVydGVyQ2FjaGVzOjpjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmIGVs
ZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBpZiAocHJvcGVydHlJZCA9
PSBDU1NQcm9wZXJ0eUludmFsaWQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byByZXN1bHQgPSBtX2NvbXB1dGVkU3R5bGVzLmFkZCgmZWxlbWVudCwgbnVsbHB0cik7Ci0gICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
c3RkOjptYWtlX3VuaXF1ZTxDb21wdXRlZFN0eWxlRXh0cmFjdG9yPigmZWxlbWVudCwgdHJ1ZSk7
Ci0gICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciYgY29tcHV0ZWRTdHlsZSA9ICpyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOwotICAgIHJldHVybiBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUocHJv
cGVydHlJZCk7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6
OmlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBpZiAocHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUlu
dmFsaWQgfHwgIWVsZW1lbnQuaXNTdHlsZWRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyogcHJvcGVydGllcyA9IHRvU3R5bGVkRWxl
bWVudChlbGVtZW50KS5pbmxpbmVTdHlsZSgpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXMtPmdldFByb3BlcnR5Q1NT
VmFsdWUocHJvcGVydHlJZCk7Ci19Ci0KLXN0YXRpYyBib29sIHN0cmluZ0Zyb21DU1NWYWx1ZShD
U1NWYWx1ZSYgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQotewotICAgIGlmICh2YWx1ZS5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgaWYgKHBy
aW1pdGl2ZVR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgcHJpbWl0aXZl
VHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSB8fAotICAgICAgICAgICAgcHJpbWl0
aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8IHByaW1pdGl2ZVR5cGUg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWUgPSB2YWx1ZS5jc3NUZXh0KCk7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUu
bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdWYWx1ZTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAodmFsdWUuaXNWYWx1ZUxpc3QoKSkgewotICAgICAgICByZXN1bHQgPSB2YWx1ZS5j
c3NUZXh0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLVN0cmluZyBIVE1MQ29udmVydGVyQ2FjaGVzOjpwcm9wZXJ0eVZhbHVlRm9yTm9kZShO
b2RlJiBub2RlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAgaWYgKCFub2RlLmlz
RWxlbWVudE5vZGUoKSkgewotICAgICAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS5wYXJlbnRO
b2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZUZvck5vZGUoKnBhcmVudCwg
cHJvcGVydHlJZCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBib29s
IGluaGVyaXQgPSBmYWxzZTsKLSAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUp
OwotICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZVByb3BlcnR5
Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewotICAgICAgICBTdHJpbmcgcmVzdWx0
OwotICAgICAgICBpZiAoc3RyaW5nRnJvbUNTU1ZhbHVlKCp2YWx1ZSwgcmVzdWx0KSkKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWUgPSBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlk
KSkgewotICAgICAgICBTdHJpbmcgcmVzdWx0OwotICAgICAgICBpZiAodmFsdWUtPmlzSW5oZXJp
dGVkVmFsdWUoKSkKLSAgICAgICAgICAgIGluaGVyaXQgPSB0cnVlOwotICAgICAgICBlbHNlIGlm
IChzdHJpbmdGcm9tQ1NTVmFsdWUoKnZhbHVlLCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIENT
U1Byb3BlcnR5RGlzcGxheToKLSAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShoZWFkVGFn
KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUo
YXBwbGV0VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUobm9mcmFtZXNUYWcpKQotICAgICAgICAg
ICAgcmV0dXJuICJub25lIjsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGFk
ZHJlc3NUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSB8fCBlbGVtZW50
Lmhhc1RhZ05hbWUoYm9keVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGNlbnRlclRhZykKLSAg
ICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZGRUYWcpIHx8IGVsZW1lbnQuaGFzVGFn
TmFtZShkaXJUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShkaXZUYWcpIHx8IGVsZW1lbnQuaGFz
VGFnTmFtZShkbFRhZykKLSAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoZHRUYWcp
IHx8IGVsZW1lbnQuaGFzVGFnTmFtZShmaWVsZHNldFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1l
KGZvcm1UYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShmcmFtZVRhZykKLSAgICAgICAgICAgICB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZSho
clRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFt
ZShoMVRhZykKLSAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaDJUYWcpIHx8IGVs
ZW1lbnQuaGFzVGFnTmFtZShoM1RhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGg0VGFnKSB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUoaDVUYWcpCi0gICAgICAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKGg2VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50Lmhh
c1RhZ05hbWUobWVudVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKG5vc2NyaXB0VGFnKQotICAg
ICAgICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShvbFRhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKHBUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShwcmVUYWcpIHx8IGVsZW1lbnQuaGFzVGFn
TmFtZSh1bFRhZykpCi0gICAgICAgICAgICByZXR1cm4gImJsb2NrIjsKLSAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC5oYXNUYWdOYW1lKGxpVGFnKSkKLSAgICAgICAgICAgIHJldHVybiAibGlzdC1p
dGVtIjsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKLSAg
ICAgICAgICAgIHJldHVybiAidGFibGUiOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1Rh
Z05hbWUodHJUYWcpKQotICAgICAgICAgICAgcmV0dXJuICJ0YWJsZS1yb3ciOwotICAgICAgICBl
bHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGhUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh0
ZFRhZykpCi0gICAgICAgICAgICByZXR1cm4gInRhYmxlLWNlbGwiOwotICAgICAgICBlbHNlIGlm
IChlbGVtZW50Lmhhc1RhZ05hbWUodGhlYWRUYWcpKQotICAgICAgICAgICAgcmV0dXJuICJ0YWJs
ZS1oZWFkZXItZ3JvdXAiOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGJv
ZHlUYWcpKQotICAgICAgICAgICAgcmV0dXJuICJ0YWJsZS1yb3ctZ3JvdXAiOwotICAgICAgICBl
bHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodGZvb3RUYWcpKQotICAgICAgICAgICAgcmV0dXJu
ICJ0YWJsZS1mb290ZXItZ3JvdXAiOwotICAgICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05h
bWUoY29sVGFnKSkKLSAgICAgICAgICAgIHJldHVybiAidGFibGUtY29sdW1uIjsKLSAgICAgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGNvbGdyb3VwVGFnKSkKLSAgICAgICAgICAgIHJl
dHVybiAidGFibGUtY29sdW1uLWdyb3VwIjsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNU
YWdOYW1lKGNhcHRpb25UYWcpKQotICAgICAgICAgICAgcmV0dXJuICJ0YWJsZS1jYXB0aW9uIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0gICAgICAg
IGlmIChlbGVtZW50Lmhhc1RhZ05hbWUocHJlVGFnKSkKLSAgICAgICAgICAgIHJldHVybiAicHJl
IjsKLSAgICAgICAgaW5oZXJpdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250U3R5bGU6Ci0gICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoaVRhZykg
fHwgZWxlbWVudC5oYXNUYWdOYW1lKGNpdGVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShlbVRh
ZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHZhclRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGFk
ZHJlc3NUYWcpKQotICAgICAgICAgICAgcmV0dXJuICJpdGFsaWMiOwotICAgICAgICBpbmhlcml0
ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6
Ci0gICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoYlRhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKHN0cm9uZ1RhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRoVGFnKSkKLSAgICAgICAgICAg
IHJldHVybiAiYm9sZGVyIjsKLSAgICAgICAgaW5oZXJpdCA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoKLSAgICAgICAgaWYgKGVsZW1l
bnQuaGFzVGFnTmFtZSh1VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoaW5zVGFnKSkKLSAgICAg
ICAgICAgIHJldHVybiAidW5kZXJsaW5lIjsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNU
YWdOYW1lKHNUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShzdHJpa2VUYWcpIHx8IGVsZW1lbnQu
aGFzVGFnTmFtZShkZWxUYWcpKQotICAgICAgICAgICAgcmV0dXJuICJsaW5lLXRocm91Z2giOwot
ICAgICAgICBpbmhlcml0ID0gdHJ1ZTsgLy8gRklYTUU6IFRoaXMgaXMgbm90IHN0cmljdGx5IGNv
cnJlY3QKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbGlnbjoKLSAg
ICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShjZW50ZXJUYWcpIHx8IGVsZW1lbnQuaGFzVGFn
TmFtZShjYXB0aW9uVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGhUYWcpKQotICAgICAgICAg
ICAgcmV0dXJuICJjZW50ZXIiOwotICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ246Ci0gICAgICAgIGlmIChlbGVt
ZW50Lmhhc1RhZ05hbWUoc3VwVGFnKSkKLSAgICAgICAgICAgIHJldHVybiAic3VwZXIiOwotICAg
ICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoc3ViVGFnKSkKLSAgICAgICAgICAgIHJl
dHVybiAic3ViIjsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRoZWFkVGFn
KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUodGJvZHlUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZSh0
Zm9vdFRhZykpCi0gICAgICAgICAgICByZXR1cm4gIm1pZGRsZSI7Ci0gICAgICAgIGVsc2UgaWYg
KGVsZW1lbnQuaGFzVGFnTmFtZSh0clRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHRoVGFnKSB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUodGRUYWcpKQotICAgICAgICAgICAgaW5oZXJpdCA9IHRydWU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFRyYW5z
Zm9ybToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VmlzaWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sbGFwc2U6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFj
aW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlEaXJlY3Rpb246Ci0gICAgICAgIGluaGVyaXQgPSB0cnVlOyAvLyBGSVhNRTogTGV0IGNs
YXNzZXMgaW4gdGhlIGNzcyBjb21wb25lbnQgZmlndXJlIHRoaXMgb3V0LgotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaW5oZXJp
dCkgewotICAgICAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZUZvck5vZGUoKnBhcmVudCwgcHJvcGVydHlJZCk7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlLCBmbG9hdCYgcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBVc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbXB1dGVWYWx1ZS4KLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLnByaW1p
dGl2ZVR5cGUoKSkgewotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDoKLSAgICAg
ICAgcmVzdWx0ID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BUOgotICAgICAgICByZXN1bHQgPSA0ICogcHJpbWl0aXZlVmFsdWUuZ2V0Rmxv
YXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUKSAvIDM7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQzoKLSAgICAgICAgcmVzdWx0
ID0gMTYgKiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfQ006Ci0gICAgICAgIHJlc3VsdCA9IDk2ICogcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDKSAvIDIuNTQ7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NTToKLSAgICAgICAgcmVzdWx0
ID0gOTYgKiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEMpIC8gMjUuNDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lOOgotICAgICAgICByZXN1bHQgPSA5NiAqIHByaW1pdGl2ZVZhbHVlLmdl
dEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTik7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJv
b2wgSFRNTENvbnZlcnRlckNhY2hlczo6ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShOb2RlJiBu
b2RlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIGZsb2F0JiByZXN1bHQpCi17Ci0gICAgaWYg
KCFub2RlLmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBpZiAoQ29udGFpbmVyTm9kZSogcGFy
ZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmxvYXRQcm9wZXJ0
eVZhbHVlRm9yTm9kZSgqcGFyZW50LCBwcm9wZXJ0eUlkLCByZXN1bHQpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudChub2Rl
KTsKLSAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVQcm9wZXJ0
eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1ZSh0b0NTU1By
aW1pdGl2ZVZhbHVlKCp2YWx1ZSksIHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBib29sIGluaGVyaXQgPSBmYWxzZTsKLSAgICBpZiAoUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSA9IGlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3Bl
cnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIGZsb2F0
VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUodG9DU1NQcmltaXRpdmVWYWx1ZSgqdmFsdWUpLCByZXN1
bHQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNJbmhl
cml0ZWRWYWx1ZSgpKQotICAgICAgICAgICAgaW5oZXJpdCA9IHRydWU7Ci0gICAgfQotCi0gICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdv
cmRTcGFjaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0OgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXaWRvd3M6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhhbnM6Ci0gICAgICAgIGlu
aGVyaXQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBpZiAoaW5oZXJpdCkgewotICAgICAgICBpZiAoQ29udGFpbmVyTm9k
ZSogcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmxvYXRQ
cm9wZXJ0eVZhbHVlRm9yTm9kZSgqcGFyZW50LCBwcm9wZXJ0eUlkLCByZXN1bHQpOwotICAgIH0K
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIFBMQVRGT1JNKElPUykKLXN0YXRpYyBOU1N0
cmluZyAqX05TRmlyc3RQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNTZWFyY2hQYXRoRGly
ZWN0b3J5IGRpcmVjdG9yeSwgTlNTZWFyY2hQYXRoRG9tYWluTWFzayBkb21haW5NYXNrLCBCT09M
IGV4cGFuZFRpbGRlKQotewotICAgIE5TQXJyYXkgKmFycmF5ID0gTlNTZWFyY2hQYXRoRm9yRGly
ZWN0b3JpZXNJbkRvbWFpbnMoZGlyZWN0b3J5LCBkb21haW5NYXNrLCBleHBhbmRUaWxkZSk7Ci0g
ICAgcmV0dXJuIFthcnJheSBjb3VudF0gPj0gMSA/IFthcnJheSBvYmplY3RBdEluZGV4OjBdIDog
bmlsOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKl9OU1N5c3RlbUxpYnJhcnlQYXRoKHZvaWQpCi17
Ci0gICAgcmV0dXJuIF9OU0ZpcnN0UGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKE5TTGlicmFy
eURpcmVjdG9yeSwgTlNTeXN0ZW1Eb21haW5NYXNrLCBZRVMpOwotfQotCi1zdGF0aWMgTlNCdW5k
bGUgKl93ZWJLaXRCdW5kbGUoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJs
eSB1c2UgdGhlIFdlYkNvcmUgYnVuZGxlIHRvIGF2b2lkIHRoZSBsYXllcmluZyB2aW9sYXRpb24u
Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpA
ImNvbS5hcHBsZS5XZWJLaXQiXTsKLSAgICBpZiAoIWJ1bmRsZSkKLSAgICAgICAgYnVuZGxlID0g
W05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOltfTlNTeXN0ZW1MaWJyYXJ5UGF0aCgpIHN0cmluZ0J5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkZyYW1ld29ya3MvV2ViS2l0LmZyYW1ld29yayJdXTsK
LSAgICByZXR1cm4gYnVuZGxlOwotfQotCi1zdGF0aWMgaW5saW5lIFVJQ29sb3IgKl9wbGF0Zm9y
bUNvbG9yKENvbG9yIGNvbG9yKQotewotICAgIHJldHVybiBbZ2V0VUlDb2xvckNsYXNzKCkgX2Rp
c2FtYmlndWF0ZWRfZHVlX3RvX0NJSW1hZ2VfY29sb3JXaXRoQ0dDb2xvcjpjYWNoZWRDR0NvbG9y
KGNvbG9yLCBXZWJDb3JlOjpDb2xvclNwYWNlRGV2aWNlUkdCKV07Ci19Ci0jZWxzZQotc3RhdGlj
IGlubGluZSBOU0NvbG9yICpfcGxhdGZvcm1Db2xvcihDb2xvciBjb2xvcikKLXsKLSAgICByZXR1
cm4gbnNDb2xvcihjb2xvcik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBOU1NoYWRvdyAq
X3NoYWRvd0ZvclNoYWRvd1N0eWxlKE5TU3RyaW5nICpzaGFkb3dTdHlsZSkKLXsKLSAgICBOU1No
YWRvdyAqc2hhZG93ID0gbmlsOwotICAgIE5TVUludGVnZXIgc2hhZG93U3R5bGVMZW5ndGggPSBb
c2hhZG93U3R5bGUgbGVuZ3RoXTsKLSAgICBOU1JhbmdlIG9wZW5QYXJlblJhbmdlID0gW3NoYWRv
d1N0eWxlIHJhbmdlT2ZTdHJpbmc6QCIoIl07Ci0gICAgTlNSYW5nZSBjbG9zZVBhcmVuUmFuZ2Ug
PSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIikiXTsKLSAgICBOU1JhbmdlIGZpcnN0UmFu
Z2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICBOU1JhbmdlIHNlY29uZFJhbmdl
ID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgTlNSYW5nZSB0aGlyZFJhbmdlID0g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgTlNSYW5nZSBzcGFjZVJhbmdlOwotICAg
IGlmIChvcGVuUGFyZW5SYW5nZS5sZW5ndGggPiAwICYmIGNsb3NlUGFyZW5SYW5nZS5sZW5ndGgg
PiAwICYmIE5TTWF4UmFuZ2Uob3BlblBhcmVuUmFuZ2UpIDwgY2xvc2VQYXJlblJhbmdlLmxvY2F0
aW9uKSB7Ci0gICAgICAgIE5TQXJyYXkgKmNvbXBvbmVudHMgPSBbW3NoYWRvd1N0eWxlIHN1YnN0
cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdlKG9wZW5QYXJlblJhbmdlKSwgY2xv
c2VQYXJlblJhbmdlLmxvY2F0aW9uIC0gTlNNYXhSYW5nZShvcGVuUGFyZW5SYW5nZSkpXSBjb21w
b25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIsIl07Ci0gICAgICAgIGlmIChbY29tcG9uZW50cyBj
b3VudF0gPj0gMykgewotICAgICAgICAgICAgQ0dGbG9hdCByZWQgPSBbW2NvbXBvbmVudHMgb2Jq
ZWN0QXRJbmRleDowXSBmbG9hdFZhbHVlXSAvIDI1NTsKLSAgICAgICAgICAgIENHRmxvYXQgZ3Jl
ZW4gPSBbW2NvbXBvbmVudHMgb2JqZWN0QXRJbmRleDoxXSBmbG9hdFZhbHVlXSAvIDI1NTsKLSAg
ICAgICAgICAgIENHRmxvYXQgYmx1ZSA9IFtbY29tcG9uZW50cyBvYmplY3RBdEluZGV4OjJdIGZs
b2F0VmFsdWVdIC8gMjU1OwotICAgICAgICAgICAgQ0dGbG9hdCBhbHBoYSA9IChbY29tcG9uZW50
cyBjb3VudF0gPj0gNCkgPyBbW2NvbXBvbmVudHMgb2JqZWN0QXRJbmRleDozXSBmbG9hdFZhbHVl
XSAvIDI1NSA6IDE7Ci0gICAgICAgICAgICBOU0NvbG9yICpzaGFkb3dDb2xvciA9IFtQbGF0Zm9y
bU5TQ29sb3JDbGFzcyBjb2xvcldpdGhDYWxpYnJhdGVkUmVkOnJlZCBncmVlbjpncmVlbiBibHVl
OmJsdWUgYWxwaGE6YWxwaGFdOwotICAgICAgICAgICAgTlNTaXplIHNoYWRvd09mZnNldDsKLSAg
ICAgICAgICAgIENHRmxvYXQgc2hhZG93Qmx1clJhZGl1czsKLSAgICAgICAgICAgIGZpcnN0UmFu
Z2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAInB4Il07Ci0gICAgICAgICAgICBpZiAo
Zmlyc3RSYW5nZS5sZW5ndGggPiAwICYmIE5TTWF4UmFuZ2UoZmlyc3RSYW5nZSkgPCBzaGFkb3dT
dHlsZUxlbmd0aCkKLSAgICAgICAgICAgICAgICBzZWNvbmRSYW5nZSA9IFtzaGFkb3dTdHlsZSBy
YW5nZU9mU3RyaW5nOkAicHgiIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZShOU01heFJhbmdl
KGZpcnN0UmFuZ2UpLCBzaGFkb3dTdHlsZUxlbmd0aCAtIE5TTWF4UmFuZ2UoZmlyc3RSYW5nZSkp
XTsKLSAgICAgICAgICAgIGlmIChzZWNvbmRSYW5nZS5sZW5ndGggPiAwICYmIE5TTWF4UmFuZ2Uo
c2Vjb25kUmFuZ2UpIDwgc2hhZG93U3R5bGVMZW5ndGgpCi0gICAgICAgICAgICAgICAgdGhpcmRS
YW5nZSA9IFtzaGFkb3dTdHlsZSByYW5nZU9mU3RyaW5nOkAicHgiIG9wdGlvbnM6MCByYW5nZTpO
U01ha2VSYW5nZShOU01heFJhbmdlKHNlY29uZFJhbmdlKSwgc2hhZG93U3R5bGVMZW5ndGggLSBO
U01heFJhbmdlKHNlY29uZFJhbmdlKSldOwotICAgICAgICAgICAgaWYgKGZpcnN0UmFuZ2UubG9j
YXRpb24gPiAwICYmIGZpcnN0UmFuZ2UubGVuZ3RoID4gMCAmJiBzZWNvbmRSYW5nZS5sZW5ndGgg
PiAwICYmIHRoaXJkUmFuZ2UubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgIHNwYWNlUmFu
Z2UgPSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIiAiIG9wdGlvbnM6TlNCYWNrd2FyZHNT
ZWFyY2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgZmlyc3RSYW5nZS5sb2NhdGlvbildOwotICAgICAg
ICAgICAgICAgIGlmIChzcGFjZVJhbmdlLmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgICAg
ICBzcGFjZVJhbmdlID0gTlNNYWtlUmFuZ2UoMCwgMCk7Ci0gICAgICAgICAgICAgICAgc2hhZG93
T2Zmc2V0LndpZHRoID0gW1tzaGFkb3dTdHlsZSBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFu
Z2UoTlNNYXhSYW5nZShzcGFjZVJhbmdlKSwgZmlyc3RSYW5nZS5sb2NhdGlvbiAtIE5TTWF4UmFu
Z2Uoc3BhY2VSYW5nZSkpXSBmbG9hdFZhbHVlXTsKLSAgICAgICAgICAgICAgICBzcGFjZVJhbmdl
ID0gW3NoYWRvd1N0eWxlIHJhbmdlT2ZTdHJpbmc6QCIgIiBvcHRpb25zOk5TQmFja3dhcmRzU2Vh
cmNoIHJhbmdlOk5TTWFrZVJhbmdlKDAsIHNlY29uZFJhbmdlLmxvY2F0aW9uKV07Ci0gICAgICAg
ICAgICAgICAgaWYgKCFzcGFjZVJhbmdlLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgc3Bh
Y2VSYW5nZSA9IE5TTWFrZVJhbmdlKDAsIDApOwotICAgICAgICAgICAgICAgIENHRmxvYXQgc2hh
ZG93SGVpZ2h0ID0gW1tzaGFkb3dTdHlsZSBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uo
TlNNYXhSYW5nZShzcGFjZVJhbmdlKSwgc2Vjb25kUmFuZ2UubG9jYXRpb24gLSBOU01heFJhbmdl
KHNwYWNlUmFuZ2UpKV0gZmxvYXRWYWx1ZV07Ci0gICAgICAgICAgICAgICAgLy8gSSBkb24ndCBr
bm93IHdoeSB3ZSBoYXZlIHRoaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcGxhdGZvcm1z
LgotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQuaGVpZ2h0
ID0gc2hhZG93SGVpZ2h0OwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQuaGVp
Z2h0ID0gLXNoYWRvd0hlaWdodDsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNwYWNlUmFuZ2Ug
PSBbc2hhZG93U3R5bGUgcmFuZ2VPZlN0cmluZzpAIiAiIG9wdGlvbnM6TlNCYWNrd2FyZHNTZWFy
Y2ggcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgdGhpcmRSYW5nZS5sb2NhdGlvbildOwotICAgICAgICAg
ICAgICAgIGlmICghc3BhY2VSYW5nZS5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHNwYWNl
UmFuZ2UgPSBOU01ha2VSYW5nZSgwLCAwKTsKLSAgICAgICAgICAgICAgICBzaGFkb3dCbHVyUmFk
aXVzID0gW1tzaGFkb3dTdHlsZSBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoTlNNYXhS
YW5nZShzcGFjZVJhbmdlKSwgdGhpcmRSYW5nZS5sb2NhdGlvbiAtIE5TTWF4UmFuZ2Uoc3BhY2VS
YW5nZSkpXSBmbG9hdFZhbHVlXTsKLSAgICAgICAgICAgICAgICBzaGFkb3cgPSBbW1tQbGF0Zm9y
bU5TU2hhZG93IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgW3No
YWRvdyBzZXRTaGFkb3dDb2xvcjpzaGFkb3dDb2xvcl07Ci0gICAgICAgICAgICAgICAgW3NoYWRv
dyBzZXRTaGFkb3dPZmZzZXQ6c2hhZG93T2Zmc2V0XTsKLSAgICAgICAgICAgICAgICBbc2hhZG93
IHNldFNoYWRvd0JsdXJSYWRpdXM6c2hhZG93Qmx1clJhZGl1c107Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNoYWRvdzsKLX0KLQotYm9vbCBIVE1MQ29udmVy
dGVyQ2FjaGVzOjppc0Jsb2NrRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIFN0cmlu
ZyBkaXNwbGF5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0
eURpc3BsYXkpOwotICAgIGlmIChkaXNwbGF5VmFsdWUgPT0gImJsb2NrIiB8fCBkaXNwbGF5VmFs
dWUgPT0gImxpc3QtaXRlbSIgfHwgZGlzcGxheVZhbHVlLnN0YXJ0c1dpdGgoInRhYmxlIikpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIFN0cmluZyBmbG9hdFZhbHVlID0gcHJvcGVydHlWYWx1
ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlGbG9hdCk7Ci0gICAgaWYgKGZsb2F0VmFsdWUg
PT0gImxlZnQiIHx8IGZsb2F0VmFsdWUgPT0gInJpZ2h0IikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmVsZW1l
bnRIYXNPd25CYWNrZ3JvdW5kQ29sb3IoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBpZiAoIWlz
QmxvY2tFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gSW4g
dGhlIHRleHQgc3lzdGVtLCB0ZXh0IGJsb2NrcyAodGFibGUgZWxlbWVudHMpIGFuZCBkb2N1bWVu
dHMgKGJvZHkgZWxlbWVudHMpCi0gICAgLy8gaGF2ZSB0aGVpciBvd24gYmFja2dyb3VuZCBjb2xv
cnMsIHdoaWNoIHNob3VsZCBub3QgYmUgaW5oZXJpdGVkLgotICAgIHJldHVybiBlbGVtZW50Lmhh
c1RhZ05hbWUoaHRtbFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8IHByb3Bl
cnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5RGlzcGxheSkuc3RhcnRzV2l0aCgi
dGFibGUiKTsKLX0KLQotRWxlbWVudCogSFRNTENvbnZlcnRlcjo6X2Jsb2NrTGV2ZWxFbGVtZW50
Rm9yTm9kZShOb2RlKiBub2RlKQotewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBub2RlLT5wYXJl
bnRFbGVtZW50KCk7Ci0gICAgaWYgKGVsZW1lbnQgJiYgIV9jYWNoZXMtPmlzQmxvY2tFbGVtZW50
KCplbGVtZW50KSkKLSAgICAgICAgZWxlbWVudCA9IF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUo
ZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotc3RhdGlj
IENvbG9yIG5vcm1hbGl6ZWRDb2xvcihDb2xvciBjb2xvciwgYm9vbCBpZ25vcmVCbGFjaykKLXsK
LSAgICBjb25zdCBkb3VibGUgQ29sb3JFcHNpbG9uID0gMSAvICgyICogKGRvdWJsZSkyNTUuMCk7
Ci0gICAgCi0gICAgZG91YmxlIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgIGNvbG9yLmdl
dFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGlmIChyZWQgPCBDb2xvckVwc2ls
b24gJiYgZ3JlZW4gPCBDb2xvckVwc2lsb24gJiYgYmx1ZSA8IENvbG9yRXBzaWxvbiAmJiAoaWdu
b3JlQmxhY2sgfHwgYWxwaGEgPCBDb2xvckVwc2lsb24pKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICByZXR1cm4gY29sb3I7Ci19Ci0KLUNvbG9yIEhUTUxDb252ZXJ0ZXJDYWNo
ZXM6OmNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlkKQotewotICAgIGlmICghbm9kZS5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAg
aWYgKE5vZGUqIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJu
IGNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUoKnBhcmVudCwgcHJvcGVydHlJZCk7Ci0gICAgICAg
IHJldHVybiBDb2xvcigpOwotICAgIH0KLQotICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1l
bnQobm9kZSk7Ci0gICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxl
UHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5p
c1JHQkNvbG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKHRv
Q1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5nZXRSR0JBMzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9
PSBDU1NQcm9wZXJ0eUNvbG9yKTsKLSAgICB9Ci0KLSAgICBib29sIGluaGVyaXQgPSBmYWxzZTsK
LSAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGlubGluZVN0eWxlUHJvcGVydHlGb3JF
bGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5pc1JHQkNvbG9yKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKHRvQ1NTUHJpbWl0aXZl
VmFsdWUoKnZhbHVlKS5nZXRSR0JBMzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0
eUNvbG9yKTsKLSAgICAgICAgaWYgKHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCi0gICAgICAg
ICAgICBpbmhlcml0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
LSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgIGluaGVyaXQgPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAg
ICBpZiAoIWVsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3IoZWxlbWVudCkpIHsKLSAgICAgICAg
ICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50KCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3IoKnBhcmVu
dEVsZW1lbnQpKQotICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaW5oZXJpdCkgewotICAgICAgICBpZiAoTm9kZSogcGFy
ZW50ID0gbm9kZS5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gY29sb3JQcm9wZXJ0
eVZhbHVlRm9yTm9kZSgqcGFyZW50LCBwcm9wZXJ0eUlkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Q29sb3IoKTsKLX0KLQotUGxhdGZvcm1Db2xvciAqSFRNTENvbnZlcnRlcjo6X2NvbG9yRm9yRWxl
bWVudChFbGVtZW50JiBlbGVtZW50LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAg
Q29sb3IgcmVzdWx0ID0gX2NhY2hlcy0+Y29sb3JQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50
LCBwcm9wZXJ0eUlkKTsKLSAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgUGxhdGZvcm1Db2xvciAqcGxhdGZvcm1SZXN1bHQgPSBfcGxhdGZvcm1Db2xv
cihyZXN1bHQpOwotICAgIGlmIChbW1BsYXRmb3JtQ29sb3JDbGFzcyBjbGVhckNvbG9yXSBpc0Vx
dWFsOnBsYXRmb3JtUmVzdWx0XSB8fCAoW3BsYXRmb3JtUmVzdWx0IGFscGhhQ29tcG9uZW50XSA9
PSAwLjApKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBwbGF0Zm9ybVJlc3VsdDsK
LX0KLQotI2lmICFQTEFURk9STShJT1MpCi1zdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVt
ZW50JiBlbGVtZW50KQotewotICAgIGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpOwotfQotI2Vs
c2UKLXN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAg
YXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXIt
PnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmdldENURm9udCgpOwotfQotI2VuZGlmCi0K
LSNkZWZpbmUgVUlGbG9hdElzWmVybyhudW1iZXIpIChmYWJzKG51bWJlciAtIDApIDwgRkxUX0VQ
U0lMT04pCi0KLU5TRGljdGlvbmFyeSAqSFRNTENvbnZlcnRlcjo6Y29tcHV0ZWRBdHRyaWJ1dGVz
Rm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkg
KmF0dHJzID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07Ci0jaWYgIVBMQVRGT1JN
KElPUykKLSAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNo
YXJlZEZvbnRNYW5hZ2VyXTsKLSNlbmRpZgotCi0gICAgUGxhdGZvcm1Gb250ICpmb250ID0gbmls
OwotICAgIFBsYXRmb3JtRm9udCAqYWN0dWFsRm9udCA9IF9mb250KGVsZW1lbnQpOwotICAgIFBs
YXRmb3JtQ29sb3IgKmZvcmVncm91bmRDb2xvciA9IF9jb2xvckZvckVsZW1lbnQoZWxlbWVudCwg
Q1NTUHJvcGVydHlDb2xvcik7Ci0gICAgUGxhdGZvcm1Db2xvciAqYmFja2dyb3VuZENvbG9yID0g
X2NvbG9yRm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0g
ICAgUGxhdGZvcm1Db2xvciAqc3Ryb2tlQ29sb3IgPSBfY29sb3JGb3JFbGVtZW50KGVsZW1lbnQs
IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKTsKLQotICAgIGZsb2F0IGZvbnRTaXpl
ID0gMDsKLSAgICBpZiAoIV9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVu
dCwgQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udFNpemUpIHx8IGZvbnRTaXplIDw9IDAuMCkKLSAg
ICAgICAgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7Ci0gICAgaWYgKGZvbnRTaXplIDwgbWlu
aW11bUZvbnRTaXplKQotICAgICAgICBmb250U2l6ZSA9IG1pbmltdW1Gb250U2l6ZTsKLSAgICBp
ZiAoZmFicyhmbG9vcigyLjAgKiBmb250U2l6ZSArIDAuNSkgLyAyLjAgLSBmb250U2l6ZSkgPCAw
LjA1KQotICAgICAgICBmb250U2l6ZSA9IGZsb29yKDIuMCAqIGZvbnRTaXplICsgMC41KSAvIDI7
Ci0gICAgZWxzZSBpZiAoZmFicyhmbG9vcigxMC4wICogZm9udFNpemUgKyAwLjUpIC8gMTAuMCAt
IGZvbnRTaXplKSA8IDAuMDA1KQotICAgICAgICBmb250U2l6ZSA9IGZsb29yKDEwLjAgKiBmb250
U2l6ZSArIDAuNSkgLyAxMDsKLQotICAgIGlmIChmb250U2l6ZSA8PSAwLjApCi0gICAgICAgIGZv
bnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotICAgIAotI2lmIFBMQVRGT1JNKElPUykKLSAgICBp
ZiAoYWN0dWFsRm9udCkKLSAgICAgICAgZm9udCA9IFthY3R1YWxGb250IGZvbnRXaXRoU2l6ZTpm
b250U2l6ZV07Ci0jZWxzZQotICAgIGlmIChhY3R1YWxGb250KQotICAgICAgICBmb250ID0gW2Zv
bnRNYW5hZ2VyIGNvbnZlcnRGb250OmFjdHVhbEZvbnQgdG9TaXplOmZvbnRTaXplXTsKLSNlbmRp
ZgotICAgIGlmICghZm9udCkgewotICAgICAgICBTdHJpbmcgZm9udE5hbWUgPSBfY2FjaGVzLT5w
cm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwotICAg
ICAgICBpZiAoZm9udE5hbWUubGVuZ3RoKCkpCi0gICAgICAgICAgICBmb250ID0gX2ZvbnRGb3JO
YW1lQW5kU2l6ZShmb250TmFtZS51cHBlcigpLCBmb250U2l6ZSwgX2ZvbnRDYWNoZSk7Ci0gICAg
ICAgIGlmICghZm9udCkKLSAgICAgICAgICAgIGZvbnQgPSBbUGxhdGZvcm1Gb250Q2xhc3MgZm9u
dFdpdGhOYW1lOkAiVGltZXMiIHNpemU6Zm9udFNpemVdOwotCi0gICAgICAgIFN0cmluZyBmb250
U3R5bGUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0
eUZvbnRTdHlsZSk7Ci0gICAgICAgIGlmIChmb250U3R5bGUgPT0gIml0YWxpYyIgfHwgZm9udFN0
eWxlID09ICJvYmxpcXVlIikgewotICAgICAgICAgICAgUGxhdGZvcm1Gb250ICpvcmlnaW5hbEZv
bnQgPSBmb250OwotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgICAgIGZvbnQgPSBbUGxhdGZv
cm1Gb250Q2xhc3MgZm9udFdpdGhGYW1pbHlOYW1lOltmb250IGZhbWlseU5hbWVdIHRyYWl0czpV
SUZvbnRUcmFpdEl0YWxpYyBzaXplOltmb250IHBvaW50U2l6ZV1dOwotI2Vsc2UKLSAgICAgICAg
ICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b0hhdmVUcmFpdDpOU0l0
YWxpY0ZvbnRNYXNrXTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKCFmb250KQotICAgICAgICAg
ICAgICAgIGZvbnQgPSBvcmlnaW5hbEZvbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcg
Zm9udFdlaWdodCA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1By
b3BlcnR5Rm9udFN0eWxlKTsKLSAgICAgICAgaWYgKGZvbnRXZWlnaHQuc3RhcnRzV2l0aCgiYm9s
ZCIpIHx8IGZvbnRXZWlnaHQudG9JbnQoKSA+PSA3MDApIHsKLSAgICAgICAgICAgIC8vID8/PyBo
YW5kbGUgd2VpZ2h0IHByb3Blcmx5IHVzaW5nIE5TRm9udE1hbmFnZXIKLSAgICAgICAgICAgIFBs
YXRmb3JtRm9udCAqb3JpZ2luYWxGb250ID0gZm9udDsKLSNpZiBQTEFURk9STShJT1MpCi0gICAg
ICAgICAgICBmb250ID0gW1BsYXRmb3JtRm9udENsYXNzIGZvbnRXaXRoRmFtaWx5TmFtZTpbZm9u
dCBmYW1pbHlOYW1lXSB0cmFpdHM6VUlGb250VHJhaXRCb2xkIHNpemU6W2ZvbnQgcG9pbnRTaXpl
XV07Ci0jZWxzZQotICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpm
b250IHRvSGF2ZVRyYWl0Ok5TQm9sZEZvbnRNYXNrXTsKLSNlbmRpZgotICAgICAgICAgICAgaWYg
KCFmb250KQotICAgICAgICAgICAgICAgIGZvbnQgPSBvcmlnaW5hbEZvbnQ7Ci0gICAgICAgIH0K
LSNpZiAhUExBVEZPUk0oSU9TKSAvLyBJSkI6IE5vIHNtYWxsIGNhcHMgc3VwcG9ydCBvbiBpT1MK
LSAgICAgICAgaWYgKF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1By
b3BlcnR5Rm9udFZhcmlhbnQpID09ICJzbWFsbC1jYXBzIikgewotICAgICAgICAgICAgLy8gPz8/
IHN5bnRoZXNpemUgc21hbGwtY2FwcyBpZiBbZm9udCBpc0VxdWFsOm9yaWdpbmFsRm9udF0KLSAg
ICAgICAgICAgIE5TRm9udCAqb3JpZ2luYWxGb250ID0gZm9udDsKLSAgICAgICAgICAgIGZvbnQg
PSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b0hhdmVUcmFpdDpOU1NtYWxsQ2Fwc0Zv
bnRNYXNrXTsKLSAgICAgICAgICAgIGlmICghZm9udCkKLSAgICAgICAgICAgICAgICBmb250ID0g
b3JpZ2luYWxGb250OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgaWYgKGZvbnQpCi0g
ICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07
Ci0gICAgaWYgKGZvcmVncm91bmRDb2xvcikKLSAgICAgICAgW2F0dHJzIHNldE9iamVjdDpmb3Jl
Z3JvdW5kQ29sb3IgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAg
aWYgKGJhY2tncm91bmRDb2xvciAmJiAhX2NhY2hlcy0+ZWxlbWVudEhhc093bkJhY2tncm91bmRD
b2xvcihlbGVtZW50KSkKLSAgICAgICAgW2F0dHJzIHNldE9iamVjdDpiYWNrZ3JvdW5kQ29sb3Ig
Zm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0KLSAgICBmbG9hdCBzdHJv
a2VXaWR0aCA9IDAuMDsKLSAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9k
ZShlbGVtZW50LCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgp
KSB7Ci0gICAgICAgIGZsb2F0IHRleHRTdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoIC8gKFtmb250
IHBvaW50U2l6ZV0gKiAwLjAxKTsKLSAgICAgICAgW2F0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZTp0ZXh0U3Ryb2tlV2lkdGhdIGZvcktleTpOU1N0cm9rZVdpZHRoQXR0
cmlidXRlTmFtZV07Ci0gICAgfQotICAgIGlmIChzdHJva2VDb2xvcikKLSAgICAgICAgW2F0dHJz
IHNldE9iamVjdDpzdHJva2VDb2xvciBmb3JLZXk6TlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWVd
OwotCi0gICAgU3RyaW5nIGZvbnRLZXJuaW5nID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5v
ZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZyk7Ci0gICAgU3RyaW5nIGxl
dHRlclNwYWNpbmcgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQ
cm9wZXJ0eUxldHRlclNwYWNpbmcpOwotICAgIGlmIChmb250S2VybmluZy5sZW5ndGgoKSB8fCBs
ZXR0ZXJTcGFjaW5nLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChmb250S2VybmluZyA9PSAibm9u
ZSIpCi0gICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OkAwLjAgZm9yS2V5Ok5TS2VybkF0dHJp
YnV0ZU5hbWVdOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRvdWJsZSBrZXJuVmFsID0g
bGV0dGVyU3BhY2luZy5sZW5ndGgoKSA/IGxldHRlclNwYWNpbmcudG9Eb3VibGUoKSA6IDAuMDsK
LSAgICAgICAgICAgIGlmIChVSUZsb2F0SXNaZXJvKGtlcm5WYWwpKQotICAgICAgICAgICAgICAg
IFthdHRycyBzZXRPYmplY3Q6QDAuMCBmb3JLZXk6TlNLZXJuQXR0cmlidXRlTmFtZV07IC8vIGF1
dG8gYW5kIG5vcm1hbCwgdGhlIG90aGVyIHBvc3NpYmxlIHZhbHVlcywgYXJlIGJvdGggImtlcm5p
bmcgZW5hYmxlZCIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBbYXR0cnMgc2V0
T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmtlcm5WYWxdIGZvcktleTpOU0tlcm5B
dHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyBmb250TGlnYXR1
cmVzID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlX
ZWJraXRGb250VmFyaWFudExpZ2F0dXJlcyk7Ci0gICAgaWYgKGZvbnRMaWdhdHVyZXMubGVuZ3Ro
KCkpIHsKLSAgICAgICAgaWYgKGZvbnRMaWdhdHVyZXMuY29udGFpbnMoIm5vcm1hbCIpKQotICAg
ICAgICAgICAgOyAgIC8vIGRlZmF1bHQ6IHdoYXRldmVyIHRoZSBzeXN0ZW0gZGVjaWRlcyB0byBk
bwotICAgICAgICBlbHNlIGlmIChmb250TGlnYXR1cmVzLmNvbnRhaW5zKCJjb21tb24tbGlnYXR1
cmVzIikpCi0gICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OkAxIGZvcktleTpOU0xpZ2F0dXJl
QXR0cmlidXRlTmFtZV07ICAgLy8gZXhwbGljaXRseSBlbmFibGVkCi0gICAgICAgIGVsc2UgaWYg
KGZvbnRMaWdhdHVyZXMuY29udGFpbnMoIm5vLWNvbW1vbi1saWdhdHVyZXMiKSkKLSAgICAgICAg
ICAgIFthdHRycyBzZXRPYmplY3Q6QDAgZm9yS2V5Ok5TTGlnYXR1cmVBdHRyaWJ1dGVOYW1lXTsg
IC8vIGV4cGxpY2l0bHkgZGlzYWJsZWQKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGV4dERlY29yYXRp
b24gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uKTsKLSAgICBpZiAodGV4dERlY29yYXRpb24ubGVuZ3RoKCkpIHsKLSAgICAg
ICAgaWYgKHRleHREZWNvcmF0aW9uLmNvbnRhaW5zKCJ1bmRlcmxpbmUiKSkKLSAgICAgICAgICAg
IFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5l
U3R5bGVTaW5nbGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07Ci0gICAg
ICAgIGlmICh0ZXh0RGVjb3JhdGlvbi5jb250YWlucygibGluZS10aHJvdWdoIikpCi0gICAgICAg
ICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVy
bGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1l
XTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmVydGljYWxBbGlnbiA9IF9jYWNoZXMtPnByb3BlcnR5
VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7Ci0gICAgaWYg
KHZlcnRpY2FsQWxpZ24ubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKHZlcnRpY2FsQWxpZ24gPT0g
InN1cGVyIikKLSAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldp
dGhJbnRlZ2VyOjFdIGZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV07Ci0gICAgICAg
IGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT0gInN1YiIpCi0gICAgICAgICAgICBbYXR0cnMgc2V0
T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjotMV0gZm9yS2V5Ok5TU3VwZXJzY3Jp
cHRBdHRyaWJ1dGVOYW1lXTsKLSAgICB9Ci0KLSAgICBmbG9hdCBiYXNlbGluZU9mZnNldCA9IDAu
MDsKLSAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBD
U1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24sIGJhc2VsaW5lT2Zmc2V0KSkKLSAgICAgICAgW2F0dHJz
IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpiYXNlbGluZU9mZnNldF0gZm9y
S2V5Ok5TQmFzZWxpbmVPZmZzZXRBdHRyaWJ1dGVOYW1lXTsKLQotICAgIFN0cmluZyB0ZXh0U2hh
ZG93ID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlU
ZXh0U2hhZG93KTsKLSAgICBpZiAodGV4dFNoYWRvdy5sZW5ndGgoKSA+IDQpIHsKLSAgICAgICAg
TlNTaGFkb3cgKnNoYWRvdyA9IF9zaGFkb3dGb3JTaGFkb3dTdHlsZSh0ZXh0U2hhZG93KTsKLSAg
ICAgICAgaWYgKHNoYWRvdykKLSAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c2hhZG93IGZv
cktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOwotICAgIH0KLQotICAgIEVsZW1lbnQqIGJsb2Nr
RWxlbWVudCA9IF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoJmVsZW1lbnQpOwotICAgIGlmICgm
ZWxlbWVudCAhPSBibG9ja0VsZW1lbnQgJiYgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgY291bnRd
ID4gMCkKLSAgICAgICAgW2F0dHJzIHNldE9iamVjdDpbTlNBcnJheSBhcnJheVdpdGhBcnJheTpf
d3JpdGluZ0RpcmVjdGlvbkFycmF5XSBmb3JLZXk6TlNXcml0aW5nRGlyZWN0aW9uQXR0cmlidXRl
TmFtZV07Ci0KLSAgICBpZiAoYmxvY2tFbGVtZW50KSB7Ci0gICAgICAgIEVsZW1lbnQmIGNvcmVC
bG9ja0VsZW1lbnQgPSAqYmxvY2tFbGVtZW50OwotICAgICAgICBOU011dGFibGVQYXJhZ3JhcGhT
dHlsZSAqcGFyYWdyYXBoU3R5bGUgPSBbZGVmYXVsdFBhcmFncmFwaFN0eWxlKCkgbXV0YWJsZUNv
cHldOwotICAgICAgICB1bnNpZ25lZCBoZWFkaW5nID0gMDsKLSAgICAgICAgaWYgKGNvcmVCbG9j
a0VsZW1lbnQuaGFzVGFnTmFtZShoMVRhZykpCi0gICAgICAgICAgICBoZWFkaW5nID0gMTsKLSAg
ICAgICAgZWxzZSBpZiAoY29yZUJsb2NrRWxlbWVudC5oYXNUYWdOYW1lKGgyVGFnKSkKLSAgICAg
ICAgICAgIGhlYWRpbmcgPSAyOwotICAgICAgICBlbHNlIGlmIChjb3JlQmxvY2tFbGVtZW50Lmhh
c1RhZ05hbWUoaDNUYWcpKQotICAgICAgICAgICAgaGVhZGluZyA9IDM7Ci0gICAgICAgIGVsc2Ug
aWYgKGNvcmVCbG9ja0VsZW1lbnQuaGFzVGFnTmFtZShoNFRhZykpCi0gICAgICAgICAgICBoZWFk
aW5nID0gNDsKLSAgICAgICAgZWxzZSBpZiAoY29yZUJsb2NrRWxlbWVudC5oYXNUYWdOYW1lKGg1
VGFnKSkKLSAgICAgICAgICAgIGhlYWRpbmcgPSA1OwotICAgICAgICBlbHNlIGlmIChjb3JlQmxv
Y2tFbGVtZW50Lmhhc1RhZ05hbWUoaDZUYWcpKQotICAgICAgICAgICAgaGVhZGluZyA9IDY7Ci0g
ICAgICAgIGJvb2wgaXNQYXJhZ3JhcGggPSBjb3JlQmxvY2tFbGVtZW50Lmhhc1RhZ05hbWUocFRh
ZykgfHwgY29yZUJsb2NrRWxlbWVudC5oYXNUYWdOYW1lKGxpVGFnKSB8fCBoZWFkaW5nOwotCi0g
ICAgICAgIFN0cmluZyB0ZXh0QWxpZ24gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShj
b3JlQmxvY2tFbGVtZW50LCBDU1NQcm9wZXJ0eVRleHRBbGlnbik7Ci0gICAgICAgIGlmICh0ZXh0
QWxpZ24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIC8vIFdlYktpdCBjYW4gcmV0dXJuIC1raHRt
bC1sZWZ0LCAta2h0bWwtcmlnaHQsIC1raHRtbC1jZW50ZXIKLSAgICAgICAgICAgIGlmICh0ZXh0
QWxpZ24uZW5kc1dpdGgoImxlZnQiKSkKLSAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUg
c2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudExlZnRdOwotICAgICAgICAgICAgZWxzZSBpZiAo
dGV4dEFsaWduLmVuZHNXaXRoKCJyaWdodCIpKQotICAgICAgICAgICAgICAgIFtwYXJhZ3JhcGhT
dHlsZSBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50UmlnaHRdOwotICAgICAgICAgICAgZWxz
ZSBpZiAodGV4dEFsaWduLmVuZHNXaXRoKCJjZW50ZXIiKSkKLSAgICAgICAgICAgICAgICBbcGFy
YWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudENlbnRlcl07Ci0gICAgICAg
ICAgICBlbHNlIGlmICh0ZXh0QWxpZ24uZW5kc1dpdGgoImp1c3RpZnkiKSkKLSAgICAgICAgICAg
ICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudEp1c3RpZmll
ZF07Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgZGlyZWN0aW9uID0gX2NhY2hlcy0+cHJv
cGVydHlWYWx1ZUZvck5vZGUoY29yZUJsb2NrRWxlbWVudCwgQ1NTUHJvcGVydHlEaXJlY3Rpb24p
OwotICAgICAgICBpZiAoZGlyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGly
ZWN0aW9uID09ICJsdHIiKQotICAgICAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRCYXNl
V3JpdGluZ0RpcmVjdGlvbjpOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodF07Ci0gICAgICAg
ICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gInJ0bCIpCi0gICAgICAgICAgICAgICAgW3BhcmFn
cmFwaFN0eWxlIHNldEJhc2VXcml0aW5nRGlyZWN0aW9uOk5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0
VG9MZWZ0XTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBoeXBoZW5hdGlvbiA9IF9jYWNo
ZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVCbG9ja0VsZW1lbnQsIENTU1Byb3BlcnR5V2Vi
a2l0SHlwaGVucyk7Ci0gICAgICAgIGlmIChoeXBoZW5hdGlvbi5sZW5ndGgoKSkgewotICAgICAg
ICAgICAgaWYgKGh5cGhlbmF0aW9uID09ICJhdXRvIikKLSAgICAgICAgICAgICAgICBbcGFyYWdy
YXBoU3R5bGUgc2V0SHlwaGVuYXRpb25GYWN0b3I6MS4wXTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0SHlwaGVuYXRpb25GYWN0b3I6MC4wXTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoaGVhZGluZykKLSAgICAgICAgICAgIFtwYXJhZ3JhcGhT
dHlsZSBzZXRIZWFkZXJMZXZlbDpoZWFkaW5nXTsKLSAgICAgICAgaWYgKGlzUGFyYWdyYXBoKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2h5IGFyZSB3ZSBpZ25vcmluZyBtYXJnaW4tdG9wPwot
ICAgICAgICAgICAgZmxvYXQgbWFyZ2luTGVmdCA9IDAuMDsKLSAgICAgICAgICAgIGlmIChfY2Fj
aGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVCbG9ja0VsZW1lbnQsIENTU1Byb3Bl
cnR5TWFyZ2luTGVmdCwgbWFyZ2luTGVmdCkgJiYgbWFyZ2luTGVmdCA+IDAuMCkKLSAgICAgICAg
ICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0SGVhZEluZGVudDptYXJnaW5MZWZ0XTsKLSAgICAg
ICAgICAgIGZsb2F0IHRleHRJbmRlbnQgPSAwLjA7Ci0gICAgICAgICAgICBpZiAoX2NhY2hlcy0+
ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShjb3JlQmxvY2tFbGVtZW50LCBDU1NQcm9wZXJ0eVRl
eHRJbmRlbnQsIHRleHRJbmRlbnQpICYmIHRleHRJbmRlbnQgPiAwLjApCi0gICAgICAgICAgICAg
ICAgW3BhcmFncmFwaFN0eWxlIHNldEZpcnN0TGluZUhlYWRJbmRlbnQ6W3BhcmFncmFwaFN0eWxl
IGhlYWRJbmRlbnRdICsgdGV4dEluZGVudF07Ci0gICAgICAgICAgICBmbG9hdCBtYXJnaW5SaWdo
dCA9IDAuMDsKLSAgICAgICAgICAgIGlmIChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JO
b2RlKGNvcmVCbG9ja0VsZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIG1hcmdpblJpZ2h0
KSAmJiBtYXJnaW5SaWdodCA+IDAuMCkKLSAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUg
c2V0VGFpbEluZGVudDotbWFyZ2luUmlnaHRdOwotICAgICAgICAgICAgZmxvYXQgbWFyZ2luQm90
dG9tID0gMC4wOwotICAgICAgICAgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZv
ck5vZGUoY29yZUJsb2NrRWxlbWVudCwgQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgbWFyZ2luQm90
dG9tKSAmJiBtYXJnaW5Cb3R0b20gPiAwLjApCi0gICAgICAgICAgICAgICAgW3BhcmFncmFwaFN0
eWxlIHNldFBhcmFncmFwaFNwYWNpbmc6bWFyZ2luQm90dG9tXTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoW190ZXh0TGlzdHMgY291bnRdID4gMCkKLSAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHls
ZSBzZXRUZXh0TGlzdHM6X3RleHRMaXN0c107Ci0gICAgICAgIGlmIChbX3RleHRCbG9ja3MgY291
bnRdID4gMCkKLSAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRUZXh0QmxvY2tzOl90ZXh0
QmxvY2tzXTsKLSAgICAgICAgW2F0dHJzIHNldE9iamVjdDpwYXJhZ3JhcGhTdHlsZSBmb3JLZXk6
TlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBbcGFyYWdyYXBoU3R5bGUg
cmVsZWFzZV07Ci0gICAgfQotICAgIHJldHVybiBhdHRyczsKLX0KLQotCi1OU0RpY3Rpb25hcnkq
IEhUTUxDb252ZXJ0ZXI6OmF0dHJpYnV0ZXNGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17
Ci0gICAgYXV0byYgYXR0cmlidXRlcyA9IG1fYXR0cmlidXRlc0ZvckVsZW1lbnRzLmFkZCgmZWxl
bWVudCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICghYXR0cmlidXRlcykKLSAg
ICAgICAgYXR0cmlidXRlcyA9IGNvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7
Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KCk7Ci19Ci0KLU5TRGljdGlvbmFyeSogSFRNTENv
bnZlcnRlcjo6YWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMoQ2hhcmFjdGVyRGF0YSYg
bm9kZSkKLXsKLSAgICBOb2RlKiBhbmNlc3RvciA9IG5vZGUucGFyZW50Tm9kZSgpOwotICAgIHdo
aWxlIChhbmNlc3RvciAmJiAhYW5jZXN0b3ItPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgYW5j
ZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghYW5jZXN0b3IpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBhZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVs
ZW1lbnRBbmRJdHNBbmNlc3RvcnMoKnRvRWxlbWVudChhbmNlc3RvcikpOwotfQotCi1OU0RpY3Rp
b25hcnkqIEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudEFuZEl0
c0FuY2VzdG9ycyhFbGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8mIGNhY2hlZEF0dHJpYnV0
ZXMgPSBtX2FnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudHMuYWRkKCZlbGVtZW50LCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKGNhY2hlZEF0dHJpYnV0ZXMpCi0gICAgICAg
IHJldHVybiBjYWNoZWRBdHRyaWJ1dGVzLmdldCgpOwotCi0gICAgTlNEaWN0aW9uYXJ5KiBhdHRy
aWJ1dGVzRm9yQ3VycmVudEVsZW1lbnQgPSBhdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50KTsK
LSAgICBBU1NFUlQoYXR0cmlidXRlc0ZvckN1cnJlbnRFbGVtZW50KTsKLQotICAgIE5vZGUqIGFu
Y2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKGFuY2VzdG9yICYmICFh
bmNlc3Rvci0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5w
YXJlbnROb2RlKCk7Ci0KLSAgICBpZiAoIWFuY2VzdG9yKSB7Ci0gICAgICAgIGNhY2hlZEF0dHJp
YnV0ZXMgPSBhdHRyaWJ1dGVzRm9yQ3VycmVudEVsZW1lbnQ7Ci0gICAgICAgIHJldHVybiBhdHRy
aWJ1dGVzRm9yQ3VycmVudEVsZW1lbnQ7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMgPSBhZG9wdE5TKFthZ2dyZWdhdGVk
QXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoKnRvRWxlbWVudChhbmNlc3Rvcikp
IG11dGFibGVDb3B5XSk7Ci0gICAgW2F0dHJpYnV0ZXNGb3JBbmNlc3RvcnMgYWRkRW50cmllc0Zy
b21EaWN0aW9uYXJ5OmF0dHJpYnV0ZXNGb3JDdXJyZW50RWxlbWVudF07Ci0gICAgbV9hZ2dyZWdh
dGVkQXR0cmlidXRlc0ZvckVsZW1lbnRzLnNldCgmZWxlbWVudCwgYXR0cmlidXRlc0ZvckFuY2Vz
dG9ycyk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRlc0ZvckFuY2VzdG9ycy5nZXQoKTsKLX0KLQot
dm9pZCBIVE1MQ29udmVydGVyOjpfbmV3UGFyYWdyYXBoRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50LCBOU1N0cmluZyAqdGFnLCBCT09MIGZsYWcsIEJPT0wgc3VwcHJlc3NUcmFpbGluZ1NwYWNl
KQotewotICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAg
IHVuaWNoYXIgbGFzdENoYXIgPSAodGV4dExlbmd0aCA+IDApID8gW1tfYXR0clN0ciBzdHJpbmdd
IGNoYXJhY3RlckF0SW5kZXg6dGV4dExlbmd0aCAtIDFdIDogJ1xuJzsKLSAgICBOU1JhbmdlIHJh
bmdlVG9SZXBsYWNlID0gKHN1cHByZXNzVHJhaWxpbmdTcGFjZSAmJiBfZmxhZ3MuaXNTb2Z0ICYm
IChsYXN0Q2hhciA9PSAnICcgfHwgbGFzdENoYXIgPT0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFjdGVy
KSkgPyBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoIC0gMSwgMSkgOiBOU01ha2VSYW5nZSh0ZXh0TGVu
Z3RoLCAwKTsKLSAgICBCT09MIG5lZWRCcmVhayA9IChmbGFnIHx8IGxhc3RDaGFyICE9ICdcbicp
OwotICAgIGlmIChuZWVkQnJlYWspIHsKLSAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9ICgoW0Ai
Qk9EWSIgaXNFcXVhbFRvU3RyaW5nOnRhZ10gfHwgW0AiSFRNTCIgaXNFcXVhbFRvU3RyaW5nOnRh
Z10pID8gQCIiIDogQCJcbiIpOwotICAgICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZW1v
dmVBbGxPYmplY3RzXTsKLSAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5n
ZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOnN0cmluZ107Ci0gICAgICAgIGlmIChyYW5nZVRv
UmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpCi0gICAgICAgICAgICBfZG9t
UmFuZ2VTdGFydEluZGV4ICs9IFtzdHJpbmcgbGVuZ3RoXSAtIHJhbmdlVG9SZXBsYWNlLmxlbmd0
aDsKLSAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOwotICAg
ICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gYXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7
Ci0gICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQotICAgICAgICAgICAgW19h
dHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwotICAgICAg
ICBfZmxhZ3MuaXNTb2Z0ID0gWUVTOwotICAgIH0KLX0KLQotdm9pZCBIVE1MQ29udmVydGVyOjpf
bmV3TGluZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICB1bmljaGFyIGMgPSBO
U0xpbmVTZXBhcmF0b3JDaGFyYWN0ZXI7Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzdHJpbmcg
PSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyczomYyBsZW5ndGg6
MV0pOwotICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAg
IE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKLSAg
ICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhT
dHJpbmc6c3RyaW5nLmdldCgpXTsKLSAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBbc3RyaW5n
IGxlbmd0aF07Ci0gICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3Rh
cnRJbmRleCkKLSAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5s
ZW5ndGg7Ci0gICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IGF0dHJpYnV0ZXNGb3JFbGVtZW50KGVs
ZW1lbnQpOwotICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQotICAgICAgICBbX2F0
dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07Ci0gICAgX2Zs
YWdzLmlzU29mdCA9IFlFUzsKLX0KLQotdm9pZCBIVE1MQ29udmVydGVyOjpfbmV3VGFiRm9yRWxl
bWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIE5TU3RyaW5nICpzdHJpbmcgPSBAIlx0IjsK
LSAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKLSAgICB1bmlj
aGFyIGxhc3RDaGFyID0gKHRleHRMZW5ndGggPiAwKSA/IFtbX2F0dHJTdHIgc3RyaW5nXSBjaGFy
YWN0ZXJBdEluZGV4OnRleHRMZW5ndGggLSAxXSA6ICdcbic7Ci0gICAgTlNSYW5nZSByYW5nZVRv
UmVwbGFjZSA9IChfZmxhZ3MuaXNTb2Z0ICYmIGxhc3RDaGFyID09ICcgJykgPyBOU01ha2VSYW5n
ZSh0ZXh0TGVuZ3RoIC0gMSwgMSkgOiBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKLSAgICBb
X2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJp
bmc6c3RyaW5nXTsKLSAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07
Ci0gICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJbmRleCkK
LSAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7Ci0g
ICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IGF0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQpOwot
ICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQotICAgICAgICBbX2F0dHJTdHIgc2V0
QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07Ci0gICAgX2ZsYWdzLmlzU29m
dCA9IFlFUzsKLX0KLQotc3RhdGljIENsYXNzIF9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcygpCi17
Ci0gICAgc3RhdGljIENsYXNzIF9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyA9IE5pbDsKLSAgICBz
dGF0aWMgQk9PTCBsb29rZWRVcENsYXNzID0gTk87Ci0gICAgaWYgKCFsb29rZWRVcENsYXNzKSB7
Ci0gICAgICAgIC8vIElmIHRoZSBjbGFzcyBpcyBub3QgdGhlcmUsIHdlIGRvbid0IHdhbnQgdG8g
dHJ5IGFnYWluCi0gICAgICAgIF9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyA9IG9iamNfbG9va1Vw
Q2xhc3MoIk1GV2ViTWVzc2FnZURvY3VtZW50Iik7Ci0gICAgICAgIGlmIChfV2ViTWVzc2FnZURv
Y3VtZW50Q2xhc3MgJiYgIVtfV2ViTWVzc2FnZURvY3VtZW50Q2xhc3MgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihkb2N1bWVudDphdHRhY2htZW50OmZvclVSTDopXSkKLSAgICAgICAgICAg
IF9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyA9IE5pbDsKLSAgICAgICAgbG9va2VkVXBDbGFzcyA9
IFlFUzsKLSAgICB9Ci0gICAgcmV0dXJuIF9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzczsKLX0KLQot
Qk9PTCBIVE1MQ29udmVydGVyOjpfYWRkQXR0YWNobWVudEZvckVsZW1lbnQoRWxlbWVudCYgZWxl
bWVudCwgTlNVUkwgKnVybCwgQk9PTCBuZWVkc1BhcmFncmFwaCwgQk9PTCB1c2VQbGFjZWhvbGRl
cikKLXsKLSAgICBCT09MIHJldHZhbCA9IE5POwotICAgIEJPT0wgbm90Rm91bmQgPSBOTzsKLSAg
ICBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlciA9IG5pbDsKLSAgICBGcmFtZSogZnJhbWUgPSBl
bGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBEb2N1bWVudExvYWRlciAqZGF0YVNvdXJj
ZSA9IGZyYW1lLT5sb2FkZXIoKS5mcmFtZUhhc0xvYWRlZCgpID8gZnJhbWUtPmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCkgOiAwOwotICAgIEJPT0wgaWdub3JlT3JpZW50YXRpb24gPSBZRVM7Ci0K
LSAgICBpZiAoW3VybCBpc0ZpbGVVUkxdKSB7Ci0gICAgICAgIE5TU3RyaW5nICpwYXRoID0gW1t1
cmwgcGF0aF0gc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aF07Ci0gICAgICAgIGlmIChwYXRoKQot
ICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0
aFVSTDp1cmwgb3B0aW9uczowIGVycm9yOk5VTExdIGF1dG9yZWxlYXNlXTsKLSAgICB9Ci0gICAg
aWYgKCFmaWxlV3JhcHBlcikgewotICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNv
dXJjZSA9IGRhdGFTb3VyY2UtPnN1YnJlc291cmNlKHVybCk7Ci0gICAgICAgIGlmICghcmVzb3Vy
Y2UpCi0gICAgICAgICAgICByZXNvdXJjZSA9IGRhdGFTb3VyY2UtPnN1YnJlc291cmNlKHVybCk7
Ci0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSA9IHJlc291cmNlLT5taW1lVHlwZSgp
OwotICAgICAgICBpZiAodXNlUGxhY2Vob2xkZXIgJiYgcmVzb3VyY2UgJiYgbWltZVR5cGUgPT0g
InRleHQvaHRtbCIpCi0gICAgICAgICAgICBub3RGb3VuZCA9IFlFUzsKLSAgICAgICAgaWYgKHJl
c291cmNlICYmICFub3RGb3VuZCkgewotICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBbW1tOU0Zp
bGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6cmVzb3VyY2UtPmRh
dGEoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgICAgIFtm
aWxlV3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpzdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1F
VHlwZSh1cmwsIG1pbWVUeXBlKV07Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgIVBMQVRGT1JNKElP
UykKLSAgICBpZiAoIWZpbGVXcmFwcGVyICYmICFub3RGb3VuZCkgewotICAgICAgICBmaWxlV3Jh
cHBlciA9IGZpbGVXcmFwcGVyRm9yVVJMKGRhdGFTb3VyY2UsIHVybCk7Ci0gICAgICAgIGlmICh1
c2VQbGFjZWhvbGRlciAmJiBmaWxlV3JhcHBlciAmJiBbW1tbZmlsZVdyYXBwZXIgcHJlZmVycmVk
RmlsZW5hbWVdIHBhdGhFeHRlbnNpb25dIGxvd2VyY2FzZVN0cmluZ10gaGFzUHJlZml4OkAiaHRt
Il0pCi0gICAgICAgICAgICBub3RGb3VuZCA9IFlFUzsKLSAgICAgICAgaWYgKG5vdEZvdW5kKQot
ICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBuaWw7Ci0gICAgfQotICAgIGlmICghZmlsZVdyYXBw
ZXIgJiYgIW5vdEZvdW5kKSB7Ci0gICAgICAgIGZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JV
UkwobV9kYXRhU291cmNlLCB1cmwpOwotICAgICAgICBpZiAodXNlUGxhY2Vob2xkZXIgJiYgZmls
ZVdyYXBwZXIgJiYgW1tbW2ZpbGVXcmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXSBwYXRoRXh0ZW5z
aW9uXSBsb3dlcmNhc2VTdHJpbmddIGhhc1ByZWZpeDpAImh0bSJdKQotICAgICAgICAgICAgbm90
Rm91bmQgPSBZRVM7Ci0gICAgICAgIGlmIChub3RGb3VuZCkKLSAgICAgICAgICAgIGZpbGVXcmFw
cGVyID0gbmlsOwotICAgIH0KLSNlbmRpZgotICAgIGlmICghZmlsZVdyYXBwZXIgJiYgIW5vdEZv
dW5kICYmIHVybCkgewotICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBNYWlsIGF0dGFj
aG1lbnRzLCB1bnRpbCBXZWJLaXQgcHJvdmlkZXMgYSBzdGFuZGFyZCB3YXkgdG8gZ2V0IHRoZSBk
YXRhLgotICAgICAgICBDbGFzcyBXZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyA9IF9XZWJNZXNzYWdl
RG9jdW1lbnRDbGFzcygpOwotICAgICAgICBpZiAoV2ViTWVzc2FnZURvY3VtZW50Q2xhc3MpIHsK
LSAgICAgICAgICAgIE5TVGV4dEF0dGFjaG1lbnQgKm1pbWVUZXh0QXR0YWNobWVudCA9IG5pbDsK
LSAgICAgICAgICAgIFtXZWJNZXNzYWdlRG9jdW1lbnRDbGFzcyBkb2N1bWVudDpOVUxMIGF0dGFj
aG1lbnQ6Jm1pbWVUZXh0QXR0YWNobWVudCBmb3JVUkw6dXJsXTsKLSAgICAgICAgICAgIGlmICht
aW1lVGV4dEF0dGFjaG1lbnQgJiYgW21pbWVUZXh0QXR0YWNobWVudCByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKGZpbGVXcmFwcGVyKV0pIHsKLSAgICAgICAgICAgICAgICBmaWxlV3JhcHBl
ciA9IFttaW1lVGV4dEF0dGFjaG1lbnQgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihmaWxlV3Jh
cHBlcildOwotICAgICAgICAgICAgICAgIGlnbm9yZU9yaWVudGF0aW9uID0gTk87Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGZpbGVXcmFwcGVyIHx8IHVzZVBsYWNl
aG9sZGVyKSB7Ci0gICAgICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5n
dGhdOwotICAgICAgICBSZXRhaW5QdHI8TlNUZXh0QXR0YWNobWVudD4gYXR0YWNobWVudCA9IGFk
b3B0TlMoW1tQbGF0Zm9ybU5TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRmlsZVdyYXBw
ZXI6ZmlsZVdyYXBwZXJdKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGZsb2F0IHZlcnRp
Y2FsQWxpZ24gPSAwLjA7Ci0gICAgICAgIF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5v
ZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduLCB2ZXJ0aWNhbEFsaWduKTsKLSAg
ICAgICAgYXR0YWNobWVudC5nZXQoKS5ib3VuZHMgPSBDR1JlY3RNYWtlKDAsICh2ZXJ0aWNhbEFs
aWduIC8gMTAwKSAqIGVsZW1lbnQuY2xpZW50SGVpZ2h0KCksIGVsZW1lbnQuY2xpZW50V2lkdGgo
KSwgZWxlbWVudC5jbGllbnRIZWlnaHQoKSk7Ci0jZW5kaWYKLSAgICAgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRm9ybWF0
OihuZWVkc1BhcmFncmFwaCA/IEAiJUNcbiIgOiBAIiVDIiksIHN0YXRpY19jYXN0PHVuaWNoYXI+
KE5TQXR0YWNobWVudENoYXJhY3RlcildKTsKLSAgICAgICAgTlNSYW5nZSByYW5nZVRvUmVwbGFj
ZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGgsIDApOwotICAgICAgICBOU0RpY3Rpb25hcnkgKmF0
dHJzOwotICAgICAgICBpZiAoZmlsZVdyYXBwZXIpIHsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAg
ICAgICAgICAgaWYgKGlnbm9yZU9yaWVudGF0aW9uKQotICAgICAgICAgICAgICAgIFthdHRhY2ht
ZW50IHNldElnbm9yZXNPcmllbnRhdGlvbjpZRVNdOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAgW2F0dGFjaG1lbnQgcmVsZWFzZV07Ci0g
ICAgICAgICAgICBOU1VSTCAqbWlzc2luZ0ltYWdlVVJMID0gW193ZWJLaXRCdW5kbGUoKSBVUkxG
b3JSZXNvdXJjZTpAIm1pc3NpbmdfaW1hZ2UiIHdpdGhFeHRlbnNpb246QCJ0aWZmIl07Ci0gICAg
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1pc3NpbmdJbWFnZVVSTCAhPSBuaWwsICJVbmFi
bGUgdG8gZmluZCBtaXNzaW5nX2ltYWdlLnRpZmYhIik7Ci0gICAgICAgICAgICBOU0ZpbGVXcmFw
cGVyICptaXNzaW5nSW1hZ2VGaWxlV3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGlu
aXRXaXRoVVJMOm1pc3NpbmdJbWFnZVVSTCBvcHRpb25zOjAgZXJyb3I6TlVMTF0gYXV0b3JlbGVh
c2VdOwotICAgICAgICAgICAgYXR0YWNobWVudCA9IFtbUGxhdGZvcm1OU1RleHRBdHRhY2htZW50
IGFsbG9jXSBpbml0V2l0aEZpbGVXcmFwcGVyOm1pc3NpbmdJbWFnZUZpbGVXcmFwcGVyXTsKLSNl
bHNlCi0gICAgICAgICAgICBzdGF0aWMgTlNJbWFnZSAqbWlzc2luZ0ltYWdlID0gbmlsOwotICAg
ICAgICAgICAgTlNUZXh0QXR0YWNobWVudENlbGwgKmNlbGw7Ci0gICAgICAgICAgICBjZWxsID0g
W1tOU1RleHRBdHRhY2htZW50Q2VsbCBhbGxvY10gaW5pdEltYWdlQ2VsbDptaXNzaW5nSW1hZ2Vd
OwotICAgICAgICAgICAgW2F0dGFjaG1lbnQgc2V0QXR0YWNobWVudENlbGw6Y2VsbF07Ci0gICAg
ICAgICAgICBbY2VsbCByZWxlYXNlXTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIFtfYXR0
clN0ciByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpz
dHJpbmcuZ2V0KCldOwotICAgICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBbc3RyaW5nIGxl
bmd0aF07Ci0gICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0
YXJ0SW5kZXgpCi0gICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ICs9IHJhbmdlVG9SZXBs
YWNlLmxlbmd0aDsKLSAgICAgICAgYXR0cnMgPSBhdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50
KTsKLSAgICAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAg
IFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKLSAg
ICAgICAgICAgIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IDE7Ci0gICAgICAgICAgICBbX2F0dHJT
dHIgYWRkQXR0cmlidXRlOk5TQXR0YWNobWVudEF0dHJpYnV0ZU5hbWUgdmFsdWU6YXR0YWNobWVu
dC5nZXQoKSByYW5nZTpyYW5nZVRvUmVwbGFjZV07Ci0gICAgICAgIH0KLSAgICAgICAgX2ZsYWdz
LmlzU29mdCA9IE5POwotICAgICAgICByZXR2YWwgPSBZRVM7Ci0gICAgfQotICAgIHJldHVybiBy
ZXR2YWw7Ci19Ci0KLXZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZFF1b3RlRm9yRWxlbWVudChFbGVt
ZW50JiBlbGVtZW50LCBCT09MIG9wZW5pbmcsIE5TSW50ZWdlciBsZXZlbCkKLXsKLSAgICB1bmlj
aGFyIGMgPSAoKGxldmVsICUgMikgPT0gMCkgPyAob3BlbmluZyA/IDB4MjAxYyA6IDB4MjAxZCkg
OiAob3BlbmluZyA/IDB4MjAxOCA6IDB4MjAxOSk7Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBz
dHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyczomYyBs
ZW5ndGg6MV0pOwotICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5ndGhd
OwotICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAw
KTsKLSAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNl
IHdpdGhTdHJpbmc6c3RyaW5nLmdldCgpXTsKLSAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBb
c3RyaW5nIGxlbmd0aF07Ci0gICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJh
bmdlU3RhcnRJbmRleCkKLSAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVw
bGFjZS5sZW5ndGg7Ci0gICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gYXR0cnMgPSBhdHRyaWJ1
dGVzRm9yRWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAocmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4g
MCkKLSAgICAgICAgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMuZ2V0KCkgcmFuZ2U6cmFu
Z2VUb1JlcGxhY2VdOwotICAgIF9mbGFncy5pc1NvZnQgPSBOTzsKLX0KLQotdm9pZCBIVE1MQ29u
dmVydGVyOjpfYWRkVmFsdWUoTlNTdHJpbmcgKnZhbHVlLCBFbGVtZW50JiBlbGVtZW50KQotewot
ICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAgIE5TVUlu
dGVnZXIgdmFsdWVMZW5ndGggPSBbdmFsdWUgbGVuZ3RoXTsKLSAgICBOU1JhbmdlIHJhbmdlVG9S
ZXBsYWNlID0gTlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCk7Ci0gICAgaWYgKHZhbHVlTGVuZ3Ro
KSB7Ci0gICAgICAgIFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1Jl
cGxhY2Ugd2l0aFN0cmluZzp2YWx1ZV07Ci0gICAgICAgIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9
IHZhbHVlTGVuZ3RoOwotICAgICAgICBpZiAocmFuZ2VUb1JlcGxhY2UubG9jYXRpb24gPCBfZG9t
UmFuZ2VTdGFydEluZGV4KQotICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5n
ZVRvUmVwbGFjZS5sZW5ndGg7Ci0gICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGF0dHJz
ID0gYXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgIGlmIChyYW5nZVRvUmVw
bGFjZS5sZW5ndGggPiAwKQotICAgICAgICAgICAgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0
cnMuZ2V0KCkgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwotICAgICAgICBfZmxhZ3MuaXNTb2Z0ID0g
Tk87Ci0gICAgfQotfQotCi12b2lkIEhUTUxDb252ZXJ0ZXI6Ol9maWxsSW5CbG9jayhOU1RleHRC
bG9jayAqYmxvY2ssIEVsZW1lbnQmIGVsZW1lbnQsIFBsYXRmb3JtQ29sb3IgKmJhY2tncm91bmRD
b2xvciwgQ0dGbG9hdCBleHRyYU1hcmdpbiwgQ0dGbG9hdCBleHRyYVBhZGRpbmcsIEJPT0wgaXNU
YWJsZSkKLXsKLSAgICBmbG9hdCByZXN1bHQgPSAwOwotICAgIAotICAgIE5TU3RyaW5nICp3aWR0
aCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKHdpZHRoQXR0cik7Ci0gICAgaWYgKCh3aWR0aCAmJiBb
d2lkdGggbGVuZ3RoXSkgfHwgIWlzVGFibGUpIHsKLSAgICAgICAgaWYgKF9jYWNoZXMtPmZsb2F0
UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlXaWR0aCwgcmVzdWx0KSkK
LSAgICAgICAgICAgIFtibG9jayBzZXRWYWx1ZTpyZXN1bHQgdHlwZTpOU1RleHRCbG9ja0Fic29s
dXRlVmFsdWVUeXBlIGZvckRpbWVuc2lvbjpOU1RleHRCbG9ja1dpZHRoXTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NT
UHJvcGVydHlNaW5XaWR0aCwgcmVzdWx0KSkKLSAgICAgICAgW2Jsb2NrIHNldFZhbHVlOnJlc3Vs
dCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJs
b2NrTWluaW11bVdpZHRoXTsKLSAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9y
Tm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eU1heFdpZHRoLCByZXN1bHQpKQotICAgICAgICBbYmxv
Y2sgc2V0VmFsdWU6cmVzdWx0IHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JE
aW1lbnNpb246TlNUZXh0QmxvY2tNYXhpbXVtV2lkdGhdOwotICAgIGlmIChfY2FjaGVzLT5mbG9h
dFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5TWluSGVpZ2h0LCByZXN1
bHQpKQotICAgICAgICBbYmxvY2sgc2V0VmFsdWU6cmVzdWx0IHR5cGU6TlNUZXh0QmxvY2tBYnNv
bHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tNaW5pbXVtSGVpZ2h0XTsKLSAg
ICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9w
ZXJ0eU1heEhlaWdodCwgcmVzdWx0KSkKLSAgICAgICAgW2Jsb2NrIHNldFZhbHVlOnJlc3VsdCB0
eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJsb2Nr
TWF4aW11bUhlaWdodF07Ci0KLSAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9y
Tm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCByZXN1bHQpKQotICAgICAgICBb
YmxvY2sgc2V0V2lkdGg6cmVzdWx0ICsgZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNv
bHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01pblhFZGdl
XTsKLSAgICBlbHNlCi0gICAgICAgIFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpO
U1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBl
ZGdlOk5TTWluWEVkZ2VdOwotICAgIAotICAgIGlmIChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFs
dWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgcmVzdWx0KSkKLSAgICAg
ICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCArIGV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2Nr
QWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5Z
RWRnZV07Ci0gICAgZWxzZQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFQYWRkaW5nIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRp
bmcgZWRnZTpOU01pbllFZGdlXTsKLSAgICAKLSAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0
eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgcmVzdWx0KSkK
LSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCArIGV4dHJhUGFkZGluZyB0eXBlOk5TVGV4
dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6
TlNNYXhYRWRnZV07Ci0gICAgZWxzZQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFQYWRk
aW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9j
a1BhZGRpbmcgZWRnZTpOU01heFhFZGdlXTsKLSAgICAKLSAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQ
cm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sIHJl
c3VsdCkpCi0gICAgICAgIFtibG9jayBzZXRXaWR0aDpyZXN1bHQgKyBleHRyYVBhZGRpbmcgdHlw
ZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGlu
ZyBlZGdlOk5TTWF4WUVkZ2VdOwotICAgIGVsc2UKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOmV4
dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNU
ZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhZRWRnZV07Ci0gICAgCi0gICAgaWYgKF9jYWNoZXMt
PmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
V2lkdGgsIHJlc3VsdCkpCi0gICAgICAgIFtibG9jayBzZXRXaWR0aDpyZXN1bHQgdHlwZTpOU1Rl
eHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrQm9yZGVyIGVkZ2U6
TlNNaW5YRWRnZV07Ci0gICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUo
ZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgcmVzdWx0KSkKLSAgICAgICAgW2Js
b2NrIHNldFdpZHRoOnJlc3VsdCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9y
TGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01pbllFZGdlXTsKLSAgICBpZiAoX2NhY2hl
cy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRlclJp
Z2h0V2lkdGgsIHJlc3VsdCkpCi0gICAgICAgIFtibG9jayBzZXRXaWR0aDpyZXN1bHQgdHlwZTpO
U1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrQm9yZGVyIGVk
Z2U6TlNNYXhYRWRnZV07Ci0gICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5v
ZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgcmVzdWx0KSkKLSAgICAg
ICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5
cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01heFlFZGdlXTsKLQotICAgIGlm
IChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5
TWFyZ2luTGVmdCwgcmVzdWx0KSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCArIGV4
dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1Rl
eHRCbG9ja01hcmdpbiBlZGdlOk5TTWluWEVkZ2VdOwotICAgIGVsc2UKLSAgICAgICAgW2Jsb2Nr
IHNldFdpZHRoOmV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBm
b3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWluWEVkZ2VdOwotICAgIGlmIChfY2Fj
aGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2lu
VG9wLCByZXN1bHQpKQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6cmVzdWx0ICsgZXh0cmFNYXJn
aW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2Nr
TWFyZ2luIGVkZ2U6TlNNaW5ZRWRnZV07Ci0gICAgZWxzZQotICAgICAgICBbYmxvY2sgc2V0V2lk
dGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVy
Ok5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNaW5ZRWRnZV07Ci0gICAgaWYgKF9jYWNoZXMtPmZs
b2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwg
cmVzdWx0KSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCArIGV4dHJhTWFyZ2luIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdp
biBlZGdlOk5TTWF4WEVkZ2VdOwotICAgIGVsc2UKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOmV4
dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1Rl
eHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WEVkZ2VdOwotICAgIGlmIChfY2FjaGVzLT5mbG9hdFBy
b3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZXN1
bHQpKQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6cmVzdWx0ICsgZXh0cmFNYXJnaW4gdHlwZTpO
U1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVk
Z2U6TlNNYXhZRWRnZV07Ci0gICAgZWxzZQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFN
YXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJs
b2NrTWFyZ2luIGVkZ2U6TlNNYXhZRWRnZV07Ci0gICAgCi0gICAgUGxhdGZvcm1Db2xvciAqY29s
b3IgPSBuaWw7Ci0gICAgaWYgKChjb2xvciA9IF9jb2xvckZvckVsZW1lbnQoZWxlbWVudCwgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSkKLSAgICAgICAgW2Jsb2NrIHNldEJhY2tncm91bmRD
b2xvcjpjb2xvcl07Ci0gICAgaWYgKCFjb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAg
IFtibG9jayBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsKLSAgICAKLSAgICBp
ZiAoKGNvbG9yID0gX2NvbG9yRm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRlckxl
ZnRDb2xvcikpKQotICAgICAgICBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29sb3IgZm9yRWRnZTpO
U01pblhFZGdlXTsKLSAgICAKLSAgICBpZiAoKGNvbG9yID0gX2NvbG9yRm9yRWxlbWVudChlbGVt
ZW50LCBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKSkpCi0gICAgICAgIFtibG9jayBzZXRCb3Jk
ZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWluWUVkZ2VdOwotICAgIGlmICgoY29sb3IgPSBfY29s
b3JGb3JFbGVtZW50KGVsZW1lbnQsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcikpKQotICAg
ICAgICBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29sb3IgZm9yRWRnZTpOU01heFhFZGdlXTsKLSAg
ICBpZiAoKGNvbG9yID0gX2NvbG9yRm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbUNvbG9yKSkpCi0gICAgICAgIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JF
ZGdlOk5TTWF4WUVkZ2VdOwotfQotCi1zdGF0aWMgaW5saW5lIEJPT0wgcmVhZDJEaWdpdE51bWJl
cihjb25zdCBjaGFyICoqcHAsIGludDhfdCAqb3V0dmFsKQotewotICAgIEJPT0wgcmVzdWx0ID0g
Tk87Ci0gICAgY2hhciBjMSA9ICooKnBwKSsrLCBjMjsKLSAgICBpZiAoaXNBU0NJSURpZ2l0KGMx
KSkgewotICAgICAgICBjMiA9ICooKnBwKSsrOwotICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KGMy
KSkgewotICAgICAgICAgICAgKm91dHZhbCA9IDEwICogKGMxIC0gJzAnKSArIChjMiAtICcwJyk7
Ci0gICAgICAgICAgICByZXN1bHQgPSBZRVM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBOU0RhdGUgKl9kYXRlRm9yU3RyaW5nKE5TU3Ry
aW5nICpzdHJpbmcpCi17Ci0gICAgY29uc3QgY2hhciAqcCA9IFtzdHJpbmcgVVRGOFN0cmluZ107
Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUNvbXBvbmVudHM+IGRhdGVDb21wb25lbnRzID0gYWRvcHRO
UyhbW05TRGF0ZUNvbXBvbmVudHMgYWxsb2NdIGluaXRdKTsKLQotICAgIC8vIFNldCB0aGUgdGlt
ZSB6b25lIHRvIEdNVAotICAgIFtkYXRlQ29tcG9uZW50cyBzZXRUaW1lWm9uZTpbTlNUaW1lWm9u
ZSB0aW1lWm9uZUZvclNlY29uZHNGcm9tR01UOjBdXTsKLQotICAgIE5TSW50ZWdlciB5ZWFyID0g
MDsKLSAgICB3aGlsZSAoKnAgJiYgaXNBU0NJSURpZ2l0KCpwKSkKLSAgICAgICAgeWVhciA9IDEw
ICogeWVhciArICpwKysgLSAnMCc7Ci0gICAgaWYgKCpwKysgIT0gJy0nKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIFtkYXRlQ29tcG9uZW50cyBzZXRZZWFyOnllYXJdOwotCi0gICAgaW50OF90
IGNvbXBvbmVudDsKLSAgICBpZiAoIXJlYWQyRGlnaXROdW1iZXIoJnAsICZjb21wb25lbnQpIHx8
ICpwKysgIT0gJy0nKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIFtkYXRlQ29tcG9uZW50cyBz
ZXRNb250aDpjb21wb25lbnRdOwotCi0gICAgaWYgKCFyZWFkMkRpZ2l0TnVtYmVyKCZwLCAmY29t
cG9uZW50KSB8fCAqcCsrICE9ICdUJykKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbZGF0ZUNv
bXBvbmVudHMgc2V0RGF5OmNvbXBvbmVudF07Ci0KLSAgICBpZiAoIXJlYWQyRGlnaXROdW1iZXIo
JnAsICZjb21wb25lbnQpIHx8ICpwKysgIT0gJzonKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IFtkYXRlQ29tcG9uZW50cyBzZXRIb3VyOmNvbXBvbmVudF07Ci0KLSAgICBpZiAoIXJlYWQyRGln
aXROdW1iZXIoJnAsICZjb21wb25lbnQpIHx8ICpwKysgIT0gJzonKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIFtkYXRlQ29tcG9uZW50cyBzZXRNaW51dGU6Y29tcG9uZW50XTsKLQotICAgIGlm
ICghcmVhZDJEaWdpdE51bWJlcigmcCwgJmNvbXBvbmVudCkgfHwgKnArKyAhPSAnWicpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgW2RhdGVDb21wb25lbnRzIHNldFNlY29uZDpjb21wb25lbnRd
OwotICAgIAotI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDgwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwOTApCi0gICAgTlNTdHJpbmcgKmNhbGVuZGFySWRlbnRpZmllciA9
IE5TQ2FsZW5kYXJJZGVudGlmaWVyR3JlZ29yaWFuOwotI2Vsc2UKLSAgICBOU1N0cmluZyAqY2Fs
ZW5kYXJJZGVudGlmaWVyID0gTlNHcmVnb3JpYW5DYWxlbmRhcjsKLSNlbmRpZgotCi0gICAgcmV0
dXJuIFtbW1tOU0NhbGVuZGFyIGFsbG9jXSBpbml0V2l0aENhbGVuZGFySWRlbnRpZmllcjpjYWxl
bmRhcklkZW50aWZpZXJdIGF1dG9yZWxlYXNlXSBkYXRlRnJvbUNvbXBvbmVudHM6ZGF0ZUNvbXBv
bmVudHMuZ2V0KCldOwotfQotCi1zdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJlKGlkIGJsb2Nr
MSwgaWQgYmxvY2syLCB2b2lkICopCi17Ci0gICAgTlNJbnRlZ2VyIGNvbDEgPSBbKE5TVGV4dFRh
YmxlQmxvY2sgKilibG9jazEgc3RhcnRpbmdDb2x1bW5dOwotICAgIE5TSW50ZWdlciBjb2wyID0g
WyhOU1RleHRUYWJsZUJsb2NrICopYmxvY2syIHN0YXJ0aW5nQ29sdW1uXTsKLSAgICByZXR1cm4g
KChjb2wxIDwgY29sMikgPyBOU09yZGVyZWRBc2NlbmRpbmcgOiAoKGNvbDEgPT0gY29sMikgPyBO
U09yZGVyZWRTYW1lIDogTlNPcmRlcmVkRGVzY2VuZGluZykpOwotfQotCi12b2lkIEhUTUxDb252
ZXJ0ZXI6Ol9wcm9jZXNzTWV0YUVsZW1lbnRXaXRoTmFtZShOU1N0cmluZyAqbmFtZSwgTlNTdHJp
bmcgKmNvbnRlbnQpCi17Ci0gICAgTlNTdHJpbmcgKmtleSA9IG5pbDsKLSAgICBpZiAoTlNPcmRl
cmVkU2FtZSA9PSBbQCJDb2NvYVZlcnNpb24iIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUlu
c2Vuc2l0aXZlU2VhcmNoXSkgewotICAgICAgICBDR0Zsb2F0IHZlcnNpb25OdW1iZXIgPSBbY29u
dGVudCBkb3VibGVWYWx1ZV07Ci0gICAgICAgIGlmICh2ZXJzaW9uTnVtYmVyID4gMC4wKSB7Ci0g
ICAgICAgICAgICAvLyA/Pz8gdGhpcyBzaG91bGQgYmUga2V5ZWQgb2ZmIG9mIHZlcnNpb24gbnVt
YmVyIGluIGZ1dHVyZQotICAgICAgICAgICAgW19kb2N1bWVudEF0dHJzIHJlbW92ZU9iamVjdEZv
cktleTpOU0NvbnZlcnRlZERvY3VtZW50QXR0cmlidXRlXTsKLSAgICAgICAgICAgIFtfZG9jdW1l
bnRBdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmVyc2lvbk51bWJl
cl0gZm9yS2V5Ok5TQ29jb2FWZXJzaW9uRG9jdW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICB9Ci0j
aWYgUExBVEZPUk0oSU9TKQotICAgIH0gZWxzZSBpZiAoTlNPcmRlcmVkU2FtZSA9PSBbQCJHZW5l
cmF0b3IiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkgewot
ICAgICAgICBrZXkgPSBOU0dlbmVyYXRvckRvY3VtZW50QXR0cmlidXRlOwotI2VuZGlmCi0gICAg
fSBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIktleXdvcmRzIiBjb21wYXJlOm5hbWUgb3B0
aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0pIHsKLSAgICAgICAgaWYgKGNvbnRlbnQgJiYg
W2NvbnRlbnQgbGVuZ3RoXSA+IDApIHsKLSAgICAgICAgICAgIE5TQXJyYXkgKmFycmF5OwotICAg
ICAgICAgICAgLy8gPz8/IG5lZWQgYmV0dGVyIGhhbmRsaW5nIGhlcmUgYW5kIHRocm91Z2hvdXQK
LSAgICAgICAgICAgIGlmIChbY29udGVudCByYW5nZU9mU3RyaW5nOkAiLCAiXS5sZW5ndGggPT0g
MCAmJiBbY29udGVudCByYW5nZU9mU3RyaW5nOkAiLCJdLmxlbmd0aCA+IDApCi0gICAgICAgICAg
ICAgICAgYXJyYXkgPSBbY29udGVudCBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIsIl07
Ci0gICAgICAgICAgICBlbHNlIGlmIChbY29udGVudCByYW5nZU9mU3RyaW5nOkAiLCAiXS5sZW5n
dGggPT0gMCAmJiBbY29udGVudCByYW5nZU9mU3RyaW5nOkAiICJdLmxlbmd0aCA+IDApCi0gICAg
ICAgICAgICAgICAgYXJyYXkgPSBbY29udGVudCBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6
QCIgIl07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXJyYXkgPSBbY29udGVu
dCBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIsICJdOwotICAgICAgICAgICAgW19kb2N1
bWVudEF0dHJzIHNldE9iamVjdDphcnJheSBmb3JLZXk6TlNLZXl3b3Jkc0RvY3VtZW50QXR0cmli
dXRlXTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoTlNPcmRlcmVkU2FtZSA9PSBbQCJBdXRo
b3IiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkKLSAgICAg
ICAga2V5ID0gTlNBdXRob3JEb2N1bWVudEF0dHJpYnV0ZTsKLSAgICBlbHNlIGlmIChOU09yZGVy
ZWRTYW1lID09IFtAIkxhc3RBdXRob3IiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vu
c2l0aXZlU2VhcmNoXSkKLSAgICAgICAga2V5ID0gTlNFZGl0b3JEb2N1bWVudEF0dHJpYnV0ZTsK
LSAgICBlbHNlIGlmIChOU09yZGVyZWRTYW1lID09IFtAIkNvbXBhbnkiIGNvbXBhcmU6bmFtZSBv
cHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkKLSAgICAgICAga2V5ID0gTlNDb21wYW55
RG9jdW1lbnRBdHRyaWJ1dGU7Ci0gICAgZWxzZSBpZiAoTlNPcmRlcmVkU2FtZSA9PSBbQCJDb3B5
cmlnaHQiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSkKLSAg
ICAgICAga2V5ID0gTlNDb3B5cmlnaHREb2N1bWVudEF0dHJpYnV0ZTsKLSAgICBlbHNlIGlmIChO
U09yZGVyZWRTYW1lID09IFtAIlN1YmplY3QiIGNvbXBhcmU6bmFtZSBvcHRpb25zOk5TQ2FzZUlu
c2Vuc2l0aXZlU2VhcmNoXSkKLSAgICAgICAga2V5ID0gTlNTdWJqZWN0RG9jdW1lbnRBdHRyaWJ1
dGU7Ci0gICAgZWxzZSBpZiAoTlNPcmRlcmVkU2FtZSA9PSBbQCJEZXNjcmlwdGlvbiIgY29tcGFy
ZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdIHx8IE5TT3JkZXJlZFNhbWUg
PT0gW0AiQ29tbWVudCIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFy
Y2hdKQotICAgICAgICBrZXkgPSBOU0NvbW1lbnREb2N1bWVudEF0dHJpYnV0ZTsKLSAgICBlbHNl
IGlmIChOU09yZGVyZWRTYW1lID09IFtAIkNyZWF0aW9uVGltZSIgY29tcGFyZTpuYW1lIG9wdGlv
bnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdKSB7Ci0gICAgICAgIGlmIChjb250ZW50ICYmIFtj
b250ZW50IGxlbmd0aF0gPiAwKSB7Ci0gICAgICAgICAgICBOU0RhdGUgKmRhdGUgPSBfZGF0ZUZv
clN0cmluZyhjb250ZW50KTsKLSAgICAgICAgICAgIGlmIChkYXRlKQotICAgICAgICAgICAgICAg
IFtfZG9jdW1lbnRBdHRycyBzZXRPYmplY3Q6ZGF0ZSBmb3JLZXk6TlNDcmVhdGlvblRpbWVEb2N1
bWVudEF0dHJpYnV0ZV07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKE5TT3JkZXJlZFNhbWUg
PT0gW0AiTW9kaWZpY2F0aW9uVGltZSIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5z
aXRpdmVTZWFyY2hdKSB7Ci0gICAgICAgIGlmIChjb250ZW50ICYmIFtjb250ZW50IGxlbmd0aF0g
PiAwKSB7Ci0gICAgICAgICAgICBOU0RhdGUgKmRhdGUgPSBfZGF0ZUZvclN0cmluZyhjb250ZW50
KTsKLSAgICAgICAgICAgIGlmIChkYXRlKQotICAgICAgICAgICAgICAgIFtfZG9jdW1lbnRBdHRy
cyBzZXRPYmplY3Q6ZGF0ZSBmb3JLZXk6TlNNb2RpZmljYXRpb25UaW1lRG9jdW1lbnRBdHRyaWJ1
dGVdOwotICAgICAgICB9Ci0gICAgfQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBlbHNlIGlmIChO
U09yZGVyZWRTYW1lID09IFtAIkRpc3BsYXlOYW1lIiBjb21wYXJlOm5hbWUgb3B0aW9uczpOU0Nh
c2VJbnNlbnNpdGl2ZVNlYXJjaF0gfHwgTlNPcmRlcmVkU2FtZSA9PSBbQCJJbmRleFRpdGxlIiBj
b21wYXJlOm5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0pCi0gICAgICAgIGtl
eSA9IE5TRGlzcGxheU5hbWVEb2N1bWVudEF0dHJpYnV0ZTsKLSAgICBlbHNlIGlmIChOU09yZGVy
ZWRTYW1lID09IFtAInJvYm90cyIgY29tcGFyZTpuYW1lIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRp
dmVTZWFyY2hdKSB7Ci0gICAgICAgIGlmIChbY29udGVudCByYW5nZU9mU3RyaW5nOkAibm9pbmRl
eCIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0ubGVuZ3RoID4gMCkKLSAgICAgICAg
ICAgIFtfZG9jdW1lbnRBdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2Vy
OjFdIGZvcktleTpOU05vSW5kZXhEb2N1bWVudEF0dHJpYnV0ZV07Ci0gICAgfQotI2VuZGlmCi0g
ICAgaWYgKGtleSAmJiBjb250ZW50ICYmIFtjb250ZW50IGxlbmd0aF0gPiAwKQotICAgICAgICBb
X2RvY3VtZW50QXR0cnMgc2V0T2JqZWN0OmNvbnRlbnQgZm9yS2V5OmtleV07Ci19Ci0KLXZvaWQg
SFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NIZWFkRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewot
ICAgIC8vIEZJWE1FOiBTaG91bGQgZ2F0aGVyIGRhdGEgZnJvbSBvdGhlciBzb3VyY2VzIGUuZy4g
V29yZCwgYnV0IGZvciB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gYmUgYWJsZSB0byBnZXQgY29tbWVu
dHMgZnJvbSBET00KLSAgICAKLSAgICBmb3IgKEhUTUxNZXRhRWxlbWVudCogY2hpbGQgPSBUcmF2
ZXJzYWw8SFRNTE1ldGFFbGVtZW50Pjo6Zmlyc3RDaGlsZCgmZWxlbWVudCk7IGNoaWxkOyBjaGls
ZCA9IFRyYXZlcnNhbDxIVE1MTWV0YUVsZW1lbnQ+OjpuZXh0U2libGluZyhjaGlsZCkpIHsKLSAg
ICAgICAgTlNTdHJpbmcgKm5hbWUgPSBjaGlsZC0+bmFtZSgpOwotICAgICAgICBOU1N0cmluZyAq
Y29udGVudCA9IGNoaWxkLT5jb250ZW50KCk7Ci0gICAgICAgIGlmIChuYW1lICYmIGNvbnRlbnQp
Ci0gICAgICAgICAgICBfcHJvY2Vzc01ldGFFbGVtZW50V2l0aE5hbWUobmFtZSwgY29udGVudCk7
Ci0gICAgfQotfQotCi1CT09MIEhUTUxDb252ZXJ0ZXI6Ol9lbnRlckVsZW1lbnQoRWxlbWVudCYg
ZWxlbWVudCwgQk9PTCBlbWJlZGRlZCkKLXsKLSAgICBTdHJpbmcgZGlzcGxheVZhbHVlID0gX2Nh
Y2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlEaXNwbGF5KTsK
LQotICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoaGVhZFRhZykgJiYgIWVtYmVkZGVkKQotICAg
ICAgICBfcHJvY2Vzc0hlYWRFbGVtZW50KGVsZW1lbnQpOwotICAgIGVsc2UgaWYgKCFkaXNwbGF5
VmFsdWUubGVuZ3RoKCkgfHwgIShkaXNwbGF5VmFsdWUgPT0gIm5vbmUiIHx8IGRpc3BsYXlWYWx1
ZSA9PSAidGFibGUtY29sdW1uIiB8fCBkaXNwbGF5VmFsdWUgPT0gInRhYmxlLWNvbHVtbi1ncm91
cCIpKSB7Ci0gICAgICAgIGlmIChfY2FjaGVzLT5pc0Jsb2NrRWxlbWVudChlbGVtZW50KSAmJiAh
ZWxlbWVudC5oYXNUYWdOYW1lKGJyVGFnKSAmJiAhKGRpc3BsYXlWYWx1ZSA9PSAidGFibGUtY2Vs
bCIgJiYgW190ZXh0VGFibGVzIGNvdW50XSA9PSAwKQotICAgICAgICAgICAgJiYgIShbX3RleHRM
aXN0cyBjb3VudF0gPiAwICYmIGRpc3BsYXlWYWx1ZSA9PSAiYmxvY2siICYmICFlbGVtZW50Lmhh
c1RhZ05hbWUobGlUYWcpICYmICFlbGVtZW50Lmhhc1RhZ05hbWUodWxUYWcpICYmICFlbGVtZW50
Lmhhc1RhZ05hbWUob2xUYWcpKSkKLSAgICAgICAgICAgIF9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50
KGVsZW1lbnQsIGVsZW1lbnQudGFnTmFtZSgpLCBOTywgWUVTKTsKLSAgICAgICAgcmV0dXJuIFlF
UzsKLSAgICB9Ci0gICAgcmV0dXJuIE5POwotfQotCi12b2lkIEhUTUxDb252ZXJ0ZXI6Ol9hZGRU
YWJsZUZvckVsZW1lbnQoRWxlbWVudCAqdGFibGVFbGVtZW50KQotewotICAgIFJldGFpblB0cjxO
U1RleHRUYWJsZT4gdGFibGUgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRUYWJsZSBhbGxvY10g
aW5pdF0pOwotICAgIENHRmxvYXQgY2VsbFNwYWNpbmdWYWwgPSAxOwotICAgIENHRmxvYXQgY2Vs
bFBhZGRpbmdWYWwgPSAxOwotICAgIFt0YWJsZSBzZXROdW1iZXJPZkNvbHVtbnM6MV07Ci0gICAg
W3RhYmxlIHNldExheW91dEFsZ29yaXRobTpOU1RleHRUYWJsZUF1dG9tYXRpY0xheW91dEFsZ29y
aXRobV07Ci0gICAgW3RhYmxlIHNldENvbGxhcHNlc0JvcmRlcnM6Tk9dOwotICAgIFt0YWJsZSBz
ZXRIaWRlc0VtcHR5Q2VsbHM6Tk9dOwotICAgIAotICAgIGlmICh0YWJsZUVsZW1lbnQpIHsKLSAg
ICAgICAgQVNTRVJUKHRhYmxlRWxlbWVudCk7Ci0gICAgICAgIEVsZW1lbnQmIGNvcmVUYWJsZUVs
ZW1lbnQgPSAqdGFibGVFbGVtZW50OwotICAgICAgICAKLSAgICAgICAgTlNTdHJpbmcgKmNlbGxT
cGFjaW5nID0gY29yZVRhYmxlRWxlbWVudC5nZXRBdHRyaWJ1dGUoY2VsbHNwYWNpbmdBdHRyKTsK
LSAgICAgICAgaWYgKGNlbGxTcGFjaW5nICYmIFtjZWxsU3BhY2luZyBsZW5ndGhdID4gMCAmJiAh
W2NlbGxTcGFjaW5nIGhhc1N1ZmZpeDpAIiUiXSkKLSAgICAgICAgICAgIGNlbGxTcGFjaW5nVmFs
ID0gW2NlbGxTcGFjaW5nIGZsb2F0VmFsdWVdOwotICAgICAgICBOU1N0cmluZyAqY2VsbFBhZGRp
bmcgPSBjb3JlVGFibGVFbGVtZW50LmdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpOwotICAg
ICAgICBpZiAoY2VsbFBhZGRpbmcgJiYgW2NlbGxQYWRkaW5nIGxlbmd0aF0gPiAwICYmICFbY2Vs
bFBhZGRpbmcgaGFzU3VmZml4OkAiJSJdKQotICAgICAgICAgICAgY2VsbFBhZGRpbmdWYWwgPSBb
Y2VsbFBhZGRpbmcgZmxvYXRWYWx1ZV07Ci0gICAgICAgIAotICAgICAgICBfZmlsbEluQmxvY2so
dGFibGUuZ2V0KCksIGNvcmVUYWJsZUVsZW1lbnQsIG5pbCwgMCwgMCwgWUVTKTsKLQotICAgICAg
ICBpZiAoX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZVRhYmxlRWxlbWVudCwgQ1NT
UHJvcGVydHlCb3JkZXJDb2xsYXBzZSkgPT0gImNvbGxhcHNlIikgewotICAgICAgICAgICAgW3Rh
YmxlIHNldENvbGxhcHNlc0JvcmRlcnM6WUVTXTsKLSAgICAgICAgICAgIGNlbGxTcGFjaW5nVmFs
ID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5v
ZGUoY29yZVRhYmxlRWxlbWVudCwgQ1NTUHJvcGVydHlFbXB0eUNlbGxzKSA9PSAiaGlkZSIpCi0g
ICAgICAgICAgICBbdGFibGUgc2V0SGlkZXNFbXB0eUNlbGxzOllFU107Ci0gICAgICAgIGlmIChf
Y2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjb3JlVGFibGVFbGVtZW50LCBDU1NQcm9wZXJ0
eVRhYmxlTGF5b3V0KSA9PSAiZml4ZWQiKQotICAgICAgICAgICAgW3RhYmxlIHNldExheW91dEFs
Z29yaXRobTpOU1RleHRUYWJsZUZpeGVkTGF5b3V0QWxnb3JpdGhtXTsKLSAgICB9Ci0gICAgCi0g
ICAgW190ZXh0VGFibGVzIGFkZE9iamVjdDp0YWJsZS5nZXQoKV07Ci0gICAgW190ZXh0VGFibGVT
cGFjaW5ncyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6Y2VsbFNwYWNpbmdW
YWxdXTsKLSAgICBbX3RleHRUYWJsZVBhZGRpbmdzIGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZTpjZWxsUGFkZGluZ1ZhbF1dOwotICAgIFtfdGV4dFRhYmxlUm93cyBhZGRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOjBdXTsKLSAgICBbX3RleHRUYWJsZVJvd0Fy
cmF5cyBhZGRPYmplY3Q6W05TTXV0YWJsZUFycmF5IGFycmF5XV07Ci19Ci0KLXZvaWQgSFRNTENv
bnZlcnRlcjo6X2FkZFRhYmxlQ2VsbEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKLXsKLSAg
ICBOU1RleHRUYWJsZSAqdGFibGUgPSBbX3RleHRUYWJsZXMgbGFzdE9iamVjdF07Ci0gICAgTlNJ
bnRlZ2VyIHJvd051bWJlciA9IFtbX3RleHRUYWJsZVJvd3MgbGFzdE9iamVjdF0gaW50ZWdlclZh
bHVlXTsKLSAgICBOU0ludGVnZXIgY29sdW1uTnVtYmVyID0gMDsKLSAgICBOU0ludGVnZXIgcm93
U3BhbiA9IDE7Ci0gICAgTlNJbnRlZ2VyIGNvbFNwYW4gPSAxOwotICAgIE5TTXV0YWJsZUFycmF5
ICpyb3dBcnJheSA9IFtfdGV4dFRhYmxlUm93QXJyYXlzIGxhc3RPYmplY3RdOwotICAgIE5TVUlu
dGVnZXIgY291bnQgPSBbcm93QXJyYXkgY291bnRdOwotICAgIFBsYXRmb3JtQ29sb3IgKmNvbG9y
ID0gKFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBjb3VudF0gPiAwKSA/IFtfdGV4dFRh
YmxlUm93QmFja2dyb3VuZENvbG9ycyBsYXN0T2JqZWN0XSA6IG5pbDsKLSAgICBOU1RleHRUYWJs
ZUJsb2NrICpwcmV2aW91c0Jsb2NrOwotICAgIENHRmxvYXQgY2VsbFNwYWNpbmdWYWwgPSBbW190
ZXh0VGFibGVTcGFjaW5ncyBsYXN0T2JqZWN0XSBmbG9hdFZhbHVlXTsKLSAgICBpZiAoW2NvbG9y
IGlzRXF1YWw6W1BsYXRmb3JtQ29sb3JDbGFzcyBjbGVhckNvbG9yXV0pIGNvbG9yID0gbmlsOwot
ICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgcHJl
dmlvdXNCbG9jayA9IFtyb3dBcnJheSBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBpZiAoY29s
dW1uTnVtYmVyID49IFtwcmV2aW91c0Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSAmJiBjb2x1bW5OdW1i
ZXIgPCBbcHJldmlvdXNCbG9jayBzdGFydGluZ0NvbHVtbl0gKyBbcHJldmlvdXNCbG9jayBjb2x1
bW5TcGFuXSkKLSAgICAgICAgICAgIGNvbHVtbk51bWJlciA9IFtwcmV2aW91c0Jsb2NrIHN0YXJ0
aW5nQ29sdW1uXSArIFtwcmV2aW91c0Jsb2NrIGNvbHVtblNwYW5dOwotICAgIH0KLSAgICAKLSAg
ICBSZXRhaW5QdHI8TlNUZXh0VGFibGVCbG9jaz4gYmxvY2s7Ci0gICAgCi0gICAgaWYgKGVsZW1l
bnQpIHsKLSAgICAgICAgaWYgKGlzSFRNTFRhYmxlQ2VsbEVsZW1lbnQoKmVsZW1lbnQpKSB7Ci0g
ICAgICAgICAgICBIVE1MVGFibGVDZWxsRWxlbWVudCYgdGFibGVDZWxsRWxlbWVudCA9IHRvSFRN
TFRhYmxlQ2VsbEVsZW1lbnQoKmVsZW1lbnQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBy
b3dTcGFuID0gdGFibGVDZWxsRWxlbWVudC5yb3dTcGFuKCk7Ci0gICAgICAgICAgICBpZiAocm93
U3BhbiA8IDEpCi0gICAgICAgICAgICAgICAgcm93U3BhbiA9IDE7Ci0gICAgICAgICAgICBjb2xT
cGFuID0gdGFibGVDZWxsRWxlbWVudC5jb2xTcGFuKCk7Ci0gICAgICAgICAgICBpZiAoY29sU3Bh
biA8IDEpCi0gICAgICAgICAgICAgICAgY29sU3BhbiA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGJsb2NrID0gYWRvcHROUyhbW1BsYXRmb3JtTlNUZXh0VGFibGVCbG9jayBhbGxv
Y10gaW5pdFdpdGhUYWJsZTp0YWJsZSBzdGFydGluZ1Jvdzpyb3dOdW1iZXIgcm93U3Bhbjpyb3dT
cGFuIHN0YXJ0aW5nQ29sdW1uOmNvbHVtbk51bWJlciBjb2x1bW5TcGFuOmNvbFNwYW5dKTsKLSAg
ICAgICAgCi0gICAgICAgIFN0cmluZyB2ZXJ0aWNhbEFsaWduID0gX2NhY2hlcy0+cHJvcGVydHlW
YWx1ZUZvck5vZGUoKmVsZW1lbnQsIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7Ci0gICAgICAg
IAotICAgICAgICBfZmlsbEluQmxvY2soYmxvY2suZ2V0KCksICplbGVtZW50LCBjb2xvciwgY2Vs
bFNwYWNpbmdWYWwgLyAyLCAwLCBOTyk7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbEFsaWduID09ICJt
aWRkbGUiKQotICAgICAgICAgICAgW2Jsb2NrIHNldFZlcnRpY2FsQWxpZ25tZW50Ok5TVGV4dEJs
b2NrTWlkZGxlQWxpZ25tZW50XTsKLSAgICAgICAgZWxzZSBpZiAodmVydGljYWxBbGlnbiA9PSAi
Ym90dG9tIikKLSAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1RleHRC
bG9ja0JvdHRvbUFsaWdubWVudF07Ci0gICAgICAgIGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT0g
ImJhc2VsaW5lIikKLSAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1Rl
eHRCbG9ja0Jhc2VsaW5lQWxpZ25tZW50XTsKLSAgICAgICAgZWxzZSBpZiAodmVydGljYWxBbGln
biA9PSAidG9wIikKLSAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1Rl
eHRCbG9ja1RvcEFsaWdubWVudF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYmxvY2sgPSBhZG9w
dE5TKFtbUGxhdGZvcm1OU1RleHRUYWJsZUJsb2NrIGFsbG9jXSBpbml0V2l0aFRhYmxlOnRhYmxl
IHN0YXJ0aW5nUm93OnJvd051bWJlciByb3dTcGFuOnJvd1NwYW4gc3RhcnRpbmdDb2x1bW46Y29s
dW1uTnVtYmVyIGNvbHVtblNwYW46Y29sU3Bhbl0pOwotICAgIH0KLSAgICAKLSAgICBbX3RleHRC
bG9ja3MgYWRkT2JqZWN0OmJsb2NrLmdldCgpXTsKLSAgICBbcm93QXJyYXkgYWRkT2JqZWN0OmJs
b2NrLmdldCgpXTsKLSAgICBbcm93QXJyYXkgc29ydFVzaW5nRnVuY3Rpb246X2NvbENvbXBhcmUg
Y29udGV4dDpOVUxMXTsKLX0KLQotQk9PTCBIVE1MQ29udmVydGVyOjpfcHJvY2Vzc0VsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCwgTlNJbnRlZ2VyIGRlcHRoKQotewotICAgIEJPT0wgcmV0dmFsID0g
WUVTOwotICAgIEJPT0wgaXNCbG9ja0xldmVsID0gX2NhY2hlcy0+aXNCbG9ja0VsZW1lbnQoZWxl
bWVudCk7Ci0gICAgU3RyaW5nIGRpc3BsYXlWYWx1ZSA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVG
b3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5RGlzcGxheSk7Ci0gICAgaWYgKGlzQmxvY2tMZXZl
bCkKLSAgICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgcmVtb3ZlQWxsT2JqZWN0c107Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIFN0cmluZyBiaWRpID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZv
ck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7Ci0gICAgICAgIGlmIChiaWRp
ID09ICJlbWJlZCIpIHsKLSAgICAgICAgICAgIE5TVUludGVnZXIgdmFsID0gTlNUZXh0V3JpdGlu
Z0RpcmVjdGlvbkVtYmVkZGluZzsKLSAgICAgICAgICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0eVZh
bHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eURpcmVjdGlvbikgPT0gInJ0bCIpCi0gICAg
ICAgICAgICAgICAgdmFsIHw9IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwotICAgICAg
ICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoVW5zaWduZWRJbnRlZ2VyOnZhbF1dOwotICAgICAgICB9IGVsc2UgaWYgKGJpZGkgPT0gImJp
ZGktb3ZlcnJpZGUiKSB7Ci0gICAgICAgICAgICBOU1VJbnRlZ2VyIHZhbCA9IE5TVGV4dFdyaXRp
bmdEaXJlY3Rpb25PdmVycmlkZTsKLSAgICAgICAgICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0eVZh
bHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eURpcmVjdGlvbikgPT0gInJ0bCIpCi0gICAg
ICAgICAgICAgICAgdmFsIHw9IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwotICAgICAg
ICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoVW5zaWduZWRJbnRlZ2VyOnZhbF1dOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChkaXNw
bGF5VmFsdWUgPT0gInRhYmxlIiB8fCAoW190ZXh0VGFibGVzIGNvdW50XSA9PSAwICYmIGRpc3Bs
YXlWYWx1ZSA9PSAidGFibGUtcm93LWdyb3VwIikpIHsKLSAgICAgICAgRWxlbWVudCogdGFibGVF
bGVtZW50ID0gJmVsZW1lbnQ7Ci0gICAgICAgIGlmIChkaXNwbGF5VmFsdWUgPT0gInRhYmxlLXJv
dy1ncm91cCIpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBpbiBtZWRpYXMg
cmVzLCB0aGUgZmlyc3QgdGhpbmcgd2Ugc2VlIG1heSBiZSB0aGUgdGJvZHksIHNvIGdvIHVwIHRv
IHRoZSB0YWJsZQotICAgICAgICAgICAgdGFibGVFbGVtZW50ID0gX2Jsb2NrTGV2ZWxFbGVtZW50
Rm9yTm9kZShlbGVtZW50LnBhcmVudE5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoIXRhYmxlRWxl
bWVudCB8fCBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZSgqdGFibGVFbGVtZW50LCBDU1NQ
cm9wZXJ0eURpc3BsYXkpICE9ICJ0YWJsZSIpCi0gICAgICAgICAgICAgICAgdGFibGVFbGVtZW50
ID0gJmVsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKFtfdGV4dFRhYmxlcyBjb3Vu
dF0gPiBbX3RleHRCbG9ja3MgY291bnRdKQotICAgICAgICAgICAgX2FkZFRhYmxlQ2VsbEZvckVs
ZW1lbnQobmlsKTsKLSAgICAgICAgX2FkZFRhYmxlRm9yRWxlbWVudCh0YWJsZUVsZW1lbnQpOwot
ICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1mb290ZXItZ3JvdXAiICYmIFtf
dGV4dFRhYmxlcyBjb3VudF0gPiAwKSB7Ci0gICAgICAgIG1fdGV4dFRhYmxlRm9vdGVycy5hZGQo
W190ZXh0VGFibGVzIGxhc3RPYmplY3RdLCAmZWxlbWVudCk7Ci0gICAgICAgIHJldHZhbCA9IE5P
OwotICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1yb3ciICYmIFtfdGV4dFRh
YmxlcyBjb3VudF0gPiAwKSB7Ci0gICAgICAgIFBsYXRmb3JtQ29sb3IgKmNvbG9yID0gX2NvbG9y
Rm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgICAg
IGlmICghY29sb3IpCi0gICAgICAgICAgICBjb2xvciA9IFtQbGF0Zm9ybUNvbG9yQ2xhc3MgY2xl
YXJDb2xvcl07Ci0gICAgICAgIFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBhZGRPYmpl
Y3Q6Y29sb3JdOwotICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1jZWxsIikg
ewotICAgICAgICB3aGlsZSAoW190ZXh0VGFibGVzIGNvdW50XSA8IFtfdGV4dEJsb2NrcyBjb3Vu
dF0gKyAxKQotICAgICAgICAgICAgX2FkZFRhYmxlRm9yRWxlbWVudChuaWwpOwotICAgICAgICBf
YWRkVGFibGVDZWxsRm9yRWxlbWVudCgmZWxlbWVudCk7Ci0gICAgfSBlbHNlIGlmIChlbGVtZW50
Lmhhc1RhZ05hbWUoaW1nVGFnKSkgewotICAgICAgICBOU1N0cmluZyAqdXJsU3RyaW5nID0gZWxl
bWVudC5nZXRBdHRyaWJ1dGUoc3JjQXR0cik7Ci0gICAgICAgIGlmICh1cmxTdHJpbmcgJiYgW3Vy
bFN0cmluZyBsZW5ndGhdID4gMCkgewotICAgICAgICAgICAgTlNVUkwgKnVybCA9IGVsZW1lbnQu
ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMo
dXJsU3RyaW5nKSk7Ci0gICAgICAgICAgICBpZiAoIXVybCkKLSAgICAgICAgICAgICAgICB1cmwg
PSBbTlNVUkwgX3dlYl9VUkxXaXRoU3RyaW5nOlt1cmxTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0No
YXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0
ZXJTZXRdXSByZWxhdGl2ZVRvVVJMOl9iYXNlVVJMXTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAg
ICAgICAgICBCT09MIHVzZVBsYWNlaG9sZGVySW1hZ2UgPSBOTzsKLSNlbHNlCi0gICAgICAgICAg
ICBCT09MIHVzZVBsYWNlaG9sZGVySW1hZ2UgPSBZRVM7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlm
ICh1cmwpCi0gICAgICAgICAgICAgICAgX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50KGVsZW1lbnQs
IHVybCwgaXNCbG9ja0xldmVsLCB1c2VQbGFjZWhvbGRlckltYWdlKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR2YWwgPSBOTzsKLSAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmpl
Y3RUYWcpKSB7Ci0gICAgICAgIE5TU3RyaW5nICpiYXNlU3RyaW5nID0gZWxlbWVudC5nZXRBdHRy
aWJ1dGUoY29kZWJhc2VBdHRyKTsKLSAgICAgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IGVsZW1l
bnQuZ2V0QXR0cmlidXRlKGRhdGFBdHRyKTsKLSAgICAgICAgTlNTdHJpbmcgKmRlY2xhcmVTdHJp
bmcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShkZWNsYXJlQXR0cik7Ci0gICAgICAgIGlmICh1cmxT
dHJpbmcgJiYgW3VybFN0cmluZyBsZW5ndGhdID4gMCAmJiAhW0AidHJ1ZSIgaXNFcXVhbFRvU3Ry
aW5nOmRlY2xhcmVTdHJpbmddKSB7Ci0gICAgICAgICAgICBOU1VSTCAqYmFzZVVSTCA9IG5pbDsK
LSAgICAgICAgICAgIE5TVVJMICp1cmwgPSBuaWw7Ci0gICAgICAgICAgICBpZiAoYmFzZVN0cmlu
ZyAmJiBbYmFzZVN0cmluZyBsZW5ndGhdID4gMCkgewotICAgICAgICAgICAgICAgIGJhc2VVUkwg
PSBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdI
VE1MU3BhY2VzKGJhc2VTdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWJhc2VVUkwpCi0g
ICAgICAgICAgICAgICAgICAgIGJhc2VVUkwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoU3RyaW5nOlti
YXNlU3RyaW5nIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0
IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV0gcmVsYXRpdmVUb1VSTDpfYmFzZVVS
TF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYmFzZVVSTCkKLSAgICAgICAgICAg
ICAgICB1cmwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoU3RyaW5nOlt1cmxTdHJpbmcgc3RyaW5nQnlU
cmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xp
bmVDaGFyYWN0ZXJTZXRdXSByZWxhdGl2ZVRvVVJMOmJhc2VVUkxdOwotICAgICAgICAgICAgaWYg
KCF1cmwpCi0gICAgICAgICAgICAgICAgdXJsID0gZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRl
VVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKLSAgICAg
ICAgICAgIGlmICghdXJsKQotICAgICAgICAgICAgICAgIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdp
dGhTdHJpbmc6W3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0No
YXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dIHJlbGF0aXZlVG9V
Ukw6X2Jhc2VVUkxdOwotICAgICAgICAgICAgaWYgKHVybCkKLSAgICAgICAgICAgICAgICByZXR2
YWwgPSAhX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50KGVsZW1lbnQsIHVybCwgaXNCbG9ja0xldmVs
LCBOTyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShmcmFt
ZVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSB0b0hUTUxGcmFtZUVsZW1lbnRCYXNlKGVsZW1lbnQp
LmNvbnRlbnREb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBfdHJhdmVyc2VOb2RlKCpjb250ZW50
RG9jdW1lbnQsIGRlcHRoICsgMSwgdHJ1ZSAvKiBlbWJlZGRlZCAqLyk7Ci0gICAgICAgICAgICBy
ZXR2YWwgPSBOTzsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1l
KGJyVGFnKSkgewotICAgICAgICBFbGVtZW50KiBibG9ja0VsZW1lbnQgPSBfYmxvY2tMZXZlbEVs
ZW1lbnRGb3JOb2RlKGVsZW1lbnQucGFyZW50Tm9kZSgpKTsKLSAgICAgICAgTlNTdHJpbmcgKmJy
ZWFrQ2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOwotICAgICAgICBOU1N0
cmluZyAqYmxvY2tUYWcgPSBibG9ja0VsZW1lbnQgPyAoTlNTdHJpbmcgKilibG9ja0VsZW1lbnQt
PnRhZ05hbWUoKSA6IG5pbDsKLSAgICAgICAgQk9PTCBpc0V4dHJhQnJlYWsgPSBbQCJBcHBsZS1p
bnRlcmNoYW5nZS1uZXdsaW5lIiBpc0VxdWFsVG9TdHJpbmc6YnJlYWtDbGFzc107Ci0gICAgICAg
IEJPT0wgYmxvY2tFbGVtZW50SXNQYXJhZ3JhcGggPSAoW0AiUCIgaXNFcXVhbFRvU3RyaW5nOmJs
b2NrVGFnXSB8fCBbQCJMSSIgaXNFcXVhbFRvU3RyaW5nOmJsb2NrVGFnXSB8fCAoW2Jsb2NrVGFn
IGhhc1ByZWZpeDpAIkgiXSAmJiAyID09IFtibG9ja1RhZyBsZW5ndGhdKSk7Ci0gICAgICAgIGlm
IChpc0V4dHJhQnJlYWspCi0gICAgICAgICAgICBfZmxhZ3MuaGFzVHJhaWxpbmdOZXdsaW5lID0g
WUVTOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQgJiYgYmxv
Y2tFbGVtZW50SXNQYXJhZ3JhcGgpCi0gICAgICAgICAgICAgICAgX25ld0xpbmVGb3JFbGVtZW50
KGVsZW1lbnQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIF9uZXdQYXJhZ3Jh
cGhGb3JFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnQudGFnTmFtZSgpLCBZRVMsIE5PKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHVsVGFnKSkgewotICAgICAg
ICBSZXRhaW5QdHI8TlNUZXh0TGlzdD4gbGlzdDsKLSAgICAgICAgU3RyaW5nIGxpc3RTdHlsZVR5
cGUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUxp
c3RTdHlsZVR5cGUpOwotICAgICAgICBpZiAoIWxpc3RTdHlsZVR5cGUubGVuZ3RoKCkpCi0gICAg
ICAgICAgICBsaXN0U3R5bGVUeXBlID0gQCJkaXNjIjsKLSAgICAgICAgbGlzdCA9IGFkb3B0TlMo
W1tQbGF0Zm9ybU5TVGV4dExpc3QgYWxsb2NdIGluaXRXaXRoTWFya2VyRm9ybWF0OlN0cmluZygi
eyIgKyBsaXN0U3R5bGVUeXBlICsgIn0iKSBvcHRpb25zOjBdKTsKLSAgICAgICAgW190ZXh0TGlz
dHMgYWRkT2JqZWN0Omxpc3QuZ2V0KCldOwotICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdO
YW1lKG9sVGFnKSkgewotICAgICAgICBSZXRhaW5QdHI8TlNUZXh0TGlzdD4gbGlzdDsKLSAgICAg
ICAgU3RyaW5nIGxpc3RTdHlsZVR5cGUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShl
bGVtZW50LCBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGUpOwotICAgICAgICBpZiAoIWxpc3RTdHls
ZVR5cGUubGVuZ3RoKCkpCi0gICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gImRlY2ltYWwiOwot
ICAgICAgICBsaXN0ID0gYWRvcHROUyhbW1BsYXRmb3JtTlNUZXh0TGlzdCBhbGxvY10gaW5pdFdp
dGhNYXJrZXJGb3JtYXQ6U3RyaW5nKCJ7IiArIGxpc3RTdHlsZVR5cGUgKyAifSIpIG9wdGlvbnM6
MF0pOwotICAgICAgICBpZiAoaXNIVE1MT0xpc3RFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAg
ICAgICBOU0ludGVnZXIgc3RhcnRpbmdJdGVtTnVtYmVyID0gdG9IVE1MT0xpc3RFbGVtZW50KGVs
ZW1lbnQpLnN0YXJ0KCk7OwotICAgICAgICAgICAgW2xpc3Qgc2V0U3RhcnRpbmdJdGVtTnVtYmVy
OnN0YXJ0aW5nSXRlbU51bWJlcl07Ci0gICAgICAgIH0KLSAgICAgICAgW190ZXh0TGlzdHMgYWRk
T2JqZWN0Omxpc3QuZ2V0KCldOwotICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHFU
YWcpKSB7Ci0gICAgICAgIF9hZGRRdW90ZUZvckVsZW1lbnQoZWxlbWVudCwgWUVTLCBfcXVvdGVM
ZXZlbCsrKTsKLSAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShpbnB1dFRhZykpIHsK
LSAgICAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAg
SFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1l
bnQpOwotICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudC50eXBlKCkgPT0gInRleHQiKSB7Ci0g
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKnZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIFt2YWx1ZSBsZW5ndGhdID4gMCkKLSAgICAgICAg
ICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVlLCBlbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkg
ewotICAgICAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAg
ICAgICBIVE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0QXJlYUVsZW1lbnQgPSB0b0hUTUxUZXh0QXJl
YUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSB0ZXh0QXJl
YUVsZW1lbnQudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUgbGVuZ3Ro
XSA+IDApCi0gICAgICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVlLCBlbGVtZW50KTsKLSAgICAg
ICAgfQotICAgICAgICByZXR2YWwgPSBOTzsKLSAgICB9Ci0gICAgcmV0dXJuIHJldHZhbDsKLX0K
LQotdm9pZCBIVE1MQ29udmVydGVyOjpfYWRkTWFya2Vyc1RvTGlzdChOU1RleHRMaXN0ICpsaXN0
LCBOU1JhbmdlIHJhbmdlKQotewotICAgIE5TSW50ZWdlciBpdGVtTnVtID0gW2xpc3Qgc3RhcnRp
bmdJdGVtTnVtYmVyXTsKLSAgICBOU1N0cmluZyAqc3RyaW5nID0gW19hdHRyU3RyIHN0cmluZ107
Ci0gICAgTlNTdHJpbmcgKnN0cmluZ1RvSW5zZXJ0OwotICAgIE5TRGljdGlvbmFyeSAqYXR0cnNU
b0luc2VydCA9IG5pbDsKLSAgICBQbGF0Zm9ybUZvbnQgKmZvbnQ7Ci0gICAgTlNQYXJhZ3JhcGhT
dHlsZSAqcGFyYWdyYXBoU3R5bGU7Ci0gICAgTlNNdXRhYmxlUGFyYWdyYXBoU3R5bGUgKm5ld1N0
eWxlOwotICAgIE5TVGV4dFRhYiAqdGFiID0gbmlsOwotICAgIE5TVGV4dFRhYiAqdGFiVG9SZW1v
dmU7Ci0gICAgTlNSYW5nZSBwYXJhZ3JhcGhSYW5nZTsKLSAgICBOU1JhbmdlIHN0eWxlUmFuZ2U7
Ci0gICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgTlNV
SW50ZWdlciBsaXN0SW5kZXg7Ci0gICAgTlNVSW50ZWdlciBpbnNlcnRMZW5ndGg7Ci0gICAgTlNV
SW50ZWdlciBpOwotICAgIE5TVUludGVnZXIgY291bnQ7Ci0gICAgTlNBcnJheSAqdGV4dExpc3Rz
OwotICAgIENHRmxvYXQgbWFya2VyTG9jYXRpb247Ci0gICAgQ0dGbG9hdCBsaXN0TG9jYXRpb247
Ci0gICAgQ0dGbG9hdCBwb2ludFNpemU7Ci0gICAgCi0gICAgaWYgKHJhbmdlLmxlbmd0aCA9PSAw
IHx8IHJhbmdlLmxvY2F0aW9uID49IHRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoTlNNYXhSYW5nZShyYW5nZSkgPiB0ZXh0TGVuZ3RoKQotICAgICAgICByYW5nZS5sZW5ndGgg
PSB0ZXh0TGVuZ3RoIC0gcmFuZ2UubG9jYXRpb247Ci0gICAgcGFyYWdyYXBoU3R5bGUgPSBbX2F0
dHJTdHIgYXR0cmlidXRlOk5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6cmFu
Z2UubG9jYXRpb24gZWZmZWN0aXZlUmFuZ2U6TlVMTF07Ci0gICAgaWYgKHBhcmFncmFwaFN0eWxl
KSB7Ci0gICAgICAgIHRleHRMaXN0cyA9IFtwYXJhZ3JhcGhTdHlsZSB0ZXh0TGlzdHNdOwotICAg
ICAgICBsaXN0SW5kZXggPSBbdGV4dExpc3RzIGluZGV4T2ZPYmplY3Q6bGlzdF07Ci0gICAgICAg
IGlmICh0ZXh0TGlzdHMgJiYgbGlzdEluZGV4ICE9IE5TTm90Rm91bmQpIHsKLSAgICAgICAgICAg
IGZvciAoTlNVSW50ZWdlciBpZHggPSByYW5nZS5sb2NhdGlvbjsgaWR4IDwgTlNNYXhSYW5nZShy
YW5nZSk7KSB7Ci0gICAgICAgICAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBbc3RyaW5nIHBhcmFn
cmFwaFJhbmdlRm9yUmFuZ2U6TlNNYWtlUmFuZ2UoaWR4LCAwKV07Ci0gICAgICAgICAgICAgICAg
cGFyYWdyYXBoU3R5bGUgPSBbX2F0dHJTdHIgYXR0cmlidXRlOk5TUGFyYWdyYXBoU3R5bGVBdHRy
aWJ1dGVOYW1lIGF0SW5kZXg6aWR4IGVmZmVjdGl2ZVJhbmdlOiZzdHlsZVJhbmdlXTsKLSAgICAg
ICAgICAgICAgICBmb250ID0gW19hdHRyU3RyIGF0dHJpYnV0ZTpOU0ZvbnRBdHRyaWJ1dGVOYW1l
IGF0SW5kZXg6aWR4IGVmZmVjdGl2ZVJhbmdlOk5VTExdOwotICAgICAgICAgICAgICAgIHBvaW50
U2l6ZSA9IGZvbnQgPyBbZm9udCBwb2ludFNpemVdIDogMTI7Ci0gICAgICAgICAgICAgICAgaWYg
KFtbcGFyYWdyYXBoU3R5bGUgdGV4dExpc3RzXSBjb3VudF0gPT0gbGlzdEluZGV4ICsgMSkgewot
ICAgICAgICAgICAgICAgICAgICBzdHJpbmdUb0luc2VydCA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiXHQlQFx0IiwgW2xpc3QgbWFya2VyRm9ySXRlbU51bWJlcjppdGVtTnVtKytdXTsK
LSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVuZ3RoID0gW3N0cmluZ1RvSW5zZXJ0IGxlbmd0
aF07Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJzVG9JbnNlcnQgPSBbUGxhdGZvcm1OU1RleHRM
aXN0IF9zdGFuZGFyZE1hcmtlckF0dHJpYnV0ZXNGb3JBdHRyaWJ1dGVzOltfYXR0clN0ciBhdHRy
aWJ1dGVzQXRJbmRleDpwYXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiBlZmZlY3RpdmVSYW5nZTpOVUxM
XV07Ci0KLSAgICAgICAgICAgICAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5S
YW5nZTpOU01ha2VSYW5nZShwYXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiwgMCkgd2l0aFN0cmluZzpz
dHJpbmdUb0luc2VydF07Ci0gICAgICAgICAgICAgICAgICAgIFtfYXR0clN0ciBzZXRBdHRyaWJ1
dGVzOmF0dHJzVG9JbnNlcnQgcmFuZ2U6TlNNYWtlUmFuZ2UocGFyYWdyYXBoUmFuZ2UubG9jYXRp
b24sIGluc2VydExlbmd0aCldOwotICAgICAgICAgICAgICAgICAgICByYW5nZS5sZW5ndGggKz0g
aW5zZXJ0TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhSYW5nZS5sZW5ndGgg
Kz0gaW5zZXJ0TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoUmFuZ2Uu
bG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAg
X2RvbVJhbmdlU3RhcnRJbmRleCArPSBpbnNlcnRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBuZXdTdHlsZSA9IFtwYXJhZ3JhcGhTdHlsZSBtdXRhYmxl
Q29weV07Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RMb2NhdGlvbiA9IChsaXN0SW5kZXggKyAx
KSAqIDM2OwotICAgICAgICAgICAgICAgICAgICBtYXJrZXJMb2NhdGlvbiA9IGxpc3RMb2NhdGlv
biAtIDI1OwotICAgICAgICAgICAgICAgICAgICBbbmV3U3R5bGUgc2V0Rmlyc3RMaW5lSGVhZElu
ZGVudDowXTsKLSAgICAgICAgICAgICAgICAgICAgW25ld1N0eWxlIHNldEhlYWRJbmRlbnQ6bGlz
dExvY2F0aW9uXTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjb3VudCA9IFtbbmV3U3R5
bGUgdGFiU3RvcHNdIGNvdW50XSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGkgPSAwLCB0YWJUb1JlbW92ZSA9IG5pbDsgIXRhYlRvUmVtb3ZlICYmIGkgPCBjb3VudDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiID0gW1tuZXdTdHlsZSB0YWJTdG9w
c10gb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3Rh
YiBsb2NhdGlvbl0gPD0gbGlzdExvY2F0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0YWJUb1JlbW92ZSA9IHRhYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0YWJUb1JlbW92ZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbbmV3U3R5bGUgcmVtb3ZlVGFiU3RvcDp0YWJdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRhYiA9IFtbUGxhdGZvcm1OU1RleHRU
YWIgYWxsb2NdIGluaXRXaXRoVHlwZTpOU0xlZnRUYWJTdG9wVHlwZSBsb2NhdGlvbjptYXJrZXJM
b2NhdGlvbl07Ci0gICAgICAgICAgICAgICAgICAgIFtuZXdTdHlsZSBhZGRUYWJTdG9wOnRhYl07
Ci0gICAgICAgICAgICAgICAgICAgIFt0YWIgcmVsZWFzZV07Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgICAgICAgICAgICAgICAgICB0YWIgPSBbW1BsYXRmb3JtTlNUZXh0VGFiIGFsbG9jXSBpbml0
V2l0aFRleHRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50TmF0dXJhbCBsb2NhdGlvbjpsaXN0TG9j
YXRpb24gb3B0aW9uczpuaWxdOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgdGFiID0gW1tQ
bGF0Zm9ybU5TVGV4dFRhYiBhbGxvY10gaW5pdFdpdGhUZXh0QWxpZ25tZW50Ok5TTmF0dXJhbFRl
eHRBbGlnbm1lbnQgbG9jYXRpb246bGlzdExvY2F0aW9uIG9wdGlvbnM6bmlsXTsKLSNlbmRpZgot
ICAgICAgICAgICAgICAgICAgICBbbmV3U3R5bGUgYWRkVGFiU3RvcDp0YWJdOwotICAgICAgICAg
ICAgICAgICAgICBbdGFiIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICBbX2F0dHJTdHIg
YWRkQXR0cmlidXRlOk5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lIHZhbHVlOm5ld1N0eWxl
IHJhbmdlOnBhcmFncmFwaFJhbmdlXTsKLSAgICAgICAgICAgICAgICAgICAgW25ld1N0eWxlIHJl
bGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWR4ID0g
TlNNYXhSYW5nZShwYXJhZ3JhcGhSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gc2tpcCBhbnkgZGVlcGVyLW5lc3RlZCBsaXN0cwotICAgICAg
ICAgICAgICAgICAgICBpZHggPSBOU01heFJhbmdlKHN0eWxlUmFuZ2UpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBIVE1MQ29u
dmVydGVyOjpfZXhpdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgTlNJbnRlZ2VyIGRlcHRoLCBO
U1VJbnRlZ2VyIHN0YXJ0SW5kZXgpCi17Ci0gICAgU3RyaW5nIGRpc3BsYXlWYWx1ZSA9IF9jYWNo
ZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5RGlzcGxheSk7Ci0g
ICAgTlNSYW5nZSByYW5nZSA9IE5TTWFrZVJhbmdlKHN0YXJ0SW5kZXgsIFtfYXR0clN0ciBsZW5n
dGhdIC0gc3RhcnRJbmRleCk7Ci0gICAgaWYgKHJhbmdlLmxlbmd0aCA+IDAgJiYgZWxlbWVudC5o
YXNUYWdOYW1lKGFUYWcpKSB7Ci0gICAgICAgIE5TU3RyaW5nICp1cmxTdHJpbmcgPSBlbGVtZW50
LmdldEF0dHJpYnV0ZShocmVmQXR0cik7Ci0gICAgICAgIE5TU3RyaW5nICpzdHJpcHBlZFN0cmlu
ZyA9IFt1cmxTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0
ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKLSAgICAgICAgaWYgKHVy
bFN0cmluZyAmJiBbdXJsU3RyaW5nIGxlbmd0aF0gPiAwICYmIHN0cmlwcGVkU3RyaW5nICYmIFtz
dHJpcHBlZFN0cmluZyBsZW5ndGhdID4gMCAmJiAhW3N0cmlwcGVkU3RyaW5nIGhhc1ByZWZpeDpA
IiMiXSkgewotICAgICAgICAgICAgTlNVUkwgKnVybCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jb21w
bGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7Ci0g
ICAgICAgICAgICBpZiAoIXVybCkKLSAgICAgICAgICAgICAgICB1cmwgPSBlbGVtZW50LmRvY3Vt
ZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHN0cmlw
cGVkU3RyaW5nKSk7Ci0gICAgICAgICAgICBpZiAoIXVybCkKLSAgICAgICAgICAgICAgICB1cmwg
PSBbTlNVUkwgX3dlYl9VUkxXaXRoU3RyaW5nOnN0cmlwcGVkU3RyaW5nIHJlbGF0aXZlVG9VUkw6
X2Jhc2VVUkxdOwotICAgICAgICAgICAgW19hdHRyU3RyIGFkZEF0dHJpYnV0ZTpOU0xpbmtBdHRy
aWJ1dGVOYW1lIHZhbHVlOnVybCA/IChpZCl1cmwgOiAoaWQpdXJsU3RyaW5nIHJhbmdlOnJhbmdl
XTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIV9mbGFncy5yZWFjaGVkRW5kICYmIF9jYWNo
ZXMtPmlzQmxvY2tFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgIFtfd3JpdGluZ0RpcmVjdGlv
bkFycmF5IHJlbW92ZUFsbE9iamVjdHNdOwotICAgICAgICBpZiAoZGlzcGxheVZhbHVlID09ICJ0
YWJsZS1jZWxsIiAmJiBbX3RleHRCbG9ja3MgY291bnRdID09IDApIHsKLSAgICAgICAgICAgIF9u
ZXdUYWJGb3JFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICB9IGVsc2UgaWYgKFtfdGV4dExpc3Rz
IGNvdW50XSA+IDAgJiYgZGlzcGxheVZhbHVlID09ICJibG9jayIgJiYgIWVsZW1lbnQuaGFzVGFn
TmFtZShsaVRhZykgJiYgIWVsZW1lbnQuaGFzVGFnTmFtZSh1bFRhZykgJiYgIWVsZW1lbnQuaGFz
VGFnTmFtZShvbFRhZykpIHsKLSAgICAgICAgICAgIF9uZXdMaW5lRm9yRWxlbWVudChlbGVtZW50
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIF9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50
KGVsZW1lbnQsIGVsZW1lbnQudGFnTmFtZSgpLCAocmFuZ2UubGVuZ3RoID09IDApLCBZRVMpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSBjb3VudF0g
PiAwKSB7Ci0gICAgICAgIFN0cmluZyBiaWRpID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5v
ZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7Ci0gICAgICAgIGlmIChiaWRpID09
ICJlbWJlZCIgfHwgYmlkaSA9PSAiYmlkaS1vdmVycmlkZSIpCi0gICAgICAgICAgICBbX3dyaXRp
bmdEaXJlY3Rpb25BcnJheSByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICB9Ci0gICAgcmFuZ2UgPSBO
U01ha2VSYW5nZShzdGFydEluZGV4LCBbX2F0dHJTdHIgbGVuZ3RoXSAtIHN0YXJ0SW5kZXgpOwot
ICAgIGlmIChkaXNwbGF5VmFsdWUgPT0gInRhYmxlIiAmJiBbX3RleHRUYWJsZXMgY291bnRdID4g
MCkgewotICAgICAgICBOU1RleHRUYWJsZSAqa2V5ID0gW190ZXh0VGFibGVzIGxhc3RPYmplY3Rd
OwotICAgICAgICBFbGVtZW50KiBmb290ZXIgPSBtX3RleHRUYWJsZUZvb3RlcnMuZ2V0KGtleSk7
Ci0gICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdIDwgW190ZXh0QmxvY2tzIGNvdW50
XSArIDEpCi0gICAgICAgICAgICBbX3RleHRCbG9ja3MgcmVtb3ZlTGFzdE9iamVjdF07Ci0gICAg
ICAgIGlmIChmb290ZXIpIHsKLSAgICAgICAgICAgIF90cmF2ZXJzZUZvb3Rlck5vZGUoKmZvb3Rl
ciwgZGVwdGggKyAxKTsKLSAgICAgICAgICAgIG1fdGV4dFRhYmxlRm9vdGVycy5yZW1vdmUoa2V5
KTsKLSAgICAgICAgfQotICAgICAgICBbX3RleHRUYWJsZXMgcmVtb3ZlTGFzdE9iamVjdF07Ci0g
ICAgICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgcmVtb3ZlTGFzdE9iamVjdF07Ci0gICAgICAgIFtf
dGV4dFRhYmxlUGFkZGluZ3MgcmVtb3ZlTGFzdE9iamVjdF07Ci0gICAgICAgIFtfdGV4dFRhYmxl
Um93cyByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICAgICAgW190ZXh0VGFibGVSb3dBcnJheXMgcmVt
b3ZlTGFzdE9iamVjdF07Ci0gICAgfSBlbHNlIGlmIChkaXNwbGF5VmFsdWUgPT0gInRhYmxlLXJv
dyIgJiYgW190ZXh0VGFibGVzIGNvdW50XSA+IDApIHsKLSAgICAgICAgTlNUZXh0VGFibGUgKnRh
YmxlID0gW190ZXh0VGFibGVzIGxhc3RPYmplY3RdOwotICAgICAgICBOU1RleHRUYWJsZUJsb2Nr
ICpibG9jazsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnJvd0FycmF5ID0gW190ZXh0VGFibGVS
b3dBcnJheXMgbGFzdE9iamVjdF0sICpwcmV2aW91c1Jvd0FycmF5OwotICAgICAgICBOU1VJbnRl
Z2VyIGksIGNvdW50OwotICAgICAgICBOU0ludGVnZXIgbnVtYmVyT2ZDb2x1bW5zID0gW3RhYmxl
IG51bWJlck9mQ29sdW1uc107Ci0gICAgICAgIE5TSW50ZWdlciBvcGVuQ29sdW1uOwotICAgICAg
ICBOU0ludGVnZXIgcm93TnVtYmVyID0gW1tfdGV4dFRhYmxlUm93cyBsYXN0T2JqZWN0XSBpbnRl
Z2VyVmFsdWVdOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICByb3dOdW1iZXIrKzsKLSAgICAg
ICAgICAgIHByZXZpb3VzUm93QXJyYXkgPSByb3dBcnJheTsKLSAgICAgICAgICAgIHJvd0FycmF5
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgICAgIGNvdW50ID0gW3ByZXZpb3Vz
Um93QXJyYXkgY291bnRdOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKLSAgICAgICAgICAgICAgICBibG9jayA9IFtwcmV2aW91c1Jvd0FycmF5IG9iamVjdEF0SW5k
ZXg6aV07Ci0gICAgICAgICAgICAgICAgaWYgKFtibG9jayBzdGFydGluZ0NvbHVtbl0gKyBbYmxv
Y2sgY29sdW1uU3Bhbl0gPiBudW1iZXJPZkNvbHVtbnMpIG51bWJlck9mQ29sdW1ucyA9IFtibG9j
ayBzdGFydGluZ0NvbHVtbl0gKyBbYmxvY2sgY29sdW1uU3Bhbl07Ci0gICAgICAgICAgICAgICAg
aWYgKFtibG9jayBzdGFydGluZ1Jvd10gKyBbYmxvY2sgcm93U3Bhbl0gPiByb3dOdW1iZXIpIFty
b3dBcnJheSBhZGRPYmplY3Q6YmxvY2tdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY291
bnQgPSBbcm93QXJyYXkgY291bnRdOwotICAgICAgICAgICAgb3BlbkNvbHVtbiA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGJs
b2NrID0gW3Jvd0FycmF5IG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgICAgICAgICAgaWYgKG9w
ZW5Db2x1bW4gPj0gW2Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSAmJiBvcGVuQ29sdW1uIDwgW2Jsb2Nr
IHN0YXJ0aW5nQ29sdW1uXSArIFtibG9jayBjb2x1bW5TcGFuXSkgb3BlbkNvbHVtbiA9IFtibG9j
ayBzdGFydGluZ0NvbHVtbl0gKyBbYmxvY2sgY29sdW1uU3Bhbl07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gd2hpbGUgKG9wZW5Db2x1bW4gPj0gbnVtYmVyT2ZDb2x1bW5zKTsKLSAgICAgICAg
aWYgKChOU1VJbnRlZ2VyKW51bWJlck9mQ29sdW1ucyA+IFt0YWJsZSBudW1iZXJPZkNvbHVtbnNd
KQotICAgICAgICAgICAgW3RhYmxlIHNldE51bWJlck9mQ29sdW1uczpudW1iZXJPZkNvbHVtbnNd
OwotICAgICAgICBbX3RleHRUYWJsZVJvd3MgcmVtb3ZlTGFzdE9iamVjdF07Ci0gICAgICAgIFtf
dGV4dFRhYmxlUm93cyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOnJvd051
bWJlcl1dOwotICAgICAgICBbX3RleHRUYWJsZVJvd0FycmF5cyByZW1vdmVMYXN0T2JqZWN0XTsK
LSAgICAgICAgW190ZXh0VGFibGVSb3dBcnJheXMgYWRkT2JqZWN0OnJvd0FycmF5XTsKLSAgICAg
ICAgaWYgKFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBjb3VudF0gPiAwKQotICAgICAg
ICAgICAgW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3JzIHJlbW92ZUxhc3RPYmplY3RdOwot
ICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1jZWxsIiAmJiBbX3RleHRCbG9j
a3MgY291bnRdID4gMCkgewotICAgICAgICB3aGlsZSAoW190ZXh0VGFibGVzIGNvdW50XSA+IFtf
dGV4dEJsb2NrcyBjb3VudF0pIHsKLSAgICAgICAgICAgIFtfdGV4dFRhYmxlcyByZW1vdmVMYXN0
T2JqZWN0XTsKLSAgICAgICAgICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgcmVtb3ZlTGFzdE9iamVj
dF07Ci0gICAgICAgICAgICBbX3RleHRUYWJsZVBhZGRpbmdzIHJlbW92ZUxhc3RPYmplY3RdOwot
ICAgICAgICAgICAgW190ZXh0VGFibGVSb3dzIHJlbW92ZUxhc3RPYmplY3RdOwotICAgICAgICAg
ICAgW190ZXh0VGFibGVSb3dBcnJheXMgcmVtb3ZlTGFzdE9iamVjdF07Ci0gICAgICAgIH0KLSAg
ICAgICAgW190ZXh0QmxvY2tzIHJlbW92ZUxhc3RPYmplY3RdOwotICAgIH0gZWxzZSBpZiAoKGVs
ZW1lbnQuaGFzVGFnTmFtZSh1bFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKG9sVGFnKSkgJiYg
W190ZXh0TGlzdHMgY291bnRdID4gMCkgewotICAgICAgICBOU1RleHRMaXN0ICpsaXN0ID0gW190
ZXh0TGlzdHMgbGFzdE9iamVjdF07Ci0gICAgICAgIF9hZGRNYXJrZXJzVG9MaXN0KGxpc3QsIHJh
bmdlKTsKLSAgICAgICAgW190ZXh0TGlzdHMgcmVtb3ZlTGFzdE9iamVjdF07Ci0gICAgfSBlbHNl
IGlmIChlbGVtZW50Lmhhc1RhZ05hbWUocVRhZykpIHsKLSAgICAgICAgX2FkZFF1b3RlRm9yRWxl
bWVudChlbGVtZW50LCBOTywgLS1fcXVvdGVMZXZlbCk7Ci0gICAgfSBlbHNlIGlmIChlbGVtZW50
Lmhhc1RhZ05hbWUoc3BhblRhZykpIHsKLSAgICAgICAgTlNTdHJpbmcgKmNsYXNzTmFtZSA9IGVs
ZW1lbnQuZ2V0QXR0cmlidXRlKGNsYXNzQXR0cik7Ci0gICAgICAgIE5TTXV0YWJsZVN0cmluZyAq
bXV0YWJsZVN0cmluZzsKLSAgICAgICAgTlNVSW50ZWdlciBpLCBjb3VudCA9IDA7Ci0gICAgICAg
IHVuaWNoYXIgYzsKLSAgICAgICAgaWYgKFtAIkFwcGxlLWNvbnZlcnRlZC1zcGFjZSIgaXNFcXVh
bFRvU3RyaW5nOmNsYXNzTmFtZV0pIHsKLSAgICAgICAgICAgIG11dGFibGVTdHJpbmcgPSBbX2F0
dHJTdHIgbXV0YWJsZVN0cmluZ107Ci0gICAgICAgICAgICBmb3IgKGkgPSByYW5nZS5sb2NhdGlv
bjsgaSA8IE5TTWF4UmFuZ2UocmFuZ2UpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjID0gW211
dGFibGVTdHJpbmcgY2hhcmFjdGVyQXRJbmRleDppXTsKLSAgICAgICAgICAgICAgICBpZiAoMHhh
MCA9PSBjKQotICAgICAgICAgICAgICAgICAgICBbbXV0YWJsZVN0cmluZyByZXBsYWNlQ2hhcmFj
dGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoaSwgMSkgd2l0aFN0cmluZzpAIiAiXTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChbQCJBcHBsZS1jb252ZXJ0ZWQtdGFiIiBpc0VxdWFs
VG9TdHJpbmc6Y2xhc3NOYW1lXSkgewotICAgICAgICAgICAgbXV0YWJsZVN0cmluZyA9IFtfYXR0
clN0ciBtdXRhYmxlU3RyaW5nXTsKLSAgICAgICAgICAgIGZvciAoaSA9IHJhbmdlLmxvY2F0aW9u
OyBpIDwgTlNNYXhSYW5nZShyYW5nZSk7IGkrKykgewotICAgICAgICAgICAgICAgIE5TUmFuZ2Ug
cmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICAgICAgICAg
ICAgICBjID0gW211dGFibGVTdHJpbmcgY2hhcmFjdGVyQXRJbmRleDppXTsKLSAgICAgICAgICAg
ICAgICBpZiAoJyAnID09IGMgfHwgMHhhMCA9PSBjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
dW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSA0IHx8IGkgKyAxID49IE5T
TWF4UmFuZ2UocmFuZ2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VUb1JlcGxhY2Ug
PSBOU01ha2VSYW5nZShpICsgMSAtIGNvdW50LCBjb3VudCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UoaSAtIGNvdW50LCBjb3VudCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5s
ZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFttdXRhYmxlU3RyaW5nIHJlcGxhY2VD
aGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVwbGFjZSB3aXRoU3RyaW5nOkAiXHQiXTsKLSAgICAg
ICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoIC09IChyYW5nZVRvUmVwbGFjZS5sZW5ndGggLSAx
KTsKLSAgICAgICAgICAgICAgICAgICAgaSAtPSAocmFuZ2VUb1JlcGxhY2UubGVuZ3RoIC0gMSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChOU01heFJhbmdlKHJhbmdlVG9SZXBsYWNlKSA8PSBf
ZG9tUmFuZ2VTdGFydEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfZG9tUmFuZ2VT
dGFydEluZGV4IC09IChyYW5nZVRvUmVwbGFjZS5sZW5ndGggLSAxKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSBy
YW5nZVRvUmVwbGFjZS5sb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzVGV4dChD
aGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQotewotICAgIE5TVUludGVnZXIgdGV4dExlbmd0
aCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAgIHVuaWNoYXIgbGFzdENoYXIgPSAodGV4dExlbmd0
aCA+IDApID8gW1tfYXR0clN0ciBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6dGV4dExlbmd0aCAt
IDFdIDogJ1xuJzsKLSAgICBCT09MIHN1cHByZXNzTGVhZGluZ1NwYWNlID0gKChfZmxhZ3MuaXNT
b2Z0ICYmIGxhc3RDaGFyID09ICcgJykgfHwgbGFzdENoYXIgPT0gJ1xuJyB8fCBsYXN0Q2hhciA9
PSAnXHInIHx8IGxhc3RDaGFyID09ICdcdCcgfHwgbGFzdENoYXIgPT0gTlNQYXJhZ3JhcGhTZXBh
cmF0b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFjdGVyIHx8
IGxhc3RDaGFyID09IE5TRm9ybUZlZWRDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gV2ViTmV4dExp
bmVDaGFyYWN0ZXIpOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0
ZXh0TGVuZ3RoLCAwKTsKLSAgICBDRk11dGFibGVTdHJpbmdSZWYgbXV0c3RyID0gTlVMTDsKLQot
ICAgIFN0cmluZyBvcmlnaW5hbFN0cmluZyA9IGNoYXJhY3RlckRhdGEuZGF0YSgpOwotICAgIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBvcmlnaW5h
bFN0cmluZy5sZW5ndGgoKTsKLSAgICBpZiAoJmNoYXJhY3RlckRhdGEgPT0gbV9yYW5nZS0+c3Rh
cnRDb250YWluZXIoKSkgewotICAgICAgICBzdGFydE9mZnNldCA9IG1fcmFuZ2UtPnN0YXJ0T2Zm
c2V0KCk7Ci0gICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsK
LSAgICAgICAgX2ZsYWdzLnJlYWNoZWRTdGFydCA9IFlFUzsKLSAgICB9Ci0gICAgaWYgKCZjaGFy
YWN0ZXJEYXRhID09IG1fcmFuZ2UtPmVuZENvbnRhaW5lcigpKSB7Ci0gICAgICAgIGVuZE9mZnNl
dCA9IG1fcmFuZ2UtPmVuZE9mZnNldCgpOwotICAgICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlF
UzsKLSAgICB9Ci0gICAgaWYgKChzdGFydE9mZnNldCA+IDAgfHwgZW5kT2Zmc2V0IDwgb3JpZ2lu
YWxTdHJpbmcubGVuZ3RoKCkpICYmIGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkKLSAgICAgICAg
b3JpZ2luYWxTdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKLSAgICBTdHJpbmcgb3V0cHV0U3RyaW5nID0gb3JpZ2lu
YWxTdHJpbmc7Ci0KLSAgICAvLyBGSVhNRTogVXNlIFJlbmRlclRleHQncyBjb250ZW50IGluc3Rl
YWQuCi0gICAgYm9vbCB3YXNTcGFjZSA9IGZhbHNlOwotICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0
eVZhbHVlRm9yTm9kZShjaGFyYWN0ZXJEYXRhLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UpLnN0YXJ0
c1dpdGgoInByZSIpKSB7Ci0gICAgICAgIGlmICh0ZXh0TGVuZ3RoICYmIG9yaWdpbmFsU3RyaW5n
Lmxlbmd0aCgpICYmIF9mbGFncy5pc1NvZnQpIHsKLSAgICAgICAgICAgIHVuaWNoYXIgYyA9IG9y
aWdpbmFsU3RyaW5nLmF0KDApOwotICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdc
cicgfHwgYyA9PSBOU1BhcmFncmFwaFNlcGFyYXRvckNoYXJhY3RlciB8fCBjID09IE5TTGluZVNl
cGFyYXRvckNoYXJhY3RlciB8fCBjID09IE5TRm9ybUZlZWRDaGFyYWN0ZXIgfHwgYyA9PSBXZWJO
ZXh0TGluZUNoYXJhY3RlcikKLSAgICAgICAgICAgICAgICByYW5nZVRvUmVwbGFjZSA9IE5TTWFr
ZVJhbmdlKHRleHRMZW5ndGggLSAxLCAxKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGNvdW50ID0gb3JpZ2luYWxTdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIGJv
b2wgd2FzTGVhZGluZyA9IHRydWU7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAg
IFVDaGFyIGMgPSBvcmlnaW5hbFN0cmluZy5hdChpKTsKLSAgICAgICAgICAgIGJvb2wgaXNXaGl0
ZXNwYWNlID0gYyA9PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcdCcg
fHwgYyA9PSAweGMgfHwgYyA9PSAweDIwMGI7Ci0gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNl
KQotICAgICAgICAgICAgICAgIHdhc1NwYWNlID0gKCF3YXNMZWFkaW5nIHx8ICFzdXBwcmVzc0xl
YWRpbmdTcGFjZSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod2Fz
U3BhY2UpCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgd2FzU3BhY2UgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICB3YXNMZWFkaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdhc1NwYWNlKQotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJyAnKTsKLSAgICAgICAgb3V0cHV0U3RyaW5nID0gYnVpbGRlci50b1N0cmluZygpOwot
ICAgIH0KLQotICAgIGlmIChvdXRwdXRTdHJpbmcubGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5n
IHRleHRUcmFuc2Zvcm0gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjaGFyYWN0ZXJE
YXRhLCBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm0pOwotICAgICAgICBpZiAodGV4dFRyYW5zZm9y
bS5sZW5ndGgoKSkgewotICAgICAgICAgICAgaWYgKHRleHRUcmFuc2Zvcm0gPT0gImNhcGl0YWxp
emUiKSB7Ly8gRklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LgotICAgICAgICAg
ICAgICAgIE5TU3RyaW5nICp0ZW1wb3JhcnlTdHJpbmcgPSBvdXRwdXRTdHJpbmc7Ci0gICAgICAg
ICAgICAgICAgb3V0cHV0U3RyaW5nID0gW3RlbXBvcmFyeVN0cmluZyBjYXBpdGFsaXplZFN0cmlu
Z107Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gInVwcGVyY2FzZSIp
Ci0gICAgICAgICAgICAgICAgb3V0cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLnVwcGVyKCk7Ci0g
ICAgICAgICAgICBlbHNlIGlmICh0ZXh0VHJhbnNmb3JtID09ICJsb3dlcmNhc2UiKQotICAgICAg
ICAgICAgICAgIG91dHB1dFN0cmluZyA9IG91dHB1dFN0cmluZy5sb3dlcigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVw
bGFjZSB3aXRoU3RyaW5nOm91dHB1dFN0cmluZ107Ci0gICAgICAgIHJhbmdlVG9SZXBsYWNlLmxl
bmd0aCA9IG91dHB1dFN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgaWYgKHJhbmdlVG9SZXBsYWNl
Lmxlbmd0aCkKLSAgICAgICAgICAgIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmFnZ3JlZ2F0ZWRB
dHRyaWJ1dGVzRm9yQW5jZXN0b3JzKGNoYXJhY3RlckRhdGEpIHJhbmdlOnJhbmdlVG9SZXBsYWNl
XTsKLSAgICAgICAgX2ZsYWdzLmlzU29mdCA9IHdhc1NwYWNlOwotICAgIH0KLSAgICBpZiAobXV0
c3RyKQotICAgICAgICBDRlJlbGVhc2UobXV0c3RyKTsKLX0KLQotdm9pZCBIVE1MQ29udmVydGVy
OjpfdHJhdmVyc2VOb2RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGRlcHRoLCBib29sIGVtYmVkZGVk
KQotewotICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiAhX2NhY2hlcy0+aXNBbmNlc3RvcnNPZlN0YXJ0VG9C
ZUNvbnZlcnRlZChub2RlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQgPSAwOwotICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYOwotICAgIGJvb2wg
aXNTdGFydCA9IGZhbHNlOwotICAgIGJvb2wgaXNFbmQgPSBmYWxzZTsKLSAgICBpZiAoJm5vZGUg
PT0gbV9yYW5nZS0+c3RhcnRDb250YWluZXIoKSkgewotICAgICAgICBzdGFydE9mZnNldCA9IG1f
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgICAgIGlzU3RhcnQgPSB0cnVlOwotICAgICAgICBf
ZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOwotICAgIH0KLSAgICBpZiAoJm5vZGUgPT0gbV9yYW5n
ZS0+ZW5kQ29udGFpbmVyKCkpIHsKLSAgICAgICAgZW5kT2Zmc2V0ID0gbV9yYW5nZS0+ZW5kT2Zm
c2V0KCk7Ci0gICAgICAgIGlzRW5kID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGUu
aXNEb2N1bWVudE5vZGUoKSB8fCBub2RlLmlzRG9jdW1lbnRGcmFnbWVudCgpKSB7Ci0gICAgICAg
IE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgY2hpbGQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzU3RhcnQgJiYgaSA9PSBz
dGFydE9mZnNldCkKLSAgICAgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRy
U3RyIGxlbmd0aF07Ci0gICAgICAgICAgICBpZiAoKCFpc1N0YXJ0IHx8IHN0YXJ0T2Zmc2V0IDw9
IGkpICYmICghaXNFbmQgfHwgZW5kT2Zmc2V0ID4gaSkpCi0gICAgICAgICAgICAgICAgX3RyYXZl
cnNlTm9kZSgqY2hpbGQsIGRlcHRoICsgMSwgZW1iZWRkZWQpOwotICAgICAgICAgICAgaWYgKGlz
RW5kICYmIGkgKyAxID49IGVuZE9mZnNldCkKLSAgICAgICAgICAgICAgICBfZmxhZ3MucmVhY2hl
ZEVuZCA9IFlFUzsKLSAgICAgICAgICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAg
ICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChfZW50
ZXJFbGVtZW50KGVsZW1lbnQsIGVtYmVkZGVkKSkgewotICAgICAgICAgICAgTlNVSW50ZWdlciBz
dGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgICAgICAgICBpZiAoX3Byb2Nlc3NF
bGVtZW50KGVsZW1lbnQsIGRlcHRoKSkgewotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0g
bm9kZS5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAw
OyBjaGlsZDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1N0YXJ0ICYmIGkgPT0g
c3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4
ID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoIWlzU3RhcnQg
fHwgc3RhcnRPZmZzZXQgPD0gaSkgJiYgKCFpc0VuZCB8fCBlbmRPZmZzZXQgPiBpKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIF90cmF2ZXJzZU5vZGUoKmNoaWxkLCBkZXB0aCArIDEsIGVtYmVk
ZGVkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW5kICYmIGkgKyAxID49IGVuZE9mZnNl
dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoX2ZsYWdzLnJlYWNoZWRFbmQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgX2V4aXRFbGVtZW50
KGVsZW1lbnQsIGRlcHRoLCBzdGFydEluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAobm9kZS5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgIF9wcm9j
ZXNzVGV4dCh0b0NoYXJhY3RlckRhdGEobm9kZSkpOwotCi0gICAgaWYgKGlzRW5kKQotICAgICAg
ICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKLX0KLQotdm9pZCBIVE1MQ29udmVydGVyOjpfdHJh
dmVyc2VGb290ZXJOb2RlKEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGRlcHRoKQotewotICAg
IGlmIChfZmxhZ3MucmVhY2hlZEVuZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghX2ZsYWdz
LnJlYWNoZWRTdGFydCAmJiAhX2NhY2hlcy0+aXNBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRl
ZChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc3RhcnRPZmZzZXQg
PSAwOwotICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYOwotICAgIGJvb2wgaXNTdGFy
dCA9IGZhbHNlOwotICAgIGJvb2wgaXNFbmQgPSBmYWxzZTsKLSAgICBpZiAoJmVsZW1lbnQgPT0g
bV9yYW5nZS0+c3RhcnRDb250YWluZXIoKSkgewotICAgICAgICBzdGFydE9mZnNldCA9IG1fcmFu
Z2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgICAgIGlzU3RhcnQgPSB0cnVlOwotICAgICAgICBfZmxh
Z3MucmVhY2hlZFN0YXJ0ID0gWUVTOwotICAgIH0KLSAgICBpZiAoJmVsZW1lbnQgPT0gbV9yYW5n
ZS0+ZW5kQ29udGFpbmVyKCkpIHsKLSAgICAgICAgZW5kT2Zmc2V0ID0gbV9yYW5nZS0+ZW5kT2Zm
c2V0KCk7Ci0gICAgICAgIGlzRW5kID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKF9lbnRl
ckVsZW1lbnQoZWxlbWVudCwgWUVTKSkgewotICAgICAgICBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXgg
PSBbX2F0dHJTdHIgbGVuZ3RoXTsKLSAgICAgICAgaWYgKF9wcm9jZXNzRWxlbWVudChlbGVtZW50
LCBkZXB0aCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gZWxlbWVudC5maXJzdENoaWxk
KCk7Ci0gICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGNoaWxkOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaXNTdGFydCAmJiBpID09IHN0YXJ0T2Zmc2V0KQotICAgICAgICAg
ICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAg
ICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBpKSAmJiAoIWlzRW5k
IHx8IGVuZE9mZnNldCA+IGkpKQotICAgICAgICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKCpj
aGlsZCwgZGVwdGggKyAxLCB0cnVlIC8qIGVtYmVkZGVkICovKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0KQotICAgICAgICAgICAgICAgICAgICBfZmxh
Z3MucmVhY2hlZEVuZCA9IFlFUzsKLSAgICAgICAgICAgICAgICBpZiAoX2ZsYWdzLnJlYWNoZWRF
bmQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBfZXhpdEVs
ZW1lbnQoZWxlbWVudCwgZGVwdGgsIHN0YXJ0SW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChpc0VuZCkKLSAgICAgICAgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7Ci19Ci0KLXZvaWQg
SFRNTENvbnZlcnRlcjo6X2FkanVzdFRyYWlsaW5nTmV3bGluZSgpCi17Ci0gICAgTlNVSW50ZWdl
ciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgdW5pY2hhciBsYXN0Q2hhciA9
ICh0ZXh0TGVuZ3RoID4gMCkgPyBbW19hdHRyU3RyIHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDp0
ZXh0TGVuZ3RoIC0gMV0gOiAwOwotICAgIEJPT0wgYWxyZWFkeUhhc1RyYWlsaW5nTmV3bGluZSA9
IChsYXN0Q2hhciA9PSAnXG4nIHx8IGxhc3RDaGFyID09ICdccicgfHwgbGFzdENoYXIgPT0gTlNQ
YXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gTlNMaW5lU2VwYXJhdG9y
Q2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IFdlYk5leHRMaW5lQ2hhcmFjdGVyKTsKLSAgICBpZiAo
X2ZsYWdzLmhhc1RyYWlsaW5nTmV3bGluZSAmJiAhYWxyZWFkeUhhc1RyYWlsaW5nTmV3bGluZSkK
LSAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSh0
ZXh0TGVuZ3RoLCAwKSB3aXRoU3RyaW5nOkAiXG4iXTsKLX0KLQotTm9kZSogSFRNTENvbnZlcnRl
ckNhY2hlczo6Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChjb25zdCBSYW5nZSYg
cmFuZ2UpCi17Ci0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS5jb21tb25BbmNlc3Rv
ckNvbnRhaW5lcihBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBOb2RlKiBhbmNlc3RvciA9IHJh
bmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0KLSAgICB3aGlsZSAoYW5jZXN0b3IpIHsKLSAgICAgICAg
bV9hbmNlc3RvcnNVbmRlckNvbW1vbkFuY2VzdG9yLmFkZChhbmNlc3Rvcik7Ci0gICAgICAgIGlm
IChhbmNlc3RvciA9PSBjb21tb25BbmNlc3RvcikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGNvbW1vbkFuY2VzdG9yOwotfQotCi0jaWYgIVBMQVRGT1JNKElPUykKLQotc3RhdGljIE5TRmls
ZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yVVJMKERvY3VtZW50TG9hZGVyICpkYXRhU291cmNlLCBO
U1VSTCAqVVJMKQotewotICAgIGlmIChbVVJMIGlzRmlsZVVSTF0pCi0gICAgICAgIHJldHVybiBb
W1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVSTDpbVVJMIFVSTEJ5UmVzb2x2aW5nU3lt
bGlua3NJblBhdGhdIG9wdGlvbnM6MCBlcnJvcjpudWxscHRyXSBhdXRvcmVsZWFzZV07Ci0KLSAg
ICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IGRhdGFTb3VyY2UtPnN1YnJlc291
cmNlKFVSTCk7Ci0gICAgaWYgKHJlc291cmNlKSB7Ci0gICAgICAgIE5TRmlsZVdyYXBwZXIgKndy
YXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVu
dHM6cmVzb3VyY2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldIGF1dG9yZWxlYXNlXTsK
LSAgICAgICAgTlNTdHJpbmcgKmZpbGVuYW1lID0gcmVzb3VyY2UtPnJlc3BvbnNlKCkuc3VnZ2Vz
dGVkRmlsZW5hbWUoKTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZSB8fCAhW2ZpbGVuYW1lIGxlbmd0
aF0pCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lV2l0aE1JTUVUeXBl
KHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPm1pbWVUeXBlKCkpOwotICAgICAgICBbd3JhcHBl
ciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07Ci0gICAgICAgIHJldHVybiB3cmFwcGVy
OwotICAgIH0KLSAgICAKLSAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW1tOU011
dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpVUkxdOwotCi0gICAgTlNDYWNoZWRV
UkxSZXNwb25zZSAqY2FjaGVkUmVzcG9uc2UgPSBbW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVd
IGNhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdDpyZXF1ZXN0XTsKLSAgICBbcmVxdWVzdCByZWxlYXNl
XTsKLSAgICAKLSAgICBpZiAoY2FjaGVkUmVzcG9uc2UpIHsKLSAgICAgICAgTlNGaWxlV3JhcHBl
ciAqd3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhD
b250ZW50czpbY2FjaGVkUmVzcG9uc2UgZGF0YV1dIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgW3dy
YXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6W1tjYWNoZWRSZXNwb25zZSByZXNwb25zZV0gc3Vn
Z2VzdGVkRmlsZW5hbWVdXTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBuaWw7Ci19Ci0KLXN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZv
ckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVy
ID0gbmlsOwotICAgIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0ciA9IGVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShzcmNBdHRyKTsKLSAgICBpZiAoIWF0dHIuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IE5TVVJMICpVUkwgPSBlbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKGF0dHIpOwotICAg
ICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGVsZW1lbnQtPmRvY3VtZW50KCkubG9h
ZGVyKCkpCi0gICAgICAgICAgICB3cmFwcGVyID0gZmlsZVdyYXBwZXJGb3JVUkwobG9hZGVyLCBV
UkwpOwotICAgIH0KLSAgICBpZiAoIXdyYXBwZXIpIHsKLSAgICAgICAgUmVuZGVySW1hZ2UqIHJl
bmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYg
KHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpICYmICFyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+ZXJy
b3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICB3cmFwcGVyID0gW1tOU0ZpbGVXcmFwcGVyIGFs
bG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6KE5TRGF0YSAqKShyZW5kZXJlci0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlciktPmdldFRJRkZSZXByZXNlbnRh
dGlvbigpKV07Ci0gICAgICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpAImlt
YWdlLnRpZmYiXTsKLSAgICAgICAgICAgIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIAotLy8gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBtb3JlIEhUTUwgZmVh
dHVyZXMgdGhhbiB0aGUgZWRpdGluZyB2YXJpYW50IGJlbG93LCBzdWNoIGFzIHRhYmxlcy4KLU5T
QXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2Up
Ci17Ci0gICAgSFRNTENvbnZlcnRlciBjb252ZXJ0ZXIocmFuZ2UpOwotICAgIHJldHVybiBjb252
ZXJ0ZXIuY29udmVydCgpOwotfQotICAgIAotI2lmICFQTEFURk9STShJT1MpCi0vLyBUaGlzIGZ1
bmN0aW9uIHVzZXMgVGV4dEl0ZXJhdG9yLCB3aGljaCBtYWtlcyBvZmZzZXRzIGluIGl0cyByZXN1
bHQgY29tcGF0aWJsZSB3aXRoIEhUTUwgZWRpdGluZy4KLU5TQXR0cmlidXRlZFN0cmluZyAqZWRp
dGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlKQotewotICAgIE5TRm9u
dE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
OwotICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07Ci0gICAgTlNVSW50ZWdlciBzdHJpbmdMZW5ndGgg
PSAwOwotICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRycyA9IGFkb3B0TlMo
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBmb3IgKFRleHRJdGVy
YXRvciBpdCgmcmFuZ2UpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxSYW5nZT4gY3VycmVudFRleHRSYW5nZSA9IGl0LnJhbmdlKCk7Ci0gICAgICAgIE5vZGUq
IHN0YXJ0Q29udGFpbmVyID0gY3VycmVudFRleHRSYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAg
ICAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gY3VycmVudFRleHRSYW5nZS0+ZW5kQ29udGFpbmVy
KCk7Ci0gICAgICAgIGludCBzdGFydE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2UtPnN0YXJ0T2Zm
c2V0KCk7Ci0gICAgICAgIGludCBlbmRPZmZzZXQgPSBjdXJyZW50VGV4dFJhbmdlLT5lbmRPZmZz
ZXQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdGFydENvbnRhaW5lciA9PSBlbmRDb250YWlu
ZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAtIDEpKSB7Ci0gICAgICAgICAgICBOb2Rl
KiBub2RlID0gc3RhcnRDb250YWluZXItPmNoaWxkTm9kZShzdGFydE9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGltZ1RhZykpIHsKLSAgICAgICAgICAg
ICAgICBOU0ZpbGVXcmFwcGVyKiBmaWxlV3JhcHBlciA9IGZpbGVXcmFwcGVyRm9yRWxlbWVudCh0
b0VsZW1lbnQobm9kZSkpOwotICAgICAgICAgICAgICAgIE5TVGV4dEF0dGFjaG1lbnQqIGF0dGFj
aG1lbnQgPSBbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRmlsZVdyYXBwZXI6Zmls
ZVdyYXBwZXJdOwotICAgICAgICAgICAgICAgIFtzdHJpbmcgYXBwZW5kQXR0cmlidXRlZFN0cmlu
ZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDphdHRh
Y2htZW50XV07Ci0gICAgICAgICAgICAgICAgW2F0dGFjaG1lbnQgcmVsZWFzZV07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgY3VycmVudFRleHRMZW5ndGggPSBpdC50
ZXh0KCkubGVuZ3RoKCk7Ci0gICAgICAgIGlmICghY3VycmVudFRleHRMZW5ndGgpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3RhcnRD
b250YWluZXItPnJlbmRlcmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgICAg
IGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIGlmIChzdHlsZS50
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUpCi0gICAg
ICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdl
cjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0
ZU5hbWVdOwotICAgICAgICBpZiAoc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSAmIFRl
eHREZWNvcmF0aW9uTGluZVRocm91Z2gpCi0gICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2Jq
ZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBm
b3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKE5T
Rm9udCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKLSAg
ICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNl
dE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6TlNGb3JlZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSkKLSAgICAgICAgICAg
IFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHJl
bW92ZU9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotCi0gICAg
ICAgIFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKHN0cmluZ0xl
bmd0aCwgMCkgd2l0aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWlu
ZygpLmdldCgpXTsKLSAgICAgICAgW3N0cmluZyBzZXRBdHRyaWJ1dGVzOmF0dHJzLmdldCgpIHJh
bmdlOk5TTWFrZVJhbmdlKHN0cmluZ0xlbmd0aCwgY3VycmVudFRleHRMZW5ndGgpXTsKLSAgICAg
ICAgc3RyaW5nTGVuZ3RoICs9IGN1cnJlbnRUZXh0TGVuZ3RoOwotICAgIH0KLQotICAgIHJldHVy
biBbc3RyaW5nIGF1dG9yZWxlYXNlXTsKLX0KLSNlbmRpZgotICAgIAotfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>