From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from moutng.kundenserver.de ([212.227.17.10]) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1WQCf9-0005ql-HV for ptxdist@pengutronix.de; Wed, 19 Mar 2014 10:19:58 +0100 From: Alexander Dahl Date: Wed, 19 Mar 2014 10:19:09 +0100 Message-Id: <1395220750-21683-1-git-send-email-post@lespocky.de> MIME-Version: 1.0 Subject: [ptxdist] [PATCH] add some patches with fixes, partly queued upstream Reply-To: ptxdist@pengutronix.de List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: ptxdist-bounces@pengutronix.de Errors-To: ptxdist-bounces@pengutronix.de To: ptxdist@pengutronix.de VXBzdHJlYW0gbWlncmF0ZWQgdGhlIG9sZCBjb2RlIGJhc2UgdG8gZ2l0aHViIGluIDIwMTE6Cmh0 dHBzOi8vZ2l0aHViLmNvbS9yYWZhZWxzdGVpbC9saWJjZ2kg4oCTIEkgZ290IHRoZSBvbGQgcHR4 ZGlzdCBwYXRjaGVzCm1lcmdlZCBpbiAyMDEyIGFuZCB0d28gZml4ZXMgZm9yIG1lbSBsZWFrZXMg YXMgd2VsbC4gVG9kYXkgSSBtYWRlIHB1bGwKcmVxdWVzdHMgZm9yIE1pY2hhZWwncyBwYXRjaCBm cm9tIGxhc3QgeWVhciBhbmQgYW5vdGhlciBmaXggb2YgbWluZSBmcm9tCnRvZGF5LiBIb3dldmVy IEkgZG91YnQgdGhlIG1haW50YWluZXIgd2lsbCBkbyBhbm90aGVyIHJlbGVhc2Ugc29vbiBvcgpl dmVuIGF0IGFsbCwgc28gSSBhZGQgbXkgcGF0Y2hlcyBoZXJlLCB0b28uIEknbSBzb3JyeSwgSSBz cXVlZXplZCB0aGUKcHR4ZGlzdCBwYXRjaGVzIGludG8gb25lIHVwc3RyZWFtLCBzbyBSb2JlcnQg bG9zdCBoaXMgY3JlZGl0IHRoZXJlLCBidXQKdGhpcyBpcyBub3QgdG9waWMgb2YgdGhpcyBzZXJp ZXMgZGlzY3Vzc2lvbi4gOy0pCgpTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgRGFobCA8cG9zdEBs ZXNwb2NreS5kZT4KLS0tCiAuLi5saW5nLXdoaXRlc3BhY2UtbXktZWRpdG9yLXdvdWxkLWRvLXRo aXMtYS5wYXRjaCB8IDEzMzQgKysrKysrKysrKysrKysrKysrKysKIC4uLi1hbGxvY2F0ZWQtYnkt dW5lc2NhcGVfc3BlY2lhbF9jaGFycy1hZnRlLnBhdGNoIHwgICA2NCArCiAuLi4tYWxsb2NhdGVk LWZvci1yZWFkaW5nLWFuZC1wYXJzaW5nLVBPU1QtZC5wYXRjaCB8ICAgMzIgKwogLi4uLzAwMTQt RklMRS1yZXF1aXJlcy1pbmNsdWRpbmctc3RkaW8ucGF0Y2ggICAgICAgfCAgIDIxICsKIC4uLnBl LWJ5LW9wdGltaXppbmctaGV4dGFibGUtaW5pdC1hbmQtYWNjZXNzLnBhdGNoIHwgICA5MyArKwog cGF0Y2hlcy9saWJjZ2ktMS4wL3NlcmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3 ICstCiA2IGZpbGVzIGNoYW5nZWQsIDE1NTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvbGliY2dpLTEuMC8wMDExLXJlbW92ZS10cmFpbGlu Zy13aGl0ZXNwYWNlLW15LWVkaXRvci13b3VsZC1kby10aGlzLWEucGF0Y2gKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBwYXRjaGVzL2xpYmNnaS0xLjAvMDAxMi1mcmVlLW1lbW9yeS1hbGxvY2F0ZWQtYnkt dW5lc2NhcGVfc3BlY2lhbF9jaGFycy1hZnRlLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0 Y2hlcy9saWJjZ2ktMS4wLzAwMTMtZnJlZS1tZW1vcnktYWxsb2NhdGVkLWZvci1yZWFkaW5nLWFu ZC1wYXJzaW5nLVBPU1QtZC5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvbGliY2dp LTEuMC8wMDE0LUZJTEUtcmVxdWlyZXMtaW5jbHVkaW5nLXN0ZGlvLnBhdGNoCiBjcmVhdGUgbW9k ZSAxMDA2NDQgcGF0Y2hlcy9saWJjZ2ktMS4wLzAwMTUtZml4LXVuZXNjYXBlLWJ5LW9wdGltaXpp bmctaGV4dGFibGUtaW5pdC1hbmQtYWNjZXNzLnBhdGNoCgpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9s aWJjZ2ktMS4wLzAwMTEtcmVtb3ZlLXRyYWlsaW5nLXdoaXRlc3BhY2UtbXktZWRpdG9yLXdvdWxk LWRvLXRoaXMtYS5wYXRjaCBiL3BhdGNoZXMvbGliY2dpLTEuMC8wMDExLXJlbW92ZS10cmFpbGlu Zy13aGl0ZXNwYWNlLW15LWVkaXRvci13b3VsZC1kby10aGlzLWEucGF0Y2gKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwMzgzYwotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNo ZXMvbGliY2dpLTEuMC8wMDExLXJlbW92ZS10cmFpbGluZy13aGl0ZXNwYWNlLW15LWVkaXRvci13 b3VsZC1kby10aGlzLWEucGF0Y2gKQEAgLTAsMCArMSwxMzM0IEBACitGcm9tOiBBbGV4YW5kZXIg RGFobCA8cG9zdEBsZXNwb2NreS5kZT4KK0RhdGU6IFdlZCwgMjQgT2N0IDIwMTIgMTE6MjA6MjQg KzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgKG15IGVk aXRvciB3b3VsZCBkbyB0aGlzIGFsbCB0aGUKKyB0aW1lKQorCistLS0KKyBzcmMvYmFzZTY0LmMg IHwgICA2MCArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIHNyYy9jZ2kuYyAgICAgfCAg IDYyICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIHNyYy9jZ2kuaCAgICAgfCAgICA4 ICsrLS0KKyBzcmMvY29va2llLmMgIHwgICAyMCArKysrKy0tLS0tCisgc3JjL2Vycm9yLmMgICB8 ICAgIDIgKy0KKyBzcmMvZ2VuZXJhbC5jIHwgICA1MCArKysrKysrKysrKystLS0tLS0tLS0tLS0K KyBzcmMvbGlzdC5jICAgIHwgICAyNCArKysrKystLS0tLS0KKyBzcmMvbWQ1LmMgICAgIHwgICAg NiArLS0KKyBzcmMvc2Vzc2lvbi5jIHwgIDExOCArKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvc3RyaW5nLmMgIHwgICA3NCArKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyAxMCBmaWxlcyBjaGFuZ2VkLCAyMTIg aW5zZXJ0aW9ucygrKSwgMjEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2U2 NC5jIGIvc3JjL2Jhc2U2NC5jCitpbmRleCBhNmU1ZDVhLi45MjMxZjg0IDEwMDY0NAorLS0tIGEv c3JjL2Jhc2U2NC5jCisrKysgYi9zcmMvYmFzZTY0LmMKK0BAIC0xLDYgKzEsNiBAQAorIC8qCisg CUxpYkNHSSBiYXNlNjQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBpcyBleHRyZW1seSBiYXNlZCBv biB0aGUgd29yayBvZiBCb2IgVG93ZXIsCistCWZyb20gaXRzIHByb2plYyBodHRwOi8vYmFzZTY0 LnNvdXJjZWZvcmdlLm5ldC4gVGhlIGZ1bmN0aW9ucyB3ZXJlIGEgYml0IG1vZGljYXRlZC4gCisr CWZyb20gaXRzIHByb2plYyBodHRwOi8vYmFzZTY0LnNvdXJjZWZvcmdlLm5ldC4gVGhlIGZ1bmN0 aW9ucyB3ZXJlIGEgYml0IG1vZGljYXRlZC4KKyAJQWJvdmUgaXMgdGhlIE1JVCBsaWNlbnNlIGZy b20gYjY0LmMgb3JpZ2luYWwgY29kZToKKyAKKyBMSUNFTkNFOiAgICAgICAgQ29weXJpZ2h0IChj KSAyMDAxIEJvYiBUcm93ZXIsIFRyYW50b3IgU3RhbmRhcmQgU3lzdGVtcyBJbmMuCitAQCAtNDYs MTkgKzQ2LDE5IEBAIHZvaWQgZW5jb2RlYmxvY2soIHVuc2lnbmVkIGNoYXIgaW5bM10sIHVuc2ln bmVkIGNoYXIgb3V0WzRdLCBpbnQgbGVuICkKKyB9CisgCisgdm9pZCBkZWNvZGVibG9jayggdW5z aWduZWQgY2hhciBpbls0XSwgdW5zaWduZWQgY2hhciBvdXRbM10gKQorLXsgICAKKyt7CisgCW91 dFswXSA9ICh1bnNpZ25lZCBjaGFyICkgKGluWzBdIDw8IDIgfCBpblsxXSA+PiA0KTsKKyAJb3V0 WzFdID0gKHVuc2lnbmVkIGNoYXIgKSAoaW5bMV0gPDwgNCB8IGluWzJdID4+IDIpOworIAlvdXRb Ml0gPSAodW5zaWduZWQgY2hhciApICgoKGluWzJdIDw8IDYpICYgMHhjMCkgfCBpblszXSk7Cisg fQorIAorLS8qKiAKKysvKioKKyAqIEBpbmdyb3VwIGxpYmNnaV9zdHJpbmcKKyAqLworIAorIC8q KgorICogRW5jb2RlcyBhIGdpdmVuIHRyaW5nIHRvIGl0cyBiYXNlNjQgZm9ybS4KKy0qIAorKyoK KyAqIEBwYXJhbSAqc3RyIFN0cmluZyB0byBjb252ZXJ0CisgKiBAcmV0dXJuIEJhc2U2NCBlbmNv ZGVkIFN0cmluZworICogQHNlZSBzdHJfYmFzZTY0X2RlY29kZQorQEAgLTY5LDg0ICs2OSw4NCBA QCBjaGFyICpzdHJfYmFzZTY0X2VuY29kZShjaGFyICpzdHIpCisgCXVuc2lnbmVkIGludCBpLCBs ZW4sIGJsb2Nrc291dCA9IDAsIGxpbmVzaXplID0gc3RybGVuKHN0cik7CisgCWNoYXIgKnRtcCA9 IHN0cjsKKyAJY2hhciAqcmVzdWx0ID0gKGNoYXIgKiltYWxsb2MoKGxpbmVzaXplICsgMyAtIGxp bmVzaXplICUgMykgKiA0IC8gMyArIDEpOworLQkKKysKKyAJaWYgKCFyZXN1bHQpCisgCQlsaWJj Z2lfZXJyb3IoRV9NRU1PUlksICJGYWlsZWQgdG8gYWxsb2MgbWVtb3J5IGF0IGJhc2U2NC5jIik7 CistCQkKKysKKyAJd2hpbGUgKCp0bXApIHsKKyAJCWxlbiA9IDA7CisgCisgCQlmb3IoIGkgPSAw OyBpIDwgMzsgaSsrICkgeworIAkJCWluW2ldID0gKHVuc2lnbmVkIGNoYXIpKCp0bXApOworLQkJ CQorKworIAkJCWlmICgqdG1wKQorIAkJCQlsZW4rKzsKKyAJCQllbHNlCisgCQkJCWluW2ldID0g MDsKKy0JCQkKKysKKyAJCQl0bXArKzsKKyAJCX0KKy0JCQorKworIAkJaWYoIGxlbiApIHsKKyAJ CQllbmNvZGVibG9jayggaW4sIG91dCwgbGVuKTsKKy0JCQorLQkJCWZvciggaSA9IDA7IGkgPCA0 OyBpKysgKSAKKysKKysJCQlmb3IoIGkgPSAwOyBpIDwgNDsgaSsrICkKKyAJCQkJcmVzdWx0W2Js b2Nrc291dCsrXSA9IG91dFtpXTsKKy0JCX0JCQorKwkJfQorIAl9CistCQorKworIAlyZXN1bHRb YmxvY2tzb3V0XSA9ICdcMCc7CisgCXJldHVybiByZXN1bHQ7CisgfQorIAorLS8qKiAKKysvKioK KyAqIEBpbmdyb3VwIGxpYmNnaV9zdHJpbmcKKyAqLworIAorIC8qKgorICogRGVjb2RlIGEgYmFz ZTY0IGVuY29kZWQgc3RyaW5nLgorLSogCisrKgorICogQHBhcmFtICpzdHIgRW5jb2RlZCBTdHJp bmcgdG8gZGVjb2RlCisgKiBAcmV0dXJuIFRoZSBkZWNvZGVkIHN0cmluZworICogQHNlZSBzdHJf YmFzZTY0X2VuY29kZQorICoqLworIGNoYXIgKnN0cl9iYXNlNjRfZGVjb2RlKGNoYXIgKnN0cikK Ky17CQorK3sKKyAJdW5zaWduZWQgY2hhciBpbls0XSwgb3V0WzNdLCB2OworIAl1bnNpZ25lZCBp bnQgaSwgbGVuLCBwb3MgPSAwOworIAljaGFyICp0bXAgPSBzdHI7CistCQorKworIAljaGFyICpy ZXN1bHQgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oc3RyKSArIDEpOworIAlpZiAoIXJlc3VsdCkK KyAJCWxpYmNnaV9lcnJvcihFX01FTU9SWSwgIkZhaWxlZCB0byBhbGxvYyBtZW1vcnkgYXQgYmFz ZTY0LmMiKTsKKy0JCQorKworIAl3aGlsZSgqdG1wKSB7CisgCQlmb3IoIGxlbiA9IDAsIGkgPSAw OyBpIDwgNCAmJiAqdG1wOyBpKysgKSB7CisgCQkJdiA9IDA7CistCQkJCistCQkJd2hpbGUoKnRt cCAmJiB2ID09IDAgKSB7CQkJCistCQkJCXYgPSAodW5zaWduZWQgY2hhcikoKnRtcCk7CQkJCQor LQkJCQl2ID0gKHVuc2lnbmVkIGNoYXIpICgodiA8IDQzIHx8IHYgPiAxMjIpID8gMCA6IGNkNjRb IHYgLSA0MyBdKTsJCQkJCistCQkJCQorKworKwkJCXdoaWxlKCp0bXAgJiYgdiA9PSAwICkgewor KwkJCQl2ID0gKHVuc2lnbmVkIGNoYXIpKCp0bXApOworKwkJCQl2ID0gKHVuc2lnbmVkIGNoYXIp ICgodiA8IDQzIHx8IHYgPiAxMjIpID8gMCA6IGNkNjRbIHYgLSA0MyBdKTsKKysKKyAJCQkJaWYo IHYgKQorIAkJCQkJdiA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPT0gJyQnKSA/IDAgOiB2IC0gNjEp OworLQkJCQkJCisrCisgCQkJCXRtcCsrOworIAkJCX0KKy0JCQkKKysKKyAJCQlpZigqdG1wKSB7 CisgCQkJCWxlbisrOworLQkJCQkKKy0JCQkJaWYoIHYgKSAKKysKKysJCQkJaWYoIHYgKQorIAkJ CQkJaW5baV0gPSAodW5zaWduZWQgY2hhcikgKHYgLSAxKTsKKyAJCQl9CistCQkJZWxzZSAKKysJ CQllbHNlCisgCQkJCWluW2ldID0gMDsKKyAJCX0KKy0JCQorKworIAkJaWYobGVuKSB7CisgCQkJ ZGVjb2RlYmxvY2soIGluLCBvdXQgKTsKKy0JCQkKKysKKyAJCQlmb3IoIGkgPSAwOyBpIDwgbGVu IC0gMTsgaSsrICkKKyAJCQkJcmVzdWx0W3BvcysrXSA9IG91dFtpXTsKKyAJCX0KK2RpZmYgLS1n aXQgYS9zcmMvY2dpLmMgYi9zcmMvY2dpLmMKK2luZGV4IGVjYTlhYzIuLmU5ZDc2YWUgMTAwNjQ0 CistLS0gYS9zcmMvY2dpLmMKKysrKyBiL3NyYy9jZ2kuYworQEAgLTI3LDcgKzI3LDcgQEAKKyAj aW5jbHVkZSAiY2dpLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgCistLy8gV2hvdy4uLiBpZiBo ZXh0YWJsZSBhcnJheSBoYXMgYSBsZW5ndGggbGVzcyB0aGFuIDI1NiwgCisrLy8gV2hvdy4uLiBp ZiBoZXh0YWJsZSBhcnJheSBoYXMgYSBsZW5ndGggbGVzcyB0aGFuIDI1NiwKKyAvLyB0aGUgY2dp X3VuZXNjYXBlX3NwZWNpYWxfY2hhcnMgZnVuY3Rpb24gd2lsbCBmYWlsLiAgQW5kIEkgZG9uJ3Qg a25vdyB3aHkKKyBzdGF0aWMgaW50IGhleHRhYmxlWzI1Nl07CisgCitAQCAtNjEsMTMgKzYxLDEz IEBAIGZvcm12YXJzICpwcm9jZXNzX2RhdGEoY2hhciAqcXVlcnksIGZvcm12YXJzICoqc3RhcnQs IGZvcm12YXJzICoqbGFzdCwgY29uc3QgY2hhCisgCWF1eCA9IHF1ZXJ5OworIAl3aGlsZSAoKnF1 ZXJ5KSB7CisgCQlwb3NpdGlvbiA9IDA7CistCQkJCQorKworIAkJZGF0YSA9IChmb3JtdmFycyAq KW1hbGxvYyhzaXplb2YoZm9ybXZhcnMpKTsKKyAJCWlmICghZGF0YSkKKyAJCQlsaWJjZ2lfZXJy b3IoRV9NRU1PUlksICIlcywgbGluZSAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CistCQkJCist CQltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGZvcm12YXJzKSk7CQkJCQkJCQorLQkJCisrCisrCQlt ZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGZvcm12YXJzKSk7CisrCisgCQkvLyBTY2FucyB0aGUgc3Ry aW5nIGZvciB0aGUgbmV4dCAnZGVsaW0nIGNoYXJhY3RlcgorIAkJd2hpbGUgKCphdXggJiYgKCph dXggIT0gZGVsaW0pKSB7CisgCQkJcG9zaXRpb24rKzsKK0BAIC04Niw3ICs4Niw3IEBAIGZvcm12 YXJzICpwcm9jZXNzX2RhdGEoY2hhciAqcXVlcnksIGZvcm12YXJzICoqc3RhcnQsIGZvcm12YXJz ICoqbGFzdCwgY29uc3QgY2hhCisgCisgCQlzdHJuY3B5KGRhdGEtPm5hbWUsIHF1ZXJ5LCBwb3Np dGlvbik7CisgCQlkYXRhLT5uYW1lW3Bvc2l0aW9uXSA9ICdcMCc7CistCQkKKysKKyAJCXF1ZXJ5 ID0gYXV4OworIAkJcG9zaXRpb24gPSAwOworIAkJd2hpbGUgKCphdXggJiYgKCphdXggIT0gc2Vw KSkgeworQEAgLTk3LDI3ICs5NywyNyBAQCBmb3JtdmFycyAqcHJvY2Vzc19kYXRhKGNoYXIgKnF1 ZXJ5LCBmb3JtdmFycyAqKnN0YXJ0LCBmb3JtdmFycyAqKmxhc3QsIGNvbnN0IGNoYQorIAkJCQkJ cG9zaXRpb24rKzsKKyAJCQkJfQorIAkJCX0KKy0JCQllbHNlCQkJCisrCQkJZWxzZQorIAkJCQlw b3NpdGlvbisrOworLQkJCQkKKysKKyAJCQlhdXgrKzsKKyAJCQlpKys7CisgCQl9CistCQkJCQor KworIAkJaWYgKCphdXgpIHsKKyAJCQlhdXgrKzsKKyAJCQlpKys7CisgCQl9CistCQkKKysKKyAJ CWRhdGEtPnZhbHVlID0gKGNoYXIgKiltYWxsb2MocG9zaXRpb24rMSk7CisgCQlpZiAoZGF0YS0+ dmFsdWUgPT0gTlVMTCkKKyAJCQlsaWJjZ2lfZXJyb3IoRV9NRU1PUlksICIlcywgbGluZSAlcyIs IF9fRklMRV9fLCBfX0xJTkVfXyk7CisgCisgCQlzdHJuY3B5KGRhdGEtPnZhbHVlLCBjZ2lfdW5l c2NhcGVfc3BlY2lhbF9jaGFycyhxdWVyeSksIHBvc2l0aW9uKTsKKyAJCWRhdGEtPnZhbHVlW3Bv c2l0aW9uXSA9ICdcMCc7CistCQkKKysKKyAJCXNsaXN0X2FkZChkYXRhLCBzdGFydCwgbGFzdCk7 CistCQkKKysKKyAJCXF1ZXJ5ID0gYXV4OworIAl9CisgCitAQCAtMTM0LDggKzEzNCw4IEBAIGZv cm12YXJzICpwcm9jZXNzX2RhdGEoY2hhciAqcXVlcnksIGZvcm12YXJzICoqc3RhcnQsIGZvcm12 YXJzICoqbGFzdCwgY29uc3QgY2hhCisgLyoqCisgKiBQcm9jZXNzIEhUTUwgZm9ybSBvciBVUkwg ZGF0YS4KKyAqIFVzZWQgdG8gcmV0cmlldmUgR0VUIG9yIFBPU1QgZGF0YS4gSXQgaGFuZGxlcyBh dXRvbWF0aWNhbHkgdGhlIGNvcnJlY3QgUkVRVUVTVF9NRVRIT0QsIHNvIHlvdSBkb24ndCBuZWVk IHRvIGFmcmFpZCBhYm91dCBpdC4KKy0qIEByZXR1cm4gUmV0dXJucyB0aGUgY29udGVudHMgb2Yg VVJMIG9yIEZPUk0gaW50byBhIGZvcm12YXJzIHZhcmlhYmxlLCBvciBOVUxMIGlmIEZBTFNFLiBN b3N0IG9mIHRpbWUsIHlvdSAKKy0qIGRvbid0IG5lZWQgYW55IHZhcmlhYmxlIHRvIHN0b3JlIHRo ZSBmb3JtIGRhdGEsIGJlY2F1c2UgaXMgdXNlZCBhbiBpbnRlcm5hbCB2YXJpYWJsZSB0byBtYW5p cHVsYXRlIHRoZSBjb250ZW50cy4gCisrKiBAcmV0dXJuIFJldHVybnMgdGhlIGNvbnRlbnRzIG9m IFVSTCBvciBGT1JNIGludG8gYSBmb3JtdmFycyB2YXJpYWJsZSwgb3IgTlVMTCBpZiBGQUxTRS4g TW9zdCBvZiB0aW1lLCB5b3UKKysqIGRvbid0IG5lZWQgYW55IHZhcmlhYmxlIHRvIHN0b3JlIHRo ZSBmb3JtIGRhdGEsIGJlY2F1c2UgaXMgdXNlZCBhbiBpbnRlcm5hbCB2YXJpYWJsZSB0byBtYW5p cHVsYXRlIHRoZSBjb250ZW50cy4KKyAqIEBzZWUgY2dpX2luaXQsIGNnaV9pbml0X2hlYWRlcnMK KyAqKi8KKyBmb3JtdmFycyAqY2dpX3Byb2Nlc3NfZm9ybSgpCitAQCAtMTQ2LDcgKzE0Niw3IEBA IGZvcm12YXJzICpjZ2lfcHJvY2Vzc19mb3JtKCkKKyAKKyAJLy8gV2hlbiBNRVRIT0QgaGFzIG5v IGNvbnRlbnRzLCB0aGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcHJvY2VzcyBpdCBhcyBHRVQgbWV0 aG9kCisgCWlmIChtZXRob2QgPT0gTlVMTCB8fCAhc3RyY2FzZWNtcCgiR0VUIiwgbWV0aG9kKSkg eworLQkJY2hhciAqZGFkb3M7IAorKwkJY2hhciAqZGFkb3M7CisgCQlkYWRvcyA9CWdldGVudigi UVVFUllfU1RSSU5HIik7CisgCisgCQkvLyBTb21ldGltZXMsIEdFVCBjb21lcyB3aXRoIG5vdCBh bnkgZGF0YQorQEAgLTIyMiw3ICsyMjIsNyBAQCBpbnQgY2dpX2luY2x1ZGUoY29uc3QgY2hhciAq ZmlsZW5hbWUpCisgCisgCQlyZXR1cm4gMDsKKyAJfQorLQkKKysKKyAgCXdoaWxlIChmZ2V0cyhi dWZmZXIsIDI1NSwgaW5jKSkKKyAJCXByaW50ZigiJXMiLCBidWZmZXIpOworIAorQEAgLTI1MCw3 ICsyNTAsNyBAQCB2b2lkIGNnaV9pbml0X2hlYWRlcnMoKQorICogQHBhcmFtIG5hbWUgRm9ybSB2 YXJpYWJsZSBuYW1lCisgKiBAcmV0dXJuIEZvcm0gdmFyaWFibGUgY29udGVudHMKKyAqIEBzZWUg Y2dpX3BhcmFtCistKiAKKysqCisgKiBFeGFtcGxlOgorICogRm9yIGV4YW1wbGUsIGlmIGluIHlv dXIgSFRNTCB5b3UgaGF2ZSBzb21ldGhpbmcgbGlrZTxicj4KKyAqICA8YnI+CitAQCAtMjYyLDcg KzI2Miw3IEBAIHZvaWQgY2dpX2luaXRfaGVhZGVycygpCisgKiA8L3ByZT4KKyAqICAgICAgIDxi cj4KKyAqIHRoZW4sIHRvIHJldHJpZXZlIGFsbCB2YWx1ZXMsIHlvdSBjYW4gbWFrZSBhIGNvZGUg bGlrZTxicj48YnI+CistKiAKKysqCisgKiBcY29kZQorICogLy8gLi4uCisgKiBjaGFyICpkYXRh OworQEAgLTI5NiwxMyArMjk2LDEzIEBAIGNoYXIgKmNnaV9wYXJhbV9tdWx0aXBsZShjb25zdCBj aGFyICpuYW1lKQorIH0KKyAKKyAvKioKKy0qICBSZWNpcmVjdHMgdG8gdGhlIHNwZWNpZmllZCB1 cmwuIAorKyogIFJlY2lyZWN0cyB0byB0aGUgc3BlY2lmaWVkIHVybC4KKyAqIFJlbWVtYmVyIHRo YXQgeW91IGNhbm5vdCBzZW5kIGFueSBoZWFkZXIgYmVmb3JlIHRoaXMgZnVuY3Rpb24sIG9yIGl0 IHdpbGwgbm90IHdvcmsuCisgKiA8Yj5Ob3RlOjwvYj48YnI+CisgKiBMaWJDR0kgZG9lcyBub3Qg aW1wbGVtZW50IFJGQyAyMzk2IHRvIG1ha2UgdGhlIGxpYiBzaW1wbGUgYW5kIHF1aWNrLiBZb3Ug c2hvdWxkIGJlIHN1cmUKKy0qIHRvIHBhc3MgYSBjb3JyZWN0IFVSSSB0byB0aGlzIGZ1bmN0aW9u LiAKKysqIHRvIHBhc3MgYSBjb3JyZWN0IFVSSSB0byB0aGlzIGZ1bmN0aW9uLgorICogQHBhcmFt IHVybCB1cmwgdG8gcmVkaXJlY3QgdGhlIGJyb3dzZXIKKy0qIAorKyoKKyAqIFxjb2RlCisgKiBj Z2lfcmVkaXJlY3QoImh0dHA6Ly93d3d3LmxpbnV4Lm9yZyIpOworICogXGVuZGNvZGUKK0BAIC0z NDcsNyArMzQ3LDcgQEAgdm9pZCBpbml0X2hleF90YWJsZSgpCisgfQorIAorIC8qKgorLSogIE1h aW4gY2dpIGZ1bmN0aW9uLiAKKysqICBNYWluIGNnaSBmdW5jdGlvbi4KKyAqICBDb25maWd1cmVz IGFsbCAobW9zdD8pIHdlIG5lZWQgdG8gIGdldCBjZ2kgbGlicmFyeSB3b3JraW5nIGNvcnJlY3Rs eS4gSXQgTVVTVCBiZSBjYWxsZWQgYmVmb3JlCisgKiAgYW55IG90aGVyIGNnaSBmdW5jdGlvbi4K KyAqICBAc2VlIGNnaV9lbmQsIGNnaV9wcm9jZXNzX2Zvcm0sIGNnaV9pbml0X2hlYWRlcnMKK0BA IC0zNjAsNyArMzYwLDcgQEAgaW50IGNnaV9pbml0KCkKKyAJLy8gY2F1c2UgcHJvYmxlbXMgd2l0 aCBzZXNzaW9uJ3MuIE5vdGUgdGhhdCwgd2hlbiB5b3Ugd2FudAorIAkvLyB0byB1c2Ugc2Vzc2lv biB3aXRoaW4geW91ciBwcm9ncmFtLCB5b3UgbmVlZCAgY2dpX2dldF9jb29raWVzKCkKKyAJLy8g YmVmb3JlIHNlc3Npb25fc3RhcnQoKSwgb3RoZXJ3aXNlIHdlIHdpbGwgZ2V0IHNvbWUgcHJvYmxl bXMuLi4gOikKKy0JLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGhlcmUgaXMgdGhlIGJlc3Qgd2F5 LiBUcnVzdCBtZSA6KQkKKysJLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGhlcmUgaXMgdGhlIGJl c3Qgd2F5LiBUcnVzdCBtZSA6KQorIAljZ2lfZ2V0X2Nvb2tpZXMoKTsKKyAKKyAJcmV0dXJuIDE7 CitAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgY2dpX2VuZCgpCisgCisgCWZvcm12YXJzX2xhc3Qg PSBOVUxMOworIAorLQlpZiAoc2Vzc19saXN0X3N0YXJ0KSAKKysJaWYgKHNlc3NfbGlzdF9zdGFy dCkKKyAJCXNsaXN0X2ZyZWUoJnNlc3NfbGlzdF9zdGFydCk7CisgCisgCWlmIChjb29raWVzX3N0 YXJ0KQorQEAgLTQxNCw3ICs0MTQsNyBAQCBjaGFyICpjZ2lfdW5lc2NhcGVfc3BlY2lhbF9jaGFy cyhjaGFyICpzdHIpCisgCQkJdG1wW3Bvc10gPSAnICc7CisgCQllbHNlCisgCQkJdG1wW3Bvc10g PSBzdHJbaV07CistCQkKKysKKyAJCXBvcysrOworIAl9CisgCitAQCAtNDY0LDIxICs0NjQsMjEg QEAgY2hhciAqY2dpX2VzY2FwZV9zcGVjaWFsX2NoYXJzKGNoYXIgKnN0cikKKyAKKyAvKioKKyAq IEdldHMgdGhlIG9mIEhUTUwgb3IgVVJMIHZhcmlhYmxlIGluZGljYXRlZCBieSAnbmFtZScKKy0q IEBwYXJhbSBuYW1lIEZvcm0gVmFyaWFibGUgbmFtZSAKKysqIEBwYXJhbSBuYW1lIEZvcm0gVmFy aWFibGUgbmFtZQorICogQHNlZSBjZ2lfcGFyYW1fbXVsdGlwbGUsICBjZ2lfcHJvY2Vzc19mb3Jt LCBjZ2lfaW5pdAorLSogCisrKgorICogXGNvZGUKKyAqIC8vIC4uLgorICogY2hhciAqY29udGVu dHM7CistKiAKKysqCisgKiBjZ2lfaW5pdCgpOworICogY2dpX3Byb2Nlc3NfZm9ybSgpOworICog Y2dpX2luaXRfaGVhZGVycygpOworLSogCisrKgorICogY29udGVudHMgPSBjZ2lfcGFyYW0oImZv byIpOworLSogCisrKgorICogcHV0cyhjb250ZW50cyk7CistKiAKKysqCisgKiAvLyAuLi4KKyAq IFxlbmRjb2RlCisgKiovCitkaWZmIC0tZ2l0IGEvc3JjL2NnaS5oIGIvc3JjL2NnaS5oCitpbmRl eCA5ODEyZTdhLi43MzE3MzVkIDEwMDY0NAorLS0tIGEvc3JjL2NnaS5oCisrKysgYi9zcmMvY2dp LmgKK0BAIC0yOCw3ICsyOCw3IEBAIGV4dGVybiAiQyIgeworIAorIC8vIGdlbmVyYWwgcHVycG9z ZSBsaW5rZWQgbGlzdC4gQWN0dWFseSBpc24ndCB2ZXJ5IHBvcnRhYmxlCisgLy8gYmVjYXVzZSB1 c2VzIG9ubHkgJ25hbWUnIGFuZCAndmFsdWUnIHZhcmlhYmxlcyB0byBzdG9yZSBkYXRhLgorLS8v IFByb2JsYWJseSwgaW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyB3aWxsIGJlIHJlcGxhY2VkIGJ5 IAorKy8vIFByb2JsYWJseSwgaW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyB3aWxsIGJlIHJlcGxh Y2VkIGJ5CisgLy8gYW5vdGhlciB0eXBlIG9mIHN0cnVjdAorIHR5cGVkZWYgc3RydWN0IGZvcm12 YXJzQSB7CisgICAgICAgICBjaGFyICpuYW1lOworQEAgLTg2LDcgKzg2LDcgQEAgZXh0ZXJuIGlu dCBzbGlzdF9kZWxldGUoY2hhciAqbmFtZSwgZm9ybXZhcnMgKipzdGFydCwgZm9ybXZhcnMgKips YXN0KTsKKyBleHRlcm4gY2hhciAqc2xpc3RfaXRlbShjb25zdCBjaGFyICpuYW1lLCBmb3JtdmFy cyAqc3RhcnQpOworIAorIGV4dGVybiB2b2lkIHNsaXN0X2ZyZWUoZm9ybXZhcnMgKipzdGFydCk7 CistIAorKworIC8vIFNlc3Npb24gc3R1ZmYKKyAvLyBXZSBjYW4gdXNlIHRoaXMgdmFyaWFibGUg dG8gZ2V0IHRoZSBlcnJvciBtZXNzYWdlIGZyb20gYSAoIHBvc3NpYmxlICkgc2Vzc2lvbiBlcnJv cgorIC8vIFVzZSBpdCB0b2doZXRlciB3aXRoIHNlc3Npb25fbGFzdGVycm9yCitAQCAtOTgsNyAr OTgsNyBAQCBleHRlcm4gZm9ybXZhcnMgKnNlc3NfbGlzdF9zdGFydDsKKyAKKyBleHRlcm4gY2hh ciBTRVNTSU9OX1NBVkVfUEFUSFsyNTVdOworIGV4dGVybiBjaGFyIFNFU1NJT05fQ09PS0lFX05B TUVbNTBdOworLSAKKysKKyBleHRlcm4gdm9pZCBjZ2lfc2Vzc2lvbl9zZXRfbWF4X2lkbGVfdGlt ZSh1bnNpZ25lZCBsb25nIHNlY29uZHMpOworIGV4dGVybiBpbnQgY2dpX3Nlc3Npb25fZGVzdHJv eSgpOworIGV4dGVybiBpbnQgY2dpX3Nlc3Npb25fcmVnaXN0ZXJfdmFyKGNvbnN0IGNoYXIgKm5h bWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK0BAIC0xMDksNyArMTA5LDcgQEAgZXh0ZXJuIGludCBj Z2lfc2Vzc2lvbl9zdGFydCgpOworIGV4dGVybiB2b2lkIGNnaV9zZXNzaW9uX2Nvb2tpZV9uYW1l KGNvbnN0IGNoYXIgKmNvb2tpZV9uYW1lKTsKKyBleHRlcm4gY2hhciAqY2dpX3Nlc3Npb25fdmFy KGNvbnN0IGNoYXIgKm5hbWUpOworIGV4dGVybiB2b2lkIGNnaV9zZXNzaW9uX3NhdmVfcGF0aChj b25zdCBjaGFyICpwYXRoKTsKKy0gCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgfQorICNlbmRp ZgorZGlmZiAtLWdpdCBhL3NyYy9jb29raWUuYyBiL3NyYy9jb29raWUuYworaW5kZXggYTExNjUw My4uZTlkZWU5ZSAxMDA2NDQKKy0tLSBhL3NyYy9jb29raWUuYworKysrIGIvc3JjL2Nvb2tpZS5j CitAQCAtNDEsMjQgKzQxLDI0IEBAIGV4dGVybiBpbnQgY2dpX2Rpc3BsYXlfZXJyb3JzOworICov CisgCisgLyoqCistKiBTZW5kIGEgY29va2llIHRvIHRoZSBjbGllbnQuIAorKyogU2VuZCBhIGNv b2tpZSB0byB0aGUgY2xpZW50LgorICogQHBhcmFtIG5hbWUgQ29va2llIG5hbWUKKyAqIEBwYXJh bSB2YWx1ZSBDb29raWUgdmFsdWUKKy0qIEBwYXJhbSBtYXhfYWdlICBDb29raWUgdGltZSBsaWZl LCBpbiBzZWNvbmRzLiBBIHZhbHVlIGVxdWFsIHRvIDAgKCB6ZXJvICkgbWVhbnMgdG8gZGlzY2Fy ZCB0aGUgY29va2llIHdoZW4gdGhlIHNlc3Npb24gaXMgZG9uZS4gCisrKiBAcGFyYW0gbWF4X2Fn ZSAgQ29va2llIHRpbWUgbGlmZSwgaW4gc2Vjb25kcy4gQSB2YWx1ZSBlcXVhbCB0byAwICggemVy byApIG1lYW5zIHRvIGRpc2NhcmQgdGhlIGNvb2tpZSB3aGVuIHRoZSBzZXNzaW9uIGlzIGRvbmUu CisgKiBAcGFyYW0gcGF0aCBDb29raWUgcGF0aCBhdCB0aGUgc2VydmVyCisgKiBAcGFyYW0gZG9t YWluIERvbWFpbiB3aGVyZSBjb29raWUgd2lsbCB3b3JrIDopCisgKiBAcGFyYW0gc2VjdXJlIFNl Y3VyZSBvciBub3QKKyAqIEBzZWUgY2dpX2Nvb2tpZV92YWx1ZQorLSogCisrKgorICogXGNvZGUK KyAqIGNnaV9hZGRfY29va2llKCJteWNvb2tpZSIsICJteWNvb2tpZSB2YWx1ZSIsIDAsIDAsIDAs IDApOworLSogXGVuZGNvZGUgIAorKyogXGVuZGNvZGUKKyAqKi8KKy1pbnQgY2dpX2FkZF9jb29r aWUoY29uc3QgY2hhciAqbmFtZSwgCistCWNvbnN0IGNoYXIgKnZhbHVlLCAKKytpbnQgY2dpX2Fk ZF9jb29raWUoY29uc3QgY2hhciAqbmFtZSwKKysJY29uc3QgY2hhciAqdmFsdWUsCisgCWNvbnN0 IGNoYXIgKm1heF9hZ2UsCistCWNvbnN0IGNoYXIgKnBhdGgsIAorLQljb25zdCBjaGFyICpkb21h aW4sIAorKwljb25zdCBjaGFyICpwYXRoLAorKwljb25zdCBjaGFyICpkb21haW4sCisgCWNvbnN0 IGludCBzZWN1cmUpCisgeworIAlpZiAoaGVhZGVyc19pbml0aWFsaXplZCkKK0BAIC04MSw3ICs4 MSw3IEBAIGludCBjZ2lfYWRkX2Nvb2tpZShjb25zdCBjaGFyICpuYW1lLAorIAorIGZvcm12YXJz ICpjZ2lfZ2V0X2Nvb2tpZXMoKQorIHsKKy0JcmVnaXN0ZXIgZm9ybXZhcnMgKmRhdGE7CQorKwly ZWdpc3RlciBmb3JtdmFycyAqZGF0YTsKKyAJcmVnaXN0ZXIgc2l6ZV90IHBvc2l0aW9uOworIAlj aGFyICpjb29raWVzLCAqYXV4OworIAorQEAgLTExNyw3ICsxMTcsNyBAQCBmb3JtdmFycyAqY2dp X2dldF9jb29raWVzKCkKKyAJCQlwb3NpdGlvbiA9IHN0cmxlbihjb29raWVzKTsKKyAJCX0KKyAJ CWVsc2UgeworLQkJCXdoaWxlICgqYXV4KysgIT0gJzsnKSAKKysJCQl3aGlsZSAoKmF1eCsrICE9 ICc7JykKKyAJCQkJcG9zaXRpb24rKzsKKyAJCQkvLyBFbGltaW5hdGUgdGhlIGJsYW5rIHNwYWNl IGFmdGVyICc7JworIAkJCWF1eCsrOworZGlmZiAtLWdpdCBhL3NyYy9lcnJvci5jIGIvc3JjL2Vy cm9yLmMKK2luZGV4IDVkMmRhMTIuLjJmNDhiM2IgMTAwNjQ0CistLS0gYS9zcmMvZXJyb3IuYwor KysrIGIvc3JjL2Vycm9yLmMKK0BAIC0yMSw3ICsyMSw3IEBAIHZvaWQgbGliY2dpX2Vycm9yKGlu dCBlcnJvcl9jb2RlLCBjb25zdCBjaGFyICptc2csIC4uLikKKyAJCXJldHVybjsKKyAKKyAJY2dp X2luaXRfaGVhZGVycygpOworLQl2YV9zdGFydChhcmd1bWVudHMsIG1zZyk7CQorKwl2YV9zdGFy dChhcmd1bWVudHMsIG1zZyk7CisgCisgCXByaW50ZigiPGI+JXM8L2I+OiAiLCBsaWJjZ2lfZXJy b3JfdHlwZVtlcnJvcl9jb2RlXSk7CisgCXZwcmludGYobXNnLCBhcmd1bWVudHMpOworZGlmZiAt LWdpdCBhL3NyYy9nZW5lcmFsLmMgYi9zcmMvZ2VuZXJhbC5jCitpbmRleCBhZDM0MzVjLi45NjYy ZWNlIDEwMDY0NAorLS0tIGEvc3JjL2dlbmVyYWwuYworKysrIGIvc3JjL2dlbmVyYWwuYworQEAg LTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGludCBuY29kZXMgPSBzaXplb2YoaGUpIC8gc2l6ZW9mKHN0 cnVjdCBpc284ODU5XzE1KTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAJCQkJCQlHRU5FUkFMIEdST1VQCistKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwkKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisgLyoqIEBkZWZncm91cCBsaWJjZ2lfZ2VuZXJhbCBHZW5lcmFsIHB1 cnBvc2UKKyAqIEB7CisgKi8KK0BAIC01OSw0MiArNTksNDIgQEAgc3RhdGljIGludCBuY29kZXMg PSBzaXplb2YoaGUpIC8gc2l6ZW9mKHN0cnVjdCBpc284ODU5XzE1KTsKKyAqIGxpa2UgJyZsdCcg YW5kICcmZ3QnCisgKiBAcGFyYW0gc3RyIFN0cmluZyBjb250YWluaW5nIGNvZGUgdG8gcGFyc2UK KyAqIEByZXR1cm4gVGhlIG5ldyBzdHJpbmcKKy0qIEBhdXRob3IgUm9iZXJ0IENzb2sgPHJjc29r QGdteC5kZT4gCisrKiBAYXV0aG9yIFJvYmVydCBDc29rIDxyY3Nva0BnbXguZGU+CisgKi8KKyAv LyBUaGlzIG9uZSBuZWVkcyB0aGUgc3RydWN0IGFuZCBuY29kZXMgYWJvdmUuCistLy8gbmNvZGVz IGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0cnVjdC4gCisrLy8gbmNvZGVzIGlz IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0cnVjdC4KKyBjaGFyICpodG1sZW50aXRp ZXMoY29uc3QgY2hhciAqc3RyKQorIHsKKyAJY2hhciAqYnVmOworIAlpbnQgc2l6LCBsZW4sIGkg PSAwLCBqOworIAorIAlzaXogPSBzdHJsZW4oc3RyKSArIDE7CistCQorLQlidWYgPSAoY2hhciAq KW1hbGxvYyhzaXopOwkKKysKKysJYnVmID0gKGNoYXIgKiltYWxsb2Moc2l6KTsKKyAJaWYgKCFi dWYpCisgCQlsaWJjZ2lfZXJyb3IoRV9NRU1PUlksICJGYWlsZWQgdG8gYWxsb2MgbWVtb3J5IGF0 IGh0bWxlbnRpdGllcywgY2dpLmMiKTsKKy0JCisrCisgCWZvciAoOyAqc3RyOyBzdHIrKywgaSsr KSAgeworIAkJZm9yIChqID0gMDsgaiA8IG5jb2RlczsgaisrKSB7CisgCQkJaWYgKCpzdHIgPT0g aGVbal0uY29kZSkgeworIAkJCQlsZW4gPSBzdHJsZW4oaGVbal0uaHRtbCkgLSAxOworLQkJCQkK Ky0JCQkJYnVmID0gcmVhbGxvYyhidWYsIHNpeiArPSBsZW4pOwkKKysKKysJCQkJYnVmID0gcmVh bGxvYyhidWYsIHNpeiArPSBsZW4pOworIAkJCQlpZiAoIWJ1ZikKKyAJCQkJCWxpYmNnaV9lcnJv cihFX01FTU9SWSwgIkZhaWxlZCB0byBhbGxvYyBtZW1vcnkgYXQgaHRtbGVudGl0aWVzLCBjZ2ku YyIpOworLQkJCQkKKysKKyAJCQkJc3RyY3B5KGJ1ZiArIGksIGhlW2pdLmh0bWwpOworIAkJCQlp ICs9IGxlbjsKKyAJCQkJYnJlYWs7CisgCQkJfQorIAkJfQorLQkJCQorLQkJaWYgKGogPT0gbmNv ZGVzKSAKKysKKysJCWlmIChqID09IG5jb2RlcykKKyAJCQlidWZbaV0gPSAqc3RyOworIAl9Cist CQorKworIAlidWZbaV0gPSAnXDAnOworLQlyZXR1cm4gYnVmOwkKKysJcmV0dXJuIGJ1ZjsKKyB9 CisgCisgLyoqCitAQCAtMTAyLDIzICsxMDIsMjMgQEAgY2hhciAqaHRtbGVudGl0aWVzKGNvbnN0 IGNoYXIgKnN0cikKKyAqIEBwYXJhbSBmaWxlbmFtZSBGaWxlbmFtZSB0byBvcGVuCisgKiBAcGFy YW0gdG90YWwgSW50ZWdlciB2YXJpYWJsZSBwYXNzZWQgYXMgcmVmZXJlbmNlLCB3aGljaCB3aWxs IHN0b3JlIHRoZSB0b3RhbCBvZiBpdGVtcworICogQHJldHVybiBSZXR1cm5zIHRoZSBmaWxlIGlu IGFuIGFycmF5LiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGNvcnJlc3BvbmRzIHRvIGEgbGlu ZSBpbiB0aGUgZmlsZS4KKy0qIAorKyoKKyAqIFxjb2RlCisgKiBjaGFyICoqbGluZXM7CisgKiB1 bnNpZ25lZCBpbnQgdG90YWwsIGk7CistKiAgCisrKgorICogbGluZXMgPSBmaWxlKCJmaWxlbmFt ZS5leHQiLCAmdG90YWwpOworLSogICAgCisrKgorICogcHJpbnRmKCJUb3RhbCBvZiBsaW5lczog JXVcbiIsIHRvdGFsKTsKKy0qICAgIAorKyoKKyAqIGZvciAoaSA9IDA7IGkgPCB0b3RhbDsgaSsr KQorICoJcHJpbnRmKCJbJXVdICVzXG4iLCBpLCBsaW5lc1tpXSk7CistKiAgICAgCisrKgorICog Zm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHsKKyAqIAlpZiAobGluZXNbaV0pCisgKgkJIGZy ZWUobGluZXNbaV0pOworICogfQorLSogXGVuZGNvZGUJICAKKysqIFxlbmRjb2RlCisgKi8KKyBj aGFyICoqZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgaW50ICp0b3RhbCkKKyB7 CitAQCAtMTM4LDcgKzEzOCw3IEBAIGNoYXIgKipmaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1 bnNpZ25lZCBpbnQgKnRvdGFsKQorIAkvLyBpbml0aWFsIGxpbmUgbGVuZ3RoCisgCWNvbHVtbXMg PSAxMDA7CisgCistCS8vIEhvdyBtYW55IGNoYXJhY3RlcmVzIGluIHRoZSBsaW5lIAorKwkvLyBI b3cgbWFueSBjaGFyYWN0ZXJlcyBpbiB0aGUgbGluZQorIAljaGFyX2NvdW50ID0gMTsKKyAKKyAJ aSA9IDA7CitAQCAtMTQ4LDkgKzE0OCw5IEBAIGNoYXIgKipmaWxlKGNvbnN0IGNoYXIgKmZpbGVu YW1lLCB1bnNpZ25lZCBpbnQgKnRvdGFsKQorIAlpZiAoIXN0cikKKyAJCWxpYmNnaV9lcnJvcihF X01FTU9SWSwgIiVzLCBsaW5lICVzIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAKKy0JLy8gQWxs b2NhdGUgaW5pdGlhbCBtZW1vcnkgdG8gYnVmIHZhcmlhYmxlLiBJdCBpcyB0aGUgb25lIAorKwkv LyBBbGxvY2F0ZSBpbml0aWFsIG1lbW9yeSB0byBidWYgdmFyaWFibGUuIEl0IGlzIHRoZSBvbmUK KyAJLy8gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGNoYXJzIG9mIHRoZSBsaW5lcworLQkvLyBCeSBk ZWZhdWx0LCB3ZSdyZSBhbGxvY2F0aW5nIDgwIGNoYXJzLi4gaWYgbW9yZSBpcyBuZWVkZWQsIAor KwkvLyBCeSBkZWZhdWx0LCB3ZSdyZSBhbGxvY2F0aW5nIDgwIGNoYXJzLi4gaWYgbW9yZSBpcyBu ZWVkZWQsCisgCS8vIHRoZW4gd2UnbGwgcmVhbGxvYygpCisgCWJ1ZiA9IChjaGFyICopbWFsbG9j KGNvbHVtbXMpOworIAlpZiAoYnVmID09IE5VTEwpCitAQCAtMTU4LDggKzE1OCw4IEBAIGNoYXIg KipmaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgKnRvdGFsKQorIAorIAl3 aGlsZSAoIWZlb2YoZnApKSB7CisgCQljaCA9IGZnZXRjKGZwKTsKKy0JCQorLQkJLy8gVGhlIG5l eHQgd2hpbGUoKSBsb29wIGlzICB0byBnZXQgYWxsIGNvbnRlbnRzIG9mIGFjdHVhbCBsaW5lIAor KworKwkJLy8gVGhlIG5leHQgd2hpbGUoKSBsb29wIGlzICB0byBnZXQgYWxsIGNvbnRlbnRzIG9m IGFjdHVhbCBsaW5lCisgCQl3aGlsZSAoKGNoICE9ICdcbicpICYmIChjaCAhPSBFT0YpKSB7Cisg CQkJLy8gSW5jcmVtZW50cyB0aGUgY2hhcmFjdGVyIGNvdW50ZXIKKyAJCQljaGFyX2NvdW50Kys7 CitAQCAtMjAxLDcgKzIwMSw3IEBAIGNoYXIgKipmaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1 bnNpZ25lZCBpbnQgKnRvdGFsKQorIAlmY2xvc2UoZnApOworIAorIAkqdG90YWwgPSBsaW5lcyAt IDE7CistCXJldHVybiBzdHI7CQorKwlyZXR1cm4gc3RyOworIH0KKyAKKyAvKioKK2RpZmYgLS1n aXQgYS9zcmMvbGlzdC5jIGIvc3JjL2xpc3QuYworaW5kZXggOGJkNjhmNy4uNDIzZjI4YiAxMDA2 NDQKKy0tLSBhL3NyYy9saXN0LmMKKysrKyBiL3NyYy9saXN0LmMKK0BAIC0yNiwxNSArMjYsMTUg QEAKKyAjaW5jbHVkZSAiZXJyb3IuaCIKKyAjaW5jbHVkZSAiY2dpLmgiCisgCistLy8gQWRkIGEg bmV3IGl0ZW0gdG8gdGhlIGxpc3QgCisrLy8gQWRkIGEgbmV3IGl0ZW0gdG8gdGhlIGxpc3QKKyB2 b2lkIHNsaXN0X2FkZChmb3JtdmFycyAqaXRlbSwgZm9ybXZhcnMgKipzdGFydCwgZm9ybXZhcnMg KipsYXN0KQorIHsKKyAJLy8gaWYgKnN0YXJ0IGlzIGVtcHR5LCB0aGVuIG91ciBsaXN0IGlzIGFs c28gZW1wdHkuIFNvLCB0aGUgb25seQorIAkvLyB0YXNrIHRvIGRvIGlzIGZpbGwgdGhlIHZhcmlh YmxlcyAqc3RhcnQgYW5kICpsYXN0IHdpdGggdGhlIGRhdGEgcG9pbnRlZCBieSBpdGVtCistCS8v ICpzdGFydCBjb250YWlucyB0aGUgZmlydHMgaXRlbSBpbiB0aGUgbGlzdCwgYW5kIHdlIG5lZWQg Kmxhc3QgdG8ga25vdyB0aGUgCisrCS8vICpzdGFydCBjb250YWlucyB0aGUgZmlydHMgaXRlbSBp biB0aGUgbGlzdCwgYW5kIHdlIG5lZWQgKmxhc3QgdG8ga25vdyB0aGUKKyAJLy8gZW5kIG9mIHRo ZSBsaXN0CisgCWlmICghKnN0YXJ0KSB7CistCQkvLyBpdGVtLT5uZXh0IG5lZWRzIHRvIGJlIE5V TEwsIG90aGVyd2lzZSB3ZSBuZXZlciB3aWxsIAorKwkJLy8gaXRlbS0+bmV4dCBuZWVkcyB0byBi ZSBOVUxMLCBvdGhlcndpc2Ugd2UgbmV2ZXIgd2lsbAorIAkJLy8gZmluZCB0aGUgZW5kIG9mIGxp c3QKKyAJCWl0ZW0tPm5leHQgPSBOVUxMOworIAorQEAgLTU5LDggKzU5LDggQEAgdm9pZCBzbGlz dF9hZGQoZm9ybXZhcnMgKml0ZW0sIGZvcm12YXJzICoqc3RhcnQsIGZvcm12YXJzICoqbGFzdCkK KyAKKyAvLyBEZWxldGUgZnJvbSBsaXN0IHRoZSBpdGVtIHBvaW50ZWQgYnkgbmFtZQorIAorLS8v IFRoaXMgY29kZSBpcyBhIGJpdCBjb21wbGljYXRlZCwgYW5kIEkgbmVlZGVkIHNvbWUgCistLy8g bG9uZyBob3VycyB0byB0ZXJtaW5hdGUgaXQuIEluIGEgZnV0dXJlIHJlbGVhc2UsIAorKy8vIFRo aXMgY29kZSBpcyBhIGJpdCBjb21wbGljYXRlZCwgYW5kIEkgbmVlZGVkIHNvbWUKKysvLyBsb25n IGhvdXJzIHRvIHRlcm1pbmF0ZSBpdC4gSW4gYSBmdXR1cmUgcmVsZWFzZSwKKyAvLyBJIHdpbGwg ZXhwbGFpbiB0aGUgYWxnb3JpdGhtIGJldHRlcgorIGludCBzbGlzdF9kZWxldGUoY2hhciAqbmFt ZSwgZm9ybXZhcnMgKipzdGFydCwgZm9ybXZhcnMgKipsYXN0KQorIHsKK0BAIC02OCw3ICs2OCw3 IEBAIGludCBzbGlzdF9kZWxldGUoY2hhciAqbmFtZSwgZm9ybXZhcnMgKipzdGFydCwgZm9ybXZh cnMgKipsYXN0KQorIAkvLyAqcHJpb3Igd2lsbCBzdG9yZSB0aGUgcHJpb3IgaXRlbSByZWxhY3Rl ZCB0byBhY3R1YWwgaW4gdGhlIGxvb3AKKyAJZm9ybXZhcnMgKmJlZ2luLCAqcHJpb3I7CisgCist CS8vIEJlZm9yZSBvZiBhbGwsIGlzIG1vcmUgc2ltcGxlIHRvIGNoZWNrIGlmIHRoZSBpdGVtIAor KwkvLyBCZWZvcmUgb2YgYWxsLCBpcyBtb3JlIHNpbXBsZSB0byBjaGVjayBpZiB0aGUgaXRlbQor IAkvLyB0byBkZWxldGUgaXMgaW4gdGhlIG5leHQgaXRlbS4gSWYgdHJ1ZSwgd2UgZG9uJ3QgbmVl ZAorIAkvLyB0byBlbnRlciBpbiB0aGUgbG9vcAorIAlpZiAoIXN0cmNhc2VjbXAoKCpzdGFydCkt Pm5hbWUsIG5hbWUpKSB7CitAQCAtNzYsOCArNzYsOCBAQCBpbnQgc2xpc3RfZGVsZXRlKGNoYXIg Km5hbWUsIGZvcm12YXJzICoqc3RhcnQsIGZvcm12YXJzICoqbGFzdCkKKyAJCSpzdGFydCA9ICgq c3RhcnQpLT5uZXh0OworIAorIAkJLy8gaWYgc3RhcnQgaXMgbnVsbCwgdGhlbiB3ZSBoYXZlbid0 IG1vcmUgaXRlbnMKKy0JCS8vIGluIHRoZSBsaXN0Li4gCistCQlpZiAoISpzdGFydCkgCisrCQkv LyBpbiB0aGUgbGlzdC4uCisrCQlpZiAoISpzdGFydCkKKyAJCQkqbGFzdCA9IE5VTEw7CisgCisg CQlyZXR1cm4gMSA7CitAQCAtODYsNyArODYsNyBAQCBpbnQgc2xpc3RfZGVsZXRlKGNoYXIgKm5h bWUsIGZvcm12YXJzICoqc3RhcnQsIGZvcm12YXJzICoqbGFzdCkKKyAJLy8gU3RvcmVzIHRoZSBz dGFydCBvZiB0aGUgbGlzdAorIAliZWdpbiA9ICpzdGFydDsKKyAKKy0JLy8gU3RheXMgaW4gdGhl IGxvb3Agd2hpbGUgdGhlIGl0ZW0gdG8gYmUgZGVsZXRlZCAKKysJLy8gU3RheXMgaW4gdGhlIGxv b3Agd2hpbGUgdGhlIGl0ZW0gdG8gYmUgZGVsZXRlZAorIAkvLyBpcyBub3QgZm91bmQKKyAJd2hp bGUgKCpzdGFydCkgeworIAkJLy8gU3RvcmVzIHRoZSBwcmlvciBpdGVtIG9mIHRoZSBsaXN0CitA QCAtOTgsMTMgKzk4LDEzIEBAIGludCBzbGlzdF9kZWxldGUoY2hhciAqbmFtZSwgZm9ybXZhcnMg KipzdGFydCwgZm9ybXZhcnMgKipsYXN0KQorIAkJLy8gdGhlIG5leHQgaXRlbSBpcyB0aGUgb25l IHRvIGJlIGRlbGV0ZWQ/Pz8KKyAJCWlmICghc3RyY2FzZWNtcCgoKnN0YXJ0KS0+bmV4dC0+bmFt ZSwgbmFtZSkpIHsKKyAJCQkvLyBCZWZvcmUsIGNoZWNrIGlmIHRoZSBpdGVtIHRoYXQgd2lsbCBi ZSBkZWxldGVkCistCQkJLy8gaXMgdGhlIGxhc3QuLi4gaWYgdHJ1ZSwgdGhlbiB0aGUgbmV4dCBp dGVtIG5lZWQgdG8gCisrCQkJLy8gaXMgdGhlIGxhc3QuLi4gaWYgdHJ1ZSwgdGhlbiB0aGUgbmV4 dCBpdGVtIG5lZWQgdG8KKyAJCQkvLyBjb250YWluIG51bGwgKCB0aGUgZW5kIG9mIGxpc3QgKSwg YW5kIHRoZSBhY3R1YWwKKyAJCQkvLyB2YWx1ZSBpcyBjaGFuZ2VkIHdpdGggdGhlIHZhbHVlIG9m IHRoZSBwcmlvciB2YXJpYWJsZQorIAkJCWlmICgoKnN0YXJ0KS0+bmV4dCA9PSAqbGFzdCkgewor IAkJCQkoKnN0YXJ0KS0+bmV4dCA9IE5VTEw7CisgCQkJCSpsYXN0ID0gcHJpb3I7CistCQkJfQkJ CQorKwkJCX0KKyAJCQllbHNlCisgCQkJCS8vIG90aGVyd2lzZS4uLiB3ZWxsCisgCQkJCS8vIHRo ZSBpdGVtIHRoYXQgd2lsbCBiZSBkZWxldGVkIGlzIHBvaW50ZWQKK0BAIC0xNTcsNyArMTU3LDcg QEAgY2hhciAqc2xpc3RfaXRlbShjb25zdCBjaGFyICpuYW1lLCBmb3JtdmFycyAqc3RhcnQpCisg CWJlZ2luID0gc3RhcnQ7CisgCisgCXdoaWxlIChiZWdpbikgeworLQkJaWYgKCFzdHJjYXNlY21w KGJlZ2luLT5uYW1lLCBuYW1lKSkgCisrCQlpZiAoIXN0cmNhc2VjbXAoYmVnaW4tPm5hbWUsIG5h bWUpKQorIAkJCXJldHVybiAoIWJlZ2luLT52YWx1ZVswXSA/IE5VTEwgOiBiZWdpbi0+dmFsdWUp OworIAorIAkJYmVnaW4gPSBiZWdpbi0+bmV4dDsKK2RpZmYgLS1naXQgYS9zcmMvbWQ1LmMgYi9z cmMvbWQ1LmMKK2luZGV4IDQ0YTFkZTIuLjU2Y2Y1YzAgMTAwNjQ0CistLS0gYS9zcmMvbWQ1LmMK KysrKyBiL3NyYy9tZDUuYworQEAgLTU5LDcgKzU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQ1Q29u dGV4dCBNRDVfQ1RYOworIAorIC8qKgorICogQ29udmVydHMgYSBzdHJpbmcgdG8gTUQ1IGZvcm1h dC4KKy0qIAorKyoKKyAqIEBwYXJhbSBzdHIgU3RyaW5nIHRvIGNvbnZlcnQgdG8gTUQ1IGhhc2gK KyAqIEByZXR1cm4gTUQ1IGhhc2ggY29kZQorICoqLworQEAgLTgyLDcgKzgyLDcgQEAgY2hhciAq bWQ1KGNvbnN0IGNoYXIgKnN0cikKKyAKKyAJLy8gZmluYWxseSwgaGVyZSBpcyBhIGZpbmFsIHN0 cmluZyBlbmNyeXB0ZWQgaW4gaGV4IGZsb2F0IGZvcm1hdAorIAlNRDVGaW5hbChtZCwgJmNvbnRl eHQpOworLQkKKysKKyAJLy8gaGVyZSwgdGhlIGxvb3AgaXMgbGVzcyB0aGFuIDMyIGJlY2F1c2Ug YSBtZDUgc3RyaW5nIGNhbiBjb250ZW50CisgCS8vIGp1c3QgMzIgYnl0ZXMKKyAJZm9yKGkgPSAw OyBpIDwgMzI7IGkrKykgeworQEAgLTIwNiw3ICsyMDYsNyBAQCBNRDVVcGRhdGUoc3RydWN0IE1E NUNvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLCB1bnNpZ25lZCBsZW4pCisg fQorIAorIC8qCistICogRmluYWwgd3JhcHVwIC0gcGFkIHRvIDY0LWJ5dGUgYm91bmRhcnkgd2l0 aCB0aGUgYml0IHBhdHRlcm4gCisrICogRmluYWwgd3JhcHVwIC0gcGFkIHRvIDY0LWJ5dGUgYm91 bmRhcnkgd2l0aCB0aGUgYml0IHBhdHRlcm4KKyAgKiAxIDAqICg2NC1iaXQgY291bnQgb2YgYml0 cyBwcm9jZXNzZWQsIE1TQi1maXJzdCkKKyAgKi8KKyB2b2lkCitkaWZmIC0tZ2l0IGEvc3JjL3Nl c3Npb24uYyBiL3NyYy9zZXNzaW9uLmMKK2luZGV4IGE5ZDJlZjEuLjRkOTZjM2UgMTAwNjQ0Cist LS0gYS9zcmMvc2Vzc2lvbi5jCisrKysgYi9zcmMvc2Vzc2lvbi5jCitAQCAtMjYsNyArMjYsNyBA QAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICovCisgCistLyoqIAorKy8qKgorICogQGRlZmdyb3VwIGxpYmNnaV9zZXNzaW9uIFNlc3Np b24gSGFuZGxpbmcKKyAqICAgT25lIG9mIHRoZSBtb3N0IGRpZmVyZW5jaWFscyBvZiBMaWJDR0kg aXMgaXRzIHN1cHBvcnQgdG8gc2Vzc2lvbnMsIGEgbWVjaGFuaXNtIHRoYXQgcGVybWl0cworICog ICB0aGUgYXBwbGljYXRpb24gdG8ga2VlcCB2YXJpYWJsZXMgdHJvdWdoIHRoZSB1c2VyJ3Mgc2Vz c2lvbiwgd2hlbiBoZSBpcyB2aXNpdGluZyB5b3VyIHdlYnNpdGUuCitAQCAtMzUsOSArMzUsOSBA QAorICogPHRyPgorICogPHRkPgorICogCVNlc3Npb24gZnVuY3Rpb25zIGFyZSBlYXN5IHRvIHVz ZSBhbmQgdW5kZXJzdGFuZCwgYW5kIHByb2JhYmx5IHlvdSdsbCB3YW50IHRvIHRha2UgYSBjbG9z ZXIKKy0qIAlsb29rIGF0IDxpPmNnaV9zZXNzaW9uX3NhdmVfcGF0aCgpPC9pPiBhbmQgPGk+Y2dp X3Nlc3Npb25fY29va2llX25hbWUoKTwvaT4gZnVuY3Rpb25zLiBUaGVzZSBmdW5jdGlvbnMsIAor KyogCWxvb2sgYXQgPGk+Y2dpX3Nlc3Npb25fc2F2ZV9wYXRoKCk8L2k+IGFuZCA8aT5jZ2lfc2Vz c2lvbl9jb29raWVfbmFtZSgpPC9pPiBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucywKKyAqIAls ZXQgdGhlIHByb2dyYW1tZXIgdG8gc2V0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgc2Vzc2lvbiBmaWxl cyB3aWxsCistKiAJYmUgc2F2ZWQgaW4gdGhlIGhhcmQgZGlzayBhbmQgdGhlIGNvb2tpZSBuYW1l IHRvIHRoZSBzZXNzaW9uLCByZXNwZWN0aXZlbHkuIAorKyogCWJlIHNhdmVkIGluIHRoZSBoYXJk IGRpc2sgYW5kIHRoZSBjb29raWUgbmFtZSB0byB0aGUgc2Vzc2lvbiwgcmVzcGVjdGl2ZWx5Lgor ICogCTxicj48YnI+CisgKiAJQXMgdGhlIENHSSBpcyBydW5uaW5nIG9uIHRoZSB3ZWJzZXJ2ZXIg d2hpY2ggYSBjb21tb24gdXNlciwgaXQgaGF2ZSBmdWxsIGFjY2VzcyB0byBpdHMgcmVzcGVjdGl2 ZSBzZXNzaW9uCisgKiAJZmlsZS4gQnV0IHRoZSBtb3N0IGJpZyBwcm9ibGVtIGlzIHRoYXQgeW91 IG1heQorQEAgLTEwMiw3ICsxMDIsNyBAQCBjb25zdCBjaGFyICpzZXNzaW9uX2Vycm9yX21lc3Nh Z2VbXSA9IHsKKyAgCSJTZXNzaW9uIHZhcmlhYmxlIG5vdCByZWdpc3RlcmVkIiwKKyAgCSJGYWls ZWQgdG8gb3BlbiBzZXNzaW9uIGZpbGUgZm9yIG1hbmlwdWxhdGlvbiIKKyB9OworLSAKKysKKyAK KyAvLyBjZ2kuYworIGV4dGVybiBpbnQgaGVhZGVyc19pbml0aWFsaXplZDsKK0BAIC0xNDIsOSAr MTQyLDkgQEAgdm9pZCBzZXNzX2dlbmVyYXRlX2lkKCkKKyAJc2Vzc19mbmFtZSA9IChjaGFyICop bWFsbG9jKHNhdmVfcGF0aF9sZW4gKyBTRVNTX0lEX0xFTiArIDEpOworIAlpZiAoIXNlc3NfZm5h bWUpCisgCQlsaWJjZ2lfZXJyb3IoRV9NRU1PUlksICJGaWxlICVzLCBsaW5lICVzIiwgX19GSUxF X18sIF9fTElORV9fKTsKKy0JCQorLQlmb3IgKGkgPSAwOyBpIDwgU0VTU19JRF9MRU47IGkrKykg CistCQlzZXNzX2lkW2ldID0gdGFibGVbcmFuZCgpJWxlbl07CQorKworKwlmb3IgKGkgPSAwOyBp IDwgU0VTU19JRF9MRU47IGkrKykKKysJCXNlc3NfaWRbaV0gPSB0YWJsZVtyYW5kKCklbGVuXTsK KyAJc2Vzc19pZFtTRVNTX0lEX0xFTl0gPSAnXDAnOworIAorIAlzbnByaW50ZihzZXNzX2ZuYW1l LCAoU0VTU19JRF9MRU4gKyBzYXZlX3BhdGhfbGVuICsgMSksICIlcyVzJXMiLCBTRVNTSU9OX1NB VkVfUEFUSCwgU0VTU0lPTl9GSUxFX1BSRUZJWCwgc2Vzc19pZCk7CitAQCAtMTU1LDEwICsxNTUs MTAgQEAgaW50IHNlc3NfY3JlYXRlX2ZpbGUoKQorIHsKKyAJLy8gdGltZXZhbCwgZ2V0dGltZW9m ZGF5IGFyZSB1c2VkIHRvZ2hldGVyIHdpdGggc3JhbmQoKSBmdW5jdGlvbgorIAlzdHJ1Y3QgdGlt ZXZhbCB0djsKKy0JCisrCisgCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworIAlzcmFuZCh0di50 dl9zZWMgKiB0di50dl91c2VjICogMTAwMDAwKTsKKy0JCisrCisgCXNlc3NfZ2VuZXJhdGVfaWQo KTsKKyAJc2Vzc19maWxlID0gZm9wZW4oc2Vzc19mbmFtZSwgInciKTsKKyAJaWYgKCFzZXNzX2Zp bGUpIHsKK0BAIC0xNjgsMTYgKzE2OCwxNiBAQCBpbnQgc2Vzc19jcmVhdGVfZmlsZSgpCisgCisg CQlyZXR1cm4gMDsKKyAJfQorLQkKKysKKyAJLy8gQ2hhbmdlcyBmaWxlIHBlcm1pc3Npb24gdG8g MDYwMAorIAljaG1vZChzZXNzX2ZuYW1lLCBTX0lSVVNSfFNfSVdVU1IpOworIAlmY2xvc2Uoc2Vz c19maWxlKTsKKyAKKyAJcmV0dXJuIDE7CistfQkKKyt9CisgCistLyoqIAorLSogRGVzdHJveXMg dGhlIHNlc3Npb24uIAorKy8qKgorKyogRGVzdHJveXMgdGhlIHNlc3Npb24uCisgKiBEZXN0cm95 cyB0aGUgY3VycmVudCBvcGVuZWQgc2Vzc2lvbiwgaW5jbHVkaW5nIGFsbCBkYXRhLgorICogQWZ0 ZXIgc2Vzc2lvbl9kZXN0cm95KCkgd2FzIGNhbGxlZCwgaXMgbm90IG1vcmUKKyAqIHBvc3NpYmxl IHRvIHVzZSBzZXNzaW9uIGZ1bmN0aW9ucyBiZWZvcmUgYW4gYW5vdGhlcgorQEAgLTE5MywxMCAr MTkzLDEwIEBAIGludCBjZ2lfc2Vzc2lvbl9kZXN0cm95KCkKKyAJCXNlc3NfZmluaXRpYWxpemVk ID0gMDsKKyAJCXNsaXN0X2ZyZWUoJnNlc3NfbGlzdF9zdGFydCk7CisgCistCQkvLyBoaGhtbW0u LiAKKy0JCWlmIChoZWFkZXJzX2luaXRpYWxpemVkKSAKKysJCS8vIGhoaG1tbS4uCisrCQlpZiAo aGVhZGVyc19pbml0aWFsaXplZCkKKyAJCQlsaWJjZ2lfZXJyb3IoRV9XQVJOSU5HLCAiSGVhZGVy cyBhbHJlYXkgc2VudC4gc2Vzc2lvbl9kZXN0cm95KCkgY2FuJ3QgZnVsbHkgdW5yZWdpc3RlciB0 aGUgc2Vzc2lvbiIpOworLQkJZWxzZSAKKysJCWVsc2UKKyAJCQljZ2lfYWRkX2Nvb2tpZShTRVNT SU9OX0NPT0tJRV9OQU1FLCAiIiwgMCwgMCwgMCwgMCk7CisgCisgCQlyZXR1cm4gMTsKK0BAIC0y MTMsOSArMjEzLDkgQEAgaW50IGNnaV9zZXNzaW9uX2Rlc3Ryb3koKQorIGludCBzZXNzX2ZpbGVf cmV3cml0ZSgpCisgeworIAlmb3JtdmFycyAqZGF0YTsKKy0JCisrCisgCWNnaV9pbml0X2hlYWRl cnMoKTsKKy0JCisrCisgCS8vIFJld3JpdGVzIGFsbCBkYXRhIHRvIHNlc3Npb24gZmlsZQorIAlz ZXNzX2ZpbGUgPSBmb3BlbihzZXNzX2ZuYW1lLCAidyIpOworIAorQEAgLTIyNiw3ICsyMjYsNyBA QCBpbnQgc2Vzc19maWxlX3Jld3JpdGUoKQorIAorIAkJcmV0dXJuIDA7CisgCX0KKy0JCisrCisg CWRhdGEgPSBzZXNzX2xpc3Rfc3RhcnQ7CisgCisgCWlmIChkYXRhICE9IE5VTEwpIHsKK0BAIC0y NjAsMTAgKzI2MCwxMCBAQCBjaGFyICpjZ2lfc2Vzc2lvbl92YXIoY29uc3QgY2hhciAqdmFyX25h bWUpCisgCisgLyoqCisgKiBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjb29raWUgdGhhdCBMaWJD R0kgd2lsbCB1c2UgdG8gc3RvcmUgc2Vzc2lvbidzIElELgorLSogVGhpcyBmdW5jdGlvbiB3b3Jr cyBsaWtlIGNnaV9zZXNzaW9uX3NhdmVfcGF0aCgpLiAKKy0qIFRoaXMgZnVuY3Rpb25hbGl0eSBs ZXQgeW91IHRvIHVzZSAgZGlmZmVyZW50IG5hbWVzIGZvciBlYWNoIHNpdGUsIGJ1dCByZW1lbWJl ciwgeW91IGNhbm5vdCAKKy0qIHVzZSBtdWx0aXBsZSBzZXNzaW9uIGZvciB0aGUgc2FtZSBhcHBs aWNhdGlvbiB5ZXQuIAorLSogCisrKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgY2dpX3Nlc3Np b25fc2F2ZV9wYXRoKCkuCisrKiBUaGlzIGZ1bmN0aW9uYWxpdHkgbGV0IHlvdSB0byB1c2UgIGRp ZmZlcmVudCBuYW1lcyBmb3IgZWFjaCBzaXRlLCBidXQgcmVtZW1iZXIsIHlvdSBjYW5ub3QKKysq IHVzZSBtdWx0aXBsZSBzZXNzaW9uIGZvciB0aGUgc2FtZSBhcHBsaWNhdGlvbiB5ZXQuCisrKgor ICogQHBhcmFtIGNvb2tpZV9uYW1lIE5hbWUgb2YgdGhlIGNvb2tpZSB0byBjcmVhdGUKKyAqIEBz ZWUgY2dpX3Nlc3Npb25fc2F2ZV9wYXRoKCkKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gbXVzdCBi ZSBjYWxsZWQgYmVmb3JlIGNnaV9zZXNzaW9uX3N0YXJ0KCkKK0BAIC0yNzYsMjMgKzI3NiwyMyBA QCB2b2lkIGNnaV9zZXNzaW9uX2Nvb2tpZV9uYW1lKGNvbnN0IGNoYXIgKmNvb2tpZV9uYW1lKQor IC8qKgorICogRGVmaW5lcyB3aGVyZSBzZXNzaW9uIGNvbnRyb2wgZmlsZXMgd2lsbCBiZSBzYXZl ZC4KKyAqIElmIGluIHRoZSB5b3VyIENHSSB5b3UgZG9uJ3QgbWFrZSBhIGNhbGwgdG8gY2dpX3Nl c3Npb25fc2F2ZV9wYXRoKCksIExpYkNHSSB3aWxsCistKiB1c2UgdGhlIGRlZmF1bHQgdmFsdWUs IHdoaWNoIGlzICIvdG1wLyIuIFRvIHNlZSBob3cgdG8gbW9kaWZ5IHRoZSB2YWx1ZSwgc2VlIHRo ZSBmb2xsb3dpbmcgZXhhbXBsZS4gCisrKiB1c2UgdGhlIGRlZmF1bHQgdmFsdWUsIHdoaWNoIGlz ICIvdG1wLyIuIFRvIHNlZSBob3cgdG8gbW9kaWZ5IHRoZSB2YWx1ZSwgc2VlIHRoZSBmb2xsb3dp bmcgZXhhbXBsZS4KKyAqIDxicj5KdXN0IG5vdGUgeW91IG5lZWQgdG8gYWRkICcvJyBhdCB0aGUg ZW5kIG9mIHRoZSBkaXJlY3RvcnkgbmFtZQorICogXGNvZGUKKyAqIC8vIHlvdXJfY2dpLmMKKy0q IC8vIFNldCAic2Vzc2lvbl9maWxlcyIgZGlyZWN0b3J5IHVuZGVyIHlvdXIgQ0dJIGRpcmVjdG9y eSBhcyB0aGUgcGF0aCAKKysqIC8vIFNldCAic2Vzc2lvbl9maWxlcyIgZGlyZWN0b3J5IHVuZGVy IHlvdXIgQ0dJIGRpcmVjdG9yeSBhcyB0aGUgcGF0aAorICogLy8gd2hpY2ggTGliQ0dJIHdpbGwg dXNlIHRvIHN0b3JlIHNlc3Npb24gZmlsZXMuCistKiAKKysqCisgKiBjZ2lfc2Vzc2lvbl9zYXZl X3BhdGgoInNlc3Npb25fZmlsZXMvIik7CisgKiAgXGVuZGNvZGUKKy0qICAKKy0qICBOb3RlIHRo YXQgdXNpbmcgdGhpcyBmb3JtLCBMaWJDR0kgd2lsbCBzZWFyY2ggZm9yICJzZXNzaW9uX2ZpbGVz IiBkaXJlY3RvcnkgdXNpbmcgcmVsYXRpdmUgcGF0aCAKKysqCisrKiAgTm90ZSB0aGF0IHVzaW5n IHRoaXMgZm9ybSwgTGliQ0dJIHdpbGwgc2VhcmNoIGZvciAic2Vzc2lvbl9maWxlcyIgZGlyZWN0 b3J5IHVzaW5nIHJlbGF0aXZlIHBhdGgKKyAqICB0byB5b3VyIGNnaSBhcHBsaWNhdGlvbi4gRm9y IGV4YW1wbGUsIGlmIHlvdXIgQ0dJIHNjcmlwdCBpcyBsb2NhdGVkIGF0CisgKiAgL3Vzci9sb2Nh bC9odHRwZC93ZWIveW91cl9uYW1lL2NnaS1iaW4vIGRpcmVjdG9yeSwgYW5kIHlvdSB1c2UgdGhl IGFib3ZlIGRlY2xhcmF0aW9uLCB0aGUgZmlsZXMgZm9yIHRoZSBzZXNzaW9uIHdpbGwgYmUKKy0q IHN0b3JlZCBhdCAgL3Vzci9sb2NhbC9odHRwZC93ZWIveW91cl9uYW1lL2NnaS1iaW4vc2Vzc2lv bl9maWxlcyBkaXJlY3RvcnkuIAorKyogc3RvcmVkIGF0ICAvdXNyL2xvY2FsL2h0dHBkL3dlYi95 b3VyX25hbWUvY2dpLWJpbi9zZXNzaW9uX2ZpbGVzIGRpcmVjdG9yeS4KKyAqIFJlc3VtaW5nLCB0 aGUgcGF0aCBpcyByZWxhdGl2ZSB0byB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHJlc2lkZXMuIDxi cj48YnI+QW5kIHJlbWVtYmVyLCBMaWJDR0kgXGIgZG9lcyBcYiBub3QKKy0qIGNyZWF0ZSB0aGUg ZGlyZWN0b3J5IGZvciB5b3UuIAorLSogCisrKiBjcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IgeW91 LgorKyoKKyAqIEBwYXJhbSBwYXRoIFBhdGgsIHJlbGF0aXZlIG9yIGFic29sdXRlCisgKiBAc2Vl IGNnaV9zZXNzaW9uX2Nvb2tpZV9uYW1lCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIG11c3QgYmUg Y2FsbGVkIGJlZm9yZSBjZ2lfc2Vzc2lvbl9zdGFydCgpCitAQCAtMzEzLDEyICszMTMsMTIgQEAg dm9pZCBjZ2lfc2Vzc2lvbl9zYXZlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKKyBpbnQgY2dpX3Nl c3Npb25fcmVnaXN0ZXJfdmFyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQor IHsKKyAJZm9ybXZhcnMgKmRhdGE7CistCQorKworIAlpZiAoIXNlc3NfaW5pdGlhbGl6ZWQpIHsK KyAJCXNlc3Npb25fbGFzdGVycm9yID0gU0VTU19OT1RfSU5JVElBTElaRUQ7CisgCisgCQlsaWJj Z2lfZXJyb3IoRV9XQVJOSU5HLCBzZXNzaW9uX2Vycm9yX21lc3NhZ2Vbc2Vzc2lvbl9sYXN0ZXJy b3JdKTsKKy0JCQorKworIAkJcmV0dXJuIDA7CisgCX0KKyAKK0BAIC0zMjgsMTQgKzMyOCwxNCBA QCBpbnQgY2dpX3Nlc3Npb25fcmVnaXN0ZXJfdmFyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKnZhbHVlKQorIAkJCXNlc3Npb25fbGFzdGVycm9yID0gU0VTU19PUEVOX0ZJTEU7CisgCisg CQkJbGliY2dpX2Vycm9yKEVfV0FSTklORywgc2Vzc2lvbl9lcnJvcl9tZXNzYWdlW3Nlc3Npb25f bGFzdGVycm9yXSk7CistCQkJCisrCisgCQkJcmV0dXJuIDA7CisgCQl9CistCQkKKysKKyAJCWRh dGEgPSAoZm9ybXZhcnMgKiltYWxsb2Moc2l6ZW9mKGZvcm12YXJzKSk7CisgCQlpZiAoIWRhdGEp CisgCQkJbGliY2dpX2Vycm9yKEVfTUVNT1JZLCAiJXMsIGxpbmUgJXMiLCBfX0ZJTEVfXywgX19M SU5FX18pOworLQkJCisrCisgCQlkYXRhLT5uYW1lID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKG5h bWUpICsgMSk7CisgCQlpZiAoIWRhdGEtPm5hbWUpCisgCQkJbGliY2dpX2Vycm9yKEVfTUVNT1JZ LCAiJXMsIGxpbmUgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18pOworQEAgLTM1MCwxMCArMzUwLDEw IEBAIGludCBjZ2lfc2Vzc2lvbl9yZWdpc3Rlcl92YXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqdmFsdWUpCisgCisgCQlzdHJuY3B5KGRhdGEtPm5hbWUsIG5hbWUsIHN0cmxlbihuYW1l KSk7CisgCQlkYXRhLT5uYW1lW3N0cmxlbihuYW1lKV0gPSAnXDAnOworLQkJCisrCisgCQlzdHJu Y3B5KGRhdGEtPnZhbHVlLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7CisgCQlkYXRhLT52YWx1ZVtz dHJsZW4odmFsdWUpXSA9ICdcMCc7CistCQkKKysKKyAJCWlmICghc2Vzc19saXN0X2xhc3QpCisg CQkJZnByaW50ZihzZXNzX2ZpbGUsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKyAJCWVsc2UKK0BA IC0zODEsMTIgKzM4MSwxMiBAQCBpbnQgY2dpX3Nlc3Npb25fYWx0ZXJfdmFyKGNvbnN0IGNoYXIg Km5hbWUsIGNvbnN0IGNoYXIgKm5ld192YWx1ZSkKKyB7CisgCXJlZ2lzdGVyIGZvcm12YXJzICpk YXRhOworIAl1bnNpZ25lZCBpbnQgdmFsdWVfbGVuOworLQkKKysKKyAJZGF0YSA9IHNlc3NfbGlz dF9zdGFydDsKKyAJd2hpbGUgKGRhdGEpIHsKKyAJCWlmICghc3RyY21wKGRhdGEtPm5hbWUsIG5h bWUpKSB7CisgCQkJdmFsdWVfbGVuID0gc3RybGVuKG5ld192YWx1ZSkgKyAxOworLQkJCQorKwor IAkJCWlmICh2YWx1ZV9sZW4gPiBzdHJsZW4oZGF0YS0+dmFsdWUpKSB7CisgCQkJCWRhdGEtPnZh bHVlID0gcmVhbGxvYyhkYXRhLT52YWx1ZSwgdmFsdWVfbGVuKzEpOworIAkJCQlpZiAoIWRhdGEt PnZhbHVlKQorQEAgLTM5Niw3ICszOTYsNyBAQCBpbnQgY2dpX3Nlc3Npb25fYWx0ZXJfdmFyKGNv bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm5ld192YWx1ZSkKKyAKKyAJCQlzdHJuY3B5KGRh dGEtPnZhbHVlLCBuZXdfdmFsdWUsIHZhbHVlX2xlbik7CisgCQkJZGF0YS0+dmFsdWVbdmFsdWVf bGVuXSA9ICdcMCc7CistCQkJCisrCisgCQkJc2Vzc19maWxlX3Jld3JpdGUoKTsKKyAKKyAJCQly ZXR1cm4gMTsKK0BAIC00MDQsOSArNDA0LDkgQEAgaW50IGNnaV9zZXNzaW9uX2FsdGVyX3Zhcihj b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpuZXdfdmFsdWUpCisgCisgCQlkYXRhID0gZGF0 YS0+bmV4dDsKKyAJfQorLQkKKysKKyAJc2Vzc2lvbl9sYXN0ZXJyb3IgPSBTRVNTX1ZBUl9OT1Rf UkVHSVNURVJFRDsKKy0JCisrCisgCXJldHVybiAwOworIH0KKyAKK0BAIC00MzcsNyArNDM3LDcg QEAgaW50IGNnaV9zZXNzaW9uX3VucmVnaXN0ZXJfdmFyKGNoYXIgKm5hbWUpCisgCQlzZXNzaW9u X2xhc3RlcnJvciA9IFNFU1NfTk9UX0lOSVRJQUxJWkVEOworIAorIAkJbGliY2dpX2Vycm9yKEVf V0FSTklORywgc2Vzc2lvbl9lcnJvcl9tZXNzYWdlW3Nlc3Npb25fbGFzdGVycm9yXSk7CistCQkK KysKKyAJCXJldHVybiAwOworIAl9CisgCitAQCAtNDQ5LDcgKzQ0OSw3IEBAIGludCBjZ2lfc2Vz c2lvbl91bnJlZ2lzdGVyX3ZhcihjaGFyICpuYW1lKQorIAkJcmV0dXJuIDA7CisgCX0KKyAKKy0J aWYgKCFzZXNzX2ZpbGVfcmV3cml0ZSgpKSAKKysJaWYgKCFzZXNzX2ZpbGVfcmV3cml0ZSgpKQor IAkJcmV0dXJuIDA7CisgCisgCXJldHVybiAxOworQEAgLTQ1Nyw3ICs0NTcsNyBAQCBpbnQgY2dp X3Nlc3Npb25fdW5yZWdpc3Rlcl92YXIoY2hhciAqbmFtZSkKKyAKKyAvKioKKyAqIFN0YXJ0cyBh IG5ldyBzZXNzaW9uLgorLSogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc3RhcnRp bmcgYW5kIGNyZWF0aW5nIGEgbmV3IAorKyogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBm b3Igc3RhcnRpbmcgYW5kIGNyZWF0aW5nIGEgbmV3CisgKiBzZXNzaW9uLiBJdCBtdXN0IGJlIGNh bGxlZCBiZWZvcmUgYW55IG90aGVyIHNlc3Npb24gZnVuY3Rpb24sCisgKiBhbmQgZXZlcnkgdGlt ZSBiZWZvcmUgYW55IEhUTUwgaGVhZGVyIGhhcyBzZW50LgorICogQHNlZSBzZXNzaW9uX2Rlc3Ry b3koKQorQEAgLTQ3MiwxMyArNDcyLDEzIEBAIGludCBjZ2lfc2Vzc2lvbl9zdGFydCgpCisgCQlz ZXNzaW9uX2xhc3RlcnJvciA9IFNFU1NfU1RBUlRFRDsKKyAKKyAJCWxpYmNnaV9lcnJvcihFX1dB Uk5JTkcsIHNlc3Npb25fZXJyb3JfbWVzc2FnZVtzZXNzaW9uX2xhc3RlcnJvcl0pOworLQkJCisr CisgCQlyZXR1cm4gMDsKKyAJfQorLQkKKysKKyAJaWYgKGhlYWRlcnNfaW5pdGlhbGl6ZWQpIHsK KyAJCXNlc3Npb25fbGFzdGVycm9yID0gU0VTU19IRUFERVJTX1NFTlQ7CistCQkKKysKKyAJCWxp YmNnaV9lcnJvcihFX1dBUk5JTkcsIHNlc3Npb25fZXJyb3JfbWVzc2FnZVtzZXNzaW9uX2xhc3Rl cnJvcl0pOworIAorIAkJcmV0dXJuIDA7CitAQCAtNDg3LDcgKzQ4Nyw3IEBAIGludCBjZ2lfc2Vz c2lvbl9zdGFydCgpCisgCS8vIEdldCB0aGUgc2Vzc2lvbiBJRAorIAlzaWQgPSBjZ2lfY29va2ll X3ZhbHVlKFNFU1NJT05fQ09PS0lFX05BTUUpOworIAorLQkvLyBJZiB0aGVyZSBpc24ndCBhIHNl c3Npb24gSUQsIHdlIG5lZWQgdG8gY3JlYXRlIG9uZSAKKysJLy8gSWYgdGhlcmUgaXNuJ3QgYSBz ZXNzaW9uIElELCB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmUKKyAJaWYgKHNpZCA9PSBOVUxMKSB7Cisg CQlpZiAoc2Vzc19jcmVhdGVfZmlsZSgpKSB7CisgCQkJY2dpX2FkZF9jb29raWUoU0VTU0lPTl9D T09LSUVfTkFNRSwgc2Vzc19pZCwgMCwgMCwgMCwgMCk7CitAQCAtNTAyLDE3ICs1MDIsMTcgQEAg aW50IGNnaV9zZXNzaW9uX3N0YXJ0KCkKKyAJLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGV4aXN0cwor IAllbHNlIHsKKyAJCXNhdmVfcGF0aF9sZW4gPSBzdHJsZW4oU0VTU0lPTl9TQVZFX1BBVEgpICsg c3RybGVuKFNFU1NJT05fRklMRV9QUkVGSVgpOworLQkJCisrCisgCQlzZXNzX2ZuYW1lID0gKGNo YXIgKiltYWxsb2Moc2F2ZV9wYXRoX2xlbiArIFNFU1NfSURfTEVOICsgMSk7CisgCQlpZiAoIXNl c3NfZm5hbWUpCisgCQkJbGliY2dpX2Vycm9yKEVfTUVNT1JZLCAiRmlsZSAlcywgbGluZSAlcyIs IF9fRklMRV9fLCBfX0xJTkVfXyk7CistCQorKworIAkJc25wcmludGYoc2Vzc19mbmFtZSwgKFNF U1NfSURfTEVOICsgc2F2ZV9wYXRoX2xlbiArIDEpLCAiJXMlcyVzIiwgU0VTU0lPTl9TQVZFX1BB VEgsIFNFU1NJT05fRklMRV9QUkVGSVgsIHNpZCk7CisgCQlzZXNzX2ZuYW1lW1NFU1NfSURfTEVO ICsgc2F2ZV9wYXRoX2xlbl0gPSAnXDAnOworLQkJCistCQllcnJubyA9IDA7CQkKKysKKysJCWVy cm5vID0gMDsKKyAJCWZwID0gZm9wZW4oc2Vzc19mbmFtZSwgInIiKTsKKy0JCWlmIChlcnJubyA9 PSBFTk9FTlQpIHsgCisrCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisgCQkJLy8gVGhlIGZpbGUg ZG9lc24ndCBleGlzdHMuIENyZWF0ZSBhIG5ldyBzZXNzaW9uCisgCQkJaWYgKHNlc3NfY3JlYXRl X2ZpbGUoKSkgeworIAkJCQljZ2lfYWRkX2Nvb2tpZShTRVNTSU9OX0NPT0tJRV9OQU1FLCBzZXNz X2lkLCAwLCAwLCAwLCAwKTsKK0BAIC01MzIsMTUgKzUzMiwxNSBAQCBpbnQgY2dpX3Nlc3Npb25f c3RhcnQoKQorIAlzZXNzX2lkW1NFU1NfSURfTEVOXSA9ICdcMCc7CisgCisgCS8vIE5vdyB3ZSBu ZWVkIHRvIHJlYWQgYWxsIHRoZSBmaWxlIGNvbnRlbnRzCistCS8vIFRoaXMgaXMgYSB0ZW1wb3Jh cnkgc29sdXRpb24sIEknbGwgdHJ5IHRvIAorKwkvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0 aW9uLCBJJ2xsIHRyeSB0bworIAkvLyBtYWtlIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uCisgCXN0 YXQoc2Vzc19mbmFtZSwgJnN0KTsKKyAJYnVmID0gKGNoYXIgKiltYWxsb2Moc3Quc3Rfc2l6ZSAr IDIpOworIAlpZiAoIWJ1ZikKKyAJCWxpYmNnaV9lcnJvcihFX01FTU9SWSwgIkZpbGUgJXMsIGxp bmUgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18pOworLQkJCisrCisgCWZnZXRzKGJ1Ziwgc3Quc3Rf c2l6ZSsxLCBmcCk7CistCQkKKysKKyAJaWYgKGJ1ZiAhPSBOVUxMICYmIHN0cmxlbihidWYpID4g MSkKKyAJCXByb2Nlc3NfZGF0YShidWYsICZzZXNzX2xpc3Rfc3RhcnQsICZzZXNzX2xpc3RfbGFz dCwgJz0nLCAnOycpOworIAorQEAgLTU1MSw2ICs1NTEsNiBAQCBpbnQgY2dpX3Nlc3Npb25fc3Rh cnQoKQorIAlyZXR1cm4gMTsKKyB9CisgCistLyoqIAorKy8qKgorICogQH0KKyAqLworZGlmZiAt LWdpdCBhL3NyYy9zdHJpbmcuYyBiL3NyYy9zdHJpbmcuYworaW5kZXggM2RjNDM3Zi4uZTJiYmE5 NyAxMDA2NDQKKy0tLSBhL3NyYy9zdHJpbmcuYworKysrIGIvc3JjL3N0cmluZy5jCitAQCAtMzEs NyArMzEsNyBAQAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIAkJCQkJU1RSSU5HIEdST1VQCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLS8qKiAKKysvKioKKyAq IEBkZWZncm91cCBsaWJjZ2lfc3RyaW5nIFN0cmluZ3MKKyAqIEdlbmVyYWwgc3RyaW5nIG1hbmlw dWxhdGlvbiBhbmQgdXRpbGl0aWVzIGZ1bmN0aW9ucworICogQHsKK0BAIC00MCwxMiArNDAsMTIg QEAKKyAvKioKKyAqIFNhbWUgdG8gYWRkc2xhc2hlcygpLCBleGNlcHQgdGhhdCB0aGlzIG9uZSBv bmx5IGRvIHRoZSBhY3Rpb24gd2hpbGUgJ24nIGlzIGdyZWF0IHRoYW4gMC4KKyAqIEBwYXJhbSBz IFN0cmluZyB0byBwYXJzZQorLSogQHBhcmFtIG4gTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gd29y ayB3aXRoLiAKKysqIEBwYXJhbSBuIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHdvcmsgd2l0aC4K KyAqIEBzZWUgYWRkc2xhc2hlcygpCisgKiBcY29kZQorICogY2hhciAqbmFtZSA9ICJNeSB0ZXN0 IHN0cmluZyBpcyBjYWxsZWQgXCJmb29iYXJcIiI7CisgKiBwdXRzKG5hbWUpOyAvLyB3aWxsIGRp c3BsYXkgTXkgdGVzdCBzdHJpbmcgaXMgY2FsbGVkICJmb29iYXIiCistKiAKKysqCisgKiBuYW1l ID0gYWRkbnNsYXNoZXMobmFtZSwgMzEpOworICogcHV0cyhuYW1lKTsgLy8gd2lsbCBkaXNwbGF5 IE15IHRlc3Qgc3RyaW5nIGlzIGNhbGxlZCBcImZvb2JhciIKKyAqIFxlbmRjb2RlCitAQCAtODEs NyArODEsNyBAQCBjaGFyICphZGRuc2xhc2hlcyhjaGFyICpzLCBpbnQgbikKKyAJcmV0dXJuIHRt cDsKKyB9CisgCistLyoqIAorKy8qKgorICogQWRkIHNsYXNoZXMgdG8gYSBzdHJpbmcgd2hlbiBu ZWNlc3NhcnkuCisgKiBBZGRzIGEgJ1wnIGluIGV2ZXJ5IHF1b3RlICggIiApLCBhcG9zdHJvcGhl ICggJyApIG9yICBiYWNrc2xhc2ggKCBcICkKKyAqIEl0J3MgdXNlZnVsIHdoZW4gd29ya2luZyB3 aXRoIGRhdGFiYXNlcywgZm9yIGV4YW1wbGUsIGJlY2F1c2UKK0BAIC05Myw3ICs5Myw3IEBAIGNo YXIgKmFkZG5zbGFzaGVzKGNoYXIgKnMsIGludCBuKQorICogXGNvZGUKKyAqIGNoYXIgKm5hbWUg PSAiTXkgdGVzdCBzdHJpbmcgaXMgY2FsbGVkIFwiZm9vYmFyXCIiOworICogcHV0cyhuYW1lKTsg Ly8gd2lsbCBkaXNwbGF5IE15IHRlc3Qgc3RyaW5nIGlzIGNhbGxlZCAiZm9vYmFyIgorLSogCisr KgorICogbmFtZSA9IGFkZHNsYXNoZXMobmFtZSk7CisgKiBwdXRzKG5hbWUpOyAvLyB3aWxsIGRp c3BsYXkgTXkgdGVzdCBzdHJpbmcgaXMgY2FsbGVkIFwiZm9vYmFyXCIKKyAqIFxlbmRjb2RlCitA QCAtMTMxLDcgKzEzMSw3IEBAIGNoYXIgKnN0cmlwbnNsYXNoZXMoY2hhciAqcywgaW50IG4pCisg CQlyZXR1cm4gTlVMTDsKKyAKKyAJd2hpbGUgKCpzKSB7CistCQlpZiAoKG4tLSA+IDApICYmICgq cyA9PSAnXFwnKSkgCisrCQlpZiAoKG4tLSA+IDApICYmICgqcyA9PSAnXFwnKSkKKyAJCQlzKys7 CisgCQl0bXBbaisrXSA9ICpzKys7CisgCX0KK0BAIC0yMzMsMTAgKzIzMywxMCBAQCB2b2lkIHRy aW0oY2hhciAqc3RyKQorICogQ29weSBwYXJ0IG9mIGEgc3RyaW5nLgorICogQ29weSAgY291bnQg Y2hhcmFjdGVycyBmcm9tIHNyYywgc3RhcnRpbmcgZnJvbSBzdGFydAorICogQHBhcmFtIHNyYyBT dHJpbmcgdG8gY29weSBmcm9tCistKiBAcGFyYW0gc3RhcnQgSW5pdGlhbCBvZmZzZXQgCisrKiBA cGFyYW0gc3RhcnQgSW5pdGlhbCBvZmZzZXQKKyAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgY2hh cnMgdG8gY29weQorICogQHJldHVybiBUaGUgbmV3IHN0cmluZworLSogCisrKgorICogXGNvZGUK KyAqIGNoYXIgKnBhcnQsICpzdHIgPSAiVGVzdCBvbmUsIHRlc3QgdHdvIjsKKyAqIHBhcnQgPSBz dWJzdHIoc3RyLCAxLCA1KTsKK0BAIC0yNjUsMTIgKzI2NSwxMiBAQCBjaGFyICpzdWJzdHIoY2hh ciAqc3JjLCBjb25zdCBpbnQgc3RhcnQsIGNvbnN0IGludCBjb3VudCkKKyAqICBhbmQgc3Rvcmlu ZyB0aGUgdG90YWwgb2YgcGllY2VzIGluIHRvdGFsCisgKiBAcGFyYW0gc3JjIFN0cmluZyB0byBw YXJzZQorICogQHBhcmFtIHRva2VuIENoYXJhY3RlciBkZWxpbWl0ZXIgdG8gc2VhcmNoLgorLSog QHBhcmFtIHRvdGFsIEFuIGludGVnZXIgdmFyaWFibGUgcGFzc2VkIGFzIHJlZmVyZW5jZSwgd2hp Y2ggc3RvcmVzIHRoZSB0b3RhbCBvZiAKKysqIEBwYXJhbSB0b3RhbCBBbiBpbnRlZ2VyIHZhcmlh YmxlIHBhc3NlZCBhcyByZWZlcmVuY2UsIHdoaWNoIHN0b3JlcyB0aGUgdG90YWwgb2YKKyAqIGl0 ZW5zIG9mIHRoZSBhcnJheQorICogQHJldHVybiBUaGUgYXJyYXksIHdoZXJlIGVhY2ggaXRlbSBp cyBvbmUgc2VwYXJldGVkIGJ5IHRva2VuCistKiAKKysqCisgKiBcY29kZQorLSogIAorKyoKKyAq ICBjaGFyICoqcGllY2VzOworICogIGNoYXIgKm5hbWUgPSAiVGhpcyxpcyxhLHN0cmluZyxvZix0 ZXN0IjsKKyAqICBpbnQgdG90YWwsIGk7CitAQCAtMjgwLDE0ICsyODAsMTQgQEAgY2hhciAqc3Vi c3RyKGNoYXIgKnNyYywgY29uc3QgaW50IHN0YXJ0LCBjb25zdCBpbnQgY291bnQpCisgKiBcZW5k Y29kZQorICoqLworIGNoYXIgKipleHBsb2RlKGNoYXIgKnNyYywgY29uc3QgY2hhciAqdG9rZW4s IGludCAqdG90YWwpCistewkKKyt7CisgCWNoYXIgKipzdHI7CisgCXJlZ2lzdGVyIGludCBpLCBq LCBjb3VudCwgaXRlbSwgc3RhcnQ7CisgCWludCBsZW47CisgCisgCWlmICghc3JjIHx8ICF0b2tl bikgeworIAkJKnRvdGFsID0gMDsKKy0JCQorKworIAkJcmV0dXJuIE5VTEw7CisgCX0KKyAKK0BA IC0zNDgsNyArMzQ4LDcgQEAgY2hhciAqKmV4cGxvZGUoY2hhciAqc3JjLCBjb25zdCBjaGFyICp0 b2tlbiwgaW50ICp0b3RhbCkKKyAKKyAvKioKKyAqIFJlcGxhY2UgY2hhcmFjdGVyZXMgaW4gYSBz dHJpbmcsIGJ1dCBub3QgbW9yZSB0aGFuICduJy4KKy0qICBSZXBsYWNlIGFsbCBvY2NvdXJlbmNl cyBvZiAqZGVsaW0gb24gKnNyYyB3aXRoIGNoYXJhY3RlcmVzIHBvaW50ZWQgYnkgKndpdGgsIAor KyogIFJlcGxhY2UgYWxsIG9jY291cmVuY2VzIG9mICpkZWxpbSBvbiAqc3JjIHdpdGggY2hhcmFj dGVyZXMgcG9pbnRlZCBieSAqd2l0aCwKKyAqICBzdG9wcGluZyBhZnRlciAnbicgY2hhci4KKyAq ICBAcGFyYW0gKnNyYyBTdHJpbmcgdG8gcGFyc2UKKyAqICBAcGFyYW0gKmRlbGltIENoYXJhY3Rl ciB0byBzZWFyY2ggdGhhdCB3aWxsIGJlIHJlcGxhY2VkCitAQCAtMzU2LDcgKzM1Niw3IEBAIGNo YXIgKipleHBsb2RlKGNoYXIgKnNyYywgY29uc3QgY2hhciAqdG9rZW4sIGludCAqdG90YWwpCisg KiAgQHBhcmFtIG4gTWF4aW11bSBudW1iZXIgb2YgY2hhcnMgdG8gcGFyc2UKKyAqICBAcmV0dXJu IFRoZSBuZXcgc3RyaW5nCisgKiAgQHNlZSBzdHJfcmVwbGFjZQorLSogIAorKyoKKyAqICBcY29k ZQorICogIGNoYXIgKmxpbnV4ID0gIkxpbnV4IEMiOworICogIGxpbnV4ID0gc3RyX25yZXBsYWNl KGxpbnV4LCAiQyIsICJDb29sIiwgc3RybGVuKGxpbnV4KSk7CitAQCAtNDE0LDcgKzQxNCw3IEBA IGNoYXIgKnN0cl9ucmVwbGFjZShjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlbGltLCBjb25zdCBj aGFyICp3aXRoLCBpbnQgbikKKyAvKioKKyAqIFJlcGxhY2UgY2hhcmFjdGVyZXMgaW4gYSBzdHJp bmcuCisgKiAgUmVwbGFjZSBhbGwgb2Njb3VyZW5jZXMgb2YgKmRlbGltIG9uICpzcmMgd2l0aCBj aGFyYWN0ZXJlcyBwb2ludGVkIGJ5ICp3aXRoLgorLSogIFRoZSBwcm9ibGVtIHdpdGggdGhlIGZv bG93aW5nIGNvZGUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb25seSBzZWFyY2hlcyBmb3IgdGhlIAor KyogIFRoZSBwcm9ibGVtIHdpdGggdGhlIGZvbG93aW5nIGNvZGUgaXMgdGhhdCB0aGUgZnVuY3Rp b24gb25seSBzZWFyY2hlcyBmb3IgdGhlCisgKiAgZmlyc3QgY2FyYWN0ZXIgb2YgKmRlbGltLCBp bmdvcmluZyB0aGUgcmVzdC4gT3RoZXIgcHJvYmxlbSBpcyBzcGVlZCByZWxhY2lvbmVkOgorICog IG5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gZXZlciBjb21wYXJlIHRoZSBsZW5ndGggb2YgKndpdGgg dG8gZG8gdGhlIGNvcnJlY3QgYWN0aW9uLgorICogIEBwYXJhbSBzcmMgU3RyaW5nIHRvIHBhcnNl CitAQCAtNDIyLDcgKzQyMiw3IEBAIGNoYXIgKnN0cl9ucmVwbGFjZShjaGFyICpzcmMsIGNvbnN0 IGNoYXIgKmRlbGltLCBjb25zdCBjaGFyICp3aXRoLCBpbnQgbikKKyAqICBAcGFyYW0gd2l0aCBT dHJpbmcgdG8gcmVwbGFjZSB3aXRoCisgKiAgQHJldHVybiBUaGUgbmV3IHN0cmluZworICogIEBz ZWUgc3RyX25yZXBsYWNlCistKiAgCisrKgorICogIFxjb2RlCisgKiAgY2hhciAqbGludXggPSAi TGludXggQyI7CisgKiAgbGludXggPSBzdHJfcmVwbGFjZShsaW51eCwgIkMiLCAiQ29vbCIpOwor QEAgLTQ1NCwxNCArNDU0LDE0IEBAIGNoYXIgKnJlcGxhY2UoY2hhciAqc3RyLCBjb25zdCBjaGFy ICpkZWxpbSwgY29uc3QgY2hhciAqd2l0aCkKKyBpbnQgc3RybnBvcyhjaGFyICpzLCBjaGFyICpj aCwgdW5zaWduZWQgaW50IGNvdW50KQorIHsKKyAJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHBvcyA9 IDAsIGk7CistCQorKworIAlmb3IgKGkgPSAwOyBpIDw9IGNvdW50ICYmICpzOyBpKyspIHsKKyAJ CWlmICgqcysrID09ICpjaCkKKyAJCQlyZXR1cm4gcG9zOworLQkJCisrCisgCQlwb3MrKzsKKyAJ fQorLQkKKysKKyAJcmV0dXJuIC0xOworIH0KKyAKK0BAIC00ODUsMTMgKzQ4NSwxMyBAQCBpbnQg c3RycG9zKGNoYXIgKnMsIGNoYXIgKmNoKQorICogIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgY2hh cmFjdGVyZXMgdG8gZGVsZXRlCisgKiAgQHJldHVybiBUaGUgbmV3IHN0cmluZworICogIEBzZWUg c3RybmRlbCgpCistKiAKKysqCisgKiAgXGNvZGUKKyAqICAqdHh0ID0gIlNvbWUgdGV4dCB0byB0 ZXN0IGFueXRoaW5nIjsKKyAqICBwdXRzKHR4dCk7CisgKiAgdHh0ID0gc3RyZGVsKHR4dCwgMiwg OCk7CisgKiAgcHV0cyh0eHQpOworLSogXGVuZGNvZGUgICAKKysqIFxlbmRjb2RlCisgKiovCisg Y2hhciAqc3RyZGVsKGNoYXIgKnMsIGludCBzdGFydCwgaW50IGNvdW50KQorIHsKK0BAIC01MDgs NyArNTA4LDcgQEAgY2hhciAqc3RyZGVsKGNoYXIgKnMsIGludCBzdGFydCwgaW50IGNvdW50KQor IAkJbGliY2dpX2Vycm9yKEVfTUVNT1JZLCAiJXMsIGxpbmUgJXMiLCBfX0ZJTEVfXywgX19MSU5F X18pOworIAorIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKy0JCWlmICgoaSA+PSBzdGFy dCkgJiYgKGkgPCAoc3RhcnQrY291bnQpKSkgCisrCQlpZiAoKGkgPj0gc3RhcnQpICYmIChpIDwg KHN0YXJ0K2NvdW50KSkpCisgCQkJcysrOworIAkJZWxzZQorIAkJCXRtcFtjb250YWRvcisrXSA9 ICpzKys7CitAQCAtNTM2LDM3ICs1MzYsMzcgQEAgY2hhciAqcmVjdmxpbmUoRklMRSAqcykKKyAJ c2l6ZV90IHNpeiA9IDA7CisgCisgCWZvciAoOyAoY2ggPSBmZ2V0YyhzKSkgIT0gRU9GOyBpKysp IHsKKy0JCWlmIChpID09IHNpeikgCisrCQlpZiAoaSA9PSBzaXopCisgCQkJYnVmID0gcmVhbGxv YyhidWYsIHNpeiArPSBCVUZTSVopOworLQkJCQorKworIAkJYnVmW2ldID0gY2g7CistCQkKKysK KyAJCWlmIChidWZbaV0gPT0gJ1xuJykgeworIAkJCWJ1ZltpXSA9ICdcMCc7CistCQkJCistCQkJ aWYgKGkgPiAwICYmIGJ1ZltpLTFdID09ICdccicpIAorKworKwkJCWlmIChpID4gMCAmJiBidWZb aS0xXSA9PSAnXHInKQorIAkJCQlidWZbaS0xXSA9ICdcMCc7CistCQkJCQorKworIAkJCXJldHVy biBidWY7CisgCQl9CisgCX0KKy0JCisrCisgCWlmIChpID4gMCkgeworIAkJaWYgKGkgPT0gc2l6 KSBidWYgPSByZWFsbG9jKGJ1Ziwgc2l6ICsgMSk7CisgCQkJYnVmW2ldID0gJ1wwJzsKKy0JCQkK KysKKyAJCXJldHVybiBidWY7CisgCX0KKy0JCisrCisgCXJldHVybiBOVUxMOworIH0KKyAKKyAv KioKKyAqIE1ha2VzIGEgc3RyaW5nLgorICogV29ya3MgbGlrZSBwcmludGYoKSwgd2l0aCB0aGUg ZGlmZmVyZW5jZQorLSogdGhhdCBpdCByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdGhlIAorKyog dGhhdCBpdCByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdGhlCisgKiBjb25jYXRlbmF0aW9uIG9m IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIHBhcmFtZXRlci4KKy0qIAorKyoKKyAqIEBwYXJhbSAqcyBJ bmljaWFsIFN0cmluZyBhbmQgb3B0aW9uYWxseSBmb3JtYXRhdGlvbiBwYXJhbWV0ZXJzICgganVz dCAlcyBpcyBhbGxvd2VkICkKKyAqIEByZXR1cm4gVGhlIG5ldyBTdHJpbmcKKyAqIFxjb2RlCitA QCAtNTk5LDcgKzU5OSw3IEBAIGNoYXIgKm1ha2Vfc3RyaW5nKGNoYXIgKnMsIC4uLikKKyAJCQkJ CWJyZWFrOworIAkJCX0KKyAJCX0KKy0JCQorKworIAkJc3RyKys7CisgCX0KKyAKK0BAIC02Mjgs MTMgKzYyOCwxMyBAQCBjaGFyICpzdHJjYXRfZXgoY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hh ciAqc3RyMikKKyAJbGVuID0gc3RybGVuKHN0cjEpICsgc3RybGVuKHN0cjIpOworIAorIAluZXdf c3RyID0gKGNoYXIgKiltYWxsb2MoKGxlbiArIDEpICogc2l6ZW9mKGNoYXIqKSk7CistCWlmICgh bmV3X3N0cikgCisrCWlmICghbmV3X3N0cikKKyAJCWxpYmNnaV9lcnJvcihFX01FTU9SWSwgIiVz LCBsaW5lICVzIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAKKyAJc3ByaW50ZihuZXdfc3RyLCAi JXMlcyIsIHN0cjEsIHN0cjIpOworIAorIAluZXdfc3RyW2xlbl0gPSAnXDAnOworLQkKKysKKyAJ cmV0dXJuIG5ld19zdHI7CisgfQorIApkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9saWJjZ2ktMS4wLzAw MTItZnJlZS1tZW1vcnktYWxsb2NhdGVkLWJ5LXVuZXNjYXBlX3NwZWNpYWxfY2hhcnMtYWZ0ZS5w YXRjaCBiL3BhdGNoZXMvbGliY2dpLTEuMC8wMDEyLWZyZWUtbWVtb3J5LWFsbG9jYXRlZC1ieS11 bmVzY2FwZV9zcGVjaWFsX2NoYXJzLWFmdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMTg0NjAxZAotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoZXMvbGliY2dpLTEu MC8wMDEyLWZyZWUtbWVtb3J5LWFsbG9jYXRlZC1ieS11bmVzY2FwZV9zcGVjaWFsX2NoYXJzLWFm dGUucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbTogQWxleGFuZGVyIERhaGwgPHBvc3RAbGVz cG9ja3kuZGU+CitEYXRlOiBXZWQsIDI0IE9jdCAyMDEyIDExOjMxOjEwICswMjAwCitTdWJqZWN0 OiBbUEFUQ0hdIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSB1bmVzY2FwZV9zcGVjaWFsX2NoYXJz KCkgYWZ0ZXIgbm90CisgbmVlZGVkIGFueW1vcmUsIHNob3VsZCBmaXggIzMKKworLS0tCisgc3Jj L2NnaS5jICAgIHwgICAgNiArKysrLS0KKyBzcmMvY29va2llLmMgfCAgICA3ICsrKysrLS0KKyAy IGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAt LWdpdCBhL3NyYy9jZ2kuYyBiL3NyYy9jZ2kuYworaW5kZXggZTlkNzZhZS4uNDYxZWJhMyAxMDA2 NDQKKy0tLSBhL3NyYy9jZ2kuYworKysrIGIvc3JjL2NnaS5jCitAQCAtNTEsNyArNTEsNyBAQCBl eHRlcm4gZm9ybXZhcnMgKmNvb2tpZV9lbmQ7CisgZm9ybXZhcnMgKnByb2Nlc3NfZGF0YShjaGFy ICpxdWVyeSwgZm9ybXZhcnMgKipzdGFydCwgZm9ybXZhcnMgKipsYXN0LCBjb25zdCBjaGFyIGRl bGltLCBjb25zdCBjaGFyIHNlcCkKKyB7CisgCXJlZ2lzdGVyIHNpemVfdCBwb3NpdGlvbiA9IDAs IHRvdGFsX2xlbiA9IDAsIGkgPSAwOworLQljaGFyICphdXg7CisrCWNoYXIgKmF1eCwgKnN0cl91 bmVzYzsKKyAJZm9ybXZhcnMgKmRhdGE7CisgCisgCWlmIChxdWVyeSA9PSBOVUxMKQorQEAgLTEx Myw4ICsxMTMsMTAgQEAgZm9ybXZhcnMgKnByb2Nlc3NfZGF0YShjaGFyICpxdWVyeSwgZm9ybXZh cnMgKipzdGFydCwgZm9ybXZhcnMgKipsYXN0LCBjb25zdCBjaGEKKyAJCWlmIChkYXRhLT52YWx1 ZSA9PSBOVUxMKQorIAkJCWxpYmNnaV9lcnJvcihFX01FTU9SWSwgIiVzLCBsaW5lICVzIiwgX19G SUxFX18sIF9fTElORV9fKTsKKyAKKy0JCXN0cm5jcHkoZGF0YS0+dmFsdWUsIGNnaV91bmVzY2Fw ZV9zcGVjaWFsX2NoYXJzKHF1ZXJ5KSwgcG9zaXRpb24pOworKwkJc3RyX3VuZXNjID0gY2dpX3Vu ZXNjYXBlX3NwZWNpYWxfY2hhcnMocXVlcnkpOworKwkJc3RybmNweShkYXRhLT52YWx1ZSwgc3Ry X3VuZXNjLCBwb3NpdGlvbik7CisgCQlkYXRhLT52YWx1ZVtwb3NpdGlvbl0gPSAnXDAnOworKwkJ ZnJlZShzdHJfdW5lc2MpOworIAorIAkJc2xpc3RfYWRkKGRhdGEsIHN0YXJ0LCBsYXN0KTsKKyAK K2RpZmYgLS1naXQgYS9zcmMvY29va2llLmMgYi9zcmMvY29va2llLmMKK2luZGV4IGU5ZGVlOWUu LjZlODRjODEgMTAwNjQ0CistLS0gYS9zcmMvY29va2llLmMKKysrKyBiL3NyYy9jb29raWUuYwor QEAgLTgzLDEyICs4MywxMyBAQCBmb3JtdmFycyAqY2dpX2dldF9jb29raWVzKCkKKyB7CisgCXJl Z2lzdGVyIGZvcm12YXJzICpkYXRhOworIAlyZWdpc3RlciBzaXplX3QgcG9zaXRpb247CistCWNo YXIgKmNvb2tpZXMsICphdXg7CisrCWNoYXIgKmNvb2tpZXMsICphdXgsICpzdHJfdW5lc2M7Cisg CisgCWlmICgoY29va2llcyA9IGdldGVudigiSFRUUF9DT09LSUUiKSkgPT0gTlVMTCkKKyAJCXJl dHVybiBOVUxMOworIAorLQljb29raWVzID0gY2dpX3VuZXNjYXBlX3NwZWNpYWxfY2hhcnMoY29v a2llcyk7CisrCXN0cl91bmVzYyA9IGNnaV91bmVzY2FwZV9zcGVjaWFsX2NoYXJzKGNvb2tpZXMp OworKwljb29raWVzID0gc3RyX3VuZXNjOworIAlhdXggPSBjb29raWVzOworIAorIAl3aGlsZSAo Y29va2llcykgeworQEAgLTEzNSw2ICsxMzYsOCBAQCBmb3JtdmFycyAqY2dpX2dldF9jb29raWVz KCkKKyAJCWNvb2tpZXMgPSBhdXg7CisgCX0KKyAKKysJZnJlZShzdHJfdW5lc2MpOworKworIAly ZXR1cm4gY29va2llc19zdGFydDsKKyB9CisgCmRpZmYgLS1naXQgYS9wYXRjaGVzL2xpYmNnaS0x LjAvMDAxMy1mcmVlLW1lbW9yeS1hbGxvY2F0ZWQtZm9yLXJlYWRpbmctYW5kLXBhcnNpbmctUE9T VC1kLnBhdGNoIGIvcGF0Y2hlcy9saWJjZ2ktMS4wLzAwMTMtZnJlZS1tZW1vcnktYWxsb2NhdGVk LWZvci1yZWFkaW5nLWFuZC1wYXJzaW5nLVBPU1QtZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5iZjZkMWRhCi0tLSAvZGV2L251bGwKKysrIGIvcGF0Y2hlcy9saWJj Z2ktMS4wLzAwMTMtZnJlZS1tZW1vcnktYWxsb2NhdGVkLWZvci1yZWFkaW5nLWFuZC1wYXJzaW5n LVBPU1QtZC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tOiBBbGV4YW5kZXIgRGFobCA8cG9z dEBsZXNwb2NreS5kZT4KK0RhdGU6IFdlZCwgMjQgT2N0IDIwMTIgMTI6NDg6MzYgKzAyMDAKK1N1 YmplY3Q6IFtQQVRDSF0gZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciByZWFkaW5nIGFuZCBwYXJz aW5nIFBPU1QgZGF0YQorIGFmdGVyIGNvcHlpbmcgdG8gc2xpc3QsIHNob3VsZCBmaXggIzIKKwor LS0tCisgc3JjL2NnaS5jIHwgICAgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jZ2kuYyBiL3NyYy9jZ2ku YworaW5kZXggNDYxZWJhMy4uOTk1NjNhZCAxMDA2NDQKKy0tLSBhL3NyYy9jZ2kuYworKysrIGIv c3JjL2NnaS5jCitAQCAtMTYxLDYgKzE2MSw3IEBAIGZvcm12YXJzICpjZ2lfcHJvY2Vzc19mb3Jt KCkKKyAJCWNoYXIgKnBvc3RfZGF0YTsKKyAJCWNoYXIgKnRtcF9kYXRhOworIAkJaW50IGNvbnRl bnRfbGVuZ3RoOworKwkJZm9ybXZhcnMgKnJldDsKKyAKKyAJCXRtcF9kYXRhID0gZ2V0ZW52KCJD T05URU5UX0xFTkdUSCIpOworIAkJaWYgKHRtcF9kYXRhID09IE5VTEwpCitAQCAtMTc1LDcgKzE3 Niw5IEBAIGZvcm12YXJzICpjZ2lfcHJvY2Vzc19mb3JtKCkKKyAJCWZyZWFkKHBvc3RfZGF0YSwg Y29udGVudF9sZW5ndGgsIDEsIHN0ZGluKTsKKyAJCXBvc3RfZGF0YVtjb250ZW50X2xlbmd0aF0g PSAnXDAnOworIAorLQkJcmV0dXJuIHByb2Nlc3NfZGF0YShwb3N0X2RhdGEsICZmb3JtdmFyc19z dGFydCwgJmZvcm12YXJzX2xhc3QsICc9JywgJyYnKTsKKysJCXJldCA9IHByb2Nlc3NfZGF0YShw b3N0X2RhdGEsICZmb3JtdmFyc19zdGFydCwgJmZvcm12YXJzX2xhc3QsICc9JywgJyYnKTsKKysJ CWZyZWUocG9zdF9kYXRhKTsKKysJCXJldHVybiByZXQ7CisgCX0KKyAKKyAJcmV0dXJuIE5VTEw7 CmRpZmYgLS1naXQgYS9wYXRjaGVzL2xpYmNnaS0xLjAvMDAxNC1GSUxFLXJlcXVpcmVzLWluY2x1 ZGluZy1zdGRpby5wYXRjaCBiL3BhdGNoZXMvbGliY2dpLTEuMC8wMDE0LUZJTEUtcmVxdWlyZXMt aW5jbHVkaW5nLXN0ZGlvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjQ1ODhhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVzL2xpYmNnaS0xLjAvMDAxNC1GSUxF LXJlcXVpcmVzLWluY2x1ZGluZy1zdGRpby5wYXRjaApAQCAtMCwwICsxLDIxIEBACitGcm9tOiBB bGV4YW5kZXIgRGFobCA8cG9zdEBsZXNwb2NreS5kZT4KK0RhdGU6IFR1ZSwgNiBOb3YgMjAxMiAx NDoyMjo1OCArMDEwMAorU3ViamVjdDogW1BBVENIXSBGSUxFIHJlcXVpcmVzIGluY2x1ZGluZyBz dGRpbworCistLS0KKyBzcmMvY2dpLmggfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5z ZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NnaS5oIGIvc3JjL2NnaS5oCitpbmRleCA3 MzE3MzVkLi43Y2Q1YTE3IDEwMDY0NAorLS0tIGEvc3JjL2NnaS5oCisrKysgYi9zcmMvY2dpLmgK K0BAIC0yMSw2ICsyMSw4IEBACisgI2lmbmRlZiBfQ0dJX0gKKyAjZGVmaW5lIF9DR0lfSAkxCisg CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJD IiB7CisgI2VuZGlmCmRpZmYgLS1naXQgYS9wYXRjaGVzL2xpYmNnaS0xLjAvMDAxNS1maXgtdW5l c2NhcGUtYnktb3B0aW1pemluZy1oZXh0YWJsZS1pbml0LWFuZC1hY2Nlc3MucGF0Y2ggYi9wYXRj aGVzL2xpYmNnaS0xLjAvMDAxNS1maXgtdW5lc2NhcGUtYnktb3B0aW1pemluZy1oZXh0YWJsZS1p bml0LWFuZC1hY2Nlc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZjdjMWM0MAotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoZXMvbGliY2dpLTEuMC8wMDE1LWZpeC11 bmVzY2FwZS1ieS1vcHRpbWl6aW5nLWhleHRhYmxlLWluaXQtYW5kLWFjY2Vzcy5wYXRjaApAQCAt MCwwICsxLDkzIEBACitGcm9tOiBBbGV4YW5kZXIgRGFobCA8cG9zdEBsZXNwb2NreS5kZT4KK0Rh dGU6IFR1ZSwgMTggTWFyIDIwMTQgMTE6Mjg6NDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4 IHVuZXNjYXBlIGJ5IG9wdGltaXppbmcgaGV4dGFibGUgaW5pdCBhbmQgYWNjZXNzCisKK2ludCBz aXplIGlzIHJlZHVjZWQgdG8gMSBieXRlLCB0YWJsZSBsZW5ndGggaXMgdHJ1bmNhdGVkIHRvIG9u bHkKK2FjY2Vzc2VkIGJ5dGVzLCBhbmQgYWNjZXNzIGlzIGxpbWl0ZWQgdG8gb25seSB0aGUgaGV4 IGRpZ2l0IGNoYXJhY3RlcnMKK2J5IHJlcGxhY2luZyBpc2FsbnVtKCkgd2l0aCBpc3hkaWdpdCgp IGluIGNnaV91bmVzY2FwZV9zcGVjaWFsX2NoYXJzKCkuCitUaGlzIGFjdHVhbGx5IGZpeGVzIGEg YnVnIGluIGRlY29kaW5nIGlmIG9uZSBvZiB0aGUgaGV4IGRpZ2l0cyBhZnRlciB0aGUKKyclJyB3 YXMgYW5vdGhlciBjaGFyYWN0ZXIgdGhhbiBhIHRvIGYhCistLS0KKyBzcmMvY2dpLmMgfCAgIDU1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCisKK2Rp ZmYgLS1naXQgYS9zcmMvY2dpLmMgYi9zcmMvY2dpLmMKK2luZGV4IDk5NTYzYWQuLjVkOWZmYzAg MTAwNjQ0CistLS0gYS9zcmMvY2dpLmMKKysrKyBiL3NyYy9jZ2kuYworQEAgLTI3LDkgKzI3LDcg QEAKKyAjaW5jbHVkZSAiY2dpLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgCistLy8gV2hvdy4u LiBpZiBoZXh0YWJsZSBhcnJheSBoYXMgYSBsZW5ndGggbGVzcyB0aGFuIDI1NiwKKy0vLyB0aGUg Y2dpX3VuZXNjYXBlX3NwZWNpYWxfY2hhcnMgZnVuY3Rpb24gd2lsbCBmYWlsLiAgQW5kIEkgZG9u J3Qga25vdyB3aHkKKy1zdGF0aWMgaW50IGhleHRhYmxlWzI1Nl07Cisrc3RhdGljIHVuc2lnbmVk IGNoYXIgaGV4dGFibGVbJ2YnKzFdOworIAorIGludCBoZWFkZXJzX2luaXRpYWxpemVkID0gMDsK KyAKK0BAIC0zMjYsMjkgKzMyNCwzMiBAQCB2b2lkIGNnaV9yZWRpcmVjdChjaGFyICp1cmwpCisg Ly8gT3JpZ2luYWwgaWRlYSBmcm9tIGNnaWMgbGlicmFyeQorIHZvaWQgaW5pdF9oZXhfdGFibGUo KQorIHsKKy0JbWVtc2V0KGhleHRhYmxlLCAwLCAyNTUpOworLQorLQloZXh0YWJsZVsnMSddID0g MTsKKy0JaGV4dGFibGVbJzInXSA9IDI7CistCWhleHRhYmxlWyczJ10gPSAzOworLQloZXh0YWJs ZVsnNCddID0gNDsKKy0JaGV4dGFibGVbJzUnXSA9IDU7CistCWhleHRhYmxlWyc2J10gPSA2Owor LQloZXh0YWJsZVsnNyddID0gNzsKKy0JaGV4dGFibGVbJzgnXSA9IDg7CistCWhleHRhYmxlWyc5 J10gPSA5OworLQloZXh0YWJsZVsnYSddID0gMTA7CistCWhleHRhYmxlWydiJ10gPSAxMTsKKy0J aGV4dGFibGVbJ2MnXSA9IDEyOworLQloZXh0YWJsZVsnZCddID0gMTM7CistCWhleHRhYmxlWydl J10gPSAxNDsKKy0JaGV4dGFibGVbJ2YnXSA9IDE1OworLQloZXh0YWJsZVsnQSddID0gMTA7Cist CWhleHRhYmxlWydCJ10gPSAxMTsKKy0JaGV4dGFibGVbJ0MnXSA9IDEyOworLQloZXh0YWJsZVsn RCddID0gMTM7CistCWhleHRhYmxlWydFJ10gPSAxNDsKKy0JaGV4dGFibGVbJ0YnXSA9IDE1Owor KwltZW1zZXQoaGV4dGFibGUsIDAsICdmJysxKTsKKysKKysJaGV4dGFibGVbJzAnXSA9IDB4MDsJ LyogNDggKi8KKysJaGV4dGFibGVbJzEnXSA9IDB4MTsJLyogNDkgKi8KKysJaGV4dGFibGVbJzIn XSA9IDB4MjsJLyogNTAgKi8KKysJaGV4dGFibGVbJzMnXSA9IDB4MzsJLyogNTEgKi8KKysJaGV4 dGFibGVbJzQnXSA9IDB4NDsJLyogNTIgKi8KKysJaGV4dGFibGVbJzUnXSA9IDB4NTsJLyogNTMg Ki8KKysJaGV4dGFibGVbJzYnXSA9IDB4NjsJLyogNTQgKi8KKysJaGV4dGFibGVbJzcnXSA9IDB4 NzsJLyogNTUgKi8KKysJaGV4dGFibGVbJzgnXSA9IDB4ODsJLyogNTYgKi8KKysJaGV4dGFibGVb JzknXSA9IDB4OTsJLyogNTcgKi8KKysKKysJaGV4dGFibGVbJ0EnXSA9IDB4QTsJLyogNjUgKi8K KysJaGV4dGFibGVbJ0InXSA9IDB4QjsJLyogNjYgKi8KKysJaGV4dGFibGVbJ0MnXSA9IDB4QzsJ LyogNjcgKi8KKysJaGV4dGFibGVbJ0QnXSA9IDB4RDsJLyogNjggKi8KKysJaGV4dGFibGVbJ0Un XSA9IDB4RTsJLyogNjkgKi8KKysJaGV4dGFibGVbJ0YnXSA9IDB4RjsJLyogNzAgKi8KKysKKysJ aGV4dGFibGVbJ2EnXSA9IDB4YTsJLyogOTcgKi8KKysJaGV4dGFibGVbJ2InXSA9IDB4YjsJLyog OTggKi8KKysJaGV4dGFibGVbJ2MnXSA9IDB4YzsJLyogOTkgKi8KKysJaGV4dGFibGVbJ2QnXSA9 IDB4ZDsJLyogMTAwICovCisrCWhleHRhYmxlWydlJ10gPSAweGU7CS8qIDEwMSAqLworKwloZXh0 YWJsZVsnZiddID0gMHhmOwkvKiAxMDIgKi8KKyB9CisgCisgLyoqCitAQCAtNDExLDcgKzQxMiw3 IEBAIGNoYXIgKmNnaV91bmVzY2FwZV9zcGVjaWFsX2NoYXJzKGNoYXIgKnN0cikKKyAJCS8vIGhl eGEgY29kZS4gQ29udmVydGluZyBhIGhleGFkZWNpbWFsIGNvZGUgdG8gdGhlaXIgZGVjaW1hbCBp cyBlYXN5OgorIAkJLy8gVGhlIGZpcnN0IGNoYXJhY3RlciBuZWVkcyB0byBiZSBtdWx0aXBsaWVk IGJ5IDE2ICggPDwgNCApLCBhbmQgdGhlIGFub3RoZXIKKyAJCS8vIG9uZSB3ZSBqdXN0IGdldCB0 aGUgdmFsdWUgZnJvbSBoZXh0YWJsZSB2YXJpYWJsZQorLQkJaWYgKChzdHJbaV0gPT0gJyUnKSAm JiBpc2FsbnVtKHN0cltpKzFdKSAmJiBpc2FsbnVtKHN0cltpKzJdKSkgeworKwkJaWYgKChzdHJb aV0gPT0gJyUnKSAmJiBpc3hkaWdpdChzdHJbaSsxXSkgJiYgaXN4ZGlnaXQoc3RyW2krMl0pKSB7 CisgCQkJdG1wW3Bvc10gPSAoaGV4dGFibGVbKHVuc2lnbmVkIGNoYXIpIHN0cltpKzFdXSA8PCA0 KSArIGhleHRhYmxlWyh1bnNpZ25lZCBjaGFyKSBzdHJbaSsyXV07CisgCQkJaSArPSAyOworIAkJ fQpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9saWJjZ2ktMS4wL3NlcmllcyBiL3BhdGNoZXMvbGliY2dp LTEuMC9zZXJpZXMKaW5kZXggNTI5ZjllMS4uMzZiMzVjMyAxMDA2NDQKLS0tIGEvcGF0Y2hlcy9s aWJjZ2ktMS4wL3NlcmllcworKysgYi9wYXRjaGVzL2xpYmNnaS0xLjAvc2VyaWVzCkBAIC0xMCw0 ICsxMCw5IEBACiAwMDA4LXVzZS1pbnN0YWxsLWluc3RlYWQtb2YtY3AucGF0Y2gKIDAwMDktdXNl LXN0YW5kYXJkLWRpcmVjdG9yeS1uYW1lcy5wYXRjaAogMDAxMC1tYWtlLXRoZS1saWJyYXJ5LWZp bGVuYW1lLW1hdGNoLWl0cy1zb25hbWUucGF0Y2gKLSMgNDBjOGU1MGRmMmE4ZDhkY2NiNDExOGU1 MzIzMzExZDIgIC0gZ2l0LXB0eC1wYXRjaGVzIG1hZ2ljCiswMDExLXJlbW92ZS10cmFpbGluZy13 aGl0ZXNwYWNlLW15LWVkaXRvci13b3VsZC1kby10aGlzLWEucGF0Y2gKKzAwMTItZnJlZS1tZW1v cnktYWxsb2NhdGVkLWJ5LXVuZXNjYXBlX3NwZWNpYWxfY2hhcnMtYWZ0ZS5wYXRjaAorMDAxMy1m cmVlLW1lbW9yeS1hbGxvY2F0ZWQtZm9yLXJlYWRpbmctYW5kLXBhcnNpbmctUE9TVC1kLnBhdGNo CiswMDE0LUZJTEUtcmVxdWlyZXMtaW5jbHVkaW5nLXN0ZGlvLnBhdGNoCiswMDE1LWZpeC11bmVz Y2FwZS1ieS1vcHRpbWl6aW5nLWhleHRhYmxlLWluaXQtYW5kLWFjY2Vzcy5wYXRjaAorIyBhNDVh ZDJiZWIxZTVlMjBkMjc0YWQ5Y2MyZGJhMmNkNyAgLSBnaXQtcHR4LXBhdGNoZXMgbWFnaWMKLS0g CjEuNy4xMC40CgoKLS0gCnB0eGRpc3QgbWFpbGluZyBsaXN0CnB0eGRpc3RAcGVuZ3V0cm9uaXgu ZGUK