tremor lowmem branch, need advice for C99 variable-length arrays
Ozkan Sezer <[email protected]> Tue, 30 Mar 2021 17:41:51 +0300
| Newsgroups | gmane.comp.multimedia.ogg.vorbis.devel |
|---|---|
| Message-ID | <CAA2C=vApGj-TtX7r_dWEV5ryeTKL9fGnawz9e6wak6kMzDR_ZQ@mail.gmail.com> |
--000000000000bb116705bec1ffca Content-Type: text/plain; charset="UTF-8" Hello: I attempted porting Tremor lowmem branch to use C99 variable-length arrays, and it works for me. See the attached two patches: - 0001-scope.patch: tweaks alloca() scope a little: Can anyone see any gotchas, any adverse effects I may have missed? - 0002-vla.patch: ports to C99 VLAs as an option with alloca() still being the default: Comments? I am not happy with the solution I used in mapping_inverse(), but it was the only solution I could find. Can anyone propose something better? Thanks. -- O.S. --000000000000bb116705bec1ffca Content-Type: text/x-patch; charset="US-ASCII"; name="0001-scope.patch" Content-Disposition: attachment; filename="0001-scope.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: file1 dHdlYWsgYWxsb2NhKCkgc2NvcGUgYSBsaXR0bGUuCgpkaWZmIC0tZ2l0IGEvY29kZWJvb2suYyBi L2NvZGVib29rLmMKaW5kZXggYjc0NWU4Yi4uODgwNmUxOCAxMDA2NDQKLS0tIGEvY29kZWJvb2su YworKysgYi9jb2RlYm9vay5jCkBAIC0xODcsMTEgKzE4Nyw4IEBAIHN0YXRpYyBpbnQgX21ha2Vf d29yZHMoY2hhciAqbCxsb25nIG4sb2dnX3VpbnQzMl90ICpyLGxvbmcgcXVhbnR2YWxzLAogCiBz dGF0aWMgaW50IF9tYWtlX2RlY29kZV90YWJsZShjb2RlYm9vayAqcyxjaGFyICpsZW5ndGhsaXN0 LGxvbmcgcXVhbnR2YWxzLAogCQkJICAgICAgb2dncGFja19idWZmZXIgKm9wYixpbnQgbWFwdHlw ZSl7Ci0gIGludCBpOwotICBvZ2dfdWludDMyX3QgKndvcms7Ci0KICAgaWYocy0+ZGVjX25vZGVi PT00KXsKLSAgICBzLT5kZWNfdGFibGU9X29nZ19tYWxsb2MoKHMtPnVzZWRfZW50cmllcyoyKzEp KnNpemVvZigqd29yaykpOworICAgIHMtPmRlY190YWJsZT1fb2dnX21hbGxvYygocy0+dXNlZF9l bnRyaWVzKjIrMSkqc2l6ZW9mKG9nZ191aW50MzJfdCkpOwogICAgIC8qICsxIChyYXRoZXIgdGhh biAtMikgaXMgdG8gYWNjb21tb2RhdGUgMCBhbmQgMSBzaXplZCBib29rcywKICAgICAgICB3aGlj aCBhcmUgc3BlY2lhbGNhc2VkIHRvIG5vZGViPT00ICovCiAgICAgaWYoX21ha2Vfd29yZHMobGVu Z3RobGlzdCxzLT5lbnRyaWVzLApAQCAtMTk5LDggKzE5NiwxMCBAQCBzdGF0aWMgaW50IF9tYWtl X2RlY29kZV90YWJsZShjb2RlYm9vayAqcyxjaGFyICpsZW5ndGhsaXN0LGxvbmcgcXVhbnR2YWxz LAogICAgIAogICAgIHJldHVybiAwOwogICB9CisgZWxzZSB7IC8qICtzY29wZSAqLworICBvZ2df dWludDMyX3QgKndvcms9YWxsb2NhKChzLT51c2VkX2VudHJpZXMqMi0yKSpzaXplb2YoKndvcmsp KTsKKyAgaW50IGk7CiAKLSAgd29yaz1hbGxvY2EoKHMtPnVzZWRfZW50cmllcyoyLTIpKnNpemVv Zigqd29yaykpOwogICBpZihfbWFrZV93b3JkcyhsZW5ndGhsaXN0LHMtPmVudHJpZXMsd29yayxx dWFudHZhbHMscyxvcGIsbWFwdHlwZSkpcmV0dXJuIDE7CiAgIHMtPmRlY190YWJsZT1fb2dnX21h bGxvYygocy0+dXNlZF9lbnRyaWVzKihzLT5kZWNfbGVhZncrMSktMikqCiAJCQkgICBzLT5kZWNf bm9kZWIpOwpAQCAtMjg2LDcgKzI4NSw4IEBAIHN0YXRpYyBpbnQgX21ha2VfZGVjb2RlX3RhYmxl KGNvZGVib29rICpzLGNoYXIgKmxlbmd0aGxpc3QsbG9uZyBxdWFudHZhbHMsCiAgICAgICB9CiAg ICAgfQogICB9Ci0JCisgfSAvKiAtc2NvcGUgKi8KKwogICByZXR1cm4gMDsKIH0KIApAQCAtMzM1 LDcgKzMzNSw2IEBAIHZvaWQgdm9yYmlzX2Jvb2tfY2xlYXIoY29kZWJvb2sgKmIpewogfQogCiBp bnQgdm9yYmlzX2Jvb2tfdW5wYWNrKG9nZ3BhY2tfYnVmZmVyICpvcGIsY29kZWJvb2sgKnMpewot ICBjaGFyICAgICAgICAgKmxlbmd0aGxpc3Q9TlVMTDsKICAgaW50ICAgICAgICAgICBxdWFudHZh bHM9MDsKICAgbG9uZyAgICAgICAgICBpLGo7CiAgIGludCAgICAgICAgICAgbWFwdHlwZTsKQEAg LTM1MSwxMSArMzUwLDE0IEBAIGludCB2b3JiaXNfYm9va191bnBhY2sob2dncGFja19idWZmZXIg Km9wYixjb2RlYm9vayAqcyl7CiAgIGlmKHMtPmVudHJpZXM9PS0xKWdvdG8gX2VvZm91dDsKIAog ICAvKiBjb2Rld29yZCBvcmRlcmluZy4uLi4gbGVuZ3RoIG9yZGVyZWQgb3IgdW5vcmRlcmVkPyAq LwotICBzd2l0Y2goKGludClvZ2dwYWNrX3JlYWQob3BiLDEpKXsKKyAgaj0oaW50KW9nZ3BhY2tf cmVhZChvcGIsMSk7CisgIGlmIChqIT0wICYmIGohPTEpIC8qIEVPRiAqLworICAgIGdvdG8gX2Vv Zm91dDsKKyBlbHNlIHsgLyogK3Njb3BlICovCisgIGNoYXIgKmxlbmd0aGxpc3Q9KGNoYXIgKilh bGxvY2Eoc2l6ZW9mKCpsZW5ndGhsaXN0KSpzLT5lbnRyaWVzKTsKKyAgc3dpdGNoKGopewogICBj YXNlIDA6CiAgICAgLyogdW5vcmRlcmVkICovCi0gICAgbGVuZ3RobGlzdD0oY2hhciAqKWFsbG9j YShzaXplb2YoKmxlbmd0aGxpc3QpKnMtPmVudHJpZXMpOwotCiAgICAgLyogYWxsb2NhdGVkIGJ1 dCB1bnVzZWQgZW50cmllcz8gKi8KICAgICBpZihvZ2dwYWNrX3JlYWQob3BiLDEpKXsKICAgICAg IC8qIHllcywgdW51c2VkIGVudHJpZXMgKi8KQEAgLTM4MCwxNiArMzgyLDEzIEBAIGludCB2b3Ji aXNfYm9va191bnBhY2sob2dncGFja19idWZmZXIgKm9wYixjb2RlYm9vayAqcyl7CiAJaWYobnVt KzE+cy0+ZGVjX21heGxlbmd0aClzLT5kZWNfbWF4bGVuZ3RoPW51bSsxOwogICAgICAgfQogICAg IH0KLSAgICAKICAgICBicmVhazsKLSAgY2FzZSAxOgorICBkZWZhdWx0OgogICAgIC8qIG9yZGVy ZWQgKi8KICAgICB7CiAgICAgICBsb25nIGxlbmd0aD1vZ2dwYWNrX3JlYWQob3BiLDUpKzE7CiAK ICAgICAgIHMtPnVzZWRfZW50cmllcz1zLT5lbnRyaWVzOwotICAgICAgbGVuZ3RobGlzdD0oY2hh ciAqKWFsbG9jYShzaXplb2YoKmxlbmd0aGxpc3QpKnMtPmVudHJpZXMpOwotICAgICAgCiAgICAg ICBmb3IoaT0wO2k8cy0+ZW50cmllczspewogCWxvbmcgbnVtPW9nZ3BhY2tfcmVhZChvcGIsX2ls b2cocy0+ZW50cmllcy1pKSk7CiAJaWYobnVtPT0tMSlnb3RvIF9lb2ZvdXQ7CkBAIC00MDAsMTIg KzM5OSw4IEBAIGludCB2b3JiaXNfYm9va191bnBhY2sob2dncGFja19idWZmZXIgKm9wYixjb2Rl Ym9vayAqcyl7CiAgICAgICB9CiAgICAgfQogICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIC8q IEVPRiAqLwotICAgIGdvdG8gX2VvZm91dDsKICAgfQogCi0KICAgLyogRG8gd2UgaGF2ZSBhIG1h cHBpbmcgdG8gdW5wYWNrPyAqLwogICAKICAgaWYoKG1hcHR5cGU9b2dncGFja19yZWFkKG9wYiw0 KSk+MCl7CkBAIC00NTUsNyArNDUwLDcgQEAgaW50IHZvcmJpc19ib29rX3VucGFjayhvZ2dwYWNr X2J1ZmZlciAqb3BiLGNvZGVib29rICpzKXsKIAkgICgob2dnX3VpbnQxNl90ICopcy0+cV92YWwp W2ldPW9nZ3BhY2tfcmVhZChvcGIscy0+cV9iaXRzKTsKIAkKIAlpZihvZ2dwYWNrX2VvcChvcGIp KXsKLQkgIHMtPnFfdmFsPTA7IC8qIGNsZWFudXAgbXVzdCBub3QgZnJlZSBhbGxvY2EgbWVtb3J5 ICovCisJICBzLT5xX3ZhbD1OVUxMOyAvKiBjbGVhbnVwIG11c3Qgbm90IGZyZWUgYWxsb2NhIG1l bW9yeSAqLwogCSAgZ290byBfZW9mb3V0OwogCX0KIApAQCAtNDY1LDExICs0NjAsMTEgQEAgaW50 IHZvcmJpc19ib29rX3VucGFjayhvZ2dwYWNrX2J1ZmZlciAqb3BiLGNvZGVib29rICpzKXsKIAlz LT5kZWNfbGVhZnc9X2RldGVybWluZV9sZWFmX3dvcmRzKHMtPmRlY19ub2RlYiwKIAkJCQkJICAg KHMtPnFfYml0cypzLT5kaW0rOCkvOCk7IAogCWlmKF9tYWtlX2RlY29kZV90YWJsZShzLGxlbmd0 aGxpc3QscXVhbnR2YWxzLG9wYixtYXB0eXBlKSl7Ci0JICBzLT5xX3ZhbD0wOyAvKiBjbGVhbnVw IG11c3Qgbm90IGZyZWUgYWxsb2NhIG1lbW9yeSAqLworCSAgcy0+cV92YWw9TlVMTDsgLyogY2xl YW51cCBtdXN0IG5vdCBmcmVlIGFsbG9jYSBtZW1vcnkgKi8KIAkgIGdvdG8gX2Vycm91dDsKIAl9 CiAJCi0Jcy0+cV92YWw9MDsgLyogYWJvdXQgdG8gZ28gb3V0IG9mIHNjb3BlOyBfbWFrZV9kZWNv ZGVfdGFibGUKKwlzLT5xX3ZhbD1OVUxMOyAvKiBhYm91dCB0byBnbyBvdXQgb2Ygc2NvcGU7IF9t YWtlX2RlY29kZV90YWJsZQogICAgICAgICAgICAgICAgICAgICAgICB3YXMgdXNpbmcgaXQgKi8K IAkKICAgICAgIH1lbHNlewpAQCAtNTM4LDYgKzUzMyw4IEBAIGludCB2b3JiaXNfYm9va191bnBh Y2sob2dncGFja19idWZmZXIgKm9wYixjb2RlYm9vayAqcyl7CiAgICAgZ290byBfZXJyb3V0Owog ICB9CiAKKyB9IC8qIC1zY29wZSAqLworCiAgIGlmKG9nZ3BhY2tfZW9wKG9wYikpZ290byBfZW9m b3V0OwogCiAgIHJldHVybiAwOwpAQCAtNzc0LDcgKzc3MSw2IEBAIGxvbmcgdm9yYmlzX2Jvb2tf ZGVjb2RldnZfYWRkKGNvZGVib29rICpib29rLG9nZ19pbnQzMl90ICoqYSwKIAkJCSAgICAgIGxv bmcgb2Zmc2V0LGludCBjaCwKIAkJCSAgICAgIG9nZ3BhY2tfYnVmZmVyICpiLGludCBuLGludCBw b2ludCl7CiAgIGlmKGJvb2stPnVzZWRfZW50cmllcz4wKXsKLSAgICAKICAgICBvZ2dfaW50MzJf dCAqdiA9IChvZ2dfaW50MzJfdCAqKWFsbG9jYShzaXplb2YoKnYpKmJvb2stPmRpbSk7CiAgICAg bG9uZyBpLGo7CiAgICAgaW50IGNocHRyPTA7CmRpZmYgLS1naXQgYS9tYXBwaW5nMC5jIGIvbWFw cGluZzAuYwppbmRleCAxNTBhZmJmLi44NGZhM2MzIDEwMDY0NAotLS0gYS9tYXBwaW5nMC5jCisr KyBiL21hcHBpbmcwLmMKQEAgLTEwOCw0MCArMTA4LDM1IEBAIGludCBtYXBwaW5nX2ludmVyc2Uo dm9yYmlzX2RzcF9zdGF0ZSAqdmQsdm9yYmlzX2luZm9fbWFwcGluZyAqaW5mbyl7CiAgIGludCAg ICAgICAgICAgICAgICAgICBpLGo7CiAgIGxvbmcgICAgICAgICAgICAgICAgICBuPWNpLT5ibG9j a3NpemVzW3ZkLT5XXTsKIAotICBvZ2dfaW50MzJfdCAqKnBjbWJ1bmRsZT0KLSAgICBhbGxvY2Eo c2l6ZW9mKCpwY21idW5kbGUpKnZpLT5jaGFubmVscyk7Ci0gIGludCAgICAgICAgICAqemVyb2J1 bmRsZT0KLSAgICBhbGxvY2Eoc2l6ZW9mKCp6ZXJvYnVuZGxlKSp2aS0+Y2hhbm5lbHMpOwotICBp bnQgICAgICAgICAgKm5vbnplcm89Ci0gICAgYWxsb2NhKHNpemVvZigqbm9uemVybykqdmktPmNo YW5uZWxzKTsKLSAgb2dnX2ludDMyX3QgKipmbG9vcm1lbW89Ci0gICAgYWxsb2NhKHNpemVvZigq Zmxvb3JtZW1vKSp2aS0+Y2hhbm5lbHMpOworICBvZ2dfaW50MzJfdCAqKnBjbWJ1bmRsZSA9YWxs b2NhKHNpemVvZigqcGNtYnVuZGxlKSp2aS0+Y2hhbm5lbHMpOworICBpbnQgICAgICAgICAgKnpl cm9idW5kbGU9YWxsb2NhKHNpemVvZigqemVyb2J1bmRsZSkqdmktPmNoYW5uZWxzKTsKKyAgaW50 ICAgICAgICAgICpub256ZXJvICAgPWFsbG9jYShzaXplb2YoKm5vbnplcm8pKnZpLT5jaGFubmVs cyk7CisgIG9nZ19pbnQzMl90ICoqZmxvb3JtZW1vID1hbGxvY2Eoc2l6ZW9mKCpmbG9vcm1lbW8p KnZpLT5jaGFubmVscyk7CiAgIAogICAvKiByZWNvdmVyIHRoZSBzcGVjdHJhbCBlbnZlbG9wZTsg c3RvcmUgaXQgaW4gdGhlIFBDTSB2ZWN0b3IgZm9yIG5vdyAqLwogICBmb3IoaT0wO2k8dmktPmNo YW5uZWxzO2krKyl7CiAgICAgaW50IHN1Ym1hcD0wOwogICAgIGludCBmbG9vcm5vOworICAgIHZv cmJpc19pbmZvX2Zsb29yICp2aWY7CiAgICAgCiAgICAgaWYoaW5mby0+c3VibWFwcz4xKQogICAg ICAgc3VibWFwPWluZm8tPmNobXV4bGlzdFtpXTsKICAgICBmbG9vcm5vPWluZm8tPnN1Ym1hcGxp c3Rbc3VibWFwXS5mbG9vcjsKICAgICAKKyAgICB2aWY9Y2ktPmZsb29yX3BhcmFtW2Zsb29ybm9d OwogICAgIGlmKGNpLT5mbG9vcl90eXBlW2Zsb29ybm9dKXsKICAgICAgIC8qIGZsb29yIDEgKi8K LSAgICAgIGZsb29ybWVtb1tpXT1hbGxvY2Eoc2l6ZW9mKCpmbG9vcm1lbW9baV0pKgotCQkJICBm bG9vcjFfbWVtb3NpemUoY2ktPmZsb29yX3BhcmFtW2Zsb29ybm9dKSk7Ci0gICAgICBmbG9vcm1l bW9baV09Zmxvb3IxX2ludmVyc2UxKHZkLGNpLT5mbG9vcl9wYXJhbVtmbG9vcm5vXSxmbG9vcm1l bW9baV0pOworICAgICAgZmxvb3JtZW1vW2ldPWFsbG9jYShzaXplb2YoKmZsb29ybWVtb1tpXSkq Zmxvb3IxX21lbW9zaXplKHZpZikpOworICAgICAgZmxvb3JtZW1vW2ldPWZsb29yMV9pbnZlcnNl MSh2ZCx2aWYsZmxvb3JtZW1vW2ldKTsKICAgICB9ZWxzZXsKICAgICAgIC8qIGZsb29yIDAgKi8K LSAgICAgIGZsb29ybWVtb1tpXT1hbGxvY2Eoc2l6ZW9mKCpmbG9vcm1lbW9baV0pKgotCQkJICBm bG9vcjBfbWVtb3NpemUoY2ktPmZsb29yX3BhcmFtW2Zsb29ybm9dKSk7Ci0gICAgICBmbG9vcm1l bW9baV09Zmxvb3IwX2ludmVyc2UxKHZkLGNpLT5mbG9vcl9wYXJhbVtmbG9vcm5vXSxmbG9vcm1l bW9baV0pOworICAgICAgZmxvb3JtZW1vW2ldPWFsbG9jYShzaXplb2YoKmZsb29ybWVtb1tpXSkq Zmxvb3IwX21lbW9zaXplKHZpZikpOworICAgICAgZmxvb3JtZW1vW2ldPWZsb29yMF9pbnZlcnNl MSh2ZCx2aWYsZmxvb3JtZW1vW2ldKTsKICAgICB9Ci0gICAgCiAgICAgaWYoZmxvb3JtZW1vW2ld KQogICAgICAgbm9uemVyb1tpXT0xOwogICAgIGVsc2UKLSAgICAgIG5vbnplcm9baV09MDsgICAg ICAKKyAgICAgIG5vbnplcm9baV09MDsKICAgICBtZW1zZXQodmQtPndvcmtbaV0sMCxzaXplb2Yo KnZkLT53b3JrW2ldKSpuLzIpOwogICB9CiAKZGlmZiAtLWdpdCBhL3JlczAxMi5jIGIvcmVzMDEy LmMKaW5kZXggNGYzNTFlZC4uMTZmYWJkOSAxMDA2NDQKLS0tIGEvcmVzMDEyLmMKKysrIGIvcmVz MDEyLmMKQEAgLTEwNCw3ICsxMDQsNiBAQCBpbnQgcmVzX2ludmVyc2Uodm9yYmlzX2RzcF9zdGF0 ZSAqdmQsdm9yYmlzX2luZm9fcmVzaWR1ZSAqaW5mbywKICAgICAgIGNoPXVzZWQ7CiAgICAgICAK ICAgICAgIGlmKHVzZWQpewotCQogCWNoYXIgKipwYXJ0d29yZD0oY2hhciAqKilhbGxvY2EoY2gq c2l6ZW9mKCpwYXJ0d29yZCkpOwogCWZvcihqPTA7ajxjaDtqKyspCiAJICBwYXJ0d29yZFtqXT0o Y2hhciAqKWFsbG9jYShwYXJ0d29yZHMqcGFydGl0aW9uc19wZXJfd29yZCoKQEAgLTE3MCwxMyAr MTY5LDEzIEBAIGludCByZXNfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRlICp2ZCx2b3JiaXNfaW5m b19yZXNpZHVlICppbmZvLAogICAgICAgaW50IHBhcnR2YWxzPW4vc2FtcGxlc19wZXJfcGFydGl0 aW9uOwogICAgICAgaW50IHBhcnR3b3Jkcz0ocGFydHZhbHMrcGFydGl0aW9uc19wZXJfd29yZC0x KS9wYXJ0aXRpb25zX3Blcl93b3JkOwogICAgICAgCi0gICAgICBjaGFyICpwYXJ0d29yZD0KLQko Y2hhciAqKWFsbG9jYShwYXJ0d29yZHMqcGFydGl0aW9uc19wZXJfd29yZCpzaXplb2YoKnBhcnR3 b3JkKSk7CiAgICAgICBpbnQgYmVnaW5vZmY9aW5mby0+YmVnaW4vY2g7CiAgICAgICAKICAgICAg IGZvcihpPTA7aTxjaDtpKyspaWYobm9uemVyb1tpXSlicmVhazsKICAgICAgIGlmKGk9PWNoKXJl dHVybigwKTsgLyogbm8gbm9uemVybyB2ZWN0b3JzICovCi0gICAgICAKKyAgICAgIGVsc2UKKyAg ICAgeyAvKiArc2NvcGUgKi8KKyAgICAgIGNoYXIgKnBhcnR3b3JkPShjaGFyICopYWxsb2NhKHBh cnR3b3JkcypwYXJ0aXRpb25zX3Blcl93b3JkKnNpemVvZigqcGFydHdvcmQpKTsKICAgICAgIHNh bXBsZXNfcGVyX3BhcnRpdGlvbi89Y2g7CiAgICAgICAKICAgICAgIGZvcihzPTA7czxpbmZvLT5z dGFnZXM7cysrKXsKQEAgLTIxNCw2ICsyMTMsNyBAQCBpbnQgcmVzX2ludmVyc2Uodm9yYmlzX2Rz cF9zdGF0ZSAqdmQsdm9yYmlzX2luZm9fcmVzaWR1ZSAqaW5mbywKIAkgICAgfQogCX0KICAgICAg IH0gCisgICAgIH0gLyogLXNjb3BlICovCiAgICAgfQogICB9CiAgZW9wYnJlYWs6Cg== --000000000000bb116705bec1ffca Content-Type: text/x-patch; charset="US-ASCII"; name="0002-vla.patch" Content-Disposition: attachment; filename="0002-vla.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: file2 ZGlmZiAtdXJwIC0tZXhjbHVkZT0uZ2l0IHRyZW1vci0wMS9jb2RlYm9vay5jIHRyZW1vci0wMi9j b2RlYm9vay5jCi0tLSB0cmVtb3ItMDEvY29kZWJvb2suYwkyMDIxLTAzLTMwIDE0OjQ4OjM3LjQ4 OTM3MjY4NiArMDMwMAorKysgdHJlbW9yLTAyL2NvZGVib29rLmMJMjAyMS0wMy0zMCAxNjo0NDo1 Ny4yMzcyODg0MjYgKzAzMDAKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGF0aWMgaW50IF9tYWtlX2Rl Y29kZV90YWJsZShjb2RlYm9vayAqCiAgICAgcmV0dXJuIDA7CiAgIH0KICBlbHNlIHsgLyogK3Nj b3BlICovCi0gIG9nZ191aW50MzJfdCAqd29yaz1hbGxvY2EoKHMtPnVzZWRfZW50cmllcyoyLTIp KnNpemVvZigqd29yaykpOworICBWQVJfU1RBQ0sob2dnX3VpbnQzMl90LHdvcmsscy0+dXNlZF9l bnRyaWVzKjItMik7CiAgIGludCBpOwogCiAgIGlmKF9tYWtlX3dvcmRzKGxlbmd0aGxpc3Qscy0+ ZW50cmllcyx3b3JrLHF1YW50dmFscyxzLG9wYixtYXB0eXBlKSlyZXR1cm4gMTsKQEAgLTM1NCw3 ICszNTQsNyBAQCBpbnQgdm9yYmlzX2Jvb2tfdW5wYWNrKG9nZ3BhY2tfYnVmZmVyICpvCiAgIGlm IChqIT0wICYmIGohPTEpIC8qIEVPRiAqLwogICAgIGdvdG8gX2VvZm91dDsKICBlbHNlIHsgLyog K3Njb3BlICovCi0gIGNoYXIgKmxlbmd0aGxpc3Q9KGNoYXIgKilhbGxvY2Eoc2l6ZW9mKCpsZW5n dGhsaXN0KSpzLT5lbnRyaWVzKTsKKyAgVkFSX1NUQUNLKGNoYXIsbGVuZ3RobGlzdCxzLT5lbnRy aWVzKTsKICAgc3dpdGNoKGopewogICBjYXNlIDA6CiAgICAgLyogdW5vcmRlcmVkICovCkBAIC00 NDUsNyArNDQ1LDggQEAgaW50IHZvcmJpc19ib29rX3VucGFjayhvZ2dwYWNrX2J1ZmZlciAqbwog CS8qIHVzZSBkZWNfdHlwZSAxOiB2ZWN0b3Igb2YgcGFja2VkIHZhbHVlcyAqLwogCiAJLyogbmVl ZCBxdWFudGl6ZWQgdmFsdWVzIGJlZm9yZSAgKi8KLQlzLT5xX3ZhbD1hbGxvY2Eoc2l6ZW9mKG9n Z191aW50MTZfdCkqcXVhbnR2YWxzKTsKKwlWQVJfU1RBQ0sob2dnX3VpbnQxNl90LHEscXVhbnR2 YWxzKTsKKwlzLT5xX3ZhbD1xOwogCWZvcihpPTA7aTxxdWFudHZhbHM7aSsrKQogCSAgKChvZ2df dWludDE2X3QgKilzLT5xX3ZhbClbaV09b2dncGFja19yZWFkKG9wYixzLT5xX2JpdHMpOwogCQpA QCAtNzEzLDcgKzcxNCw3IEBAIGxvbmcgdm9yYmlzX2Jvb2tfZGVjb2RldnNfYWRkKGNvZGVib29r ICoKIAkJCSAgICAgIG9nZ3BhY2tfYnVmZmVyICpiLGludCBuLGludCBwb2ludCl7CiAgIGlmKGJv b2stPnVzZWRfZW50cmllcz4wKXsKICAgICBpbnQgc3RlcD1uL2Jvb2stPmRpbTsKLSAgICBvZ2df aW50MzJfdCAqdiA9IChvZ2dfaW50MzJfdCAqKWFsbG9jYShzaXplb2YoKnYpKmJvb2stPmRpbSk7 CisgICAgVkFSX1NUQUNLKG9nZ19pbnQzMl90LHYsYm9vay0+ZGltKTsKICAgICBpbnQgaSxqLG87 CiAgICAgCiAgICAgZm9yIChqPTA7ajxzdGVwO2orKyl7CkBAIC03MjksNyArNzMwLDcgQEAgbG9u ZyB2b3JiaXNfYm9va19kZWNvZGV2c19hZGQoY29kZWJvb2sgKgogbG9uZyB2b3JiaXNfYm9va19k ZWNvZGV2X2FkZChjb2RlYm9vayAqYm9vayxvZ2dfaW50MzJfdCAqYSwKIAkJCSAgICAgb2dncGFj a19idWZmZXIgKmIsaW50IG4saW50IHBvaW50KXsKICAgaWYoYm9vay0+dXNlZF9lbnRyaWVzPjAp ewotICAgIG9nZ19pbnQzMl90ICp2ID0gKG9nZ19pbnQzMl90ICopYWxsb2NhKHNpemVvZigqdikq Ym9vay0+ZGltKTsKKyAgICBWQVJfU1RBQ0sob2dnX2ludDMyX3Qsdixib29rLT5kaW0pOwogICAg IGludCBpLGo7CiAgICAgCiAgICAgZm9yKGk9MDtpPG47KXsKQEAgLTc0Nyw3ICs3NDgsNyBAQCBs b25nIHZvcmJpc19ib29rX2RlY29kZXZfYWRkKGNvZGVib29rICpiCiBsb25nIHZvcmJpc19ib29r X2RlY29kZXZfc2V0KGNvZGVib29rICpib29rLG9nZ19pbnQzMl90ICphLAogCQkJICAgICBvZ2dw YWNrX2J1ZmZlciAqYixpbnQgbixpbnQgcG9pbnQpewogICBpZihib29rLT51c2VkX2VudHJpZXM+ MCl7Ci0gICAgb2dnX2ludDMyX3QgKnYgPSAob2dnX2ludDMyX3QgKilhbGxvY2Eoc2l6ZW9mKCp2 KSpib29rLT5kaW0pOworICAgIFZBUl9TVEFDSyhvZ2dfaW50MzJfdCx2LGJvb2stPmRpbSk7CiAg ICAgaW50IGksajsKICAgICAKICAgICBmb3IoaT0wO2k8bjspewpAQCAtNzcxLDcgKzc3Miw3IEBA IGxvbmcgdm9yYmlzX2Jvb2tfZGVjb2RldnZfYWRkKGNvZGVib29rICoKIAkJCSAgICAgIGxvbmcg b2Zmc2V0LGludCBjaCwKIAkJCSAgICAgIG9nZ3BhY2tfYnVmZmVyICpiLGludCBuLGludCBwb2lu dCl7CiAgIGlmKGJvb2stPnVzZWRfZW50cmllcz4wKXsKLSAgICBvZ2dfaW50MzJfdCAqdiA9IChv Z2dfaW50MzJfdCAqKWFsbG9jYShzaXplb2YoKnYpKmJvb2stPmRpbSk7CisgICAgVkFSX1NUQUNL KG9nZ19pbnQzMl90LHYsYm9vay0+ZGltKTsKICAgICBsb25nIGksajsKICAgICBpbnQgY2hwdHI9 MDsKICAgICBsb25nIG09b2Zmc2V0K247CmRpZmYgLXVycCAtLWV4Y2x1ZGU9LmdpdCB0cmVtb3It MDEvY29uZmlndXJlLmFjIHRyZW1vci0wMi9jb25maWd1cmUuYWMKLS0tIHRyZW1vci0wMS9jb25m aWd1cmUuYWMJMjAyMS0wMy0zMCAxMzozNTozMi4wMDAwMDAwMDAgKzAzMDAKKysrIHRyZW1vci0w Mi9jb25maWd1cmUuYWMJMjAyMS0wMy0zMCAxNjo0NDo1Ny4yMzgyODgzOTUgKzAzMDAKQEAgLTEy Miw2ICsxMjIsMTQgQEAgZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog QUNfRlVOQ19BTExPQ0EKIEFDX0ZVTkNfTUVNQ01QCiAKK0FDX01TR19DSEVDS0lORyhmb3IgQzk5 IHZhcmlhYmxlLXNpemUgYXJyYXlzKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JB TShbW11dLAorICBbW3N0YXRpYyBpbnQgeDsgY2hhciBhWysreF07IGFbc2l6ZW9mIGEgLSAxXSA9 IDA7IGludCBOOyByZXR1cm4gYVswXTtdXSApXSwKKyAgW2hhc192YXJfYXJyYXlzPXllcztBQ19E RUZJTkUoW1ZBUl9BUlJBWVNdLFtdLFtVc2UgQzk5IHZhcmlhYmxlLXNpemUgYXJyYXlzXSldLAor ICBbaGFzX3Zhcl9hcnJheXM9bm9dCispCitBQ19NU0dfUkVTVUxUKCRoYXNfdmFyX2FycmF5cykK KwogCiBkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIGRubCBWZXJzaW9uIHNjcmlwdCAoZXhwb3J0ZWQgc3ltYm9scyBjb250cm9sLikKZGlmZiAt dXJwIC0tZXhjbHVkZT0uZ2l0IHRyZW1vci0wMS9mbG9vcjAuYyB0cmVtb3ItMDIvZmxvb3IwLmMK LS0tIHRyZW1vci0wMS9mbG9vcjAuYwkyMDIxLTAzLTMwIDE0OjI2OjAzLjMyNjA4NzI3NyArMDMw MAorKysgdHJlbW9yLTAyL2Zsb29yMC5jCTIwMjEtMDMtMzAgMTY6NDQ6NTcuMjM4Mjg4Mzk1ICsw MzAwCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCB2b3JiaXNfbHNwX3RvX2N1cnZlKG9nZ19pbnQz Ml90ICpjdQogICBpbnQgaTsKICAgaW50IGFtcG9mZnNldGk9YW1wb2Zmc2V0KjQwOTY7CiAgIGlu dCBhbXBpPWFtcDsKLSAgb2dnX2ludDMyX3QgKmlsc3A9KG9nZ19pbnQzMl90ICopYWxsb2NhKG0q c2l6ZW9mKCppbHNwKSk7CisgIFZBUl9TVEFDSyhvZ2dfaW50MzJfdCxpbHNwLG0pOwogCiAvKiAg b2dnX3VpbnQzMl90IGlueXE9ICgxVUw8PDMxKSAvIHRvQkFSSyhueXEpOyovIC8qIFVOVVNFRCAq LwogICBvZ2dfdWludDMyX3QgaW1hcD0gKDFVTDw8MzEpIC8gbG47CmRpZmYgLXVycCAtLWV4Y2x1 ZGU9LmdpdCB0cmVtb3ItMDEvaW5mby5jIHRyZW1vci0wMi9pbmZvLmMKLS0tIHRyZW1vci0wMS9p bmZvLmMJMjAyMS0wMy0zMCAxNDoyNjowMy4zMjYwODcyNzcgKzAzMDAKKysrIHRyZW1vci0wMi9p bmZvLmMJMjAyMS0wMy0zMCAxNjo0NDo1Ny4yMzkyODgzNjUgKzAzMDAKQEAgLTU4LDcgKzU4LDcg QEAgY2hhciAqdm9yYmlzX2NvbW1lbnRfcXVlcnkodm9yYmlzX2NvbW1lbgogICBsb25nIGk7CiAg IGludCBmb3VuZCA9IDA7CiAgIGludCB0YWdsZW4gPSBzdHJsZW4odGFnKSsxOyAvKiArMSBmb3Ig dGhlID0gd2UgYXBwZW5kICovCi0gIGNoYXIgKmZ1bGx0YWcgPSAoY2hhciAqKWFsbG9jYSh0YWds ZW4rIDEpOworICBWQVJfU1RBQ0soY2hhcixmdWxsdGFnLHRhZ2xlbisxKTsKIAogICBzdHJjcHko ZnVsbHRhZywgdGFnKTsKICAgc3RyY2F0KGZ1bGx0YWcsICI9Iik7CkBAIC03OCw3ICs3OCw3IEBA IGNoYXIgKnZvcmJpc19jb21tZW50X3F1ZXJ5KHZvcmJpc19jb21tZW4KIGludCB2b3JiaXNfY29t bWVudF9xdWVyeV9jb3VudCh2b3JiaXNfY29tbWVudCAqdmMsIGNoYXIgKnRhZyl7CiAgIGludCBp LGNvdW50PTA7CiAgIGludCB0YWdsZW4gPSBzdHJsZW4odGFnKSsxOyAvKiArMSBmb3IgdGhlID0g d2UgYXBwZW5kICovCi0gIGNoYXIgKmZ1bGx0YWcgPSAoY2hhciAqKWFsbG9jYSh0YWdsZW4rMSk7 CisgIFZBUl9TVEFDSyhjaGFyLGZ1bGx0YWcsdGFnbGVuKzEpOwogICBzdHJjcHkoZnVsbHRhZyx0 YWcpOwogICBzdHJjYXQoZnVsbHRhZywgIj0iKTsKIApkaWZmIC11cnAgLS1leGNsdWRlPS5naXQg dHJlbW9yLTAxL21hcHBpbmcwLmMgdHJlbW9yLTAyL21hcHBpbmcwLmMKLS0tIHRyZW1vci0wMS9t YXBwaW5nMC5jCTIwMjEtMDMtMzAgMTU6Mjg6MzEuMjQzMTk2MzI3ICswMzAwCisrKyB0cmVtb3It MDIvbWFwcGluZzAuYwkyMDIxLTAzLTMwIDE2OjQ0OjU3LjI0MDI4ODMzNyArMDMwMApAQCAtMTA4 LDEyICsxMDgsMjUgQEAgaW50IG1hcHBpbmdfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRlICp2ZAog ICBpbnQgICAgICAgICAgICAgICAgICAgaSxqOwogICBsb25nICAgICAgICAgICAgICAgICAgbj1j aS0+YmxvY2tzaXplc1t2ZC0+V107CiAKLSAgb2dnX2ludDMyX3QgKipwY21idW5kbGUgPWFsbG9j YShzaXplb2YoKnBjbWJ1bmRsZSkqdmktPmNoYW5uZWxzKTsKLSAgaW50ICAgICAgICAgICp6ZXJv YnVuZGxlPWFsbG9jYShzaXplb2YoKnplcm9idW5kbGUpKnZpLT5jaGFubmVscyk7Ci0gIGludCAg ICAgICAgICAqbm9uemVybyAgID1hbGxvY2Eoc2l6ZW9mKCpub256ZXJvKSp2aS0+Y2hhbm5lbHMp OwotICBvZ2dfaW50MzJfdCAqKmZsb29ybWVtbyA9YWxsb2NhKHNpemVvZigqZmxvb3JtZW1vKSp2 aS0+Y2hhbm5lbHMpOworICBWQVJfU1RBQ0sob2dnX2ludDMyX3QgKixwY21idW5kbGUsdmktPmNo YW5uZWxzKTsKKyAgVkFSX1NUQUNLKGludCwgICAgICAgICAgemVyb2J1bmRsZSx2aS0+Y2hhbm5l bHMpOworICBWQVJfU1RBQ0soaW50LCAgICAgICAgICBub256ZXJvLHZpLT5jaGFubmVscyk7Cisg IFZBUl9TVEFDSyhvZ2dfaW50MzJfdCAqLGZsb29ybWVtbyx2aS0+Y2hhbm5lbHMpOwogICAKICAg LyogcmVjb3ZlciB0aGUgc3BlY3RyYWwgZW52ZWxvcGU7IHN0b3JlIGl0IGluIHRoZSBQQ00gdmVj dG9yIGZvciBub3cgKi8KKyAgZm9yKGk9MCxqPTA7aTx2aS0+Y2hhbm5lbHM7aSsrKXsKKyAgICBp bnQgc3VibWFwPTA7CisgICAgaW50IGZsb29ybm87CisKKyAgICBpZihpbmZvLT5zdWJtYXBzPjEp IHN1Ym1hcD1pbmZvLT5jaG11eGxpc3RbaV07CisgICAgZmxvb3Jubz1pbmZvLT5zdWJtYXBsaXN0 W3N1Ym1hcF0uZmxvb3I7CisgICAgaiArPSAoY2ktPmZsb29yX3R5cGVbZmxvb3Jub10pPyBmbG9v cjFfbWVtb3NpemUoY2ktPmZsb29yX3BhcmFtW2Zsb29ybm9dKSA6CisJCQkJICAgIGZsb29yMF9t ZW1vc2l6ZShjaS0+Zmxvb3JfcGFyYW1bZmxvb3Jub10pOworICB9CisKKyB7LyordmxhIHNjb3Bl ICovCisgIFZBUl9TVEFDSyhvZ2dfaW50MzJfdCx0bXAsaik7CisgIG9nZ19pbnQzMl90ICpwPXRt cDsKICAgZm9yKGk9MDtpPHZpLT5jaGFubmVscztpKyspewogICAgIGludCBzdWJtYXA9MDsKICAg ICBpbnQgZmxvb3JubzsKQEAgLTEyNiwxMiArMTM5LDEyIEBAIGludCBtYXBwaW5nX2ludmVyc2Uo dm9yYmlzX2RzcF9zdGF0ZSAqdmQKICAgICB2aWY9Y2ktPmZsb29yX3BhcmFtW2Zsb29ybm9dOwog ICAgIGlmKGNpLT5mbG9vcl90eXBlW2Zsb29ybm9dKXsKICAgICAgIC8qIGZsb29yIDEgKi8KLSAg ICAgIGZsb29ybWVtb1tpXT1hbGxvY2Eoc2l6ZW9mKCpmbG9vcm1lbW9baV0pKmZsb29yMV9tZW1v c2l6ZSh2aWYpKTsKLSAgICAgIGZsb29ybWVtb1tpXT1mbG9vcjFfaW52ZXJzZTEodmQsdmlmLGZs b29ybWVtb1tpXSk7CisgICAgICBmbG9vcm1lbW9baV09Zmxvb3IxX2ludmVyc2UxKHZkLHZpZixw KTsKKyAgICAgIHAgKz0gZmxvb3IxX21lbW9zaXplKHZpZik7CiAgICAgfWVsc2V7CiAgICAgICAv KiBmbG9vciAwICovCi0gICAgICBmbG9vcm1lbW9baV09YWxsb2NhKHNpemVvZigqZmxvb3JtZW1v W2ldKSpmbG9vcjBfbWVtb3NpemUodmlmKSk7Ci0gICAgICBmbG9vcm1lbW9baV09Zmxvb3IwX2lu dmVyc2UxKHZkLHZpZixmbG9vcm1lbW9baV0pOworICAgICAgZmxvb3JtZW1vW2ldPWZsb29yMF9p bnZlcnNlMSh2ZCx2aWYscCk7CisgICAgICBwICs9IGZsb29yMF9tZW1vc2l6ZSh2aWYpOwogICAg IH0KICAgICBpZihmbG9vcm1lbW9baV0pCiAgICAgICBub256ZXJvW2ldPTE7CkBAIC0yMzAsNiAr MjQzLDggQEAgaW50IG1hcHBpbmdfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRlICp2ZAogICAvL2Zv cihqPTA7ajx2aS0+Y2hhbm5lbHM7aisrKQogICAvL19hbmFseXNpc19vdXRwdXQoImltZGN0Iixz ZXEraix2Yi0+cGNtW2pdLC0yNCxuLDAsMCk7CiAKKyB9LyotdmxhIHNjb3BlICovCisKICAgLyog YWxsIGRvbmUhICovCiAgIHJldHVybigwKTsKIH0KZGlmZiAtdXJwIC0tZXhjbHVkZT0uZ2l0IHRy ZW1vci0wMS9vcy5oIHRyZW1vci0wMi9vcy5oCi0tLSB0cmVtb3ItMDEvb3MuaAkyMDIxLTAzLTMw IDEzOjM1OjMyLjAwMDAwMDAwMCArMDMwMAorKysgdHJlbW9yLTAyL29zLmgJMjAyMS0wMy0zMCAx Njo0NDo1Ny4yNDAyODgzMzcgKzAzMDAKQEAgLTQxLDEwICs0MSwzMyBAQAogIyAgaW5jbHVkZSA8 bWFsbG9jLmg+CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfQUxMT0NBX0gKLSMgIGluY2x1ZGUgPGFs bG9jYS5oPgorI2lmIGRlZmluZWQgSEFWRV9BTExPQ0EKKworIyBpZmRlZiBfV0lOMzIKKyMgIGlu Y2x1ZGUgPG1hbGxvYy5oPgorIyAgZGVmaW5lIFZBUl9TVEFDSyh0eXBlLCB2YXIsIHNpemUpIHR5 cGUgKnZhciA9ICgodHlwZSopX2FsbG9jYShzaXplb2YodHlwZSkqKHNpemUpKSkKKyMgZWxzZQor IyAgaWZkZWYgSEFWRV9BTExPQ0FfSAorIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorIyAgZWxzZQor IyAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoX19BUk9TX18p ICYmIGRlZmluZWQoX19HTlVDX18pCisgLyogYnlwYXNzIF9fYWxsb2NhX2dldF9zdGFja19saW1p dCgpIGNhbGwgaW4gYWxsb2NhLmgKKyAgIGZyb20gb2xkIEFST1MgU0RLcywgZGlyZWN0bHkgdXNl IF9fYnVpbHRpbl9hbGxvY2EoKS4gKi8KKyMgICB1bmRlZiBhbGxvY2EKKyMgICBkZWZpbmUgYWxs b2NhIF9fYnVpbHRpbl9hbGxvY2EKKyMgIGVuZGlmCisjICBkZWZpbmUgVkFSX1NUQUNLKHR5cGUs IHZhciwgc2l6ZSkgdHlwZSAqdmFyID0gKCh0eXBlKikgYWxsb2NhKHNpemVvZih0eXBlKSooc2l6 ZSkpKQorIyBlbmRpZgorCisjZWxpZiBkZWZpbmVkIFZBUl9BUlJBWVMKKworIyAgZGVmaW5lIFZB Ul9TVEFDSyh0eXBlLCB2YXIsIHNpemUpIHR5cGUgdmFyW3NpemVdCisKICNlbHNlCi0jICBpbmNs dWRlIDxzdGRsaWIuaD4KKworI2Vycm9yICJFaXRoZXIgVkFSX0FSUkFZUyBvciBIQVZFX0FMTE9D QSBtdXN0IGJlIGRlZmluZWQgdG8gc2VsZWN0IHRoZSBzdGFjayBhbGxvY2F0aW9uIG1vZGUiCiAj ZW5kaWYKIAogI2lmZGVmIFVTRV9NRU1PUllfSApkaWZmIC11cnAgLS1leGNsdWRlPS5naXQgdHJl bW9yLTAxL3JlczAxMi5jIHRyZW1vci0wMi9yZXMwMTIuYwotLS0gdHJlbW9yLTAxL3JlczAxMi5j CTIwMjEtMDMtMzAgMTQ6NTA6MDQuODk3NzQzMzcyICswMzAwCisrKyB0cmVtb3ItMDIvcmVzMDEy LmMJMjAyMS0wMy0zMCAxNjo0NDo1Ny4yNDEyODgzMTAgKzAzMDAKQEAgLTEwNCwxMCArMTA0LDE0 IEBAIGludCByZXNfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRlICp2ZCx2b3IKICAgICAgIGNoPXVz ZWQ7CiAgICAgICAKICAgICAgIGlmKHVzZWQpeworCSNpZmRlZiBIQVZFX0FMTE9DQQogCWNoYXIg KipwYXJ0d29yZD0oY2hhciAqKilhbGxvY2EoY2gqc2l6ZW9mKCpwYXJ0d29yZCkpOwogCWZvcihq PTA7ajxjaDtqKyspCiAJICBwYXJ0d29yZFtqXT0oY2hhciAqKWFsbG9jYShwYXJ0d29yZHMqcGFy dGl0aW9uc19wZXJfd29yZCoKIAkJCQkgICAgIHNpemVvZigqcGFydHdvcmRbal0pKTsKKwkjZWxz ZSAvKiBWQVJfQVJSQVlTICovCisJY2hhciBwYXJ0d29yZFtjaF1bcGFydHdvcmRzKnBhcnRpdGlv bnNfcGVyX3dvcmRdOworCSNlbmRpZgogCQogCWZvcihzPTA7czxpbmZvLT5zdGFnZXM7cysrKXsK IAkgIApAQCAtMTc1LDcgKzE3OSw3IEBAIGludCByZXNfaW52ZXJzZSh2b3JiaXNfZHNwX3N0YXRl ICp2ZCx2b3IKICAgICAgIGlmKGk9PWNoKXJldHVybigwKTsgLyogbm8gbm9uemVybyB2ZWN0b3Jz ICovCiAgICAgICBlbHNlCiAgICAgIHsgLyogK3Njb3BlICovCi0gICAgICBjaGFyICpwYXJ0d29y ZD0oY2hhciAqKWFsbG9jYShwYXJ0d29yZHMqcGFydGl0aW9uc19wZXJfd29yZCpzaXplb2YoKnBh cnR3b3JkKSk7CisgICAgICBWQVJfU1RBQ0soY2hhcixwYXJ0d29yZCxwYXJ0d29yZHMqcGFydGl0 aW9uc19wZXJfd29yZCk7CiAgICAgICBzYW1wbGVzX3Blcl9wYXJ0aXRpb24vPWNoOwogICAgICAg CiAgICAgICBmb3Iocz0wO3M8aW5mby0+c3RhZ2VzO3MrKyl7Cg== --000000000000bb116705bec1ffca Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVm9yYmlzLWRl diBtYWlsaW5nIGxpc3QKVm9yYmlzLWRldkB4aXBoLm9yZwpodHRwOi8vbGlzdHMueGlwaC5vcmcv bWFpbG1hbi9saXN0aW5mby92b3JiaXMtZGV2Cg== --000000000000bb116705bec1ffca--