From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HP1Qr-0003Vn-52 for qemu-devel@nongnu.org; Wed, 07 Mar 2007 14:04:13 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HP1Qp-0003Va-3s for qemu-devel@nongnu.org; Wed, 07 Mar 2007 14:04:11 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HP1Qo-0003VX-T7 for qemu-devel@nongnu.org; Wed, 07 Mar 2007 14:04:10 -0500 Received: from md0.mail.umd.edu ([128.8.31.162]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HP1Qf-0006CR-U5 for qemu-devel@nongnu.org; Wed, 07 Mar 2007 14:04:03 -0500 From: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-----1107909fb8795e95a5471fabcd100bae" Message-Id: <20070307135635.BYH32034@po0.mail.umd.edu> Date: Wed, 7 Mar 2007 13:56:35 -0500 (EST) Subject: [Qemu-devel] [PATCH] [RFC] aio update for composite and partition block drivers and a fix for -kernel boot Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org -------1107909fb8795e95a5471fabcd100bae Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit block-composite now fully supports AIO. block-partition's MBR geometry has been fixed, linux fdisk no longer complains about a mismatch between logical and physical geometry. Pretty much the only thing remaining is to clean up the syntax. I've also included a second patch that fixes -kernel boot so a supporting -hda is no longer required. (This has been moved to -fda instead, additionally the block-ram driver is used if the floppy disk is booted up empty and automatically unloaded after the kernel has started booting.) -------1107909fb8795e95a5471fabcd100bae Content-Type: text/x-patch; name="composite.patch" Content-Disposition: inline; filename="composite.patch" Content-Transfer-Encoding: base64 ZGlmZiAtdXIgLS1uZXctZmlsZSAtLWV4Y2x1ZGU9LiMqIC0tZXhjbHVkZT0qQ1ZTKiAtLWV4 Y2x1ZGU9Kmdlbi1vcCogLS1leGNsdWRlPWJsb2NrLWNvbXBvc2l0ZTEuYyAtLWV4Y2x1ZGU9 KmNvbmZpZyogLS1leGNsdWRlPSotc29mdG1tdSogcWVtdS9NYWtlZmlsZSBxZW11Lm5vdGxh c3QvTWFrZWZpbGUKLS0tIHFlbXUvTWFrZWZpbGUJU2F0IEZlYiAxMCAxODowMDozMyAyMDA3 CisrKyBxZW11Lm5vdGxhc3QvTWFrZWZpbGUJV2VkIE1hciAgNyAxMDozNDowOSAyMDA3CkBA IC0zNyw3ICszNyw3IEBACiAKIHJlY3Vyc2UtYWxsOiAkKHBhdHN1YnN0ICUsc3ViZGlyLSUs ICQoVEFSR0VUX0RJUlMpKQogCi1xZW11LWltZyQoRVhFU1VGKTogcWVtdS1pbWcuYyBjdXRp bHMuYyBibG9jay5jIGJsb2NrLXJhdy5jIGJsb2NrLWNvdy5jIGJsb2NrLXFjb3cuYyBhZXMu YyBibG9jay12bWRrLmMgYmxvY2stY2xvb3AuYyBibG9jay1kbWcuYyBibG9jay1ib2Nocy5j IGJsb2NrLXZwYy5jIGJsb2NrLXZ2ZmF0LmMgYmxvY2stcWNvdzIuYworcWVtdS1pbWckKEVY RVNVRik6IHFlbXUtaW1nLmMgY3V0aWxzLmMgYmxvY2suYyBibG9jay1yYXcuYyBibG9jay1j b3cuYyBibG9jay1xY293LmMgYWVzLmMgYmxvY2stdm1kay5jIGJsb2NrLWNsb29wLmMgYmxv Y2stZG1nLmMgYmxvY2stYm9jaHMuYyBibG9jay12cGMuYyBibG9jay12dmZhdC5jIGJsb2Nr LXFjb3cyLmMgYmxvY2stY29tcG9zaXRlLmMgYmxvY2stcmFtLmMgYmxvY2stcGFydGl0aW9u LmMKIAkkKENDKSAtRFFFTVVfVE9PTCAkKENGTEFHUykgJChDUFBGTEFHUykgJChCQVNFX0NG TEFHUykgJChMREZMQUdTKSAkKEJBU0VfTERGTEFHUykgLW8gJEAgJF4gLWx6ICQoTElCUykK IAogZHluZ2VuJChFWEVTVUYpOiBkeW5nZW4uYwpkaWZmIC11ciAtLW5ldy1maWxlIC0tZXhj bHVkZT0uIyogLS1leGNsdWRlPSpDVlMqIC0tZXhjbHVkZT0qZ2VuLW9wKiAtLWV4Y2x1ZGU9 YmxvY2stY29tcG9zaXRlMS5jIC0tZXhjbHVkZT0qY29uZmlnKiAtLWV4Y2x1ZGU9Ki1zb2Z0 bW11KiBxZW11L01ha2VmaWxlLnRhcmdldCBxZW11Lm5vdGxhc3QvTWFrZWZpbGUudGFyZ2V0 Ci0tLSBxZW11L01ha2VmaWxlLnRhcmdldAlXZWQgRmViIDI4IDE2OjM2OjQxIDIwMDcKKysr IHFlbXUubm90bGFzdC9NYWtlZmlsZS50YXJnZXQJV2VkIE1hciAgNyAxMDozNDozMyAyMDA3 CkBAIC0zMjIsNyArMzIyLDcgQEAKICMgbXVzdCB1c2Ugc3RhdGljIGxpbmtpbmcgdG8gYXZv aWQgbGVhdmluZyBzdHVmZiBpbiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UKIFZMX09CSlM9dmwu byBvc2RlcC5vIHJlYWRsaW5lLm8gbW9uaXRvci5vIHBjaS5vIGNvbnNvbGUubyBsb2FkZXIu byBpc2FfbW1pby5vCiBWTF9PQkpTKz1jdXRpbHMubwotVkxfT0JKUys9YmxvY2subyBibG9j ay1yYXcubworVkxfT0JKUys9YmxvY2subyBibG9jay1yYXcubyBibG9jay1jb21wb3NpdGUu byBibG9jay1yYW0ubyBibG9jay1wYXJ0aXRpb24ubwogVkxfT0JKUys9YmxvY2stY293Lm8g YmxvY2stcWNvdy5vIGFlcy5vIGJsb2NrLXZtZGsubyBibG9jay1jbG9vcC5vIGJsb2NrLWRt Zy5vIGJsb2NrLWJvY2hzLm8gYmxvY2stdnBjLm8gYmxvY2stdnZmYXQubyBibG9jay1xY293 Mi5vCiBpZmRlZiBDT05GSUdfV0lOMzIKIFZMX09CSlMrPXRhcC13aW4zMi5vCmRpZmYgLXVy IC0tbmV3LWZpbGUgLS1leGNsdWRlPS4jKiAtLWV4Y2x1ZGU9KkNWUyogLS1leGNsdWRlPSpn ZW4tb3AqIC0tZXhjbHVkZT1ibG9jay1jb21wb3NpdGUxLmMgLS1leGNsdWRlPSpjb25maWcq IC0tZXhjbHVkZT0qLXNvZnRtbXUqIHFlbXUvYmxvY2stY29tcG9zaXRlLmMgcWVtdS5ub3Rs YXN0L2Jsb2NrLWNvbXBvc2l0ZS5jCi0tLSBxZW11L2Jsb2NrLWNvbXBvc2l0ZS5jCVdlZCBE ZWMgMzEgMTk6MDA6MDAgMTk2OQorKysgcWVtdS5ub3RsYXN0L2Jsb2NrLWNvbXBvc2l0ZS5j CVdlZCBNYXIgIDcgMTA6NDU6MTggMjAwNwpAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIEJs b2NrIGRyaXZlciB0byB1c2UgY29tcG9zaXRlIGltYWdlcworICogCisgKiBDb3B5cmlnaHQg KGMpIDIwMDcgSmltIEJyb3duCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAq IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisg KiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYmxv Y2tfY29tcG9zaXRlLmgiCisKK3N0YXRpYyBpbnQgY29tcG9zaXRlX3Byb2JlKGNvbnN0IHVp bnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAg ICBpZiAoc3Ryc3RhcnQoZmlsZW5hbWUsICJjb21wb3NpdGU6IiwgTlVMTCkpCisgICAgICAg IHJldHVybiAxMDA7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcG9zaXRl X29wZW4oQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGNvbnN0IGNoYXIgKm5maWxlbmFtZSwgaW50 IGZsYWdzKQoreworICAgIEJEUlZQYXJ0U3RhdGUgKnMgPSBicy0+b3BhcXVlOworICAgIEJs b2NrRHJpdmVyU3RhdGUgKiBzbGF2ZV9iczsKKyAgICBpbnQgcHJldmlvdXNfc3RhcnQsIGZp bGVfY291bnQgPSAxLCBpOworICAgIGNvbnN0IGNoYXIgKiB6ZmlsZW5hbWUgPSAmKG5maWxl bmFtZVsxMF0pLCAqIG5wdHIgPSB6ZmlsZW5hbWU7CisgICAgY2hhciAqIGZpbGVuYW1lOwor CisgICAgYnMtPnJlYWRfb25seSA9IDA7CisgICAgcy0+c2xhdmVfY291bnQgPSAwOworICAg IHByZXZpb3VzX3N0YXJ0ID0gMDsKKworICAgIHdoaWxlIChucHRyICE9IE5VTEwpCisgICAg eworICAgIAlucHRyID0gc3RyY2hyKG5wdHIsICcsJykrMTsKKyAgICAJaWYgKChucHRyLTEp ICE9IE5VTEwpCisgICAgCXsKKwkJZmlsZV9jb3VudCsrOworCX0KKwllbHNlCisJeworCQlu cHRyID0gTlVMTDsKKwl9CisgICAgfQorICAgIHMtPnNsYXZlX2JzID0gcWVtdV9tYWxsb2N6 KHNpemVvZihTbGF2ZURyaXZlclN0YXRlKSpmaWxlX2NvdW50KTsKKyAgICBpZiAocy0+c2xh dmVfYnMgPT0gTlVMTCkgcmV0dXJuIC0xOworICAgIG5wdHIgPSB6ZmlsZW5hbWU7CisKKyAg ICB3aGlsZSAobnB0ciAhPSBOVUxMKQorICAgIHsKKyAgICAJbnB0ciA9IHN0cmNocih6Zmls ZW5hbWUsICcsJykrMTsKKyAgICAJaWYgKChucHRyLTEpICE9IE5VTEwpCisgICAgCXsKKyAg ICAJCWZpbGVuYW1lID0gc3RybmR1cCh6ZmlsZW5hbWUsIChzaXplX3QpKChucHRyLTEpLXpm aWxlbmFtZSkpOworICAgIAkJemZpbGVuYW1lID0gbnB0cjsKKyAgICAJfQorICAgIAllbHNl CisgICAgCXsKKyAgICAJCWZpbGVuYW1lID0gc3RyZHVwKHpmaWxlbmFtZSk7CisJCW5wdHIg PSBOVUxMOworICAgIAl9CisKKyAgICAJc2xhdmVfYnMgPSBxZW11X21hbGxvY3ooc2l6ZW9m KEJsb2NrRHJpdmVyU3RhdGUpKTsKKyAgICAJaWYgKChzbGF2ZV9icyA9PSBOVUxMKSB8fCAo YmRydl9vcGVuMihzbGF2ZV9icywgZmlsZW5hbWUsIDAsIE5VTEwpICE9IDApKQorICAgIAl7 CisJCWZvciAoaSA9IDA7IGkgPCBzLT5zbGF2ZV9jb3VudDsgaSsrKQorCQl7CisJCQliZHJ2 X2Nsb3NlKHMtPnNsYXZlX2JzW2ldLmJzKTsKKwkJCXFlbXVfZnJlZShzLT5zbGF2ZV9ic1tp XS5icyk7CisJCX0KKwkJcWVtdV9mcmVlKHMtPnNsYXZlX2JzKTsKKyAgICAJCXJldHVybiAt MTsKKyAgICAJfQorCWZyZWUoZmlsZW5hbWUpOworCisgICAgCXMtPnNsYXZlX2JzW3MtPnNs YXZlX2NvdW50XS5icyA9IHNsYXZlX2JzOworICAgIAlzLT5zbGF2ZV9ic1tzLT5zbGF2ZV9j b3VudF0uc3RhcnRfc2VjdG9yID0gcHJldmlvdXNfc3RhcnQ7CisJcHJldmlvdXNfc3RhcnQg PSBwcmV2aW91c19zdGFydCArIHMtPnNsYXZlX2JzW3MtPnNsYXZlX2NvdW50XS5icy0+dG90 YWxfc2VjdG9yczsKKyAgICAJcy0+c2xhdmVfY291bnQrKzsKKyAgICAJaWYgKHNsYXZlX2Jz LT5yZWFkX29ubHkpCisJeworICAgIAkJYnMtPnJlYWRfb25seSA9IDE7CisgICAgCX0KKyAg ICB9CisKKyAgICBicy0+dG90YWxfc2VjdG9ycyA9IHByZXZpb3VzX3N0YXJ0OworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcG9zaXRlX3JlYWQoQmxvY2tEcml2ZXJT dGF0ZSAqYnMsIGludDY0X3Qgc2VjdG9yX251bSwgCisgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgKmJ1ZiwgaW50IG5iX3NlY3RvcnMpCit7CisgICAgQkRSVlBhcnRTdGF0ZSAqcyA9 IGJzLT5vcGFxdWU7CisgICAgaW50IHJldCxzc3RhcnQsc2VuZCxpOworCisgICAgc3N0YXJ0 ID0gLTE7CisgICAgZm9yIChpID0gMDsgaSA8IHMtPnNsYXZlX2NvdW50OyBpKyspCisgICAg eworCSAgICBpZiAoKHMtPnNsYXZlX2JzW2ldLnN0YXJ0X3NlY3RvciArCisJCQkgICAgcy0+ c2xhdmVfYnNbaV0uYnMtPnRvdGFsX3NlY3RvcnMgPiBzZWN0b3JfbnVtKQorCQkJICAgICYm IChzLT5zbGF2ZV9ic1tpXS5zdGFydF9zZWN0b3IgPD0gc2VjdG9yX251bSkpCisJICAgIHsK KwkJICAgIHNzdGFydCA9IGk7CisJCSAgICBicmVhazsKKwkgICAgfQorICAgIH0KKyAgICBp ZiAoc3N0YXJ0ID09IC0xKSByZXR1cm4gLTE7CisKKyAgICBzZW5kID0gLTE7CisgICAgZm9y IChpID0gMDsgaSA8IHMtPnNsYXZlX2NvdW50OyBpKyspCisgICAgeworCSAgICBpZigocy0+ c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yICsgcy0+c2xhdmVfYnNbaV0uYnMtPnRvdGFsX3Nl Y3RvcnMKKwkJCSAgICA+IHNlY3Rvcl9udW0rbmJfc2VjdG9ycykKKwkJCSAgICAmJiAocy0+ c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yCisJCQkgICAgPD0gc2VjdG9yX251bStuYl9zZWN0 b3JzKSkKKwkgICAgeworCQkgICAgc2VuZCA9IGk7CisJCSAgICBicmVhazsKKwkgICAgfQor ICAgIH0KKyAgICBpZiAoc2VuZCA9PSAtMSkgcmV0dXJuIC0xOworCisgICAgaWYgKHNzdGFy dCA+IHNlbmQpIHJldHVybiAtMjsgLy93dGY/Pz8KKworICAgIGludCBhID0gMCwgYiA9IDAs IGJ1ZnBvcyA9IDA7CisgICAgaSA9IHNzdGFydDsKKyAgICB3aGlsZSAoaSA8IHNlbmQpCisg ICAgeworCSAgICBhID0gcy0+c2xhdmVfYnNbaV0uYnMtPnRvdGFsX3NlY3RvcnM7CisJICAg IHJldCA9IGJkcnZfcmVhZChzLT5zbGF2ZV9ic1tpXS5icywgc2VjdG9yX251bStiIC0gcy0+ c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yLCAmKGJ1ZltidWZwb3NdKSwgYSk7CisJICAgIGlm IChyZXQgIT0gMCkgcmV0dXJuIHJldDsKKwkgICAgYiA9IGIrYTsKKwkgICAgYnVmcG9zID0g YnVmcG9zICsgKGEgKiA1MTIpOworCSAgICBpKys7CisgICAgfQorICAgIHJldHVybiBiZHJ2 X3JlYWQocy0+c2xhdmVfYnNbc2VuZF0uYnMsIHNlY3Rvcl9udW0rYiAtIHMtPnNsYXZlX2Jz W3NlbmRdLnN0YXJ0X3NlY3RvciwgJihidWZbYnVmcG9zXSksIG5iX3NlY3RvcnMtYik7Cit9 CisKK3N0YXRpYyBpbnQgY29tcG9zaXRlX3dyaXRlKEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBp bnQ2NF90IHNlY3Rvcl9udW0sIAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhf dCAqYnVmLCBpbnQgbmJfc2VjdG9ycykKK3sKKyAgICBCRFJWUGFydFN0YXRlICpzID0gYnMt Pm9wYXF1ZTsKKyAgICBpbnQgcmV0LHNzdGFydCxzZW5kLGk7CisKKyAgICBzc3RhcnQgPSAt MTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+c2xhdmVfY291bnQ7IGkrKykKKyAgICB7CisJ ICAgIGlmICgocy0+c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yICsKKwkJCSAgICBzLT5zbGF2 ZV9ic1tpXS5icy0+dG90YWxfc2VjdG9ycyA+IHNlY3Rvcl9udW0pCisJCQkgICAgJiYgKHMt PnNsYXZlX2JzW2ldLnN0YXJ0X3NlY3RvciA8PSBzZWN0b3JfbnVtKSkKKwkgICAgeworCQkg ICAgc3N0YXJ0ID0gaTsKKwkJICAgIGJyZWFrOworCSAgICB9CisgICAgfQorICAgIGlmIChz c3RhcnQgPT0gLTEpIHJldHVybiAtMTsKKworICAgIHNlbmQgPSAtMTsKKyAgICBmb3IgKGkg PSAwOyBpIDwgcy0+c2xhdmVfY291bnQ7IGkrKykKKyAgICB7CisJICAgIGlmKChzLT5zbGF2 ZV9ic1tpXS5zdGFydF9zZWN0b3IgKyBzLT5zbGF2ZV9ic1tpXS5icy0+dG90YWxfc2VjdG9y cworCQkJICAgID4gc2VjdG9yX251bStuYl9zZWN0b3JzKQorCQkJICAgICYmIChzLT5zbGF2 ZV9ic1tpXS5zdGFydF9zZWN0b3IKKwkJCSAgICA8PSBzZWN0b3JfbnVtK25iX3NlY3RvcnMp KQorCSAgICB7CisJCSAgICBzZW5kID0gaTsKKwkJICAgIGJyZWFrOworCSAgICB9CisgICAg fQorICAgIGlmIChzZW5kID09IC0xKSByZXR1cm4gLTE7CisKKyAgICBpZiAoc3N0YXJ0ID4g c2VuZCkgcmV0dXJuIC0yOyAvL3d0Zj8/PworCisgICAgaW50IGEgPSAwLCBiID0gMCwgYnVm cG9zID0gMDsKKyAgICBpID0gc3N0YXJ0OworICAgIHdoaWxlIChpIDwgc2VuZCkKKyAgICB7 CisJICAgIGEgPSBzLT5zbGF2ZV9ic1tpXS5icy0+dG90YWxfc2VjdG9yczsKKwkgICAgcmV0 ID0gYmRydl93cml0ZShzLT5zbGF2ZV9ic1tpXS5icywgc2VjdG9yX251bStiIC0gcy0+c2xh dmVfYnNbaV0uc3RhcnRfc2VjdG9yLCAmKGJ1ZltidWZwb3NdKSwgYSk7CisJICAgIGlmIChy ZXQgIT0gMCkgcmV0dXJuIHJldDsKKwkgICAgYiA9IGIrYTsKKwkgICAgYnVmcG9zID0gYnVm cG9zICsgKGEgKiA1MTIpOworCSAgICBpKys7CisgICAgfQorICAgIGk9IGJkcnZfd3JpdGUo cy0+c2xhdmVfYnNbc2VuZF0uYnMsIHNlY3Rvcl9udW0rYiAtIHMtPnNsYXZlX2JzW3NlbmRd LnN0YXJ0X3NlY3RvciwgJihidWZbYnVmcG9zXSksIG5iX3NlY3RvcnMtYik7CisgICAgcmV0 dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgY29tcG9zaXRlX3ByZWFkKEJsb2NrRHJpdmVyU3Rh dGUgKmJzLCBpbnQ2NF90IG9mZnNldCwKKwkJdWludDhfdCAqYnVmLCBpbnQgY291bnQpCit7 CisgICAgQkRSVlBhcnRTdGF0ZSAqcyA9IGJzLT5vcGFxdWU7CisgICAgaW50IHJldCxzc3Rh cnQsc2VuZCxpOworICAgIGludDY0X3Qgc2VjdG9yX251bSwgbmJfc2VjdG9yczsKKworICAg IHNlY3Rvcl9udW0gPSBvZmZzZXQgLyA1MTI7IC8qIGludGVnZXIgZGl2aXNpb24gcm91bmRz IGRvd24gdGhhbmtmdWxseSAqLworICAgIG5iX3NlY3RvcnMgPSAob2Zmc2V0ICsgY291bnQp IC8gNTEyOworICAgIC8qIHVuZm9ydHVuYXRseSBpdCB3b24ndCByb3VuZCB1cCBzbyB3ZSBo YXZlIHRvIGNoZWNrIG1hbnVhbGx5ICovCisgICAgaWYgKCgob2Zmc2V0ICsgY291bnQpICUg NTEyKSAhPSAwKQorICAgIHsKKwkgICAgbmJfc2VjdG9ycyArKzsKKyAgICB9CisKKyAgICBz c3RhcnQgPSAtMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+c2xhdmVfY291bnQ7IGkrKykK KyAgICB7CisJICAgIGlmICgocy0+c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yICsKKwkJCSAg ICBzLT5zbGF2ZV9ic1tpXS5icy0+dG90YWxfc2VjdG9ycyA+IHNlY3Rvcl9udW0pCisJCQkg ICAgJiYgKHMtPnNsYXZlX2JzW2ldLnN0YXJ0X3NlY3RvciA8PSBzZWN0b3JfbnVtKSkKKwkg ICAgeworCQkgICAgc3N0YXJ0ID0gaTsKKwkJICAgIGJyZWFrOworCSAgICB9CisgICAgfQor ICAgIGlmIChzc3RhcnQgPT0gLTEpIHJldHVybiAtMTsKKworICAgIHNlbmQgPSAtMTsKKyAg ICBmb3IgKGkgPSAwOyBpIDwgcy0+c2xhdmVfY291bnQ7IGkrKykKKyAgICB7CisJICAgIGlm KChzLT5zbGF2ZV9ic1tpXS5zdGFydF9zZWN0b3IgKyBzLT5zbGF2ZV9ic1tpXS5icy0+dG90 YWxfc2VjdG9ycworCQkJICAgID4gc2VjdG9yX251bStuYl9zZWN0b3JzKQorCQkJICAgICYm IChzLT5zbGF2ZV9ic1tpXS5zdGFydF9zZWN0b3IKKwkJCSAgICA8PSBzZWN0b3JfbnVtK25i X3NlY3RvcnMpKQorCSAgICB7CisJCSAgICBzZW5kID0gaTsKKwkJICAgIGJyZWFrOworCSAg ICB9CisgICAgfQorICAgIGlmIChzZW5kID09IC0xKSByZXR1cm4gLTE7CisKKyAgICBpZiAo c3N0YXJ0ID4gc2VuZCkgcmV0dXJuIC0yOyAvL3d0Zj8/PworCisgICAgaW50IGEgPSAwLCBi dWZwb3MgPSAwOworCisgICAgYSA9ICgocy0+c2xhdmVfYnNbc3N0YXJ0XS5zdGFydF9zZWN0 b3IgKworCQkgICAgcy0+c2xhdmVfYnNbc3N0YXJ0XS5icy0+dG90YWxfc2VjdG9ycykgKiA1 MTIpIC0gb2Zmc2V0OworICAgIGlmIChhID4gY291bnQgJiYgc3N0YXJ0ICE9IHNlbmQpIHJl dHVybiAtMzsgLy93dGY/Pz8/Pz8KKyAgICBpZiAoYSA+IGNvdW50KSBhID0gY291bnQ7CisK KyAgICByZXQgPSBiZHJ2X3ByZWFkKHMtPnNsYXZlX2JzW3NzdGFydF0uYnMsIG9mZnNldCAt IChzLT5zbGF2ZV9ic1tzc3RhcnRdLnN0YXJ0X3NlY3Rvcio1MTIpLCBidWYsIGEpOworICAg IGJ1ZnBvcyA9IGJ1ZnBvcyArIGE7CisKKyAgICBpZiAocmV0ICE9IDApIHJldHVybiByZXQ7 CisgICAgaWYgKHNzdGFydCA9PSBzZW5kKSByZXR1cm4gcmV0OyAvKiB3ZSdyZSBkb25lICov CisKKyAgICBpID0gc3N0YXJ0ICsgMTsKKyAgICB3aGlsZSAoaSA8IHNlbmQpCisgICAgewor CSAgICBhID0gcy0+c2xhdmVfYnNbaV0uYnMtPnRvdGFsX3NlY3RvcnMgKiA1MTI7CisJICAg IHJldCA9IGJkcnZfcHJlYWQocy0+c2xhdmVfYnNbaV0uYnMsIDAsICYoYnVmW2J1ZnBvc10p LCBhKTsKKwkgICAgaWYgKHJldCAhPSAwKSByZXR1cm4gcmV0OworCSAgICBidWZwb3MgPSBi dWZwb3MgKyBhOworCSAgICBpKys7CisgICAgfQorICAgIGk9IGJkcnZfcHJlYWQocy0+c2xh dmVfYnNbc2VuZF0uYnMsIDAsICYoYnVmW2J1ZnBvc10pLCBjb3VudCAtIGJ1ZnBvcyk7Cisg ICAgcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgY29tcG9zaXRlX3B3cml0ZShCbG9ja0Ry aXZlclN0YXRlICpicywgaW50NjRfdCBvZmZzZXQsCisJCWNvbnN0IHVpbnQ4X3QgKmJ1Ziwg aW50IGNvdW50KQoreworICAgIEJEUlZQYXJ0U3RhdGUgKnMgPSBicy0+b3BhcXVlOworICAg IGludCByZXQsc3N0YXJ0LHNlbmQsaTsKKyAgICBpbnQ2NF90IHNlY3Rvcl9udW0sIG5iX3Nl Y3RvcnM7CisKKyAgICBzZWN0b3JfbnVtID0gb2Zmc2V0IC8gNTEyOyAvKiBpbnRlZ2VyIGRp dmlzaW9uIHJvdW5kcyBkb3duIHRoYW5rZnVsbHkgKi8KKyAgICBuYl9zZWN0b3JzID0gKG9m ZnNldCArIGNvdW50KSAvIDUxMjsKKyAgICAvKiB1bmZvcnR1bmF0bHkgaXQgd29uJ3Qgcm91 bmQgdXAgc28gd2UgaGF2ZSB0byBjaGVjayBtYW51YWxseSAqLworICAgIGlmICgoKG9mZnNl dCArIGNvdW50KSAlIDUxMikgIT0gMCkKKyAgICB7CisJICAgIG5iX3NlY3RvcnMgKys7Cisg ICAgfQorCisgICAgc3N0YXJ0ID0gLTE7CisgICAgZm9yIChpID0gMDsgaSA8IHMtPnNsYXZl X2NvdW50OyBpKyspCisgICAgeworCSAgICBpZiAoKHMtPnNsYXZlX2JzW2ldLnN0YXJ0X3Nl Y3RvciArCisJCQkgICAgcy0+c2xhdmVfYnNbaV0uYnMtPnRvdGFsX3NlY3RvcnMgPiBzZWN0 b3JfbnVtKQorCQkJICAgICYmIChzLT5zbGF2ZV9ic1tpXS5zdGFydF9zZWN0b3IgPD0gc2Vj dG9yX251bSkpCisJICAgIHsKKwkJICAgIHNzdGFydCA9IGk7CisJCSAgICBicmVhazsKKwkg ICAgfQorICAgIH0KKyAgICBpZiAoc3N0YXJ0ID09IC0xKSByZXR1cm4gLTE7CisKKyAgICBz ZW5kID0gLTE7CisgICAgZm9yIChpID0gMDsgaSA8IHMtPnNsYXZlX2NvdW50OyBpKyspCisg ICAgeworCSAgICBpZigocy0+c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yICsgcy0+c2xhdmVf YnNbaV0uYnMtPnRvdGFsX3NlY3RvcnMKKwkJCSAgICA+IHNlY3Rvcl9udW0rbmJfc2VjdG9y cykKKwkJCSAgICAmJiAocy0+c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yCisJCQkgICAgPD0g c2VjdG9yX251bStuYl9zZWN0b3JzKSkKKwkgICAgeworCQkgICAgc2VuZCA9IGk7CisJCSAg ICBicmVhazsKKwkgICAgfQorICAgIH0KKyAgICBpZiAoc2VuZCA9PSAtMSkgcmV0dXJuIC0x OworCisgICAgaWYgKHNzdGFydCA+IHNlbmQpIHJldHVybiAtMjsgLy93dGY/Pz8KKworICAg IGludCBhID0gMCwgYnVmcG9zID0gMDsKKworICAgIGEgPSAoKHMtPnNsYXZlX2JzW3NzdGFy dF0uc3RhcnRfc2VjdG9yICsKKwkJICAgIHMtPnNsYXZlX2JzW3NzdGFydF0uYnMtPnRvdGFs X3NlY3RvcnMpICogNTEyKSAtIG9mZnNldDsKKyAgICBpZiAoYSA+IGNvdW50ICYmIHNzdGFy dCAhPSBzZW5kKSByZXR1cm4gLTM7IC8vd3RmPz8/Pz8/CisgICAgaWYgKGEgPiBjb3VudCkg YSA9IGNvdW50OworCisgICAgcmV0ID0gYmRydl9wd3JpdGUocy0+c2xhdmVfYnNbc3N0YXJ0 XS5icywgb2Zmc2V0IC0gKHMtPnNsYXZlX2JzW3NzdGFydF0uc3RhcnRfc2VjdG9yKjUxMiks IGJ1ZiwgYSk7CisgICAgYnVmcG9zID0gYnVmcG9zICsgYTsKKworICAgIGlmIChyZXQgIT0g MCkgcmV0dXJuIHJldDsKKyAgICBpZiAoc3N0YXJ0ID09IHNlbmQpIHJldHVybiByZXQ7IC8q IHdlJ3JlIGRvbmUgKi8KKworICAgIGkgPSBzc3RhcnQgKyAxOworICAgIHdoaWxlIChpIDwg c2VuZCkKKyAgICB7CisJICAgIGEgPSBzLT5zbGF2ZV9ic1tpXS5icy0+dG90YWxfc2VjdG9y cyAqIDUxMjsKKwkgICAgcmV0ID0gYmRydl9wd3JpdGUocy0+c2xhdmVfYnNbaV0uYnMsIDAs ICYoYnVmW2J1ZnBvc10pLCBhKTsKKwkgICAgaWYgKHJldCAhPSAwKSByZXR1cm4gcmV0Owor CSAgICBidWZwb3MgPSBidWZwb3MgKyBhOworCSAgICBpKys7CisgICAgfQorICAgIGk9IGJk cnZfcHdyaXRlKHMtPnNsYXZlX2JzW3NlbmRdLmJzLCAwLCAmKGJ1ZltidWZwb3NdKSwgY291 bnQgLSBidWZwb3MpOworICAgIHJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBjb21wb3Np dGVfYWlvX3JlYWRfY2Iodm9pZCAqb3BhcXVlLCBpbnQgcmV0KQoreworICAgIENvbXBvc2l0 ZUFJT0NCICphY2IgPSAoQ29tcG9zaXRlQUlPQ0IgKilvcGFxdWU7CisgICAgQmxvY2tEcml2 ZXJTdGF0ZSAqYnMgPSBhY2ItPmNvbW1vbi5iczsKKyAgICBCRFJWUGFydFN0YXRlICpzID0g YnMtPm9wYXF1ZTsKKworICAgIGFjYi0+c2xhdmVfYWlvY2IgPSBOVUxMOworICAgIGlmIChy ZXQgPCAwKQorICAgIHsKKyAgICBmYWlsOgorCSAgICBhY2ItPmNvbW1vbi5jYihhY2ItPmNv bW1vbi5vcGFxdWUsIHJldCk7CisJICAgIHFlbXVfYWlvX3JlbGVhc2UoYWNiKTsKKwkgICAg cmV0dXJuOworICAgIH0KKworICAgIGFjYi0+Y3VyX3NlY3QgKz0gYWNiLT5zbGF2ZV9yZXQ7 CisgICAgYWNiLT5idWYgKz0gYWNiLT5zbGF2ZV9yZXQgKiA1MTI7CisKKyAgICBpZiAoYWNi LT5jdXJfc2VjdCA+PSBhY2ItPmVuZF9zZWN0KQorICAgIHsKKwkgICAgLyogcmVxdWVzdCBj b21wbGV0ZWQgKi8KKwkgICAgYWNiLT5jb21tb24uY2IoYWNiLT5jb21tb24ub3BhcXVlLCAw KTsKKwkgICAgcWVtdV9haW9fcmVsZWFzZShhY2IpOworCSAgICByZXR1cm47CisgICAgfQor ICAgIAorICAgIGFjYi0+c2xhdmVfY3VyICs9IGFjYi0+c2xhdmVfcmV0OworCisgICAgaWYg KGFjYi0+c2xhdmVfY3VyID49IGFjYi0+c2xhdmVfZW5kKQorICAgIHsKKwkgICAgYWNiLT53 aGljaF9zbGF2ZSsrOworCSAgICBhY2ItPnNsYXZlX3N0YXJ0ID0gMDsKKworCSAgICBhY2It PnNsYXZlX2VuZCA9IHMtPnNsYXZlX2JzW2FjYi0+d2hpY2hfc2xhdmVdLmJzLT50b3RhbF9z ZWN0b3JzOworCSAgICBpZiAoKHMtPnNsYXZlX2JzW2FjYi0+d2hpY2hfc2xhdmVdLnN0YXJ0 X3NlY3RvciArCisJCQkgICAgcy0+c2xhdmVfYnNbYWNiLT53aGljaF9zbGF2ZV0uYnMtPnRv dGFsX3NlY3RvcnMpID4KKwkJCSAgICBhY2ItPmVuZF9zZWN0KQorCSAgICAJYWNiLT5zbGF2 ZV9lbmQgPSBhY2ItPmVuZF9zZWN0IC0KKwkJCXMtPnNsYXZlX2JzW2FjYi0+d2hpY2hfc2xh dmVdLnN0YXJ0X3NlY3RvcjsKKworCSAgICBhY2ItPnNsYXZlX2N1ciA9IGFjYi0+c2xhdmVf c3RhcnQ7CisgICAgfQorCisgICAgYWNiLT5zbGF2ZV9yZXQgPSBhY2ItPnNsYXZlX2VuZCAt IGFjYi0+c2xhdmVfY3VyOworICAgIGFjYi0+c2xhdmVfYWlvY2IgPSBiZHJ2X2Fpb19yZWFk KHMtPnNsYXZlX2JzW2FjYi0+d2hpY2hfc2xhdmVdLmJzLAorCQkgICAgYWNiLT5zbGF2ZV9j dXIsIGFjYi0+YnVmLCBhY2ItPnNsYXZlX3JldCwKKwkJICAgIGNvbXBvc2l0ZV9haW9fcmVh ZF9jYiwgYWNiKTsKKyAgICBpZiAoYWNiLT5zbGF2ZV9haW9jYiA9PSBOVUxMKSBnb3RvIGZh aWw7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBvc2l0ZV9haW9fd3JpdGVfY2Iodm9pZCAqIG9w YXF1ZSwgaW50IHJldCkKK3sKKyAgICBDb21wb3NpdGVBSU9DQiAqYWNiID0gKENvbXBvc2l0 ZUFJT0NCICopb3BhcXVlOworICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJzID0gYWNiLT5jb21t b24uYnM7CisgICAgQkRSVlBhcnRTdGF0ZSAqcyA9IGJzLT5vcGFxdWU7CisKKyAgICBhY2It PnNsYXZlX2Fpb2NiID0gTlVMTDsKKyAgICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgZmFp bDoKKwkgICAgYWNiLT5jb21tb24uY2IoYWNiLT5jb21tb24ub3BhcXVlLCByZXQpOworCSAg ICBxZW11X2Fpb19yZWxlYXNlKGFjYik7CisJICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh Y2ItPmN1cl9zZWN0ICs9IGFjYi0+c2xhdmVfcmV0OworICAgIGFjYi0+YnVmICs9IGFjYi0+ c2xhdmVfcmV0ICogNTEyOworCisgICAgaWYgKGFjYi0+Y3VyX3NlY3QgPj0gYWNiLT5lbmRf c2VjdCkKKyAgICB7CisJICAgIGFjYi0+Y29tbW9uLmNiKGFjYi0+Y29tbW9uLm9wYXF1ZSwg MCk7CisJICAgIHFlbXVfYWlvX3JlbGVhc2UoYWNiKTsKKwkgICAgcmV0dXJuOworICAgIH0K KyAgICAKKyAgICBhY2ItPnNsYXZlX2N1ciArPSBhY2ItPnNsYXZlX3JldDsKKworICAgIGlm IChhY2ItPnNsYXZlX2N1ciA+PSBhY2ItPnNsYXZlX2VuZCkKKyAgICB7CisJICAgIGFjYi0+ d2hpY2hfc2xhdmUrKzsKKwkgICAgYWNiLT5zbGF2ZV9zdGFydCA9IDA7CisKKwkgICAgYWNi LT5zbGF2ZV9lbmQgPSBzLT5zbGF2ZV9ic1thY2ItPndoaWNoX3NsYXZlXS5icy0+dG90YWxf c2VjdG9yczsKKwkgICAgaWYgKChzLT5zbGF2ZV9ic1thY2ItPndoaWNoX3NsYXZlXS5zdGFy dF9zZWN0b3IgKworCQkJICAgIHMtPnNsYXZlX2JzW2FjYi0+d2hpY2hfc2xhdmVdLmJzLT50 b3RhbF9zZWN0b3JzKSA+CisJCQkgICAgYWNiLT5lbmRfc2VjdCkKKwkgICAgCWFjYi0+c2xh dmVfZW5kID0gYWNiLT5lbmRfc2VjdCAtCisJCQlzLT5zbGF2ZV9ic1thY2ItPndoaWNoX3Ns YXZlXS5zdGFydF9zZWN0b3I7CisKKwkgICAgYWNiLT5zbGF2ZV9jdXIgPSBhY2ItPnNsYXZl X3N0YXJ0OworICAgIH0KKworICAgIGFjYi0+c2xhdmVfcmV0ID0gYWNiLT5zbGF2ZV9lbmQg LSBhY2ItPnNsYXZlX2N1cjsKKyAgICBhY2ItPnNsYXZlX2Fpb2NiID0gYmRydl9haW9fd3Jp dGUocy0+c2xhdmVfYnNbYWNiLT53aGljaF9zbGF2ZV0uYnMsCisJCSAgICBhY2ItPnNsYXZl X2N1ciwgYWNiLT5idWYsIGFjYi0+c2xhdmVfcmV0LAorCQkgICAgY29tcG9zaXRlX2Fpb193 cml0ZV9jYiwgYWNiKTsKKyAgICBpZiAoYWNiLT5zbGF2ZV9haW9jYiA9PSBOVUxMKSBnb3Rv IGZhaWw7Cit9CisKK3N0YXRpYyBDb21wb3NpdGVBSU9DQiAqIGNvbXBvc2l0ZV9haW9fc2V0 dXAoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCisJCWludDY0X3Qgc2VjdG9yX251bSwgdWludDhf dCAqYnVmLCBpbnQgbmJfc2VjdG9ycywKKwkJQmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAq Y2IsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBCRFJWUGFydFN0YXRlICpzID0gYnMtPm9wYXF1 ZTsKKyAgICBDb21wb3NpdGVBSU9DQiAqYWNiOworICAgIGludCBpOworCisgICAgYWNiID0g cWVtdV9haW9fZ2V0KGJzLCBjYiwgb3BhcXVlKTsKKyAgICBpZiAoIWFjYikgcmV0dXJuIE5V TEw7CisKKyAgICBhY2ItPnN0YXJ0X3NlY3QgPSBzZWN0b3JfbnVtOworICAgIGFjYi0+ZW5k X3NlY3QgPSBzZWN0b3JfbnVtICsgbmJfc2VjdG9yczsKKyAgICBhY2ItPmN1cl9zZWN0ID0g c2VjdG9yX251bTsKKyAgICBhY2ItPmJ1ZiA9IGJ1ZjsKKyAgICBmb3IgKGkgPSAwOyBpIDwg cy0+c2xhdmVfY291bnQ7IGkgKyspCisgICAgeworCSAgICBpZiAoKHMtPnNsYXZlX2JzW2ld LnN0YXJ0X3NlY3RvciArIHMtPnNsYXZlX2JzW2ldLmJzLT50b3RhbF9zZWN0b3JzCisJCQkg ICAgPiBzZWN0b3JfbnVtKSAmJiAocy0+c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yIDwKKwkJ CQkgICAgc2VjdG9yX251bSkpCisJICAgIHsKKwkJICAgIGFjYi0+d2hpY2hfc2xhdmUgPSBp OworCQkgICAgYnJlYWs7CisJICAgIH0KKyAgICB9CisgICAgYWNiLT5zbGF2ZV9zdGFydCA9 IHNlY3Rvcl9udW0gLSBzLT5zbGF2ZV9ic1thY2ItPndoaWNoX3NsYXZlXS5zdGFydF9zZWN0 b3I7CisgICAgYWNiLT5zbGF2ZV9lbmQgPSBzLT5zbGF2ZV9ic1thY2ItPndoaWNoX3NsYXZl XS5icy0+dG90YWxfc2VjdG9yczsKKyAgICBpZiAoKHMtPnNsYXZlX2JzW2FjYi0+d2hpY2hf c2xhdmVdLnN0YXJ0X3NlY3RvciArCisJCSAgICBzLT5zbGF2ZV9ic1thY2ItPndoaWNoX3Ns YXZlXS5icy0+dG90YWxfc2VjdG9ycykgPgorCQkgICAgYWNiLT5lbmRfc2VjdCkKKyAgICAJ YWNiLT5zbGF2ZV9lbmQgPSBhY2ItPmVuZF9zZWN0IC0KKwkJcy0+c2xhdmVfYnNbYWNiLT53 aGljaF9zbGF2ZV0uc3RhcnRfc2VjdG9yOworICAgIGFjYi0+c2xhdmVfY3VyID0gYWNiLT5z bGF2ZV9zdGFydDsKKyAgICBhY2ItPnNsYXZlX3JldCA9IDA7CisgICAgYWNiLT5zbGF2ZV9h aW9jYiA9IE5VTEw7CisgICAgcmV0dXJuIGFjYjsKK30KKworc3RhdGljIEJsb2NrRHJpdmVy QUlPQ0IgKiBjb21wb3NpdGVfYWlvX3JlYWQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCisJCWlu dDY0X3Qgc2VjdG9yX251bSwgdWludDhfdCAqYnVmLCBpbnQgbmJfc2VjdG9ycywKKwkJQmxv Y2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBDb21w b3NpdGVBSU9DQiAqYWNiOworCisgICAgYWNiID0gY29tcG9zaXRlX2Fpb19zZXR1cChicywg c2VjdG9yX251bSwgYnVmLCBuYl9zZWN0b3JzLCBjYiwgb3BhcXVlKTsKKyAgICBpZiAoIWFj YikgcmV0dXJuIE5VTEw7CisKKyAgICBjb21wb3NpdGVfYWlvX3JlYWRfY2IoYWNiLCAwKTsK KyAgICByZXR1cm4gJmFjYi0+Y29tbW9uOworfQorCitzdGF0aWMgQmxvY2tEcml2ZXJBSU9D QiAqIGNvbXBvc2l0ZV9haW9fd3JpdGUoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCisJCWludDY0 X3Qgc2VjdG9yX251bSwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbmJfc2VjdG9ycywKKwkJ QmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBD b21wb3NpdGVBSU9DQiAqYWNiOworCisgICAgYWNiID0gY29tcG9zaXRlX2Fpb19zZXR1cChi cywgc2VjdG9yX251bSwgKHVpbnQ4X3QqKWJ1ZiwgbmJfc2VjdG9ycywgY2IsIG9wYXF1ZSk7 CisgICAgaWYgKCFhY2IpIHJldHVybiBOVUxMOworCisgICAgY29tcG9zaXRlX2Fpb193cml0 ZV9jYihhY2IsIDApOworICAgIHJldHVybiAmYWNiLT5jb21tb247Cit9CisKK3N0YXRpYyB2 b2lkIGNvbXBvc2l0ZV9haW9fY2FuY2VsKEJsb2NrRHJpdmVyQUlPQ0IgKmJsb2NrYWNiKQor eworCUNvbXBvc2l0ZUFJT0NCICogYWNiID0gKENvbXBvc2l0ZUFJT0NCICopYmxvY2thY2I7 CisJaWYgKGFjYi0+c2xhdmVfYWlvY2IpCisJCWJkcnZfYWlvX2NhbmNlbChhY2ItPnNsYXZl X2Fpb2NiKTsKKwlxZW11X2Fpb19yZWxlYXNlKGFjYik7Cit9CisKK3N0YXRpYyB2b2lkIGNv bXBvc2l0ZV9jbG9zZShCbG9ja0RyaXZlclN0YXRlICpicykKK3sKKyAgICBCRFJWUGFydFN0 YXRlICpzID0gYnMtPm9wYXF1ZTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwg cy0+c2xhdmVfY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGJkcnZfY2xvc2Uocy0+c2xh dmVfYnNbaV0uYnMpOworICAgICAgICBxZW11X2ZyZWUocy0+c2xhdmVfYnNbaV0uYnMpOwor ICAgIH0KKyAgICBxZW11X2ZyZWUocy0+c2xhdmVfYnMpOworICAgIHMtPnNsYXZlX2JzID0g TlVMTDsKK30KKworc3RhdGljIGludCBjb21wb3NpdGVfY3JlYXRlKGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBpbnQ2NF90IHRvdGFsX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqYmFja2luZ19maWxlLCBpbnQgZmxhZ3MpCit7CisgICAgLyogd2hhdCB3b3Vs ZCBiZSB0aGUgcG9pbnQuLi4ganVzdCBtYWtlIGEgcmF3IG9yIHFjb3cgKi8KKyAgICByZXR1 cm4gLUVOT1RTVVA7Cit9CisKK0Jsb2NrRHJpdmVyIGJkcnZfY29tcG9zaXRlID0geworICAg ICJjb21wb3NpdGUiLAorICAgIHNpemVvZihCRFJWUGFydFN0YXRlKSwKKyAgICBjb21wb3Np dGVfcHJvYmUsCisgICAgY29tcG9zaXRlX29wZW4sCisgICAgY29tcG9zaXRlX3JlYWQsCisg ICAgY29tcG9zaXRlX3dyaXRlLAorICAgIGNvbXBvc2l0ZV9jbG9zZSwKKyAgICBjb21wb3Np dGVfY3JlYXRlLAorICAgIC5iZHJ2X2Fpb19yZWFkID0gY29tcG9zaXRlX2Fpb19yZWFkLAor ICAgIC5iZHJ2X2Fpb193cml0ZSA9IGNvbXBvc2l0ZV9haW9fd3JpdGUsCisgICAgLmJkcnZf YWlvX2NhbmNlbCA9IGNvbXBvc2l0ZV9haW9fY2FuY2VsLAorICAgIC5haW9jYl9zaXplID0g c2l6ZW9mKENvbXBvc2l0ZUFJT0NCKSwKKworICAgIC5wcm90b2NvbF9uYW1lID0gImNvbXBv c2l0ZSIsCisgICAgLmJkcnZfcHJlYWQgPSBjb21wb3NpdGVfcHJlYWQsCisgICAgLmJkcnZf cHdyaXRlID0gY29tcG9zaXRlX3B3cml0ZSwKK307CisKZGlmZiAtdXIgLS1uZXctZmlsZSAt LWV4Y2x1ZGU9LiMqIC0tZXhjbHVkZT0qQ1ZTKiAtLWV4Y2x1ZGU9Kmdlbi1vcCogLS1leGNs dWRlPWJsb2NrLWNvbXBvc2l0ZTEuYyAtLWV4Y2x1ZGU9KmNvbmZpZyogLS1leGNsdWRlPSot c29mdG1tdSogcWVtdS9ibG9jay1wYXJ0aXRpb24uYyBxZW11Lm5vdGxhc3QvYmxvY2stcGFy dGl0aW9uLmMKLS0tIHFlbXUvYmxvY2stcGFydGl0aW9uLmMJV2VkIERlYyAzMSAxOTowMDow MCAxOTY5CisrKyBxZW11Lm5vdGxhc3QvYmxvY2stcGFydGl0aW9uLmMJV2VkIE1hciAgNyAx MDo0NzowNiAyMDA3CkBAIC0wLDAgKzEsNDE3IEBACisvKgorICogQmxvY2sgZHJpdmVyIHRv IHVzZSBwYXJ0aXRpb25zIGFzIGhhcmQgZGlza3MKKyAqIAorICogQ29weXJpZ2h0IChjKSAy MDA3IEppbSBCcm93bgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKi8KKworLyogd2UgbmVlZCB0aGlzIGlu IG9yZGVyIHRvIGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgc2l6ZXMgb2YgdGhlIGluZGl2 aWR1YWwgcGFydGl0aW9ucyAqLworI2luY2x1ZGUgImJsb2NrX2NvbXBvc2l0ZS5oIgorCisv KiBpbiBzZWN0b3JzICovCisjZGVmaW5lIE1CUl9TSVpFIDYzCisKKy8qIGlkZWFsbHkgdGhl c2Ugd291bGQgYmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkICovCisjZGVmaW5lIE1BWF9QQVJU X1NUUklORyA0MDk2CisjZGVmaW5lIE1BWF9QQVJUUyAxMCAvKiBwcm9iYWJseSBvbmx5IG5l ZWQgNCAqLworCit0eXBlZGVmIHN0cnVjdCBDb21wb3NpdGVEcml2ZXJTdGF0ZSB7CisgICAg QmxvY2tEcml2ZXJTdGF0ZSAqIGJzOworfSBDb21wb3NpdGVEcml2ZXJTdGF0ZTsKKworc3Rh dGljIGludCBwYXJ0aXRpb25fcHJvYmUoY29uc3QgdWludDhfdCAqYnVmLCBpbnQgYnVmX3Np emUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIGlmIChzdHJzdGFydChmaWxlbmFt ZSwgInBhcnRpdGlvbjoiLCBOVUxMKSkKKyAgICAgICAgcmV0dXJuIDEwMDsKKyAgICByZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBwYXJ0aXRpb25fc2V0dXAoQmxvY2tEcml2ZXJTdGF0 ZSAqYnMsIGNvbnN0IGNoYXIgKm5maWxlbmFtZSwgaW50IGZsYWdzKQoreworICAgIENvbXBv c2l0ZURyaXZlclN0YXRlICpzOworICAgIEJsb2NrRHJpdmVyU3RhdGUgKiBiYnM7CisgICAg aW50NjRfdCBzaXplLCB0b3RhbHNlY3RvcnM7CisgICAgaW50IGJvb3RfZmQsIGksIGJvb3Rp ZCA9IDEsIHBhcnRpdGlvbl9jb3VudCA9IDA7CisgICAgaW50IGhlYWQgPSAwLCBjeWxpbmRl ciA9IDAsIHNlY3Rvciwgb2xkc3RhcnQ7CisgICAgaW50IG9sZGhlYWQsIG9sZGN5bGluZGVy LCBvbGRzZWN0b3IsIG9yaWdzZWN0b3IgPSAwOworICAgIGludCBzeXNpZFtNQVhfUEFSVFNd OworICAgIGludDY0X3Qgc2VjdHNpemVzW01BWF9QQVJUU107IC8qIHVzZWQgb25seSBieSB3 cml0ZW91dCAqLworICAgIGNvbnN0IGNoYXIgKiB6ZmlsZW5hbWUgPSAmKG5maWxlbmFtZVsx MF0pLCAqIG5wdHIgPSB6ZmlsZW5hbWU7CisgICAgY2hhciAqIGZpbGVuYW1lLCAqIHN0cmVy ciA9IE5VTEwsICogYm9vdGxvYWRlciwgKiB3cml0ZW91dCA9IE5VTEw7CisgICAgY2hhciBt YnJfZGF0YVtNQlJfU0laRSo1MTJdLCBwYXJ0aXRpb25fc3RyaW5nW01BWF9QQVJUX1NUUklO R107CisgICAgcGFydGl0aW9uX3N0cmluZ1swXSA9ICdcMCc7CisgICAgaWYgKGJzICE9IE5V TEwpCisgICAgcyA9IGJzLT5vcGFxdWU7CisgICAgZWxzZQorCSAgIHMgPSBOVUxMOworCisg ICAgc3RyY2F0KHBhcnRpdGlvbl9zdHJpbmcsICJjb21wb3NpdGU6cmFtOjYzLCIpOyAvKjYz ID09IE1CUl9TSVpFICovCisgICAgYm9vdGxvYWRlciA9IHN0cmR1cCgiYm9vdG1ici5iaW4i KTsKKyAgICBpZiAoYnMgIT0gTlVMTCkKKyAgICBicy0+cmVhZF9vbmx5ID0gMDsKKworICAg IGludCBuID0gMDsKKyAgICB3aGlsZSAobnB0ciAhPSBOVUxMKQorICAgIHsKKyAgICAJbnB0 ciA9IHN0cmNocih6ZmlsZW5hbWUsICcsJykrMTsKKyAgICAJaWYgKChucHRyLTEpICE9IE5V TEwpCisgICAgCXsKKyAgICAJCWZpbGVuYW1lID0gc3RybmR1cCh6ZmlsZW5hbWUsIChzaXpl X3QpKChucHRyLTEpLXpmaWxlbmFtZSkpOworICAgIAkJemZpbGVuYW1lID0gbnB0cjsKKyAg ICAJfQorICAgIAllbHNlCisgICAgCXsKKyAgICAJCWZpbGVuYW1lID0gc3RyZHVwKHpmaWxl bmFtZSk7CisJCW5wdHIgPSBOVUxMOworICAgIAl9CisKKwlpZiAoc3RybmNtcChmaWxlbmFt ZSwgInN5c2lkPSIsIDYpID09IDApCisJeworCQkvKiBqdXN0IHBhc3MgaW4gYW55IHN5c2lk LCBlLmcuIDB4ODIgb3IgMHgwQyAqLworCQljaGFyIGZmZFtzdHJsZW4oZmlsZW5hbWUpXTsK KwkJZmZkWzBdID0gJyAnOworCQlmZmRbMV0gPSAnXDAnOworCQlzdHJjYXQoZmZkLCBmaWxl bmFtZSs2KTsKKwkJc3lzaWRbcGFydGl0aW9uX2NvdW50LTFdID0gKGludClzdHJ0b2woZmZk LCAmc3RyZXJyLCAwKTsKKworCQlpZiAoKnN0cmVyciAhPSAnXDAnKSAvKiBkZXRlY3QgZXJy b3IgaW4gY29udmVyc2lvbiAqLworCQkJc3lzaWRbcGFydGl0aW9uX2NvdW50LTFdID0gMHgw QzsgLyogZGVmYXVsdCB0byB3aW45OCBGQVQzMiAqLworCX0KKwllbHNlIGlmIChzdHJuY21w KGZpbGVuYW1lLCAiYm9vdD0iLCA1KSA9PSAwKQorCXsKKwkJLyogYmV0d2VlbiAxIGFuZCA0 LCAxIHNlbGVjdHMgdGhlIGZpcnN0IHBhcnRpdGlvbiwgNCBzZWxlY3RzIHRoZSBsYXN0IHBh cnRpdGlvbiAoaWYgeW91IGFyZSBtYWtpbmcgYSBoYXJkIGRpc2sgd2l0aCA0IHBhcnRpdGlv bnMgaW4gaXQpICovCisJCWNoYXIgZmZkW3N0cmxlbihmaWxlbmFtZSldOworCQlpbnQgYm9v dGlkZjsKKwkJZmZkWzBdID0gJyAnOworCQlmZmRbMV0gPSAnXDAnOworCQlzdHJjYXQoZmZk LCBmaWxlbmFtZSs1KTsKKwkJYm9vdGlkZiA9IChpbnQpc3RydG9sKGZmZCwgJnN0cmVyciwg MCk7CisKKwkJaWYgKCpzdHJlcnIgPT0gJ1wwJykgLyogbm8gZGV0ZWN0IGVycm9yIGluIGNv bnZlcnNpb24gKi8KKwkJCWJvb3RpZCA9IGJvb3RpZGY7CisJfQorCWVsc2UgaWYgKHN0cm5j bXAoZmlsZW5hbWUsICJib290bG9hZGVyPSIsIDExKSA9PSAwKQorCXsKKwkJZnJlZShib290 bG9hZGVyKTsKKwkJYm9vdGxvYWRlciA9IHN0cmR1cChmaWxlbmFtZSsxMSk7CisJfQorCWVs c2UgaWYgKHN0cm5jbXAoZmlsZW5hbWUsICJvdXQ9IiwgNCkgPT0gMCkKKwl7CisJCS8qIHBl cmhhcHMgYSB3YXJuaW5nIGlmIG91dD1maWxlLmltZyB3YXMgcGFzc2VkIHRvIHBhcnRpdGlv bl9vcGVuKCkgPyAqLworCQkvKiBpZiBtdWx0aXBsZSBvdXQ9IHMgYXJlIGdpdmVuIHdlIHVz ZSB0aGUgbGFzdCBvbmUgLSBwZXJoYXBzIHdlIHNob3VsZCB3YXJuIHdoZW4gd2UgZG8gdGhp cz8gKi8KKwkJaWYgKHdyaXRlb3V0ICE9IE5VTEwpIGZyZWUod3JpdGVvdXQpOworCQl3cml0 ZW91dCA9IHN0cmR1cChmaWxlbmFtZSs0KTsKKwl9CisJZWxzZQorCXsKKwkJLyogdGhlIHN0 cmluZyBzaG91bGRuJ3Qgc3RhcnQgd2l0aCBhICcsJyAqLworCQlpZiAobikKKwkJCXN0cmNh dChwYXJ0aXRpb25fc3RyaW5nLCAiLCIpOworCQllbHNlCisJCQluID0gMTsKKworCQlzdHJj YXQocGFydGl0aW9uX3N0cmluZywgZmlsZW5hbWUpOworCQlwYXJ0aXRpb25fY291bnQgKys7 CisJCXN5c2lkW3BhcnRpdGlvbl9jb3VudC0xXSA9IDB4MEM7IC8qIGRlZmF1bHQgdG8gd2lu OTggRkFUMzIgKi8KKwkJaWYgKHMgPT0gTlVMTCkKKwkJeworCQkJaW50IGZkID0gb3Blbihm aWxlbmFtZSwgT19SRE9OTFkpOworCQkJaWYgKGZkID09IC0xKQorCQkJeworCQkJCWZyZWUo Ym9vdGxvYWRlcik7CisJCQkJaWYgKHdyaXRlb3V0ICE9IE5VTEwpIGZyZWUod3JpdGVvdXQp OworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWludDY0X3Qgc3NpemVkID0gbHNlZWsoZmQs IDAsIFNFRUtfRU5EKTsKKwkJCWNsb3NlKGZkKTsKKwkJCXNlY3RzaXplc1twYXJ0aXRpb25f Y291bnQtMV0gPSBzc2l6ZWQ7CisJCX0KKwl9CisJZnJlZShmaWxlbmFtZSk7CisgICAgfQor CisgICAgaWYgKHMgIT0gTlVMTCkKKyAgICB7CisKKyAgICBzLT5icyA9IHFlbXVfbWFsbG9j eihzaXplb2YoQmxvY2tEcml2ZXJTdGF0ZSkpOworICAgIGlmICgocy0+YnMgPT0gTlVMTCkg fHwgKGJkcnZfb3BlbjIocy0+YnMsIHBhcnRpdGlvbl9zdHJpbmcsIDAsIE5VTEwpICE9IDAp KQorICAgIHsKKwkgICAgZnJlZShib290bG9hZGVyKTsKKwkgICAgaWYgKHdyaXRlb3V0ICE9 IE5VTEwpIGZyZWUod3JpdGVvdXQpOworCSAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg YnMtPnRvdGFsX3NlY3RvcnMgPSBzLT5icy0+dG90YWxfc2VjdG9yczsKKyAgICBicy0+cmVh ZF9vbmx5ID0gcy0+YnMtPnJlYWRfb25seTsKKworICAgIH0KKworICAgIC8qIGdldCB0aGUg ZmFrZSBNQlIgKi8KKyAgICBtZW1zZXQobWJyX2RhdGEsIDAsIE1CUl9TSVpFKjUxMik7Cisg ICAgYm9vdF9mZCA9IG9wZW4oYm9vdGxvYWRlciwgT19SRE9OTFkpOworICAgIGlmIChib290 X2ZkID09IC0xKQorICAgIHsKKwkgICAgcHJpbnRmKCJXYXJuaW5nOiBmYWlsZWQgdG8gb3Bl biBib290bWJyLmJpbiAtIE1CUiB3aWxsIG5vdCBiZSBib290YWJsZVxuIik7CisgICAgfQor ICAgIGVsc2UKKyAgICB7CisJICAgIGlmIChyZWFkKGJvb3RfZmQsIG1icl9kYXRhLCBNQlJf U0laRSo1MTIpID09IC0xKQorCSAgICB7CisJICAgIAlwcmludGYoIldhcm5pbmc6IGZhaWxl ZCB0byByZWFkIGJvb3RtYnIuYmluIC0gTUJSIHdpbGwgbm90IGJlIGJvb3RhYmxlXG4iKTsK KwkgICAgfQorCSAgICBjbG9zZShib290X2ZkKTsKKyAgICB9CisKKyAgICBvbGRzdGFydCA9 IDB4M0Y7IC8vM0YgPT0gNjMKKyAgICBvbGRoZWFkID0gMHgwMTsKKyAgICBvbGRzZWN0b3Ig PSAweDAxOworICAgIG9sZGN5bGluZGVyID0gMHgwMDsKKworICAgIGZvciAoaSA9IDA7IGkg PCBwYXJ0aXRpb25fY291bnQ7IGkrKykKKyAgICB7CisKKyAgICAvKiBzZXQgdXAgYy9oL3Mg Ki8KKyAgICBpZiAoYnMgIT0gTlVMTCkKKyAgICB7CisKKyAgICAvKmlmIChpID09IHBhcnRp dGlvbl9jb3VudC0xKQorICAgIHsKKyAgICB0b3RhbHNlY3RvcnMgPSBicy0+dG90YWxfc2Vj dG9yczsKKyAgICB9CisgICAgZWxzZQorICAgIHsqLworICAgIC8qIHJlbWVtYmVyIHRoYXQg dGhlIHZlcnkgZmlyc3Qgc2xhdmUgaW4gdGhlIGNvbXBvc2l0ZSBpcyB0aGUgcmFtIGltYWdl ICoqCisgICAgICogdGhhdCB3ZSdyZSB1c2luZyB0byBzdG9yZSB0aGUgTUJSLCBzbyB0aGUg c2Vjb25kIHNsYXZlIGluIHRoZSBjb21wb3NpdGUKKyAgICAgKiBpcyB0aGUgZmlyc3QgcGFy dGl0aW9uICovCisgICAgYmJzID0gKChCRFJWUGFydFN0YXRlKilzLT5icy0+b3BhcXVlKS0+ c2xhdmVfYnNbaSsxXS5iczsKKyAgICB0b3RhbHNlY3RvcnMgPSBiYnMtPnRvdGFsX3NlY3Rv cnM7CisgICAgLyp9Ki8KKworICAgIH0KKyAgICBlbHNlCisgICAgeworCSAgICB0b3RhbHNl Y3RvcnMgPSBzZWN0c2l6ZXNbaV0gLyA1MTI7CisgICAgfQorCisgICAgLypzaXplID0gdG90 YWxzZWN0b3JzICogNTEyOyovCisgICAgc2l6ZSA9IG9sZHN0YXJ0ICogNTEyOworICAgIG9y aWdzZWN0b3IgKz0gdG90YWxzZWN0b3JzOworICAgIHdoaWxlIChvcmlnc2VjdG9yID4gNjMp CisgICAgeworCSAgICBvcmlnc2VjdG9yIC09IDYzOworCSAgICBoZWFkICs9IDE7CisJICAg IHdoaWxlIChoZWFkID4gMTYpCisJICAgIHsKKwkJICAgIGhlYWQgLT0gMTY7CisJCSAgICBj eWxpbmRlciArPSAxOworCSAgICB9CisgICAgfQorICAgIC8qCisgICAgY3lsaW5kZXIgPSBz aXplLyg2MyoxNik7CisgICAgaGVhZCA9IDE2OworICAgIHNlY3RvciA9IDYzOworICAgICov CisgICAgLyogc29tZSBiaXQgdHdpZGRsaW5nIGhlcmUgKi8KKyAgICBzZWN0b3IgPSAoKChj eWxpbmRlciA+PiA4KSAmIDMpIDw8IDYpICsgb3JpZ3NlY3RvcjsKKworICAgIC8qIHNldCB1 cCBmYWtlIE1CUiAtIGVhY2ggcGFydGl0aW9uIGVudHJ5IGlzIDE2IGJ5dGVzIGxvbmcgKi8K KyAgICAvKiBzdGFydCA0NDYgKi8KKyAgICAvKiBzZXQgd2hpY2ggcGFydGl0aW9uIGlzIG1l YW50IHRvIGJlIGJvb3RhYmxlICh0aGF0IHdlJ2xsIGJvb3QgZnJvbSkgKi8KKyAgICBpZiAo aSA9PSBib290aWQpCisgICAgbWJyX2RhdGFbNDQ2KygoaS0xKSoxNildID0gMHg4MDsKKyAg ICBlbHNlCisgICAgbWJyX2RhdGFbNDQ2KygoaS0xKSoxNildID0gMHgwMDsKKyAgICAvKiBz dGFydCBoZWFkICovCisgICAgbWJyX2RhdGFbNDQ3KygoaS0xKSoxNildID0gb2xkaGVhZDsK KyAgICAvKiBzdGFydCBzZWN0b3IgLSBvbmx5IGZpcnN0IDYgYml0cyAqLworICAgIG1icl9k YXRhWzQ0OCsoKGktMSkqMTYpXSA9IG9sZHNlY3RvcjsKKyAgICAvKiBzdGFydCBjeWxpbmRl ciAtIHRoaXMgYnl0ZSBwbHVzIDIgYml0cyBmcm9tIG1icl9kYXRhWzQ0N10gKi8KKyAgICBt YnJfZGF0YVs0NDkrKChpLTEpKjE2KV0gPSBvbGRjeWxpbmRlcjsKKyAgICAvKiBzeXN0ZW0g SUQgKi8KKyAgICBtYnJfZGF0YVs0NTArKChpLTEpKjE2KV0gPSBzeXNpZFtpLTFdOworICAg IC8qIGVuZGluZyBoZWFkICovCisgICAgbWJyX2RhdGFbNDUxKygoaS0xKSoxNildID0gaGVh ZDsKKyAgICAvKiBlbmRpbmcgc2VjdG9yICovCisgICAgbWJyX2RhdGFbNDUyKygoaS0xKSox NildID0gc2VjdG9yOworICAgIC8qIGVuZGluZyBjeWxpbmRlciAqLworICAgIG1icl9kYXRh WzQ1MysoKGktMSkqMTYpXSA9IGN5bGluZGVyOworICAgIC8qIGFic29sdXRlIHN0YXJ0IHNl Y3RvciAtIDQgYnl0ZXMvRFdPUkQgKi8KKyAgICAvL21icl9kYXRhWzQ1NCsoaSoxNildID0g MHgzRjsgLy8gM0YgPSA2MworICAgICooKHVpbnQzMl90KikobWJyX2RhdGErNDU0KygoaS0x KSoxNikpKSA9IGNwdV90b19sZTMyKG9sZHN0YXJ0KTsKKyAgICAvKiBhYnNvbHV0ZSB0b3Rh bCBudW1iZXIgb2Ygc2VjdG9ycyAtIDQgYnl0ZXMvRFdPUkQgKi8KKyAgICAqKCh1aW50MzJf dCopKG1icl9kYXRhKzQ1OCsoKGktMSkqMTYpKSkgPSBjcHVfdG9fbGUzMih0b3RhbHNlY3Rv cnMpOworICAgIC8qIGVuZCA0NjIgKi8KKworICAgIG9sZHN0YXJ0ID0gb2xkc3RhcnQgKyB0 b3RhbHNlY3RvcnM7CisgICAgb2xkaGVhZCA9IGhlYWQ7CisgICAgb2xkY3lsaW5kZXIgPSBj eWxpbmRlcjsKKyAgICBvbGRzZWN0b3IgPSBvcmlnc2VjdG9yOworCisgICAgaW50IG9yaWdv bGRzZWN0b3IgPSBvcmlnc2VjdG9yOworICAgIG9yaWdvbGRzZWN0b3IrKzsKKyAgICBpZiAo b3JpZ29sZHNlY3RvciA+IDYzKQorICAgIHsKKwkgICAgb2xkaGVhZCsrOworCSAgICBvcmln b2xkc2VjdG9yID0gMHgwMTsKKwkgICAgaWYgKG9sZGhlYWQgPiAxNikKKwkgICAgeworCQkg ICAgb2xkY3lsaW5kZXIrKzsKKwkJICAgIG9sZGhlYWQgPSAweDAxOworCSAgICB9CisgICAg fQorICAgIC8qIHNvbWUgbW9yZSBiaXQgdHdpZGRsaW5nIGhlcmUgKi8KKyAgICBvbGRzZWN0 b3IgPSAoKChjeWxpbmRlciA+PiA4KSAmIDMpIDw8IDYpICsgb3JpZ29sZHNlY3RvcjsKKwor ICAgIH0KKworICAgIC8qIHNldCB0aGUgTUJSIHNlY3RvciBzaWduYXR1cmUgKi8KKyAgICBt YnJfZGF0YVs1MTBdID0gMHg1NTsKKyAgICBtYnJfZGF0YVs1MTFdID0gMHhBQTsKKworICAg IC8qIG5vdyB3cml0ZSBpdCB0byB0aGUgcmFtIGltYWdlICovCisgICAgLyoKKyAgICBicy0+ Ym9vdF9zZWN0b3JfZW5hYmxlZCA9IDA7CisgICAgcy0+YnMtPmJvb3Rfc2VjdG9yX2VuYWJs ZWQgPSAwOworICAgIGJicyA9ICgoQkRSVlBhcnRTdGF0ZSopcy0+YnMtPm9wYXF1ZSktPnNs YXZlX2JzWzBdLmJzOyB0aGUgcmFtIGltYWdlCisgICAgYmJzLT5ib290X3NlY3Rvcl9lbmFi bGVkID0gMDsKKyAgICAqLworICAgIGlmIChzICE9IE5VTEwpCisgICAgeworCSAgICBpZiAo YmRydl93cml0ZShzLT5icywgMCwgbWJyX2RhdGEsIE1CUl9TSVpFKSAhPSAwKQorCSAgICBw cmludGYoIldhcm5pbmc6IGZhaWxlZCB0byBjb21taXQgTUJSIGFuZCBwYXJ0aXRpb24gdGFi bGUgdG8gZmFrZSBoYXJkIGRpc2tcbiIpOworCisJICAgIGJkcnZfc2V0X2Jvb3Rfc2VjdG9y KGJzLCBtYnJfZGF0YSwgNTEyKTsKKwkgICAgYmRydl9zZXRfYm9vdF9zZWN0b3Iocy0+YnMs IG1icl9kYXRhLCA1MTIpOworCSAgICBiZHJ2X3NldF9ib290X3NlY3RvcigoKEJEUlZQYXJ0 U3RhdGUqKXMtPmJzLT5vcGFxdWUpLT5zbGF2ZV9ic1swXS5icyAsIG1icl9kYXRhLCA1MTIp OworICAgIH0KKyAgICBlbHNlIGlmIChzID09IE5VTEwpCisgICAgeworCSAgICAvKiB3cml0 ZSBtYnJfZGF0YSB0byB3cml0ZW91dCAoc3BlY2lmaWVkIGJ5IG91dD1maWxlLmltZykgKi8K KwkgICAgaW50IGZkID0gb3Blbih3cml0ZW91dCwgT19XUk9OTFkgfCBPX1RSVU5DKTsKKwkg ICAgaWYgKGZkID09IC0xKQorCSAgICB7CisgICAgCQlpZiAod3JpdGVvdXQgIT0gTlVMTCkg ZnJlZSh3cml0ZW91dCk7CisJCXJldHVybiAtMTsKKwkgICAgfQorCSAgICAvKiBGSVhNRSBY WFggY2hlY2sgZm9yIGVycm9ycyBvbiB3cml0ZSEgKi8KKwkgICAgd3JpdGUoZmQsIG1icl9k YXRhLCBNQlJfU0laRSo1MTIpOworCSAgICBjbG9zZShmZCk7CisgICAgfQorICAgIGlmICh3 cml0ZW91dCAhPSBOVUxMKSBmcmVlKHdyaXRlb3V0KTsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IHBhcnRpdGlvbl9vcGVuKEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBjb25z dCBjaGFyICpuZmlsZW5hbWUsIGludCBmbGFncykKK3sKKyAgICByZXR1cm4gcGFydGl0aW9u X3NldHVwKGJzLCBuZmlsZW5hbWUsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBwYXJ0aXRp b25fcmVhZChCbG9ja0RyaXZlclN0YXRlICpicywgaW50NjRfdCBzZWN0b3JfbnVtLCAKKyAg ICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLCBpbnQgbmJfc2VjdG9ycykKK3sKKyAg ICBDb21wb3NpdGVEcml2ZXJTdGF0ZSAqcyA9IGJzLT5vcGFxdWU7CisgICAgcmV0dXJuIGJk cnZfcmVhZChzLT5icywgc2VjdG9yX251bSwgYnVmLCBuYl9zZWN0b3JzKTsKK30KKworc3Rh dGljIGludCBwYXJ0aXRpb25fd3JpdGUoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGludDY0X3Qg c2VjdG9yX251bSwgCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWYs IGludCBuYl9zZWN0b3JzKQoreworICAgIENvbXBvc2l0ZURyaXZlclN0YXRlICpzID0gYnMt Pm9wYXF1ZTsKKyAgICByZXR1cm4gYmRydl93cml0ZShzLT5icywgc2VjdG9yX251bSwgYnVm LCBuYl9zZWN0b3JzKTsKK30KKworc3RhdGljIGludCBwYXJ0aXRpb25fcHJlYWQoQmxvY2tE cml2ZXJTdGF0ZSAqYnMsIGludDY0X3Qgb2Zmc2V0LCAKKyAgICAgICAgICAgICAgICAgICAg dWludDhfdCAqYnVmLCBpbnQgY291bnQpCit7CisgICAgQ29tcG9zaXRlRHJpdmVyU3RhdGUg KnMgPSBicy0+b3BhcXVlOworICAgIHJldHVybiBiZHJ2X3ByZWFkKHMtPmJzLCBvZmZzZXQs IGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgaW50IHBhcnRpdGlvbl9wd3JpdGUoQmxvY2tE cml2ZXJTdGF0ZSAqYnMsIGludDY0X3Qgb2Zmc2V0LCAKKyAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGNvdW50KQoreworICAgIENvbXBvc2l0ZURyaXZl clN0YXRlICpzID0gYnMtPm9wYXF1ZTsKKyAgICByZXR1cm4gYmRydl9wd3JpdGUocy0+YnMs IG9mZnNldCwgYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyBCbG9ja0RyaXZlckFJT0NCKiBw YXJ0aXRpb25fYWlvX3JlYWQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsCisJCWludDY0X3Qgc2Vj dG9yX251bSwgdWludDhfdCAqYnVmLCBpbnQgbmJfc2VjdG9ycywKKwkJQmxvY2tEcml2ZXJD b21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBDb21wb3NpdGVEcml2 ZXJTdGF0ZSAqcyA9IGJzLT5vcGFxdWU7CisgICAgcmV0dXJuIGJkcnZfYWlvX3JlYWQocy0+ YnMsIHNlY3Rvcl9udW0sIGJ1ZiwgbmJfc2VjdG9ycywgY2IsIG9wYXF1ZSk7Cit9CisKK3N0 YXRpYyBCbG9ja0RyaXZlckFJT0NCKiBwYXJ0aXRpb25fYWlvX3dyaXRlKEJsb2NrRHJpdmVy U3RhdGUgKmJzLAorCQlpbnQ2NF90IHNlY3Rvcl9udW0sIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwg aW50IG5iX3NlY3RvcnMsCisJCUJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMgKmNiLCB2b2lk ICpvcGFxdWUpCit7CisgICAgQ29tcG9zaXRlRHJpdmVyU3RhdGUgKnMgPSBicy0+b3BhcXVl OworICAgIHJldHVybiBiZHJ2X2Fpb193cml0ZShzLT5icywgc2VjdG9yX251bSwgYnVmLCBu Yl9zZWN0b3JzLCBjYiwgb3BhcXVlKTsKK30KKworc3RhdGljIHZvaWQgcGFydGl0aW9uX2Fp b19jYW5jZWwoQmxvY2tEcml2ZXJBSU9DQiAqYWNiKQoreworICAgIC8qIFRoaXMgZnVuY3Rp b24gd2lsbCBuZXZlciBnZXQgY2FsbGVkIC0gc2luY2UgYWlvIHJlcXVlc3RzIGFyZSAqKgor ICAgICAqIHNob3ZlZCBvZmYgdG8gdGhlIGNvbXBvc2l0ZSBkcml2ZXIsIHRoZSBhY2JzIGFy ZSBzZXQgdXAgd2l0aCB0aGUgKioKKyAgICAgKiBzZXQgb2YgQ29tcG9zaXRlIGNhbGxiYWNr cywgaW5jbHVkaW5nIGNvbXBvc2l0ZV9haW9fY2FuY2VsICovCisKKyAgICAvKkNvbXBvc2l0 ZURyaXZlclN0YXRlICpzID0gYWNiLT5icy0+b3BhcXVlOworICAgIGJkcnZfYWlvX2NhbmNl bChhY2IpOyovCisgICAgcHJpbnRmKCJXYXJuaW5nOiBwYXJ0aXRpb25fYWlvX2NhbmNlbCBp cyBub3Qgc3VwcG9zZSB0byBiZSBjYWxsZWQuLi4gZ2V0IGhlbHAuIE5PVyFcbiIpOworfQor CitzdGF0aWMgdm9pZCBwYXJ0aXRpb25fY2xvc2UoQmxvY2tEcml2ZXJTdGF0ZSAqYnMpCit7 CisgICAgQ29tcG9zaXRlRHJpdmVyU3RhdGUgKnMgPSBicy0+b3BhcXVlOworICAgIGJkcnZf Y2xvc2Uocy0+YnMpOworICAgIHFlbXVfZnJlZShzLT5icyk7CisgICAgcy0+YnMgPSBOVUxM OworfQorCitzdGF0aWMgaW50IHBhcnRpdGlvbl9jcmVhdGUoY29uc3QgY2hhciAqZmlsZW5h bWUsIGludDY0X3QgdG90YWxfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpiYWNraW5nX2ZpbGUsIGludCBmbGFncykKK3sKKyAgICAvKiBGSVhNRSBYWFggcmln aHQgbm93IHdlIGlnbm9yZSB0aGUgcmVxdWVzdGVkIHNpemUgb2YgdGhlIGZpbGUgKi8KKyAg ICByZXR1cm4gcGFydGl0aW9uX3NldHVwKE5VTEwsIGZpbGVuYW1lLCBmbGFncyk7Cit9CisK K0Jsb2NrRHJpdmVyIGJkcnZfcGFydGl0aW9uID0geworICAgICJwYXJ0aXRpb24iLAorICAg IHNpemVvZihDb21wb3NpdGVEcml2ZXJTdGF0ZSksCisgICAgcGFydGl0aW9uX3Byb2JlLAor ICAgIHBhcnRpdGlvbl9vcGVuLAorICAgIC8vcGFydGl0aW9uX3JlYWQsCisgICAgTlVMTCwK KyAgICAvL3BhcnRpdGlvbl93cml0ZSwKKyAgICBOVUxMLAorICAgIHBhcnRpdGlvbl9jbG9z ZSwKKyAgICBwYXJ0aXRpb25fY3JlYXRlLAorICAgIC5iZHJ2X2Fpb19yZWFkID0gcGFydGl0 aW9uX2Fpb19yZWFkLAorICAgIC5iZHJ2X2Fpb193cml0ZSA9IHBhcnRpdGlvbl9haW9fd3Jp dGUsCisgICAgLmJkcnZfYWlvX2NhbmNlbCA9IHBhcnRpdGlvbl9haW9fY2FuY2VsLAorICAg IC5haW9jYl9zaXplID0gc2l6ZW9mKENvbXBvc2l0ZUFJT0NCKSwKKworICAgIC5wcm90b2Nv bF9uYW1lID0gInBhcnRpdGlvbiIsCisgICAgLmJkcnZfcHJlYWQgPSBwYXJ0aXRpb25fcHJl YWQsCisgICAgLmJkcnZfcHdyaXRlID0gcGFydGl0aW9uX3B3cml0ZSwKK307CisKZGlmZiAt dXIgLS1uZXctZmlsZSAtLWV4Y2x1ZGU9LiMqIC0tZXhjbHVkZT0qQ1ZTKiAtLWV4Y2x1ZGU9 Kmdlbi1vcCogLS1leGNsdWRlPWJsb2NrLWNvbXBvc2l0ZTEuYyAtLWV4Y2x1ZGU9KmNvbmZp ZyogLS1leGNsdWRlPSotc29mdG1tdSogcWVtdS9ibG9jay1yYW0uYyBxZW11Lm5vdGxhc3Qv YmxvY2stcmFtLmMKLS0tIHFlbXUvYmxvY2stcmFtLmMJV2VkIERlYyAzMSAxOTowMDowMCAx OTY5CisrKyBxZW11Lm5vdGxhc3QvYmxvY2stcmFtLmMJVHVlIE1hciAgNiAxNTo1NzowOSAy MDA3CkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQmxvY2sgZHJpdmVyIGluIFJBTQorICog CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSmltIEJvb3duCisgKiAKKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv biB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg aXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcg RlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLwor I2luY2x1ZGUgInZsLmgiCisjaW5jbHVkZSAiYmxvY2tfaW50LmgiCisjaW5jbHVkZSA8YXNz ZXJ0Lmg+CisKKyNpZm5kZWYgUUVNVV9UT09MCisjaW5jbHVkZSAiZXhlYy1hbGwuaCIKKyNl bmRpZgorCit0eXBlZGVmIHN0cnVjdCBCRFJWUmFtU3RhdGUgeworICAgIGNoYXIgKiByYW1f ZGF0YTsKK30gQkRSVlJhbVN0YXRlOworCitzdGF0aWMgaW50IHJhbV9wcm9iZShjb25zdCB1 aW50OF90ICpidWYsIGludCBidWZfc2l6ZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7Cisg ICAgaWYgKHN0cnN0YXJ0KGZpbGVuYW1lLCAicmFtOiIsIE5VTEwpKQorCSAgICByZXR1cm4g MTAwOworICAgIHJldHVybiAwOworfQorc3RhdGljIGludCByYW1fb3BlbihCbG9ja0RyaXZl clN0YXRlICpicywgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncykKK3sKKyAgICBC RFJWUmFtU3RhdGUgKnMgPSBicy0+b3BhcXVlOworCisgICAgaWYgKCFzdHJzdGFydChmaWxl bmFtZSwgInJhbToiLCBOVUxMKSkKKwkgICAgcmV0dXJuIC0xOworCisgICAgaW50IHNlY3Ru dW0gPSBhdG9pKGZpbGVuYW1lKzQpOworICAgIGlmIChzZWN0bnVtID09IDApIHJldHVybiAt MjsKKworICAgIHMtPnJhbV9kYXRhID0gcWVtdV9tYWxsb2N6KHNlY3RudW0qNTEyKTsKKyAg ICBpZiAocy0+cmFtX2RhdGEgPT0gTlVMTCkgcmV0dXJuIC0yOworICAgIG1lbXNldChzLT5y YW1fZGF0YSwgJyAnLCBzZWN0bnVtKjUxMik7CisKKyAgICBicy0+dG90YWxfc2VjdG9ycyA9 IHNlY3RudW07CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFtX3JlYWQoQmxv Y2tEcml2ZXJTdGF0ZSAqYnMsIGludDY0X3Qgc2VjdG9yX251bSwgCisgICAgICAgICAgICAg ICAgICAgICB1aW50OF90ICpidWYsIGludCBuYl9zZWN0b3JzKQoreworICAgIEJEUlZSYW1T dGF0ZSAqcyA9IGJzLT5vcGFxdWU7CisgICAgaWYgKHNlY3Rvcl9udW0rbmJfc2VjdG9ycyA+ IGJzLT50b3RhbF9zZWN0b3JzKQorCSAgICAJcmV0dXJuIC0xOworICAgIG1lbWNweShidWYs ICYocy0+cmFtX2RhdGFbc2VjdG9yX251bSo1MTJdKSwgbmJfc2VjdG9ycyo1MTIpOworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhbV93cml0ZShCbG9ja0RyaXZlclN0YXRl ICpicywgaW50NjRfdCBzZWN0b3JfbnVtLCAKKyAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50OF90ICpidWYsIGludCBuYl9zZWN0b3JzKQoreworICAgIEJEUlZSYW1TdGF0ZSAq cyA9IGJzLT5vcGFxdWU7CisgICAgaWYgKHNlY3Rvcl9udW0rbmJfc2VjdG9ycyA+IGJzLT50 b3RhbF9zZWN0b3JzKQorCSAgICAJcmV0dXJuIC0xOworICAgIG1lbWNweSgmKHMtPnJhbV9k YXRhW3NlY3Rvcl9udW0qNTEyXSksIGJ1ZiwgbmJfc2VjdG9ycyo1MTIpOworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCByYW1fY2xvc2UoQmxvY2tEcml2ZXJTdGF0ZSAqYnMp Cit7CisgICAgQkRSVlJhbVN0YXRlICpzID0gYnMtPm9wYXF1ZTsKKyAgICBxZW11X2ZyZWUo cy0+cmFtX2RhdGEpOworfQorCitzdGF0aWMgaW50IHJhbV9pc19hbGxvY2F0ZWQoQmxvY2tE cml2ZXJTdGF0ZSAqYnMsCisgICAgICAgIGludDY0X3Qgc2VjdG9yX251bSwgaW50IG5iX3Nl Y3RvcnMsIGludCogbikKK3sKKyAgICAqbiA9IGJzLT50b3RhbF9zZWN0b3JzIC0gc2VjdG9y X251bTsKKyAgICBpZiAoKm4gPiBuYl9zZWN0b3JzKQorICAgICAgICAqbiA9IG5iX3NlY3Rv cnM7CisgICAgZWxzZSBpZiAoKm4gPCAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1 cm4gMTsKK30KKworQmxvY2tEcml2ZXIgYmRydl9yYW0gPSB7CisgICAgInJhbSIsCisgICAg c2l6ZW9mKEJEUlZSYW1TdGF0ZSksCisgICAgcmFtX3Byb2JlLAorICAgIHJhbV9vcGVuLAor ICAgIHJhbV9yZWFkLAorICAgIHJhbV93cml0ZSwKKyAgICByYW1fY2xvc2UsCisgICAgTlVM TCwKKyAgICBOVUxMLAorICAgIHJhbV9pc19hbGxvY2F0ZWQsCisgICAucHJvdG9jb2xfbmFt ZSA9ICJyYW0iLAorfTsKZGlmZiAtdXIgLS1uZXctZmlsZSAtLWV4Y2x1ZGU9LiMqIC0tZXhj bHVkZT0qQ1ZTKiAtLWV4Y2x1ZGU9Kmdlbi1vcCogLS1leGNsdWRlPWJsb2NrLWNvbXBvc2l0 ZTEuYyAtLWV4Y2x1ZGU9KmNvbmZpZyogLS1leGNsdWRlPSotc29mdG1tdSogcWVtdS9ibG9j ay5jIHFlbXUubm90bGFzdC9ibG9jay5jCi0tLSBxZW11L2Jsb2NrLmMJU3VuIEZlYiAxMSAx MDowNjowOSAyMDA3CisrKyBxZW11Lm5vdGxhc3QvYmxvY2suYwlXZWQgTWFyICA3IDEwOjI5 OjU3IDIwMDcKQEAgLTEyNDEsNiArMTI0MSw5IEBACiAgICAgYmRydl9yZWdpc3RlcigmYmRy dl92cGMpOwogICAgIGJkcnZfcmVnaXN0ZXIoJmJkcnZfdnZmYXQpOwogICAgIGJkcnZfcmVn aXN0ZXIoJmJkcnZfcWNvdzIpOworICAgIGJkcnZfcmVnaXN0ZXIoJmJkcnZfY29tcG9zaXRl KTsKKyAgICBiZHJ2X3JlZ2lzdGVyKCZiZHJ2X3JhbSk7CisgICAgYmRydl9yZWdpc3Rlcigm YmRydl9wYXJ0aXRpb24pOwogfQogCiB2b2lkICpxZW11X2Fpb19nZXQoQmxvY2tEcml2ZXJT dGF0ZSAqYnMsIEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMgKmNiLApkaWZmIC11ciAtLW5l dy1maWxlIC0tZXhjbHVkZT0uIyogLS1leGNsdWRlPSpDVlMqIC0tZXhjbHVkZT0qZ2VuLW9w KiAtLWV4Y2x1ZGU9YmxvY2stY29tcG9zaXRlMS5jIC0tZXhjbHVkZT0qY29uZmlnKiAtLWV4 Y2x1ZGU9Ki1zb2Z0bW11KiBxZW11L2Jsb2NrX2NvbXBvc2l0ZS5oIHFlbXUubm90bGFzdC9i bG9ja19jb21wb3NpdGUuaAotLS0gcWVtdS9ibG9ja19jb21wb3NpdGUuaAlXZWQgRGVjIDMx IDE5OjAwOjAwIDE5NjkKKysrIHFlbXUubm90bGFzdC9ibG9ja19jb21wb3NpdGUuaAlUdWUg TWFyICA2IDEwOjU4OjMxIDIwMDcKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIEJsb2NrIGRy aXZlciB0byB1c2UgY29tcG9zaXRlIGltYWdlcworICogCisgKiBDb3B5cmlnaHQgKGMpIDIw MDcgSmltIEJyb3duCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBCTE9DS19DT01QT1NJ VEVfSAorI2RlZmluZSBCTE9DS19DT01QT1NJVEVfSAorCisjaW5jbHVkZSAidmwuaCIKKyNp bmNsdWRlICJibG9ja19pbnQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgU2xhdmVEcml2ZXJTdGF0 ZSB7CisgICAgQmxvY2tEcml2ZXJTdGF0ZSAqIGJzOworICAgIGludCBzdGFydF9zZWN0b3I7 Cit9IFNsYXZlRHJpdmVyU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IEJEUlZQYXJ0U3RhdGUg eworICAgIFNsYXZlRHJpdmVyU3RhdGUgKiBzbGF2ZV9iczsKKyAgICBpbnQgc2xhdmVfY291 bnQ7Cit9IEJEUlZQYXJ0U3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IENvbXBvc2l0ZUFJT0NC IHsKKyAgICBCbG9ja0RyaXZlckFJT0NCIGNvbW1vbjsKKyAgICBpbnQ2NF90IHN0YXJ0X3Nl Y3Q7CisgICAgaW50NjRfdCBlbmRfc2VjdDsKKyAgICBpbnQ2NF90IGN1cl9zZWN0OworICAg IHVpbnQ4X3QgKmJ1ZjsKKyAgICBpbnQgd2hpY2hfc2xhdmU7CisgICAgaW50NjRfdCBzbGF2 ZV9zdGFydDsKKyAgICBpbnQ2NF90IHNsYXZlX2VuZDsKKyAgICBpbnQ2NF90IHNsYXZlX2N1 cjsKKyAgICBpbnQgc2xhdmVfcmV0OworICAgIEJsb2NrRHJpdmVyQUlPQ0IgKnNsYXZlX2Fp b2NiOworfSBDb21wb3NpdGVBSU9DQjsKKworI2VuZGlmIC8qQkxPQ0tfQ09NUE9TSVRFX0gq LwpkaWZmIC11ciAtLW5ldy1maWxlIC0tZXhjbHVkZT0uIyogLS1leGNsdWRlPSpDVlMqIC0t ZXhjbHVkZT0qZ2VuLW9wKiAtLWV4Y2x1ZGU9YmxvY2stY29tcG9zaXRlMS5jIC0tZXhjbHVk ZT0qY29uZmlnKiAtLWV4Y2x1ZGU9Ki1zb2Z0bW11KiBxZW11L3ZsLmggcWVtdS5ub3RsYXN0 L3ZsLmgKLS0tIHFlbXUvdmwuaAlUdWUgTWFyICA2IDE4OjUyOjAxIDIwMDcKKysrIHFlbXUu bm90bGFzdC92bC5oCVdlZCBNYXIgIDcgMTA6MzA6MDMgMjAwNwpAQCAtNTU3LDYgKzU1Nyw5 IEBACiBleHRlcm4gQmxvY2tEcml2ZXIgYmRydl92cGM7CiBleHRlcm4gQmxvY2tEcml2ZXIg YmRydl92dmZhdDsKIGV4dGVybiBCbG9ja0RyaXZlciBiZHJ2X3Fjb3cyOworZXh0ZXJuIEJs b2NrRHJpdmVyIGJkcnZfY29tcG9zaXRlOworZXh0ZXJuIEJsb2NrRHJpdmVyIGJkcnZfcmFt OworZXh0ZXJuIEJsb2NrRHJpdmVyIGJkcnZfcGFydGl0aW9uOwogCiB0eXBlZGVmIHN0cnVj dCBCbG9ja0RyaXZlckluZm8gewogICAgIC8qIGluIGJ5dGVzLCAwIGlmIGlycmVsZXZhbnQg Ki8K -------1107909fb8795e95a5471fabcd100bae Content-Type: text/x-patch; name="pc.diff" Content-Disposition: inline; filename="pc.diff" Content-Transfer-Encoding: base64 LS0tIGh3L3BjLmMJTW9uIE1hciAgNSAxNDo0NDowMiAyMDA3CisrKyBody9wYy5jCVdlZCBN YXIgIDcgMTM6Mzc6MzcgMjAwNwpAQCAtNDIsNiArNDIsMjQgQEAKIHN0YXRpYyBJT0FQSUNT dGF0ZSAqaW9hcGljOwogc3RhdGljIFBDSURldmljZSAqaTQ0MGZ4X3N0YXRlOwogCisjZGVm aW5lIExJTlVYX0JPT1RfVElNRSAxMDAwCitzdGF0aWMgUUVNVVRpbWVyICpsaW51eF9ib290 X3RpbWVyOworc3RhdGljIHZvaWQgbGludXhfYm9vdF9jbGVhbnVwKHZvaWQgKm9wYXF1ZSkK K3sKKwlpZiAob3BhcXVlID09IE5VTEwpCisJeworCQkvKiB1c2luZyByYW0gYnMgKi8KKwkJ YmRydl9jbG9zZShmZF90YWJsZVswXSk7CisJfQorCWVsc2UKKwl7CisJCS8qIHRoZXJlIGlz IGEgcmVhbCBmbG9wcHkgdW5kZXJuZWF0aCAqLworCQliZHJ2X3NldF9ib290X3NlY3Rvcihm ZF90YWJsZVswXSwgb3BhcXVlLCA1MTIpOworCQlxZW11X2ZyZWUob3BhcXVlKTsKKwl9CisJ cWVtdV9mcmVlX3RpbWVyKGxpbnV4X2Jvb3RfdGltZXIpOworfQorCiBzdGF0aWMgdm9pZCBp b3BvcnQ4MF93cml0ZSh2b2lkICpvcGFxdWUsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IGRh dGEpCiB7CiB9CkBAIC00NTcsNiArNDc1LDcgQEAKICAgICBpbnQgcGlpeDNfZGV2Zm4gPSAt MTsKICAgICBDUFVTdGF0ZSAqZW52OwogICAgIE5JQ0luZm8gKm5kOworICAgIGludCB1c2lu Z19yYW1fYnMgPSAwOwogCiAgICAgbGludXhfYm9vdCA9IChrZXJuZWxfZmlsZW5hbWUgIT0g TlVMTCk7CiAKQEAgLTU2NiwxMCArNTg1LDEwIEBACiAKICAgICBpZiAobGludXhfYm9vdCkg ewogICAgICAgICB1aW50OF90IGJvb3RzZWN0WzUxMl07Ci0gICAgICAgIHVpbnQ4X3Qgb2xk X2Jvb3RzZWN0WzUxMl07CisgICAgICAgIHVpbnQ4X3QgKm9sZF9ib290c2VjdCA9IE5VTEw7 CiAKLSAgICAgICAgaWYgKGJzX3RhYmxlWzBdID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiQSBkaXNrIGltYWdlIG11c3QgYmUgZ2l2ZW4gZm9yICdoZGEnIHdo ZW4gYm9vdGluZyBhIExpbnV4IGtlcm5lbFxuIik7CisgICAgICAgIGlmIChmZF90YWJsZVsw XSA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoaXMgc2hvdWxk IG5ldmVyIGhhcHBlbiFcbiIpOwogICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQog ICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXMiLCBiaW9zX2Rpciwg TElOVVhfQk9PVF9GSUxFTkFNRSk7CkBAIC01ODAsMTIgKzU5OSwyOSBAQAogICAgICAgICAg ICAgZXhpdCgxKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChiZHJ2X3JlYWQoYnNfdGFi bGVbMF0sIDAsIG9sZF9ib290c2VjdCwgMSkgPj0gMCkgewotICAgICAgICAgICAgLyogY29w eSB0aGUgTVNET1MgcGFydGl0aW9uIHRhYmxlICovCi0gICAgICAgICAgICBtZW1jcHkoYm9v dHNlY3QgKyAweDFiZSwgb2xkX2Jvb3RzZWN0ICsgMHgxYmUsIDB4NDApOworCW9sZF9ib290 c2VjdCA9IHFlbXVfbWFsbG9jeig1MTIpOworCWlmIChvbGRfYm9vdHNlY3QgPT0gTlVMTCkK Kwl7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IG5vdCBlbm91Z2ggcmFt IHRvIGFsbG9jYXRlIDUxMiBieXRlc1xuIik7CisgICAgICAgICAgICBleGl0KDEpOworCX0K KyAgICAgICAgaWYgKGJkcnZfcmVhZChmZF90YWJsZVswXSwgMCwgb2xkX2Jvb3RzZWN0LCAx KSA+PSAwKSB7CisJICAgIHVzaW5nX3JhbV9icyA9IDA7CisgICAgICAgIH0gZWxzZSB7CisJ ICAgIHVzaW5nX3JhbV9icyA9IDE7CisJICAgIGlmIChiZHJ2X29wZW4oZmRfdGFibGVbMF0s ICJyYW06NjMiLCAwKSA8IDApCisJICAgIHsKKwkJICAgIHByaW50ZigiQW5vdGhlciB0aGlu ZyB3aGljaCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBoYXBwZW5lZC4uXG4iKTsKKwkJICAgIGV4 aXQoMSk7CisJICAgIH0KKwkgICAgcWVtdV9mcmVlKG9sZF9ib290c2VjdCk7CisJICAgIG9s ZF9ib290c2VjdCA9IE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBiZHJ2X3NldF9ib290 X3NlY3Rvcihic190YWJsZVswXSwgYm9vdHNlY3QsIHNpemVvZihib290c2VjdCkpOworICAg ICAgICBiZHJ2X3NldF9ib290X3NlY3RvcihmZF90YWJsZVswXSwgYm9vdHNlY3QsIHNpemVv Zihib290c2VjdCkpOworCS8qIGltcGxpZWQgYnkgdXNpbmcgYSBrZXJuZWwgYm9vdCAqLwor CWJvb3RfZGV2aWNlID0gJ2EnOworCWZkX2Jvb3RjaGsgPSAwOwogCiAgICAgICAgIC8qIG5v dyB3ZSBjYW4gbG9hZCB0aGUga2VybmVsICovCiAgICAgICAgIHJldCA9IGxvYWRfa2VybmVs KGtlcm5lbF9maWxlbmFtZSwgCkBAIC02MTgsNiArNjU0LDExIEBACiAgICAgICAgICAgICAg ICAgS0VSTkVMX0NNRExJTkVfQUREUiAtIEtFUk5FTF9QQVJBTVNfQUREUik7CiAgICAgICAg IC8qIGxvYWRlciB0eXBlICovCiAgICAgICAgIHN0d19yYXcocGh5c19yYW1fYmFzZSArIEtF Uk5FTF9QQVJBTVNfQUREUiArIDB4MjEwLCAweDAxKTsKKworCWxpbnV4X2Jvb3RfdGltZXIg PSBxZW11X25ld190aW1lcihydF9jbG9jaywgbGludXhfYm9vdF9jbGVhbnVwLAorCQkJdXNp bmdfcmFtX2JzID8gTlVMTCA6IG9sZF9ib290c2VjdCk7CisJcWVtdV9tb2RfdGltZXIobGlu dXhfYm9vdF90aW1lciwgcWVtdV9nZXRfY2xvY2socnRfY2xvY2spICsKKwkJCUxJTlVYX0JP T1RfVElNRSk7CiAgICAgfQogCiAgICAgaWYgKHBjaV9lbmFibGVkKSB7Cg== -------1107909fb8795e95a5471fabcd100bae--