From mboxrd@z Thu Jan 1 00:00:00 1970 From: Quan Xu Subject: [PATCH 2/2] IOMMU/spinlock: Make the pcidevs_lock a recursive one Date: Tue, 8 Mar 2016 19:09:17 +0800 Message-ID: <1457435357-34073-3-git-send-email-quan.xu@intel.com> References: <1457435357-34073-1-git-send-email-quan.xu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1457435357-34073-1-git-send-email-quan.xu@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Kevin Tian , Keir Fraser , Jan Beulich , Andrew Cooper , Dario Faggioli , Aravind Gopalakrishnan , Suravee Suthikulpanit , Quan Xu , Feng Wu List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogUXVhbiBYdSA8cXVhbi54dUBpbnRlbC5jb20+CkNDOiBLZWlyIEZyYXNl ciA8a2VpckB4ZW4ub3JnPgpDQzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDQzog QW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQ0M6IFN1cmF2ZWUgU3V0 aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CkNDOiBBcmF2aW5kIEdv cGFsYWtyaXNobmFuIDxBcmF2aW5kLkdvcGFsYWtyaXNobmFuQGFtZC5jb20+CkNDOiBGZW5nIFd1 IDxmZW5nLnd1QGludGVsLmNvbT4KQ0M6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29t PgpDQzogRGFyaW8gRmFnZ2lvbGkgPGRhcmlvLmZhZ2dpb2xpQGNpdHJpeC5jb20+Ci0tLQogeGVu L2FyY2gveDg2L2RvbWN0bC5jICAgICAgICAgICAgICAgICAgICAgICB8ICA4ICstLQogeGVuL2Fy Y2gveDg2L2h2bS92bXNpLmMgICAgICAgICAgICAgICAgICAgICB8ICA0ICstCiB4ZW4vYXJjaC94 ODYvaXJxLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDggKy0tCiB4ZW4vYXJjaC94ODYv bXNpLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYgKystLS0KIHhlbi9hcmNoL3g4Ni9w Y2kuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQogeGVuL2FyY2gveDg2L3BoeXNk ZXYuYyAgICAgICAgICAgICAgICAgICAgICB8IDE2ICsrLS0tCiB4ZW4vY29tbW9uL3N5c2N0bC5j ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdo L2FtZC9pb21tdV9pbml0LmMgICAgfCAgOCArLS0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2Ft ZC9pb21tdV9tYXAuYyAgICAgfCAgMiArLQogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL3Bj aV9hbWRfaW9tbXUuYyB8ICA0ICstCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYyAgICAg ICAgICAgICAgIHwgOTYgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIHhlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5jICAgICAgICAgfCAxNCArKy0tLQogeGVuL2RyaXZlcnMv dmlkZW8vdmdhLmMgICAgICAgICAgICAgICAgICAgICB8ICA0ICstCiB4ZW4vaW5jbHVkZS94ZW4v cGNpLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDUgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDEw OCBpbnNlcnRpb25zKCspLCA4NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94 ODYvZG9tY3RsLmMgYi94ZW4vYXJjaC94ODYvZG9tY3RsLmMKaW5kZXggYmY2MmE4OC4uMjFjYzE2 MSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2RvbWN0bC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9k b21jdGwuYwpAQCAtNDI3LDkgKzQyNyw5IEBAIGxvbmcgYXJjaF9kb19kb21jdGwoCiAgICAgICAg IHJldCA9IC1FU1JDSDsKICAgICAgICAgaWYgKCBpb21tdV9lbmFibGVkICkKICAgICAgICAgewot ICAgICAgICAgICAgc3Bpbl9sb2NrKCZwY2lkZXZzX2xvY2spOworICAgICAgICAgICAgcGNpZGV2 c19sb2NrKCk7CiAgICAgICAgICAgICByZXQgPSBwdF9pcnFfY3JlYXRlX2JpbmQoZCwgYmluZCk7 Ci0gICAgICAgICAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICAgICAgICAgIHBj aWRldnNfdW5sb2NrKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCByZXQgPCAwICkKICAgICAg ICAgICAgIHByaW50ayhYRU5MT0dfR19FUlIgInB0X2lycV9jcmVhdGVfYmluZCBmYWlsZWQgKCVs ZCkgZm9yIGRvbSVkXG4iLApAQCAtNDUyLDkgKzQ1Miw5IEBAIGxvbmcgYXJjaF9kb19kb21jdGwo CiAKICAgICAgICAgaWYgKCBpb21tdV9lbmFibGVkICkKICAgICAgICAgewotICAgICAgICAgICAg c3Bpbl9sb2NrKCZwY2lkZXZzX2xvY2spOworICAgICAgICAgICAgcGNpZGV2c19sb2NrKCk7CiAg ICAgICAgICAgICByZXQgPSBwdF9pcnFfZGVzdHJveV9iaW5kKGQsIGJpbmQpOwotICAgICAgICAg ICAgc3Bpbl91bmxvY2soJnBjaWRldnNfbG9jayk7CisgICAgICAgICAgICBwY2lkZXZzX3VubG9j aygpOwogICAgICAgICB9CiAgICAgICAgIGlmICggcmV0IDwgMCApCiAgICAgICAgICAgICBwcmlu dGsoWEVOTE9HX0dfRVJSICJwdF9pcnFfZGVzdHJveV9iaW5kIGZhaWxlZCAoJWxkKSBmb3IgZG9t JWRcbiIsCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL3Ztc2kuYyBiL3hlbi9hcmNoL3g4 Ni9odm0vdm1zaS5jCmluZGV4IGFjODM4YTkuLjhlMDgxN2IgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNo L3g4Ni9odm0vdm1zaS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vdm1zaS5jCkBAIC0zODgsNyAr Mzg4LDcgQEAgaW50IG1zaXh0YmxfcHRfcmVnaXN0ZXIoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0 IHBpcnEgKnBpcnEsIHVpbnQ2NF90IGd0YWJsZSkKICAgICBzdHJ1Y3QgbXNpeHRibF9lbnRyeSAq ZW50cnksICpuZXdfZW50cnk7CiAgICAgaW50IHIgPSAtRUlOVkFMOwogCi0gICAgQVNTRVJUKHNw aW5faXNfbG9ja2VkKCZwY2lkZXZzX2xvY2spKTsKKyAgICBBU1NFUlQocGNpZGV2c19pc19sb2Nr ZWQoKSk7CiAgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZkLT5ldmVudF9sb2NrKSk7CiAKICAg ICAvKgpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgbXNpeHRibF9wdF91bnJlZ2lzdGVyKHN0cnVj dCBkb21haW4gKmQsIHN0cnVjdCBwaXJxICpwaXJxKQogICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2 OwogICAgIHN0cnVjdCBtc2l4dGJsX2VudHJ5ICplbnRyeTsKIAotICAgIEFTU0VSVChzcGluX2lz X2xvY2tlZCgmcGNpZGV2c19sb2NrKSk7CisgICAgQVNTRVJUKHBjaWRldnNfaXNfbG9ja2VkKCkp OwogICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmZC0+ZXZlbnRfbG9jaykpOwogCiAgICAgaXJx X2Rlc2MgPSBwaXJxX3NwaW5fbG9ja19pcnFfZGVzYyhwaXJxLCBOVUxMKTsKZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9pcnEuYyBiL3hlbi9hcmNoL3g4Ni9pcnEuYwppbmRleCBiZjJlODIyLi42 OGJkZjE5IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaXJxLmMKKysrIGIveGVuL2FyY2gveDg2 L2lycS5jCkBAIC0xOTU1LDcgKzE5NTUsNyBAQCBpbnQgbWFwX2RvbWFpbl9waXJxKAogICAgICAg ICBzdHJ1Y3QgcGNpX2RldiAqcGRldjsKICAgICAgICAgdW5zaWduZWQgaW50IG5yID0gMDsKIAot ICAgICAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBjaWRldnNfbG9jaykpOworICAgICAgICBB U1NFUlQocGNpZGV2c19pc19sb2NrZWQoKSk7CiAKICAgICAgICAgcmV0ID0gLUVOT0RFVjsKICAg ICAgICAgaWYgKCAhY3B1X2hhc19hcGljICkKQEAgLTIxMDAsNyArMjEwMCw3IEBAIGludCB1bm1h cF9kb21haW5fcGlycShzdHJ1Y3QgZG9tYWluICpkLCBpbnQgcGlycSkKICAgICBpZiAoIChwaXJx IDwgMCkgfHwgKHBpcnEgPj0gZC0+bnJfcGlycXMpICkKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 CiAKLSAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBjaWRldnNfbG9jaykpOworICAgIEFTU0VS VChwY2lkZXZzX2lzX2xvY2tlZCgpKTsKICAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJmQtPmV2 ZW50X2xvY2spKTsKIAogICAgIGluZm8gPSBwaXJxX2luZm8oZCwgcGlycSk7CkBAIC0yMjI2LDcg KzIyMjYsNyBAQCB2b2lkIGZyZWVfZG9tYWluX3BpcnFzKHN0cnVjdCBkb21haW4gKmQpCiB7CiAg ICAgaW50IGk7CiAKLSAgICBzcGluX2xvY2soJnBjaWRldnNfbG9jayk7CisgICAgcGNpZGV2c19s b2NrKCk7CiAgICAgc3Bpbl9sb2NrKCZkLT5ldmVudF9sb2NrKTsKIAogICAgIGZvciAoIGkgPSAw OyBpIDwgZC0+bnJfcGlycXM7IGkrKyApCkBAIC0yMjM0LDcgKzIyMzQsNyBAQCB2b2lkIGZyZWVf ZG9tYWluX3BpcnFzKHN0cnVjdCBkb21haW4gKmQpCiAgICAgICAgICAgICB1bm1hcF9kb21haW5f cGlycShkLCBpKTsKIAogICAgIHNwaW5fdW5sb2NrKCZkLT5ldmVudF9sb2NrKTsKLSAgICBzcGlu X3VubG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICBwY2lkZXZzX3VubG9jaygpOwogfQogCiBzdGF0 aWMgdm9pZCBkdW1wX2lycXModW5zaWduZWQgY2hhciBrZXkpCmRpZmYgLS1naXQgYS94ZW4vYXJj aC94ODYvbXNpLmMgYi94ZW4vYXJjaC94ODYvbXNpLmMKaW5kZXggM2RiYjg0ZC4uNmU1ZTMzZSAx MDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L21zaS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tc2kuYwpA QCAtNjk0LDcgKzY5NCw3IEBAIHN0YXRpYyBpbnQgbXNpX2NhcGFiaWxpdHlfaW5pdChzdHJ1Y3Qg cGNpX2RldiAqZGV2LAogICAgIHU4IHNsb3QgPSBQQ0lfU0xPVChkZXYtPmRldmZuKTsKICAgICB1 OCBmdW5jID0gUENJX0ZVTkMoZGV2LT5kZXZmbik7CiAKLSAgICBBU1NFUlQoc3Bpbl9pc19sb2Nr ZWQoJnBjaWRldnNfbG9jaykpOworICAgIEFTU0VSVChwY2lkZXZzX2lzX2xvY2tlZCgpKTsKICAg ICBwb3MgPSBwY2lfZmluZF9jYXBfb2Zmc2V0KHNlZywgYnVzLCBzbG90LCBmdW5jLCBQQ0lfQ0FQ X0lEX01TSSk7CiAgICAgaWYgKCAhcG9zICkKICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CkBAIC04 NTIsNyArODUyLDcgQEAgc3RhdGljIGludCBtc2l4X2NhcGFiaWxpdHlfaW5pdChzdHJ1Y3QgcGNp X2RldiAqZGV2LAogICAgIHU4IGZ1bmMgPSBQQ0lfRlVOQyhkZXYtPmRldmZuKTsKICAgICBib29s X3QgbWFza2FsbCA9IG1zaXgtPmhvc3RfbWFza2FsbDsKIAotICAgIEFTU0VSVChzcGluX2lzX2xv Y2tlZCgmcGNpZGV2c19sb2NrKSk7CisgICAgQVNTRVJUKHBjaWRldnNfaXNfbG9ja2VkKCkpOwog CiAgICAgY29udHJvbCA9IHBjaV9jb25mX3JlYWQxNihzZWcsIGJ1cywgc2xvdCwgZnVuYywgbXNp eF9jb250cm9sX3JlZyhwb3MpKTsKICAgICAvKgpAQCAtMTA0Miw3ICsxMDQyLDcgQEAgc3RhdGlj IGludCBfX3BjaV9lbmFibGVfbXNpKHN0cnVjdCBtc2lfaW5mbyAqbXNpLCBzdHJ1Y3QgbXNpX2Rl c2MgKipkZXNjKQogICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2OwogICAgIHN0cnVjdCBtc2lfZGVz YyAqb2xkX2Rlc2M7CiAKLSAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBjaWRldnNfbG9jaykp OworICAgIEFTU0VSVChwY2lkZXZzX2lzX2xvY2tlZCgpKTsKICAgICBwZGV2ID0gcGNpX2dldF9w ZGV2KG1zaS0+c2VnLCBtc2ktPmJ1cywgbXNpLT5kZXZmbik7CiAgICAgaWYgKCAhcGRldiApCiAg ICAgICAgIHJldHVybiAtRU5PREVWOwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAgc3RhdGljIGludCBf X3BjaV9lbmFibGVfbXNpeChzdHJ1Y3QgbXNpX2luZm8gKm1zaSwgc3RydWN0IG1zaV9kZXNjICoq ZGVzYykKICAgICB1OCBmdW5jID0gUENJX0ZVTkMobXNpLT5kZXZmbik7CiAgICAgc3RydWN0IG1z aV9kZXNjICpvbGRfZGVzYzsKIAotICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGNpZGV2c19s b2NrKSk7CisgICAgQVNTRVJUKHBjaWRldnNfaXNfbG9ja2VkKCkpOwogICAgIHBkZXYgPSBwY2lf Z2V0X3BkZXYobXNpLT5zZWcsIG1zaS0+YnVzLCBtc2ktPmRldmZuKTsKICAgICBwb3MgPSBwY2lf ZmluZF9jYXBfb2Zmc2V0KG1zaS0+c2VnLCBtc2ktPmJ1cywgc2xvdCwgZnVuYywgUENJX0NBUF9J RF9NU0lYKTsKICAgICBpZiAoICFwZGV2IHx8ICFwb3MgKQpAQCAtMTIwNSw3ICsxMjA1LDcgQEAg aW50IHBjaV9wcmVwYXJlX21zaXgodTE2IHNlZywgdTggYnVzLCB1OCBkZXZmbiwgYm9vbF90IG9m ZikKICAgICBpZiAoICFwb3MgKQogICAgICAgICByZXR1cm4gLUVOT0RFVjsKIAotICAgIHNwaW5f bG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICBwY2lkZXZzX2xvY2soKTsKICAgICBwZGV2ID0gcGNp X2dldF9wZGV2KHNlZywgYnVzLCBkZXZmbik7CiAgICAgaWYgKCAhcGRldiApCiAgICAgICAgIHJj ID0gLUVOT0RFVjsKQEAgLTEyMjQsNyArMTIyNCw3IEBAIGludCBwY2lfcHJlcGFyZV9tc2l4KHUx NiBzZWcsIHU4IGJ1cywgdTggZGV2Zm4sIGJvb2xfdCBvZmYpCiAgICAgICAgIHJjID0gbXNpeF9j YXBhYmlsaXR5X2luaXQocGRldiwgcG9zLCBOVUxMLCBOVUxMLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG11bHRpX21zaXhfY2FwYWJsZShjb250cm9sKSk7CiAgICAgfQotICAg IHNwaW5fdW5sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBjaWRldnNfdW5sb2NrKCk7CiAKICAg ICByZXR1cm4gcmM7CiB9CkBAIC0xMjM1LDcgKzEyMzUsNyBAQCBpbnQgcGNpX3ByZXBhcmVfbXNp eCh1MTYgc2VnLCB1OCBidXMsIHU4IGRldmZuLCBib29sX3Qgb2ZmKQogICovCiBpbnQgcGNpX2Vu YWJsZV9tc2koc3RydWN0IG1zaV9pbmZvICptc2ksIHN0cnVjdCBtc2lfZGVzYyAqKmRlc2MpCiB7 Ci0gICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwY2lkZXZzX2xvY2spKTsKKyAgICBBU1NFUlQo cGNpZGV2c19pc19sb2NrZWQoKSk7CiAKICAgICBpZiAoICF1c2VfbXNpICkKICAgICAgICAgcmV0 dXJuIC1FUEVSTTsKQEAgLTEzNTEsNyArMTM1MSw3IEBAIGludCBwY2lfcmVzdG9yZV9tc2lfc3Rh dGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAgICAgdW5zaWduZWQgaW50IHR5cGUgPSAwLCBwb3Mg PSAwOwogICAgIHUxNiBjb250cm9sID0gMDsKIAotICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgm cGNpZGV2c19sb2NrKSk7CisgICAgQVNTRVJUKHBjaWRldnNfaXNfbG9ja2VkKCkpOwogCiAgICAg aWYgKCAhdXNlX21zaSApCiAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9wY2kuYyBiL3hlbi9hcmNoL3g4Ni9wY2kuYwppbmRleCA1YmNlY2JiLi44 OTIyNzhkIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcGNpLmMKKysrIGIveGVuL2FyY2gveDg2 L3BjaS5jCkBAIC04MiwxMyArODIsMTMgQEAgaW50IHBjaV9jb25mX3dyaXRlX2ludGVyY2VwdCh1 bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYmRmLAogICAgIGlmICggcmVnIDwgNjQgfHwg cmVnID49IDI1NiApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgc3Bpbl9sb2NrKCZwY2lkZXZz X2xvY2spOworICAgIHBjaWRldnNfbG9jaygpOwogCiAgICAgcGRldiA9IHBjaV9nZXRfcGRldihz ZWcsIFBDSV9CVVMoYmRmKSwgUENJX0RFVkZOMihiZGYpKTsKICAgICBpZiAoIHBkZXYgKQogICAg ICAgICByYyA9IHBjaV9tc2lfY29uZl93cml0ZV9pbnRlcmNlcHQocGRldiwgcmVnLCBzaXplLCBk YXRhKTsKIAotICAgIHNwaW5fdW5sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBjaWRldnNfdW5s b2NrKCk7CiAKICAgICByZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcGh5 c2Rldi5jIGIveGVuL2FyY2gveDg2L3BoeXNkZXYuYwppbmRleCA1N2I3ODAwLi4xY2I5YjU4IDEw MDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcGh5c2Rldi5jCisrKyBiL3hlbi9hcmNoL3g4Ni9waHlz ZGV2LmMKQEAgLTE2Nyw3ICsxNjcsNyBAQCBpbnQgcGh5c2Rldl9tYXBfcGlycShkb21pZF90IGRv bWlkLCBpbnQgdHlwZSwgaW50ICppbmRleCwgaW50ICpwaXJxX3AsCiAgICAgICAgIGdvdG8gZnJl ZV9kb21haW47CiAgICAgfQogCi0gICAgc3Bpbl9sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBj aWRldnNfbG9jaygpOwogICAgIC8qIFZlcmlmeSBvciBnZXQgcGlycS4gKi8KICAgICBzcGluX2xv Y2soJmQtPmV2ZW50X2xvY2spOwogICAgIHBpcnEgPSBkb21haW5faXJxX3RvX3BpcnEoZCwgaXJx KTsKQEAgLTIzNyw3ICsyMzcsNyBAQCBpbnQgcGh5c2Rldl9tYXBfcGlycShkb21pZF90IGRvbWlk LCBpbnQgdHlwZSwgaW50ICppbmRleCwgaW50ICpwaXJxX3AsCiAKICBkb25lOgogICAgIHNwaW5f dW5sb2NrKCZkLT5ldmVudF9sb2NrKTsKLSAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2NrKTsK KyAgICBwY2lkZXZzX3VubG9jaygpOwogICAgIGlmICggcmV0ICE9IDAgKQogICAgICAgICBzd2l0 Y2ggKCB0eXBlICkKICAgICAgICAgewpAQCAtMjc1LDExICsyNzUsMTEgQEAgaW50IHBoeXNkZXZf dW5tYXBfcGlycShkb21pZF90IGRvbWlkLCBpbnQgcGlycSkKICAgICAgICAgICAgIGdvdG8gZnJl ZV9kb21haW47CiAgICAgfQogCi0gICAgc3Bpbl9sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBj aWRldnNfbG9jaygpOwogICAgIHNwaW5fbG9jaygmZC0+ZXZlbnRfbG9jayk7CiAgICAgcmV0ID0g dW5tYXBfZG9tYWluX3BpcnEoZCwgcGlycSk7CiAgICAgc3Bpbl91bmxvY2soJmQtPmV2ZW50X2xv Y2spOwotICAgIHNwaW5fdW5sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBjaWRldnNfdW5sb2Nr KCk7CiAKICBmcmVlX2RvbWFpbjoKICAgICByY3VfdW5sb2NrX2RvbWFpbihkKTsKQEAgLTY4OSwx MCArNjg5LDEwIEBAIHJldF90IGRvX3BoeXNkZXZfb3AoaW50IGNtZCwgWEVOX0dVRVNUX0hBTkRM RV9QQVJBTSh2b2lkKSBhcmcpCiAgICAgICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZyZXN0b3Jl X21zaSwgYXJnLCAxKSAhPSAwICkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHNwaW5f bG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICAgICAgcGNpZGV2c19sb2NrKCk7CiAgICAgICAgIHBk ZXYgPSBwY2lfZ2V0X3BkZXYoMCwgcmVzdG9yZV9tc2kuYnVzLCByZXN0b3JlX21zaS5kZXZmbik7 CiAgICAgICAgIHJldCA9IHBkZXYgPyBwY2lfcmVzdG9yZV9tc2lfc3RhdGUocGRldikgOiAtRU5P REVWOwotICAgICAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICAgICAgcGNpZGV2 c191bmxvY2soKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC03MDQsMTAgKzcwNCwxMCBA QCByZXRfdCBkb19waHlzZGV2X29wKGludCBjbWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9p ZCkgYXJnKQogICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmZGV2LCBhcmcsIDEpICE9IDAg KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgc3Bpbl9sb2NrKCZwY2lkZXZzX2xvY2sp OworICAgICAgICBwY2lkZXZzX2xvY2soKTsKICAgICAgICAgcGRldiA9IHBjaV9nZXRfcGRldihk ZXYuc2VnLCBkZXYuYnVzLCBkZXYuZGV2Zm4pOwogICAgICAgICByZXQgPSBwZGV2ID8gcGNpX3Jl c3RvcmVfbXNpX3N0YXRlKHBkZXYpIDogLUVOT0RFVjsKLSAgICAgICAgc3Bpbl91bmxvY2soJnBj aWRldnNfbG9jayk7CisgICAgICAgIHBjaWRldnNfdW5sb2NrKCk7CiAgICAgICAgIGJyZWFrOwog ICAgIH0KIApkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9zeXNjdGwuYyBiL3hlbi9jb21tb24vc3lz Y3RsLmMKaW5kZXggODVlODUzZi4uNDAxZWRiOSAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi9zeXNj dGwuYworKysgYi94ZW4vY29tbW9uL3N5c2N0bC5jCkBAIC00MjYsNyArNDI2LDcgQEAgbG9uZyBk b19zeXNjdGwoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh4ZW5fc3lzY3RsX3QpIHVfc3lzY3RsKQog ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzcGlu X2xvY2soJnBjaWRldnNfbG9jayk7CisgICAgICAgICAgICBwY2lkZXZzX2xvY2soKTsKICAgICAg ICAgICAgIHBkZXYgPSBwY2lfZ2V0X3BkZXYoZGV2LnNlZywgZGV2LmJ1cywgZGV2LmRldmZuKTsK ICAgICAgICAgICAgIGlmICggIXBkZXYgKQogICAgICAgICAgICAgICAgIG5vZGUgPSBYRU5fSU5W QUxJRF9ERVY7CkBAIC00MzQsNyArNDM0LDcgQEAgbG9uZyBkb19zeXNjdGwoWEVOX0dVRVNUX0hB TkRMRV9QQVJBTSh4ZW5fc3lzY3RsX3QpIHVfc3lzY3RsKQogICAgICAgICAgICAgICAgIG5vZGUg PSBYRU5fSU5WQUxJRF9OT0RFX0lEOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg IG5vZGUgPSBwZGV2LT5ub2RlOwotICAgICAgICAgICAgc3Bpbl91bmxvY2soJnBjaWRldnNfbG9j ayk7CisgICAgICAgICAgICBwY2lkZXZzX3VubG9jaygpOwogCiAgICAgICAgICAgICBpZiAoIGNv cHlfdG9fZ3Vlc3Rfb2Zmc2V0KHRpLT5ub2RlcywgaSwgJm5vZGUsIDEpICkKICAgICAgICAgICAg IHsKZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FtZC9pb21tdV9pbml0LmMg Yi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfaW5pdC5jCmluZGV4IGE0MDA0OTcu LjQ1MzYxMDYgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FtZC9pb21tdV9p bml0LmMKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL2lvbW11X2luaXQuYwpAQCAt NjczLDkgKzY3Myw5IEBAIHZvaWQgcGFyc2VfcHByX2xvZ19lbnRyeShzdHJ1Y3QgYW1kX2lvbW11 ICppb21tdSwgdTMyIGVudHJ5W10pCiAgICAgYnVzID0gUENJX0JVUyhkZXZpY2VfaWQpOwogICAg IGRldmZuID0gUENJX0RFVkZOMihkZXZpY2VfaWQpOwogCi0gICAgc3Bpbl9sb2NrKCZwY2lkZXZz X2xvY2spOworICAgIHBjaWRldnNfbG9jaygpOwogICAgIHBkZXYgPSBwY2lfZ2V0X3JlYWxfcGRl dihpb21tdS0+c2VnLCBidXMsIGRldmZuKTsKLSAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2Nr KTsKKyAgICBwY2lkZXZzX3VubG9jaygpOwogCiAgICAgaWYgKCBwZGV2ICkKICAgICAgICAgZ3Vl c3RfaW9tbXVfYWRkX3Bwcl9sb2cocGRldi0+ZG9tYWluLCBlbnRyeSk7CkBAIC03ODcsMTAgKzc4 NywxMCBAQCBzdGF0aWMgYm9vbF90IF9faW5pdCBzZXRfaW9tbXVfaW50ZXJydXB0X2hhbmRsZXIo c3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg IHNwaW5fbG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICBwY2lkZXZzX2xvY2soKTsKICAgICBpb21t dS0+bXNpLmRldiA9IHBjaV9nZXRfcGRldihpb21tdS0+c2VnLCBQQ0lfQlVTKGlvbW11LT5iZGYp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ERVZGTjIoaW9tbXUtPmJk ZikpOwotICAgIHNwaW5fdW5sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBjaWRldnNfdW5sb2Nr KCk7CiAgICAgaWYgKCAhaW9tbXUtPm1zaS5kZXYgKQogICAgIHsKICAgICAgICAgQU1EX0lPTU1V X0RFQlVHKCJJT01NVTogbm8gcGRldiBmb3IgJTA0eDolMDJ4OiUwMnguJXVcbiIsCmRpZmYgLS1n aXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfbWFwLmMgYi94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfbWFwLmMKaW5kZXggNzg4NjJjOS4uOWQ5MWRmYyAxMDA2 NDQKLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL2lvbW11X21hcC5jCisrKyBiL3hl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FtZC9pb21tdV9tYXAuYwpAQCAtNTkzLDcgKzU5Myw3IEBA IHN0YXRpYyBpbnQgdXBkYXRlX3BhZ2luZ19tb2RlKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk IGxvbmcgZ2ZuKQogICAgICAgICBoZC0+YXJjaC5wYWdpbmdfbW9kZSA9IGxldmVsOwogICAgICAg ICBoZC0+YXJjaC5yb290X3RhYmxlID0gbmV3X3Jvb3Q7CiAKLSAgICAgICAgaWYgKCAhc3Bpbl9p c19sb2NrZWQoJnBjaWRldnNfbG9jaykgKQorICAgICAgICBpZiAoICFwY2lkZXZzX2lzX2xvY2tl ZCgpICkKICAgICAgICAgICAgIEFNRF9JT01NVV9ERUJVRygiJXMgVHJ5IHRvIGFjY2VzcyBwZGV2 X2xpc3QgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRob3V0IGFxdWlyaW5nIHBj aWRldnNfbG9jay5cbiIsIF9fZnVuY19fKTsKIApkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFz c3Rocm91Z2gvYW1kL3BjaV9hbWRfaW9tbXUuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2Ft ZC9wY2lfYW1kX2lvbW11LmMKaW5kZXggYzFjMGI2Yi4uZGMzYmZhYiAxMDA2NDQKLS0tIGEveGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL3BjaV9hbWRfaW9tbXUuYworKysgYi94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9hbWQvcGNpX2FtZF9pb21tdS5jCkBAIC0xNTgsNyArMTU4LDcgQEAgc3Rh dGljIHZvaWQgYW1kX2lvbW11X3NldHVwX2RvbWFpbl9kZXZpY2UoCiAKICAgICBzcGluX3VubG9j a19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogCi0gICAgQVNTRVJUKHNwaW5faXNf bG9ja2VkKCZwY2lkZXZzX2xvY2spKTsKKyAgICBBU1NFUlQocGNpZGV2c19pc19sb2NrZWQoKSk7 CiAKICAgICBpZiAoIHBjaV9hdHNfZGV2aWNlKGlvbW11LT5zZWcsIGJ1cywgcGRldi0+ZGV2Zm4p ICYmCiAgICAgICAgICAhcGNpX2F0c19lbmFibGVkKGlvbW11LT5zZWcsIGJ1cywgcGRldi0+ZGV2 Zm4pICkKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIGFtZF9pb21tdV9kaXNhYmxlX2RvbWFpbl9k ZXZpY2Uoc3RydWN0IGRvbWFpbiAqZG9tYWluLAogICAgIH0KICAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogCi0gICAgQVNTRVJUKHNwaW5faXNfbG9ja2Vk KCZwY2lkZXZzX2xvY2spKTsKKyAgICBBU1NFUlQocGNpZGV2c19pc19sb2NrZWQoKSk7CiAKICAg ICBpZiAoIGRldmZuID09IHBkZXYtPmRldmZuICYmCiAgICAgICAgICBwY2lfYXRzX2RldmljZShp b21tdS0+c2VnLCBidXMsIGRldmZuKSAmJgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvcGNpLmMgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYwppbmRleCAyN2IzY2E3 Li41Mzk1MThjIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYworKysg Yi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYwpAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3Qg cGNpX3NlZyB7CiAgICAgfSBidXMyYnJpZGdlW01BWF9CVVNFU107CiB9OwogCi1zcGlubG9ja190 IHBjaWRldnNfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBzcGlubG9ja190IF9w Y2lkZXZzX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CiBzdGF0aWMgc3RydWN0IHJhZGl4X3Ry ZWVfcm9vdCBwY2lfc2VnbWVudHM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9zZWcgKmdl dF9wc2VnKHUxNiBzZWcpCkBAIC0xMDMsNiArMTAzLDI2IEBAIHN0YXRpYyBpbnQgcGNpX3NlZ21l bnRzX2l0ZXJhdGUoCiAgICAgcmV0dXJuIHJjOwogfQogCit2b2lkIHBjaWRldnNfbG9jayh2b2lk KQoreworICAgIHNwaW5fbG9ja19yZWN1cnNpdmUoJl9wY2lkZXZzX2xvY2spOworfQorCit2b2lk IHBjaWRldnNfdW5sb2NrKHZvaWQpCit7CisgICAgc3Bpbl91bmxvY2tfcmVjdXJzaXZlKCZfcGNp ZGV2c19sb2NrKTsKK30KKworaW50IHBjaWRldnNfaXNfbG9ja2VkKHZvaWQpCit7CisgICAgcmV0 dXJuIHNwaW5faXNfbG9ja2VkKCZfcGNpZGV2c19sb2NrKTsKK30KKworaW50IHBjaWRldnNfdHJ5 bG9jayh2b2lkKQoreworICAgIHJldHVybiBzcGluX3RyeWxvY2tfcmVjdXJzaXZlKCZfcGNpZGV2 c19sb2NrKTsKK30KKwogdm9pZCBfX2luaXQgcHRfcGNpX2luaXQodm9pZCkKIHsKICAgICByYWRp eF90cmVlX2luaXQoJnBjaV9zZWdtZW50cyk7CkBAIC00MTIsMTQgKzQzMiwxNCBAQCBpbnQgX19p bml0IHBjaV9oaWRlX2RldmljZShpbnQgYnVzLCBpbnQgZGV2Zm4pCiAgICAgc3RydWN0IHBjaV9k ZXYgKnBkZXY7CiAgICAgaW50IHJjID0gLUVOT01FTTsKIAotICAgIHNwaW5fbG9jaygmcGNpZGV2 c19sb2NrKTsKKyAgICBwY2lkZXZzX2xvY2soKTsKICAgICBwZGV2ID0gYWxsb2NfcGRldihnZXRf cHNlZygwKSwgYnVzLCBkZXZmbik7CiAgICAgaWYgKCBwZGV2ICkKICAgICB7CiAgICAgICAgIF9w Y2lfaGlkZV9kZXZpY2UocGRldik7CiAgICAgICAgIHJjID0gMDsKICAgICB9Ci0gICAgc3Bpbl91 bmxvY2soJnBjaWRldnNfbG9jayk7CisgICAgcGNpZGV2c191bmxvY2soKTsKIAogICAgIHJldHVy biByYzsKIH0KQEAgLTQ1Niw3ICs0NzYsNyBAQCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9wZGV2 KGludCBzZWcsIGludCBidXMsIGludCBkZXZmbikKICAgICBzdHJ1Y3QgcGNpX3NlZyAqcHNlZyA9 IGdldF9wc2VnKHNlZyk7CiAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCi0gICAg QVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwY2lkZXZzX2xvY2spKTsKKyAgICBBU1NFUlQocGNpZGV2 c19pc19sb2NrZWQoKSk7CiAgICAgQVNTRVJUKHNlZyAhPSAtMSB8fCBidXMgPT0gLTEpOwogICAg IEFTU0VSVChidXMgIT0gLTEgfHwgZGV2Zm4gPT0gLTEpOwogCkBAIC01ODEsOSArNjAxLDkgQEAg aW50IHBjaV9hZGRfZGV2aWNlKHUxNiBzZWcsIHU4IGJ1cywgdTggZGV2Zm4sCiAgICAgICAgIHBk ZXZfdHlwZSA9ICJleHRlbmRlZCBmdW5jdGlvbiI7CiAgICAgZWxzZSBpZiAoaW5mby0+aXNfdmly dGZuKQogICAgIHsKLSAgICAgICAgc3Bpbl9sb2NrKCZwY2lkZXZzX2xvY2spOworICAgICAgICBw Y2lkZXZzX2xvY2soKTsKICAgICAgICAgcGRldiA9IHBjaV9nZXRfcGRldihzZWcsIGluZm8tPnBo eXNmbi5idXMsIGluZm8tPnBoeXNmbi5kZXZmbik7Ci0gICAgICAgIHNwaW5fdW5sb2NrKCZwY2lk ZXZzX2xvY2spOworICAgICAgICBwY2lkZXZzX3VubG9jaygpOwogICAgICAgICBpZiAoICFwZGV2 ICkKICAgICAgICAgICAgIHBjaV9hZGRfZGV2aWNlKHNlZywgaW5mby0+cGh5c2ZuLmJ1cywgaW5m by0+cGh5c2ZuLmRldmZuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgbm9kZSk7 CkBAIC02MDEsNyArNjIxLDcgQEAgaW50IHBjaV9hZGRfZGV2aWNlKHUxNiBzZWcsIHU4IGJ1cywg dTggZGV2Zm4sCiAKICAgICByZXQgPSAtRU5PTUVNOwogCi0gICAgc3Bpbl9sb2NrKCZwY2lkZXZz X2xvY2spOworICAgIHBjaWRldnNfbG9jaygpOwogICAgIHBzZWcgPSBhbGxvY19wc2VnKHNlZyk7 CiAgICAgaWYgKCAhcHNlZyApCiAgICAgICAgIGdvdG8gb3V0OwpAQCAtNzAzLDcgKzcyMyw3IEBA IGludCBwY2lfYWRkX2RldmljZSh1MTYgc2VnLCB1OCBidXMsIHU4IGRldmZuLAogICAgIHBjaV9l bmFibGVfYWNzKHBkZXYpOwogCiBvdXQ6Ci0gICAgc3Bpbl91bmxvY2soJnBjaWRldnNfbG9jayk7 CisgICAgcGNpZGV2c191bmxvY2soKTsKICAgICBpZiAoICFyZXQgKQogICAgIHsKICAgICAgICAg cHJpbnRrKFhFTkxPR19ERUJVRyAiUENJIGFkZCAlcyAlMDR4OiUwMng6JTAyeC4ldVxuIiwgcGRl dl90eXBlLApAQCAtNzM1LDcgKzc1NSw3IEBAIGludCBwY2lfcmVtb3ZlX2RldmljZSh1MTYgc2Vn LCB1OCBidXMsIHU4IGRldmZuKQogICAgIGlmICggIXBzZWcgKQogICAgICAgICByZXR1cm4gLUVO T0RFVjsKIAotICAgIHNwaW5fbG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICBwY2lkZXZzX2xvY2so KTsKICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggcGRldiwgJnBzZWctPmFsbGRldnNfbGlzdCwg YWxsZGV2c19saXN0ICkKICAgICAgICAgaWYgKCBwZGV2LT5idXMgPT0gYnVzICYmIHBkZXYtPmRl dmZuID09IGRldmZuICkKICAgICAgICAgewpAQCAtNzQ5LDcgKzc2OSw3IEBAIGludCBwY2lfcmVt b3ZlX2RldmljZSh1MTYgc2VnLCB1OCBidXMsIHU4IGRldmZuKQogICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgIH0KIAotICAgIHNwaW5fdW5sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBjaWRl dnNfdW5sb2NrKCk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtODA3LDExICs4MjcsMTEgQEAg aW50IHBjaV9yZWxlYXNlX2RldmljZXMoc3RydWN0IGRvbWFpbiAqZCkKICAgICB1OCBidXMsIGRl dmZuOwogICAgIGludCByZXQ7CiAKLSAgICBzcGluX2xvY2soJnBjaWRldnNfbG9jayk7CisgICAg cGNpZGV2c19sb2NrKCk7CiAgICAgcmV0ID0gcGNpX2NsZWFuX2RwY2lfaXJxcyhkKTsKICAgICBp ZiAoIHJldCApCiAgICAgewotICAgICAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2NrKTsKKyAg ICAgICAgcGNpZGV2c191bmxvY2soKTsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAgICAg d2hpbGUgKCAocGRldiA9IHBjaV9nZXRfcGRldl9ieV9kb21haW4oZCwgLTEsIC0xLCAtMSkpICkK QEAgLTgyMyw3ICs4NDMsNyBAQCBpbnQgcGNpX3JlbGVhc2VfZGV2aWNlcyhzdHJ1Y3QgZG9tYWlu ICpkKQogICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwgcGRldi0+c2VnLCBidXMsCiAg ICAgICAgICAgICAgICAgICAgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOwogICAg IH0KLSAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICBwY2lkZXZzX3VubG9jaygp OwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC05MjAsNyArOTQwLDcgQEAgdm9pZCBwY2lfY2hlY2tf ZGlzYWJsZV9kZXZpY2UodTE2IHNlZywgdTggYnVzLCB1OCBkZXZmbikKICAgICBzX3RpbWVfdCBu b3cgPSBOT1coKTsKICAgICB1MTYgY3dvcmQ7CiAKLSAgICBzcGluX2xvY2soJnBjaWRldnNfbG9j ayk7CisgICAgcGNpZGV2c19sb2NrKCk7CiAgICAgcGRldiA9IHBjaV9nZXRfcmVhbF9wZGV2KHNl ZywgYnVzLCBkZXZmbik7CiAgICAgaWYgKCBwZGV2ICkKICAgICB7CkBAIC05MzEsNyArOTUxLDcg QEAgdm9pZCBwY2lfY2hlY2tfZGlzYWJsZV9kZXZpY2UodTE2IHNlZywgdTggYnVzLCB1OCBkZXZm bikKICAgICAgICAgaWYgKCArK3BkZXYtPmZhdWx0LmNvdW50IDwgUFRfRkFVTFRfVEhSRVNIT0xE ICkKICAgICAgICAgICAgIHBkZXYgPSBOVUxMOwogICAgIH0KLSAgICBzcGluX3VubG9jaygmcGNp ZGV2c19sb2NrKTsKKyAgICBwY2lkZXZzX3VubG9jaygpOwogCiAgICAgaWYgKCAhcGRldiApCiAg ICAgICAgIHJldHVybjsKQEAgLTk4OCw5ICsxMDA4LDkgQEAgaW50IF9faW5pdCBzY2FuX3BjaV9k ZXZpY2VzKHZvaWQpCiB7CiAgICAgaW50IHJldDsKIAotICAgIHNwaW5fbG9jaygmcGNpZGV2c19s b2NrKTsKKyAgICBwY2lkZXZzX2xvY2soKTsKICAgICByZXQgPSBwY2lfc2VnbWVudHNfaXRlcmF0 ZShfc2Nhbl9wY2lfZGV2aWNlcywgTlVMTCk7Ci0gICAgc3Bpbl91bmxvY2soJnBjaWRldnNfbG9j ayk7CisgICAgcGNpZGV2c191bmxvY2soKTsKIAogICAgIHJldHVybiByZXQ7CiB9CkBAIC0xMDU0 LDE3ICsxMDc0LDE3IEBAIHN0YXRpYyBpbnQgX19od2RvbV9pbml0IF9zZXR1cF9od2RvbV9wY2lf ZGV2aWNlcyhzdHJ1Y3QgcGNpX3NlZyAqcHNlZywgdm9pZCAqYXJnCiAKICAgICAgICAgICAgIGlm ICggaW9tbXVfdmVyYm9zZSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3Bpbl91 bmxvY2soJnBjaWRldnNfbG9jayk7CisgICAgICAgICAgICAgICAgcGNpZGV2c191bmxvY2soKTsK ICAgICAgICAgICAgICAgICBwcm9jZXNzX3BlbmRpbmdfc29mdGlycXMoKTsKLSAgICAgICAgICAg ICAgICBzcGluX2xvY2soJnBjaWRldnNfbG9jayk7CisgICAgICAgICAgICAgICAgcGNpZGV2c19s b2NrKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoICFpb21tdV92 ZXJib3NlICkKICAgICAgICAgewotICAgICAgICAgICAgc3Bpbl91bmxvY2soJnBjaWRldnNfbG9j ayk7CisgICAgICAgICAgICBwY2lkZXZzX3VubG9jaygpOwogICAgICAgICAgICAgcHJvY2Vzc19w ZW5kaW5nX3NvZnRpcnFzKCk7Ci0gICAgICAgICAgICBzcGluX2xvY2soJnBjaWRldnNfbG9jayk7 CisgICAgICAgICAgICBwY2lkZXZzX2xvY2soKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA3 Niw5ICsxMDk2LDkgQEAgdm9pZCBfX2h3ZG9tX2luaXQgc2V0dXBfaHdkb21fcGNpX2RldmljZXMo CiB7CiAgICAgc3RydWN0IHNldHVwX2h3ZG9tIGN0eHQgPSB7IC5kID0gZCwgLmhhbmRsZXIgPSBo YW5kbGVyIH07CiAKLSAgICBzcGluX2xvY2soJnBjaWRldnNfbG9jayk7CisgICAgcGNpZGV2c19s b2NrKCk7CiAgICAgcGNpX3NlZ21lbnRzX2l0ZXJhdGUoX3NldHVwX2h3ZG9tX3BjaV9kZXZpY2Vz LCAmY3R4dCk7Ci0gICAgc3Bpbl91bmxvY2soJnBjaWRldnNfbG9jayk7CisgICAgcGNpZGV2c191 bmxvY2soKTsKIH0KIAogI2lmZGVmIENPTkZJR19BQ1BJCkBAIC0xMjA2LDkgKzEyMjYsOSBAQCBz dGF0aWMgaW50IF9kdW1wX3BjaV9kZXZpY2VzKHN0cnVjdCBwY2lfc2VnICpwc2VnLCB2b2lkICph cmcpCiBzdGF0aWMgdm9pZCBkdW1wX3BjaV9kZXZpY2VzKHVuc2lnbmVkIGNoYXIgY2gpCiB7CiAg ICAgcHJpbnRrKCI9PT09IFBDSSBkZXZpY2VzID09PT1cbiIpOwotICAgIHNwaW5fbG9jaygmcGNp ZGV2c19sb2NrKTsKKyAgICBwY2lkZXZzX2xvY2soKTsKICAgICBwY2lfc2VnbWVudHNfaXRlcmF0 ZShfZHVtcF9wY2lfZGV2aWNlcywgTlVMTCk7Ci0gICAgc3Bpbl91bmxvY2soJnBjaWRldnNfbG9j ayk7CisgICAgcGNpZGV2c191bmxvY2soKTsKIH0KIAogc3RydWN0IGtleWhhbmRsZXIgZHVtcF9w Y2lfZGV2aWNlc19rZXloYW5kbGVyID0gewpAQCAtMTI0OCw3ICsxMjY4LDcgQEAgaW50IGlvbW11 X2FkZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAgICAgaWYgKCAhcGRldi0+ZG9tYWlu ICkKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQo JnBjaWRldnNfbG9jaykpOworICAgIEFTU0VSVChwY2lkZXZzX2lzX2xvY2tlZCgpKTsKIAogICAg IGhkID0gZG9tYWluX2h2bV9pb21tdShwZGV2LT5kb21haW4pOwogICAgIGlmICggIWlvbW11X2Vu YWJsZWQgfHwgIWhkLT5wbGF0Zm9ybV9vcHMgKQpAQCAtMTI3Nyw3ICsxMjk3LDcgQEAgaW50IGlv bW11X2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAgICAgaWYgKCAhcGRldi0+ ZG9tYWluICkKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBBU1NFUlQoc3Bpbl9pc19s b2NrZWQoJnBjaWRldnNfbG9jaykpOworICAgIEFTU0VSVChwY2lkZXZzX2lzX2xvY2tlZCgpKTsK IAogICAgIGhkID0gZG9tYWluX2h2bV9pb21tdShwZGV2LT5kb21haW4pOwogICAgIGlmICggIWlv bW11X2VuYWJsZWQgfHwgIWhkLT5wbGF0Zm9ybV9vcHMgfHwKQEAgLTEzMjYsOSArMTM0Niw5IEBA IHN0YXRpYyBpbnQgZGV2aWNlX2Fzc2lnbmVkKHUxNiBzZWcsIHU4IGJ1cywgdTggZGV2Zm4pCiB7 CiAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKLSAgICBzcGluX2xvY2soJnBjaWRldnNfbG9j ayk7CisgICAgcGNpZGV2c19sb2NrKCk7CiAgICAgcGRldiA9IHBjaV9nZXRfcGRldl9ieV9kb21h aW4oaGFyZHdhcmVfZG9tYWluLCBzZWcsIGJ1cywgZGV2Zm4pOwotICAgIHNwaW5fdW5sb2NrKCZw Y2lkZXZzX2xvY2spOworICAgIHBjaWRldnNfdW5sb2NrKCk7CiAKICAgICByZXR1cm4gcGRldiA/ IDAgOiAtRUJVU1k7CiB9CkBAIC0xMzUwLDEzICsxMzcwLDEzIEBAIHN0YXRpYyBpbnQgYXNzaWdu X2RldmljZShzdHJ1Y3QgZG9tYWluICpkLCB1MTYgc2VnLCB1OCBidXMsIHU4IGRldmZuLCB1MzIg ZmxhZykKICAgICAgICAgICAgICBwMm1fZ2V0X2hvc3RwMm0oZCktPmdsb2JhbF9sb2dkaXJ0eSkp ICkKICAgICAgICAgcmV0dXJuIC1FWERFVjsKIAotICAgIGlmICggIXNwaW5fdHJ5bG9jaygmcGNp ZGV2c19sb2NrKSApCisgICAgaWYgKCAhcGNpZGV2c190cnlsb2NrKCkgKQogICAgICAgICByZXR1 cm4gLUVSRVNUQVJUOwogCiAgICAgcmMgPSBpb21tdV9jb25zdHJ1Y3QoZCk7CiAgICAgaWYgKCBy YyApCiAgICAgewotICAgICAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICAgICAg cGNpZGV2c191bmxvY2soKTsKICAgICAgICAgcmV0dXJuIHJjOwogICAgIH0KIApAQCAtMTM4Nyw3 ICsxNDA3LDcgQEAgc3RhdGljIGludCBhc3NpZ25fZGV2aWNlKHN0cnVjdCBkb21haW4gKmQsIHUx NiBzZWcsIHU4IGJ1cywgdTggZGV2Zm4sIHUzMiBmbGFnKQogIGRvbmU6CiAgICAgaWYgKCAhaGFz X2FyY2hfcGRldnMoZCkgJiYgbmVlZF9pb21tdShkKSApCiAgICAgICAgIGlvbW11X3RlYXJkb3du KGQpOwotICAgIHNwaW5fdW5sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBjaWRldnNfdW5sb2Nr KCk7CiAKICAgICByZXR1cm4gcmM7CiB9CkBAIC0xNDAyLDcgKzE0MjIsNyBAQCBpbnQgZGVhc3Np Z25fZGV2aWNlKHN0cnVjdCBkb21haW4gKmQsIHUxNiBzZWcsIHU4IGJ1cywgdTggZGV2Zm4pCiAg ICAgaWYgKCAhaW9tbXVfZW5hYmxlZCB8fCAhaGQtPnBsYXRmb3JtX29wcyApCiAgICAgICAgIHJl dHVybiAtRUlOVkFMOwogCi0gICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwY2lkZXZzX2xvY2sp KTsKKyAgICBBU1NFUlQocGNpZGV2c19pc19sb2NrZWQoKSk7CiAgICAgcGRldiA9IHBjaV9nZXRf cGRldl9ieV9kb21haW4oZCwgc2VnLCBidXMsIGRldmZuKTsKICAgICBpZiAoICFwZGV2ICkKICAg ICAgICAgcmV0dXJuIC1FTk9ERVY7CkBAIC0xNDU3LDcgKzE0NzcsNyBAQCBzdGF0aWMgaW50IGlv bW11X2dldF9kZXZpY2VfZ3JvdXAoCiAKICAgICBncm91cF9pZCA9IG9wcy0+Z2V0X2RldmljZV9n cm91cF9pZChzZWcsIGJ1cywgZGV2Zm4pOwogCi0gICAgc3Bpbl9sb2NrKCZwY2lkZXZzX2xvY2sp OworICAgIHBjaWRldnNfbG9jaygpOwogICAgIGZvcl9lYWNoX3BkZXYoIGQsIHBkZXYgKQogICAg IHsKICAgICAgICAgaWYgKCAocGRldi0+c2VnICE9IHNlZykgfHwKQEAgLTE0NzYsMTQgKzE0OTYs MTQgQEAgc3RhdGljIGludCBpb21tdV9nZXRfZGV2aWNlX2dyb3VwKAogCiAgICAgICAgICAgICBp ZiAoIHVubGlrZWx5KGNvcHlfdG9fZ3Vlc3Rfb2Zmc2V0KGJ1ZiwgaSwgJmJkZiwgMSkpICkKICAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2NrKTsK KyAgICAgICAgICAgICAgICBwY2lkZXZzX3VubG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVy biAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQogICAgIH0K IAotICAgIHNwaW5fdW5sb2NrKCZwY2lkZXZzX2xvY2spOworICAgIHBjaWRldnNfdW5sb2NrKCk7 CiAKICAgICByZXR1cm4gaTsKIH0KQEAgLTE2MTEsOSArMTYzMSw5IEBAIGludCBpb21tdV9kb19w Y2lfZG9tY3RsKAogICAgICAgICBidXMgPSBQQ0lfQlVTKG1hY2hpbmVfc2JkZik7CiAgICAgICAg IGRldmZuID0gUENJX0RFVkZOMihtYWNoaW5lX3NiZGYpOwogCi0gICAgICAgIHNwaW5fbG9jaygm cGNpZGV2c19sb2NrKTsKKyAgICAgICAgcGNpZGV2c19sb2NrKCk7CiAgICAgICAgIHJldCA9IGRl YXNzaWduX2RldmljZShkLCBzZWcsIGJ1cywgZGV2Zm4pOwotICAgICAgICBzcGluX3VubG9jaygm cGNpZGV2c19sb2NrKTsKKyAgICAgICAgcGNpZGV2c191bmxvY2soKTsKICAgICAgICAgaWYgKCBy ZXQgKQogICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19HX0VSUgogICAgICAgICAgICAgICAgICAg ICJkZWFzc2lnbiAlMDR4OiUwMng6JTAyeC4ldSBmcm9tIGRvbSVkIGZhaWxlZCAoJWQpXG4iLApk aWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmMgYi94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYwppbmRleCBkZDEzODY1Li4zMGYwMDdlIDEwMDY0 NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYworKysgYi94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYwpAQCAtMTI4Niw3ICsxMjg2LDcgQEAgaW50IGRv bWFpbl9jb250ZXh0X21hcHBpbmdfb25lKAogICAgIHUxNiBzZWcgPSBpb21tdS0+aW50ZWwtPmRy aGQtPnNlZ21lbnQ7CiAgICAgaW50IGFnYXc7CiAKLSAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQo JnBjaWRldnNfbG9jaykpOworICAgIEFTU0VSVChwY2lkZXZzX2lzX2xvY2tlZCgpKTsKICAgICBz cGluX2xvY2soJmlvbW11LT5sb2NrKTsKICAgICBtYWRkciA9IGJ1c190b19jb250ZXh0X21hZGRy KGlvbW11LCBidXMpOwogICAgIGNvbnRleHRfZW50cmllcyA9IChzdHJ1Y3QgY29udGV4dF9lbnRy eSAqKW1hcF92dGRfZG9tYWluX3BhZ2UobWFkZHIpOwpAQCAtMTQyOCw3ICsxNDI4LDcgQEAgc3Rh dGljIGludCBkb21haW5fY29udGV4dF9tYXBwaW5nKAogICAgIGlmICggIWRyaGQgKQogICAgICAg ICByZXR1cm4gLUVOT0RFVjsKIAotICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcGNpZGV2c19s b2NrKSk7CisgICAgQVNTRVJUKHBjaWRldnNfaXNfbG9ja2VkKCkpOwogCiAgICAgc3dpdGNoICgg cGRldi0+dHlwZSApCiAgICAgewpAQCAtMTUxMCw3ICsxNTEwLDcgQEAgaW50IGRvbWFpbl9jb250 ZXh0X3VubWFwX29uZSgKICAgICB1NjQgbWFkZHI7CiAgICAgaW50IGlvbW11X2RvbWlkOwogCi0g ICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwY2lkZXZzX2xvY2spKTsKKyAgICBBU1NFUlQocGNp ZGV2c19pc19sb2NrZWQoKSk7CiAgICAgc3Bpbl9sb2NrKCZpb21tdS0+bG9jayk7CiAKICAgICBt YWRkciA9IGJ1c190b19jb250ZXh0X21hZGRyKGlvbW11LCBidXMpOwpAQCAtMTgyMCw3ICsxODIw LDcgQEAgc3RhdGljIGludCBybXJyX2lkZW50aXR5X21hcHBpbmcoc3RydWN0IGRvbWFpbiAqZCwg Ym9vbF90IG1hcCwKICAgICBzdHJ1Y3QgbWFwcGVkX3JtcnIgKm1ybXJyOwogICAgIHN0cnVjdCBo dm1faW9tbXUgKmhkID0gZG9tYWluX2h2bV9pb21tdShkKTsKIAotICAgIEFTU0VSVChzcGluX2lz X2xvY2tlZCgmcGNpZGV2c19sb2NrKSk7CisgICAgQVNTRVJUKHBjaWRldnNfaXNfbG9ja2VkKCkp OwogICAgIEFTU0VSVChybXJyLT5iYXNlX2FkZHJlc3MgPCBybXJyLT5lbmRfYWRkcmVzcyk7CiAK ICAgICAvKgpAQCAtMTg4NSw3ICsxODg1LDcgQEAgc3RhdGljIGludCBpbnRlbF9pb21tdV9hZGRf ZGV2aWNlKHU4IGRldmZuLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKICAgICB1MTYgYmRmOwogICAg IGludCByZXQsIGk7CiAKLSAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnBjaWRldnNfbG9jaykp OworICAgIEFTU0VSVChwY2lkZXZzX2lzX2xvY2tlZCgpKTsKIAogICAgIGlmICggIXBkZXYtPmRv bWFpbiApCiAgICAgICAgIHJldHVybiAtRUlOVkFMOwpAQCAtMjExMyw3ICsyMTEzLDcgQEAgc3Rh dGljIHZvaWQgX19od2RvbV9pbml0IHNldHVwX2h3ZG9tX3JtcnIoc3RydWN0IGRvbWFpbiAqZCkK ICAgICB1MTYgYmRmOwogICAgIGludCByZXQsIGk7CiAKLSAgICBzcGluX2xvY2soJnBjaWRldnNf bG9jayk7CisgICAgcGNpZGV2c19sb2NrKCk7CiAgICAgZm9yX2VhY2hfcm1ycl9kZXZpY2UgKCBy bXJyLCBiZGYsIGkgKQogICAgIHsKICAgICAgICAgLyoKQEAgLTIxMjcsNyArMjEyNyw3IEBAIHN0 YXRpYyB2b2lkIF9faHdkb21faW5pdCBzZXR1cF9od2RvbV9ybXJyKHN0cnVjdCBkb21haW4gKmQp CiAgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIgVlREUFJFRklYLAogICAgICAgICAgICAg ICAgICAgICAgIklPTU1VOiBtYXBwaW5nIHJlc2VydmVkIHJlZ2lvbiBmYWlsZWRcbiIpOwogICAg IH0KLSAgICBzcGluX3VubG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICBwY2lkZXZzX3VubG9jaygp OwogfQogCiBpbnQgX19pbml0IGludGVsX3Z0ZF9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEveGVu L2RyaXZlcnMvdmlkZW8vdmdhLmMgYi94ZW4vZHJpdmVycy92aWRlby92Z2EuYwppbmRleCA0MGU1 OTYzLi42MWM2YjEzIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy92aWRlby92Z2EuYworKysgYi94 ZW4vZHJpdmVycy92aWRlby92Z2EuYwpAQCAtMTE3LDkgKzExNyw5IEBAIHZvaWQgX19pbml0IHZp ZGVvX2VuZGJvb3Qodm9pZCkKICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldiAq cGRldjsKICAgICAgICAgICAgICAgICB1OCBiID0gYnVzLCBkZiA9IGRldmZuLCBzYjsKIAotICAg ICAgICAgICAgICAgIHNwaW5fbG9jaygmcGNpZGV2c19sb2NrKTsKKyAgICAgICAgICAgICAgICBw Y2lkZXZzX2xvY2soKTsKICAgICAgICAgICAgICAgICBwZGV2ID0gcGNpX2dldF9wZGV2KDAsIGJ1 cywgZGV2Zm4pOwotICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZwY2lkZXZzX2xvY2spOwor ICAgICAgICAgICAgICAgIHBjaWRldnNfdW5sb2NrKCk7CiAKICAgICAgICAgICAgICAgICBpZiAo ICFwZGV2IHx8CiAgICAgICAgICAgICAgICAgICAgICBwY2lfY29uZl9yZWFkMTYoMCwgYnVzLCBQ Q0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRldmZuKSwKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRl L3hlbi9wY2kuaCBiL3hlbi9pbmNsdWRlL3hlbi9wY2kuaAppbmRleCBhNWFlZjU1Li5iODc1NzFk IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vcGNpLmgKKysrIGIveGVuL2luY2x1ZGUveGVu L3BjaS5oCkBAIC05NCw3ICs5NCwxMCBAQCBzdHJ1Y3QgcGNpX2RldiB7CiAgKiBpbnRlcnJ1cHQg aGFuZGxpbmcgcmVsYXRlZCAodGhlIG1hc2sgYml0IHJlZ2lzdGVyKS4KICAqLwogCi1leHRlcm4g c3BpbmxvY2tfdCBwY2lkZXZzX2xvY2s7Cit2b2lkIHBjaWRldnNfbG9jayh2b2lkKTsKK3ZvaWQg cGNpZGV2c191bmxvY2sodm9pZCk7CitpbnQgcGNpZGV2c19pc19sb2NrZWQodm9pZCk7CitpbnQg cGNpZGV2c190cnlsb2NrKHZvaWQpOwogCiBib29sX3QgcGNpX2tub3duX3NlZ21lbnQodTE2IHNl Zyk7CiBib29sX3QgcGNpX2RldmljZV9kZXRlY3QodTE2IHNlZywgdTggYnVzLCB1OCBkZXYsIHU4 IGZ1bmMpOwotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=