From owner-freebsd-current@FreeBSD.ORG Tue Oct 23 01:13:11 2007 Return-Path: Delivered-To: current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9E17D16A418 for ; Tue, 23 Oct 2007 01:13:11 +0000 (UTC) (envelope-from andrew2.li@citi.com) Received: from mail.citigroup.com (mail0.citigroup.com [192.193.221.105]) by mx1.freebsd.org (Postfix) with ESMTP id 3C05313C480 for ; Tue, 23 Oct 2007 01:13:11 +0000 (UTC) (envelope-from andrew2.li@citi.com) Received: from imbarc-nj01.nj.ssmb.com (imbarc-nj01.nj.ssmb.com [150.110.115.169]) by imbaspam-ss03.namdmz.dmzroot.net (8.13.8/8.13.8/SSMB_EXT/ev: 16778 $) with ESMTP id l9N0tei8007769; Tue, 23 Oct 2007 00:55:40 GMT Received: from mailhub-au01.aus.nsroot.net (mailhub-au01.aus.nsroot.net [169.191.97.43]) by imbarc-nj01.nj.ssmb.com (8.13.7/8.13.7/SSMB_QQQ_IN/1.1) with ESMTP id l9N0tSTs014584; Tue, 23 Oct 2007 00:55:29 GMT Received: from exmesm01.aus.nsroot.net (prkbigip1-11-1-int0.aus.nsroot.net [169.191.97.129]) by mailhub-au01.aus.nsroot.net (8.13.7/8.13.7/CG_HUB) with ESMTP id l9N0tQLF004551; Tue, 23 Oct 2007 00:55:27 GMT Received: from exsymb02.aus.nsroot.net ([169.191.99.130]) by exmesm01.aus.nsroot.net with Microsoft SMTPSVC(5.0.2195.6713); Tue, 23 Oct 2007 10:55:25 +1000 Received: exsymb02.aus.nsroot.net 169.191.99.130 from 169.191.87.130 169.191.87.130 via HTTP with MS-WebStorage 6.0.6249 Received: from al68835rh by exsymb02.aus.nsroot.net; 23 Oct 2007 10:55:24 +1000 From: Andrew Li To: current@freebsd.org Content-Type: multipart/mixed; boundary="=-eLqfxyP7z2mElmnuJkS0" Organization: Citigroup - CMB Message-Id: <1193100923.3538.71.camel@al68835rh> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.5 (1.4.5-20.el3) Date: Tue, 23 Oct 2007 10:55:24 +1000 X-OriginalArrivalTime: 23 Oct 2007 00:55:25.0781 (UTC) FILETIME=[65DE2850:01C8150F] X-Scanned-By: MIMEDefang 2.52 on 169.175.16.182 X-Mailman-Approved-At: Tue, 23 Oct 2007 12:03:30 +0000 Cc: dpk@dpk.net, netchild@freebsd.org Subject: Patch for Extend ktrace/kdump output X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: andrew2.li@citi.com List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Oct 2007 01:13:11 -0000 --=-eLqfxyP7z2mElmnuJkS0 Content-Type: text/plain Content-Transfer-Encoding: 7bit I'm working with Alexander Leidinger on the ktrace project mentioned on the ideas page (http://www.freebsd.org/projects/ideas/#p-ktrace). The patch attached is a continuance of David Kirchner's work (details here http://lists.freebsd.org/pipermail/freebsd-arch/2006-April/005107.html). The attached patch modifies the kdump output for struct sockaddr and all stat(2) calls to show a more readable output. For sockaddr, the new kdump shows: 2345 telnet CALL connect(0x3,0xbfbfe600,0x1c) 2345 telnet SOCK {AF_INET, 127.0.0.1:8000} 2345 telnet RET connect 0 Where as the old one will show: 2345 telnet CALL connect(0x3,0xbfbfe600,0x1c) 2345 telnet RET connect 0 For stat(2), 34534 stat CALL stat(0x8048614,0xbfbfe908) 34534 stat STAT {dev=100, ino=383524, mode=-rw-r--r-- , nlink=1, uid=1000, gid=1000, rdev=1528768, atime=1192715539, stime=1192471088, ctime=1192471088, birthtime=1192471088, size=17898, blksize=4096, blocks=36, flags=0x0} 34534 stat RET stat 0 With the original ktrace/kdump, the above will be displayed like this: 34536 stat CALL stat(0x8048614,0xbfbfe908) 34536 stat RET stat 0 This is my first patch for FreeBSD, any feedback you may have is much appreciated. $ uname -a FreeBSD elmo 7.0-CURRENT FreeBSD 7.0-CURRENT #82: Fri Oct 19 16:34:25 EST 2007 root@elmo:/usr/obj_current/var/src_current/sys/GENERIC i386 Andrew --=-eLqfxyP7z2mElmnuJkS0 Content-Disposition: attachment; filename=ktrace.patch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name=ktrace.patch; charset= KioqIC4vc3lzL2tlcm4va2Vybl9rdHJhY2UuYy5vcmlnCVRodSBBdWcgMzAgMDc6MTc6MTEgMjAw Nw0KLS0tIC4vc3lzL2tlcm4va2Vybl9rdHJhY2UuYwlNb24gT2N0IDIyIDEyOjE4OjI2IDIwMDcN CioqKioqKioqKioqKioqKg0KKioqIDUxLDU2ICoqKioNCi0tLSA1MSw1OCAtLS0tDQogICNpbmNs dWRlIDxzeXMvcHJvYy5oPg0KICAjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPg0KICAjaW5jbHVkZSA8 c3lzL3Zub2RlLmg+DQorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQorICNpbmNsdWRlIDxzeXMv c3RhdC5oPg0KICAjaW5jbHVkZSA8c3lzL2t0cmFjZS5oPg0KICAjaW5jbHVkZSA8c3lzL3N4Lmg+ DQogICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQoqKioqKioqKioqKioqKioNCioqKiAxMDcsMTEz ICoqKioNCiAgCXNpemVvZihzdHJ1Y3Qga3RyX2dlbmlvKSwJCS8qIEtUUl9HRU5JTyAqLw0KICAJ c2l6ZW9mKHN0cnVjdCBrdHJfcHNpZyksCQkvKiBLVFJfUFNJRyAqLw0KICAJc2l6ZW9mKHN0cnVj dCBrdHJfY3N3KSwJCQkvKiBLVFJfQ1NXICovDQohIAkwCQkJCQkvKiBLVFJfVVNFUiAqLw0KICB9 Ow0KICANCiAgc3RhdGljIFNUQUlMUV9IRUFEKCwga3RyX3JlcXVlc3QpIGt0cl9mcmVlOw0KLS0t IDEwOSwxMTcgLS0tLQ0KICAJc2l6ZW9mKHN0cnVjdCBrdHJfZ2VuaW8pLAkJLyogS1RSX0dFTklP ICovDQogIAlzaXplb2Yoc3RydWN0IGt0cl9wc2lnKSwJCS8qIEtUUl9QU0lHICovDQogIAlzaXpl b2Yoc3RydWN0IGt0cl9jc3cpLAkJCS8qIEtUUl9DU1cgKi8NCiEgCTAsCQkJCQkvKiBLVFJfVVNF UiAqLw0KISAJMCwJCQkJCS8qIEtUUl9TT0NLQUREUiAqLw0KISAJMAkJCQkJLyogS1RSX1NUQVQg Ki8NCiAgfTsNCiAgDQogIHN0YXRpYyBTVEFJTFFfSEVBRCgsIGt0cl9yZXF1ZXN0KSBrdHJfZnJl ZTsNCioqKioqKioqKioqKioqKg0KKioqIDU1Miw1NTcgKioqKg0KLS0tIDU1Niw2MTAgLS0tLQ0K ICAJa2MtPnVzZXIgPSB1c2VyOw0KICAJa3RyX2VucXVldWVyZXF1ZXN0KGN1cnRocmVhZCwgcmVx KTsNCiAgfQ0KKyANCisgdm9pZA0KKyBrdHJzb2NrYWRkcihzaW4pDQorIAlzdHJ1Y3Qgc29ja2Fk ZHIgKnNpbjsNCisgew0KKyAJc3RydWN0IGt0cl9yZXF1ZXN0ICpyZXE7DQorIAljaGFyICpidWYg PSBOVUxMOw0KKyANCisgCWlmIChzaW4gJiYgc2luLT5zYV9sZW4gPiAwKSB7DQorIAkJYnVmID0g bWFsbG9jKHNpbi0+c2FfbGVuLCBNX0tUUkFDRSwgTV9XQUlUT0spOw0KKyAJCWJjb3B5KHNpbiwg YnVmLCBzaW4tPnNhX2xlbik7DQorIAl9DQorIAlyZXEgPSBrdHJfZ2V0cmVxdWVzdChLVFJfU09D S0FERFIpOw0KKyAJaWYgKHJlcSA9PSBOVUxMKSB7DQorIAkJaWYgKGJ1ZiAhPSBOVUxMKQ0KKyAJ CQlmcmVlKGJ1ZiwgTV9LVFJBQ0UpOw0KKyAJCXJldHVybjsNCisgCX0NCisgCWlmIChzaW4gJiYg c2luLT5zYV9sZW4gPiAwKSB7DQorIAkJcmVxLT5rdHJfYnVmZmVyID0gYnVmOw0KKyAJCXJlcS0+ a3RyX2hlYWRlci5rdHJfbGVuID0gc2luLT5zYV9sZW47DQorIAl9DQorIAlrdHJfc3VibWl0cmVx dWVzdChjdXJ0aHJlYWQsIHJlcSk7DQorIH0NCisgDQorIHZvaWQNCisga3Ryc3RhdChzdGF0cCkN CisgCXN0cnVjdCBzdGF0ICpzdGF0cDsNCisgew0KKyAJc3RydWN0IGt0cl9yZXF1ZXN0ICpyZXE7 DQorIAlzdHJ1Y3Qgc3RhdCAqYnVmID0gTlVMTDsNCisgDQorIAlpZiAoc3RhdHApIHsNCisgCQli dWYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGF0KSwgTV9LVFJBQ0UsIE1fV0FJVE9LKTsNCisg CQkqYnVmID0gKnN0YXRwOw0KKyAJfQ0KKyAJcmVxID0ga3RyX2dldHJlcXVlc3QoS1RSX1NUQVQp Ow0KKyAJaWYgKHJlcSA9PSBOVUxMKSB7DQorIAkJaWYgKGJ1ZiAhPSBOVUxMKQ0KKyAJCQlmcmVl KGJ1ZiwgTV9LVFJBQ0UpOw0KKyAJCXJldHVybjsNCisgCX0NCisgCWlmIChzdGF0cCkgew0KKyAJ CXJlcS0+a3RyX2J1ZmZlciA9IGJ1ZjsNCisgCQlyZXEtPmt0cl9oZWFkZXIua3RyX2xlbiA9IHNp emVvZihzdHJ1Y3Qgc3RhdCk7DQorIAl9DQorIA0KKyAJa3RyX3N1Ym1pdHJlcXVlc3QoY3VydGhy ZWFkLCByZXEpOw0KKyB9DQogICNlbmRpZiAvKiBLVFJBQ0UgKi8NCiAgDQogIC8qIEludGVyZmFj ZSBhbmQgY29tbW9uIHJvdXRpbmVzICovDQoqKiogLi9zeXMva2Vybi92ZnNfc3lzY2FsbHMuYy5v cmlnCU1vbiBTZXAgMTAgMTA6MDA6MTYgMjAwNw0KLS0tIC4vc3lzL2tlcm4vdmZzX3N5c2NhbGxz LmMJTW9uIE9jdCAyMiAxMjoxNzowMCAyMDA3DQoqKioqKioqKioqKioqKioNCioqKiAzOCw0MyAq KioqDQotLS0gMzgsNDQgLS0tLQ0KICBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMva2Vybi92 ZnNfc3lzY2FsbHMuYyx2IDEuNDQzIDIwMDcvMDkvMTAgMDA6MDA6MTYgcndhdHNvbiBFeHAgJCIp Ow0KICANCiAgI2luY2x1ZGUgIm9wdF9jb21wYXQuaCINCisgI2luY2x1ZGUgIm9wdF9rdHJhY2Uu aCINCiAgI2luY2x1ZGUgIm9wdF9tYWMuaCINCiAgDQogICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4N CioqKioqKioqKioqKioqKg0KKioqIDY3LDcyICoqKioNCi0tLSA2OCw3NiAtLS0tDQogICNpbmNs dWRlIDxzeXMvamFpbC5oPg0KICAjaW5jbHVkZSA8c3lzL3N5c2NhbGxzdWJyLmg+DQogICNpbmNs dWRlIDxzeXMvc3lzY3RsLmg+DQorICNpZmRlZiBLVFJBQ0UNCisgI2luY2x1ZGUgPHN5cy9rdHJh Y2UuaD4NCisgI2VuZGlmDQogIA0KICAjaW5jbHVkZSA8bWFjaGluZS9zdGRhcmcuaD4NCiAgDQoq KioqKioqKioqKioqKioNCioqKiAyMTE4LDIxMjMgKioqKg0KLS0tIDIxMjIsMjEzMSAtLS0tDQog IAlpZiAoZXJyb3IpDQogIAkJcmV0dXJuIChlcnJvcik7DQogIAkqc2JwID0gc2I7DQorICNpZmRl ZiBLVFJBQ0UNCisgCWlmIChLVFJQT0lOVCh0ZCwgS1RSX1NUQVQpKQ0KKyAJCWt0cnN0YXQoJnNi KTsNCisgI2VuZGlmDQogIAlyZXR1cm4gKDApOw0KICB9DQogIA0KKioqKioqKioqKioqKioqDQoq KiogMjE2OSwyMTc0ICoqKioNCi0tLSAyMTc3LDIxODYgLS0tLQ0KICAJaWYgKGVycm9yKQ0KICAJ CXJldHVybiAoZXJyb3IpOw0KICAJKnNicCA9IHNiOw0KKyAjaWZkZWYgS1RSQUNFDQorIAlpZiAo S1RSUE9JTlQodGQsIEtUUl9TVEFUKSkNCisgCQlrdHJzdGF0KCZzYik7DQorICNlbmRpZg0KICAJ cmV0dXJuICgwKTsNCiAgfQ0KICANCioqKiAuL3N5cy9rZXJuL2tlcm5fZGVzY3JpcC5jLm9yaWcJ VHVlIEF1ZyAgNyAwMDoyNjowMCAyMDA3DQotLS0gLi9zeXMva2Vybi9rZXJuX2Rlc2NyaXAuYwlT YXQgT2N0IDIwIDIwOjE3OjAzIDIwMDcNCioqKioqKioqKioqKioqKg0KKioqIDM5LDQ0ICoqKioN Ci0tLSAzOSw0NSAtLS0tDQogIA0KICAjaW5jbHVkZSAib3B0X2NvbXBhdC5oIg0KICAjaW5jbHVk ZSAib3B0X2RkYi5oIg0KKyAjaW5jbHVkZSAib3B0X2t0cmFjZS5oIg0KICANCiAgI2luY2x1ZGUg PHN5cy9wYXJhbS5oPg0KICAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+DQoqKioqKioqKioqKioqKioN CioqKiA2OSw3NCAqKioqDQotLS0gNzAsNzggLS0tLQ0KICAjaW5jbHVkZSA8c3lzL3N5c3Byb3Rv Lmg+DQogICNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+DQogICNpbmNsdWRlIDxzeXMvdm5vZGUuaD4N CisgI2lmZGVmIEtUUkFDRQ0KKyAjaW5jbHVkZSA8c3lzL2t0cmFjZS5oPg0KKyAjZW5kaWYNCiAg DQogICNpbmNsdWRlIDxzZWN1cml0eS9hdWRpdC9hdWRpdC5oPg0KICANCioqKioqKioqKioqKioq Kg0KKioqIDExMjksMTEzNCAqKioqDQotLS0gMTEzMywxMTQyIC0tLS0NCiAgDQogIAllcnJvciA9 IGZvX3N0YXQoZnAsIHNicCwgdGQtPnRkX3VjcmVkLCB0ZCk7DQogIAlmZHJvcChmcCwgdGQpOw0K KyAjaWZkZWYgS1RSQUNFDQorIAlpZiAoZXJyb3IgPT0gMCAmJiBLVFJQT0lOVCh0ZCwgS1RSX1NU QVQpKQ0KKyAJCWt0cnN0YXQoc2JwKTsNCisgI2VuZGlmDQogIAlyZXR1cm4gKGVycm9yKTsNCiAg fQ0KICANCioqKiAuL3N5cy9rZXJuL3VpcGNfc3lzY2FsbHMuYy5vcmlnCU1vbiBBdWcgMjcgMTU6 MTk6NDUgMjAwNw0KLS0tIC4vc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jCU1vbiBPY3QgMjIgMTI6 MTU6MDIgMjAwNw0KKioqKioqKioqKioqKioqDQoqKiogMjI3LDIzMiAqKioqDQotLS0gMjI3LDIz NiAtLS0tDQogIAlpZiAoZXJyb3IpDQogIAkJcmV0dXJuIChlcnJvcik7DQogIAlzbyA9IGZwLT5m X2RhdGE7DQorICNpZmRlZiBLVFJBQ0UNCisgCWlmIChLVFJQT0lOVCh0ZCwgS1RSX1NPQ0tBRERS KSkNCisgCQlrdHJzb2NrYWRkcihzYSk7DQorICNlbmRpZg0KICAjaWZkZWYgTUFDDQogIAlTT0NL X0xPQ0soc28pOw0KICAJZXJyb3IgPSBtYWNfY2hlY2tfc29ja2V0X2JpbmQodGQtPnRkX3VjcmVk LCBzbywgc2EpOw0KKioqKioqKioqKioqKioqDQoqKiogNDU0LDQ1OSAqKioqDQotLS0gNDU4LDQ2 NyAtLS0tDQogIAkJLyogY2hlY2sgc2FfbGVuIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQgKi8NCiAg CQlpZiAoKm5hbWVsZW4gPiBzYS0+c2FfbGVuKQ0KICAJCQkqbmFtZWxlbiA9IHNhLT5zYV9sZW47 DQorICNpZmRlZiBLVFJBQ0UNCisgCQlpZiAoS1RSUE9JTlQodGQsIEtUUl9TT0NLQUREUikpDQor IAkJCWt0cnNvY2thZGRyKHNhKTsNCisgI2VuZGlmDQogIAkJKm5hbWUgPSBzYTsNCiAgCQlzYSA9 IE5VTEw7DQogIAl9DQoqKioqKioqKioqKioqKioNCioqKiA1NDgsNTUzICoqKioNCi0tLSA1NTYs NTY1IC0tLS0NCiAgCQllcnJvciA9IEVBTFJFQURZOw0KICAJCWdvdG8gZG9uZTE7DQogIAl9DQor ICNpZmRlZiBLVFJBQ0UNCisgCWlmIChLVFJQT0lOVCh0ZCwgS1RSX1NPQ0tBRERSKSkNCisgCQlr dHJzb2NrYWRkcihzYSk7DQorICNlbmRpZg0KICAjaWZkZWYgTUFDDQogIAlTT0NLX0xPQ0soc28p Ow0KICAJZXJyb3IgPSBtYWNfY2hlY2tfc29ja2V0X2Nvbm5lY3QodGQtPnRkX3VjcmVkLCBzbywg c2EpOw0KKioqKioqKioqKioqKioqDQoqKiogMTA3MCwxMDc1ICoqKioNCi0tLSAxMDgyLDEwOTEg LS0tLQ0KICAJfQ0KICBvdXQ6DQogIAlmZHJvcChmcCwgdGQpOw0KKyAjaWZkZWYgS1RSQUNFDQor IAlpZiAoS1RSUE9JTlQodGQsIEtUUl9TT0NLQUREUikpDQorIAkJa3Ryc29ja2FkZHIoZnJvbXNh KTsNCisgI2VuZGlmDQogIAlpZiAoZnJvbXNhKQ0KICAJCUZSRUUoZnJvbXNhLCBNX1NPTkFNRSk7 DQogIA0KKioqKioqKioqKioqKioqDQoqKiogMTQ3NCwxNDc5ICoqKioNCi0tLSAxNDkwLDE0OTkg LS0tLQ0KICAJZWxzZQ0KICAJCWxlbiA9IE1JTigqYWxlbiwgKCpzYSktPnNhX2xlbik7DQogIAkq YWxlbiA9IGxlbjsNCisgI2lmZGVmIEtUUkFDRQ0KKyAJaWYgKEtUUlBPSU5UKHRkLCBLVFJfU09D S0FERFIpKQ0KKyAJCWt0cnNvY2thZGRyKCpzYSk7DQorICNlbmRpZg0KICBiYWQ6DQogIAlmZHJv cChmcCwgdGQpOw0KICAJaWYgKGVycm9yICYmICpzYSkgew0KKioqKioqKioqKioqKioqDQoqKiog MTU3MSwxNTc2ICoqKioNCi0tLSAxNTkxLDE2MDAgLS0tLQ0KICAJZWxzZQ0KICAJCWxlbiA9IE1J TigqYWxlbiwgKCpzYSktPnNhX2xlbik7DQogIAkqYWxlbiA9IGxlbjsNCisgI2lmZGVmIEtUUkFD RQ0KKyAJaWYgKEtUUlBPSU5UKHRkLCBLVFJfU09DS0FERFIpKQ0KKyAJCWt0cnNvY2thZGRyKCpz YSk7DQorICNlbmRpZg0KICBiYWQ6DQogIAlpZiAoZXJyb3IgJiYgKnNhKSB7DQogIAkJZnJlZSgq c2EsIE1fU09OQU1FKTsNCioqKioqKioqKioqKioqKg0KKioqIDIzNDcsMjM1MiAqKioqDQotLS0g MjM3MSwyMzgwIC0tLS0NCiAgCWVycm9yID0gZ2V0c29jayh0ZC0+dGRfcHJvYy0+cF9mZCwgdWFw LT5zZCwgJmZwLCBOVUxMKTsNCiAgCWlmIChlcnJvcikNCiAgCQlnb3RvIHNjdHBfYmFkOw0KKyAj aWZkZWYgS1RSQUNFDQorIAlpZiAoS1RSUE9JTlQodGQsIEtUUl9TT0NLQUREUikpDQorIAkJa3Ry c29ja2FkZHIodG8pOw0KKyAjZW5kaWYNCiAgDQogIAlpb3ZbMF0uaW92X2Jhc2UgPSB1YXAtPm1z ZzsNCiAgCWlvdlswXS5pb3ZfbGVuID0gdWFwLT5tbGVuOw0KKioqKioqKioqKioqKioqDQoqKiog MjQ1MCwyNDU1ICoqKioNCi0tLSAyNDc4LDI0ODcgLS0tLQ0KICAJZXJyb3IgPSBjb3B5aW5pb3Yo dWFwLT5pb3YsIHVhcC0+aW92bGVuLCAmaW92LCBFTVNHU0laRSk7DQogIAlpZiAoZXJyb3IpDQog IAkJZ290byBzY3RwX2JhZDE7DQorICNpZmRlZiBLVFJBQ0UNCisgCWlmIChLVFJQT0lOVCh0ZCwg S1RSX1NPQ0tBRERSKSkNCisgCQlrdHJzb2NrYWRkcih0byk7DQorICNlbmRpZg0KICANCiAgCXNv ID0gKHN0cnVjdCBzb2NrZXQgKilmcC0+Zl9kYXRhOw0KICAjaWZkZWYgTUFDDQoqKioqKioqKioq KioqKioNCioqKiAyNjMzLDI2MzggKioqKg0KLS0tIDI2NjUsMjY3NCAtLS0tDQogIAkJCWdvdG8g b3V0Ow0KICAJCX0NCiAgCX0NCisgI2lmZGVmIEtUUkFDRQ0KKyAJaWYgKEtUUlBPSU5UKHRkLCBL VFJfU09DS0FERFIpKQ0KKyAJCWt0cnNvY2thZGRyKGZyb21zYSk7DQorICNlbmRpZg0KICAJaWYg KHVhcC0+bXNnX2ZsYWdzKSB7DQogIAkJZXJyb3IgPSBjb3B5b3V0KCZtc2dfZmxhZ3MsIHVhcC0+ bXNnX2ZsYWdzLCBzaXplb2YgKGludCkpOw0KICAJCWlmIChlcnJvcikgew0KKioqIC4vc3lzL3N5 cy9rdHJhY2UuaC5vcmlnCVR1ZSBEZWMgMjcgMDk6MDk6MDkgMjAwNQ0KLS0tIC4vc3lzL3N5cy9r dHJhY2UuaAlTYXQgT2N0IDIwIDIwOjE1OjQxIDIwMDcNCioqKioqKioqKioqKioqKg0KKioqIDE1 MSwxNTYgKioqKg0KLS0tIDE1MSwxNjggLS0tLQ0KICAjZGVmaW5lIEtUUl9VU0VSCTcNCiAgDQog IC8qDQorICAqIEtUUl9TT0NLQUREUiAtIHNvY2tldCBhZGRyZXNzIGNhbGxzDQorICAqLw0KKyAj ZGVmaW5lIEtUUl9TT0NLQUREUgk4DQorIHN0cnVjdCBzb2NrYWRkcjsNCisgDQorIC8qDQorICAq IEtUUl9TVEFUIC0gZmlsZSBzdGF0IGNhbGxzDQorICAqLw0KKyAjZGVmaW5lIEtUUl9TVEFUCTkN Cisgc3RydWN0IHN0YXQ7DQorIA0KKyAvKg0KICAgKiBLVFJfRFJPUCAtIElmIHRoaXMgYml0IGlz IHNldCBpbiBrdHJfdHlwZSwgdGhlbiBhdCBsZWFzdCBvbmUgZXZlbnQNCiAgICogYmV0d2VlbiB0 aGUgcHJldmlvdXMgcmVjb3JkIGFuZCB0aGlzIHJlY29yZCB3YXMgZHJvcHBlZC4NCiAgICovDQoq KioqKioqKioqKioqKioNCioqKiAxNjcsMTcyICoqKioNCi0tLSAxNzksMTg2IC0tLS0NCiAgI2Rl ZmluZQlLVFJGQUNfUFNJRwkoMTw8S1RSX1BTSUcpDQogICNkZWZpbmUgS1RSRkFDX0NTVwkoMTw8 S1RSX0NTVykNCiAgI2RlZmluZSBLVFJGQUNfVVNFUgkoMTw8S1RSX1VTRVIpDQorICNkZWZpbmUg S1RSRkFDX1NPQ0tBRERSCSgxPDxLVFJfU09DS0FERFIpDQorICNkZWZpbmUgS1RSRkFDX1NUQVQJ KDE8PEtUUl9TVEFUKQ0KICAvKg0KICAgKiB0cmFjZSBmbGFncyAoYWxzbyBpbiBwX3RyYWNlZmxh Z3MpDQogICAqLw0KKioqKioqKioqKioqKioqDQoqKiogMTg1LDE5MCAqKioqDQotLS0gMTk5LDIw NiAtLS0tDQogIHZvaWQJa3Ryc3lzcmV0KGludCwgaW50LCByZWdpc3Rlcl90KTsNCiAgdm9pZAlr dHJwcm9jZXhpdChzdHJ1Y3QgdGhyZWFkICopOw0KICB2b2lkCWt0cnVzZXJyZXQoc3RydWN0IHRo cmVhZCAqKTsNCisgdm9pZAlrdHJzb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKik7DQorIHZvaWQJ a3Ryc3RhdChzdHJ1Y3Qgc3RhdCAqKTsNCiAgDQogICNlbHNlDQogIA0KKioqIC4vdXNyLmJpbi9r ZHVtcC9rZHVtcC5jLm9yaWcJVHVlIEp1bCAxMCAxMDowMTozMCAyMDA3DQotLS0gLi91c3IuYmlu L2tkdW1wL2tkdW1wLmMJTW9uIE9jdCAyMiAyMjozMzoyNSAyMDA3DQoqKioqKioqKioqKioqKioN CioqKiA1OCw2OSAqKioqDQotLS0gNTgsODMgLS0tLQ0KICAjaW5jbHVkZSA8c3lzL2t0cmFjZS5o Pg0KICAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQogICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQor ICNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KKyAjaW5jbHVkZSA8c3lzL3VuLmg+DQorICNpZmRlZiBJ UFgNCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKyAjaW5jbHVkZSA8bmV0aXB4L2lweC5oPg0K KyAjZW5kaWYNCisgI2lmZGVmIE5FVEFUQUxLDQorICNpbmNsdWRlIDxuZXRhdGFsay9hdC5oPg0K KyAjZW5kaWYNCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiAgI2luY2x1ZGUgPGRsZmNuLmg+ DQogICNpbmNsdWRlIDxlcnIuaD4NCisgI2luY2x1ZGUgPGdycC5oPg0KKyAjaW5jbHVkZSA8aW50 dHlwZXMuaD4NCiAgI2luY2x1ZGUgPGxvY2FsZS5oPg0KKyAjaW5jbHVkZSA8cHdkLmg+DQogICNp bmNsdWRlIDxzdGRpby5oPg0KICAjaW5jbHVkZSA8c3RkbGliLmg+DQogICNpbmNsdWRlIDxzdHJp bmcuaD4NCisgI2luY2x1ZGUgPHRpbWUuaD4NCiAgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAjaW5j bHVkZSA8dmlzLmg+DQogICNpbmNsdWRlICJrdHJhY2UuaCINCioqKioqKioqKioqKioqKg0KKioq IDgwLDkyICoqKioNCiAgdm9pZCBrdHJwc2lnKHN0cnVjdCBrdHJfcHNpZyAqKTsNCiAgdm9pZCBr dHJjc3coc3RydWN0IGt0cl9jc3cgKik7DQogIHZvaWQga3RydXNlcihpbnQsIHVuc2lnbmVkIGNo YXIgKik7DQogIHZvaWQgdXNhZ2Uodm9pZCk7DQogIGNvbnN0IGNoYXIgKmlvY3RsbmFtZSh1X2xv bmcpOw0KICANCiEgaW50IHRpbWVzdGFtcCwgZGVjaW1hbCwgZmFuY3kgPSAxLCBzdXBwcmVzc2Rh dGEsIHRhaWwsIHRocmVhZHMsIG1heGRhdGE7DQogIGNvbnN0IGNoYXIgKnRyYWNlZmlsZSA9IERF Rl9UUkFDRUZJTEU7DQogIHN0cnVjdCBrdHJfaGVhZGVyIGt0cl9oZWFkZXI7DQogIA0KICAjZGVm aW5lIGVxcyhzMSwgczIpCShzdHJjbXAoKHMxKSwgKHMyKSkgPT0gMCkNCiAgDQogIGludA0KLS0t IDk0LDExMCAtLS0tDQogIHZvaWQga3RycHNpZyhzdHJ1Y3Qga3RyX3BzaWcgKik7DQogIHZvaWQg a3RyY3N3KHN0cnVjdCBrdHJfY3N3ICopOw0KICB2b2lkIGt0cnVzZXIoaW50LCB1bnNpZ25lZCBj aGFyICopOw0KKyB2b2lkIGt0cnNvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqKTsNCisgdm9pZCBr dHJzdGF0KHN0cnVjdCBzdGF0ICopOw0KICB2b2lkIHVzYWdlKHZvaWQpOw0KICBjb25zdCBjaGFy ICppb2N0bG5hbWUodV9sb25nKTsNCiAgDQohIGludCB0aW1lc3RhbXAsIGRlY2ltYWwsIGZhbmN5 ID0gMSwgc3VwcHJlc3NkYXRhLCB0YWlsLCB0aHJlYWRzLCBtYXhkYXRhLA0KISAgICAgcmVzb2x2 ID0gMDsNCiAgY29uc3QgY2hhciAqdHJhY2VmaWxlID0gREVGX1RSQUNFRklMRTsNCiAgc3RydWN0 IGt0cl9oZWFkZXIga3RyX2hlYWRlcjsNCiAgDQorICNkZWZpbmUgVElNRV9GT1JNQVQJIiViICVl ICVUICVZIg0KICAjZGVmaW5lIGVxcyhzMSwgczIpCShzdHJjbXAoKHMxKSwgKHMyKSkgPT0gMCkN CiAgDQogIGludA0KKioqKioqKioqKioqKioqDQoqKiogMTAwLDEwNiAqKioqDQogIA0KICAJKHZv aWQpIHNldGxvY2FsZShMQ19DVFlQRSwgIiIpOw0KICANCiEgCXdoaWxlICgoY2ggPSBnZXRvcHQo YXJnYyxhcmd2LCJmOmRFbG06bnA6SFJzVHQ6IikpICE9IC0xKQ0KICAJCXN3aXRjaCgoY2hhcilj aCkgew0KICAJCWNhc2UgJ2YnOg0KICAJCQl0cmFjZWZpbGUgPSBvcHRhcmc7DQotLS0gMTE4LDEy NCAtLS0tDQogIA0KICAJKHZvaWQpIHNldGxvY2FsZShMQ19DVFlQRSwgIiIpOw0KICANCiEgCXdo aWxlICgoY2ggPSBnZXRvcHQoYXJnYyxhcmd2LCJmOmRFbG06bnA6SFJyc1R0OiIpKSAhPSAtMSkN CiAgCQlzd2l0Y2goKGNoYXIpY2gpIHsNCiAgCQljYXNlICdmJzoNCiAgCQkJdHJhY2VmaWxlID0g b3B0YXJnOw0KKioqKioqKioqKioqKioqDQoqKiogMTIwLDEyNSAqKioqDQotLS0gMTM4LDE0NiAt LS0tDQogIAkJY2FzZSAncCc6DQogIAkJCXBpZCA9IGF0b2kob3B0YXJnKTsNCiAgCQkJYnJlYWs7 DQorIAkJY2FzZSAncic6DQorIAkJCXJlc29sdiA9IDE7DQorIAkJCWJyZWFrOw0KICAJCWNhc2Ug J3MnOg0KICAJCQlzdXBwcmVzc2RhdGEgPSAxOw0KICAJCQlicmVhazsNCioqKioqKioqKioqKioq Kg0KKioqIDIwOSwyMTQgKioqKg0KLS0tIDIzMCwyNDEgLS0tLQ0KICAJCWNhc2UgS1RSX1VTRVI6 DQogIAkJCWt0cnVzZXIoa3RybGVuLCBtKTsNCiAgCQkJYnJlYWs7DQorIAkJY2FzZSBLVFJfU09D S0FERFI6DQorIAkJCWt0cnNvY2thZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKiltKTsNCisgCQkJYnJl YWs7DQorIAkJY2FzZSBLVFJfU1RBVDoNCisgCQkJa3Ryc3RhdCgoc3RydWN0IHN0YXQgKiltKTsN CisgCQkJYnJlYWs7DQogIAkJZGVmYXVsdDoNCiAgCQkJcHJpbnRmKCJcbiIpOw0KICAJCQlicmVh azsNCioqKioqKioqKioqKioqKg0KKioqIDI2MCwyNjUgKioqKg0KLS0tIDI4NywyOTggLS0tLQ0K ICAJY2FzZSBLVFJfVVNFUjoNCiAgCQl0eXBlID0gIlVTRVIiOw0KICAJCWJyZWFrOw0KKyAJY2Fz ZSBLVFJfU09DS0FERFI6DQorIAkJdHlwZSA9ICJTT0NLIjsNCisgCQlicmVhazsNCisgCWNhc2Ug S1RSX1NUQVQ6DQorIAkJdHlwZSA9ICJTVEFUIjsNCisgCQlicmVhazsNCiAgCWRlZmF1bHQ6DQog IAkJKHZvaWQpc3ByaW50Zih1bmtub3duLCAiVU5LTk9XTiglZCkiLCBrdGgtPmt0cl90eXBlKTsN CiAgCQl0eXBlID0gdW5rbm93bjsNCioqKioqKioqKioqKioqKg0KKioqIDExMTUsMTEyMCAqKioq DQotLS0gMTE0OCwxMjk0IC0tLS0NCiAgfQ0KICANCiAgdm9pZA0KKyBrdHJzb2NrYWRkcihzdHJ1 Y3Qgc29ja2FkZHIgKmt0cykNCisgew0KKyAvKg0KKyAgVE9ETzogU3VwcG9ydCBhZGRpdGlvbmFs IGFkZHJlc3MgZmFtaWxpZXMNCisgCSNpbmNsdWRlIDxuZXRhdG0vYXRtLmg+DQorIAlzdHJ1Y3Qg c29ja2FkZHJfYXRtCSphdG07DQorIAkjaW5jbHVkZSA8bmV0bmF0bS9uYXRtLmg+DQorIAlzdHJ1 Y3Qgc29ja2FkZHJfbmF0bQkqbmF0bTsNCisgCSNpbmNsdWRlIDxuZXRzbWIvbmV0Ymlvcy5oPg0K KyAJc3RydWN0IHNvY2thZGRyX25iCSpuYjsNCisgKi8NCisgCWNoYXIgYWRkcls2NF07DQorIA0K KyAJcHJpbnRmKCJ7ICIpOw0KKyAJc29ja2Fwcm90b25hbWUoa3RzLT5zYV9mYW1pbHkpOw0KKyAJ c3dpdGNoKGt0cy0+c2FfZmFtaWx5KSB7DQorIAljYXNlIEFGX0lORVQ6IHsNCisgCQlzdHJ1Y3Qg c29ja2FkZHJfaW4JKmluOw0KKyANCisgCQlpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilrdHM7 DQorIAkJcHJpbnRmKCIsICVzOiV1IH1cbiIsIGluZXRfbnRvYShpbi0+c2luX2FkZHIpLA0KKyAJ CQludG9ocyhpbi0+c2luX3BvcnQpKTsNCisgCQlicmVhazsNCisgCX0NCisgI2lmZGVmIE5FVEFU QUxLDQorIAljYXNlIEFGX0FQUExFVEFMSzogew0KKyAJCXN0cnVjdCBzb2NrYWRkcl9hdAkqYXQ7 DQorIAkJc3RydWN0IG5ldHJhbmdlCQkqbnI7DQorIA0KKyAJCWF0ID0gKHN0cnVjdCBzb2NrYWRk cl9hdCAqKWt0czsNCisgCQluciA9ICZhdC0+c2F0X3JhbmdlLnJfbmV0cmFuZ2U7DQorIAkJcHJp bnRmKCIsICVkLiVkLCAlZC0lZCwgJWQgfVxuIiwgbnRvaHMoYXQtPnNhdF9hZGRyLnNfbmV0KSwN CisgCQkJYXQtPnNhdF9hZGRyLnNfbm9kZSwgbnRvaHMobnItPm5yX2ZpcnN0bmV0KSwNCisgCQkJ bnRvaHMobnItPm5yX2xhc3RuZXQpLCBuci0+bnJfcGhhc2UpOw0KKyAJCWJyZWFrOw0KKyAJfQ0K KyAjZW5kaWYNCisgCWNhc2UgQUZfSU5FVDY6IHsNCisgCQlzdHJ1Y3Qgc29ja2FkZHJfaW42CSpp bjY7DQorIA0KKyAJCWluNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopa3RzOw0KKyAJCWluZXRf bnRvcChBRl9JTkVUNiwgJmluNi0+c2luNl9hZGRyLCBhZGRyLCBzaXplb2YoYWRkcikpOw0KKyAJ CXByaW50ZigiLCBbJXNdOiV1IH1cbiIsIGFkZHIsIGh0b25zKGluNi0+c2luNl9wb3J0KSk7DQor IAkJYnJlYWs7DQorIAl9DQorICNpZmRlZiBJUFgNCisgCWNhc2UgQUZfSVBYOiB7DQorIAkJc3Ry dWN0IHNvY2thZGRyX2lweAkqaXB4Ow0KKyANCisgCQlpcHggPSAoc3RydWN0IHNvY2thZGRyX2lw eCAqKWt0czsNCisgCQlwcmludGYoIiwgJXMgfVxuIiwgaXB4X250b2EoaXB4LT5zaXB4X2FkZHIp KTsNCisgCQlicmVhazsNCisgCX0NCisgI2VuZGlmDQorIAljYXNlIEFGX1VOSVg6IHsNCisgCQlz dHJ1Y3Qgc29ja2FkZHJfdW4JKnVuOw0KKyANCisgCQl1biA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4g KilrdHM7DQorIAkJcHJpbnRmKCIsICUuKnMgfVxuIiwgdW4tPnN1bl9sZW4sIHVuLT5zdW5fcGF0 aCk7DQorIAkJYnJlYWs7DQorIAl9DQorIAlkZWZhdWx0Og0KKyAJCXByaW50ZigiVU5LTk9XTiBG QU1JTFkgfVxuIik7DQorIAl9DQorIH0NCisgDQorIHZvaWQNCisga3Ryc3RhdChzdHJ1Y3Qgc3Rh dCAqc3RhdHApDQorIHsNCisgCWNoYXIgbW9kZVsxMl0sIHRpbWVzdHJbUEFUSF9NQVggKyA0XTsN CisgCXN0cnVjdCBwYXNzd2QgKnB3ZDsNCisgCXN0cnVjdCBncm91cCAgKmdycDsNCisgCXN0cnVj dCB0bSAqdG07DQorIA0KKyAJc3RybW9kZShzdGF0cC0+c3RfbW9kZSwgbW9kZSk7DQorIAlwcmlu dGYoIntkZXY9JWp1LCBpbm89JWp1LCBtb2RlPSVzLCBubGluaz0lanUsICIsDQorIAkJKHVpbnRt YXhfdClzdGF0cC0+c3RfZGV2LCAodWludG1heF90KXN0YXRwLT5zdF9pbm8sIG1vZGUsDQorIAkJ KHVpbnRtYXhfdClzdGF0cC0+c3RfbmxpbmspOw0KKyAJaWYgKHJlc29sdiA9PSAwIHx8IChwd2Qg PSBnZXRwd3VpZChzdGF0cC0+c3RfdWlkKSkgPT0gTlVMTCkNCisgCQlwcmludGYoInVpZD0lanUs ICIsICh1aW50bWF4X3Qpc3RhdHAtPnN0X3VpZCk7DQorIAllbHNlDQorIAkJcHJpbnRmKCJ1aWQ9 XCIlc1wiLCAiLCBwd2QtPnB3X25hbWUpOw0KKyAJaWYgKHJlc29sdiA9PSAwIHx8IChncnAgPSBn ZXRncmdpZChzdGF0cC0+c3RfZ2lkKSkgPT0gTlVMTCkNCisgCQlwcmludGYoImdpZD0lanUsICIs ICh1aW50bWF4X3Qpc3RhdHAtPnN0X2dpZCk7DQorIAllbHNlDQorIAkJcHJpbnRmKCJnaWQ9XCIl c1wiLCAiLCBncnAtPmdyX25hbWUpOw0KKyAJcHJpbnRmKCJyZGV2PSVqdSwgIiwgKHVpbnRtYXhf dClzdGF0cC0+c3RfcmRldik7DQorIAlwcmludGYoImF0aW1lPSIpOw0KKyAJaWYgKHJlc29sdiA9 PSAwKQ0KKyAJCXByaW50ZigiJWxkIiwgc3RhdHAtPnN0X2F0aW1lc3BlYy50dl9zZWMpOw0KKyAJ ZWxzZSB7DQorIAkJdG0gPSBsb2NhbHRpbWUoJnN0YXRwLT5zdF9hdGltZXNwZWMudHZfc2VjKTsN CisgCQkodm9pZClzdHJmdGltZSh0aW1lc3RyLCBzaXplb2YodGltZXN0ciksIFRJTUVfRk9STUFU LCB0bSk7DQorIAkJcHJpbnRmKCJcIiVzXCIiLCB0aW1lc3RyKTsNCisgCX0NCisgCWlmIChzdGF0 cC0+c3RfYXRpbWVzcGVjLnR2X25zZWMgIT0gMCkNCisgCQlwcmludGYoIi4lMDlsZCwgIiwgc3Rh dHAtPnN0X2F0aW1lc3BlYy50dl9uc2VjKTsNCisgCWVsc2UNCisgCQlwcmludGYoIiwgIik7DQor IAlwcmludGYoInN0aW1lPSIpOw0KKyAJaWYgKHJlc29sdiA9PSAwKQ0KKyAJCXByaW50ZigiJWxk Iiwgc3RhdHAtPnN0X210aW1lc3BlYy50dl9zZWMpOw0KKyAJZWxzZSB7DQorIAkJdG0gPSBsb2Nh bHRpbWUoJnN0YXRwLT5zdF9tdGltZXNwZWMudHZfc2VjKTsNCisgCQkodm9pZClzdHJmdGltZSh0 aW1lc3RyLCBzaXplb2YodGltZXN0ciksIFRJTUVfRk9STUFULCB0bSk7DQorIAkJcHJpbnRmKCJc IiVzXCIiLCB0aW1lc3RyKTsNCisgCX0NCisgCWlmIChzdGF0cC0+c3RfbXRpbWVzcGVjLnR2X25z ZWMgIT0gMCkNCisgCQlwcmludGYoIi4lMDlsZCwgIiwgc3RhdHAtPnN0X210aW1lc3BlYy50dl9u c2VjKTsNCisgCWVsc2UNCisgCQlwcmludGYoIiwgIik7DQorIAlwcmludGYoImN0aW1lPSIpOw0K KyAJaWYgKHJlc29sdiA9PSAwKQ0KKyAJCXByaW50ZigiJWxkIiwgc3RhdHAtPnN0X2N0aW1lc3Bl Yy50dl9zZWMpOw0KKyAJZWxzZSB7DQorIAkJdG0gPSBsb2NhbHRpbWUoJnN0YXRwLT5zdF9jdGlt ZXNwZWMudHZfc2VjKTsNCisgCQkodm9pZClzdHJmdGltZSh0aW1lc3RyLCBzaXplb2YodGltZXN0 ciksIFRJTUVfRk9STUFULCB0bSk7DQorIAkJcHJpbnRmKCJcIiVzXCIiLCB0aW1lc3RyKTsNCisg CX0NCisgCWlmIChzdGF0cC0+c3RfY3RpbWVzcGVjLnR2X25zZWMgIT0gMCkNCisgCQlwcmludGYo Ii4lMDlsZCwgIiwgc3RhdHAtPnN0X2N0aW1lc3BlYy50dl9uc2VjKTsNCisgCWVsc2UNCisgCQlw cmludGYoIiwgIik7DQorIAlwcmludGYoImJpcnRodGltZT0iKTsNCisgCWlmIChyZXNvbHYgPT0g MCkNCisgCQlwcmludGYoIiVsZCIsIHN0YXRwLT5zdF9iaXJ0aHRpbWVzcGVjLnR2X3NlYyk7DQor IAllbHNlIHsNCisgCQl0bSA9IGxvY2FsdGltZSgmc3RhdHAtPnN0X2JpcnRodGltZXNwZWMudHZf c2VjKTsNCisgCQkodm9pZClzdHJmdGltZSh0aW1lc3RyLCBzaXplb2YodGltZXN0ciksIFRJTUVf Rk9STUFULCB0bSk7DQorIAkJcHJpbnRmKCJcIiVzXCIiLCB0aW1lc3RyKTsNCisgCX0NCisgCWlm IChzdGF0cC0+c3RfYmlydGh0aW1lc3BlYy50dl9uc2VjICE9IDApDQorIAkJcHJpbnRmKCIuJTA5 bGQsICIsIHN0YXRwLT5zdF9iaXJ0aHRpbWVzcGVjLnR2X25zZWMpOw0KKyAJZWxzZQ0KKyAJCXBy aW50ZigiLCAiKTsNCisgCXByaW50Zigic2l6ZT0lamQsIGJsa3NpemU9JWp1LCBibG9ja3M9JWpk LCBmbGFncz0weCV4fVxuIiwNCisgCQkodWludG1heF90KXN0YXRwLT5zdF9zaXplLCAodWludG1h eF90KXN0YXRwLT5zdF9ibGtzaXplLA0KKyAJCShpbnRtYXhfdClzdGF0cC0+c3RfYmxvY2tzLCBz dGF0cC0+c3RfZmxhZ3MpOw0KKyB9DQorIA0KKyB2b2lkDQogIHVzYWdlKHZvaWQpDQogIHsNCiAg CSh2b2lkKWZwcmludGYoc3RkZXJyLA0KKioqIC4vdXNyLmJpbi9rZHVtcC9ta3N1YnIub3JpZwlU dWUgQXByIDEwIDA1OjE2OjI0IDIwMDcNCi0tLSAuL3Vzci5iaW4va2R1bXAvbWtzdWJyCVNhdCBP Y3QgMjAgMjA6MTU6MDcgMjAwNw0KKioqKioqKioqKioqKioqDQoqKiogMzM3LDM0MiAqKioqDQot LS0gMzM3LDM0MyAtLS0tDQogIGF1dG9fc3dpdGNoX3R5cGUgIm1pbmhlcml0bmFtZSIgIklOSEVS SVRfW0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0rIiAic3lzL21tYW4uaCINCiAgYXV0b19zd2l0Y2hf dHlwZSAicXVvdGFjdGxuYW1lIiAiUV9bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInVmcy91 ZnMvcXVvdGEuaCINCiAgYXV0b19pZl90eXBlICJzb2NrZG9tYWlubmFtZSIgIlBGX1tbOmFsbnVt Ol1dK1tbOnNwYWNlOl1dKyIgInN5cy9zb2NrZXQuaCINCisgYXV0b19pZl90eXBlICJzb2NrYXBy b3RvbmFtZSIgIkFGX1tbOmFsbnVtOl1dK1tbOnNwYWNlOl1dKyIgInN5cy9zb2NrZXQuaCINCiAg YXV0b19pZl90eXBlICJzb2NraXBwcm90b25hbWUiICJJUFBST1RPX1tbOmFsbnVtOl1dK1tbOnNw YWNlOl1dKyIgIm5ldGluZXQvaW4uaCINCiAgYXV0b19zd2l0Y2hfdHlwZSAic29ja29wdG5hbWUi ICJTT19bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInN5cy9zb2NrZXQuaCINCiAgYXV0b19z d2l0Y2hfdHlwZSAic29ja3R5cGVuYW1lIiAiU09DS19bQS1aXStbWzpzcGFjZTpdXStbMS05XStb MC05XSoiICJzeXMvc29ja2V0LmgiDQoqKiogLi91c3IuYmluL2tkdW1wL2tkdW1wLjEub3JpZwlG cmkgTm92IDE4IDIxOjM2OjI4IDIwMDUNCi0tLSAuL3Vzci5iaW4va2R1bXAva2R1bXAuMQlNb24g T2N0IDIyIDIyOjEwOjAyIDIwMDcNCioqKioqKioqKioqKioqKg0KKioqIDk2LDEwNiAqKioqDQog IHNhbWUgdHJhY2UgZmlsZS4NCiAgLkl0IEZsIFINCiAgRGlzcGxheSByZWxhdGl2ZSB0aW1lc3Rh bXBzICh0aW1lIHNpbmNlIHByZXZpb3VzIGVudHJ5KS4NCiAgLkl0IEZsIHMNCiAgU3VwcHJlc3Mg ZGlzcGxheSBvZiBJL08gZGF0YS4NCiAgLkl0IEZsIFQNCiAgRGlzcGxheSBhYnNvbHV0ZSB0aW1l c3RhbXBzIGZvciBlYWNoIGVudHJ5IChzZWNvbmRzIHNpbmNlIGVwb2NoKS4NCiEgLkl0IEZsIHQg QXIgY25pc3V3DQogIFNlZSB0aGUNCiAgLkZsIHQNCiAgb3B0aW9uIG9mDQotLS0gOTYsMTA5IC0t LS0NCiAgc2FtZSB0cmFjZSBmaWxlLg0KICAuSXQgRmwgUg0KICBEaXNwbGF5IHJlbGF0aXZlIHRp bWVzdGFtcHMgKHRpbWUgc2luY2UgcHJldmlvdXMgZW50cnkpLg0KKyAuSXQgRmwgcg0KKyBUcmFu c2xhdGUgdWlkLCBnaWQgYW5kIHRpbWVzcGVjcyBmb3IgU1RBVCByZWNvcmRzIGludG8gdXNlcm5h bWUsDQorIGdyb3VwbmFtZSBhbmQgbG9jYWwgdGltZSwgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHRo ZW0gYXMgbnVtYmVycy4NCiAgLkl0IEZsIHMNCiAgU3VwcHJlc3MgZGlzcGxheSBvZiBJL08gZGF0 YS4NCiAgLkl0IEZsIFQNCiAgRGlzcGxheSBhYnNvbHV0ZSB0aW1lc3RhbXBzIGZvciBlYWNoIGVu dHJ5IChzZWNvbmRzIHNpbmNlIGVwb2NoKS4NCiEgLkl0IEZsIHQgQXIgY25pa3N0dXcNCiAgU2Vl IHRoZQ0KICAuRmwgdA0KICBvcHRpb24gb2YNCioqKioqKioqKioqKioqKg0KKioqIDE2NSwxNzEg KioqKg0KLS0tIDE2OCwxNzYgLS0tLQ0KICAuSXQgTGkgUkVUIFRhIHJldHVybiBmcm9tIHN5c2Nh bGwgVGEgc3lzY2FsbCBuYW1lIGFuZCByZXR1cm4gdmFsdWUNCiAgLkl0IExpIE5BTUkgVGEgZmls ZSBuYW1lIGxvb2t1cCBUYSBwYXRoIHRvIGZpbGUNCiAgLkl0IExpIEdFTklPIFRhIGdlbmVyYWwg SS9PIFRhIGZkLCByZWFkL3dyaXRlLCBudW1iZXIgb2YgYnl0ZXMNCisgLkl0IExpIFNPQ0sgVGEg c29ja2FkZHIgc3lzY2FsbCBUYSBzdHJ1Y3Qgc29ja2FkZHIgdmFsdWVzDQogIC5JdCBMaSBTSUcg VGEgc2lnbmFsIFRhIHNpZ25hbCBuYW1lLCBoYW5kbGVyLCBtYXNrLCBjb2RlDQorIC5JdCBMaSBT VEFUIFRhIHN0YXQgc3lzY2FsbCBUYSBzdHJ1Y3Qgc3RhdCB2YWx1ZXMNCiAgLkl0IExpIENTVyBU YSBjb250ZXh0IHN3aXRjaCBUYSBzdG9wL3Jlc3VtZSB1c2VyL2tlcm5lbA0KICAuSXQgTGkgVVNF UiBUYSBkYXRhIGZyb20gdXNlciBwcm9jZXNzIFRhIHRoZSBkYXRhDQogIC5FbA0KKioqIC4vdXNy LmJpbi9rdHJhY2Uva3RyYWNlLmgub3JpZwlTdW4gQXByIDI4IDIzOjAwOjE2IDIwMDINCi0tLSAu L3Vzci5iaW4va3RyYWNlL2t0cmFjZS5oCVNhdCBPY3QgMjAgMjA6MTM6NTkgMjAwNw0KKioqKioq KioqKioqKioqDQoqKiogMzUsNDEgKioqKg0KICAgKi8NCiAgDQogICNkZWZpbmUgREVGX1BPSU5U UyAoS1RSRkFDX1NZU0NBTEwgfCBLVFJGQUNfU1lTUkVUIHwgS1RSRkFDX05BTUVJIHwgXA0KISAJ CSAgS1RSRkFDX0dFTklPIHwgS1RSRkFDX1BTSUcgfCBLVFJGQUNfVVNFUikNCiAgDQogICNkZWZp bmUgQUxMX1BPSU5UUyAoREVGX1BPSU5UUyB8IEtUUkZBQ19DU1cpDQogIA0KLS0tIDM1LDQyIC0t LS0NCiAgICovDQogIA0KICAjZGVmaW5lIERFRl9QT0lOVFMgKEtUUkZBQ19TWVNDQUxMIHwgS1RS RkFDX1NZU1JFVCB8IEtUUkZBQ19OQU1FSSB8IFwNCiEgCQkgIEtUUkZBQ19HRU5JTyB8IEtUUkZB Q19QU0lHIHwgS1RSRkFDX1VTRVIgfCBcDQohIAkJICBLVFJGQUNfU09DS0FERFIgfCBLVFJGQUNf U1RBVCkNCiAgDQogICNkZWZpbmUgQUxMX1BPSU5UUyAoREVGX1BPSU5UUyB8IEtUUkZBQ19DU1cp DQogIA0KKioqIC4vdXNyLmJpbi9rdHJhY2Uva3RyYWNlLjEub3JpZwlUdWUgTm92ICA3IDAyOjE3 OjUwIDIwMDYNCi0tLSAuL3Vzci5iaW4va3RyYWNlL2t0cmFjZS4xCU1vbiBPY3QgMjIgMjI6MTE6 MDQgMjAwNw0KKioqKioqKioqKioqKioqDQoqKiogMTE3LDEzMSAqKioqDQogIC5JdCBDbSBpDQog IHRyYWNlDQogIC5UbiBJL08NCiAgLkl0IENtIHMNCiAgdHJhY2Ugc2lnbmFsIHByb2Nlc3NpbmcN CiAgLkl0IENtIHUNCiAgdXNlcmxhbmQgdHJhY2VzDQogIC5JdCBDbSB3DQogIGNvbnRleHQgc3dp dGNoZXMNCiAgLkl0IENtICsNCiAgdHJhY2UgdGhlIGRlZmF1bHQgc2V0IG9mIHRyYWNlIHBvaW50 cyAtDQohIC5DbSBjICwgbiAsIGkgLCBzICwgdQ0KICAuRWwNCiAgLkl0IEFyIGNvbW1hbmQNCiAg RXhlY3V0ZQ0KLS0tIDExNywxMzUgLS0tLQ0KICAuSXQgQ20gaQ0KICB0cmFjZQ0KICAuVG4gSS9P DQorIC5JdCBDbSBrDQorIHRyYWNlIHNvY2thZGRyIGNvbnRlbnQNCiAgLkl0IENtIHMNCiAgdHJh Y2Ugc2lnbmFsIHByb2Nlc3NpbmcNCisgLkl0IENtIHQNCisgdHJhY2Ugc3RhdCBzdHJ1Y3QgZm9y IHN0YXQoMikNCiAgLkl0IENtIHUNCiAgdXNlcmxhbmQgdHJhY2VzDQogIC5JdCBDbSB3DQogIGNv bnRleHQgc3dpdGNoZXMNCiAgLkl0IENtICsNCiAgdHJhY2UgdGhlIGRlZmF1bHQgc2V0IG9mIHRy YWNlIHBvaW50cyAtDQohIC5DbSBjICwgbiAsIGkgLCBrICwgcyAsIHQgLCB1DQogIC5FbA0KICAu SXQgQXIgY29tbWFuZA0KICBFeGVjdXRlDQoqKiogLi91c3IuYmluL2t0cmFjZS9zdWJyLmMub3Jp ZwlTYXQgTm92IDI3IDE3OjUxOjM4IDIwMDQNCi0tLSAuL3Vzci5iaW4va3RyYWNlL3N1YnIuYwlT YXQgT2N0IDIwIDIwOjEzOjU5IDIwMDcNCioqKioqKioqKioqKioqKg0KKioqIDcxLDc5ICoqKioN Ci0tLSA3MSw4NSAtLS0tDQogIAkJY2FzZSAnaSc6DQogIAkJCWZhY3MgfD0gS1RSRkFDX0dFTklP Ow0KICAJCQlicmVhazsNCisgCQljYXNlICdrJzoNCisgCQkJZmFjcyB8PSBLVFJGQUNfU09DS0FE RFI7DQorIAkJCWJyZWFrOw0KICAJCWNhc2UgJ3MnOg0KICAJCQlmYWNzIHw9IEtUUkZBQ19QU0lH Ow0KICAJCQlicmVhazsNCisgCQljYXNlICd0JzoNCisgCQkJZmFjcyB8PSBLVFJGQUNfU1RBVDsN CisgCQkJYnJlYWs7DQogIAkJY2FzZSAndSc6DQogIAkJCWZhY3MgfD0gS1RSRkFDX1VTRVI7DQog IAkJCWJyZWFrOw0K --=-eLqfxyP7z2mElmnuJkS0--