<?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>173665</bug_id>
          
          <creation_ts>2017-06-21 13:59:37 -0700</creation_ts>
          <short_desc>REGRESSION(r218646): It is breaking release ASAN build (Requested by youenn on #webkit).</short_desc>
          <delta_ts>2017-06-21 14:01:52 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>173656</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321616</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-21 13:59:37 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/218646 broke the build:
It is breaking release ASAN build (Requested by youenn 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>1321619</commentid>
    <comment_count>1</comment_count>
      <attachid>313549</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-21 13:59:50 -0700</bug_when>
    <thetext>Created attachment 313549
ROLLOUT of r218646

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>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313549</attachid>
            <date>2017-06-21 13:59:50 -0700</date>
            <delta_ts>2017-06-21 14:01:17 -0700</delta_ts>
            <desc>ROLLOUT of r218646</desc>
            <filename>bug-173665-20170621165949.patch</filename>
            <type>text/plain</type>
            <size>712466</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBlZGU0NTJkNDBmMGE4YjZmMjcwOTQzZWU0MDdlMjU5NDk3ZTQ3YzA2Li41Y2Q2
NDhhMDY2ZWYxYjMwYmM3NTc0MDZkNTE2ZWUyZTYzZjUwNjRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wNi0yMSAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjIxODY0Ni4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MzY2NQorCisgICAgICAgIEl0IGlzIGJyZWFraW5nIHJlbGVhc2UgQVNBTiBi
dWlsZCAoUmVxdWVzdGVkIGJ5IHlvdWVubiBvbgorICAgICAgICAjd2Via2l0KS4KKworICAgICAg
ICBSZXZlcnRlZCBjaGFuZ2VzZXQ6CisKKyAgICAgICAgIlJlbW92ZSBleHBhdCBzb3VyY2UgY29k
ZSBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0YyIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzY1NgorICAgICAgICBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8yMTg2NDYKKwogMjAxNy0wNi0yMSAgWW91ZW5uIEZhYmxldCAg
PHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGV4cGF0IHNvdXJjZSBjb2RlIGZy
b20gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L0JVSUxELmduIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9CVUlMRC5nbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMmMyZDBjNjM3YzZkOGEyNDgyMDQ1NTFjMzQ2YWQyZGU0ZjRjMDA1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9leHBhdC9CVUlMRC5nbgpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCitpbXBvcnQoIi8vYnVpbGQvY29u
ZmlnL2Nocm9tZWNhc3RfYnVpbGQuZ25pIikKK2ltcG9ydCgiLy90ZXN0aW5nL2xpYmZ1enplci9m
dXp6ZXJfdGVzdC5nbmkiKQorCisjIE9uIExpbnV4LCB3ZSBpbXBsaWNpdGx5IGFscmVhZHkgZGVw
ZW5kIG9uIGV4cGF0IHZpYSBmb250Y29uZmlnOworIyBsZXQncyBub3QgcHVsbCBpdCBpbiB0d2lj
ZS4KKyMgQ2hyb21lY2FzdCBkb2Vzbid0IHNoaXAgZXhwYXQgYXMgYSBzeXN0ZW0gbGlicmFyeS4K
KyMgTGliZnV6emVyIGFuZCBBRkwgbmVlZCB0byBidWlsZCBsaWJyYXJ5IGZyb20gc291cmNlcy4K
K2lmIChpc19saW51eCAmJiAhaXNfY2hyb21lY2FzdCAmJiAhdXNlX2xpYmZ1enplciAmJiAhdXNl
X2FmbCkgeworICBjb25maWcoImV4cGF0X2NvbmZpZyIpIHsKKyAgICBsaWJzID0gWyAiZXhwYXQi
IF0KKyAgfQorCisgIGdyb3VwKCJleHBhdCIpIHsKKyAgICBwdWJsaWNfY29uZmlncyA9IFsgIjpl
eHBhdF9jb25maWciIF0KKyAgfQorfSBlbHNlIHsKKyAgY29uZmlnKCJleHBhdF9jb25maWciKSB7
CisgICAgaW5jbHVkZV9kaXJzID0gWyAiZmlsZXMvbGliIiBdCisgICAgZGVmaW5lcyA9IFsgIlhN
TF9TVEFUSUMiIF0KKyAgfQorCisgIHN0YXRpY19saWJyYXJ5KCJleHBhdCIpIHsKKyAgICBzb3Vy
Y2VzID0gWworICAgICAgImZpbGVzL2xpYi9leHBhdC5oIiwKKyAgICAgICJmaWxlcy9saWIveG1s
cGFyc2UuYyIsCisgICAgICAiZmlsZXMvbGliL3htbHJvbGUuYyIsCisgICAgICAiZmlsZXMvbGli
L3htbHRvay5jIiwKKyAgICBdCisKKyAgICBwdWJsaWNfY29uZmlncyA9IFsgIjpleHBhdF9jb25m
aWciIF0KKworICAgIGRlZmluZXMgPSBbICJfTElCIiBdCisgICAgaWYgKGlzX3dpbikgeworICAg
ICAgZGVmaW5lcyArPSBbICJDT01QSUxFRF9GUk9NX0RTUCIgXQorICAgIH0gZWxzZSB7CisgICAg
ICBkZWZpbmVzICs9IFsgIkhBVkVfRVhQQVRfQ09ORklHX0giIF0KKyAgICB9CisgIH0KK30KKwor
ZnV6emVyX3Rlc3QoImV4cGF0X3htbF9wYXJzZV9mdXp6ZXIiKSB7CisgIHNvdXJjZXMgPSBbCisg
ICAgImZ1enovZXhwYXRfeG1sX3BhcnNlX2Z1enplci5jYyIsCisgIF0KKyAgZGVwcyA9IFsKKyAg
ICAiOmV4cGF0IiwKKyAgXQorICBkaWN0ID0gIi8vdGVzdGluZy9saWJmdXp6ZXIvZnV6emVycy9k
aWN0cy94bWwuZGljdCIKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvT1dORVJTIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9PV05FUlMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWI0MDg4
OTA5ODYxOGIwZjFjMDFlMWM5NzVlNzAwMWU3Yzk5YTA1MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvT1dORVJT
CkBAIC0wLDAgKzEsMiBAQAorbmlja0BjaHJvbWl1bS5vcmcKK2RvbWluaWNjQGNocm9taXVtLm9y
ZwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9leHBhdC9SRUFETUUuY2hyb21pdW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L1JFQURNRS5jaHJvbWl1bQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMGFm
MWUyZDMxMGZkYzg3N2E0ZTFkOTM0YzBhNmUwNzExNjg2MGQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9SRUFE
TUUuY2hyb21pdW0KQEAgLTAsMCArMSw0NSBAQAorTmFtZTogRXhwYXQgWE1MIFBhcnNlcgorU2hv
cnQgTmFtZTogZXhwYXQKK1VSTDogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBh
dC8KK1ZlcnNpb246IDIuMS4wCitMaWNlbnNlOiBNSVQKK0xpY2Vuc2UgRmlsZTogZmlsZXMvQ09Q
WUlORworU2VjdXJpdHkgQ3JpdGljYWw6IHllcworCitEZXNjcmlwdGlvbjoKKyAgVGhpcyBpcyBF
eHBhdCBYTUwgcGFyc2VyIC0gdmVyeSBsaWdodHdlaWdodCBDIGxpYnJhcnkgZm9yIHBhcnNpbmcg
WE1MLgorICBFeHBhdCBpcyBkaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZSBkZXRhaWxl
ZCBpbiBmaWxlcy9DT1BZSU5HLgorCisgIFdlIGluY2x1ZGUgaXQgaGVyZSBiZWNhdXNlIGxpYmpp
bmdsZSBkZXBlbmRzIG9uIGl0LgorCitMb2NhbCBNb2RpZmljYXRpb25zOgorICBSZW1vdmVkIGZp
bGVzIHRoYXQgQ2hyb21pdW0gZGlkbid0IG5lZWQ6CisgICAgbGliL2V4cGF0Ki5kc3AKKyAgICBs
aWIvTWFrZWZpbGUuTVBXCisgICAgYW1pZ2EvKgorICAgIGJjYjUvKgorICAgIGNvbmZ0b29scy8q
CisgICAgZG9jLyoKKyAgICBleGFtcGxlcy8qCisgICAgdGVzdHMvKgorICAgIHZtcy8qCisgICAg
d2luMzIvKgorICAgIHhtbHdmLyoKKyAgICBjb25maWd1cmUKKyAgICBjb25maWd1cmUuaW4KKyAg
ICBNYWtlZmlsZS5pbgorICAgIGV4cGF0LmRzdworICAgIGV4cGF0LmRzdworICAgIGV4cGF0X2Nv
bmZpZy5oLmluCisgIEVkaXRlZDoKKyAgICBsaWIvd2luY29uZmlnLmggKHNlZSB3aW5jb25maWcu
aC5vcmlnaW5hbCBmb3IgdW5tb2RpZmllZCB2ZXJzaW9uKQorICAgICAgKiBBZGRlZCBjaGVjayBv
biBsaW5lIDE3NTEgb2YgeG1sdG9rX2ltcGwuYyB0byBwYXRjaCBhCisgICAgICAgIGJ1ZyB3aXRo
IHRoZSBoYW5kbGluZyBvZiB1dGYtOCBjaGFyYWN0ZXJzIHRoYXQgbGVhZHMgdG8gYSBjcmFzaC4K
KyAgICBsaWIveG1sdG9rX2ltcGwuYyAoc2VlIHhtbHRva19pbXAuYy5vcmlnaW5hbCBmb3IgdW5t
b2RpZmllZCB2ZXJzaW9uKQorICAgICAgKiBQcmV2ZW50IGEgY29tcGlsZXIgd2FybmluZyB3aGVu
IGNvbXBpbGluZyB3aXRoCisgICAgICAgIFdJTjMyX0xFQU5fQU5EX01FQU4gcHJlZGVmaW5lZC4K
KyAgICBsaWIveG1scGFyc2UuYyAoc2VlIHhtbHBhcnNlLmMub3JpZ2luYWwgZm9yIHVubW9kaWZp
ZWQgdmVyc2lvbikKKyAgICAgICogQXBwbHkgaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9yZWxlYXNl
cy9tb3ppbGxhLWVzcjMxL3Jldi8yZjNlNzg2NDNmNWMKKyAgICAgICAgdG8gcHJldmVudCBhbiBp
bnRlZ2VyIG92ZXJmbG93LgorICBBZGRlZCBmaWxlczoKKyAgICBsaWIvZXhwYXRfY29uZmlnLmgg
KGEgZ2VuZXJhdGVkIGNvbmZpZyBmaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9DT1BZSU5HIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9DT1BZ
SU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRjYjQ1MDY0Mjk2ODRiMjUzY2M0NDBjYTQwYTEwOWZiNmI5MjUzYTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L2V4cGF0L2ZpbGVzL0NPUFlJTkcKQEAgLTAsMCArMSwyMiBAQAorQ29weXJpZ2h0
IChjKSAxOTk4LCAxOTk5LCAyMDAwIFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUgQ2VudGVyIEx0
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBDbGFyayBDb29wZXIKK0NvcHly
aWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBFeHBhdCBtYWludGFp
bmVycy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv
IGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np
YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRo
ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rp
c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs
IGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVk
IHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl
IGluY2x1ZGVkCitpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT
b2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U
IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z
CitDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULAorVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUKK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB
TElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9DaGFuZ2VzIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9DaGFuZ2Vz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA4ODk3YjlmOWVkMTU1ZDg1MWY1OGI4YzkwYjViNWY1N2E3NDYzZDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L2V4cGF0L2ZpbGVzL0NoYW5nZXMKQEAgLTAsMCArMSwyMDUgQEAKK1JlbGVhc2UgMi4x
LjAgU2F0IE1hcmNoIDI0IDIwMTIKKyAgICAgICAgLSBCdWcgRml4ZXM6CisgICAgICAgICAgIzE3
NDIzMTU6IEhhcm1mdWwgWE1MX1BhcnNlckNyZWF0ZU5TIHN1Z2dlc3Rpb24uCisgICAgICAgICAg
IzI4OTU1MzM6IENWRS0yMDEyLTExNDcgLSBSZXNvdXJjZSBsZWFrIGluIHJlYWRmaWxlbWFwLmMu
CisgICAgICAgICAgIzE3ODU0MzA6IEV4cGF0IGJ1aWxkIGZhaWxzIG9uIGxpbnV4LWFtZDY0IHdp
dGggZ2NjIHZlcnNpb24+PTQuMSAtTzMuCisgICAgICAgICAgIzE5ODM5NTMsIDI1MTc5NTIsIDI1
MTc5NjIsIDI2NDk4Mzg6IAorICAgICAgICAgICAgICAgIEJ1aWxkIG1vZGlmaWNhdGlvbnMgdXNp
bmcgYXV0b3JlY29uZiBpbnN0ZWFkIG9mIGJ1aWxkY29uZi5zaC4KKyAgICAgICAgICAjMjgxNTk0
NywgIzI4ODQwODY6IE9CSkVYVCBhbmQgRVhFRVhUIHN1cHBvcnQgd2hpbGUgYnVpbGRpbmcuCisg
ICAgICAgICAgIzE5OTA0MzA6IENWRS0yMDA5LTM3MjAgLSBQYXJzZXIgY3Jhc2ggd2l0aCBzcGVj
aWFsIFVURi04IHNlcXVlbmNlcy4KKyAgICAgICAgICAjMjUxNzkzODogeG1sd2Ygc2hvdWxkIHJl
dHVybiBub24temVybyBleGl0IHN0YXR1cyBpZiBub3Qgd2VsbC1mb3JtZWQuCisgICAgICAgICAg
IzI1MTc5NDY6IFdyb25nIHN0YXRlbWVudCBhYm91dCBYTUxEZWNsIGluIHhtbHdmLjEgYW5kIHht
bHdmLnNnbWwuCisgICAgICAgICAgIzI4NTU2MDk6IERhbmdsaW5nIHBvc2l0aW9uUHRyIGFmdGVy
IGVycm9yLgorICAgICAgICAgICMyODk0MDg1OiBDVkUtMjAwOS0zNTYwIC0gQnVmZmVyIG92ZXIt
cmVhZCBhbmQgY3Jhc2ggaW4gYmlnMl90b1V0ZjgoKS4KKyAgICAgICAgICAjMjk1ODc5NDogQ1ZF
LTIwMTItMTE0OCAtIE1lbW9yeSBsZWFrIGluIHBvb2xHcm93LgorICAgICAgICAgICMyOTkwNjUy
OiBDTWFrZSBzdXBwb3J0LgorICAgICAgICAgICMzMDEwODE5OiBVTkVYUEVDVEVEX1NUQVRFIHdp
dGggYSB0cmFpbGluZyAiJSIgaW4gZW50aXR5IHZhbHVlLgorICAgICAgICAgICMzMjA2NDk3OiBV
bml0aWFsaXplZCBtZW1vcnkgcmV0dXJuZWQgZnJvbSBYTUxfUGFyc2UuCisgICAgICAgICAgIzMy
ODc4NDk6IG1ha2UgY2hlY2sgZmFpbHMgb24gbWluZ3ctdzY0LgorICAgICAgICAgICMzNDk2NjA4
OiBDVkUtMjAxMi0wODc2IC0gSGFzaCBET1MgYXR0YWNrLgorICAgICAgICAtIFBhdGNoZXM6Cisg
ICAgICAgICAgIzE3NDkxOTg6IHBrZy1jb25maWcgc3VwcG9ydC4KKyAgICAgICAgICAjMzAxMDIy
MjogRml4IGZvciBidWcgIzMwMTA4MTkuCisgICAgICAgICAgIzMzMTI1Njg6IENNYWtlIHN1cHBv
cnQuCisgICAgICAgICAgIzM0NDYzODQ6IFJlcG9ydCBieXRlIG9mZnNldHMgZm9yIGF0dHIgbmFt
ZXMgYW5kIHZhbHVlcy4KKyAgICAgICAgLSBOZXcgRmVhdHVyZXMgLyBBUEkgY2hhbmdlczoKKyAg
ICAgICAgICBBZGRlZCBuZXcgQVBJIG1lbWJlciBYTUxfU2V0SGFzaFNhbHQoKSB0aGF0IGFsbG93
cyBzZXR0aW5nIGFuIGludGlhbAorICAgICAgICAgICAgICAgIHZhbHVlIChzYWx0KSBmb3IgaGFz
aCBjYWxjdWxhdGlvbnMuIFRoaXMgaXMgcGFydCBvZiB0aGUgZml4IGZvcgorICAgICAgICAgICAg
ICAgIGJ1ZyAjMzQ5NjYwOCB0byByYW5kb21pemUgaGFzaCBwYXJhbWV0ZXJzLgorICAgICAgICAg
IFdoZW4gY29tcGlsZWQgd2l0aCBYTUxfQVRUUl9JTkZPIGRlZmluZWQsIGFkZHMgbmV3IEFQSSBt
ZW1iZXIKKyAgICAgICAgICAgICAgICBYTUxfR2V0QXR0cmlidXRlSW5mbygpIHRoYXQgYWxsb3dz
IHJldHJpZXZpbmcgdGhlIGJ5dGUKKyAgICAgICAgICAgICAgICBvZmZzZXRzIGZvciBhdHRyaWJ1
dGUgbmFtZXMgYW5kIHZhbHVlcyAocGF0Y2ggIzM0NDYzODQpLgorICAgICAgICAgIEFkZGVkIENN
YWtlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBTZWUgYnVnICMyOTkwNjUyIGFuZCBw
YXRjaCAjMzMxMjU2OC4KKyAgICAgICAgICBBZGRlZCBydW4tYmVuY2htYXJrIHRhcmdldCB0byBN
YWtlZmlsZS5pbiAtIHJlbGllcyBvbiB0ZXN0ZGF0YSBtb2R1bGUKKyAgICAgICAgICAgICAgICBw
cmVzZW50IGluIHRoZSBzYW1lIHJlbGF0aXZlIGxvY2F0aW9uIGFzIGluIHRoZSByZXBvc2l0b3J5
LgorICAgICAgICAgIAorUmVsZWFzZSAyLjAuMSBUdWUgSnVuZSA1IDIwMDcKKyAgICAgICAgLSBG
aXhlZCBidWdzICMxNTE1MjY2LCAjMTUxNTYwMDogVGhlIGNoYXJhY3RlciBkYXRhIGhhbmRsZXIn
cyBjYWxsaW5nCisgICAgICAgICAgb2YgWE1MX1N0b3BQYXJzZXIoKSB3YXMgbm90IGhhbmRsZWQg
cHJvcGVybHk7IGlmIHRoZSBwYXJzZXIgd2FzCisgICAgICAgICAgc3RvcHBlZCBhbmQgdGhlIGhh
bmRsZXIgc2V0IHRvIE5VTEwsIHRoZSBwYXJzZXIgd291bGQgc2VnZmF1bHQuCisgICAgICAgIC0g
Rml4ZWQgYnVnICMxNjkwODgzOiBFeHBhdCBmYWlsZWQgb24gRUJDRElDIHN5c3RlbXMgYXMgaXQg
YXNzdW1lZAorICAgICAgICAgIHNvbWUgY2hhcmFjdGVyIGNvbnN0YW50cyB0byBiZSBBU0NJSSBl
bmNvZGVkLgorICAgICAgICAtIE1pbm9yIGNsZWFudXBzIG9mIHRoZSB0ZXN0IGhhcm5lc3MuCisg
ICAgICAgIC0gRml4ZWQgeG1sd2YgYnVnICMxNTEzNTY2OiAib3V0IG9mIG1lbW9yeSIgZXJyb3Ig
b24gZmlsZSBzaXplIHplcm8uCisgICAgICAgIC0gRml4ZWQgb3V0bGluZS5jIGJ1ZyAjMTU0MzIz
MzogbWlzc2luZyBhIGZpbmFsIFhNTF9QYXJzZXJGcmVlKCkgY2FsbC4KKyAgICAgICAgLSBGaXhl
cyBhbmQgaW1wcm92ZW1lbnRzIGZvciBXaW5kb3dzIHBsYXRmb3JtOgorICAgICAgICAgIGJ1Z3Mg
IzE0MDk0NTEsICMxNDc2MTYwLCAjMTU0ODE4MiwgIzE2MDI3NjksICMxNzE3MzIyLgorICAgICAg
ICAtIEJ1aWxkIGZpeGVzIGZvciB2YXJpb3VzIHBsYXRmb3JtczoKKyAgICAgICAgICBIUC1VWCwg
VHJ1NjQsIFNvbGFyaXMgOTogcGF0Y2ggIzE0Mzc4NDAsIGJ1ZyAjMTE5NjE4MC4KKyAgICAgICAg
ICBBbGwgVW5peDogIzE1NTQ2MTggKHJlZnJlc2hlZCBjb25maWcuc3ViL2NvbmZpZy5ndWVzcyku
CisgICAgICAgICAgICAgICAgICAgICMxNDkwMzcxLCAjMTYxMzQ1Nzogc3VwcG9ydCBib3RoLCBE
RVNURElSIGFuZCBJTlNUQUxMX1JPT1QsCisgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgcmVs
eWluZyBvbiBHTlUtTWFrZSBzcGVjaWZpYyBmZWF0dXJlcy4KKyAgICAgICAgICAjMTY0NzgwNTog
UGF0Y2hlZCBjb25maWd1cmUuaW4gdG8gd29yayBiZXR0ZXIgd2l0aCBJbnRlbCBjb21waWxlci4K
KyAgICAgICAgLSBGaXhlcyB0byBNYWtlZmlsZS5pbiB0byBoYXZlIG1ha2UgY2hlY2sgd29yayBj
b3JyZWN0bHk6CisgICAgICAgICAgYnVncyAjMTQwODE0MywgIzE1MzU2MDMsICMxNTM2Njg0Lgor
ICAgICAgICAtIEFkZGVkIE9wZW4gV2F0Y29tIHN1cHBvcnQ6IHBhdGNoICMxNTIzMjQyLgorCitS
ZWxlYXNlIDIuMC4wIFdlZCBKYW4gMTEgMjAwNgorICAgICAgICAtIFdlIG5vIGxvbmdlciB1c2Ug
dGhlICJjaGVjayIgbGlicmFyeSBmb3IgQyB1bml0IHRlc3Rpbmc7IHdlCisgICAgICAgICAgYWx3
YXlzIHVzZSB0aGUgKHBhcnRpYWwpIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEku
CisgICAgICAgIC0gUmVwb3J0IFhNTF9OUyBzZXR0aW5nIHZpYSBYTUxfR2V0RmVhdHVyZUxpc3Qo
KS4KKyAgICAgICAgLSBGaXhlZCBoZWFkZXJzIGZvciB1c2UgZnJvbSBDKysuCisgICAgICAgIC0g
WE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKCkgYW5kICBYTUxfR2V0Q3VycmVudENvbHVtbk51bWJl
cigpCisgICAgICAgICAgbm93IHJldHVybiB1bnNpZ25lZCBpbnRlZ2Vycy4KKyAgICAgICAgLSBB
ZGRlZCBYTUxfTEFSR0VfU0laRSBzd2l0Y2ggdG8gZW5hYmxlIDY0LWJpdCBpbnRlZ2VycyBmb3IK
KyAgICAgICAgICBieXRlIGluZGV4ZXMgYW5kIGxpbmUvY29sdW1uIG51bWJlcnMuCisgICAgICAg
IC0gVXBkYXRlZCB0byB1c2UgbGlidG9vbCAxLjUuMjIgKHRoZSBtb3N0IHJlY2VudCkuCisgICAg
ICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgQW1pZ2FPUy4KKyAgICAgICAgLSBTb21lIG1vc3RseSBt
aW5vciBidWcgZml4ZXMuIFNGIGlzc3VlcyBpbmNsdWRlOiAjMTAwNjcwOCwKKyAgICAgICAgICAj
MTAyMTc3NiwgIzEwMjM2NDYsICMxMTE0OTYwLCAjMTE1NjM5OCwgIzEyMjExNjAsICMxMjcxNjQy
LgorCitSZWxlYXNlIDEuOTUuOCBGcmkgSnVsIDIzIDIwMDQKKyAgICAgICAgLSBNYWpvciBuZXcg
ZmVhdHVyZTogc3VzcGVuZC9yZXN1bWUuICBIYW5kbGVycyBjYW4gbm93IHJlcXVlc3QKKyAgICAg
ICAgICB0aGF0IGEgcGFyc2UgYmUgc3VzcGVuZGVkIGZvciBsYXRlciByZXN1bXB0aW9uIG9yIGFi
b3J0ZWQKKyAgICAgICAgICBhbHRvZ2V0aGVyLiAgU2VlICJUZW1wb3JhcmlseSBTdG9wcGluZyBQ
YXJzaW5nIiBpbiB0aGUKKyAgICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMu
CisgICAgICAgIC0gU29tZSBtb3N0bHkgbWlub3IgYnVnIGZpeGVzLCBidXQgY29tcGlsYXRpb24g
c2hvdWxkIG5vCisgICAgICAgICAgbG9uZ2VyIGdlbmVyYXRlIHdhcm5pbmdzIG9uIG1vc3QgcGxh
dGZvcm1zLiAgU0YgaXNzdWVzCisgICAgICAgICAgaW5jbHVkZTogIzgyNzMxOSwgIzg0MDE3Mywg
Izg0NjMwOSwgIzg4ODMyOSwgIzg5NjE4OCwgIzkyMzkxMywKKyAgICAgICAgICAjOTI4MTEzLCAj
OTYxNjk4LCAjOTg1MTkyLgorCitSZWxlYXNlIDEuOTUuNyBNb24gT2N0IDIwIDIwMDMKKyAgICAg
ICAgLSBGaXhlZCBlbnVtIFhNTF9TdGF0dXMgaXNzdWUgKHJlcG9ydGVkIG9uIFNvdXJjZUZvcmdl
IG1hbnkKKyAgICAgICAgICB0aW1lcyksIHNvIGNvbXBpbGVycyB0aGF0IGFyZSBwcm9wZXJseSBw
aWNreSB3aWxsIGJlIGhhcHB5LgorICAgICAgICAtIEludHJvZHVjZWQgYW4gWE1MQ0FMTCBtYWNy
byB0byBjb250cm9sIHRoZSBjYWxsaW5nCisgICAgICAgICAgY29udmVudGlvbiB1c2VkIGJ5IHRo
ZSBFeHBhdCBBUEk7IHRoaXMgbWFjcm8gc2hvdWxkIGJlIHVzZWQKKyAgICAgICAgICB0byBhbm5v
dGF0ZSBwcm90b3R5cGVzIGFuZCBkZWZpbml0aW9ucyBvZiBjYWxsYmFjaworICAgICAgICAgIGlt
cGxlbWVudGF0aW9ucyBpbiBjb2RlIGNvbXBpbGVkIHdpdGggYSBjYWxsaW5nIGNvbnZlbnRpb24K
KyAgICAgICAgICBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGNvbnZlbnRpb24gZm9yIHRoZSBob3N0
IHBsYXRmb3JtLgorICAgICAgICAtIEltcHJvdmVkIGFiaWxpdHkgdG8gYnVpbGQgd2l0aG91dCB0
aGUgY29uZmlndXJlLWdlbmVyYXRlZAorICAgICAgICAgIGV4cGF0X2NvbmZpZy5oIGhlYWRlci4g
IFRoaXMgaXMgdXNlZnVsIGZvciBhcHBsaWNhdGlvbnMKKyAgICAgICAgICB3aGljaCBlbWJlZCBF
eHBhdCByYXRoZXIgdGhhbiBsaW5raW5nIGluIHRoZSBsaWJyYXJ5LgorICAgICAgICAtIEZpeGVk
IGEgdmFyaWV0eSBvZiBidWdzOiBzZWUgU0YgaXNzdWVzICM0NTg5MDcsICM2MDk2MDMsCisgICAg
ICAgICAgIzY3Njg0NCwgIzY3OTc1NCwgIzY5Mjg3OCwgIzY5Mjk2NCwgIzY5NTQwMSwgIzY5OTMy
MywgIzY5OTQ4NywKKyAgICAgICAgICAjODIwOTQ2LgorICAgICAgICAtIEltcHJvdmVkIGhhc2gg
dGFibGUgbG9va3Vwcy4KKyAgICAgICAgLSBBZGRlZCBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMgYW5k
IGltcHJvdmVkIGRvY3VtZW50YXRpb24uCisKK1JlbGVhc2UgMS45NS42IFR1ZSBKYW4gMjggMjAw
MworICAgICAgICAtIEFkZGVkIFhNTF9GcmVlQ29udGVudE1vZGVsKCkuCisgICAgICAgIC0gQWRk
ZWQgWE1MX01lbU1hbGxvYygpLCBYTUxfTWVtUmVhbGxvYygpLCBYTUxfTWVtRnJlZSgpLgorICAg
ICAgICAtIEZpeGVkIGEgdmFyaWV0eSBvZiBidWdzOiBzZWUgU0YgaXNzdWVzICM2MTU2MDYsICM2
MTY4NjMsCisgICAgICAgICAgIzYxODE5OSwgIzY1MzE4MCwgIzY3Mzc5MS4KKyAgICAgICAgLSBF
bmhhbmNlZCB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgorICAgICAgICAtIE1hbiBwYWdlIGlt
cHJvdmVtZW50czogaW5jbHVkZXMgU0YgaXNzdWUgIzYzMjE0Ni4KKworUmVsZWFzZSAxLjk1LjUg
RnJpIFNlcCA2IDIwMDIKKyAgICAgICAgLSBBZGRlZCBYTUxfVXNlRm9yZWlnbkRURCgpIGZvciBp
bXByb3ZlZCBTQVgyIHN1cHBvcnQuCisgICAgICAgIC0gQWRkZWQgWE1MX0dldEZlYXR1cmVMaXN0
KCkuCisgICAgICAgIC0gRGVmaW5lZCBYTUxfQm9vbCB0eXBlIGFuZCB0aGUgdmFsdWVzIFhNTF9U
UlVFIGFuZCBYTUxfRkFMU0UuCisgICAgICAgIC0gVXNlIGFuIGluY29tcGxldGUgc3RydWN0IGlu
c3RlYWQgb2YgYSB2b2lkKiBmb3IgdGhlIHBhcnNlcgorICAgICAgICAgIChtYXkgbm90IHJldGFp
bikuCisgICAgICAgIC0gRml4ZWQgVVRGLTggZGVjb2RpbmcgYnVnIHRoYXQgY2F1c2VkIGxlZ2Fs
IFVURi04IHRvIGJlIHJlamVjdGVkLgorICAgICAgICAtIEZpbmFsbHkgZml4ZWQgYnVnIHdoZXJl
IGRlZmF1bHQgaGFuZGxlciB3b3VsZCByZXBvcnQgRFRECisgICAgICAgICAgZXZlbnRzIHRoYXQg
d2VyZSBhbHJlYWR5IGhhbmRsZWQgYnkgYW5vdGhlciBoYW5kbGVyLgorICAgICAgICAgIEluaXRp
YWwgcGF0Y2ggY29udHJpYnV0ZWQgYnkgRGFycnlsIE1pbGVzLgorICAgICAgICAtIFJlbW92ZWQg
dW5uZWNlc3NhcnkgRGxsTWFpbigpIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHN0YXRpYworICAgICAg
ICAgIGxpbmtpbmcgaW50byBhIERMTCB0byBiZSBkaWZmaWN1bHQuCisgICAgICAgIC0gQWRkZWQg
VkMrKyBwcm9qZWN0cyBmb3IgYnVpbGRpbmcgc3RhdGljIGxpYnJhcmllcy4KKyAgICAgICAgLSBS
ZWR1Y2VkIGxpbmUtbGVuZ3RoIGZvciBhbGwgc291cmNlIGNvZGUgYW5kIGhlYWRlcnMgdG8gYmUK
KyAgICAgICAgICBubyBsb25nZXIgdGhhbiA4MCBjaGFyYWN0ZXJzLCB0byBoZWxwIHdpdGggQVMv
NDAwIHN1cHBvcnQuCisgICAgICAgIC0gUmVkdWNlZCBtZW1vcnkgY29weWluZyBkdXJpbmcgcGFy
c2luZyAoU0YgcGF0Y2ggIzYwMDk2NCkuCisgICAgICAgIC0gRml4ZWQgYSB2YXJpZXR5IG9mIGJ1
Z3M6IHNlZSBTRiBpc3N1ZXMgIzU4MDc5MywgIzQzNDY2NCwKKyAgICAgICAgICAjNDgzNTE0LCAj
NTgwNTAzLCAjNTgxMDY5LCAjNTg0MDQxLCAjNTg0MTgzLCAjNTg0ODMyLCAjNTg1NTM3LAorICAg
ICAgICAgICM1OTY1NTUsICM1OTY2NzgsICM1OTgzNTIsICM1OTg5NDQsICM1OTk3MTUsICM2MDA0
NzksICM2MDA5NzEuCisKK1JlbGVhc2UgMS45NS40IEZyaSBKdWwgMTIgMjAwMgorICAgICAgICAt
IEFkZGVkIHN1cHBvcnQgZm9yIFZNUywgY29udHJpYnV0ZWQgYnkgQ3JhaWcgQmVycnkuICBTZWUK
KyAgICAgICAgICB2bXMvUkVBRE1FLnZtcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAg
LSBBZGRlZCBNYWMgT1MgKGNsYXNzaWMpIHN1cHBvcnQsIHdpdGggYSBtYWtlZmlsZSBmb3IgTVBX
LAorICAgICAgICAgIGNvbnRyaWJ1dGVkIGJ5IFRob21hcyBXZWduZXIgYW5kIERhcnlsZSBXYWxr
ZXIuCisgICAgICAgIC0gQWRkZWQgQm9ybGFuZCBDKysgQnVpbGRlciA1IC8gQkNDIDUuNSBzdXBw
b3J0LCBjb250cmlidXRlZAorICAgICAgICAgIGJ5IFBhdHJpY2sgTWNDb25uZWxsIChTRiBwYXRj
aCAjNTM4MDMyKS4KKyAgICAgICAgLSBGaXhlZCBhIHZhcmlldHkgb2YgYnVnczogc2VlIFNGIGlz
c3VlcyAjNDQxNDQ5LCAjNTYzMTg0LAorICAgICAgICAgICM1NjQzNDIsICM1NjYzMzQsICM1NjY5
MDEsICM1Njk0NjEsICM1NzAyNjMsICM1NzUxNjgsICM1NzkxOTYuCisgICAgICAgIC0gTWFkZSBz
a2lwcGVkRW50aXR5SGFuZGxlciBjb25mb3JtIHRvIFNBWDIgKHNlZSBzb3VyY2UgY29tbWVudCkK
KyAgICAgICAgLSBSZS1pbXBsZW1lbnRlZCBXRkM6IEVudGl0eSBEZWNsYXJlZCBmcm9tIFhNTCAx
LjAgc3BlYyBhbmQKKyAgICAgICAgICBhZGRlZCBhIG5ldyBlcnJvciAiZW50aXR5IGRlY2xhcmVk
IGluIHBhcmFtZXRlciBlbnRpdHkiOgorICAgICAgICAgIHNlZSBTRiBidWcgcmVwb3J0ICM1Njk0
NjEgYW5kIFNGIHBhdGNoICM1NzgxNjEKKyAgICAgICAgLSBSZS1pbXBsZW1lbnRlZCBzZWN0aW9u
IDUuMSBmcm9tIFhNTCAxLjAgc3BlYzoKKyAgICAgICAgICBzZWUgU0YgYnVnIHJlcG9ydCAjNTcw
MjYzIGFuZCBTRiBwYXRjaCAjNTc4MTYxCisKK1JlbGVhc2UgMS45NS4zIE1vbiBKdW4gMyAyMDAy
CisgICAgICAgIC0gQWRkZWQgYSBwcm9qZWN0IHRvIHRoZSBNU1ZDIHdvcmtzcGFjZSB0byBjcmVh
dGUgYSB3Y2hhcl90CisgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgbGlicmFyeTsgdGhlIERMTHMg
YXJlIG5hbWVkIGxpYmV4cGF0dy5kbGwuCisgICAgICAgIC0gQ2hhbmdlZCB0aGUgbmFtZSBvZiB0
aGUgV2luZG93cyBETExzIGZyb20gZXhwYXQuZGxsIHRvCisgICAgICAgICAgbGliZXhwYXQuZGxs
OyB0aGlzIGZpeGVzIFNGIGJ1ZyAjNDMyNDU2LgorICAgICAgICAtIEFkZGVkIHRoZSBYTUxfUGFy
c2VyUmVzZXQoKSBBUEkgZnVuY3Rpb24uCisgICAgICAgIC0gRml4ZWQgWE1MX1NldFJldHVybk5T
VHJpcGxldCgpIHRvIHdvcmsgZm9yIGVsZW1lbnQgbmFtZXMuCisgICAgICAgIC0gTWFkZSB0aGUg
WE1MX1VOSUNPREUgYnVpbGRzIHVzYWJsZSAodGhhbmtzLCBLYXJsISkuCisgICAgICAgIC0gQWxs
b3cgeG1sd2YgdG8gcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0LgorICAgICAgICAtIEluc3RhbGwg
YSBtYW4gcGFnZSBmb3IgeG1sd2Ygb24gVW5peCBzeXN0ZW1zLgorICAgICAgICAtIEZpeGVkIG1h
bnkgYnVnczsgc2VlIFNGIGJ1ZyByZXBvcnRzICMyMzE4NjQsICM0NjEzODAsICM0NjQ4MzcsCisg
ICAgICAgICAgIzQ2Njg4NSwgIzQ2OTIyNiwgIzQ3NzY2NywgIzQ4NDQxOSwgIzQ4Nzg0MCwgIzQ5
NDc0OSwgIzQ5NjUwNSwKKyAgICAgICAgICAjNTQ3MzUwLiAgT3RoZXIgYnVncyB3aGljaCB3ZSBj
YW4ndCB0ZXN0IGFzIGVhc2lseSBtYXkgYWxzbworICAgICAgICAgIGhhdmUgYmVlbiBmaXhlZCwg
ZXNwZWNpYWxseSBpbiB0aGUgYXJlYSBvZiBidWlsZCBzdXBwb3J0LgorCitSZWxlYXNlIDEuOTUu
MiBGcmkgSnVsIDI3IDIwMDEKKyAgICAgICAgLSBNb3JlIGNoYW5nZXMgdG8gbWFrZSBNU1ZDIGhh
cHB5IHdpdGggdGhlIGJ1aWxkOyBhZGQgYSBzaW5nbGUKKyAgICAgICAgICB3b3Jrc3BhY2UgdG8g
c3VwcG9ydCBib3RoIHRoZSBsaWJyYXJ5IGFuZCB4bWx3ZiBhcHBsaWNhdGlvbi4KKyAgICAgICAg
LSBBZGRlZCBhIFdpbmRvd3MgaW5zdGFsbGVyIGZvciBXaW5kb3dzIHVzZXJzOyBpbmNsdWRlcwor
ICAgICAgICAgIHhtbHdmLmV4ZS4KKyAgICAgICAgLSBBZGRlZCBjb21waWxlLXRpbWUgY29uc3Rh
bnRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZQorICAgICAgICAgIEV4cGF0IHZl
cnNpb24KKyAgICAgICAgLSBSZW1vdmVkIGEgbG90IG9mIEdOVS1zcGVjaWZpYyBkZXBlbmRlbmNp
ZXMgdG8gYWlkZSBwb3J0YWJpbGl0eQorICAgICAgICAgIGFtb25nIHRoZSB2YXJpb3VzIFVuaXgg
Zmxhdm9ycy4KKyAgICAgICAgLSBGaXggdGhlIFVURi04IEJPTSBidWcuCisgICAgICAgIC0gQ2xl
YW5lZCB1cCB3YXJuaW5nIG1lc3NhZ2VzIGZvciBzZXZlcmFsIGNvbXBpbGVycy4KKyAgICAgICAg
LSBBZGRlZCB0aGUgLVdhbGwsIC1Xc3RyaWN0LXByb3RvdHlwZXMgb3B0aW9ucyBmb3IgR0NDLgor
CitSZWxlYXNlIDEuOTUuMSBTdW4gT2N0IDIyIDE1OjExOjM2IEVEVCAyMDAwCisgICAgICAgIC0g
Q2hhbmdlcyB0byBnZXQgZXhwYXQgdG8gYnVpbGQgdW5kZXIgTWljcm9zb2Z0IGNvbXBpbGVyCisg
ICAgICAgIC0gUmVtb3ZlZCBhbGwgYWJvcnRzIGFuZCBpbnN0ZWFkIHJldHVybiBhbiBVTkVYUEVD
VEVEX1NUQVRFIGVycm9yLgorICAgICAgICAtIEZpeGVkIGEgYnVnIHdoZXJlIGEgc3RyYXkgJyUn
IGluIGFuIGVudGl0eSB2YWx1ZSB3b3VsZCBjYXVzZSBhbgorICAgICAgICAgIGFib3J0LgorICAg
ICAgICAtIERlZmluZWQgWE1MX1NldEVuZE5hbWVzcGFjZURlY2xIYW5kbGVyLiBUaGFua3MgdG8g
RGFycnlsIE1pbGVzIGZvcgorICAgICAgICAgIGZpbmRpbmcgdGhpcyBvdmVyc2lnaHQuCisgICAg
ICAgIC0gQ2hhbmdlZCBkZWZhdWx0IHBhdHRlcm5zIGluIGxpYi9NYWtlZmlsZS5pbiB0byBmaXQg
bm9uLUdOVSBtYWtlcworICAgICAgICAgIFRoYW5rcyB0byByb2JpbkB1bnJhdGVkLm5ldCBmb3Ig
cmVwb3J0aW5nIGFuZCBwcm92aWRpbmcgYW4KKyAgICAgICAgICBhY2NvdW50IHRvIHRlc3Qgb24u
CisgICAgICAgIC0gVGhlIHJlZmVyZW5jZSBoYWQgdGhlIHdyb25nIGxhYmVsIGZvciBYTUxfU2V0
U3RhcnROYW1lc3BhY2VEZWNsLgorICAgICAgICAgIFJlcG9ydGVkIGJ5IGFuIGFub255bW91cyB1
c2VyLgorCitSZWxlYXNlIDEuOTUuMCBGcmkgU2VwIDI5IDIwMDAKKyAgICAgICAgLSBYTUxfUGFy
c2VyQ3JlYXRlX01NCisgICAgICAgICAgICAgICAgQWxsb3dzIHlvdSB0byBzZXQgYSBtZW1vcnkg
bWFuYWdlbWVudCBzdWl0ZSB0byByZXBsYWNlIHRoZQorICAgICAgICAgICAgICAgIHN0YW5kYXJk
IG1hbGxvYyxyZWFsbG9jLCBhbmQgZnJlZS4KKyAgICAgICAgLSBYTUxfU2V0UmV0dXJuTlNUcmlw
bGV0CisgICAgICAgICAgICAgICAgSWYgeW91IHR1cm4gdGhpcyBmZWF0dXJlIG9uIHdoZW4gbmFt
ZXNwYWNlIHByb2Nlc3NpbmcgaXMgaW4KKyAgICAgICAgICAgICAgICBlZmZlY3QsIHRoZW4gcXVh
bGlmaWVkLCBwcmVmaXhlZCBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMKKyAgICAgICAgICAg
ICAgICBhcmUgcmV0dXJuZWQgYXMgInVyaXxuYW1lfHByZWZpeCIgd2hlcmUgJ3wnIGlzIHdoYXRl
dmVyCisgICAgICAgICAgICAgICAgc2VwYXJhdG9yIGNoYXJhY3RlciBpcyB1c2VkIGluIG5hbWVz
cGFjZSBwcm9jZXNzaW5nLgorICAgICAgICAtIE1lcmdlZCBpbiBmZWF0dXJlcyBmcm9tIHBlcmwt
ZXhwYXQKKyAgICAgICAgICAgICAgICBvIFhNTF9TZXRFbGVtZW50RGVjbEhhbmRsZXIKKyAgICAg
ICAgICAgICAgICBvIFhNTF9TZXRBdHRsaXN0RGVjbEhhbmRsZXIKKyAgICAgICAgICAgICAgICBv
IFhNTF9TZXRYbWxEZWNsSGFuZGxlcgorICAgICAgICAgICAgICAgIG8gWE1MX1NldEVudGl0eURl
Y2xIYW5kbGVyCisgICAgICAgICAgICAgICAgbyBTdGFydERvY3R5cGVEZWNsSGFuZGxlciB0YWtl
cyAzIGFkZGl0aW9uYWwgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c2lk
LCBwdWJpZCwgaGFzX2ludGVybmFsX3N1YnNldAorICAgICAgICAgICAgICAgIG8gTWFueSBwYWly
ZWQgaGFuZGxlciBzZXR0ZXJzIChsaWtlIFhNTF9TZXRFbGVtZW50SGFuZGxlcikKKyAgICAgICAg
ICAgICAgICAgIG5vdyBoYXZlIGNvcnJlc3BvbmRpbmcgaW5kaXZpZHVhbCBoYW5kbGVyIHNldHRl
cnMKKyAgICAgICAgICAgICAgICBvIFhNTF9HZXRJbnB1dENvbnRleHQgZm9yIGdldHRpbmcgdGhl
IGlucHV0IGNvbnRleHQgb2YKKyAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHBhcnNlIHBv
c2l0aW9uLgorICAgICAgICAtIEFkZGVkIHJlZmVyZW5jZSBtYXRlcmlhbAorICAgICAgICAtIFBh
Y2thZ2VkIGludG8gYSBkaXN0cmlidXRpb24gdGhhdCBidWlsZHMgYSBzaGFyYWJsZSBsaWJyYXJ5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L2V4cGF0L2ZpbGVzL01BTklGRVNUIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9NQU5JRkVTVApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTAyMGRj
MDViMDFmNGVkNTVlMGFiMTVlMTdhM2VjMmE4ZTA4MjQxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9N
QU5JRkVTVApAQCAtMCwwICsxLDE0MSBAQAorYW1pZ2EvbGF1bmNoLmMKK2FtaWdhL2V4cGF0XzY4
ay5jCithbWlnYS9leHBhdF82OGsuaAorYW1pZ2EvZXhwYXRfNjhrX2hhbmRsZXJfc3R1YnMuYwor
YW1pZ2EvZXhwYXRfYmFzZS5oCithbWlnYS9leHBhdF92ZWN0b3JzLmMKK2FtaWdhL2V4cGF0X2xp
Yi5jCithbWlnYS9leHBhdC54bWwKK2FtaWdhL1JFQURNRS50eHQKK2FtaWdhL01ha2VmaWxlCith
bWlnYS9pbmNsdWRlL3Byb3RvL2V4cGF0LmgKK2FtaWdhL2luY2x1ZGUvbGlicmFyaWVzL2V4cGF0
LmgKK2FtaWdhL2luY2x1ZGUvaW50ZXJmYWNlcy9leHBhdC5oCithbWlnYS9pbmNsdWRlL2lubGlu
ZTQvZXhwYXQuaAorYmNiNS9SRUFETUUudHh0CitiY2I1L2FsbF9wcm9qZWN0cy5icGcKK2JjYjUv
ZWxlbWVudHMuYnBmCitiY2I1L2VsZW1lbnRzLmJwcgorYmNiNS9lbGVtZW50cy5tYWsKK2JjYjUv
ZXhwYXQuYnBmCitiY2I1L2V4cGF0LmJwcgorYmNiNS9leHBhdC5tYWsKK2JjYjUvZXhwYXRfc3Rh
dGljLmJwZgorYmNiNS9leHBhdF9zdGF0aWMuYnByCitiY2I1L2V4cGF0X3N0YXRpYy5tYWsKK2Jj
YjUvZXhwYXR3LmJwZgorYmNiNS9leHBhdHcuYnByCitiY2I1L2V4cGF0dy5tYWsKK2JjYjUvZXhw
YXR3X3N0YXRpYy5icGYKK2JjYjUvZXhwYXR3X3N0YXRpYy5icHIKK2JjYjUvZXhwYXR3X3N0YXRp
Yy5tYWsKK2JjYjUvbGliZXhwYXRfbXRkLmRlZgorYmNiNS9saWJleHBhdHdfbXRkLmRlZgorYmNi
NS9tYWtlZmlsZS5tYWsKK2JjYjUvb3V0bGluZS5icGYKK2JjYjUvb3V0bGluZS5icHIKK2JjYjUv
b3V0bGluZS5tYWsKK2JjYjUvc2V0dXAuYmF0CitiY2I1L3htbHdmLmJwZgorYmNiNS94bWx3Zi5i
cHIKK2JjYjUveG1sd2YubWFrCitkb2MvZXhwYXQucG5nCitkb2MvcmVmZXJlbmNlLmh0bWwKK2Rv
Yy9zdHlsZS5jc3MKK2RvYy92YWxpZC14aHRtbDEwLnBuZworZG9jL3htbHdmLjEKK2RvYy94bWx3
Zi5zZ21sCitDTWFrZUxpc3RzLnR4dAorQ01ha2UuUkVBRE1FCitDT1BZSU5HCitDaGFuZ2VzCitD
b25maWd1cmVDaGVja3MuY21ha2UKK01BTklGRVNUCitNYWtlZmlsZS5pbgorUkVBRE1FCitjb25m
aWd1cmUKK2NvbmZpZ3VyZS5pbgorZXhwYXRfY29uZmlnLmguaW4KK2V4cGF0X2NvbmZpZy5oLmNt
YWtlCitleHBhdC5wYy5pbgorZXhwYXQuZHN3CithY2xvY2FsLm00Citjb25mdG9vbHMvUHJpbnRQ
YXRoCitjb25mdG9vbHMvYWNfY19iaWdlbmRpYW5fY3Jvc3MubTQKK2NvbmZ0b29scy9leHBhdC5t
NAorY29uZnRvb2xzL2dldC12ZXJzaW9uLnNoCitjb25mdG9vbHMvbWtpbnN0YWxsZGlycworY29u
ZnRvb2xzL2NvbmZpZy5ndWVzcworY29uZnRvb2xzL2NvbmZpZy5zdWIKK2NvbmZ0b29scy9pbnN0
YWxsLXNoCitjb25mdG9vbHMvbHRtYWluLnNoCittNC9saWJ0b29sLm00CittNC9sdHZlcnNpb24u
bTQKK200L2x0b3B0aW9ucy5tNAorbTQvbHRzdWdhci5tNAorbTQvbHR+b2Jzb2xldGUubTQKK2V4
YW1wbGVzL2VsZW1lbnRzLmMKK2V4YW1wbGVzL2VsZW1lbnRzLmRzcAorZXhhbXBsZXMvb3V0bGlu
ZS5jCitleGFtcGxlcy9vdXRsaW5lLmRzcAorbGliL01ha2VmaWxlLk1QVworbGliL2FtaWdhY29u
ZmlnLmgKK2xpYi9hc2NpaS5oCitsaWIvYXNjaWl0YWIuaAorbGliL2V4cGF0LmRzcAorbGliL2V4
cGF0LmgKK2xpYi9leHBhdF9leHRlcm5hbC5oCitsaWIvZXhwYXRfc3RhdGljLmRzcAorbGliL2V4
cGF0dy5kc3AKK2xpYi9leHBhdHdfc3RhdGljLmRzcAorbGliL2lhc2NpaXRhYi5oCitsaWIvaW50
ZXJuYWwuaAorbGliL2xhdGluMXRhYi5oCitsaWIvbGliZXhwYXQuZGVmCitsaWIvbGliZXhwYXR3
LmRlZgorbGliL21hY2NvbmZpZy5oCitsaWIvbmFtZXRhYi5oCitsaWIvdXRmOHRhYi5oCitsaWIv
d2luY29uZmlnLmgKK2xpYi94bWxwYXJzZS5jCitsaWIveG1scm9sZS5jCitsaWIveG1scm9sZS5o
CitsaWIveG1sdG9rLmMKK2xpYi94bWx0b2suaAorbGliL3htbHRva19pbXBsLmMKK2xpYi94bWx0
b2tfaW1wbC5oCitsaWIveG1sdG9rX25zLmMKK3Rlc3RzL2JlbmNobWFyay9SRUFETUUudHh0Cit0
ZXN0cy9iZW5jaG1hcmsvYmVuY2htYXJrLmMKK3Rlc3RzL2JlbmNobWFyay9iZW5jaG1hcmsuZHNw
Cit0ZXN0cy9iZW5jaG1hcmsvYmVuY2htYXJrLmRzdwordGVzdHMvUkVBRE1FLnR4dAordGVzdHMv
Y2hhcmRhdGEuYwordGVzdHMvY2hhcmRhdGEuaAordGVzdHMvbWluaWNoZWNrLmMKK3Rlc3RzL21p
bmljaGVjay5oCit0ZXN0cy9ydW50ZXN0cy5jCit0ZXN0cy9ydW50ZXN0c3BwLmNwcAordGVzdHMv
eG1sdGVzdC5zaAordm1zL1JFQURNRS52bXMKK3Ztcy9kZXNjcmlwLm1tcwordm1zL2V4cGF0X2Nv
bmZpZy5oCit3aW4zMi9NQU5JRkVTVC50eHQKK3dpbjMyL1JFQURNRS50eHQKK3dpbjMyL2V4cGF0
LmlzcworeG1sd2YvY29kZXBhZ2UuYworeG1sd2YvY29kZXBhZ2UuaAoreG1sd2YvY3QuYworeG1s
d2YvZmlsZW1hcC5oCit4bWx3Zi9yZWFkZmlsZW1hcC5jCit4bWx3Zi91bml4ZmlsZW1hcC5jCit4
bWx3Zi93aW4zMmZpbGVtYXAuYworeG1sd2YveG1sZmlsZS5jCit4bWx3Zi94bWxmaWxlLmgKK3ht
bHdmL3htbG1pbWUuYworeG1sd2YveG1sbWltZS5oCit4bWx3Zi94bWx0Y2hhci5oCit4bWx3Zi94
bWx1cmwuaAoreG1sd2YveG1sd2YuYworeG1sd2YveG1sd2YuZHNwCit4bWx3Zi94bWx3aW4zMnVy
bC5jeHgKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvZXhwYXQvZmlsZXMvUkVBRE1FIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY4ODQ2
N2QxYjA0MDVkNDcwOTNlNzRjZDA2NGE2MmJmMWU0YTg3NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMv
UkVBRE1FCkBAIC0wLDAgKzEsMTM5IEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cGF0
LCBSZWxlYXNlIDIuMS4wCisKK1RoaXMgaXMgRXhwYXQsIGEgQyBsaWJyYXJ5IGZvciBwYXJzaW5n
IFhNTCwgd3JpdHRlbiBieSBKYW1lcyBDbGFyay4KK0V4cGF0IGlzIGEgc3RyZWFtLW9yaWVudGVk
IFhNTCBwYXJzZXIuICBUaGlzIG1lYW5zIHRoYXQgeW91IHJlZ2lzdGVyCitoYW5kbGVycyB3aXRo
IHRoZSBwYXJzZXIgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwYXJzZS4gIFRoZXNlIGhhbmRsZXJzCith
cmUgY2FsbGVkIHdoZW4gdGhlIHBhcnNlciBkaXNjb3ZlcnMgdGhlIGFzc29jaWF0ZWQgc3RydWN0
dXJlcyBpbiB0aGUKK2RvY3VtZW50IGJlaW5nIHBhcnNlZC4gIEEgc3RhcnQgdGFnIGlzIGFuIGV4
YW1wbGUgb2YgdGhlIGtpbmQgb2YKK3N0cnVjdHVyZXMgZm9yIHdoaWNoIHlvdSBtYXkgcmVnaXN0
ZXIgaGFuZGxlcnMuCisKK1dpbmRvd3MgdXNlcnMgc2hvdWxkIHVzZSB0aGUgZXhwYXRfd2luMzJi
aW4gcGFja2FnZSwgd2hpY2ggaW5jbHVkZXMKK2JvdGggcHJlY29tcGlsZWQgbGlicmFyaWVzIGFu
ZCBleGVjdXRhYmxlcywgYW5kIHNvdXJjZSBjb2RlIGZvcgorZGV2ZWxvcGVycy4KKworRXhwYXQg
aXMgZnJlZSBzb2Z0d2FyZS4gIFlvdSBtYXkgY29weSwgZGlzdHJpYnV0ZSwgYW5kIG1vZGlmeSBp
dCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGNvbnRhaW5lZCBpbiB0aGUgZmlsZSBD
T1BZSU5HIGRpc3RyaWJ1dGVkCit3aXRoIHRoaXMgcGFja2FnZS4gIFRoaXMgbGljZW5zZSBpcyB0
aGUgc2FtZSBhcyB0aGUgTUlUL1ggQ29uc29ydGl1bQorbGljZW5zZS4KKworVmVyc2lvbnMgb2Yg
RXhwYXQgdGhhdCBoYXZlIGFuIG9kZCBtaW5vciB2ZXJzaW9uICh0aGUgbWlkZGxlIG51bWJlciBp
bgordGhlIHJlbGVhc2UgYWJvdmUpLCBhcmUgZGV2ZWxvcG1lbnQgcmVsZWFzZXMgYW5kIHNob3Vs
ZCBiZSBjb25zaWRlcmVkCithcyBiZXRhIHNvZnR3YXJlLiAgUmVsZWFzZXMgd2l0aCBldmVuIG1p
bm9yIHZlcnNpb24gbnVtYmVycyBhcmUKK2ludGVuZGVkIHRvIGJlIHByb2R1Y3Rpb24gZ3JhZGUg
c29mdHdhcmUuCisKK0lmIHlvdSBhcmUgYnVpbGRpbmcgRXhwYXQgZnJvbSBhIGNoZWNrLW91dCBm
cm9tIHRoZSBDVlMgcmVwb3NpdG9yeSwKK3lvdSBuZWVkIHRvIHJ1biBhIHNjcmlwdCB0aGF0IGdl
bmVyYXRlcyB0aGUgY29uZmlndXJlIHNjcmlwdCB1c2luZyB0aGUKK0dOVSBhdXRvY29uZiBhbmQg
bGlidG9vbCB0b29scy4gIFRvIGRvIHRoaXMsIHlvdSBuZWVkIHRvIGhhdmUKK2F1dG9jb25mIDIu
NTggb3IgbmV3ZXIuIFJ1biB0aGUgc2NyaXB0IGxpa2UgdGhpczoKKworICAgICAgICAuL2J1aWxk
Y29uZi5zaAorCitPbmNlIHRoaXMgaGFzIGJlZW4gZG9uZSwgZm9sbG93IHRoZSBzYW1lIGluc3Ry
dWN0aW9ucyBhcyBmb3IgYnVpbGRpbmcKK2Zyb20gYSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCitU
byBidWlsZCBFeHBhdCBmcm9tIGEgc291cmNlIGRpc3RyaWJ1dGlvbiwgeW91IGZpcnN0IHJ1biB0
aGUKK2NvbmZpZ3VyYXRpb24gc2hlbGwgc2NyaXB0IGluIHRoZSB0b3AgbGV2ZWwgZGlzdHJpYnV0
aW9uIGRpcmVjdG9yeToKKworICAgICAgICAuL2NvbmZpZ3VyZQorCitUaGVyZSBhcmUgbWFueSBv
cHRpb25zIHdoaWNoIHlvdSBtYXkgcHJvdmlkZSB0byBjb25maWd1cmUgKHdoaWNoIHlvdQorY2Fu
IGRpc2NvdmVyIGJ5IHJ1bm5pbmcgY29uZmlndXJlIHdpdGggdGhlIC0taGVscCBvcHRpb24pLiAg
QnV0IHRoZQorb25lIG9mIG1vc3QgaW50ZXJlc3QgaXMgdGhlIG9uZSB0aGF0IHNldHMgdGhlIGlu
c3RhbGxhdGlvbiBkaXJlY3RvcnkuCitCeSBkZWZhdWx0LCB0aGUgY29uZmlndXJlIHNjcmlwdCB3
aWxsIHNldCB0aGluZ3MgdXAgdG8gaW5zdGFsbAorbGliZXhwYXQgaW50byAvdXNyL2xvY2FsL2xp
YiwgZXhwYXQuaCBpbnRvIC91c3IvbG9jYWwvaW5jbHVkZSwgYW5kCit4bWx3ZiBpbnRvIC91c3Iv
bG9jYWwvYmluLiAgSWYsIGZvciBleGFtcGxlLCB5b3UnZCBwcmVmZXIgdG8gaW5zdGFsbAoraW50
byAvaG9tZS9tZS9teXN0dWZmL2xpYiwgL2hvbWUvbWUvbXlzdHVmZi9pbmNsdWRlLCBhbmQKKy9o
b21lL21lL215c3R1ZmYvYmluLCB5b3UgY2FuIHRlbGwgY29uZmlndXJlIGFib3V0IHRoYXQgd2l0
aDoKKworICAgICAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vaG9tZS9tZS9teXN0dWZmCisgICAg
ICAgIAorQW5vdGhlciBpbnRlcmVzdGluZyBvcHRpb24gaXMgdG8gZW5hYmxlIDY0LWJpdCBpbnRl
Z2VyIHN1cHBvcnQgZm9yCitsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBhbmQgdGhlIG92ZXItYWxs
IGJ5dGUgaW5kZXg6CisKKyAgICAgICAgLi9jb25maWd1cmUgQ1BQRkxBR1M9LURYTUxfTEFSR0Vf
U0laRQorICAgICAgICAKK0hvd2V2ZXIsIHN1Y2ggYSBtb2RpZmljYXRpb24gd291bGQgYmUgYSBi
cmVha2luZyBjaGFuZ2UgdG8gdGhlIEFCSQorYW5kIGlzIHRoZXJlZm9yZSBub3QgcmVjb21tZW5k
ZWQgZm9yIGdlbmVyYWwgdXNlIC0gZS5nLiBhcyBwYXJ0IG9mCithIExpbnV4IGRpc3RyaWJ1dGlv
biAtIGJ1dCByYXRoZXIgZm9yIGJ1aWxkcyB3aXRoIHNwZWNpYWwgcmVxdWlyZW1lbnRzLgorCitB
ZnRlciBydW5uaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0LCB0aGUgIm1ha2UiIGNvbW1hbmQgd2ls
bCBidWlsZAordGhpbmdzIGFuZCAibWFrZSBpbnN0YWxsIiB3aWxsIGluc3RhbGwgdGhpbmdzIGlu
dG8gdGhlaXIgcHJvcGVyCitsb2NhdGlvbi4gIEhhdmUgYSBsb29rIGF0IHRoZSAiTWFrZWZpbGUi
IHRvIGxlYXJuIGFib3V0IGFkZGl0aW9uYWwKKyJtYWtlIiBvcHRpb25zLiAgTm90ZSB0aGF0IHlv
dSBuZWVkIHRvIGhhdmUgd3JpdGUgcGVybWlzc2lvbiBpbnRvCit0aGUgZGlyZWN0b3JpZXMgaW50
byB3aGljaCB0aGluZ3Mgd2lsbCBiZSBpbnN0YWxsZWQuCisKK0lmIHlvdSBhcmUgaW50ZXJlc3Rl
ZCBpbiBidWlsZGluZyBFeHBhdCB0byBwcm92aWRlIGRvY3VtZW50CitpbmZvcm1hdGlvbiBpbiBV
VEYtMTYgZW5jb2RpbmcgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgVVRGLTgsIGZvbGxvdwordGhl
c2UgaW5zdHJ1Y3Rpb25zIChhZnRlciBoYXZpbmcgcnVuICJtYWtlIGRpc3RjbGVhbiIpOgorCisg
ICAgICAgIDEuIEZvciBVVEYtMTYgb3V0cHV0IGFzIHVuc2lnbmVkIHNob3J0IChhbmQgdmVyc2lv
bi9lcnJvcgorICAgICAgICAgICBzdHJpbmdzIGFzIGNoYXIpLCBydW46CisKKyAgICAgICAgICAg
ICAgIC4vY29uZmlndXJlIENQUEZMQUdTPS1EWE1MX1VOSUNPREUKKworICAgICAgICAgICBGb3Ig
VVRGLTE2IG91dHB1dCBhcyB3Y2hhcl90IChpbmNsLiB2ZXJzaW9uL2Vycm9yIHN0cmluZ3MpLAor
ICAgICAgICAgICBydW46CisKKyAgICAgICAgICAgICAgIC4vY29uZmlndXJlIENGTEFHUz0iLWcg
LU8yIC1mc2hvcnQtd2NoYXIiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEZMQUdT
PS1EWE1MX1VOSUNPREVfV0NIQVJfVAorCisgICAgICAgIDIuIEVkaXQgdGhlIE1ha2VGaWxlLCBj
aGFuZ2luZzoKKworICAgICAgICAgICAgICAgTElCUkFSWSA9IGxpYmV4cGF0LmxhCisKKyAgICAg
ICAgICAgdG86CisKKyAgICAgICAgICAgICAgIExJQlJBUlkgPSBsaWJleHBhdHcubGEKKworICAg
ICAgICAgICAoTm90ZSB0aGUgYWRkaXRpb25hbCAidyIgaW4gdGhlIGxpYnJhcnkgbmFtZS4pCisK
KyAgICAgICAgMy4gUnVuICJtYWtlIGJ1aWxkbGliIiAod2hpY2ggYnVpbGRzIHRoZSBsaWJyYXJ5
IG9ubHkpLgorICAgICAgICAgICBPciwgdG8gc2F2ZSBzdGVwIDIsIHJ1biAibWFrZSBidWlsZGxp
YiBMSUJSQVJZPWxpYmV4cGF0dy5sYSIuCisKKyAgICAgICAgNC4gUnVuICJtYWtlIGluc3RhbGxs
aWIiICh3aGljaCBpbnN0YWxscyB0aGUgbGlicmFyeSBvbmx5KS4KKyAgICAgICAgICAgT3IsIGlm
IHN0ZXAgMiB3YXMgb21pdHRlZCwgcnVuICJtYWtlIGluc3RhbGxsaWIgTElCUkFSWT1saWJleHBh
dHcubGEiLgorICAgICAgICAgICAKK1VzaW5nIERFU1RESVIgb3IgSU5TVEFMTF9ST09UIGlzIGVu
YWJsZWQsIHdpdGggSU5TVEFMTF9ST09UIGJlaW5nIHRoZSBkZWZhdWx0Cit2YWx1ZSBmb3IgREVT
VERJUiwgYW5kIHRoZSByZXN0IG9mIHRoZSBtYWtlIGZpbGUgdXNpbmcgb25seSBERVNURElSLgor
SXQgd29ya3MgYXMgZm9sbG93czoKKyAgICQgbWFrZSBpbnN0YWxsIERFU1RESVI9L3BhdGgvdG8v
aW1hZ2UKK292ZXJyaWRlcyB0aGUgaW4tbWFrZWZpbGUgc2V0IERFU1RESVIsIHdoaWxlIGJvdGgK
KyAgICQgSU5TVEFMTF9ST09UPS9wYXRoL3RvL2ltYWdlIG1ha2UgaW5zdGFsbAorICAgJCBtYWtl
IGluc3RhbGwgSU5TVEFMTF9ST09UPS9wYXRoL3RvL2ltYWdlCit1c2UgREVTVERJUj0kKElOU1RB
TExfUk9PVCksIGV2ZW4gaWYgREVTVERJUiBldmVudHVhbGx5IGlzIGRlZmluZWQgaW4gdGhlCitl
bnZpcm9ubWVudCwgYmVjYXVzZSB2YXJpYWJsZS1zZXR0aW5nIHByaW9yaXR5IGlzCisxKSBjb21t
YW5kbGluZQorMikgaW4tbWFrZWZpbGUKKzMpIGVudmlyb25tZW50ICAKKworTm90ZTogVGhpcyBv
bmx5IGFwcGxpZXMgdG8gdGhlIEV4cGF0IGxpYnJhcnkgaXRzZWxmLCBidWlsZGluZyBVVEYtMTYg
dmVyc2lvbnMKK29mIHhtbHdmIGFuZCB0aGUgdGVzdHMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0
ZWQuICAgICAgICAgCisKK05vdGUgZm9yIFNvbGFyaXMgdXNlcnM6ICBUaGUgImFyIiBjb21tYW5k
IGlzIHVzdWFsbHkgbG9jYXRlZCBpbgorIi91c3IvY2NzL2JpbiIsIHdoaWNoIGlzIG5vdCBpbiB0
aGUgZGVmYXVsdCBQQVRILiAgWW91IHdpbGwgbmVlZCB0bworYWRkIHRoaXMgdG8geW91ciBwYXRo
IGZvciB0aGUgIm1ha2UiIGNvbW1hbmQsIGFuZCBwcm9iYWJseSBhbHNvIHN3aXRjaAordG8gR05V
IG1ha2UgKHRoZSAibWFrZSIgZm91bmQgaW4gL3Vzci9jY3MvYmluIGRvZXMgbm90IHNlZW0gdG8g
d29yaworcHJvcGVybHkgLS0gYXBwZWFyYW50bHkgaXQgZG9lcyBub3QgdW5kZXJzdGFuZCAuUEhP
TlkgZGlyZWN0aXZlcykuICBJZgoreW91J3JlIHVzaW5nIGtzaCBvciBiYXNoLCB1c2UgdGhpcyBj
b21tYW5kIHRvIGJ1aWxkOgorCisgICAgICAgIFBBVEg9L3Vzci9jY3MvYmluOiRQQVRIIG1ha2UK
KworV2hlbiB1c2luZyBFeHBhdCB3aXRoIGEgcHJvamVjdCB1c2luZyBhdXRvY29uZiBmb3IgY29u
ZmlndXJhdGlvbiwgeW91CitjYW4gdXNlIHRoZSBwcm9iaW5nIG1hY3JvIGluIGNvbmZ0b29scy9l
eHBhdC5tNCB0byBkZXRlcm1pbmUgaG93IHRvCitpbmNsdWRlIEV4cGF0LiAgU2VlIHRoZSBjb21t
ZW50cyBhdCB0aGUgdG9wIG9mIHRoYXQgZmlsZSBmb3IgbW9yZQoraW5mb3JtYXRpb24uCisKK0Eg
cmVmZXJlbmNlIG1hbnVhbCBpcyBhdmFpbGFibGUgaW4gdGhlIGZpbGUgZG9jL3JlZmVyZW5jZS5o
dG1sIGluIHRoaXMKK2Rpc3RyaWJ1dGlvbi4KKworVGhlIGhvbWVwYWdlIGZvciB0aGlzIHByb2pl
Y3QgaXMgaHR0cDovL3d3dy5saWJleHBhdC5vcmcvLiAgVGhlcmUKK2FyZSBsaW5rcyB0aGVyZSB0
byBjb25uZWN0IHlvdSB0byB0aGUgYnVnIHJlcG9ydHMgcGFnZS4gIElmIHlvdSBuZWVkCit0byBy
ZXBvcnQgYSBidWcgd2hlbiB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYSBicm93c2VyLCB5b3Ug
bWF5IGFsc28KK3NlbmQgYSBidWcgcmVwb3J0IGJ5IGVtYWlsIHRvIGV4cGF0LWJ1Z3NAbWFpbC5s
aWJleHBhdC5vcmcuCisKK0Rpc2N1c3Npb24gcmVsYXRlZCB0byB0aGUgZGlyZWN0aW9uIG9mIGZ1
dHVyZSBleHBhdCBkZXZlbG9wbWVudCB0YWtlcworcGxhY2Ugb24gZXhwYXQtZGlzY3Vzc0BtYWls
LmxpYmV4cGF0Lm9yZy4gIEFyY2hpdmVzIG9mIHRoaXMgbGlzdCBhbmQKK290aGVyIEV4cGF0LXJl
bGF0ZWQgbGlzdHMgbWF5IGJlIGZvdW5kIGF0OgorCisgICAgICAgIGh0dHA6Ly9tYWlsLmxpYmV4
cGF0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvYW1pZ2Fjb25maWcu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQv
ZmlsZXMvbGliL2FtaWdhY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZjNjExNTA0MDI1ZmI5YjAwY2Rk
ODVjNzkzYjJmYzNiNTZjZTg5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2FtaWdhY29uZmln
LmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBBTUlHQUNPTkZJR19ICisjZGVmaW5lIEFNSUdB
Q09ORklHX0gKKworLyogMTIzNCA9IExJTF9FTkRJQU4sIDQzMjEgPSBCSUdFTkRJQU4gKi8KKyNk
ZWZpbmUgQllURU9SREVSIDQzMjEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBi
Y29weScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQkNPUFkgMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPGNoZWNrLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVf
Q0hFQ0tfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0
aW9uLiAqLworI2RlZmluZSBIQVZFX01FTU1PVkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERf
SCAxCisKKy8qIHdoZXRoZXIgYnl0ZW9yZGVyIGlzIGJpZ2VuZGlhbiAqLworI2RlZmluZSBXT1JE
U19CSUdFTkRJQU4KKworLyogRGVmaW5lIHRvIHNwZWNpZnkgaG93IG11Y2ggY29udGV4dCB0byBy
ZXRhaW4gYXJvdW5kIHRoZSBjdXJyZW50IHBhcnNlCisgICBwb2ludC4gKi8KKyNkZWZpbmUgWE1M
X0NPTlRFWFRfQllURVMgMTAyNAorCisvKiBEZWZpbmUgdG8gbWFrZSBwYXJhbWV0ZXIgZW50aXR5
IHBhcnNpbmcgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUuICovCisjZGVmaW5lIFhNTF9EVEQKKwor
LyogRGVmaW5lIHRvIG1ha2UgWE1MIE5hbWVzcGFjZXMgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUu
ICovCisjZGVmaW5lIFhNTF9OUworCisjZW5kaWYgIC8qIEFNSUdBQ09ORklHX0ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhw
YXQvZmlsZXMvbGliL2FzY2lpLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9hc2NpaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxMDUzMGIw
OWJkZTY5ZDM0MmJmODY3ZDFjYTY1ZjhlNjMxNWEzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xp
Yi9hc2NpaS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBU
aGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKKyAgIFNlZSB0aGUgZmlsZSBDT1BZ
SU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCisqLworCisjZGVmaW5lIEFTQ0lJX0EgMHg0MQor
I2RlZmluZSBBU0NJSV9CIDB4NDIKKyNkZWZpbmUgQVNDSUlfQyAweDQzCisjZGVmaW5lIEFTQ0lJ
X0QgMHg0NAorI2RlZmluZSBBU0NJSV9FIDB4NDUKKyNkZWZpbmUgQVNDSUlfRiAweDQ2CisjZGVm
aW5lIEFTQ0lJX0cgMHg0NworI2RlZmluZSBBU0NJSV9IIDB4NDgKKyNkZWZpbmUgQVNDSUlfSSAw
eDQ5CisjZGVmaW5lIEFTQ0lJX0ogMHg0QQorI2RlZmluZSBBU0NJSV9LIDB4NEIKKyNkZWZpbmUg
QVNDSUlfTCAweDRDCisjZGVmaW5lIEFTQ0lJX00gMHg0RAorI2RlZmluZSBBU0NJSV9OIDB4NEUK
KyNkZWZpbmUgQVNDSUlfTyAweDRGCisjZGVmaW5lIEFTQ0lJX1AgMHg1MAorI2RlZmluZSBBU0NJ
SV9RIDB4NTEKKyNkZWZpbmUgQVNDSUlfUiAweDUyCisjZGVmaW5lIEFTQ0lJX1MgMHg1MworI2Rl
ZmluZSBBU0NJSV9UIDB4NTQKKyNkZWZpbmUgQVNDSUlfVSAweDU1CisjZGVmaW5lIEFTQ0lJX1Yg
MHg1NgorI2RlZmluZSBBU0NJSV9XIDB4NTcKKyNkZWZpbmUgQVNDSUlfWCAweDU4CisjZGVmaW5l
IEFTQ0lJX1kgMHg1OQorI2RlZmluZSBBU0NJSV9aIDB4NUEKKworI2RlZmluZSBBU0NJSV9hIDB4
NjEKKyNkZWZpbmUgQVNDSUlfYiAweDYyCisjZGVmaW5lIEFTQ0lJX2MgMHg2MworI2RlZmluZSBB
U0NJSV9kIDB4NjQKKyNkZWZpbmUgQVNDSUlfZSAweDY1CisjZGVmaW5lIEFTQ0lJX2YgMHg2Ngor
I2RlZmluZSBBU0NJSV9nIDB4NjcKKyNkZWZpbmUgQVNDSUlfaCAweDY4CisjZGVmaW5lIEFTQ0lJ
X2kgMHg2OQorI2RlZmluZSBBU0NJSV9qIDB4NkEKKyNkZWZpbmUgQVNDSUlfayAweDZCCisjZGVm
aW5lIEFTQ0lJX2wgMHg2QworI2RlZmluZSBBU0NJSV9tIDB4NkQKKyNkZWZpbmUgQVNDSUlfbiAw
eDZFCisjZGVmaW5lIEFTQ0lJX28gMHg2RgorI2RlZmluZSBBU0NJSV9wIDB4NzAKKyNkZWZpbmUg
QVNDSUlfcSAweDcxCisjZGVmaW5lIEFTQ0lJX3IgMHg3MgorI2RlZmluZSBBU0NJSV9zIDB4NzMK
KyNkZWZpbmUgQVNDSUlfdCAweDc0CisjZGVmaW5lIEFTQ0lJX3UgMHg3NQorI2RlZmluZSBBU0NJ
SV92IDB4NzYKKyNkZWZpbmUgQVNDSUlfdyAweDc3CisjZGVmaW5lIEFTQ0lJX3ggMHg3OAorI2Rl
ZmluZSBBU0NJSV95IDB4NzkKKyNkZWZpbmUgQVNDSUlfeiAweDdBCisKKyNkZWZpbmUgQVNDSUlf
MCAweDMwCisjZGVmaW5lIEFTQ0lJXzEgMHgzMQorI2RlZmluZSBBU0NJSV8yIDB4MzIKKyNkZWZp
bmUgQVNDSUlfMyAweDMzCisjZGVmaW5lIEFTQ0lJXzQgMHgzNAorI2RlZmluZSBBU0NJSV81IDB4
MzUKKyNkZWZpbmUgQVNDSUlfNiAweDM2CisjZGVmaW5lIEFTQ0lJXzcgMHgzNworI2RlZmluZSBB
U0NJSV84IDB4MzgKKyNkZWZpbmUgQVNDSUlfOSAweDM5CisKKyNkZWZpbmUgQVNDSUlfVEFCIDB4
MDkKKyNkZWZpbmUgQVNDSUlfU1BBQ0UgMHgyMAorI2RlZmluZSBBU0NJSV9FWENMIDB4MjEKKyNk
ZWZpbmUgQVNDSUlfUVVPVCAweDIyCisjZGVmaW5lIEFTQ0lJX0FNUCAweDI2CisjZGVmaW5lIEFT
Q0lJX0FQT1MgMHgyNworI2RlZmluZSBBU0NJSV9NSU5VUyAweDJECisjZGVmaW5lIEFTQ0lJX1BF
UklPRCAweDJFCisjZGVmaW5lIEFTQ0lJX0NPTE9OIDB4M0EKKyNkZWZpbmUgQVNDSUlfU0VNSSAw
eDNCCisjZGVmaW5lIEFTQ0lJX0xUIDB4M0MKKyNkZWZpbmUgQVNDSUlfRVFVQUxTIDB4M0QKKyNk
ZWZpbmUgQVNDSUlfR1QgMHgzRQorI2RlZmluZSBBU0NJSV9MU1FCIDB4NUIKKyNkZWZpbmUgQVND
SUlfUlNRQiAweDVECisjZGVmaW5lIEFTQ0lJX1VOREVSU0NPUkUgMHg1RgorI2RlZmluZSBBU0NJ
SV9MUEFSRU4gMHgyOAorI2RlZmluZSBBU0NJSV9SUEFSRU4gMHgyOQorI2RlZmluZSBBU0NJSV9G
RiAweDBDCisjZGVmaW5lIEFTQ0lJX1NMQVNIIDB4MkYKKyNkZWZpbmUgQVNDSUlfSEFTSCAweDIz
CisjZGVmaW5lIEFTQ0lJX1BJUEUgMHg3QworI2RlZmluZSBBU0NJSV9DT01NQSAweDJDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL2xpYi9hc2NpaXRhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvYXNjaWl0YWIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
OWExNWMyOGNhMTRmOGE4OWM5MDg2MWMxZjY5YjdmZjViODJiNjNiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9m
aWxlcy9saWIvYXNjaWl0YWIuaApAQCAtMCwwICsxLDM2IEBACisvKiBDb3B5cmlnaHQgKGMpIDE5
OTgsIDE5OTkgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCisgICBTZWUgdGhl
IGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgorKi8KKworLyogMHgwMCAqLyBC
VF9OT05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9OT05YTUwsCisvKiAweDA0ICovIEJU
X05PTlhNTCwgQlRfTk9OWE1MLCBCVF9OT05YTUwsIEJUX05PTlhNTCwKKy8qIDB4MDggKi8gQlRf
Tk9OWE1MLCBCVF9TLCBCVF9MRiwgQlRfTk9OWE1MLAorLyogMHgwQyAqLyBCVF9OT05YTUwsIEJU
X0NSLCBCVF9OT05YTUwsIEJUX05PTlhNTCwKKy8qIDB4MTAgKi8gQlRfTk9OWE1MLCBCVF9OT05Y
TUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLAorLyogMHgxNCAqLyBCVF9OT05YTUwsIEJUX05PTlhN
TCwgQlRfTk9OWE1MLCBCVF9OT05YTUwsCisvKiAweDE4ICovIEJUX05PTlhNTCwgQlRfTk9OWE1M
LCBCVF9OT05YTUwsIEJUX05PTlhNTCwKKy8qIDB4MUMgKi8gQlRfTk9OWE1MLCBCVF9OT05YTUws
IEJUX05PTlhNTCwgQlRfTk9OWE1MLAorLyogMHgyMCAqLyBCVF9TLCBCVF9FWENMLCBCVF9RVU9U
LCBCVF9OVU0sCisvKiAweDI0ICovIEJUX09USEVSLCBCVF9QRVJDTlQsIEJUX0FNUCwgQlRfQVBP
UywKKy8qIDB4MjggKi8gQlRfTFBBUiwgQlRfUlBBUiwgQlRfQVNULCBCVF9QTFVTLAorLyogMHgy
QyAqLyBCVF9DT01NQSwgQlRfTUlOVVMsIEJUX05BTUUsIEJUX1NPTCwKKy8qIDB4MzAgKi8gQlRf
RElHSVQsIEJUX0RJR0lULCBCVF9ESUdJVCwgQlRfRElHSVQsCisvKiAweDM0ICovIEJUX0RJR0lU
LCBCVF9ESUdJVCwgQlRfRElHSVQsIEJUX0RJR0lULAorLyogMHgzOCAqLyBCVF9ESUdJVCwgQlRf
RElHSVQsIEJUX0NPTE9OLCBCVF9TRU1JLAorLyogMHgzQyAqLyBCVF9MVCwgQlRfRVFVQUxTLCBC
VF9HVCwgQlRfUVVFU1QsCisvKiAweDQwICovIEJUX09USEVSLCBCVF9IRVgsIEJUX0hFWCwgQlRf
SEVYLAorLyogMHg0NCAqLyBCVF9IRVgsIEJUX0hFWCwgQlRfSEVYLCBCVF9OTVNUUlQsCisvKiAw
eDQ4ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKKy8qIDB4
NEMgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAorLyogMHg1
MCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCisvKiAweDU0
ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKKy8qIDB4NTgg
Ki8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTFNRQiwKKy8qIDB4NUMgKi8g
QlRfT1RIRVIsIEJUX1JTUUIsIEJUX09USEVSLCBCVF9OTVNUUlQsCisvKiAweDYwICovIEJUX09U
SEVSLCBCVF9IRVgsIEJUX0hFWCwgQlRfSEVYLAorLyogMHg2NCAqLyBCVF9IRVgsIEJUX0hFWCwg
QlRfSEVYLCBCVF9OTVNUUlQsCisvKiAweDY4ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9O
TVNUUlQsIEJUX05NU1RSVCwKKy8qIDB4NkMgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05N
U1RSVCwgQlRfTk1TVFJULAorLyogMHg3MCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1T
VFJULCBCVF9OTVNUUlQsCisvKiAweDc0ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNU
UlQsIEJUX05NU1RSVCwKKy8qIDB4NzggKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RS
VCwgQlRfT1RIRVIsCisvKiAweDdDICovIEJUX1ZFUkJBUiwgQlRfT1RIRVIsIEJUX09USEVSLCBC
VF9PVEhFUiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2V4cGF0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9leHBhdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlhMjE2ODBiZTQ2OGNhZDI4YTA1ZDJkYWVjNzExMDIzMzMwMjRlZmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L2V4cGF0L2ZpbGVzL2xpYi9leHBhdC5oCkBAIC0wLDAgKzEsMTA0NyBAQAorLyogQ29weXJpZ2h0
IChjKSAxOTk4LCAxOTk5LCAyMDAwIFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUgQ2VudGVyIEx0
ZAorICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KKyovCisK
KyNpZm5kZWYgRXhwYXRfSU5DTFVERUQKKyNkZWZpbmUgRXhwYXRfSU5DTFVERUQgMQorCisjaWZk
ZWYgX19WTVMKKy8qICAgICAgMCAgICAgICAgMSAgICAgICAgIDIgICAgICAgICAzICAgICAgMCAg
ICAgICAgMSAgICAgICAgIDIgICAgICAgICAzCisgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEgKi8KKyNkZWZp
bmUgWE1MX1NldFByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgWE1MX1NldFByb2Nlc3NpbmdJ
bnN0ckhhbmRsZXIKKyNkZWZpbmUgWE1MX1NldFVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgICAg
WE1MX1NldFVucGFyc2VkRW50RGVjbEhhbmRsZXIKKyNkZWZpbmUgWE1MX1NldFN0YXJ0TmFtZXNw
YWNlRGVjbEhhbmRsZXIgICAgWE1MX1NldFN0YXJ0TmFtZXNwY0RlY2xIYW5kbGVyCisjZGVmaW5l
IFhNTF9TZXRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcgIFhNTF9TZXRFeHRlcm5hbEVudFJl
ZkhhbmRsZXJBcmcKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiZXhw
YXRfZXh0ZXJuYWwuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRp
ZgorCitzdHJ1Y3QgWE1MX1BhcnNlclN0cnVjdDsKK3R5cGVkZWYgc3RydWN0IFhNTF9QYXJzZXJT
dHJ1Y3QgKlhNTF9QYXJzZXI7CisKKy8qIFNob3VsZCB0aGlzIGJlIGRlZmluZWQgdXNpbmcgc3Rk
Ym9vbC5oIHdoZW4gQzk5IGlzIGF2YWlsYWJsZT8gKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBY
TUxfQm9vbDsKKyNkZWZpbmUgWE1MX1RSVUUgICAoKFhNTF9Cb29sKSAxKQorI2RlZmluZSBYTUxf
RkFMU0UgICgoWE1MX0Jvb2wpIDApCisKKy8qIFRoZSBYTUxfU3RhdHVzIGVudW0gZ2l2ZXMgdGhl
IHBvc3NpYmxlIHJldHVybiB2YWx1ZXMgZm9yIHNldmVyYWwKKyAgIEFQSSBmdW5jdGlvbnMuICBU
aGUgcHJlcHJvY2Vzc29yICNkZWZpbmVzIGFyZSBpbmNsdWRlZCBzbyB0aGlzCisgICBzdGFuemEg
Y2FuIGJlIGFkZGVkIHRvIGNvZGUgdGhhdCBzdGlsbCBuZWVkcyB0byBzdXBwb3J0IG9sZGVyCisg
ICB2ZXJzaW9ucyBvZiBFeHBhdCAxLjk1Lng6CisKKyAgICNpZm5kZWYgWE1MX1NUQVRVU19PSwor
ICAgI2RlZmluZSBYTUxfU1RBVFVTX09LICAgIDEKKyAgICNkZWZpbmUgWE1MX1NUQVRVU19FUlJP
UiAwCisgICAjZW5kaWYKKworICAgT3RoZXJ3aXNlLCB0aGUgI2RlZmluZSBoYWNrZXJ5IGlzIHF1
aXRlIHVnbHkgYW5kIHdvdWxkIGhhdmUgYmVlbgorICAgZHJvcHBlZC4KKyovCitlbnVtIFhNTF9T
dGF0dXMgeworICBYTUxfU1RBVFVTX0VSUk9SID0gMCwKKyNkZWZpbmUgWE1MX1NUQVRVU19FUlJP
UiBYTUxfU1RBVFVTX0VSUk9SCisgIFhNTF9TVEFUVVNfT0sgPSAxLAorI2RlZmluZSBYTUxfU1RB
VFVTX09LIFhNTF9TVEFUVVNfT0sKKyAgWE1MX1NUQVRVU19TVVNQRU5ERUQgPSAyCisjZGVmaW5l
IFhNTF9TVEFUVVNfU1VTUEVOREVEIFhNTF9TVEFUVVNfU1VTUEVOREVECit9OworCitlbnVtIFhN
TF9FcnJvciB7CisgIFhNTF9FUlJPUl9OT05FLAorICBYTUxfRVJST1JfTk9fTUVNT1JZLAorICBY
TUxfRVJST1JfU1lOVEFYLAorICBYTUxfRVJST1JfTk9fRUxFTUVOVFMsCisgIFhNTF9FUlJPUl9J
TlZBTElEX1RPS0VOLAorICBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU4sCisgIFhNTF9FUlJPUl9Q
QVJUSUFMX0NIQVIsCisgIFhNTF9FUlJPUl9UQUdfTUlTTUFUQ0gsCisgIFhNTF9FUlJPUl9EVVBM
SUNBVEVfQVRUUklCVVRFLAorICBYTUxfRVJST1JfSlVOS19BRlRFUl9ET0NfRUxFTUVOVCwKKyAg
WE1MX0VSUk9SX1BBUkFNX0VOVElUWV9SRUYsCisgIFhNTF9FUlJPUl9VTkRFRklORURfRU5USVRZ
LAorICBYTUxfRVJST1JfUkVDVVJTSVZFX0VOVElUWV9SRUYsCisgIFhNTF9FUlJPUl9BU1lOQ19F
TlRJVFksCisgIFhNTF9FUlJPUl9CQURfQ0hBUl9SRUYsCisgIFhNTF9FUlJPUl9CSU5BUllfRU5U
SVRZX1JFRiwKKyAgWE1MX0VSUk9SX0FUVFJJQlVURV9FWFRFUk5BTF9FTlRJVFlfUkVGLAorICBY
TUxfRVJST1JfTUlTUExBQ0VEX1hNTF9QSSwKKyAgWE1MX0VSUk9SX1VOS05PV05fRU5DT0RJTkcs
CisgIFhNTF9FUlJPUl9JTkNPUlJFQ1RfRU5DT0RJTkcsCisgIFhNTF9FUlJPUl9VTkNMT1NFRF9D
REFUQV9TRUNUSU9OLAorICBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRMSU5HLAorICBY
TUxfRVJST1JfTk9UX1NUQU5EQUxPTkUsCisgIFhNTF9FUlJPUl9VTkVYUEVDVEVEX1NUQVRFLAor
ICBYTUxfRVJST1JfRU5USVRZX0RFQ0xBUkVEX0lOX1BFLAorICBYTUxfRVJST1JfRkVBVFVSRV9S
RVFVSVJFU19YTUxfRFRELAorICBYTUxfRVJST1JfQ0FOVF9DSEFOR0VfRkVBVFVSRV9PTkNFX1BB
UlNJTkcsCisgIC8qIEFkZGVkIGluIDEuOTUuNy4gKi8KKyAgWE1MX0VSUk9SX1VOQk9VTkRfUFJF
RklYLAorICAvKiBBZGRlZCBpbiAxLjk1LjguICovCisgIFhNTF9FUlJPUl9VTkRFQ0xBUklOR19Q
UkVGSVgsCisgIFhNTF9FUlJPUl9JTkNPTVBMRVRFX1BFLAorICBYTUxfRVJST1JfWE1MX0RFQ0ws
CisgIFhNTF9FUlJPUl9URVhUX0RFQ0wsCisgIFhNTF9FUlJPUl9QVUJMSUNJRCwKKyAgWE1MX0VS
Uk9SX1NVU1BFTkRFRCwKKyAgWE1MX0VSUk9SX05PVF9TVVNQRU5ERUQsCisgIFhNTF9FUlJPUl9B
Qk9SVEVELAorICBYTUxfRVJST1JfRklOSVNIRUQsCisgIFhNTF9FUlJPUl9TVVNQRU5EX1BFLAor
ICAvKiBBZGRlZCBpbiAyLjAuICovCisgIFhNTF9FUlJPUl9SRVNFUlZFRF9QUkVGSVhfWE1MLAor
ICBYTUxfRVJST1JfUkVTRVJWRURfUFJFRklYX1hNTE5TLAorICBYTUxfRVJST1JfUkVTRVJWRURf
TkFNRVNQQUNFX1VSSQorfTsKKworZW51bSBYTUxfQ29udGVudF9UeXBlIHsKKyAgWE1MX0NUWVBF
X0VNUFRZID0gMSwKKyAgWE1MX0NUWVBFX0FOWSwKKyAgWE1MX0NUWVBFX01JWEVELAorICBYTUxf
Q1RZUEVfTkFNRSwKKyAgWE1MX0NUWVBFX0NIT0lDRSwKKyAgWE1MX0NUWVBFX1NFUQorfTsKKwor
ZW51bSBYTUxfQ29udGVudF9RdWFudCB7CisgIFhNTF9DUVVBTlRfTk9ORSwKKyAgWE1MX0NRVUFO
VF9PUFQsCisgIFhNTF9DUVVBTlRfUkVQLAorICBYTUxfQ1FVQU5UX1BMVVMKK307CisKKy8qIElm
IHR5cGUgPT0gWE1MX0NUWVBFX0VNUFRZIG9yIFhNTF9DVFlQRV9BTlksIHRoZW4gcXVhbnQgd2ls
bCBiZQorICAgWE1MX0NRVUFOVF9OT05FLCBhbmQgdGhlIG90aGVyIGZpZWxkcyB3aWxsIGJlIHpl
cm8gb3IgTlVMTC4KKyAgIElmIHR5cGUgPT0gWE1MX0NUWVBFX01JWEVELCB0aGVuIHF1YW50IHdp
bGwgYmUgTk9ORSBvciBSRVAgYW5kCisgICBudW1jaGlsZHJlbiB3aWxsIGNvbnRhaW4gbnVtYmVy
IG9mIGVsZW1lbnRzIHRoYXQgbWF5IGJlIG1peGVkIGluCisgICBhbmQgY2hpbGRyZW4gcG9pbnQg
dG8gYW4gYXJyYXkgb2YgWE1MX0NvbnRlbnQgY2VsbHMgdGhhdCB3aWxsIGJlCisgICBhbGwgb2Yg
WE1MX0NUWVBFX05BTUUgdHlwZSB3aXRoIG5vIHF1YW50aWZpY2F0aW9uLgorCisgICBJZiB0eXBl
ID09IFhNTF9DVFlQRV9OQU1FLCB0aGVuIHRoZSBuYW1lIHBvaW50cyB0byB0aGUgbmFtZSwgYW5k
CisgICB0aGUgbnVtY2hpbGRyZW4gZmllbGQgd2lsbCBiZSB6ZXJvIGFuZCBjaGlsZHJlbiB3aWxs
IGJlIE5VTEwuIFRoZQorICAgcXVhbnQgZmllbGRzIGluZGljYXRlcyBhbnkgcXVhbnRpZmllcnMg
cGxhY2VkIG9uIHRoZSBuYW1lLgorCisgICBDSE9JQ0UgYW5kIFNFUSB3aWxsIGhhdmUgbmFtZSBO
VUxMLCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluCisgICBudW1jaGlsZHJlbiBhbmQgY2hpbGRy
ZW4gd2lsbCBwb2ludCwgcmVjdXJzaXZlbHksIHRvIGFuIGFycmF5CisgICBvZiBYTUxfQ29udGVu
dCBjZWxscy4KKworICAgVGhlIEVNUFRZLCBBTlksIGFuZCBNSVhFRCB0eXBlcyB3aWxsIG9ubHkg
b2NjdXIgYXQgdG9wIGxldmVsLgorKi8KKwordHlwZWRlZiBzdHJ1Y3QgWE1MX2NwIFhNTF9Db250
ZW50OworCitzdHJ1Y3QgWE1MX2NwIHsKKyAgZW51bSBYTUxfQ29udGVudF9UeXBlICAgICAgICAg
dHlwZTsKKyAgZW51bSBYTUxfQ29udGVudF9RdWFudCAgICAgICAgcXVhbnQ7CisgIFhNTF9DaGFy
ICogICAgICAgICAgICAgICAgICAgIG5hbWU7CisgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAg
ICAgIG51bWNoaWxkcmVuOworICBYTUxfQ29udGVudCAqICAgICAgICAgICAgICAgICBjaGlsZHJl
bjsKK307CisKKworLyogVGhpcyBpcyBjYWxsZWQgZm9yIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24u
IFNlZSBhYm92ZSBmb3IKKyAgIGRlc2NyaXB0aW9uIG9mIHRoZSBtb2RlbCBhcmd1bWVudC4gSXQn
cyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkKKyAgIHRvIGZyZWUgbW9kZWwgd2hlbiBmaW5p
c2hlZCB3aXRoIGl0LgorKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX0VsZW1lbnREZWNs
SGFuZGxlcikgKHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQ29udGVudCAqbW9kZWwpOworCitY
TUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldEVsZW1lbnREZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBh
cnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VsZW1lbnREZWNsSGFuZGxlciBl
bGRlY2wpOworCisvKiBUaGUgQXR0bGlzdCBkZWNsYXJhdGlvbiBoYW5kbGVyIGlzIGNhbGxlZCBm
b3IgKmVhY2gqIGF0dHJpYnV0ZS4gU28KKyAgIGEgc2luZ2xlIEF0dGxpc3QgZGVjbGFyYXRpb24g
d2l0aCBtdWx0aXBsZSBhdHRyaWJ1dGVzIGRlY2xhcmVkIHdpbGwKKyAgIGdlbmVyYXRlIG11bHRp
cGxlIGNhbGxzIHRvIHRoaXMgaGFuZGxlci4gVGhlICJkZWZhdWx0IiBwYXJhbWV0ZXIKKyAgIG1h
eSBiZSBOVUxMIGluIHRoZSBjYXNlIG9mIHRoZSAiI0lNUExJRUQiIG9yICIjUkVRVUlSRUQiCisg
ICBrZXl3b3JkLiBUaGUgImlzcmVxdWlyZWQiIHBhcmFtZXRlciB3aWxsIGJlIHRydWUgYW5kIHRo
ZSBkZWZhdWx0CisgICB2YWx1ZSB3aWxsIGJlIE5VTEwgaW4gdGhlIGNhc2Ugb2YgIiNSRVFVSVJF
RCIuIElmICJpc3JlcXVpcmVkIiBpcworICAgdHJ1ZSBhbmQgZGVmYXVsdCBpcyBub24tTlVMTCwg
dGhlbiB0aGlzIGlzIGEgIiNGSVhFRCIgZGVmYXVsdC4KKyovCit0eXBlZGVmIHZvaWQgKFhNTENB
TEwgKlhNTF9BdHRsaXN0RGVjbEhhbmRsZXIpICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgICAgICAgICAgICAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAgKmVsbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICAqYXR0bmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICAqYXR0X3R5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAgKmRmbHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgIGlz
cmVxdWlyZWQpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldEF0dGxpc3REZWNsSGFuZGxl
cihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0F0dGxp
c3REZWNsSGFuZGxlciBhdHRkZWNsKTsKKworLyogVGhlIFhNTCBkZWNsYXJhdGlvbiBoYW5kbGVy
IGlzIGNhbGxlZCBmb3IgKmJvdGgqIFhNTCBkZWNsYXJhdGlvbnMKKyAgIGFuZCB0ZXh0IGRlY2xh
cmF0aW9ucy4gVGhlIHdheSB0byBkaXN0aW5ndWlzaCBpcyB0aGF0IHRoZSB2ZXJzaW9uCisgICBw
YXJhbWV0ZXIgd2lsbCBiZSBOVUxMIGZvciB0ZXh0IGRlY2xhcmF0aW9ucy4gVGhlIGVuY29kaW5n
CisgICBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwgZm9yIFhNTCBkZWNsYXJhdGlvbnMuIFRoZSBzdGFu
ZGFsb25lCisgICBwYXJhbWV0ZXIgd2lsbCBiZSAtMSwgMCwgb3IgMSBpbmRpY2F0aW5nIHJlc3Bl
Y3RpdmVseSB0aGF0IHRoZXJlCisgICB3YXMgbm8gc3RhbmRhbG9uZSBwYXJhbWV0ZXIgaW4gdGhl
IGRlY2xhcmF0aW9uLCB0aGF0IGl0IHdhcyBnaXZlbgorICAgYXMgbm8sIG9yIHRoYXQgaXQgd2Fz
IGdpdmVuIGFzIHllcy4KKyovCit0eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9YbWxEZWNsSGFu
ZGxlcikgKHZvaWQgICAgICAgICAgICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnZlcnNpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICplbmNvZGlu
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAg
ICAgICAgIHN0YW5kYWxvbmUpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldFhtbERlY2xI
YW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgIFhNTF9YbWxE
ZWNsSGFuZGxlciB4bWxkZWNsKTsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgIHZvaWQgKigqbWFs
bG9jX2Zjbikoc2l6ZV90IHNpemUpOworICB2b2lkICooKnJlYWxsb2NfZmNuKSh2b2lkICpwdHIs
IHNpemVfdCBzaXplKTsKKyAgdm9pZCAoKmZyZWVfZmNuKSh2b2lkICpwdHIpOworfSBYTUxfTWVt
b3J5X0hhbmRsaW5nX1N1aXRlOworCisvKiBDb25zdHJ1Y3RzIGEgbmV3IHBhcnNlcjsgZW5jb2Rp
bmcgaXMgdGhlIGVuY29kaW5nIHNwZWNpZmllZCBieSB0aGUKKyAgIGV4dGVybmFsIHByb3RvY29s
IG9yIE5VTEwgaWYgdGhlcmUgaXMgbm9uZSBzcGVjaWZpZWQuCisqLworWE1MUEFSU0VBUEkoWE1M
X1BhcnNlcikKK1hNTF9QYXJzZXJDcmVhdGUoY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nKTsKKwor
LyogQ29uc3RydWN0cyBhIG5ldyBwYXJzZXIgYW5kIG5hbWVzcGFjZSBwcm9jZXNzb3IuICBFbGVt
ZW50IHR5cGUKKyAgIG5hbWVzIGFuZCBhdHRyaWJ1dGUgbmFtZXMgdGhhdCBiZWxvbmcgdG8gYSBu
YW1lc3BhY2Ugd2lsbCBiZQorICAgZXhwYW5kZWQ7IHVucHJlZml4ZWQgYXR0cmlidXRlIG5hbWVz
IGFyZSBuZXZlciBleHBhbmRlZDsgdW5wcmVmaXhlZAorICAgZWxlbWVudCB0eXBlIG5hbWVzIGFy
ZSBleHBhbmRlZCBvbmx5IGlmIHRoZXJlIGlzIGEgZGVmYXVsdAorICAgbmFtZXNwYWNlLiBUaGUg
ZXhwYW5kZWQgbmFtZSBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgbmFtZXNwYWNlCisgICBV
UkksIHRoZSBuYW1lc3BhY2Ugc2VwYXJhdG9yIGNoYXJhY3RlciwgYW5kIHRoZSBsb2NhbCBwYXJ0
IG9mIHRoZQorICAgbmFtZS4gIElmIHRoZSBuYW1lc3BhY2Ugc2VwYXJhdG9yIGlzICdcMCcgdGhl
biB0aGUgbmFtZXNwYWNlIFVSSQorICAgYW5kIHRoZSBsb2NhbCBwYXJ0IHdpbGwgYmUgY29uY2F0
ZW5hdGVkIHdpdGhvdXQgYW55IHNlcGFyYXRvci4KKyAgIEl0IGlzIGEgcHJvZ3JhbW1pbmcgZXJy
b3IgdG8gdXNlIHRoZSBzZXBhcmF0b3IgJ1wwJyB3aXRoIG5hbWVzcGFjZQorICAgdHJpcGxldHMg
KHNlZSBYTUxfU2V0UmV0dXJuTlNUcmlwbGV0KS4KKyovCitYTUxQQVJTRUFQSShYTUxfUGFyc2Vy
KQorWE1MX1BhcnNlckNyZWF0ZU5TKGNvbnN0IFhNTF9DaGFyICplbmNvZGluZywgWE1MX0NoYXIg
bmFtZXNwYWNlU2VwYXJhdG9yKTsKKworCisvKiBDb25zdHJ1Y3RzIGEgbmV3IHBhcnNlciB1c2lu
ZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3VpdGUgcmVmZXJyZWQgdG8KKyAgIGJ5IG1lbXN1aXRl
LiBJZiBtZW1zdWl0ZSBpcyBOVUxMLCB0aGVuIHVzZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBtZW1v
cnkKKyAgIHN1aXRlLiBJZiBuYW1lc3BhY2VTZXBhcmF0b3IgaXMgbm9uLU5VTEwgaXQgY3JlYXRl
cyBhIHBhcnNlciB3aXRoCisgICBuYW1lc3BhY2UgcHJvY2Vzc2luZyBhcyBkZXNjcmliZWQgYWJv
dmUuIFRoZSBjaGFyYWN0ZXIgcG9pbnRlZCBhdAorICAgd2lsbCBzZXJ2ZSBhcyB0aGUgbmFtZXNw
YWNlIHNlcGFyYXRvci4KKworICAgQWxsIGZ1cnRoZXIgbWVtb3J5IG9wZXJhdGlvbnMgdXNlZCBm
b3IgdGhlIGNyZWF0ZWQgcGFyc2VyIHdpbGwgY29tZSBmcm9tCisgICB0aGUgZ2l2ZW4gc3VpdGUu
CisqLworWE1MUEFSU0VBUEkoWE1MX1BhcnNlcikKK1hNTF9QYXJzZXJDcmVhdGVfTU0oY29uc3Qg
WE1MX0NoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfTWVtb3J5
X0hhbmRsaW5nX1N1aXRlICptZW1zdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1M
X0NoYXIgKm5hbWVzcGFjZVNlcGFyYXRvcik7CisKKy8qIFByZXBhcmUgYSBwYXJzZXIgb2JqZWN0
IHRvIGJlIHJlLXVzZWQuICBUaGlzIGlzIHBhcnRpY3VsYXJseQorICAgdmFsdWFibGUgd2hlbiBt
ZW1vcnkgYWxsb2NhdGlvbiBvdmVyaGVhZCBpcyBkaXNwcm9wb3J0aW9uYXRseSBoaWdoLAorICAg
c3VjaCBhcyB3aGVuIGEgbGFyZ2UgbnVtYmVyIG9mIHNtYWxsIGRvY3VtbmVudHMgbmVlZCB0byBi
ZSBwYXJzZWQuCisgICBBbGwgaGFuZGxlcnMgYXJlIGNsZWFyZWQgZnJvbSB0aGUgcGFyc2VyLCBl
eGNlcHQgZm9yIHRoZQorICAgdW5rbm93bkVuY29kaW5nSGFuZGxlci4gVGhlIHBhcnNlcidzIGV4
dGVybmFsIHN0YXRlIGlzIHJlLWluaXRpYWxpemVkCisgICBleGNlcHQgZm9yIHRoZSB2YWx1ZXMg
b2YgbnMgYW5kIG5zX3RyaXBsZXRzLgorCisgICBBZGRlZCBpbiBFeHBhdCAxLjk1LjMuCisqLwor
WE1MUEFSU0VBUEkoWE1MX0Jvb2wpCitYTUxfUGFyc2VyUmVzZXQoWE1MX1BhcnNlciBwYXJzZXIs
IGNvbnN0IFhNTF9DaGFyICplbmNvZGluZyk7CisKKy8qIGF0dHMgaXMgYXJyYXkgb2YgbmFtZS92
YWx1ZSBwYWlycywgdGVybWluYXRlZCBieSAwOworICAgbmFtZXMgYW5kIHZhbHVlcyBhcmUgMCB0
ZXJtaW5hdGVkLgorKi8KK3R5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX1N0YXJ0RWxlbWVudEhh
bmRsZXIpICh2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqKmF0dHMpOwor
Cit0eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9FbmRFbGVtZW50SGFuZGxlcikgKHZvaWQgKnVz
ZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYTUxfQ2hhciAqbmFtZSk7CisKKworLyogcyBpcyBub3QgMCB0ZXJtaW5hdGVkLiAqLwor
dHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfQ2hhcmFjdGVyRGF0YUhhbmRsZXIpICh2b2lkICp1
c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWE1MX0NoYXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsZW4pOworCisvKiB0YXJnZXQgYW5kIGRhdGEgYXJlIDAgdGVy
bWluYXRlZCAqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfUHJvY2Vzc2luZ0luc3RydWN0
aW9uSGFuZGxlcikgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqdGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmRhdGEpOworCisv
KiBkYXRhIGlzIDAgdGVybWluYXRlZCAqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfQ29t
bWVudEhhbmRsZXIpICh2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmRhdGEpOworCit0eXBlZGVmIHZvaWQg
KFhNTENBTEwgKlhNTF9TdGFydENkYXRhU2VjdGlvbkhhbmRsZXIpICh2b2lkICp1c2VyRGF0YSk7
Cit0eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9FbmRDZGF0YVNlY3Rpb25IYW5kbGVyKSAodm9p
ZCAqdXNlckRhdGEpOworCisvKiBUaGlzIGlzIGNhbGxlZCBmb3IgYW55IGNoYXJhY3RlcnMgaW4g
dGhlIFhNTCBkb2N1bWVudCBmb3Igd2hpY2gKKyAgIHRoZXJlIGlzIG5vIGFwcGxpY2FibGUgaGFu
ZGxlci4gIFRoaXMgaW5jbHVkZXMgYm90aCBjaGFyYWN0ZXJzIHRoYXQKKyAgIGFyZSBwYXJ0IG9m
IG1hcmt1cCB3aGljaCBpcyBvZiBhIGtpbmQgdGhhdCBpcyBub3QgcmVwb3J0ZWQKKyAgIChjb21t
ZW50cywgbWFya3VwIGRlY2xhcmF0aW9ucyksIG9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgcGFydCBv
ZiBhCisgICBjb25zdHJ1Y3Qgd2hpY2ggY291bGQgYmUgcmVwb3J0ZWQgYnV0IGZvciB3aGljaCBu
byBoYW5kbGVyIGhhcyBiZWVuCisgICBzdXBwbGllZC4gVGhlIGNoYXJhY3RlcnMgYXJlIHBhc3Nl
ZCBleGFjdGx5IGFzIHRoZXkgd2VyZSBpbiB0aGUgWE1MCisgICBkb2N1bWVudCBleGNlcHQgdGhh
dCB0aGV5IHdpbGwgYmUgZW5jb2RlZCBpbiBVVEYtOCBvciBVVEYtMTYuCisgICBMaW5lIGJvdW5k
YXJpZXMgYXJlIG5vdCBub3JtYWxpemVkLiBOb3RlIHRoYXQgYSBieXRlIG9yZGVyIG1hcmsKKyAg
IGNoYXJhY3RlciBpcyBub3QgcGFzc2VkIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuIFRoZXJlIGFy
ZSBubworICAgZ3VhcmFudGVlcyBhYm91dCBob3cgY2hhcmFjdGVycyBhcmUgZGl2aWRlZCBiZXR3
ZWVuIGNhbGxzIHRvIHRoZQorICAgZGVmYXVsdCBoYW5kbGVyOiBmb3IgZXhhbXBsZSwgYSBjb21t
ZW50IG1pZ2h0IGJlIHNwbGl0IGJldHdlZW4KKyAgIG11bHRpcGxlIGNhbGxzLgorKi8KK3R5cGVk
ZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX0RlZmF1bHRIYW5kbGVyKSAodm9pZCAqdXNlckRhdGEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFy
ICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVu
KTsKKworLyogVGhpcyBpcyBjYWxsZWQgZm9yIHRoZSBzdGFydCBvZiB0aGUgRE9DVFlQRSBkZWNs
YXJhdGlvbiwgYmVmb3JlCisgICBhbnkgRFREIG9yIGludGVybmFsIHN1YnNldCBpcyBwYXJzZWQu
CisqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfU3RhcnREb2N0eXBlRGVjbEhhbmRsZXIp
ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNl
ckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhNTF9DaGFyICpkb2N0eXBlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnN5c2lkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHViaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoYXNfaW50ZXJuYWxfc3Vic2V0
KTsKKworLyogVGhpcyBpcyBjYWxsZWQgZm9yIHRoZSBzdGFydCBvZiB0aGUgRE9DVFlQRSBkZWNs
YXJhdGlvbiB3aGVuIHRoZQorICAgY2xvc2luZyA+IGlzIGVuY291bnRlcmVkLCBidXQgYWZ0ZXIg
cHJvY2Vzc2luZyBhbnkgZXh0ZXJuYWwKKyAgIHN1YnNldC4KKyovCit0eXBlZGVmIHZvaWQgKFhN
TENBTEwgKlhNTF9FbmREb2N0eXBlRGVjbEhhbmRsZXIpKHZvaWQgKnVzZXJEYXRhKTsKKworLyog
VGhpcyBpcyBjYWxsZWQgZm9yIGVudGl0eSBkZWNsYXJhdGlvbnMuIFRoZSBpc19wYXJhbWV0ZXJf
ZW50aXR5CisgICBhcmd1bWVudCB3aWxsIGJlIG5vbi16ZXJvIGlmIHRoZSBlbnRpdHkgaXMgYSBw
YXJhbWV0ZXIgZW50aXR5LCB6ZXJvCisgICBvdGhlcndpc2UuCisKKyAgIEZvciBpbnRlcm5hbCBl
bnRpdGllcyAoPCFFTlRJVFkgZm9vICJiYXIiPiksIHZhbHVlIHdpbGwKKyAgIGJlIG5vbi1OVUxM
IGFuZCBzeXN0ZW1JZCwgcHVibGljSUQsIGFuZCBub3RhdGlvbk5hbWUgd2lsbCBiZSBOVUxMLgor
ICAgVGhlIHZhbHVlIHN0cmluZyBpcyBOT1QgbnVsLXRlcm1pbmF0ZWQ7IHRoZSBsZW5ndGggaXMg
cHJvdmlkZWQgaW4KKyAgIHRoZSB2YWx1ZV9sZW5ndGggYXJndW1lbnQuIFNpbmNlIGl0IGlzIGxl
Z2FsIHRvIGhhdmUgemVyby1sZW5ndGgKKyAgIHZhbHVlcywgZG8gbm90IHVzZSB0aGlzIGFyZ3Vt
ZW50IHRvIHRlc3QgZm9yIGludGVybmFsIGVudGl0aWVzLgorCisgICBGb3IgZXh0ZXJuYWwgZW50
aXRpZXMsIHZhbHVlIHdpbGwgYmUgTlVMTCBhbmQgc3lzdGVtSWQgd2lsbCBiZQorICAgbm9uLU5V
TEwuIFRoZSBwdWJsaWNJZCBhcmd1bWVudCB3aWxsIGJlIE5VTEwgdW5sZXNzIGEgcHVibGljCisg
ICBpZGVudGlmaWVyIHdhcyBwcm92aWRlZC4gVGhlIG5vdGF0aW9uTmFtZSBhcmd1bWVudCB3aWxs
IGhhdmUgYQorICAgbm9uLU5VTEwgdmFsdWUgb25seSBmb3IgdW5wYXJzZWQgZW50aXR5IGRlY2xh
cmF0aW9ucy4KKworICAgTm90ZSB0aGF0IGlzX3BhcmFtZXRlcl9lbnRpdHkgY2FuJ3QgYmUgY2hh
bmdlZCB0byBYTUxfQm9vbCwgc2luY2UKKyAgIHRoYXQgd291bGQgYnJlYWsgYmluYXJ5IGNvbXBh
dGliaWxpdHkuCisqLwordHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfRW50aXR5RGVjbEhhbmRs
ZXIpICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmVudGl0eU5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfcGFyYW1ldGVyX2VudGl0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp2YWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZV9sZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqYmFzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpzeXN0ZW1JZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpwdWJsaWNJZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpub3RhdGlvbk5hbWUpOworCitYTUxQQVJTRUFQ
SSh2b2lkKQorWE1MX1NldEVudGl0eURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbnRpdHlEZWNsSGFuZGxlciBoYW5kbGVyKTsKKwor
LyogT0JTT0xFVEUgLS0gT0JTT0xFVEUgLS0gT0JTT0xFVEUKKyAgIFRoaXMgaGFuZGxlciBoYXMg
YmVlbiBzdXBlcmNlZGVkIGJ5IHRoZSBFbnRpdHlEZWNsSGFuZGxlciBhYm92ZS4KKyAgIEl0IGlz
IHByb3ZpZGVkIGhlcmUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKyAgIFRoaXMgaXMg
Y2FsbGVkIGZvciBhIGRlY2xhcmF0aW9uIG9mIGFuIHVucGFyc2VkIChOREFUQSkgZW50aXR5Lgor
ICAgVGhlIGJhc2UgYXJndW1lbnQgaXMgd2hhdGV2ZXIgd2FzIHNldCBieSBYTUxfU2V0QmFzZS4g
VGhlCisgICBlbnRpdHlOYW1lLCBzeXN0ZW1JZCBhbmQgbm90YXRpb25OYW1lIGFyZ3VtZW50cyB3
aWxsIG5ldmVyIGJlCisgICBOVUxMLiBUaGUgb3RoZXIgYXJndW1lbnRzIG1heSBiZS4KKyovCit0
eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9VbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyKSAoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICplbnRpdHlOYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmJh
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAq
c3lzdGVtSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxf
Q2hhciAqcHVibGljSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYTUxfQ2hhciAqbm90YXRpb25OYW1lKTsKKworLyogVGhpcyBpcyBjYWxsZWQgZm9yIGEgZGVj
bGFyYXRpb24gb2Ygbm90YXRpb24uICBUaGUgYmFzZSBhcmd1bWVudCBpcworICAgd2hhdGV2ZXIg
d2FzIHNldCBieSBYTUxfU2V0QmFzZS4gVGhlIG5vdGF0aW9uTmFtZSB3aWxsIG5ldmVyIGJlCisg
ICBOVUxMLiAgVGhlIG90aGVyIGFyZ3VtZW50cyBjYW4gYmUuCisqLwordHlwZWRlZiB2b2lkIChY
TUxDQUxMICpYTUxfTm90YXRpb25EZWNsSGFuZGxlcikgKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqbm90YXRpb25OYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmJhc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqc3lzdGVtSWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHVibGljSWQpOwor
CisvKiBXaGVuIG5hbWVzcGFjZSBwcm9jZXNzaW5nIGlzIGVuYWJsZWQsIHRoZXNlIGFyZSBjYWxs
ZWQgb25jZSBmb3IKKyAgIGVhY2ggbmFtZXNwYWNlIGRlY2xhcmF0aW9uLiBUaGUgY2FsbCB0byB0
aGUgc3RhcnQgYW5kIGVuZCBlbGVtZW50CisgICBoYW5kbGVycyBvY2N1ciBiZXR3ZWVuIHRoZSBj
YWxscyB0byB0aGUgc3RhcnQgYW5kIGVuZCBuYW1lc3BhY2UKKyAgIGRlY2xhcmF0aW9uIGhhbmRs
ZXJzLiBGb3IgYW4geG1sbnMgYXR0cmlidXRlLCBwcmVmaXggd2lsbCBiZQorICAgTlVMTC4gIEZv
ciBhbiB4bWxucz0iIiBhdHRyaWJ1dGUsIHVyaSB3aWxsIGJlIE5VTEwuCisqLwordHlwZWRlZiB2
b2lkIChYTUxDQUxMICpYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikgKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHJlZml4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnVyaSk7CisKK3R5cGVk
ZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyKSAoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpwcmVmaXgpOworCisvKiBU
aGlzIGlzIGNhbGxlZCBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUsIHRoYXQgaXMs
IGl0IGhhcyBhbgorICAgZXh0ZXJuYWwgc3Vic2V0IG9yIGEgcmVmZXJlbmNlIHRvIGEgcGFyYW1l
dGVyIGVudGl0eSwgYnV0IGRvZXMgbm90CisgICBoYXZlIHN0YW5kYWxvbmU9InllcyIuIElmIHRo
aXMgaGFuZGxlciByZXR1cm5zIFhNTF9TVEFUVVNfRVJST1IsCisgICB0aGVuIHByb2Nlc3Npbmcg
d2lsbCBub3QgY29udGludWUsIGFuZCB0aGUgcGFyc2VyIHdpbGwgcmV0dXJuIGEKKyAgIFhNTF9F
UlJPUl9OT1RfU1RBTkRBTE9ORSBlcnJvci4KKyAgIElmIHBhcmFtZXRlciBlbnRpdHkgcGFyc2lu
ZyBpcyBlbmFibGVkLCB0aGVuIGluIGFkZGl0aW9uIHRvIHRoZQorICAgY29uZGl0aW9ucyBhYm92
ZSB0aGlzIGhhbmRsZXIgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgcmVmZXJlbmNlZAorICAg
ZW50aXR5IHdhcyBhY3R1YWxseSByZWFkLgorKi8KK3R5cGVkZWYgaW50IChYTUxDQUxMICpYTUxf
Tm90U3RhbmRhbG9uZUhhbmRsZXIpICh2b2lkICp1c2VyRGF0YSk7CisKKy8qIFRoaXMgaXMgY2Fs
bGVkIGZvciBhIHJlZmVyZW5jZSB0byBhbiBleHRlcm5hbCBwYXJzZWQgZ2VuZXJhbAorICAgZW50
aXR5LiAgVGhlIHJlZmVyZW5jZWQgZW50aXR5IGlzIG5vdCBhdXRvbWF0aWNhbGx5IHBhcnNlZC4g
IFRoZQorICAgYXBwbGljYXRpb24gY2FuIHBhcnNlIGl0IGltbWVkaWF0ZWx5IG9yIGxhdGVyIHVz
aW5nCisgICBYTUxfRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGUuCisKKyAgIFRoZSBwYXJzZXIg
YXJndW1lbnQgaXMgdGhlIHBhcnNlciBwYXJzaW5nIHRoZSBlbnRpdHkgY29udGFpbmluZyB0aGUK
KyAgIHJlZmVyZW5jZTsgaXQgY2FuIGJlIHBhc3NlZCBhcyB0aGUgcGFyc2VyIGFyZ3VtZW50IHRv
CisgICBYTUxfRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGUuICBUaGUgc3lzdGVtSWQgYXJndW1l
bnQgaXMgdGhlCisgICBzeXN0ZW0gaWRlbnRpZmllciBhcyBzcGVjaWZpZWQgaW4gdGhlIGVudGl0
eSBkZWNsYXJhdGlvbjsgaXQgd2lsbAorICAgbm90IGJlIE5VTEwuCisKKyAgIFRoZSBiYXNlIGFy
Z3VtZW50IGlzIHRoZSBzeXN0ZW0gaWRlbnRpZmllciB0aGF0IHNob3VsZCBiZSB1c2VkIGFzCisg
ICB0aGUgYmFzZSBmb3IgcmVzb2x2aW5nIHN5c3RlbUlkIGlmIHN5c3RlbUlkIHdhcyByZWxhdGl2
ZTsgdGhpcyBpcworICAgc2V0IGJ5IFhNTF9TZXRCYXNlOyBpdCBtYXkgYmUgTlVMTC4KKworICAg
VGhlIHB1YmxpY0lkIGFyZ3VtZW50IGlzIHRoZSBwdWJsaWMgaWRlbnRpZmllciBhcyBzcGVjaWZp
ZWQgaW4gdGhlCisgICBlbnRpdHkgZGVjbGFyYXRpb24sIG9yIE5VTEwgaWYgbm9uZSB3YXMgc3Bl
Y2lmaWVkOyB0aGUgd2hpdGVzcGFjZQorICAgaW4gdGhlIHB1YmxpYyBpZGVudGlmaWVyIHdpbGwg
aGF2ZSBiZWVuIG5vcm1hbGl6ZWQgYXMgcmVxdWlyZWQgYnkKKyAgIHRoZSBYTUwgc3BlYy4KKwor
ICAgVGhlIGNvbnRleHQgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBwYXJzaW5nIGNvbnRleHQgaW4g
dGhlIGZvcm1hdAorICAgZXhwZWN0ZWQgYnkgdGhlIGNvbnRleHQgYXJndW1lbnQgdG8gWE1MX0V4
dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlOworICAgY29udGV4dCBpcyB2YWxpZCBvbmx5IHVudGls
IHRoZSBoYW5kbGVyIHJldHVybnMsIHNvIGlmIHRoZQorICAgcmVmZXJlbmNlZCBlbnRpdHkgaXMg
dG8gYmUgcGFyc2VkIGxhdGVyLCBpdCBtdXN0IGJlIGNvcGllZC4KKyAgIGNvbnRleHQgaXMgTlVM
TCBvbmx5IHdoZW4gdGhlIGVudGl0eSBpcyBhIHBhcmFtZXRlciBlbnRpdHkuCisKKyAgIFRoZSBo
YW5kbGVyIHNob3VsZCByZXR1cm4gWE1MX1NUQVRVU19FUlJPUiBpZiBwcm9jZXNzaW5nIHNob3Vs
ZCBub3QKKyAgIGNvbnRpbnVlIGJlY2F1c2Ugb2YgYSBmYXRhbCBlcnJvciBpbiB0aGUgaGFuZGxp
bmcgb2YgdGhlIGV4dGVybmFsCisgICBlbnRpdHkuICBJbiB0aGlzIGNhc2UgdGhlIGNhbGxpbmcg
cGFyc2VyIHdpbGwgcmV0dXJuIGFuCisgICBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRM
SU5HIGVycm9yLgorCisgICBOb3RlIHRoYXQgdW5saWtlIG90aGVyIGhhbmRsZXJzIHRoZSBmaXJz
dCBhcmd1bWVudCBpcyB0aGUgcGFyc2VyLAorICAgbm90IHVzZXJEYXRhLgorKi8KK3R5cGVkZWYg
aW50IChYTUxDQUxMICpYTUxfRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKSAoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmJhc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqc3lzdGVtSWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHVi
bGljSWQpOworCisvKiBUaGlzIGlzIGNhbGxlZCBpbiB0d28gc2l0dWF0aW9uczoKKyAgIDEpIEFu
IGVudGl0eSByZWZlcmVuY2UgaXMgZW5jb3VudGVyZWQgZm9yIHdoaWNoIG5vIGRlY2xhcmF0aW9u
CisgICAgICBoYXMgYmVlbiByZWFkICphbmQqIHRoaXMgaXMgbm90IGFuIGVycm9yLgorICAgMikg
QW4gaW50ZXJuYWwgZW50aXR5IHJlZmVyZW5jZSBpcyByZWFkLCBidXQgbm90IGV4cGFuZGVkLCBi
ZWNhdXNlCisgICAgICBYTUxfU2V0RGVmYXVsdEhhbmRsZXIgaGFzIGJlZW4gY2FsbGVkLgorICAg
Tm90ZTogc2tpcHBlZCBwYXJhbWV0ZXIgZW50aXRpZXMgaW4gZGVjbGFyYXRpb25zIGFuZCBza2lw
cGVkIGdlbmVyYWwKKyAgICAgICAgIGVudGl0aWVzIGluIGF0dHJpYnV0ZSB2YWx1ZXMgY2Fubm90
IGJlIHJlcG9ydGVkLCBiZWNhdXNlCisgICAgICAgICB0aGUgZXZlbnQgd291bGQgYmUgb3V0IG9m
IHN5bmMgd2l0aCB0aGUgcmVwb3J0aW5nIG9mIHRoZQorICAgICAgICAgZGVjbGFyYXRpb25zIG9y
IGF0dHJpYnV0ZSB2YWx1ZXMKKyovCit0eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9Ta2lwcGVk
RW50aXR5SGFuZGxlcikgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBY
TUxfQ2hhciAqZW50aXR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpc19wYXJhbWV0ZXJfZW50aXR5KTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgZmlsbGVk
IGluIGJ5IHRoZSBYTUxfVW5rbm93bkVuY29kaW5nSGFuZGxlciB0bworICAgcHJvdmlkZSBpbmZv
cm1hdGlvbiB0byB0aGUgcGFyc2VyIGFib3V0IGVuY29kaW5ncyB0aGF0IGFyZSB1bmtub3duCisg
ICB0byB0aGUgcGFyc2VyLgorCisgICBUaGUgbWFwW2JdIG1lbWJlciBnaXZlcyBpbmZvcm1hdGlv
biBhYm91dCBieXRlIHNlcXVlbmNlcyB3aG9zZQorICAgZmlyc3QgYnl0ZSBpcyBiLgorCisgICBJ
ZiBtYXBbYl0gaXMgYyB3aGVyZSBjIGlzID49IDAsIHRoZW4gYiBieSBpdHNlbGYgZW5jb2RlcyB0
aGUKKyAgIFVuaWNvZGUgc2NhbGFyIHZhbHVlIGMuCisKKyAgIElmIG1hcFtiXSBpcyAtMSwgdGhl
biB0aGUgYnl0ZSBzZXF1ZW5jZSBpcyBtYWxmb3JtZWQuCisKKyAgIElmIG1hcFtiXSBpcyAtbiwg
d2hlcmUgbiA+PSAyLCB0aGVuIGIgaXMgdGhlIGZpcnN0IGJ5dGUgb2YgYW4KKyAgIG4tYnl0ZSBz
ZXF1ZW5jZSB0aGF0IGVuY29kZXMgYSBzaW5nbGUgVW5pY29kZSBzY2FsYXIgdmFsdWUuCisKKyAg
IFRoZSBkYXRhIG1lbWJlciB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8g
dGhlIGNvbnZlcnQKKyAgIGZ1bmN0aW9uLgorCisgICBUaGUgY29udmVydCBmdW5jdGlvbiBpcyB1
c2VkIHRvIGNvbnZlcnQgbXVsdGlieXRlIHNlcXVlbmNlczsgcyB3aWxsCisgICBwb2ludCB0byBh
IG4tYnl0ZSBzZXF1ZW5jZSB3aGVyZSBtYXBbKHVuc2lnbmVkIGNoYXIpKnNdID09IC1uLiAgVGhl
CisgICBjb252ZXJ0IGZ1bmN0aW9uIG11c3QgcmV0dXJuIHRoZSBVbmljb2RlIHNjYWxhciB2YWx1
ZSByZXByZXNlbnRlZAorICAgYnkgdGhpcyBieXRlIHNlcXVlbmNlIG9yIC0xIGlmIHRoZSBieXRl
IHNlcXVlbmNlIGlzIG1hbGZvcm1lZC4KKworICAgVGhlIGNvbnZlcnQgZnVuY3Rpb24gbWF5IGJl
IE5VTEwgaWYgdGhlIGVuY29kaW5nIGlzIGEgc2luZ2xlLWJ5dGUKKyAgIGVuY29kaW5nLCB0aGF0
IGlzIGlmIG1hcFtiXSA+PSAtMSBmb3IgYWxsIGJ5dGVzIGIuCisKKyAgIFdoZW4gdGhlIHBhcnNl
ciBpcyBmaW5pc2hlZCB3aXRoIHRoZSBlbmNvZGluZywgdGhlbiBpZiByZWxlYXNlIGlzCisgICBu
b3QgTlVMTCwgaXQgd2lsbCBjYWxsIHJlbGVhc2UgcGFzc2luZyBpdCB0aGUgZGF0YSBtZW1iZXI7
IG9uY2UKKyAgIHJlbGVhc2UgaGFzIGJlZW4gY2FsbGVkLCB0aGUgY29udmVydCBmdW5jdGlvbiB3
aWxsIG5vdCBiZSBjYWxsZWQKKyAgIGFnYWluLgorCisgICBFeHBhdCBwbGFjZXMgY2VydGFpbiBy
ZXN0cmljdGlvbnMgb24gdGhlIGVuY29kaW5ncyB0aGF0IGFyZSBzdXBwb3J0ZWQKKyAgIHVzaW5n
IHRoaXMgbWVjaGFuaXNtLgorCisgICAxLiBFdmVyeSBBU0NJSSBjaGFyYWN0ZXIgdGhhdCBjYW4g
YXBwZWFyIGluIGEgd2VsbC1mb3JtZWQgWE1MIGRvY3VtZW50LAorICAgICAgb3RoZXIgdGhhbiB0
aGUgY2hhcmFjdGVycworCisgICAgICAkQFxeYHt9fgorCisgICAgICBtdXN0IGJlIHJlcHJlc2Vu
dGVkIGJ5IGEgc2luZ2xlIGJ5dGUsIGFuZCB0aGF0IGJ5dGUgbXVzdCBiZSB0aGUKKyAgICAgIHNh
bWUgYnl0ZSB0aGF0IHJlcHJlc2VudHMgdGhhdCBjaGFyYWN0ZXIgaW4gQVNDSUkuCisKKyAgIDIu
IE5vIGNoYXJhY3RlciBtYXkgcmVxdWlyZSBtb3JlIHRoYW4gNCBieXRlcyB0byBlbmNvZGUuCisK
KyAgIDMuIEFsbCBjaGFyYWN0ZXJzIGVuY29kZWQgbXVzdCBoYXZlIFVuaWNvZGUgc2NhbGFyIHZh
bHVlcyA8PQorICAgICAgMHhGRkZGLCAoaS5lLiwgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIGVu
Y29kZWQgYnkgc3Vycm9nYXRlcyBpbgorICAgICAgVVRGLTE2IGFyZSAgbm90IGFsbG93ZWQpLiAg
Tm90ZSB0aGF0IHRoaXMgcmVzdHJpY3Rpb24gZG9lc24ndAorICAgICAgYXBwbHkgdG8gdGhlIGJ1
aWx0LWluIHN1cHBvcnQgZm9yIFVURi04IGFuZCBVVEYtMTYuCisKKyAgIDQuIE5vIFVuaWNvZGUg
Y2hhcmFjdGVyIG1heSBiZSBlbmNvZGVkIGJ5IG1vcmUgdGhhbiBvbmUgZGlzdGluY3QKKyAgICAg
IHNlcXVlbmNlIG9mIGJ5dGVzLgorKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IG1hcFsyNTZd
OworICB2b2lkICpkYXRhOworICBpbnQgKFhNTENBTEwgKmNvbnZlcnQpKHZvaWQgKmRhdGEsIGNv
bnN0IGNoYXIgKnMpOworICB2b2lkIChYTUxDQUxMICpyZWxlYXNlKSh2b2lkICpkYXRhKTsKK30g
WE1MX0VuY29kaW5nOworCisvKiBUaGlzIGlzIGNhbGxlZCBmb3IgYW4gZW5jb2RpbmcgdGhhdCBp
cyB1bmtub3duIHRvIHRoZSBwYXJzZXIuCisKKyAgIFRoZSBlbmNvZGluZ0hhbmRsZXJEYXRhIGFy
Z3VtZW50IGlzIHRoYXQgd2hpY2ggd2FzIHBhc3NlZCBhcyB0aGUKKyAgIHNlY29uZCBhcmd1bWVu
dCB0byBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlci4KKworICAgVGhlIG5hbWUgYXJndW1l
bnQgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIGFzIHNwZWNpZmllZCBpbgorICAgdGhl
IGVuY29kaW5nIGRlY2xhcmF0aW9uLgorCisgICBJZiB0aGUgY2FsbGJhY2sgY2FuIHByb3ZpZGUg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGVuY29kaW5nLCBpdCBtdXN0CisgICBmaWxsIGluIHRoZSBY
TUxfRW5jb2Rpbmcgc3RydWN0dXJlLCBhbmQgcmV0dXJuIFhNTF9TVEFUVVNfT0suCisgICBPdGhl
cndpc2UgaXQgbXVzdCByZXR1cm4gWE1MX1NUQVRVU19FUlJPUi4KKworICAgSWYgaW5mbyBkb2Vz
IG5vdCBkZXNjcmliZSBhIHN1aXRhYmxlIGVuY29kaW5nLCB0aGVuIHRoZSBwYXJzZXIgd2lsbAor
ICAgcmV0dXJuIGFuIFhNTF9VTktOT1dOX0VOQ09ESU5HIGVycm9yLgorKi8KK3R5cGVkZWYgaW50
IChYTUxDQUxMICpYTUxfVW5rbm93bkVuY29kaW5nSGFuZGxlcikgKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZW5jb2RpbmdIYW5kbGVyRGF0YSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuY29kaW5nICppbmZvKTsKKworWE1M
UEFSU0VBUEkodm9pZCkKK1hNTF9TZXRFbGVtZW50SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwK
KyAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnRFbGVtZW50SGFuZGxlciBzdGFydCwKKyAg
ICAgICAgICAgICAgICAgICAgICBYTUxfRW5kRWxlbWVudEhhbmRsZXIgZW5kKTsKKworWE1MUEFS
U0VBUEkodm9pZCkKK1hNTF9TZXRTdGFydEVsZW1lbnRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2Vy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIgaGFu
ZGxlcik7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0RW5kRWxlbWVudEhhbmRsZXIoWE1M
X1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZEVsZW1lbnRI
YW5kbGVyIGhhbmRsZXIpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldENoYXJhY3RlckRh
dGFIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhNTF9DaGFyYWN0ZXJEYXRhSGFuZGxlciBoYW5kbGVyKTsKKworWE1MUEFSU0VBUEkodm9pZCkK
K1hNTF9TZXRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbkhhbmRsZXIgaGFuZGxlcik7CitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldENvbW1lbnRI
YW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgIFhNTF9Db21t
ZW50SGFuZGxlciBoYW5kbGVyKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRDZGF0YVNl
Y3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWE1MX1N0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlciBzdGFydCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhNTF9FbmRDZGF0YVNlY3Rpb25IYW5kbGVyIGVuZCk7CisKK1hNTFBBUlNFQVBJ
KHZvaWQpCitYTUxfU2V0U3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2Vy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnRDZGF0YVNlY3Rpb25I
YW5kbGVyIHN0YXJ0KTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRFbmRDZGF0YVNlY3Rp
b25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWE1MX0VuZENkYXRhU2VjdGlvbkhhbmRsZXIgZW5kKTsKKworLyogVGhpcyBzZXRzIHRoZSBk
ZWZhdWx0IGhhbmRsZXIgYW5kIGFsc28gaW5oaWJpdHMgZXhwYW5zaW9uIG9mCisgICBpbnRlcm5h
bCBlbnRpdGllcy4gVGhlc2UgZW50aXR5IHJlZmVyZW5jZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
CisgICBkZWZhdWx0IGhhbmRsZXIsIG9yIHRvIHRoZSBza2lwcGVkIGVudGl0eSBoYW5kbGVyLCBp
ZiBvbmUgaXMgc2V0LgorKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0RGVmYXVsdEhhbmRs
ZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgWE1MX0RlZmF1bHRI
YW5kbGVyIGhhbmRsZXIpOworCisvKiBUaGlzIHNldHMgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQg
ZG9lcyBub3QgaW5oaWJpdCBleHBhbnNpb24gb2YKKyAgIGludGVybmFsIGVudGl0aWVzLiAgVGhl
IGVudGl0eSByZWZlcmVuY2Ugd2lsbCBub3QgYmUgcGFzc2VkIHRvIHRoZQorICAgZGVmYXVsdCBo
YW5kbGVyLgorKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0RGVmYXVsdEhhbmRsZXJFeHBh
bmQoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0Rl
ZmF1bHRIYW5kbGVyIGhhbmRsZXIpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldERvY3R5
cGVEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgWE1MX1N0YXJ0RG9jdHlwZURlY2xIYW5kbGVyIHN0YXJ0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBYTUxfRW5kRG9jdHlwZURlY2xIYW5kbGVyIGVuZCk7CisKK1hNTFBBUlNFQVBJKHZv
aWQpCitYTUxfU2V0U3RhcnREb2N0eXBlRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RG9jdHlwZURlY2xIYW5kbGVy
IHN0YXJ0KTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRFbmREb2N0eXBlRGVjbEhhbmRs
ZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9F
bmREb2N0eXBlRGVjbEhhbmRsZXIgZW5kKTsKKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRV
bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWE1MX1VucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgaGFuZGxl
cik7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0Tm90YXRpb25EZWNsSGFuZGxlcihYTUxf
UGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9Ob3RhdGlvbkRl
Y2xIYW5kbGVyIGhhbmRsZXIpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldE5hbWVzcGFj
ZURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyIHN0YXJ0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlciBlbmQpOworCitYTUxQQVJT
RUFQSSh2b2lkKQorWE1MX1NldFN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBw
YXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnROYW1lc3Bh
Y2VEZWNsSGFuZGxlciBzdGFydCk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0RW5kTmFt
ZXNwYWNlRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyIGVuZCk7CisKK1hNTFBBUlNF
QVBJKHZvaWQpCitYTUxfU2V0Tm90U3RhbmRhbG9uZUhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX05vdFN0YW5kYWxvbmVIYW5kbGVyIGhh
bmRsZXIpOworCitYTUxQQVJTRUFQSSh2b2lkKQorWE1MX1NldEV4dGVybmFsRW50aXR5UmVmSGFu
ZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WE1MX0V4dGVybmFsRW50aXR5UmVmSGFuZGxlciBoYW5kbGVyKTsKKworLyogSWYgYSBub24tTlVM
TCB2YWx1ZSBmb3IgYXJnIGlzIHNwZWNpZmllZCBoZXJlLCB0aGVuIGl0IHdpbGwgYmUKKyAgIHBh
c3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4dGVybmFsIGVudGl0eSByZWYgaGFu
ZGxlcgorICAgaW5zdGVhZCBvZiB0aGUgcGFyc2VyIG9iamVjdC4KKyovCitYTUxQQVJTRUFQSSh2
b2lkKQorWE1MX1NldEV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyhYTUxfUGFyc2VyIHBhcnNl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKworWE1M
UEFSU0VBUEkodm9pZCkKK1hNTF9TZXRTa2lwcGVkRW50aXR5SGFuZGxlcihYTUxfUGFyc2VyIHBh
cnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU2tpcHBlZEVudGl0eUhhbmRs
ZXIgaGFuZGxlcik7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfU2V0VW5rbm93bkVuY29kaW5n
SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhNTF9Vbmtub3duRW5jb2RpbmdIYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICplbmNvZGluZ0hhbmRsZXJEYXRhKTsKKworLyogVGhpcyBjYW4gYmUg
Y2FsbGVkIHdpdGhpbiBhIGhhbmRsZXIgZm9yIGEgc3RhcnQgZWxlbWVudCwgZW5kCisgICBlbGVt
ZW50LCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG9yIGNoYXJhY3RlciBkYXRhLiAgSXQgY2F1c2Vz
IHRoZQorICAgY29ycmVzcG9uZGluZyBtYXJrdXAgdG8gYmUgcGFzc2VkIHRvIHRoZSBkZWZhdWx0
IGhhbmRsZXIuCisqLworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9EZWZhdWx0Q3VycmVudChYTUxf
UGFyc2VyIHBhcnNlcik7CisKKy8qIElmIGRvX25zdCBpcyBub24temVybywgYW5kIG5hbWVzcGFj
ZSBwcm9jZXNzaW5nIGlzIGluIGVmZmVjdCwgYW5kCisgICBhIG5hbWUgaGFzIGEgcHJlZml4IChp
LmUuIGFuIGV4cGxpY2l0IG5hbWVzcGFjZSBxdWFsaWZpZXIpIHRoZW4KKyAgIHRoYXQgbmFtZSBp
cyByZXR1cm5lZCBhcyBhIHRyaXBsZXQgaW4gYSBzaW5nbGUgc3RyaW5nIHNlcGFyYXRlZCBieQor
ICAgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgc3BlY2lmaWVkIHdoZW4gdGhlIHBhcnNlciB3YXMg
Y3JlYXRlZDogVVJJCisgICArIHNlcCArIGxvY2FsX25hbWUgKyBzZXAgKyBwcmVmaXguCisKKyAg
IElmIGRvX25zdCBpcyB6ZXJvLCB0aGVuIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBpcyByZXR1cm5l
ZCBpbiB0aGUKKyAgIGRlZmF1bHQgbWFubmVyIChVUkkgKyBzZXAgKyBsb2NhbF9uYW1lKSB3aGV0
aGVyIG9yIG5vdCB0aGUgbmFtZQorICAgaGFzIGEgcHJlZml4LgorCisgICBOb3RlOiBDYWxsaW5n
IFhNTF9TZXRSZXR1cm5OU1RyaXBsZXQgYWZ0ZXIgWE1MX1BhcnNlIG9yCisgICAgIFhNTF9QYXJz
ZUJ1ZmZlciBoYXMgbm8gZWZmZWN0LgorKi8KKworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRS
ZXR1cm5OU1RyaXBsZXQoWE1MX1BhcnNlciBwYXJzZXIsIGludCBkb19uc3QpOworCisvKiBUaGlz
IHZhbHVlIGlzIHBhc3NlZCBhcyB0aGUgdXNlckRhdGEgYXJndW1lbnQgdG8gY2FsbGJhY2tzLiAq
LworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9TZXRVc2VyRGF0YShYTUxfUGFyc2VyIHBhcnNlciwg
dm9pZCAqdXNlckRhdGEpOworCisvKiBSZXR1cm5zIHRoZSBsYXN0IHZhbHVlIHNldCBieSBYTUxf
U2V0VXNlckRhdGEgb3IgTlVMTC4gKi8KKyNkZWZpbmUgWE1MX0dldFVzZXJEYXRhKHBhcnNlcikg
KCoodm9pZCAqKikocGFyc2VyKSkKKworLyogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHN1cHBseWlu
ZyBhbiBlbmNvZGluZyBhcmd1bWVudCB0bworICAgWE1MX1BhcnNlckNyZWF0ZS4gT24gc3VjY2Vz
cyBYTUxfU2V0RW5jb2RpbmcgcmV0dXJucyBub24temVybywKKyAgIHplcm8gb3RoZXJ3aXNlLgor
ICAgTm90ZTogQ2FsbGluZyBYTUxfU2V0RW5jb2RpbmcgYWZ0ZXIgWE1MX1BhcnNlIG9yIFhNTF9Q
YXJzZUJ1ZmZlcgorICAgICBoYXMgbm8gZWZmZWN0IGFuZCByZXR1cm5zIFhNTF9TVEFUVVNfRVJS
T1IuCisqLworWE1MUEFSU0VBUEkoZW51bSBYTUxfU3RhdHVzKQorWE1MX1NldEVuY29kaW5nKFhN
TF9QYXJzZXIgcGFyc2VyLCBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmcpOworCisvKiBJZiB0aGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlbiB0aGUgcGFyc2VyIHdpbGwgYmUgcGFzc2VkIGFzIHRo
ZQorICAgZmlyc3QgYXJndW1lbnQgdG8gY2FsbGJhY2tzIGluc3RlYWQgb2YgdXNlckRhdGEuICBU
aGUgdXNlckRhdGEgd2lsbAorICAgc3RpbGwgYmUgYWNjZXNzaWJsZSB1c2luZyBYTUxfR2V0VXNl
ckRhdGEuCisqLworWE1MUEFSU0VBUEkodm9pZCkKK1hNTF9Vc2VQYXJzZXJBc0hhbmRsZXJBcmco
WE1MX1BhcnNlciBwYXJzZXIpOworCisvKiBJZiB1c2VEVEQgPT0gWE1MX1RSVUUgaXMgcGFzc2Vk
IHRvIHRoaXMgZnVuY3Rpb24sIHRoZW4gdGhlIHBhcnNlcgorICAgd2lsbCBhc3N1bWUgdGhhdCB0
aGVyZSBpcyBhbiBleHRlcm5hbCBzdWJzZXQsIGV2ZW4gaWYgbm9uZSBpcworICAgc3BlY2lmaWVk
IGluIHRoZSBkb2N1bWVudC4gSW4gc3VjaCBhIGNhc2UgdGhlIHBhcnNlciB3aWxsIGNhbGwgdGhl
CisgICBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgd2l0aCBhIHZhbHVlIG9mIE5VTEwgZm9yIHRo
ZSBzeXN0ZW1JZAorICAgYXJndW1lbnQgKHRoZSBwdWJsaWNJZCBhbmQgY29udGV4dCBhcmd1bWVu
dHMgd2lsbCBiZSBOVUxMIGFzIHdlbGwpLgorICAgTm90ZTogRm9yIHRoZSBwdXJwb3NlIG9mIGNo
ZWNraW5nIFdGQzogRW50aXR5IERlY2xhcmVkLCBwYXNzaW5nCisgICAgIHVzZURURCA9PSBYTUxf
VFJVRSB3aWxsIG1ha2UgdGhlIHBhcnNlciBiZWhhdmUgYXMgaWYgdGhlIGRvY3VtZW50CisgICAg
IGhhZCBhIERURCB3aXRoIGFuIGV4dGVybmFsIHN1YnNldC4KKyAgIE5vdGU6IElmIHRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkLCB0aGVuIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZQorICAgICB0aGUg
Zmlyc3QgY2FsbCB0byBYTUxfUGFyc2Ugb3IgWE1MX1BhcnNlQnVmZmVyLCBzaW5jZSBpdCB3aWxs
CisgICAgIGhhdmUgbm8gZWZmZWN0IGFmdGVyIHRoYXQuICBSZXR1cm5zCisgICAgIFhNTF9FUlJP
Ul9DQU5UX0NIQU5HRV9GRUFUVVJFX09OQ0VfUEFSU0lORy4KKyAgIE5vdGU6IElmIHRoZSBkb2N1
bWVudCBkb2VzIG5vdCBoYXZlIGEgRE9DVFlQRSBkZWNsYXJhdGlvbiBhdCBhbGwsCisgICAgIHRo
ZW4gc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIgYW5kIGVuZERvY3R5cGVEZWNsSGFuZGxlciB3aWxs
IG5vdAorICAgICBiZSBjYWxsZWQsIGRlc3BpdGUgYW4gZXh0ZXJuYWwgc3Vic2V0IGJlaW5nIHBh
cnNlZC4KKyAgIE5vdGU6IElmIFhNTF9EVEQgaXMgbm90IGRlZmluZWQgd2hlbiBFeHBhdCBpcyBj
b21waWxlZCwgcmV0dXJucworICAgICBYTUxfRVJST1JfRkVBVFVSRV9SRVFVSVJFU19YTUxfRFRE
LgorKi8KK1hNTFBBUlNFQVBJKGVudW0gWE1MX0Vycm9yKQorWE1MX1VzZUZvcmVpZ25EVEQoWE1M
X1BhcnNlciBwYXJzZXIsIFhNTF9Cb29sIHVzZURURCk7CisKKworLyogU2V0cyB0aGUgYmFzZSB0
byBiZSB1c2VkIGZvciByZXNvbHZpbmcgcmVsYXRpdmUgVVJJcyBpbiBzeXN0ZW0KKyAgIGlkZW50
aWZpZXJzIGluIGRlY2xhcmF0aW9ucy4gIFJlc29sdmluZyByZWxhdGl2ZSBpZGVudGlmaWVycyBp
cworICAgbGVmdCB0byB0aGUgYXBwbGljYXRpb246IHRoaXMgdmFsdWUgd2lsbCBiZSBwYXNzZWQg
dGhyb3VnaCBhcyB0aGUKKyAgIGJhc2UgYXJndW1lbnQgdG8gdGhlIFhNTF9FeHRlcm5hbEVudGl0
eVJlZkhhbmRsZXIsCisgICBYTUxfTm90YXRpb25EZWNsSGFuZGxlciBhbmQgWE1MX1VucGFyc2Vk
RW50aXR5RGVjbEhhbmRsZXIuIFRoZSBiYXNlCisgICBhcmd1bWVudCB3aWxsIGJlIGNvcGllZC4g
IFJldHVybnMgWE1MX1NUQVRVU19FUlJPUiBpZiBvdXQgb2YgbWVtb3J5LAorICAgWE1MX1NUQVRV
U19PSyBvdGhlcndpc2UuCisqLworWE1MUEFSU0VBUEkoZW51bSBYTUxfU3RhdHVzKQorWE1MX1Nl
dEJhc2UoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICpiYXNlKTsKKworWE1MUEFS
U0VBUEkoY29uc3QgWE1MX0NoYXIgKikKK1hNTF9HZXRCYXNlKFhNTF9QYXJzZXIgcGFyc2VyKTsK
KworLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBhdHRyaWJ1dGUvdmFsdWUgcGFpcnMgcGFz
c2VkIGluIGxhc3QgY2FsbAorICAgdG8gdGhlIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyIHRoYXQg
d2VyZSBzcGVjaWZpZWQgaW4gdGhlIHN0YXJ0LXRhZworICAgcmF0aGVyIHRoYW4gZGVmYXVsdGVk
LiBFYWNoIGF0dHJpYnV0ZS92YWx1ZSBwYWlyIGNvdW50cyBhcyAyOyB0aHVzCisgICB0aGlzIGNv
cnJlc3BvbmRkcyB0byBhbiBpbmRleCBpbnRvIHRoZSBhdHRzIGFycmF5IHBhc3NlZCB0byB0aGUK
KyAgIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyLgorKi8KK1hNTFBBUlNFQVBJKGludCkKK1hNTF9H
ZXRTcGVjaWZpZWRBdHRyaWJ1dGVDb3VudChYTUxfUGFyc2VyIHBhcnNlcik7CisKKy8qIFJldHVy
bnMgdGhlIGluZGV4IG9mIHRoZSBJRCBhdHRyaWJ1dGUgcGFzc2VkIGluIHRoZSBsYXN0IGNhbGwg
dG8KKyAgIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyLCBvciAtMSBpZiB0aGVyZSBpcyBubyBJRCBh
dHRyaWJ1dGUuICBFYWNoCisgICBhdHRyaWJ1dGUvdmFsdWUgcGFpciBjb3VudHMgYXMgMjsgdGh1
cyB0aGlzIGNvcnJlc3BvbmRkcyB0byBhbgorICAgaW5kZXggaW50byB0aGUgYXR0cyBhcnJheSBw
YXNzZWQgdG8gdGhlIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyLgorKi8KK1hNTFBBUlNFQVBJKGlu
dCkKK1hNTF9HZXRJZEF0dHJpYnV0ZUluZGV4KFhNTF9QYXJzZXIgcGFyc2VyKTsKKworI2lmZGVm
IFhNTF9BVFRSX0lORk8KKy8qIFNvdXJjZSBmaWxlIGJ5dGUgb2Zmc2V0cyBmb3IgdGhlIHN0YXJ0
IGFuZCBlbmQgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuCisgICBUaGUgdmFsdWUgaW5k
aWNlcyBhcmUgZXhjbHVzaXZlIG9mIHN1cnJvdW5kaW5nIHF1b3RlczsgdGh1cyBpbiBhIFVURi04
IHNvdXJjZQorICAgZmlsZSBhbiBhdHRyaWJ1dGUgdmFsdWUgb2YgImJsYWgiIHdpbGwgeWllbGQ6
CisgICBpbmZvLT52YWx1ZUVuZCAtIGluZm8tPnZhbHVlU3RhcnQgPSA0IGJ5dGVzLgorKi8KK3R5
cGVkZWYgc3RydWN0IHsKKyAgWE1MX0luZGV4ICBuYW1lU3RhcnQ7ICAvKiBPZmZzZXQgdG8gYmVn
aW5uaW5nIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZS4gKi8KKyAgWE1MX0luZGV4ICBuYW1lRW5kOyAg
ICAvKiBPZmZzZXQgYWZ0ZXIgdGhlIGF0dHJpYnV0ZSBuYW1lJ3MgbGFzdCBieXRlLiAqLworICBY
TUxfSW5kZXggIHZhbHVlU3RhcnQ7IC8qIE9mZnNldCB0byBiZWdpbm5pbmcgb2YgdGhlIGF0dHJp
YnV0ZSB2YWx1ZS4gKi8KKyAgWE1MX0luZGV4ICB2YWx1ZUVuZDsgICAvKiBPZmZzZXQgYWZ0ZXIg
dGhlIGF0dHJpYnV0ZSB2YWx1ZSdzIGxhc3QgYnl0ZS4gKi8KK30gWE1MX0F0dHJJbmZvOworCisv
KiBSZXR1cm5zIGFuIGFycmF5IG9mIFhNTF9BdHRySW5mbyBzdHJ1Y3R1cmVzIGZvciB0aGUgYXR0
cmlidXRlL3ZhbHVlIHBhaXJzCisgICBwYXNzZWQgaW4gbGFzdCBjYWxsIHRvIHRoZSBYTUxfU3Rh
cnRFbGVtZW50SGFuZGxlciB0aGF0IHdlcmUgc3BlY2lmaWVkCisgICBpbiB0aGUgc3RhcnQtdGFn
IHJhdGhlciB0aGFuIGRlZmF1bHRlZC4gRWFjaCBhdHRyaWJ1dGUvdmFsdWUgcGFpciBjb3VudHMK
KyAgIGFzIDE7IHRodXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBhcnJheSBpcworICAg
WE1MX0dldFNwZWNpZmllZEF0dHJpYnV0ZUNvdW50KHBhcnNlcikgLyAyLgorKi8KK1hNTFBBUlNF
QVBJKGNvbnN0IFhNTF9BdHRySW5mbyAqKQorWE1MX0dldEF0dHJpYnV0ZUluZm8oWE1MX1BhcnNl
ciBwYXJzZXIpOworI2VuZGlmCisKKy8qIFBhcnNlcyBzb21lIGlucHV0LiBSZXR1cm5zIFhNTF9T
VEFUVVNfRVJST1IgaWYgYSBmYXRhbCBlcnJvciBpcworICAgZGV0ZWN0ZWQuICBUaGUgbGFzdCBj
YWxsIHRvIFhNTF9QYXJzZSBtdXN0IGhhdmUgaXNGaW5hbCB0cnVlOyBsZW4KKyAgIG1heSBiZSB6
ZXJvIGZvciB0aGlzIGNhbGwgKG9yIGFueSBvdGhlcikuCisKKyAgIFRob3VnaCB0aGUgcmV0dXJu
IHZhbHVlcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGhhcyBhbHdheXMgYmVlbgorICAgZGVzY3JpYmVk
IGFzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlIGltcGxlbWVudGF0aW9uLCBhdCBsZWFzdCBmb3IgdGhl
CisgICAxLjk1Lnggc2VyaWVzLCBoYXMgYWx3YXlzIHJldHVybmVkIGV4YWN0bHkgb25lIG9mIHRo
ZSBYTUxfU3RhdHVzCisgICB2YWx1ZXMuCisqLworWE1MUEFSU0VBUEkoZW51bSBYTUxfU3RhdHVz
KQorWE1MX1BhcnNlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBp
bnQgaXNGaW5hbCk7CisKK1hNTFBBUlNFQVBJKHZvaWQgKikKK1hNTF9HZXRCdWZmZXIoWE1MX1Bh
cnNlciBwYXJzZXIsIGludCBsZW4pOworCitYTUxQQVJTRUFQSShlbnVtIFhNTF9TdGF0dXMpCitY
TUxfUGFyc2VCdWZmZXIoWE1MX1BhcnNlciBwYXJzZXIsIGludCBsZW4sIGludCBpc0ZpbmFsKTsK
KworLyogU3RvcHMgcGFyc2luZywgY2F1c2luZyBYTUxfUGFyc2UoKSBvciBYTUxfUGFyc2VCdWZm
ZXIoKSB0byByZXR1cm4uCisgICBNdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGNhbGwtYmFj
ayBoYW5kbGVyLCBleGNlcHQgd2hlbiBhYm9ydGluZworICAgKHJlc3VtYWJsZSA9IDApIGFuIGFs
cmVhZHkgc3VzcGVuZGVkIHBhcnNlci4gU29tZSBjYWxsLWJhY2tzIG1heQorICAgc3RpbGwgZm9s
bG93IGJlY2F1c2UgdGhleSB3b3VsZCBvdGhlcndpc2UgZ2V0IGxvc3QuIEV4YW1wbGVzOgorICAg
LSBlbmRFbGVtZW50SGFuZGxlcigpIGZvciBlbXB0eSBlbGVtZW50cyB3aGVuIHN0b3BwZWQgaW4K
KyAgICAgc3RhcnRFbGVtZW50SGFuZGxlcigpLCAKKyAgIC0gZW5kTmFtZVNwYWNlRGVjbEhhbmRs
ZXIoKSB3aGVuIHN0b3BwZWQgaW4gZW5kRWxlbWVudEhhbmRsZXIoKSwgCisgICBhbmQgcG9zc2li
bHkgb3RoZXJzLgorCisgICBDYW4gYmUgY2FsbGVkIGZyb20gbW9zdCBoYW5kbGVycywgaW5jbHVk
aW5nIERURCByZWxhdGVkIGNhbGwtYmFja3MsCisgICBleGNlcHQgd2hlbiBwYXJzaW5nIGFuIGV4
dGVybmFsIHBhcmFtZXRlciBlbnRpdHkgYW5kIHJlc3VtYWJsZSAhPSAwLgorICAgUmV0dXJucyBY
TUxfU1RBVFVTX09LIHdoZW4gc3VjY2Vzc2Z1bCwgWE1MX1NUQVRVU19FUlJPUiBvdGhlcndpc2Uu
CisgICBQb3NzaWJsZSBlcnJvciBjb2RlczogCisgICAtIFhNTF9FUlJPUl9TVVNQRU5ERUQ6IHdo
ZW4gc3VzcGVuZGluZyBhbiBhbHJlYWR5IHN1c3BlbmRlZCBwYXJzZXIuCisgICAtIFhNTF9FUlJP
Ul9GSU5JU0hFRDogd2hlbiB0aGUgcGFyc2VyIGhhcyBhbHJlYWR5IGZpbmlzaGVkLgorICAgLSBY
TUxfRVJST1JfU1VTUEVORF9QRTogd2hlbiBzdXNwZW5kaW5nIHdoaWxlIHBhcnNpbmcgYW4gZXh0
ZXJuYWwgUEUuCisKKyAgIFdoZW4gcmVzdW1hYmxlICE9IDAgKHRydWUpIHRoZW4gcGFyc2luZyBp
cyBzdXNwZW5kZWQsIHRoYXQgaXMsIAorICAgWE1MX1BhcnNlKCkgYW5kIFhNTF9QYXJzZUJ1ZmZl
cigpIHJldHVybiBYTUxfU1RBVFVTX1NVU1BFTkRFRC4gCisgICBPdGhlcndpc2UsIHBhcnNpbmcg
aXMgYWJvcnRlZCwgdGhhdCBpcywgWE1MX1BhcnNlKCkgYW5kIFhNTF9QYXJzZUJ1ZmZlcigpCisg
ICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUiB3aXRoIGVycm9yIGNvZGUgWE1MX0VSUk9SX0FCT1JU
RUQuCisKKyAgICpOb3RlKjoKKyAgIFRoaXMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50
IHBhcnNlciBpbnN0YW5jZSBvbmx5LCB0aGF0IGlzLCBpZgorICAgdGhlcmUgaXMgYSBwYXJlbnQg
cGFyc2VyIHRoZW4gaXQgd2lsbCBjb250aW51ZSBwYXJzaW5nIHdoZW4gdGhlCisgICBleHRlcm5h
bEVudGl0eVJlZkhhbmRsZXIoKSByZXR1cm5zLiBJdCBpcyB1cCB0byB0aGUgaW1wbGVtZW50YXRp
b24gb2YKKyAgIHRoZSBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoKSB0byBjYWxsIFhNTF9TdG9w
UGFyc2VyKCkgb24gdGhlIHBhcmVudAorICAgcGFyc2VyIChyZWN1cnNpdmVseSksIGlmIG9uZSB3
YW50cyB0byBzdG9wIHBhcnNpbmcgYWx0b2dldGhlci4KKworICAgV2hlbiBzdXNwZW5kZWQsIHBh
cnNpbmcgY2FuIGJlIHJlc3VtZWQgYnkgY2FsbGluZyBYTUxfUmVzdW1lUGFyc2VyKCkuIAorKi8K
K1hNTFBBUlNFQVBJKGVudW0gWE1MX1N0YXR1cykKK1hNTF9TdG9wUGFyc2VyKFhNTF9QYXJzZXIg
cGFyc2VyLCBYTUxfQm9vbCByZXN1bWFibGUpOworCisvKiBSZXN1bWVzIHBhcnNpbmcgYWZ0ZXIg
aXQgaGFzIGJlZW4gc3VzcGVuZGVkIHdpdGggWE1MX1N0b3BQYXJzZXIoKS4KKyAgIE11c3Qgbm90
IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGhhbmRsZXIgY2FsbC1iYWNrLiBSZXR1cm5zIHNhbWUK
KyAgIHN0YXR1cyBjb2RlcyBhcyBYTUxfUGFyc2UoKSBvciBYTUxfUGFyc2VCdWZmZXIoKS4KKyAg
IEFkZGl0aW9uYWwgZXJyb3IgY29kZSBYTUxfRVJST1JfTk9UX1NVU1BFTkRFRCBwb3NzaWJsZS4g
ICAKKworICAgKk5vdGUqOgorICAgVGhpcyBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgbW9zdCBkZWVw
bHkgbmVzdGVkIGNoaWxkIHBhcnNlciBpbnN0YW5jZQorICAgZmlyc3QsIGFuZCBvbiBpdHMgcGFy
ZW50IHBhcnNlciBvbmx5IGFmdGVyIHRoZSBjaGlsZCBwYXJzZXIgaGFzIGZpbmlzaGVkLAorICAg
dG8gYmUgYXBwbGllZCByZWN1cnNpdmVseSB1bnRpbCB0aGUgZG9jdW1lbnQgZW50aXR5J3MgcGFy
c2VyIGlzIHJlc3RhcnRlZC4KKyAgIFRoYXQgaXMsIHRoZSBwYXJlbnQgcGFyc2VyIHdpbGwgbm90
IHJlc3VtZSBieSBpdHNlbGYgYW5kIGl0IGlzIHVwIHRvIHRoZQorICAgYXBwbGljYXRpb24gdG8g
Y2FsbCBYTUxfUmVzdW1lUGFyc2VyKCkgb24gaXQgYXQgdGhlIGFwcHJvcHJpYXRlIG1vbWVudC4K
KyovCitYTUxQQVJTRUFQSShlbnVtIFhNTF9TdGF0dXMpCitYTUxfUmVzdW1lUGFyc2VyKFhNTF9Q
YXJzZXIgcGFyc2VyKTsKKworZW51bSBYTUxfUGFyc2luZyB7CisgIFhNTF9JTklUSUFMSVpFRCwK
KyAgWE1MX1BBUlNJTkcsCisgIFhNTF9GSU5JU0hFRCwKKyAgWE1MX1NVU1BFTkRFRAorfTsKKwor
dHlwZWRlZiBzdHJ1Y3QgeworICBlbnVtIFhNTF9QYXJzaW5nIHBhcnNpbmc7CisgIFhNTF9Cb29s
IGZpbmFsQnVmZmVyOworfSBYTUxfUGFyc2luZ1N0YXR1czsKKworLyogUmV0dXJucyBzdGF0dXMg
b2YgcGFyc2VyIHdpdGggcmVzcGVjdCB0byBiZWluZyBpbml0aWFsaXplZCwgcGFyc2luZywKKyAg
IGZpbmlzaGVkLCBvciBzdXNwZW5kZWQgYW5kIHByb2Nlc3NpbmcgdGhlIGZpbmFsIGJ1ZmZlci4K
KyAgIFhYWCBYTUxfUGFyc2UoKSBhbmQgWE1MX1BhcnNlQnVmZmVyKCkgc2hvdWxkIHJldHVybiBY
TUxfUGFyc2luZ1N0YXR1cywKKyAgIFhYWCB3aXRoIFhNTF9GSU5JU0hFRF9PSyBvciBYTUxfRklO
SVNIRURfRVJST1IgcmVwbGFjaW5nIFhNTF9GSU5JU0hFRAorKi8KK1hNTFBBUlNFQVBJKHZvaWQp
CitYTUxfR2V0UGFyc2luZ1N0YXR1cyhYTUxfUGFyc2VyIHBhcnNlciwgWE1MX1BhcnNpbmdTdGF0
dXMgKnN0YXR1cyk7CisKKy8qIENyZWF0ZXMgYW4gWE1MX1BhcnNlciBvYmplY3QgdGhhdCBjYW4g
cGFyc2UgYW4gZXh0ZXJuYWwgZ2VuZXJhbAorICAgZW50aXR5OyBjb250ZXh0IGlzIGEgJ1wwJy10
ZXJtaW5hdGVkIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBwYXJzZQorICAgY29udGV4dDsgZW5jb2Rp
bmcgaXMgYSAnXDAnLXRlcm1pbmF0ZWQgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZgorICAgdGhl
IGV4dGVybmFsbHkgc3BlY2lmaWVkIGVuY29kaW5nLCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vCisg
ICBleHRlcm5hbGx5IHNwZWNpZmllZCBlbmNvZGluZy4gIFRoZSBjb250ZXh0IHN0cmluZyBjb25z
aXN0cyBvZiBhCisgICBzZXF1ZW5jZSBvZiB0b2tlbnMgc2VwYXJhdGVkIGJ5IGZvcm1mZWVkcyAo
XGYpOyBhIHRva2VuIGNvbnNpc3RpbmcKKyAgIG9mIGEgbmFtZSBzcGVjaWZpZXMgdGhhdCB0aGUg
Z2VuZXJhbCBlbnRpdHkgb2YgdGhlIG5hbWUgaXMgb3BlbjsgYQorICAgdG9rZW4gb2YgdGhlIGZv
cm0gcHJlZml4PXVyaSBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSBmb3IgYQorICAgcGFydGljdWxh
ciBwcmVmaXg7IGEgdG9rZW4gb2YgdGhlIGZvcm0gPXVyaSBzcGVjaWZpZXMgdGhlIGRlZmF1bHQK
KyAgIG5hbWVzcGFjZS4gIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgYWZ0ZXIgdGhl
IGZpcnN0IGNhbGwgdG8KKyAgIGFuIEV4dGVybmFsRW50aXR5UmVmSGFuZGxlciBzbyBsb25nZXIg
YXMgdGhlIHBhcnNlciBoYXMgbm90IHlldAorICAgYmVlbiBmcmVlZC4gIFRoZSBuZXcgcGFyc2Vy
IGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgYW5kIG1heQorICAgc2FmZWx5IGJlIHVzZWQgaW4g
YSBzZXBhcmF0ZSB0aHJlYWQuICBUaGUgaGFuZGxlcnMgYW5kIHVzZXJEYXRhIGFyZQorICAgaW5p
dGlhbGl6ZWQgZnJvbSB0aGUgcGFyc2VyIGFyZ3VtZW50LiAgUmV0dXJucyBOVUxMIGlmIG91dCBv
ZiBtZW1vcnkuCisgICBPdGhlcndpc2UgcmV0dXJucyBhIG5ldyBYTUxfUGFyc2VyIG9iamVjdC4K
KyovCitYTUxQQVJTRUFQSShYTUxfUGFyc2VyKQorWE1MX0V4dGVybmFsRW50aXR5UGFyc2VyQ3Jl
YXRlKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhNTF9DaGFyICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhNTF9DaGFyICplbmNvZGluZyk7CisKK2VudW0gWE1MX1BhcmFtRW50aXR5UGFyc2luZyB7
CisgIFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19ORVZFUiwKKyAgWE1MX1BBUkFNX0VOVElUWV9Q
QVJTSU5HX1VOTEVTU19TVEFOREFMT05FLAorICBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfQUxX
QVlTCit9OworCisvKiBDb250cm9scyBwYXJzaW5nIG9mIHBhcmFtZXRlciBlbnRpdGllcyAoaW5j
bHVkaW5nIHRoZSBleHRlcm5hbCBEVEQKKyAgIHN1YnNldCkuIElmIHBhcnNpbmcgb2YgcGFyYW1l
dGVyIGVudGl0aWVzIGlzIGVuYWJsZWQsIHRoZW4KKyAgIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwg
cGFyYW1ldGVyIGVudGl0aWVzIChpbmNsdWRpbmcgdGhlIGV4dGVybmFsCisgICBEVEQgc3Vic2V0
KSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBzZXQgd2l0aAorICAgWE1MX1NldEV4dGVy
bmFsRW50aXR5UmVmSGFuZGxlci4gIFRoZSBjb250ZXh0IHBhc3NlZCB3aWxsIGJlIDAuCisKKyAg
IFVubGlrZSBleHRlcm5hbCBnZW5lcmFsIGVudGl0aWVzLCBleHRlcm5hbCBwYXJhbWV0ZXIgZW50
aXRpZXMgY2FuCisgICBvbmx5IGJlIHBhcnNlZCBzeW5jaHJvbm91c2x5LiAgSWYgdGhlIGV4dGVy
bmFsIHBhcmFtZXRlciBlbnRpdHkgaXMKKyAgIHRvIGJlIHBhcnNlZCwgaXQgbXVzdCBiZSBwYXJz
ZWQgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBleHRlcm5hbAorICAgZW50aXR5IHJlZiBoYW5kbGVy
OiB0aGUgY29tcGxldGUgc2VxdWVuY2Ugb2YKKyAgIFhNTF9FeHRlcm5hbEVudGl0eVBhcnNlckNy
ZWF0ZSwgWE1MX1BhcnNlL1hNTF9QYXJzZUJ1ZmZlciBhbmQKKyAgIFhNTF9QYXJzZXJGcmVlIGNh
bGxzIG11c3QgYmUgbWFkZSBkdXJpbmcgdGhpcyBjYWxsLiAgQWZ0ZXIKKyAgIFhNTF9FeHRlcm5h
bEVudGl0eVBhcnNlckNyZWF0ZSBoYXMgYmVlbiBjYWxsZWQgdG8gY3JlYXRlIHRoZSBwYXJzZXIK
KyAgIGZvciB0aGUgZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eSAoY29udGV4dCBtdXN0IGJlIDAg
Zm9yIHRoaXMKKyAgIGNhbGwpLCBpdCBpcyBpbGxlZ2FsIHRvIG1ha2UgYW55IGNhbGxzIG9uIHRo
ZSBvbGQgcGFyc2VyIHVudGlsCisgICBYTUxfUGFyc2VyRnJlZSBoYXMgYmVlbiBjYWxsZWQgb24g
dGhlIG5ld2x5IGNyZWF0ZWQgcGFyc2VyLgorICAgSWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gY29t
cGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvciBwYXJhbWV0ZXIKKyAgIGVudGl0eSBwYXJzaW5nIChp
ZSB3aXRob3V0IFhNTF9EVEQgYmVpbmcgZGVmaW5lZCksIHRoZW4KKyAgIFhNTF9TZXRQYXJhbUVu
dGl0eVBhcnNpbmcgd2lsbCByZXR1cm4gMCBpZiBwYXJzaW5nIG9mIHBhcmFtZXRlcgorICAgZW50
aXRpZXMgaXMgcmVxdWVzdGVkOyBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gbm9uLXplcm8uCisg
ICBOb3RlOiBJZiBYTUxfU2V0UGFyYW1FbnRpdHlQYXJzaW5nIGlzIGNhbGxlZCBhZnRlciBYTUxf
UGFyc2Ugb3IKKyAgICAgIFhNTF9QYXJzZUJ1ZmZlciwgdGhlbiBpdCBoYXMgbm8gZWZmZWN0IGFu
ZCB3aWxsIGFsd2F5cyByZXR1cm4gMC4KKyovCitYTUxQQVJTRUFQSShpbnQpCitYTUxfU2V0UGFy
YW1FbnRpdHlQYXJzaW5nKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbnVtIFhNTF9QYXJhbUVudGl0eVBhcnNpbmcgcGFyc2luZyk7CisKKy8qIFNldHMgdGhl
IGhhc2ggc2FsdCB0byB1c2UgZm9yIGludGVybmFsIGhhc2ggY2FsY3VsYXRpb25zLgorICAgSGVs
cHMgaW4gcHJldmVudGluZyBEb1MgYXR0YWNrcyBiYXNlZCBvbiBwcmVkaWN0aW5nIGhhc2gKKyAg
IGZ1bmN0aW9uIGJlaGF2aW9yLiBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBwYXJzaW5nIGlz
IHN0YXJ0ZWQuCisgICBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCB3aGVuIGNhbGxlZCBhZnRl
ciBwYXJzaW5nIGhhcyBzdGFydGVkLgorKi8KK1hNTFBBUlNFQVBJKGludCkKK1hNTF9TZXRIYXNo
U2FsdChYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGhh
c2hfc2FsdCk7CisKKy8qIElmIFhNTF9QYXJzZSBvciBYTUxfUGFyc2VCdWZmZXIgaGF2ZSByZXR1
cm5lZCBYTUxfU1RBVFVTX0VSUk9SLCB0aGVuCisgICBYTUxfR2V0RXJyb3JDb2RlIHJldHVybnMg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yLgorKi8KK1hNTFBBUlNFQVBJKGVudW0gWE1MX0Vy
cm9yKQorWE1MX0dldEVycm9yQ29kZShYTUxfUGFyc2VyIHBhcnNlcik7CisKKy8qIFRoZXNlIGZ1
bmN0aW9ucyByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFyc2UKKyAgIGxv
Y2F0aW9uLiAgVGhleSBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNhbGxiYWNrIGNhbGxlZCB0byBy
ZXBvcnQKKyAgIHNvbWUgcGFyc2UgZXZlbnQ7IGluIHRoaXMgY2FzZSB0aGUgbG9jYXRpb24gaXMg
dGhlIGxvY2F0aW9uIG9mIHRoZQorICAgZmlyc3Qgb2YgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3Rl
cnMgdGhhdCBnZW5lcmF0ZWQgdGhlIGV2ZW50LiAgV2hlbgorICAgY2FsbGVkIGZyb20gY2FsbGJh
Y2tzIGdlbmVyYXRlZCBieSBkZWNsYXJhdGlvbnMgaW4gdGhlIGRvY3VtZW50CisgICBwcm9sb2d1
ZSwgdGhlIGxvY2F0aW9uIGlkZW50aWZpZWQgaXNuJ3QgYXMgbmVhdGx5IGRlZmluZWQsIGJ1dCB3
aWxsCisgICBiZSB3aXRoaW4gdGhlIHJlbGV2YW50IG1hcmt1cC4gIFdoZW4gY2FsbGVkIG91dHNp
ZGUgb2YgdGhlIGNhbGxiYWNrCisgICBmdW5jdGlvbnMsIHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQg
d2lsbCBiZSBqdXN0IHBhc3QgdGhlIGxhc3QgcGFyc2UKKyAgIGV2ZW50IChyZWdhcmRsZXNzIG9m
IHdoZXRoZXIgdGhlcmUgd2FzIGFuIGFzc29jaWF0ZWQgY2FsbGJhY2spLgorICAgCisgICBUaGV5
IG1heSBhbHNvIGJlIGNhbGxlZCBhZnRlciByZXR1cm5pbmcgZnJvbSBhIGNhbGwgdG8gWE1MX1Bh
cnNlCisgICBvciBYTUxfUGFyc2VCdWZmZXIuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIFhNTF9T
VEFUVVNfRVJST1IgdGhlbgorICAgdGhlIGxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUg
Y2hhcmFjdGVyIGF0IHdoaWNoIHRoZSBlcnJvcgorICAgd2FzIGRldGVjdGVkOyBvdGhlcndpc2Ug
dGhlIGxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGFzdAorICAgcGFyc2UgZXZlbnQs
IGFzIGRlc2NyaWJlZCBhYm92ZS4KKyovCitYTUxQQVJTRUFQSShYTUxfU2l6ZSkgWE1MX0dldEN1
cnJlbnRMaW5lTnVtYmVyKFhNTF9QYXJzZXIgcGFyc2VyKTsKK1hNTFBBUlNFQVBJKFhNTF9TaXpl
KSBYTUxfR2V0Q3VycmVudENvbHVtbk51bWJlcihYTUxfUGFyc2VyIHBhcnNlcik7CitYTUxQQVJT
RUFQSShYTUxfSW5kZXgpIFhNTF9HZXRDdXJyZW50Qnl0ZUluZGV4KFhNTF9QYXJzZXIgcGFyc2Vy
KTsKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGN1cnJlbnQgZXZlbnQu
CisgICBSZXR1cm5zIDAgaWYgdGhlIGV2ZW50IGlzIGluIGFuIGludGVybmFsIGVudGl0eS4KKyov
CitYTUxQQVJTRUFQSShpbnQpCitYTUxfR2V0Q3VycmVudEJ5dGVDb3VudChYTUxfUGFyc2VyIHBh
cnNlcik7CisKKy8qIElmIFhNTF9DT05URVhUX0JZVEVTIGlzIGRlZmluZWQsIHJldHVybnMgdGhl
IGlucHV0IGJ1ZmZlciwgc2V0cworICAgdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSBvZmZzZXQg
dG8gdGhlIG9mZnNldCB3aXRoaW4gdGhpcyBidWZmZXIKKyAgIG9mIHRoZSBjdXJyZW50IHBhcnNl
IHBvc2l0aW9uLCBhbmQgc2V0cyB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHNpemUKKyAgIHRv
IHRoZSBzaXplIG9mIHRoaXMgYnVmZmVyICh0aGUgbnVtYmVyIG9mIGlucHV0IGJ5dGVzKS4gT3Ro
ZXJ3aXNlCisgICByZXR1cm5zIGEgTlVMTCBwb2ludGVyLiBBbHNvIHJldHVybnMgYSBOVUxMIHBv
aW50ZXIgaWYgYSBwYXJzZSBpc24ndAorICAgYWN0aXZlLgorCisgICBOT1RFOiBUaGUgY2hhcmFj
dGVyIHBvaW50ZXIgcmV0dXJuZWQgc2hvdWxkIG5vdCBiZSB1c2VkIG91dHNpZGUKKyAgIHRoZSBo
YW5kbGVyIHRoYXQgbWFrZXMgdGhlIGNhbGwuCisqLworWE1MUEFSU0VBUEkoY29uc3QgY2hhciAq
KQorWE1MX0dldElucHV0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAg
ICAgICAgaW50ICpvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGludCAqc2l6ZSk7CisKKy8q
IEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb25zLiAqLwor
I2RlZmluZSBYTUxfR2V0RXJyb3JMaW5lTnVtYmVyICAgWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVy
CisjZGVmaW5lIFhNTF9HZXRFcnJvckNvbHVtbk51bWJlciBYTUxfR2V0Q3VycmVudENvbHVtbk51
bWJlcgorI2RlZmluZSBYTUxfR2V0RXJyb3JCeXRlSW5kZXggICAgWE1MX0dldEN1cnJlbnRCeXRl
SW5kZXgKKworLyogRnJlZXMgdGhlIGNvbnRlbnQgbW9kZWwgcGFzc2VkIHRvIHRoZSBlbGVtZW50
IGRlY2xhcmF0aW9uIGhhbmRsZXIgKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfRnJlZUNvbnRl
bnRNb2RlbChYTUxfUGFyc2VyIHBhcnNlciwgWE1MX0NvbnRlbnQgKm1vZGVsKTsKKworLyogRXhw
b3NpbmcgdGhlIG1lbW9yeSBoYW5kbGluZyBmdW5jdGlvbnMgdXNlZCBpbiBFeHBhdCAqLworWE1M
UEFSU0VBUEkodm9pZCAqKQorWE1MX01lbU1hbGxvYyhYTUxfUGFyc2VyIHBhcnNlciwgc2l6ZV90
IHNpemUpOworCitYTUxQQVJTRUFQSSh2b2lkICopCitYTUxfTWVtUmVhbGxvYyhYTUxfUGFyc2Vy
IHBhcnNlciwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisKK1hNTFBBUlNFQVBJKHZvaWQpCitY
TUxfTWVtRnJlZShYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqcHRyKTsKKworLyogRnJlZXMgbWVt
b3J5IHVzZWQgYnkgdGhlIHBhcnNlci4gKi8KK1hNTFBBUlNFQVBJKHZvaWQpCitYTUxfUGFyc2Vy
RnJlZShYTUxfUGFyc2VyIHBhcnNlcik7CisKKy8qIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmlu
ZyB0aGUgZXJyb3IuICovCitYTUxQQVJTRUFQSShjb25zdCBYTUxfTENoYXIgKikKK1hNTF9FcnJv
clN0cmluZyhlbnVtIFhNTF9FcnJvciBjb2RlKTsKKworLyogUmV0dXJuIGEgc3RyaW5nIGNvbnRh
aW5pbmcgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZXhwYXQgKi8KK1hNTFBBUlNFQVBJKGNv
bnN0IFhNTF9MQ2hhciAqKQorWE1MX0V4cGF0VmVyc2lvbih2b2lkKTsKKwordHlwZWRlZiBzdHJ1
Y3QgeworICBpbnQgbWFqb3I7CisgIGludCBtaW5vcjsKKyAgaW50IG1pY3JvOworfSBYTUxfRXhw
YXRfVmVyc2lvbjsKKworLyogUmV0dXJuIGFuIFhNTF9FeHBhdF9WZXJzaW9uIHN0cnVjdHVyZSBj
b250YWluaW5nIG51bWVyaWMgdmVyc2lvbgorICAgbnVtYmVyIGluZm9ybWF0aW9uIGZvciB0aGlz
IHZlcnNpb24gb2YgZXhwYXQuCisqLworWE1MUEFSU0VBUEkoWE1MX0V4cGF0X1ZlcnNpb24pCitY
TUxfRXhwYXRWZXJzaW9uSW5mbyh2b2lkKTsKKworLyogQWRkZWQgaW4gRXhwYXQgMS45NS41LiAq
LworZW51bSBYTUxfRmVhdHVyZUVudW0geworICBYTUxfRkVBVFVSRV9FTkQgPSAwLAorICBYTUxf
RkVBVFVSRV9VTklDT0RFLAorICBYTUxfRkVBVFVSRV9VTklDT0RFX1dDSEFSX1QsCisgIFhNTF9G
RUFUVVJFX0RURCwKKyAgWE1MX0ZFQVRVUkVfQ09OVEVYVF9CWVRFUywKKyAgWE1MX0ZFQVRVUkVf
TUlOX1NJWkUsCisgIFhNTF9GRUFUVVJFX1NJWkVPRl9YTUxfQ0hBUiwKKyAgWE1MX0ZFQVRVUkVf
U0laRU9GX1hNTF9MQ0hBUiwKKyAgWE1MX0ZFQVRVUkVfTlMsCisgIFhNTF9GRUFUVVJFX0xBUkdF
X1NJWkUsCisgIFhNTF9GRUFUVVJFX0FUVFJfSU5GTworICAvKiBBZGRpdGlvbmFsIGZlYXR1cmVz
IG11c3QgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGlzIGVudW0uICovCit9OworCit0eXBlZGVm
IHN0cnVjdCB7CisgIGVudW0gWE1MX0ZlYXR1cmVFbnVtICBmZWF0dXJlOworICBjb25zdCBYTUxf
TENoYXIgICAgICAgKm5hbWU7CisgIGxvbmcgaW50ICAgICAgICAgICAgICB2YWx1ZTsKK30gWE1M
X0ZlYXR1cmU7CisKK1hNTFBBUlNFQVBJKGNvbnN0IFhNTF9GZWF0dXJlICopCitYTUxfR2V0RmVh
dHVyZUxpc3Qodm9pZCk7CisKKworLyogRXhwYXQgZm9sbG93cyB0aGUgR05VL0xpbnV4IGNvbnZl
bnRpb24gb2Ygb2RkIG51bWJlciBtaW5vciB2ZXJzaW9uIGZvcgorICAgYmV0YS9kZXZlbG9wbWVu
dCByZWxlYXNlcyBhbmQgZXZlbiBudW1iZXIgbWlub3IgdmVyc2lvbiBmb3Igc3RhYmxlCisgICBy
ZWxlYXNlcy4gTWljcm8gaXMgYnVtcGVkIHdpdGggZWFjaCByZWxlYXNlLCBhbmQgc2V0IHRvIDAg
d2l0aCBlYWNoCisgICBjaGFuZ2UgdG8gbWFqb3Igb3IgbWlub3IgdmVyc2lvbi4KKyovCisjZGVm
aW5lIFhNTF9NQUpPUl9WRVJTSU9OIDIKKyNkZWZpbmUgWE1MX01JTk9SX1ZFUlNJT04gMQorI2Rl
ZmluZSBYTUxfTUlDUk9fVkVSU0lPTiAwCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CisKKyNlbmRpZiAvKiBub3QgRXhwYXRfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2V4
cGF0X2NvbmZpZy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9leHBhdC9maWxlcy9saWIvZXhwYXRfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU5NzFlZjcy
NDE3OWZlYzU1OGNiYzNiNWJhOGQ4MDJkYTY3OThmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGli
L2V4cGF0X2NvbmZpZy5oCkBAIC0wLDAgKzEsMTEwIEBACisvLyBObyBjb3B5cmlnaHQgbm90aWNl
OyB0aGlzIGZpbGUgYmFzZWQgb24gYXV0b2dlbmVyYXRlZCBoZWFkZXIKKworI2lmbmRlZiBUSElS
RF9QQVJUWV9FWFBBVF9WMl8wXzFfU09VUkNFX0xJQl9FWFBBVF9DT05GSUdfSF9fCisjZGVmaW5l
IFRISVJEX1BBUlRZX0VYUEFUX1YyXzBfMV9TT1VSQ0VfTElCX0VYUEFUX0NPTkZJR19IX18KKwor
LyogZXhwYXRfY29uZmlnLmguICBHZW5lcmF0ZWQgZnJvbSBleHBhdF9jb25maWcuaC5pbiBieSBj
b25maWd1cmUuICAqLworLyogZXhwYXRfY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25m
aWd1cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCisKKy8qIDEyMzQgPSBMSUxfRU5ESUFOLCA0MzIx
ID0gQklHRU5ESUFOICovCisjZGVmaW5lIEJZVEVPUkRFUiAxMjM0CisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgYmNvcHknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0JDT1BZ
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmls
ZS4gKi8KKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwYWdlc2l6ZScgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lOVFRZ
UEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0
aW9uLiAqLworI2RlZmluZSBIQVZFX01FTU1PVkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1PUllf
SCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBgbW1hcCcgc3lzdGVt
IGNhbGwuICovCisjZGVmaW5lIEhBVkVfTU1BUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElOVF9I
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5H
U19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVy
IGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9T
WVNfUEFSQU1fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQu
aD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2Rl
ZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisv
KiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5p
bnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyNkZWZpbmUgTFRfT0JKRElSICIubGlicy8iCisK
Ky8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNr
YWdlIHNob3VsZCBiZSBzZW50LiAqLworI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiZXhwYXQt
YnVnc0BsaWJleHBhdC5vcmciCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMg
cGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJleHBhdCIKKworLyogRGVmaW5lIHRv
IHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQ
QUNLQUdFX1NUUklORyAiZXhwYXQgMi4xLjAiCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJv
bCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1F
ICJleHBhdCIKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4g
Ki8KKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiIKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9m
IHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjEuMCIKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVm
aW5lIFNURENfSEVBREVSUyAxCisKKy8qIHdoZXRoZXIgYnl0ZW9yZGVyIGlzIGJpZ2VuZGlhbiAq
LworLyogI3VuZGVmIFdPUkRTX0JJR0VORElBTiAqLworCisvKiBEZWZpbmUgdG8gc3BlY2lmeSBo
b3cgbXVjaCBjb250ZXh0IHRvIHJldGFpbiBhcm91bmQgdGhlIGN1cnJlbnQgcGFyc2UKKyAgIHBv
aW50LiAqLworI2RlZmluZSBYTUxfQ09OVEVYVF9CWVRFUyAxMDI0CisKKy8qIERlZmluZSB0byBt
YWtlIHBhcmFtZXRlciBlbnRpdHkgcGFyc2luZyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZS4gKi8K
KyNkZWZpbmUgWE1MX0RURCAxCisKKy8qIERlZmluZSB0byBtYWtlIFhNTCBOYW1lc3BhY2VzIGZ1
bmN0aW9uYWxpdHkgYXZhaWxhYmxlLiAqLworI2RlZmluZSBYTUxfTlMgMQorCisvKiBEZWZpbmUg
dG8gX19GVU5DVElPTl9fIG9yICIiIGlmIGBfX2Z1bmNfXycgZG9lcyBub3QgY29uZm9ybSB0byBB
TlNJIEMuICovCisvKiAjdW5kZWYgX19mdW5jX18gKi8KKworLyogRGVmaW5lIHRvIGVtcHR5IGlm
IGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisvKiAjdW5kZWYgY29uc3Qg
Ki8KKworLyogRGVmaW5lIHRvIGBsb25nIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBk
ZWZpbmUuICovCisvKiAjdW5kZWYgb2ZmX3QgKi8KKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBp
bnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIHNpemVf
dCAqLworCisjZW5kaWYgIC8vIFRISVJEX1BBUlRZX0VYUEFUX1YyXzBfMV9TT1VSQ0VfTElCX0VY
UEFUX0NPTkZJR19IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2V4cGF0X2V4dGVybmFsLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xp
Yi9leHBhdF9leHRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjMDMyODRlYTI2NWJjNjJiYmFlMTVlMjll
NDhmN2IwZGY0Y2VmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9leHBhdF9leHRlcm5hbC5o
CkBAIC0wLDAgKzEsMTE1IEBACisvKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAgVGhh
aSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCisgICBTZWUgdGhlIGZpbGUgQ09QWUlO
RyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgorKi8KKworI2lmbmRlZiBFeHBhdF9FeHRlcm5hbF9J
TkNMVURFRAorI2RlZmluZSBFeHBhdF9FeHRlcm5hbF9JTkNMVURFRCAxCisKKy8qIEV4dGVybmFs
IEFQSSBkZWZpbml0aW9ucyAqLworCisjaWYgZGVmaW5lZChfTVNDX0VYVEVOU0lPTlMpICYmICFk
ZWZpbmVkKF9fQkVPU19fKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorI2RlZmluZSBYTUxfVVNF
X01TQ19FWFRFTlNJT05TIDEKKyNlbmRpZgorCisvKiBFeHBhdCB0cmllcyB2ZXJ5IGhhcmQgdG8g
bWFrZSB0aGUgQVBJIGJvdW5kYXJ5IHZlcnkgc3BlY2lmaWNhbGx5CisgICBkZWZpbmVkLiAgVGhl
cmUgYXJlIHR3byBtYWNyb3MgZGVmaW5lZCB0byBjb250cm9sIHRoaXMgYm91bmRhcnk7CisgICBl
YWNoIG9mIHRoZXNlIGNhbiBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBoZWFkZXIg
dG8KKyAgIGFjaGlldmUgc29tZSBkaWZmZXJlbnQgYmVoYXZpb3IsIGJ1dCBkb2luZyBzbyBpdCBu
b3QgcmVjb21tZW5kZWQgb3IKKyAgIHRlc3RlZCBmcmVxdWVudGx5LgorCisgICBYTUxDQUxMICAg
IC0gVGhlIGNhbGxpbmcgY29udmVudGlvbiB0byB1c2UgZm9yIGFsbCBjYWxscyBhY3Jvc3MgdGhl
CisgICAgICAgICAgICAgICAgImxpYnJhcnkgYm91bmRhcnkuIiAgVGhpcyB3aWxsIGRlZmF1bHQg
dG8gY2RlY2wsIGFuZAorICAgICAgICAgICAgICAgIHRyeSByZWFsbHkgaGFyZCB0byB0ZWxsIHRo
ZSBjb21waWxlciB0aGF0J3Mgd2hhdCB3ZQorICAgICAgICAgICAgICAgIHdhbnQuCisKKyAgIFhN
TElNUE9SVCAgLSBXaGF0ZXZlciBtYWdpYyBpcyBuZWVkZWQgdG8gbm90ZSB0aGF0IGEgZnVuY3Rp
b24gaXMKKyAgICAgICAgICAgICAgICB0byBiZSBpbXBvcnRlZCBmcm9tIGEgZHluYW1pY2FsbHkg
bG9hZGVkIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAoLmRsbCwgLnNvLCBvciAuc2wsIGRlcGVu
ZGluZyBvbiB5b3VyIHBsYXRmb3JtKS4KKworICAgVGhlIFhNTENBTEwgbWFjcm8gd2FzIGFkZGVk
IGluIEV4cGF0IDEuOTUuNy4gIFRoZSBvbmx5IG9uZSB3aGljaCBpcworICAgZXhwZWN0ZWQgdG8g
YmUgZGlyZWN0bHkgdXNlZnVsIGluIGNsaWVudCBjb2RlIGlzIFhNTENBTEwuCisKKyAgIE5vdGUg
dGhhdCBvbiBhdCBsZWFzdCBzb21lIFVuaXggdmVyc2lvbnMsIHRoZSBFeHBhdCBsaWJyYXJ5IG11
c3QgYmUKKyAgIGNvbXBpbGVkIHdpdGggdGhlIGNkZWNsIGNhbGxpbmcgY29udmVudGlvbiBhcyB0
aGUgZGVmYXVsdCBzaW5jZQorICAgc3lzdGVtIGhlYWRlcnMgbWF5IGFzc3VtZSB0aGUgY2RlY2wg
Y29udmVudGlvbi4KKyovCisjaWZuZGVmIFhNTENBTEwKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQor
I2RlZmluZSBYTUxDQUxMIF9fY2RlY2wKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmlu
ZWQoX19pMzg2KSAmJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBYTUxDQUxM
IF9fYXR0cmlidXRlX18oKGNkZWNsKSkKKyNlbHNlCisvKiBGb3IgYW55IHBsYXRmb3JtIHdoaWNo
IHVzZXMgdGhpcyBkZWZpbml0aW9uIGFuZCBzdXBwb3J0cyBtb3JlIHRoYW4KKyAgIG9uZSBjYWxs
aW5nIGNvbnZlbnRpb24sIHdlIG5lZWQgdG8gZXh0ZW5kIHRoaXMgZGVmaW5pdGlvbiB0bworICAg
ZGVjbGFyZSB0aGUgY29udmVudGlvbiB1c2VkIG9uIHRoYXQgcGxhdGZvcm0sIGlmIGl0J3MgcG9z
c2libGUgdG8KKyAgIGRvIHNvLgorCisgICBJZiB0aGlzIGlzIHRoZSBjYXNlIGZvciB5b3VyIHBs
YXRmb3JtLCBwbGVhc2UgZmlsZSBhIGJ1ZyByZXBvcnQKKyAgIHdpdGggaW5mb3JtYXRpb24gb24g
aG93IHRvIGlkZW50aWZ5IHlvdXIgcGxhdGZvcm0gdmlhIHRoZSBDCisgICBwcmUtcHJvY2Vzc29y
IGFuZCBob3cgdG8gc3BlY2lmeSB0aGUgc2FtZSBjYWxsaW5nIGNvbnZlbnRpb24gYXMgdGhlCisg
ICBwbGF0Zm9ybSdzIG1hbGxvYygpIGltcGxlbWVudGF0aW9uLgorKi8KKyNkZWZpbmUgWE1MQ0FM
TAorI2VuZGlmCisjZW5kaWYgIC8qIG5vdCBkZWZpbmVkIFhNTENBTEwgKi8KKworCisjaWYgIWRl
ZmluZWQoWE1MX1NUQVRJQykgJiYgIWRlZmluZWQoWE1MSU1QT1JUKQorI2lmbmRlZiBYTUxfQlVJ
TERJTkdfRVhQQVQKKy8qIHVzaW5nIEV4cGF0IGZyb20gYW4gYXBwbGljYXRpb24gKi8KKworI2lm
ZGVmIFhNTF9VU0VfTVNDX0VYVEVOU0lPTlMKKyNkZWZpbmUgWE1MSU1QT1JUIF9fZGVjbHNwZWMo
ZGxsaW1wb3J0KQorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmICAvKiBub3QgZGVmaW5lZCBYTUxf
U1RBVElDICovCisKKworLyogSWYgd2UgZGlkbid0IGRlZmluZSBpdCBhYm92ZSwgZGVmaW5lIGl0
IGF3YXk6ICovCisjaWZuZGVmIFhNTElNUE9SVAorI2RlZmluZSBYTUxJTVBPUlQKKyNlbmRpZgor
CisKKyNkZWZpbmUgWE1MUEFSU0VBUEkodHlwZSkgWE1MSU1QT1JUIHR5cGUgWE1MQ0FMTAorCisj
aWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBYTUxfVU5J
Q09ERV9XQ0hBUl9UCisjZGVmaW5lIFhNTF9VTklDT0RFCisjZW5kaWYKKworI2lmZGVmIFhNTF9V
TklDT0RFICAgICAvKiBJbmZvcm1hdGlvbiBpcyBVVEYtMTYgZW5jb2RlZC4gKi8KKyNpZmRlZiBY
TUxfVU5JQ09ERV9XQ0hBUl9UCit0eXBlZGVmIHdjaGFyX3QgWE1MX0NoYXI7Cit0eXBlZGVmIHdj
aGFyX3QgWE1MX0xDaGFyOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgWE1MX0NoYXI7
Cit0eXBlZGVmIGNoYXIgWE1MX0xDaGFyOworI2VuZGlmIC8qIFhNTF9VTklDT0RFX1dDSEFSX1Qg
Ki8KKyNlbHNlICAgICAgICAgICAgICAgICAgLyogSW5mb3JtYXRpb24gaXMgVVRGLTggZW5jb2Rl
ZC4gKi8KK3R5cGVkZWYgY2hhciBYTUxfQ2hhcjsKK3R5cGVkZWYgY2hhciBYTUxfTENoYXI7Cisj
ZW5kaWYgLyogWE1MX1VOSUNPREUgKi8KKworI2lmZGVmIFhNTF9MQVJHRV9TSVpFICAvKiBVc2Ug
bGFyZ2UgaW50ZWdlcnMgZm9yIGZpbGUvc3RyZWFtIHBvc2l0aW9ucy4gKi8KKyNpZiBkZWZpbmVk
KFhNTF9VU0VfTVNDX0VYVEVOU0lPTlMpICYmIF9NU0NfVkVSIDwgMTQwMAordHlwZWRlZiBfX2lu
dDY0IFhNTF9JbmRleDsgCit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgWE1MX1NpemU7CisjZWxz
ZQordHlwZWRlZiBsb25nIGxvbmcgWE1MX0luZGV4OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv
bmcgWE1MX1NpemU7CisjZW5kaWYKKyNlbHNlCit0eXBlZGVmIGxvbmcgWE1MX0luZGV4OwordHlw
ZWRlZiB1bnNpZ25lZCBsb25nIFhNTF9TaXplOworI2VuZGlmIC8qIFhNTF9MQVJHRV9TSVpFICov
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBub3QgRXhwYXRf
RXh0ZXJuYWxfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2lhc2NpaXRhYi5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9s
aWIvaWFzY2lpdGFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRhMWQ1Y2NjOWE1OWJlNzAyMWJkNTNkNGM3Nzgz
ZmI5YTYxNmRhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2lhc2NpaXRhYi5oCkBAIC0wLDAg
KzEsMzcgQEAKKy8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291cmNlIFNv
ZnR3YXJlIENlbnRlciBMdGQKKyAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBl
cm1pc3Npb24uCisqLworCisvKiBMaWtlIGFzY2lpdGFiLmgsIGV4Y2VwdCB0aGF0IDB4RCBoYXMg
Y29kZSBCVF9TIHJhdGhlciB0aGFuIEJUX0NSICovCisvKiAweDAwICovIEJUX05PTlhNTCwgQlRf
Tk9OWE1MLCBCVF9OT05YTUwsIEJUX05PTlhNTCwKKy8qIDB4MDQgKi8gQlRfTk9OWE1MLCBCVF9O
T05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLAorLyogMHgwOCAqLyBCVF9OT05YTUwsIEJUX1Ms
IEJUX0xGLCBCVF9OT05YTUwsCisvKiAweDBDICovIEJUX05PTlhNTCwgQlRfUywgQlRfTk9OWE1M
LCBCVF9OT05YTUwsCisvKiAweDEwICovIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9OT05YTUws
IEJUX05PTlhNTCwKKy8qIDB4MTQgKi8gQlRfTk9OWE1MLCBCVF9OT05YTUwsIEJUX05PTlhNTCwg
QlRfTk9OWE1MLAorLyogMHgxOCAqLyBCVF9OT05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBC
VF9OT05YTUwsCisvKiAweDFDICovIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9OT05YTUwsIEJU
X05PTlhNTCwKKy8qIDB4MjAgKi8gQlRfUywgQlRfRVhDTCwgQlRfUVVPVCwgQlRfTlVNLAorLyog
MHgyNCAqLyBCVF9PVEhFUiwgQlRfUEVSQ05ULCBCVF9BTVAsIEJUX0FQT1MsCisvKiAweDI4ICov
IEJUX0xQQVIsIEJUX1JQQVIsIEJUX0FTVCwgQlRfUExVUywKKy8qIDB4MkMgKi8gQlRfQ09NTUEs
IEJUX01JTlVTLCBCVF9OQU1FLCBCVF9TT0wsCisvKiAweDMwICovIEJUX0RJR0lULCBCVF9ESUdJ
VCwgQlRfRElHSVQsIEJUX0RJR0lULAorLyogMHgzNCAqLyBCVF9ESUdJVCwgQlRfRElHSVQsIEJU
X0RJR0lULCBCVF9ESUdJVCwKKy8qIDB4MzggKi8gQlRfRElHSVQsIEJUX0RJR0lULCBCVF9DT0xP
TiwgQlRfU0VNSSwKKy8qIDB4M0MgKi8gQlRfTFQsIEJUX0VRVUFMUywgQlRfR1QsIEJUX1FVRVNU
LAorLyogMHg0MCAqLyBCVF9PVEhFUiwgQlRfSEVYLCBCVF9IRVgsIEJUX0hFWCwKKy8qIDB4NDQg
Ki8gQlRfSEVYLCBCVF9IRVgsIEJUX0hFWCwgQlRfTk1TVFJULAorLyogMHg0OCAqLyBCVF9OTVNU
UlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCisvKiAweDRDICovIEJUX05NU1RS
VCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKKy8qIDB4NTAgKi8gQlRfTk1TVFJU
LCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAorLyogMHg1NCAqLyBCVF9OTVNUUlQs
IEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCisvKiAweDU4ICovIEJUX05NU1RSVCwg
QlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX0xTUUIsCisvKiAweDVDICovIEJUX09USEVSLCBCVF9S
U1FCLCBCVF9PVEhFUiwgQlRfTk1TVFJULAorLyogMHg2MCAqLyBCVF9PVEhFUiwgQlRfSEVYLCBC
VF9IRVgsIEJUX0hFWCwKKy8qIDB4NjQgKi8gQlRfSEVYLCBCVF9IRVgsIEJUX0hFWCwgQlRfTk1T
VFJULAorLyogMHg2OCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNU
UlQsCisvKiAweDZDICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RS
VCwKKy8qIDB4NzAgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJU
LAorLyogMHg3NCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQs
CisvKiAweDc4ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX09USEVSLAor
LyogMHg3QyAqLyBCVF9WRVJCQVIsIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL2xpYi9pbnRlcm5hbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvaW50ZXJuYWwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZDU0NTQ4MzFkYTJiNGU4ZjNhODQwNmEyYTdjNzJjYzc5YzY1MzllCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9m
aWxlcy9saWIvaW50ZXJuYWwuaApAQCAtMCwwICsxLDczIEBACisvKiBpbnRlcm5hbC5oCisKKyAg
IEludGVybmFsIGRlZmluaXRpb25zIHVzZWQgYnkgRXhwYXQuICBUaGlzIGlzIG5vdCBuZWVkZWQg
dG8gY29tcGlsZQorICAgY2xpZW50IGNvZGUuCisKKyAgIFRoZSBmb2xsb3dpbmcgY2FsbGluZyBj
b252ZW50aW9uIG1hY3JvcyBhcmUgZGVmaW5lZCBmb3IgZnJlcXVlbnRseQorICAgY2FsbGVkIGZ1
bmN0aW9uczoKKworICAgRkFTVENBTEwgICAgLSBVc2VkIGZvciB0aG9zZSBpbnRlcm5hbCBmdW5j
dGlvbnMgdGhhdCBoYXZlIGEgc2ltcGxlCisgICAgICAgICAgICAgICAgIGJvZHkgYW5kIGEgbG93
IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIGxvY2FsIHZhcmlhYmxlcy4KKworICAgUFRSQ0FMTCAg
ICAgLSBVc2VkIGZvciBmdW5jdGlvbnMgY2FsbGVkIHRob3VnaCBmdW5jdGlvbiBwb2ludGVycy4K
KworICAgUFRSRkFTVENBTEwgLSBMaWtlIFBUUkNBTEwsIGJ1dCBmb3IgbG93IG51bWJlciBvZiBh
cmd1bWVudHMuCisKKyAgIGlubGluZSAgICAgIC0gVXNlZCBmb3Igc2VsZWN0ZWQgaW50ZXJuYWwg
ZnVuY3Rpb25zIGZvciB3aGljaCBpbmxpbmluZworICAgICAgICAgICAgICAgICBtYXkgaW1wcm92
ZSBwZXJmb3JtYW5jZSBvbiBzb21lIHBsYXRmb3Jtcy4KKworICAgTm90ZTogVXNlIG9mIHRoZXNl
IG1hY3JvcyBpcyBiYXNlZCBvbiBqdWRnZW1lbnQsIG5vdCBoYXJkIHJ1bGVzLAorICAgICAgICAg
YW5kIHRoZXJlZm9yZSBzdWJqZWN0IHRvIGNoYW5nZS4KKyovCisKKyNpZiBkZWZpbmVkKF9fR05V
Q19fKSAmJiBkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKKy8qIFdl
J2xsIHVzZSB0aGlzIHZlcnNpb24gYnkgZGVmYXVsdCBvbmx5IHdoZXJlIHdlIGtub3cgaXQgaGVs
cHMuCisKKyAgIHJlZ3Bhcm0oKSBnZW5lcmF0ZXMgd2FybmluZ3Mgb24gU29sYXJpcyBib3hlcy4g
ICBTZWUgU0YgYnVnICM2OTI4NzguCisKKyAgIEluc3RhYmlsaXR5IHJlcG9ydGVkIHdpdGggZWdj
cyBvbiBhIFJlZEhhdCBMaW51eCA3LjMuCisgICBMZXQncyBjb21tZW50IG91dDoKKyAgICNkZWZp
bmUgRkFTVENBTEwgX19hdHRyaWJ1dGVfXygoc3RkY2FsbCwgcmVncGFybSgzKSkpCisgICBhbmQg
bGV0J3MgdHJ5IHRoaXM6CisqLworI2RlZmluZSBGQVNUQ0FMTCBfX2F0dHJpYnV0ZV9fKChyZWdw
YXJtKDMpKSkKKyNkZWZpbmUgUFRSRkFTVENBTEwgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp
CisjZW5kaWYKKworLyogVXNpbmcgX19mYXN0Y2FsbCBzZWVtcyB0byBoYXZlIGFuIHVuZXhwZWN0
ZWQgbmVnYXRpdmUgZWZmZWN0IHVuZGVyCisgICBNUyBWQysrLCBlc3BlY2lhbGx5IGZvciBmdW5j
dGlvbiBwb2ludGVycywgc28gd2Ugd29uJ3QgdXNlIGl0IGZvcgorICAgbm93IG9uIHRoYXQgcGxh
dGZvcm0uIEl0IG1heSBiZSByZWNvbnNpZGVyZWQgZm9yIGEgZnV0dXJlIHJlbGVhc2UKKyAgIGlm
IGl0IGNhbiBiZSBtYWRlIG1vcmUgZWZmZWN0aXZlLgorICAgTGlrZWx5IHJlYXNvbjogX19mYXN0
Y2FsbCBvbiBXaW5kb3dzIGlzIGxpa2Ugc3RkY2FsbCwgdGhlcmVmb3JlCisgICB0aGUgY29tcGls
ZXIgY2Fubm90IHBlcmZvcm0gc3RhY2sgb3B0aW1pemF0aW9ucyBmb3IgY2FsbCBjbHVzdGVycy4K
KyovCisKKy8qIE1ha2Ugc3VyZSBhbGwgb2YgdGhlc2UgYXJlIGRlZmluZWQgaWYgdGhleSBhcmVu
J3QgYWxyZWFkeS4gKi8KKworI2lmbmRlZiBGQVNUQ0FMTAorI2RlZmluZSBGQVNUQ0FMTAorI2Vu
ZGlmCisKKyNpZm5kZWYgUFRSQ0FMTAorI2RlZmluZSBQVFJDQUxMCisjZW5kaWYKKworI2lmbmRl
ZiBQVFJGQVNUQ0FMTAorI2RlZmluZSBQVFJGQVNUQ0FMTAorI2VuZGlmCisKKyNpZm5kZWYgWE1M
X01JTl9TSVpFCisjaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpICYmICFkZWZpbmVkKGlubGluZSkK
KyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNlbmRpZiAvKiBfX0dO
VUNfXyAqLworI2VuZGlmCisjZW5kaWYgLyogWE1MX01JTl9TSVpFICovCisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworI2RlZmluZSBpbmxpbmUgaW5saW5lCisjZWxzZQorI2lmbmRlZiBpbmxpbmUKKyNk
ZWZpbmUgaW5saW5lCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbGF0aW4xdGFi
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0
L2ZpbGVzL2xpYi9sYXRpbjF0YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41M2MyNWQ3NmIyNjgxMzYwMDc3NjQw
ZWUzMmQwN2YxYTdhYWEzYWU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbGF0aW4xdGFiLmgK
QEAgLTAsMCArMSwzNiBAQAorLyogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IFRoYWkgT3BlbiBT
b3VyY2UgU29mdHdhcmUgQ2VudGVyIEx0ZAorICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNv
cHlpbmcgcGVybWlzc2lvbi4KKyovCisKKy8qIDB4ODAgKi8gQlRfT1RIRVIsIEJUX09USEVSLCBC
VF9PVEhFUiwgQlRfT1RIRVIsCisvKiAweDg0ICovIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RI
RVIsIEJUX09USEVSLAorLyogMHg4OCAqLyBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLCBC
VF9PVEhFUiwKKy8qIDB4OEMgKi8gQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RI
RVIsCisvKiAweDkwICovIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLAor
LyogMHg5NCAqLyBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwKKy8qIDB4
OTggKi8gQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsCisvKiAweDlDICov
IEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLAorLyogMHhBMCAqLyBCVF9P
VEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwKKy8qIDB4QTQgKi8gQlRfT1RIRVIs
IEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsCisvKiAweEE4ICovIEJUX09USEVSLCBCVF9P
VEhFUiwgQlRfTk1TVFJULCBCVF9PVEhFUiwKKy8qIDB4QUMgKi8gQlRfT1RIRVIsIEJUX09USEVS
LCBCVF9PVEhFUiwgQlRfT1RIRVIsCisvKiAweEIwICovIEJUX09USEVSLCBCVF9PVEhFUiwgQlRf
T1RIRVIsIEJUX09USEVSLAorLyogMHhCNCAqLyBCVF9PVEhFUiwgQlRfTk1TVFJULCBCVF9PVEhF
UiwgQlRfTkFNRSwKKy8qIDB4QjggKi8gQlRfT1RIRVIsIEJUX09USEVSLCBCVF9OTVNUUlQsIEJU
X09USEVSLAorLyogMHhCQyAqLyBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhF
UiwKKy8qIDB4QzAgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJU
LAorLyogMHhDNCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQs
CisvKiAweEM4ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwK
Ky8qIDB4Q0MgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAor
LyogMHhEMCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCisv
KiAweEQ0ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX09USEVSLAorLyog
MHhEOCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCisvKiAw
eERDICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKKy8qIDB4
RTAgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAorLyogMHhF
NCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCisvKiAweEU4
ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKKy8qIDB4RUMg
Ki8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAorLyogMHhGMCAq
LyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCisvKiAweEY0ICov
IEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX09USEVSLAorLyogMHhGOCAqLyBC
VF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCisvKiAweEZDICovIEJU
X05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMv
bGliL2xpYmV4cGF0LmRlZiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2xpYmV4cGF0LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTIwYmJj
ZjkwMTY0Y2RmOWQxNWNkODQ1NzA2M2UyNmQwYjI4YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9s
aWIvbGliZXhwYXQuZGVmCkBAIC0wLDAgKzEsNzMgQEAKKzsgREVGIGZpbGUgZm9yIE1TIFZDKysK
KworTElCUkFSWQorRVhQT1JUUworICBYTUxfRGVmYXVsdEN1cnJlbnQgQDEKKyAgWE1MX0Vycm9y
U3RyaW5nIEAyCisgIFhNTF9FeHBhdFZlcnNpb24gQDMKKyAgWE1MX0V4cGF0VmVyc2lvbkluZm8g
QDQKKyAgWE1MX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlIEA1CisgIFhNTF9HZXRCYXNlIEA2
CisgIFhNTF9HZXRCdWZmZXIgQDcKKyAgWE1MX0dldEN1cnJlbnRCeXRlQ291bnQgQDgKKyAgWE1M
X0dldEN1cnJlbnRCeXRlSW5kZXggQDkKKyAgWE1MX0dldEN1cnJlbnRDb2x1bW5OdW1iZXIgQDEw
CisgIFhNTF9HZXRDdXJyZW50TGluZU51bWJlciBAMTEKKyAgWE1MX0dldEVycm9yQ29kZSBAMTIK
KyAgWE1MX0dldElkQXR0cmlidXRlSW5kZXggQDEzCisgIFhNTF9HZXRJbnB1dENvbnRleHQgQDE0
CisgIFhNTF9HZXRTcGVjaWZpZWRBdHRyaWJ1dGVDb3VudCBAMTUKKyAgWE1MX1BhcnNlIEAxNgor
ICBYTUxfUGFyc2VCdWZmZXIgQDE3CisgIFhNTF9QYXJzZXJDcmVhdGUgQDE4CisgIFhNTF9QYXJz
ZXJDcmVhdGVOUyBAMTkKKyAgWE1MX1BhcnNlckNyZWF0ZV9NTSBAMjAKKyAgWE1MX1BhcnNlckZy
ZWUgQDIxCisgIFhNTF9TZXRBdHRsaXN0RGVjbEhhbmRsZXIgQDIyCisgIFhNTF9TZXRCYXNlIEAy
MworICBYTUxfU2V0Q2RhdGFTZWN0aW9uSGFuZGxlciBAMjQKKyAgWE1MX1NldENoYXJhY3RlckRh
dGFIYW5kbGVyIEAyNQorICBYTUxfU2V0Q29tbWVudEhhbmRsZXIgQDI2CisgIFhNTF9TZXREZWZh
dWx0SGFuZGxlciBAMjcKKyAgWE1MX1NldERlZmF1bHRIYW5kbGVyRXhwYW5kIEAyOAorICBYTUxf
U2V0RG9jdHlwZURlY2xIYW5kbGVyIEAyOQorICBYTUxfU2V0RWxlbWVudERlY2xIYW5kbGVyIEAz
MAorICBYTUxfU2V0RWxlbWVudEhhbmRsZXIgQDMxCisgIFhNTF9TZXRFbmNvZGluZyBAMzIKKyAg
WE1MX1NldEVuZENkYXRhU2VjdGlvbkhhbmRsZXIgQDMzCisgIFhNTF9TZXRFbmREb2N0eXBlRGVj
bEhhbmRsZXIgQDM0CisgIFhNTF9TZXRFbmRFbGVtZW50SGFuZGxlciBAMzUKKyAgWE1MX1NldEVu
ZE5hbWVzcGFjZURlY2xIYW5kbGVyIEAzNgorICBYTUxfU2V0RW50aXR5RGVjbEhhbmRsZXIgQDM3
CisgIFhNTF9TZXRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgQDM4CisgIFhNTF9TZXRFeHRlcm5h
bEVudGl0eVJlZkhhbmRsZXJBcmcgQDM5CisgIFhNTF9TZXROYW1lc3BhY2VEZWNsSGFuZGxlciBA
NDAKKyAgWE1MX1NldE5vdFN0YW5kYWxvbmVIYW5kbGVyIEA0MQorICBYTUxfU2V0Tm90YXRpb25E
ZWNsSGFuZGxlciBANDIKKyAgWE1MX1NldFBhcmFtRW50aXR5UGFyc2luZyBANDMKKyAgWE1MX1Nl
dFByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgQDQ0CisgIFhNTF9TZXRSZXR1cm5OU1RyaXBs
ZXQgQDQ1CisgIFhNTF9TZXRTdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgQDQ2CisgIFhNTF9TZXRT
dGFydERvY3R5cGVEZWNsSGFuZGxlciBANDcKKyAgWE1MX1NldFN0YXJ0RWxlbWVudEhhbmRsZXIg
QDQ4CisgIFhNTF9TZXRTdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyIEA0OQorICBYTUxfU2V0VW5r
bm93bkVuY29kaW5nSGFuZGxlciBANTAKKyAgWE1MX1NldFVucGFyc2VkRW50aXR5RGVjbEhhbmRs
ZXIgQDUxCisgIFhNTF9TZXRVc2VyRGF0YSBANTIKKyAgWE1MX1NldFhtbERlY2xIYW5kbGVyIEA1
MworICBYTUxfVXNlUGFyc2VyQXNIYW5kbGVyQXJnIEA1NAorOyBhZGRlZCB3aXRoIHZlcnNpb24g
MS45NS4zCisgIFhNTF9QYXJzZXJSZXNldCBANTUKKyAgWE1MX1NldFNraXBwZWRFbnRpdHlIYW5k
bGVyIEA1NgorOyBhZGRlZCB3aXRoIHZlcnNpb24gMS45NS41CisgIFhNTF9HZXRGZWF0dXJlTGlz
dCBANTcKKyAgWE1MX1VzZUZvcmVpZ25EVEQgQDU4Cis7IGFkZGVkIHdpdGggdmVyc2lvbiAxLjk1
LjYKKyAgWE1MX0ZyZWVDb250ZW50TW9kZWwgQDU5CisgIFhNTF9NZW1NYWxsb2MgQDYwCisgIFhN
TF9NZW1SZWFsbG9jIEA2MQorICBYTUxfTWVtRnJlZSBANjIKKzsgYWRkZWQgd2l0aCB2ZXJzaW9u
IDEuOTUuOAorICBYTUxfU3RvcFBhcnNlciBANjMKKyAgWE1MX1Jlc3VtZVBhcnNlciBANjQKKyAg
WE1MX0dldFBhcnNpbmdTdGF0dXMgQDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9saWJleHBhdHcuZGVm
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9m
aWxlcy9saWIvbGliZXhwYXR3LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTIwYmJjZjkwMTY0Y2RmOWQxNWNk
ODQ1NzA2M2UyNmQwYjI4YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbGliZXhwYXR3LmRl
ZgpAQCAtMCwwICsxLDczIEBACis7IERFRiBmaWxlIGZvciBNUyBWQysrCisKK0xJQlJBUlkKK0VY
UE9SVFMKKyAgWE1MX0RlZmF1bHRDdXJyZW50IEAxCisgIFhNTF9FcnJvclN0cmluZyBAMgorICBY
TUxfRXhwYXRWZXJzaW9uIEAzCisgIFhNTF9FeHBhdFZlcnNpb25JbmZvIEA0CisgIFhNTF9FeHRl
cm5hbEVudGl0eVBhcnNlckNyZWF0ZSBANQorICBYTUxfR2V0QmFzZSBANgorICBYTUxfR2V0QnVm
ZmVyIEA3CisgIFhNTF9HZXRDdXJyZW50Qnl0ZUNvdW50IEA4CisgIFhNTF9HZXRDdXJyZW50Qnl0
ZUluZGV4IEA5CisgIFhNTF9HZXRDdXJyZW50Q29sdW1uTnVtYmVyIEAxMAorICBYTUxfR2V0Q3Vy
cmVudExpbmVOdW1iZXIgQDExCisgIFhNTF9HZXRFcnJvckNvZGUgQDEyCisgIFhNTF9HZXRJZEF0
dHJpYnV0ZUluZGV4IEAxMworICBYTUxfR2V0SW5wdXRDb250ZXh0IEAxNAorICBYTUxfR2V0U3Bl
Y2lmaWVkQXR0cmlidXRlQ291bnQgQDE1CisgIFhNTF9QYXJzZSBAMTYKKyAgWE1MX1BhcnNlQnVm
ZmVyIEAxNworICBYTUxfUGFyc2VyQ3JlYXRlIEAxOAorICBYTUxfUGFyc2VyQ3JlYXRlTlMgQDE5
CisgIFhNTF9QYXJzZXJDcmVhdGVfTU0gQDIwCisgIFhNTF9QYXJzZXJGcmVlIEAyMQorICBYTUxf
U2V0QXR0bGlzdERlY2xIYW5kbGVyIEAyMgorICBYTUxfU2V0QmFzZSBAMjMKKyAgWE1MX1NldENk
YXRhU2VjdGlvbkhhbmRsZXIgQDI0CisgIFhNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlciBAMjUK
KyAgWE1MX1NldENvbW1lbnRIYW5kbGVyIEAyNgorICBYTUxfU2V0RGVmYXVsdEhhbmRsZXIgQDI3
CisgIFhNTF9TZXREZWZhdWx0SGFuZGxlckV4cGFuZCBAMjgKKyAgWE1MX1NldERvY3R5cGVEZWNs
SGFuZGxlciBAMjkKKyAgWE1MX1NldEVsZW1lbnREZWNsSGFuZGxlciBAMzAKKyAgWE1MX1NldEVs
ZW1lbnRIYW5kbGVyIEAzMQorICBYTUxfU2V0RW5jb2RpbmcgQDMyCisgIFhNTF9TZXRFbmRDZGF0
YVNlY3Rpb25IYW5kbGVyIEAzMworICBYTUxfU2V0RW5kRG9jdHlwZURlY2xIYW5kbGVyIEAzNAor
ICBYTUxfU2V0RW5kRWxlbWVudEhhbmRsZXIgQDM1CisgIFhNTF9TZXRFbmROYW1lc3BhY2VEZWNs
SGFuZGxlciBAMzYKKyAgWE1MX1NldEVudGl0eURlY2xIYW5kbGVyIEAzNworICBYTUxfU2V0RXh0
ZXJuYWxFbnRpdHlSZWZIYW5kbGVyIEAzOAorICBYTUxfU2V0RXh0ZXJuYWxFbnRpdHlSZWZIYW5k
bGVyQXJnIEAzOQorICBYTUxfU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIgQDQwCisgIFhNTF9TZXRO
b3RTdGFuZGFsb25lSGFuZGxlciBANDEKKyAgWE1MX1NldE5vdGF0aW9uRGVjbEhhbmRsZXIgQDQy
CisgIFhNTF9TZXRQYXJhbUVudGl0eVBhcnNpbmcgQDQzCisgIFhNTF9TZXRQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25IYW5kbGVyIEA0NAorICBYTUxfU2V0UmV0dXJuTlNUcmlwbGV0IEA0NQorICBYTUxf
U2V0U3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyIEA0NgorICBYTUxfU2V0U3RhcnREb2N0eXBlRGVj
bEhhbmRsZXIgQDQ3CisgIFhNTF9TZXRTdGFydEVsZW1lbnRIYW5kbGVyIEA0OAorICBYTUxfU2V0
U3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciBANDkKKyAgWE1MX1NldFVua25vd25FbmNvZGluZ0hh
bmRsZXIgQDUwCisgIFhNTF9TZXRVbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyIEA1MQorICBYTUxf
U2V0VXNlckRhdGEgQDUyCisgIFhNTF9TZXRYbWxEZWNsSGFuZGxlciBANTMKKyAgWE1MX1VzZVBh
cnNlckFzSGFuZGxlckFyZyBANTQKKzsgYWRkZWQgd2l0aCB2ZXJzaW9uIDEuOTUuMworICBYTUxf
UGFyc2VyUmVzZXQgQDU1CisgIFhNTF9TZXRTa2lwcGVkRW50aXR5SGFuZGxlciBANTYKKzsgYWRk
ZWQgd2l0aCB2ZXJzaW9uIDEuOTUuNQorICBYTUxfR2V0RmVhdHVyZUxpc3QgQDU3CisgIFhNTF9V
c2VGb3JlaWduRFREIEA1OAorOyBhZGRlZCB3aXRoIHZlcnNpb24gMS45NS42CisgIFhNTF9GcmVl
Q29udGVudE1vZGVsIEA1OQorICBYTUxfTWVtTWFsbG9jIEA2MAorICBYTUxfTWVtUmVhbGxvYyBA
NjEKKyAgWE1MX01lbUZyZWUgQDYyCis7IGFkZGVkIHdpdGggdmVyc2lvbiAxLjk1LjgKKyAgWE1M
X1N0b3BQYXJzZXIgQDYzCisgIFhNTF9SZXN1bWVQYXJzZXIgQDY0CisgIFhNTF9HZXRQYXJzaW5n
U3RhdHVzIEA2NQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbWFjY29uZmlnLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9tYWNjb25m
aWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNzI1Y2FhZjU0YTJlMmUyZTlkNTNmNTQ5Njk2ZGUzNTRmYzFmZjU3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbWFjY29uZmlnLmgKQEAgLTAsMCArMSw1MyBAQAor
Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisqKiBDb3B5cmlnaHQgMjAwMCwgQ2xhcmsgQ29vcGVyCisqKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKioKKyoqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZS4gWW91IGFyZSBwZXJtaXR0
ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgbW9kaWZ5CisqKiBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIE1JVC9YIGxpY2Vuc2UgKGNvbnRhaW5lZCBpbiB0aGUgQ09QWUlORyBmaWxlCisqKiB3
aXRoIHRoaXMgZGlzdHJpYnV0aW9uLikKKyoqCisqLworCisjaWZuZGVmIE1BQ0NPTkZJR19ICisj
ZGVmaW5lIE1BQ0NPTkZJR19ICisKKworLyogMTIzNCA9IExJTF9FTkRJQU4sIDQzMjEgPSBCSUdF
TkRJQU4gKi8KKyNkZWZpbmUgQllURU9SREVSICA0MzIxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgYmNvcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQkNPUFkKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1tb3ZlJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9NRU1NT1ZFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBg
bW1hcCcgc3lzdGVtIGNhbGwuICovCisjdW5kZWYgSEFWRV9NTUFQCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVf
VU5JU1REX0gKKworLyogd2hldGhlciBieXRlb3JkZXIgaXMgYmlnZW5kaWFuICovCisjZGVmaW5l
IFdPUkRTX0JJR0VORElBTgorCisvKiBEZWZpbmUgdG8gc3BlY2lmeSBob3cgbXVjaCBjb250ZXh0
IHRvIHJldGFpbiBhcm91bmQgdGhlIGN1cnJlbnQgcGFyc2UKKyAgIHBvaW50LiAqLworI3VuZGVm
IFhNTF9DT05URVhUX0JZVEVTCisKKy8qIERlZmluZSB0byBtYWtlIHBhcmFtZXRlciBlbnRpdHkg
cGFyc2luZyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgWE1MX0RURAorCisv
KiBEZWZpbmUgdG8gbWFrZSBYTUwgTmFtZXNwYWNlcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZS4g
Ki8KKyNkZWZpbmUgWE1MX05TCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMg
bm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIERlZmluZSB0byBg
bG9uZycgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjZGVmaW5lIG9mZl90
ICBsb25nCisKKy8qIERlZmluZSB0byBgdW5zaWduZWQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBu
b3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdAorCisKKyNlbmRpZiAvKiBpZm5kZWYgTUFDQ09O
RklHX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL25hbWV0YWIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL25hbWV0YWIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMDVlNjJjNzdhNmM2MjRhNjgyOGRkM2Y0ZTI1YmE4ZmU4NDFlN2EwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9leHBhdC9maWxlcy9saWIvbmFtZXRhYi5oCkBAIC0wLDAgKzEsMTUwIEBACitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbmFtaW5nQml0bWFwW10gPSB7CisweDAwMDAwMDAwLCAweDAwMDAwMDAw
LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAw
MDAwMCwgMHgwMDAwMDAwMCwKKzB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4
RkZGRkZGRkYsCisweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZG
LAorMHgwMDAwMDAwMCwgMHgwNDAwMDAwMCwgMHg4N0ZGRkZGRSwgMHgwN0ZGRkZGRSwKKzB4MDAw
MDAwMDAsIDB4MDAwMDAwMDAsIDB4RkY3RkZGRkYsIDB4RkY3RkZGRkYsCisweEZGRkZGRkZGLCAw
eDdGRjNGRkZGLCAweEZGRkZGREZFLCAweDdGRkZGRkZGLAorMHhGRkZGRkZGRiwgMHhGRkZGRkZG
RiwgMHhGRkZGRTAwRiwgMHhGQzMxRkZGRiwKKzB4MDBGRkZGRkYsIDB4MDAwMDAwMDAsIDB4RkZG
RjAwMDAsIDB4RkZGRkZGRkYsCisweEZGRkZGRkZGLCAweEY4MDAwMUZGLCAweDAwMDAwMDAzLCAw
eDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAw
MCwKKzB4RkZGRkQ3NDAsIDB4RkZGRkZGRkIsIDB4NTQ3RjdGRkYsIDB4MDAwRkZGRkQsCisweEZG
RkZERkZFLCAweEZGRkZGRkZGLCAweERGRkVGRkZGLCAweEZGRkZGRkZGLAorMHhGRkZGMDAwMywg
MHhGRkZGRkZGRiwgMHhGRkZGMTk5RiwgMHgwMzNGQ0ZGRiwKKzB4MDAwMDAwMDAsIDB4RkZGRTAw
MDAsIDB4MDI3RkZGRkYsIDB4RkZGRkZGRkUsCisweDAwMDAwMDdGLCAweDAwMDAwMDAwLCAweEZG
RkYwMDAwLCAweDAwMDcwN0ZGLAorMHgwMDAwMDAwMCwgMHgwN0ZGRkZGRSwgMHgwMDAwMDdGRSwg
MHhGRkZFMDAwMCwKKzB4RkZGRkZGRkYsIDB4N0NGRkZGRkYsIDB4MDAyRjdGRkYsIDB4MDAwMDAw
NjAsCisweEZGRkZGRkUwLCAweDIzRkZGRkZGLCAweEZGMDAwMDAwLCAweDAwMDAwMDAzLAorMHhG
RkY5OUZFMCwgMHgwM0M1RkRGRiwgMHhCMDAwMDAwMCwgMHgwMDAzMDAwMywKKzB4RkZGOTg3RTAs
IDB4MDM2REZERkYsIDB4NUUwMDAwMDAsIDB4MDAxQzAwMDAsCisweEZGRkJBRkUwLCAweDIzRURG
REZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxLAorMHhGRkY5OUZFMCwgMHgyM0NERkRGRiwgMHhC
MDAwMDAwMCwgMHgwMDAwMDAwMywKKzB4RDYzREM3RTAsIDB4MDNCRkM3MTgsIDB4MDAwMDAwMDAs
IDB4MDAwMDAwMDAsCisweEZGRkRERkUwLCAweDAzRUZGREZGLCAweDAwMDAwMDAwLCAweDAwMDAw
MDAzLAorMHhGRkZEREZFMCwgMHgwM0VGRkRGRiwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMywKKzB4
RkZGRERGRTAsIDB4MDNGRkZERkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsCisweDAwMDAwMDAw
LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHhGRkZGRkZGRSwgMHgwMDBE
N0ZGRiwgMHgwMDAwMDAzRiwgMHgwMDAwMDAwMCwKKzB4RkVGMDI1OTYsIDB4MjAwRDZDQUUsIDB4
MDAwMDAwMUYsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweEZGRkZGRUZG
LCAweDAwMDAwM0ZGLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAw
MDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisw
eDAwMDAwMDAwLCAweEZGRkZGRkZGLCAweEZGRkYwMDNGLCAweDAwN0ZGRkZGLAorMHgwMDA3REFF
RCwgMHg1MDAwMDAwMCwgMHg4MjMxNTAwMSwgMHgwMDJDNjJBQiwKKzB4NDAwMDAwMDAsIDB4RjU4
MEM5MDAsIDB4MDAwMDAwMDcsIDB4MDIwMTA4MDAsCisweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAw
eEZGRkZGRkZGLCAweEZGRkZGRkZGLAorMHgwRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZG
RiwgMHgwM0ZGRkZGRiwKKzB4M0YzRkZGRkYsIDB4RkZGRkZGRkYsIDB4QUFGRjNGM0YsIDB4M0ZG
RkZGRkYsCisweEZGRkZGRkZGLCAweDVGREZGRkZGLCAweDBGQ0YxRkRDLCAweDFGREMxRkZGLAor
MHgwMDAwMDAwMCwgMHgwMDAwNEM0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAw
MDcsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDgwLCAweDAw
MDAwM0ZFLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGLAorMHgwMDFGRkZGRiwgMHhGRkZGRkZGRSwg
MHhGRkZGRkZGRiwgMHgwN0ZGRkZGRiwKKzB4RkZGRkZGRTAsIDB4MDAwMDFGRkYsIDB4MDAwMDAw
MDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAw
MDAwMDAwLAorMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwK
KzB4RkZGRkZGRkYsIDB4MDAwMDAwM0YsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweEZGRkZG
RkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAorMHhGRkZGRkZGRiwgMHgw
MDAwMDAwRiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDdGRjYwMDAs
IDB4ODdGRkZGRkUsIDB4MDdGRkZGRkUsCisweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweEZGN0ZG
RkZGLCAweEZGN0ZGRkZGLAorMHgwMEZGRkZGRiwgMHgwMDAwMDAwMCwgMHhGRkZGMDAwMCwgMHhG
RkZGRkZGRiwKKzB4RkZGRkZGRkYsIDB4RjgwMDAxRkYsIDB4MDAwMzAwMDMsIDB4MDAwMDAwMDAs
CisweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweDAwMDAwMDNGLCAweDAwMDAwMDAzLAorMHhGRkZG
RDdDMCwgMHhGRkZGRkZGQiwgMHg1NDdGN0ZGRiwgMHgwMDBGRkZGRCwKKzB4RkZGRkRGRkUsIDB4
RkZGRkZGRkYsIDB4REZGRUZGRkYsIDB4RkZGRkZGRkYsCisweEZGRkYwMDdCLCAweEZGRkZGRkZG
LCAweEZGRkYxOTlGLCAweDAzM0ZDRkZGLAorMHgwMDAwMDAwMCwgMHhGRkZFMDAwMCwgMHgwMjdG
RkZGRiwgMHhGRkZGRkZGRSwKKzB4RkZGRTAwN0YsIDB4QkJGRkZGRkIsIDB4RkZGRjAwMTYsIDB4
MDAwNzA3RkYsCisweDAwMDAwMDAwLCAweDA3RkZGRkZFLCAweDAwMDdGRkZGLCAweEZGRkYwM0ZG
LAorMHhGRkZGRkZGRiwgMHg3Q0ZGRkZGRiwgMHhGRkVGN0ZGRiwgMHgwM0ZGM0RGRiwKKzB4RkZG
RkZGRUUsIDB4RjNGRkZGRkYsIDB4RkYxRTNGRkYsIDB4MDAwMEZGQ0YsCisweEZGRjk5RkVFLCAw
eEQzQzVGREZGLCAweEIwODAzOTlGLCAweDAwMDNGRkNGLAorMHhGRkY5ODdFNCwgMHhEMzZERkRG
RiwgMHg1RTAwMzk4NywgMHgwMDFGRkZDMCwKKzB4RkZGQkFGRUUsIDB4RjNFREZERkYsIDB4MDAw
MDNCQkYsIDB4MDAwMEZGQzEsCisweEZGRjk5RkVFLCAweEYzQ0RGREZGLCAweEIwQzAzOThGLCAw
eDAwMDBGRkMzLAorMHhENjNEQzdFQywgMHhDM0JGQzcxOCwgMHgwMDgwM0RDNywgMHgwMDAwRkY4
MCwKKzB4RkZGRERGRUUsIDB4QzNFRkZERkYsIDB4MDA2MDNEREYsIDB4MDAwMEZGQzMsCisweEZG
RkRERkVDLCAweEMzRUZGREZGLCAweDQwNjAzRERGLCAweDAwMDBGRkMzLAorMHhGRkZEREZFQywg
MHhDM0ZGRkRGRiwgMHgwMDgwM0RDRiwgMHgwMDAwRkZDMywKKzB4MDAwMDAwMDAsIDB4MDAwMDAw
MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweEZGRkZGRkZFLCAweDA3RkY3RkZGLCAweDAz
RkY3RkZGLCAweDAwMDAwMDAwLAorMHhGRUYwMjU5NiwgMHgzQkZGNkNBRSwgMHgwM0ZGM0Y1Riwg
MHgwMDAwMDAwMCwKKzB4MDMwMDAwMDAsIDB4QzJBMDAzRkYsIDB4RkZGRkZFRkYsIDB4RkZGRTAz
RkYsCisweEZFQkYwRkRGLCAweDAyRkUzRkZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgw
MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAs
IDB4MDAwMDAwMDAsIDB4MUZGRjAwMDAsIDB4MDAwMDAwMDIsCisweDAwMDAwMEEwLCAweDAwM0VG
RkZFLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGLAorMHg2NjFGRkZGRiwgMHhGRkZGRkZGRSwgMHhG
RkZGRkZGRiwgMHg3N0ZGRkZGRiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBubXN0
cnRQYWdlc1tdID0geworMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwg
MHgwMCwKKzB4MDAsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisw
eDEwLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMywKKzB4MDAsIDB4MTQsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKzB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisweDAxLCAweDAxLCAweDAx
LCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKzB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsCisweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAx
LCAweDAxLAorMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwK
KzB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisweDAxLCAw
eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKzB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MTcsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwKKzB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
CisweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKzB4MDEsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisweDAxLCAweDAxLCAweDAxLCAweDAx
LCAweDAxLCAweDAxLCAweDAxLCAweDE4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCit9Oworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgbmFtZVBhZ2VzW10gPSB7CisweDE5LCAweDAzLCAweDFBLCAweDFC
LCAweDFDLCAweDFELCAweDFFLCAweDAwLAorMHgwMCwgMHgxRiwgMHgyMCwgMHgyMSwgMHgyMiwg
MHgyMywgMHgyNCwgMHgyNSwKKzB4MTAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEz
LAorMHgyNiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDI3LCAweDE2LCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAxLCAweDAxLAorMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwKKzB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisweDAx
LCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKzB4MDEsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAx
LCAweDAxLCAweDAxLCAweDAxLAorMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwKKzB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4
MDEsCisweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgxNywKKzB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwKKzB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsCisweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAxLAorMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKzB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MTgsCisweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi91dGY4dGFiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi91dGY4dGFiLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2JiM2U3NzYwM2ZhNzU3YTBiMjEwYjg1Mzg1OTYzOTJhNmRkYzI1NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvZXhwYXQvZmlsZXMvbGliL3V0Zjh0YWIuaApAQCAtMCwwICsxLDM3IEBACisvKiBDb3B5
cmlnaHQgKGMpIDE5OTgsIDE5OTkgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRk
CisgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgorKi8KKwor
CisvKiAweDgwICovIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLAorLyog
MHg4NCAqLyBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwKKy8qIDB4ODgg
Ki8gQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsCisvKiAweDhDICovIEJU
X1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLAorLyogMHg5MCAqLyBCVF9UUkFJ
TCwgQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwKKy8qIDB4OTQgKi8gQlRfVFJBSUwsIEJU
X1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsCisvKiAweDk4ICovIEJUX1RSQUlMLCBCVF9UUkFJ
TCwgQlRfVFJBSUwsIEJUX1RSQUlMLAorLyogMHg5QyAqLyBCVF9UUkFJTCwgQlRfVFJBSUwsIEJU
X1RSQUlMLCBCVF9UUkFJTCwKKy8qIDB4QTAgKi8gQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJ
TCwgQlRfVFJBSUwsCisvKiAweEE0ICovIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsIEJU
X1RSQUlMLAorLyogMHhBOCAqLyBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJ
TCwKKy8qIDB4QUMgKi8gQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsCisv
KiAweEIwICovIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLAorLyogMHhC
NCAqLyBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwKKy8qIDB4QjggKi8g
QlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsCisvKiAweEJDICovIEJUX1RS
QUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLAorLyogMHhDMCAqLyBCVF9MRUFEMiwg
QlRfTEVBRDIsIEJUX0xFQUQyLCBCVF9MRUFEMiwKKy8qIDB4QzQgKi8gQlRfTEVBRDIsIEJUX0xF
QUQyLCBCVF9MRUFEMiwgQlRfTEVBRDIsCisvKiAweEM4ICovIEJUX0xFQUQyLCBCVF9MRUFEMiwg
QlRfTEVBRDIsIEJUX0xFQUQyLAorLyogMHhDQyAqLyBCVF9MRUFEMiwgQlRfTEVBRDIsIEJUX0xF
QUQyLCBCVF9MRUFEMiwKKy8qIDB4RDAgKi8gQlRfTEVBRDIsIEJUX0xFQUQyLCBCVF9MRUFEMiwg
QlRfTEVBRDIsCisvKiAweEQ0ICovIEJUX0xFQUQyLCBCVF9MRUFEMiwgQlRfTEVBRDIsIEJUX0xF
QUQyLAorLyogMHhEOCAqLyBCVF9MRUFEMiwgQlRfTEVBRDIsIEJUX0xFQUQyLCBCVF9MRUFEMiwK
Ky8qIDB4REMgKi8gQlRfTEVBRDIsIEJUX0xFQUQyLCBCVF9MRUFEMiwgQlRfTEVBRDIsCisvKiAw
eEUwICovIEJUX0xFQUQzLCBCVF9MRUFEMywgQlRfTEVBRDMsIEJUX0xFQUQzLAorLyogMHhFNCAq
LyBCVF9MRUFEMywgQlRfTEVBRDMsIEJUX0xFQUQzLCBCVF9MRUFEMywKKy8qIDB4RTggKi8gQlRf
TEVBRDMsIEJUX0xFQUQzLCBCVF9MRUFEMywgQlRfTEVBRDMsCisvKiAweEVDICovIEJUX0xFQUQz
LCBCVF9MRUFEMywgQlRfTEVBRDMsIEJUX0xFQUQzLAorLyogMHhGMCAqLyBCVF9MRUFENCwgQlRf
TEVBRDQsIEJUX0xFQUQ0LCBCVF9MRUFENCwKKy8qIDB4RjQgKi8gQlRfTEVBRDQsIEJUX05PTlhN
TCwgQlRfTk9OWE1MLCBCVF9OT05YTUwsCisvKiAweEY4ICovIEJUX05PTlhNTCwgQlRfTk9OWE1M
LCBCVF9OT05YTUwsIEJUX05PTlhNTCwKKy8qIDB4RkMgKi8gQlRfTk9OWE1MLCBCVF9OT05YTUws
IEJUX01BTEZPUk0sIEJUX01BTEZPUk0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi93aW5jb25maWcuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmls
ZXMvbGliL3dpbmNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmMTZiYTViOWNmNDYyNzZiZTMzMjJiMTM3
YjZhMDU5NzhlOGY5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi93aW5jb25maWcuaApAQCAt
MCwwICsxLDMyIEBACisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKyoqIENvcHlyaWdodCAyMDAwLCBDbGFyayBDb29wZXIK
KyoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKgorKiogVGhpcyBpcyBmcmVlIHNvZnR3YXJlLiBZ
b3UgYXJlIHBlcm1pdHRlZCB0byBjb3B5LCBkaXN0cmlidXRlLCBvciBtb2RpZnkKKyoqIGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUL1ggbGljZW5zZSAoY29udGFpbmVkIGluIHRoZSBDT1BZ
SU5HIGZpbGUKKyoqIHdpdGggdGhpcyBkaXN0cmlidXRpb24uKQorKi8KKworI2lmbmRlZiBXSU5D
T05GSUdfSAorI2RlZmluZSBXSU5DT05GSUdfSAorCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01F
QU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93
cy5oPgorI3VuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKworI2luY2x1ZGUgPG1lbW9yeS5oPgor
I2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIFhNTF9OUyAxCisjZGVmaW5lIFhNTF9EVEQg
MQorI2RlZmluZSBYTUxfQ09OVEVYVF9CWVRFUyAxMDI0CisKKy8qIHdlIHdpbGwgYXNzdW1lIGFs
bCBXaW5kb3dzIHBsYXRmb3JtcyBhcmUgbGl0dGxlIGVuZGlhbiAqLworI2RlZmluZSBCWVRFT1JE
RVIgMTIzNAorCisvKiBXaW5kb3dzIGhhcyBtZW1tb3ZlKCkgYXZhaWxhYmxlLiAqLworI2RlZmlu
ZSBIQVZFX01FTU1PVkUKKworI2VuZGlmIC8qIG5kZWYgV0lOQ09ORklHX0ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQv
ZmlsZXMvbGliL3dpbmNvbmZpZy5oLm9yaWdpbmFsIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvd2luY29uZmlnLmgub3JpZ2lu
YWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzFiNzkxZDYyZDBkMGM5NDY1NmY4ZmYyZjkxMjgyMjIxN2UwYzkwNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3dpbmNvbmZpZy5oLm9yaWdpbmFsCkBAIC0wLDAgKzEs
MzAgQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorKiogQ29weXJpZ2h0IDIwMDAsIENsYXJrIENvb3BlcgorKiogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyoqCisqKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUuIFlvdSBhcmUg
cGVybWl0dGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUsIG9yIG1vZGlmeQorKiogaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBNSVQvWCBsaWNlbnNlIChjb250YWluZWQgaW4gdGhlIENPUFlJTkcgZmls
ZQorKiogd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbi4pCisqLworCisjaWZuZGVmIFdJTkNPTkZJR19I
CisjZGVmaW5lIFdJTkNPTkZJR19ICisKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KKyN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisKKyNpbmNsdWRl
IDxtZW1vcnkuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBYTUxfTlMgMQorI2Rl
ZmluZSBYTUxfRFREIDEKKyNkZWZpbmUgWE1MX0NPTlRFWFRfQllURVMgMTAyNAorCisvKiB3ZSB3
aWxsIGFzc3VtZSBhbGwgV2luZG93cyBwbGF0Zm9ybXMgYXJlIGxpdHRsZSBlbmRpYW4gKi8KKyNk
ZWZpbmUgQllURU9SREVSIDEyMzQKKworLyogV2luZG93cyBoYXMgbWVtbW92ZSgpIGF2YWlsYWJs
ZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1NT1ZFCisKKyNlbmRpZiAvKiBuZGVmIFdJTkNPTkZJR19I
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWxwYXJzZS5jIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1scGFyc2UuYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lZGU3YjViYjY2NzNlZWQzZmVjYmU4MzA1NmRhM2E5MDZjZGFmZTQxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9leHBhdC9maWxlcy9saWIveG1scGFyc2UuYwpAQCAtMCwwICsxLDY0MjIgQEAKKy8qIENvcHly
aWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRl
ciBMdGQKKyAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCisq
LworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAg
ICAgICAgICAgLyogbWVtc2V0KCksIG1lbWNweSgpICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisj
aW5jbHVkZSA8bGltaXRzLmg+ICAgICAgICAgICAgICAgICAgICAgLyogVUlOVF9NQVggKi8KKyNp
bmNsdWRlIDx0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lKCkgKi8KKworI2Rl
ZmluZSBYTUxfQlVJTERJTkdfRVhQQVQgMQorCisjaWZkZWYgQ09NUElMRURfRlJPTV9EU1AKKyNp
bmNsdWRlICJ3aW5jb25maWcuaCIKKyNlbGlmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKKyNpbmNs
dWRlICJtYWNjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19hbWlnYW9zX18pCisjaW5jbHVkZSAi
YW1pZ2Fjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjaW5jbHVkZSAid2F0
Y29tY29uZmlnLmgiCisjZWxpZiBkZWZpbmVkKEhBVkVfRVhQQVRfQ09ORklHX0gpCisjaW5jbHVk
ZSA8ZXhwYXRfY29uZmlnLmg+CisjZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RTUCAqLwor
CisjaW5jbHVkZSAiYXNjaWkuaCIKKyNpbmNsdWRlICJleHBhdC5oIgorCisjaWZkZWYgWE1MX1VO
SUNPREUKKyNkZWZpbmUgWE1MX0VOQ09ERV9NQVggWE1MX1VURjE2X0VOQ09ERV9NQVgKKyNkZWZp
bmUgWG1sQ29udmVydCBYbWxVdGYxNkNvbnZlcnQKKyNkZWZpbmUgWG1sR2V0SW50ZXJuYWxFbmNv
ZGluZyBYbWxHZXRVdGYxNkludGVybmFsRW5jb2RpbmcKKyNkZWZpbmUgWG1sR2V0SW50ZXJuYWxF
bmNvZGluZ05TIFhtbEdldFV0ZjE2SW50ZXJuYWxFbmNvZGluZ05TCisjZGVmaW5lIFhtbEVuY29k
ZSBYbWxVdGYxNkVuY29kZQorLyogVXNpbmcgcG9pbnRlciBzdWJ0cmFjdGlvbiB0byBjb252ZXJ0
IHRvIGludGVnZXIgdHlwZS4gKi8KKyNkZWZpbmUgTVVTVF9DT05WRVJUKGVuYywgcykgKCEoZW5j
KS0+aXNVdGYxNiB8fCAoKChjaGFyICopKHMpIC0gKGNoYXIgKilOVUxMKSAmIDEpKQordHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBJQ0hBUjsKKyNlbHNlCisjZGVmaW5lIFhNTF9FTkNPREVfTUFYIFhN
TF9VVEY4X0VOQ09ERV9NQVgKKyNkZWZpbmUgWG1sQ29udmVydCBYbWxVdGY4Q29udmVydAorI2Rl
ZmluZSBYbWxHZXRJbnRlcm5hbEVuY29kaW5nIFhtbEdldFV0ZjhJbnRlcm5hbEVuY29kaW5nCisj
ZGVmaW5lIFhtbEdldEludGVybmFsRW5jb2RpbmdOUyBYbWxHZXRVdGY4SW50ZXJuYWxFbmNvZGlu
Z05TCisjZGVmaW5lIFhtbEVuY29kZSBYbWxVdGY4RW5jb2RlCisjZGVmaW5lIE1VU1RfQ09OVkVS
VChlbmMsIHMpICghKGVuYyktPmlzVXRmOCkKK3R5cGVkZWYgY2hhciBJQ0hBUjsKKyNlbmRpZgor
CisKKyNpZm5kZWYgWE1MX05TCisKKyNkZWZpbmUgWG1sSW5pdEVuY29kaW5nTlMgWG1sSW5pdEVu
Y29kaW5nCisjZGVmaW5lIFhtbEluaXRVbmtub3duRW5jb2RpbmdOUyBYbWxJbml0VW5rbm93bkVu
Y29kaW5nCisjdW5kZWYgWG1sR2V0SW50ZXJuYWxFbmNvZGluZ05TCisjZGVmaW5lIFhtbEdldElu
dGVybmFsRW5jb2RpbmdOUyBYbWxHZXRJbnRlcm5hbEVuY29kaW5nCisjZGVmaW5lIFhtbFBhcnNl
WG1sRGVjbE5TIFhtbFBhcnNlWG1sRGVjbAorCisjZW5kaWYKKworI2lmZGVmIFhNTF9VTklDT0RF
CisKKyNpZmRlZiBYTUxfVU5JQ09ERV9XQ0hBUl9UCisjZGVmaW5lIFhNTF9UKHgpIChjb25zdCB3
Y2hhcl90KXgKKyNkZWZpbmUgWE1MX0woeCkgTCAjIyB4CisjZWxzZQorI2RlZmluZSBYTUxfVCh4
KSAoY29uc3QgdW5zaWduZWQgc2hvcnQpeAorI2RlZmluZSBYTUxfTCh4KSB4CisjZW5kaWYKKwor
I2Vsc2UKKworI2RlZmluZSBYTUxfVCh4KSB4CisjZGVmaW5lIFhNTF9MKHgpIHgKKworI2VuZGlm
CisKKy8qIFJvdW5kIHVwIG4gdG8gYmUgYSBtdWx0aXBsZSBvZiBzeiwgd2hlcmUgc3ogaXMgYSBw
b3dlciBvZiAyLiAqLworI2RlZmluZSBST1VORF9VUChuLCBzeikgKCgobikgKyAoKHN6KSAtIDEp
KSAmIH4oKHN6KSAtIDEpKQorCisvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtbW92ZSgpIGRv
ZXNuJ3QgZXhpc3QuICovCisjaWZuZGVmIEhBVkVfTUVNTU9WRQorI2lmZGVmIEhBVkVfQkNPUFkK
KyNkZWZpbmUgbWVtbW92ZShkLHMsbCkgYmNvcHkoKHMpLChkKSwobCkpCisjZWxzZQorI2Vycm9y
IG1lbW1vdmUgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBwbGF0Zm9ybSwgbm9yIGlzIGEgc3Vic3Rp
dHV0ZSBhdmFpbGFibGUKKyNlbmRpZiAvKiBIQVZFX0JDT1BZICovCisjZW5kaWYgLyogSEFWRV9N
RU1NT1ZFICovCisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInhtbHRvay5oIgor
I2luY2x1ZGUgInhtbHJvbGUuaCIKKwordHlwZWRlZiBjb25zdCBYTUxfQ2hhciAqS0VZOworCit0
eXBlZGVmIHN0cnVjdCB7CisgIEtFWSBuYW1lOworfSBOQU1FRDsKKwordHlwZWRlZiBzdHJ1Y3Qg
eworICBOQU1FRCAqKnY7CisgIHVuc2lnbmVkIGNoYXIgcG93ZXI7CisgIHNpemVfdCBzaXplOwor
ICBzaXplX3QgdXNlZDsKKyAgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbWVtOwor
fSBIQVNIX1RBQkxFOworCisvKiBCYXNpYyBjaGFyYWN0ZXIgaGFzaCBhbGdvcml0aG0sIHRha2Vu
IGZyb20gUHl0aG9uJ3Mgc3RyaW5nIGhhc2g6CisgICBoID0gaCAqIDEwMDAwMDMgXiBjaGFyYWN0
ZXIsIHRoZSBjb25zdGFudCBiZWluZyBhIHByaW1lIG51bWJlci4KKworKi8KKyNpZmRlZiBYTUxf
VU5JQ09ERQorI2RlZmluZSBDSEFSX0hBU0goaCwgYykgXAorICAoKChoKSAqIDB4RjQyNDMpIF4g
KHVuc2lnbmVkIHNob3J0KShjKSkKKyNlbHNlCisjZGVmaW5lIENIQVJfSEFTSChoLCBjKSBcCisg
ICgoKGgpICogMHhGNDI0MykgXiAodW5zaWduZWQgY2hhcikoYykpCisjZW5kaWYKKworLyogRm9y
IHByb2JpbmcgKGFmdGVyIGEgY29sbGlzaW9uKSB3ZSBuZWVkIGEgc3RlcCBzaXplIHJlbGF0aXZl
IHByaW1lCisgICB0byB0aGUgaGFzaCB0YWJsZSBzaXplLCB3aGljaCBpcyBhIHBvd2VyIG9mIDIu
IFdlIHVzZSBkb3VibGUtaGFzaGluZywKKyAgIHNpbmNlIHdlIGNhbiBjYWxjdWxhdGUgYSBzZWNv
bmQgaGFzaCB2YWx1ZSBjaGVhcGx5IGJ5IHRha2luZyB0aG9zZSBiaXRzCisgICBvZiB0aGUgZmly
c3QgaGFzaCB2YWx1ZSB0aGF0IHdlcmUgZGlzY2FyZGVkIChtYXNrZWQgb3V0KSB3aGVuIHRoZSB0
YWJsZQorICAgaW5kZXggd2FzIGNhbGN1bGF0ZWQ6IGluZGV4ID0gaGFzaCAmIG1hc2ssIHdoZXJl
IG1hc2sgPSB0YWJsZS0+c2l6ZSAtIDEuCisgICBXZSBsaW1pdCB0aGUgbWF4aW11bSBzdGVwIHNp
emUgdG8gdGFibGUtPnNpemUgLyA0IChtYXNrID4+IDIpIGFuZCBtYWtlCisgICBpdCBvZGQsIHNp
bmNlIG9kZCBudW1iZXJzIGFyZSBhbHdheXMgcmVsYXRpdmUgcHJpbWUgdG8gYSBwb3dlciBvZiAy
LgorKi8KKyNkZWZpbmUgU0VDT05EX0hBU0goaGFzaCwgbWFzaywgcG93ZXIpIFwKKyAgKCgoKGhh
c2gpICYgfihtYXNrKSkgPj4gKChwb3dlcikgLSAxKSkgJiAoKG1hc2spID4+IDIpKQorI2RlZmlu
ZSBQUk9CRV9TVEVQKGhhc2gsIG1hc2ssIHBvd2VyKSBcCisgICgodW5zaWduZWQgY2hhcikoKFNF
Q09ORF9IQVNIKGhhc2gsIG1hc2ssIHBvd2VyKSkgfCAxKSkKKwordHlwZWRlZiBzdHJ1Y3Qgewor
ICBOQU1FRCAqKnA7CisgIE5BTUVEICoqZW5kOworfSBIQVNIX1RBQkxFX0lURVI7CisKKyNkZWZp
bmUgSU5JVF9UQUdfQlVGX1NJWkUgMzIgIC8qIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBzaXplb2Yo
WE1MX0NoYXIpICovCisjZGVmaW5lIElOSVRfREFUQV9CVUZfU0laRSAxMDI0CisjZGVmaW5lIElO
SVRfQVRUU19TSVpFIDE2CisjZGVmaW5lIElOSVRfQVRUU19WRVJTSU9OIDB4RkZGRkZGRkYKKyNk
ZWZpbmUgSU5JVF9CTE9DS19TSVpFIDEwMjQKKyNkZWZpbmUgSU5JVF9CVUZGRVJfU0laRSAxMDI0
CisKKyNkZWZpbmUgRVhQQU5EX1NQQVJFIDI0CisKK3R5cGVkZWYgc3RydWN0IGJpbmRpbmcgewor
ICBzdHJ1Y3QgcHJlZml4ICpwcmVmaXg7CisgIHN0cnVjdCBiaW5kaW5nICpuZXh0VGFnQmluZGlu
ZzsKKyAgc3RydWN0IGJpbmRpbmcgKnByZXZQcmVmaXhCaW5kaW5nOworICBjb25zdCBzdHJ1Y3Qg
YXR0cmlidXRlX2lkICphdHRJZDsKKyAgWE1MX0NoYXIgKnVyaTsKKyAgaW50IHVyaUxlbjsKKyAg
aW50IHVyaUFsbG9jOworfSBCSU5ESU5HOworCit0eXBlZGVmIHN0cnVjdCBwcmVmaXggeworICBj
b25zdCBYTUxfQ2hhciAqbmFtZTsKKyAgQklORElORyAqYmluZGluZzsKK30gUFJFRklYOworCit0
eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IFhNTF9DaGFyICpzdHI7CisgIGNvbnN0IFhNTF9DaGFy
ICpsb2NhbFBhcnQ7CisgIGNvbnN0IFhNTF9DaGFyICpwcmVmaXg7CisgIGludCBzdHJMZW47Cisg
IGludCB1cmlMZW47CisgIGludCBwcmVmaXhMZW47Cit9IFRBR19OQU1FOworCisvKiBUQUcgcmVw
cmVzZW50cyBhbiBvcGVuIGVsZW1lbnQuCisgICBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCBpcyBz
dG9yZWQgaW4gYm90aCB0aGUgZG9jdW1lbnQgYW5kIEFQSQorICAgZW5jb2RpbmdzLiAgVGhlIG1l
bW9yeSBidWZmZXIgJ2J1ZicgaXMgYSBzZXBhcmF0ZWx5LWFsbG9jYXRlZAorICAgbWVtb3J5IGFy
ZWEgd2hpY2ggc3RvcmVzIHRoZSBuYW1lLiAgRHVyaW5nIHRoZSBYTUxfUGFyc2UoKS8KKyAgIFhN
TFBhcnNlQnVmZmVyKCkgd2hlbiB0aGUgZWxlbWVudCBpcyBvcGVuLCB0aGUgbWVtb3J5IGZvciB0
aGUgJ3JhdycKKyAgIHZlcnNpb24gb2YgdGhlIG5hbWUgKGluIHRoZSBkb2N1bWVudCBlbmNvZGlu
ZykgaXMgc2hhcmVkIHdpdGggdGhlCisgICBkb2N1bWVudCBidWZmZXIuICBJZiB0aGUgZWxlbWVu
dCBpcyBvcGVuIGFjcm9zcyBjYWxscyB0bworICAgWE1MX1BhcnNlKCkvWE1MX1BhcnNlQnVmZmVy
KCksIHRoZSBidWZmZXIgaXMgcmUtYWxsb2NhdGVkIHRvCisgICBjb250YWluIHRoZSAncmF3JyBu
YW1lIGFzIHdlbGwuCisKKyAgIEEgcGFyc2VyIHJlLXVzZXMgdGhlc2Ugc3RydWN0dXJlcywgbWFp
bnRhaW5pbmcgYSBsaXN0IG9mIGFsbG9jYXRlZAorICAgVEFHIG9iamVjdHMgaW4gYSBmcmVlIGxp
c3QuCisqLwordHlwZWRlZiBzdHJ1Y3QgdGFnIHsKKyAgc3RydWN0IHRhZyAqcGFyZW50OyAgICAg
ICAgICAgLyogcGFyZW50IG9mIHRoaXMgZWxlbWVudCAqLworICBjb25zdCBjaGFyICpyYXdOYW1l
OyAgICAgICAgICAvKiB0YWdOYW1lIGluIHRoZSBvcmlnaW5hbCBlbmNvZGluZyAqLworICBpbnQg
cmF3TmFtZUxlbmd0aDsKKyAgVEFHX05BTUUgbmFtZTsgICAgICAgICAgICAgICAgLyogdGFnTmFt
ZSBpbiB0aGUgQVBJIGVuY29kaW5nICovCisgIGNoYXIgKmJ1ZjsgICAgICAgICAgICAgICAgICAg
IC8qIGJ1ZmZlciBmb3IgbmFtZSBjb21wb25lbnRzICovCisgIGNoYXIgKmJ1ZkVuZDsgICAgICAg
ICAgICAgICAgIC8qIGVuZCBvZiB0aGUgYnVmZmVyICovCisgIEJJTkRJTkcgKmJpbmRpbmdzOwor
fSBUQUc7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgWE1MX0NoYXIgKm5hbWU7CisgIGNv
bnN0IFhNTF9DaGFyICp0ZXh0UHRyOworICBpbnQgdGV4dExlbjsgICAgICAgICAgICAgICAgICAv
KiBsZW5ndGggaW4gWE1MX0NoYXJzICovCisgIGludCBwcm9jZXNzZWQ7ICAgICAgICAgICAgICAg
IC8qICMgb2YgcHJvY2Vzc2VkIGJ5dGVzIC0gd2hlbiBzdXNwZW5kZWQgKi8KKyAgY29uc3QgWE1M
X0NoYXIgKnN5c3RlbUlkOworICBjb25zdCBYTUxfQ2hhciAqYmFzZTsKKyAgY29uc3QgWE1MX0No
YXIgKnB1YmxpY0lkOworICBjb25zdCBYTUxfQ2hhciAqbm90YXRpb247CisgIFhNTF9Cb29sIG9w
ZW47CisgIFhNTF9Cb29sIGlzX3BhcmFtOworICBYTUxfQm9vbCBpc19pbnRlcm5hbDsgLyogdHJ1
ZSBpZiBkZWNsYXJlZCBpbiBpbnRlcm5hbCBzdWJzZXQgb3V0c2lkZSBQRSAqLworfSBFTlRJVFk7
CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgZW51bSBYTUxfQ29udGVudF9UeXBlICAgICAgICAgdHlw
ZTsKKyAgZW51bSBYTUxfQ29udGVudF9RdWFudCAgICAgICAgcXVhbnQ7CisgIGNvbnN0IFhNTF9D
aGFyICogICAgICAgICAgICAgIG5hbWU7CisgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0Y2hpbGQ7CisgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RjaGlsZDsK
KyAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRjbnQ7CisgIGludCAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5leHRzaWI7Cit9IENPTlRFTlRfU0NBRkZPTEQ7CisKKyNkZWZp
bmUgSU5JVF9TQ0FGRk9MRF9FTEVNRU5UUyAzMgorCit0eXBlZGVmIHN0cnVjdCBibG9jayB7Cisg
IHN0cnVjdCBibG9jayAqbmV4dDsKKyAgaW50IHNpemU7CisgIFhNTF9DaGFyIHNbMV07Cit9IEJM
T0NLOworCit0eXBlZGVmIHN0cnVjdCB7CisgIEJMT0NLICpibG9ja3M7CisgIEJMT0NLICpmcmVl
QmxvY2tzOworICBjb25zdCBYTUxfQ2hhciAqZW5kOworICBYTUxfQ2hhciAqcHRyOworICBYTUxf
Q2hhciAqc3RhcnQ7CisgIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1lbTsKK30g
U1RSSU5HX1BPT0w7CisKKy8qIFRoZSBYTUxfQ2hhciBiZWZvcmUgdGhlIG5hbWUgaXMgdXNlZCB0
byBkZXRlcm1pbmUgd2hldGhlcgorICAgYW4gYXR0cmlidXRlIGhhcyBiZWVuIHNwZWNpZmllZC4g
Ki8KK3R5cGVkZWYgc3RydWN0IGF0dHJpYnV0ZV9pZCB7CisgIFhNTF9DaGFyICpuYW1lOworICBQ
UkVGSVggKnByZWZpeDsKKyAgWE1MX0Jvb2wgbWF5YmVUb2tlbml6ZWQ7CisgIFhNTF9Cb29sIHht
bG5zOworfSBBVFRSSUJVVEVfSUQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgQVRUUklC
VVRFX0lEICppZDsKKyAgWE1MX0Jvb2wgaXNDZGF0YTsKKyAgY29uc3QgWE1MX0NoYXIgKnZhbHVl
OworfSBERUZBVUxUX0FUVFJJQlVURTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBs
b25nIHZlcnNpb247CisgIHVuc2lnbmVkIGxvbmcgaGFzaDsKKyAgY29uc3QgWE1MX0NoYXIgKnVy
aU5hbWU7Cit9IE5TX0FUVDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBYTUxfQ2hhciAq
bmFtZTsKKyAgUFJFRklYICpwcmVmaXg7CisgIGNvbnN0IEFUVFJJQlVURV9JRCAqaWRBdHQ7Cisg
IGludCBuRGVmYXVsdEF0dHM7CisgIGludCBhbGxvY0RlZmF1bHRBdHRzOworICBERUZBVUxUX0FU
VFJJQlVURSAqZGVmYXVsdEF0dHM7Cit9IEVMRU1FTlRfVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3Qg
eworICBIQVNIX1RBQkxFIGdlbmVyYWxFbnRpdGllczsKKyAgSEFTSF9UQUJMRSBlbGVtZW50VHlw
ZXM7CisgIEhBU0hfVEFCTEUgYXR0cmlidXRlSWRzOworICBIQVNIX1RBQkxFIHByZWZpeGVzOwor
ICBTVFJJTkdfUE9PTCBwb29sOworICBTVFJJTkdfUE9PTCBlbnRpdHlWYWx1ZVBvb2w7CisgIC8q
IGZhbHNlIG9uY2UgYSBwYXJhbWV0ZXIgZW50aXR5IHJlZmVyZW5jZSBoYXMgYmVlbiBza2lwcGVk
ICovCisgIFhNTF9Cb29sIGtlZXBQcm9jZXNzaW5nOworICAvKiB0cnVlIG9uY2UgYW4gaW50ZXJu
YWwgb3IgZXh0ZXJuYWwgUEUgcmVmZXJlbmNlIGhhcyBiZWVuIGVuY291bnRlcmVkOworICAgICB0
aGlzIGluY2x1ZGVzIHRoZSByZWZlcmVuY2UgdG8gYW4gZXh0ZXJuYWwgc3Vic2V0ICovCisgIFhN
TF9Cb29sIGhhc1BhcmFtRW50aXR5UmVmczsKKyAgWE1MX0Jvb2wgc3RhbmRhbG9uZTsKKyNpZmRl
ZiBYTUxfRFRECisgIC8qIGluZGljYXRlcyBpZiBleHRlcm5hbCBQRSBoYXMgYmVlbiByZWFkICov
CisgIFhNTF9Cb29sIHBhcmFtRW50aXR5UmVhZDsKKyAgSEFTSF9UQUJMRSBwYXJhbUVudGl0aWVz
OworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgUFJFRklYIGRlZmF1bHRQcmVmaXg7CisgIC8qID09
PSBzY2FmZm9sZGluZyBmb3IgYnVpbGRpbmcgY29udGVudCBtb2RlbCA9PT0gKi8KKyAgWE1MX0Jv
b2wgaW5fZWxkZWNsOworICBDT05URU5UX1NDQUZGT0xEICpzY2FmZm9sZDsKKyAgdW5zaWduZWQg
Y29udGVudFN0cmluZ0xlbjsKKyAgdW5zaWduZWQgc2NhZmZTaXplOworICB1bnNpZ25lZCBzY2Fm
ZkNvdW50OworICBpbnQgc2NhZmZMZXZlbDsKKyAgaW50ICpzY2FmZkluZGV4OworfSBEVEQ7CisK
K3R5cGVkZWYgc3RydWN0IG9wZW5faW50ZXJuYWxfZW50aXR5IHsKKyAgY29uc3QgY2hhciAqaW50
ZXJuYWxFdmVudFB0cjsKKyAgY29uc3QgY2hhciAqaW50ZXJuYWxFdmVudEVuZFB0cjsKKyAgc3Ry
dWN0IG9wZW5faW50ZXJuYWxfZW50aXR5ICpuZXh0OworICBFTlRJVFkgKmVudGl0eTsKKyAgaW50
IHN0YXJ0VGFnTGV2ZWw7CisgIFhNTF9Cb29sIGJldHdlZW5EZWNsOyAvKiBXRkM6IFBFIEJldHdl
ZW4gRGVjbGFyYXRpb25zICovCit9IE9QRU5fSU5URVJOQUxfRU5USVRZOworCit0eXBlZGVmIGVu
dW0gWE1MX0Vycm9yIFBUUkNBTEwgUHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZW5k
UHRyKTsKKworc3RhdGljIFByb2Nlc3NvciBwcm9sb2dQcm9jZXNzb3I7CitzdGF0aWMgUHJvY2Vz
c29yIHByb2xvZ0luaXRQcm9jZXNzb3I7CitzdGF0aWMgUHJvY2Vzc29yIGNvbnRlbnRQcm9jZXNz
b3I7CitzdGF0aWMgUHJvY2Vzc29yIGNkYXRhU2VjdGlvblByb2Nlc3NvcjsKKyNpZmRlZiBYTUxf
RFRECitzdGF0aWMgUHJvY2Vzc29yIGlnbm9yZVNlY3Rpb25Qcm9jZXNzb3I7CitzdGF0aWMgUHJv
Y2Vzc29yIGV4dGVybmFsUGFyRW50UHJvY2Vzc29yOworc3RhdGljIFByb2Nlc3NvciBleHRlcm5h
bFBhckVudEluaXRQcm9jZXNzb3I7CitzdGF0aWMgUHJvY2Vzc29yIGVudGl0eVZhbHVlUHJvY2Vz
c29yOworc3RhdGljIFByb2Nlc3NvciBlbnRpdHlWYWx1ZUluaXRQcm9jZXNzb3I7CisjZW5kaWYg
LyogWE1MX0RURCAqLworc3RhdGljIFByb2Nlc3NvciBlcGlsb2dQcm9jZXNzb3I7CitzdGF0aWMg
UHJvY2Vzc29yIGVycm9yUHJvY2Vzc29yOworc3RhdGljIFByb2Nlc3NvciBleHRlcm5hbEVudGl0
eUluaXRQcm9jZXNzb3I7CitzdGF0aWMgUHJvY2Vzc29yIGV4dGVybmFsRW50aXR5SW5pdFByb2Nl
c3NvcjI7CitzdGF0aWMgUHJvY2Vzc29yIGV4dGVybmFsRW50aXR5SW5pdFByb2Nlc3NvcjM7Citz
dGF0aWMgUHJvY2Vzc29yIGV4dGVybmFsRW50aXR5Q29udGVudFByb2Nlc3NvcjsKK3N0YXRpYyBQ
cm9jZXNzb3IgaW50ZXJuYWxFbnRpdHlQcm9jZXNzb3I7CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJv
cgoraGFuZGxlVW5rbm93bkVuY29kaW5nKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBYTUxfQ2hh
ciAqZW5jb2RpbmdOYW1lKTsKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorcHJvY2Vzc1htbERlY2wo
WE1MX1BhcnNlciBwYXJzZXIsIGludCBpc0dlbmVyYWxUZXh0RW50aXR5LAorICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbmV4dCk7CitzdGF0aWMgZW51bSBYTUxfRXJy
b3IKK2luaXRpYWxpemVFbmNvZGluZyhYTUxfUGFyc2VyIHBhcnNlcik7CitzdGF0aWMgZW51bSBY
TUxfRXJyb3IKK2RvUHJvbG9nKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5j
LCBjb25zdCBjaGFyICpzLAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBpbnQgdG9rLCBjb25z
dCBjaGFyICpuZXh0LCBjb25zdCBjaGFyICoqbmV4dFB0ciwKKyAgICAgICAgIFhNTF9Cb29sIGhh
dmVNb3JlKTsKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorcHJvY2Vzc0ludGVybmFsRW50aXR5KFhN
TF9QYXJzZXIgcGFyc2VyLCBFTlRJVFkgKmVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICBY
TUxfQm9vbCBiZXR3ZWVuRGVjbCk7CitzdGF0aWMgZW51bSBYTUxfRXJyb3IKK2RvQ29udGVudChY
TUxfUGFyc2VyIHBhcnNlciwgaW50IHN0YXJ0VGFnTGV2ZWwsIGNvbnN0IEVOQ09ESU5HICplbmMs
CisgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hh
ciAqKmVuZFB0ciwKKyAgICAgICAgICBYTUxfQm9vbCBoYXZlTW9yZSk7CitzdGF0aWMgZW51bSBY
TUxfRXJyb3IKK2RvQ2RhdGFTZWN0aW9uKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElO
RyAqLCBjb25zdCBjaGFyICoqc3RhcnRQdHIsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICpl
bmQsIGNvbnN0IGNoYXIgKipuZXh0UHRyLCBYTUxfQm9vbCBoYXZlTW9yZSk7CisjaWZkZWYgWE1M
X0RURAorc3RhdGljIGVudW0gWE1MX0Vycm9yCitkb0lnbm9yZVNlY3Rpb24oWE1MX1BhcnNlciBw
YXJzZXIsIGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKipzdGFydFB0ciwKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0UHRyLCBYTUxfQm9vbCBo
YXZlTW9yZSk7CisjZW5kaWYgLyogWE1MX0RURCAqLworCitzdGF0aWMgZW51bSBYTUxfRXJyb3IK
K3N0b3JlQXR0cyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hh
ciAqcywKKyAgICAgICAgICBUQUdfTkFNRSAqdGFnTmFtZVB0ciwgQklORElORyAqKmJpbmRpbmdz
UHRyKTsKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorYWRkQmluZGluZyhYTUxfUGFyc2VyIHBhcnNl
ciwgUFJFRklYICpwcmVmaXgsIGNvbnN0IEFUVFJJQlVURV9JRCAqYXR0SWQsCisgICAgICAgICAg
IGNvbnN0IFhNTF9DaGFyICp1cmksIEJJTkRJTkcgKipiaW5kaW5nc1B0cik7CitzdGF0aWMgaW50
CitkZWZpbmVBdHRyaWJ1dGUoRUxFTUVOVF9UWVBFICp0eXBlLCBBVFRSSUJVVEVfSUQgKiwgWE1M
X0Jvb2wgaXNDZGF0YSwKKyAgICAgICAgICAgICAgICBYTUxfQm9vbCBpc0lkLCBjb25zdCBYTUxf
Q2hhciAqZGZsdFZhbHVlLCBYTUxfUGFyc2VyIHBhcnNlcik7CitzdGF0aWMgZW51bSBYTUxfRXJy
b3IKK3N0b3JlQXR0cmlidXRlVmFsdWUoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5H
ICosIFhNTF9Cb29sIGlzQ2RhdGEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqLCBTVFJJTkdfUE9PTCAqKTsKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorYXBw
ZW5kQXR0cmlidXRlVmFsdWUoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5HICosIFhN
TF9Cb29sIGlzQ2RhdGEsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwgU1RSSU5HX1BPT0wgKik7CitzdGF0aWMgQVRUUklCVVRFX0lEICoKK2dldEF0dHJp
YnV0ZUlkKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFy
ICpzdGFydCwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCk7CitzdGF0aWMgaW50Citz
ZXRFbGVtZW50VHlwZVByZWZpeChYTUxfUGFyc2VyIHBhcnNlciwgRUxFTUVOVF9UWVBFICopOwor
c3RhdGljIGVudW0gWE1MX0Vycm9yCitzdG9yZUVudGl0eVZhbHVlKFhNTF9QYXJzZXIgcGFyc2Vy
LCBjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqZW5kKTsKK3N0YXRpYyBpbnQKK3JlcG9ydFByb2Nlc3NpbmdJbnN0cnVj
dGlvbihYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAqZW5kKTsKK3N0
YXRpYyBpbnQKK3JlcG9ydENvbW1lbnQoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5H
ICplbmMsIGNvbnN0IGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQp
Oworc3RhdGljIHZvaWQKK3JlcG9ydERlZmF1bHQoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVO
Q09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICBjb25zdCBjaGFy
ICplbmQpOworCitzdGF0aWMgY29uc3QgWE1MX0NoYXIgKiBnZXRDb250ZXh0KFhNTF9QYXJzZXIg
cGFyc2VyKTsKK3N0YXRpYyBYTUxfQm9vbAorc2V0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlciwg
Y29uc3QgWE1MX0NoYXIgKmNvbnRleHQpOworCitzdGF0aWMgdm9pZCBGQVNUQ0FMTCBub3JtYWxp
emVQdWJsaWNJZChYTUxfQ2hhciAqcyk7CisKK3N0YXRpYyBEVEQgKiBkdGRDcmVhdGUoY29uc3Qg
WE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpOworLyogZG8gbm90IGNhbGwgaWYgcGFyZW50
UGFyc2VyICE9IE5VTEwgKi8KK3N0YXRpYyB2b2lkIGR0ZFJlc2V0KERURCAqcCwgY29uc3QgWE1M
X01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpOworc3RhdGljIHZvaWQKK2R0ZERlc3Ryb3koRFRE
ICpwLCBYTUxfQm9vbCBpc0RvY0VudGl0eSwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0
ZSAqbXMpOworc3RhdGljIGludAorZHRkQ29weShYTUxfUGFyc2VyIG9sZFBhcnNlciwKKyAgICAg
ICAgRFREICpuZXdEdGQsIGNvbnN0IERURCAqb2xkRHRkLCBjb25zdCBYTUxfTWVtb3J5X0hhbmRs
aW5nX1N1aXRlICptcyk7CitzdGF0aWMgaW50Citjb3B5RW50aXR5VGFibGUoWE1MX1BhcnNlciBv
bGRQYXJzZXIsCisgICAgICAgICAgICAgICAgSEFTSF9UQUJMRSAqLCBTVFJJTkdfUE9PTCAqLCBj
b25zdCBIQVNIX1RBQkxFICopOworc3RhdGljIE5BTUVEICoKK2xvb2t1cChYTUxfUGFyc2VyIHBh
cnNlciwgSEFTSF9UQUJMRSAqdGFibGUsIEtFWSBuYW1lLCBzaXplX3QgY3JlYXRlU2l6ZSk7Citz
dGF0aWMgdm9pZCBGQVNUQ0FMTAoraGFzaFRhYmxlSW5pdChIQVNIX1RBQkxFICosIGNvbnN0IFhN
TF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKTsKK3N0YXRpYyB2b2lkIEZBU1RDQUxMIGhhc2hU
YWJsZUNsZWFyKEhBU0hfVEFCTEUgKik7CitzdGF0aWMgdm9pZCBGQVNUQ0FMTCBoYXNoVGFibGVE
ZXN0cm95KEhBU0hfVEFCTEUgKik7CitzdGF0aWMgdm9pZCBGQVNUQ0FMTAoraGFzaFRhYmxlSXRl
ckluaXQoSEFTSF9UQUJMRV9JVEVSICosIGNvbnN0IEhBU0hfVEFCTEUgKik7CitzdGF0aWMgTkFN
RUQgKiBGQVNUQ0FMTCBoYXNoVGFibGVJdGVyTmV4dChIQVNIX1RBQkxFX0lURVIgKik7CisKK3N0
YXRpYyB2b2lkIEZBU1RDQUxMCitwb29sSW5pdChTVFJJTkdfUE9PTCAqLCBjb25zdCBYTUxfTWVt
b3J5X0hhbmRsaW5nX1N1aXRlICptcyk7CitzdGF0aWMgdm9pZCBGQVNUQ0FMTCBwb29sQ2xlYXIo
U1RSSU5HX1BPT0wgKik7CitzdGF0aWMgdm9pZCBGQVNUQ0FMTCBwb29sRGVzdHJveShTVFJJTkdf
UE9PTCAqKTsKK3N0YXRpYyBYTUxfQ2hhciAqCitwb29sQXBwZW5kKFNUUklOR19QT09MICpwb29s
LCBjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNvbnN0
IGNoYXIgKmVuZCk7CitzdGF0aWMgWE1MX0NoYXIgKgorcG9vbFN0b3JlU3RyaW5nKFNUUklOR19Q
T09MICpwb29sLCBjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKnB0ciwgY29uc3QgY2hhciAqZW5kKTsKK3N0YXRpYyBYTUxfQm9vbCBGQVNUQ0FMTCBwb29s
R3JvdyhTVFJJTkdfUE9PTCAqcG9vbCk7CitzdGF0aWMgY29uc3QgWE1MX0NoYXIgKiBGQVNUQ0FM
TAorcG9vbENvcHlTdHJpbmcoU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9DaGFyICpzKTsK
K3N0YXRpYyBjb25zdCBYTUxfQ2hhciAqCitwb29sQ29weVN0cmluZ04oU1RSSU5HX1BPT0wgKnBv
b2wsIGNvbnN0IFhNTF9DaGFyICpzLCBpbnQgbik7CitzdGF0aWMgY29uc3QgWE1MX0NoYXIgKiBG
QVNUQ0FMTAorcG9vbEFwcGVuZFN0cmluZyhTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgWE1MX0No
YXIgKnMpOworCitzdGF0aWMgaW50IEZBU1RDQUxMIG5leHRTY2FmZm9sZFBhcnQoWE1MX1BhcnNl
ciBwYXJzZXIpOworc3RhdGljIFhNTF9Db250ZW50ICogYnVpbGRfbW9kZWwoWE1MX1BhcnNlciBw
YXJzZXIpOworc3RhdGljIEVMRU1FTlRfVFlQRSAqCitnZXRFbGVtZW50VHlwZShYTUxfUGFyc2Vy
IHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnB0ciwgY29uc3QgY2hhciAqZW5kKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2VuZXJhdGVf
aGFzaF9zZWNyZXRfc2FsdCh2b2lkKTsKK3N0YXRpYyBYTUxfQm9vbCBzdGFydFBhcnNpbmcoWE1M
X1BhcnNlciBwYXJzZXIpOworCitzdGF0aWMgWE1MX1BhcnNlcgorcGFyc2VyQ3JlYXRlKGNvbnN0
IFhNTF9DaGFyICplbmNvZGluZ05hbWUsCisgICAgICAgICAgICAgY29uc3QgWE1MX01lbW9yeV9I
YW5kbGluZ19TdWl0ZSAqbWVtc3VpdGUsCisgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5h
bWVTZXAsCisgICAgICAgICAgICAgRFREICpkdGQpOworCitzdGF0aWMgdm9pZAorcGFyc2VySW5p
dChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFtZSk7CisKKyNk
ZWZpbmUgcG9vbFN0YXJ0KHBvb2wpICgocG9vbCktPnN0YXJ0KQorI2RlZmluZSBwb29sRW5kKHBv
b2wpICgocG9vbCktPnB0cikKKyNkZWZpbmUgcG9vbExlbmd0aChwb29sKSAoKHBvb2wpLT5wdHIg
LSAocG9vbCktPnN0YXJ0KQorI2RlZmluZSBwb29sQ2hvcChwb29sKSAoKHZvaWQpLS0ocG9vbC0+
cHRyKSkKKyNkZWZpbmUgcG9vbExhc3RDaGFyKHBvb2wpICgoKHBvb2wpLT5wdHIpWy0xXSkKKyNk
ZWZpbmUgcG9vbERpc2NhcmQocG9vbCkgKChwb29sKS0+cHRyID0gKHBvb2wpLT5zdGFydCkKKyNk
ZWZpbmUgcG9vbEZpbmlzaChwb29sKSAoKHBvb2wpLT5zdGFydCA9IChwb29sKS0+cHRyKQorI2Rl
ZmluZSBwb29sQXBwZW5kQ2hhcihwb29sLCBjKSBcCisgICgoKHBvb2wpLT5wdHIgPT0gKHBvb2wp
LT5lbmQgJiYgIXBvb2xHcm93KHBvb2wpKSBcCisgICA/IDAgXAorICAgOiAoKCooKHBvb2wpLT5w
dHIpKysgPSBjKSwgMSkpCisKK3N0cnVjdCBYTUxfUGFyc2VyU3RydWN0IHsKKyAgLyogVGhlIGZp
cnN0IG1lbWJlciBtdXN0IGJlIHVzZXJEYXRhIHNvIHRoYXQgdGhlIFhNTF9HZXRVc2VyRGF0YQor
ICAgICBtYWNybyB3b3Jrcy4gKi8KKyAgdm9pZCAqbV91c2VyRGF0YTsKKyAgdm9pZCAqbV9oYW5k
bGVyQXJnOworICBjaGFyICptX2J1ZmZlcjsKKyAgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19T
dWl0ZSBtX21lbTsKKyAgLyogZmlyc3QgY2hhcmFjdGVyIHRvIGJlIHBhcnNlZCAqLworICBjb25z
dCBjaGFyICptX2J1ZmZlclB0cjsKKyAgLyogcGFzdCBsYXN0IGNoYXJhY3RlciB0byBiZSBwYXJz
ZWQgKi8KKyAgY2hhciAqbV9idWZmZXJFbmQ7CisgIC8qIGFsbG9jYXRlZCBlbmQgb2YgYnVmZmVy
ICovCisgIGNvbnN0IGNoYXIgKm1fYnVmZmVyTGltOworICBYTUxfSW5kZXggbV9wYXJzZUVuZEJ5
dGVJbmRleDsKKyAgY29uc3QgY2hhciAqbV9wYXJzZUVuZFB0cjsKKyAgWE1MX0NoYXIgKm1fZGF0
YUJ1ZjsKKyAgWE1MX0NoYXIgKm1fZGF0YUJ1ZkVuZDsKKyAgWE1MX1N0YXJ0RWxlbWVudEhhbmRs
ZXIgbV9zdGFydEVsZW1lbnRIYW5kbGVyOworICBYTUxfRW5kRWxlbWVudEhhbmRsZXIgbV9lbmRF
bGVtZW50SGFuZGxlcjsKKyAgWE1MX0NoYXJhY3RlckRhdGFIYW5kbGVyIG1fY2hhcmFjdGVyRGF0
YUhhbmRsZXI7CisgIFhNTF9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyIG1fcHJvY2Vzc2lu
Z0luc3RydWN0aW9uSGFuZGxlcjsKKyAgWE1MX0NvbW1lbnRIYW5kbGVyIG1fY29tbWVudEhhbmRs
ZXI7CisgIFhNTF9TdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgbV9zdGFydENkYXRhU2VjdGlvbkhh
bmRsZXI7CisgIFhNTF9FbmRDZGF0YVNlY3Rpb25IYW5kbGVyIG1fZW5kQ2RhdGFTZWN0aW9uSGFu
ZGxlcjsKKyAgWE1MX0RlZmF1bHRIYW5kbGVyIG1fZGVmYXVsdEhhbmRsZXI7CisgIFhNTF9TdGFy
dERvY3R5cGVEZWNsSGFuZGxlciBtX3N0YXJ0RG9jdHlwZURlY2xIYW5kbGVyOworICBYTUxfRW5k
RG9jdHlwZURlY2xIYW5kbGVyIG1fZW5kRG9jdHlwZURlY2xIYW5kbGVyOworICBYTUxfVW5wYXJz
ZWRFbnRpdHlEZWNsSGFuZGxlciBtX3VucGFyc2VkRW50aXR5RGVjbEhhbmRsZXI7CisgIFhNTF9O
b3RhdGlvbkRlY2xIYW5kbGVyIG1fbm90YXRpb25EZWNsSGFuZGxlcjsKKyAgWE1MX1N0YXJ0TmFt
ZXNwYWNlRGVjbEhhbmRsZXIgbV9zdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyOworICBYTUxfRW5k
TmFtZXNwYWNlRGVjbEhhbmRsZXIgbV9lbmROYW1lc3BhY2VEZWNsSGFuZGxlcjsKKyAgWE1MX05v
dFN0YW5kYWxvbmVIYW5kbGVyIG1fbm90U3RhbmRhbG9uZUhhbmRsZXI7CisgIFhNTF9FeHRlcm5h
bEVudGl0eVJlZkhhbmRsZXIgbV9leHRlcm5hbEVudGl0eVJlZkhhbmRsZXI7CisgIFhNTF9QYXJz
ZXIgbV9leHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmc7CisgIFhNTF9Ta2lwcGVkRW50aXR5SGFu
ZGxlciBtX3NraXBwZWRFbnRpdHlIYW5kbGVyOworICBYTUxfVW5rbm93bkVuY29kaW5nSGFuZGxl
ciBtX3Vua25vd25FbmNvZGluZ0hhbmRsZXI7CisgIFhNTF9FbGVtZW50RGVjbEhhbmRsZXIgbV9l
bGVtZW50RGVjbEhhbmRsZXI7CisgIFhNTF9BdHRsaXN0RGVjbEhhbmRsZXIgbV9hdHRsaXN0RGVj
bEhhbmRsZXI7CisgIFhNTF9FbnRpdHlEZWNsSGFuZGxlciBtX2VudGl0eURlY2xIYW5kbGVyOwor
ICBYTUxfWG1sRGVjbEhhbmRsZXIgbV94bWxEZWNsSGFuZGxlcjsKKyAgY29uc3QgRU5DT0RJTkcg
Km1fZW5jb2Rpbmc7CisgIElOSVRfRU5DT0RJTkcgbV9pbml0RW5jb2Rpbmc7CisgIGNvbnN0IEVO
Q09ESU5HICptX2ludGVybmFsRW5jb2Rpbmc7CisgIGNvbnN0IFhNTF9DaGFyICptX3Byb3RvY29s
RW5jb2RpbmdOYW1lOworICBYTUxfQm9vbCBtX25zOworICBYTUxfQm9vbCBtX25zX3RyaXBsZXRz
OworICB2b2lkICptX3Vua25vd25FbmNvZGluZ01lbTsKKyAgdm9pZCAqbV91bmtub3duRW5jb2Rp
bmdEYXRhOworICB2b2lkICptX3Vua25vd25FbmNvZGluZ0hhbmRsZXJEYXRhOworICB2b2lkIChY
TUxDQUxMICptX3Vua25vd25FbmNvZGluZ1JlbGVhc2UpKHZvaWQgKik7CisgIFBST0xPR19TVEFU
RSBtX3Byb2xvZ1N0YXRlOworICBQcm9jZXNzb3IgKm1fcHJvY2Vzc29yOworICBlbnVtIFhNTF9F
cnJvciBtX2Vycm9yQ29kZTsKKyAgY29uc3QgY2hhciAqbV9ldmVudFB0cjsKKyAgY29uc3QgY2hh
ciAqbV9ldmVudEVuZFB0cjsKKyAgY29uc3QgY2hhciAqbV9wb3NpdGlvblB0cjsKKyAgT1BFTl9J
TlRFUk5BTF9FTlRJVFkgKm1fb3BlbkludGVybmFsRW50aXRpZXM7CisgIE9QRU5fSU5URVJOQUxf
RU5USVRZICptX2ZyZWVJbnRlcm5hbEVudGl0aWVzOworICBYTUxfQm9vbCBtX2RlZmF1bHRFeHBh
bmRJbnRlcm5hbEVudGl0aWVzOworICBpbnQgbV90YWdMZXZlbDsKKyAgRU5USVRZICptX2RlY2xF
bnRpdHk7CisgIGNvbnN0IFhNTF9DaGFyICptX2RvY3R5cGVOYW1lOworICBjb25zdCBYTUxfQ2hh
ciAqbV9kb2N0eXBlU3lzaWQ7CisgIGNvbnN0IFhNTF9DaGFyICptX2RvY3R5cGVQdWJpZDsKKyAg
Y29uc3QgWE1MX0NoYXIgKm1fZGVjbEF0dHJpYnV0ZVR5cGU7CisgIGNvbnN0IFhNTF9DaGFyICpt
X2RlY2xOb3RhdGlvbk5hbWU7CisgIGNvbnN0IFhNTF9DaGFyICptX2RlY2xOb3RhdGlvblB1Ymxp
Y0lkOworICBFTEVNRU5UX1RZUEUgKm1fZGVjbEVsZW1lbnRUeXBlOworICBBVFRSSUJVVEVfSUQg
Km1fZGVjbEF0dHJpYnV0ZUlkOworICBYTUxfQm9vbCBtX2RlY2xBdHRyaWJ1dGVJc0NkYXRhOwor
ICBYTUxfQm9vbCBtX2RlY2xBdHRyaWJ1dGVJc0lkOworICBEVEQgKm1fZHRkOworICBjb25zdCBY
TUxfQ2hhciAqbV9jdXJCYXNlOworICBUQUcgKm1fdGFnU3RhY2s7CisgIFRBRyAqbV9mcmVlVGFn
TGlzdDsKKyAgQklORElORyAqbV9pbmhlcml0ZWRCaW5kaW5nczsKKyAgQklORElORyAqbV9mcmVl
QmluZGluZ0xpc3Q7CisgIGludCBtX2F0dHNTaXplOworICBpbnQgbV9uU3BlY2lmaWVkQXR0czsK
KyAgaW50IG1faWRBdHRJbmRleDsKKyAgQVRUUklCVVRFICptX2F0dHM7CisgIE5TX0FUVCAqbV9u
c0F0dHM7CisgIHVuc2lnbmVkIGxvbmcgbV9uc0F0dHNWZXJzaW9uOworICB1bnNpZ25lZCBjaGFy
IG1fbnNBdHRzUG93ZXI7CisjaWZkZWYgWE1MX0FUVFJfSU5GTworICBYTUxfQXR0ckluZm8gKm1f
YXR0SW5mbzsKKyNlbmRpZgorICBQT1NJVElPTiBtX3Bvc2l0aW9uOworICBTVFJJTkdfUE9PTCBt
X3RlbXBQb29sOworICBTVFJJTkdfUE9PTCBtX3RlbXAyUG9vbDsKKyAgY2hhciAqbV9ncm91cENv
bm5lY3RvcjsKKyAgdW5zaWduZWQgaW50IG1fZ3JvdXBTaXplOworICBYTUxfQ2hhciBtX25hbWVz
cGFjZVNlcGFyYXRvcjsKKyAgWE1MX1BhcnNlciBtX3BhcmVudFBhcnNlcjsKKyAgWE1MX1BhcnNp
bmdTdGF0dXMgbV9wYXJzaW5nU3RhdHVzOworI2lmZGVmIFhNTF9EVEQKKyAgWE1MX0Jvb2wgbV9p
c1BhcmFtRW50aXR5OworICBYTUxfQm9vbCBtX3VzZUZvcmVpZ25EVEQ7CisgIGVudW0gWE1MX1Bh
cmFtRW50aXR5UGFyc2luZyBtX3BhcmFtRW50aXR5UGFyc2luZzsKKyNlbmRpZgorICB1bnNpZ25l
ZCBsb25nIG1faGFzaF9zZWNyZXRfc2FsdDsKK307CisKKyNkZWZpbmUgTUFMTE9DKHMpIChwYXJz
ZXItPm1fbWVtLm1hbGxvY19mY24oKHMpKSkKKyNkZWZpbmUgUkVBTExPQyhwLHMpIChwYXJzZXIt
Pm1fbWVtLnJlYWxsb2NfZmNuKChwKSwocykpKQorI2RlZmluZSBGUkVFKHApIChwYXJzZXItPm1f
bWVtLmZyZWVfZmNuKChwKSkpCisKKyNkZWZpbmUgdXNlckRhdGEgKHBhcnNlci0+bV91c2VyRGF0
YSkKKyNkZWZpbmUgaGFuZGxlckFyZyAocGFyc2VyLT5tX2hhbmRsZXJBcmcpCisjZGVmaW5lIHN0
YXJ0RWxlbWVudEhhbmRsZXIgKHBhcnNlci0+bV9zdGFydEVsZW1lbnRIYW5kbGVyKQorI2RlZmlu
ZSBlbmRFbGVtZW50SGFuZGxlciAocGFyc2VyLT5tX2VuZEVsZW1lbnRIYW5kbGVyKQorI2RlZmlu
ZSBjaGFyYWN0ZXJEYXRhSGFuZGxlciAocGFyc2VyLT5tX2NoYXJhY3RlckRhdGFIYW5kbGVyKQor
I2RlZmluZSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyIFwKKyAgICAgICAgKHBhcnNlci0+
bV9wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKQorI2RlZmluZSBjb21tZW50SGFuZGxlciAo
cGFyc2VyLT5tX2NvbW1lbnRIYW5kbGVyKQorI2RlZmluZSBzdGFydENkYXRhU2VjdGlvbkhhbmRs
ZXIgXAorICAgICAgICAocGFyc2VyLT5tX3N0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlcikKKyNkZWZp
bmUgZW5kQ2RhdGFTZWN0aW9uSGFuZGxlciAocGFyc2VyLT5tX2VuZENkYXRhU2VjdGlvbkhhbmRs
ZXIpCisjZGVmaW5lIGRlZmF1bHRIYW5kbGVyIChwYXJzZXItPm1fZGVmYXVsdEhhbmRsZXIpCisj
ZGVmaW5lIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyIChwYXJzZXItPm1fc3RhcnREb2N0eXBlRGVj
bEhhbmRsZXIpCisjZGVmaW5lIGVuZERvY3R5cGVEZWNsSGFuZGxlciAocGFyc2VyLT5tX2VuZERv
Y3R5cGVEZWNsSGFuZGxlcikKKyNkZWZpbmUgdW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciBcCisg
ICAgICAgIChwYXJzZXItPm1fdW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcikKKyNkZWZpbmUgbm90
YXRpb25EZWNsSGFuZGxlciAocGFyc2VyLT5tX25vdGF0aW9uRGVjbEhhbmRsZXIpCisjZGVmaW5l
IHN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgXAorICAgICAgICAocGFyc2VyLT5tX3N0YXJ0TmFt
ZXNwYWNlRGVjbEhhbmRsZXIpCisjZGVmaW5lIGVuZE5hbWVzcGFjZURlY2xIYW5kbGVyIChwYXJz
ZXItPm1fZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpCisjZGVmaW5lIG5vdFN0YW5kYWxvbmVIYW5k
bGVyIChwYXJzZXItPm1fbm90U3RhbmRhbG9uZUhhbmRsZXIpCisjZGVmaW5lIGV4dGVybmFsRW50
aXR5UmVmSGFuZGxlciBcCisgICAgICAgIChwYXJzZXItPm1fZXh0ZXJuYWxFbnRpdHlSZWZIYW5k
bGVyKQorI2RlZmluZSBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcgXAorICAgICAgICAocGFy
c2VyLT5tX2V4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZykKKyNkZWZpbmUgaW50ZXJuYWxFbnRp
dHlSZWZIYW5kbGVyIFwKKyAgICAgICAgKHBhcnNlci0+bV9pbnRlcm5hbEVudGl0eVJlZkhhbmRs
ZXIpCisjZGVmaW5lIHNraXBwZWRFbnRpdHlIYW5kbGVyIChwYXJzZXItPm1fc2tpcHBlZEVudGl0
eUhhbmRsZXIpCisjZGVmaW5lIHVua25vd25FbmNvZGluZ0hhbmRsZXIgKHBhcnNlci0+bV91bmtu
b3duRW5jb2RpbmdIYW5kbGVyKQorI2RlZmluZSBlbGVtZW50RGVjbEhhbmRsZXIgKHBhcnNlci0+
bV9lbGVtZW50RGVjbEhhbmRsZXIpCisjZGVmaW5lIGF0dGxpc3REZWNsSGFuZGxlciAocGFyc2Vy
LT5tX2F0dGxpc3REZWNsSGFuZGxlcikKKyNkZWZpbmUgZW50aXR5RGVjbEhhbmRsZXIgKHBhcnNl
ci0+bV9lbnRpdHlEZWNsSGFuZGxlcikKKyNkZWZpbmUgeG1sRGVjbEhhbmRsZXIgKHBhcnNlci0+
bV94bWxEZWNsSGFuZGxlcikKKyNkZWZpbmUgZW5jb2RpbmcgKHBhcnNlci0+bV9lbmNvZGluZykK
KyNkZWZpbmUgaW5pdEVuY29kaW5nIChwYXJzZXItPm1faW5pdEVuY29kaW5nKQorI2RlZmluZSBp
bnRlcm5hbEVuY29kaW5nIChwYXJzZXItPm1faW50ZXJuYWxFbmNvZGluZykKKyNkZWZpbmUgdW5r
bm93bkVuY29kaW5nTWVtIChwYXJzZXItPm1fdW5rbm93bkVuY29kaW5nTWVtKQorI2RlZmluZSB1
bmtub3duRW5jb2RpbmdEYXRhIChwYXJzZXItPm1fdW5rbm93bkVuY29kaW5nRGF0YSkKKyNkZWZp
bmUgdW5rbm93bkVuY29kaW5nSGFuZGxlckRhdGEgXAorICAocGFyc2VyLT5tX3Vua25vd25FbmNv
ZGluZ0hhbmRsZXJEYXRhKQorI2RlZmluZSB1bmtub3duRW5jb2RpbmdSZWxlYXNlIChwYXJzZXIt
Pm1fdW5rbm93bkVuY29kaW5nUmVsZWFzZSkKKyNkZWZpbmUgcHJvdG9jb2xFbmNvZGluZ05hbWUg
KHBhcnNlci0+bV9wcm90b2NvbEVuY29kaW5nTmFtZSkKKyNkZWZpbmUgbnMgKHBhcnNlci0+bV9u
cykKKyNkZWZpbmUgbnNfdHJpcGxldHMgKHBhcnNlci0+bV9uc190cmlwbGV0cykKKyNkZWZpbmUg
cHJvbG9nU3RhdGUgKHBhcnNlci0+bV9wcm9sb2dTdGF0ZSkKKyNkZWZpbmUgcHJvY2Vzc29yIChw
YXJzZXItPm1fcHJvY2Vzc29yKQorI2RlZmluZSBlcnJvckNvZGUgKHBhcnNlci0+bV9lcnJvckNv
ZGUpCisjZGVmaW5lIGV2ZW50UHRyIChwYXJzZXItPm1fZXZlbnRQdHIpCisjZGVmaW5lIGV2ZW50
RW5kUHRyIChwYXJzZXItPm1fZXZlbnRFbmRQdHIpCisjZGVmaW5lIHBvc2l0aW9uUHRyIChwYXJz
ZXItPm1fcG9zaXRpb25QdHIpCisjZGVmaW5lIHBvc2l0aW9uIChwYXJzZXItPm1fcG9zaXRpb24p
CisjZGVmaW5lIG9wZW5JbnRlcm5hbEVudGl0aWVzIChwYXJzZXItPm1fb3BlbkludGVybmFsRW50
aXRpZXMpCisjZGVmaW5lIGZyZWVJbnRlcm5hbEVudGl0aWVzIChwYXJzZXItPm1fZnJlZUludGVy
bmFsRW50aXRpZXMpCisjZGVmaW5lIGRlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzIFwKKyAg
ICAgICAgKHBhcnNlci0+bV9kZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllcykKKyNkZWZpbmUg
dGFnTGV2ZWwgKHBhcnNlci0+bV90YWdMZXZlbCkKKyNkZWZpbmUgYnVmZmVyIChwYXJzZXItPm1f
YnVmZmVyKQorI2RlZmluZSBidWZmZXJQdHIgKHBhcnNlci0+bV9idWZmZXJQdHIpCisjZGVmaW5l
IGJ1ZmZlckVuZCAocGFyc2VyLT5tX2J1ZmZlckVuZCkKKyNkZWZpbmUgcGFyc2VFbmRCeXRlSW5k
ZXggKHBhcnNlci0+bV9wYXJzZUVuZEJ5dGVJbmRleCkKKyNkZWZpbmUgcGFyc2VFbmRQdHIgKHBh
cnNlci0+bV9wYXJzZUVuZFB0cikKKyNkZWZpbmUgYnVmZmVyTGltIChwYXJzZXItPm1fYnVmZmVy
TGltKQorI2RlZmluZSBkYXRhQnVmIChwYXJzZXItPm1fZGF0YUJ1ZikKKyNkZWZpbmUgZGF0YUJ1
ZkVuZCAocGFyc2VyLT5tX2RhdGFCdWZFbmQpCisjZGVmaW5lIF9kdGQgKHBhcnNlci0+bV9kdGQp
CisjZGVmaW5lIGN1ckJhc2UgKHBhcnNlci0+bV9jdXJCYXNlKQorI2RlZmluZSBkZWNsRW50aXR5
IChwYXJzZXItPm1fZGVjbEVudGl0eSkKKyNkZWZpbmUgZG9jdHlwZU5hbWUgKHBhcnNlci0+bV9k
b2N0eXBlTmFtZSkKKyNkZWZpbmUgZG9jdHlwZVN5c2lkIChwYXJzZXItPm1fZG9jdHlwZVN5c2lk
KQorI2RlZmluZSBkb2N0eXBlUHViaWQgKHBhcnNlci0+bV9kb2N0eXBlUHViaWQpCisjZGVmaW5l
IGRlY2xBdHRyaWJ1dGVUeXBlIChwYXJzZXItPm1fZGVjbEF0dHJpYnV0ZVR5cGUpCisjZGVmaW5l
IGRlY2xOb3RhdGlvbk5hbWUgKHBhcnNlci0+bV9kZWNsTm90YXRpb25OYW1lKQorI2RlZmluZSBk
ZWNsTm90YXRpb25QdWJsaWNJZCAocGFyc2VyLT5tX2RlY2xOb3RhdGlvblB1YmxpY0lkKQorI2Rl
ZmluZSBkZWNsRWxlbWVudFR5cGUgKHBhcnNlci0+bV9kZWNsRWxlbWVudFR5cGUpCisjZGVmaW5l
IGRlY2xBdHRyaWJ1dGVJZCAocGFyc2VyLT5tX2RlY2xBdHRyaWJ1dGVJZCkKKyNkZWZpbmUgZGVj
bEF0dHJpYnV0ZUlzQ2RhdGEgKHBhcnNlci0+bV9kZWNsQXR0cmlidXRlSXNDZGF0YSkKKyNkZWZp
bmUgZGVjbEF0dHJpYnV0ZUlzSWQgKHBhcnNlci0+bV9kZWNsQXR0cmlidXRlSXNJZCkKKyNkZWZp
bmUgZnJlZVRhZ0xpc3QgKHBhcnNlci0+bV9mcmVlVGFnTGlzdCkKKyNkZWZpbmUgZnJlZUJpbmRp
bmdMaXN0IChwYXJzZXItPm1fZnJlZUJpbmRpbmdMaXN0KQorI2RlZmluZSBpbmhlcml0ZWRCaW5k
aW5ncyAocGFyc2VyLT5tX2luaGVyaXRlZEJpbmRpbmdzKQorI2RlZmluZSB0YWdTdGFjayAocGFy
c2VyLT5tX3RhZ1N0YWNrKQorI2RlZmluZSBhdHRzIChwYXJzZXItPm1fYXR0cykKKyNkZWZpbmUg
YXR0c1NpemUgKHBhcnNlci0+bV9hdHRzU2l6ZSkKKyNkZWZpbmUgblNwZWNpZmllZEF0dHMgKHBh
cnNlci0+bV9uU3BlY2lmaWVkQXR0cykKKyNkZWZpbmUgaWRBdHRJbmRleCAocGFyc2VyLT5tX2lk
QXR0SW5kZXgpCisjZGVmaW5lIG5zQXR0cyAocGFyc2VyLT5tX25zQXR0cykKKyNkZWZpbmUgbnNB
dHRzVmVyc2lvbiAocGFyc2VyLT5tX25zQXR0c1ZlcnNpb24pCisjZGVmaW5lIG5zQXR0c1Bvd2Vy
IChwYXJzZXItPm1fbnNBdHRzUG93ZXIpCisjZGVmaW5lIGF0dEluZm8gKHBhcnNlci0+bV9hdHRJ
bmZvKQorI2RlZmluZSB0ZW1wUG9vbCAocGFyc2VyLT5tX3RlbXBQb29sKQorI2RlZmluZSB0ZW1w
MlBvb2wgKHBhcnNlci0+bV90ZW1wMlBvb2wpCisjZGVmaW5lIGdyb3VwQ29ubmVjdG9yIChwYXJz
ZXItPm1fZ3JvdXBDb25uZWN0b3IpCisjZGVmaW5lIGdyb3VwU2l6ZSAocGFyc2VyLT5tX2dyb3Vw
U2l6ZSkKKyNkZWZpbmUgbmFtZXNwYWNlU2VwYXJhdG9yIChwYXJzZXItPm1fbmFtZXNwYWNlU2Vw
YXJhdG9yKQorI2RlZmluZSBwYXJlbnRQYXJzZXIgKHBhcnNlci0+bV9wYXJlbnRQYXJzZXIpCisj
ZGVmaW5lIHBzX3BhcnNpbmcgKHBhcnNlci0+bV9wYXJzaW5nU3RhdHVzLnBhcnNpbmcpCisjZGVm
aW5lIHBzX2ZpbmFsQnVmZmVyIChwYXJzZXItPm1fcGFyc2luZ1N0YXR1cy5maW5hbEJ1ZmZlcikK
KyNpZmRlZiBYTUxfRFRECisjZGVmaW5lIGlzUGFyYW1FbnRpdHkgKHBhcnNlci0+bV9pc1BhcmFt
RW50aXR5KQorI2RlZmluZSB1c2VGb3JlaWduRFREIChwYXJzZXItPm1fdXNlRm9yZWlnbkRURCkK
KyNkZWZpbmUgcGFyYW1FbnRpdHlQYXJzaW5nIChwYXJzZXItPm1fcGFyYW1FbnRpdHlQYXJzaW5n
KQorI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyNkZWZpbmUgaGFzaF9zZWNyZXRfc2FsdCAocGFyc2Vy
LT5tX2hhc2hfc2VjcmV0X3NhbHQpCisKK1hNTF9QYXJzZXIgWE1MQ0FMTAorWE1MX1BhcnNlckNy
ZWF0ZShjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lKQoreworICByZXR1cm4gWE1MX1BhcnNl
ckNyZWF0ZV9NTShlbmNvZGluZ05hbWUsIE5VTEwsIE5VTEwpOworfQorCitYTUxfUGFyc2VyIFhN
TENBTEwKK1hNTF9QYXJzZXJDcmVhdGVOUyhjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lLCBY
TUxfQ2hhciBuc1NlcCkKK3sKKyAgWE1MX0NoYXIgdG1wWzJdOworICAqdG1wID0gbnNTZXA7Cisg
IHJldHVybiBYTUxfUGFyc2VyQ3JlYXRlX01NKGVuY29kaW5nTmFtZSwgTlVMTCwgdG1wKTsKK30K
Kworc3RhdGljIGNvbnN0IFhNTF9DaGFyIGltcGxpY2l0Q29udGV4dFtdID0geworICBBU0NJSV94
LCBBU0NJSV9tLCBBU0NJSV9sLCBBU0NJSV9FUVVBTFMsIEFTQ0lJX2gsIEFTQ0lJX3QsIEFTQ0lJ
X3QsIEFTQ0lJX3AsCisgIEFTQ0lJX0NPTE9OLCBBU0NJSV9TTEFTSCwgQVNDSUlfU0xBU0gsIEFT
Q0lJX3csIEFTQ0lJX3csIEFTQ0lJX3csCisgIEFTQ0lJX1BFUklPRCwgQVNDSUlfdywgQVNDSUlf
MywgQVNDSUlfUEVSSU9ELCBBU0NJSV9vLCBBU0NJSV9yLCBBU0NJSV9nLAorICBBU0NJSV9TTEFT
SCwgQVNDSUlfWCwgQVNDSUlfTSwgQVNDSUlfTCwgQVNDSUlfU0xBU0gsIEFTQ0lJXzEsIEFTQ0lJ
XzksCisgIEFTQ0lJXzksIEFTQ0lJXzgsIEFTQ0lJX1NMQVNILCBBU0NJSV9uLCBBU0NJSV9hLCBB
U0NJSV9tLCBBU0NJSV9lLAorICBBU0NJSV9zLCBBU0NJSV9wLCBBU0NJSV9hLCBBU0NJSV9jLCBB
U0NJSV9lLCAnXDAnCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZworZ2VuZXJhdGVfaGFzaF9z
ZWNyZXRfc2FsdCh2b2lkKQoreworICB1bnNpZ25lZCBpbnQgc2VlZCA9IHRpbWUoTlVMTCkgJSBV
SU5UX01BWDsKKyAgc3JhbmQoc2VlZCk7CisgIHJldHVybiByYW5kKCk7Cit9CisKK3N0YXRpYyBY
TUxfQm9vbCAgLyogb25seSB2YWxpZCBmb3Igcm9vdCBwYXJzZXIgKi8KK3N0YXJ0UGFyc2luZyhY
TUxfUGFyc2VyIHBhcnNlcikKK3sKKyAgICAvKiBoYXNoIGZ1bmN0aW9ucyBtdXN0IGJlIGluaXRp
YWxpemVkIGJlZm9yZSBzZXRDb250ZXh0KCkgaXMgY2FsbGVkICovCisgICAgaWYgKGhhc2hfc2Vj
cmV0X3NhbHQgPT0gMCkKKyAgICAgIGhhc2hfc2VjcmV0X3NhbHQgPSBnZW5lcmF0ZV9oYXNoX3Nl
Y3JldF9zYWx0KCk7CisgICAgaWYgKG5zKSB7CisgICAgICAvKiBpbXBsaWNpdCBjb250ZXh0IG9u
bHkgc2V0IGZvciByb290IHBhcnNlciwgc2luY2UgY2hpbGQKKyAgICAgICAgIHBhcnNlcnMgKGku
ZS4gZXh0ZXJuYWwgZW50aXR5IHBhcnNlcnMpIHdpbGwgaW5oZXJpdCBpdAorICAgICAgKi8KKyAg
ICAgIHJldHVybiBzZXRDb250ZXh0KHBhcnNlciwgaW1wbGljaXRDb250ZXh0KTsKKyAgICB9Cisg
ICAgcmV0dXJuIFhNTF9UUlVFOworfQorCitYTUxfUGFyc2VyIFhNTENBTEwKK1hNTF9QYXJzZXJD
cmVhdGVfTU0oY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbWVtc3VpdGUsCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lU2VwKQoreworICByZXR1cm4gcGFyc2VyQ3Jl
YXRlKGVuY29kaW5nTmFtZSwgbWVtc3VpdGUsIG5hbWVTZXAsIE5VTEwpOworfQorCitzdGF0aWMg
WE1MX1BhcnNlcgorcGFyc2VyQ3JlYXRlKGNvbnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUsCisg
ICAgICAgICAgICAgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbWVtc3VpdGUsCisg
ICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWVTZXAsCisgICAgICAgICAgICAgRFREICpk
dGQpCit7CisgIFhNTF9QYXJzZXIgcGFyc2VyOworCisgIGlmIChtZW1zdWl0ZSkgeworICAgIFhN
TF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm10ZW1wOworICAgIHBhcnNlciA9IChYTUxfUGFyc2Vy
KQorICAgICAgbWVtc3VpdGUtPm1hbGxvY19mY24oc2l6ZW9mKHN0cnVjdCBYTUxfUGFyc2VyU3Ry
dWN0KSk7CisgICAgaWYgKHBhcnNlciAhPSBOVUxMKSB7CisgICAgICBtdGVtcCA9IChYTUxfTWVt
b3J5X0hhbmRsaW5nX1N1aXRlICopJihwYXJzZXItPm1fbWVtKTsKKyAgICAgIG10ZW1wLT5tYWxs
b2NfZmNuID0gbWVtc3VpdGUtPm1hbGxvY19mY247CisgICAgICBtdGVtcC0+cmVhbGxvY19mY24g
PSBtZW1zdWl0ZS0+cmVhbGxvY19mY247CisgICAgICBtdGVtcC0+ZnJlZV9mY24gPSBtZW1zdWl0
ZS0+ZnJlZV9mY247CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFhNTF9NZW1vcnlfSGFuZGxp
bmdfU3VpdGUgKm10ZW1wOworICAgIHBhcnNlciA9IChYTUxfUGFyc2VyKW1hbGxvYyhzaXplb2Yo
c3RydWN0IFhNTF9QYXJzZXJTdHJ1Y3QpKTsKKyAgICBpZiAocGFyc2VyICE9IE5VTEwpIHsKKyAg
ICAgIG10ZW1wID0gKFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKikmKHBhcnNlci0+bV9tZW0p
OworICAgICAgbXRlbXAtPm1hbGxvY19mY24gPSBtYWxsb2M7CisgICAgICBtdGVtcC0+cmVhbGxv
Y19mY24gPSByZWFsbG9jOworICAgICAgbXRlbXAtPmZyZWVfZmNuID0gZnJlZTsKKyAgICB9Cisg
IH0KKworICBpZiAoIXBhcnNlcikKKyAgICByZXR1cm4gcGFyc2VyOworCisgIGJ1ZmZlciA9IE5V
TEw7CisgIGJ1ZmZlckxpbSA9IE5VTEw7CisKKyAgYXR0c1NpemUgPSBJTklUX0FUVFNfU0laRTsK
KyAgYXR0cyA9IChBVFRSSUJVVEUgKilNQUxMT0MoYXR0c1NpemUgKiBzaXplb2YoQVRUUklCVVRF
KSk7CisgIGlmIChhdHRzID09IE5VTEwpIHsKKyAgICBGUkVFKHBhcnNlcik7CisgICAgcmV0dXJu
IE5VTEw7CisgIH0KKyNpZmRlZiBYTUxfQVRUUl9JTkZPCisgIGF0dEluZm8gPSAoWE1MX0F0dHJJ
bmZvKilNQUxMT0MoYXR0c1NpemUgKiBzaXplb2YoWE1MX0F0dHJJbmZvKSk7CisgIGlmIChhdHRJ
bmZvID09IE5VTEwpIHsKKyAgICBGUkVFKGF0dHMpOworICAgIEZSRUUocGFyc2VyKTsKKyAgICBy
ZXR1cm4gTlVMTDsKKyAgfQorI2VuZGlmCisgIGRhdGFCdWYgPSAoWE1MX0NoYXIgKilNQUxMT0Mo
SU5JVF9EQVRBX0JVRl9TSVpFICogc2l6ZW9mKFhNTF9DaGFyKSk7CisgIGlmIChkYXRhQnVmID09
IE5VTEwpIHsKKyAgICBGUkVFKGF0dHMpOworI2lmZGVmIFhNTF9BVFRSX0lORk8KKyAgICBGUkVF
KGF0dEluZm8pOworI2VuZGlmCisgICAgRlJFRShwYXJzZXIpOworICAgIHJldHVybiBOVUxMOwor
ICB9CisgIGRhdGFCdWZFbmQgPSBkYXRhQnVmICsgSU5JVF9EQVRBX0JVRl9TSVpFOworCisgIGlm
IChkdGQpCisgICAgX2R0ZCA9IGR0ZDsKKyAgZWxzZSB7CisgICAgX2R0ZCA9IGR0ZENyZWF0ZSgm
cGFyc2VyLT5tX21lbSk7CisgICAgaWYgKF9kdGQgPT0gTlVMTCkgeworICAgICAgRlJFRShkYXRh
QnVmKTsKKyAgICAgIEZSRUUoYXR0cyk7CisjaWZkZWYgWE1MX0FUVFJfSU5GTworICAgICAgRlJF
RShhdHRJbmZvKTsKKyNlbmRpZgorICAgICAgRlJFRShwYXJzZXIpOworICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorICB9CisKKyAgZnJlZUJpbmRpbmdMaXN0ID0gTlVMTDsKKyAgZnJlZVRhZ0xp
c3QgPSBOVUxMOworICBmcmVlSW50ZXJuYWxFbnRpdGllcyA9IE5VTEw7CisKKyAgZ3JvdXBTaXpl
ID0gMDsKKyAgZ3JvdXBDb25uZWN0b3IgPSBOVUxMOworCisgIHVua25vd25FbmNvZGluZ0hhbmRs
ZXIgPSBOVUxMOworICB1bmtub3duRW5jb2RpbmdIYW5kbGVyRGF0YSA9IE5VTEw7CisKKyAgbmFt
ZXNwYWNlU2VwYXJhdG9yID0gQVNDSUlfRVhDTDsKKyAgbnMgPSBYTUxfRkFMU0U7CisgIG5zX3Ry
aXBsZXRzID0gWE1MX0ZBTFNFOworCisgIG5zQXR0cyA9IE5VTEw7CisgIG5zQXR0c1ZlcnNpb24g
PSAwOworICBuc0F0dHNQb3dlciA9IDA7CisKKyAgcG9vbEluaXQoJnRlbXBQb29sLCAmKHBhcnNl
ci0+bV9tZW0pKTsKKyAgcG9vbEluaXQoJnRlbXAyUG9vbCwgJihwYXJzZXItPm1fbWVtKSk7Cisg
IHBhcnNlckluaXQocGFyc2VyLCBlbmNvZGluZ05hbWUpOworCisgIGlmIChlbmNvZGluZ05hbWUg
JiYgIXByb3RvY29sRW5jb2RpbmdOYW1lKSB7CisgICAgWE1MX1BhcnNlckZyZWUocGFyc2VyKTsK
KyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmIChuYW1lU2VwKSB7CisgICAgbnMgPSBYTUxf
VFJVRTsKKyAgICBpbnRlcm5hbEVuY29kaW5nID0gWG1sR2V0SW50ZXJuYWxFbmNvZGluZ05TKCk7
CisgICAgbmFtZXNwYWNlU2VwYXJhdG9yID0gKm5hbWVTZXA7CisgIH0KKyAgZWxzZSB7CisgICAg
aW50ZXJuYWxFbmNvZGluZyA9IFhtbEdldEludGVybmFsRW5jb2RpbmcoKTsKKyAgfQorCisgIHJl
dHVybiBwYXJzZXI7Cit9CisKK3N0YXRpYyB2b2lkCitwYXJzZXJJbml0KFhNTF9QYXJzZXIgcGFy
c2VyLCBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lKQoreworICBwcm9jZXNzb3IgPSBwcm9s
b2dJbml0UHJvY2Vzc29yOworICBYbWxQcm9sb2dTdGF0ZUluaXQoJnByb2xvZ1N0YXRlKTsKKyAg
cHJvdG9jb2xFbmNvZGluZ05hbWUgPSAoZW5jb2RpbmdOYW1lICE9IE5VTEwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyBwb29sQ29weVN0cmluZygmdGVtcFBvb2wsIGVuY29kaW5nTmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKTsKKyAgY3VyQmFzZSA9IE5VTEw7Cisg
IFhtbEluaXRFbmNvZGluZygmaW5pdEVuY29kaW5nLCAmZW5jb2RpbmcsIDApOworICB1c2VyRGF0
YSA9IE5VTEw7CisgIGhhbmRsZXJBcmcgPSBOVUxMOworICBzdGFydEVsZW1lbnRIYW5kbGVyID0g
TlVMTDsKKyAgZW5kRWxlbWVudEhhbmRsZXIgPSBOVUxMOworICBjaGFyYWN0ZXJEYXRhSGFuZGxl
ciA9IE5VTEw7CisgIHByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgPSBOVUxMOworICBjb21t
ZW50SGFuZGxlciA9IE5VTEw7CisgIHN0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlciA9IE5VTEw7Cisg
IGVuZENkYXRhU2VjdGlvbkhhbmRsZXIgPSBOVUxMOworICBkZWZhdWx0SGFuZGxlciA9IE5VTEw7
CisgIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyID0gTlVMTDsKKyAgZW5kRG9jdHlwZURlY2xIYW5k
bGVyID0gTlVMTDsKKyAgdW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciA9IE5VTEw7CisgIG5vdGF0
aW9uRGVjbEhhbmRsZXIgPSBOVUxMOworICBzdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gTlVM
TDsKKyAgZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBOVUxMOworICBub3RTdGFuZGFsb25lSGFu
ZGxlciA9IE5VTEw7CisgIGV4dGVybmFsRW50aXR5UmVmSGFuZGxlciA9IE5VTEw7CisgIGV4dGVy
bmFsRW50aXR5UmVmSGFuZGxlckFyZyA9IHBhcnNlcjsKKyAgc2tpcHBlZEVudGl0eUhhbmRsZXIg
PSBOVUxMOworICBlbGVtZW50RGVjbEhhbmRsZXIgPSBOVUxMOworICBhdHRsaXN0RGVjbEhhbmRs
ZXIgPSBOVUxMOworICBlbnRpdHlEZWNsSGFuZGxlciA9IE5VTEw7CisgIHhtbERlY2xIYW5kbGVy
ID0gTlVMTDsKKyAgYnVmZmVyUHRyID0gYnVmZmVyOworICBidWZmZXJFbmQgPSBidWZmZXI7Cisg
IHBhcnNlRW5kQnl0ZUluZGV4ID0gMDsKKyAgcGFyc2VFbmRQdHIgPSBOVUxMOworICBkZWNsRWxl
bWVudFR5cGUgPSBOVUxMOworICBkZWNsQXR0cmlidXRlSWQgPSBOVUxMOworICBkZWNsRW50aXR5
ID0gTlVMTDsKKyAgZG9jdHlwZU5hbWUgPSBOVUxMOworICBkb2N0eXBlU3lzaWQgPSBOVUxMOwor
ICBkb2N0eXBlUHViaWQgPSBOVUxMOworICBkZWNsQXR0cmlidXRlVHlwZSA9IE5VTEw7CisgIGRl
Y2xOb3RhdGlvbk5hbWUgPSBOVUxMOworICBkZWNsTm90YXRpb25QdWJsaWNJZCA9IE5VTEw7Cisg
IGRlY2xBdHRyaWJ1dGVJc0NkYXRhID0gWE1MX0ZBTFNFOworICBkZWNsQXR0cmlidXRlSXNJZCA9
IFhNTF9GQUxTRTsKKyAgbWVtc2V0KCZwb3NpdGlvbiwgMCwgc2l6ZW9mKFBPU0lUSU9OKSk7Cisg
IGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT05FOworICBldmVudFB0ciA9IE5VTEw7CisgIGV2ZW50
RW5kUHRyID0gTlVMTDsKKyAgcG9zaXRpb25QdHIgPSBOVUxMOworICBvcGVuSW50ZXJuYWxFbnRp
dGllcyA9IE5VTEw7CisgIGRlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzID0gWE1MX1RSVUU7
CisgIHRhZ0xldmVsID0gMDsKKyAgdGFnU3RhY2sgPSBOVUxMOworICBpbmhlcml0ZWRCaW5kaW5n
cyA9IE5VTEw7CisgIG5TcGVjaWZpZWRBdHRzID0gMDsKKyAgdW5rbm93bkVuY29kaW5nTWVtID0g
TlVMTDsKKyAgdW5rbm93bkVuY29kaW5nUmVsZWFzZSA9IE5VTEw7CisgIHVua25vd25FbmNvZGlu
Z0RhdGEgPSBOVUxMOworICBwYXJlbnRQYXJzZXIgPSBOVUxMOworICBwc19wYXJzaW5nID0gWE1M
X0lOSVRJQUxJWkVEOworI2lmZGVmIFhNTF9EVEQKKyAgaXNQYXJhbUVudGl0eSA9IFhNTF9GQUxT
RTsKKyAgdXNlRm9yZWlnbkRURCA9IFhNTF9GQUxTRTsKKyAgcGFyYW1FbnRpdHlQYXJzaW5nID0g
WE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX05FVkVSOworI2VuZGlmCisgIGhhc2hfc2VjcmV0X3Nh
bHQgPSAwOworfQorCisvKiBtb3ZlcyBsaXN0IG9mIGJpbmRpbmdzIHRvIGZyZWVCaW5kaW5nTGlz
dCAqLworc3RhdGljIHZvaWQgRkFTVENBTEwKK21vdmVUb0ZyZWVCaW5kaW5nTGlzdChYTUxfUGFy
c2VyIHBhcnNlciwgQklORElORyAqYmluZGluZ3MpCit7CisgIHdoaWxlIChiaW5kaW5ncykgewor
ICAgIEJJTkRJTkcgKmIgPSBiaW5kaW5nczsKKyAgICBiaW5kaW5ncyA9IGJpbmRpbmdzLT5uZXh0
VGFnQmluZGluZzsKKyAgICBiLT5uZXh0VGFnQmluZGluZyA9IGZyZWVCaW5kaW5nTGlzdDsKKyAg
ICBmcmVlQmluZGluZ0xpc3QgPSBiOworICB9Cit9CisKK1hNTF9Cb29sIFhNTENBTEwKK1hNTF9Q
YXJzZXJSZXNldChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFt
ZSkKK3sKKyAgVEFHICp0U3RrOworICBPUEVOX0lOVEVSTkFMX0VOVElUWSAqb3BlbkVudGl0eUxp
c3Q7CisgIGlmIChwYXJlbnRQYXJzZXIpCisgICAgcmV0dXJuIFhNTF9GQUxTRTsKKyAgLyogbW92
ZSB0YWdTdGFjayB0byBmcmVlVGFnTGlzdCAqLworICB0U3RrID0gdGFnU3RhY2s7CisgIHdoaWxl
ICh0U3RrKSB7CisgICAgVEFHICp0YWcgPSB0U3RrOworICAgIHRTdGsgPSB0U3RrLT5wYXJlbnQ7
CisgICAgdGFnLT5wYXJlbnQgPSBmcmVlVGFnTGlzdDsKKyAgICBtb3ZlVG9GcmVlQmluZGluZ0xp
c3QocGFyc2VyLCB0YWctPmJpbmRpbmdzKTsKKyAgICB0YWctPmJpbmRpbmdzID0gTlVMTDsKKyAg
ICBmcmVlVGFnTGlzdCA9IHRhZzsKKyAgfQorICAvKiBtb3ZlIG9wZW5JbnRlcm5hbEVudGl0aWVz
IHRvIGZyZWVJbnRlcm5hbEVudGl0aWVzICovCisgIG9wZW5FbnRpdHlMaXN0ID0gb3BlbkludGVy
bmFsRW50aXRpZXM7CisgIHdoaWxlIChvcGVuRW50aXR5TGlzdCkgeworICAgIE9QRU5fSU5URVJO
QUxfRU5USVRZICpvcGVuRW50aXR5ID0gb3BlbkVudGl0eUxpc3Q7CisgICAgb3BlbkVudGl0eUxp
c3QgPSBvcGVuRW50aXR5LT5uZXh0OworICAgIG9wZW5FbnRpdHktPm5leHQgPSBmcmVlSW50ZXJu
YWxFbnRpdGllczsKKyAgICBmcmVlSW50ZXJuYWxFbnRpdGllcyA9IG9wZW5FbnRpdHk7CisgIH0K
KyAgbW92ZVRvRnJlZUJpbmRpbmdMaXN0KHBhcnNlciwgaW5oZXJpdGVkQmluZGluZ3MpOworICBG
UkVFKHVua25vd25FbmNvZGluZ01lbSk7CisgIGlmICh1bmtub3duRW5jb2RpbmdSZWxlYXNlKQor
ICAgIHVua25vd25FbmNvZGluZ1JlbGVhc2UodW5rbm93bkVuY29kaW5nRGF0YSk7CisgIHBvb2xD
bGVhcigmdGVtcFBvb2wpOworICBwb29sQ2xlYXIoJnRlbXAyUG9vbCk7CisgIHBhcnNlckluaXQo
cGFyc2VyLCBlbmNvZGluZ05hbWUpOworICBkdGRSZXNldChfZHRkLCAmcGFyc2VyLT5tX21lbSk7
CisgIHJldHVybiBYTUxfVFJVRTsKK30KKworZW51bSBYTUxfU3RhdHVzIFhNTENBTEwKK1hNTF9T
ZXRFbmNvZGluZyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFt
ZSkKK3sKKyAgLyogQmxvY2sgYWZ0ZXIgWE1MX1BhcnNlKCkvWE1MX1BhcnNlQnVmZmVyKCkgaGFz
IGJlZW4gY2FsbGVkLgorICAgICBYWFggVGhlcmUncyBubyB3YXkgZm9yIHRoZSBjYWxsZXIgdG8g
ZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZQorICAgICBYWFggcG9zc2libGUgZXJyb3IgY2FzZXMgY2F1
c2VkIHRoZSBYTUxfU1RBVFVTX0VSUk9SIHJldHVybi4KKyAgKi8KKyAgaWYgKHBzX3BhcnNpbmcg
PT0gWE1MX1BBUlNJTkcgfHwgcHNfcGFyc2luZyA9PSBYTUxfU1VTUEVOREVEKQorICAgIHJldHVy
biBYTUxfU1RBVFVTX0VSUk9SOworICBpZiAoZW5jb2RpbmdOYW1lID09IE5VTEwpCisgICAgcHJv
dG9jb2xFbmNvZGluZ05hbWUgPSBOVUxMOworICBlbHNlIHsKKyAgICBwcm90b2NvbEVuY29kaW5n
TmFtZSA9IHBvb2xDb3B5U3RyaW5nKCZ0ZW1wUG9vbCwgZW5jb2RpbmdOYW1lKTsKKyAgICBpZiAo
IXByb3RvY29sRW5jb2RpbmdOYW1lKQorICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7Cisg
IH0KKyAgcmV0dXJuIFhNTF9TVEFUVVNfT0s7Cit9CisKK1hNTF9QYXJzZXIgWE1MQ0FMTAorWE1M
X0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlKFhNTF9QYXJzZXIgb2xkUGFyc2VyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUpCit7
CisgIFhNTF9QYXJzZXIgcGFyc2VyID0gb2xkUGFyc2VyOworICBEVEQgKm5ld0R0ZCA9IE5VTEw7
CisgIERURCAqb2xkRHRkID0gX2R0ZDsKKyAgWE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIgb2xkU3Rh
cnRFbGVtZW50SGFuZGxlciA9IHN0YXJ0RWxlbWVudEhhbmRsZXI7CisgIFhNTF9FbmRFbGVtZW50
SGFuZGxlciBvbGRFbmRFbGVtZW50SGFuZGxlciA9IGVuZEVsZW1lbnRIYW5kbGVyOworICBYTUxf
Q2hhcmFjdGVyRGF0YUhhbmRsZXIgb2xkQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBjaGFyYWN0ZXJE
YXRhSGFuZGxlcjsKKyAgWE1MX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgb2xkUHJvY2Vz
c2luZ0luc3RydWN0aW9uSGFuZGxlcgorICAgICAgPSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5k
bGVyOworICBYTUxfQ29tbWVudEhhbmRsZXIgb2xkQ29tbWVudEhhbmRsZXIgPSBjb21tZW50SGFu
ZGxlcjsKKyAgWE1MX1N0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlciBvbGRTdGFydENkYXRhU2VjdGlv
bkhhbmRsZXIKKyAgICAgID0gc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyOworICBYTUxfRW5kQ2Rh
dGFTZWN0aW9uSGFuZGxlciBvbGRFbmRDZGF0YVNlY3Rpb25IYW5kbGVyCisgICAgICA9IGVuZENk
YXRhU2VjdGlvbkhhbmRsZXI7CisgIFhNTF9EZWZhdWx0SGFuZGxlciBvbGREZWZhdWx0SGFuZGxl
ciA9IGRlZmF1bHRIYW5kbGVyOworICBYTUxfVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciBvbGRV
bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyCisgICAgICA9IHVucGFyc2VkRW50aXR5RGVjbEhhbmRs
ZXI7CisgIFhNTF9Ob3RhdGlvbkRlY2xIYW5kbGVyIG9sZE5vdGF0aW9uRGVjbEhhbmRsZXIgPSBu
b3RhdGlvbkRlY2xIYW5kbGVyOworICBYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciBvbGRT
dGFydE5hbWVzcGFjZURlY2xIYW5kbGVyCisgICAgICA9IHN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRs
ZXI7CisgIFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlciBvbGRFbmROYW1lc3BhY2VEZWNsSGFu
ZGxlcgorICAgICAgPSBlbmROYW1lc3BhY2VEZWNsSGFuZGxlcjsKKyAgWE1MX05vdFN0YW5kYWxv
bmVIYW5kbGVyIG9sZE5vdFN0YW5kYWxvbmVIYW5kbGVyID0gbm90U3RhbmRhbG9uZUhhbmRsZXI7
CisgIFhNTF9FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgb2xkRXh0ZXJuYWxFbnRpdHlSZWZIYW5k
bGVyCisgICAgICA9IGV4dGVybmFsRW50aXR5UmVmSGFuZGxlcjsKKyAgWE1MX1NraXBwZWRFbnRp
dHlIYW5kbGVyIG9sZFNraXBwZWRFbnRpdHlIYW5kbGVyID0gc2tpcHBlZEVudGl0eUhhbmRsZXI7
CisgIFhNTF9Vbmtub3duRW5jb2RpbmdIYW5kbGVyIG9sZFVua25vd25FbmNvZGluZ0hhbmRsZXIK
KyAgICAgID0gdW5rbm93bkVuY29kaW5nSGFuZGxlcjsKKyAgWE1MX0VsZW1lbnREZWNsSGFuZGxl
ciBvbGRFbGVtZW50RGVjbEhhbmRsZXIgPSBlbGVtZW50RGVjbEhhbmRsZXI7CisgIFhNTF9BdHRs
aXN0RGVjbEhhbmRsZXIgb2xkQXR0bGlzdERlY2xIYW5kbGVyID0gYXR0bGlzdERlY2xIYW5kbGVy
OworICBYTUxfRW50aXR5RGVjbEhhbmRsZXIgb2xkRW50aXR5RGVjbEhhbmRsZXIgPSBlbnRpdHlE
ZWNsSGFuZGxlcjsKKyAgWE1MX1htbERlY2xIYW5kbGVyIG9sZFhtbERlY2xIYW5kbGVyID0geG1s
RGVjbEhhbmRsZXI7CisgIEVMRU1FTlRfVFlQRSAqIG9sZERlY2xFbGVtZW50VHlwZSA9IGRlY2xF
bGVtZW50VHlwZTsKKworICB2b2lkICpvbGRVc2VyRGF0YSA9IHVzZXJEYXRhOworICB2b2lkICpv
bGRIYW5kbGVyQXJnID0gaGFuZGxlckFyZzsKKyAgWE1MX0Jvb2wgb2xkRGVmYXVsdEV4cGFuZElu
dGVybmFsRW50aXRpZXMgPSBkZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllczsKKyAgWE1MX1Bh
cnNlciBvbGRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcgPSBleHRlcm5hbEVudGl0eVJlZkhh
bmRsZXJBcmc7CisjaWZkZWYgWE1MX0RURAorICBlbnVtIFhNTF9QYXJhbUVudGl0eVBhcnNpbmcg
b2xkUGFyYW1FbnRpdHlQYXJzaW5nID0gcGFyYW1FbnRpdHlQYXJzaW5nOworICBpbnQgb2xkSW5F
bnRpdHlWYWx1ZSA9IHByb2xvZ1N0YXRlLmluRW50aXR5VmFsdWU7CisjZW5kaWYKKyAgWE1MX0Jv
b2wgb2xkbnNfdHJpcGxldHMgPSBuc190cmlwbGV0czsKKyAgLyogTm90ZSB0aGF0IHRoZSBuZXcg
cGFyc2VyIHNoYXJlcyB0aGUgc2FtZSBoYXNoIHNlY3JldCBhcyB0aGUgb2xkCisgICAgIHBhcnNl
ciwgc28gdGhhdCBkdGRDb3B5IGFuZCBjb3B5RW50aXR5VGFibGUgY2FuIGxvb2t1cCB2YWx1ZXMK
KyAgICAgZnJvbSBoYXNoIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggZWl0aGVyIHBhcnNlciB3aXRo
b3V0IHVzIGhhdmluZworICAgICB0byB3b3JyeSB3aGljaCBoYXNoIHNlY3JldHMgZWFjaCB0YWJs
ZSBoYXMuCisgICovCisgIHVuc2lnbmVkIGxvbmcgb2xkaGFzaF9zZWNyZXRfc2FsdCA9IGhhc2hf
c2VjcmV0X3NhbHQ7CisKKyNpZmRlZiBYTUxfRFRECisgIGlmICghY29udGV4dCkKKyAgICBuZXdE
dGQgPSBvbGREdGQ7CisjZW5kaWYgLyogWE1MX0RURCAqLworCisgIC8qIE5vdGUgdGhhdCB0aGUg
bWFnaWNhbCB1c2VzIG9mIHRoZSBwcmUtcHJvY2Vzc29yIHRvIG1ha2UgZmllbGQKKyAgICAgYWNj
ZXNzIGxvb2sgbW9yZSBsaWtlIEMrKyByZXF1aXJlIHRoYXQgYHBhcnNlcicgYmUgb3ZlcndyaXR0
ZW4KKyAgICAgaGVyZS4gIFRoaXMgbWFrZXMgdGhpcyBmdW5jdGlvbiBtb3JlIHBhaW5mdWwgdG8g
Zm9sbG93IHRoYW4gaXQKKyAgICAgd291bGQgYmUgb3RoZXJ3aXNlLgorICAqLworICBpZiAobnMp
IHsKKyAgICBYTUxfQ2hhciB0bXBbMl07CisgICAgKnRtcCA9IG5hbWVzcGFjZVNlcGFyYXRvcjsK
KyAgICBwYXJzZXIgPSBwYXJzZXJDcmVhdGUoZW5jb2RpbmdOYW1lLCAmcGFyc2VyLT5tX21lbSwg
dG1wLCBuZXdEdGQpOworICB9CisgIGVsc2UgeworICAgIHBhcnNlciA9IHBhcnNlckNyZWF0ZShl
bmNvZGluZ05hbWUsICZwYXJzZXItPm1fbWVtLCBOVUxMLCBuZXdEdGQpOworICB9CisKKyAgaWYg
KCFwYXJzZXIpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgc3RhcnRFbGVtZW50SGFuZGxlciA9IG9s
ZFN0YXJ0RWxlbWVudEhhbmRsZXI7CisgIGVuZEVsZW1lbnRIYW5kbGVyID0gb2xkRW5kRWxlbWVu
dEhhbmRsZXI7CisgIGNoYXJhY3RlckRhdGFIYW5kbGVyID0gb2xkQ2hhcmFjdGVyRGF0YUhhbmRs
ZXI7CisgIHByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgPSBvbGRQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb25IYW5kbGVyOworICBjb21tZW50SGFuZGxlciA9IG9sZENvbW1lbnRIYW5kbGVyOworICBz
dGFydENkYXRhU2VjdGlvbkhhbmRsZXIgPSBvbGRTdGFydENkYXRhU2VjdGlvbkhhbmRsZXI7Cisg
IGVuZENkYXRhU2VjdGlvbkhhbmRsZXIgPSBvbGRFbmRDZGF0YVNlY3Rpb25IYW5kbGVyOworICBk
ZWZhdWx0SGFuZGxlciA9IG9sZERlZmF1bHRIYW5kbGVyOworICB1bnBhcnNlZEVudGl0eURlY2xI
YW5kbGVyID0gb2xkVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcjsKKyAgbm90YXRpb25EZWNsSGFu
ZGxlciA9IG9sZE5vdGF0aW9uRGVjbEhhbmRsZXI7CisgIHN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRs
ZXIgPSBvbGRTdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyOworICBlbmROYW1lc3BhY2VEZWNsSGFu
ZGxlciA9IG9sZEVuZE5hbWVzcGFjZURlY2xIYW5kbGVyOworICBub3RTdGFuZGFsb25lSGFuZGxl
ciA9IG9sZE5vdFN0YW5kYWxvbmVIYW5kbGVyOworICBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIg
PSBvbGRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXI7CisgIHNraXBwZWRFbnRpdHlIYW5kbGVyID0g
b2xkU2tpcHBlZEVudGl0eUhhbmRsZXI7CisgIHVua25vd25FbmNvZGluZ0hhbmRsZXIgPSBvbGRV
bmtub3duRW5jb2RpbmdIYW5kbGVyOworICBlbGVtZW50RGVjbEhhbmRsZXIgPSBvbGRFbGVtZW50
RGVjbEhhbmRsZXI7CisgIGF0dGxpc3REZWNsSGFuZGxlciA9IG9sZEF0dGxpc3REZWNsSGFuZGxl
cjsKKyAgZW50aXR5RGVjbEhhbmRsZXIgPSBvbGRFbnRpdHlEZWNsSGFuZGxlcjsKKyAgeG1sRGVj
bEhhbmRsZXIgPSBvbGRYbWxEZWNsSGFuZGxlcjsKKyAgZGVjbEVsZW1lbnRUeXBlID0gb2xkRGVj
bEVsZW1lbnRUeXBlOworICB1c2VyRGF0YSA9IG9sZFVzZXJEYXRhOworICBpZiAob2xkVXNlckRh
dGEgPT0gb2xkSGFuZGxlckFyZykKKyAgICBoYW5kbGVyQXJnID0gdXNlckRhdGE7CisgIGVsc2UK
KyAgICBoYW5kbGVyQXJnID0gcGFyc2VyOworICBpZiAob2xkRXh0ZXJuYWxFbnRpdHlSZWZIYW5k
bGVyQXJnICE9IG9sZFBhcnNlcikKKyAgICBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcgPSBv
bGRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmc7CisgIGRlZmF1bHRFeHBhbmRJbnRlcm5hbEVu
dGl0aWVzID0gb2xkRGVmYXVsdEV4cGFuZEludGVybmFsRW50aXRpZXM7CisgIG5zX3RyaXBsZXRz
ID0gb2xkbnNfdHJpcGxldHM7CisgIGhhc2hfc2VjcmV0X3NhbHQgPSBvbGRoYXNoX3NlY3JldF9z
YWx0OworICBwYXJlbnRQYXJzZXIgPSBvbGRQYXJzZXI7CisjaWZkZWYgWE1MX0RURAorICBwYXJh
bUVudGl0eVBhcnNpbmcgPSBvbGRQYXJhbUVudGl0eVBhcnNpbmc7CisgIHByb2xvZ1N0YXRlLmlu
RW50aXR5VmFsdWUgPSBvbGRJbkVudGl0eVZhbHVlOworICBpZiAoY29udGV4dCkgeworI2VuZGlm
IC8qIFhNTF9EVEQgKi8KKyAgICBpZiAoIWR0ZENvcHkob2xkUGFyc2VyLCBfZHRkLCBvbGREdGQs
ICZwYXJzZXItPm1fbWVtKQorICAgICAgfHwgIXNldENvbnRleHQocGFyc2VyLCBjb250ZXh0KSkg
eworICAgICAgWE1MX1BhcnNlckZyZWUocGFyc2VyKTsKKyAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKyAgICBwcm9jZXNzb3IgPSBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3I7CisjaWZkZWYg
WE1MX0RURAorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSBEVEQgaW5zdGFuY2UgcmVmZXJlbmNl
ZCBieSBfZHRkIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBkb2N1bWVudCdzCisgICAgICAgcm9vdCBw
YXJzZXIgYW5kIGV4dGVybmFsIFBFIHBhcnNlcnMsIHRoZXJlZm9yZSBvbmUgZG9lcyBub3QgbmVl
ZCB0bworICAgICAgIGNhbGwgc2V0Q29udGV4dC4gSW4gYWRkaXRpb24sIG9uZSBhbHNvICptdXN0
KiBub3QgY2FsbCBzZXRDb250ZXh0LAorICAgICAgIGJlY2F1c2UgdGhpcyB3b3VsZCBvdmVyd3Jp
dGUgZXhpc3RpbmcgcHJlZml4LT5iaW5kaW5nIHBvaW50ZXJzIGluCisgICAgICAgX2R0ZCB3aXRo
IG9uZXMgdGhhdCBnZXQgZGVzdHJveWVkIHdpdGggdGhlIGV4dGVybmFsIFBFIHBhcnNlci4KKyAg
ICAgICBUaGlzIHdvdWxkIGxlYXZlIHRob3NlIHByZWZpeGVzIHdpdGggZGFuZ2xpbmcgcG9pbnRl
cnMuCisgICAgKi8KKyAgICBpc1BhcmFtRW50aXR5ID0gWE1MX1RSVUU7CisgICAgWG1sUHJvbG9n
U3RhdGVJbml0RXh0ZXJuYWxFbnRpdHkoJnByb2xvZ1N0YXRlKTsKKyAgICBwcm9jZXNzb3IgPSBl
eHRlcm5hbFBhckVudEluaXRQcm9jZXNzb3I7CisgIH0KKyNlbmRpZiAvKiBYTUxfRFREICovCisg
IHJldHVybiBwYXJzZXI7Cit9CisKK3N0YXRpYyB2b2lkIEZBU1RDQUxMCitkZXN0cm95QmluZGlu
Z3MoQklORElORyAqYmluZGluZ3MsIFhNTF9QYXJzZXIgcGFyc2VyKQoreworICBmb3IgKDs7KSB7
CisgICAgQklORElORyAqYiA9IGJpbmRpbmdzOworICAgIGlmICghYikKKyAgICAgIGJyZWFrOwor
ICAgIGJpbmRpbmdzID0gYi0+bmV4dFRhZ0JpbmRpbmc7CisgICAgRlJFRShiLT51cmkpOworICAg
IEZSRUUoYik7CisgIH0KK30KKwordm9pZCBYTUxDQUxMCitYTUxfUGFyc2VyRnJlZShYTUxfUGFy
c2VyIHBhcnNlcikKK3sKKyAgVEFHICp0YWdMaXN0OworICBPUEVOX0lOVEVSTkFMX0VOVElUWSAq
ZW50aXR5TGlzdDsKKyAgaWYgKHBhcnNlciA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgLyogZnJl
ZSB0YWdTdGFjayBhbmQgZnJlZVRhZ0xpc3QgKi8KKyAgdGFnTGlzdCA9IHRhZ1N0YWNrOworICBm
b3IgKDs7KSB7CisgICAgVEFHICpwOworICAgIGlmICh0YWdMaXN0ID09IE5VTEwpIHsKKyAgICAg
IGlmIChmcmVlVGFnTGlzdCA9PSBOVUxMKQorICAgICAgICBicmVhazsKKyAgICAgIHRhZ0xpc3Qg
PSBmcmVlVGFnTGlzdDsKKyAgICAgIGZyZWVUYWdMaXN0ID0gTlVMTDsKKyAgICB9CisgICAgcCA9
IHRhZ0xpc3Q7CisgICAgdGFnTGlzdCA9IHRhZ0xpc3QtPnBhcmVudDsKKyAgICBGUkVFKHAtPmJ1
Zik7CisgICAgZGVzdHJveUJpbmRpbmdzKHAtPmJpbmRpbmdzLCBwYXJzZXIpOworICAgIEZSRUUo
cCk7CisgIH0KKyAgLyogZnJlZSBvcGVuSW50ZXJuYWxFbnRpdGllcyBhbmQgZnJlZUludGVybmFs
RW50aXRpZXMgKi8KKyAgZW50aXR5TGlzdCA9IG9wZW5JbnRlcm5hbEVudGl0aWVzOworICBmb3Ig
KDs7KSB7CisgICAgT1BFTl9JTlRFUk5BTF9FTlRJVFkgKm9wZW5FbnRpdHk7CisgICAgaWYgKGVu
dGl0eUxpc3QgPT0gTlVMTCkgeworICAgICAgaWYgKGZyZWVJbnRlcm5hbEVudGl0aWVzID09IE5V
TEwpCisgICAgICAgIGJyZWFrOworICAgICAgZW50aXR5TGlzdCA9IGZyZWVJbnRlcm5hbEVudGl0
aWVzOworICAgICAgZnJlZUludGVybmFsRW50aXRpZXMgPSBOVUxMOworICAgIH0KKyAgICBvcGVu
RW50aXR5ID0gZW50aXR5TGlzdDsKKyAgICBlbnRpdHlMaXN0ID0gZW50aXR5TGlzdC0+bmV4dDsK
KyAgICBGUkVFKG9wZW5FbnRpdHkpOworICB9CisKKyAgZGVzdHJveUJpbmRpbmdzKGZyZWVCaW5k
aW5nTGlzdCwgcGFyc2VyKTsKKyAgZGVzdHJveUJpbmRpbmdzKGluaGVyaXRlZEJpbmRpbmdzLCBw
YXJzZXIpOworICBwb29sRGVzdHJveSgmdGVtcFBvb2wpOworICBwb29sRGVzdHJveSgmdGVtcDJQ
b29sKTsKKyNpZmRlZiBYTUxfRFRECisgIC8qIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkgcGFy
c2VycyBzaGFyZSB0aGUgRFREIHN0cnVjdHVyZQorICAgICBwYXJzZXItPm1fZHRkIHdpdGggdGhl
IHJvb3QgcGFyc2VyLCBzbyB3ZSBtdXN0IG5vdCBkZXN0cm95IGl0CisgICovCisgIGlmICghaXNQ
YXJhbUVudGl0eSAmJiBfZHRkKQorI2Vsc2UKKyAgaWYgKF9kdGQpCisjZW5kaWYgLyogWE1MX0RU
RCAqLworICAgIGR0ZERlc3Ryb3koX2R0ZCwgKFhNTF9Cb29sKSFwYXJlbnRQYXJzZXIsICZwYXJz
ZXItPm1fbWVtKTsKKyAgRlJFRSgodm9pZCAqKWF0dHMpOworI2lmZGVmIFhNTF9BVFRSX0lORk8K
KyAgRlJFRSgodm9pZCAqKWF0dEluZm8pOworI2VuZGlmCisgIEZSRUUoZ3JvdXBDb25uZWN0b3Ip
OworICBGUkVFKGJ1ZmZlcik7CisgIEZSRUUoZGF0YUJ1Zik7CisgIEZSRUUobnNBdHRzKTsKKyAg
RlJFRSh1bmtub3duRW5jb2RpbmdNZW0pOworICBpZiAodW5rbm93bkVuY29kaW5nUmVsZWFzZSkK
KyAgICB1bmtub3duRW5jb2RpbmdSZWxlYXNlKHVua25vd25FbmNvZGluZ0RhdGEpOworICBGUkVF
KHBhcnNlcik7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1VzZVBhcnNlckFzSGFuZGxlckFyZyhY
TUxfUGFyc2VyIHBhcnNlcikKK3sKKyAgaGFuZGxlckFyZyA9IHBhcnNlcjsKK30KKworZW51bSBY
TUxfRXJyb3IgWE1MQ0FMTAorWE1MX1VzZUZvcmVpZ25EVEQoWE1MX1BhcnNlciBwYXJzZXIsIFhN
TF9Cb29sIHVzZURURCkKK3sKKyNpZmRlZiBYTUxfRFRECisgIC8qIGJsb2NrIGFmdGVyIFhNTF9Q
YXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpIGhhcyBiZWVuIGNhbGxlZCAqLworICBpZiAocHNfcGFy
c2luZyA9PSBYTUxfUEFSU0lORyB8fCBwc19wYXJzaW5nID09IFhNTF9TVVNQRU5ERUQpCisgICAg
cmV0dXJuIFhNTF9FUlJPUl9DQU5UX0NIQU5HRV9GRUFUVVJFX09OQ0VfUEFSU0lORzsKKyAgdXNl
Rm9yZWlnbkRURCA9IHVzZURURDsKKyAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworI2Vsc2UKKyAg
cmV0dXJuIFhNTF9FUlJPUl9GRUFUVVJFX1JFUVVJUkVTX1hNTF9EVEQ7CisjZW5kaWYKK30KKwor
dm9pZCBYTUxDQUxMCitYTUxfU2V0UmV0dXJuTlNUcmlwbGV0KFhNTF9QYXJzZXIgcGFyc2VyLCBp
bnQgZG9fbnN0KQoreworICAvKiBibG9jayBhZnRlciBYTUxfUGFyc2UoKS9YTUxfUGFyc2VCdWZm
ZXIoKSBoYXMgYmVlbiBjYWxsZWQgKi8KKyAgaWYgKHBzX3BhcnNpbmcgPT0gWE1MX1BBUlNJTkcg
fHwgcHNfcGFyc2luZyA9PSBYTUxfU1VTUEVOREVEKQorICAgIHJldHVybjsKKyAgbnNfdHJpcGxl
dHMgPSBkb19uc3QgPyBYTUxfVFJVRSA6IFhNTF9GQUxTRTsKK30KKwordm9pZCBYTUxDQUxMCitY
TUxfU2V0VXNlckRhdGEoWE1MX1BhcnNlciBwYXJzZXIsIHZvaWQgKnApCit7CisgIGlmIChoYW5k
bGVyQXJnID09IHVzZXJEYXRhKQorICAgIGhhbmRsZXJBcmcgPSB1c2VyRGF0YSA9IHA7CisgIGVs
c2UKKyAgICB1c2VyRGF0YSA9IHA7Cit9CisKK2VudW0gWE1MX1N0YXR1cyBYTUxDQUxMCitYTUxf
U2V0QmFzZShYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKnApCit7CisgIGlmIChw
KSB7CisgICAgcCA9IHBvb2xDb3B5U3RyaW5nKCZfZHRkLT5wb29sLCBwKTsKKyAgICBpZiAoIXAp
CisgICAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAgICBjdXJCYXNlID0gcDsKKyAgfQor
ICBlbHNlCisgICAgY3VyQmFzZSA9IE5VTEw7CisgIHJldHVybiBYTUxfU1RBVFVTX09LOworfQor
Citjb25zdCBYTUxfQ2hhciAqIFhNTENBTEwKK1hNTF9HZXRCYXNlKFhNTF9QYXJzZXIgcGFyc2Vy
KQoreworICByZXR1cm4gY3VyQmFzZTsKK30KKworaW50IFhNTENBTEwKK1hNTF9HZXRTcGVjaWZp
ZWRBdHRyaWJ1dGVDb3VudChYTUxfUGFyc2VyIHBhcnNlcikKK3sKKyAgcmV0dXJuIG5TcGVjaWZp
ZWRBdHRzOworfQorCitpbnQgWE1MQ0FMTAorWE1MX0dldElkQXR0cmlidXRlSW5kZXgoWE1MX1Bh
cnNlciBwYXJzZXIpCit7CisgIHJldHVybiBpZEF0dEluZGV4OworfQorCisjaWZkZWYgWE1MX0FU
VFJfSU5GTworY29uc3QgWE1MX0F0dHJJbmZvICogWE1MQ0FMTAorWE1MX0dldEF0dHJpYnV0ZUlu
Zm8oWE1MX1BhcnNlciBwYXJzZXIpCit7CisgIHJldHVybiBhdHRJbmZvOworfQorI2VuZGlmCisK
K3ZvaWQgWE1MQ0FMTAorWE1MX1NldEVsZW1lbnRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAor
ICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyIHN0YXJ0LAorICAg
ICAgICAgICAgICAgICAgICAgIFhNTF9FbmRFbGVtZW50SGFuZGxlciBlbmQpCit7CisgIHN0YXJ0
RWxlbWVudEhhbmRsZXIgPSBzdGFydDsKKyAgZW5kRWxlbWVudEhhbmRsZXIgPSBlbmQ7Cit9CisK
K3ZvaWQgWE1MQ0FMTAorWE1MX1NldFN0YXJ0RWxlbWVudEhhbmRsZXIoWE1MX1BhcnNlciBwYXJz
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnRFbGVtZW50SGFuZGxlciBz
dGFydCkgeworICBzdGFydEVsZW1lbnRIYW5kbGVyID0gc3RhcnQ7Cit9CisKK3ZvaWQgWE1MQ0FM
TAorWE1MX1NldEVuZEVsZW1lbnRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIFhNTF9FbmRFbGVtZW50SGFuZGxlciBlbmQpIHsKKyAgZW5kRWxlbWVu
dEhhbmRsZXIgPSBlbmQ7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldENoYXJhY3RlckRhdGFI
YW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhN
TF9DaGFyYWN0ZXJEYXRhSGFuZGxlciBoYW5kbGVyKQoreworICBjaGFyYWN0ZXJEYXRhSGFuZGxl
ciA9IGhhbmRsZXI7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldFByb2Nlc3NpbmdJbnN0cnVj
dGlvbkhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYTUxfUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciBoYW5kbGVyKQorewor
ICBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyID0gaGFuZGxlcjsKK30KKwordm9pZCBYTUxD
QUxMCitYTUxfU2V0Q29tbWVudEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgWE1MX0NvbW1lbnRIYW5kbGVyIGhhbmRsZXIpCit7CisgIGNvbW1lbnRIYW5k
bGVyID0gaGFuZGxlcjsKK30KKwordm9pZCBYTUxDQUxMCitYTUxfU2V0Q2RhdGFTZWN0aW9uSGFu
ZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9T
dGFydENkYXRhU2VjdGlvbkhhbmRsZXIgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYTUxfRW5kQ2RhdGFTZWN0aW9uSGFuZGxlciBlbmQpCit7CisgIHN0YXJ0Q2RhdGFTZWN0aW9u
SGFuZGxlciA9IHN0YXJ0OworICBlbmRDZGF0YVNlY3Rpb25IYW5kbGVyID0gZW5kOworfQorCit2
b2lkIFhNTENBTEwKK1hNTF9TZXRTdGFydENkYXRhU2VjdGlvbkhhbmRsZXIoWE1MX1BhcnNlciBw
YXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydENkYXRhU2Vj
dGlvbkhhbmRsZXIgc3RhcnQpIHsKKyAgc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyID0gc3RhcnQ7
Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldEVuZENkYXRhU2VjdGlvbkhhbmRsZXIoWE1MX1Bh
cnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kQ2RhdGFT
ZWN0aW9uSGFuZGxlciBlbmQpIHsKKyAgZW5kQ2RhdGFTZWN0aW9uSGFuZGxlciA9IGVuZDsKK30K
Kwordm9pZCBYTUxDQUxMCitYTUxfU2V0RGVmYXVsdEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIs
CisgICAgICAgICAgICAgICAgICAgICAgWE1MX0RlZmF1bHRIYW5kbGVyIGhhbmRsZXIpCit7Cisg
IGRlZmF1bHRIYW5kbGVyID0gaGFuZGxlcjsKKyAgZGVmYXVsdEV4cGFuZEludGVybmFsRW50aXRp
ZXMgPSBYTUxfRkFMU0U7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldERlZmF1bHRIYW5kbGVy
RXhwYW5kKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhN
TF9EZWZhdWx0SGFuZGxlciBoYW5kbGVyKQoreworICBkZWZhdWx0SGFuZGxlciA9IGhhbmRsZXI7
CisgIGRlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzID0gWE1MX1RSVUU7Cit9CisKK3ZvaWQg
WE1MQ0FMTAorWE1MX1NldERvY3R5cGVEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RG9jdHlwZURlY2xIYW5kbGVyIHN0YXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kRG9jdHlwZURlY2xIYW5kbGVyIGVu
ZCkKK3sKKyAgc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIgPSBzdGFydDsKKyAgZW5kRG9jdHlwZURl
Y2xIYW5kbGVyID0gZW5kOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRTdGFydERvY3R5cGVE
ZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYTUxfU3RhcnREb2N0eXBlRGVjbEhhbmRsZXIgc3RhcnQpIHsKKyAgc3RhcnREb2N0eXBl
RGVjbEhhbmRsZXIgPSBzdGFydDsKK30KKwordm9pZCBYTUxDQUxMCitYTUxfU2V0RW5kRG9jdHlw
ZURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYTUxfRW5kRG9jdHlwZURlY2xIYW5kbGVyIGVuZCkgeworICBlbmREb2N0eXBlRGVjbEhh
bmRsZXIgPSBlbmQ7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldFVucGFyc2VkRW50aXR5RGVj
bEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYTUxfVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciBoYW5kbGVyKQoreworICB1bnBhcnNl
ZEVudGl0eURlY2xIYW5kbGVyID0gaGFuZGxlcjsKK30KKwordm9pZCBYTUxDQUxMCitYTUxfU2V0
Tm90YXRpb25EZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhNTF9Ob3RhdGlvbkRlY2xIYW5kbGVyIGhhbmRsZXIpCit7CisgIG5vdGF0aW9u
RGVjbEhhbmRsZXIgPSBoYW5kbGVyOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXROYW1lc3Bh
Y2VEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciBzdGFydCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgZW5kKQoreworICBzdGFy
dE5hbWVzcGFjZURlY2xIYW5kbGVyID0gc3RhcnQ7CisgIGVuZE5hbWVzcGFjZURlY2xIYW5kbGVy
ID0gZW5kOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRTdGFydE5hbWVzcGFjZURlY2xIYW5k
bGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgc3RhcnQpIHsKKyAgc3RhcnROYW1lc3BhY2VE
ZWNsSGFuZGxlciA9IHN0YXJ0OworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRFbmROYW1lc3Bh
Y2VEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgZW5kKSB7CisgIGVuZE5hbWVzcGFj
ZURlY2xIYW5kbGVyID0gZW5kOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXROb3RTdGFuZGFs
b25lSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYTUxfTm90U3RhbmRhbG9uZUhhbmRsZXIgaGFuZGxlcikKK3sKKyAgbm90U3RhbmRhbG9uZUhh
bmRsZXIgPSBoYW5kbGVyOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRFeHRlcm5hbEVudGl0
eVJlZkhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhNTF9FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgaGFuZGxlcikKK3sKKyAgZXh0ZXJu
YWxFbnRpdHlSZWZIYW5kbGVyID0gaGFuZGxlcjsKK30KKwordm9pZCBYTUxDQUxMCitYTUxfU2V0
RXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnKFhNTF9QYXJzZXIgcGFyc2VyLCB2b2lkICphcmcp
Cit7CisgIGlmIChhcmcpCisgICAgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnID0gKFhNTF9Q
YXJzZXIpYXJnOworICBlbHNlCisgICAgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnID0gcGFy
c2VyOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRTa2lwcGVkRW50aXR5SGFuZGxlcihYTUxf
UGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU2tpcHBlZEVu
dGl0eUhhbmRsZXIgaGFuZGxlcikKK3sKKyAgc2tpcHBlZEVudGl0eUhhbmRsZXIgPSBoYW5kbGVy
OworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRVbmtub3duRW5jb2RpbmdIYW5kbGVyKFhNTF9Q
YXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1Vua25vd25F
bmNvZGluZ0hhbmRsZXIgaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKmRhdGEpCit7CisgIHVua25vd25FbmNvZGluZ0hhbmRsZXIgPSBoYW5kbGVyOworICB1bmtu
b3duRW5jb2RpbmdIYW5kbGVyRGF0YSA9IGRhdGE7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1Nl
dEVsZW1lbnREZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgWE1MX0VsZW1lbnREZWNsSGFuZGxlciBlbGRlY2wpCit7CisgIGVsZW1lbnREZWNs
SGFuZGxlciA9IGVsZGVjbDsKK30KKwordm9pZCBYTUxDQUxMCitYTUxfU2V0QXR0bGlzdERlY2xI
YW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxf
QXR0bGlzdERlY2xIYW5kbGVyIGF0dGRlY2wpCit7CisgIGF0dGxpc3REZWNsSGFuZGxlciA9IGF0
dGRlY2w7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldEVudGl0eURlY2xIYW5kbGVyKFhNTF9Q
YXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbnRpdHlEZWNsSGFu
ZGxlciBoYW5kbGVyKQoreworICBlbnRpdHlEZWNsSGFuZGxlciA9IGhhbmRsZXI7Cit9CisKK3Zv
aWQgWE1MQ0FMTAorWE1MX1NldFhtbERlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAg
ICAgICAgICAgICAgICAgICAgIFhNTF9YbWxEZWNsSGFuZGxlciBoYW5kbGVyKSB7CisgIHhtbERl
Y2xIYW5kbGVyID0gaGFuZGxlcjsKK30KKworaW50IFhNTENBTEwKK1hNTF9TZXRQYXJhbUVudGl0
eVBhcnNpbmcoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
dW0gWE1MX1BhcmFtRW50aXR5UGFyc2luZyBwZVBhcnNpbmcpCit7CisgIC8qIGJsb2NrIGFmdGVy
IFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpIGhhcyBiZWVuIGNhbGxlZCAqLworICBpZiAo
cHNfcGFyc2luZyA9PSBYTUxfUEFSU0lORyB8fCBwc19wYXJzaW5nID09IFhNTF9TVVNQRU5ERUQp
CisgICAgcmV0dXJuIDA7CisjaWZkZWYgWE1MX0RURAorICBwYXJhbUVudGl0eVBhcnNpbmcgPSBw
ZVBhcnNpbmc7CisgIHJldHVybiAxOworI2Vsc2UKKyAgcmV0dXJuIHBlUGFyc2luZyA9PSBYTUxf
UEFSQU1fRU5USVRZX1BBUlNJTkdfTkVWRVI7CisjZW5kaWYKK30KKworaW50IFhNTENBTEwKK1hN
TF9TZXRIYXNoU2FsdChYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGhhc2hfc2FsdCkKK3sKKyAgLyogYmxvY2sgYWZ0ZXIgWE1MX1BhcnNlKCkvWE1MX1Bh
cnNlQnVmZmVyKCkgaGFzIGJlZW4gY2FsbGVkICovCisgIGlmIChwc19wYXJzaW5nID09IFhNTF9Q
QVJTSU5HIHx8IHBzX3BhcnNpbmcgPT0gWE1MX1NVU1BFTkRFRCkKKyAgICByZXR1cm4gMDsKKyAg
aGFzaF9zZWNyZXRfc2FsdCA9IGhhc2hfc2FsdDsKKyAgcmV0dXJuIDE7Cit9CisKK2VudW0gWE1M
X1N0YXR1cyBYTUxDQUxMCitYTUxfUGFyc2UoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IGNoYXIg
KnMsIGludCBsZW4sIGludCBpc0ZpbmFsKQoreworICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKKyAg
Y2FzZSBYTUxfU1VTUEVOREVEOgorICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9TVVNQRU5ERUQ7
CisgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgIGNhc2UgWE1MX0ZJTklTSEVEOgorICAg
IGVycm9yQ29kZSA9IFhNTF9FUlJPUl9GSU5JU0hFRDsKKyAgICByZXR1cm4gWE1MX1NUQVRVU19F
UlJPUjsKKyAgY2FzZSBYTUxfSU5JVElBTElaRUQ6CisgICAgaWYgKHBhcmVudFBhcnNlciA9PSBO
VUxMICYmICFzdGFydFBhcnNpbmcocGFyc2VyKSkgeworICAgICAgZXJyb3JDb2RlID0gWE1MX0VS
Uk9SX05PX01FTU9SWTsKKyAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICAgIH0KKyAg
ZGVmYXVsdDoKKyAgICBwc19wYXJzaW5nID0gWE1MX1BBUlNJTkc7CisgIH0KKworICBpZiAobGVu
ID09IDApIHsKKyAgICBwc19maW5hbEJ1ZmZlciA9IChYTUxfQm9vbClpc0ZpbmFsOworICAgIGlm
ICghaXNGaW5hbCkKKyAgICAgIHJldHVybiBYTUxfU1RBVFVTX09LOworICAgIHBvc2l0aW9uUHRy
ID0gYnVmZmVyUHRyOworICAgIHBhcnNlRW5kUHRyID0gYnVmZmVyRW5kOworCisgICAgLyogSWYg
ZGF0YSBhcmUgbGVmdCBvdmVyIGZyb20gbGFzdCBidWZmZXIsIGFuZCB3ZSBub3cga25vdyB0aGF0
IHRoZXNlCisgICAgICAgZGF0YSBhcmUgdGhlIGZpbmFsIGNodW5rIG9mIGlucHV0LCB0aGVuIHdl
IGhhdmUgdG8gY2hlY2sgdGhlbSBhZ2FpbgorICAgICAgIHRvIGRldGVjdCBlcnJvcnMgYmFzZWQg
b24gdGhhdCBmYWN0LgorICAgICovCisgICAgZXJyb3JDb2RlID0gcHJvY2Vzc29yKHBhcnNlciwg
YnVmZmVyUHRyLCBwYXJzZUVuZFB0ciwgJmJ1ZmZlclB0cik7CisKKyAgICBpZiAoZXJyb3JDb2Rl
ID09IFhNTF9FUlJPUl9OT05FKSB7CisgICAgICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKKyAgICAg
IGNhc2UgWE1MX1NVU1BFTkRFRDoKKyAgICAgICAgWG1sVXBkYXRlUG9zaXRpb24oZW5jb2Rpbmcs
IHBvc2l0aW9uUHRyLCBidWZmZXJQdHIsICZwb3NpdGlvbik7CisgICAgICAgIHBvc2l0aW9uUHRy
ID0gYnVmZmVyUHRyOworICAgICAgICByZXR1cm4gWE1MX1NUQVRVU19TVVNQRU5ERUQ7CisgICAg
ICBjYXNlIFhNTF9JTklUSUFMSVpFRDoKKyAgICAgIGNhc2UgWE1MX1BBUlNJTkc6CisgICAgICAg
IHBzX3BhcnNpbmcgPSBYTUxfRklOSVNIRUQ7CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfT0s7CisgICAgICB9Cisg
ICAgfQorICAgIGV2ZW50RW5kUHRyID0gZXZlbnRQdHI7CisgICAgcHJvY2Vzc29yID0gZXJyb3JQ
cm9jZXNzb3I7CisgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgIH0KKyNpZm5kZWYgWE1M
X0NPTlRFWFRfQllURVMKKyAgZWxzZSBpZiAoYnVmZmVyUHRyID09IGJ1ZmZlckVuZCkgeworICAg
IGNvbnN0IGNoYXIgKmVuZDsKKyAgICBpbnQgbkxlZnRPdmVyOworICAgIGVudW0gWE1MX0Vycm9y
IHJlc3VsdDsKKyAgICBwYXJzZUVuZEJ5dGVJbmRleCArPSBsZW47CisgICAgcG9zaXRpb25QdHIg
PSBzOworICAgIHBzX2ZpbmFsQnVmZmVyID0gKFhNTF9Cb29sKWlzRmluYWw7CisKKyAgICBlcnJv
ckNvZGUgPSBwcm9jZXNzb3IocGFyc2VyLCBzLCBwYXJzZUVuZFB0ciA9IHMgKyBsZW4sICZlbmQp
OworCisgICAgaWYgKGVycm9yQ29kZSAhPSBYTUxfRVJST1JfTk9ORSkgeworICAgICAgZXZlbnRF
bmRQdHIgPSBldmVudFB0cjsKKyAgICAgIHByb2Nlc3NvciA9IGVycm9yUHJvY2Vzc29yOworICAg
ICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgc3dp
dGNoIChwc19wYXJzaW5nKSB7CisgICAgICBjYXNlIFhNTF9TVVNQRU5ERUQ6CisgICAgICAgIHJl
c3VsdCA9IFhNTF9TVEFUVVNfU1VTUEVOREVEOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
WE1MX0lOSVRJQUxJWkVEOgorICAgICAgY2FzZSBYTUxfUEFSU0lORzoKKyAgICAgICAgaWYgKGlz
RmluYWwpIHsKKyAgICAgICAgICBwc19wYXJzaW5nID0gWE1MX0ZJTklTSEVEOworICAgICAgICAg
IHJldHVybiBYTUxfU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAvKiBmYWxsIHRocm91Z2gg
Ki8KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdCA9IFhNTF9TVEFUVVNfT0s7CisgICAg
ICB9CisgICAgfQorCisgICAgWG1sVXBkYXRlUG9zaXRpb24oZW5jb2RpbmcsIHBvc2l0aW9uUHRy
LCBlbmQsICZwb3NpdGlvbik7CisgICAgbkxlZnRPdmVyID0gcyArIGxlbiAtIGVuZDsKKyAgICBp
ZiAobkxlZnRPdmVyKSB7CisgICAgICBpZiAoYnVmZmVyID09IE5VTEwgfHwgbkxlZnRPdmVyID4g
YnVmZmVyTGltIC0gYnVmZmVyKSB7CisgICAgICAgIC8qIEZJWE1FIGF2b2lkIGludGVnZXIgb3Zl
cmZsb3cgKi8KKyAgICAgICAgY2hhciAqdGVtcDsKKyAgICAgICAgdGVtcCA9IChidWZmZXIgPT0g
TlVMTAorICAgICAgICAgICAgICAgID8gKGNoYXIgKilNQUxMT0MobGVuICogMikKKyAgICAgICAg
ICAgICAgICA6IChjaGFyICopUkVBTExPQyhidWZmZXIsIGxlbiAqIDIpKTsKKyAgICAgICAgaWYg
KHRlbXAgPT0gTlVMTCkgeworICAgICAgICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT19NRU1P
Ulk7CisgICAgICAgICAgZXZlbnRQdHIgPSBldmVudEVuZFB0ciA9IE5VTEw7CisgICAgICAgICAg
cHJvY2Vzc29yID0gZXJyb3JQcm9jZXNzb3I7CisgICAgICAgICAgcmV0dXJuIFhNTF9TVEFUVVNf
RVJST1I7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gdGVtcDsKKyAgICAgICAgYnVmZmVy
TGltID0gYnVmZmVyICsgbGVuICogMjsKKyAgICAgIH0KKyAgICAgIG1lbWNweShidWZmZXIsIGVu
ZCwgbkxlZnRPdmVyKTsKKyAgICB9CisgICAgYnVmZmVyUHRyID0gYnVmZmVyOworICAgIGJ1ZmZl
ckVuZCA9IGJ1ZmZlciArIG5MZWZ0T3ZlcjsKKyAgICBwb3NpdGlvblB0ciA9IGJ1ZmZlclB0cjsK
KyAgICBwYXJzZUVuZFB0ciA9IGJ1ZmZlckVuZDsKKyAgICBldmVudFB0ciA9IGJ1ZmZlclB0cjsK
KyAgICBldmVudEVuZFB0ciA9IGJ1ZmZlclB0cjsKKyAgICByZXR1cm4gcmVzdWx0OworICB9Cisj
ZW5kaWYgIC8qIG5vdCBkZWZpbmVkIFhNTF9DT05URVhUX0JZVEVTICovCisgIGVsc2UgeworICAg
IHZvaWQgKmJ1ZmYgPSBYTUxfR2V0QnVmZmVyKHBhcnNlciwgbGVuKTsKKyAgICBpZiAoYnVmZiA9
PSBOVUxMKQorICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgICAgZWxzZSB7CisgICAg
ICBtZW1jcHkoYnVmZiwgcywgbGVuKTsKKyAgICAgIHJldHVybiBYTUxfUGFyc2VCdWZmZXIocGFy
c2VyLCBsZW4sIGlzRmluYWwpOworICAgIH0KKyAgfQorfQorCitlbnVtIFhNTF9TdGF0dXMgWE1M
Q0FMTAorWE1MX1BhcnNlQnVmZmVyKFhNTF9QYXJzZXIgcGFyc2VyLCBpbnQgbGVuLCBpbnQgaXNG
aW5hbCkKK3sKKyAgY29uc3QgY2hhciAqc3RhcnQ7CisgIGVudW0gWE1MX1N0YXR1cyByZXN1bHQg
PSBYTUxfU1RBVFVTX09LOworCisgIHN3aXRjaCAocHNfcGFyc2luZykgeworICBjYXNlIFhNTF9T
VVNQRU5ERUQ6CisgICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX1NVU1BFTkRFRDsKKyAgICByZXR1
cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAgY2FzZSBYTUxfRklOSVNIRUQ6CisgICAgZXJyb3JDb2Rl
ID0gWE1MX0VSUk9SX0ZJTklTSEVEOworICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICBj
YXNlIFhNTF9JTklUSUFMSVpFRDoKKyAgICBpZiAocGFyZW50UGFyc2VyID09IE5VTEwgJiYgIXN0
YXJ0UGFyc2luZyhwYXJzZXIpKSB7CisgICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9fTUVN
T1JZOworICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgICAgfQorICBkZWZhdWx0Ogor
ICAgIHBzX3BhcnNpbmcgPSBYTUxfUEFSU0lORzsKKyAgfQorCisgIHN0YXJ0ID0gYnVmZmVyUHRy
OworICBwb3NpdGlvblB0ciA9IHN0YXJ0OworICBidWZmZXJFbmQgKz0gbGVuOworICBwYXJzZUVu
ZFB0ciA9IGJ1ZmZlckVuZDsKKyAgcGFyc2VFbmRCeXRlSW5kZXggKz0gbGVuOworICBwc19maW5h
bEJ1ZmZlciA9IChYTUxfQm9vbClpc0ZpbmFsOworCisgIGVycm9yQ29kZSA9IHByb2Nlc3Nvcihw
YXJzZXIsIHN0YXJ0LCBwYXJzZUVuZFB0ciwgJmJ1ZmZlclB0cik7CisKKyAgaWYgKGVycm9yQ29k
ZSAhPSBYTUxfRVJST1JfTk9ORSkgeworICAgIGV2ZW50RW5kUHRyID0gZXZlbnRQdHI7CisgICAg
cHJvY2Vzc29yID0gZXJyb3JQcm9jZXNzb3I7CisgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7
CisgIH0KKyAgZWxzZSB7CisgICAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgICAgY2FzZSBYTUxf
U1VTUEVOREVEOgorICAgICAgcmVzdWx0ID0gWE1MX1NUQVRVU19TVVNQRU5ERUQ7CisgICAgICBi
cmVhazsKKyAgICBjYXNlIFhNTF9JTklUSUFMSVpFRDoKKyAgICBjYXNlIFhNTF9QQVJTSU5HOgor
ICAgICAgaWYgKGlzRmluYWwpIHsKKyAgICAgICAgcHNfcGFyc2luZyA9IFhNTF9GSU5JU0hFRDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKyAgICBkZWZhdWx0OiA7ICAvKiBzaG91
bGQgbm90IGhhcHBlbiAqLworICAgIH0KKyAgfQorCisgIFhtbFVwZGF0ZVBvc2l0aW9uKGVuY29k
aW5nLCBwb3NpdGlvblB0ciwgYnVmZmVyUHRyLCAmcG9zaXRpb24pOworICBwb3NpdGlvblB0ciA9
IGJ1ZmZlclB0cjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCAqIFhNTENBTEwKK1hNTF9H
ZXRCdWZmZXIoWE1MX1BhcnNlciBwYXJzZXIsIGludCBsZW4pCit7CisvKiBCRUdJTiBNT1pJTExB
IENIQU5HRSAoc2FuaXR5IGNoZWNrIGxlbikgKi8KKyAgaWYgKGxlbiA8IDApIHsKKyAgICBlcnJv
ckNvZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgIHJldHVybiBOVUxMOworICB9CisvKiBF
TkQgTU9aSUxMQSBDSEFOR0UgKi8KKyAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgIGNhc2UgWE1M
X1NVU1BFTkRFRDoKKyAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfU1VTUEVOREVEOworICAgIHJl
dHVybiBOVUxMOworICBjYXNlIFhNTF9GSU5JU0hFRDoKKyAgICBlcnJvckNvZGUgPSBYTUxfRVJS
T1JfRklOSVNIRUQ7CisgICAgcmV0dXJuIE5VTEw7CisgIGRlZmF1bHQ6IDsKKyAgfQorCisgIGlm
IChsZW4gPiBidWZmZXJMaW0gLSBidWZmZXJFbmQpIHsKKyAgICBpbnQgbmVlZGVkU2l6ZSA9IGxl
biArIChpbnQpKGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cik7CisvKiBCRUdJTiBNT1pJTExBIENIQU5H
RSAoc2FuaXR5IGNoZWNrIG5lZWRlZFNpemUpICovCisgICAgaWYgKG5lZWRlZFNpemUgPCAwKSB7
CisgICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorLyogRU5EIE1PWklMTEEgQ0hBTkdFICovCisjaWZkZWYgWE1MX0NPTlRFWFRf
QllURVMKKyAgICBpbnQga2VlcCA9IChpbnQpKGJ1ZmZlclB0ciAtIGJ1ZmZlcik7CisKKyAgICBp
ZiAoa2VlcCA+IFhNTF9DT05URVhUX0JZVEVTKQorICAgICAga2VlcCA9IFhNTF9DT05URVhUX0JZ
VEVTOworICAgIG5lZWRlZFNpemUgKz0ga2VlcDsKKyNlbmRpZiAgLyogZGVmaW5lZCBYTUxfQ09O
VEVYVF9CWVRFUyAqLworICAgIGlmIChuZWVkZWRTaXplICA8PSBidWZmZXJMaW0gLSBidWZmZXIp
IHsKKyNpZmRlZiBYTUxfQ09OVEVYVF9CWVRFUworICAgICAgaWYgKGtlZXAgPCBidWZmZXJQdHIg
LSBidWZmZXIpIHsKKyAgICAgICAgaW50IG9mZnNldCA9IChpbnQpKGJ1ZmZlclB0ciAtIGJ1ZmZl
cikgLSBrZWVwOworICAgICAgICBtZW1tb3ZlKGJ1ZmZlciwgJmJ1ZmZlcltvZmZzZXRdLCBidWZm
ZXJFbmQgLSBidWZmZXJQdHIgKyBrZWVwKTsKKyAgICAgICAgYnVmZmVyRW5kIC09IG9mZnNldDsK
KyAgICAgICAgYnVmZmVyUHRyIC09IG9mZnNldDsKKyAgICAgIH0KKyNlbHNlCisgICAgICBtZW1t
b3ZlKGJ1ZmZlciwgYnVmZmVyUHRyLCBidWZmZXJFbmQgLSBidWZmZXJQdHIpOworICAgICAgYnVm
ZmVyRW5kID0gYnVmZmVyICsgKGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cik7CisgICAgICBidWZmZXJQ
dHIgPSBidWZmZXI7CisjZW5kaWYgIC8qIG5vdCBkZWZpbmVkIFhNTF9DT05URVhUX0JZVEVTICov
CisgICAgfQorICAgIGVsc2UgeworICAgICAgY2hhciAqbmV3QnVmOworICAgICAgaW50IGJ1ZmZl
clNpemUgPSAoaW50KShidWZmZXJMaW0gLSBidWZmZXJQdHIpOworICAgICAgaWYgKGJ1ZmZlclNp
emUgPT0gMCkKKyAgICAgICAgYnVmZmVyU2l6ZSA9IElOSVRfQlVGRkVSX1NJWkU7CisgICAgICBk
byB7CisgICAgICAgIGJ1ZmZlclNpemUgKj0gMjsKKy8qIEJFR0lOIE1PWklMTEEgQ0hBTkdFIChw
cmV2ZW50IGluZmluaXRlIGxvb3Agb24gb3ZlcmZsb3cpICovCisgICAgICB9IHdoaWxlIChidWZm
ZXJTaXplIDwgbmVlZGVkU2l6ZSAmJiBidWZmZXJTaXplID4gMCk7CisvKiBFTkQgTU9aSUxMQSBD
SEFOR0UgKi8KKy8qIEJFR0lOIE1PWklMTEEgQ0hBTkdFIChzYW5pdHkgY2hlY2sgYnVmZmVyU2l6
ZSkgKi8KKyAgICAgIGlmIChidWZmZXJTaXplIDw9IDApIHsKKyAgICAgICAgZXJyb3JDb2RlID0g
WE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisvKiBF
TkQgTU9aSUxMQSBDSEFOR0UgKi8KKyAgICAgIG5ld0J1ZiA9IChjaGFyICopTUFMTE9DKGJ1ZmZl
clNpemUpOworICAgICAgaWYgKG5ld0J1ZiA9PSAwKSB7CisgICAgICAgIGVycm9yQ29kZSA9IFhN
TF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgICAg
YnVmZmVyTGltID0gbmV3QnVmICsgYnVmZmVyU2l6ZTsKKyNpZmRlZiBYTUxfQ09OVEVYVF9CWVRF
UworICAgICAgaWYgKGJ1ZmZlclB0cikgeworICAgICAgICBpbnQga2VlcCA9IChpbnQpKGJ1ZmZl
clB0ciAtIGJ1ZmZlcik7CisgICAgICAgIGlmIChrZWVwID4gWE1MX0NPTlRFWFRfQllURVMpCisg
ICAgICAgICAga2VlcCA9IFhNTF9DT05URVhUX0JZVEVTOworICAgICAgICBtZW1jcHkobmV3QnVm
LCAmYnVmZmVyUHRyWy1rZWVwXSwgYnVmZmVyRW5kIC0gYnVmZmVyUHRyICsga2VlcCk7CisgICAg
ICAgIEZSRUUoYnVmZmVyKTsKKyAgICAgICAgYnVmZmVyID0gbmV3QnVmOworICAgICAgICBidWZm
ZXJFbmQgPSBidWZmZXIgKyAoYnVmZmVyRW5kIC0gYnVmZmVyUHRyKSArIGtlZXA7CisgICAgICAg
IGJ1ZmZlclB0ciA9IGJ1ZmZlciArIGtlZXA7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAg
ICAgYnVmZmVyRW5kID0gbmV3QnVmICsgKGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cik7CisgICAgICAg
IGJ1ZmZlclB0ciA9IGJ1ZmZlciA9IG5ld0J1ZjsKKyAgICAgIH0KKyNlbHNlCisgICAgICBpZiAo
YnVmZmVyUHRyKSB7CisgICAgICAgIG1lbWNweShuZXdCdWYsIGJ1ZmZlclB0ciwgYnVmZmVyRW5k
IC0gYnVmZmVyUHRyKTsKKyAgICAgICAgRlJFRShidWZmZXIpOworICAgICAgfQorICAgICAgYnVm
ZmVyRW5kID0gbmV3QnVmICsgKGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cik7CisgICAgICBidWZmZXJQ
dHIgPSBidWZmZXIgPSBuZXdCdWY7CisjZW5kaWYgIC8qIG5vdCBkZWZpbmVkIFhNTF9DT05URVhU
X0JZVEVTICovCisgICAgfQorICAgIGV2ZW50UHRyID0gZXZlbnRFbmRQdHIgPSBOVUxMOworICAg
IHBvc2l0aW9uUHRyID0gTlVMTDsKKyAgfQorICByZXR1cm4gYnVmZmVyRW5kOworfQorCitlbnVt
IFhNTF9TdGF0dXMgWE1MQ0FMTAorWE1MX1N0b3BQYXJzZXIoWE1MX1BhcnNlciBwYXJzZXIsIFhN
TF9Cb29sIHJlc3VtYWJsZSkKK3sKKyAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgIGNhc2UgWE1M
X1NVU1BFTkRFRDoKKyAgICBpZiAocmVzdW1hYmxlKSB7CisgICAgICBlcnJvckNvZGUgPSBYTUxf
RVJST1JfU1VTUEVOREVEOworICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgICAgfQor
ICAgIHBzX3BhcnNpbmcgPSBYTUxfRklOSVNIRUQ7CisgICAgYnJlYWs7CisgIGNhc2UgWE1MX0ZJ
TklTSEVEOgorICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9GSU5JU0hFRDsKKyAgICByZXR1cm4g
WE1MX1NUQVRVU19FUlJPUjsKKyAgZGVmYXVsdDoKKyAgICBpZiAocmVzdW1hYmxlKSB7CisjaWZk
ZWYgWE1MX0RURAorICAgICAgaWYgKGlzUGFyYW1FbnRpdHkpIHsKKyAgICAgICAgZXJyb3JDb2Rl
ID0gWE1MX0VSUk9SX1NVU1BFTkRfUEU7CisgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9S
OworICAgICAgfQorI2VuZGlmCisgICAgICBwc19wYXJzaW5nID0gWE1MX1NVU1BFTkRFRDsKKyAg
ICB9CisgICAgZWxzZQorICAgICAgcHNfcGFyc2luZyA9IFhNTF9GSU5JU0hFRDsKKyAgfQorICBy
ZXR1cm4gWE1MX1NUQVRVU19PSzsKK30KKworZW51bSBYTUxfU3RhdHVzIFhNTENBTEwKK1hNTF9S
ZXN1bWVQYXJzZXIoWE1MX1BhcnNlciBwYXJzZXIpCit7CisgIGVudW0gWE1MX1N0YXR1cyByZXN1
bHQgPSBYTUxfU1RBVFVTX09LOworCisgIGlmIChwc19wYXJzaW5nICE9IFhNTF9TVVNQRU5ERUQp
IHsKKyAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9UX1NVU1BFTkRFRDsKKyAgICByZXR1cm4g
WE1MX1NUQVRVU19FUlJPUjsKKyAgfQorICBwc19wYXJzaW5nID0gWE1MX1BBUlNJTkc7CisKKyAg
ZXJyb3JDb2RlID0gcHJvY2Vzc29yKHBhcnNlciwgYnVmZmVyUHRyLCBwYXJzZUVuZFB0ciwgJmJ1
ZmZlclB0cik7CisKKyAgaWYgKGVycm9yQ29kZSAhPSBYTUxfRVJST1JfTk9ORSkgeworICAgIGV2
ZW50RW5kUHRyID0gZXZlbnRQdHI7CisgICAgcHJvY2Vzc29yID0gZXJyb3JQcm9jZXNzb3I7Cisg
ICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgIH0KKyAgZWxzZSB7CisgICAgc3dpdGNoIChw
c19wYXJzaW5nKSB7CisgICAgY2FzZSBYTUxfU1VTUEVOREVEOgorICAgICAgcmVzdWx0ID0gWE1M
X1NUQVRVU19TVVNQRU5ERUQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9JTklUSUFMSVpF
RDoKKyAgICBjYXNlIFhNTF9QQVJTSU5HOgorICAgICAgaWYgKHBzX2ZpbmFsQnVmZmVyKSB7Cisg
ICAgICAgIHBzX3BhcnNpbmcgPSBYTUxfRklOSVNIRUQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICB9CisgICAgZGVmYXVsdDogOworICAgIH0KKyAgfQorCisgIFhtbFVwZGF0ZVBvc2l0
aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgYnVmZmVyUHRyLCAmcG9zaXRpb24pOworICBwb3Np
dGlvblB0ciA9IGJ1ZmZlclB0cjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBYTUxDQUxM
CitYTUxfR2V0UGFyc2luZ1N0YXR1cyhYTUxfUGFyc2VyIHBhcnNlciwgWE1MX1BhcnNpbmdTdGF0
dXMgKnN0YXR1cykKK3sKKyAgYXNzZXJ0KHN0YXR1cyAhPSBOVUxMKTsKKyAgKnN0YXR1cyA9IHBh
cnNlci0+bV9wYXJzaW5nU3RhdHVzOworfQorCitlbnVtIFhNTF9FcnJvciBYTUxDQUxMCitYTUxf
R2V0RXJyb3JDb2RlKFhNTF9QYXJzZXIgcGFyc2VyKQoreworICByZXR1cm4gZXJyb3JDb2RlOwor
fQorCitYTUxfSW5kZXggWE1MQ0FMTAorWE1MX0dldEN1cnJlbnRCeXRlSW5kZXgoWE1MX1BhcnNl
ciBwYXJzZXIpCit7CisgIGlmIChldmVudFB0cikKKyAgICByZXR1cm4gcGFyc2VFbmRCeXRlSW5k
ZXggLSAocGFyc2VFbmRQdHIgLSBldmVudFB0cik7CisgIHJldHVybiAtMTsKK30KKworaW50IFhN
TENBTEwKK1hNTF9HZXRDdXJyZW50Qnl0ZUNvdW50KFhNTF9QYXJzZXIgcGFyc2VyKQoreworICBp
ZiAoZXZlbnRFbmRQdHIgJiYgZXZlbnRQdHIpCisgICAgcmV0dXJuIChpbnQpKGV2ZW50RW5kUHRy
IC0gZXZlbnRQdHIpOworICByZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqIFhNTENBTEwKK1hN
TF9HZXRJbnB1dENvbnRleHQoWE1MX1BhcnNlciBwYXJzZXIsIGludCAqb2Zmc2V0LCBpbnQgKnNp
emUpCit7CisjaWZkZWYgWE1MX0NPTlRFWFRfQllURVMKKyAgaWYgKGV2ZW50UHRyICYmIGJ1ZmZl
cikgeworICAgICpvZmZzZXQgPSAoaW50KShldmVudFB0ciAtIGJ1ZmZlcik7CisgICAgKnNpemUg
ICA9IChpbnQpKGJ1ZmZlckVuZCAtIGJ1ZmZlcik7CisgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgfQor
I2VuZGlmIC8qIGRlZmluZWQgWE1MX0NPTlRFWFRfQllURVMgKi8KKyAgcmV0dXJuIChjaGFyICop
IDA7Cit9CisKK1hNTF9TaXplIFhNTENBTEwKK1hNTF9HZXRDdXJyZW50TGluZU51bWJlcihYTUxf
UGFyc2VyIHBhcnNlcikKK3sKKyAgaWYgKGV2ZW50UHRyICYmIGV2ZW50UHRyID49IHBvc2l0aW9u
UHRyKSB7CisgICAgWG1sVXBkYXRlUG9zaXRpb24oZW5jb2RpbmcsIHBvc2l0aW9uUHRyLCBldmVu
dFB0ciwgJnBvc2l0aW9uKTsKKyAgICBwb3NpdGlvblB0ciA9IGV2ZW50UHRyOworICB9CisgIHJl
dHVybiBwb3NpdGlvbi5saW5lTnVtYmVyICsgMTsKK30KKworWE1MX1NpemUgWE1MQ0FMTAorWE1M
X0dldEN1cnJlbnRDb2x1bW5OdW1iZXIoWE1MX1BhcnNlciBwYXJzZXIpCit7CisgIGlmIChldmVu
dFB0ciAmJiBldmVudFB0ciA+PSBwb3NpdGlvblB0cikgeworICAgIFhtbFVwZGF0ZVBvc2l0aW9u
KGVuY29kaW5nLCBwb3NpdGlvblB0ciwgZXZlbnRQdHIsICZwb3NpdGlvbik7CisgICAgcG9zaXRp
b25QdHIgPSBldmVudFB0cjsKKyAgfQorICByZXR1cm4gcG9zaXRpb24uY29sdW1uTnVtYmVyOwor
fQorCit2b2lkIFhNTENBTEwKK1hNTF9GcmVlQ29udGVudE1vZGVsKFhNTF9QYXJzZXIgcGFyc2Vy
LCBYTUxfQ29udGVudCAqbW9kZWwpCit7CisgIEZSRUUobW9kZWwpOworfQorCit2b2lkICogWE1M
Q0FMTAorWE1MX01lbU1hbGxvYyhYTUxfUGFyc2VyIHBhcnNlciwgc2l6ZV90IHNpemUpCit7Cisg
IHJldHVybiBNQUxMT0Moc2l6ZSk7Cit9CisKK3ZvaWQgKiBYTUxDQUxMCitYTUxfTWVtUmVhbGxv
YyhYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJu
IFJFQUxMT0MocHRyLCBzaXplKTsKK30KKwordm9pZCBYTUxDQUxMCitYTUxfTWVtRnJlZShYTUxf
UGFyc2VyIHBhcnNlciwgdm9pZCAqcHRyKQoreworICBGUkVFKHB0cik7Cit9CisKK3ZvaWQgWE1M
Q0FMTAorWE1MX0RlZmF1bHRDdXJyZW50KFhNTF9QYXJzZXIgcGFyc2VyKQoreworICBpZiAoZGVm
YXVsdEhhbmRsZXIpIHsKKyAgICBpZiAob3BlbkludGVybmFsRW50aXRpZXMpCisgICAgICByZXBv
cnREZWZhdWx0KHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxFbmNvZGluZywK
KyAgICAgICAgICAgICAgICAgICAgb3BlbkludGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRQ
dHIsCisgICAgICAgICAgICAgICAgICAgIG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2
ZW50RW5kUHRyKTsKKyAgICBlbHNlCisgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jb2Rp
bmcsIGV2ZW50UHRyLCBldmVudEVuZFB0cik7CisgIH0KK30KKworY29uc3QgWE1MX0xDaGFyICog
WE1MQ0FMTAorWE1MX0Vycm9yU3RyaW5nKGVudW0gWE1MX0Vycm9yIGNvZGUpCit7CisgIHN0YXRp
YyBjb25zdCBYTUxfTENoYXIqIGNvbnN0IG1lc3NhZ2VbXSA9IHsKKyAgICAwLAorICAgIFhNTF9M
KCJvdXQgb2YgbWVtb3J5IiksCisgICAgWE1MX0woInN5bnRheCBlcnJvciIpLAorICAgIFhNTF9M
KCJubyBlbGVtZW50IGZvdW5kIiksCisgICAgWE1MX0woIm5vdCB3ZWxsLWZvcm1lZCAoaW52YWxp
ZCB0b2tlbikiKSwKKyAgICBYTUxfTCgidW5jbG9zZWQgdG9rZW4iKSwKKyAgICBYTUxfTCgicGFy
dGlhbCBjaGFyYWN0ZXIiKSwKKyAgICBYTUxfTCgibWlzbWF0Y2hlZCB0YWciKSwKKyAgICBYTUxf
TCgiZHVwbGljYXRlIGF0dHJpYnV0ZSIpLAorICAgIFhNTF9MKCJqdW5rIGFmdGVyIGRvY3VtZW50
IGVsZW1lbnQiKSwKKyAgICBYTUxfTCgiaWxsZWdhbCBwYXJhbWV0ZXIgZW50aXR5IHJlZmVyZW5j
ZSIpLAorICAgIFhNTF9MKCJ1bmRlZmluZWQgZW50aXR5IiksCisgICAgWE1MX0woInJlY3Vyc2l2
ZSBlbnRpdHkgcmVmZXJlbmNlIiksCisgICAgWE1MX0woImFzeW5jaHJvbm91cyBlbnRpdHkiKSwK
KyAgICBYTUxfTCgicmVmZXJlbmNlIHRvIGludmFsaWQgY2hhcmFjdGVyIG51bWJlciIpLAorICAg
IFhNTF9MKCJyZWZlcmVuY2UgdG8gYmluYXJ5IGVudGl0eSIpLAorICAgIFhNTF9MKCJyZWZlcmVu
Y2UgdG8gZXh0ZXJuYWwgZW50aXR5IGluIGF0dHJpYnV0ZSIpLAorICAgIFhNTF9MKCJYTUwgb3Ig
dGV4dCBkZWNsYXJhdGlvbiBub3QgYXQgc3RhcnQgb2YgZW50aXR5IiksCisgICAgWE1MX0woInVu
a25vd24gZW5jb2RpbmciKSwKKyAgICBYTUxfTCgiZW5jb2Rpbmcgc3BlY2lmaWVkIGluIFhNTCBk
ZWNsYXJhdGlvbiBpcyBpbmNvcnJlY3QiKSwKKyAgICBYTUxfTCgidW5jbG9zZWQgQ0RBVEEgc2Vj
dGlvbiIpLAorICAgIFhNTF9MKCJlcnJvciBpbiBwcm9jZXNzaW5nIGV4dGVybmFsIGVudGl0eSBy
ZWZlcmVuY2UiKSwKKyAgICBYTUxfTCgiZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUiKSwKKyAg
ICBYTUxfTCgidW5leHBlY3RlZCBwYXJzZXIgc3RhdGUgLSBwbGVhc2Ugc2VuZCBhIGJ1ZyByZXBv
cnQiKSwKKyAgICBYTUxfTCgiZW50aXR5IGRlY2xhcmVkIGluIHBhcmFtZXRlciBlbnRpdHkiKSwK
KyAgICBYTUxfTCgicmVxdWVzdGVkIGZlYXR1cmUgcmVxdWlyZXMgWE1MX0RURCBzdXBwb3J0IGlu
IEV4cGF0IiksCisgICAgWE1MX0woImNhbm5vdCBjaGFuZ2Ugc2V0dGluZyBvbmNlIHBhcnNpbmcg
aGFzIGJlZ3VuIiksCisgICAgWE1MX0woInVuYm91bmQgcHJlZml4IiksCisgICAgWE1MX0woIm11
c3Qgbm90IHVuZGVjbGFyZSBwcmVmaXgiKSwKKyAgICBYTUxfTCgiaW5jb21wbGV0ZSBtYXJrdXAg
aW4gcGFyYW1ldGVyIGVudGl0eSIpLAorICAgIFhNTF9MKCJYTUwgZGVjbGFyYXRpb24gbm90IHdl
bGwtZm9ybWVkIiksCisgICAgWE1MX0woInRleHQgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVk
IiksCisgICAgWE1MX0woImlsbGVnYWwgY2hhcmFjdGVyKHMpIGluIHB1YmxpYyBpZCIpLAorICAg
IFhNTF9MKCJwYXJzZXIgc3VzcGVuZGVkIiksCisgICAgWE1MX0woInBhcnNlciBub3Qgc3VzcGVu
ZGVkIiksCisgICAgWE1MX0woInBhcnNpbmcgYWJvcnRlZCIpLAorICAgIFhNTF9MKCJwYXJzaW5n
IGZpbmlzaGVkIiksCisgICAgWE1MX0woImNhbm5vdCBzdXNwZW5kIGluIGV4dGVybmFsIHBhcmFt
ZXRlciBlbnRpdHkiKSwKKyAgICBYTUxfTCgicmVzZXJ2ZWQgcHJlZml4ICh4bWwpIG11c3Qgbm90
IGJlIHVuZGVjbGFyZWQgb3IgYm91bmQgdG8gYW5vdGhlciBuYW1lc3BhY2UgbmFtZSIpLAorICAg
IFhNTF9MKCJyZXNlcnZlZCBwcmVmaXggKHhtbG5zKSBtdXN0IG5vdCBiZSBkZWNsYXJlZCBvciB1
bmRlY2xhcmVkIiksCisgICAgWE1MX0woInByZWZpeCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUg
b2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1lcyIpCisgIH07CisgIGlmIChjb2RlID4gMCAm
JiBjb2RlIDwgc2l6ZW9mKG1lc3NhZ2UpL3NpemVvZihtZXNzYWdlWzBdKSkKKyAgICByZXR1cm4g
bWVzc2FnZVtjb2RlXTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IFhNTF9MQ2hhciAqIFhN
TENBTEwKK1hNTF9FeHBhdFZlcnNpb24odm9pZCkgeworCisgIC8qIFYxIGlzIHVzZWQgdG8gc3Ry
aW5nLWl6ZSB0aGUgdmVyc2lvbiBudW1iZXIuIEhvd2V2ZXIsIGl0IHdvdWxkCisgICAgIHN0cmlu
Zy1pemUgdGhlIGFjdHVhbCB2ZXJzaW9uIG1hY3JvICpuYW1lcyogdW5sZXNzIHdlIGdldCB0aGVt
CisgICAgIHN1YnN0aXR1dGVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gVjEuIENQUCBpcyBkZWZp
bmVkIHRvIGV4cGFuZAorICAgICBhIG1hY3JvLCB0aGVuIHJlc2NhbiBmb3IgbW9yZSBleHBhbnNp
b25zLiBUaHVzLCB3ZSB1c2UgVjIgdG8gZXhwYW5kCisgICAgIHRoZSB2ZXJzaW9uIG1hY3Jvcywg
dGhlbiBDUFAgd2lsbCBleHBhbmQgdGhlIHJlc3VsdGluZyBWMSgpIG1hY3JvCisgICAgIHdpdGgg
dGhlIGNvcnJlY3QgbnVtZXJhbHMuICovCisgIC8qICMjIyBJJ20gYXNzdW1pbmcgY3BwIGlzIHBv
cnRhYmxlIGluIHRoaXMgcmVzcGVjdC4uLiAqLworCisjZGVmaW5lIFYxKGEsYixjKSBYTUxfTCgj
YSlYTUxfTCgiLiIpWE1MX0woI2IpWE1MX0woIi4iKVhNTF9MKCNjKQorI2RlZmluZSBWMihhLGIs
YykgWE1MX0woImV4cGF0XyIpVjEoYSxiLGMpCisKKyAgcmV0dXJuIFYyKFhNTF9NQUpPUl9WRVJT
SU9OLCBYTUxfTUlOT1JfVkVSU0lPTiwgWE1MX01JQ1JPX1ZFUlNJT04pOworCisjdW5kZWYgVjEK
KyN1bmRlZiBWMgorfQorCitYTUxfRXhwYXRfVmVyc2lvbiBYTUxDQUxMCitYTUxfRXhwYXRWZXJz
aW9uSW5mbyh2b2lkKQoreworICBYTUxfRXhwYXRfVmVyc2lvbiB2ZXJzaW9uOworCisgIHZlcnNp
b24ubWFqb3IgPSBYTUxfTUFKT1JfVkVSU0lPTjsKKyAgdmVyc2lvbi5taW5vciA9IFhNTF9NSU5P
Ul9WRVJTSU9OOworICB2ZXJzaW9uLm1pY3JvID0gWE1MX01JQ1JPX1ZFUlNJT047CisKKyAgcmV0
dXJuIHZlcnNpb247Cit9CisKK2NvbnN0IFhNTF9GZWF0dXJlICogWE1MQ0FMTAorWE1MX0dldEZl
YXR1cmVMaXN0KHZvaWQpCit7CisgIHN0YXRpYyBjb25zdCBYTUxfRmVhdHVyZSBmZWF0dXJlc1td
ID0geworICAgIHtYTUxfRkVBVFVSRV9TSVpFT0ZfWE1MX0NIQVIsICBYTUxfTCgic2l6ZW9mKFhN
TF9DaGFyKSIpLAorICAgICBzaXplb2YoWE1MX0NoYXIpfSwKKyAgICB7WE1MX0ZFQVRVUkVfU0la
RU9GX1hNTF9MQ0hBUiwgWE1MX0woInNpemVvZihYTUxfTENoYXIpIiksCisgICAgIHNpemVvZihY
TUxfTENoYXIpfSwKKyNpZmRlZiBYTUxfVU5JQ09ERQorICAgIHtYTUxfRkVBVFVSRV9VTklDT0RF
LCAgICAgICAgICBYTUxfTCgiWE1MX1VOSUNPREUiKSwgMH0sCisjZW5kaWYKKyNpZmRlZiBYTUxf
VU5JQ09ERV9XQ0hBUl9UCisgICAge1hNTF9GRUFUVVJFX1VOSUNPREVfV0NIQVJfVCwgIFhNTF9M
KCJYTUxfVU5JQ09ERV9XQ0hBUl9UIiksIDB9LAorI2VuZGlmCisjaWZkZWYgWE1MX0RURAorICAg
IHtYTUxfRkVBVFVSRV9EVEQsICAgICAgICAgICAgICBYTUxfTCgiWE1MX0RURCIpLCAwfSwKKyNl
bmRpZgorI2lmZGVmIFhNTF9DT05URVhUX0JZVEVTCisgICAge1hNTF9GRUFUVVJFX0NPTlRFWFRf
QllURVMsICAgIFhNTF9MKCJYTUxfQ09OVEVYVF9CWVRFUyIpLAorICAgICBYTUxfQ09OVEVYVF9C
WVRFU30sCisjZW5kaWYKKyNpZmRlZiBYTUxfTUlOX1NJWkUKKyAgICB7WE1MX0ZFQVRVUkVfTUlO
X1NJWkUsICAgICAgICAgWE1MX0woIlhNTF9NSU5fU0laRSIpLCAwfSwKKyNlbmRpZgorI2lmZGVm
IFhNTF9OUworICAgIHtYTUxfRkVBVFVSRV9OUywgICAgICAgICAgICAgICBYTUxfTCgiWE1MX05T
IiksIDB9LAorI2VuZGlmCisjaWZkZWYgWE1MX0xBUkdFX1NJWkUKKyAgICB7WE1MX0ZFQVRVUkVf
TEFSR0VfU0laRSwgICAgICAgWE1MX0woIlhNTF9MQVJHRV9TSVpFIiksIDB9LAorI2VuZGlmCisj
aWZkZWYgWE1MX0FUVFJfSU5GTworICAgIHtYTUxfRkVBVFVSRV9BVFRSX0lORk8sICAgICAgICBY
TUxfTCgiWE1MX0FUVFJfSU5GTyIpLCAwfSwKKyNlbmRpZgorICAgIHtYTUxfRkVBVFVSRV9FTkQs
ICAgICAgICAgICAgICBOVUxMLCAwfQorICB9OworCisgIHJldHVybiBmZWF0dXJlczsKK30KKwor
LyogSW5pdGlhbGx5IHRhZy0+cmF3TmFtZSBhbHdheXMgcG9pbnRzIGludG8gdGhlIHBhcnNlIGJ1
ZmZlcjsKKyAgIGZvciB0aG9zZSBUQUcgaW5zdGFuY2VzIG9wZW5lZCB3aGlsZSB0aGUgY3VycmVu
dCBwYXJzZSBidWZmZXIgd2FzCisgICBwcm9jZXNzZWQsIGFuZCBub3QgeWV0IGNsb3NlZCwgd2Ug
bmVlZCB0byBzdG9yZSB0YWctPnJhd05hbWUgaW4gYSBtb3JlCisgICBwZXJtYW5lbnQgbG9jYXRp
b24sIHNpbmNlIHRoZSBwYXJzZSBidWZmZXIgaXMgYWJvdXQgdG8gYmUgZGlzY2FyZGVkLgorKi8K
K3N0YXRpYyBYTUxfQm9vbAorc3RvcmVSYXdOYW1lcyhYTUxfUGFyc2VyIHBhcnNlcikKK3sKKyAg
VEFHICp0YWcgPSB0YWdTdGFjazsKKyAgd2hpbGUgKHRhZykgeworICAgIGludCBidWZTaXplOwor
ICAgIGludCBuYW1lTGVuID0gc2l6ZW9mKFhNTF9DaGFyKSAqICh0YWctPm5hbWUuc3RyTGVuICsg
MSk7CisgICAgY2hhciAqcmF3TmFtZUJ1ZiA9IHRhZy0+YnVmICsgbmFtZUxlbjsKKyAgICAvKiBT
dG9wIGlmIGFscmVhZHkgc3RvcmVkLiAgU2luY2UgdGFnU3RhY2sgaXMgYSBzdGFjaywgd2UgY2Fu
IHN0b3AKKyAgICAgICBhdCB0aGUgZmlyc3QgZW50cnkgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNv
cGllZDsgZXZlcnl0aGluZworICAgICAgIGJlbG93IGl0IGluIHRoZSBzdGFjayBpcyBhbHJlYWR5
IGJlZW4gYWNjb3VudGVkIGZvciBpbiBhCisgICAgICAgcHJldmlvdXMgY2FsbCB0byB0aGlzIGZ1
bmN0aW9uLgorICAgICovCisgICAgaWYgKHRhZy0+cmF3TmFtZSA9PSByYXdOYW1lQnVmKQorICAg
ICAgYnJlYWs7CisgICAgLyogRm9yIHJlLXVzZSBwdXJwb3NlcyB3ZSBuZWVkIHRvIGVuc3VyZSB0
aGF0IHRoZQorICAgICAgIHNpemUgb2YgdGFnLT5idWYgaXMgYSBtdWx0aXBsZSBvZiBzaXplb2Yo
WE1MX0NoYXIpLgorICAgICovCisgICAgYnVmU2l6ZSA9IG5hbWVMZW4gKyBST1VORF9VUCh0YWct
PnJhd05hbWVMZW5ndGgsIHNpemVvZihYTUxfQ2hhcikpOworICAgIGlmIChidWZTaXplID4gdGFn
LT5idWZFbmQgLSB0YWctPmJ1ZikgeworICAgICAgY2hhciAqdGVtcCA9IChjaGFyICopUkVBTExP
Qyh0YWctPmJ1ZiwgYnVmU2l6ZSk7CisgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICBy
ZXR1cm4gWE1MX0ZBTFNFOworICAgICAgLyogaWYgdGFnLT5uYW1lLnN0ciBwb2ludHMgdG8gdGFn
LT5idWYgKG9ubHkgd2hlbiBuYW1lc3BhY2UKKyAgICAgICAgIHByb2Nlc3NpbmcgaXMgb2ZmKSB0
aGVuIHdlIGhhdmUgdG8gdXBkYXRlIGl0CisgICAgICAqLworICAgICAgaWYgKHRhZy0+bmFtZS5z
dHIgPT0gKFhNTF9DaGFyICopdGFnLT5idWYpCisgICAgICAgIHRhZy0+bmFtZS5zdHIgPSAoWE1M
X0NoYXIgKil0ZW1wOworICAgICAgLyogaWYgdGFnLT5uYW1lLmxvY2FsUGFydCBpcyBzZXQgKHdo
ZW4gbmFtZXNwYWNlIHByb2Nlc3NpbmcgaXMgb24pCisgICAgICAgICB0aGVuIHVwZGF0ZSBpdCBh
cyB3ZWxsLCBzaW5jZSBpdCB3aWxsIGFsd2F5cyBwb2ludCBpbnRvIHRhZy0+YnVmCisgICAgICAq
LworICAgICAgaWYgKHRhZy0+bmFtZS5sb2NhbFBhcnQpCisgICAgICAgIHRhZy0+bmFtZS5sb2Nh
bFBhcnQgPSAoWE1MX0NoYXIgKil0ZW1wICsgKHRhZy0+bmFtZS5sb2NhbFBhcnQgLQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWE1MX0NoYXIgKil0
YWctPmJ1Zik7CisgICAgICB0YWctPmJ1ZiA9IHRlbXA7CisgICAgICB0YWctPmJ1ZkVuZCA9IHRl
bXAgKyBidWZTaXplOworICAgICAgcmF3TmFtZUJ1ZiA9IHRlbXAgKyBuYW1lTGVuOworICAgIH0K
KyAgICBtZW1jcHkocmF3TmFtZUJ1ZiwgdGFnLT5yYXdOYW1lLCB0YWctPnJhd05hbWVMZW5ndGgp
OworICAgIHRhZy0+cmF3TmFtZSA9IHJhd05hbWVCdWY7CisgICAgdGFnID0gdGFnLT5wYXJlbnQ7
CisgIH0KKyAgcmV0dXJuIFhNTF9UUlVFOworfQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRS
Q0FMTAorY29udGVudFByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwK
KyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuZFB0cikKK3sKKyAgZW51bSBYTUxfRXJy
b3IgcmVzdWx0ID0gZG9Db250ZW50KHBhcnNlciwgMCwgZW5jb2RpbmcsIHN0YXJ0LCBlbmQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQdHIsIChYTUxfQm9vbCkhcHNf
ZmluYWxCdWZmZXIpOworICBpZiAocmVzdWx0ID09IFhNTF9FUlJPUl9OT05FKSB7CisgICAgaWYg
KCFzdG9yZVJhd05hbWVzKHBhcnNlcikpCisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9S
WTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRS
Q0FMTAorZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQoreworICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBp
bml0aWFsaXplRW5jb2RpbmcocGFyc2VyKTsKKyAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9O
RSkKKyAgICByZXR1cm4gcmVzdWx0OworICBwcm9jZXNzb3IgPSBleHRlcm5hbEVudGl0eUluaXRQ
cm9jZXNzb3IyOworICByZXR1cm4gZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yMihwYXJzZXIs
IHN0YXJ0LCBlbmQsIGVuZFB0cik7Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxM
CitleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQoreworICBjb25zdCBjaGFyICpuZXh0ID0gc3RhcnQ7
IC8qIFhtbENvbnRlbnRUb2sgZG9lc24ndCBhbHdheXMgc2V0IHRoZSBsYXN0IGFyZyAqLworICBp
bnQgdG9rID0gWG1sQ29udGVudFRvayhlbmNvZGluZywgc3RhcnQsIGVuZCwgJm5leHQpOworICBz
d2l0Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tfQk9NOgorICAgIC8qIElmIHdlIGFyZSBhdCB0
aGUgZW5kIG9mIHRoZSBidWZmZXIsIHRoaXMgd291bGQgY2F1c2UgdGhlIG5leHQgc3RhZ2UsCisg
ICAgICAgaS5lLiBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IzLCB0byBwYXNzIGNvbnRyb2wg
ZGlyZWN0bHkgdG8KKyAgICAgICBkb0NvbnRlbnQgKGJ5IGRldGVjdGluZyBYTUxfVE9LX05PTkUp
IHdpdGhvdXQgcHJvY2Vzc2luZyBhbnkgeG1sIHRleHQKKyAgICAgICBkZWNsYXJhdGlvbiAtIGNh
dXNpbmcgdGhlIGVycm9yIFhNTF9FUlJPUl9NSVNQTEFDRURfWE1MX1BJIGluIGRvQ29udGVudC4K
KyAgICAqLworICAgIGlmIChuZXh0ID09IGVuZCAmJiAhcHNfZmluYWxCdWZmZXIpIHsKKyAgICAg
ICplbmRQdHIgPSBuZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgIH0KKyAg
ICBzdGFydCA9IG5leHQ7CisgICAgYnJlYWs7CisgIGNhc2UgWE1MX1RPS19QQVJUSUFMOgorICAg
IGlmICghcHNfZmluYWxCdWZmZXIpIHsKKyAgICAgICplbmRQdHIgPSBzdGFydDsKKyAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZXZlbnRQdHIgPSBzdGFydDsKKyAgICBy
ZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOOworICBjYXNlIFhNTF9UT0tfUEFSVElBTF9D
SEFSOgorICAgIGlmICghcHNfZmluYWxCdWZmZXIpIHsKKyAgICAgICplbmRQdHIgPSBzdGFydDsK
KyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZXZlbnRQdHIgPSBzdGFy
dDsKKyAgICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUjsKKyAgfQorICBwcm9jZXNzb3Ig
PSBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IzOworICByZXR1cm4gZXh0ZXJuYWxFbnRpdHlJ
bml0UHJvY2Vzc29yMyhwYXJzZXIsIHN0YXJ0LCBlbmQsIGVuZFB0cik7Cit9CisKK3N0YXRpYyBl
bnVtIFhNTF9FcnJvciBQVFJDQUxMCitleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IzKFhNTF9Q
YXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpz
dGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQoreworICBpbnQg
dG9rOworICBjb25zdCBjaGFyICpuZXh0ID0gc3RhcnQ7IC8qIFhtbENvbnRlbnRUb2sgZG9lc24n
dCBhbHdheXMgc2V0IHRoZSBsYXN0IGFyZyAqLworICBldmVudFB0ciA9IHN0YXJ0OworICB0b2sg
PSBYbWxDb250ZW50VG9rKGVuY29kaW5nLCBzdGFydCwgZW5kLCAmbmV4dCk7CisgIGV2ZW50RW5k
UHRyID0gbmV4dDsKKworICBzd2l0Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tfWE1MX0RFQ0w6
CisgICAgeworICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OworICAgICAgcmVzdWx0ID0gcHJv
Y2Vzc1htbERlY2wocGFyc2VyLCAxLCBzdGFydCwgbmV4dCk7CisgICAgICBpZiAocmVzdWx0ICE9
IFhNTF9FUlJPUl9OT05FKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgc3dpdGNoIChw
c19wYXJzaW5nKSB7CisgICAgICBjYXNlIFhNTF9TVVNQRU5ERUQ6CisgICAgICAgICplbmRQdHIg
PSBuZXh0OworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICBjYXNlIFhNTF9G
SU5JU0hFRDoKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgc3RhcnQgPSBuZXh0OworICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKyAg
Y2FzZSBYTUxfVE9LX1BBUlRJQUw6CisgICAgaWYgKCFwc19maW5hbEJ1ZmZlcikgeworICAgICAg
KmVuZFB0ciA9IHN0YXJ0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgIH0KKyAg
ICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOOworICBjYXNlIFhNTF9UT0tfUEFSVElB
TF9DSEFSOgorICAgIGlmICghcHNfZmluYWxCdWZmZXIpIHsKKyAgICAgICplbmRQdHIgPSBzdGFy
dDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICB9CisgICAgcmV0dXJuIFhNTF9F
UlJPUl9QQVJUSUFMX0NIQVI7CisgIH0KKyAgcHJvY2Vzc29yID0gZXh0ZXJuYWxFbnRpdHlDb250
ZW50UHJvY2Vzc29yOworICB0YWdMZXZlbCA9IDE7CisgIHJldHVybiBleHRlcm5hbEVudGl0eUNv
bnRlbnRQcm9jZXNzb3IocGFyc2VyLCBzdGFydCwgZW5kLCBlbmRQdHIpOworfQorCitzdGF0aWMg
ZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAorZXh0ZXJuYWxFbnRpdHlDb250ZW50UHJvY2Vzc29yKFhN
TF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQor
eworICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBkb0NvbnRlbnQocGFyc2VyLCAxLCBlbmNvZGlu
Zywgc3RhcnQsIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFB0
ciwgKFhNTF9Cb29sKSFwc19maW5hbEJ1ZmZlcik7CisgIGlmIChyZXN1bHQgPT0gWE1MX0VSUk9S
X05PTkUpIHsKKyAgICBpZiAoIXN0b3JlUmF3TmFtZXMocGFyc2VyKSkKKyAgICAgIHJldHVybiBY
TUxfRVJST1JfTk9fTUVNT1JZOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBl
bnVtIFhNTF9FcnJvcgorZG9Db250ZW50KFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgIGlu
dCBzdGFydFRhZ0xldmVsLAorICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMsCisgICAgICAg
ICAgY29uc3QgY2hhciAqcywKKyAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAg
Y29uc3QgY2hhciAqKm5leHRQdHIsCisgICAgICAgICAgWE1MX0Jvb2wgaGF2ZU1vcmUpCit7Cisg
IC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCisgIERURCAqIGNvbnN0IGR0ZCA9
IF9kdGQ7CisKKyAgY29uc3QgY2hhciAqKmV2ZW50UFA7CisgIGNvbnN0IGNoYXIgKipldmVudEVu
ZFBQOworICBpZiAoZW5jID09IGVuY29kaW5nKSB7CisgICAgZXZlbnRQUCA9ICZldmVudFB0cjsK
KyAgICBldmVudEVuZFBQID0gJmV2ZW50RW5kUHRyOworICB9CisgIGVsc2UgeworICAgIGV2ZW50
UFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50UHRyKTsKKyAgICBldmVu
dEVuZFBQID0gJihvcGVuSW50ZXJuYWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudEVuZFB0cik7Cisg
IH0KKyAgKmV2ZW50UFAgPSBzOworCisgIGZvciAoOzspIHsKKyAgICBjb25zdCBjaGFyICpuZXh0
ID0gczsgLyogWG1sQ29udGVudFRvayBkb2Vzbid0IGFsd2F5cyBzZXQgdGhlIGxhc3QgYXJnICov
CisgICAgaW50IHRvayA9IFhtbENvbnRlbnRUb2soZW5jLCBzLCBlbmQsICZuZXh0KTsKKyAgICAq
ZXZlbnRFbmRQUCA9IG5leHQ7CisgICAgc3dpdGNoICh0b2spIHsKKyAgICBjYXNlIFhNTF9UT0tf
VFJBSUxJTkdfQ1I6CisgICAgICBpZiAoaGF2ZU1vcmUpIHsKKyAgICAgICAgKm5leHRQdHIgPSBz
OworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICB9CisgICAgICAqZXZlbnRF
bmRQUCA9IGVuZDsKKyAgICAgIGlmIChjaGFyYWN0ZXJEYXRhSGFuZGxlcikgeworICAgICAgICBY
TUxfQ2hhciBjID0gMHhBOworICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJn
LCAmYywgMSk7CisgICAgICB9CisgICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAg
ICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgZW5kKTsKKyAgICAgIC8qIFdlIGFyZSBh
dCB0aGUgZW5kIG9mIHRoZSBmaW5hbCBidWZmZXIsIHNob3VsZCB3ZSBjaGVjayBmb3IKKyAgICAg
ICAgIFhNTF9TVVNQRU5ERUQsIFhNTF9GSU5JU0hFRD8KKyAgICAgICovCisgICAgICBpZiAoc3Rh
cnRUYWdMZXZlbCA9PSAwKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX0VMRU1FTlRTOwor
ICAgICAgaWYgKHRhZ0xldmVsICE9IHN0YXJ0VGFnTGV2ZWwpCisgICAgICAgIHJldHVybiBYTUxf
RVJST1JfQVNZTkNfRU5USVRZOworICAgICAgKm5leHRQdHIgPSBlbmQ7CisgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PTkU7CisgICAgY2FzZSBYTUxfVE9LX05PTkU6CisgICAgICBpZiAoaGF2ZU1v
cmUpIHsKKyAgICAgICAgKm5leHRQdHIgPSBzOworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
TkU7CisgICAgICB9CisgICAgICBpZiAoc3RhcnRUYWdMZXZlbCA+IDApIHsKKyAgICAgICAgaWYg
KHRhZ0xldmVsICE9IHN0YXJ0VGFnTGV2ZWwpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9B
U1lOQ19FTlRJVFk7CisgICAgICAgICpuZXh0UHRyID0gczsKKyAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9OT05FOworICAgICAgfQorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19FTEVNRU5UUzsK
KyAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKKyAgICAgICpldmVudFBQID0gbmV4dDsKKyAgICAg
IHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKKyAgICBjYXNlIFhNTF9UT0tfUEFSVElB
TDoKKyAgICAgIGlmIChoYXZlTW9yZSkgeworICAgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBYTUxfRVJST1Jf
VU5DTE9TRURfVE9LRU47CisgICAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKKyAgICAgIGlm
IChoYXZlTW9yZSkgeworICAgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAgIHJldHVybiBYTUxf
RVJST1JfTk9ORTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBYTUxfRVJST1JfUEFSVElBTF9DSEFS
OworICAgIGNhc2UgWE1MX1RPS19FTlRJVFlfUkVGOgorICAgICAgeworICAgICAgICBjb25zdCBY
TUxfQ2hhciAqbmFtZTsKKyAgICAgICAgRU5USVRZICplbnRpdHk7CisgICAgICAgIFhNTF9DaGFy
IGNoID0gKFhNTF9DaGFyKSBYbWxQcmVkZWZpbmVkRW50aXR5TmFtZShlbmMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJD
aGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQg
LSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7CisgICAgICAgIGlmIChjaCkgeworICAgICAgICAgIGlm
IChjaGFyYWN0ZXJEYXRhSGFuZGxlcikKKyAgICAgICAgICAgIGNoYXJhY3RlckRhdGFIYW5kbGVy
KGhhbmRsZXJBcmcsICZjaCwgMSk7CisgICAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIp
CisgICAgICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKKyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gcG9vbFN0b3JlU3RyaW5nKCZk
dGQtPnBvb2wsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+
bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0g
ZW5jLT5taW5CeXRlc1BlckNoYXIpOworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIGVudGl0eSA9IChFTlRJVFkgKilsb29r
dXAocGFyc2VyLCAmZHRkLT5nZW5lcmFsRW50aXRpZXMsIG5hbWUsIDApOworICAgICAgICBwb29s
RGlzY2FyZCgmZHRkLT5wb29sKTsKKyAgICAgICAgLyogRmlyc3QsIGRldGVybWluZSBpZiBhIGNo
ZWNrIGZvciBhbiBleGlzdGluZyBkZWNsYXJhdGlvbiBpcyBuZWVkZWQ7CisgICAgICAgICAgIGlm
IHllcywgY2hlY2sgdGhhdCB0aGUgZW50aXR5IGV4aXN0cywgYW5kIHRoYXQgaXQgaXMgaW50ZXJu
YWwsCisgICAgICAgICAgIG90aGVyd2lzZSBjYWxsIHRoZSBza2lwcGVkIGVudGl0eSBvciBkZWZh
dWx0IGhhbmRsZXIuCisgICAgICAgICovCisgICAgICAgIGlmICghZHRkLT5oYXNQYXJhbUVudGl0
eVJlZnMgfHwgZHRkLT5zdGFuZGFsb25lKSB7CisgICAgICAgICAgaWYgKCFlbnRpdHkpCisgICAg
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VOREVGSU5FRF9FTlRJVFk7CisgICAgICAgICAgZWxz
ZSBpZiAoIWVudGl0eS0+aXNfaW50ZXJuYWwpCisgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X0VOVElUWV9ERUNMQVJFRF9JTl9QRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghZW50
aXR5KSB7CisgICAgICAgICAgaWYgKHNraXBwZWRFbnRpdHlIYW5kbGVyKQorICAgICAgICAgICAg
c2tpcHBlZEVudGl0eUhhbmRsZXIoaGFuZGxlckFyZywgbmFtZSwgMCk7CisgICAgICAgICAgZWxz
ZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwg
ZW5jLCBzLCBuZXh0KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZW50aXR5LT5vcGVuKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfUkVDVVJTSVZFX0VOVElU
WV9SRUY7CisgICAgICAgIGlmIChlbnRpdHktPm5vdGF0aW9uKQorICAgICAgICAgIHJldHVybiBY
TUxfRVJST1JfQklOQVJZX0VOVElUWV9SRUY7CisgICAgICAgIGlmIChlbnRpdHktPnRleHRQdHIp
IHsKKyAgICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7CisgICAgICAgICAgaWYgKCFkZWZh
dWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllcykgeworICAgICAgICAgICAgaWYgKHNraXBwZWRFbnRp
dHlIYW5kbGVyKQorICAgICAgICAgICAgICBza2lwcGVkRW50aXR5SGFuZGxlcihoYW5kbGVyQXJn
LCBlbnRpdHktPm5hbWUsIDApOworICAgICAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIp
CisgICAgICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHJlc3VsdCA9IHByb2Nlc3NJ
bnRlcm5hbEVudGl0eShwYXJzZXIsIGVudGl0eSwgWE1MX0ZBTFNFKTsKKyAgICAgICAgICBpZiAo
cmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIpIHsKKyAg
ICAgICAgICBjb25zdCBYTUxfQ2hhciAqY29udGV4dDsKKyAgICAgICAgICBlbnRpdHktPm9wZW4g
PSBYTUxfVFJVRTsKKyAgICAgICAgICBjb250ZXh0ID0gZ2V0Q29udGV4dChwYXJzZXIpOworICAg
ICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsKKyAgICAgICAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgICBpZiAo
IWV4dGVybmFsRW50aXR5UmVmSGFuZGxlcihleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPmJhc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5zeXN0ZW1JZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPnB1YmxpY0lkKSkKKyAgICAg
ICAgICAgIHJldHVybiBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRMSU5HOworICAgICAg
ICAgIHBvb2xEaXNjYXJkKCZ0ZW1wUG9vbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
ZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywg
bmV4dCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIGNhc2UgWE1MX1RPS19TVEFSVF9U
QUdfTk9fQVRUUzoKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgWE1MX1RPS19T
VEFSVF9UQUdfV0lUSF9BVFRTOgorICAgICAgeworICAgICAgICBUQUcgKnRhZzsKKyAgICAgICAg
ZW51bSBYTUxfRXJyb3IgcmVzdWx0OworICAgICAgICBYTUxfQ2hhciAqdG9QdHI7CisgICAgICAg
IGlmIChmcmVlVGFnTGlzdCkgeworICAgICAgICAgIHRhZyA9IGZyZWVUYWdMaXN0OworICAgICAg
ICAgIGZyZWVUYWdMaXN0ID0gZnJlZVRhZ0xpc3QtPnBhcmVudDsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICB0YWcgPSAoVEFHICopTUFMTE9DKHNpemVvZihUQUcpKTsKKyAg
ICAgICAgICBpZiAoIXRhZykKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZ
OworICAgICAgICAgIHRhZy0+YnVmID0gKGNoYXIgKilNQUxMT0MoSU5JVF9UQUdfQlVGX1NJWkUp
OworICAgICAgICAgIGlmICghdGFnLT5idWYpIHsKKyAgICAgICAgICAgIEZSRUUodGFnKTsKKyAg
ICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAgIH0KKyAgICAg
ICAgICB0YWctPmJ1ZkVuZCA9IHRhZy0+YnVmICsgSU5JVF9UQUdfQlVGX1NJWkU7CisgICAgICAg
IH0KKyAgICAgICAgdGFnLT5iaW5kaW5ncyA9IE5VTEw7CisgICAgICAgIHRhZy0+cGFyZW50ID0g
dGFnU3RhY2s7CisgICAgICAgIHRhZ1N0YWNrID0gdGFnOworICAgICAgICB0YWctPm5hbWUubG9j
YWxQYXJ0ID0gTlVMTDsKKyAgICAgICAgdGFnLT5uYW1lLnByZWZpeCA9IE5VTEw7CisgICAgICAg
IHRhZy0+cmF3TmFtZSA9IHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhcjsKKyAgICAgICAgdGFnLT5y
YXdOYW1lTGVuZ3RoID0gWG1sTmFtZUxlbmd0aChlbmMsIHRhZy0+cmF3TmFtZSk7CisgICAgICAg
ICsrdGFnTGV2ZWw7CisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpyYXdOYW1lRW5k
ID0gdGFnLT5yYXdOYW1lICsgdGFnLT5yYXdOYW1lTGVuZ3RoOworICAgICAgICAgIGNvbnN0IGNo
YXIgKmZyb21QdHIgPSB0YWctPnJhd05hbWU7CisgICAgICAgICAgdG9QdHIgPSAoWE1MX0NoYXIg
Kil0YWctPmJ1ZjsKKyAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpbnQgYnVmU2l6
ZTsKKyAgICAgICAgICAgIGludCBjb252TGVuOworICAgICAgICAgICAgWG1sQ29udmVydChlbmMs
CisgICAgICAgICAgICAgICAgICAgICAgICZmcm9tUHRyLCByYXdOYW1lRW5kLAorICAgICAgICAg
ICAgICAgICAgICAgICAoSUNIQVIgKiopJnRvUHRyLCAoSUNIQVIgKil0YWctPmJ1ZkVuZCAtIDEp
OworICAgICAgICAgICAgY29udkxlbiA9IChpbnQpKHRvUHRyIC0gKFhNTF9DaGFyICopdGFnLT5i
dWYpOworICAgICAgICAgICAgaWYgKGZyb21QdHIgPT0gcmF3TmFtZUVuZCkgeworICAgICAgICAg
ICAgICB0YWctPm5hbWUuc3RyTGVuID0gY29udkxlbjsKKyAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBidWZTaXplID0gKGludCkodGFnLT5idWZFbmQgLSB0
YWctPmJ1ZikgPDwgMTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2hhciAqdGVtcCA9
IChjaGFyICopUkVBTExPQyh0YWctPmJ1ZiwgYnVmU2l6ZSk7CisgICAgICAgICAgICAgIGlmICh0
ZW1wID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7
CisgICAgICAgICAgICAgIHRhZy0+YnVmID0gdGVtcDsKKyAgICAgICAgICAgICAgdGFnLT5idWZF
bmQgPSB0ZW1wICsgYnVmU2l6ZTsKKyAgICAgICAgICAgICAgdG9QdHIgPSAoWE1MX0NoYXIgKil0
ZW1wICsgY29udkxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdGFnLT5uYW1lLnN0ciA9IChYTUxfQ2hhciAqKXRhZy0+YnVmOworICAgICAgICAqdG9Q
dHIgPSBYTUxfVCgnXDAnKTsKKyAgICAgICAgcmVzdWx0ID0gc3RvcmVBdHRzKHBhcnNlciwgZW5j
LCBzLCAmKHRhZy0+bmFtZSksICYodGFnLT5iaW5kaW5ncykpOworICAgICAgICBpZiAocmVzdWx0
KQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmIChzdGFydEVsZW1lbnRIYW5k
bGVyKQorICAgICAgICAgIHN0YXJ0RWxlbWVudEhhbmRsZXIoaGFuZGxlckFyZywgdGFnLT5uYW1l
LnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBYTUxfQ2hhciAqKilh
dHRzKTsKKyAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgcmVwb3J0
RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7CisgICAgICAgIHBvb2xDbGVhcigmdGVtcFBv
b2wpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBjYXNlIFhNTF9UT0tfRU1QVFlfRUxF
TUVOVF9OT19BVFRTOgorICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBYTUxfVE9L
X0VNUFRZX0VMRU1FTlRfV0lUSF9BVFRTOgorICAgICAgeworICAgICAgICBjb25zdCBjaGFyICpy
YXdOYW1lID0gcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyOworICAgICAgICBlbnVtIFhNTF9FcnJv
ciByZXN1bHQ7CisgICAgICAgIEJJTkRJTkcgKmJpbmRpbmdzID0gTlVMTDsKKyAgICAgICAgWE1M
X0Jvb2wgbm9FbG1IYW5kbGVycyA9IFhNTF9UUlVFOworICAgICAgICBUQUdfTkFNRSBuYW1lOwor
ICAgICAgICBuYW1lLnN0ciA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywgcmF3TmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZSArIFhtbE5hbWVM
ZW5ndGgoZW5jLCByYXdOYW1lKSk7CisgICAgICAgIGlmICghbmFtZS5zdHIpCisgICAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29s
KTsKKyAgICAgICAgcmVzdWx0ID0gc3RvcmVBdHRzKHBhcnNlciwgZW5jLCBzLCAmbmFtZSwgJmJp
bmRpbmdzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7CisgICAgICAgIGlmIChzdGFydEVsZW1lbnRI
YW5kbGVyKSB7CisgICAgICAgICAgc3RhcnRFbGVtZW50SGFuZGxlcihoYW5kbGVyQXJnLCBuYW1l
LnN0ciwgKGNvbnN0IFhNTF9DaGFyICoqKWF0dHMpOworICAgICAgICAgIG5vRWxtSGFuZGxlcnMg
PSBYTUxfRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuZEVsZW1lbnRIYW5kbGVyKSB7
CisgICAgICAgICAgaWYgKHN0YXJ0RWxlbWVudEhhbmRsZXIpCisgICAgICAgICAgICAqZXZlbnRQ
UCA9ICpldmVudEVuZFBQOworICAgICAgICAgIGVuZEVsZW1lbnRIYW5kbGVyKGhhbmRsZXJBcmcs
IG5hbWUuc3RyKTsKKyAgICAgICAgICBub0VsbUhhbmRsZXJzID0gWE1MX0ZBTFNFOworICAgICAg
ICB9CisgICAgICAgIGlmIChub0VsbUhhbmRsZXJzICYmIGRlZmF1bHRIYW5kbGVyKQorICAgICAg
ICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAgICBwb29sQ2xl
YXIoJnRlbXBQb29sKTsKKyAgICAgICAgd2hpbGUgKGJpbmRpbmdzKSB7CisgICAgICAgICAgQklO
RElORyAqYiA9IGJpbmRpbmdzOworICAgICAgICAgIGlmIChlbmROYW1lc3BhY2VEZWNsSGFuZGxl
cikKKyAgICAgICAgICAgIGVuZE5hbWVzcGFjZURlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIGItPnBy
ZWZpeC0+bmFtZSk7CisgICAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5ncy0+bmV4dFRhZ0JpbmRp
bmc7CisgICAgICAgICAgYi0+bmV4dFRhZ0JpbmRpbmcgPSBmcmVlQmluZGluZ0xpc3Q7CisgICAg
ICAgICAgZnJlZUJpbmRpbmdMaXN0ID0gYjsKKyAgICAgICAgICBiLT5wcmVmaXgtPmJpbmRpbmcg
PSBiLT5wcmV2UHJlZml4QmluZGluZzsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKHRh
Z0xldmVsID09IDApCisgICAgICAgIHJldHVybiBlcGlsb2dQcm9jZXNzb3IocGFyc2VyLCBuZXh0
LCBlbmQsIG5leHRQdHIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX0VORF9UQUc6
CisgICAgICBpZiAodGFnTGV2ZWwgPT0gc3RhcnRUYWdMZXZlbCkKKyAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9BU1lOQ19FTlRJVFk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaW50IGxlbjsKKyAg
ICAgICAgY29uc3QgY2hhciAqcmF3TmFtZTsKKyAgICAgICAgVEFHICp0YWcgPSB0YWdTdGFjazsK
KyAgICAgICAgdGFnU3RhY2sgPSB0YWctPnBhcmVudDsKKyAgICAgICAgdGFnLT5wYXJlbnQgPSBm
cmVlVGFnTGlzdDsKKyAgICAgICAgZnJlZVRhZ0xpc3QgPSB0YWc7CisgICAgICAgIHJhd05hbWUg
PSBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIqMjsKKyAgICAgICAgbGVuID0gWG1sTmFtZUxlbmd0
aChlbmMsIHJhd05hbWUpOworICAgICAgICBpZiAobGVuICE9IHRhZy0+cmF3TmFtZUxlbmd0aAor
ICAgICAgICAgICAgfHwgbWVtY21wKHRhZy0+cmF3TmFtZSwgcmF3TmFtZSwgbGVuKSAhPSAwKSB7
CisgICAgICAgICAgKmV2ZW50UFAgPSByYXdOYW1lOworICAgICAgICAgIHJldHVybiBYTUxfRVJS
T1JfVEFHX01JU01BVENIOworICAgICAgICB9CisgICAgICAgIC0tdGFnTGV2ZWw7CisgICAgICAg
IGlmIChlbmRFbGVtZW50SGFuZGxlcikgeworICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpsb2Nh
bFBhcnQ7CisgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnByZWZpeDsKKyAgICAgICAgICBYTUxf
Q2hhciAqdXJpOworICAgICAgICAgIGxvY2FsUGFydCA9IHRhZy0+bmFtZS5sb2NhbFBhcnQ7Cisg
ICAgICAgICAgaWYgKG5zICYmIGxvY2FsUGFydCkgeworICAgICAgICAgICAgLyogbG9jYWxQYXJ0
IGFuZCBwcmVmaXggbWF5IGhhdmUgYmVlbiBvdmVyd3JpdHRlbiBpbgorICAgICAgICAgICAgICAg
dGFnLT5uYW1lLnN0ciwgc2luY2UgdGhpcyBwb2ludHMgdG8gdGhlIGJpbmRpbmctPnVyaQorICAg
ICAgICAgICAgICAgYnVmZmVyIHdoaWNoIGdldHMgcmUtdXNlZDsgc28gd2UgaGF2ZSB0byBhZGQg
dGhlbSBhZ2FpbgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHVyaSA9IChYTUxfQ2hhciAq
KXRhZy0+bmFtZS5zdHIgKyB0YWctPm5hbWUudXJpTGVuOworICAgICAgICAgICAgLyogZG9uJ3Qg
bmVlZCB0byBjaGVjayBmb3Igc3BhY2UgLSBhbHJlYWR5IGRvbmUgaW4gc3RvcmVBdHRzKCkgKi8K
KyAgICAgICAgICAgIHdoaWxlICgqbG9jYWxQYXJ0KSAqdXJpKysgPSAqbG9jYWxQYXJ0Kys7Cisg
ICAgICAgICAgICBwcmVmaXggPSAoWE1MX0NoYXIgKil0YWctPm5hbWUucHJlZml4OworICAgICAg
ICAgICAgaWYgKG5zX3RyaXBsZXRzICYmIHByZWZpeCkgeworICAgICAgICAgICAgICAqdXJpKysg
PSBuYW1lc3BhY2VTZXBhcmF0b3I7CisgICAgICAgICAgICAgIHdoaWxlICgqcHJlZml4KSAqdXJp
KysgPSAqcHJlZml4Kys7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgKnVyaSA9IFhNTF9U
KCdcMCcpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbmRFbGVtZW50SGFuZGxlcihoYW5kbGVy
QXJnLCB0YWctPm5hbWUuc3RyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZWZhdWx0
SGFuZGxlcikKKyAgICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsK
KyAgICAgICAgd2hpbGUgKHRhZy0+YmluZGluZ3MpIHsKKyAgICAgICAgICBCSU5ESU5HICpiID0g
dGFnLT5iaW5kaW5nczsKKyAgICAgICAgICBpZiAoZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpCisg
ICAgICAgICAgICBlbmROYW1lc3BhY2VEZWNsSGFuZGxlcihoYW5kbGVyQXJnLCBiLT5wcmVmaXgt
Pm5hbWUpOworICAgICAgICAgIHRhZy0+YmluZGluZ3MgPSB0YWctPmJpbmRpbmdzLT5uZXh0VGFn
QmluZGluZzsKKyAgICAgICAgICBiLT5uZXh0VGFnQmluZGluZyA9IGZyZWVCaW5kaW5nTGlzdDsK
KyAgICAgICAgICBmcmVlQmluZGluZ0xpc3QgPSBiOworICAgICAgICAgIGItPnByZWZpeC0+Ymlu
ZGluZyA9IGItPnByZXZQcmVmaXhCaW5kaW5nOworICAgICAgICB9CisgICAgICAgIGlmICh0YWdM
ZXZlbCA9PSAwKQorICAgICAgICAgIHJldHVybiBlcGlsb2dQcm9jZXNzb3IocGFyc2VyLCBuZXh0
LCBlbmQsIG5leHRQdHIpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9L
X0NIQVJfUkVGOgorICAgICAgeworICAgICAgICBpbnQgbiA9IFhtbENoYXJSZWZOdW1iZXIoZW5j
LCBzKTsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfQkFE
X0NIQVJfUkVGOworICAgICAgICBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpIHsKKyAgICAgICAg
ICBYTUxfQ2hhciBidWZbWE1MX0VOQ09ERV9NQVhdOworICAgICAgICAgIGNoYXJhY3RlckRhdGFI
YW5kbGVyKGhhbmRsZXJBcmcsIGJ1ZiwgWG1sRW5jb2RlKG4sIChJQ0hBUiAqKWJ1ZikpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQorICAgICAgICAgIHJlcG9y
dERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAgfQorICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBYTUxfVE9LX1hNTF9ERUNMOgorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9NSVNQTEFD
RURfWE1MX1BJOworICAgIGNhc2UgWE1MX1RPS19EQVRBX05FV0xJTkU6CisgICAgICBpZiAoY2hh
cmFjdGVyRGF0YUhhbmRsZXIpIHsKKyAgICAgICAgWE1MX0NoYXIgYyA9IDB4QTsKKyAgICAgICAg
Y2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgJmMsIDEpOworICAgICAgfQorICAgICAg
ZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBl
bmMsIHMsIG5leHQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX0NEQVRBX1NFQ1Rf
T1BFTjoKKyAgICAgIHsKKyAgICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OworICAgICAgICBp
ZiAoc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyKQorICAgICAgICAgIHN0YXJ0Q2RhdGFTZWN0aW9u
SGFuZGxlcihoYW5kbGVyQXJnKTsKKyNpZiAwCisgICAgICAgIC8qIFN1cHBvc2UgeW91IGRvaW5n
IGEgdHJhbnNmb3JtYXRpb24gb24gYSBkb2N1bWVudCB0aGF0IGludm9sdmVzCisgICAgICAgICAg
IGNoYW5naW5nIG9ubHkgdGhlIGNoYXJhY3RlciBkYXRhLiAgWW91IHNldCB1cCBhIGRlZmF1bHRI
YW5kbGVyCisgICAgICAgICAgIGFuZCBhIGNoYXJhY3RlckRhdGFIYW5kbGVyLiAgVGhlIGRlZmF1
bHRIYW5kbGVyIHNpbXBseSBjb3BpZXMKKyAgICAgICAgICAgY2hhcmFjdGVycyB0aHJvdWdoLiAg
VGhlIGNoYXJhY3RlckRhdGFIYW5kbGVyIGRvZXMgdGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0
aW9uIGFuZCB3cml0ZXMgdGhlIGNoYXJhY3RlcnMgb3V0IGVzY2FwaW5nIHRoZW0gYXMKKyAgICAg
ICAgICAgbmVjZXNzYXJ5LiAgVGhpcyBjYXNlIHdpbGwgZmFpbCB0byB3b3JrIGlmIHdlIGxlYXZl
IG91dCB0aGUKKyAgICAgICAgICAgZm9sbG93aW5nIHR3byBsaW5lcyAoYmVjYXVzZSAmIGFuZCA8
IGluc2lkZSBDREFUQSBzZWN0aW9ucyB3aWxsCisgICAgICAgICAgIGJlIGluY29ycmVjdGx5IGVz
Y2FwZWQpLgorCisgICAgICAgICAgIEhvd2V2ZXIsIG5vdyB3ZSBoYXZlIGEgc3RhcnQvZW5kQ2Rh
dGFTZWN0aW9uSGFuZGxlciwgc28gaXQgc2VlbXMKKyAgICAgICAgICAgZWFzaWVyIHRvIGxldCB0
aGUgdXNlciBkZWFsIHdpdGggdGhpcy4KKyAgICAgICAgKi8KKyAgICAgICAgZWxzZSBpZiAoY2hh
cmFjdGVyRGF0YUhhbmRsZXIpCisgICAgICAgICAgY2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxl
ckFyZywgZGF0YUJ1ZiwgMCk7CisjZW5kaWYKKyAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRs
ZXIpCisgICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7CisgICAg
ICAgIHJlc3VsdCA9IGRvQ2RhdGFTZWN0aW9uKHBhcnNlciwgZW5jLCAmbmV4dCwgZW5kLCBuZXh0
UHRyLCBoYXZlTW9yZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgZWxzZSBpZiAoIW5leHQpIHsKKyAgICAg
ICAgICBwcm9jZXNzb3IgPSBjZGF0YVNlY3Rpb25Qcm9jZXNzb3I7CisgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxf
VE9LX1RSQUlMSU5HX1JTUUI6CisgICAgICBpZiAoaGF2ZU1vcmUpIHsKKyAgICAgICAgKm5leHRQ
dHIgPSBzOworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICB9CisgICAgICBp
ZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpIHsKKyAgICAgICAgaWYgKE1VU1RfQ09OVkVSVChlbmMs
IHMpKSB7CisgICAgICAgICAgSUNIQVIgKmRhdGFQdHIgPSAoSUNIQVIgKilkYXRhQnVmOworICAg
ICAgICAgIFhtbENvbnZlcnQoZW5jLCAmcywgZW5kLCAmZGF0YVB0ciwgKElDSEFSICopZGF0YUJ1
ZkVuZCk7CisgICAgICAgICAgY2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgZGF0YUJ1
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShkYXRhUHRyIC0gKElDSEFS
ICopZGF0YUJ1ZikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjaGFyYWN0
ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChYTUxfQ2hhciAqKXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKFhN
TF9DaGFyICopZW5kIC0gKFhNTF9DaGFyICopcykpOworICAgICAgfQorICAgICAgZWxzZSBpZiAo
ZGVmYXVsdEhhbmRsZXIpCisgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIGVu
ZCk7CisgICAgICAvKiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmluYWwgYnVmZmVyLCBzaG91
bGQgd2UgY2hlY2sgZm9yCisgICAgICAgICBYTUxfU1VTUEVOREVELCBYTUxfRklOSVNIRUQ/Cisg
ICAgICAqLworICAgICAgaWYgKHN0YXJ0VGFnTGV2ZWwgPT0gMCkgeworICAgICAgICAqZXZlbnRQ
UCA9IGVuZDsKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19FTEVNRU5UUzsKKyAgICAgIH0K
KyAgICAgIGlmICh0YWdMZXZlbCAhPSBzdGFydFRhZ0xldmVsKSB7CisgICAgICAgICpldmVudFBQ
ID0gZW5kOworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0FTWU5DX0VOVElUWTsKKyAgICAgIH0K
KyAgICAgICpuZXh0UHRyID0gZW5kOworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAg
IGNhc2UgWE1MX1RPS19EQVRBX0NIQVJTOgorICAgICAgeworICAgICAgICBYTUxfQ2hhcmFjdGVy
RGF0YUhhbmRsZXIgY2hhckRhdGFIYW5kbGVyID0gY2hhcmFjdGVyRGF0YUhhbmRsZXI7CisgICAg
ICAgIGlmIChjaGFyRGF0YUhhbmRsZXIpIHsKKyAgICAgICAgICBpZiAoTVVTVF9DT05WRVJUKGVu
YywgcykpIHsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgSUNIQVIgKmRh
dGFQdHIgPSAoSUNIQVIgKilkYXRhQnVmOworICAgICAgICAgICAgICBYbWxDb252ZXJ0KGVuYywg
JnMsIG5leHQsICZkYXRhUHRyLCAoSUNIQVIgKilkYXRhQnVmRW5kKTsKKyAgICAgICAgICAgICAg
KmV2ZW50RW5kUFAgPSBzOworICAgICAgICAgICAgICBjaGFyRGF0YUhhbmRsZXIoaGFuZGxlckFy
ZywgZGF0YUJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGRhdGFQdHIg
LSAoSUNIQVIgKilkYXRhQnVmKSk7CisgICAgICAgICAgICAgIGlmIChzID09IG5leHQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICpldmVudFBQID0gczsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY2hhckRhdGFI
YW5kbGVyKGhhbmRsZXJBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhNTF9DaGFy
ICopcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoWE1MX0NoYXIgKiluZXh0
IC0gKFhNTF9DaGFyICopcykpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRI
YW5kbGVyKQorICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwor
ICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX1BJOgorICAgICAgaWYgKCFy
ZXBvcnRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFyc2VyLCBlbmMsIHMsIG5leHQpKQorICAgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1M
X1RPS19DT01NRU5UOgorICAgICAgaWYgKCFyZXBvcnRDb21tZW50KHBhcnNlciwgZW5jLCBzLCBu
ZXh0KSkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgaWYgKGRlZmF1bHRIYW5kbGVyKQorICAgICAgICByZXBvcnRE
ZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAq
ZXZlbnRQUCA9IHMgPSBuZXh0OworICAgIHN3aXRjaCAocHNfcGFyc2luZykgeworICAgIGNhc2Ug
WE1MX1NVU1BFTkRFRDoKKyAgICAgICpuZXh0UHRyID0gbmV4dDsKKyAgICAgIHJldHVybiBYTUxf
RVJST1JfTk9ORTsKKyAgICBjYXNlIFhNTF9GSU5JU0hFRDoKKyAgICAgIHJldHVybiBYTUxfRVJS
T1JfQUJPUlRFRDsKKyAgICBkZWZhdWx0OiA7CisgICAgfQorICB9CisgIC8qIG5vdCByZWFjaGVk
ICovCit9CisKKy8qIFByZWNvbmRpdGlvbjogYWxsIGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1OVUxM
OworICAgUHVycG9zZToKKyAgIC0gbm9ybWFsaXplIGF0dHJpYnV0ZXMKKyAgIC0gY2hlY2sgYXR0
cmlidXRlcyBmb3Igd2VsbC1mb3JtZWRuZXNzCisgICAtIGdlbmVyYXRlIG5hbWVzcGFjZSBhd2Fy
ZSBhdHRyaWJ1dGUgbmFtZXMgKFVSSSwgcHJlZml4KQorICAgLSBidWlsZCBsaXN0IG9mIGF0dHJp
YnV0ZXMgZm9yIHN0YXJ0RWxlbWVudEhhbmRsZXIKKyAgIC0gZGVmYXVsdCBhdHRyaWJ1dGVzCisg
ICAtIHByb2Nlc3MgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyAoY2hlY2sgYW5kIHJlcG9ydCB0aGVt
KQorICAgLSBnZW5lcmF0ZSBuYW1lc3BhY2UgYXdhcmUgZWxlbWVudCBuYW1lIChVUkksIHByZWZp
eCkKKyovCitzdGF0aWMgZW51bSBYTUxfRXJyb3IKK3N0b3JlQXR0cyhYTUxfUGFyc2VyIHBhcnNl
ciwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICBjb25zdCBjaGFyICphdHRTdHIsIFRB
R19OQU1FICp0YWdOYW1lUHRyLAorICAgICAgICAgIEJJTkRJTkcgKipiaW5kaW5nc1B0cikKK3sK
KyAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0
aW9uICovCisgIEVMRU1FTlRfVFlQRSAqZWxlbWVudFR5cGU7CisgIGludCBuRGVmYXVsdEF0dHM7
CisgIGNvbnN0IFhNTF9DaGFyICoqYXBwQXR0czsgICAvKiB0aGUgYXR0cmlidXRlIGxpc3QgZm9y
IHRoZSBhcHBsaWNhdGlvbiAqLworICBpbnQgYXR0SW5kZXggPSAwOworICBpbnQgcHJlZml4TGVu
OworICBpbnQgaTsKKyAgaW50IG47CisgIFhNTF9DaGFyICp1cmk7CisgIGludCBuUHJlZml4ZXMg
PSAwOworICBCSU5ESU5HICpiaW5kaW5nOworICBjb25zdCBYTUxfQ2hhciAqbG9jYWxQYXJ0Owor
CisgIC8qIGxvb2t1cCB0aGUgZWxlbWVudCB0eXBlIG5hbWUgKi8KKyAgZWxlbWVudFR5cGUgPSAo
RUxFTUVOVF9UWVBFICopbG9va3VwKHBhcnNlciwgJmR0ZC0+ZWxlbWVudFR5cGVzLCB0YWdOYW1l
UHRyLT5zdHIsMCk7CisgIGlmICghZWxlbWVudFR5cGUpIHsKKyAgICBjb25zdCBYTUxfQ2hhciAq
bmFtZSA9IHBvb2xDb3B5U3RyaW5nKCZkdGQtPnBvb2wsIHRhZ05hbWVQdHItPnN0cik7CisgICAg
aWYgKCFuYW1lKQorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgZWxlbWVu
dFR5cGUgPSAoRUxFTUVOVF9UWVBFICopbG9va3VwKHBhcnNlciwgJmR0ZC0+ZWxlbWVudFR5cGVz
LCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo
RUxFTUVOVF9UWVBFKSk7CisgICAgaWYgKCFlbGVtZW50VHlwZSkKKyAgICAgIHJldHVybiBYTUxf
RVJST1JfTk9fTUVNT1JZOworICAgIGlmIChucyAmJiAhc2V0RWxlbWVudFR5cGVQcmVmaXgocGFy
c2VyLCBlbGVtZW50VHlwZSkpCisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAg
fQorICBuRGVmYXVsdEF0dHMgPSBlbGVtZW50VHlwZS0+bkRlZmF1bHRBdHRzOworCisgIC8qIGdl
dCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSB0b2tlbml6ZXIgKi8KKyAgbiA9IFhtbEdldEF0dHJp
YnV0ZXMoZW5jLCBhdHRTdHIsIGF0dHNTaXplLCBhdHRzKTsKKyAgaWYgKG4gKyBuRGVmYXVsdEF0
dHMgPiBhdHRzU2l6ZSkgeworICAgIGludCBvbGRBdHRzU2l6ZSA9IGF0dHNTaXplOworICAgIEFU
VFJJQlVURSAqdGVtcDsKKyNpZmRlZiBYTUxfQVRUUl9JTkZPCisgICAgWE1MX0F0dHJJbmZvICp0
ZW1wMjsKKyNlbmRpZgorICAgIGF0dHNTaXplID0gbiArIG5EZWZhdWx0QXR0cyArIElOSVRfQVRU
U19TSVpFOworICAgIHRlbXAgPSAoQVRUUklCVVRFICopUkVBTExPQygodm9pZCAqKWF0dHMsIGF0
dHNTaXplICogc2l6ZW9mKEFUVFJJQlVURSkpOworICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICBhdHRzID0gdGVtcDsKKyNpZmRlZiBY
TUxfQVRUUl9JTkZPCisgICAgdGVtcDIgPSAoWE1MX0F0dHJJbmZvICopUkVBTExPQygodm9pZCAq
KWF0dEluZm8sIGF0dHNTaXplICogc2l6ZW9mKFhNTF9BdHRySW5mbykpOworICAgIGlmICh0ZW1w
MiA9PSBOVUxMKQorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgYXR0SW5m
byA9IHRlbXAyOworI2VuZGlmCisgICAgaWYgKG4gPiBvbGRBdHRzU2l6ZSkKKyAgICAgIFhtbEdl
dEF0dHJpYnV0ZXMoZW5jLCBhdHRTdHIsIG4sIGF0dHMpOworICB9CisKKyAgYXBwQXR0cyA9IChj
b25zdCBYTUxfQ2hhciAqKilhdHRzOworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAg
QVRUUklCVVRFICpjdXJyQXR0ID0gJmF0dHNbaV07CisjaWZkZWYgWE1MX0FUVFJfSU5GTworICAg
IFhNTF9BdHRySW5mbyAqY3VyckF0dEluZm8gPSAmYXR0SW5mb1tpXTsKKyNlbmRpZgorICAgIC8q
IGFkZCB0aGUgbmFtZSBhbmQgdmFsdWUgdG8gdGhlIGF0dHJpYnV0ZSBsaXN0ICovCisgICAgQVRU
UklCVVRFX0lEICphdHRJZCA9IGdldEF0dHJpYnV0ZUlkKHBhcnNlciwgZW5jLCBjdXJyQXR0LT5u
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyQXR0LT5u
YW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgWG1sTmFtZUxl
bmd0aChlbmMsIGN1cnJBdHQtPm5hbWUpKTsKKyAgICBpZiAoIWF0dElkKQorICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT19NRU1PUlk7CisjaWZkZWYgWE1MX0FUVFJfSU5GTworICAgIGN1cnJBdHRJ
bmZvLT5uYW1lU3RhcnQgPSBwYXJzZUVuZEJ5dGVJbmRleCAtIChwYXJzZUVuZFB0ciAtIGN1cnJB
dHQtPm5hbWUpOworICAgIGN1cnJBdHRJbmZvLT5uYW1lRW5kID0gY3VyckF0dEluZm8tPm5hbWVT
dGFydCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBYbWxOYW1lTGVuZ3RoKGVuYywgY3Vy
ckF0dC0+bmFtZSk7CisgICAgY3VyckF0dEluZm8tPnZhbHVlU3RhcnQgPSBwYXJzZUVuZEJ5dGVJ
bmRleCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnNlRW5kUHRyIC0gY3VyckF0
dC0+dmFsdWVQdHIpOworICAgIGN1cnJBdHRJbmZvLT52YWx1ZUVuZCA9IHBhcnNlRW5kQnl0ZUlu
ZGV4IC0gKHBhcnNlRW5kUHRyIC0gY3VyckF0dC0+dmFsdWVFbmQpOworI2VuZGlmCisgICAgLyog
RGV0ZWN0IGR1cGxpY2F0ZSBhdHRyaWJ1dGVzIGJ5IHRoZWlyIFFOYW1lcy4gVGhpcyBkb2VzIG5v
dCB3b3JrIHdoZW4KKyAgICAgICBuYW1lc3BhY2UgcHJvY2Vzc2luZyBpcyB0dXJuZWQgb24gYW5k
IGRpZmZlcmVudCBwcmVmaXhlcyBmb3IgdGhlIHNhbWUKKyAgICAgICBuYW1lc3BhY2UgYXJlIHVz
ZWQuIEZvciB0aGlzIGNhc2Ugd2UgaGF2ZSBhIGNoZWNrIGZ1cnRoZXIgZG93bi4KKyAgICAqLwor
ICAgIGlmICgoYXR0SWQtPm5hbWUpWy0xXSkgeworICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykK
KyAgICAgICAgZXZlbnRQdHIgPSBhdHRzW2ldLm5hbWU7CisgICAgICByZXR1cm4gWE1MX0VSUk9S
X0RVUExJQ0FURV9BVFRSSUJVVEU7CisgICAgfQorICAgIChhdHRJZC0+bmFtZSlbLTFdID0gMTsK
KyAgICBhcHBBdHRzW2F0dEluZGV4KytdID0gYXR0SWQtPm5hbWU7CisgICAgaWYgKCFhdHRzW2ld
Lm5vcm1hbGl6ZWQpIHsKKyAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKKyAgICAgIFhNTF9C
b29sIGlzQ2RhdGEgPSBYTUxfVFJVRTsKKworICAgICAgLyogZmlndXJlIG91dCB3aGV0aGVyIGRl
Y2xhcmVkIGFzIG90aGVyIHRoYW4gQ0RBVEEgKi8KKyAgICAgIGlmIChhdHRJZC0+bWF5YmVUb2tl
bml6ZWQpIHsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBuRGVmYXVs
dEF0dHM7IGorKykgeworICAgICAgICAgIGlmIChhdHRJZCA9PSBlbGVtZW50VHlwZS0+ZGVmYXVs
dEF0dHNbal0uaWQpIHsKKyAgICAgICAgICAgIGlzQ2RhdGEgPSBlbGVtZW50VHlwZS0+ZGVmYXVs
dEF0dHNbal0uaXNDZGF0YTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgfQorCisgICAgICAvKiBub3JtYWxpemUgdGhlIGF0dHJpYnV0ZSB2YWx1ZSAq
LworICAgICAgcmVzdWx0ID0gc3RvcmVBdHRyaWJ1dGVWYWx1ZShwYXJzZXIsIGVuYywgaXNDZGF0
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0c1tpXS52YWx1ZVB0ciwg
YXR0c1tpXS52YWx1ZUVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRl
bXBQb29sKTsKKyAgICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICBhcHBBdHRzW2F0dEluZGV4XSA9IHBvb2xTdGFydCgmdGVtcFBvb2wpOworICAgICAgcG9vbEZp
bmlzaCgmdGVtcFBvb2wpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHRoZSB2YWx1ZSBk
aWQgbm90IG5lZWQgbm9ybWFsaXppbmcgKi8KKyAgICAgIGFwcEF0dHNbYXR0SW5kZXhdID0gcG9v
bFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwgZW5jLCBhdHRzW2ldLnZhbHVlUHRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0c1tpXS52YWx1ZUVuZCk7CisgICAg
ICBpZiAoYXBwQXR0c1thdHRJbmRleF0gPT0gMCkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T19NRU1PUlk7CisgICAgICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7CisgICAgfQorICAgIC8qIGhh
bmRsZSBwcmVmaXhlZCBhdHRyaWJ1dGUgbmFtZXMgKi8KKyAgICBpZiAoYXR0SWQtPnByZWZpeCkg
eworICAgICAgaWYgKGF0dElkLT54bWxucykgeworICAgICAgICAvKiBkZWFsIHdpdGggbmFtZXNw
YWNlIGRlY2xhcmF0aW9ucyBoZXJlICovCisgICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9
IGFkZEJpbmRpbmcocGFyc2VyLCBhdHRJZC0+cHJlZml4LCBhdHRJZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBBdHRzW2F0dEluZGV4XSwgYmluZGluZ3NQ
dHIpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIC0tYXR0SW5kZXg7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogZGVhbCB3
aXRoIG90aGVyIHByZWZpeGVkIG5hbWVzIGxhdGVyICovCisgICAgICAgIGF0dEluZGV4Kys7Cisg
ICAgICAgIG5QcmVmaXhlcysrOworICAgICAgICAoYXR0SWQtPm5hbWUpWy0xXSA9IDI7CisgICAg
ICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIGF0dEluZGV4Kys7CisgIH0KKworICAvKiBzZXQt
dXAgZm9yIFhNTF9HZXRTcGVjaWZpZWRBdHRyaWJ1dGVDb3VudCBhbmQgWE1MX0dldElkQXR0cmli
dXRlSW5kZXggKi8KKyAgblNwZWNpZmllZEF0dHMgPSBhdHRJbmRleDsKKyAgaWYgKGVsZW1lbnRU
eXBlLT5pZEF0dCAmJiAoZWxlbWVudFR5cGUtPmlkQXR0LT5uYW1lKVstMV0pIHsKKyAgICBmb3Ig
KGkgPSAwOyBpIDwgYXR0SW5kZXg7IGkgKz0gMikKKyAgICAgIGlmIChhcHBBdHRzW2ldID09IGVs
ZW1lbnRUeXBlLT5pZEF0dC0+bmFtZSkgeworICAgICAgICBpZEF0dEluZGV4ID0gaTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICB9CisgIH0KKyAgZWxzZQorICAgIGlkQXR0SW5kZXggPSAtMTsKKwor
ICAvKiBkbyBhdHRyaWJ1dGUgZGVmYXVsdGluZyAqLworICBmb3IgKGkgPSAwOyBpIDwgbkRlZmF1
bHRBdHRzOyBpKyspIHsKKyAgICBjb25zdCBERUZBVUxUX0FUVFJJQlVURSAqZGEgPSBlbGVtZW50
VHlwZS0+ZGVmYXVsdEF0dHMgKyBpOworICAgIGlmICghKGRhLT5pZC0+bmFtZSlbLTFdICYmIGRh
LT52YWx1ZSkgeworICAgICAgaWYgKGRhLT5pZC0+cHJlZml4KSB7CisgICAgICAgIGlmIChkYS0+
aWQtPnhtbG5zKSB7CisgICAgICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gYWRkQmluZGlu
ZyhwYXJzZXIsIGRhLT5pZC0+cHJlZml4LCBkYS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYS0+dmFsdWUsIGJpbmRpbmdzUHRyKTsKKyAgICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAoZGEtPmlkLT5uYW1lKVstMV0gPSAyOworICAgICAgICAg
IG5QcmVmaXhlcysrOworICAgICAgICAgIGFwcEF0dHNbYXR0SW5kZXgrK10gPSBkYS0+aWQtPm5h
bWU7CisgICAgICAgICAgYXBwQXR0c1thdHRJbmRleCsrXSA9IGRhLT52YWx1ZTsKKyAgICAgICAg
fQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIChkYS0+aWQtPm5hbWUpWy0xXSA9IDE7
CisgICAgICAgIGFwcEF0dHNbYXR0SW5kZXgrK10gPSBkYS0+aWQtPm5hbWU7CisgICAgICAgIGFw
cEF0dHNbYXR0SW5kZXgrK10gPSBkYS0+dmFsdWU7CisgICAgICB9CisgICAgfQorICB9CisgIGFw
cEF0dHNbYXR0SW5kZXhdID0gMDsKKworICAvKiBleHBhbmQgcHJlZml4ZWQgYXR0cmlidXRlIG5h
bWVzLCBjaGVjayBmb3IgZHVwbGljYXRlcywKKyAgICAgYW5kIGNsZWFyIGZsYWdzIHRoYXQgc2F5
IHdoZXRoZXIgYXR0cmlidXRlcyB3ZXJlIHNwZWNpZmllZCAqLworICBpID0gMDsKKyAgaWYgKG5Q
cmVmaXhlcykgeworICAgIGludCBqOyAgLyogaGFzaCB0YWJsZSBpbmRleCAqLworICAgIHVuc2ln
bmVkIGxvbmcgdmVyc2lvbiA9IG5zQXR0c1ZlcnNpb247CisgICAgaW50IG5zQXR0c1NpemUgPSAo
aW50KTEgPDwgbnNBdHRzUG93ZXI7CisgICAgLyogc2l6ZSBvZiBoYXNoIHRhYmxlIG11c3QgYmUg
YXQgbGVhc3QgMiAqICgjIG9mIHByZWZpeGVkIGF0dHJpYnV0ZXMpICovCisgICAgaWYgKChuUHJl
Zml4ZXMgPDwgMSkgPj4gbnNBdHRzUG93ZXIpIHsgIC8qIHRydWUgZm9yIG5zQXR0c1Bvd2VyID0g
MCAqLworICAgICAgTlNfQVRUICp0ZW1wOworICAgICAgLyogaGFzaCB0YWJsZSBzaXplIG11c3Qg
YWxzbyBiZSBhIHBvd2VyIG9mIDIgYW5kID49IDggKi8KKyAgICAgIHdoaWxlIChuUHJlZml4ZXMg
Pj4gbnNBdHRzUG93ZXIrKyk7CisgICAgICBpZiAobnNBdHRzUG93ZXIgPCAzKQorICAgICAgICBu
c0F0dHNQb3dlciA9IDM7CisgICAgICBuc0F0dHNTaXplID0gKGludCkxIDw8IG5zQXR0c1Bvd2Vy
OworICAgICAgdGVtcCA9IChOU19BVFQgKilSRUFMTE9DKG5zQXR0cywgbnNBdHRzU2l6ZSAqIHNp
emVvZihOU19BVFQpKTsKKyAgICAgIGlmICghdGVtcCkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7CisgICAgICBuc0F0dHMgPSB0ZW1wOworICAgICAgdmVyc2lvbiA9IDA7ICAv
KiBmb3JjZSByZS1pbml0aWFsaXphdGlvbiBvZiBuc0F0dHMgaGFzaCB0YWJsZSAqLworICAgIH0K
KyAgICAvKiB1c2luZyBhIHZlcnNpb24gZmxhZyBzYXZlcyB1cyBmcm9tIGluaXRpYWxpemluZyBu
c0F0dHMgZXZlcnkgdGltZSAqLworICAgIGlmICghdmVyc2lvbikgeyAgLyogaW5pdGlhbGl6ZSB2
ZXJzaW9uIGZsYWdzIHdoZW4gdmVyc2lvbiB3cmFwcyBhcm91bmQgKi8KKyAgICAgIHZlcnNpb24g
PSBJTklUX0FUVFNfVkVSU0lPTjsKKyAgICAgIGZvciAoaiA9IG5zQXR0c1NpemU7IGogIT0gMDsg
KQorICAgICAgICBuc0F0dHNbLS1qXS52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICB9CisgICAgbnNB
dHRzVmVyc2lvbiA9IC0tdmVyc2lvbjsKKworICAgIC8qIGV4cGFuZCBwcmVmaXhlZCBuYW1lcyBh
bmQgY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi8KKyAgICBmb3IgKDsgaSA8IGF0dEluZGV4OyBpICs9
IDIpIHsKKyAgICAgIGNvbnN0IFhNTF9DaGFyICpzID0gYXBwQXR0c1tpXTsKKyAgICAgIGlmIChz
Wy0xXSA9PSAyKSB7ICAvKiBwcmVmaXhlZCAqLworICAgICAgICBBVFRSSUJVVEVfSUQgKmlkOwor
ICAgICAgICBjb25zdCBCSU5ESU5HICpiOworICAgICAgICB1bnNpZ25lZCBsb25nIHVyaUhhc2gg
PSBoYXNoX3NlY3JldF9zYWx0OworICAgICAgICAoKFhNTF9DaGFyICopcylbLTFdID0gMDsgIC8q
IGNsZWFyIGZsYWcgKi8KKyAgICAgICAgaWQgPSAoQVRUUklCVVRFX0lEICopbG9va3VwKHBhcnNl
ciwgJmR0ZC0+YXR0cmlidXRlSWRzLCBzLCAwKTsKKyAgICAgICAgYiA9IGlkLT5wcmVmaXgtPmJp
bmRpbmc7CisgICAgICAgIGlmICghYikKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQk9V
TkRfUFJFRklYOworCisgICAgICAgIC8qIGFzIHdlIGV4cGFuZCB0aGUgbmFtZSB3ZSBhbHNvIGNh
bGN1bGF0ZSBpdHMgaGFzaCB2YWx1ZSAqLworICAgICAgICBmb3IgKGogPSAwOyBqIDwgYi0+dXJp
TGVuOyBqKyspIHsKKyAgICAgICAgICBjb25zdCBYTUxfQ2hhciBjID0gYi0+dXJpW2pdOworICAg
ICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBjKSkKKyAgICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAgIHVyaUhhc2ggPSBDSEFSX0hBU0go
dXJpSGFzaCwgYyk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCpzKysgIT0gWE1MX1QoQVND
SUlfQ09MT04pKQorICAgICAgICAgIDsKKyAgICAgICAgZG8geyAgLyogY29waWVzIG51bGwgdGVy
bWluYXRvciAqLworICAgICAgICAgIGNvbnN0IFhNTF9DaGFyIGMgPSAqczsKKyAgICAgICAgICBp
ZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgKnMpKQorICAgICAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgdXJpSGFzaCA9IENIQVJfSEFTSCh1cmlIYXNo
LCBjKTsKKyAgICAgICAgfSB3aGlsZSAoKnMrKyk7CisKKyAgICAgICAgeyAvKiBDaGVjayBoYXNo
IHRhYmxlIGZvciBkdXBsaWNhdGUgb2YgZXhwYW5kZWQgbmFtZSAodXJpTmFtZSkuCisgICAgICAg
ICAgICAgRGVyaXZlZCBmcm9tIGNvZGUgaW4gbG9va3VwKHBhcnNlciwgSEFTSF9UQUJMRSAqdGFi
bGUsIC4uLikuCisgICAgICAgICAgKi8KKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0ZXAgPSAw
OworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9IG5zQXR0c1NpemUgLSAxOworICAgICAg
ICAgIGogPSB1cmlIYXNoICYgbWFzazsgIC8qIGluZGV4IGludG8gaGFzaCB0YWJsZSAqLworICAg
ICAgICAgIHdoaWxlIChuc0F0dHNbal0udmVyc2lvbiA9PSB2ZXJzaW9uKSB7CisgICAgICAgICAg
ICAvKiBmb3Igc3BlZWQgd2UgY29tcGFyZSBzdG9yZWQgaGFzaCB2YWx1ZXMgZmlyc3QgKi8KKyAg
ICAgICAgICAgIGlmICh1cmlIYXNoID09IG5zQXR0c1tqXS5oYXNoKSB7CisgICAgICAgICAgICAg
IGNvbnN0IFhNTF9DaGFyICpzMSA9IHBvb2xTdGFydCgmdGVtcFBvb2wpOworICAgICAgICAgICAg
ICBjb25zdCBYTUxfQ2hhciAqczIgPSBuc0F0dHNbal0udXJpTmFtZTsKKyAgICAgICAgICAgICAg
LyogczEgaXMgbnVsbCB0ZXJtaW5hdGVkLCBidXQgbm90IHMyICovCisgICAgICAgICAgICAgIGZv
ciAoOyAqczEgPT0gKnMyICYmICpzMSAhPSAwOyBzMSsrLCBzMisrKTsKKyAgICAgICAgICAgICAg
aWYgKCpzMSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfRFVQTElDQVRF
X0FUVFJJQlVURTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc3RlcCkKKyAgICAg
ICAgICAgICAgc3RlcCA9IFBST0JFX1NURVAodXJpSGFzaCwgbWFzaywgbnNBdHRzUG93ZXIpOwor
ICAgICAgICAgICAgaiA8IHN0ZXAgPyAoaiArPSBuc0F0dHNTaXplIC0gc3RlcCkgOiAoaiAtPSBz
dGVwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobnNfdHJpcGxldHMp
IHsgIC8qIGFwcGVuZCBuYW1lc3BhY2Ugc2VwYXJhdG9yIGFuZCBwcmVmaXggKi8KKyAgICAgICAg
ICB0ZW1wUG9vbC5wdHJbLTFdID0gbmFtZXNwYWNlU2VwYXJhdG9yOworICAgICAgICAgIHMgPSBi
LT5wcmVmaXgtPm5hbWU7CisgICAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKCFwb29sQXBw
ZW5kQ2hhcigmdGVtcFBvb2wsICpzKSkKKyAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T19NRU1PUlk7CisgICAgICAgICAgfSB3aGlsZSAoKnMrKyk7CisgICAgICAgIH0KKworICAgICAg
ICAvKiBzdG9yZSBleHBhbmRlZCBuYW1lIGluIGF0dHJpYnV0ZSBsaXN0ICovCisgICAgICAgIHMg
PSBwb29sU3RhcnQoJnRlbXBQb29sKTsKKyAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOwor
ICAgICAgICBhcHBBdHRzW2ldID0gczsKKworICAgICAgICAvKiBmaWxsIGVtcHR5IHNsb3Qgd2l0
aCBuZXcgdmVyc2lvbiwgdXJpTmFtZSBhbmQgaGFzaCB2YWx1ZSAqLworICAgICAgICBuc0F0dHNb
al0udmVyc2lvbiA9IHZlcnNpb247CisgICAgICAgIG5zQXR0c1tqXS5oYXNoID0gdXJpSGFzaDsK
KyAgICAgICAgbnNBdHRzW2pdLnVyaU5hbWUgPSBzOworCisgICAgICAgIGlmICghLS1uUHJlZml4
ZXMpIHsKKyAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICAgIGVsc2UgIC8qIG5vdCBwcmVmaXhlZCAqLworICAgICAgICAoKFhNTF9DaGFy
ICopcylbLTFdID0gMDsgIC8qIGNsZWFyIGZsYWcgKi8KKyAgICB9CisgIH0KKyAgLyogY2xlYXIg
ZmxhZ3MgZm9yIHRoZSByZW1haW5pbmcgYXR0cmlidXRlcyAqLworICBmb3IgKDsgaSA8IGF0dElu
ZGV4OyBpICs9IDIpCisgICAgKChYTUxfQ2hhciAqKShhcHBBdHRzW2ldKSlbLTFdID0gMDsKKyAg
Zm9yIChiaW5kaW5nID0gKmJpbmRpbmdzUHRyOyBiaW5kaW5nOyBiaW5kaW5nID0gYmluZGluZy0+
bmV4dFRhZ0JpbmRpbmcpCisgICAgYmluZGluZy0+YXR0SWQtPm5hbWVbLTFdID0gMDsKKworICBp
ZiAoIW5zKQorICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKworICAvKiBleHBhbmQgdGhlIGVs
ZW1lbnQgdHlwZSBuYW1lICovCisgIGlmIChlbGVtZW50VHlwZS0+cHJlZml4KSB7CisgICAgYmlu
ZGluZyA9IGVsZW1lbnRUeXBlLT5wcmVmaXgtPmJpbmRpbmc7CisgICAgaWYgKCFiaW5kaW5nKQor
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkJPVU5EX1BSRUZJWDsKKyAgICBsb2NhbFBhcnQgPSB0
YWdOYW1lUHRyLT5zdHI7CisgICAgd2hpbGUgKCpsb2NhbFBhcnQrKyAhPSBYTUxfVChBU0NJSV9D
T0xPTikpCisgICAgICA7CisgIH0KKyAgZWxzZSBpZiAoZHRkLT5kZWZhdWx0UHJlZml4LmJpbmRp
bmcpIHsKKyAgICBiaW5kaW5nID0gZHRkLT5kZWZhdWx0UHJlZml4LmJpbmRpbmc7CisgICAgbG9j
YWxQYXJ0ID0gdGFnTmFtZVB0ci0+c3RyOworICB9CisgIGVsc2UKKyAgICByZXR1cm4gWE1MX0VS
Uk9SX05PTkU7CisgIHByZWZpeExlbiA9IDA7CisgIGlmIChuc190cmlwbGV0cyAmJiBiaW5kaW5n
LT5wcmVmaXgtPm5hbWUpIHsKKyAgICBmb3IgKDsgYmluZGluZy0+cHJlZml4LT5uYW1lW3ByZWZp
eExlbisrXTspCisgICAgICA7ICAvKiBwcmVmaXhMZW4gaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdG9y
ICovCisgIH0KKyAgdGFnTmFtZVB0ci0+bG9jYWxQYXJ0ID0gbG9jYWxQYXJ0OworICB0YWdOYW1l
UHRyLT51cmlMZW4gPSBiaW5kaW5nLT51cmlMZW47CisgIHRhZ05hbWVQdHItPnByZWZpeCA9IGJp
bmRpbmctPnByZWZpeC0+bmFtZTsKKyAgdGFnTmFtZVB0ci0+cHJlZml4TGVuID0gcHJlZml4TGVu
OworICBmb3IgKGkgPSAwOyBsb2NhbFBhcnRbaSsrXTspCisgICAgOyAgLyogaSBpbmNsdWRlcyBu
dWxsIHRlcm1pbmF0b3IgKi8KKyAgbiA9IGkgKyBiaW5kaW5nLT51cmlMZW4gKyBwcmVmaXhMZW47
CisgIGlmIChuID4gYmluZGluZy0+dXJpQWxsb2MpIHsKKyAgICBUQUcgKnA7CisgICAgdXJpID0g
KFhNTF9DaGFyICopTUFMTE9DKChuICsgRVhQQU5EX1NQQVJFKSAqIHNpemVvZihYTUxfQ2hhcikp
OworICAgIGlmICghdXJpKQorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAg
YmluZGluZy0+dXJpQWxsb2MgPSBuICsgRVhQQU5EX1NQQVJFOworICAgIG1lbWNweSh1cmksIGJp
bmRpbmctPnVyaSwgYmluZGluZy0+dXJpTGVuICogc2l6ZW9mKFhNTF9DaGFyKSk7CisgICAgZm9y
IChwID0gdGFnU3RhY2s7IHA7IHAgPSBwLT5wYXJlbnQpCisgICAgICBpZiAocC0+bmFtZS5zdHIg
PT0gYmluZGluZy0+dXJpKQorICAgICAgICBwLT5uYW1lLnN0ciA9IHVyaTsKKyAgICBGUkVFKGJp
bmRpbmctPnVyaSk7CisgICAgYmluZGluZy0+dXJpID0gdXJpOworICB9CisgIC8qIGlmIG5hbWVz
cGFjZVNlcGFyYXRvciAhPSAnXDAnIHRoZW4gdXJpIGluY2x1ZGVzIGl0IGFscmVhZHkgKi8KKyAg
dXJpID0gYmluZGluZy0+dXJpICsgYmluZGluZy0+dXJpTGVuOworICBtZW1jcHkodXJpLCBsb2Nh
bFBhcnQsIGkgKiBzaXplb2YoWE1MX0NoYXIpKTsKKyAgLyogd2UgYWx3YXlzIGhhdmUgYSBuYW1l
c3BhY2Ugc2VwYXJhdG9yIGJldHdlZW4gbG9jYWxQYXJ0IGFuZCBwcmVmaXggKi8KKyAgaWYgKHBy
ZWZpeExlbikgeworICAgIHVyaSArPSBpIC0gMTsKKyAgICAqdXJpID0gbmFtZXNwYWNlU2VwYXJh
dG9yOyAgLyogcmVwbGFjZSBudWxsIHRlcm1pbmF0b3IgKi8KKyAgICBtZW1jcHkodXJpICsgMSwg
YmluZGluZy0+cHJlZml4LT5uYW1lLCBwcmVmaXhMZW4gKiBzaXplb2YoWE1MX0NoYXIpKTsKKyAg
fQorICB0YWdOYW1lUHRyLT5zdHIgPSBiaW5kaW5nLT51cmk7CisgIHJldHVybiBYTUxfRVJST1Jf
Tk9ORTsKK30KKworLyogYWRkQmluZGluZygpIG92ZXJ3cml0ZXMgdGhlIHZhbHVlIG9mIHByZWZp
eC0+YmluZGluZyB3aXRob3V0IGNoZWNraW5nLgorICAgVGhlcmVmb3JlIG9uZSBtdXN0IGtlZXAg
dHJhY2sgb2YgdGhlIG9sZCB2YWx1ZSBvdXRzaWRlIG9mIGFkZEJpbmRpbmcoKS4KKyovCitzdGF0
aWMgZW51bSBYTUxfRXJyb3IKK2FkZEJpbmRpbmcoWE1MX1BhcnNlciBwYXJzZXIsIFBSRUZJWCAq
cHJlZml4LCBjb25zdCBBVFRSSUJVVEVfSUQgKmF0dElkLAorICAgICAgICAgICBjb25zdCBYTUxf
Q2hhciAqdXJpLCBCSU5ESU5HICoqYmluZGluZ3NQdHIpCit7CisgIHN0YXRpYyBjb25zdCBYTUxf
Q2hhciB4bWxOYW1lc3BhY2VbXSA9IHsKKyAgICBBU0NJSV9oLCBBU0NJSV90LCBBU0NJSV90LCBB
U0NJSV9wLCBBU0NJSV9DT0xPTiwgQVNDSUlfU0xBU0gsIEFTQ0lJX1NMQVNILAorICAgIEFTQ0lJ
X3csIEFTQ0lJX3csIEFTQ0lJX3csIEFTQ0lJX1BFUklPRCwgQVNDSUlfdywgQVNDSUlfMywgQVND
SUlfUEVSSU9ELAorICAgIEFTQ0lJX28sIEFTQ0lJX3IsIEFTQ0lJX2csIEFTQ0lJX1NMQVNILCBB
U0NJSV9YLCBBU0NJSV9NLCBBU0NJSV9MLAorICAgIEFTQ0lJX1NMQVNILCBBU0NJSV8xLCBBU0NJ
SV85LCBBU0NJSV85LCBBU0NJSV84LCBBU0NJSV9TTEFTSCwKKyAgICBBU0NJSV9uLCBBU0NJSV9h
LCBBU0NJSV9tLCBBU0NJSV9lLCBBU0NJSV9zLCBBU0NJSV9wLCBBU0NJSV9hLCBBU0NJSV9jLAor
ICAgIEFTQ0lJX2UsICdcMCcKKyAgfTsKKyAgc3RhdGljIGNvbnN0IGludCB4bWxMZW4gPQorICAg
IChpbnQpc2l6ZW9mKHhtbE5hbWVzcGFjZSkvc2l6ZW9mKFhNTF9DaGFyKSAtIDE7CisgIHN0YXRp
YyBjb25zdCBYTUxfQ2hhciB4bWxuc05hbWVzcGFjZVtdID0geworICAgIEFTQ0lJX2gsIEFTQ0lJ
X3QsIEFTQ0lJX3QsIEFTQ0lJX3AsIEFTQ0lJX0NPTE9OLCBBU0NJSV9TTEFTSCwgQVNDSUlfU0xB
U0gsCisgICAgQVNDSUlfdywgQVNDSUlfdywgQVNDSUlfdywgQVNDSUlfUEVSSU9ELCBBU0NJSV93
LCBBU0NJSV8zLCBBU0NJSV9QRVJJT0QsCisgICAgQVNDSUlfbywgQVNDSUlfciwgQVNDSUlfZywg
QVNDSUlfU0xBU0gsIEFTQ0lJXzIsIEFTQ0lJXzAsIEFTQ0lJXzAsCisgICAgQVNDSUlfMCwgQVND
SUlfU0xBU0gsIEFTQ0lJX3gsIEFTQ0lJX20sIEFTQ0lJX2wsIEFTQ0lJX24sIEFTQ0lJX3MsCisg
ICAgQVNDSUlfU0xBU0gsICdcMCcKKyAgfTsKKyAgc3RhdGljIGNvbnN0IGludCB4bWxuc0xlbiA9
CisgICAgKGludClzaXplb2YoeG1sbnNOYW1lc3BhY2UpL3NpemVvZihYTUxfQ2hhcikgLSAxOwor
CisgIFhNTF9Cb29sIG11c3RCZVhNTCA9IFhNTF9GQUxTRTsKKyAgWE1MX0Jvb2wgaXNYTUwgPSBY
TUxfVFJVRTsKKyAgWE1MX0Jvb2wgaXNYTUxOUyA9IFhNTF9UUlVFOworCisgIEJJTkRJTkcgKmI7
CisgIGludCBsZW47CisKKyAgLyogZW1wdHkgVVJJIGlzIG9ubHkgdmFsaWQgZm9yIGRlZmF1bHQg
bmFtZXNwYWNlIHBlciBYTUwgTlMgMS4wIChub3QgMS4xKSAqLworICBpZiAoKnVyaSA9PSBYTUxf
VCgnXDAnKSAmJiBwcmVmaXgtPm5hbWUpCisgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkRFQ0xBUklO
R19QUkVGSVg7CisKKyAgaWYgKHByZWZpeC0+bmFtZQorICAgICAgJiYgcHJlZml4LT5uYW1lWzBd
ID09IFhNTF9UKEFTQ0lJX3gpCisgICAgICAmJiBwcmVmaXgtPm5hbWVbMV0gPT0gWE1MX1QoQVND
SUlfbSkKKyAgICAgICYmIHByZWZpeC0+bmFtZVsyXSA9PSBYTUxfVChBU0NJSV9sKSkgeworCisg
ICAgLyogTm90IGFsbG93ZWQgdG8gYmluZCB4bWxucyAqLworICAgIGlmIChwcmVmaXgtPm5hbWVb
M10gPT0gWE1MX1QoQVNDSUlfbikKKyAgICAgICAgJiYgcHJlZml4LT5uYW1lWzRdID09IFhNTF9U
KEFTQ0lJX3MpCisgICAgICAgICYmIHByZWZpeC0+bmFtZVs1XSA9PSBYTUxfVCgnXDAnKSkKKyAg
ICAgIHJldHVybiBYTUxfRVJST1JfUkVTRVJWRURfUFJFRklYX1hNTE5TOworCisgICAgaWYgKHBy
ZWZpeC0+bmFtZVszXSA9PSBYTUxfVCgnXDAnKSkKKyAgICAgIG11c3RCZVhNTCA9IFhNTF9UUlVF
OworICB9CisKKyAgZm9yIChsZW4gPSAwOyB1cmlbbGVuXTsgbGVuKyspIHsKKyAgICBpZiAoaXNY
TUwgJiYgKGxlbiA+IHhtbExlbiB8fCB1cmlbbGVuXSAhPSB4bWxOYW1lc3BhY2VbbGVuXSkpCisg
ICAgICBpc1hNTCA9IFhNTF9GQUxTRTsKKworICAgIGlmICghbXVzdEJlWE1MICYmIGlzWE1MTlMK
KyAgICAgICAgJiYgKGxlbiA+IHhtbG5zTGVuIHx8IHVyaVtsZW5dICE9IHhtbG5zTmFtZXNwYWNl
W2xlbl0pKQorICAgICAgaXNYTUxOUyA9IFhNTF9GQUxTRTsKKyAgfQorICBpc1hNTCA9IGlzWE1M
ICYmIGxlbiA9PSB4bWxMZW47CisgIGlzWE1MTlMgPSBpc1hNTE5TICYmIGxlbiA9PSB4bWxuc0xl
bjsKKworICBpZiAobXVzdEJlWE1MICE9IGlzWE1MKQorICAgIHJldHVybiBtdXN0QmVYTUwgPyBY
TUxfRVJST1JfUkVTRVJWRURfUFJFRklYX1hNTAorICAgICAgICAgICAgICAgICAgICAgOiBYTUxf
RVJST1JfUkVTRVJWRURfTkFNRVNQQUNFX1VSSTsKKworICBpZiAoaXNYTUxOUykKKyAgICByZXR1
cm4gWE1MX0VSUk9SX1JFU0VSVkVEX05BTUVTUEFDRV9VUkk7CisKKyAgaWYgKG5hbWVzcGFjZVNl
cGFyYXRvcikKKyAgICBsZW4rKzsKKyAgaWYgKGZyZWVCaW5kaW5nTGlzdCkgeworICAgIGIgPSBm
cmVlQmluZGluZ0xpc3Q7CisgICAgaWYgKGxlbiA+IGItPnVyaUFsbG9jKSB7CisgICAgICBYTUxf
Q2hhciAqdGVtcCA9IChYTUxfQ2hhciAqKVJFQUxMT0MoYi0+dXJpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2YoWE1MX0NoYXIpICogKGxlbiArIEVYUEFORF9TUEFSRSkpOworICAg
ICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7
CisgICAgICBiLT51cmkgPSB0ZW1wOworICAgICAgYi0+dXJpQWxsb2MgPSBsZW4gKyBFWFBBTkRf
U1BBUkU7CisgICAgfQorICAgIGZyZWVCaW5kaW5nTGlzdCA9IGItPm5leHRUYWdCaW5kaW5nOwor
ICB9CisgIGVsc2UgeworICAgIGIgPSAoQklORElORyAqKU1BTExPQyhzaXplb2YoQklORElORykp
OworICAgIGlmICghYikKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgIGIt
PnVyaSA9IChYTUxfQ2hhciAqKU1BTExPQyhzaXplb2YoWE1MX0NoYXIpICogKGxlbiArIEVYUEFO
RF9TUEFSRSkpOworICAgIGlmICghYi0+dXJpKSB7CisgICAgICBGUkVFKGIpOworICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgfQorICAgIGItPnVyaUFsbG9jID0gbGVuICsg
RVhQQU5EX1NQQVJFOworICB9CisgIGItPnVyaUxlbiA9IGxlbjsKKyAgbWVtY3B5KGItPnVyaSwg
dXJpLCBsZW4gKiBzaXplb2YoWE1MX0NoYXIpKTsKKyAgaWYgKG5hbWVzcGFjZVNlcGFyYXRvcikK
KyAgICBiLT51cmlbbGVuIC0gMV0gPSBuYW1lc3BhY2VTZXBhcmF0b3I7CisgIGItPnByZWZpeCA9
IHByZWZpeDsKKyAgYi0+YXR0SWQgPSBhdHRJZDsKKyAgYi0+cHJldlByZWZpeEJpbmRpbmcgPSBw
cmVmaXgtPmJpbmRpbmc7CisgIC8qIE5VTEwgYmluZGluZyB3aGVuIGRlZmF1bHQgbmFtZXNwYWNl
IHVuZGVjbGFyZWQgKi8KKyAgaWYgKCp1cmkgPT0gWE1MX1QoJ1wwJykgJiYgcHJlZml4ID09ICZf
ZHRkLT5kZWZhdWx0UHJlZml4KQorICAgIHByZWZpeC0+YmluZGluZyA9IE5VTEw7CisgIGVsc2UK
KyAgICBwcmVmaXgtPmJpbmRpbmcgPSBiOworICBiLT5uZXh0VGFnQmluZGluZyA9ICpiaW5kaW5n
c1B0cjsKKyAgKmJpbmRpbmdzUHRyID0gYjsKKyAgLyogaWYgYXR0SWQgPT0gTlVMTCB0aGVuIHdl
IGFyZSBub3Qgc3RhcnRpbmcgYSBuYW1lc3BhY2Ugc2NvcGUgKi8KKyAgaWYgKGF0dElkICYmIHN0
YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpCisgICAgc3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciho
YW5kbGVyQXJnLCBwcmVmaXgtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmVmaXgtPmJpbmRpbmcgPyB1cmkgOiAwKTsKKyAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworfQor
CisvKiBUaGUgaWRlYSBoZXJlIGlzIHRvIGF2b2lkIHVzaW5nIHN0YWNrIGZvciBlYWNoIENEQVRB
IHNlY3Rpb24gd2hlbgorICAgdGhlIHdob2xlIGZpbGUgaXMgcGFyc2VkIHdpdGggb25lIGNhbGwu
CisqLworc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKK2NkYXRhU2VjdGlvblByb2Nlc3Nv
cihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpz
dGFydCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuZFB0cikKK3sKKyAgZW51bSBYTUxfRXJyb3IgcmVz
dWx0ID0gZG9DZGF0YVNlY3Rpb24ocGFyc2VyLCBlbmNvZGluZywgJnN0YXJ0LCBlbmQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFB0ciwgKFhNTF9Cb29sKSFw
c19maW5hbEJ1ZmZlcik7CisgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisgICAgcmV0
dXJuIHJlc3VsdDsKKyAgaWYgKHN0YXJ0KSB7CisgICAgaWYgKHBhcmVudFBhcnNlcikgeyAgLyog
d2UgYXJlIHBhcnNpbmcgYW4gZXh0ZXJuYWwgZW50aXR5ICovCisgICAgICBwcm9jZXNzb3IgPSBl
eHRlcm5hbEVudGl0eUNvbnRlbnRQcm9jZXNzb3I7CisgICAgICByZXR1cm4gZXh0ZXJuYWxFbnRp
dHlDb250ZW50UHJvY2Vzc29yKHBhcnNlciwgc3RhcnQsIGVuZCwgZW5kUHRyKTsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgICBwcm9jZXNzb3IgPSBjb250ZW50UHJvY2Vzc29yOworICAgICAgcmV0
dXJuIGNvbnRlbnRQcm9jZXNzb3IocGFyc2VyLCBzdGFydCwgZW5kLCBlbmRQdHIpOworICAgIH0K
KyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKiBzdGFydFB0ciBnZXRzIHNldCB0byBub24t
bnVsbCBpZiB0aGUgc2VjdGlvbiBpcyBjbG9zZWQsIGFuZCB0byBudWxsIGlmCisgICB0aGUgc2Vj
dGlvbiBpcyBub3QgeWV0IGNsb3NlZC4KKyovCitzdGF0aWMgZW51bSBYTUxfRXJyb3IKK2RvQ2Rh
dGFTZWN0aW9uKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJ
TkcgKmVuYywKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipzdGFydFB0ciwKKyAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0
UHRyLAorICAgICAgICAgICAgICAgWE1MX0Jvb2wgaGF2ZU1vcmUpCit7CisgIGNvbnN0IGNoYXIg
KnMgPSAqc3RhcnRQdHI7CisgIGNvbnN0IGNoYXIgKipldmVudFBQOworICBjb25zdCBjaGFyICoq
ZXZlbnRFbmRQUDsKKyAgaWYgKGVuYyA9PSBlbmNvZGluZykgeworICAgIGV2ZW50UFAgPSAmZXZl
bnRQdHI7CisgICAgKmV2ZW50UFAgPSBzOworICAgIGV2ZW50RW5kUFAgPSAmZXZlbnRFbmRQdHI7
CisgIH0KKyAgZWxzZSB7CisgICAgZXZlbnRQUCA9ICYob3BlbkludGVybmFsRW50aXRpZXMtPmlu
dGVybmFsRXZlbnRQdHIpOworICAgIGV2ZW50RW5kUFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVz
LT5pbnRlcm5hbEV2ZW50RW5kUHRyKTsKKyAgfQorICAqZXZlbnRQUCA9IHM7CisgICpzdGFydFB0
ciA9IE5VTEw7CisKKyAgZm9yICg7OykgeworICAgIGNvbnN0IGNoYXIgKm5leHQ7CisgICAgaW50
IHRvayA9IFhtbENkYXRhU2VjdGlvblRvayhlbmMsIHMsIGVuZCwgJm5leHQpOworICAgICpldmVu
dEVuZFBQID0gbmV4dDsKKyAgICBzd2l0Y2ggKHRvaykgeworICAgIGNhc2UgWE1MX1RPS19DREFU
QV9TRUNUX0NMT1NFOgorICAgICAgaWYgKGVuZENkYXRhU2VjdGlvbkhhbmRsZXIpCisgICAgICAg
IGVuZENkYXRhU2VjdGlvbkhhbmRsZXIoaGFuZGxlckFyZyk7CisjaWYgMAorICAgICAgLyogc2Vl
IGNvbW1lbnQgdW5kZXIgWE1MX1RPS19DREFUQV9TRUNUX09QRU4gKi8KKyAgICAgIGVsc2UgaWYg
KGNoYXJhY3RlckRhdGFIYW5kbGVyKQorICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5k
bGVyQXJnLCBkYXRhQnVmLCAwKTsKKyNlbmRpZgorICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRs
ZXIpCisgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAg
KnN0YXJ0UHRyID0gbmV4dDsKKyAgICAgICpuZXh0UHRyID0gbmV4dDsKKyAgICAgIGlmIChwc19w
YXJzaW5nID09IFhNTF9GSU5JU0hFRCkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVE
OworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgY2FzZSBY
TUxfVE9LX0RBVEFfTkVXTElORToKKyAgICAgIGlmIChjaGFyYWN0ZXJEYXRhSGFuZGxlcikgewor
ICAgICAgICBYTUxfQ2hhciBjID0gMHhBOworICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlciho
YW5kbGVyQXJnLCAmYywgMSk7CisgICAgICB9CisgICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxl
cikKKyAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7CisgICAgICBi
cmVhazsKKyAgICBjYXNlIFhNTF9UT0tfREFUQV9DSEFSUzoKKyAgICAgIHsKKyAgICAgICAgWE1M
X0NoYXJhY3RlckRhdGFIYW5kbGVyIGNoYXJEYXRhSGFuZGxlciA9IGNoYXJhY3RlckRhdGFIYW5k
bGVyOworICAgICAgICBpZiAoY2hhckRhdGFIYW5kbGVyKSB7CisgICAgICAgICAgaWYgKE1VU1Rf
Q09OVkVSVChlbmMsIHMpKSB7CisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAg
IElDSEFSICpkYXRhUHRyID0gKElDSEFSICopZGF0YUJ1ZjsKKyAgICAgICAgICAgICAgWG1sQ29u
dmVydChlbmMsICZzLCBuZXh0LCAmZGF0YVB0ciwgKElDSEFSICopZGF0YUJ1ZkVuZCk7CisgICAg
ICAgICAgICAgICpldmVudEVuZFBQID0gbmV4dDsKKyAgICAgICAgICAgICAgY2hhckRhdGFIYW5k
bGVyKGhhbmRsZXJBcmcsIGRhdGFCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aW50KShkYXRhUHRyIC0gKElDSEFSICopZGF0YUJ1ZikpOworICAgICAgICAgICAgICBpZiAocyA9
PSBuZXh0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAqZXZlbnRQUCA9
IHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNoYXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChYTUxfQ2hhciAqKXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKFhN
TF9DaGFyICopbmV4dCAtIChYTUxfQ2hhciAqKXMpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5j
LCBzLCBuZXh0KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19JTlZB
TElEOgorICAgICAgKmV2ZW50UFAgPSBuZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9JTlZB
TElEX1RPS0VOOworICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMX0NIQVI6CisgICAgICBpZiAoaGF2
ZU1vcmUpIHsKKyAgICAgICAgKm5leHRQdHIgPSBzOworICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X05PTkU7CisgICAgICB9CisgICAgICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUjsKKyAg
ICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgICBjYXNlIFhNTF9UT0tfTk9ORToKKyAgICAgIGlm
IChoYXZlTW9yZSkgeworICAgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAgIHJldHVybiBYTUxf
RVJST1JfTk9ORTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBYTUxfRVJST1JfVU5DTE9TRURfQ0RB
VEFfU0VDVElPTjsKKyAgICBkZWZhdWx0OgorICAgICAgKmV2ZW50UFAgPSBuZXh0OworICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9VTkVYUEVDVEVEX1NUQVRFOworICAgIH0KKworICAgICpldmVudFBQ
ID0gcyA9IG5leHQ7CisgICAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgICAgY2FzZSBYTUxfU1VT
UEVOREVEOgorICAgICAgKm5leHRQdHIgPSBuZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T05FOworICAgIGNhc2UgWE1MX0ZJTklTSEVEOgorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9S
VEVEOworICAgIGRlZmF1bHQ6IDsKKyAgICB9CisgIH0KKyAgLyogbm90IHJlYWNoZWQgKi8KK30K
KworI2lmZGVmIFhNTF9EVEQKKworLyogVGhlIGlkZWEgaGVyZSBpcyB0byBhdm9pZCB1c2luZyBz
dGFjayBmb3IgZWFjaCBJR05PUkUgc2VjdGlvbiB3aGVuCisgICB0aGUgd2hvbGUgZmlsZSBpcyBw
YXJzZWQgd2l0aCBvbmUgY2FsbC4KKyovCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAor
aWdub3JlU2VjdGlvblByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuZFB0cikK
K3sKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gZG9JZ25vcmVTZWN0aW9uKHBhcnNlciwgZW5j
b2RpbmcsICZzdGFydCwgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kUHRyLCAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVyKTsKKyAgaWYgKHJlc3VsdCAh
PSBYTUxfRVJST1JfTk9ORSkKKyAgICByZXR1cm4gcmVzdWx0OworICBpZiAoc3RhcnQpIHsKKyAg
ICBwcm9jZXNzb3IgPSBwcm9sb2dQcm9jZXNzb3I7CisgICAgcmV0dXJuIHByb2xvZ1Byb2Nlc3Nv
cihwYXJzZXIsIHN0YXJ0LCBlbmQsIGVuZFB0cik7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30K
KworLyogc3RhcnRQdHIgZ2V0cyBzZXQgdG8gbm9uLW51bGwgaXMgdGhlIHNlY3Rpb24gaXMgY2xv
c2VkLCBhbmQgdG8gbnVsbAorICAgaWYgdGhlIHNlY3Rpb24gaXMgbm90IHlldCBjbG9zZWQuCisq
Lworc3RhdGljIGVudW0gWE1MX0Vycm9yCitkb0lnbm9yZVNlY3Rpb24oWE1MX1BhcnNlciBwYXJz
ZXIsCisgICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICoqc3RhcnRQdHIsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyLAorICAgICAgICAgICAgICAg
IFhNTF9Cb29sIGhhdmVNb3JlKQoreworICBjb25zdCBjaGFyICpuZXh0OworICBpbnQgdG9rOwor
ICBjb25zdCBjaGFyICpzID0gKnN0YXJ0UHRyOworICBjb25zdCBjaGFyICoqZXZlbnRQUDsKKyAg
Y29uc3QgY2hhciAqKmV2ZW50RW5kUFA7CisgIGlmIChlbmMgPT0gZW5jb2RpbmcpIHsKKyAgICBl
dmVudFBQID0gJmV2ZW50UHRyOworICAgICpldmVudFBQID0gczsKKyAgICBldmVudEVuZFBQID0g
JmV2ZW50RW5kUHRyOworICB9CisgIGVsc2UgeworICAgIGV2ZW50UFAgPSAmKG9wZW5JbnRlcm5h
bEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50UHRyKTsKKyAgICBldmVudEVuZFBQID0gJihvcGVuSW50
ZXJuYWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudEVuZFB0cik7CisgIH0KKyAgKmV2ZW50UFAgPSBz
OworICAqc3RhcnRQdHIgPSBOVUxMOworICB0b2sgPSBYbWxJZ25vcmVTZWN0aW9uVG9rKGVuYywg
cywgZW5kLCAmbmV4dCk7CisgICpldmVudEVuZFBQID0gbmV4dDsKKyAgc3dpdGNoICh0b2spIHsK
KyAgY2FzZSBYTUxfVE9LX0lHTk9SRV9TRUNUOgorICAgIGlmIChkZWZhdWx0SGFuZGxlcikKKyAg
ICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICpzdGFydFB0ciA9
IG5leHQ7CisgICAgKm5leHRQdHIgPSBuZXh0OworICAgIGlmIChwc19wYXJzaW5nID09IFhNTF9G
SU5JU0hFRCkKKyAgICAgIHJldHVybiBYTUxfRVJST1JfQUJPUlRFRDsKKyAgICBlbHNlCisgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgIGNhc2UgWE1MX1RPS19JTlZBTElEOgorICAgICpl
dmVudFBQID0gbmV4dDsKKyAgICByZXR1cm4gWE1MX0VSUk9SX0lOVkFMSURfVE9LRU47CisgIGNh
c2UgWE1MX1RPS19QQVJUSUFMX0NIQVI6CisgICAgaWYgKGhhdmVNb3JlKSB7CisgICAgICAqbmV4
dFB0ciA9IHM7CisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgfQorICAgIHJldHVy
biBYTUxfRVJST1JfUEFSVElBTF9DSEFSOworICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgY2Fz
ZSBYTUxfVE9LX05PTkU6CisgICAgaWYgKGhhdmVNb3JlKSB7CisgICAgICAqbmV4dFB0ciA9IHM7
CisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgfQorICAgIHJldHVybiBYTUxfRVJS
T1JfU1lOVEFYOyAvKiBYTUxfRVJST1JfVU5DTE9TRURfSUdOT1JFX1NFQ1RJT04gKi8KKyAgZGVm
YXVsdDoKKyAgICAqZXZlbnRQUCA9IG5leHQ7CisgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkVYUEVD
VEVEX1NUQVRFOworICB9CisgIC8qIG5vdCByZWFjaGVkICovCit9CisKKyNlbmRpZiAvKiBYTUxf
RFREICovCisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgoraW5pdGlhbGl6ZUVuY29kaW5nKFhNTF9Q
YXJzZXIgcGFyc2VyKQoreworICBjb25zdCBjaGFyICpzOworI2lmZGVmIFhNTF9VTklDT0RFCisg
IGNoYXIgZW5jb2RpbmdCdWZbMTI4XTsKKyAgaWYgKCFwcm90b2NvbEVuY29kaW5nTmFtZSkKKyAg
ICBzID0gTlVMTDsKKyAgZWxzZSB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgcHJvdG9j
b2xFbmNvZGluZ05hbWVbaV07IGkrKykgeworICAgICAgaWYgKGkgPT0gc2l6ZW9mKGVuY29kaW5n
QnVmKSAtIDEKKyAgICAgICAgICB8fCAocHJvdG9jb2xFbmNvZGluZ05hbWVbaV0gJiB+MHg3Zikg
IT0gMCkgeworICAgICAgICBlbmNvZGluZ0J1ZlswXSA9ICdcMCc7CisgICAgICAgIGJyZWFrOwor
ICAgICAgfQorICAgICAgZW5jb2RpbmdCdWZbaV0gPSAoY2hhcilwcm90b2NvbEVuY29kaW5nTmFt
ZVtpXTsKKyAgICB9CisgICAgZW5jb2RpbmdCdWZbaV0gPSAnXDAnOworICAgIHMgPSBlbmNvZGlu
Z0J1ZjsKKyAgfQorI2Vsc2UKKyAgcyA9IHByb3RvY29sRW5jb2RpbmdOYW1lOworI2VuZGlmCisg
IGlmICgobnMgPyBYbWxJbml0RW5jb2RpbmdOUyA6IFhtbEluaXRFbmNvZGluZykoJmluaXRFbmNv
ZGluZywgJmVuY29kaW5nLCBzKSkKKyAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgIHJldHVy
biBoYW5kbGVVbmtub3duRW5jb2RpbmcocGFyc2VyLCBwcm90b2NvbEVuY29kaW5nTmFtZSk7Cit9
CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorcHJvY2Vzc1htbERlY2woWE1MX1BhcnNlciBwYXJz
ZXIsIGludCBpc0dlbmVyYWxUZXh0RW50aXR5LAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
cywgY29uc3QgY2hhciAqbmV4dCkKK3sKKyAgY29uc3QgY2hhciAqZW5jb2RpbmdOYW1lID0gTlVM
TDsKKyAgY29uc3QgWE1MX0NoYXIgKnN0b3JlZEVuY05hbWUgPSBOVUxMOworICBjb25zdCBFTkNP
RElORyAqbmV3RW5jb2RpbmcgPSBOVUxMOworICBjb25zdCBjaGFyICp2ZXJzaW9uID0gTlVMTDsK
KyAgY29uc3QgY2hhciAqdmVyc2lvbmVuZDsKKyAgY29uc3QgWE1MX0NoYXIgKnN0b3JlZHZlcnNp
b24gPSBOVUxMOworICBpbnQgc3RhbmRhbG9uZSA9IC0xOworICBpZiAoIShucworICAgICAgICA/
IFhtbFBhcnNlWG1sRGVjbE5TCisgICAgICAgIDogWG1sUGFyc2VYbWxEZWNsKShpc0dlbmVyYWxU
ZXh0RW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudFB0ciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZ2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZlcnNpb25l
bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jb2RpbmdOYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm5ld0VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnN0YW5kYWxvbmUpKSB7CisgICAgaWYgKGlzR2VuZXJhbFRleHRFbnRpdHkpCisgICAgICBy
ZXR1cm4gWE1MX0VSUk9SX1RFWFRfREVDTDsKKyAgICBlbHNlCisgICAgICByZXR1cm4gWE1MX0VS
Uk9SX1hNTF9ERUNMOworICB9CisgIGlmICghaXNHZW5lcmFsVGV4dEVudGl0eSAmJiBzdGFuZGFs
b25lID09IDEpIHsKKyAgICBfZHRkLT5zdGFuZGFsb25lID0gWE1MX1RSVUU7CisjaWZkZWYgWE1M
X0RURAorICAgIGlmIChwYXJhbUVudGl0eVBhcnNpbmcgPT0gWE1MX1BBUkFNX0VOVElUWV9QQVJT
SU5HX1VOTEVTU19TVEFOREFMT05FKQorICAgICAgcGFyYW1FbnRpdHlQYXJzaW5nID0gWE1MX1BB
UkFNX0VOVElUWV9QQVJTSU5HX05FVkVSOworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgfQorICBp
ZiAoeG1sRGVjbEhhbmRsZXIpIHsKKyAgICBpZiAoZW5jb2RpbmdOYW1lICE9IE5VTEwpIHsKKyAg
ICAgIHN0b3JlZEVuY05hbWUgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXAyUG9vbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5jb2RpbmdOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsgWG1sTmFtZUxlbmd0aChlbmNvZGluZywgZW5jb2RpbmdOYW1lKSk7Cisg
ICAgICBpZiAoIXN0b3JlZEVuY05hbWUpCisgICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9fTUVNT1JZOworICAgICAgcG9vbEZpbmlzaCgmdGVtcDJQb29sKTsKKyAgICB9CisgICAgaWYg
KHZlcnNpb24pIHsKKyAgICAgIHN0b3JlZHZlcnNpb24gPSBwb29sU3RvcmVTdHJpbmcoJnRlbXAy
UG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25lbmQgLSBlbmNvZGluZy0+bWluQnl0
ZXNQZXJDaGFyKTsKKyAgICAgIGlmICghc3RvcmVkdmVyc2lvbikKKyAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9OT19NRU1PUlk7CisgICAgfQorICAgIHhtbERlY2xIYW5kbGVyKGhhbmRsZXJBcmcs
IHN0b3JlZHZlcnNpb24sIHN0b3JlZEVuY05hbWUsIHN0YW5kYWxvbmUpOworICB9CisgIGVsc2Ug
aWYgKGRlZmF1bHRIYW5kbGVyKQorICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmNvZGluZywg
cywgbmV4dCk7CisgIGlmIChwcm90b2NvbEVuY29kaW5nTmFtZSA9PSBOVUxMKSB7CisgICAgaWYg
KG5ld0VuY29kaW5nKSB7CisgICAgICBpZiAobmV3RW5jb2RpbmctPm1pbkJ5dGVzUGVyQ2hhciAh
PSBlbmNvZGluZy0+bWluQnl0ZXNQZXJDaGFyKSB7CisgICAgICAgIGV2ZW50UHRyID0gZW5jb2Rp
bmdOYW1lOworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0lOQ09SUkVDVF9FTkNPRElORzsKKyAg
ICAgIH0KKyAgICAgIGVuY29kaW5nID0gbmV3RW5jb2Rpbmc7CisgICAgfQorICAgIGVsc2UgaWYg
KGVuY29kaW5nTmFtZSkgeworICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OworICAgICAgaWYg
KCFzdG9yZWRFbmNOYW1lKSB7CisgICAgICAgIHN0b3JlZEVuY05hbWUgPSBwb29sU3RvcmVTdHJp
bmcoCisgICAgICAgICAgJnRlbXAyUG9vbCwgZW5jb2RpbmcsIGVuY29kaW5nTmFtZSwKKyAgICAg
ICAgICBlbmNvZGluZ05hbWUgKyBYbWxOYW1lTGVuZ3RoKGVuY29kaW5nLCBlbmNvZGluZ05hbWUp
KTsKKyAgICAgICAgaWYgKCFzdG9yZWRFbmNOYW1lKQorICAgICAgICAgIHJldHVybiBYTUxfRVJS
T1JfTk9fTUVNT1JZOworICAgICAgfQorICAgICAgcmVzdWx0ID0gaGFuZGxlVW5rbm93bkVuY29k
aW5nKHBhcnNlciwgc3RvcmVkRW5jTmFtZSk7CisgICAgICBwb29sQ2xlYXIoJnRlbXAyUG9vbCk7
CisgICAgICBpZiAocmVzdWx0ID09IFhNTF9FUlJPUl9VTktOT1dOX0VOQ09ESU5HKQorICAgICAg
ICBldmVudFB0ciA9IGVuY29kaW5nTmFtZTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICB9CisKKyAgaWYgKHN0b3JlZEVuY05hbWUgfHwgc3RvcmVkdmVyc2lvbikKKyAgICBwb29sQ2xl
YXIoJnRlbXAyUG9vbCk7CisKKyAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworfQorCitzdGF0aWMg
ZW51bSBYTUxfRXJyb3IKK2hhbmRsZVVua25vd25FbmNvZGluZyhYTUxfUGFyc2VyIHBhcnNlciwg
Y29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFtZSkKK3sKKyAgaWYgKHVua25vd25FbmNvZGluZ0hh
bmRsZXIpIHsKKyAgICBYTUxfRW5jb2RpbmcgaW5mbzsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgMjU2OyBpKyspCisgICAgICBpbmZvLm1hcFtpXSA9IC0xOworICAgIGluZm8uY29u
dmVydCA9IE5VTEw7CisgICAgaW5mby5kYXRhID0gTlVMTDsKKyAgICBpbmZvLnJlbGVhc2UgPSBO
VUxMOworICAgIGlmICh1bmtub3duRW5jb2RpbmdIYW5kbGVyKHVua25vd25FbmNvZGluZ0hhbmRs
ZXJEYXRhLCBlbmNvZGluZ05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlu
Zm8pKSB7CisgICAgICBFTkNPRElORyAqZW5jOworICAgICAgdW5rbm93bkVuY29kaW5nTWVtID0g
TUFMTE9DKFhtbFNpemVPZlVua25vd25FbmNvZGluZygpKTsKKyAgICAgIGlmICghdW5rbm93bkVu
Y29kaW5nTWVtKSB7CisgICAgICAgIGlmIChpbmZvLnJlbGVhc2UpCisgICAgICAgICAgaW5mby5y
ZWxlYXNlKGluZm8uZGF0YSk7CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwor
ICAgICAgfQorICAgICAgZW5jID0gKG5zCisgICAgICAgICAgICAgPyBYbWxJbml0VW5rbm93bkVu
Y29kaW5nTlMKKyAgICAgICAgICAgICA6IFhtbEluaXRVbmtub3duRW5jb2RpbmcpKHVua25vd25F
bmNvZGluZ01lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8u
bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5jb252ZXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5kYXRhKTsKKyAg
ICAgIGlmIChlbmMpIHsKKyAgICAgICAgdW5rbm93bkVuY29kaW5nRGF0YSA9IGluZm8uZGF0YTsK
KyAgICAgICAgdW5rbm93bkVuY29kaW5nUmVsZWFzZSA9IGluZm8ucmVsZWFzZTsKKyAgICAgICAg
ZW5jb2RpbmcgPSBlbmM7CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICAgIH0K
KyAgICB9CisgICAgaWYgKGluZm8ucmVsZWFzZSAhPSBOVUxMKQorICAgICAgaW5mby5yZWxlYXNl
KGluZm8uZGF0YSk7CisgIH0KKyAgcmV0dXJuIFhNTF9FUlJPUl9VTktOT1dOX0VOQ09ESU5HOwor
fQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAorcHJvbG9nSW5pdFByb2Nlc3NvcihY
TUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICoqbmV4dFB0cikKK3sKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gaW5pdGlh
bGl6ZUVuY29kaW5nKHBhcnNlcik7CisgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgcHJvY2Vzc29yID0gcHJvbG9nUHJvY2Vzc29yOworICByZXR1
cm4gcHJvbG9nUHJvY2Vzc29yKHBhcnNlciwgcywgZW5kLCBuZXh0UHRyKTsKK30KKworI2lmZGVm
IFhNTF9EVEQKKworc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKK2V4dGVybmFsUGFyRW50
SW5pdFByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0
cikKK3sKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gaW5pdGlhbGl6ZUVuY29kaW5nKHBhcnNl
cik7CisgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisgICAgcmV0dXJuIHJlc3VsdDsK
KworICAvKiB3ZSBrbm93IG5vdyB0aGF0IFhNTF9QYXJzZShCdWZmZXIpIGhhcyBiZWVuIGNhbGxl
ZCwKKyAgICAgc28gd2UgY29uc2lkZXIgdGhlIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkgcmVh
ZCAqLworICBfZHRkLT5wYXJhbUVudGl0eVJlYWQgPSBYTUxfVFJVRTsKKworICBpZiAocHJvbG9n
U3RhdGUuaW5FbnRpdHlWYWx1ZSkgeworICAgIHByb2Nlc3NvciA9IGVudGl0eVZhbHVlSW5pdFBy
b2Nlc3NvcjsKKyAgICByZXR1cm4gZW50aXR5VmFsdWVJbml0UHJvY2Vzc29yKHBhcnNlciwgcywg
ZW5kLCBuZXh0UHRyKTsKKyAgfQorICBlbHNlIHsKKyAgICBwcm9jZXNzb3IgPSBleHRlcm5hbFBh
ckVudFByb2Nlc3NvcjsKKyAgICByZXR1cm4gZXh0ZXJuYWxQYXJFbnRQcm9jZXNzb3IocGFyc2Vy
LCBzLCBlbmQsIG5leHRQdHIpOworICB9Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJD
QUxMCitlbnRpdHlWYWx1ZUluaXRQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
Km5leHRQdHIpCit7CisgIGludCB0b2s7CisgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gczsKKyAgY29u
c3QgY2hhciAqbmV4dCA9IHN0YXJ0OworICBldmVudFB0ciA9IHN0YXJ0OworCisgIGZvciAoOzsp
IHsKKyAgICB0b2sgPSBYbWxQcm9sb2dUb2soZW5jb2RpbmcsIHN0YXJ0LCBlbmQsICZuZXh0KTsK
KyAgICBldmVudEVuZFB0ciA9IG5leHQ7CisgICAgaWYgKHRvayA8PSAwKSB7CisgICAgICBpZiAo
IXBzX2ZpbmFsQnVmZmVyICYmIHRvayAhPSBYTUxfVE9LX0lOVkFMSUQpIHsKKyAgICAgICAgKm5l
eHRQdHIgPSBzOworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICB9CisgICAg
ICBzd2l0Y2ggKHRvaykgeworICAgICAgY2FzZSBYTUxfVE9LX0lOVkFMSUQ6CisgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKKyAgICAgIGNhc2UgWE1MX1RPS19QQVJUSUFM
OgorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOOworICAgICAgY2FzZSBY
TUxfVE9LX1BBUlRJQUxfQ0hBUjoKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFMX0NI
QVI7CisgICAgICBjYXNlIFhNTF9UT0tfTk9ORTogICAvKiBzdGFydCA9PSBlbmQgKi8KKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgLyogZm91bmQgZW5kIG9m
IGVudGl0eSB2YWx1ZSAtIGNhbiBzdG9yZSBpdCBub3cgKi8KKyAgICAgIHJldHVybiBzdG9yZUVu
dGl0eVZhbHVlKHBhcnNlciwgZW5jb2RpbmcsIHMsIGVuZCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHRvayA9PSBYTUxfVE9LX1hNTF9ERUNMKSB7CisgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7
CisgICAgICByZXN1bHQgPSBwcm9jZXNzWG1sRGVjbChwYXJzZXIsIDAsIHN0YXJ0LCBuZXh0KTsK
KyAgICAgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKKyAgICAgIGNhc2UgWE1MX1NVU1BFTkRF
RDoKKyAgICAgICAgKm5leHRQdHIgPSBuZXh0OworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
TkU7CisgICAgICBjYXNlIFhNTF9GSU5JU0hFRDoKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9B
Qk9SVEVEOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgKm5leHRQdHIgPSBuZXh0OworICAgICAg
fQorICAgICAgLyogc3RvcCBzY2FubmluZyBmb3IgdGV4dCBkZWNsYXJhdGlvbiAtIHdlIGZvdW5k
IG9uZSAqLworICAgICAgcHJvY2Vzc29yID0gZW50aXR5VmFsdWVQcm9jZXNzb3I7CisgICAgICBy
ZXR1cm4gZW50aXR5VmFsdWVQcm9jZXNzb3IocGFyc2VyLCBuZXh0LCBlbmQsIG5leHRQdHIpOwor
ICAgIH0KKyAgICAvKiBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCB0aGlzIHdv
dWxkIGNhdXNlIFhtbFByb2xvZ1RvayB0bworICAgICAgIHJldHVybiBYTUxfVE9LX05PTkUgb24g
dGhlIG5leHQgY2FsbCwgd2hpY2ggd291bGQgdGhlbiBjYXVzZSB0aGUKKyAgICAgICBmdW5jdGlv
biB0byBleGl0IHdpdGggKm5leHRQdHIgc2V0IHRvIHMgLSB0aGF0IGlzIHdoYXQgd2Ugd2FudCBm
b3Igb3RoZXIKKyAgICAgICB0b2tlbnMsIGJ1dCBub3QgZm9yIHRoZSBCT00gLSB3ZSB3b3VsZCBy
YXRoZXIgbGlrZSB0byBza2lwIGl0OworICAgICAgIHRoZW4sIHdoZW4gdGhpcyByb3V0aW5lIGlz
IGVudGVyZWQgdGhlIG5leHQgdGltZSwgWG1sUHJvbG9nVG9rIHdpbGwKKyAgICAgICByZXR1cm4g
WE1MX1RPS19JTlZBTElELCBzaW5jZSB0aGUgQk9NIGlzIHN0aWxsIGluIHRoZSBidWZmZXIKKyAg
ICAqLworICAgIGVsc2UgaWYgKHRvayA9PSBYTUxfVE9LX0JPTSAmJiBuZXh0ID09IGVuZCAmJiAh
cHNfZmluYWxCdWZmZXIpIHsKKyAgICAgICpuZXh0UHRyID0gbmV4dDsKKyAgICAgIHJldHVybiBY
TUxfRVJST1JfTk9ORTsKKyAgICB9CisgICAgc3RhcnQgPSBuZXh0OworICAgIGV2ZW50UHRyID0g
c3RhcnQ7CisgIH0KK30KKworc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKK2V4dGVybmFs
UGFyRW50UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyKQoreworICBj
b25zdCBjaGFyICpuZXh0ID0gczsKKyAgaW50IHRvazsKKworICB0b2sgPSBYbWxQcm9sb2dUb2so
ZW5jb2RpbmcsIHMsIGVuZCwgJm5leHQpOworICBpZiAodG9rIDw9IDApIHsKKyAgICBpZiAoIXBz
X2ZpbmFsQnVmZmVyICYmIHRvayAhPSBYTUxfVE9LX0lOVkFMSUQpIHsKKyAgICAgICpuZXh0UHRy
ID0gczsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICB9CisgICAgc3dpdGNoICh0
b2spIHsKKyAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKKyAgICAgIHJldHVybiBYTUxfRVJST1Jf
SU5WQUxJRF9UT0tFTjsKKyAgICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgICAgIHJldHVybiBY
TUxfRVJST1JfVU5DTE9TRURfVE9LRU47CisgICAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoK
KyAgICAgIHJldHVybiBYTUxfRVJST1JfUEFSVElBTF9DSEFSOworICAgIGNhc2UgWE1MX1RPS19O
T05FOiAgIC8qIHN0YXJ0ID09IGVuZCAqLworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAg
ICB9CisgIH0KKyAgLyogVGhpcyB3b3VsZCBjYXVzZSB0aGUgbmV4dCBzdGFnZSwgaS5lLiBkb1By
b2xvZyB0byBiZSBwYXNzZWQgWE1MX1RPS19CT00uCisgICAgIEhvd2V2ZXIsIHdoZW4gcGFyc2lu
ZyBhbiBleHRlcm5hbCBzdWJzZXQsIGRvUHJvbG9nIHdpbGwgbm90IGFjY2VwdCBhIEJPTQorICAg
ICBhcyB2YWxpZCwgYW5kIHJlcG9ydCBhIHN5bnRheCBlcnJvciwgc28gd2UgaGF2ZSB0byBza2lw
IHRoZSBCT00KKyAgKi8KKyAgZWxzZSBpZiAodG9rID09IFhNTF9UT0tfQk9NKSB7CisgICAgcyA9
IG5leHQ7CisgICAgdG9rID0gWG1sUHJvbG9nVG9rKGVuY29kaW5nLCBzLCBlbmQsICZuZXh0KTsK
KyAgfQorCisgIHByb2Nlc3NvciA9IHByb2xvZ1Byb2Nlc3NvcjsKKyAgcmV0dXJuIGRvUHJvbG9n
KHBhcnNlciwgZW5jb2RpbmcsIHMsIGVuZCwgdG9rLCBuZXh0LAorICAgICAgICAgICAgICAgICAg
bmV4dFB0ciwgKFhNTF9Cb29sKSFwc19maW5hbEJ1ZmZlcik7Cit9CisKK3N0YXRpYyBlbnVtIFhN
TF9FcnJvciBQVFJDQUxMCitlbnRpdHlWYWx1ZVByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwK
KyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4
dFB0cikKK3sKKyAgY29uc3QgY2hhciAqc3RhcnQgPSBzOworICBjb25zdCBjaGFyICpuZXh0ID0g
czsKKyAgY29uc3QgRU5DT0RJTkcgKmVuYyA9IGVuY29kaW5nOworICBpbnQgdG9rOworCisgIGZv
ciAoOzspIHsKKyAgICB0b2sgPSBYbWxQcm9sb2dUb2soZW5jLCBzdGFydCwgZW5kLCAmbmV4dCk7
CisgICAgaWYgKHRvayA8PSAwKSB7CisgICAgICBpZiAoIXBzX2ZpbmFsQnVmZmVyICYmIHRvayAh
PSBYTUxfVE9LX0lOVkFMSUQpIHsKKyAgICAgICAgKm5leHRQdHIgPSBzOworICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICB9CisgICAgICBzd2l0Y2ggKHRvaykgeworICAgICAg
Y2FzZSBYTUxfVE9LX0lOVkFMSUQ6CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9U
T0tFTjsKKyAgICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMOgorICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX1VOQ0xPU0VEX1RPS0VOOworICAgICAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKKyAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVI7CisgICAgICBjYXNlIFhNTF9UT0tf
Tk9ORTogICAvKiBzdGFydCA9PSBlbmQgKi8KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgICAgfQorICAgICAgLyogZm91bmQgZW5kIG9mIGVudGl0eSB2YWx1ZSAtIGNhbiBzdG9y
ZSBpdCBub3cgKi8KKyAgICAgIHJldHVybiBzdG9yZUVudGl0eVZhbHVlKHBhcnNlciwgZW5jLCBz
LCBlbmQpOworICAgIH0KKyAgICBzdGFydCA9IG5leHQ7CisgIH0KK30KKworI2VuZGlmIC8qIFhN
TF9EVEQgKi8KKworc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKK3Byb2xvZ1Byb2Nlc3Nv
cihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzLAorICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICoqbmV4dFB0cikKK3sKKyAgY29uc3QgY2hhciAqbmV4dCA9IHM7CisgIGludCB0b2sgPSBYbWxQ
cm9sb2dUb2soZW5jb2RpbmcsIHMsIGVuZCwgJm5leHQpOworICByZXR1cm4gZG9Qcm9sb2cocGFy
c2VyLCBlbmNvZGluZywgcywgZW5kLCB0b2ssIG5leHQsCisgICAgICAgICAgICAgICAgICBuZXh0
UHRyLCAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVyKTsKK30KKworc3RhdGljIGVudW0gWE1MX0Vy
cm9yCitkb1Byb2xvZyhYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgIGNvbnN0IEVOQ09ESU5H
ICplbmMsCisgICAgICAgICBjb25zdCBjaGFyICpzLAorICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAorICAgICAgICAgaW50IHRvaywKKyAgICAgICAgIGNvbnN0IGNoYXIgKm5leHQsCisgICAgICAg
ICBjb25zdCBjaGFyICoqbmV4dFB0ciwKKyAgICAgICAgIFhNTF9Cb29sIGhhdmVNb3JlKQorewor
I2lmZGVmIFhNTF9EVEQKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGV4dGVybmFsU3Vic2V0TmFt
ZVtdID0geyBBU0NJSV9IQVNIICwgJ1wwJyB9OworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgc3Rh
dGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlQ0RBVEFbXSA9CisgICAgICB7IEFTQ0lJX0MsIEFTQ0lJ
X0QsIEFTQ0lJX0EsIEFTQ0lJX1QsIEFTQ0lJX0EsICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhN
TF9DaGFyIGF0eXBlSURbXSA9IHsgQVNDSUlfSSwgQVNDSUlfRCwgJ1wwJyB9OworICBzdGF0aWMg
Y29uc3QgWE1MX0NoYXIgYXR5cGVJRFJFRltdID0KKyAgICAgIHsgQVNDSUlfSSwgQVNDSUlfRCwg
QVNDSUlfUiwgQVNDSUlfRSwgQVNDSUlfRiwgJ1wwJyB9OworICBzdGF0aWMgY29uc3QgWE1MX0No
YXIgYXR5cGVJRFJFRlNbXSA9CisgICAgICB7IEFTQ0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFT
Q0lJX0UsIEFTQ0lJX0YsIEFTQ0lJX1MsICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFy
IGF0eXBlRU5USVRZW10gPQorICAgICAgeyBBU0NJSV9FLCBBU0NJSV9OLCBBU0NJSV9ULCBBU0NJ
SV9JLCBBU0NJSV9ULCBBU0NJSV9ZLCAnXDAnIH07CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBh
dHlwZUVOVElUSUVTW10gPSB7IEFTQ0lJX0UsIEFTQ0lJX04sCisgICAgICBBU0NJSV9ULCBBU0NJ
SV9JLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9FLCBBU0NJSV9TLCAnXDAnIH07CisgIHN0YXRp
YyBjb25zdCBYTUxfQ2hhciBhdHlwZU5NVE9LRU5bXSA9IHsKKyAgICAgIEFTQ0lJX04sIEFTQ0lJ
X00sIEFTQ0lJX1QsIEFTQ0lJX08sIEFTQ0lJX0ssIEFTQ0lJX0UsIEFTQ0lJX04sICdcMCcgfTsK
KyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlTk1UT0tFTlNbXSA9IHsgQVNDSUlfTiwgQVND
SUlfTSwgQVNDSUlfVCwKKyAgICAgIEFTQ0lJX08sIEFTQ0lJX0ssIEFTQ0lJX0UsIEFTQ0lJX04s
IEFTQ0lJX1MsICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIG5vdGF0aW9uUHJlZml4
W10gPSB7IEFTQ0lJX04sIEFTQ0lJX08sIEFTQ0lJX1QsCisgICAgICBBU0NJSV9BLCBBU0NJSV9U
LCBBU0NJSV9JLCBBU0NJSV9PLCBBU0NJSV9OLCBBU0NJSV9MUEFSRU4sICdcMCcgfTsKKyAgc3Rh
dGljIGNvbnN0IFhNTF9DaGFyIGVudW1WYWx1ZVNlcFtdID0geyBBU0NJSV9QSVBFLCAnXDAnIH07
CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBlbnVtVmFsdWVTdGFydFtdID0geyBBU0NJSV9MUEFS
RU4sICdcMCcgfTsKKworICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLworICBE
VEQgKiBjb25zdCBkdGQgPSBfZHRkOworCisgIGNvbnN0IGNoYXIgKipldmVudFBQOworICBjb25z
dCBjaGFyICoqZXZlbnRFbmRQUDsKKyAgZW51bSBYTUxfQ29udGVudF9RdWFudCBxdWFudDsKKwor
ICBpZiAoZW5jID09IGVuY29kaW5nKSB7CisgICAgZXZlbnRQUCA9ICZldmVudFB0cjsKKyAgICBl
dmVudEVuZFBQID0gJmV2ZW50RW5kUHRyOworICB9CisgIGVsc2UgeworICAgIGV2ZW50UFAgPSAm
KG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50UHRyKTsKKyAgICBldmVudEVuZFBQ
ID0gJihvcGVuSW50ZXJuYWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudEVuZFB0cik7CisgIH0KKwor
ICBmb3IgKDs7KSB7CisgICAgaW50IHJvbGU7CisgICAgWE1MX0Jvb2wgaGFuZGxlRGVmYXVsdCA9
IFhNTF9UUlVFOworICAgICpldmVudFBQID0gczsKKyAgICAqZXZlbnRFbmRQUCA9IG5leHQ7Cisg
ICAgaWYgKHRvayA8PSAwKSB7CisgICAgICBpZiAoaGF2ZU1vcmUgJiYgdG9rICE9IFhNTF9UT0tf
SU5WQUxJRCkgeworICAgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAgIHJldHVybiBYTUxfRVJS
T1JfTk9ORTsKKyAgICAgIH0KKyAgICAgIHN3aXRjaCAodG9rKSB7CisgICAgICBjYXNlIFhNTF9U
T0tfSU5WQUxJRDoKKyAgICAgICAgKmV2ZW50UFAgPSBuZXh0OworICAgICAgICByZXR1cm4gWE1M
X0VSUk9SX0lOVkFMSURfVE9LRU47CisgICAgICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9VTkNMT1NFRF9UT0tFTjsKKyAgICAgIGNhc2UgWE1MX1RPS19Q
QVJUSUFMX0NIQVI6CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfUEFSVElBTF9DSEFSOworICAg
ICAgY2FzZSAtWE1MX1RPS19QUk9MT0dfUzoKKyAgICAgICAgdG9rID0gLXRvazsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIFhNTF9UT0tfTk9ORToKKyNpZmRlZiBYTUxfRFRECisgICAgICAg
IC8qIGZvciBpbnRlcm5hbCBQRSBOT1QgcmVmZXJlbmNlZCBiZXR3ZWVuIGRlY2xhcmF0aW9ucyAq
LworICAgICAgICBpZiAoZW5jICE9IGVuY29kaW5nICYmICFvcGVuSW50ZXJuYWxFbnRpdGllcy0+
YmV0d2VlbkRlY2wpIHsKKyAgICAgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT05FOworICAgICAgICB9CisgICAgICAgIC8qIFdGQzogUEUgQmV0d2VlbiBE
ZWNsYXJhdGlvbnMgLSBtdXN0IGNoZWNrIHRoYXQgUEUgY29udGFpbnMKKyAgICAgICAgICAgY29t
cGxldGUgbWFya3VwLCBub3Qgb25seSBmb3IgZXh0ZXJuYWwgUEVzLCBidXQgYWxzbyBmb3IKKyAg
ICAgICAgICAgaW50ZXJuYWwgUEVzIGlmIHRoZSByZWZlcmVuY2Ugb2NjdXJzIGJldHdlZW4gZGVj
bGFyYXRpb25zLgorICAgICAgICAqLworICAgICAgICBpZiAoaXNQYXJhbUVudGl0eSB8fCBlbmMg
IT0gZW5jb2RpbmcpIHsKKyAgICAgICAgICBpZiAoWG1sVG9rZW5Sb2xlKCZwcm9sb2dTdGF0ZSwg
WE1MX1RPS19OT05FLCBlbmQsIGVuZCwgZW5jKQorICAgICAgICAgICAgICA9PSBYTUxfUk9MRV9F
UlJPUikKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfSU5DT01QTEVURV9QRTsKKyAgICAg
ICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAg
ICAgICB9CisjZW5kaWYgLyogWE1MX0RURCAqLworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
X0VMRU1FTlRTOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgdG9rID0gLXRvazsKKyAgICAgICAg
bmV4dCA9IGVuZDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHJvbGUgPSBY
bWxUb2tlblJvbGUoJnByb2xvZ1N0YXRlLCB0b2ssIHMsIG5leHQsIGVuYyk7CisgICAgc3dpdGNo
IChyb2xlKSB7CisgICAgY2FzZSBYTUxfUk9MRV9YTUxfREVDTDoKKyAgICAgIHsKKyAgICAgICAg
ZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gcHJvY2Vzc1htbERlY2wocGFyc2VyLCAwLCBzLCBuZXh0
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkKKyAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICBlbmMgPSBlbmNvZGluZzsKKyAgICAgICAgaGFuZGxlRGVmYXVs
dCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVf
RE9DVFlQRV9OQU1FOgorICAgICAgaWYgKHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKSB7CisgICAg
ICAgIGRvY3R5cGVOYW1lID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwgZW5jLCBzLCBuZXh0
KTsKKyAgICAgICAgaWYgKCFkb2N0eXBlTmFtZSkKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X05PX01FTU9SWTsKKyAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOworICAgICAgICBkb2N0
eXBlUHViaWQgPSBOVUxMOworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAg
ICAgfQorICAgICAgZG9jdHlwZVN5c2lkID0gTlVMTDsgLyogYWx3YXlzIGluaXRpYWxpemUgdG8g
TlVMTCAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9ET0NUWVBFX0lOVEVSTkFM
X1NVQlNFVDoKKyAgICAgIGlmIChzdGFydERvY3R5cGVEZWNsSGFuZGxlcikgeworICAgICAgICBz
dGFydERvY3R5cGVEZWNsSGFuZGxlcihoYW5kbGVyQXJnLCBkb2N0eXBlTmFtZSwgZG9jdHlwZVN5
c2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N0eXBlUHViaWQsIDEpOwor
ICAgICAgICBkb2N0eXBlTmFtZSA9IE5VTEw7CisgICAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wp
OworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAgICAgYnJl
YWs7CisjaWZkZWYgWE1MX0RURAorICAgIGNhc2UgWE1MX1JPTEVfVEVYVF9ERUNMOgorICAgICAg
eworICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBwcm9jZXNzWG1sRGVjbChwYXJzZXIs
IDEsIHMsIG5leHQpOworICAgICAgICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQorICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGVuYyA9IGVuY29kaW5nOworICAgICAgICBo
YW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYg
LyogWE1MX0RURCAqLworICAgIGNhc2UgWE1MX1JPTEVfRE9DVFlQRV9QVUJMSUNfSUQ6CisjaWZk
ZWYgWE1MX0RURAorICAgICAgdXNlRm9yZWlnbkRURCA9IFhNTF9GQUxTRTsKKyAgICAgIGRlY2xF
bnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZkdGQtPnBhcmFtRW50aXRpZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHRlcm5hbFN1YnNldE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplb2YoRU5USVRZKSk7CisgICAgICBpZiAoIWRlY2xFbnRpdHkpCisg
ICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworI2VuZGlmIC8qIFhNTF9EVEQgKi8K
KyAgICAgIGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzID0gWE1MX1RSVUU7CisgICAgICBpZiAoc3Rh
cnREb2N0eXBlRGVjbEhhbmRsZXIpIHsKKyAgICAgICAgWE1MX0NoYXIgKnB1YklkOworICAgICAg
ICBpZiAoIVhtbElzUHVibGljSWQoZW5jLCBzLCBuZXh0LCBldmVudFBQKSkKKyAgICAgICAgICBy
ZXR1cm4gWE1MX0VSUk9SX1BVQkxJQ0lEOworICAgICAgICBwdWJJZCA9IHBvb2xTdG9yZVN0cmlu
ZygmdGVtcFBvb2wsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVu
Yy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0
IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOworICAgICAgICBpZiAoIXB1YklkKQorICAgICAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICBub3JtYWxpemVQdWJsaWNJZChw
dWJJZCk7CisgICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKKyAgICAgICAgZG9jdHlwZVB1
YmlkID0gcHViSWQ7CisgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAg
IGdvdG8gYWxyZWFkeUNoZWNrZWQ7CisgICAgICB9CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8K
KyAgICBjYXNlIFhNTF9ST0xFX0VOVElUWV9QVUJMSUNfSUQ6CisgICAgICBpZiAoIVhtbElzUHVi
bGljSWQoZW5jLCBzLCBuZXh0LCBldmVudFBQKSkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9Q
VUJMSUNJRDsKKyAgICBhbHJlYWR5Q2hlY2tlZDoKKyAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNz
aW5nICYmIGRlY2xFbnRpdHkpIHsKKyAgICAgICAgWE1MX0NoYXIgKnRlbSA9IHBvb2xTdG9yZVN0
cmluZygmZHRkLT5wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsgZW5jLT5t
aW5CeXRlc1BlckNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKKyAgICAgICAgaWYgKCF0ZW0pCisgICAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIG5vcm1hbGl6ZVB1YmxpY0lk
KHRlbSk7CisgICAgICAgIGRlY2xFbnRpdHktPnB1YmxpY0lkID0gdGVtOworICAgICAgICBwb29s
RmluaXNoKCZkdGQtPnBvb2wpOworICAgICAgICBpZiAoZW50aXR5RGVjbEhhbmRsZXIpCisgICAg
ICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgWE1MX1JPTEVfRE9DVFlQRV9DTE9TRToKKyAgICAgIGlmIChkb2N0eXBlTmFtZSkg
eworICAgICAgICBzdGFydERvY3R5cGVEZWNsSGFuZGxlcihoYW5kbGVyQXJnLCBkb2N0eXBlTmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdHlwZVN5c2lkLCBkb2N0eXBl
UHViaWQsIDApOworICAgICAgICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKKyAgICAgICAgaGFuZGxl
RGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIC8qIGRvY3R5cGVTeXNpZCB3aWxs
IGJlIG5vbi1OVUxMIGluIHRoZSBjYXNlIG9mIGEgcHJldmlvdXMKKyAgICAgICAgIFhNTF9ST0xF
X0RPQ1RZUEVfU1lTVEVNX0lELCBldmVuIGlmIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyCisgICAg
ICAgICB3YXMgbm90IHNldCwgaW5kaWNhdGluZyBhbiBleHRlcm5hbCBzdWJzZXQKKyAgICAgICov
CisjaWZkZWYgWE1MX0RURAorICAgICAgaWYgKGRvY3R5cGVTeXNpZCB8fCB1c2VGb3JlaWduRFRE
KSB7CisgICAgICAgIFhNTF9Cb29sIGhhZFBhcmFtRW50aXR5UmVmcyA9IGR0ZC0+aGFzUGFyYW1F
bnRpdHlSZWZzOworICAgICAgICBkdGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IFhNTF9UUlVFOwor
ICAgICAgICBpZiAocGFyYW1FbnRpdHlQYXJzaW5nICYmIGV4dGVybmFsRW50aXR5UmVmSGFuZGxl
cikgeworICAgICAgICAgIEVOVElUWSAqZW50aXR5ID0gKEVOVElUWSAqKWxvb2t1cChwYXJzZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdGQtPnBhcmFt
RW50aXRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
dGVybmFsU3Vic2V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKEVOVElUWSkpOworICAgICAgICAgIGlmICghZW50aXR5KQorICAgICAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgaWYgKHVzZUZvcmVpZ25E
VEQpCisgICAgICAgICAgICBlbnRpdHktPmJhc2UgPSBjdXJCYXNlOworICAgICAgICAgIGR0ZC0+
cGFyYW1FbnRpdHlSZWFkID0gWE1MX0ZBTFNFOworICAgICAgICAgIGlmICghZXh0ZXJuYWxFbnRp
dHlSZWZIYW5kbGVyKGV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudGl0eS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbnRpdHktPnN5c3RlbUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudGl0eS0+cHVibGljSWQpKQorICAgICAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9FWFRFUk5BTF9FTlRJVFlfSEFORExJTkc7CisgICAgICAgICAgaWYgKGR0ZC0+cGFyYW1F
bnRpdHlSZWFkKSB7CisgICAgICAgICAgICBpZiAoIWR0ZC0+c3RhbmRhbG9uZSAmJgorICAgICAg
ICAgICAgICAgIG5vdFN0YW5kYWxvbmVIYW5kbGVyICYmCisgICAgICAgICAgICAgICAgIW5vdFN0
YW5kYWxvbmVIYW5kbGVyKGhhbmRsZXJBcmcpKQorICAgICAgICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PVF9TVEFOREFMT05FOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBpZiB3ZSBkaWRu
J3QgcmVhZCB0aGUgZm9yZWlnbiBEVEQgdGhlbiB0aGlzIG1lYW5zIHRoYXQgdGhlcmUKKyAgICAg
ICAgICAgICBpcyBubyBleHRlcm5hbCBzdWJzZXQgYW5kIHdlIG11c3QgcmVzZXQgZHRkLT5oYXNQ
YXJhbUVudGl0eVJlZnMKKyAgICAgICAgICAqLworICAgICAgICAgIGVsc2UgaWYgKCFkb2N0eXBl
U3lzaWQpCisgICAgICAgICAgICBkdGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IGhhZFBhcmFtRW50
aXR5UmVmczsKKyAgICAgICAgICAvKiBlbmQgb2YgRFREIC0gbm8gbmVlZCB0byB1cGRhdGUgZHRk
LT5rZWVwUHJvY2Vzc2luZyAqLworICAgICAgICB9CisgICAgICAgIHVzZUZvcmVpZ25EVEQgPSBY
TUxfRkFMU0U7CisgICAgICB9CisjZW5kaWYgLyogWE1MX0RURCAqLworICAgICAgaWYgKGVuZERv
Y3R5cGVEZWNsSGFuZGxlcikgeworICAgICAgICBlbmREb2N0eXBlRGVjbEhhbmRsZXIoaGFuZGxl
ckFyZyk7CisgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICB9CisgICAg
ICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX0lOU1RBTkNFX1NUQVJUOgorI2lmZGVmIFhNTF9E
VEQKKyAgICAgIC8qIGlmIHRoZXJlIGlzIG5vIERPQ1RZUEUgZGVjbGFyYXRpb24gdGhlbiBub3cg
aXMgdGhlCisgICAgICAgICBsYXN0IGNoYW5jZSB0byByZWFkIHRoZSBmb3JlaWduIERURAorICAg
ICAgKi8KKyAgICAgIGlmICh1c2VGb3JlaWduRFREKSB7CisgICAgICAgIFhNTF9Cb29sIGhhZFBh
cmFtRW50aXR5UmVmcyA9IGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzOworICAgICAgICBkdGQtPmhh
c1BhcmFtRW50aXR5UmVmcyA9IFhNTF9UUlVFOworICAgICAgICBpZiAocGFyYW1FbnRpdHlQYXJz
aW5nICYmIGV4dGVybmFsRW50aXR5UmVmSGFuZGxlcikgeworICAgICAgICAgIEVOVElUWSAqZW50
aXR5ID0gKEVOVElUWSAqKWxvb2t1cChwYXJzZXIsICZkdGQtPnBhcmFtRW50aXRpZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU3Vic2V0TmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVO
VElUWSkpOworICAgICAgICAgIGlmICghZW50aXR5KQorICAgICAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgZW50aXR5LT5iYXNlID0gY3VyQmFzZTsKKyAgICAg
ICAgICBkdGQtPnBhcmFtRW50aXR5UmVhZCA9IFhNTF9GQUxTRTsKKyAgICAgICAgICBpZiAoIWV4
dGVybmFsRW50aXR5UmVmSGFuZGxlcihleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPmJhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5zeXN0ZW1JZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPnB1YmxpY0lkKSkKKyAgICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRMSU5HOworICAgICAgICAgIGlmIChk
dGQtPnBhcmFtRW50aXR5UmVhZCkgeworICAgICAgICAgICAgaWYgKCFkdGQtPnN0YW5kYWxvbmUg
JiYKKyAgICAgICAgICAgICAgICBub3RTdGFuZGFsb25lSGFuZGxlciAmJgorICAgICAgICAgICAg
ICAgICFub3RTdGFuZGFsb25lSGFuZGxlcihoYW5kbGVyQXJnKSkKKyAgICAgICAgICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT1RfU1RBTkRBTE9ORTsKKyAgICAgICAgICB9CisgICAgICAgICAgLyog
aWYgd2UgZGlkbid0IHJlYWQgdGhlIGZvcmVpZ24gRFREIHRoZW4gdGhpcyBtZWFucyB0aGF0IHRo
ZXJlCisgICAgICAgICAgICAgaXMgbm8gZXh0ZXJuYWwgc3Vic2V0IGFuZCB3ZSBtdXN0IHJlc2V0
IGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzCisgICAgICAgICAgKi8KKyAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICBkdGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IGhhZFBhcmFtRW50aXR5UmVmczsK
KyAgICAgICAgICAvKiBlbmQgb2YgRFREIC0gbm8gbmVlZCB0byB1cGRhdGUgZHRkLT5rZWVwUHJv
Y2Vzc2luZyAqLworICAgICAgICB9CisgICAgICB9CisjZW5kaWYgLyogWE1MX0RURCAqLworICAg
ICAgcHJvY2Vzc29yID0gY29udGVudFByb2Nlc3NvcjsKKyAgICAgIHJldHVybiBjb250ZW50UHJv
Y2Vzc29yKHBhcnNlciwgcywgZW5kLCBuZXh0UHRyKTsKKyAgICBjYXNlIFhNTF9ST0xFX0FUVExJ
U1RfRUxFTUVOVF9OQU1FOgorICAgICAgZGVjbEVsZW1lbnRUeXBlID0gZ2V0RWxlbWVudFR5cGUo
cGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAgaWYgKCFkZWNsRWxlbWVudFR5cGUpCisgICAg
ICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgZ290byBjaGVja0F0dExpc3RE
ZWNsSGFuZGxlcjsKKyAgICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVURV9OQU1FOgorICAgICAgZGVj
bEF0dHJpYnV0ZUlkID0gZ2V0QXR0cmlidXRlSWQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAg
ICAgaWYgKCFkZWNsQXR0cmlidXRlSWQpCisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVN
T1JZOworICAgICAgZGVjbEF0dHJpYnV0ZUlzQ2RhdGEgPSBYTUxfRkFMU0U7CisgICAgICBkZWNs
QXR0cmlidXRlVHlwZSA9IE5VTEw7CisgICAgICBkZWNsQXR0cmlidXRlSXNJZCA9IFhNTF9GQUxT
RTsKKyAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7CisgICAgY2FzZSBYTUxfUk9M
RV9BVFRSSUJVVEVfVFlQRV9DREFUQToKKyAgICAgIGRlY2xBdHRyaWJ1dGVJc0NkYXRhID0gWE1M
X1RSVUU7CisgICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IGF0eXBlQ0RBVEE7CisgICAgICBnb3Rv
IGNoZWNrQXR0TGlzdERlY2xIYW5kbGVyOworICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZ
UEVfSUQ6CisgICAgICBkZWNsQXR0cmlidXRlSXNJZCA9IFhNTF9UUlVFOworICAgICAgZGVjbEF0
dHJpYnV0ZVR5cGUgPSBhdHlwZUlEOworICAgICAgZ290byBjaGVja0F0dExpc3REZWNsSGFuZGxl
cjsKKyAgICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX0lEUkVGOgorICAgICAgZGVjbEF0
dHJpYnV0ZVR5cGUgPSBhdHlwZUlEUkVGOworICAgICAgZ290byBjaGVja0F0dExpc3REZWNsSGFu
ZGxlcjsKKyAgICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX0lEUkVGUzoKKyAgICAgIGRl
Y2xBdHRyaWJ1dGVUeXBlID0gYXR5cGVJRFJFRlM7CisgICAgICBnb3RvIGNoZWNrQXR0TGlzdERl
Y2xIYW5kbGVyOworICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfRU5USVRZOgorICAg
ICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBhdHlwZUVOVElUWTsKKyAgICAgIGdvdG8gY2hlY2tBdHRM
aXN0RGVjbEhhbmRsZXI7CisgICAgY2FzZSBYTUxfUk9MRV9BVFRSSUJVVEVfVFlQRV9FTlRJVElF
UzoKKyAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gYXR5cGVFTlRJVElFUzsKKyAgICAgIGdvdG8g
Y2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7CisgICAgY2FzZSBYTUxfUk9MRV9BVFRSSUJVVEVfVFlQ
RV9OTVRPS0VOOgorICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBhdHlwZU5NVE9LRU47CisgICAg
ICBnb3RvIGNoZWNrQXR0TGlzdERlY2xIYW5kbGVyOworICAgIGNhc2UgWE1MX1JPTEVfQVRUUklC
VVRFX1RZUEVfTk1UT0tFTlM6CisgICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IGF0eXBlTk1UT0tF
TlM7CisgICAgY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI6CisgICAgICBpZiAoZHRkLT5rZWVwUHJv
Y2Vzc2luZyAmJiBhdHRsaXN0RGVjbEhhbmRsZXIpCisgICAgICAgIGhhbmRsZURlZmF1bHQgPSBY
TUxfRkFMU0U7CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVURV9FTlVN
X1ZBTFVFOgorICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX05PVEFUSU9OX1ZBTFVFOgorICAg
ICAgaWYgKGR0ZC0+a2VlcFByb2Nlc3NpbmcgJiYgYXR0bGlzdERlY2xIYW5kbGVyKSB7CisgICAg
ICAgIGNvbnN0IFhNTF9DaGFyICpwcmVmaXg7CisgICAgICAgIGlmIChkZWNsQXR0cmlidXRlVHlw
ZSkgeworICAgICAgICAgIHByZWZpeCA9IGVudW1WYWx1ZVNlcDsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICBwcmVmaXggPSAocm9sZSA9PSBYTUxfUk9MRV9BVFRSSUJVVEVf
Tk9UQVRJT05fVkFMVUUKKyAgICAgICAgICAgICAgICAgICAgPyBub3RhdGlvblByZWZpeAorICAg
ICAgICAgICAgICAgICAgICA6IGVudW1WYWx1ZVN0YXJ0KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXBvb2xBcHBlbmRTdHJpbmcoJnRlbXBQb29sLCBwcmVmaXgpKQorICAgICAgICAgIHJldHVy
biBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICBpZiAoIXBvb2xBcHBlbmQoJnRlbXBQb29s
LCBlbmMsIHMsIG5leHQpKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwor
ICAgICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IHRlbXBQb29sLnN0YXJ0OworICAgICAgICBoYW5k
bGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBY
TUxfUk9MRV9JTVBMSUVEX0FUVFJJQlVURV9WQUxVRToKKyAgICBjYXNlIFhNTF9ST0xFX1JFUVVJ
UkVEX0FUVFJJQlVURV9WQUxVRToKKyAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nKSB7Cisg
ICAgICAgIGlmICghZGVmaW5lQXR0cmlidXRlKGRlY2xFbGVtZW50VHlwZSwgZGVjbEF0dHJpYnV0
ZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsQXR0cmlidXRlSXNDZGF0YSwg
ZGVjbEF0dHJpYnV0ZUlzSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHBhcnNl
cikpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIGlmIChh
dHRsaXN0RGVjbEhhbmRsZXIgJiYgZGVjbEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAgICBpZiAo
KmRlY2xBdHRyaWJ1dGVUeXBlID09IFhNTF9UKEFTQ0lJX0xQQVJFTikKKyAgICAgICAgICAgICAg
fHwgKCpkZWNsQXR0cmlidXRlVHlwZSA9PSBYTUxfVChBU0NJSV9OKQorICAgICAgICAgICAgICAg
ICAgJiYgZGVjbEF0dHJpYnV0ZVR5cGVbMV0gPT0gWE1MX1QoQVNDSUlfTykpKSB7CisgICAgICAg
ICAgICAvKiBFbnVtZXJhdGVkIG9yIE5vdGF0aW9uIHR5cGUgKi8KKyAgICAgICAgICAgIGlmICgh
cG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVChBU0NJSV9SUEFSRU4pKQorICAgICAgICAg
ICAgICAgIHx8ICFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKCdcMCcpKSkKKyAgICAg
ICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgICBkZWNsQXR0
cmlidXRlVHlwZSA9IHRlbXBQb29sLnN0YXJ0OworICAgICAgICAgICAgcG9vbEZpbmlzaCgmdGVt
cFBvb2wpOworICAgICAgICAgIH0KKyAgICAgICAgICAqZXZlbnRFbmRQUCA9IHM7CisgICAgICAg
ICAgYXR0bGlzdERlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIGRlY2xFbGVtZW50VHlwZS0+bmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEF0dHJpYnV0ZUlkLT5uYW1lLCBkZWNs
QXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcm9sZSA9PSBY
TUxfUk9MRV9SRVFVSVJFRF9BVFRSSUJVVEVfVkFMVUUpOworICAgICAgICAgIHBvb2xDbGVhcigm
dGVtcFBvb2wpOworICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfREVGQVVMVF9BVFRS
SUJVVEVfVkFMVUU6CisgICAgY2FzZSBYTUxfUk9MRV9GSVhFRF9BVFRSSUJVVEVfVkFMVUU6Cisg
ICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZykgeworICAgICAgICBjb25zdCBYTUxfQ2hhciAq
YXR0VmFsOworICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPQorICAgICAgICAgIHN0b3Jl
QXR0cmlidXRlVmFsdWUocGFyc2VyLCBlbmMsIGRlY2xBdHRyaWJ1dGVJc0NkYXRhLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR0ZC0+cG9vbCk7CisgICAgICAgIGlmIChyZXN1
bHQpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYXR0VmFsID0gcG9vbFN0YXJ0
KCZkdGQtPnBvb2wpOworICAgICAgICBwb29sRmluaXNoKCZkdGQtPnBvb2wpOworICAgICAgICAv
KiBJRCBhdHRyaWJ1dGVzIGFyZW4ndCBhbGxvd2VkIHRvIGhhdmUgYSBkZWZhdWx0ICovCisgICAg
ICAgIGlmICghZGVmaW5lQXR0cmlidXRlKGRlY2xFbGVtZW50VHlwZSwgZGVjbEF0dHJpYnV0ZUlk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsQXR0cmlidXRlSXNDZGF0YSwgWE1M
X0ZBTFNFLCBhdHRWYWwsIHBhcnNlcikpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19N
RU1PUlk7CisgICAgICAgIGlmIChhdHRsaXN0RGVjbEhhbmRsZXIgJiYgZGVjbEF0dHJpYnV0ZVR5
cGUpIHsKKyAgICAgICAgICBpZiAoKmRlY2xBdHRyaWJ1dGVUeXBlID09IFhNTF9UKEFTQ0lJX0xQ
QVJFTikKKyAgICAgICAgICAgICAgfHwgKCpkZWNsQXR0cmlidXRlVHlwZSA9PSBYTUxfVChBU0NJ
SV9OKQorICAgICAgICAgICAgICAgICAgJiYgZGVjbEF0dHJpYnV0ZVR5cGVbMV0gPT0gWE1MX1Qo
QVNDSUlfTykpKSB7CisgICAgICAgICAgICAvKiBFbnVtZXJhdGVkIG9yIE5vdGF0aW9uIHR5cGUg
Ki8KKyAgICAgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVChBU0NJ
SV9SUEFSRU4pKQorICAgICAgICAgICAgICAgIHx8ICFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2ws
IFhNTF9UKCdcMCcpKSkKKyAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7
CisgICAgICAgICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IHRlbXBQb29sLnN0YXJ0OworICAgICAg
ICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOworICAgICAgICAgIH0KKyAgICAgICAgICAqZXZl
bnRFbmRQUCA9IHM7CisgICAgICAgICAgYXR0bGlzdERlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIGRl
Y2xFbGVtZW50VHlwZS0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEF0
dHJpYnV0ZUlkLT5uYW1lLCBkZWNsQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0VmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlID09IFhN
TF9ST0xFX0ZJWEVEX0FUVFJJQlVURV9WQUxVRSk7CisgICAgICAgICAgcG9vbENsZWFyKCZ0ZW1w
UG9vbCk7CisgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgICAgfQor
ICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9FTlRJVFlfVkFMVUU6Cisg
ICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZykgeworICAgICAgICBlbnVtIFhNTF9FcnJvciBy
ZXN1bHQgPSBzdG9yZUVudGl0eVZhbHVlKHBhcnNlciwgZW5jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5
dGVzUGVyQ2hhcik7CisgICAgICAgIGlmIChkZWNsRW50aXR5KSB7CisgICAgICAgICAgZGVjbEVu
dGl0eS0+dGV4dFB0ciA9IHBvb2xTdGFydCgmZHRkLT5lbnRpdHlWYWx1ZVBvb2wpOworICAgICAg
ICAgIGRlY2xFbnRpdHktPnRleHRMZW4gPSAoaW50KShwb29sTGVuZ3RoKCZkdGQtPmVudGl0eVZh
bHVlUG9vbCkpOworICAgICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+ZW50aXR5VmFsdWVQb29sKTsK
KyAgICAgICAgICBpZiAoZW50aXR5RGVjbEhhbmRsZXIpIHsKKyAgICAgICAgICAgICpldmVudEVu
ZFBQID0gczsKKyAgICAgICAgICAgIGVudGl0eURlY2xIYW5kbGVyKGhhbmRsZXJBcmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+aXNfcGFyYW0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWNsRW50aXR5LT50ZXh0UHRyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjbEVudGl0eS0+dGV4dExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1ckJhc2UsIDAsIDAsIDApOworICAgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9G
QUxTRTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHBv
b2xEaXNjYXJkKCZkdGQtPmVudGl0eVZhbHVlUG9vbCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0g
WE1MX0VSUk9SX05PTkUpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKyAgICAg
IGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfRE9DVFlQRV9TWVNURU1fSUQ6CisjaWZkZWYgWE1M
X0RURAorICAgICAgdXNlRm9yZWlnbkRURCA9IFhNTF9GQUxTRTsKKyNlbmRpZiAvKiBYTUxfRFRE
ICovCisgICAgICBkdGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IFhNTF9UUlVFOworICAgICAgaWYg
KHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKSB7CisgICAgICAgIGRvY3R5cGVTeXNpZCA9IHBvb2xT
dG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7CisgICAgICAg
IGlmIChkb2N0eXBlU3lzaWQgPT0gTlVMTCkKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
X01FTU9SWTsKKyAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOworICAgICAgICBoYW5kbGVE
ZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorI2lmZGVmIFhNTF9EVEQKKyAgICAgIGVsc2UK
KyAgICAgICAgLyogdXNlIGV4dGVybmFsU3Vic2V0TmFtZSB0byBtYWtlIGRvY3R5cGVTeXNpZCBu
b24tTlVMTAorICAgICAgICAgICBmb3IgdGhlIGNhc2Ugd2hlcmUgbm8gc3RhcnREb2N0eXBlRGVj
bEhhbmRsZXIgaXMgc2V0ICovCisgICAgICAgIGRvY3R5cGVTeXNpZCA9IGV4dGVybmFsU3Vic2V0
TmFtZTsKKyNlbmRpZiAvKiBYTUxfRFREICovCisgICAgICBpZiAoIWR0ZC0+c3RhbmRhbG9uZQor
I2lmZGVmIFhNTF9EVEQKKyAgICAgICAgICAmJiAhcGFyYW1FbnRpdHlQYXJzaW5nCisjZW5kaWYg
LyogWE1MX0RURCAqLworICAgICAgICAgICYmIG5vdFN0YW5kYWxvbmVIYW5kbGVyCisgICAgICAg
ICAgJiYgIW5vdFN0YW5kYWxvbmVIYW5kbGVyKGhhbmRsZXJBcmcpKQorICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PVF9TVEFOREFMT05FOworI2lmbmRlZiBYTUxfRFRECisgICAgICBicmVhazsK
KyNlbHNlIC8qIFhNTF9EVEQgKi8KKyAgICAgIGlmICghZGVjbEVudGl0eSkgeworICAgICAgICBk
ZWNsRW50aXR5ID0gKEVOVElUWSAqKWxvb2t1cChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZkdGQtPnBhcmFtRW50aXRpZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU3Vic2V0TmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVOVElUWSkpOworICAgICAgICBpZiAoIWRl
Y2xFbnRpdHkpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAg
IGRlY2xFbnRpdHktPnB1YmxpY0lkID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIC8qIGZhbGwgdGhy
b3VnaCAqLworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICBjYXNlIFhNTF9ST0xFX0VOVElUWV9T
WVNURU1fSUQ6CisgICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBkZWNsRW50aXR5KSB7
CisgICAgICAgIGRlY2xFbnRpdHktPnN5c3RlbUlkID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBv
b2wsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOworICAgICAgICBp
ZiAoIWRlY2xFbnRpdHktPnN5c3RlbUlkKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9f
TUVNT1JZOworICAgICAgICBkZWNsRW50aXR5LT5iYXNlID0gY3VyQmFzZTsKKyAgICAgICAgcG9v
bEZpbmlzaCgmZHRkLT5wb29sKTsKKyAgICAgICAgaWYgKGVudGl0eURlY2xIYW5kbGVyKQorICAg
ICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICB9CisgICAgICBicmVhazsK
KyAgICBjYXNlIFhNTF9ST0xFX0VOVElUWV9DT01QTEVURToKKyAgICAgIGlmIChkdGQtPmtlZXBQ
cm9jZXNzaW5nICYmIGRlY2xFbnRpdHkgJiYgZW50aXR5RGVjbEhhbmRsZXIpIHsKKyAgICAgICAg
KmV2ZW50RW5kUFAgPSBzOworICAgICAgICBlbnRpdHlEZWNsSGFuZGxlcihoYW5kbGVyQXJnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWNsRW50aXR5LT5pc19wYXJhbSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5iYXNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5zeXN0ZW1JZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+cHVibGljSWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIDApOworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAg
fQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9FTlRJVFlfTk9UQVRJT05fTkFNRToK
KyAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nICYmIGRlY2xFbnRpdHkpIHsKKyAgICAgICAg
ZGVjbEVudGl0eS0+bm90YXRpb24gPSBwb29sU3RvcmVTdHJpbmcoJmR0ZC0+cG9vbCwgZW5jLCBz
LCBuZXh0KTsKKyAgICAgICAgaWYgKCFkZWNsRW50aXR5LT5ub3RhdGlvbikKKyAgICAgICAgICBy
ZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29s
KTsKKyAgICAgICAgaWYgKHVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIpIHsKKyAgICAgICAgICAq
ZXZlbnRFbmRQUCA9IHM7CisgICAgICAgICAgdW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcihoYW5k
bGVyQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPmJh
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5zeXN0
ZW1JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPnB1
YmxpY0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+
bm90YXRpb24pOworICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoZW50aXR5RGVjbEhhbmRsZXIpIHsKKyAgICAgICAgICAqZXZl
bnRFbmRQUCA9IHM7CisgICAgICAgICAgZW50aXR5RGVjbEhhbmRsZXIoaGFuZGxlckFyZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsMCwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xF
bnRpdHktPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+c3lz
dGVtSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+cHVibGljSWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+bm90YXRpb24pOworICAg
ICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfR0VORVJBTF9FTlRJVFlfTkFNRToKKyAgICAg
IHsKKyAgICAgICAgaWYgKFhtbFByZWRlZmluZWRFbnRpdHlOYW1lKGVuYywgcywgbmV4dCkpIHsK
KyAgICAgICAgICBkZWNsRW50aXR5ID0gTlVMTDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZykgeworICAgICAgICAgIGNvbnN0IFhN
TF9DaGFyICpuYW1lID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywgcywgbmV4dCk7
CisgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19N
RU1PUlk7CisgICAgICAgICAgZGVjbEVudGl0eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLCAm
ZHRkLT5nZW5lcmFsRW50aXRpZXMsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mKEVOVElUWSkpOworICAgICAgICAgIGlmICghZGVjbEVudGl0eSkK
KyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAgIGlmIChk
ZWNsRW50aXR5LT5uYW1lICE9IG5hbWUpIHsKKyAgICAgICAgICAgIHBvb2xEaXNjYXJkKCZkdGQt
PnBvb2wpOworICAgICAgICAgICAgZGVjbEVudGl0eSA9IE5VTEw7CisgICAgICAgICAgfQorICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsKKyAgICAg
ICAgICAgIGRlY2xFbnRpdHktPnB1YmxpY0lkID0gTlVMTDsKKyAgICAgICAgICAgIGRlY2xFbnRp
dHktPmlzX3BhcmFtID0gWE1MX0ZBTFNFOworICAgICAgICAgICAgLyogaWYgd2UgaGF2ZSBhIHBh
cmVudCBwYXJzZXIgb3IgYXJlIHJlYWRpbmcgYW4gaW50ZXJuYWwgcGFyYW1ldGVyCisgICAgICAg
ICAgICAgICBlbnRpdHksIHRoZW4gdGhlIGVudGl0eSBkZWNsYXJhdGlvbiBpcyBub3QgY29uc2lk
ZXJlZCAiaW50ZXJuYWwiCisgICAgICAgICAgICAqLworICAgICAgICAgICAgZGVjbEVudGl0eS0+
aXNfaW50ZXJuYWwgPSAhKHBhcmVudFBhcnNlciB8fCBvcGVuSW50ZXJuYWxFbnRpdGllcyk7Cisg
ICAgICAgICAgICBpZiAoZW50aXR5RGVjbEhhbmRsZXIpCisgICAgICAgICAgICAgIGhhbmRsZURl
ZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgIHBvb2xEaXNjYXJkKCZkdGQtPnBvb2wpOworICAgICAgICAgIGRlY2xFbnRp
dHkgPSBOVUxMOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFhN
TF9ST0xFX1BBUkFNX0VOVElUWV9OQU1FOgorI2lmZGVmIFhNTF9EVEQKKyAgICAgIGlmIChkdGQt
PmtlZXBQcm9jZXNzaW5nKSB7CisgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lID0gcG9vbFN0
b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywgcywgbmV4dCk7CisgICAgICAgIGlmICghbmFtZSkK
KyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgZGVjbEVudGl0
eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLCAmZHRkLT5wYXJhbUVudGl0aWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNpemVvZihFTlRJVFkp
KTsKKyAgICAgICAgaWYgKCFkZWNsRW50aXR5KQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9fTUVNT1JZOworICAgICAgICBpZiAoZGVjbEVudGl0eS0+bmFtZSAhPSBuYW1lKSB7CisgICAg
ICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7CisgICAgICAgICAgZGVjbEVudGl0eSA9IE5V
TEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgcG9vbEZpbmlzaCgmZHRk
LT5wb29sKTsKKyAgICAgICAgICBkZWNsRW50aXR5LT5wdWJsaWNJZCA9IE5VTEw7CisgICAgICAg
ICAgZGVjbEVudGl0eS0+aXNfcGFyYW0gPSBYTUxfVFJVRTsKKyAgICAgICAgICAvKiBpZiB3ZSBo
YXZlIGEgcGFyZW50IHBhcnNlciBvciBhcmUgcmVhZGluZyBhbiBpbnRlcm5hbCBwYXJhbWV0ZXIK
KyAgICAgICAgICAgICBlbnRpdHksIHRoZW4gdGhlIGVudGl0eSBkZWNsYXJhdGlvbiBpcyBub3Qg
Y29uc2lkZXJlZCAiaW50ZXJuYWwiCisgICAgICAgICAgKi8KKyAgICAgICAgICBkZWNsRW50aXR5
LT5pc19pbnRlcm5hbCA9ICEocGFyZW50UGFyc2VyIHx8IG9wZW5JbnRlcm5hbEVudGl0aWVzKTsK
KyAgICAgICAgICBpZiAoZW50aXR5RGVjbEhhbmRsZXIpCisgICAgICAgICAgICBoYW5kbGVEZWZh
dWx0ID0gWE1MX0ZBTFNFOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAg
ICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7CisgICAgICAgIGRlY2xFbnRpdHkgPSBOVUxMOwor
ICAgICAgfQorI2Vsc2UgLyogbm90IFhNTF9EVEQgKi8KKyAgICAgIGRlY2xFbnRpdHkgPSBOVUxM
OworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVf
Tk9UQVRJT05fTkFNRToKKyAgICAgIGRlY2xOb3RhdGlvblB1YmxpY0lkID0gTlVMTDsKKyAgICAg
IGRlY2xOb3RhdGlvbk5hbWUgPSBOVUxMOworICAgICAgaWYgKG5vdGF0aW9uRGVjbEhhbmRsZXIp
IHsKKyAgICAgICAgZGVjbE5vdGF0aW9uTmFtZSA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2ws
IGVuYywgcywgbmV4dCk7CisgICAgICAgIGlmICghZGVjbE5vdGF0aW9uTmFtZSkKKyAgICAgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBv
b2wpOworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAgICAg
YnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9OT1RBVElPTl9QVUJMSUNfSUQ6CisgICAgICBpZiAo
IVhtbElzUHVibGljSWQoZW5jLCBzLCBuZXh0LCBldmVudFBQKSkKKyAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9QVUJMSUNJRDsKKyAgICAgIGlmIChkZWNsTm90YXRpb25OYW1lKSB7ICAvKiBtZWFu
cyBub3RhdGlvbkRlY2xIYW5kbGVyICE9IE5VTEwgKi8KKyAgICAgICAgWE1MX0NoYXIgKnRlbSA9
IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOworICAgICAgICBpZiAoIXRl
bSkKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgbm9ybWFs
aXplUHVibGljSWQodGVtKTsKKyAgICAgICAgZGVjbE5vdGF0aW9uUHVibGljSWQgPSB0ZW07Cisg
ICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKKyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhN
TF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfTk9UQVRJ
T05fU1lTVEVNX0lEOgorICAgICAgaWYgKGRlY2xOb3RhdGlvbk5hbWUgJiYgbm90YXRpb25EZWNs
SGFuZGxlcikgeworICAgICAgICBjb25zdCBYTUxfQ2hhciAqc3lzdGVtSWQKKyAgICAgICAgICA9
IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKKyAgICAgICAgaWYgKCFzeXN0ZW1JZCkK
KyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgKmV2ZW50RW5k
UFAgPSBzOworICAgICAgICBub3RhdGlvbkRlY2xIYW5kbGVyKGhhbmRsZXJBcmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVjbE5vdGF0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbUlk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xOb3RhdGlvblB1YmxpY0lkKTsKKyAg
ICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIHBvb2xDbGVh
cigmdGVtcFBvb2wpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9OT1RBVElPTl9O
T19TWVNURU1fSUQ6CisgICAgICBpZiAoZGVjbE5vdGF0aW9uUHVibGljSWQgJiYgbm90YXRpb25E
ZWNsSGFuZGxlcikgeworICAgICAgICAqZXZlbnRFbmRQUCA9IHM7CisgICAgICAgIG5vdGF0aW9u
RGVjbEhhbmRsZXIoaGFuZGxlckFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNs
Tm90YXRpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckJhc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWNsTm90YXRpb25QdWJsaWNJZCk7CisgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7
CisgICAgICB9CisgICAgICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgWE1MX1JPTEVfRVJST1I6CisgICAgICBzd2l0Y2ggKHRvaykgeworICAgICAgY2FzZSBY
TUxfVE9LX1BBUkFNX0VOVElUWV9SRUY6CisgICAgICAgIC8qIFBFIHJlZmVyZW5jZXMgaW4gaW50
ZXJuYWwgc3Vic2V0IGFyZQorICAgICAgICAgICBub3QgYWxsb3dlZCB3aXRoaW4gZGVjbGFyYXRp
b25zLiAqLworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1BBUkFNX0VOVElUWV9SRUY7CisgICAg
ICBjYXNlIFhNTF9UT0tfWE1MX0RFQ0w6CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTUlTUExB
Q0VEX1hNTF9QSTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfU1lO
VEFYOworICAgICAgfQorI2lmZGVmIFhNTF9EVEQKKyAgICBjYXNlIFhNTF9ST0xFX0lHTk9SRV9T
RUNUOgorICAgICAgeworICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7CisgICAgICAgIGlm
IChkZWZhdWx0SGFuZGxlcikKKyAgICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBz
LCBuZXh0KTsKKyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgICAgcmVz
dWx0ID0gZG9JZ25vcmVTZWN0aW9uKHBhcnNlciwgZW5jLCAmbmV4dCwgZW5kLCBuZXh0UHRyLCBo
YXZlTW9yZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgZWxzZSBpZiAoIW5leHQpIHsKKyAgICAgICAgICBw
cm9jZXNzb3IgPSBpZ25vcmVTZWN0aW9uUHJvY2Vzc29yOworICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2VuZGlmIC8qIFhNTF9EVEQg
Ki8KKyAgICBjYXNlIFhNTF9ST0xFX0dST1VQX09QRU46CisgICAgICBpZiAocHJvbG9nU3RhdGUu
bGV2ZWwgPj0gZ3JvdXBTaXplKSB7CisgICAgICAgIGlmIChncm91cFNpemUpIHsKKyAgICAgICAg
ICBjaGFyICp0ZW1wID0gKGNoYXIgKilSRUFMTE9DKGdyb3VwQ29ubmVjdG9yLCBncm91cFNpemUg
Kj0gMik7CisgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBY
TUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAgIGdyb3VwQ29ubmVjdG9yID0gdGVtcDsKKyAg
ICAgICAgICBpZiAoZHRkLT5zY2FmZkluZGV4KSB7CisgICAgICAgICAgICBpbnQgKnRlbXAgPSAo
aW50ICopUkVBTExPQyhkdGQtPnNjYWZmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGdyb3VwU2l6ZSAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwp
CisgICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAgICAg
ZHRkLT5zY2FmZkluZGV4ID0gdGVtcDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgZ3JvdXBDb25uZWN0b3IgPSAoY2hhciAqKU1BTExPQyhncm91cFNp
emUgPSAzMik7CisgICAgICAgICAgaWYgKCFncm91cENvbm5lY3RvcikKKyAgICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICB9CisgICAgICB9CisgICAgICBncm91
cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPSAwOworICAgICAgaWYgKGR0ZC0+aW5fZWxk
ZWNsKSB7CisgICAgICAgIGludCBteWluZGV4ID0gbmV4dFNjYWZmb2xkUGFydChwYXJzZXIpOwor
ICAgICAgICBpZiAobXlpbmRleCA8IDApCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19N
RU1PUlk7CisgICAgICAgIGR0ZC0+c2NhZmZJbmRleFtkdGQtPnNjYWZmTGV2ZWxdID0gbXlpbmRl
eDsKKyAgICAgICAgZHRkLT5zY2FmZkxldmVsKys7CisgICAgICAgIGR0ZC0+c2NhZmZvbGRbbXlp
bmRleF0udHlwZSA9IFhNTF9DVFlQRV9TRVE7CisgICAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRs
ZXIpCisgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAg
IGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfR1JPVVBfU0VRVUVOQ0U6CisgICAgICBpZiAoZ3Jv
dXBDb25uZWN0b3JbcHJvbG9nU3RhdGUubGV2ZWxdID09IEFTQ0lJX1BJUEUpCisgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfU1lOVEFYOworICAgICAgZ3JvdXBDb25uZWN0b3JbcHJvbG9nU3RhdGUu
bGV2ZWxdID0gQVNDSUlfQ09NTUE7CisgICAgICBpZiAoZHRkLT5pbl9lbGRlY2wgJiYgZWxlbWVu
dERlY2xIYW5kbGVyKQorICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAg
YnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9HUk9VUF9DSE9JQ0U6CisgICAgICBpZiAoZ3JvdXBD
b25uZWN0b3JbcHJvbG9nU3RhdGUubGV2ZWxdID09IEFTQ0lJX0NPTU1BKQorICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX1NZTlRBWDsKKyAgICAgIGlmIChkdGQtPmluX2VsZGVjbAorICAgICAgICAg
ICYmICFncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0KKyAgICAgICAgICAmJiAoZHRk
LT5zY2FmZm9sZFtkdGQtPnNjYWZmSW5kZXhbZHRkLT5zY2FmZkxldmVsIC0gMV1dLnR5cGUKKyAg
ICAgICAgICAgICAgIT0gWE1MX0NUWVBFX01JWEVEKQorICAgICAgICAgICkgeworICAgICAgICBk
dGQtPnNjYWZmb2xkW2R0ZC0+c2NhZmZJbmRleFtkdGQtPnNjYWZmTGV2ZWwgLSAxXV0udHlwZQor
ICAgICAgICAgICAgPSBYTUxfQ1RZUEVfQ0hPSUNFOworICAgICAgICBpZiAoZWxlbWVudERlY2xI
YW5kbGVyKQorICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICB9Cisg
ICAgICBncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPSBBU0NJSV9QSVBFOworICAg
ICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9QQVJBTV9FTlRJVFlfUkVGOgorI2lmZGVmIFhN
TF9EVEQKKyAgICBjYXNlIFhNTF9ST0xFX0lOTkVSX1BBUkFNX0VOVElUWV9SRUY6CisgICAgICBk
dGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IFhNTF9UUlVFOworICAgICAgaWYgKCFwYXJhbUVudGl0
eVBhcnNpbmcpCisgICAgICAgIGR0ZC0+a2VlcFByb2Nlc3NpbmcgPSBkdGQtPnN0YW5kYWxvbmU7
CisgICAgICBlbHNlIHsKKyAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWU7CisgICAgICAgIEVO
VElUWSAqZW50aXR5OworICAgICAgICBuYW1lID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2ws
IGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQ
ZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5C
eXRlc1BlckNoYXIpOworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9OT19NRU1PUlk7CisgICAgICAgIGVudGl0eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2Vy
LCAmZHRkLT5wYXJhbUVudGl0aWVzLCBuYW1lLCAwKTsKKyAgICAgICAgcG9vbERpc2NhcmQoJmR0
ZC0+cG9vbCk7CisgICAgICAgIC8qIGZpcnN0LCBkZXRlcm1pbmUgaWYgYSBjaGVjayBmb3IgYW4g
ZXhpc3RpbmcgZGVjbGFyYXRpb24gaXMgbmVlZGVkOworICAgICAgICAgICBpZiB5ZXMsIGNoZWNr
IHRoYXQgdGhlIGVudGl0eSBleGlzdHMsIGFuZCB0aGF0IGl0IGlzIGludGVybmFsLAorICAgICAg
ICAgICBvdGhlcndpc2UgY2FsbCB0aGUgc2tpcHBlZCBlbnRpdHkgaGFuZGxlcgorICAgICAgICAq
LworICAgICAgICBpZiAocHJvbG9nU3RhdGUuZG9jdW1lbnRFbnRpdHkgJiYKKyAgICAgICAgICAg
IChkdGQtPnN0YW5kYWxvbmUKKyAgICAgICAgICAgICA/ICFvcGVuSW50ZXJuYWxFbnRpdGllcwor
ICAgICAgICAgICAgIDogIWR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzKSkgeworICAgICAgICAgIGlm
ICghZW50aXR5KQorICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkRFRklORURfRU5USVRZ
OworICAgICAgICAgIGVsc2UgaWYgKCFlbnRpdHktPmlzX2ludGVybmFsKQorICAgICAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9FTlRJVFlfREVDTEFSRURfSU5fUEU7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoIWVudGl0eSkgeworICAgICAgICAgIGR0ZC0+a2VlcFByb2Nlc3NpbmcgPSBk
dGQtPnN0YW5kYWxvbmU7CisgICAgICAgICAgLyogY2Fubm90IHJlcG9ydCBza2lwcGVkIGVudGl0
aWVzIGluIGRlY2xhcmF0aW9ucyAqLworICAgICAgICAgIGlmICgocm9sZSA9PSBYTUxfUk9MRV9Q
QVJBTV9FTlRJVFlfUkVGKSAmJiBza2lwcGVkRW50aXR5SGFuZGxlcikgeworICAgICAgICAgICAg
c2tpcHBlZEVudGl0eUhhbmRsZXIoaGFuZGxlckFyZywgbmFtZSwgMSk7CisgICAgICAgICAgICBo
YW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZW50aXR5LT5vcGVuKQorICAgICAgICAgIHJldHVybiBY
TUxfRVJST1JfUkVDVVJTSVZFX0VOVElUWV9SRUY7CisgICAgICAgIGlmIChlbnRpdHktPnRleHRQ
dHIpIHsKKyAgICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7CisgICAgICAgICAgWE1MX0Jv
b2wgYmV0d2VlbkRlY2wgPQorICAgICAgICAgICAgKHJvbGUgPT0gWE1MX1JPTEVfUEFSQU1fRU5U
SVRZX1JFRiA/IFhNTF9UUlVFIDogWE1MX0ZBTFNFKTsKKyAgICAgICAgICByZXN1bHQgPSBwcm9j
ZXNzSW50ZXJuYWxFbnRpdHkocGFyc2VyLCBlbnRpdHksIGJldHdlZW5EZWNsKTsKKyAgICAgICAg
ICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGlmIChleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIpIHsKKyAg
ICAgICAgICBkdGQtPnBhcmFtRW50aXR5UmVhZCA9IFhNTF9GQUxTRTsKKyAgICAgICAgICBlbnRp
dHktPm9wZW4gPSBYTUxfVFJVRTsKKyAgICAgICAgICBpZiAoIWV4dGVybmFsRW50aXR5UmVmSGFu
ZGxlcihleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbnRpdHktPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW50aXR5LT5zeXN0ZW1JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbnRpdHktPnB1YmxpY0lkKSkgeworICAgICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1M
X0ZBTFNFOworICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9FWFRFUk5BTF9FTlRJVFlfSEFO
RExJTkc7CisgICAgICAgICAgfQorICAgICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsK
KyAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgICAgIGlmICghZHRk
LT5wYXJhbUVudGl0eVJlYWQpIHsKKyAgICAgICAgICAgIGR0ZC0+a2VlcFByb2Nlc3NpbmcgPSBk
dGQtPnN0YW5kYWxvbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZHRkLT5rZWVwUHJvY2Vzc2luZyA9IGR0ZC0+
c3RhbmRhbG9uZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlm
IC8qIFhNTF9EVEQgKi8KKyAgICAgIGlmICghZHRkLT5zdGFuZGFsb25lICYmCisgICAgICAgICAg
bm90U3RhbmRhbG9uZUhhbmRsZXIgJiYKKyAgICAgICAgICAhbm90U3RhbmRhbG9uZUhhbmRsZXIo
aGFuZGxlckFyZykpCisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9UX1NUQU5EQUxPTkU7Cisg
ICAgICBicmVhazsKKworICAgIC8qIEVsZW1lbnQgZGVjbGFyYXRpb24gc3R1ZmYgKi8KKworICAg
IGNhc2UgWE1MX1JPTEVfRUxFTUVOVF9OQU1FOgorICAgICAgaWYgKGVsZW1lbnREZWNsSGFuZGxl
cikgeworICAgICAgICBkZWNsRWxlbWVudFR5cGUgPSBnZXRFbGVtZW50VHlwZShwYXJzZXIsIGVu
YywgcywgbmV4dCk7CisgICAgICAgIGlmICghZGVjbEVsZW1lbnRUeXBlKQorICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICBkdGQtPnNjYWZmTGV2ZWwgPSAwOwor
ICAgICAgICBkdGQtPnNjYWZmQ291bnQgPSAwOworICAgICAgICBkdGQtPmluX2VsZGVjbCA9IFhN
TF9UUlVFOworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFhNTF9ST0xFX0NPTlRFTlRfQU5ZOgorICAgIGNhc2UgWE1M
X1JPTEVfQ09OVEVOVF9FTVBUWToKKyAgICAgIGlmIChkdGQtPmluX2VsZGVjbCkgeworICAgICAg
ICBpZiAoZWxlbWVudERlY2xIYW5kbGVyKSB7CisgICAgICAgICAgWE1MX0NvbnRlbnQgKiBjb250
ZW50ID0gKFhNTF9Db250ZW50ICopIE1BTExPQyhzaXplb2YoWE1MX0NvbnRlbnQpKTsKKyAgICAg
ICAgICBpZiAoIWNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9S
WTsKKyAgICAgICAgICBjb250ZW50LT5xdWFudCA9IFhNTF9DUVVBTlRfTk9ORTsKKyAgICAgICAg
ICBjb250ZW50LT5uYW1lID0gTlVMTDsKKyAgICAgICAgICBjb250ZW50LT5udW1jaGlsZHJlbiA9
IDA7CisgICAgICAgICAgY29udGVudC0+Y2hpbGRyZW4gPSBOVUxMOworICAgICAgICAgIGNvbnRl
bnQtPnR5cGUgPSAoKHJvbGUgPT0gWE1MX1JPTEVfQ09OVEVOVF9BTlkpID8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFhNTF9DVFlQRV9BTlkgOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWE1MX0NUWVBFX0VNUFRZKTsKKyAgICAgICAgICAqZXZlbnRFbmRQUCA9IHM7CisgICAgICAg
ICAgZWxlbWVudERlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIGRlY2xFbGVtZW50VHlwZS0+bmFtZSwg
Y29udGVudCk7CisgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgICAg
fQorICAgICAgICBkdGQtPmluX2VsZGVjbCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBYTUxfUk9MRV9DT05URU5UX1BDREFUQToKKyAgICAgIGlmIChkdGQt
PmluX2VsZGVjbCkgeworICAgICAgICBkdGQtPnNjYWZmb2xkW2R0ZC0+c2NhZmZJbmRleFtkdGQt
PnNjYWZmTGV2ZWwgLSAxXV0udHlwZQorICAgICAgICAgICAgPSBYTUxfQ1RZUEVfTUlYRUQ7Cisg
ICAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRsZXIpCisgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9
IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBYTUxfUk9MRV9D
T05URU5UX0VMRU1FTlQ6CisgICAgICBxdWFudCA9IFhNTF9DUVVBTlRfTk9ORTsKKyAgICAgIGdv
dG8gZWxlbWVudENvbnRlbnQ7CisgICAgY2FzZSBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlRfT1BU
OgorICAgICAgcXVhbnQgPSBYTUxfQ1FVQU5UX09QVDsKKyAgICAgIGdvdG8gZWxlbWVudENvbnRl
bnQ7CisgICAgY2FzZSBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlRfUkVQOgorICAgICAgcXVhbnQg
PSBYTUxfQ1FVQU5UX1JFUDsKKyAgICAgIGdvdG8gZWxlbWVudENvbnRlbnQ7CisgICAgY2FzZSBY
TUxfUk9MRV9DT05URU5UX0VMRU1FTlRfUExVUzoKKyAgICAgIHF1YW50ID0gWE1MX0NRVUFOVF9Q
TFVTOworICAgIGVsZW1lbnRDb250ZW50OgorICAgICAgaWYgKGR0ZC0+aW5fZWxkZWNsKSB7Cisg
ICAgICAgIEVMRU1FTlRfVFlQRSAqZWw7CisgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOwor
ICAgICAgICBpbnQgbmFtZUxlbjsKKyAgICAgICAgY29uc3QgY2hhciAqbnh0ID0gKHF1YW50ID09
IFhNTF9DUVVBTlRfTk9ORQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXh0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7Cisg
ICAgICAgIGludCBteWluZGV4ID0gbmV4dFNjYWZmb2xkUGFydChwYXJzZXIpOworICAgICAgICBp
ZiAobXlpbmRleCA8IDApCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Cisg
ICAgICAgIGR0ZC0+c2NhZmZvbGRbbXlpbmRleF0udHlwZSA9IFhNTF9DVFlQRV9OQU1FOworICAg
ICAgICBkdGQtPnNjYWZmb2xkW215aW5kZXhdLnF1YW50ID0gcXVhbnQ7CisgICAgICAgIGVsID0g
Z2V0RWxlbWVudFR5cGUocGFyc2VyLCBlbmMsIHMsIG54dCk7CisgICAgICAgIGlmICghZWwpCisg
ICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIG5hbWUgPSBlbC0+
bmFtZTsKKyAgICAgICAgZHRkLT5zY2FmZm9sZFtteWluZGV4XS5uYW1lID0gbmFtZTsKKyAgICAg
ICAgbmFtZUxlbiA9IDA7CisgICAgICAgIGZvciAoOyBuYW1lW25hbWVMZW4rK107ICk7CisgICAg
ICAgIGR0ZC0+Y29udGVudFN0cmluZ0xlbiArPSAgbmFtZUxlbjsKKyAgICAgICAgaWYgKGVsZW1l
bnREZWNsSGFuZGxlcikKKyAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAg
ICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFhNTF9ST0xFX0dST1VQX0NMT1NFOgorICAg
ICAgcXVhbnQgPSBYTUxfQ1FVQU5UX05PTkU7CisgICAgICBnb3RvIGNsb3NlR3JvdXA7CisgICAg
Y2FzZSBYTUxfUk9MRV9HUk9VUF9DTE9TRV9PUFQ6CisgICAgICBxdWFudCA9IFhNTF9DUVVBTlRf
T1BUOworICAgICAgZ290byBjbG9zZUdyb3VwOworICAgIGNhc2UgWE1MX1JPTEVfR1JPVVBfQ0xP
U0VfUkVQOgorICAgICAgcXVhbnQgPSBYTUxfQ1FVQU5UX1JFUDsKKyAgICAgIGdvdG8gY2xvc2VH
cm91cDsKKyAgICBjYXNlIFhNTF9ST0xFX0dST1VQX0NMT1NFX1BMVVM6CisgICAgICBxdWFudCA9
IFhNTF9DUVVBTlRfUExVUzsKKyAgICBjbG9zZUdyb3VwOgorICAgICAgaWYgKGR0ZC0+aW5fZWxk
ZWNsKSB7CisgICAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRsZXIpCisgICAgICAgICAgaGFuZGxl
RGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgICAgZHRkLT5zY2FmZkxldmVsLS07CisgICAgICAg
IGR0ZC0+c2NhZmZvbGRbZHRkLT5zY2FmZkluZGV4W2R0ZC0+c2NhZmZMZXZlbF1dLnF1YW50ID0g
cXVhbnQ7CisgICAgICAgIGlmIChkdGQtPnNjYWZmTGV2ZWwgPT0gMCkgeworICAgICAgICAgIGlm
ICghaGFuZGxlRGVmYXVsdCkgeworICAgICAgICAgICAgWE1MX0NvbnRlbnQgKm1vZGVsID0gYnVp
bGRfbW9kZWwocGFyc2VyKTsKKyAgICAgICAgICAgIGlmICghbW9kZWwpCisgICAgICAgICAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAgICAgKmV2ZW50RW5kUFAgPSBz
OworICAgICAgICAgICAgZWxlbWVudERlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIGRlY2xFbGVtZW50
VHlwZS0+bmFtZSwgbW9kZWwpOworICAgICAgICAgIH0KKyAgICAgICAgICBkdGQtPmluX2VsZGVj
bCA9IFhNTF9GQUxTRTsKKyAgICAgICAgICBkdGQtPmNvbnRlbnRTdHJpbmdMZW4gPSAwOworICAg
ICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIC8qIEVuZCBlbGVtZW50IGRlY2xh
cmF0aW9uIHN0dWZmICovCisKKyAgICBjYXNlIFhNTF9ST0xFX1BJOgorICAgICAgaWYgKCFyZXBv
cnRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFyc2VyLCBlbmMsIHMsIG5leHQpKQorICAgICAgICBy
ZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFM
U0U7CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX0NPTU1FTlQ6CisgICAgICBpZiAo
IXJlcG9ydENvbW1lbnQocGFyc2VyLCBlbmMsIHMsIG5leHQpKQorICAgICAgICByZXR1cm4gWE1M
X0VSUk9SX05PX01FTU9SWTsKKyAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAg
ICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX05PTkU6CisgICAgICBzd2l0Y2ggKHRvaykgewor
ICAgICAgY2FzZSBYTUxfVE9LX0JPTToKKyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxT
RTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9S
T0xFX0RPQ1RZUEVfTk9ORToKKyAgICAgIGlmIChzdGFydERvY3R5cGVEZWNsSGFuZGxlcikKKyAg
ICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug
WE1MX1JPTEVfRU5USVRZX05PTkU6CisgICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBl
bnRpdHlEZWNsSGFuZGxlcikKKyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfTk9UQVRJT05fTk9ORToKKyAgICAgIGlmIChu
b3RhdGlvbkRlY2xIYW5kbGVyKQorICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9BVFRMSVNUX05PTkU6CisgICAgICBpZiAo
ZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBhdHRsaXN0RGVjbEhhbmRsZXIpCisgICAgICAgIGhhbmRs
ZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX0VM
RU1FTlRfTk9ORToKKyAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRsZXIpCisgICAgICAgIGhhbmRs
ZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICBicmVhazsKKyAgICB9IC8qIGVuZCBvZiBiaWcg
c3dpdGNoICovCisKKyAgICBpZiAoaGFuZGxlRGVmYXVsdCAmJiBkZWZhdWx0SGFuZGxlcikKKyAg
ICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworCisgICAgc3dpdGNoIChw
c19wYXJzaW5nKSB7CisgICAgY2FzZSBYTUxfU1VTUEVOREVEOgorICAgICAgKm5leHRQdHIgPSBu
ZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgIGNhc2UgWE1MX0ZJTklTSEVE
OgorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOworICAgIGRlZmF1bHQ6CisgICAgICBz
ID0gbmV4dDsKKyAgICAgIHRvayA9IFhtbFByb2xvZ1RvayhlbmMsIHMsIGVuZCwgJm5leHQpOwor
ICAgIH0KKyAgfQorICAvKiBub3QgcmVhY2hlZCAqLworfQorCitzdGF0aWMgZW51bSBYTUxfRXJy
b3IgUFRSQ0FMTAorZXBpbG9nUHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAor
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyKQoreworICBwcm9jZXNzb3IgPSBl
cGlsb2dQcm9jZXNzb3I7CisgIGV2ZW50UHRyID0gczsKKyAgZm9yICg7OykgeworICAgIGNvbnN0
IGNoYXIgKm5leHQgPSBOVUxMOworICAgIGludCB0b2sgPSBYbWxQcm9sb2dUb2soZW5jb2Rpbmcs
IHMsIGVuZCwgJm5leHQpOworICAgIGV2ZW50RW5kUHRyID0gbmV4dDsKKyAgICBzd2l0Y2ggKHRv
aykgeworICAgIC8qIHJlcG9ydCBwYXJ0aWFsIGxpbmVicmVhayAtIGl0IG1pZ2h0IGJlIHRoZSBs
YXN0IHRva2VuICovCisgICAgY2FzZSAtWE1MX1RPS19QUk9MT0dfUzoKKyAgICAgIGlmIChkZWZh
dWx0SGFuZGxlcikgeworICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jb2RpbmcsIHMs
IG5leHQpOworICAgICAgICBpZiAocHNfcGFyc2luZyA9PSBYTUxfRklOSVNIRUQpCisgICAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOworICAgICAgfQorICAgICAgKm5leHRQdHIgPSBu
ZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgIGNhc2UgWE1MX1RPS19OT05F
OgorICAgICAgKm5leHRQdHIgPSBzOworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAg
IGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICAgIGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAg
ICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuY29kaW5nLCBzLCBuZXh0KTsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgWE1MX1RPS19QSToKKyAgICAgIGlmICghcmVwb3J0UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKHBhcnNlciwgZW5jb2RpbmcsIHMsIG5leHQpKQorICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PX01FTU9SWTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19DT01NRU5UOgor
ICAgICAgaWYgKCFyZXBvcnRDb21tZW50KHBhcnNlciwgZW5jb2RpbmcsIHMsIG5leHQpKQorICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug
WE1MX1RPS19JTlZBTElEOgorICAgICAgZXZlbnRQdHIgPSBuZXh0OworICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9JTlZBTElEX1RPS0VOOworICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMOgorICAgICAg
aWYgKCFwc19maW5hbEJ1ZmZlcikgeworICAgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBYTUxfRVJST1JfVU5D
TE9TRURfVE9LRU47CisgICAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKKyAgICAgIGlmICgh
cHNfZmluYWxCdWZmZXIpIHsKKyAgICAgICAgKm5leHRQdHIgPSBzOworICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PTkU7CisgICAgICB9CisgICAgICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJQUxf
Q0hBUjsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9KVU5LX0FGVEVSX0RP
Q19FTEVNRU5UOworICAgIH0KKyAgICBldmVudFB0ciA9IHMgPSBuZXh0OworICAgIHN3aXRjaCAo
cHNfcGFyc2luZykgeworICAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKKyAgICAgICpuZXh0UHRyID0g
bmV4dDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICBjYXNlIFhNTF9GSU5JU0hF
RDoKKyAgICAgIHJldHVybiBYTUxfRVJST1JfQUJPUlRFRDsKKyAgICBkZWZhdWx0OiA7CisgICAg
fQorICB9Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorcHJvY2Vzc0ludGVybmFsRW50aXR5
KFhNTF9QYXJzZXIgcGFyc2VyLCBFTlRJVFkgKmVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAg
ICBYTUxfQm9vbCBiZXR3ZWVuRGVjbCkKK3sKKyAgY29uc3QgY2hhciAqdGV4dFN0YXJ0LCAqdGV4
dEVuZDsKKyAgY29uc3QgY2hhciAqbmV4dDsKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OworICBP
UEVOX0lOVEVSTkFMX0VOVElUWSAqb3BlbkVudGl0eTsKKworICBpZiAoZnJlZUludGVybmFsRW50
aXRpZXMpIHsKKyAgICBvcGVuRW50aXR5ID0gZnJlZUludGVybmFsRW50aXRpZXM7CisgICAgZnJl
ZUludGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5LT5uZXh0OworICB9CisgIGVsc2UgeworICAg
IG9wZW5FbnRpdHkgPSAoT1BFTl9JTlRFUk5BTF9FTlRJVFkgKilNQUxMT0Moc2l6ZW9mKE9QRU5f
SU5URVJOQUxfRU5USVRZKSk7CisgICAgaWYgKCFvcGVuRW50aXR5KQorICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9OT19NRU1PUlk7CisgIH0KKyAgZW50aXR5LT5vcGVuID0gWE1MX1RSVUU7CisgIGVu
dGl0eS0+cHJvY2Vzc2VkID0gMDsKKyAgb3BlbkVudGl0eS0+bmV4dCA9IG9wZW5JbnRlcm5hbEVu
dGl0aWVzOworICBvcGVuSW50ZXJuYWxFbnRpdGllcyA9IG9wZW5FbnRpdHk7CisgIG9wZW5FbnRp
dHktPmVudGl0eSA9IGVudGl0eTsKKyAgb3BlbkVudGl0eS0+c3RhcnRUYWdMZXZlbCA9IHRhZ0xl
dmVsOworICBvcGVuRW50aXR5LT5iZXR3ZWVuRGVjbCA9IGJldHdlZW5EZWNsOworICBvcGVuRW50
aXR5LT5pbnRlcm5hbEV2ZW50UHRyID0gTlVMTDsKKyAgb3BlbkVudGl0eS0+aW50ZXJuYWxFdmVu
dEVuZFB0ciA9IE5VTEw7CisgIHRleHRTdGFydCA9IChjaGFyICopZW50aXR5LT50ZXh0UHRyOwor
ICB0ZXh0RW5kID0gKGNoYXIgKikoZW50aXR5LT50ZXh0UHRyICsgZW50aXR5LT50ZXh0TGVuKTsK
KworI2lmZGVmIFhNTF9EVEQKKyAgaWYgKGVudGl0eS0+aXNfcGFyYW0pIHsKKyAgICBpbnQgdG9r
ID0gWG1sUHJvbG9nVG9rKGludGVybmFsRW5jb2RpbmcsIHRleHRTdGFydCwgdGV4dEVuZCwgJm5l
eHQpOworICAgIHJlc3VsdCA9IGRvUHJvbG9nKHBhcnNlciwgaW50ZXJuYWxFbmNvZGluZywgdGV4
dFN0YXJ0LCB0ZXh0RW5kLCB0b2ssCisgICAgICAgICAgICAgICAgICAgICAgbmV4dCwgJm5leHQs
IFhNTF9GQUxTRSk7CisgIH0KKyAgZWxzZQorI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICByZXN1
bHQgPSBkb0NvbnRlbnQocGFyc2VyLCB0YWdMZXZlbCwgaW50ZXJuYWxFbmNvZGluZywgdGV4dFN0
YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5kLCAmbmV4dCwgWE1MX0ZBTFNFKTsK
KworICBpZiAocmVzdWx0ID09IFhNTF9FUlJPUl9OT05FKSB7CisgICAgaWYgKHRleHRFbmQgIT0g
bmV4dCAmJiBwc19wYXJzaW5nID09IFhNTF9TVVNQRU5ERUQpIHsKKyAgICAgIGVudGl0eS0+cHJv
Y2Vzc2VkID0gKGludCkobmV4dCAtIHRleHRTdGFydCk7CisgICAgICBwcm9jZXNzb3IgPSBpbnRl
cm5hbEVudGl0eVByb2Nlc3NvcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBlbnRpdHktPm9w
ZW4gPSBYTUxfRkFMU0U7CisgICAgICBvcGVuSW50ZXJuYWxFbnRpdGllcyA9IG9wZW5FbnRpdHkt
Pm5leHQ7CisgICAgICAvKiBwdXQgb3BlbkVudGl0eSBiYWNrIGluIGxpc3Qgb2YgZnJlZSBpbnN0
YW5jZXMgKi8KKyAgICAgIG9wZW5FbnRpdHktPm5leHQgPSBmcmVlSW50ZXJuYWxFbnRpdGllczsK
KyAgICAgIGZyZWVJbnRlcm5hbEVudGl0aWVzID0gb3BlbkVudGl0eTsKKyAgICB9CisgIH0KKyAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKK2ludGVy
bmFsRW50aXR5UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyKQorewor
ICBFTlRJVFkgKmVudGl0eTsKKyAgY29uc3QgY2hhciAqdGV4dFN0YXJ0LCAqdGV4dEVuZDsKKyAg
Y29uc3QgY2hhciAqbmV4dDsKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OworICBPUEVOX0lOVEVS
TkFMX0VOVElUWSAqb3BlbkVudGl0eSA9IG9wZW5JbnRlcm5hbEVudGl0aWVzOworICBpZiAoIW9w
ZW5FbnRpdHkpCisgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkVYUEVDVEVEX1NUQVRFOworCisgIGVu
dGl0eSA9IG9wZW5FbnRpdHktPmVudGl0eTsKKyAgdGV4dFN0YXJ0ID0gKChjaGFyICopZW50aXR5
LT50ZXh0UHRyKSArIGVudGl0eS0+cHJvY2Vzc2VkOworICB0ZXh0RW5kID0gKGNoYXIgKikoZW50
aXR5LT50ZXh0UHRyICsgZW50aXR5LT50ZXh0TGVuKTsKKworI2lmZGVmIFhNTF9EVEQKKyAgaWYg
KGVudGl0eS0+aXNfcGFyYW0pIHsKKyAgICBpbnQgdG9rID0gWG1sUHJvbG9nVG9rKGludGVybmFs
RW5jb2RpbmcsIHRleHRTdGFydCwgdGV4dEVuZCwgJm5leHQpOworICAgIHJlc3VsdCA9IGRvUHJv
bG9nKHBhcnNlciwgaW50ZXJuYWxFbmNvZGluZywgdGV4dFN0YXJ0LCB0ZXh0RW5kLCB0b2ssCisg
ICAgICAgICAgICAgICAgICAgICAgbmV4dCwgJm5leHQsIFhNTF9GQUxTRSk7CisgIH0KKyAgZWxz
ZQorI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICByZXN1bHQgPSBkb0NvbnRlbnQocGFyc2VyLCBv
cGVuRW50aXR5LT5zdGFydFRhZ0xldmVsLCBpbnRlcm5hbEVuY29kaW5nLAorICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0U3RhcnQsIHRleHRFbmQsICZuZXh0LCBYTUxfRkFMU0UpOworCisgIGlm
IChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgZWxzZSBp
ZiAodGV4dEVuZCAhPSBuZXh0ICYmIHBzX3BhcnNpbmcgPT0gWE1MX1NVU1BFTkRFRCkgeworICAg
IGVudGl0eS0+cHJvY2Vzc2VkID0gKGludCkobmV4dCAtIChjaGFyICopZW50aXR5LT50ZXh0UHRy
KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGVsc2UgeworICAgIGVudGl0eS0+b3BlbiA9
IFhNTF9GQUxTRTsKKyAgICBvcGVuSW50ZXJuYWxFbnRpdGllcyA9IG9wZW5FbnRpdHktPm5leHQ7
CisgICAgLyogcHV0IG9wZW5FbnRpdHkgYmFjayBpbiBsaXN0IG9mIGZyZWUgaW5zdGFuY2VzICov
CisgICAgb3BlbkVudGl0eS0+bmV4dCA9IGZyZWVJbnRlcm5hbEVudGl0aWVzOworICAgIGZyZWVJ
bnRlcm5hbEVudGl0aWVzID0gb3BlbkVudGl0eTsKKyAgfQorCisjaWZkZWYgWE1MX0RURAorICBp
ZiAoZW50aXR5LT5pc19wYXJhbSkgeworICAgIGludCB0b2s7CisgICAgcHJvY2Vzc29yID0gcHJv
bG9nUHJvY2Vzc29yOworICAgIHRvayA9IFhtbFByb2xvZ1RvayhlbmNvZGluZywgcywgZW5kLCAm
bmV4dCk7CisgICAgcmV0dXJuIGRvUHJvbG9nKHBhcnNlciwgZW5jb2RpbmcsIHMsIGVuZCwgdG9r
LCBuZXh0LCBuZXh0UHRyLAorICAgICAgICAgICAgICAgICAgICAoWE1MX0Jvb2wpIXBzX2ZpbmFs
QnVmZmVyKTsKKyAgfQorICBlbHNlCisjZW5kaWYgLyogWE1MX0RURCAqLworICB7CisgICAgcHJv
Y2Vzc29yID0gY29udGVudFByb2Nlc3NvcjsKKyAgICAvKiBzZWUgZXh0ZXJuYWxFbnRpdHlDb250
ZW50UHJvY2Vzc29yIHZzIGNvbnRlbnRQcm9jZXNzb3IgKi8KKyAgICByZXR1cm4gZG9Db250ZW50
KHBhcnNlciwgcGFyZW50UGFyc2VyID8gMSA6IDAsIGVuY29kaW5nLCBzLCBlbmQsCisgICAgICAg
ICAgICAgICAgICAgICBuZXh0UHRyLCAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVyKTsKKyAgfQor
fQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAorZXJyb3JQcm9jZXNzb3IoWE1MX1Bh
cnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzLAorICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIp
Cit7CisgIHJldHVybiBlcnJvckNvZGU7Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorc3Rv
cmVBdHRyaWJ1dGVWYWx1ZShYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywg
WE1MX0Jvb2wgaXNDZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLCBj
b25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgIFNUUklOR19QT09MICpwb29sKQor
eworICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShwYXJzZXIs
IGVuYywgaXNDZGF0YSwgcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQsIHBvb2wpOworICBpZiAocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7
CisgIGlmICghaXNDZGF0YSAmJiBwb29sTGVuZ3RoKHBvb2wpICYmIHBvb2xMYXN0Q2hhcihwb29s
KSA9PSAweDIwKQorICAgIHBvb2xDaG9wKHBvb2wpOworICBpZiAoIXBvb2xBcHBlbmRDaGFyKHBv
b2wsIFhNTF9UKCdcMCcpKSkKKyAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgcmV0
dXJuIFhNTF9FUlJPUl9OT05FOworfQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IKK2FwcGVuZEF0
dHJpYnV0ZVZhbHVlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLCBYTUxf
Qm9vbCBpc0NkYXRhLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLCBjb25z
dCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTCAqcG9vbCkKK3sK
KyAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0
aW9uICovCisgIGZvciAoOzspIHsKKyAgICBjb25zdCBjaGFyICpuZXh0OworICAgIGludCB0b2sg
PSBYbWxBdHRyaWJ1dGVWYWx1ZVRvayhlbmMsIHB0ciwgZW5kLCAmbmV4dCk7CisgICAgc3dpdGNo
ICh0b2spIHsKKyAgICBjYXNlIFhNTF9UT0tfTk9ORToKKyAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9ORTsKKyAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKKyAgICAgIGlmIChlbmMgPT0gZW5jb2Rp
bmcpCisgICAgICAgIGV2ZW50UHRyID0gbmV4dDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfSU5W
QUxJRF9UT0tFTjsKKyAgICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgICAgIGlmIChlbmMgPT0g
ZW5jb2RpbmcpCisgICAgICAgIGV2ZW50UHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9JTlZBTElEX1RPS0VOOworICAgIGNhc2UgWE1MX1RPS19DSEFSX1JFRjoKKyAgICAgIHsKKyAg
ICAgICAgWE1MX0NoYXIgYnVmW1hNTF9FTkNPREVfTUFYXTsKKyAgICAgICAgaW50IGk7CisgICAg
ICAgIGludCBuID0gWG1sQ2hhclJlZk51bWJlcihlbmMsIHB0cik7CisgICAgICAgIGlmIChuIDwg
MCkgeworICAgICAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCisgICAgICAgICAgICBldmVudFB0
ciA9IHB0cjsKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0JBRF9DSEFSX1JFRjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWlzQ2RhdGEKKyAgICAgICAgICAgICYmIG4gPT0gMHgyMCAvKiBz
cGFjZSAqLworICAgICAgICAgICAgJiYgKHBvb2xMZW5ndGgocG9vbCkgPT0gMCB8fCBwb29sTGFz
dENoYXIocG9vbCkgPT0gMHgyMCkpCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIG4gPSBYbWxF
bmNvZGUobiwgKElDSEFSICopYnVmKTsKKyAgICAgICAgaWYgKCFuKSB7CisgICAgICAgICAgaWYg
KGVuYyA9PSBlbmNvZGluZykKKyAgICAgICAgICAgIGV2ZW50UHRyID0gcHRyOworICAgICAgICAg
IHJldHVybiBYTUxfRVJST1JfQkFEX0NIQVJfUkVGOworICAgICAgICB9CisgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKHBvb2ws
IGJ1ZltpXSkpCisgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX0RBVEFfQ0hBUlM6
CisgICAgICBpZiAoIXBvb2xBcHBlbmQocG9vbCwgZW5jLCBwdHIsIG5leHQpKQorICAgICAgICBy
ZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RP
S19UUkFJTElOR19DUjoKKyAgICAgIG5leHQgPSBwdHIgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhcjsK
KyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgWE1MX1RPS19BVFRSSUJVVEVfVkFM
VUVfUzoKKyAgICBjYXNlIFhNTF9UT0tfREFUQV9ORVdMSU5FOgorICAgICAgaWYgKCFpc0NkYXRh
ICYmIChwb29sTGVuZ3RoKHBvb2wpID09IDAgfHwgcG9vbExhc3RDaGFyKHBvb2wpID09IDB4MjAp
KQorICAgICAgICBicmVhazsKKyAgICAgIGlmICghcG9vbEFwcGVuZENoYXIocG9vbCwgMHgyMCkp
CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgYnJlYWs7CisgICAg
Y2FzZSBYTUxfVE9LX0VOVElUWV9SRUY6CisgICAgICB7CisgICAgICAgIGNvbnN0IFhNTF9DaGFy
ICpuYW1lOworICAgICAgICBFTlRJVFkgKmVudGl0eTsKKyAgICAgICAgY2hhciBjaGVja0VudGl0
eURlY2w7CisgICAgICAgIFhNTF9DaGFyIGNoID0gKFhNTF9DaGFyKSBYbWxQcmVkZWZpbmVkRW50
aXR5TmFtZShlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHRyICsgZW5jLT5taW5CeXRlc1BlckNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKKyAgICAg
ICAgaWYgKGNoKSB7CisgICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcihwb29sLCBjaCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9IHBvb2xTdG9yZVN0cmluZygmdGVtcDJQb29s
LCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgZW5jLT5taW5CeXRl
c1BlckNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWlu
Qnl0ZXNQZXJDaGFyKTsKKyAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgIHJldHVybiBYTUxf
RVJST1JfTk9fTUVNT1JZOworICAgICAgICBlbnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNl
ciwgJmR0ZC0+Z2VuZXJhbEVudGl0aWVzLCBuYW1lLCAwKTsKKyAgICAgICAgcG9vbERpc2NhcmQo
JnRlbXAyUG9vbCk7CisgICAgICAgIC8qIEZpcnN0LCBkZXRlcm1pbmUgaWYgYSBjaGVjayBmb3Ig
YW4gZXhpc3RpbmcgZGVjbGFyYXRpb24gaXMgbmVlZGVkOworICAgICAgICAgICBpZiB5ZXMsIGNo
ZWNrIHRoYXQgdGhlIGVudGl0eSBleGlzdHMsIGFuZCB0aGF0IGl0IGlzIGludGVybmFsLgorICAg
ICAgICAqLworICAgICAgICBpZiAocG9vbCA9PSAmZHRkLT5wb29sKSAgLyogYXJlIHdlIGNhbGxl
ZCBmcm9tIHByb2xvZz8gKi8KKyAgICAgICAgICBjaGVja0VudGl0eURlY2wgPQorI2lmZGVmIFhN
TF9EVEQKKyAgICAgICAgICAgICAgcHJvbG9nU3RhdGUuZG9jdW1lbnRFbnRpdHkgJiYKKyNlbmRp
ZiAvKiBYTUxfRFREICovCisgICAgICAgICAgICAgIChkdGQtPnN0YW5kYWxvbmUKKyAgICAgICAg
ICAgICAgID8gIW9wZW5JbnRlcm5hbEVudGl0aWVzCisgICAgICAgICAgICAgICA6ICFkdGQtPmhh
c1BhcmFtRW50aXR5UmVmcyk7CisgICAgICAgIGVsc2UgLyogaWYgKHBvb2wgPT0gJnRlbXBQb29s
KTogd2UgYXJlIGNhbGxlZCBmcm9tIGNvbnRlbnQgKi8KKyAgICAgICAgICBjaGVja0VudGl0eURl
Y2wgPSAhZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMgfHwgZHRkLT5zdGFuZGFsb25lOworICAgICAg
ICBpZiAoY2hlY2tFbnRpdHlEZWNsKSB7CisgICAgICAgICAgaWYgKCFlbnRpdHkpCisgICAgICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX1VOREVGSU5FRF9FTlRJVFk7CisgICAgICAgICAgZWxzZSBp
ZiAoIWVudGl0eS0+aXNfaW50ZXJuYWwpCisgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0VO
VElUWV9ERUNMQVJFRF9JTl9QRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghZW50aXR5
KSB7CisgICAgICAgICAgLyogQ2Fubm90IHJlcG9ydCBza2lwcGVkIGVudGl0eSBoZXJlIC0gc2Vl
IGNvbW1lbnRzIG9uCisgICAgICAgICAgICAgc2tpcHBlZEVudGl0eUhhbmRsZXIuCisgICAgICAg
ICAgaWYgKHNraXBwZWRFbnRpdHlIYW5kbGVyKQorICAgICAgICAgICAgc2tpcHBlZEVudGl0eUhh
bmRsZXIoaGFuZGxlckFyZywgbmFtZSwgMCk7CisgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBD
YW5ub3QgY2FsbCB0aGUgZGVmYXVsdCBoYW5kbGVyIGJlY2F1c2UgdGhpcyB3b3VsZCBiZQorICAg
ICAgICAgICAgIG91dCBvZiBzeW5jIHdpdGggdGhlIGNhbGwgdG8gdGhlIHN0YXJ0RWxlbWVudEhh
bmRsZXIuCisgICAgICAgICAgaWYgKChwb29sID09ICZ0ZW1wUG9vbCkgJiYgZGVmYXVsdEhhbmRs
ZXIpCisgICAgICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBwdHIsIG5leHQpOwor
ICAgICAgICAgICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVu
dGl0eS0+b3BlbikgeworICAgICAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCisgICAgICAgICAg
ICBldmVudFB0ciA9IHB0cjsKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1JFQ1VSU0lWRV9F
TlRJVFlfUkVGOworICAgICAgICB9CisgICAgICAgIGlmIChlbnRpdHktPm5vdGF0aW9uKSB7Cisg
ICAgICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykKKyAgICAgICAgICAgIGV2ZW50UHRyID0gcHRy
OworICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfQklOQVJZX0VOVElUWV9SRUY7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFlbnRpdHktPnRleHRQdHIpIHsKKyAgICAgICAgICBpZiAoZW5jID09
IGVuY29kaW5nKQorICAgICAgICAgICAgZXZlbnRQdHIgPSBwdHI7CisgICAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9BVFRSSUJVVEVfRVhURVJOQUxfRU5USVRZX1JFRjsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7CisgICAgICAgICAg
Y29uc3QgWE1MX0NoYXIgKnRleHRFbmQgPSBlbnRpdHktPnRleHRQdHIgKyBlbnRpdHktPnRleHRM
ZW47CisgICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX1RSVUU7CisgICAgICAgICAgcmVzdWx0
ID0gYXBwZW5kQXR0cmlidXRlVmFsdWUocGFyc2VyLCBpbnRlcm5hbEVuY29kaW5nLCBpc0NkYXRh
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopZW50aXR5
LT50ZXh0UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy
ICopdGV4dEVuZCwgcG9vbCk7CisgICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNFOwor
ICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKGVuYyA9
PSBlbmNvZGluZykKKyAgICAgICAgZXZlbnRQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX0VS
Uk9SX1VORVhQRUNURURfU1RBVEU7CisgICAgfQorICAgIHB0ciA9IG5leHQ7CisgIH0KKyAgLyog
bm90IHJlYWNoZWQgKi8KK30KKworc3RhdGljIGVudW0gWE1MX0Vycm9yCitzdG9yZUVudGl0eVZh
bHVlKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICBjb25zdCBFTkNPRElORyAq
ZW5jLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbnRpdHlUZXh0UHRyLAorICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICplbnRpdHlUZXh0RW5kKQoreworICBEVEQgKiBjb25zdCBk
dGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KKyAgU1RSSU5H
X1BPT0wgKnBvb2wgPSAmKGR0ZC0+ZW50aXR5VmFsdWVQb29sKTsKKyAgZW51bSBYTUxfRXJyb3Ig
cmVzdWx0ID0gWE1MX0VSUk9SX05PTkU7CisjaWZkZWYgWE1MX0RURAorICBpbnQgb2xkSW5FbnRp
dHlWYWx1ZSA9IHByb2xvZ1N0YXRlLmluRW50aXR5VmFsdWU7CisgIHByb2xvZ1N0YXRlLmluRW50
aXR5VmFsdWUgPSAxOworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgLyogbmV2ZXIgcmV0dXJuIE51
bGwgZm9yIHRoZSB2YWx1ZSBhcmd1bWVudCBpbiBFbnRpdHlEZWNsSGFuZGxlciwKKyAgICAgc2lu
Y2UgdGhpcyB3b3VsZCBpbmRpY2F0ZSBhbiBleHRlcm5hbCBlbnRpdHk7IHRoZXJlZm9yZSB3ZQor
ICAgICBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGVudGl0eVZhbHVlUG9vbC5zdGFydCBpcyBub3Qg
bnVsbCAqLworICBpZiAoIXBvb2wtPmJsb2NrcykgeworICAgIGlmICghcG9vbEdyb3cocG9vbCkp
CisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgfQorCisgIGZvciAoOzspIHsK
KyAgICBjb25zdCBjaGFyICpuZXh0OworICAgIGludCB0b2sgPSBYbWxFbnRpdHlWYWx1ZVRvayhl
bmMsIGVudGl0eVRleHRQdHIsIGVudGl0eVRleHRFbmQsICZuZXh0KTsKKyAgICBzd2l0Y2ggKHRv
aykgeworICAgIGNhc2UgWE1MX1RPS19QQVJBTV9FTlRJVFlfUkVGOgorI2lmZGVmIFhNTF9EVEQK
KyAgICAgIGlmIChpc1BhcmFtRW50aXR5IHx8IGVuYyAhPSBlbmNvZGluZykgeworICAgICAgICBj
b25zdCBYTUxfQ2hhciAqbmFtZTsKKyAgICAgICAgRU5USVRZICplbnRpdHk7CisgICAgICAgIG5h
bWUgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29sLCBlbmMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW50aXR5VGV4dFB0ciArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7Cisg
ICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9OT19NRU1P
Ulk7CisgICAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBl
bnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwgJmR0ZC0+cGFyYW1FbnRpdGllcywgbmFt
ZSwgMCk7CisgICAgICAgIHBvb2xEaXNjYXJkKCZ0ZW1wUG9vbCk7CisgICAgICAgIGlmICghZW50
aXR5KSB7CisgICAgICAgICAgLyogbm90IGEgd2VsbC1mb3JtZWRuZXNzIGVycm9yIC0gc2VlIFhN
TCAxLjA6IFdGQyBFbnRpdHkgRGVjbGFyZWQgKi8KKyAgICAgICAgICAvKiBjYW5ub3QgcmVwb3J0
IHNraXBwZWQgZW50aXR5IGhlcmUgLSBzZWUgY29tbWVudHMgb24KKyAgICAgICAgICAgICBza2lw
cGVkRW50aXR5SGFuZGxlcgorICAgICAgICAgIGlmIChza2lwcGVkRW50aXR5SGFuZGxlcikKKyAg
ICAgICAgICAgIHNraXBwZWRFbnRpdHlIYW5kbGVyKGhhbmRsZXJBcmcsIG5hbWUsIDApOworICAg
ICAgICAgICovCisgICAgICAgICAgZHRkLT5rZWVwUHJvY2Vzc2luZyA9IGR0ZC0+c3RhbmRhbG9u
ZTsKKyAgICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOworICAgICAgICB9CisgICAgICAgIGlm
IChlbnRpdHktPm9wZW4pIHsKKyAgICAgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQorICAgICAg
ICAgICAgZXZlbnRQdHIgPSBlbnRpdHlUZXh0UHRyOworICAgICAgICAgIHJlc3VsdCA9IFhNTF9F
UlJPUl9SRUNVUlNJVkVfRU5USVRZX1JFRjsKKyAgICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVl
OworICAgICAgICB9CisgICAgICAgIGlmIChlbnRpdHktPnN5c3RlbUlkKSB7CisgICAgICAgICAg
aWYgKGV4dGVybmFsRW50aXR5UmVmSGFuZGxlcikgeworICAgICAgICAgICAgZHRkLT5wYXJhbUVu
dGl0eVJlYWQgPSBYTUxfRkFMU0U7CisgICAgICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfVFJV
RTsKKyAgICAgICAgICAgIGlmICghZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKGV4dGVybmFsRW50
aXR5UmVmSGFuZGxlckFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkt
PmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkt
PnN5c3RlbUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50
aXR5LT5wdWJsaWNJZCkpIHsKKyAgICAgICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNF
OworICAgICAgICAgICAgICByZXN1bHQgPSBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRM
SU5HOworICAgICAgICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNFOworICAgICAgICAgICAgaWYgKCFk
dGQtPnBhcmFtRW50aXR5UmVhZCkKKyAgICAgICAgICAgICAgZHRkLT5rZWVwUHJvY2Vzc2luZyA9
IGR0ZC0+c3RhbmRhbG9uZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZHRkLT5rZWVwUHJvY2Vzc2luZyA9IGR0ZC0+c3RhbmRhbG9uZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfVFJVRTsKKyAgICAgICAg
ICByZXN1bHQgPSBzdG9yZUVudGl0eVZhbHVlKHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludGVybmFsRW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2hhciAqKWVudGl0eS0+dGV4dFB0ciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjaGFyICopKGVudGl0eS0+dGV4dFB0cgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBlbnRpdHktPnRleHRMZW4pKTsKKyAg
ICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfRkFMU0U7CisgICAgICAgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICB9CisjZW5kaWYgLyogWE1MX0RURCAqLworICAgICAgLyogSW4gdGhlIGludGVy
bmFsIHN1YnNldCwgUEUgcmVmZXJlbmNlcyBhcmUgbm90IGxlZ2FsCisgICAgICAgICB3aXRoaW4g
bWFya3VwIGRlY2xhcmF0aW9ucywgZS5nIGVudGl0eSB2YWx1ZXMgaW4gdGhpcyBjYXNlLiAqLwor
ICAgICAgZXZlbnRQdHIgPSBlbnRpdHlUZXh0UHRyOworICAgICAgcmVzdWx0ID0gWE1MX0VSUk9S
X1BBUkFNX0VOVElUWV9SRUY7CisgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOworICAgIGNhc2Ug
WE1MX1RPS19OT05FOgorICAgICAgcmVzdWx0ID0gWE1MX0VSUk9SX05PTkU7CisgICAgICBnb3Rv
IGVuZEVudGl0eVZhbHVlOworICAgIGNhc2UgWE1MX1RPS19FTlRJVFlfUkVGOgorICAgIGNhc2Ug
WE1MX1RPS19EQVRBX0NIQVJTOgorICAgICAgaWYgKCFwb29sQXBwZW5kKHBvb2wsIGVuYywgZW50
aXR5VGV4dFB0ciwgbmV4dCkpIHsKKyAgICAgICAgcmVzdWx0ID0gWE1MX0VSUk9SX05PX01FTU9S
WTsKKyAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgWE1MX1RPS19UUkFJTElOR19DUjoKKyAgICAgIG5leHQgPSBlbnRpdHlUZXh0UHRy
ICsgZW5jLT5taW5CeXRlc1BlckNoYXI7CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBj
YXNlIFhNTF9UT0tfREFUQV9ORVdMSU5FOgorICAgICAgaWYgKHBvb2wtPmVuZCA9PSBwb29sLT5w
dHIgJiYgIXBvb2xHcm93KHBvb2wpKSB7CisgICAgICAgICAgICAgIHJlc3VsdCA9IFhNTF9FUlJP
Ul9OT19NRU1PUlk7CisgICAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7CisgICAgICB9CisgICAg
ICAqKHBvb2wtPnB0cikrKyA9IDB4QTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19D
SEFSX1JFRjoKKyAgICAgIHsKKyAgICAgICAgWE1MX0NoYXIgYnVmW1hNTF9FTkNPREVfTUFYXTsK
KyAgICAgICAgaW50IGk7CisgICAgICAgIGludCBuID0gWG1sQ2hhclJlZk51bWJlcihlbmMsIGVu
dGl0eVRleHRQdHIpOworICAgICAgICBpZiAobiA8IDApIHsKKyAgICAgICAgICBpZiAoZW5jID09
IGVuY29kaW5nKQorICAgICAgICAgICAgZXZlbnRQdHIgPSBlbnRpdHlUZXh0UHRyOworICAgICAg
ICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9CQURfQ0hBUl9SRUY7CisgICAgICAgICAgZ290byBlbmRF
bnRpdHlWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBuID0gWG1sRW5jb2RlKG4sIChJQ0hBUiAq
KWJ1Zik7CisgICAgICAgIGlmICghbikgeworICAgICAgICAgIGlmIChlbmMgPT0gZW5jb2Rpbmcp
CisgICAgICAgICAgICBldmVudFB0ciA9IGVudGl0eVRleHRQdHI7CisgICAgICAgICAgcmVzdWx0
ID0gWE1MX0VSUk9SX0JBRF9DSEFSX1JFRjsKKyAgICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVl
OworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAg
ICBpZiAocG9vbC0+ZW5kID09IHBvb2wtPnB0ciAmJiAhcG9vbEdyb3cocG9vbCkpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgICBnb3RvIGVu
ZEVudGl0eVZhbHVlOworICAgICAgICAgIH0KKyAgICAgICAgICAqKHBvb2wtPnB0cikrKyA9IGJ1
ZltpXTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9L
X1BBUlRJQUw6CisgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQorICAgICAgICBldmVudFB0ciA9
IGVudGl0eVRleHRQdHI7CisgICAgICByZXN1bHQgPSBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsK
KyAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7CisgICAgY2FzZSBYTUxfVE9LX0lOVkFMSUQ6Cisg
ICAgICBpZiAoZW5jID09IGVuY29kaW5nKQorICAgICAgICBldmVudFB0ciA9IG5leHQ7CisgICAg
ICByZXN1bHQgPSBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKKyAgICAgIGdvdG8gZW5kRW50aXR5
VmFsdWU7CisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCisgICAgICAg
IGV2ZW50UHRyID0gZW50aXR5VGV4dFB0cjsKKyAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9VTkVY
UEVDVEVEX1NUQVRFOworICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKKyAgICB9CisgICAgZW50
aXR5VGV4dFB0ciA9IG5leHQ7CisgIH0KK2VuZEVudGl0eVZhbHVlOgorI2lmZGVmIFhNTF9EVEQK
KyAgcHJvbG9nU3RhdGUuaW5FbnRpdHlWYWx1ZSA9IG9sZEluRW50aXR5VmFsdWU7CisjZW5kaWYg
LyogWE1MX0RURCAqLworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FM
TAorbm9ybWFsaXplTGluZXMoWE1MX0NoYXIgKnMpCit7CisgIFhNTF9DaGFyICpwOworICBmb3Ig
KDs7IHMrKykgeworICAgIGlmICgqcyA9PSBYTUxfVCgnXDAnKSkKKyAgICAgIHJldHVybjsKKyAg
ICBpZiAoKnMgPT0gMHhEKQorICAgICAgYnJlYWs7CisgIH0KKyAgcCA9IHM7CisgIGRvIHsKKyAg
ICBpZiAoKnMgPT0gMHhEKSB7CisgICAgICAqcCsrID0gMHhBOworICAgICAgaWYgKCorK3MgPT0g
MHhBKQorICAgICAgICBzKys7CisgICAgfQorICAgIGVsc2UKKyAgICAgICpwKysgPSAqcysrOwor
ICB9IHdoaWxlICgqcyk7CisgICpwID0gWE1MX1QoJ1wwJyk7Cit9CisKK3N0YXRpYyBpbnQKK3Jl
cG9ydFByb2Nlc3NpbmdJbnN0cnVjdGlvbihYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJ
TkcgKmVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwg
Y29uc3QgY2hhciAqZW5kKQoreworICBjb25zdCBYTUxfQ2hhciAqdGFyZ2V0OworICBYTUxfQ2hh
ciAqZGF0YTsKKyAgY29uc3QgY2hhciAqdGVtOworICBpZiAoIXByb2Nlc3NpbmdJbnN0cnVjdGlv
bkhhbmRsZXIpIHsKKyAgICBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICByZXBvcnREZWZhdWx0
KHBhcnNlciwgZW5jLCBzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBzdGFydCAr
PSBlbmMtPm1pbkJ5dGVzUGVyQ2hhciAqIDI7CisgIHRlbSA9IHN0YXJ0ICsgWG1sTmFtZUxlbmd0
aChlbmMsIHN0YXJ0KTsKKyAgdGFyZ2V0ID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwgZW5j
LCBzdGFydCwgdGVtKTsKKyAgaWYgKCF0YXJnZXQpCisgICAgcmV0dXJuIDA7CisgIHBvb2xGaW5p
c2goJnRlbXBQb29sKTsKKyAgZGF0YSA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywK
KyAgICAgICAgICAgICAgICAgICAgICAgIFhtbFNraXBTKGVuYywgdGVtKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKjIpOworICBpZiAoIWRhdGEp
CisgICAgcmV0dXJuIDA7CisgIG5vcm1hbGl6ZUxpbmVzKGRhdGEpOworICBwcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25IYW5kbGVyKGhhbmRsZXJBcmcsIHRhcmdldCwgZGF0YSk7CisgIHBvb2xDbGVhcigm
dGVtcFBvb2wpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcmVwb3J0Q29tbWVudChY
TUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgY29u
c3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKyAgWE1MX0NoYXIgKmRhdGE7Cisg
IGlmICghY29tbWVudEhhbmRsZXIpIHsKKyAgICBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICBy
ZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gMTsKKyAg
fQorICBkYXRhID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyBlbmMtPm1pbkJ5
dGVzUGVyQ2hhciAqIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC0gZW5jLT5taW5C
eXRlc1BlckNoYXIgKiAzKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiAwOworICBub3JtYWxp
emVMaW5lcyhkYXRhKTsKKyAgY29tbWVudEhhbmRsZXIoaGFuZGxlckFyZywgZGF0YSk7CisgIHBv
b2xDbGVhcigmdGVtcFBvb2wpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3JlcG9y
dERlZmF1bHQoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5HICplbmMsCisgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKyAgaWYgKE1VU1RfQ09O
VkVSVChlbmMsIHMpKSB7CisgICAgY29uc3QgY2hhciAqKmV2ZW50UFA7CisgICAgY29uc3QgY2hh
ciAqKmV2ZW50RW5kUFA7CisgICAgaWYgKGVuYyA9PSBlbmNvZGluZykgeworICAgICAgZXZlbnRQ
UCA9ICZldmVudFB0cjsKKyAgICAgIGV2ZW50RW5kUFAgPSAmZXZlbnRFbmRQdHI7CisgICAgfQor
ICAgIGVsc2UgeworICAgICAgZXZlbnRQUCA9ICYob3BlbkludGVybmFsRW50aXRpZXMtPmludGVy
bmFsRXZlbnRQdHIpOworICAgICAgZXZlbnRFbmRQUCA9ICYob3BlbkludGVybmFsRW50aXRpZXMt
PmludGVybmFsRXZlbnRFbmRQdHIpOworICAgIH0KKyAgICBkbyB7CisgICAgICBJQ0hBUiAqZGF0
YVB0ciA9IChJQ0hBUiAqKWRhdGFCdWY7CisgICAgICBYbWxDb252ZXJ0KGVuYywgJnMsIGVuZCwg
JmRhdGFQdHIsIChJQ0hBUiAqKWRhdGFCdWZFbmQpOworICAgICAgKmV2ZW50RW5kUFAgPSBzOwor
ICAgICAgZGVmYXVsdEhhbmRsZXIoaGFuZGxlckFyZywgZGF0YUJ1ZiwgKGludCkoZGF0YVB0ciAt
IChJQ0hBUiAqKWRhdGFCdWYpKTsKKyAgICAgICpldmVudFBQID0gczsKKyAgICB9IHdoaWxlIChz
ICE9IGVuZCk7CisgIH0KKyAgZWxzZQorICAgIGRlZmF1bHRIYW5kbGVyKGhhbmRsZXJBcmcsIChY
TUxfQ2hhciAqKXMsIChpbnQpKChYTUxfQ2hhciAqKWVuZCAtIChYTUxfQ2hhciAqKXMpKTsKK30K
KworCitzdGF0aWMgaW50CitkZWZpbmVBdHRyaWJ1dGUoRUxFTUVOVF9UWVBFICp0eXBlLCBBVFRS
SUJVVEVfSUQgKmF0dElkLCBYTUxfQm9vbCBpc0NkYXRhLAorICAgICAgICAgICAgICAgIFhNTF9C
b29sIGlzSWQsIGNvbnN0IFhNTF9DaGFyICp2YWx1ZSwgWE1MX1BhcnNlciBwYXJzZXIpCit7Cisg
IERFRkFVTFRfQVRUUklCVVRFICphdHQ7CisgIGlmICh2YWx1ZSB8fCBpc0lkKSB7CisgICAgLyog
VGhlIGhhbmRsaW5nIG9mIGRlZmF1bHQgYXR0cmlidXRlcyBnZXRzIG1lc3NlZCB1cCBpZiB3ZSBo
YXZlCisgICAgICAgYSBkZWZhdWx0IHdoaWNoIGR1cGxpY2F0ZXMgYSBub24tZGVmYXVsdC4gKi8K
KyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdHlwZS0+bkRlZmF1bHRBdHRzOyBpKysp
CisgICAgICBpZiAoYXR0SWQgPT0gdHlwZS0+ZGVmYXVsdEF0dHNbaV0uaWQpCisgICAgICAgIHJl
dHVybiAxOworICAgIGlmIChpc0lkICYmICF0eXBlLT5pZEF0dCAmJiAhYXR0SWQtPnhtbG5zKQor
ICAgICAgdHlwZS0+aWRBdHQgPSBhdHRJZDsKKyAgfQorICBpZiAodHlwZS0+bkRlZmF1bHRBdHRz
ID09IHR5cGUtPmFsbG9jRGVmYXVsdEF0dHMpIHsKKyAgICBpZiAodHlwZS0+YWxsb2NEZWZhdWx0
QXR0cyA9PSAwKSB7CisgICAgICB0eXBlLT5hbGxvY0RlZmF1bHRBdHRzID0gODsKKyAgICAgIHR5
cGUtPmRlZmF1bHRBdHRzID0gKERFRkFVTFRfQVRUUklCVVRFICopTUFMTE9DKHR5cGUtPmFsbG9j
RGVmYXVsdEF0dHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihERUZBVUxU
X0FUVFJJQlVURSkpOworICAgICAgaWYgKCF0eXBlLT5kZWZhdWx0QXR0cykKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgREVGQVVMVF9BVFRSSUJVVEUgKnRlbXA7
CisgICAgICBpbnQgY291bnQgPSB0eXBlLT5hbGxvY0RlZmF1bHRBdHRzICogMjsKKyAgICAgIHRl
bXAgPSAoREVGQVVMVF9BVFRSSUJVVEUgKikKKyAgICAgICAgUkVBTExPQyh0eXBlLT5kZWZhdWx0
QXR0cywgKGNvdW50ICogc2l6ZW9mKERFRkFVTFRfQVRUUklCVVRFKSkpOworICAgICAgaWYgKHRl
bXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB0eXBlLT5hbGxvY0RlZmF1bHRB
dHRzID0gY291bnQ7CisgICAgICB0eXBlLT5kZWZhdWx0QXR0cyA9IHRlbXA7CisgICAgfQorICB9
CisgIGF0dCA9IHR5cGUtPmRlZmF1bHRBdHRzICsgdHlwZS0+bkRlZmF1bHRBdHRzOworICBhdHQt
PmlkID0gYXR0SWQ7CisgIGF0dC0+dmFsdWUgPSB2YWx1ZTsKKyAgYXR0LT5pc0NkYXRhID0gaXND
ZGF0YTsKKyAgaWYgKCFpc0NkYXRhKQorICAgIGF0dElkLT5tYXliZVRva2VuaXplZCA9IFhNTF9U
UlVFOworICB0eXBlLT5uRGVmYXVsdEF0dHMgKz0gMTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRp
YyBpbnQKK3NldEVsZW1lbnRUeXBlUHJlZml4KFhNTF9QYXJzZXIgcGFyc2VyLCBFTEVNRU5UX1RZ
UEUgKmVsZW1lbnRUeXBlKQoreworICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBv
bmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KKyAgY29uc3QgWE1MX0NoYXIgKm5hbWU7CisgIGZv
ciAobmFtZSA9IGVsZW1lbnRUeXBlLT5uYW1lOyAqbmFtZTsgbmFtZSsrKSB7CisgICAgaWYgKCpu
YW1lID09IFhNTF9UKEFTQ0lJX0NPTE9OKSkgeworICAgICAgUFJFRklYICpwcmVmaXg7CisgICAg
ICBjb25zdCBYTUxfQ2hhciAqczsKKyAgICAgIGZvciAocyA9IGVsZW1lbnRUeXBlLT5uYW1lOyBz
ICE9IG5hbWU7IHMrKykgeworICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZkdGQtPnBvb2ws
ICpzKSkKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIGlmICghcG9vbEFwcGVu
ZENoYXIoJmR0ZC0+cG9vbCwgWE1MX1QoJ1wwJykpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAg
IHByZWZpeCA9IChQUkVGSVggKilsb29rdXAocGFyc2VyLCAmZHRkLT5wcmVmaXhlcywgcG9vbFN0
YXJ0KCZkdGQtPnBvb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo
UFJFRklYKSk7CisgICAgICBpZiAoIXByZWZpeCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBp
ZiAocHJlZml4LT5uYW1lID09IHBvb2xTdGFydCgmZHRkLT5wb29sKSkKKyAgICAgICAgcG9vbEZp
bmlzaCgmZHRkLT5wb29sKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+
cG9vbCk7CisgICAgICBlbGVtZW50VHlwZS0+cHJlZml4ID0gcHJlZml4OworCisgICAgfQorICB9
CisgIHJldHVybiAxOworfQorCitzdGF0aWMgQVRUUklCVVRFX0lEICoKK2dldEF0dHJpYnV0ZUlk
KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKyAgRFREICogY29uc3QgZHRk
ID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCisgIEFUVFJJQlVU
RV9JRCAqaWQ7CisgIGNvbnN0IFhNTF9DaGFyICpuYW1lOworICBpZiAoIXBvb2xBcHBlbmRDaGFy
KCZkdGQtPnBvb2wsIFhNTF9UKCdcMCcpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgbmFtZSA9IHBv
b2xTdG9yZVN0cmluZygmZHRkLT5wb29sLCBlbmMsIHN0YXJ0LCBlbmQpOworICBpZiAoIW5hbWUp
CisgICAgcmV0dXJuIE5VTEw7CisgIC8qIHNraXAgcXVvdGF0aW9uIG1hcmsgLSBpdHMgc3RvcmFn
ZSB3aWxsIGJlIHJlLXVzZWQgKGxpa2UgaW4gbmFtZVstMV0pICovCisgICsrbmFtZTsKKyAgaWQg
PSAoQVRUUklCVVRFX0lEICopbG9va3VwKHBhcnNlciwgJmR0ZC0+YXR0cmlidXRlSWRzLCBuYW1l
LCBzaXplb2YoQVRUUklCVVRFX0lEKSk7CisgIGlmICghaWQpCisgICAgcmV0dXJuIE5VTEw7Cisg
IGlmIChpZC0+bmFtZSAhPSBuYW1lKQorICAgIHBvb2xEaXNjYXJkKCZkdGQtPnBvb2wpOworICBl
bHNlIHsKKyAgICBwb29sRmluaXNoKCZkdGQtPnBvb2wpOworICAgIGlmICghbnMpCisgICAgICA7
CisgICAgZWxzZSBpZiAobmFtZVswXSA9PSBYTUxfVChBU0NJSV94KQorICAgICAgICAmJiBuYW1l
WzFdID09IFhNTF9UKEFTQ0lJX20pCisgICAgICAgICYmIG5hbWVbMl0gPT0gWE1MX1QoQVNDSUlf
bCkKKyAgICAgICAgJiYgbmFtZVszXSA9PSBYTUxfVChBU0NJSV9uKQorICAgICAgICAmJiBuYW1l
WzRdID09IFhNTF9UKEFTQ0lJX3MpCisgICAgICAgICYmIChuYW1lWzVdID09IFhNTF9UKCdcMCcp
IHx8IG5hbWVbNV0gPT0gWE1MX1QoQVNDSUlfQ09MT04pKSkgeworICAgICAgaWYgKG5hbWVbNV0g
PT0gWE1MX1QoJ1wwJykpCisgICAgICAgIGlkLT5wcmVmaXggPSAmZHRkLT5kZWZhdWx0UHJlZml4
OworICAgICAgZWxzZQorICAgICAgICBpZC0+cHJlZml4ID0gKFBSRUZJWCAqKWxvb2t1cChwYXJz
ZXIsICZkdGQtPnByZWZpeGVzLCBuYW1lICsgNiwgc2l6ZW9mKFBSRUZJWCkpOworICAgICAgaWQt
PnhtbG5zID0gWE1MX1RSVUU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaW50IGk7CisgICAg
ICBmb3IgKGkgPSAwOyBuYW1lW2ldOyBpKyspIHsKKyAgICAgICAgLyogYXR0cmlidXRlcyB3aXRo
b3V0IHByZWZpeCBhcmUgKm5vdCogaW4gdGhlIGRlZmF1bHQgbmFtZXNwYWNlICovCisgICAgICAg
IGlmIChuYW1lW2ldID09IFhNTF9UKEFTQ0lJX0NPTE9OKSkgeworICAgICAgICAgIGludCBqOwor
ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKyAgICAgICAgICAgIGlmICghcG9v
bEFwcGVuZENoYXIoJmR0ZC0+cG9vbCwgbmFtZVtqXSkpCisgICAgICAgICAgICAgIHJldHVybiBO
VUxMOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZkdGQtPnBv
b2wsIFhNTF9UKCdcMCcpKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgIGlk
LT5wcmVmaXggPSAoUFJFRklYICopbG9va3VwKHBhcnNlciwgJmR0ZC0+cHJlZml4ZXMsIHBvb2xT
dGFydCgmZHRkLT5wb29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2YoUFJFRklYKSk7CisgICAgICAgICAgaWYgKGlkLT5wcmVmaXgtPm5hbWUgPT0gcG9v
bFN0YXJ0KCZkdGQtPnBvb2wpKQorICAgICAgICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsK
KyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBwb29sRGlzY2FyZCgmZHRkLT5wb29sKTsKKyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4g
aWQ7Cit9CisKKyNkZWZpbmUgQ09OVEVYVF9TRVAgWE1MX1QoQVNDSUlfRkYpCisKK3N0YXRpYyBj
b25zdCBYTUxfQ2hhciAqCitnZXRDb250ZXh0KFhNTF9QYXJzZXIgcGFyc2VyKQoreworICBEVEQg
KiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8K
KyAgSEFTSF9UQUJMRV9JVEVSIGl0ZXI7CisgIFhNTF9Cb29sIG5lZWRTZXAgPSBYTUxfRkFMU0U7
CisKKyAgaWYgKGR0ZC0+ZGVmYXVsdFByZWZpeC5iaW5kaW5nKSB7CisgICAgaW50IGk7CisgICAg
aW50IGxlbjsKKyAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoQVNDSUlf
RVFVQUxTKSkpCisgICAgICByZXR1cm4gTlVMTDsKKyAgICBsZW4gPSBkdGQtPmRlZmF1bHRQcmVm
aXguYmluZGluZy0+dXJpTGVuOworICAgIGlmIChuYW1lc3BhY2VTZXBhcmF0b3IpCisgICAgICBs
ZW4tLTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICBpZiAoIXBvb2xBcHBl
bmRDaGFyKCZ0ZW1wUG9vbCwgZHRkLT5kZWZhdWx0UHJlZml4LmJpbmRpbmctPnVyaVtpXSkpCisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIG5lZWRTZXAgPSBYTUxfVFJVRTsKKyAgfQorCisgIGhh
c2hUYWJsZUl0ZXJJbml0KCZpdGVyLCAmKGR0ZC0+cHJlZml4ZXMpKTsKKyAgZm9yICg7Oykgewor
ICAgIGludCBpOworICAgIGludCBsZW47CisgICAgY29uc3QgWE1MX0NoYXIgKnM7CisgICAgUFJF
RklYICpwcmVmaXggPSAoUFJFRklYICopaGFzaFRhYmxlSXRlck5leHQoJml0ZXIpOworICAgIGlm
ICghcHJlZml4KQorICAgICAgYnJlYWs7CisgICAgaWYgKCFwcmVmaXgtPmJpbmRpbmcpCisgICAg
ICBjb250aW51ZTsKKyAgICBpZiAobmVlZFNlcCAmJiAhcG9vbEFwcGVuZENoYXIoJnRlbXBQb29s
LCBDT05URVhUX1NFUCkpCisgICAgICByZXR1cm4gTlVMTDsKKyAgICBmb3IgKHMgPSBwcmVmaXgt
Pm5hbWU7ICpzOyBzKyspCisgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgKnMp
KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9v
bCwgWE1MX1QoQVNDSUlfRVFVQUxTKSkpCisgICAgICByZXR1cm4gTlVMTDsKKyAgICBsZW4gPSBw
cmVmaXgtPmJpbmRpbmctPnVyaUxlbjsKKyAgICBpZiAobmFtZXNwYWNlU2VwYXJhdG9yKQorICAg
ICAgbGVuLS07CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgaWYgKCFwb29s
QXBwZW5kQ2hhcigmdGVtcFBvb2wsIHByZWZpeC0+YmluZGluZy0+dXJpW2ldKSkKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgbmVlZFNlcCA9IFhNTF9UUlVFOworICB9CisKKworICBoYXNoVGFi
bGVJdGVySW5pdCgmaXRlciwgJihkdGQtPmdlbmVyYWxFbnRpdGllcykpOworICBmb3IgKDs7KSB7
CisgICAgY29uc3QgWE1MX0NoYXIgKnM7CisgICAgRU5USVRZICplID0gKEVOVElUWSAqKWhhc2hU
YWJsZUl0ZXJOZXh0KCZpdGVyKTsKKyAgICBpZiAoIWUpCisgICAgICBicmVhazsKKyAgICBpZiAo
IWUtPm9wZW4pCisgICAgICBjb250aW51ZTsKKyAgICBpZiAobmVlZFNlcCAmJiAhcG9vbEFwcGVu
ZENoYXIoJnRlbXBQb29sLCBDT05URVhUX1NFUCkpCisgICAgICByZXR1cm4gTlVMTDsKKyAgICBm
b3IgKHMgPSBlLT5uYW1lOyAqczsgcysrKQorICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVt
cFBvb2wsICpzKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgbmVlZFNlcCA9IFhNTF9UUlVFOwor
ICB9CisKKyAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKCdcMCcpKSkKKyAg
ICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIHRlbXBQb29sLnN0YXJ0OworfQorCitzdGF0aWMgWE1M
X0Jvb2wKK3NldENvbnRleHQoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICpjb250
ZXh0KQoreworICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwgb2Yg
aW5kaXJlY3Rpb24gKi8KKyAgY29uc3QgWE1MX0NoYXIgKnMgPSBjb250ZXh0OworCisgIHdoaWxl
ICgqY29udGV4dCAhPSBYTUxfVCgnXDAnKSkgeworICAgIGlmICgqcyA9PSBDT05URVhUX1NFUCB8
fCAqcyA9PSBYTUxfVCgnXDAnKSkgeworICAgICAgRU5USVRZICplOworICAgICAgaWYgKCFwb29s
QXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKCdcMCcpKSkKKyAgICAgICAgcmV0dXJuIFhNTF9G
QUxTRTsKKyAgICAgIGUgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwgJmR0ZC0+Z2VuZXJhbEVu
dGl0aWVzLCBwb29sU3RhcnQoJnRlbXBQb29sKSwgMCk7CisgICAgICBpZiAoZSkKKyAgICAgICAg
ZS0+b3BlbiA9IFhNTF9UUlVFOworICAgICAgaWYgKCpzICE9IFhNTF9UKCdcMCcpKQorICAgICAg
ICBzKys7CisgICAgICBjb250ZXh0ID0gczsKKyAgICAgIHBvb2xEaXNjYXJkKCZ0ZW1wUG9vbCk7
CisgICAgfQorICAgIGVsc2UgaWYgKCpzID09IFhNTF9UKEFTQ0lJX0VRVUFMUykpIHsKKyAgICAg
IFBSRUZJWCAqcHJlZml4OworICAgICAgaWYgKHBvb2xMZW5ndGgoJnRlbXBQb29sKSA9PSAwKQor
ICAgICAgICBwcmVmaXggPSAmZHRkLT5kZWZhdWx0UHJlZml4OworICAgICAgZWxzZSB7CisgICAg
ICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVCgnXDAnKSkpCisgICAgICAg
ICAgcmV0dXJuIFhNTF9GQUxTRTsKKyAgICAgICAgcHJlZml4ID0gKFBSRUZJWCAqKWxvb2t1cChw
YXJzZXIsICZkdGQtPnByZWZpeGVzLCBwb29sU3RhcnQoJnRlbXBQb29sKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoUFJFRklYKSk7CisgICAgICAgIGlmICghcHJl
Zml4KQorICAgICAgICAgIHJldHVybiBYTUxfRkFMU0U7CisgICAgICAgIGlmIChwcmVmaXgtPm5h
bWUgPT0gcG9vbFN0YXJ0KCZ0ZW1wUG9vbCkpIHsKKyAgICAgICAgICBwcmVmaXgtPm5hbWUgPSBw
b29sQ29weVN0cmluZygmZHRkLT5wb29sLCBwcmVmaXgtPm5hbWUpOworICAgICAgICAgIGlmICgh
cHJlZml4LT5uYW1lKQorICAgICAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsKKyAgICAgICAgfQor
ICAgICAgICBwb29sRGlzY2FyZCgmdGVtcFBvb2wpOworICAgICAgfQorICAgICAgZm9yIChjb250
ZXh0ID0gcyArIDE7CisgICAgICAgICAgICpjb250ZXh0ICE9IENPTlRFWFRfU0VQICYmICpjb250
ZXh0ICE9IFhNTF9UKCdcMCcpOworICAgICAgICAgICBjb250ZXh0KyspCisgICAgICAgIGlmICgh
cG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCAqY29udGV4dCkpCisgICAgICAgICAgcmV0dXJuIFhN
TF9GQUxTRTsKKyAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVCgnXDAn
KSkpCisgICAgICAgIHJldHVybiBYTUxfRkFMU0U7CisgICAgICBpZiAoYWRkQmluZGluZyhwYXJz
ZXIsIHByZWZpeCwgTlVMTCwgcG9vbFN0YXJ0KCZ0ZW1wUG9vbCksCisgICAgICAgICAgICAgICAg
ICAgICAmaW5oZXJpdGVkQmluZGluZ3MpICE9IFhNTF9FUlJPUl9OT05FKQorICAgICAgICByZXR1
cm4gWE1MX0ZBTFNFOworICAgICAgcG9vbERpc2NhcmQoJnRlbXBQb29sKTsKKyAgICAgIGlmICgq
Y29udGV4dCAhPSBYTUxfVCgnXDAnKSkKKyAgICAgICAgKytjb250ZXh0OworICAgICAgcyA9IGNv
bnRleHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVt
cFBvb2wsICpzKSkKKyAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsKKyAgICAgIHMrKzsKKyAgICB9
CisgIH0KKyAgcmV0dXJuIFhNTF9UUlVFOworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAorbm9y
bWFsaXplUHVibGljSWQoWE1MX0NoYXIgKnB1YmxpY0lkKQoreworICBYTUxfQ2hhciAqcCA9IHB1
YmxpY0lkOworICBYTUxfQ2hhciAqczsKKyAgZm9yIChzID0gcHVibGljSWQ7ICpzOyBzKyspIHsK
KyAgICBzd2l0Y2ggKCpzKSB7CisgICAgY2FzZSAweDIwOgorICAgIGNhc2UgMHhEOgorICAgIGNh
c2UgMHhBOgorICAgICAgaWYgKHAgIT0gcHVibGljSWQgJiYgcFstMV0gIT0gMHgyMCkKKyAgICAg
ICAgKnArKyA9IDB4MjA7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgKnArKyA9
ICpzOworICAgIH0KKyAgfQorICBpZiAocCAhPSBwdWJsaWNJZCAmJiBwWy0xXSA9PSAweDIwKQor
ICAgIC0tcDsKKyAgKnAgPSBYTUxfVCgnXDAnKTsKK30KKworc3RhdGljIERURCAqCitkdGRDcmVh
dGUoY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpCit7CisgIERURCAqcCA9IChE
VEQgKiltcy0+bWFsbG9jX2ZjbihzaXplb2YoRFREKSk7CisgIGlmIChwID09IE5VTEwpCisgICAg
cmV0dXJuIHA7CisgIHBvb2xJbml0KCYocC0+cG9vbCksIG1zKTsKKyAgcG9vbEluaXQoJihwLT5l
bnRpdHlWYWx1ZVBvb2wpLCBtcyk7CisgIGhhc2hUYWJsZUluaXQoJihwLT5nZW5lcmFsRW50aXRp
ZXMpLCBtcyk7CisgIGhhc2hUYWJsZUluaXQoJihwLT5lbGVtZW50VHlwZXMpLCBtcyk7CisgIGhh
c2hUYWJsZUluaXQoJihwLT5hdHRyaWJ1dGVJZHMpLCBtcyk7CisgIGhhc2hUYWJsZUluaXQoJihw
LT5wcmVmaXhlcyksIG1zKTsKKyNpZmRlZiBYTUxfRFRECisgIHAtPnBhcmFtRW50aXR5UmVhZCA9
IFhNTF9GQUxTRTsKKyAgaGFzaFRhYmxlSW5pdCgmKHAtPnBhcmFtRW50aXRpZXMpLCBtcyk7Cisj
ZW5kaWYgLyogWE1MX0RURCAqLworICBwLT5kZWZhdWx0UHJlZml4Lm5hbWUgPSBOVUxMOworICBw
LT5kZWZhdWx0UHJlZml4LmJpbmRpbmcgPSBOVUxMOworCisgIHAtPmluX2VsZGVjbCA9IFhNTF9G
QUxTRTsKKyAgcC0+c2NhZmZJbmRleCA9IE5VTEw7CisgIHAtPnNjYWZmb2xkID0gTlVMTDsKKyAg
cC0+c2NhZmZMZXZlbCA9IDA7CisgIHAtPnNjYWZmU2l6ZSA9IDA7CisgIHAtPnNjYWZmQ291bnQg
PSAwOworICBwLT5jb250ZW50U3RyaW5nTGVuID0gMDsKKworICBwLT5rZWVwUHJvY2Vzc2luZyA9
IFhNTF9UUlVFOworICBwLT5oYXNQYXJhbUVudGl0eVJlZnMgPSBYTUxfRkFMU0U7CisgIHAtPnN0
YW5kYWxvbmUgPSBYTUxfRkFMU0U7CisgIHJldHVybiBwOworfQorCitzdGF0aWMgdm9pZAorZHRk
UmVzZXQoRFREICpwLCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptcykKK3sKKyAg
SEFTSF9UQUJMRV9JVEVSIGl0ZXI7CisgIGhhc2hUYWJsZUl0ZXJJbml0KCZpdGVyLCAmKHAtPmVs
ZW1lbnRUeXBlcykpOworICBmb3IgKDs7KSB7CisgICAgRUxFTUVOVF9UWVBFICplID0gKEVMRU1F
TlRfVFlQRSAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZpdGVyKTsKKyAgICBpZiAoIWUpCisgICAgICBi
cmVhazsKKyAgICBpZiAoZS0+YWxsb2NEZWZhdWx0QXR0cyAhPSAwKQorICAgICAgbXMtPmZyZWVf
ZmNuKGUtPmRlZmF1bHRBdHRzKTsKKyAgfQorICBoYXNoVGFibGVDbGVhcigmKHAtPmdlbmVyYWxF
bnRpdGllcykpOworI2lmZGVmIFhNTF9EVEQKKyAgcC0+cGFyYW1FbnRpdHlSZWFkID0gWE1MX0ZB
TFNFOworICBoYXNoVGFibGVDbGVhcigmKHAtPnBhcmFtRW50aXRpZXMpKTsKKyNlbmRpZiAvKiBY
TUxfRFREICovCisgIGhhc2hUYWJsZUNsZWFyKCYocC0+ZWxlbWVudFR5cGVzKSk7CisgIGhhc2hU
YWJsZUNsZWFyKCYocC0+YXR0cmlidXRlSWRzKSk7CisgIGhhc2hUYWJsZUNsZWFyKCYocC0+cHJl
Zml4ZXMpKTsKKyAgcG9vbENsZWFyKCYocC0+cG9vbCkpOworICBwb29sQ2xlYXIoJihwLT5lbnRp
dHlWYWx1ZVBvb2wpKTsKKyAgcC0+ZGVmYXVsdFByZWZpeC5uYW1lID0gTlVMTDsKKyAgcC0+ZGVm
YXVsdFByZWZpeC5iaW5kaW5nID0gTlVMTDsKKworICBwLT5pbl9lbGRlY2wgPSBYTUxfRkFMU0U7
CisKKyAgbXMtPmZyZWVfZmNuKHAtPnNjYWZmSW5kZXgpOworICBwLT5zY2FmZkluZGV4ID0gTlVM
TDsKKyAgbXMtPmZyZWVfZmNuKHAtPnNjYWZmb2xkKTsKKyAgcC0+c2NhZmZvbGQgPSBOVUxMOwor
CisgIHAtPnNjYWZmTGV2ZWwgPSAwOworICBwLT5zY2FmZlNpemUgPSAwOworICBwLT5zY2FmZkNv
dW50ID0gMDsKKyAgcC0+Y29udGVudFN0cmluZ0xlbiA9IDA7CisKKyAgcC0+a2VlcFByb2Nlc3Np
bmcgPSBYTUxfVFJVRTsKKyAgcC0+aGFzUGFyYW1FbnRpdHlSZWZzID0gWE1MX0ZBTFNFOworICBw
LT5zdGFuZGFsb25lID0gWE1MX0ZBTFNFOworfQorCitzdGF0aWMgdm9pZAorZHRkRGVzdHJveShE
VEQgKnAsIFhNTF9Cb29sIGlzRG9jRW50aXR5LCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1
aXRlICptcykKK3sKKyAgSEFTSF9UQUJMRV9JVEVSIGl0ZXI7CisgIGhhc2hUYWJsZUl0ZXJJbml0
KCZpdGVyLCAmKHAtPmVsZW1lbnRUeXBlcykpOworICBmb3IgKDs7KSB7CisgICAgRUxFTUVOVF9U
WVBFICplID0gKEVMRU1FTlRfVFlQRSAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZpdGVyKTsKKyAgICBp
ZiAoIWUpCisgICAgICBicmVhazsKKyAgICBpZiAoZS0+YWxsb2NEZWZhdWx0QXR0cyAhPSAwKQor
ICAgICAgbXMtPmZyZWVfZmNuKGUtPmRlZmF1bHRBdHRzKTsKKyAgfQorICBoYXNoVGFibGVEZXN0
cm95KCYocC0+Z2VuZXJhbEVudGl0aWVzKSk7CisjaWZkZWYgWE1MX0RURAorICBoYXNoVGFibGVE
ZXN0cm95KCYocC0+cGFyYW1FbnRpdGllcykpOworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgaGFz
aFRhYmxlRGVzdHJveSgmKHAtPmVsZW1lbnRUeXBlcykpOworICBoYXNoVGFibGVEZXN0cm95KCYo
cC0+YXR0cmlidXRlSWRzKSk7CisgIGhhc2hUYWJsZURlc3Ryb3koJihwLT5wcmVmaXhlcykpOwor
ICBwb29sRGVzdHJveSgmKHAtPnBvb2wpKTsKKyAgcG9vbERlc3Ryb3koJihwLT5lbnRpdHlWYWx1
ZVBvb2wpKTsKKyAgaWYgKGlzRG9jRW50aXR5KSB7CisgICAgbXMtPmZyZWVfZmNuKHAtPnNjYWZm
SW5kZXgpOworICAgIG1zLT5mcmVlX2ZjbihwLT5zY2FmZm9sZCk7CisgIH0KKyAgbXMtPmZyZWVf
ZmNuKHApOworfQorCisvKiBEbyBhIGRlZXAgY29weSBvZiB0aGUgRFRELiBSZXR1cm4gMCBmb3Ig
b3V0IG9mIG1lbW9yeSwgbm9uLXplcm8gb3RoZXJ3aXNlLgorICAgVGhlIG5ldyBEVEQgaGFzIGFs
cmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKyovCitzdGF0aWMgaW50CitkdGRDb3B5KFhNTF9QYXJz
ZXIgb2xkUGFyc2VyLCBEVEQgKm5ld0R0ZCwgY29uc3QgRFREICpvbGREdGQsIGNvbnN0IFhNTF9N
ZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKQoreworICBIQVNIX1RBQkxFX0lURVIgaXRlcjsKKwor
ICAvKiBDb3B5IHRoZSBwcmVmaXggdGFibGUuICovCisKKyAgaGFzaFRhYmxlSXRlckluaXQoJml0
ZXIsICYob2xkRHRkLT5wcmVmaXhlcykpOworICBmb3IgKDs7KSB7CisgICAgY29uc3QgWE1MX0No
YXIgKm5hbWU7CisgICAgY29uc3QgUFJFRklYICpvbGRQID0gKFBSRUZJWCAqKWhhc2hUYWJsZUl0
ZXJOZXh0KCZpdGVyKTsKKyAgICBpZiAoIW9sZFApCisgICAgICBicmVhazsKKyAgICBuYW1lID0g
cG9vbENvcHlTdHJpbmcoJihuZXdEdGQtPnBvb2wpLCBvbGRQLT5uYW1lKTsKKyAgICBpZiAoIW5h
bWUpCisgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWxvb2t1cChvbGRQYXJzZXIsICYobmV3RHRk
LT5wcmVmaXhlcyksIG5hbWUsIHNpemVvZihQUkVGSVgpKSkKKyAgICAgIHJldHVybiAwOworICB9
CisKKyAgaGFzaFRhYmxlSXRlckluaXQoJml0ZXIsICYob2xkRHRkLT5hdHRyaWJ1dGVJZHMpKTsK
KworICAvKiBDb3B5IHRoZSBhdHRyaWJ1dGUgaWQgdGFibGUuICovCisKKyAgZm9yICg7Oykgewor
ICAgIEFUVFJJQlVURV9JRCAqbmV3QTsKKyAgICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKKyAgICBj
b25zdCBBVFRSSUJVVEVfSUQgKm9sZEEgPSAoQVRUUklCVVRFX0lEICopaGFzaFRhYmxlSXRlck5l
eHQoJml0ZXIpOworCisgICAgaWYgKCFvbGRBKQorICAgICAgYnJlYWs7CisgICAgLyogUmVtZW1i
ZXIgdG8gYWxsb2NhdGUgdGhlIHNjcmF0Y2ggYnl0ZSBiZWZvcmUgdGhlIG5hbWUuICovCisgICAg
aWYgKCFwb29sQXBwZW5kQ2hhcigmKG5ld0R0ZC0+cG9vbCksIFhNTF9UKCdcMCcpKSkKKyAgICAg
IHJldHVybiAwOworICAgIG5hbWUgPSBwb29sQ29weVN0cmluZygmKG5ld0R0ZC0+cG9vbCksIG9s
ZEEtPm5hbWUpOworICAgIGlmICghbmFtZSkKKyAgICAgIHJldHVybiAwOworICAgICsrbmFtZTsK
KyAgICBuZXdBID0gKEFUVFJJQlVURV9JRCAqKWxvb2t1cChvbGRQYXJzZXIsICYobmV3RHRkLT5h
dHRyaWJ1dGVJZHMpLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVvZihBVFRSSUJVVEVfSUQpKTsKKyAgICBpZiAoIW5ld0EpCisgICAgICByZXR1cm4gMDsKKyAg
ICBuZXdBLT5tYXliZVRva2VuaXplZCA9IG9sZEEtPm1heWJlVG9rZW5pemVkOworICAgIGlmIChv
bGRBLT5wcmVmaXgpIHsKKyAgICAgIG5ld0EtPnhtbG5zID0gb2xkQS0+eG1sbnM7CisgICAgICBp
ZiAob2xkQS0+cHJlZml4ID09ICZvbGREdGQtPmRlZmF1bHRQcmVmaXgpCisgICAgICAgIG5ld0Et
PnByZWZpeCA9ICZuZXdEdGQtPmRlZmF1bHRQcmVmaXg7CisgICAgICBlbHNlCisgICAgICAgIG5l
d0EtPnByZWZpeCA9IChQUkVGSVggKilsb29rdXAob2xkUGFyc2VyLCAmKG5ld0R0ZC0+cHJlZml4
ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEEtPnByZWZp
eC0+bmFtZSwgMCk7CisgICAgfQorICB9CisKKyAgLyogQ29weSB0aGUgZWxlbWVudCB0eXBlIHRh
YmxlLiAqLworCisgIGhhc2hUYWJsZUl0ZXJJbml0KCZpdGVyLCAmKG9sZER0ZC0+ZWxlbWVudFR5
cGVzKSk7CisKKyAgZm9yICg7OykgeworICAgIGludCBpOworICAgIEVMRU1FTlRfVFlQRSAqbmV3
RTsKKyAgICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKKyAgICBjb25zdCBFTEVNRU5UX1RZUEUgKm9s
ZEUgPSAoRUxFTUVOVF9UWVBFICopaGFzaFRhYmxlSXRlck5leHQoJml0ZXIpOworICAgIGlmICgh
b2xkRSkKKyAgICAgIGJyZWFrOworICAgIG5hbWUgPSBwb29sQ29weVN0cmluZygmKG5ld0R0ZC0+
cG9vbCksIG9sZEUtPm5hbWUpOworICAgIGlmICghbmFtZSkKKyAgICAgIHJldHVybiAwOworICAg
IG5ld0UgPSAoRUxFTUVOVF9UWVBFICopbG9va3VwKG9sZFBhcnNlciwgJihuZXdEdGQtPmVsZW1l
bnRUeXBlcyksIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
KEVMRU1FTlRfVFlQRSkpOworICAgIGlmICghbmV3RSkKKyAgICAgIHJldHVybiAwOworICAgIGlm
IChvbGRFLT5uRGVmYXVsdEF0dHMpIHsKKyAgICAgIG5ld0UtPmRlZmF1bHRBdHRzID0gKERFRkFV
TFRfQVRUUklCVVRFICopCisgICAgICAgICAgbXMtPm1hbGxvY19mY24ob2xkRS0+bkRlZmF1bHRB
dHRzICogc2l6ZW9mKERFRkFVTFRfQVRUUklCVVRFKSk7CisgICAgICBpZiAoIW5ld0UtPmRlZmF1
bHRBdHRzKSB7CisgICAgICAgIG1zLT5mcmVlX2ZjbihuZXdFKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgICB9CisgICAgfQorICAgIGlmIChvbGRFLT5pZEF0dCkKKyAgICAgIG5ld0UtPmlkQXR0
ID0gKEFUVFJJQlVURV9JRCAqKQorICAgICAgICAgIGxvb2t1cChvbGRQYXJzZXIsICYobmV3RHRk
LT5hdHRyaWJ1dGVJZHMpLCBvbGRFLT5pZEF0dC0+bmFtZSwgMCk7CisgICAgbmV3RS0+YWxsb2NE
ZWZhdWx0QXR0cyA9IG5ld0UtPm5EZWZhdWx0QXR0cyA9IG9sZEUtPm5EZWZhdWx0QXR0czsKKyAg
ICBpZiAob2xkRS0+cHJlZml4KQorICAgICAgbmV3RS0+cHJlZml4ID0gKFBSRUZJWCAqKWxvb2t1
cChvbGRQYXJzZXIsICYobmV3RHRkLT5wcmVmaXhlcyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9sZEUtPnByZWZpeC0+bmFtZSwgMCk7CisgICAgZm9yIChpID0gMDsg
aSA8IG5ld0UtPm5EZWZhdWx0QXR0czsgaSsrKSB7CisgICAgICBuZXdFLT5kZWZhdWx0QXR0c1tp
XS5pZCA9IChBVFRSSUJVVEVfSUQgKikKKyAgICAgICAgICBsb29rdXAob2xkUGFyc2VyLCAmKG5l
d0R0ZC0+YXR0cmlidXRlSWRzKSwgb2xkRS0+ZGVmYXVsdEF0dHNbaV0uaWQtPm5hbWUsIDApOwor
ICAgICAgbmV3RS0+ZGVmYXVsdEF0dHNbaV0uaXNDZGF0YSA9IG9sZEUtPmRlZmF1bHRBdHRzW2ld
LmlzQ2RhdGE7CisgICAgICBpZiAob2xkRS0+ZGVmYXVsdEF0dHNbaV0udmFsdWUpIHsKKyAgICAg
ICAgbmV3RS0+ZGVmYXVsdEF0dHNbaV0udmFsdWUKKyAgICAgICAgICAgID0gcG9vbENvcHlTdHJp
bmcoJihuZXdEdGQtPnBvb2wpLCBvbGRFLT5kZWZhdWx0QXR0c1tpXS52YWx1ZSk7CisgICAgICAg
IGlmICghbmV3RS0+ZGVmYXVsdEF0dHNbaV0udmFsdWUpCisgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICB9CisgICAgICBlbHNlCisgICAgICAgIG5ld0UtPmRlZmF1bHRBdHRzW2ldLnZhbHVlID0g
TlVMTDsKKyAgICB9CisgIH0KKworICAvKiBDb3B5IHRoZSBlbnRpdHkgdGFibGVzLiAqLworICBp
ZiAoIWNvcHlFbnRpdHlUYWJsZShvbGRQYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICYo
bmV3RHRkLT5nZW5lcmFsRW50aXRpZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAmKG5ld0R0
ZC0+cG9vbCksCisgICAgICAgICAgICAgICAgICAgICAgICYob2xkRHRkLT5nZW5lcmFsRW50aXRp
ZXMpKSkKKyAgICAgIHJldHVybiAwOworCisjaWZkZWYgWE1MX0RURAorICBpZiAoIWNvcHlFbnRp
dHlUYWJsZShvbGRQYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICYobmV3RHRkLT5wYXJh
bUVudGl0aWVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJihuZXdEdGQtPnBvb2wpLAorICAg
ICAgICAgICAgICAgICAgICAgICAmKG9sZER0ZC0+cGFyYW1FbnRpdGllcykpKQorICAgICAgcmV0
dXJuIDA7CisgIG5ld0R0ZC0+cGFyYW1FbnRpdHlSZWFkID0gb2xkRHRkLT5wYXJhbUVudGl0eVJl
YWQ7CisjZW5kaWYgLyogWE1MX0RURCAqLworCisgIG5ld0R0ZC0+a2VlcFByb2Nlc3NpbmcgPSBv
bGREdGQtPmtlZXBQcm9jZXNzaW5nOworICBuZXdEdGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IG9s
ZER0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzOworICBuZXdEdGQtPnN0YW5kYWxvbmUgPSBvbGREdGQt
PnN0YW5kYWxvbmU7CisKKyAgLyogRG9uJ3Qgd2FudCBkZWVwIGNvcHlpbmcgZm9yIHNjYWZmb2xk
aW5nICovCisgIG5ld0R0ZC0+aW5fZWxkZWNsID0gb2xkRHRkLT5pbl9lbGRlY2w7CisgIG5ld0R0
ZC0+c2NhZmZvbGQgPSBvbGREdGQtPnNjYWZmb2xkOworICBuZXdEdGQtPmNvbnRlbnRTdHJpbmdM
ZW4gPSBvbGREdGQtPmNvbnRlbnRTdHJpbmdMZW47CisgIG5ld0R0ZC0+c2NhZmZTaXplID0gb2xk
RHRkLT5zY2FmZlNpemU7CisgIG5ld0R0ZC0+c2NhZmZMZXZlbCA9IG9sZER0ZC0+c2NhZmZMZXZl
bDsKKyAgbmV3RHRkLT5zY2FmZkluZGV4ID0gb2xkRHRkLT5zY2FmZkluZGV4OworCisgIHJldHVy
biAxOworfSAgLyogRW5kIGR0ZENvcHkgKi8KKworc3RhdGljIGludAorY29weUVudGl0eVRhYmxl
KFhNTF9QYXJzZXIgb2xkUGFyc2VyLAorICAgICAgICAgICAgICAgIEhBU0hfVEFCTEUgKm5ld1Rh
YmxlLAorICAgICAgICAgICAgICAgIFNUUklOR19QT09MICpuZXdQb29sLAorICAgICAgICAgICAg
ICAgIGNvbnN0IEhBU0hfVEFCTEUgKm9sZFRhYmxlKQoreworICBIQVNIX1RBQkxFX0lURVIgaXRl
cjsKKyAgY29uc3QgWE1MX0NoYXIgKmNhY2hlZE9sZEJhc2UgPSBOVUxMOworICBjb25zdCBYTUxf
Q2hhciAqY2FjaGVkTmV3QmFzZSA9IE5VTEw7CisKKyAgaGFzaFRhYmxlSXRlckluaXQoJml0ZXIs
IG9sZFRhYmxlKTsKKworICBmb3IgKDs7KSB7CisgICAgRU5USVRZICpuZXdFOworICAgIGNvbnN0
IFhNTF9DaGFyICpuYW1lOworICAgIGNvbnN0IEVOVElUWSAqb2xkRSA9IChFTlRJVFkgKiloYXNo
VGFibGVJdGVyTmV4dCgmaXRlcik7CisgICAgaWYgKCFvbGRFKQorICAgICAgYnJlYWs7CisgICAg
bmFtZSA9IHBvb2xDb3B5U3RyaW5nKG5ld1Bvb2wsIG9sZEUtPm5hbWUpOworICAgIGlmICghbmFt
ZSkKKyAgICAgIHJldHVybiAwOworICAgIG5ld0UgPSAoRU5USVRZICopbG9va3VwKG9sZFBhcnNl
ciwgbmV3VGFibGUsIG5hbWUsIHNpemVvZihFTlRJVFkpKTsKKyAgICBpZiAoIW5ld0UpCisgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAob2xkRS0+c3lzdGVtSWQpIHsKKyAgICAgIGNvbnN0IFhNTF9D
aGFyICp0ZW0gPSBwb29sQ29weVN0cmluZyhuZXdQb29sLCBvbGRFLT5zeXN0ZW1JZCk7CisgICAg
ICBpZiAoIXRlbSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBuZXdFLT5zeXN0ZW1JZCA9IHRl
bTsKKyAgICAgIGlmIChvbGRFLT5iYXNlKSB7CisgICAgICAgIGlmIChvbGRFLT5iYXNlID09IGNh
Y2hlZE9sZEJhc2UpCisgICAgICAgICAgbmV3RS0+YmFzZSA9IGNhY2hlZE5ld0Jhc2U7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgIGNhY2hlZE9sZEJhc2UgPSBvbGRFLT5iYXNlOworICAgICAg
ICAgIHRlbSA9IHBvb2xDb3B5U3RyaW5nKG5ld1Bvb2wsIGNhY2hlZE9sZEJhc2UpOworICAgICAg
ICAgIGlmICghdGVtKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgY2FjaGVkTmV3
QmFzZSA9IG5ld0UtPmJhc2UgPSB0ZW07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChv
bGRFLT5wdWJsaWNJZCkgeworICAgICAgICB0ZW0gPSBwb29sQ29weVN0cmluZyhuZXdQb29sLCBv
bGRFLT5wdWJsaWNJZCk7CisgICAgICAgIGlmICghdGVtKQorICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBuZXdFLT5wdWJsaWNJZCA9IHRlbTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7
CisgICAgICBjb25zdCBYTUxfQ2hhciAqdGVtID0gcG9vbENvcHlTdHJpbmdOKG5ld1Bvb2wsIG9s
ZEUtPnRleHRQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9sZEUtPnRleHRMZW4pOworICAgICAgaWYgKCF0ZW0pCisgICAgICAgIHJldHVybiAwOworICAg
ICAgbmV3RS0+dGV4dFB0ciA9IHRlbTsKKyAgICAgIG5ld0UtPnRleHRMZW4gPSBvbGRFLT50ZXh0
TGVuOworICAgIH0KKyAgICBpZiAob2xkRS0+bm90YXRpb24pIHsKKyAgICAgIGNvbnN0IFhNTF9D
aGFyICp0ZW0gPSBwb29sQ29weVN0cmluZyhuZXdQb29sLCBvbGRFLT5ub3RhdGlvbik7CisgICAg
ICBpZiAoIXRlbSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBuZXdFLT5ub3RhdGlvbiA9IHRl
bTsKKyAgICB9CisgICAgbmV3RS0+aXNfcGFyYW0gPSBvbGRFLT5pc19wYXJhbTsKKyAgICBuZXdF
LT5pc19pbnRlcm5hbCA9IG9sZEUtPmlzX2ludGVybmFsOworICB9CisgIHJldHVybiAxOworfQor
CisjZGVmaW5lIElOSVRfUE9XRVIgNgorCitzdGF0aWMgWE1MX0Jvb2wgRkFTVENBTEwKK2tleWVx
KEtFWSBzMSwgS0VZIHMyKQoreworICBmb3IgKDsgKnMxID09ICpzMjsgczErKywgczIrKykKKyAg
ICBpZiAoKnMxID09IDApCisgICAgICByZXR1cm4gWE1MX1RSVUU7CisgIHJldHVybiBYTUxfRkFM
U0U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIEZBU1RDQUxMCitoYXNoKFhNTF9QYXJzZXIg
cGFyc2VyLCBLRVkgcykKK3sKKyAgdW5zaWduZWQgbG9uZyBoID0gaGFzaF9zZWNyZXRfc2FsdDsK
KyAgd2hpbGUgKCpzKQorICAgIGggPSBDSEFSX0hBU0goaCwgKnMrKyk7CisgIHJldHVybiBoOwor
fQorCitzdGF0aWMgTkFNRUQgKgorbG9va3VwKFhNTF9QYXJzZXIgcGFyc2VyLCBIQVNIX1RBQkxF
ICp0YWJsZSwgS0VZIG5hbWUsIHNpemVfdCBjcmVhdGVTaXplKQoreworICBzaXplX3QgaTsKKyAg
aWYgKHRhYmxlLT5zaXplID09IDApIHsKKyAgICBzaXplX3QgdHNpemU7CisgICAgaWYgKCFjcmVh
dGVTaXplKQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgdGFibGUtPnBvd2VyID0gSU5JVF9QT1dF
UjsKKyAgICAvKiB0YWJsZS0+c2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KKyAgICB0YWJsZS0+c2l6
ZSA9IChzaXplX3QpMSA8PCBJTklUX1BPV0VSOworICAgIHRzaXplID0gdGFibGUtPnNpemUgKiBz
aXplb2YoTkFNRUQgKik7CisgICAgdGFibGUtPnYgPSAoTkFNRUQgKiopdGFibGUtPm1lbS0+bWFs
bG9jX2Zjbih0c2l6ZSk7CisgICAgaWYgKCF0YWJsZS0+dikgeworICAgICAgdGFibGUtPnNpemUg
PSAwOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbXNldCh0YWJsZS0+diwgMCwg
dHNpemUpOworICAgIGkgPSBoYXNoKHBhcnNlciwgbmFtZSkgJiAoKHVuc2lnbmVkIGxvbmcpdGFi
bGUtPnNpemUgLSAxKTsKKyAgfQorICBlbHNlIHsKKyAgICB1bnNpZ25lZCBsb25nIGggPSBoYXNo
KHBhcnNlciwgbmFtZSk7CisgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gKHVuc2lnbmVkIGxvbmcp
dGFibGUtPnNpemUgLSAxOworICAgIHVuc2lnbmVkIGNoYXIgc3RlcCA9IDA7CisgICAgaSA9IGgg
JiBtYXNrOworICAgIHdoaWxlICh0YWJsZS0+dltpXSkgeworICAgICAgaWYgKGtleWVxKG5hbWUs
IHRhYmxlLT52W2ldLT5uYW1lKSkKKyAgICAgICAgcmV0dXJuIHRhYmxlLT52W2ldOworICAgICAg
aWYgKCFzdGVwKQorICAgICAgICBzdGVwID0gUFJPQkVfU1RFUChoLCBtYXNrLCB0YWJsZS0+cG93
ZXIpOworICAgICAgaSA8IHN0ZXAgPyAoaSArPSB0YWJsZS0+c2l6ZSAtIHN0ZXApIDogKGkgLT0g
c3RlcCk7CisgICAgfQorICAgIGlmICghY3JlYXRlU2l6ZSkKKyAgICAgIHJldHVybiBOVUxMOwor
CisgICAgLyogY2hlY2sgZm9yIG92ZXJmbG93ICh0YWJsZSBpcyBoYWxmIGZ1bGwpICovCisgICAg
aWYgKHRhYmxlLT51c2VkID4+ICh0YWJsZS0+cG93ZXIgLSAxKSkgeworICAgICAgdW5zaWduZWQg
Y2hhciBuZXdQb3dlciA9IHRhYmxlLT5wb3dlciArIDE7CisgICAgICBzaXplX3QgbmV3U2l6ZSA9
IChzaXplX3QpMSA8PCBuZXdQb3dlcjsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbmV3TWFzayA9ICh1
bnNpZ25lZCBsb25nKW5ld1NpemUgLSAxOworICAgICAgc2l6ZV90IHRzaXplID0gbmV3U2l6ZSAq
IHNpemVvZihOQU1FRCAqKTsKKyAgICAgIE5BTUVEICoqbmV3ViA9IChOQU1FRCAqKil0YWJsZS0+
bWVtLT5tYWxsb2NfZmNuKHRzaXplKTsKKyAgICAgIGlmICghbmV3VikKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICBtZW1zZXQobmV3ViwgMCwgdHNpemUpOworICAgICAgZm9yIChpID0gMDsg
aSA8IHRhYmxlLT5zaXplOyBpKyspCisgICAgICAgIGlmICh0YWJsZS0+dltpXSkgeworICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgbmV3SGFzaCA9IGhhc2gocGFyc2VyLCB0YWJsZS0+dltpXS0+bmFt
ZSk7CisgICAgICAgICAgc2l6ZV90IGogPSBuZXdIYXNoICYgbmV3TWFzazsKKyAgICAgICAgICBz
dGVwID0gMDsKKyAgICAgICAgICB3aGlsZSAobmV3VltqXSkgeworICAgICAgICAgICAgaWYgKCFz
dGVwKQorICAgICAgICAgICAgICBzdGVwID0gUFJPQkVfU1RFUChuZXdIYXNoLCBuZXdNYXNrLCBu
ZXdQb3dlcik7CisgICAgICAgICAgICBqIDwgc3RlcCA/IChqICs9IG5ld1NpemUgLSBzdGVwKSA6
IChqIC09IHN0ZXApOworICAgICAgICAgIH0KKyAgICAgICAgICBuZXdWW2pdID0gdGFibGUtPnZb
aV07CisgICAgICAgIH0KKyAgICAgIHRhYmxlLT5tZW0tPmZyZWVfZmNuKHRhYmxlLT52KTsKKyAg
ICAgIHRhYmxlLT52ID0gbmV3VjsKKyAgICAgIHRhYmxlLT5wb3dlciA9IG5ld1Bvd2VyOworICAg
ICAgdGFibGUtPnNpemUgPSBuZXdTaXplOworICAgICAgaSA9IGggJiBuZXdNYXNrOworICAgICAg
c3RlcCA9IDA7CisgICAgICB3aGlsZSAodGFibGUtPnZbaV0pIHsKKyAgICAgICAgaWYgKCFzdGVw
KQorICAgICAgICAgIHN0ZXAgPSBQUk9CRV9TVEVQKGgsIG5ld01hc2ssIG5ld1Bvd2VyKTsKKyAg
ICAgICAgaSA8IHN0ZXAgPyAoaSArPSBuZXdTaXplIC0gc3RlcCkgOiAoaSAtPSBzdGVwKTsKKyAg
ICAgIH0KKyAgICB9CisgIH0KKyAgdGFibGUtPnZbaV0gPSAoTkFNRUQgKil0YWJsZS0+bWVtLT5t
YWxsb2NfZmNuKGNyZWF0ZVNpemUpOworICBpZiAoIXRhYmxlLT52W2ldKQorICAgIHJldHVybiBO
VUxMOworICBtZW1zZXQodGFibGUtPnZbaV0sIDAsIGNyZWF0ZVNpemUpOworICB0YWJsZS0+dltp
XS0+bmFtZSA9IG5hbWU7CisgICh0YWJsZS0+dXNlZCkrKzsKKyAgcmV0dXJuIHRhYmxlLT52W2ld
OworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAoraGFzaFRhYmxlQ2xlYXIoSEFTSF9UQUJMRSAq
dGFibGUpCit7CisgIHNpemVfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgdGFibGUtPnNpemU7IGkr
KykgeworICAgIHRhYmxlLT5tZW0tPmZyZWVfZmNuKHRhYmxlLT52W2ldKTsKKyAgICB0YWJsZS0+
dltpXSA9IE5VTEw7CisgIH0KKyAgdGFibGUtPnVzZWQgPSAwOworfQorCitzdGF0aWMgdm9pZCBG
QVNUQ0FMTAoraGFzaFRhYmxlRGVzdHJveShIQVNIX1RBQkxFICp0YWJsZSkKK3sKKyAgc2l6ZV90
IGk7CisgIGZvciAoaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgaSsrKQorICAgIHRhYmxlLT5tZW0t
PmZyZWVfZmNuKHRhYmxlLT52W2ldKTsKKyAgdGFibGUtPm1lbS0+ZnJlZV9mY24odGFibGUtPnYp
OworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAoraGFzaFRhYmxlSW5pdChIQVNIX1RBQkxFICpw
LCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptcykKK3sKKyAgcC0+cG93ZXIgPSAw
OworICBwLT5zaXplID0gMDsKKyAgcC0+dXNlZCA9IDA7CisgIHAtPnYgPSBOVUxMOworICBwLT5t
ZW0gPSBtczsKK30KKworc3RhdGljIHZvaWQgRkFTVENBTEwKK2hhc2hUYWJsZUl0ZXJJbml0KEhB
U0hfVEFCTEVfSVRFUiAqaXRlciwgY29uc3QgSEFTSF9UQUJMRSAqdGFibGUpCit7CisgIGl0ZXIt
PnAgPSB0YWJsZS0+djsKKyAgaXRlci0+ZW5kID0gaXRlci0+cCArIHRhYmxlLT5zaXplOworfQor
CitzdGF0aWMgTkFNRUQgKiBGQVNUQ0FMTAoraGFzaFRhYmxlSXRlck5leHQoSEFTSF9UQUJMRV9J
VEVSICppdGVyKQoreworICB3aGlsZSAoaXRlci0+cCAhPSBpdGVyLT5lbmQpIHsKKyAgICBOQU1F
RCAqdGVtID0gKihpdGVyLT5wKSsrOworICAgIGlmICh0ZW0pCisgICAgICByZXR1cm4gdGVtOwor
ICB9CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAorcG9vbEluaXQo
U1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKQor
eworICBwb29sLT5ibG9ja3MgPSBOVUxMOworICBwb29sLT5mcmVlQmxvY2tzID0gTlVMTDsKKyAg
cG9vbC0+c3RhcnQgPSBOVUxMOworICBwb29sLT5wdHIgPSBOVUxMOworICBwb29sLT5lbmQgPSBO
VUxMOworICBwb29sLT5tZW0gPSBtczsKK30KKworc3RhdGljIHZvaWQgRkFTVENBTEwKK3Bvb2xD
bGVhcihTVFJJTkdfUE9PTCAqcG9vbCkKK3sKKyAgaWYgKCFwb29sLT5mcmVlQmxvY2tzKQorICAg
IHBvb2wtPmZyZWVCbG9ja3MgPSBwb29sLT5ibG9ja3M7CisgIGVsc2UgeworICAgIEJMT0NLICpw
ID0gcG9vbC0+YmxvY2tzOworICAgIHdoaWxlIChwKSB7CisgICAgICBCTE9DSyAqdGVtID0gcC0+
bmV4dDsKKyAgICAgIHAtPm5leHQgPSBwb29sLT5mcmVlQmxvY2tzOworICAgICAgcG9vbC0+ZnJl
ZUJsb2NrcyA9IHA7CisgICAgICBwID0gdGVtOworICAgIH0KKyAgfQorICBwb29sLT5ibG9ja3Mg
PSBOVUxMOworICBwb29sLT5zdGFydCA9IE5VTEw7CisgIHBvb2wtPnB0ciA9IE5VTEw7CisgIHBv
b2wtPmVuZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIEZBU1RDQUxMCitwb29sRGVzdHJveShT
VFJJTkdfUE9PTCAqcG9vbCkKK3sKKyAgQkxPQ0sgKnAgPSBwb29sLT5ibG9ja3M7CisgIHdoaWxl
IChwKSB7CisgICAgQkxPQ0sgKnRlbSA9IHAtPm5leHQ7CisgICAgcG9vbC0+bWVtLT5mcmVlX2Zj
bihwKTsKKyAgICBwID0gdGVtOworICB9CisgIHAgPSBwb29sLT5mcmVlQmxvY2tzOworICB3aGls
ZSAocCkgeworICAgIEJMT0NLICp0ZW0gPSBwLT5uZXh0OworICAgIHBvb2wtPm1lbS0+ZnJlZV9m
Y24ocCk7CisgICAgcCA9IHRlbTsKKyAgfQorfQorCitzdGF0aWMgWE1MX0NoYXIgKgorcG9vbEFw
cGVuZChTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAg
Y29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQpCit7CisgIGlmICghcG9vbC0+cHRyICYm
ICFwb29sR3Jvdyhwb29sKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZm9yICg7OykgeworICAgIFht
bENvbnZlcnQoZW5jLCAmcHRyLCBlbmQsIChJQ0hBUiAqKikmKHBvb2wtPnB0ciksIChJQ0hBUiAq
KXBvb2wtPmVuZCk7CisgICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICBicmVhazsKKyAgICBpZiAo
IXBvb2xHcm93KHBvb2wpKQorICAgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIHBvb2wt
PnN0YXJ0OworfQorCitzdGF0aWMgY29uc3QgWE1MX0NoYXIgKiBGQVNUQ0FMTAorcG9vbENvcHlT
dHJpbmcoU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9DaGFyICpzKQoreworICBkbyB7Cisg
ICAgaWYgKCFwb29sQXBwZW5kQ2hhcihwb29sLCAqcykpCisgICAgICByZXR1cm4gTlVMTDsKKyAg
fSB3aGlsZSAoKnMrKyk7CisgIHMgPSBwb29sLT5zdGFydDsKKyAgcG9vbEZpbmlzaChwb29sKTsK
KyAgcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBjb25zdCBYTUxfQ2hhciAqCitwb29sQ29weVN0cmlu
Z04oU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9DaGFyICpzLCBpbnQgbikKK3sKKyAgaWYg
KCFwb29sLT5wdHIgJiYgIXBvb2xHcm93KHBvb2wpKQorICAgIHJldHVybiBOVUxMOworICBmb3Ig
KDsgbiA+IDA7IC0tbiwgcysrKSB7CisgICAgaWYgKCFwb29sQXBwZW5kQ2hhcihwb29sLCAqcykp
CisgICAgICByZXR1cm4gTlVMTDsKKyAgfQorICBzID0gcG9vbC0+c3RhcnQ7CisgIHBvb2xGaW5p
c2gocG9vbCk7CisgIHJldHVybiBzOworfQorCitzdGF0aWMgY29uc3QgWE1MX0NoYXIgKiBGQVNU
Q0FMTAorcG9vbEFwcGVuZFN0cmluZyhTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgWE1MX0NoYXIg
KnMpCit7CisgIHdoaWxlICgqcykgeworICAgIGlmICghcG9vbEFwcGVuZENoYXIocG9vbCwgKnMp
KQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgcysrOworICB9CisgIHJldHVybiBwb29sLT5zdGFy
dDsKK30KKworc3RhdGljIFhNTF9DaGFyICoKK3Bvb2xTdG9yZVN0cmluZyhTVFJJTkdfUE9PTCAq
cG9vbCwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw
dHIsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKyAgaWYgKCFwb29sQXBwZW5kKHBvb2wsIGVuYywgcHRy
LCBlbmQpKQorICAgIHJldHVybiBOVUxMOworICBpZiAocG9vbC0+cHRyID09IHBvb2wtPmVuZCAm
JiAhcG9vbEdyb3cocG9vbCkpCisgICAgcmV0dXJuIE5VTEw7CisgICoocG9vbC0+cHRyKSsrID0g
MDsKKyAgcmV0dXJuIHBvb2wtPnN0YXJ0OworfQorCitzdGF0aWMgWE1MX0Jvb2wgRkFTVENBTEwK
K3Bvb2xHcm93KFNUUklOR19QT09MICpwb29sKQoreworICBpZiAocG9vbC0+ZnJlZUJsb2Nrcykg
eworICAgIGlmIChwb29sLT5zdGFydCA9PSAwKSB7CisgICAgICBwb29sLT5ibG9ja3MgPSBwb29s
LT5mcmVlQmxvY2tzOworICAgICAgcG9vbC0+ZnJlZUJsb2NrcyA9IHBvb2wtPmZyZWVCbG9ja3Mt
Pm5leHQ7CisgICAgICBwb29sLT5ibG9ja3MtPm5leHQgPSBOVUxMOworICAgICAgcG9vbC0+c3Rh
cnQgPSBwb29sLT5ibG9ja3MtPnM7CisgICAgICBwb29sLT5lbmQgPSBwb29sLT5zdGFydCArIHBv
b2wtPmJsb2Nrcy0+c2l6ZTsKKyAgICAgIHBvb2wtPnB0ciA9IHBvb2wtPnN0YXJ0OworICAgICAg
cmV0dXJuIFhNTF9UUlVFOworICAgIH0KKyAgICBpZiAocG9vbC0+ZW5kIC0gcG9vbC0+c3RhcnQg
PCBwb29sLT5mcmVlQmxvY2tzLT5zaXplKSB7CisgICAgICBCTE9DSyAqdGVtID0gcG9vbC0+ZnJl
ZUJsb2Nrcy0+bmV4dDsKKyAgICAgIHBvb2wtPmZyZWVCbG9ja3MtPm5leHQgPSBwb29sLT5ibG9j
a3M7CisgICAgICBwb29sLT5ibG9ja3MgPSBwb29sLT5mcmVlQmxvY2tzOworICAgICAgcG9vbC0+
ZnJlZUJsb2NrcyA9IHRlbTsKKyAgICAgIG1lbWNweShwb29sLT5ibG9ja3MtPnMsIHBvb2wtPnN0
YXJ0LAorICAgICAgICAgICAgIChwb29sLT5lbmQgLSBwb29sLT5zdGFydCkgKiBzaXplb2YoWE1M
X0NoYXIpKTsKKyAgICAgIHBvb2wtPnB0ciA9IHBvb2wtPmJsb2Nrcy0+cyArIChwb29sLT5wdHIg
LSBwb29sLT5zdGFydCk7CisgICAgICBwb29sLT5zdGFydCA9IHBvb2wtPmJsb2Nrcy0+czsKKyAg
ICAgIHBvb2wtPmVuZCA9IHBvb2wtPnN0YXJ0ICsgcG9vbC0+YmxvY2tzLT5zaXplOworICAgICAg
cmV0dXJuIFhNTF9UUlVFOworICAgIH0KKyAgfQorICBpZiAocG9vbC0+YmxvY2tzICYmIHBvb2wt
PnN0YXJ0ID09IHBvb2wtPmJsb2Nrcy0+cykgeworICAgIGludCBibG9ja1NpemUgPSAoaW50KShw
b29sLT5lbmQgLSBwb29sLT5zdGFydCkqMjsKKyAgICBCTE9DSyAqdGVtcCA9IChCTE9DSyAqKQor
ICAgICAgcG9vbC0+bWVtLT5yZWFsbG9jX2Zjbihwb29sLT5ibG9ja3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChvZmZzZXRvZihCTE9DSywgcykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsgYmxvY2tTaXplICogc2l6ZW9mKFhNTF9DaGFyKSkpOworICAgIGlmICh0ZW1w
ID09IE5VTEwpCisgICAgICByZXR1cm4gWE1MX0ZBTFNFOworICAgIHBvb2wtPmJsb2NrcyA9IHRl
bXA7CisgICAgcG9vbC0+YmxvY2tzLT5zaXplID0gYmxvY2tTaXplOworICAgIHBvb2wtPnB0ciA9
IHBvb2wtPmJsb2Nrcy0+cyArIChwb29sLT5wdHIgLSBwb29sLT5zdGFydCk7CisgICAgcG9vbC0+
c3RhcnQgPSBwb29sLT5ibG9ja3MtPnM7CisgICAgcG9vbC0+ZW5kID0gcG9vbC0+c3RhcnQgKyBi
bG9ja1NpemU7CisgIH0KKyAgZWxzZSB7CisgICAgQkxPQ0sgKnRlbTsKKyAgICBpbnQgYmxvY2tT
aXplID0gKGludCkocG9vbC0+ZW5kIC0gcG9vbC0+c3RhcnQpOworICAgIGlmIChibG9ja1NpemUg
PCBJTklUX0JMT0NLX1NJWkUpCisgICAgICBibG9ja1NpemUgPSBJTklUX0JMT0NLX1NJWkU7Cisg
ICAgZWxzZQorICAgICAgYmxvY2tTaXplICo9IDI7CisgICAgdGVtID0gKEJMT0NLICopcG9vbC0+
bWVtLT5tYWxsb2NfZmNuKG9mZnNldG9mKEJMT0NLLCBzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgYmxvY2tTaXplICogc2l6ZW9mKFhNTF9DaGFyKSk7CisgICAg
aWYgKCF0ZW0pCisgICAgICByZXR1cm4gWE1MX0ZBTFNFOworICAgIHRlbS0+c2l6ZSA9IGJsb2Nr
U2l6ZTsKKyAgICB0ZW0tPm5leHQgPSBwb29sLT5ibG9ja3M7CisgICAgcG9vbC0+YmxvY2tzID0g
dGVtOworICAgIGlmIChwb29sLT5wdHIgIT0gcG9vbC0+c3RhcnQpCisgICAgICBtZW1jcHkodGVt
LT5zLCBwb29sLT5zdGFydCwKKyAgICAgICAgICAgICAocG9vbC0+cHRyIC0gcG9vbC0+c3RhcnQp
ICogc2l6ZW9mKFhNTF9DaGFyKSk7CisgICAgcG9vbC0+cHRyID0gdGVtLT5zICsgKHBvb2wtPnB0
ciAtIHBvb2wtPnN0YXJ0KTsKKyAgICBwb29sLT5zdGFydCA9IHRlbS0+czsKKyAgICBwb29sLT5l
bmQgPSB0ZW0tPnMgKyBibG9ja1NpemU7CisgIH0KKyAgcmV0dXJuIFhNTF9UUlVFOworfQorCitz
dGF0aWMgaW50IEZBU1RDQUxMCituZXh0U2NhZmZvbGRQYXJ0KFhNTF9QYXJzZXIgcGFyc2VyKQor
eworICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJl
Y3Rpb24gKi8KKyAgQ09OVEVOVF9TQ0FGRk9MRCAqIG1lOworICBpbnQgbmV4dDsKKworICBpZiAo
IWR0ZC0+c2NhZmZJbmRleCkgeworICAgIGR0ZC0+c2NhZmZJbmRleCA9IChpbnQgKilNQUxMT0Mo
Z3JvdXBTaXplICogc2l6ZW9mKGludCkpOworICAgIGlmICghZHRkLT5zY2FmZkluZGV4KQorICAg
ICAgcmV0dXJuIC0xOworICAgIGR0ZC0+c2NhZmZJbmRleFswXSA9IDA7CisgIH0KKworICBpZiAo
ZHRkLT5zY2FmZkNvdW50ID49IGR0ZC0+c2NhZmZTaXplKSB7CisgICAgQ09OVEVOVF9TQ0FGRk9M
RCAqdGVtcDsKKyAgICBpZiAoZHRkLT5zY2FmZm9sZCkgeworICAgICAgdGVtcCA9IChDT05URU5U
X1NDQUZGT0xEICopCisgICAgICAgIFJFQUxMT0MoZHRkLT5zY2FmZm9sZCwgZHRkLT5zY2FmZlNp
emUgKiAyICogc2l6ZW9mKENPTlRFTlRfU0NBRkZPTEQpKTsKKyAgICAgIGlmICh0ZW1wID09IE5V
TEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIGR0ZC0+c2NhZmZTaXplICo9IDI7CisgICAg
fQorICAgIGVsc2UgeworICAgICAgdGVtcCA9IChDT05URU5UX1NDQUZGT0xEICopTUFMTE9DKElO
SVRfU0NBRkZPTERfRUxFTUVOVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIHNpemVvZihDT05URU5UX1NDQUZGT0xEKSk7CisgICAgICBpZiAodGVtcCA9PSBOVUxM
KQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBkdGQtPnNjYWZmU2l6ZSA9IElOSVRfU0NBRkZP
TERfRUxFTUVOVFM7CisgICAgfQorICAgIGR0ZC0+c2NhZmZvbGQgPSB0ZW1wOworICB9CisgIG5l
eHQgPSBkdGQtPnNjYWZmQ291bnQrKzsKKyAgbWUgPSAmZHRkLT5zY2FmZm9sZFtuZXh0XTsKKyAg
aWYgKGR0ZC0+c2NhZmZMZXZlbCkgeworICAgIENPTlRFTlRfU0NBRkZPTEQgKnBhcmVudCA9ICZk
dGQtPnNjYWZmb2xkW2R0ZC0+c2NhZmZJbmRleFtkdGQtPnNjYWZmTGV2ZWwtMV1dOworICAgIGlm
IChwYXJlbnQtPmxhc3RjaGlsZCkgeworICAgICAgZHRkLT5zY2FmZm9sZFtwYXJlbnQtPmxhc3Rj
aGlsZF0ubmV4dHNpYiA9IG5leHQ7CisgICAgfQorICAgIGlmICghcGFyZW50LT5jaGlsZGNudCkK
KyAgICAgIHBhcmVudC0+Zmlyc3RjaGlsZCA9IG5leHQ7CisgICAgcGFyZW50LT5sYXN0Y2hpbGQg
PSBuZXh0OworICAgIHBhcmVudC0+Y2hpbGRjbnQrKzsKKyAgfQorICBtZS0+Zmlyc3RjaGlsZCA9
IG1lLT5sYXN0Y2hpbGQgPSBtZS0+Y2hpbGRjbnQgPSBtZS0+bmV4dHNpYiA9IDA7CisgIHJldHVy
biBuZXh0OworfQorCitzdGF0aWMgdm9pZAorYnVpbGRfbm9kZShYTUxfUGFyc2VyIHBhcnNlciwK
KyAgICAgICAgICAgaW50IHNyY19ub2RlLAorICAgICAgICAgICBYTUxfQ29udGVudCAqZGVzdCwK
KyAgICAgICAgICAgWE1MX0NvbnRlbnQgKipjb250cG9zLAorICAgICAgICAgICBYTUxfQ2hhciAq
KnN0cnBvcykKK3sKKyAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVs
IG9mIGluZGlyZWN0aW9uICovCisgIGRlc3QtPnR5cGUgPSBkdGQtPnNjYWZmb2xkW3NyY19ub2Rl
XS50eXBlOworICBkZXN0LT5xdWFudCA9IGR0ZC0+c2NhZmZvbGRbc3JjX25vZGVdLnF1YW50Owor
ICBpZiAoZGVzdC0+dHlwZSA9PSBYTUxfQ1RZUEVfTkFNRSkgeworICAgIGNvbnN0IFhNTF9DaGFy
ICpzcmM7CisgICAgZGVzdC0+bmFtZSA9ICpzdHJwb3M7CisgICAgc3JjID0gZHRkLT5zY2FmZm9s
ZFtzcmNfbm9kZV0ubmFtZTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAqKCpzdHJwb3MpKysgPSAq
c3JjOworICAgICAgaWYgKCEqc3JjKQorICAgICAgICBicmVhazsKKyAgICAgIHNyYysrOworICAg
IH0KKyAgICBkZXN0LT5udW1jaGlsZHJlbiA9IDA7CisgICAgZGVzdC0+Y2hpbGRyZW4gPSBOVUxM
OworICB9CisgIGVsc2UgeworICAgIHVuc2lnbmVkIGludCBpOworICAgIGludCBjbjsKKyAgICBk
ZXN0LT5udW1jaGlsZHJlbiA9IGR0ZC0+c2NhZmZvbGRbc3JjX25vZGVdLmNoaWxkY250OworICAg
IGRlc3QtPmNoaWxkcmVuID0gKmNvbnRwb3M7CisgICAgKmNvbnRwb3MgKz0gZGVzdC0+bnVtY2hp
bGRyZW47CisgICAgZm9yIChpID0gMCwgY24gPSBkdGQtPnNjYWZmb2xkW3NyY19ub2RlXS5maXJz
dGNoaWxkOworICAgICAgICAgaSA8IGRlc3QtPm51bWNoaWxkcmVuOworICAgICAgICAgaSsrLCBj
biA9IGR0ZC0+c2NhZmZvbGRbY25dLm5leHRzaWIpIHsKKyAgICAgIGJ1aWxkX25vZGUocGFyc2Vy
LCBjbiwgJihkZXN0LT5jaGlsZHJlbltpXSksIGNvbnRwb3MsIHN0cnBvcyk7CisgICAgfQorICAg
IGRlc3QtPm5hbWUgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBYTUxfQ29udGVudCAqCitidWls
ZF9tb2RlbCAoWE1MX1BhcnNlciBwYXJzZXIpCit7CisgIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7
ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLworICBYTUxfQ29udGVudCAqcmV0
OworICBYTUxfQ29udGVudCAqY3BvczsKKyAgWE1MX0NoYXIgKiBzdHI7CisgIGludCBhbGxvY3Np
emUgPSAoZHRkLT5zY2FmZkNvdW50ICogc2l6ZW9mKFhNTF9Db250ZW50KQorICAgICAgICAgICAg
ICAgICAgICsgKGR0ZC0+Y29udGVudFN0cmluZ0xlbiAqIHNpemVvZihYTUxfQ2hhcikpKTsKKwor
ICByZXQgPSAoWE1MX0NvbnRlbnQgKilNQUxMT0MoYWxsb2NzaXplKTsKKyAgaWYgKCFyZXQpCisg
ICAgcmV0dXJuIE5VTEw7CisKKyAgc3RyID0gIChYTUxfQ2hhciAqKSAoJnJldFtkdGQtPnNjYWZm
Q291bnRdKTsKKyAgY3BvcyA9ICZyZXRbMV07CisKKyAgYnVpbGRfbm9kZShwYXJzZXIsIDAsIHJl
dCwgJmNwb3MsICZzdHIpOworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgRUxFTUVOVF9UWVBF
ICoKK2dldEVsZW1lbnRUeXBlKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgY29u
c3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCkKK3sKKyAgRFREICogY29uc3QgZHRkID0gX2R0ZDsg
IC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCisgIGNvbnN0IFhNTF9DaGFyICpu
YW1lID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywgcHRyLCBlbmQpOworICBFTEVN
RU5UX1RZUEUgKnJldDsKKworICBpZiAoIW5hbWUpCisgICAgcmV0dXJuIE5VTEw7CisgIHJldCA9
IChFTEVNRU5UX1RZUEUgKikgbG9va3VwKHBhcnNlciwgJmR0ZC0+ZWxlbWVudFR5cGVzLCBuYW1l
LCBzaXplb2YoRUxFTUVOVF9UWVBFKSk7CisgIGlmICghcmV0KQorICAgIHJldHVybiBOVUxMOwor
ICBpZiAocmV0LT5uYW1lICE9IG5hbWUpCisgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7Cisg
IGVsc2UgeworICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9vbCk7CisgICAgaWYgKCFzZXRFbGVtZW50
VHlwZVByZWZpeChwYXJzZXIsIHJldCkpCisgICAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1
cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1scGFyc2UuYy5vcmlnaW5hbCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGli
L3htbHBhcnNlLmMub3JpZ2luYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM1YWEzNmJhOGE3ZmNlM2JhZTkwZjMx
YjIwMzU0NDM1YjE1ZDJmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHBhcnNlLmMub3Jp
Z2luYWwKQEAgLTAsMCArMSw2NDAzIEBACisvKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIw
MDAgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCisgICBTZWUgdGhlIGZpbGUg
Q09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgorKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNldCgpLCBt
ZW1jcHkoKSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAg
ICAgICAgICAgICAgICAgIC8qIFVJTlRfTUFYICovCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAg
ICAgICAgICAgICAgICAgLyogdGltZSgpICovCisKKyNkZWZpbmUgWE1MX0JVSUxESU5HX0VYUEFU
IDEKKworI2lmZGVmIENPTVBJTEVEX0ZST01fRFNQCisjaW5jbHVkZSAid2luY29uZmlnLmgiCisj
ZWxpZiBkZWZpbmVkKE1BQ09TX0NMQVNTSUMpCisjaW5jbHVkZSAibWFjY29uZmlnLmgiCisjZWxp
ZiBkZWZpbmVkKF9fYW1pZ2Fvc19fKQorI2luY2x1ZGUgImFtaWdhY29uZmlnLmgiCisjZWxpZiBk
ZWZpbmVkKF9fV0FUQ09NQ19fKQorI2luY2x1ZGUgIndhdGNvbWNvbmZpZy5oIgorI2VsaWYgZGVm
aW5lZChIQVZFX0VYUEFUX0NPTkZJR19IKQorI2luY2x1ZGUgPGV4cGF0X2NvbmZpZy5oPgorI2Vu
ZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KKworI2luY2x1ZGUgImFzY2lpLmgiCisj
aW5jbHVkZSAiZXhwYXQuaCIKKworI2lmZGVmIFhNTF9VTklDT0RFCisjZGVmaW5lIFhNTF9FTkNP
REVfTUFYIFhNTF9VVEYxNl9FTkNPREVfTUFYCisjZGVmaW5lIFhtbENvbnZlcnQgWG1sVXRmMTZD
b252ZXJ0CisjZGVmaW5lIFhtbEdldEludGVybmFsRW5jb2RpbmcgWG1sR2V0VXRmMTZJbnRlcm5h
bEVuY29kaW5nCisjZGVmaW5lIFhtbEdldEludGVybmFsRW5jb2RpbmdOUyBYbWxHZXRVdGYxNklu
dGVybmFsRW5jb2RpbmdOUworI2RlZmluZSBYbWxFbmNvZGUgWG1sVXRmMTZFbmNvZGUKKy8qIFVz
aW5nIHBvaW50ZXIgc3VidHJhY3Rpb24gdG8gY29udmVydCB0byBpbnRlZ2VyIHR5cGUuICovCisj
ZGVmaW5lIE1VU1RfQ09OVkVSVChlbmMsIHMpICghKGVuYyktPmlzVXRmMTYgfHwgKCgoY2hhciAq
KShzKSAtIChjaGFyICopTlVMTCkgJiAxKSkKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgSUNIQVI7
CisjZWxzZQorI2RlZmluZSBYTUxfRU5DT0RFX01BWCBYTUxfVVRGOF9FTkNPREVfTUFYCisjZGVm
aW5lIFhtbENvbnZlcnQgWG1sVXRmOENvbnZlcnQKKyNkZWZpbmUgWG1sR2V0SW50ZXJuYWxFbmNv
ZGluZyBYbWxHZXRVdGY4SW50ZXJuYWxFbmNvZGluZworI2RlZmluZSBYbWxHZXRJbnRlcm5hbEVu
Y29kaW5nTlMgWG1sR2V0VXRmOEludGVybmFsRW5jb2RpbmdOUworI2RlZmluZSBYbWxFbmNvZGUg
WG1sVXRmOEVuY29kZQorI2RlZmluZSBNVVNUX0NPTlZFUlQoZW5jLCBzKSAoIShlbmMpLT5pc1V0
ZjgpCit0eXBlZGVmIGNoYXIgSUNIQVI7CisjZW5kaWYKKworCisjaWZuZGVmIFhNTF9OUworCisj
ZGVmaW5lIFhtbEluaXRFbmNvZGluZ05TIFhtbEluaXRFbmNvZGluZworI2RlZmluZSBYbWxJbml0
VW5rbm93bkVuY29kaW5nTlMgWG1sSW5pdFVua25vd25FbmNvZGluZworI3VuZGVmIFhtbEdldElu
dGVybmFsRW5jb2RpbmdOUworI2RlZmluZSBYbWxHZXRJbnRlcm5hbEVuY29kaW5nTlMgWG1sR2V0
SW50ZXJuYWxFbmNvZGluZworI2RlZmluZSBYbWxQYXJzZVhtbERlY2xOUyBYbWxQYXJzZVhtbERl
Y2wKKworI2VuZGlmCisKKyNpZmRlZiBYTUxfVU5JQ09ERQorCisjaWZkZWYgWE1MX1VOSUNPREVf
V0NIQVJfVAorI2RlZmluZSBYTUxfVCh4KSAoY29uc3Qgd2NoYXJfdCl4CisjZGVmaW5lIFhNTF9M
KHgpIEwgIyMgeAorI2Vsc2UKKyNkZWZpbmUgWE1MX1QoeCkgKGNvbnN0IHVuc2lnbmVkIHNob3J0
KXgKKyNkZWZpbmUgWE1MX0woeCkgeAorI2VuZGlmCisKKyNlbHNlCisKKyNkZWZpbmUgWE1MX1Qo
eCkgeAorI2RlZmluZSBYTUxfTCh4KSB4CisKKyNlbmRpZgorCisvKiBSb3VuZCB1cCBuIHRvIGJl
IGEgbXVsdGlwbGUgb2Ygc3osIHdoZXJlIHN6IGlzIGEgcG93ZXIgb2YgMi4gKi8KKyNkZWZpbmUg
Uk9VTkRfVVAobiwgc3opICgoKG4pICsgKChzeikgLSAxKSkgJiB+KChzeikgLSAxKSkKKworLyog
SGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1lbW1vdmUoKSBkb2Vzbid0IGV4aXN0LiAqLworI2lmbmRl
ZiBIQVZFX01FTU1PVkUKKyNpZmRlZiBIQVZFX0JDT1BZCisjZGVmaW5lIG1lbW1vdmUoZCxzLGwp
IGJjb3B5KChzKSwoZCksKGwpKQorI2Vsc2UKKyNlcnJvciBtZW1tb3ZlIGRvZXMgbm90IGV4aXN0
IG9uIHRoaXMgcGxhdGZvcm0sIG5vciBpcyBhIHN1YnN0aXR1dGUgYXZhaWxhYmxlCisjZW5kaWYg
LyogSEFWRV9CQ09QWSAqLworI2VuZGlmIC8qIEhBVkVfTUVNTU9WRSAqLworCisjaW5jbHVkZSAi
aW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ4bWx0b2suaCIKKyNpbmNsdWRlICJ4bWxyb2xlLmgiCisK
K3R5cGVkZWYgY29uc3QgWE1MX0NoYXIgKktFWTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBLRVkg
bmFtZTsKK30gTkFNRUQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTkFNRUQgKip2OworICB1bnNp
Z25lZCBjaGFyIHBvd2VyOworICBzaXplX3Qgc2l6ZTsKKyAgc2l6ZV90IHVzZWQ7CisgIGNvbnN0
IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1lbTsKK30gSEFTSF9UQUJMRTsKKworLyogQmFz
aWMgY2hhcmFjdGVyIGhhc2ggYWxnb3JpdGhtLCB0YWtlbiBmcm9tIFB5dGhvbidzIHN0cmluZyBo
YXNoOgorICAgaCA9IGggKiAxMDAwMDAzIF4gY2hhcmFjdGVyLCB0aGUgY29uc3RhbnQgYmVpbmcg
YSBwcmltZSBudW1iZXIuCisKKyovCisjaWZkZWYgWE1MX1VOSUNPREUKKyNkZWZpbmUgQ0hBUl9I
QVNIKGgsIGMpIFwKKyAgKCgoaCkgKiAweEY0MjQzKSBeICh1bnNpZ25lZCBzaG9ydCkoYykpCisj
ZWxzZQorI2RlZmluZSBDSEFSX0hBU0goaCwgYykgXAorICAoKChoKSAqIDB4RjQyNDMpIF4gKHVu
c2lnbmVkIGNoYXIpKGMpKQorI2VuZGlmCisKKy8qIEZvciBwcm9iaW5nIChhZnRlciBhIGNvbGxp
c2lvbikgd2UgbmVlZCBhIHN0ZXAgc2l6ZSByZWxhdGl2ZSBwcmltZQorICAgdG8gdGhlIGhhc2gg
dGFibGUgc2l6ZSwgd2hpY2ggaXMgYSBwb3dlciBvZiAyLiBXZSB1c2UgZG91YmxlLWhhc2hpbmcs
CisgICBzaW5jZSB3ZSBjYW4gY2FsY3VsYXRlIGEgc2Vjb25kIGhhc2ggdmFsdWUgY2hlYXBseSBi
eSB0YWtpbmcgdGhvc2UgYml0cworICAgb2YgdGhlIGZpcnN0IGhhc2ggdmFsdWUgdGhhdCB3ZXJl
IGRpc2NhcmRlZCAobWFza2VkIG91dCkgd2hlbiB0aGUgdGFibGUKKyAgIGluZGV4IHdhcyBjYWxj
dWxhdGVkOiBpbmRleCA9IGhhc2ggJiBtYXNrLCB3aGVyZSBtYXNrID0gdGFibGUtPnNpemUgLSAx
LgorICAgV2UgbGltaXQgdGhlIG1heGltdW0gc3RlcCBzaXplIHRvIHRhYmxlLT5zaXplIC8gNCAo
bWFzayA+PiAyKSBhbmQgbWFrZQorICAgaXQgb2RkLCBzaW5jZSBvZGQgbnVtYmVycyBhcmUgYWx3
YXlzIHJlbGF0aXZlIHByaW1lIHRvIGEgcG93ZXIgb2YgMi4KKyovCisjZGVmaW5lIFNFQ09ORF9I
QVNIKGhhc2gsIG1hc2ssIHBvd2VyKSBcCisgICgoKChoYXNoKSAmIH4obWFzaykpID4+ICgocG93
ZXIpIC0gMSkpICYgKChtYXNrKSA+PiAyKSkKKyNkZWZpbmUgUFJPQkVfU1RFUChoYXNoLCBtYXNr
LCBwb3dlcikgXAorICAoKHVuc2lnbmVkIGNoYXIpKChTRUNPTkRfSEFTSChoYXNoLCBtYXNrLCBw
b3dlcikpIHwgMSkpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTkFNRUQgKipwOworICBOQU1FRCAq
KmVuZDsKK30gSEFTSF9UQUJMRV9JVEVSOworCisjZGVmaW5lIElOSVRfVEFHX0JVRl9TSVpFIDMy
ICAvKiBtdXN0IGJlIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKFhNTF9DaGFyKSAqLworI2RlZmluZSBJ
TklUX0RBVEFfQlVGX1NJWkUgMTAyNAorI2RlZmluZSBJTklUX0FUVFNfU0laRSAxNgorI2RlZmlu
ZSBJTklUX0FUVFNfVkVSU0lPTiAweEZGRkZGRkZGCisjZGVmaW5lIElOSVRfQkxPQ0tfU0laRSAx
MDI0CisjZGVmaW5lIElOSVRfQlVGRkVSX1NJWkUgMTAyNAorCisjZGVmaW5lIEVYUEFORF9TUEFS
RSAyNAorCit0eXBlZGVmIHN0cnVjdCBiaW5kaW5nIHsKKyAgc3RydWN0IHByZWZpeCAqcHJlZml4
OworICBzdHJ1Y3QgYmluZGluZyAqbmV4dFRhZ0JpbmRpbmc7CisgIHN0cnVjdCBiaW5kaW5nICpw
cmV2UHJlZml4QmluZGluZzsKKyAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9pZCAqYXR0SWQ7Cisg
IFhNTF9DaGFyICp1cmk7CisgIGludCB1cmlMZW47CisgIGludCB1cmlBbGxvYzsKK30gQklORElO
RzsKKwordHlwZWRlZiBzdHJ1Y3QgcHJlZml4IHsKKyAgY29uc3QgWE1MX0NoYXIgKm5hbWU7Cisg
IEJJTkRJTkcgKmJpbmRpbmc7Cit9IFBSRUZJWDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25z
dCBYTUxfQ2hhciAqc3RyOworICBjb25zdCBYTUxfQ2hhciAqbG9jYWxQYXJ0OworICBjb25zdCBY
TUxfQ2hhciAqcHJlZml4OworICBpbnQgc3RyTGVuOworICBpbnQgdXJpTGVuOworICBpbnQgcHJl
Zml4TGVuOworfSBUQUdfTkFNRTsKKworLyogVEFHIHJlcHJlc2VudHMgYW4gb3BlbiBlbGVtZW50
LgorICAgVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgaXMgc3RvcmVkIGluIGJvdGggdGhlIGRvY3Vt
ZW50IGFuZCBBUEkKKyAgIGVuY29kaW5ncy4gIFRoZSBtZW1vcnkgYnVmZmVyICdidWYnIGlzIGEg
c2VwYXJhdGVseS1hbGxvY2F0ZWQKKyAgIG1lbW9yeSBhcmVhIHdoaWNoIHN0b3JlcyB0aGUgbmFt
ZS4gIER1cmluZyB0aGUgWE1MX1BhcnNlKCkvCisgICBYTUxQYXJzZUJ1ZmZlcigpIHdoZW4gdGhl
IGVsZW1lbnQgaXMgb3BlbiwgdGhlIG1lbW9yeSBmb3IgdGhlICdyYXcnCisgICB2ZXJzaW9uIG9m
IHRoZSBuYW1lIChpbiB0aGUgZG9jdW1lbnQgZW5jb2RpbmcpIGlzIHNoYXJlZCB3aXRoIHRoZQor
ICAgZG9jdW1lbnQgYnVmZmVyLiAgSWYgdGhlIGVsZW1lbnQgaXMgb3BlbiBhY3Jvc3MgY2FsbHMg
dG8KKyAgIFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpLCB0aGUgYnVmZmVyIGlzIHJlLWFs
bG9jYXRlZCB0bworICAgY29udGFpbiB0aGUgJ3JhdycgbmFtZSBhcyB3ZWxsLgorCisgICBBIHBh
cnNlciByZS11c2VzIHRoZXNlIHN0cnVjdHVyZXMsIG1haW50YWluaW5nIGEgbGlzdCBvZiBhbGxv
Y2F0ZWQKKyAgIFRBRyBvYmplY3RzIGluIGEgZnJlZSBsaXN0LgorKi8KK3R5cGVkZWYgc3RydWN0
IHRhZyB7CisgIHN0cnVjdCB0YWcgKnBhcmVudDsgICAgICAgICAgIC8qIHBhcmVudCBvZiB0aGlz
IGVsZW1lbnQgKi8KKyAgY29uc3QgY2hhciAqcmF3TmFtZTsgICAgICAgICAgLyogdGFnTmFtZSBp
biB0aGUgb3JpZ2luYWwgZW5jb2RpbmcgKi8KKyAgaW50IHJhd05hbWVMZW5ndGg7CisgIFRBR19O
QU1FIG5hbWU7ICAgICAgICAgICAgICAgIC8qIHRhZ05hbWUgaW4gdGhlIEFQSSBlbmNvZGluZyAq
LworICBjaGFyICpidWY7ICAgICAgICAgICAgICAgICAgICAvKiBidWZmZXIgZm9yIG5hbWUgY29t
cG9uZW50cyAqLworICBjaGFyICpidWZFbmQ7ICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgdGhl
IGJ1ZmZlciAqLworICBCSU5ESU5HICpiaW5kaW5nczsKK30gVEFHOworCit0eXBlZGVmIHN0cnVj
dCB7CisgIGNvbnN0IFhNTF9DaGFyICpuYW1lOworICBjb25zdCBYTUxfQ2hhciAqdGV4dFB0cjsK
KyAgaW50IHRleHRMZW47ICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIGluIFhNTF9DaGFycyAq
LworICBpbnQgcHJvY2Vzc2VkOyAgICAgICAgICAgICAgICAvKiAjIG9mIHByb2Nlc3NlZCBieXRl
cyAtIHdoZW4gc3VzcGVuZGVkICovCisgIGNvbnN0IFhNTF9DaGFyICpzeXN0ZW1JZDsKKyAgY29u
c3QgWE1MX0NoYXIgKmJhc2U7CisgIGNvbnN0IFhNTF9DaGFyICpwdWJsaWNJZDsKKyAgY29uc3Qg
WE1MX0NoYXIgKm5vdGF0aW9uOworICBYTUxfQm9vbCBvcGVuOworICBYTUxfQm9vbCBpc19wYXJh
bTsKKyAgWE1MX0Jvb2wgaXNfaW50ZXJuYWw7IC8qIHRydWUgaWYgZGVjbGFyZWQgaW4gaW50ZXJu
YWwgc3Vic2V0IG91dHNpZGUgUEUgKi8KK30gRU5USVRZOworCit0eXBlZGVmIHN0cnVjdCB7Cisg
IGVudW0gWE1MX0NvbnRlbnRfVHlwZSAgICAgICAgIHR5cGU7CisgIGVudW0gWE1MX0NvbnRlbnRf
UXVhbnQgICAgICAgIHF1YW50OworICBjb25zdCBYTUxfQ2hhciAqICAgICAgICAgICAgICBuYW1l
OworICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGNoaWxkOworICBpbnQgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0Y2hpbGQ7CisgIGludCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkY250OworICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0
c2liOworfSBDT05URU5UX1NDQUZGT0xEOworCisjZGVmaW5lIElOSVRfU0NBRkZPTERfRUxFTUVO
VFMgMzIKKwordHlwZWRlZiBzdHJ1Y3QgYmxvY2sgeworICBzdHJ1Y3QgYmxvY2sgKm5leHQ7Cisg
IGludCBzaXplOworICBYTUxfQ2hhciBzWzFdOworfSBCTE9DSzsKKwordHlwZWRlZiBzdHJ1Y3Qg
eworICBCTE9DSyAqYmxvY2tzOworICBCTE9DSyAqZnJlZUJsb2NrczsKKyAgY29uc3QgWE1MX0No
YXIgKmVuZDsKKyAgWE1MX0NoYXIgKnB0cjsKKyAgWE1MX0NoYXIgKnN0YXJ0OworICBjb25zdCBY
TUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptZW07Cit9IFNUUklOR19QT09MOworCisvKiBUaGUg
WE1MX0NoYXIgYmVmb3JlIHRoZSBuYW1lIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAg
IGFuIGF0dHJpYnV0ZSBoYXMgYmVlbiBzcGVjaWZpZWQuICovCit0eXBlZGVmIHN0cnVjdCBhdHRy
aWJ1dGVfaWQgeworICBYTUxfQ2hhciAqbmFtZTsKKyAgUFJFRklYICpwcmVmaXg7CisgIFhNTF9C
b29sIG1heWJlVG9rZW5pemVkOworICBYTUxfQm9vbCB4bWxuczsKK30gQVRUUklCVVRFX0lEOwor
Cit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IEFUVFJJQlVURV9JRCAqaWQ7CisgIFhNTF9Cb29s
IGlzQ2RhdGE7CisgIGNvbnN0IFhNTF9DaGFyICp2YWx1ZTsKK30gREVGQVVMVF9BVFRSSUJVVEU7
CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgbG9uZyB2ZXJzaW9uOworICB1bnNpZ25l
ZCBsb25nIGhhc2g7CisgIGNvbnN0IFhNTF9DaGFyICp1cmlOYW1lOworfSBOU19BVFQ7CisKK3R5
cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgWE1MX0NoYXIgKm5hbWU7CisgIFBSRUZJWCAqcHJlZml4
OworICBjb25zdCBBVFRSSUJVVEVfSUQgKmlkQXR0OworICBpbnQgbkRlZmF1bHRBdHRzOworICBp
bnQgYWxsb2NEZWZhdWx0QXR0czsKKyAgREVGQVVMVF9BVFRSSUJVVEUgKmRlZmF1bHRBdHRzOwor
fSBFTEVNRU5UX1RZUEU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgSEFTSF9UQUJMRSBnZW5lcmFs
RW50aXRpZXM7CisgIEhBU0hfVEFCTEUgZWxlbWVudFR5cGVzOworICBIQVNIX1RBQkxFIGF0dHJp
YnV0ZUlkczsKKyAgSEFTSF9UQUJMRSBwcmVmaXhlczsKKyAgU1RSSU5HX1BPT0wgcG9vbDsKKyAg
U1RSSU5HX1BPT0wgZW50aXR5VmFsdWVQb29sOworICAvKiBmYWxzZSBvbmNlIGEgcGFyYW1ldGVy
IGVudGl0eSByZWZlcmVuY2UgaGFzIGJlZW4gc2tpcHBlZCAqLworICBYTUxfQm9vbCBrZWVwUHJv
Y2Vzc2luZzsKKyAgLyogdHJ1ZSBvbmNlIGFuIGludGVybmFsIG9yIGV4dGVybmFsIFBFIHJlZmVy
ZW5jZSBoYXMgYmVlbiBlbmNvdW50ZXJlZDsKKyAgICAgdGhpcyBpbmNsdWRlcyB0aGUgcmVmZXJl
bmNlIHRvIGFuIGV4dGVybmFsIHN1YnNldCAqLworICBYTUxfQm9vbCBoYXNQYXJhbUVudGl0eVJl
ZnM7CisgIFhNTF9Cb29sIHN0YW5kYWxvbmU7CisjaWZkZWYgWE1MX0RURAorICAvKiBpbmRpY2F0
ZXMgaWYgZXh0ZXJuYWwgUEUgaGFzIGJlZW4gcmVhZCAqLworICBYTUxfQm9vbCBwYXJhbUVudGl0
eVJlYWQ7CisgIEhBU0hfVEFCTEUgcGFyYW1FbnRpdGllczsKKyNlbmRpZiAvKiBYTUxfRFREICov
CisgIFBSRUZJWCBkZWZhdWx0UHJlZml4OworICAvKiA9PT0gc2NhZmZvbGRpbmcgZm9yIGJ1aWxk
aW5nIGNvbnRlbnQgbW9kZWwgPT09ICovCisgIFhNTF9Cb29sIGluX2VsZGVjbDsKKyAgQ09OVEVO
VF9TQ0FGRk9MRCAqc2NhZmZvbGQ7CisgIHVuc2lnbmVkIGNvbnRlbnRTdHJpbmdMZW47CisgIHVu
c2lnbmVkIHNjYWZmU2l6ZTsKKyAgdW5zaWduZWQgc2NhZmZDb3VudDsKKyAgaW50IHNjYWZmTGV2
ZWw7CisgIGludCAqc2NhZmZJbmRleDsKK30gRFREOworCit0eXBlZGVmIHN0cnVjdCBvcGVuX2lu
dGVybmFsX2VudGl0eSB7CisgIGNvbnN0IGNoYXIgKmludGVybmFsRXZlbnRQdHI7CisgIGNvbnN0
IGNoYXIgKmludGVybmFsRXZlbnRFbmRQdHI7CisgIHN0cnVjdCBvcGVuX2ludGVybmFsX2VudGl0
eSAqbmV4dDsKKyAgRU5USVRZICplbnRpdHk7CisgIGludCBzdGFydFRhZ0xldmVsOworICBYTUxf
Qm9vbCBiZXR3ZWVuRGVjbDsgLyogV0ZDOiBQRSBCZXR3ZWVuIERlY2xhcmF0aW9ucyAqLworfSBP
UEVOX0lOVEVSTkFMX0VOVElUWTsKKwordHlwZWRlZiBlbnVtIFhNTF9FcnJvciBQVFJDQUxMIFBy
b2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuZFB0cik7CisKK3N0YXRpYyBQcm9jZXNz
b3IgcHJvbG9nUHJvY2Vzc29yOworc3RhdGljIFByb2Nlc3NvciBwcm9sb2dJbml0UHJvY2Vzc29y
Oworc3RhdGljIFByb2Nlc3NvciBjb250ZW50UHJvY2Vzc29yOworc3RhdGljIFByb2Nlc3NvciBj
ZGF0YVNlY3Rpb25Qcm9jZXNzb3I7CisjaWZkZWYgWE1MX0RURAorc3RhdGljIFByb2Nlc3NvciBp
Z25vcmVTZWN0aW9uUHJvY2Vzc29yOworc3RhdGljIFByb2Nlc3NvciBleHRlcm5hbFBhckVudFBy
b2Nlc3NvcjsKK3N0YXRpYyBQcm9jZXNzb3IgZXh0ZXJuYWxQYXJFbnRJbml0UHJvY2Vzc29yOwor
c3RhdGljIFByb2Nlc3NvciBlbnRpdHlWYWx1ZVByb2Nlc3NvcjsKK3N0YXRpYyBQcm9jZXNzb3Ig
ZW50aXR5VmFsdWVJbml0UHJvY2Vzc29yOworI2VuZGlmIC8qIFhNTF9EVEQgKi8KK3N0YXRpYyBQ
cm9jZXNzb3IgZXBpbG9nUHJvY2Vzc29yOworc3RhdGljIFByb2Nlc3NvciBlcnJvclByb2Nlc3Nv
cjsKK3N0YXRpYyBQcm9jZXNzb3IgZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yOworc3RhdGlj
IFByb2Nlc3NvciBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IyOworc3RhdGljIFByb2Nlc3Nv
ciBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IzOworc3RhdGljIFByb2Nlc3NvciBleHRlcm5h
bEVudGl0eUNvbnRlbnRQcm9jZXNzb3I7CitzdGF0aWMgUHJvY2Vzc29yIGludGVybmFsRW50aXR5
UHJvY2Vzc29yOworCitzdGF0aWMgZW51bSBYTUxfRXJyb3IKK2hhbmRsZVVua25vd25FbmNvZGlu
ZyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFtZSk7CitzdGF0
aWMgZW51bSBYTUxfRXJyb3IKK3Byb2Nlc3NYbWxEZWNsKFhNTF9QYXJzZXIgcGFyc2VyLCBpbnQg
aXNHZW5lcmFsVGV4dEVudGl0eSwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMsIGNvbnN0
IGNoYXIgKm5leHQpOworc3RhdGljIGVudW0gWE1MX0Vycm9yCitpbml0aWFsaXplRW5jb2Rpbmco
WE1MX1BhcnNlciBwYXJzZXIpOworc3RhdGljIGVudW0gWE1MX0Vycm9yCitkb1Byb2xvZyhYTUxf
UGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcywKKyAgICAg
ICAgIGNvbnN0IGNoYXIgKmVuZCwgaW50IHRvaywgY29uc3QgY2hhciAqbmV4dCwgY29uc3QgY2hh
ciAqKm5leHRQdHIsCisgICAgICAgICBYTUxfQm9vbCBoYXZlTW9yZSk7CitzdGF0aWMgZW51bSBY
TUxfRXJyb3IKK3Byb2Nlc3NJbnRlcm5hbEVudGl0eShYTUxfUGFyc2VyIHBhcnNlciwgRU5USVRZ
ICplbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgWE1MX0Jvb2wgYmV0d2VlbkRlY2wpOwor
c3RhdGljIGVudW0gWE1MX0Vycm9yCitkb0NvbnRlbnQoWE1MX1BhcnNlciBwYXJzZXIsIGludCBz
dGFydFRhZ0xldmVsLCBjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAgIGNvbnN0IGNoYXIg
KnN0YXJ0LCBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKiplbmRQdHIsCisgICAgICAgICAg
WE1MX0Jvb2wgaGF2ZU1vcmUpOworc3RhdGljIGVudW0gWE1MX0Vycm9yCitkb0NkYXRhU2VjdGlv
bihYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAqKnN0YXJ0
UHRyLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFB0
ciwgWE1MX0Jvb2wgaGF2ZU1vcmUpOworI2lmZGVmIFhNTF9EVEQKK3N0YXRpYyBlbnVtIFhNTF9F
cnJvcgorZG9JZ25vcmVTZWN0aW9uKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAq
LCBjb25zdCBjaGFyICoqc3RhcnRQdHIsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LCBjb25zdCBjaGFyICoqbmV4dFB0ciwgWE1MX0Jvb2wgaGF2ZU1vcmUpOworI2VuZGlmIC8qIFhN
TF9EVEQgKi8KKworc3RhdGljIGVudW0gWE1MX0Vycm9yCitzdG9yZUF0dHMoWE1MX1BhcnNlciBw
YXJzZXIsIGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgVEFHX05B
TUUgKnRhZ05hbWVQdHIsIEJJTkRJTkcgKipiaW5kaW5nc1B0cik7CitzdGF0aWMgZW51bSBYTUxf
RXJyb3IKK2FkZEJpbmRpbmcoWE1MX1BhcnNlciBwYXJzZXIsIFBSRUZJWCAqcHJlZml4LCBjb25z
dCBBVFRSSUJVVEVfSUQgKmF0dElkLAorICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqdXJpLCBC
SU5ESU5HICoqYmluZGluZ3NQdHIpOworc3RhdGljIGludAorZGVmaW5lQXR0cmlidXRlKEVMRU1F
TlRfVFlQRSAqdHlwZSwgQVRUUklCVVRFX0lEICosIFhNTF9Cb29sIGlzQ2RhdGEsCisgICAgICAg
ICAgICAgICAgWE1MX0Jvb2wgaXNJZCwgY29uc3QgWE1MX0NoYXIgKmRmbHRWYWx1ZSwgWE1MX1Bh
cnNlciBwYXJzZXIpOworc3RhdGljIGVudW0gWE1MX0Vycm9yCitzdG9yZUF0dHJpYnV0ZVZhbHVl
KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqLCBYTUxfQm9vbCBpc0NkYXRhLAor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgU1RSSU5HX1BP
T0wgKik7CitzdGF0aWMgZW51bSBYTUxfRXJyb3IKK2FwcGVuZEF0dHJpYnV0ZVZhbHVlKFhNTF9Q
YXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqLCBYTUxfQm9vbCBpc0NkYXRhLAorICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIFNUUklOR19QT09MICop
Oworc3RhdGljIEFUVFJJQlVURV9JRCAqCitnZXRBdHRyaWJ1dGVJZChYTUxfUGFyc2VyIHBhcnNl
ciwgY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICplbmQpOworc3RhdGljIGludAorc2V0RWxlbWVudFR5cGVQcmVmaXgoWE1M
X1BhcnNlciBwYXJzZXIsIEVMRU1FTlRfVFlQRSAqKTsKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgor
c3RvcmVFbnRpdHlWYWx1ZShYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywg
Y29uc3QgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCk7Citz
dGF0aWMgaW50CityZXBvcnRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oWE1MX1BhcnNlciBwYXJzZXIs
IGNvbnN0IEVOQ09ESU5HICplbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCk7CitzdGF0aWMgaW50CityZXBvcnRDb21tZW50
KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpzdGFy
dCwKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kKTsKK3N0YXRpYyB2b2lkCityZXBvcnRE
ZWZhdWx0KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFy
ICpzdGFydCwKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kKTsKKworc3RhdGljIGNvbnN0
IFhNTF9DaGFyICogZ2V0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlcik7CitzdGF0aWMgWE1MX0Jv
b2wKK3NldENvbnRleHQoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICpjb250ZXh0
KTsKKworc3RhdGljIHZvaWQgRkFTVENBTEwgbm9ybWFsaXplUHVibGljSWQoWE1MX0NoYXIgKnMp
OworCitzdGF0aWMgRFREICogZHRkQ3JlYXRlKGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3Vp
dGUgKm1zKTsKKy8qIGRvIG5vdCBjYWxsIGlmIHBhcmVudFBhcnNlciAhPSBOVUxMICovCitzdGF0
aWMgdm9pZCBkdGRSZXNldChEVEQgKnAsIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUg
Km1zKTsKK3N0YXRpYyB2b2lkCitkdGREZXN0cm95KERURCAqcCwgWE1MX0Jvb2wgaXNEb2NFbnRp
dHksIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKTsKK3N0YXRpYyBpbnQKK2R0
ZENvcHkoWE1MX1BhcnNlciBvbGRQYXJzZXIsCisgICAgICAgIERURCAqbmV3RHRkLCBjb25zdCBE
VEQgKm9sZER0ZCwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpOworc3RhdGlj
IGludAorY29weUVudGl0eVRhYmxlKFhNTF9QYXJzZXIgb2xkUGFyc2VyLAorICAgICAgICAgICAg
ICAgIEhBU0hfVEFCTEUgKiwgU1RSSU5HX1BPT0wgKiwgY29uc3QgSEFTSF9UQUJMRSAqKTsKK3N0
YXRpYyBOQU1FRCAqCitsb29rdXAoWE1MX1BhcnNlciBwYXJzZXIsIEhBU0hfVEFCTEUgKnRhYmxl
LCBLRVkgbmFtZSwgc2l6ZV90IGNyZWF0ZVNpemUpOworc3RhdGljIHZvaWQgRkFTVENBTEwKK2hh
c2hUYWJsZUluaXQoSEFTSF9UQUJMRSAqLCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRl
ICptcyk7CitzdGF0aWMgdm9pZCBGQVNUQ0FMTCBoYXNoVGFibGVDbGVhcihIQVNIX1RBQkxFICop
Oworc3RhdGljIHZvaWQgRkFTVENBTEwgaGFzaFRhYmxlRGVzdHJveShIQVNIX1RBQkxFICopOwor
c3RhdGljIHZvaWQgRkFTVENBTEwKK2hhc2hUYWJsZUl0ZXJJbml0KEhBU0hfVEFCTEVfSVRFUiAq
LCBjb25zdCBIQVNIX1RBQkxFICopOworc3RhdGljIE5BTUVEICogRkFTVENBTEwgaGFzaFRhYmxl
SXRlck5leHQoSEFTSF9UQUJMRV9JVEVSICopOworCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAorcG9v
bEluaXQoU1RSSU5HX1BPT0wgKiwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMp
Oworc3RhdGljIHZvaWQgRkFTVENBTEwgcG9vbENsZWFyKFNUUklOR19QT09MICopOworc3RhdGlj
IHZvaWQgRkFTVENBTEwgcG9vbERlc3Ryb3koU1RSSU5HX1BPT0wgKik7CitzdGF0aWMgWE1MX0No
YXIgKgorcG9vbEFwcGVuZChTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgRU5DT0RJTkcgKmVuYywK
KyAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQpOworc3RhdGljIFhN
TF9DaGFyICoKK3Bvb2xTdG9yZVN0cmluZyhTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgRU5DT0RJ
TkcgKmVuYywKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVu
ZCk7CitzdGF0aWMgWE1MX0Jvb2wgRkFTVENBTEwgcG9vbEdyb3coU1RSSU5HX1BPT0wgKnBvb2wp
Oworc3RhdGljIGNvbnN0IFhNTF9DaGFyICogRkFTVENBTEwKK3Bvb2xDb3B5U3RyaW5nKFNUUklO
R19QT09MICpwb29sLCBjb25zdCBYTUxfQ2hhciAqcyk7CitzdGF0aWMgY29uc3QgWE1MX0NoYXIg
KgorcG9vbENvcHlTdHJpbmdOKFNUUklOR19QT09MICpwb29sLCBjb25zdCBYTUxfQ2hhciAqcywg
aW50IG4pOworc3RhdGljIGNvbnN0IFhNTF9DaGFyICogRkFTVENBTEwKK3Bvb2xBcHBlbmRTdHJp
bmcoU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9DaGFyICpzKTsKKworc3RhdGljIGludCBG
QVNUQ0FMTCBuZXh0U2NhZmZvbGRQYXJ0KFhNTF9QYXJzZXIgcGFyc2VyKTsKK3N0YXRpYyBYTUxf
Q29udGVudCAqIGJ1aWxkX21vZGVsKFhNTF9QYXJzZXIgcGFyc2VyKTsKK3N0YXRpYyBFTEVNRU5U
X1RZUEUgKgorZ2V0RWxlbWVudFR5cGUoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5H
ICplbmMsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCk7
CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdlbmVyYXRlX2hhc2hfc2VjcmV0X3NhbHQodm9pZCk7
CitzdGF0aWMgWE1MX0Jvb2wgc3RhcnRQYXJzaW5nKFhNTF9QYXJzZXIgcGFyc2VyKTsKKworc3Rh
dGljIFhNTF9QYXJzZXIKK3BhcnNlckNyZWF0ZShjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1l
LAorICAgICAgICAgICAgIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1lbXN1aXRl
LAorICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lU2VwLAorICAgICAgICAgICAgIERU
RCAqZHRkKTsKKworc3RhdGljIHZvaWQKK3BhcnNlckluaXQoWE1MX1BhcnNlciBwYXJzZXIsIGNv
bnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUpOworCisjZGVmaW5lIHBvb2xTdGFydChwb29sKSAo
KHBvb2wpLT5zdGFydCkKKyNkZWZpbmUgcG9vbEVuZChwb29sKSAoKHBvb2wpLT5wdHIpCisjZGVm
aW5lIHBvb2xMZW5ndGgocG9vbCkgKChwb29sKS0+cHRyIC0gKHBvb2wpLT5zdGFydCkKKyNkZWZp
bmUgcG9vbENob3AocG9vbCkgKCh2b2lkKS0tKHBvb2wtPnB0cikpCisjZGVmaW5lIHBvb2xMYXN0
Q2hhcihwb29sKSAoKChwb29sKS0+cHRyKVstMV0pCisjZGVmaW5lIHBvb2xEaXNjYXJkKHBvb2wp
ICgocG9vbCktPnB0ciA9IChwb29sKS0+c3RhcnQpCisjZGVmaW5lIHBvb2xGaW5pc2gocG9vbCkg
KChwb29sKS0+c3RhcnQgPSAocG9vbCktPnB0cikKKyNkZWZpbmUgcG9vbEFwcGVuZENoYXIocG9v
bCwgYykgXAorICAoKChwb29sKS0+cHRyID09IChwb29sKS0+ZW5kICYmICFwb29sR3Jvdyhwb29s
KSkgXAorICAgPyAwIFwKKyAgIDogKCgqKChwb29sKS0+cHRyKSsrID0gYyksIDEpKQorCitzdHJ1
Y3QgWE1MX1BhcnNlclN0cnVjdCB7CisgIC8qIFRoZSBmaXJzdCBtZW1iZXIgbXVzdCBiZSB1c2Vy
RGF0YSBzbyB0aGF0IHRoZSBYTUxfR2V0VXNlckRhdGEKKyAgICAgbWFjcm8gd29ya3MuICovCisg
IHZvaWQgKm1fdXNlckRhdGE7CisgIHZvaWQgKm1faGFuZGxlckFyZzsKKyAgY2hhciAqbV9idWZm
ZXI7CisgIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgbV9tZW07CisgIC8qIGZpcnN0
IGNoYXJhY3RlciB0byBiZSBwYXJzZWQgKi8KKyAgY29uc3QgY2hhciAqbV9idWZmZXJQdHI7Cisg
IC8qIHBhc3QgbGFzdCBjaGFyYWN0ZXIgdG8gYmUgcGFyc2VkICovCisgIGNoYXIgKm1fYnVmZmVy
RW5kOworICAvKiBhbGxvY2F0ZWQgZW5kIG9mIGJ1ZmZlciAqLworICBjb25zdCBjaGFyICptX2J1
ZmZlckxpbTsKKyAgWE1MX0luZGV4IG1fcGFyc2VFbmRCeXRlSW5kZXg7CisgIGNvbnN0IGNoYXIg
Km1fcGFyc2VFbmRQdHI7CisgIFhNTF9DaGFyICptX2RhdGFCdWY7CisgIFhNTF9DaGFyICptX2Rh
dGFCdWZFbmQ7CisgIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyIG1fc3RhcnRFbGVtZW50SGFuZGxl
cjsKKyAgWE1MX0VuZEVsZW1lbnRIYW5kbGVyIG1fZW5kRWxlbWVudEhhbmRsZXI7CisgIFhNTF9D
aGFyYWN0ZXJEYXRhSGFuZGxlciBtX2NoYXJhY3RlckRhdGFIYW5kbGVyOworICBYTUxfUHJvY2Vz
c2luZ0luc3RydWN0aW9uSGFuZGxlciBtX3Byb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXI7Cisg
IFhNTF9Db21tZW50SGFuZGxlciBtX2NvbW1lbnRIYW5kbGVyOworICBYTUxfU3RhcnRDZGF0YVNl
Y3Rpb25IYW5kbGVyIG1fc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyOworICBYTUxfRW5kQ2RhdGFT
ZWN0aW9uSGFuZGxlciBtX2VuZENkYXRhU2VjdGlvbkhhbmRsZXI7CisgIFhNTF9EZWZhdWx0SGFu
ZGxlciBtX2RlZmF1bHRIYW5kbGVyOworICBYTUxfU3RhcnREb2N0eXBlRGVjbEhhbmRsZXIgbV9z
dGFydERvY3R5cGVEZWNsSGFuZGxlcjsKKyAgWE1MX0VuZERvY3R5cGVEZWNsSGFuZGxlciBtX2Vu
ZERvY3R5cGVEZWNsSGFuZGxlcjsKKyAgWE1MX1VucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgbV91
bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyOworICBYTUxfTm90YXRpb25EZWNsSGFuZGxlciBtX25v
dGF0aW9uRGVjbEhhbmRsZXI7CisgIFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyIG1fc3Rh
cnROYW1lc3BhY2VEZWNsSGFuZGxlcjsKKyAgWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyIG1f
ZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXI7CisgIFhNTF9Ob3RTdGFuZGFsb25lSGFuZGxlciBtX25v
dFN0YW5kYWxvbmVIYW5kbGVyOworICBYTUxfRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyIG1fZXh0
ZXJuYWxFbnRpdHlSZWZIYW5kbGVyOworICBYTUxfUGFyc2VyIG1fZXh0ZXJuYWxFbnRpdHlSZWZI
YW5kbGVyQXJnOworICBYTUxfU2tpcHBlZEVudGl0eUhhbmRsZXIgbV9za2lwcGVkRW50aXR5SGFu
ZGxlcjsKKyAgWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIgbV91bmtub3duRW5jb2RpbmdIYW5k
bGVyOworICBYTUxfRWxlbWVudERlY2xIYW5kbGVyIG1fZWxlbWVudERlY2xIYW5kbGVyOworICBY
TUxfQXR0bGlzdERlY2xIYW5kbGVyIG1fYXR0bGlzdERlY2xIYW5kbGVyOworICBYTUxfRW50aXR5
RGVjbEhhbmRsZXIgbV9lbnRpdHlEZWNsSGFuZGxlcjsKKyAgWE1MX1htbERlY2xIYW5kbGVyIG1f
eG1sRGVjbEhhbmRsZXI7CisgIGNvbnN0IEVOQ09ESU5HICptX2VuY29kaW5nOworICBJTklUX0VO
Q09ESU5HIG1faW5pdEVuY29kaW5nOworICBjb25zdCBFTkNPRElORyAqbV9pbnRlcm5hbEVuY29k
aW5nOworICBjb25zdCBYTUxfQ2hhciAqbV9wcm90b2NvbEVuY29kaW5nTmFtZTsKKyAgWE1MX0Jv
b2wgbV9uczsKKyAgWE1MX0Jvb2wgbV9uc190cmlwbGV0czsKKyAgdm9pZCAqbV91bmtub3duRW5j
b2RpbmdNZW07CisgIHZvaWQgKm1fdW5rbm93bkVuY29kaW5nRGF0YTsKKyAgdm9pZCAqbV91bmtu
b3duRW5jb2RpbmdIYW5kbGVyRGF0YTsKKyAgdm9pZCAoWE1MQ0FMTCAqbV91bmtub3duRW5jb2Rp
bmdSZWxlYXNlKSh2b2lkICopOworICBQUk9MT0dfU1RBVEUgbV9wcm9sb2dTdGF0ZTsKKyAgUHJv
Y2Vzc29yICptX3Byb2Nlc3NvcjsKKyAgZW51bSBYTUxfRXJyb3IgbV9lcnJvckNvZGU7CisgIGNv
bnN0IGNoYXIgKm1fZXZlbnRQdHI7CisgIGNvbnN0IGNoYXIgKm1fZXZlbnRFbmRQdHI7CisgIGNv
bnN0IGNoYXIgKm1fcG9zaXRpb25QdHI7CisgIE9QRU5fSU5URVJOQUxfRU5USVRZICptX29wZW5J
bnRlcm5hbEVudGl0aWVzOworICBPUEVOX0lOVEVSTkFMX0VOVElUWSAqbV9mcmVlSW50ZXJuYWxF
bnRpdGllczsKKyAgWE1MX0Jvb2wgbV9kZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllczsKKyAg
aW50IG1fdGFnTGV2ZWw7CisgIEVOVElUWSAqbV9kZWNsRW50aXR5OworICBjb25zdCBYTUxfQ2hh
ciAqbV9kb2N0eXBlTmFtZTsKKyAgY29uc3QgWE1MX0NoYXIgKm1fZG9jdHlwZVN5c2lkOworICBj
b25zdCBYTUxfQ2hhciAqbV9kb2N0eXBlUHViaWQ7CisgIGNvbnN0IFhNTF9DaGFyICptX2RlY2xB
dHRyaWJ1dGVUeXBlOworICBjb25zdCBYTUxfQ2hhciAqbV9kZWNsTm90YXRpb25OYW1lOworICBj
b25zdCBYTUxfQ2hhciAqbV9kZWNsTm90YXRpb25QdWJsaWNJZDsKKyAgRUxFTUVOVF9UWVBFICpt
X2RlY2xFbGVtZW50VHlwZTsKKyAgQVRUUklCVVRFX0lEICptX2RlY2xBdHRyaWJ1dGVJZDsKKyAg
WE1MX0Jvb2wgbV9kZWNsQXR0cmlidXRlSXNDZGF0YTsKKyAgWE1MX0Jvb2wgbV9kZWNsQXR0cmli
dXRlSXNJZDsKKyAgRFREICptX2R0ZDsKKyAgY29uc3QgWE1MX0NoYXIgKm1fY3VyQmFzZTsKKyAg
VEFHICptX3RhZ1N0YWNrOworICBUQUcgKm1fZnJlZVRhZ0xpc3Q7CisgIEJJTkRJTkcgKm1faW5o
ZXJpdGVkQmluZGluZ3M7CisgIEJJTkRJTkcgKm1fZnJlZUJpbmRpbmdMaXN0OworICBpbnQgbV9h
dHRzU2l6ZTsKKyAgaW50IG1fblNwZWNpZmllZEF0dHM7CisgIGludCBtX2lkQXR0SW5kZXg7Cisg
IEFUVFJJQlVURSAqbV9hdHRzOworICBOU19BVFQgKm1fbnNBdHRzOworICB1bnNpZ25lZCBsb25n
IG1fbnNBdHRzVmVyc2lvbjsKKyAgdW5zaWduZWQgY2hhciBtX25zQXR0c1Bvd2VyOworI2lmZGVm
IFhNTF9BVFRSX0lORk8KKyAgWE1MX0F0dHJJbmZvICptX2F0dEluZm87CisjZW5kaWYKKyAgUE9T
SVRJT04gbV9wb3NpdGlvbjsKKyAgU1RSSU5HX1BPT0wgbV90ZW1wUG9vbDsKKyAgU1RSSU5HX1BP
T0wgbV90ZW1wMlBvb2w7CisgIGNoYXIgKm1fZ3JvdXBDb25uZWN0b3I7CisgIHVuc2lnbmVkIGlu
dCBtX2dyb3VwU2l6ZTsKKyAgWE1MX0NoYXIgbV9uYW1lc3BhY2VTZXBhcmF0b3I7CisgIFhNTF9Q
YXJzZXIgbV9wYXJlbnRQYXJzZXI7CisgIFhNTF9QYXJzaW5nU3RhdHVzIG1fcGFyc2luZ1N0YXR1
czsKKyNpZmRlZiBYTUxfRFRECisgIFhNTF9Cb29sIG1faXNQYXJhbUVudGl0eTsKKyAgWE1MX0Jv
b2wgbV91c2VGb3JlaWduRFREOworICBlbnVtIFhNTF9QYXJhbUVudGl0eVBhcnNpbmcgbV9wYXJh
bUVudGl0eVBhcnNpbmc7CisjZW5kaWYKKyAgdW5zaWduZWQgbG9uZyBtX2hhc2hfc2VjcmV0X3Nh
bHQ7Cit9OworCisjZGVmaW5lIE1BTExPQyhzKSAocGFyc2VyLT5tX21lbS5tYWxsb2NfZmNuKChz
KSkpCisjZGVmaW5lIFJFQUxMT0MocCxzKSAocGFyc2VyLT5tX21lbS5yZWFsbG9jX2ZjbigocCks
KHMpKSkKKyNkZWZpbmUgRlJFRShwKSAocGFyc2VyLT5tX21lbS5mcmVlX2ZjbigocCkpKQorCisj
ZGVmaW5lIHVzZXJEYXRhIChwYXJzZXItPm1fdXNlckRhdGEpCisjZGVmaW5lIGhhbmRsZXJBcmcg
KHBhcnNlci0+bV9oYW5kbGVyQXJnKQorI2RlZmluZSBzdGFydEVsZW1lbnRIYW5kbGVyIChwYXJz
ZXItPm1fc3RhcnRFbGVtZW50SGFuZGxlcikKKyNkZWZpbmUgZW5kRWxlbWVudEhhbmRsZXIgKHBh
cnNlci0+bV9lbmRFbGVtZW50SGFuZGxlcikKKyNkZWZpbmUgY2hhcmFjdGVyRGF0YUhhbmRsZXIg
KHBhcnNlci0+bV9jaGFyYWN0ZXJEYXRhSGFuZGxlcikKKyNkZWZpbmUgcHJvY2Vzc2luZ0luc3Ry
dWN0aW9uSGFuZGxlciBcCisgICAgICAgIChwYXJzZXItPm1fcHJvY2Vzc2luZ0luc3RydWN0aW9u
SGFuZGxlcikKKyNkZWZpbmUgY29tbWVudEhhbmRsZXIgKHBhcnNlci0+bV9jb21tZW50SGFuZGxl
cikKKyNkZWZpbmUgc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyIFwKKyAgICAgICAgKHBhcnNlci0+
bV9zdGFydENkYXRhU2VjdGlvbkhhbmRsZXIpCisjZGVmaW5lIGVuZENkYXRhU2VjdGlvbkhhbmRs
ZXIgKHBhcnNlci0+bV9lbmRDZGF0YVNlY3Rpb25IYW5kbGVyKQorI2RlZmluZSBkZWZhdWx0SGFu
ZGxlciAocGFyc2VyLT5tX2RlZmF1bHRIYW5kbGVyKQorI2RlZmluZSBzdGFydERvY3R5cGVEZWNs
SGFuZGxlciAocGFyc2VyLT5tX3N0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKQorI2RlZmluZSBlbmRE
b2N0eXBlRGVjbEhhbmRsZXIgKHBhcnNlci0+bV9lbmREb2N0eXBlRGVjbEhhbmRsZXIpCisjZGVm
aW5lIHVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgXAorICAgICAgICAocGFyc2VyLT5tX3VucGFy
c2VkRW50aXR5RGVjbEhhbmRsZXIpCisjZGVmaW5lIG5vdGF0aW9uRGVjbEhhbmRsZXIgKHBhcnNl
ci0+bV9ub3RhdGlvbkRlY2xIYW5kbGVyKQorI2RlZmluZSBzdGFydE5hbWVzcGFjZURlY2xIYW5k
bGVyIFwKKyAgICAgICAgKHBhcnNlci0+bV9zdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKQorI2Rl
ZmluZSBlbmROYW1lc3BhY2VEZWNsSGFuZGxlciAocGFyc2VyLT5tX2VuZE5hbWVzcGFjZURlY2xI
YW5kbGVyKQorI2RlZmluZSBub3RTdGFuZGFsb25lSGFuZGxlciAocGFyc2VyLT5tX25vdFN0YW5k
YWxvbmVIYW5kbGVyKQorI2RlZmluZSBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgXAorICAgICAg
ICAocGFyc2VyLT5tX2V4dGVybmFsRW50aXR5UmVmSGFuZGxlcikKKyNkZWZpbmUgZXh0ZXJuYWxF
bnRpdHlSZWZIYW5kbGVyQXJnIFwKKyAgICAgICAgKHBhcnNlci0+bV9leHRlcm5hbEVudGl0eVJl
ZkhhbmRsZXJBcmcpCisjZGVmaW5lIGludGVybmFsRW50aXR5UmVmSGFuZGxlciBcCisgICAgICAg
IChwYXJzZXItPm1faW50ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKQorI2RlZmluZSBza2lwcGVkRW50
aXR5SGFuZGxlciAocGFyc2VyLT5tX3NraXBwZWRFbnRpdHlIYW5kbGVyKQorI2RlZmluZSB1bmtu
b3duRW5jb2RpbmdIYW5kbGVyIChwYXJzZXItPm1fdW5rbm93bkVuY29kaW5nSGFuZGxlcikKKyNk
ZWZpbmUgZWxlbWVudERlY2xIYW5kbGVyIChwYXJzZXItPm1fZWxlbWVudERlY2xIYW5kbGVyKQor
I2RlZmluZSBhdHRsaXN0RGVjbEhhbmRsZXIgKHBhcnNlci0+bV9hdHRsaXN0RGVjbEhhbmRsZXIp
CisjZGVmaW5lIGVudGl0eURlY2xIYW5kbGVyIChwYXJzZXItPm1fZW50aXR5RGVjbEhhbmRsZXIp
CisjZGVmaW5lIHhtbERlY2xIYW5kbGVyIChwYXJzZXItPm1feG1sRGVjbEhhbmRsZXIpCisjZGVm
aW5lIGVuY29kaW5nIChwYXJzZXItPm1fZW5jb2RpbmcpCisjZGVmaW5lIGluaXRFbmNvZGluZyAo
cGFyc2VyLT5tX2luaXRFbmNvZGluZykKKyNkZWZpbmUgaW50ZXJuYWxFbmNvZGluZyAocGFyc2Vy
LT5tX2ludGVybmFsRW5jb2RpbmcpCisjZGVmaW5lIHVua25vd25FbmNvZGluZ01lbSAocGFyc2Vy
LT5tX3Vua25vd25FbmNvZGluZ01lbSkKKyNkZWZpbmUgdW5rbm93bkVuY29kaW5nRGF0YSAocGFy
c2VyLT5tX3Vua25vd25FbmNvZGluZ0RhdGEpCisjZGVmaW5lIHVua25vd25FbmNvZGluZ0hhbmRs
ZXJEYXRhIFwKKyAgKHBhcnNlci0+bV91bmtub3duRW5jb2RpbmdIYW5kbGVyRGF0YSkKKyNkZWZp
bmUgdW5rbm93bkVuY29kaW5nUmVsZWFzZSAocGFyc2VyLT5tX3Vua25vd25FbmNvZGluZ1JlbGVh
c2UpCisjZGVmaW5lIHByb3RvY29sRW5jb2RpbmdOYW1lIChwYXJzZXItPm1fcHJvdG9jb2xFbmNv
ZGluZ05hbWUpCisjZGVmaW5lIG5zIChwYXJzZXItPm1fbnMpCisjZGVmaW5lIG5zX3RyaXBsZXRz
IChwYXJzZXItPm1fbnNfdHJpcGxldHMpCisjZGVmaW5lIHByb2xvZ1N0YXRlIChwYXJzZXItPm1f
cHJvbG9nU3RhdGUpCisjZGVmaW5lIHByb2Nlc3NvciAocGFyc2VyLT5tX3Byb2Nlc3NvcikKKyNk
ZWZpbmUgZXJyb3JDb2RlIChwYXJzZXItPm1fZXJyb3JDb2RlKQorI2RlZmluZSBldmVudFB0ciAo
cGFyc2VyLT5tX2V2ZW50UHRyKQorI2RlZmluZSBldmVudEVuZFB0ciAocGFyc2VyLT5tX2V2ZW50
RW5kUHRyKQorI2RlZmluZSBwb3NpdGlvblB0ciAocGFyc2VyLT5tX3Bvc2l0aW9uUHRyKQorI2Rl
ZmluZSBwb3NpdGlvbiAocGFyc2VyLT5tX3Bvc2l0aW9uKQorI2RlZmluZSBvcGVuSW50ZXJuYWxF
bnRpdGllcyAocGFyc2VyLT5tX29wZW5JbnRlcm5hbEVudGl0aWVzKQorI2RlZmluZSBmcmVlSW50
ZXJuYWxFbnRpdGllcyAocGFyc2VyLT5tX2ZyZWVJbnRlcm5hbEVudGl0aWVzKQorI2RlZmluZSBk
ZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllcyBcCisgICAgICAgIChwYXJzZXItPm1fZGVmYXVs
dEV4cGFuZEludGVybmFsRW50aXRpZXMpCisjZGVmaW5lIHRhZ0xldmVsIChwYXJzZXItPm1fdGFn
TGV2ZWwpCisjZGVmaW5lIGJ1ZmZlciAocGFyc2VyLT5tX2J1ZmZlcikKKyNkZWZpbmUgYnVmZmVy
UHRyIChwYXJzZXItPm1fYnVmZmVyUHRyKQorI2RlZmluZSBidWZmZXJFbmQgKHBhcnNlci0+bV9i
dWZmZXJFbmQpCisjZGVmaW5lIHBhcnNlRW5kQnl0ZUluZGV4IChwYXJzZXItPm1fcGFyc2VFbmRC
eXRlSW5kZXgpCisjZGVmaW5lIHBhcnNlRW5kUHRyIChwYXJzZXItPm1fcGFyc2VFbmRQdHIpCisj
ZGVmaW5lIGJ1ZmZlckxpbSAocGFyc2VyLT5tX2J1ZmZlckxpbSkKKyNkZWZpbmUgZGF0YUJ1ZiAo
cGFyc2VyLT5tX2RhdGFCdWYpCisjZGVmaW5lIGRhdGFCdWZFbmQgKHBhcnNlci0+bV9kYXRhQnVm
RW5kKQorI2RlZmluZSBfZHRkIChwYXJzZXItPm1fZHRkKQorI2RlZmluZSBjdXJCYXNlIChwYXJz
ZXItPm1fY3VyQmFzZSkKKyNkZWZpbmUgZGVjbEVudGl0eSAocGFyc2VyLT5tX2RlY2xFbnRpdHkp
CisjZGVmaW5lIGRvY3R5cGVOYW1lIChwYXJzZXItPm1fZG9jdHlwZU5hbWUpCisjZGVmaW5lIGRv
Y3R5cGVTeXNpZCAocGFyc2VyLT5tX2RvY3R5cGVTeXNpZCkKKyNkZWZpbmUgZG9jdHlwZVB1Ymlk
IChwYXJzZXItPm1fZG9jdHlwZVB1YmlkKQorI2RlZmluZSBkZWNsQXR0cmlidXRlVHlwZSAocGFy
c2VyLT5tX2RlY2xBdHRyaWJ1dGVUeXBlKQorI2RlZmluZSBkZWNsTm90YXRpb25OYW1lIChwYXJz
ZXItPm1fZGVjbE5vdGF0aW9uTmFtZSkKKyNkZWZpbmUgZGVjbE5vdGF0aW9uUHVibGljSWQgKHBh
cnNlci0+bV9kZWNsTm90YXRpb25QdWJsaWNJZCkKKyNkZWZpbmUgZGVjbEVsZW1lbnRUeXBlIChw
YXJzZXItPm1fZGVjbEVsZW1lbnRUeXBlKQorI2RlZmluZSBkZWNsQXR0cmlidXRlSWQgKHBhcnNl
ci0+bV9kZWNsQXR0cmlidXRlSWQpCisjZGVmaW5lIGRlY2xBdHRyaWJ1dGVJc0NkYXRhIChwYXJz
ZXItPm1fZGVjbEF0dHJpYnV0ZUlzQ2RhdGEpCisjZGVmaW5lIGRlY2xBdHRyaWJ1dGVJc0lkIChw
YXJzZXItPm1fZGVjbEF0dHJpYnV0ZUlzSWQpCisjZGVmaW5lIGZyZWVUYWdMaXN0IChwYXJzZXIt
Pm1fZnJlZVRhZ0xpc3QpCisjZGVmaW5lIGZyZWVCaW5kaW5nTGlzdCAocGFyc2VyLT5tX2ZyZWVC
aW5kaW5nTGlzdCkKKyNkZWZpbmUgaW5oZXJpdGVkQmluZGluZ3MgKHBhcnNlci0+bV9pbmhlcml0
ZWRCaW5kaW5ncykKKyNkZWZpbmUgdGFnU3RhY2sgKHBhcnNlci0+bV90YWdTdGFjaykKKyNkZWZp
bmUgYXR0cyAocGFyc2VyLT5tX2F0dHMpCisjZGVmaW5lIGF0dHNTaXplIChwYXJzZXItPm1fYXR0
c1NpemUpCisjZGVmaW5lIG5TcGVjaWZpZWRBdHRzIChwYXJzZXItPm1fblNwZWNpZmllZEF0dHMp
CisjZGVmaW5lIGlkQXR0SW5kZXggKHBhcnNlci0+bV9pZEF0dEluZGV4KQorI2RlZmluZSBuc0F0
dHMgKHBhcnNlci0+bV9uc0F0dHMpCisjZGVmaW5lIG5zQXR0c1ZlcnNpb24gKHBhcnNlci0+bV9u
c0F0dHNWZXJzaW9uKQorI2RlZmluZSBuc0F0dHNQb3dlciAocGFyc2VyLT5tX25zQXR0c1Bvd2Vy
KQorI2RlZmluZSBhdHRJbmZvIChwYXJzZXItPm1fYXR0SW5mbykKKyNkZWZpbmUgdGVtcFBvb2wg
KHBhcnNlci0+bV90ZW1wUG9vbCkKKyNkZWZpbmUgdGVtcDJQb29sIChwYXJzZXItPm1fdGVtcDJQ
b29sKQorI2RlZmluZSBncm91cENvbm5lY3RvciAocGFyc2VyLT5tX2dyb3VwQ29ubmVjdG9yKQor
I2RlZmluZSBncm91cFNpemUgKHBhcnNlci0+bV9ncm91cFNpemUpCisjZGVmaW5lIG5hbWVzcGFj
ZVNlcGFyYXRvciAocGFyc2VyLT5tX25hbWVzcGFjZVNlcGFyYXRvcikKKyNkZWZpbmUgcGFyZW50
UGFyc2VyIChwYXJzZXItPm1fcGFyZW50UGFyc2VyKQorI2RlZmluZSBwc19wYXJzaW5nIChwYXJz
ZXItPm1fcGFyc2luZ1N0YXR1cy5wYXJzaW5nKQorI2RlZmluZSBwc19maW5hbEJ1ZmZlciAocGFy
c2VyLT5tX3BhcnNpbmdTdGF0dXMuZmluYWxCdWZmZXIpCisjaWZkZWYgWE1MX0RURAorI2RlZmlu
ZSBpc1BhcmFtRW50aXR5IChwYXJzZXItPm1faXNQYXJhbUVudGl0eSkKKyNkZWZpbmUgdXNlRm9y
ZWlnbkRURCAocGFyc2VyLT5tX3VzZUZvcmVpZ25EVEQpCisjZGVmaW5lIHBhcmFtRW50aXR5UGFy
c2luZyAocGFyc2VyLT5tX3BhcmFtRW50aXR5UGFyc2luZykKKyNlbmRpZiAvKiBYTUxfRFREICov
CisjZGVmaW5lIGhhc2hfc2VjcmV0X3NhbHQgKHBhcnNlci0+bV9oYXNoX3NlY3JldF9zYWx0KQor
CitYTUxfUGFyc2VyIFhNTENBTEwKK1hNTF9QYXJzZXJDcmVhdGUoY29uc3QgWE1MX0NoYXIgKmVu
Y29kaW5nTmFtZSkKK3sKKyAgcmV0dXJuIFhNTF9QYXJzZXJDcmVhdGVfTU0oZW5jb2RpbmdOYW1l
LCBOVUxMLCBOVUxMKTsKK30KKworWE1MX1BhcnNlciBYTUxDQUxMCitYTUxfUGFyc2VyQ3JlYXRl
TlMoY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFtZSwgWE1MX0NoYXIgbnNTZXApCit7CisgIFhN
TF9DaGFyIHRtcFsyXTsKKyAgKnRtcCA9IG5zU2VwOworICByZXR1cm4gWE1MX1BhcnNlckNyZWF0
ZV9NTShlbmNvZGluZ05hbWUsIE5VTEwsIHRtcCk7Cit9CisKK3N0YXRpYyBjb25zdCBYTUxfQ2hh
ciBpbXBsaWNpdENvbnRleHRbXSA9IHsKKyAgQVNDSUlfeCwgQVNDSUlfbSwgQVNDSUlfbCwgQVND
SUlfRVFVQUxTLCBBU0NJSV9oLCBBU0NJSV90LCBBU0NJSV90LCBBU0NJSV9wLAorICBBU0NJSV9D
T0xPTiwgQVNDSUlfU0xBU0gsIEFTQ0lJX1NMQVNILCBBU0NJSV93LCBBU0NJSV93LCBBU0NJSV93
LAorICBBU0NJSV9QRVJJT0QsIEFTQ0lJX3csIEFTQ0lJXzMsIEFTQ0lJX1BFUklPRCwgQVNDSUlf
bywgQVNDSUlfciwgQVNDSUlfZywKKyAgQVNDSUlfU0xBU0gsIEFTQ0lJX1gsIEFTQ0lJX00sIEFT
Q0lJX0wsIEFTQ0lJX1NMQVNILCBBU0NJSV8xLCBBU0NJSV85LAorICBBU0NJSV85LCBBU0NJSV84
LCBBU0NJSV9TTEFTSCwgQVNDSUlfbiwgQVNDSUlfYSwgQVNDSUlfbSwgQVNDSUlfZSwKKyAgQVND
SUlfcywgQVNDSUlfcCwgQVNDSUlfYSwgQVNDSUlfYywgQVNDSUlfZSwgJ1wwJworfTsKKworc3Rh
dGljIHVuc2lnbmVkIGxvbmcKK2dlbmVyYXRlX2hhc2hfc2VjcmV0X3NhbHQodm9pZCkKK3sKKyAg
dW5zaWduZWQgaW50IHNlZWQgPSB0aW1lKE5VTEwpICUgVUlOVF9NQVg7CisgIHNyYW5kKHNlZWQp
OworICByZXR1cm4gcmFuZCgpOworfQorCitzdGF0aWMgWE1MX0Jvb2wgIC8qIG9ubHkgdmFsaWQg
Zm9yIHJvb3QgcGFyc2VyICovCitzdGFydFBhcnNpbmcoWE1MX1BhcnNlciBwYXJzZXIpCit7Cisg
ICAgLyogaGFzaCBmdW5jdGlvbnMgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgc2V0Q29udGV4
dCgpIGlzIGNhbGxlZCAqLworICAgIGlmIChoYXNoX3NlY3JldF9zYWx0ID09IDApCisgICAgICBo
YXNoX3NlY3JldF9zYWx0ID0gZ2VuZXJhdGVfaGFzaF9zZWNyZXRfc2FsdCgpOworICAgIGlmIChu
cykgeworICAgICAgLyogaW1wbGljaXQgY29udGV4dCBvbmx5IHNldCBmb3Igcm9vdCBwYXJzZXIs
IHNpbmNlIGNoaWxkCisgICAgICAgICBwYXJzZXJzIChpLmUuIGV4dGVybmFsIGVudGl0eSBwYXJz
ZXJzKSB3aWxsIGluaGVyaXQgaXQKKyAgICAgICovCisgICAgICByZXR1cm4gc2V0Q29udGV4dChw
YXJzZXIsIGltcGxpY2l0Q29udGV4dCk7CisgICAgfQorICAgIHJldHVybiBYTUxfVFJVRTsKK30K
KworWE1MX1BhcnNlciBYTUxDQUxMCitYTUxfUGFyc2VyQ3JlYXRlX01NKGNvbnN0IFhNTF9DaGFy
ICplbmNvZGluZ05hbWUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9NZW1vcnlfSGFu
ZGxpbmdfU3VpdGUgKm1lbXN1aXRlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hh
ciAqbmFtZVNlcCkKK3sKKyAgcmV0dXJuIHBhcnNlckNyZWF0ZShlbmNvZGluZ05hbWUsIG1lbXN1
aXRlLCBuYW1lU2VwLCBOVUxMKTsKK30KKworc3RhdGljIFhNTF9QYXJzZXIKK3BhcnNlckNyZWF0
ZShjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lLAorICAgICAgICAgICAgIGNvbnN0IFhNTF9N
ZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1lbXN1aXRlLAorICAgICAgICAgICAgIGNvbnN0IFhNTF9D
aGFyICpuYW1lU2VwLAorICAgICAgICAgICAgIERURCAqZHRkKQoreworICBYTUxfUGFyc2VyIHBh
cnNlcjsKKworICBpZiAobWVtc3VpdGUpIHsKKyAgICBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRl
ICptdGVtcDsKKyAgICBwYXJzZXIgPSAoWE1MX1BhcnNlcikKKyAgICAgIG1lbXN1aXRlLT5tYWxs
b2NfZmNuKHNpemVvZihzdHJ1Y3QgWE1MX1BhcnNlclN0cnVjdCkpOworICAgIGlmIChwYXJzZXIg
IT0gTlVMTCkgeworICAgICAgbXRlbXAgPSAoWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqKSYo
cGFyc2VyLT5tX21lbSk7CisgICAgICBtdGVtcC0+bWFsbG9jX2ZjbiA9IG1lbXN1aXRlLT5tYWxs
b2NfZmNuOworICAgICAgbXRlbXAtPnJlYWxsb2NfZmNuID0gbWVtc3VpdGUtPnJlYWxsb2NfZmNu
OworICAgICAgbXRlbXAtPmZyZWVfZmNuID0gbWVtc3VpdGUtPmZyZWVfZmNuOworICAgIH0KKyAg
fQorICBlbHNlIHsKKyAgICBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptdGVtcDsKKyAgICBw
YXJzZXIgPSAoWE1MX1BhcnNlciltYWxsb2Moc2l6ZW9mKHN0cnVjdCBYTUxfUGFyc2VyU3RydWN0
KSk7CisgICAgaWYgKHBhcnNlciAhPSBOVUxMKSB7CisgICAgICBtdGVtcCA9IChYTUxfTWVtb3J5
X0hhbmRsaW5nX1N1aXRlICopJihwYXJzZXItPm1fbWVtKTsKKyAgICAgIG10ZW1wLT5tYWxsb2Nf
ZmNuID0gbWFsbG9jOworICAgICAgbXRlbXAtPnJlYWxsb2NfZmNuID0gcmVhbGxvYzsKKyAgICAg
IG10ZW1wLT5mcmVlX2ZjbiA9IGZyZWU7CisgICAgfQorICB9CisKKyAgaWYgKCFwYXJzZXIpCisg
ICAgcmV0dXJuIHBhcnNlcjsKKworICBidWZmZXIgPSBOVUxMOworICBidWZmZXJMaW0gPSBOVUxM
OworCisgIGF0dHNTaXplID0gSU5JVF9BVFRTX1NJWkU7CisgIGF0dHMgPSAoQVRUUklCVVRFICop
TUFMTE9DKGF0dHNTaXplICogc2l6ZW9mKEFUVFJJQlVURSkpOworICBpZiAoYXR0cyA9PSBOVUxM
KSB7CisgICAgRlJFRShwYXJzZXIpOworICAgIHJldHVybiBOVUxMOworICB9CisjaWZkZWYgWE1M
X0FUVFJfSU5GTworICBhdHRJbmZvID0gKFhNTF9BdHRySW5mbyopTUFMTE9DKGF0dHNTaXplICog
c2l6ZW9mKFhNTF9BdHRySW5mbykpOworICBpZiAoYXR0SW5mbyA9PSBOVUxMKSB7CisgICAgRlJF
RShhdHRzKTsKKyAgICBGUkVFKHBhcnNlcik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyNlbmRp
ZgorICBkYXRhQnVmID0gKFhNTF9DaGFyICopTUFMTE9DKElOSVRfREFUQV9CVUZfU0laRSAqIHNp
emVvZihYTUxfQ2hhcikpOworICBpZiAoZGF0YUJ1ZiA9PSBOVUxMKSB7CisgICAgRlJFRShhdHRz
KTsKKyNpZmRlZiBYTUxfQVRUUl9JTkZPCisgICAgRlJFRShhdHRJbmZvKTsKKyNlbmRpZgorICAg
IEZSRUUocGFyc2VyKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBkYXRhQnVmRW5kID0gZGF0
YUJ1ZiArIElOSVRfREFUQV9CVUZfU0laRTsKKworICBpZiAoZHRkKQorICAgIF9kdGQgPSBkdGQ7
CisgIGVsc2UgeworICAgIF9kdGQgPSBkdGRDcmVhdGUoJnBhcnNlci0+bV9tZW0pOworICAgIGlm
IChfZHRkID09IE5VTEwpIHsKKyAgICAgIEZSRUUoZGF0YUJ1Zik7CisgICAgICBGUkVFKGF0dHMp
OworI2lmZGVmIFhNTF9BVFRSX0lORk8KKyAgICAgIEZSRUUoYXR0SW5mbyk7CisjZW5kaWYKKyAg
ICAgIEZSRUUocGFyc2VyKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIGZy
ZWVCaW5kaW5nTGlzdCA9IE5VTEw7CisgIGZyZWVUYWdMaXN0ID0gTlVMTDsKKyAgZnJlZUludGVy
bmFsRW50aXRpZXMgPSBOVUxMOworCisgIGdyb3VwU2l6ZSA9IDA7CisgIGdyb3VwQ29ubmVjdG9y
ID0gTlVMTDsKKworICB1bmtub3duRW5jb2RpbmdIYW5kbGVyID0gTlVMTDsKKyAgdW5rbm93bkVu
Y29kaW5nSGFuZGxlckRhdGEgPSBOVUxMOworCisgIG5hbWVzcGFjZVNlcGFyYXRvciA9IEFTQ0lJ
X0VYQ0w7CisgIG5zID0gWE1MX0ZBTFNFOworICBuc190cmlwbGV0cyA9IFhNTF9GQUxTRTsKKwor
ICBuc0F0dHMgPSBOVUxMOworICBuc0F0dHNWZXJzaW9uID0gMDsKKyAgbnNBdHRzUG93ZXIgPSAw
OworCisgIHBvb2xJbml0KCZ0ZW1wUG9vbCwgJihwYXJzZXItPm1fbWVtKSk7CisgIHBvb2xJbml0
KCZ0ZW1wMlBvb2wsICYocGFyc2VyLT5tX21lbSkpOworICBwYXJzZXJJbml0KHBhcnNlciwgZW5j
b2RpbmdOYW1lKTsKKworICBpZiAoZW5jb2RpbmdOYW1lICYmICFwcm90b2NvbEVuY29kaW5nTmFt
ZSkgeworICAgIFhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0K
KworICBpZiAobmFtZVNlcCkgeworICAgIG5zID0gWE1MX1RSVUU7CisgICAgaW50ZXJuYWxFbmNv
ZGluZyA9IFhtbEdldEludGVybmFsRW5jb2RpbmdOUygpOworICAgIG5hbWVzcGFjZVNlcGFyYXRv
ciA9ICpuYW1lU2VwOworICB9CisgIGVsc2UgeworICAgIGludGVybmFsRW5jb2RpbmcgPSBYbWxH
ZXRJbnRlcm5hbEVuY29kaW5nKCk7CisgIH0KKworICByZXR1cm4gcGFyc2VyOworfQorCitzdGF0
aWMgdm9pZAorcGFyc2VySW5pdChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmVu
Y29kaW5nTmFtZSkKK3sKKyAgcHJvY2Vzc29yID0gcHJvbG9nSW5pdFByb2Nlc3NvcjsKKyAgWG1s
UHJvbG9nU3RhdGVJbml0KCZwcm9sb2dTdGF0ZSk7CisgIHByb3RvY29sRW5jb2RpbmdOYW1lID0g
KGVuY29kaW5nTmFtZSAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgID8gcG9vbENv
cHlTdHJpbmcoJnRlbXBQb29sLCBlbmNvZGluZ05hbWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogTlVMTCk7CisgIGN1ckJhc2UgPSBOVUxMOworICBYbWxJbml0RW5jb2RpbmcoJmluaXRF
bmNvZGluZywgJmVuY29kaW5nLCAwKTsKKyAgdXNlckRhdGEgPSBOVUxMOworICBoYW5kbGVyQXJn
ID0gTlVMTDsKKyAgc3RhcnRFbGVtZW50SGFuZGxlciA9IE5VTEw7CisgIGVuZEVsZW1lbnRIYW5k
bGVyID0gTlVMTDsKKyAgY2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBOVUxMOworICBwcm9jZXNzaW5n
SW5zdHJ1Y3Rpb25IYW5kbGVyID0gTlVMTDsKKyAgY29tbWVudEhhbmRsZXIgPSBOVUxMOworICBz
dGFydENkYXRhU2VjdGlvbkhhbmRsZXIgPSBOVUxMOworICBlbmRDZGF0YVNlY3Rpb25IYW5kbGVy
ID0gTlVMTDsKKyAgZGVmYXVsdEhhbmRsZXIgPSBOVUxMOworICBzdGFydERvY3R5cGVEZWNsSGFu
ZGxlciA9IE5VTEw7CisgIGVuZERvY3R5cGVEZWNsSGFuZGxlciA9IE5VTEw7CisgIHVucGFyc2Vk
RW50aXR5RGVjbEhhbmRsZXIgPSBOVUxMOworICBub3RhdGlvbkRlY2xIYW5kbGVyID0gTlVMTDsK
KyAgc3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IE5VTEw7CisgIGVuZE5hbWVzcGFjZURlY2xI
YW5kbGVyID0gTlVMTDsKKyAgbm90U3RhbmRhbG9uZUhhbmRsZXIgPSBOVUxMOworICBleHRlcm5h
bEVudGl0eVJlZkhhbmRsZXIgPSBOVUxMOworICBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcg
PSBwYXJzZXI7CisgIHNraXBwZWRFbnRpdHlIYW5kbGVyID0gTlVMTDsKKyAgZWxlbWVudERlY2xI
YW5kbGVyID0gTlVMTDsKKyAgYXR0bGlzdERlY2xIYW5kbGVyID0gTlVMTDsKKyAgZW50aXR5RGVj
bEhhbmRsZXIgPSBOVUxMOworICB4bWxEZWNsSGFuZGxlciA9IE5VTEw7CisgIGJ1ZmZlclB0ciA9
IGJ1ZmZlcjsKKyAgYnVmZmVyRW5kID0gYnVmZmVyOworICBwYXJzZUVuZEJ5dGVJbmRleCA9IDA7
CisgIHBhcnNlRW5kUHRyID0gTlVMTDsKKyAgZGVjbEVsZW1lbnRUeXBlID0gTlVMTDsKKyAgZGVj
bEF0dHJpYnV0ZUlkID0gTlVMTDsKKyAgZGVjbEVudGl0eSA9IE5VTEw7CisgIGRvY3R5cGVOYW1l
ID0gTlVMTDsKKyAgZG9jdHlwZVN5c2lkID0gTlVMTDsKKyAgZG9jdHlwZVB1YmlkID0gTlVMTDsK
KyAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBOVUxMOworICBkZWNsTm90YXRpb25OYW1lID0gTlVMTDsK
KyAgZGVjbE5vdGF0aW9uUHVibGljSWQgPSBOVUxMOworICBkZWNsQXR0cmlidXRlSXNDZGF0YSA9
IFhNTF9GQUxTRTsKKyAgZGVjbEF0dHJpYnV0ZUlzSWQgPSBYTUxfRkFMU0U7CisgIG1lbXNldCgm
cG9zaXRpb24sIDAsIHNpemVvZihQT1NJVElPTikpOworICBlcnJvckNvZGUgPSBYTUxfRVJST1Jf
Tk9ORTsKKyAgZXZlbnRQdHIgPSBOVUxMOworICBldmVudEVuZFB0ciA9IE5VTEw7CisgIHBvc2l0
aW9uUHRyID0gTlVMTDsKKyAgb3BlbkludGVybmFsRW50aXRpZXMgPSBOVUxMOworICBkZWZhdWx0
RXhwYW5kSW50ZXJuYWxFbnRpdGllcyA9IFhNTF9UUlVFOworICB0YWdMZXZlbCA9IDA7CisgIHRh
Z1N0YWNrID0gTlVMTDsKKyAgaW5oZXJpdGVkQmluZGluZ3MgPSBOVUxMOworICBuU3BlY2lmaWVk
QXR0cyA9IDA7CisgIHVua25vd25FbmNvZGluZ01lbSA9IE5VTEw7CisgIHVua25vd25FbmNvZGlu
Z1JlbGVhc2UgPSBOVUxMOworICB1bmtub3duRW5jb2RpbmdEYXRhID0gTlVMTDsKKyAgcGFyZW50
UGFyc2VyID0gTlVMTDsKKyAgcHNfcGFyc2luZyA9IFhNTF9JTklUSUFMSVpFRDsKKyNpZmRlZiBY
TUxfRFRECisgIGlzUGFyYW1FbnRpdHkgPSBYTUxfRkFMU0U7CisgIHVzZUZvcmVpZ25EVEQgPSBY
TUxfRkFMU0U7CisgIHBhcmFtRW50aXR5UGFyc2luZyA9IFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lO
R19ORVZFUjsKKyNlbmRpZgorICBoYXNoX3NlY3JldF9zYWx0ID0gMDsKK30KKworLyogbW92ZXMg
bGlzdCBvZiBiaW5kaW5ncyB0byBmcmVlQmluZGluZ0xpc3QgKi8KK3N0YXRpYyB2b2lkIEZBU1RD
QUxMCittb3ZlVG9GcmVlQmluZGluZ0xpc3QoWE1MX1BhcnNlciBwYXJzZXIsIEJJTkRJTkcgKmJp
bmRpbmdzKQoreworICB3aGlsZSAoYmluZGluZ3MpIHsKKyAgICBCSU5ESU5HICpiID0gYmluZGlu
Z3M7CisgICAgYmluZGluZ3MgPSBiaW5kaW5ncy0+bmV4dFRhZ0JpbmRpbmc7CisgICAgYi0+bmV4
dFRhZ0JpbmRpbmcgPSBmcmVlQmluZGluZ0xpc3Q7CisgICAgZnJlZUJpbmRpbmdMaXN0ID0gYjsK
KyAgfQorfQorCitYTUxfQm9vbCBYTUxDQUxMCitYTUxfUGFyc2VyUmVzZXQoWE1MX1BhcnNlciBw
YXJzZXIsIGNvbnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUpCit7CisgIFRBRyAqdFN0azsKKyAg
T1BFTl9JTlRFUk5BTF9FTlRJVFkgKm9wZW5FbnRpdHlMaXN0OworICBpZiAocGFyZW50UGFyc2Vy
KQorICAgIHJldHVybiBYTUxfRkFMU0U7CisgIC8qIG1vdmUgdGFnU3RhY2sgdG8gZnJlZVRhZ0xp
c3QgKi8KKyAgdFN0ayA9IHRhZ1N0YWNrOworICB3aGlsZSAodFN0aykgeworICAgIFRBRyAqdGFn
ID0gdFN0azsKKyAgICB0U3RrID0gdFN0ay0+cGFyZW50OworICAgIHRhZy0+cGFyZW50ID0gZnJl
ZVRhZ0xpc3Q7CisgICAgbW92ZVRvRnJlZUJpbmRpbmdMaXN0KHBhcnNlciwgdGFnLT5iaW5kaW5n
cyk7CisgICAgdGFnLT5iaW5kaW5ncyA9IE5VTEw7CisgICAgZnJlZVRhZ0xpc3QgPSB0YWc7Cisg
IH0KKyAgLyogbW92ZSBvcGVuSW50ZXJuYWxFbnRpdGllcyB0byBmcmVlSW50ZXJuYWxFbnRpdGll
cyAqLworICBvcGVuRW50aXR5TGlzdCA9IG9wZW5JbnRlcm5hbEVudGl0aWVzOworICB3aGlsZSAo
b3BlbkVudGl0eUxpc3QpIHsKKyAgICBPUEVOX0lOVEVSTkFMX0VOVElUWSAqb3BlbkVudGl0eSA9
IG9wZW5FbnRpdHlMaXN0OworICAgIG9wZW5FbnRpdHlMaXN0ID0gb3BlbkVudGl0eS0+bmV4dDsK
KyAgICBvcGVuRW50aXR5LT5uZXh0ID0gZnJlZUludGVybmFsRW50aXRpZXM7CisgICAgZnJlZUlu
dGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5OworICB9CisgIG1vdmVUb0ZyZWVCaW5kaW5nTGlz
dChwYXJzZXIsIGluaGVyaXRlZEJpbmRpbmdzKTsKKyAgRlJFRSh1bmtub3duRW5jb2RpbmdNZW0p
OworICBpZiAodW5rbm93bkVuY29kaW5nUmVsZWFzZSkKKyAgICB1bmtub3duRW5jb2RpbmdSZWxl
YXNlKHVua25vd25FbmNvZGluZ0RhdGEpOworICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKKyAgcG9v
bENsZWFyKCZ0ZW1wMlBvb2wpOworICBwYXJzZXJJbml0KHBhcnNlciwgZW5jb2RpbmdOYW1lKTsK
KyAgZHRkUmVzZXQoX2R0ZCwgJnBhcnNlci0+bV9tZW0pOworICByZXR1cm4gWE1MX1RSVUU7Cit9
CisKK2VudW0gWE1MX1N0YXR1cyBYTUxDQUxMCitYTUxfU2V0RW5jb2RpbmcoWE1MX1BhcnNlciBw
YXJzZXIsIGNvbnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUpCit7CisgIC8qIEJsb2NrIGFmdGVy
IFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpIGhhcyBiZWVuIGNhbGxlZC4KKyAgICAgWFhY
IFRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUgY2FsbGVyIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUK
KyAgICAgWFhYIHBvc3NpYmxlIGVycm9yIGNhc2VzIGNhdXNlZCB0aGUgWE1MX1NUQVRVU19FUlJP
UiByZXR1cm4uCisgICovCisgIGlmIChwc19wYXJzaW5nID09IFhNTF9QQVJTSU5HIHx8IHBzX3Bh
cnNpbmcgPT0gWE1MX1NVU1BFTkRFRCkKKyAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAg
aWYgKGVuY29kaW5nTmFtZSA9PSBOVUxMKQorICAgIHByb3RvY29sRW5jb2RpbmdOYW1lID0gTlVM
TDsKKyAgZWxzZSB7CisgICAgcHJvdG9jb2xFbmNvZGluZ05hbWUgPSBwb29sQ29weVN0cmluZygm
dGVtcFBvb2wsIGVuY29kaW5nTmFtZSk7CisgICAgaWYgKCFwcm90b2NvbEVuY29kaW5nTmFtZSkK
KyAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICB9CisgIHJldHVybiBYTUxfU1RBVFVT
X09LOworfQorCitYTUxfUGFyc2VyIFhNTENBTEwKK1hNTF9FeHRlcm5hbEVudGl0eVBhcnNlckNy
ZWF0ZShYTUxfUGFyc2VyIG9sZFBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYTUxfQ2hhciAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lKQoreworICBYTUxfUGFyc2VyIHBhcnNlciA9
IG9sZFBhcnNlcjsKKyAgRFREICpuZXdEdGQgPSBOVUxMOworICBEVEQgKm9sZER0ZCA9IF9kdGQ7
CisgIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyIG9sZFN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzdGFy
dEVsZW1lbnRIYW5kbGVyOworICBYTUxfRW5kRWxlbWVudEhhbmRsZXIgb2xkRW5kRWxlbWVudEhh
bmRsZXIgPSBlbmRFbGVtZW50SGFuZGxlcjsKKyAgWE1MX0NoYXJhY3RlckRhdGFIYW5kbGVyIG9s
ZENoYXJhY3RlckRhdGFIYW5kbGVyID0gY2hhcmFjdGVyRGF0YUhhbmRsZXI7CisgIFhNTF9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyIG9sZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIK
KyAgICAgID0gcHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcjsKKyAgWE1MX0NvbW1lbnRIYW5k
bGVyIG9sZENvbW1lbnRIYW5kbGVyID0gY29tbWVudEhhbmRsZXI7CisgIFhNTF9TdGFydENkYXRh
U2VjdGlvbkhhbmRsZXIgb2xkU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyCisgICAgICA9IHN0YXJ0
Q2RhdGFTZWN0aW9uSGFuZGxlcjsKKyAgWE1MX0VuZENkYXRhU2VjdGlvbkhhbmRsZXIgb2xkRW5k
Q2RhdGFTZWN0aW9uSGFuZGxlcgorICAgICAgPSBlbmRDZGF0YVNlY3Rpb25IYW5kbGVyOworICBY
TUxfRGVmYXVsdEhhbmRsZXIgb2xkRGVmYXVsdEhhbmRsZXIgPSBkZWZhdWx0SGFuZGxlcjsKKyAg
WE1MX1VucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgb2xkVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxl
cgorICAgICAgPSB1bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyOworICBYTUxfTm90YXRpb25EZWNs
SGFuZGxlciBvbGROb3RhdGlvbkRlY2xIYW5kbGVyID0gbm90YXRpb25EZWNsSGFuZGxlcjsKKyAg
WE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgb2xkU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxl
cgorICAgICAgPSBzdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyOworICBYTUxfRW5kTmFtZXNwYWNl
RGVjbEhhbmRsZXIgb2xkRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIKKyAgICAgID0gZW5kTmFtZXNw
YWNlRGVjbEhhbmRsZXI7CisgIFhNTF9Ob3RTdGFuZGFsb25lSGFuZGxlciBvbGROb3RTdGFuZGFs
b25lSGFuZGxlciA9IG5vdFN0YW5kYWxvbmVIYW5kbGVyOworICBYTUxfRXh0ZXJuYWxFbnRpdHlS
ZWZIYW5kbGVyIG9sZEV4dGVybmFsRW50aXR5UmVmSGFuZGxlcgorICAgICAgPSBleHRlcm5hbEVu
dGl0eVJlZkhhbmRsZXI7CisgIFhNTF9Ta2lwcGVkRW50aXR5SGFuZGxlciBvbGRTa2lwcGVkRW50
aXR5SGFuZGxlciA9IHNraXBwZWRFbnRpdHlIYW5kbGVyOworICBYTUxfVW5rbm93bkVuY29kaW5n
SGFuZGxlciBvbGRVbmtub3duRW5jb2RpbmdIYW5kbGVyCisgICAgICA9IHVua25vd25FbmNvZGlu
Z0hhbmRsZXI7CisgIFhNTF9FbGVtZW50RGVjbEhhbmRsZXIgb2xkRWxlbWVudERlY2xIYW5kbGVy
ID0gZWxlbWVudERlY2xIYW5kbGVyOworICBYTUxfQXR0bGlzdERlY2xIYW5kbGVyIG9sZEF0dGxp
c3REZWNsSGFuZGxlciA9IGF0dGxpc3REZWNsSGFuZGxlcjsKKyAgWE1MX0VudGl0eURlY2xIYW5k
bGVyIG9sZEVudGl0eURlY2xIYW5kbGVyID0gZW50aXR5RGVjbEhhbmRsZXI7CisgIFhNTF9YbWxE
ZWNsSGFuZGxlciBvbGRYbWxEZWNsSGFuZGxlciA9IHhtbERlY2xIYW5kbGVyOworICBFTEVNRU5U
X1RZUEUgKiBvbGREZWNsRWxlbWVudFR5cGUgPSBkZWNsRWxlbWVudFR5cGU7CisKKyAgdm9pZCAq
b2xkVXNlckRhdGEgPSB1c2VyRGF0YTsKKyAgdm9pZCAqb2xkSGFuZGxlckFyZyA9IGhhbmRsZXJB
cmc7CisgIFhNTF9Cb29sIG9sZERlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzID0gZGVmYXVs
dEV4cGFuZEludGVybmFsRW50aXRpZXM7CisgIFhNTF9QYXJzZXIgb2xkRXh0ZXJuYWxFbnRpdHlS
ZWZIYW5kbGVyQXJnID0gZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnOworI2lmZGVmIFhNTF9E
VEQKKyAgZW51bSBYTUxfUGFyYW1FbnRpdHlQYXJzaW5nIG9sZFBhcmFtRW50aXR5UGFyc2luZyA9
IHBhcmFtRW50aXR5UGFyc2luZzsKKyAgaW50IG9sZEluRW50aXR5VmFsdWUgPSBwcm9sb2dTdGF0
ZS5pbkVudGl0eVZhbHVlOworI2VuZGlmCisgIFhNTF9Cb29sIG9sZG5zX3RyaXBsZXRzID0gbnNf
dHJpcGxldHM7CisgIC8qIE5vdGUgdGhhdCB0aGUgbmV3IHBhcnNlciBzaGFyZXMgdGhlIHNhbWUg
aGFzaCBzZWNyZXQgYXMgdGhlIG9sZAorICAgICBwYXJzZXIsIHNvIHRoYXQgZHRkQ29weSBhbmQg
Y29weUVudGl0eVRhYmxlIGNhbiBsb29rdXAgdmFsdWVzCisgICAgIGZyb20gaGFzaCB0YWJsZXMg
YXNzb2NpYXRlZCB3aXRoIGVpdGhlciBwYXJzZXIgd2l0aG91dCB1cyBoYXZpbmcKKyAgICAgdG8g
d29ycnkgd2hpY2ggaGFzaCBzZWNyZXRzIGVhY2ggdGFibGUgaGFzLgorICAqLworICB1bnNpZ25l
ZCBsb25nIG9sZGhhc2hfc2VjcmV0X3NhbHQgPSBoYXNoX3NlY3JldF9zYWx0OworCisjaWZkZWYg
WE1MX0RURAorICBpZiAoIWNvbnRleHQpCisgICAgbmV3RHRkID0gb2xkRHRkOworI2VuZGlmIC8q
IFhNTF9EVEQgKi8KKworICAvKiBOb3RlIHRoYXQgdGhlIG1hZ2ljYWwgdXNlcyBvZiB0aGUgcHJl
LXByb2Nlc3NvciB0byBtYWtlIGZpZWxkCisgICAgIGFjY2VzcyBsb29rIG1vcmUgbGlrZSBDKysg
cmVxdWlyZSB0aGF0IGBwYXJzZXInIGJlIG92ZXJ3cml0dGVuCisgICAgIGhlcmUuICBUaGlzIG1h
a2VzIHRoaXMgZnVuY3Rpb24gbW9yZSBwYWluZnVsIHRvIGZvbGxvdyB0aGFuIGl0CisgICAgIHdv
dWxkIGJlIG90aGVyd2lzZS4KKyAgKi8KKyAgaWYgKG5zKSB7CisgICAgWE1MX0NoYXIgdG1wWzJd
OworICAgICp0bXAgPSBuYW1lc3BhY2VTZXBhcmF0b3I7CisgICAgcGFyc2VyID0gcGFyc2VyQ3Jl
YXRlKGVuY29kaW5nTmFtZSwgJnBhcnNlci0+bV9tZW0sIHRtcCwgbmV3RHRkKTsKKyAgfQorICBl
bHNlIHsKKyAgICBwYXJzZXIgPSBwYXJzZXJDcmVhdGUoZW5jb2RpbmdOYW1lLCAmcGFyc2VyLT5t
X21lbSwgTlVMTCwgbmV3RHRkKTsKKyAgfQorCisgIGlmICghcGFyc2VyKQorICAgIHJldHVybiBO
VUxMOworCisgIHN0YXJ0RWxlbWVudEhhbmRsZXIgPSBvbGRTdGFydEVsZW1lbnRIYW5kbGVyOwor
ICBlbmRFbGVtZW50SGFuZGxlciA9IG9sZEVuZEVsZW1lbnRIYW5kbGVyOworICBjaGFyYWN0ZXJE
YXRhSGFuZGxlciA9IG9sZENoYXJhY3RlckRhdGFIYW5kbGVyOworICBwcm9jZXNzaW5nSW5zdHJ1
Y3Rpb25IYW5kbGVyID0gb2xkUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcjsKKyAgY29tbWVu
dEhhbmRsZXIgPSBvbGRDb21tZW50SGFuZGxlcjsKKyAgc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVy
ID0gb2xkU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyOworICBlbmRDZGF0YVNlY3Rpb25IYW5kbGVy
ID0gb2xkRW5kQ2RhdGFTZWN0aW9uSGFuZGxlcjsKKyAgZGVmYXVsdEhhbmRsZXIgPSBvbGREZWZh
dWx0SGFuZGxlcjsKKyAgdW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciA9IG9sZFVucGFyc2VkRW50
aXR5RGVjbEhhbmRsZXI7CisgIG5vdGF0aW9uRGVjbEhhbmRsZXIgPSBvbGROb3RhdGlvbkRlY2xI
YW5kbGVyOworICBzdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gb2xkU3RhcnROYW1lc3BhY2VE
ZWNsSGFuZGxlcjsKKyAgZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBvbGRFbmROYW1lc3BhY2VE
ZWNsSGFuZGxlcjsKKyAgbm90U3RhbmRhbG9uZUhhbmRsZXIgPSBvbGROb3RTdGFuZGFsb25lSGFu
ZGxlcjsKKyAgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyID0gb2xkRXh0ZXJuYWxFbnRpdHlSZWZI
YW5kbGVyOworICBza2lwcGVkRW50aXR5SGFuZGxlciA9IG9sZFNraXBwZWRFbnRpdHlIYW5kbGVy
OworICB1bmtub3duRW5jb2RpbmdIYW5kbGVyID0gb2xkVW5rbm93bkVuY29kaW5nSGFuZGxlcjsK
KyAgZWxlbWVudERlY2xIYW5kbGVyID0gb2xkRWxlbWVudERlY2xIYW5kbGVyOworICBhdHRsaXN0
RGVjbEhhbmRsZXIgPSBvbGRBdHRsaXN0RGVjbEhhbmRsZXI7CisgIGVudGl0eURlY2xIYW5kbGVy
ID0gb2xkRW50aXR5RGVjbEhhbmRsZXI7CisgIHhtbERlY2xIYW5kbGVyID0gb2xkWG1sRGVjbEhh
bmRsZXI7CisgIGRlY2xFbGVtZW50VHlwZSA9IG9sZERlY2xFbGVtZW50VHlwZTsKKyAgdXNlckRh
dGEgPSBvbGRVc2VyRGF0YTsKKyAgaWYgKG9sZFVzZXJEYXRhID09IG9sZEhhbmRsZXJBcmcpCisg
ICAgaGFuZGxlckFyZyA9IHVzZXJEYXRhOworICBlbHNlCisgICAgaGFuZGxlckFyZyA9IHBhcnNl
cjsKKyAgaWYgKG9sZEV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyAhPSBvbGRQYXJzZXIpCisg
ICAgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnID0gb2xkRXh0ZXJuYWxFbnRpdHlSZWZIYW5k
bGVyQXJnOworICBkZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllcyA9IG9sZERlZmF1bHRFeHBh
bmRJbnRlcm5hbEVudGl0aWVzOworICBuc190cmlwbGV0cyA9IG9sZG5zX3RyaXBsZXRzOworICBo
YXNoX3NlY3JldF9zYWx0ID0gb2xkaGFzaF9zZWNyZXRfc2FsdDsKKyAgcGFyZW50UGFyc2VyID0g
b2xkUGFyc2VyOworI2lmZGVmIFhNTF9EVEQKKyAgcGFyYW1FbnRpdHlQYXJzaW5nID0gb2xkUGFy
YW1FbnRpdHlQYXJzaW5nOworICBwcm9sb2dTdGF0ZS5pbkVudGl0eVZhbHVlID0gb2xkSW5FbnRp
dHlWYWx1ZTsKKyAgaWYgKGNvbnRleHQpIHsKKyNlbmRpZiAvKiBYTUxfRFREICovCisgICAgaWYg
KCFkdGRDb3B5KG9sZFBhcnNlciwgX2R0ZCwgb2xkRHRkLCAmcGFyc2VyLT5tX21lbSkKKyAgICAg
IHx8ICFzZXRDb250ZXh0KHBhcnNlciwgY29udGV4dCkpIHsKKyAgICAgIFhNTF9QYXJzZXJGcmVl
KHBhcnNlcik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcHJvY2Vzc29yID0gZXh0
ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yOworI2lmZGVmIFhNTF9EVEQKKyAgfQorICBlbHNlIHsK
KyAgICAvKiBUaGUgRFREIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgX2R0ZCBpcyBzaGFyZWQgYmV0
d2VlbiB0aGUgZG9jdW1lbnQncworICAgICAgIHJvb3QgcGFyc2VyIGFuZCBleHRlcm5hbCBQRSBw
YXJzZXJzLCB0aGVyZWZvcmUgb25lIGRvZXMgbm90IG5lZWQgdG8KKyAgICAgICBjYWxsIHNldENv
bnRleHQuIEluIGFkZGl0aW9uLCBvbmUgYWxzbyAqbXVzdCogbm90IGNhbGwgc2V0Q29udGV4dCwK
KyAgICAgICBiZWNhdXNlIHRoaXMgd291bGQgb3ZlcndyaXRlIGV4aXN0aW5nIHByZWZpeC0+Ymlu
ZGluZyBwb2ludGVycyBpbgorICAgICAgIF9kdGQgd2l0aCBvbmVzIHRoYXQgZ2V0IGRlc3Ryb3ll
ZCB3aXRoIHRoZSBleHRlcm5hbCBQRSBwYXJzZXIuCisgICAgICAgVGhpcyB3b3VsZCBsZWF2ZSB0
aG9zZSBwcmVmaXhlcyB3aXRoIGRhbmdsaW5nIHBvaW50ZXJzLgorICAgICovCisgICAgaXNQYXJh
bUVudGl0eSA9IFhNTF9UUlVFOworICAgIFhtbFByb2xvZ1N0YXRlSW5pdEV4dGVybmFsRW50aXR5
KCZwcm9sb2dTdGF0ZSk7CisgICAgcHJvY2Vzc29yID0gZXh0ZXJuYWxQYXJFbnRJbml0UHJvY2Vz
c29yOworICB9CisjZW5kaWYgLyogWE1MX0RURCAqLworICByZXR1cm4gcGFyc2VyOworfQorCitz
dGF0aWMgdm9pZCBGQVNUQ0FMTAorZGVzdHJveUJpbmRpbmdzKEJJTkRJTkcgKmJpbmRpbmdzLCBY
TUxfUGFyc2VyIHBhcnNlcikKK3sKKyAgZm9yICg7OykgeworICAgIEJJTkRJTkcgKmIgPSBiaW5k
aW5nczsKKyAgICBpZiAoIWIpCisgICAgICBicmVhazsKKyAgICBiaW5kaW5ncyA9IGItPm5leHRU
YWdCaW5kaW5nOworICAgIEZSRUUoYi0+dXJpKTsKKyAgICBGUkVFKGIpOworICB9Cit9CisKK3Zv
aWQgWE1MQ0FMTAorWE1MX1BhcnNlckZyZWUoWE1MX1BhcnNlciBwYXJzZXIpCit7CisgIFRBRyAq
dGFnTGlzdDsKKyAgT1BFTl9JTlRFUk5BTF9FTlRJVFkgKmVudGl0eUxpc3Q7CisgIGlmIChwYXJz
ZXIgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIC8qIGZyZWUgdGFnU3RhY2sgYW5kIGZyZWVUYWdM
aXN0ICovCisgIHRhZ0xpc3QgPSB0YWdTdGFjazsKKyAgZm9yICg7OykgeworICAgIFRBRyAqcDsK
KyAgICBpZiAodGFnTGlzdCA9PSBOVUxMKSB7CisgICAgICBpZiAoZnJlZVRhZ0xpc3QgPT0gTlVM
TCkKKyAgICAgICAgYnJlYWs7CisgICAgICB0YWdMaXN0ID0gZnJlZVRhZ0xpc3Q7CisgICAgICBm
cmVlVGFnTGlzdCA9IE5VTEw7CisgICAgfQorICAgIHAgPSB0YWdMaXN0OworICAgIHRhZ0xpc3Qg
PSB0YWdMaXN0LT5wYXJlbnQ7CisgICAgRlJFRShwLT5idWYpOworICAgIGRlc3Ryb3lCaW5kaW5n
cyhwLT5iaW5kaW5ncywgcGFyc2VyKTsKKyAgICBGUkVFKHApOworICB9CisgIC8qIGZyZWUgb3Bl
bkludGVybmFsRW50aXRpZXMgYW5kIGZyZWVJbnRlcm5hbEVudGl0aWVzICovCisgIGVudGl0eUxp
c3QgPSBvcGVuSW50ZXJuYWxFbnRpdGllczsKKyAgZm9yICg7OykgeworICAgIE9QRU5fSU5URVJO
QUxfRU5USVRZICpvcGVuRW50aXR5OworICAgIGlmIChlbnRpdHlMaXN0ID09IE5VTEwpIHsKKyAg
ICAgIGlmIChmcmVlSW50ZXJuYWxFbnRpdGllcyA9PSBOVUxMKQorICAgICAgICBicmVhazsKKyAg
ICAgIGVudGl0eUxpc3QgPSBmcmVlSW50ZXJuYWxFbnRpdGllczsKKyAgICAgIGZyZWVJbnRlcm5h
bEVudGl0aWVzID0gTlVMTDsKKyAgICB9CisgICAgb3BlbkVudGl0eSA9IGVudGl0eUxpc3Q7Cisg
ICAgZW50aXR5TGlzdCA9IGVudGl0eUxpc3QtPm5leHQ7CisgICAgRlJFRShvcGVuRW50aXR5KTsK
KyAgfQorCisgIGRlc3Ryb3lCaW5kaW5ncyhmcmVlQmluZGluZ0xpc3QsIHBhcnNlcik7CisgIGRl
c3Ryb3lCaW5kaW5ncyhpbmhlcml0ZWRCaW5kaW5ncywgcGFyc2VyKTsKKyAgcG9vbERlc3Ryb3ko
JnRlbXBQb29sKTsKKyAgcG9vbERlc3Ryb3koJnRlbXAyUG9vbCk7CisjaWZkZWYgWE1MX0RURAor
ICAvKiBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXR5IHBhcnNlcnMgc2hhcmUgdGhlIERURCBzdHJ1
Y3R1cmUKKyAgICAgcGFyc2VyLT5tX2R0ZCB3aXRoIHRoZSByb290IHBhcnNlciwgc28gd2UgbXVz
dCBub3QgZGVzdHJveSBpdAorICAqLworICBpZiAoIWlzUGFyYW1FbnRpdHkgJiYgX2R0ZCkKKyNl
bHNlCisgIGlmIChfZHRkKQorI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICBkdGREZXN0cm95KF9k
dGQsIChYTUxfQm9vbCkhcGFyZW50UGFyc2VyLCAmcGFyc2VyLT5tX21lbSk7CisgIEZSRUUoKHZv
aWQgKilhdHRzKTsKKyNpZmRlZiBYTUxfQVRUUl9JTkZPCisgIEZSRUUoKHZvaWQgKilhdHRJbmZv
KTsKKyNlbmRpZgorICBGUkVFKGdyb3VwQ29ubmVjdG9yKTsKKyAgRlJFRShidWZmZXIpOworICBG
UkVFKGRhdGFCdWYpOworICBGUkVFKG5zQXR0cyk7CisgIEZSRUUodW5rbm93bkVuY29kaW5nTWVt
KTsKKyAgaWYgKHVua25vd25FbmNvZGluZ1JlbGVhc2UpCisgICAgdW5rbm93bkVuY29kaW5nUmVs
ZWFzZSh1bmtub3duRW5jb2RpbmdEYXRhKTsKKyAgRlJFRShwYXJzZXIpOworfQorCit2b2lkIFhN
TENBTEwKK1hNTF9Vc2VQYXJzZXJBc0hhbmRsZXJBcmcoWE1MX1BhcnNlciBwYXJzZXIpCit7Cisg
IGhhbmRsZXJBcmcgPSBwYXJzZXI7Cit9CisKK2VudW0gWE1MX0Vycm9yIFhNTENBTEwKK1hNTF9V
c2VGb3JlaWduRFREKFhNTF9QYXJzZXIgcGFyc2VyLCBYTUxfQm9vbCB1c2VEVEQpCit7CisjaWZk
ZWYgWE1MX0RURAorICAvKiBibG9jayBhZnRlciBYTUxfUGFyc2UoKS9YTUxfUGFyc2VCdWZmZXIo
KSBoYXMgYmVlbiBjYWxsZWQgKi8KKyAgaWYgKHBzX3BhcnNpbmcgPT0gWE1MX1BBUlNJTkcgfHwg
cHNfcGFyc2luZyA9PSBYTUxfU1VTUEVOREVEKQorICAgIHJldHVybiBYTUxfRVJST1JfQ0FOVF9D
SEFOR0VfRkVBVFVSRV9PTkNFX1BBUlNJTkc7CisgIHVzZUZvcmVpZ25EVEQgPSB1c2VEVEQ7Cisg
IHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyNlbHNlCisgIHJldHVybiBYTUxfRVJST1JfRkVBVFVS
RV9SRVFVSVJFU19YTUxfRFREOworI2VuZGlmCit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldFJl
dHVybk5TVHJpcGxldChYTUxfUGFyc2VyIHBhcnNlciwgaW50IGRvX25zdCkKK3sKKyAgLyogYmxv
Y2sgYWZ0ZXIgWE1MX1BhcnNlKCkvWE1MX1BhcnNlQnVmZmVyKCkgaGFzIGJlZW4gY2FsbGVkICov
CisgIGlmIChwc19wYXJzaW5nID09IFhNTF9QQVJTSU5HIHx8IHBzX3BhcnNpbmcgPT0gWE1MX1NV
U1BFTkRFRCkKKyAgICByZXR1cm47CisgIG5zX3RyaXBsZXRzID0gZG9fbnN0ID8gWE1MX1RSVUUg
OiBYTUxfRkFMU0U7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldFVzZXJEYXRhKFhNTF9QYXJz
ZXIgcGFyc2VyLCB2b2lkICpwKQoreworICBpZiAoaGFuZGxlckFyZyA9PSB1c2VyRGF0YSkKKyAg
ICBoYW5kbGVyQXJnID0gdXNlckRhdGEgPSBwOworICBlbHNlCisgICAgdXNlckRhdGEgPSBwOwor
fQorCitlbnVtIFhNTF9TdGF0dXMgWE1MQ0FMTAorWE1MX1NldEJhc2UoWE1MX1BhcnNlciBwYXJz
ZXIsIGNvbnN0IFhNTF9DaGFyICpwKQoreworICBpZiAocCkgeworICAgIHAgPSBwb29sQ29weVN0
cmluZygmX2R0ZC0+cG9vbCwgcCk7CisgICAgaWYgKCFwKQorICAgICAgcmV0dXJuIFhNTF9TVEFU
VVNfRVJST1I7CisgICAgY3VyQmFzZSA9IHA7CisgIH0KKyAgZWxzZQorICAgIGN1ckJhc2UgPSBO
VUxMOworICByZXR1cm4gWE1MX1NUQVRVU19PSzsKK30KKworY29uc3QgWE1MX0NoYXIgKiBYTUxD
QUxMCitYTUxfR2V0QmFzZShYTUxfUGFyc2VyIHBhcnNlcikKK3sKKyAgcmV0dXJuIGN1ckJhc2U7
Cit9CisKK2ludCBYTUxDQUxMCitYTUxfR2V0U3BlY2lmaWVkQXR0cmlidXRlQ291bnQoWE1MX1Bh
cnNlciBwYXJzZXIpCit7CisgIHJldHVybiBuU3BlY2lmaWVkQXR0czsKK30KKworaW50IFhNTENB
TEwKK1hNTF9HZXRJZEF0dHJpYnV0ZUluZGV4KFhNTF9QYXJzZXIgcGFyc2VyKQoreworICByZXR1
cm4gaWRBdHRJbmRleDsKK30KKworI2lmZGVmIFhNTF9BVFRSX0lORk8KK2NvbnN0IFhNTF9BdHRy
SW5mbyAqIFhNTENBTEwKK1hNTF9HZXRBdHRyaWJ1dGVJbmZvKFhNTF9QYXJzZXIgcGFyc2VyKQor
eworICByZXR1cm4gYXR0SW5mbzsKK30KKyNlbmRpZgorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRF
bGVtZW50SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICBY
TUxfU3RhcnRFbGVtZW50SGFuZGxlciBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICBYTUxf
RW5kRWxlbWVudEhhbmRsZXIgZW5kKQoreworICBzdGFydEVsZW1lbnRIYW5kbGVyID0gc3RhcnQ7
CisgIGVuZEVsZW1lbnRIYW5kbGVyID0gZW5kOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRT
dGFydEVsZW1lbnRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIgc3RhcnQpIHsKKyAgc3RhcnRFbGVtZW50
SGFuZGxlciA9IHN0YXJ0OworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRFbmRFbGVtZW50SGFu
ZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5k
RWxlbWVudEhhbmRsZXIgZW5kKSB7CisgIGVuZEVsZW1lbnRIYW5kbGVyID0gZW5kOworfQorCit2
b2lkIFhNTENBTEwKK1hNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQ2hhcmFjdGVyRGF0YUhhbmRsZXIg
aGFuZGxlcikKK3sKKyAgY2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBoYW5kbGVyOworfQorCit2b2lk
IFhNTENBTEwKK1hNTF9TZXRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIg
cGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbkhhbmRsZXIgaGFuZGxlcikKK3sKKyAgcHJvY2Vzc2luZ0luc3RydWN0aW9u
SGFuZGxlciA9IGhhbmRsZXI7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldENvbW1lbnRIYW5k
bGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgIFhNTF9Db21tZW50
SGFuZGxlciBoYW5kbGVyKQoreworICBjb21tZW50SGFuZGxlciA9IGhhbmRsZXI7Cit9CisKK3Zv
aWQgWE1MQ0FMTAorWE1MX1NldENkYXRhU2VjdGlvbkhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVy
IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZENkYXRhU2VjdGlvbkhh
bmRsZXIgZW5kKQoreworICBzdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgPSBzdGFydDsKKyAgZW5k
Q2RhdGFTZWN0aW9uSGFuZGxlciA9IGVuZDsKK30KKwordm9pZCBYTUxDQUxMCitYTUxfU2V0U3Rh
cnRDZGF0YVNlY3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYTUxfU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyIHN0YXJ0KSB7Cisg
IHN0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlciA9IHN0YXJ0OworfQorCit2b2lkIFhNTENBTEwKK1hN
TF9TZXRFbmRDZGF0YVNlY3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZENkYXRhU2VjdGlvbkhhbmRsZXIgZW5kKSB7Cisg
IGVuZENkYXRhU2VjdGlvbkhhbmRsZXIgPSBlbmQ7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1Nl
dERlZmF1bHRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAg
IFhNTF9EZWZhdWx0SGFuZGxlciBoYW5kbGVyKQoreworICBkZWZhdWx0SGFuZGxlciA9IGhhbmRs
ZXI7CisgIGRlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzID0gWE1MX0ZBTFNFOworfQorCit2
b2lkIFhNTENBTEwKK1hNTF9TZXREZWZhdWx0SGFuZGxlckV4cGFuZChYTUxfUGFyc2VyIHBhcnNl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRGVmYXVsdEhhbmRsZXIgaGFuZGxl
cikKK3sKKyAgZGVmYXVsdEhhbmRsZXIgPSBoYW5kbGVyOworICBkZWZhdWx0RXhwYW5kSW50ZXJu
YWxFbnRpdGllcyA9IFhNTF9UUlVFOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXREb2N0eXBl
RGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFhNTF9TdGFydERvY3R5cGVEZWNsSGFuZGxlciBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgWE1MX0VuZERvY3R5cGVEZWNsSGFuZGxlciBlbmQpCit7CisgIHN0YXJ0RG9jdHlwZURl
Y2xIYW5kbGVyID0gc3RhcnQ7CisgIGVuZERvY3R5cGVEZWNsSGFuZGxlciA9IGVuZDsKK30KKwor
dm9pZCBYTUxDQUxMCitYTUxfU2V0U3RhcnREb2N0eXBlRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBw
YXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RG9jdHlwZURl
Y2xIYW5kbGVyIHN0YXJ0KSB7CisgIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyID0gc3RhcnQ7Cit9
CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldEVuZERvY3R5cGVEZWNsSGFuZGxlcihYTUxfUGFyc2Vy
IHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZERvY3R5cGVEZWNs
SGFuZGxlciBlbmQpIHsKKyAgZW5kRG9jdHlwZURlY2xIYW5kbGVyID0gZW5kOworfQorCit2b2lk
IFhNTENBTEwKK1hNTF9TZXRVbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFy
c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1VucGFyc2VkRW50aXR5
RGVjbEhhbmRsZXIgaGFuZGxlcikKK3sKKyAgdW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciA9IGhh
bmRsZXI7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldE5vdGF0aW9uRGVjbEhhbmRsZXIoWE1M
X1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfTm90YXRpb25E
ZWNsSGFuZGxlciBoYW5kbGVyKQoreworICBub3RhdGlvbkRlY2xIYW5kbGVyID0gaGFuZGxlcjsK
K30KKwordm9pZCBYTUxDQUxMCitYTUxfU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIoWE1MX1BhcnNl
ciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0TmFtZXNwYWNl
RGVjbEhhbmRsZXIgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZE5h
bWVzcGFjZURlY2xIYW5kbGVyIGVuZCkKK3sKKyAgc3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9
IHN0YXJ0OworICBlbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGVuZDsKK30KKwordm9pZCBYTUxD
QUxMCitYTUxfU2V0U3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydE5hbWVzcGFjZURlY2xI
YW5kbGVyIHN0YXJ0KSB7CisgIHN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBzdGFydDsKK30K
Kwordm9pZCBYTUxDQUxMCitYTUxfU2V0RW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIoWE1MX1BhcnNl
ciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZE5hbWVzcGFj
ZURlY2xIYW5kbGVyIGVuZCkgeworICBlbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGVuZDsKK30K
Kwordm9pZCBYTUxDQUxMCitYTUxfU2V0Tm90U3RhbmRhbG9uZUhhbmRsZXIoWE1MX1BhcnNlciBw
YXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX05vdFN0YW5kYWxvbmVIYW5k
bGVyIGhhbmRsZXIpCit7CisgIG5vdFN0YW5kYWxvbmVIYW5kbGVyID0gaGFuZGxlcjsKK30KKwor
dm9pZCBYTUxDQUxMCitYTUxfU2V0RXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKFhNTF9QYXJzZXIg
cGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRXh0ZXJuYWxFbnRp
dHlSZWZIYW5kbGVyIGhhbmRsZXIpCit7CisgIGV4dGVybmFsRW50aXR5UmVmSGFuZGxlciA9IGhh
bmRsZXI7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX1NldEV4dGVybmFsRW50aXR5UmVmSGFuZGxl
ckFyZyhYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqYXJnKQoreworICBpZiAoYXJnKQorICAgIGV4
dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyA9IChYTUxfUGFyc2VyKWFyZzsKKyAgZWxzZQorICAg
IGV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyA9IHBhcnNlcjsKK30KKwordm9pZCBYTUxDQUxM
CitYTUxfU2V0U2tpcHBlZEVudGl0eUhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWE1MX1NraXBwZWRFbnRpdHlIYW5kbGVyIGhhbmRsZXIpCit7
CisgIHNraXBwZWRFbnRpdHlIYW5kbGVyID0gaGFuZGxlcjsKK30KKwordm9pZCBYTUxDQUxMCitY
TUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhNTF9Vbmtub3duRW5jb2RpbmdIYW5kbGVyIGhhbmRsZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQoreworICB1bmtub3du
RW5jb2RpbmdIYW5kbGVyID0gaGFuZGxlcjsKKyAgdW5rbm93bkVuY29kaW5nSGFuZGxlckRhdGEg
PSBkYXRhOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRFbGVtZW50RGVjbEhhbmRsZXIoWE1M
X1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbGVtZW50RGVj
bEhhbmRsZXIgZWxkZWNsKQoreworICBlbGVtZW50RGVjbEhhbmRsZXIgPSBlbGRlY2w7Cit9CisK
K3ZvaWQgWE1MQ0FMTAorWE1MX1NldEF0dGxpc3REZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0F0dGxpc3REZWNsSGFuZGxlciBhdHRk
ZWNsKQoreworICBhdHRsaXN0RGVjbEhhbmRsZXIgPSBhdHRkZWNsOworfQorCit2b2lkIFhNTENB
TEwKK1hNTF9TZXRFbnRpdHlEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBYTUxfRW50aXR5RGVjbEhhbmRsZXIgaGFuZGxlcikKK3sKKyAgZW50
aXR5RGVjbEhhbmRsZXIgPSBoYW5kbGVyOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9TZXRYbWxE
ZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICBYTUxf
WG1sRGVjbEhhbmRsZXIgaGFuZGxlcikgeworICB4bWxEZWNsSGFuZGxlciA9IGhhbmRsZXI7Cit9
CisKK2ludCBYTUxDQUxMCitYTUxfU2V0UGFyYW1FbnRpdHlQYXJzaW5nKFhNTF9QYXJzZXIgcGFy
c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIFhNTF9QYXJhbUVudGl0eVBhcnNp
bmcgcGVQYXJzaW5nKQoreworICAvKiBibG9jayBhZnRlciBYTUxfUGFyc2UoKS9YTUxfUGFyc2VC
dWZmZXIoKSBoYXMgYmVlbiBjYWxsZWQgKi8KKyAgaWYgKHBzX3BhcnNpbmcgPT0gWE1MX1BBUlNJ
TkcgfHwgcHNfcGFyc2luZyA9PSBYTUxfU1VTUEVOREVEKQorICAgIHJldHVybiAwOworI2lmZGVm
IFhNTF9EVEQKKyAgcGFyYW1FbnRpdHlQYXJzaW5nID0gcGVQYXJzaW5nOworICByZXR1cm4gMTsK
KyNlbHNlCisgIHJldHVybiBwZVBhcnNpbmcgPT0gWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX05F
VkVSOworI2VuZGlmCit9CisKK2ludCBYTUxDQUxMCitYTUxfU2V0SGFzaFNhbHQoWE1MX1BhcnNl
ciBwYXJzZXIsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBoYXNoX3NhbHQpCit7Cisg
IC8qIGJsb2NrIGFmdGVyIFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpIGhhcyBiZWVuIGNh
bGxlZCAqLworICBpZiAocHNfcGFyc2luZyA9PSBYTUxfUEFSU0lORyB8fCBwc19wYXJzaW5nID09
IFhNTF9TVVNQRU5ERUQpCisgICAgcmV0dXJuIDA7CisgIGhhc2hfc2VjcmV0X3NhbHQgPSBoYXNo
X3NhbHQ7CisgIHJldHVybiAxOworfQorCitlbnVtIFhNTF9TdGF0dXMgWE1MQ0FMTAorWE1MX1Bh
cnNlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBpbnQgaXNGaW5h
bCkKK3sKKyAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgIGNhc2UgWE1MX1NVU1BFTkRFRDoKKyAg
ICBlcnJvckNvZGUgPSBYTUxfRVJST1JfU1VTUEVOREVEOworICAgIHJldHVybiBYTUxfU1RBVFVT
X0VSUk9SOworICBjYXNlIFhNTF9GSU5JU0hFRDoKKyAgICBlcnJvckNvZGUgPSBYTUxfRVJST1Jf
RklOSVNIRUQ7CisgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgIGNhc2UgWE1MX0lOSVRJ
QUxJWkVEOgorICAgIGlmIChwYXJlbnRQYXJzZXIgPT0gTlVMTCAmJiAhc3RhcnRQYXJzaW5nKHBh
cnNlcikpIHsKKyAgICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICBy
ZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAgICB9CisgIGRlZmF1bHQ6CisgICAgcHNfcGFyc2lu
ZyA9IFhNTF9QQVJTSU5HOworICB9CisKKyAgaWYgKGxlbiA9PSAwKSB7CisgICAgcHNfZmluYWxC
dWZmZXIgPSAoWE1MX0Jvb2wpaXNGaW5hbDsKKyAgICBpZiAoIWlzRmluYWwpCisgICAgICByZXR1
cm4gWE1MX1NUQVRVU19PSzsKKyAgICBwb3NpdGlvblB0ciA9IGJ1ZmZlclB0cjsKKyAgICBwYXJz
ZUVuZFB0ciA9IGJ1ZmZlckVuZDsKKworICAgIC8qIElmIGRhdGEgYXJlIGxlZnQgb3ZlciBmcm9t
IGxhc3QgYnVmZmVyLCBhbmQgd2Ugbm93IGtub3cgdGhhdCB0aGVzZQorICAgICAgIGRhdGEgYXJl
IHRoZSBmaW5hbCBjaHVuayBvZiBpbnB1dCwgdGhlbiB3ZSBoYXZlIHRvIGNoZWNrIHRoZW0gYWdh
aW4KKyAgICAgICB0byBkZXRlY3QgZXJyb3JzIGJhc2VkIG9uIHRoYXQgZmFjdC4KKyAgICAqLwor
ICAgIGVycm9yQ29kZSA9IHByb2Nlc3NvcihwYXJzZXIsIGJ1ZmZlclB0ciwgcGFyc2VFbmRQdHIs
ICZidWZmZXJQdHIpOworCisgICAgaWYgKGVycm9yQ29kZSA9PSBYTUxfRVJST1JfTk9ORSkgewor
ICAgICAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgICAgICBjYXNlIFhNTF9TVVNQRU5ERUQ6Cisg
ICAgICAgIFhtbFVwZGF0ZVBvc2l0aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgYnVmZmVyUHRy
LCAmcG9zaXRpb24pOworICAgICAgICBwb3NpdGlvblB0ciA9IGJ1ZmZlclB0cjsKKyAgICAgICAg
cmV0dXJuIFhNTF9TVEFUVVNfU1VTUEVOREVEOworICAgICAgY2FzZSBYTUxfSU5JVElBTElaRUQ6
CisgICAgICBjYXNlIFhNTF9QQVJTSU5HOgorICAgICAgICBwc19wYXJzaW5nID0gWE1MX0ZJTklT
SEVEOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBYTUxfU1RBVFVTX09LOworICAgICAgfQorICAgIH0KKyAgICBldmVudEVuZFB0ciA9
IGV2ZW50UHRyOworICAgIHByb2Nlc3NvciA9IGVycm9yUHJvY2Vzc29yOworICAgIHJldHVybiBY
TUxfU1RBVFVTX0VSUk9SOworICB9CisjaWZuZGVmIFhNTF9DT05URVhUX0JZVEVTCisgIGVsc2Ug
aWYgKGJ1ZmZlclB0ciA9PSBidWZmZXJFbmQpIHsKKyAgICBjb25zdCBjaGFyICplbmQ7CisgICAg
aW50IG5MZWZ0T3ZlcjsKKyAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7CisgICAgcGFyc2VFbmRC
eXRlSW5kZXggKz0gbGVuOworICAgIHBvc2l0aW9uUHRyID0gczsKKyAgICBwc19maW5hbEJ1ZmZl
ciA9IChYTUxfQm9vbClpc0ZpbmFsOworCisgICAgZXJyb3JDb2RlID0gcHJvY2Vzc29yKHBhcnNl
ciwgcywgcGFyc2VFbmRQdHIgPSBzICsgbGVuLCAmZW5kKTsKKworICAgIGlmIChlcnJvckNvZGUg
IT0gWE1MX0VSUk9SX05PTkUpIHsKKyAgICAgIGV2ZW50RW5kUHRyID0gZXZlbnRQdHI7CisgICAg
ICBwcm9jZXNzb3IgPSBlcnJvclByb2Nlc3NvcjsKKyAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VS
Uk9SOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN3aXRjaCAocHNfcGFyc2luZykgeworICAg
ICAgY2FzZSBYTUxfU1VTUEVOREVEOgorICAgICAgICByZXN1bHQgPSBYTUxfU1RBVFVTX1NVU1BF
TkRFRDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFhNTF9JTklUSUFMSVpFRDoKKyAgICAg
IGNhc2UgWE1MX1BBUlNJTkc6CisgICAgICAgIGlmIChpc0ZpbmFsKSB7CisgICAgICAgICAgcHNf
cGFyc2luZyA9IFhNTF9GSU5JU0hFRDsKKyAgICAgICAgICByZXR1cm4gWE1MX1NUQVRVU19PSzsK
KyAgICAgICAgfQorICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICBkZWZhdWx0OgorICAg
ICAgICByZXN1bHQgPSBYTUxfU1RBVFVTX09LOworICAgICAgfQorICAgIH0KKworICAgIFhtbFVw
ZGF0ZVBvc2l0aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgZW5kLCAmcG9zaXRpb24pOworICAg
IG5MZWZ0T3ZlciA9IHMgKyBsZW4gLSBlbmQ7CisgICAgaWYgKG5MZWZ0T3ZlcikgeworICAgICAg
aWYgKGJ1ZmZlciA9PSBOVUxMIHx8IG5MZWZ0T3ZlciA+IGJ1ZmZlckxpbSAtIGJ1ZmZlcikgewor
ICAgICAgICAvKiBGSVhNRSBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93ICovCisgICAgICAgIGNoYXIg
KnRlbXA7CisgICAgICAgIHRlbXAgPSAoYnVmZmVyID09IE5VTEwKKyAgICAgICAgICAgICAgICA/
IChjaGFyICopTUFMTE9DKGxlbiAqIDIpCisgICAgICAgICAgICAgICAgOiAoY2hhciAqKVJFQUxM
T0MoYnVmZmVyLCBsZW4gKiAyKSk7CisgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKKyAgICAg
ICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAgIGV2ZW50UHRy
ID0gZXZlbnRFbmRQdHIgPSBOVUxMOworICAgICAgICAgIHByb2Nlc3NvciA9IGVycm9yUHJvY2Vz
c29yOworICAgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICAgICAgICB9CisgICAg
ICAgIGJ1ZmZlciA9IHRlbXA7CisgICAgICAgIGJ1ZmZlckxpbSA9IGJ1ZmZlciArIGxlbiAqIDI7
CisgICAgICB9CisgICAgICBtZW1jcHkoYnVmZmVyLCBlbmQsIG5MZWZ0T3Zlcik7CisgICAgfQor
ICAgIGJ1ZmZlclB0ciA9IGJ1ZmZlcjsKKyAgICBidWZmZXJFbmQgPSBidWZmZXIgKyBuTGVmdE92
ZXI7CisgICAgcG9zaXRpb25QdHIgPSBidWZmZXJQdHI7CisgICAgcGFyc2VFbmRQdHIgPSBidWZm
ZXJFbmQ7CisgICAgZXZlbnRQdHIgPSBidWZmZXJQdHI7CisgICAgZXZlbnRFbmRQdHIgPSBidWZm
ZXJQdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorI2VuZGlmICAvKiBub3QgZGVmaW5lZCBY
TUxfQ09OVEVYVF9CWVRFUyAqLworICBlbHNlIHsKKyAgICB2b2lkICpidWZmID0gWE1MX0dldEJ1
ZmZlcihwYXJzZXIsIGxlbik7CisgICAgaWYgKGJ1ZmYgPT0gTlVMTCkKKyAgICAgIHJldHVybiBY
TUxfU1RBVFVTX0VSUk9SOworICAgIGVsc2UgeworICAgICAgbWVtY3B5KGJ1ZmYsIHMsIGxlbik7
CisgICAgICByZXR1cm4gWE1MX1BhcnNlQnVmZmVyKHBhcnNlciwgbGVuLCBpc0ZpbmFsKTsKKyAg
ICB9CisgIH0KK30KKworZW51bSBYTUxfU3RhdHVzIFhNTENBTEwKK1hNTF9QYXJzZUJ1ZmZlcihY
TUxfUGFyc2VyIHBhcnNlciwgaW50IGxlbiwgaW50IGlzRmluYWwpCit7CisgIGNvbnN0IGNoYXIg
KnN0YXJ0OworICBlbnVtIFhNTF9TdGF0dXMgcmVzdWx0ID0gWE1MX1NUQVRVU19PSzsKKworICBz
d2l0Y2ggKHBzX3BhcnNpbmcpIHsKKyAgY2FzZSBYTUxfU1VTUEVOREVEOgorICAgIGVycm9yQ29k
ZSA9IFhNTF9FUlJPUl9TVVNQRU5ERUQ7CisgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7Cisg
IGNhc2UgWE1MX0ZJTklTSEVEOgorICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9GSU5JU0hFRDsK
KyAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAgY2FzZSBYTUxfSU5JVElBTElaRUQ6Cisg
ICAgaWYgKHBhcmVudFBhcnNlciA9PSBOVUxMICYmICFzdGFydFBhcnNpbmcocGFyc2VyKSkgewor
ICAgICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgIHJldHVybiBYTUxf
U1RBVFVTX0VSUk9SOworICAgIH0KKyAgZGVmYXVsdDoKKyAgICBwc19wYXJzaW5nID0gWE1MX1BB
UlNJTkc7CisgIH0KKworICBzdGFydCA9IGJ1ZmZlclB0cjsKKyAgcG9zaXRpb25QdHIgPSBzdGFy
dDsKKyAgYnVmZmVyRW5kICs9IGxlbjsKKyAgcGFyc2VFbmRQdHIgPSBidWZmZXJFbmQ7CisgIHBh
cnNlRW5kQnl0ZUluZGV4ICs9IGxlbjsKKyAgcHNfZmluYWxCdWZmZXIgPSAoWE1MX0Jvb2wpaXNG
aW5hbDsKKworICBlcnJvckNvZGUgPSBwcm9jZXNzb3IocGFyc2VyLCBzdGFydCwgcGFyc2VFbmRQ
dHIsICZidWZmZXJQdHIpOworCisgIGlmIChlcnJvckNvZGUgIT0gWE1MX0VSUk9SX05PTkUpIHsK
KyAgICBldmVudEVuZFB0ciA9IGV2ZW50UHRyOworICAgIHByb2Nlc3NvciA9IGVycm9yUHJvY2Vz
c29yOworICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICB9CisgIGVsc2UgeworICAgIHN3
aXRjaCAocHNfcGFyc2luZykgeworICAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKKyAgICAgIHJlc3Vs
dCA9IFhNTF9TVEFUVVNfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfSU5J
VElBTElaRUQ6CisgICAgY2FzZSBYTUxfUEFSU0lORzoKKyAgICAgIGlmIChpc0ZpbmFsKSB7Cisg
ICAgICAgIHBzX3BhcnNpbmcgPSBYTUxfRklOSVNIRUQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICB9CisgICAgZGVmYXVsdDogOyAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAgICB9
CisgIH0KKworICBYbWxVcGRhdGVQb3NpdGlvbihlbmNvZGluZywgcG9zaXRpb25QdHIsIGJ1ZmZl
clB0ciwgJnBvc2l0aW9uKTsKKyAgcG9zaXRpb25QdHIgPSBidWZmZXJQdHI7CisgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgKiBYTUxDQUxMCitYTUxfR2V0QnVmZmVyKFhNTF9QYXJzZXIgcGFy
c2VyLCBpbnQgbGVuKQoreworICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKKyAgY2FzZSBYTUxfU1VT
UEVOREVEOgorICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9TVVNQRU5ERUQ7CisgICAgcmV0dXJu
IE5VTEw7CisgIGNhc2UgWE1MX0ZJTklTSEVEOgorICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9G
SU5JU0hFRDsKKyAgICByZXR1cm4gTlVMTDsKKyAgZGVmYXVsdDogOworICB9CisKKyAgaWYgKGxl
biA+IGJ1ZmZlckxpbSAtIGJ1ZmZlckVuZCkgeworICAgIC8qIEZJWE1FIGF2b2lkIGludGVnZXIg
b3ZlcmZsb3cgKi8KKyAgICBpbnQgbmVlZGVkU2l6ZSA9IGxlbiArIChpbnQpKGJ1ZmZlckVuZCAt
IGJ1ZmZlclB0cik7CisjaWZkZWYgWE1MX0NPTlRFWFRfQllURVMKKyAgICBpbnQga2VlcCA9IChp
bnQpKGJ1ZmZlclB0ciAtIGJ1ZmZlcik7CisKKyAgICBpZiAoa2VlcCA+IFhNTF9DT05URVhUX0JZ
VEVTKQorICAgICAga2VlcCA9IFhNTF9DT05URVhUX0JZVEVTOworICAgIG5lZWRlZFNpemUgKz0g
a2VlcDsKKyNlbmRpZiAgLyogZGVmaW5lZCBYTUxfQ09OVEVYVF9CWVRFUyAqLworICAgIGlmIChu
ZWVkZWRTaXplICA8PSBidWZmZXJMaW0gLSBidWZmZXIpIHsKKyNpZmRlZiBYTUxfQ09OVEVYVF9C
WVRFUworICAgICAgaWYgKGtlZXAgPCBidWZmZXJQdHIgLSBidWZmZXIpIHsKKyAgICAgICAgaW50
IG9mZnNldCA9IChpbnQpKGJ1ZmZlclB0ciAtIGJ1ZmZlcikgLSBrZWVwOworICAgICAgICBtZW1t
b3ZlKGJ1ZmZlciwgJmJ1ZmZlcltvZmZzZXRdLCBidWZmZXJFbmQgLSBidWZmZXJQdHIgKyBrZWVw
KTsKKyAgICAgICAgYnVmZmVyRW5kIC09IG9mZnNldDsKKyAgICAgICAgYnVmZmVyUHRyIC09IG9m
ZnNldDsKKyAgICAgIH0KKyNlbHNlCisgICAgICBtZW1tb3ZlKGJ1ZmZlciwgYnVmZmVyUHRyLCBi
dWZmZXJFbmQgLSBidWZmZXJQdHIpOworICAgICAgYnVmZmVyRW5kID0gYnVmZmVyICsgKGJ1ZmZl
ckVuZCAtIGJ1ZmZlclB0cik7CisgICAgICBidWZmZXJQdHIgPSBidWZmZXI7CisjZW5kaWYgIC8q
IG5vdCBkZWZpbmVkIFhNTF9DT05URVhUX0JZVEVTICovCisgICAgfQorICAgIGVsc2UgeworICAg
ICAgY2hhciAqbmV3QnVmOworICAgICAgaW50IGJ1ZmZlclNpemUgPSAoaW50KShidWZmZXJMaW0g
LSBidWZmZXJQdHIpOworICAgICAgaWYgKGJ1ZmZlclNpemUgPT0gMCkKKyAgICAgICAgYnVmZmVy
U2l6ZSA9IElOSVRfQlVGRkVSX1NJWkU7CisgICAgICBkbyB7CisgICAgICAgIGJ1ZmZlclNpemUg
Kj0gMjsKKyAgICAgIH0gd2hpbGUgKGJ1ZmZlclNpemUgPCBuZWVkZWRTaXplKTsKKyAgICAgIG5l
d0J1ZiA9IChjaGFyICopTUFMTE9DKGJ1ZmZlclNpemUpOworICAgICAgaWYgKG5ld0J1ZiA9PSAw
KSB7CisgICAgICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgfQorICAgICAgYnVmZmVyTGltID0gbmV3QnVmICsgYnVmZmVyU2l6
ZTsKKyNpZmRlZiBYTUxfQ09OVEVYVF9CWVRFUworICAgICAgaWYgKGJ1ZmZlclB0cikgeworICAg
ICAgICBpbnQga2VlcCA9IChpbnQpKGJ1ZmZlclB0ciAtIGJ1ZmZlcik7CisgICAgICAgIGlmIChr
ZWVwID4gWE1MX0NPTlRFWFRfQllURVMpCisgICAgICAgICAga2VlcCA9IFhNTF9DT05URVhUX0JZ
VEVTOworICAgICAgICBtZW1jcHkobmV3QnVmLCAmYnVmZmVyUHRyWy1rZWVwXSwgYnVmZmVyRW5k
IC0gYnVmZmVyUHRyICsga2VlcCk7CisgICAgICAgIEZSRUUoYnVmZmVyKTsKKyAgICAgICAgYnVm
ZmVyID0gbmV3QnVmOworICAgICAgICBidWZmZXJFbmQgPSBidWZmZXIgKyAoYnVmZmVyRW5kIC0g
YnVmZmVyUHRyKSArIGtlZXA7CisgICAgICAgIGJ1ZmZlclB0ciA9IGJ1ZmZlciArIGtlZXA7Cisg
ICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgYnVmZmVyRW5kID0gbmV3QnVmICsgKGJ1ZmZl
ckVuZCAtIGJ1ZmZlclB0cik7CisgICAgICAgIGJ1ZmZlclB0ciA9IGJ1ZmZlciA9IG5ld0J1ZjsK
KyAgICAgIH0KKyNlbHNlCisgICAgICBpZiAoYnVmZmVyUHRyKSB7CisgICAgICAgIG1lbWNweShu
ZXdCdWYsIGJ1ZmZlclB0ciwgYnVmZmVyRW5kIC0gYnVmZmVyUHRyKTsKKyAgICAgICAgRlJFRShi
dWZmZXIpOworICAgICAgfQorICAgICAgYnVmZmVyRW5kID0gbmV3QnVmICsgKGJ1ZmZlckVuZCAt
IGJ1ZmZlclB0cik7CisgICAgICBidWZmZXJQdHIgPSBidWZmZXIgPSBuZXdCdWY7CisjZW5kaWYg
IC8qIG5vdCBkZWZpbmVkIFhNTF9DT05URVhUX0JZVEVTICovCisgICAgfQorICAgIGV2ZW50UHRy
ID0gZXZlbnRFbmRQdHIgPSBOVUxMOworICAgIHBvc2l0aW9uUHRyID0gTlVMTDsKKyAgfQorICBy
ZXR1cm4gYnVmZmVyRW5kOworfQorCitlbnVtIFhNTF9TdGF0dXMgWE1MQ0FMTAorWE1MX1N0b3BQ
YXJzZXIoWE1MX1BhcnNlciBwYXJzZXIsIFhNTF9Cb29sIHJlc3VtYWJsZSkKK3sKKyAgc3dpdGNo
IChwc19wYXJzaW5nKSB7CisgIGNhc2UgWE1MX1NVU1BFTkRFRDoKKyAgICBpZiAocmVzdW1hYmxl
KSB7CisgICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfU1VTUEVOREVEOworICAgICAgcmV0dXJu
IFhNTF9TVEFUVVNfRVJST1I7CisgICAgfQorICAgIHBzX3BhcnNpbmcgPSBYTUxfRklOSVNIRUQ7
CisgICAgYnJlYWs7CisgIGNhc2UgWE1MX0ZJTklTSEVEOgorICAgIGVycm9yQ29kZSA9IFhNTF9F
UlJPUl9GSU5JU0hFRDsKKyAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAgZGVmYXVsdDoK
KyAgICBpZiAocmVzdW1hYmxlKSB7CisjaWZkZWYgWE1MX0RURAorICAgICAgaWYgKGlzUGFyYW1F
bnRpdHkpIHsKKyAgICAgICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX1NVU1BFTkRfUEU7CisgICAg
ICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICAgICAgfQorI2VuZGlmCisgICAgICBwc19w
YXJzaW5nID0gWE1MX1NVU1BFTkRFRDsKKyAgICB9CisgICAgZWxzZQorICAgICAgcHNfcGFyc2lu
ZyA9IFhNTF9GSU5JU0hFRDsKKyAgfQorICByZXR1cm4gWE1MX1NUQVRVU19PSzsKK30KKworZW51
bSBYTUxfU3RhdHVzIFhNTENBTEwKK1hNTF9SZXN1bWVQYXJzZXIoWE1MX1BhcnNlciBwYXJzZXIp
Cit7CisgIGVudW0gWE1MX1N0YXR1cyByZXN1bHQgPSBYTUxfU1RBVFVTX09LOworCisgIGlmIChw
c19wYXJzaW5nICE9IFhNTF9TVVNQRU5ERUQpIHsKKyAgICBlcnJvckNvZGUgPSBYTUxfRVJST1Jf
Tk9UX1NVU1BFTkRFRDsKKyAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAgfQorICBwc19w
YXJzaW5nID0gWE1MX1BBUlNJTkc7CisKKyAgZXJyb3JDb2RlID0gcHJvY2Vzc29yKHBhcnNlciwg
YnVmZmVyUHRyLCBwYXJzZUVuZFB0ciwgJmJ1ZmZlclB0cik7CisKKyAgaWYgKGVycm9yQ29kZSAh
PSBYTUxfRVJST1JfTk9ORSkgeworICAgIGV2ZW50RW5kUHRyID0gZXZlbnRQdHI7CisgICAgcHJv
Y2Vzc29yID0gZXJyb3JQcm9jZXNzb3I7CisgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7Cisg
IH0KKyAgZWxzZSB7CisgICAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgICAgY2FzZSBYTUxfU1VT
UEVOREVEOgorICAgICAgcmVzdWx0ID0gWE1MX1NUQVRVU19TVVNQRU5ERUQ7CisgICAgICBicmVh
azsKKyAgICBjYXNlIFhNTF9JTklUSUFMSVpFRDoKKyAgICBjYXNlIFhNTF9QQVJTSU5HOgorICAg
ICAgaWYgKHBzX2ZpbmFsQnVmZmVyKSB7CisgICAgICAgIHBzX3BhcnNpbmcgPSBYTUxfRklOSVNI
RUQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgZGVmYXVsdDogOworICAg
IH0KKyAgfQorCisgIFhtbFVwZGF0ZVBvc2l0aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgYnVm
ZmVyUHRyLCAmcG9zaXRpb24pOworICBwb3NpdGlvblB0ciA9IGJ1ZmZlclB0cjsKKyAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBYTUxDQUxMCitYTUxfR2V0UGFyc2luZ1N0YXR1cyhYTUxfUGFy
c2VyIHBhcnNlciwgWE1MX1BhcnNpbmdTdGF0dXMgKnN0YXR1cykKK3sKKyAgYXNzZXJ0KHN0YXR1
cyAhPSBOVUxMKTsKKyAgKnN0YXR1cyA9IHBhcnNlci0+bV9wYXJzaW5nU3RhdHVzOworfQorCitl
bnVtIFhNTF9FcnJvciBYTUxDQUxMCitYTUxfR2V0RXJyb3JDb2RlKFhNTF9QYXJzZXIgcGFyc2Vy
KQoreworICByZXR1cm4gZXJyb3JDb2RlOworfQorCitYTUxfSW5kZXggWE1MQ0FMTAorWE1MX0dl
dEN1cnJlbnRCeXRlSW5kZXgoWE1MX1BhcnNlciBwYXJzZXIpCit7CisgIGlmIChldmVudFB0cikK
KyAgICByZXR1cm4gcGFyc2VFbmRCeXRlSW5kZXggLSAocGFyc2VFbmRQdHIgLSBldmVudFB0cik7
CisgIHJldHVybiAtMTsKK30KKworaW50IFhNTENBTEwKK1hNTF9HZXRDdXJyZW50Qnl0ZUNvdW50
KFhNTF9QYXJzZXIgcGFyc2VyKQoreworICBpZiAoZXZlbnRFbmRQdHIgJiYgZXZlbnRQdHIpCisg
ICAgcmV0dXJuIChpbnQpKGV2ZW50RW5kUHRyIC0gZXZlbnRQdHIpOworICByZXR1cm4gMDsKK30K
KworY29uc3QgY2hhciAqIFhNTENBTEwKK1hNTF9HZXRJbnB1dENvbnRleHQoWE1MX1BhcnNlciBw
YXJzZXIsIGludCAqb2Zmc2V0LCBpbnQgKnNpemUpCit7CisjaWZkZWYgWE1MX0NPTlRFWFRfQllU
RVMKKyAgaWYgKGV2ZW50UHRyICYmIGJ1ZmZlcikgeworICAgICpvZmZzZXQgPSAoaW50KShldmVu
dFB0ciAtIGJ1ZmZlcik7CisgICAgKnNpemUgICA9IChpbnQpKGJ1ZmZlckVuZCAtIGJ1ZmZlcik7
CisgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgfQorI2VuZGlmIC8qIGRlZmluZWQgWE1MX0NPTlRFWFRf
QllURVMgKi8KKyAgcmV0dXJuIChjaGFyICopIDA7Cit9CisKK1hNTF9TaXplIFhNTENBTEwKK1hN
TF9HZXRDdXJyZW50TGluZU51bWJlcihYTUxfUGFyc2VyIHBhcnNlcikKK3sKKyAgaWYgKGV2ZW50
UHRyICYmIGV2ZW50UHRyID49IHBvc2l0aW9uUHRyKSB7CisgICAgWG1sVXBkYXRlUG9zaXRpb24o
ZW5jb2RpbmcsIHBvc2l0aW9uUHRyLCBldmVudFB0ciwgJnBvc2l0aW9uKTsKKyAgICBwb3NpdGlv
blB0ciA9IGV2ZW50UHRyOworICB9CisgIHJldHVybiBwb3NpdGlvbi5saW5lTnVtYmVyICsgMTsK
K30KKworWE1MX1NpemUgWE1MQ0FMTAorWE1MX0dldEN1cnJlbnRDb2x1bW5OdW1iZXIoWE1MX1Bh
cnNlciBwYXJzZXIpCit7CisgIGlmIChldmVudFB0ciAmJiBldmVudFB0ciA+PSBwb3NpdGlvblB0
cikgeworICAgIFhtbFVwZGF0ZVBvc2l0aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgZXZlbnRQ
dHIsICZwb3NpdGlvbik7CisgICAgcG9zaXRpb25QdHIgPSBldmVudFB0cjsKKyAgfQorICByZXR1
cm4gcG9zaXRpb24uY29sdW1uTnVtYmVyOworfQorCit2b2lkIFhNTENBTEwKK1hNTF9GcmVlQ29u
dGVudE1vZGVsKFhNTF9QYXJzZXIgcGFyc2VyLCBYTUxfQ29udGVudCAqbW9kZWwpCit7CisgIEZS
RUUobW9kZWwpOworfQorCit2b2lkICogWE1MQ0FMTAorWE1MX01lbU1hbGxvYyhYTUxfUGFyc2Vy
IHBhcnNlciwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBNQUxMT0Moc2l6ZSk7Cit9CisKK3Zv
aWQgKiBYTUxDQUxMCitYTUxfTWVtUmVhbGxvYyhYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqcHRy
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuIFJFQUxMT0MocHRyLCBzaXplKTsKK30KKwordm9p
ZCBYTUxDQUxMCitYTUxfTWVtRnJlZShYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqcHRyKQorewor
ICBGUkVFKHB0cik7Cit9CisKK3ZvaWQgWE1MQ0FMTAorWE1MX0RlZmF1bHRDdXJyZW50KFhNTF9Q
YXJzZXIgcGFyc2VyKQoreworICBpZiAoZGVmYXVsdEhhbmRsZXIpIHsKKyAgICBpZiAob3Blbklu
dGVybmFsRW50aXRpZXMpCisgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwKKyAgICAgICAgICAg
ICAgICAgICAgaW50ZXJuYWxFbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgb3BlbkludGVy
bmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRQdHIsCisgICAgICAgICAgICAgICAgICAgIG9wZW5J
bnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50RW5kUHRyKTsKKyAgICBlbHNlCisgICAgICBy
ZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jb2RpbmcsIGV2ZW50UHRyLCBldmVudEVuZFB0cik7Cisg
IH0KK30KKworY29uc3QgWE1MX0xDaGFyICogWE1MQ0FMTAorWE1MX0Vycm9yU3RyaW5nKGVudW0g
WE1MX0Vycm9yIGNvZGUpCit7CisgIHN0YXRpYyBjb25zdCBYTUxfTENoYXIqIGNvbnN0IG1lc3Nh
Z2VbXSA9IHsKKyAgICAwLAorICAgIFhNTF9MKCJvdXQgb2YgbWVtb3J5IiksCisgICAgWE1MX0wo
InN5bnRheCBlcnJvciIpLAorICAgIFhNTF9MKCJubyBlbGVtZW50IGZvdW5kIiksCisgICAgWE1M
X0woIm5vdCB3ZWxsLWZvcm1lZCAoaW52YWxpZCB0b2tlbikiKSwKKyAgICBYTUxfTCgidW5jbG9z
ZWQgdG9rZW4iKSwKKyAgICBYTUxfTCgicGFydGlhbCBjaGFyYWN0ZXIiKSwKKyAgICBYTUxfTCgi
bWlzbWF0Y2hlZCB0YWciKSwKKyAgICBYTUxfTCgiZHVwbGljYXRlIGF0dHJpYnV0ZSIpLAorICAg
IFhNTF9MKCJqdW5rIGFmdGVyIGRvY3VtZW50IGVsZW1lbnQiKSwKKyAgICBYTUxfTCgiaWxsZWdh
bCBwYXJhbWV0ZXIgZW50aXR5IHJlZmVyZW5jZSIpLAorICAgIFhNTF9MKCJ1bmRlZmluZWQgZW50
aXR5IiksCisgICAgWE1MX0woInJlY3Vyc2l2ZSBlbnRpdHkgcmVmZXJlbmNlIiksCisgICAgWE1M
X0woImFzeW5jaHJvbm91cyBlbnRpdHkiKSwKKyAgICBYTUxfTCgicmVmZXJlbmNlIHRvIGludmFs
aWQgY2hhcmFjdGVyIG51bWJlciIpLAorICAgIFhNTF9MKCJyZWZlcmVuY2UgdG8gYmluYXJ5IGVu
dGl0eSIpLAorICAgIFhNTF9MKCJyZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZW50aXR5IGluIGF0dHJp
YnV0ZSIpLAorICAgIFhNTF9MKCJYTUwgb3IgdGV4dCBkZWNsYXJhdGlvbiBub3QgYXQgc3RhcnQg
b2YgZW50aXR5IiksCisgICAgWE1MX0woInVua25vd24gZW5jb2RpbmciKSwKKyAgICBYTUxfTCgi
ZW5jb2Rpbmcgc3BlY2lmaWVkIGluIFhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvcnJlY3QiKSwKKyAg
ICBYTUxfTCgidW5jbG9zZWQgQ0RBVEEgc2VjdGlvbiIpLAorICAgIFhNTF9MKCJlcnJvciBpbiBw
cm9jZXNzaW5nIGV4dGVybmFsIGVudGl0eSByZWZlcmVuY2UiKSwKKyAgICBYTUxfTCgiZG9jdW1l
bnQgaXMgbm90IHN0YW5kYWxvbmUiKSwKKyAgICBYTUxfTCgidW5leHBlY3RlZCBwYXJzZXIgc3Rh
dGUgLSBwbGVhc2Ugc2VuZCBhIGJ1ZyByZXBvcnQiKSwKKyAgICBYTUxfTCgiZW50aXR5IGRlY2xh
cmVkIGluIHBhcmFtZXRlciBlbnRpdHkiKSwKKyAgICBYTUxfTCgicmVxdWVzdGVkIGZlYXR1cmUg
cmVxdWlyZXMgWE1MX0RURCBzdXBwb3J0IGluIEV4cGF0IiksCisgICAgWE1MX0woImNhbm5vdCBj
aGFuZ2Ugc2V0dGluZyBvbmNlIHBhcnNpbmcgaGFzIGJlZ3VuIiksCisgICAgWE1MX0woInVuYm91
bmQgcHJlZml4IiksCisgICAgWE1MX0woIm11c3Qgbm90IHVuZGVjbGFyZSBwcmVmaXgiKSwKKyAg
ICBYTUxfTCgiaW5jb21wbGV0ZSBtYXJrdXAgaW4gcGFyYW1ldGVyIGVudGl0eSIpLAorICAgIFhN
TF9MKCJYTUwgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkIiksCisgICAgWE1MX0woInRleHQg
ZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkIiksCisgICAgWE1MX0woImlsbGVnYWwgY2hhcmFj
dGVyKHMpIGluIHB1YmxpYyBpZCIpLAorICAgIFhNTF9MKCJwYXJzZXIgc3VzcGVuZGVkIiksCisg
ICAgWE1MX0woInBhcnNlciBub3Qgc3VzcGVuZGVkIiksCisgICAgWE1MX0woInBhcnNpbmcgYWJv
cnRlZCIpLAorICAgIFhNTF9MKCJwYXJzaW5nIGZpbmlzaGVkIiksCisgICAgWE1MX0woImNhbm5v
dCBzdXNwZW5kIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkiKSwKKyAgICBYTUxfTCgicmVz
ZXJ2ZWQgcHJlZml4ICh4bWwpIG11c3Qgbm90IGJlIHVuZGVjbGFyZWQgb3IgYm91bmQgdG8gYW5v
dGhlciBuYW1lc3BhY2UgbmFtZSIpLAorICAgIFhNTF9MKCJyZXNlcnZlZCBwcmVmaXggKHhtbG5z
KSBtdXN0IG5vdCBiZSBkZWNsYXJlZCBvciB1bmRlY2xhcmVkIiksCisgICAgWE1MX0woInByZWZp
eCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUgb2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1l
cyIpCisgIH07CisgIGlmIChjb2RlID4gMCAmJiBjb2RlIDwgc2l6ZW9mKG1lc3NhZ2UpL3NpemVv
ZihtZXNzYWdlWzBdKSkKKyAgICByZXR1cm4gbWVzc2FnZVtjb2RlXTsKKyAgcmV0dXJuIE5VTEw7
Cit9CisKK2NvbnN0IFhNTF9MQ2hhciAqIFhNTENBTEwKK1hNTF9FeHBhdFZlcnNpb24odm9pZCkg
eworCisgIC8qIFYxIGlzIHVzZWQgdG8gc3RyaW5nLWl6ZSB0aGUgdmVyc2lvbiBudW1iZXIuIEhv
d2V2ZXIsIGl0IHdvdWxkCisgICAgIHN0cmluZy1pemUgdGhlIGFjdHVhbCB2ZXJzaW9uIG1hY3Jv
ICpuYW1lcyogdW5sZXNzIHdlIGdldCB0aGVtCisgICAgIHN1YnN0aXR1dGVkIGJlZm9yZSBiZWlu
ZyBwYXNzZWQgdG8gVjEuIENQUCBpcyBkZWZpbmVkIHRvIGV4cGFuZAorICAgICBhIG1hY3JvLCB0
aGVuIHJlc2NhbiBmb3IgbW9yZSBleHBhbnNpb25zLiBUaHVzLCB3ZSB1c2UgVjIgdG8gZXhwYW5k
CisgICAgIHRoZSB2ZXJzaW9uIG1hY3JvcywgdGhlbiBDUFAgd2lsbCBleHBhbmQgdGhlIHJlc3Vs
dGluZyBWMSgpIG1hY3JvCisgICAgIHdpdGggdGhlIGNvcnJlY3QgbnVtZXJhbHMuICovCisgIC8q
ICMjIyBJJ20gYXNzdW1pbmcgY3BwIGlzIHBvcnRhYmxlIGluIHRoaXMgcmVzcGVjdC4uLiAqLwor
CisjZGVmaW5lIFYxKGEsYixjKSBYTUxfTCgjYSlYTUxfTCgiLiIpWE1MX0woI2IpWE1MX0woIi4i
KVhNTF9MKCNjKQorI2RlZmluZSBWMihhLGIsYykgWE1MX0woImV4cGF0XyIpVjEoYSxiLGMpCisK
KyAgcmV0dXJuIFYyKFhNTF9NQUpPUl9WRVJTSU9OLCBYTUxfTUlOT1JfVkVSU0lPTiwgWE1MX01J
Q1JPX1ZFUlNJT04pOworCisjdW5kZWYgVjEKKyN1bmRlZiBWMgorfQorCitYTUxfRXhwYXRfVmVy
c2lvbiBYTUxDQUxMCitYTUxfRXhwYXRWZXJzaW9uSW5mbyh2b2lkKQoreworICBYTUxfRXhwYXRf
VmVyc2lvbiB2ZXJzaW9uOworCisgIHZlcnNpb24ubWFqb3IgPSBYTUxfTUFKT1JfVkVSU0lPTjsK
KyAgdmVyc2lvbi5taW5vciA9IFhNTF9NSU5PUl9WRVJTSU9OOworICB2ZXJzaW9uLm1pY3JvID0g
WE1MX01JQ1JPX1ZFUlNJT047CisKKyAgcmV0dXJuIHZlcnNpb247Cit9CisKK2NvbnN0IFhNTF9G
ZWF0dXJlICogWE1MQ0FMTAorWE1MX0dldEZlYXR1cmVMaXN0KHZvaWQpCit7CisgIHN0YXRpYyBj
b25zdCBYTUxfRmVhdHVyZSBmZWF0dXJlc1tdID0geworICAgIHtYTUxfRkVBVFVSRV9TSVpFT0Zf
WE1MX0NIQVIsICBYTUxfTCgic2l6ZW9mKFhNTF9DaGFyKSIpLAorICAgICBzaXplb2YoWE1MX0No
YXIpfSwKKyAgICB7WE1MX0ZFQVRVUkVfU0laRU9GX1hNTF9MQ0hBUiwgWE1MX0woInNpemVvZihY
TUxfTENoYXIpIiksCisgICAgIHNpemVvZihYTUxfTENoYXIpfSwKKyNpZmRlZiBYTUxfVU5JQ09E
RQorICAgIHtYTUxfRkVBVFVSRV9VTklDT0RFLCAgICAgICAgICBYTUxfTCgiWE1MX1VOSUNPREUi
KSwgMH0sCisjZW5kaWYKKyNpZmRlZiBYTUxfVU5JQ09ERV9XQ0hBUl9UCisgICAge1hNTF9GRUFU
VVJFX1VOSUNPREVfV0NIQVJfVCwgIFhNTF9MKCJYTUxfVU5JQ09ERV9XQ0hBUl9UIiksIDB9LAor
I2VuZGlmCisjaWZkZWYgWE1MX0RURAorICAgIHtYTUxfRkVBVFVSRV9EVEQsICAgICAgICAgICAg
ICBYTUxfTCgiWE1MX0RURCIpLCAwfSwKKyNlbmRpZgorI2lmZGVmIFhNTF9DT05URVhUX0JZVEVT
CisgICAge1hNTF9GRUFUVVJFX0NPTlRFWFRfQllURVMsICAgIFhNTF9MKCJYTUxfQ09OVEVYVF9C
WVRFUyIpLAorICAgICBYTUxfQ09OVEVYVF9CWVRFU30sCisjZW5kaWYKKyNpZmRlZiBYTUxfTUlO
X1NJWkUKKyAgICB7WE1MX0ZFQVRVUkVfTUlOX1NJWkUsICAgICAgICAgWE1MX0woIlhNTF9NSU5f
U0laRSIpLCAwfSwKKyNlbmRpZgorI2lmZGVmIFhNTF9OUworICAgIHtYTUxfRkVBVFVSRV9OUywg
ICAgICAgICAgICAgICBYTUxfTCgiWE1MX05TIiksIDB9LAorI2VuZGlmCisjaWZkZWYgWE1MX0xB
UkdFX1NJWkUKKyAgICB7WE1MX0ZFQVRVUkVfTEFSR0VfU0laRSwgICAgICAgWE1MX0woIlhNTF9M
QVJHRV9TSVpFIiksIDB9LAorI2VuZGlmCisjaWZkZWYgWE1MX0FUVFJfSU5GTworICAgIHtYTUxf
RkVBVFVSRV9BVFRSX0lORk8sICAgICAgICBYTUxfTCgiWE1MX0FUVFJfSU5GTyIpLCAwfSwKKyNl
bmRpZgorICAgIHtYTUxfRkVBVFVSRV9FTkQsICAgICAgICAgICAgICBOVUxMLCAwfQorICB9Owor
CisgIHJldHVybiBmZWF0dXJlczsKK30KKworLyogSW5pdGlhbGx5IHRhZy0+cmF3TmFtZSBhbHdh
eXMgcG9pbnRzIGludG8gdGhlIHBhcnNlIGJ1ZmZlcjsKKyAgIGZvciB0aG9zZSBUQUcgaW5zdGFu
Y2VzIG9wZW5lZCB3aGlsZSB0aGUgY3VycmVudCBwYXJzZSBidWZmZXIgd2FzCisgICBwcm9jZXNz
ZWQsIGFuZCBub3QgeWV0IGNsb3NlZCwgd2UgbmVlZCB0byBzdG9yZSB0YWctPnJhd05hbWUgaW4g
YSBtb3JlCisgICBwZXJtYW5lbnQgbG9jYXRpb24sIHNpbmNlIHRoZSBwYXJzZSBidWZmZXIgaXMg
YWJvdXQgdG8gYmUgZGlzY2FyZGVkLgorKi8KK3N0YXRpYyBYTUxfQm9vbAorc3RvcmVSYXdOYW1l
cyhYTUxfUGFyc2VyIHBhcnNlcikKK3sKKyAgVEFHICp0YWcgPSB0YWdTdGFjazsKKyAgd2hpbGUg
KHRhZykgeworICAgIGludCBidWZTaXplOworICAgIGludCBuYW1lTGVuID0gc2l6ZW9mKFhNTF9D
aGFyKSAqICh0YWctPm5hbWUuc3RyTGVuICsgMSk7CisgICAgY2hhciAqcmF3TmFtZUJ1ZiA9IHRh
Zy0+YnVmICsgbmFtZUxlbjsKKyAgICAvKiBTdG9wIGlmIGFscmVhZHkgc3RvcmVkLiAgU2luY2Ug
dGFnU3RhY2sgaXMgYSBzdGFjaywgd2UgY2FuIHN0b3AKKyAgICAgICBhdCB0aGUgZmlyc3QgZW50
cnkgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvcGllZDsgZXZlcnl0aGluZworICAgICAgIGJlbG93
IGl0IGluIHRoZSBzdGFjayBpcyBhbHJlYWR5IGJlZW4gYWNjb3VudGVkIGZvciBpbiBhCisgICAg
ICAgcHJldmlvdXMgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorICAgICovCisgICAgaWYgKHRhZy0+
cmF3TmFtZSA9PSByYXdOYW1lQnVmKQorICAgICAgYnJlYWs7CisgICAgLyogRm9yIHJlLXVzZSBw
dXJwb3NlcyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZQorICAgICAgIHNpemUgb2YgdGFnLT5i
dWYgaXMgYSBtdWx0aXBsZSBvZiBzaXplb2YoWE1MX0NoYXIpLgorICAgICovCisgICAgYnVmU2l6
ZSA9IG5hbWVMZW4gKyBST1VORF9VUCh0YWctPnJhd05hbWVMZW5ndGgsIHNpemVvZihYTUxfQ2hh
cikpOworICAgIGlmIChidWZTaXplID4gdGFnLT5idWZFbmQgLSB0YWctPmJ1ZikgeworICAgICAg
Y2hhciAqdGVtcCA9IChjaGFyICopUkVBTExPQyh0YWctPmJ1ZiwgYnVmU2l6ZSk7CisgICAgICBp
ZiAodGVtcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWE1MX0ZBTFNFOworICAgICAgLyogaWYg
dGFnLT5uYW1lLnN0ciBwb2ludHMgdG8gdGFnLT5idWYgKG9ubHkgd2hlbiBuYW1lc3BhY2UKKyAg
ICAgICAgIHByb2Nlc3NpbmcgaXMgb2ZmKSB0aGVuIHdlIGhhdmUgdG8gdXBkYXRlIGl0CisgICAg
ICAqLworICAgICAgaWYgKHRhZy0+bmFtZS5zdHIgPT0gKFhNTF9DaGFyICopdGFnLT5idWYpCisg
ICAgICAgIHRhZy0+bmFtZS5zdHIgPSAoWE1MX0NoYXIgKil0ZW1wOworICAgICAgLyogaWYgdGFn
LT5uYW1lLmxvY2FsUGFydCBpcyBzZXQgKHdoZW4gbmFtZXNwYWNlIHByb2Nlc3NpbmcgaXMgb24p
CisgICAgICAgICB0aGVuIHVwZGF0ZSBpdCBhcyB3ZWxsLCBzaW5jZSBpdCB3aWxsIGFsd2F5cyBw
b2ludCBpbnRvIHRhZy0+YnVmCisgICAgICAqLworICAgICAgaWYgKHRhZy0+bmFtZS5sb2NhbFBh
cnQpCisgICAgICAgIHRhZy0+bmFtZS5sb2NhbFBhcnQgPSAoWE1MX0NoYXIgKil0ZW1wICsgKHRh
Zy0+bmFtZS5sb2NhbFBhcnQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoWE1MX0NoYXIgKil0YWctPmJ1Zik7CisgICAgICB0YWctPmJ1ZiA9IHRl
bXA7CisgICAgICB0YWctPmJ1ZkVuZCA9IHRlbXAgKyBidWZTaXplOworICAgICAgcmF3TmFtZUJ1
ZiA9IHRlbXAgKyBuYW1lTGVuOworICAgIH0KKyAgICBtZW1jcHkocmF3TmFtZUJ1ZiwgdGFnLT5y
YXdOYW1lLCB0YWctPnJhd05hbWVMZW5ndGgpOworICAgIHRhZy0+cmF3TmFtZSA9IHJhd05hbWVC
dWY7CisgICAgdGFnID0gdGFnLT5wYXJlbnQ7CisgIH0KKyAgcmV0dXJuIFhNTF9UUlVFOworfQor
CitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAorY29udGVudFByb2Nlc3NvcihYTUxfUGFy
c2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsCisgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
KmVuZFB0cikKK3sKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gZG9Db250ZW50KHBhcnNlciwg
MCwgZW5jb2RpbmcsIHN0YXJ0LCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmRQdHIsIChYTUxfQm9vbCkhcHNfZmluYWxCdWZmZXIpOworICBpZiAocmVzdWx0ID09
IFhNTF9FUlJPUl9OT05FKSB7CisgICAgaWYgKCFzdG9yZVJhd05hbWVzKHBhcnNlcikpCisgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAorZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vz
c29yKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQorewor
ICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBpbml0aWFsaXplRW5jb2RpbmcocGFyc2VyKTsKKyAg
aWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkKKyAgICByZXR1cm4gcmVzdWx0OworICBwcm9j
ZXNzb3IgPSBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IyOworICByZXR1cm4gZXh0ZXJuYWxF
bnRpdHlJbml0UHJvY2Vzc29yMihwYXJzZXIsIHN0YXJ0LCBlbmQsIGVuZFB0cik7Cit9CisKK3N0
YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCitleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3Iy
KFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQorewor
ICBjb25zdCBjaGFyICpuZXh0ID0gc3RhcnQ7IC8qIFhtbENvbnRlbnRUb2sgZG9lc24ndCBhbHdh
eXMgc2V0IHRoZSBsYXN0IGFyZyAqLworICBpbnQgdG9rID0gWG1sQ29udGVudFRvayhlbmNvZGlu
Zywgc3RhcnQsIGVuZCwgJm5leHQpOworICBzd2l0Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tf
Qk9NOgorICAgIC8qIElmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHRoaXMgd291
bGQgY2F1c2UgdGhlIG5leHQgc3RhZ2UsCisgICAgICAgaS5lLiBleHRlcm5hbEVudGl0eUluaXRQ
cm9jZXNzb3IzLCB0byBwYXNzIGNvbnRyb2wgZGlyZWN0bHkgdG8KKyAgICAgICBkb0NvbnRlbnQg
KGJ5IGRldGVjdGluZyBYTUxfVE9LX05PTkUpIHdpdGhvdXQgcHJvY2Vzc2luZyBhbnkgeG1sIHRl
eHQKKyAgICAgICBkZWNsYXJhdGlvbiAtIGNhdXNpbmcgdGhlIGVycm9yIFhNTF9FUlJPUl9NSVNQ
TEFDRURfWE1MX1BJIGluIGRvQ29udGVudC4KKyAgICAqLworICAgIGlmIChuZXh0ID09IGVuZCAm
JiAhcHNfZmluYWxCdWZmZXIpIHsKKyAgICAgICplbmRQdHIgPSBuZXh0OworICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT05FOworICAgIH0KKyAgICBzdGFydCA9IG5leHQ7CisgICAgYnJlYWs7Cisg
IGNhc2UgWE1MX1RPS19QQVJUSUFMOgorICAgIGlmICghcHNfZmluYWxCdWZmZXIpIHsKKyAgICAg
ICplbmRQdHIgPSBzdGFydDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICB9Cisg
ICAgZXZlbnRQdHIgPSBzdGFydDsKKyAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VO
OworICBjYXNlIFhNTF9UT0tfUEFSVElBTF9DSEFSOgorICAgIGlmICghcHNfZmluYWxCdWZmZXIp
IHsKKyAgICAgICplbmRQdHIgPSBzdGFydDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsK
KyAgICB9CisgICAgZXZlbnRQdHIgPSBzdGFydDsKKyAgICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJ
QUxfQ0hBUjsKKyAgfQorICBwcm9jZXNzb3IgPSBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3Iz
OworICByZXR1cm4gZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yMyhwYXJzZXIsIHN0YXJ0LCBl
bmQsIGVuZFB0cik7Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCitleHRlcm5h
bEVudGl0eUluaXRQcm9jZXNzb3IzKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICoqZW5kUHRyKQoreworICBpbnQgdG9rOworICBjb25zdCBjaGFyICpuZXh0ID0gc3Rh
cnQ7IC8qIFhtbENvbnRlbnRUb2sgZG9lc24ndCBhbHdheXMgc2V0IHRoZSBsYXN0IGFyZyAqLwor
ICBldmVudFB0ciA9IHN0YXJ0OworICB0b2sgPSBYbWxDb250ZW50VG9rKGVuY29kaW5nLCBzdGFy
dCwgZW5kLCAmbmV4dCk7CisgIGV2ZW50RW5kUHRyID0gbmV4dDsKKworICBzd2l0Y2ggKHRvaykg
eworICBjYXNlIFhNTF9UT0tfWE1MX0RFQ0w6CisgICAgeworICAgICAgZW51bSBYTUxfRXJyb3Ig
cmVzdWx0OworICAgICAgcmVzdWx0ID0gcHJvY2Vzc1htbERlY2wocGFyc2VyLCAxLCBzdGFydCwg
bmV4dCk7CisgICAgICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgICAgICBjYXNlIFhNTF9T
VVNQRU5ERUQ6CisgICAgICAgICplbmRQdHIgPSBuZXh0OworICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PTkU7CisgICAgICBjYXNlIFhNTF9GSU5JU0hFRDoKKyAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9BQk9SVEVEOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgc3RhcnQgPSBuZXh0OworICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBYTUxfVE9LX1BBUlRJQUw6CisgICAgaWYg
KCFwc19maW5hbEJ1ZmZlcikgeworICAgICAgKmVuZFB0ciA9IHN0YXJ0OworICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT05FOworICAgIH0KKyAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RP
S0VOOworICBjYXNlIFhNTF9UT0tfUEFSVElBTF9DSEFSOgorICAgIGlmICghcHNfZmluYWxCdWZm
ZXIpIHsKKyAgICAgICplbmRQdHIgPSBzdGFydDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9O
RTsKKyAgICB9CisgICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVI7CisgIH0KKyAgcHJv
Y2Vzc29yID0gZXh0ZXJuYWxFbnRpdHlDb250ZW50UHJvY2Vzc29yOworICB0YWdMZXZlbCA9IDE7
CisgIHJldHVybiBleHRlcm5hbEVudGl0eUNvbnRlbnRQcm9jZXNzb3IocGFyc2VyLCBzdGFydCwg
ZW5kLCBlbmRQdHIpOworfQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAorZXh0ZXJu
YWxFbnRpdHlDb250ZW50UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQoreworICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBk
b0NvbnRlbnQocGFyc2VyLCAxLCBlbmNvZGluZywgc3RhcnQsIGVuZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZFB0ciwgKFhNTF9Cb29sKSFwc19maW5hbEJ1ZmZlcik7
CisgIGlmIChyZXN1bHQgPT0gWE1MX0VSUk9SX05PTkUpIHsKKyAgICBpZiAoIXN0b3JlUmF3TmFt
ZXMocGFyc2VyKSkKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICB9CisgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorZG9Db250ZW50KFhNTF9Q
YXJzZXIgcGFyc2VyLAorICAgICAgICAgIGludCBzdGFydFRhZ0xldmVsLAorICAgICAgICAgIGNv
bnN0IEVOQ09ESU5HICplbmMsCisgICAgICAgICAgY29uc3QgY2hhciAqcywKKyAgICAgICAgICBj
b25zdCBjaGFyICplbmQsCisgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIsCisgICAgICAg
ICAgWE1MX0Jvb2wgaGF2ZU1vcmUpCit7CisgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0
aW9uICovCisgIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7CisKKyAgY29uc3QgY2hhciAqKmV2ZW50
UFA7CisgIGNvbnN0IGNoYXIgKipldmVudEVuZFBQOworICBpZiAoZW5jID09IGVuY29kaW5nKSB7
CisgICAgZXZlbnRQUCA9ICZldmVudFB0cjsKKyAgICBldmVudEVuZFBQID0gJmV2ZW50RW5kUHRy
OworICB9CisgIGVsc2UgeworICAgIGV2ZW50UFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5p
bnRlcm5hbEV2ZW50UHRyKTsKKyAgICBldmVudEVuZFBQID0gJihvcGVuSW50ZXJuYWxFbnRpdGll
cy0+aW50ZXJuYWxFdmVudEVuZFB0cik7CisgIH0KKyAgKmV2ZW50UFAgPSBzOworCisgIGZvciAo
OzspIHsKKyAgICBjb25zdCBjaGFyICpuZXh0ID0gczsgLyogWG1sQ29udGVudFRvayBkb2Vzbid0
IGFsd2F5cyBzZXQgdGhlIGxhc3QgYXJnICovCisgICAgaW50IHRvayA9IFhtbENvbnRlbnRUb2so
ZW5jLCBzLCBlbmQsICZuZXh0KTsKKyAgICAqZXZlbnRFbmRQUCA9IG5leHQ7CisgICAgc3dpdGNo
ICh0b2spIHsKKyAgICBjYXNlIFhNTF9UT0tfVFJBSUxJTkdfQ1I6CisgICAgICBpZiAoaGF2ZU1v
cmUpIHsKKyAgICAgICAgKm5leHRQdHIgPSBzOworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
TkU7CisgICAgICB9CisgICAgICAqZXZlbnRFbmRQUCA9IGVuZDsKKyAgICAgIGlmIChjaGFyYWN0
ZXJEYXRhSGFuZGxlcikgeworICAgICAgICBYTUxfQ2hhciBjID0gMHhBOworICAgICAgICBjaGFy
YWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLCAmYywgMSk7CisgICAgICB9CisgICAgICBlbHNl
IGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywg
cywgZW5kKTsKKyAgICAgIC8qIFdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaW5hbCBidWZmZXIs
IHNob3VsZCB3ZSBjaGVjayBmb3IKKyAgICAgICAgIFhNTF9TVVNQRU5ERUQsIFhNTF9GSU5JU0hF
RD8KKyAgICAgICovCisgICAgICBpZiAoc3RhcnRUYWdMZXZlbCA9PSAwKQorICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX05PX0VMRU1FTlRTOworICAgICAgaWYgKHRhZ0xldmVsICE9IHN0YXJ0VGFn
TGV2ZWwpCisgICAgICAgIHJldHVybiBYTUxfRVJST1JfQVNZTkNfRU5USVRZOworICAgICAgKm5l
eHRQdHIgPSBlbmQ7CisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgY2FzZSBYTUxf
VE9LX05PTkU6CisgICAgICBpZiAoaGF2ZU1vcmUpIHsKKyAgICAgICAgKm5leHRQdHIgPSBzOwor
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICB9CisgICAgICBpZiAoc3RhcnRU
YWdMZXZlbCA+IDApIHsKKyAgICAgICAgaWYgKHRhZ0xldmVsICE9IHN0YXJ0VGFnTGV2ZWwpCisg
ICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BU1lOQ19FTlRJVFk7CisgICAgICAgICpuZXh0UHRy
ID0gczsKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgICAgfQorICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT19FTEVNRU5UUzsKKyAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKKyAg
ICAgICpldmVudFBQID0gbmV4dDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tF
TjsKKyAgICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgICAgIGlmIChoYXZlTW9yZSkgeworICAg
ICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICAg
IH0KKyAgICAgIHJldHVybiBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU47CisgICAgY2FzZSBYTUxf
VE9LX1BBUlRJQUxfQ0hBUjoKKyAgICAgIGlmIChoYXZlTW9yZSkgeworICAgICAgICAqbmV4dFB0
ciA9IHM7CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICAgIH0KKyAgICAgIHJl
dHVybiBYTUxfRVJST1JfUEFSVElBTF9DSEFSOworICAgIGNhc2UgWE1MX1RPS19FTlRJVFlfUkVG
OgorICAgICAgeworICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKKyAgICAgICAgRU5USVRZ
ICplbnRpdHk7CisgICAgICAgIFhNTF9DaGFyIGNoID0gKFhNTF9DaGFyKSBYbWxQcmVkZWZpbmVk
RW50aXR5TmFtZShlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7CisgICAg
ICAgIGlmIChjaCkgeworICAgICAgICAgIGlmIChjaGFyYWN0ZXJEYXRhSGFuZGxlcikKKyAgICAg
ICAgICAgIGNoYXJhY3RlckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsICZjaCwgMSk7CisgICAgICAg
ICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgICByZXBvcnREZWZhdWx0KHBh
cnNlciwgZW5jLCBzLCBuZXh0KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBuYW1lID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOworICAgICAg
ICBpZiAoIW5hbWUpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAg
ICAgIGVudGl0eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLCAmZHRkLT5nZW5lcmFsRW50aXRp
ZXMsIG5hbWUsIDApOworICAgICAgICBwb29sRGlzY2FyZCgmZHRkLT5wb29sKTsKKyAgICAgICAg
LyogRmlyc3QsIGRldGVybWluZSBpZiBhIGNoZWNrIGZvciBhbiBleGlzdGluZyBkZWNsYXJhdGlv
biBpcyBuZWVkZWQ7CisgICAgICAgICAgIGlmIHllcywgY2hlY2sgdGhhdCB0aGUgZW50aXR5IGV4
aXN0cywgYW5kIHRoYXQgaXQgaXMgaW50ZXJuYWwsCisgICAgICAgICAgIG90aGVyd2lzZSBjYWxs
IHRoZSBza2lwcGVkIGVudGl0eSBvciBkZWZhdWx0IGhhbmRsZXIuCisgICAgICAgICovCisgICAg
ICAgIGlmICghZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMgfHwgZHRkLT5zdGFuZGFsb25lKSB7Cisg
ICAgICAgICAgaWYgKCFlbnRpdHkpCisgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VOREVG
SU5FRF9FTlRJVFk7CisgICAgICAgICAgZWxzZSBpZiAoIWVudGl0eS0+aXNfaW50ZXJuYWwpCisg
ICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0VOVElUWV9ERUNMQVJFRF9JTl9QRTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmICghZW50aXR5KSB7CisgICAgICAgICAgaWYgKHNraXBwZWRF
bnRpdHlIYW5kbGVyKQorICAgICAgICAgICAgc2tpcHBlZEVudGl0eUhhbmRsZXIoaGFuZGxlckFy
ZywgbmFtZSwgMCk7CisgICAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAg
ICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKKyAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW50aXR5LT5vcGVuKQorICAgICAgICAgIHJldHVy
biBYTUxfRVJST1JfUkVDVVJTSVZFX0VOVElUWV9SRUY7CisgICAgICAgIGlmIChlbnRpdHktPm5v
dGF0aW9uKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfQklOQVJZX0VOVElUWV9SRUY7Cisg
ICAgICAgIGlmIChlbnRpdHktPnRleHRQdHIpIHsKKyAgICAgICAgICBlbnVtIFhNTF9FcnJvciBy
ZXN1bHQ7CisgICAgICAgICAgaWYgKCFkZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllcykgewor
ICAgICAgICAgICAgaWYgKHNraXBwZWRFbnRpdHlIYW5kbGVyKQorICAgICAgICAgICAgICBza2lw
cGVkRW50aXR5SGFuZGxlcihoYW5kbGVyQXJnLCBlbnRpdHktPm5hbWUsIDApOworICAgICAgICAg
ICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgICAgIHJlcG9ydERlZmF1bHQo
cGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQor
ICAgICAgICAgIHJlc3VsdCA9IHByb2Nlc3NJbnRlcm5hbEVudGl0eShwYXJzZXIsIGVudGl0eSwg
WE1MX0ZBTFNFKTsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChleHRl
cm5hbEVudGl0eVJlZkhhbmRsZXIpIHsKKyAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqY29udGV4
dDsKKyAgICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfVFJVRTsKKyAgICAgICAgICBjb250ZXh0
ID0gZ2V0Q29udGV4dChwYXJzZXIpOworICAgICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxT
RTsKKyAgICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X05PX01FTU9SWTsKKyAgICAgICAgICBpZiAoIWV4dGVybmFsRW50aXR5UmVmSGFuZGxlcihleHRl
cm5hbEVudGl0eVJlZkhhbmRsZXJBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnRpdHktPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW50aXR5LT5zeXN0ZW1JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnRpdHktPnB1YmxpY0lkKSkKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfRVhURVJO
QUxfRU5USVRZX0hBTkRMSU5HOworICAgICAgICAgIHBvb2xEaXNjYXJkKCZ0ZW1wUG9vbCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgcmVw
b3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7CisgICAgICAgIGJyZWFrOworICAgICAg
fQorICAgIGNhc2UgWE1MX1RPS19TVEFSVF9UQUdfTk9fQVRUUzoKKyAgICAgIC8qIGZhbGwgdGhy
b3VnaCAqLworICAgIGNhc2UgWE1MX1RPS19TVEFSVF9UQUdfV0lUSF9BVFRTOgorICAgICAgewor
ICAgICAgICBUQUcgKnRhZzsKKyAgICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OworICAgICAg
ICBYTUxfQ2hhciAqdG9QdHI7CisgICAgICAgIGlmIChmcmVlVGFnTGlzdCkgeworICAgICAgICAg
IHRhZyA9IGZyZWVUYWdMaXN0OworICAgICAgICAgIGZyZWVUYWdMaXN0ID0gZnJlZVRhZ0xpc3Qt
PnBhcmVudDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB0YWcgPSAoVEFH
ICopTUFMTE9DKHNpemVvZihUQUcpKTsKKyAgICAgICAgICBpZiAoIXRhZykKKyAgICAgICAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAgIHRhZy0+YnVmID0gKGNoYXIg
KilNQUxMT0MoSU5JVF9UQUdfQlVGX1NJWkUpOworICAgICAgICAgIGlmICghdGFnLT5idWYpIHsK
KyAgICAgICAgICAgIEZSRUUodGFnKTsKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9f
TUVNT1JZOworICAgICAgICAgIH0KKyAgICAgICAgICB0YWctPmJ1ZkVuZCA9IHRhZy0+YnVmICsg
SU5JVF9UQUdfQlVGX1NJWkU7CisgICAgICAgIH0KKyAgICAgICAgdGFnLT5iaW5kaW5ncyA9IE5V
TEw7CisgICAgICAgIHRhZy0+cGFyZW50ID0gdGFnU3RhY2s7CisgICAgICAgIHRhZ1N0YWNrID0g
dGFnOworICAgICAgICB0YWctPm5hbWUubG9jYWxQYXJ0ID0gTlVMTDsKKyAgICAgICAgdGFnLT5u
YW1lLnByZWZpeCA9IE5VTEw7CisgICAgICAgIHRhZy0+cmF3TmFtZSA9IHMgKyBlbmMtPm1pbkJ5
dGVzUGVyQ2hhcjsKKyAgICAgICAgdGFnLT5yYXdOYW1lTGVuZ3RoID0gWG1sTmFtZUxlbmd0aChl
bmMsIHRhZy0+cmF3TmFtZSk7CisgICAgICAgICsrdGFnTGV2ZWw7CisgICAgICAgIHsKKyAgICAg
ICAgICBjb25zdCBjaGFyICpyYXdOYW1lRW5kID0gdGFnLT5yYXdOYW1lICsgdGFnLT5yYXdOYW1l
TGVuZ3RoOworICAgICAgICAgIGNvbnN0IGNoYXIgKmZyb21QdHIgPSB0YWctPnJhd05hbWU7Cisg
ICAgICAgICAgdG9QdHIgPSAoWE1MX0NoYXIgKil0YWctPmJ1ZjsKKyAgICAgICAgICBmb3IgKDs7
KSB7CisgICAgICAgICAgICBpbnQgYnVmU2l6ZTsKKyAgICAgICAgICAgIGludCBjb252TGVuOwor
ICAgICAgICAgICAgWG1sQ29udmVydChlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICZmcm9t
UHRyLCByYXdOYW1lRW5kLAorICAgICAgICAgICAgICAgICAgICAgICAoSUNIQVIgKiopJnRvUHRy
LCAoSUNIQVIgKil0YWctPmJ1ZkVuZCAtIDEpOworICAgICAgICAgICAgY29udkxlbiA9IChpbnQp
KHRvUHRyIC0gKFhNTF9DaGFyICopdGFnLT5idWYpOworICAgICAgICAgICAgaWYgKGZyb21QdHIg
PT0gcmF3TmFtZUVuZCkgeworICAgICAgICAgICAgICB0YWctPm5hbWUuc3RyTGVuID0gY29udkxl
bjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZT
aXplID0gKGludCkodGFnLT5idWZFbmQgLSB0YWctPmJ1ZikgPDwgMTsKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2hhciAqdGVtcCA9IChjaGFyICopUkVBTExPQyh0YWctPmJ1ZiwgYnVm
U2l6ZSk7CisgICAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgICAgIHRhZy0+YnVmID0gdGVt
cDsKKyAgICAgICAgICAgICAgdGFnLT5idWZFbmQgPSB0ZW1wICsgYnVmU2l6ZTsKKyAgICAgICAg
ICAgICAgdG9QdHIgPSAoWE1MX0NoYXIgKil0ZW1wICsgY29udkxlbjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGFnLT5uYW1lLnN0ciA9IChYTUxfQ2hh
ciAqKXRhZy0+YnVmOworICAgICAgICAqdG9QdHIgPSBYTUxfVCgnXDAnKTsKKyAgICAgICAgcmVz
dWx0ID0gc3RvcmVBdHRzKHBhcnNlciwgZW5jLCBzLCAmKHRhZy0+bmFtZSksICYodGFnLT5iaW5k
aW5ncykpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIGlmIChzdGFydEVsZW1lbnRIYW5kbGVyKQorICAgICAgICAgIHN0YXJ0RWxlbWVudEhh
bmRsZXIoaGFuZGxlckFyZywgdGFnLT5uYW1lLnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBYTUxfQ2hhciAqKilhdHRzKTsKKyAgICAgICAgZWxzZSBpZiAoZGVmYXVs
dEhhbmRsZXIpCisgICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7
CisgICAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wpOworICAgICAgICBicmVhazsKKyAgICAgIH0K
KyAgICBjYXNlIFhNTF9UT0tfRU1QVFlfRUxFTUVOVF9OT19BVFRTOgorICAgICAgLyogZmFsbCB0
aHJvdWdoICovCisgICAgY2FzZSBYTUxfVE9LX0VNUFRZX0VMRU1FTlRfV0lUSF9BVFRTOgorICAg
ICAgeworICAgICAgICBjb25zdCBjaGFyICpyYXdOYW1lID0gcyArIGVuYy0+bWluQnl0ZXNQZXJD
aGFyOworICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7CisgICAgICAgIEJJTkRJTkcgKmJp
bmRpbmdzID0gTlVMTDsKKyAgICAgICAgWE1MX0Jvb2wgbm9FbG1IYW5kbGVycyA9IFhNTF9UUlVF
OworICAgICAgICBUQUdfTkFNRSBuYW1lOworICAgICAgICBuYW1lLnN0ciA9IHBvb2xTdG9yZVN0
cmluZygmdGVtcFBvb2wsIGVuYywgcmF3TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmF3TmFtZSArIFhtbE5hbWVMZW5ndGgoZW5jLCByYXdOYW1lKSk7CisgICAgICAg
IGlmICghbmFtZS5zdHIpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Cisg
ICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKKyAgICAgICAgcmVzdWx0ID0gc3RvcmVBdHRz
KHBhcnNlciwgZW5jLCBzLCAmbmFtZSwgJmJpbmRpbmdzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7
CisgICAgICAgIGlmIChzdGFydEVsZW1lbnRIYW5kbGVyKSB7CisgICAgICAgICAgc3RhcnRFbGVt
ZW50SGFuZGxlcihoYW5kbGVyQXJnLCBuYW1lLnN0ciwgKGNvbnN0IFhNTF9DaGFyICoqKWF0dHMp
OworICAgICAgICAgIG5vRWxtSGFuZGxlcnMgPSBYTUxfRkFMU0U7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGVuZEVsZW1lbnRIYW5kbGVyKSB7CisgICAgICAgICAgaWYgKHN0YXJ0RWxlbWVudEhh
bmRsZXIpCisgICAgICAgICAgICAqZXZlbnRQUCA9ICpldmVudEVuZFBQOworICAgICAgICAgIGVu
ZEVsZW1lbnRIYW5kbGVyKGhhbmRsZXJBcmcsIG5hbWUuc3RyKTsKKyAgICAgICAgICBub0VsbUhh
bmRsZXJzID0gWE1MX0ZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChub0VsbUhhbmRsZXJz
ICYmIGRlZmF1bHRIYW5kbGVyKQorICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMs
IHMsIG5leHQpOworICAgICAgICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKKyAgICAgICAgd2hpbGUg
KGJpbmRpbmdzKSB7CisgICAgICAgICAgQklORElORyAqYiA9IGJpbmRpbmdzOworICAgICAgICAg
IGlmIChlbmROYW1lc3BhY2VEZWNsSGFuZGxlcikKKyAgICAgICAgICAgIGVuZE5hbWVzcGFjZURl
Y2xIYW5kbGVyKGhhbmRsZXJBcmcsIGItPnByZWZpeC0+bmFtZSk7CisgICAgICAgICAgYmluZGlu
Z3MgPSBiaW5kaW5ncy0+bmV4dFRhZ0JpbmRpbmc7CisgICAgICAgICAgYi0+bmV4dFRhZ0JpbmRp
bmcgPSBmcmVlQmluZGluZ0xpc3Q7CisgICAgICAgICAgZnJlZUJpbmRpbmdMaXN0ID0gYjsKKyAg
ICAgICAgICBiLT5wcmVmaXgtPmJpbmRpbmcgPSBiLT5wcmV2UHJlZml4QmluZGluZzsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgaWYgKHRhZ0xldmVsID09IDApCisgICAgICAgIHJldHVybiBl
cGlsb2dQcm9jZXNzb3IocGFyc2VyLCBuZXh0LCBlbmQsIG5leHRQdHIpOworICAgICAgYnJlYWs7
CisgICAgY2FzZSBYTUxfVE9LX0VORF9UQUc6CisgICAgICBpZiAodGFnTGV2ZWwgPT0gc3RhcnRU
YWdMZXZlbCkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BU1lOQ19FTlRJVFk7CisgICAgICBl
bHNlIHsKKyAgICAgICAgaW50IGxlbjsKKyAgICAgICAgY29uc3QgY2hhciAqcmF3TmFtZTsKKyAg
ICAgICAgVEFHICp0YWcgPSB0YWdTdGFjazsKKyAgICAgICAgdGFnU3RhY2sgPSB0YWctPnBhcmVu
dDsKKyAgICAgICAgdGFnLT5wYXJlbnQgPSBmcmVlVGFnTGlzdDsKKyAgICAgICAgZnJlZVRhZ0xp
c3QgPSB0YWc7CisgICAgICAgIHJhd05hbWUgPSBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIqMjsK
KyAgICAgICAgbGVuID0gWG1sTmFtZUxlbmd0aChlbmMsIHJhd05hbWUpOworICAgICAgICBpZiAo
bGVuICE9IHRhZy0+cmF3TmFtZUxlbmd0aAorICAgICAgICAgICAgfHwgbWVtY21wKHRhZy0+cmF3
TmFtZSwgcmF3TmFtZSwgbGVuKSAhPSAwKSB7CisgICAgICAgICAgKmV2ZW50UFAgPSByYXdOYW1l
OworICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfVEFHX01JU01BVENIOworICAgICAgICB9Cisg
ICAgICAgIC0tdGFnTGV2ZWw7CisgICAgICAgIGlmIChlbmRFbGVtZW50SGFuZGxlcikgeworICAg
ICAgICAgIGNvbnN0IFhNTF9DaGFyICpsb2NhbFBhcnQ7CisgICAgICAgICAgY29uc3QgWE1MX0No
YXIgKnByZWZpeDsKKyAgICAgICAgICBYTUxfQ2hhciAqdXJpOworICAgICAgICAgIGxvY2FsUGFy
dCA9IHRhZy0+bmFtZS5sb2NhbFBhcnQ7CisgICAgICAgICAgaWYgKG5zICYmIGxvY2FsUGFydCkg
eworICAgICAgICAgICAgLyogbG9jYWxQYXJ0IGFuZCBwcmVmaXggbWF5IGhhdmUgYmVlbiBvdmVy
d3JpdHRlbiBpbgorICAgICAgICAgICAgICAgdGFnLT5uYW1lLnN0ciwgc2luY2UgdGhpcyBwb2lu
dHMgdG8gdGhlIGJpbmRpbmctPnVyaQorICAgICAgICAgICAgICAgYnVmZmVyIHdoaWNoIGdldHMg
cmUtdXNlZDsgc28gd2UgaGF2ZSB0byBhZGQgdGhlbSBhZ2FpbgorICAgICAgICAgICAgKi8KKyAg
ICAgICAgICAgIHVyaSA9IChYTUxfQ2hhciAqKXRhZy0+bmFtZS5zdHIgKyB0YWctPm5hbWUudXJp
TGVuOworICAgICAgICAgICAgLyogZG9uJ3QgbmVlZCB0byBjaGVjayBmb3Igc3BhY2UgLSBhbHJl
YWR5IGRvbmUgaW4gc3RvcmVBdHRzKCkgKi8KKyAgICAgICAgICAgIHdoaWxlICgqbG9jYWxQYXJ0
KSAqdXJpKysgPSAqbG9jYWxQYXJ0Kys7CisgICAgICAgICAgICBwcmVmaXggPSAoWE1MX0NoYXIg
Kil0YWctPm5hbWUucHJlZml4OworICAgICAgICAgICAgaWYgKG5zX3RyaXBsZXRzICYmIHByZWZp
eCkgeworICAgICAgICAgICAgICAqdXJpKysgPSBuYW1lc3BhY2VTZXBhcmF0b3I7CisgICAgICAg
ICAgICAgIHdoaWxlICgqcHJlZml4KSAqdXJpKysgPSAqcHJlZml4Kys7CisgICAgICAgICAgICAg
fQorICAgICAgICAgICAgKnVyaSA9IFhNTF9UKCdcMCcpOworICAgICAgICAgIH0KKyAgICAgICAg
ICBlbmRFbGVtZW50SGFuZGxlcihoYW5kbGVyQXJnLCB0YWctPm5hbWUuc3RyKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAgICAgICByZXBvcnREZWZh
dWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKKyAgICAgICAgd2hpbGUgKHRhZy0+YmluZGluZ3Mp
IHsKKyAgICAgICAgICBCSU5ESU5HICpiID0gdGFnLT5iaW5kaW5nczsKKyAgICAgICAgICBpZiAo
ZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpCisgICAgICAgICAgICBlbmROYW1lc3BhY2VEZWNsSGFu
ZGxlcihoYW5kbGVyQXJnLCBiLT5wcmVmaXgtPm5hbWUpOworICAgICAgICAgIHRhZy0+YmluZGlu
Z3MgPSB0YWctPmJpbmRpbmdzLT5uZXh0VGFnQmluZGluZzsKKyAgICAgICAgICBiLT5uZXh0VGFn
QmluZGluZyA9IGZyZWVCaW5kaW5nTGlzdDsKKyAgICAgICAgICBmcmVlQmluZGluZ0xpc3QgPSBi
OworICAgICAgICAgIGItPnByZWZpeC0+YmluZGluZyA9IGItPnByZXZQcmVmaXhCaW5kaW5nOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0YWdMZXZlbCA9PSAwKQorICAgICAgICAgIHJldHVybiBl
cGlsb2dQcm9jZXNzb3IocGFyc2VyLCBuZXh0LCBlbmQsIG5leHRQdHIpOworICAgICAgfQorICAg
ICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX0NIQVJfUkVGOgorICAgICAgeworICAgICAgICBp
bnQgbiA9IFhtbENoYXJSZWZOdW1iZXIoZW5jLCBzKTsKKyAgICAgICAgaWYgKG4gPCAwKQorICAg
ICAgICAgIHJldHVybiBYTUxfRVJST1JfQkFEX0NIQVJfUkVGOworICAgICAgICBpZiAoY2hhcmFj
dGVyRGF0YUhhbmRsZXIpIHsKKyAgICAgICAgICBYTUxfQ2hhciBidWZbWE1MX0VOQ09ERV9NQVhd
OworICAgICAgICAgIGNoYXJhY3RlckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsIGJ1ZiwgWG1sRW5j
b2RlKG4sIChJQ0hBUiAqKWJ1ZikpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlZmF1
bHRIYW5kbGVyKQorICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQp
OworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX1hNTF9ERUNMOgorICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9NSVNQTEFDRURfWE1MX1BJOworICAgIGNhc2UgWE1MX1RPS19E
QVRBX05FV0xJTkU6CisgICAgICBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpIHsKKyAgICAgICAg
WE1MX0NoYXIgYyA9IDB4QTsKKyAgICAgICAgY2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFy
ZywgJmMsIDEpOworICAgICAgfQorICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAg
ICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBYTUxfVE9LX0NEQVRBX1NFQ1RfT1BFTjoKKyAgICAgIHsKKyAgICAgICAgZW51bSBY
TUxfRXJyb3IgcmVzdWx0OworICAgICAgICBpZiAoc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyKQor
ICAgICAgICAgIHN0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlcihoYW5kbGVyQXJnKTsKKyNpZiAwCisg
ICAgICAgIC8qIFN1cHBvc2UgeW91IGRvaW5nIGEgdHJhbnNmb3JtYXRpb24gb24gYSBkb2N1bWVu
dCB0aGF0IGludm9sdmVzCisgICAgICAgICAgIGNoYW5naW5nIG9ubHkgdGhlIGNoYXJhY3RlciBk
YXRhLiAgWW91IHNldCB1cCBhIGRlZmF1bHRIYW5kbGVyCisgICAgICAgICAgIGFuZCBhIGNoYXJh
Y3RlckRhdGFIYW5kbGVyLiAgVGhlIGRlZmF1bHRIYW5kbGVyIHNpbXBseSBjb3BpZXMKKyAgICAg
ICAgICAgY2hhcmFjdGVycyB0aHJvdWdoLiAgVGhlIGNoYXJhY3RlckRhdGFIYW5kbGVyIGRvZXMg
dGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uIGFuZCB3cml0ZXMgdGhlIGNoYXJhY3RlcnMg
b3V0IGVzY2FwaW5nIHRoZW0gYXMKKyAgICAgICAgICAgbmVjZXNzYXJ5LiAgVGhpcyBjYXNlIHdp
bGwgZmFpbCB0byB3b3JrIGlmIHdlIGxlYXZlIG91dCB0aGUKKyAgICAgICAgICAgZm9sbG93aW5n
IHR3byBsaW5lcyAoYmVjYXVzZSAmIGFuZCA8IGluc2lkZSBDREFUQSBzZWN0aW9ucyB3aWxsCisg
ICAgICAgICAgIGJlIGluY29ycmVjdGx5IGVzY2FwZWQpLgorCisgICAgICAgICAgIEhvd2V2ZXIs
IG5vdyB3ZSBoYXZlIGEgc3RhcnQvZW5kQ2RhdGFTZWN0aW9uSGFuZGxlciwgc28gaXQgc2VlbXMK
KyAgICAgICAgICAgZWFzaWVyIHRvIGxldCB0aGUgdXNlciBkZWFsIHdpdGggdGhpcy4KKyAgICAg
ICAgKi8KKyAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpCisgICAgICAgICAg
Y2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgZGF0YUJ1ZiwgMCk7CisjZW5kaWYKKyAg
ICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgcmVwb3J0RGVmYXVsdChw
YXJzZXIsIGVuYywgcywgbmV4dCk7CisgICAgICAgIHJlc3VsdCA9IGRvQ2RhdGFTZWN0aW9uKHBh
cnNlciwgZW5jLCAmbmV4dCwgZW5kLCBuZXh0UHRyLCBoYXZlTW9yZSk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgZWxzZSBpZiAoIW5leHQpIHsKKyAgICAgICAgICBwcm9jZXNzb3IgPSBjZGF0YVNlY3Rpb25Q
cm9jZXNzb3I7CisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX1RSQUlMSU5HX1JTUUI6CisgICAgICBpZiAo
aGF2ZU1vcmUpIHsKKyAgICAgICAgKm5leHRQdHIgPSBzOworICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PTkU7CisgICAgICB9CisgICAgICBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpIHsKKyAg
ICAgICAgaWYgKE1VU1RfQ09OVkVSVChlbmMsIHMpKSB7CisgICAgICAgICAgSUNIQVIgKmRhdGFQ
dHIgPSAoSUNIQVIgKilkYXRhQnVmOworICAgICAgICAgIFhtbENvbnZlcnQoZW5jLCAmcywgZW5k
LCAmZGF0YVB0ciwgKElDSEFSICopZGF0YUJ1ZkVuZCk7CisgICAgICAgICAgY2hhcmFjdGVyRGF0
YUhhbmRsZXIoaGFuZGxlckFyZywgZGF0YUJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaW50KShkYXRhUHRyIC0gKElDSEFSICopZGF0YUJ1ZikpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYTUxfQ2hhciAqKXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGludCkoKFhNTF9DaGFyICopZW5kIC0gKFhNTF9DaGFyICopcykp
OworICAgICAgfQorICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgIHJlcG9y
dERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIGVuZCk7CisgICAgICAvKiBXZSBhcmUgYXQgdGhlIGVu
ZCBvZiB0aGUgZmluYWwgYnVmZmVyLCBzaG91bGQgd2UgY2hlY2sgZm9yCisgICAgICAgICBYTUxf
U1VTUEVOREVELCBYTUxfRklOSVNIRUQ/CisgICAgICAqLworICAgICAgaWYgKHN0YXJ0VGFnTGV2
ZWwgPT0gMCkgeworICAgICAgICAqZXZlbnRQUCA9IGVuZDsKKyAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9OT19FTEVNRU5UUzsKKyAgICAgIH0KKyAgICAgIGlmICh0YWdMZXZlbCAhPSBzdGFydFRh
Z0xldmVsKSB7CisgICAgICAgICpldmVudFBQID0gZW5kOworICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX0FTWU5DX0VOVElUWTsKKyAgICAgIH0KKyAgICAgICpuZXh0UHRyID0gZW5kOworICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgIGNhc2UgWE1MX1RPS19EQVRBX0NIQVJTOgorICAg
ICAgeworICAgICAgICBYTUxfQ2hhcmFjdGVyRGF0YUhhbmRsZXIgY2hhckRhdGFIYW5kbGVyID0g
Y2hhcmFjdGVyRGF0YUhhbmRsZXI7CisgICAgICAgIGlmIChjaGFyRGF0YUhhbmRsZXIpIHsKKyAg
ICAgICAgICBpZiAoTVVTVF9DT05WRVJUKGVuYywgcykpIHsKKyAgICAgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgICAgSUNIQVIgKmRhdGFQdHIgPSAoSUNIQVIgKilkYXRhQnVmOworICAg
ICAgICAgICAgICBYbWxDb252ZXJ0KGVuYywgJnMsIG5leHQsICZkYXRhUHRyLCAoSUNIQVIgKilk
YXRhQnVmRW5kKTsKKyAgICAgICAgICAgICAgKmV2ZW50RW5kUFAgPSBzOworICAgICAgICAgICAg
ICBjaGFyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgZGF0YUJ1ZiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChpbnQpKGRhdGFQdHIgLSAoSUNIQVIgKilkYXRhQnVmKSk7CisgICAgICAg
ICAgICAgIGlmIChzID09IG5leHQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICpldmVudFBQID0gczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY2hhckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKFhNTF9DaGFyICopcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaW50KSgoWE1MX0NoYXIgKiluZXh0IC0gKFhNTF9DaGFyICopcykpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQorICAgICAgICAgIHJlcG9ydERlZmF1
bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBYTUxfVE9LX1BJOgorICAgICAgaWYgKCFyZXBvcnRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFy
c2VyLCBlbmMsIHMsIG5leHQpKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsK
KyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19DT01NRU5UOgorICAgICAgaWYgKCFyZXBv
cnRDb21tZW50KHBhcnNlciwgZW5jLCBzLCBuZXh0KSkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKGRlZmF1
bHRIYW5kbGVyKQorICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsK
KyAgICAgIGJyZWFrOworICAgIH0KKyAgICAqZXZlbnRQUCA9IHMgPSBuZXh0OworICAgIHN3aXRj
aCAocHNfcGFyc2luZykgeworICAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKKyAgICAgICpuZXh0UHRy
ID0gbmV4dDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICBjYXNlIFhNTF9GSU5J
U0hFRDoKKyAgICAgIHJldHVybiBYTUxfRVJST1JfQUJPUlRFRDsKKyAgICBkZWZhdWx0OiA7Cisg
ICAgfQorICB9CisgIC8qIG5vdCByZWFjaGVkICovCit9CisKKy8qIFByZWNvbmRpdGlvbjogYWxs
IGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1OVUxMOworICAgUHVycG9zZToKKyAgIC0gbm9ybWFsaXpl
IGF0dHJpYnV0ZXMKKyAgIC0gY2hlY2sgYXR0cmlidXRlcyBmb3Igd2VsbC1mb3JtZWRuZXNzCisg
ICAtIGdlbmVyYXRlIG5hbWVzcGFjZSBhd2FyZSBhdHRyaWJ1dGUgbmFtZXMgKFVSSSwgcHJlZml4
KQorICAgLSBidWlsZCBsaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHN0YXJ0RWxlbWVudEhhbmRsZXIK
KyAgIC0gZGVmYXVsdCBhdHRyaWJ1dGVzCisgICAtIHByb2Nlc3MgbmFtZXNwYWNlIGRlY2xhcmF0
aW9ucyAoY2hlY2sgYW5kIHJlcG9ydCB0aGVtKQorICAgLSBnZW5lcmF0ZSBuYW1lc3BhY2UgYXdh
cmUgZWxlbWVudCBuYW1lIChVUkksIHByZWZpeCkKKyovCitzdGF0aWMgZW51bSBYTUxfRXJyb3IK
K3N0b3JlQXR0cyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAg
ICAgICBjb25zdCBjaGFyICphdHRTdHIsIFRBR19OQU1FICp0YWdOYW1lUHRyLAorICAgICAgICAg
IEJJTkRJTkcgKipiaW5kaW5nc1B0cikKK3sKKyAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8q
IHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCisgIEVMRU1FTlRfVFlQRSAqZWxlbWVu
dFR5cGU7CisgIGludCBuRGVmYXVsdEF0dHM7CisgIGNvbnN0IFhNTF9DaGFyICoqYXBwQXR0czsg
ICAvKiB0aGUgYXR0cmlidXRlIGxpc3QgZm9yIHRoZSBhcHBsaWNhdGlvbiAqLworICBpbnQgYXR0
SW5kZXggPSAwOworICBpbnQgcHJlZml4TGVuOworICBpbnQgaTsKKyAgaW50IG47CisgIFhNTF9D
aGFyICp1cmk7CisgIGludCBuUHJlZml4ZXMgPSAwOworICBCSU5ESU5HICpiaW5kaW5nOworICBj
b25zdCBYTUxfQ2hhciAqbG9jYWxQYXJ0OworCisgIC8qIGxvb2t1cCB0aGUgZWxlbWVudCB0eXBl
IG5hbWUgKi8KKyAgZWxlbWVudFR5cGUgPSAoRUxFTUVOVF9UWVBFICopbG9va3VwKHBhcnNlciwg
JmR0ZC0+ZWxlbWVudFR5cGVzLCB0YWdOYW1lUHRyLT5zdHIsMCk7CisgIGlmICghZWxlbWVudFR5
cGUpIHsKKyAgICBjb25zdCBYTUxfQ2hhciAqbmFtZSA9IHBvb2xDb3B5U3RyaW5nKCZkdGQtPnBv
b2wsIHRhZ05hbWVQdHItPnN0cik7CisgICAgaWYgKCFuYW1lKQorICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9OT19NRU1PUlk7CisgICAgZWxlbWVudFR5cGUgPSAoRUxFTUVOVF9UWVBFICopbG9va3Vw
KHBhcnNlciwgJmR0ZC0+ZWxlbWVudFR5cGVzLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplb2YoRUxFTUVOVF9UWVBFKSk7CisgICAgaWYgKCFlbGVt
ZW50VHlwZSkKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgIGlmIChucyAm
JiAhc2V0RWxlbWVudFR5cGVQcmVmaXgocGFyc2VyLCBlbGVtZW50VHlwZSkpCisgICAgICByZXR1
cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgfQorICBuRGVmYXVsdEF0dHMgPSBlbGVtZW50VHlw
ZS0+bkRlZmF1bHRBdHRzOworCisgIC8qIGdldCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSB0b2tl
bml6ZXIgKi8KKyAgbiA9IFhtbEdldEF0dHJpYnV0ZXMoZW5jLCBhdHRTdHIsIGF0dHNTaXplLCBh
dHRzKTsKKyAgaWYgKG4gKyBuRGVmYXVsdEF0dHMgPiBhdHRzU2l6ZSkgeworICAgIGludCBvbGRB
dHRzU2l6ZSA9IGF0dHNTaXplOworICAgIEFUVFJJQlVURSAqdGVtcDsKKyNpZmRlZiBYTUxfQVRU
Ul9JTkZPCisgICAgWE1MX0F0dHJJbmZvICp0ZW1wMjsKKyNlbmRpZgorICAgIGF0dHNTaXplID0g
biArIG5EZWZhdWx0QXR0cyArIElOSVRfQVRUU19TSVpFOworICAgIHRlbXAgPSAoQVRUUklCVVRF
ICopUkVBTExPQygodm9pZCAqKWF0dHMsIGF0dHNTaXplICogc2l6ZW9mKEFUVFJJQlVURSkpOwor
ICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsK
KyAgICBhdHRzID0gdGVtcDsKKyNpZmRlZiBYTUxfQVRUUl9JTkZPCisgICAgdGVtcDIgPSAoWE1M
X0F0dHJJbmZvICopUkVBTExPQygodm9pZCAqKWF0dEluZm8sIGF0dHNTaXplICogc2l6ZW9mKFhN
TF9BdHRySW5mbykpOworICAgIGlmICh0ZW1wMiA9PSBOVUxMKQorICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9OT19NRU1PUlk7CisgICAgYXR0SW5mbyA9IHRlbXAyOworI2VuZGlmCisgICAgaWYgKG4g
PiBvbGRBdHRzU2l6ZSkKKyAgICAgIFhtbEdldEF0dHJpYnV0ZXMoZW5jLCBhdHRTdHIsIG4sIGF0
dHMpOworICB9CisKKyAgYXBwQXR0cyA9IChjb25zdCBYTUxfQ2hhciAqKilhdHRzOworICBmb3Ig
KGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgQVRUUklCVVRFICpjdXJyQXR0ID0gJmF0dHNbaV07
CisjaWZkZWYgWE1MX0FUVFJfSU5GTworICAgIFhNTF9BdHRySW5mbyAqY3VyckF0dEluZm8gPSAm
YXR0SW5mb1tpXTsKKyNlbmRpZgorICAgIC8qIGFkZCB0aGUgbmFtZSBhbmQgdmFsdWUgdG8gdGhl
IGF0dHJpYnV0ZSBsaXN0ICovCisgICAgQVRUUklCVVRFX0lEICphdHRJZCA9IGdldEF0dHJpYnV0
ZUlkKHBhcnNlciwgZW5jLCBjdXJyQXR0LT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyQXR0LT5uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsgWG1sTmFtZUxlbmd0aChlbmMsIGN1cnJBdHQtPm5hbWUpKTsKKyAg
ICBpZiAoIWF0dElkKQorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisjaWZkZWYg
WE1MX0FUVFJfSU5GTworICAgIGN1cnJBdHRJbmZvLT5uYW1lU3RhcnQgPSBwYXJzZUVuZEJ5dGVJ
bmRleCAtIChwYXJzZUVuZFB0ciAtIGN1cnJBdHQtPm5hbWUpOworICAgIGN1cnJBdHRJbmZvLT5u
YW1lRW5kID0gY3VyckF0dEluZm8tPm5hbWVTdGFydCArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYbWxOYW1lTGVuZ3RoKGVuYywgY3VyckF0dC0+bmFtZSk7CisgICAgY3VyckF0dEluZm8t
PnZhbHVlU3RhcnQgPSBwYXJzZUVuZEJ5dGVJbmRleCAtCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHBhcnNlRW5kUHRyIC0gY3VyckF0dC0+dmFsdWVQdHIpOworICAgIGN1cnJBdHRJbmZv
LT52YWx1ZUVuZCA9IHBhcnNlRW5kQnl0ZUluZGV4IC0gKHBhcnNlRW5kUHRyIC0gY3VyckF0dC0+
dmFsdWVFbmQpOworI2VuZGlmCisgICAgLyogRGV0ZWN0IGR1cGxpY2F0ZSBhdHRyaWJ1dGVzIGJ5
IHRoZWlyIFFOYW1lcy4gVGhpcyBkb2VzIG5vdCB3b3JrIHdoZW4KKyAgICAgICBuYW1lc3BhY2Ug
cHJvY2Vzc2luZyBpcyB0dXJuZWQgb24gYW5kIGRpZmZlcmVudCBwcmVmaXhlcyBmb3IgdGhlIHNh
bWUKKyAgICAgICBuYW1lc3BhY2UgYXJlIHVzZWQuIEZvciB0aGlzIGNhc2Ugd2UgaGF2ZSBhIGNo
ZWNrIGZ1cnRoZXIgZG93bi4KKyAgICAqLworICAgIGlmICgoYXR0SWQtPm5hbWUpWy0xXSkgewor
ICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykKKyAgICAgICAgZXZlbnRQdHIgPSBhdHRzW2ldLm5h
bWU7CisgICAgICByZXR1cm4gWE1MX0VSUk9SX0RVUExJQ0FURV9BVFRSSUJVVEU7CisgICAgfQor
ICAgIChhdHRJZC0+bmFtZSlbLTFdID0gMTsKKyAgICBhcHBBdHRzW2F0dEluZGV4KytdID0gYXR0
SWQtPm5hbWU7CisgICAgaWYgKCFhdHRzW2ldLm5vcm1hbGl6ZWQpIHsKKyAgICAgIGVudW0gWE1M
X0Vycm9yIHJlc3VsdDsKKyAgICAgIFhNTF9Cb29sIGlzQ2RhdGEgPSBYTUxfVFJVRTsKKworICAg
ICAgLyogZmlndXJlIG91dCB3aGV0aGVyIGRlY2xhcmVkIGFzIG90aGVyIHRoYW4gQ0RBVEEgKi8K
KyAgICAgIGlmIChhdHRJZC0+bWF5YmVUb2tlbml6ZWQpIHsKKyAgICAgICAgaW50IGo7CisgICAg
ICAgIGZvciAoaiA9IDA7IGogPCBuRGVmYXVsdEF0dHM7IGorKykgeworICAgICAgICAgIGlmIChh
dHRJZCA9PSBlbGVtZW50VHlwZS0+ZGVmYXVsdEF0dHNbal0uaWQpIHsKKyAgICAgICAgICAgIGlz
Q2RhdGEgPSBlbGVtZW50VHlwZS0+ZGVmYXVsdEF0dHNbal0uaXNDZGF0YTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBub3Jt
YWxpemUgdGhlIGF0dHJpYnV0ZSB2YWx1ZSAqLworICAgICAgcmVzdWx0ID0gc3RvcmVBdHRyaWJ1
dGVWYWx1ZShwYXJzZXIsIGVuYywgaXNDZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0c1tpXS52YWx1ZVB0ciwgYXR0c1tpXS52YWx1ZUVuZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBQb29sKTsKKyAgICAgIGlmIChyZXN1bHQpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBhcHBBdHRzW2F0dEluZGV4XSA9IHBvb2xTdGFy
dCgmdGVtcFBvb2wpOworICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOworICAgIH0KKyAgICBl
bHNlIHsKKyAgICAgIC8qIHRoZSB2YWx1ZSBkaWQgbm90IG5lZWQgbm9ybWFsaXppbmcgKi8KKyAg
ICAgIGFwcEF0dHNbYXR0SW5kZXhdID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwgZW5jLCBh
dHRzW2ldLnZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXR0c1tpXS52YWx1ZUVuZCk7CisgICAgICBpZiAoYXBwQXR0c1thdHRJbmRleF0gPT0gMCkK
KyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICBwb29sRmluaXNoKCZ0
ZW1wUG9vbCk7CisgICAgfQorICAgIC8qIGhhbmRsZSBwcmVmaXhlZCBhdHRyaWJ1dGUgbmFtZXMg
Ki8KKyAgICBpZiAoYXR0SWQtPnByZWZpeCkgeworICAgICAgaWYgKGF0dElkLT54bWxucykgewor
ICAgICAgICAvKiBkZWFsIHdpdGggbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBoZXJlICovCisgICAg
ICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IGFkZEJpbmRpbmcocGFyc2VyLCBhdHRJZC0+cHJl
Zml4LCBhdHRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cHBBdHRzW2F0dEluZGV4XSwgYmluZGluZ3NQdHIpOworICAgICAgICBpZiAocmVzdWx0KQorICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIC0tYXR0SW5kZXg7CisgICAgICB9CisgICAg
ICBlbHNlIHsKKyAgICAgICAgLyogZGVhbCB3aXRoIG90aGVyIHByZWZpeGVkIG5hbWVzIGxhdGVy
ICovCisgICAgICAgIGF0dEluZGV4Kys7CisgICAgICAgIG5QcmVmaXhlcysrOworICAgICAgICAo
YXR0SWQtPm5hbWUpWy0xXSA9IDI7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIGF0
dEluZGV4Kys7CisgIH0KKworICAvKiBzZXQtdXAgZm9yIFhNTF9HZXRTcGVjaWZpZWRBdHRyaWJ1
dGVDb3VudCBhbmQgWE1MX0dldElkQXR0cmlidXRlSW5kZXggKi8KKyAgblNwZWNpZmllZEF0dHMg
PSBhdHRJbmRleDsKKyAgaWYgKGVsZW1lbnRUeXBlLT5pZEF0dCAmJiAoZWxlbWVudFR5cGUtPmlk
QXR0LT5uYW1lKVstMV0pIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXR0SW5kZXg7IGkgKz0gMikK
KyAgICAgIGlmIChhcHBBdHRzW2ldID09IGVsZW1lbnRUeXBlLT5pZEF0dC0+bmFtZSkgeworICAg
ICAgICBpZEF0dEluZGV4ID0gaTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgIH0KKyAgZWxz
ZQorICAgIGlkQXR0SW5kZXggPSAtMTsKKworICAvKiBkbyBhdHRyaWJ1dGUgZGVmYXVsdGluZyAq
LworICBmb3IgKGkgPSAwOyBpIDwgbkRlZmF1bHRBdHRzOyBpKyspIHsKKyAgICBjb25zdCBERUZB
VUxUX0FUVFJJQlVURSAqZGEgPSBlbGVtZW50VHlwZS0+ZGVmYXVsdEF0dHMgKyBpOworICAgIGlm
ICghKGRhLT5pZC0+bmFtZSlbLTFdICYmIGRhLT52YWx1ZSkgeworICAgICAgaWYgKGRhLT5pZC0+
cHJlZml4KSB7CisgICAgICAgIGlmIChkYS0+aWQtPnhtbG5zKSB7CisgICAgICAgICAgZW51bSBY
TUxfRXJyb3IgcmVzdWx0ID0gYWRkQmluZGluZyhwYXJzZXIsIGRhLT5pZC0+cHJlZml4LCBkYS0+
aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYS0+dmFs
dWUsIGJpbmRpbmdzUHRyKTsKKyAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAoZGEtPmlk
LT5uYW1lKVstMV0gPSAyOworICAgICAgICAgIG5QcmVmaXhlcysrOworICAgICAgICAgIGFwcEF0
dHNbYXR0SW5kZXgrK10gPSBkYS0+aWQtPm5hbWU7CisgICAgICAgICAgYXBwQXR0c1thdHRJbmRl
eCsrXSA9IGRhLT52YWx1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAg
ICAgIChkYS0+aWQtPm5hbWUpWy0xXSA9IDE7CisgICAgICAgIGFwcEF0dHNbYXR0SW5kZXgrK10g
PSBkYS0+aWQtPm5hbWU7CisgICAgICAgIGFwcEF0dHNbYXR0SW5kZXgrK10gPSBkYS0+dmFsdWU7
CisgICAgICB9CisgICAgfQorICB9CisgIGFwcEF0dHNbYXR0SW5kZXhdID0gMDsKKworICAvKiBl
eHBhbmQgcHJlZml4ZWQgYXR0cmlidXRlIG5hbWVzLCBjaGVjayBmb3IgZHVwbGljYXRlcywKKyAg
ICAgYW5kIGNsZWFyIGZsYWdzIHRoYXQgc2F5IHdoZXRoZXIgYXR0cmlidXRlcyB3ZXJlIHNwZWNp
ZmllZCAqLworICBpID0gMDsKKyAgaWYgKG5QcmVmaXhlcykgeworICAgIGludCBqOyAgLyogaGFz
aCB0YWJsZSBpbmRleCAqLworICAgIHVuc2lnbmVkIGxvbmcgdmVyc2lvbiA9IG5zQXR0c1ZlcnNp
b247CisgICAgaW50IG5zQXR0c1NpemUgPSAoaW50KTEgPDwgbnNBdHRzUG93ZXI7CisgICAgLyog
c2l6ZSBvZiBoYXNoIHRhYmxlIG11c3QgYmUgYXQgbGVhc3QgMiAqICgjIG9mIHByZWZpeGVkIGF0
dHJpYnV0ZXMpICovCisgICAgaWYgKChuUHJlZml4ZXMgPDwgMSkgPj4gbnNBdHRzUG93ZXIpIHsg
IC8qIHRydWUgZm9yIG5zQXR0c1Bvd2VyID0gMCAqLworICAgICAgTlNfQVRUICp0ZW1wOworICAg
ICAgLyogaGFzaCB0YWJsZSBzaXplIG11c3QgYWxzbyBiZSBhIHBvd2VyIG9mIDIgYW5kID49IDgg
Ki8KKyAgICAgIHdoaWxlIChuUHJlZml4ZXMgPj4gbnNBdHRzUG93ZXIrKyk7CisgICAgICBpZiAo
bnNBdHRzUG93ZXIgPCAzKQorICAgICAgICBuc0F0dHNQb3dlciA9IDM7CisgICAgICBuc0F0dHNT
aXplID0gKGludCkxIDw8IG5zQXR0c1Bvd2VyOworICAgICAgdGVtcCA9IChOU19BVFQgKilSRUFM
TE9DKG5zQXR0cywgbnNBdHRzU2l6ZSAqIHNpemVvZihOU19BVFQpKTsKKyAgICAgIGlmICghdGVt
cCkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICBuc0F0dHMgPSB0
ZW1wOworICAgICAgdmVyc2lvbiA9IDA7ICAvKiBmb3JjZSByZS1pbml0aWFsaXphdGlvbiBvZiBu
c0F0dHMgaGFzaCB0YWJsZSAqLworICAgIH0KKyAgICAvKiB1c2luZyBhIHZlcnNpb24gZmxhZyBz
YXZlcyB1cyBmcm9tIGluaXRpYWxpemluZyBuc0F0dHMgZXZlcnkgdGltZSAqLworICAgIGlmICgh
dmVyc2lvbikgeyAgLyogaW5pdGlhbGl6ZSB2ZXJzaW9uIGZsYWdzIHdoZW4gdmVyc2lvbiB3cmFw
cyBhcm91bmQgKi8KKyAgICAgIHZlcnNpb24gPSBJTklUX0FUVFNfVkVSU0lPTjsKKyAgICAgIGZv
ciAoaiA9IG5zQXR0c1NpemU7IGogIT0gMDsgKQorICAgICAgICBuc0F0dHNbLS1qXS52ZXJzaW9u
ID0gdmVyc2lvbjsKKyAgICB9CisgICAgbnNBdHRzVmVyc2lvbiA9IC0tdmVyc2lvbjsKKworICAg
IC8qIGV4cGFuZCBwcmVmaXhlZCBuYW1lcyBhbmQgY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi8KKyAg
ICBmb3IgKDsgaSA8IGF0dEluZGV4OyBpICs9IDIpIHsKKyAgICAgIGNvbnN0IFhNTF9DaGFyICpz
ID0gYXBwQXR0c1tpXTsKKyAgICAgIGlmIChzWy0xXSA9PSAyKSB7ICAvKiBwcmVmaXhlZCAqLwor
ICAgICAgICBBVFRSSUJVVEVfSUQgKmlkOworICAgICAgICBjb25zdCBCSU5ESU5HICpiOworICAg
ICAgICB1bnNpZ25lZCBsb25nIHVyaUhhc2ggPSBoYXNoX3NlY3JldF9zYWx0OworICAgICAgICAo
KFhNTF9DaGFyICopcylbLTFdID0gMDsgIC8qIGNsZWFyIGZsYWcgKi8KKyAgICAgICAgaWQgPSAo
QVRUUklCVVRFX0lEICopbG9va3VwKHBhcnNlciwgJmR0ZC0+YXR0cmlidXRlSWRzLCBzLCAwKTsK
KyAgICAgICAgYiA9IGlkLT5wcmVmaXgtPmJpbmRpbmc7CisgICAgICAgIGlmICghYikKKyAgICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQk9VTkRfUFJFRklYOworCisgICAgICAgIC8qIGFzIHdl
IGV4cGFuZCB0aGUgbmFtZSB3ZSBhbHNvIGNhbGN1bGF0ZSBpdHMgaGFzaCB2YWx1ZSAqLworICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgYi0+dXJpTGVuOyBqKyspIHsKKyAgICAgICAgICBjb25zdCBY
TUxfQ2hhciBjID0gYi0+dXJpW2pdOworICAgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRl
bXBQb29sLCBjKSkKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAg
ICAgICAgIHVyaUhhc2ggPSBDSEFSX0hBU0godXJpSGFzaCwgYyk7CisgICAgICAgIH0KKyAgICAg
ICAgd2hpbGUgKCpzKysgIT0gWE1MX1QoQVNDSUlfQ09MT04pKQorICAgICAgICAgIDsKKyAgICAg
ICAgZG8geyAgLyogY29waWVzIG51bGwgdGVybWluYXRvciAqLworICAgICAgICAgIGNvbnN0IFhN
TF9DaGFyIGMgPSAqczsKKyAgICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwg
KnMpKQorICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAg
dXJpSGFzaCA9IENIQVJfSEFTSCh1cmlIYXNoLCBjKTsKKyAgICAgICAgfSB3aGlsZSAoKnMrKyk7
CisKKyAgICAgICAgeyAvKiBDaGVjayBoYXNoIHRhYmxlIGZvciBkdXBsaWNhdGUgb2YgZXhwYW5k
ZWQgbmFtZSAodXJpTmFtZSkuCisgICAgICAgICAgICAgRGVyaXZlZCBmcm9tIGNvZGUgaW4gbG9v
a3VwKHBhcnNlciwgSEFTSF9UQUJMRSAqdGFibGUsIC4uLikuCisgICAgICAgICAgKi8KKyAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIHN0ZXAgPSAwOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFz
ayA9IG5zQXR0c1NpemUgLSAxOworICAgICAgICAgIGogPSB1cmlIYXNoICYgbWFzazsgIC8qIGlu
ZGV4IGludG8gaGFzaCB0YWJsZSAqLworICAgICAgICAgIHdoaWxlIChuc0F0dHNbal0udmVyc2lv
biA9PSB2ZXJzaW9uKSB7CisgICAgICAgICAgICAvKiBmb3Igc3BlZWQgd2UgY29tcGFyZSBzdG9y
ZWQgaGFzaCB2YWx1ZXMgZmlyc3QgKi8KKyAgICAgICAgICAgIGlmICh1cmlIYXNoID09IG5zQXR0
c1tqXS5oYXNoKSB7CisgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpzMSA9IHBvb2xTdGFy
dCgmdGVtcFBvb2wpOworICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqczIgPSBuc0F0dHNb
al0udXJpTmFtZTsKKyAgICAgICAgICAgICAgLyogczEgaXMgbnVsbCB0ZXJtaW5hdGVkLCBidXQg
bm90IHMyICovCisgICAgICAgICAgICAgIGZvciAoOyAqczEgPT0gKnMyICYmICpzMSAhPSAwOyBz
MSsrLCBzMisrKTsKKyAgICAgICAgICAgICAgaWYgKCpzMSA9PSAwKQorICAgICAgICAgICAgICAg
IHJldHVybiBYTUxfRVJST1JfRFVQTElDQVRFX0FUVFJJQlVURTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghc3RlcCkKKyAgICAgICAgICAgICAgc3RlcCA9IFBST0JFX1NURVAodXJp
SGFzaCwgbWFzaywgbnNBdHRzUG93ZXIpOworICAgICAgICAgICAgaiA8IHN0ZXAgPyAoaiArPSBu
c0F0dHNTaXplIC0gc3RlcCkgOiAoaiAtPSBzdGVwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAobnNfdHJpcGxldHMpIHsgIC8qIGFwcGVuZCBuYW1lc3BhY2Ugc2VwYXJh
dG9yIGFuZCBwcmVmaXggKi8KKyAgICAgICAgICB0ZW1wUG9vbC5wdHJbLTFdID0gbmFtZXNwYWNl
U2VwYXJhdG9yOworICAgICAgICAgIHMgPSBiLT5wcmVmaXgtPm5hbWU7CisgICAgICAgICAgZG8g
eworICAgICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsICpzKSkKKyAgICAg
ICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgfSB3aGlsZSAo
KnMrKyk7CisgICAgICAgIH0KKworICAgICAgICAvKiBzdG9yZSBleHBhbmRlZCBuYW1lIGluIGF0
dHJpYnV0ZSBsaXN0ICovCisgICAgICAgIHMgPSBwb29sU3RhcnQoJnRlbXBQb29sKTsKKyAgICAg
ICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOworICAgICAgICBhcHBBdHRzW2ldID0gczsKKworICAg
ICAgICAvKiBmaWxsIGVtcHR5IHNsb3Qgd2l0aCBuZXcgdmVyc2lvbiwgdXJpTmFtZSBhbmQgaGFz
aCB2YWx1ZSAqLworICAgICAgICBuc0F0dHNbal0udmVyc2lvbiA9IHZlcnNpb247CisgICAgICAg
IG5zQXR0c1tqXS5oYXNoID0gdXJpSGFzaDsKKyAgICAgICAgbnNBdHRzW2pdLnVyaU5hbWUgPSBz
OworCisgICAgICAgIGlmICghLS1uUHJlZml4ZXMpIHsKKyAgICAgICAgICBpICs9IDI7CisgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgIC8qIG5vdCBwcmVm
aXhlZCAqLworICAgICAgICAoKFhNTF9DaGFyICopcylbLTFdID0gMDsgIC8qIGNsZWFyIGZsYWcg
Ki8KKyAgICB9CisgIH0KKyAgLyogY2xlYXIgZmxhZ3MgZm9yIHRoZSByZW1haW5pbmcgYXR0cmli
dXRlcyAqLworICBmb3IgKDsgaSA8IGF0dEluZGV4OyBpICs9IDIpCisgICAgKChYTUxfQ2hhciAq
KShhcHBBdHRzW2ldKSlbLTFdID0gMDsKKyAgZm9yIChiaW5kaW5nID0gKmJpbmRpbmdzUHRyOyBi
aW5kaW5nOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dFRhZ0JpbmRpbmcpCisgICAgYmluZGluZy0+
YXR0SWQtPm5hbWVbLTFdID0gMDsKKworICBpZiAoIW5zKQorICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9ORTsKKworICAvKiBleHBhbmQgdGhlIGVsZW1lbnQgdHlwZSBuYW1lICovCisgIGlmIChlbGVt
ZW50VHlwZS0+cHJlZml4KSB7CisgICAgYmluZGluZyA9IGVsZW1lbnRUeXBlLT5wcmVmaXgtPmJp
bmRpbmc7CisgICAgaWYgKCFiaW5kaW5nKQorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkJPVU5E
X1BSRUZJWDsKKyAgICBsb2NhbFBhcnQgPSB0YWdOYW1lUHRyLT5zdHI7CisgICAgd2hpbGUgKCps
b2NhbFBhcnQrKyAhPSBYTUxfVChBU0NJSV9DT0xPTikpCisgICAgICA7CisgIH0KKyAgZWxzZSBp
ZiAoZHRkLT5kZWZhdWx0UHJlZml4LmJpbmRpbmcpIHsKKyAgICBiaW5kaW5nID0gZHRkLT5kZWZh
dWx0UHJlZml4LmJpbmRpbmc7CisgICAgbG9jYWxQYXJ0ID0gdGFnTmFtZVB0ci0+c3RyOworICB9
CisgIGVsc2UKKyAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgIHByZWZpeExlbiA9IDA7Cisg
IGlmIChuc190cmlwbGV0cyAmJiBiaW5kaW5nLT5wcmVmaXgtPm5hbWUpIHsKKyAgICBmb3IgKDsg
YmluZGluZy0+cHJlZml4LT5uYW1lW3ByZWZpeExlbisrXTspCisgICAgICA7ICAvKiBwcmVmaXhM
ZW4gaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdG9yICovCisgIH0KKyAgdGFnTmFtZVB0ci0+bG9jYWxQ
YXJ0ID0gbG9jYWxQYXJ0OworICB0YWdOYW1lUHRyLT51cmlMZW4gPSBiaW5kaW5nLT51cmlMZW47
CisgIHRhZ05hbWVQdHItPnByZWZpeCA9IGJpbmRpbmctPnByZWZpeC0+bmFtZTsKKyAgdGFnTmFt
ZVB0ci0+cHJlZml4TGVuID0gcHJlZml4TGVuOworICBmb3IgKGkgPSAwOyBsb2NhbFBhcnRbaSsr
XTspCisgICAgOyAgLyogaSBpbmNsdWRlcyBudWxsIHRlcm1pbmF0b3IgKi8KKyAgbiA9IGkgKyBi
aW5kaW5nLT51cmlMZW4gKyBwcmVmaXhMZW47CisgIGlmIChuID4gYmluZGluZy0+dXJpQWxsb2Mp
IHsKKyAgICBUQUcgKnA7CisgICAgdXJpID0gKFhNTF9DaGFyICopTUFMTE9DKChuICsgRVhQQU5E
X1NQQVJFKSAqIHNpemVvZihYTUxfQ2hhcikpOworICAgIGlmICghdXJpKQorICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgYmluZGluZy0+dXJpQWxsb2MgPSBuICsgRVhQQU5E
X1NQQVJFOworICAgIG1lbWNweSh1cmksIGJpbmRpbmctPnVyaSwgYmluZGluZy0+dXJpTGVuICog
c2l6ZW9mKFhNTF9DaGFyKSk7CisgICAgZm9yIChwID0gdGFnU3RhY2s7IHA7IHAgPSBwLT5wYXJl
bnQpCisgICAgICBpZiAocC0+bmFtZS5zdHIgPT0gYmluZGluZy0+dXJpKQorICAgICAgICBwLT5u
YW1lLnN0ciA9IHVyaTsKKyAgICBGUkVFKGJpbmRpbmctPnVyaSk7CisgICAgYmluZGluZy0+dXJp
ID0gdXJpOworICB9CisgIC8qIGlmIG5hbWVzcGFjZVNlcGFyYXRvciAhPSAnXDAnIHRoZW4gdXJp
IGluY2x1ZGVzIGl0IGFscmVhZHkgKi8KKyAgdXJpID0gYmluZGluZy0+dXJpICsgYmluZGluZy0+
dXJpTGVuOworICBtZW1jcHkodXJpLCBsb2NhbFBhcnQsIGkgKiBzaXplb2YoWE1MX0NoYXIpKTsK
KyAgLyogd2UgYWx3YXlzIGhhdmUgYSBuYW1lc3BhY2Ugc2VwYXJhdG9yIGJldHdlZW4gbG9jYWxQ
YXJ0IGFuZCBwcmVmaXggKi8KKyAgaWYgKHByZWZpeExlbikgeworICAgIHVyaSArPSBpIC0gMTsK
KyAgICAqdXJpID0gbmFtZXNwYWNlU2VwYXJhdG9yOyAgLyogcmVwbGFjZSBudWxsIHRlcm1pbmF0
b3IgKi8KKyAgICBtZW1jcHkodXJpICsgMSwgYmluZGluZy0+cHJlZml4LT5uYW1lLCBwcmVmaXhM
ZW4gKiBzaXplb2YoWE1MX0NoYXIpKTsKKyAgfQorICB0YWdOYW1lUHRyLT5zdHIgPSBiaW5kaW5n
LT51cmk7CisgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKK30KKworLyogYWRkQmluZGluZygpIG92
ZXJ3cml0ZXMgdGhlIHZhbHVlIG9mIHByZWZpeC0+YmluZGluZyB3aXRob3V0IGNoZWNraW5nLgor
ICAgVGhlcmVmb3JlIG9uZSBtdXN0IGtlZXAgdHJhY2sgb2YgdGhlIG9sZCB2YWx1ZSBvdXRzaWRl
IG9mIGFkZEJpbmRpbmcoKS4KKyovCitzdGF0aWMgZW51bSBYTUxfRXJyb3IKK2FkZEJpbmRpbmco
WE1MX1BhcnNlciBwYXJzZXIsIFBSRUZJWCAqcHJlZml4LCBjb25zdCBBVFRSSUJVVEVfSUQgKmF0
dElkLAorICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqdXJpLCBCSU5ESU5HICoqYmluZGluZ3NQ
dHIpCit7CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciB4bWxOYW1lc3BhY2VbXSA9IHsKKyAgICBB
U0NJSV9oLCBBU0NJSV90LCBBU0NJSV90LCBBU0NJSV9wLCBBU0NJSV9DT0xPTiwgQVNDSUlfU0xB
U0gsIEFTQ0lJX1NMQVNILAorICAgIEFTQ0lJX3csIEFTQ0lJX3csIEFTQ0lJX3csIEFTQ0lJX1BF
UklPRCwgQVNDSUlfdywgQVNDSUlfMywgQVNDSUlfUEVSSU9ELAorICAgIEFTQ0lJX28sIEFTQ0lJ
X3IsIEFTQ0lJX2csIEFTQ0lJX1NMQVNILCBBU0NJSV9YLCBBU0NJSV9NLCBBU0NJSV9MLAorICAg
IEFTQ0lJX1NMQVNILCBBU0NJSV8xLCBBU0NJSV85LCBBU0NJSV85LCBBU0NJSV84LCBBU0NJSV9T
TEFTSCwKKyAgICBBU0NJSV9uLCBBU0NJSV9hLCBBU0NJSV9tLCBBU0NJSV9lLCBBU0NJSV9zLCBB
U0NJSV9wLCBBU0NJSV9hLCBBU0NJSV9jLAorICAgIEFTQ0lJX2UsICdcMCcKKyAgfTsKKyAgc3Rh
dGljIGNvbnN0IGludCB4bWxMZW4gPQorICAgIChpbnQpc2l6ZW9mKHhtbE5hbWVzcGFjZSkvc2l6
ZW9mKFhNTF9DaGFyKSAtIDE7CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciB4bWxuc05hbWVzcGFj
ZVtdID0geworICAgIEFTQ0lJX2gsIEFTQ0lJX3QsIEFTQ0lJX3QsIEFTQ0lJX3AsIEFTQ0lJX0NP
TE9OLCBBU0NJSV9TTEFTSCwgQVNDSUlfU0xBU0gsCisgICAgQVNDSUlfdywgQVNDSUlfdywgQVND
SUlfdywgQVNDSUlfUEVSSU9ELCBBU0NJSV93LCBBU0NJSV8zLCBBU0NJSV9QRVJJT0QsCisgICAg
QVNDSUlfbywgQVNDSUlfciwgQVNDSUlfZywgQVNDSUlfU0xBU0gsIEFTQ0lJXzIsIEFTQ0lJXzAs
IEFTQ0lJXzAsCisgICAgQVNDSUlfMCwgQVNDSUlfU0xBU0gsIEFTQ0lJX3gsIEFTQ0lJX20sIEFT
Q0lJX2wsIEFTQ0lJX24sIEFTQ0lJX3MsCisgICAgQVNDSUlfU0xBU0gsICdcMCcKKyAgfTsKKyAg
c3RhdGljIGNvbnN0IGludCB4bWxuc0xlbiA9CisgICAgKGludClzaXplb2YoeG1sbnNOYW1lc3Bh
Y2UpL3NpemVvZihYTUxfQ2hhcikgLSAxOworCisgIFhNTF9Cb29sIG11c3RCZVhNTCA9IFhNTF9G
QUxTRTsKKyAgWE1MX0Jvb2wgaXNYTUwgPSBYTUxfVFJVRTsKKyAgWE1MX0Jvb2wgaXNYTUxOUyA9
IFhNTF9UUlVFOworCisgIEJJTkRJTkcgKmI7CisgIGludCBsZW47CisKKyAgLyogZW1wdHkgVVJJ
IGlzIG9ubHkgdmFsaWQgZm9yIGRlZmF1bHQgbmFtZXNwYWNlIHBlciBYTUwgTlMgMS4wIChub3Qg
MS4xKSAqLworICBpZiAoKnVyaSA9PSBYTUxfVCgnXDAnKSAmJiBwcmVmaXgtPm5hbWUpCisgICAg
cmV0dXJuIFhNTF9FUlJPUl9VTkRFQ0xBUklOR19QUkVGSVg7CisKKyAgaWYgKHByZWZpeC0+bmFt
ZQorICAgICAgJiYgcHJlZml4LT5uYW1lWzBdID09IFhNTF9UKEFTQ0lJX3gpCisgICAgICAmJiBw
cmVmaXgtPm5hbWVbMV0gPT0gWE1MX1QoQVNDSUlfbSkKKyAgICAgICYmIHByZWZpeC0+bmFtZVsy
XSA9PSBYTUxfVChBU0NJSV9sKSkgeworCisgICAgLyogTm90IGFsbG93ZWQgdG8gYmluZCB4bWxu
cyAqLworICAgIGlmIChwcmVmaXgtPm5hbWVbM10gPT0gWE1MX1QoQVNDSUlfbikKKyAgICAgICAg
JiYgcHJlZml4LT5uYW1lWzRdID09IFhNTF9UKEFTQ0lJX3MpCisgICAgICAgICYmIHByZWZpeC0+
bmFtZVs1XSA9PSBYTUxfVCgnXDAnKSkKKyAgICAgIHJldHVybiBYTUxfRVJST1JfUkVTRVJWRURf
UFJFRklYX1hNTE5TOworCisgICAgaWYgKHByZWZpeC0+bmFtZVszXSA9PSBYTUxfVCgnXDAnKSkK
KyAgICAgIG11c3RCZVhNTCA9IFhNTF9UUlVFOworICB9CisKKyAgZm9yIChsZW4gPSAwOyB1cmlb
bGVuXTsgbGVuKyspIHsKKyAgICBpZiAoaXNYTUwgJiYgKGxlbiA+IHhtbExlbiB8fCB1cmlbbGVu
XSAhPSB4bWxOYW1lc3BhY2VbbGVuXSkpCisgICAgICBpc1hNTCA9IFhNTF9GQUxTRTsKKworICAg
IGlmICghbXVzdEJlWE1MICYmIGlzWE1MTlMKKyAgICAgICAgJiYgKGxlbiA+IHhtbG5zTGVuIHx8
IHVyaVtsZW5dICE9IHhtbG5zTmFtZXNwYWNlW2xlbl0pKQorICAgICAgaXNYTUxOUyA9IFhNTF9G
QUxTRTsKKyAgfQorICBpc1hNTCA9IGlzWE1MICYmIGxlbiA9PSB4bWxMZW47CisgIGlzWE1MTlMg
PSBpc1hNTE5TICYmIGxlbiA9PSB4bWxuc0xlbjsKKworICBpZiAobXVzdEJlWE1MICE9IGlzWE1M
KQorICAgIHJldHVybiBtdXN0QmVYTUwgPyBYTUxfRVJST1JfUkVTRVJWRURfUFJFRklYX1hNTAor
ICAgICAgICAgICAgICAgICAgICAgOiBYTUxfRVJST1JfUkVTRVJWRURfTkFNRVNQQUNFX1VSSTsK
KworICBpZiAoaXNYTUxOUykKKyAgICByZXR1cm4gWE1MX0VSUk9SX1JFU0VSVkVEX05BTUVTUEFD
RV9VUkk7CisKKyAgaWYgKG5hbWVzcGFjZVNlcGFyYXRvcikKKyAgICBsZW4rKzsKKyAgaWYgKGZy
ZWVCaW5kaW5nTGlzdCkgeworICAgIGIgPSBmcmVlQmluZGluZ0xpc3Q7CisgICAgaWYgKGxlbiA+
IGItPnVyaUFsbG9jKSB7CisgICAgICBYTUxfQ2hhciAqdGVtcCA9IChYTUxfQ2hhciAqKVJFQUxM
T0MoYi0+dXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWE1MX0NoYXIpICog
KGxlbiArIEVYUEFORF9TUEFSRSkpOworICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICBiLT51cmkgPSB0ZW1wOworICAgICAg
Yi0+dXJpQWxsb2MgPSBsZW4gKyBFWFBBTkRfU1BBUkU7CisgICAgfQorICAgIGZyZWVCaW5kaW5n
TGlzdCA9IGItPm5leHRUYWdCaW5kaW5nOworICB9CisgIGVsc2UgeworICAgIGIgPSAoQklORElO
RyAqKU1BTExPQyhzaXplb2YoQklORElORykpOworICAgIGlmICghYikKKyAgICAgIHJldHVybiBY
TUxfRVJST1JfTk9fTUVNT1JZOworICAgIGItPnVyaSA9IChYTUxfQ2hhciAqKU1BTExPQyhzaXpl
b2YoWE1MX0NoYXIpICogKGxlbiArIEVYUEFORF9TUEFSRSkpOworICAgIGlmICghYi0+dXJpKSB7
CisgICAgICBGUkVFKGIpOworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAg
fQorICAgIGItPnVyaUFsbG9jID0gbGVuICsgRVhQQU5EX1NQQVJFOworICB9CisgIGItPnVyaUxl
biA9IGxlbjsKKyAgbWVtY3B5KGItPnVyaSwgdXJpLCBsZW4gKiBzaXplb2YoWE1MX0NoYXIpKTsK
KyAgaWYgKG5hbWVzcGFjZVNlcGFyYXRvcikKKyAgICBiLT51cmlbbGVuIC0gMV0gPSBuYW1lc3Bh
Y2VTZXBhcmF0b3I7CisgIGItPnByZWZpeCA9IHByZWZpeDsKKyAgYi0+YXR0SWQgPSBhdHRJZDsK
KyAgYi0+cHJldlByZWZpeEJpbmRpbmcgPSBwcmVmaXgtPmJpbmRpbmc7CisgIC8qIE5VTEwgYmlu
ZGluZyB3aGVuIGRlZmF1bHQgbmFtZXNwYWNlIHVuZGVjbGFyZWQgKi8KKyAgaWYgKCp1cmkgPT0g
WE1MX1QoJ1wwJykgJiYgcHJlZml4ID09ICZfZHRkLT5kZWZhdWx0UHJlZml4KQorICAgIHByZWZp
eC0+YmluZGluZyA9IE5VTEw7CisgIGVsc2UKKyAgICBwcmVmaXgtPmJpbmRpbmcgPSBiOworICBi
LT5uZXh0VGFnQmluZGluZyA9ICpiaW5kaW5nc1B0cjsKKyAgKmJpbmRpbmdzUHRyID0gYjsKKyAg
LyogaWYgYXR0SWQgPT0gTlVMTCB0aGVuIHdlIGFyZSBub3Qgc3RhcnRpbmcgYSBuYW1lc3BhY2Ug
c2NvcGUgKi8KKyAgaWYgKGF0dElkICYmIHN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpCisgICAg
c3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcihoYW5kbGVyQXJnLCBwcmVmaXgtPm5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgtPmJpbmRpbmcgPyB1cmkgOiAwKTsKKyAg
cmV0dXJuIFhNTF9FUlJPUl9OT05FOworfQorCisvKiBUaGUgaWRlYSBoZXJlIGlzIHRvIGF2b2lk
IHVzaW5nIHN0YWNrIGZvciBlYWNoIENEQVRBIHNlY3Rpb24gd2hlbgorICAgdGhlIHdob2xlIGZp
bGUgaXMgcGFyc2VkIHdpdGggb25lIGNhbGwuCisqLworc3RhdGljIGVudW0gWE1MX0Vycm9yIFBU
UkNBTEwKK2NkYXRhU2VjdGlvblByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuZFB0
cikKK3sKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gZG9DZGF0YVNlY3Rpb24ocGFyc2VyLCBl
bmNvZGluZywgJnN0YXJ0LCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZFB0ciwgKFhNTF9Cb29sKSFwc19maW5hbEJ1ZmZlcik7CisgIGlmIChyZXN1bHQg
IT0gWE1MX0VSUk9SX05PTkUpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgaWYgKHN0YXJ0KSB7Cisg
ICAgaWYgKHBhcmVudFBhcnNlcikgeyAgLyogd2UgYXJlIHBhcnNpbmcgYW4gZXh0ZXJuYWwgZW50
aXR5ICovCisgICAgICBwcm9jZXNzb3IgPSBleHRlcm5hbEVudGl0eUNvbnRlbnRQcm9jZXNzb3I7
CisgICAgICByZXR1cm4gZXh0ZXJuYWxFbnRpdHlDb250ZW50UHJvY2Vzc29yKHBhcnNlciwgc3Rh
cnQsIGVuZCwgZW5kUHRyKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwcm9jZXNzb3IgPSBj
b250ZW50UHJvY2Vzc29yOworICAgICAgcmV0dXJuIGNvbnRlbnRQcm9jZXNzb3IocGFyc2VyLCBz
dGFydCwgZW5kLCBlbmRQdHIpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisv
KiBzdGFydFB0ciBnZXRzIHNldCB0byBub24tbnVsbCBpZiB0aGUgc2VjdGlvbiBpcyBjbG9zZWQs
IGFuZCB0byBudWxsIGlmCisgICB0aGUgc2VjdGlvbiBpcyBub3QgeWV0IGNsb3NlZC4KKyovCitz
dGF0aWMgZW51bSBYTUxfRXJyb3IKK2RvQ2RhdGFTZWN0aW9uKFhNTF9QYXJzZXIgcGFyc2VyLAor
ICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKipzdGFydFB0ciwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyLAorICAgICAgICAgICAgICAgWE1MX0Jvb2wg
aGF2ZU1vcmUpCit7CisgIGNvbnN0IGNoYXIgKnMgPSAqc3RhcnRQdHI7CisgIGNvbnN0IGNoYXIg
KipldmVudFBQOworICBjb25zdCBjaGFyICoqZXZlbnRFbmRQUDsKKyAgaWYgKGVuYyA9PSBlbmNv
ZGluZykgeworICAgIGV2ZW50UFAgPSAmZXZlbnRQdHI7CisgICAgKmV2ZW50UFAgPSBzOworICAg
IGV2ZW50RW5kUFAgPSAmZXZlbnRFbmRQdHI7CisgIH0KKyAgZWxzZSB7CisgICAgZXZlbnRQUCA9
ICYob3BlbkludGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRQdHIpOworICAgIGV2ZW50RW5k
UFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50RW5kUHRyKTsKKyAgfQor
ICAqZXZlbnRQUCA9IHM7CisgICpzdGFydFB0ciA9IE5VTEw7CisKKyAgZm9yICg7OykgeworICAg
IGNvbnN0IGNoYXIgKm5leHQ7CisgICAgaW50IHRvayA9IFhtbENkYXRhU2VjdGlvblRvayhlbmMs
IHMsIGVuZCwgJm5leHQpOworICAgICpldmVudEVuZFBQID0gbmV4dDsKKyAgICBzd2l0Y2ggKHRv
aykgeworICAgIGNhc2UgWE1MX1RPS19DREFUQV9TRUNUX0NMT1NFOgorICAgICAgaWYgKGVuZENk
YXRhU2VjdGlvbkhhbmRsZXIpCisgICAgICAgIGVuZENkYXRhU2VjdGlvbkhhbmRsZXIoaGFuZGxl
ckFyZyk7CisjaWYgMAorICAgICAgLyogc2VlIGNvbW1lbnQgdW5kZXIgWE1MX1RPS19DREFUQV9T
RUNUX09QRU4gKi8KKyAgICAgIGVsc2UgaWYgKGNoYXJhY3RlckRhdGFIYW5kbGVyKQorICAgICAg
ICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLCBkYXRhQnVmLCAwKTsKKyNlbmRpZgor
ICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICAgIHJlcG9ydERlZmF1bHQocGFy
c2VyLCBlbmMsIHMsIG5leHQpOworICAgICAgKnN0YXJ0UHRyID0gbmV4dDsKKyAgICAgICpuZXh0
UHRyID0gbmV4dDsKKyAgICAgIGlmIChwc19wYXJzaW5nID09IFhNTF9GSU5JU0hFRCkKKyAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PTkU7CisgICAgY2FzZSBYTUxfVE9LX0RBVEFfTkVXTElORToKKyAgICAgIGlm
IChjaGFyYWN0ZXJEYXRhSGFuZGxlcikgeworICAgICAgICBYTUxfQ2hhciBjID0gMHhBOworICAg
ICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLCAmYywgMSk7CisgICAgICB9Cisg
ICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJz
ZXIsIGVuYywgcywgbmV4dCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9UT0tfREFUQV9D
SEFSUzoKKyAgICAgIHsKKyAgICAgICAgWE1MX0NoYXJhY3RlckRhdGFIYW5kbGVyIGNoYXJEYXRh
SGFuZGxlciA9IGNoYXJhY3RlckRhdGFIYW5kbGVyOworICAgICAgICBpZiAoY2hhckRhdGFIYW5k
bGVyKSB7CisgICAgICAgICAgaWYgKE1VU1RfQ09OVkVSVChlbmMsIHMpKSB7CisgICAgICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgIElDSEFSICpkYXRhUHRyID0gKElDSEFSICopZGF0
YUJ1ZjsKKyAgICAgICAgICAgICAgWG1sQ29udmVydChlbmMsICZzLCBuZXh0LCAmZGF0YVB0ciwg
KElDSEFSICopZGF0YUJ1ZkVuZCk7CisgICAgICAgICAgICAgICpldmVudEVuZFBQID0gbmV4dDsK
KyAgICAgICAgICAgICAgY2hhckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsIGRhdGFCdWYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShkYXRhUHRyIC0gKElDSEFSICopZGF0YUJ1
ZikpOworICAgICAgICAgICAgICBpZiAocyA9PSBuZXh0KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAqZXZlbnRQUCA9IHM7CisgICAgICAgICAgICB9CisgICAgICAgICAg
fQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNoYXJEYXRhSGFuZGxlcihoYW5kbGVyQXJn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYTUxfQ2hhciAqKXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGludCkoKFhNTF9DaGFyICopbmV4dCAtIChYTUxfQ2hhciAqKXMp
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAgICAg
ICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKKyAgICAgIH0KKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgWE1MX1RPS19JTlZBTElEOgorICAgICAgKmV2ZW50UFAgPSBuZXh0Owor
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOworICAgIGNhc2UgWE1MX1RPS19Q
QVJUSUFMX0NIQVI6CisgICAgICBpZiAoaGF2ZU1vcmUpIHsKKyAgICAgICAgKm5leHRQdHIgPSBz
OworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICB9CisgICAgICByZXR1cm4g
WE1MX0VSUk9SX1BBUlRJQUxfQ0hBUjsKKyAgICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgICBj
YXNlIFhNTF9UT0tfTk9ORToKKyAgICAgIGlmIChoYXZlTW9yZSkgeworICAgICAgICAqbmV4dFB0
ciA9IHM7CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICAgIH0KKyAgICAgIHJl
dHVybiBYTUxfRVJST1JfVU5DTE9TRURfQ0RBVEFfU0VDVElPTjsKKyAgICBkZWZhdWx0OgorICAg
ICAgKmV2ZW50UFAgPSBuZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkVYUEVDVEVEX1NU
QVRFOworICAgIH0KKworICAgICpldmVudFBQID0gcyA9IG5leHQ7CisgICAgc3dpdGNoIChwc19w
YXJzaW5nKSB7CisgICAgY2FzZSBYTUxfU1VTUEVOREVEOgorICAgICAgKm5leHRQdHIgPSBuZXh0
OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgIGNhc2UgWE1MX0ZJTklTSEVEOgor
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOworICAgIGRlZmF1bHQ6IDsKKyAgICB9Cisg
IH0KKyAgLyogbm90IHJlYWNoZWQgKi8KK30KKworI2lmZGVmIFhNTF9EVEQKKworLyogVGhlIGlk
ZWEgaGVyZSBpcyB0byBhdm9pZCB1c2luZyBzdGFjayBmb3IgZWFjaCBJR05PUkUgc2VjdGlvbiB3
aGVuCisgICB0aGUgd2hvbGUgZmlsZSBpcyBwYXJzZWQgd2l0aCBvbmUgY2FsbC4KKyovCitzdGF0
aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAoraWdub3JlU2VjdGlvblByb2Nlc3NvcihYTUxfUGFy
c2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqKmVuZFB0cikKK3sKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0g
ZG9JZ25vcmVTZWN0aW9uKHBhcnNlciwgZW5jb2RpbmcsICZzdGFydCwgZW5kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUHRyLCAoWE1MX0Jvb2wpIXBzX2Zp
bmFsQnVmZmVyKTsKKyAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkKKyAgICByZXR1cm4g
cmVzdWx0OworICBpZiAoc3RhcnQpIHsKKyAgICBwcm9jZXNzb3IgPSBwcm9sb2dQcm9jZXNzb3I7
CisgICAgcmV0dXJuIHByb2xvZ1Byb2Nlc3NvcihwYXJzZXIsIHN0YXJ0LCBlbmQsIGVuZFB0cik7
CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogc3RhcnRQdHIgZ2V0cyBzZXQgdG8gbm9u
LW51bGwgaXMgdGhlIHNlY3Rpb24gaXMgY2xvc2VkLCBhbmQgdG8gbnVsbAorICAgaWYgdGhlIHNl
Y3Rpb24gaXMgbm90IHlldCBjbG9zZWQuCisqLworc3RhdGljIGVudW0gWE1MX0Vycm9yCitkb0ln
bm9yZVNlY3Rpb24oWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgY29uc3QgRU5D
T0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqc3RhcnRQdHIsCisgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KipuZXh0UHRyLAorICAgICAgICAgICAgICAgIFhNTF9Cb29sIGhhdmVNb3JlKQoreworICBjb25z
dCBjaGFyICpuZXh0OworICBpbnQgdG9rOworICBjb25zdCBjaGFyICpzID0gKnN0YXJ0UHRyOwor
ICBjb25zdCBjaGFyICoqZXZlbnRQUDsKKyAgY29uc3QgY2hhciAqKmV2ZW50RW5kUFA7CisgIGlm
IChlbmMgPT0gZW5jb2RpbmcpIHsKKyAgICBldmVudFBQID0gJmV2ZW50UHRyOworICAgICpldmVu
dFBQID0gczsKKyAgICBldmVudEVuZFBQID0gJmV2ZW50RW5kUHRyOworICB9CisgIGVsc2Ugewor
ICAgIGV2ZW50UFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50UHRyKTsK
KyAgICBldmVudEVuZFBQID0gJihvcGVuSW50ZXJuYWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudEVu
ZFB0cik7CisgIH0KKyAgKmV2ZW50UFAgPSBzOworICAqc3RhcnRQdHIgPSBOVUxMOworICB0b2sg
PSBYbWxJZ25vcmVTZWN0aW9uVG9rKGVuYywgcywgZW5kLCAmbmV4dCk7CisgICpldmVudEVuZFBQ
ID0gbmV4dDsKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX0lHTk9SRV9TRUNUOgor
ICAgIGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMs
IHMsIG5leHQpOworICAgICpzdGFydFB0ciA9IG5leHQ7CisgICAgKm5leHRQdHIgPSBuZXh0Owor
ICAgIGlmIChwc19wYXJzaW5nID09IFhNTF9GSU5JU0hFRCkKKyAgICAgIHJldHVybiBYTUxfRVJS
T1JfQUJPUlRFRDsKKyAgICBlbHNlCisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgIGNh
c2UgWE1MX1RPS19JTlZBTElEOgorICAgICpldmVudFBQID0gbmV4dDsKKyAgICByZXR1cm4gWE1M
X0VSUk9SX0lOVkFMSURfVE9LRU47CisgIGNhc2UgWE1MX1RPS19QQVJUSUFMX0NIQVI6CisgICAg
aWYgKGhhdmVNb3JlKSB7CisgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PTkU7CisgICAgfQorICAgIHJldHVybiBYTUxfRVJST1JfUEFSVElBTF9DSEFSOworICBj
YXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgY2FzZSBYTUxfVE9LX05PTkU6CisgICAgaWYgKGhhdmVN
b3JlKSB7CisgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7
CisgICAgfQorICAgIHJldHVybiBYTUxfRVJST1JfU1lOVEFYOyAvKiBYTUxfRVJST1JfVU5DTE9T
RURfSUdOT1JFX1NFQ1RJT04gKi8KKyAgZGVmYXVsdDoKKyAgICAqZXZlbnRQUCA9IG5leHQ7Cisg
ICAgcmV0dXJuIFhNTF9FUlJPUl9VTkVYUEVDVEVEX1NUQVRFOworICB9CisgIC8qIG5vdCByZWFj
aGVkICovCit9CisKKyNlbmRpZiAvKiBYTUxfRFREICovCisKK3N0YXRpYyBlbnVtIFhNTF9FcnJv
cgoraW5pdGlhbGl6ZUVuY29kaW5nKFhNTF9QYXJzZXIgcGFyc2VyKQoreworICBjb25zdCBjaGFy
ICpzOworI2lmZGVmIFhNTF9VTklDT0RFCisgIGNoYXIgZW5jb2RpbmdCdWZbMTI4XTsKKyAgaWYg
KCFwcm90b2NvbEVuY29kaW5nTmFtZSkKKyAgICBzID0gTlVMTDsKKyAgZWxzZSB7CisgICAgaW50
IGk7CisgICAgZm9yIChpID0gMDsgcHJvdG9jb2xFbmNvZGluZ05hbWVbaV07IGkrKykgeworICAg
ICAgaWYgKGkgPT0gc2l6ZW9mKGVuY29kaW5nQnVmKSAtIDEKKyAgICAgICAgICB8fCAocHJvdG9j
b2xFbmNvZGluZ05hbWVbaV0gJiB+MHg3ZikgIT0gMCkgeworICAgICAgICBlbmNvZGluZ0J1Zlsw
XSA9ICdcMCc7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2RpbmdCdWZbaV0g
PSAoY2hhcilwcm90b2NvbEVuY29kaW5nTmFtZVtpXTsKKyAgICB9CisgICAgZW5jb2RpbmdCdWZb
aV0gPSAnXDAnOworICAgIHMgPSBlbmNvZGluZ0J1ZjsKKyAgfQorI2Vsc2UKKyAgcyA9IHByb3Rv
Y29sRW5jb2RpbmdOYW1lOworI2VuZGlmCisgIGlmICgobnMgPyBYbWxJbml0RW5jb2RpbmdOUyA6
IFhtbEluaXRFbmNvZGluZykoJmluaXRFbmNvZGluZywgJmVuY29kaW5nLCBzKSkKKyAgICByZXR1
cm4gWE1MX0VSUk9SX05PTkU7CisgIHJldHVybiBoYW5kbGVVbmtub3duRW5jb2RpbmcocGFyc2Vy
LCBwcm90b2NvbEVuY29kaW5nTmFtZSk7Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorcHJv
Y2Vzc1htbERlY2woWE1MX1BhcnNlciBwYXJzZXIsIGludCBpc0dlbmVyYWxUZXh0RW50aXR5LAor
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbmV4dCkKK3sKKyAgY29u
c3QgY2hhciAqZW5jb2RpbmdOYW1lID0gTlVMTDsKKyAgY29uc3QgWE1MX0NoYXIgKnN0b3JlZEVu
Y05hbWUgPSBOVUxMOworICBjb25zdCBFTkNPRElORyAqbmV3RW5jb2RpbmcgPSBOVUxMOworICBj
b25zdCBjaGFyICp2ZXJzaW9uID0gTlVMTDsKKyAgY29uc3QgY2hhciAqdmVyc2lvbmVuZDsKKyAg
Y29uc3QgWE1MX0NoYXIgKnN0b3JlZHZlcnNpb24gPSBOVUxMOworICBpbnQgc3RhbmRhbG9uZSA9
IC0xOworICBpZiAoIShucworICAgICAgICA/IFhtbFBhcnNlWG1sRGVjbE5TCisgICAgICAgIDog
WG1sUGFyc2VYbWxEZWNsKShpc0dlbmVyYWxUZXh0RW50aXR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZl
dmVudFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJzaW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnZlcnNpb25lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmZW5jb2RpbmdOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld0VuY29kaW5n
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YW5kYWxvbmUpKSB7CisgICAgaWYgKGlz
R2VuZXJhbFRleHRFbnRpdHkpCisgICAgICByZXR1cm4gWE1MX0VSUk9SX1RFWFRfREVDTDsKKyAg
ICBlbHNlCisgICAgICByZXR1cm4gWE1MX0VSUk9SX1hNTF9ERUNMOworICB9CisgIGlmICghaXNH
ZW5lcmFsVGV4dEVudGl0eSAmJiBzdGFuZGFsb25lID09IDEpIHsKKyAgICBfZHRkLT5zdGFuZGFs
b25lID0gWE1MX1RSVUU7CisjaWZkZWYgWE1MX0RURAorICAgIGlmIChwYXJhbUVudGl0eVBhcnNp
bmcgPT0gWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX1VOTEVTU19TVEFOREFMT05FKQorICAgICAg
cGFyYW1FbnRpdHlQYXJzaW5nID0gWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX05FVkVSOworI2Vu
ZGlmIC8qIFhNTF9EVEQgKi8KKyAgfQorICBpZiAoeG1sRGVjbEhhbmRsZXIpIHsKKyAgICBpZiAo
ZW5jb2RpbmdOYW1lICE9IE5VTEwpIHsKKyAgICAgIHN0b3JlZEVuY05hbWUgPSBwb29sU3RvcmVT
dHJpbmcoJnRlbXAyUG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5n
TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdOYW1l
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgWG1sTmFtZUxlbmd0aChl
bmNvZGluZywgZW5jb2RpbmdOYW1lKSk7CisgICAgICBpZiAoIXN0b3JlZEVuY05hbWUpCisgICAg
ICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgcG9vbEZpbmlzaCgm
dGVtcDJQb29sKTsKKyAgICB9CisgICAgaWYgKHZlcnNpb24pIHsKKyAgICAgIHN0b3JlZHZlcnNp
b24gPSBwb29sU3RvcmVTdHJpbmcoJnRlbXAyUG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZl
cnNpb25lbmQgLSBlbmNvZGluZy0+bWluQnl0ZXNQZXJDaGFyKTsKKyAgICAgIGlmICghc3RvcmVk
dmVyc2lvbikKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgfQorICAg
IHhtbERlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIHN0b3JlZHZlcnNpb24sIHN0b3JlZEVuY05hbWUs
IHN0YW5kYWxvbmUpOworICB9CisgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQorICAgIHJlcG9y
dERlZmF1bHQocGFyc2VyLCBlbmNvZGluZywgcywgbmV4dCk7CisgIGlmIChwcm90b2NvbEVuY29k
aW5nTmFtZSA9PSBOVUxMKSB7CisgICAgaWYgKG5ld0VuY29kaW5nKSB7CisgICAgICBpZiAobmV3
RW5jb2RpbmctPm1pbkJ5dGVzUGVyQ2hhciAhPSBlbmNvZGluZy0+bWluQnl0ZXNQZXJDaGFyKSB7
CisgICAgICAgIGV2ZW50UHRyID0gZW5jb2RpbmdOYW1lOworICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX0lOQ09SUkVDVF9FTkNPRElORzsKKyAgICAgIH0KKyAgICAgIGVuY29kaW5nID0gbmV3RW5j
b2Rpbmc7CisgICAgfQorICAgIGVsc2UgaWYgKGVuY29kaW5nTmFtZSkgeworICAgICAgZW51bSBY
TUxfRXJyb3IgcmVzdWx0OworICAgICAgaWYgKCFzdG9yZWRFbmNOYW1lKSB7CisgICAgICAgIHN0
b3JlZEVuY05hbWUgPSBwb29sU3RvcmVTdHJpbmcoCisgICAgICAgICAgJnRlbXAyUG9vbCwgZW5j
b2RpbmcsIGVuY29kaW5nTmFtZSwKKyAgICAgICAgICBlbmNvZGluZ05hbWUgKyBYbWxOYW1lTGVu
Z3RoKGVuY29kaW5nLCBlbmNvZGluZ05hbWUpKTsKKyAgICAgICAgaWYgKCFzdG9yZWRFbmNOYW1l
KQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgfQorICAgICAg
cmVzdWx0ID0gaGFuZGxlVW5rbm93bkVuY29kaW5nKHBhcnNlciwgc3RvcmVkRW5jTmFtZSk7Cisg
ICAgICBwb29sQ2xlYXIoJnRlbXAyUG9vbCk7CisgICAgICBpZiAocmVzdWx0ID09IFhNTF9FUlJP
Ul9VTktOT1dOX0VOQ09ESU5HKQorICAgICAgICBldmVudFB0ciA9IGVuY29kaW5nTmFtZTsKKyAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAgaWYgKHN0b3JlZEVuY05hbWUgfHwg
c3RvcmVkdmVyc2lvbikKKyAgICBwb29sQ2xlYXIoJnRlbXAyUG9vbCk7CisKKyAgcmV0dXJuIFhN
TF9FUlJPUl9OT05FOworfQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IKK2hhbmRsZVVua25vd25F
bmNvZGluZyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFtZSkK
K3sKKyAgaWYgKHVua25vd25FbmNvZGluZ0hhbmRsZXIpIHsKKyAgICBYTUxfRW5jb2RpbmcgaW5m
bzsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgICBpbmZv
Lm1hcFtpXSA9IC0xOworICAgIGluZm8uY29udmVydCA9IE5VTEw7CisgICAgaW5mby5kYXRhID0g
TlVMTDsKKyAgICBpbmZvLnJlbGVhc2UgPSBOVUxMOworICAgIGlmICh1bmtub3duRW5jb2RpbmdI
YW5kbGVyKHVua25vd25FbmNvZGluZ0hhbmRsZXJEYXRhLCBlbmNvZGluZ05hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmluZm8pKSB7CisgICAgICBFTkNPRElORyAqZW5jOwor
ICAgICAgdW5rbm93bkVuY29kaW5nTWVtID0gTUFMTE9DKFhtbFNpemVPZlVua25vd25FbmNvZGlu
ZygpKTsKKyAgICAgIGlmICghdW5rbm93bkVuY29kaW5nTWVtKSB7CisgICAgICAgIGlmIChpbmZv
LnJlbGVhc2UpCisgICAgICAgICAgaW5mby5yZWxlYXNlKGluZm8uZGF0YSk7CisgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgfQorICAgICAgZW5jID0gKG5zCisgICAg
ICAgICAgICAgPyBYbWxJbml0VW5rbm93bkVuY29kaW5nTlMKKyAgICAgICAgICAgICA6IFhtbElu
aXRVbmtub3duRW5jb2RpbmcpKHVua25vd25FbmNvZGluZ01lbSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm8ubWFwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mby5jb252ZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mby5kYXRhKTsKKyAgICAgIGlmIChlbmMpIHsKKyAgICAgICAgdW5rbm93
bkVuY29kaW5nRGF0YSA9IGluZm8uZGF0YTsKKyAgICAgICAgdW5rbm93bkVuY29kaW5nUmVsZWFz
ZSA9IGluZm8ucmVsZWFzZTsKKyAgICAgICAgZW5jb2RpbmcgPSBlbmM7CisgICAgICAgIHJldHVy
biBYTUxfRVJST1JfTk9ORTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGluZm8ucmVsZWFzZSAh
PSBOVUxMKQorICAgICAgaW5mby5yZWxlYXNlKGluZm8uZGF0YSk7CisgIH0KKyAgcmV0dXJuIFhN
TF9FUlJPUl9VTktOT1dOX0VOQ09ESU5HOworfQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRS
Q0FMTAorcHJvbG9nSW5pdFByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
ZW5kLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0cikKK3sKKyAgZW51
bSBYTUxfRXJyb3IgcmVzdWx0ID0gaW5pdGlhbGl6ZUVuY29kaW5nKHBhcnNlcik7CisgIGlmIChy
ZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgcHJvY2Vzc29y
ID0gcHJvbG9nUHJvY2Vzc29yOworICByZXR1cm4gcHJvbG9nUHJvY2Vzc29yKHBhcnNlciwgcywg
ZW5kLCBuZXh0UHRyKTsKK30KKworI2lmZGVmIFhNTF9EVEQKKworc3RhdGljIGVudW0gWE1MX0Vy
cm9yIFBUUkNBTEwKK2V4dGVybmFsUGFyRW50SW5pdFByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0cikKK3sKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0
ID0gaW5pdGlhbGl6ZUVuY29kaW5nKHBhcnNlcik7CisgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9S
X05PTkUpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiB3ZSBrbm93IG5vdyB0aGF0IFhNTF9Q
YXJzZShCdWZmZXIpIGhhcyBiZWVuIGNhbGxlZCwKKyAgICAgc28gd2UgY29uc2lkZXIgdGhlIGV4
dGVybmFsIHBhcmFtZXRlciBlbnRpdHkgcmVhZCAqLworICBfZHRkLT5wYXJhbUVudGl0eVJlYWQg
PSBYTUxfVFJVRTsKKworICBpZiAocHJvbG9nU3RhdGUuaW5FbnRpdHlWYWx1ZSkgeworICAgIHBy
b2Nlc3NvciA9IGVudGl0eVZhbHVlSW5pdFByb2Nlc3NvcjsKKyAgICByZXR1cm4gZW50aXR5VmFs
dWVJbml0UHJvY2Vzc29yKHBhcnNlciwgcywgZW5kLCBuZXh0UHRyKTsKKyAgfQorICBlbHNlIHsK
KyAgICBwcm9jZXNzb3IgPSBleHRlcm5hbFBhckVudFByb2Nlc3NvcjsKKyAgICByZXR1cm4gZXh0
ZXJuYWxQYXJFbnRQcm9jZXNzb3IocGFyc2VyLCBzLCBlbmQsIG5leHRQdHIpOworICB9Cit9CisK
K3N0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCitlbnRpdHlWYWx1ZUluaXRQcm9jZXNzb3Io
WE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIpCit7CisgIGludCB0b2s7CisgIGNv
bnN0IGNoYXIgKnN0YXJ0ID0gczsKKyAgY29uc3QgY2hhciAqbmV4dCA9IHN0YXJ0OworICBldmVu
dFB0ciA9IHN0YXJ0OworCisgIGZvciAoOzspIHsKKyAgICB0b2sgPSBYbWxQcm9sb2dUb2soZW5j
b2RpbmcsIHN0YXJ0LCBlbmQsICZuZXh0KTsKKyAgICBldmVudEVuZFB0ciA9IG5leHQ7CisgICAg
aWYgKHRvayA8PSAwKSB7CisgICAgICBpZiAoIXBzX2ZpbmFsQnVmZmVyICYmIHRvayAhPSBYTUxf
VE9LX0lOVkFMSUQpIHsKKyAgICAgICAgKm5leHRQdHIgPSBzOworICAgICAgICByZXR1cm4gWE1M
X0VSUk9SX05PTkU7CisgICAgICB9CisgICAgICBzd2l0Y2ggKHRvaykgeworICAgICAgY2FzZSBY
TUxfVE9LX0lOVkFMSUQ6CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsK
KyAgICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMOgorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VO
Q0xPU0VEX1RPS0VOOworICAgICAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKKyAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVI7CisgICAgICBjYXNlIFhNTF9UT0tfTk9ORTog
ICAvKiBzdGFydCA9PSBlbmQgKi8KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
ICAgfQorICAgICAgLyogZm91bmQgZW5kIG9mIGVudGl0eSB2YWx1ZSAtIGNhbiBzdG9yZSBpdCBu
b3cgKi8KKyAgICAgIHJldHVybiBzdG9yZUVudGl0eVZhbHVlKHBhcnNlciwgZW5jb2RpbmcsIHMs
IGVuZCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRvayA9PSBYTUxfVE9LX1hNTF9ERUNMKSB7Cisg
ICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7CisgICAgICByZXN1bHQgPSBwcm9jZXNzWG1sRGVj
bChwYXJzZXIsIDAsIHN0YXJ0LCBuZXh0KTsKKyAgICAgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9S
X05PTkUpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBzd2l0Y2ggKHBzX3BhcnNpbmcp
IHsKKyAgICAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKKyAgICAgICAgKm5leHRQdHIgPSBuZXh0Owor
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICBjYXNlIFhNTF9GSU5JU0hFRDoK
KyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgKm5leHRQdHIgPSBuZXh0OworICAgICAgfQorICAgICAgLyogc3RvcCBzY2FubmluZyBmb3Ig
dGV4dCBkZWNsYXJhdGlvbiAtIHdlIGZvdW5kIG9uZSAqLworICAgICAgcHJvY2Vzc29yID0gZW50
aXR5VmFsdWVQcm9jZXNzb3I7CisgICAgICByZXR1cm4gZW50aXR5VmFsdWVQcm9jZXNzb3IocGFy
c2VyLCBuZXh0LCBlbmQsIG5leHRQdHIpOworICAgIH0KKyAgICAvKiBJZiB3ZSBhcmUgYXQgdGhl
IGVuZCBvZiB0aGUgYnVmZmVyLCB0aGlzIHdvdWxkIGNhdXNlIFhtbFByb2xvZ1RvayB0bworICAg
ICAgIHJldHVybiBYTUxfVE9LX05PTkUgb24gdGhlIG5leHQgY2FsbCwgd2hpY2ggd291bGQgdGhl
biBjYXVzZSB0aGUKKyAgICAgICBmdW5jdGlvbiB0byBleGl0IHdpdGggKm5leHRQdHIgc2V0IHRv
IHMgLSB0aGF0IGlzIHdoYXQgd2Ugd2FudCBmb3Igb3RoZXIKKyAgICAgICB0b2tlbnMsIGJ1dCBu
b3QgZm9yIHRoZSBCT00gLSB3ZSB3b3VsZCByYXRoZXIgbGlrZSB0byBza2lwIGl0OworICAgICAg
IHRoZW4sIHdoZW4gdGhpcyByb3V0aW5lIGlzIGVudGVyZWQgdGhlIG5leHQgdGltZSwgWG1sUHJv
bG9nVG9rIHdpbGwKKyAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElELCBzaW5jZSB0aGUgQk9N
IGlzIHN0aWxsIGluIHRoZSBidWZmZXIKKyAgICAqLworICAgIGVsc2UgaWYgKHRvayA9PSBYTUxf
VE9LX0JPTSAmJiBuZXh0ID09IGVuZCAmJiAhcHNfZmluYWxCdWZmZXIpIHsKKyAgICAgICpuZXh0
UHRyID0gbmV4dDsKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICB9CisgICAgc3Rh
cnQgPSBuZXh0OworICAgIGV2ZW50UHRyID0gc3RhcnQ7CisgIH0KK30KKworc3RhdGljIGVudW0g
WE1MX0Vycm9yIFBUUkNBTEwKK2V4dGVybmFsUGFyRW50UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFy
c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKipuZXh0UHRyKQoreworICBjb25zdCBjaGFyICpuZXh0ID0gczsKKyAgaW50IHRv
azsKKworICB0b2sgPSBYbWxQcm9sb2dUb2soZW5jb2RpbmcsIHMsIGVuZCwgJm5leHQpOworICBp
ZiAodG9rIDw9IDApIHsKKyAgICBpZiAoIXBzX2ZpbmFsQnVmZmVyICYmIHRvayAhPSBYTUxfVE9L
X0lOVkFMSUQpIHsKKyAgICAgICpuZXh0UHRyID0gczsKKyAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9ORTsKKyAgICB9CisgICAgc3dpdGNoICh0b2spIHsKKyAgICBjYXNlIFhNTF9UT0tfSU5WQUxJ
RDoKKyAgICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKKyAgICBjYXNlIFhNTF9U
T0tfUEFSVElBTDoKKyAgICAgIHJldHVybiBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU47CisgICAg
Y2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKKyAgICAgIHJldHVybiBYTUxfRVJST1JfUEFSVElB
TF9DSEFSOworICAgIGNhc2UgWE1MX1RPS19OT05FOiAgIC8qIHN0YXJ0ID09IGVuZCAqLworICAg
IGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLyogVGhpcyB3b3VsZCBjYXVz
ZSB0aGUgbmV4dCBzdGFnZSwgaS5lLiBkb1Byb2xvZyB0byBiZSBwYXNzZWQgWE1MX1RPS19CT00u
CisgICAgIEhvd2V2ZXIsIHdoZW4gcGFyc2luZyBhbiBleHRlcm5hbCBzdWJzZXQsIGRvUHJvbG9n
IHdpbGwgbm90IGFjY2VwdCBhIEJPTQorICAgICBhcyB2YWxpZCwgYW5kIHJlcG9ydCBhIHN5bnRh
eCBlcnJvciwgc28gd2UgaGF2ZSB0byBza2lwIHRoZSBCT00KKyAgKi8KKyAgZWxzZSBpZiAodG9r
ID09IFhNTF9UT0tfQk9NKSB7CisgICAgcyA9IG5leHQ7CisgICAgdG9rID0gWG1sUHJvbG9nVG9r
KGVuY29kaW5nLCBzLCBlbmQsICZuZXh0KTsKKyAgfQorCisgIHByb2Nlc3NvciA9IHByb2xvZ1By
b2Nlc3NvcjsKKyAgcmV0dXJuIGRvUHJvbG9nKHBhcnNlciwgZW5jb2RpbmcsIHMsIGVuZCwgdG9r
LCBuZXh0LAorICAgICAgICAgICAgICAgICAgbmV4dFB0ciwgKFhNTF9Cb29sKSFwc19maW5hbEJ1
ZmZlcik7Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCitlbnRpdHlWYWx1ZVBy
b2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKnMsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0cikKK3sKKyAgY29uc3QgY2hhciAqc3RhcnQg
PSBzOworICBjb25zdCBjaGFyICpuZXh0ID0gczsKKyAgY29uc3QgRU5DT0RJTkcgKmVuYyA9IGVu
Y29kaW5nOworICBpbnQgdG9rOworCisgIGZvciAoOzspIHsKKyAgICB0b2sgPSBYbWxQcm9sb2dU
b2soZW5jLCBzdGFydCwgZW5kLCAmbmV4dCk7CisgICAgaWYgKHRvayA8PSAwKSB7CisgICAgICBp
ZiAoIXBzX2ZpbmFsQnVmZmVyICYmIHRvayAhPSBYTUxfVE9LX0lOVkFMSUQpIHsKKyAgICAgICAg
Km5leHRQdHIgPSBzOworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICB9Cisg
ICAgICBzd2l0Y2ggKHRvaykgeworICAgICAgY2FzZSBYTUxfVE9LX0lOVkFMSUQ6CisgICAgICAg
IHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKKyAgICAgIGNhc2UgWE1MX1RPS19QQVJU
SUFMOgorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOOworICAgICAgY2Fz
ZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFM
X0NIQVI7CisgICAgICBjYXNlIFhNTF9UT0tfTk9ORTogICAvKiBzdGFydCA9PSBlbmQgKi8KKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgLyogZm91bmQgZW5k
IG9mIGVudGl0eSB2YWx1ZSAtIGNhbiBzdG9yZSBpdCBub3cgKi8KKyAgICAgIHJldHVybiBzdG9y
ZUVudGl0eVZhbHVlKHBhcnNlciwgZW5jLCBzLCBlbmQpOworICAgIH0KKyAgICBzdGFydCA9IG5l
eHQ7CisgIH0KK30KKworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKworc3RhdGljIGVudW0gWE1MX0Vy
cm9yIFBUUkNBTEwKK3Byb2xvZ1Byb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwK
KyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0cikKK3sKKyAgY29uc3QgY2hhciAq
bmV4dCA9IHM7CisgIGludCB0b2sgPSBYbWxQcm9sb2dUb2soZW5jb2RpbmcsIHMsIGVuZCwgJm5l
eHQpOworICByZXR1cm4gZG9Qcm9sb2cocGFyc2VyLCBlbmNvZGluZywgcywgZW5kLCB0b2ssIG5l
eHQsCisgICAgICAgICAgICAgICAgICBuZXh0UHRyLCAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVy
KTsKK30KKworc3RhdGljIGVudW0gWE1MX0Vycm9yCitkb1Byb2xvZyhYTUxfUGFyc2VyIHBhcnNl
ciwKKyAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMsCisgICAgICAgICBjb25zdCBjaGFyICpz
LAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgaW50IHRvaywKKyAgICAgICAg
IGNvbnN0IGNoYXIgKm5leHQsCisgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0ciwKKyAgICAg
ICAgIFhNTF9Cb29sIGhhdmVNb3JlKQoreworI2lmZGVmIFhNTF9EVEQKKyAgc3RhdGljIGNvbnN0
IFhNTF9DaGFyIGV4dGVybmFsU3Vic2V0TmFtZVtdID0geyBBU0NJSV9IQVNIICwgJ1wwJyB9Owor
I2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlQ0RBVEFb
XSA9CisgICAgICB7IEFTQ0lJX0MsIEFTQ0lJX0QsIEFTQ0lJX0EsIEFTQ0lJX1QsIEFTQ0lJX0Es
ICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlSURbXSA9IHsgQVNDSUlfSSwg
QVNDSUlfRCwgJ1wwJyB9OworICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVJRFJFRltdID0K
KyAgICAgIHsgQVNDSUlfSSwgQVNDSUlfRCwgQVNDSUlfUiwgQVNDSUlfRSwgQVNDSUlfRiwgJ1ww
JyB9OworICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVJRFJFRlNbXSA9CisgICAgICB7IEFT
Q0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFTQ0lJX0UsIEFTQ0lJX0YsIEFTQ0lJX1MsICdcMCcg
fTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlRU5USVRZW10gPQorICAgICAgeyBBU0NJ
SV9FLCBBU0NJSV9OLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9ULCBBU0NJSV9ZLCAnXDAnIH07
CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUVOVElUSUVTW10gPSB7IEFTQ0lJX0UsIEFT
Q0lJX04sCisgICAgICBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9F
LCBBU0NJSV9TLCAnXDAnIH07CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZU5NVE9LRU5b
XSA9IHsKKyAgICAgIEFTQ0lJX04sIEFTQ0lJX00sIEFTQ0lJX1QsIEFTQ0lJX08sIEFTQ0lJX0ss
IEFTQ0lJX0UsIEFTQ0lJX04sICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBl
Tk1UT0tFTlNbXSA9IHsgQVNDSUlfTiwgQVNDSUlfTSwgQVNDSUlfVCwKKyAgICAgIEFTQ0lJX08s
IEFTQ0lJX0ssIEFTQ0lJX0UsIEFTQ0lJX04sIEFTQ0lJX1MsICdcMCcgfTsKKyAgc3RhdGljIGNv
bnN0IFhNTF9DaGFyIG5vdGF0aW9uUHJlZml4W10gPSB7IEFTQ0lJX04sIEFTQ0lJX08sIEFTQ0lJ
X1QsCisgICAgICBBU0NJSV9BLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9PLCBBU0NJSV9OLCBB
U0NJSV9MUEFSRU4sICdcMCcgfTsKKyAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGVudW1WYWx1ZVNl
cFtdID0geyBBU0NJSV9QSVBFLCAnXDAnIH07CisgIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBlbnVt
VmFsdWVTdGFydFtdID0geyBBU0NJSV9MUEFSRU4sICdcMCcgfTsKKworICAvKiBzYXZlIG9uZSBs
ZXZlbCBvZiBpbmRpcmVjdGlvbiAqLworICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOworCisgIGNv
bnN0IGNoYXIgKipldmVudFBQOworICBjb25zdCBjaGFyICoqZXZlbnRFbmRQUDsKKyAgZW51bSBY
TUxfQ29udGVudF9RdWFudCBxdWFudDsKKworICBpZiAoZW5jID09IGVuY29kaW5nKSB7CisgICAg
ZXZlbnRQUCA9ICZldmVudFB0cjsKKyAgICBldmVudEVuZFBQID0gJmV2ZW50RW5kUHRyOworICB9
CisgIGVsc2UgeworICAgIGV2ZW50UFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5h
bEV2ZW50UHRyKTsKKyAgICBldmVudEVuZFBQID0gJihvcGVuSW50ZXJuYWxFbnRpdGllcy0+aW50
ZXJuYWxFdmVudEVuZFB0cik7CisgIH0KKworICBmb3IgKDs7KSB7CisgICAgaW50IHJvbGU7Cisg
ICAgWE1MX0Jvb2wgaGFuZGxlRGVmYXVsdCA9IFhNTF9UUlVFOworICAgICpldmVudFBQID0gczsK
KyAgICAqZXZlbnRFbmRQUCA9IG5leHQ7CisgICAgaWYgKHRvayA8PSAwKSB7CisgICAgICBpZiAo
aGF2ZU1vcmUgJiYgdG9rICE9IFhNTF9UT0tfSU5WQUxJRCkgeworICAgICAgICAqbmV4dFB0ciA9
IHM7CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICAgIH0KKyAgICAgIHN3aXRj
aCAodG9rKSB7CisgICAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKKyAgICAgICAgKmV2ZW50UFAg
PSBuZXh0OworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0lOVkFMSURfVE9LRU47CisgICAgICBj
YXNlIFhNTF9UT0tfUEFSVElBTDoKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkNMT1NFRF9U
T0tFTjsKKyAgICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMX0NIQVI6CisgICAgICAgIHJldHVybiBY
TUxfRVJST1JfUEFSVElBTF9DSEFSOworICAgICAgY2FzZSAtWE1MX1RPS19QUk9MT0dfUzoKKyAg
ICAgICAgdG9rID0gLXRvazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFhNTF9UT0tfTk9O
RToKKyNpZmRlZiBYTUxfRFRECisgICAgICAgIC8qIGZvciBpbnRlcm5hbCBQRSBOT1QgcmVmZXJl
bmNlZCBiZXR3ZWVuIGRlY2xhcmF0aW9ucyAqLworICAgICAgICBpZiAoZW5jICE9IGVuY29kaW5n
ICYmICFvcGVuSW50ZXJuYWxFbnRpdGllcy0+YmV0d2VlbkRlY2wpIHsKKyAgICAgICAgICAqbmV4
dFB0ciA9IHM7CisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgICAgICB9Cisg
ICAgICAgIC8qIFdGQzogUEUgQmV0d2VlbiBEZWNsYXJhdGlvbnMgLSBtdXN0IGNoZWNrIHRoYXQg
UEUgY29udGFpbnMKKyAgICAgICAgICAgY29tcGxldGUgbWFya3VwLCBub3Qgb25seSBmb3IgZXh0
ZXJuYWwgUEVzLCBidXQgYWxzbyBmb3IKKyAgICAgICAgICAgaW50ZXJuYWwgUEVzIGlmIHRoZSBy
ZWZlcmVuY2Ugb2NjdXJzIGJldHdlZW4gZGVjbGFyYXRpb25zLgorICAgICAgICAqLworICAgICAg
ICBpZiAoaXNQYXJhbUVudGl0eSB8fCBlbmMgIT0gZW5jb2RpbmcpIHsKKyAgICAgICAgICBpZiAo
WG1sVG9rZW5Sb2xlKCZwcm9sb2dTdGF0ZSwgWE1MX1RPS19OT05FLCBlbmQsIGVuZCwgZW5jKQor
ICAgICAgICAgICAgICA9PSBYTUxfUk9MRV9FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBYTUxf
RVJST1JfSU5DT01QTEVURV9QRTsKKyAgICAgICAgICAqbmV4dFB0ciA9IHM7CisgICAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgICAgICB9CisjZW5kaWYgLyogWE1MX0RURCAqLwor
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX0VMRU1FTlRTOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgdG9rID0gLXRvazsKKyAgICAgICAgbmV4dCA9IGVuZDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICB9CisgICAgfQorICAgIHJvbGUgPSBYbWxUb2tlblJvbGUoJnByb2xvZ1N0YXRlLCB0b2ss
IHMsIG5leHQsIGVuYyk7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAgY2FzZSBYTUxfUk9MRV9Y
TUxfREVDTDoKKyAgICAgIHsKKyAgICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gcHJvY2Vz
c1htbERlY2wocGFyc2VyLCAwLCBzLCBuZXh0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBYTUxf
RVJST1JfTk9ORSkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBlbmMgPSBlbmNv
ZGluZzsKKyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAg
IGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfRE9DVFlQRV9OQU1FOgorICAgICAgaWYgKHN0YXJ0
RG9jdHlwZURlY2xIYW5kbGVyKSB7CisgICAgICAgIGRvY3R5cGVOYW1lID0gcG9vbFN0b3JlU3Ry
aW5nKCZ0ZW1wUG9vbCwgZW5jLCBzLCBuZXh0KTsKKyAgICAgICAgaWYgKCFkb2N0eXBlTmFtZSkK
KyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgcG9vbEZpbmlz
aCgmdGVtcFBvb2wpOworICAgICAgICBkb2N0eXBlUHViaWQgPSBOVUxMOworICAgICAgICBoYW5k
bGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAgICAgZG9jdHlwZVN5c2lkID0gTlVM
TDsgLyogYWx3YXlzIGluaXRpYWxpemUgdG8gTlVMTCAqLworICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBYTUxfUk9MRV9ET0NUWVBFX0lOVEVSTkFMX1NVQlNFVDoKKyAgICAgIGlmIChzdGFydERvY3R5
cGVEZWNsSGFuZGxlcikgeworICAgICAgICBzdGFydERvY3R5cGVEZWNsSGFuZGxlcihoYW5kbGVy
QXJnLCBkb2N0eXBlTmFtZSwgZG9jdHlwZVN5c2lkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2N0eXBlUHViaWQsIDEpOworICAgICAgICBkb2N0eXBlTmFtZSA9IE5VTEw7Cisg
ICAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wpOworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1M
X0ZBTFNFOworICAgICAgfQorICAgICAgYnJlYWs7CisjaWZkZWYgWE1MX0RURAorICAgIGNhc2Ug
WE1MX1JPTEVfVEVYVF9ERUNMOgorICAgICAgeworICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1
bHQgPSBwcm9jZXNzWG1sRGVjbChwYXJzZXIsIDEsIHMsIG5leHQpOworICAgICAgICBpZiAocmVz
dWx0ICE9IFhNTF9FUlJPUl9OT05FKQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IGVuYyA9IGVuY29kaW5nOworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAg
ICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYgLyogWE1MX0RURCAqLworICAgIGNhc2UgWE1MX1JP
TEVfRE9DVFlQRV9QVUJMSUNfSUQ6CisjaWZkZWYgWE1MX0RURAorICAgICAgdXNlRm9yZWlnbkRU
RCA9IFhNTF9GQUxTRTsKKyAgICAgIGRlY2xFbnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdGQtPnBhcmFtRW50aXRp
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFN1YnNldE5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoRU5USVRZKSk7
CisgICAgICBpZiAoIWRlY2xFbnRpdHkpCisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVN
T1JZOworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICAgIGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZz
ID0gWE1MX1RSVUU7CisgICAgICBpZiAoc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIpIHsKKyAgICAg
ICAgWE1MX0NoYXIgKnB1YklkOworICAgICAgICBpZiAoIVhtbElzUHVibGljSWQoZW5jLCBzLCBu
ZXh0LCBldmVudFBQKSkKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1BVQkxJQ0lEOworICAg
ICAgICBwdWJJZCA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOworICAg
ICAgICBpZiAoIXB1YklkKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwor
ICAgICAgICBub3JtYWxpemVQdWJsaWNJZChwdWJJZCk7CisgICAgICAgIHBvb2xGaW5pc2goJnRl
bXBQb29sKTsKKyAgICAgICAgZG9jdHlwZVB1YmlkID0gcHViSWQ7CisgICAgICAgIGhhbmRsZURl
ZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAgIGdvdG8gYWxyZWFkeUNoZWNrZWQ7CisgICAgICB9
CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIFhNTF9ST0xFX0VOVElUWV9QVUJM
SUNfSUQ6CisgICAgICBpZiAoIVhtbElzUHVibGljSWQoZW5jLCBzLCBuZXh0LCBldmVudFBQKSkK
KyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QVUJMSUNJRDsKKyAgICBhbHJlYWR5Q2hlY2tlZDoK
KyAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nICYmIGRlY2xFbnRpdHkpIHsKKyAgICAgICAg
WE1MX0NoYXIgKnRlbSA9IHBvb2xTdG9yZVN0cmluZygmZHRkLT5wb29sLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsK
KyAgICAgICAgaWYgKCF0ZW0pCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7
CisgICAgICAgIG5vcm1hbGl6ZVB1YmxpY0lkKHRlbSk7CisgICAgICAgIGRlY2xFbnRpdHktPnB1
YmxpY0lkID0gdGVtOworICAgICAgICBwb29sRmluaXNoKCZkdGQtPnBvb2wpOworICAgICAgICBp
ZiAoZW50aXR5RGVjbEhhbmRsZXIpCisgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxT
RTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfRE9DVFlQRV9DTE9T
RToKKyAgICAgIGlmIChkb2N0eXBlTmFtZSkgeworICAgICAgICBzdGFydERvY3R5cGVEZWNsSGFu
ZGxlcihoYW5kbGVyQXJnLCBkb2N0eXBlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jdHlwZVN5c2lkLCBkb2N0eXBlUHViaWQsIDApOworICAgICAgICBwb29sQ2xlYXIo
JnRlbXBQb29sKTsKKyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIH0K
KyAgICAgIC8qIGRvY3R5cGVTeXNpZCB3aWxsIGJlIG5vbi1OVUxMIGluIHRoZSBjYXNlIG9mIGEg
cHJldmlvdXMKKyAgICAgICAgIFhNTF9ST0xFX0RPQ1RZUEVfU1lTVEVNX0lELCBldmVuIGlmIHN0
YXJ0RG9jdHlwZURlY2xIYW5kbGVyCisgICAgICAgICB3YXMgbm90IHNldCwgaW5kaWNhdGluZyBh
biBleHRlcm5hbCBzdWJzZXQKKyAgICAgICovCisjaWZkZWYgWE1MX0RURAorICAgICAgaWYgKGRv
Y3R5cGVTeXNpZCB8fCB1c2VGb3JlaWduRFREKSB7CisgICAgICAgIFhNTF9Cb29sIGhhZFBhcmFt
RW50aXR5UmVmcyA9IGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzOworICAgICAgICBkdGQtPmhhc1Bh
cmFtRW50aXR5UmVmcyA9IFhNTF9UUlVFOworICAgICAgICBpZiAocGFyYW1FbnRpdHlQYXJzaW5n
ICYmIGV4dGVybmFsRW50aXR5UmVmSGFuZGxlcikgeworICAgICAgICAgIEVOVElUWSAqZW50aXR5
ID0gKEVOVElUWSAqKWxvb2t1cChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZkdGQtPnBhcmFtRW50aXRpZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU3Vic2V0TmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVOVElUWSkpOworICAgICAg
ICAgIGlmICghZW50aXR5KQorICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7
CisgICAgICAgICAgaWYgKHVzZUZvcmVpZ25EVEQpCisgICAgICAgICAgICBlbnRpdHktPmJhc2Ug
PSBjdXJCYXNlOworICAgICAgICAgIGR0ZC0+cGFyYW1FbnRpdHlSZWFkID0gWE1MX0ZBTFNFOwor
ICAgICAgICAgIGlmICghZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKGV4dGVybmFsRW50aXR5UmVm
SGFuZGxlckFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+YmFzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPnN5c3RlbUlkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+cHVibGljSWQp
KQorICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9FWFRFUk5BTF9FTlRJVFlfSEFORExJTkc7
CisgICAgICAgICAgaWYgKGR0ZC0+cGFyYW1FbnRpdHlSZWFkKSB7CisgICAgICAgICAgICBpZiAo
IWR0ZC0+c3RhbmRhbG9uZSAmJgorICAgICAgICAgICAgICAgIG5vdFN0YW5kYWxvbmVIYW5kbGVy
ICYmCisgICAgICAgICAgICAgICAgIW5vdFN0YW5kYWxvbmVIYW5kbGVyKGhhbmRsZXJBcmcpKQor
ICAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PVF9TVEFOREFMT05FOworICAgICAgICAg
IH0KKyAgICAgICAgICAvKiBpZiB3ZSBkaWRuJ3QgcmVhZCB0aGUgZm9yZWlnbiBEVEQgdGhlbiB0
aGlzIG1lYW5zIHRoYXQgdGhlcmUKKyAgICAgICAgICAgICBpcyBubyBleHRlcm5hbCBzdWJzZXQg
YW5kIHdlIG11c3QgcmVzZXQgZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMKKyAgICAgICAgICAqLwor
ICAgICAgICAgIGVsc2UgaWYgKCFkb2N0eXBlU3lzaWQpCisgICAgICAgICAgICBkdGQtPmhhc1Bh
cmFtRW50aXR5UmVmcyA9IGhhZFBhcmFtRW50aXR5UmVmczsKKyAgICAgICAgICAvKiBlbmQgb2Yg
RFREIC0gbm8gbmVlZCB0byB1cGRhdGUgZHRkLT5rZWVwUHJvY2Vzc2luZyAqLworICAgICAgICB9
CisgICAgICAgIHVzZUZvcmVpZ25EVEQgPSBYTUxfRkFMU0U7CisgICAgICB9CisjZW5kaWYgLyog
WE1MX0RURCAqLworICAgICAgaWYgKGVuZERvY3R5cGVEZWNsSGFuZGxlcikgeworICAgICAgICBl
bmREb2N0eXBlRGVjbEhhbmRsZXIoaGFuZGxlckFyZyk7CisgICAgICAgIGhhbmRsZURlZmF1bHQg
PSBYTUxfRkFMU0U7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX0lO
U1RBTkNFX1NUQVJUOgorI2lmZGVmIFhNTF9EVEQKKyAgICAgIC8qIGlmIHRoZXJlIGlzIG5vIERP
Q1RZUEUgZGVjbGFyYXRpb24gdGhlbiBub3cgaXMgdGhlCisgICAgICAgICBsYXN0IGNoYW5jZSB0
byByZWFkIHRoZSBmb3JlaWduIERURAorICAgICAgKi8KKyAgICAgIGlmICh1c2VGb3JlaWduRFRE
KSB7CisgICAgICAgIFhNTF9Cb29sIGhhZFBhcmFtRW50aXR5UmVmcyA9IGR0ZC0+aGFzUGFyYW1F
bnRpdHlSZWZzOworICAgICAgICBkdGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IFhNTF9UUlVFOwor
ICAgICAgICBpZiAocGFyYW1FbnRpdHlQYXJzaW5nICYmIGV4dGVybmFsRW50aXR5UmVmSGFuZGxl
cikgeworICAgICAgICAgIEVOVElUWSAqZW50aXR5ID0gKEVOVElUWSAqKWxvb2t1cChwYXJzZXIs
ICZkdGQtPnBhcmFtRW50aXRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dGVybmFsU3Vic2V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVOVElUWSkpOworICAgICAgICAgIGlmICghZW50aXR5
KQorICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgZW50
aXR5LT5iYXNlID0gY3VyQmFzZTsKKyAgICAgICAgICBkdGQtPnBhcmFtRW50aXR5UmVhZCA9IFhN
TF9GQUxTRTsKKyAgICAgICAgICBpZiAoIWV4dGVybmFsRW50aXR5UmVmSGFuZGxlcihleHRlcm5h
bEVudGl0eVJlZkhhbmRsZXJBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkt
PmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5z
eXN0ZW1JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkt
PnB1YmxpY0lkKSkKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZ
X0hBTkRMSU5HOworICAgICAgICAgIGlmIChkdGQtPnBhcmFtRW50aXR5UmVhZCkgeworICAgICAg
ICAgICAgaWYgKCFkdGQtPnN0YW5kYWxvbmUgJiYKKyAgICAgICAgICAgICAgICBub3RTdGFuZGFs
b25lSGFuZGxlciAmJgorICAgICAgICAgICAgICAgICFub3RTdGFuZGFsb25lSGFuZGxlcihoYW5k
bGVyQXJnKSkKKyAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT1RfU1RBTkRBTE9ORTsK
KyAgICAgICAgICB9CisgICAgICAgICAgLyogaWYgd2UgZGlkbid0IHJlYWQgdGhlIGZvcmVpZ24g
RFREIHRoZW4gdGhpcyBtZWFucyB0aGF0IHRoZXJlCisgICAgICAgICAgICAgaXMgbm8gZXh0ZXJu
YWwgc3Vic2V0IGFuZCB3ZSBtdXN0IHJlc2V0IGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzCisgICAg
ICAgICAgKi8KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkdGQtPmhhc1BhcmFtRW50aXR5
UmVmcyA9IGhhZFBhcmFtRW50aXR5UmVmczsKKyAgICAgICAgICAvKiBlbmQgb2YgRFREIC0gbm8g
bmVlZCB0byB1cGRhdGUgZHRkLT5rZWVwUHJvY2Vzc2luZyAqLworICAgICAgICB9CisgICAgICB9
CisjZW5kaWYgLyogWE1MX0RURCAqLworICAgICAgcHJvY2Vzc29yID0gY29udGVudFByb2Nlc3Nv
cjsKKyAgICAgIHJldHVybiBjb250ZW50UHJvY2Vzc29yKHBhcnNlciwgcywgZW5kLCBuZXh0UHRy
KTsKKyAgICBjYXNlIFhNTF9ST0xFX0FUVExJU1RfRUxFTUVOVF9OQU1FOgorICAgICAgZGVjbEVs
ZW1lbnRUeXBlID0gZ2V0RWxlbWVudFR5cGUocGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAg
aWYgKCFkZWNsRWxlbWVudFR5cGUpCisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZ
OworICAgICAgZ290byBjaGVja0F0dExpc3REZWNsSGFuZGxlcjsKKyAgICBjYXNlIFhNTF9ST0xF
X0FUVFJJQlVURV9OQU1FOgorICAgICAgZGVjbEF0dHJpYnV0ZUlkID0gZ2V0QXR0cmlidXRlSWQo
cGFyc2VyLCBlbmMsIHMsIG5leHQpOworICAgICAgaWYgKCFkZWNsQXR0cmlidXRlSWQpCisgICAg
ICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgZGVjbEF0dHJpYnV0ZUlzQ2Rh
dGEgPSBYTUxfRkFMU0U7CisgICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IE5VTEw7CisgICAgICBk
ZWNsQXR0cmlidXRlSXNJZCA9IFhNTF9GQUxTRTsKKyAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVj
bEhhbmRsZXI7CisgICAgY2FzZSBYTUxfUk9MRV9BVFRSSUJVVEVfVFlQRV9DREFUQToKKyAgICAg
IGRlY2xBdHRyaWJ1dGVJc0NkYXRhID0gWE1MX1RSVUU7CisgICAgICBkZWNsQXR0cmlidXRlVHlw
ZSA9IGF0eXBlQ0RBVEE7CisgICAgICBnb3RvIGNoZWNrQXR0TGlzdERlY2xIYW5kbGVyOworICAg
IGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfSUQ6CisgICAgICBkZWNsQXR0cmlidXRlSXNJ
ZCA9IFhNTF9UUlVFOworICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBhdHlwZUlEOworICAgICAg
Z290byBjaGVja0F0dExpc3REZWNsSGFuZGxlcjsKKyAgICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVU
RV9UWVBFX0lEUkVGOgorICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBhdHlwZUlEUkVGOworICAg
ICAgZ290byBjaGVja0F0dExpc3REZWNsSGFuZGxlcjsKKyAgICBjYXNlIFhNTF9ST0xFX0FUVFJJ
QlVURV9UWVBFX0lEUkVGUzoKKyAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gYXR5cGVJRFJFRlM7
CisgICAgICBnb3RvIGNoZWNrQXR0TGlzdERlY2xIYW5kbGVyOworICAgIGNhc2UgWE1MX1JPTEVf
QVRUUklCVVRFX1RZUEVfRU5USVRZOgorICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBhdHlwZUVO
VElUWTsKKyAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7CisgICAgY2FzZSBYTUxf
Uk9MRV9BVFRSSUJVVEVfVFlQRV9FTlRJVElFUzoKKyAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0g
YXR5cGVFTlRJVElFUzsKKyAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7CisgICAg
Y2FzZSBYTUxfUk9MRV9BVFRSSUJVVEVfVFlQRV9OTVRPS0VOOgorICAgICAgZGVjbEF0dHJpYnV0
ZVR5cGUgPSBhdHlwZU5NVE9LRU47CisgICAgICBnb3RvIGNoZWNrQXR0TGlzdERlY2xIYW5kbGVy
OworICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfTk1UT0tFTlM6CisgICAgICBkZWNs
QXR0cmlidXRlVHlwZSA9IGF0eXBlTk1UT0tFTlM7CisgICAgY2hlY2tBdHRMaXN0RGVjbEhhbmRs
ZXI6CisgICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBhdHRsaXN0RGVjbEhhbmRsZXIp
CisgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICBicmVhazsKKyAgICBj
YXNlIFhNTF9ST0xFX0FUVFJJQlVURV9FTlVNX1ZBTFVFOgorICAgIGNhc2UgWE1MX1JPTEVfQVRU
UklCVVRFX05PVEFUSU9OX1ZBTFVFOgorICAgICAgaWYgKGR0ZC0+a2VlcFByb2Nlc3NpbmcgJiYg
YXR0bGlzdERlY2xIYW5kbGVyKSB7CisgICAgICAgIGNvbnN0IFhNTF9DaGFyICpwcmVmaXg7Cisg
ICAgICAgIGlmIChkZWNsQXR0cmlidXRlVHlwZSkgeworICAgICAgICAgIHByZWZpeCA9IGVudW1W
YWx1ZVNlcDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBwcmVmaXggPSAo
cm9sZSA9PSBYTUxfUk9MRV9BVFRSSUJVVEVfTk9UQVRJT05fVkFMVUUKKyAgICAgICAgICAgICAg
ICAgICAgPyBub3RhdGlvblByZWZpeAorICAgICAgICAgICAgICAgICAgICA6IGVudW1WYWx1ZVN0
YXJ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBvb2xBcHBlbmRTdHJpbmcoJnRlbXBQb29s
LCBwcmVmaXgpKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAg
ICBpZiAoIXBvb2xBcHBlbmQoJnRlbXBQb29sLCBlbmMsIHMsIG5leHQpKQorICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IHRl
bXBQb29sLnN0YXJ0OworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAg
fQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9JTVBMSUVEX0FUVFJJQlVURV9WQUxV
RToKKyAgICBjYXNlIFhNTF9ST0xFX1JFUVVJUkVEX0FUVFJJQlVURV9WQUxVRToKKyAgICAgIGlm
IChkdGQtPmtlZXBQcm9jZXNzaW5nKSB7CisgICAgICAgIGlmICghZGVmaW5lQXR0cmlidXRlKGRl
Y2xFbGVtZW50VHlwZSwgZGVjbEF0dHJpYnV0ZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWNsQXR0cmlidXRlSXNDZGF0YSwgZGVjbEF0dHJpYnV0ZUlzSWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIHBhcnNlcikpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7CisgICAgICAgIGlmIChhdHRsaXN0RGVjbEhhbmRsZXIgJiYgZGVjbEF0dHJp
YnV0ZVR5cGUpIHsKKyAgICAgICAgICBpZiAoKmRlY2xBdHRyaWJ1dGVUeXBlID09IFhNTF9UKEFT
Q0lJX0xQQVJFTikKKyAgICAgICAgICAgICAgfHwgKCpkZWNsQXR0cmlidXRlVHlwZSA9PSBYTUxf
VChBU0NJSV9OKQorICAgICAgICAgICAgICAgICAgJiYgZGVjbEF0dHJpYnV0ZVR5cGVbMV0gPT0g
WE1MX1QoQVNDSUlfTykpKSB7CisgICAgICAgICAgICAvKiBFbnVtZXJhdGVkIG9yIE5vdGF0aW9u
IHR5cGUgKi8KKyAgICAgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxf
VChBU0NJSV9SUEFSRU4pKQorICAgICAgICAgICAgICAgIHx8ICFwb29sQXBwZW5kQ2hhcigmdGVt
cFBvb2wsIFhNTF9UKCdcMCcpKSkKKyAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19N
RU1PUlk7CisgICAgICAgICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IHRlbXBQb29sLnN0YXJ0Owor
ICAgICAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOworICAgICAgICAgIH0KKyAgICAgICAg
ICAqZXZlbnRFbmRQUCA9IHM7CisgICAgICAgICAgYXR0bGlzdERlY2xIYW5kbGVyKGhhbmRsZXJB
cmcsIGRlY2xFbGVtZW50VHlwZS0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbEF0dHJpYnV0ZUlkLT5uYW1lLCBkZWNsQXR0cmlidXRlVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgcm9sZSA9PSBYTUxfUk9MRV9SRVFVSVJFRF9BVFRSSUJVVEVfVkFM
VUUpOworICAgICAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wpOworICAgICAgICAgIGhhbmRsZURl
ZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAg
IGNhc2UgWE1MX1JPTEVfREVGQVVMVF9BVFRSSUJVVEVfVkFMVUU6CisgICAgY2FzZSBYTUxfUk9M
RV9GSVhFRF9BVFRSSUJVVEVfVkFMVUU6CisgICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZykg
eworICAgICAgICBjb25zdCBYTUxfQ2hhciAqYXR0VmFsOworICAgICAgICBlbnVtIFhNTF9FcnJv
ciByZXN1bHQgPQorICAgICAgICAgIHN0b3JlQXR0cmlidXRlVmFsdWUocGFyc2VyLCBlbmMsIGRl
Y2xBdHRyaWJ1dGVJc0NkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVu
Yy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAt
IGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR0
ZC0+cG9vbCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgYXR0VmFsID0gcG9vbFN0YXJ0KCZkdGQtPnBvb2wpOworICAgICAgICBwb29sRmlu
aXNoKCZkdGQtPnBvb2wpOworICAgICAgICAvKiBJRCBhdHRyaWJ1dGVzIGFyZW4ndCBhbGxvd2Vk
IHRvIGhhdmUgYSBkZWZhdWx0ICovCisgICAgICAgIGlmICghZGVmaW5lQXR0cmlidXRlKGRlY2xF
bGVtZW50VHlwZSwgZGVjbEF0dHJpYnV0ZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWNsQXR0cmlidXRlSXNDZGF0YSwgWE1MX0ZBTFNFLCBhdHRWYWwsIHBhcnNlcikpCisgICAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIGlmIChhdHRsaXN0RGVj
bEhhbmRsZXIgJiYgZGVjbEF0dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAgICBpZiAoKmRlY2xBdHRy
aWJ1dGVUeXBlID09IFhNTF9UKEFTQ0lJX0xQQVJFTikKKyAgICAgICAgICAgICAgfHwgKCpkZWNs
QXR0cmlidXRlVHlwZSA9PSBYTUxfVChBU0NJSV9OKQorICAgICAgICAgICAgICAgICAgJiYgZGVj
bEF0dHJpYnV0ZVR5cGVbMV0gPT0gWE1MX1QoQVNDSUlfTykpKSB7CisgICAgICAgICAgICAvKiBF
bnVtZXJhdGVkIG9yIE5vdGF0aW9uIHR5cGUgKi8KKyAgICAgICAgICAgIGlmICghcG9vbEFwcGVu
ZENoYXIoJnRlbXBQb29sLCBYTUxfVChBU0NJSV9SUEFSRU4pKQorICAgICAgICAgICAgICAgIHx8
ICFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKCdcMCcpKSkKKyAgICAgICAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgICBkZWNsQXR0cmlidXRlVHlw
ZSA9IHRlbXBQb29sLnN0YXJ0OworICAgICAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOwor
ICAgICAgICAgIH0KKyAgICAgICAgICAqZXZlbnRFbmRQUCA9IHM7CisgICAgICAgICAgYXR0bGlz
dERlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIGRlY2xFbGVtZW50VHlwZS0+bmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVjbEF0dHJpYnV0ZUlkLT5uYW1lLCBkZWNsQXR0cmlidXRl
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0VmFsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByb2xlID09IFhNTF9ST0xFX0ZJWEVEX0FUVFJJQlVURV9WQUxVRSk7
CisgICAgICAgICAgcG9vbENsZWFyKCZ0ZW1wUG9vbCk7CisgICAgICAgICAgaGFuZGxlRGVmYXVs
dCA9IFhNTF9GQUxTRTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBYTUxfUk9MRV9FTlRJVFlfVkFMVUU6CisgICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZykg
eworICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBzdG9yZUVudGl0eVZhbHVlKHBhcnNl
ciwgZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsg
ZW5jLT5taW5CeXRlc1BlckNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7CisgICAgICAgIGlmIChkZWNs
RW50aXR5KSB7CisgICAgICAgICAgZGVjbEVudGl0eS0+dGV4dFB0ciA9IHBvb2xTdGFydCgmZHRk
LT5lbnRpdHlWYWx1ZVBvb2wpOworICAgICAgICAgIGRlY2xFbnRpdHktPnRleHRMZW4gPSAoaW50
KShwb29sTGVuZ3RoKCZkdGQtPmVudGl0eVZhbHVlUG9vbCkpOworICAgICAgICAgIHBvb2xGaW5p
c2goJmR0ZC0+ZW50aXR5VmFsdWVQb29sKTsKKyAgICAgICAgICBpZiAoZW50aXR5RGVjbEhhbmRs
ZXIpIHsKKyAgICAgICAgICAgICpldmVudEVuZFBQID0gczsKKyAgICAgICAgICAgIGVudGl0eURl
Y2xIYW5kbGVyKGhhbmRsZXJBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNs
RW50aXR5LT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+
aXNfcGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT50ZXh0
UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+dGV4dExlbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckJhc2UsIDAsIDAsIDApOworICAgICAg
ICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICAgIHBvb2xEaXNjYXJkKCZkdGQtPmVudGl0eVZhbHVlUG9v
bCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfRE9D
VFlQRV9TWVNURU1fSUQ6CisjaWZkZWYgWE1MX0RURAorICAgICAgdXNlRm9yZWlnbkRURCA9IFhN
TF9GQUxTRTsKKyNlbmRpZiAvKiBYTUxfRFREICovCisgICAgICBkdGQtPmhhc1BhcmFtRW50aXR5
UmVmcyA9IFhNTF9UUlVFOworICAgICAgaWYgKHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKSB7Cisg
ICAgICAgIGRvY3R5cGVTeXNpZCA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVy
Q2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMt
Pm1pbkJ5dGVzUGVyQ2hhcik7CisgICAgICAgIGlmIChkb2N0eXBlU3lzaWQgPT0gTlVMTCkKKyAg
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgcG9vbEZpbmlzaCgm
dGVtcFBvb2wpOworICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQor
I2lmZGVmIFhNTF9EVEQKKyAgICAgIGVsc2UKKyAgICAgICAgLyogdXNlIGV4dGVybmFsU3Vic2V0
TmFtZSB0byBtYWtlIGRvY3R5cGVTeXNpZCBub24tTlVMTAorICAgICAgICAgICBmb3IgdGhlIGNh
c2Ugd2hlcmUgbm8gc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIgaXMgc2V0ICovCisgICAgICAgIGRv
Y3R5cGVTeXNpZCA9IGV4dGVybmFsU3Vic2V0TmFtZTsKKyNlbmRpZiAvKiBYTUxfRFREICovCisg
ICAgICBpZiAoIWR0ZC0+c3RhbmRhbG9uZQorI2lmZGVmIFhNTF9EVEQKKyAgICAgICAgICAmJiAh
cGFyYW1FbnRpdHlQYXJzaW5nCisjZW5kaWYgLyogWE1MX0RURCAqLworICAgICAgICAgICYmIG5v
dFN0YW5kYWxvbmVIYW5kbGVyCisgICAgICAgICAgJiYgIW5vdFN0YW5kYWxvbmVIYW5kbGVyKGhh
bmRsZXJBcmcpKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PVF9TVEFOREFMT05FOworI2lm
bmRlZiBYTUxfRFRECisgICAgICBicmVhazsKKyNlbHNlIC8qIFhNTF9EVEQgKi8KKyAgICAgIGlm
ICghZGVjbEVudGl0eSkgeworICAgICAgICBkZWNsRW50aXR5ID0gKEVOVElUWSAqKWxvb2t1cChw
YXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdGQtPnBhcmFt
RW50aXRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFs
U3Vic2V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
KEVOVElUWSkpOworICAgICAgICBpZiAoIWRlY2xFbnRpdHkpCisgICAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIGRlY2xFbnRpdHktPnB1YmxpY0lkID0gTlVMTDsK
KyAgICAgIH0KKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworI2VuZGlmIC8qIFhNTF9EVEQgKi8K
KyAgICBjYXNlIFhNTF9ST0xFX0VOVElUWV9TWVNURU1fSUQ6CisgICAgICBpZiAoZHRkLT5rZWVw
UHJvY2Vzc2luZyAmJiBkZWNsRW50aXR5KSB7CisgICAgICAgIGRlY2xFbnRpdHktPnN5c3RlbUlk
ID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5t
aW5CeXRlc1BlckNoYXIpOworICAgICAgICBpZiAoIWRlY2xFbnRpdHktPnN5c3RlbUlkKQorICAg
ICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICBkZWNsRW50aXR5LT5i
YXNlID0gY3VyQmFzZTsKKyAgICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsKKyAgICAgICAg
aWYgKGVudGl0eURlY2xIYW5kbGVyKQorICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFM
U0U7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX0VOVElUWV9DT01Q
TEVURToKKyAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nICYmIGRlY2xFbnRpdHkgJiYgZW50
aXR5RGVjbEhhbmRsZXIpIHsKKyAgICAgICAgKmV2ZW50RW5kUFAgPSBzOworICAgICAgICBlbnRp
dHlEZWNsSGFuZGxlcihoYW5kbGVyQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNs
RW50aXR5LT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5pc19w
YXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWNsRW50aXR5LT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNs
RW50aXR5LT5zeXN0ZW1JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+
cHVibGljSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICBoYW5kbGVE
ZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxf
Uk9MRV9FTlRJVFlfTk9UQVRJT05fTkFNRToKKyAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5n
ICYmIGRlY2xFbnRpdHkpIHsKKyAgICAgICAgZGVjbEVudGl0eS0+bm90YXRpb24gPSBwb29sU3Rv
cmVTdHJpbmcoJmR0ZC0+cG9vbCwgZW5jLCBzLCBuZXh0KTsKKyAgICAgICAgaWYgKCFkZWNsRW50
aXR5LT5ub3RhdGlvbikKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAg
ICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsKKyAgICAgICAgaWYgKHVucGFyc2VkRW50aXR5
RGVjbEhhbmRsZXIpIHsKKyAgICAgICAgICAqZXZlbnRFbmRQUCA9IHM7CisgICAgICAgICAgdW5w
YXJzZWRFbnRpdHlEZWNsSGFuZGxlcihoYW5kbGVyQXJnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlY2xFbnRpdHktPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWNsRW50aXR5LT5zeXN0ZW1JZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlY2xFbnRpdHktPnB1YmxpY0lkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+bm90YXRpb24pOworICAgICAgICAgIGhhbmRsZURl
ZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZW50aXR5RGVj
bEhhbmRsZXIpIHsKKyAgICAgICAgICAqZXZlbnRFbmRQUCA9IHM7CisgICAgICAgICAgZW50aXR5
RGVjbEhhbmRsZXIoaGFuZGxlckFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNs
RW50aXR5LT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsMCwwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPmJhc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVjbEVudGl0eS0+c3lzdGVtSWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVjbEVudGl0eS0+cHVibGljSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbEVudGl0eS0+bm90YXRpb24pOworICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFM
U0U7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVf
R0VORVJBTF9FTlRJVFlfTkFNRToKKyAgICAgIHsKKyAgICAgICAgaWYgKFhtbFByZWRlZmluZWRF
bnRpdHlOYW1lKGVuYywgcywgbmV4dCkpIHsKKyAgICAgICAgICBkZWNsRW50aXR5ID0gTlVMTDsK
KyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vz
c2luZykgeworICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lID0gcG9vbFN0b3JlU3RyaW5n
KCZkdGQtPnBvb2wsIGVuYywgcywgbmV4dCk7CisgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgZGVjbEVudGl0eSA9
IChFTlRJVFkgKilsb29rdXAocGFyc2VyLCAmZHRkLT5nZW5lcmFsRW50aXRpZXMsIG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVOVElUWSkpOwor
ICAgICAgICAgIGlmICghZGVjbEVudGl0eSkKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9fTUVNT1JZOworICAgICAgICAgIGlmIChkZWNsRW50aXR5LT5uYW1lICE9IG5hbWUpIHsKKyAg
ICAgICAgICAgIHBvb2xEaXNjYXJkKCZkdGQtPnBvb2wpOworICAgICAgICAgICAgZGVjbEVudGl0
eSA9IE5VTEw7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcG9v
bEZpbmlzaCgmZHRkLT5wb29sKTsKKyAgICAgICAgICAgIGRlY2xFbnRpdHktPnB1YmxpY0lkID0g
TlVMTDsKKyAgICAgICAgICAgIGRlY2xFbnRpdHktPmlzX3BhcmFtID0gWE1MX0ZBTFNFOworICAg
ICAgICAgICAgLyogaWYgd2UgaGF2ZSBhIHBhcmVudCBwYXJzZXIgb3IgYXJlIHJlYWRpbmcgYW4g
aW50ZXJuYWwgcGFyYW1ldGVyCisgICAgICAgICAgICAgICBlbnRpdHksIHRoZW4gdGhlIGVudGl0
eSBkZWNsYXJhdGlvbiBpcyBub3QgY29uc2lkZXJlZCAiaW50ZXJuYWwiCisgICAgICAgICAgICAq
LworICAgICAgICAgICAgZGVjbEVudGl0eS0+aXNfaW50ZXJuYWwgPSAhKHBhcmVudFBhcnNlciB8
fCBvcGVuSW50ZXJuYWxFbnRpdGllcyk7CisgICAgICAgICAgICBpZiAoZW50aXR5RGVjbEhhbmRs
ZXIpCisgICAgICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHBvb2xEaXNjYXJkKCZkdGQt
PnBvb2wpOworICAgICAgICAgIGRlY2xFbnRpdHkgPSBOVUxMOworICAgICAgICB9CisgICAgICB9
CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX1BBUkFNX0VOVElUWV9OQU1FOgorI2lm
ZGVmIFhNTF9EVEQKKyAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nKSB7CisgICAgICAgIGNv
bnN0IFhNTF9DaGFyICpuYW1lID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywgcywg
bmV4dCk7CisgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
X01FTU9SWTsKKyAgICAgICAgZGVjbEVudGl0eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLCAm
ZHRkLT5wYXJhbUVudGl0aWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUsIHNpemVvZihFTlRJVFkpKTsKKyAgICAgICAgaWYgKCFkZWNsRW50aXR5KQor
ICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICBpZiAoZGVjbEVu
dGl0eS0+bmFtZSAhPSBuYW1lKSB7CisgICAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7
CisgICAgICAgICAgZGVjbEVudGl0eSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsKKyAgICAgICAgICBkZWNsRW50aXR5
LT5wdWJsaWNJZCA9IE5VTEw7CisgICAgICAgICAgZGVjbEVudGl0eS0+aXNfcGFyYW0gPSBYTUxf
VFJVRTsKKyAgICAgICAgICAvKiBpZiB3ZSBoYXZlIGEgcGFyZW50IHBhcnNlciBvciBhcmUgcmVh
ZGluZyBhbiBpbnRlcm5hbCBwYXJhbWV0ZXIKKyAgICAgICAgICAgICBlbnRpdHksIHRoZW4gdGhl
IGVudGl0eSBkZWNsYXJhdGlvbiBpcyBub3QgY29uc2lkZXJlZCAiaW50ZXJuYWwiCisgICAgICAg
ICAgKi8KKyAgICAgICAgICBkZWNsRW50aXR5LT5pc19pbnRlcm5hbCA9ICEocGFyZW50UGFyc2Vy
IHx8IG9wZW5JbnRlcm5hbEVudGl0aWVzKTsKKyAgICAgICAgICBpZiAoZW50aXR5RGVjbEhhbmRs
ZXIpCisgICAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgICB9Cisg
ICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7Cisg
ICAgICAgIGRlY2xFbnRpdHkgPSBOVUxMOworICAgICAgfQorI2Vsc2UgLyogbm90IFhNTF9EVEQg
Ki8KKyAgICAgIGRlY2xFbnRpdHkgPSBOVUxMOworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICAg
IGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfTk9UQVRJT05fTkFNRToKKyAgICAgIGRlY2xOb3Rh
dGlvblB1YmxpY0lkID0gTlVMTDsKKyAgICAgIGRlY2xOb3RhdGlvbk5hbWUgPSBOVUxMOworICAg
ICAgaWYgKG5vdGF0aW9uRGVjbEhhbmRsZXIpIHsKKyAgICAgICAgZGVjbE5vdGF0aW9uTmFtZSA9
IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywgcywgbmV4dCk7CisgICAgICAgIGlmICgh
ZGVjbE5vdGF0aW9uTmFtZSkKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsK
KyAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOworICAgICAgICBoYW5kbGVEZWZhdWx0ID0g
WE1MX0ZBTFNFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9OT1RB
VElPTl9QVUJMSUNfSUQ6CisgICAgICBpZiAoIVhtbElzUHVibGljSWQoZW5jLCBzLCBuZXh0LCBl
dmVudFBQKSkKKyAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QVUJMSUNJRDsKKyAgICAgIGlmIChk
ZWNsTm90YXRpb25OYW1lKSB7ICAvKiBtZWFucyBub3RhdGlvbkRlY2xIYW5kbGVyICE9IE5VTEwg
Ki8KKyAgICAgICAgWE1MX0NoYXIgKnRlbSA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRl
c1BlckNoYXIpOworICAgICAgICBpZiAoIXRlbSkKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X05PX01FTU9SWTsKKyAgICAgICAgbm9ybWFsaXplUHVibGljSWQodGVtKTsKKyAgICAgICAgZGVj
bE5vdGF0aW9uUHVibGljSWQgPSB0ZW07CisgICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsK
KyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFr
OworICAgIGNhc2UgWE1MX1JPTEVfTk9UQVRJT05fU1lTVEVNX0lEOgorICAgICAgaWYgKGRlY2xO
b3RhdGlvbk5hbWUgJiYgbm90YXRpb25EZWNsSGFuZGxlcikgeworICAgICAgICBjb25zdCBYTUxf
Q2hhciAqc3lzdGVtSWQKKyAgICAgICAgICA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVu
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFy
KTsKKyAgICAgICAgaWYgKCFzeXN0ZW1JZCkKKyAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
X01FTU9SWTsKKyAgICAgICAgKmV2ZW50RW5kUFAgPSBzOworICAgICAgICBub3RhdGlvbkRlY2xI
YW5kbGVyKGhhbmRsZXJBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbE5vdGF0
aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJCYXNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN5c3RlbUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlY2xOb3RhdGlvblB1YmxpY0lkKTsKKyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxT
RTsKKyAgICAgIH0KKyAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wpOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBYTUxfUk9MRV9OT1RBVElPTl9OT19TWVNURU1fSUQ6CisgICAgICBpZiAoZGVjbE5v
dGF0aW9uUHVibGljSWQgJiYgbm90YXRpb25EZWNsSGFuZGxlcikgeworICAgICAgICAqZXZlbnRF
bmRQUCA9IHM7CisgICAgICAgIG5vdGF0aW9uRGVjbEhhbmRsZXIoaGFuZGxlckFyZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWNsTm90YXRpb25OYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1ckJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsTm90YXRpb25QdWJsaWNJZCk7CisgICAgICAg
IGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICB9CisgICAgICBwb29sQ2xlYXIoJnRl
bXBQb29sKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfRVJST1I6CisgICAgICBz
d2l0Y2ggKHRvaykgeworICAgICAgY2FzZSBYTUxfVE9LX1BBUkFNX0VOVElUWV9SRUY6CisgICAg
ICAgIC8qIFBFIHJlZmVyZW5jZXMgaW4gaW50ZXJuYWwgc3Vic2V0IGFyZQorICAgICAgICAgICBu
b3QgYWxsb3dlZCB3aXRoaW4gZGVjbGFyYXRpb25zLiAqLworICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX1BBUkFNX0VOVElUWV9SRUY7CisgICAgICBjYXNlIFhNTF9UT0tfWE1MX0RFQ0w6CisgICAg
ICAgIHJldHVybiBYTUxfRVJST1JfTUlTUExBQ0VEX1hNTF9QSTsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBYTUxfRVJST1JfU1lOVEFYOworICAgICAgfQorI2lmZGVmIFhNTF9EVEQK
KyAgICBjYXNlIFhNTF9ST0xFX0lHTk9SRV9TRUNUOgorICAgICAgeworICAgICAgICBlbnVtIFhN
TF9FcnJvciByZXN1bHQ7CisgICAgICAgIGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAgICAgICBy
ZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKKyAgICAgICAgaGFuZGxlRGVmYXVs
dCA9IFhNTF9GQUxTRTsKKyAgICAgICAgcmVzdWx0ID0gZG9JZ25vcmVTZWN0aW9uKHBhcnNlciwg
ZW5jLCAmbmV4dCwgZW5kLCBuZXh0UHRyLCBoYXZlTW9yZSk7CisgICAgICAgIGlmIChyZXN1bHQg
IT0gWE1MX0VSUk9SX05PTkUpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgZWxz
ZSBpZiAoIW5leHQpIHsKKyAgICAgICAgICBwcm9jZXNzb3IgPSBpZ25vcmVTZWN0aW9uUHJvY2Vz
c29yOworICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAg
IGJyZWFrOworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICBjYXNlIFhNTF9ST0xFX0dST1VQX09Q
RU46CisgICAgICBpZiAocHJvbG9nU3RhdGUubGV2ZWwgPj0gZ3JvdXBTaXplKSB7CisgICAgICAg
IGlmIChncm91cFNpemUpIHsKKyAgICAgICAgICBjaGFyICp0ZW1wID0gKGNoYXIgKilSRUFMTE9D
KGdyb3VwQ29ubmVjdG9yLCBncm91cFNpemUgKj0gMik7CisgICAgICAgICAgaWYgKHRlbXAgPT0g
TlVMTCkKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICAg
IGdyb3VwQ29ubmVjdG9yID0gdGVtcDsKKyAgICAgICAgICBpZiAoZHRkLT5zY2FmZkluZGV4KSB7
CisgICAgICAgICAgICBpbnQgKnRlbXAgPSAoaW50ICopUkVBTExPQyhkdGQtPnNjYWZmSW5kZXgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwU2l6ZSAqIHNpemVvZihpbnQpKTsKKyAg
ICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgICAgICAgIHJldHVybiBYTUxfRVJS
T1JfTk9fTUVNT1JZOworICAgICAgICAgICAgZHRkLT5zY2FmZkluZGV4ID0gdGVtcDsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZ3JvdXBDb25uZWN0
b3IgPSAoY2hhciAqKU1BTExPQyhncm91cFNpemUgPSAzMik7CisgICAgICAgICAgaWYgKCFncm91
cENvbm5lY3RvcikKKyAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAg
ICAgICB9CisgICAgICB9CisgICAgICBncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0g
PSAwOworICAgICAgaWYgKGR0ZC0+aW5fZWxkZWNsKSB7CisgICAgICAgIGludCBteWluZGV4ID0g
bmV4dFNjYWZmb2xkUGFydChwYXJzZXIpOworICAgICAgICBpZiAobXlpbmRleCA8IDApCisgICAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIGR0ZC0+c2NhZmZJbmRl
eFtkdGQtPnNjYWZmTGV2ZWxdID0gbXlpbmRleDsKKyAgICAgICAgZHRkLT5zY2FmZkxldmVsKys7
CisgICAgICAgIGR0ZC0+c2NhZmZvbGRbbXlpbmRleF0udHlwZSA9IFhNTF9DVFlQRV9TRVE7Cisg
ICAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRsZXIpCisgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9
IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfR1JP
VVBfU0VRVUVOQ0U6CisgICAgICBpZiAoZ3JvdXBDb25uZWN0b3JbcHJvbG9nU3RhdGUubGV2ZWxd
ID09IEFTQ0lJX1BJUEUpCisgICAgICAgIHJldHVybiBYTUxfRVJST1JfU1lOVEFYOworICAgICAg
Z3JvdXBDb25uZWN0b3JbcHJvbG9nU3RhdGUubGV2ZWxdID0gQVNDSUlfQ09NTUE7CisgICAgICBp
ZiAoZHRkLT5pbl9lbGRlY2wgJiYgZWxlbWVudERlY2xIYW5kbGVyKQorICAgICAgICBoYW5kbGVE
ZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9HUk9V
UF9DSE9JQ0U6CisgICAgICBpZiAoZ3JvdXBDb25uZWN0b3JbcHJvbG9nU3RhdGUubGV2ZWxdID09
IEFTQ0lJX0NPTU1BKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1NZTlRBWDsKKyAgICAgIGlm
IChkdGQtPmluX2VsZGVjbAorICAgICAgICAgICYmICFncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0
ZS5sZXZlbF0KKyAgICAgICAgICAmJiAoZHRkLT5zY2FmZm9sZFtkdGQtPnNjYWZmSW5kZXhbZHRk
LT5zY2FmZkxldmVsIC0gMV1dLnR5cGUKKyAgICAgICAgICAgICAgIT0gWE1MX0NUWVBFX01JWEVE
KQorICAgICAgICAgICkgeworICAgICAgICBkdGQtPnNjYWZmb2xkW2R0ZC0+c2NhZmZJbmRleFtk
dGQtPnNjYWZmTGV2ZWwgLSAxXV0udHlwZQorICAgICAgICAgICAgPSBYTUxfQ1RZUEVfQ0hPSUNF
OworICAgICAgICBpZiAoZWxlbWVudERlY2xIYW5kbGVyKQorICAgICAgICAgIGhhbmRsZURlZmF1
bHQgPSBYTUxfRkFMU0U7CisgICAgICB9CisgICAgICBncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0
ZS5sZXZlbF0gPSBBU0NJSV9QSVBFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9MRV9Q
QVJBTV9FTlRJVFlfUkVGOgorI2lmZGVmIFhNTF9EVEQKKyAgICBjYXNlIFhNTF9ST0xFX0lOTkVS
X1BBUkFNX0VOVElUWV9SRUY6CisgICAgICBkdGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IFhNTF9U
UlVFOworICAgICAgaWYgKCFwYXJhbUVudGl0eVBhcnNpbmcpCisgICAgICAgIGR0ZC0+a2VlcFBy
b2Nlc3NpbmcgPSBkdGQtPnN0YW5kYWxvbmU7CisgICAgICBlbHNlIHsKKyAgICAgICAgY29uc3Qg
WE1MX0NoYXIgKm5hbWU7CisgICAgICAgIEVOVElUWSAqZW50aXR5OworICAgICAgICBuYW1lID0g
cG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOworICAgICAgICBpZiAoIW5h
bWUpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIGVudGl0
eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLCAmZHRkLT5wYXJhbUVudGl0aWVzLCBuYW1lLCAw
KTsKKyAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7CisgICAgICAgIC8qIGZpcnN0LCBk
ZXRlcm1pbmUgaWYgYSBjaGVjayBmb3IgYW4gZXhpc3RpbmcgZGVjbGFyYXRpb24gaXMgbmVlZGVk
OworICAgICAgICAgICBpZiB5ZXMsIGNoZWNrIHRoYXQgdGhlIGVudGl0eSBleGlzdHMsIGFuZCB0
aGF0IGl0IGlzIGludGVybmFsLAorICAgICAgICAgICBvdGhlcndpc2UgY2FsbCB0aGUgc2tpcHBl
ZCBlbnRpdHkgaGFuZGxlcgorICAgICAgICAqLworICAgICAgICBpZiAocHJvbG9nU3RhdGUuZG9j
dW1lbnRFbnRpdHkgJiYKKyAgICAgICAgICAgIChkdGQtPnN0YW5kYWxvbmUKKyAgICAgICAgICAg
ICA/ICFvcGVuSW50ZXJuYWxFbnRpdGllcworICAgICAgICAgICAgIDogIWR0ZC0+aGFzUGFyYW1F
bnRpdHlSZWZzKSkgeworICAgICAgICAgIGlmICghZW50aXR5KQorICAgICAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9VTkRFRklORURfRU5USVRZOworICAgICAgICAgIGVsc2UgaWYgKCFlbnRpdHkt
PmlzX2ludGVybmFsKQorICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9FTlRJVFlfREVDTEFS
RURfSU5fUEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIWVudGl0eSkgeworICAgICAg
ICAgIGR0ZC0+a2VlcFByb2Nlc3NpbmcgPSBkdGQtPnN0YW5kYWxvbmU7CisgICAgICAgICAgLyog
Y2Fubm90IHJlcG9ydCBza2lwcGVkIGVudGl0aWVzIGluIGRlY2xhcmF0aW9ucyAqLworICAgICAg
ICAgIGlmICgocm9sZSA9PSBYTUxfUk9MRV9QQVJBTV9FTlRJVFlfUkVGKSAmJiBza2lwcGVkRW50
aXR5SGFuZGxlcikgeworICAgICAgICAgICAgc2tpcHBlZEVudGl0eUhhbmRsZXIoaGFuZGxlckFy
ZywgbmFtZSwgMSk7CisgICAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAg
ICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW50aXR5
LT5vcGVuKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfUkVDVVJTSVZFX0VOVElUWV9SRUY7
CisgICAgICAgIGlmIChlbnRpdHktPnRleHRQdHIpIHsKKyAgICAgICAgICBlbnVtIFhNTF9FcnJv
ciByZXN1bHQ7CisgICAgICAgICAgWE1MX0Jvb2wgYmV0d2VlbkRlY2wgPQorICAgICAgICAgICAg
KHJvbGUgPT0gWE1MX1JPTEVfUEFSQU1fRU5USVRZX1JFRiA/IFhNTF9UUlVFIDogWE1MX0ZBTFNF
KTsKKyAgICAgICAgICByZXN1bHQgPSBwcm9jZXNzSW50ZXJuYWxFbnRpdHkocGFyc2VyLCBlbnRp
dHksIGJldHdlZW5EZWNsKTsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05F
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0g
WE1MX0ZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChleHRl
cm5hbEVudGl0eVJlZkhhbmRsZXIpIHsKKyAgICAgICAgICBkdGQtPnBhcmFtRW50aXR5UmVhZCA9
IFhNTF9GQUxTRTsKKyAgICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfVFJVRTsKKyAgICAgICAg
ICBpZiAoIWV4dGVybmFsRW50aXR5UmVmSGFuZGxlcihleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJB
cmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPmJhc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5zeXN0ZW1JZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPnB1YmxpY0lkKSkgeworICAg
ICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNFOworICAgICAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9FWFRFUk5BTF9FTlRJVFlfSEFORExJTkc7CisgICAgICAgICAgfQorICAgICAgICAg
IGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsKKyAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1M
X0ZBTFNFOworICAgICAgICAgIGlmICghZHRkLT5wYXJhbUVudGl0eVJlYWQpIHsKKyAgICAgICAg
ICAgIGR0ZC0+a2VlcFByb2Nlc3NpbmcgPSBkdGQtPnN0YW5kYWxvbmU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ZHRkLT5rZWVwUHJvY2Vzc2luZyA9IGR0ZC0+c3RhbmRhbG9uZTsKKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgfQorI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICAgIGlmICghZHRk
LT5zdGFuZGFsb25lICYmCisgICAgICAgICAgbm90U3RhbmRhbG9uZUhhbmRsZXIgJiYKKyAgICAg
ICAgICAhbm90U3RhbmRhbG9uZUhhbmRsZXIoaGFuZGxlckFyZykpCisgICAgICAgIHJldHVybiBY
TUxfRVJST1JfTk9UX1NUQU5EQUxPTkU7CisgICAgICBicmVhazsKKworICAgIC8qIEVsZW1lbnQg
ZGVjbGFyYXRpb24gc3R1ZmYgKi8KKworICAgIGNhc2UgWE1MX1JPTEVfRUxFTUVOVF9OQU1FOgor
ICAgICAgaWYgKGVsZW1lbnREZWNsSGFuZGxlcikgeworICAgICAgICBkZWNsRWxlbWVudFR5cGUg
PSBnZXRFbGVtZW50VHlwZShwYXJzZXIsIGVuYywgcywgbmV4dCk7CisgICAgICAgIGlmICghZGVj
bEVsZW1lbnRUeXBlKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAg
ICAgICBkdGQtPnNjYWZmTGV2ZWwgPSAwOworICAgICAgICBkdGQtPnNjYWZmQ291bnQgPSAwOwor
ICAgICAgICBkdGQtPmluX2VsZGVjbCA9IFhNTF9UUlVFOworICAgICAgICBoYW5kbGVEZWZhdWx0
ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFhNTF9ST0xF
X0NPTlRFTlRfQU5ZOgorICAgIGNhc2UgWE1MX1JPTEVfQ09OVEVOVF9FTVBUWToKKyAgICAgIGlm
IChkdGQtPmluX2VsZGVjbCkgeworICAgICAgICBpZiAoZWxlbWVudERlY2xIYW5kbGVyKSB7Cisg
ICAgICAgICAgWE1MX0NvbnRlbnQgKiBjb250ZW50ID0gKFhNTF9Db250ZW50ICopIE1BTExPQyhz
aXplb2YoWE1MX0NvbnRlbnQpKTsKKyAgICAgICAgICBpZiAoIWNvbnRlbnQpCisgICAgICAgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgICBjb250ZW50LT5xdWFudCA9
IFhNTF9DUVVBTlRfTk9ORTsKKyAgICAgICAgICBjb250ZW50LT5uYW1lID0gTlVMTDsKKyAgICAg
ICAgICBjb250ZW50LT5udW1jaGlsZHJlbiA9IDA7CisgICAgICAgICAgY29udGVudC0+Y2hpbGRy
ZW4gPSBOVUxMOworICAgICAgICAgIGNvbnRlbnQtPnR5cGUgPSAoKHJvbGUgPT0gWE1MX1JPTEVf
Q09OVEVOVF9BTlkpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9DVFlQRV9BTlkg
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NUWVBFX0VNUFRZKTsKKyAgICAgICAg
ICAqZXZlbnRFbmRQUCA9IHM7CisgICAgICAgICAgZWxlbWVudERlY2xIYW5kbGVyKGhhbmRsZXJB
cmcsIGRlY2xFbGVtZW50VHlwZS0+bmFtZSwgY29udGVudCk7CisgICAgICAgICAgaGFuZGxlRGVm
YXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgICAgfQorICAgICAgICBkdGQtPmluX2VsZGVjbCA9IFhN
TF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBYTUxfUk9MRV9DT05U
RU5UX1BDREFUQToKKyAgICAgIGlmIChkdGQtPmluX2VsZGVjbCkgeworICAgICAgICBkdGQtPnNj
YWZmb2xkW2R0ZC0+c2NhZmZJbmRleFtkdGQtPnNjYWZmTGV2ZWwgLSAxXV0udHlwZQorICAgICAg
ICAgICAgPSBYTUxfQ1RZUEVfTUlYRUQ7CisgICAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRsZXIp
CisgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlQ6CisgICAgICBxdWFudCA9
IFhNTF9DUVVBTlRfTk9ORTsKKyAgICAgIGdvdG8gZWxlbWVudENvbnRlbnQ7CisgICAgY2FzZSBY
TUxfUk9MRV9DT05URU5UX0VMRU1FTlRfT1BUOgorICAgICAgcXVhbnQgPSBYTUxfQ1FVQU5UX09Q
VDsKKyAgICAgIGdvdG8gZWxlbWVudENvbnRlbnQ7CisgICAgY2FzZSBYTUxfUk9MRV9DT05URU5U
X0VMRU1FTlRfUkVQOgorICAgICAgcXVhbnQgPSBYTUxfQ1FVQU5UX1JFUDsKKyAgICAgIGdvdG8g
ZWxlbWVudENvbnRlbnQ7CisgICAgY2FzZSBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlRfUExVUzoK
KyAgICAgIHF1YW50ID0gWE1MX0NRVUFOVF9QTFVTOworICAgIGVsZW1lbnRDb250ZW50OgorICAg
ICAgaWYgKGR0ZC0+aW5fZWxkZWNsKSB7CisgICAgICAgIEVMRU1FTlRfVFlQRSAqZWw7CisgICAg
ICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOworICAgICAgICBpbnQgbmFtZUxlbjsKKyAgICAgICAg
Y29uc3QgY2hhciAqbnh0ID0gKHF1YW50ID09IFhNTF9DUVVBTlRfTk9ORQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5leHQg
LSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7CisgICAgICAgIGludCBteWluZGV4ID0gbmV4dFNjYWZm
b2xkUGFydChwYXJzZXIpOworICAgICAgICBpZiAobXlpbmRleCA8IDApCisgICAgICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIGR0ZC0+c2NhZmZvbGRbbXlpbmRleF0u
dHlwZSA9IFhNTF9DVFlQRV9OQU1FOworICAgICAgICBkdGQtPnNjYWZmb2xkW215aW5kZXhdLnF1
YW50ID0gcXVhbnQ7CisgICAgICAgIGVsID0gZ2V0RWxlbWVudFR5cGUocGFyc2VyLCBlbmMsIHMs
IG54dCk7CisgICAgICAgIGlmICghZWwpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19N
RU1PUlk7CisgICAgICAgIG5hbWUgPSBlbC0+bmFtZTsKKyAgICAgICAgZHRkLT5zY2FmZm9sZFtt
eWluZGV4XS5uYW1lID0gbmFtZTsKKyAgICAgICAgbmFtZUxlbiA9IDA7CisgICAgICAgIGZvciAo
OyBuYW1lW25hbWVMZW4rK107ICk7CisgICAgICAgIGR0ZC0+Y29udGVudFN0cmluZ0xlbiArPSAg
bmFtZUxlbjsKKyAgICAgICAgaWYgKGVsZW1lbnREZWNsSGFuZGxlcikKKyAgICAgICAgICBoYW5k
bGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFhNTF9ST0xFX0dST1VQX0NMT1NFOgorICAgICAgcXVhbnQgPSBYTUxfQ1FVQU5UX05PTkU7Cisg
ICAgICBnb3RvIGNsb3NlR3JvdXA7CisgICAgY2FzZSBYTUxfUk9MRV9HUk9VUF9DTE9TRV9PUFQ6
CisgICAgICBxdWFudCA9IFhNTF9DUVVBTlRfT1BUOworICAgICAgZ290byBjbG9zZUdyb3VwOwor
ICAgIGNhc2UgWE1MX1JPTEVfR1JPVVBfQ0xPU0VfUkVQOgorICAgICAgcXVhbnQgPSBYTUxfQ1FV
QU5UX1JFUDsKKyAgICAgIGdvdG8gY2xvc2VHcm91cDsKKyAgICBjYXNlIFhNTF9ST0xFX0dST1VQ
X0NMT1NFX1BMVVM6CisgICAgICBxdWFudCA9IFhNTF9DUVVBTlRfUExVUzsKKyAgICBjbG9zZUdy
b3VwOgorICAgICAgaWYgKGR0ZC0+aW5fZWxkZWNsKSB7CisgICAgICAgIGlmIChlbGVtZW50RGVj
bEhhbmRsZXIpCisgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgICAg
ZHRkLT5zY2FmZkxldmVsLS07CisgICAgICAgIGR0ZC0+c2NhZmZvbGRbZHRkLT5zY2FmZkluZGV4
W2R0ZC0+c2NhZmZMZXZlbF1dLnF1YW50ID0gcXVhbnQ7CisgICAgICAgIGlmIChkdGQtPnNjYWZm
TGV2ZWwgPT0gMCkgeworICAgICAgICAgIGlmICghaGFuZGxlRGVmYXVsdCkgeworICAgICAgICAg
ICAgWE1MX0NvbnRlbnQgKm1vZGVsID0gYnVpbGRfbW9kZWwocGFyc2VyKTsKKyAgICAgICAgICAg
IGlmICghbW9kZWwpCisgICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwor
ICAgICAgICAgICAgKmV2ZW50RW5kUFAgPSBzOworICAgICAgICAgICAgZWxlbWVudERlY2xIYW5k
bGVyKGhhbmRsZXJBcmcsIGRlY2xFbGVtZW50VHlwZS0+bmFtZSwgbW9kZWwpOworICAgICAgICAg
IH0KKyAgICAgICAgICBkdGQtPmluX2VsZGVjbCA9IFhNTF9GQUxTRTsKKyAgICAgICAgICBkdGQt
PmNvbnRlbnRTdHJpbmdMZW4gPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsK
KyAgICAgIC8qIEVuZCBlbGVtZW50IGRlY2xhcmF0aW9uIHN0dWZmICovCisKKyAgICBjYXNlIFhN
TF9ST0xFX1BJOgorICAgICAgaWYgKCFyZXBvcnRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFyc2Vy
LCBlbmMsIHMsIG5leHQpKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAg
ICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICBicmVhazsKKyAgICBjYXNlIFhN
TF9ST0xFX0NPTU1FTlQ6CisgICAgICBpZiAoIXJlcG9ydENvbW1lbnQocGFyc2VyLCBlbmMsIHMs
IG5leHQpKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgIGhhbmRs
ZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX05P
TkU6CisgICAgICBzd2l0Y2ggKHRvaykgeworICAgICAgY2FzZSBYTUxfVE9LX0JPTToKKyAgICAg
ICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX0RPQ1RZUEVfTk9ORToKKyAgICAgIGlmIChz
dGFydERvY3R5cGVEZWNsSGFuZGxlcikKKyAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxT
RTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVfRU5USVRZX05PTkU6CisgICAgICBp
ZiAoZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBlbnRpdHlEZWNsSGFuZGxlcikKKyAgICAgICAgaGFu
ZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1JPTEVf
Tk9UQVRJT05fTk9ORToKKyAgICAgIGlmIChub3RhdGlvbkRlY2xIYW5kbGVyKQorICAgICAgICBo
YW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfUk9M
RV9BVFRMSVNUX05PTkU6CisgICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBhdHRsaXN0
RGVjbEhhbmRsZXIpCisgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICBi
cmVhazsKKyAgICBjYXNlIFhNTF9ST0xFX0VMRU1FTlRfTk9ORToKKyAgICAgIGlmIChlbGVtZW50
RGVjbEhhbmRsZXIpCisgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7CisgICAgICBi
cmVhazsKKyAgICB9IC8qIGVuZCBvZiBiaWcgc3dpdGNoICovCisKKyAgICBpZiAoaGFuZGxlRGVm
YXVsdCAmJiBkZWZhdWx0SGFuZGxlcikKKyAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMs
IHMsIG5leHQpOworCisgICAgc3dpdGNoIChwc19wYXJzaW5nKSB7CisgICAgY2FzZSBYTUxfU1VT
UEVOREVEOgorICAgICAgKm5leHRQdHIgPSBuZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T05FOworICAgIGNhc2UgWE1MX0ZJTklTSEVEOgorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9S
VEVEOworICAgIGRlZmF1bHQ6CisgICAgICBzID0gbmV4dDsKKyAgICAgIHRvayA9IFhtbFByb2xv
Z1RvayhlbmMsIHMsIGVuZCwgJm5leHQpOworICAgIH0KKyAgfQorICAvKiBub3QgcmVhY2hlZCAq
LworfQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAorZXBpbG9nUHJvY2Vzc29yKFhN
TF9QYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMsCisgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipu
ZXh0UHRyKQoreworICBwcm9jZXNzb3IgPSBlcGlsb2dQcm9jZXNzb3I7CisgIGV2ZW50UHRyID0g
czsKKyAgZm9yICg7OykgeworICAgIGNvbnN0IGNoYXIgKm5leHQgPSBOVUxMOworICAgIGludCB0
b2sgPSBYbWxQcm9sb2dUb2soZW5jb2RpbmcsIHMsIGVuZCwgJm5leHQpOworICAgIGV2ZW50RW5k
UHRyID0gbmV4dDsKKyAgICBzd2l0Y2ggKHRvaykgeworICAgIC8qIHJlcG9ydCBwYXJ0aWFsIGxp
bmVicmVhayAtIGl0IG1pZ2h0IGJlIHRoZSBsYXN0IHRva2VuICovCisgICAgY2FzZSAtWE1MX1RP
S19QUk9MT0dfUzoKKyAgICAgIGlmIChkZWZhdWx0SGFuZGxlcikgeworICAgICAgICByZXBvcnRE
ZWZhdWx0KHBhcnNlciwgZW5jb2RpbmcsIHMsIG5leHQpOworICAgICAgICBpZiAocHNfcGFyc2lu
ZyA9PSBYTUxfRklOSVNIRUQpCisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOwor
ICAgICAgfQorICAgICAgKm5leHRQdHIgPSBuZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T05FOworICAgIGNhc2UgWE1MX1RPS19OT05FOgorICAgICAgKm5leHRQdHIgPSBzOworICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT05FOworICAgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICAg
IGlmIChkZWZhdWx0SGFuZGxlcikKKyAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuY29k
aW5nLCBzLCBuZXh0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19QSToKKyAgICAg
IGlmICghcmVwb3J0UHJvY2Vzc2luZ0luc3RydWN0aW9uKHBhcnNlciwgZW5jb2RpbmcsIHMsIG5l
eHQpKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgWE1MX1RPS19DT01NRU5UOgorICAgICAgaWYgKCFyZXBvcnRDb21tZW50KHBhcnNl
ciwgZW5jb2RpbmcsIHMsIG5leHQpKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9S
WTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19JTlZBTElEOgorICAgICAgZXZlbnRQ
dHIgPSBuZXh0OworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOworICAgIGNh
c2UgWE1MX1RPS19QQVJUSUFMOgorICAgICAgaWYgKCFwc19maW5hbEJ1ZmZlcikgeworICAgICAg
ICAqbmV4dFB0ciA9IHM7CisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU47CisgICAgY2FzZSBYTUxfVE9L
X1BBUlRJQUxfQ0hBUjoKKyAgICAgIGlmICghcHNfZmluYWxCdWZmZXIpIHsKKyAgICAgICAgKm5l
eHRQdHIgPSBzOworICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7CisgICAgICB9CisgICAg
ICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUjsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9KVU5LX0FGVEVSX0RPQ19FTEVNRU5UOworICAgIH0KKyAgICBldmVudFB0
ciA9IHMgPSBuZXh0OworICAgIHN3aXRjaCAocHNfcGFyc2luZykgeworICAgIGNhc2UgWE1MX1NV
U1BFTkRFRDoKKyAgICAgICpuZXh0UHRyID0gbmV4dDsKKyAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9ORTsKKyAgICBjYXNlIFhNTF9GSU5JU0hFRDoKKyAgICAgIHJldHVybiBYTUxfRVJST1JfQUJP
UlRFRDsKKyAgICBkZWZhdWx0OiA7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBlbnVtIFhNTF9F
cnJvcgorcHJvY2Vzc0ludGVybmFsRW50aXR5KFhNTF9QYXJzZXIgcGFyc2VyLCBFTlRJVFkgKmVu
dGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICBYTUxfQm9vbCBiZXR3ZWVuRGVjbCkKK3sKKyAg
Y29uc3QgY2hhciAqdGV4dFN0YXJ0LCAqdGV4dEVuZDsKKyAgY29uc3QgY2hhciAqbmV4dDsKKyAg
ZW51bSBYTUxfRXJyb3IgcmVzdWx0OworICBPUEVOX0lOVEVSTkFMX0VOVElUWSAqb3BlbkVudGl0
eTsKKworICBpZiAoZnJlZUludGVybmFsRW50aXRpZXMpIHsKKyAgICBvcGVuRW50aXR5ID0gZnJl
ZUludGVybmFsRW50aXRpZXM7CisgICAgZnJlZUludGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5
LT5uZXh0OworICB9CisgIGVsc2UgeworICAgIG9wZW5FbnRpdHkgPSAoT1BFTl9JTlRFUk5BTF9F
TlRJVFkgKilNQUxMT0Moc2l6ZW9mKE9QRU5fSU5URVJOQUxfRU5USVRZKSk7CisgICAgaWYgKCFv
cGVuRW50aXR5KQorICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7CisgIH0KKyAgZW50
aXR5LT5vcGVuID0gWE1MX1RSVUU7CisgIGVudGl0eS0+cHJvY2Vzc2VkID0gMDsKKyAgb3BlbkVu
dGl0eS0+bmV4dCA9IG9wZW5JbnRlcm5hbEVudGl0aWVzOworICBvcGVuSW50ZXJuYWxFbnRpdGll
cyA9IG9wZW5FbnRpdHk7CisgIG9wZW5FbnRpdHktPmVudGl0eSA9IGVudGl0eTsKKyAgb3BlbkVu
dGl0eS0+c3RhcnRUYWdMZXZlbCA9IHRhZ0xldmVsOworICBvcGVuRW50aXR5LT5iZXR3ZWVuRGVj
bCA9IGJldHdlZW5EZWNsOworICBvcGVuRW50aXR5LT5pbnRlcm5hbEV2ZW50UHRyID0gTlVMTDsK
KyAgb3BlbkVudGl0eS0+aW50ZXJuYWxFdmVudEVuZFB0ciA9IE5VTEw7CisgIHRleHRTdGFydCA9
IChjaGFyICopZW50aXR5LT50ZXh0UHRyOworICB0ZXh0RW5kID0gKGNoYXIgKikoZW50aXR5LT50
ZXh0UHRyICsgZW50aXR5LT50ZXh0TGVuKTsKKworI2lmZGVmIFhNTF9EVEQKKyAgaWYgKGVudGl0
eS0+aXNfcGFyYW0pIHsKKyAgICBpbnQgdG9rID0gWG1sUHJvbG9nVG9rKGludGVybmFsRW5jb2Rp
bmcsIHRleHRTdGFydCwgdGV4dEVuZCwgJm5leHQpOworICAgIHJlc3VsdCA9IGRvUHJvbG9nKHBh
cnNlciwgaW50ZXJuYWxFbmNvZGluZywgdGV4dFN0YXJ0LCB0ZXh0RW5kLCB0b2ssCisgICAgICAg
ICAgICAgICAgICAgICAgbmV4dCwgJm5leHQsIFhNTF9GQUxTRSk7CisgIH0KKyAgZWxzZQorI2Vu
ZGlmIC8qIFhNTF9EVEQgKi8KKyAgICByZXN1bHQgPSBkb0NvbnRlbnQocGFyc2VyLCB0YWdMZXZl
bCwgaW50ZXJuYWxFbmNvZGluZywgdGV4dFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0RW5kLCAmbmV4dCwgWE1MX0ZBTFNFKTsKKworICBpZiAocmVzdWx0ID09IFhNTF9FUlJPUl9O
T05FKSB7CisgICAgaWYgKHRleHRFbmQgIT0gbmV4dCAmJiBwc19wYXJzaW5nID09IFhNTF9TVVNQ
RU5ERUQpIHsKKyAgICAgIGVudGl0eS0+cHJvY2Vzc2VkID0gKGludCkobmV4dCAtIHRleHRTdGFy
dCk7CisgICAgICBwcm9jZXNzb3IgPSBpbnRlcm5hbEVudGl0eVByb2Nlc3NvcjsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfRkFMU0U7CisgICAgICBvcGVuSW50
ZXJuYWxFbnRpdGllcyA9IG9wZW5FbnRpdHktPm5leHQ7CisgICAgICAvKiBwdXQgb3BlbkVudGl0
eSBiYWNrIGluIGxpc3Qgb2YgZnJlZSBpbnN0YW5jZXMgKi8KKyAgICAgIG9wZW5FbnRpdHktPm5l
eHQgPSBmcmVlSW50ZXJuYWxFbnRpdGllczsKKyAgICAgIGZyZWVJbnRlcm5hbEVudGl0aWVzID0g
b3BlbkVudGl0eTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGVu
dW0gWE1MX0Vycm9yIFBUUkNBTEwKK2ludGVybmFsRW50aXR5UHJvY2Vzc29yKFhNTF9QYXJzZXIg
cGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKipuZXh0UHRyKQoreworICBFTlRJVFkgKmVudGl0eTsKKyAgY29uc3QgY2hh
ciAqdGV4dFN0YXJ0LCAqdGV4dEVuZDsKKyAgY29uc3QgY2hhciAqbmV4dDsKKyAgZW51bSBYTUxf
RXJyb3IgcmVzdWx0OworICBPUEVOX0lOVEVSTkFMX0VOVElUWSAqb3BlbkVudGl0eSA9IG9wZW5J
bnRlcm5hbEVudGl0aWVzOworICBpZiAoIW9wZW5FbnRpdHkpCisgICAgcmV0dXJuIFhNTF9FUlJP
Ul9VTkVYUEVDVEVEX1NUQVRFOworCisgIGVudGl0eSA9IG9wZW5FbnRpdHktPmVudGl0eTsKKyAg
dGV4dFN0YXJ0ID0gKChjaGFyICopZW50aXR5LT50ZXh0UHRyKSArIGVudGl0eS0+cHJvY2Vzc2Vk
OworICB0ZXh0RW5kID0gKGNoYXIgKikoZW50aXR5LT50ZXh0UHRyICsgZW50aXR5LT50ZXh0TGVu
KTsKKworI2lmZGVmIFhNTF9EVEQKKyAgaWYgKGVudGl0eS0+aXNfcGFyYW0pIHsKKyAgICBpbnQg
dG9rID0gWG1sUHJvbG9nVG9rKGludGVybmFsRW5jb2RpbmcsIHRleHRTdGFydCwgdGV4dEVuZCwg
Jm5leHQpOworICAgIHJlc3VsdCA9IGRvUHJvbG9nKHBhcnNlciwgaW50ZXJuYWxFbmNvZGluZywg
dGV4dFN0YXJ0LCB0ZXh0RW5kLCB0b2ssCisgICAgICAgICAgICAgICAgICAgICAgbmV4dCwgJm5l
eHQsIFhNTF9GQUxTRSk7CisgIH0KKyAgZWxzZQorI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgICBy
ZXN1bHQgPSBkb0NvbnRlbnQocGFyc2VyLCBvcGVuRW50aXR5LT5zdGFydFRhZ0xldmVsLCBpbnRl
cm5hbEVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhcnQsIHRleHRFbmQs
ICZuZXh0LCBYTUxfRkFMU0UpOworCisgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCisg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgZWxzZSBpZiAodGV4dEVuZCAhPSBuZXh0ICYmIHBzX3BhcnNp
bmcgPT0gWE1MX1NVU1BFTkRFRCkgeworICAgIGVudGl0eS0+cHJvY2Vzc2VkID0gKGludCkobmV4
dCAtIChjaGFyICopZW50aXR5LT50ZXh0UHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9Cisg
IGVsc2UgeworICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsKKyAgICBvcGVuSW50ZXJuYWxF
bnRpdGllcyA9IG9wZW5FbnRpdHktPm5leHQ7CisgICAgLyogcHV0IG9wZW5FbnRpdHkgYmFjayBp
biBsaXN0IG9mIGZyZWUgaW5zdGFuY2VzICovCisgICAgb3BlbkVudGl0eS0+bmV4dCA9IGZyZWVJ
bnRlcm5hbEVudGl0aWVzOworICAgIGZyZWVJbnRlcm5hbEVudGl0aWVzID0gb3BlbkVudGl0eTsK
KyAgfQorCisjaWZkZWYgWE1MX0RURAorICBpZiAoZW50aXR5LT5pc19wYXJhbSkgeworICAgIGlu
dCB0b2s7CisgICAgcHJvY2Vzc29yID0gcHJvbG9nUHJvY2Vzc29yOworICAgIHRvayA9IFhtbFBy
b2xvZ1RvayhlbmNvZGluZywgcywgZW5kLCAmbmV4dCk7CisgICAgcmV0dXJuIGRvUHJvbG9nKHBh
cnNlciwgZW5jb2RpbmcsIHMsIGVuZCwgdG9rLCBuZXh0LCBuZXh0UHRyLAorICAgICAgICAgICAg
ICAgICAgICAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVyKTsKKyAgfQorICBlbHNlCisjZW5kaWYg
LyogWE1MX0RURCAqLworICB7CisgICAgcHJvY2Vzc29yID0gY29udGVudFByb2Nlc3NvcjsKKyAg
ICAvKiBzZWUgZXh0ZXJuYWxFbnRpdHlDb250ZW50UHJvY2Vzc29yIHZzIGNvbnRlbnRQcm9jZXNz
b3IgKi8KKyAgICByZXR1cm4gZG9Db250ZW50KHBhcnNlciwgcGFyZW50UGFyc2VyID8gMSA6IDAs
IGVuY29kaW5nLCBzLCBlbmQsCisgICAgICAgICAgICAgICAgICAgICBuZXh0UHRyLCAoWE1MX0Jv
b2wpIXBzX2ZpbmFsQnVmZmVyKTsKKyAgfQorfQorCitzdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRS
Q0FMTAorZXJyb3JQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIpCit7CisgIHJldHVybiBlcnJvckNvZGU7Cit9CisK
K3N0YXRpYyBlbnVtIFhNTF9FcnJvcgorc3RvcmVBdHRyaWJ1dGVWYWx1ZShYTUxfUGFyc2VyIHBh
cnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywgWE1MX0Jvb2wgaXNDZGF0YSwKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAg
ICAgICAgIFNUUklOR19QT09MICpwb29sKQoreworICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBh
cHBlbmRBdHRyaWJ1dGVWYWx1ZShwYXJzZXIsIGVuYywgaXNDZGF0YSwgcHRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsIHBvb2wpOworICBpZiAo
cmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisgIGlmICghaXNDZGF0YSAmJiBwb29sTGVuZ3Ro
KHBvb2wpICYmIHBvb2xMYXN0Q2hhcihwb29sKSA9PSAweDIwKQorICAgIHBvb2xDaG9wKHBvb2wp
OworICBpZiAoIXBvb2xBcHBlbmRDaGFyKHBvb2wsIFhNTF9UKCdcMCcpKSkKKyAgICByZXR1cm4g
WE1MX0VSUk9SX05PX01FTU9SWTsKKyAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOworfQorCitzdGF0
aWMgZW51bSBYTUxfRXJyb3IKK2FwcGVuZEF0dHJpYnV0ZVZhbHVlKFhNTF9QYXJzZXIgcGFyc2Vy
LCBjb25zdCBFTkNPRElORyAqZW5jLCBYTUxfQm9vbCBpc0NkYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAg
ICAgICBTVFJJTkdfUE9PTCAqcG9vbCkKK3sKKyAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8q
IHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCisgIGZvciAoOzspIHsKKyAgICBjb25z
dCBjaGFyICpuZXh0OworICAgIGludCB0b2sgPSBYbWxBdHRyaWJ1dGVWYWx1ZVRvayhlbmMsIHB0
ciwgZW5kLCAmbmV4dCk7CisgICAgc3dpdGNoICh0b2spIHsKKyAgICBjYXNlIFhNTF9UT0tfTk9O
RToKKyAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKKyAgICBjYXNlIFhNTF9UT0tfSU5WQUxJ
RDoKKyAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCisgICAgICAgIGV2ZW50UHRyID0gbmV4dDsK
KyAgICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKKyAgICBjYXNlIFhNTF9UT0tf
UEFSVElBTDoKKyAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCisgICAgICAgIGV2ZW50UHRyID0g
cHRyOworICAgICAgcmV0dXJuIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOworICAgIGNhc2UgWE1M
X1RPS19DSEFSX1JFRjoKKyAgICAgIHsKKyAgICAgICAgWE1MX0NoYXIgYnVmW1hNTF9FTkNPREVf
TUFYXTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGludCBuID0gWG1sQ2hhclJlZk51bWJlcihl
bmMsIHB0cik7CisgICAgICAgIGlmIChuIDwgMCkgeworICAgICAgICAgIGlmIChlbmMgPT0gZW5j
b2RpbmcpCisgICAgICAgICAgICBldmVudFB0ciA9IHB0cjsKKyAgICAgICAgICByZXR1cm4gWE1M
X0VSUk9SX0JBRF9DSEFSX1JFRjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzQ2RhdGEKKyAg
ICAgICAgICAgICYmIG4gPT0gMHgyMCAvKiBzcGFjZSAqLworICAgICAgICAgICAgJiYgKHBvb2xM
ZW5ndGgocG9vbCkgPT0gMCB8fCBwb29sTGFzdENoYXIocG9vbCkgPT0gMHgyMCkpCisgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIG4gPSBYbWxFbmNvZGUobiwgKElDSEFSICopYnVmKTsKKyAgICAg
ICAgaWYgKCFuKSB7CisgICAgICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykKKyAgICAgICAgICAg
IGV2ZW50UHRyID0gcHRyOworICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfQkFEX0NIQVJfUkVG
OworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAg
ICBpZiAoIXBvb2xBcHBlbmRDaGFyKHBvb2wsIGJ1ZltpXSkpCisgICAgICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBYTUxfVE9LX0RBVEFfQ0hBUlM6CisgICAgICBpZiAoIXBvb2xBcHBlbmQocG9vbCwg
ZW5jLCBwdHIsIG5leHQpKQorICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19UUkFJTElOR19DUjoKKyAgICAgIG5leHQgPSBw
dHIgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhcjsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAg
IGNhc2UgWE1MX1RPS19BVFRSSUJVVEVfVkFMVUVfUzoKKyAgICBjYXNlIFhNTF9UT0tfREFUQV9O
RVdMSU5FOgorICAgICAgaWYgKCFpc0NkYXRhICYmIChwb29sTGVuZ3RoKHBvb2wpID09IDAgfHwg
cG9vbExhc3RDaGFyKHBvb2wpID09IDB4MjApKQorICAgICAgICBicmVhazsKKyAgICAgIGlmICgh
cG9vbEFwcGVuZENoYXIocG9vbCwgMHgyMCkpCisgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9f
TUVNT1JZOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX0VOVElUWV9SRUY6CisgICAg
ICB7CisgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOworICAgICAgICBFTlRJVFkgKmVudGl0
eTsKKyAgICAgICAgY2hhciBjaGVja0VudGl0eURlY2w7CisgICAgICAgIFhNTF9DaGFyIGNoID0g
KFhNTF9DaGFyKSBYbWxQcmVkZWZpbmVkRW50aXR5TmFtZShlbmMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgZW5jLT5taW5CeXRlc1BlckNoYXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVu
Yy0+bWluQnl0ZXNQZXJDaGFyKTsKKyAgICAgICAgaWYgKGNoKSB7CisgICAgICAgICAgaWYgKCFw
b29sQXBwZW5kQ2hhcihwb29sLCBjaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9
IHBvb2xTdG9yZVN0cmluZygmdGVtcDJQb29sLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHRyICsgZW5jLT5taW5CeXRlc1BlckNoYXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKKyAgICAgICAgaWYgKCFu
YW1lKQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgICBlbnRp
dHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwgJmR0ZC0+Z2VuZXJhbEVudGl0aWVzLCBuYW1l
LCAwKTsKKyAgICAgICAgcG9vbERpc2NhcmQoJnRlbXAyUG9vbCk7CisgICAgICAgIC8qIEZpcnN0
LCBkZXRlcm1pbmUgaWYgYSBjaGVjayBmb3IgYW4gZXhpc3RpbmcgZGVjbGFyYXRpb24gaXMgbmVl
ZGVkOworICAgICAgICAgICBpZiB5ZXMsIGNoZWNrIHRoYXQgdGhlIGVudGl0eSBleGlzdHMsIGFu
ZCB0aGF0IGl0IGlzIGludGVybmFsLgorICAgICAgICAqLworICAgICAgICBpZiAocG9vbCA9PSAm
ZHRkLT5wb29sKSAgLyogYXJlIHdlIGNhbGxlZCBmcm9tIHByb2xvZz8gKi8KKyAgICAgICAgICBj
aGVja0VudGl0eURlY2wgPQorI2lmZGVmIFhNTF9EVEQKKyAgICAgICAgICAgICAgcHJvbG9nU3Rh
dGUuZG9jdW1lbnRFbnRpdHkgJiYKKyNlbmRpZiAvKiBYTUxfRFREICovCisgICAgICAgICAgICAg
IChkdGQtPnN0YW5kYWxvbmUKKyAgICAgICAgICAgICAgID8gIW9wZW5JbnRlcm5hbEVudGl0aWVz
CisgICAgICAgICAgICAgICA6ICFkdGQtPmhhc1BhcmFtRW50aXR5UmVmcyk7CisgICAgICAgIGVs
c2UgLyogaWYgKHBvb2wgPT0gJnRlbXBQb29sKTogd2UgYXJlIGNhbGxlZCBmcm9tIGNvbnRlbnQg
Ki8KKyAgICAgICAgICBjaGVja0VudGl0eURlY2wgPSAhZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMg
fHwgZHRkLT5zdGFuZGFsb25lOworICAgICAgICBpZiAoY2hlY2tFbnRpdHlEZWNsKSB7CisgICAg
ICAgICAgaWYgKCFlbnRpdHkpCisgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VOREVGSU5F
RF9FTlRJVFk7CisgICAgICAgICAgZWxzZSBpZiAoIWVudGl0eS0+aXNfaW50ZXJuYWwpCisgICAg
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0VOVElUWV9ERUNMQVJFRF9JTl9QRTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICghZW50aXR5KSB7CisgICAgICAgICAgLyogQ2Fubm90IHJlcG9y
dCBza2lwcGVkIGVudGl0eSBoZXJlIC0gc2VlIGNvbW1lbnRzIG9uCisgICAgICAgICAgICAgc2tp
cHBlZEVudGl0eUhhbmRsZXIuCisgICAgICAgICAgaWYgKHNraXBwZWRFbnRpdHlIYW5kbGVyKQor
ICAgICAgICAgICAgc2tpcHBlZEVudGl0eUhhbmRsZXIoaGFuZGxlckFyZywgbmFtZSwgMCk7Cisg
ICAgICAgICAgKi8KKyAgICAgICAgICAvKiBDYW5ub3QgY2FsbCB0aGUgZGVmYXVsdCBoYW5kbGVy
IGJlY2F1c2UgdGhpcyB3b3VsZCBiZQorICAgICAgICAgICAgIG91dCBvZiBzeW5jIHdpdGggdGhl
IGNhbGwgdG8gdGhlIHN0YXJ0RWxlbWVudEhhbmRsZXIuCisgICAgICAgICAgaWYgKChwb29sID09
ICZ0ZW1wUG9vbCkgJiYgZGVmYXVsdEhhbmRsZXIpCisgICAgICAgICAgICByZXBvcnREZWZhdWx0
KHBhcnNlciwgZW5jLCBwdHIsIG5leHQpOworICAgICAgICAgICovCisgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVudGl0eS0+b3BlbikgeworICAgICAgICAgIGlmIChl
bmMgPT0gZW5jb2RpbmcpCisgICAgICAgICAgICBldmVudFB0ciA9IHB0cjsKKyAgICAgICAgICBy
ZXR1cm4gWE1MX0VSUk9SX1JFQ1VSU0lWRV9FTlRJVFlfUkVGOworICAgICAgICB9CisgICAgICAg
IGlmIChlbnRpdHktPm5vdGF0aW9uKSB7CisgICAgICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykK
KyAgICAgICAgICAgIGV2ZW50UHRyID0gcHRyOworICAgICAgICAgIHJldHVybiBYTUxfRVJST1Jf
QklOQVJZX0VOVElUWV9SRUY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlbnRpdHktPnRleHRQ
dHIpIHsKKyAgICAgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQorICAgICAgICAgICAgZXZlbnRQ
dHIgPSBwdHI7CisgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BVFRSSUJVVEVfRVhURVJOQUxf
RU5USVRZX1JFRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBlbnVtIFhN
TF9FcnJvciByZXN1bHQ7CisgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnRleHRFbmQgPSBlbnRp
dHktPnRleHRQdHIgKyBlbnRpdHktPnRleHRMZW47CisgICAgICAgICAgZW50aXR5LT5vcGVuID0g
WE1MX1RSVUU7CisgICAgICAgICAgcmVzdWx0ID0gYXBwZW5kQXR0cmlidXRlVmFsdWUocGFyc2Vy
LCBpbnRlcm5hbEVuY29kaW5nLCBpc0NkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjaGFyICopZW50aXR5LT50ZXh0UHRyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopdGV4dEVuZCwgcG9vbCk7CisgICAgICAgICAg
ZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNFOworICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykKKyAgICAgICAgZXZlbnRQdHIg
PSBwdHI7CisgICAgICByZXR1cm4gWE1MX0VSUk9SX1VORVhQRUNURURfU1RBVEU7CisgICAgfQor
ICAgIHB0ciA9IG5leHQ7CisgIH0KKyAgLyogbm90IHJlYWNoZWQgKi8KK30KKworc3RhdGljIGVu
dW0gWE1MX0Vycm9yCitzdG9yZUVudGl0eVZhbHVlKFhNTF9QYXJzZXIgcGFyc2VyLAorICAgICAg
ICAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICplbnRpdHlUZXh0UHRyLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbnRpdHlU
ZXh0RW5kKQoreworICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwg
b2YgaW5kaXJlY3Rpb24gKi8KKyAgU1RSSU5HX1BPT0wgKnBvb2wgPSAmKGR0ZC0+ZW50aXR5VmFs
dWVQb29sKTsKKyAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gWE1MX0VSUk9SX05PTkU7CisjaWZk
ZWYgWE1MX0RURAorICBpbnQgb2xkSW5FbnRpdHlWYWx1ZSA9IHByb2xvZ1N0YXRlLmluRW50aXR5
VmFsdWU7CisgIHByb2xvZ1N0YXRlLmluRW50aXR5VmFsdWUgPSAxOworI2VuZGlmIC8qIFhNTF9E
VEQgKi8KKyAgLyogbmV2ZXIgcmV0dXJuIE51bGwgZm9yIHRoZSB2YWx1ZSBhcmd1bWVudCBpbiBF
bnRpdHlEZWNsSGFuZGxlciwKKyAgICAgc2luY2UgdGhpcyB3b3VsZCBpbmRpY2F0ZSBhbiBleHRl
cm5hbCBlbnRpdHk7IHRoZXJlZm9yZSB3ZQorICAgICBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGVu
dGl0eVZhbHVlUG9vbC5zdGFydCBpcyBub3QgbnVsbCAqLworICBpZiAoIXBvb2wtPmJsb2Nrcykg
eworICAgIGlmICghcG9vbEdyb3cocG9vbCkpCisgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01F
TU9SWTsKKyAgfQorCisgIGZvciAoOzspIHsKKyAgICBjb25zdCBjaGFyICpuZXh0OworICAgIGlu
dCB0b2sgPSBYbWxFbnRpdHlWYWx1ZVRvayhlbmMsIGVudGl0eVRleHRQdHIsIGVudGl0eVRleHRF
bmQsICZuZXh0KTsKKyAgICBzd2l0Y2ggKHRvaykgeworICAgIGNhc2UgWE1MX1RPS19QQVJBTV9F
TlRJVFlfUkVGOgorI2lmZGVmIFhNTF9EVEQKKyAgICAgIGlmIChpc1BhcmFtRW50aXR5IHx8IGVu
YyAhPSBlbmNvZGluZykgeworICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKKyAgICAgICAg
RU5USVRZICplbnRpdHk7CisgICAgICAgIG5hbWUgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29s
LCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5VGV4dFB0ciArIGVu
Yy0+bWluQnl0ZXNQZXJDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQg
LSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAg
IHJlc3VsdCA9IFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgICAgZ290byBlbmRFbnRpdHlW
YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBlbnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNl
ciwgJmR0ZC0+cGFyYW1FbnRpdGllcywgbmFtZSwgMCk7CisgICAgICAgIHBvb2xEaXNjYXJkKCZ0
ZW1wUG9vbCk7CisgICAgICAgIGlmICghZW50aXR5KSB7CisgICAgICAgICAgLyogbm90IGEgd2Vs
bC1mb3JtZWRuZXNzIGVycm9yIC0gc2VlIFhNTCAxLjA6IFdGQyBFbnRpdHkgRGVjbGFyZWQgKi8K
KyAgICAgICAgICAvKiBjYW5ub3QgcmVwb3J0IHNraXBwZWQgZW50aXR5IGhlcmUgLSBzZWUgY29t
bWVudHMgb24KKyAgICAgICAgICAgICBza2lwcGVkRW50aXR5SGFuZGxlcgorICAgICAgICAgIGlm
IChza2lwcGVkRW50aXR5SGFuZGxlcikKKyAgICAgICAgICAgIHNraXBwZWRFbnRpdHlIYW5kbGVy
KGhhbmRsZXJBcmcsIG5hbWUsIDApOworICAgICAgICAgICovCisgICAgICAgICAgZHRkLT5rZWVw
UHJvY2Vzc2luZyA9IGR0ZC0+c3RhbmRhbG9uZTsKKyAgICAgICAgICBnb3RvIGVuZEVudGl0eVZh
bHVlOworICAgICAgICB9CisgICAgICAgIGlmIChlbnRpdHktPm9wZW4pIHsKKyAgICAgICAgICBp
ZiAoZW5jID09IGVuY29kaW5nKQorICAgICAgICAgICAgZXZlbnRQdHIgPSBlbnRpdHlUZXh0UHRy
OworICAgICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9SRUNVUlNJVkVfRU5USVRZX1JFRjsKKyAg
ICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOworICAgICAgICB9CisgICAgICAgIGlmIChlbnRp
dHktPnN5c3RlbUlkKSB7CisgICAgICAgICAgaWYgKGV4dGVybmFsRW50aXR5UmVmSGFuZGxlcikg
eworICAgICAgICAgICAgZHRkLT5wYXJhbUVudGl0eVJlYWQgPSBYTUxfRkFMU0U7CisgICAgICAg
ICAgICBlbnRpdHktPm9wZW4gPSBYTUxfVFJVRTsKKyAgICAgICAgICAgIGlmICghZXh0ZXJuYWxF
bnRpdHlSZWZIYW5kbGVyKGV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbnRpdHktPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbnRpdHktPnN5c3RlbUlkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5wdWJsaWNJZCkpIHsKKyAgICAgICAgICAg
ICAgZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNFOworICAgICAgICAgICAgICByZXN1bHQgPSBYTUxf
RVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRMSU5HOworICAgICAgICAgICAgICBnb3RvIGVuZEVu
dGl0eVZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1M
X0ZBTFNFOworICAgICAgICAgICAgaWYgKCFkdGQtPnBhcmFtRW50aXR5UmVhZCkKKyAgICAgICAg
ICAgICAgZHRkLT5rZWVwUHJvY2Vzc2luZyA9IGR0ZC0+c3RhbmRhbG9uZTsKKyAgICAgICAgICB9
CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZHRkLT5rZWVwUHJvY2Vzc2luZyA9IGR0ZC0+
c3RhbmRhbG9uZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBlbnRpdHkt
Pm9wZW4gPSBYTUxfVFJVRTsKKyAgICAgICAgICByZXN1bHQgPSBzdG9yZUVudGl0eVZhbHVlKHBh
cnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsRW5jb2Rp
bmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWVudGl0eS0+
dGV4dFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopKGVu
dGl0eS0+dGV4dFB0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyBlbnRpdHktPnRleHRMZW4pKTsKKyAgICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfRkFM
U0U7CisgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZW5kRW50aXR5VmFs
dWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisjZW5kaWYgLyogWE1MX0RU
RCAqLworICAgICAgLyogSW4gdGhlIGludGVybmFsIHN1YnNldCwgUEUgcmVmZXJlbmNlcyBhcmUg
bm90IGxlZ2FsCisgICAgICAgICB3aXRoaW4gbWFya3VwIGRlY2xhcmF0aW9ucywgZS5nIGVudGl0
eSB2YWx1ZXMgaW4gdGhpcyBjYXNlLiAqLworICAgICAgZXZlbnRQdHIgPSBlbnRpdHlUZXh0UHRy
OworICAgICAgcmVzdWx0ID0gWE1MX0VSUk9SX1BBUkFNX0VOVElUWV9SRUY7CisgICAgICBnb3Rv
IGVuZEVudGl0eVZhbHVlOworICAgIGNhc2UgWE1MX1RPS19OT05FOgorICAgICAgcmVzdWx0ID0g
WE1MX0VSUk9SX05PTkU7CisgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOworICAgIGNhc2UgWE1M
X1RPS19FTlRJVFlfUkVGOgorICAgIGNhc2UgWE1MX1RPS19EQVRBX0NIQVJTOgorICAgICAgaWYg
KCFwb29sQXBwZW5kKHBvb2wsIGVuYywgZW50aXR5VGV4dFB0ciwgbmV4dCkpIHsKKyAgICAgICAg
cmVzdWx0ID0gWE1MX0VSUk9SX05PX01FTU9SWTsKKyAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1
ZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19UUkFJTElOR19DUjoK
KyAgICAgIG5leHQgPSBlbnRpdHlUZXh0UHRyICsgZW5jLT5taW5CeXRlc1BlckNoYXI7CisgICAg
ICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIFhNTF9UT0tfREFUQV9ORVdMSU5FOgorICAg
ICAgaWYgKHBvb2wtPmVuZCA9PSBwb29sLT5wdHIgJiYgIXBvb2xHcm93KHBvb2wpKSB7CisgICAg
ICAgICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIGdvdG8gZW5k
RW50aXR5VmFsdWU7CisgICAgICB9CisgICAgICAqKHBvb2wtPnB0cikrKyA9IDB4QTsKKyAgICAg
IGJyZWFrOworICAgIGNhc2UgWE1MX1RPS19DSEFSX1JFRjoKKyAgICAgIHsKKyAgICAgICAgWE1M
X0NoYXIgYnVmW1hNTF9FTkNPREVfTUFYXTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGludCBu
ID0gWG1sQ2hhclJlZk51bWJlcihlbmMsIGVudGl0eVRleHRQdHIpOworICAgICAgICBpZiAobiA8
IDApIHsKKyAgICAgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQorICAgICAgICAgICAgZXZlbnRQ
dHIgPSBlbnRpdHlUZXh0UHRyOworICAgICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9CQURfQ0hB
Ul9SRUY7CisgICAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKKyAgICAgICAgfQorICAgICAg
ICBuID0gWG1sRW5jb2RlKG4sIChJQ0hBUiAqKWJ1Zik7CisgICAgICAgIGlmICghbikgeworICAg
ICAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCisgICAgICAgICAgICBldmVudFB0ciA9IGVudGl0
eVRleHRQdHI7CisgICAgICAgICAgcmVzdWx0ID0gWE1MX0VSUk9SX0JBRF9DSEFSX1JFRjsKKyAg
ICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICBpZiAocG9vbC0+ZW5kID09IHBvb2wtPnB0ciAm
JiAhcG9vbEdyb3cocG9vbCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9OT19N
RU1PUlk7CisgICAgICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOworICAgICAgICAgIH0KKyAg
ICAgICAgICAqKHBvb2wtPnB0cikrKyA9IGJ1ZltpXTsKKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgYnJlYWs7CisgICAgY2FzZSBYTUxfVE9LX1BBUlRJQUw6CisgICAgICBpZiAoZW5jID09IGVu
Y29kaW5nKQorICAgICAgICBldmVudFB0ciA9IGVudGl0eVRleHRQdHI7CisgICAgICByZXN1bHQg
PSBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKKyAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7Cisg
ICAgY2FzZSBYTUxfVE9LX0lOVkFMSUQ6CisgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQorICAg
ICAgICBldmVudFB0ciA9IG5leHQ7CisgICAgICByZXN1bHQgPSBYTUxfRVJST1JfSU5WQUxJRF9U
T0tFTjsKKyAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7CisgICAgZGVmYXVsdDoKKyAgICAgIGlm
IChlbmMgPT0gZW5jb2RpbmcpCisgICAgICAgIGV2ZW50UHRyID0gZW50aXR5VGV4dFB0cjsKKyAg
ICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9VTkVYUEVDVEVEX1NUQVRFOworICAgICAgZ290byBlbmRF
bnRpdHlWYWx1ZTsKKyAgICB9CisgICAgZW50aXR5VGV4dFB0ciA9IG5leHQ7CisgIH0KK2VuZEVu
dGl0eVZhbHVlOgorI2lmZGVmIFhNTF9EVEQKKyAgcHJvbG9nU3RhdGUuaW5FbnRpdHlWYWx1ZSA9
IG9sZEluRW50aXR5VmFsdWU7CisjZW5kaWYgLyogWE1MX0RURCAqLworICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAorbm9ybWFsaXplTGluZXMoWE1MX0NoYXIgKnMp
Cit7CisgIFhNTF9DaGFyICpwOworICBmb3IgKDs7IHMrKykgeworICAgIGlmICgqcyA9PSBYTUxf
VCgnXDAnKSkKKyAgICAgIHJldHVybjsKKyAgICBpZiAoKnMgPT0gMHhEKQorICAgICAgYnJlYWs7
CisgIH0KKyAgcCA9IHM7CisgIGRvIHsKKyAgICBpZiAoKnMgPT0gMHhEKSB7CisgICAgICAqcCsr
ID0gMHhBOworICAgICAgaWYgKCorK3MgPT0gMHhBKQorICAgICAgICBzKys7CisgICAgfQorICAg
IGVsc2UKKyAgICAgICpwKysgPSAqcysrOworICB9IHdoaWxlICgqcyk7CisgICpwID0gWE1MX1Qo
J1wwJyk7Cit9CisKK3N0YXRpYyBpbnQKK3JlcG9ydFByb2Nlc3NpbmdJbnN0cnVjdGlvbihYTUxf
UGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAqZW5kKQoreworICBjb25zdCBY
TUxfQ2hhciAqdGFyZ2V0OworICBYTUxfQ2hhciAqZGF0YTsKKyAgY29uc3QgY2hhciAqdGVtOwor
ICBpZiAoIXByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIpIHsKKyAgICBpZiAoZGVmYXVsdEhh
bmRsZXIpCisgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzdGFydCwgZW5kKTsKKyAg
ICByZXR1cm4gMTsKKyAgfQorICBzdGFydCArPSBlbmMtPm1pbkJ5dGVzUGVyQ2hhciAqIDI7Cisg
IHRlbSA9IHN0YXJ0ICsgWG1sTmFtZUxlbmd0aChlbmMsIHN0YXJ0KTsKKyAgdGFyZ2V0ID0gcG9v
bFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwgZW5jLCBzdGFydCwgdGVtKTsKKyAgaWYgKCF0YXJnZXQp
CisgICAgcmV0dXJuIDA7CisgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKKyAgZGF0YSA9IHBvb2xT
dG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgIFhtbFNr
aXBTKGVuYywgdGVtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAtIGVuYy0+bWluQnl0
ZXNQZXJDaGFyKjIpOworICBpZiAoIWRhdGEpCisgICAgcmV0dXJuIDA7CisgIG5vcm1hbGl6ZUxp
bmVzKGRhdGEpOworICBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKGhhbmRsZXJBcmcsIHRh
cmdldCwgZGF0YSk7CisgIHBvb2xDbGVhcigmdGVtcFBvb2wpOworICByZXR1cm4gMTsKK30KKwor
c3RhdGljIGludAorcmVwb3J0Q29tbWVudChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJ
TkcgKmVuYywKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVu
ZCkKK3sKKyAgWE1MX0NoYXIgKmRhdGE7CisgIGlmICghY29tbWVudEhhbmRsZXIpIHsKKyAgICBp
ZiAoZGVmYXVsdEhhbmRsZXIpCisgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzdGFy
dCwgZW5kKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBkYXRhID0gcG9vbFN0b3JlU3RyaW5nKCZ0
ZW1wUG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbmMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnQgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciAqIDQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kIC0gZW5jLT5taW5CeXRlc1BlckNoYXIgKiAzKTsKKyAgaWYgKCFkYXRh
KQorICAgIHJldHVybiAwOworICBub3JtYWxpemVMaW5lcyhkYXRhKTsKKyAgY29tbWVudEhhbmRs
ZXIoaGFuZGxlckFyZywgZGF0YSk7CisgIHBvb2xDbGVhcigmdGVtcFBvb2wpOworICByZXR1cm4g
MTsKK30KKworc3RhdGljIHZvaWQKK3JlcG9ydERlZmF1bHQoWE1MX1BhcnNlciBwYXJzZXIsIGNv
bnN0IEVOQ09ESU5HICplbmMsCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNo
YXIgKmVuZCkKK3sKKyAgaWYgKE1VU1RfQ09OVkVSVChlbmMsIHMpKSB7CisgICAgY29uc3QgY2hh
ciAqKmV2ZW50UFA7CisgICAgY29uc3QgY2hhciAqKmV2ZW50RW5kUFA7CisgICAgaWYgKGVuYyA9
PSBlbmNvZGluZykgeworICAgICAgZXZlbnRQUCA9ICZldmVudFB0cjsKKyAgICAgIGV2ZW50RW5k
UFAgPSAmZXZlbnRFbmRQdHI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZXZlbnRQUCA9ICYo
b3BlbkludGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRQdHIpOworICAgICAgZXZlbnRFbmRQ
UCA9ICYob3BlbkludGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRFbmRQdHIpOworICAgIH0K
KyAgICBkbyB7CisgICAgICBJQ0hBUiAqZGF0YVB0ciA9IChJQ0hBUiAqKWRhdGFCdWY7CisgICAg
ICBYbWxDb252ZXJ0KGVuYywgJnMsIGVuZCwgJmRhdGFQdHIsIChJQ0hBUiAqKWRhdGFCdWZFbmQp
OworICAgICAgKmV2ZW50RW5kUFAgPSBzOworICAgICAgZGVmYXVsdEhhbmRsZXIoaGFuZGxlckFy
ZywgZGF0YUJ1ZiwgKGludCkoZGF0YVB0ciAtIChJQ0hBUiAqKWRhdGFCdWYpKTsKKyAgICAgICpl
dmVudFBQID0gczsKKyAgICB9IHdoaWxlIChzICE9IGVuZCk7CisgIH0KKyAgZWxzZQorICAgIGRl
ZmF1bHRIYW5kbGVyKGhhbmRsZXJBcmcsIChYTUxfQ2hhciAqKXMsIChpbnQpKChYTUxfQ2hhciAq
KWVuZCAtIChYTUxfQ2hhciAqKXMpKTsKK30KKworCitzdGF0aWMgaW50CitkZWZpbmVBdHRyaWJ1
dGUoRUxFTUVOVF9UWVBFICp0eXBlLCBBVFRSSUJVVEVfSUQgKmF0dElkLCBYTUxfQm9vbCBpc0Nk
YXRhLAorICAgICAgICAgICAgICAgIFhNTF9Cb29sIGlzSWQsIGNvbnN0IFhNTF9DaGFyICp2YWx1
ZSwgWE1MX1BhcnNlciBwYXJzZXIpCit7CisgIERFRkFVTFRfQVRUUklCVVRFICphdHQ7CisgIGlm
ICh2YWx1ZSB8fCBpc0lkKSB7CisgICAgLyogVGhlIGhhbmRsaW5nIG9mIGRlZmF1bHQgYXR0cmli
dXRlcyBnZXRzIG1lc3NlZCB1cCBpZiB3ZSBoYXZlCisgICAgICAgYSBkZWZhdWx0IHdoaWNoIGR1
cGxpY2F0ZXMgYSBub24tZGVmYXVsdC4gKi8KKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBp
IDwgdHlwZS0+bkRlZmF1bHRBdHRzOyBpKyspCisgICAgICBpZiAoYXR0SWQgPT0gdHlwZS0+ZGVm
YXVsdEF0dHNbaV0uaWQpCisgICAgICAgIHJldHVybiAxOworICAgIGlmIChpc0lkICYmICF0eXBl
LT5pZEF0dCAmJiAhYXR0SWQtPnhtbG5zKQorICAgICAgdHlwZS0+aWRBdHQgPSBhdHRJZDsKKyAg
fQorICBpZiAodHlwZS0+bkRlZmF1bHRBdHRzID09IHR5cGUtPmFsbG9jRGVmYXVsdEF0dHMpIHsK
KyAgICBpZiAodHlwZS0+YWxsb2NEZWZhdWx0QXR0cyA9PSAwKSB7CisgICAgICB0eXBlLT5hbGxv
Y0RlZmF1bHRBdHRzID0gODsKKyAgICAgIHR5cGUtPmRlZmF1bHRBdHRzID0gKERFRkFVTFRfQVRU
UklCVVRFICopTUFMTE9DKHR5cGUtPmFsbG9jRGVmYXVsdEF0dHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIHNpemVvZihERUZBVUxUX0FUVFJJQlVURSkpOworICAgICAgaWYgKCF0eXBl
LT5kZWZhdWx0QXR0cykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAg
ICAgREVGQVVMVF9BVFRSSUJVVEUgKnRlbXA7CisgICAgICBpbnQgY291bnQgPSB0eXBlLT5hbGxv
Y0RlZmF1bHRBdHRzICogMjsKKyAgICAgIHRlbXAgPSAoREVGQVVMVF9BVFRSSUJVVEUgKikKKyAg
ICAgICAgUkVBTExPQyh0eXBlLT5kZWZhdWx0QXR0cywgKGNvdW50ICogc2l6ZW9mKERFRkFVTFRf
QVRUUklCVVRFKSkpOworICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgICB0eXBlLT5hbGxvY0RlZmF1bHRBdHRzID0gY291bnQ7CisgICAgICB0eXBlLT5kZWZh
dWx0QXR0cyA9IHRlbXA7CisgICAgfQorICB9CisgIGF0dCA9IHR5cGUtPmRlZmF1bHRBdHRzICsg
dHlwZS0+bkRlZmF1bHRBdHRzOworICBhdHQtPmlkID0gYXR0SWQ7CisgIGF0dC0+dmFsdWUgPSB2
YWx1ZTsKKyAgYXR0LT5pc0NkYXRhID0gaXNDZGF0YTsKKyAgaWYgKCFpc0NkYXRhKQorICAgIGF0
dElkLT5tYXliZVRva2VuaXplZCA9IFhNTF9UUlVFOworICB0eXBlLT5uRGVmYXVsdEF0dHMgKz0g
MTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NldEVsZW1lbnRUeXBlUHJlZml4KFhN
TF9QYXJzZXIgcGFyc2VyLCBFTEVNRU5UX1RZUEUgKmVsZW1lbnRUeXBlKQoreworICBEVEQgKiBj
b25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KKyAg
Y29uc3QgWE1MX0NoYXIgKm5hbWU7CisgIGZvciAobmFtZSA9IGVsZW1lbnRUeXBlLT5uYW1lOyAq
bmFtZTsgbmFtZSsrKSB7CisgICAgaWYgKCpuYW1lID09IFhNTF9UKEFTQ0lJX0NPTE9OKSkgewor
ICAgICAgUFJFRklYICpwcmVmaXg7CisgICAgICBjb25zdCBYTUxfQ2hhciAqczsKKyAgICAgIGZv
ciAocyA9IGVsZW1lbnRUeXBlLT5uYW1lOyBzICE9IG5hbWU7IHMrKykgeworICAgICAgICBpZiAo
IXBvb2xBcHBlbmRDaGFyKCZkdGQtPnBvb2wsICpzKSkKKyAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgIH0KKyAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJmR0ZC0+cG9vbCwgWE1MX1QoJ1wwJykp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAgIHByZWZpeCA9IChQUkVGSVggKilsb29rdXAocGFy
c2VyLCAmZHRkLT5wcmVmaXhlcywgcG9vbFN0YXJ0KCZkdGQtPnBvb2wpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplb2YoUFJFRklYKSk7CisgICAgICBpZiAoIXByZWZpeCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgICBpZiAocHJlZml4LT5uYW1lID09IHBvb2xTdGFydCgm
ZHRkLT5wb29sKSkKKyAgICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsKKyAgICAgIGVsc2UK
KyAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7CisgICAgICBlbGVtZW50VHlwZS0+cHJl
Zml4ID0gcHJlZml4OworCisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgQVRU
UklCVVRFX0lEICoKK2dldEF0dHJpYnV0ZUlkKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNP
RElORyAqZW5jLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIg
KmVuZCkKK3sKKyAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9m
IGluZGlyZWN0aW9uICovCisgIEFUVFJJQlVURV9JRCAqaWQ7CisgIGNvbnN0IFhNTF9DaGFyICpu
YW1lOworICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZkdGQtPnBvb2wsIFhNTF9UKCdcMCcpKSkKKyAg
ICByZXR1cm4gTlVMTDsKKyAgbmFtZSA9IHBvb2xTdG9yZVN0cmluZygmZHRkLT5wb29sLCBlbmMs
IHN0YXJ0LCBlbmQpOworICBpZiAoIW5hbWUpCisgICAgcmV0dXJuIE5VTEw7CisgIC8qIHNraXAg
cXVvdGF0aW9uIG1hcmsgLSBpdHMgc3RvcmFnZSB3aWxsIGJlIHJlLXVzZWQgKGxpa2UgaW4gbmFt
ZVstMV0pICovCisgICsrbmFtZTsKKyAgaWQgPSAoQVRUUklCVVRFX0lEICopbG9va3VwKHBhcnNl
ciwgJmR0ZC0+YXR0cmlidXRlSWRzLCBuYW1lLCBzaXplb2YoQVRUUklCVVRFX0lEKSk7CisgIGlm
ICghaWQpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmIChpZC0+bmFtZSAhPSBuYW1lKQorICAgIHBv
b2xEaXNjYXJkKCZkdGQtPnBvb2wpOworICBlbHNlIHsKKyAgICBwb29sRmluaXNoKCZkdGQtPnBv
b2wpOworICAgIGlmICghbnMpCisgICAgICA7CisgICAgZWxzZSBpZiAobmFtZVswXSA9PSBYTUxf
VChBU0NJSV94KQorICAgICAgICAmJiBuYW1lWzFdID09IFhNTF9UKEFTQ0lJX20pCisgICAgICAg
ICYmIG5hbWVbMl0gPT0gWE1MX1QoQVNDSUlfbCkKKyAgICAgICAgJiYgbmFtZVszXSA9PSBYTUxf
VChBU0NJSV9uKQorICAgICAgICAmJiBuYW1lWzRdID09IFhNTF9UKEFTQ0lJX3MpCisgICAgICAg
ICYmIChuYW1lWzVdID09IFhNTF9UKCdcMCcpIHx8IG5hbWVbNV0gPT0gWE1MX1QoQVNDSUlfQ09M
T04pKSkgeworICAgICAgaWYgKG5hbWVbNV0gPT0gWE1MX1QoJ1wwJykpCisgICAgICAgIGlkLT5w
cmVmaXggPSAmZHRkLT5kZWZhdWx0UHJlZml4OworICAgICAgZWxzZQorICAgICAgICBpZC0+cHJl
Zml4ID0gKFBSRUZJWCAqKWxvb2t1cChwYXJzZXIsICZkdGQtPnByZWZpeGVzLCBuYW1lICsgNiwg
c2l6ZW9mKFBSRUZJWCkpOworICAgICAgaWQtPnhtbG5zID0gWE1MX1RSVUU7CisgICAgfQorICAg
IGVsc2UgeworICAgICAgaW50IGk7CisgICAgICBmb3IgKGkgPSAwOyBuYW1lW2ldOyBpKyspIHsK
KyAgICAgICAgLyogYXR0cmlidXRlcyB3aXRob3V0IHByZWZpeCBhcmUgKm5vdCogaW4gdGhlIGRl
ZmF1bHQgbmFtZXNwYWNlICovCisgICAgICAgIGlmIChuYW1lW2ldID09IFhNTF9UKEFTQ0lJX0NP
TE9OKSkgeworICAgICAgICAgIGludCBqOworICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBq
KyspIHsKKyAgICAgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJmR0ZC0+cG9vbCwgbmFtZVtq
XSkpCisgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgICBp
ZiAoIXBvb2xBcHBlbmRDaGFyKCZkdGQtPnBvb2wsIFhNTF9UKCdcMCcpKSkKKyAgICAgICAgICAg
IHJldHVybiBOVUxMOworICAgICAgICAgIGlkLT5wcmVmaXggPSAoUFJFRklYICopbG9va3VwKHBh
cnNlciwgJmR0ZC0+cHJlZml4ZXMsIHBvb2xTdGFydCgmZHRkLT5wb29sKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoUFJFRklYKSk7CisgICAgICAgICAg
aWYgKGlkLT5wcmVmaXgtPm5hbWUgPT0gcG9vbFN0YXJ0KCZkdGQtPnBvb2wpKQorICAgICAgICAg
ICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBw
b29sRGlzY2FyZCgmZHRkLT5wb29sKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gaWQ7Cit9CisKKyNkZWZpbmUgQ09OVEVYVF9TRVAg
WE1MX1QoQVNDSUlfRkYpCisKK3N0YXRpYyBjb25zdCBYTUxfQ2hhciAqCitnZXRDb250ZXh0KFhN
TF9QYXJzZXIgcGFyc2VyKQoreworICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBv
bmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KKyAgSEFTSF9UQUJMRV9JVEVSIGl0ZXI7CisgIFhN
TF9Cb29sIG5lZWRTZXAgPSBYTUxfRkFMU0U7CisKKyAgaWYgKGR0ZC0+ZGVmYXVsdFByZWZpeC5i
aW5kaW5nKSB7CisgICAgaW50IGk7CisgICAgaW50IGxlbjsKKyAgICBpZiAoIXBvb2xBcHBlbmRD
aGFyKCZ0ZW1wUG9vbCwgWE1MX1QoQVNDSUlfRVFVQUxTKSkpCisgICAgICByZXR1cm4gTlVMTDsK
KyAgICBsZW4gPSBkdGQtPmRlZmF1bHRQcmVmaXguYmluZGluZy0+dXJpTGVuOworICAgIGlmIChu
YW1lc3BhY2VTZXBhcmF0b3IpCisgICAgICBsZW4tLTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVu
OyBpKyspCisgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgZHRkLT5kZWZhdWx0
UHJlZml4LmJpbmRpbmctPnVyaVtpXSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG5lZWRT
ZXAgPSBYTUxfVFJVRTsKKyAgfQorCisgIGhhc2hUYWJsZUl0ZXJJbml0KCZpdGVyLCAmKGR0ZC0+
cHJlZml4ZXMpKTsKKyAgZm9yICg7OykgeworICAgIGludCBpOworICAgIGludCBsZW47CisgICAg
Y29uc3QgWE1MX0NoYXIgKnM7CisgICAgUFJFRklYICpwcmVmaXggPSAoUFJFRklYICopaGFzaFRh
YmxlSXRlck5leHQoJml0ZXIpOworICAgIGlmICghcHJlZml4KQorICAgICAgYnJlYWs7CisgICAg
aWYgKCFwcmVmaXgtPmJpbmRpbmcpCisgICAgICBjb250aW51ZTsKKyAgICBpZiAobmVlZFNlcCAm
JiAhcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBDT05URVhUX1NFUCkpCisgICAgICByZXR1cm4g
TlVMTDsKKyAgICBmb3IgKHMgPSBwcmVmaXgtPm5hbWU7ICpzOyBzKyspCisgICAgICBpZiAoIXBv
b2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgKnMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBp
ZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoQVNDSUlfRVFVQUxTKSkpCisgICAg
ICByZXR1cm4gTlVMTDsKKyAgICBsZW4gPSBwcmVmaXgtPmJpbmRpbmctPnVyaUxlbjsKKyAgICBp
ZiAobmFtZXNwYWNlU2VwYXJhdG9yKQorICAgICAgbGVuLS07CisgICAgZm9yIChpID0gMDsgaSA8
IGxlbjsgaSsrKQorICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIHByZWZpeC0+
YmluZGluZy0+dXJpW2ldKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbmVlZFNlcCA9IFhN
TF9UUlVFOworICB9CisKKworICBoYXNoVGFibGVJdGVySW5pdCgmaXRlciwgJihkdGQtPmdlbmVy
YWxFbnRpdGllcykpOworICBmb3IgKDs7KSB7CisgICAgY29uc3QgWE1MX0NoYXIgKnM7CisgICAg
RU5USVRZICplID0gKEVOVElUWSAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZpdGVyKTsKKyAgICBpZiAo
IWUpCisgICAgICBicmVhazsKKyAgICBpZiAoIWUtPm9wZW4pCisgICAgICBjb250aW51ZTsKKyAg
ICBpZiAobmVlZFNlcCAmJiAhcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBDT05URVhUX1NFUCkp
CisgICAgICByZXR1cm4gTlVMTDsKKyAgICBmb3IgKHMgPSBlLT5uYW1lOyAqczsgcysrKQorICAg
ICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsICpzKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgbmVlZFNlcCA9IFhNTF9UUlVFOworICB9CisKKyAgaWYgKCFwb29sQXBwZW5kQ2hhcigm
dGVtcFBvb2wsIFhNTF9UKCdcMCcpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIHRlbXBQ
b29sLnN0YXJ0OworfQorCitzdGF0aWMgWE1MX0Jvb2wKK3NldENvbnRleHQoWE1MX1BhcnNlciBw
YXJzZXIsIGNvbnN0IFhNTF9DaGFyICpjb250ZXh0KQoreworICBEVEQgKiBjb25zdCBkdGQgPSBf
ZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KKyAgY29uc3QgWE1MX0No
YXIgKnMgPSBjb250ZXh0OworCisgIHdoaWxlICgqY29udGV4dCAhPSBYTUxfVCgnXDAnKSkgewor
ICAgIGlmICgqcyA9PSBDT05URVhUX1NFUCB8fCAqcyA9PSBYTUxfVCgnXDAnKSkgeworICAgICAg
RU5USVRZICplOworICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKCdc
MCcpKSkKKyAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsKKyAgICAgIGUgPSAoRU5USVRZICopbG9v
a3VwKHBhcnNlciwgJmR0ZC0+Z2VuZXJhbEVudGl0aWVzLCBwb29sU3RhcnQoJnRlbXBQb29sKSwg
MCk7CisgICAgICBpZiAoZSkKKyAgICAgICAgZS0+b3BlbiA9IFhNTF9UUlVFOworICAgICAgaWYg
KCpzICE9IFhNTF9UKCdcMCcpKQorICAgICAgICBzKys7CisgICAgICBjb250ZXh0ID0gczsKKyAg
ICAgIHBvb2xEaXNjYXJkKCZ0ZW1wUG9vbCk7CisgICAgfQorICAgIGVsc2UgaWYgKCpzID09IFhN
TF9UKEFTQ0lJX0VRVUFMUykpIHsKKyAgICAgIFBSRUZJWCAqcHJlZml4OworICAgICAgaWYgKHBv
b2xMZW5ndGgoJnRlbXBQb29sKSA9PSAwKQorICAgICAgICBwcmVmaXggPSAmZHRkLT5kZWZhdWx0
UHJlZml4OworICAgICAgZWxzZSB7CisgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQ
b29sLCBYTUxfVCgnXDAnKSkpCisgICAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsKKyAgICAgICAg
cHJlZml4ID0gKFBSRUZJWCAqKWxvb2t1cChwYXJzZXIsICZkdGQtPnByZWZpeGVzLCBwb29sU3Rh
cnQoJnRlbXBQb29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo
UFJFRklYKSk7CisgICAgICAgIGlmICghcHJlZml4KQorICAgICAgICAgIHJldHVybiBYTUxfRkFM
U0U7CisgICAgICAgIGlmIChwcmVmaXgtPm5hbWUgPT0gcG9vbFN0YXJ0KCZ0ZW1wUG9vbCkpIHsK
KyAgICAgICAgICBwcmVmaXgtPm5hbWUgPSBwb29sQ29weVN0cmluZygmZHRkLT5wb29sLCBwcmVm
aXgtPm5hbWUpOworICAgICAgICAgIGlmICghcHJlZml4LT5uYW1lKQorICAgICAgICAgICAgcmV0
dXJuIFhNTF9GQUxTRTsKKyAgICAgICAgfQorICAgICAgICBwb29sRGlzY2FyZCgmdGVtcFBvb2wp
OworICAgICAgfQorICAgICAgZm9yIChjb250ZXh0ID0gcyArIDE7CisgICAgICAgICAgICpjb250
ZXh0ICE9IENPTlRFWFRfU0VQICYmICpjb250ZXh0ICE9IFhNTF9UKCdcMCcpOworICAgICAgICAg
ICBjb250ZXh0KyspCisgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCAqY29u
dGV4dCkpCisgICAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsKKyAgICAgIGlmICghcG9vbEFwcGVu
ZENoYXIoJnRlbXBQb29sLCBYTUxfVCgnXDAnKSkpCisgICAgICAgIHJldHVybiBYTUxfRkFMU0U7
CisgICAgICBpZiAoYWRkQmluZGluZyhwYXJzZXIsIHByZWZpeCwgTlVMTCwgcG9vbFN0YXJ0KCZ0
ZW1wUG9vbCksCisgICAgICAgICAgICAgICAgICAgICAmaW5oZXJpdGVkQmluZGluZ3MpICE9IFhN
TF9FUlJPUl9OT05FKQorICAgICAgICByZXR1cm4gWE1MX0ZBTFNFOworICAgICAgcG9vbERpc2Nh
cmQoJnRlbXBQb29sKTsKKyAgICAgIGlmICgqY29udGV4dCAhPSBYTUxfVCgnXDAnKSkKKyAgICAg
ICAgKytjb250ZXh0OworICAgICAgcyA9IGNvbnRleHQ7CisgICAgfQorICAgIGVsc2UgeworICAg
ICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsICpzKSkKKyAgICAgICAgcmV0dXJuIFhN
TF9GQUxTRTsKKyAgICAgIHMrKzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFhNTF9UUlVFOworfQor
CitzdGF0aWMgdm9pZCBGQVNUQ0FMTAorbm9ybWFsaXplUHVibGljSWQoWE1MX0NoYXIgKnB1Ymxp
Y0lkKQoreworICBYTUxfQ2hhciAqcCA9IHB1YmxpY0lkOworICBYTUxfQ2hhciAqczsKKyAgZm9y
IChzID0gcHVibGljSWQ7ICpzOyBzKyspIHsKKyAgICBzd2l0Y2ggKCpzKSB7CisgICAgY2FzZSAw
eDIwOgorICAgIGNhc2UgMHhEOgorICAgIGNhc2UgMHhBOgorICAgICAgaWYgKHAgIT0gcHVibGlj
SWQgJiYgcFstMV0gIT0gMHgyMCkKKyAgICAgICAgKnArKyA9IDB4MjA7CisgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgKnArKyA9ICpzOworICAgIH0KKyAgfQorICBpZiAocCAhPSBw
dWJsaWNJZCAmJiBwWy0xXSA9PSAweDIwKQorICAgIC0tcDsKKyAgKnAgPSBYTUxfVCgnXDAnKTsK
K30KKworc3RhdGljIERURCAqCitkdGRDcmVhdGUoY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19T
dWl0ZSAqbXMpCit7CisgIERURCAqcCA9IChEVEQgKiltcy0+bWFsbG9jX2ZjbihzaXplb2YoRFRE
KSk7CisgIGlmIChwID09IE5VTEwpCisgICAgcmV0dXJuIHA7CisgIHBvb2xJbml0KCYocC0+cG9v
bCksIG1zKTsKKyAgcG9vbEluaXQoJihwLT5lbnRpdHlWYWx1ZVBvb2wpLCBtcyk7CisgIGhhc2hU
YWJsZUluaXQoJihwLT5nZW5lcmFsRW50aXRpZXMpLCBtcyk7CisgIGhhc2hUYWJsZUluaXQoJihw
LT5lbGVtZW50VHlwZXMpLCBtcyk7CisgIGhhc2hUYWJsZUluaXQoJihwLT5hdHRyaWJ1dGVJZHMp
LCBtcyk7CisgIGhhc2hUYWJsZUluaXQoJihwLT5wcmVmaXhlcyksIG1zKTsKKyNpZmRlZiBYTUxf
RFRECisgIHAtPnBhcmFtRW50aXR5UmVhZCA9IFhNTF9GQUxTRTsKKyAgaGFzaFRhYmxlSW5pdCgm
KHAtPnBhcmFtRW50aXRpZXMpLCBtcyk7CisjZW5kaWYgLyogWE1MX0RURCAqLworICBwLT5kZWZh
dWx0UHJlZml4Lm5hbWUgPSBOVUxMOworICBwLT5kZWZhdWx0UHJlZml4LmJpbmRpbmcgPSBOVUxM
OworCisgIHAtPmluX2VsZGVjbCA9IFhNTF9GQUxTRTsKKyAgcC0+c2NhZmZJbmRleCA9IE5VTEw7
CisgIHAtPnNjYWZmb2xkID0gTlVMTDsKKyAgcC0+c2NhZmZMZXZlbCA9IDA7CisgIHAtPnNjYWZm
U2l6ZSA9IDA7CisgIHAtPnNjYWZmQ291bnQgPSAwOworICBwLT5jb250ZW50U3RyaW5nTGVuID0g
MDsKKworICBwLT5rZWVwUHJvY2Vzc2luZyA9IFhNTF9UUlVFOworICBwLT5oYXNQYXJhbUVudGl0
eVJlZnMgPSBYTUxfRkFMU0U7CisgIHAtPnN0YW5kYWxvbmUgPSBYTUxfRkFMU0U7CisgIHJldHVy
biBwOworfQorCitzdGF0aWMgdm9pZAorZHRkUmVzZXQoRFREICpwLCBjb25zdCBYTUxfTWVtb3J5
X0hhbmRsaW5nX1N1aXRlICptcykKK3sKKyAgSEFTSF9UQUJMRV9JVEVSIGl0ZXI7CisgIGhhc2hU
YWJsZUl0ZXJJbml0KCZpdGVyLCAmKHAtPmVsZW1lbnRUeXBlcykpOworICBmb3IgKDs7KSB7Cisg
ICAgRUxFTUVOVF9UWVBFICplID0gKEVMRU1FTlRfVFlQRSAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZp
dGVyKTsKKyAgICBpZiAoIWUpCisgICAgICBicmVhazsKKyAgICBpZiAoZS0+YWxsb2NEZWZhdWx0
QXR0cyAhPSAwKQorICAgICAgbXMtPmZyZWVfZmNuKGUtPmRlZmF1bHRBdHRzKTsKKyAgfQorICBo
YXNoVGFibGVDbGVhcigmKHAtPmdlbmVyYWxFbnRpdGllcykpOworI2lmZGVmIFhNTF9EVEQKKyAg
cC0+cGFyYW1FbnRpdHlSZWFkID0gWE1MX0ZBTFNFOworICBoYXNoVGFibGVDbGVhcigmKHAtPnBh
cmFtRW50aXRpZXMpKTsKKyNlbmRpZiAvKiBYTUxfRFREICovCisgIGhhc2hUYWJsZUNsZWFyKCYo
cC0+ZWxlbWVudFR5cGVzKSk7CisgIGhhc2hUYWJsZUNsZWFyKCYocC0+YXR0cmlidXRlSWRzKSk7
CisgIGhhc2hUYWJsZUNsZWFyKCYocC0+cHJlZml4ZXMpKTsKKyAgcG9vbENsZWFyKCYocC0+cG9v
bCkpOworICBwb29sQ2xlYXIoJihwLT5lbnRpdHlWYWx1ZVBvb2wpKTsKKyAgcC0+ZGVmYXVsdFBy
ZWZpeC5uYW1lID0gTlVMTDsKKyAgcC0+ZGVmYXVsdFByZWZpeC5iaW5kaW5nID0gTlVMTDsKKwor
ICBwLT5pbl9lbGRlY2wgPSBYTUxfRkFMU0U7CisKKyAgbXMtPmZyZWVfZmNuKHAtPnNjYWZmSW5k
ZXgpOworICBwLT5zY2FmZkluZGV4ID0gTlVMTDsKKyAgbXMtPmZyZWVfZmNuKHAtPnNjYWZmb2xk
KTsKKyAgcC0+c2NhZmZvbGQgPSBOVUxMOworCisgIHAtPnNjYWZmTGV2ZWwgPSAwOworICBwLT5z
Y2FmZlNpemUgPSAwOworICBwLT5zY2FmZkNvdW50ID0gMDsKKyAgcC0+Y29udGVudFN0cmluZ0xl
biA9IDA7CisKKyAgcC0+a2VlcFByb2Nlc3NpbmcgPSBYTUxfVFJVRTsKKyAgcC0+aGFzUGFyYW1F
bnRpdHlSZWZzID0gWE1MX0ZBTFNFOworICBwLT5zdGFuZGFsb25lID0gWE1MX0ZBTFNFOworfQor
CitzdGF0aWMgdm9pZAorZHRkRGVzdHJveShEVEQgKnAsIFhNTF9Cb29sIGlzRG9jRW50aXR5LCBj
b25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptcykKK3sKKyAgSEFTSF9UQUJMRV9JVEVS
IGl0ZXI7CisgIGhhc2hUYWJsZUl0ZXJJbml0KCZpdGVyLCAmKHAtPmVsZW1lbnRUeXBlcykpOwor
ICBmb3IgKDs7KSB7CisgICAgRUxFTUVOVF9UWVBFICplID0gKEVMRU1FTlRfVFlQRSAqKWhhc2hU
YWJsZUl0ZXJOZXh0KCZpdGVyKTsKKyAgICBpZiAoIWUpCisgICAgICBicmVhazsKKyAgICBpZiAo
ZS0+YWxsb2NEZWZhdWx0QXR0cyAhPSAwKQorICAgICAgbXMtPmZyZWVfZmNuKGUtPmRlZmF1bHRB
dHRzKTsKKyAgfQorICBoYXNoVGFibGVEZXN0cm95KCYocC0+Z2VuZXJhbEVudGl0aWVzKSk7Cisj
aWZkZWYgWE1MX0RURAorICBoYXNoVGFibGVEZXN0cm95KCYocC0+cGFyYW1FbnRpdGllcykpOwor
I2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgaGFzaFRhYmxlRGVzdHJveSgmKHAtPmVsZW1lbnRUeXBl
cykpOworICBoYXNoVGFibGVEZXN0cm95KCYocC0+YXR0cmlidXRlSWRzKSk7CisgIGhhc2hUYWJs
ZURlc3Ryb3koJihwLT5wcmVmaXhlcykpOworICBwb29sRGVzdHJveSgmKHAtPnBvb2wpKTsKKyAg
cG9vbERlc3Ryb3koJihwLT5lbnRpdHlWYWx1ZVBvb2wpKTsKKyAgaWYgKGlzRG9jRW50aXR5KSB7
CisgICAgbXMtPmZyZWVfZmNuKHAtPnNjYWZmSW5kZXgpOworICAgIG1zLT5mcmVlX2ZjbihwLT5z
Y2FmZm9sZCk7CisgIH0KKyAgbXMtPmZyZWVfZmNuKHApOworfQorCisvKiBEbyBhIGRlZXAgY29w
eSBvZiB0aGUgRFRELiBSZXR1cm4gMCBmb3Igb3V0IG9mIG1lbW9yeSwgbm9uLXplcm8gb3RoZXJ3
aXNlLgorICAgVGhlIG5ldyBEVEQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKyovCitz
dGF0aWMgaW50CitkdGRDb3B5KFhNTF9QYXJzZXIgb2xkUGFyc2VyLCBEVEQgKm5ld0R0ZCwgY29u
c3QgRFREICpvbGREdGQsIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKQorewor
ICBIQVNIX1RBQkxFX0lURVIgaXRlcjsKKworICAvKiBDb3B5IHRoZSBwcmVmaXggdGFibGUuICov
CisKKyAgaGFzaFRhYmxlSXRlckluaXQoJml0ZXIsICYob2xkRHRkLT5wcmVmaXhlcykpOworICBm
b3IgKDs7KSB7CisgICAgY29uc3QgWE1MX0NoYXIgKm5hbWU7CisgICAgY29uc3QgUFJFRklYICpv
bGRQID0gKFBSRUZJWCAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZpdGVyKTsKKyAgICBpZiAoIW9sZFAp
CisgICAgICBicmVhazsKKyAgICBuYW1lID0gcG9vbENvcHlTdHJpbmcoJihuZXdEdGQtPnBvb2wp
LCBvbGRQLT5uYW1lKTsKKyAgICBpZiAoIW5hbWUpCisgICAgICByZXR1cm4gMDsKKyAgICBpZiAo
IWxvb2t1cChvbGRQYXJzZXIsICYobmV3RHRkLT5wcmVmaXhlcyksIG5hbWUsIHNpemVvZihQUkVG
SVgpKSkKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgaGFzaFRhYmxlSXRlckluaXQoJml0ZXIs
ICYob2xkRHRkLT5hdHRyaWJ1dGVJZHMpKTsKKworICAvKiBDb3B5IHRoZSBhdHRyaWJ1dGUgaWQg
dGFibGUuICovCisKKyAgZm9yICg7OykgeworICAgIEFUVFJJQlVURV9JRCAqbmV3QTsKKyAgICBj
b25zdCBYTUxfQ2hhciAqbmFtZTsKKyAgICBjb25zdCBBVFRSSUJVVEVfSUQgKm9sZEEgPSAoQVRU
UklCVVRFX0lEICopaGFzaFRhYmxlSXRlck5leHQoJml0ZXIpOworCisgICAgaWYgKCFvbGRBKQor
ICAgICAgYnJlYWs7CisgICAgLyogUmVtZW1iZXIgdG8gYWxsb2NhdGUgdGhlIHNjcmF0Y2ggYnl0
ZSBiZWZvcmUgdGhlIG5hbWUuICovCisgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmKG5ld0R0ZC0+
cG9vbCksIFhNTF9UKCdcMCcpKSkKKyAgICAgIHJldHVybiAwOworICAgIG5hbWUgPSBwb29sQ29w
eVN0cmluZygmKG5ld0R0ZC0+cG9vbCksIG9sZEEtPm5hbWUpOworICAgIGlmICghbmFtZSkKKyAg
ICAgIHJldHVybiAwOworICAgICsrbmFtZTsKKyAgICBuZXdBID0gKEFUVFJJQlVURV9JRCAqKWxv
b2t1cChvbGRQYXJzZXIsICYobmV3RHRkLT5hdHRyaWJ1dGVJZHMpLCBuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihBVFRSSUJVVEVfSUQpKTsKKyAgICBpZiAo
IW5ld0EpCisgICAgICByZXR1cm4gMDsKKyAgICBuZXdBLT5tYXliZVRva2VuaXplZCA9IG9sZEEt
Pm1heWJlVG9rZW5pemVkOworICAgIGlmIChvbGRBLT5wcmVmaXgpIHsKKyAgICAgIG5ld0EtPnht
bG5zID0gb2xkQS0+eG1sbnM7CisgICAgICBpZiAob2xkQS0+cHJlZml4ID09ICZvbGREdGQtPmRl
ZmF1bHRQcmVmaXgpCisgICAgICAgIG5ld0EtPnByZWZpeCA9ICZuZXdEdGQtPmRlZmF1bHRQcmVm
aXg7CisgICAgICBlbHNlCisgICAgICAgIG5ld0EtPnByZWZpeCA9IChQUkVGSVggKilsb29rdXAo
b2xkUGFyc2VyLCAmKG5ld0R0ZC0+cHJlZml4ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9sZEEtPnByZWZpeC0+bmFtZSwgMCk7CisgICAgfQorICB9CisKKyAg
LyogQ29weSB0aGUgZWxlbWVudCB0eXBlIHRhYmxlLiAqLworCisgIGhhc2hUYWJsZUl0ZXJJbml0
KCZpdGVyLCAmKG9sZER0ZC0+ZWxlbWVudFR5cGVzKSk7CisKKyAgZm9yICg7OykgeworICAgIGlu
dCBpOworICAgIEVMRU1FTlRfVFlQRSAqbmV3RTsKKyAgICBjb25zdCBYTUxfQ2hhciAqbmFtZTsK
KyAgICBjb25zdCBFTEVNRU5UX1RZUEUgKm9sZEUgPSAoRUxFTUVOVF9UWVBFICopaGFzaFRhYmxl
SXRlck5leHQoJml0ZXIpOworICAgIGlmICghb2xkRSkKKyAgICAgIGJyZWFrOworICAgIG5hbWUg
PSBwb29sQ29weVN0cmluZygmKG5ld0R0ZC0+cG9vbCksIG9sZEUtPm5hbWUpOworICAgIGlmICgh
bmFtZSkKKyAgICAgIHJldHVybiAwOworICAgIG5ld0UgPSAoRUxFTUVOVF9UWVBFICopbG9va3Vw
KG9sZFBhcnNlciwgJihuZXdEdGQtPmVsZW1lbnRUeXBlcyksIG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVMRU1FTlRfVFlQRSkpOworICAgIGlmICghbmV3
RSkKKyAgICAgIHJldHVybiAwOworICAgIGlmIChvbGRFLT5uRGVmYXVsdEF0dHMpIHsKKyAgICAg
IG5ld0UtPmRlZmF1bHRBdHRzID0gKERFRkFVTFRfQVRUUklCVVRFICopCisgICAgICAgICAgbXMt
Pm1hbGxvY19mY24ob2xkRS0+bkRlZmF1bHRBdHRzICogc2l6ZW9mKERFRkFVTFRfQVRUUklCVVRF
KSk7CisgICAgICBpZiAoIW5ld0UtPmRlZmF1bHRBdHRzKSB7CisgICAgICAgIG1zLT5mcmVlX2Zj
bihuZXdFKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGlmIChvbGRF
LT5pZEF0dCkKKyAgICAgIG5ld0UtPmlkQXR0ID0gKEFUVFJJQlVURV9JRCAqKQorICAgICAgICAg
IGxvb2t1cChvbGRQYXJzZXIsICYobmV3RHRkLT5hdHRyaWJ1dGVJZHMpLCBvbGRFLT5pZEF0dC0+
bmFtZSwgMCk7CisgICAgbmV3RS0+YWxsb2NEZWZhdWx0QXR0cyA9IG5ld0UtPm5EZWZhdWx0QXR0
cyA9IG9sZEUtPm5EZWZhdWx0QXR0czsKKyAgICBpZiAob2xkRS0+cHJlZml4KQorICAgICAgbmV3
RS0+cHJlZml4ID0gKFBSRUZJWCAqKWxvb2t1cChvbGRQYXJzZXIsICYobmV3RHRkLT5wcmVmaXhl
cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEUtPnByZWZpeC0+
bmFtZSwgMCk7CisgICAgZm9yIChpID0gMDsgaSA8IG5ld0UtPm5EZWZhdWx0QXR0czsgaSsrKSB7
CisgICAgICBuZXdFLT5kZWZhdWx0QXR0c1tpXS5pZCA9IChBVFRSSUJVVEVfSUQgKikKKyAgICAg
ICAgICBsb29rdXAob2xkUGFyc2VyLCAmKG5ld0R0ZC0+YXR0cmlidXRlSWRzKSwgb2xkRS0+ZGVm
YXVsdEF0dHNbaV0uaWQtPm5hbWUsIDApOworICAgICAgbmV3RS0+ZGVmYXVsdEF0dHNbaV0uaXND
ZGF0YSA9IG9sZEUtPmRlZmF1bHRBdHRzW2ldLmlzQ2RhdGE7CisgICAgICBpZiAob2xkRS0+ZGVm
YXVsdEF0dHNbaV0udmFsdWUpIHsKKyAgICAgICAgbmV3RS0+ZGVmYXVsdEF0dHNbaV0udmFsdWUK
KyAgICAgICAgICAgID0gcG9vbENvcHlTdHJpbmcoJihuZXdEdGQtPnBvb2wpLCBvbGRFLT5kZWZh
dWx0QXR0c1tpXS52YWx1ZSk7CisgICAgICAgIGlmICghbmV3RS0+ZGVmYXVsdEF0dHNbaV0udmFs
dWUpCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIG5l
d0UtPmRlZmF1bHRBdHRzW2ldLnZhbHVlID0gTlVMTDsKKyAgICB9CisgIH0KKworICAvKiBDb3B5
IHRoZSBlbnRpdHkgdGFibGVzLiAqLworICBpZiAoIWNvcHlFbnRpdHlUYWJsZShvbGRQYXJzZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICYobmV3RHRkLT5nZW5lcmFsRW50aXRpZXMpLAorICAg
ICAgICAgICAgICAgICAgICAgICAmKG5ld0R0ZC0+cG9vbCksCisgICAgICAgICAgICAgICAgICAg
ICAgICYob2xkRHRkLT5nZW5lcmFsRW50aXRpZXMpKSkKKyAgICAgIHJldHVybiAwOworCisjaWZk
ZWYgWE1MX0RURAorICBpZiAoIWNvcHlFbnRpdHlUYWJsZShvbGRQYXJzZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICYobmV3RHRkLT5wYXJhbUVudGl0aWVzKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgJihuZXdEdGQtPnBvb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAmKG9sZER0ZC0+
cGFyYW1FbnRpdGllcykpKQorICAgICAgcmV0dXJuIDA7CisgIG5ld0R0ZC0+cGFyYW1FbnRpdHlS
ZWFkID0gb2xkRHRkLT5wYXJhbUVudGl0eVJlYWQ7CisjZW5kaWYgLyogWE1MX0RURCAqLworCisg
IG5ld0R0ZC0+a2VlcFByb2Nlc3NpbmcgPSBvbGREdGQtPmtlZXBQcm9jZXNzaW5nOworICBuZXdE
dGQtPmhhc1BhcmFtRW50aXR5UmVmcyA9IG9sZER0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzOworICBu
ZXdEdGQtPnN0YW5kYWxvbmUgPSBvbGREdGQtPnN0YW5kYWxvbmU7CisKKyAgLyogRG9uJ3Qgd2Fu
dCBkZWVwIGNvcHlpbmcgZm9yIHNjYWZmb2xkaW5nICovCisgIG5ld0R0ZC0+aW5fZWxkZWNsID0g
b2xkRHRkLT5pbl9lbGRlY2w7CisgIG5ld0R0ZC0+c2NhZmZvbGQgPSBvbGREdGQtPnNjYWZmb2xk
OworICBuZXdEdGQtPmNvbnRlbnRTdHJpbmdMZW4gPSBvbGREdGQtPmNvbnRlbnRTdHJpbmdMZW47
CisgIG5ld0R0ZC0+c2NhZmZTaXplID0gb2xkRHRkLT5zY2FmZlNpemU7CisgIG5ld0R0ZC0+c2Nh
ZmZMZXZlbCA9IG9sZER0ZC0+c2NhZmZMZXZlbDsKKyAgbmV3RHRkLT5zY2FmZkluZGV4ID0gb2xk
RHRkLT5zY2FmZkluZGV4OworCisgIHJldHVybiAxOworfSAgLyogRW5kIGR0ZENvcHkgKi8KKwor
c3RhdGljIGludAorY29weUVudGl0eVRhYmxlKFhNTF9QYXJzZXIgb2xkUGFyc2VyLAorICAgICAg
ICAgICAgICAgIEhBU0hfVEFCTEUgKm5ld1RhYmxlLAorICAgICAgICAgICAgICAgIFNUUklOR19Q
T09MICpuZXdQb29sLAorICAgICAgICAgICAgICAgIGNvbnN0IEhBU0hfVEFCTEUgKm9sZFRhYmxl
KQoreworICBIQVNIX1RBQkxFX0lURVIgaXRlcjsKKyAgY29uc3QgWE1MX0NoYXIgKmNhY2hlZE9s
ZEJhc2UgPSBOVUxMOworICBjb25zdCBYTUxfQ2hhciAqY2FjaGVkTmV3QmFzZSA9IE5VTEw7CisK
KyAgaGFzaFRhYmxlSXRlckluaXQoJml0ZXIsIG9sZFRhYmxlKTsKKworICBmb3IgKDs7KSB7Cisg
ICAgRU5USVRZICpuZXdFOworICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOworICAgIGNvbnN0IEVO
VElUWSAqb2xkRSA9IChFTlRJVFkgKiloYXNoVGFibGVJdGVyTmV4dCgmaXRlcik7CisgICAgaWYg
KCFvbGRFKQorICAgICAgYnJlYWs7CisgICAgbmFtZSA9IHBvb2xDb3B5U3RyaW5nKG5ld1Bvb2ws
IG9sZEUtPm5hbWUpOworICAgIGlmICghbmFtZSkKKyAgICAgIHJldHVybiAwOworICAgIG5ld0Ug
PSAoRU5USVRZICopbG9va3VwKG9sZFBhcnNlciwgbmV3VGFibGUsIG5hbWUsIHNpemVvZihFTlRJ
VFkpKTsKKyAgICBpZiAoIW5ld0UpCisgICAgICByZXR1cm4gMDsKKyAgICBpZiAob2xkRS0+c3lz
dGVtSWQpIHsKKyAgICAgIGNvbnN0IFhNTF9DaGFyICp0ZW0gPSBwb29sQ29weVN0cmluZyhuZXdQ
b29sLCBvbGRFLT5zeXN0ZW1JZCk7CisgICAgICBpZiAoIXRlbSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgICBuZXdFLT5zeXN0ZW1JZCA9IHRlbTsKKyAgICAgIGlmIChvbGRFLT5iYXNlKSB7Cisg
ICAgICAgIGlmIChvbGRFLT5iYXNlID09IGNhY2hlZE9sZEJhc2UpCisgICAgICAgICAgbmV3RS0+
YmFzZSA9IGNhY2hlZE5ld0Jhc2U7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGNhY2hlZE9s
ZEJhc2UgPSBvbGRFLT5iYXNlOworICAgICAgICAgIHRlbSA9IHBvb2xDb3B5U3RyaW5nKG5ld1Bv
b2wsIGNhY2hlZE9sZEJhc2UpOworICAgICAgICAgIGlmICghdGVtKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgY2FjaGVkTmV3QmFzZSA9IG5ld0UtPmJhc2UgPSB0ZW07CisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChvbGRFLT5wdWJsaWNJZCkgeworICAgICAgICB0ZW0g
PSBwb29sQ29weVN0cmluZyhuZXdQb29sLCBvbGRFLT5wdWJsaWNJZCk7CisgICAgICAgIGlmICgh
dGVtKQorICAgICAgICAgIHJldHVybiAwOworICAgICAgICBuZXdFLT5wdWJsaWNJZCA9IHRlbTsK
KyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBjb25zdCBYTUxfQ2hhciAqdGVtID0g
cG9vbENvcHlTdHJpbmdOKG5ld1Bvb2wsIG9sZEUtPnRleHRQdHIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEUtPnRleHRMZW4pOworICAgICAgaWYgKCF0
ZW0pCisgICAgICAgIHJldHVybiAwOworICAgICAgbmV3RS0+dGV4dFB0ciA9IHRlbTsKKyAgICAg
IG5ld0UtPnRleHRMZW4gPSBvbGRFLT50ZXh0TGVuOworICAgIH0KKyAgICBpZiAob2xkRS0+bm90
YXRpb24pIHsKKyAgICAgIGNvbnN0IFhNTF9DaGFyICp0ZW0gPSBwb29sQ29weVN0cmluZyhuZXdQ
b29sLCBvbGRFLT5ub3RhdGlvbik7CisgICAgICBpZiAoIXRlbSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgICBuZXdFLT5ub3RhdGlvbiA9IHRlbTsKKyAgICB9CisgICAgbmV3RS0+aXNfcGFyYW0g
PSBvbGRFLT5pc19wYXJhbTsKKyAgICBuZXdFLT5pc19pbnRlcm5hbCA9IG9sZEUtPmlzX2ludGVy
bmFsOworICB9CisgIHJldHVybiAxOworfQorCisjZGVmaW5lIElOSVRfUE9XRVIgNgorCitzdGF0
aWMgWE1MX0Jvb2wgRkFTVENBTEwKK2tleWVxKEtFWSBzMSwgS0VZIHMyKQoreworICBmb3IgKDsg
KnMxID09ICpzMjsgczErKywgczIrKykKKyAgICBpZiAoKnMxID09IDApCisgICAgICByZXR1cm4g
WE1MX1RSVUU7CisgIHJldHVybiBYTUxfRkFMU0U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25n
IEZBU1RDQUxMCitoYXNoKFhNTF9QYXJzZXIgcGFyc2VyLCBLRVkgcykKK3sKKyAgdW5zaWduZWQg
bG9uZyBoID0gaGFzaF9zZWNyZXRfc2FsdDsKKyAgd2hpbGUgKCpzKQorICAgIGggPSBDSEFSX0hB
U0goaCwgKnMrKyk7CisgIHJldHVybiBoOworfQorCitzdGF0aWMgTkFNRUQgKgorbG9va3VwKFhN
TF9QYXJzZXIgcGFyc2VyLCBIQVNIX1RBQkxFICp0YWJsZSwgS0VZIG5hbWUsIHNpemVfdCBjcmVh
dGVTaXplKQoreworICBzaXplX3QgaTsKKyAgaWYgKHRhYmxlLT5zaXplID09IDApIHsKKyAgICBz
aXplX3QgdHNpemU7CisgICAgaWYgKCFjcmVhdGVTaXplKQorICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgdGFibGUtPnBvd2VyID0gSU5JVF9QT1dFUjsKKyAgICAvKiB0YWJsZS0+c2l6ZSBpcyBhIHBv
d2VyIG9mIDIgKi8KKyAgICB0YWJsZS0+c2l6ZSA9IChzaXplX3QpMSA8PCBJTklUX1BPV0VSOwor
ICAgIHRzaXplID0gdGFibGUtPnNpemUgKiBzaXplb2YoTkFNRUQgKik7CisgICAgdGFibGUtPnYg
PSAoTkFNRUQgKiopdGFibGUtPm1lbS0+bWFsbG9jX2Zjbih0c2l6ZSk7CisgICAgaWYgKCF0YWJs
ZS0+dikgeworICAgICAgdGFibGUtPnNpemUgPSAwOworICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorICAgIG1lbXNldCh0YWJsZS0+diwgMCwgdHNpemUpOworICAgIGkgPSBoYXNoKHBhcnNlciwg
bmFtZSkgJiAoKHVuc2lnbmVkIGxvbmcpdGFibGUtPnNpemUgLSAxKTsKKyAgfQorICBlbHNlIHsK
KyAgICB1bnNpZ25lZCBsb25nIGggPSBoYXNoKHBhcnNlciwgbmFtZSk7CisgICAgdW5zaWduZWQg
bG9uZyBtYXNrID0gKHVuc2lnbmVkIGxvbmcpdGFibGUtPnNpemUgLSAxOworICAgIHVuc2lnbmVk
IGNoYXIgc3RlcCA9IDA7CisgICAgaSA9IGggJiBtYXNrOworICAgIHdoaWxlICh0YWJsZS0+dltp
XSkgeworICAgICAgaWYgKGtleWVxKG5hbWUsIHRhYmxlLT52W2ldLT5uYW1lKSkKKyAgICAgICAg
cmV0dXJuIHRhYmxlLT52W2ldOworICAgICAgaWYgKCFzdGVwKQorICAgICAgICBzdGVwID0gUFJP
QkVfU1RFUChoLCBtYXNrLCB0YWJsZS0+cG93ZXIpOworICAgICAgaSA8IHN0ZXAgPyAoaSArPSB0
YWJsZS0+c2l6ZSAtIHN0ZXApIDogKGkgLT0gc3RlcCk7CisgICAgfQorICAgIGlmICghY3JlYXRl
U2l6ZSkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogY2hlY2sgZm9yIG92ZXJmbG93ICh0
YWJsZSBpcyBoYWxmIGZ1bGwpICovCisgICAgaWYgKHRhYmxlLT51c2VkID4+ICh0YWJsZS0+cG93
ZXIgLSAxKSkgeworICAgICAgdW5zaWduZWQgY2hhciBuZXdQb3dlciA9IHRhYmxlLT5wb3dlciAr
IDE7CisgICAgICBzaXplX3QgbmV3U2l6ZSA9IChzaXplX3QpMSA8PCBuZXdQb3dlcjsKKyAgICAg
IHVuc2lnbmVkIGxvbmcgbmV3TWFzayA9ICh1bnNpZ25lZCBsb25nKW5ld1NpemUgLSAxOworICAg
ICAgc2l6ZV90IHRzaXplID0gbmV3U2l6ZSAqIHNpemVvZihOQU1FRCAqKTsKKyAgICAgIE5BTUVE
ICoqbmV3ViA9IChOQU1FRCAqKil0YWJsZS0+bWVtLT5tYWxsb2NfZmNuKHRzaXplKTsKKyAgICAg
IGlmICghbmV3VikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBtZW1zZXQobmV3ViwgMCwg
dHNpemUpOworICAgICAgZm9yIChpID0gMDsgaSA8IHRhYmxlLT5zaXplOyBpKyspCisgICAgICAg
IGlmICh0YWJsZS0+dltpXSkgeworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbmV3SGFzaCA9IGhh
c2gocGFyc2VyLCB0YWJsZS0+dltpXS0+bmFtZSk7CisgICAgICAgICAgc2l6ZV90IGogPSBuZXdI
YXNoICYgbmV3TWFzazsKKyAgICAgICAgICBzdGVwID0gMDsKKyAgICAgICAgICB3aGlsZSAobmV3
VltqXSkgeworICAgICAgICAgICAgaWYgKCFzdGVwKQorICAgICAgICAgICAgICBzdGVwID0gUFJP
QkVfU1RFUChuZXdIYXNoLCBuZXdNYXNrLCBuZXdQb3dlcik7CisgICAgICAgICAgICBqIDwgc3Rl
cCA/IChqICs9IG5ld1NpemUgLSBzdGVwKSA6IChqIC09IHN0ZXApOworICAgICAgICAgIH0KKyAg
ICAgICAgICBuZXdWW2pdID0gdGFibGUtPnZbaV07CisgICAgICAgIH0KKyAgICAgIHRhYmxlLT5t
ZW0tPmZyZWVfZmNuKHRhYmxlLT52KTsKKyAgICAgIHRhYmxlLT52ID0gbmV3VjsKKyAgICAgIHRh
YmxlLT5wb3dlciA9IG5ld1Bvd2VyOworICAgICAgdGFibGUtPnNpemUgPSBuZXdTaXplOworICAg
ICAgaSA9IGggJiBuZXdNYXNrOworICAgICAgc3RlcCA9IDA7CisgICAgICB3aGlsZSAodGFibGUt
PnZbaV0pIHsKKyAgICAgICAgaWYgKCFzdGVwKQorICAgICAgICAgIHN0ZXAgPSBQUk9CRV9TVEVQ
KGgsIG5ld01hc2ssIG5ld1Bvd2VyKTsKKyAgICAgICAgaSA8IHN0ZXAgPyAoaSArPSBuZXdTaXpl
IC0gc3RlcCkgOiAoaSAtPSBzdGVwKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgdGFibGUtPnZb
aV0gPSAoTkFNRUQgKil0YWJsZS0+bWVtLT5tYWxsb2NfZmNuKGNyZWF0ZVNpemUpOworICBpZiAo
IXRhYmxlLT52W2ldKQorICAgIHJldHVybiBOVUxMOworICBtZW1zZXQodGFibGUtPnZbaV0sIDAs
IGNyZWF0ZVNpemUpOworICB0YWJsZS0+dltpXS0+bmFtZSA9IG5hbWU7CisgICh0YWJsZS0+dXNl
ZCkrKzsKKyAgcmV0dXJuIHRhYmxlLT52W2ldOworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAor
aGFzaFRhYmxlQ2xlYXIoSEFTSF9UQUJMRSAqdGFibGUpCit7CisgIHNpemVfdCBpOworICBmb3Ig
KGkgPSAwOyBpIDwgdGFibGUtPnNpemU7IGkrKykgeworICAgIHRhYmxlLT5tZW0tPmZyZWVfZmNu
KHRhYmxlLT52W2ldKTsKKyAgICB0YWJsZS0+dltpXSA9IE5VTEw7CisgIH0KKyAgdGFibGUtPnVz
ZWQgPSAwOworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAoraGFzaFRhYmxlRGVzdHJveShIQVNI
X1RBQkxFICp0YWJsZSkKK3sKKyAgc2l6ZV90IGk7CisgIGZvciAoaSA9IDA7IGkgPCB0YWJsZS0+
c2l6ZTsgaSsrKQorICAgIHRhYmxlLT5tZW0tPmZyZWVfZmNuKHRhYmxlLT52W2ldKTsKKyAgdGFi
bGUtPm1lbS0+ZnJlZV9mY24odGFibGUtPnYpOworfQorCitzdGF0aWMgdm9pZCBGQVNUQ0FMTAor
aGFzaFRhYmxlSW5pdChIQVNIX1RBQkxFICpwLCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1
aXRlICptcykKK3sKKyAgcC0+cG93ZXIgPSAwOworICBwLT5zaXplID0gMDsKKyAgcC0+dXNlZCA9
IDA7CisgIHAtPnYgPSBOVUxMOworICBwLT5tZW0gPSBtczsKK30KKworc3RhdGljIHZvaWQgRkFT
VENBTEwKK2hhc2hUYWJsZUl0ZXJJbml0KEhBU0hfVEFCTEVfSVRFUiAqaXRlciwgY29uc3QgSEFT
SF9UQUJMRSAqdGFibGUpCit7CisgIGl0ZXItPnAgPSB0YWJsZS0+djsKKyAgaXRlci0+ZW5kID0g
aXRlci0+cCArIHRhYmxlLT5zaXplOworfQorCitzdGF0aWMgTkFNRUQgKiBGQVNUQ0FMTAoraGFz
aFRhYmxlSXRlck5leHQoSEFTSF9UQUJMRV9JVEVSICppdGVyKQoreworICB3aGlsZSAoaXRlci0+
cCAhPSBpdGVyLT5lbmQpIHsKKyAgICBOQU1FRCAqdGVtID0gKihpdGVyLT5wKSsrOworICAgIGlm
ICh0ZW0pCisgICAgICByZXR1cm4gdGVtOworICB9CisgIHJldHVybiBOVUxMOworfQorCitzdGF0
aWMgdm9pZCBGQVNUQ0FMTAorcG9vbEluaXQoU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9N
ZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKQoreworICBwb29sLT5ibG9ja3MgPSBOVUxMOworICBw
b29sLT5mcmVlQmxvY2tzID0gTlVMTDsKKyAgcG9vbC0+c3RhcnQgPSBOVUxMOworICBwb29sLT5w
dHIgPSBOVUxMOworICBwb29sLT5lbmQgPSBOVUxMOworICBwb29sLT5tZW0gPSBtczsKK30KKwor
c3RhdGljIHZvaWQgRkFTVENBTEwKK3Bvb2xDbGVhcihTVFJJTkdfUE9PTCAqcG9vbCkKK3sKKyAg
aWYgKCFwb29sLT5mcmVlQmxvY2tzKQorICAgIHBvb2wtPmZyZWVCbG9ja3MgPSBwb29sLT5ibG9j
a3M7CisgIGVsc2UgeworICAgIEJMT0NLICpwID0gcG9vbC0+YmxvY2tzOworICAgIHdoaWxlIChw
KSB7CisgICAgICBCTE9DSyAqdGVtID0gcC0+bmV4dDsKKyAgICAgIHAtPm5leHQgPSBwb29sLT5m
cmVlQmxvY2tzOworICAgICAgcG9vbC0+ZnJlZUJsb2NrcyA9IHA7CisgICAgICBwID0gdGVtOwor
ICAgIH0KKyAgfQorICBwb29sLT5ibG9ja3MgPSBOVUxMOworICBwb29sLT5zdGFydCA9IE5VTEw7
CisgIHBvb2wtPnB0ciA9IE5VTEw7CisgIHBvb2wtPmVuZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2
b2lkIEZBU1RDQUxMCitwb29sRGVzdHJveShTVFJJTkdfUE9PTCAqcG9vbCkKK3sKKyAgQkxPQ0sg
KnAgPSBwb29sLT5ibG9ja3M7CisgIHdoaWxlIChwKSB7CisgICAgQkxPQ0sgKnRlbSA9IHAtPm5l
eHQ7CisgICAgcG9vbC0+bWVtLT5mcmVlX2ZjbihwKTsKKyAgICBwID0gdGVtOworICB9CisgIHAg
PSBwb29sLT5mcmVlQmxvY2tzOworICB3aGlsZSAocCkgeworICAgIEJMT0NLICp0ZW0gPSBwLT5u
ZXh0OworICAgIHBvb2wtPm1lbS0+ZnJlZV9mY24ocCk7CisgICAgcCA9IHRlbTsKKyAgfQorfQor
CitzdGF0aWMgWE1MX0NoYXIgKgorcG9vbEFwcGVuZChTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3Qg
RU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICpl
bmQpCit7CisgIGlmICghcG9vbC0+cHRyICYmICFwb29sR3Jvdyhwb29sKSkKKyAgICByZXR1cm4g
TlVMTDsKKyAgZm9yICg7OykgeworICAgIFhtbENvbnZlcnQoZW5jLCAmcHRyLCBlbmQsIChJQ0hB
UiAqKikmKHBvb2wtPnB0ciksIChJQ0hBUiAqKXBvb2wtPmVuZCk7CisgICAgaWYgKHB0ciA9PSBl
bmQpCisgICAgICBicmVhazsKKyAgICBpZiAoIXBvb2xHcm93KHBvb2wpKQorICAgICAgcmV0dXJu
IE5VTEw7CisgIH0KKyAgcmV0dXJuIHBvb2wtPnN0YXJ0OworfQorCitzdGF0aWMgY29uc3QgWE1M
X0NoYXIgKiBGQVNUQ0FMTAorcG9vbENvcHlTdHJpbmcoU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0
IFhNTF9DaGFyICpzKQoreworICBkbyB7CisgICAgaWYgKCFwb29sQXBwZW5kQ2hhcihwb29sLCAq
cykpCisgICAgICByZXR1cm4gTlVMTDsKKyAgfSB3aGlsZSAoKnMrKyk7CisgIHMgPSBwb29sLT5z
dGFydDsKKyAgcG9vbEZpbmlzaChwb29sKTsKKyAgcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBjb25z
dCBYTUxfQ2hhciAqCitwb29sQ29weVN0cmluZ04oU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhN
TF9DaGFyICpzLCBpbnQgbikKK3sKKyAgaWYgKCFwb29sLT5wdHIgJiYgIXBvb2xHcm93KHBvb2wp
KQorICAgIHJldHVybiBOVUxMOworICBmb3IgKDsgbiA+IDA7IC0tbiwgcysrKSB7CisgICAgaWYg
KCFwb29sQXBwZW5kQ2hhcihwb29sLCAqcykpCisgICAgICByZXR1cm4gTlVMTDsKKyAgfQorICBz
ID0gcG9vbC0+c3RhcnQ7CisgIHBvb2xGaW5pc2gocG9vbCk7CisgIHJldHVybiBzOworfQorCitz
dGF0aWMgY29uc3QgWE1MX0NoYXIgKiBGQVNUQ0FMTAorcG9vbEFwcGVuZFN0cmluZyhTVFJJTkdf
UE9PTCAqcG9vbCwgY29uc3QgWE1MX0NoYXIgKnMpCit7CisgIHdoaWxlICgqcykgeworICAgIGlm
ICghcG9vbEFwcGVuZENoYXIocG9vbCwgKnMpKQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgcysr
OworICB9CisgIHJldHVybiBwb29sLT5zdGFydDsKK30KKworc3RhdGljIFhNTF9DaGFyICoKK3Bv
b2xTdG9yZVN0cmluZyhTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKyAgaWYg
KCFwb29sQXBwZW5kKHBvb2wsIGVuYywgcHRyLCBlbmQpKQorICAgIHJldHVybiBOVUxMOworICBp
ZiAocG9vbC0+cHRyID09IHBvb2wtPmVuZCAmJiAhcG9vbEdyb3cocG9vbCkpCisgICAgcmV0dXJu
IE5VTEw7CisgICoocG9vbC0+cHRyKSsrID0gMDsKKyAgcmV0dXJuIHBvb2wtPnN0YXJ0OworfQor
CitzdGF0aWMgWE1MX0Jvb2wgRkFTVENBTEwKK3Bvb2xHcm93KFNUUklOR19QT09MICpwb29sKQor
eworICBpZiAocG9vbC0+ZnJlZUJsb2NrcykgeworICAgIGlmIChwb29sLT5zdGFydCA9PSAwKSB7
CisgICAgICBwb29sLT5ibG9ja3MgPSBwb29sLT5mcmVlQmxvY2tzOworICAgICAgcG9vbC0+ZnJl
ZUJsb2NrcyA9IHBvb2wtPmZyZWVCbG9ja3MtPm5leHQ7CisgICAgICBwb29sLT5ibG9ja3MtPm5l
eHQgPSBOVUxMOworICAgICAgcG9vbC0+c3RhcnQgPSBwb29sLT5ibG9ja3MtPnM7CisgICAgICBw
b29sLT5lbmQgPSBwb29sLT5zdGFydCArIHBvb2wtPmJsb2Nrcy0+c2l6ZTsKKyAgICAgIHBvb2wt
PnB0ciA9IHBvb2wtPnN0YXJ0OworICAgICAgcmV0dXJuIFhNTF9UUlVFOworICAgIH0KKyAgICBp
ZiAocG9vbC0+ZW5kIC0gcG9vbC0+c3RhcnQgPCBwb29sLT5mcmVlQmxvY2tzLT5zaXplKSB7Cisg
ICAgICBCTE9DSyAqdGVtID0gcG9vbC0+ZnJlZUJsb2Nrcy0+bmV4dDsKKyAgICAgIHBvb2wtPmZy
ZWVCbG9ja3MtPm5leHQgPSBwb29sLT5ibG9ja3M7CisgICAgICBwb29sLT5ibG9ja3MgPSBwb29s
LT5mcmVlQmxvY2tzOworICAgICAgcG9vbC0+ZnJlZUJsb2NrcyA9IHRlbTsKKyAgICAgIG1lbWNw
eShwb29sLT5ibG9ja3MtPnMsIHBvb2wtPnN0YXJ0LAorICAgICAgICAgICAgIChwb29sLT5lbmQg
LSBwb29sLT5zdGFydCkgKiBzaXplb2YoWE1MX0NoYXIpKTsKKyAgICAgIHBvb2wtPnB0ciA9IHBv
b2wtPmJsb2Nrcy0+cyArIChwb29sLT5wdHIgLSBwb29sLT5zdGFydCk7CisgICAgICBwb29sLT5z
dGFydCA9IHBvb2wtPmJsb2Nrcy0+czsKKyAgICAgIHBvb2wtPmVuZCA9IHBvb2wtPnN0YXJ0ICsg
cG9vbC0+YmxvY2tzLT5zaXplOworICAgICAgcmV0dXJuIFhNTF9UUlVFOworICAgIH0KKyAgfQor
ICBpZiAocG9vbC0+YmxvY2tzICYmIHBvb2wtPnN0YXJ0ID09IHBvb2wtPmJsb2Nrcy0+cykgewor
ICAgIGludCBibG9ja1NpemUgPSAoaW50KShwb29sLT5lbmQgLSBwb29sLT5zdGFydCkqMjsKKyAg
ICBCTE9DSyAqdGVtcCA9IChCTE9DSyAqKQorICAgICAgcG9vbC0+bWVtLT5yZWFsbG9jX2Zjbihw
b29sLT5ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvZmZzZXRvZihCTE9D
SywgcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYmxvY2tTaXplICogc2l6ZW9m
KFhNTF9DaGFyKSkpOworICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICByZXR1cm4gWE1MX0ZB
TFNFOworICAgIHBvb2wtPmJsb2NrcyA9IHRlbXA7CisgICAgcG9vbC0+YmxvY2tzLT5zaXplID0g
YmxvY2tTaXplOworICAgIHBvb2wtPnB0ciA9IHBvb2wtPmJsb2Nrcy0+cyArIChwb29sLT5wdHIg
LSBwb29sLT5zdGFydCk7CisgICAgcG9vbC0+c3RhcnQgPSBwb29sLT5ibG9ja3MtPnM7CisgICAg
cG9vbC0+ZW5kID0gcG9vbC0+c3RhcnQgKyBibG9ja1NpemU7CisgIH0KKyAgZWxzZSB7CisgICAg
QkxPQ0sgKnRlbTsKKyAgICBpbnQgYmxvY2tTaXplID0gKGludCkocG9vbC0+ZW5kIC0gcG9vbC0+
c3RhcnQpOworICAgIGlmIChibG9ja1NpemUgPCBJTklUX0JMT0NLX1NJWkUpCisgICAgICBibG9j
a1NpemUgPSBJTklUX0JMT0NLX1NJWkU7CisgICAgZWxzZQorICAgICAgYmxvY2tTaXplICo9IDI7
CisgICAgdGVtID0gKEJMT0NLICopcG9vbC0+bWVtLT5tYWxsb2NfZmNuKG9mZnNldG9mKEJMT0NL
LCBzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYmxvY2tTaXpl
ICogc2l6ZW9mKFhNTF9DaGFyKSk7CisgICAgaWYgKCF0ZW0pCisgICAgICByZXR1cm4gWE1MX0ZB
TFNFOworICAgIHRlbS0+c2l6ZSA9IGJsb2NrU2l6ZTsKKyAgICB0ZW0tPm5leHQgPSBwb29sLT5i
bG9ja3M7CisgICAgcG9vbC0+YmxvY2tzID0gdGVtOworICAgIGlmIChwb29sLT5wdHIgIT0gcG9v
bC0+c3RhcnQpCisgICAgICBtZW1jcHkodGVtLT5zLCBwb29sLT5zdGFydCwKKyAgICAgICAgICAg
ICAocG9vbC0+cHRyIC0gcG9vbC0+c3RhcnQpICogc2l6ZW9mKFhNTF9DaGFyKSk7CisgICAgcG9v
bC0+cHRyID0gdGVtLT5zICsgKHBvb2wtPnB0ciAtIHBvb2wtPnN0YXJ0KTsKKyAgICBwb29sLT5z
dGFydCA9IHRlbS0+czsKKyAgICBwb29sLT5lbmQgPSB0ZW0tPnMgKyBibG9ja1NpemU7CisgIH0K
KyAgcmV0dXJuIFhNTF9UUlVFOworfQorCitzdGF0aWMgaW50IEZBU1RDQUxMCituZXh0U2NhZmZv
bGRQYXJ0KFhNTF9QYXJzZXIgcGFyc2VyKQoreworICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAg
Lyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KKyAgQ09OVEVOVF9TQ0FGRk9MRCAq
IG1lOworICBpbnQgbmV4dDsKKworICBpZiAoIWR0ZC0+c2NhZmZJbmRleCkgeworICAgIGR0ZC0+
c2NhZmZJbmRleCA9IChpbnQgKilNQUxMT0MoZ3JvdXBTaXplICogc2l6ZW9mKGludCkpOworICAg
IGlmICghZHRkLT5zY2FmZkluZGV4KQorICAgICAgcmV0dXJuIC0xOworICAgIGR0ZC0+c2NhZmZJ
bmRleFswXSA9IDA7CisgIH0KKworICBpZiAoZHRkLT5zY2FmZkNvdW50ID49IGR0ZC0+c2NhZmZT
aXplKSB7CisgICAgQ09OVEVOVF9TQ0FGRk9MRCAqdGVtcDsKKyAgICBpZiAoZHRkLT5zY2FmZm9s
ZCkgeworICAgICAgdGVtcCA9IChDT05URU5UX1NDQUZGT0xEICopCisgICAgICAgIFJFQUxMT0Mo
ZHRkLT5zY2FmZm9sZCwgZHRkLT5zY2FmZlNpemUgKiAyICogc2l6ZW9mKENPTlRFTlRfU0NBRkZP
TEQpKTsKKyAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAg
IGR0ZC0+c2NhZmZTaXplICo9IDI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdGVtcCA9IChD
T05URU5UX1NDQUZGT0xEICopTUFMTE9DKElOSVRfU0NBRkZPTERfRUxFTUVOVFMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihDT05URU5UX1NDQUZGT0xE
KSk7CisgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBk
dGQtPnNjYWZmU2l6ZSA9IElOSVRfU0NBRkZPTERfRUxFTUVOVFM7CisgICAgfQorICAgIGR0ZC0+
c2NhZmZvbGQgPSB0ZW1wOworICB9CisgIG5leHQgPSBkdGQtPnNjYWZmQ291bnQrKzsKKyAgbWUg
PSAmZHRkLT5zY2FmZm9sZFtuZXh0XTsKKyAgaWYgKGR0ZC0+c2NhZmZMZXZlbCkgeworICAgIENP
TlRFTlRfU0NBRkZPTEQgKnBhcmVudCA9ICZkdGQtPnNjYWZmb2xkW2R0ZC0+c2NhZmZJbmRleFtk
dGQtPnNjYWZmTGV2ZWwtMV1dOworICAgIGlmIChwYXJlbnQtPmxhc3RjaGlsZCkgeworICAgICAg
ZHRkLT5zY2FmZm9sZFtwYXJlbnQtPmxhc3RjaGlsZF0ubmV4dHNpYiA9IG5leHQ7CisgICAgfQor
ICAgIGlmICghcGFyZW50LT5jaGlsZGNudCkKKyAgICAgIHBhcmVudC0+Zmlyc3RjaGlsZCA9IG5l
eHQ7CisgICAgcGFyZW50LT5sYXN0Y2hpbGQgPSBuZXh0OworICAgIHBhcmVudC0+Y2hpbGRjbnQr
KzsKKyAgfQorICBtZS0+Zmlyc3RjaGlsZCA9IG1lLT5sYXN0Y2hpbGQgPSBtZS0+Y2hpbGRjbnQg
PSBtZS0+bmV4dHNpYiA9IDA7CisgIHJldHVybiBuZXh0OworfQorCitzdGF0aWMgdm9pZAorYnVp
bGRfbm9kZShYTUxfUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgaW50IHNyY19ub2RlLAorICAg
ICAgICAgICBYTUxfQ29udGVudCAqZGVzdCwKKyAgICAgICAgICAgWE1MX0NvbnRlbnQgKipjb250
cG9zLAorICAgICAgICAgICBYTUxfQ2hhciAqKnN0cnBvcykKK3sKKyAgRFREICogY29uc3QgZHRk
ID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCisgIGRlc3QtPnR5
cGUgPSBkdGQtPnNjYWZmb2xkW3NyY19ub2RlXS50eXBlOworICBkZXN0LT5xdWFudCA9IGR0ZC0+
c2NhZmZvbGRbc3JjX25vZGVdLnF1YW50OworICBpZiAoZGVzdC0+dHlwZSA9PSBYTUxfQ1RZUEVf
TkFNRSkgeworICAgIGNvbnN0IFhNTF9DaGFyICpzcmM7CisgICAgZGVzdC0+bmFtZSA9ICpzdHJw
b3M7CisgICAgc3JjID0gZHRkLT5zY2FmZm9sZFtzcmNfbm9kZV0ubmFtZTsKKyAgICBmb3IgKDs7
KSB7CisgICAgICAqKCpzdHJwb3MpKysgPSAqc3JjOworICAgICAgaWYgKCEqc3JjKQorICAgICAg
ICBicmVhazsKKyAgICAgIHNyYysrOworICAgIH0KKyAgICBkZXN0LT5udW1jaGlsZHJlbiA9IDA7
CisgICAgZGVzdC0+Y2hpbGRyZW4gPSBOVUxMOworICB9CisgIGVsc2UgeworICAgIHVuc2lnbmVk
IGludCBpOworICAgIGludCBjbjsKKyAgICBkZXN0LT5udW1jaGlsZHJlbiA9IGR0ZC0+c2NhZmZv
bGRbc3JjX25vZGVdLmNoaWxkY250OworICAgIGRlc3QtPmNoaWxkcmVuID0gKmNvbnRwb3M7Cisg
ICAgKmNvbnRwb3MgKz0gZGVzdC0+bnVtY2hpbGRyZW47CisgICAgZm9yIChpID0gMCwgY24gPSBk
dGQtPnNjYWZmb2xkW3NyY19ub2RlXS5maXJzdGNoaWxkOworICAgICAgICAgaSA8IGRlc3QtPm51
bWNoaWxkcmVuOworICAgICAgICAgaSsrLCBjbiA9IGR0ZC0+c2NhZmZvbGRbY25dLm5leHRzaWIp
IHsKKyAgICAgIGJ1aWxkX25vZGUocGFyc2VyLCBjbiwgJihkZXN0LT5jaGlsZHJlbltpXSksIGNv
bnRwb3MsIHN0cnBvcyk7CisgICAgfQorICAgIGRlc3QtPm5hbWUgPSBOVUxMOworICB9Cit9CisK
K3N0YXRpYyBYTUxfQ29udGVudCAqCitidWlsZF9tb2RlbCAoWE1MX1BhcnNlciBwYXJzZXIpCit7
CisgIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVj
dGlvbiAqLworICBYTUxfQ29udGVudCAqcmV0OworICBYTUxfQ29udGVudCAqY3BvczsKKyAgWE1M
X0NoYXIgKiBzdHI7CisgIGludCBhbGxvY3NpemUgPSAoZHRkLT5zY2FmZkNvdW50ICogc2l6ZW9m
KFhNTF9Db250ZW50KQorICAgICAgICAgICAgICAgICAgICsgKGR0ZC0+Y29udGVudFN0cmluZ0xl
biAqIHNpemVvZihYTUxfQ2hhcikpKTsKKworICByZXQgPSAoWE1MX0NvbnRlbnQgKilNQUxMT0Mo
YWxsb2NzaXplKTsKKyAgaWYgKCFyZXQpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgc3RyID0gIChY
TUxfQ2hhciAqKSAoJnJldFtkdGQtPnNjYWZmQ291bnRdKTsKKyAgY3BvcyA9ICZyZXRbMV07CisK
KyAgYnVpbGRfbm9kZShwYXJzZXIsIDAsIHJldCwgJmNwb3MsICZzdHIpOworICByZXR1cm4gcmV0
OworfQorCitzdGF0aWMgRUxFTUVOVF9UWVBFICoKK2dldEVsZW1lbnRUeXBlKFhNTF9QYXJzZXIg
cGFyc2VyLAorICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCkKK3sK
KyAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0
aW9uICovCisgIGNvbnN0IFhNTF9DaGFyICpuYW1lID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBv
b2wsIGVuYywgcHRyLCBlbmQpOworICBFTEVNRU5UX1RZUEUgKnJldDsKKworICBpZiAoIW5hbWUp
CisgICAgcmV0dXJuIE5VTEw7CisgIHJldCA9IChFTEVNRU5UX1RZUEUgKikgbG9va3VwKHBhcnNl
ciwgJmR0ZC0+ZWxlbWVudFR5cGVzLCBuYW1lLCBzaXplb2YoRUxFTUVOVF9UWVBFKSk7CisgIGlm
ICghcmV0KQorICAgIHJldHVybiBOVUxMOworICBpZiAocmV0LT5uYW1lICE9IG5hbWUpCisgICAg
cG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7CisgIGVsc2UgeworICAgIHBvb2xGaW5pc2goJmR0ZC0+
cG9vbCk7CisgICAgaWYgKCFzZXRFbGVtZW50VHlwZVByZWZpeChwYXJzZXIsIHJldCkpCisgICAg
ICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIv
eG1scm9sZS5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9leHBhdC9maWxlcy9saWIveG1scm9sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0NzcyZTIxZGQzMzdiMDBl
M2ZjNTNiMTYyNjcyMTY3MmFiMDgxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWxyb2xl
LmMKQEAgLTAsMCArMSwxMzM2IEBACisvKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgVGhhaSBP
cGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCisgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBm
b3IgY29weWluZyBwZXJtaXNzaW9uLgorKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZk
ZWYgQ09NUElMRURfRlJPTV9EU1AKKyNpbmNsdWRlICJ3aW5jb25maWcuaCIKKyNlbGlmIGRlZmlu
ZWQoTUFDT1NfQ0xBU1NJQykKKyNpbmNsdWRlICJtYWNjb25maWcuaCIKKyNlbGlmIGRlZmluZWQo
X19hbWlnYW9zX18pCisjaW5jbHVkZSAiYW1pZ2Fjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19X
QVRDT01DX18pCisjaW5jbHVkZSAid2F0Y29tY29uZmlnLmgiCisjZWxzZQorI2lmZGVmIEhBVkVf
RVhQQVRfQ09ORklHX0gKKyNpbmNsdWRlIDxleHBhdF9jb25maWcuaD4KKyNlbmRpZgorI2VuZGlm
IC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KKworI2luY2x1ZGUgImV4cGF0X2V4dGVybmFs
LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ4bWxyb2xlLmgiCisjaW5jbHVk
ZSAiYXNjaWkuaCIKKworLyogRG9lc24ndCBjaGVjazoKKworIHRoYXQgLHwgYXJlIG5vdCBtaXhl
ZCBpbiBhIG1vZGVsIGdyb3VwCisgY29udGVudCBvZiBsaXRlcmFscworCisqLworCitzdGF0aWMg
Y29uc3QgY2hhciBLV19BTllbXSA9IHsKKyAgICBBU0NJSV9BLCBBU0NJSV9OLCBBU0NJSV9ZLCAn
XDAnIH07CitzdGF0aWMgY29uc3QgY2hhciBLV19BVFRMSVNUW10gPSB7CisgICAgQVNDSUlfQSwg
QVNDSUlfVCwgQVNDSUlfVCwgQVNDSUlfTCwgQVNDSUlfSSwgQVNDSUlfUywgQVNDSUlfVCwgJ1ww
JyB9Oworc3RhdGljIGNvbnN0IGNoYXIgS1dfQ0RBVEFbXSA9IHsKKyAgICBBU0NJSV9DLCBBU0NJ
SV9ELCBBU0NJSV9BLCBBU0NJSV9ULCBBU0NJSV9BLCAnXDAnIH07CitzdGF0aWMgY29uc3QgY2hh
ciBLV19ET0NUWVBFW10gPSB7CisgICAgQVNDSUlfRCwgQVNDSUlfTywgQVNDSUlfQywgQVNDSUlf
VCwgQVNDSUlfWSwgQVNDSUlfUCwgQVNDSUlfRSwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IGNoYXIg
S1dfRUxFTUVOVFtdID0geworICAgIEFTQ0lJX0UsIEFTQ0lJX0wsIEFTQ0lJX0UsIEFTQ0lJX00s
IEFTQ0lJX0UsIEFTQ0lJX04sIEFTQ0lJX1QsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIEtX
X0VNUFRZW10gPSB7CisgICAgQVNDSUlfRSwgQVNDSUlfTSwgQVNDSUlfUCwgQVNDSUlfVCwgQVND
SUlfWSwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IGNoYXIgS1dfRU5USVRJRVNbXSA9IHsKKyAgICBB
U0NJSV9FLCBBU0NJSV9OLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJ
SV9FLCBBU0NJSV9TLAorICAgICdcMCcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIEtXX0VOVElUWVtd
ID0geworICAgIEFTQ0lJX0UsIEFTQ0lJX04sIEFTQ0lJX1QsIEFTQ0lJX0ksIEFTQ0lJX1QsIEFT
Q0lJX1ksICdcMCcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIEtXX0ZJWEVEW10gPSB7CisgICAgQVND
SUlfRiwgQVNDSUlfSSwgQVNDSUlfWCwgQVNDSUlfRSwgQVNDSUlfRCwgJ1wwJyB9Oworc3RhdGlj
IGNvbnN0IGNoYXIgS1dfSURbXSA9IHsKKyAgICBBU0NJSV9JLCBBU0NJSV9ELCAnXDAnIH07Citz
dGF0aWMgY29uc3QgY2hhciBLV19JRFJFRltdID0geworICAgIEFTQ0lJX0ksIEFTQ0lJX0QsIEFT
Q0lJX1IsIEFTQ0lJX0UsIEFTQ0lJX0YsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIEtXX0lE
UkVGU1tdID0geworICAgIEFTQ0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFTQ0lJX0UsIEFTQ0lJ
X0YsIEFTQ0lJX1MsICdcMCcgfTsKKyNpZmRlZiBYTUxfRFRECitzdGF0aWMgY29uc3QgY2hhciBL
V19JR05PUkVbXSA9IHsKKyAgICBBU0NJSV9JLCBBU0NJSV9HLCBBU0NJSV9OLCBBU0NJSV9PLCBB
U0NJSV9SLCBBU0NJSV9FLCAnXDAnIH07CisjZW5kaWYKK3N0YXRpYyBjb25zdCBjaGFyIEtXX0lN
UExJRURbXSA9IHsKKyAgICBBU0NJSV9JLCBBU0NJSV9NLCBBU0NJSV9QLCBBU0NJSV9MLCBBU0NJ
SV9JLCBBU0NJSV9FLCBBU0NJSV9ELCAnXDAnIH07CisjaWZkZWYgWE1MX0RURAorc3RhdGljIGNv
bnN0IGNoYXIgS1dfSU5DTFVERVtdID0geworICAgIEFTQ0lJX0ksIEFTQ0lJX04sIEFTQ0lJX0Ms
IEFTQ0lJX0wsIEFTQ0lJX1UsIEFTQ0lJX0QsIEFTQ0lJX0UsICdcMCcgfTsKKyNlbmRpZgorc3Rh
dGljIGNvbnN0IGNoYXIgS1dfTkRBVEFbXSA9IHsKKyAgICBBU0NJSV9OLCBBU0NJSV9ELCBBU0NJ
SV9BLCBBU0NJSV9ULCBBU0NJSV9BLCAnXDAnIH07CitzdGF0aWMgY29uc3QgY2hhciBLV19OTVRP
S0VOW10gPSB7CisgICAgQVNDSUlfTiwgQVNDSUlfTSwgQVNDSUlfVCwgQVNDSUlfTywgQVNDSUlf
SywgQVNDSUlfRSwgQVNDSUlfTiwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IGNoYXIgS1dfTk1UT0tF
TlNbXSA9IHsKKyAgICBBU0NJSV9OLCBBU0NJSV9NLCBBU0NJSV9ULCBBU0NJSV9PLCBBU0NJSV9L
LCBBU0NJSV9FLCBBU0NJSV9OLCBBU0NJSV9TLAorICAgICdcMCcgfTsKK3N0YXRpYyBjb25zdCBj
aGFyIEtXX05PVEFUSU9OW10gPQorICAgIHsgQVNDSUlfTiwgQVNDSUlfTywgQVNDSUlfVCwgQVND
SUlfQSwgQVNDSUlfVCwgQVNDSUlfSSwgQVNDSUlfTywgQVNDSUlfTiwKKyAgICAgICdcMCcgfTsK
K3N0YXRpYyBjb25zdCBjaGFyIEtXX1BDREFUQVtdID0geworICAgIEFTQ0lJX1AsIEFTQ0lJX0Ms
IEFTQ0lJX0QsIEFTQ0lJX0EsIEFTQ0lJX1QsIEFTQ0lJX0EsICdcMCcgfTsKK3N0YXRpYyBjb25z
dCBjaGFyIEtXX1BVQkxJQ1tdID0geworICAgIEFTQ0lJX1AsIEFTQ0lJX1UsIEFTQ0lJX0IsIEFT
Q0lJX0wsIEFTQ0lJX0ksIEFTQ0lJX0MsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIEtXX1JF
UVVJUkVEW10gPSB7CisgICAgQVNDSUlfUiwgQVNDSUlfRSwgQVNDSUlfUSwgQVNDSUlfVSwgQVND
SUlfSSwgQVNDSUlfUiwgQVNDSUlfRSwgQVNDSUlfRCwKKyAgICAnXDAnIH07CitzdGF0aWMgY29u
c3QgY2hhciBLV19TWVNURU1bXSA9IHsKKyAgICBBU0NJSV9TLCBBU0NJSV9ZLCBBU0NJSV9TLCBB
U0NJSV9ULCBBU0NJSV9FLCBBU0NJSV9NLCAnXDAnIH07CisKKyNpZm5kZWYgTUlOX0JZVEVTX1BF
Ul9DSEFSCisjZGVmaW5lIE1JTl9CWVRFU19QRVJfQ0hBUihlbmMpICgoZW5jKS0+bWluQnl0ZXNQ
ZXJDaGFyKQorI2VuZGlmCisKKyNpZmRlZiBYTUxfRFRECisjZGVmaW5lIHNldFRvcExldmVsKHN0
YXRlKSBcCisgICgoc3RhdGUpLT5oYW5kbGVyID0gKChzdGF0ZSktPmRvY3VtZW50RW50aXR5IFwK
KyAgICAgICAgICAgICAgICAgICAgICAgPyBpbnRlcm5hbFN1YnNldCBcCisgICAgICAgICAgICAg
ICAgICAgICAgIDogZXh0ZXJuYWxTdWJzZXQxKSkKKyNlbHNlIC8qIG5vdCBYTUxfRFREICovCisj
ZGVmaW5lIHNldFRvcExldmVsKHN0YXRlKSAoKHN0YXRlKS0+aGFuZGxlciA9IGludGVybmFsU3Vi
c2V0KQorI2VuZGlmIC8qIG5vdCBYTUxfRFREICovCisKK3R5cGVkZWYgaW50IFBUUkNBTEwgUFJP
TE9HX0hBTkRMRVIoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHRvaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVO
Q09ESU5HICplbmMpOworCitzdGF0aWMgUFJPTE9HX0hBTkRMRVIKKyAgcHJvbG9nMCwgcHJvbG9n
MSwgcHJvbG9nMiwKKyAgZG9jdHlwZTAsIGRvY3R5cGUxLCBkb2N0eXBlMiwgZG9jdHlwZTMsIGRv
Y3R5cGU0LCBkb2N0eXBlNSwKKyAgaW50ZXJuYWxTdWJzZXQsCisgIGVudGl0eTAsIGVudGl0eTEs
IGVudGl0eTIsIGVudGl0eTMsIGVudGl0eTQsIGVudGl0eTUsIGVudGl0eTYsCisgIGVudGl0eTcs
IGVudGl0eTgsIGVudGl0eTksIGVudGl0eTEwLAorICBub3RhdGlvbjAsIG5vdGF0aW9uMSwgbm90
YXRpb24yLCBub3RhdGlvbjMsIG5vdGF0aW9uNCwKKyAgYXR0bGlzdDAsIGF0dGxpc3QxLCBhdHRs
aXN0MiwgYXR0bGlzdDMsIGF0dGxpc3Q0LCBhdHRsaXN0NSwgYXR0bGlzdDYsCisgIGF0dGxpc3Q3
LCBhdHRsaXN0OCwgYXR0bGlzdDksCisgIGVsZW1lbnQwLCBlbGVtZW50MSwgZWxlbWVudDIsIGVs
ZW1lbnQzLCBlbGVtZW50NCwgZWxlbWVudDUsIGVsZW1lbnQ2LAorICBlbGVtZW50NywKKyNpZmRl
ZiBYTUxfRFRECisgIGV4dGVybmFsU3Vic2V0MCwgZXh0ZXJuYWxTdWJzZXQxLAorICBjb25kU2Vj
dDAsIGNvbmRTZWN0MSwgY29uZFNlY3QyLAorI2VuZGlmIC8qIFhNTF9EVEQgKi8KKyAgZGVjbENs
b3NlLAorICBlcnJvcjsKKworc3RhdGljIGludCBGQVNUQ0FMTCBjb21tb24oUFJPTE9HX1NUQVRF
ICpzdGF0ZSwgaW50IHRvayk7CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorcHJvbG9nMChQUk9MT0df
U1RBVEUgKnN0YXRlLAorICAgICAgICBpbnQgdG9rLAorICAgICAgICBjb25zdCBjaGFyICpwdHIs
CisgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykK
K3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgorICAgIHN0YXRl
LT5oYW5kbGVyID0gcHJvbG9nMTsKKyAgICByZXR1cm4gWE1MX1JPTEVfTk9ORTsKKyAgY2FzZSBY
TUxfVE9LX1hNTF9ERUNMOgorICAgIHN0YXRlLT5oYW5kbGVyID0gcHJvbG9nMTsKKyAgICByZXR1
cm4gWE1MX1JPTEVfWE1MX0RFQ0w7CisgIGNhc2UgWE1MX1RPS19QSToKKyAgICBzdGF0ZS0+aGFu
ZGxlciA9IHByb2xvZzE7CisgICAgcmV0dXJuIFhNTF9ST0xFX1BJOworICBjYXNlIFhNTF9UT0tf
Q09NTUVOVDoKKyAgICBzdGF0ZS0+aGFuZGxlciA9IHByb2xvZzE7CisgICAgcmV0dXJuIFhNTF9S
T0xFX0NPTU1FTlQ7CisgIGNhc2UgWE1MX1RPS19CT006CisgICAgcmV0dXJuIFhNTF9ST0xFX05P
TkU7CisgIGNhc2UgWE1MX1RPS19ERUNMX09QRU46CisgICAgaWYgKCFYbWxOYW1lTWF0Y2hlc0Fz
Y2lpKGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgMiAqIE1JTl9CWVRF
U19QRVJfQ0hBUihlbmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEtXX0RPQ1RZUEUpKQorICAgICAgYnJlYWs7CisgICAg
c3RhdGUtPmhhbmRsZXIgPSBkb2N0eXBlMDsKKyAgICByZXR1cm4gWE1MX1JPTEVfRE9DVFlQRV9O
T05FOworICBjYXNlIFhNTF9UT0tfSU5TVEFOQ0VfU1RBUlQ6CisgICAgc3RhdGUtPmhhbmRsZXIg
PSBlcnJvcjsKKyAgICByZXR1cm4gWE1MX1JPTEVfSU5TVEFOQ0VfU1RBUlQ7CisgIH0KKyAgcmV0
dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitwcm9sb2cx
KFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgIGludCB0b2ssCisgICAgICAgIGNvbnN0IGNo
YXIgKnB0ciwKKyAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICBjb25zdCBFTkNPRElO
RyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6Cisg
ICAgcmV0dXJuIFhNTF9ST0xFX05PTkU7CisgIGNhc2UgWE1MX1RPS19QSToKKyAgICByZXR1cm4g
WE1MX1JPTEVfUEk7CisgIGNhc2UgWE1MX1RPS19DT01NRU5UOgorICAgIHJldHVybiBYTUxfUk9M
RV9DT01NRU5UOworICBjYXNlIFhNTF9UT0tfQk9NOgorICAgIHJldHVybiBYTUxfUk9MRV9OT05F
OworICBjYXNlIFhNTF9UT0tfREVDTF9PUEVOOgorICAgIGlmICghWG1sTmFtZU1hdGNoZXNBc2Np
aShlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArIDIgKiBNSU5fQllURVNf
UEVSX0NIQVIoZW5jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBLV19ET0NUWVBFKSkKKyAgICAgIGJyZWFrOworICAgIHN0
YXRlLT5oYW5kbGVyID0gZG9jdHlwZTA7CisgICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfTk9O
RTsKKyAgY2FzZSBYTUxfVE9LX0lOU1RBTkNFX1NUQVJUOgorICAgIHN0YXRlLT5oYW5kbGVyID0g
ZXJyb3I7CisgICAgcmV0dXJuIFhNTF9ST0xFX0lOU1RBTkNFX1NUQVJUOworICB9CisgIHJldHVy
biBjb21tb24oc3RhdGUsIHRvayk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorcHJvbG9nMihQ
Uk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICBpbnQgdG9rLAorICAgICAgICBjb25zdCBjaGFy
ICpwdHIsCisgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgY29uc3QgRU5DT0RJTkcg
KmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgorICAg
IHJldHVybiBYTUxfUk9MRV9OT05FOworICBjYXNlIFhNTF9UT0tfUEk6CisgICAgcmV0dXJuIFhN
TF9ST0xFX1BJOworICBjYXNlIFhNTF9UT0tfQ09NTUVOVDoKKyAgICByZXR1cm4gWE1MX1JPTEVf
Q09NTUVOVDsKKyAgY2FzZSBYTUxfVE9LX0lOU1RBTkNFX1NUQVJUOgorICAgIHN0YXRlLT5oYW5k
bGVyID0gZXJyb3I7CisgICAgcmV0dXJuIFhNTF9ST0xFX0lOU1RBTkNFX1NUQVJUOworICB9Cisg
IHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorZG9j
dHlwZTAoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgIGludCB0b2ssCisgICAgICAgICBj
b25zdCBjaGFyICpwdHIsCisgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICBjb25z
dCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tfUFJP
TE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfTk9ORTsKKyAgY2FzZSBYTUxfVE9L
X05BTUU6CisgIGNhc2UgWE1MX1RPS19QUkVGSVhFRF9OQU1FOgorICAgIHN0YXRlLT5oYW5kbGVy
ID0gZG9jdHlwZTE7CisgICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfTkFNRTsKKyAgfQorICBy
ZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2RvY3R5
cGUxKFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICBpbnQgdG9rLAorICAgICAgICAgY29u
c3QgY2hhciAqcHRyLAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgY29uc3Qg
RU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xP
R19TOgorICAgIHJldHVybiBYTUxfUk9MRV9ET0NUWVBFX05PTkU7CisgIGNhc2UgWE1MX1RPS19P
UEVOX0JSQUNLRVQ6CisgICAgc3RhdGUtPmhhbmRsZXIgPSBpbnRlcm5hbFN1YnNldDsKKyAgICBy
ZXR1cm4gWE1MX1JPTEVfRE9DVFlQRV9JTlRFUk5BTF9TVUJTRVQ7CisgIGNhc2UgWE1MX1RPS19E
RUNMX0NMT1NFOgorICAgIHN0YXRlLT5oYW5kbGVyID0gcHJvbG9nMjsKKyAgICByZXR1cm4gWE1M
X1JPTEVfRE9DVFlQRV9DTE9TRTsKKyAgY2FzZSBYTUxfVE9LX05BTUU6CisgICAgaWYgKFhtbE5h
bWVNYXRjaGVzQXNjaWkoZW5jLCBwdHIsIGVuZCwgS1dfU1lTVEVNKSkgeworICAgICAgc3RhdGUt
PmhhbmRsZXIgPSBkb2N0eXBlMzsKKyAgICAgIHJldHVybiBYTUxfUk9MRV9ET0NUWVBFX05PTkU7
CisgICAgfQorICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQsIEtXX1BV
QkxJQykpIHsKKyAgICAgIHN0YXRlLT5oYW5kbGVyID0gZG9jdHlwZTI7CisgICAgICByZXR1cm4g
WE1MX1JPTEVfRE9DVFlQRV9OT05FOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICByZXR1cm4g
Y29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2RvY3R5cGUyKFBS
T0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICBpbnQgdG9rLAorICAgICAgICAgY29uc3QgY2hh
ciAqcHRyLAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgY29uc3QgRU5DT0RJ
TkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgor
ICAgIHJldHVybiBYTUxfUk9MRV9ET0NUWVBFX05PTkU7CisgIGNhc2UgWE1MX1RPS19MSVRFUkFM
OgorICAgIHN0YXRlLT5oYW5kbGVyID0gZG9jdHlwZTM7CisgICAgcmV0dXJuIFhNTF9ST0xFX0RP
Q1RZUEVfUFVCTElDX0lEOworICB9CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Cit9CisK
K3N0YXRpYyBpbnQgUFRSQ0FMTAorZG9jdHlwZTMoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAg
ICAgIGludCB0b2ssCisgICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICBjb25zdCBj
aGFyICplbmQsCisgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRv
aykgeworICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZ
UEVfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX0xJVEVSQUw6CisgICAgc3RhdGUtPmhhbmRsZXIgPSBk
b2N0eXBlNDsKKyAgICByZXR1cm4gWE1MX1JPTEVfRE9DVFlQRV9TWVNURU1fSUQ7CisgIH0KKyAg
cmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitkb2N0
eXBlNChQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgaW50IHRvaywKKyAgICAgICAgIGNv
bnN0IGNoYXIgKnB0ciwKKyAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgIGNvbnN0
IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9M
T0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfRE9DVFlQRV9OT05FOworICBjYXNlIFhNTF9UT0tf
T1BFTl9CUkFDS0VUOgorICAgIHN0YXRlLT5oYW5kbGVyID0gaW50ZXJuYWxTdWJzZXQ7CisgICAg
cmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfSU5URVJOQUxfU1VCU0VUOworICBjYXNlIFhNTF9UT0tf
REVDTF9DTE9TRToKKyAgICBzdGF0ZS0+aGFuZGxlciA9IHByb2xvZzI7CisgICAgcmV0dXJuIFhN
TF9ST0xFX0RPQ1RZUEVfQ0xPU0U7CisgIH0KKyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsK
K30KKworc3RhdGljIGludCBQVFJDQUxMCitkb2N0eXBlNShQUk9MT0dfU1RBVEUgKnN0YXRlLAor
ICAgICAgICAgaW50IHRvaywKKyAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgIGNv
bnN0IGNoYXIgKmVuZCwKKyAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRj
aCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVf
RE9DVFlQRV9OT05FOworICBjYXNlIFhNTF9UT0tfREVDTF9DTE9TRToKKyAgICBzdGF0ZS0+aGFu
ZGxlciA9IHByb2xvZzI7CisgICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfQ0xPU0U7CisgIH0K
KyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitp
bnRlcm5hbFN1YnNldChQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgICAgICAgaW50IHRv
aywKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3
aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JP
TEVfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX0RFQ0xfT1BFTjoKKyAgICBpZiAoWG1sTmFtZU1hdGNo
ZXNBc2NpaShlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgMiAqIE1JTl9C
WVRFU19QRVJfQ0hBUihlbmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBLV19FTlRJVFkpKSB7CisgICAgICBzdGF0ZS0+aGFu
ZGxlciA9IGVudGl0eTA7CisgICAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7CisgICAg
fQorICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdHIgKyAyICogTUlOX0JZVEVTX1BFUl9DSEFSKGVuYyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtXX0FUVExJ
U1QpKSB7CisgICAgICBzdGF0ZS0+aGFuZGxlciA9IGF0dGxpc3QwOworICAgICAgcmV0dXJuIFhN
TF9ST0xFX0FUVExJU1RfTk9ORTsKKyAgICB9CisgICAgaWYgKFhtbE5hbWVNYXRjaGVzQXNjaWko
ZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArIDIgKiBNSU5fQllURVNfUEVS
X0NIQVIoZW5jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgS1dfRUxFTUVOVCkpIHsKKyAgICAgIHN0YXRlLT5oYW5kbGVyID0g
ZWxlbWVudDA7CisgICAgICByZXR1cm4gWE1MX1JPTEVfRUxFTUVOVF9OT05FOworICAgIH0KKyAg
ICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHRyICsgMiAqIE1JTl9CWVRFU19QRVJfQ0hBUihlbmMpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBLV19OT1RBVElPTikp
IHsKKyAgICAgIHN0YXRlLT5oYW5kbGVyID0gbm90YXRpb24wOworICAgICAgcmV0dXJuIFhNTF9S
T0xFX05PVEFUSU9OX05PTkU7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIFhNTF9UT0tfUEk6
CisgICAgcmV0dXJuIFhNTF9ST0xFX1BJOworICBjYXNlIFhNTF9UT0tfQ09NTUVOVDoKKyAgICBy
ZXR1cm4gWE1MX1JPTEVfQ09NTUVOVDsKKyAgY2FzZSBYTUxfVE9LX1BBUkFNX0VOVElUWV9SRUY6
CisgICAgcmV0dXJuIFhNTF9ST0xFX1BBUkFNX0VOVElUWV9SRUY7CisgIGNhc2UgWE1MX1RPS19D
TE9TRV9CUkFDS0VUOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZG9jdHlwZTU7CisgICAgcmV0dXJu
IFhNTF9ST0xFX0RPQ1RZUEVfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX05PTkU6CisgICAgcmV0dXJu
IFhNTF9ST0xFX05PTkU7CisgIH0KKyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKwor
I2lmZGVmIFhNTF9EVEQKKworc3RhdGljIGludCBQVFJDQUxMCitleHRlcm5hbFN1YnNldDAoUFJP
TE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgICAgICAgICBpbnQgdG9rLAorICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisg
ICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKK3sKKyAgc3RhdGUtPmhhbmRsZXIg
PSBleHRlcm5hbFN1YnNldDE7CisgIGlmICh0b2sgPT0gWE1MX1RPS19YTUxfREVDTCkKKyAgICBy
ZXR1cm4gWE1MX1JPTEVfVEVYVF9ERUNMOworICByZXR1cm4gZXh0ZXJuYWxTdWJzZXQxKHN0YXRl
LCB0b2ssIHB0ciwgZW5kLCBlbmMpOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2V4dGVybmFs
U3Vic2V0MShQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgICAgICAgIGludCB0b2ssCisg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmVuZCwKKyAgICAgICAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0
Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tfQ09ORF9TRUNUX09QRU46CisgICAgc3RhdGUtPmhh
bmRsZXIgPSBjb25kU2VjdDA7CisgICAgcmV0dXJuIFhNTF9ST0xFX05PTkU7CisgIGNhc2UgWE1M
X1RPS19DT05EX1NFQ1RfQ0xPU0U6CisgICAgaWYgKHN0YXRlLT5pbmNsdWRlTGV2ZWwgPT0gMCkK
KyAgICAgIGJyZWFrOworICAgIHN0YXRlLT5pbmNsdWRlTGV2ZWwgLT0gMTsKKyAgICByZXR1cm4g
WE1MX1JPTEVfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgorICAgIHJldHVybiBYTUxf
Uk9MRV9OT05FOworICBjYXNlIFhNTF9UT0tfQ0xPU0VfQlJBQ0tFVDoKKyAgICBicmVhazsKKyAg
Y2FzZSBYTUxfVE9LX05PTkU6CisgICAgaWYgKHN0YXRlLT5pbmNsdWRlTGV2ZWwpCisgICAgICBi
cmVhazsKKyAgICByZXR1cm4gWE1MX1JPTEVfTk9ORTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4g
aW50ZXJuYWxTdWJzZXQoc3RhdGUsIHRvaywgcHRyLCBlbmQsIGVuYyk7CisgIH0KKyAgcmV0dXJu
IGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKworc3RhdGlj
IGludCBQVFJDQUxMCitlbnRpdHkwKFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgIGludCB0
b2ssCisgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgY29uc3QgY2hhciAqZW5kLAor
ICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykgeworICBjYXNl
IFhNTF9UT0tfUFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOworICBj
YXNlIFhNTF9UT0tfUEVSQ0VOVDoKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGVudGl0eTE7CisgICAg
cmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOworICBjYXNlIFhNTF9UT0tfTkFNRToKKyAgICBz
dGF0ZS0+aGFuZGxlciA9IGVudGl0eTI7CisgICAgcmV0dXJuIFhNTF9ST0xFX0dFTkVSQUxfRU5U
SVRZX05BTUU7CisgIH0KKyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGlj
IGludCBQVFJDQUxMCitlbnRpdHkxKFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgIGludCB0
b2ssCisgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgY29uc3QgY2hhciAqZW5kLAor
ICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykgeworICBjYXNl
IFhNTF9UT0tfUFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOworICBj
YXNlIFhNTF9UT0tfTkFNRToKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGVudGl0eTc7CisgICAgcmV0
dXJuIFhNTF9ST0xFX1BBUkFNX0VOVElUWV9OQU1FOworICB9CisgIHJldHVybiBjb21tb24oc3Rh
dGUsIHRvayk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorZW50aXR5MihQUk9MT0dfU1RBVEUg
KnN0YXRlLAorICAgICAgICBpbnQgdG9rLAorICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAg
ICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKK3sKKyAg
c3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgorICAgIHJldHVybiBYTUxf
Uk9MRV9FTlRJVFlfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX05BTUU6CisgICAgaWYgKFhtbE5hbWVN
YXRjaGVzQXNjaWkoZW5jLCBwdHIsIGVuZCwgS1dfU1lTVEVNKSkgeworICAgICAgc3RhdGUtPmhh
bmRsZXIgPSBlbnRpdHk0OworICAgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOworICAg
IH0KKyAgICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsIHB0ciwgZW5kLCBLV19QVUJMSUMp
KSB7CisgICAgICBzdGF0ZS0+aGFuZGxlciA9IGVudGl0eTM7CisgICAgICByZXR1cm4gWE1MX1JP
TEVfRU5USVRZX05PTkU7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIFhNTF9UT0tfTElURVJB
TDoKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKKyAgICBzdGF0ZS0+cm9sZV9ub25l
ID0gWE1MX1JPTEVfRU5USVRZX05PTkU7CisgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9WQUxV
RTsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBU
UkNBTEwKK2VudGl0eTMoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgaW50IHRvaywKKyAg
ICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAg
IGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RP
S19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7CisgIGNhc2UgWE1M
X1RPS19MSVRFUkFMOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZW50aXR5NDsKKyAgICByZXR1cm4g
WE1MX1JPTEVfRU5USVRZX1BVQkxJQ19JRDsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0
b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2VudGl0eTQoUFJPTE9HX1NUQVRFICpzdGF0
ZSwKKyAgICAgICAgaW50IHRvaywKKyAgICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICBj
b25zdCBjaGFyICplbmQsCisgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRj
aCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVf
RU5USVRZX05PTkU7CisgIGNhc2UgWE1MX1RPS19MSVRFUkFMOgorICAgIHN0YXRlLT5oYW5kbGVy
ID0gZW50aXR5NTsKKyAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX1NZU1RFTV9JRDsKKyAgfQor
ICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2Vu
dGl0eTUoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgaW50IHRvaywKKyAgICAgICAgY29u
c3QgY2hhciAqcHRyLAorICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgIGNvbnN0IEVO
Q09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0df
UzoKKyAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7CisgIGNhc2UgWE1MX1RPS19ERUNM
X0NMT1NFOgorICAgIHNldFRvcExldmVsKHN0YXRlKTsKKyAgICByZXR1cm4gWE1MX1JPTEVfRU5U
SVRZX0NPTVBMRVRFOworICBjYXNlIFhNTF9UT0tfTkFNRToKKyAgICBpZiAoWG1sTmFtZU1hdGNo
ZXNBc2NpaShlbmMsIHB0ciwgZW5kLCBLV19OREFUQSkpIHsKKyAgICAgIHN0YXRlLT5oYW5kbGVy
ID0gZW50aXR5NjsKKyAgICAgIHJldHVybiBYTUxfUk9MRV9FTlRJVFlfTk9ORTsKKyAgICB9Cisg
ICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGlj
IGludCBQVFJDQUxMCitlbnRpdHk2KFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgIGludCB0
b2ssCisgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgY29uc3QgY2hhciAqZW5kLAor
ICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykgeworICBjYXNl
IFhNTF9UT0tfUFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOworICBj
YXNlIFhNTF9UT0tfTkFNRToKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKKyAgICBz
dGF0ZS0+cm9sZV9ub25lID0gWE1MX1JPTEVfRU5USVRZX05PTkU7CisgICAgcmV0dXJuIFhNTF9S
T0xFX0VOVElUWV9OT1RBVElPTl9OQU1FOworICB9CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRv
ayk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorZW50aXR5NyhQUk9MT0dfU1RBVEUgKnN0YXRl
LAorICAgICAgICBpbnQgdG9rLAorICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAgICAgIGNv
bnN0IGNoYXIgKmVuZCwKKyAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNo
ICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgorICAgIHJldHVybiBYTUxfUk9MRV9F
TlRJVFlfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX05BTUU6CisgICAgaWYgKFhtbE5hbWVNYXRjaGVz
QXNjaWkoZW5jLCBwdHIsIGVuZCwgS1dfU1lTVEVNKSkgeworICAgICAgc3RhdGUtPmhhbmRsZXIg
PSBlbnRpdHk5OworICAgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOworICAgIH0KKyAg
ICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsIHB0ciwgZW5kLCBLV19QVUJMSUMpKSB7Cisg
ICAgICBzdGF0ZS0+aGFuZGxlciA9IGVudGl0eTg7CisgICAgICByZXR1cm4gWE1MX1JPTEVfRU5U
SVRZX05PTkU7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIFhNTF9UT0tfTElURVJBTDoKKyAg
ICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKKyAgICBzdGF0ZS0+cm9sZV9ub25lID0gWE1M
X1JPTEVfRU5USVRZX05PTkU7CisgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9WQUxVRTsKKyAg
fQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwK
K2VudGl0eTgoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgaW50IHRvaywKKyAgICAgICAg
Y29uc3QgY2hhciAqcHRyLAorICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgIGNvbnN0
IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9M
T0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7CisgIGNhc2UgWE1MX1RPS19M
SVRFUkFMOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZW50aXR5OTsKKyAgICByZXR1cm4gWE1MX1JP
TEVfRU5USVRZX1BVQkxJQ19JRDsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwor
fQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2VudGl0eTkoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAg
ICAgICAgaW50IHRvaywKKyAgICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICBjb25zdCBj
aGFyICplbmQsCisgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9r
KSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZ
X05PTkU7CisgIGNhc2UgWE1MX1RPS19MSVRFUkFMOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZW50
aXR5MTA7CisgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9TWVNURU1fSUQ7CisgIH0KKyAgcmV0
dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitlbnRpdHkx
MChQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgaW50IHRvaywKKyAgICAgICAgIGNvbnN0
IGNoYXIgKnB0ciwKKyAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgIGNvbnN0IEVO
Q09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0df
UzoKKyAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7CisgIGNhc2UgWE1MX1RPS19ERUNM
X0NMT1NFOgorICAgIHNldFRvcExldmVsKHN0YXRlKTsKKyAgICByZXR1cm4gWE1MX1JPTEVfRU5U
SVRZX0NPTVBMRVRFOworICB9CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Cit9CisKK3N0
YXRpYyBpbnQgUFRSQ0FMTAorbm90YXRpb24wKFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAg
ICAgaW50IHRvaywKKyAgICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICAgY29uc3Qg
Y2hhciAqZW5kLAorICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAo
dG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfTk9U
QVRJT05fTk9ORTsKKyAgY2FzZSBYTUxfVE9LX05BTUU6CisgICAgc3RhdGUtPmhhbmRsZXIgPSBu
b3RhdGlvbjE7CisgICAgcmV0dXJuIFhNTF9ST0xFX05PVEFUSU9OX05BTUU7CisgIH0KKyAgcmV0
dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitub3RhdGlv
bjEoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgICBpbnQgdG9rLAorICAgICAgICAgIGNv
bnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgY29u
c3QgRU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BS
T0xPR19TOgorICAgIHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9OT05FOworICBjYXNlIFhNTF9U
T0tfTkFNRToKKyAgICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsIHB0ciwgZW5kLCBLV19T
WVNURU0pKSB7CisgICAgICBzdGF0ZS0+aGFuZGxlciA9IG5vdGF0aW9uMzsKKyAgICAgIHJldHVy
biBYTUxfUk9MRV9OT1RBVElPTl9OT05FOworICAgIH0KKyAgICBpZiAoWG1sTmFtZU1hdGNoZXNB
c2NpaShlbmMsIHB0ciwgZW5kLCBLV19QVUJMSUMpKSB7CisgICAgICBzdGF0ZS0+aGFuZGxlciA9
IG5vdGF0aW9uMjsKKyAgICAgIHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9OT05FOworICAgIH0K
KyAgICBicmVhazsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0
aWMgaW50IFBUUkNBTEwKK25vdGF0aW9uMihQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAg
IGludCB0b2ssCisgICAgICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgIGNvbnN0IGNo
YXIgKmVuZCwKKyAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRv
aykgeworICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX05PVEFU
SU9OX05PTkU7CisgIGNhc2UgWE1MX1RPS19MSVRFUkFMOgorICAgIHN0YXRlLT5oYW5kbGVyID0g
bm90YXRpb240OworICAgIHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9QVUJMSUNfSUQ7CisgIH0K
KyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitu
b3RhdGlvbjMoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgICBpbnQgdG9rLAorICAgICAg
ICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAg
ICAgY29uc3QgRU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxf
VE9LX1BST0xPR19TOgorICAgIHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9OT05FOworICBjYXNl
IFhNTF9UT0tfTElURVJBTDoKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKKyAgICBz
dGF0ZS0+cm9sZV9ub25lID0gWE1MX1JPTEVfTk9UQVRJT05fTk9ORTsKKyAgICByZXR1cm4gWE1M
X1JPTEVfTk9UQVRJT05fU1lTVEVNX0lEOworICB9CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRv
ayk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorbm90YXRpb240KFBST0xPR19TVEFURSAqc3Rh
dGUsCisgICAgICAgICAgaW50IHRvaywKKyAgICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAg
ICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7
CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4g
WE1MX1JPTEVfTk9UQVRJT05fTk9ORTsKKyAgY2FzZSBYTUxfVE9LX0xJVEVSQUw6CisgICAgc3Rh
dGUtPmhhbmRsZXIgPSBkZWNsQ2xvc2U7CisgICAgc3RhdGUtPnJvbGVfbm9uZSA9IFhNTF9ST0xF
X05PVEFUSU9OX05PTkU7CisgICAgcmV0dXJuIFhNTF9ST0xFX05PVEFUSU9OX1NZU1RFTV9JRDsK
KyAgY2FzZSBYTUxfVE9LX0RFQ0xfQ0xPU0U6CisgICAgc2V0VG9wTGV2ZWwoc3RhdGUpOworICAg
IHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9OT19TWVNURU1fSUQ7CisgIH0KKyAgcmV0dXJuIGNv
bW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCithdHRsaXN0MChQUk9M
T0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgaW50IHRvaywKKyAgICAgICAgIGNvbnN0IGNoYXIg
KnB0ciwKKyAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgIGNvbnN0IEVOQ09ESU5H
ICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAg
ICByZXR1cm4gWE1MX1JPTEVfQVRUTElTVF9OT05FOworICBjYXNlIFhNTF9UT0tfTkFNRToKKyAg
Y2FzZSBYTUxfVE9LX1BSRUZJWEVEX05BTUU6CisgICAgc3RhdGUtPmhhbmRsZXIgPSBhdHRsaXN0
MTsKKyAgICByZXR1cm4gWE1MX1JPTEVfQVRUTElTVF9FTEVNRU5UX05BTUU7CisgIH0KKyAgcmV0
dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCithdHRsaXN0
MShQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgaW50IHRvaywKKyAgICAgICAgIGNvbnN0
IGNoYXIgKnB0ciwKKyAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgIGNvbnN0IEVO
Q09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0df
UzoKKyAgICByZXR1cm4gWE1MX1JPTEVfQVRUTElTVF9OT05FOworICBjYXNlIFhNTF9UT0tfREVD
TF9DTE9TRToKKyAgICBzZXRUb3BMZXZlbChzdGF0ZSk7CisgICAgcmV0dXJuIFhNTF9ST0xFX0FU
VExJU1RfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX05BTUU6CisgIGNhc2UgWE1MX1RPS19QUkVGSVhF
RF9OQU1FOgorICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDI7CisgICAgcmV0dXJuIFhNTF9S
T0xFX0FUVFJJQlVURV9OQU1FOworICB9CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Cit9
CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorYXR0bGlzdDIoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAg
ICAgICAgIGludCB0b2ssCisgICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICBjb25z
dCBjaGFyICplbmQsCisgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2gg
KHRvaykgeworICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0FU
VExJU1RfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX05BTUU6CisgICAgeworICAgICAgc3RhdGljIGNv
bnN0IGNoYXIgKiBjb25zdCB0eXBlc1tdID0geworICAgICAgICBLV19DREFUQSwKKyAgICAgICAg
S1dfSUQsCisgICAgICAgIEtXX0lEUkVGLAorICAgICAgICBLV19JRFJFRlMsCisgICAgICAgIEtX
X0VOVElUWSwKKyAgICAgICAgS1dfRU5USVRJRVMsCisgICAgICAgIEtXX05NVE9LRU4sCisgICAg
ICAgIEtXX05NVE9LRU5TLAorICAgICAgfTsKKyAgICAgIGludCBpOworICAgICAgZm9yIChpID0g
MDsgaSA8IChpbnQpKHNpemVvZih0eXBlcykvc2l6ZW9mKHR5cGVzWzBdKSk7IGkrKykKKyAgICAg
ICAgaWYgKFhtbE5hbWVNYXRjaGVzQXNjaWkoZW5jLCBwdHIsIGVuZCwgdHlwZXNbaV0pKSB7Cisg
ICAgICAgICAgc3RhdGUtPmhhbmRsZXIgPSBhdHRsaXN0ODsKKyAgICAgICAgICByZXR1cm4gWE1M
X1JPTEVfQVRUUklCVVRFX1RZUEVfQ0RBVEEgKyBpOworICAgICAgICB9CisgICAgfQorICAgIGlm
IChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQsIEtXX05PVEFUSU9OKSkgeworICAg
ICAgc3RhdGUtPmhhbmRsZXIgPSBhdHRsaXN0NTsKKyAgICAgIHJldHVybiBYTUxfUk9MRV9BVFRM
SVNUX05PTkU7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIFhNTF9UT0tfT1BFTl9QQVJFTjoK
KyAgICBzdGF0ZS0+aGFuZGxlciA9IGF0dGxpc3QzOworICAgIHJldHVybiBYTUxfUk9MRV9BVFRM
SVNUX05PTkU7CisgIH0KKyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGlj
IGludCBQVFJDQUxMCithdHRsaXN0MyhQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgaW50
IHRvaywKKyAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwKKyAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7Cisg
IGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfQVRUTElTVF9OT05F
OworICBjYXNlIFhNTF9UT0tfTk1UT0tFTjoKKyAgY2FzZSBYTUxfVE9LX05BTUU6CisgIGNhc2Ug
WE1MX1RPS19QUkVGSVhFRF9OQU1FOgorICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDQ7Cisg
ICAgcmV0dXJuIFhNTF9ST0xFX0FUVFJJQlVURV9FTlVNX1ZBTFVFOworICB9CisgIHJldHVybiBj
b21tb24oc3RhdGUsIHRvayk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorYXR0bGlzdDQoUFJP
TE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgIGludCB0b2ssCisgICAgICAgICBjb25zdCBjaGFy
ICpwdHIsCisgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICBjb25zdCBFTkNPRElO
RyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6Cisg
ICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJU1RfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX0NMT1NFX1BB
UkVOOgorICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDg7CisgICAgcmV0dXJuIFhNTF9ST0xF
X0FUVExJU1RfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX09SOgorICAgIHN0YXRlLT5oYW5kbGVyID0g
YXR0bGlzdDM7CisgICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJU1RfTk9ORTsKKyAgfQorICByZXR1
cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2F0dGxpc3Q1
KFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICBpbnQgdG9rLAorICAgICAgICAgY29uc3Qg
Y2hhciAqcHRyLAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgY29uc3QgRU5D
T0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19T
OgorICAgIHJldHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7CisgIGNhc2UgWE1MX1RPS19PUEVO
X1BBUkVOOgorICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDY7CisgICAgcmV0dXJuIFhNTF9S
T0xFX0FUVExJU1RfTk9ORTsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQor
CitzdGF0aWMgaW50IFBUUkNBTEwKK2F0dGxpc3Q2KFBST0xPR19TVEFURSAqc3RhdGUsCisgICAg
ICAgICBpbnQgdG9rLAorICAgICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgY29uc3Qg
Y2hhciAqZW5kLAorICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0
b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgorICAgIHJldHVybiBYTUxfUk9MRV9BVFRM
SVNUX05PTkU7CisgIGNhc2UgWE1MX1RPS19OQU1FOgorICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0
bGlzdDc7CisgICAgcmV0dXJuIFhNTF9ST0xFX0FUVFJJQlVURV9OT1RBVElPTl9WQUxVRTsKKyAg
fQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwK
K2F0dGxpc3Q3KFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICBpbnQgdG9rLAorICAgICAg
ICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAg
Y29uc3QgRU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9L
X1BST0xPR19TOgorICAgIHJldHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7CisgIGNhc2UgWE1M
X1RPS19DTE9TRV9QQVJFTjoKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGF0dGxpc3Q4OworICAgIHJl
dHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7CisgIGNhc2UgWE1MX1RPS19PUjoKKyAgICBzdGF0
ZS0+aGFuZGxlciA9IGF0dGxpc3Q2OworICAgIHJldHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7
CisgIH0KKyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworLyogZGVmYXVsdCB2YWx1
ZSAqLworc3RhdGljIGludCBQVFJDQUxMCithdHRsaXN0OChQUk9MT0dfU1RBVEUgKnN0YXRlLAor
ICAgICAgICAgaW50IHRvaywKKyAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgIGNv
bnN0IGNoYXIgKmVuZCwKKyAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRj
aCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVf
QVRUTElTVF9OT05FOworICBjYXNlIFhNTF9UT0tfUE9VTkRfTkFNRToKKyAgICBpZiAoWG1sTmFt
ZU1hdGNoZXNBc2NpaShlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgTUlO
X0JZVEVTX1BFUl9DSEFSKGVuYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtXX0lNUExJRUQpKSB7CisgICAgICBzdGF0ZS0+
aGFuZGxlciA9IGF0dGxpc3QxOworICAgICAgcmV0dXJuIFhNTF9ST0xFX0lNUExJRURfQVRUUklC
VVRFX1ZBTFVFOworICAgIH0KKyAgICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgTUlOX0JZVEVTX1BFUl9DSEFSKGVuYyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEtXX1JFUVVJUkVEKSkgeworICAgICAgc3RhdGUtPmhhbmRsZXIgPSBhdHRsaXN0MTsKKyAg
ICAgIHJldHVybiBYTUxfUk9MRV9SRVFVSVJFRF9BVFRSSUJVVEVfVkFMVUU7CisgICAgfQorICAg
IGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdHIgKyBNSU5fQllURVNfUEVSX0NIQVIoZW5jKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1dfRklYRUQpKSB7CisgICAg
ICBzdGF0ZS0+aGFuZGxlciA9IGF0dGxpc3Q5OworICAgICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJ
U1RfTk9ORTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgWE1MX1RPS19MSVRFUkFMOgorICAg
IHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDE7CisgICAgcmV0dXJuIFhNTF9ST0xFX0RFRkFVTFRf
QVRUUklCVVRFX1ZBTFVFOworICB9CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Cit9CisK
K3N0YXRpYyBpbnQgUFRSQ0FMTAorYXR0bGlzdDkoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAg
ICAgIGludCB0b2ssCisgICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICBjb25zdCBj
aGFyICplbmQsCisgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRv
aykgeworICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJ
U1RfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX0xJVEVSQUw6CisgICAgc3RhdGUtPmhhbmRsZXIgPSBh
dHRsaXN0MTsKKyAgICByZXR1cm4gWE1MX1JPTEVfRklYRURfQVRUUklCVVRFX1ZBTFVFOworICB9
CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAor
ZWxlbWVudDAoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgIGludCB0b2ssCisgICAgICAg
ICBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICBj
b25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tf
UFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0VMRU1FTlRfTk9ORTsKKyAgY2FzZSBYTUxf
VE9LX05BTUU6CisgIGNhc2UgWE1MX1RPS19QUkVGSVhFRF9OQU1FOgorICAgIHN0YXRlLT5oYW5k
bGVyID0gZWxlbWVudDE7CisgICAgcmV0dXJuIFhNTF9ST0xFX0VMRU1FTlRfTkFNRTsKKyAgfQor
ICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2Vs
ZW1lbnQxKFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICBpbnQgdG9rLAorICAgICAgICAg
Y29uc3QgY2hhciAqcHRyLAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgY29u
c3QgRU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BS
T0xPR19TOgorICAgIHJldHVybiBYTUxfUk9MRV9FTEVNRU5UX05PTkU7CisgIGNhc2UgWE1MX1RP
S19OQU1FOgorICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQsIEtXX0VN
UFRZKSkgeworICAgICAgc3RhdGUtPmhhbmRsZXIgPSBkZWNsQ2xvc2U7CisgICAgICBzdGF0ZS0+
cm9sZV9ub25lID0gWE1MX1JPTEVfRUxFTUVOVF9OT05FOworICAgICAgcmV0dXJuIFhNTF9ST0xF
X0NPTlRFTlRfRU1QVFk7CisgICAgfQorICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywg
cHRyLCBlbmQsIEtXX0FOWSkpIHsKKyAgICAgIHN0YXRlLT5oYW5kbGVyID0gZGVjbENsb3NlOwor
ICAgICAgc3RhdGUtPnJvbGVfbm9uZSA9IFhNTF9ST0xFX0VMRU1FTlRfTk9ORTsKKyAgICAgIHJl
dHVybiBYTUxfUk9MRV9DT05URU5UX0FOWTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgWE1M
X1RPS19PUEVOX1BBUkVOOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZWxlbWVudDI7CisgICAgc3Rh
dGUtPmxldmVsID0gMTsKKyAgICByZXR1cm4gWE1MX1JPTEVfR1JPVVBfT1BFTjsKKyAgfQorICBy
ZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2VsZW1l
bnQyKFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICBpbnQgdG9rLAorICAgICAgICAgY29u
c3QgY2hhciAqcHRyLAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgY29uc3Qg
RU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xP
R19TOgorICAgIHJldHVybiBYTUxfUk9MRV9FTEVNRU5UX05PTkU7CisgIGNhc2UgWE1MX1RPS19Q
T1VORF9OQU1FOgorICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdHIgKyBNSU5fQllURVNfUEVSX0NIQVIoZW5jKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1df
UENEQVRBKSkgeworICAgICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50MzsKKyAgICAgIHJldHVy
biBYTUxfUk9MRV9DT05URU5UX1BDREFUQTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgWE1M
X1RPS19PUEVOX1BBUkVOOgorICAgIHN0YXRlLT5sZXZlbCA9IDI7CisgICAgc3RhdGUtPmhhbmRs
ZXIgPSBlbGVtZW50NjsKKyAgICByZXR1cm4gWE1MX1JPTEVfR1JPVVBfT1BFTjsKKyAgY2FzZSBY
TUxfVE9LX05BTUU6CisgIGNhc2UgWE1MX1RPS19QUkVGSVhFRF9OQU1FOgorICAgIHN0YXRlLT5o
YW5kbGVyID0gZWxlbWVudDc7CisgICAgcmV0dXJuIFhNTF9ST0xFX0NPTlRFTlRfRUxFTUVOVDsK
KyAgY2FzZSBYTUxfVE9LX05BTUVfUVVFU1RJT046CisgICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVt
ZW50NzsKKyAgICByZXR1cm4gWE1MX1JPTEVfQ09OVEVOVF9FTEVNRU5UX09QVDsKKyAgY2FzZSBY
TUxfVE9LX05BTUVfQVNURVJJU0s6CisgICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50NzsKKyAg
ICByZXR1cm4gWE1MX1JPTEVfQ09OVEVOVF9FTEVNRU5UX1JFUDsKKyAgY2FzZSBYTUxfVE9LX05B
TUVfUExVUzoKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGVsZW1lbnQ3OworICAgIHJldHVybiBYTUxf
Uk9MRV9DT05URU5UX0VMRU1FTlRfUExVUzsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0
b2spOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK2VsZW1lbnQzKFBST0xPR19TVEFURSAqc3Rh
dGUsCisgICAgICAgICBpbnQgdG9rLAorICAgICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAg
ICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKK3sKKyAg
c3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgorICAgIHJldHVybiBYTUxf
Uk9MRV9FTEVNRU5UX05PTkU7CisgIGNhc2UgWE1MX1RPS19DTE9TRV9QQVJFTjoKKyAgICBzdGF0
ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKKyAgICBzdGF0ZS0+cm9sZV9ub25lID0gWE1MX1JPTEVf
RUxFTUVOVF9OT05FOworICAgIHJldHVybiBYTUxfUk9MRV9HUk9VUF9DTE9TRTsKKyAgY2FzZSBY
TUxfVE9LX0NMT1NFX1BBUkVOX0FTVEVSSVNLOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZGVjbENs
b3NlOworICAgIHN0YXRlLT5yb2xlX25vbmUgPSBYTUxfUk9MRV9FTEVNRU5UX05PTkU7CisgICAg
cmV0dXJuIFhNTF9ST0xFX0dST1VQX0NMT1NFX1JFUDsKKyAgY2FzZSBYTUxfVE9LX09SOgorICAg
IHN0YXRlLT5oYW5kbGVyID0gZWxlbWVudDQ7CisgICAgcmV0dXJuIFhNTF9ST0xFX0VMRU1FTlRf
Tk9ORTsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50
IFBUUkNBTEwKK2VsZW1lbnQ0KFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICBpbnQgdG9r
LAorICAgICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgY29uc3QgY2hhciAqZW5kLAor
ICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2Fz
ZSBYTUxfVE9LX1BST0xPR19TOgorICAgIHJldHVybiBYTUxfUk9MRV9FTEVNRU5UX05PTkU7Cisg
IGNhc2UgWE1MX1RPS19OQU1FOgorICBjYXNlIFhNTF9UT0tfUFJFRklYRURfTkFNRToKKyAgICBz
dGF0ZS0+aGFuZGxlciA9IGVsZW1lbnQ1OworICAgIHJldHVybiBYTUxfUk9MRV9DT05URU5UX0VM
RU1FTlQ7CisgIH0KKyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGlu
dCBQVFJDQUxMCitlbGVtZW50NShQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgaW50IHRv
aywKKyAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwK
KyAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNh
c2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfRUxFTUVOVF9OT05FOwor
ICBjYXNlIFhNTF9UT0tfQ0xPU0VfUEFSRU5fQVNURVJJU0s6CisgICAgc3RhdGUtPmhhbmRsZXIg
PSBkZWNsQ2xvc2U7CisgICAgc3RhdGUtPnJvbGVfbm9uZSA9IFhNTF9ST0xFX0VMRU1FTlRfTk9O
RTsKKyAgICByZXR1cm4gWE1MX1JPTEVfR1JPVVBfQ0xPU0VfUkVQOworICBjYXNlIFhNTF9UT0tf
T1I6CisgICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50NDsKKyAgICByZXR1cm4gWE1MX1JPTEVf
RUxFTUVOVF9OT05FOworICB9CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Cit9CisKK3N0
YXRpYyBpbnQgUFRSQ0FMTAorZWxlbWVudDYoUFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAg
IGludCB0b2ssCisgICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICBjb25zdCBjaGFy
ICplbmQsCisgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykg
eworICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6CisgICAgcmV0dXJuIFhNTF9ST0xFX0VMRU1FTlRf
Tk9ORTsKKyAgY2FzZSBYTUxfVE9LX09QRU5fUEFSRU46CisgICAgc3RhdGUtPmxldmVsICs9IDE7
CisgICAgcmV0dXJuIFhNTF9ST0xFX0dST1VQX09QRU47CisgIGNhc2UgWE1MX1RPS19OQU1FOgor
ICBjYXNlIFhNTF9UT0tfUFJFRklYRURfTkFNRToKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGVsZW1l
bnQ3OworICAgIHJldHVybiBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlQ7CisgIGNhc2UgWE1MX1RP
S19OQU1FX1FVRVNUSU9OOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZWxlbWVudDc7CisgICAgcmV0
dXJuIFhNTF9ST0xFX0NPTlRFTlRfRUxFTUVOVF9PUFQ7CisgIGNhc2UgWE1MX1RPS19OQU1FX0FT
VEVSSVNLOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZWxlbWVudDc7CisgICAgcmV0dXJuIFhNTF9S
T0xFX0NPTlRFTlRfRUxFTUVOVF9SRVA7CisgIGNhc2UgWE1MX1RPS19OQU1FX1BMVVM6CisgICAg
c3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50NzsKKyAgICByZXR1cm4gWE1MX1JPTEVfQ09OVEVOVF9F
TEVNRU5UX1BMVVM7CisgIH0KKyAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3Rh
dGljIGludCBQVFJDQUxMCitlbGVtZW50NyhQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAg
aW50IHRvaywKKyAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgIGNvbnN0IGNoYXIg
KmVuZCwKKyAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7
CisgIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfRUxFTUVOVF9O
T05FOworICBjYXNlIFhNTF9UT0tfQ0xPU0VfUEFSRU46CisgICAgc3RhdGUtPmxldmVsIC09IDE7
CisgICAgaWYgKHN0YXRlLT5sZXZlbCA9PSAwKSB7CisgICAgICBzdGF0ZS0+aGFuZGxlciA9IGRl
Y2xDbG9zZTsKKyAgICAgIHN0YXRlLT5yb2xlX25vbmUgPSBYTUxfUk9MRV9FTEVNRU5UX05PTkU7
CisgICAgfQorICAgIHJldHVybiBYTUxfUk9MRV9HUk9VUF9DTE9TRTsKKyAgY2FzZSBYTUxfVE9L
X0NMT1NFX1BBUkVOX0FTVEVSSVNLOgorICAgIHN0YXRlLT5sZXZlbCAtPSAxOworICAgIGlmIChz
dGF0ZS0+bGV2ZWwgPT0gMCkgeworICAgICAgc3RhdGUtPmhhbmRsZXIgPSBkZWNsQ2xvc2U7Cisg
ICAgICBzdGF0ZS0+cm9sZV9ub25lID0gWE1MX1JPTEVfRUxFTUVOVF9OT05FOworICAgIH0KKyAg
ICByZXR1cm4gWE1MX1JPTEVfR1JPVVBfQ0xPU0VfUkVQOworICBjYXNlIFhNTF9UT0tfQ0xPU0Vf
UEFSRU5fUVVFU1RJT046CisgICAgc3RhdGUtPmxldmVsIC09IDE7CisgICAgaWYgKHN0YXRlLT5s
ZXZlbCA9PSAwKSB7CisgICAgICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKKyAgICAgIHN0
YXRlLT5yb2xlX25vbmUgPSBYTUxfUk9MRV9FTEVNRU5UX05PTkU7CisgICAgfQorICAgIHJldHVy
biBYTUxfUk9MRV9HUk9VUF9DTE9TRV9PUFQ7CisgIGNhc2UgWE1MX1RPS19DTE9TRV9QQVJFTl9Q
TFVTOgorICAgIHN0YXRlLT5sZXZlbCAtPSAxOworICAgIGlmIChzdGF0ZS0+bGV2ZWwgPT0gMCkg
eworICAgICAgc3RhdGUtPmhhbmRsZXIgPSBkZWNsQ2xvc2U7CisgICAgICBzdGF0ZS0+cm9sZV9u
b25lID0gWE1MX1JPTEVfRUxFTUVOVF9OT05FOworICAgIH0KKyAgICByZXR1cm4gWE1MX1JPTEVf
R1JPVVBfQ0xPU0VfUExVUzsKKyAgY2FzZSBYTUxfVE9LX0NPTU1BOgorICAgIHN0YXRlLT5oYW5k
bGVyID0gZWxlbWVudDY7CisgICAgcmV0dXJuIFhNTF9ST0xFX0dST1VQX1NFUVVFTkNFOworICBj
YXNlIFhNTF9UT0tfT1I6CisgICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50NjsKKyAgICByZXR1
cm4gWE1MX1JPTEVfR1JPVVBfQ0hPSUNFOworICB9CisgIHJldHVybiBjb21tb24oc3RhdGUsIHRv
ayk7Cit9CisKKyNpZmRlZiBYTUxfRFRECisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorY29uZFNlY3Qw
KFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICAgaW50IHRvaywKKyAgICAgICAgICBjb25z
dCBjaGFyICpwdHIsCisgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgIGNvbnN0
IEVOQ09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9M
T0dfUzoKKyAgICByZXR1cm4gWE1MX1JPTEVfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX05BTUU6Cisg
ICAgaWYgKFhtbE5hbWVNYXRjaGVzQXNjaWkoZW5jLCBwdHIsIGVuZCwgS1dfSU5DTFVERSkpIHsK
KyAgICAgIHN0YXRlLT5oYW5kbGVyID0gY29uZFNlY3QxOworICAgICAgcmV0dXJuIFhNTF9ST0xF
X05PTkU7CisgICAgfQorICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQs
IEtXX0lHTk9SRSkpIHsKKyAgICAgIHN0YXRlLT5oYW5kbGVyID0gY29uZFNlY3QyOworICAgICAg
cmV0dXJuIFhNTF9ST0xFX05PTkU7CisgICAgfQorICAgIGJyZWFrOworICB9CisgIHJldHVybiBj
b21tb24oc3RhdGUsIHRvayk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorY29uZFNlY3QxKFBS
T0xPR19TVEFURSAqc3RhdGUsCisgICAgICAgICAgaW50IHRvaywKKyAgICAgICAgICBjb25zdCBj
aGFyICpwdHIsCisgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgIGNvbnN0IEVO
Q09ESU5HICplbmMpCit7CisgIHN3aXRjaCAodG9rKSB7CisgIGNhc2UgWE1MX1RPS19QUk9MT0df
UzoKKyAgICByZXR1cm4gWE1MX1JPTEVfTk9ORTsKKyAgY2FzZSBYTUxfVE9LX09QRU5fQlJBQ0tF
VDoKKyAgICBzdGF0ZS0+aGFuZGxlciA9IGV4dGVybmFsU3Vic2V0MTsKKyAgICBzdGF0ZS0+aW5j
bHVkZUxldmVsICs9IDE7CisgICAgcmV0dXJuIFhNTF9ST0xFX05PTkU7CisgIH0KKyAgcmV0dXJu
IGNvbW1vbihzdGF0ZSwgdG9rKTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitjb25kU2VjdDIo
UFJPTE9HX1NUQVRFICpzdGF0ZSwKKyAgICAgICAgICBpbnQgdG9rLAorICAgICAgICAgIGNvbnN0
IGNoYXIgKnB0ciwKKyAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgY29uc3Qg
RU5DT0RJTkcgKmVuYykKK3sKKyAgc3dpdGNoICh0b2spIHsKKyAgY2FzZSBYTUxfVE9LX1BST0xP
R19TOgorICAgIHJldHVybiBYTUxfUk9MRV9OT05FOworICBjYXNlIFhNTF9UT0tfT1BFTl9CUkFD
S0VUOgorICAgIHN0YXRlLT5oYW5kbGVyID0gZXh0ZXJuYWxTdWJzZXQxOworICAgIHJldHVybiBY
TUxfUk9MRV9JR05PUkVfU0VDVDsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwor
fQorCisjZW5kaWYgLyogWE1MX0RURCAqLworCitzdGF0aWMgaW50IFBUUkNBTEwKK2RlY2xDbG9z
ZShQUk9MT0dfU1RBVEUgKnN0YXRlLAorICAgICAgICAgIGludCB0b2ssCisgICAgICAgICAgY29u
c3QgY2hhciAqcHRyLAorICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICBjb25z
dCBFTkNPRElORyAqZW5jKQoreworICBzd2l0Y2ggKHRvaykgeworICBjYXNlIFhNTF9UT0tfUFJP
TE9HX1M6CisgICAgcmV0dXJuIHN0YXRlLT5yb2xlX25vbmU7CisgIGNhc2UgWE1MX1RPS19ERUNM
X0NMT1NFOgorICAgIHNldFRvcExldmVsKHN0YXRlKTsKKyAgICByZXR1cm4gc3RhdGUtPnJvbGVf
bm9uZTsKKyAgfQorICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOworfQorCitzdGF0aWMgaW50
IFBUUkNBTEwKK2Vycm9yKFBST0xPR19TVEFURSAqc3RhdGUsCisgICAgICBpbnQgdG9rLAorICAg
ICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgY29uc3Qg
RU5DT0RJTkcgKmVuYykKK3sKKyAgcmV0dXJuIFhNTF9ST0xFX05PTkU7Cit9CisKK3N0YXRpYyBp
bnQgRkFTVENBTEwKK2NvbW1vbihQUk9MT0dfU1RBVEUgKnN0YXRlLCBpbnQgdG9rKQoreworI2lm
ZGVmIFhNTF9EVEQKKyAgaWYgKCFzdGF0ZS0+ZG9jdW1lbnRFbnRpdHkgJiYgdG9rID09IFhNTF9U
T0tfUEFSQU1fRU5USVRZX1JFRikKKyAgICByZXR1cm4gWE1MX1JPTEVfSU5ORVJfUEFSQU1fRU5U
SVRZX1JFRjsKKyNlbmRpZgorICBzdGF0ZS0+aGFuZGxlciA9IGVycm9yOworICByZXR1cm4gWE1M
X1JPTEVfRVJST1I7Cit9CisKK3ZvaWQKK1htbFByb2xvZ1N0YXRlSW5pdChQUk9MT0dfU1RBVEUg
KnN0YXRlKQoreworICBzdGF0ZS0+aGFuZGxlciA9IHByb2xvZzA7CisjaWZkZWYgWE1MX0RURAor
ICBzdGF0ZS0+ZG9jdW1lbnRFbnRpdHkgPSAxOworICBzdGF0ZS0+aW5jbHVkZUxldmVsID0gMDsK
KyAgc3RhdGUtPmluRW50aXR5VmFsdWUgPSAwOworI2VuZGlmIC8qIFhNTF9EVEQgKi8KK30KKwor
I2lmZGVmIFhNTF9EVEQKKwordm9pZAorWG1sUHJvbG9nU3RhdGVJbml0RXh0ZXJuYWxFbnRpdHko
UFJPTE9HX1NUQVRFICpzdGF0ZSkKK3sKKyAgc3RhdGUtPmhhbmRsZXIgPSBleHRlcm5hbFN1YnNl
dDA7CisgIHN0YXRlLT5kb2N1bWVudEVudGl0eSA9IDA7CisgIHN0YXRlLT5pbmNsdWRlTGV2ZWwg
PSAwOworfQorCisjZW5kaWYgLyogWE1MX0RURCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1scm9s
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBh
dC9maWxlcy9saWIveG1scm9sZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkZDlmMDZmOTc2NzllNmNlNmQ2YjU0
ZThjNGEzY2NmYzU3MTdiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWxyb2xlLmgKQEAg
LTAsMCArMSwxMTQgQEAKKy8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291
cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKKyAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5
aW5nIHBlcm1pc3Npb24uCisqLworCisjaWZuZGVmIFhtbFJvbGVfSU5DTFVERUQKKyNkZWZpbmUg
WG1sUm9sZV9JTkNMVURFRCAxCisKKyNpZmRlZiBfX1ZNUworLyogICAgICAwICAgICAgICAxICAg
ICAgICAgMiAgICAgICAgIDMgICAgICAwICAgICAgICAxICAgICAgICAgMiAgICAgICAgIDMKKyAg
ICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMSAgICAgMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMSAqLworI2RlZmluZSBYbWxQcm9sb2dTdGF0ZUluaXRFeHRlcm5hbEVu
dGl0eSAgICBYbWxQcm9sb2dTdGF0ZUluaXRFeHRlcm5hbEVudAorI2VuZGlmCisKKyNpbmNsdWRl
ICJ4bWx0b2suaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgor
CitlbnVtIHsKKyAgWE1MX1JPTEVfRVJST1IgPSAtMSwKKyAgWE1MX1JPTEVfTk9ORSA9IDAsCisg
IFhNTF9ST0xFX1hNTF9ERUNMLAorICBYTUxfUk9MRV9JTlNUQU5DRV9TVEFSVCwKKyAgWE1MX1JP
TEVfRE9DVFlQRV9OT05FLAorICBYTUxfUk9MRV9ET0NUWVBFX05BTUUsCisgIFhNTF9ST0xFX0RP
Q1RZUEVfU1lTVEVNX0lELAorICBYTUxfUk9MRV9ET0NUWVBFX1BVQkxJQ19JRCwKKyAgWE1MX1JP
TEVfRE9DVFlQRV9JTlRFUk5BTF9TVUJTRVQsCisgIFhNTF9ST0xFX0RPQ1RZUEVfQ0xPU0UsCisg
IFhNTF9ST0xFX0dFTkVSQUxfRU5USVRZX05BTUUsCisgIFhNTF9ST0xFX1BBUkFNX0VOVElUWV9O
QU1FLAorICBYTUxfUk9MRV9FTlRJVFlfTk9ORSwKKyAgWE1MX1JPTEVfRU5USVRZX1ZBTFVFLAor
ICBYTUxfUk9MRV9FTlRJVFlfU1lTVEVNX0lELAorICBYTUxfUk9MRV9FTlRJVFlfUFVCTElDX0lE
LAorICBYTUxfUk9MRV9FTlRJVFlfQ09NUExFVEUsCisgIFhNTF9ST0xFX0VOVElUWV9OT1RBVElP
Tl9OQU1FLAorICBYTUxfUk9MRV9OT1RBVElPTl9OT05FLAorICBYTUxfUk9MRV9OT1RBVElPTl9O
QU1FLAorICBYTUxfUk9MRV9OT1RBVElPTl9TWVNURU1fSUQsCisgIFhNTF9ST0xFX05PVEFUSU9O
X05PX1NZU1RFTV9JRCwKKyAgWE1MX1JPTEVfTk9UQVRJT05fUFVCTElDX0lELAorICBYTUxfUk9M
RV9BVFRSSUJVVEVfTkFNRSwKKyAgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfQ0RBVEEsCisgIFhN
TF9ST0xFX0FUVFJJQlVURV9UWVBFX0lELAorICBYTUxfUk9MRV9BVFRSSUJVVEVfVFlQRV9JRFJF
RiwKKyAgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfSURSRUZTLAorICBYTUxfUk9MRV9BVFRSSUJV
VEVfVFlQRV9FTlRJVFksCisgIFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX0VOVElUSUVTLAorICBY
TUxfUk9MRV9BVFRSSUJVVEVfVFlQRV9OTVRPS0VOLAorICBYTUxfUk9MRV9BVFRSSUJVVEVfVFlQ
RV9OTVRPS0VOUywKKyAgWE1MX1JPTEVfQVRUUklCVVRFX0VOVU1fVkFMVUUsCisgIFhNTF9ST0xF
X0FUVFJJQlVURV9OT1RBVElPTl9WQUxVRSwKKyAgWE1MX1JPTEVfQVRUTElTVF9OT05FLAorICBY
TUxfUk9MRV9BVFRMSVNUX0VMRU1FTlRfTkFNRSwKKyAgWE1MX1JPTEVfSU1QTElFRF9BVFRSSUJV
VEVfVkFMVUUsCisgIFhNTF9ST0xFX1JFUVVJUkVEX0FUVFJJQlVURV9WQUxVRSwKKyAgWE1MX1JP
TEVfREVGQVVMVF9BVFRSSUJVVEVfVkFMVUUsCisgIFhNTF9ST0xFX0ZJWEVEX0FUVFJJQlVURV9W
QUxVRSwKKyAgWE1MX1JPTEVfRUxFTUVOVF9OT05FLAorICBYTUxfUk9MRV9FTEVNRU5UX05BTUUs
CisgIFhNTF9ST0xFX0NPTlRFTlRfQU5ZLAorICBYTUxfUk9MRV9DT05URU5UX0VNUFRZLAorICBY
TUxfUk9MRV9DT05URU5UX1BDREFUQSwKKyAgWE1MX1JPTEVfR1JPVVBfT1BFTiwKKyAgWE1MX1JP
TEVfR1JPVVBfQ0xPU0UsCisgIFhNTF9ST0xFX0dST1VQX0NMT1NFX1JFUCwKKyAgWE1MX1JPTEVf
R1JPVVBfQ0xPU0VfT1BULAorICBYTUxfUk9MRV9HUk9VUF9DTE9TRV9QTFVTLAorICBYTUxfUk9M
RV9HUk9VUF9DSE9JQ0UsCisgIFhNTF9ST0xFX0dST1VQX1NFUVVFTkNFLAorICBYTUxfUk9MRV9D
T05URU5UX0VMRU1FTlQsCisgIFhNTF9ST0xFX0NPTlRFTlRfRUxFTUVOVF9SRVAsCisgIFhNTF9S
T0xFX0NPTlRFTlRfRUxFTUVOVF9PUFQsCisgIFhNTF9ST0xFX0NPTlRFTlRfRUxFTUVOVF9QTFVT
LAorICBYTUxfUk9MRV9QSSwKKyAgWE1MX1JPTEVfQ09NTUVOVCwKKyNpZmRlZiBYTUxfRFRECisg
IFhNTF9ST0xFX1RFWFRfREVDTCwKKyAgWE1MX1JPTEVfSUdOT1JFX1NFQ1QsCisgIFhNTF9ST0xF
X0lOTkVSX1BBUkFNX0VOVElUWV9SRUYsCisjZW5kaWYgLyogWE1MX0RURCAqLworICBYTUxfUk9M
RV9QQVJBTV9FTlRJVFlfUkVGCit9OworCit0eXBlZGVmIHN0cnVjdCBwcm9sb2dfc3RhdGUgewor
ICBpbnQgKFBUUkNBTEwgKmhhbmRsZXIpIChzdHJ1Y3QgcHJvbG9nX3N0YXRlICpzdGF0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpOwor
ICB1bnNpZ25lZCBsZXZlbDsKKyAgaW50IHJvbGVfbm9uZTsKKyNpZmRlZiBYTUxfRFRECisgIHVu
c2lnbmVkIGluY2x1ZGVMZXZlbDsKKyAgaW50IGRvY3VtZW50RW50aXR5OworICBpbnQgaW5FbnRp
dHlWYWx1ZTsKKyNlbmRpZiAvKiBYTUxfRFREICovCit9IFBST0xPR19TVEFURTsKKwordm9pZCBY
bWxQcm9sb2dTdGF0ZUluaXQoUFJPTE9HX1NUQVRFICopOworI2lmZGVmIFhNTF9EVEQKK3ZvaWQg
WG1sUHJvbG9nU3RhdGVJbml0RXh0ZXJuYWxFbnRpdHkoUFJPTE9HX1NUQVRFICopOworI2VuZGlm
IC8qIFhNTF9EVEQgKi8KKworI2RlZmluZSBYbWxUb2tlblJvbGUoc3RhdGUsIHRvaywgcHRyLCBl
bmQsIGVuYykgXAorICgoKHN0YXRlKS0+aGFuZGxlcikoc3RhdGUsIHRvaywgcHRyLCBlbmQsIGVu
YykpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBub3QgWG1s
Um9sZV9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1sdG9rLmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0
b2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZjA5ZGZjNzJiOWZjODUzODRmMDY4NTAyODRkMjFjOTZlYmMxY2Zh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1sdG9rLmMKQEAgLTAsMCArMSwxNjUxIEBACisv
KiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50
ZXIgTHRkCisgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgor
Ki8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgQ09NUElMRURfRlJPTV9EU1AKKyNp
bmNsdWRlICJ3aW5jb25maWcuaCIKKyNlbGlmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKKyNpbmNs
dWRlICJtYWNjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19hbWlnYW9zX18pCisjaW5jbHVkZSAi
YW1pZ2Fjb25maWcuaCIKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjaW5jbHVkZSAid2F0
Y29tY29uZmlnLmgiCisjZWxzZQorI2lmZGVmIEhBVkVfRVhQQVRfQ09ORklHX0gKKyNpbmNsdWRl
IDxleHBhdF9jb25maWcuaD4KKyNlbmRpZgorI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9E
U1AgKi8KKworI2luY2x1ZGUgImV4cGF0X2V4dGVybmFsLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwu
aCIKKyNpbmNsdWRlICJ4bWx0b2suaCIKKyNpbmNsdWRlICJuYW1ldGFiLmgiCisKKyNpZmRlZiBY
TUxfRFRECisjZGVmaW5lIElHTk9SRV9TRUNUSU9OX1RPS19WVEFCTEUgLCBQUkVGSVgoaWdub3Jl
U2VjdGlvblRvaykKKyNlbHNlCisjZGVmaW5lIElHTk9SRV9TRUNUSU9OX1RPS19WVEFCTEUgLyog
YXMgbm90aGluZyAqLworI2VuZGlmCisKKyNkZWZpbmUgVlRBQkxFMSBcCisgIHsgUFJFRklYKHBy
b2xvZ1RvayksIFBSRUZJWChjb250ZW50VG9rKSwgXAorICAgIFBSRUZJWChjZGF0YVNlY3Rpb25U
b2spIElHTk9SRV9TRUNUSU9OX1RPS19WVEFCTEUgfSwgXAorICB7IFBSRUZJWChhdHRyaWJ1dGVW
YWx1ZVRvayksIFBSRUZJWChlbnRpdHlWYWx1ZVRvaykgfSwgXAorICBQUkVGSVgoc2FtZU5hbWUp
LCBcCisgIFBSRUZJWChuYW1lTWF0Y2hlc0FzY2lpKSwgXAorICBQUkVGSVgobmFtZUxlbmd0aCks
IFwKKyAgUFJFRklYKHNraXBTKSwgXAorICBQUkVGSVgoZ2V0QXR0cyksIFwKKyAgUFJFRklYKGNo
YXJSZWZOdW1iZXIpLCBcCisgIFBSRUZJWChwcmVkZWZpbmVkRW50aXR5TmFtZSksIFwKKyAgUFJF
RklYKHVwZGF0ZVBvc2l0aW9uKSwgXAorICBQUkVGSVgoaXNQdWJsaWNJZCkKKworI2RlZmluZSBW
VEFCTEUgVlRBQkxFMSwgUFJFRklYKHRvVXRmOCksIFBSRUZJWCh0b1V0ZjE2KQorCisjZGVmaW5l
IFVDUzJfR0VUX05BTUlORyhwYWdlcywgaGksIGxvKSBcCisgICAobmFtaW5nQml0bWFwWyhwYWdl
c1toaV0gPDwgMykgKyAoKGxvKSA+PiA1KV0gJiAoMSA8PCAoKGxvKSAmIDB4MUYpKSkKKworLyog
QSAyIGJ5dGUgVVRGLTggcmVwcmVzZW50YXRpb24gc3BsaXRzIHRoZSBjaGFyYWN0ZXJzIDExIGJp
dHMgYmV0d2VlbgorICAgdGhlIGJvdHRvbSA1IGFuZCA2IGJpdHMgb2YgdGhlIGJ5dGVzLiAgV2Ug
bmVlZCA4IGJpdHMgdG8gaW5kZXggaW50bworICAgcGFnZXMsIDMgYml0cyB0byBhZGQgdG8gdGhh
dCBpbmRleCBhbmQgNSBiaXRzIHRvIGdlbmVyYXRlIHRoZSBtYXNrLgorKi8KKyNkZWZpbmUgVVRG
OF9HRVRfTkFNSU5HMihwYWdlcywgYnl0ZSkgXAorICAgIChuYW1pbmdCaXRtYXBbKChwYWdlcylb
KCgoYnl0ZSlbMF0pID4+IDIpICYgN10gPDwgMykgXAorICAgICAgICAgICAgICAgICAgICAgICsg
KCgoKGJ5dGUpWzBdKSAmIDMpIDw8IDEpIFwKKyAgICAgICAgICAgICAgICAgICAgICArICgoKChi
eXRlKVsxXSkgPj4gNSkgJiAxKV0gXAorICAgICAgICAgJiAoMSA8PCAoKChieXRlKVsxXSkgJiAw
eDFGKSkpCisKKy8qIEEgMyBieXRlIFVURi04IHJlcHJlc2VudGF0aW9uIHNwbGl0cyB0aGUgY2hh
cmFjdGVycyAxNiBiaXRzIGJldHdlZW4KKyAgIHRoZSBib3R0b20gNCwgNiBhbmQgNiBiaXRzIG9m
IHRoZSBieXRlcy4gIFdlIG5lZWQgOCBiaXRzIHRvIGluZGV4CisgICBpbnRvIHBhZ2VzLCAzIGJp
dHMgdG8gYWRkIHRvIHRoYXQgaW5kZXggYW5kIDUgYml0cyB0byBnZW5lcmF0ZSB0aGUKKyAgIG1h
c2suCisqLworI2RlZmluZSBVVEY4X0dFVF9OQU1JTkczKHBhZ2VzLCBieXRlKSBcCisgIChuYW1p
bmdCaXRtYXBbKChwYWdlcylbKCgoKGJ5dGUpWzBdKSAmIDB4RikgPDwgNCkgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArICgoKChieXRlKVsxXSkgPj4gMikgJiAweEYpXSBcCisgICAg
ICAgICAgICAgICAgICAgICAgIDw8IDMpIFwKKyAgICAgICAgICAgICAgICAgICAgICArICgoKChi
eXRlKVsxXSkgJiAzKSA8PCAxKSBcCisgICAgICAgICAgICAgICAgICAgICAgKyAoKCgoYnl0ZSlb
Ml0pID4+IDUpICYgMSldIFwKKyAgICAgICAgICYgKDEgPDwgKCgoYnl0ZSlbMl0pICYgMHgxRikp
KQorCisjZGVmaW5lIFVURjhfR0VUX05BTUlORyhwYWdlcywgcCwgbikgXAorICAoKG4pID09IDIg
XAorICA/IFVURjhfR0VUX05BTUlORzIocGFnZXMsIChjb25zdCB1bnNpZ25lZCBjaGFyICopKHAp
KSBcCisgIDogKChuKSA9PSAzIFwKKyAgICAgPyBVVEY4X0dFVF9OQU1JTkczKHBhZ2VzLCAoY29u
c3QgdW5zaWduZWQgY2hhciAqKShwKSkgXAorICAgICA6IDApKQorCisvKiBEZXRlY3Rpb24gb2Yg
aW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMgaXMgYmFzZWQgb24gVGFibGUgMy4xQgorICAgb2YgVW5p
Y29kZSAzLjI6IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMjgvCisg
ICB3aXRoIHRoZSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uIG9mIG5vdCBhbGxvd2luZyB0aGUgVW5p
Y29kZQorICAgY29kZSBwb2ludHMgMHhGRkZGIGFuZCAweEZGRkUgKHNlcXVlbmNlcyBFRixCRixC
RiBhbmQgRUYsQkYsQkUpLgorICAgSW1wbGVtZW50YXRpb24gZGV0YWlsczoKKyAgICAgKEEgJiAw
eDgwKSA9PSAwICAgICBtZWFucyBBIDwgMHg4MAorICAgYW5kCisgICAgIChBICYgMHhDMCkgPT0g
MHhDMCAgbWVhbnMgQSA+IDB4QkYKKyovCisKKyNkZWZpbmUgVVRGOF9JTlZBTElEMihwKSBcCisg
ICgoKnApIDwgMHhDMiB8fCAoKHApWzFdICYgMHg4MCkgPT0gMCB8fCAoKHApWzFdICYgMHhDMCkg
PT0gMHhDMCkKKworI2RlZmluZSBVVEY4X0lOVkFMSUQzKHApIFwKKyAgKCgocClbMl0gJiAweDgw
KSA9PSAwIFwKKyAgfHwgXAorICAoKCpwKSA9PSAweEVGICYmIChwKVsxXSA9PSAweEJGIFwKKyAg
ICA/IFwKKyAgICAocClbMl0gPiAweEJEIFwKKyAgICA6IFwKKyAgICAoKHApWzJdICYgMHhDMCkg
PT0gMHhDMCkgXAorICB8fCBcCisgICgoKnApID09IDB4RTAgXAorICAgID8gXAorICAgIChwKVsx
XSA8IDB4QTAgfHwgKChwKVsxXSAmIDB4QzApID09IDB4QzAgXAorICAgIDogXAorICAgICgocClb
MV0gJiAweDgwKSA9PSAwIFwKKyAgICB8fCBcCisgICAgKCgqcCkgPT0gMHhFRCA/IChwKVsxXSA+
IDB4OUYgOiAoKHApWzFdICYgMHhDMCkgPT0gMHhDMCkpKQorCisjZGVmaW5lIFVURjhfSU5WQUxJ
RDQocCkgXAorICAoKChwKVszXSAmIDB4ODApID09IDAgfHwgKChwKVszXSAmIDB4QzApID09IDB4
QzAgXAorICB8fCBcCisgICgocClbMl0gJiAweDgwKSA9PSAwIHx8ICgocClbMl0gJiAweEMwKSA9
PSAweEMwIFwKKyAgfHwgXAorICAoKCpwKSA9PSAweEYwIFwKKyAgICA/IFwKKyAgICAocClbMV0g
PCAweDkwIHx8ICgocClbMV0gJiAweEMwKSA9PSAweEMwIFwKKyAgICA6IFwKKyAgICAoKHApWzFd
ICYgMHg4MCkgPT0gMCBcCisgICAgfHwgXAorICAgICgoKnApID09IDB4RjQgPyAocClbMV0gPiAw
eDhGIDogKChwKVsxXSAmIDB4QzApID09IDB4QzApKSkKKworc3RhdGljIGludCBQVFJGQVNUQ0FM
TAoraXNOZXZlcihjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwKQoreworICByZXR1
cm4gMDsKK30KKworc3RhdGljIGludCBQVFJGQVNUQ0FMTAordXRmOF9pc05hbWUyKGNvbnN0IEVO
Q09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCit7CisgIHJldHVybiBVVEY4X0dFVF9OQU1JTkcy
KG5hbWVQYWdlcywgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwKTsKK30KKworc3RhdGljIGludCBQ
VFJGQVNUQ0FMTAordXRmOF9pc05hbWUzKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIg
KnApCit7CisgIHJldHVybiBVVEY4X0dFVF9OQU1JTkczKG5hbWVQYWdlcywgKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKilwKTsKK30KKworI2RlZmluZSB1dGY4X2lzTmFtZTQgaXNOZXZlcgorCitzdGF0
aWMgaW50IFBUUkZBU1RDQUxMCit1dGY4X2lzTm1zdHJ0Mihjb25zdCBFTkNPRElORyAqZW5jLCBj
b25zdCBjaGFyICpwKQoreworICByZXR1cm4gVVRGOF9HRVRfTkFNSU5HMihubXN0cnRQYWdlcywg
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwKTsKK30KKworc3RhdGljIGludCBQVFJGQVNUQ0FMTAor
dXRmOF9pc05tc3RydDMoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKK3sKKyAg
cmV0dXJuIFVURjhfR0VUX05BTUlORzMobm1zdHJ0UGFnZXMsIChjb25zdCB1bnNpZ25lZCBjaGFy
ICopcCk7Cit9CisKKyNkZWZpbmUgdXRmOF9pc05tc3RydDQgaXNOZXZlcgorCitzdGF0aWMgaW50
IFBUUkZBU1RDQUxMCit1dGY4X2lzSW52YWxpZDIoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3Qg
Y2hhciAqcCkKK3sKKyAgcmV0dXJuIFVURjhfSU5WQUxJRDIoKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KilwKTsKK30KKworc3RhdGljIGludCBQVFJGQVNUQ0FMTAordXRmOF9pc0ludmFsaWQzKGNvbnN0
IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCit7CisgIHJldHVybiBVVEY4X0lOVkFMSUQz
KChjb25zdCB1bnNpZ25lZCBjaGFyICopcCk7Cit9CisKK3N0YXRpYyBpbnQgUFRSRkFTVENBTEwK
K3V0ZjhfaXNJbnZhbGlkNChjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwKQorewor
ICByZXR1cm4gVVRGOF9JTlZBTElENCgoY29uc3QgdW5zaWduZWQgY2hhciAqKXApOworfQorCitz
dHJ1Y3Qgbm9ybWFsX2VuY29kaW5nIHsKKyAgRU5DT0RJTkcgZW5jOworICB1bnNpZ25lZCBjaGFy
IHR5cGVbMjU2XTsKKyNpZmRlZiBYTUxfTUlOX1NJWkUKKyAgaW50IChQVFJGQVNUQ0FMTCAqYnl0
ZVR5cGUpKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKik7CisgIGludCAoUFRSRkFTVENB
TEwgKmlzTmFtZU1pbikoY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAqKTsKKyAgaW50IChQ
VFJGQVNUQ0FMTCAqaXNObXN0cnRNaW4pKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKik7
CisgIGludCAoUFRSRkFTVENBTEwgKmJ5dGVUb0FzY2lpKShjb25zdCBFTkNPRElORyAqLCBjb25z
dCBjaGFyICopOworICBpbnQgKFBUUkNBTEwgKmNoYXJNYXRjaGVzKShjb25zdCBFTkNPRElORyAq
LCBjb25zdCBjaGFyICosIGludCk7CisjZW5kaWYgLyogWE1MX01JTl9TSVpFICovCisgIGludCAo
UFRSRkFTVENBTEwgKmlzTmFtZTIpKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKik7Cisg
IGludCAoUFRSRkFTVENBTEwgKmlzTmFtZTMpKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIg
Kik7CisgIGludCAoUFRSRkFTVENBTEwgKmlzTmFtZTQpKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0
IGNoYXIgKik7CisgIGludCAoUFRSRkFTVENBTEwgKmlzTm1zdHJ0MikoY29uc3QgRU5DT0RJTkcg
KiwgY29uc3QgY2hhciAqKTsKKyAgaW50IChQVFJGQVNUQ0FMTCAqaXNObXN0cnQzKShjb25zdCBF
TkNPRElORyAqLCBjb25zdCBjaGFyICopOworICBpbnQgKFBUUkZBU1RDQUxMICppc05tc3RydDQp
KGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKik7CisgIGludCAoUFRSRkFTVENBTEwgKmlz
SW52YWxpZDIpKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKik7CisgIGludCAoUFRSRkFT
VENBTEwgKmlzSW52YWxpZDMpKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKik7CisgIGlu
dCAoUFRSRkFTVENBTEwgKmlzSW52YWxpZDQpKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIg
Kik7Cit9OworCisjZGVmaW5lIEFTX05PUk1BTF9FTkNPRElORyhlbmMpICAgKChjb25zdCBzdHJ1
Y3Qgbm9ybWFsX2VuY29kaW5nICopIChlbmMpKQorCisjaWZkZWYgWE1MX01JTl9TSVpFCisKKyNk
ZWZpbmUgU1RBTkRBUkRfVlRBQkxFKEUpIFwKKyBFICMjIGJ5dGVUeXBlLCBcCisgRSAjIyBpc05h
bWVNaW4sIFwKKyBFICMjIGlzTm1zdHJ0TWluLCBcCisgRSAjIyBieXRlVG9Bc2NpaSwgXAorIEUg
IyMgY2hhck1hdGNoZXMsCisKKyNlbHNlCisKKyNkZWZpbmUgU1RBTkRBUkRfVlRBQkxFKEUpIC8q
IGFzIG5vdGhpbmcgKi8KKworI2VuZGlmCisKKyNkZWZpbmUgTk9STUFMX1ZUQUJMRShFKSBcCisg
RSAjIyBpc05hbWUyLCBcCisgRSAjIyBpc05hbWUzLCBcCisgRSAjIyBpc05hbWU0LCBcCisgRSAj
IyBpc05tc3RydDIsIFwKKyBFICMjIGlzTm1zdHJ0MywgXAorIEUgIyMgaXNObXN0cnQ0LCBcCisg
RSAjIyBpc0ludmFsaWQyLCBcCisgRSAjIyBpc0ludmFsaWQzLCBcCisgRSAjIyBpc0ludmFsaWQ0
CisKK3N0YXRpYyBpbnQgRkFTVENBTEwgY2hlY2tDaGFyUmVmTnVtYmVyKGludCk7CisKKyNpbmNs
dWRlICJ4bWx0b2tfaW1wbC5oIgorI2luY2x1ZGUgImFzY2lpLmgiCisKKyNpZmRlZiBYTUxfTUlO
X1NJWkUKKyNkZWZpbmUgc2JfaXNOYW1lTWluIGlzTmV2ZXIKKyNkZWZpbmUgc2JfaXNObXN0cnRN
aW4gaXNOZXZlcgorI2VuZGlmCisKKyNpZmRlZiBYTUxfTUlOX1NJWkUKKyNkZWZpbmUgTUlOQlBD
KGVuYykgKChlbmMpLT5taW5CeXRlc1BlckNoYXIpCisjZWxzZQorLyogbWluaW11bSBieXRlcyBw
ZXIgY2hhcmFjdGVyICovCisjZGVmaW5lIE1JTkJQQyhlbmMpIDEKKyNlbmRpZgorCisjZGVmaW5l
IFNCX0JZVEVfVFlQRShlbmMsIHApIFwKKyAgKCgoc3RydWN0IG5vcm1hbF9lbmNvZGluZyAqKShl
bmMpKS0+dHlwZVsodW5zaWduZWQgY2hhcikqKHApXSkKKworI2lmZGVmIFhNTF9NSU5fU0laRQor
c3RhdGljIGludCBQVFJGQVNUQ0FMTAorc2JfYnl0ZVR5cGUoY29uc3QgRU5DT0RJTkcgKmVuYywg
Y29uc3QgY2hhciAqcCkKK3sKKyAgcmV0dXJuIFNCX0JZVEVfVFlQRShlbmMsIHApOworfQorI2Rl
ZmluZSBCWVRFX1RZUEUoZW5jLCBwKSBcCisgKEFTX05PUk1BTF9FTkNPRElORyhlbmMpLT5ieXRl
VHlwZShlbmMsIHApKQorI2Vsc2UKKyNkZWZpbmUgQllURV9UWVBFKGVuYywgcCkgU0JfQllURV9U
WVBFKGVuYywgcCkKKyNlbmRpZgorCisjaWZkZWYgWE1MX01JTl9TSVpFCisjZGVmaW5lIEJZVEVf
VE9fQVNDSUkoZW5jLCBwKSBcCisgKEFTX05PUk1BTF9FTkNPRElORyhlbmMpLT5ieXRlVG9Bc2Np
aShlbmMsIHApKQorc3RhdGljIGludCBQVFJGQVNUQ0FMTAorc2JfYnl0ZVRvQXNjaWkoY29uc3Qg
RU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKK3sKKyAgcmV0dXJuICpwOworfQorI2Vsc2UK
KyNkZWZpbmUgQllURV9UT19BU0NJSShlbmMsIHApICgqKHApKQorI2VuZGlmCisKKyNkZWZpbmUg
SVNfTkFNRV9DSEFSKGVuYywgcCwgbikgXAorIChBU19OT1JNQUxfRU5DT0RJTkcoZW5jKS0+aXNO
YW1lICMjIG4oZW5jLCBwKSkKKyNkZWZpbmUgSVNfTk1TVFJUX0NIQVIoZW5jLCBwLCBuKSBcCisg
KEFTX05PUk1BTF9FTkNPRElORyhlbmMpLT5pc05tc3RydCAjIyBuKGVuYywgcCkpCisjZGVmaW5l
IElTX0lOVkFMSURfQ0hBUihlbmMsIHAsIG4pIFwKKyAoQVNfTk9STUFMX0VOQ09ESU5HKGVuYykt
PmlzSW52YWxpZCAjIyBuKGVuYywgcCkpCisKKyNpZmRlZiBYTUxfTUlOX1NJWkUKKyNkZWZpbmUg
SVNfTkFNRV9DSEFSX01JTkJQQyhlbmMsIHApIFwKKyAoQVNfTk9STUFMX0VOQ09ESU5HKGVuYykt
PmlzTmFtZU1pbihlbmMsIHApKQorI2RlZmluZSBJU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBw
KSBcCisgKEFTX05PUk1BTF9FTkNPRElORyhlbmMpLT5pc05tc3RydE1pbihlbmMsIHApKQorI2Vs
c2UKKyNkZWZpbmUgSVNfTkFNRV9DSEFSX01JTkJQQyhlbmMsIHApICgwKQorI2RlZmluZSBJU19O
TVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKSAoMCkKKyNlbmRpZgorCisjaWZkZWYgWE1MX01JTl9T
SVpFCisjZGVmaW5lIENIQVJfTUFUQ0hFUyhlbmMsIHAsIGMpIFwKKyAoQVNfTk9STUFMX0VOQ09E
SU5HKGVuYyktPmNoYXJNYXRjaGVzKGVuYywgcCwgYykpCitzdGF0aWMgaW50IFBUUkNBTEwKK3Ni
X2NoYXJNYXRjaGVzKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnAsIGludCBjKQor
eworICByZXR1cm4gKnAgPT0gYzsKK30KKyNlbHNlCisvKiBjIGlzIGFuIEFTQ0lJIGNoYXJhY3Rl
ciAqLworI2RlZmluZSBDSEFSX01BVENIRVMoZW5jLCBwLCBjKSAoKihwKSA9PSBjKQorI2VuZGlm
CisKKyNkZWZpbmUgUFJFRklYKGlkZW50KSBub3JtYWxfICMjIGlkZW50CisjZGVmaW5lIFhNTF9U
T0tfSU1QTF9DCisjaW5jbHVkZSAieG1sdG9rX2ltcGwuYyIKKyN1bmRlZiBYTUxfVE9LX0lNUExf
QworCisjdW5kZWYgTUlOQlBDCisjdW5kZWYgQllURV9UWVBFCisjdW5kZWYgQllURV9UT19BU0NJ
SQorI3VuZGVmIENIQVJfTUFUQ0hFUworI3VuZGVmIElTX05BTUVfQ0hBUgorI3VuZGVmIElTX05B
TUVfQ0hBUl9NSU5CUEMKKyN1bmRlZiBJU19OTVNUUlRfQ0hBUgorI3VuZGVmIElTX05NU1RSVF9D
SEFSX01JTkJQQworI3VuZGVmIElTX0lOVkFMSURfQ0hBUgorCitlbnVtIHsgIC8qIFVURjhfY3Zh
bE4gaXMgdmFsdWUgb2YgbWFza2VkIGZpcnN0IGJ5dGUgb2YgTiBieXRlIHNlcXVlbmNlICovCisg
IFVURjhfY3ZhbDEgPSAweDAwLAorICBVVEY4X2N2YWwyID0gMHhjMCwKKyAgVVRGOF9jdmFsMyA9
IDB4ZTAsCisgIFVURjhfY3ZhbDQgPSAweGYwCit9OworCitzdGF0aWMgdm9pZCBQVFJDQUxMCit1
dGY4X3RvVXRmOChjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAgICAgY29uc3QgY2hhciAq
KmZyb21QLCBjb25zdCBjaGFyICpmcm9tTGltLAorICAgICAgICAgICAgY2hhciAqKnRvUCwgY29u
c3QgY2hhciAqdG9MaW0pCit7CisgIGNoYXIgKnRvOworICBjb25zdCBjaGFyICpmcm9tOworICBp
ZiAoZnJvbUxpbSAtICpmcm9tUCA+IHRvTGltIC0gKnRvUCkgeworICAgIC8qIEF2b2lkIGNvcHlp
bmcgcGFydGlhbCBjaGFyYWN0ZXJzLiAqLworICAgIGZvciAoZnJvbUxpbSA9ICpmcm9tUCArICh0
b0xpbSAtICp0b1ApOyBmcm9tTGltID4gKmZyb21QOyBmcm9tTGltLS0pCisgICAgICBpZiAoKCh1
bnNpZ25lZCBjaGFyKWZyb21MaW1bLTFdICYgMHhjMCkgIT0gMHg4MCkKKyAgICAgICAgYnJlYWs7
CisgIH0KKyAgZm9yICh0byA9ICp0b1AsIGZyb20gPSAqZnJvbVA7IGZyb20gIT0gZnJvbUxpbTsg
ZnJvbSsrLCB0bysrKQorICAgICp0byA9ICpmcm9tOworICAqZnJvbVAgPSBmcm9tOworICAqdG9Q
ID0gdG87Cit9CisKK3N0YXRpYyB2b2lkIFBUUkNBTEwKK3V0ZjhfdG9VdGYxNihjb25zdCBFTkNP
RElORyAqZW5jLAorICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipmcm9tUCwgY29uc3QgY2hhciAq
ZnJvbUxpbSwKKyAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqKnRvUCwgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgKnRvTGltKQoreworICB1bnNpZ25lZCBzaG9ydCAqdG8gPSAqdG9QOworICBjb25z
dCBjaGFyICpmcm9tID0gKmZyb21QOworICB3aGlsZSAoZnJvbSAhPSBmcm9tTGltICYmIHRvICE9
IHRvTGltKSB7CisgICAgc3dpdGNoICgoKHN0cnVjdCBub3JtYWxfZW5jb2RpbmcgKillbmMpLT50
eXBlWyh1bnNpZ25lZCBjaGFyKSpmcm9tXSkgeworICAgIGNhc2UgQlRfTEVBRDI6CisgICAgICAq
dG8rKyA9ICh1bnNpZ25lZCBzaG9ydCkoKChmcm9tWzBdICYgMHgxZikgPDwgNikgfCAoZnJvbVsx
XSAmIDB4M2YpKTsKKyAgICAgIGZyb20gKz0gMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQlRf
TEVBRDM6CisgICAgICAqdG8rKyA9ICh1bnNpZ25lZCBzaG9ydCkoKChmcm9tWzBdICYgMHhmKSA8
PCAxMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgoZnJvbVsxXSAmIDB4M2Yp
IDw8IDYpIHwgKGZyb21bMl0gJiAweDNmKSk7CisgICAgICBmcm9tICs9IDM7CisgICAgICBicmVh
azsKKyAgICBjYXNlIEJUX0xFQUQ0OgorICAgICAgeworICAgICAgICB1bnNpZ25lZCBsb25nIG47
CisgICAgICAgIGlmICh0byArIDEgPT0gdG9MaW0pCisgICAgICAgICAgZ290byBhZnRlcjsKKyAg
ICAgICAgbiA9ICgoZnJvbVswXSAmIDB4NykgPDwgMTgpIHwgKChmcm9tWzFdICYgMHgzZikgPDwg
MTIpCisgICAgICAgICAgICB8ICgoZnJvbVsyXSAmIDB4M2YpIDw8IDYpIHwgKGZyb21bM10gJiAw
eDNmKTsKKyAgICAgICAgbiAtPSAweDEwMDAwOworICAgICAgICB0b1swXSA9ICh1bnNpZ25lZCBz
aG9ydCkoKG4gPj4gMTApIHwgMHhEODAwKTsKKyAgICAgICAgdG9bMV0gPSAodW5zaWduZWQgc2hv
cnQpKChuICYgMHgzRkYpIHwgMHhEQzAwKTsKKyAgICAgICAgdG8gKz0gMjsKKyAgICAgICAgZnJv
bSArPSA0OworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICp0bysr
ID0gKmZyb20rKzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorYWZ0ZXI6CisgICpmcm9tUCA9
IGZyb207CisgICp0b1AgPSB0bzsKK30KKworI2lmZGVmIFhNTF9OUworc3RhdGljIGNvbnN0IHN0
cnVjdCBub3JtYWxfZW5jb2RpbmcgdXRmOF9lbmNvZGluZ19ucyA9IHsKKyAgeyBWVEFCTEUxLCB1
dGY4X3RvVXRmOCwgdXRmOF90b1V0ZjE2LCAxLCAxLCAwIH0sCisgIHsKKyNpbmNsdWRlICJhc2Np
aXRhYi5oIgorI2luY2x1ZGUgInV0Zjh0YWIuaCIKKyAgfSwKKyAgU1RBTkRBUkRfVlRBQkxFKHNi
XykgTk9STUFMX1ZUQUJMRSh1dGY4XykKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVj
dCBub3JtYWxfZW5jb2RpbmcgdXRmOF9lbmNvZGluZyA9IHsKKyAgeyBWVEFCTEUxLCB1dGY4X3Rv
VXRmOCwgdXRmOF90b1V0ZjE2LCAxLCAxLCAwIH0sCisgIHsKKyNkZWZpbmUgQlRfQ09MT04gQlRf
Tk1TVFJUCisjaW5jbHVkZSAiYXNjaWl0YWIuaCIKKyN1bmRlZiBCVF9DT0xPTgorI2luY2x1ZGUg
InV0Zjh0YWIuaCIKKyAgfSwKKyAgU1RBTkRBUkRfVlRBQkxFKHNiXykgTk9STUFMX1ZUQUJMRSh1
dGY4XykKK307CisKKyNpZmRlZiBYTUxfTlMKKworc3RhdGljIGNvbnN0IHN0cnVjdCBub3JtYWxf
ZW5jb2RpbmcgaW50ZXJuYWxfdXRmOF9lbmNvZGluZ19ucyA9IHsKKyAgeyBWVEFCTEUxLCB1dGY4
X3RvVXRmOCwgdXRmOF90b1V0ZjE2LCAxLCAxLCAwIH0sCisgIHsKKyNpbmNsdWRlICJpYXNjaWl0
YWIuaCIKKyNpbmNsdWRlICJ1dGY4dGFiLmgiCisgIH0sCisgIFNUQU5EQVJEX1ZUQUJMRShzYl8p
IE5PUk1BTF9WVEFCTEUodXRmOF8pCit9OworCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVj
dCBub3JtYWxfZW5jb2RpbmcgaW50ZXJuYWxfdXRmOF9lbmNvZGluZyA9IHsKKyAgeyBWVEFCTEUx
LCB1dGY4X3RvVXRmOCwgdXRmOF90b1V0ZjE2LCAxLCAxLCAwIH0sCisgIHsKKyNkZWZpbmUgQlRf
Q09MT04gQlRfTk1TVFJUCisjaW5jbHVkZSAiaWFzY2lpdGFiLmgiCisjdW5kZWYgQlRfQ09MT04K
KyNpbmNsdWRlICJ1dGY4dGFiLmgiCisgIH0sCisgIFNUQU5EQVJEX1ZUQUJMRShzYl8pIE5PUk1B
TF9WVEFCTEUodXRmOF8pCit9OworCitzdGF0aWMgdm9pZCBQVFJDQUxMCitsYXRpbjFfdG9VdGY4
KGNvbnN0IEVOQ09ESU5HICplbmMsCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipmcm9tUCwg
Y29uc3QgY2hhciAqZnJvbUxpbSwKKyAgICAgICAgICAgICAgY2hhciAqKnRvUCwgY29uc3QgY2hh
ciAqdG9MaW0pCit7CisgIGZvciAoOzspIHsKKyAgICB1bnNpZ25lZCBjaGFyIGM7CisgICAgaWYg
KCpmcm9tUCA9PSBmcm9tTGltKQorICAgICAgYnJlYWs7CisgICAgYyA9ICh1bnNpZ25lZCBjaGFy
KSoqZnJvbVA7CisgICAgaWYgKGMgJiAweDgwKSB7CisgICAgICBpZiAodG9MaW0gLSAqdG9QIDwg
MikKKyAgICAgICAgYnJlYWs7CisgICAgICAqKCp0b1ApKysgPSAoY2hhcikoKGMgPj4gNikgfCBV
VEY4X2N2YWwyKTsKKyAgICAgICooKnRvUCkrKyA9IChjaGFyKSgoYyAmIDB4M2YpIHwgMHg4MCk7
CisgICAgICAoKmZyb21QKSsrOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmICgqdG9QID09
IHRvTGltKQorICAgICAgICBicmVhazsKKyAgICAgICooKnRvUCkrKyA9ICooKmZyb21QKSsrOwor
ICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZCBQVFJDQUxMCitsYXRpbjFfdG9VdGYxNihjb25z
dCBFTkNPRElORyAqZW5jLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmZyb21QLCBjb25z
dCBjaGFyICpmcm9tTGltLAorICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKip0b1AsIGNv
bnN0IHVuc2lnbmVkIHNob3J0ICp0b0xpbSkKK3sKKyAgd2hpbGUgKCpmcm9tUCAhPSBmcm9tTGlt
ICYmICp0b1AgIT0gdG9MaW0pCisgICAgKigqdG9QKSsrID0gKHVuc2lnbmVkIGNoYXIpKigqZnJv
bVApKys7Cit9CisKKyNpZmRlZiBYTUxfTlMKKworc3RhdGljIGNvbnN0IHN0cnVjdCBub3JtYWxf
ZW5jb2RpbmcgbGF0aW4xX2VuY29kaW5nX25zID0geworICB7IFZUQUJMRTEsIGxhdGluMV90b1V0
ZjgsIGxhdGluMV90b1V0ZjE2LCAxLCAwLCAwIH0sCisgIHsKKyNpbmNsdWRlICJhc2NpaXRhYi5o
IgorI2luY2x1ZGUgImxhdGluMXRhYi5oIgorICB9LAorICBTVEFOREFSRF9WVEFCTEUoc2JfKQor
fTsKKworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgbm9ybWFsX2VuY29kaW5nIGxhdGlu
MV9lbmNvZGluZyA9IHsKKyAgeyBWVEFCTEUxLCBsYXRpbjFfdG9VdGY4LCBsYXRpbjFfdG9VdGYx
NiwgMSwgMCwgMCB9LAorICB7CisjZGVmaW5lIEJUX0NPTE9OIEJUX05NU1RSVAorI2luY2x1ZGUg
ImFzY2lpdGFiLmgiCisjdW5kZWYgQlRfQ09MT04KKyNpbmNsdWRlICJsYXRpbjF0YWIuaCIKKyAg
fSwKKyAgU1RBTkRBUkRfVlRBQkxFKHNiXykKK307CisKK3N0YXRpYyB2b2lkIFBUUkNBTEwKK2Fz
Y2lpX3RvVXRmOChjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAgICAgIGNvbnN0IGNoYXIg
Kipmcm9tUCwgY29uc3QgY2hhciAqZnJvbUxpbSwKKyAgICAgICAgICAgICBjaGFyICoqdG9QLCBj
b25zdCBjaGFyICp0b0xpbSkKK3sKKyAgd2hpbGUgKCpmcm9tUCAhPSBmcm9tTGltICYmICp0b1Ag
IT0gdG9MaW0pCisgICAgKigqdG9QKSsrID0gKigqZnJvbVApKys7Cit9CisKKyNpZmRlZiBYTUxf
TlMKKworc3RhdGljIGNvbnN0IHN0cnVjdCBub3JtYWxfZW5jb2RpbmcgYXNjaWlfZW5jb2Rpbmdf
bnMgPSB7CisgIHsgVlRBQkxFMSwgYXNjaWlfdG9VdGY4LCBsYXRpbjFfdG9VdGYxNiwgMSwgMSwg
MCB9LAorICB7CisjaW5jbHVkZSAiYXNjaWl0YWIuaCIKKy8qIEJUX05PTlhNTCA9PSAwICovCisg
IH0sCisgIFNUQU5EQVJEX1ZUQUJMRShzYl8pCit9OworCisjZW5kaWYKKworc3RhdGljIGNvbnN0
IHN0cnVjdCBub3JtYWxfZW5jb2RpbmcgYXNjaWlfZW5jb2RpbmcgPSB7CisgIHsgVlRBQkxFMSwg
YXNjaWlfdG9VdGY4LCBsYXRpbjFfdG9VdGYxNiwgMSwgMSwgMCB9LAorICB7CisjZGVmaW5lIEJU
X0NPTE9OIEJUX05NU1RSVAorI2luY2x1ZGUgImFzY2lpdGFiLmgiCisjdW5kZWYgQlRfQ09MT04K
Ky8qIEJUX05PTlhNTCA9PSAwICovCisgIH0sCisgIFNUQU5EQVJEX1ZUQUJMRShzYl8pCit9Owor
CitzdGF0aWMgaW50IFBUUkZBU1RDQUxMCit1bmljb2RlX2J5dGVfdHlwZShjaGFyIGhpLCBjaGFy
IGxvKQoreworICBzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKWhpKSB7CisgIGNhc2UgMHhEODogY2Fz
ZSAweEQ5OiBjYXNlIDB4REE6IGNhc2UgMHhEQjoKKyAgICByZXR1cm4gQlRfTEVBRDQ7CisgIGNh
c2UgMHhEQzogY2FzZSAweEREOiBjYXNlIDB4REU6IGNhc2UgMHhERjoKKyAgICByZXR1cm4gQlRf
VFJBSUw7CisgIGNhc2UgMHhGRjoKKyAgICBzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKWxvKSB7Cisg
ICAgY2FzZSAweEZGOgorICAgIGNhc2UgMHhGRToKKyAgICAgIHJldHVybiBCVF9OT05YTUw7Cisg
ICAgfQorICAgIGJyZWFrOworICB9CisgIHJldHVybiBCVF9OT05BU0NJSTsKK30KKworI2RlZmlu
ZSBERUZJTkVfVVRGMTZfVE9fVVRGOChFKSBcCitzdGF0aWMgdm9pZCAgUFRSQ0FMTCBcCitFICMj
IHRvVXRmOChjb25zdCBFTkNPRElORyAqZW5jLCBcCisgICAgICAgICAgICBjb25zdCBjaGFyICoq
ZnJvbVAsIGNvbnN0IGNoYXIgKmZyb21MaW0sIFwKKyAgICAgICAgICAgIGNoYXIgKip0b1AsIGNv
bnN0IGNoYXIgKnRvTGltKSBcCit7IFwKKyAgY29uc3QgY2hhciAqZnJvbTsgXAorICBmb3IgKGZy
b20gPSAqZnJvbVA7IGZyb20gIT0gZnJvbUxpbTsgZnJvbSArPSAyKSB7IFwKKyAgICBpbnQgcGxh
bmU7IFwKKyAgICB1bnNpZ25lZCBjaGFyIGxvMjsgXAorICAgIHVuc2lnbmVkIGNoYXIgbG8gPSBH
RVRfTE8oZnJvbSk7IFwKKyAgICB1bnNpZ25lZCBjaGFyIGhpID0gR0VUX0hJKGZyb20pOyBcCisg
ICAgc3dpdGNoIChoaSkgeyBcCisgICAgY2FzZSAwOiBcCisgICAgICBpZiAobG8gPCAweDgwKSB7
IFwKKyAgICAgICAgaWYgKCp0b1AgPT0gdG9MaW0pIHsgXAorICAgICAgICAgICpmcm9tUCA9IGZy
b207IFwKKyAgICAgICAgICByZXR1cm47IFwKKyAgICAgICAgfSBcCisgICAgICAgICooKnRvUCkr
KyA9IGxvOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgICB9IFwKKyAgICAgIC8qIGZhbGwgdGhy
b3VnaCAqLyBcCisgICAgY2FzZSAweDE6IGNhc2UgMHgyOiBjYXNlIDB4MzogXAorICAgIGNhc2Ug
MHg0OiBjYXNlIDB4NTogY2FzZSAweDY6IGNhc2UgMHg3OiBcCisgICAgICBpZiAodG9MaW0gLSAg
KnRvUCA8IDIpIHsgXAorICAgICAgICAqZnJvbVAgPSBmcm9tOyBcCisgICAgICAgIHJldHVybjsg
XAorICAgICAgfSBcCisgICAgICAqKCp0b1ApKysgPSAoKGxvID4+IDYpIHwgKGhpIDw8IDIpIHwg
IFVURjhfY3ZhbDIpOyBcCisgICAgICAqKCp0b1ApKysgPSAoKGxvICYgMHgzZikgfCAweDgwKTsg
XAorICAgICAgYnJlYWs7IFwKKyAgICBkZWZhdWx0OiBcCisgICAgICBpZiAodG9MaW0gLSAgKnRv
UCA8IDMpICB7IFwKKyAgICAgICAgKmZyb21QID0gZnJvbTsgXAorICAgICAgICByZXR1cm47IFwK
KyAgICAgIH0gXAorICAgICAgLyogMTYgYml0cyBkaXZpZGVkIDQsIDYsIDYgYW1vbmdzdCAzIGJ5
dGVzICovIFwKKyAgICAgICooKnRvUCkrKyA9ICgoaGkgPj4gNCkgfCBVVEY4X2N2YWwzKTsgXAor
ICAgICAgKigqdG9QKSsrID0gKCgoaGkgJiAweGYpIDw8IDIpIHwgKGxvID4+IDYpIHwgMHg4MCk7
IFwKKyAgICAgICooKnRvUCkrKyA9ICgobG8gJiAweDNmKSB8IDB4ODApOyBcCisgICAgICBicmVh
azsgXAorICAgIGNhc2UgMHhEODogY2FzZSAweEQ5OiBjYXNlIDB4REE6IGNhc2UgMHhEQjogXAor
ICAgICAgaWYgKHRvTGltIC0gICp0b1AgPCA0KSB7IFwKKyAgICAgICAgKmZyb21QID0gZnJvbTsg
XAorICAgICAgICByZXR1cm47IFwKKyAgICAgIH0gXAorICAgICAgcGxhbmUgPSAoKChoaSAmIDB4
MykgPDwgMikgfCAoKGxvID4+IDYpICYgMHgzKSkgKyAxOyBcCisgICAgICAqKCp0b1ApKysgPSAo
KHBsYW5lID4+IDIpIHwgVVRGOF9jdmFsNCk7IFwKKyAgICAgICooKnRvUCkrKyA9ICgoKGxvID4+
IDIpICYgMHhGKSB8ICgocGxhbmUgJiAweDMpIDw8IDQpIHwgMHg4MCk7IFwKKyAgICAgIGZyb20g
Kz0gMjsgXAorICAgICAgbG8yID0gR0VUX0xPKGZyb20pOyBcCisgICAgICAqKCp0b1ApKysgPSAo
KChsbyAmIDB4MykgPDwgNCkgXAorICAgICAgICAgICAgICAgICAgIHwgKChHRVRfSEkoZnJvbSkg
JiAweDMpIDw8IDIpIFwKKyAgICAgICAgICAgICAgICAgICB8IChsbzIgPj4gNikgXAorICAgICAg
ICAgICAgICAgICAgIHwgMHg4MCk7IFwKKyAgICAgICooKnRvUCkrKyA9ICgobG8yICYgMHgzZikg
fCAweDgwKTsgXAorICAgICAgYnJlYWs7IFwKKyAgICB9IFwKKyAgfSBcCisgICpmcm9tUCA9IGZy
b207IFwKK30KKworI2RlZmluZSBERUZJTkVfVVRGMTZfVE9fVVRGMTYoRSkgXAorc3RhdGljIHZv
aWQgIFBUUkNBTEwgXAorRSAjIyB0b1V0ZjE2KGNvbnN0IEVOQ09ESU5HICplbmMsIFwKKyAgICAg
ICAgICAgICBjb25zdCBjaGFyICoqZnJvbVAsIGNvbnN0IGNoYXIgKmZyb21MaW0sIFwKKyAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCAqKnRvUCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKnRvTGlt
KSBcCit7IFwKKyAgLyogQXZvaWQgY29weWluZyBmaXJzdCBoYWxmIG9ubHkgb2Ygc3Vycm9nYXRl
ICovIFwKKyAgaWYgKGZyb21MaW0gLSAqZnJvbVAgPiAoKHRvTGltIC0gKnRvUCkgPDwgMSkgXAor
ICAgICAgJiYgKEdFVF9ISShmcm9tTGltIC0gMikgJiAweEY4KSA9PSAweEQ4KSBcCisgICAgZnJv
bUxpbSAtPSAyOyBcCisgIGZvciAoOyAqZnJvbVAgIT0gZnJvbUxpbSAmJiAqdG9QICE9IHRvTGlt
OyAqZnJvbVAgKz0gMikgXAorICAgICooKnRvUCkrKyA9IChHRVRfSEkoKmZyb21QKSA8PCA4KSB8
IEdFVF9MTygqZnJvbVApOyBcCit9CisKKyNkZWZpbmUgU0VUMihwdHIsIGNoKSBcCisgICgoKHB0
cilbMF0gPSAoKGNoKSAmIDB4ZmYpKSwgKChwdHIpWzFdID0gKChjaCkgPj4gOCkpKQorI2RlZmlu
ZSBHRVRfTE8ocHRyKSAoKHVuc2lnbmVkIGNoYXIpKHB0cilbMF0pCisjZGVmaW5lIEdFVF9ISShw
dHIpICgodW5zaWduZWQgY2hhcikocHRyKVsxXSkKKworREVGSU5FX1VURjE2X1RPX1VURjgobGl0
dGxlMl8pCitERUZJTkVfVVRGMTZfVE9fVVRGMTYobGl0dGxlMl8pCisKKyN1bmRlZiBTRVQyCisj
dW5kZWYgR0VUX0xPCisjdW5kZWYgR0VUX0hJCisKKyNkZWZpbmUgU0VUMihwdHIsIGNoKSBcCisg
ICgoKHB0cilbMF0gPSAoKGNoKSA+PiA4KSksICgocHRyKVsxXSA9ICgoY2gpICYgMHhGRikpKQor
I2RlZmluZSBHRVRfTE8ocHRyKSAoKHVuc2lnbmVkIGNoYXIpKHB0cilbMV0pCisjZGVmaW5lIEdF
VF9ISShwdHIpICgodW5zaWduZWQgY2hhcikocHRyKVswXSkKKworREVGSU5FX1VURjE2X1RPX1VU
RjgoYmlnMl8pCitERUZJTkVfVVRGMTZfVE9fVVRGMTYoYmlnMl8pCisKKyN1bmRlZiBTRVQyCisj
dW5kZWYgR0VUX0xPCisjdW5kZWYgR0VUX0hJCisKKyNkZWZpbmUgTElUVExFMl9CWVRFX1RZUEUo
ZW5jLCBwKSBcCisgKChwKVsxXSA9PSAwIFwKKyAgPyAoKHN0cnVjdCBub3JtYWxfZW5jb2Rpbmcg
KikoZW5jKSktPnR5cGVbKHVuc2lnbmVkIGNoYXIpKihwKV0gXAorICA6IHVuaWNvZGVfYnl0ZV90
eXBlKChwKVsxXSwgKHApWzBdKSkKKyNkZWZpbmUgTElUVExFMl9CWVRFX1RPX0FTQ0lJKGVuYywg
cCkgKChwKVsxXSA9PSAwID8gKHApWzBdIDogLTEpCisjZGVmaW5lIExJVFRMRTJfQ0hBUl9NQVRD
SEVTKGVuYywgcCwgYykgKChwKVsxXSA9PSAwICYmIChwKVswXSA9PSBjKQorI2RlZmluZSBMSVRU
TEUyX0lTX05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBwKSBcCisgIFVDUzJfR0VUX05BTUlORyhuYW1l
UGFnZXMsICh1bnNpZ25lZCBjaGFyKXBbMV0sICh1bnNpZ25lZCBjaGFyKXBbMF0pCisjZGVmaW5l
IExJVFRMRTJfSVNfTk1TVFJUX0NIQVJfTUlOQlBDKGVuYywgcCkgXAorICBVQ1MyX0dFVF9OQU1J
Tkcobm1zdHJ0UGFnZXMsICh1bnNpZ25lZCBjaGFyKXBbMV0sICh1bnNpZ25lZCBjaGFyKXBbMF0p
CisKKyNpZmRlZiBYTUxfTUlOX1NJWkUKKworc3RhdGljIGludCBQVFJGQVNUQ0FMTAorbGl0dGxl
Ml9ieXRlVHlwZShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwKQoreworICByZXR1
cm4gTElUVExFMl9CWVRFX1RZUEUoZW5jLCBwKTsKK30KKworc3RhdGljIGludCBQVFJGQVNUQ0FM
TAorbGl0dGxlMl9ieXRlVG9Bc2NpaShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpw
KQoreworICByZXR1cm4gTElUVExFMl9CWVRFX1RPX0FTQ0lJKGVuYywgcCk7Cit9CisKK3N0YXRp
YyBpbnQgUFRSQ0FMTAorbGl0dGxlMl9jaGFyTWF0Y2hlcyhjb25zdCBFTkNPRElORyAqZW5jLCBj
b25zdCBjaGFyICpwLCBpbnQgYykKK3sKKyAgcmV0dXJuIExJVFRMRTJfQ0hBUl9NQVRDSEVTKGVu
YywgcCwgYyk7Cit9CisKK3N0YXRpYyBpbnQgUFRSRkFTVENBTEwKK2xpdHRsZTJfaXNOYW1lTWlu
KGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCit7CisgIHJldHVybiBMSVRUTEUy
X0lTX05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBwKTsKK30KKworc3RhdGljIGludCBQVFJGQVNUQ0FM
TAorbGl0dGxlMl9pc05tc3RydE1pbihjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpw
KQoreworICByZXR1cm4gTElUVExFMl9JU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKTsKK30K
KworI3VuZGVmIFZUQUJMRQorI2RlZmluZSBWVEFCTEUgVlRBQkxFMSwgbGl0dGxlMl90b1V0Zjgs
IGxpdHRsZTJfdG9VdGYxNgorCisjZWxzZSAvKiBub3QgWE1MX01JTl9TSVpFICovCisKKyN1bmRl
ZiBQUkVGSVgKKyNkZWZpbmUgUFJFRklYKGlkZW50KSBsaXR0bGUyXyAjIyBpZGVudAorI2RlZmlu
ZSBNSU5CUEMoZW5jKSAyCisvKiBDSEFSX01BVENIRVMgaXMgZ3VhcmFudGVlZCB0byBoYXZlIE1J
TkJQQyBieXRlcyBhdmFpbGFibGUuICovCisjZGVmaW5lIEJZVEVfVFlQRShlbmMsIHApIExJVFRM
RTJfQllURV9UWVBFKGVuYywgcCkKKyNkZWZpbmUgQllURV9UT19BU0NJSShlbmMsIHApIExJVFRM
RTJfQllURV9UT19BU0NJSShlbmMsIHApCisjZGVmaW5lIENIQVJfTUFUQ0hFUyhlbmMsIHAsIGMp
IExJVFRMRTJfQ0hBUl9NQVRDSEVTKGVuYywgcCwgYykKKyNkZWZpbmUgSVNfTkFNRV9DSEFSKGVu
YywgcCwgbikgMAorI2RlZmluZSBJU19OQU1FX0NIQVJfTUlOQlBDKGVuYywgcCkgTElUVExFMl9J
U19OQU1FX0NIQVJfTUlOQlBDKGVuYywgcCkKKyNkZWZpbmUgSVNfTk1TVFJUX0NIQVIoZW5jLCBw
LCBuKSAoMCkKKyNkZWZpbmUgSVNfTk1TVFJUX0NIQVJfTUlOQlBDKGVuYywgcCkgTElUVExFMl9J
U19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKQorCisjZGVmaW5lIFhNTF9UT0tfSU1QTF9DCisj
aW5jbHVkZSAieG1sdG9rX2ltcGwuYyIKKyN1bmRlZiBYTUxfVE9LX0lNUExfQworCisjdW5kZWYg
TUlOQlBDCisjdW5kZWYgQllURV9UWVBFCisjdW5kZWYgQllURV9UT19BU0NJSQorI3VuZGVmIENI
QVJfTUFUQ0hFUworI3VuZGVmIElTX05BTUVfQ0hBUgorI3VuZGVmIElTX05BTUVfQ0hBUl9NSU5C
UEMKKyN1bmRlZiBJU19OTVNUUlRfQ0hBUgorI3VuZGVmIElTX05NU1RSVF9DSEFSX01JTkJQQwor
I3VuZGVmIElTX0lOVkFMSURfQ0hBUgorCisjZW5kaWYgLyogbm90IFhNTF9NSU5fU0laRSAqLwor
CisjaWZkZWYgWE1MX05TCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgbm9ybWFsX2VuY29kaW5nIGxp
dHRsZTJfZW5jb2RpbmdfbnMgPSB7CisgIHsgVlRBQkxFLCAyLCAwLAorI2lmIEJZVEVPUkRFUiA9
PSAxMjM0CisgICAgMQorI2Vsc2UKKyAgICAwCisjZW5kaWYKKyAgfSwKKyAgeworI2luY2x1ZGUg
ImFzY2lpdGFiLmgiCisjaW5jbHVkZSAibGF0aW4xdGFiLmgiCisgIH0sCisgIFNUQU5EQVJEX1ZU
QUJMRShsaXR0bGUyXykKK307CisKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1h
bF9lbmNvZGluZyBsaXR0bGUyX2VuY29kaW5nID0geworICB7IFZUQUJMRSwgMiwgMCwKKyNpZiBC
WVRFT1JERVIgPT0gMTIzNAorICAgIDEKKyNlbHNlCisgICAgMAorI2VuZGlmCisgIH0sCisgIHsK
KyNkZWZpbmUgQlRfQ09MT04gQlRfTk1TVFJUCisjaW5jbHVkZSAiYXNjaWl0YWIuaCIKKyN1bmRl
ZiBCVF9DT0xPTgorI2luY2x1ZGUgImxhdGluMXRhYi5oIgorICB9LAorICBTVEFOREFSRF9WVEFC
TEUobGl0dGxlMl8pCit9OworCisjaWYgQllURU9SREVSICE9IDQzMjEKKworI2lmZGVmIFhNTF9O
UworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1hbF9lbmNvZGluZyBpbnRlcm5hbF9saXR0bGUy
X2VuY29kaW5nX25zID0geworICB7IFZUQUJMRSwgMiwgMCwgMSB9LAorICB7CisjaW5jbHVkZSAi
aWFzY2lpdGFiLmgiCisjaW5jbHVkZSAibGF0aW4xdGFiLmgiCisgIH0sCisgIFNUQU5EQVJEX1ZU
QUJMRShsaXR0bGUyXykKK307CisKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1h
bF9lbmNvZGluZyBpbnRlcm5hbF9saXR0bGUyX2VuY29kaW5nID0geworICB7IFZUQUJMRSwgMiwg
MCwgMSB9LAorICB7CisjZGVmaW5lIEJUX0NPTE9OIEJUX05NU1RSVAorI2luY2x1ZGUgImlhc2Np
aXRhYi5oIgorI3VuZGVmIEJUX0NPTE9OCisjaW5jbHVkZSAibGF0aW4xdGFiLmgiCisgIH0sCisg
IFNUQU5EQVJEX1ZUQUJMRShsaXR0bGUyXykKK307CisKKyNlbmRpZgorCisKKyNkZWZpbmUgQklH
Ml9CWVRFX1RZUEUoZW5jLCBwKSBcCisgKChwKVswXSA9PSAwIFwKKyAgPyAoKHN0cnVjdCBub3Jt
YWxfZW5jb2RpbmcgKikoZW5jKSktPnR5cGVbKHVuc2lnbmVkIGNoYXIpKHApWzFdXSBcCisgIDog
dW5pY29kZV9ieXRlX3R5cGUoKHApWzBdLCAocClbMV0pKQorI2RlZmluZSBCSUcyX0JZVEVfVE9f
QVNDSUkoZW5jLCBwKSAoKHApWzBdID09IDAgPyAocClbMV0gOiAtMSkKKyNkZWZpbmUgQklHMl9D
SEFSX01BVENIRVMoZW5jLCBwLCBjKSAoKHApWzBdID09IDAgJiYgKHApWzFdID09IGMpCisjZGVm
aW5lIEJJRzJfSVNfTkFNRV9DSEFSX01JTkJQQyhlbmMsIHApIFwKKyAgVUNTMl9HRVRfTkFNSU5H
KG5hbWVQYWdlcywgKHVuc2lnbmVkIGNoYXIpcFswXSwgKHVuc2lnbmVkIGNoYXIpcFsxXSkKKyNk
ZWZpbmUgQklHMl9JU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKSBcCisgIFVDUzJfR0VUX05B
TUlORyhubXN0cnRQYWdlcywgKHVuc2lnbmVkIGNoYXIpcFswXSwgKHVuc2lnbmVkIGNoYXIpcFsx
XSkKKworI2lmZGVmIFhNTF9NSU5fU0laRQorCitzdGF0aWMgaW50IFBUUkZBU1RDQUxMCitiaWcy
X2J5dGVUeXBlKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCit7CisgIHJldHVy
biBCSUcyX0JZVEVfVFlQRShlbmMsIHApOworfQorCitzdGF0aWMgaW50IFBUUkZBU1RDQUxMCiti
aWcyX2J5dGVUb0FzY2lpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCit7Cisg
IHJldHVybiBCSUcyX0JZVEVfVE9fQVNDSUkoZW5jLCBwKTsKK30KKworc3RhdGljIGludCBQVFJD
QUxMCitiaWcyX2NoYXJNYXRjaGVzKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnAs
IGludCBjKQoreworICByZXR1cm4gQklHMl9DSEFSX01BVENIRVMoZW5jLCBwLCBjKTsKK30KKwor
c3RhdGljIGludCBQVFJGQVNUQ0FMTAorYmlnMl9pc05hbWVNaW4oY29uc3QgRU5DT0RJTkcgKmVu
YywgY29uc3QgY2hhciAqcCkKK3sKKyAgcmV0dXJuIEJJRzJfSVNfTkFNRV9DSEFSX01JTkJQQyhl
bmMsIHApOworfQorCitzdGF0aWMgaW50IFBUUkZBU1RDQUxMCitiaWcyX2lzTm1zdHJ0TWluKGNv
bnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCit7CisgIHJldHVybiBCSUcyX0lTX05N
U1RSVF9DSEFSX01JTkJQQyhlbmMsIHApOworfQorCisjdW5kZWYgVlRBQkxFCisjZGVmaW5lIFZU
QUJMRSBWVEFCTEUxLCBiaWcyX3RvVXRmOCwgYmlnMl90b1V0ZjE2CisKKyNlbHNlIC8qIG5vdCBY
TUxfTUlOX1NJWkUgKi8KKworI3VuZGVmIFBSRUZJWAorI2RlZmluZSBQUkVGSVgoaWRlbnQpIGJp
ZzJfICMjIGlkZW50CisjZGVmaW5lIE1JTkJQQyhlbmMpIDIKKy8qIENIQVJfTUFUQ0hFUyBpcyBn
dWFyYW50ZWVkIHRvIGhhdmUgTUlOQlBDIGJ5dGVzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgQllU
RV9UWVBFKGVuYywgcCkgQklHMl9CWVRFX1RZUEUoZW5jLCBwKQorI2RlZmluZSBCWVRFX1RPX0FT
Q0lJKGVuYywgcCkgQklHMl9CWVRFX1RPX0FTQ0lJKGVuYywgcCkKKyNkZWZpbmUgQ0hBUl9NQVRD
SEVTKGVuYywgcCwgYykgQklHMl9DSEFSX01BVENIRVMoZW5jLCBwLCBjKQorI2RlZmluZSBJU19O
QU1FX0NIQVIoZW5jLCBwLCBuKSAwCisjZGVmaW5lIElTX05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBw
KSBCSUcyX0lTX05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBwKQorI2RlZmluZSBJU19OTVNUUlRfQ0hB
UihlbmMsIHAsIG4pICgwKQorI2RlZmluZSBJU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKSBC
SUcyX0lTX05NU1RSVF9DSEFSX01JTkJQQyhlbmMsIHApCisKKyNkZWZpbmUgWE1MX1RPS19JTVBM
X0MKKyNpbmNsdWRlICJ4bWx0b2tfaW1wbC5jIgorI3VuZGVmIFhNTF9UT0tfSU1QTF9DCisKKyN1
bmRlZiBNSU5CUEMKKyN1bmRlZiBCWVRFX1RZUEUKKyN1bmRlZiBCWVRFX1RPX0FTQ0lJCisjdW5k
ZWYgQ0hBUl9NQVRDSEVTCisjdW5kZWYgSVNfTkFNRV9DSEFSCisjdW5kZWYgSVNfTkFNRV9DSEFS
X01JTkJQQworI3VuZGVmIElTX05NU1RSVF9DSEFSCisjdW5kZWYgSVNfTk1TVFJUX0NIQVJfTUlO
QlBDCisjdW5kZWYgSVNfSU5WQUxJRF9DSEFSCisKKyNlbmRpZiAvKiBub3QgWE1MX01JTl9TSVpF
ICovCisKKyNpZmRlZiBYTUxfTlMKKworc3RhdGljIGNvbnN0IHN0cnVjdCBub3JtYWxfZW5jb2Rp
bmcgYmlnMl9lbmNvZGluZ19ucyA9IHsKKyAgeyBWVEFCTEUsIDIsIDAsCisjaWYgQllURU9SREVS
ID09IDQzMjEKKyAgMQorI2Vsc2UKKyAgMAorI2VuZGlmCisgIH0sCisgIHsKKyNpbmNsdWRlICJh
c2NpaXRhYi5oIgorI2luY2x1ZGUgImxhdGluMXRhYi5oIgorICB9LAorICBTVEFOREFSRF9WVEFC
TEUoYmlnMl8pCit9OworCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBub3JtYWxfZW5j
b2RpbmcgYmlnMl9lbmNvZGluZyA9IHsKKyAgeyBWVEFCTEUsIDIsIDAsCisjaWYgQllURU9SREVS
ID09IDQzMjEKKyAgMQorI2Vsc2UKKyAgMAorI2VuZGlmCisgIH0sCisgIHsKKyNkZWZpbmUgQlRf
Q09MT04gQlRfTk1TVFJUCisjaW5jbHVkZSAiYXNjaWl0YWIuaCIKKyN1bmRlZiBCVF9DT0xPTgor
I2luY2x1ZGUgImxhdGluMXRhYi5oIgorICB9LAorICBTVEFOREFSRF9WVEFCTEUoYmlnMl8pCit9
OworCisjaWYgQllURU9SREVSICE9IDEyMzQKKworI2lmZGVmIFhNTF9OUworCitzdGF0aWMgY29u
c3Qgc3RydWN0IG5vcm1hbF9lbmNvZGluZyBpbnRlcm5hbF9iaWcyX2VuY29kaW5nX25zID0gewor
ICB7IFZUQUJMRSwgMiwgMCwgMSB9LAorICB7CisjaW5jbHVkZSAiaWFzY2lpdGFiLmgiCisjaW5j
bHVkZSAibGF0aW4xdGFiLmgiCisgIH0sCisgIFNUQU5EQVJEX1ZUQUJMRShiaWcyXykKK307CisK
KyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1hbF9lbmNvZGluZyBpbnRlcm5hbF9i
aWcyX2VuY29kaW5nID0geworICB7IFZUQUJMRSwgMiwgMCwgMSB9LAorICB7CisjZGVmaW5lIEJU
X0NPTE9OIEJUX05NU1RSVAorI2luY2x1ZGUgImlhc2NpaXRhYi5oIgorI3VuZGVmIEJUX0NPTE9O
CisjaW5jbHVkZSAibGF0aW4xdGFiLmgiCisgIH0sCisgIFNUQU5EQVJEX1ZUQUJMRShiaWcyXykK
K307CisKKyNlbmRpZgorCisjdW5kZWYgUFJFRklYCisKK3N0YXRpYyBpbnQgRkFTVENBTEwKK3N0
cmVxY2koY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworICBmb3IgKDs7KSB7Cisg
ICAgY2hhciBjMSA9ICpzMSsrOworICAgIGNoYXIgYzIgPSAqczIrKzsKKyAgICBpZiAoQVNDSUlf
YSA8PSBjMSAmJiBjMSA8PSBBU0NJSV96KQorICAgICAgYzEgKz0gQVNDSUlfQSAtIEFTQ0lJX2E7
CisgICAgaWYgKEFTQ0lJX2EgPD0gYzIgJiYgYzIgPD0gQVNDSUlfeikKKyAgICAgIGMyICs9IEFT
Q0lJX0EgLSBBU0NJSV9hOworICAgIGlmIChjMSAhPSBjMikKKyAgICAgIHJldHVybiAwOworICAg
IGlmICghYzEpCisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIHZv
aWQgUFRSQ0FMTAoraW5pdFVwZGF0ZVBvc2l0aW9uKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0
IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsIFBPU0lUSU9O
ICpwb3MpCit7CisgIG5vcm1hbF91cGRhdGVQb3NpdGlvbigmdXRmOF9lbmNvZGluZy5lbmMsIHB0
ciwgZW5kLCBwb3MpOworfQorCitzdGF0aWMgaW50Cit0b0FzY2lpKGNvbnN0IEVOQ09ESU5HICpl
bmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kKQoreworICBjaGFyIGJ1ZlsxXTsK
KyAgY2hhciAqcCA9IGJ1ZjsKKyAgWG1sVXRmOENvbnZlcnQoZW5jLCAmcHRyLCBlbmQsICZwLCBw
ICsgMSk7CisgIGlmIChwID09IGJ1ZikKKyAgICByZXR1cm4gLTE7CisgIGVsc2UKKyAgICByZXR1
cm4gYnVmWzBdOworfQorCitzdGF0aWMgaW50IEZBU1RDQUxMCitpc1NwYWNlKGludCBjKQorewor
ICBzd2l0Y2ggKGMpIHsKKyAgY2FzZSAweDIwOgorICBjYXNlIDB4RDoKKyAgY2FzZSAweEE6Cisg
IGNhc2UgMHg5OgorICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCisvKiBSZXR1
cm4gMSBpZiB0aGVyZSdzIGp1c3Qgb3B0aW9uYWwgd2hpdGUgc3BhY2Ugb3IgdGhlcmUncyBhbiBT
CisgICBmb2xsb3dlZCBieSBuYW1lPXZhbC4KKyovCitzdGF0aWMgaW50CitwYXJzZVBzZXVkb0F0
dHJpYnV0ZShjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5hbWVQdHIsCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICoqbmFtZUVuZFB0ciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKip2YWxQdHIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0
cikKK3sKKyAgaW50IGM7CisgIGNoYXIgb3BlbjsKKyAgaWYgKHB0ciA9PSBlbmQpIHsKKyAgICAq
bmFtZVB0ciA9IE5VTEw7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgaWYgKCFpc1NwYWNlKHRvQXNj
aWkoZW5jLCBwdHIsIGVuZCkpKSB7CisgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgcmV0dXJu
IDA7CisgIH0KKyAgZG8geworICAgIHB0ciArPSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcjsKKyAgfSB3
aGlsZSAoaXNTcGFjZSh0b0FzY2lpKGVuYywgcHRyLCBlbmQpKSk7CisgIGlmIChwdHIgPT0gZW5k
KSB7CisgICAgKm5hbWVQdHIgPSBOVUxMOworICAgIHJldHVybiAxOworICB9CisgICpuYW1lUHRy
ID0gcHRyOworICBmb3IgKDs7KSB7CisgICAgYyA9IHRvQXNjaWkoZW5jLCBwdHIsIGVuZCk7Cisg
ICAgaWYgKGMgPT0gLTEpIHsKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIGlmIChjID09IEFTQ0lJX0VRVUFMUykgeworICAgICAgKm5hbWVFbmRQ
dHIgPSBwdHI7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGlzU3BhY2UoYykpIHsKKyAg
ICAgICpuYW1lRW5kUHRyID0gcHRyOworICAgICAgZG8geworICAgICAgICBwdHIgKz0gZW5jLT5t
aW5CeXRlc1BlckNoYXI7CisgICAgICB9IHdoaWxlIChpc1NwYWNlKGMgPSB0b0FzY2lpKGVuYywg
cHRyLCBlbmQpKSk7CisgICAgICBpZiAoYyAhPSBBU0NJSV9FUVVBTFMpIHsKKyAgICAgICAgKm5l
eHRUb2tQdHIgPSBwdHI7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnJlYWs7
CisgICAgfQorICAgIHB0ciArPSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcjsKKyAgfQorICBpZiAocHRy
ID09ICpuYW1lUHRyKSB7CisgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgcmV0dXJuIDA7Cisg
IH0KKyAgcHRyICs9IGVuYy0+bWluQnl0ZXNQZXJDaGFyOworICBjID0gdG9Bc2NpaShlbmMsIHB0
ciwgZW5kKTsKKyAgd2hpbGUgKGlzU3BhY2UoYykpIHsKKyAgICBwdHIgKz0gZW5jLT5taW5CeXRl
c1BlckNoYXI7CisgICAgYyA9IHRvQXNjaWkoZW5jLCBwdHIsIGVuZCk7CisgIH0KKyAgaWYgKGMg
IT0gQVNDSUlfUVVPVCAmJiBjICE9IEFTQ0lJX0FQT1MpIHsKKyAgICAqbmV4dFRva1B0ciA9IHB0
cjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBvcGVuID0gKGNoYXIpYzsKKyAgcHRyICs9IGVuYy0+
bWluQnl0ZXNQZXJDaGFyOworICAqdmFsUHRyID0gcHRyOworICBmb3IgKDs7IHB0ciArPSBlbmMt
Pm1pbkJ5dGVzUGVyQ2hhcikgeworICAgIGMgPSB0b0FzY2lpKGVuYywgcHRyLCBlbmQpOworICAg
IGlmIChjID09IG9wZW4pCisgICAgICBicmVhazsKKyAgICBpZiAoIShBU0NJSV9hIDw9IGMgJiYg
YyA8PSBBU0NJSV96KQorICAgICAgICAmJiAhKEFTQ0lJX0EgPD0gYyAmJiBjIDw9IEFTQ0lJX1op
CisgICAgICAgICYmICEoQVNDSUlfMCA8PSBjICYmIGMgPD0gQVNDSUlfOSkKKyAgICAgICAgJiYg
YyAhPSBBU0NJSV9QRVJJT0QKKyAgICAgICAgJiYgYyAhPSBBU0NJSV9NSU5VUworICAgICAgICAm
JiBjICE9IEFTQ0lJX1VOREVSU0NPUkUpIHsKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgICpuZXh0VG9rUHRyID0gcHRyICsgZW5jLT5taW5C
eXRlc1BlckNoYXI7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciBLV192ZXJz
aW9uW10gPSB7CisgIEFTQ0lJX3YsIEFTQ0lJX2UsIEFTQ0lJX3IsIEFTQ0lJX3MsIEFTQ0lJX2ks
IEFTQ0lJX28sIEFTQ0lJX24sICdcMCcKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIEtXX2VuY29k
aW5nW10gPSB7CisgIEFTQ0lJX2UsIEFTQ0lJX24sIEFTQ0lJX2MsIEFTQ0lJX28sIEFTQ0lJX2Qs
IEFTQ0lJX2ksIEFTQ0lJX24sIEFTQ0lJX2csICdcMCcKK307CisKK3N0YXRpYyBjb25zdCBjaGFy
IEtXX3N0YW5kYWxvbmVbXSA9IHsKKyAgQVNDSUlfcywgQVNDSUlfdCwgQVNDSUlfYSwgQVNDSUlf
biwgQVNDSUlfZCwgQVNDSUlfYSwgQVNDSUlfbCwgQVNDSUlfbywKKyAgQVNDSUlfbiwgQVNDSUlf
ZSwgJ1wwJworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgS1dfeWVzW10gPSB7CisgIEFTQ0lJX3ks
IEFTQ0lJX2UsIEFTQ0lJX3MsICAnXDAnCit9OworCitzdGF0aWMgY29uc3QgY2hhciBLV19ub1td
ID0geworICBBU0NJSV9uLCBBU0NJSV9vLCAgJ1wwJworfTsKKworc3RhdGljIGludAorZG9QYXJz
ZVhtbERlY2woY29uc3QgRU5DT0RJTkcgKigqZW5jb2RpbmdGaW5kZXIpKGNvbnN0IEVOQ09ESU5H
ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKiksCisgICAgICAgICAgICAgICBpbnQgaXNHZW5lcmFsVGV4dEVudGl0
eSwKKyAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMsCisgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICoqYmFkUHRyLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
KnZlcnNpb25QdHIsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqdmVyc2lvbkVuZFB0ciwK
KyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiplbmNvZGluZ05hbWUsCisgICAgICAgICAgICAg
ICBjb25zdCBFTkNPRElORyAqKmVuY29kaW5nLAorICAgICAgICAgICAgICAgaW50ICpzdGFuZGFs
b25lKQoreworICBjb25zdCBjaGFyICp2YWwgPSBOVUxMOworICBjb25zdCBjaGFyICpuYW1lID0g
TlVMTDsKKyAgY29uc3QgY2hhciAqbmFtZUVuZCA9IE5VTEw7CisgIHB0ciArPSA1ICogZW5jLT5t
aW5CeXRlc1BlckNoYXI7CisgIGVuZCAtPSAyICogZW5jLT5taW5CeXRlc1BlckNoYXI7CisgIGlm
ICghcGFyc2VQc2V1ZG9BdHRyaWJ1dGUoZW5jLCBwdHIsIGVuZCwgJm5hbWUsICZuYW1lRW5kLCAm
dmFsLCAmcHRyKQorICAgICAgfHwgIW5hbWUpIHsKKyAgICAqYmFkUHRyID0gcHRyOworICAgIHJl
dHVybiAwOworICB9CisgIGlmICghWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsIG5hbWUsIG5hbWVF
bmQsIEtXX3ZlcnNpb24pKSB7CisgICAgaWYgKCFpc0dlbmVyYWxUZXh0RW50aXR5KSB7CisgICAg
ICAqYmFkUHRyID0gbmFtZTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICBlbHNlIHsK
KyAgICBpZiAodmVyc2lvblB0cikKKyAgICAgICp2ZXJzaW9uUHRyID0gdmFsOworICAgIGlmICh2
ZXJzaW9uRW5kUHRyKQorICAgICAgKnZlcnNpb25FbmRQdHIgPSBwdHI7CisgICAgaWYgKCFwYXJz
ZVBzZXVkb0F0dHJpYnV0ZShlbmMsIHB0ciwgZW5kLCAmbmFtZSwgJm5hbWVFbmQsICZ2YWwsICZw
dHIpKSB7CisgICAgICAqYmFkUHRyID0gcHRyOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbmFtZSkgeworICAgICAgaWYgKGlzR2VuZXJhbFRleHRFbnRpdHkpIHsKKyAgICAgICAg
LyogYSBUZXh0RGVjbCBtdXN0IGhhdmUgYW4gRW5jb2RpbmdEZWNsICovCisgICAgICAgICpiYWRQ
dHIgPSBwdHI7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgcmV0dXJuIDE7Cisg
ICAgfQorICB9CisgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgbmFtZSwgbmFtZUVuZCwg
S1dfZW5jb2RpbmcpKSB7CisgICAgaW50IGMgPSB0b0FzY2lpKGVuYywgdmFsLCBlbmQpOworICAg
IGlmICghKEFTQ0lJX2EgPD0gYyAmJiBjIDw9IEFTQ0lJX3opICYmICEoQVNDSUlfQSA8PSBjICYm
IGMgPD0gQVNDSUlfWikpIHsKKyAgICAgICpiYWRQdHIgPSB2YWw7CisgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgaWYgKGVuY29kaW5nTmFtZSkKKyAgICAgICplbmNvZGluZ05hbWUgPSB2YWw7
CisgICAgaWYgKGVuY29kaW5nKQorICAgICAgKmVuY29kaW5nID0gZW5jb2RpbmdGaW5kZXIoZW5j
LCB2YWwsIHB0ciAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKKyAgICBpZiAoIXBhcnNlUHNldWRv
QXR0cmlidXRlKGVuYywgcHRyLCBlbmQsICZuYW1lLCAmbmFtZUVuZCwgJnZhbCwgJnB0cikpIHsK
KyAgICAgICpiYWRQdHIgPSBwdHI7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFu
YW1lKQorICAgICAgcmV0dXJuIDE7CisgIH0KKyAgaWYgKCFYbWxOYW1lTWF0Y2hlc0FzY2lpKGVu
YywgbmFtZSwgbmFtZUVuZCwgS1dfc3RhbmRhbG9uZSkKKyAgICAgIHx8IGlzR2VuZXJhbFRleHRF
bnRpdHkpIHsKKyAgICAqYmFkUHRyID0gbmFtZTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAo
WG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsIHZhbCwgcHRyIC0gZW5jLT5taW5CeXRlc1BlckNoYXIs
IEtXX3llcykpIHsKKyAgICBpZiAoc3RhbmRhbG9uZSkKKyAgICAgICpzdGFuZGFsb25lID0gMTsK
KyAgfQorICBlbHNlIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgdmFsLCBwdHIgLSBlbmMt
Pm1pbkJ5dGVzUGVyQ2hhciwgS1dfbm8pKSB7CisgICAgaWYgKHN0YW5kYWxvbmUpCisgICAgICAq
c3RhbmRhbG9uZSA9IDA7CisgIH0KKyAgZWxzZSB7CisgICAgKmJhZFB0ciA9IHZhbDsKKyAgICBy
ZXR1cm4gMDsKKyAgfQorICB3aGlsZSAoaXNTcGFjZSh0b0FzY2lpKGVuYywgcHRyLCBlbmQpKSkK
KyAgICBwdHIgKz0gZW5jLT5taW5CeXRlc1BlckNoYXI7CisgIGlmIChwdHIgIT0gZW5kKSB7Cisg
ICAgKmJhZFB0ciA9IHB0cjsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gMTsKK30KKwor
c3RhdGljIGludCBGQVNUQ0FMTAorY2hlY2tDaGFyUmVmTnVtYmVyKGludCByZXN1bHQpCit7Cisg
IHN3aXRjaCAocmVzdWx0ID4+IDgpIHsKKyAgY2FzZSAweEQ4OiBjYXNlIDB4RDk6IGNhc2UgMHhE
QTogY2FzZSAweERCOgorICBjYXNlIDB4REM6IGNhc2UgMHhERDogY2FzZSAweERFOiBjYXNlIDB4
REY6CisgICAgcmV0dXJuIC0xOworICBjYXNlIDA6CisgICAgaWYgKGxhdGluMV9lbmNvZGluZy50
eXBlW3Jlc3VsdF0gPT0gQlRfTk9OWE1MKQorICAgICAgcmV0dXJuIC0xOworICAgIGJyZWFrOwor
ICBjYXNlIDB4RkY6CisgICAgaWYgKHJlc3VsdCA9PSAweEZGRkUgfHwgcmVzdWx0ID09IDB4RkZG
RikKKyAgICAgIHJldHVybiAtMTsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmVzdWx0Owor
fQorCitpbnQgRkFTVENBTEwKK1htbFV0ZjhFbmNvZGUoaW50IGMsIGNoYXIgKmJ1ZikKK3sKKyAg
ZW51bSB7CisgICAgLyogbWluTiBpcyBtaW5pbXVtIGxlZ2FsIHJlc3VsdGluZyB2YWx1ZSBmb3Ig
TiBieXRlIHNlcXVlbmNlICovCisgICAgbWluMiA9IDB4ODAsCisgICAgbWluMyA9IDB4ODAwLAor
ICAgIG1pbjQgPSAweDEwMDAwCisgIH07CisKKyAgaWYgKGMgPCAwKQorICAgIHJldHVybiAwOwor
ICBpZiAoYyA8IG1pbjIpIHsKKyAgICBidWZbMF0gPSAoY2hhcikoYyB8IFVURjhfY3ZhbDEpOwor
ICAgIHJldHVybiAxOworICB9CisgIGlmIChjIDwgbWluMykgeworICAgIGJ1ZlswXSA9IChjaGFy
KSgoYyA+PiA2KSB8IFVURjhfY3ZhbDIpOworICAgIGJ1ZlsxXSA9IChjaGFyKSgoYyAmIDB4M2Yp
IHwgMHg4MCk7CisgICAgcmV0dXJuIDI7CisgIH0KKyAgaWYgKGMgPCBtaW40KSB7CisgICAgYnVm
WzBdID0gKGNoYXIpKChjID4+IDEyKSB8IFVURjhfY3ZhbDMpOworICAgIGJ1ZlsxXSA9IChjaGFy
KSgoKGMgPj4gNikgJiAweDNmKSB8IDB4ODApOworICAgIGJ1ZlsyXSA9IChjaGFyKSgoYyAmIDB4
M2YpIHwgMHg4MCk7CisgICAgcmV0dXJuIDM7CisgIH0KKyAgaWYgKGMgPCAweDExMDAwMCkgewor
ICAgIGJ1ZlswXSA9IChjaGFyKSgoYyA+PiAxOCkgfCBVVEY4X2N2YWw0KTsKKyAgICBidWZbMV0g
PSAoY2hhcikoKChjID4+IDEyKSAmIDB4M2YpIHwgMHg4MCk7CisgICAgYnVmWzJdID0gKGNoYXIp
KCgoYyA+PiA2KSAmIDB4M2YpIHwgMHg4MCk7CisgICAgYnVmWzNdID0gKGNoYXIpKChjICYgMHgz
ZikgfCAweDgwKTsKKyAgICByZXR1cm4gNDsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IEZB
U1RDQUxMCitYbWxVdGYxNkVuY29kZShpbnQgY2hhck51bSwgdW5zaWduZWQgc2hvcnQgKmJ1ZikK
K3sKKyAgaWYgKGNoYXJOdW0gPCAwKQorICAgIHJldHVybiAwOworICBpZiAoY2hhck51bSA8IDB4
MTAwMDApIHsKKyAgICBidWZbMF0gPSAodW5zaWduZWQgc2hvcnQpY2hhck51bTsKKyAgICByZXR1
cm4gMTsKKyAgfQorICBpZiAoY2hhck51bSA8IDB4MTEwMDAwKSB7CisgICAgY2hhck51bSAtPSAw
eDEwMDAwOworICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBzaG9ydCkoKGNoYXJOdW0gPj4gMTApICsg
MHhEODAwKTsKKyAgICBidWZbMV0gPSAodW5zaWduZWQgc2hvcnQpKChjaGFyTnVtICYgMHgzRkYp
ICsgMHhEQzAwKTsKKyAgICByZXR1cm4gMjsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RydWN0
IHVua25vd25fZW5jb2RpbmcgeworICBzdHJ1Y3Qgbm9ybWFsX2VuY29kaW5nIG5vcm1hbDsKKyAg
Q09OVkVSVEVSIGNvbnZlcnQ7CisgIHZvaWQgKnVzZXJEYXRhOworICB1bnNpZ25lZCBzaG9ydCB1
dGYxNlsyNTZdOworICBjaGFyIHV0ZjhbMjU2XVs0XTsKK307CisKKyNkZWZpbmUgQVNfVU5LTk9X
Tl9FTkNPRElORyhlbmMpICAoKGNvbnN0IHN0cnVjdCB1bmtub3duX2VuY29kaW5nICopIChlbmMp
KQorCitpbnQKK1htbFNpemVPZlVua25vd25FbmNvZGluZyh2b2lkKQoreworICByZXR1cm4gc2l6
ZW9mKHN0cnVjdCB1bmtub3duX2VuY29kaW5nKTsKK30KKworc3RhdGljIGludCBQVFJGQVNUQ0FM
TAordW5rbm93bl9pc05hbWUoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKK3sK
KyAgY29uc3Qgc3RydWN0IHVua25vd25fZW5jb2RpbmcgKnVlbmMgPSBBU19VTktOT1dOX0VOQ09E
SU5HKGVuYyk7CisgIGludCBjID0gdWVuYy0+Y29udmVydCh1ZW5jLT51c2VyRGF0YSwgcCk7Cisg
IGlmIChjICYgfjB4RkZGRikKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIFVDUzJfR0VUX05BTUlO
RyhuYW1lUGFnZXMsIGMgPj4gOCwgYyAmIDB4RkYpOworfQorCitzdGF0aWMgaW50IFBUUkZBU1RD
QUxMCit1bmtub3duX2lzTm1zdHJ0KGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnAp
Cit7CisgIGNvbnN0IHN0cnVjdCB1bmtub3duX2VuY29kaW5nICp1ZW5jID0gQVNfVU5LTk9XTl9F
TkNPRElORyhlbmMpOworICBpbnQgYyA9IHVlbmMtPmNvbnZlcnQodWVuYy0+dXNlckRhdGEsIHAp
OworICBpZiAoYyAmIH4weEZGRkYpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiBVQ1MyX0dFVF9O
QU1JTkcobm1zdHJ0UGFnZXMsIGMgPj4gOCwgYyAmIDB4RkYpOworfQorCitzdGF0aWMgaW50IFBU
UkZBU1RDQUxMCit1bmtub3duX2lzSW52YWxpZChjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBj
aGFyICpwKQoreworICBjb25zdCBzdHJ1Y3QgdW5rbm93bl9lbmNvZGluZyAqdWVuYyA9IEFTX1VO
S05PV05fRU5DT0RJTkcoZW5jKTsKKyAgaW50IGMgPSB1ZW5jLT5jb252ZXJ0KHVlbmMtPnVzZXJE
YXRhLCBwKTsKKyAgcmV0dXJuIChjICYgfjB4RkZGRikgfHwgY2hlY2tDaGFyUmVmTnVtYmVyKGMp
IDwgMDsKK30KKworc3RhdGljIHZvaWQgUFRSQ0FMTAordW5rbm93bl90b1V0ZjgoY29uc3QgRU5D
T0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipmcm9tUCwgY29uc3QgY2hh
ciAqZnJvbUxpbSwKKyAgICAgICAgICAgICAgIGNoYXIgKip0b1AsIGNvbnN0IGNoYXIgKnRvTGlt
KQoreworICBjb25zdCBzdHJ1Y3QgdW5rbm93bl9lbmNvZGluZyAqdWVuYyA9IEFTX1VOS05PV05f
RU5DT0RJTkcoZW5jKTsKKyAgY2hhciBidWZbWE1MX1VURjhfRU5DT0RFX01BWF07CisgIGZvciAo
OzspIHsKKyAgICBjb25zdCBjaGFyICp1dGY4OworICAgIGludCBuOworICAgIGlmICgqZnJvbVAg
PT0gZnJvbUxpbSkKKyAgICAgIGJyZWFrOworICAgIHV0ZjggPSB1ZW5jLT51dGY4Wyh1bnNpZ25l
ZCBjaGFyKSoqZnJvbVBdOworICAgIG4gPSAqdXRmOCsrOworICAgIGlmIChuID09IDApIHsKKyAg
ICAgIGludCBjID0gdWVuYy0+Y29udmVydCh1ZW5jLT51c2VyRGF0YSwgKmZyb21QKTsKKyAgICAg
IG4gPSBYbWxVdGY4RW5jb2RlKGMsIGJ1Zik7CisgICAgICBpZiAobiA+IHRvTGltIC0gKnRvUCkK
KyAgICAgICAgYnJlYWs7CisgICAgICB1dGY4ID0gYnVmOworICAgICAgKmZyb21QICs9IChBU19O
T1JNQUxfRU5DT0RJTkcoZW5jKS0+dHlwZVsodW5zaWduZWQgY2hhcikqKmZyb21QXQorICAgICAg
ICAgICAgICAgICAtIChCVF9MRUFEMiAtIDIpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBp
ZiAobiA+IHRvTGltIC0gKnRvUCkKKyAgICAgICAgYnJlYWs7CisgICAgICAoKmZyb21QKSsrOwor
ICAgIH0KKyAgICBkbyB7CisgICAgICAqKCp0b1ApKysgPSAqdXRmOCsrOworICAgIH0gd2hpbGUg
KC0tbiAhPSAwKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBQVFJDQUxMCit1bmtub3duX3RvVXRm
MTYoY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZnJv
bVAsIGNvbnN0IGNoYXIgKmZyb21MaW0sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
Kip0b1AsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICp0b0xpbSkKK3sKKyAgY29uc3Qgc3RydWN0IHVu
a25vd25fZW5jb2RpbmcgKnVlbmMgPSBBU19VTktOT1dOX0VOQ09ESU5HKGVuYyk7CisgIHdoaWxl
ICgqZnJvbVAgIT0gZnJvbUxpbSAmJiAqdG9QICE9IHRvTGltKSB7CisgICAgdW5zaWduZWQgc2hv
cnQgYyA9IHVlbmMtPnV0ZjE2Wyh1bnNpZ25lZCBjaGFyKSoqZnJvbVBdOworICAgIGlmIChjID09
IDApIHsKKyAgICAgIGMgPSAodW5zaWduZWQgc2hvcnQpCisgICAgICAgICAgdWVuYy0+Y29udmVy
dCh1ZW5jLT51c2VyRGF0YSwgKmZyb21QKTsKKyAgICAgICpmcm9tUCArPSAoQVNfTk9STUFMX0VO
Q09ESU5HKGVuYyktPnR5cGVbKHVuc2lnbmVkIGNoYXIpKipmcm9tUF0KKyAgICAgICAgICAgICAg
ICAgLSAoQlRfTEVBRDIgLSAyKSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICgqZnJvbVApKys7
CisgICAgKigqdG9QKSsrID0gYzsKKyAgfQorfQorCitFTkNPRElORyAqCitYbWxJbml0VW5rbm93
bkVuY29kaW5nKHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0YWJsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgQ09OVkVSVEVSIGNvbnZlcnQsCisgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKQoreworICBpbnQgaTsKKyAgc3RydWN0IHVua25vd25f
ZW5jb2RpbmcgKmUgPSAoc3RydWN0IHVua25vd25fZW5jb2RpbmcgKiltZW07CisgIGZvciAoaSA9
IDA7IGkgPCAoaW50KXNpemVvZihzdHJ1Y3Qgbm9ybWFsX2VuY29kaW5nKTsgaSsrKQorICAgICgo
Y2hhciAqKW1lbSlbaV0gPSAoKGNoYXIgKikmbGF0aW4xX2VuY29kaW5nKVtpXTsKKyAgZm9yIChp
ID0gMDsgaSA8IDEyODsgaSsrKQorICAgIGlmIChsYXRpbjFfZW5jb2RpbmcudHlwZVtpXSAhPSBC
VF9PVEhFUgorICAgICAgICAmJiBsYXRpbjFfZW5jb2RpbmcudHlwZVtpXSAhPSBCVF9OT05YTUwK
KyAgICAgICAgJiYgdGFibGVbaV0gIT0gaSkKKyAgICAgIHJldHVybiAwOworICBmb3IgKGkgPSAw
OyBpIDwgMjU2OyBpKyspIHsKKyAgICBpbnQgYyA9IHRhYmxlW2ldOworICAgIGlmIChjID09IC0x
KSB7CisgICAgICBlLT5ub3JtYWwudHlwZVtpXSA9IEJUX01BTEZPUk07CisgICAgICAvKiBUaGlz
IHNob3VsZG4ndCByZWFsbHkgZ2V0IHVzZWQuICovCisgICAgICBlLT51dGYxNltpXSA9IDB4RkZG
RjsKKyAgICAgIGUtPnV0ZjhbaV1bMF0gPSAxOworICAgICAgZS0+dXRmOFtpXVsxXSA9IDA7Cisg
ICAgfQorICAgIGVsc2UgaWYgKGMgPCAwKSB7CisgICAgICBpZiAoYyA8IC00KQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgIGUtPm5vcm1hbC50eXBlW2ldID0gKHVuc2lnbmVkIGNoYXIpKEJUX0xF
QUQyIC0gKGMgKyAyKSk7CisgICAgICBlLT51dGY4W2ldWzBdID0gMDsKKyAgICAgIGUtPnV0ZjE2
W2ldID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoYyA8IDB4ODApIHsKKyAgICAgIGlmIChsYXRp
bjFfZW5jb2RpbmcudHlwZVtjXSAhPSBCVF9PVEhFUgorICAgICAgICAgICYmIGxhdGluMV9lbmNv
ZGluZy50eXBlW2NdICE9IEJUX05PTlhNTAorICAgICAgICAgICYmIGMgIT0gaSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgICBlLT5ub3JtYWwudHlwZVtpXSA9IGxhdGluMV9lbmNvZGluZy50eXBl
W2NdOworICAgICAgZS0+dXRmOFtpXVswXSA9IDE7CisgICAgICBlLT51dGY4W2ldWzFdID0gKGNo
YXIpYzsKKyAgICAgIGUtPnV0ZjE2W2ldID0gKHVuc2lnbmVkIHNob3J0KShjID09IDAgPyAweEZG
RkYgOiBjKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2hlY2tDaGFyUmVmTnVtYmVyKGMpIDwgMCkg
eworICAgICAgZS0+bm9ybWFsLnR5cGVbaV0gPSBCVF9OT05YTUw7CisgICAgICAvKiBUaGlzIHNo
b3VsZG4ndCByZWFsbHkgZ2V0IHVzZWQuICovCisgICAgICBlLT51dGYxNltpXSA9IDB4RkZGRjsK
KyAgICAgIGUtPnV0ZjhbaV1bMF0gPSAxOworICAgICAgZS0+dXRmOFtpXVsxXSA9IDA7CisgICAg
fQorICAgIGVsc2UgeworICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgIHJldHVybiAwOwor
ICAgICAgaWYgKFVDUzJfR0VUX05BTUlORyhubXN0cnRQYWdlcywgYyA+PiA4LCBjICYgMHhmZikp
CisgICAgICAgIGUtPm5vcm1hbC50eXBlW2ldID0gQlRfTk1TVFJUOworICAgICAgZWxzZSBpZiAo
VUNTMl9HRVRfTkFNSU5HKG5hbWVQYWdlcywgYyA+PiA4LCBjICYgMHhmZikpCisgICAgICAgIGUt
Pm5vcm1hbC50eXBlW2ldID0gQlRfTkFNRTsKKyAgICAgIGVsc2UKKyAgICAgICAgZS0+bm9ybWFs
LnR5cGVbaV0gPSBCVF9PVEhFUjsKKyAgICAgIGUtPnV0ZjhbaV1bMF0gPSAoY2hhcilYbWxVdGY4
RW5jb2RlKGMsIGUtPnV0ZjhbaV0gKyAxKTsKKyAgICAgIGUtPnV0ZjE2W2ldID0gKHVuc2lnbmVk
IHNob3J0KWM7CisgICAgfQorICB9CisgIGUtPnVzZXJEYXRhID0gdXNlckRhdGE7CisgIGUtPmNv
bnZlcnQgPSBjb252ZXJ0OworICBpZiAoY29udmVydCkgeworICAgIGUtPm5vcm1hbC5pc05hbWUy
ID0gdW5rbm93bl9pc05hbWU7CisgICAgZS0+bm9ybWFsLmlzTmFtZTMgPSB1bmtub3duX2lzTmFt
ZTsKKyAgICBlLT5ub3JtYWwuaXNOYW1lNCA9IHVua25vd25faXNOYW1lOworICAgIGUtPm5vcm1h
bC5pc05tc3RydDIgPSB1bmtub3duX2lzTm1zdHJ0OworICAgIGUtPm5vcm1hbC5pc05tc3RydDMg
PSB1bmtub3duX2lzTm1zdHJ0OworICAgIGUtPm5vcm1hbC5pc05tc3RydDQgPSB1bmtub3duX2lz
Tm1zdHJ0OworICAgIGUtPm5vcm1hbC5pc0ludmFsaWQyID0gdW5rbm93bl9pc0ludmFsaWQ7Cisg
ICAgZS0+bm9ybWFsLmlzSW52YWxpZDMgPSB1bmtub3duX2lzSW52YWxpZDsKKyAgICBlLT5ub3Jt
YWwuaXNJbnZhbGlkNCA9IHVua25vd25faXNJbnZhbGlkOworICB9CisgIGUtPm5vcm1hbC5lbmMu
dXRmOENvbnZlcnQgPSB1bmtub3duX3RvVXRmODsKKyAgZS0+bm9ybWFsLmVuYy51dGYxNkNvbnZl
cnQgPSB1bmtub3duX3RvVXRmMTY7CisgIHJldHVybiAmKGUtPm5vcm1hbC5lbmMpOworfQorCisv
KiBJZiB0aGlzIGVudW1lcmF0aW9uIGlzIGNoYW5nZWQsIGdldEVuY29kaW5nSW5kZXggYW5kIGVu
Y29kaW5ncworbXVzdCBhbHNvIGJlIGNoYW5nZWQuICovCitlbnVtIHsKKyAgVU5LTk9XTl9FTkMg
PSAtMSwKKyAgSVNPXzg4NTlfMV9FTkMgPSAwLAorICBVU19BU0NJSV9FTkMsCisgIFVURl84X0VO
QywKKyAgVVRGXzE2X0VOQywKKyAgVVRGXzE2QkVfRU5DLAorICBVVEZfMTZMRV9FTkMsCisgIC8q
IG11c3QgbWF0Y2ggZW5jb2RpbmdOYW1lcyB1cCB0byBoZXJlICovCisgIE5PX0VOQworfTsKKwor
c3RhdGljIGNvbnN0IGNoYXIgS1dfSVNPXzg4NTlfMVtdID0geworICBBU0NJSV9JLCBBU0NJSV9T
LCBBU0NJSV9PLCBBU0NJSV9NSU5VUywgQVNDSUlfOCwgQVNDSUlfOCwgQVNDSUlfNSwgQVNDSUlf
OSwKKyAgQVNDSUlfTUlOVVMsIEFTQ0lJXzEsICdcMCcKK307CitzdGF0aWMgY29uc3QgY2hhciBL
V19VU19BU0NJSVtdID0geworICBBU0NJSV9VLCBBU0NJSV9TLCBBU0NJSV9NSU5VUywgQVNDSUlf
QSwgQVNDSUlfUywgQVNDSUlfQywgQVNDSUlfSSwgQVNDSUlfSSwKKyAgJ1wwJworfTsKK3N0YXRp
YyBjb25zdCBjaGFyIEtXX1VURl84W10gPSAgeworICBBU0NJSV9VLCBBU0NJSV9ULCBBU0NJSV9G
LCBBU0NJSV9NSU5VUywgQVNDSUlfOCwgJ1wwJworfTsKK3N0YXRpYyBjb25zdCBjaGFyIEtXX1VU
Rl8xNltdID0geworICBBU0NJSV9VLCBBU0NJSV9ULCBBU0NJSV9GLCBBU0NJSV9NSU5VUywgQVND
SUlfMSwgQVNDSUlfNiwgJ1wwJworfTsKK3N0YXRpYyBjb25zdCBjaGFyIEtXX1VURl8xNkJFW10g
PSB7CisgIEFTQ0lJX1UsIEFTQ0lJX1QsIEFTQ0lJX0YsIEFTQ0lJX01JTlVTLCBBU0NJSV8xLCBB
U0NJSV82LCBBU0NJSV9CLCBBU0NJSV9FLAorICAnXDAnCit9Oworc3RhdGljIGNvbnN0IGNoYXIg
S1dfVVRGXzE2TEVbXSA9IHsKKyAgQVNDSUlfVSwgQVNDSUlfVCwgQVNDSUlfRiwgQVNDSUlfTUlO
VVMsIEFTQ0lJXzEsIEFTQ0lJXzYsIEFTQ0lJX0wsIEFTQ0lJX0UsCisgICdcMCcKK307CisKK3N0
YXRpYyBpbnQgRkFTVENBTEwKK2dldEVuY29kaW5nSW5kZXgoY29uc3QgY2hhciAqbmFtZSkKK3sK
KyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlbmNvZGluZ05hbWVzW10gPSB7CisgICAgS1df
SVNPXzg4NTlfMSwKKyAgICBLV19VU19BU0NJSSwKKyAgICBLV19VVEZfOCwKKyAgICBLV19VVEZf
MTYsCisgICAgS1dfVVRGXzE2QkUsCisgICAgS1dfVVRGXzE2TEUsCisgIH07CisgIGludCBpOwor
ICBpZiAobmFtZSA9PSBOVUxMKQorICAgIHJldHVybiBOT19FTkM7CisgIGZvciAoaSA9IDA7IGkg
PCAoaW50KShzaXplb2YoZW5jb2RpbmdOYW1lcykvc2l6ZW9mKGVuY29kaW5nTmFtZXNbMF0pKTsg
aSsrKQorICAgIGlmIChzdHJlcWNpKG5hbWUsIGVuY29kaW5nTmFtZXNbaV0pKQorICAgICAgcmV0
dXJuIGk7CisgIHJldHVybiBVTktOT1dOX0VOQzsKK30KKworLyogRm9yIGJpbmFyeSBjb21wYXRp
YmlsaXR5LCB3ZSBzdG9yZSB0aGUgaW5kZXggb2YgdGhlIGVuY29kaW5nCisgICBzcGVjaWZpZWQg
YXQgaW5pdGlhbGl6YXRpb24gaW4gdGhlIGlzVXRmMTYgbWVtYmVyLgorKi8KKworI2RlZmluZSBJ
TklUX0VOQ19JTkRFWChlbmMpICgoaW50KShlbmMpLT5pbml0RW5jLmlzVXRmMTYpCisjZGVmaW5l
IFNFVF9JTklUX0VOQ19JTkRFWChlbmMsIGkpICgoZW5jKS0+aW5pdEVuYy5pc1V0ZjE2ID0gKGNo
YXIpaSkKKworLyogVGhpcyBpcyB3aGF0IGRldGVjdHMgdGhlIGVuY29kaW5nLiAgZW5jb2RpbmdU
YWJsZSBtYXBzIGZyb20KKyAgIGVuY29kaW5nIGluZGljZXMgdG8gZW5jb2RpbmdzOyBJTklUX0VO
Q19JTkRFWChlbmMpIGlzIHRoZSBpbmRleCBvZgorICAgdGhlIGV4dGVybmFsIChwcm90b2NvbCkg
c3BlY2lmaWVkIGVuY29kaW5nOyBzdGF0ZSBpcworICAgWE1MX0NPTlRFTlRfU1RBVEUgaWYgd2Un
cmUgcGFyc2luZyBhbiBleHRlcm5hbCB0ZXh0IGVudGl0eSwgYW5kCisgICBYTUxfUFJPTE9HX1NU
QVRFIG90aGVyd2lzZS4KKyovCisKKworc3RhdGljIGludAoraW5pdFNjYW4oY29uc3QgRU5DT0RJ
TkcgKiBjb25zdCAqZW5jb2RpbmdUYWJsZSwKKyAgICAgICAgIGNvbnN0IElOSVRfRU5DT0RJTkcg
KmVuYywKKyAgICAgICAgIGludCBzdGF0ZSwKKyAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAg
ICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRy
KQoreworICBjb25zdCBFTkNPRElORyAqKmVuY1B0cjsKKworICBpZiAocHRyID09IGVuZCkKKyAg
ICByZXR1cm4gWE1MX1RPS19OT05FOworICBlbmNQdHIgPSBlbmMtPmVuY1B0cjsKKyAgaWYgKHB0
ciArIDEgPT0gZW5kKSB7CisgICAgLyogb25seSBhIHNpbmdsZSBieXRlIGF2YWlsYWJsZSBmb3Ig
YXV0by1kZXRlY3Rpb24gKi8KKyNpZm5kZWYgWE1MX0RURCAvKiBGSVhNRSAqLworICAgIC8qIGEg
d2VsbC1mb3JtZWQgZG9jdW1lbnQgZW50aXR5IG11c3QgaGF2ZSBtb3JlIHRoYW4gb25lIGJ5dGUg
Ki8KKyAgICBpZiAoc3RhdGUgIT0gWE1MX0NPTlRFTlRfU1RBVEUpCisgICAgICByZXR1cm4gWE1M
X1RPS19QQVJUSUFMOworI2VuZGlmCisgICAgLyogc28gd2UncmUgcGFyc2luZyBhbiBleHRlcm5h
bCB0ZXh0IGVudGl0eS4uLiAqLworICAgIC8qIGlmIFVURi0xNiB3YXMgZXh0ZXJuYWxseSBzcGVj
aWZpZWQsIHRoZW4gd2UgbmVlZCBhdCBsZWFzdCAyIGJ5dGVzICovCisgICAgc3dpdGNoIChJTklU
X0VOQ19JTkRFWChlbmMpKSB7CisgICAgY2FzZSBVVEZfMTZfRU5DOgorICAgIGNhc2UgVVRGXzE2
TEVfRU5DOgorICAgIGNhc2UgVVRGXzE2QkVfRU5DOgorICAgICAgcmV0dXJuIFhNTF9UT0tfUEFS
VElBTDsKKyAgICB9CisgICAgc3dpdGNoICgodW5zaWduZWQgY2hhcikqcHRyKSB7CisgICAgY2Fz
ZSAweEZFOgorICAgIGNhc2UgMHhGRjoKKyAgICBjYXNlIDB4RUY6IC8qIHBvc3NpYmx5IGZpcnN0
IGJ5dGUgb2YgVVRGLTggQk9NICovCisgICAgICBpZiAoSU5JVF9FTkNfSU5ERVgoZW5jKSA9PSBJ
U09fODg1OV8xX0VOQworICAgICAgICAgICYmIHN0YXRlID09IFhNTF9DT05URU5UX1NUQVRFKQor
ICAgICAgICBicmVhazsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgMHgwMDoK
KyAgICBjYXNlIDB4M0M6CisgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICAgIH0KKyAg
fQorICBlbHNlIHsKKyAgICBzd2l0Y2ggKCgodW5zaWduZWQgY2hhcilwdHJbMF0gPDwgOCkgfCAo
dW5zaWduZWQgY2hhcilwdHJbMV0pIHsKKyAgICBjYXNlIDB4RkVGRjoKKyAgICAgIGlmIChJTklU
X0VOQ19JTkRFWChlbmMpID09IElTT184ODU5XzFfRU5DCisgICAgICAgICAgJiYgc3RhdGUgPT0g
WE1MX0NPTlRFTlRfU1RBVEUpCisgICAgICAgIGJyZWFrOworICAgICAgKm5leHRUb2tQdHIgPSBw
dHIgKyAyOworICAgICAgKmVuY1B0ciA9IGVuY29kaW5nVGFibGVbVVRGXzE2QkVfRU5DXTsKKyAg
ICAgIHJldHVybiBYTUxfVE9LX0JPTTsKKyAgICAvKiAwMCAzQyBpcyBoYW5kbGVkIGluIHRoZSBk
ZWZhdWx0IGNhc2UgKi8KKyAgICBjYXNlIDB4M0MwMDoKKyAgICAgIGlmICgoSU5JVF9FTkNfSU5E
RVgoZW5jKSA9PSBVVEZfMTZCRV9FTkMKKyAgICAgICAgICAgfHwgSU5JVF9FTkNfSU5ERVgoZW5j
KSA9PSBVVEZfMTZfRU5DKQorICAgICAgICAgICYmIHN0YXRlID09IFhNTF9DT05URU5UX1NUQVRF
KQorICAgICAgICBicmVhazsKKyAgICAgICplbmNQdHIgPSBlbmNvZGluZ1RhYmxlW1VURl8xNkxF
X0VOQ107CisgICAgICByZXR1cm4gWG1sVG9rKCplbmNQdHIsIHN0YXRlLCBwdHIsIGVuZCwgbmV4
dFRva1B0cik7CisgICAgY2FzZSAweEZGRkU6CisgICAgICBpZiAoSU5JVF9FTkNfSU5ERVgoZW5j
KSA9PSBJU09fODg1OV8xX0VOQworICAgICAgICAgICYmIHN0YXRlID09IFhNTF9DT05URU5UX1NU
QVRFKQorICAgICAgICBicmVhazsKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgMjsKKyAgICAg
ICplbmNQdHIgPSBlbmNvZGluZ1RhYmxlW1VURl8xNkxFX0VOQ107CisgICAgICByZXR1cm4gWE1M
X1RPS19CT007CisgICAgY2FzZSAweEVGQkI6CisgICAgICAvKiBNYXliZSBhIFVURi04IEJPTSAo
RUYgQkIgQkYpICovCisgICAgICAvKiBJZiB0aGVyZSdzIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVk
IChleHRlcm5hbCkgZW5jb2RpbmcKKyAgICAgICAgIG9mIElTTy04ODU5LTEgb3Igc29tZSBmbGF2
b3VyIG9mIFVURi0xNgorICAgICAgICAgYW5kIHRoaXMgaXMgYW4gZXh0ZXJuYWwgdGV4dCBlbnRp
dHksCisgICAgICAgICBkb24ndCBsb29rIGZvciB0aGUgQk9NLAorICAgICAgICAgYmVjYXVzZSBp
dCBtaWdodCBiZSBhIGxlZ2FsIGRhdGEuCisgICAgICAqLworICAgICAgaWYgKHN0YXRlID09IFhN
TF9DT05URU5UX1NUQVRFKSB7CisgICAgICAgIGludCBlID0gSU5JVF9FTkNfSU5ERVgoZW5jKTsK
KyAgICAgICAgaWYgKGUgPT0gSVNPXzg4NTlfMV9FTkMgfHwgZSA9PSBVVEZfMTZCRV9FTkMKKyAg
ICAgICAgICAgIHx8IGUgPT0gVVRGXzE2TEVfRU5DIHx8IGUgPT0gVVRGXzE2X0VOQykKKyAgICAg
ICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChwdHIgKyAyID09IGVuZCkKKyAgICAgICAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgIGlmICgodW5zaWduZWQgY2hhcilwdHJbMl0g
PT0gMHhCRikgeworICAgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIDM7CisgICAgICAgICplbmNQ
dHIgPSBlbmNvZGluZ1RhYmxlW1VURl84X0VOQ107CisgICAgICAgIHJldHVybiBYTUxfVE9LX0JP
TTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBpZiAocHRyWzBd
ID09ICdcMCcpIHsKKyAgICAgICAgLyogMCBpc24ndCBhIGxlZ2FsIGRhdGEgY2hhcmFjdGVyLiBG
dXJ0aGVybW9yZSBhIGRvY3VtZW50CisgICAgICAgICAgIGVudGl0eSBjYW4gb25seSBzdGFydCB3
aXRoIEFTQ0lJIGNoYXJhY3RlcnMuICBTbyB0aGUgb25seQorICAgICAgICAgICB3YXkgdGhpcyBj
YW4gZmFpbCB0byBiZSBiaWctZW5kaWFuIFVURi0xNiBpZiBpdCBpdCdzIGFuCisgICAgICAgICAg
IGV4dGVybmFsIHBhcnNlZCBnZW5lcmFsIGVudGl0eSB0aGF0J3MgbGFiZWxsZWQgYXMKKyAgICAg
ICAgICAgVVRGLTE2TEUuCisgICAgICAgICovCisgICAgICAgIGlmIChzdGF0ZSA9PSBYTUxfQ09O
VEVOVF9TVEFURSAmJiBJTklUX0VOQ19JTkRFWChlbmMpID09IFVURl8xNkxFX0VOQykKKyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgKmVuY1B0ciA9IGVuY29kaW5nVGFibGVbVVRGXzE2QkVfRU5D
XTsKKyAgICAgICAgcmV0dXJuIFhtbFRvaygqZW5jUHRyLCBzdGF0ZSwgcHRyLCBlbmQsIG5leHRU
b2tQdHIpOworICAgICAgfQorICAgICAgZWxzZSBpZiAocHRyWzFdID09ICdcMCcpIHsKKyAgICAg
ICAgLyogV2UgY291bGQgcmVjb3ZlciBoZXJlIGluIHRoZSBjYXNlOgorICAgICAgICAgICAgLSBw
YXJzaW5nIGFuIGV4dGVybmFsIGVudGl0eQorICAgICAgICAgICAgLSBzZWNvbmQgYnl0ZSBpcyAw
CisgICAgICAgICAgICAtIG5vIGV4dGVybmFsbHkgc3BlY2lmaWVkIGVuY29kaW5nCisgICAgICAg
ICAgICAtIG5vIGVuY29kaW5nIGRlY2xhcmF0aW9uCisgICAgICAgICAgIGJ5IGFzc3VtaW5nIFVU
Ri0xNkxFLiAgQnV0IHdlIGRvbid0LCBiZWNhdXNlIHRoaXMgd291bGQgbWVhbiB3aGVuCisgICAg
ICAgICAgIHByZXNlbnRlZCBqdXN0IHdpdGggYSBzaW5nbGUgYnl0ZSwgd2UgY291bGRuJ3QgcmVs
aWFibHkgZGV0ZXJtaW5lCisgICAgICAgICAgIHdoZXRoZXIgd2UgbmVlZGVkIGZ1cnRoZXIgYnl0
ZXMuCisgICAgICAgICovCisgICAgICAgIGlmIChzdGF0ZSA9PSBYTUxfQ09OVEVOVF9TVEFURSkK
KyAgICAgICAgICBicmVhazsKKyAgICAgICAgKmVuY1B0ciA9IGVuY29kaW5nVGFibGVbVVRGXzE2
TEVfRU5DXTsKKyAgICAgICAgcmV0dXJuIFhtbFRvaygqZW5jUHRyLCBzdGF0ZSwgcHRyLCBlbmQs
IG5leHRUb2tQdHIpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgICplbmNQ
dHIgPSBlbmNvZGluZ1RhYmxlW0lOSVRfRU5DX0lOREVYKGVuYyldOworICByZXR1cm4gWG1sVG9r
KCplbmNQdHIsIHN0YXRlLCBwdHIsIGVuZCwgbmV4dFRva1B0cik7Cit9CisKKworI2RlZmluZSBO
Uyh4KSB4CisjZGVmaW5lIG5zKHgpIHgKKyNkZWZpbmUgWE1MX1RPS19OU19DCisjaW5jbHVkZSAi
eG1sdG9rX25zLmMiCisjdW5kZWYgWE1MX1RPS19OU19DCisjdW5kZWYgTlMKKyN1bmRlZiBucwor
CisjaWZkZWYgWE1MX05TCisKKyNkZWZpbmUgTlMoeCkgeCAjIyBOUworI2RlZmluZSBucyh4KSB4
ICMjIF9ucworCisjZGVmaW5lIFhNTF9UT0tfTlNfQworI2luY2x1ZGUgInhtbHRva19ucy5jIgor
I3VuZGVmIFhNTF9UT0tfTlNfQworCisjdW5kZWYgTlMKKyN1bmRlZiBucworCitFTkNPRElORyAq
CitYbWxJbml0VW5rbm93bkVuY29kaW5nTlModm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVkVSVEVSIGNv
bnZlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpCit7CisgIEVO
Q09ESU5HICplbmMgPSBYbWxJbml0VW5rbm93bkVuY29kaW5nKG1lbSwgdGFibGUsIGNvbnZlcnQs
IHVzZXJEYXRhKTsKKyAgaWYgKGVuYykKKyAgICAoKHN0cnVjdCBub3JtYWxfZW5jb2RpbmcgKill
bmMpLT50eXBlW0FTQ0lJX0NPTE9OXSA9IEJUX0NPTE9OOworICByZXR1cm4gZW5jOworfQorCisj
ZW5kaWYgLyogWE1MX05TICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2suaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3ht
bHRvay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNhODY3YWE2YjQyOWNmOWFiMDcyMWNlODllZTI4MWU5NTI5YmJm
YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2suaApAQCAtMCwwICsxLDMxNiBAQAor
LyogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUgQ2Vu
dGVyIEx0ZAorICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4K
KyovCisKKyNpZm5kZWYgWG1sVG9rX0lOQ0xVREVECisjZGVmaW5lIFhtbFRva19JTkNMVURFRCAx
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogVGhlIGZv
bGxvd2luZyB0b2tlbiBtYXkgYmUgcmV0dXJuZWQgYnkgWG1sQ29udGVudFRvayAqLworI2RlZmlu
ZSBYTUxfVE9LX1RSQUlMSU5HX1JTUUIgLTUgLyogXSBvciBdXSBhdCB0aGUgZW5kIG9mIHRoZSBz
Y2FuOyBtaWdodCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQg
b2YgaWxsZWdhbCBdXT4gc2VxdWVuY2UgKi8KKy8qIFRoZSBmb2xsb3dpbmcgdG9rZW5zIG1heSBi
ZSByZXR1cm5lZCBieSBib3RoIFhtbFByb2xvZ1RvayBhbmQKKyAgIFhtbENvbnRlbnRUb2suCisq
LworI2RlZmluZSBYTUxfVE9LX05PTkUgLTQgICAgICAgICAgLyogVGhlIHN0cmluZyB0byBiZSBz
Y2FubmVkIGlzIGVtcHR5ICovCisjZGVmaW5lIFhNTF9UT0tfVFJBSUxJTkdfQ1IgLTMgICAvKiBB
IENSIGF0IHRoZSBlbmQgb2YgdGhlIHNjYW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtaWdodCBiZSBwYXJ0IG9mIENSTEYgc2VxdWVuY2UgKi8KKyNkZWZpbmUgWE1MX1RP
S19QQVJUSUFMX0NIQVIgLTIgIC8qIG9ubHkgcGFydCBvZiBhIG11bHRpYnl0ZSBzZXF1ZW5jZSAq
LworI2RlZmluZSBYTUxfVE9LX1BBUlRJQUwgLTEgICAgICAgLyogb25seSBwYXJ0IG9mIGEgdG9r
ZW4gKi8KKyNkZWZpbmUgWE1MX1RPS19JTlZBTElEIDAKKworLyogVGhlIGZvbGxvd2luZyB0b2tl
bnMgYXJlIHJldHVybmVkIGJ5IFhtbENvbnRlbnRUb2s7IHNvbWUgYXJlIGFsc28KKyAgIHJldHVy
bmVkIGJ5IFhtbEF0dHJpYnV0ZVZhbHVlVG9rLCBYbWxFbnRpdHlUb2ssIFhtbENkYXRhU2VjdGlv
blRvay4KKyovCisjZGVmaW5lIFhNTF9UT0tfU1RBUlRfVEFHX1dJVEhfQVRUUyAxCisjZGVmaW5l
IFhNTF9UT0tfU1RBUlRfVEFHX05PX0FUVFMgMgorI2RlZmluZSBYTUxfVE9LX0VNUFRZX0VMRU1F
TlRfV0lUSF9BVFRTIDMgLyogZW1wdHkgZWxlbWVudCB0YWcgPGUvPiAqLworI2RlZmluZSBYTUxf
VE9LX0VNUFRZX0VMRU1FTlRfTk9fQVRUUyA0CisjZGVmaW5lIFhNTF9UT0tfRU5EX1RBRyA1Cisj
ZGVmaW5lIFhNTF9UT0tfREFUQV9DSEFSUyA2CisjZGVmaW5lIFhNTF9UT0tfREFUQV9ORVdMSU5F
IDcKKyNkZWZpbmUgWE1MX1RPS19DREFUQV9TRUNUX09QRU4gOAorI2RlZmluZSBYTUxfVE9LX0VO
VElUWV9SRUYgOQorI2RlZmluZSBYTUxfVE9LX0NIQVJfUkVGIDEwICAgICAgICAgICAgICAgLyog
bnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlICovCisKKy8qIFRoZSBmb2xsb3dpbmcgdG9rZW5z
IG1heSBiZSByZXR1cm5lZCBieSBib3RoIFhtbFByb2xvZ1RvayBhbmQKKyAgIFhtbENvbnRlbnRU
b2suCisqLworI2RlZmluZSBYTUxfVE9LX1BJIDExICAgICAgICAgICAgICAgICAgICAgLyogcHJv
Y2Vzc2luZyBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYTUxfVE9LX1hNTF9ERUNMIDEyICAgICAg
ICAgICAgICAgLyogWE1MIGRlY2wgb3IgdGV4dCBkZWNsICovCisjZGVmaW5lIFhNTF9UT0tfQ09N
TUVOVCAxMworI2RlZmluZSBYTUxfVE9LX0JPTSAxNCAgICAgICAgICAgICAgICAgICAgLyogQnl0
ZSBvcmRlciBtYXJrICovCisKKy8qIFRoZSBmb2xsb3dpbmcgdG9rZW5zIGFyZSByZXR1cm5lZCBv
bmx5IGJ5IFhtbFByb2xvZ1RvayAqLworI2RlZmluZSBYTUxfVE9LX1BST0xPR19TIDE1CisjZGVm
aW5lIFhNTF9UT0tfREVDTF9PUEVOIDE2ICAgICAgICAgICAgICAvKiA8IWZvbyAqLworI2RlZmlu
ZSBYTUxfVE9LX0RFQ0xfQ0xPU0UgMTcgICAgICAgICAgICAgLyogPiAqLworI2RlZmluZSBYTUxf
VE9LX05BTUUgMTgKKyNkZWZpbmUgWE1MX1RPS19OTVRPS0VOIDE5CisjZGVmaW5lIFhNTF9UT0tf
UE9VTkRfTkFNRSAyMCAgICAgICAgICAgICAvKiAjbmFtZSAqLworI2RlZmluZSBYTUxfVE9LX09S
IDIxICAgICAgICAgICAgICAgICAgICAgLyogfCAqLworI2RlZmluZSBYTUxfVE9LX1BFUkNFTlQg
MjIKKyNkZWZpbmUgWE1MX1RPS19PUEVOX1BBUkVOIDIzCisjZGVmaW5lIFhNTF9UT0tfQ0xPU0Vf
UEFSRU4gMjQKKyNkZWZpbmUgWE1MX1RPS19PUEVOX0JSQUNLRVQgMjUKKyNkZWZpbmUgWE1MX1RP
S19DTE9TRV9CUkFDS0VUIDI2CisjZGVmaW5lIFhNTF9UT0tfTElURVJBTCAyNworI2RlZmluZSBY
TUxfVE9LX1BBUkFNX0VOVElUWV9SRUYgMjgKKyNkZWZpbmUgWE1MX1RPS19JTlNUQU5DRV9TVEFS
VCAyOQorCisvKiBUaGUgZm9sbG93aW5nIG9jY3VyIG9ubHkgaW4gZWxlbWVudCB0eXBlIGRlY2xh
cmF0aW9ucyAqLworI2RlZmluZSBYTUxfVE9LX05BTUVfUVVFU1RJT04gMzAgICAgICAgICAgLyog
bmFtZT8gKi8KKyNkZWZpbmUgWE1MX1RPS19OQU1FX0FTVEVSSVNLIDMxICAgICAgICAgIC8qIG5h
bWUqICovCisjZGVmaW5lIFhNTF9UT0tfTkFNRV9QTFVTIDMyICAgICAgICAgICAgICAvKiBuYW1l
KyAqLworI2RlZmluZSBYTUxfVE9LX0NPTkRfU0VDVF9PUEVOIDMzICAgICAgICAgLyogPCFbICov
CisjZGVmaW5lIFhNTF9UT0tfQ09ORF9TRUNUX0NMT1NFIDM0ICAgICAgICAvKiBdXT4gKi8KKyNk
ZWZpbmUgWE1MX1RPS19DTE9TRV9QQVJFTl9RVUVTVElPTiAzNSAgIC8qICk/ICovCisjZGVmaW5l
IFhNTF9UT0tfQ0xPU0VfUEFSRU5fQVNURVJJU0sgMzYgICAvKiApKiAqLworI2RlZmluZSBYTUxf
VE9LX0NMT1NFX1BBUkVOX1BMVVMgMzcgICAgICAgLyogKSsgKi8KKyNkZWZpbmUgWE1MX1RPS19D
T01NQSAzOAorCisvKiBUaGUgZm9sbG93aW5nIHRva2VuIGlzIHJldHVybmVkIG9ubHkgYnkgWG1s
QXR0cmlidXRlVmFsdWVUb2sgKi8KKyNkZWZpbmUgWE1MX1RPS19BVFRSSUJVVEVfVkFMVUVfUyAz
OQorCisvKiBUaGUgZm9sbG93aW5nIHRva2VuIGlzIHJldHVybmVkIG9ubHkgYnkgWG1sQ2RhdGFT
ZWN0aW9uVG9rICovCisjZGVmaW5lIFhNTF9UT0tfQ0RBVEFfU0VDVF9DTE9TRSA0MAorCisvKiBX
aXRoIG5hbWVzcGFjZSBwcm9jZXNzaW5nIHRoaXMgaXMgcmV0dXJuZWQgYnkgWG1sUHJvbG9nVG9r
IGZvciBhCisgICBuYW1lIHdpdGggYSBjb2xvbi4KKyovCisjZGVmaW5lIFhNTF9UT0tfUFJFRklY
RURfTkFNRSA0MQorCisjaWZkZWYgWE1MX0RURAorI2RlZmluZSBYTUxfVE9LX0lHTk9SRV9TRUNU
IDQyCisjZW5kaWYgLyogWE1MX0RURCAqLworCisjaWZkZWYgWE1MX0RURAorI2RlZmluZSBYTUxf
Tl9TVEFURVMgNAorI2Vsc2UgLyogbm90IFhNTF9EVEQgKi8KKyNkZWZpbmUgWE1MX05fU1RBVEVT
IDMKKyNlbmRpZiAvKiBub3QgWE1MX0RURCAqLworCisjZGVmaW5lIFhNTF9QUk9MT0dfU1RBVEUg
MAorI2RlZmluZSBYTUxfQ09OVEVOVF9TVEFURSAxCisjZGVmaW5lIFhNTF9DREFUQV9TRUNUSU9O
X1NUQVRFIDIKKyNpZmRlZiBYTUxfRFRECisjZGVmaW5lIFhNTF9JR05PUkVfU0VDVElPTl9TVEFU
RSAzCisjZW5kaWYgLyogWE1MX0RURCAqLworCisjZGVmaW5lIFhNTF9OX0xJVEVSQUxfVFlQRVMg
MgorI2RlZmluZSBYTUxfQVRUUklCVVRFX1ZBTFVFX0xJVEVSQUwgMAorI2RlZmluZSBYTUxfRU5U
SVRZX1ZBTFVFX0xJVEVSQUwgMQorCisvKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBhc3NlZCB0
byBYbWxVdGY4RW5jb2RlIG11c3QgYmUgYXQgbGVhc3QgdGhpcy4gKi8KKyNkZWZpbmUgWE1MX1VU
RjhfRU5DT0RFX01BWCA0CisvKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBhc3NlZCB0byBYbWxV
dGYxNkVuY29kZSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMuICovCisjZGVmaW5lIFhNTF9VVEYxNl9F
TkNPREVfTUFYIDIKKwordHlwZWRlZiBzdHJ1Y3QgcG9zaXRpb24geworICAvKiBmaXJzdCBsaW5l
IGFuZCBmaXJzdCBjb2x1bW4gYXJlIDAgbm90IDEgKi8KKyAgWE1MX1NpemUgbGluZU51bWJlcjsK
KyAgWE1MX1NpemUgY29sdW1uTnVtYmVyOworfSBQT1NJVElPTjsKKwordHlwZWRlZiBzdHJ1Y3Qg
eworICBjb25zdCBjaGFyICpuYW1lOworICBjb25zdCBjaGFyICp2YWx1ZVB0cjsKKyAgY29uc3Qg
Y2hhciAqdmFsdWVFbmQ7CisgIGNoYXIgbm9ybWFsaXplZDsKK30gQVRUUklCVVRFOworCitzdHJ1
Y3QgZW5jb2Rpbmc7Cit0eXBlZGVmIHN0cnVjdCBlbmNvZGluZyBFTkNPRElORzsKKwordHlwZWRl
ZiBpbnQgKFBUUkNBTEwgKlNDQU5ORVIpKGNvbnN0IEVOQ09ESU5HICosCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICoqKTsKKworc3RydWN0IGVuY29kaW5nIHsKKyAgU0NBTk5FUiBzY2FubmVyc1tYTUxf
Tl9TVEFURVNdOworICBTQ0FOTkVSIGxpdGVyYWxTY2FubmVyc1tYTUxfTl9MSVRFUkFMX1RZUEVT
XTsKKyAgaW50IChQVFJDQUxMICpzYW1lTmFtZSkoY29uc3QgRU5DT0RJTkcgKiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICopOworICBpbnQgKFBUUkNBTEwgKm5hbWVNYXRjaGVzQXNjaWkpKGNvbnN0
IEVOQ09ESU5HICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOworICBpbnQgKFBU
UkZBU1RDQUxMICpuYW1lTGVuZ3RoKShjb25zdCBFTkNPRElORyAqLCBjb25zdCBjaGFyICopOwor
ICBjb25zdCBjaGFyICooUFRSRkFTVENBTEwgKnNraXBTKShjb25zdCBFTkNPRElORyAqLCBjb25z
dCBjaGFyICopOworICBpbnQgKFBUUkNBTEwgKmdldEF0dHMpKGNvbnN0IEVOQ09ESU5HICplbmMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBhdHRzTWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEFUVFJJ
QlVURSAqYXR0cyk7CisgIGludCAoUFRSRkFTVENBTEwgKmNoYXJSZWZOdW1iZXIpKGNvbnN0IEVO
Q09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0cik7CisgIGludCAoUFRSQ0FMTCAqcHJlZGVmaW5l
ZEVudGl0eU5hbWUpKGNvbnN0IEVOQ09ESU5HICosCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqKTsKKyAgdm9pZCAoUFRSQ0FMTCAqdXBkYXRlUG9zaXRpb24p
KGNvbnN0IEVOQ09ESU5HICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1NJVElPTiAqKTsKKyAg
aW50IChQVFJDQUxMICppc1B1YmxpY0lkKShjb25zdCBFTkNPRElORyAqZW5jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqKmJhZFB0cik7CisgIHZvaWQgKFBUUkNBTEwgKnV0ZjhDb252ZXJ0KShjb25zdCBF
TkNPRElORyAqZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
KmZyb21QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnJvbUxp
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0b1AsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b0xpbSk7CisgIHZvaWQgKFBUUkNBTEwg
KnV0ZjE2Q29udmVydCkoY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICoqZnJvbVAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqZnJvbUxpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCAqKnRvUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCAqdG9MaW0pOworICBpbnQgbWluQnl0ZXNQZXJDaGFyOworICBj
aGFyIGlzVXRmODsKKyAgY2hhciBpc1V0ZjE2OworfTsKKworLyogU2NhbiB0aGUgc3RyaW5nIHN0
YXJ0aW5nIGF0IHB0ciB1bnRpbCB0aGUgZW5kIG9mIHRoZSBuZXh0IGNvbXBsZXRlCisgICB0b2tl
biwgYnV0IGRvIG5vdCBzY2FuIHBhc3QgZXB0ci4gIFJldHVybiBhbiBpbnRlZ2VyIGdpdmluZyB0
aGUKKyAgIHR5cGUgb2YgdG9rZW4uCisKKyAgIFJldHVybiBYTUxfVE9LX05PTkUgd2hlbiBwdHIg
PT0gZXB0cjsgbmV4dFRva1B0ciB3aWxsIG5vdCBiZSBzZXQuCisKKyAgIFJldHVybiBYTUxfVE9L
X1BBUlRJQUwgd2hlbiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYSBjb21wbGV0ZQorICAg
dG9rZW47IG5leHRUb2tQdHIgd2lsbCBub3QgYmUgc2V0LgorCisgICBSZXR1cm4gWE1MX1RPS19J
TlZBTElEIHdoZW4gdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCBhIHZhbGlkCisgICB0b2tlbjsg
bmV4dFRva1B0ciB3aWxsIGJlIHNldCB0byBwb2ludCB0byB0aGUgY2hhcmFjdGVyIHdoaWNoIG1h
ZGUKKyAgIHRoZSB0b2tlbiBpbnZhbGlkLgorCisgICBPdGhlcndpc2UgdGhlIHN0cmluZyBzdGFy
dHMgd2l0aCBhIHZhbGlkIHRva2VuOyBuZXh0VG9rUHRyIHdpbGwgYmUKKyAgIHNldCB0byBwb2lu
dCB0byB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgZW5kIG9mIHRoYXQgdG9rZW4uCisKKyAg
IEVhY2ggZGF0YSBjaGFyYWN0ZXIgY291bnRzIGFzIGEgc2luZ2xlIHRva2VuLCBidXQgYWRqYWNl
bnQgZGF0YQorICAgY2hhcmFjdGVycyBtYXkgYmUgcmV0dXJuZWQgdG9nZXRoZXIuICBTaW1pbGFy
bHkgZm9yIGNoYXJhY3RlcnMgaW4KKyAgIHRoZSBwcm9sb2cgb3V0c2lkZSBsaXRlcmFscywgY29t
bWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLgorKi8KKworCisjZGVmaW5lIFhtbFRv
ayhlbmMsIHN0YXRlLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAorICAoKChlbmMpLT5zY2FubmVy
c1tzdGF0ZV0pKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpKQorCisjZGVmaW5lIFhtbFByb2xv
Z1RvayhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKSBcCisgICBYbWxUb2soZW5jLCBYTUxfUFJP
TE9HX1NUQVRFLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKworI2RlZmluZSBYbWxDb250ZW50VG9r
KGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKKyAgIFhtbFRvayhlbmMsIFhNTF9DT05URU5U
X1NUQVRFLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKworI2RlZmluZSBYbWxDZGF0YVNlY3Rpb25U
b2soZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAorICAgWG1sVG9rKGVuYywgWE1MX0NEQVRB
X1NFQ1RJT05fU1RBVEUsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorCisjaWZkZWYgWE1MX0RURAor
CisjZGVmaW5lIFhtbElnbm9yZVNlY3Rpb25Ub2soZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikg
XAorICAgWG1sVG9rKGVuYywgWE1MX0lHTk9SRV9TRUNUSU9OX1NUQVRFLCBwdHIsIGVuZCwgbmV4
dFRva1B0cikKKworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKworLyogVGhpcyBpcyB1c2VkIGZvciBw
ZXJmb3JtaW5nIGEgMm5kLWxldmVsIHRva2VuaXphdGlvbiBvbiB0aGUgY29udGVudAorICAgb2Yg
YSBsaXRlcmFsIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXR1cm5lZCBieSBYbWxUb2suCisqLwor
I2RlZmluZSBYbWxMaXRlcmFsVG9rKGVuYywgbGl0ZXJhbFR5cGUsIHB0ciwgZW5kLCBuZXh0VG9r
UHRyKSBcCisgICgoKGVuYyktPmxpdGVyYWxTY2FubmVyc1tsaXRlcmFsVHlwZV0pKGVuYywgcHRy
LCBlbmQsIG5leHRUb2tQdHIpKQorCisjZGVmaW5lIFhtbEF0dHJpYnV0ZVZhbHVlVG9rKGVuYywg
cHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKKyAgIFhtbExpdGVyYWxUb2soZW5jLCBYTUxfQVRUUklC
VVRFX1ZBTFVFX0xJVEVSQUwsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorCisjZGVmaW5lIFhtbEVu
dGl0eVZhbHVlVG9rKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKKyAgIFhtbExpdGVyYWxU
b2soZW5jLCBYTUxfRU5USVRZX1ZBTFVFX0xJVEVSQUwsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQor
CisjZGVmaW5lIFhtbFNhbWVOYW1lKGVuYywgcHRyMSwgcHRyMikgKCgoZW5jKS0+c2FtZU5hbWUp
KGVuYywgcHRyMSwgcHRyMikpCisKKyNkZWZpbmUgWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsIHB0
cjEsIGVuZDEsIHB0cjIpIFwKKyAgKCgoZW5jKS0+bmFtZU1hdGNoZXNBc2NpaSkoZW5jLCBwdHIx
LCBlbmQxLCBwdHIyKSkKKworI2RlZmluZSBYbWxOYW1lTGVuZ3RoKGVuYywgcHRyKSBcCisgICgo
KGVuYyktPm5hbWVMZW5ndGgpKGVuYywgcHRyKSkKKworI2RlZmluZSBYbWxTa2lwUyhlbmMsIHB0
cikgXAorICAoKChlbmMpLT5za2lwUykoZW5jLCBwdHIpKQorCisjZGVmaW5lIFhtbEdldEF0dHJp
YnV0ZXMoZW5jLCBwdHIsIGF0dHNNYXgsIGF0dHMpIFwKKyAgKCgoZW5jKS0+Z2V0QXR0cykoZW5j
LCBwdHIsIGF0dHNNYXgsIGF0dHMpKQorCisjZGVmaW5lIFhtbENoYXJSZWZOdW1iZXIoZW5jLCBw
dHIpIFwKKyAgKCgoZW5jKS0+Y2hhclJlZk51bWJlcikoZW5jLCBwdHIpKQorCisjZGVmaW5lIFht
bFByZWRlZmluZWRFbnRpdHlOYW1lKGVuYywgcHRyLCBlbmQpIFwKKyAgKCgoZW5jKS0+cHJlZGVm
aW5lZEVudGl0eU5hbWUpKGVuYywgcHRyLCBlbmQpKQorCisjZGVmaW5lIFhtbFVwZGF0ZVBvc2l0
aW9uKGVuYywgcHRyLCBlbmQsIHBvcykgXAorICAoKChlbmMpLT51cGRhdGVQb3NpdGlvbikoZW5j
LCBwdHIsIGVuZCwgcG9zKSkKKworI2RlZmluZSBYbWxJc1B1YmxpY0lkKGVuYywgcHRyLCBlbmQs
IGJhZFB0cikgXAorICAoKChlbmMpLT5pc1B1YmxpY0lkKShlbmMsIHB0ciwgZW5kLCBiYWRQdHIp
KQorCisjZGVmaW5lIFhtbFV0ZjhDb252ZXJ0KGVuYywgZnJvbVAsIGZyb21MaW0sIHRvUCwgdG9M
aW0pIFwKKyAgKCgoZW5jKS0+dXRmOENvbnZlcnQpKGVuYywgZnJvbVAsIGZyb21MaW0sIHRvUCwg
dG9MaW0pKQorCisjZGVmaW5lIFhtbFV0ZjE2Q29udmVydChlbmMsIGZyb21QLCBmcm9tTGltLCB0
b1AsIHRvTGltKSBcCisgICgoKGVuYyktPnV0ZjE2Q29udmVydCkoZW5jLCBmcm9tUCwgZnJvbUxp
bSwgdG9QLCB0b0xpbSkpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRU5DT0RJTkcgaW5pdEVuYzsK
KyAgY29uc3QgRU5DT0RJTkcgKiplbmNQdHI7Cit9IElOSVRfRU5DT0RJTkc7CisKK2ludCBYbWxQ
YXJzZVhtbERlY2woaW50IGlzR2VuZXJhbFRleHRFbnRpdHksCisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEVOQ09ESU5HICplbmMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0
ciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqYmFkUHRyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICoqdmVyc2lvblB0ciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnZlcnNpb25F
bmRQdHIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiplbmNvZGluZ05hbWVQdHIs
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICoqbmFtZWRFbmNvZGluZ1B0ciwK
KyAgICAgICAgICAgICAgICAgICAgaW50ICpzdGFuZGFsb25lUHRyKTsKKworaW50IFhtbEluaXRF
bmNvZGluZyhJTklUX0VOQ09ESU5HICosIGNvbnN0IEVOQ09ESU5HICoqLCBjb25zdCBjaGFyICpu
YW1lKTsKK2NvbnN0IEVOQ09ESU5HICpYbWxHZXRVdGY4SW50ZXJuYWxFbmNvZGluZyh2b2lkKTsK
K2NvbnN0IEVOQ09ESU5HICpYbWxHZXRVdGYxNkludGVybmFsRW5jb2Rpbmcodm9pZCk7CitpbnQg
RkFTVENBTEwgWG1sVXRmOEVuY29kZShpbnQgY2hhck51bWJlciwgY2hhciAqYnVmKTsKK2ludCBG
QVNUQ0FMTCBYbWxVdGYxNkVuY29kZShpbnQgY2hhck51bWJlciwgdW5zaWduZWQgc2hvcnQgKmJ1
Zik7CitpbnQgWG1sU2l6ZU9mVW5rbm93bkVuY29kaW5nKHZvaWQpOworCisKK3R5cGVkZWYgaW50
IChYTUxDQUxMICpDT05WRVJURVIpICh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqcCk7CisK
K0VOQ09ESU5HICoKK1htbEluaXRVbmtub3duRW5jb2Rpbmcodm9pZCAqbWVtLAorICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBDT05WRVJU
RVIgY29udmVydCwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworCitp
bnQgWG1sUGFyc2VYbWxEZWNsTlMoaW50IGlzR2VuZXJhbFRleHRFbnRpdHksCisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAor
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipiYWRQdHIsCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqKnZlcnNpb25QdHIsCisgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqKnZlcnNpb25FbmRQdHIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqKmVuY29kaW5nTmFtZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFTkNP
RElORyAqKm5hbWVkRW5jb2RpbmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGFu
ZGFsb25lUHRyKTsKKworaW50IFhtbEluaXRFbmNvZGluZ05TKElOSVRfRU5DT0RJTkcgKiwgY29u
c3QgRU5DT0RJTkcgKiosIGNvbnN0IGNoYXIgKm5hbWUpOworY29uc3QgRU5DT0RJTkcgKlhtbEdl
dFV0ZjhJbnRlcm5hbEVuY29kaW5nTlModm9pZCk7Citjb25zdCBFTkNPRElORyAqWG1sR2V0VXRm
MTZJbnRlcm5hbEVuY29kaW5nTlModm9pZCk7CitFTkNPRElORyAqCitYbWxJbml0VW5rbm93bkVu
Y29kaW5nTlModm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdGFibGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVkVSVEVSIGNvbnZlcnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKKworI2VuZGlmIC8qIG5vdCBYbWxUb2tfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMv
bGliL3htbHRva19pbXBsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2tfaW1wbC5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMjg5
NWI4NzczOWVmMDMxZWNkOTMzZGY0Yjk1ZTI0NDFmODk2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVz
L2xpYi94bWx0b2tfaW1wbC5jCkBAIC0wLDAgKzEsMTc4MyBAQAorLyogQ29weXJpZ2h0IChjKSAx
OTk4LCAxOTk5IFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUgQ2VudGVyIEx0ZAorICAgU2VlIHRo
ZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KKyovCisKKy8qIFRoaXMgZmls
ZSBpcyBpbmNsdWRlZCEgKi8KKyNpZmRlZiBYTUxfVE9LX0lNUExfQworCisjaWZuZGVmIElTX0lO
VkFMSURfQ0hBUgorI2RlZmluZSBJU19JTlZBTElEX0NIQVIoZW5jLCBwdHIsIG4pICgwKQorI2Vu
ZGlmCisKKyNkZWZpbmUgSU5WQUxJRF9MRUFEX0NBU0UobiwgcHRyLCBuZXh0VG9rUHRyKSBcCisg
ICAgY2FzZSBCVF9MRUFEICMjIG46IFwKKyAgICAgIGlmIChlbmQgLSBwdHIgPCBuKSBcCisgICAg
ICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUxfQ0hBUjsgXAorICAgICAgaWYgKElTX0lOVkFMSURf
Q0hBUihlbmMsIHB0ciwgbikpIHsgXAorICAgICAgICAqKG5leHRUb2tQdHIpID0gKHB0cik7IFwK
KyAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsgXAorICAgICAgfSBcCisgICAgICBwdHIg
Kz0gbjsgXAorICAgICAgYnJlYWs7CisKKyNkZWZpbmUgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRU
b2tQdHIpIFwKKyAgSU5WQUxJRF9MRUFEX0NBU0UoMiwgcHRyLCBuZXh0VG9rUHRyKSBcCisgIElO
VkFMSURfTEVBRF9DQVNFKDMsIHB0ciwgbmV4dFRva1B0cikgXAorICBJTlZBTElEX0xFQURfQ0FT
RSg0LCBwdHIsIG5leHRUb2tQdHIpIFwKKyAgY2FzZSBCVF9OT05YTUw6IFwKKyAgY2FzZSBCVF9N
QUxGT1JNOiBcCisgIGNhc2UgQlRfVFJBSUw6IFwKKyAgICAqKG5leHRUb2tQdHIpID0gKHB0cik7
IFwKKyAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworCisjZGVmaW5lIENIRUNLX05BTUVfQ0FT
RShuLCBlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKSBcCisgICBjYXNlIEJUX0xFQUQgIyMgbjog
XAorICAgICBpZiAoZW5kIC0gcHRyIDwgbikgXAorICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJ
QUxfQ0hBUjsgXAorICAgICBpZiAoIUlTX05BTUVfQ0hBUihlbmMsIHB0ciwgbikpIHsgXAorICAg
ICAgICpuZXh0VG9rUHRyID0gcHRyOyBcCisgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsg
XAorICAgICB9IFwKKyAgICAgcHRyICs9IG47IFwKKyAgICAgYnJlYWs7CisKKyNkZWZpbmUgQ0hF
Q0tfTkFNRV9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKSBcCisgIGNhc2UgQlRfTk9O
QVNDSUk6IFwKKyAgICBpZiAoIUlTX05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBwdHIpKSB7IFwKKyAg
ICAgICpuZXh0VG9rUHRyID0gcHRyOyBcCisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOyBc
CisgICAgfSBcCisgIGNhc2UgQlRfTk1TVFJUOiBcCisgIGNhc2UgQlRfSEVYOiBcCisgIGNhc2Ug
QlRfRElHSVQ6IFwKKyAgY2FzZSBCVF9OQU1FOiBcCisgIGNhc2UgQlRfTUlOVVM6IFwKKyAgICBw
dHIgKz0gTUlOQlBDKGVuYyk7IFwKKyAgICBicmVhazsgXAorICBDSEVDS19OQU1FX0NBU0UoMiwg
ZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAorICBDSEVDS19OQU1FX0NBU0UoMywgZW5jLCBw
dHIsIGVuZCwgbmV4dFRva1B0cikgXAorICBDSEVDS19OQU1FX0NBU0UoNCwgZW5jLCBwdHIsIGVu
ZCwgbmV4dFRva1B0cikKKworI2RlZmluZSBDSEVDS19OTVNUUlRfQ0FTRShuLCBlbmMsIHB0ciwg
ZW5kLCBuZXh0VG9rUHRyKSBcCisgICBjYXNlIEJUX0xFQUQgIyMgbjogXAorICAgICBpZiAoZW5k
IC0gcHRyIDwgbikgXAorICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUxfQ0hBUjsgXAorICAg
ICBpZiAoIUlTX05NU1RSVF9DSEFSKGVuYywgcHRyLCBuKSkgeyBcCisgICAgICAgKm5leHRUb2tQ
dHIgPSBwdHI7IFwKKyAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOyBcCisgICAgIH0gXAor
ICAgICBwdHIgKz0gbjsgXAorICAgICBicmVhazsKKworI2RlZmluZSBDSEVDS19OTVNUUlRfQ0FT
RVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAorICBjYXNlIEJUX05PTkFTQ0lJOiBcCisg
ICAgaWYgKCFJU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwdHIpKSB7IFwKKyAgICAgICpuZXh0
VG9rUHRyID0gcHRyOyBcCisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOyBcCisgICAgfSBc
CisgIGNhc2UgQlRfTk1TVFJUOiBcCisgIGNhc2UgQlRfSEVYOiBcCisgICAgcHRyICs9IE1JTkJQ
QyhlbmMpOyBcCisgICAgYnJlYWs7IFwKKyAgQ0hFQ0tfTk1TVFJUX0NBU0UoMiwgZW5jLCBwdHIs
IGVuZCwgbmV4dFRva1B0cikgXAorICBDSEVDS19OTVNUUlRfQ0FTRSgzLCBlbmMsIHB0ciwgZW5k
LCBuZXh0VG9rUHRyKSBcCisgIENIRUNLX05NU1RSVF9DQVNFKDQsIGVuYywgcHRyLCBlbmQsIG5l
eHRUb2tQdHIpCisKKyNpZm5kZWYgUFJFRklYCisjZGVmaW5lIFBSRUZJWChpZGVudCkgaWRlbnQK
KyNlbmRpZgorCisvKiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBmb2xsb3dpbmcgIjwhLSIgKi8K
Kworc3RhdGljIGludCBQVFJDQUxMCitQUkVGSVgoc2NhbkNvbW1lbnQpKGNvbnN0IEVOQ09ESU5H
ICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
ZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKK3sKKyAgaWYgKHB0ciAhPSBlbmQpIHsKKyAg
ICBpZiAoIUNIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfTUlOVVMpKSB7CisgICAgICAqbmV4
dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICAg
IHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgICAgc3dp
dGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgICAgICBJTlZBTElEX0NBU0VTKHB0ciwgbmV4
dFRva1B0cikKKyAgICAgIGNhc2UgQlRfTUlOVVM6CisgICAgICAgIGlmICgocHRyICs9IE1JTkJQ
QyhlbmMpKSA9PSBlbmQpCisgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAg
ICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfTUlOVVMpKSB7CisgICAgICAgICAg
aWYgKChwdHIgKz0gTUlOQlBDKGVuYykpID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBYTUxf
VE9LX1BBUlRJQUw7CisgICAgICAgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJ
X0dUKSkgeworICAgICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgICAgICByZXR1
cm4gWE1MX1RPS19JTlZBTElEOworICAgICAgICAgIH0KKyAgICAgICAgICAqbmV4dFRva1B0ciA9
IHB0ciArIE1JTkJQQyhlbmMpOworICAgICAgICAgIHJldHVybiBYTUxfVE9LX0NPTU1FTlQ7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBwdHIgKz0g
TUlOQlBDKGVuYyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1
cm4gWE1MX1RPS19QQVJUSUFMOworfQorCisvKiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBmb2xs
b3dpbmcgIjwhIiAqLworCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChzY2FuRGVjbCkoY29u
c3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBpZiAocHRyID09IGVu
ZCkKKyAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMs
IHB0cikpIHsKKyAgY2FzZSBCVF9NSU5VUzoKKyAgICByZXR1cm4gUFJFRklYKHNjYW5Db21tZW50
KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOworICBjYXNlIEJUX0xT
UUI6CisgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICByZXR1cm4gWE1M
X1RPS19DT05EX1NFQ1RfT1BFTjsKKyAgY2FzZSBCVF9OTVNUUlQ6CisgIGNhc2UgQlRfSEVYOgor
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAqbmV4
dFRva1B0ciA9IHB0cjsKKyAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICB9CisgIHdoaWxl
IChwdHIgIT0gZW5kKSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgICAg
Y2FzZSBCVF9QRVJDTlQ6CisgICAgICBpZiAocHRyICsgTUlOQlBDKGVuYykgPT0gZW5kKQorICAg
ICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgLyogZG9uJ3QgYWxsb3cgPCFFTlRJ
VFklIGZvbyAid2hhdGV2ZXIiPiAqLworICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIg
KyBNSU5CUEMoZW5jKSkpIHsKKyAgICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9M
RjogY2FzZSBCVF9QRVJDTlQ6CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICBy
ZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgICAgfQorICAgICAgLyogZmFsbCB0aHJvdWdoICov
CisgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgorICAgICAgKm5leHRUb2tQ
dHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19ERUNMX09QRU47CisgICAgY2FzZSBCVF9O
TVNUUlQ6CisgICAgY2FzZSBCVF9IRVg6CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICBy
ZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgIH0KKyAgfQorICByZXR1cm4gWE1MX1RPS19QQVJU
SUFMOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChjaGVja1BpVGFyZ2V0KShjb25z
dCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqZW5kLCBpbnQgKnRva1B0cikKK3sKKyAgaW50IHVwcGVyID0gMDsKKyAgKnRv
a1B0ciA9IFhNTF9UT0tfUEk7CisgIGlmIChlbmQgLSBwdHIgIT0gTUlOQlBDKGVuYykqMykKKyAg
ICByZXR1cm4gMTsKKyAgc3dpdGNoIChCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKSkgeworICBjYXNl
IEFTQ0lJX3g6CisgICAgYnJlYWs7CisgIGNhc2UgQVNDSUlfWDoKKyAgICB1cHBlciA9IDE7Cisg
ICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcHRyICs9IE1JTkJQ
QyhlbmMpOworICBzd2l0Y2ggKEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIpKSB7CisgIGNhc2UgQVND
SUlfbToKKyAgICBicmVhazsKKyAgY2FzZSBBU0NJSV9NOgorICAgIHVwcGVyID0gMTsKKyAgICBi
cmVhazsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMTsKKyAgfQorICBwdHIgKz0gTUlOQlBDKGVu
Yyk7CisgIHN3aXRjaCAoQllURV9UT19BU0NJSShlbmMsIHB0cikpIHsKKyAgY2FzZSBBU0NJSV9s
OgorICAgIGJyZWFrOworICBjYXNlIEFTQ0lJX0w6CisgICAgdXBwZXIgPSAxOworICAgIGJyZWFr
OworICBkZWZhdWx0OgorICAgIHJldHVybiAxOworICB9CisgIGlmICh1cHBlcikKKyAgICByZXR1
cm4gMDsKKyAgKnRva1B0ciA9IFhNTF9UT0tfWE1MX0RFQ0w7CisgIHJldHVybiAxOworfQorCisv
KiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBmb2xsb3dpbmcgIjw/IiAqLworCitzdGF0aWMgaW50
IFBUUkNBTEwKK1BSRUZJWChzY2FuUGkpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIg
KnB0ciwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRU
b2tQdHIpCit7CisgIGludCB0b2s7CisgIGNvbnN0IGNoYXIgKnRhcmdldCA9IHB0cjsKKyAgaWYg
KHB0ciA9PSBlbmQpCisgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgc3dpdGNoIChCWVRF
X1RZUEUoZW5jLCBwdHIpKSB7CisgIENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBu
ZXh0VG9rUHRyKQorICBkZWZhdWx0OgorICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVy
biBYTUxfVE9LX0lOVkFMSUQ7CisgIH0KKyAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICBzd2l0
Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRy
LCBlbmQsIG5leHRUb2tQdHIpCisgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xG
OgorICAgICAgaWYgKCFQUkVGSVgoY2hlY2tQaVRhcmdldCkoZW5jLCB0YXJnZXQsIHB0ciwgJnRv
aykpIHsKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgIHJldHVybiBYTUxfVE9L
X0lOVkFMSUQ7CisgICAgICB9CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICB3aGls
ZSAocHRyICE9IGVuZCkgeworICAgICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsK
KyAgICAgICAgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQdHIpCisgICAgICAgIGNhc2UgQlRf
UVVFU1Q6CisgICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICAgIGlmIChwdHIg
PT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgICAgICBp
ZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9HVCkpIHsKKyAgICAgICAgICAgICpuZXh0
VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICAgICAgICByZXR1cm4gdG9rOworICAg
ICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBw
dHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgY2FzZSBCVF9RVUVTVDoKKyAgICAg
IGlmICghUFJFRklYKGNoZWNrUGlUYXJnZXQpKGVuYywgdGFyZ2V0LCBwdHIsICZ0b2spKSB7Cisg
ICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElE
OworICAgICAgfQorICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgaWYgKHB0ciA9PSBl
bmQpCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICBpZiAoQ0hBUl9NQVRD
SEVTKGVuYywgcHRyLCBBU0NJSV9HVCkpIHsKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBN
SU5CUEMoZW5jKTsKKyAgICAgICAgcmV0dXJuIHRvazsKKyAgICAgIH0KKyAgICAgIC8qIGZhbGwg
dGhyb3VnaCAqLworICAgIGRlZmF1bHQ6CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAg
IHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICB9CisgIHJldHVybiBYTUxfVE9LX1BB
UlRJQUw7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKHNjYW5DZGF0YVNlY3Rpb24p
KGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBz
dGF0aWMgY29uc3QgY2hhciBDREFUQV9MU1FCW10gPSB7IEFTQ0lJX0MsIEFTQ0lJX0QsIEFTQ0lJ
X0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNDSUlfVCwgQVNDSUlf
QSwgQVNDSUlfTFNRQiB9OworICBpbnQgaTsKKyAgLyogQ0RBVEFbICovCisgIGlmIChlbmQgLSBw
dHIgPCA2ICogTUlOQlBDKGVuYykpCisgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgZm9y
IChpID0gMDsgaSA8IDY7IGkrKywgcHRyICs9IE1JTkJQQyhlbmMpKSB7CisgICAgaWYgKCFDSEFS
X01BVENIRVMoZW5jLCBwdHIsIENEQVRBX0xTUUJbaV0pKSB7CisgICAgICAqbmV4dFRva1B0ciA9
IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICB9CisgICpuZXh0
VG9rUHRyID0gcHRyOworICByZXR1cm4gWE1MX1RPS19DREFUQV9TRUNUX09QRU47Cit9CisKK3N0
YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKGNkYXRhU2VjdGlvblRvaykoY29uc3QgRU5DT0RJTkcg
KmVuYywgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKK3sKKyAgaWYgKHB0ciA9PSBlbmQpCisg
ICAgcmV0dXJuIFhNTF9UT0tfTk9ORTsKKyAgaWYgKE1JTkJQQyhlbmMpID4gMSkgeworICAgIHNp
emVfdCBuID0gZW5kIC0gcHRyOworICAgIGlmIChuICYgKE1JTkJQQyhlbmMpIC0gMSkpIHsKKyAg
ICAgIG4gJj0gfihNSU5CUEMoZW5jKSAtIDEpOworICAgICAgaWYgKG4gPT0gMCkKKyAgICAgICAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgIGVuZCA9IHB0ciArIG47CisgICAgfQorICB9
CisgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICBjYXNlIEJUX1JTUUI6CisgICAg
cHRyICs9IE1JTkJQQyhlbmMpOworICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgcmV0dXJuIFhN
TF9UT0tfUEFSVElBTDsKKyAgICBpZiAoIUNIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfUlNR
QikpCisgICAgICBicmVhazsKKyAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgaWYgKHB0ciA9
PSBlbmQpCisgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICAgIGlmICghQ0hBUl9NQVRD
SEVTKGVuYywgcHRyLCBBU0NJSV9HVCkpIHsKKyAgICAgIHB0ciAtPSBNSU5CUEMoZW5jKTsKKyAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwor
ICAgIHJldHVybiBYTUxfVE9LX0NEQVRBX1NFQ1RfQ0xPU0U7CisgIGNhc2UgQlRfQ1I6CisgICAg
cHRyICs9IE1JTkJQQyhlbmMpOworICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgcmV0dXJuIFhN
TF9UT0tfUEFSVElBTDsKKyAgICBpZiAoQllURV9UWVBFKGVuYywgcHRyKSA9PSBCVF9MRikKKyAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICByZXR1
cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7CisgIGNhc2UgQlRfTEY6CisgICAgKm5leHRUb2tQdHIg
PSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICByZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Cisg
IElOVkFMSURfQ0FTRVMocHRyLCBuZXh0VG9rUHRyKQorICBkZWZhdWx0OgorICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKKyAgICBicmVhazsKKyAgfQorICB3aGlsZSAocHRyICE9IGVuZCkgeworICAg
IHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworI2RlZmluZSBMRUFEX0NBU0UobikgXAor
ICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBcCisgICAgICBpZiAoZW5kIC0gcHRyIDwgbiB8fCBJU19J
TlZBTElEX0NIQVIoZW5jLCBwdHIsIG4pKSB7IFwKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7
IFwKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsgXAorICAgICAgfSBcCisgICAg
ICBwdHIgKz0gbjsgXAorICAgICAgYnJlYWs7CisgICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgz
KSBMRUFEX0NBU0UoNCkKKyN1bmRlZiBMRUFEX0NBU0UKKyAgICBjYXNlIEJUX05PTlhNTDoKKyAg
ICBjYXNlIEJUX01BTEZPUk06CisgICAgY2FzZSBCVF9UUkFJTDoKKyAgICBjYXNlIEJUX0NSOgor
ICAgIGNhc2UgQlRfTEY6CisgICAgY2FzZSBCVF9SU1FCOgorICAgICAgKm5leHRUb2tQdHIgPSBw
dHI7CisgICAgICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOworICAgIGRlZmF1bHQ6CisgICAg
ICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgKm5leHRU
b2tQdHIgPSBwdHI7CisgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Cit9CisKKy8qIHB0ciBw
b2ludHMgdG8gY2hhcmFjdGVyIGZvbGxvd2luZyAiPC8iICovCisKK3N0YXRpYyBpbnQgUFRSQ0FM
TAorUFJFRklYKHNjYW5FbmRUYWcpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0
ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0
VG9rUHRyKQoreworICBpZiAocHRyID09IGVuZCkKKyAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFM
OworICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgQ0hFQ0tfTk1TVFJUX0NBU0VT
KGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpCisgIGRlZmF1bHQ6CisgICAgKm5leHRUb2tQdHIg
PSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgfQorICB3aGlsZSAocHRyICE9
IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgIENIRUNLX05B
TUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAgICBjYXNlIEJUX1M6IGNhc2Ug
QlRfQ1I6IGNhc2UgQlRfTEY6CisgICAgICBmb3IgKHB0ciArPSBNSU5CUEMoZW5jKTsgcHRyICE9
IGVuZDsgcHRyICs9IE1JTkJQQyhlbmMpKSB7CisgICAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVu
YywgcHRyKSkgeworICAgICAgICBjYXNlIEJUX1M6IGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlRfR1Q6CisgICAgICAgICAgKm5leHRUb2tQ
dHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgICAgICByZXR1cm4gWE1MX1RPS19FTkRfVEFH
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAg
ICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJl
dHVybiBYTUxfVE9LX1BBUlRJQUw7CisjaWZkZWYgWE1MX05TCisgICAgY2FzZSBCVF9DT0xPTjoK
KyAgICAgIC8qIG5vIG5lZWQgdG8gY2hlY2sgcW5hbWUgc3ludGF4IGhlcmUsCisgICAgICAgICBz
aW5jZSBlbmQtdGFnIG11c3QgbWF0Y2ggZXhhY3RseSAqLworICAgICAgcHRyICs9IE1JTkJQQyhl
bmMpOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIEJUX0dUOgorICAgICAgKm5leHRU
b2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgIHJldHVybiBYTUxfVE9LX0VORF9UQUc7
CisgICAgZGVmYXVsdDoKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhN
TF9UT0tfSU5WQUxJRDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKK30K
KworLyogcHRyIHBvaW50cyB0byBjaGFyYWN0ZXIgZm9sbG93aW5nICImI1giICovCisKK3N0YXRp
YyBpbnQgUFRSQ0FMTAorUFJFRklYKHNjYW5IZXhDaGFyUmVmKShjb25zdCBFTkNPRElORyAqZW5j
LCBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCit7CisgIGlmIChwdHIgIT0gZW5kKSB7CisgICAg
c3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgICAgY2FzZSBCVF9ESUdJVDoKKyAgICBj
YXNlIEJUX0hFWDoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAqbmV4dFRva1B0
ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICAgIGZvciAo
cHRyICs9IE1JTkJQQyhlbmMpOyBwdHIgIT0gZW5kOyBwdHIgKz0gTUlOQlBDKGVuYykpIHsKKyAg
ICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgICAgY2FzZSBCVF9ESUdJVDoK
KyAgICAgIGNhc2UgQlRfSEVYOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQlRfU0VNSToK
KyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgICAgcmV0dXJu
IFhNTF9UT0tfQ0hBUl9SRUY7CisgICAgICBkZWZhdWx0OgorICAgICAgICAqbmV4dFRva1B0ciA9
IHB0cjsKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgIH0KKyAgICB9Cisg
IH0KKyAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKK30KKworLyogcHRyIHBvaW50cyB0byBjaGFy
YWN0ZXIgZm9sbG93aW5nICImIyIgKi8KKworc3RhdGljIGludCBQVFJDQUxMCitQUkVGSVgoc2Nh
bkNoYXJSZWYpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKK3sK
KyAgaWYgKHB0ciAhPSBlbmQpIHsKKyAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJ
SV94KSkKKyAgICAgIHJldHVybiBQUkVGSVgoc2NhbkhleENoYXJSZWYpKGVuYywgcHRyICsgTUlO
QlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBw
dHIpKSB7CisgICAgY2FzZSBCVF9ESUdJVDoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Cisg
ICAgfQorICAgIGZvciAocHRyICs9IE1JTkJQQyhlbmMpOyBwdHIgIT0gZW5kOyBwdHIgKz0gTUlO
QlBDKGVuYykpIHsKKyAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgICAg
Y2FzZSBCVF9ESUdJVDoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJUX1NFTUk6CisgICAg
ICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICAgIHJldHVybiBYTUxf
VE9LX0NIQVJfUkVGOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7
CisgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgICB9CisgICAgfQorICB9Cisg
IHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Cit9CisKKy8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVy
IGZvbGxvd2luZyAiJiIgKi8KKworc3RhdGljIGludCBQVFJDQUxMCitQUkVGSVgoc2NhblJlZiko
Y29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCisg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCit7CisgIGlmIChwdHIgPT0g
ZW5kKQorICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgIHN3aXRjaCAoQllURV9UWVBFKGVu
YywgcHRyKSkgeworICBDSEVDS19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0
cikKKyAgY2FzZSBCVF9OVU06CisgICAgcmV0dXJuIFBSRUZJWChzY2FuQ2hhclJlZikoZW5jLCBw
dHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKKyAgZGVmYXVsdDoKKyAgICAqbmV4
dFRva1B0ciA9IHB0cjsKKyAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICB9CisgIHdoaWxl
IChwdHIgIT0gZW5kKSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgICAg
Q0hFQ0tfTkFNRV9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorICAgIGNhc2UgQlRf
U0VNSToKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICByZXR1
cm4gWE1MX1RPS19FTlRJVFlfUkVGOworICAgIGRlZmF1bHQ6CisgICAgICAqbmV4dFRva1B0ciA9
IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICB9CisgIHJldHVy
biBYTUxfVE9LX1BBUlRJQUw7Cit9CisKKy8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVyIGZvbGxv
d2luZyBmaXJzdCBjaGFyYWN0ZXIgb2YgYXR0cmlidXRlIG5hbWUgKi8KKworc3RhdGljIGludCBQ
VFJDQUxMCitQUkVGSVgoc2NhbkF0dHMpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIg
KnB0ciwgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4
dFRva1B0cikKK3sKKyNpZmRlZiBYTUxfTlMKKyAgaW50IGhhZENvbG9uID0gMDsKKyNlbmRpZgor
ICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkg
eworICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyNpZmRl
ZiBYTUxfTlMKKyAgICBjYXNlIEJUX0NPTE9OOgorICAgICAgaWYgKGhhZENvbG9uKSB7CisgICAg
ICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwor
ICAgICAgfQorICAgICAgaGFkQ29sb24gPSAxOworICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwor
ICAgICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Cisg
ICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICAgIENIRUNLX05NU1RSVF9D
QVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorICAgICAgZGVmYXVsdDoKKyAgICAgICAg
Km5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAg
ICB9CisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2Fz
ZSBCVF9MRjoKKyAgICAgIGZvciAoOzspIHsKKyAgICAgICAgaW50IHQ7CisKKyAgICAgICAgcHRy
ICs9IE1JTkJQQyhlbmMpOworICAgICAgICBpZiAocHRyID09IGVuZCkKKyAgICAgICAgICByZXR1
cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgICB0ID0gQllURV9UWVBFKGVuYywgcHRyKTsKKyAg
ICAgICAgaWYgKHQgPT0gQlRfRVFVQUxTKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBzd2l0
Y2ggKHQpIHsKKyAgICAgICAgY2FzZSBCVF9TOgorICAgICAgICBjYXNlIEJUX0xGOgorICAgICAg
ICBjYXNlIEJUX0NSOgorICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIEJU
X0VRVUFMUzoKKyAgICAgIHsKKyAgICAgICAgaW50IG9wZW47CisjaWZkZWYgWE1MX05TCisgICAg
ICAgIGhhZENvbG9uID0gMDsKKyNlbmRpZgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
cHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICAg
ICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgICAgICBvcGVuID0gQllURV9UWVBFKGVu
YywgcHRyKTsKKyAgICAgICAgICBpZiAob3BlbiA9PSBCVF9RVU9UIHx8IG9wZW4gPT0gQlRfQVBP
UykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIHN3aXRjaCAob3BlbikgeworICAgICAg
ICAgIGNhc2UgQlRfUzoKKyAgICAgICAgICBjYXNlIEJUX0xGOgorICAgICAgICAgIGNhc2UgQlRf
Q1I6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
Km5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAg
ICAgIC8qIGluIGF0dHJpYnV0ZSB2YWx1ZSAqLworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgaW50IHQ7CisgICAgICAgICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4g
WE1MX1RPS19QQVJUSUFMOworICAgICAgICAgIHQgPSBCWVRFX1RZUEUoZW5jLCBwdHIpOworICAg
ICAgICAgIGlmICh0ID09IG9wZW4pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBzd2l0
Y2ggKHQpIHsKKyAgICAgICAgICBJTlZBTElEX0NBU0VTKHB0ciwgbmV4dFRva1B0cikKKyAgICAg
ICAgICBjYXNlIEJUX0FNUDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IHRvayA9
IFBSRUZJWChzY2FuUmVmKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsICZwdHIpOworICAg
ICAgICAgICAgICBpZiAodG9rIDw9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rID09IFhN
TF9UT0tfSU5WQUxJRCkKKyAgICAgICAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAg
ICAgICAgICAgICAgIHJldHVybiB0b2s7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBCVF9MVDoKKyAgICAgICAgICAg
ICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKKyAgICAgICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICAgICAgcmV0dXJuIFhN
TF9UT0tfUEFSVElBTDsKKyAgICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Cisg
ICAgICAgIGNhc2UgQlRfUzoKKyAgICAgICAgY2FzZSBCVF9DUjoKKyAgICAgICAgY2FzZSBCVF9M
RjoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCVF9TT0w6CisgICAgICAgICAgZ290
byBzb2w7CisgICAgICAgIGNhc2UgQlRfR1Q6CisgICAgICAgICAgZ290byBndDsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgICByZXR1cm4g
WE1MX1RPS19JTlZBTElEOworICAgICAgICB9CisgICAgICAgIC8qIHB0ciBwb2ludHMgdG8gY2xv
c2luZyBxdW90ZSAqLworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgcHRyICs9IE1JTkJQ
QyhlbmMpOworICAgICAgICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIFhN
TF9UT0tfUEFSVElBTDsKKyAgICAgICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsK
KyAgICAgICAgICBDSEVDS19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikK
KyAgICAgICAgICBjYXNlIEJUX1M6IGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICBjYXNlIEJUX0dUOgorICAgICAgICAgIGd0OgorICAgICAg
ICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgICAgICAgIHJldHVy
biBYTUxfVE9LX1NUQVJUX1RBR19XSVRIX0FUVFM7CisgICAgICAgICAgY2FzZSBCVF9TT0w6Cisg
ICAgICAgICAgc29sOgorICAgICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICAg
ICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7
CisgICAgICAgICAgICBpZiAoIUNIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7Cisg
ICAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICAgICAgICByZXR1cm4gWE1M
X1RPS19JTlZBTElEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKm5leHRUb2tQdHIgPSBw
dHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX0VNUFRZX0VMRU1F
TlRfV0lUSF9BVFRTOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqbmV4dFRva1B0
ciA9IHB0cjsKKyAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgICAgICAg
fQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxf
VE9LX0lOVkFMSUQ7CisgICAgfQorICB9CisgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Cit9CisK
Ky8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVyIGZvbGxvd2luZyAiPCIgKi8KKworc3RhdGljIGlu
dCBQVFJDQUxMCitQUkVGSVgoc2Nhbkx0KShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFy
ICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0
VG9rUHRyKQoreworI2lmZGVmIFhNTF9OUworICBpbnQgaGFkQ29sb247CisjZW5kaWYKKyAgaWYg
KHB0ciA9PSBlbmQpCisgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgc3dpdGNoIChCWVRF
X1RZUEUoZW5jLCBwdHIpKSB7CisgIENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBu
ZXh0VG9rUHRyKQorICBjYXNlIEJUX0VYQ0w6CisgICAgaWYgKChwdHIgKz0gTUlOQlBDKGVuYykp
ID09IGVuZCkKKyAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgc3dpdGNoIChCWVRF
X1RZUEUoZW5jLCBwdHIpKSB7CisgICAgY2FzZSBCVF9NSU5VUzoKKyAgICAgIHJldHVybiBQUkVG
SVgoc2NhbkNvbW1lbnQpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7
CisgICAgY2FzZSBCVF9MU1FCOgorICAgICAgcmV0dXJuIFBSRUZJWChzY2FuQ2RhdGFTZWN0aW9u
KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQsIG5leHRUb2tQdHIpOworICAgIH0KKyAgICAqbmV4dFRva1B0ciA9IHB0cjsK
KyAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICBjYXNlIEJUX1FVRVNUOgorICAgIHJldHVy
biBQUkVGSVgoc2NhblBpKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIp
OworICBjYXNlIEJUX1NPTDoKKyAgICByZXR1cm4gUFJFRklYKHNjYW5FbmRUYWcpKGVuYywgcHRy
ICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7CisgIGRlZmF1bHQ6CisgICAgKm5leHRU
b2tQdHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgfQorI2lmZGVmIFhN
TF9OUworICBoYWRDb2xvbiA9IDA7CisjZW5kaWYKKyAgLyogd2UgaGF2ZSBhIHN0YXJ0LXRhZyAq
LworICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRy
KSkgeworICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyNp
ZmRlZiBYTUxfTlMKKyAgICBjYXNlIEJUX0NPTE9OOgorICAgICAgaWYgKGhhZENvbG9uKSB7Cisg
ICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElE
OworICAgICAgfQorICAgICAgaGFkQ29sb24gPSAxOworICAgICAgcHRyICs9IE1JTkJQQyhlbmMp
OworICAgICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7
CisgICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICAgIENIRUNLX05NU1RS
VF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Cisg
ICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjog
Y2FzZSBCVF9MRjoKKyAgICAgIHsKKyAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAg
ICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgICAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywg
cHRyKSkgeworICAgICAgICAgIENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0
VG9rUHRyKQorICAgICAgICAgIGNhc2UgQlRfR1Q6CisgICAgICAgICAgICBnb3RvIGd0OworICAg
ICAgICAgIGNhc2UgQlRfU09MOgorICAgICAgICAgICAgZ290byBzb2w7CisgICAgICAgICAgY2Fz
ZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgorICAgICAgICAgICAgcHRyICs9IE1JTkJQ
QyhlbmMpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIFBSRUZJWChzY2FuQXR0cykoZW5j
LCBwdHIsIGVuZCwgbmV4dFRva1B0cik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFhNTF9U
T0tfUEFSVElBTDsKKyAgICAgIH0KKyAgICBjYXNlIEJUX0dUOgorICAgIGd0OgorICAgICAgKm5l
eHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgIHJldHVybiBYTUxfVE9LX1NUQVJU
X1RBR19OT19BVFRTOworICAgIGNhc2UgQlRfU09MOgorICAgIHNvbDoKKyAgICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKKyAgICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICByZXR1cm4gWE1MX1RP
S19QQVJUSUFMOworICAgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX0dUKSkg
eworICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsKKyAgICAgIH0KKyAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Cisg
ICAgICByZXR1cm4gWE1MX1RPS19FTVBUWV9FTEVNRU5UX05PX0FUVFM7CisgICAgZGVmYXVsdDoK
KyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsK
KyAgICB9CisgIH0KKyAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKK30KKworc3RhdGljIGludCBQ
VFJDQUxMCitQUkVGSVgoY29udGVudFRvaykoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hh
ciAqcHRyLCBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
Km5leHRUb2tQdHIpCit7CisgIGlmIChwdHIgPT0gZW5kKQorICAgIHJldHVybiBYTUxfVE9LX05P
TkU7CisgIGlmIChNSU5CUEMoZW5jKSA+IDEpIHsKKyAgICBzaXplX3QgbiA9IGVuZCAtIHB0cjsK
KyAgICBpZiAobiAmIChNSU5CUEMoZW5jKSAtIDEpKSB7CisgICAgICBuICY9IH4oTUlOQlBDKGVu
YykgLSAxKTsKKyAgICAgIGlmIChuID09IDApCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJ
QUw7CisgICAgICBlbmQgPSBwdHIgKyBuOworICAgIH0KKyAgfQorICBzd2l0Y2ggKEJZVEVfVFlQ
RShlbmMsIHB0cikpIHsKKyAgY2FzZSBCVF9MVDoKKyAgICByZXR1cm4gUFJFRklYKHNjYW5MdCko
ZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKKyAgY2FzZSBCVF9BTVA6
CisgICAgcmV0dXJuIFBSRUZJWChzY2FuUmVmKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQs
IG5leHRUb2tQdHIpOworICBjYXNlIEJUX0NSOgorICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAg
ICBpZiAocHRyID09IGVuZCkKKyAgICAgIHJldHVybiBYTUxfVE9LX1RSQUlMSU5HX0NSOworICAg
IGlmIChCWVRFX1RZUEUoZW5jLCBwdHIpID09IEJUX0xGKQorICAgICAgcHRyICs9IE1JTkJQQyhl
bmMpOworICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVybiBYTUxfVE9LX0RBVEFfTkVX
TElORTsKKyAgY2FzZSBCVF9MRjoKKyAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMp
OworICAgIHJldHVybiBYTUxfVE9LX0RBVEFfTkVXTElORTsKKyAgY2FzZSBCVF9SU1FCOgorICAg
IHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICBpZiAocHRyID09IGVuZCkKKyAgICAgIHJldHVybiBY
TUxfVE9LX1RSQUlMSU5HX1JTUUI7CisgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFT
Q0lJX1JTUUIpKQorICAgICAgYnJlYWs7CisgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgIGlm
IChwdHIgPT0gZW5kKQorICAgICAgcmV0dXJuIFhNTF9UT0tfVFJBSUxJTkdfUlNRQjsKKyAgICBp
ZiAoIUNIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7CisgICAgICBwdHIgLT0gTUlO
QlBDKGVuYyk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgKm5leHRUb2tQdHIgPSBwdHI7Cisg
ICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQ
dHIpCisgIGRlZmF1bHQ6CisgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgIGJyZWFrOworICB9
CisgIHdoaWxlIChwdHIgIT0gZW5kKSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIp
KSB7CisjZGVmaW5lIExFQURfQ0FTRShuKSBcCisgICAgY2FzZSBCVF9MRUFEICMjIG46IFwKKyAg
ICAgIGlmIChlbmQgLSBwdHIgPCBuIHx8IElTX0lOVkFMSURfQ0hBUihlbmMsIHB0ciwgbikpIHsg
XAorICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsgXAorICAgICAgICByZXR1cm4gWE1MX1RPS19E
QVRBX0NIQVJTOyBcCisgICAgICB9IFwKKyAgICAgIHB0ciArPSBuOyBcCisgICAgICBicmVhazsK
KyAgICBMRUFEX0NBU0UoMikgTEVBRF9DQVNFKDMpIExFQURfQ0FTRSg0KQorI3VuZGVmIExFQURf
Q0FTRQorICAgIGNhc2UgQlRfUlNRQjoKKyAgICAgIGlmIChwdHIgKyBNSU5CUEMoZW5jKSAhPSBl
bmQpIHsKKyAgICAgICAgIGlmICghQ0hBUl9NQVRDSEVTKGVuYywgcHRyICsgTUlOQlBDKGVuYyks
IEFTQ0lJX1JTUUIpKSB7CisgICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBpZiAocHRyICsgMipNSU5CUEMoZW5jKSAh
PSBlbmQpIHsKKyAgICAgICAgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIgKyAyKk1JTkJQ
QyhlbmMpLCBBU0NJSV9HVCkpIHsKKyAgICAgICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Cisg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgKm5leHRUb2tQdHIg
PSBwdHIgKyAyKk1JTkJQQyhlbmMpOworICAgICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElE
OworICAgICAgICAgfQorICAgICAgfQorICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2Fz
ZSBCVF9BTVA6CisgICAgY2FzZSBCVF9MVDoKKyAgICBjYXNlIEJUX05PTlhNTDoKKyAgICBjYXNl
IEJUX01BTEZPUk06CisgICAgY2FzZSBCVF9UUkFJTDoKKyAgICBjYXNlIEJUX0NSOgorICAgIGNh
c2UgQlRfTEY6CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9L
X0RBVEFfQ0hBUlM7CisgICAgZGVmYXVsdDoKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAg
ICAgIGJyZWFrOworICAgIH0KKyAgfQorICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgcmV0dXJuIFhN
TF9UT0tfREFUQV9DSEFSUzsKK30KKworLyogcHRyIHBvaW50cyB0byBjaGFyYWN0ZXIgZm9sbG93
aW5nICIlIiAqLworCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChzY2FuUGVyY2VudCkoY29u
c3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBpZiAocHRyID09
IGVuZCkKKyAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICBzd2l0Y2ggKEJZVEVfVFlQRShl
bmMsIHB0cikpIHsKKyAgQ0hFQ0tfTk1TVFJUX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQ
dHIpCisgIGNhc2UgQlRfUzogY2FzZSBCVF9MRjogY2FzZSBCVF9DUjogY2FzZSBCVF9QRVJDTlQ6
CisgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfUEVSQ0VOVDsKKyAg
ZGVmYXVsdDoKKyAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICByZXR1cm4gWE1MX1RPS19JTlZB
TElEOworICB9CisgIHdoaWxlIChwdHIgIT0gZW5kKSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUo
ZW5jLCBwdHIpKSB7CisgICAgQ0hFQ0tfTkFNRV9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9r
UHRyKQorICAgIGNhc2UgQlRfU0VNSToKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBD
KGVuYyk7CisgICAgICByZXR1cm4gWE1MX1RPS19QQVJBTV9FTlRJVFlfUkVGOworICAgIGRlZmF1
bHQ6CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFM
SUQ7CisgICAgfQorICB9CisgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Cit9CisKK3N0YXRpYyBp
bnQgUFRSQ0FMTAorUFJFRklYKHNjYW5Qb3VuZE5hbWUpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNv
bnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBpZiAocHRyID09IGVuZCkKKyAgICByZXR1cm4g
WE1MX1RPS19QQVJUSUFMOworICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgQ0hF
Q0tfTk1TVFJUX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpCisgIGRlZmF1bHQ6Cisg
ICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgfQor
ICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkg
eworICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAgICBj
YXNlIEJUX0NSOiBjYXNlIEJUX0xGOiBjYXNlIEJUX1M6CisgICAgY2FzZSBCVF9SUEFSOiBjYXNl
IEJUX0dUOiBjYXNlIEJUX1BFUkNOVDogY2FzZSBCVF9WRVJCQVI6CisgICAgICAqbmV4dFRva1B0
ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX1BPVU5EX05BTUU7CisgICAgZGVmYXVsdDoK
KyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsK
KyAgICB9CisgIH0KKyAgcmV0dXJuIC1YTUxfVE9LX1BPVU5EX05BTUU7Cit9CisKK3N0YXRpYyBp
bnQgUFRSQ0FMTAorUFJFRklYKHNjYW5MaXQpKGludCBvcGVuLCBjb25zdCBFTkNPRElORyAqZW5j
LAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAorICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICB3aGlsZSAocHRyICE9
IGVuZCkgeworICAgIGludCB0ID0gQllURV9UWVBFKGVuYywgcHRyKTsKKyAgICBzd2l0Y2ggKHQp
IHsKKyAgICBJTlZBTElEX0NBU0VTKHB0ciwgbmV4dFRva1B0cikKKyAgICBjYXNlIEJUX1FVT1Q6
CisgICAgY2FzZSBCVF9BUE9TOgorICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgaWYg
KHQgIT0gb3BlbikKKyAgICAgICAgYnJlYWs7CisgICAgICBpZiAocHRyID09IGVuZCkKKyAgICAg
ICAgcmV0dXJuIC1YTUxfVE9LX0xJVEVSQUw7CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAg
ICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgICAgY2FzZSBCVF9TOiBjYXNl
IEJUX0NSOiBjYXNlIEJUX0xGOgorICAgICAgY2FzZSBCVF9HVDogY2FzZSBCVF9QRVJDTlQ6IGNh
c2UgQlRfTFNRQjoKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfTElURVJBTDsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQor
ICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJ
WChwcm9sb2dUb2spKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3Qg
Y2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCit7
CisgIGludCB0b2s7CisgIGlmIChwdHIgPT0gZW5kKQorICAgIHJldHVybiBYTUxfVE9LX05PTkU7
CisgIGlmIChNSU5CUEMoZW5jKSA+IDEpIHsKKyAgICBzaXplX3QgbiA9IGVuZCAtIHB0cjsKKyAg
ICBpZiAobiAmIChNSU5CUEMoZW5jKSAtIDEpKSB7CisgICAgICBuICY9IH4oTUlOQlBDKGVuYykg
LSAxKTsKKyAgICAgIGlmIChuID09IDApCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7
CisgICAgICBlbmQgPSBwdHIgKyBuOworICAgIH0KKyAgfQorICBzd2l0Y2ggKEJZVEVfVFlQRShl
bmMsIHB0cikpIHsKKyAgY2FzZSBCVF9RVU9UOgorICAgIHJldHVybiBQUkVGSVgoc2NhbkxpdCko
QlRfUVVPVCwgZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKKyAgY2Fz
ZSBCVF9BUE9TOgorICAgIHJldHVybiBQUkVGSVgoc2NhbkxpdCkoQlRfQVBPUywgZW5jLCBwdHIg
KyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKKyAgY2FzZSBCVF9MVDoKKyAgICB7Cisg
ICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICBpZiAocHRyID09IGVuZCkKKyAgICAgICAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRy
KSkgeworICAgICAgY2FzZSBCVF9FWENMOgorICAgICAgICByZXR1cm4gUFJFRklYKHNjYW5EZWNs
KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOworICAgICAgY2FzZSBC
VF9RVUVTVDoKKyAgICAgICAgcmV0dXJuIFBSRUZJWChzY2FuUGkpKGVuYywgcHRyICsgTUlOQlBD
KGVuYyksIGVuZCwgbmV4dFRva1B0cik7CisgICAgICBjYXNlIEJUX05NU1RSVDoKKyAgICAgIGNh
c2UgQlRfSEVYOgorICAgICAgY2FzZSBCVF9OT05BU0NJSToKKyAgICAgIGNhc2UgQlRfTEVBRDI6
CisgICAgICBjYXNlIEJUX0xFQUQzOgorICAgICAgY2FzZSBCVF9MRUFENDoKKyAgICAgICAgKm5l
eHRUb2tQdHIgPSBwdHIgLSBNSU5CUEMoZW5jKTsKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5T
VEFOQ0VfU1RBUlQ7CisgICAgICB9CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJl
dHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICBjYXNlIEJUX0NSOgorICAgIGlmIChwdHIg
KyBNSU5CUEMoZW5jKSA9PSBlbmQpIHsKKyAgICAgICpuZXh0VG9rUHRyID0gZW5kOworICAgICAg
LyogaW5kaWNhdGUgdGhhdCB0aGlzIG1pZ2h0IGJlIHBhcnQgb2YgYSBDUi9MRiBwYWlyICovCisg
ICAgICByZXR1cm4gLVhNTF9UT0tfUFJPTE9HX1M7CisgICAgfQorICAgIC8qIGZhbGwgdGhyb3Vn
aCAqLworICBjYXNlIEJUX1M6IGNhc2UgQlRfTEY6CisgICAgZm9yICg7OykgeworICAgICAgcHRy
ICs9IE1JTkJQQyhlbmMpOworICAgICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICAgIGJyZWFrOwor
ICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgICAgICBjYXNlIEJUX1M6IGNh
c2UgQlRfTEY6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBCVF9DUjoKKyAgICAgICAgLyog
ZG9uJ3Qgc3BsaXQgQ1IvTEYgcGFpciAqLworICAgICAgICBpZiAocHRyICsgTUlOQlBDKGVuYykg
IT0gZW5kKQorICAgICAgICAgIGJyZWFrOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4g
WE1MX1RPS19QUk9MT0dfUzsKKyAgICAgIH0KKyAgICB9CisgICAgKm5leHRUb2tQdHIgPSBwdHI7
CisgICAgcmV0dXJuIFhNTF9UT0tfUFJPTE9HX1M7CisgIGNhc2UgQlRfUEVSQ05UOgorICAgIHJl
dHVybiBQUkVGSVgoc2NhblBlcmNlbnQpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4
dFRva1B0cik7CisgIGNhc2UgQlRfQ09NTUE6CisgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5C
UEMoZW5jKTsKKyAgICByZXR1cm4gWE1MX1RPS19DT01NQTsKKyAgY2FzZSBCVF9MU1FCOgorICAg
ICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgcmV0dXJuIFhNTF9UT0tfT1BF
Tl9CUkFDS0VUOworICBjYXNlIEJUX1JTUUI6CisgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAg
IGlmIChwdHIgPT0gZW5kKQorICAgICAgcmV0dXJuIC1YTUxfVE9LX0NMT1NFX0JSQUNLRVQ7Cisg
ICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfUlNRQikpIHsKKyAgICAgIGlmIChw
dHIgKyBNSU5CUEMoZW5jKSA9PSBlbmQpCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7
CisgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIEFTQ0lJX0dU
KSkgeworICAgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIDIqTUlOQlBDKGVuYyk7CisgICAgICAg
IHJldHVybiBYTUxfVE9LX0NPTkRfU0VDVF9DTE9TRTsKKyAgICAgIH0KKyAgICB9CisgICAgKm5l
eHRUb2tQdHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfQ0xPU0VfQlJBQ0tFVDsKKyAgY2Fz
ZSBCVF9MUEFSOgorICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgcmV0
dXJuIFhNTF9UT0tfT1BFTl9QQVJFTjsKKyAgY2FzZSBCVF9SUEFSOgorICAgIHB0ciArPSBNSU5C
UEMoZW5jKTsKKyAgICBpZiAocHRyID09IGVuZCkKKyAgICAgIHJldHVybiAtWE1MX1RPS19DTE9T
RV9QQVJFTjsKKyAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICBjYXNlIEJU
X0FTVDoKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICByZXR1
cm4gWE1MX1RPS19DTE9TRV9QQVJFTl9BU1RFUklTSzsKKyAgICBjYXNlIEJUX1FVRVNUOgorICAg
ICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgIHJldHVybiBYTUxfVE9L
X0NMT1NFX1BBUkVOX1FVRVNUSU9OOworICAgIGNhc2UgQlRfUExVUzoKKyAgICAgICpuZXh0VG9r
UHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICByZXR1cm4gWE1MX1RPS19DTE9TRV9QQVJF
Tl9QTFVTOworICAgIGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6IGNhc2UgQlRfUzoKKyAgICBjYXNl
IEJUX0dUOiBjYXNlIEJUX0NPTU1BOiBjYXNlIEJUX1ZFUkJBUjoKKyAgICBjYXNlIEJUX1JQQVI6
CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0NMT1NFX1BB
UkVOOworICAgIH0KKyAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICByZXR1cm4gWE1MX1RPS19J
TlZBTElEOworICBjYXNlIEJUX1ZFUkJBUjoKKyAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQ
QyhlbmMpOworICAgIHJldHVybiBYTUxfVE9LX09SOworICBjYXNlIEJUX0dUOgorICAgICpuZXh0
VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgcmV0dXJuIFhNTF9UT0tfREVDTF9DTE9T
RTsKKyAgY2FzZSBCVF9OVU06CisgICAgcmV0dXJuIFBSRUZJWChzY2FuUG91bmROYW1lKShlbmMs
IHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOworI2RlZmluZSBMRUFEX0NBU0Uo
bikgXAorICBjYXNlIEJUX0xFQUQgIyMgbjogXAorICAgIGlmIChlbmQgLSBwdHIgPCBuKSBcCisg
ICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMX0NIQVI7IFwKKyAgICBpZiAoSVNfTk1TVFJUX0NI
QVIoZW5jLCBwdHIsIG4pKSB7IFwKKyAgICAgIHB0ciArPSBuOyBcCisgICAgICB0b2sgPSBYTUxf
VE9LX05BTUU7IFwKKyAgICAgIGJyZWFrOyBcCisgICAgfSBcCisgICAgaWYgKElTX05BTUVfQ0hB
UihlbmMsIHB0ciwgbikpIHsgXAorICAgICAgcHRyICs9IG47IFwKKyAgICAgIHRvayA9IFhNTF9U
T0tfTk1UT0tFTjsgXAorICAgICAgYnJlYWs7IFwKKyAgICB9IFwKKyAgICAqbmV4dFRva1B0ciA9
IHB0cjsgXAorICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgTEVBRF9DQVNFKDIpIExF
QURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKKyN1bmRlZiBMRUFEX0NBU0UKKyAgY2FzZSBCVF9OTVNU
UlQ6CisgIGNhc2UgQlRfSEVYOgorICAgIHRvayA9IFhNTF9UT0tfTkFNRTsKKyAgICBwdHIgKz0g
TUlOQlBDKGVuYyk7CisgICAgYnJlYWs7CisgIGNhc2UgQlRfRElHSVQ6CisgIGNhc2UgQlRfTkFN
RToKKyAgY2FzZSBCVF9NSU5VUzoKKyNpZmRlZiBYTUxfTlMKKyAgY2FzZSBCVF9DT0xPTjoKKyNl
bmRpZgorICAgIHRvayA9IFhNTF9UT0tfTk1UT0tFTjsKKyAgICBwdHIgKz0gTUlOQlBDKGVuYyk7
CisgICAgYnJlYWs7CisgIGNhc2UgQlRfTk9OQVNDSUk6CisgICAgaWYgKElTX05NU1RSVF9DSEFS
X01JTkJQQyhlbmMsIHB0cikpIHsKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIHRv
ayA9IFhNTF9UT0tfTkFNRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoSVNfTkFNRV9D
SEFSX01JTkJQQyhlbmMsIHB0cikpIHsKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAg
IHRvayA9IFhNTF9UT0tfTk1UT0tFTjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBmYWxs
IHRocm91Z2ggKi8KKyAgZGVmYXVsdDoKKyAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICByZXR1
cm4gWE1MX1RPS19JTlZBTElEOworICB9CisgIHdoaWxlIChwdHIgIT0gZW5kKSB7CisgICAgc3dp
dGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgICAgQ0hFQ0tfTkFNRV9DQVNFUyhlbmMsIHB0
ciwgZW5kLCBuZXh0VG9rUHRyKQorICAgIGNhc2UgQlRfR1Q6IGNhc2UgQlRfUlBBUjogY2FzZSBC
VF9DT01NQToKKyAgICBjYXNlIEJUX1ZFUkJBUjogY2FzZSBCVF9MU1FCOiBjYXNlIEJUX1BFUkNO
VDoKKyAgICBjYXNlIEJUX1M6IGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6CisgICAgICAqbmV4dFRv
a1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiB0b2s7CisjaWZkZWYgWE1MX05TCisgICAgY2FzZSBC
VF9DT0xPTjoKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIHN3aXRjaCAodG9rKSB7
CisgICAgICBjYXNlIFhNTF9UT0tfTkFNRToKKyAgICAgICAgaWYgKHB0ciA9PSBlbmQpCisgICAg
ICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgICAgdG9rID0gWE1MX1RPS19QUkVG
SVhFRF9OQU1FOworICAgICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICAg
ICAgQ0hFQ0tfTkFNRV9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgIHRvayA9IFhNTF9UT0tfTk1UT0tFTjsKKyAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgWE1MX1RPS19QUkVGSVhF
RF9OQU1FOgorICAgICAgICB0b2sgPSBYTUxfVE9LX05NVE9LRU47CisgICAgICAgIGJyZWFrOwor
ICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIEJUX1BMVVM6CisgICAgICBp
ZiAodG9rID09IFhNTF9UT0tfTk1UT0tFTikgIHsKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7
CisgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgICB9CisgICAgICAqbmV4dFRv
a1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAgICAgcmV0dXJuIFhNTF9UT0tfTkFNRV9QTFVT
OworICAgIGNhc2UgQlRfQVNUOgorICAgICAgaWYgKHRvayA9PSBYTUxfVE9LX05NVE9LRU4pICB7
CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZB
TElEOworICAgICAgfQorICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAg
ICAgIHJldHVybiBYTUxfVE9LX05BTUVfQVNURVJJU0s7CisgICAgY2FzZSBCVF9RVUVTVDoKKyAg
ICAgIGlmICh0b2sgPT0gWE1MX1RPS19OTVRPS0VOKSAgeworICAgICAgICAqbmV4dFRva1B0ciA9
IHB0cjsKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgIH0KKyAgICAgICpu
ZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICByZXR1cm4gWE1MX1RPS19OQU1F
X1FVRVNUSU9OOworICAgIGRlZmF1bHQ6CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAg
IHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICB9CisgIHJldHVybiAtdG9rOworfQor
CitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChhdHRyaWJ1dGVWYWx1ZVRvaykoY29uc3QgRU5D
T0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBjb25zdCBjaGFy
ICpzdGFydDsKKyAgaWYgKHB0ciA9PSBlbmQpCisgICAgcmV0dXJuIFhNTF9UT0tfTk9ORTsKKyAg
c3RhcnQgPSBwdHI7CisgIHdoaWxlIChwdHIgIT0gZW5kKSB7CisgICAgc3dpdGNoIChCWVRFX1RZ
UEUoZW5jLCBwdHIpKSB7CisjZGVmaW5lIExFQURfQ0FTRShuKSBcCisgICAgY2FzZSBCVF9MRUFE
ICMjIG46IHB0ciArPSBuOyBicmVhazsKKyAgICBMRUFEX0NBU0UoMikgTEVBRF9DQVNFKDMpIExF
QURfQ0FTRSg0KQorI3VuZGVmIExFQURfQ0FTRQorICAgIGNhc2UgQlRfQU1QOgorICAgICAgaWYg
KHB0ciA9PSBzdGFydCkKKyAgICAgICAgcmV0dXJuIFBSRUZJWChzY2FuUmVmKShlbmMsIHB0ciAr
IE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOworICAgICAgKm5leHRUb2tQdHIgPSBwdHI7
CisgICAgICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOworICAgIGNhc2UgQlRfTFQ6CisgICAg
ICAvKiB0aGlzIGlzIGZvciBpbnNpZGUgZW50aXR5IHJlZmVyZW5jZXMgKi8KKyAgICAgICpuZXh0
VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICBjYXNlIEJU
X0xGOgorICAgICAgaWYgKHB0ciA9PSBzdGFydCkgeworICAgICAgICAqbmV4dFRva1B0ciA9IHB0
ciArIE1JTkJQQyhlbmMpOworICAgICAgICByZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Cisg
ICAgICB9CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0RB
VEFfQ0hBUlM7CisgICAgY2FzZSBCVF9DUjoKKyAgICAgIGlmIChwdHIgPT0gc3RhcnQpIHsKKyAg
ICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICBpZiAocHRyID09IGVuZCkKKyAgICAg
ICAgICByZXR1cm4gWE1MX1RPS19UUkFJTElOR19DUjsKKyAgICAgICAgaWYgKEJZVEVfVFlQRShl
bmMsIHB0cikgPT0gQlRfTEYpCisgICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAg
ICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9ORVdMSU5F
OworICAgICAgfQorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RP
S19EQVRBX0NIQVJTOworICAgIGNhc2UgQlRfUzoKKyAgICAgIGlmIChwdHIgPT0gc3RhcnQpIHsK
KyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgICAgcmV0dXJu
IFhNTF9UT0tfQVRUUklCVVRFX1ZBTFVFX1M7CisgICAgICB9CisgICAgICAqbmV4dFRva1B0ciA9
IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7CisgICAgZGVmYXVsdDoKKyAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAqbmV4
dFRva1B0ciA9IHB0cjsKKyAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKK30KKworc3RhdGlj
IGludCBQVFJDQUxMCitQUkVGSVgoZW50aXR5VmFsdWVUb2spKGNvbnN0IEVOQ09ESU5HICplbmMs
IGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKK3sKKyAgY29uc3QgY2hhciAqc3RhcnQ7CisgIGlm
IChwdHIgPT0gZW5kKQorICAgIHJldHVybiBYTUxfVE9LX05PTkU7CisgIHN0YXJ0ID0gcHRyOwor
ICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkg
eworI2RlZmluZSBMRUFEX0NBU0UobikgXAorICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBwdHIgKz0g
bjsgYnJlYWs7CisgICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKKyN1
bmRlZiBMRUFEX0NBU0UKKyAgICBjYXNlIEJUX0FNUDoKKyAgICAgIGlmIChwdHIgPT0gc3RhcnQp
CisgICAgICAgIHJldHVybiBQUkVGSVgoc2NhblJlZikoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwg
ZW5kLCBuZXh0VG9rUHRyKTsKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJu
IFhNTF9UT0tfREFUQV9DSEFSUzsKKyAgICBjYXNlIEJUX1BFUkNOVDoKKyAgICAgIGlmIChwdHIg
PT0gc3RhcnQpIHsKKyAgICAgICAgaW50IHRvayA9ICBQUkVGSVgoc2NhblBlcmNlbnQpKGVuYywg
cHRyICsgTUlOQlBDKGVuYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQsIG5leHRUb2tQdHIpOworICAgICAgICByZXR1cm4gKHRvayA9PSBYTUxfVE9LX1BFUkNF
TlQpID8gWE1MX1RPS19JTlZBTElEIDogdG9rOworICAgICAgfQorICAgICAgKm5leHRUb2tQdHIg
PSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOworICAgIGNhc2UgQlRfTEY6
CisgICAgICBpZiAocHRyID09IHN0YXJ0KSB7CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsg
TUlOQlBDKGVuYyk7CisgICAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFfTkVXTElORTsKKyAgICAg
IH0KKyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9D
SEFSUzsKKyAgICBjYXNlIEJUX0NSOgorICAgICAgaWYgKHB0ciA9PSBzdGFydCkgeworICAgICAg
ICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICAg
IHJldHVybiBYTUxfVE9LX1RSQUlMSU5HX0NSOworICAgICAgICBpZiAoQllURV9UWVBFKGVuYywg
cHRyKSA9PSBCVF9MRikKKyAgICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgICpu
ZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Cisg
ICAgICB9CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0RB
VEFfQ0hBUlM7CisgICAgZGVmYXVsdDoKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAg
IGJyZWFrOworICAgIH0KKyAgfQorICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgcmV0dXJuIFhNTF9U
T0tfREFUQV9DSEFSUzsKK30KKworI2lmZGVmIFhNTF9EVEQKKworc3RhdGljIGludCBQVFJDQUxM
CitQUkVGSVgoaWdub3JlU2VjdGlvblRvaykoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hh
ciAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3Qg
Y2hhciAqKm5leHRUb2tQdHIpCit7CisgIGludCBsZXZlbCA9IDA7CisgIGlmIChNSU5CUEMoZW5j
KSA+IDEpIHsKKyAgICBzaXplX3QgbiA9IGVuZCAtIHB0cjsKKyAgICBpZiAobiAmIChNSU5CUEMo
ZW5jKSAtIDEpKSB7CisgICAgICBuICY9IH4oTUlOQlBDKGVuYykgLSAxKTsKKyAgICAgIGVuZCA9
IHB0ciArIG47CisgICAgfQorICB9CisgIHdoaWxlIChwdHIgIT0gZW5kKSB7CisgICAgc3dpdGNo
IChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgICAgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQ
dHIpCisgICAgY2FzZSBCVF9MVDoKKyAgICAgIGlmICgocHRyICs9IE1JTkJQQyhlbmMpKSA9PSBl
bmQpCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICBpZiAoQ0hBUl9NQVRD
SEVTKGVuYywgcHRyLCBBU0NJSV9FWENMKSkgeworICAgICAgICBpZiAoKHB0ciArPSBNSU5CUEMo
ZW5jKSkgPT0gZW5kKQorICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICAg
IGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX0xTUUIpKSB7CisgICAgICAgICAgKyts
ZXZlbDsKKyAgICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICAgIGJyZWFrOworICAgIGNhc2UgQlRfUlNRQjoKKyAgICAgIGlmICgocHRyICs9IE1JTkJQ
QyhlbmMpKSA9PSBlbmQpCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICBp
ZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9SU1FCKSkgeworICAgICAgICBpZiAoKHB0
ciArPSBNSU5CUEMoZW5jKSkgPT0gZW5kKQorICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJ
QUw7CisgICAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX0dUKSkgeworICAg
ICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgICAgICBpZiAobGV2ZWwgPT0gMCkgewor
ICAgICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgICAgICByZXR1cm4gWE1MX1RP
S19JR05PUkVfU0VDVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLS1sZXZlbDsKKyAgICAgICAg
fQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHB0ciArPSBNSU5C
UEMoZW5jKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gWE1MX1RPS19QQVJU
SUFMOworfQorCisjZW5kaWYgLyogWE1MX0RURCAqLworCitzdGF0aWMgaW50IFBUUkNBTEwKK1BS
RUZJWChpc1B1YmxpY0lkKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsIGNv
bnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqYmFkUHRyKQor
eworICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgIGVuZCAtPSBNSU5CUEMoZW5jKTsKKyAgZm9yICg7
IHB0ciAhPSBlbmQ7IHB0ciArPSBNSU5CUEMoZW5jKSkgeworICAgIHN3aXRjaCAoQllURV9UWVBF
KGVuYywgcHRyKSkgeworICAgIGNhc2UgQlRfRElHSVQ6CisgICAgY2FzZSBCVF9IRVg6CisgICAg
Y2FzZSBCVF9NSU5VUzoKKyAgICBjYXNlIEJUX0FQT1M6CisgICAgY2FzZSBCVF9MUEFSOgorICAg
IGNhc2UgQlRfUlBBUjoKKyAgICBjYXNlIEJUX1BMVVM6CisgICAgY2FzZSBCVF9DT01NQToKKyAg
ICBjYXNlIEJUX1NPTDoKKyAgICBjYXNlIEJUX0VRVUFMUzoKKyAgICBjYXNlIEJUX1FVRVNUOgor
ICAgIGNhc2UgQlRfQ1I6CisgICAgY2FzZSBCVF9MRjoKKyAgICBjYXNlIEJUX1NFTUk6CisgICAg
Y2FzZSBCVF9FWENMOgorICAgIGNhc2UgQlRfQVNUOgorICAgIGNhc2UgQlRfUEVSQ05UOgorICAg
IGNhc2UgQlRfTlVNOgorI2lmZGVmIFhNTF9OUworICAgIGNhc2UgQlRfQ09MT046CisjZW5kaWYK
KyAgICAgIGJyZWFrOworICAgIGNhc2UgQlRfUzoKKyAgICAgIGlmIChDSEFSX01BVENIRVMoZW5j
LCBwdHIsIEFTQ0lJX1RBQikpIHsKKyAgICAgICAgKmJhZFB0ciA9IHB0cjsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEJUX05BTUU6CisgICAgY2Fz
ZSBCVF9OTVNUUlQ6CisgICAgICBpZiAoIShCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKSAmIH4weDdm
KSkKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHN3aXRjaCAoQllURV9UT19B
U0NJSShlbmMsIHB0cikpIHsKKyAgICAgIGNhc2UgMHgyNDogLyogJCAqLworICAgICAgY2FzZSAw
eDQwOiAvKiBAICovCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgKmJh
ZFB0ciA9IHB0cjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qIFRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCBm
b3IgYSB3ZWxsLWZvcm1lZCBzdGFydC10YWcgb3IgZW1wdHkKKyAgIGVsZW1lbnQgdGFnLiAgUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuICBQb2ludGVycyB0byB0aGUKKyAgIGZpcnN0
IGF0dHNNYXggYXR0cmlidXRlcyBhcmUgc3RvcmVkIGluIGF0dHMuCisqLworCitzdGF0aWMgaW50
IFBUUkNBTEwKK1BSRUZJWChnZXRBdHRzKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFy
ICpwdHIsCisgICAgICAgICAgICAgICAgaW50IGF0dHNNYXgsIEFUVFJJQlVURSAqYXR0cykKK3sK
KyAgZW51bSB7IG90aGVyLCBpbk5hbWUsIGluVmFsdWUgfSBzdGF0ZSA9IGluTmFtZTsKKyAgaW50
IG5BdHRzID0gMDsKKyAgaW50IG9wZW4gPSAwOyAvKiBkZWZpbmVkIHdoZW4gc3RhdGUgPT0gaW5W
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBqdXN0IHRvIHNodXQgdXAg
Y29tcGlsZXJzICovCisKKyAgZm9yIChwdHIgKz0gTUlOQlBDKGVuYyk7OyBwdHIgKz0gTUlOQlBD
KGVuYykpIHsKKyAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyNkZWZpbmUgU1RB
UlRfTkFNRSBcCisgICAgICBpZiAoc3RhdGUgPT0gb3RoZXIpIHsgXAorICAgICAgICBpZiAobkF0
dHMgPCBhdHRzTWF4KSB7IFwKKyAgICAgICAgICBhdHRzW25BdHRzXS5uYW1lID0gcHRyOyBcCisg
ICAgICAgICAgYXR0c1tuQXR0c10ubm9ybWFsaXplZCA9IDE7IFwKKyAgICAgICAgfSBcCisgICAg
ICAgIHN0YXRlID0gaW5OYW1lOyBcCisgICAgICB9CisjZGVmaW5lIExFQURfQ0FTRShuKSBcCisg
ICAgY2FzZSBCVF9MRUFEICMjIG46IFNUQVJUX05BTUUgcHRyICs9IChuIC0gTUlOQlBDKGVuYykp
OyBicmVhazsKKyAgICBMRUFEX0NBU0UoMikgTEVBRF9DQVNFKDMpIExFQURfQ0FTRSg0KQorI3Vu
ZGVmIExFQURfQ0FTRQorICAgIGNhc2UgQlRfTk9OQVNDSUk6CisgICAgY2FzZSBCVF9OTVNUUlQ6
CisgICAgY2FzZSBCVF9IRVg6CisgICAgICBTVEFSVF9OQU1FCisgICAgICBicmVhazsKKyN1bmRl
ZiBTVEFSVF9OQU1FCisgICAgY2FzZSBCVF9RVU9UOgorICAgICAgaWYgKHN0YXRlICE9IGluVmFs
dWUpIHsKKyAgICAgICAgaWYgKG5BdHRzIDwgYXR0c01heCkKKyAgICAgICAgICBhdHRzW25BdHRz
XS52YWx1ZVB0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAgICAgICBzdGF0ZSA9IGluVmFsdWU7
CisgICAgICAgIG9wZW4gPSBCVF9RVU9UOworICAgICAgfQorICAgICAgZWxzZSBpZiAob3BlbiA9
PSBCVF9RVU9UKSB7CisgICAgICAgIHN0YXRlID0gb3RoZXI7CisgICAgICAgIGlmIChuQXR0cyA8
IGF0dHNNYXgpCisgICAgICAgICAgYXR0c1tuQXR0c10udmFsdWVFbmQgPSBwdHI7CisgICAgICAg
IG5BdHRzKys7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEJUX0FQT1M6CisgICAg
ICBpZiAoc3RhdGUgIT0gaW5WYWx1ZSkgeworICAgICAgICBpZiAobkF0dHMgPCBhdHRzTWF4KQor
ICAgICAgICAgIGF0dHNbbkF0dHNdLnZhbHVlUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAg
ICAgIHN0YXRlID0gaW5WYWx1ZTsKKyAgICAgICAgb3BlbiA9IEJUX0FQT1M7CisgICAgICB9Cisg
ICAgICBlbHNlIGlmIChvcGVuID09IEJUX0FQT1MpIHsKKyAgICAgICAgc3RhdGUgPSBvdGhlcjsK
KyAgICAgICAgaWYgKG5BdHRzIDwgYXR0c01heCkKKyAgICAgICAgICBhdHRzW25BdHRzXS52YWx1
ZUVuZCA9IHB0cjsKKyAgICAgICAgbkF0dHMrKzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAg
IGNhc2UgQlRfQU1QOgorICAgICAgaWYgKG5BdHRzIDwgYXR0c01heCkKKyAgICAgICAgYXR0c1tu
QXR0c10ubm9ybWFsaXplZCA9IDA7CisgICAgICBicmVhazsKKyAgICBjYXNlIEJUX1M6CisgICAg
ICBpZiAoc3RhdGUgPT0gaW5OYW1lKQorICAgICAgICBzdGF0ZSA9IG90aGVyOworICAgICAgZWxz
ZSBpZiAoc3RhdGUgPT0gaW5WYWx1ZQorICAgICAgICAgICAgICAgJiYgbkF0dHMgPCBhdHRzTWF4
CisgICAgICAgICAgICAgICAmJiBhdHRzW25BdHRzXS5ub3JtYWxpemVkCisgICAgICAgICAgICAg
ICAmJiAocHRyID09IGF0dHNbbkF0dHNdLnZhbHVlUHRyCisgICAgICAgICAgICAgICAgICAgfHwg
QllURV9UT19BU0NJSShlbmMsIHB0cikgIT0gQVNDSUlfU1BBQ0UKKyAgICAgICAgICAgICAgICAg
ICB8fCBCWVRFX1RPX0FTQ0lJKGVuYywgcHRyICsgTUlOQlBDKGVuYykpID09IEFTQ0lJX1NQQUNF
CisgICAgICAgICAgICAgICAgICAgfHwgQllURV9UWVBFKGVuYywgcHRyICsgTUlOQlBDKGVuYykp
ID09IG9wZW4pKQorICAgICAgICBhdHRzW25BdHRzXS5ub3JtYWxpemVkID0gMDsKKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6CisgICAgICAvKiBUaGlzIGNhc2UgZW5z
dXJlcyB0aGF0IHRoZSBmaXJzdCBhdHRyaWJ1dGUgbmFtZSBpcyBjb3VudGVkCisgICAgICAgICBB
cGFydCBmcm9tIHRoYXQgd2UgY291bGQganVzdCBjaGFuZ2Ugc3RhdGUgb24gdGhlIHF1b3RlLiAq
LworICAgICAgaWYgKHN0YXRlID09IGluTmFtZSkKKyAgICAgICAgc3RhdGUgPSBvdGhlcjsKKyAg
ICAgIGVsc2UgaWYgKHN0YXRlID09IGluVmFsdWUgJiYgbkF0dHMgPCBhdHRzTWF4KQorICAgICAg
ICBhdHRzW25BdHRzXS5ub3JtYWxpemVkID0gMDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQlRf
R1Q6CisgICAgY2FzZSBCVF9TT0w6CisgICAgICBpZiAoc3RhdGUgIT0gaW5WYWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG5BdHRzOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFr
OworICAgIH0KKyAgfQorICAvKiBub3QgcmVhY2hlZCAqLworfQorCitzdGF0aWMgaW50IFBUUkZB
U1RDQUxMCitQUkVGSVgoY2hhclJlZk51bWJlcikoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3Qg
Y2hhciAqcHRyKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgLyogc2tpcCAmIyAqLworICBwdHIg
Kz0gMipNSU5CUEMoZW5jKTsKKyAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfeCkp
IHsKKyAgICBmb3IgKHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgICAgICFDSEFSX01BVENIRVMo
ZW5jLCBwdHIsIEFTQ0lJX1NFTUkpOworICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpKSB7Cisg
ICAgICBpbnQgYyA9IEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIpOworICAgICAgc3dpdGNoIChjKSB7
CisgICAgICBjYXNlIEFTQ0lJXzA6IGNhc2UgQVNDSUlfMTogY2FzZSBBU0NJSV8yOiBjYXNlIEFT
Q0lJXzM6IGNhc2UgQVNDSUlfNDoKKyAgICAgIGNhc2UgQVNDSUlfNTogY2FzZSBBU0NJSV82OiBj
YXNlIEFTQ0lJXzc6IGNhc2UgQVNDSUlfODogY2FzZSBBU0NJSV85OgorICAgICAgICByZXN1bHQg
PDw9IDQ7CisgICAgICAgIHJlc3VsdCB8PSAoYyAtIEFTQ0lJXzApOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgQVNDSUlfQTogY2FzZSBBU0NJSV9COiBjYXNlIEFTQ0lJX0M6CisgICAgICBj
YXNlIEFTQ0lJX0Q6IGNhc2UgQVNDSUlfRTogY2FzZSBBU0NJSV9GOgorICAgICAgICByZXN1bHQg
PDw9IDQ7CisgICAgICAgIHJlc3VsdCArPSAxMCArIChjIC0gQVNDSUlfQSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBBU0NJSV9hOiBjYXNlIEFTQ0lJX2I6IGNhc2UgQVNDSUlfYzoKKyAg
ICAgIGNhc2UgQVNDSUlfZDogY2FzZSBBU0NJSV9lOiBjYXNlIEFTQ0lJX2Y6CisgICAgICAgIHJl
c3VsdCA8PD0gNDsKKyAgICAgICAgcmVzdWx0ICs9IDEwICsgKGMgLSBBU0NJSV9hKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAocmVzdWx0ID49IDB4MTEwMDAwKQorICAgICAg
ICByZXR1cm4gLTE7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGZvciAoOyAhQ0hBUl9NQVRD
SEVTKGVuYywgcHRyLCBBU0NJSV9TRU1JKTsgcHRyICs9IE1JTkJQQyhlbmMpKSB7CisgICAgICBp
bnQgYyA9IEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIpOworICAgICAgcmVzdWx0ICo9IDEwOworICAg
ICAgcmVzdWx0ICs9IChjIC0gQVNDSUlfMCk7CisgICAgICBpZiAocmVzdWx0ID49IDB4MTEwMDAw
KQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisgIHJldHVybiBjaGVja0NoYXJSZWZO
dW1iZXIocmVzdWx0KTsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitQUkVGSVgocHJlZGVmaW5l
ZEVudGl0eU5hbWUpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kKQoreworICBzd2l0Y2ggKChl
bmQgLSBwdHIpL01JTkJQQyhlbmMpKSB7CisgIGNhc2UgMjoKKyAgICBpZiAoQ0hBUl9NQVRDSEVT
KGVuYywgcHRyICsgTUlOQlBDKGVuYyksIEFTQ0lJX3QpKSB7CisgICAgICBzd2l0Y2ggKEJZVEVf
VE9fQVNDSUkoZW5jLCBwdHIpKSB7CisgICAgICBjYXNlIEFTQ0lJX2w6CisgICAgICAgIHJldHVy
biBBU0NJSV9MVDsKKyAgICAgIGNhc2UgQVNDSUlfZzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJX0dU
OworICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSAzOgorICAgIGlmIChDSEFSX01B
VENIRVMoZW5jLCBwdHIsIEFTQ0lJX2EpKSB7CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Cisg
ICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9tKSkgeworICAgICAgICBwdHIg
Kz0gTUlOQlBDKGVuYyk7CisgICAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJ
X3ApKQorICAgICAgICAgIHJldHVybiBBU0NJSV9BTVA7CisgICAgICB9CisgICAgfQorICAgIGJy
ZWFrOworICBjYXNlIDQ6CisgICAgc3dpdGNoIChCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKSkgewor
ICAgIGNhc2UgQVNDSUlfcToKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGlmIChD
SEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX3UpKSB7CisgICAgICAgIHB0ciArPSBNSU5CUEMo
ZW5jKTsKKyAgICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfbykpIHsKKyAg
ICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgICAgaWYgKENIQVJfTUFUQ0hFUyhl
bmMsIHB0ciwgQVNDSUlfdCkpCisgICAgICAgICAgICByZXR1cm4gQVNDSUlfUVVPVDsKKyAgICAg
ICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBBU0NJSV9hOgorICAgICAgcHRy
ICs9IE1JTkJQQyhlbmMpOworICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlf
cCkpIHsKKyAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICBpZiAoQ0hBUl9NQVRD
SEVTKGVuYywgcHRyLCBBU0NJSV9vKSkgeworICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsK
KyAgICAgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9zKSkKKyAgICAgICAg
ICAgIHJldHVybiBBU0NJSV9BUE9TOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsK
KyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklY
KHNhbWVOYW1lKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIxLCBjb25zdCBj
aGFyICpwdHIyKQoreworICBmb3IgKDs7KSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBw
dHIxKSkgeworI2RlZmluZSBMRUFEX0NBU0UobikgXAorICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBc
CisgICAgICBpZiAoKnB0cjErKyAhPSAqcHRyMisrKSBcCisgICAgICAgIHJldHVybiAwOworICAg
IExFQURfQ0FTRSg0KSBMRUFEX0NBU0UoMykgTEVBRF9DQVNFKDIpCisjdW5kZWYgTEVBRF9DQVNF
CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgIGlmICgqcHRyMSsrICE9ICpwdHIyKysp
CisgICAgICAgIHJldHVybiAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBCVF9OT05BU0NJSToK
KyAgICBjYXNlIEJUX05NU1RSVDoKKyNpZmRlZiBYTUxfTlMKKyAgICBjYXNlIEJUX0NPTE9OOgor
I2VuZGlmCisgICAgY2FzZSBCVF9IRVg6CisgICAgY2FzZSBCVF9ESUdJVDoKKyAgICBjYXNlIEJU
X05BTUU6CisgICAgY2FzZSBCVF9NSU5VUzoKKyAgICAgIGlmICgqcHRyMisrICE9ICpwdHIxKysp
CisgICAgICAgIHJldHVybiAwOworICAgICAgaWYgKE1JTkJQQyhlbmMpID4gMSkgeworICAgICAg
ICBpZiAoKnB0cjIrKyAhPSAqcHRyMSsrKQorICAgICAgICAgIHJldHVybiAwOworICAgICAgICBp
ZiAoTUlOQlBDKGVuYykgPiAyKSB7CisgICAgICAgICAgaWYgKCpwdHIyKysgIT0gKnB0cjErKykK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIGlmIChNSU5CUEMoZW5jKSA+IDMpIHsK
KyAgICAgICAgICAgIGlmICgqcHRyMisrICE9ICpwdHIxKyspCisgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgIGlmIChNSU5CUEMoZW5jKSA9PSAxICYmICpwdHIxID09ICpwdHIyKQor
ICAgICAgICByZXR1cm4gMTsKKyAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyMikpIHsK
KyAgICAgIGNhc2UgQlRfTEVBRDI6CisgICAgICBjYXNlIEJUX0xFQUQzOgorICAgICAgY2FzZSBC
VF9MRUFENDoKKyAgICAgIGNhc2UgQlRfTk9OQVNDSUk6CisgICAgICBjYXNlIEJUX05NU1RSVDoK
KyNpZmRlZiBYTUxfTlMKKyAgICAgIGNhc2UgQlRfQ09MT046CisjZW5kaWYKKyAgICAgIGNhc2Ug
QlRfSEVYOgorICAgICAgY2FzZSBCVF9ESUdJVDoKKyAgICAgIGNhc2UgQlRfTkFNRToKKyAgICAg
IGNhc2UgQlRfTUlOVVM6CisgICAgICAgIHJldHVybiAwOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICB9CisgIC8qIG5vdCByZWFjaGVkICovCit9
CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKG5hbWVNYXRjaGVzQXNjaWkpKGNvbnN0IEVO
Q09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0cjEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqZW5kMSwgY29uc3QgY2hhciAqcHRyMikKK3sKKyAgZm9yICg7ICpwdHIyOyBw
dHIxICs9IE1JTkJQQyhlbmMpLCBwdHIyKyspIHsKKyAgICBpZiAocHRyMSA9PSBlbmQxKQorICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIxLCAqcHRyMikpCisg
ICAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gcHRyMSA9PSBlbmQxOworfQorCitzdGF0aWMg
aW50IFBUUkZBU1RDQUxMCitQUkVGSVgobmFtZUxlbmd0aCkoY29uc3QgRU5DT0RJTkcgKmVuYywg
Y29uc3QgY2hhciAqcHRyKQoreworICBjb25zdCBjaGFyICpzdGFydCA9IHB0cjsKKyAgZm9yICg7
OykgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworI2RlZmluZSBMRUFEX0NB
U0UobikgXAorICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBwdHIgKz0gbjsgYnJlYWs7CisgICAgTEVB
RF9DQVNFKDIpIExFQURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKKyN1bmRlZiBMRUFEX0NBU0UKKyAg
ICBjYXNlIEJUX05PTkFTQ0lJOgorICAgIGNhc2UgQlRfTk1TVFJUOgorI2lmZGVmIFhNTF9OUwor
ICAgIGNhc2UgQlRfQ09MT046CisjZW5kaWYKKyAgICBjYXNlIEJUX0hFWDoKKyAgICBjYXNlIEJU
X0RJR0lUOgorICAgIGNhc2UgQlRfTkFNRToKKyAgICBjYXNlIEJUX01JTlVTOgorICAgICAgcHRy
ICs9IE1JTkJQQyhlbmMpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVy
biAoaW50KShwdHIgLSBzdGFydCk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFy
ICogUFRSRkFTVENBTEwKK1BSRUZJWChza2lwUykoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3Qg
Y2hhciAqcHRyKQoreworICBmb3IgKDs7KSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBw
dHIpKSB7CisgICAgY2FzZSBCVF9MRjoKKyAgICBjYXNlIEJUX0NSOgorICAgIGNhc2UgQlRfUzoK
KyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICByZXR1cm4gcHRyOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZCBQVFJDQUxMCitQ
UkVGSVgodXBkYXRlUG9zaXRpb24pKGNvbnN0IEVOQ09ESU5HICplbmMsCisgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICBQT1NJVElPTiAqcG9zKQoreworICB3
aGlsZSAocHRyIDwgZW5kKSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Cisj
ZGVmaW5lIExFQURfQ0FTRShuKSBcCisgICAgY2FzZSBCVF9MRUFEICMjIG46IFwKKyAgICAgIHB0
ciArPSBuOyBcCisgICAgICBicmVhazsKKyAgICBMRUFEX0NBU0UoMikgTEVBRF9DQVNFKDMpIExF
QURfQ0FTRSg0KQorI3VuZGVmIExFQURfQ0FTRQorICAgIGNhc2UgQlRfTEY6CisgICAgICBwb3Mt
PmNvbHVtbk51bWJlciA9IChYTUxfU2l6ZSktMTsKKyAgICAgIHBvcy0+bGluZU51bWJlcisrOwor
ICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBCVF9DUjoK
KyAgICAgIHBvcy0+bGluZU51bWJlcisrOworICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAg
ICAgaWYgKHB0ciAhPSBlbmQgJiYgQllURV9UWVBFKGVuYywgcHRyKSA9PSBCVF9MRikKKyAgICAg
ICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgcG9zLT5jb2x1bW5OdW1iZXIgPSAoWE1MX1Np
emUpLTE7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcHRyICs9IE1JTkJQQyhl
bmMpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIHBvcy0+Y29sdW1uTnVtYmVyKys7CisgIH0K
K30KKworI3VuZGVmIERPX0xFQURfQ0FTRQorI3VuZGVmIE1VTFRJQllURV9DQVNFUworI3VuZGVm
IElOVkFMSURfQ0FTRVMKKyN1bmRlZiBDSEVDS19OQU1FX0NBU0UKKyN1bmRlZiBDSEVDS19OQU1F
X0NBU0VTCisjdW5kZWYgQ0hFQ0tfTk1TVFJUX0NBU0UKKyN1bmRlZiBDSEVDS19OTVNUUlRfQ0FT
RVMKKworI2VuZGlmIC8qIFhNTF9UT0tfSU1QTF9DICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0
b2tfaW1wbC5jLm9yaWdpbmFsIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1sdG9rX2ltcGwuYy5vcmlnaW5hbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YzI4OTViODc3MzllZjAzMWVjZDkzM2RmNGI5NWUyNDQxZjg5NjJiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9l
eHBhdC9maWxlcy9saWIveG1sdG9rX2ltcGwuYy5vcmlnaW5hbApAQCAtMCwwICsxLDE3ODMgQEAK
Ky8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENl
bnRlciBMdGQKKyAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24u
CisqLworCisvKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQhICovCisjaWZkZWYgWE1MX1RPS19JTVBM
X0MKKworI2lmbmRlZiBJU19JTlZBTElEX0NIQVIKKyNkZWZpbmUgSVNfSU5WQUxJRF9DSEFSKGVu
YywgcHRyLCBuKSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIElOVkFMSURfTEVBRF9DQVNFKG4sIHB0
ciwgbmV4dFRva1B0cikgXAorICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBcCisgICAgICBpZiAoZW5k
IC0gcHRyIDwgbikgXAorICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMX0NIQVI7IFwKKyAg
ICAgIGlmIChJU19JTlZBTElEX0NIQVIoZW5jLCBwdHIsIG4pKSB7IFwKKyAgICAgICAgKihuZXh0
VG9rUHRyKSA9IChwdHIpOyBcCisgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7IFwKKyAg
ICAgIH0gXAorICAgICAgcHRyICs9IG47IFwKKyAgICAgIGJyZWFrOworCisjZGVmaW5lIElOVkFM
SURfQ0FTRVMocHRyLCBuZXh0VG9rUHRyKSBcCisgIElOVkFMSURfTEVBRF9DQVNFKDIsIHB0ciwg
bmV4dFRva1B0cikgXAorICBJTlZBTElEX0xFQURfQ0FTRSgzLCBwdHIsIG5leHRUb2tQdHIpIFwK
KyAgSU5WQUxJRF9MRUFEX0NBU0UoNCwgcHRyLCBuZXh0VG9rUHRyKSBcCisgIGNhc2UgQlRfTk9O
WE1MOiBcCisgIGNhc2UgQlRfTUFMRk9STTogXAorICBjYXNlIEJUX1RSQUlMOiBcCisgICAgKihu
ZXh0VG9rUHRyKSA9IChwdHIpOyBcCisgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKworI2Rl
ZmluZSBDSEVDS19OQU1FX0NBU0UobiwgZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAorICAg
Y2FzZSBCVF9MRUFEICMjIG46IFwKKyAgICAgaWYgKGVuZCAtIHB0ciA8IG4pIFwKKyAgICAgICBy
ZXR1cm4gWE1MX1RPS19QQVJUSUFMX0NIQVI7IFwKKyAgICAgaWYgKCFJU19OQU1FX0NIQVIoZW5j
LCBwdHIsIG4pKSB7IFwKKyAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsgXAorICAgICAgIHJldHVy
biBYTUxfVE9LX0lOVkFMSUQ7IFwKKyAgICAgfSBcCisgICAgIHB0ciArPSBuOyBcCisgICAgIGJy
ZWFrOworCisjZGVmaW5lIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0
cikgXAorICBjYXNlIEJUX05PTkFTQ0lJOiBcCisgICAgaWYgKCFJU19OQU1FX0NIQVJfTUlOQlBD
KGVuYywgcHRyKSkgeyBcCisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsgXAorICAgICAgcmV0dXJu
IFhNTF9UT0tfSU5WQUxJRDsgXAorICAgIH0gXAorICBjYXNlIEJUX05NU1RSVDogXAorICBjYXNl
IEJUX0hFWDogXAorICBjYXNlIEJUX0RJR0lUOiBcCisgIGNhc2UgQlRfTkFNRTogXAorICBjYXNl
IEJUX01JTlVTOiBcCisgICAgcHRyICs9IE1JTkJQQyhlbmMpOyBcCisgICAgYnJlYWs7IFwKKyAg
Q0hFQ0tfTkFNRV9DQVNFKDIsIGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKKyAgQ0hFQ0tf
TkFNRV9DQVNFKDMsIGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKKyAgQ0hFQ0tfTkFNRV9D
QVNFKDQsIGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpCisKKyNkZWZpbmUgQ0hFQ0tfTk1TVFJU
X0NBU0UobiwgZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAorICAgY2FzZSBCVF9MRUFEICMj
IG46IFwKKyAgICAgaWYgKGVuZCAtIHB0ciA8IG4pIFwKKyAgICAgICByZXR1cm4gWE1MX1RPS19Q
QVJUSUFMX0NIQVI7IFwKKyAgICAgaWYgKCFJU19OTVNUUlRfQ0hBUihlbmMsIHB0ciwgbikpIHsg
XAorICAgICAgICpuZXh0VG9rUHRyID0gcHRyOyBcCisgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsgXAorICAgICB9IFwKKyAgICAgcHRyICs9IG47IFwKKyAgICAgYnJlYWs7CisKKyNkZWZp
bmUgQ0hFQ0tfTk1TVFJUX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKKyAgY2Fz
ZSBCVF9OT05BU0NJSTogXAorICAgIGlmICghSVNfTk1TVFJUX0NIQVJfTUlOQlBDKGVuYywgcHRy
KSkgeyBcCisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsgXAorICAgICAgcmV0dXJuIFhNTF9UT0tf
SU5WQUxJRDsgXAorICAgIH0gXAorICBjYXNlIEJUX05NU1RSVDogXAorICBjYXNlIEJUX0hFWDog
XAorICAgIHB0ciArPSBNSU5CUEMoZW5jKTsgXAorICAgIGJyZWFrOyBcCisgIENIRUNLX05NU1RS
VF9DQVNFKDIsIGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKKyAgQ0hFQ0tfTk1TVFJUX0NB
U0UoMywgZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAorICBDSEVDS19OTVNUUlRfQ0FTRSg0
LCBlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorCisjaWZuZGVmIFBSRUZJWAorI2RlZmluZSBQ
UkVGSVgoaWRlbnQpIGlkZW50CisjZW5kaWYKKworLyogcHRyIHBvaW50cyB0byBjaGFyYWN0ZXIg
Zm9sbG93aW5nICI8IS0iICovCisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKHNjYW5Db21t
ZW50KShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCit7CisgIGlm
IChwdHIgIT0gZW5kKSB7CisgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX01J
TlVTKSkgeworICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19J
TlZBTElEOworICAgIH0KKyAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgd2hpbGUgKHB0ciAh
PSBlbmQpIHsKKyAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgICAgSU5W
QUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQdHIpCisgICAgICBjYXNlIEJUX01JTlVTOgorICAgICAg
ICBpZiAoKHB0ciArPSBNSU5CUEMoZW5jKSkgPT0gZW5kKQorICAgICAgICAgIHJldHVybiBYTUxf
VE9LX1BBUlRJQUw7CisgICAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX01J
TlVTKSkgeworICAgICAgICAgIGlmICgocHRyICs9IE1JTkJQQyhlbmMpKSA9PSBlbmQpCisgICAg
ICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgICAgIGlmICghQ0hBUl9NQVRD
SEVTKGVuYywgcHRyLCBBU0NJSV9HVCkpIHsKKyAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRy
OworICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgICAgICB9CisgICAg
ICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgICAgICByZXR1cm4g
WE1MX1RPS19DT01NRU5UOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICBicmVhazsKKyAgICAgIH0K
KyAgICB9CisgIH0KKyAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKK30KKworLyogcHRyIHBvaW50
cyB0byBjaGFyYWN0ZXIgZm9sbG93aW5nICI8ISIgKi8KKworc3RhdGljIGludCBQVFJDQUxMCitQ
UkVGSVgoc2NhbkRlY2wpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKKyAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikK
K3sKKyAgaWYgKHB0ciA9PSBlbmQpCisgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgc3dp
dGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgIGNhc2UgQlRfTUlOVVM6CisgICAgcmV0dXJu
IFBSRUZJWChzY2FuQ29tbWVudCkoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9r
UHRyKTsKKyAgY2FzZSBCVF9MU1FCOgorICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVu
Yyk7CisgICAgcmV0dXJuIFhNTF9UT0tfQ09ORF9TRUNUX09QRU47CisgIGNhc2UgQlRfTk1TVFJU
OgorICBjYXNlIEJUX0hFWDoKKyAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgYnJlYWs7Cisg
IGRlZmF1bHQ6CisgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsKKyAgfQorICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBF
KGVuYywgcHRyKSkgeworICAgIGNhc2UgQlRfUEVSQ05UOgorICAgICAgaWYgKHB0ciArIE1JTkJQ
QyhlbmMpID09IGVuZCkKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgIC8q
IGRvbid0IGFsbG93IDwhRU5USVRZJSBmb28gIndoYXRldmVyIj4gKi8KKyAgICAgIHN3aXRjaCAo
QllURV9UWVBFKGVuYywgcHRyICsgTUlOQlBDKGVuYykpKSB7CisgICAgICBjYXNlIEJUX1M6IGNh
c2UgQlRfQ1I6IGNhc2UgQlRfTEY6IGNhc2UgQlRfUEVSQ05UOgorICAgICAgICAqbmV4dFRva1B0
ciA9IHB0cjsKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgIH0KKyAgICAg
IC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9M
RjoKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfREVDTF9P
UEVOOworICAgIGNhc2UgQlRfTk1TVFJUOgorICAgIGNhc2UgQlRfSEVYOgorICAgICAgcHRyICs9
IE1JTkJQQyhlbmMpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICpuZXh0VG9r
UHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICB9CisgIH0KKyAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitQUkVGSVgo
Y2hlY2tQaVRhcmdldCkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAorICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgaW50ICp0b2tQdHIpCit7CisgIGlu
dCB1cHBlciA9IDA7CisgICp0b2tQdHIgPSBYTUxfVE9LX1BJOworICBpZiAoZW5kIC0gcHRyICE9
IE1JTkJQQyhlbmMpKjMpCisgICAgcmV0dXJuIDE7CisgIHN3aXRjaCAoQllURV9UT19BU0NJSShl
bmMsIHB0cikpIHsKKyAgY2FzZSBBU0NJSV94OgorICAgIGJyZWFrOworICBjYXNlIEFTQ0lJX1g6
CisgICAgdXBwZXIgPSAxOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHJldHVybiAxOwor
ICB9CisgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgc3dpdGNoIChCWVRFX1RPX0FTQ0lJKGVuYywg
cHRyKSkgeworICBjYXNlIEFTQ0lJX206CisgICAgYnJlYWs7CisgIGNhc2UgQVNDSUlfTToKKyAg
ICB1cHBlciA9IDE7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIDE7CisgIH0K
KyAgcHRyICs9IE1JTkJQQyhlbmMpOworICBzd2l0Y2ggKEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIp
KSB7CisgIGNhc2UgQVNDSUlfbDoKKyAgICBicmVhazsKKyAgY2FzZSBBU0NJSV9MOgorICAgIHVw
cGVyID0gMTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMTsKKyAgfQorICBp
ZiAodXBwZXIpCisgICAgcmV0dXJuIDA7CisgICp0b2tQdHIgPSBYTUxfVE9LX1hNTF9ERUNMOwor
ICByZXR1cm4gMTsKK30KKworLyogcHRyIHBvaW50cyB0byBjaGFyYWN0ZXIgZm9sbG93aW5nICI8
PyIgKi8KKworc3RhdGljIGludCBQVFJDQUxMCitQUkVGSVgoc2NhblBpKShjb25zdCBFTkNPRElO
RyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQs
IGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBpbnQgdG9rOworICBjb25zdCBjaGFyICp0
YXJnZXQgPSBwdHI7CisgIGlmIChwdHIgPT0gZW5kKQorICAgIHJldHVybiBYTUxfVE9LX1BBUlRJ
QUw7CisgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICBDSEVDS19OTVNUUlRfQ0FT
RVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAgZGVmYXVsdDoKKyAgICAqbmV4dFRva1B0
ciA9IHB0cjsKKyAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICB9CisgIHdoaWxlIChwdHIg
IT0gZW5kKSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgICAgQ0hFQ0tf
TkFNRV9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorICAgIGNhc2UgQlRfUzogY2Fz
ZSBCVF9DUjogY2FzZSBCVF9MRjoKKyAgICAgIGlmICghUFJFRklYKGNoZWNrUGlUYXJnZXQpKGVu
YywgdGFyZ2V0LCBwdHIsICZ0b2spKSB7CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAg
ICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgICAgfQorICAgICAgcHRyICs9IE1JTkJQ
QyhlbmMpOworICAgICAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICAgICAgc3dpdGNoIChCWVRF
X1RZUEUoZW5jLCBwdHIpKSB7CisgICAgICAgIElOVkFMSURfQ0FTRVMocHRyLCBuZXh0VG9rUHRy
KQorICAgICAgICBjYXNlIEJUX1FVRVNUOgorICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsK
KyAgICAgICAgICBpZiAocHRyID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BB
UlRJQUw7CisgICAgICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7
CisgICAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAgICAgICAg
ICAgcmV0dXJuIHRvazsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICAgIGNh
c2UgQlRfUVVFU1Q6CisgICAgICBpZiAoIVBSRUZJWChjaGVja1BpVGFyZ2V0KShlbmMsIHRhcmdl
dCwgcHRyLCAmdG9rKSkgeworICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgcmV0
dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgIH0KKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsK
KyAgICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwor
ICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7CisgICAgICAgICpu
ZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICAgIHJldHVybiB0b2s7CisgICAg
ICB9CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgKm5leHRU
b2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgIH0KKyAgfQor
ICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJ
WChzY2FuQ2RhdGFTZWN0aW9uKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoq
bmV4dFRva1B0cikKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgQ0RBVEFfTFNRQltdID0geyBBU0NJ
SV9DLCBBU0NJSV9ELCBBU0NJSV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTQ0lJX1QsIEFTQ0lJX0EsIEFTQ0lJX0xTUUIgfTsKKyAgaW50IGk7CisgIC8qIENEQVRB
WyAqLworICBpZiAoZW5kIC0gcHRyIDwgNiAqIE1JTkJQQyhlbmMpKQorICAgIHJldHVybiBYTUxf
VE9LX1BBUlRJQUw7CisgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyssIHB0ciArPSBNSU5CUEMoZW5j
KSkgeworICAgIGlmICghQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBDREFUQV9MU1FCW2ldKSkgewor
ICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwor
ICAgIH0KKyAgfQorICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgcmV0dXJuIFhNTF9UT0tfQ0RBVEFf
U0VDVF9PUEVOOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChjZGF0YVNlY3Rpb25U
b2spKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCit7Cisg
IGlmIChwdHIgPT0gZW5kKQorICAgIHJldHVybiBYTUxfVE9LX05PTkU7CisgIGlmIChNSU5CUEMo
ZW5jKSA+IDEpIHsKKyAgICBzaXplX3QgbiA9IGVuZCAtIHB0cjsKKyAgICBpZiAobiAmIChNSU5C
UEMoZW5jKSAtIDEpKSB7CisgICAgICBuICY9IH4oTUlOQlBDKGVuYykgLSAxKTsKKyAgICAgIGlm
IChuID09IDApCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICBlbmQgPSBw
dHIgKyBuOworICAgIH0KKyAgfQorICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAg
Y2FzZSBCVF9SU1FCOgorICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICBpZiAocHRyID09IGVu
ZCkKKyAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgaWYgKCFDSEFSX01BVENIRVMo
ZW5jLCBwdHIsIEFTQ0lJX1JTUUIpKQorICAgICAgYnJlYWs7CisgICAgcHRyICs9IE1JTkJQQyhl
bmMpOworICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsK
KyAgICBpZiAoIUNIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7CisgICAgICBwdHIg
LT0gTUlOQlBDKGVuYyk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgKm5leHRUb2tQdHIgPSBw
dHIgKyBNSU5CUEMoZW5jKTsKKyAgICByZXR1cm4gWE1MX1RPS19DREFUQV9TRUNUX0NMT1NFOwor
ICBjYXNlIEJUX0NSOgorICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICBpZiAocHRyID09IGVu
ZCkKKyAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgaWYgKEJZVEVfVFlQRShlbmMs
IHB0cikgPT0gQlRfTEYpCisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgKm5leHRUb2tQ
dHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9ORVdMSU5FOworICBjYXNlIEJUX0xG
OgorICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgcmV0dXJuIFhNTF9U
T0tfREFUQV9ORVdMSU5FOworICBJTlZBTElEX0NBU0VTKHB0ciwgbmV4dFRva1B0cikKKyAgZGVm
YXVsdDoKKyAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgYnJlYWs7CisgIH0KKyAgd2hpbGUg
KHB0ciAhPSBlbmQpIHsKKyAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyNkZWZp
bmUgTEVBRF9DQVNFKG4pIFwKKyAgICBjYXNlIEJUX0xFQUQgIyMgbjogXAorICAgICAgaWYgKGVu
ZCAtIHB0ciA8IG4gfHwgSVNfSU5WQUxJRF9DSEFSKGVuYywgcHRyLCBuKSkgeyBcCisgICAgICAg
ICpuZXh0VG9rUHRyID0gcHRyOyBcCisgICAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7
IFwKKyAgICAgIH0gXAorICAgICAgcHRyICs9IG47IFwKKyAgICAgIGJyZWFrOworICAgIExFQURf
Q0FTRSgyKSBMRUFEX0NBU0UoMykgTEVBRF9DQVNFKDQpCisjdW5kZWYgTEVBRF9DQVNFCisgICAg
Y2FzZSBCVF9OT05YTUw6CisgICAgY2FzZSBCVF9NQUxGT1JNOgorICAgIGNhc2UgQlRfVFJBSUw6
CisgICAgY2FzZSBCVF9DUjoKKyAgICBjYXNlIEJUX0xGOgorICAgIGNhc2UgQlRfUlNRQjoKKyAg
ICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsK
KyAgICBkZWZhdWx0OgorICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisgICpuZXh0VG9rUHRyID0gcHRyOworICByZXR1cm4gWE1MX1RPS19EQVRBX0NI
QVJTOworfQorCisvKiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBmb2xsb3dpbmcgIjwvIiAqLwor
CitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChzY2FuRW5kVGFnKShjb25zdCBFTkNPRElORyAq
ZW5jLCBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKK3sKKyAgaWYgKHB0ciA9PSBlbmQpCisgICAgcmV0
dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Cisg
IENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorICBkZWZhdWx0
OgorICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Cisg
IH0KKyAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0
cikpIHsKKyAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpCisg
ICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgorICAgICAgZm9yIChwdHIgKz0g
TUlOQlBDKGVuYyk7IHB0ciAhPSBlbmQ7IHB0ciArPSBNSU5CUEMoZW5jKSkgeworICAgICAgICBz
d2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICAgICAgY2FzZSBCVF9TOiBjYXNlIEJU
X0NSOiBjYXNlIEJUX0xGOgorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJUX0dUOgor
ICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICAgICAgcmV0
dXJuIFhNTF9UT0tfRU5EX1RBRzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAqbmV4dFRv
a1B0ciA9IHB0cjsKKyAgICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgICAgICB9
CisgICAgICB9CisgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworI2lmZGVmIFhNTF9OUwor
ICAgIGNhc2UgQlRfQ09MT046CisgICAgICAvKiBubyBuZWVkIHRvIGNoZWNrIHFuYW1lIHN5bnRh
eCBoZXJlLAorICAgICAgICAgc2luY2UgZW5kLXRhZyBtdXN0IG1hdGNoIGV4YWN0bHkgKi8KKyAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBC
VF9HVDoKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICByZXR1
cm4gWE1MX1RPS19FTkRfVEFHOworICAgIGRlZmF1bHQ6CisgICAgICAqbmV4dFRva1B0ciA9IHB0
cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICB9CisgIHJldHVybiBY
TUxfVE9LX1BBUlRJQUw7Cit9CisKKy8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVyIGZvbGxvd2lu
ZyAiJiNYIiAqLworCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChzY2FuSGV4Q2hhclJlZiko
Y29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBpZiAo
cHRyICE9IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgIGNh
c2UgQlRfRElHSVQ6CisgICAgY2FzZSBCVF9IRVg6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElE
OworICAgIH0KKyAgICBmb3IgKHB0ciArPSBNSU5CUEMoZW5jKTsgcHRyICE9IGVuZDsgcHRyICs9
IE1JTkJQQyhlbmMpKSB7CisgICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAg
ICAgIGNhc2UgQlRfRElHSVQ6CisgICAgICBjYXNlIEJUX0hFWDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEJUX1NFTUk6CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVu
Yyk7CisgICAgICAgIHJldHVybiBYTUxfVE9LX0NIQVJfUkVGOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7
CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Cit9CisKKy8q
IHB0ciBwb2ludHMgdG8gY2hhcmFjdGVyIGZvbGxvd2luZyAiJiMiICovCisKK3N0YXRpYyBpbnQg
UFRSQ0FMTAorUFJFRklYKHNjYW5DaGFyUmVmKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBj
aGFyICpwdHIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hh
ciAqKm5leHRUb2tQdHIpCit7CisgIGlmIChwdHIgIT0gZW5kKSB7CisgICAgaWYgKENIQVJfTUFU
Q0hFUyhlbmMsIHB0ciwgQVNDSUlfeCkpCisgICAgICByZXR1cm4gUFJFRklYKHNjYW5IZXhDaGFy
UmVmKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOworICAgIHN3aXRj
aCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgIGNhc2UgQlRfRElHSVQ6CisgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4g
WE1MX1RPS19JTlZBTElEOworICAgIH0KKyAgICBmb3IgKHB0ciArPSBNSU5CUEMoZW5jKTsgcHRy
ICE9IGVuZDsgcHRyICs9IE1JTkJQQyhlbmMpKSB7CisgICAgICBzd2l0Y2ggKEJZVEVfVFlQRShl
bmMsIHB0cikpIHsKKyAgICAgIGNhc2UgQlRfRElHSVQ6CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBCVF9TRU1JOgorICAgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwor
ICAgICAgICByZXR1cm4gWE1MX1RPS19DSEFSX1JFRjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAg
ICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworfQorCisvKiBwdHIg
cG9pbnRzIHRvIGNoYXJhY3RlciBmb2xsb3dpbmcgIiYiICovCisKK3N0YXRpYyBpbnQgUFRSQ0FM
TAorUFJFRklYKHNjYW5SZWYpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwg
Y29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRy
KQoreworICBpZiAocHRyID09IGVuZCkKKyAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICBz
d2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgQ0hFQ0tfTk1TVFJUX0NBU0VTKGVuYywg
cHRyLCBlbmQsIG5leHRUb2tQdHIpCisgIGNhc2UgQlRfTlVNOgorICAgIHJldHVybiBQUkVGSVgo
c2NhbkNoYXJSZWYpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7Cisg
IGRlZmF1bHQ6CisgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsKKyAgfQorICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBF
KGVuYywgcHRyKSkgeworICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRv
a1B0cikKKyAgICBjYXNlIEJUX1NFTUk6CisgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQ
QyhlbmMpOworICAgICAgcmV0dXJuIFhNTF9UT0tfRU5USVRZX1JFRjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwor
ICAgIH0KKyAgfQorICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOworfQorCisvKiBwdHIgcG9pbnRz
IHRvIGNoYXJhY3RlciBmb2xsb3dpbmcgZmlyc3QgY2hhcmFjdGVyIG9mIGF0dHJpYnV0ZSBuYW1l
ICovCisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKHNjYW5BdHRzKShjb25zdCBFTkNPRElO
RyAqZW5jLCBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCit7CisjaWZkZWYgWE1MX05TCisgIGludCBoYWRD
b2xvbiA9IDA7CisjZW5kaWYKKyAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICBzd2l0Y2ggKEJZ
VEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBlbmQs
IG5leHRUb2tQdHIpCisjaWZkZWYgWE1MX05TCisgICAgY2FzZSBCVF9DT0xPTjoKKyAgICAgIGlm
IChoYWRDb2xvbikgeworICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgcmV0dXJu
IFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgIH0KKyAgICAgIGhhZENvbG9uID0gMTsKKyAgICAgIHB0
ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICByZXR1cm4g
WE1MX1RPS19QQVJUSUFMOworICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Cisg
ICAgICBDSEVDS19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4gWE1M
X1RPS19JTlZBTElEOworICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIEJU
X1M6IGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6CisgICAgICBmb3IgKDs7KSB7CisgICAgICAgIGlu
dCB0OworCisgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgICAgaWYgKHB0ciA9PSBl
bmQpCisgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgICAgdCA9IEJZVEVf
VFlQRShlbmMsIHB0cik7CisgICAgICAgIGlmICh0ID09IEJUX0VRVUFMUykKKyAgICAgICAgICBi
cmVhazsKKyAgICAgICAgc3dpdGNoICh0KSB7CisgICAgICAgIGNhc2UgQlRfUzoKKyAgICAgICAg
Y2FzZSBCVF9MRjoKKyAgICAgICAgY2FzZSBCVF9DUjoKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgICByZXR1
cm4gWE1MX1RPS19JTlZBTElEOworICAgICAgICB9CisgICAgICB9CisgICAgLyogZmFsbCB0aHJv
dWdoICovCisgICAgY2FzZSBCVF9FUVVBTFM6CisgICAgICB7CisgICAgICAgIGludCBvcGVuOwor
I2lmZGVmIFhNTF9OUworICAgICAgICBoYWRDb2xvbiA9IDA7CisjZW5kaWYKKyAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgICAgICBpZiAocHRy
ID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICAgICAg
b3BlbiA9IEJZVEVfVFlQRShlbmMsIHB0cik7CisgICAgICAgICAgaWYgKG9wZW4gPT0gQlRfUVVP
VCB8fCBvcGVuID09IEJUX0FQT1MpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBzd2l0
Y2ggKG9wZW4pIHsKKyAgICAgICAgICBjYXNlIEJUX1M6CisgICAgICAgICAgY2FzZSBCVF9MRjoK
KyAgICAgICAgICBjYXNlIEJUX0NSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICAgICAgcmV0dXJu
IFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHRyICs9
IE1JTkJQQyhlbmMpOworICAgICAgICAvKiBpbiBhdHRyaWJ1dGUgdmFsdWUgKi8KKyAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgIGludCB0OworICAgICAgICAgIGlmIChwdHIgPT0gZW5kKQor
ICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgICAgICB0ID0gQllURV9U
WVBFKGVuYywgcHRyKTsKKyAgICAgICAgICBpZiAodCA9PSBvcGVuKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgc3dpdGNoICh0KSB7CisgICAgICAgICAgSU5WQUxJRF9DQVNFUyhwdHIs
IG5leHRUb2tQdHIpCisgICAgICAgICAgY2FzZSBCVF9BTVA6CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGludCB0b2sgPSBQUkVGSVgoc2NhblJlZikoZW5jLCBwdHIgKyBNSU5CUEMoZW5j
KSwgZW5kLCAmcHRyKTsKKyAgICAgICAgICAgICAgaWYgKHRvayA8PSAwKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRvayA9PSBYTUxfVE9LX0lOVkFMSUQpCisgICAgICAgICAgICAgICAgICAqbmV4
dFRva1B0ciA9IHB0cjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rOworICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2Ug
QlRfTFQ6CisgICAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgICAgIHJldHVy
biBYTUxfVE9LX0lOVkFMSUQ7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHB0ciAr
PSBNSU5CUEMoZW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgIGlmIChwdHIgPT0gZW5kKQor
ICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICAgIHN3aXRjaCAoQllURV9U
WVBFKGVuYywgcHRyKSkgeworICAgICAgICBjYXNlIEJUX1M6CisgICAgICAgIGNhc2UgQlRfQ1I6
CisgICAgICAgIGNhc2UgQlRfTEY6CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlRf
U09MOgorICAgICAgICAgIGdvdG8gc29sOworICAgICAgICBjYXNlIEJUX0dUOgorICAgICAgICAg
IGdvdG8gZ3Q7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7
CisgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgICAgfQorICAgICAgICAv
KiBwdHIgcG9pbnRzIHRvIGNsb3NpbmcgcXVvdGUgKi8KKyAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgICAgICBpZiAocHRyID09IGVuZCkKKyAg
ICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICAgICAgc3dpdGNoIChCWVRF
X1RZUEUoZW5jLCBwdHIpKSB7CisgICAgICAgICAgQ0hFQ0tfTk1TVFJUX0NBU0VTKGVuYywgcHRy
LCBlbmQsIG5leHRUb2tQdHIpCisgICAgICAgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNl
IEJUX0xGOgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgY2FzZSBCVF9HVDoKKyAg
ICAgICAgICBndDoKKyAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7
CisgICAgICAgICAgICByZXR1cm4gWE1MX1RPS19TVEFSVF9UQUdfV0lUSF9BVFRTOworICAgICAg
ICAgIGNhc2UgQlRfU09MOgorICAgICAgICAgIHNvbDoKKyAgICAgICAgICAgIHB0ciArPSBNSU5C
UEMoZW5jKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICAgICAgICByZXR1
cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgICAgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBw
dHIsIEFTQ0lJX0dUKSkgeworICAgICAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAg
ICAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICAgICAgICByZXR1cm4g
WE1MX1RPS19FTVBUWV9FTEVNRU5UX1dJVEhfQVRUUzsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgICAgICByZXR1cm4gWE1MX1RPS19J
TlZBTElEOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7
CisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgIH0KKyAgfQorICByZXR1cm4gWE1M
X1RPS19QQVJUSUFMOworfQorCisvKiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBmb2xsb3dpbmcg
IjwiICovCisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKHNjYW5MdCkoY29uc3QgRU5DT0RJ
TkcgKmVuYywgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKK3sKKyNpZmRlZiBYTUxfTlMKKyAgaW50IGhhZENv
bG9uOworI2VuZGlmCisgIGlmIChwdHIgPT0gZW5kKQorICAgIHJldHVybiBYTUxfVE9LX1BBUlRJ
QUw7CisgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICBDSEVDS19OTVNUUlRfQ0FT
RVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAgY2FzZSBCVF9FWENMOgorICAgIGlmICgo
cHRyICs9IE1JTkJQQyhlbmMpKSA9PSBlbmQpCisgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFM
OworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgIGNhc2UgQlRfTUlOVVM6
CisgICAgICByZXR1cm4gUFJFRklYKHNjYW5Db21tZW50KShlbmMsIHB0ciArIE1JTkJQQyhlbmMp
LCBlbmQsIG5leHRUb2tQdHIpOworICAgIGNhc2UgQlRfTFNRQjoKKyAgICAgIHJldHVybiBQUkVG
SVgoc2NhbkNkYXRhU2VjdGlvbikoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLCBuZXh0VG9rUHRyKTsKKyAgICB9CisgICAg
Km5leHRUb2tQdHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgY2FzZSBC
VF9RVUVTVDoKKyAgICByZXR1cm4gUFJFRklYKHNjYW5QaSkoZW5jLCBwdHIgKyBNSU5CUEMoZW5j
KSwgZW5kLCBuZXh0VG9rUHRyKTsKKyAgY2FzZSBCVF9TT0w6CisgICAgcmV0dXJuIFBSRUZJWChz
Y2FuRW5kVGFnKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOworICBk
ZWZhdWx0OgorICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVybiBYTUxfVE9LX0lOVkFM
SUQ7CisgIH0KKyNpZmRlZiBYTUxfTlMKKyAgaGFkQ29sb24gPSAwOworI2VuZGlmCisgIC8qIHdl
IGhhdmUgYSBzdGFydC10YWcgKi8KKyAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICBzd2l0Y2gg
KEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBl
bmQsIG5leHRUb2tQdHIpCisjaWZkZWYgWE1MX05TCisgICAgY2FzZSBCVF9DT0xPTjoKKyAgICAg
IGlmIChoYWRDb2xvbikgeworICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgcmV0
dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgIH0KKyAgICAgIGhhZENvbG9uID0gMTsKKyAgICAg
IHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGlmIChwdHIgPT0gZW5kKQorICAgICAgICByZXR1
cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7
CisgICAgICBDSEVDS19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4g
WE1MX1RPS19JTlZBTElEOworICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNl
IEJUX1M6IGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6CisgICAgICB7CisgICAgICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKKyAgICAgICAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICAgICAgICBzd2l0
Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICAgICAgICBDSEVDS19OTVNUUlRfQ0FTRVMo
ZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAgICAgICAgICBjYXNlIEJUX0dUOgorICAgICAg
ICAgICAgZ290byBndDsKKyAgICAgICAgICBjYXNlIEJUX1NPTDoKKyAgICAgICAgICAgIGdvdG8g
c29sOworICAgICAgICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9MRjoKKyAgICAg
ICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgICAg
IHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBQ
UkVGSVgoc2NhbkF0dHMpKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICB9CisgICAgY2FzZSBCVF9HVDoK
KyAgICBndDoKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgICBy
ZXR1cm4gWE1MX1RPS19TVEFSVF9UQUdfTk9fQVRUUzsKKyAgICBjYXNlIEJUX1NPTDoKKyAgICBz
b2w6CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICBpZiAocHRyID09IGVuZCkKKyAg
ICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgICAgIGlmICghQ0hBUl9NQVRDSEVTKGVu
YywgcHRyLCBBU0NJSV9HVCkpIHsKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAg
IHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgICAgICB9CisgICAgICAqbmV4dFRva1B0ciA9IHB0
ciArIE1JTkJQQyhlbmMpOworICAgICAgcmV0dXJuIFhNTF9UT0tfRU1QVFlfRUxFTUVOVF9OT19B
VFRTOworICAgIGRlZmF1bHQ6CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVy
biBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICB9CisgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7
Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKGNvbnRlbnRUb2spKGNvbnN0IEVOQ09E
SU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBpZiAocHRyID09IGVuZCkKKyAg
ICByZXR1cm4gWE1MX1RPS19OT05FOworICBpZiAoTUlOQlBDKGVuYykgPiAxKSB7CisgICAgc2l6
ZV90IG4gPSBlbmQgLSBwdHI7CisgICAgaWYgKG4gJiAoTUlOQlBDKGVuYykgLSAxKSkgeworICAg
ICAgbiAmPSB+KE1JTkJQQyhlbmMpIC0gMSk7CisgICAgICBpZiAobiA9PSAwKQorICAgICAgICBy
ZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgZW5kID0gcHRyICsgbjsKKyAgICB9CisgIH0K
KyAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgIGNhc2UgQlRfTFQ6CisgICAgcmV0
dXJuIFBSRUZJWChzY2FuTHQpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0
cik7CisgIGNhc2UgQlRfQU1QOgorICAgIHJldHVybiBQUkVGSVgoc2NhblJlZikoZW5jLCBwdHIg
KyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKKyAgY2FzZSBCVF9DUjoKKyAgICBwdHIg
Kz0gTUlOQlBDKGVuYyk7CisgICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICByZXR1cm4gWE1MX1RP
S19UUkFJTElOR19DUjsKKyAgICBpZiAoQllURV9UWVBFKGVuYywgcHRyKSA9PSBCVF9MRikKKyAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICByZXR1
cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7CisgIGNhc2UgQlRfTEY6CisgICAgKm5leHRUb2tQdHIg
PSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICByZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Cisg
IGNhc2UgQlRfUlNRQjoKKyAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgaWYgKHB0ciA9PSBl
bmQpCisgICAgICByZXR1cm4gWE1MX1RPS19UUkFJTElOR19SU1FCOworICAgIGlmICghQ0hBUl9N
QVRDSEVTKGVuYywgcHRyLCBBU0NJSV9SU1FCKSkKKyAgICAgIGJyZWFrOworICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKKyAgICBpZiAocHRyID09IGVuZCkKKyAgICAgIHJldHVybiBYTUxfVE9LX1RS
QUlMSU5HX1JTUUI7CisgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX0dUKSkg
eworICAgICAgcHRyIC09IE1JTkJQQyhlbmMpOworICAgICAgYnJlYWs7CisgICAgfQorICAgICpu
ZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7CisgIElOVkFMSURf
Q0FTRVMocHRyLCBuZXh0VG9rUHRyKQorICBkZWZhdWx0OgorICAgIHB0ciArPSBNSU5CUEMoZW5j
KTsKKyAgICBicmVhazsKKyAgfQorICB3aGlsZSAocHRyICE9IGVuZCkgeworICAgIHN3aXRjaCAo
QllURV9UWVBFKGVuYywgcHRyKSkgeworI2RlZmluZSBMRUFEX0NBU0UobikgXAorICAgIGNhc2Ug
QlRfTEVBRCAjIyBuOiBcCisgICAgICBpZiAoZW5kIC0gcHRyIDwgbiB8fCBJU19JTlZBTElEX0NI
QVIoZW5jLCBwdHIsIG4pKSB7IFwKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7IFwKKyAgICAg
ICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsgXAorICAgICAgfSBcCisgICAgICBwdHIgKz0g
bjsgXAorICAgICAgYnJlYWs7CisgICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgzKSBMRUFEX0NB
U0UoNCkKKyN1bmRlZiBMRUFEX0NBU0UKKyAgICBjYXNlIEJUX1JTUUI6CisgICAgICBpZiAocHRy
ICsgTUlOQlBDKGVuYykgIT0gZW5kKSB7CisgICAgICAgICBpZiAoIUNIQVJfTUFUQ0hFUyhlbmMs
IHB0ciArIE1JTkJQQyhlbmMpLCBBU0NJSV9SU1FCKSkgeworICAgICAgICAgICBwdHIgKz0gTUlO
QlBDKGVuYyk7CisgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgaWYgKHB0
ciArIDIqTUlOQlBDKGVuYykgIT0gZW5kKSB7CisgICAgICAgICAgIGlmICghQ0hBUl9NQVRDSEVT
KGVuYywgcHRyICsgMipNSU5CUEMoZW5jKSwgQVNDSUlfR1QpKSB7CisgICAgICAgICAgICAgcHRy
ICs9IE1JTkJQQyhlbmMpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisgICAg
ICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgMipNSU5CUEMoZW5jKTsKKyAgICAgICAgICAgcmV0
dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8qIGZhbGwg
dGhyb3VnaCAqLworICAgIGNhc2UgQlRfQU1QOgorICAgIGNhc2UgQlRfTFQ6CisgICAgY2FzZSBC
VF9OT05YTUw6CisgICAgY2FzZSBCVF9NQUxGT1JNOgorICAgIGNhc2UgQlRfVFJBSUw6CisgICAg
Y2FzZSBCVF9DUjoKKyAgICBjYXNlIEJUX0xGOgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Cisg
ICAgICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOworICAgIGRlZmF1bHQ6CisgICAgICBwdHIg
Kz0gTUlOQlBDKGVuYyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgKm5leHRUb2tQdHIg
PSBwdHI7CisgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Cit9CisKKy8qIHB0ciBwb2ludHMg
dG8gY2hhcmFjdGVyIGZvbGxvd2luZyAiJSIgKi8KKworc3RhdGljIGludCBQVFJDQUxMCitQUkVG
SVgoc2NhblBlcmNlbnQpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29u
c3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0
cikKK3sKKyAgaWYgKHB0ciA9PSBlbmQpCisgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAg
c3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgIENIRUNLX05NU1RSVF9DQVNFUyhlbmMs
IHB0ciwgZW5kLCBuZXh0VG9rUHRyKQorICBjYXNlIEJUX1M6IGNhc2UgQlRfTEY6IGNhc2UgQlRf
Q1I6IGNhc2UgQlRfUEVSQ05UOgorICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVybiBY
TUxfVE9LX1BFUkNFTlQ7CisgIGRlZmF1bHQ6CisgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAg
cmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgfQorICB3aGlsZSAocHRyICE9IGVuZCkgeworICAg
IHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgIENIRUNLX05BTUVfQ0FTRVMoZW5j
LCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAgICBjYXNlIEJUX1NFTUk6CisgICAgICAqbmV4dFRv
a1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSQU1fRU5U
SVRZX1JFRjsKKyAgICBkZWZhdWx0OgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICBy
ZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgIH0KKyAgfQorICByZXR1cm4gWE1MX1RPS19QQVJU
SUFMOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChzY2FuUG91bmROYW1lKShjb25z
dCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKK3sKKyAgaWYgKHB0ciA9
PSBlbmQpCisgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKKyAgc3dpdGNoIChCWVRFX1RZUEUo
ZW5jLCBwdHIpKSB7CisgIENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9r
UHRyKQorICBkZWZhdWx0OgorICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVybiBYTUxf
VE9LX0lOVkFMSUQ7CisgIH0KKyAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICBzd2l0Y2ggKEJZ
VEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBlbmQs
IG5leHRUb2tQdHIpCisgICAgY2FzZSBCVF9DUjogY2FzZSBCVF9MRjogY2FzZSBCVF9TOgorICAg
IGNhc2UgQlRfUlBBUjogY2FzZSBCVF9HVDogY2FzZSBCVF9QRVJDTlQ6IGNhc2UgQlRfVkVSQkFS
OgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19QT1VORF9O
QU1FOworICAgIGRlZmF1bHQ6CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVy
biBYTUxfVE9LX0lOVkFMSUQ7CisgICAgfQorICB9CisgIHJldHVybiAtWE1MX1RPS19QT1VORF9O
QU1FOworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChzY2FuTGl0KShpbnQgb3Blbiwg
Y29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNv
bnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0cikK
K3sKKyAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICBpbnQgdCA9IEJZVEVfVFlQRShlbmMsIHB0
cik7CisgICAgc3dpdGNoICh0KSB7CisgICAgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQdHIp
CisgICAgY2FzZSBCVF9RVU9UOgorICAgIGNhc2UgQlRfQVBPUzoKKyAgICAgIHB0ciArPSBNSU5C
UEMoZW5jKTsKKyAgICAgIGlmICh0ICE9IG9wZW4pCisgICAgICAgIGJyZWFrOworICAgICAgaWYg
KHB0ciA9PSBlbmQpCisgICAgICAgIHJldHVybiAtWE1MX1RPS19MSVRFUkFMOworICAgICAgKm5l
eHRUb2tQdHIgPSBwdHI7CisgICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAg
ICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9MRjoKKyAgICAgIGNhc2UgQlRfR1Q6
IGNhc2UgQlRfUEVSQ05UOiBjYXNlIEJUX0xTUUI6CisgICAgICAgIHJldHVybiBYTUxfVE9LX0xJ
VEVSQUw7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwor
ICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICBi
cmVhazsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKK30KKworc3RhdGlj
IGludCBQVFJDQUxMCitQUkVGSVgocHJvbG9nVG9rKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25z
dCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKipuZXh0VG9rUHRyKQoreworICBpbnQgdG9rOworICBpZiAocHRyID09IGVuZCkKKyAgICBy
ZXR1cm4gWE1MX1RPS19OT05FOworICBpZiAoTUlOQlBDKGVuYykgPiAxKSB7CisgICAgc2l6ZV90
IG4gPSBlbmQgLSBwdHI7CisgICAgaWYgKG4gJiAoTUlOQlBDKGVuYykgLSAxKSkgeworICAgICAg
biAmPSB+KE1JTkJQQyhlbmMpIC0gMSk7CisgICAgICBpZiAobiA9PSAwKQorICAgICAgICByZXR1
cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgZW5kID0gcHRyICsgbjsKKyAgICB9CisgIH0KKyAg
c3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7CisgIGNhc2UgQlRfUVVPVDoKKyAgICByZXR1
cm4gUFJFRklYKHNjYW5MaXQpKEJUX1FVT1QsIGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwg
bmV4dFRva1B0cik7CisgIGNhc2UgQlRfQVBPUzoKKyAgICByZXR1cm4gUFJFRklYKHNjYW5MaXQp
KEJUX0FQT1MsIGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7CisgIGNh
c2UgQlRfTFQ6CisgICAgeworICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgaWYgKHB0
ciA9PSBlbmQpCisgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICBzd2l0Y2gg
KEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICAgIGNhc2UgQlRfRVhDTDoKKyAgICAgICAgcmV0
dXJuIFBSRUZJWChzY2FuRGVjbCkoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9r
UHRyKTsKKyAgICAgIGNhc2UgQlRfUVVFU1Q6CisgICAgICAgIHJldHVybiBQUkVGSVgoc2NhblBp
KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOworICAgICAgY2FzZSBC
VF9OTVNUUlQ6CisgICAgICBjYXNlIEJUX0hFWDoKKyAgICAgIGNhc2UgQlRfTk9OQVNDSUk6Cisg
ICAgICBjYXNlIEJUX0xFQUQyOgorICAgICAgY2FzZSBCVF9MRUFEMzoKKyAgICAgIGNhc2UgQlRf
TEVBRDQ6CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyIC0gTUlOQlBDKGVuYyk7CisgICAgICAg
IHJldHVybiBYTUxfVE9LX0lOU1RBTkNFX1NUQVJUOworICAgICAgfQorICAgICAgKm5leHRUb2tQ
dHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgIH0KKyAgY2FzZSBC
VF9DUjoKKyAgICBpZiAocHRyICsgTUlOQlBDKGVuYykgPT0gZW5kKSB7CisgICAgICAqbmV4dFRv
a1B0ciA9IGVuZDsKKyAgICAgIC8qIGluZGljYXRlIHRoYXQgdGhpcyBtaWdodCBiZSBwYXJ0IG9m
IGEgQ1IvTEYgcGFpciAqLworICAgICAgcmV0dXJuIC1YTUxfVE9LX1BST0xPR19TOworICAgIH0K
KyAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgY2FzZSBCVF9TOiBjYXNlIEJUX0xGOgorICAgIGZv
ciAoOzspIHsKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGlmIChwdHIgPT0gZW5k
KQorICAgICAgICBicmVhazsKKyAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewor
ICAgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0xGOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
QlRfQ1I6CisgICAgICAgIC8qIGRvbid0IHNwbGl0IENSL0xGIHBhaXIgKi8KKyAgICAgICAgaWYg
KHB0ciArIE1JTkJQQyhlbmMpICE9IGVuZCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgLyog
ZmFsbCB0aHJvdWdoICovCisgICAgICBkZWZhdWx0OgorICAgICAgICAqbmV4dFRva1B0ciA9IHB0
cjsKKyAgICAgICAgcmV0dXJuIFhNTF9UT0tfUFJPTE9HX1M7CisgICAgICB9CisgICAgfQorICAg
ICpuZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVybiBYTUxfVE9LX1BST0xPR19TOworICBjYXNl
IEJUX1BFUkNOVDoKKyAgICByZXR1cm4gUFJFRklYKHNjYW5QZXJjZW50KShlbmMsIHB0ciArIE1J
TkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOworICBjYXNlIEJUX0NPTU1BOgorICAgICpuZXh0
VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7CisgICAgcmV0dXJuIFhNTF9UT0tfQ09NTUE7Cisg
IGNhc2UgQlRfTFNRQjoKKyAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAg
IHJldHVybiBYTUxfVE9LX09QRU5fQlJBQ0tFVDsKKyAgY2FzZSBCVF9SU1FCOgorICAgIHB0ciAr
PSBNSU5CUEMoZW5jKTsKKyAgICBpZiAocHRyID09IGVuZCkKKyAgICAgIHJldHVybiAtWE1MX1RP
S19DTE9TRV9CUkFDS0VUOworICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX1JT
UUIpKSB7CisgICAgICBpZiAocHRyICsgTUlOQlBDKGVuYykgPT0gZW5kKQorICAgICAgICByZXR1
cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciArIE1J
TkJQQyhlbmMpLCBBU0NJSV9HVCkpIHsKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyAyKk1J
TkJQQyhlbmMpOworICAgICAgICByZXR1cm4gWE1MX1RPS19DT05EX1NFQ1RfQ0xPU0U7CisgICAg
ICB9CisgICAgfQorICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgIHJldHVybiBYTUxfVE9LX0NM
T1NFX0JSQUNLRVQ7CisgIGNhc2UgQlRfTFBBUjoKKyAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1J
TkJQQyhlbmMpOworICAgIHJldHVybiBYTUxfVE9LX09QRU5fUEFSRU47CisgIGNhc2UgQlRfUlBB
UjoKKyAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgaWYgKHB0ciA9PSBlbmQpCisgICAgICBy
ZXR1cm4gLVhNTF9UT0tfQ0xPU0VfUEFSRU47CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBw
dHIpKSB7CisgICAgY2FzZSBCVF9BU1Q6CisgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQ
QyhlbmMpOworICAgICAgcmV0dXJuIFhNTF9UT0tfQ0xPU0VfUEFSRU5fQVNURVJJU0s7CisgICAg
Y2FzZSBCVF9RVUVTVDoKKyAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Cisg
ICAgICByZXR1cm4gWE1MX1RPS19DTE9TRV9QQVJFTl9RVUVTVElPTjsKKyAgICBjYXNlIEJUX1BM
VVM6CisgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAgICAgcmV0dXJu
IFhNTF9UT0tfQ0xPU0VfUEFSRU5fUExVUzsKKyAgICBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOiBj
YXNlIEJUX1M6CisgICAgY2FzZSBCVF9HVDogY2FzZSBCVF9DT01NQTogY2FzZSBCVF9WRVJCQVI6
CisgICAgY2FzZSBCVF9SUEFSOgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1
cm4gWE1MX1RPS19DTE9TRV9QQVJFTjsKKyAgICB9CisgICAgKm5leHRUb2tQdHIgPSBwdHI7Cisg
ICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgY2FzZSBCVF9WRVJCQVI6CisgICAgKm5leHRU
b2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICByZXR1cm4gWE1MX1RPS19PUjsKKyAgY2Fz
ZSBCVF9HVDoKKyAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAgIHJldHVy
biBYTUxfVE9LX0RFQ0xfQ0xPU0U7CisgIGNhc2UgQlRfTlVNOgorICAgIHJldHVybiBQUkVGSVgo
c2NhblBvdW5kTmFtZSkoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsK
KyNkZWZpbmUgTEVBRF9DQVNFKG4pIFwKKyAgY2FzZSBCVF9MRUFEICMjIG46IFwKKyAgICBpZiAo
ZW5kIC0gcHRyIDwgbikgXAorICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTF9DSEFSOyBcCisg
ICAgaWYgKElTX05NU1RSVF9DSEFSKGVuYywgcHRyLCBuKSkgeyBcCisgICAgICBwdHIgKz0gbjsg
XAorICAgICAgdG9rID0gWE1MX1RPS19OQU1FOyBcCisgICAgICBicmVhazsgXAorICAgIH0gXAor
ICAgIGlmIChJU19OQU1FX0NIQVIoZW5jLCBwdHIsIG4pKSB7IFwKKyAgICAgIHB0ciArPSBuOyBc
CisgICAgICB0b2sgPSBYTUxfVE9LX05NVE9LRU47IFwKKyAgICAgIGJyZWFrOyBcCisgICAgfSBc
CisgICAgKm5leHRUb2tQdHIgPSBwdHI7IFwKKyAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwor
ICAgIExFQURfQ0FTRSgyKSBMRUFEX0NBU0UoMykgTEVBRF9DQVNFKDQpCisjdW5kZWYgTEVBRF9D
QVNFCisgIGNhc2UgQlRfTk1TVFJUOgorICBjYXNlIEJUX0hFWDoKKyAgICB0b2sgPSBYTUxfVE9L
X05BTUU7CisgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgIGJyZWFrOworICBjYXNlIEJUX0RJ
R0lUOgorICBjYXNlIEJUX05BTUU6CisgIGNhc2UgQlRfTUlOVVM6CisjaWZkZWYgWE1MX05TCisg
IGNhc2UgQlRfQ09MT046CisjZW5kaWYKKyAgICB0b2sgPSBYTUxfVE9LX05NVE9LRU47CisgICAg
cHRyICs9IE1JTkJQQyhlbmMpOworICAgIGJyZWFrOworICBjYXNlIEJUX05PTkFTQ0lJOgorICAg
IGlmIChJU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwdHIpKSB7CisgICAgICBwdHIgKz0gTUlO
QlBDKGVuYyk7CisgICAgICB0b2sgPSBYTUxfVE9LX05BTUU7CisgICAgICBicmVhazsKKyAgICB9
CisgICAgaWYgKElTX05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBwdHIpKSB7CisgICAgICBwdHIgKz0g
TUlOQlBDKGVuYyk7CisgICAgICB0b2sgPSBYTUxfVE9LX05NVE9LRU47CisgICAgICBicmVhazsK
KyAgICB9CisgICAgLyogZmFsbCB0aHJvdWdoICovCisgIGRlZmF1bHQ6CisgICAgKm5leHRUb2tQ
dHIgPSBwdHI7CisgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgfQorICB3aGlsZSAocHRy
ICE9IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgIENIRUNL
X05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKKyAgICBjYXNlIEJUX0dUOiBj
YXNlIEJUX1JQQVI6IGNhc2UgQlRfQ09NTUE6CisgICAgY2FzZSBCVF9WRVJCQVI6IGNhc2UgQlRf
TFNRQjogY2FzZSBCVF9QRVJDTlQ6CisgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJU
X0xGOgorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gdG9rOworI2lmZGVm
IFhNTF9OUworICAgIGNhc2UgQlRfQ09MT046CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Cisg
ICAgICBzd2l0Y2ggKHRvaykgeworICAgICAgY2FzZSBYTUxfVE9LX05BTUU6CisgICAgICAgIGlm
IChwdHIgPT0gZW5kKQorICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7CisgICAgICAg
IHRvayA9IFhNTF9UT0tfUFJFRklYRURfTkFNRTsKKyAgICAgICAgc3dpdGNoIChCWVRFX1RZUEUo
ZW5jLCBwdHIpKSB7CisgICAgICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4
dFRva1B0cikKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB0b2sgPSBYTUxfVE9LX05NVE9L
RU47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIFhNTF9UT0tfUFJFRklYRURfTkFNRToKKyAgICAgICAgdG9rID0gWE1MX1RPS19OTVRPS0VO
OworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2Fz
ZSBCVF9QTFVTOgorICAgICAgaWYgKHRvayA9PSBYTUxfVE9LX05NVE9LRU4pICB7CisgICAgICAg
ICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAg
ICAgfQorICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgIHJldHVy
biBYTUxfVE9LX05BTUVfUExVUzsKKyAgICBjYXNlIEJUX0FTVDoKKyAgICAgIGlmICh0b2sgPT0g
WE1MX1RPS19OTVRPS0VOKSAgeworICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAg
cmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKKyAgICAgIH0KKyAgICAgICpuZXh0VG9rUHRyID0gcHRy
ICsgTUlOQlBDKGVuYyk7CisgICAgICByZXR1cm4gWE1MX1RPS19OQU1FX0FTVEVSSVNLOworICAg
IGNhc2UgQlRfUVVFU1Q6CisgICAgICBpZiAodG9rID09IFhNTF9UT0tfTk1UT0tFTikgIHsKKyAg
ICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7
CisgICAgICB9CisgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAgICAg
cmV0dXJuIFhNTF9UT0tfTkFNRV9RVUVTVElPTjsKKyAgICBkZWZhdWx0OgorICAgICAgKm5leHRU
b2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOworICAgIH0KKyAgfQor
ICByZXR1cm4gLXRvazsKK30KKworc3RhdGljIGludCBQVFJDQUxMCitQUkVGSVgoYXR0cmlidXRl
VmFsdWVUb2spKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0
cikKK3sKKyAgY29uc3QgY2hhciAqc3RhcnQ7CisgIGlmIChwdHIgPT0gZW5kKQorICAgIHJldHVy
biBYTUxfVE9LX05PTkU7CisgIHN0YXJ0ID0gcHRyOworICB3aGlsZSAocHRyICE9IGVuZCkgewor
ICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworI2RlZmluZSBMRUFEX0NBU0Uobikg
XAorICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBwdHIgKz0gbjsgYnJlYWs7CisgICAgTEVBRF9DQVNF
KDIpIExFQURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKKyN1bmRlZiBMRUFEX0NBU0UKKyAgICBjYXNl
IEJUX0FNUDoKKyAgICAgIGlmIChwdHIgPT0gc3RhcnQpCisgICAgICAgIHJldHVybiBQUkVGSVgo
c2NhblJlZikoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKKyAgICAg
ICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKKyAg
ICBjYXNlIEJUX0xUOgorICAgICAgLyogdGhpcyBpcyBmb3IgaW5zaWRlIGVudGl0eSByZWZlcmVu
Y2VzICovCisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0lO
VkFMSUQ7CisgICAgY2FzZSBCVF9MRjoKKyAgICAgIGlmIChwdHIgPT0gc3RhcnQpIHsKKyAgICAg
ICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAgICAgcmV0dXJuIFhNTF9U
T0tfREFUQV9ORVdMSU5FOworICAgICAgfQorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAg
ICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOworICAgIGNhc2UgQlRfQ1I6CisgICAgICBpZiAo
cHRyID09IHN0YXJ0KSB7CisgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgICAgaWYg
KHB0ciA9PSBlbmQpCisgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfVFJBSUxJTkdfQ1I7CisgICAg
ICAgIGlmIChCWVRFX1RZUEUoZW5jLCBwdHIpID09IEJUX0xGKQorICAgICAgICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKKyAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICAgIHJldHVybiBY
TUxfVE9LX0RBVEFfTkVXTElORTsKKyAgICAgIH0KKyAgICAgICpuZXh0VG9rUHRyID0gcHRyOwor
ICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKKyAgICBjYXNlIEJUX1M6CisgICAgICBp
ZiAocHRyID09IHN0YXJ0KSB7CisgICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVu
Yyk7CisgICAgICAgIHJldHVybiBYTUxfVE9LX0FUVFJJQlVURV9WQUxVRV9TOworICAgICAgfQor
ICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAgICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJT
OworICAgIGRlZmF1bHQ6CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICBicmVhazsK
KyAgICB9CisgIH0KKyAgKm5leHRUb2tQdHIgPSBwdHI7CisgIHJldHVybiBYTUxfVE9LX0RBVEFf
Q0hBUlM7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKGVudGl0eVZhbHVlVG9rKShj
b25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCit7CisgIGNvbnN0
IGNoYXIgKnN0YXJ0OworICBpZiAocHRyID09IGVuZCkKKyAgICByZXR1cm4gWE1MX1RPS19OT05F
OworICBzdGFydCA9IHB0cjsKKyAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICBzd2l0Y2ggKEJZ
VEVfVFlQRShlbmMsIHB0cikpIHsKKyNkZWZpbmUgTEVBRF9DQVNFKG4pIFwKKyAgICBjYXNlIEJU
X0xFQUQgIyMgbjogcHRyICs9IG47IGJyZWFrOworICAgIExFQURfQ0FTRSgyKSBMRUFEX0NBU0Uo
MykgTEVBRF9DQVNFKDQpCisjdW5kZWYgTEVBRF9DQVNFCisgICAgY2FzZSBCVF9BTVA6CisgICAg
ICBpZiAocHRyID09IHN0YXJ0KQorICAgICAgICByZXR1cm4gUFJFRklYKHNjYW5SZWYpKGVuYywg
cHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7CisgICAgICAqbmV4dFRva1B0ciA9
IHB0cjsKKyAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7CisgICAgY2FzZSBCVF9QRVJD
TlQ6CisgICAgICBpZiAocHRyID09IHN0YXJ0KSB7CisgICAgICAgIGludCB0b2sgPSAgUFJFRklY
KHNjYW5QZXJjZW50KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kLCBuZXh0VG9rUHRyKTsKKyAgICAgICAgcmV0dXJuICh0
b2sgPT0gWE1MX1RPS19QRVJDRU5UKSA/IFhNTF9UT0tfSU5WQUxJRCA6IHRvazsKKyAgICAgIH0K
KyAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFS
UzsKKyAgICBjYXNlIEJUX0xGOgorICAgICAgaWYgKHB0ciA9PSBzdGFydCkgeworICAgICAgICAq
bmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOworICAgICAgICByZXR1cm4gWE1MX1RPS19E
QVRBX05FV0xJTkU7CisgICAgICB9CisgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgIHJl
dHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7CisgICAgY2FzZSBCVF9DUjoKKyAgICAgIGlmIChwdHIg
PT0gc3RhcnQpIHsKKyAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICBpZiAocHRy
ID09IGVuZCkKKyAgICAgICAgICByZXR1cm4gWE1MX1RPS19UUkFJTElOR19DUjsKKyAgICAgICAg
aWYgKEJZVEVfVFlQRShlbmMsIHB0cikgPT0gQlRfTEYpCisgICAgICAgICAgcHRyICs9IE1JTkJQ
QyhlbmMpOworICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKKyAgICAgICAgcmV0dXJuIFhNTF9U
T0tfREFUQV9ORVdMSU5FOworICAgICAgfQorICAgICAgKm5leHRUb2tQdHIgPSBwdHI7CisgICAg
ICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOworICAgIGRlZmF1bHQ6CisgICAgICBwdHIgKz0g
TUlOQlBDKGVuYyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgKm5leHRUb2tQdHIgPSBw
dHI7CisgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Cit9CisKKyNpZmRlZiBYTUxfRFRECisK
K3N0YXRpYyBpbnQgUFRSQ0FMTAorUFJFRklYKGlnbm9yZVNlY3Rpb25Ub2spKGNvbnN0IEVOQ09E
SU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQoreworICBpbnQgbGV2ZWwgPSAw
OworICBpZiAoTUlOQlBDKGVuYykgPiAxKSB7CisgICAgc2l6ZV90IG4gPSBlbmQgLSBwdHI7Cisg
ICAgaWYgKG4gJiAoTUlOQlBDKGVuYykgLSAxKSkgeworICAgICAgbiAmPSB+KE1JTkJQQyhlbmMp
IC0gMSk7CisgICAgICBlbmQgPSBwdHIgKyBuOworICAgIH0KKyAgfQorICB3aGlsZSAocHRyICE9
IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgIElOVkFMSURf
Q0FTRVMocHRyLCBuZXh0VG9rUHRyKQorICAgIGNhc2UgQlRfTFQ6CisgICAgICBpZiAoKHB0ciAr
PSBNSU5CUEMoZW5jKSkgPT0gZW5kKQorICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwor
ICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfRVhDTCkpIHsKKyAgICAgICAg
aWYgKChwdHIgKz0gTUlOQlBDKGVuYykpID09IGVuZCkKKyAgICAgICAgICByZXR1cm4gWE1MX1RP
S19QQVJUSUFMOworICAgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9MU1FC
KSkgeworICAgICAgICAgICsrbGV2ZWw7CisgICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEJUX1JTUUI6CisgICAg
ICBpZiAoKHB0ciArPSBNSU5CUEMoZW5jKSkgPT0gZW5kKQorICAgICAgICByZXR1cm4gWE1MX1RP
S19QQVJUSUFMOworICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfUlNRQikp
IHsKKyAgICAgICAgaWYgKChwdHIgKz0gTUlOQlBDKGVuYykpID09IGVuZCkKKyAgICAgICAgICBy
ZXR1cm4gWE1MX1RPS19QQVJUSUFMOworICAgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRy
LCBBU0NJSV9HVCkpIHsKKyAgICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgICAg
aWYgKGxldmVsID09IDApIHsKKyAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOworICAgICAg
ICAgICAgcmV0dXJuIFhNTF9UT0tfSUdOT1JFX1NFQ1Q7CisgICAgICAgICAgfQorICAgICAgICAg
IC0tbGV2ZWw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKK30KKworI2VuZGlmIC8qIFhNTF9EVEQgKi8KKworc3Rh
dGljIGludCBQVFJDQUxMCitQUkVGSVgoaXNQdWJsaWNJZCkoY29uc3QgRU5DT0RJTkcgKmVuYywg
Y29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqKmJhZFB0cikKK3sKKyAgcHRyICs9IE1JTkJQQyhlbmMpOworICBlbmQgLT0gTUlO
QlBDKGVuYyk7CisgIGZvciAoOyBwdHIgIT0gZW5kOyBwdHIgKz0gTUlOQlBDKGVuYykpIHsKKyAg
ICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKKyAgICBjYXNlIEJUX0RJR0lUOgorICAg
IGNhc2UgQlRfSEVYOgorICAgIGNhc2UgQlRfTUlOVVM6CisgICAgY2FzZSBCVF9BUE9TOgorICAg
IGNhc2UgQlRfTFBBUjoKKyAgICBjYXNlIEJUX1JQQVI6CisgICAgY2FzZSBCVF9QTFVTOgorICAg
IGNhc2UgQlRfQ09NTUE6CisgICAgY2FzZSBCVF9TT0w6CisgICAgY2FzZSBCVF9FUVVBTFM6Cisg
ICAgY2FzZSBCVF9RVUVTVDoKKyAgICBjYXNlIEJUX0NSOgorICAgIGNhc2UgQlRfTEY6CisgICAg
Y2FzZSBCVF9TRU1JOgorICAgIGNhc2UgQlRfRVhDTDoKKyAgICBjYXNlIEJUX0FTVDoKKyAgICBj
YXNlIEJUX1BFUkNOVDoKKyAgICBjYXNlIEJUX05VTToKKyNpZmRlZiBYTUxfTlMKKyAgICBjYXNl
IEJUX0NPTE9OOgorI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlIEJUX1M6CisgICAgICBp
ZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9UQUIpKSB7CisgICAgICAgICpiYWRQdHIg
PSBwdHI7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBCVF9OQU1FOgorICAgIGNhc2UgQlRfTk1TVFJUOgorICAgICAgaWYgKCEoQllURV9UT19BU0NJ
SShlbmMsIHB0cikgJiB+MHg3ZikpCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICBzd2l0Y2ggKEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIpKSB7CisgICAgICBjYXNlIDB4MjQ6IC8q
ICQgKi8KKyAgICAgIGNhc2UgMHg0MDogLyogQCAqLworICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICpiYWRQdHIgPSBwdHI7CisgICAgICAgIHJldHVybiAwOworICAgICAg
fQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCisvKiBUaGlzIG11
c3Qgb25seSBiZSBjYWxsZWQgZm9yIGEgd2VsbC1mb3JtZWQgc3RhcnQtdGFnIG9yIGVtcHR5Cisg
ICBlbGVtZW50IHRhZy4gIFJldHVybnMgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzLiAgUG9pbnRl
cnMgdG8gdGhlCisgICBmaXJzdCBhdHRzTWF4IGF0dHJpYnV0ZXMgYXJlIHN0b3JlZCBpbiBhdHRz
LgorKi8KKworc3RhdGljIGludCBQVFJDQUxMCitQUkVGSVgoZ2V0QXR0cykoY29uc3QgRU5DT0RJ
TkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgIGludCBhdHRzTWF4LCBB
VFRSSUJVVEUgKmF0dHMpCit7CisgIGVudW0geyBvdGhlciwgaW5OYW1lLCBpblZhbHVlIH0gc3Rh
dGUgPSBpbk5hbWU7CisgIGludCBuQXR0cyA9IDA7CisgIGludCBvcGVuID0gMDsgLyogZGVmaW5l
ZCB3aGVuIHN0YXRlID09IGluVmFsdWU7CisgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRp
b24ganVzdCB0byBzaHV0IHVwIGNvbXBpbGVycyAqLworCisgIGZvciAocHRyICs9IE1JTkJQQyhl
bmMpOzsgcHRyICs9IE1JTkJQQyhlbmMpKSB7CisgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBw
dHIpKSB7CisjZGVmaW5lIFNUQVJUX05BTUUgXAorICAgICAgaWYgKHN0YXRlID09IG90aGVyKSB7
IFwKKyAgICAgICAgaWYgKG5BdHRzIDwgYXR0c01heCkgeyBcCisgICAgICAgICAgYXR0c1tuQXR0
c10ubmFtZSA9IHB0cjsgXAorICAgICAgICAgIGF0dHNbbkF0dHNdLm5vcm1hbGl6ZWQgPSAxOyBc
CisgICAgICAgIH0gXAorICAgICAgICBzdGF0ZSA9IGluTmFtZTsgXAorICAgICAgfQorI2RlZmlu
ZSBMRUFEX0NBU0UobikgXAorICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBTVEFSVF9OQU1FIHB0ciAr
PSAobiAtIE1JTkJQQyhlbmMpKTsgYnJlYWs7CisgICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgz
KSBMRUFEX0NBU0UoNCkKKyN1bmRlZiBMRUFEX0NBU0UKKyAgICBjYXNlIEJUX05PTkFTQ0lJOgor
ICAgIGNhc2UgQlRfTk1TVFJUOgorICAgIGNhc2UgQlRfSEVYOgorICAgICAgU1RBUlRfTkFNRQor
ICAgICAgYnJlYWs7CisjdW5kZWYgU1RBUlRfTkFNRQorICAgIGNhc2UgQlRfUVVPVDoKKyAgICAg
IGlmIChzdGF0ZSAhPSBpblZhbHVlKSB7CisgICAgICAgIGlmIChuQXR0cyA8IGF0dHNNYXgpCisg
ICAgICAgICAgYXR0c1tuQXR0c10udmFsdWVQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKKyAgICAg
ICAgc3RhdGUgPSBpblZhbHVlOworICAgICAgICBvcGVuID0gQlRfUVVPVDsKKyAgICAgIH0KKyAg
ICAgIGVsc2UgaWYgKG9wZW4gPT0gQlRfUVVPVCkgeworICAgICAgICBzdGF0ZSA9IG90aGVyOwor
ICAgICAgICBpZiAobkF0dHMgPCBhdHRzTWF4KQorICAgICAgICAgIGF0dHNbbkF0dHNdLnZhbHVl
RW5kID0gcHRyOworICAgICAgICBuQXR0cysrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAg
Y2FzZSBCVF9BUE9TOgorICAgICAgaWYgKHN0YXRlICE9IGluVmFsdWUpIHsKKyAgICAgICAgaWYg
KG5BdHRzIDwgYXR0c01heCkKKyAgICAgICAgICBhdHRzW25BdHRzXS52YWx1ZVB0ciA9IHB0ciAr
IE1JTkJQQyhlbmMpOworICAgICAgICBzdGF0ZSA9IGluVmFsdWU7CisgICAgICAgIG9wZW4gPSBC
VF9BUE9TOworICAgICAgfQorICAgICAgZWxzZSBpZiAob3BlbiA9PSBCVF9BUE9TKSB7CisgICAg
ICAgIHN0YXRlID0gb3RoZXI7CisgICAgICAgIGlmIChuQXR0cyA8IGF0dHNNYXgpCisgICAgICAg
ICAgYXR0c1tuQXR0c10udmFsdWVFbmQgPSBwdHI7CisgICAgICAgIG5BdHRzKys7CisgICAgICB9
CisgICAgICBicmVhazsKKyAgICBjYXNlIEJUX0FNUDoKKyAgICAgIGlmIChuQXR0cyA8IGF0dHNN
YXgpCisgICAgICAgIGF0dHNbbkF0dHNdLm5vcm1hbGl6ZWQgPSAwOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBCVF9TOgorICAgICAgaWYgKHN0YXRlID09IGluTmFtZSkKKyAgICAgICAgc3RhdGUg
PSBvdGhlcjsKKyAgICAgIGVsc2UgaWYgKHN0YXRlID09IGluVmFsdWUKKyAgICAgICAgICAgICAg
ICYmIG5BdHRzIDwgYXR0c01heAorICAgICAgICAgICAgICAgJiYgYXR0c1tuQXR0c10ubm9ybWFs
aXplZAorICAgICAgICAgICAgICAgJiYgKHB0ciA9PSBhdHRzW25BdHRzXS52YWx1ZVB0cgorICAg
ICAgICAgICAgICAgICAgIHx8IEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIpICE9IEFTQ0lJX1NQQUNF
CisgICAgICAgICAgICAgICAgICAgfHwgQllURV9UT19BU0NJSShlbmMsIHB0ciArIE1JTkJQQyhl
bmMpKSA9PSBBU0NJSV9TUEFDRQorICAgICAgICAgICAgICAgICAgIHx8IEJZVEVfVFlQRShlbmMs
IHB0ciArIE1JTkJQQyhlbmMpKSA9PSBvcGVuKSkKKyAgICAgICAgYXR0c1tuQXR0c10ubm9ybWFs
aXplZCA9IDA7CisgICAgICBicmVhazsKKyAgICBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgorICAg
ICAgLyogVGhpcyBjYXNlIGVuc3VyZXMgdGhhdCB0aGUgZmlyc3QgYXR0cmlidXRlIG5hbWUgaXMg
Y291bnRlZAorICAgICAgICAgQXBhcnQgZnJvbSB0aGF0IHdlIGNvdWxkIGp1c3QgY2hhbmdlIHN0
YXRlIG9uIHRoZSBxdW90ZS4gKi8KKyAgICAgIGlmIChzdGF0ZSA9PSBpbk5hbWUpCisgICAgICAg
IHN0YXRlID0gb3RoZXI7CisgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBpblZhbHVlICYmIG5BdHRz
IDwgYXR0c01heCkKKyAgICAgICAgYXR0c1tuQXR0c10ubm9ybWFsaXplZCA9IDA7CisgICAgICBi
cmVhazsKKyAgICBjYXNlIEJUX0dUOgorICAgIGNhc2UgQlRfU09MOgorICAgICAgaWYgKHN0YXRl
ICE9IGluVmFsdWUpCisgICAgICAgIHJldHVybiBuQXR0czsKKyAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgLyogbm90IHJlYWNoZWQgKi8KK30K
Kworc3RhdGljIGludCBQVFJGQVNUQ0FMTAorUFJFRklYKGNoYXJSZWZOdW1iZXIpKGNvbnN0IEVO
Q09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0cikKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisgIC8q
IHNraXAgJiMgKi8KKyAgcHRyICs9IDIqTUlOQlBDKGVuYyk7CisgIGlmIChDSEFSX01BVENIRVMo
ZW5jLCBwdHIsIEFTQ0lJX3gpKSB7CisgICAgZm9yIChwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAg
ICAgICAhQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9TRU1JKTsKKyAgICAgICAgIHB0ciAr
PSBNSU5CUEMoZW5jKSkgeworICAgICAgaW50IGMgPSBCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKTsK
KyAgICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSBBU0NJSV8wOiBjYXNlIEFTQ0lJXzE6IGNh
c2UgQVNDSUlfMjogY2FzZSBBU0NJSV8zOiBjYXNlIEFTQ0lJXzQ6CisgICAgICBjYXNlIEFTQ0lJ
XzU6IGNhc2UgQVNDSUlfNjogY2FzZSBBU0NJSV83OiBjYXNlIEFTQ0lJXzg6IGNhc2UgQVNDSUlf
OToKKyAgICAgICAgcmVzdWx0IDw8PSA0OworICAgICAgICByZXN1bHQgfD0gKGMgLSBBU0NJSV8w
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEFTQ0lJX0E6IGNhc2UgQVNDSUlfQjogY2Fz
ZSBBU0NJSV9DOgorICAgICAgY2FzZSBBU0NJSV9EOiBjYXNlIEFTQ0lJX0U6IGNhc2UgQVNDSUlf
RjoKKyAgICAgICAgcmVzdWx0IDw8PSA0OworICAgICAgICByZXN1bHQgKz0gMTAgKyAoYyAtIEFT
Q0lJX0EpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQVNDSUlfYTogY2FzZSBBU0NJSV9i
OiBjYXNlIEFTQ0lJX2M6CisgICAgICBjYXNlIEFTQ0lJX2Q6IGNhc2UgQVNDSUlfZTogY2FzZSBB
U0NJSV9mOgorICAgICAgICByZXN1bHQgPDw9IDQ7CisgICAgICAgIHJlc3VsdCArPSAxMCArIChj
IC0gQVNDSUlfYSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYgKHJlc3VsdCA+
PSAweDExMDAwMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAg
ICBmb3IgKDsgIUNIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfU0VNSSk7IHB0ciArPSBNSU5C
UEMoZW5jKSkgeworICAgICAgaW50IGMgPSBCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKTsKKyAgICAg
IHJlc3VsdCAqPSAxMDsKKyAgICAgIHJlc3VsdCArPSAoYyAtIEFTQ0lJXzApOworICAgICAgaWYg
KHJlc3VsdCA+PSAweDExMDAwMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICBy
ZXR1cm4gY2hlY2tDaGFyUmVmTnVtYmVyKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgUFRSQ0FM
TAorUFJFRklYKHByZWRlZmluZWRFbnRpdHlOYW1lKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25z
dCBjaGFyICpwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCkKK3sKKyAgc3dpdGNoICgoZW5kIC0gcHRyKS9NSU5CUEMoZW5jKSkgeworICBjYXNlIDI6Cisg
ICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBBU0NJSV90KSkgewor
ICAgICAgc3dpdGNoIChCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKSkgeworICAgICAgY2FzZSBBU0NJ
SV9sOgorICAgICAgICByZXR1cm4gQVNDSUlfTFQ7CisgICAgICBjYXNlIEFTQ0lJX2c6CisgICAg
ICAgIHJldHVybiBBU0NJSV9HVDsKKyAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2Ug
MzoKKyAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9hKSkgeworICAgICAgcHRy
ICs9IE1JTkJQQyhlbmMpOworICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlf
bSkpIHsKKyAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICBpZiAoQ0hBUl9NQVRD
SEVTKGVuYywgcHRyLCBBU0NJSV9wKSkKKyAgICAgICAgICByZXR1cm4gQVNDSUlfQU1QOworICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSA0OgorICAgIHN3aXRjaCAoQllURV9UT19B
U0NJSShlbmMsIHB0cikpIHsKKyAgICBjYXNlIEFTQ0lJX3E6CisgICAgICBwdHIgKz0gTUlOQlBD
KGVuYyk7CisgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV91KSkgeworICAg
ICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBw
dHIsIEFTQ0lJX28pKSB7CisgICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOworICAgICAgICAg
IGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX3QpKQorICAgICAgICAgICAgcmV0dXJu
IEFTQ0lJX1FVT1Q7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2Ug
QVNDSUlfYToKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGlmIChDSEFSX01BVENI
RVMoZW5jLCBwdHIsIEFTQ0lJX3ApKSB7CisgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAg
ICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfbykpIHsKKyAgICAgICAgICBw
dHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwg
QVNDSUlfcykpCisgICAgICAgICAgICByZXR1cm4gQVNDSUlfQVBPUzsKKyAgICAgICAgfQorICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMg
aW50IFBUUkNBTEwKK1BSRUZJWChzYW1lTmFtZSkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3Qg
Y2hhciAqcHRyMSwgY29uc3QgY2hhciAqcHRyMikKK3sKKyAgZm9yICg7OykgeworICAgIHN3aXRj
aCAoQllURV9UWVBFKGVuYywgcHRyMSkpIHsKKyNkZWZpbmUgTEVBRF9DQVNFKG4pIFwKKyAgICBj
YXNlIEJUX0xFQUQgIyMgbjogXAorICAgICAgaWYgKCpwdHIxKysgIT0gKnB0cjIrKykgXAorICAg
ICAgICByZXR1cm4gMDsKKyAgICBMRUFEX0NBU0UoNCkgTEVBRF9DQVNFKDMpIExFQURfQ0FTRSgy
KQorI3VuZGVmIExFQURfQ0FTRQorICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICBpZiAo
KnB0cjErKyAhPSAqcHRyMisrKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgQlRfTk9OQVNDSUk6CisgICAgY2FzZSBCVF9OTVNUUlQ6CisjaWZkZWYgWE1MX05TCisg
ICAgY2FzZSBCVF9DT0xPTjoKKyNlbmRpZgorICAgIGNhc2UgQlRfSEVYOgorICAgIGNhc2UgQlRf
RElHSVQ6CisgICAgY2FzZSBCVF9OQU1FOgorICAgIGNhc2UgQlRfTUlOVVM6CisgICAgICBpZiAo
KnB0cjIrKyAhPSAqcHRyMSsrKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGlmIChNSU5CUEMo
ZW5jKSA+IDEpIHsKKyAgICAgICAgaWYgKCpwdHIyKysgIT0gKnB0cjErKykKKyAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKE1JTkJQQyhlbmMpID4gMikgeworICAgICAgICAgIGlmICgq
cHRyMisrICE9ICpwdHIxKyspCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBpZiAo
TUlOQlBDKGVuYykgPiAzKSB7CisgICAgICAgICAgICBpZiAoKnB0cjIrKyAhPSAqcHRyMSsrKQor
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBpZiAoTUlOQlBDKGVuYykgPT0gMSAm
JiAqcHRyMSA9PSAqcHRyMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBzd2l0Y2ggKEJZVEVf
VFlQRShlbmMsIHB0cjIpKSB7CisgICAgICBjYXNlIEJUX0xFQUQyOgorICAgICAgY2FzZSBCVF9M
RUFEMzoKKyAgICAgIGNhc2UgQlRfTEVBRDQ6CisgICAgICBjYXNlIEJUX05PTkFTQ0lJOgorICAg
ICAgY2FzZSBCVF9OTVNUUlQ6CisjaWZkZWYgWE1MX05TCisgICAgICBjYXNlIEJUX0NPTE9OOgor
I2VuZGlmCisgICAgICBjYXNlIEJUX0hFWDoKKyAgICAgIGNhc2UgQlRfRElHSVQ6CisgICAgICBj
YXNlIEJUX05BTUU6CisgICAgICBjYXNlIEJUX01JTlVTOgorICAgICAgICByZXR1cm4gMDsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKyAgfQorICAv
KiBub3QgcmVhY2hlZCAqLworfQorCitzdGF0aWMgaW50IFBUUkNBTEwKK1BSRUZJWChuYW1lTWF0
Y2hlc0FzY2lpKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIxLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZDEsIGNvbnN0IGNoYXIgKnB0cjIpCit7
CisgIGZvciAoOyAqcHRyMjsgcHRyMSArPSBNSU5CUEMoZW5jKSwgcHRyMisrKSB7CisgICAgaWYg
KHB0cjEgPT0gZW5kMSkKKyAgICAgIHJldHVybiAwOworICAgIGlmICghQ0hBUl9NQVRDSEVTKGVu
YywgcHRyMSwgKnB0cjIpKQorICAgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIHB0cjEgPT0g
ZW5kMTsKK30KKworc3RhdGljIGludCBQVFJGQVNUQ0FMTAorUFJFRklYKG5hbWVMZW5ndGgpKGNv
bnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0cikKK3sKKyAgY29uc3QgY2hhciAqc3Rh
cnQgPSBwdHI7CisgIGZvciAoOzspIHsKKyAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikp
IHsKKyNkZWZpbmUgTEVBRF9DQVNFKG4pIFwKKyAgICBjYXNlIEJUX0xFQUQgIyMgbjogcHRyICs9
IG47IGJyZWFrOworICAgIExFQURfQ0FTRSgyKSBMRUFEX0NBU0UoMykgTEVBRF9DQVNFKDQpCisj
dW5kZWYgTEVBRF9DQVNFCisgICAgY2FzZSBCVF9OT05BU0NJSToKKyAgICBjYXNlIEJUX05NU1RS
VDoKKyNpZmRlZiBYTUxfTlMKKyAgICBjYXNlIEJUX0NPTE9OOgorI2VuZGlmCisgICAgY2FzZSBC
VF9IRVg6CisgICAgY2FzZSBCVF9ESUdJVDoKKyAgICBjYXNlIEJUX05BTUU6CisgICAgY2FzZSBC
VF9NSU5VUzoKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICByZXR1cm4gKGludCkocHRyIC0gc3RhcnQpOworICAgIH0KKyAgfQorfQor
CitzdGF0aWMgY29uc3QgY2hhciAqIFBUUkZBU1RDQUxMCitQUkVGSVgoc2tpcFMpKGNvbnN0IEVO
Q09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0cikKK3sKKyAgZm9yICg7OykgeworICAgIHN3aXRj
aCAoQllURV9UWVBFKGVuYywgcHRyKSkgeworICAgIGNhc2UgQlRfTEY6CisgICAgY2FzZSBCVF9D
UjoKKyAgICBjYXNlIEJUX1M6CisgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7CisgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisgIH0KK30KKworc3Rh
dGljIHZvaWQgUFRSQ0FMTAorUFJFRklYKHVwZGF0ZVBvc2l0aW9uKShjb25zdCBFTkNPRElORyAq
ZW5jLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgUE9T
SVRJT04gKnBvcykKK3sKKyAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAgIHN3aXRjaCAoQllURV9U
WVBFKGVuYywgcHRyKSkgeworI2RlZmluZSBMRUFEX0NBU0UobikgXAorICAgIGNhc2UgQlRfTEVB
RCAjIyBuOiBcCisgICAgICBwdHIgKz0gbjsgXAorICAgICAgYnJlYWs7CisgICAgTEVBRF9DQVNF
KDIpIExFQURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKKyN1bmRlZiBMRUFEX0NBU0UKKyAgICBjYXNl
IEJUX0xGOgorICAgICAgcG9zLT5jb2x1bW5OdW1iZXIgPSAoWE1MX1NpemUpLTE7CisgICAgICBw
b3MtPmxpbmVOdW1iZXIrKzsKKyAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgQlRfQ1I6CisgICAgICBwb3MtPmxpbmVOdW1iZXIrKzsKKyAgICAgIHB0ciAr
PSBNSU5CUEMoZW5jKTsKKyAgICAgIGlmIChwdHIgIT0gZW5kICYmIEJZVEVfVFlQRShlbmMsIHB0
cikgPT0gQlRfTEYpCisgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIHBvcy0+Y29s
dW1uTnVtYmVyID0gKFhNTF9TaXplKS0xOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBwb3MtPmNv
bHVtbk51bWJlcisrOworICB9Cit9CisKKyN1bmRlZiBET19MRUFEX0NBU0UKKyN1bmRlZiBNVUxU
SUJZVEVfQ0FTRVMKKyN1bmRlZiBJTlZBTElEX0NBU0VTCisjdW5kZWYgQ0hFQ0tfTkFNRV9DQVNF
CisjdW5kZWYgQ0hFQ0tfTkFNRV9DQVNFUworI3VuZGVmIENIRUNLX05NU1RSVF9DQVNFCisjdW5k
ZWYgQ0hFQ0tfTk1TVFJUX0NBU0VTCisKKyNlbmRpZiAvKiBYTUxfVE9LX0lNUExfQyAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9l
eHBhdC9maWxlcy9saWIveG1sdG9rX2ltcGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHRva19pbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGEwZWE2MGE2NTdkNjYwNzcwODc4ODA0ZTM5NjI0MjZlODRkNThlZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
ZXhwYXQvZmlsZXMvbGliL3htbHRva19pbXBsLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKK0NvcHly
aWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQK
K1NlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCisqLworCitlbnVt
IHsKKyAgQlRfTk9OWE1MLAorICBCVF9NQUxGT1JNLAorICBCVF9MVCwKKyAgQlRfQU1QLAorICBC
VF9SU1FCLAorICBCVF9MRUFEMiwKKyAgQlRfTEVBRDMsCisgIEJUX0xFQUQ0LAorICBCVF9UUkFJ
TCwKKyAgQlRfQ1IsCisgIEJUX0xGLAorICBCVF9HVCwKKyAgQlRfUVVPVCwKKyAgQlRfQVBPUywK
KyAgQlRfRVFVQUxTLAorICBCVF9RVUVTVCwKKyAgQlRfRVhDTCwKKyAgQlRfU09MLAorICBCVF9T
RU1JLAorICBCVF9OVU0sCisgIEJUX0xTUUIsCisgIEJUX1MsCisgIEJUX05NU1RSVCwKKyAgQlRf
Q09MT04sCisgIEJUX0hFWCwKKyAgQlRfRElHSVQsCisgIEJUX05BTUUsCisgIEJUX01JTlVTLAor
ICBCVF9PVEhFUiwgLyoga25vd24gbm90IHRvIGJlIGEgbmFtZSBvciBuYW1lIHN0YXJ0IGNoYXJh
Y3RlciAqLworICBCVF9OT05BU0NJSSwgLyogbWlnaHQgYmUgYSBuYW1lIG9yIG5hbWUgc3RhcnQg
Y2hhcmFjdGVyICovCisgIEJUX1BFUkNOVCwKKyAgQlRfTFBBUiwKKyAgQlRfUlBBUiwKKyAgQlRf
QVNULAorICBCVF9QTFVTLAorICBCVF9DT01NQSwKKyAgQlRfVkVSQkFSCit9OworCisjaW5jbHVk
ZSA8c3RkZGVmLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2tfbnMuYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHRv
a19ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmMzYjg4ZmRmNGUzZWVjMzFhZjg2NmVmN2FiYTA1ODhkOWQ3NjE0
ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2tfbnMuYwpAQCAtMCwwICsxLDExNSBA
QAorLyogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUg
Q2VudGVyIEx0ZAorICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lv
bi4KKyovCisKKy8qIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCEgKi8KKyNpZmRlZiBYTUxfVE9LX05T
X0MKKworY29uc3QgRU5DT0RJTkcgKgorTlMoWG1sR2V0VXRmOEludGVybmFsRW5jb2RpbmcpKHZv
aWQpCit7CisgIHJldHVybiAmbnMoaW50ZXJuYWxfdXRmOF9lbmNvZGluZykuZW5jOworfQorCitj
b25zdCBFTkNPRElORyAqCitOUyhYbWxHZXRVdGYxNkludGVybmFsRW5jb2RpbmcpKHZvaWQpCit7
CisjaWYgQllURU9SREVSID09IDEyMzQKKyAgcmV0dXJuICZucyhpbnRlcm5hbF9saXR0bGUyX2Vu
Y29kaW5nKS5lbmM7CisjZWxpZiBCWVRFT1JERVIgPT0gNDMyMQorICByZXR1cm4gJm5zKGludGVy
bmFsX2JpZzJfZW5jb2RpbmcpLmVuYzsKKyNlbHNlCisgIGNvbnN0IHNob3J0IG4gPSAxOworICBy
ZXR1cm4gKCooY29uc3QgY2hhciAqKSZuCisgICAgICAgICAgPyAmbnMoaW50ZXJuYWxfbGl0dGxl
Ml9lbmNvZGluZykuZW5jCisgICAgICAgICAgOiAmbnMoaW50ZXJuYWxfYmlnMl9lbmNvZGluZyku
ZW5jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgY29uc3QgRU5DT0RJTkcgKiBjb25zdCBOUyhlbmNv
ZGluZ3MpW10gPSB7CisgICZucyhsYXRpbjFfZW5jb2RpbmcpLmVuYywKKyAgJm5zKGFzY2lpX2Vu
Y29kaW5nKS5lbmMsCisgICZucyh1dGY4X2VuY29kaW5nKS5lbmMsCisgICZucyhiaWcyX2VuY29k
aW5nKS5lbmMsCisgICZucyhiaWcyX2VuY29kaW5nKS5lbmMsCisgICZucyhsaXR0bGUyX2VuY29k
aW5nKS5lbmMsCisgICZucyh1dGY4X2VuY29kaW5nKS5lbmMgLyogTk9fRU5DICovCit9OworCitz
dGF0aWMgaW50IFBUUkNBTEwKK05TKGluaXRTY2FuUHJvbG9nKShjb25zdCBFTkNPRElORyAqZW5j
LCBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICoqbmV4dFRva1B0cikKK3sKKyAgcmV0dXJuIGluaXRTY2FuKE5TKGVuY29kaW5n
cyksIChjb25zdCBJTklUX0VOQ09ESU5HICopZW5jLAorICAgICAgICAgICAgICAgICAgWE1MX1BS
T0xPR19TVEFURSwgcHRyLCBlbmQsIG5leHRUb2tQdHIpOworfQorCitzdGF0aWMgaW50IFBUUkNB
TEwKK05TKGluaXRTY2FuQ29udGVudCkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAq
cHRyLCBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipu
ZXh0VG9rUHRyKQoreworICByZXR1cm4gaW5pdFNjYW4oTlMoZW5jb2RpbmdzKSwgKGNvbnN0IElO
SVRfRU5DT0RJTkcgKillbmMsCisgICAgICAgICAgICAgICAgICBYTUxfQ09OVEVOVF9TVEFURSwg
cHRyLCBlbmQsIG5leHRUb2tQdHIpOworfQorCitpbnQKK05TKFhtbEluaXRFbmNvZGluZykoSU5J
VF9FTkNPRElORyAqcCwgY29uc3QgRU5DT0RJTkcgKiplbmNQdHIsCisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGludCBpID0gZ2V0RW5jb2RpbmdJbmRleChuYW1l
KTsKKyAgaWYgKGkgPT0gVU5LTk9XTl9FTkMpCisgICAgcmV0dXJuIDA7CisgIFNFVF9JTklUX0VO
Q19JTkRFWChwLCBpKTsKKyAgcC0+aW5pdEVuYy5zY2FubmVyc1tYTUxfUFJPTE9HX1NUQVRFXSA9
IE5TKGluaXRTY2FuUHJvbG9nKTsKKyAgcC0+aW5pdEVuYy5zY2FubmVyc1tYTUxfQ09OVEVOVF9T
VEFURV0gPSBOUyhpbml0U2NhbkNvbnRlbnQpOworICBwLT5pbml0RW5jLnVwZGF0ZVBvc2l0aW9u
ID0gaW5pdFVwZGF0ZVBvc2l0aW9uOworICBwLT5lbmNQdHIgPSBlbmNQdHI7CisgICplbmNQdHIg
PSAmKHAtPmluaXRFbmMpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IEVOQ09ESU5H
ICoKK05TKGZpbmRFbmNvZGluZykoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRy
LCBjb25zdCBjaGFyICplbmQpCit7CisjZGVmaW5lIEVOQ09ESU5HX01BWCAxMjgKKyAgY2hhciBi
dWZbRU5DT0RJTkdfTUFYXTsKKyAgY2hhciAqcCA9IGJ1ZjsKKyAgaW50IGk7CisgIFhtbFV0ZjhD
b252ZXJ0KGVuYywgJnB0ciwgZW5kLCAmcCwgcCArIEVOQ09ESU5HX01BWCAtIDEpOworICBpZiAo
cHRyICE9IGVuZCkKKyAgICByZXR1cm4gMDsKKyAgKnAgPSAwOworICBpZiAoc3RyZXFjaShidWYs
IEtXX1VURl8xNikgJiYgZW5jLT5taW5CeXRlc1BlckNoYXIgPT0gMikKKyAgICByZXR1cm4gZW5j
OworICBpID0gZ2V0RW5jb2RpbmdJbmRleChidWYpOworICBpZiAoaSA9PSBVTktOT1dOX0VOQykK
KyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIE5TKGVuY29kaW5ncylbaV07Cit9CisKK2ludAorTlMo
WG1sUGFyc2VYbWxEZWNsKShpbnQgaXNHZW5lcmFsVGV4dEVudGl0eSwKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqcHRyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKipiYWRQdHIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKip2ZXJzaW9uUHRyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqdmVy
c2lvbkVuZFB0ciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuY29kaW5nTmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKiplbmNvZGluZywKKyAgICAg
ICAgICAgICAgICAgICAgaW50ICpzdGFuZGFsb25lKQoreworICByZXR1cm4gZG9QYXJzZVhtbERl
Y2woTlMoZmluZEVuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhbFRl
eHRFbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICBlbmMsCisgICAgICAgICAgICAgICAg
ICAgICAgICBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBiYWRQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uUHRyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbkVuZFB0ciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVuY29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhbG9uZSk7Cit9CisKKyNlbmRpZiAvKiBYTUxf
VE9LX05TX0MgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvZXhwYXQvZnV6ei9PV05FUlMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2Z1enovT1dORVJTCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAy
MzBmN2Q4YmYxMzk5M2RhZGEyOTdjOTMwNGE2MDY3M2YyNzMwODMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2Z1
enovT1dORVJTCkBAIC0wLDAgKzEsMiBAQAorYWl6YXRza3lAY2hyb21pdW0ub3JnCittbW9yb3pA
Y2hyb21pdW0ub3JnCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2Z1enovZXhwYXRfeG1sX3BhcnNlX2Z1enplci5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZnV6ei9l
eHBhdF94bWxfcGFyc2VfZnV6emVyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0MTIwNzEzNjMzOWMyMDc5OGEy
OTEyNDhkY2I1MmU2MmY0ODM5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2Z1enovZXhwYXRfeG1sX3BhcnNl
X2Z1enplci5jYwpAQCAtMCwwICsxLDMwIEBACisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKworI2luY2x1ZGUgInRoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9leHBh
dC5oIgorCisjaW5jbHVkZSA8dmVjdG9yPgorCitzdGQ6OnZlY3Rvcjxjb25zdCBjaGFyKj4ga0Vu
Y29kaW5ncyA9IHt7IlVURi0xNiIsICJVVEYtOCIsICJJU08tODg1OS0xIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVMtQVNDSUkiLCAiVVRGLTE2QkUiLCAiVVRG
LTE2TEUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTlZBTElE
RU5DT0RJTkcifX07CisKKy8vIEVudHJ5IHBvaW50IGZvciBMaWJGdXp6ZXIuCitleHRlcm4gIkMi
IGludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKSB7CisgIGNvbnN0IGNoYXIqIGRhdGFQdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihkYXRhKTsKKworICBmb3IgKGludCB1c2VfbnMgPSAwOyB1c2VfbnMgPD0gMTsgKyt1c2Vf
bnMpIHsKKyAgICBmb3IgKGF1dG8gZW5jIDoga0VuY29kaW5ncykgeworICAgICAgWE1MX1BhcnNl
ciBwYXJzZXIgPQorICAgICAgICAgIHVzZV9ucyA/IFhNTF9QYXJzZXJDcmVhdGVOUyhlbmMsICdc
bicpIDogWE1MX1BhcnNlckNyZWF0ZShlbmMpOworICAgICAgWE1MX1BhcnNlKHBhcnNlciwgZGF0
YVB0ciwgc2l6ZSwgdHJ1ZSk7CisgICAgICBYTUxfUGFyc2VyRnJlZShwYXJzZXIpOworICAgIH0K
KyAgfQorCisgIHJldHVybiAwOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>