From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#13539: Use fdopendir, fstatat and readlinkat, for efficiency. Date: Mon, 28 Jan 2013 00:34:49 -0800 Organization: UCLA Computer Science Department Message-ID: <51063829.3020500@cs.ucla.edu> References: <5100F04A.1020603@cs.ucla.edu> <83vcamlcce.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000302060007080508010706" X-Trace: ger.gmane.org 1359362167 2133 80.91.229.3 (28 Jan 2013 08:36:07 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 28 Jan 2013 08:36:07 +0000 (UTC) Cc: 13539@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Jan 28 09:36:25 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1TzkCS-0007HT-Sq for geb-bug-gnu-emacs@m.gmane.org; Mon, 28 Jan 2013 09:36:21 +0100 Original-Received: from localhost ([::1]:37993 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TzkCB-0006qW-5g for geb-bug-gnu-emacs@m.gmane.org; Mon, 28 Jan 2013 03:36:03 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:38910) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TzkBz-0006oJ-3J for bug-gnu-emacs@gnu.org; Mon, 28 Jan 2013 03:35:59 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TzkBm-0004tK-Hh for bug-gnu-emacs@gnu.org; Mon, 28 Jan 2013 03:35:51 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:46533) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TzkBm-0004tE-Cy for bug-gnu-emacs@gnu.org; Mon, 28 Jan 2013 03:35:38 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TzkCA-0007pP-7E for bug-gnu-emacs@gnu.org; Mon, 28 Jan 2013 03:36:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Jan 2013 08:36:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13539 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 13539-submit@debbugs.gnu.org id=B13539.135936212030044 (code B ref 13539); Mon, 28 Jan 2013 08:36:02 +0000 Original-Received: (at 13539) by debbugs.gnu.org; 28 Jan 2013 08:35:20 +0000 Original-Received: from localhost ([127.0.0.1]:51998 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TzkBU-0007oX-FE for submit@debbugs.gnu.org; Mon, 28 Jan 2013 03:35:20 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:49453) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TzkBS-0007oQ-9f for 13539@debbugs.gnu.org; Mon, 28 Jan 2013 03:35:19 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 5DA5BA60002; Mon, 28 Jan 2013 00:34:53 -0800 (PST) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wfWWcsJyTAdP; Mon, 28 Jan 2013 00:34:49 -0800 (PST) Original-Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id C1C7EA60001; Mon, 28 Jan 2013 00:34:49 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 In-Reply-To: <83vcamlcce.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:70398 Archived-At: This is a multi-part message in MIME format. --------------000302060007080508010706 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 01/24/2013 09:28 AM, Eli Zaretskii wrote: > Is it really worth our while to spend energy on speeding up an API > that goes mostly unused in Emacs? Its only heavy user is ls-lisp.el, This patch also improves the performance of file-name-completion -- perhaps you missed that part? Anyway, on the POSIX side it's a pretty simple patch to Emacs proper and is an obvious performance win, and it'd be a shame if it couldn't be put in. > I suggest to use in dired.c functions that will accept both a > file name and a file descriptor, Better than that, w32 can model the POSIX file descriptor by using an int that represents the directory name. The attached patch does that. It's a bit of a hack, but I don't see why it wouldn't work. If it doesn't work, we can fall back on doing things the Gnulib way. Gnulib uses 'int' to emulate "open" directories on MS-Windows, and this works for many other GNU applications. It's probably cleaner to do it that way in the long run, so this patch has a FIXME or two about this. In this patch, the MS-Windows port shouldn't need to worry about the added source files; it should be able to ignore them all. For example, it needn't worry about lib/dirent.in.h. I haven't tested it on MS-Windows, though. --------------000302060007080508010706 Content-Type: text/plain; charset=UTF-8; name="fdopendis.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fdopendis.txt" PT09IG1vZGlmaWVkIGZpbGUgJy5ienJpZ25vcmUnCi0tLSAuYnpyaWdub3JlCTIwMTMtMDEt MjMgMjM6NDk6NDYgKzAwMDAKKysrIC5ienJpZ25vcmUJMjAxMy0wMS0yNCAwNjo1MToyNSAr MDAwMApAQCAtODcsNiArODcsNyBAQAogbGliL2FsbG9jYS5oCiBsaWIvYXJnLW5vbm51bGwu aAogbGliL2MrK2RlZnMuaAorbGliL2RpcmVudC5oCiBsaWIvZXhlY2luZm8uaAogbGliL2Zj bnRsLmgKIGxpYi9nZXRvcHQuaAoKPT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0t IENoYW5nZUxvZwkyMDEzLTAxLTIzIDIzOjQ5OjQ2ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAx My0wMS0yOCAwMjo1MToyNSArMDAwMApAQCAtMSwzICsxLDIxIEBACisyMDEzLTAxLTI4ICBQ YXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBmZG9wZW5kaXIsIGZz dGF0YXQgYW5kIHJlYWRsaW5rYXQsIGZvciBlZmZpY2llbmN5IChCdWcjMTM1MzkpLgorCU9u IG15IGhvc3QsIHRoaXMgc3BlZWRzIHVwIGRpcmVjdG9yeS1maWxlcy1hbmQtYXR0cmlidXRl cyBieSBhCisJZmFjdG9yIG9mIDMsIHdoZW4gYXBwbGllZCB0byBFbWFjcydzIHNyYyBkaXJl Y3RvcnkuCisJVGhlc2UgZnVuY3Rpb25zIGFyZSBzdGFuZGFyZGl6ZWQgYnkgUE9TSVggYW5k IGFyZSBjb21tb24gdGhlc2UKKwlkYXlzOyBmYWxsIGJhY2sgb24gYSAoc2xvd2VyKSBnbnVs aWIgaW1wbGVtZW50YXRpb24gaWYgdGhlIGhvc3QKKwlpcyB0b28gb2xkIHRvIHN1cHBseSB0 aGVtLgorCSogLmJ6cmlnbm9yZTogQWRkIGxpYi9kaXJlbnQuaC4KKwkqIGxpYi9NYWtlZmls ZS5hbSAobGliZ251X2FfU09VUkNFUyk6IEFkZCBvcGVuYXQtZGllLmMsIHNhdmUtY3dkLmMu CisJKiBsaWIvZ251bGliLm1rLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4KKwkq IGxpYi9kaXJlbnQuaW4uaCwgbGliL2Zkb3BlbmRpci5jLCBsaWIvZnN0YXRhdC5jLCBsaWIv b3BlbmF0LXByaXYuaDoKKwkqIGxpYi9vcGVuYXQtcHJvYy5jLCBsaWIvb3BlbmF0LmgsIG00 L2RpcmVudF9oLm00LCBtNC9mZG9wZW5kaXIubTQ6CisJKiBtNC9mc3RhdGF0Lm00OiBOZXcg ZmlsZXMsIGZyb20gZ251bGliLgorCSogbGliL29wZW5hdC1kaWUuYywgbGliL3NhdmUtY3dk LmMsIGxpYi9zYXZlLWN3ZC5oOiBOZXcgZmlsZXMuCisJVGhlc2UgbGFzdCB0aHJlZSBhcmUg c3BlY2lmaWMgdG8gRW1hY3MgYW5kIGFyZSBub3QgY29waWVkIGZyb20gZ251bGliLgorCVRo ZXkgYXJlIHNpbXBsZXIgdGhhbiB0aGUgZ251bGliIHZlcnNpb25zIGFuZCBhcmUgdHVuZWQg Zm9yIEVtYWNzLgorCiAyMDEzLTAxLTIzICBHaW9yZ29zIEtlcmFtaWRhcyAgPGdrZXJhbWlk YXNAZ21haWwuY29tPiAgKHRpbnkgY2hhbmdlKQogCiAJKiAuYnpyaWdub3JlOiBhZGQgbGli LXNyYy9ibGVzc21haWwuCgo9PT0gbW9kaWZpZWQgZmlsZSAnYWRtaW4vQ2hhbmdlTG9nJwot LS0gYWRtaW4vQ2hhbmdlTG9nCTIwMTMtMDEtMTUgMDk6MjI6MjUgKzAwMDAKKysrIGFkbWlu L0NoYW5nZUxvZwkyMDEzLTAxLTI4IDAyOjUxOjI1ICswMDAwCkBAIC0xLDMgKzEsMTAgQEAK KzIwMTMtMDEtMjggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNl IGZkb3BlbmRpciwgZnN0YXRhdCBhbmQgcmVhZGxpbmthdCwgZm9yIGVmZmljaWVuY3kgKEJ1 ZyMxMzUzOSkuCisJKiBtZXJnZS1nbnVsaWIgKEdOVUxJQl9NT0RVTEVTKTogQWRkIGZkb3Bl bmRpciwgZnN0YXRhdCwgcmVhZGxpbmthdC4KKwkoR05VTElCX1RPT0xfRkxBR1MpOiBEbyBu b3QgYXZvaWQgYXQtaW50ZXJuYWwsIG9wZW5hdC1oLgorCUF2b2lkIGR1cCwgb3Blbiwgb3Bl bmRpci4KKwogMjAxMy0wMS0xNSAgRG1pdHJ5IEFudGlwb3YgIDxkbWFudGlwb3ZAeWFuZGV4 LnJ1PgogCiAJKiBjb2NjaW5lbGxlL3hzYXZlLmNvY2NpOiBTZW1hbnRpYyBwYXRjaCB0byBh ZGp1c3QgdXNlcnMgb2YKCj09PSBtb2RpZmllZCBmaWxlICdhZG1pbi9tZXJnZS1nbnVsaWIn Ci0tLSBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0wMS0wMiAxNjoxMzowNCArMDAwMAorKysg YWRtaW4vbWVyZ2UtZ251bGliCTIwMTMtMDEtMjQgMDg6MDI6MTYgKzAwMDAKQEAgLTI5LDkg KzI5LDkgQEAKICAgYWxsb2NhLW9wdCBjLWN0eXBlIGMtc3RyY2FzZQogICBjYXJlYWRsaW5r YXQgY2xvc2Utc3RyZWFtIGNyeXB0by9tZDUgY3J5cHRvL3NoYTEgY3J5cHRvL3NoYTI1NiBj cnlwdG8vc2hhNTEyCiAgIGR0b2FzdHIgZHRvdGltZXNwZWMgZHVwMiBlbnZpcm9uIGV4ZWNp bmZvIGZhY2Nlc3NhdAotICBmY250bC1oIGZpbGVtb2RlIGdldGxvYWRhdmcgZ2V0b3B0LWdu dSBnZXR0aW1lIGdldHRpbWVvZmRheQorICBmY250bC1oIGZkb3BlbmRpciBmaWxlbW9kZSBm c3RhdGF0IGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdldHRpbWVvZmRheQogICBp Z25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0Ci0gIG1hbnl3YXJuaW5ncyBt a3RpbWUgcHNlbGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJlYWRsaW5rCisgIG1hbnl3 YXJuaW5ncyBta3RpbWUgcHNlbGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJlYWRsaW5r IHJlYWRsaW5rYXQKICAgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRh cmcgc3RkYm9vbCBzdGRpbwogICBzdHJmdGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxp bmsgc3lzX3N0YXQKICAgc3lzX3RpbWUgdGltZSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0 aW1lc3BlYy1zdWIgdW5zZXRlbnYgdXRpbWVucwpAQCAtMzksMTAgKzM5LDEwIEBACiAnCiAK IEdOVUxJQl9UT09MX0ZMQUdTPScKLSAgLS1hdm9pZD1hdC1pbnRlcm5hbAorICAtLWF2b2lk PWR1cAogICAtLWF2b2lkPWVycm5vIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1h dm9pZD1mc3RhdAogICAtLWF2b2lkPW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwg LS1hdm9pZD1tc3ZjLW5vdGhyb3cKLSAgLS1hdm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3Bl bmF0LWgKKyAgLS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5k aXIKICAgLS1hdm9pZD1yYWlzZQogICAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0 IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1hdm9pZD1zeXNfdHlwZXMKICAgLS1hdm9pZD10aHJl YWRsaWIKCj09PSBtb2RpZmllZCBmaWxlICdsaWIvTWFrZWZpbGUuYW0nCi0tLSBsaWIvTWFr ZWZpbGUuYW0JMjAxMi0wOC0wMiAxMDozOTo0NyArMDAwMAorKysgbGliL01ha2VmaWxlLmFt CTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTgsMyArOCw1IEBACiBERUZBVUxUX0lO Q0xVREVTID0gLUkuIC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkuLi9zcmMgLUkkKHRvcF9zcmNk aXIpL3NyYwogCiBpbmNsdWRlIGdudWxpYi5taworCitsaWJnbnVfYV9TT1VSQ0VTICs9IG9w ZW5hdC1kaWUuYyBzYXZlLWN3ZC5jCgo9PT0gYWRkZWQgZmlsZSAnbGliL2RpcmVudC5pbi5o JwotLS0gbGliL2RpcmVudC5pbi5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxp Yi9kaXJlbnQuaW4uaAkyMDEzLTAxLTI0IDA2OjUxOjI1ICswMDAwCkBAIC0wLDAgKzEsMjU4 IEBACisvKiBBIEdOVS1saWtlIDxkaXJlbnQuaD4uCisgICBDb3B5cmlnaHQgKEMpIDIwMDYt MjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lm bmRlZiBfQEdVQVJEX1BSRUZJWEBfRElSRU5UX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQ UkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBU aGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFy ZC4gICovCisjaWYgQEhBVkVfRElSRU5UX0hACisjIEBJTkNMVURFX05FWFRAIEBORVhUX0RJ UkVOVF9IQAorI2VuZGlmCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0RJUkVOVF9ICisj ZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9ESVJFTlRfSAorCisvKiBHZXQgaW5vX3QuICBOZWVk ZWQgb24gc29tZSBzeXN0ZW1zLCBpbmNsdWRpbmcgZ2xpYmMgMi44LiAgKi8KKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKworI2lmICFASEFWRV9ESVJFTlRfSEAKKy8qIERlZmluZSB0eXBl cyBESVIgYW5kICdzdHJ1Y3QgZGlyZW50Jy4gICovCisjIGlmICFHTlVMSUJfZGVmaW5lZF9z dHJ1Y3RfZGlyZW50CitzdHJ1Y3QgZGlyZW50Cit7CisgIGNoYXIgZF90eXBlOworICBjaGFy IGRfbmFtZVsxXTsKK307CisvKiBQb3NzaWJsZSB2YWx1ZXMgZm9yICdkX3R5cGUnLiAgKi8K KyMgIGRlZmluZSBEVF9VTktOT1dOIDAKKyMgIGRlZmluZSBEVF9GSUZPICAgIDEgICAgICAg ICAgLyogRklGTyAqLworIyAgZGVmaW5lIERUX0NIUiAgICAgMiAgICAgICAgICAvKiBjaGFy YWN0ZXIgZGV2aWNlICovCisjICBkZWZpbmUgRFRfRElSICAgICA0ICAgICAgICAgIC8qIGRp cmVjdG9yeSAqLworIyAgZGVmaW5lIERUX0JMSyAgICAgNiAgICAgICAgICAvKiBibG9jayBk ZXZpY2UgKi8KKyMgIGRlZmluZSBEVF9SRUcgICAgIDggICAgICAgICAgLyogcmVndWxhciBm aWxlICovCisjICBkZWZpbmUgRFRfTE5LICAgIDEwICAgICAgICAgIC8qIHN5bWJvbGljIGxp bmsgKi8KKyMgIGRlZmluZSBEVF9TT0NLICAgMTIgICAgICAgICAgLyogc29ja2V0ICovCisj ICBkZWZpbmUgRFRfV0hUICAgIDE0ICAgICAgICAgIC8qIHdoaXRlb3V0ICovCit0eXBlZGVm IHN0cnVjdCBnbF9kaXJlY3RvcnkgRElSOworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0 cnVjdF9kaXJlbnQgMQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9f IGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgor ICAgVGhlIGF0dHJpYnV0ZSBfX3B1cmVfXyB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLwor I2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+ PSA5NikKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAq LworI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0 Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FS R19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2Yg X0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworCisvKiBEZWNsYXJlIG92 ZXJyaWRkZW4gZnVuY3Rpb25zLiAgKi8KKworI2lmIEBHTlVMSUJfT1BFTkRJUkAKKyMgaWYg QFJFUExBQ0VfT1BFTkRJUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZp bmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgb3BlbmRpcgorIyAgIGRlZmluZSBv cGVuZGlyIHJwbF9vcGVuZGlyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAob3BlbmRp ciwgRElSICosIChjb25zdCBjaGFyICpkaXJfbmFtZSkgX0dMX0FSR19OT05OVUxMICgoMSkp KTsKK19HTF9DWFhBTElBU19SUEwgKG9wZW5kaXIsIERJUiAqLCAoY29uc3QgY2hhciAqZGly X25hbWUpKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX09QRU5ESVJACitfR0xfRlVOQ0RFQ0xf U1lTIChvcGVuZGlyLCBESVIgKiwgKGNvbnN0IGNoYXIgKmRpcl9uYW1lKSBfR0xfQVJHX05P Tk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG9wZW5kaXIsIERJ UiAqLCAoY29uc3QgY2hhciAqZGlyX25hbWUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dB Uk4gKG9wZW5kaXIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRl ZiBvcGVuZGlyCisjIGlmIEhBVkVfUkFXX0RFQ0xfT1BFTkRJUgorX0dMX1dBUk5fT05fVVNF IChvcGVuZGlyLCAib3BlbmRpciBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAg ICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuZGlyIGZvciBwb3J0YWJpbGl0eSIpOworIyBl bmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1JFQURESVJACisjIGlmICFASEFWRV9SRUFE RElSQAorX0dMX0ZVTkNERUNMX1NZUyAocmVhZGRpciwgc3RydWN0IGRpcmVudCAqLCAoRElS ICpkaXJwKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFT X1NZUyAocmVhZGRpciwgc3RydWN0IGRpcmVudCAqLCAoRElSICpkaXJwKSk7CitfR0xfQ1hY QUxJQVNXQVJOIChyZWFkZGlyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sK KyMgdW5kZWYgcmVhZGRpcgorIyBpZiBIQVZFX1JBV19ERUNMX1JFQURESVIKK19HTF9XQVJO X09OX1VTRSAocmVhZGRpciwgInJlYWRkaXIgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAg ICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmVhZGRpciBmb3IgcG9ydGFiaWxpdHki KTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9SRVdJTkRESVJACisjIGlmICFA SEFWRV9SRVdJTkRESVJACitfR0xfRlVOQ0RFQ0xfU1lTIChyZXdpbmRkaXIsIHZvaWQsIChE SVIgKmRpcnApIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJ QVNfU1lTIChyZXdpbmRkaXIsIHZvaWQsIChESVIgKmRpcnApKTsKK19HTF9DWFhBTElBU1dB Uk4gKHJld2luZGRpcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVu ZGVmIHJld2luZGRpcgorIyBpZiBIQVZFX1JBV19ERUNMX1JFV0lORERJUgorX0dMX1dBUk5f T05fVVNFIChyZXdpbmRkaXIsICJyZXdpbmRkaXIgaXMgbm90IHBvcnRhYmxlIC0gIgorICAg ICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcmV3aW5kZGlyIGZvciBwb3J0YWJp bGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0NMT1NFRElSQAorIyBp ZiBAUkVQTEFDRV9DTE9TRURJUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBk ZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgY2xvc2VkaXIKKyMgICBkZWZp bmUgY2xvc2VkaXIgcnBsX2Nsb3NlZGlyCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAo Y2xvc2VkaXIsIGludCwgKERJUiAqZGlycCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19H TF9DWFhBTElBU19SUEwgKGNsb3NlZGlyLCBpbnQsIChESVIgKmRpcnApKTsKKyMgZWxzZQor IyAgaWYgIUBIQVZFX0NMT1NFRElSQAorX0dMX0ZVTkNERUNMX1NZUyAoY2xvc2VkaXIsIGlu dCwgKERJUiAqZGlycCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xf Q1hYQUxJQVNfU1lTIChjbG9zZWRpciwgaW50LCAoRElSICpkaXJwKSk7CisjIGVuZGlmCitf R0xfQ1hYQUxJQVNXQVJOIChjbG9zZWRpcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJ WENIRUNLCisjIHVuZGVmIGNsb3NlZGlyCisjIGlmIEhBVkVfUkFXX0RFQ0xfQ0xPU0VESVIK K19HTF9XQVJOX09OX1VTRSAoY2xvc2VkaXIsICJjbG9zZWRpciBpcyBub3QgcG9ydGFibGUg LSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBjbG9zZWRpciBmb3Ig cG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9ESVJGREAK Ky8qIFJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2 ZW4gZGlyZWN0b3J5IHN0cmVhbSwKKyAgIG9yIC0xIGlmIG5vbmUgZXhpc3RzLiAgKi8KKyMg aWYgQFJFUExBQ0VfRElSRkRACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVm aW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGRpcmZkCisjICAgZGVmaW5lIGRp cmZkIHJwbF9kaXJmZAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGRpcmZkLCBpbnQs IChESVIgKikgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGRp cmZkLCBpbnQsIChESVIgKikpOworIyBlbHNlCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVz ICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSAmJiBkZWZpbmVkIGRpcmZkCisgICAgLyog ZGlyZmQgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIGFuZCBub3QgYXMgYSBmdW5jdGlvbi4KKyAg ICAgICBUdXJuIGl0IGludG8gYSBmdW5jdGlvbiBhbmQgZ2V0IHJpZCBvZiB0aGUgbWFjcm8u ICAqLworc3RhdGljIGlubGluZSBpbnQgKGRpcmZkKSAoRElSICpkcCkgeyByZXR1cm4gZGly ZmQgKGRwKTsgfQorIyAgIHVuZGVmIGRpcmZkCisjICBlbmRpZgorIyAgaWYgIShASEFWRV9E RUNMX0RJUkZEQCB8fCBkZWZpbmVkIGRpcmZkKQorX0dMX0ZVTkNERUNMX1NZUyAoZGlyZmQs IGludCwgKERJUiAqKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9D WFhBTElBU19TWVMgKGRpcmZkLCBpbnQsIChESVIgKikpOworIyBlbmRpZgorX0dMX0NYWEFM SUFTV0FSTiAoZGlyZmQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1 bmRlZiBkaXJmZAorIyBpZiBIQVZFX1JBV19ERUNMX0RJUkZECitfR0xfV0FSTl9PTl9VU0Ug KGRpcmZkLCAiZGlyZmQgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVz ZSBnbnVsaWIgbW9kdWxlIGRpcmZkIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2Vu ZGlmCisKKyNpZiBAR05VTElCX0ZET1BFTkRJUkAKKy8qIE9wZW4gYSBkaXJlY3Rvcnkgc3Ry ZWFtIHZpc2l0aW5nIHRoZSBnaXZlbiBkaXJlY3RvcnkgZmlsZQorICAgZGVzY3JpcHRvci4g IFJldHVybiBOVUxMIGFuZCBzZXQgZXJybm8gaWYgZmQgaXMgbm90IHZpc2l0aW5nIGEKKyAg IGRpcmVjdG9yeS4gIE9uIHN1Y2Nlc3MsIHRoaXMgZnVuY3Rpb24gY29uc3VtZXMgZmQgKGl0 IHdpbGwgYmUKKyAgIGltcGxpY2l0bHkgY2xvc2VkIGVpdGhlciBieSB0aGlzIGZ1bmN0aW9u IG9yIGJ5IGEgc3Vic2VxdWVudAorICAgY2xvc2VkaXIpLiAgKi8KKyMgaWYgQFJFUExBQ0Vf RkRPUEVORElSQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05V TElCX05BTUVTUEFDRSkKKyMgICB1bmRlZiBmZG9wZW5kaXIKKyMgICBkZWZpbmUgZmRvcGVu ZGlyIHJwbF9mZG9wZW5kaXIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZG9wZW5k aXIsIERJUiAqLCAoaW50IGZkKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChmZG9wZW5kaXIsIERJ UiAqLCAoaW50IGZkKSk7CisjIGVsc2UKKyMgIGlmICFASEFWRV9GRE9QRU5ESVJAIHx8ICFA SEFWRV9ERUNMX0ZET1BFTkRJUkAKK19HTF9GVU5DREVDTF9TWVMgKGZkb3BlbmRpciwgRElS ICosIChpbnQgZmQpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChmZG9wZW5kaXIs IERJUiAqLCAoaW50IGZkKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmZG9wZW5k aXIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmZG9wZW5k aXIKKyMgaWYgSEFWRV9SQVdfREVDTF9GRE9QRU5ESVIKK19HTF9XQVJOX09OX1VTRSAoZmRv cGVuZGlyLCAiZmRvcGVuZGlyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAg ICJ1c2UgZ251bGliIG1vZHVsZSBmZG9wZW5kaXIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVu ZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfU0NBTkRJUkAKKy8qIFNjYW4gdGhlIGRpcmVj dG9yeSBESVIsIGNhbGxpbmcgRklMVEVSIG9uIGVhY2ggZGlyZWN0b3J5IGVudHJ5LgorICAg RW50cmllcyBmb3Igd2hpY2ggRklMVEVSIHJldHVybnMgbm9uemVybyBhcmUgaW5kaXZpZHVh bGx5IG1hbGxvYydkLAorICAgc29ydGVkIHVzaW5nIHFzb3J0IHdpdGggQ01QLCBhbmQgY29s bGVjdGVkIGluIGEgbWFsbG9jJ2QgYXJyYXkgaW4KKyAgICpOQU1FTElTVC4gIFJldHVybnMg dGhlIG51bWJlciBvZiBlbnRyaWVzIHNlbGVjdGVkLCBvciAtMSBvbiBlcnJvci4gICovCisj IGlmICFASEFWRV9TQ0FORElSQAorX0dMX0ZVTkNERUNMX1NZUyAoc2NhbmRpciwgaW50LAor ICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmRpciwgc3RydWN0IGRpcmVudCAqKipu YW1lbGlzdCwKKyAgICAgICAgICAgICAgICAgICBpbnQgKCpmaWx0ZXIpIChjb25zdCBzdHJ1 Y3QgZGlyZW50ICopLAorICAgICAgICAgICAgICAgICAgIGludCAoKmNtcCkgKGNvbnN0IHN0 cnVjdCBkaXJlbnQgKiosIGNvbnN0IHN0cnVjdCBkaXJlbnQgKiopKQorICAgICAgICAgICAg ICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMiwgNCkpKTsKKyMgZW5kaWYKKy8qIE5lZWQg dG8gY2FzdCwgYmVjYXVzZSBvbiBnbGliYyBzeXN0ZW1zLCB0aGUgZm91cnRoIHBhcmFtZXRl ciBpcworICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY21wKSAoY29uc3Qgdm9pZCAq LCBjb25zdCB2b2lkICopLiAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVCAoc2NhbmRpciwg aW50LAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqZGlyLCBzdHJ1Y3Qg ZGlyZW50ICoqKm5hbWVsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZmls dGVyKSAoY29uc3Qgc3RydWN0IGRpcmVudCAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAg IGludCAoKmNtcCkgKGNvbnN0IHN0cnVjdCBkaXJlbnQgKiosIGNvbnN0IHN0cnVjdCBkaXJl bnQgKiopKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzY2FuZGlyKTsKKyNlbGlmIGRlZmluZWQg R05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc2NhbmRpcgorIyBpZiBIQVZFX1JBV19ERUNM X1NDQU5ESVIKK19HTF9XQVJOX09OX1VTRSAoc2NhbmRpciwgInNjYW5kaXIgaXMgdW5wb3J0 YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHNjYW5kaXIg Zm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfQUxQ SEFTT1JUQAorLyogQ29tcGFyZSB0d28gJ3N0cnVjdCBkaXJlbnQnIGVudHJpZXMgYWxwaGFi ZXRpY2FsbHkuICAqLworIyBpZiAhQEhBVkVfQUxQSEFTT1JUQAorX0dMX0ZVTkNERUNMX1NZ UyAoYWxwaGFzb3J0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGRp cmVudCAqKiwgY29uc3Qgc3RydWN0IGRpcmVudCAqKikKKyAgICAgICAgICAgICAgICAgIF9H TF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgo MSwgMikpKTsKKyMgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBnbGliYyBz eXN0ZW1zLCB0aGUgcGFyYW1ldGVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKS4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1Qg KGFscGhhc29ydCwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0 IGRpcmVudCAqKiwgY29uc3Qgc3RydWN0IGRpcmVudCAqKikpOworX0dMX0NYWEFMSUFTV0FS TiAoYWxwaGFzb3J0KTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5k ZWYgYWxwaGFzb3J0CisjIGlmIEhBVkVfUkFXX0RFQ0xfQUxQSEFTT1JUCitfR0xfV0FSTl9P Tl9VU0UgKGFscGhhc29ydCwgImFscGhhc29ydCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAg ICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgYWxwaGFzb3J0IGZvciBwb3J0YWJpbGl0 eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9E SVJFTlRfSCAqLworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9ESVJFTlRfSCAqLwoKPT09 IGFkZGVkIGZpbGUgJ2xpYi9mZG9wZW5kaXIuYycKLS0tIGxpYi9mZG9wZW5kaXIuYwkxOTcw LTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZmRvcGVuZGlyLmMJMjAxMy0wMS0yNCAw Njo1MToyNSArMDAwMApAQCAtMCwwICsxLDIwNCBAQAorLyogcHJvdmlkZSBhIHJlcGxhY2Vt ZW50IGZkb3BlbmRpciBmdW5jdGlvbgorICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4g YnkgSmltIE1leWVyaW5nICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUg PGRpcmVudC5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+ CisKKyNpZiAhSEFWRV9GRE9QRU5ESVIKKworIyBpbmNsdWRlICJvcGVuYXQuaCIKKyMgaW5j bHVkZSAib3BlbmF0LXByaXYuaCIKKyMgaW5jbHVkZSAic2F2ZS1jd2QuaCIKKworIyBpZiBH TlVMSUJfRElSRU5UX1NBRkVSCisjICBpbmNsdWRlICJkaXJlbnQtLS5oIgorIyBlbmRpZgor CisjIGlmbmRlZiBSRVBMQUNFX0ZDSERJUgorIyAgZGVmaW5lIFJFUExBQ0VfRkNIRElSIDAK KyMgZW5kaWYKKworc3RhdGljIERJUiAqZmRvcGVuZGlyX3dpdGhfZHVwIChpbnQsIGludCwg c3RydWN0IHNhdmVkX2N3ZCBjb25zdCAqKTsKK3N0YXRpYyBESVIgKmZkX2Nsb25lX29wZW5k aXIgKGludCwgc3RydWN0IHNhdmVkX2N3ZCBjb25zdCAqKTsKKworLyogUmVwbGFjZW1lbnQg Zm9yIFBPU0lYIGZkb3BlbmRpci4KKworICAgRmlyc3QsIHRyeSB0byBzaW11bGF0ZSBpdCB2 aWEgb3BlbmRpciAoIi9wcm9jL3NlbGYvZmQvLi4uIikuICBGYWlsaW5nCisgICB0aGF0LCBz aW11bGF0ZSBpdCBieSB1c2luZyBmY2hkaXIgbWV0YWRhdGEsIG9yIGJ5IGRvaW5nCisgICBz YXZlX2N3ZC9mY2hkaXIvb3BlbmRpcigiLiIpL3Jlc3RvcmVfY3dkLgorICAgSWYgZWl0aGVy IHRoZSBzYXZlX2N3ZCBvciB0aGUgcmVzdG9yZV9jd2QgZmFpbHMgKHJlbGF0aXZlbHkgdW5s aWtlbHkpLAorICAgdGhlbiBnaXZlIGEgZGlhZ25vc3RpYyBhbmQgZXhpdCBub256ZXJvLgor CisgICBJZiBzdWNjZXNzZnVsLCB0aGUgcmVzdWx0aW5nIHN0cmVhbSBpcyBiYXNlZCBvbiBG RCBpbgorICAgaW1wbGVtZW50YXRpb25zIHdoZXJlIHN0cmVhbXMgYXJlIGJhc2VkIG9uIGZp bGUgZGVzY3JpcHRvcnMgYW5kIGluCisgICBhcHBsaWNhdGlvbnMgd2hlcmUgbm8gb3RoZXIg dGhyZWFkIG9yIHNpZ25hbCBoYW5kbGVyIGFsbG9jYXRlcyBvcgorICAgZnJlZXMgZmlsZSBk ZXNjcmlwdG9ycy4gIEluIG90aGVyIGNhc2VzLCBjb25zdWx0IGRpcmZkIG9uIHRoZSByZXN1 bHQKKyAgIHRvIGZpbmQgb3V0IHdoZXRoZXIgRkQgaXMgc3RpbGwgYmVpbmcgdXNlZC4KKwor ICAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGp1c3QgbGlrZSBQT1NJWCBmZG9w ZW5kaXIuCisKKyAgIFcgQSBSIE4gSSBOIEc6CisKKyAgIFVubGlrZSBvdGhlciBmZC1yZWxh dGVkIGZ1bmN0aW9ucywgdGhpcyBvbmUgcGxhY2VzIGNvbnN0cmFpbnRzIG9uIEZELgorICAg SWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgRkQgaXMgdW5kZXIgY29u dHJvbCBvZiB0aGUKKyAgIGRpcmVudC5oIHN5c3RlbSwgYW5kIHRoZSBjYWxsZXIgc2hvdWxk IG5vdCBjbG9zZSBvciBtb2RpZnkgdGhlIHN0YXRlIG9mCisgICBGRCBvdGhlciB0aGFuIGJ5 IHRoZSBkaXJlbnQuaCBmdW5jdGlvbnMuICAqLworRElSICoKK2Zkb3BlbmRpciAoaW50IGZk KQoreworICBESVIgKmRpciA9IGZkb3BlbmRpcl93aXRoX2R1cCAoZmQsIC0xLCBOVUxMKTsK KworICBpZiAoISBSRVBMQUNFX0ZDSERJUiAmJiAhIGRpcikKKyAgICB7CisgICAgICBpbnQg c2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgIGlmIChFWFBFQ1RFRF9FUlJOTyAoc2F2ZWRf ZXJybm8pKQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IHNhdmVkX2N3ZCBjd2Q7Cisg ICAgICAgICAgaWYgKHNhdmVfY3dkICgmY3dkKSAhPSAwKQorICAgICAgICAgICAgb3BlbmF0 X3NhdmVfZmFpbCAoZXJybm8pOworICAgICAgICAgIGRpciA9IGZkb3BlbmRpcl93aXRoX2R1 cCAoZmQsIC0xLCAmY3dkKTsKKyAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAg ICAgICAgIGZyZWVfY3dkICgmY3dkKTsKKyAgICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5v OworICAgICAgICB9CisgICAgfQorCisgIHJldHVybiBkaXI7Cit9CisKKy8qIExpa2UgZmRv cGVuZGlyLCBleGNlcHQgdGhhdCBpZiBPTERFUl9EVVBGRCBpcyBub3QgLTEsIGl0IGlzIGtu b3duCisgICB0byBiZSBhIGR1cCBvZiBGRCB3aGljaCBpcyBsZXNzIHRoYW4gRkQgLSAxIGFu ZCB3aGljaCB3aWxsIGJlCisgICBjbG9zZWQgYnkgdGhlIGNhbGxlciBhbmQgbm90IG90aGVy d2lzZSB1c2VkIGJ5IHRoZSBjYWxsZXIuICBUaGlzCisgICBmdW5jdGlvbiBtYWtlcyBzdXJl IHRoYXQgRkQgaXMgY2xvc2VkIGFuZCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBsZXNzCisgICB0 aGFuIEZEIGFyZSBvcGVuLCBhbmQgdGhlbiBjYWxscyBmZF9jbG9uZV9vcGVuZGlyIG9uIGEg ZHVwIG9mIEZELgorICAgVGhhdCB3YXksIGJhcnJpbmcgcmFjZSBjb25kaXRpb25zLCBmZF9j bG9uZV9vcGVuZGlyIHJldHVybnMgYQorICAgc3RyZWFtIHdob3NlIGZpbGUgZGVzY3JpcHRv ciBpcyBGRC4KKworICAgSWYgUkVQTEFDRV9DSERJUiBvciBDV0QgaXMgbnVsbCwgdXNlIG9w ZW5kaXIgKCIvcHJvYy9zZWxmL2ZkLy4uLiIsCisgICBmYWxsaW5nIGJhY2sgb24gZmNoZGly IG1ldGFkYXRhLiAgT3RoZXJ3aXNlLCBDV0QgaXMgYSBzYXZlZCB2ZXJzaW9uCisgICBvZiB0 aGUgd29ya2luZyBkaXJlY3Rvcnk7IHVzZSBmY2hkaXIvb3BlbmRpcigiLiIpL3Jlc3RvcmVf Y3dkKENXRCkuICAqLworc3RhdGljIERJUiAqCitmZG9wZW5kaXJfd2l0aF9kdXAgKGludCBm ZCwgaW50IG9sZGVyX2R1cGZkLCBzdHJ1Y3Qgc2F2ZWRfY3dkIGNvbnN0ICpjd2QpCit7Cisg IGludCBkdXBmZCA9IGR1cCAoZmQpOworICBpZiAoZHVwZmQgPCAwICYmIGVycm5vID09IEVN RklMRSkKKyAgICBkdXBmZCA9IG9sZGVyX2R1cGZkOworICBpZiAoZHVwZmQgPCAwKQorICAg IHJldHVybiBOVUxMOworICBlbHNlCisgICAgeworICAgICAgRElSICpkaXI7CisgICAgICBp bnQgc2F2ZWRfZXJybm87CisgICAgICBpZiAoZHVwZmQgPCBmZCAtIDEgJiYgZHVwZmQgIT0g b2xkZXJfZHVwZmQpCisgICAgICAgIHsKKyAgICAgICAgICBkaXIgPSBmZG9wZW5kaXJfd2l0 aF9kdXAgKGZkLCBkdXBmZCwgY3dkKTsKKyAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5v OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjbG9zZSAo ZmQpOworICAgICAgICAgIGRpciA9IGZkX2Nsb25lX29wZW5kaXIgKGR1cGZkLCBjd2QpOwor ICAgICAgICAgIHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgICAgICAgaWYgKCEgZGlyKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgZmQxID0gZHVwIChkdXBmZCk7Cisg ICAgICAgICAgICAgIGlmIChmZDEgIT0gZmQpCisgICAgICAgICAgICAgICAgb3BlbmF0X3Nh dmVfZmFpbCAoZmQxIDwgMCA/IGVycm5vIDogRUJBREYpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisKKyAgICAgIGlmIChkdXBmZCAhPSBvbGRlcl9kdXBmZCkKKyAgICAgICAgY2xv c2UgKGR1cGZkKTsKKyAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICByZXR1cm4g ZGlyOworICAgIH0KK30KKworLyogTGlrZSBmZG9wZW5kaXIsIGV4Y2VwdCB0aGUgcmVzdWx0 IGNvbnRyb2xzIGEgY2xvbmUgb2YgRkQuICBJdCBpcworICAgdGhlIGNhbGxlcidzIHJlc3Bv bnNpYmlsaXR5IGJvdGggdG8gY2xvc2UgRkQgYW5kIChpZiB0aGUgcmVzdWx0IGlzCisgICBu b3QgbnVsbCkgdG8gY2xvc2VkaXIgdGhlIHJlc3VsdC4gICovCitzdGF0aWMgRElSICoKK2Zk X2Nsb25lX29wZW5kaXIgKGludCBmZCwgc3RydWN0IHNhdmVkX2N3ZCBjb25zdCAqY3dkKQor eworICBpZiAoUkVQTEFDRV9GQ0hESVIgfHwgISBjd2QpCisgICAgeworICAgICAgRElSICpk aXIgPSBOVUxMOworICAgICAgaW50IHNhdmVkX2Vycm5vID0gRU9QTk9UU1VQUDsKKyAgICAg IGNoYXIgYnVmW09QRU5BVF9CVUZGRVJfU0laRV07CisgICAgICBjaGFyICpwcm9jX2ZpbGUg PSBvcGVuYXRfcHJvY19uYW1lIChidWYsIGZkLCAiLiIpOworICAgICAgaWYgKHByb2NfZmls ZSkKKyAgICAgICAgeworICAgICAgICAgIGRpciA9IG9wZW5kaXIgKHByb2NfZmlsZSk7Cisg ICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBpZiAocHJvY19maWxl ICE9IGJ1ZikKKyAgICAgICAgICAgIGZyZWUgKHByb2NfZmlsZSk7CisgICAgICAgIH0KKyMg aWYgUkVQTEFDRV9GQ0hESVIKKyAgICAgIGlmICghIGRpciAmJiBFWFBFQ1RFRF9FUlJOTyAo c2F2ZWRfZXJybm8pKQorICAgICAgICB7CisgICAgICAgICAgY2hhciBjb25zdCAqbmFtZSA9 IF9nbF9kaXJlY3RvcnlfbmFtZSAoZmQpOworICAgICAgICAgIHJldHVybiAobmFtZSA/IG9w ZW5kaXIgKG5hbWUpIDogTlVMTCk7CisgICAgICAgIH0KKyMgZW5kaWYKKyAgICAgIGVycm5v ID0gc2F2ZWRfZXJybm87CisgICAgICByZXR1cm4gZGlyOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGlmIChmY2hkaXIgKGZkKSAhPSAwKQorICAgICAgICByZXR1cm4gTlVMTDsK KyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIERJUiAqZGlyID0gb3BlbmRpciAo Ii4iKTsKKyAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBp ZiAocmVzdG9yZV9jd2QgKGN3ZCkgIT0gMCkKKyAgICAgICAgICAgIG9wZW5hdF9yZXN0b3Jl X2ZhaWwgKGVycm5vKTsKKyAgICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAg ICAgIHJldHVybiBkaXI7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbHNlIC8qIEhBVkVf RkRPUEVORElSICovCisKKyMgaW5jbHVkZSA8ZXJybm8uaD4KKyMgaW5jbHVkZSA8c3lzL3N0 YXQuaD4KKworIyB1bmRlZiBmZG9wZW5kaXIKKworLyogTGlrZSBmZG9wZW5kaXIsIGJ1dCB3 b3JrIGFyb3VuZCBHTlUvSHVyZCBidWcgYnkgdmFsaWRhdGluZyBGRC4gICovCisKK0RJUiAq CitycGxfZmRvcGVuZGlyIChpbnQgZmQpCit7CisgIHN0cnVjdCBzdGF0IHN0OworICBpZiAo ZnN0YXQgKGZkLCAmc3QpKQorICAgIHJldHVybiBOVUxMOworICBpZiAoIVNfSVNESVIgKHN0 LnN0X21vZGUpKQorICAgIHsKKyAgICAgIGVycm5vID0gRU5PVERJUjsKKyAgICAgIHJldHVy biBOVUxMOworICAgIH0KKyAgcmV0dXJuIGZkb3BlbmRpciAoZmQpOworfQorCisjZW5kaWYg LyogSEFWRV9GRE9QRU5ESVIgKi8KCj09PSBhZGRlZCBmaWxlICdsaWIvZnN0YXRhdC5jJwot LS0gbGliL2ZzdGF0YXQuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZnN0 YXRhdC5jCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTAsMCArMSwxMzUgQEAKKy8q IFdvcmsgYXJvdW5kIGFuIGZzdGF0YXQgYnVnIG9uIFNvbGFyaXMgOS4KKworICAgQ29weXJp Z2h0IChDKSAyMDA2LCAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEppbSBNZXll cmluZy4gICovCisKKy8qIElmIHRoZSB1c2VyJ3MgY29uZmlnLmggaGFwcGVucyB0byBpbmNs dWRlIDxzeXMvc3RhdC5oPiwgbGV0IGl0IGluY2x1ZGUgb25seQorICAgdGhlIHN5c3RlbSdz IDxzeXMvc3RhdC5oPiBoZXJlLCBzbyB0aGF0IG9yaWdfZnN0YXRhdCBkb2Vzbid0IHJlY3Vy c2UgdG8KKyAgIHJwbF9mc3RhdGF0LiAgKi8KKyNkZWZpbmUgX19uZWVkX3N5c3RlbV9zeXNf c3RhdF9oCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIEdldCB0aGUgb3JpZ2luYWwgZGVm aW5pdGlvbiBvZiBmc3RhdGF0LiAgSXQgbWlnaHQgYmUgZGVmaW5lZCBhcyBhIG1hY3JvLiAg Ki8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI3Vu ZGVmIF9fbmVlZF9zeXN0ZW1fc3lzX3N0YXRfaAorCisjaWYgSEFWRV9GU1RBVEFUCitzdGF0 aWMgaW50CitvcmlnX2ZzdGF0YXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hbWUsIHN0 cnVjdCBzdGF0ICpidWYsIGludCBmbGFncykKK3sKKyAgcmV0dXJuIGZzdGF0YXQgKGZkLCBm aWxlbmFtZSwgYnVmLCBmbGFncyk7Cit9CisjZW5kaWYKKworLyogV3JpdGUgInN5cy9zdGF0 LmgiIGhlcmUsIG5vdCA8c3lzL3N0YXQuaD4sIG90aGVyd2lzZSBPU0YvMSA1LjEgRFRLIGNj CisgICBlbGltaW5hdGVzIHRoaXMgaW5jbHVkZSBiZWNhdXNlIG9mIHRoZSBwcmVsaW1pbmFy eSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAgIGFib3ZlLiAgKi8KKyNpbmNsdWRlICJzeXMv c3RhdC5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2lu Y2x1ZGUgPHN0cmluZy5oPgorCisjaWYgSEFWRV9GU1RBVEFUICYmIEhBVkVfV09SS0lOR19G U1RBVEFUX1pFUk9fRkxBRworCisjIGlmbmRlZiBMU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lN TElOSworIyAgZGVmaW5lIExTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LIDAKKyMgZW5k aWYKKworLyogZnN0YXRhdCBzaG91bGQgYWx3YXlzIGZvbGxvdyBzeW1ib2xpYyBsaW5rcyB0 aGF0IGVuZCBpbiAvLCBidXQgb24KKyAgIFNvbGFyaXMgOSBpdCBkb2Vzbid0IGlmIEFUX1NZ TUxJTktfTk9GT0xMT1cgaXMgc3BlY2lmaWVkLgorICAgTGlrZXdpc2UsIHRyYWlsaW5nIHNs YXNoIG9uIGEgbm9uLWRpcmVjdG9yeSBzaG91bGQgYmUgYW4gZXJyb3IuCisgICBUaGVzZSBh cmUgdGhlIHNhbWUgcHJvYmxlbXMgdGhhdCBsc3RhdC5jIGFuZCBzdGF0LmMgYWRkcmVzcywg c28KKyAgIHNvbHZlIGl0IGluIGEgc2ltaWxhciB3YXkuCisKKyAgIEFJWCA3LjEgZnN0YXRh dCAoQVRfRkRDV0QsIC4uLiwgMCkgYWx3YXlzIGZhaWxzLCB3aGljaCBpcyBhIGJ1Zy4KKyAg IFdvcmsgYXJvdW5kIHRoaXMgYnVnIGlmIEZTVEFUQVRfQVRfRkRDV0RfMF9CUk9LRU4gaXMg bm9uemVyby4gICovCisKK2ludAorcnBsX2ZzdGF0YXQgKGludCBmZCwgY2hhciBjb25zdCAq ZmlsZSwgc3RydWN0IHN0YXQgKnN0LCBpbnQgZmxhZykKK3sKKyAgaW50IHJlc3VsdCA9IG9y aWdfZnN0YXRhdCAoZmQsIGZpbGUsIHN0LCBmbGFnKTsKKyAgc2l6ZV90IGxlbjsKKworICBp ZiAoTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTksgfHwgcmVzdWx0ICE9IDApCisgICAg cmV0dXJuIHJlc3VsdDsKKyAgbGVuID0gc3RybGVuIChmaWxlKTsKKyAgaWYgKGZsYWcgJiBB VF9TWU1MSU5LX05PRk9MTE9XKQorICAgIHsKKyAgICAgIC8qIEZpeCBsc3RhdCBiZWhhdmlv ci4gICovCisgICAgICBpZiAoZmlsZVtsZW4gLSAxXSAhPSAnLycgfHwgU19JU0RJUiAoc3Qt PnN0X21vZGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGlmICghU19JU0xOSyAoc3Qt PnN0X21vZGUpKQorICAgICAgICB7CisgICAgICAgICAgZXJybm8gPSBFTk9URElSOworICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgcmVzdWx0ID0gb3JpZ19mc3Rh dGF0IChmZCwgZmlsZSwgc3QsIGZsYWcgJiB+QVRfU1lNTElOS19OT0ZPTExPVyk7CisgICAg fQorICAvKiBGaXggc3RhdCBiZWhhdmlvci4gICovCisgIGlmIChyZXN1bHQgPT0gMCAmJiAh U19JU0RJUiAoc3QtPnN0X21vZGUpICYmIGZpbGVbbGVuIC0gMV0gPT0gJy8nKQorICAgIHsK KyAgICAgIGVycm5vID0gRU5PVERJUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIHJl dHVybiByZXN1bHQ7Cit9CisKKyNlbHNlIC8qICEgKEhBVkVfRlNUQVRBVCAmJiBIQVZFX1dP UktJTkdfRlNUQVRBVF9aRVJPX0ZMQUcpICovCisKKy8qIE9uIG1pbmd3LCB0aGUgZ251bGli IDxzeXMvc3RhdC5oPiBkZWZpbmVzICdzdGF0JyBhcyBhIGZ1bmN0aW9uLWxpa2UKKyAgIG1h Y3JvOyBidXQgdXNpbmcgaXQgaW4gQVRfRlVOQ19GMiBjYXVzZXMgY29tcGlsYXRpb24gZmFp bHVyZQorICAgYmVjYXVzZSB0aGUgcHJlcHJvY2Vzc29yIHNlZXMgYSB1c2Ugb2YgYSBtYWNy byB0aGF0IHJlcXVpcmVzIHR3bworICAgYXJndW1lbnRzIGJ1dCBpcyBvbmx5IGdpdmVuIG9u ZS4gIEhlbmNlLCB3ZSBuZWVkIGFuIGlubGluZQorICAgZm9yd2FyZGVyIHRvIGdldCBwYXN0 IHRoZSBwcmVwcm9jZXNzb3IuICAqLworc3RhdGljIGludAorc3RhdF9mdW5jIChjaGFyIGNv bnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisgIHJldHVybiBzdGF0IChuYW1lLCBz dCk7Cit9CisKKy8qIExpa2V3aXNlLCBpZiB0aGVyZSBpcyBubyBuYXRpdmUgJ2xzdGF0Jywg dGhlbiB0aGUgZ251bGliCisgICA8c3lzL3N0YXQuaD4gZGVmaW5lZCBpdCBhcyBzdGF0LCB3 aGljaCBhbHNvIG5lZWRzIGFkanVzdG1lbnQuICAqLworIyBpZiAhSEFWRV9MU1RBVAorIyAg dW5kZWYgbHN0YXQKKyMgIGRlZmluZSBsc3RhdCBzdGF0X2Z1bmMKKyMgZW5kaWYKKworLyog UmVwbGFjZW1lbnQgZm9yIFNvbGFyaXMnIGZ1bmN0aW9uIGJ5IHRoZSBzYW1lIG5hbWUuCisg ICA8aHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPWZzdGF0YXQrc2l0ZTpkb2NzLnN1 bi5jb20+CisgICBGaXJzdCwgdHJ5IHRvIHNpbXVsYXRlIGl0IHZpYSBsP3N0YXQgKCIvcHJv Yy9zZWxmL2ZkL0ZEL0ZJTEUiKS4KKyAgIEZhaWxpbmcgdGhhdCwgc2ltdWxhdGUgaXQgdmlh IHNhdmVfY3dkL2ZjaGRpci8oc3RhdHxsc3RhdCkvcmVzdG9yZV9jd2QuCisgICBJZiBlaXRo ZXIgdGhlIHNhdmVfY3dkIG9yIHRoZSByZXN0b3JlX2N3ZCBmYWlscyAocmVsYXRpdmVseSB1 bmxpa2VseSksCisgICB0aGVuIGdpdmUgYSBkaWFnbm9zdGljIGFuZCBleGl0IG5vbnplcm8u CisgICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gd29ya3MganVzdCBsaWtlIFNvbGFyaXMn IGZzdGF0YXQuICAqLworCisjIGRlZmluZSBBVF9GVU5DX05BTUUgZnN0YXRhdAorIyBkZWZp bmUgQVRfRlVOQ19GMSBsc3RhdAorIyBkZWZpbmUgQVRfRlVOQ19GMiBzdGF0X2Z1bmMKKyMg ZGVmaW5lIEFUX0ZVTkNfVVNFX0YxX0NPTkQgQVRfU1lNTElOS19OT0ZPTExPVworIyBkZWZp bmUgQVRfRlVOQ19QT1NUX0ZJTEVfUEFSQU1fREVDTFMgLCBzdHJ1Y3Qgc3RhdCAqc3QsIGlu dCBmbGFnCisjIGRlZmluZSBBVF9GVU5DX1BPU1RfRklMRV9BUkdTICAgICAgICAsIHN0Cisj IGluY2x1ZGUgImF0LWZ1bmMuYyIKKyMgdW5kZWYgQVRfRlVOQ19OQU1FCisjIHVuZGVmIEFU X0ZVTkNfRjEKKyMgdW5kZWYgQVRfRlVOQ19GMgorIyB1bmRlZiBBVF9GVU5DX1VTRV9GMV9D T05ECisjIHVuZGVmIEFUX0ZVTkNfUE9TVF9GSUxFX1BBUkFNX0RFQ0xTCisjIHVuZGVmIEFU X0ZVTkNfUE9TVF9GSUxFX0FSR1MKKworI2VuZGlmIC8qICFIQVZFX0ZTVEFUQVQgKi8KCj09 PSBtb2RpZmllZCBmaWxlICdsaWIvZ251bGliLm1rJwotLS0gbGliL2dudWxpYi5tawkyMDEz LTAxLTA0IDAyOjE3OjQ5ICswMDAwCisrKyBsaWIvZ251bGliLm1rCTIwMTMtMDEtMjQgMDg6 MDI6MTYgKzAwMDAKQEAgLTIxLDcgKzIxLDcgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9u IHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KICMKICMgR2VuZXJhdGVkIGJ5 IGdudWxpYi10b29sLgotIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0t ZGlyPS4gLS1saWI9bGliZ251IC0tc291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRv Yy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2 b2lkPWF0LWludGVybmFsIC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1mY2hkaXIgLS1hdm9pZD1m Y250bCAtLWF2b2lkPWZzdGF0IC0tYXZvaWQ9bWFsbG9jLXBvc2l4IC0tYXZvaWQ9bXN2Yy1p bnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lkPW9wZW5hdC1kaWUgLS1hdm9pZD1v cGVuYXQtaCAtLWF2b2lkPXJhaXNlIC0tYXZvaWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3Qg LS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2b2lkPXN5c190eXBlcyAtLWF2b2lkPXRocmVhZGxp YiAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1rIC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVz IC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1v cHQgYy1jdHlwZSBjLXN0cmNhc2UgY2FyZWFkbGlua2F0IGNsb3NlLXN0cmVhbSBjcnlwdG8v bWQ1IGNyeXB0by9zaGExIGNyeXB0by9zaGEyNTYgY3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0 b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBleGVjaW5mbyBmYWNjZXNzYXQgZmNudGwtaCBmaWxl bW9kZSBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkgaWdub3Jl LXZhbHVlIGludHByb3BzIGxhcmdlZmlsZSBsc3RhdCBtYW55d2FybmluZ3MgbWt0aW1lIHBz ZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiByZWFkbGluayBzaWcyc3RyIHNvY2tsZW4g c3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0cnRv aW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVyLXRp bWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1bnNldGVudiB1dGltZW5zIHdhcm5pbmdz CisjIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1s aWJnbnUgLS1zb3VyY2UtYmFzZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0t dGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9ZHVwIC0tYXZv aWQ9ZXJybm8gLS1hdm9pZD1mY2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0IC0t YXZvaWQ9bWFsbG9jLXBvc2l4IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90 aHJvdyAtLWF2b2lkPW9wZW4gLS1hdm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmRpciAt LWF2b2lkPXJhaXNlIC0tYXZvaWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1z aWdwcm9jbWFzayAtLWF2b2lkPXN5c190eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2Vm aWxlLW5hbWU9Z251bGliLm1rIC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGli dG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlw ZSBjLXN0cmNhc2UgY2FyZWFkbGlua2F0IGNsb3NlLXN0cmVhbSBjcnlwdG8vbWQ1IGNyeXB0 by9zaGExIGNyeXB0by9zaGEyNTYgY3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVj IGR1cDIgZW52aXJvbiBleGVjaW5mbyBmYWNjZXNzYXQgZmNudGwtaCBmZG9wZW5kaXIgZmls ZW1vZGUgZnN0YXRhdCBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2Zk YXkgaWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdlZmlsZSBsc3RhdCBtYW55d2FybmluZ3Mg bWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiByZWFkbGluayByZWFkbGlu a2F0IHNpZzJzdHIgc29ja2xlbiBzdGF0LXRpbWUgc3RkYWxpZ24gc3RkYXJnIHN0ZGJvb2wg c3RkaW8gc3RyZnRpbWUgc3RydG9pbWF4IHN0cnRvdW1heCBzeW1saW5rIHN5c19zdGF0IHN5 c190aW1lIHRpbWUgdGltZXItdGltZSB0aW1lc3BlYy1hZGQgdGltZXNwZWMtc3ViIHVuc2V0 ZW52IHV0aW1lbnMgd2FybmluZ3MKIAogCiBNT1NUTFlDTEVBTkZJTEVTICs9IGNvcmUgKi5z dGFja2R1bXAKQEAgLTY0LDYgKzY0LDE3IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUg YWxsb2NhdG9yCiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYXQtaW50ZXJuYWwKKworaWYg Z2xfR05VTElCX0VOQUJMRURfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIKKwor ZW5kaWYKK0VYVFJBX0RJU1QgKz0gb3BlbmF0LXByaXYuaCBvcGVuYXQtcHJvYy5jCisKK0VY VFJBX2xpYmdudV9hX1NPVVJDRVMgKz0gb3BlbmF0LXByb2MuYworCisjIyBlbmQgICBnbnVs aWIgbW9kdWxlIGF0LWludGVybmFsCisKICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYy1jdHlw ZQogCiBsaWJnbnVfYV9TT1VSQ0VTICs9IGMtY3R5cGUuaCBjLWN0eXBlLmMKQEAgLTEyNCw2 ICsxMzUsNTQgQEAKIAogIyMgZW5kICAgZ251bGliIG1vZHVsZSBjcnlwdG8vc2hhNTEyCiAK KyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZGlyZW50CisKK0JVSUxUX1NPVVJDRVMgKz0gZGly ZW50LmgKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxk aXJlbnQuaD4gd2hlbiB0aGUgc3lzdGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3Jr cyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KK2RpcmVudC5oOiBkaXJlbnQuaW4uaCAkKHRv cF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9I KSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7 IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBc CisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAn c3xAJydIQVZFX0RJUkVOVF9IJydAfCQoSEFWRV9ESVJFTlRfSCl8ZycgXAorCSAgICAgIC1l ICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1l ICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8 ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1O U0B8ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfRElSRU5UX0gnJ0B8JChORVhUX0RJUkVO VF9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX09QRU5ESVInJ0AvJChHTlVMSUJf T1BFTkRJUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFERElSJydALyQoR05V TElCX1JFQURESVIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfUkVXSU5ERElSJydA LyQoR05VTElCX1JFV0lORERJUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DTE9T RURJUicnQC8kKEdOVUxJQl9DTE9TRURJUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJ Ql9ESVJGRCcnQC8kKEdOVUxJQl9ESVJGRCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJ Ql9GRE9QRU5ESVInJ0AvJChHTlVMSUJfRkRPUEVORElSKS9nJyBcCisJICAgICAgLWUgJ3Mv QCcnR05VTElCX1NDQU5ESVInJ0AvJChHTlVMSUJfU0NBTkRJUikvZycgXAorCSAgICAgIC1l ICdzL0AnJ0dOVUxJQl9BTFBIQVNPUlQnJ0AvJChHTlVMSUJfQUxQSEFTT1JUKS9nJyBcCisJ ICAgICAgLWUgJ3MvQCcnSEFWRV9PUEVORElSJydALyQoSEFWRV9PUEVORElSKS9nJyBcCisJ ICAgICAgLWUgJ3MvQCcnSEFWRV9SRUFERElSJydALyQoSEFWRV9SRUFERElSKS9nJyBcCisJ ICAgICAgLWUgJ3MvQCcnSEFWRV9SRVdJTkRESVInJ0AvJChIQVZFX1JFV0lORERJUikvZycg XAorCSAgICAgIC1lICdzL0AnJ0hBVkVfQ0xPU0VESVInJ0AvJChIQVZFX0NMT1NFRElSKS9n JyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0RJUkZEJydAfCQoSEFWRV9ERUNMX0RJ UkZEKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZET1BFTkRJUicnQHwkKEhB VkVfREVDTF9GRE9QRU5ESVIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZET1BFTkRJ UicnQHwkKEhBVkVfRkRPUEVORElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TQ0FO RElSJydAfCQoSEFWRV9TQ0FORElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9BTFBI QVNPUlQnJ0B8JChIQVZFX0FMUEhBU09SVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExB Q0VfT1BFTkRJUicnQHwkKFJFUExBQ0VfT1BFTkRJUil8ZycgXAorCSAgICAgIC1lICdzfEAn J1JFUExBQ0VfQ0xPU0VESVInJ0B8JChSRVBMQUNFX0NMT1NFRElSKXxnJyBcCisJICAgICAg LWUgJ3N8QCcnUkVQTEFDRV9ESVJGRCcnQHwkKFJFUExBQ0VfRElSRkQpfGcnIFwKKwkgICAg ICAtZSAnc3xAJydSRVBMQUNFX0ZET1BFTkRJUicnQHwkKFJFUExBQ0VfRkRPUEVORElSKXxn JyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChD WFhERUZTX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVM TC9yICQoQVJHX05PTk5VTExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dM X1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIp L2RpcmVudC5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK01PU1RMWUNM RUFORklMRVMgKz0gZGlyZW50LmggZGlyZW50LmgtdAorCitFWFRSQV9ESVNUICs9IGRpcmVu dC5pbi5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZGlyZW50CisKICMjIGJlZ2luIGdu dWxpYiBtb2R1bGUgZG9zbmFtZQogCiBpZiBnbF9HTlVMSUJfRU5BQkxFRF9kb3NuYW1lCkBA IC0yMzgsNiArMjk3LDE1IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZmNudGwtaAog CisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZkb3BlbmRpcgorCisKK0VYVFJBX0RJU1QgKz0g ZmRvcGVuZGlyLmMKKworRVhUUkFfbGliZ251X2FfU09VUkNFUyArPSBmZG9wZW5kaXIuYwor CisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGZkb3BlbmRpcgorCiAjIyBiZWdpbiBnbnVsaWIg bW9kdWxlIGZpbGVtb2RlCiAKIGxpYmdudV9hX1NPVVJDRVMgKz0gZmlsZW1vZGUuYwpAQCAt MjU1LDYgKzMyMywxNSBAQAogCiAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGZwZW5kaW5nCiAK KyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZnN0YXRhdAorCisKK0VYVFJBX0RJU1QgKz0gYXQt ZnVuYy5jIGZzdGF0YXQuYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IGF0LWZ1bmMu YyBmc3RhdGF0LmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBmc3RhdGF0CisKICMjIGJl Z2luIGdudWxpYiBtb2R1bGUgZ2V0Z3JvdXBzCiAKIGlmIGdsX0dOVUxJQl9FTkFCTEVEX2dl dGdyb3VwcwpAQCAtNDEyLDYgKzQ4OSwxNSBAQAogCiAjIyBlbmQgICBnbnVsaWIgbW9kdWxl IG1rdGltZQogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIG9wZW5hdC1oCisKK2lmIGdsX0dO VUxJQl9FTkFCTEVEXzAzZTBhYWFkNGNiODljYTc1NzY1M2JkMzY3YTZjY2I3CisKK2VuZGlm CitFWFRSQV9ESVNUICs9IG9wZW5hdC5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgb3Bl bmF0LWgKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBwYXRobWF4CiAKIGlmIGdsX0dOVUxJ Ql9FTkFCTEVEX3BhdGhtYXgKQEAgLTQ1Nyw2ICs1NDMsMTUgQEAKIAogIyMgZW5kICAgZ251 bGliIG1vZHVsZSByZWFkbGluawogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJlYWRsaW5r YXQKKworCitFWFRSQV9ESVNUICs9IGF0LWZ1bmMuYyByZWFkbGlua2F0LmMKKworRVhUUkFf bGliZ251X2FfU09VUkNFUyArPSBhdC1mdW5jLmMgcmVhZGxpbmthdC5jCisKKyMjIGVuZCAg IGdudWxpYiBtb2R1bGUgcmVhZGxpbmthdAorCiAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJv b3QtdWlkCiAKIGlmIGdsX0dOVUxJQl9FTkFCTEVEXzYwOTllOTczN2Y3NTdkYjM2YzQ3ZmE5 ZDlmMDJlODhjCgo9PT0gYWRkZWQgZmlsZSAnbGliL29wZW5hdC1kaWUuYycKLS0tIGxpYi9v cGVuYXQtZGllLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL29wZW5hdC1k aWUuYwkyMDEzLTAxLTI0IDA2OjUxOjI1ICswMDAwCkBAIC0wLDAgKzEsNiBAQAorLyogUmVz cG9uZCB0byBhIHNhdmUtIG9yIHJlc3RvcmUtY3dkIGZhaWx1cmUuCisgICBUaGlzIHNob3Vs ZCBuZXZlciBoYXBwZW4gd2l0aCBFbWFjcy4gICovCisjaW5jbHVkZSA8Y29uZmlnLmg+Cisj aW5jbHVkZSAib3BlbmF0LmgiCit2b2lkIG9wZW5hdF9zYXZlX2ZhaWwgKGludCBlcnJudW0p IHsgYWJvcnQgKCk7IH0KK3ZvaWQgb3BlbmF0X3Jlc3RvcmVfZmFpbCAoaW50IGVycm51bSkg eyBhYm9ydCAoKTsgfQoKPT09IGFkZGVkIGZpbGUgJ2xpYi9vcGVuYXQtcHJpdi5oJwotLS0g bGliL29wZW5hdC1wcml2LmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL29w ZW5hdC1wcml2LmgJMjAxMy0wMS0yNCAwNjo1MToyNSArMDAwMApAQCAtMCwwICsxLDY0IEBA CisvKiBJbnRlcm5hbHMgZm9yIG9wZW5hdC1saWtlIGZ1bmN0aW9ucy4KKworICAgQ29weXJp Z2h0IChDKSAyMDA1LTIwMDYsIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgKi8KKwor I2lmbmRlZiBfR0xfSEVBREVSX09QRU5BVF9QUklWCisjZGVmaW5lIF9HTF9IRUFERVJfT1BF TkFUX1BSSVYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQg aXQgaXMgc2FmZSB0byBhbGxvY2F0ZSBhcyBhIHNpbmdsZQorICAgYXJyYXkgb24gdGhlIHN0 YWNrLCBhbmQgdGhhdCBpcyBrbm93biBhcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudC4KKyAg IFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UnbGwgdG91Y2ggdGhlIGFycmF5IHZlcnkgcXVp Y2tseSwgb3IgYQorICAgdGVtcG9yYXJ5IHZlcnkgbmVhciB0aGUgYXJyYXksIHByb3Zva2lu ZyBhbiBvdXQtb2YtbWVtb3J5IHRyYXAuICBPbgorICAgc29tZSBvcGVyYXRpbmcgc3lzdGVt cywgdGhlcmUgaXMgb25seSBvbmUgZ3VhcmQgcGFnZSBmb3IgdGhlIHN0YWNrLAorICAgYW5k IGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU3VidHJhY3Qg NjQgaW4gdGhlCisgICBob3BlIHRoYXQgdGhpcyB3aWxsIGxldCB0aGUgY29tcGlsZXIgdG91 Y2ggYSBuZWFyYnkgdGVtcG9yYXJ5IGFuZAorICAgcHJvdm9rZSBhIHRyYXAuICAqLworI2Rl ZmluZSBTQUZFUl9BTExPQ0FfTUFYICg0MDk2IC0gNjQpCisKKyNkZWZpbmUgU0FGRVJfQUxM T0NBKG0pICgobSkgPCBTQUZFUl9BTExPQ0FfTUFYID8gKG0pIDogU0FGRVJfQUxMT0NBX01B WCkKKworI2lmIGRlZmluZWQgUEFUSF9NQVgKKyMgZGVmaW5lIE9QRU5BVF9CVUZGRVJfU0la RSBTQUZFUl9BTExPQ0EgKFBBVEhfTUFYKQorI2VsaWYgZGVmaW5lZCBfWE9QRU5fUEFUSF9N QVgKKyMgZGVmaW5lIE9QRU5BVF9CVUZGRVJfU0laRSBTQUZFUl9BTExPQ0EgKF9YT1BFTl9Q QVRIX01BWCkKKyNlbHNlCisjIGRlZmluZSBPUEVOQVRfQlVGRkVSX1NJWkUgU0FGRVJfQUxM T0NBICgxMDI0KQorI2VuZGlmCisKK2NoYXIgKm9wZW5hdF9wcm9jX25hbWUgKGNoYXIgYnVm W09QRU5BVF9CVUZGRVJfU0laRV0sIGludCBmZCwgY2hhciBjb25zdCAqZmlsZSk7CisKKy8q IFRyeWluZyB0byBhY2Nlc3MgYSBCVUlMRF9QUk9DX05BTUUgZmlsZSB3aWxsIGZhaWwgb24g c3lzdGVtcyB3aXRob3V0CisgICAvcHJvYyBzdXBwb3J0LCBhbmQgZXZlbiBvbiBzeXN0ZW1z ICp3aXRoKiBQcm9jRlMgc3VwcG9ydC4gIFJldHVybgorICAgbm9uemVybyBpZiB0aGUgZmFp bHVyZSBtYXkgYmUgbGVnaXRpbWF0ZSwgZS5nLiwgYmVjYXVzZSAvcHJvYyBpcyBub3QKKyAg IHJlYWRhYmxlLCBvciB0aGUgcGFydGljdWxhciAuLi4vZmQvTiBkaXJlY3RvcnkgaXMgbm90 IHByZXNlbnQuICAqLworI2RlZmluZSBFWFBFQ1RFRF9FUlJOTyhFcnJubykgICAgICAgICAg ICAgICAgICAgXAorICAoKEVycm5vKSA9PSBFTk9URElSIHx8IChFcnJubykgPT0gRU5PRU5U ICAgICAgXAorICAgfHwgKEVycm5vKSA9PSBFUEVSTSB8fCAoRXJybm8pID09IEVBQ0NFUyAg ICAgXAorICAgfHwgKEVycm5vKSA9PSBFTk9TWVMgLyogU29sYXJpcyA4ICovICAgICAgICAg XAorICAgfHwgKEVycm5vKSA9PSBFT1BOT1RTVVBQIC8qIEZyZWVCU0QgKi8pCisKKy8qIFdy YXBwZXIgZnVuY3Rpb24gc2hhcmVkIGFtb25nIGxpbmthdCBhbmQgcmVuYW1lYXQuICAqLwor aW50IGF0X2Z1bmMyIChpbnQgZmQxLCBjaGFyIGNvbnN0ICpmaWxlMSwKKyAgICAgICAgICAg ICAgaW50IGZkMiwgY2hhciBjb25zdCAqZmlsZTIsCisgICAgICAgICAgICAgIGludCAoKmZ1 bmMpIChjaGFyIGNvbnN0ICpmaWxlMSwgY2hhciBjb25zdCAqZmlsZTIpKTsKKworI2VuZGlm IC8qIF9HTF9IRUFERVJfT1BFTkFUX1BSSVYgKi8KCj09PSBhZGRlZCBmaWxlICdsaWIvb3Bl bmF0LXByb2MuYycKLS0tIGxpYi9vcGVuYXQtcHJvYy5jCTE5NzAtMDEtMDEgMDA6MDA6MDAg KzAwMDAKKysrIGxpYi9vcGVuYXQtcHJvYy5jCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAK QEAgLTAsMCArMSwxMTAgQEAKKy8qIENyZWF0ZSAvcHJvYy9zZWxmL2ZkLXJlbGF0ZWQgbmFt ZXMgZm9yIHN1YmZpbGVzIG9mIG9wZW4gZGlyZWN0b3JpZXMuCisKKyAgIENvcHlyaWdodCAo QykgMjAwNiwgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworCisvKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KKworI2luY2x1ZGUg PGNvbmZpZy5oPgorCisjaW5jbHVkZSAib3BlbmF0LXByaXYuaCIKKworI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4K KworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8 c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJpbnRwcm9wcy5o IgorCisvKiBUaGUgcmVzdWx0cyBvZiBvcGVuKCkgaW4gdGhpcyBmaWxlIGFyZSBub3QgdXNl ZCB3aXRoIGZjaGRpciwKKyAgIGFuZCB3ZSBkbyBub3QgbGVhayBmZHMgdG8gYW55IHNpbmds ZS10aHJlYWRlZCBjb2RlIHRoYXQgY291bGQgdXNlIHN0ZGlvLAorICAgdGhlcmVmb3JlIHNh dmUgc29tZSB1bm5lY2Vzc2FyeSB3b3JrIGluIGZjaGRpci5jLgorICAgRklYTUUgLSBpZiB0 aGUga2VybmVsIGV2ZXIgYWRkcyBzdXBwb3J0IGZvciBtdWx0aS10aHJlYWQgc2FmZXR5IGZv cgorICAgYXZvaWRpbmcgc3RhbmRhcmQgZmRzLCB0aGVuIHdlIHNob3VsZCB1c2Ugb3Blbl9z YWZlci4gICovCisjdW5kZWYgb3BlbgorI3VuZGVmIGNsb3NlCisKKyNkZWZpbmUgUFJPQ19T RUxGX0ZEX0ZPUk1BVCAiL3Byb2Mvc2VsZi9mZC8lZC8lcyIKKworI2RlZmluZSBQUk9DX1NF TEZfRkRfTkFNRV9TSVpFX0JPVU5EKGxlbikgXAorICAoc2l6ZW9mIFBST0NfU0VMRl9GRF9G T1JNQVQgLSBzaXplb2YgIiVkJXMiIFwKKyAgICsgSU5UX1NUUkxFTl9CT1VORCAoaW50KSAr IChsZW4pICsgMSkKKworCisvKiBTZXQgQlVGIHRvIHRoZSBleHBhbnNpb24gb2YgUFJPQ19T RUxGX0ZEX0ZPUk1BVCwgdXNpbmcgRkQgYW5kIEZJTEUKKyAgIHJlc3BlY3RpdmVseSBmb3Ig JWQgYW5kICVzLiAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIEJVRiBpZiB0aGUKKyAgIHJlc3Vs dCBmaXRzIGluIEJVRiwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBvdGhlcndpc2Uu ICBCdXQKKyAgIHJldHVybiBOVUxMIGlmIC9wcm9jIGlzIG5vdCByZWxpYWJsZSwgZWl0aGVy IGJlY2F1c2UgdGhlIG9wZXJhdGluZworICAgc3lzdGVtIHN1cHBvcnQgaXMgbGFja2luZyBv ciBiZWNhdXNlIG1lbW9yeSBpcyBsb3cuICAqLworY2hhciAqCitvcGVuYXRfcHJvY19uYW1l IChjaGFyIGJ1ZltPUEVOQVRfQlVGRkVSX1NJWkVdLCBpbnQgZmQsIGNoYXIgY29uc3QgKmZp bGUpCit7CisgIHN0YXRpYyBpbnQgcHJvY19zdGF0dXMgPSAwOworCisgIC8qIE1ha2Ugc3Vy ZSB0aGUgY2FsbGVyIGdldHMgRU5PRU5UIHdoZW4gYXBwcm9wcmlhdGUuICAqLworICBpZiAo ISpmaWxlKQorICAgIHsKKyAgICAgIGJ1ZlswXSA9ICdcMCc7CisgICAgICByZXR1cm4gYnVm OworICAgIH0KKworICBpZiAoISBwcm9jX3N0YXR1cykKKyAgICB7CisgICAgICAvKiBTZXQg UFJPQ19TVEFUVVMgdG8gYSBwb3NpdGl2ZSB2YWx1ZSBpZiAvcHJvYy9zZWxmL2ZkIGlzCisg ICAgICAgICByZWxpYWJsZSwgYW5kIGEgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLiAgU29s YXJpcyAxMAorICAgICAgICAgL3Byb2Mvc2VsZi9mZCBtaXNoYW5kbGVzICIuLiIsIGFuZCBh bnkgZmlsZSBuYW1lIG1pZ2h0IGV4cGFuZAorICAgICAgICAgdG8gIi4uIiBhZnRlciBzeW1i b2xpYyBsaW5rIGV4cGFuc2lvbiwgc28gYXZvaWQgL3Byb2Mvc2VsZi9mZAorICAgICAgICAg aWYgaXQgbWlzaGFuZGxlcyAiLi4iLiAgU29sYXJpcyAxMCBoYXMgb3BlbmF0LCBidXQgdGhp cworICAgICAgICAgcHJvYmxlbSBpcyBleGhpYml0ZWQgb24gY29kZSB0aGF0IGJ1aWx0IG9u IFNvbGFyaXMgOCBhbmQKKyAgICAgICAgIHJ1bm5pbmcgb24gU29sYXJpcyAxMC4gICovCisK KyAgICAgIGludCBwcm9jX3NlbGZfZmQgPSBvcGVuICgiL3Byb2Mvc2VsZi9mZCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT19TRUFSQ0ggfCBPX0RJUkVDVE9SWSB8IE9f Tk9DVFRZIHwgT19OT05CTE9DSyk7CisgICAgICBpZiAocHJvY19zZWxmX2ZkIDwgMCkKKyAg ICAgICAgcHJvY19zdGF0dXMgPSAtMTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg ICAgIC8qIERldGVjdCB3aGV0aGVyIC9wcm9jL3NlbGYvZmQvJWkvLi4vZmQgZXhpc3RzLCB3 aGVyZSAlaSBpcyB0aGUKKyAgICAgICAgICAgICBudW1iZXIgb2YgYSBmaWxlIGRlc2NyaXB0 b3Igb3BlbiBvbiAvcHJvYy9zZWxmL2ZkLiAgT24gTGludXgsCisgICAgICAgICAgICAgdGhh dCBuYW1lIHJlc29sdmVzIHRvIC9wcm9jL3NlbGYvZmQsIHdoaWNoIHdhcyBvcGVuZWQgYWJv dmUuCisgICAgICAgICAgICAgSG93ZXZlciwgb24gU29sYXJpcywgaXQgbWF5IHJlc29sdmUg dG8gL3Byb2Mvc2VsZi9mZC9mZCwgd2hpY2gKKyAgICAgICAgICAgICBjYW5ub3QgZXhpc3Qs IHNpbmNlIGFsbCBuYW1lcyBpbiAvcHJvYy9zZWxmL2ZkIGFyZSBudW1lcmljLiAgKi8KKyAg ICAgICAgICBjaGFyIGRvdGRvdF9idWZbUFJPQ19TRUxGX0ZEX05BTUVfU0laRV9CT1VORCAo c2l6ZW9mICIuLi9mZCIgLSAxKV07CisgICAgICAgICAgc3ByaW50ZiAoZG90ZG90X2J1Ziwg UFJPQ19TRUxGX0ZEX0ZPUk1BVCwgcHJvY19zZWxmX2ZkLCAiLi4vZmQiKTsKKyAgICAgICAg ICBwcm9jX3N0YXR1cyA9IGFjY2VzcyAoZG90ZG90X2J1ZiwgRl9PSykgPyAtMSA6IDE7Cisg ICAgICAgICAgY2xvc2UgKHByb2Nfc2VsZl9mZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg aWYgKHByb2Nfc3RhdHVzIDwgMCkKKyAgICByZXR1cm4gTlVMTDsKKyAgZWxzZQorICAgIHsK KyAgICAgIHNpemVfdCBidWZzaXplID0gUFJPQ19TRUxGX0ZEX05BTUVfU0laRV9CT1VORCAo c3RybGVuIChmaWxlKSk7CisgICAgICBjaGFyICpyZXN1bHQgPSBidWY7CisgICAgICBpZiAo T1BFTkFUX0JVRkZFUl9TSVpFIDwgYnVmc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgIHJl c3VsdCA9IG1hbGxvYyAoYnVmc2l6ZSk7CisgICAgICAgICAgaWYgKCEgcmVzdWx0KQorICAg ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgIHNwcmludGYgKHJlc3Vs dCwgUFJPQ19TRUxGX0ZEX0ZPUk1BVCwgZmQsIGZpbGUpOworICAgICAgcmV0dXJuIHJlc3Vs dDsKKyAgICB9Cit9Cgo9PT0gYWRkZWQgZmlsZSAnbGliL29wZW5hdC5oJwotLS0gbGliL29w ZW5hdC5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9vcGVuYXQuaAkyMDEz LTAxLTI0IDA2OjUxOjI1ICswMDAwCkBAIC0wLDAgKzEsMTIwIEBACisvKiBwcm92aWRlIGEg cmVwbGFjZW1lbnQgb3BlbmF0IGZ1bmN0aW9uCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw NiwgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworCisvKiB3cml0dGVuIGJ5IEppbSBNZXllcmluZyAqLworCisjaWZuZGVmIF9HTF9IRUFE RVJfT1BFTkFUCisjZGVmaW5lIF9HTF9IRUFERVJfT1BFTkFUCisKKyNpbmNsdWRlIDxmY250 bC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4K KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKK19HTF9JTkxJ TkVfSEVBREVSX0JFR0lOCisKKyNpZiAhSEFWRV9PUEVOQVQKKworaW50IG9wZW5hdF9wZXJt aXNzaXZlIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFncywgbW9kZV90IG1v ZGUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqY3dkX2Vycm5vKTsKK2Jvb2wgb3Bl bmF0X25lZWRzX2ZjaGRpciAodm9pZCk7CisKKyNlbHNlCisKKyMgZGVmaW5lIG9wZW5hdF9w ZXJtaXNzaXZlKEZkLCBGaWxlLCBGbGFncywgTW9kZSwgQ3dkX2Vycm5vKSBcCisgICAgb3Bl bmF0IChGZCwgRmlsZSwgRmxhZ3MsIE1vZGUpCisjIGRlZmluZSBvcGVuYXRfbmVlZHNfZmNo ZGlyKCkgZmFsc2UKKworI2VuZGlmCisKK19Ob3JldHVybiB2b2lkIG9wZW5hdF9yZXN0b3Jl X2ZhaWwgKGludCk7CitfTm9yZXR1cm4gdm9pZCBvcGVuYXRfc2F2ZV9mYWlsIChpbnQpOwor CisvKiBVc2luZyB0aGVzZSBmdW5jdGlvbiBuYW1lcyBtYWtlcyBhcHBsaWNhdGlvbiBjb2Rl CisgICBzbGlnaHRseSBtb3JlIHJlYWRhYmxlIHRoYW4gaXQgd291bGQgYmUgd2l0aAorICAg ZmNob3duYXQgKC4uLiwgMCkgb3IgZmNob3duYXQgKC4uLiwgQVRfU1lNTElOS19OT0ZPTExP VykuICAqLworCisjaWYgR05VTElCX0ZDSE9XTkFUCisKKyMgaWZuZGVmIEZDSE9XTkFUX0lO TElORQorIyAgZGVmaW5lIEZDSE9XTkFUX0lOTElORSBfR0xfSU5MSU5FCisjIGVuZGlmCisK K0ZDSE9XTkFUX0lOTElORSBpbnQKK2Nob3duYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmls ZSwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwKQoreworICByZXR1cm4gZmNob3duYXQgKGZk LCBmaWxlLCBvd25lciwgZ3JvdXAsIDApOworfQorCitGQ0hPV05BVF9JTkxJTkUgaW50Cits Y2hvd25hdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCB1aWRfdCBvd25lciwgZ2lkX3Qg Z3JvdXApCit7CisgIHJldHVybiBmY2hvd25hdCAoZmQsIGZpbGUsIG93bmVyLCBncm91cCwg QVRfU1lNTElOS19OT0ZPTExPVyk7Cit9CisKKyNlbmRpZgorCisjaWYgR05VTElCX0ZDSE1P REFUCisKKyMgaWZuZGVmIEZDSE1PREFUX0lOTElORQorIyAgZGVmaW5lIEZDSE1PREFUX0lO TElORSBfR0xfSU5MSU5FCisjIGVuZGlmCisKK0ZDSE1PREFUX0lOTElORSBpbnQKK2NobW9k YXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgbW9kZV90IG1vZGUpCit7CisgIHJldHVy biBmY2htb2RhdCAoZmQsIGZpbGUsIG1vZGUsIDApOworfQorCitGQ0hNT0RBVF9JTkxJTkUg aW50CitsY2htb2RhdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSkK K3sKKyAgcmV0dXJuIGZjaG1vZGF0IChmZCwgZmlsZSwgbW9kZSwgQVRfU1lNTElOS19OT0ZP TExPVyk7Cit9CisKKyNlbmRpZgorCisjaWYgR05VTElCX1NUQVRBVAorCisjIGlmbmRlZiBT VEFUQVRfSU5MSU5FCisjICBkZWZpbmUgU1RBVEFUX0lOTElORSBfR0xfSU5MSU5FCisjIGVu ZGlmCisKK1NUQVRBVF9JTkxJTkUgaW50CitzdGF0YXQgKGludCBmZCwgY2hhciBjb25zdCAq bmFtZSwgc3RydWN0IHN0YXQgKnN0KQoreworICByZXR1cm4gZnN0YXRhdCAoZmQsIG5hbWUs IHN0LCAwKTsKK30KKworU1RBVEFUX0lOTElORSBpbnQKK2xzdGF0YXQgKGludCBmZCwgY2hh ciBjb25zdCAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQoreworICByZXR1cm4gZnN0YXRhdCAo ZmQsIG5hbWUsIHN0LCBBVF9TWU1MSU5LX05PRk9MTE9XKTsKK30KKworI2VuZGlmCisKKy8q IEZvciBub3csIHRoZXJlIGFyZSBubyB3cmFwcGVycyBuYW1lZCBsYWNjZXNzYXQgb3IgbGV1 aWRhY2Nlc3NhdCwKKyAgIHNpbmNlIGdudWxpYiBkb2Vzbid0IHN1cHBvcnQgZmFjY2Vzc2F0 KCxBVF9TWU1MSU5LX05PRk9MTE9XKSBhbmQKKyAgIHNpbmNlIGFjY2VzcyByaWdodHMgb24g c3ltbGlua3MgYXJlIG9mIGxpbWl0ZWQgdXRpbGl0eS4gIExpa2V3aXNlLAorICAgd3JhcHBl cnMgYXJlIG5vdCBwcm92aWRlZCBmb3IgYWNjZXNzYXQgb3IgZXVpZGFjY2Vzc2F0LCBzbyBh cyB0bworICAgYXZvaWQgZHJhZ2dpbmcgaW4gLWxnZW4gb24gc29tZSBwbGF0Zm9ybXMuICAq LworCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIF9HTF9IRUFERVJfT1BF TkFUICovCgo9PT0gYWRkZWQgZmlsZSAnbGliL3JlYWRsaW5rYXQuYycKLS0tIGxpYi9yZWFk bGlua2F0LmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL3JlYWRsaW5rYXQu YwkyMDEzLTAxLTI0IDA4OjAyOjE2ICswMDAwCkBAIC0wLDAgKzEsNDcgQEAKKy8qIFJlYWQg YSBzeW1saW5rIHJlbGF0aXZlIHRvIGFuIG9wZW4gZGlyZWN0b3J5LgorICAgQ29weXJpZ2h0 IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKy8qIHdyaXR0ZW4gYnkgRXJpYyBCbGFrZSAqLworCisjaW5jbHVkZSA8Y29uZmln Lmg+CisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogR251bGliIHByb3ZpZGVzIGEgcmVh ZGxpbmsgc3R1YiBmb3IgbWluZ3c7IHVzZSBpdCBmb3IgZGlzdGluY3Rpb24KKyAgIGJldHdl ZW4gRUlOVkFMIGFuZCBFTk9FTlQsIHJhdGhlciB0aGFuIGFsd2F5cyBmYWlsaW5nIHdpdGgg RU5PU1lTLiAgKi8KKworLyogUE9TSVggMjAwOCBzYXlzIHRoYXQgdW5saWtlIHJlYWRsaW5r LCByZWFkbGlua2F0IHJldHVybnMgMCBmb3IKKyAgIHN1Y2Nlc3MgaW5zdGVhZCBvZiB0aGUg YnVmZmVyIGxlbmd0aC4gIEJ1dCB0aGlzIHdvdWxkIHJlbmRlcgorICAgcmVhZGxpbmthdCB3 b3J0aGxlc3Mgc2luY2UgcmVhZGxpbmsgZG9lcyBub3QgZ3VhcmFudGVlIGEKKyAgIE5VTC10 ZXJtaW5hdGVkIGJ1ZmZlci4gIEFzc3VtZSB0aGlzIHdhcyBhIGJ1ZyBpbiBQT1NJWC4gICov CisKKy8qIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHN5bWxpbmsgRklMRSBpbnRvIGJ1ZmZlciBC VUYgb2Ygc2l6ZSBMRU4sIGluIHRoZQorICAgZGlyZWN0b3J5IG9wZW4gb24gZGVzY3JpcHRv ciBGRC4gIElmIHBvc3NpYmxlLCBkbyBpdCB3aXRob3V0IGNoYW5naW5nCisgICB0aGUgd29y a2luZyBkaXJlY3RvcnkuICBPdGhlcndpc2UsIHJlc29ydCB0byB1c2luZyBzYXZlX2N3ZC9m Y2hkaXIsCisgICB0aGVuIHJlYWRsaW5rL3Jlc3RvcmVfY3dkLiAgSWYgZWl0aGVyIHRoZSBz YXZlX2N3ZCBvciB0aGUgcmVzdG9yZV9jd2QKKyAgIGZhaWxzLCB0aGVuIGdpdmUgYSBkaWFn bm9zdGljIGFuZCBleGl0IG5vbnplcm8uICAqLworCisjZGVmaW5lIEFUX0ZVTkNfTkFNRSBy ZWFkbGlua2F0CisjZGVmaW5lIEFUX0ZVTkNfRjEgcmVhZGxpbmsKKyNkZWZpbmUgQVRfRlVO Q19QT1NUX0ZJTEVfUEFSQU1fREVDTFMgLCBjaGFyICpidWYsIHNpemVfdCBsZW4KKyNkZWZp bmUgQVRfRlVOQ19QT1NUX0ZJTEVfQVJHUyAgICAgICAgLCBidWYsIGxlbgorI2RlZmluZSBB VF9GVU5DX1JFU1VMVCBzc2l6ZV90CisjaW5jbHVkZSAiYXQtZnVuYy5jIgorI3VuZGVmIEFU X0ZVTkNfTkFNRQorI3VuZGVmIEFUX0ZVTkNfRjEKKyN1bmRlZiBBVF9GVU5DX1BPU1RfRklM RV9QQVJBTV9ERUNMUworI3VuZGVmIEFUX0ZVTkNfUE9TVF9GSUxFX0FSR1MKKyN1bmRlZiBB VF9GVU5DX1JFU1VMVAoKPT09IGFkZGVkIGZpbGUgJ2xpYi9zYXZlLWN3ZC5jJwotLS0gbGli L3NhdmUtY3dkLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL3NhdmUtY3dk LmMJMjAxMy0wMS0yNCAwNjo1MToyNSArMDAwMApAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRl IDxjb25maWcuaD4KKyNkZWZpbmUgU0FWRV9DV0RfSU5MSU5FIF9HTF9FWFRFUk5fSU5MSU5F CisjaW5jbHVkZSAic2F2ZS1jd2QuaCIKCj09PSBhZGRlZCBmaWxlICdsaWIvc2F2ZS1jd2Qu aCcKLS0tIGxpYi9zYXZlLWN3ZC5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxp Yi9zYXZlLWN3ZC5oCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTAsMCArMSw0NiBA QAorLyogRG8gbm90IHNhdmUgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJl Y3RvcnkuCisKKyAgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisvKiBHbnVsaWIgbmVlZHMgdG8gc2F2ZSBhbmQgcmVzdG9y ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0bworICAgZnVsbHkgZW11bGF0ZSBm dW5jdGlvbnMgbGlrZSBmc3RhdGF0LiAgQnV0IEVtYWNzIGRvZXNuJ3QgY2FyZSB3aGF0Cisg ICB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpczsgaXQgYWx3YXlzIHVzZXMgYWJz b2x1dGUgZmlsZQorICAgbmFtZXMuICBUaGlzIG1vZHVsZSByZXBsYWNlcyB0aGUgR251bGli IG1vZHVsZSBieSBvbWl0dGluZyB0aGUgY29kZQorICAgdGhhdCBFbWFjcyBkb2VzIG5vdCBu ZWVkLiAgKi8KKworI2lmbmRlZiBTQVZFX0NXRF9ICisjZGVmaW5lIFNBVkVfQ1dEX0ggMQor CitfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorI2lmbmRlZiBTQVZFX0NXRF9JTkxJTkUKKyMg ZGVmaW5lIFNBVkVfQ1dEX0lOTElORSBfR0xfSU5MSU5FCisjZW5kaWYKKworc3RydWN0IHNh dmVkX2N3ZCB7IGludCBkZXNjOyB9OworCitTQVZFX0NXRF9JTkxJTkUgaW50CitzYXZlX2N3 ZCAoc3RydWN0IHNhdmVkX2N3ZCAqY3dkKQoreworICBjd2QtPmRlc2MgPSAtMTsKKyAgcmV0 dXJuIDA7Cit9CisKK1NBVkVfQ1dEX0lOTElORSBpbnQgcmVzdG9yZV9jd2QgKHN0cnVjdCBz YXZlZF9jd2QgY29uc3QgKmN3ZCkgeyByZXR1cm4gMDsgfQorU0FWRV9DV0RfSU5MSU5FIHZv aWQgZnJlZV9jd2QgKHN0cnVjdCBzYXZlZF9jd2QgKmN3ZCkgeyB9CisKK19HTF9JTkxJTkVf SEVBREVSX0VORAorCisjZW5kaWYKCj09PSBhZGRlZCBmaWxlICdtNC9kaXJlbnRfaC5tNCcK LS0tIG00L2RpcmVudF9oLm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00L2Rp cmVudF9oLm00CTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTAsMCArMSw2NCBAQAor IyBkaXJlbnRfaC5tNCBzZXJpYWwgMTYKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBz b2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGlt aXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0 aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMg cHJlc2VydmVkLgorCitkbmwgV3JpdHRlbiBieSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVO KFtnbF9ESVJFTlRfSF0sCitbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0 IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJlbG93IGlzIGV4cGFuZGVkCisgIGRubCBvbmNlIG9u bHksIGJlZm9yZSBhbGwgc3RhdGVtZW50cyB0aGF0IG9jY3VyIGluIG90aGVyIG1hY3Jvcy4K KyAgQUNfUkVRVUlSRShbZ2xfRElSRU5UX0hfREVGQVVMVFNdKQorCisgIGRubCA8ZGlyZW50 Lmg+IGlzIGFsd2F5cyBvdmVycmlkZGVuLCBiZWNhdXNlIG9mIEdOVUxJQl9QT1NJWENIRUNL LgorICBnbF9DSEVDS19ORVhUX0hFQURFUlMoW2RpcmVudC5oXSkKKyAgaWYgdGVzdCAkYWNf Y3ZfaGVhZGVyX2RpcmVudF9oID0geWVzOyB0aGVuCisgICAgSEFWRV9ESVJFTlRfSD0xCisg IGVsc2UKKyAgICBIQVZFX0RJUkVOVF9IPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfRElS RU5UX0hdKQorCisgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdl IHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9k dWxlIGlzIG5vdCBpbiB1c2UuCisgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVk ZSA8ZGlyZW50Lmg+CisgICAgXV0sIFthbHBoYXNvcnQgY2xvc2VkaXIgZGlyZmQgZmRvcGVu ZGlyIG9wZW5kaXIgcmVhZGRpciByZXdpbmRkaXIgc2NhbmRpcl0pCitdKQorCitBQ19ERUZV TihbZ2xfRElSRU5UX01PRFVMRV9JTkRJQ0FUT1JdLAorWworICBkbmwgVXNlIEFDX1JFUVVJ UkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25j ZSBvbmx5LgorICBBQ19SRVFVSVJFKFtnbF9ESVJFTlRfSF9ERUZBVUxUU10pCisgIGdsX01P RFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFskMV0pCisgIGRubCBEZWZpbmUgaXQgYWxz byBhcyBhIEMgbWFjcm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKyAg Z2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMoWyQxXSkKK10pCisKK0FDX0RFRlVOKFtn bF9ESVJFTlRfSF9ERUZBVUxUU10sCitbCisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RF RkFVTFRTXSkgZG5sIGZvciBSRVBMQUNFX0ZDSERJUgorICBHTlVMSUJfT1BFTkRJUj0wOyAg ICAgQUNfU1VCU1QoW0dOVUxJQl9PUEVORElSXSkKKyAgR05VTElCX1JFQURESVI9MDsgICAg IEFDX1NVQlNUKFtHTlVMSUJfUkVBRERJUl0pCisgIEdOVUxJQl9SRVdJTkRESVI9MDsgICBB Q19TVUJTVChbR05VTElCX1JFV0lORERJUl0pCisgIEdOVUxJQl9DTE9TRURJUj0wOyAgICBB Q19TVUJTVChbR05VTElCX0NMT1NFRElSXSkKKyAgR05VTElCX0RJUkZEPTA7ICAgICAgIEFD X1NVQlNUKFtHTlVMSUJfRElSRkRdKQorICBHTlVMSUJfRkRPUEVORElSPTA7ICAgQUNfU1VC U1QoW0dOVUxJQl9GRE9QRU5ESVJdKQorICBHTlVMSUJfU0NBTkRJUj0wOyAgICAgQUNfU1VC U1QoW0dOVUxJQl9TQ0FORElSXSkKKyAgR05VTElCX0FMUEhBU09SVD0wOyAgIEFDX1NVQlNU KFtHTlVMSUJfQUxQSEFTT1JUXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9y IHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9PUEVORElS PTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX09QRU5ESVJdKQorICBIQVZFX1JFQURESVI9MTsg ICAgICAgQUNfU1VCU1QoW0hBVkVfUkVBRERJUl0pCisgIEhBVkVfUkVXSU5ERElSPTE7ICAg ICBBQ19TVUJTVChbSEFWRV9SRVdJTkRESVJdKQorICBIQVZFX0NMT1NFRElSPTE7ICAgICAg QUNfU1VCU1QoW0hBVkVfQ0xPU0VESVJdKQorICBIQVZFX0RFQ0xfRElSRkQ9MTsgICAgQUNf U1VCU1QoW0hBVkVfREVDTF9ESVJGRF0pCisgIEhBVkVfREVDTF9GRE9QRU5ESVI9MTtBQ19T VUJTVChbSEFWRV9ERUNMX0ZET1BFTkRJUl0pCisgIEhBVkVfRkRPUEVORElSPTE7ICAgICBB Q19TVUJTVChbSEFWRV9GRE9QRU5ESVJdKQorICBIQVZFX1NDQU5ESVI9MTsgICAgICAgQUNf U1VCU1QoW0hBVkVfU0NBTkRJUl0pCisgIEhBVkVfQUxQSEFTT1JUPTE7ICAgICBBQ19TVUJT VChbSEFWRV9BTFBIQVNPUlRdKQorICBSRVBMQUNFX09QRU5ESVI9MDsgICAgQUNfU1VCU1Qo W1JFUExBQ0VfT1BFTkRJUl0pCisgIFJFUExBQ0VfQ0xPU0VESVI9MDsgICBBQ19TVUJTVChb UkVQTEFDRV9DTE9TRURJUl0pCisgIFJFUExBQ0VfRElSRkQ9MDsgICAgICBBQ19TVUJTVChb UkVQTEFDRV9ESVJGRF0pCisgIFJFUExBQ0VfRkRPUEVORElSPTA7ICBBQ19TVUJTVChbUkVQ TEFDRV9GRE9QRU5ESVJdKQorXSkKCj09PSBhZGRlZCBmaWxlICdtNC9mZG9wZW5kaXIubTQn Ci0tLSBtNC9mZG9wZW5kaXIubTQJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbTQv ZmRvcGVuZGlyLm00CTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTAsMCArMSw2MSBA QAorIyBzZXJpYWwgMTAKKyMgU2VlIGlmIHdlIG5lZWQgdG8gcHJvdmlkZSBmZG9wZW5kaXIu CisKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNv cHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNh dGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFdyaXR0 ZW4gYnkgRXJpYyBCbGFrZS4KKworQUNfREVGVU4oW2dsX0ZVTkNfRkRPUEVORElSXSwKK1sK KyAgQUNfUkVRVUlSRShbZ2xfRElSRU5UX0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtB Q19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKworICBBQ19SRVFV SVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorCisgIGRubCBGcmVlQlNEIDcuMyBo YXMgdGhlIGZ1bmN0aW9uLCBidXQgZmFpbGVkIHRvIGRlY2xhcmUgaXQuCisgIEFDX0NIRUNL X0RFQ0xTKFtmZG9wZW5kaXJdLCBbXSwgW0hBVkVfREVDTF9GRE9QRU5ESVI9MF0sIFtbCisj aW5jbHVkZSA8ZGlyZW50Lmg+CisgICAgXV0pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2Zk b3BlbmRpcl0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZmRvcGVuZGlyID0gbm87IHRoZW4K KyAgICBIQVZFX0ZET1BFTkRJUj0wCisgIGVsc2UKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hl dGhlciBmZG9wZW5kaXIgd29ya3NdLAorICAgICAgW2dsX2N2X2Z1bmNfZmRvcGVuZGlyX3dv cmtzXSwKKyAgICAgIFtBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNs dWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o PgorI2lmICFIQVZFX0RFQ0xfRkRPUEVORElSCitleHRlcm4KKyMgaWZkZWYgX19jcGx1c3Bs dXMKKyJDIgorIyBlbmRpZgorRElSICpmZG9wZW5kaXIgKGludCk7CisjZW5kaWYKK11dLCBb aW50IHJlc3VsdCA9IDA7CisgICAgIGludCBmZCA9IG9wZW4gKCJjb25mdGVzdC5jIiwgT19S RE9OTFkpOworICAgICBpZiAoZmQgPCAwKSByZXN1bHQgfD0gMTsKKyAgICAgaWYgKGZkb3Bl bmRpciAoZmQpKSByZXN1bHQgfD0gMjsKKyAgICAgaWYgKGNsb3NlIChmZCkpIHJlc3VsdCB8 PSA0OworICAgICByZXR1cm4gcmVzdWx0O10pXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX2Zk b3BlbmRpcl93b3Jrcz15ZXNdLAorICAgICAgICAgW2dsX2N2X2Z1bmNfZmRvcGVuZGlyX3dv cmtzPW5vXSwKKyAgICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAg ICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgICotZ251 KikgZ2xfY3ZfZnVuY19mZG9wZW5kaXJfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAg ICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0Lgor ICAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX2Zkb3BlbmRpcl93b3Jrcz0iZ3Vlc3Np bmcgbm8iIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgXSldKQorICAgIGNhc2UgIiRn bF9jdl9mdW5jX2Zkb3BlbmRpcl93b3JrcyIgaW4KKyAgICAgICp5ZXMpIDs7CisgICAgICAq KQorICAgICAgICBSRVBMQUNFX0ZET1BFTkRJUj0xCisgICAgICAgIDs7CisgICAgZXNhYwor ICBmaQorXSkKCj09PSBhZGRlZCBmaWxlICdtNC9mc3RhdGF0Lm00JwotLS0gbTQvZnN0YXRh dC5tNAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBtNC9mc3RhdGF0Lm00CTIwMTMt MDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTAsMCArMSw2MCBAQAorIyBmc3RhdGF0Lm00IHNl cmlhbCAzCitkbmwgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0 byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2Rp ZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBX cml0dGVuIGJ5IEppbSBNZXllcmluZy4KKworIyBJZiB3ZSBoYXZlIHRoZSBmc3RhdGF0IGZ1 bmN0aW9uLCBhbmQgaXQgaGFzIHRoZSBidWcgKGluIEFJWCA3LjEpCisjIHRoYXQgaXQgZG9l cyBub3QgZmlsbCBpbiBzdF9zaXplIGNvcnJlY3RseSwgdXNlIHRoZSByZXBsYWNlbWVudCBm dW5jdGlvbi4KK0FDX0RFRlVOKFtnbF9GVU5DX0ZTVEFUQVRdLAorWworICBBQ19SRVFVSVJF KFtnbF9TWVNfU1RBVF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RF TV9FWFRFTlNJT05TXSkKKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NM QVNIRURfU1lNTElOS10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5s IGZvciBjcm9zcy1jb21waWxlcworICBBQ19DSEVDS19GVU5DU19PTkNFKFtmc3RhdGF0XSkK KworICBpZiB0ZXN0ICRhY19jdl9mdW5jX2ZzdGF0YXQgPSBubzsgdGhlbgorICAgIEhBVkVf RlNUQVRBVD0wCisgIGVsc2UKKyAgICBkbmwgVGVzdCBmb3IgYW4gQUlYIDcuMSBidWc7IHNl ZQorICAgIGRubCA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy10YXIv MjAxMS0wOS9tc2cwMDAxNS5odG1sPi4KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBm c3RhdGF0ICguLi4sIDApIHdvcmtzXSwKKyAgICAgIFtnbF9jdl9mdW5jX2ZzdGF0YXRfemVy b19mbGFnXSwKKyAgICAgIFtBQ19SVU5fSUZFTFNFKAorICAgICAgICAgW0FDX0xBTkdfU09V UkNFKAorICAgICAgICAgICAgW1sKKyAgICAgICAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+ CisgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICAgICAgICAgICAgICBp bnQKKyAgICAgICAgICAgICAgbWFpbiAodm9pZCkKKyAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIHN0cnVjdCBzdGF0IGE7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZzdGF0 YXQgKEFUX0ZEQ1dELCAiLiIsICZhLCAwKSAhPSAwOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICBdXSldLAorICAgICAgICAgW2dsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9 eWVzXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX2ZzdGF0YXRfemVyb19mbGFnPW5vXSwKKyAg ICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIGFpeCopIGdsX2N2X2Z1 bmNfZnN0YXRhdF96ZXJvX2ZsYWc9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAqKSAg ICBnbF9jdl9mdW5jX2ZzdGF0YXRfemVyb19mbGFnPSJndWVzc2luZyB5ZXMiOzsKKyAgICAg ICAgICBlc2FjCisgICAgICAgICBdKQorICAgICAgXSkKKworICAgIGNhc2UgJGdsX2N2X2Z1 bmNfZnN0YXRhdF96ZXJvX2ZsYWcrJGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3Ns YXNoZWRfc3ltbGluayBpbgorICAgICp5ZXMrKnllcykgOzsKKyAgICAqKSBSRVBMQUNFX0ZT VEFUQVQ9MQorICAgICAgIGNhc2UgJGdsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWcgaW4K KyAgICAgICAqeWVzKQorICAgICAgICAgQUNfREVGSU5FKFtIQVZFX1dPUktJTkdfRlNUQVRB VF9aRVJPX0ZMQUddLCBbMV0sCisgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiBmc3RhdGF0 ICguLi4sIDApIHdvcmtzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGl0IGRvZXMgbm90 IHdvcmsgaW4gQUlYIDcuMS5dKQorICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAg OzsKKyAgICBlc2FjCisgIGZpCitdKQoKPT09IG1vZGlmaWVkIGZpbGUgJ200L2dudWxpYi1j b21wLm00JwotLS0gbTQvZ251bGliLWNvbXAubTQJMjAxMy0wMS0wNCAwMjoxNzo0OSArMDAw MAorKysgbTQvZ251bGliLWNvbXAubTQJMjAxMy0wMS0yNCAwODowMjoxNiArMDAwMApAQCAt NDAsNiArNDAsNyBAQAogICBBQ19SRVFVSVJFKFtnbF9QUk9HX0FSX1JBTkxJQl0pCiAgICMg Q29kZSBmcm9tIG1vZHVsZSBhbGxvY2Etb3B0OgogICAjIENvZGUgZnJvbSBtb2R1bGUgYWxs b2NhdG9yOgorICAjIENvZGUgZnJvbSBtb2R1bGUgYXQtaW50ZXJuYWw6CiAgICMgQ29kZSBm cm9tIG1vZHVsZSBjLWN0eXBlOgogICAjIENvZGUgZnJvbSBtb2R1bGUgYy1zdHJjYXNlOgog ICAjIENvZGUgZnJvbSBtb2R1bGUgY2FyZWFkbGlua2F0OgpAQCAtNDksNiArNTAsNyBAQAog ICAjIENvZGUgZnJvbSBtb2R1bGUgY3J5cHRvL3NoYTE6CiAgICMgQ29kZSBmcm9tIG1vZHVs ZSBjcnlwdG8vc2hhMjU2OgogICAjIENvZGUgZnJvbSBtb2R1bGUgY3J5cHRvL3NoYTUxMjoK KyAgIyBDb2RlIGZyb20gbW9kdWxlIGRpcmVudDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGRv c25hbWU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBkdG9hc3RyOgogICAjIENvZGUgZnJvbSBt b2R1bGUgZHRvdGltZXNwZWM6CkBAIC02MSw4ICs2MywxMCBAQAogICAjIENvZGUgZnJvbSBt b2R1bGUgZXh0ZXJuLWlubGluZToKICAgIyBDb2RlIGZyb20gbW9kdWxlIGZhY2Nlc3NhdDoK ICAgIyBDb2RlIGZyb20gbW9kdWxlIGZjbnRsLWg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBm ZG9wZW5kaXI6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBmaWxlbW9kZToKICAgIyBDb2RlIGZy b20gbW9kdWxlIGZwZW5kaW5nOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZnN0YXRhdDoKICAg IyBDb2RlIGZyb20gbW9kdWxlIGdldGdyb3VwczoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGdl dGxvYWRhdmc6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRvcHQtZ251OgpAQCAtODIsMTEg Kzg2LDEzIEBACiAgICMgQ29kZSBmcm9tIG1vZHVsZSBta3RpbWU6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBtdWx0aWFyY2g6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBub2NyYXNoOgorICAj IENvZGUgZnJvbSBtb2R1bGUgb3BlbmF0LWg6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBwYXRo bWF4OgogICAjIENvZGUgZnJvbSBtb2R1bGUgcHNlbGVjdDoKICAgIyBDb2RlIGZyb20gbW9k dWxlIHB0aHJlYWRfc2lnbWFzazoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB1dGVudjoKICAg IyBDb2RlIGZyb20gbW9kdWxlIHJlYWRsaW5rOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcmVh ZGxpbmthdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHJvb3QtdWlkOgogICAjIENvZGUgZnJv bSBtb2R1bGUgc2lnMnN0cjoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ25hbC1oOgpAQCAt MTU5LDYgKzE2NSw3IEBACiAgIGdsX1NIQTEKICAgZ2xfU0hBMjU2CiAgIGdsX1NIQTUxMgor ICBnbF9ESVJFTlRfSAogICBBQ19SRVFVSVJFKFtnbF9DOTlfU1RSVE9MRF0pCiAgIGdsX0ZV TkNfRFVQMgogICBpZiB0ZXN0ICRIQVZFX0RVUDIgPSAwIHx8IHRlc3QgJFJFUExBQ0VfRFVQ MiA9IDE7IHRoZW4KQEAgLTE3OCwxMiArMTg1LDIzIEBACiAgIGdsX01PRFVMRV9JTkRJQ0FU T1IoW2ZhY2Nlc3NhdF0pCiAgIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtmYWNjZXNz YXRdKQogICBnbF9GQ05UTF9ICisgIGdsX0ZVTkNfRkRPUEVORElSCisgIGlmIHRlc3QgJEhB VkVfRkRPUEVORElSID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0ZET1BFTkRJUiA9IDE7IHRoZW4K KyAgICBBQ19MSUJPQkooW2Zkb3BlbmRpcl0pCisgIGZpCisgIGdsX0RJUkVOVF9NT0RVTEVf SU5ESUNBVE9SKFtmZG9wZW5kaXJdKQorICBnbF9NT0RVTEVfSU5ESUNBVE9SKFtmZG9wZW5k aXJdKQogICBnbF9GSUxFTU9ERQogICBnbF9GVU5DX0ZQRU5ESU5HCiAgIGlmIHRlc3QgJGFj X2N2X2Z1bmNfX19mcGVuZGluZyA9IG5vOyB0aGVuCiAgICAgQUNfTElCT0JKKFtmcGVuZGlu Z10pCiAgICAgZ2xfUFJFUkVRX0ZQRU5ESU5HCiAgIGZpCisgIGdsX0ZVTkNfRlNUQVRBVAor ICBpZiB0ZXN0ICRIQVZFX0ZTVEFUQVQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfRlNUQVRBVCA9 IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2ZzdGF0YXRdKQorICBmaQorICBnbF9TWVNfU1RB VF9NT0RVTEVfSU5ESUNBVE9SKFtmc3RhdGF0XSkKICAgZ2xfR0VUTE9BREFWRwogICBpZiB0 ZXN0ICRIQVZFX0dFVExPQURBVkcgPSAwOyB0aGVuCiAgICAgQUNfTElCT0JKKFtnZXRsb2Fk YXZnXSkKQEAgLTI1Myw2ICsyNzEsMTEgQEAKICAgICBnbF9QUkVSRVFfUkVBRExJTksKICAg ZmkKICAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW3JlYWRsaW5rXSkKKyAgZ2xfRlVO Q19SRUFETElOS0FUCisgIGlmIHRlc3QgJEhBVkVfUkVBRExJTktBVCA9IDA7IHRoZW4KKyAg ICBBQ19MSUJPQkooW3JlYWRsaW5rYXRdKQorICBmaQorICBnbF9VTklTVERfTU9EVUxFX0lO RElDQVRPUihbcmVhZGxpbmthdF0pCiAgIGdsX0ZVTkNfU0lHMlNUUgogICBpZiB0ZXN0ICRh Y19jdl9mdW5jX3NpZzJzdHIgPSBubzsgdGhlbgogICAgIEFDX0xJQk9CSihbc2lnMnN0cl0p CkBAIC0zMTEsMTEgKzMzNCwxMyBAQAogICBmaQogICBnbF9TVERMSUJfTU9EVUxFX0lORElD QVRPUihbdW5zZXRlbnZdKQogICBnbF9VVElNRU5TCisgIGdsX2dudWxpYl9lbmFibGVkXzI2 MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiPWZhbHNlCiAgIGdsX2dudWxpYl9lbmFi bGVkX2Rvc25hbWU9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfZXVpZGFjY2Vzcz1mYWxz ZQogICBnbF9nbnVsaWJfZW5hYmxlZF9nZXRncm91cHM9ZmFsc2UKICAgZ2xfZ251bGliX2Vu YWJsZWRfYmU0NTNjZWM1ZWVjZjU3MzFhMjc0ZjJkZTdmMmRiMzY9ZmFsc2UKICAgZ2xfZ251 bGliX2VuYWJsZWRfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0MWU4ZTVlZDE9ZmFsc2UKKyAg Z2xfZ251bGliX2VuYWJsZWRfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjc9ZmFs c2UKICAgZ2xfZ251bGliX2VuYWJsZWRfcGF0aG1heD1mYWxzZQogICBnbF9nbnVsaWJfZW5h YmxlZF82MDk5ZTk3MzdmNzU3ZGIzNmM0N2ZhOWQ5ZjAyZTg4Yz1mYWxzZQogICBnbF9nbnVs aWJfZW5hYmxlZF9zdGF0PWZhbHNlCkBAIC0zMjMsNiArMzQ4LDEzIEBACiAgIGdsX2dudWxp Yl9lbmFibGVkX3N0cnRvdWxsPWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeT1m YWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0 ZWFlYz1mYWxzZQorICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzll ODdkMWZiMzIxYzMwMGIgKCkKKyAgeworICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVkXzI2 MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiOyB0aGVuCisgICAgICBBQ19MSUJPQkoo W29wZW5hdC1wcm9jXSkKKyAgICAgIGdsX2dudWxpYl9lbmFibGVkXzI2MDk0MWMwZTVkYzY3 ZWM5ZTg3ZDFmYjMyMWMzMDBiPXRydWUKKyAgICBmaQorICB9CiAgIGZ1bmNfZ2xfZ251bGli X200Y29kZV9kb3NuYW1lICgpCiAgIHsKICAgICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF9k b3NuYW1lOyB0aGVuCkBAIC0zODUsNiArNDE3LDEyIEBACiAgICAgICBmaQogICAgIGZpCiAg IH0KKyAgZnVuY19nbF9nbnVsaWJfbTRjb2RlXzAzZTBhYWFkNGNiODljYTc1NzY1M2JkMzY3 YTZjY2I3ICgpCisgIHsKKyAgICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF8wM2UwYWFhZDRj Yjg5Y2E3NTc2NTNiZDM2N2E2Y2NiNzsgdGhlbgorICAgICAgZ2xfZ251bGliX2VuYWJsZWRf MDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjc9dHJ1ZQorICAgIGZpCisgIH0KICAg ZnVuY19nbF9nbnVsaWJfbTRjb2RlX3BhdGhtYXggKCkKICAgewogICAgIGlmICEgJGdsX2du dWxpYl9lbmFibGVkX3BhdGhtYXg7IHRoZW4KQEAgLTQ1NiwxMSArNDk0LDI5IEBACiAgICAg ZmkKICAgfQogICBpZiB0ZXN0ICRIQVZFX0ZBQ0NFU1NBVCA9IDA7IHRoZW4KKyAgICBmdW5j X2dsX2dudWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIKKyAg ZmkKKyAgaWYgdGVzdCAkSEFWRV9GQUNDRVNTQVQgPSAwOyB0aGVuCiAgICAgZnVuY19nbF9n bnVsaWJfbTRjb2RlX2Rvc25hbWUKICAgZmkKICAgaWYgdGVzdCAkSEFWRV9GQUNDRVNTQVQg PSAwOyB0aGVuCiAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2V1aWRhY2Nlc3MKICAgZmkK KyAgaWYgdGVzdCAkSEFWRV9GQUNDRVNTQVQgPSAwOyB0aGVuCisgICAgZnVuY19nbF9nbnVs aWJfbTRjb2RlXzAzZTBhYWFkNGNiODljYTc1NzY1M2JkMzY3YTZjY2I3CisgIGZpCisgIGlm IHRlc3QgJEhBVkVfRkRPUEVORElSID0gMDsgdGhlbgorICAgIGZ1bmNfZ2xfZ251bGliX200 Y29kZV8yNjA5NDFjMGU1ZGM2N2VjOWU4N2QxZmIzMjFjMzAwYgorICBmaQorICBpZiB0ZXN0 ICRIQVZFX0ZTVEFUQVQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfRlNUQVRBVCA9IDE7IHRoZW4K KyAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIx YzMwMGIKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9GU1RBVEFUID0gMCB8fCB0ZXN0ICRSRVBM QUNFX0ZTVEFUQVQgPSAxOyB0aGVuCisgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2Rvc25h bWUKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9GU1RBVEFUID0gMCB8fCB0ZXN0ICRSRVBMQUNF X0ZTVEFUQVQgPSAxOyB0aGVuCisgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlXzAzZTBhYWFk NGNiODljYTc1NzY1M2JkMzY3YTZjY2I3CisgIGZpCiAgIGlmIHRlc3QgJFJFUExBQ0VfR0VU T1BUID0gMTsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9iZTQ1M2NlYzVlZWNm NTczMWEyNzRmMmRlN2YyZGIzNgogICBmaQpAQCAtNDczLDYgKzUyOSwxNSBAQAogICBpZiB0 ZXN0ICRIQVZFX1JFQURMSU5LID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1JFQURMSU5LID0gMTsg dGhlbgogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9zdGF0CiAgIGZpCisgIGlmIHRlc3Qg JEhBVkVfUkVBRExJTktBVCA9IDA7IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVf MjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIKKyAgZmkKKyAgaWYgdGVzdCAkSEFW RV9SRUFETElOS0FUID0gMDsgdGhlbgorICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9kb3Nu YW1lCisgIGZpCisgIGlmIHRlc3QgJEhBVkVfUkVBRExJTktBVCA9IDA7IHRoZW4KKyAgICBm dW5jX2dsX2dudWxpYl9tNGNvZGVfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjcK KyAgZmkKICAgaWYgeyB0ZXN0ICRIQVZFX1NUUlRPSU1BWCA9IDAgfHwgdGVzdCAkUkVQTEFD RV9TVFJUT0lNQVggPSAxOyB9ICYmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9 IHllczsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9zdHJ0b2xsCiAgIGZpCkBA IC00ODYsMTEgKzU1MSwxMyBAQAogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV92ZXJpZnkK ICAgZmkKICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0dOVUxJQl9FTkFCTEVEX10pCisgIEFN X0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF8yNjA5NDFjMGU1ZGM2N2VjOWU4N2Qx ZmIzMjFjMzAwYl0sIFskZ2xfZ251bGliX2VuYWJsZWRfMjYwOTQxYzBlNWRjNjdlYzllODdk MWZiMzIxYzMwMGJdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfZG9z bmFtZV0sIFskZ2xfZ251bGliX2VuYWJsZWRfZG9zbmFtZV0pCiAgIEFNX0NPTkRJVElPTkFM KFtnbF9HTlVMSUJfRU5BQkxFRF9ldWlkYWNjZXNzXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9l dWlkYWNjZXNzXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX2dldGdy b3Vwc10sIFskZ2xfZ251bGliX2VuYWJsZWRfZ2V0Z3JvdXBzXSkKICAgQU1fQ09ORElUSU9O QUwoW2dsX0dOVUxJQl9FTkFCTEVEX2JlNDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2 XSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9iZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRlN2YyZGIz Nl0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9hOTc4Njg1MGU5OTlh ZTY1YTgzNmE2MDQxZThlNWVkMV0sIFskZ2xfZ251bGliX2VuYWJsZWRfYTk3ODY4NTBlOTk5 YWU2NWE4MzZhNjA0MWU4ZTVlZDFdKQorICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VO QUJMRURfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjddLCBbJGdsX2dudWxpYl9l bmFibGVkXzAzZTBhYWFkNGNiODljYTc1NzY1M2JkMzY3YTZjY2I3XSkKICAgQU1fQ09ORElU SU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX3BhdGhtYXhdLCBbJGdsX2dudWxpYl9lbmFibGVk X3BhdGhtYXhdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfNjA5OWU5 NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGNdLCBbJGdsX2dudWxpYl9lbmFibGVkXzYwOTll OTczN2Y3NTdkYjM2YzQ3ZmE5ZDlmMDJlODhjXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dO VUxJQl9FTkFCTEVEX3N0YXRdLCBbJGdsX2dudWxpYl9lbmFibGVkX3N0YXRdKQpAQCAtNjU2 LDYgKzcyMyw3IEBACiAgIGxpYi9jYXJlYWRsaW5rYXQuaAogICBsaWIvY2xvc2Utc3RyZWFt LmMKICAgbGliL2Nsb3NlLXN0cmVhbS5oCisgIGxpYi9kaXJlbnQuaW4uaAogICBsaWIvZG9z bmFtZS5oCiAgIGxpYi9kdG9hc3RyLmMKICAgbGliL2R0b3RpbWVzcGVjLmMKQEAgLTY2NSwx MCArNzMzLDEyIEBACiAgIGxpYi9leGVjaW5mby5pbi5oCiAgIGxpYi9mYWNjZXNzYXQuYwog ICBsaWIvZmNudGwuaW4uaAorICBsaWIvZmRvcGVuZGlyLmMKICAgbGliL2ZpbGVtb2RlLmMK ICAgbGliL2ZpbGVtb2RlLmgKICAgbGliL2ZwZW5kaW5nLmMKICAgbGliL2ZwZW5kaW5nLmgK KyAgbGliL2ZzdGF0YXQuYwogICBsaWIvZnRvYXN0ci5jCiAgIGxpYi9mdG9hc3RyLmgKICAg bGliL2dldGdyb3Vwcy5jCkBAIC02ODksMTEgKzc1OSwxNSBAQAogICBsaWIvbWQ1LmgKICAg bGliL21rdGltZS1pbnRlcm5hbC5oCiAgIGxpYi9ta3RpbWUuYworICBsaWIvb3BlbmF0LXBy aXYuaAorICBsaWIvb3BlbmF0LXByb2MuYworICBsaWIvb3BlbmF0LmgKICAgbGliL3BhdGht YXguaAogICBsaWIvcHNlbGVjdC5jCiAgIGxpYi9wdGhyZWFkX3NpZ21hc2suYwogICBsaWIv cHV0ZW52LmMKICAgbGliL3JlYWRsaW5rLmMKKyAgbGliL3JlYWRsaW5rYXQuYwogICBsaWIv cm9vdC11aWQuaAogICBsaWIvc2hhMS5jCiAgIGxpYi9zaGExLmgKQEAgLTc0Niw2ICs4MjAs NyBAQAogICBtNC9jLXN0cnRvZC5tNAogICBtNC9jbG9ja190aW1lLm00CiAgIG00L2Nsb3Nl LXN0cmVhbS5tNAorICBtNC9kaXJlbnRfaC5tNAogICBtNC9kdXAyLm00CiAgIG00L2Vudmly b24ubTQKICAgbTQvZXVpZGFjY2Vzcy5tNApAQCAtNzU1LDggKzgzMCwxMCBAQAogICBtNC9m YWNjZXNzYXQubTQKICAgbTQvZmNudGwtby5tNAogICBtNC9mY250bF9oLm00CisgIG00L2Zk b3BlbmRpci5tNAogICBtNC9maWxlbW9kZS5tNAogICBtNC9mcGVuZGluZy5tNAorICBtNC9m c3RhdGF0Lm00CiAgIG00L2dldGdyb3Vwcy5tNAogICBtNC9nZXRsb2FkYXZnLm00CiAgIG00 L2dldG9wdC5tNApAQCAtNzgwLDYgKzg1Nyw3IEBACiAgIG00L3B0aHJlYWRfc2lnbWFzay5t NAogICBtNC9wdXRlbnYubTQKICAgbTQvcmVhZGxpbmsubTQKKyAgbTQvcmVhZGxpbmthdC5t NAogICBtNC9zZXRlbnYubTQKICAgbTQvc2hhMS5tNAogICBtNC9zaGEyNTYubTQKCj09PSBh ZGRlZCBmaWxlICdtNC9yZWFkbGlua2F0Lm00JwotLS0gbTQvcmVhZGxpbmthdC5tNAkxOTcw LTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBtNC9yZWFkbGlua2F0Lm00CTIwMTMtMDEtMjQg MDg6MDI6MTYgKzAwMDAKQEAgLTAsMCArMSwxOSBAQAorIyBzZXJpYWwgMworIyBTZWUgaWYg d2UgbmVlZCB0byBwcm92aWRlIHJlYWRsaW5rYXQgcmVwbGFjZW1lbnQuCisKK2RubCBDb3B5 cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2Ru bCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRp c3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxv bmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFdyaXR0ZW4gYnkgRXJpYyBC bGFrZS4KKworQUNfREVGVU4oW2dsX0ZVTkNfUkVBRExJTktBVF0sCitbCisgIEFDX1JFUVVJ UkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RF TV9FWFRFTlNJT05TXSkKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcmVhZGxpbmthdF0pCisg IGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVhZGxpbmthdCA9IG5vOyB0aGVuCisgICAgSEFWRV9S RUFETElOS0FUPTAKKyAgZmkKK10pCgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvQ2hhbmdlTG9n JwotLS0gbnQvQ2hhbmdlTG9nCTIwMTMtMDEtMTEgMDk6MzM6NTQgKzAwMDAKKysrIG50L0No YW5nZUxvZwkyMDEzLTAxLTI4IDA4OjE1OjEyICswMDAwCkBAIC0xLDMgKzEsOSBAQAorMjAx My0wMS0yOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlVc2UgZmRv cGVuZGlyLCBmc3RhdGF0IGFuZCByZWFkbGlua2F0LCBmb3IgZWZmaWNpZW5jeSAoQnVnIzEz NTM5KS4KKwkqIGluYy9zeXMvc3RhdC5oIChmc3RhdGF0KToKKwkqIGluYy91bmlzdGQuaCAo cmVhZGxpbmthdCk6IE5ldyBkZWNscy4KKwogMjAxMy0wMS0xMSAgRWxpIFphcmV0c2tpaSAg PGVsaXpAZ251Lm9yZz4KIAogCSogaW5jL3VuaXN0ZC5oIChPX0lHTk9SRV9DVFRZKTogRGVm aW5lLCBhcyBpdCBpcyB1bmNvbmRpdGlvbmFsbHkKCj09PSBtb2RpZmllZCBmaWxlICdudC9p bmMvc3lzL3N0YXQuaCcKLS0tIG50L2luYy9zeXMvc3RhdC5oCTIwMTMtMDEtMDIgMTY6MTM6 MDQgKzAwMDAKKysrIG50L2luYy9zeXMvc3RhdC5oCTIwMTMtMDEtMjggMDg6MTU6MTIgKzAw MDAKQEAgLTExMCw2ICsxMTAsNyBAQAogX0NSVElNUCBpbnQgX19jZGVjbCBfX01JTkdXX05P VEhST1cJY2htb2QgKGNvbnN0IGNoYXIqLCBpbnQpOwogX0NSVElNUCBpbnQgX19jZGVjbCBf X01JTkdXX05PVEhST1cJc3RhdCAoY29uc3QgY2hhciosIHN0cnVjdCBzdGF0Kik7CiBfQ1JU SU1QIGludCBfX2NkZWNsIF9fTUlOR1dfTk9USFJPVwlsc3RhdCAoY29uc3QgY2hhciosIHN0 cnVjdCBzdGF0Kik7CitfQ1JUSU1QIGludCBfX2NkZWNsIF9fTUlOR1dfTk9USFJPVwlmc3Rh dGF0IChpbnQsIGNoYXIgY29uc3QgKiwKKwkJCQkJCSBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOwog CiAjZW5kaWYJLyogSU5DX1NZU19TVEFUX0hfICovCi0KCj09PSBtb2RpZmllZCBmaWxlICdu dC9pbmMvdW5pc3RkLmgnCi0tLSBudC9pbmMvdW5pc3RkLmgJMjAxMy0wMS0xMSAwOTozMzo1 NCArMDAwMAorKysgbnQvaW5jL3VuaXN0ZC5oCTIwMTMtMDEtMjggMDg6MTU6MTIgKzAwMDAK QEAgLTEyLDYgKzEyLDcgQEAKICAgIGFuZCB3aG9zZSBwcm90b3R5cGVzIGFyZSB1c3VhbGx5 IGZvdW5kIGluIHVuaXN0ZC5oIG9uIFBPU0lYCiAgICBwbGF0Zm9ybXMuICAqLwogZXh0ZXJu IHNzaXplX3QgcmVhZGxpbmsgKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOworZXh0 ZXJuIHNzaXplX3QgcmVhZGxpbmthdCAoaW50LCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6 ZV90KTsKIGV4dGVybiBpbnQgc3ltbGluayAoY2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICop OwogZXh0ZXJuIGludCBzZXRwZ2lkIChwaWRfdCwgcGlkX3QpOwogZXh0ZXJuIHBpZF90IGdl dHBncnAgKHZvaWQpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBz cmMvQ2hhbmdlTG9nCTIwMTMtMDEtMjggMDU6NDc6NTEgKzAwMDAKKysrIHNyYy9DaGFuZ2VM b2cJMjAxMy0wMS0yOCAwODoxNzowMCArMDAwMApAQCAtMSwzICsxLDM0IEBACisyMDEzLTAx LTI4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBmZG9wZW5k aXIsIGZzdGF0YXQgYW5kIHJlYWRsaW5rYXQsIGZvciBlZmZpY2llbmN5IChCdWcjMTM1Mzkp LgorCSogY29uZl9wb3N0LmggKEdOVUxJQl9TVVBQT1JUX09OTFlfQVRfRkRDV0QpOiBSZW1v dmUuCisJKiBkaXJlZC5jOiBJbmNsdWRlIDxmY250bC5oPi4KKwkob3Blbl9kaXJlY3Rvcnkp OiBOZXcgZnVuY3Rpb24sIHdoaWNoIHVzZXMgb3BlbiBhbmQgZmRvcGVuZGlyCisJcmF0aGVy IHRoYW4gb3BlbmRpci4gIERPU19OVCBwbGF0Zm9ybXMgc3RpbGwgdXNlIG9wZW5kaXIsIHRo b3VnaC4KKwkoZGlyZWN0b3J5X2ZpbGVzX2ludGVybmFsLCBmaWxlX25hbWVfY29tcGxldGlv bik6IFVzZSBpdC4KKwkoZmlsZV9hdHRyaWJ1dGVzKTogTmV3IGZ1bmN0aW9uLCB3aXRoIG1v c3Qgb2YgdGhlIG9sZCBGZmlsZV9hdHRyaWJ1dGVzLgorCShkaXJlY3RvcnlfZmlsZXNfaW50 ZXJuYWwsIEZmaWxlX2F0dHJpYnV0ZXMpOiBVc2UgaXQuCisJKGZpbGVfYXR0cmlidXRlcywg ZmlsZV9uYW1lX2NvbXBsZXRpb25fc3RhdCk6IEZpcnN0IGFyZyBpcyBub3cgZmQsCisJbm90 IGRpciBuYW1lLiAgQWxsIHVzZXMgY2hhbmdlZC4gIFVzZSBmc3RhdGF0IHJhdGhlciB0aGFu IGxzdGF0ICsKKwlzdGF0LgorCShmaWxlX2F0dHJpYnV0ZXMpOiBVc2UgZW1hY3NfcmVhZGxp bmthdCByYXRoZXIgdGhhbiBGZmlsZV9zeW1saW5rX3AuCisJKiBmaWxlaW8uYzogSW5jbHVk ZSA8YWxsb2NhdG9yLmg+LCA8Y2FyZWFkbGlua2F0Lmg+LgorCShlbWFjc19yZWFkbGlua2F0 KTogTmV3IGZ1bmN0aW9uLCB3aXRoIG11Y2ggb2YgdGhlIG9sZAorCUZmaWxlX3N5bWxpbmtf cCwgYnV0IHdpdGggYW4gZmQgYXJndW1lbnQgZm9yIHNwZWVkLgorCUl0IHVzZXMgcmVhZGxp bmthdCByYXRoZXIgdGhhbiBjYXJlYWRsaW5rYXRjd2QsIHNvIHRoYXQgaXQKKwluZWVkIG5v dCBhc3N1bWUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorCShGZmlsZV9zeW1saW5rX3ApOiBV c2UgaXQuCisJKiBmaWxlbG9jay5jIChjdXJyZW50X2xvY2tfb3duZXIpOiBVc2UgZW1hY3Nf cmVhZGxpbmthdAorCXJhdGhlciB0aGFuIGVtYWNzX3JlYWRsaW5rLgorCSogbGlzcC5oIChl bWFjc19yZWFkbGlua2F0KTogTmV3IGRlY2wuCisJKFJFQURMSU5LX0JVRlNJWkUsIGVtYWNz X3JlYWRsaW5rKTogUmVtb3ZlLgorCSogc3lzZGVwLmM6IERvIG5vdCBpbmNsdWRlIDxhbGxv Y2F0b3IuaD4sIDxjYXJlYWRsaW5rYXQuaD4uCisJKGVtYWNzX25vcmVhbGxvY19hbGxvY2F0 b3IsIGVtYWNzX3JlYWRsaW5rKTogUmVtb3ZlLgorCVRoaXMgc3R1ZmYgaXMgbW92ZWQgdG8g ZmlsZWlvLmMuCisJKiB3MzIuYyAoZnN0YXRhdCwgcmVhZGxpbmthdCk6IE5ldyBmdW5jdGlv bnMuCisJKGNhcmVhZGxpbmthdCk6IERvbid0IGNoZWNrIHRoYXQgZmQgPT0gQVRfRkRDV0Qu CisJKGNhcmVhZGxpbmthdGN3ZCk6IFJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKwogMjAx My0wMS0yOCAgRG1pdHJ5IEFudGlwb3YgIDxkbWFudGlwb3ZAeWFuZGV4LnJ1PgogCiAJUmVt b3ZlIG9ic29sZXRlIHJlZGlzcGxheSBjb2RlLiAgU2VlIHRoZSBkaXNjdXNzaW9uIGF0Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2NvbmZfcG9zdC5oJwotLS0gc3JjL2NvbmZfcG9zdC5o CTIwMTMtMDEtMDIgMTY6MTM6MDQgKzAwMDAKKysrIHNyYy9jb25mX3Bvc3QuaAkyMDEzLTAx LTI0IDA2OjUxOjI1ICswMDAwCkBAIC0xODIsMTAgKzE4Miw2IEBACiAjZW5kaWYKICNlbmRp ZgogCi0vKiBUZWxsIGdudWxpYiB0byBvbWl0IHN1cHBvcnQgZm9yIG9wZW5hdC1yZWxhdGVk IGZ1bmN0aW9ucyBoYXZpbmcgYQotICAgZmlyc3QgYXJndW1lbnQgb3RoZXIgdGhhbiBBVF9G RENXRC4gICovCi0jZGVmaW5lIEdOVUxJQl9TVVBQT1JUX09OTFlfQVRfRkRDV0QKLQogI2lu Y2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL2RpcmVkLmMnCi0tLSBzcmMvZGlyZWQuYwkyMDEzLTAxLTE3IDA2OjI5OjQw ICswMDAwCisrKyBzcmMvZGlyZWQuYwkyMDEzLTAxLTI4IDA4OjE1OjEyICswMDAwCkBAIC0z MCw2ICszMCw3IEBACiAjaW5jbHVkZSA8Z3JwLmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgor I2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlIDxk aXJlbnQuaD4KQEAgLTU0LDYgKzU1LDcgQEAKIHN0YXRpYyBMaXNwX09iamVjdCBRZmlsZV9h dHRyaWJ1dGVzX2xlc3NwOwogCiBzdGF0aWMgcHRyZGlmZl90IHNjbXAgKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCBwdHJkaWZmX3QpOworc3RhdGljIExpc3BfT2JqZWN0IGZpbGVf YXR0cmlidXRlcyAoaW50LCBjaGFyIGNvbnN0ICosIExpc3BfT2JqZWN0KTsKIAwKIC8qIFJl dHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIERQJ3MgbmFtZS4gICovCiBzdGF0aWMgcHRy ZGlmZl90CkBAIC02Niw2ICs2OCw0MyBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBESVIgKgor b3Blbl9kaXJlY3RvcnkgKGNoYXIgY29uc3QgKm5hbWUsIGludCAqZmRwKQoreworICBESVIg KmQ7CisgIGludCBmZCwgb3BlbmRpcl9lcnJubzsKKworICBibG9ja19pbnB1dCAoKTsKKwor I2lmZGVmIERPU19OVAorICAvKiBEaXJlY3RvcmllcyBjYW5ub3QgYmUgb3BlbmVkLCBzbyBl bXVsYXRlIGFuIG9wZW4gZGlyZWN0b3J5IHdpdGgKKyAgICAgaXRzIG5hbWUsIGNhc3QgdG8g YSBwb2ludGVyLiAgVGhpcyBpcyBnb29kIGVub3VnaCBmb3IgRW1hY3MuICAqLworICBmZCA9 IChpbnQpIG5hbWU7CisgIGQgPSBvcGVuZGlyIChuYW1lKTsKKyAgb3BlbmRpcl9lcnJubyA9 IGVycm5vOworI2Vsc2UKKyAgZmQgPSBlbWFjc19vcGVuIChuYW1lLCBPX1JET05MWSB8IE9f RElSRUNUT1JZLCAwKTsKKyAgaWYgKGZkIDwgMCkKKyAgICB7CisgICAgICBvcGVuZGlyX2Vy cm5vID0gZXJybm87CisgICAgICBkID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg ICBkID0gZmRvcGVuZGlyIChmZCk7CisgICAgICBvcGVuZGlyX2Vycm5vID0gZXJybm87Cisg ICAgICBpZiAoISBkKQorCWNsb3NlIChmZCk7CisgICAgfQorI2VuZGlmCisKKyAgdW5ibG9j a19pbnB1dCAoKTsKKworICAqZmRwID0gZmQ7CisgIGVycm5vID0gb3BlbmRpcl9lcnJubzsK KyAgcmV0dXJuIGQ7Cit9CisKICNpZmRlZiBXSU5ET1dTTlQKIExpc3BfT2JqZWN0CiBkaXJl Y3RvcnlfZmlsZXNfaW50ZXJuYWxfdzMyX3Vud2luZCAoTGlzcF9PYmplY3QgYXJnKQpAQCAt OTYsNiArMTM1LDcgQEAKIAkJCSAgTGlzcF9PYmplY3QgaWRfZm9ybWF0KQogewogICBESVIg KmQ7CisgIGludCBmZDsKICAgcHRyZGlmZl90IGRpcmVjdG9yeV9uYnl0ZXM7CiAgIExpc3Bf T2JqZWN0IGxpc3QsIGRpcmZpbGVuYW1lLCBlbmNvZGVkX2RpcmVjdG9yeTsKICAgc3RydWN0 IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwID0gTlVMTDsKQEAgLTE0Miw5ICsxODIsNyBAQAog ICAvKiBOb3cgKmJ1ZnAgaXMgdGhlIGNvbXBpbGVkIGZvcm0gb2YgTUFUQ0g7IGRvbid0IGNh bGwgYW55dGhpbmcKICAgICAgd2hpY2ggbWlnaHQgY29tcGlsZSBhIG5ldyByZWdleHAgdW50 aWwgd2UncmUgZG9uZSB3aXRoIHRoZSBsb29wISAgKi8KIAotICBibG9ja19pbnB1dCAoKTsK LSAgZCA9IG9wZW5kaXIgKFNTREFUQSAoZGlyZmlsZW5hbWUpKTsKLSAgdW5ibG9ja19pbnB1 dCAoKTsKKyAgZCA9IG9wZW5fZGlyZWN0b3J5IChTU0RBVEEgKGRpcmZpbGVuYW1lKSwgJmZk KTsKICAgaWYgKGQgPT0gTlVMTCkKICAgICByZXBvcnRfZmlsZV9lcnJvciAoIk9wZW5pbmcg ZGlyZWN0b3J5IiwgRmNvbnMgKGRpcmVjdG9yeSwgUW5pbCkpOwogCkBAIC0yNTksMjAgKzI5 Nyw5IEBACiAKIAkgIGlmIChhdHRycykKIAkgICAgewotCSAgICAgIC8qIENvbnN0cnVjdCBh biBleHBhbmRlZCBmaWxlbmFtZSBmb3IgdGhlIGRpcmVjdG9yeSBlbnRyeS4KLQkJIFVzZSB0 aGUgZGVjb2RlZCBuYW1lcyBmb3IgaW5wdXQgdG8gRmZpbGVfYXR0cmlidXRlcy4gICovCi0J ICAgICAgTGlzcF9PYmplY3QgZGVjb2RlZF9mdWxsbmFtZSwgZmlsZWF0dHJzOwotCSAgICAg IHN0cnVjdCBnY3BybyBnY3BybzEsIGdjcHJvMjsKLQotCSAgICAgIGRlY29kZWRfZnVsbG5h bWUgPSBmaWxlYXR0cnMgPSBRbmlsOwotCSAgICAgIEdDUFJPMiAoZGVjb2RlZF9mdWxsbmFt ZSwgZmlsZWF0dHJzKTsKLQotCSAgICAgIC8qIEJvdGggRmV4cGFuZF9maWxlX25hbWUgYW5k IEZmaWxlX2F0dHJpYnV0ZXMgY2FuIEdDLiAgKi8KLQkgICAgICBkZWNvZGVkX2Z1bGxuYW1l ID0gRmV4cGFuZF9maWxlX25hbWUgKG5hbWUsIGRpcmVjdG9yeSk7Ci0JICAgICAgZmlsZWF0 dHJzID0gRmZpbGVfYXR0cmlidXRlcyAoZGVjb2RlZF9mdWxsbmFtZSwgaWRfZm9ybWF0KTsK LQorCSAgICAgIExpc3BfT2JqZWN0IGZpbGVhdHRycworCQk9IGZpbGVfYXR0cmlidXRlcyAo ZmQsIGRwLT5kX25hbWUsIGlkX2Zvcm1hdCk7CiAJICAgICAgbGlzdCA9IEZjb25zIChGY29u cyAoZmluYWxuYW1lLCBmaWxlYXR0cnMpLCBsaXN0KTsKLQkgICAgICBVTkdDUFJPOwogCSAg ICB9CiAJICBlbHNlCiAJICAgIGxpc3QgPSBGY29ucyAoZmluYWxuYW1lLCBsaXN0KTsKQEAg LTQxMyw4ICs0NDAsNyBAQAogICByZXR1cm4gZmlsZV9uYW1lX2NvbXBsZXRpb24gKGZpbGUs IGRpcmVjdG9yeSwgMSwgUW5pbCk7CiB9CiAKLXN0YXRpYyBpbnQgZmlsZV9uYW1lX2NvbXBs ZXRpb25fc3RhdCAoTGlzcF9PYmplY3QgZGlybmFtZSwgc3RydWN0IGRpcmVudCAqZHAsCi0J CQkJICAgICAgc3RydWN0IHN0YXQgKnN0X2FkZHIpOworc3RhdGljIGludCBmaWxlX25hbWVf Y29tcGxldGlvbl9zdGF0IChpbnQsIHN0cnVjdCBkaXJlbnQgKiwgc3RydWN0IHN0YXQgKik7 CiBzdGF0aWMgTGlzcF9PYmplY3QgUWRlZmF1bHRfZGlyZWN0b3J5OwogCiBzdGF0aWMgTGlz cF9PYmplY3QKQEAgLTQyMiw2ICs0NDgsNyBAQAogCQkgICAgICBMaXNwX09iamVjdCBwcmVk aWNhdGUpCiB7CiAgIERJUiAqZDsKKyAgaW50IGZkOwogICBwdHJkaWZmX3QgYmVzdG1hdGNo c2l6ZSA9IDA7CiAgIGludCBtYXRjaGNvdW50ID0gMDsKICAgLyogSWYgQUxMX0ZMQUcgaXMg MSwgQkVTVE1BVENIIGlzIHRoZSBsaXN0IG9mIGFsbCBtYXRjaGVzLCBkZWNvZGVkLgpAQCAt NDU4LDkgKzQ4NSw3IEBACiAKICAgZW5jb2RlZF9kaXIgPSBFTkNPREVfRklMRSAoZGlybmFt ZSk7CiAKLSAgYmxvY2tfaW5wdXQgKCk7Ci0gIGQgPSBvcGVuZGlyIChTU0RBVEEgKEZkaXJl Y3RvcnlfZmlsZV9uYW1lIChlbmNvZGVkX2RpcikpKTsKLSAgdW5ibG9ja19pbnB1dCAoKTsK KyAgZCA9IG9wZW5fZGlyZWN0b3J5IChTU0RBVEEgKEZkaXJlY3RvcnlfZmlsZV9uYW1lIChl bmNvZGVkX2RpcikpLCAmZmQpOwogICBpZiAoIWQpCiAgICAgcmVwb3J0X2ZpbGVfZXJyb3Ig KCJPcGVuaW5nIGRpcmVjdG9yeSIsIEZjb25zIChkaXJuYW1lLCBRbmlsKSk7CiAKQEAgLTQ5 NSw3ICs1MjAsNyBAQAogCQkJU0NIQVJTIChlbmNvZGVkX2ZpbGUpKSkKIAljb250aW51ZTsK IAotICAgICAgaWYgKGZpbGVfbmFtZV9jb21wbGV0aW9uX3N0YXQgKGVuY29kZWRfZGlyLCBk cCwgJnN0KSA8IDApCisgICAgICBpZiAoZmlsZV9uYW1lX2NvbXBsZXRpb25fc3RhdCAoZmQs IGRwLCAmc3QpIDwgMCkKIAljb250aW51ZTsKIAogICAgICAgZGlyZWN0b3J5cCA9IFNfSVNE SVIgKHN0LnN0X21vZGUpICE9IDA7CkBAIC03NzIsMTQgKzc5Nyw5IEBACiB9CiAKIHN0YXRp YyBpbnQKLWZpbGVfbmFtZV9jb21wbGV0aW9uX3N0YXQgKExpc3BfT2JqZWN0IGRpcm5hbWUs IHN0cnVjdCBkaXJlbnQgKmRwLAotCQkJICAgc3RydWN0IHN0YXQgKnN0X2FkZHIpCitmaWxl X25hbWVfY29tcGxldGlvbl9zdGF0IChpbnQgZmQsIHN0cnVjdCBkaXJlbnQgKmRwLCBzdHJ1 Y3Qgc3RhdCAqc3RfYWRkcikKIHsKLSAgcHRyZGlmZl90IGxlbiA9IGRpcmVudF9uYW1lbGVu IChkcCk7Ci0gIHB0cmRpZmZfdCBwb3MgPSBTQ0hBUlMgKGRpcm5hbWUpOwogICBpbnQgdmFs dWU7Ci0gIFVTRV9TQUZFX0FMTE9DQTsKLSAgY2hhciAqZnVsbG5hbWUgPSBTQUZFX0FMTE9D QSAobGVuICsgcG9zICsgMik7CiAKICNpZmRlZiBNU0RPUwogICAvKiBTb21lIGZpZWxkcyBv ZiBzdHJ1Y3Qgc3RhdCBhcmUgKnZlcnkqIGV4cGVuc2l2ZSB0byBjb21wdXRlIG9uIE1TLURP UywKQEAgLTc5MiwyMyArODEyLDE1IEBACiAgIF9kanN0YXRfZmxhZ3MgPSBfU1RBVF9JTk9E RSB8IF9TVEFUX0VYRUNfTUFHSUMgfCBfU1RBVF9ESVJTSVpFOwogI2VuZGlmIC8qIE1TRE9T ICovCiAKLSAgbWVtY3B5IChmdWxsbmFtZSwgU0RBVEEgKGRpcm5hbWUpLCBwb3MpOwotICBp ZiAoIUlTX0RJUkVDVE9SWV9TRVAgKGZ1bGxuYW1lW3BvcyAtIDFdKSkKLSAgICBmdWxsbmFt ZVtwb3MrK10gPSBESVJFQ1RPUllfU0VQOwotCi0gIG1lbWNweSAoZnVsbG5hbWUgKyBwb3Ms IGRwLT5kX25hbWUsIGxlbik7Ci0gIGZ1bGxuYW1lW3BvcyArIGxlbl0gPSAwOwotCiAgIC8q IFdlIHdhbnQgdG8gcmV0dXJuIHN1Y2Nlc3MgaWYgYSBsaW5rIHBvaW50cyB0byBhIG5vbmV4 aXN0ZW50IGZpbGUsCiAgICAgIGJ1dCB3ZSB3YW50IHRvIHJldHVybiB0aGUgc3RhdHVzIGZv ciB3aGF0IHRoZSBsaW5rIHBvaW50cyB0bywKICAgICAgaW4gY2FzZSBpdCBpcyBhIGRpcmVj dG9yeS4gICovCi0gIHZhbHVlID0gbHN0YXQgKGZ1bGxuYW1lLCBzdF9hZGRyKTsKKyAgdmFs dWUgPSBmc3RhdGF0IChmZCwgZHAtPmRfbmFtZSwgc3RfYWRkciwgQVRfU1lNTElOS19OT0ZP TExPVyk7CiAgIGlmICh2YWx1ZSA9PSAwICYmIFNfSVNMTksgKHN0X2FkZHItPnN0X21vZGUp KQotICAgIHN0YXQgKGZ1bGxuYW1lLCBzdF9hZGRyKTsKKyAgICBmc3RhdGF0IChmZCwgZHAt PmRfbmFtZSwgc3RfYWRkciwgMCk7CiAjaWZkZWYgTVNET1MKICAgX2Rqc3RhdF9mbGFncyA9 IHNhdmVfZGpzdGF0X2ZsYWdzOwogI2VuZGlmIC8qIE1TRE9TICovCi0gIFNBRkVfRlJFRSAo KTsKICAgcmV0dXJuIHZhbHVlOwogfQogDApAQCAtODg2LDE4ICs4OTgsOCBAQAogc28gbGFz dCBhY2Nlc3MgdGltZSB3aWxsIGFsd2F5cyBiZSBtaWRuaWdodCBvZiB0aGF0IGRheS4gICov KQogICAoTGlzcF9PYmplY3QgZmlsZW5hbWUsIExpc3BfT2JqZWN0IGlkX2Zvcm1hdCkKIHsK LSAgTGlzcF9PYmplY3QgdmFsdWVzWzEyXTsKICAgTGlzcF9PYmplY3QgZW5jb2RlZDsKLSAg c3RydWN0IHN0YXQgczsKLSAgaW50IGxzdGF0X3Jlc3VsdDsKLQotICAvKiBBbiBhcnJheSB0 byBob2xkIHRoZSBtb2RlIHN0cmluZyBnZW5lcmF0ZWQgYnkgZmlsZW1vZGVzdHJpbmcsCi0g ICAgIGluY2x1ZGluZyBpdHMgdGVybWluYXRpbmcgc3BhY2UgYW5kIG51bGwgYnl0ZS4gICov Ci0gIGNoYXIgbW9kZXNbc2l6ZW9mICItcnd4ci14ci14ICJdOwotCiAgIExpc3BfT2JqZWN0 IGhhbmRsZXI7Ci0gIHN0cnVjdCBnY3BybyBnY3BybzE7Ci0gIGNoYXIgKnVuYW1lID0gTlVM TCwgKmduYW1lID0gTlVMTDsKIAogICBmaWxlbmFtZSA9IEZleHBhbmRfZmlsZV9uYW1lIChm aWxlbmFtZSwgUW5pbCk7CiAKQEAgLTkxMyw5ICs5MTUsMjIgQEAKIAlyZXR1cm4gY2FsbDMg KGhhbmRsZXIsIFFmaWxlX2F0dHJpYnV0ZXMsIGZpbGVuYW1lLCBpZF9mb3JtYXQpOwogICAg IH0KIAotICBHQ1BSTzEgKGZpbGVuYW1lKTsKICAgZW5jb2RlZCA9IEVOQ09ERV9GSUxFIChm aWxlbmFtZSk7Ci0gIFVOR0NQUk87CisgIHJldHVybiBmaWxlX2F0dHJpYnV0ZXMgKEFUX0ZE Q1dELCBTU0RBVEEgKGVuY29kZWQpLCBpZF9mb3JtYXQpOworfQorCitzdGF0aWMgTGlzcF9P YmplY3QKK2ZpbGVfYXR0cmlidXRlcyAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLCBMaXNw X09iamVjdCBpZF9mb3JtYXQpCit7CisgIExpc3BfT2JqZWN0IHZhbHVlc1sxMl07CisgIHN0 cnVjdCBzdGF0IHM7CisgIGludCBsc3RhdF9yZXN1bHQ7CisKKyAgLyogQW4gYXJyYXkgdG8g aG9sZCB0aGUgbW9kZSBzdHJpbmcgZ2VuZXJhdGVkIGJ5IGZpbGVtb2Rlc3RyaW5nLAorICAg ICBpbmNsdWRpbmcgaXRzIHRlcm1pbmF0aW5nIHNwYWNlIGFuZCBudWxsIGJ5dGUuICAqLwor ICBjaGFyIG1vZGVzW3NpemVvZiAiLXJ3eHIteHIteCAiXTsKKworICBjaGFyICp1bmFtZSA9 IE5VTEwsICpnbmFtZSA9IE5VTEw7CiAKICNpZmRlZiBXSU5ET1dTTlQKICAgLyogV2UgdXN1 YWxseSBkb24ndCByZXF1ZXN0IGFjY3VyYXRlIG93bmVyIGFuZCBncm91cCBpbmZvLCBiZWNh dXNlCkBAIC05MjUsNyArOTQwLDcgQEAKICAgdzMyX3N0YXRfZ2V0X293bmVyX2dyb3VwID0g MTsKICNlbmRpZgogCi0gIGxzdGF0X3Jlc3VsdCA9IGxzdGF0IChTU0RBVEEgKGVuY29kZWQp LCAmcyk7CisgIGxzdGF0X3Jlc3VsdCA9IGZzdGF0YXQgKGZkLCBuYW1lLCAmcywgQVRfU1lN TElOS19OT0ZPTExPVyk7CiAKICNpZmRlZiBXSU5ET1dTTlQKICAgdzMyX3N0YXRfZ2V0X293 bmVyX2dyb3VwID0gMDsKQEAgLTkzNCw3ICs5NDksNyBAQAogICBpZiAobHN0YXRfcmVzdWx0 IDwgMCkKICAgICByZXR1cm4gUW5pbDsKIAotICB2YWx1ZXNbMF0gPSAoU19JU0xOSyAocy5z dF9tb2RlKSA/IEZmaWxlX3N5bWxpbmtfcCAoZmlsZW5hbWUpCisgIHZhbHVlc1swXSA9IChT X0lTTE5LIChzLnN0X21vZGUpID8gZW1hY3NfcmVhZGxpbmthdCAoZmQsIG5hbWUpCiAJICAg ICAgIDogU19JU0RJUiAocy5zdF9tb2RlKSA/IFF0IDogUW5pbCk7CiAgIHZhbHVlc1sxXSA9 IG1ha2VfbnVtYmVyIChzLnN0X25saW5rKTsKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9m aWxlaW8uYycKLS0tIHNyYy9maWxlaW8uYwkyMDEzLTAxLTIzIDIwOjA3OjI4ICswMDAwCisr KyBzcmMvZmlsZWlvLmMJMjAxMy0wMS0yNCAwODowMjoxNiArMDAwMApAQCAtODIsNiArODIs OCBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJzeXN0aW1lLmgiCisjaW5jbHVkZSA8YWxsb2Nh dG9yLmg+CisjaW5jbHVkZSA8Y2FyZWFkbGlua2F0Lmg+CiAjaW5jbHVkZSA8c3RhdC10aW1l Lmg+CiAKICNpZmRlZiBIUFVYCkBAIC0yNzU4LDYgKzI3NjAsMjkgQEAKICAgcmV0dXJuIFFu aWw7CiB9CiAMCisvKiBSZWxhdGl2ZSB0byBkaXJlY3RvcnkgRkQsIHJldHVybiB0aGUgc3lt Ym9saWMgbGluayB2YWx1ZSBvZiBGSUxFTkFNRS4KKyAgIE9uIGZhaWx1cmUsIHJldHVybiBu aWwuICAqLworTGlzcF9PYmplY3QKK2VtYWNzX3JlYWRsaW5rYXQgKGludCBmZCwgY2hhciBj b25zdCAqZmlsZW5hbWUpCit7CisgIHN0YXRpYyBzdHJ1Y3QgYWxsb2NhdG9yIGNvbnN0IGVt YWNzX25vcmVhbGxvY19hbGxvY2F0b3IgPQorICAgIHsgeG1hbGxvYywgTlVMTCwgeGZyZWUs IG1lbW9yeV9mdWxsIH07CisgIExpc3BfT2JqZWN0IHZhbDsKKyAgY2hhciByZWFkbGlua19i dWZbMTAyNF07CisgIGNoYXIgKmJ1ZiA9IGNhcmVhZGxpbmthdCAoZmQsIGZpbGVuYW1lLCBy ZWFkbGlua19idWYsIHNpemVvZiByZWFkbGlua19idWYsCisJCQkgICAgJmVtYWNzX25vcmVh bGxvY19hbGxvY2F0b3IsIHJlYWRsaW5rYXQpOworICBpZiAoIWJ1ZikKKyAgICByZXR1cm4g UW5pbDsKKworICB2YWwgPSBidWlsZF9zdHJpbmcgKGJ1Zik7CisgIGlmIChidWZbMF0gPT0g Jy8nICYmIHN0cmNociAoYnVmLCAnOicpKQorICAgIHZhbCA9IGNvbmNhdDIgKGJ1aWxkX3N0 cmluZyAoIi86IiksIHZhbCk7CisgIGlmIChidWYgIT0gcmVhZGxpbmtfYnVmKQorICAgIHhm cmVlIChidWYpOworICB2YWwgPSBERUNPREVfRklMRSAodmFsKTsKKyAgcmV0dXJuIHZhbDsK K30KKwogREVGVU4gKCJmaWxlLXN5bWxpbmstcCIsIEZmaWxlX3N5bWxpbmtfcCwgU2ZpbGVf c3ltbGlua19wLCAxLCAxLCAwLAogICAgICAgIGRvYzogLyogUmV0dXJuIG5vbi1uaWwgaWYg ZmlsZSBGSUxFTkFNRSBpcyB0aGUgbmFtZSBvZiBhIHN5bWJvbGljIGxpbmsuCiBUaGUgdmFs dWUgaXMgdGhlIGxpbmsgdGFyZ2V0LCBhcyBhIHN0cmluZy4KQEAgLTI3NjgsOSArMjc5Myw2 IEBACiAgIChMaXNwX09iamVjdCBmaWxlbmFtZSkKIHsKICAgTGlzcF9PYmplY3QgaGFuZGxl cjsKLSAgY2hhciAqYnVmOwotICBMaXNwX09iamVjdCB2YWw7Ci0gIGNoYXIgcmVhZGxpbmtf YnVmW1JFQURMSU5LX0JVRlNJWkVdOwogCiAgIENIRUNLX1NUUklORyAoZmlsZW5hbWUpOwog ICBmaWxlbmFtZSA9IEZleHBhbmRfZmlsZV9uYW1lIChmaWxlbmFtZSwgUW5pbCk7CkBAIC0y NzgzLDE3ICsyODA1LDcgQEAKIAogICBmaWxlbmFtZSA9IEVOQ09ERV9GSUxFIChmaWxlbmFt ZSk7CiAKLSAgYnVmID0gZW1hY3NfcmVhZGxpbmsgKFNTREFUQSAoZmlsZW5hbWUpLCByZWFk bGlua19idWYpOwotICBpZiAoISBidWYpCi0gICAgcmV0dXJuIFFuaWw7Ci0KLSAgdmFsID0g YnVpbGRfc3RyaW5nIChidWYpOwotICBpZiAoYnVmWzBdID09ICcvJyAmJiBzdHJjaHIgKGJ1 ZiwgJzonKSkKLSAgICB2YWwgPSBjb25jYXQyIChidWlsZF9zdHJpbmcgKCIvOiIpLCB2YWwp OwotICBpZiAoYnVmICE9IHJlYWRsaW5rX2J1ZikKLSAgICB4ZnJlZSAoYnVmKTsKLSAgdmFs ID0gREVDT0RFX0ZJTEUgKHZhbCk7Ci0gIHJldHVybiB2YWw7CisgIHJldHVybiBlbWFjc19y ZWFkbGlua2F0IChBVF9GRENXRCwgU1NEQVRBIChmaWxlbmFtZSkpOwogfQogCiBERUZVTiAo ImZpbGUtZGlyZWN0b3J5LXAiLCBGZmlsZV9kaXJlY3RvcnlfcCwgU2ZpbGVfZGlyZWN0b3J5 X3AsIDEsIDEsIDAsCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZpbGVsb2NrLmMnCi0tLSBz cmMvZmlsZWxvY2suYwkyMDEzLTAxLTAxIDA5OjExOjA1ICswMDAwCisrKyBzcmMvZmlsZWxv Y2suYwkyMDEzLTAxLTI0IDA2OjUxOjI1ICswMDAwCkBAIC0zOTAsMTIgKzM5MCwxNCBAQAog ICBsb2NrX2luZm9fdHlwZSBsb2NhbF9vd25lcjsKICAgaW50bWF4X3QgbjsKICAgY2hhciAq YXQsICpkb3QsICpjb2xvbjsKLSAgY2hhciByZWFkbGlua19idWZbUkVBRExJTktfQlVGU0la RV07Ci0gIGNoYXIgKmxmaW5mbyA9IGVtYWNzX3JlYWRsaW5rIChsZm5hbWUsIHJlYWRsaW5r X2J1Zik7CisgIExpc3BfT2JqZWN0IGxmaW5mb19vYmplY3QgPSBlbWFjc19yZWFkbGlua2F0 IChBVF9GRENXRCwgbGZuYW1lKTsKKyAgY2hhciAqbGZpbmZvOworICBzdHJ1Y3QgZ2Nwcm8g Z2Nwcm8xOwogCiAgIC8qIElmIG5vbmV4aXN0ZW50IGxvY2sgZmlsZSwgYWxsIGlzIHdlbGw7 IG90aGVyd2lzZSwgZ290IHN0cmFuZ2UgZXJyb3IuICovCi0gIGlmICghbGZpbmZvKQorICBp ZiAoTklMUCAobGZpbmZvX29iamVjdCkpCiAgICAgcmV0dXJuIGVycm5vID09IEVOT0VOVCA/ IDAgOiAtMTsKKyAgbGZpbmZvID0gU1NEQVRBIChsZmluZm9fb2JqZWN0KTsKIAogICAvKiBF dmVuIGlmIHRoZSBjYWxsZXIgZG9lc24ndCB3YW50IHRoZSBvd25lciBpbmZvLCB3ZSBzdGls bCBoYXZlIHRvCiAgICAgIHJlYWQgaXQgdG8gZGV0ZXJtaW5lIHJldHVybiB2YWx1ZS4gICov CkBAIC00MDcsMTIgKzQwOSw5IEBACiAgIGF0ID0gc3RycmNociAobGZpbmZvLCAnQCcpOwog ICBkb3QgPSBzdHJyY2hyIChsZmluZm8sICcuJyk7CiAgIGlmICghYXQgfHwgIWRvdCkKLSAg ICB7Ci0gICAgICBpZiAobGZpbmZvICE9IHJlYWRsaW5rX2J1ZikKLQl4ZnJlZSAobGZpbmZv KTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICAgcmV0dXJuIC0xOwogICBsZW4gPSBh dCAtIGxmaW5mbzsKKyAgR0NQUk8xIChsZmluZm9fb2JqZWN0KTsKICAgb3duZXItPnVzZXIg PSB4bWFsbG9jIChsZW4gKyAxKTsKICAgbWVtY3B5IChvd25lci0+dXNlciwgbGZpbmZvLCBs ZW4pOwogICBvd25lci0+dXNlcltsZW5dID0gMDsKQEAgLTQ0NSw4ICs0NDQsNyBAQAogICBv d25lci0+aG9zdFtsZW5dID0gMDsKIAogICAvKiBXZSdyZSBkb25lIGxvb2tpbmcgYXQgdGhl IGxpbmsgaW5mby4gICovCi0gIGlmIChsZmluZm8gIT0gcmVhZGxpbmtfYnVmKQotICAgIHhm cmVlIChsZmluZm8pOworICBVTkdDUFJPOwogCiAgIC8qIE9uIGN1cnJlbnQgaG9zdD8gICov CiAgIGlmIChTVFJJTkdQIChGc3lzdGVtX25hbWUgKCkpCgo9PT0gbW9kaWZpZWQgZmlsZSAn c3JjL2xpc3AuaCcKLS0tIHNyYy9saXNwLmgJMjAxMy0wMS0yNSAxNzoxMzozMSArMDAwMAor Kysgc3JjL2xpc3AuaAkyMDEzLTAxLTI4IDAyOjUxOjI1ICswMDAwCkBAIC0zMjk0LDYgKzMy OTQsNyBAQAogZXh0ZXJuIExpc3BfT2JqZWN0IHJlc3RvcmVfcG9pbnRfdW53aW5kIChMaXNw X09iamVjdCk7CiBleHRlcm4gX05vcmV0dXJuIHZvaWQgcmVwb3J0X2ZpbGVfZXJyb3IgKGNv bnN0IGNoYXIgKiwgTGlzcF9PYmplY3QpOwogZXh0ZXJuIGJvb2wgaW50ZXJuYWxfZGVsZXRl X2ZpbGUgKExpc3BfT2JqZWN0KTsKK2V4dGVybiBMaXNwX09iamVjdCBlbWFjc19yZWFkbGlu a2F0IChpbnQsIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gYm9vbCBmaWxlX2RpcmVjdG9yeV9w IChjb25zdCBjaGFyICopOwogZXh0ZXJuIGJvb2wgZmlsZV9hY2Nlc3NpYmxlX2RpcmVjdG9y eV9wIChjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgaW5pdF9maWxlaW8gKHZvaWQpOwpA QCAtMzU2Niw4ICszNTY3LDYgQEAKIGV4dGVybiBpbnQgZW1hY3NfY2xvc2UgKGludCk7CiBl eHRlcm4gcHRyZGlmZl90IGVtYWNzX3JlYWQgKGludCwgY2hhciAqLCBwdHJkaWZmX3QpOwog ZXh0ZXJuIHB0cmRpZmZfdCBlbWFjc193cml0ZSAoaW50LCBjb25zdCBjaGFyICosIHB0cmRp ZmZfdCk7Ci1lbnVtIHsgUkVBRExJTktfQlVGU0laRSA9IDEwMjQgfTsKLWV4dGVybiBjaGFy ICplbWFjc19yZWFkbGluayAoY29uc3QgY2hhciAqLCBjaGFyIFtSRUFETElOS19CVUZTSVpF XSk7CiAKIGV4dGVybiB2b2lkIHVubG9ja19hbGxfZmlsZXMgKHZvaWQpOwogZXh0ZXJuIHZv aWQgbG9ja19maWxlIChMaXNwX09iamVjdCk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3N5 c2RlcC5jJwotLS0gc3JjL3N5c2RlcC5jCTIwMTMtMDEtMTMgMjA6MDM6MDEgKzAwMDAKKysr IHNyYy9zeXNkZXAuYwkyMDEzLTAxLTI0IDA2OjUxOjI1ICswMDAwCkBAIC0zMCw5ICszMCw3 IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNpbmNs dWRlIDxhbGxvY2F0b3IuaD4KICNpbmNsdWRlIDxjLWN0eXBlLmg+Ci0jaW5jbHVkZSA8Y2Fy ZWFkbGlua2F0Lmg+CiAjaW5jbHVkZSA8aWdub3JlLXZhbHVlLmg+CiAjaW5jbHVkZSA8dXRp bWVucy5oPgogCkBAIC0yMjQ3LDIyICsyMjQ1LDYgQEAKIAogICByZXR1cm4gKGJ5dGVzX3dy aXR0ZW4pOwogfQotCi1zdGF0aWMgc3RydWN0IGFsbG9jYXRvciBjb25zdCBlbWFjc19ub3Jl YWxsb2NfYWxsb2NhdG9yID0KLSAgeyB4bWFsbG9jLCBOVUxMLCB4ZnJlZSwgbWVtb3J5X2Z1 bGwgfTsKLQotLyogR2V0IHRoZSBzeW1ib2xpYyBsaW5rIHZhbHVlIG9mIEZJTEVOQU1FLiAg UmV0dXJuIGEgcG9pbnRlciB0byBhCi0gICBOVUwtdGVybWluYXRlZCBzdHJpbmcuICBJZiBy ZWFkbGluayBmYWlscywgcmV0dXJuIE5VTEwgYW5kIHNldAotICAgZXJybm8uICBJZiB0aGUg dmFsdWUgZml0cyBpbiBJTklUSUFMX0JVRiwgcmV0dXJuIElOSVRJQUxfQlVGLgotICAgT3Ro ZXJ3aXNlLCBhbGxvY2F0ZSBtZW1vcnkgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhhdCBt ZW1vcnkuICBJZgotICAgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIGRpYWdub3NlIGFuZCBm YWlsIHdpdGhvdXQgcmV0dXJuaW5nLiAgSWYKLSAgIHN1Y2Nlc3NmdWwsIHN0b3JlIHRoZSBs ZW5ndGggb2YgdGhlIHN5bWJvbGljIGxpbmsgaW50byAqTElOS0xFTi4gICovCi1jaGFyICoK LWVtYWNzX3JlYWRsaW5rIChjaGFyIGNvbnN0ICpmaWxlbmFtZSwgY2hhciBpbml0aWFsX2J1 ZltSRUFETElOS19CVUZTSVpFXSkKLXsKLSAgcmV0dXJuIGNhcmVhZGxpbmthdCAoQVRfRkRD V0QsIGZpbGVuYW1lLCBpbml0aWFsX2J1ZiwgUkVBRExJTktfQlVGU0laRSwKLQkJICAgICAg ICZlbWFjc19ub3JlYWxsb2NfYWxsb2NhdG9yLCBjYXJlYWRsaW5rYXRjd2QpOwotfQogDAog LyogUmV0dXJuIGEgc3RydWN0IHRpbWV2YWwgdGhhdCBpcyByb3VnaGx5IGVxdWl2YWxlbnQg dG8gVC4KICAgIFVzZSB0aGUgbGVhc3QgdGltZXZhbCBub3QgbGVzcyB0aGFuIFQuCgo9PT0g bW9kaWZpZWQgZmlsZSAnc3JjL3czMi5jJwotLS0gc3JjL3czMi5jCTIwMTMtMDEtMjUgMTQ6 Mzg6MjEgKzAwMDAKKysrIHNyYy93MzIuYwkyMDEzLTAxLTI4IDA4OjE1OjEyICswMDAwCkBA IC00MTk0LDYgKzQxOTQsMjkgQEAKICAgcmV0dXJuIHN0YXRfd29ya2VyIChwYXRoLCBidWYs IDApOwogfQogCitpbnQKK2ZzdGF0YXQgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwgc3Ry dWN0IHN0YXQgKnN0LCBpbnQgZmxhZ3MpCit7CisgIC8qIFJlbHkgb24gYSBoYWNrOiBvcGVu IGRpcmVjdG9yaWVzIGFyZSBtb2RlbGVkIGFzIHRoZWlyIG5hbWVzLCBjYXN0CisgICAgIHRv IGludC4gIFRoaXMgaXMgZ29vZCBlbm91Z2ggZm9yIHRoZSBjdXJyZW50IHVzYWdlIGluIEVt YWNzLCBidXQKKyAgICAgaXMgZnJhZ2lsZS4KKworICAgICBGSVhNRTogQWRkIHByb3BlciBz dXBwb3J0IGZvciBmZG9wZW5kaXIsIGZzdGF0YXRhdCwgcmVhZGxpbmthdC4KKyAgICAgR251 bGliIGRvZXMgdGhpcyBhbmQgY2FuIHNlcnZlIGFzIGEgbW9kZWwuICAqLworICBjaGFyIGZ1 bGxuYW1lW01BWF9QQVRIXTsKKyAgaWYgKGZkICE9IEFUX0ZEQ1dEKQorICAgIHsKKyAgICAg IGlmIChfc25wcmludGYgKGZ1bGxuYW1lLCBzaXplb2YgZnVsbG5hbWUsICIlcy8lcyIsIChj aGFyICopIGZkLCBuYW1lKQorCSAgPCAwKQorCXsKKwkgIGVycm5vID0gRU5BTUVUT09MT05H OworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIG5hbWUgPSBmdWxsbmFtZTsKKyAgICB9Cisg IHJldHVybiBzdGF0X3dvcmtlciAobmFtZSwgc3QsICEgKGZsYWdzICYgQVRfU1lNTElOS19O T0ZPTExPVykpOworfQorCiAvKiBQcm92aWRlIGZzdGF0IGFuZCB1dGltZSBhcyB3ZWxsIGFz IHN0YXQgZm9yIGNvbnNpc3RlbnQgaGFuZGxpbmcgb2YKICAgIGZpbGUgdGltZXN0YW1wcy4g Ki8KIGludApAQCAtNDY5Nyw2ICs0NzIwLDI4IEBACiAgIHJldHVybiByZXR2YWw7CiB9CiAK K3NzaXplX3QKK3JlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwgY2hhciAq YnVmZmVyLAorCSAgICBzaXplX3QgYnVmZmVyX3NpemUpCit7CisgIC8qIFJlbHkgb24gYSBo YWNrOiBvcGVuIGRpcmVjdG9yaWVzIGFyZSBtb2RlbGVkIGFzIHRoZWlyIG5hbWVzIGNhc3QK KyAgICAgdG8gaW50LCBhcyBpbiBmc3RhdGF0LiAgRklYTUU6IEFkZCBwcm9wZXIgc3VwcG9y dCBmb3IgcmVhZGxpbmthdC4gICovCisgIGNoYXIgZnVsbG5hbWVbTUFYX1BBVEhdOworCisg IGlmIChmZCAhPSBBVF9GRENXRCkKKyAgICB7CisgICAgICBpZiAoX3NucHJpbnRmIChmdWxs bmFtZSwgc2l6ZW9mIGZ1bGxuYW1lLCAiJXMvJXMiLCAoY2hhciAqKSBmZCwgbmFtZSkKKwkg IDwgMCkKKwl7CisJICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkgIHJldHVybiAtMTsKKwl9 CisgICAgICBuYW1lID0gZnVsbG5hbWU7CisgICAgfQorCisgIHJldHVybiByZWFkbGluayAo bmFtZSwgYnVmZmVyLCBidWZmZXJfc2l6ZSk7Cit9CisKIC8qIElmIEZJTEUgaXMgYSBzeW1s aW5rLCByZXR1cm4gaXRzIHRhcmdldCAoc3RvcmVkIGluIGEgc3RhdGljCiAgICBidWZmZXIp OyBvdGhlcndpc2UgcmV0dXJuIEZJTEUuCiAKQEAgLTUwMjEsMTIgKzUwNjYsNiBAQAogICBj aGFyIGxpbmtuYW1lW01BWF9QQVRIXTsKICAgc3NpemVfdCBsaW5rX3NpemU7CiAKLSAgaWYg KGZkICE9IEFUX0ZEQ1dEKQotICAgIHsKLSAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAg cmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgIGxpbmtfc2l6ZSA9IHByZWFkbGlua2F0IChmZCwg ZmlsZW5hbWUsIGxpbmtuYW1lLCBzaXplb2YobGlua25hbWUpKTsKIAogICBpZiAobGlua19z aXplID4gMCkKQEAgLTUwNDQsMTQgKzUwODMsNiBAQAogICByZXR1cm4gTlVMTDsKIH0KIAot c3NpemVfdAotY2FyZWFkbGlua2F0Y3dkIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGVuYW1l LCBjaGFyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJfc2l6ZSkK LXsKLSAgKHZvaWQpIGZkOwotICByZXR1cm4gcmVhZGxpbmsgKGZpbGVuYW1lLCBidWZmZXIs IGJ1ZmZlcl9zaXplKTsKLX0KLQogDAogLyogU3VwcG9ydCBmb3IgYnJvd3Npbmcgb3RoZXIg cHJvY2Vzc2VzIGFuZCB0aGVpciBhdHRyaWJ1dGVzLiAgU2VlCiAgICBwcm9jZXNzLmMgZm9y IHRoZSBMaXNwIGJpbmRpbmdzLiAgKi8KCg== --------------000302060007080508010706--