From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 7/9] ASoC: AMD: add AMD ASoC ACP 2.x DMA driver Date: Fri, 8 Jan 2016 18:22:09 -0500 Message-ID: <1452295331-28476-8-git-send-email-alexander.deucher@amd.com> References: <1452295331-28476-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1452295331-28476-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@gmail.com, dri-devel@lists.freedesktop.org, broonie@kernel.org, alsa-devel@alsa-project.org, maruthi.bayyavarapu@amd.com, rajeevkumar.linux@gmail.com Cc: Alex Deucher , Maruthi Srinivas Bayyavarapu , lgirdwood@gmail.com, perex@perex.cz List-Id: alsa-devel@alsa-project.org RnJvbTogTWFydXRoaSBTcmluaXZhcyBCYXl5YXZhcmFwdSA8TWFydXRoaS5CYXl5YXZhcmFwdUBh bWQuY29tPgoKQUNQIElQIGhhcyBpbnRlcm5hbCBETUEgY29udHJvbGxlciB3aXRoIG11bHRpcGxl IGNoYW5uZWxzIHdoaWNoCmNhbiBiZSBwcm9ncmFtbWVkIGluIGN5Y2xpYy9ub24gY3ljbGljIG1h bm5lci4gQUNQIGNhbiBnZW5lcmF0ZQppbnRlcnJ1cHQgdXBvbiBjb21wbGV0aW9uIG9mIERNQSB0 cmFuc2ZlciwgaWYgcmVxdWlyZWQuClRoZSBQQ00gZHJpdmVyIHByb3ZpZGVzIHRoZSBwbGF0Zm9y bSBETUEgY29tcG9uZW50IHRvIEFMU0EgY29yZS4KClNpZ25lZC1vZmYtYnk6IE1hcnV0aGkgQmF5 eWF2YXJhcHUgPG1hcnV0aGkuYmF5eWF2YXJhcHVAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXgg RGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IE11cmFsaSBL cmlzaG5hIFZlbXVyaSA8bXVyYWxpLWtyaXNobmEudmVtdXJpQGFtZC5jb20+ClNpZ25lZC1vZmYt Ynk6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KLS0tCgp2MjogQ2hh bmdlcwogICAgMS4gU3F1YXNoIEFDUCBETUEgYWJzdHJhY3Rpb24gYW5kIERNQSBwYXRjaGVzIHRv Z2V0aGVyCiAgICAyLiBGaXggSVJRX05PTkUgY2FzZSBpbiBkbWFfaXJxX2hhbmRsZXIKICAgIDMu IFJlcGxhY2UgdGVybmVyeSBvcGVyYXRpb25zCiAgICA0LiBBZGQgbG9vcCB0aW1lb3V0CnYzOiBD aGFuZ2VzCiAgICAxLiByZXBsYWNlIENPTVBfUEFSQU1fMSB3b3JrYXJvdW5kIHdpdGggYSBkd2Mg cXVpcmsKICAgIDIuIGJldHRlciBuYW1lc3BhY2VkIHNvbWUgbWFjcm9zCgogc291bmQvc29jL0tj b25maWcgICAgICAgICAgIHwgICAxICsKIHNvdW5kL3NvYy9NYWtlZmlsZSAgICAgICAgICB8ICAg MSArCiBzb3VuZC9zb2MvYW1kL0tjb25maWcgICAgICAgfCAgIDQgKwogc291bmQvc29jL2FtZC9N YWtlZmlsZSAgICAgIHwgICAzICsKIHNvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEuYyB8IDkxNCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc291bmQvc29jL2Ft ZC9hY3AuaCAgICAgICAgIHwgMTE4ICsrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMDQxIGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvYW1kL0tjb25maWcKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvYW1kL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQg c291bmQvc29jL2FtZC9hY3AtcGNtLWRtYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29j L2FtZC9hY3AuaAoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9LY29uZmlnIGIvc291bmQvc29jL0tj b25maWcKaW5kZXggN2ZmN2Q4OC4uYTM0ZTllOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL0tjb25m aWcKKysrIGIvc291bmQvc29jL0tjb25maWcKQEAgLTM4LDYgKzM4LDcgQEAgY29uZmlnIFNORF9T T0NfVE9QT0xPR1kKIAogIyBBbGwgdGhlIHN1cHBvcnRlZCBTb0NzCiBzb3VyY2UgInNvdW5kL3Nv Yy9hZGkvS2NvbmZpZyIKK3NvdXJjZSAic291bmQvc29jL2FtZC9LY29uZmlnIgogc291cmNlICJz b3VuZC9zb2MvYXRtZWwvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL2F1MXgvS2NvbmZpZyIK IHNvdXJjZSAic291bmQvc29jL2JjbS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL01h a2VmaWxlIGIvc291bmQvc29jL01ha2VmaWxlCmluZGV4IDhlYjA2ZGIuLmE3OWE0YzcgMTAwNjQ0 Ci0tLSBhL3NvdW5kL3NvYy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvTWFrZWZpbGUKQEAgLTE4 LDYgKzE4LDcgQEAgb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHNuZC1zb2MtY29yZS5vCiBvYmot JChDT05GSUdfU05EX1NPQykJKz0gY29kZWNzLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGdl bmVyaWMvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gYWRpLworb2JqLSQoQ09ORklHX1NORF9T T0MpCSs9IGFtZC8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBhdG1lbC8KIG9iai0kKENPTkZJ R19TTkRfU09DKQkrPSBhdTF4Lwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGJjbS8KZGlmZiAt LWdpdCBhL3NvdW5kL3NvYy9hbWQvS2NvbmZpZyBiL3NvdW5kL3NvYy9hbWQvS2NvbmZpZwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODE4N2ViCi0tLSAvZGV2L251bGwKKysr IGIvc291bmQvc29jL2FtZC9LY29uZmlnCkBAIC0wLDAgKzEsNCBAQAorY29uZmlnIFNORF9TT0Nf QU1EX0FDUAorCXRyaXN0YXRlICJBTUQgQXVkaW8gQ29wcm9jZXNzb3Igc3VwcG9ydCIKKwloZWxw CisJIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNQIERNQSBzdXBwb3J0IG9uIEFNRCBwbGF0Zm9ybS4K ZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hbWQvTWFrZWZpbGUgYi9zb3VuZC9zb2MvYW1kL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjZlYzAKLS0tIC9kZXYv bnVsbAorKysgYi9zb3VuZC9zb2MvYW1kL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorc25kLXNv Yy1hY3AtcGNtLW9ianMJOj0gYWNwLXBjbS1kbWEubworCitvYmotJChDT05GSUdfU05EX1NPQ19B TURfQUNQKSArPSBzbmQtc29jLWFjcC1wY20ubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2FtZC9h Y3AtcGNtLWRtYS5jIGIvc291bmQvc29jL2FtZC9hY3AtcGNtLWRtYS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MjRkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9z b2MvYW1kL2FjcC1wY20tZG1hLmMKQEAgLTAsMCArMSw5MTQgQEAKKy8qCisgKiBBTUQgQUxTQSBT b0MgUENNIERyaXZlciBmb3IgQUNQIDIueAorICoKKyAqIENvcHlyaWdodCAyMDE0LTIwMTUgQWR2 YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zaXplcy5o PgorCisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICJhY3AuaCIKKworI2RlZmlu ZSBQTEFZQkFDS19NSU5fTlVNX1BFUklPRFMgICAgMgorI2RlZmluZSBQTEFZQkFDS19NQVhfTlVN X1BFUklPRFMgICAgMgorI2RlZmluZSBQTEFZQkFDS19NQVhfUEVSSU9EX1NJWkUgICAgMTYzODQK KyNkZWZpbmUgUExBWUJBQ0tfTUlOX1BFUklPRF9TSVpFICAgIDEwMjQKKyNkZWZpbmUgQ0FQVFVS RV9NSU5fTlVNX1BFUklPRFMgICAgIDIKKyNkZWZpbmUgQ0FQVFVSRV9NQVhfTlVNX1BFUklPRFMg ICAgIDIKKyNkZWZpbmUgQ0FQVFVSRV9NQVhfUEVSSU9EX1NJWkUgICAgIDE2Mzg0CisjZGVmaW5l IENBUFRVUkVfTUlOX1BFUklPRF9TSVpFICAgICAxMDI0CisKKyNkZWZpbmUgTUFYX0JVRkZFUiAo UExBWUJBQ0tfTUFYX1BFUklPRF9TSVpFICogUExBWUJBQ0tfTUFYX05VTV9QRVJJT0RTKQorI2Rl ZmluZSBNSU5fQlVGRkVSIE1BWF9CVUZGRVIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNt X2hhcmR3YXJlIGFjcF9wY21faGFyZHdhcmVfcGxheWJhY2sgPSB7CisJLmluZm8gPSBTTkRSVl9Q Q01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwg U05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfCBTTkRS Vl9QQ01fSU5GT19CQVRDSCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwgU05EUlZfUENNX0lO Rk9fUkVTVU1FLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQlTTkRS Vl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAorCS5jaGFubmVs c19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSA4LAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRF XzgwMDBfOTYwMDAsCisJLnJhdGVfbWluID0gODAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwku YnVmZmVyX2J5dGVzX21heCA9IFBMQVlCQUNLX01BWF9OVU1fUEVSSU9EUyAqIFBMQVlCQUNLX01B WF9QRVJJT0RfU0laRSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IFBMQVlCQUNLX01JTl9QRVJJT0Rf U0laRSwKKwkucGVyaW9kX2J5dGVzX21heCA9IFBMQVlCQUNLX01BWF9QRVJJT0RfU0laRSwKKwku cGVyaW9kc19taW4gPSBQTEFZQkFDS19NSU5fTlVNX1BFUklPRFMsCisJLnBlcmlvZHNfbWF4ID0g UExBWUJBQ0tfTUFYX05VTV9QRVJJT0RTLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRf cGNtX2hhcmR3YXJlIGFjcF9wY21faGFyZHdhcmVfY2FwdHVyZSA9IHsKKwkuaW5mbyA9IFNORFJW X1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIg fCBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8IFNO RFJWX1BDTV9JTkZPX0JBVENIIHwKKwkgICAgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9Q Q01fSU5GT19SRVNVTUUsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJ CVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisJLmNo YW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLnJhdGVzID0gU05EUlZfUENN X1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4gPSA4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAw LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gQ0FQVFVSRV9NQVhfTlVNX1BFUklPRFMgKiBDQVBUVVJF X01BWF9QRVJJT0RfU0laRSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IENBUFRVUkVfTUlOX1BFUklP RF9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gQ0FQVFVSRV9NQVhfUEVSSU9EX1NJWkUsCisJ LnBlcmlvZHNfbWluID0gQ0FQVFVSRV9NSU5fTlVNX1BFUklPRFMsCisJLnBlcmlvZHNfbWF4ID0g Q0FQVFVSRV9NQVhfTlVNX1BFUklPRFMsCit9OworCitzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgewor CXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGxheV9zdHJlYW07CisJc3RydWN0IHNuZF9wY21f c3Vic3RyZWFtICpjYXB0dXJlX3N0cmVhbTsKKwl2b2lkIF9faW9tZW0gKmFjcF9tbWlvOworfTsK Kworc3RhdGljIHUzMiBhY3BfcmVnX3JlYWQodm9pZCBfX2lvbWVtICphY3BfbW1pbywgdTMyIHJl ZykKK3sKKwlyZXR1cm4gcmVhZGwoYWNwX21taW8gKyAocmVnICogNCkpOworfQorCitzdGF0aWMg dm9pZCBhY3BfcmVnX3dyaXRlKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWNwX21taW8sIHUzMiBy ZWcpCit7CisJd3JpdGVsKHZhbCwgYWNwX21taW8gKyAocmVnICogNCkpOworfQorCisvKiBDb25m aWd1cmUgYSBnaXZlbiBkbWEgY2hhbm5lbCBwYXJhbWV0ZXJzIC0gZW5hYmxlL2Rpc2JsZSwKKyAq IG51bWJlciBvZiBkZXNjcmlwdG9ycywgcHJpb3JpdHkKKyAqLworc3RhdGljIHZvaWQgY29uZmln X2FjcF9kbWFfY2hhbm5lbCh2b2lkIF9faW9tZW0gKmFjcF9tbWlvLCB1OCBjaF9udW0sCisJCQkJ ICAgdTE2IGRzY3Jfc3RydF9pZHgsIHUxNiBudW1fZHNjcnMsCisJCQkJICAgZW51bSBhY3BfZG1h X3ByaW9yaXR5X2xldmVsIHByaW9yaXR5X2xldmVsKQoreworCXUzMiBkbWFfY3RybDsKKworCS8q IGRpc2FibGUgdGhlIGNoYW5uZWwgcnVuIGZpZWxkICovCisJZG1hX2N0cmwgPSBhY3BfcmVnX3Jl YWQoYWNwX21taW8sIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pOworCWRtYV9jdHJsICY9IH5B Q1BfRE1BX0NOVExfMF9fRE1BQ2hSdW5fTUFTSzsKKwlhY3BfcmVnX3dyaXRlKGRtYV9jdHJsLCBh Y3BfbW1pbywgbW1BQ1BfRE1BX0NOVExfMCArIGNoX251bSk7CisKKwkvKiBwcm9ncmFtIGEgRE1B IGNoYW5uZWwgd2l0aCBmaXJzdCBkZXNjcmlwdG9yIHRvIGJlIHByb2Nlc3NlZC4gKi8KKwlhY3Bf cmVnX3dyaXRlKChBQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfMF9fRE1BQ2hEc2NyU3RydElkeF9NQVNL CisJCQkmIGRzY3Jfc3RydF9pZHgpLAorCQkJYWNwX21taW8sIG1tQUNQX0RNQV9EU0NSX1NUUlRf SURYXzAgKyBjaF9udW0pOworCisJLyogcHJvZ3JhbSBhIERNQSBjaGFubmVsIHdpdGggdGhlIG51 bWJlciBvZiBkZXNjcmlwdG9ycyB0byBiZQorCSAqIHByb2Nlc3NlZCBpbiB0aGUgdHJhbnNmZXIK KwkqLworCWFjcF9yZWdfd3JpdGUoQUNQX0RNQV9EU0NSX0NOVF8wX19ETUFDaERzY3JDbnRfTUFT SyAmIG51bV9kc2NycywKKwkJYWNwX21taW8sIG1tQUNQX0RNQV9EU0NSX0NOVF8wICsgY2hfbnVt KTsKKworCS8qIHNldCBETUEgY2hhbm5lbCBwcmlvcml0eSAqLworCWFjcF9yZWdfd3JpdGUocHJp b3JpdHlfbGV2ZWwsIGFjcF9tbWlvLCBtbUFDUF9ETUFfUFJJT18wICsgY2hfbnVtKTsKK30KKwor LyogSW5pdGlhbGl6ZSBhIGRtYSBkZXNjcmlwdG9yIGluIFNSQU0gYmFzZWQgb24gZGVzY3JpdG9y IGluZm9ybWF0aW9uIHBhc3NlZCAqLworc3RhdGljIHZvaWQgY29uZmlnX2RtYV9kZXNjcmlwdG9y X2luX3NyYW0odm9pZCBfX2lvbWVtICphY3BfbW1pbywKKwkJCQkJICB1MTYgZGVzY3JfaWR4LAor CQkJCQkgIGFjcF9kbWFfZHNjcl90cmFuc2Zlcl90ICpkZXNjcl9pbmZvKQoreworCXUzMiBzcmFt X29mZnNldDsKKworCXNyYW1fb2Zmc2V0ID0gKGRlc2NyX2lkeCAqIHNpemVvZihhY3BfZG1hX2Rz Y3JfdHJhbnNmZXJfdCkpOworCisJLyogcHJvZ3JhbSB0aGUgc291cmNlIGJhc2UgYWRkcmVzcy4g Ki8KKwlhY3BfcmVnX3dyaXRlKHNyYW1fb2Zmc2V0LCBhY3BfbW1pbywgbW1BQ1BfU1JCTV9UYXJn X0lkeF9BZGRyKTsKKwlhY3BfcmVnX3dyaXRlKGRlc2NyX2luZm8tPnNyYywJYWNwX21taW8sIG1t QUNQX1NSQk1fVGFyZ19JZHhfRGF0YSk7CisJLyogcHJvZ3JhbSB0aGUgZGVzdGluYXRpb24gYmFz ZSBhZGRyZXNzLiAqLworCWFjcF9yZWdfd3JpdGUoc3JhbV9vZmZzZXQgKyA0LAlhY3BfbW1pbywg bW1BQ1BfU1JCTV9UYXJnX0lkeF9BZGRyKTsKKwlhY3BfcmVnX3dyaXRlKGRlc2NyX2luZm8tPmRl c3QsIGFjcF9tbWlvLCBtbUFDUF9TUkJNX1RhcmdfSWR4X0RhdGEpOworCisJLyogcHJvZ3JhbSB0 aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIGZvciB0aGlzIGRlc2NyaXB0b3Iu ICovCisJYWNwX3JlZ193cml0ZShzcmFtX29mZnNldCArIDgsCWFjcF9tbWlvLCBtbUFDUF9TUkJN X1RhcmdfSWR4X0FkZHIpOworCWFjcF9yZWdfd3JpdGUoZGVzY3JfaW5mby0+eGZlcl92YWwsIGFj cF9tbWlvLCBtbUFDUF9TUkJNX1RhcmdfSWR4X0RhdGEpOworfQorCisvKiBJbml0aWFsaXplIHRo ZSBETUEgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiBmb3IgdHJhbnNmZXIgYmV0d2VlbgorICogc3lz dGVtIG1lbW9yeSA8LT4gQUNQIFNSQU0KKyAqLworc3RhdGljIHZvaWQgc2V0X2FjcF9zeXNtZW1f ZG1hX2Rlc2NyaXB0b3JzKHZvaWQgX19pb21lbSAqYWNwX21taW8sCisJCQkJCSAgIHUzMiBzaXpl LCBpbnQgZGlyZWN0aW9uLAorCQkJCQkgICB1MzIgcHRlX29mZnNldCkKK3sKKwl1MTYgaTsKKwl1 MTYgZG1hX2RzY3JfaWR4ID0gUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTI7CisJYWNwX2Rt YV9kc2NyX3RyYW5zZmVyX3QgZG1hZHNjcltOVU1fRFNDUlNfUEVSX0NIQU5ORUxdOworCisJZm9y IChpID0gMDsgaSA8IE5VTV9EU0NSU19QRVJfQ0hBTk5FTDsgaSsrKSB7CisJCWRtYWRzY3JbaV0u eGZlcl92YWwgPSAwOworCQlpZiAoZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJB Q0spIHsKKwkJCWRtYV9kc2NyX2lkeCA9IFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEyICsg aTsKKwkJCWRtYWRzY3JbaV0uZGVzdCA9IEFDUF9TSEFSRURfUkFNX0JBTktfMV9BRERSRVNTICsK KwkJCQkJKHNpemUgLyAyKSAtIChpICogKHNpemUvMikpOworCQkJZG1hZHNjcltpXS5zcmMgPSBB Q1BfSU5URVJOQUxfQVBFUlRVUkVfV0lORE9XXzBfQUREUkVTUworCQkJCSsgKHB0ZV9vZmZzZXQg KiBTWl80SykgKyAoaSAqIChzaXplLzIpKTsKKwkJCWRtYWRzY3JbaV0ueGZlcl92YWwgfD0KKwkJ CShBQ1BfRE1BX0FUVFJJQlVURVNfREFHQl9PTklPTl9UT19TSEFSRURNRU0gPDwgMTYpIHwKKwkJ CShzaXplIC8gMik7CisJCX0gZWxzZSB7CisJCQlkbWFfZHNjcl9pZHggPSBDQVBUVVJFX1NUQVJU X0RNQV9ERVNDUl9DSDE0ICsgaTsKKwkJCWRtYWRzY3JbaV0uc3JjID0gQUNQX1NIQVJFRF9SQU1f QkFOS181X0FERFJFU1MgKworCQkJCQkoaSAqIChzaXplLzIpKTsKKwkJCWRtYWRzY3JbaV0uZGVz dCA9IEFDUF9JTlRFUk5BTF9BUEVSVFVSRV9XSU5ET1dfMF9BRERSRVNTCisJCQkJCQkrIChwdGVf b2Zmc2V0ICogU1pfNEspICsKKwkJCQkJCShpICogKHNpemUvMikpOworCQkJZG1hZHNjcltpXS54 ZmVyX3ZhbCB8PQorCQkJQklUKDIyKSB8CisJCQkoQUNQX0RNQV9BVFRSSUJVVEVTX1NIQVJFRE1F TV9UT19EQUdCX09OSU9OIDw8IDE2KSB8CisJCQkoc2l6ZSAvIDIpOworCQl9CisJCWNvbmZpZ19k bWFfZGVzY3JpcHRvcl9pbl9zcmFtKGFjcF9tbWlvLCBkbWFfZHNjcl9pZHgsCisJCQkJCQkmZG1h ZHNjcltpXSk7CisJfQorCWlmIChkaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFD SykKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChhY3BfbW1pbywgU1lTUkFNX1RPX0FDUF9DSF9O VU0sCisJCQkJCVBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEyLAorCQkJCQlOVU1fRFNDUlNf UEVSX0NIQU5ORUwsCisJCQkJCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxfTk9STUFMKTsKKwllbHNl CisJCWNvbmZpZ19hY3BfZG1hX2NoYW5uZWwoYWNwX21taW8sIEFDUF9UT19TWVNSQU1fQ0hfTlVN LAorCQkJCQlDQVBUVVJFX1NUQVJUX0RNQV9ERVNDUl9DSDE0LAorCQkJCQlOVU1fRFNDUlNfUEVS X0NIQU5ORUwsCisJCQkJCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxfTk9STUFMKTsKK30KKworLyog SW5pdGlhbGl6ZSB0aGUgRE1BIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gZm9yIHRyYW5zZmVyIGJl dHdlZW4KKyAqIEFDUCBTUkFNIDwtPiBJMlMKKyAqLworc3RhdGljIHZvaWQgc2V0X2FjcF90b19p MnNfZG1hX2Rlc2NyaXB0b3JzKHZvaWQgX19pb21lbSAqYWNwX21taW8sCisJCQkJCSAgIHUzMiBz aXplLCBpbnQgZGlyZWN0aW9uKQoreworCisJdTE2IGk7CisJdTE2IGRtYV9kc2NyX2lkeCA9IFBM QVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEzOworCWFjcF9kbWFfZHNjcl90cmFuc2Zlcl90IGRt YWRzY3JbTlVNX0RTQ1JTX1BFUl9DSEFOTkVMXTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRFND UlNfUEVSX0NIQU5ORUw7IGkrKykgeworCQlkbWFkc2NyW2ldLnhmZXJfdmFsID0gMDsKKwkJaWYg KGRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCQlkbWFfZHNjcl9p ZHggPSBQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMyArIGk7CisJCQlkbWFkc2NyW2ldLnNy YyA9IEFDUF9TSEFSRURfUkFNX0JBTktfMV9BRERSRVNTICsKKwkJCQkJIChpICogKHNpemUvMikp OworCQkJLyogZG1hZHNjcltpXS5kZXN0IGlzIHVudXNlZCBieSBoYXJkd2FyZS4gKi8KKwkJCWRt YWRzY3JbaV0uZGVzdCA9IDA7CisJCQlkbWFkc2NyW2ldLnhmZXJfdmFsIHw9IEJJVCgyMikgfCAo VE9fQUNQX0kyU18xIDw8IDE2KSB8CisJCQkJCQkoc2l6ZSAvIDIpOworCQl9IGVsc2UgeworCQkJ ZG1hX2RzY3JfaWR4ID0gQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSArIGk7CisJCQkvKiBk bWFkc2NyW2ldLnNyYyBpcyB1bnVzZWQgYnkgaGFyZHdhcmUuICovCisJCQlkbWFkc2NyW2ldLnNy YyA9IDA7CisJCQlkbWFkc2NyW2ldLmRlc3QgPSBBQ1BfU0hBUkVEX1JBTV9CQU5LXzVfQUREUkVT UyArCisJCQkJCShpICogKHNpemUgLyAyKSk7CisJCQlkbWFkc2NyW2ldLnhmZXJfdmFsIHw9IEJJ VCgyMikgfAorCQkJCQkoRlJPTV9BQ1BfSTJTXzEgPDwgMTYpIHwgKHNpemUgLyAyKTsKKwkJfQor CQljb25maWdfZG1hX2Rlc2NyaXB0b3JfaW5fc3JhbShhY3BfbW1pbywgZG1hX2RzY3JfaWR4LAor CQkJCQkJJmRtYWRzY3JbaV0pOworCX0KKwkvKiBDb25maWd1cmUgdGhlIERNQSBjaGFubmVsIHdp dGggdGhlIGFib3ZlIGRlc2NyaXB0b3JlICovCisJaWYgKGRpcmVjdGlvbiA9PSBTTkRSVl9QQ01f U1RSRUFNX1BMQVlCQUNLKQorCQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9tbWlvLCBBQ1Bf VE9fSTJTX0RNQV9DSF9OVU0sCisJCQkJCVBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEzLAor CQkJCQlOVU1fRFNDUlNfUEVSX0NIQU5ORUwsCisJCQkJCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxf Tk9STUFMKTsKKwllbHNlCisJCWNvbmZpZ19hY3BfZG1hX2NoYW5uZWwoYWNwX21taW8sIEkyU19U T19BQ1BfRE1BX0NIX05VTSwKKwkJCQkJQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSwKKwkJ CQkJTlVNX0RTQ1JTX1BFUl9DSEFOTkVMLAorCQkJCQlBQ1BfRE1BX1BSSU9SSVRZX0xFVkVMX05P Uk1BTCk7Cit9CisKKy8qIENyZWF0ZSBwYWdlIHRhYmxlIGVudHJpZXMgaW4gQUNQIFNSQU0gZm9y IHRoZSBhbGxvY2F0ZWQgbWVtb3J5ICovCitzdGF0aWMgdm9pZCBhY3BfcHRlX2NvbmZpZyh2b2lk IF9faW9tZW0gKmFjcF9tbWlvLCBzdHJ1Y3QgcGFnZSAqcGcsCisJCQkgICB1MTYgbnVtX29mX3Bh Z2VzLCB1MzIgcHRlX29mZnNldCkKK3sKKwl1MTYgcGFnZV9pZHg7CisJdTY0IGFkZHI7CisJdTMy IGxvdzsKKwl1MzIgaGlnaDsKKwl1MzIgb2Zmc2V0OworCisJb2Zmc2V0CT0gQUNQX0RBR0JfR1JQ X1NSQk1fU1JBTV9CQVNFX09GRlNFVCArIChwdGVfb2Zmc2V0ICogOCk7CisJZm9yIChwYWdlX2lk eCA9IDA7IHBhZ2VfaWR4IDwgKG51bV9vZl9wYWdlcyk7IHBhZ2VfaWR4KyspIHsKKwkJLyogTG9h ZCB0aGUgbG93IGFkZHJlc3Mgb2YgcGFnZSBpbnQgQUNQIFNSQU0gdGhyb3VnaCBTUkJNICovCisJ CWFjcF9yZWdfd3JpdGUoKG9mZnNldCArIChwYWdlX2lkeCAqIDgpKSwKKwkJCWFjcF9tbWlvLCBt bUFDUF9TUkJNX1RhcmdfSWR4X0FkZHIpOworCQlhZGRyID0gcGFnZV90b19waHlzKHBnKTsKKwor CQlsb3cgPSBsb3dlcl8zMl9iaXRzKGFkZHIpOworCQloaWdoID0gdXBwZXJfMzJfYml0cyhhZGRy KTsKKworCQlhY3BfcmVnX3dyaXRlKGxvdywgYWNwX21taW8sIG1tQUNQX1NSQk1fVGFyZ19JZHhf RGF0YSk7CisKKwkJLyogTG9hZCB0aGUgSGlnaCBhZGRyZXNzIG9mIHBhZ2UgaW50IEFDUCBTUkFN IHRocm91Z2ggU1JCTSAqLworCQlhY3BfcmVnX3dyaXRlKChvZmZzZXQgKyAocGFnZV9pZHggKiA4 KSArIDQpLAorCQkJYWNwX21taW8sIG1tQUNQX1NSQk1fVGFyZ19JZHhfQWRkcik7CisKKwkJLyog cGFnZSBlbmFibGUgaW4gQUNQICovCisJCWhpZ2ggfD0gQklUKDMxKTsKKwkJYWNwX3JlZ193cml0 ZShoaWdoLCBhY3BfbW1pbywgbW1BQ1BfU1JCTV9UYXJnX0lkeF9EYXRhKTsKKworCQkvKiBNb3Zl IHRvIG5leHQgcGh5c2ljYWxseSBjb250aWd1b3MgcGFnZSAqLworCQlwZysrOworCX0KK30KKwor c3RhdGljIHZvaWQgY29uZmlnX2FjcF9kbWEodm9pZCBfX2lvbWVtICphY3BfbW1pbywKKwkJCSAg IHN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqYXVkaW9fY29uZmlnKQoreworCXUzMiBwdGVf b2Zmc2V0OworCisJaWYgKGF1ZGlvX2NvbmZpZy0+ZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJF QU1fUExBWUJBQ0spCisJCXB0ZV9vZmZzZXQgPSBBQ1BfUExBWUJBQ0tfUFRFX09GRlNFVDsKKwll bHNlCisJCXB0ZV9vZmZzZXQgPSBBQ1BfQ0FQVFVSRV9QVEVfT0ZGU0VUOworCisJYWNwX3B0ZV9j b25maWcoYWNwX21taW8sIGF1ZGlvX2NvbmZpZy0+cGcsIGF1ZGlvX2NvbmZpZy0+bnVtX29mX3Bh Z2VzLAorCQkJcHRlX29mZnNldCk7CisKKwkvKiBDb25maWd1cmUgU3lzdGVtIG1lbW9yeSA8LT4g QUNQIFNSQU0gRE1BIGRlc2NyaXB0b3JzICovCisJc2V0X2FjcF9zeXNtZW1fZG1hX2Rlc2NyaXB0 b3JzKGFjcF9tbWlvLCBhdWRpb19jb25maWctPnNpemUsCisJCQkJICAgICAgIGF1ZGlvX2NvbmZp Zy0+ZGlyZWN0aW9uLCBwdGVfb2Zmc2V0KTsKKworCS8qIENvbmZpZ3VyZSBBQ1AgU1JBTSA8LT4g STJTIERNQSBkZXNjcmlwdG9ycyAqLworCXNldF9hY3BfdG9faTJzX2RtYV9kZXNjcmlwdG9ycyhh Y3BfbW1pbywgYXVkaW9fY29uZmlnLT5zaXplLAorCQkJCQlhdWRpb19jb25maWctPmRpcmVjdGlv bik7Cit9CisKKy8qIFN0YXJ0IGEgZ2l2ZW4gRE1BIGNoYW5uZWwgdHJhbnNmZXIgKi8KK3N0YXRp YyB2b2lkIGFjcF9kbWFfc3RhcnQodm9pZCBfX2lvbWVtICphY3BfbW1pbywKKwkJCSB1MTYgY2hf bnVtLCBib29sIGlzX2NpcmN1bGFyKQoreworCXUzMiBkbWFfY3RybDsKKworCS8qIHJlYWQgdGhl IGRtYSBjb250cm9sIHJlZ2lzdGVyIGFuZCBkaXNhYmxlIHRoZSBjaGFubmVsIHJ1biBmaWVsZCAq LworCWRtYV9jdHJsID0gYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9ETUFfQ05UTF8wICsg Y2hfbnVtKTsKKworCS8qIEludmFsaWRhdGluZyB0aGUgREFHQiBjYWNoZSAqLworCWFjcF9yZWdf d3JpdGUoMSwgYWNwX21taW8sIG1tQUNQX0RBR0JfQVRVX0NUUkwpOworCisJLyogY29uZmlndXJl IHRoZSBETUEgY2hhbm5lbCBhbmQgc3RhcnQgdGhlIERNQSB0cmFuc2ZlcgorCSAqIHNldCBkbWFj aHJ1biBiaXQgdG8gc3RhcnQgdGhlIHRyYW5zZmVyIGFuZCBlbmFibGUgdGhlCisJICogaW50ZXJy dXB0IG9uIGNvbXBsZXRpb24gb2YgdGhlIGRtYSB0cmFuc2ZlcgorCSAqLworCWRtYV9jdHJsIHw9 IEFDUF9ETUFfQ05UTF8wX19ETUFDaFJ1bl9NQVNLOworCisJc3dpdGNoIChjaF9udW0pIHsKKwlj YXNlIEFDUF9UT19JMlNfRE1BX0NIX05VTToKKwljYXNlIEFDUF9UT19TWVNSQU1fQ0hfTlVNOgor CWNhc2UgSTJTX1RPX0FDUF9ETUFfQ0hfTlVNOgorCQlkbWFfY3RybCB8PSBBQ1BfRE1BX0NOVExf MF9fRE1BQ2hJT0NFbl9NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkbWFfY3RybCAmPSB+ QUNQX0RNQV9DTlRMXzBfX0RNQUNoSU9DRW5fTUFTSzsKKwkJYnJlYWs7CisJfQorCisJLyogZW5h YmxlICBmb3IgQUNQIFNSQU0gdG8vZnJvbSBJMlMgRE1BIGNoYW5uZWwgKi8KKwlpZiAoaXNfY2ly Y3VsYXIgPT0gdHJ1ZSkKKwkJZG1hX2N0cmwgfD0gQUNQX0RNQV9DTlRMXzBfX0NpcmN1bGFyX0RN QV9Fbl9NQVNLOworCWVsc2UKKwkJZG1hX2N0cmwgJj0gfkFDUF9ETUFfQ05UTF8wX19DaXJjdWxh cl9ETUFfRW5fTUFTSzsKKworCWFjcF9yZWdfd3JpdGUoZG1hX2N0cmwsIGFjcF9tbWlvLCBtbUFD UF9ETUFfQ05UTF8wICsgY2hfbnVtKTsKK30KKworLyogU3RvcCBhIGdpdmVuIERNQSBjaGFubmVs IHRyYW5zZmVyICovCitzdGF0aWMgaW50IGFjcF9kbWFfc3RvcCh2b2lkIF9faW9tZW0gKmFjcF9t bWlvLCB1OCBjaF9udW0pCit7CisJdTMyIGRtYV9jdHJsOworCXUzMiBkbWFfY2hfc3RzOworCXUz MiBjb3VudCA9IEFDUF9ETUFfUkVTRVRfVElNRTsKKworCWRtYV9jdHJsID0gYWNwX3JlZ19yZWFk KGFjcF9tbWlvLCBtbUFDUF9ETUFfQ05UTF8wICsgY2hfbnVtKTsKKworCS8qIGNsZWFyIHRoZSBk bWEgY29udHJvbCByZWdpc3RlciBmaWVsZHMgYmVmb3JlIHdyaXRpbmcgemVybworCSAqIGluIHJl c2V0IGJpdAorCSovCisJZG1hX2N0cmwgJj0gfkFDUF9ETUFfQ05UTF8wX19ETUFDaFJ1bl9NQVNL OworCWRtYV9jdHJsICY9IH5BQ1BfRE1BX0NOVExfMF9fRE1BQ2hJT0NFbl9NQVNLOworCisJYWNw X3JlZ193cml0ZShkbWFfY3RybCwgYWNwX21taW8sIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0p OworCWRtYV9jaF9zdHMgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX0RNQV9DSF9TVFMp OworCisJaWYgKGRtYV9jaF9zdHMgJiBCSVQoY2hfbnVtKSkgeworCQkvKiBzZXQgdGhlIHJlc2V0 IGJpdCBmb3IgdGhpcyBjaGFubmVsIHRvIHN0b3AgdGhlIGRtYQorCQkqICB0cmFuc2ZlcgorCQkq LworCQlkbWFfY3RybCB8PSBBQ1BfRE1BX0NOVExfMF9fRE1BQ2hSc3RfTUFTSzsKKwkJYWNwX3Jl Z193cml0ZShkbWFfY3RybCwgYWNwX21taW8sIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pOwor CX0KKworCS8qIGNoZWNrIHRoZSBjaGFubmVsIHN0YXR1cyBiaXQgZm9yIHNvbWUgdGltZSBhbmQg cmV0dXJuIHRoZSBzdGF0dXMgKi8KKwl3aGlsZSAodHJ1ZSkgeworCQlkbWFfY2hfc3RzID0gYWNw X3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9ETUFfQ0hfU1RTKTsKKwkJaWYgKCEoZG1hX2NoX3N0 cyAmIEJJVChjaF9udW0pKSkgeworCQkJLyogY2xlYXIgdGhlIHJlc2V0IGZsYWcgYWZ0ZXIgc3Vj Y2Vzc2Z1bGx5IHN0b3BwaW5nCisJCQkqIHRoZSBkbWEgdHJhbnNmZXIgYW5kIGJyZWFrIGZyb20g dGhlIGxvb3AKKwkJCSovCisJCQlkbWFfY3RybCAmPSB+QUNQX0RNQV9DTlRMXzBfX0RNQUNoUnN0 X01BU0s7CisKKwkJCWFjcF9yZWdfd3JpdGUoZG1hX2N0cmwsIGFjcF9tbWlvLCBtbUFDUF9ETUFf Q05UTF8wCisJCQkJCQkJCSsgY2hfbnVtKTsKKwkJCWJyZWFrOworCQl9CisJCWlmICgtLWNvdW50 ID09IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHN0b3AgQUNQIERNQSBjaGFubmVsIDogJWRc biIsIGNoX251bSk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQl1ZGVsYXkoMTAwKTsK Kwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEluaXRpYWxpemUgYW5kIGJyaW5nIEFDUCBoYXJkd2Fy ZSB0byBkZWZhdWx0IHN0YXRlLiAqLworc3RhdGljIGludCBhY3BfaW5pdCh2b2lkIF9faW9tZW0g KmFjcF9tbWlvKQoreworCXUzMiB2YWwsIGNvdW50LCBzcmFtX3B0ZV9vZmZzZXQ7CisKKwkvKiBB c3NlcnQgU29mdCByZXNldCBvZiBBQ1AgKi8KKwl2YWwgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8s IG1tQUNQX1NPRlRfUkVTRVQpOworCisJdmFsIHw9IEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRB dWRfTUFTSzsKKwlhY3BfcmVnX3dyaXRlKHZhbCwgYWNwX21taW8sIG1tQUNQX1NPRlRfUkVTRVQp OworCisJY291bnQgPSBBQ1BfU09GVF9SRVNFVF9ET05FX1RJTUVfT1VUX1ZBTFVFOworCXdoaWxl ICh0cnVlKSB7CisJCXZhbCA9IGFjcF9yZWdfcmVhZChhY3BfbW1pbywgbW1BQ1BfU09GVF9SRVNF VCk7CisJCWlmIChBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkRG9uZV9NQVNLID09CisJCSAg ICAodmFsICYgQUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNldEF1ZERvbmVfTUFTSykpCisJCQlicmVh azsKKwkJaWYgKC0tY291bnQgPT0gMCkgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVzZXQgQUNQ XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCXVkZWxheSgxMDApOworCX0KKwor CS8qIEVuYWJsZSBjbG9jayB0byBBQ1AgYW5kIHdhaXQgdW50aWwgdGhlIGNsb2NrIGlzIGVuYWJs ZWQgKi8KKwl2YWwgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX0NPTlRST0wpOworCXZh bCA9IHZhbCB8IEFDUF9DT05UUk9MX19DbGtFbl9NQVNLOworCWFjcF9yZWdfd3JpdGUodmFsLCBh Y3BfbW1pbywgbW1BQ1BfQ09OVFJPTCk7CisKKwljb3VudCA9IEFDUF9DTE9DS19FTl9USU1FX09V VF9WQUxVRTsKKworCXdoaWxlICh0cnVlKSB7CisJCXZhbCA9IGFjcF9yZWdfcmVhZChhY3BfbW1p bywgbW1BQ1BfU1RBVFVTKTsKKwkJaWYgKHZhbCAmICh1MzIpIDB4MSkKKwkJCWJyZWFrOworCQlp ZiAoLS1jb3VudCA9PSAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZXNldCBBQ1BcbiIpOwor CQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJdWRlbGF5KDEwMCk7CisJfQorCisJLyogRGVh c3NlcnQgdGhlIFNPRlQgUkVTRVQgZmxhZ3MgKi8KKwl2YWwgPSBhY3BfcmVnX3JlYWQoYWNwX21t aW8sIG1tQUNQX1NPRlRfUkVTRVQpOworCXZhbCAmPSB+QUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNl dEF1ZF9NQVNLOworCWFjcF9yZWdfd3JpdGUodmFsLCBhY3BfbW1pbywgbW1BQ1BfU09GVF9SRVNF VCk7CisKKwkvKiBpbml0aWFpbGl6ZSBPbmlvbiBjb250cm9sIERBR0IgcmVnaXN0ZXIgKi8KKwlh Y3BfcmVnX3dyaXRlKEFDUF9PTklPTl9DTlRMX0RFRkFVTFQsIGFjcF9tbWlvLAorCQkJbW1BQ1Bf QVhJMkRBR0JfT05JT05fQ05UTCk7CisKKwkvKiBpbml0aWFpbGl6ZSBHYXJsaWMgY29udHJvbCBE QUdCIHJlZ2lzdGVycyAqLworCWFjcF9yZWdfd3JpdGUoQUNQX0dBUkxJQ19DTlRMX0RFRkFVTFQs IGFjcF9tbWlvLAorCQkJbW1BQ1BfQVhJMkRBR0JfR0FSTElDX0NOVEwpOworCisJc3JhbV9wdGVf b2Zmc2V0ID0gQUNQX0RBR0JfR1JQX1NSQU1fQkFTRV9BRERSRVNTIHwKKwkJCUFDUF9EQUdCX0JB U0VfQUREUl9HUlBfMV9fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIHwKKwkJCUFDUF9EQUdCX0JBU0Vf QUREUl9HUlBfMV9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyB8CisJCQlBQ1BfREFHQl9CQVNF X0FERFJfR1JQXzFfX0FYSTJEQUdCR3JwRW5hYmxlX01BU0s7CisJYWNwX3JlZ193cml0ZShzcmFt X3B0ZV9vZmZzZXQsICBhY3BfbW1pbywgbW1BQ1BfREFHQl9CQVNFX0FERFJfR1JQXzEpOworCWFj cF9yZWdfd3JpdGUoQUNQX1BBR0VfU0laRV80S19FTkFCTEUsIGFjcF9tbWlvLAorCQkJbW1BQ1Bf REFHQl9QQUdFX1NJWkVfR1JQXzEpOworCisJYWNwX3JlZ193cml0ZShBQ1BfU1JBTV9CQVNFX0FE RFJFU1MsIGFjcF9tbWlvLAorCQkJbW1BQ1BfRE1BX0RFU0NfQkFTRV9BRERSKTsKKworCS8qIE51 bSBvZiBkZXNjcmlwdGlvcnMgaW4gU1JBTSAweDQsIG1lYW5zIDI1NiBkZXNjcmlwdG9yczsoNjQg KiA0KSAqLworCWFjcF9yZWdfd3JpdGUoMHg0LCBhY3BfbW1pbywgbW1BQ1BfRE1BX0RFU0NfTUFY X05VTV9EU0NSKTsKKwlhY3BfcmVnX3dyaXRlKEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RNQUlP Q01hc2tfTUFTSywKKwkJYWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lOVFJfQ05UTCk7CisKKwly ZXR1cm4gMDsKK30KKworLyogRGVpbnRpYWxpemUgQUNQICovCitzdGF0aWMgaW50IGFjcF9kZWlu aXQodm9pZCBfX2lvbWVtICphY3BfbW1pbykKK3sKKwl1MzIgdmFsOworCXUzMiBjb3VudDsKKwor CS8qIEFzc2VydCBTb2Z0IHJlc2V0IG9mIEFDUCAqLworCXZhbCA9IGFjcF9yZWdfcmVhZChhY3Bf bW1pbywgbW1BQ1BfU09GVF9SRVNFVCk7CisKKwl2YWwgfD0gQUNQX1NPRlRfUkVTRVRfX1NvZnRS ZXNldEF1ZF9NQVNLOworCWFjcF9yZWdfd3JpdGUodmFsLCBhY3BfbW1pbywgbW1BQ1BfU09GVF9S RVNFVCk7CisKKwljb3VudCA9IEFDUF9TT0ZUX1JFU0VUX0RPTkVfVElNRV9PVVRfVkFMVUU7CisJ d2hpbGUgKHRydWUpIHsKKwkJdmFsID0gYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9TT0ZU X1JFU0VUKTsKKwkJaWYgKEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRBdWREb25lX01BU0sgPT0K KwkJICAgICh2YWwgJiBBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkRG9uZV9NQVNLKSkKKwkJ CWJyZWFrOworCQlpZiAoLS1jb3VudCA9PSAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZXNl dCBBQ1BcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJdWRlbGF5KDEwMCk7CisJ fQorCS8qKiBEaXNhYmxlIEFDUCBjbG9jayAqLworCXZhbCA9IGFjcF9yZWdfcmVhZChhY3BfbW1p bywgbW1BQ1BfQ09OVFJPTCk7CisJdmFsICY9IH5BQ1BfQ09OVFJPTF9fQ2xrRW5fTUFTSzsKKwlh Y3BfcmVnX3dyaXRlKHZhbCwgYWNwX21taW8sIG1tQUNQX0NPTlRST0wpOworCisJY291bnQgPSBB Q1BfQ0xPQ0tfRU5fVElNRV9PVVRfVkFMVUU7CisKKwl3aGlsZSAodHJ1ZSkgeworCQl2YWwgPSBh Y3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX1NUQVRVUyk7CisJCWlmICghKHZhbCAmICh1MzIp IDB4MSkpCisJCQlicmVhazsKKwkJaWYgKC0tY291bnQgPT0gMCkgeworCQkJcHJfZXJyKCJGYWls ZWQgdG8gcmVzZXQgQUNQXG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCXVkZWxh eSgxMDApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogQUNQIERNQSBpcnEgaGFuZGxlciByb3V0 aW5lIGZvciBwbGF5YmFjaywgY2FwdHVyZSB1c2VjYXNlcyAqLworc3RhdGljIGlycXJldHVybl90 IGRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJdTE2IGRzY3JfaWR4Owor CXUzMiBpbnRyX2ZsYWcsIGV4dF9pbnRyX3N0YXR1czsKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEg KmlycV9kYXRhOworCXZvaWQgX19pb21lbSAqYWNwX21taW87CisJc3RydWN0IGRldmljZSAqZGV2 ID0gYXJnOworCWJvb2wgdmFsaWRfaXJxID0gZmFsc2U7CisKKwlpcnFfZGF0YSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCWFjcF9tbWlvID0gaXJxX2RhdGEtPmFjcF9tbWlvOworCisJZXh0X2lu dHJfc3RhdHVzID0gYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9FWFRFUk5BTF9JTlRSX1NU QVQpOworCWludHJfZmxhZyA9ICgoKGV4dF9pbnRyX3N0YXR1cyAmCisJCSAgICAgIEFDUF9FWFRF Uk5BTF9JTlRSX1NUQVRfX0RNQUlPQ1N0YXRfTUFTSykgPj4KKwkJICAgICBBQ1BfRVhURVJOQUxf SU5UUl9TVEFUX19ETUFJT0NTdGF0X19TSElGVCkpOworCisJaWYgKChpbnRyX2ZsYWcgJiBCSVQo QUNQX1RPX0kyU19ETUFfQ0hfTlVNKSkgIT0gMCkgeworCQl2YWxpZF9pcnEgPSB0cnVlOworCQlp ZiAoYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9ETUFfQ1VSX0RTQ1JfMTMpID09CisJCQkJ UExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTMpCisJCQlkc2NyX2lkeCA9IFBMQVlCQUNLX1NU QVJUX0RNQV9ERVNDUl9DSDEyOworCQllbHNlCisJCQlkc2NyX2lkeCA9IFBMQVlCQUNLX0VORF9E TUFfREVTQ1JfQ0gxMjsKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChhY3BfbW1pbywgU1lTUkFN X1RPX0FDUF9DSF9OVU0sIGRzY3JfaWR4LAorCQkJCSAgICAgICAxLCAwKTsKKwkJYWNwX2RtYV9z dGFydChhY3BfbW1pbywgU1lTUkFNX1RPX0FDUF9DSF9OVU0sIGZhbHNlKTsKKworCQlzbmRfcGNt X3BlcmlvZF9lbGFwc2VkKGlycV9kYXRhLT5wbGF5X3N0cmVhbSk7CisKKwkJYWNwX3JlZ193cml0 ZSgoaW50cl9mbGFnICYgQklUKEFDUF9UT19JMlNfRE1BX0NIX05VTSkpIDw8IDE2LAorCQkJCWFj cF9tbWlvLCBtbUFDUF9FWFRFUk5BTF9JTlRSX1NUQVQpOworCX0KKworCWlmICgoaW50cl9mbGFn ICYgQklUKEkyU19UT19BQ1BfRE1BX0NIX05VTSkpICE9IDApIHsKKwkJdmFsaWRfaXJxID0gdHJ1 ZTsKKwkJaWYgKGFjcF9yZWdfcmVhZChhY3BfbW1pbywgbW1BQ1BfRE1BX0NVUl9EU0NSXzE1KSA9 PQorCQkJCUNBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTUpCisJCQlkc2NyX2lkeCA9IENBUFRV UkVfRU5EX0RNQV9ERVNDUl9DSDE0OworCQllbHNlCisJCQlkc2NyX2lkeCA9IENBUFRVUkVfU1RB UlRfRE1BX0RFU0NSX0NIMTQ7CisJCWNvbmZpZ19hY3BfZG1hX2NoYW5uZWwoYWNwX21taW8sIEFD UF9UT19TWVNSQU1fQ0hfTlVNLCBkc2NyX2lkeCwKKwkJCQkgICAgICAgMSwgMCk7CisJCWFjcF9k bWFfc3RhcnQoYWNwX21taW8sIEFDUF9UT19TWVNSQU1fQ0hfTlVNLCBmYWxzZSk7CisKKwkJYWNw X3JlZ193cml0ZSgoaW50cl9mbGFnICYgQklUKEkyU19UT19BQ1BfRE1BX0NIX05VTSkpIDw8IDE2 LAorCQkJCWFjcF9tbWlvLCBtbUFDUF9FWFRFUk5BTF9JTlRSX1NUQVQpOworCX0KKworCWlmICgo aW50cl9mbGFnICYgQklUKEFDUF9UT19TWVNSQU1fQ0hfTlVNKSkgIT0gMCkgeworCQl2YWxpZF9p cnEgPSB0cnVlOworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGlycV9kYXRhLT5jYXB0dXJlX3N0 cmVhbSk7CisJCWFjcF9yZWdfd3JpdGUoKGludHJfZmxhZyAmIEJJVChBQ1BfVE9fU1lTUkFNX0NI X05VTSkpIDw8IDE2LAorCQkJCWFjcF9tbWlvLCBtbUFDUF9FWFRFUk5BTF9JTlRSX1NUQVQpOwor CX0KKworCWlmICh2YWxpZF9pcnEpCisJCXJldHVybiBJUlFfSEFORExFRDsKKwllbHNlCisJCXJl dHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIGludCBhY3BfZG1hX29wZW4oc3RydWN0IHNuZF9w Y21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHNuZF9w Y21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX3Nv Y19wY21fcnVudGltZSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBh dWRpb19kcnZfZGF0YSAqaW50cl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKHBydGQtPnBsYXRmb3Jt LT5kZXYpOworCisJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICphZGF0YSA9CisJCWt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSksIEdGUF9LRVJORUwpOworCWlm IChhZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChzdWJzdHJlYW0tPnN0 cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlydW50aW1lLT5odyA9IGFjcF9w Y21faGFyZHdhcmVfcGxheWJhY2s7CisJZWxzZQorCQlydW50aW1lLT5odyA9IGFjcF9wY21faGFy ZHdhcmVfY2FwdHVyZTsKKworCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1 bnRpbWUsCisJCQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2VycihwcnRkLT5wbGF0Zm9ybS0+ZGV2LCAic2V0IGludGVnZXIgY29uc3Ry YWludCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWFkYXRhLT5hY3BfbW1pbyA9 IGludHJfZGF0YS0+YWNwX21taW87CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gYWRhdGE7CisK KwkvKiBFbmFibGUgQUNQIGlycSwgd2hlbiBuZWl0aGVyIHBsYXliYWNrIG9yIGNhcHR1cmUgc3Ry ZWFtcyBhcmUKKwkgKiBhY3RpdmUgYnkgdGhlIHRpbWUgd2hlbiBhIG5ldyBzdHJlYW0gaXMgYmVp bmcgb3BlbmVkLgorCSAqIFRoaXMgZW5hYmxlbWVudCBpcyBub3QgcmVxdWlyZWQgZm9yIGFub3Ro ZXIgc3RyZWFtLCBpZiBjdXJyZW50CisJICogc3RyZWFtIGlzIG5vdCBjbG9zZWQKKwkqLworCWlm ICghaW50cl9kYXRhLT5wbGF5X3N0cmVhbSAmJiAhaW50cl9kYXRhLT5jYXB0dXJlX3N0cmVhbSkK KwkJYWNwX3JlZ193cml0ZSgxLCBhZGF0YS0+YWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lOVFJf RU5CKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlC QUNLKQorCQlpbnRyX2RhdGEtPnBsYXlfc3RyZWFtID0gc3Vic3RyZWFtOworCWVsc2UKKwkJaW50 cl9kYXRhLT5jYXB0dXJlX3N0cmVhbSA9IHN1YnN0cmVhbTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGFjcF9kbWFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vi c3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlp bnQgc3RhdHVzOworCXVpbnQ2NF90IHNpemU7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFf YnVmZmVyOworCXN0cnVjdCBwYWdlICpwZzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50 aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkOworCisJZG1hX2J1ZmZlciA9 ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7CisKKwlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1l OworCXJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlmIChXQVJOX09OKCFydGQpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7 CisJc3RhdHVzID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgc2l6ZSk7CisJ aWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwltZW1zZXQoc3Vic3RyZWFtLT5y dW50aW1lLT5kbWFfYXJlYSwgMCwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKKwlwZyA9 IHZpcnRfdG9fcGFnZShzdWJzdHJlYW0tPmRtYV9idWZmZXIuYXJlYSk7CisKKwlpZiAocGcgIT0g TlVMTCkgeworCQkvKiBTYXZlIGZvciBydW50aW1lIHByaXZhdGUgZGF0YSAqLworCQlydGQtPnBn ID0gcGc7CisJCXJ0ZC0+b3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwkJLyogRmlsbCB0aGUg cGFnZSB0YWJsZSBlbnRyaWVzIGluIEFDUCBTUkFNICovCisJCXJ0ZC0+cGcgPSBwZzsKKwkJcnRk LT5zaXplID0gc2l6ZTsKKwkJcnRkLT5udW1fb2ZfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpID4+ IFBBR0VfU0hJRlQ7CisJCXJ0ZC0+ZGlyZWN0aW9uID0gc3Vic3RyZWFtLT5zdHJlYW07CisKKwkJ Y29uZmlnX2FjcF9kbWEocnRkLT5hY3BfbW1pbywgcnRkKTsKKwkJc3RhdHVzID0gMDsKKwl9IGVs c2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0 aWMgaW50IGFjcF9kbWFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVh bSkKK3sKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitz dGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgYWNwX2RtYV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1 YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXUxNiBkc2NyOworCXUzMiBtdWwsIGRtYV9jb25maWcs IHBlcmlvZF9ieXRlczsKKwl1MzIgcG9zID0gMDsKKworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUg KnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9k YXRhICpydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlwZXJpb2RfYnl0ZXMgPSBmcmFt ZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCWlmIChzdWJzdHJl YW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWRzY3IgPSBhY3Bf cmVnX3JlYWQocnRkLT5hY3BfbW1pbywgbW1BQ1BfRE1BX0NVUl9EU0NSXzEzKTsKKworCQlpZiAo ZHNjciA9PSBQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMykKKwkJCW11bCA9IDA7CisJCWVs c2UKKwkJCW11bCA9IDE7CisJCXBvcyA9ICAobXVsICogcGVyaW9kX2J5dGVzKTsKKwl9IGVsc2Ug eworCQlkbWFfY29uZmlnID0gYWNwX3JlZ19yZWFkKHJ0ZC0+YWNwX21taW8sIG1tQUNQX0RNQV9D TlRMXzE0KTsKKwkJaWYgKGRtYV9jb25maWcgIT0gMCkgeworCQkJZHNjciA9IGFjcF9yZWdfcmVh ZChydGQtPmFjcF9tbWlvLAorCQkJCQkJbW1BQ1BfRE1BX0NVUl9EU0NSXzE0KTsKKwkJCWlmIChk c2NyID09IENBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTQpCisJCQkJbXVsID0gMTsKKwkJCWVs c2UKKwkJCQltdWwgPSAyOworCQkJcG9zID0gKG11bCAqIHBlcmlvZF9ieXRlcyk7CisJCX0KKwor CQlpZiAocG9zID49ICgyICogcGVyaW9kX2J5dGVzKSkKKwkJCXBvcyA9IDA7CisKKwl9CisJcmV0 dXJuIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBwb3MpOworfQorCitzdGF0aWMgaW50IGFjcF9k bWFfbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCXN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9kZWZhdWx0X21tYXAo c3Vic3RyZWFtLCB2bWEpOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfcHJlcGFyZShzdHJ1Y3Qg c25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1l ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1f ZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHN1YnN0cmVhbS0+c3Ry ZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJY29uZmlnX2FjcF9kbWFfY2hh bm5lbChydGQtPmFjcF9tbWlvLCBTWVNSQU1fVE9fQUNQX0NIX05VTSwKKwkJCQkJUExBWUJBQ0tf U1RBUlRfRE1BX0RFU0NSX0NIMTIsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwgMCk7CisJ CWNvbmZpZ19hY3BfZG1hX2NoYW5uZWwocnRkLT5hY3BfbW1pbywgQUNQX1RPX0kyU19ETUFfQ0hf TlVNLAorCQkJCQlQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMywKKwkJCQkJTlVNX0RTQ1JT X1BFUl9DSEFOTkVMLCAwKTsKKwkJLyogRmlsbCBBQ1AgU1JBTSAoMiBwZXJpb2RzKSB3aXRoIHpl cm9zIGZyb20gU3lzdGVtIFJBTQorCQkgKiB3aGljaCBpcyB6ZXJvLWVkIGluIGh3X3BhcmFtcwor CQkqLworCQlhY3BfZG1hX3N0YXJ0KHJ0ZC0+YWNwX21taW8sIFNZU1JBTV9UT19BQ1BfQ0hfTlVN LCBmYWxzZSk7CisKKwkJLyogQUNQIFNSQU0gKDIgcGVyaW9kcyBvZiBidWZmZXIgc2l6ZSkgaXMg aW50aWFsbHkgZmlsbGVkIHdpdGgKKwkJICogemVyb3MuIEJlZm9yZSByZW5kZXJpbmcgc3RhcnRz LCAybmQgaGFsZiBvZiBTUkFNIHdpbGwgYmUKKwkJICogZmlsbGVkIHdpdGggdmFsaWQgYXVkaW8g ZGF0YSBETUEnZWQgZnJvbSBmaXJzdCBoYWxmIG9mIHN5c3RlbQorCQkgKiBSQU0gYW5kIDFzdCBo YWxmIG9mIFNSQU0gd2lsbCBiZSBmaWxsZWQgd2l0aCBaZXJvcy4gVGhpcyBpcworCQkgKiB0aGUg aW5pdGlhbCBzY2VuYXJpbyB3aGVuIHJlZGVyaW5nIHN0YXJ0cyBmcm9tIFNSQU0uIExhdGVyCisJ CSAqIG9uLCAybmQgaGFsZiBvZiBzeXN0ZW0gbWVtb3J5IHdpbGwgYmUgRE1BJ2VkIHRvIDFzdCBo YWxmIG9mCisJCSAqIFNSQU0sIDFzdCBoYWxmIG9mIHN5c3RlbSBtZW1vcnkgd2lsbCBiZSBETUEn ZWQgdG8gMm5kIGhhbGYgb2YKKwkJICogU1JBTSBpbiBwaW5nLXBvbmcgd2F5IHRpbGwgcmVuZGVy aW5nIHN0b3BzLgorCQkqLworCQljb25maWdfYWNwX2RtYV9jaGFubmVsKHJ0ZC0+YWNwX21taW8s IFNZU1JBTV9UT19BQ1BfQ0hfTlVNLAorCQkJCQlQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gx MiwKKwkJCQkJMSwgMCk7CisJfSBlbHNlIHsKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChydGQt PmFjcF9tbWlvLCBBQ1BfVE9fU1lTUkFNX0NIX05VTSwKKwkJCQkJQ0FQVFVSRV9TVEFSVF9ETUFf REVTQ1JfQ0gxNCwKKwkJCQkJTlVNX0RTQ1JTX1BFUl9DSEFOTkVMLCAwKTsKKwkJY29uZmlnX2Fj cF9kbWFfY2hhbm5lbChydGQtPmFjcF9tbWlvLCBJMlNfVE9fQUNQX0RNQV9DSF9OVU0sCisJCQkJ CUNBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTUsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5F TCwgMCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfdHJpZ2dlcihz dHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlpbnQgcmV0 OworCXUzMiBsb29wcyA9IDEwMDA7CisKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1l ID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpwcnRk ID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRh ICpydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIXJ0ZCkKKwkJcmV0dXJuIC1F SU5WQUw7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgor CWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwljYXNlIFNORFJWX1BDTV9U UklHR0VSX1JFU1VNRToKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJF QU1fUExBWUJBQ0spIHsKKwkJCWFjcF9kbWFfc3RhcnQocnRkLT5hY3BfbW1pbywKKwkJCQkJCVNZ U1JBTV9UT19BQ1BfQ0hfTlVNLCBmYWxzZSk7CisJCQl3aGlsZSAoYWNwX3JlZ19yZWFkKHJ0ZC0+ YWNwX21taW8sIG1tQUNQX0RNQV9DSF9TVFMpICYKKwkJCQkJCUJJVChTWVNSQU1fVE9fQUNQX0NI X05VTSkpIHsKKwkJCQlpZiAoIWxvb3BzLS0pIHsKKwkJCQkJZGV2X2VycihwcnRkLT5wbGF0Zm9y bS0+ZGV2LAorCQkJCQkJImFjcCBkbWEgc3RhcnQgdGltZW91dFxuIik7CisJCQkJCXJldHVybiAt RVRJTUVET1VUOworCQkJCX0KKwkJCQljcHVfcmVsYXgoKTsKKwkJCX0KKworCQkJYWNwX2RtYV9z dGFydChydGQtPmFjcF9tbWlvLAorCQkJCQlBQ1BfVE9fSTJTX0RNQV9DSF9OVU0sIHRydWUpOwor CisJCX0gZWxzZSB7CisJCQlhY3BfZG1hX3N0YXJ0KHJ0ZC0+YWNwX21taW8sCisJCQkJCSAgICBJ MlNfVE9fQUNQX0RNQV9DSF9OVU0sIHRydWUpOworCQl9CisJCXJldCA9IDA7CisJCWJyZWFrOwor CWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BB VVNFX1BVU0g6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQkvKiBOZWVkIHRv IHN0b3Agb25seSBjaXJjdWxhciBETUEgY2hhbm5lbHMgOgorCQkgKiBBQ1BfVE9fSTJTX0RNQV9D SF9OVU0gLyBJMlNfVE9fQUNQX0RNQV9DSF9OVU0uIE5vbi1jaXJjdWxhcgorCQkgKiBjaGFubmVs cyB3aWxsIHN0b3BwZWQgYXV0b21hdGljYWxseSBhZnRlciBpdHMgdHJhbnNmZXIKKwkJICogY29t cGxldGVzIDogU1lTUkFNX1RPX0FDUF9DSF9OVU0gLyBBQ1BfVE9fU1lTUkFNX0NIX05VTQorCQkg Ki8KKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sp CisJCQlyZXQgPSBhY3BfZG1hX3N0b3AocnRkLT5hY3BfbW1pbywKKwkJCQkJQUNQX1RPX0kyU19E TUFfQ0hfTlVNKTsKKwkJZWxzZQorCQkJcmV0ID0gYWNwX2RtYV9zdG9wKHJ0ZC0+YWNwX21taW8s CisJCQkJCUkyU19UT19BQ1BfRE1BX0NIX05VTSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJl dCA9IC1FSU5WQUw7CisKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhY3BfZG1h X25ldyhzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCXJldHVybiBzbmRfcGNt X2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHJ0ZC0+cGNtLAorCQkJCQkJCVNORFJWX0RN QV9UWVBFX0RFViwKKwkJCQkJCQlOVUxMLCBNSU5fQlVGRkVSLAorCQkJCQkJCU1BWF9CVUZGRVIp OworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFt ICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0 cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKnJ0ZCA9IHJ1bnRp bWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcHJ0ZCA9IHN1 YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdWRpb19kcnZfZGF0YSAqYWRhdGEgPSBk ZXZfZ2V0X2RydmRhdGEocHJ0ZC0+cGxhdGZvcm0tPmRldik7CisKKwlrZnJlZShydGQpOworCisJ aWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWFk YXRhLT5wbGF5X3N0cmVhbSA9IE5VTEw7CisJZWxzZQorCQlhZGF0YS0+Y2FwdHVyZV9zdHJlYW0g PSBOVUxMOworCisJLyogRGlzYWJsZSBBQ1AgaXJxLCB3aGVuIHRoZSBjdXJyZW50IHN0cmVhbSBp cyBiZWluZyBjbG9zZWQgYW5kCisJICogYW5vdGhlciBzdHJlYW0gaXMgYWxzbyBub3QgYWN0aXZl LgorCSovCisJaWYgKCFhZGF0YS0+cGxheV9zdHJlYW0gJiYgIWFkYXRhLT5jYXB0dXJlX3N0cmVh bSkKKwkJYWNwX3JlZ193cml0ZSgwLCBhZGF0YS0+YWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lO VFJfRU5CKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGFj cF9kbWFfb3BzID0geworCS5vcGVuID0gYWNwX2RtYV9vcGVuLAorCS5jbG9zZSA9IGFjcF9kbWFf Y2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IGFjcF9k bWFfaHdfcGFyYW1zLAorCS5od19mcmVlID0gYWNwX2RtYV9od19mcmVlLAorCS50cmlnZ2VyID0g YWNwX2RtYV90cmlnZ2VyLAorCS5wb2ludGVyID0gYWNwX2RtYV9wb2ludGVyLAorCS5tbWFwID0g YWNwX2RtYV9tbWFwLAorCS5wcmVwYXJlID0gYWNwX2RtYV9wcmVwYXJlLAorfTsKKworc3RhdGlj IHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciBhY3BfYXNvY19wbGF0Zm9ybSA9IHsKKwku b3BzID0gJmFjcF9kbWFfb3BzLAorCS5wY21fbmV3ID0gYWNwX2RtYV9uZXcsCit9OworCitzdGF0 aWMgaW50IGFjcF9hdWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CWludCBzdGF0dXM7CisJc3RydWN0IGF1ZGlvX2Rydl9kYXRhICphdWRpb19kcnZfZGF0YTsKKwlz dHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWF1ZGlvX2Rydl9kYXRhID0gZGV2bV9remFsbG9jKCZw ZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEpLAorCQkJCQlHRlBfS0VSTkVM KTsKKwlpZiAoYXVkaW9fZHJ2X2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWF1 ZGlvX2Rydl9kYXRhLT5hY3BfbW1pbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2 LCByZXMpOworCisJLyogVGhlIGZvbGxvd2luZyBtZW1iZXJzIGdldHMgcG9wdWxhdGVkIGluIGRl dmljZSAnb3BlbicKKwkgKiBmdW5jdGlvbi4gVGlsbCB0aGVuIGludGVycnVwdHMgYXJlIGRpc2Fi bGVkIGluICdhY3BfaW5pdCcKKwkgKiBhbmQgZGV2aWNlIGRvZXNuJ3QgZ2VuZXJhdGUgYW55IGlu dGVycnVwdHMuCisJICovCisKKwlhdWRpb19kcnZfZGF0YS0+cGxheV9zdHJlYW0gPSBOVUxMOwor CWF1ZGlvX2Rydl9kYXRhLT5jYXB0dXJlX3N0cmVhbSA9IE5VTEw7CisKKwlyZXMgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzKSB7CisJ CWRldl9lcnIoJnBkZXYtPmRldiwgIklPUkVTT1VSQ0VfSVJRIEZBSUxFRFxuIik7CisJCXJldHVy biAtRU5PREVWOworCX0KKworCXN0YXR1cyA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwg cmVzLT5zdGFydCwgZG1hX2lycV9oYW5kbGVyLAorCQkJCQkwLCAiQUNQX0lSUSIsICZwZGV2LT5k ZXYpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQUNQIElSUSByZXF1 ZXN0IGZhaWxlZFxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJZGV2X3NldF9kcnZkYXRh KCZwZGV2LT5kZXYsIGF1ZGlvX2Rydl9kYXRhKTsKKworCS8qIEluaXRpYWxpemUgdGhlIEFDUCAq LworCWFjcF9pbml0KGF1ZGlvX2Rydl9kYXRhLT5hY3BfbW1pbyk7CisKKwlzdGF0dXMgPSBzbmRf c29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYsICZhY3BfYXNvY19wbGF0Zm9ybSk7CisJ aWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWwgdG8gcmVnaXN0 ZXIgQUxTQSBwbGF0Zm9ybSBkZXZpY2VcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXJl dHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2F1ZGlvX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdWRpb19kcnZfZGF0YSAqYWRhdGEgPSBk ZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlhY3BfZGVpbml0KGFkYXRhLT5hY3BfbW1p byk7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFjcF9kbWFfZHJpdmVyID0g eworCS5wcm9iZSA9IGFjcF9hdWRpb19wcm9iZSwKKwkucmVtb3ZlID0gYWNwX2F1ZGlvX3JlbW92 ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhY3BfYXVkaW9fZG1hIiwKKwl9LAorfTsKKwor bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhY3BfZG1hX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1Io Ik1hcnV0aGkuQmF5eWF2YXJhcHVAYW1kLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQg QUNQIFBDTSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElB UygicGxhdGZvcm06YWNwLWRtYS1hdWRpbyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2FtZC9h Y3AuaCBiL3NvdW5kL3NvYy9hbWQvYWNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMzMwODMyZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9hbWQvYWNwLmgKQEAg LTAsMCArMSwxMTggQEAKKyNpZm5kZWYgX19BQ1BfSFdfSAorI2RlZmluZSBfX0FDUF9IV19ICisK KyNpbmNsdWRlICJpbmNsdWRlL2FjcF8yXzJfZC5oIgorI2luY2x1ZGUgImluY2x1ZGUvYWNwXzJf Ml9zaF9tYXNrLmgiCisKKyNkZWZpbmUgQUNQX1BBR0VfU0laRV80S19FTkFCTEUJCQkweDAyCisK KyNkZWZpbmUgQUNQX1BMQVlCQUNLX1BURV9PRkZTRVQJCQkxMAorI2RlZmluZSBBQ1BfQ0FQVFVS RV9QVEVfT0ZGU0VUCQkJMAorCisjZGVmaW5lIEFDUF9HQVJMSUNfQ05UTF9ERUZBVUxUCQkJMHgw MDAwMEZCNAorI2RlZmluZSBBQ1BfT05JT05fQ05UTF9ERUZBVUxUCQkJMHgwMDAwMEZCNAorCisj ZGVmaW5lIEFDUF9QSFlTSUNBTF9CQVNFCQkJMHgxNDAwMAorCisvKiBQbGF5YmFjayBTUkFNIGFk ZHJlc3MgKGFzIGEgZGVzdGluYXRpb24gaW4gZG1hIGRlc2NyaXB0b3IpICovCisjZGVmaW5lIEFD UF9TSEFSRURfUkFNX0JBTktfMV9BRERSRVNTCQkweDQwMDIwMDAKKworLyogQ2FwdHVyZSBTUkFN IGFkZHJlc3MgKGFzIGEgc291cmNlIGluIGRtYSBkZXNjcmlwdG9yKSAqLworI2RlZmluZSBBQ1Bf U0hBUkVEX1JBTV9CQU5LXzVfQUREUkVTUwkJMHg0MDBBMDAwCisKKyNkZWZpbmUgQUNQX0RNQV9S RVNFVF9USU1FCQkJMTAwMDAKKyNkZWZpbmUgQUNQX0NMT0NLX0VOX1RJTUVfT1VUX1ZBTFVFCQkw eDAwMDAwMEZGCisjZGVmaW5lIEFDUF9TT0ZUX1JFU0VUX0RPTkVfVElNRV9PVVRfVkFMVUUJMHgw MDAwMDBGRgorI2RlZmluZSBBQ1BfRE1BX0NPTVBMRVRFX1RJTUVfT1VUX1ZBTFVFCQkweDAwMDAw MEZGCisKKyNkZWZpbmUgQUNQX1NSQU1fQkFTRV9BRERSRVNTCQkJMHg0MDAwMDAwCisjZGVmaW5l IEFDUF9EQUdCX0dSUF9TUkFNX0JBU0VfQUREUkVTUwkJMHg0MDAxMDAwCisjZGVmaW5lIEFDUF9E QUdCX0dSUF9TUkJNX1NSQU1fQkFTRV9PRkZTRVQJMHgxMDAwCisjZGVmaW5lIEFDUF9JTlRFUk5B TF9BUEVSVFVSRV9XSU5ET1dfMF9BRERSRVNTCTB4MDAwMDAwMDAKKyNkZWZpbmUgQUNQX0lOVEVS TkFMX0FQRVJUVVJFX1dJTkRPV180X0FERFJFU1MJMHgwMTgwMDAwMAorCisjZGVmaW5lIFRPX0FD UF9JMlNfMSAgIDB4MgorI2RlZmluZSBUT19BQ1BfSTJTXzIgICAweDQKKyNkZWZpbmUgRlJPTV9B Q1BfSTJTXzEgMHhhCisjZGVmaW5lIEZST01fQUNQX0kyU18yIDB4YgorCisjZGVmaW5lIEFDUF9U SUxFX09OX01BU0sgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBBQ1BfVElMRV9PRkZfTUFT SyAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQUNQX1RJTEVfT05fUkVUQUlOX1JFR19NQVNL ICAgICAweDFmCisjZGVmaW5lIEFDUF9USUxFX09GRl9SRVRBSU5fUkVHX01BU0sgICAgMHgyMAor CisjZGVmaW5lIEFDUF9USUxFX1AxX01BU0sgICAgICAgICAgICAgICAgMHgzZQorI2RlZmluZSBB Q1BfVElMRV9QMl9NQVNLICAgICAgICAgICAgICAgIDB4M2QKKyNkZWZpbmUgQUNQX1RJTEVfRFNQ MF9NQVNLICAgICAgICAgICAgICAweDNiCisjZGVmaW5lIEFDUF9USUxFX0RTUDFfTUFTSyAgICAg ICAgICAgICAgMHgzNworCisjZGVmaW5lIEFDUF9USUxFX0RTUDJfTUFTSyAgICAgICAgICAgICAg MHgyZgorLyogUGxheWJhY2sgRE1BIGNoYW5uZWxzICovCisjZGVmaW5lIFNZU1JBTV9UT19BQ1Bf Q0hfTlVNIDEyCisjZGVmaW5lIEFDUF9UT19JMlNfRE1BX0NIX05VTSAxMworCisvKiBDYXB0dXJl IERNQSBjaGFubmVscyAqLworI2RlZmluZSBBQ1BfVE9fU1lTUkFNX0NIX05VTSAxNAorI2RlZmlu ZSBJMlNfVE9fQUNQX0RNQV9DSF9OVU0gMTUKKworI2RlZmluZSBOVU1fRFNDUlNfUEVSX0NIQU5O RUwgMgorCisjZGVmaW5lIFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEyIDAKKyNkZWZpbmUg UExBWUJBQ0tfRU5EX0RNQV9ERVNDUl9DSDEyIDEKKyNkZWZpbmUgUExBWUJBQ0tfU1RBUlRfRE1B X0RFU0NSX0NIMTMgMgorI2RlZmluZSBQTEFZQkFDS19FTkRfRE1BX0RFU0NSX0NIMTMgMworCisj ZGVmaW5lIENBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTQgNAorI2RlZmluZSBDQVBUVVJFX0VO RF9ETUFfREVTQ1JfQ0gxNCA1CisjZGVmaW5lIENBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTUg NgorI2RlZmluZSBDQVBUVVJFX0VORF9ETUFfREVTQ1JfQ0gxNSA3CisKK2VudW0gYWNwX2RtYV9w cmlvcml0eV9sZXZlbCB7CisJLyogMHgwIFNwZWNpZmllcyB0aGUgRE1BIGNoYW5uZWwgaXMgZ2l2 ZW4gbm9ybWFsIHByaW9yaXR5ICovCisJQUNQX0RNQV9QUklPUklUWV9MRVZFTF9OT1JNQUwgPSAw eDAsCisJLyogMHgxIFNwZWNpZmllcyB0aGUgRE1BIGNoYW5uZWwgaXMgZ2l2ZW4gaGlnaCBwcmlv cml0eSAqLworCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxfSElHSCA9IDB4MSwKKwlBQ1BfRE1BX1BS SU9SSVRZX0xFVkVMX0ZPUkNFU0laRSA9IDB4RkYKK307CisKK3N0cnVjdCBhdWRpb19zdWJzdHJl YW1fZGF0YSB7CisJc3RydWN0IHBhZ2UgKnBnOworCXVuc2lnbmVkIGludCBvcmRlcjsKKwl1MTYg bnVtX29mX3BhZ2VzOworCXUxNiBkaXJlY3Rpb247CisJdWludDY0X3Qgc2l6ZTsKKwl2b2lkIF9f aW9tZW0gKmFjcF9tbWlvOworfTsKKworZW51bSB7CisJQUNQX1RJTEVfUDEgPSAwLAorCUFDUF9U SUxFX1AyLAorCUFDUF9USUxFX0RTUDAsCisJQUNQX1RJTEVfRFNQMSwKKwlBQ1BfVElMRV9EU1Ay LAorfTsKKworZW51bSB7CisJQUNQX0RNQV9BVFRSSUJVVEVTX1NIQVJFRE1FTV9UT19EQUdCX09O SU9OID0gMHgwLAorCUFDUF9ETUFfQVRUUklCVVRFU19TSEFSRURfTUVNX1RPX0RBR0JfR0FSTElD ID0gMHgxLAorCUFDUF9ETUFfQVRUUklCVVRFU19EQUdCX09OSU9OX1RPX1NIQVJFRE1FTSA9IDB4 OCwKKwlBQ1BfRE1BX0FUVFJJQlVURVNfREFHQl9HQVJMSUNfVE9fU0hBUkVETUVNID0gMHg5LAor CUFDUF9ETUFfQVRUUklCVVRFU19GT1JDRV9TSVpFID0gMHhGCit9OworCit0eXBlZGVmIHN0cnVj dCBhY3BfZG1hX2RzY3JfdHJhbnNmZXIgeworCS8qIFNwZWNpZmllcyB0aGUgc291cmNlIG1lbW9y eSBsb2NhdGlvbiBmb3IgdGhlIERNQSBkYXRhIHRyYW5zZmVyLiAqLworCXUzMiBzcmM7CisJLyog U3BlY2lmaWVzIHRoZSBkZXN0aW5hdGlvbiBtZW1vcnkgbG9jYXRpb24gdG8gd2hlcmUgdGhlIGRh dGEgd2lsbAorCSAqIGJlIHRyYW5zZmVycmVkLgorCSovCisJdTMyIGRlc3Q7CisJLyogU3BlY2lm aWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZCB0byBiZSB0cmFuc2ZlcnJlZAorCSogZnJvbSBz b3VyY2UgdG8gZGVzdGluYXRpb24gbWVtb3J5LlRyYW5zZmVyIGRpcmVjdGlvbiAmIElPQyBlbmFi bGUKKwkqLworCXUzMiB4ZmVyX3ZhbDsKKwkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwor CXUzMiByZXNlcnZlZDsKK30gYWNwX2RtYV9kc2NyX3RyYW5zZmVyX3Q7CisKKyNlbmRpZiAvKl9f QUNQX0hXX0ggKi8KLS0gCjIuNS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=