From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 In-Reply-To: <9d4e40b94d08829ff259ced7ab3eb0f8@quanstro.net> References: <9d4e40b94d08829ff259ced7ab3eb0f8@quanstro.net> Date: Mon, 9 Mar 2009 16:32:00 +0100 Message-ID: From: yy To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: multipart/mixed; boundary=001636c5acf8e9cbcc0464b15552 Subject: Re: [9fans] Porter-Duff alpha blending Topicbox-Message-UUID: b6d74fae-ead4-11e9-9d60-3106f5b1d025 --001636c5acf8e9cbcc0464b15552 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable 2009/3/9 erik quanstrom : > i leave it as an exercize to the reader to port > this to 9vx. =E2=98=BA > There you are. Easy exercises are also good from time to time :) The patch also allows to use Shift+Button3 as Button2 (as documented in the man page). Regards, --=20 - yiyus || JGL . --001636c5acf8e9cbcc0464b15552 Content-Type: text/x-diff; name="libmemdraw.9vx.patch" Content-Disposition: attachment; filename="libmemdraw.9vx.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fs3b8lx90 ZGlmZiAtciBhMThlOTg3MjE2NGIgc3JjLzl2eC9saWJtZW1kcmF3L2RyYXcuYwotLS0gYS9zcmMv OXZ4L2xpYm1lbWRyYXcvZHJhdy5jCVdlZCBEZWMgMTAgMDM6Mjk6MTUgMjAwOCAtMDgwMAorKysg Yi9zcmMvOXZ4L2xpYm1lbWRyYXcvZHJhdy5jCU1vbiBNYXIgMDkgMTY6Mjk6MzkgMjAwOSArMDEw MApAQCAtMTAsMjIgKzEwLDMyIEBACiAjZGVmaW5lIFJHQjJLKHIsZyxiKQkoKDE1Njc2Myoocikr MzA3NzU4KihnKSs1OTc2OSooYikpPj4xOSkKIAogLyoKLSAqIGZvciAwIOKJpCB4IOKJpCAyNTUq MjU1LCAoeCoweDAxMDErMHgxMDApPj4xNiBpcyBhIHBlcmZlY3QgYXBwcm94aW1hdGlvbi4KLSAq IGZvciAwIOKJpCB4IDwgKDE8PDE2KSwgeC8yNTUgPSAoKHgrMSkqMHgwMTAxKT4+MTYgaXMgYSBw ZXJmZWN0IGFwcHJveGltYXRpb24uCi0gKiB0aGUgbGFzdCBvbmUgaXMgcGVyZmVjdCBmb3IgYWxs IHVwIHRvIDE8PDE2LCBhdm9pZHMgYSBtdWx0aXBseSwgYnV0IHJlcXVpcmVzIGEgcmF0aG9sZS4K KyAqIEZvciAxNi1iaXQgdmFsdWVzLCB4IC8gMjU1ID09ICh0ID0geCsxLCAodCsodD4+OCkpID4+ IDgpLgorICogV2UgYWRkIGFub3RoZXIgMTI3IHRvIHJvdW5kIHRvIHRoZSBuZWFyZXN0IHZhbHVl IHJhdGhlcgorICogdGhhbiB0cnVuY2F0ZS4KKyAqCisgKiBDQUxDeHkgZG9lcyB4IGJ5dGV3aXNl IGNhbGN1bGF0aW9ucyBvbiB5IGlucHV0IGltYWdlcyAoeD0xLDQ7IHk9MSwyKS4KKyAqIENBTEMy eCBkb2VzIHR3byBwYXJhbGxlbCAxNi1iaXQgY2FsY3VsYXRpb25zIG9uIHkgaW5wdXQgaW1hZ2Vz ICh5PTEsMikuCiAgKi8KLS8qICNkZWZpbmUgRElWMjU1KHgpICgoKHgpKjI1NysyNTYpPj4xNikg ICovCi0jZGVmaW5lIERJVjI1NSh4KSAoKCgoeCkrMSkqMjU3KT4+MTYpCi0vKiAjZGVmaW5lIERJ VjI1NSh4KSAodG1wPSh4KSsxLCAodG1wKyh0bXA+PjgpKT4+OCkgKi8KKyNkZWZpbmUgQ0FMQzEx KGEsIHYsIHRtcCkgXAorICh0bXA9KGEpKih2KSsxMjgsICh0bXArKHRtcD4+OCkpPj44KQorI2Rl ZmluZSBDQUxDMTIoYTEsIHYxLCBhMiwgdjIsIHRtcCkgXAorICh0bXA9KGExKSoodjEpKyhhMikq KHYyKSsxMjgsICh0bXArKHRtcD4+OCkpPj44KQorI2RlZmluZSBNQVNLIDB4RkYwMEZGCiAKLSNk ZWZpbmUgTVVMKHgsIHksIHQpCSh0ID0gKHgpKih5KSsxMjgsICh0Kyh0Pj44KSk+PjgpCi0jZGVm aW5lIE1BU0sxMwkweEZGMDBGRjAwCi0jZGVmaW5lIE1BU0swMgkweDAwRkYwMEZGCi0jZGVmaW5l IE1VTDEzKGEsIHgsIHQpCQkodCA9IChhKSooKCh4KSZNQVNLMTMpPj44KSsxMjgsICgodCsoKHQ+ PjgpJk1BU0swMikpPj44KSZNQVNLMDIpCi0jZGVmaW5lIE1VTDAyKGEsIHgsIHQpCQkodCA9IChh KSooKCh4KSZNQVNLMDIpPj4wKSsxMjgsICgodCsoKHQ+PjgpJk1BU0swMikpPj44KSZNQVNLMDIp Ci0jZGVmaW5lIE1VTDAxMjMoYSwgeCwgcywgdCkJKChNVUwxMyhhLCB4LCBzKTw8OCl8TVVMMDIo YSwgeCwgdCkpCisjZGVmaW5lIENBTEMyMShhLCB2dnV1LCB0bXApIFwKKyAodG1wPShhKSoodnZ1 dSkrMHgwMDgwMDA4MCwgKCh0bXArKCh0bXA+PjgpJk1BU0spKT4+OCkmTUFTSykKIAotI2RlZmlu ZSBNVUwyKHUsIHYsIHgsIHkpCSh0ID0gKHUpKih2KSsoeCkqKHkpKzI1NiwgKHQrKHQ+PjgpKT4+ OCkKKyNkZWZpbmUgQ0FMQzQxKGEsIHJnYmEsIHRtcDEsIHRtcDIpIFwKKyAoQ0FMQzIxKGEsIHJn YmEgJiBNQVNLLCB0bXAxKSB8IFwKKyAoQ0FMQzIxKGEsIChyZ2JhPj44KSZNQVNLLCB0bXAyKTw8 OCkpCisKKyNkZWZpbmUgQ0FMQzIyKGExLCB2dnV1MSwgYTIsIHZ2dXUyLCB0bXApIFwKKyAodG1w PShhMSkqKHZ2dXUxKSsoYTIpKih2dnV1MikrMHgwMDgwMDA4MCwgKCh0bXArKCh0bXA+PjgpJk1B U0spKT4+OCkmTUFTSykKKworI2RlZmluZSBDQUxDNDIoYTEsIHJnYmExLCBhMiwgcmdiYTIsIHRt cDEsIHRtcDIpIFwKKyAoQ0FMQzIyKGExLCByZ2JhMSAmIE1BU0ssIGEyLCByZ2JhMiAmIE1BU0ss IHRtcDEpIHwgXAorIChDQUxDMjIoYTEsIChyZ2JhMT4+OCkgJiBNQVNLLCBhMiwgKHJnYmEyPj44 KSAmIE1BU0ssIHRtcDIpPDw4KSkKIAogc3RhdGljIHZvaWQgbWt0YWJsZXModm9pZCk7CiB0eXBl ZGVmIGludCBTdWJkcmF3KE1lbWRyYXdwYXJhbSopOwpAQCAtODAzLDQxICs4MTMsODUgQEAKIAly ZXR1cm4gYmRzdDsKIH0KIAorLyoKKyAqIERvIHRoZSBjaGFubmVscyBpbiB0aGUgYnVmZmVycyBt YXRjaCBlbm91Z2gKKyAqIHRoYXQgd2UgY2FuIGRvIHdvcmQtYXQtYS10aW1lIG9wZXJhdGlvbnMK KyAqIG9uIHRoZSBwaXhlbHM/CisgKi8KK3N0YXRpYyBpbnQKK2NoYW5tYXRjaChCdWZmZXIgKmJk c3QsIEJ1ZmZlciAqYnNyYykKK3sKKwl1Y2hhciAqZHJnYiwgKnNyZ2I7CisJCisJLyoKKwkgKiBm aXJzdCwgciwgZywgYiBtdXN0IGJlIGluIHRoZSBzYW1lIHBsYWNlCisJICogaW4gdGhlIHJnYmEg d29yZC4KKwkgKi8KKwlkcmdiID0gKHVjaGFyKiliZHN0LT5yZ2JhOworCXNyZ2IgPSAodWNoYXIq KWJzcmMtPnJnYmE7CisJaWYoYmRzdC0+cmVkIC0gZHJnYiAhPSBic3JjLT5yZWQgLSBzcmdiCisJ fHwgYmRzdC0+Ymx1IC0gZHJnYiAhPSBic3JjLT5ibHUgLSBzcmdiCisJfHwgYmRzdC0+Z3JuIC0g ZHJnYiAhPSBic3JjLT5ncm4gLSBzcmdiKQorCQlyZXR1cm4gMDsKKwkKKwkvKgorCSAqIHRoYXQg aW1wbGllcyBhbHBoYSBpcyBpbiB0aGUgc2FtZSBwbGFjZSwKKwkgKiBpZiBpdCBpcyB0aGVyZSBh dCBhbGwgKGl0IG1pZ2h0IGJlID09ICZvbmVzKS4KKwkgKiBpZiB0aGUgZGVzdGluYXRpb24gaXMg Jm9uZXMsIHdlIGNhbiBzY3JpYmJsZQorCSAqIG92ZXIgdGhlIHJnYmEgc2xvdCBqdXN0IGZpbmUu CisJICovCisJaWYoYmRzdC0+YWxwaGEgPT0gJm9uZXMpCisJCXJldHVybiAxOworCQorCS8qCisJ ICogaWYgdGhlIGRlc3RpbmF0aW9uIGlzIG5vdCBvbmVzIGJ1dCB0aGUgc3JjIGlzLAorCSAqIHRo ZW4gdGhlIHNpbXVsdGFuZW91cyBjYWxjdWxhdGlvbiB3aWxsIHVzZQorCSAqIGJvZ3VzIGJ5dGVz IGZyb20gdGhlIHNyYydzIHJnYmEuICBubyBnb29kLgorCSAqLworCWlmKGJzcmMtPmFscGhhID09 ICZvbmVzKQorCQlyZXR1cm4gMDsKKwkKKwkvKgorCSAqIG90aGVyd2lzZSwgYWxwaGFzIGFyZSBp biB0aGUgc2FtZSBwbGFjZS4KKwkgKi8KKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIEJ1ZmZlcgog YWxwaGFjYWxjMTQoQnVmZmVyIGJkc3QsIEJ1ZmZlciBic3JjLCBCdWZmZXIgYm1hc2ssIGludCBk eCwgaW50IGdyZXksIGludCBvcCkKIHsKIAlCdWZmZXIgb2Jkc3Q7CiAJaW50IGZkLCBzYWRlbHRh OwogCWludCBpLCBzYSwgbWEsIHE7Ci0JdWludDMyIHMsIHQ7CisJdWludDMyIHQsIHQxOwogCiAJ b2Jkc3QgPSBiZHN0OwogCXNhZGVsdGEgPSBic3JjLmFscGhhID09ICZvbmVzID8gMCA6IGJzcmMu ZGVsdGE7Ci0JcSA9IGJzcmMuZGVsdGEgPT0gNCAmJiBiZHN0LmRlbHRhID09IDQ7CisJcSA9IGJz cmMuZGVsdGEgPT0gNCAmJiBiZHN0LmRlbHRhID09IDQgJiYgY2hhbm1hdGNoKCZiZHN0LCAmYnNy Yyk7CiAKIAlmb3IoaT0wOyBpPGR4OyBpKyspewogCQlzYSA9ICpic3JjLmFscGhhOwogCQltYSA9 ICpibWFzay5hbHBoYTsKLQkJZmQgPSBNVUwoc2EsIG1hLCB0KTsKKwkJZmQgPSBDQUxDMTEoc2Es IG1hLCB0KTsKIAkJaWYob3AgPT0gRG91dFMpCiAJCQlmZCA9IDI1NS1mZDsKIAogCQlpZihncmV5 KXsKLQkJCSpiZHN0LmdyZXkgPSBNVUwoZmQsICpiZHN0LmdyZXksIHQpOworCQkJKmJkc3QuZ3Jl eSA9IENBTEMxMShmZCwgKmJkc3QuZ3JleSwgdCk7CiAJCQlic3JjLmdyZXkgKz0gYnNyYy5kZWx0 YTsKIAkJCWJkc3QuZ3JleSArPSBiZHN0LmRlbHRhOwogCQl9ZWxzZXsKIAkJCWlmKHEpewotCQkJ CSpiZHN0LnJnYmEgPSBNVUwwMTIzKGZkLCAqYmRzdC5yZ2JhLCBzLCB0KTsKKwkJCQkqYmRzdC5y Z2JhID0gQ0FMQzQxKGZkLCAqYmRzdC5yZ2JhLCB0LCB0MSk7CiAJCQkJYnNyYy5yZ2JhKys7CiAJ CQkJYmRzdC5yZ2JhKys7CiAJCQkJYnNyYy5hbHBoYSArPSBzYWRlbHRhOwogCQkJCWJtYXNrLmFs cGhhICs9IGJtYXNrLmRlbHRhOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJKmJkc3QucmVkID0g TVVMKGZkLCAqYmRzdC5yZWQsIHQpOwotCQkJKmJkc3QuZ3JuID0gTVVMKGZkLCAqYmRzdC5ncm4s IHQpOwotCQkJKmJkc3QuYmx1ID0gTVVMKGZkLCAqYmRzdC5ibHUsIHQpOworCQkJKmJkc3QucmVk ID0gQ0FMQzExKGZkLCAqYmRzdC5yZWQsIHQpOworCQkJKmJkc3QuZ3JuID0gQ0FMQzExKGZkLCAq YmRzdC5ncm4sIHQpOworCQkJKmJkc3QuYmx1ID0gQ0FMQzExKGZkLCAqYmRzdC5ibHUsIHQpOwog CQkJYnNyYy5yZWQgKz0gYnNyYy5kZWx0YTsKIAkJCWJzcmMuYmx1ICs9IGJzcmMuZGVsdGE7CiAJ CQlic3JjLmdybiArPSBic3JjLmRlbHRhOwpAQCAtODQ2LDcgKzkwMCw3IEBACiAJCQliZHN0Lmdy biArPSBiZHN0LmRlbHRhOwogCQl9CiAJCWlmKGJkc3QuYWxwaGEgIT0gJm9uZXMpewotCQkJKmJk c3QuYWxwaGEgPSBNVUwoZmQsICpiZHN0LmFscGhhLCB0KTsKKwkJCSpiZHN0LmFscGhhID0gQ0FM QzExKGZkLCAqYmRzdC5hbHBoYSwgdCk7CiAJCQliZHN0LmFscGhhICs9IGJkc3QuZGVsdGE7CiAJ CX0KIAkJYm1hc2suYWxwaGEgKz0gYm1hc2suZGVsdGE7CkBAIC04NjEsMTEgKzkxNSwxMSBAQAog CUJ1ZmZlciBvYmRzdDsKIAlpbnQgZnMsIHNhZGVsdGE7CiAJaW50IGksIG1hLCBkYSwgcTsKLQl1 aW50MzIgcywgdDsKKwl1aW50MzIgdCwgdDE7CiAKIAlvYmRzdCA9IGJkc3Q7CiAJc2FkZWx0YSA9 IGJzcmMuYWxwaGEgPT0gJm9uZXMgPyAwIDogYnNyYy5kZWx0YTsKLQlxID0gYnNyYy5kZWx0YSA9 PSA0ICYmIGJkc3QuZGVsdGEgPT0gNDsKKwlxID0gYnNyYy5kZWx0YSA9PSA0ICYmIGJkc3QuZGVs dGEgPT0gNCAmJiBjaGFubWF0Y2goJmJkc3QsICZic3JjKTsKIAogCWZvcihpPTA7IGk8ZHg7IGkr Kyl7CiAJCW1hID0gKmJtYXNrLmFscGhhOwpAQCAtODc0LDI0ICs5MjgsMjQgQEAKIAkJCWRhID0g MjU1LWRhOwogCQlmcyA9IG1hOwogCQlpZihvcCAhPSBTKQotCQkJZnMgPSBNVUwoZnMsIGRhLCB0 KTsKKwkJCWZzID0gQ0FMQzExKGZzLCBkYSwgdCk7CiAKIAkJaWYoZ3JleSl7Ci0JCQkqYmRzdC5n cmV5ID0gTVVMKGZzLCAqYnNyYy5ncmV5LCB0KTsKKwkJCSpiZHN0LmdyZXkgPSBDQUxDMTEoZnMs ICpic3JjLmdyZXksIHQpOwogCQkJYnNyYy5ncmV5ICs9IGJzcmMuZGVsdGE7CiAJCQliZHN0Lmdy ZXkgKz0gYmRzdC5kZWx0YTsKIAkJfWVsc2V7CiAJCQlpZihxKXsKLQkJCQkqYmRzdC5yZ2JhID0g TVVMMDEyMyhmcywgKmJzcmMucmdiYSwgcywgdCk7CisJCQkJKmJkc3QucmdiYSA9IENBTEM0MShm cywgKmJzcmMucmdiYSwgdCwgdDEpOwogCQkJCWJzcmMucmdiYSsrOwogCQkJCWJkc3QucmdiYSsr OwogCQkJCWJtYXNrLmFscGhhICs9IGJtYXNrLmRlbHRhOwogCQkJCWJkc3QuYWxwaGEgKz0gYmRz dC5kZWx0YTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCSpiZHN0LnJlZCA9IE1VTChmcywgKmJz cmMucmVkLCB0KTsKLQkJCSpiZHN0LmdybiA9IE1VTChmcywgKmJzcmMuZ3JuLCB0KTsKLQkJCSpi ZHN0LmJsdSA9IE1VTChmcywgKmJzcmMuYmx1LCB0KTsKKwkJCSpiZHN0LnJlZCA9IENBTEMxMShm cywgKmJzcmMucmVkLCB0KTsKKwkJCSpiZHN0LmdybiA9IENBTEMxMShmcywgKmJzcmMuZ3JuLCB0 KTsKKwkJCSpiZHN0LmJsdSA9IENBTEMxMShmcywgKmJzcmMuYmx1LCB0KTsKIAkJCWJzcmMucmVk ICs9IGJzcmMuZGVsdGE7CiAJCQlic3JjLmJsdSArPSBic3JjLmRlbHRhOwogCQkJYnNyYy5ncm4g Kz0gYnNyYy5kZWx0YTsKQEAgLTkwMCw3ICs5NTQsNyBAQAogCQkJYmRzdC5ncm4gKz0gYmRzdC5k ZWx0YTsKIAkJfQogCQlpZihiZHN0LmFscGhhICE9ICZvbmVzKXsKLQkJCSpiZHN0LmFscGhhID0g TVVMKGZzLCAqYnNyYy5hbHBoYSwgdCk7CisJCQkqYmRzdC5hbHBoYSA9IENBTEMxMShmcywgKmJz cmMuYWxwaGEsIHQpOwogCQkJYmRzdC5hbHBoYSArPSBiZHN0LmRlbHRhOwogCQl9CiAJCWJtYXNr LmFscGhhICs9IGJtYXNrLmRlbHRhOwpAQCAtOTE1LDM1ICs5NjksMzUgQEAKIAlCdWZmZXIgb2Jk c3Q7CiAJaW50IGZzLCBmZCwgc2FkZWx0YTsKIAlpbnQgaSwgc2EsIG1hLCBkYSwgcTsKLQl1aW50 MzIgcywgdCwgdSwgdjsKKwl1aW50MzIgdCwgdDE7CiAKIAlvYmRzdCA9IGJkc3Q7CiAJc2FkZWx0 YSA9IGJzcmMuYWxwaGEgPT0gJm9uZXMgPyAwIDogYnNyYy5kZWx0YTsKLQlxID0gYnNyYy5kZWx0 YSA9PSA0ICYmIGJkc3QuZGVsdGEgPT0gNDsKKwlxID0gYnNyYy5kZWx0YSA9PSA0ICYmIGJkc3Qu ZGVsdGEgPT0gNCAmJiBjaGFubWF0Y2goJmJkc3QsICZic3JjKTsKIAogCWZvcihpPTA7IGk8ZHg7 IGkrKyl7CiAJCXNhID0gKmJzcmMuYWxwaGE7CiAJCW1hID0gKmJtYXNrLmFscGhhOwogCQlkYSA9 ICpiZHN0LmFscGhhOwogCQlpZihvcCA9PSBTYXRvcEQpCi0JCQlmcyA9IE1VTChtYSwgZGEsIHQp OworCQkJZnMgPSBDQUxDMTEobWEsIGRhLCB0KTsKIAkJZWxzZQotCQkJZnMgPSBNVUwobWEsIDI1 NS1kYSwgdCk7CisJCQlmcyA9IENBTEMxMShtYSwgMjU1LWRhLCB0KTsKIAkJaWYob3AgPT0gRG92 ZXJTKQogCQkJZmQgPSAyNTU7CiAJCWVsc2V7Ci0JCQlmZCA9IE1VTChzYSwgbWEsIHQpOworCQkJ ZmQgPSBDQUxDMTEoc2EsIG1hLCB0KTsKIAkJCWlmKG9wICE9IERhdG9wUykKIAkJCQlmZCA9IDI1 NS1mZDsKIAkJfQogCiAJCWlmKGdyZXkpewotCQkJKmJkc3QuZ3JleSA9IE1VTChmcywgKmJzcmMu Z3JleSwgcykrTVVMKGZkLCAqYmRzdC5ncmV5LCB0KTsKKwkJCSpiZHN0LmdyZXkgPSBDQUxDMTIo ZnMsICpic3JjLmdyZXksIGZkLCAqYmRzdC5ncmV5LCB0KTsKIAkJCWJzcmMuZ3JleSArPSBic3Jj LmRlbHRhOwogCQkJYmRzdC5ncmV5ICs9IGJkc3QuZGVsdGE7CiAJCX1lbHNlewogCQkJaWYocSl7 Ci0JCQkJKmJkc3QucmdiYSA9IE1VTDAxMjMoZnMsICpic3JjLnJnYmEsIHMsIHQpK01VTDAxMjMo ZmQsICpiZHN0LnJnYmEsIHUsIHYpOworCQkJCSpiZHN0LnJnYmEgPSBDQUxDNDIoZnMsICpic3Jj LnJnYmEsIGZkLCAqYmRzdC5yZ2JhLCB0LCB0MSk7CiAJCQkJYnNyYy5yZ2JhKys7CiAJCQkJYmRz dC5yZ2JhKys7CiAJCQkJYnNyYy5hbHBoYSArPSBzYWRlbHRhOwpAQCAtOTUxLDkgKzEwMDUsOSBA QAogCQkJCWJkc3QuYWxwaGEgKz0gYmRzdC5kZWx0YTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJ CSpiZHN0LnJlZCA9IE1VTChmcywgKmJzcmMucmVkLCBzKStNVUwoZmQsICpiZHN0LnJlZCwgdCk7 Ci0JCQkqYmRzdC5ncm4gPSBNVUwoZnMsICpic3JjLmdybiwgcykrTVVMKGZkLCAqYmRzdC5ncm4s IHQpOwotCQkJKmJkc3QuYmx1ID0gTVVMKGZzLCAqYnNyYy5ibHUsIHMpK01VTChmZCwgKmJkc3Qu Ymx1LCB0KTsKKwkJCSpiZHN0LnJlZCA9IENBTEMxMihmcywgKmJzcmMucmVkLCBmZCwgKmJkc3Qu cmVkLCB0KTsKKwkJCSpiZHN0LmdybiA9IENBTEMxMihmcywgKmJzcmMuZ3JuLCBmZCwgKmJkc3Qu Z3JuLCB0KTsKKwkJCSpiZHN0LmJsdSA9IENBTEMxMihmcywgKmJzcmMuYmx1LCBmZCwgKmJkc3Qu Ymx1LCB0KTsKIAkJCWJzcmMucmVkICs9IGJzcmMuZGVsdGE7CiAJCQlic3JjLmJsdSArPSBic3Jj LmRlbHRhOwogCQkJYnNyYy5ncm4gKz0gYnNyYy5kZWx0YTsKQEAgLTk2Miw3ICsxMDE2LDcgQEAK IAkJCWJkc3QuZ3JuICs9IGJkc3QuZGVsdGE7CiAJCX0KIAkJaWYoYmRzdC5hbHBoYSAhPSAmb25l cyl7Ci0JCQkqYmRzdC5hbHBoYSA9IE1VTChmcywgc2EsIHMpK01VTChmZCwgZGEsIHQpOworCQkJ KmJkc3QuYWxwaGEgPSBDQUxDMTIoZnMsIHNhLCBmZCwgZGEsIHQpOwogCQkJYmRzdC5hbHBoYSAr PSBiZHN0LmRlbHRhOwogCQl9CiAJCWJtYXNrLmFscGhhICs9IGJtYXNrLmRlbHRhOwpAQCAtOTg4 LDM0ICsxMDQyLDM0IEBACiAJQnVmZmVyIG9iZHN0OwogCWludCBmZCwgc2FkZWx0YTsKIAlpbnQg aSwgc2EsIG1hLCBxOwotCXVpbnQzMiBzLCB0LCB1LCB2OworCXVpbnQzMiB0LCB0MTsKIAogCVVT RUQob3ApOwogCW9iZHN0ID0gYmRzdDsKIAlzYWRlbHRhID0gYnNyYy5hbHBoYSA9PSAmb25lcyA/ IDAgOiBic3JjLmRlbHRhOwotCXEgPSBic3JjLmRlbHRhID09IDQgJiYgYmRzdC5kZWx0YSA9PSA0 OworCXEgPSBic3JjLmRlbHRhID09IDQgJiYgYmRzdC5kZWx0YSA9PSA0ICYmIGNoYW5tYXRjaCgm YmRzdCwgJmJzcmMpOwogCiAJZm9yKGk9MDsgaTxkeDsgaSsrKXsKIAkJc2EgPSAqYnNyYy5hbHBo YTsKIAkJbWEgPSAqYm1hc2suYWxwaGE7Ci0JCWZkID0gMjU1LU1VTChzYSwgbWEsIHQpOworCQlm ZCA9IDI1NS1DQUxDMTEoc2EsIG1hLCB0KTsKIAogCQlpZihncmV5KXsKLQkJCSpiZHN0LmdyZXkg PSBNVUwobWEsICpic3JjLmdyZXksIHMpK01VTChmZCwgKmJkc3QuZ3JleSwgdCk7CisJCQkqYmRz dC5ncmV5ID0gQ0FMQzEyKG1hLCAqYnNyYy5ncmV5LCBmZCwgKmJkc3QuZ3JleSwgdCk7CiAJCQli c3JjLmdyZXkgKz0gYnNyYy5kZWx0YTsKIAkJCWJkc3QuZ3JleSArPSBiZHN0LmRlbHRhOwogCQl9 ZWxzZXsKIAkJCWlmKHEpewotCQkJCSpiZHN0LnJnYmEgPSBNVUwwMTIzKG1hLCAqYnNyYy5yZ2Jh LCBzLCB0KStNVUwwMTIzKGZkLCAqYmRzdC5yZ2JhLCB1LCB2KTsKKwkJCQkqYmRzdC5yZ2JhID0g Q0FMQzQyKG1hLCAqYnNyYy5yZ2JhLCBmZCwgKmJkc3QucmdiYSwgdCwgdDEpOwogCQkJCWJzcmMu cmdiYSsrOwogCQkJCWJkc3QucmdiYSsrOwogCQkJCWJzcmMuYWxwaGEgKz0gc2FkZWx0YTsKIAkJ CQlibWFzay5hbHBoYSArPSBibWFzay5kZWx0YTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCSpi ZHN0LnJlZCA9IE1VTChtYSwgKmJzcmMucmVkLCBzKStNVUwoZmQsICpiZHN0LnJlZCwgdCk7Ci0J CQkqYmRzdC5ncm4gPSBNVUwobWEsICpic3JjLmdybiwgcykrTVVMKGZkLCAqYmRzdC5ncm4sIHQp OwotCQkJKmJkc3QuYmx1ID0gTVVMKG1hLCAqYnNyYy5ibHUsIHMpK01VTChmZCwgKmJkc3QuYmx1 LCB0KTsKKwkJCSpiZHN0LnJlZCA9IENBTEMxMihtYSwgKmJzcmMucmVkLCBmZCwgKmJkc3QucmVk LCB0KTsKKwkJCSpiZHN0LmdybiA9IENBTEMxMihtYSwgKmJzcmMuZ3JuLCBmZCwgKmJkc3QuZ3Ju LCB0KTsKKwkJCSpiZHN0LmJsdSA9IENBTEMxMihtYSwgKmJzcmMuYmx1LCBmZCwgKmJkc3QuYmx1 LCB0KTsKIAkJCWJzcmMucmVkICs9IGJzcmMuZGVsdGE7CiAJCQlic3JjLmJsdSArPSBic3JjLmRl bHRhOwogCQkJYnNyYy5ncm4gKz0gYnNyYy5kZWx0YTsKQEAgLTEwMjQsNyArMTA3OCw3IEBACiAJ CQliZHN0LmdybiArPSBiZHN0LmRlbHRhOwogCQl9CiAJCWlmKGJkc3QuYWxwaGEgIT0gJm9uZXMp ewotCQkJKmJkc3QuYWxwaGEgPSBNVUwobWEsIHNhLCBzKStNVUwoZmQsICpiZHN0LmFscGhhLCB0 KTsKKwkJCSpiZHN0LmFscGhhID0gQ0FMQzEyKG1hLCBzYSwgZmQsICpiZHN0LmFscGhhLCB0KTsK IAkJCWJkc3QuYWxwaGEgKz0gYmRzdC5kZWx0YTsKIAkJfQogCQlibWFzay5hbHBoYSArPSBibWFz ay5kZWx0YTsKQEAgLTEwODAsNyArMTEzNCw3IEBACiAJQnVmZmVyIG9iZHN0OwogCWludCBmZDsK IAlpbnQgaSwgbWE7Ci0JdWludDMyIHMsIHQ7CisJdWludDMyIHQ7CiAKIAlVU0VEKG9wKTsKIAlv YmRzdCA9IGJkc3Q7CkBAIC0xMDkwLDEzICsxMTQ0LDEzIEBACiAJCWZkID0gMjU1LW1hOwogCiAJ CWlmKGdyZXkpewotCQkJKmJkc3QuZ3JleSA9IE1VTChtYSwgKmJzcmMuZ3JleSwgcykrTVVMKGZk LCAqYmRzdC5ncmV5LCB0KTsKKwkJCSpiZHN0LmdyZXkgPSBDQUxDMTIobWEsICpic3JjLmdyZXks IGZkLCAqYmRzdC5ncmV5LCB0KTsKIAkJCWJzcmMuZ3JleSArPSBic3JjLmRlbHRhOwogCQkJYmRz dC5ncmV5ICs9IGJkc3QuZGVsdGE7CiAJCX1lbHNlewotCQkJKmJkc3QucmVkID0gTVVMKG1hLCAq YnNyYy5yZWQsIHMpK01VTChmZCwgKmJkc3QucmVkLCB0KTsKLQkJCSpiZHN0LmdybiA9IE1VTCht YSwgKmJzcmMuZ3JuLCBzKStNVUwoZmQsICpiZHN0LmdybiwgdCk7Ci0JCQkqYmRzdC5ibHUgPSBN VUwobWEsICpic3JjLmJsdSwgcykrTVVMKGZkLCAqYmRzdC5ibHUsIHQpOworCQkJKmJkc3QucmVk ID0gQ0FMQzEyKG1hLCAqYnNyYy5yZWQsIGZkLCAqYmRzdC5yZWQsIHQpOworCQkJKmJkc3QuZ3Ju ID0gQ0FMQzEyKG1hLCAqYnNyYy5ncm4sIGZkLCAqYmRzdC5ncm4sIHQpOworCQkJKmJkc3QuYmx1 ID0gQ0FMQzEyKG1hLCAqYnNyYy5ibHUsIGZkLCAqYmRzdC5ibHUsIHQpOwogCQkJYnNyYy5yZWQg Kz0gYnNyYy5kZWx0YTsKIAkJCWJzcmMuYmx1ICs9IGJzcmMuZGVsdGE7CiAJCQlic3JjLmdybiAr PSBic3JjLmRlbHRhOwpAQCAtMTEwNSw3ICsxMTU5LDcgQEAKIAkJCWJkc3QuZ3JuICs9IGJkc3Qu ZGVsdGE7CiAJCX0KIAkJaWYoYmRzdC5hbHBoYSAhPSAmb25lcyl7Ci0JCQkqYmRzdC5hbHBoYSA9 IG1hK01VTChmZCwgKmJkc3QuYWxwaGEsIHQpOworCQkJKmJkc3QuYWxwaGEgPSBtYStDQUxDMTEo ZmQsICpiZHN0LmFscGhhLCB0KTsKIAkJCWJkc3QuYWxwaGEgKz0gYmRzdC5kZWx0YTsKIAkJfQog CQlibWFzay5hbHBoYSArPSBibWFzay5kZWx0YTsKQEAgLTExNTQsNyArMTIwOCw3IEBACiAJQnVm ZmVyIG9iZHN0OwogCWludCBmcywgZmQ7CiAJaW50IGksIG1hLCBkYSwgemVybzsKLQl1aW50MzIg cywgdDsKKwl1aW50MzIgdDsKIAogCW9iZHN0ID0gYmRzdDsKIAl6ZXJvID0gIShvcCYxKTsKQEAg LTExNzEsMTYgKzEyMjUsMTYgQEAKIAogCQlpZihncmV5KXsKIAkJCWlmKG1hKQotCQkJCSpiZHN0 LmdyZXkgPSBNVUwoZnMsICpic3JjLmdyZXksIHMpK01VTChmZCwgKmJkc3QuZ3JleSwgdCk7CisJ CQkJKmJkc3QuZ3JleSA9IENBTEMxMihmcywgKmJzcmMuZ3JleSwgZmQsICpiZHN0LmdyZXksIHQp OwogCQkJZWxzZSBpZih6ZXJvKQogCQkJCSpiZHN0LmdyZXkgPSAwOwogCQkJYnNyYy5ncmV5ICs9 IGJzcmMuZGVsdGE7CiAJCQliZHN0LmdyZXkgKz0gYmRzdC5kZWx0YTsKIAkJfWVsc2V7CiAJCQlp ZihtYSl7Ci0JCQkJKmJkc3QucmVkID0gTVVMKGZzLCAqYnNyYy5yZWQsIHMpK01VTChmZCwgKmJk c3QucmVkLCB0KTsKLQkJCQkqYmRzdC5ncm4gPSBNVUwoZnMsICpic3JjLmdybiwgcykrTVVMKGZk LCAqYmRzdC5ncm4sIHQpOwotCQkJCSpiZHN0LmJsdSA9IE1VTChmcywgKmJzcmMuYmx1LCBzKStN VUwoZmQsICpiZHN0LmJsdSwgdCk7CisJCQkJKmJkc3QucmVkID0gQ0FMQzEyKGZzLCAqYnNyYy5y ZWQsIGZkLCAqYmRzdC5yZWQsIHQpOworCQkJCSpiZHN0LmdybiA9IENBTEMxMihmcywgKmJzcmMu Z3JuLCBmZCwgKmJkc3QuZ3JuLCB0KTsKKwkJCQkqYmRzdC5ibHUgPSBDQUxDMTIoZnMsICpic3Jj LmJsdSwgZmQsICpiZHN0LmJsdSwgdCk7CiAJCQl9CiAJCQllbHNlIGlmKHplcm8pCiAJCQkJKmJk c3QucmVkID0gKmJkc3QuZ3JuID0gKmJkc3QuYmx1ID0gMDsKQEAgLTExOTQsNyArMTI0OCw3IEBA CiAJCWJtYXNrLmFscGhhICs9IGJtYXNrLmRlbHRhOwogCQlpZihiZHN0LmFscGhhICE9ICZvbmVz KXsKIAkJCWlmKG1hKQotCQkJCSpiZHN0LmFscGhhID0gZnMrTVVMKGZkLCBkYSwgdCk7CisJCQkJ KmJkc3QuYWxwaGEgPSBmcytDQUxDMTEoZmQsIGRhLCB0KTsKIAkJCWVsc2UgaWYoemVybykKIAkJ CQkqYmRzdC5hbHBoYSA9IDA7CiAJCQliZHN0LmFscGhhICs9IGJkc3QuZGVsdGE7CmRpZmYgLXIg YTE4ZTk4NzIxNjRiIHNyYy85dngveDExL3gxMS1pdHJhbnMuYwotLS0gYS9zcmMvOXZ4L3gxMS94 MTEtaXRyYW5zLmMJV2VkIERlYyAxMCAwMzoyOToxNSAyMDA4IC0wODAwCisrKyBiL3NyYy85dngv eDExL3gxMS1pdHJhbnMuYwlNb24gTWFyIDA5IDE2OjI5OjM5IDIwMDkgKzAxMDAKQEAgLTIyOSw3 ICsyMjksNyBAQAogCWlmKHMgJiBCdXR0b24yTWFzaykKIAkJbS0+YnV0dG9ucyB8PSAyOwogCWlm KHMgJiBCdXR0b24zTWFzaykKLQkJbS0+YnV0dG9ucyB8PSA0OworCQltLT5idXR0b25zIHw9IHMg JiBTaGlmdE1hc2sgPyAyIDogNDsKIAlpZihzICYgQnV0dG9uNE1hc2spCiAJCW0tPmJ1dHRvbnMg fD0gODsKIAlpZihzICYgQnV0dG9uNU1hc2spCg== --001636c5acf8e9cbcc0464b15552--