From mboxrd@z Thu Jan 1 00:00:00 1970 From: Namhyung Kim Subject: [PATCH 2/3] qemu: Implement virtio-pstore device Date: Sat, 20 Aug 2016 17:07:43 +0900 Message-ID: <20160820080744.10344-3-namhyung__17549.8651028194$1471680585$gmane$org@kernel.org> References: <20160820080744.10344-1-namhyung@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160820080744.10344-1-namhyung@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: virtio-dev@lists.oasis-open.org, kvm@vger.kernel.org, qemu-devel@nongnu.org, virtualization@lists.linux-foundation.org Cc: Tony Luck , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Kees Cook , "Michael S. Tsirkin" , Anton Vorontsov , LKML , Steven Rostedt , Minchan Kim , "Daniel P . Berrange" , Anthony Liguori , Colin Cross , Paolo Bonzini , Ingo Molnar List-Id: virtualization@lists.linuxfoundation.org QWRkIHZpcnRpbyBwc3RvcmUgZGV2aWNlIHRvIGFsbG93IGtlcm5lbCBsb2cgZmlsZXMgc2F2ZWQg b24gdGhlIGhvc3QuCkl0IHdpbGwgc2F2ZSB0aGUgbG9nIGZpbGVzIG9uIHRoZSBkaXJlY3Rvcnkg Z2l2ZW4gYnkgcHN0b3JlIGRldmljZQpvcHRpb24uCgogICQgcWVtdS1zeXN0ZW0teDg2XzY0IC1k ZXZpY2UgdmlydGlvLXBzdG9yZSxkaXJlY3Rvcnk9ZGlyLXh4IC4uLgoKICAoZ3Vlc3QpICMgZWNo byBjID4gL3Byb2Mvc3lzcnEtdHJpZ2dlcgoKICAkIGxzIGRpci14eAogIGRtZXNnLTEuZW5jLnog IGRtZXNnLTIuZW5jLnoKClRoZSBsb2cgZmlsZXMgYXJlIHVzdWFsbHkgY29tcHJlc3NlZCB1c2lu ZyB6bGliLiAgVXNlcnMgY2FuIHNlZSB0aGUgbG9nCm1lc3NhZ2VzIGRpcmVjdGx5IG9uIHRoZSBo b3N0IG9yIG9uIHRoZSBndWVzdCAodXNpbmcgcHN0b3JlIGZpbGVzeXN0ZW0pLgoKVGhlICdkaXJl Y3RvcnknIHByb3BlcnR5IGlzIHJlcXVpcmVkIGZvciB2aXJ0aW8tcHN0b3JlIGRldmljZSB0byB3 b3JrLgpJdCBhbHNvIGFkZHMgJ2J1ZnNpemUnIHByb3BlcnR5IHRvIHNldCBzaXplIG9mIHBzdG9y ZSBidWZlci4KCkNjOiBQYW9sbyBCb256aW5pIDxwYm9uemluaUByZWRoYXQuY29tPgpDYzogUmFk aW0gS3LEjW3DocWZIDxya3JjbWFyQHJlZGhhdC5jb20+CkNjOiAiTWljaGFlbCBTLiBUc2lya2lu IiA8bXN0QHJlZGhhdC5jb20+CkNjOiBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQGFtYXpvbi5j b20+CkNjOiBBbnRvbiBWb3JvbnRzb3YgPGFudG9uQGVub21zZy5vcmc+CkNjOiBDb2xpbiBDcm9z cyA8Y2Nyb3NzQGFuZHJvaWQuY29tPgpDYzogS2VlcyBDb29rIDxrZWVzY29va0BjaHJvbWl1bS5v cmc+CkNjOiBUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+CkNjOiBTdGV2ZW4gUm9zdGVk dCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KQ2M6IEluZ28gTW9sbmFyIDxtaW5nb0BrZXJuZWwub3Jn PgpDYzogTWluY2hhbiBLaW0gPG1pbmNoYW5Aa2VybmVsLm9yZz4KQ2M6IERhbmllbCBQLiBCZXJy YW5nZSA8YmVycmFuZ2VAcmVkaGF0LmNvbT4KQ2M6IGt2bUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IHFl bXUtZGV2ZWxAbm9uZ251Lm9yZwpDYzogdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRh dGlvbi5vcmcKU2lnbmVkLW9mZi1ieTogTmFtaHl1bmcgS2ltIDxuYW1oeXVuZ0BrZXJuZWwub3Jn PgotLS0KIGh3L3ZpcnRpby9NYWtlZmlsZS5vYmpzICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDIgKy0KIGh3L3ZpcnRpby92aXJ0aW8tcGNpLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAg NTIgKysKIGh3L3ZpcnRpby92aXJ0aW8tcGNpLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAg MTQgKwogaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuYyAgICAgICAgICAgICAgICAgICAgICB8IDY5 OSArKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2h3L3BjaS9wY2kuaCAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGluY2x1ZGUvaHcvdmlydGlvL3ZpcnRpby1wc3Rv cmUuaCAgICAgICAgICAgICAgfCAgMzYgKysKIGluY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51 eC92aXJ0aW9faWRzLmggICAgfCAgIDEgKwogaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4 L3ZpcnRpb19wc3RvcmUuaCB8ICA3NiArKysKIHFkZXYtbW9uaXRvci5jICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDEgKwogOSBmaWxlcyBjaGFuZ2VkLCA4ODEgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGh3L3ZpcnRpby92aXJ0aW8t cHN0b3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2h3L3ZpcnRpby92aXJ0aW8tcHN0 b3JlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgv dmlydGlvX3BzdG9yZS5oCgpkaWZmIC0tZ2l0IGEvaHcvdmlydGlvL01ha2VmaWxlLm9ianMgYi9o dy92aXJ0aW8vTWFrZWZpbGUub2JqcwppbmRleCAzZTJiMTc1Li5hYWU3MDgyIDEwMDY0NAotLS0g YS9ody92aXJ0aW8vTWFrZWZpbGUub2JqcworKysgYi9ody92aXJ0aW8vTWFrZWZpbGUub2JqcwpA QCAtNCw0ICs0LDQgQEAgY29tbW9uLW9iai15ICs9IHZpcnRpby1idXMubwogY29tbW9uLW9iai15 ICs9IHZpcnRpby1tbWlvLm8KIAogb2JqLXkgKz0gdmlydGlvLm8gdmlydGlvLWJhbGxvb24ubyAK LW9iai0kKENPTkZJR19MSU5VWCkgKz0gdmhvc3QubyB2aG9zdC1iYWNrZW5kLm8gdmhvc3QtdXNl ci5vCitvYmotJChDT05GSUdfTElOVVgpICs9IHZob3N0Lm8gdmhvc3QtYmFja2VuZC5vIHZob3N0 LXVzZXIubyB2aXJ0aW8tcHN0b3JlLm8KZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby92aXJ0aW8tcGNp LmMgYi9ody92aXJ0aW8vdmlydGlvLXBjaS5jCmluZGV4IDc1NWY5MjEuLmMxODQ4MjMgMTAwNjQ0 Ci0tLSBhL2h3L3ZpcnRpby92aXJ0aW8tcGNpLmMKKysrIGIvaHcvdmlydGlvL3ZpcnRpby1wY2ku YwpAQCAtMjQxNiw2ICsyNDE2LDU3IEBAIHN0YXRpYyBjb25zdCBUeXBlSW5mbyB2aXJ0aW9faG9z dF9wY2lfaW5mbyA9IHsKIH07CiAjZW5kaWYKIAorLyogdmlydGlvLXBzdG9yZS1wY2kgKi8KKwor c3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9wY2lfcmVhbGl6ZShWaXJ0SU9QQ0lQcm94eSAqdnBj aV9kZXYsIEVycm9yICoqZXJycCkKK3sKKyAgICBWaXJ0SU9Qc3RvcmVQQ0kgKnZwcyA9IFZJUlRJ T19QU1RPUkVfUENJKHZwY2lfZGV2KTsKKyAgICBEZXZpY2VTdGF0ZSAqdmRldiA9IERFVklDRSgm dnBzLT52ZGV2KTsKKyAgICBFcnJvciAqZXJyID0gTlVMTDsKKworICAgIHFkZXZfc2V0X3BhcmVu dF9idXModmRldiwgQlVTKCZ2cGNpX2Rldi0+YnVzKSk7CisgICAgb2JqZWN0X3Byb3BlcnR5X3Nl dF9ib29sKE9CSkVDVCh2ZGV2KSwgdHJ1ZSwgInJlYWxpemVkIiwgJmVycik7CisgICAgaWYgKGVy cikgeworICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgZXJyKTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KK30KKworc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9wY2lfY2xhc3NfaW5pdChP YmplY3RDbGFzcyAqa2xhc3MsIHZvaWQgKmRhdGEpCit7CisgICAgRGV2aWNlQ2xhc3MgKmRjID0g REVWSUNFX0NMQVNTKGtsYXNzKTsKKyAgICBWaXJ0aW9QQ0lDbGFzcyAqayA9IFZJUlRJT19QQ0lf Q0xBU1Moa2xhc3MpOworICAgIFBDSURldmljZUNsYXNzICpwY2lkZXZfayA9IFBDSV9ERVZJQ0Vf Q0xBU1Moa2xhc3MpOworCisgICAgay0+cmVhbGl6ZSA9IHZpcnRpb19wc3RvcmVfcGNpX3JlYWxp emU7CisgICAgc2V0X2JpdChERVZJQ0VfQ0FURUdPUllfTUlTQywgZGMtPmNhdGVnb3JpZXMpOwor CisgICAgcGNpZGV2X2stPnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfUkVESEFUX1FVTVJBTkVU OworICAgIHBjaWRldl9rLT5kZXZpY2VfaWQgPSBQQ0lfREVWSUNFX0lEX1ZJUlRJT19QU1RPUkU7 CisgICAgcGNpZGV2X2stPnJldmlzaW9uID0gVklSVElPX1BDSV9BQklfVkVSU0lPTjsKKyAgICBw Y2lkZXZfay0+Y2xhc3NfaWQgPSBQQ0lfQ0xBU1NfT1RIRVJTOworfQorCitzdGF0aWMgdm9pZCB2 aXJ0aW9fcHN0b3JlX3BjaV9pbnN0YW5jZV9pbml0KE9iamVjdCAqb2JqKQoreworICAgIFZpcnRJ T1BzdG9yZVBDSSAqZGV2ID0gVklSVElPX1BTVE9SRV9QQ0kob2JqKTsKKworICAgIHZpcnRpb19p bnN0YW5jZV9pbml0X2NvbW1vbihvYmosICZkZXYtPnZkZXYsIHNpemVvZihkZXYtPnZkZXYpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFX1ZJUlRJT19QU1RPUkUpOworICAg IG9iamVjdF9wcm9wZXJ0eV9hZGRfYWxpYXMob2JqLCAiZGlyZWN0b3J5IiwgT0JKRUNUKCZkZXYt PnZkZXYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeSIsICZlcnJv cl9hYm9ydCk7CisgICAgb2JqZWN0X3Byb3BlcnR5X2FkZF9hbGlhcyhvYmosICJidWZzaXplIiwg T0JKRUNUKCZkZXYtPnZkZXYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZnNp emUiLCAmZXJyb3JfYWJvcnQpOworfQorCitzdGF0aWMgY29uc3QgVHlwZUluZm8gdmlydGlvX3Bz dG9yZV9wY2lfaW5mbyA9IHsKKyAgICAubmFtZSAgICAgICAgICA9IFRZUEVfVklSVElPX1BTVE9S RV9QQ0ksCisgICAgLnBhcmVudCAgICAgICAgPSBUWVBFX1ZJUlRJT19QQ0ksCisgICAgLmluc3Rh bmNlX3NpemUgPSBzaXplb2YoVmlydElPUHN0b3JlUENJKSwKKyAgICAuaW5zdGFuY2VfaW5pdCA9 IHZpcnRpb19wc3RvcmVfcGNpX2luc3RhbmNlX2luaXQsCisgICAgLmNsYXNzX2luaXQgICAgPSB2 aXJ0aW9fcHN0b3JlX3BjaV9jbGFzc19pbml0LAorfTsKKwogLyogdmlydGlvLXBjaS1idXMgKi8K IAogc3RhdGljIHZvaWQgdmlydGlvX3BjaV9idXNfbmV3KFZpcnRpb0J1c1N0YXRlICpidXMsIHNp emVfdCBidXNfc2l6ZSwKQEAgLTI0ODUsNiArMjUzNiw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19w Y2lfcmVnaXN0ZXJfdHlwZXModm9pZCkKICNpZmRlZiBDT05GSUdfVkhPU1RfU0NTSQogICAgIHR5 cGVfcmVnaXN0ZXJfc3RhdGljKCZ2aG9zdF9zY3NpX3BjaV9pbmZvKTsKICNlbmRpZgorICAgIHR5 cGVfcmVnaXN0ZXJfc3RhdGljKCZ2aXJ0aW9fcHN0b3JlX3BjaV9pbmZvKTsKIH0KIAogdHlwZV9p bml0KHZpcnRpb19wY2lfcmVnaXN0ZXJfdHlwZXMpCmRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmly dGlvLXBjaS5oIGIvaHcvdmlydGlvL3ZpcnRpby1wY2kuaAppbmRleCAyNWZiZjhhLi4zNTRiMmI3 IDEwMDY0NAotLS0gYS9ody92aXJ0aW8vdmlydGlvLXBjaS5oCisrKyBiL2h3L3ZpcnRpby92aXJ0 aW8tcGNpLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpZmRlZiBDT05GSUdfVkhPU1RfU0NTSQogI2lu Y2x1ZGUgImh3L3ZpcnRpby92aG9zdC1zY3NpLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJody92aXJ0 aW8vdmlydGlvLXBzdG9yZS5oIgogCiB0eXBlZGVmIHN0cnVjdCBWaXJ0SU9QQ0lQcm94eSBWaXJ0 SU9QQ0lQcm94eTsKIHR5cGVkZWYgc3RydWN0IFZpcnRJT0Jsa1BDSSBWaXJ0SU9CbGtQQ0k7CkBA IC00NCw2ICs0NSw3IEBAIHR5cGVkZWYgc3RydWN0IFZpcnRJT0lucHV0UENJIFZpcnRJT0lucHV0 UENJOwogdHlwZWRlZiBzdHJ1Y3QgVmlydElPSW5wdXRISURQQ0kgVmlydElPSW5wdXRISURQQ0k7 CiB0eXBlZGVmIHN0cnVjdCBWaXJ0SU9JbnB1dEhvc3RQQ0kgVmlydElPSW5wdXRIb3N0UENJOwog dHlwZWRlZiBzdHJ1Y3QgVmlydElPR1BVUENJIFZpcnRJT0dQVVBDSTsKK3R5cGVkZWYgc3RydWN0 IFZpcnRJT1BzdG9yZVBDSSBWaXJ0SU9Qc3RvcmVQQ0k7CiAKIC8qIHZpcnRpby1wY2ktYnVzICov CiAKQEAgLTMyNCw2ICszMjYsMTggQEAgc3RydWN0IFZpcnRJT0dQVVBDSSB7CiAgICAgVmlydElP R1BVIHZkZXY7CiB9OwogCisvKgorICogdmlydGlvLXBzdG9yZS1wY2k6IFRoaXMgZXh0ZW5kcyBW aXJ0aW9QQ0lQcm94eS4KKyAqLworI2RlZmluZSBUWVBFX1ZJUlRJT19QU1RPUkVfUENJICJ2aXJ0 aW8tcHN0b3JlLXBjaSIKKyNkZWZpbmUgVklSVElPX1BTVE9SRV9QQ0kob2JqKSBcCisgICAgICAg IE9CSkVDVF9DSEVDSyhWaXJ0SU9Qc3RvcmVQQ0ksIChvYmopLCBUWVBFX1ZJUlRJT19QU1RPUkVf UENJKQorCitzdHJ1Y3QgVmlydElPUHN0b3JlUENJIHsKKyAgICBWaXJ0SU9QQ0lQcm94eSBwYXJl bnRfb2JqOworICAgIFZpcnRJT1BzdG9yZSB2ZGV2OworfTsKKwogLyogVmlydGlvIEFCSSB2ZXJz aW9uLCBpZiB3ZSBpbmNyZW1lbnQgdGhpcywgd2UgYnJlYWsgdGhlIGd1ZXN0IGRyaXZlci4gKi8K ICNkZWZpbmUgVklSVElPX1BDSV9BQklfVkVSU0lPTiAgICAgICAgICAwCiAKZGlmZiAtLWdpdCBh L2h3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmMgYi9ody92aXJ0aW8vdmlydGlvLXBzdG9yZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZmI0YmUKLS0tIC9kZXYvbnVsbAor KysgYi9ody92aXJ0aW8vdmlydGlvLXBzdG9yZS5jCkBAIC0wLDAgKzEsNjk5IEBACisvKgorICog VmlydGlvIFBzdG9yZSBEZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgIExHIEVsZWN0 cm9uaWNzCisgKgorICogQXV0aG9yczoKKyAqICBOYW1oeXVuZyBLaW0gIDxuYW1oeXVuZ0BnbWFp bC5jb20+CisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdQTCwgdmVyc2lvbiAyIG9yIGxhdGVyLgorICogU2VlIHRoZSBDT1BZSU5HIGZpbGUg aW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5o PgorCisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvaW92LmgiCisjaW5j bHVkZSAicWVtdS1jb21tb24uaCIKKyNpbmNsdWRlICJxZW11L2N1dGlscy5oIgorI2luY2x1ZGUg InFlbXUvZXJyb3ItcmVwb3J0LmgiCisjaW5jbHVkZSAic3lzZW11L2t2bS5oIgorI2luY2x1ZGUg InFhcGkvdmlzaXRvci5oIgorI2luY2x1ZGUgInFhcGktZXZlbnQuaCIKKyNpbmNsdWRlICJpby9j aGFubmVsLXV0aWwuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgorCisjaW5jbHVkZSAiaHcvdmlydGlv L3ZpcnRpby5oIgorI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8tYnVzLmgiCisjaW5jbHVkZSAi aHcvdmlydGlvL3ZpcnRpby1hY2Nlc3MuaCIKKyNpbmNsdWRlICJody92aXJ0aW8vdmlydGlvLXBz dG9yZS5oIgorCisjZGVmaW5lIFBTVE9SRV9ERUZBVUxUX0JVRlNJWkUgICAoMTYgKiAxMDI0KQor I2RlZmluZSBQU1RPUkVfREVGQVVMVF9GSUxFX01BWCAgNQorCisvKiB0aGUgaW5kZXggc2hvdWxk IG1hdGNoIHRvIHRoZSB0eXBlIHZhbHVlICovCitzdGF0aWMgY29uc3QgY2hhciAqdmlydGlvX3Bz dG9yZV9maWxlX3ByZWZpeFtdID0geworICAgICJ1bmtub3duLSIsCQkvKiBWSVJUSU9fUFNUT1JF X1RZUEVfVU5LTk9XTiAqLworICAgICJkbWVzZy0iLAkJLyogVklSVElPX1BTVE9SRV9UWVBFX0RN RVNHICovCit9OworCitzdGF0aWMgY2hhciAqdmlydGlvX3BzdG9yZV90b19maWxlbmFtZShWaXJ0 SU9Qc3RvcmUgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdmlydGlvX3BzdG9yZV9yZXEgKnJlcSkKK3sKKyAgICBjb25zdCBjaGFyICpiYXNlbmFtZTsK KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaWQ7CisgICAgdW5zaWduZWQgaW50IHR5cGUgPSBsZTE2 X3RvX2NwdShyZXEtPnR5cGUpOworICAgIHVuc2lnbmVkIGludCBmbGFncyA9IGxlMzJfdG9fY3B1 KHJlcS0+ZmxhZ3MpOworCisgICAgaWYgKHR5cGUgPCBBUlJBWV9TSVpFKHZpcnRpb19wc3RvcmVf ZmlsZV9wcmVmaXgpKSB7CisgICAgICAgIGJhc2VuYW1lID0gdmlydGlvX3BzdG9yZV9maWxlX3By ZWZpeFt0eXBlXTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYXNlbmFtZSA9ICJ1bmtub3duLSI7 CisgICAgfQorCisgICAgaWQgPSBzLT5pZCsrOworICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYo IiVzLyVzJWxsdSVzIiwgcy0+ZGlyZWN0b3J5LCBiYXNlbmFtZSwgaWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmxhZ3MgJiBWSVJUSU9fUFNUT1JFX0ZMX0NPTVBSRVNTRUQgPyAiLmVu Yy56IiA6ICIiKTsKK30KKworc3RhdGljIGNoYXIgKnZpcnRpb19wc3RvcmVfZnJvbV9maWxlbmFt ZShWaXJ0SU9Qc3RvcmUgKnMsIGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2ZpbGVpbmZvICppbmZvKQorewor ICAgIGNoYXIgKmZpbGVuYW1lOworICAgIHVuc2lnbmVkIGludCBpZHg7CisKKyAgICBmaWxlbmFt ZSA9IGdfc3RyZHVwX3ByaW50ZigiJXMvJXMiLCBzLT5kaXJlY3RvcnksIG5hbWUpOworICAgIGlm IChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaWR4 ID0gMDsgaWR4IDwgQVJSQVlfU0laRSh2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4KTsgaWR4Kysp IHsKKyAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgobmFtZSwgdmlydGlvX3BzdG9yZV9maWxl X3ByZWZpeFtpZHhdKSkgeworICAgICAgICAgICAgaW5mby0+dHlwZSA9IGlkeDsKKyAgICAgICAg ICAgIG5hbWUgKz0gc3RybGVuKHZpcnRpb19wc3RvcmVfZmlsZV9wcmVmaXhbaWR4XSk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpZHggPT0gQVJSQVlf U0laRSh2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4KSkgeworICAgICAgICBnX2ZyZWUoZmlsZW5h bWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBxZW11X3N0cnRvdWxsKG5h bWUsIE5VTEwsIDAsICZpbmZvLT5pZCk7CisKKyAgICBpbmZvLT5mbGFncyA9IDA7CisgICAgaWYg KGdfc3RyX2hhc19zdWZmaXgobmFtZSwgIi5lbmMueiIpKSB7CisgICAgICAgIGluZm8tPmZsYWdz IHw9IFZJUlRJT19QU1RPUkVfRkxfQ09NUFJFU1NFRDsKKyAgICB9CisKKyAgICByZXR1cm4gZmls ZW5hbWU7Cit9CisKK3N0YXRpYyBpbnQgcHJlZml4X2lkeDsKK3N0YXRpYyBpbnQgcHJlZml4X2Nv dW50Oworc3RhdGljIGludCBwcmVmaXhfbGVuOworCitzdGF0aWMgaW50IGZpbHRlcl9wc3RvcmUo Y29uc3Qgc3RydWN0IGRpcmVudCAqZGUpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgcHJlZml4X2NvdW50OyBpKyspIHsKKyAgICAgICAgY29uc3QgY2hhciAqcHJlZml4ID0g dmlydGlvX3BzdG9yZV9maWxlX3ByZWZpeFtwcmVmaXhfaWR4ICsgaV07CisKKyAgICAgICAgaWYg KGdfc3RyX2hhc19wcmVmaXgoZGUtPmRfbmFtZSwgcHJlZml4KSkgeworICAgICAgICAgICAgcmV0 dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c29ydF9wc3RvcmUoY29uc3Qgc3RydWN0IGRpcmVudCAqKmEsIGNvbnN0IHN0cnVjdCBkaXJlbnQg KipiKQoreworICAgIHVpbnQ2NF90IGlkX2EsIGlkX2I7CisKKyAgICBxZW11X3N0cnRvdWxsKCgq YSktPmRfbmFtZSArIHByZWZpeF9sZW4sIE5VTEwsIDAsICZpZF9hKTsKKyAgICBxZW11X3N0cnRv dWxsKCgqYiktPmRfbmFtZSArIHByZWZpeF9sZW4sIE5VTEwsIDAsICZpZF9iKTsKKworICAgIHJl dHVybiBpZF9hIC0gaWRfYjsKK30KKworc3RhdGljIGludCByb3RhdGVfcHN0b3JlX2ZpbGUoVmly dElPUHN0b3JlICpzLCB1bnNpZ25lZCBzaG9ydCB0eXBlKQoreworICAgIGludCByZXQgPSAwOwor ICAgIGludCBpLCBudW07CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgc3RydWN0IGRpcmVudCAq KmZpbGVzOworCisgICAgaWYgKHR5cGUgPj0gQVJSQVlfU0laRSh2aXJ0aW9fcHN0b3JlX2ZpbGVf cHJlZml4KSkgeworICAgICAgICB0eXBlID0gVklSVElPX1BTVE9SRV9UWVBFX1VOS05PV047Cisg ICAgfQorCisgICAgcHJlZml4X2lkeCA9IHR5cGU7CisgICAgcHJlZml4X2xlbiA9IHN0cmxlbih2 aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4W3R5cGVdKTsKKyAgICBwcmVmaXhfY291bnQgPSAxOyAg Lyogb25seSBzY2FuIGN1cnJlbnQgdHlwZSAqLworCisgICAgLyogZGVsZXRlIHRoZSBvbGRlc3Qg ZmlsZSBpbiB0aGUgc2FtZSB0eXBlICovCisgICAgbnVtID0gc2NhbmRpcihzLT5kaXJlY3Rvcnks ICZmaWxlcywgZmlsdGVyX3BzdG9yZSwgc29ydF9wc3RvcmUpOworICAgIGlmIChudW0gPCAwKQor ICAgICAgICByZXR1cm4gbnVtOworICAgIGlmIChudW0gPCAoaW50KXMtPmZpbGVfbWF4KQorICAg ICAgICBnb3RvIG91dDsKKworICAgIGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmKCIlcy8lcyIs IHMtPmRpcmVjdG9yeSwgZmlsZXNbMF0tPmRfbmFtZSk7CisgICAgaWYgKGZpbGVuYW1lID09IE5V TEwpIHsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAg IHJldCA9IHVubGluayhmaWxlbmFtZSk7CisKK291dDoKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVt OyBpKyspIHsKKyAgICAgICAgZ19mcmVlKGZpbGVzW2ldKTsKKyAgICB9CisgICAgZ19mcmVlKGZp bGVzKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpcnRpb19wc3Rv cmVfZG9fb3BlbihWaXJ0SU9Qc3RvcmUgKnMpCit7CisgICAgLyogc2NhbiBhbGwgcHN0b3JlIGZp bGVzICovCisgICAgcHJlZml4X2lkeCA9IDA7CisgICAgcHJlZml4X2NvdW50ID0gQVJSQVlfU0la RSh2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4KTsKKworICAgIHMtPmZpbGVfaWR4ID0gMDsKKyAg ICBzLT5udW1fZmlsZSA9IHNjYW5kaXIocy0+ZGlyZWN0b3J5LCAmcy0+ZmlsZXMsIGZpbHRlcl9w c3RvcmUsIGFscGhhc29ydCk7CisKKyAgICByZXR1cm4gcy0+bnVtX2ZpbGUgPj0gMCA/IDAgOiAt MTsKK30KKworc3RhdGljIHNzaXplX3QgdmlydGlvX3BzdG9yZV9kb19jbG9zZShWaXJ0SU9Qc3Rv cmUgKnMpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bnVtX2ZpbGU7 IGkrKykgeworICAgICAgICBnX2ZyZWUocy0+ZmlsZXNbaV0pOworICAgIH0KKyAgICBnX2ZyZWUo cy0+ZmlsZXMpOworICAgIHMtPmZpbGVzID0gTlVMTDsKKworICAgIHMtPm51bV9maWxlID0gMDsK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdmlydGlvX3BzdG9yZV9kb19lcmFz ZShWaXJ0SU9Qc3RvcmUgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSAqcmVxKQoreworICAgIGNoYXIgKmZpbGVuYW1lOwor ICAgIGludCByZXQ7CisKKyAgICBmaWxlbmFtZSA9IHZpcnRpb19wc3RvcmVfdG9fZmlsZW5hbWUo cywgcmVxKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwor CisgICAgcmV0ID0gdW5saW5rKGZpbGVuYW1lKTsKKworICAgIGdfZnJlZShmaWxlbmFtZSk7Cisg ICAgcmV0dXJuIHJldDsKK30KKworc3RydWN0IHBzdG9yZV9yZWFkX2FyZyB7CisgICAgVmlydElP UHN0b3JlICp2cHM7CisgICAgVmlydFF1ZXVlRWxlbWVudCAqZWxlbTsKKyAgICBzdHJ1Y3Qgdmly dGlvX3BzdG9yZV9maWxlaW5mbyBpbmZvOworICAgIFFJT0NoYW5uZWwgKmlvYzsKK307CisKK3N0 YXRpYyBnYm9vbGVhbiBwc3RvcmVfYXN5bmNfcmVhZF9mbihRSU9DaGFubmVsICppb2MsIEdJT0Nv bmRpdGlvbiBjb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBzdHJ1Y3QgcHN0b3JlX3JlYWRfYXJnICpyYXJnID0gZGF0 YTsKKyAgICBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9maWxlaW5mbyAqaW5mbyA9ICZyYXJnLT5pbmZv OworICAgIFZpcnRJT1BzdG9yZSAqdnBzID0gcmFyZy0+dnBzOworICAgIFZpcnRRdWV1ZUVsZW1l bnQgKmVsZW0gPSByYXJnLT5lbGVtOworICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyByZXM7 CisgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZihyZXMpICsgc2l6ZW9mKCppbmZvKTsKKyAgICBz dHJ1Y3QgaW92ZWMgKnNnID0gZWxlbS0+aW5fc2c7CisgICAgdW5zaWduZWQgaW50IHNnX251bSA9 IGVsZW0tPmluX251bTsKKyAgICBFcnJvciAqZXJyID0gTlVMTDsKKyAgICBzc2l6ZV90IGxlbjsK KyAgICBpbnQgcmV0OworCisgICAgLyogc2tpcCByZXMgYW5kIGZpbGVpbmZvICovCisgICAgaW92 X2Rpc2NhcmRfZnJvbnQoJnNnLCAmc2dfbnVtLCBzaXplb2YocmVzKSArIHNpemVvZigqaW5mbykp OworCisgICAgbGVuID0gcWlvX2NoYW5uZWxfcmVhZHYocmFyZy0+aW9jLCBzZywgc2dfbnVtLCAm ZXJyKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKSB7 CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICB9CisgICAgICAgIHJldCA9IC0xOworICAg IH0gZWxzZSB7CisgICAgICAgIGluZm8tPmxlbiA9IGNwdV90b19sZTMyKGxlbik7CisgICAgICAg IHJldCA9IDA7CisgICAgfQorCisgICAgcmVzLmNtZCAgPSBjcHVfdG9fbGUxNihWSVJUSU9fUFNU T1JFX0NNRF9SRUFEKTsKKyAgICByZXMudHlwZSA9IGNwdV90b19sZTE2KFZJUlRJT19QU1RPUkVf VFlQRV9VTktOT1dOKTsKKyAgICByZXMucmV0ICA9IGNwdV90b19sZTMyKHJldCk7CisKKyAgICAv KiBub3cgY29weSByZXMgYW5kIGZpbGVpbmZvICovCisgICAgaW92X2Zyb21fYnVmKGVsZW0tPmlu X3NnLCBlbGVtLT5pbl9udW0sIDAsICZyZXMsIHNpemVvZihyZXMpKTsKKyAgICBpb3ZfZnJvbV9i dWYoZWxlbS0+aW5fc2csIGVsZW0tPmluX251bSwgc2l6ZW9mKHJlcyksIGluZm8sIHNpemVvZigq aW5mbykpOworCisgICAgbGVuICs9IG9mZnNldDsKKyAgICB2aXJ0cXVldWVfcHVzaCh2cHMtPnJ2 cSwgZWxlbSwgbGVuKTsKKyAgICB2aXJ0aW9fbm90aWZ5KFZJUlRJT19ERVZJQ0UodnBzKSwgdnBz LT5ydnEpOworCisgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKK30KKworc3RhdGljIHZvaWQg ZnJlZV9yYXJnX2ZuKGdwb2ludGVyIGRhdGEpCit7CisgICAgc3RydWN0IHBzdG9yZV9yZWFkX2Fy ZyAqcmFyZyA9IGRhdGE7CisKKyAgICBxaW9fY2hhbm5lbF9jbG9zZShyYXJnLT5pb2MsIE5VTEwp OworCisgICAgZ19mcmVlKHJhcmctPmVsZW0pOworICAgIGdfZnJlZShyYXJnKTsKK30KKworc3Rh dGljIHNzaXplX3QgdmlydGlvX3BzdG9yZV9kb19yZWFkKFZpcnRJT1BzdG9yZSAqcywgVmlydFF1 ZXVlRWxlbWVudCAqZWxlbSkKK3sKKyAgICBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CisgICAgaW50 IGZkLCBpZHg7CisgICAgc3RydWN0IHN0YXQgc3RidWY7CisgICAgc3RydWN0IHBzdG9yZV9yZWFk X2FyZyAqcmFyZyA9IE5VTEw7CisgICAgRXJyb3IgKmVyciA9IE5VTEw7CisgICAgaW50IHJldCA9 IC0xOworCisgICAgaWYgKHMtPmZpbGVfaWR4ID49IHMtPm51bV9maWxlKSB7CisgICAgICAgIHJl dHVybiAwOworICAgIH0KKworICAgIHJhcmcgPSBnX21hbGxvYyhzaXplb2YoKnJhcmcpKTsKKyAg ICBpZiAocmFyZyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBp ZHggPSBzLT5maWxlX2lkeCsrOworICAgIGZpbGVuYW1lID0gdmlydGlvX3BzdG9yZV9mcm9tX2Zp bGVuYW1lKHMsIHMtPmZpbGVzW2lkeF0tPmRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmcmFyZy0+aW5mbyk7CisgICAgaWYgKGZpbGVuYW1lID09IE5V TEwpIHsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgZmQgPSBvcGVuKGZpbGVuYW1l LCBPX1JET05MWSk7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBlcnJvcl9yZXBvcnQoImNh bm5vdCBvcGVuICVzIiwgZmlsZW5hbWUpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAg ICBpZiAoZnN0YXQoZmQsICZzdGJ1ZikgPCAwKSB7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0K KworICAgIHJhcmctPnZwcyAgICAgICAgICAgID0gczsKKyAgICByYXJnLT5lbGVtICAgICAgICAg ICA9IGVsZW07CisgICAgcmFyZy0+aW5mby5pZCAgICAgICAgPSBjcHVfdG9fbGU2NChyYXJnLT5p bmZvLmlkKTsKKyAgICByYXJnLT5pbmZvLnR5cGUgICAgICA9IGNwdV90b19sZTE2KHJhcmctPmlu Zm8udHlwZSk7CisgICAgcmFyZy0+aW5mby5mbGFncyAgICAgPSBjcHVfdG9fbGUzMihyYXJnLT5p bmZvLmZsYWdzKTsKKyAgICByYXJnLT5pbmZvLnRpbWVfc2VjICA9IGNwdV90b19sZTY0KHN0YnVm LnN0X2N0aW0udHZfc2VjKTsKKyAgICByYXJnLT5pbmZvLnRpbWVfbnNlYyA9IGNwdV90b19sZTMy KHN0YnVmLnN0X2N0aW0udHZfbnNlYyk7CisKKyAgICByYXJnLT5pb2MgPSBxaW9fY2hhbm5lbF9u ZXdfZmQoZmQsICZlcnIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgZXJyb3JfcmVwb3J0Zl9l cnIoZXJyLCAiY2Fubm90IGNyZWF0ZSBpbyBjaGFubmVsOiAiKTsKKyAgICAgICAgZ290byBvdXQ7 CisgICAgfQorCisgICAgcWlvX2NoYW5uZWxfc2V0X2Jsb2NraW5nKHJhcmctPmlvYywgZmFsc2Us ICZlcnIpOworICAgIHFpb19jaGFubmVsX2FkZF93YXRjaChyYXJnLT5pb2MsIEdfSU9fSU4sIHBz dG9yZV9hc3luY19yZWFkX2ZuLCByYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVl X3JhcmdfZm4pOworICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgcmV0dXJuIDE7CisKK291dDoK KyAgICBnX2ZyZWUoZmlsZW5hbWUpOworICAgIGdfZnJlZShyYXJnKTsKKworICAgIHJldHVybiBy ZXQ7Cit9CisKK3N0cnVjdCBwc3RvcmVfd3JpdGVfYXJnIHsKKyAgICBWaXJ0SU9Qc3RvcmUgKnZw czsKKyAgICBWaXJ0UXVldWVFbGVtZW50ICplbGVtOworICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3Jl X3JlcSAqcmVxOworICAgIFFJT0NoYW5uZWwgKmlvYzsKK307CisKK3N0YXRpYyBnYm9vbGVhbiBw c3RvcmVfYXN5bmNfd3JpdGVfZm4oUUlPQ2hhbm5lbCAqaW9jLCBHSU9Db25kaXRpb24gY29uZGl0 aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRh KQoreworICAgIHN0cnVjdCBwc3RvcmVfd3JpdGVfYXJnICp3YXJnID0gZGF0YTsKKyAgICBWaXJ0 SU9Qc3RvcmUgKnZwcyA9IHdhcmctPnZwczsKKyAgICBWaXJ0UXVldWVFbGVtZW50ICplbGVtID0g d2FyZy0+ZWxlbTsKKyAgICBzdHJ1Y3QgaW92ZWMgKnNnID0gZWxlbS0+b3V0X3NnOworICAgIHVu c2lnbmVkIGludCBzZ19udW0gPSBlbGVtLT5vdXRfbnVtOworICAgIHN0cnVjdCB2aXJ0aW9fcHN0 b3JlX3JlcyByZXM7CisgICAgRXJyb3IgKmVyciA9IE5VTEw7CisgICAgc3NpemVfdCBsZW47Cisg ICAgaW50IHJldDsKKworICAgIC8qIHdlIGFscmVhZHkgY29uc3VtZWQgdGhlIHJlcSAqLworICAg IGlvdl9kaXNjYXJkX2Zyb250KCZzZywgJnNnX251bSwgc2l6ZW9mKCp3YXJnLT5yZXEpKTsKKwor ICAgIGxlbiA9IHFpb19jaGFubmVsX3dyaXRldih3YXJnLT5pb2MsIHNnLCBzZ19udW0sICZlcnIp OworICAgIGlmIChsZW4gPCAwKSB7CisgICAgICAgIHJldCA9IC0xOworICAgIH0gZWxzZSB7Cisg ICAgICAgIHJldCA9IDA7CisgICAgfQorCisgICAgcmVzLmNtZCAgPSBjcHVfdG9fbGUxNihWSVJU SU9fUFNUT1JFX0NNRF9XUklURSk7CisgICAgcmVzLnR5cGUgPSB3YXJnLT5yZXEtPnR5cGU7Cisg ICAgcmVzLnJldCAgPSBjcHVfdG9fbGUzMihyZXQpOworCisgICAgLyogdGVsbCB0aGUgcmVzdWx0 IHRvIGd1ZXN0ICovCisgICAgaW92X2Zyb21fYnVmKGVsZW0tPmluX3NnLCBlbGVtLT5pbl9udW0s IDAsICZyZXMsIHNpemVvZihyZXMpKTsKKworICAgIHZpcnRxdWV1ZV9wdXNoKHZwcy0+d3ZxLCBl bGVtLCBzaXplb2YocmVzKSk7CisgICAgdmlydGlvX25vdGlmeShWSVJUSU9fREVWSUNFKHZwcyks IHZwcy0+d3ZxKTsKKworICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Cit9CisKK3N0YXRpYyB2 b2lkIGZyZWVfd2FyZ19mbihncG9pbnRlciBkYXRhKQoreworICAgIHN0cnVjdCBwc3RvcmVfd3Jp dGVfYXJnICp3YXJnID0gZGF0YTsKKworICAgIHFpb19jaGFubmVsX2Nsb3NlKHdhcmctPmlvYywg TlVMTCk7CisKKyAgICBnX2ZyZWUod2FyZy0+ZWxlbSk7CisgICAgZ19mcmVlKHdhcmcpOworfQor CitzdGF0aWMgc3NpemVfdCB2aXJ0aW9fcHN0b3JlX2RvX3dyaXRlKFZpcnRJT1BzdG9yZSAqcywg VmlydFF1ZXVlRWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXEpCit7CisgICAgdW5zaWduZWQgc2hv cnQgdHlwZSA9IGxlMTZfdG9fY3B1KHJlcS0+dHlwZSk7CisgICAgY2hhciAqZmlsZW5hbWUgPSBO VUxMOworICAgIGludCBmZDsKKyAgICBpbnQgZmxhZ3MgPSBPX1dST05MWSB8IE9fQ1JFQVQgfCBP X1RSVU5DOworICAgIHN0cnVjdCBwc3RvcmVfd3JpdGVfYXJnICp3YXJnID0gTlVMTDsKKyAgICBF cnJvciAqZXJyID0gTlVMTDsKKyAgICBpbnQgcmV0ID0gLTE7CisKKyAgICAvKiBkbyBub3Qga2Vl cCBzYW1lIHR5cGUgb2YgZmlsZXMgbW9yZSB0aGFuICdmaWxlLW1heCcgKi8KKyAgICByb3RhdGVf cHN0b3JlX2ZpbGUocywgdHlwZSk7CisKKyAgICBmaWxlbmFtZSA9IHZpcnRpb19wc3RvcmVfdG9f ZmlsZW5hbWUocywgcmVxKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICBy ZXR1cm4gLTE7CisgICAgfQorCisgICAgd2FyZyA9IGdfbWFsbG9jKHNpemVvZigqd2FyZykpOwor ICAgIGlmICh3YXJnID09IE5VTEwpIHsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAg ZmQgPSBvcGVuKGZpbGVuYW1lLCBmbGFncywgMDY0NCk7CisgICAgaWYgKGZkIDwgMCkgeworICAg ICAgICBlcnJvcl9yZXBvcnQoImNhbm5vdCBvcGVuICVzIiwgZmlsZW5hbWUpOworICAgICAgICBy ZXQgPSBmZDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgd2FyZy0+dnBzICAgICAg ICAgICAgPSBzOworICAgIHdhcmctPmVsZW0gICAgICAgICAgID0gZWxlbTsKKyAgICB3YXJnLT5y ZXEgICAgICAgICAgICA9IHJlcTsKKworICAgIHdhcmctPmlvYyA9IHFpb19jaGFubmVsX25ld19m ZChmZCwgJmVycik7CisgICAgaWYgKGVycikgeworICAgICAgICBlcnJvcl9yZXBvcnRmX2Vycihl cnIsICJjYW5ub3QgY3JlYXRlIGlvIGNoYW5uZWw6ICIpOworICAgICAgICBnb3RvIG91dDsKKyAg ICB9CisKKyAgICBxaW9fY2hhbm5lbF9zZXRfYmxvY2tpbmcod2FyZy0+aW9jLCBmYWxzZSwgJmVy cik7CisgICAgcWlvX2NoYW5uZWxfYWRkX3dhdGNoKHdhcmctPmlvYywgR19JT19PVVQsIHBzdG9y ZV9hc3luY193cml0ZV9mbiwgd2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV93 YXJnX2ZuKTsKKyAgICBnX2ZyZWUoZmlsZW5hbWUpOworICAgIHJldHVybiAxOworCitvdXQ6Cisg ICAgZ19mcmVlKGZpbGVuYW1lKTsKKyAgICBnX2ZyZWUod2FyZyk7CisgICAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9oYW5kbGVfaW8oVmlydElPRGV2aWNlICp2 ZGV2LCBWaXJ0UXVldWUgKnZxKQoreworICAgIFZpcnRJT1BzdG9yZSAqcyA9IFZJUlRJT19QU1RP UkUodmRldik7CisgICAgVmlydFF1ZXVlRWxlbWVudCAqZWxlbTsKKyAgICBzdHJ1Y3QgdmlydGlv X3BzdG9yZV9yZXEgcmVxOworICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyByZXM7CisgICAg c3NpemVfdCBsZW4gPSAwOworICAgIGludCByZXQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAg IGVsZW0gPSB2aXJ0cXVldWVfcG9wKHZxLCBzaXplb2YoVmlydFF1ZXVlRWxlbWVudCkpOworICAg ICAgICBpZiAoIWVsZW0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg ICAgIGlmIChlbGVtLT5vdXRfbnVtIDwgMSB8fCBlbGVtLT5pbl9udW0gPCAxKSB7CisgICAgICAg ICAgICBlcnJvcl9yZXBvcnQoInJlcXVlc3Qgb3IgcmVzcG9uc2UgYnVmZmVyIGlzIG1pc3Npbmci KTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZWxlbS0+ b3V0X251bSA+IDIgfHwgZWxlbS0+aW5fbnVtID4gMykgeworICAgICAgICAgICAgZXJyb3JfcmVw b3J0KCJpbnZhbGlkIG51bWJlciBvZiBpbnB1dC9vdXRwdXQgYnVmZmVyIik7CisgICAgICAgICAg ICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgbGVuID0gaW92X3RvX2J1ZihlbGVtLT5v dXRfc2csIGVsZW0tPm91dF9udW0sIDAsICZyZXEsIHNpemVvZihyZXEpKTsKKyAgICAgICAgaWYg KGxlbiAhPSAoc3NpemVfdClzaXplb2YocmVxKSkgeworICAgICAgICAgICAgZXJyb3JfcmVwb3J0 KCJpbnZhbGlkIHJlcXVlc3Qgc2l6ZTogJWxkIiwgKGxvbmcpbGVuKTsKKyAgICAgICAgICAgIGV4 aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzLmNtZCAgPSByZXEuY21kOworICAgICAgICBy ZXMudHlwZSA9IHJlcS50eXBlOworCisgICAgICAgIHN3aXRjaCAobGUxNl90b19jcHUocmVxLmNt ZCkpIHsKKyAgICAgICAgY2FzZSBWSVJUSU9fUFNUT1JFX0NNRF9PUEVOOgorICAgICAgICAgICAg cmV0ID0gdmlydGlvX3BzdG9yZV9kb19vcGVuKHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgVklSVElPX1BTVE9SRV9DTURfQ0xPU0U6CisgICAgICAgICAgICByZXQgPSB2aXJ0 aW9fcHN0b3JlX2RvX2Nsb3NlKHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug VklSVElPX1BTVE9SRV9DTURfRVJBU0U6CisgICAgICAgICAgICByZXQgPSB2aXJ0aW9fcHN0b3Jl X2RvX2VyYXNlKHMsICZyZXEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVklS VElPX1BTVE9SRV9DTURfUkVBRDoKKyAgICAgICAgICAgIHJldCA9IHZpcnRpb19wc3RvcmVfZG9f cmVhZChzLCBlbGVtKTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gMSkgeworICAgICAgICAgICAg ICAgIC8qIGFzeW5jIGNoYW5uZWwgaW8gKi8KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZJUlRJT19QU1RP UkVfQ01EX1dSSVRFOgorICAgICAgICAgICAgcmV0ID0gdmlydGlvX3BzdG9yZV9kb193cml0ZShz LCBlbGVtLCAmcmVxKTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gMSkgeworICAgICAgICAgICAg ICAgIC8qIGFzeW5jIGNoYW5uZWwgaW8gKi8KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgcmV0ID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg IHJlcy5yZXQgPSByZXQ7CisKKyAgICAgICAgaW92X2Zyb21fYnVmKGVsZW0tPmluX3NnLCBlbGVt LT5pbl9udW0sIDAsICZyZXMsIHNpemVvZihyZXMpKTsKKyAgICAgICAgdmlydHF1ZXVlX3B1c2go dnEsIGVsZW0sIHNpemVvZihyZXMpICsgbGVuKTsKKworICAgICAgICB2aXJ0aW9fbm90aWZ5KHZk ZXYsIHZxKTsKKyAgICAgICAgZ19mcmVlKGVsZW0pOworCisgICAgICAgIGlmIChyZXQgPCAwKSB7 CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IHZpcnRpb19wc3RvcmVfZGV2aWNlX3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3IgKipl cnJwKQoreworICAgIFZpcnRJT0RldmljZSAqdmRldiA9IFZJUlRJT19ERVZJQ0UoZGV2KTsKKyAg ICBWaXJ0SU9Qc3RvcmUgKnMgPSBWSVJUSU9fUFNUT1JFKGRldik7CisKKyAgICB2aXJ0aW9faW5p dCh2ZGV2LCAidmlydGlvLXBzdG9yZSIsIFZJUlRJT19JRF9QU1RPUkUsCisgICAgICAgICAgICAg ICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZykpOworCisgICAgcy0+aWQgPSAx OworCisgICAgaWYgKCFzLT5idWZzaXplKQorICAgICAgICBzLT5idWZzaXplID0gUFNUT1JFX0RF RkFVTFRfQlVGU0laRTsKKyAgICBpZiAoIXMtPmZpbGVfbWF4KQorICAgICAgICBzLT5maWxlX21h eCA9IFBTVE9SRV9ERUZBVUxUX0ZJTEVfTUFYOworCisgICAgcy0+cnZxID0gdmlydGlvX2FkZF9x dWV1ZSh2ZGV2LCAxMjgsIHZpcnRpb19wc3RvcmVfaGFuZGxlX2lvKTsKKyAgICBzLT53dnEgPSB2 aXJ0aW9fYWRkX3F1ZXVlKHZkZXYsIDEyOCwgdmlydGlvX3BzdG9yZV9oYW5kbGVfaW8pOworfQor CitzdGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX2RldmljZV91bnJlYWxpemUoRGV2aWNlU3RhdGUg KmRldiwgRXJyb3IgKiplcnJwKQoreworICAgIFZpcnRJT0RldmljZSAqdmRldiA9IFZJUlRJT19E RVZJQ0UoZGV2KTsKKworICAgIHZpcnRpb19jbGVhbnVwKHZkZXYpOworfQorCitzdGF0aWMgdm9p ZCB2aXJ0aW9fcHN0b3JlX2dldF9jb25maWcoVmlydElPRGV2aWNlICp2ZGV2LCB1aW50OF90ICpj b25maWdfZGF0YSkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKmRldiA9IFZJUlRJT19QU1RPUkUodmRl dik7CisgICAgc3RydWN0IHZpcnRpb19wc3RvcmVfY29uZmlnIGNvbmZpZzsKKworICAgIGNvbmZp Zy5idWZzaXplID0gY3B1X3RvX2xlMzIoZGV2LT5idWZzaXplKTsKKworICAgIG1lbWNweShjb25m aWdfZGF0YSwgJmNvbmZpZywgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZykpOwor fQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX3NldF9jb25maWcoVmlydElPRGV2aWNlICp2 ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qg KmNvbmZpZ19kYXRhKQoreworICAgIFZpcnRJT1BzdG9yZSAqZGV2ID0gVklSVElPX1BTVE9SRSh2 ZGV2KTsKKyAgICBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcgY29uZmlnOworCisgICAgbWVt Y3B5KCZjb25maWcsIGNvbmZpZ19kYXRhLCBzaXplb2Yoc3RydWN0IHZpcnRpb19wc3RvcmVfY29u ZmlnKSk7CisKKyAgICBkZXYtPmJ1ZnNpemUgPSBsZTMyX3RvX2NwdShjb25maWcuYnVmc2l6ZSk7 Cit9CisKK3N0YXRpYyB1aW50NjRfdCBnZXRfZmVhdHVyZXMoVmlydElPRGV2aWNlICp2ZGV2LCB1 aW50NjRfdCBmLCBFcnJvciAqKmVycnApCit7CisgICAgcmV0dXJuIGY7Cit9CisKK3N0YXRpYyB2 b2lkIHBzdG9yZV9nZXRfZGlyZWN0b3J5KE9iamVjdCAqb2JqLCBWaXNpdG9yICp2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqb3BhcXVl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQoreworICAg IFZpcnRJT1BzdG9yZSAqcyA9IG9wYXF1ZTsKKworICAgIHZpc2l0X3R5cGVfc3RyKHYsIG5hbWUs ICZzLT5kaXJlY3RvcnksIGVycnApOworfQorCitzdGF0aWMgdm9pZCBwc3RvcmVfc2V0X2RpcmVj dG9yeShPYmplY3QgKm9iaiwgVmlzaXRvciAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVycm9yICoqZXJycCkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBv cGFxdWU7CisgICAgRXJyb3IgKmxvY2FsX2VyciA9IE5VTEw7CisgICAgY2hhciAqdmFsdWU7CisK KyAgICB2aXNpdF90eXBlX3N0cih2LCBuYW1lLCAmdmFsdWUsICZsb2NhbF9lcnIpOworICAgIGlm IChsb2NhbF9lcnIpIHsKKyAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX2ZyZWUocy0+ZGlyZWN0b3J5KTsKKyAg ICBzLT5kaXJlY3RvcnkgPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgcHN0b3JlX3JlbGVhc2Vf ZGlyZWN0b3J5KE9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUg KnMgPSBvcGFxdWU7CisKKyAgICBnX2ZyZWUocy0+ZGlyZWN0b3J5KTsKKyAgICBzLT5kaXJlY3Rv cnkgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwc3RvcmVfZ2V0X2J1ZnNpemUoT2JqZWN0ICpv YmosIFZpc2l0b3IgKnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqbmFtZSwgdm9pZCAqb3BhcXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVy cm9yICoqZXJycCkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBvcGFxdWU7CisgICAgdWludDY0 X3QgdmFsdWUgPSBzLT5idWZzaXplOworCisgICAgdmlzaXRfdHlwZV9zaXplKHYsIG5hbWUsICZ2 YWx1ZSwgZXJycCk7Cit9CisKK3N0YXRpYyB2b2lkIHBzdG9yZV9zZXRfYnVmc2l6ZShPYmplY3Qg Km9iaiwgVmlzaXRvciAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpvcGFxdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RXJyb3IgKiplcnJwKQoreworICAgIFZpcnRJT1BzdG9yZSAqcyA9IG9wYXF1ZTsKKyAgICBFcnJv ciAqZXJyb3IgPSBOVUxMOworICAgIHVpbnQ2NF90IHZhbHVlOworCisgICAgdmlzaXRfdHlwZV9z aXplKHYsIG5hbWUsICZ2YWx1ZSwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg ZXJyb3JfcHJvcGFnYXRlKGVycnAsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIGlmICh2YWx1ZSA8IDQwOTYpIHsKKyAgICAgICAgZXJyb3Jfc2V0ZygmZXJyb3IsICJXYXJu aW5nOiB0b28gc21hbGwgYnVmZmVyIHNpemU6ICUiUFJJdTY0LCB2YWx1ZSk7CisgICAgICAgIGVy cm9yX3Byb3BhZ2F0ZShlcnJwLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg ICBzLT5idWZzaXplID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHBzdG9yZV9nZXRfZmlsZV9t YXgoT2JqZWN0ICpvYmosIFZpc2l0b3IgKnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRXJyb3IgKiplcnJwKQoreworICAgIFZpcnRJT1BzdG9yZSAqcyA9IG9wYXF1 ZTsKKyAgICBpbnQ2NF90IHZhbHVlID0gcy0+ZmlsZV9tYXg7CisKKyAgICB2aXNpdF90eXBlX2lu dCh2LCBuYW1lLCAmdmFsdWUsIGVycnApOworfQorCitzdGF0aWMgdm9pZCBwc3RvcmVfc2V0X2Zp bGVfbWF4KE9iamVjdCAqb2JqLCBWaXNpdG9yICp2LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpvcGFxdWUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVycm9yICoqZXJycCkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBv cGFxdWU7CisgICAgRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBpbnQ2NF90IHZhbHVlOworCisg ICAgdmlzaXRfdHlwZV9pbnQodiwgbmFtZSwgJnZhbHVlLCAmZXJyb3IpOworICAgIGlmIChlcnJv cikgeworICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgZXJyb3IpOworICAgICAgICByZXR1 cm47CisgICAgfQorCisgICAgcy0+ZmlsZV9tYXggPSB2YWx1ZTsKK30KKworc3RhdGljIFByb3Bl cnR5IHZpcnRpb19wc3RvcmVfcHJvcGVydGllc1tdID0geworICAgIERFRklORV9QUk9QX0VORF9P Rl9MSVNUKCksCit9OworCitzdGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX2luc3RhbmNlX2luaXQo T2JqZWN0ICpvYmopCit7CisgICAgVmlydElPUHN0b3JlICpzID0gVklSVElPX1BTVE9SRShvYmop OworCisgICAgb2JqZWN0X3Byb3BlcnR5X2FkZChvYmosICJkaXJlY3RvcnkiLCAic3RyIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHBzdG9yZV9nZXRfZGlyZWN0b3J5LCBwc3RvcmVfc2V0X2Rp cmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzdG9yZV9yZWxlYXNlX2RpcmVjdG9y eSwgcywgTlVMTCk7CisgICAgb2JqZWN0X3Byb3BlcnR5X2FkZChvYmosICJidWZzaXplIiwgInNp emUiLAorICAgICAgICAgICAgICAgICAgICAgICAgcHN0b3JlX2dldF9idWZzaXplLCBwc3RvcmVf c2V0X2J1ZnNpemUsIE5VTEwsIHMsIE5VTEwpOworICAgIG9iamVjdF9wcm9wZXJ0eV9hZGQob2Jq LCAiZmlsZS1tYXgiLCAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzdG9yZV9nZXRf ZmlsZV9tYXgsIHBzdG9yZV9zZXRfZmlsZV9tYXgsIE5VTEwsIHMsIE5VTEwpOworfQorCitzdGF0 aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKmtsYXNzLCB2b2lk ICpkYXRhKQoreworICAgIERldmljZUNsYXNzICpkYyA9IERFVklDRV9DTEFTUyhrbGFzcyk7Cisg ICAgVmlydGlvRGV2aWNlQ2xhc3MgKnZkYyA9IFZJUlRJT19ERVZJQ0VfQ0xBU1Moa2xhc3MpOwor CisgICAgZGMtPnByb3BzID0gdmlydGlvX3BzdG9yZV9wcm9wZXJ0aWVzOworICAgIHNldF9iaXQo REVWSUNFX0NBVEVHT1JZX01JU0MsIGRjLT5jYXRlZ29yaWVzKTsKKyAgICB2ZGMtPnJlYWxpemUg PSB2aXJ0aW9fcHN0b3JlX2RldmljZV9yZWFsaXplOworICAgIHZkYy0+dW5yZWFsaXplID0gdmly dGlvX3BzdG9yZV9kZXZpY2VfdW5yZWFsaXplOworICAgIHZkYy0+Z2V0X2NvbmZpZyA9IHZpcnRp b19wc3RvcmVfZ2V0X2NvbmZpZzsKKyAgICB2ZGMtPnNldF9jb25maWcgPSB2aXJ0aW9fcHN0b3Jl X3NldF9jb25maWc7CisgICAgdmRjLT5nZXRfZmVhdHVyZXMgPSBnZXRfZmVhdHVyZXM7Cit9CisK K3N0YXRpYyBjb25zdCBUeXBlSW5mbyB2aXJ0aW9fcHN0b3JlX2luZm8gPSB7CisgICAgLm5hbWUg PSBUWVBFX1ZJUlRJT19QU1RPUkUsCisgICAgLnBhcmVudCA9IFRZUEVfVklSVElPX0RFVklDRSwK KyAgICAuaW5zdGFuY2Vfc2l6ZSA9IHNpemVvZihWaXJ0SU9Qc3RvcmUpLAorICAgIC5pbnN0YW5j ZV9pbml0ID0gdmlydGlvX3BzdG9yZV9pbnN0YW5jZV9pbml0LAorICAgIC5jbGFzc19pbml0ID0g dmlydGlvX3BzdG9yZV9jbGFzc19pbml0LAorfTsKKworc3RhdGljIHZvaWQgdmlydGlvX3JlZ2lz dGVyX3R5cGVzKHZvaWQpCit7CisgICAgdHlwZV9yZWdpc3Rlcl9zdGF0aWMoJnZpcnRpb19wc3Rv cmVfaW5mbyk7Cit9CisKK3R5cGVfaW5pdCh2aXJ0aW9fcmVnaXN0ZXJfdHlwZXMpCmRpZmYgLS1n aXQgYS9pbmNsdWRlL2h3L3BjaS9wY2kuaCBiL2luY2x1ZGUvaHcvcGNpL3BjaS5oCmluZGV4IDky OWVjMmYuLmIzMTc3NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaHcvcGNpL3BjaS5oCisrKyBiL2lu Y2x1ZGUvaHcvcGNpL3BjaS5oCkBAIC03OSw2ICs3OSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0Vf SURfVklSVElPX1NDU0kgICAgICAgIDB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJUlRJ T19STkcgICAgICAgICAweDEwMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJUSU9fOVAgICAg ICAgICAgMHgxMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklSVElPX1BTVE9SRSAgICAgIDB4 MTAwYQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVESEFUICAgICAgICAgICAgIDB4MWIzNgog I2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFREhBVF9CUklER0UgICAgICAweDAwMDEKZGlmZiAtLWdp dCBhL2luY2x1ZGUvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuaCBiL2luY2x1ZGUvaHcvdmlydGlv L3ZpcnRpby1wc3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWIx ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9ody92aXJ0aW8vdmlydGlvLXBzdG9yZS5o CkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBWaXJ0aW8gUHN0b3JlIFN1cHBvcnQKKyAqCisgKiBB dXRob3JzOgorICogIE5hbWh5dW5nIEtpbSAgICAgIDxuYW1oeXVuZ0BnbWFpbC5jb20+CisgKgor ICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwg dmVyc2lvbiAyLiAgU2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGly ZWN0b3J5LgorICoKKyAqLworCisjaWZuZGVmIF9RRU1VX1ZJUlRJT19QU1RPUkVfSAorI2RlZmlu ZSBfUUVNVV9WSVJUSU9fUFNUT1JFX0gKKworI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGlu dXgvdmlydGlvX3BzdG9yZS5oIgorI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8uaCIKKyNpbmNs dWRlICJody9wY2kvcGNpLmgiCisKKyNkZWZpbmUgVFlQRV9WSVJUSU9fUFNUT1JFICJ2aXJ0aW8t cHN0b3JlLWRldmljZSIKKyNkZWZpbmUgVklSVElPX1BTVE9SRShvYmopIFwKKyAgICAgICAgT0JK RUNUX0NIRUNLKFZpcnRJT1BzdG9yZSwgKG9iaiksIFRZUEVfVklSVElPX1BTVE9SRSkKKwordHlw ZWRlZiBzdHJ1Y3QgVmlydElPUHN0b3JlIHsKKyAgICBWaXJ0SU9EZXZpY2UgICAgcGFyZW50X29i ajsKKyAgICBWaXJ0UXVldWUgICAgICAqcnZxOworICAgIFZpcnRRdWV1ZSAgICAgICp3dnE7Cisg ICAgY2hhciAgICAgICAgICAgKmRpcmVjdG9yeTsKKyAgICBpbnQgICAgICAgICAgICAgZmlsZV9p ZHg7CisgICAgaW50ICAgICAgICAgICAgIG51bV9maWxlOworICAgIHN0cnVjdCBkaXJlbnQgKipm aWxlczsKKyAgICB1aW50NjRfdCAgICAgICAgaWQ7CisgICAgdWludDY0X3QgICAgICAgIGJ1ZnNp emU7CisgICAgdWludDY0X3QgICAgICAgIGZpbGVfbWF4OworfSBWaXJ0SU9Qc3RvcmU7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19p ZHMuaCBiL2luY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0aW9faWRzLmgKaW5kZXgg Nzc5MjVmNS4uYzcyYTlhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xp bnV4L3ZpcnRpb19pZHMuaAorKysgYi9pbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmly dGlvX2lkcy5oCkBAIC00MSw1ICs0MSw2IEBACiAjZGVmaW5lIFZJUlRJT19JRF9DQUlGCSAgICAg ICAxMiAvKiBWaXJ0aW8gY2FpZiAqLwogI2RlZmluZSBWSVJUSU9fSURfR1BVICAgICAgICAgIDE2 IC8qIHZpcnRpbyBHUFUgKi8KICNkZWZpbmUgVklSVElPX0lEX0lOUFVUICAgICAgICAxOCAvKiB2 aXJ0aW8gaW5wdXQgKi8KKyNkZWZpbmUgVklSVElPX0lEX1BTVE9SRSAgICAgICAyMiAvKiB2aXJ0 aW8gcHN0b3JlICovCiAKICNlbmRpZiAvKiBfTElOVVhfVklSVElPX0lEU19IICovCmRpZmYgLS1n aXQgYS9pbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX3BzdG9yZS5oIGIvaW5j bHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wc3RvcmUuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjkxODM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wc3RvcmUuaApAQCAtMCwwICsxLDc2IEBA CisjaWZuZGVmIF9MSU5VWF9WSVJUSU9fUFNUT1JFX0gKKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19Q U1RPUkVfSAorLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNl IHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKKyAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2 ZXJzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1l cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQg c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKKyAqIFNVQ0ggREFNQUdFLiAqLworI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGlu dXgvdHlwZXMuaCIKKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb190eXBl cy5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX2lkcy5oIgorI2lu Y2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX2NvbmZpZy5oIgorCisjZGVmaW5l IFZJUlRJT19QU1RPUkVfQ01EX05VTEwgICAwCisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX09Q RU4gICAxCisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX1JFQUQgICAyCisjZGVmaW5lIFZJUlRJ T19QU1RPUkVfQ01EX1dSSVRFICAzCisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX0VSQVNFICA0 CisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX0NMT1NFICA1CisKKyNkZWZpbmUgVklSVElPX1BT VE9SRV9UWVBFX1VOS05PV04gIDAKKyNkZWZpbmUgVklSVElPX1BTVE9SRV9UWVBFX0RNRVNHICAg IDEKKworI2RlZmluZSBWSVJUSU9fUFNUT1JFX0ZMX0NPTVBSRVNTRUQgIDEKKworc3RydWN0IHZp cnRpb19wc3RvcmVfcmVxIHsKKyAgICBfX3ZpcnRpbzE2IGNtZDsKKyAgICBfX3ZpcnRpbzE2IHR5 cGU7CisgICAgX192aXJ0aW8zMiBmbGFnczsKKyAgICBfX3ZpcnRpbzY0IGlkOworICAgIF9fdmly dGlvMzIgY291bnQ7CisgICAgX192aXJ0aW8zMiByZXNlcnZlZDsKK307CisKK3N0cnVjdCB2aXJ0 aW9fcHN0b3JlX3JlcyB7CisgICAgX192aXJ0aW8xNiBjbWQ7CisgICAgX192aXJ0aW8xNiB0eXBl OworICAgIF9fdmlydGlvMzIgcmV0OworfTsKKworc3RydWN0IHZpcnRpb19wc3RvcmVfZmlsZWlu Zm8geworICAgIF9fdmlydGlvNjQgaWQ7CisgICAgX192aXJ0aW8zMiBjb3VudDsKKyAgICBfX3Zp cnRpbzE2IHR5cGU7CisgICAgX192aXJ0aW8xNiB1bnVzZWQ7CisgICAgX192aXJ0aW8zMiBmbGFn czsKKyAgICBfX3ZpcnRpbzMyIGxlbjsKKyAgICBfX3ZpcnRpbzY0IHRpbWVfc2VjOworICAgIF9f dmlydGlvMzIgdGltZV9uc2VjOworICAgIF9fdmlydGlvMzIgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1 Y3QgdmlydGlvX3BzdG9yZV9jb25maWcgeworICAgIF9fdmlydGlvMzIgYnVmc2l6ZTsKK307CisK KyNlbmRpZiAvKiBfTElOVVhfVklSVElPX1BTVE9SRV9IICovCmRpZmYgLS1naXQgYS9xZGV2LW1v bml0b3IuYyBiL3FkZXYtbW9uaXRvci5jCmluZGV4IGUxOTYxN2YuLmUxZGY1YTkgMTAwNjQ0Ci0t LSBhL3FkZXYtbW9uaXRvci5jCisrKyBiL3FkZXYtbW9uaXRvci5jCkBAIC03Myw2ICs3Myw3IEBA IHN0YXRpYyBjb25zdCBRRGV2QWxpYXMgcWRldl9hbGlhc190YWJsZVtdID0gewogICAgIHsgInZp cnRpby1zZXJpYWwtcGNpIiwgInZpcnRpby1zZXJpYWwiLCBRRU1VX0FSQ0hfQUxMICYgflFFTVVf QVJDSF9TMzkwWCB9LAogICAgIHsgInZpcnRpby10YWJsZXQtY2N3IiwgInZpcnRpby10YWJsZXQi LCBRRU1VX0FSQ0hfUzM5MFggfSwKICAgICB7ICJ2aXJ0aW8tdGFibGV0LXBjaSIsICJ2aXJ0aW8t dGFibGV0IiwgUUVNVV9BUkNIX0FMTCAmIH5RRU1VX0FSQ0hfUzM5MFggfSwKKyAgICB7ICJ2aXJ0 aW8tcHN0b3JlLXBjaSIsICJ2aXJ0aW8tcHN0b3JlIiB9LAogICAgIHsgfQogfTsKIAotLSAKMi45 LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1 YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0 aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5m by92aXJ0dWFsaXphdGlvbg==