From owner-freebsd-net@freebsd.org Fri Dec 2 15:23:50 2016 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D5FD2C635FA for ; Fri, 2 Dec 2016 15:23:50 +0000 (UTC) (envelope-from Steven@stream-technologies.com) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0084.outbound.protection.outlook.com [104.47.1.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "Microsoft IT SSL SHA2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3D8E11C44 for ; Fri, 2 Dec 2016 15:23:43 +0000 (UTC) (envelope-from Steven@stream-technologies.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=streamtechnologiesuk.onmicrosoft.com; s=selector1-streamtechnologies-com01e; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=PXg6H4HAdQQt0EkAunYpO/n8jE40orsMWjvJ5JnnwK8=; b=hm4EEsHU0E8aBsdOR2M5kwqth4I+S4BZqOeZy0U7UiXe38aEJXVNYSjGq3WCgI2bW8jycTZW4xOD5EnemlY/rm7zG4F3neAVmcu45yLmW630/owUBNmOeNbpUhZzo/+8Lx7FMcm54b4JzSBJRXBBjY0acH0xR/aPaIax/1+HokI= Received: from DB5PR07MB1685.eurprd07.prod.outlook.com (10.166.13.14) by DB5PR07MB1688.eurprd07.prod.outlook.com (10.166.13.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.771.4; Fri, 2 Dec 2016 14:22:47 +0000 Received: from DB5PR07MB1685.eurprd07.prod.outlook.com ([10.166.13.14]) by DB5PR07MB1685.eurprd07.prod.outlook.com ([10.166.13.14]) with mapi id 15.01.0771.004; Fri, 2 Dec 2016 14:22:47 +0000 From: Steven Crangle To: Vincenzo Maffione CC: FreeBSD Net Subject: Re: Looking for some help with netmap/bhyve Thread-Topic: Looking for some help with netmap/bhyve Thread-Index: AQHSRKuiOapzmKvhI0y8Pcsl7N08/KDmPxuAgAmeBLSAAAebAIAAJnrzgABMAwCABGOGsA== Date: Fri, 2 Dec 2016 14:22:47 +0000 Message-ID: References: , In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Steven@stream-technologies.com; x-originating-ip: [212.20.240.118] x-ms-office365-filtering-correlation-id: 99fff871-83e7-4608-eff2-08d41abeb0c3 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB5PR07MB1688; x-microsoft-exchange-diagnostics: 1; DB5PR07MB1688; 7:8PfBJ/sggwVLoz5OzvBFlYKOr5cwLZQDYqhZ8weYup0rkReidrZOayAtT09zffL4Uf97nf1PcGjTnreBCfqQJAZwptmrkukRxQ25Hs4k/AgiIClUrJCG5DNFk+O1gGzggCLoyPuYLGpXA4nbVNzMklM2TcP6zV4p/ZpjmdP7Cy/ZtMZ43owPfH97NJZ0cN8S4mhfTBBO7b2QwS+550DAvwasr6GGif3zCqy0kuOI/uVmpahOu7f6BP9HmkeOJ/2tI31L8BwSwavoMkzwL+FeCxn4q0bKKv8F3ad5TWSuBkILC91K2YHSeEa5GEsji88UH5yslbEHuNHZyBlHvqbt0KQZlaaTaLACceiCKEF5DpDWdRDqrBbN2VRHKBnyGOjISACHgs8sL/PjvjRm+TlOtsCD/lIqczzYz7DD6aGYtfaVERbPQtlqM3fwXXg4mzs0EZfAuuEUufKh8gpnjA+qAg== x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(56005881305849)(158342451672863)(278428928389397)(166708455590820)(203790808753936)(266611908612381)(75325880899374)(211171220733660)(83272782819144); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(102415395)(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(2016111802025)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(6043046)(6042181)(6072148); SRVR:DB5PR07MB1688; BCL:0; PCL:0; RULEID:; SRVR:DB5PR07MB1688; x-forefront-prvs: 0144B30E41 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(7916002)(189002)(377424004)(52314003)(43784003)(199003)(6506004)(7846002)(77096006)(16601075003)(101416001)(2900100001)(93886004)(2906002)(4326007)(122556002)(76576001)(92566002)(19627405001)(19273905006)(3280700002)(3660700001)(33656002)(105586002)(106356001)(102836003)(3846002)(6116002)(66066001)(86362001)(575784001)(189998001)(81166006)(81156014)(8676002)(97736004)(80792005)(4001150100001)(106116001)(9686002)(68736007)(8936002)(229853002)(39060400001)(606004)(38730400001)(5890100001)(54356999)(6916009)(76176999)(7736002)(2950100002)(7906003)(7696004)(74316002)(99936001)(110136003)(50986999)(5660300001)(7099028)(16866105001)(473944003); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR07MB1688; H:DB5PR07MB1685.eurprd07.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: stream-technologies.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_" MIME-Version: 1.0 X-OriginatorOrg: stream-technologies.com X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Dec 2016 14:22:47.5620 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 720fa073-5781-43bf-bc14-7bef2603ed21 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB1688 X-Mailman-Approved-At: Fri, 02 Dec 2016 17:24:37 +0000 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Dec 2016 15:23:51 -0000 --_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Vincenzo, Figured I would reply to give you some more testing feedback! Ptnetmap is s= uccessfully working for us now on 11.0 RELEASE (stock src.txz from FreeBSD.= org) with the help of your patch! There were a few files missing from the p= atch though, so I've attached a revised one which should work incase it's o= f use to you! (might be a bit messy) I've attached a txt file with some testing results too , but in summary: 1) netmap with no ptnet or vale: between 65-70Kpps. 2) netmap with vale but no ptnet: between 121-160Kpps. 3) ptnetmap with vale: seems to vary quite alot between 7-15Mpps. All the tests were performed using pkt-gen with 60 byte packets. It's worth= noting that currently we're running the tests on a very old tired Sun Micr= o server(Sun Fire X2200 M2 with Quad Core Processor). Currently in the proc= ess of testing out our patch file on a clean 11.0 source on a much faster b= ox, so can run more detailed testing there using iperf etc if it's useful t= o you! I have also attached a few kernel traces, I tried to turn symbols on, but i= 'm not sure it worked 100% Will try and fix it for the next install so that= I can provide better crash dumps if we run into any bugs! The crashes att= ached only ever occured in setup number 2 above. Thanks again for your help! Kind Regards Steven ________________________________ [Stream Logo] Steven Crangle Systems Developer | Stream Technologies | Glasgow, UK [http://www.stream-technologies.com/img/phone.png] +44 (0)844 800 8520 | [http://www.stream-technologies.com/img/mouse.png] www.stream-technologies.com ________________________________ From: Vincenzo Maffione Sent: 29 November 2016 18:42:04 To: Steven Crangle Cc: FreeBSD Net Subject: Re: Looking for some help with netmap/bhyve Hi Steven, 2016-11-29 16:44 GMT+01:00 Steven Crangle >: Hi Vincenzo, No problem! We've decided that we will try testing with 11.0 too, as it wou= ld help us to have our test system locked to a specific version like 11.0 a= nd can hopefully help you with testing too. We'll compile netmap from sourc= e as advised, but I was wondering what steps we would take in order to port= the changes to bhyve/ptnetmap from HEAD into 11.0? I think you can get the patch containing my modifications to HEAD for bhyve= +vmm.ko+libvmmapi, that you can extract with the following command in my fr= eebsd git repository $ git diff 9e10acc0303003d8733a546bca60f242b7b0aa64 ptnet-head lib/libvmmap= i/ sys/amd64/ sys/modules/vmm/ usr.sbin/bhyve and apply that patch in your 11.0 FreeBSD tree. I've currently only tested with pkt-gen as our bhyve instances are pretty m= inimal right now, below are a few samples of the speeds seen in each of the= different configurations: which configurations? Using netmap on top of standard tap devices with no vale: vm1: 197.259100 main_thread [2325] 30.977 Kpps (32.435 Kpkts 15.569 Mbps in = 1047062 usec) 1.93 avg_batch 826 min_space 203.306126 main_thread [2325] 32.149 Kpps (32.411 Kpkts 15.557 Mbps in = 1008156 usec) 1.88 avg_batch 866 min_space 204.313055 main_thread [2325] 33.095 Kpps (33.324 Kpkts 15.996 Mbps in = 1006929 usec) 1.98 avg_batch 911 min_space vm2: 245.397418 main_thread [2325] 31.422 Kpps (33.262 Kpkts 15.966 Mbps in = 1058559 usec) 313.79 avg_batch 99999 min_space 246.429810 main_thread [2325] 31.254 Kpps (32.266 Kpkts 15.488 Mbps in = 1032392 usec) 319.47 avg_batch 99999 min_space 251.621436 main_thread [2325] 31.606 Kpps (33.329 Kpkts 15.998 Mbps in = 1054531 usec) 314.42 avg_batch 99999 min_space Be aware that you typically want to use netmap both in the VM and in the ho= st (to use VALE and ptnet). Here you are probably using netmap just in the = VM. Performance are however extremely low. When using netmap in both guest and host, with ptnet, you should be able to= get at least 10-30 Mpps from vm1 to vm2. After then trying to switch to the netmap in userspace/netmap in kernel spa= ce with ptnetmap, I realised I made a silly mistake and built from head ins= tead of the branch ptnet-head... haha So I'm currently doing a quick rebuil= d on the correct branch and will report back with the results from pkt-gen = using just vale, and also with the new ptnetmap changes! Ok, also consider that you can use the patch I indicated above against HEAD= . Cheers, Vincenzo Kind Regards ________________________________ [Stream Logo] Steven Crangle Systems Developer | Stream Technologies | Glasgow, UK [http://www.stream-technologies.com/img/phone.png] +44 (0)844 800 8520 | [http://www.stream-technologies.com/img/mouse.png] www.stream-technologies.com ________________________________ From: Vincenzo Maffione > Sent: 29 November 2016 11:52:18 To: Steven Crangle Cc: FreeBSD Net Subject: Re: Looking for some help with netmap/bhyve Hi Steven, Thanks for your testing this in HEAD, good news to know that it works ok! I think there is not going to be much difference between HEAD and 11.0, bec= ause in the end bhyve code didn't really change (for the parts I touched), = and you need to use the latest netmap version (github) anyway, irrespective= of whether you are testing on 10.3, 11.0, head, etc. In other words, you w= ould be testing approximately the same code. Anyway, if you happen to test = 11.0 by chance please let me know. What kind of tests did you perform? netmap applications (e.g. pkt-gen), or = netperf/iperf standard TCP/IP tools? Could you please share the performance number you got for configurations (A= ) and (B) (or just the one you tried)? I think it is useful to compare your results with the ones I collected here= (see the performance evaluation section): https://wiki.freebsd.org/DevSummit/201609?action=3DAttachFile&do=3Dview&tar= get=3D20160923-freebsd-summit-ptnet.pdf Regarding the crashes, thanks for reporting, I would be nice if you could d= escribe in more detail how you trigger them (with some higher likelyhood); = also, compiling the kernel with debug symbols should help in understanding = which part of the code is involved in the crash. Cheers, Vincenzo 2016-11-29 12:26 GMT+01:00 Steven Crangle >: Hi Vincenzo! Thank you so much for your help! With your instructions I've managed to get= a set of bhyves up and running with netmap working properly within them! I= chose to go with the recent version of head instead of 10.3. I will also = try and build a version on 11.0 if I get chance! I will make sure and ask any further questions on the github page for netma= p, but while I'm emailing, I've attached a text file containing a few kerne= l page fault errors I've ran into. They don't happen repeatedly. They seem = to just happen randomly if I try to shut the process down and possibly catc= h netmap in an incorrect state! Figured they might be useful to you. If I f= igure out what the error is myself I will try and help out! And thanks again for your help! Kind Regards ________________________________ [Stream Logo] Steven Crangle Systems Developer | Stream Technologies | Glasgow, UK [http://www.stream-technologies.com/img/phone.png] +44 (0)844 800 8520 | [http://www.stream-technologies.com/img/mouse.png] www.stream-technologies.com ________________________________ From: Vincenzo Maffione > Sent: 23 November 2016 08:33:11 To: Steven Crangle Cc: FreeBSD Net Subject: Re: Looking for some help with netmap/bhyve 2016-11-22 11:31 GMT+01:00 Steven Crangle >: Hi, I've recently been trying to boot up several bhyves so that I can test netm= ap communication between instances. The problem is, no matter what configur= ation I try, the guest vm running in bhyve completely hangs and becomes unu= sable as soon as a packet hits the netmap interface. When testing with pkt-= gen, the TX side successfully starts sending packets, but the RX side will = reliable freeze with the only option being killing the bhyve process. The bhyve command used for the above test was: bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip= er1vol -s 3,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 4,virtio-net,tap4= -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 & bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 2,virtio-blk,/dev/zvol/zroot/vip= er2vol -s 3,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 4,virtio-net,tap5= -l com1,/dev/nmdm1A -A -H -P -m 6g viper2 For this test the host OS was FreeBSD-11.0-p3 and the guest OS was FreeBSD-= 11.0-p3. After failing to get this solution working, I pulled down the source from t= he following url and installed it on the host box: https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/ I then ran the following commands to try and bring up the machines using th= e ptnetmap interface (the guest still running 11.0p3) : bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v= iper1vol -s 2:0,virtio-net,tap0,mac=3D00:01:23:45:67:83 -s 2:1,ptnetmap-= memdev -s 2:2,ptnet,vale0:0 -l com1,/dev/nmdm0A -A -H -P -m 6g viper1 & bhyve -c 1 -s 0,hostbridge -s 1,lpc -s 1:1,virtio-blk,/dev/zvol/zroot/v= iper2vol -s 2:0,virtio-net,tap1,mac=3D00:01:23:45:67:84 -s 2:1,ptnetmap-= memdev -s 2:2,ptnet,vale0:1 -l com1,/dev/nmdm1A -A -H -P -m 6g viper2 With the above commands the vm's fail to boot with the following message: ptnet_init: failed to get ptnetmap Output in /var/log/messages seems to just show the ptnetmap driver allocati= ng one RX/TX ring for each vm, while bringing the device up, the device the= n goes down and the above error is seen in the console. Is there something I'm doing wrong with regards to running netmap or ptnetm= ap within a bhyve? Any pointers in the right direction will be much appreci= ated! Kind Regards Steven Hi Steven, The code you are looking at is the final code released by my gsoc 2016 pr= oject at the end of August 2016. However, I've been working on that for a w= hile after the gsoc, so that code is not updated anymore. My modification b= asically involves two subsystems: netmap and bhyve. The updates to netmap are already available in HEAD. The updates to bhyve a= re not yet upstream, as we are in the process to review that with the bhyve= maintainers. Anyway, you need two sources to get the latest code: 1) https://github.com/luigirizzo/netmap for the latest netmap code, that yo= u could also compile as an external kernel module. 2) https://github.com/vmaffione/freebsd to get the updates to bhyve (and vm= m.ko). You can use this as the host system. There are two branches here: pt= net-10.3, and ptnet-head. My original code was developed under FreeBSD 10.3= , so a first possibility is to try this as the host system (using the ptnet= -10.3 branch). The other branch (ptnet-head) contains a porting of the work= to a recent version of HEAD. I would be very glad if you could test the co= de also on FreeBSD 11. We support two combinations of bhyve networking with netmap: (A) virtio-net + netmap: that is something like "-s 2:0,virtio-net,vale0:= 0" in the bhyve command line. (B) ptnet + ptnetmap: that is something like "-s 2:1,ptnetmap-memdev -s 2= :2,ptnet,vale0:0" in the bhyve command line. so you may want to try A first (netmap backend in user-space, slower) and t= hen B (netmap backend in kernel-space, faster). Sorry about the confusion on the code repositories, I'll try also to update= the wiki page (and/or the gsoc svn repo) to reflect these updates. It's pe= rfectly ok for me to discuss these issues here in the ML, however for more = detailed/low-level discussion and support about problems you are running in= to, feel free to open Github issues here https://github.com/luigirizzo/netm= ap. Cheers, Vincenzo ________________________________ [Stream Logo] Steven Crangle Systems Developer | Stream Technologies | Glasgow, UK [http://www.stream-technologies.com/img/phone.png] +44 (0)844 800 8520 | [http://www.stream-technologies.com/img/mouse.png] www.stream-technologies.com _______________________________________________ freebsd-net@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" -- Vincenzo Maffione -- Vincenzo Maffione -- Vincenzo Maffione --_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_ Content-Type: text/x-patch; name="ptnetmap-11.0.patch" Content-Description: ptnetmap-11.0.patch Content-Disposition: attachment; filename="ptnetmap-11.0.patch"; size=1559319; creation-date="Fri, 02 Dec 2016 14:17:48 GMT"; modification-date="Fri, 02 Dec 2016 14:17:48 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtdSAtciAtTiB1c3Ivc3JjLy5hcmNjb25maWcgL3Vzci9zcmMvLmFyY2NvbmZpZwotLS0g dXNyL3NyYy8uYXJjY29uZmlnCTIwMTYtMDktMjkgMDA6MjY6MzYuMDAwMDAwMDAwICswMTAwCisr KyAvdXNyL3NyYy8uYXJjY29uZmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CkBAIC0xLDUgKzAsMCBAQAotewotCSJyZXBvc2l0b3J5LmNhbGxzaWduIiA6ICJTIiwKLQkicGhh YnJpY2F0b3IudXJpIiA6ICJodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvIiwKLQkiaGlzdG9y eS5pbW11dGFibGUiIDogdHJ1ZQotfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvLmFyY2xpbnQgL3Vz ci9zcmMvLmFyY2xpbnQKLS0tIHVzci9zcmMvLmFyY2xpbnQJMjAxNi0wOS0yOSAwMDoyNjozNi4w MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjLy5hcmNsaW50CTE5NzAtMDEtMDEgMDE6MDA6MDAu MDAwMDAwMDAwICswMTAwCkBAIC0xLDI1ICswLDAgQEAKLXsKLSAgImV4Y2x1ZGUiOiAiKGNvbnRy aWJ8Y3J5cHRvKSIsCi0gICJsaW50ZXJzIjogewotICAgICJweXRob24iOiB7Ci0gICAgICAidHlw ZSI6ICJwZXA4IiwKLSAgICAgICJpbmNsdWRlIjogIihcXC5weSQpIgotICAgIH0sCi0gICAgInNw ZWxsaW5nIjogewotICAgICAgInR5cGUiOiAic3BlbGxpbmciCi0gICAgfSwKLSAgICAiY2htb2Qi OiB7Ci0gICAgICAidHlwZSI6ICJjaG1vZCIKLSAgICB9LAotICAgICJtZXJnZS1jb25mbGljdCI6 IHsKLSAgICAgICJ0eXBlIjogIm1lcmdlLWNvbmZsaWN0IgotICAgIH0sCi0gICAgImZpbGVuYW1l IjogewotICAgICAgInR5cGUiOiAiZmlsZW5hbWUiCi0gICAgfSwKLSAgICAianNvbiI6IHsKLSAg ICAgICJ0eXBlIjogImpzb24iLAotICAgICAgImluY2x1ZGUiOiAiKFxcLmFyY2xpbnR8XFwuanNv biQpIgotICAgIH0KLSAgfQotfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvT29wcy5yZWogL3Vzci9z cmMvT29wcy5yZWoKLS0tIHVzci9zcmMvT29wcy5yZWoJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL09vcHMucmVqCTIwMTYtMTEtMzAgMTA6NTY6MTAuNDM0 MDMyMDAwICswMDAwCkBAIC0wLDAgKzEsMjkyIEBACitAQCAtMzcsNiArMzcsNyBAQAorICNpbmNs dWRlIDxuZXQvZXRoZXJuZXQuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRl IDxuZXRpbmV0L3RjcC5oPgorKyNpbmNsdWRlIDxuZXQvaWYuaD4gLyogSUZOQU1TSVogKi8KKyAK KyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KK0BAIC01NSw2ICs1Niw4 IEBACisgI2luY2x1ZGUgImJoeXZlcnVuLmgiCisgI2luY2x1ZGUgInBjaV9lbXVsLmgiCisgI2lu Y2x1ZGUgIm1ldmVudC5oIgorKyNpbmNsdWRlICJuZXRfdXRpbHMuaCIgICAgLyogTUFDIGFkZHJl c3MgZ2VuZXJhdGlvbiAqLworKyNpbmNsdWRlICJuZXRfYmFja2VuZHMuaCIKKyAKKyAvKiBIYXJk d2FyZS9yZWdpc3RlciBkZWZpbml0aW9ucyBYWFg6IG1vdmUgc29tZSB0byBjb21tb24gY29kZS4g Ki8KKyAjZGVmaW5lIEU4MjU0NV9WRU5ET1JfSURfSU5URUwJCQkweDgwODYKK0BAIC0yMzQsMTEg KzIzNywxMCBAQAorIHN0cnVjdCBlODI1NDVfc29mdGMgeworIAlzdHJ1Y3QgcGNpX2Rldmluc3Qg KmVzY19waTsKKyAJc3RydWN0IHZtY3R4CSplc2NfY3R4OworLQlzdHJ1Y3QgbWV2ZW50ICAgKmVz Y19tZXZwOworIAlzdHJ1Y3QgbWV2ZW50ICAgKmVzY19tZXZwaXRyOworIAlwdGhyZWFkX211dGV4 X3QJZXNjX210eDsKKyAJc3RydWN0IGV0aGVyX2FkZHIgZXNjX21hYzsKKy0JaW50CQllc2NfdGFw ZmQ7CisrCXN0cnVjdCBuZXRfYmFja2VuZCAqZXNjX2JlOworIAorIAkvKiBHZW5lcmFsICovCisg CXVpbnQzMl90CWVzY19DVFJMOwkvKiB4MDAwMCBkZXZpY2UgY3RsICovCitAQCAtMzQ0LDcgKzM0 Niw3IEBACisgc3RhdGljIHZvaWQgZTgyNTQ1X3Jlc2V0KHN0cnVjdCBlODI1NDVfc29mdGMgKnNj LCBpbnQgZGV2KTsKKyBzdGF0aWMgdm9pZCBlODI1NDVfcnhfZW5hYmxlKHN0cnVjdCBlODI1NDVf c29mdGMgKnNjKTsKKyBzdGF0aWMgdm9pZCBlODI1NDVfcnhfZGlzYWJsZShzdHJ1Y3QgZTgyNTQ1 X3NvZnRjICpzYyk7Cistc3RhdGljIHZvaWQgZTgyNTQ1X3RhcF9jYWxsYmFjayhpbnQgZmQsIGVu dW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSk7Cisrc3RhdGljIHZvaWQgZTgyNTQ1X3J4X2Nh bGxiYWNrKGludCBmZCwgZW51bSBldl90eXBlIHR5cGUsIHZvaWQgKnBhcmFtKTsKKyBzdGF0aWMg dm9pZCBlODI1NDVfdHhfc3RhcnQoc3RydWN0IGU4MjU0NV9zb2Z0YyAqc2MpOworIHN0YXRpYyB2 b2lkIGU4MjU0NV90eF9lbmFibGUoc3RydWN0IGU4MjU0NV9zb2Z0YyAqc2MpOworIHN0YXRpYyB2 b2lkIGU4MjU0NV90eF9kaXNhYmxlKHN0cnVjdCBlODI1NDVfc29mdGMgKnNjKTsKK0BAIC04MTMs MTEgKzgxNSw5IEBACisgCXJldHVybiAoMjU2KTsJLyogRm9yYmlkZGVuIHZhbHVlLiAqLworIH0K KyAKKy1zdGF0aWMgdWludDhfdCBkdW1teWJ1ZlsyMDQ4XTsKKy0KKyAvKiBYWFggb25lIHBhY2tl dCBhdCBhIHRpbWUgdW50aWwgdGhpcyBpcyBkZWJ1Z2dlZCAqLworIHN0YXRpYyB2b2lkCistZTgy NTQ1X3RhcF9jYWxsYmFjayhpbnQgZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSkK KytlODI1NDVfcnhfY2FsbGJhY2soaW50IGZkLCBlbnVtIGV2X3R5cGUgdHlwZSwgdm9pZCAqcGFy YW0pCisgeworIAlzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYyA9IHBhcmFtOworIAlzdHJ1Y3QgZTEw MDBfcnhfZGVzYyAqcnhkOworQEAgLTgzMiw3ICs4MzIsNyBAQAorIAlpZiAoIXNjLT5lc2Nfcnhf ZW5hYmxlZCB8fCBzYy0+ZXNjX3J4X2xvb3BiYWNrKSB7CisgCQlEUFJJTlRGKCJyeCBkaXNhYmxl ZCAoISVkIHx8ICVkKSAtLSBwYWNrZXQocykgZHJvcHBlZFxyXG4iLAorIAkJICAgIHNjLT5lc2Nf cnhfZW5hYmxlZCwgc2MtPmVzY19yeF9sb29wYmFjayk7CistCQl3aGlsZSAocmVhZChzYy0+ZXNj X3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1bW15YnVmKSkgPiAwKSB7CisrCQl3aGlsZSAobmV0 YmVfcnhfZGlzY2FyZChzYy0+ZXNjX2JlKSA+IDApIHsKKyAJCX0KKyAJCWdvdG8gZG9uZTE7Cisg CX0KK0BAIC04NDUsNyArODQ1LDcgQEAKKyAJaWYgKGxlZnQgPCBtYXhwa3RkZXNjKSB7CisgCQlE UFJJTlRGKCJyeCBvdmVyZmxvdyAoJWQgPCAlZCkgLS0gcGFja2V0KHMpIGRyb3BwZWRcclxuIiwK KyAJCSAgICBsZWZ0LCBtYXhwa3RkZXNjKTsKKy0JCXdoaWxlIChyZWFkKHNjLT5lc2NfdGFwZmQs IGR1bW15YnVmLCBzaXplb2YoZHVtbXlidWYpKSA+IDApIHsKKysJCXdoaWxlIChuZXRiZV9yeF9k aXNjYXJkKHNjLT5lc2NfYmUpID4gMCkgeworIAkJfQorIAkJZ290byBkb25lMTsKKyAJfQorQEAg LTg2Miw5ICs4NjIsOSBAQAorIAkJCSAgICByeGQtPmJ1ZmZlcl9hZGRyLCBidWZzeik7CisgCQkJ dmVjW2ldLmlvdl9sZW4gPSBidWZzejsKKyAJCX0KKy0JCWxlbiA9IHJlYWR2KHNjLT5lc2NfdGFw ZmQsIHZlYywgbWF4cGt0ZGVzYyk7CisrCQlsZW4gPSBuZXRiZV9yZWN2KHNjLT5lc2NfYmUsIHZl YywgbWF4cGt0ZGVzYyk7CisgCQlpZiAobGVuIDw9IDApIHsKKy0JCQlEUFJJTlRGKCJ0YXA6IHJl YWR2KCkgcmV0dXJuZWQgJWRcbiIsIGxlbik7CisrCQkJRFBSSU5URigiYmU6IHJlY3YoKSByZXR1 cm5lZCAlZFxuIiwgbGVuKTsKKyAJCQlnb3RvIGRvbmU7CisgCQl9CisgCitAQCAtMTAzNiwxMyAr MTAzNiwxMCBAQAorIH0KKyAKKyBzdGF0aWMgdm9pZAorLWU4MjU0NV90cmFuc21pdF9iYWNrZW5k KHN0cnVjdCBlODI1NDVfc29mdGMgKnNjLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkK KytlODI1NDVfdHJhbnNtaXRfYmFja2VuZChzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYywgc3RydWN0 IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCisrCQkJdWludDMyX3QgbGVuKQorIHsKKy0KKy0JaWYg KHNjLT5lc2NfdGFwZmQgPT0gLTEpCistCQlyZXR1cm47CistCistCSh2b2lkKSB3cml0ZXYoc2Mt PmVzY190YXBmZCwgaW92LCBpb3ZjbnQpOworKwluZXRiZV9zZW5kKHNjLT5lc2NfYmUsIGlvdiwg aW92Y250LCBsZW4sIDApOworIH0KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTEwNzgsNyArMTA3NSw3 IEBACisgCisgCWNraW5mb1swXS5ja192YWxpZCA9IGNraW5mb1sxXS5ja192YWxpZCA9IDA7Cisg CWlvdmNudCA9IDA7CistCXRsZW4gPSAwOworKwl0bGVuID0gMDsgLyogdG90YWwgbGVuZ3RoICov CisgCW50eXBlID0gMDsKKyAJdHNvID0gMDsKKyAJb2hlYWQgPSBoZWFkOworQEAgLTEyMDMsNiAr MTIwMCw3IEBACisgCQloZHJsZW4gPSBFVEhFUl9BRERSX0xFTioyOworIAkJdmxlbiA9IEVUSEVS X1ZMQU5fRU5DQVBfTEVOOworIAl9CisrCXRsZW4gKz0gdmxlbjsKKyAJaWYgKCF0c28pIHsKKyAJ CS8qIEVzdGltYXRlIHJlcXVpcmVkIHdyaXRhYmxlIHNwYWNlIGZvciBjaGVja3N1bXMuICovCisg CQlpZiAoY2tpbmZvWzBdLmNrX3ZhbGlkKQorQEAgLTEyNjgsNyArMTI2Niw3IEBACisgCQkJZTgy NTQ1X3RyYW5zbWl0X2NoZWNrc3VtKGlvdiwgaW92Y250LCAmY2tpbmZvWzBdKTsKKyAJCWlmIChj a2luZm9bMV0uY2tfdmFsaWQpCisgCQkJZTgyNTQ1X3RyYW5zbWl0X2NoZWNrc3VtKGlvdiwgaW92 Y250LCAmY2tpbmZvWzFdKTsKKy0JCWU4MjU0NV90cmFuc21pdF9iYWNrZW5kKHNjLCBpb3YsIGlv dmNudCk7CisrCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChzYywgaW92LCBpb3ZjbnQsIHRsZW4p OworIAkJZ290byBkb25lOworIAl9CisgCitAQCAtMTI5MiwxMyArMTI5MCwxNCBAQAorIAkJLyog Q29uc3RydWN0IElPVnMgZm9yIHRoZSBzZWdtZW50LiAqLworIAkJLyogSW5jbHVkZSB3aG9sZSBv cmlnaW5hbCBoZWFkZXIuICovCisgCQl0aW92WzBdLmlvdl9iYXNlID0gaGRyOworLQkJdGlvdlsw XS5pb3ZfbGVuID0gaGRybGVuOworKwkJdGlvdlswXS5pb3ZfbGVuID0gdGxlbiA9IGhkcmxlbjsK KyAJCXRpb3ZjbnQgPSAxOworIAkJLyogSW5jbHVkZSByZXNwZWN0aXZlIHBhcnQgb2YgcGF5bG9h ZCBJT1YuICovCisgCQlmb3IgKG5sZWZ0ID0gbm93OyBwdiA8IGlvdmNudCAmJiBubGVmdCA+IDA7 IG5sZWZ0IC09IG5ub3cpIHsKKyAJCQlubm93ID0gTUlOKG5sZWZ0LCBpb3ZbcHZdLmlvdl9sZW4g LSBwdm9mZik7CisgCQkJdGlvdlt0aW92Y250XS5pb3ZfYmFzZSA9IGlvdltwdl0uaW92X2Jhc2Ug KyBwdm9mZjsKKyAJCQl0aW92W3Rpb3ZjbnQrK10uaW92X2xlbiA9IG5ub3c7CisrCQkJdGxlbiAr PSBubm93OworIAkJCWlmIChwdm9mZiArIG5ub3cgPT0gaW92W3B2XS5pb3ZfbGVuKSB7CisgCQkJ CXB2Kys7CisgCQkJCXB2b2ZmID0gMDsKK0BAIC0xMzUxLDcgKzEzNTAsNyBAQAorIAkJCSAgICBl ODI1NDVfY2FycnkodGNwc3VtKTsKKyAJCQllODI1NDVfdHJhbnNtaXRfY2hlY2tzdW0odGlvdiwg dGlvdmNudCwgJmNraW5mb1sxXSk7CisgCQl9CistCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChz YywgdGlvdiwgdGlvdmNudCk7CisrCQllODI1NDVfdHJhbnNtaXRfYmFja2VuZChzYywgdGlvdiwg dGlvdmNudCwgdGxlbik7CisgCX0KKyAKKyBkb25lOgorQEAgLTIxOTgsODAgKzIxOTcsMTcgQEAK KyAJc2MtPmVzY19UWERDVEwgPSAwOworIH0KKyAKKy1zdGF0aWMgdm9pZAorLWU4MjU0NV9vcGVu X3RhcChzdHJ1Y3QgZTgyNTQ1X3NvZnRjICpzYywgY2hhciAqb3B0cykKKy17CistCWNoYXIgdGJ1 Zls4MF07CistCQorLQlpZiAob3B0cyA9PSBOVUxMKSB7CistCQlzYy0+ZXNjX3RhcGZkID0gLTE7 CistCQlyZXR1cm47CistCX0KKy0KKy0Jc3RyY3B5KHRidWYsICIvZGV2LyIpOworLQlzdHJsY2F0 KHRidWYsIG9wdHMsIHNpemVvZih0YnVmKSk7CistCistCXNjLT5lc2NfdGFwZmQgPSBvcGVuKHRi dWYsIE9fUkRXUik7CistCWlmIChzYy0+ZXNjX3RhcGZkID09IC0xKSB7CistCQlEUFJJTlRGKCJ1 bmFibGUgdG8gb3BlbiB0YXAgZGV2aWNlICVzXG4iLCBvcHRzKTsKKy0JCWV4aXQoMSk7CistCX0K Ky0KKy0JLyoKKy0JICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKKy0J ICogbm90aWZpY2F0aW9ucyB3aXRoIHRoZSBldmVudCBsb29wCistCSAqLworLQlpbnQgb3B0ID0g MTsKKy0JaWYgKGlvY3RsKHNjLT5lc2NfdGFwZmQsIEZJT05CSU8sICZvcHQpIDwgMCkgeworLQkJ V1BSSU5URigidGFwIGRldmljZSBPX05PTkJMT0NLIGZhaWxlZDogJWRcbiIsIGVycm5vKTsKKy0J CWNsb3NlKHNjLT5lc2NfdGFwZmQpOworLQkJc2MtPmVzY190YXBmZCA9IC0xOworLQl9CistCist CXNjLT5lc2NfbWV2cCA9IG1ldmVudF9hZGQoc2MtPmVzY190YXBmZCwKKy0JCQkJICBFVkZfUkVB RCwKKy0JCQkJICBlODI1NDVfdGFwX2NhbGxiYWNrLAorLQkJCQkgIHNjKTsKKy0JaWYgKHNjLT5l c2NfbWV2cCA9PSBOVUxMKSB7CistCQlEUFJJTlRGKCJDb3VsZCBub3QgcmVnaXN0ZXIgbWV2ZW50 ICVkXG4iLCBFVkZfUkVBRCk7CistCQljbG9zZShzYy0+ZXNjX3RhcGZkKTsKKy0JCXNjLT5lc2Nf dGFwZmQgPSAtMTsKKy0JfQorLX0KKy0KKy1zdGF0aWMgaW50CistZTgyNTQ1X3BhcnNlbWFjKGNo YXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKQorLXsKKy0Jc3RydWN0IGV0aGVyX2FkZHIg KmVhOworLQljaGFyICp0bXBzdHI7CistCWNoYXIgemVyb19hZGRyW0VUSEVSX0FERFJfTEVOXSA9 IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworLQorLQl0bXBzdHIgPSBzdHJzZXAoJm1hY19zdHIsIj0i KTsKKy0JaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3RyY21wKHRtcHN0ciwibWFjIikpKSB7 CistCQllYSA9IGV0aGVyX2F0b24obWFjX3N0cik7CistCQlpZiAoZWEgPT0gTlVMTCB8fCBFVEhF Ul9JU19NVUxUSUNBU1QoZWEtPm9jdGV0KSB8fAorLQkJICAgIG1lbWNtcChlYS0+b2N0ZXQsIHpl cm9fYWRkciwgRVRIRVJfQUREUl9MRU4pID09IDApIHsKKy0JCQlmcHJpbnRmKHN0ZGVyciwgIklu dmFsaWQgTUFDICVzXG4iLCBtYWNfc3RyKTsKKy0JCQlyZXR1cm4gKDEpOworLQkJfSBlbHNlCist CQkJbWVtY3B5KG1hY19hZGRyLCBlYS0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKy0JfQorLQly ZXR1cm4gKDApOworLX0KKy0KKyBzdGF0aWMgaW50CisgZTgyNTQ1X2luaXQoc3RydWN0IHZtY3R4 ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIGNoYXIgKm9wdHMpCisgeworLQlEUFJJTlRG KCJMb2FkaW5nIHdpdGggb3B0aW9uczogJXNcclxuIiwgb3B0cyk7CistCistCU1ENV9DVFggbWRj dHg7CistCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XTsKKyAJY2hhciBuc3RyWzgwXTsKKyAJc3Ry dWN0IGU4MjU0NV9zb2Z0YyAqc2M7CisgCWNoYXIgKmRldm5hbWU7CisgCWNoYXIgKnZ0b3B0czsK KyAJaW50IG1hY19wcm92aWRlZDsKKyAKKysJRFBSSU5URigiTG9hZGluZyB3aXRoIG9wdGlvbnM6 ICVzXHJcbiIsIG9wdHMpOworKworIAkvKiBTZXR1cCBvdXIgc29mdGMgKi8KKyAJc2MgPSBjYWxs b2Moc2l6ZW9mKCpzYyksIDEpOworIAorQEAgLTIzMDksMTEgKzIyNDUsMTAgQEAKKyAJCUU4MjU0 NV9CQVJfSU9fTEVOKTsKKyAKKyAJLyoKKy0JICogQXR0ZW1wdCB0byBvcGVuIHRoZSB0YXAgZGV2 aWNlIGFuZCByZWFkIHRoZSBNQUMgYWRkcmVzcworLQkgKiBpZiBzcGVjaWZpZWQuICBDb3BpZWQg ZnJvbSB2aXJ0aW8tbmV0LCBzbGlnaHRseSBtb2RpZmllZC4KKysJICogQXR0ZW1wdCB0byBvcGVu IHRoZSBiYWNrZW5kIGRldmljZSBhbmQgcmVhZCB0aGUgTUFDIGFkZHJlc3MKKysJICogaWYgc3Bl Y2lmaWVkLiBDb3BpZWQgZnJvbSB2aXJ0aW8tbmV0LCBzbGlnaHRseSBtb2RpZmllZC4KKyAJICov CisgCW1hY19wcm92aWRlZCA9IDA7CistCXNjLT5lc2NfdGFwZmQgPSAtMTsKKyAJaWYgKG9wdHMg IT0gTlVMTCkgeworIAkJaW50IGVycjsKKyAKK0BAIC0yMzIxLDcgKzIyNTYsNyBAQAorIAkJKHZv aWQpIHN0cnNlcCgmdnRvcHRzLCAiLCIpOworIAorIAkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7Cist CQkJZXJyID0gZTgyNTQ1X3BhcnNlbWFjKHZ0b3B0cywgc2MtPmVzY19tYWMub2N0ZXQpOworKwkJ CWVyciA9IG5ldF9wYXJzZW1hYyh2dG9wdHMsIHNjLT5lc2NfbWFjLm9jdGV0KTsKKyAJCQlpZiAo ZXJyICE9IDApIHsKKyAJCQkJZnJlZShkZXZuYW1lKTsKKyAJCQkJcmV0dXJuIChlcnIpOworQEAg LTIzMjksOSArMjI2NCwxMSBAQAorIAkJCW1hY19wcm92aWRlZCA9IDE7CisgCQl9CisgCistCQlp ZiAoc3RybmNtcChkZXZuYW1lLCAidGFwIiwgMykgPT0gMCB8fAorLQkJICAgIHN0cm5jbXAoZGV2 bmFtZSwgInZtbmV0IiwgNSkgPT0gMCkKKy0JCQllODI1NDVfb3Blbl90YXAoc2MsIGRldm5hbWUp OworKwkJc2MtPmVzY19iZSA9IG5ldGJlX2luaXQoZGV2bmFtZSwgZTgyNTQ1X3J4X2NhbGxiYWNr LCBzYyk7CisrCQlpZiAoIXNjLT5lc2NfYmUpIHsKKysJCQlXUFJJTlRGKCJuZXQgYmFja2VuZCAn JXMnIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKysJCQkJZGV2bmFtZSk7CisrCQl9CisgCisg CQlmcmVlKGRldm5hbWUpOworIAl9CitAQCAtMjM0MSwxOSArMjI3OCw3IEBACisgCSAqIGZvbGxv d2VkIGJ5IGFuIE1ENSBvZiB0aGUgUENJIHNsb3QvZnVuYyBudW1iZXIgYW5kIGRldiBuYW1lCisg CSAqLworIAlpZiAoIW1hY19wcm92aWRlZCkgeworLQkJc25wcmludGYobnN0ciwgc2l6ZW9mKG5z dHIpLCAiJWQtJWQtJXMiLCBwaS0+cGlfc2xvdCwKKy0JCSAgICBwaS0+cGlfZnVuYywgdm1uYW1l KTsKKy0KKy0JCU1ENUluaXQoJm1kY3R4KTsKKy0JCU1ENVVwZGF0ZSgmbWRjdHgsIG5zdHIsIHN0 cmxlbihuc3RyKSk7CistCQlNRDVGaW5hbChkaWdlc3QsICZtZGN0eCk7CistCistCQlzYy0+ZXNj X21hYy5vY3RldFswXSA9IDB4MDA7CistCQlzYy0+ZXNjX21hYy5vY3RldFsxXSA9IDB4YTA7Cist CQlzYy0+ZXNjX21hYy5vY3RldFsyXSA9IDB4OTg7CistCQlzYy0+ZXNjX21hYy5vY3RldFszXSA9 IGRpZ2VzdFswXTsKKy0JCXNjLT5lc2NfbWFjLm9jdGV0WzRdID0gZGlnZXN0WzFdOworLQkJc2Mt PmVzY19tYWMub2N0ZXRbNV0gPSBkaWdlc3RbMl07CisrCQluZXRfZ2VubWFjKHBpLCBzYy0+ZXNj X21hYy5vY3RldCk7CisgCX0KKyAKKyAJLyogSC93IGluaXRpYXRlZCByZXNldCAqLwpkaWZmIC11 IC1yIC1OIHVzci9zcmMvZXRjL3NyYy5jb25mIC91c3Ivc3JjL2V0Yy9zcmMuY29uZgotLS0gdXNy L3NyYy9ldGMvc3JjLmNvbmYJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr IC91c3Ivc3JjL2V0Yy9zcmMuY29uZgkyMDE2LTEyLTAxIDEwOjA2OjE4LjAxMTQ2MzAwMCArMDAw MApAQCAtMCwwICsxLDUgQEAKK1dJVEhfQ0xBTkc9IHllcworV0lUSF9DTEFOR19FWFRSQVM9IHll cyAjIEJ1aWxkIGFkZGl0aW9uYWwgY2xhbmcgYW5kIGxsdm0gdG9vbHMsIHN1Y2ggYXMgYnVncG9p bnQuCitXSVRIX0NMQU5HX0lTX0NDPSB5ZXMgICMgVXNlZnVsIGZvciBzb21lIGJ1aWxkd29ybGQg ZXJyb3JzCisjIFdJVEhPVVRfR0NDPSB5ZXMKKwpkaWZmIC11IC1yIC1OIHVzci9zcmMvbGliL2xp YnZtbWFwaS92bW1hcGkuYyAvdXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jCi0tLSB1c3Iv c3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMJMjAxNi0wOS0yOSAwMDoyNjowMi4wMDAwMDAwMDAg KzAxMDAKKysrIC91c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMJMjAxNi0xMS0zMCAxMDo1 NjowNS43ODE2MTYwMDAgKzAwMDAKQEAgLTg4Miw2ICs4ODIsNTUgQEAKIAlyZXR1cm4gKGlvY3Rs KGN0eC0+ZmQsIFZNX01BUF9QUFRERVZfTU1JTywgJnBwdG1taW8pKTsKIH0KIAorLyoKKyAqIEV4 cG9ydCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZNLCB1c2VyZnVs IGZvciBleHRlcm5hbAorICogcHJvZ3JhbXMgKGUuZy4gdG8gaXNzdWUgaW9jdGwoKSkuCisgKi8K K2ludAordm1fZ2V0X2ZkKHN0cnVjdCB2bWN0eCAqY3R4KQoreworCXJldHVybiAoY3R4LT5mZCk7 Cit9CisKKy8qCisgKiBNYXAgYW4gdXNlci1zcGFjZSBidWZmZXIgaW50byB0aGUgVk0gYXQgYSBn aXZlbiBwaHlzaWNhbCBhZGRyZXNzLgorICogVG8gYmUgdXNlZCBmb3IgZGV2aWNlcyB0aGF0IGV4 cG9zZSBpbnRlcm5hbCBtZW1vcnkuCisgKi8KK2ludAordm1fbWFwX3VzZXJfYnVmKHN0cnVjdCB2 bWN0eCAqY3R4LCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwgdm9pZCAqaG9zdF9idWYpCit7 CisJc3RydWN0IHZtX3VzZXJfYnVmIHVzZXJfYnVmOworCisJYnplcm8oJnVzZXJfYnVmLCBzaXpl b2YodXNlcl9idWYpKTsKKwl1c2VyX2J1Zi5ncGEgPSBncGE7CisJdXNlcl9idWYubGVuID0gbGVu OworCXVzZXJfYnVmLmFkZHIgPSBob3N0X2J1ZjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwg Vk1fTUFQX1VTRVJfQlVGLCAmdXNlcl9idWYpKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGhhbmRs ZXIgZm9yIGd1ZXN0IEkvTyBhY2Nlc3NlcyBvbiBhIGdpdmVuIEkvTyBwb3J0LCBvcHRpb25hbGx5 CisgKiBmaWx0ZXJpbmcgb24gdGhlIGRhdGEuIFFFTVUvS1ZNIGltcGxlbWVudCBhIHNpbWlsYXIg ZnVuY3Rpb25hbGl0eS4KKyAqLworaW50Cit2bV9pb19yZWdfaGFuZGxlcihzdHJ1Y3Qgdm1jdHgg KmN0eCwgdWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJCSAgdWludDMyX3QgbWFza19kYXRh LCB1aW50MzJfdCBkYXRhLAorCQkgIGVudW0gdm1faW9fcmVnaF90eXBlIHR5cGUsIHZvaWQgKmFy ZykKK3sKKwlzdHJ1Y3Qgdm1faW9fcmVnX2hhbmRsZXIgaW9yZWdoOworCisJYnplcm8oJmlvcmVn aCwgc2l6ZW9mKGlvcmVnaCkpOworCWlvcmVnaC5wb3J0ID0gcG9ydDsKKwlpb3JlZ2guaW4gPSBp bjsKKwlpb3JlZ2gubWFza19kYXRhID0gbWFza19kYXRhOworCWlvcmVnaC5kYXRhID0gZGF0YTsK Kwlpb3JlZ2gudHlwZSA9IHR5cGU7CisJaW9yZWdoLmFyZyA9IGFyZzsKKworCXJldHVybiAoaW9j dGwoY3R4LT5mZCwgVk1fSU9fUkVHX0hBTkRMRVIsICZpb3JlZ2gpKTsKK30KKwogaW50CiB2bV9z ZXR1cF9wcHRkZXZfbXNpKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50IGJ1cywgaW50 IHNsb3QsIGludCBmdW5jLAogICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywgaW50IG51 bXZlYykKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMub3JpZyAv dXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jLm9yaWcKLS0tIHVzci9zcmMvbGliL2xpYnZt bWFwaS92bW1hcGkuYy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr KyAvdXNyL3NyYy9saWIvbGlidm1tYXBpL3ZtbWFwaS5jLm9yaWcJMjAxNi0xMS0zMCAxMDo1Mjo1 MS43MDI2MjkwMDAgKzAwMDAKQEAgLTAsMCArMSwxNDEzIEBACisvKi0KKyAqIENvcHlyaWdodCAo YykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w L2xpYi9saWJ2bW1hcGkvdm1tYXBpLmMgMjk1ODgxIDIwMTYtMDItMjIgMDk6MDQ6MzZaIHNrcmEg JAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogcmVs ZW5nLzExLjAvbGliL2xpYnZtbWFwaS92bW1hcGkuYyAyOTU4ODEgMjAxNi0wMi0yMiAwOTowNDoz Nlogc2tyYSAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lz Y3RsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNp bmNsdWRlIDxzeXMvX2lvdmVjLmg+CisjaW5jbHVkZSA8c3lzL2NwdXNldC5oPgorCisjaW5jbHVk ZSA8eDg2L3NlZ21lbnRzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zcGVjaWFscmVnLmg+CisKKyNp bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNu dGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGxpYnV0aWwuaD4KKworI2lu Y2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8bWFjaGluZS92bW1fZGV2Lmg+CisKKyNp bmNsdWRlICJ2bW1hcGkuaCIKKworI2RlZmluZQlNQgkoMTAyNCAqIDEwMjRVTCkKKyNkZWZpbmUJ R0IJKDEwMjQgKiAxMDI0ICogMTAyNFVMKQorCisvKgorICogU2l6ZSBvZiB0aGUgZ3VhcmQgcmVn aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZQorICogbWFwcGlu ZyB0aGUgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5LiBUaGlzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0 aGUKKyAqIHN1cGVycGFnZSBzaXplIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICovCisjZGVm aW5lCVZNX01NQVBfR1VBUkRfU0laRQkoNCAqIE1CKQorCisjZGVmaW5lCVBST1RfUlcJCShQUk9U X1JFQUQgfCBQUk9UX1dSSVRFKQorI2RlZmluZQlQUk9UX0FMTAkoUFJPVF9SRUFEIHwgUFJPVF9X UklURSB8IFBST1RfRVhFQykKKworc3RydWN0IHZtY3R4IHsKKwlpbnQJZmQ7CisJdWludDMyX3Qg bG93bWVtX2xpbWl0OworCWludAltZW1mbGFnczsKKwlzaXplX3QJbG93bWVtOworCXNpemVfdAlo aWdobWVtOworCWNoYXIJKmJhc2VhZGRyOworCWNoYXIJKm5hbWU7Cit9OworCisjZGVmaW5lCUNS RUFURSh4KSAgc3lzY3RsYnluYW1lKCJody52bW0uY3JlYXRlIiwgTlVMTCwgTlVMTCwgKHgpLCBz dHJsZW4oKHgpKSkKKyNkZWZpbmUJREVTVFJPWSh4KSBzeXNjdGxieW5hbWUoImh3LnZtbS5kZXN0 cm95IiwgTlVMTCwgTlVMTCwgKHgpLCBzdHJsZW4oKHgpKSkKKworc3RhdGljIGludAordm1fZGV2 aWNlX29wZW4oY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICAgICAgaW50IGZkLCBsZW47CisgICAg ICAgIGNoYXIgKnZtZmlsZTsKKworCWxlbiA9IHN0cmxlbigiL2Rldi92bW0vIikgKyBzdHJsZW4o bmFtZSkgKyAxOworCXZtZmlsZSA9IG1hbGxvYyhsZW4pOworCWFzc2VydCh2bWZpbGUgIT0gTlVM TCk7CisJc25wcmludGYodm1maWxlLCBsZW4sICIvZGV2L3ZtbS8lcyIsIG5hbWUpOworCisgICAg ICAgIC8qIE9wZW4gdGhlIGRldmljZSBmaWxlICovCisgICAgICAgIGZkID0gb3Blbih2bWZpbGUs IE9fUkRXUiwgMCk7CisKKwlmcmVlKHZtZmlsZSk7CisgICAgICAgIHJldHVybiAoZmQpOworfQor CitpbnQKK3ZtX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKQoreworCisJcmV0dXJuIChDUkVBVEUo KGNoYXIgKiluYW1lKSk7Cit9CisKK3N0cnVjdCB2bWN0eCAqCit2bV9vcGVuKGNvbnN0IGNoYXIg Km5hbWUpCit7CisJc3RydWN0IHZtY3R4ICp2bTsKKworCXZtID0gbWFsbG9jKHNpemVvZihzdHJ1 Y3Qgdm1jdHgpICsgc3RybGVuKG5hbWUpICsgMSk7CisJYXNzZXJ0KHZtICE9IE5VTEwpOworCisJ dm0tPmZkID0gLTE7CisJdm0tPm1lbWZsYWdzID0gMDsKKwl2bS0+bG93bWVtX2xpbWl0ID0gMyAq IEdCOworCXZtLT5uYW1lID0gKGNoYXIgKikodm0gKyAxKTsKKwlzdHJjcHkodm0tPm5hbWUsIG5h bWUpOworCisJaWYgKCh2bS0+ZmQgPSB2bV9kZXZpY2Vfb3Blbih2bS0+bmFtZSkpIDwgMCkKKwkJ Z290byBlcnI7CisKKwlyZXR1cm4gKHZtKTsKK2VycjoKKwl2bV9kZXN0cm95KHZtKTsKKwlyZXR1 cm4gKE5VTEwpOworfQorCit2b2lkCit2bV9kZXN0cm95KHN0cnVjdCB2bWN0eCAqdm0pCit7CisJ YXNzZXJ0KHZtICE9IE5VTEwpOworCisJaWYgKHZtLT5mZCA+PSAwKQorCQljbG9zZSh2bS0+ZmQp OworCURFU1RST1kodm0tPm5hbWUpOworCisJZnJlZSh2bSk7Cit9CisKK2ludAordm1fcGFyc2Vf bWVtc2l6ZShjb25zdCBjaGFyICpvcHRhcmcsIHNpemVfdCAqcmV0X21lbXNpemUpCit7CisJY2hh ciAqZW5kcHRyOworCXNpemVfdCBvcHR2YWw7CisJaW50IGVycm9yOworCisJb3B0dmFsID0gc3Ry dG91bChvcHRhcmcsICZlbmRwdHIsIDApOworCWlmICgqb3B0YXJnICE9ICdcMCcgJiYgKmVuZHB0 ciA9PSAnXDAnKSB7CisJCS8qCisJCSAqIEZvciB0aGUgc2FrZSBvZiBiYWNrd2FyZCBjb21wYXRp YmlsaXR5IGlmIHRoZSBtZW1vcnkgc2l6ZQorCQkgKiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQg bGluZSBpcyBsZXNzIHRoYW4gYSBtZWdhYnl0ZSB0aGVuCisJCSAqIGl0IGlzIGludGVycHJldGVk IGFzIGJlaW5nIGluIHVuaXRzIG9mIE1CLgorCQkgKi8KKwkJaWYgKG9wdHZhbCA8IE1CKQorCQkJ b3B0dmFsICo9IE1COworCQkqcmV0X21lbXNpemUgPSBvcHR2YWw7CisJCWVycm9yID0gMDsKKwl9 IGVsc2UKKwkJZXJyb3IgPSBleHBhbmRfbnVtYmVyKG9wdGFyZywgcmV0X21lbXNpemUpOworCisJ cmV0dXJuIChlcnJvcik7Cit9CisKK3VpbnQzMl90Cit2bV9nZXRfbG93bWVtX2xpbWl0KHN0cnVj dCB2bWN0eCAqY3R4KQoreworCisJcmV0dXJuIChjdHgtPmxvd21lbV9saW1pdCk7Cit9CisKK3Zv aWQKK3ZtX3NldF9sb3dtZW1fbGltaXQoc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQzMl90IGxpbWl0 KQoreworCisJY3R4LT5sb3dtZW1fbGltaXQgPSBsaW1pdDsKK30KKwordm9pZAordm1fc2V0X21l bWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgZmxhZ3MpCit7CisKKwljdHgtPm1lbWZsYWdz ID0gZmxhZ3M7Cit9CisKK2ludAordm1fZ2V0X21lbWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4KQor eworCisJcmV0dXJuIChjdHgtPm1lbWZsYWdzKTsKK30KKworLyoKKyAqIE1hcCBzZWdtZW50ICdz ZWdpZCcgc3RhcnRpbmcgYXQgJ29mZicgaW50byBndWVzdCBhZGRyZXNzIHJhbmdlIFtncGEsZ3Bh K2xlbikuCisgKi8KK2ludAordm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3Bh ZGRyX3QgZ3BhLCBpbnQgc2VnaWQsIHZtX29vZmZzZXRfdCBvZmYsCisgICAgc2l6ZV90IGxlbiwg aW50IHByb3QpCit7CisJc3RydWN0IHZtX21lbW1hcCBtZW1tYXA7CisJaW50IGVycm9yLCBmbGFn czsKKworCW1lbW1hcC5ncGEgPSBncGE7CisJbWVtbWFwLnNlZ2lkID0gc2VnaWQ7CisJbWVtbWFw LnNlZ29mZiA9IG9mZjsKKwltZW1tYXAubGVuID0gbGVuOworCW1lbW1hcC5wcm90ID0gcHJvdDsK KwltZW1tYXAuZmxhZ3MgPSAwOworCisJaWYgKGN0eC0+bWVtZmxhZ3MgJiBWTV9NRU1fRl9XSVJF RCkKKwkJbWVtbWFwLmZsYWdzIHw9IFZNX01FTU1BUF9GX1dJUkVEOworCisJLyoKKwkgKiBJZiB0 aGlzIG1hcHBpbmcgYWxyZWFkeSBleGlzdHMgdGhlbiBkb24ndCBjcmVhdGUgaXQgYWdhaW4uIFRo aXMKKwkgKiBpcyB0aGUgY29tbW9uIGNhc2UgZm9yIFNZU01FTSBtYXBwaW5ncyBjcmVhdGVkIGJ5 IGJoeXZlbG9hZCg4KS4KKwkgKi8KKwllcnJvciA9IHZtX21tYXBfZ2V0bmV4dChjdHgsICZncGEs ICZzZWdpZCwgJm9mZiwgJmxlbiwgJnByb3QsICZmbGFncyk7CisJaWYgKGVycm9yID09IDAgJiYg Z3BhID09IG1lbW1hcC5ncGEpIHsKKwkJaWYgKHNlZ2lkICE9IG1lbW1hcC5zZWdpZCB8fCBvZmYg IT0gbWVtbWFwLnNlZ29mZiB8fAorCQkgICAgcHJvdCAhPSBtZW1tYXAucHJvdCB8fCBmbGFncyAh PSBtZW1tYXAuZmxhZ3MpIHsKKwkJCWVycm5vID0gRUVYSVNUOworCQkJcmV0dXJuICgtMSk7CisJ CX0gZWxzZSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCisJZXJyb3IgPSBpb2N0bChjdHgt PmZkLCBWTV9NTUFQX01FTVNFRywgJm1lbW1hcCk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2lu dAordm1fbW1hcF9nZXRuZXh0KHN0cnVjdCB2bWN0eCAqY3R4LCB2bV9wYWRkcl90ICpncGEsIGlu dCAqc2VnaWQsCisgICAgdm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQgKnBy b3QsIGludCAqZmxhZ3MpCit7CisJc3RydWN0IHZtX21lbW1hcCBtZW1tYXA7CisJaW50IGVycm9y OworCisJYnplcm8oJm1lbW1hcCwgc2l6ZW9mKHN0cnVjdCB2bV9tZW1tYXApKTsKKwltZW1tYXAu Z3BhID0gKmdwYTsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX01NQVBfR0VUTkVYVCwgJm1l bW1hcCk7CisJaWYgKGVycm9yID09IDApIHsKKwkJKmdwYSA9IG1lbW1hcC5ncGE7CisJCSpzZWdp ZCA9IG1lbW1hcC5zZWdpZDsKKwkJKnNlZ29mZiA9IG1lbW1hcC5zZWdvZmY7CisJCSpsZW4gPSBt ZW1tYXAubGVuOworCQkqcHJvdCA9IG1lbW1hcC5wcm90OworCQkqZmxhZ3MgPSBtZW1tYXAuZmxh Z3M7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisvKgorICogUmV0dXJuIDAgaWYgdGhlIHNl Z21lbnRzIGFyZSBpZGVudGljYWwgYW5kIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqCisgKiBUaGlz IGlzIHNsaWdodGx5IGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgb25seSBkZXZpY2UgbWVt b3J5IHNlZ21lbnRzCisgKiBhcmUgbmFtZWQuCisgKi8KK3N0YXRpYyBpbnQKK2NtcHNlZyhzaXpl X3QgbGVuLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4yLCBjb25zdCBjaGFyICpzdHIyKQor eworCisJaWYgKGxlbiA9PSBsZW4yKSB7CisJCWlmICgoIXN0ciAmJiAhc3RyMikgfHwgKHN0ciAm JiBzdHIyICYmICFzdHJjbXAoc3RyLCBzdHIyKSkpCisJCQlyZXR1cm4gKDApOworCX0KKwlyZXR1 cm4gKC0xKTsKK30KKworc3RhdGljIGludAordm1fYWxsb2NfbWVtc2VnKHN0cnVjdCB2bWN0eCAq Y3R4LCBpbnQgc2VnaWQsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0 IHZtX21lbXNlZyBtZW1zZWc7CisJc2l6ZV90IG47CisJaW50IGVycm9yOworCisJLyoKKwkgKiBJ ZiB0aGUgbWVtb3J5IHNlZ21lbnQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIHRoZW4ganVzdCBy ZXR1cm4uCisJICogVGhpcyBpcyB0aGUgdXN1YWwgY2FzZSBmb3IgdGhlIFNZU01FTSBzZWdtZW50 IGNyZWF0ZWQgYnkgdXNlcnNwYWNlCisJICogbG9hZGVycyBsaWtlIGJoeXZlbG9hZCg4KS4KKwkg Ki8KKwllcnJvciA9IHZtX2dldF9tZW1zZWcoY3R4LCBzZWdpZCwgJm1lbXNlZy5sZW4sIG1lbXNl Zy5uYW1lLAorCSAgICBzaXplb2YobWVtc2VnLm5hbWUpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVy biAoZXJyb3IpOworCisJaWYgKG1lbXNlZy5sZW4gIT0gMCkgeworCQlpZiAoY21wc2VnKGxlbiwg bmFtZSwgbWVtc2VnLmxlbiwgVk1fTUVNU0VHX05BTUUoJm1lbXNlZykpKSB7CisJCQllcnJubyA9 IEVJTlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9IGVsc2UgeworCQkJcmV0dXJuICgwKTsKKwkJ fQorCX0KKworCWJ6ZXJvKCZtZW1zZWcsIHNpemVvZihzdHJ1Y3Qgdm1fbWVtc2VnKSk7CisJbWVt c2VnLnNlZ2lkID0gc2VnaWQ7CisJbWVtc2VnLmxlbiA9IGxlbjsKKwlpZiAobmFtZSAhPSBOVUxM KSB7CisJCW4gPSBzdHJsY3B5KG1lbXNlZy5uYW1lLCBuYW1lLCBzaXplb2YobWVtc2VnLm5hbWUp KTsKKwkJaWYgKG4gPj0gc2l6ZW9mKG1lbXNlZy5uYW1lKSkgeworCQkJZXJybm8gPSBFTkFNRVRP T0xPTkc7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCX0KKworCWVycm9yID0gaW9jdGwoY3R4LT5m ZCwgVk1fQUxMT0NfTUVNU0VHLCAmbWVtc2VnKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50 Cit2bV9nZXRfbWVtc2VnKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgc2VnaWQsIHNpemVfdCAqbGVu cCwgY2hhciAqbmFtZWJ1ZiwKKyAgICBzaXplX3QgYnVmc2l6ZSkKK3sKKwlzdHJ1Y3Qgdm1fbWVt c2VnIG1lbXNlZzsKKwlzaXplX3QgbjsKKwlpbnQgZXJyb3I7CisKKwltZW1zZWcuc2VnaWQgPSBz ZWdpZDsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9NRU1TRUcsICZtZW1zZWcpOwor CWlmIChlcnJvciA9PSAwKSB7CisJCSpsZW5wID0gbWVtc2VnLmxlbjsKKwkJbiA9IHN0cmxjcHko bmFtZWJ1ZiwgbWVtc2VnLm5hbWUsIGJ1ZnNpemUpOworCQlpZiAobiA+PSBidWZzaXplKSB7CisJ CQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJCWVycm9yID0gLTE7CisJCX0KKwl9CisJcmV0dXJu IChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK3NldHVwX21lbW9yeV9zZWdtZW50KHN0cnVjdCB2 bWN0eCAqY3R4LCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwgY2hhciAqYmFzZSkKK3sKKwlj aGFyICpwdHI7CisJaW50IGVycm9yLCBmbGFnczsKKworCS8qIE1hcCAnbGVuJyBieXRlcyBzdGFy dGluZyBhdCAnZ3BhJyBpbiB0aGUgZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCWVycm9yID0gdm1f bW1hcF9tZW1zZWcoY3R4LCBncGEsIFZNX1NZU01FTSwgZ3BhLCBsZW4sIFBST1RfQUxMKTsKKwlp ZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQ X0ZJWEVEOworCWlmICgoY3R4LT5tZW1mbGFncyAmIFZNX01FTV9GX0lOQ09SRSkgPT0gMCkKKwkJ ZmxhZ3MgfD0gTUFQX05PQ09SRTsKKworCS8qIG1tYXAgaW50byB0aGUgcHJvY2VzcyBhZGRyZXNz IHNwYWNlIG9uIHRoZSBob3N0ICovCisJcHRyID0gbW1hcChiYXNlICsgZ3BhLCBsZW4sIFBST1Rf UlcsIGZsYWdzLCBjdHgtPmZkLCBncGEpOworCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKKwkJcmV0 dXJuICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX3NldHVwX21lbW9yeShzdHJ1 Y3Qgdm1jdHggKmN0eCwgc2l6ZV90IG1lbXNpemUsIGVudW0gdm1fbW1hcF9zdHlsZSB2bXMpCit7 CisJc2l6ZV90IG9ianNpemUsIGxlbjsKKwl2bV9wYWRkcl90IGdwYTsKKwljaGFyICpiYXNlYWRk ciwgKnB0cjsKKwlpbnQgZXJyb3IsIGZsYWdzOworCisJYXNzZXJ0KHZtcyA9PSBWTV9NTUFQX0FM TCk7CisKKwkvKgorCSAqIElmICdtZW1zaXplJyBjYW5ub3QgZml0IGVudGlyZWx5IGluIHRoZSAn bG93bWVtJyBzZWdtZW50IHRoZW4KKwkgKiBjcmVhdGUgYW5vdGhlciAnaGlnaG1lbScgc2VnbWVu dCBhYm92ZSA0R0IgZm9yIHRoZSByZW1haW5kZXIuCisJICovCisJaWYgKG1lbXNpemUgPiBjdHgt Pmxvd21lbV9saW1pdCkgeworCQljdHgtPmxvd21lbSA9IGN0eC0+bG93bWVtX2xpbWl0OworCQlj dHgtPmhpZ2htZW0gPSBtZW1zaXplIC0gY3R4LT5sb3dtZW1fbGltaXQ7CisJCW9ianNpemUgPSA0 KkdCICsgY3R4LT5oaWdobWVtOworCX0gZWxzZSB7CisJCWN0eC0+bG93bWVtID0gbWVtc2l6ZTsK KwkJY3R4LT5oaWdobWVtID0gMDsKKwkJb2Jqc2l6ZSA9IGN0eC0+bG93bWVtOworCX0KKworCWVy cm9yID0gdm1fYWxsb2NfbWVtc2VnKGN0eCwgVk1fU1lTTUVNLCBvYmpzaXplLCBOVUxMKTsKKwlp ZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJLyoKKwkgKiBTdGFrZSBvdXQgYSBjb250 aWd1b3VzIHJlZ2lvbiBjb3ZlcmluZyB0aGUgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5CisJICogYW5k IHRoZSBhZGpvaW5pbmcgZ3VhcmQgcmVnaW9ucy4KKwkgKi8KKwlsZW4gPSBWTV9NTUFQX0dVQVJE X1NJWkUgKyBvYmpzaXplICsgVk1fTU1BUF9HVUFSRF9TSVpFOworCWZsYWdzID0gTUFQX1BSSVZB VEUgfCBNQVBfQU5PTiB8IE1BUF9OT0NPUkUgfCBNQVBfQUxJR05FRF9TVVBFUjsKKwlwdHIgPSBt bWFwKE5VTEwsIGxlbiwgUFJPVF9OT05FLCBmbGFncywgLTEsIDApOworCWlmIChwdHIgPT0gTUFQ X0ZBSUxFRCkKKwkJcmV0dXJuICgtMSk7CisKKwliYXNlYWRkciA9IHB0ciArIFZNX01NQVBfR1VB UkRfU0laRTsKKwlpZiAoY3R4LT5oaWdobWVtID4gMCkgeworCQlncGEgPSA0KkdCOworCQlsZW4g PSBjdHgtPmhpZ2htZW07CisJCWVycm9yID0gc2V0dXBfbWVtb3J5X3NlZ21lbnQoY3R4LCBncGEs IGxlbiwgYmFzZWFkZHIpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gKGVycm9yKTsKKwl9CisK KwlpZiAoY3R4LT5sb3dtZW0gPiAwKSB7CisJCWdwYSA9IDA7CisJCWxlbiA9IGN0eC0+bG93bWVt OworCQllcnJvciA9IHNldHVwX21lbW9yeV9zZWdtZW50KGN0eCwgZ3BhLCBsZW4sIGJhc2VhZGRy KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CisJfQorCisJY3R4LT5iYXNlYWRk ciA9IGJhc2VhZGRyOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJldHVybnMgYSBub24t TlVMTCBwb2ludGVyIGlmIFtnYWRkciwgZ2FkZHIrbGVuKSBpcyBlbnRpcmVseSBjb250YWluZWQg aW4KKyAqIHRoZSBsb3dtZW0gb3IgaGlnaG1lbSByZWdpb25zLgorICoKKyAqIEluIHBhcnRpY3Vs YXIgcmV0dXJuIE5VTEwgaWYgW2dhZGRyLCBnYWRkcitsZW4pIGZhbGxzIGluIGd1ZXN0IE1NSU8g cmVnaW9uLgorICogVGhlIGluc3RydWN0aW9uIGVtdWxhdGlvbiBjb2RlIGRlcGVuZHMgb24gdGhp cyBiZWhhdmlvci4KKyAqLwordm9pZCAqCit2bV9tYXBfZ3BhKHN0cnVjdCB2bWN0eCAqY3R4LCB2 bV9wYWRkcl90IGdhZGRyLCBzaXplX3QgbGVuKQoreworCisJaWYgKGN0eC0+bG93bWVtID4gMCkg eworCQlpZiAoZ2FkZHIgPCBjdHgtPmxvd21lbSAmJiBnYWRkciArIGxlbiA8PSBjdHgtPmxvd21l bSkKKwkJCXJldHVybiAoY3R4LT5iYXNlYWRkciArIGdhZGRyKTsKKwl9CisKKwlpZiAoY3R4LT5o aWdobWVtID4gMCkgeworCQlpZiAoZ2FkZHIgPj0gNCpHQiAmJiBnYWRkciArIGxlbiA8PSA0KkdC ICsgY3R4LT5oaWdobWVtKQorCQkJcmV0dXJuIChjdHgtPmJhc2VhZGRyICsgZ2FkZHIpOworCX0K KworCXJldHVybiAoTlVMTCk7Cit9CisKK3NpemVfdAordm1fZ2V0X2xvd21lbV9zaXplKHN0cnVj dCB2bWN0eCAqY3R4KQoreworCisJcmV0dXJuIChjdHgtPmxvd21lbSk7Cit9CisKK3NpemVfdAor dm1fZ2V0X2hpZ2htZW1fc2l6ZShzdHJ1Y3Qgdm1jdHggKmN0eCkKK3sKKworCXJldHVybiAoY3R4 LT5oaWdobWVtKTsKK30KKwordm9pZCAqCit2bV9jcmVhdGVfZGV2bWVtKHN0cnVjdCB2bWN0eCAq Y3R4LCBpbnQgc2VnaWQsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJY2hhciBw YXRobmFtZVtNQVhQQVRITEVOXTsKKwlzaXplX3QgbGVuMjsKKwljaGFyICpiYXNlLCAqcHRyOwor CWludCBmZCwgZXJyb3IsIGZsYWdzOworCisJZmQgPSAtMTsKKwlwdHIgPSBNQVBfRkFJTEVEOwor CWlmIChuYW1lID09IE5VTEwgfHwgc3RybGVuKG5hbWUpID09IDApIHsKKwkJZXJybm8gPSBFSU5W QUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwllcnJvciA9IHZtX2FsbG9jX21lbXNlZyhjdHgsIHNl Z2lkLCBsZW4sIG5hbWUpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJc3RybGNweShw YXRobmFtZSwgIi9kZXYvdm1tLmlvLyIsIHNpemVvZihwYXRobmFtZSkpOworCXN0cmxjYXQocGF0 aG5hbWUsIGN0eC0+bmFtZSwgc2l6ZW9mKHBhdGhuYW1lKSk7CisJc3RybGNhdChwYXRobmFtZSwg Ii4iLCBzaXplb2YocGF0aG5hbWUpKTsKKwlzdHJsY2F0KHBhdGhuYW1lLCBuYW1lLCBzaXplb2Yo cGF0aG5hbWUpKTsKKworCWZkID0gb3BlbihwYXRobmFtZSwgT19SRFdSKTsKKwlpZiAoZmQgPCAw KQorCQlnb3RvIGRvbmU7CisKKwkvKgorCSAqIFN0YWtlIG91dCBhIGNvbnRpZ3VvdXMgcmVnaW9u IGNvdmVyaW5nIHRoZSBkZXZpY2UgbWVtb3J5IGFuZCB0aGUKKwkgKiBhZGpvaW5pbmcgZ3VhcmQg cmVnaW9ucy4KKwkgKi8KKwlsZW4yID0gVk1fTU1BUF9HVUFSRF9TSVpFICsgbGVuICsgVk1fTU1B UF9HVUFSRF9TSVpFOworCWZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiB8IE1BUF9OT0NP UkUgfCBNQVBfQUxJR05FRF9TVVBFUjsKKwliYXNlID0gbW1hcChOVUxMLCBsZW4yLCBQUk9UX05P TkUsIGZsYWdzLCAtMSwgMCk7CisJaWYgKGJhc2UgPT0gTUFQX0ZBSUxFRCkKKwkJZ290byBkb25l OworCisJZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEOworCWlmICgoY3R4LT5tZW1mbGFn cyAmIFZNX01FTV9GX0lOQ09SRSkgPT0gMCkKKwkJZmxhZ3MgfD0gTUFQX05PQ09SRTsKKworCS8q IG1tYXAgdGhlIGRldm1lbSByZWdpb24gaW4gdGhlIGhvc3QgYWRkcmVzcyBzcGFjZSAqLworCXB0 ciA9IG1tYXAoYmFzZSArIFZNX01NQVBfR1VBUkRfU0laRSwgbGVuLCBQUk9UX1JXLCBmbGFncywg ZmQsIDApOworZG9uZToKKwlpZiAoZmQgPj0gMCkKKwkJY2xvc2UoZmQpOworCXJldHVybiAocHRy KTsKK30KKworaW50Cit2bV9zZXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGlu dCByZWcsCisJICAgIHVpbnQ2NF90IGJhc2UsIHVpbnQzMl90IGxpbWl0LCB1aW50MzJfdCBhY2Nl c3MpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV9zZWdfZGVzYyB2bXNlZ2Rlc2M7CisKKwli emVybygmdm1zZWdkZXNjLCBzaXplb2Yodm1zZWdkZXNjKSk7CisJdm1zZWdkZXNjLmNwdWlkID0g dmNwdTsKKwl2bXNlZ2Rlc2MucmVnbnVtID0gcmVnOworCXZtc2VnZGVzYy5kZXNjLmJhc2UgPSBi YXNlOworCXZtc2VnZGVzYy5kZXNjLmxpbWl0ID0gbGltaXQ7CisJdm1zZWdkZXNjLmRlc2MuYWNj ZXNzID0gYWNjZXNzOworCisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9TRVRfU0VHTUVOVF9E RVNDUklQVE9SLCAmdm1zZWdkZXNjKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9n ZXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCByZWcsCisJICAgIHVpbnQ2 NF90ICpiYXNlLCB1aW50MzJfdCAqbGltaXQsIHVpbnQzMl90ICphY2Nlc3MpCit7CisJaW50IGVy cm9yOworCXN0cnVjdCB2bV9zZWdfZGVzYyB2bXNlZ2Rlc2M7CisKKwliemVybygmdm1zZWdkZXNj LCBzaXplb2Yodm1zZWdkZXNjKSk7CisJdm1zZWdkZXNjLmNwdWlkID0gdmNwdTsKKwl2bXNlZ2Rl c2MucmVnbnVtID0gcmVnOworCisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9HRVRfU0VHTUVO VF9ERVNDUklQVE9SLCAmdm1zZWdkZXNjKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkqYmFzZSA9 IHZtc2VnZGVzYy5kZXNjLmJhc2U7CisJCSpsaW1pdCA9IHZtc2VnZGVzYy5kZXNjLmxpbWl0Owor CQkqYWNjZXNzID0gdm1zZWdkZXNjLmRlc2MuYWNjZXNzOworCX0KKwlyZXR1cm4gKGVycm9yKTsK K30KKworaW50Cit2bV9nZXRfc2VnX2Rlc2Moc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBp bnQgcmVnLCBzdHJ1Y3Qgc2VnX2Rlc2MgKnNlZ19kZXNjKQoreworCWludCBlcnJvcjsKKworCWVy cm9yID0gdm1fZ2V0X2Rlc2MoY3R4LCB2Y3B1LCByZWcsICZzZWdfZGVzYy0+YmFzZSwgJnNlZ19k ZXNjLT5saW1pdCwKKwkgICAgJnNlZ19kZXNjLT5hY2Nlc3MpOworCXJldHVybiAoZXJyb3IpOwor fQorCitpbnQKK3ZtX3NldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGlu dCByZWcsIHVpbnQ2NF90IHZhbCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHZtX3JlZ2lzdGVy IHZtcmVnOworCisJYnplcm8oJnZtcmVnLCBzaXplb2Yodm1yZWcpKTsKKwl2bXJlZy5jcHVpZCA9 IHZjcHU7CisJdm1yZWcucmVnbnVtID0gcmVnOworCXZtcmVnLnJlZ3ZhbCA9IHZhbDsKKworCWVy cm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fU0VUX1JFR0lTVEVSLCAmdm1yZWcpOworCXJldHVybiAo ZXJyb3IpOworfQorCitpbnQKK3ZtX2dldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50 IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXRfdmFsKQoreworCWludCBlcnJvcjsKKwlzdHJ1 Y3Qgdm1fcmVnaXN0ZXIgdm1yZWc7CisKKwliemVybygmdm1yZWcsIHNpemVvZih2bXJlZykpOwor CXZtcmVnLmNwdWlkID0gdmNwdTsKKwl2bXJlZy5yZWdudW0gPSByZWc7CisKKwllcnJvciA9IGlv Y3RsKGN0eC0+ZmQsIFZNX0dFVF9SRUdJU1RFUiwgJnZtcmVnKTsKKwkqcmV0X3ZhbCA9IHZtcmVn LnJlZ3ZhbDsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydW4oc3RydWN0IHZtY3R4 ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0KQoreworCWludCBlcnJvcjsK KwlzdHJ1Y3Qgdm1fcnVuIHZtcnVuOworCisJYnplcm8oJnZtcnVuLCBzaXplb2Yodm1ydW4pKTsK Kwl2bXJ1bi5jcHVpZCA9IHZjcHU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1JVTiwg JnZtcnVuKTsKKwliY29weSgmdm1ydW4udm1fZXhpdCwgdm1leGl0LCBzaXplb2Yoc3RydWN0IHZt X2V4aXQpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zdXNwZW5kKHN0cnVjdCB2 bWN0eCAqY3R4LCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdykKK3sKKwlzdHJ1Y3Qgdm1fc3VzcGVu ZCB2bXN1c3BlbmQ7CisKKwliemVybygmdm1zdXNwZW5kLCBzaXplb2Yodm1zdXNwZW5kKSk7CisJ dm1zdXNwZW5kLmhvdyA9IGhvdzsKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1NVU1BFTkQs ICZ2bXN1c3BlbmQpKTsKK30KKworaW50Cit2bV9yZWluaXQoc3RydWN0IHZtY3R4ICpjdHgpCit7 CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1JFSU5JVCwgMCkpOworfQorCitpbnQKK3Zt X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9y LCBpbnQgZXJyY29kZV92YWxpZCwKKyAgICB1aW50MzJfdCBlcnJjb2RlLCBpbnQgcmVzdGFydF9p bnN0cnVjdGlvbikKK3sKKwlzdHJ1Y3Qgdm1fZXhjZXB0aW9uIGV4YzsKKworCWV4Yy5jcHVpZCA9 IHZjcHU7CisJZXhjLnZlY3RvciA9IHZlY3RvcjsKKwlleGMuZXJyb3JfY29kZSA9IGVycmNvZGU7 CisJZXhjLmVycm9yX2NvZGVfdmFsaWQgPSBlcnJjb2RlX3ZhbGlkOworCWV4Yy5yZXN0YXJ0X2lu c3RydWN0aW9uID0gcmVzdGFydF9pbnN0cnVjdGlvbjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5m ZCwgVk1fSU5KRUNUX0VYQ0VQVElPTiwgJmV4YykpOworfQorCitpbnQKK3ZtX2FwaWNpZDJ2Y3B1 KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXBpY2lkKQoreworCS8qCisJICogVGhlIGFwaWMgaWQg YXNzb2NpYXRlZCB3aXRoIHRoZSAndmNwdScgaGFzIHRoZSBzYW1lIG51bWVyaWNhbCB2YWx1ZQor CSAqIGFzIHRoZSAndmNwdScgaXRzZWxmLgorCSAqLworCXJldHVybiAoYXBpY2lkKTsKK30KKwor aW50Cit2bV9sYXBpY19pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9y KQoreworCXN0cnVjdCB2bV9sYXBpY19pcnEgdm1pcnE7CisKKwliemVybygmdm1pcnEsIHNpemVv Zih2bWlycSkpOworCXZtaXJxLmNwdWlkID0gdmNwdTsKKwl2bWlycS52ZWN0b3IgPSB2ZWN0b3I7 CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0xBUElDX0lSUSwgJnZtaXJxKSk7Cit9CisK K2ludAordm1fbGFwaWNfbG9jYWxfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50 IHZlY3RvcikKK3sKKwlzdHJ1Y3Qgdm1fbGFwaWNfaXJxIHZtaXJxOworCisJYnplcm8oJnZtaXJx LCBzaXplb2Yodm1pcnEpKTsKKwl2bWlycS5jcHVpZCA9IHZjcHU7CisJdm1pcnEudmVjdG9yID0g dmVjdG9yOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9MQVBJQ19MT0NBTF9JUlEsICZ2 bWlycSkpOworfQorCitpbnQKK3ZtX2xhcGljX21zaShzdHJ1Y3Qgdm1jdHggKmN0eCwgdWludDY0 X3QgYWRkciwgdWludDY0X3QgbXNnKQoreworCXN0cnVjdCB2bV9sYXBpY19tc2kgdm1tc2k7CisK KwliemVybygmdm1tc2ksIHNpemVvZih2bW1zaSkpOworCXZtbXNpLmFkZHIgPSBhZGRyOworCXZt bXNpLm1zZyA9IG1zZzsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fTEFQSUNfTVNJLCAm dm1tc2kpKTsKK30KKworaW50Cit2bV9pb2FwaWNfYXNzZXJ0X2lycShzdHJ1Y3Qgdm1jdHggKmN0 eCwgaW50IGlycSkKK3sKKwlzdHJ1Y3Qgdm1faW9hcGljX2lycSBpb2FwaWNfaXJxOworCisJYnpl cm8oJmlvYXBpY19pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faW9hcGljX2lycSkpOworCWlvYXBpY19p cnEuaXJxID0gaXJxOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9JT0FQSUNfQVNTRVJU X0lSUSwgJmlvYXBpY19pcnEpKTsKK30KKworaW50Cit2bV9pb2FwaWNfZGVhc3NlcnRfaXJxKHN0 cnVjdCB2bWN0eCAqY3R4LCBpbnQgaXJxKQoreworCXN0cnVjdCB2bV9pb2FwaWNfaXJxIGlvYXBp Y19pcnE7CisKKwliemVybygmaW9hcGljX2lycSwgc2l6ZW9mKHN0cnVjdCB2bV9pb2FwaWNfaXJx KSk7CisJaW9hcGljX2lycS5pcnEgPSBpcnE7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZN X0lPQVBJQ19ERUFTU0VSVF9JUlEsICZpb2FwaWNfaXJxKSk7Cit9CisKK2ludAordm1faW9hcGlj X3B1bHNlX2lycShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGlycSkKK3sKKwlzdHJ1Y3Qgdm1faW9h cGljX2lycSBpb2FwaWNfaXJxOworCisJYnplcm8oJmlvYXBpY19pcnEsIHNpemVvZihzdHJ1Y3Qg dm1faW9hcGljX2lycSkpOworCWlvYXBpY19pcnEuaXJxID0gaXJxOworCisJcmV0dXJuIChpb2N0 bChjdHgtPmZkLCBWTV9JT0FQSUNfUFVMU0VfSVJRLCAmaW9hcGljX2lycSkpOworfQorCitpbnQK K3ZtX2lvYXBpY19waW5jb3VudChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50ICpwaW5jb3VudCkKK3sK KworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSU9BUElDX1BJTkNPVU5ULCBwaW5jb3VudCkp OworfQorCitpbnQKK3ZtX2lzYV9hc3NlcnRfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXRw aWNfaXJxLCBpbnQgaW9hcGljX2lycSkKK3sKKwlzdHJ1Y3Qgdm1faXNhX2lycSBpc2FfaXJxOwor CisJYnplcm8oJmlzYV9pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faXNhX2lycSkpOworCWlzYV9pcnEu YXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnEuaW9hcGljX2lycSA9IGlvYXBpY19pcnE7 CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0lTQV9BU1NFUlRfSVJRLCAmaXNhX2lycSkp OworfQorCitpbnQKK3ZtX2lzYV9kZWFzc2VydF9pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCBh dHBpY19pcnEsIGludCBpb2FwaWNfaXJxKQoreworCXN0cnVjdCB2bV9pc2FfaXJxIGlzYV9pcnE7 CisKKwliemVybygmaXNhX2lycSwgc2l6ZW9mKHN0cnVjdCB2bV9pc2FfaXJxKSk7CisJaXNhX2ly cS5hdHBpY19pcnEgPSBhdHBpY19pcnE7CisJaXNhX2lycS5pb2FwaWNfaXJxID0gaW9hcGljX2ly cTsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSVNBX0RFQVNTRVJUX0lSUSwgJmlzYV9p cnEpKTsKK30KKworaW50Cit2bV9pc2FfcHVsc2VfaXJxKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQg YXRwaWNfaXJxLCBpbnQgaW9hcGljX2lycSkKK3sKKwlzdHJ1Y3Qgdm1faXNhX2lycSBpc2FfaXJx OworCisJYnplcm8oJmlzYV9pcnEsIHNpemVvZihzdHJ1Y3Qgdm1faXNhX2lycSkpOworCWlzYV9p cnEuYXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnEuaW9hcGljX2lycSA9IGlvYXBpY19p cnE7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX0lTQV9QVUxTRV9JUlEsICZpc2FfaXJx KSk7Cit9CisKK2ludAordm1faXNhX3NldF9pcnFfdHJpZ2dlcihzdHJ1Y3Qgdm1jdHggKmN0eCwg aW50IGF0cGljX2lycSwKKyAgICBlbnVtIHZtX2ludHJfdHJpZ2dlciB0cmlnZ2VyKQoreworCXN0 cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIgaXNhX2lycV90cmlnZ2VyOworCisJYnplcm8oJmlzYV9p cnFfdHJpZ2dlciwgc2l6ZW9mKHN0cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIpKTsKKwlpc2FfaXJx X3RyaWdnZXIuYXRwaWNfaXJxID0gYXRwaWNfaXJxOworCWlzYV9pcnFfdHJpZ2dlci50cmlnZ2Vy ID0gdHJpZ2dlcjsKKworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fSVNBX1NFVF9JUlFfVFJJ R0dFUiwgJmlzYV9pcnFfdHJpZ2dlcikpOworfQorCitpbnQKK3ZtX2luamVjdF9ubWkoc3RydWN0 IHZtY3R4ICpjdHgsIGludCB2Y3B1KQoreworCXN0cnVjdCB2bV9ubWkgdm1ubWk7CisKKwliemVy bygmdm1ubWksIHNpemVvZih2bW5taSkpOworCXZtbm1pLmNwdWlkID0gdmNwdTsKKworCXJldHVy biAoaW9jdGwoY3R4LT5mZCwgVk1fSU5KRUNUX05NSSwgJnZtbm1pKSk7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQl0eXBlOworfSBjYXBzdHJtYXBbXSA9 IHsKKwl7ICJobHRfZXhpdCIsCQlWTV9DQVBfSEFMVF9FWElUIH0sCisJeyAibXRyYXBfZXhpdCIs CQlWTV9DQVBfTVRSQVBfRVhJVCB9LAorCXsgInBhdXNlX2V4aXQiLAkJVk1fQ0FQX1BBVVNFX0VY SVQgfSwKKwl7ICJ1bnJlc3RyaWN0ZWRfZ3Vlc3QiLAlWTV9DQVBfVU5SRVNUUklDVEVEX0dVRVNU IH0sCisJeyAiZW5hYmxlX2ludnBjaWQiLAlWTV9DQVBfRU5BQkxFX0lOVlBDSUQgfSwKKwl7IDAg fQorfTsKKworaW50Cit2bV9jYXBhYmlsaXR5X25hbWUydHlwZShjb25zdCBjaGFyICpjYXBuYW1l KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgY2Fwc3RybWFwW2ldLm5hbWUgIT0gTlVMTCAm JiBjYXBuYW1lICE9IE5VTEw7IGkrKykgeworCQlpZiAoc3RyY21wKGNhcHN0cm1hcFtpXS5uYW1l LCBjYXBuYW1lKSA9PSAwKQorCQkJcmV0dXJuIChjYXBzdHJtYXBbaV0udHlwZSk7CisJfQorCisJ cmV0dXJuICgtMSk7Cit9CisKK2NvbnN0IGNoYXIgKgordm1fY2FwYWJpbGl0eV90eXBlMm5hbWUo aW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBjYXBzdHJtYXBbaV0ubmFtZSAh PSBOVUxMOyBpKyspIHsKKwkJaWYgKGNhcHN0cm1hcFtpXS50eXBlID09IHR5cGUpCisJCQlyZXR1 cm4gKGNhcHN0cm1hcFtpXS5uYW1lKTsKKwl9CisKKwlyZXR1cm4gKE5VTEwpOworfQorCitpbnQK K3ZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgZW51bSB2bV9j YXBfdHlwZSBjYXAsCisJCSAgaW50ICpyZXR2YWwpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2 bV9jYXBhYmlsaXR5IHZtY2FwOworCisJYnplcm8oJnZtY2FwLCBzaXplb2Yodm1jYXApKTsKKwl2 bWNhcC5jcHVpZCA9IHZjcHU7CisJdm1jYXAuY2FwdHlwZSA9IGNhcDsKKworCWVycm9yID0gaW9j dGwoY3R4LT5mZCwgVk1fR0VUX0NBUEFCSUxJVFksICZ2bWNhcCk7CisJKnJldHZhbCA9IHZtY2Fw LmNhcHZhbDsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zZXRfY2FwYWJpbGl0eShz dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGVudW0gdm1fY2FwX3R5cGUgY2FwLCBpbnQgdmFs KQoreworCXN0cnVjdCB2bV9jYXBhYmlsaXR5IHZtY2FwOworCisJYnplcm8oJnZtY2FwLCBzaXpl b2Yodm1jYXApKTsKKwl2bWNhcC5jcHVpZCA9IHZjcHU7CisJdm1jYXAuY2FwdHlwZSA9IGNhcDsK Kwl2bWNhcC5jYXB2YWwgPSB2YWw7CisJCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9TRVRf Q0FQQUJJTElUWSwgJnZtY2FwKSk7Cit9CisKK2ludAordm1fYXNzaWduX3BwdGRldihzdHJ1Y3Qg dm1jdHggKmN0eCwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKQoreworCXN0cnVjdCB2bV9w cHRkZXYgcHB0ZGV2OworCisJYnplcm8oJnBwdGRldiwgc2l6ZW9mKHBwdGRldikpOworCXBwdGRl di5idXMgPSBidXM7CisJcHB0ZGV2LnNsb3QgPSBzbG90OworCXBwdGRldi5mdW5jID0gZnVuYzsK KworCXJldHVybiAoaW9jdGwoY3R4LT5mZCwgVk1fQklORF9QUFRERVYsICZwcHRkZXYpKTsKK30K KworaW50Cit2bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGlu dCBzbG90LCBpbnQgZnVuYykKK3sKKwlzdHJ1Y3Qgdm1fcHB0ZGV2IHBwdGRldjsKKworCWJ6ZXJv KCZwcHRkZXYsIHNpemVvZihwcHRkZXYpKTsKKwlwcHRkZXYuYnVzID0gYnVzOworCXBwdGRldi5z bG90ID0gc2xvdDsKKwlwcHRkZXYuZnVuYyA9IGZ1bmM7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ ZmQsIFZNX1VOQklORF9QUFRERVYsICZwcHRkZXYpKTsKK30KKworaW50Cit2bV9tYXBfcHB0ZGV2 X21taW8oc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYywKKwkJ ICAgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZtX3BhZGRyX3QgaHBhKQoreworCXN0cnVj dCB2bV9wcHRkZXZfbW1pbyBwcHRtbWlvOworCisJYnplcm8oJnBwdG1taW8sIHNpemVvZihwcHRt bWlvKSk7CisJcHB0bW1pby5idXMgPSBidXM7CisJcHB0bW1pby5zbG90ID0gc2xvdDsKKwlwcHRt bWlvLmZ1bmMgPSBmdW5jOworCXBwdG1taW8uZ3BhID0gZ3BhOworCXBwdG1taW8ubGVuID0gbGVu OworCXBwdG1taW8uaHBhID0gaHBhOworCisJcmV0dXJuIChpb2N0bChjdHgtPmZkLCBWTV9NQVBf UFBUREVWX01NSU8sICZwcHRtbWlvKSk7Cit9CisKK2ludAordm1fc2V0dXBfcHB0ZGV2X21zaShz dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYywK KyAgICB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBtc2csIGludCBudW12ZWMpCit7CisJc3RydWN0 IHZtX3BwdGRldl9tc2kgcHB0bXNpOworCisJYnplcm8oJnBwdG1zaSwgc2l6ZW9mKHBwdG1zaSkp OworCXBwdG1zaS52Y3B1ID0gdmNwdTsKKwlwcHRtc2kuYnVzID0gYnVzOworCXBwdG1zaS5zbG90 ID0gc2xvdDsKKwlwcHRtc2kuZnVuYyA9IGZ1bmM7CisJcHB0bXNpLm1zZyA9IG1zZzsKKwlwcHRt c2kuYWRkciA9IGFkZHI7CisJcHB0bXNpLm51bXZlYyA9IG51bXZlYzsKKworCXJldHVybiAoaW9j dGwoY3R4LT5mZCwgVk1fUFBUREVWX01TSSwgJnBwdG1zaSkpOworfQorCitpbnQJCit2bV9zZXR1 cF9wcHRkZXZfbXNpeChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCBidXMsIGludCBz bG90LCBpbnQgZnVuYywKKyAgICBpbnQgaWR4LCB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBtc2cs IHVpbnQzMl90IHZlY3Rvcl9jb250cm9sKQoreworCXN0cnVjdCB2bV9wcHRkZXZfbXNpeCBwcHRt c2l4OworCisJYnplcm8oJnBwdG1zaXgsIHNpemVvZihwcHRtc2l4KSk7CisJcHB0bXNpeC52Y3B1 ID0gdmNwdTsKKwlwcHRtc2l4LmJ1cyA9IGJ1czsKKwlwcHRtc2l4LnNsb3QgPSBzbG90OworCXBw dG1zaXguZnVuYyA9IGZ1bmM7CisJcHB0bXNpeC5pZHggPSBpZHg7CisJcHB0bXNpeC5tc2cgPSBt c2c7CisJcHB0bXNpeC5hZGRyID0gYWRkcjsKKwlwcHRtc2l4LnZlY3Rvcl9jb250cm9sID0gdmVj dG9yX2NvbnRyb2w7CisKKwlyZXR1cm4gaW9jdGwoY3R4LT5mZCwgVk1fUFBUREVWX01TSVgsICZw cHRtc2l4KTsKK30KKwordWludDY0X3QgKgordm1fZ2V0X3N0YXRzKHN0cnVjdCB2bWN0eCAqY3R4 LCBpbnQgdmNwdSwgc3RydWN0IHRpbWV2YWwgKnJldF90diwKKwkgICAgIGludCAqcmV0X2VudHJp ZXMpCit7CisJaW50IGVycm9yOworCisJc3RhdGljIHN0cnVjdCB2bV9zdGF0cyB2bXN0YXRzOwor CisJdm1zdGF0cy5jcHVpZCA9IHZjcHU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1NU QVRTLCAmdm1zdGF0cyk7CisJaWYgKGVycm9yID09IDApIHsKKwkJaWYgKHJldF9lbnRyaWVzKQor CQkJKnJldF9lbnRyaWVzID0gdm1zdGF0cy5udW1fZW50cmllczsKKwkJaWYgKHJldF90dikKKwkJ CSpyZXRfdHYgPSB2bXN0YXRzLnR2OworCQlyZXR1cm4gKHZtc3RhdHMuc3RhdGJ1Zik7CisJfSBl bHNlCisJCXJldHVybiAoTlVMTCk7Cit9CisKK2NvbnN0IGNoYXIgKgordm1fZ2V0X3N0YXRfZGVz YyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGluZGV4KQoreworCXN0YXRpYyBzdHJ1Y3Qgdm1fc3Rh dF9kZXNjIHN0YXRkZXNjOworCisJc3RhdGRlc2MuaW5kZXggPSBpbmRleDsKKwlpZiAoaW9jdGwo Y3R4LT5mZCwgVk1fU1RBVF9ERVNDLCAmc3RhdGRlc2MpID09IDApCisJCXJldHVybiAoc3RhdGRl c2MuZGVzYyk7CisJZWxzZQorCQlyZXR1cm4gKE5VTEwpOworfQorCitpbnQKK3ZtX2dldF94MmFw aWNfc3RhdGUoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0ZSAq c3RhdGUpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV94MmFwaWMgeDJhcGljOworCisJYnpl cm8oJngyYXBpYywgc2l6ZW9mKHgyYXBpYykpOworCXgyYXBpYy5jcHVpZCA9IHZjcHU7CisKKwll cnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9YMkFQSUNfU1RBVEUsICZ4MmFwaWMpOworCSpz dGF0ZSA9IHgyYXBpYy5zdGF0ZTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9zZXRf eDJhcGljX3N0YXRlKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3Rh dGUgc3RhdGUpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV94MmFwaWMgeDJhcGljOworCisJ Ynplcm8oJngyYXBpYywgc2l6ZW9mKHgyYXBpYykpOworCXgyYXBpYy5jcHVpZCA9IHZjcHU7CisJ eDJhcGljLnN0YXRlID0gc3RhdGU7CisKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX1NFVF9Y MkFQSUNfU1RBVEUsICZ4MmFwaWMpOworCisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBG cm9tIEludGVsIFZvbCAzYToKKyAqIFRhYmxlIDktMS4gSUEtMzIgUHJvY2Vzc29yIFN0YXRlcyBG b2xsb3dpbmcgUG93ZXItdXAsIFJlc2V0IG9yIElOSVQKKyAqLworaW50Cit2Y3B1X3Jlc2V0KHN0 cnVjdCB2bWN0eCAqdm1jdHgsIGludCB2Y3B1KQoreworCWludCBlcnJvcjsKKwl1aW50NjRfdCBy ZmxhZ3MsIHJpcCwgY3IwLCBjcjQsIHplcm8sIGRlc2NfYmFzZSwgcmR4OworCXVpbnQzMl90IGRl c2NfYWNjZXNzLCBkZXNjX2xpbWl0OworCXVpbnQxNl90IHNlbDsKKworCXplcm8gPSAwOworCisJ cmZsYWdzID0gMHgyOworCWVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9S RUdfR1VFU1RfUkZMQUdTLCByZmxhZ3MpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJ cmlwID0gMHhmZmYwOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUs IFZNX1JFR19HVUVTVF9SSVAsIHJpcCkpICE9IDApCisJCWdvdG8gZG9uZTsKKworCWNyMCA9IENS MF9ORTsKKwlpZiAoKGVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdf R1VFU1RfQ1IwLCBjcjApKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoKGVycm9yID0gdm1f c2V0X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfQ1IzLCB6ZXJvKSkgIT0gMCkK KwkJZ290byBkb25lOworCQorCWNyNCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rl cih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0NSNCwgY3I0KSkgIT0gMCkKKwkJZ290byBkb25l OworCisJLyoKKwkgKiBDUzogcHJlc2VudCwgci93LCBhY2Nlc3NlZCwgMTYtYml0LCBieXRlIGdy YW51bGFyaXR5LCB1c2FibGUKKwkgKi8KKwlkZXNjX2Jhc2UgPSAweGZmZmYwMDAwOworCWRlc2Nf bGltaXQgPSAweGZmZmY7CisJZGVzY19hY2Nlc3MgPSAweDAwOTM7CisJZXJyb3IgPSB2bV9zZXRf ZGVzYyh2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0NTLAorCQkJICAgIGRlc2NfYmFzZSwgZGVz Y19saW1pdCwgZGVzY19hY2Nlc3MpOworCWlmIChlcnJvcikKKwkJZ290byBkb25lOworCisJc2Vs ID0gMHhmMDAwOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZN X1JFR19HVUVTVF9DUywgc2VsKSkgIT0gMCkKKwkJZ290byBkb25lOworCisJLyoKKwkgKiBTUyxE UyxFUyxGUyxHUzogcHJlc2VudCwgci93LCBhY2Nlc3NlZCwgMTYtYml0LCBieXRlIGdyYW51bGFy aXR5CisJICovCisJZGVzY19iYXNlID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2Nf YWNjZXNzID0gMHgwMDkzOworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JF R19HVUVTVF9TUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsK KwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgs IHZjcHUsIFZNX1JFR19HVUVTVF9EUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRl c2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVycm9yID0gdm1fc2V0 X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9FUywKKwkJCSAgICBkZXNjX2Jhc2UsIGRl c2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCWVy cm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9GUywKKwkJCSAgICBk ZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8g ZG9uZTsKKworCWVycm9yID0gdm1fc2V0X2Rlc2Modm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9H UywKKwkJCSAgICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJy b3IpCisJCWdvdG8gZG9uZTsKKworCXNlbCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdp c3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1NTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRv bmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dV RVNUX0RTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9y ZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0VTLCBzZWwpKSAhPSAwKQorCQlnb3Rv IGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVH X0dVRVNUX0ZTLCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9IHZtX3Nl dF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0dTLCBzZWwpKSAhPSAwKQorCQln b3RvIGRvbmU7CisKKwkvKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCisJcmR4ID0gMHhm MDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dV RVNUX1JBWCwgemVybykpICE9IDApCisJCWdvdG8gZG9uZTsKKwlpZiAoKGVycm9yID0gdm1fc2V0 X3JlZ2lzdGVyKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfUkJYLCB6ZXJvKSkgIT0gMCkKKwkJ Z290byBkb25lOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZN X1JFR19HVUVTVF9SQ1gsIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9 IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1JEWCwgcmR4KSkgIT0g MCkKKwkJZ290byBkb25lOworCWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZj cHUsIFZNX1JFR19HVUVTVF9SU0ksIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisJaWYgKChl cnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1JESSwgemVy bykpICE9IDApCisJCWdvdG8gZG9uZTsKKwlpZiAoKGVycm9yID0gdm1fc2V0X3JlZ2lzdGVyKHZt Y3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfUkJQLCB6ZXJvKSkgIT0gMCkKKwkJZ290byBkb25lOwor CWlmICgoZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm1jdHgsIHZjcHUsIFZNX1JFR19HVUVTVF9S U1AsIHplcm8pKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBHRFRSLCBJRFRSICovCisJZGVz Y19iYXNlID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMDsKKwll cnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfR0RUUiwKKwkJCSAg ICBkZXNjX2Jhc2UsIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IgIT0gMCkK KwkJZ290byBkb25lOworCisJZXJyb3IgPSB2bV9zZXRfZGVzYyh2bWN0eCwgdmNwdSwgVk1fUkVH X0dVRVNUX0lEVFIsCisJCQkgICAgZGVzY19iYXNlLCBkZXNjX2xpbWl0LCBkZXNjX2FjY2Vzcyk7 CisJaWYgKGVycm9yICE9IDApCisJCWdvdG8gZG9uZTsKKworCS8qIFRSICovCisJZGVzY19iYXNl ID0gMDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMHgwMDAwMDA4YjsK KwllcnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfVFIsIDAsIDAs IGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZG9uZTsKKworCXNlbCA9IDA7CisJ aWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0eCwgdmNwdSwgVk1fUkVHX0dVRVNUX1RS LCBzZWwpKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBMRFRSICovCisJZGVzY19iYXNlID0g MDsKKwlkZXNjX2xpbWl0ID0gMHhmZmZmOworCWRlc2NfYWNjZXNzID0gMHgwMDAwMDA4MjsKKwll cnJvciA9IHZtX3NldF9kZXNjKHZtY3R4LCB2Y3B1LCBWTV9SRUdfR1VFU1RfTERUUiwgZGVzY19i YXNlLAorCQkJICAgIGRlc2NfbGltaXQsIGRlc2NfYWNjZXNzKTsKKwlpZiAoZXJyb3IpCisJCWdv dG8gZG9uZTsKKworCXNlbCA9IDA7CisJaWYgKChlcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bWN0 eCwgdmNwdSwgVk1fUkVHX0dVRVNUX0xEVFIsIDApKSAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkv KiBYWFggY3IyLCBkZWJ1ZyByZWdpc3RlcnMgKi8KKworCWVycm9yID0gMDsKK2RvbmU6CisJcmV0 dXJuIChlcnJvcik7Cit9CisKK2ludAordm1fZ2V0X2dwYV9wbWFwKHN0cnVjdCB2bWN0eCAqY3R4 LCB1aW50NjRfdCBncGEsIHVpbnQ2NF90ICpwdGUsIGludCAqbnVtKQoreworCWludCBlcnJvciwg aTsKKwlzdHJ1Y3Qgdm1fZ3BhX3B0ZSBncGFwdGU7CisKKwliemVybygmZ3BhcHRlLCBzaXplb2Yo Z3BhcHRlKSk7CisJZ3BhcHRlLmdwYSA9IGdwYTsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwg Vk1fR0VUX0dQQV9QTUFQLCAmZ3BhcHRlKTsKKworCWlmIChlcnJvciA9PSAwKSB7CisJCSpudW0g PSBncGFwdGUucHRlbnVtOworCQlmb3IgKGkgPSAwOyBpIDwgZ3BhcHRlLnB0ZW51bTsgaSsrKQor CQkJcHRlW2ldID0gZ3BhcHRlLnB0ZVtpXTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKwor aW50Cit2bV9nZXRfaHBldF9jYXBhYmlsaXRpZXMoc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQzMl90 ICpjYXBhYmlsaXRpZXMpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB2bV9ocGV0X2NhcCBjYXA7 CisKKwliemVybygmY2FwLCBzaXplb2Yoc3RydWN0IHZtX2hwZXRfY2FwKSk7CisJZXJyb3IgPSBp b2N0bChjdHgtPmZkLCBWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMsICZjYXApOworCWlmIChjYXBh YmlsaXRpZXMgIT0gTlVMTCkKKwkJKmNhcGFiaWxpdGllcyA9IGNhcC5jYXBhYmlsaXRpZXM7CisJ cmV0dXJuIChlcnJvcik7Cit9CisKK2ludAordm1fZ2xhMmdwYShzdHJ1Y3Qgdm1jdHggKmN0eCwg aW50IHZjcHUsIHN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgKnBhZ2luZywKKyAgICB1aW50NjRfdCBn bGEsIGludCBwcm90LCB1aW50NjRfdCAqZ3BhLCBpbnQgKmZhdWx0KQoreworCXN0cnVjdCB2bV9n bGEyZ3BhIGdnOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZnZywgc2l6ZW9mKHN0cnVjdCB2bV9n bGEyZ3BhKSk7CisJZ2cudmNwdWlkID0gdmNwdTsKKwlnZy5wcm90ID0gcHJvdDsKKwlnZy5nbGEg PSBnbGE7CisJZ2cucGFnaW5nID0gKnBhZ2luZzsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwg Vk1fR0xBMkdQQSwgJmdnKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkqZmF1bHQgPSBnZy5mYXVs dDsKKwkJKmdwYSA9IGdnLmdwYTsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNpZm5kZWYg bWluCisjZGVmaW5lCW1pbihhLGIpCSgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgor CitpbnQKK3ZtX2NvcHlfc2V0dXAoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3Qg dm1fZ3Vlc3RfcGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBzaXplX3QgbGVuLCBp bnQgcHJvdCwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCisgICAgaW50ICpmYXVsdCkK K3sKKwl2b2lkICp2YTsKKwl1aW50NjRfdCBncGE7CisJaW50IGVycm9yLCBpLCBuLCBvZmY7CisK Kwlmb3IgKGkgPSAwOyBpIDwgaW92Y250OyBpKyspIHsKKwkJaW92W2ldLmlvdl9iYXNlID0gMDsK KwkJaW92W2ldLmlvdl9sZW4gPSAwOworCX0KKworCXdoaWxlIChsZW4pIHsKKwkJYXNzZXJ0KGlv dmNudCA+IDApOworCQllcnJvciA9IHZtX2dsYTJncGEoY3R4LCB2Y3B1LCBwYWdpbmcsIGdsYSwg cHJvdCwgJmdwYSwgZmF1bHQpOworCQlpZiAoZXJyb3IgfHwgKmZhdWx0KQorCQkJcmV0dXJuIChl cnJvcik7CisKKwkJb2ZmID0gZ3BhICYgUEFHRV9NQVNLOworCQluID0gbWluKGxlbiwgUEFHRV9T SVpFIC0gb2ZmKTsKKworCQl2YSA9IHZtX21hcF9ncGEoY3R4LCBncGEsIG4pOworCQlpZiAodmEg PT0gTlVMTCkKKwkJCXJldHVybiAoRUZBVUxUKTsKKworCQlpb3YtPmlvdl9iYXNlID0gdmE7CisJ CWlvdi0+aW92X2xlbiA9IG47CisJCWlvdisrOworCQlpb3ZjbnQtLTsKKworCQlnbGEgKz0gbjsK KwkJbGVuIC09IG47CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3ZtX2NvcHlfdGVhcmRv d24oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlv dmNudCkKK3sKKworCXJldHVybjsKK30KKwordm9pZAordm1fY29weWluKHN0cnVjdCB2bWN0eCAq Y3R4LCBpbnQgdmNwdSwgc3RydWN0IGlvdmVjICppb3YsIHZvaWQgKnZwLCBzaXplX3QgbGVuKQor eworCWNvbnN0IGNoYXIgKnNyYzsKKwljaGFyICpkc3Q7CisJc2l6ZV90IG47CisKKwlkc3QgPSB2 cDsKKwl3aGlsZSAobGVuKSB7CisJCWFzc2VydChpb3YtPmlvdl9sZW4pOworCQluID0gbWluKGxl biwgaW92LT5pb3ZfbGVuKTsKKwkJc3JjID0gaW92LT5pb3ZfYmFzZTsKKwkJYmNvcHkoc3JjLCBk c3QsIG4pOworCisJCWlvdisrOworCQlkc3QgKz0gbjsKKwkJbGVuIC09IG47CisJfQorfQorCit2 b2lkCit2bV9jb3B5b3V0KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgY29uc3Qgdm9pZCAq dnAsIHN0cnVjdCBpb3ZlYyAqaW92LAorICAgIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAq c3JjOworCWNoYXIgKmRzdDsKKwlzaXplX3QgbjsKKworCXNyYyA9IHZwOworCXdoaWxlIChsZW4p IHsKKwkJYXNzZXJ0KGlvdi0+aW92X2xlbik7CisJCW4gPSBtaW4obGVuLCBpb3YtPmlvdl9sZW4p OworCQlkc3QgPSBpb3YtPmlvdl9iYXNlOworCQliY29weShzcmMsIGRzdCwgbik7CisKKwkJaW92 Kys7CisJCXNyYyArPSBuOworCQlsZW4gLT0gbjsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3ZtX2dl dF9jcHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgd2hpY2gsIGNwdXNldF90ICpjcHVzKQorewor CXN0cnVjdCB2bV9jcHVzZXQgdm1fY3B1c2V0OworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZ2bV9j cHVzZXQsIHNpemVvZihzdHJ1Y3Qgdm1fY3B1c2V0KSk7CisJdm1fY3B1c2V0LndoaWNoID0gd2hp Y2g7CisJdm1fY3B1c2V0LmNwdXNldHNpemUgPSBzaXplb2YoY3B1c2V0X3QpOworCXZtX2NwdXNl dC5jcHVzID0gY3B1czsKKworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fR0VUX0NQVVMsICZ2 bV9jcHVzZXQpOworCXJldHVybiAoZXJyb3IpOworfQorCitpbnQKK3ZtX2FjdGl2ZV9jcHVzKHN0 cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1cykKK3sKKworCXJldHVybiAodm1fZ2V0X2Nw dXMoY3R4LCBWTV9BQ1RJVkVfQ1BVUywgY3B1cykpOworfQorCitpbnQKK3ZtX3N1c3BlbmRlZF9j cHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1cykKK3sKKworCXJldHVybiAodm1f Z2V0X2NwdXMoY3R4LCBWTV9TVVNQRU5ERURfQ1BVUywgY3B1cykpOworfQorCitpbnQKK3ZtX2Fj dGl2YXRlX2NwdShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUpCit7CisJc3RydWN0IHZtX2Fj dGl2YXRlX2NwdSBhYzsKKwlpbnQgZXJyb3I7CisKKwliemVybygmYWMsIHNpemVvZihzdHJ1Y3Qg dm1fYWN0aXZhdGVfY3B1KSk7CisJYWMudmNwdWlkID0gdmNwdTsKKwllcnJvciA9IGlvY3RsKGN0 eC0+ZmQsIFZNX0FDVElWQVRFX0NQVSwgJmFjKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50 Cit2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHVpbnQ2NF90ICpp bmZvMSwgdWludDY0X3QgKmluZm8yKQoreworCXN0cnVjdCB2bV9pbnRpbmZvIHZtaWk7CisJaW50 IGVycm9yOworCisJYnplcm8oJnZtaWksIHNpemVvZihzdHJ1Y3Qgdm1faW50aW5mbykpOworCXZt aWkudmNwdWlkID0gdmNwdTsKKwllcnJvciA9IGlvY3RsKGN0eC0+ZmQsIFZNX0dFVF9JTlRJTkZP LCAmdm1paSk7CisJaWYgKGVycm9yID09IDApIHsKKwkJKmluZm8xID0gdm1paS5pbmZvMTsKKwkJ KmluZm8yID0gdm1paS5pbmZvMjsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludAordm1f c2V0X2ludGluZm8oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCBpbmZvMSkK K3sKKwlzdHJ1Y3Qgdm1faW50aW5mbyB2bWlpOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZ2bWlp LCBzaXplb2Yoc3RydWN0IHZtX2ludGluZm8pKTsKKwl2bWlpLnZjcHVpZCA9IHZjcHU7CisJdm1p aS5pbmZvMSA9IGluZm8xOworCWVycm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fU0VUX0lOVElORk8s ICZ2bWlpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfd3JpdGUoc3RydWN0 IHZtY3R4ICpjdHgsIGludCBvZmZzZXQsIHVpbnQ4X3QgdmFsdWUpCit7CisJc3RydWN0IHZtX3J0 Y19kYXRhIHJ0Y2RhdGE7CisJaW50IGVycm9yOworCisJYnplcm8oJnJ0Y2RhdGEsIHNpemVvZihz dHJ1Y3Qgdm1fcnRjX2RhdGEpKTsKKwlydGNkYXRhLm9mZnNldCA9IG9mZnNldDsKKwlydGNkYXRh LnZhbHVlID0gdmFsdWU7CisJZXJyb3IgPSBpb2N0bChjdHgtPmZkLCBWTV9SVENfV1JJVEUsICZy dGNkYXRhKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfcmVhZChzdHJ1Y3Qg dm1jdHggKmN0eCwgaW50IG9mZnNldCwgdWludDhfdCAqcmV0dmFsKQoreworCXN0cnVjdCB2bV9y dGNfZGF0YSBydGNkYXRhOworCWludCBlcnJvcjsKKworCWJ6ZXJvKCZydGNkYXRhLCBzaXplb2Yo c3RydWN0IHZtX3J0Y19kYXRhKSk7CisJcnRjZGF0YS5vZmZzZXQgPSBvZmZzZXQ7CisJZXJyb3Ig PSBpb2N0bChjdHgtPmZkLCBWTV9SVENfUkVBRCwgJnJ0Y2RhdGEpOworCWlmIChlcnJvciA9PSAw KQorCQkqcmV0dmFsID0gcnRjZGF0YS52YWx1ZTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50 Cit2bV9ydGNfc2V0dGltZShzdHJ1Y3Qgdm1jdHggKmN0eCwgdGltZV90IHNlY3MpCit7CisJc3Ry dWN0IHZtX3J0Y190aW1lIHJ0Y3RpbWU7CisJaW50IGVycm9yOworCisJYnplcm8oJnJ0Y3RpbWUs IHNpemVvZihzdHJ1Y3Qgdm1fcnRjX3RpbWUpKTsKKwlydGN0aW1lLnNlY3MgPSBzZWNzOworCWVy cm9yID0gaW9jdGwoY3R4LT5mZCwgVk1fUlRDX1NFVFRJTUUsICZydGN0aW1lKTsKKwlyZXR1cm4g KGVycm9yKTsKK30KKworaW50Cit2bV9ydGNfZ2V0dGltZShzdHJ1Y3Qgdm1jdHggKmN0eCwgdGlt ZV90ICpzZWNzKQoreworCXN0cnVjdCB2bV9ydGNfdGltZSBydGN0aW1lOworCWludCBlcnJvcjsK KworCWJ6ZXJvKCZydGN0aW1lLCBzaXplb2Yoc3RydWN0IHZtX3J0Y190aW1lKSk7CisJZXJyb3Ig PSBpb2N0bChjdHgtPmZkLCBWTV9SVENfR0VUVElNRSwgJnJ0Y3RpbWUpOworCWlmIChlcnJvciA9 PSAwKQorCQkqc2VjcyA9IHJ0Y3RpbWUuc2VjczsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworaW50 Cit2bV9yZXN0YXJ0X2luc3RydWN0aW9uKHZvaWQgKmFyZywgaW50IHZjcHUpCit7CisJc3RydWN0 IHZtY3R4ICpjdHggPSBhcmc7CisKKwlyZXR1cm4gKGlvY3RsKGN0eC0+ZmQsIFZNX1JFU1RBUlRf SU5TVFJVQ1RJT04sICZ2Y3B1KSk7Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9saWIvbGlidm1t YXBpL3ZtbWFwaS5oIC91c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmgKLS0tIHVzci9zcmMv bGliL2xpYnZtbWFwaS92bW1hcGkuaAkyMDE2LTA5LTI5IDAwOjI2OjAyLjAwMDAwMDAwMCArMDEw MAorKysgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92bW1hcGkuaAkyMDE2LTExLTMwIDEwOjU2OjA1 Ljc4MzAzNjAwMCArMDAwMApAQCAtMTYyLDYgKzE2MiwxMSBAQAogaW50CXZtX2dldF9pbnRpbmZv KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgdWludDY0X3QgKmkxLCB1aW50NjRfdCAqaTIp OwogaW50CXZtX3NldF9pbnRpbmZvKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgdWludDY0 X3QgZXhpdF9pbnRpbmZvKTsKIAorLyogVGhlIG5leHQgdGhyZWUgZnVuY3Rpb25zIGFyZSBkb2N1 bWVudGVkIGluIHZtbWFwaS5jICovCitpbnQJdm1fZ2V0X2ZkKHN0cnVjdCB2bWN0eCAqY3R4KTsK K2ludAl2bV9tYXBfdXNlcl9idWYoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgZ3BhLCBz aXplX3QgbGVuLCB2b2lkICpob3N0X2J1Zik7CitpbnQJdm1faW9fcmVnX2hhbmRsZXIoc3RydWN0 IHZtY3R4ICpjdHgsIHVpbnQxNl90IHBvcnQsIHVpbnQxNl90IGluLAorCSAgICB1aW50MzJfdCBt YXNrX2RhdGEsIHVpbnQzMl90IGRhdGEsIGVudW0gdm1faW9fcmVnaF90eXBlIHR5cGUsIHZvaWQg KmFyZyk7CiAvKgogICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RhdGlzdGljcyBidWZmZXIu IE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBNVC1zYWZlLgogICovCmRpZmYgLXUgLXIgLU4gdXNyL3Ny Yy9saWIvbGlidm1tYXBpL3ZtbWFwaS5oLm9yaWcgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92bW1h cGkuaC5vcmlnCi0tLSB1c3Ivc3JjL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmgub3JpZwkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvbGliL2xpYnZtbWFwaS92 bW1hcGkuaC5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTMuMTI0MzIxMDAwICswMDAwCkBAIC0wLDAg KzEsMjE5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5F VEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu CisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL2xpYi9saWJ2bW1hcGkvdm1tYXBpLmggMjk4 ODk2IDIwMTYtMDUtMDEgMTk6Mzc6MzNaIHBmZyAkCisgKi8KKworI2lmbmRlZiBfVk1NQVBJX0hf CisjZGVmaW5lCV9WTU1BUElfSF8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUg PHN5cy9jcHVzZXQuaD4KKworLyoKKyAqIEFQSSB2ZXJzaW9uIGZvciBvdXQtb2YtdHJlZSBjb25z dW1lcnMgbGlrZSBncnViLWJoeXZlIGZvciBtYWtpbmcgY29tcGlsZQorICogdGltZSBkZWNpc2lv bnMuCisgKi8KKyNkZWZpbmUJVk1NQVBJX1ZFUlNJT04JMDEwMgkvKiAyIGRpZ2l0IG1ham9yIGZv bGxvd2VkIGJ5IDIgZGlnaXQgbWlub3IgKi8KKworc3RydWN0IGlvdmVjOworc3RydWN0IHZtY3R4 OworZW51bSB4MmFwaWNfc3RhdGU7CisKKy8qCisgKiBEaWZmZXJlbnQgc3R5bGVzIG9mIG1hcHBp bmcgdGhlIG1lbW9yeSBhc3NpZ25lZCB0byBhIFZNIGludG8gdGhlIGFkZHJlc3MKKyAqIHNwYWNl IG9mIHRoZSBjb250cm9sbGluZyBwcm9jZXNzLgorICovCitlbnVtIHZtX21tYXBfc3R5bGUgewor CVZNX01NQVBfTk9ORSwJCS8qIG5vIG1hcHBpbmcgKi8KKwlWTV9NTUFQX0FMTCwJCS8qIGZ1bGx5 IGFuZCBzdGF0aWNhbGx5IG1hcHBlZCAqLworCVZNX01NQVBfU1BBUlNFLAkJLyogbWFwcGluZ3Mg Y3JlYXRlZCBvbi1kZW1hbmQgKi8KK307CisKKy8qCisgKiAnZmxhZ3MnIHZhbHVlIHBhc3NlZCB0 byAndm1fc2V0X21lbWZsYWdzKCknLgorICovCisjZGVmaW5lCVZNX01FTV9GX0lOQ09SRQkweDAx CS8qIGluY2x1ZGUgZ3Vlc3QgbWVtb3J5IGluIGNvcmUgZmlsZSAqLworI2RlZmluZQlWTV9NRU1f Rl9XSVJFRAkweDAyCS8qIGd1ZXN0IG1lbW9yeSBpcyB3aXJlZCAqLworCisvKgorICogSWRlbnRp ZmllcnMgZm9yIG1lbW9yeSBzZWdtZW50czoKKyAqIC0gdm1fc2V0dXBfbWVtb3J5KCkgdXNlcyBW TV9TWVNNRU0gZm9yIHRoZSBzeXN0ZW0gbWVtb3J5IHNlZ21lbnQuCisgKiAtIHRoZSByZW1haW5p bmcgaWRlbnRpZmllcnMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGRldm1lbSBzZWdtZW50cy4KKyAq LworZW51bSB7CisJVk1fU1lTTUVNLAorCVZNX0JPT1RST00sCisJVk1fRlJBTUVCVUZGRVIsCit9 OworCisvKgorICogR2V0IHRoZSBsZW5ndGggYW5kIG5hbWUgb2YgdGhlIG1lbW9yeSBzZWdtZW50 IGlkZW50aWZpZWQgYnkgJ3NlZ2lkJy4KKyAqIE5vdGUgdGhhdCBzeXN0ZW0gbWVtb3J5IHNlZ21l bnRzIGFyZSBpZGVudGlmaWVkIHdpdGggYSBudWwgbmFtZS4KKyAqCisgKiBSZXR1cm5zIDAgb24g c3VjY2VzcyBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQJdm1fZ2V0X21lbXNlZyhz dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGlkZW50LCBzaXplX3QgKmxlbnAsIGNoYXIgKm5hbWUsCisJ ICAgIHNpemVfdCBuYW1lc2l6KTsKKworLyoKKyAqIEl0ZXJhdGUgb3ZlciB0aGUgZ3Vlc3QgYWRk cmVzcyBzcGFjZS4gVGhpcyBmdW5jdGlvbiBmaW5kcyBhbiBhZGRyZXNzIHJhbmdlCisgKiB0aGF0 IHN0YXJ0cyBhdCBhbiBhZGRyZXNzID49ICpncGEuCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBu ZXh0IGFkZHJlc3MgcmFuZ2Ugd2FzIGZvdW5kIGFuZCBub24temVybyBvdGhlcndpc2UuCisgKi8K K2ludAl2bV9tbWFwX2dldG5leHQoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgKmdwYSwg aW50ICpzZWdpZCwKKwkgICAgdm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQg KnByb3QsIGludCAqZmxhZ3MpOworLyoKKyAqIENyZWF0ZSBhIGRldmljZSBtZW1vcnkgc2VnbWVu dCBpZGVudGlmaWVkIGJ5ICdzZWdpZCcuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl IG1lbW9yeSBzZWdtZW50IG9uIHN1Y2Nlc3MgYW5kIE1BUF9GQUlMRUQgb3RoZXJ3aXNlLgorICov Cit2b2lkCSp2bV9jcmVhdGVfZGV2bWVtKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgc2VnaWQsIGNv bnN0IGNoYXIgKm5hbWUsCisJICAgIHNpemVfdCBsZW4pOworCisvKgorICogTWFwIHRoZSBtZW1v cnkgc2VnbWVudCBpZGVudGlmaWVkIGJ5ICdzZWdpZCcgaW50byB0aGUgZ3Vlc3QgYWRkcmVzcyBz cGFjZQorICogYXQgW2dwYSxncGErbGVuKSB3aXRoIHByb3RlY3Rpb24gJ3Byb3QnLgorICovCitp bnQJdm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtY3R4ICpjdHgsIHZtX3BhZGRyX3QgZ3BhLCBpbnQg c2VnaWQsCisJICAgIHZtX29vZmZzZXRfdCBzZWdvZmYsIHNpemVfdCBsZW4sIGludCBwcm90KTsK KworaW50CXZtX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCB2bWN0eCAqdm1fb3Bl bihjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQJdm1fZGVzdHJveShzdHJ1Y3Qgdm1jdHggKmN0eCk7 CitpbnQJdm1fcGFyc2VfbWVtc2l6ZShjb25zdCBjaGFyICpvcHRhcmcsIHNpemVfdCAqbWVtc2l6 ZSk7CitpbnQJdm1fc2V0dXBfbWVtb3J5KHN0cnVjdCB2bWN0eCAqY3R4LCBzaXplX3QgbGVuLCBl bnVtIHZtX21tYXBfc3R5bGUgcyk7Cit2b2lkCSp2bV9tYXBfZ3BhKHN0cnVjdCB2bWN0eCAqY3R4 LCB2bV9wYWRkcl90IGdhZGRyLCBzaXplX3QgbGVuKTsKK2ludAl2bV9nZXRfZ3BhX3BtYXAoc3Ry dWN0IHZtY3R4ICosIHVpbnQ2NF90IGdwYSwgdWludDY0X3QgKnB0ZSwgaW50ICpudW0pOworaW50 CXZtX2dsYTJncGEoc3RydWN0IHZtY3R4ICosIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9ndWVzdF9w YWdpbmcgKnBhZ2luZywKKwkJICAgdWludDY0X3QgZ2xhLCBpbnQgcHJvdCwgdWludDY0X3QgKmdw YSwgaW50ICpmYXVsdCk7Cit1aW50MzJfdCB2bV9nZXRfbG93bWVtX2xpbWl0KHN0cnVjdCB2bWN0 eCAqY3R4KTsKK3ZvaWQJdm1fc2V0X2xvd21lbV9saW1pdChzdHJ1Y3Qgdm1jdHggKmN0eCwgdWlu dDMyX3QgbGltaXQpOwordm9pZAl2bV9zZXRfbWVtZmxhZ3Moc3RydWN0IHZtY3R4ICpjdHgsIGlu dCBmbGFncyk7CitpbnQJdm1fZ2V0X21lbWZsYWdzKHN0cnVjdCB2bWN0eCAqY3R4KTsKK3NpemVf dAl2bV9nZXRfbG93bWVtX3NpemUoc3RydWN0IHZtY3R4ICpjdHgpOworc2l6ZV90CXZtX2dldF9o aWdobWVtX3NpemUoc3RydWN0IHZtY3R4ICpjdHgpOworaW50CXZtX3NldF9kZXNjKHN0cnVjdCB2 bWN0eCAqY3R4LCBpbnQgdmNwdSwgaW50IHJlZywKKwkJICAgIHVpbnQ2NF90IGJhc2UsIHVpbnQz Ml90IGxpbWl0LCB1aW50MzJfdCBhY2Nlc3MpOworaW50CXZtX2dldF9kZXNjKHN0cnVjdCB2bWN0 eCAqY3R4LCBpbnQgdmNwdSwgaW50IHJlZywKKwkJICAgIHVpbnQ2NF90ICpiYXNlLCB1aW50MzJf dCAqbGltaXQsIHVpbnQzMl90ICphY2Nlc3MpOworaW50CXZtX2dldF9zZWdfZGVzYyhzdHJ1Y3Qg dm1jdHggKmN0eCwgaW50IHZjcHUsIGludCByZWcsCisJCQlzdHJ1Y3Qgc2VnX2Rlc2MgKnNlZ19k ZXNjKTsKK2ludAl2bV9zZXRfcmVnaXN0ZXIoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBp bnQgcmVnLCB1aW50NjRfdCB2YWwpOworaW50CXZtX2dldF9yZWdpc3RlcihzdHJ1Y3Qgdm1jdHgg KmN0eCwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50CXZtX3J1bihz dHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCB2bV9leGl0ICpyZXRfdm1leGl0KTsK K2ludAl2bV9zdXNwZW5kKHN0cnVjdCB2bWN0eCAqY3R4LCBlbnVtIHZtX3N1c3BlbmRfaG93IGhv dyk7CitpbnQJdm1fcmVpbml0KHN0cnVjdCB2bWN0eCAqY3R4KTsKK2ludAl2bV9hcGljaWQydmNw dShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGFwaWNpZCk7CitpbnQJdm1faW5qZWN0X2V4Y2VwdGlv bihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGludCB2ZWN0b3IsCisgICAgaW50IGVycmNv ZGVfdmFsaWQsIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0YXJ0X2luc3RydWN0aW9uKTsKK2lu dAl2bV9sYXBpY19pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgdmVjdG9yKTsK K2ludAl2bV9sYXBpY19sb2NhbF9pcnEoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQg dmVjdG9yKTsKK2ludAl2bV9sYXBpY19tc2koc3RydWN0IHZtY3R4ICpjdHgsIHVpbnQ2NF90IGFk ZHIsIHVpbnQ2NF90IG1zZyk7CitpbnQJdm1faW9hcGljX2Fzc2VydF9pcnEoc3RydWN0IHZtY3R4 ICpjdHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19kZWFzc2VydF9pcnEoc3RydWN0IHZtY3R4 ICpjdHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19wdWxzZV9pcnEoc3RydWN0IHZtY3R4ICpj dHgsIGludCBpcnEpOworaW50CXZtX2lvYXBpY19waW5jb3VudChzdHJ1Y3Qgdm1jdHggKmN0eCwg aW50ICpwaW5jb3VudCk7CitpbnQJdm1faXNhX2Fzc2VydF9pcnEoc3RydWN0IHZtY3R4ICpjdHgs IGludCBhdHBpY19pcnEsIGludCBpb2FwaWNfaXJxKTsKK2ludAl2bV9pc2FfZGVhc3NlcnRfaXJx KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgYXRwaWNfaXJxLCBpbnQgaW9hcGljX2lycSk7CitpbnQJ dm1faXNhX3B1bHNlX2lycShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGF0cGljX2lycSwgaW50IGlv YXBpY19pcnEpOworaW50CXZtX2lzYV9zZXRfaXJxX3RyaWdnZXIoc3RydWN0IHZtY3R4ICpjdHgs IGludCBhdHBpY19pcnEsCisJICAgIGVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXIpOworaW50 CXZtX2luamVjdF9ubWkoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1KTsKK2ludAl2bV9jYXBh YmlsaXR5X25hbWUydHlwZShjb25zdCBjaGFyICpjYXBuYW1lKTsKK2NvbnN0IGNoYXIgKnZtX2Nh cGFiaWxpdHlfdHlwZTJuYW1lKGludCB0eXBlKTsKK2ludAl2bV9nZXRfY2FwYWJpbGl0eShzdHJ1 Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIGVudW0gdm1fY2FwX3R5cGUgY2FwLAorCQkJICBpbnQg KnJldHZhbCk7CitpbnQJdm1fc2V0X2NhcGFiaWxpdHkoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2 Y3B1LCBlbnVtIHZtX2NhcF90eXBlIGNhcCwKKwkJCSAgaW50IHZhbCk7CitpbnQJdm1fYXNzaWdu X3BwdGRldihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsK K2ludAl2bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtY3R4ICpjdHgsIGludCBidXMsIGludCBz bG90LCBpbnQgZnVuYyk7CitpbnQJdm1fbWFwX3BwdGRldl9tbWlvKHN0cnVjdCB2bWN0eCAqY3R4 LCBpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMsCisJCQkgICB2bV9wYWRkcl90IGdwYSwgc2l6 ZV90IGxlbiwgdm1fcGFkZHJfdCBocGEpOworaW50CXZtX3NldHVwX3BwdGRldl9tc2koc3RydWN0 IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwkgICAgaW50IGZ1bmMs IHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywgaW50IG51bXZlYyk7CitpbnQJdm1fc2V0dXBf cHB0ZGV2X21zaXgoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBpbnQgYnVzLCBpbnQgc2xv dCwKKwkgICAgaW50IGZ1bmMsIGludCBpZHgsIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG1zZywK KwkgICAgdWludDMyX3QgdmVjdG9yX2NvbnRyb2wpOworCitpbnQJdm1fZ2V0X2ludGluZm8oc3Ry dWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCAqaTEsIHVpbnQ2NF90ICppMik7Citp bnQJdm1fc2V0X2ludGluZm8oc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCB1aW50NjRfdCBl eGl0X2ludGluZm8pOworCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RhdGlzdGlj cyBidWZmZXIuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBNVC1zYWZlLgorICovCit1aW50NjRfdCAq dm1fZ2V0X3N0YXRzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IHRpbWV2YWwg KnJldF90diwKKwkJICAgICAgIGludCAqcmV0X2VudHJpZXMpOworY29uc3QgY2hhciAqdm1fZ2V0 X3N0YXRfZGVzYyhzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IGluZGV4KTsKKworaW50CXZtX2dldF94 MmFwaWNfc3RhdGUoc3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0 ZSAqcyk7CitpbnQJdm1fc2V0X3gyYXBpY19zdGF0ZShzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZj cHUsIGVudW0geDJhcGljX3N0YXRlIHMpOworCitpbnQJdm1fZ2V0X2hwZXRfY2FwYWJpbGl0aWVz KHN0cnVjdCB2bWN0eCAqY3R4LCB1aW50MzJfdCAqY2FwYWJpbGl0aWVzKTsKKworLyoKKyAqIFRy YW5zbGF0ZSB0aGUgR0xBIHJhbmdlIFtnbGEsZ2xhK2xlbikgaW50byBHUEEgc2VnbWVudHMgaW4g J2lvdicuCisgKiBUaGUgJ2lvdmNudCcgc2hvdWxkIGJlIGJpZyBlbm91Z2ggdG8gYWNjb21tb2Rh dGUgYWxsIEdQQSBzZWdtZW50cy4KKyAqCisgKiByZXR2YWwJZmF1bHQJCUludGVycHJldGF0aW9u CisgKiAgIDAJCSAgMAkJU3VjY2VzcworICogICAwCQkgIDEJCUFuIGV4Y2VwdGlvbiB3YXMgaW5q ZWN0ZWQgaW50byB0aGUgZ3Vlc3QKKyAqIEVGQVVMVAkgTi9BCQlFcnJvcgorICovCitpbnQJdm1f Y29weV9zZXR1cChzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCB2bV9ndWVzdF9w YWdpbmcgKnBnLAorCSAgICB1aW50NjRfdCBnbGEsIHNpemVfdCBsZW4sIGludCBwcm90LCBzdHJ1 Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwKKwkgICAgaW50ICpmYXVsdCk7Cit2b2lkCXZtX2Nv cHlpbihzdHJ1Y3Qgdm1jdHggKmN0eCwgaW50IHZjcHUsIHN0cnVjdCBpb3ZlYyAqZ3Vlc3RfaW92 LAorCSAgICB2b2lkICpob3N0X2RzdCwgc2l6ZV90IGxlbik7Cit2b2lkCXZtX2NvcHlvdXQoc3Ry dWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBjb25zdCB2b2lkICpob3N0X3NyYywKKwkgICAgc3Ry dWN0IGlvdmVjICpndWVzdF9pb3YsIHNpemVfdCBsZW4pOwordm9pZAl2bV9jb3B5X3RlYXJkb3du KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IGlvdmVjICppb3YsCisJICAgIGlu dCBpb3ZjbnQpOworCisvKiBSVEMgKi8KK2ludAl2bV9ydGNfd3JpdGUoc3RydWN0IHZtY3R4ICpj dHgsIGludCBvZmZzZXQsIHVpbnQ4X3QgdmFsdWUpOworaW50CXZtX3J0Y19yZWFkKHN0cnVjdCB2 bWN0eCAqY3R4LCBpbnQgb2Zmc2V0LCB1aW50OF90ICpyZXR2YWwpOworaW50CXZtX3J0Y19zZXR0 aW1lKHN0cnVjdCB2bWN0eCAqY3R4LCB0aW1lX3Qgc2Vjcyk7CitpbnQJdm1fcnRjX2dldHRpbWUo c3RydWN0IHZtY3R4ICpjdHgsIHRpbWVfdCAqc2Vjcyk7CisKKy8qIFJlc2V0IHZjcHUgcmVnaXN0 ZXIgc3RhdGUgKi8KK2ludAl2Y3B1X3Jlc2V0KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSk7 CisKK2ludAl2bV9hY3RpdmVfY3B1cyhzdHJ1Y3Qgdm1jdHggKmN0eCwgY3B1c2V0X3QgKmNwdXMp OworaW50CXZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bWN0eCAqY3R4LCBjcHVzZXRfdCAqY3B1 cyk7CitpbnQJdm1fYWN0aXZhdGVfY3B1KHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSk7CisK Ky8qCisgKiBGcmVlQlNEIHNwZWNpZmljIEFQSXMKKyAqLworaW50CXZtX3NldHVwX2ZyZWVic2Rf cmVnaXN0ZXJzKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwKKwkJCQl1aW50NjRfdCByaXAs IHVpbnQ2NF90IGNyMywgdWludDY0X3QgZ2R0YmFzZSwKKwkJCQl1aW50NjRfdCByc3ApOworaW50 CXZtX3NldHVwX2ZyZWVic2RfcmVnaXN0ZXJzX2kzODYoc3RydWN0IHZtY3R4ICp2bWN0eCwgaW50 IHZjcHUsCisJCQkJCXVpbnQzMl90IGVpcCwgdWludDMyX3QgZ2R0YmFzZSwKKwkJCQkJdWludDMy X3QgZXNwKTsKK3ZvaWQJdm1fc2V0dXBfZnJlZWJzZF9nZHQodWludDY0X3QgKmdkdHIpOworI2Vu ZGlmCS8qIF9WTU1BUElfSF8gKi8KRmlsZXMgdXNyL3NyYy9zcmMudHh6IGFuZCAvdXNyL3NyYy9z cmMudHh6IGRpZmZlcgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L2NvbmYvR0VORVJJ QyAvdXNyL3NyYy9zeXMvYW1kNjQvY29uZi9HRU5FUklDCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC9j b25mL0dFTkVSSUMJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv c3JjL3N5cy9hbWQ2NC9jb25mL0dFTkVSSUMJMjAxNi0xMS0zMCAxMDo1ODowMi41OTE5MzMwMDAg KzAwMDAKQEAgLTM1Myw3ICszNTMsNyBAQAogZGV2aWNlCQl2bXgJCQkjIFZNd2FyZSBWTVhORVQz IEV0aGVybmV0CiAKICMgTmV0bWFwIHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MgdG8gVFgvUlggcmlu Z3Mgb24gc3VwcG9ydGVkIE5JQ3MKLWRldmljZQkJbmV0bWFwCQkJIyBuZXRtYXAoNCkgc3VwcG9y dAorI2RldmljZQkJbmV0bWFwCQkJIyBuZXRtYXAoNCkgc3VwcG9ydAogCiAjIFRoZSBjcnlwdG8g ZnJhbWV3b3JrIGlzIHJlcXVpcmVkIGJ5IElQU0VDCiBkZXZpY2UJCWNyeXB0bwkJCSMgUmVxdWly ZWQgYnkgSVBTRUMKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbS5o IC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbS5oCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC9p bmNsdWRlL3ZtbS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCisrKyAvdXNy L3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW0uaAkyMDE2LTExLTMwIDEwOjU2OjA1Ljc4NDk5OTAw MCArMDAwMApAQCAtMTgzLDYgKzE4Myw3IEBACiBpbnQgdm1fYWxsb2NfbWVtc2VnKHN0cnVjdCB2 bSAqdm0sIGludCBpZGVudCwgc2l6ZV90IGxlbiwgYm9vbCBzeXNtZW0pOwogdm9pZCB2bV9mcmVl X21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpOwogaW50IHZtX21hcF9tbWlvKHN0cnVj dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2bV9wYWRkcl90IGhwYSk7Citp bnQgdm1fbWFwX3VzZXJtZW0oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBs ZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAqdGQpOwogaW50IHZtX3VubWFwX21taW8oc3Ry dWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwogaW50IHZtX2Fzc2lnbl9w cHRkZXYoc3RydWN0IHZtICp2bSwgaW50IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsKIGludCB2 bV91bmFzc2lnbl9wcHRkZXYoc3RydWN0IHZtICp2bSwgaW50IGJ1cywgaW50IHNsb3QsIGludCBm dW5jKTsKQEAgLTMyMSw2ICszMjIsNyBAQAogc3RydWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0 IHZtICp2bSk7CiBzdHJ1Y3QgdnBtdG1yICp2bV9wbXRtcihzdHJ1Y3Qgdm0gKnZtKTsKIHN0cnVj dCB2cnRjICp2bV9ydGMoc3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgaW9yZWdoICp2bV9pb3JlZ2go c3RydWN0IHZtICp2bSk7CiAKIC8qCiAgKiBJbmplY3QgZXhjZXB0aW9uICd2ZWN0b3InIGludG8g dGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uCkBAIC00MTcsNyArNDE5 LDE0IEBACiAJRURHRV9UUklHR0VSLAogCUxFVkVMX1RSSUdHRVIKIH07Ci0JCisKKy8qIE9wZXJh dGlvbnMgc3VwcG9ydGVkIG9uIFZNX0lPX1JFR19IQU5ETEVSIGlvY3RsLiAqLworZW51bSB2bV9p b19yZWdoX3R5cGUgeworCVZNX0lPX1JFR0hfREVMRVRFLAorCVZNX0lPX1JFR0hfS1dFVkVOVFMs CS8qIGtlcm5lbCB3YWl0IGV2ZW50cyAqLworCVZNX0lPX1JFR0hfTUFYCit9OworCiAvKgogICog VGhlICdhY2Nlc3MnIGZpZWxkIGhhcyB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBUYWJsZSAyMS0y IG9mIHRoZSBJbnRlbAogICogQXJjaGl0ZWN0dXJlIE1hbnVhbCB2b2wgM2IuCmRpZmYgLXUgLXIg LU4gdXNyL3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW0uaC5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2 NC9pbmNsdWRlL3ZtbS5oLm9yaWcKLS0tIHVzci9zcmMvc3lzL2FtZDY0L2luY2x1ZGUvdm1tLmgu b3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lz L2FtZDY0L2luY2x1ZGUvdm1tLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjUzLjgyMjk1OTAwMCAr MDAwMApAQCAtMCwwICsxLDY3NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBw LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5j bHVkZS92bW0uaCAyOTkwMTAgMjAxNi0wNS0wMyAyMjoxMzowNFogcGZnICQKKyAqLworCisjaWZu ZGVmIF9WTU1fSF8KKyNkZWZpbmUJX1ZNTV9IXworCisjaW5jbHVkZSA8eDg2L3NlZ21lbnRzLmg+ CisKK2VudW0gdm1fc3VzcGVuZF9ob3cgeworCVZNX1NVU1BFTkRfTk9ORSwKKwlWTV9TVVNQRU5E X1JFU0VULAorCVZNX1NVU1BFTkRfUE9XRVJPRkYsCisJVk1fU1VTUEVORF9IQUxULAorCVZNX1NV U1BFTkRfVFJJUExFRkFVTFQsCisJVk1fU1VTUEVORF9MQVNUCit9OworCisvKgorICogSWRlbnRp ZmllcnMgZm9yIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIHJlZ2lzdGVycy4KKyAqLworZW51bSB2 bV9yZWdfbmFtZSB7CisJVk1fUkVHX0dVRVNUX1JBWCwKKwlWTV9SRUdfR1VFU1RfUkJYLAorCVZN X1JFR19HVUVTVF9SQ1gsCisJVk1fUkVHX0dVRVNUX1JEWCwKKwlWTV9SRUdfR1VFU1RfUlNJLAor CVZNX1JFR19HVUVTVF9SREksCisJVk1fUkVHX0dVRVNUX1JCUCwKKwlWTV9SRUdfR1VFU1RfUjgs CisJVk1fUkVHX0dVRVNUX1I5LAorCVZNX1JFR19HVUVTVF9SMTAsCisJVk1fUkVHX0dVRVNUX1Ix MSwKKwlWTV9SRUdfR1VFU1RfUjEyLAorCVZNX1JFR19HVUVTVF9SMTMsCisJVk1fUkVHX0dVRVNU X1IxNCwKKwlWTV9SRUdfR1VFU1RfUjE1LAorCVZNX1JFR19HVUVTVF9DUjAsCisJVk1fUkVHX0dV RVNUX0NSMywKKwlWTV9SRUdfR1VFU1RfQ1I0LAorCVZNX1JFR19HVUVTVF9EUjcsCisJVk1fUkVH X0dVRVNUX1JTUCwKKwlWTV9SRUdfR1VFU1RfUklQLAorCVZNX1JFR19HVUVTVF9SRkxBR1MsCisJ Vk1fUkVHX0dVRVNUX0VTLAorCVZNX1JFR19HVUVTVF9DUywKKwlWTV9SRUdfR1VFU1RfU1MsCisJ Vk1fUkVHX0dVRVNUX0RTLAorCVZNX1JFR19HVUVTVF9GUywKKwlWTV9SRUdfR1VFU1RfR1MsCisJ Vk1fUkVHX0dVRVNUX0xEVFIsCisJVk1fUkVHX0dVRVNUX1RSLAorCVZNX1JFR19HVUVTVF9JRFRS LAorCVZNX1JFR19HVUVTVF9HRFRSLAorCVZNX1JFR19HVUVTVF9FRkVSLAorCVZNX1JFR19HVUVT VF9DUjIsCisJVk1fUkVHX0dVRVNUX1BEUFRFMCwKKwlWTV9SRUdfR1VFU1RfUERQVEUxLAorCVZN X1JFR19HVUVTVF9QRFBURTIsCisJVk1fUkVHX0dVRVNUX1BEUFRFMywKKwlWTV9SRUdfR1VFU1Rf SU5UUl9TSEFET1csCisJVk1fUkVHX0xBU1QKK307CisKK2VudW0geDJhcGljX3N0YXRlIHsKKwlY MkFQSUNfRElTQUJMRUQsCisJWDJBUElDX0VOQUJMRUQsCisJWDJBUElDX1NUQVRFX0xBU1QKK307 CisKKyNkZWZpbmUJVk1fSU5USU5GT19WRUNUT1IoaW5mbykJKChpbmZvKSAmIDB4ZmYpCisjZGVm aW5lCVZNX0lOVElORk9fREVMX0VSUkNPREUJMHg4MDAKKyNkZWZpbmUJVk1fSU5USU5GT19SU1ZE CQkweDdmZmZmMDAwCisjZGVmaW5lCVZNX0lOVElORk9fVkFMSUQJMHg4MDAwMDAwMAorI2RlZmlu ZQlWTV9JTlRJTkZPX1RZUEUJCTB4NzAwCisjZGVmaW5lCVZNX0lOVElORk9fSFdJTlRSCSgwIDw8 IDgpCisjZGVmaW5lCVZNX0lOVElORk9fTk1JCQkoMiA8PCA4KQorI2RlZmluZQlWTV9JTlRJTkZP X0hXRVhDRVBUSU9OCSgzIDw8IDgpCisjZGVmaW5lCVZNX0lOVElORk9fU1dJTlRSCSg0IDw8IDgp CisKKyNpZmRlZiBfS0VSTkVMCisKKyNkZWZpbmUJVk1fTUFYX05BTUVMRU4JMzIKKworc3RydWN0 IHZtOworc3RydWN0IHZtX2V4Y2VwdGlvbjsKK3N0cnVjdCBzZWdfZGVzYzsKK3N0cnVjdCB2bV9l eGl0Oworc3RydWN0IHZtX3J1bjsKK3N0cnVjdCB2aHBldDsKK3N0cnVjdCB2aW9hcGljOworc3Ry dWN0IHZsYXBpYzsKK3N0cnVjdCB2bXNwYWNlOworc3RydWN0IHZtX29iamVjdDsKK3N0cnVjdCB2 bV9ndWVzdF9wYWdpbmc7CitzdHJ1Y3QgcG1hcDsKKworc3RydWN0IHZtX2V2ZW50aW5mbyB7CisJ dm9pZAkqcnB0cjsJCS8qIHJlbmRlenZvdXMgY29va2llICovCisJaW50CSpzcHRyOwkJLyogc3Vz cGVuZCBjb29raWUgKi8KKwlpbnQJKmlwdHI7CQkvKiByZXFpZGxlIGNvb2tpZSAqLworfTsKKwor dHlwZWRlZiBpbnQJKCp2bW1faW5pdF9mdW5jX3QpKGludCBpcGludW0pOwordHlwZWRlZiBpbnQJ KCp2bW1fY2xlYW51cF9mdW5jX3QpKHZvaWQpOwordHlwZWRlZiB2b2lkCSgqdm1tX3Jlc3VtZV9m dW5jX3QpKHZvaWQpOwordHlwZWRlZiB2b2lkICoJKCp2bWlfaW5pdF9mdW5jX3QpKHN0cnVjdCB2 bSAqdm0sIHN0cnVjdCBwbWFwICpwbWFwKTsKK3R5cGVkZWYgaW50CSgqdm1pX3J1bl9mdW5jX3Qp KHZvaWQgKnZtaSwgaW50IHZjcHUsIHJlZ2lzdGVyX3QgcmlwLAorCQkgICAgc3RydWN0IHBtYXAg KnBtYXAsIHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pOwordHlwZWRlZiB2b2lkCSgqdm1pX2Ns ZWFudXBfZnVuY190KSh2b2lkICp2bWkpOwordHlwZWRlZiBpbnQJKCp2bWlfZ2V0X3JlZ2lzdGVy X3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICAgICAgdWludDY0X3QgKnJl dHZhbCk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfcmVnaXN0ZXJfdCkodm9pZCAqdm1pLCBpbnQg dmNwdSwgaW50IG51bSwKKwkJCQkgICAgICB1aW50NjRfdCB2YWwpOwordHlwZWRlZiBpbnQJKCp2 bWlfZ2V0X2Rlc2NfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwKKwkJCQkgIHN0cnVj dCBzZWdfZGVzYyAqZGVzYyk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfZGVzY190KSh2b2lkICp2 bWksIGludCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgc3RydWN0IHNlZ19kZXNjICpkZXNjKTsKK3R5 cGVkZWYgaW50CSgqdm1pX2dldF9jYXBfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwg aW50ICpyZXR2YWwpOwordHlwZWRlZiBpbnQJKCp2bWlfc2V0X2NhcF90KSh2b2lkICp2bWksIGlu dCB2Y3B1LCBpbnQgbnVtLCBpbnQgdmFsKTsKK3R5cGVkZWYgc3RydWN0IHZtc3BhY2UgKiAoKnZt aV92bXNwYWNlX2FsbG9jKSh2bV9vZmZzZXRfdCBtaW4sIHZtX29mZnNldF90IG1heCk7Cit0eXBl ZGVmIHZvaWQJKCp2bWlfdm1zcGFjZV9mcmVlKShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSk7Cit0 eXBlZGVmIHN0cnVjdCB2bGFwaWMgKiAoKnZtaV92bGFwaWNfaW5pdCkodm9pZCAqdm1pLCBpbnQg dmNwdSk7Cit0eXBlZGVmIHZvaWQJKCp2bWlfdmxhcGljX2NsZWFudXApKHZvaWQgKnZtaSwgc3Ry dWN0IHZsYXBpYyAqdmxhcGljKTsKKworc3RydWN0IHZtbV9vcHMgeworCXZtbV9pbml0X2Z1bmNf dAkJaW5pdDsJCS8qIG1vZHVsZSB3aWRlIGluaXRpYWxpemF0aW9uICovCisJdm1tX2NsZWFudXBf ZnVuY190CWNsZWFudXA7CisJdm1tX3Jlc3VtZV9mdW5jX3QJcmVzdW1lOworCisJdm1pX2luaXRf ZnVuY190CQl2bWluaXQ7CQkvKiB2bS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLworCXZtaV9y dW5fZnVuY190CQl2bXJ1bjsKKwl2bWlfY2xlYW51cF9mdW5jX3QJdm1jbGVhbnVwOworCXZtaV9n ZXRfcmVnaXN0ZXJfdAl2bWdldHJlZzsKKwl2bWlfc2V0X3JlZ2lzdGVyX3QJdm1zZXRyZWc7CisJ dm1pX2dldF9kZXNjX3QJCXZtZ2V0ZGVzYzsKKwl2bWlfc2V0X2Rlc2NfdAkJdm1zZXRkZXNjOwor CXZtaV9nZXRfY2FwX3QJCXZtZ2V0Y2FwOworCXZtaV9zZXRfY2FwX3QJCXZtc2V0Y2FwOworCXZt aV92bXNwYWNlX2FsbG9jCXZtc3BhY2VfYWxsb2M7CisJdm1pX3Ztc3BhY2VfZnJlZQl2bXNwYWNl X2ZyZWU7CisJdm1pX3ZsYXBpY19pbml0CQl2bGFwaWNfaW5pdDsKKwl2bWlfdmxhcGljX2NsZWFu dXAJdmxhcGljX2NsZWFudXA7Cit9OworCitleHRlcm4gc3RydWN0IHZtbV9vcHMgdm1tX29wc19p bnRlbDsKK2V4dGVybiBzdHJ1Y3Qgdm1tX29wcyB2bW1fb3BzX2FtZDsKKworaW50IHZtX2NyZWF0 ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgdm0gKipyZXR2bSk7Cit2b2lkIHZtX2Rlc3Ryb3ko c3RydWN0IHZtICp2bSk7CitpbnQgdm1fcmVpbml0KHN0cnVjdCB2bSAqdm0pOworY29uc3QgY2hh ciAqdm1fbmFtZShzdHJ1Y3Qgdm0gKnZtKTsKKworLyoKKyAqIEFQSXMgdGhhdCBtb2RpZnkgdGhl IGd1ZXN0IG1lbW9yeSBtYXAgcmVxdWlyZSBhbGwgdmNwdXMgdG8gYmUgZnJvemVuLgorICovCitp bnQgdm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIGludCBzZWdp ZCwgdm1fb29mZnNldF90IG9mZiwKKyAgICBzaXplX3QgbGVuLCBpbnQgcHJvdCwgaW50IGZsYWdz KTsKK2ludCB2bV9hbGxvY19tZW1zZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3Qg bGVuLCBib29sIHN5c21lbSk7Cit2b2lkIHZtX2ZyZWVfbWVtc2VnKHN0cnVjdCB2bSAqdm0sIGlu dCBpZGVudCk7CitpbnQgdm1fbWFwX21taW8oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEs IHNpemVfdCBsZW4sIHZtX3BhZGRyX3QgaHBhKTsKK2ludCB2bV91bm1hcF9tbWlvKHN0cnVjdCB2 bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKTsKK2ludCB2bV9hc3NpZ25fcHB0ZGV2 KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CitpbnQgdm1fdW5h c3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7 CisKKy8qCisgKiBBUElzIHRoYXQgaW5zcGVjdCB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJl IG9ubHkgYSAqc2luZ2xlKiB2Y3B1IHRvCisgKiBiZSBmcm96ZW4uIFRoaXMgYWN0cyBsaWtlIGEg cmVhZCBsb2NrIG9uIHRoZSBndWVzdCBtZW1vcnkgbWFwIHNpbmNlIGFueQorICogbW9kaWZpY2F0 aW9uIHJlcXVpcmVzICphbGwqIHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBf Z2V0bmV4dChzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90ICpncGEsIGludCAqc2VnaWQsCisgICAg dm1fb29mZnNldF90ICpzZWdvZmYsIHNpemVfdCAqbGVuLCBpbnQgKnByb3QsIGludCAqZmxhZ3Mp OworaW50IHZtX2dldF9tZW1zZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3QgKmxl biwgYm9vbCAqc3lzbWVtLAorICAgIHN0cnVjdCB2bV9vYmplY3QgKipvYmpwdHIpOwordm9pZCAq dm1fZ3BhX2hvbGQoc3RydWN0IHZtICosIGludCB2Y3B1aWQsIHZtX3BhZGRyX3QgZ3BhLCBzaXpl X3QgbGVuLAorICAgIGludCBwcm90LCB2b2lkICoqY29va2llKTsKK3ZvaWQgdm1fZ3BhX3JlbGVh c2Uodm9pZCAqY29va2llKTsKK2Jvb2wgdm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBp bnQgdmNwdWlkLCB2bV9wYWRkcl90IGdwYSk7CisKK2ludCB2bV9nZXRfcmVnaXN0ZXIoc3RydWN0 IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50IHZtX3Nl dF9yZWdpc3RlcihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHJlZywgdWludDY0X3QgdmFs KTsKK2ludCB2bV9nZXRfc2VnX2Rlc2Moc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcs CisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2MgKnJldF9kZXNjKTsKK2ludCB2bV9zZXRfc2VnX2Rlc2Mo c3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2Mg KmRlc2MpOworaW50IHZtX3J1bihzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3Qgdm1fcnVuICp2bXJ1bik7 CitpbnQgdm1fc3VzcGVuZChzdHJ1Y3Qgdm0gKnZtLCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdyk7 CitpbnQgdm1faW5qZWN0X25taShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQgdm1fbm1p X3BlbmRpbmcoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX25taV9jbGVhcihz dHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK2ludCB2bV9pbmplY3RfZXh0aW50KHN0cnVjdCB2 bSAqdm0sIGludCB2Y3B1KTsKK2ludCB2bV9leHRpbnRfcGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBp bnQgdmNwdWlkKTsKK3ZvaWQgdm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1 aWQpOworc3RydWN0IHZsYXBpYyAqdm1fbGFwaWMoc3RydWN0IHZtICp2bSwgaW50IGNwdSk7Citz dHJ1Y3QgdmlvYXBpYyAqdm1faW9hcGljKHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZocGV0ICp2 bV9ocGV0KHN0cnVjdCB2bSAqdm0pOworaW50IHZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAq dm0sIGludCB2Y3B1LCBpbnQgdHlwZSwgaW50ICp2YWwpOworaW50IHZtX3NldF9jYXBhYmlsaXR5 KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgdHlwZSwgaW50IHZhbCk7CitpbnQgdm1fZ2V0 X3gyYXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUg KnN0YXRlKTsKK2ludCB2bV9zZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1 LCBlbnVtIHgyYXBpY19zdGF0ZSBzdGF0ZSk7CitpbnQgdm1fYXBpY2lkMnZjcHVpZChzdHJ1Y3Qg dm0gKnZtLCBpbnQgYXBpY2lkKTsKK2ludCB2bV9hY3RpdmF0ZV9jcHUoc3RydWN0IHZtICp2bSwg aW50IHZjcHUpOworc3RydWN0IHZtX2V4aXQgKnZtX2V4aXRpbmZvKHN0cnVjdCB2bSAqdm0sIGlu dCB2Y3B1aWQpOwordm9pZCB2bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw dWlkLCB1aW50NjRfdCByaXApOwordm9pZCB2bV9leGl0X3JlbmRlenZvdXMoc3RydWN0IHZtICp2 bSwgaW50IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKK3ZvaWQgdm1fZXhpdF9hc3RwZW5kaW5nKHN0 cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCk7Cit2b2lkIHZtX2V4aXRfcmVx aWRsZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApOworCisjaWZkZWYg X1NZU19fQ1BVU0VUX0hfCisvKgorICogUmVuZGV6dm91cyBhbGwgdmNwdXMgc3BlY2lmaWVkIGlu ICdkZXN0JyBhbmQgZXhlY3V0ZSAnZnVuYyhhcmcpJy4KKyAqIFRoZSByZW5kZXp2b3VzICdmdW5j KGFyZyknIGlzIG5vdCBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIHRoYXQgd2lsbAorICogY2F1c2Ug dGhlIHRocmVhZCB0byBiZSBwdXQgdG8gc2xlZXAuCisgKgorICogSWYgdGhlIHJlbmRlenZvdXMg aXMgYmVpbmcgaW5pdGlhdGVkIGZyb20gYSB2Y3B1IGNvbnRleHQgdGhlbiB0aGUKKyAqICd2Y3B1 aWQnIG11c3QgcmVmZXIgdG8gdGhhdCB2Y3B1LCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0 byAtMS4KKyAqCisgKiBUaGUgY2FsbGVyIGNhbm5vdCBob2xkIGFueSBsb2NrcyB3aGVuIGluaXRp YXRpbmcgdGhlIHJlbmRlenZvdXMuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMg QVBJIG1heSBjYXVzZSB2Y3B1cyBvdGhlciB0aGFuIHRob3NlIHNwZWNpZmllZAorICogYnkgJ2Rl c3QnIHRvIGJlIHN0YWxsZWQuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCByZWx5IG9uIGFueSB2Y3B1 cyBtYWtpbmcKKyAqIGZvcndhcmQgcHJvZ3Jlc3Mgd2hlbiB0aGUgcmVuZGV6dm91cyBpcyBpbiBw cm9ncmVzcy4KKyAqLwordHlwZWRlZiB2b2lkICgqdm1fcmVuZGV6dm91c19mdW5jX3QpKHN0cnVj dCB2bSAqdm0sIGludCB2Y3B1aWQsIHZvaWQgKmFyZyk7Cit2b2lkIHZtX3NtcF9yZW5kZXp2b3Vz KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGNwdXNldF90IGRlc3QsCisgICAgdm1fcmVuZGV6 dm91c19mdW5jX3QgZnVuYywgdm9pZCAqYXJnKTsKK2NwdXNldF90IHZtX2FjdGl2ZV9jcHVzKHN0 cnVjdCB2bSAqdm0pOworY3B1c2V0X3Qgdm1fc3VzcGVuZGVkX2NwdXMoc3RydWN0IHZtICp2bSk7 CisjZW5kaWYJLyogX1NZU19fQ1BVU0VUX0hfICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3Zj cHVfcmVuZGV6dm91c19wZW5kaW5nKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwly ZXR1cm4gKCooKHVpbnRwdHJfdCAqKShpbmZvLT5ycHRyKSkgIT0gMCk7Cit9CisKK3N0YXRpYyBf X2lubGluZSBpbnQKK3ZjcHVfc3VzcGVuZGVkKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7 CisKKwlyZXR1cm4gKCppbmZvLT5zcHRyKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAordmNw dV9yZXFpZGxlKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZv LT5pcHRyKTsKK30KKworLyoKKyAqIFJldHVybiAxIGlmIGRldmljZSBpbmRpY2F0ZWQgYnkgYnVz L3Nsb3QvZnVuYyBpcyBzdXBwb3NlZCB0byBiZSBhCisgKiBwY2kgcGFzc3Rocm91Z2ggZGV2aWNl LgorICoKKyAqIFJldHVybiAwIG90aGVyd2lzZS4KKyAqLworaW50IHZtbV9pc19wcHRkZXYoaW50 IGJ1cywgaW50IHNsb3QsIGludCBmdW5jKTsKKwordm9pZCAqdm1faW9tbXVfZG9tYWluKHN0cnVj dCB2bSAqdm0pOworCitlbnVtIHZjcHVfc3RhdGUgeworCVZDUFVfSURMRSwKKwlWQ1BVX0ZST1pF TiwKKwlWQ1BVX1JVTk5JTkcsCisJVkNQVV9TTEVFUElORywKK307CisKK2ludCB2Y3B1X3NldF9z dGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB2Y3B1X3N0YXRlIHN0YXRlLAorICAg IGJvb2wgZnJvbV9pZGxlKTsKK2VudW0gdmNwdV9zdGF0ZSB2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qg dm0gKnZtLCBpbnQgdmNwdSwgaW50ICpob3N0Y3B1KTsKKworc3RhdGljIGludCBfX2lubGluZQor dmNwdV9pc19ydW5uaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgKmhvc3RjcHUpCit7 CisJcmV0dXJuICh2Y3B1X2dldF9zdGF0ZSh2bSwgdmNwdSwgaG9zdGNwdSkgPT0gVkNQVV9SVU5O SU5HKTsKK30KKworI2lmZGVmIF9TWVNfUFJPQ19IXworc3RhdGljIGludCBfX2lubGluZQordmNw dV9zaG91bGRfeWllbGQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUpCit7CisKKwlpZiAoY3VydGhy ZWFkLT50ZF9mbGFncyAmIChUREZfQVNUUEVORElORyB8IFRERl9ORUVEUkVTQ0hFRCkpCisJCXJl dHVybiAoMSk7CisJZWxzZSBpZiAoY3VydGhyZWFkLT50ZF9vd2VwcmVlbXB0KQorCQlyZXR1cm4g KDEpOworCWVsc2UKKwkJcmV0dXJuICgwKTsKK30KKyNlbmRpZgorCit2b2lkICp2Y3B1X3N0YXRz KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsKK3ZvaWQgdmNwdV9ub3RpZnlfZXZlbnQoc3RydWN0 IHZtICp2bSwgaW50IHZjcHVpZCwgYm9vbCBsYXBpY19pbnRyKTsKK3N0cnVjdCB2bXNwYWNlICp2 bV9nZXRfdm1zcGFjZShzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2YXRwaWMgKnZtX2F0cGljKHN0 cnVjdCB2bSAqdm0pOworc3RydWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0IHZtICp2bSk7Citz dHJ1Y3QgdnBtdG1yICp2bV9wbXRtcihzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2cnRjICp2bV9y dGMoc3RydWN0IHZtICp2bSk7CisKKy8qCisgKiBJbmplY3QgZXhjZXB0aW9uICd2ZWN0b3InIGlu dG8gdGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uCisgKiBzdWNjZXNz IGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICoKKyAqIFdyYXBwZXIgZnVuY3Rpb25zIGxpa2Ug J3ZtX2luamVjdF9ncCgpJyBzaG91bGQgYmUgcHJlZmVycmVkIHRvIGNhbGxpbmcKKyAqIHRoaXMg ZnVuY3Rpb24gZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGVuZm9yY2UgdGhlIHRyYXAtbGlrZSBvciBm YXVsdC1saWtlCisgKiBiZWhhdmlvciBvZiBhbiBleGNlcHRpb24uCisgKgorICogVGhpcyBmdW5j dGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHRocmVhZCB0 aGF0IGlzCisgKiBleGVjdXRpbmcgdGhpcyB2Y3B1LgorICovCitpbnQgdm1faW5qZWN0X2V4Y2Vw dGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgdmVjdG9yLCBpbnQgZXJyX3ZhbGlk LAorICAgIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0YXJ0X2luc3RydWN0aW9uKTsKKworLyoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgVk0tZXhpdCB0aGF0IG9jY3VycmVk IGR1cmluZyBleGNlcHRpb24gb3IKKyAqIGludGVycnVwdCBkZWxpdmVyeSB0aHJvdWdoIHRoZSBJ RFQuIFRoZSBmb3JtYXQgb2YgJ2ludGluZm8nIGlzIGRlc2NyaWJlZAorICogaW4gRmlndXJlIDE1 LTEsICJFWElUSU5USU5GTyBmb3IgQWxsIEludGVyY2VwdHMiLCBBUE0sIFZvbCAyLgorICoKKyAq IElmIGEgVk0tZXhpdCBoYW5kbGVyIGNvbXBsZXRlcyB0aGUgZXZlbnQgZGVsaXZlcnkgc3VjY2Vz c2Z1bGx5IHRoZW4gaXQKKyAqIHNob3VsZCBjYWxsIHZtX2V4aXRfaW50aW5mbygpIHRvIGV4dGlu Z3Vpc2ggdGhlIHBlbmRpbmcgZXZlbnQuIEZvciBlLmcuLAorICogaWYgdGhlIHRhc2sgc3dpdGNo IGVtdWxhdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIGEgdGFzayBnYXRlIHRoZW4gaXQgc2hvdWxkCisg KiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAnaW50aW5mbz0wJyB0byBpbmRpY2F0ZSB0aGF0IHRo ZSBleHRlcm5hbCBldmVudAorICogaXMgbm90IHBlbmRpbmcgYW55bW9yZS4KKyAqCisgKiBSZXR1 cm4gdmFsdWUgaXMgMCBvbiBzdWNjZXNzIGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICovCitp bnQgdm1fZXhpdF9pbnRpbmZvKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IGlu dGluZm8pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGV2ZXJ5IFZN LWVudHJ5IHRvIHJldHJpZXZlIGEgcGVuZGluZworICogZXZlbnQgdGhhdCBzaG91bGQgYmUgaW5q ZWN0ZWQgaW50byB0aGUgZ3Vlc3QuIFRoaXMgZnVuY3Rpb24gY29tYmluZXMKKyAqIG5lc3RlZCBl dmVudHMgaW50byBhIGRvdWJsZSBvciB0cmlwbGUgZmF1bHQuCisgKgorICogUmV0dXJucyAwIGlm IHRoZXJlIGFyZSBubyBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGluamVjdGVkIGludG8gdGhlIGd1 ZXN0CisgKiBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQgdm1fZW50cnlfaW50aW5m byhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbyk7CisKK2ludCB2bV9n ZXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbzEsIHVp bnQ2NF90ICppbmZvMik7CisKK2VudW0gdm1fcmVnX25hbWUgdm1fc2VnbWVudF9uYW1lKGludCBz ZWdfZW5jb2RpbmcpOworCitzdHJ1Y3Qgdm1fY29weWluZm8geworCXVpbnQ2NF90CWdwYTsKKwlz aXplX3QJCWxlbjsKKwl2b2lkCQkqaHZhOworCXZvaWQJCSpjb29raWU7Cit9OworCisvKgorICog U2V0IHVwICdjb3B5aW5mb1tdJyB0byBjb3B5IHRvL2Zyb20gZ3Vlc3QgbGluZWFyIGFkZHJlc3Mg c3BhY2Ugc3RhcnRpbmcKKyAqIGF0ICdnbGEnIGFuZCAnbGVuJyBieXRlcyBsb25nLiBUaGUgJ3By b3QnIHNob3VsZCBiZSBzZXQgdG8gUFJPVF9SRUFEIGZvcgorICogYSBjb3B5aW4gb3IgUFJPVF9X UklURSBmb3IgYSBjb3B5b3V0LiAKKyAqCisgKiByZXR2YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRp b24KKyAqICAgMAkJICAgMAkJU3VjY2VzcworICogICAwCQkgICAxCQlBbiBleGNlcHRpb24gd2Fz IGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFVTFQJICBOL0EJCVVucmVjb3ZlcmFibGUg ZXJyb3IKKyAqCisgKiBUaGUgJ2NvcHlpbmZvW10nIGNhbiBiZSBwYXNzZWQgdG8gJ3ZtX2NvcHlp bigpJyBvciAndm1fY29weW91dCgpJyBvbmx5IGlmCisgKiB0aGUgcmV0dXJuIHZhbHVlIGlzIDAu IFRoZSAnY29weWluZm9bXScgcmVzb3VyY2VzIHNob3VsZCBiZSBmcmVlZCBieSBjYWxsaW5nCisg KiAndm1fY29weV90ZWFyZG93bigpJyBhZnRlciB0aGUgY29weSBpcyBkb25lLgorICovCitpbnQg dm1fY29weV9zZXR1cChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3Rf cGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBzaXplX3QgbGVuLCBpbnQgcHJvdCwg c3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAgICBpbnQgbnVtX2NvcHlpbmZvLCBpbnQg KmlzX2ZhdWx0KTsKK3ZvaWQgdm1fY29weV90ZWFyZG93bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw dWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGludCBudW1fY29weWluZm8p Owordm9pZCB2bV9jb3B5aW4oc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2Nv cHlpbmZvICpjb3B5aW5mbywKKyAgICB2b2lkICprYWRkciwgc2l6ZV90IGxlbik7Cit2b2lkIHZt X2NvcHlvdXQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgY29uc3Qgdm9pZCAqa2FkZHIsCisg ICAgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywgc2l6ZV90IGxlbik7CisKK2ludCB2Y3B1 X3RyYWNlX2V4Y2VwdGlvbnMoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7CisjZW5kaWYJLyog S0VSTkVMICovCisKKyNkZWZpbmUJVk1fTUFYQ1BVCTE2CQkJLyogbWF4aW11bSB2aXJ0dWFsIGNw dXMgKi8KKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBvcHRpb25hbCB2bW0gY2FwYWJpbGl0aWVz CisgKi8KK2VudW0gdm1fY2FwX3R5cGUgeworCVZNX0NBUF9IQUxUX0VYSVQsCisJVk1fQ0FQX01U UkFQX0VYSVQsCisJVk1fQ0FQX1BBVVNFX0VYSVQsCisJVk1fQ0FQX1VOUkVTVFJJQ1RFRF9HVUVT VCwKKwlWTV9DQVBfRU5BQkxFX0lOVlBDSUQsCisJVk1fQ0FQX01BWAorfTsKKworZW51bSB2bV9p bnRyX3RyaWdnZXIgeworCUVER0VfVFJJR0dFUiwKKwlMRVZFTF9UUklHR0VSCit9OworCQorLyoK KyAqIFRoZSAnYWNjZXNzJyBmaWVsZCBoYXMgdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gVGFibGUg MjEtMiBvZiB0aGUgSW50ZWwKKyAqIEFyY2hpdGVjdHVyZSBNYW51YWwgdm9sIDNiLgorICoKKyAq IFhYWCBUaGUgY29udGVudHMgb2YgdGhlICdhY2Nlc3MnIGZpZWxkIGFyZSBhcmNoaXRlY3R1cmFs bHkgZGVmaW5lZCBleGNlcHQKKyAqIGJpdCAxNiAtIFNlZ21lbnQgVW51c2FibGUuCisgKi8KK3N0 cnVjdCBzZWdfZGVzYyB7CisJdWludDY0X3QJYmFzZTsKKwl1aW50MzJfdAlsaW1pdDsKKwl1aW50 MzJfdAlhY2Nlc3M7Cit9OworI2RlZmluZQlTRUdfREVTQ19UWVBFKGFjY2VzcykJCSgoYWNjZXNz KSAmIDB4MDAxZikKKyNkZWZpbmUJU0VHX0RFU0NfRFBMKGFjY2VzcykJCSgoKGFjY2VzcykgPj4g NSkgJiAweDMpCisjZGVmaW5lCVNFR19ERVNDX1BSRVNFTlQoYWNjZXNzKQkoKChhY2Nlc3MpICYg MHgwMDgwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19ERUYzMihhY2Nlc3MpCQkoKChhY2Nl c3MpICYgMHg0MDAwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19HUkFOVUxBUklUWShhY2Nl c3MpCSgoKGFjY2VzcykgJiAweDgwMDApID8gMSA6IDApCisjZGVmaW5lCVNFR19ERVNDX1VOVVNB QkxFKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MTAwMDApID8gMSA6IDApCisKK2VudW0gdm1fY3B1 X21vZGUgeworCUNQVV9NT0RFX1JFQUwsCisJQ1BVX01PREVfUFJPVEVDVEVELAorCUNQVV9NT0RF X0NPTVBBVElCSUxJVFksCQkvKiBJQS0zMkUgbW9kZSAoQ1MuTCA9IDApICovCisJQ1BVX01PREVf NjRCSVQsCQkJLyogSUEtMzJFIG1vZGUgKENTLkwgPSAxKSAqLworfTsKKworZW51bSB2bV9wYWdp bmdfbW9kZSB7CisJUEFHSU5HX01PREVfRkxBVCwKKwlQQUdJTkdfTU9ERV8zMiwKKwlQQUdJTkdf TU9ERV9QQUUsCisJUEFHSU5HX01PREVfNjQsCit9OworCitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5n IHsKKwl1aW50NjRfdAljcjM7CisJaW50CQljcGw7CisJZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9k ZTsKKwllbnVtIHZtX3BhZ2luZ19tb2RlIHBhZ2luZ19tb2RlOworfTsKKworLyoKKyAqIFRoZSBk YXRhIHN0cnVjdHVyZXMgJ3ZpZScgYW5kICd2aWVfb3AnIGFyZSBtZWFudCB0byBiZSBvcGFxdWUg dG8gdGhlCisgKiBjb25zdW1lcnMgb2YgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcuIFRoZSBvbmx5IHJl YXNvbiB3aHkgdGhlaXIgY29udGVudHMKKyAqIG5lZWQgdG8gYmUgZXhwb3NlZCBpcyBiZWNhdXNl IHRoZXkgYXJlIHBhcnQgb2YgdGhlICd2bV9leGl0JyBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB2 aWVfb3AgeworCXVpbnQ4X3QJCW9wX2J5dGU7CS8qIGFjdHVhbCBvcGNvZGUgYnl0ZSAqLworCXVp bnQ4X3QJCW9wX3R5cGU7CS8qIHR5cGUgb2Ygb3BlcmF0aW9uIChlLmcuIE1PVikgKi8KKwl1aW50 MTZfdAlvcF9mbGFnczsKK307CisKKyNkZWZpbmUJVklFX0lOU1RfU0laRQkxNQorc3RydWN0IHZp ZSB7CisJdWludDhfdAkJaW5zdFtWSUVfSU5TVF9TSVpFXTsJLyogaW5zdHJ1Y3Rpb24gYnl0ZXMg Ki8KKwl1aW50OF90CQludW1fdmFsaWQ7CQkvKiBzaXplIG9mIHRoZSBpbnN0cnVjdGlvbiAqLwor CXVpbnQ4X3QJCW51bV9wcm9jZXNzZWQ7CisKKwl1aW50OF90CQlhZGRyc2l6ZTo0LCBvcHNpemU6 NDsJLyogYWRkcmVzcyBhbmQgb3BlcmFuZCBzaXplcyAqLworCXVpbnQ4X3QJCXJleF93OjEsCQkv KiBSRVggcHJlZml4ICovCisJCQlyZXhfcjoxLAorCQkJcmV4X3g6MSwKKwkJCXJleF9iOjEsCisJ CQlyZXhfcHJlc2VudDoxLAorCQkJcmVwel9wcmVzZW50OjEsCQkvKiBSRVAvUkVQRS9SRVBaIHBy ZWZpeCAqLworCQkJcmVwbnpfcHJlc2VudDoxLAkvKiBSRVBORS9SRVBOWiBwcmVmaXggKi8KKwkJ CW9wc2l6ZV9vdmVycmlkZToxLAkvKiBPcGVyYW5kIHNpemUgb3ZlcnJpZGUgKi8KKwkJCWFkZHJz aXplX292ZXJyaWRlOjEsCS8qIEFkZHJlc3Mgc2l6ZSBvdmVycmlkZSAqLworCQkJc2VnbWVudF9v dmVycmlkZToxOwkvKiBTZWdtZW50IG92ZXJyaWRlICovCisKKwl1aW50OF90CQltb2Q6MiwJCQkv KiBNb2RSTSBieXRlICovCisJCQlyZWc6NCwKKwkJCXJtOjQ7CisKKwl1aW50OF90CQlzczoyLAkJ CS8qIFNJQiBieXRlICovCisJCQlpbmRleDo0LAorCQkJYmFzZTo0OworCisJdWludDhfdAkJZGlz cF9ieXRlczsKKwl1aW50OF90CQlpbW1fYnl0ZXM7CisKKwl1aW50OF90CQlzY2FsZTsKKwlpbnQJ CWJhc2VfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1RfeHl6ICovCisJaW50CQlpbmRleF9yZWdp c3RlcjsJCS8qIFZNX1JFR19HVUVTVF94eXogKi8KKwlpbnQJCXNlZ21lbnRfcmVnaXN0ZXI7CS8q IFZNX1JFR19HVUVTVF94eXogKi8KKworCWludDY0X3QJCWRpc3BsYWNlbWVudDsJCS8qIG9wdGlv bmFsIGFkZHIgZGlzcGxhY2VtZW50ICovCisJaW50NjRfdAkJaW1tZWRpYXRlOwkJLyogb3B0aW9u YWwgaW1tZWRpYXRlIG9wZXJhbmQgKi8KKworCXVpbnQ4X3QJCWRlY29kZWQ7CS8qIHNldCB0byAx IGlmIHN1Y2Nlc3NmdWxseSBkZWNvZGVkICovCisKKwlzdHJ1Y3QgdmllX29wCW9wOwkJCS8qIG9w Y29kZSBkZXNjcmlwdGlvbiAqLworfTsKKworZW51bSB2bV9leGl0Y29kZSB7CisJVk1fRVhJVENP REVfSU5PVVQsCisJVk1fRVhJVENPREVfVk1YLAorCVZNX0VYSVRDT0RFX0JPR1VTLAorCVZNX0VY SVRDT0RFX1JETVNSLAorCVZNX0VYSVRDT0RFX1dSTVNSLAorCVZNX0VYSVRDT0RFX0hMVCwKKwlW TV9FWElUQ09ERV9NVFJBUCwKKwlWTV9FWElUQ09ERV9QQVVTRSwKKwlWTV9FWElUQ09ERV9QQUdJ TkcsCisJVk1fRVhJVENPREVfSU5TVF9FTVVMLAorCVZNX0VYSVRDT0RFX1NQSU5VUF9BUCwKKwlW TV9FWElUQ09ERV9ERVBSRUNBVEVEMSwJLyogdXNlZCB0byBiZSBTUElORE9XTl9DUFUgKi8KKwlW TV9FWElUQ09ERV9SRU5ERVpWT1VTLAorCVZNX0VYSVRDT0RFX0lPQVBJQ19FT0ksCisJVk1fRVhJ VENPREVfU1VTUEVOREVELAorCVZNX0VYSVRDT0RFX0lOT1VUX1NUUiwKKwlWTV9FWElUQ09ERV9U QVNLX1NXSVRDSCwKKwlWTV9FWElUQ09ERV9NT05JVE9SLAorCVZNX0VYSVRDT0RFX01XQUlULAor CVZNX0VYSVRDT0RFX1NWTSwKKwlWTV9FWElUQ09ERV9SRVFJRExFLAorCVZNX0VYSVRDT0RFX01B WAorfTsKKworc3RydWN0IHZtX2lub3V0IHsKKwl1aW50MTZfdAlieXRlczozOwkvKiAxIG9yIDIg b3IgNCAqLworCXVpbnQxNl90CWluOjE7CisJdWludDE2X3QJc3RyaW5nOjE7CisJdWludDE2X3QJ cmVwOjE7CisJdWludDE2X3QJcG9ydDsKKwl1aW50MzJfdAllYXg7CQkvKiB2YWxpZCBmb3Igb3V0 ICovCit9OworCitzdHJ1Y3Qgdm1faW5vdXRfc3RyIHsKKwlzdHJ1Y3Qgdm1faW5vdXQJaW5vdXQ7 CQkvKiBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50ICovCisJc3RydWN0IHZtX2d1ZXN0X3BhZ2lu ZyBwYWdpbmc7CisJdWludDY0X3QJcmZsYWdzOworCXVpbnQ2NF90CWNyMDsKKwl1aW50NjRfdAlp bmRleDsKKwl1aW50NjRfdAljb3VudDsJCS8qIHJlcD0xICglcmN4KSwgcmVwPTAgKDEpICovCisJ aW50CQlhZGRyc2l6ZTsKKwllbnVtIHZtX3JlZ19uYW1lIHNlZ19uYW1lOworCXN0cnVjdCBzZWdf ZGVzYyBzZWdfZGVzYzsKK307CisKK2VudW0gdGFza19zd2l0Y2hfcmVhc29uIHsKKwlUU1JfQ0FM TCwKKwlUU1JfSVJFVCwKKwlUU1JfSk1QLAorCVRTUl9JRFRfR0FURSwJLyogdGFzayBnYXRlIGlu IElEVCAqLworfTsKKworc3RydWN0IHZtX3Rhc2tfc3dpdGNoIHsKKwl1aW50MTZfdAl0c3NzZWw7 CQkvKiBuZXcgVFNTIHNlbGVjdG9yICovCisJaW50CQlleHQ7CQkvKiB0YXNrIHN3aXRjaCBkdWUg dG8gZXh0ZXJuYWwgZXZlbnQgKi8KKwl1aW50MzJfdAllcnJjb2RlOworCWludAkJZXJyY29kZV92 YWxpZDsJLyogcHVzaCAnZXJyY29kZScgb24gdGhlIG5ldyBzdGFjayAqLworCWVudW0gdGFza19z d2l0Y2hfcmVhc29uIHJlYXNvbjsKKwlzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nIHBhZ2luZzsKK307 CisKK3N0cnVjdCB2bV9leGl0IHsKKwllbnVtIHZtX2V4aXRjb2RlCWV4aXRjb2RlOworCWludAkJ CWluc3RfbGVuZ3RoOwkvKiAwIG1lYW5zIHVua25vd24gKi8KKwl1aW50NjRfdAkJcmlwOworCXVu aW9uIHsKKwkJc3RydWN0IHZtX2lub3V0CWlub3V0OworCQlzdHJ1Y3Qgdm1faW5vdXRfc3RyIGlu b3V0X3N0cjsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWdwYTsKKwkJCWludAkJZmF1bHRfdHlw ZTsKKwkJfSBwYWdpbmc7CisJCXN0cnVjdCB7CisJCQl1aW50NjRfdAlncGE7CisJCQl1aW50NjRf dAlnbGE7CisJCQl1aW50NjRfdAljc19iYXNlOworCQkJaW50CQljc19kOwkJLyogQ1MuRCAqLwor CQkJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7CisJCQlzdHJ1Y3QgdmllCXZpZTsKKwkJ fSBpbnN0X2VtdWw7CisJCS8qCisJCSAqIFZNWCBzcGVjaWZpYyBwYXlsb2FkLiBVc2VkIHdoZW4g dGhlcmUgaXMgbm8gImJldHRlciIKKwkJICogZXhpdGNvZGUgdG8gcmVwcmVzZW50IHRoZSBWTS1l eGl0LgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCWludAkJc3RhdHVzOwkJLyogdm14IGluc3Qgc3Rh dHVzICovCisJCQkvKgorCQkJICogJ2V4aXRfcmVhc29uJyBhbmQgJ2V4aXRfcXVhbGlmaWNhdGlv bicgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0dXMnIGlzIHplcm8uCisJCQkgKi8KKwkJ CXVpbnQzMl90CWV4aXRfcmVhc29uOworCQkJdWludDY0X3QJZXhpdF9xdWFsaWZpY2F0aW9uOwor CQkJLyoKKwkJCSAqICdpbnN0X2Vycm9yJyBhbmQgJ2luc3RfdHlwZScgYXJlIHZhbGlkCisJCQkg KiBvbmx5IGlmICdzdGF0dXMnIGlzIG5vbi16ZXJvLgorCQkJICovCisJCQlpbnQJCWluc3RfdHlw ZTsKKwkJCWludAkJaW5zdF9lcnJvcjsKKwkJfSB2bXg7CisJCS8qCisJCSAqIFNWTSBzcGVjaWZp YyBwYXlsb2FkLgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CWV4aXRjb2RlOworCQkJ dWludDY0X3QJZXhpdGluZm8xOworCQkJdWludDY0X3QJZXhpdGluZm8yOworCQl9IHN2bTsKKwkJ c3RydWN0IHsKKwkJCXVpbnQzMl90CWNvZGU7CQkvKiBlY3ggdmFsdWUgKi8KKwkJCXVpbnQ2NF90 CXd2YWw7CisJCX0gbXNyOworCQlzdHJ1Y3QgeworCQkJaW50CQl2Y3B1OworCQkJdWludDY0X3QJ cmlwOworCQl9IHNwaW51cF9hcDsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CXJmbGFnczsKKwkJ fSBobHQ7CisJCXN0cnVjdCB7CisJCQlpbnQJCXZlY3RvcjsKKwkJfSBpb2FwaWNfZW9pOworCQlz dHJ1Y3QgeworCQkJZW51bSB2bV9zdXNwZW5kX2hvdyBob3c7CisJCX0gc3VzcGVuZGVkOworCQlz dHJ1Y3Qgdm1fdGFza19zd2l0Y2ggdGFza19zd2l0Y2g7CisJfSB1OworfTsKKworLyogQVBJcyB0 byBpbmplY3QgZmF1bHRzIGludG8gdGhlIGd1ZXN0ICovCit2b2lkIHZtX2luamVjdF9mYXVsdCh2 b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IHZlY3RvciwgaW50IGVycmNvZGVfdmFsaWQsCisgICAg aW50IGVycmNvZGUpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X3VkKHZvaWQg KnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfVUQs IDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X2dwKHZvaWQgKnZt LCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfR1AsIDEs IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm1faW5qZWN0X2FjKHZvaWQgKnZtLCBp bnQgdmNwdWlkLCBpbnQgZXJyY29kZSkKK3sKKwl2bV9pbmplY3RfZmF1bHQodm0sIHZjcHVpZCwg SURUX0FDLCAxLCBlcnJjb2RlKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK3ZtX2luamVj dF9zcyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVycmNvZGUpCit7CisJdm1faW5qZWN0X2Zh dWx0KHZtLCB2Y3B1aWQsIElEVF9TUywgMSwgZXJyY29kZSk7Cit9CisKK3ZvaWQgdm1faW5qZWN0 X3BmKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJyb3JfY29kZSwgdWludDY0X3QgY3IyKTsK KworaW50IHZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9pZCAqdm0sIGludCB2Y3B1aWQpOworCisj ZW5kaWYJLyogX1ZNTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L2luY2x1 ZGUvdm1tX2Rldi5oIC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaAotLS0gdXNy L3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAw MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaAkyMDE2 LTExLTMwIDEwOjU2OjA1Ljc4NjU4MzAwMCArMDAwMApAQCAtMTIzLDYgKzEyMywyMyBAQAogCXNp emVfdAkJbGVuOwogfTsKIAorLyogQXJndW1lbnQgZm9yIFZNX01BUF9VU0VSX0JVRiBpb2N0bCBp biB2bW1hcGkuYyAqLworc3RydWN0IHZtX3VzZXJfYnVmIHsKKwl2bV9wYWRkcl90CWdwYTsKKwl2 b2lkIAkJKmFkZHI7CisJc2l6ZV90CQlsZW47Cit9OworCisvKiBBcmd1bWVudCBmb3IgVk1fSU9f UkVHX0hBTkRMRVIgaW9jdGwgaW4gdm1tYXBpLmMgKi8KK3N0cnVjdCB2bV9pb19yZWdfaGFuZGxl ciB7CisJdWludDE2X3QJCXBvcnQ7CQkvKiBJL08gYWRkcmVzcyAqLworCXVpbnQxNl90CQlpbjsJ CS8qIDAgb3V0LCAxIGluICovCisJdWludDMyX3QJCW1hc2tfZGF0YTsJLyogMCBtZWFucyBtYXRj aCBhbnl0aGluZyAqLworCXVpbnQzMl90CQlkYXRhOwkJLyogZGF0YSB0byBtYXRjaCAqLworCWVu dW0gdm1faW9fcmVnaF90eXBlCXR5cGU7CQkvKiBoYW5kbGVyIHR5cGUgKi8KKwl2b2lkCQkJKmFy ZzsJCS8qIGhhbmRsZXIgYXJndW1lbnQgKi8KK307CisKIHN0cnVjdCB2bV9wcHRkZXZfbXNpIHsK IAlpbnQJCXZjcHU7CiAJaW50CQlidXM7CkBAIC0yODYsNiArMzAzLDEwIEBACiAJSU9DTlVNX1JU Q19XUklURSA9IDEwMSwKIAlJT0NOVU1fUlRDX1NFVFRJTUUgPSAxMDIsCiAJSU9DTlVNX1JUQ19H RVRUSU1FID0gMTAzLAorCisJLyogaG9zdCBtbWFwIGFuZCBJTyBoYW5kbGVyICovCisJSU9DTlVN X01BUF9VU0VSX0JVRiA9IDEwNCwKKwlJT0NOVU1fSU9fUkVHX0hBTkRMRVIgPSAxMDUsCiB9Owog CiAjZGVmaW5lCVZNX1JVTgkJXApAQCAtMzQ0LDYgKzM2NSwxMCBAQAogCV9JT1coJ3YnLCBJT0NO VU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3BwdGRldikKICNkZWZpbmUJVk1fTUFQX1BQVERF Vl9NTUlPIFwKIAlfSU9XKCd2JywgSU9DTlVNX01BUF9QUFRERVZfTU1JTywgc3RydWN0IHZtX3Bw dGRldl9tbWlvKQorI2RlZmluZQlWTV9NQVBfVVNFUl9CVUYgXAorCV9JT1coJ3YnLCBJT0NOVU1f TUFQX1VTRVJfQlVGLCBzdHJ1Y3Qgdm1fdXNlcl9idWYpCisjZGVmaW5lCVZNX0lPX1JFR19IQU5E TEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX0lPX1JFR19IQU5ETEVSLCBzdHJ1Y3Qgdm1faW9fcmVn X2hhbmRsZXIpCiAjZGVmaW5lCVZNX1BQVERFVl9NU0kgXAogCV9JT1coJ3YnLCBJT0NOVU1fUFBU REVWX01TSSwgc3RydWN0IHZtX3BwdGRldl9tc2kpCiAjZGVmaW5lCVZNX1BQVERFVl9NU0lYIFwK ZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnIC91 c3Ivc3JjL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9h bWQ2NC9pbmNsdWRlL3ZtbV9kZXYuaC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2Lmgub3JpZwkyMDE2 LTExLTMwIDEwOjUyOjU0LjM3MDQ0MDAwMCArMDAwMApAQCAtMCwwICsxLDM4NSBAQAorLyotCisg KiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJ TkMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmggMjk4MDk0IDIwMTYtMDQt MTYgMDM6NDQ6NTBaIGdqYiAkCisgKi8KKworI2lmbmRlZglfVk1NX0RFVl9IXworI2RlZmluZQlf Vk1NX0RFVl9IXworCisjaWZkZWYgX0tFUk5FTAordm9pZAl2bW1kZXZfaW5pdCh2b2lkKTsKK2lu dAl2bW1kZXZfY2xlYW51cCh2b2lkKTsKKyNlbmRpZgorCitzdHJ1Y3Qgdm1fbWVtbWFwIHsKKwl2 bV9wYWRkcl90CWdwYTsKKwlpbnQJCXNlZ2lkOwkJLyogbWVtb3J5IHNlZ21lbnQgKi8KKwl2bV9v b2Zmc2V0X3QJc2Vnb2ZmOwkJLyogb2Zmc2V0IGludG8gbWVtb3J5IHNlZ21lbnQgKi8KKwlzaXpl X3QJCWxlbjsJCS8qIG1tYXAgbGVuZ3RoICovCisJaW50CQlwcm90OwkJLyogUldYICovCisJaW50 CQlmbGFnczsKK307CisjZGVmaW5lCVZNX01FTU1BUF9GX1dJUkVECTB4MDEKKyNkZWZpbmUJVk1f TUVNTUFQX0ZfSU9NTVUJMHgwMgorCisjZGVmaW5lCVZNX01FTVNFR19OQU1FKG0pCSgobSktPm5h bWVbMF0gIT0gJ1wwJyA/IChtKS0+bmFtZSA6IE5VTEwpCitzdHJ1Y3Qgdm1fbWVtc2VnIHsKKwlp bnQJCXNlZ2lkOworCXNpemVfdAkJbGVuOworCWNoYXIJCW5hbWVbU1BFQ05BTUVMRU4gKyAxXTsK K307CisKK3N0cnVjdCB2bV9yZWdpc3RlciB7CisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJ CS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwl1aW50NjRfdAlyZWd2YWw7Cit9OworCitzdHJ1Y3Qg dm1fc2VnX2Rlc2MgewkJCS8qIGRhdGEgb3IgY29kZSBzZWdtZW50ICovCisJaW50CQljcHVpZDsK KwlpbnQJCXJlZ251bTsJCS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwlzdHJ1Y3Qgc2VnX2Rlc2Mg ZGVzYzsKK307CisKK3N0cnVjdCB2bV9ydW4geworCWludAkJY3B1aWQ7CisJc3RydWN0IHZtX2V4 aXQJdm1fZXhpdDsKK307CisKK3N0cnVjdCB2bV9leGNlcHRpb24geworCWludAkJY3B1aWQ7CisJ aW50CQl2ZWN0b3I7CisJdWludDMyX3QJZXJyb3JfY29kZTsKKwlpbnQJCWVycm9yX2NvZGVfdmFs aWQ7CisJaW50CQlyZXN0YXJ0X2luc3RydWN0aW9uOworfTsKKworc3RydWN0IHZtX2xhcGljX21z aSB7CisJdWludDY0X3QJbXNnOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbGFw aWNfaXJxIHsKKwlpbnQJCWNwdWlkOworCWludAkJdmVjdG9yOworfTsKKworc3RydWN0IHZtX2lv YXBpY19pcnEgeworCWludAkJaXJxOworfTsKKworc3RydWN0IHZtX2lzYV9pcnEgeworCWludAkJ YXRwaWNfaXJxOworCWludAkJaW9hcGljX2lycTsKK307CisKK3N0cnVjdCB2bV9pc2FfaXJxX3Ry aWdnZXIgeworCWludAkJYXRwaWNfaXJxOworCWVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXI7 Cit9OworCitzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSB7CisJaW50CQljcHVpZDsKKwllbnVtIHZtX2Nh cF90eXBlIGNhcHR5cGU7CisJaW50CQljYXB2YWw7CisJaW50CQlhbGxjcHVzOworfTsKKworc3Ry dWN0IHZtX3BwdGRldiB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKK307 CisKK3N0cnVjdCB2bV9wcHRkZXZfbW1pbyB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWlu dAkJZnVuYzsKKwl2bV9wYWRkcl90CWdwYTsKKwl2bV9wYWRkcl90CWhwYTsKKwlzaXplX3QJCWxl bjsKK307CisKK3N0cnVjdCB2bV9wcHRkZXZfbXNpIHsKKwlpbnQJCXZjcHU7CisJaW50CQlidXM7 CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwlpbnQJCW51bXZlYzsJCS8qIDAgbWVhbnMgZGlz YWJsZWQgKi8KKwl1aW50NjRfdAltc2c7CisJdWludDY0X3QJYWRkcjsKK307CisKK3N0cnVjdCB2 bV9wcHRkZXZfbXNpeCB7CisJaW50CQl2Y3B1OworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlp bnQJCWZ1bmM7CisJaW50CQlpZHg7CisJdWludDY0X3QJbXNnOworCXVpbnQzMl90CXZlY3Rvcl9j b250cm9sOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbm1pIHsKKwlpbnQJCWNw dWlkOworfTsKKworI2RlZmluZQlNQVhfVk1fU1RBVFMJNjQKK3N0cnVjdCB2bV9zdGF0cyB7CisJ aW50CQljcHVpZDsJCQkJLyogaW4gKi8KKwlpbnQJCW51bV9lbnRyaWVzOwkJCS8qIG91dCAqLwor CXN0cnVjdCB0aW1ldmFsCXR2OworCXVpbnQ2NF90CXN0YXRidWZbTUFYX1ZNX1NUQVRTXTsKK307 CisKK3N0cnVjdCB2bV9zdGF0X2Rlc2MgeworCWludAkJaW5kZXg7CQkJCS8qIGluICovCisJY2hh cgkJZGVzY1sxMjhdOwkJCS8qIG91dCAqLworfTsKKworc3RydWN0IHZtX3gyYXBpYyB7CisJaW50 CQkJY3B1aWQ7CisJZW51bSB4MmFwaWNfc3RhdGUJc3RhdGU7Cit9OworCitzdHJ1Y3Qgdm1fZ3Bh X3B0ZSB7CisJdWludDY0X3QJZ3BhOwkJCQkvKiBpbiAqLworCXVpbnQ2NF90CXB0ZVs0XTsJCQkJ Lyogb3V0ICovCisJaW50CQlwdGVudW07Cit9OworCitzdHJ1Y3Qgdm1faHBldF9jYXAgeworCXVp bnQzMl90CWNhcGFiaWxpdGllczsJLyogbG93ZXIgMzIgYml0cyBvZiBIUEVUIGNhcGFiaWxpdGll cyAqLworfTsKKworc3RydWN0IHZtX3N1c3BlbmQgeworCWVudW0gdm1fc3VzcGVuZF9ob3cgaG93 OworfTsKKworc3RydWN0IHZtX2dsYTJncGEgeworCWludAkJdmNwdWlkOwkJLyogaW5wdXRzICov CisJaW50IAkJcHJvdDsJCS8qIFBST1RfUkVBRCBvciBQUk9UX1dSSVRFICovCisJdWludDY0X3QJ Z2xhOworCXN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCWludAkJZmF1bHQ7CQkvKiBv dXRwdXRzICovCisJdWludDY0X3QJZ3BhOworfTsKKworc3RydWN0IHZtX2FjdGl2YXRlX2NwdSB7 CisJaW50CQl2Y3B1aWQ7Cit9OworCitzdHJ1Y3Qgdm1fY3B1c2V0IHsKKwlpbnQJCXdoaWNoOwor CWludAkJY3B1c2V0c2l6ZTsKKwljcHVzZXRfdAkqY3B1czsKK307CisjZGVmaW5lCVZNX0FDVElW RV9DUFVTCQkwCisjZGVmaW5lCVZNX1NVU1BFTkRFRF9DUFVTCTEKKworc3RydWN0IHZtX2ludGlu Zm8geworCWludAkJdmNwdWlkOworCXVpbnQ2NF90CWluZm8xOworCXVpbnQ2NF90CWluZm8yOwor fTsKKworc3RydWN0IHZtX3J0Y190aW1lIHsKKwl0aW1lX3QJCXNlY3M7Cit9OworCitzdHJ1Y3Qg dm1fcnRjX2RhdGEgeworCWludAkJb2Zmc2V0OworCXVpbnQ4X3QJCXZhbHVlOworfTsKKworZW51 bSB7CisJLyogZ2VuZXJhbCByb3V0aW5lcyAqLworCUlPQ05VTV9BQklWRVJTID0gMCwKKwlJT0NO VU1fUlVOID0gMSwKKwlJT0NOVU1fU0VUX0NBUEFCSUxJVFkgPSAyLAorCUlPQ05VTV9HRVRfQ0FQ QUJJTElUWSA9IDMsCisJSU9DTlVNX1NVU1BFTkQgPSA0LAorCUlPQ05VTV9SRUlOSVQgPSA1LAor CisJLyogbWVtb3J5IGFwaXMgKi8KKwlJT0NOVU1fTUFQX01FTU9SWSA9IDEwLAkJCS8qIGRlcHJl Y2F0ZWQgKi8KKwlJT0NOVU1fR0VUX01FTU9SWV9TRUcgPSAxMSwJCS8qIGRlcHJlY2F0ZWQgKi8K KwlJT0NOVU1fR0VUX0dQQV9QTUFQID0gMTIsCisJSU9DTlVNX0dMQTJHUEEgPSAxMywKKwlJT0NO VU1fQUxMT0NfTUVNU0VHID0gMTQsCisJSU9DTlVNX0dFVF9NRU1TRUcgPSAxNSwKKwlJT0NOVU1f TU1BUF9NRU1TRUcgPSAxNiwKKwlJT0NOVU1fTU1BUF9HRVRORVhUID0gMTcsCisKKwkvKiByZWdp c3Rlci9zdGF0ZSBhY2Nlc3NvcnMgKi8KKwlJT0NOVU1fU0VUX1JFR0lTVEVSID0gMjAsCisJSU9D TlVNX0dFVF9SRUdJU1RFUiA9IDIxLAorCUlPQ05VTV9TRVRfU0VHTUVOVF9ERVNDUklQVE9SID0g MjIsCisJSU9DTlVNX0dFVF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMywKKworCS8qIGludGVycnVw dCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fR0VUX0lOVElORk8gPSAyOCwKKwlJT0NOVU1fU0VUX0lO VElORk8gPSAyOSwKKwlJT0NOVU1fSU5KRUNUX0VYQ0VQVElPTiA9IDMwLAorCUlPQ05VTV9MQVBJ Q19JUlEgPSAzMSwKKwlJT0NOVU1fSU5KRUNUX05NSSA9IDMyLAorCUlPQ05VTV9JT0FQSUNfQVNT RVJUX0lSUSA9IDMzLAorCUlPQ05VTV9JT0FQSUNfREVBU1NFUlRfSVJRID0gMzQsCisJSU9DTlVN X0lPQVBJQ19QVUxTRV9JUlEgPSAzNSwKKwlJT0NOVU1fTEFQSUNfTVNJID0gMzYsCisJSU9DTlVN X0xBUElDX0xPQ0FMX0lSUSA9IDM3LAorCUlPQ05VTV9JT0FQSUNfUElOQ09VTlQgPSAzOCwKKwlJ T0NOVU1fUkVTVEFSVF9JTlNUUlVDVElPTiA9IDM5LAorCisJLyogUENJIHBhc3MtdGhydSAqLwor CUlPQ05VTV9CSU5EX1BQVERFViA9IDQwLAorCUlPQ05VTV9VTkJJTkRfUFBUREVWID0gNDEsCisJ SU9DTlVNX01BUF9QUFRERVZfTU1JTyA9IDQyLAorCUlPQ05VTV9QUFRERVZfTVNJID0gNDMsCisJ SU9DTlVNX1BQVERFVl9NU0lYID0gNDQsCisKKwkvKiBzdGF0aXN0aWNzICovCisJSU9DTlVNX1ZN X1NUQVRTID0gNTAsIAorCUlPQ05VTV9WTV9TVEFUX0RFU0MgPSA1MSwKKworCS8qIGtlcm5lbCBk ZXZpY2Ugc3RhdGUgKi8KKwlJT0NOVU1fU0VUX1gyQVBJQ19TVEFURSA9IDYwLAorCUlPQ05VTV9H RVRfWDJBUElDX1NUQVRFID0gNjEsCisJSU9DTlVNX0dFVF9IUEVUX0NBUEFCSUxJVElFUyA9IDYy LAorCisJLyogbGVnYWN5IGludGVycnVwdCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fSVNBX0FTU0VS VF9JUlEgPSA4MCwKKwlJT0NOVU1fSVNBX0RFQVNTRVJUX0lSUSA9IDgxLAorCUlPQ05VTV9JU0Ff UFVMU0VfSVJRID0gODIsCisJSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIgPSA4MywKKworCS8q IHZtX2NwdXNldCAqLworCUlPQ05VTV9BQ1RJVkFURV9DUFUgPSA5MCwKKwlJT0NOVU1fR0VUX0NQ VVNFVCA9IDkxLAorCisJLyogUlRDICovCisJSU9DTlVNX1JUQ19SRUFEID0gMTAwLAorCUlPQ05V TV9SVENfV1JJVEUgPSAxMDEsCisJSU9DTlVNX1JUQ19TRVRUSU1FID0gMTAyLAorCUlPQ05VTV9S VENfR0VUVElNRSA9IDEwMywKK307CisKKyNkZWZpbmUJVk1fUlVOCQlcCisJX0lPV1IoJ3YnLCBJ T0NOVU1fUlVOLCBzdHJ1Y3Qgdm1fcnVuKQorI2RlZmluZQlWTV9TVVNQRU5ECVwKKwlfSU9XKCd2 JywgSU9DTlVNX1NVU1BFTkQsIHN0cnVjdCB2bV9zdXNwZW5kKQorI2RlZmluZQlWTV9SRUlOSVQJ XAorCV9JTygndicsIElPQ05VTV9SRUlOSVQpCisjZGVmaW5lCVZNX0FMTE9DX01FTVNFRwlcCisJ X0lPVygndicsIElPQ05VTV9BTExPQ19NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVmaW5l CVZNX0dFVF9NRU1TRUcJXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9NRU1TRUcsIHN0cnVjdCB2 bV9tZW1zZWcpCisjZGVmaW5lCVZNX01NQVBfTUVNU0VHCVwKKwlfSU9XKCd2JywgSU9DTlVNX01N QVBfTUVNU0VHLCBzdHJ1Y3Qgdm1fbWVtbWFwKQorI2RlZmluZQlWTV9NTUFQX0dFVE5FWFQJXAor CV9JT1dSKCd2JywgSU9DTlVNX01NQVBfR0VUTkVYVCwgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZp bmUJVk1fU0VUX1JFR0lTVEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9SRUdJU1RFUiwgc3Ry dWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9HRVRfUkVHSVNURVIgXAorCV9JT1dSKCd2Jywg SU9DTlVNX0dFVF9SRUdJU1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9TRVRf U0VHTUVOVF9ERVNDUklQVE9SIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9TRUdNRU5UX0RFU0NS SVBUT1IsIHN0cnVjdCB2bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fR0VUX1NFR01FTlRfREVTQ1JJ UFRPUiBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiwgc3RydWN0 IHZtX3NlZ19kZXNjKQorI2RlZmluZQlWTV9JTkpFQ1RfRVhDRVBUSU9OCVwKKwlfSU9XKCd2Jywg SU9DTlVNX0lOSkVDVF9FWENFUFRJT04sIHN0cnVjdCB2bV9leGNlcHRpb24pCisjZGVmaW5lCVZN X0xBUElDX0lSUSAJCVwKKwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX0lSUSwgc3RydWN0IHZtX2xh cGljX2lycSkKKyNkZWZpbmUJVk1fTEFQSUNfTE9DQUxfSVJRIAlcCisJX0lPVygndicsIElPQ05V TV9MQVBJQ19MT0NBTF9JUlEsIHN0cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElD X01TSQkJXAorCV9JT1coJ3YnLCBJT0NOVU1fTEFQSUNfTVNJLCBzdHJ1Y3Qgdm1fbGFwaWNfbXNp KQorI2RlZmluZQlWTV9JT0FQSUNfQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JT0FQ SUNfQVNTRVJUX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19E RUFTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSU9BUElDX0RFQVNTRVJUX0lSUSwgc3Ry dWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19QVUxTRV9JUlEJXAorCV9JT1co J3YnLCBJT0NOVU1fSU9BUElDX1BVTFNFX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVm aW5lCVZNX0lPQVBJQ19QSU5DT1VOVAlcCisJX0lPUigndicsIElPQ05VTV9JT0FQSUNfUElOQ09V TlQsIGludCkKKyNkZWZpbmUJVk1fSVNBX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1f SVNBX0FTU0VSVF9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfREVBU1NF UlRfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9ERUFTU0VSVF9JUlEsIHN0cnVjdCB2bV9p c2FfaXJxKQorI2RlZmluZQlWTV9JU0FfUFVMU0VfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lT QV9QVUxTRV9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfU0VUX0lSUV9U UklHR0VSCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIsIHN0cnVjdCB2 bV9pc2FfaXJxX3RyaWdnZXIpCisjZGVmaW5lCVZNX1NFVF9DQVBBQklMSVRZIFwKKwlfSU9XKCd2 JywgSU9DTlVNX1NFVF9DQVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJ Vk1fR0VUX0NBUEFCSUxJVFkgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9DQVBBQklMSVRZLCBz dHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJVk1fQklORF9QUFRERVYgXAorCV9JT1coJ3Yn LCBJT0NOVU1fQklORF9QUFRERVYsIHN0cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX1VOQklO RF9QUFRERVYgXAorCV9JT1coJ3YnLCBJT0NOVU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3Bw dGRldikKKyNkZWZpbmUJVk1fTUFQX1BQVERFVl9NTUlPIFwKKwlfSU9XKCd2JywgSU9DTlVNX01B UF9QUFRERVZfTU1JTywgc3RydWN0IHZtX3BwdGRldl9tbWlvKQorI2RlZmluZQlWTV9QUFRERVZf TVNJIFwKKwlfSU9XKCd2JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9wcHRkZXZfbXNp KQorI2RlZmluZQlWTV9QUFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9QUFRERVZfTVNJ WCwgc3RydWN0IHZtX3BwdGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1JIFwKKwlfSU9X KCd2JywgSU9DTlVNX0lOSkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5lCVZNX1NUQVRT IFwKKwlfSU9XUigndicsIElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRzKQorI2RlZmlu ZQlWTV9TVEFUX0RFU0MgXAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVTQywgc3RydWN0 IHZtX3N0YXRfZGVzYykKKyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJX0lPVygndics IElPQ05VTV9TRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9H RVRfWDJBUElDX1NUQVRFIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElDX1NUQVRFLCBz dHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMgXAorCV9J T1IoJ3YnLCBJT0NOVU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1faHBldF9jYXAp CisjZGVmaW5lCVZNX0dFVF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX0dQQV9Q TUFQLCBzdHJ1Y3Qgdm1fZ3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJX0lPV1IoJ3Yn LCBJT0NOVU1fR0xBMkdQQSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZNX0FDVElWQVRF X0NQVQlcCisJX0lPVygndicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2bV9hY3RpdmF0 ZV9jcHUpCisjZGVmaW5lCVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVNX0dFVF9DUFVT RVQsIHN0cnVjdCB2bV9jcHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwKKwlfSU9XKCd2 JywgSU9DTlVNX1NFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUJVk1fR0VU X0lOVElORk8JXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50 aW5mbykKKyNkZWZpbmUgVk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVNX1JUQ19XUklU RSwgc3RydWN0IHZtX3J0Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJX0lPV1IoJ3Yn LCBJT0NOVU1fUlRDX1JFQUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUgVk1fUlRDX1NF VFRJTUUJXAorCV9JT1coJ3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGlt ZSkKKyNkZWZpbmUgVk1fUlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1fUlRDX0dFVFRJ TUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNUUlVDVElPTiBc CisJX0lPVygndicsIElPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisjZW5kaWYKZGlm ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tLmMgL3Vzci9zcmMvc3lzL2FtZDY0 L3ZtbS92bW0uYwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jCTIwMTYtMDktMjkgMDA6 MjQ6NTQuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jCTIw MTYtMTEtMzAgMTA6NTY6MDUuNzkwMzczMDAwICswMDAwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5j bHVkZSAidm1tX2t0ci5oIgogI2luY2x1ZGUgInZtbV9ob3N0LmgiCiAjaW5jbHVkZSAidm1tX21l bS5oIgorI2luY2x1ZGUgInZtbV91c2VybWVtLmgiCiAjaW5jbHVkZSAidm1tX3V0aWwuaCIKICNp bmNsdWRlICJ2YXRwaWMuaCIKICNpbmNsdWRlICJ2YXRwaXQuaCIKQEAgLTE0OCw2ICsxNDksNyBA QAogCXN0cnVjdCB2YXRwaXQJKnZhdHBpdDsJCS8qIChpKSB2aXJ0dWFsIGF0cGl0ICovCiAJc3Ry dWN0IHZwbXRtcgkqdnBtdG1yOwkJLyogKGkpIHZpcnR1YWwgQUNQSSBQTSB0aW1lciAqLwogCXN0 cnVjdCB2cnRjCSp2cnRjOwkJCS8qIChvKSB2aXJ0dWFsIFJUQyAqLworCXN0cnVjdCBpb3JlZ2gJ KmlvcmVnaDsJCS8qICgpIEkvTyByZWcgaGFuZGxlciAqLwogCXZvbGF0aWxlIGNwdXNldF90IGFj dGl2ZV9jcHVzOwkJLyogKGkpIGFjdGl2ZSB2Y3B1cyAqLwogCWludAkJc3VzcGVuZDsJCS8qIChp KSBzdG9wIFZNIGV4ZWN1dGlvbiAqLwogCXZvbGF0aWxlIGNwdXNldF90IHN1c3BlbmRlZF9jcHVz OyAJLyogKGkpIHN1c3BlbmRlZCB2Y3B1cyAqLwpAQCAtNDE5LDYgKzQyMSw3IEBACiAJdm0tPnZw bXRtciA9IHZwbXRtcl9pbml0KHZtKTsKIAlpZiAoY3JlYXRlKQogCQl2bS0+dnJ0YyA9IHZydGNf aW5pdCh2bSk7CisJdm0tPmlvcmVnaCA9IGlvcmVnaF9pbml0KHZtKTsKIAogCUNQVV9aRVJPKCZ2 bS0+YWN0aXZlX2NwdXMpOwogCkBAIC00NzUsMTEgKzQ3OCwxMyBAQAogCQl2cnRjX2NsZWFudXAo dm0tPnZydGMpOwogCWVsc2UKIAkJdnJ0Y19yZXNldCh2bS0+dnJ0Yyk7CisJaW9yZWdoX2NsZWFu dXAodm0tPmlvcmVnaCk7CiAJdnBtdG1yX2NsZWFudXAodm0tPnZwbXRtcik7CiAJdmF0cGl0X2Ns ZWFudXAodm0tPnZhdHBpdCk7CiAJdmhwZXRfY2xlYW51cCh2bS0+dmhwZXQpOwogCXZhdHBpY19j bGVhbnVwKHZtLT52YXRwaWMpOwogCXZpb2FwaWNfY2xlYW51cCh2bS0+dmlvYXBpYyk7CisJdm1t X3VzZXJtZW1fY2xlYW51cCh2bS0+dm1zcGFjZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVk1fTUFY Q1BVOyBpKyspCiAJCXZjcHVfY2xlYW51cCh2bSwgaSwgZGVzdHJveSk7CkBAIC01NTIsNiArNTU3 LDE4IEBACiAJCXJldHVybiAoMCk7CiB9CiAKKy8qIEhhbmRsZXIgZnVuY3Rpb24gZm9yIFZNX01B UF9VU0VSX0JVRiBpb2N0bC4gKi8KK2ludAordm1fbWFwX3VzZXJtZW0oc3RydWN0IHZtICp2bSwg dm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAqdGQp Cit7CisJdm1fb2JqZWN0X3Qgb2JqOworCisJaWYgKChvYmogPSB2bW1fdXNlcm1lbV9hbGxvYyh2 bS0+dm1zcGFjZSwgZ3BhLCBsZW4sIGJ1ZiwgdGQpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01F TSk7CisKKwlyZXR1cm4gKDApOworfQorCiBpbnQKIHZtX3VubWFwX21taW8oc3RydWN0IHZtICp2 bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCiB7CkBAIC01ODgsNiArNjA1LDkgQEAKIAlp ZiAocHB0X2lzX21taW8odm0sIGdwYSkpCiAJCXJldHVybiAodHJ1ZSk7CQkJLyogJ2dwYScgaXMg cGNpIHBhc3N0aHJ1IG1taW8gKi8KIAorCWlmICh1c2VybWVtX21hcHBlZCh2bS0+dm1zcGFjZSwg Z3BhKSkKKwkJcmV0dXJuICh0cnVlKTsJCQkvKiAnZ3BhJyBpcyB1c2VyLXNwYWNlIGJ1ZmZlciBt YXBwZWQgKi8KKwogCXJldHVybiAoZmFsc2UpOwogfQogCkBAIC0yNDU3LDYgKzI0NzcsMTIgQEAK IAlyZXR1cm4gKHZtLT52cnRjKTsKIH0KIAorc3RydWN0IGlvcmVnaCAqCit2bV9pb3JlZ2goc3Ry dWN0IHZtICp2bSkKK3sKKwlyZXR1cm4gKHZtLT5pb3JlZ2gpOworfQorCiBlbnVtIHZtX3JlZ19u YW1lCiB2bV9zZWdtZW50X25hbWUoaW50IHNlZykKIHsKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5 cy9hbWQ2NC92bW0vdm1tLmMub3JpZyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jLm9yaWcK LS0tIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW0uYy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAu MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbS5jLm9yaWcJMjAx Ni0xMS0zMCAxMDo1Mjo1Ny4xODA1MjgwMDAgKzAwMDAKQEAgLTAsMCArMSwyNTk4IEBACisvKi0K KyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAs IElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC92bW0vdm1tLmMgMjk2MTAzIDIwMTYtMDItMjYgMTY6 MTg6NDdaIG1hcmNlbCAkCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQo IiRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbS5jIDI5NjEwMyAyMDE2LTAy LTI2IDE2OjE4OjQ3WiBtYXJjZWwgJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5j bHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5 cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxv Yy5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNs dWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9y d2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvc2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvc21wLmg+Cisj aW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZt L3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS9wbWFw Lmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+Cisj aW5jbHVkZSA8dm0vdm1fcGFyYW0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CisjaW5j bHVkZSA8bWFjaGluZS9wY2IuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NtcC5oPgorI2luY2x1ZGUg PHg4Ni9wc2wuaD4KKyNpbmNsdWRlIDx4ODYvYXBpY3JlZy5oPgorCisjaW5jbHVkZSA8bWFjaGlu ZS92bW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3ZtbV9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoaW5l L3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmg+CisKKyNpbmNsdWRlICJ2bW1faW9wb3J0LmgiCisjaW5j bHVkZSAidm1tX2t0ci5oIgorI2luY2x1ZGUgInZtbV9ob3N0LmgiCisjaW5jbHVkZSAidm1tX21l bS5oIgorI2luY2x1ZGUgInZtbV91dGlsLmgiCisjaW5jbHVkZSAidmF0cGljLmgiCisjaW5jbHVk ZSAidmF0cGl0LmgiCisjaW5jbHVkZSAidmhwZXQuaCIKKyNpbmNsdWRlICJ2aW9hcGljLmgiCisj aW5jbHVkZSAidmxhcGljLmgiCisjaW5jbHVkZSAidnBtdG1yLmgiCisjaW5jbHVkZSAidnJ0Yy5o IgorI2luY2x1ZGUgInZtbV9zdGF0LmgiCisjaW5jbHVkZSAidm1tX2xhcGljLmgiCisKKyNpbmNs dWRlICJpby9wcHQuaCIKKyNpbmNsdWRlICJpby9pb21tdS5oIgorCitzdHJ1Y3QgdmxhcGljOwor CisvKgorICogSW5pdGlhbGl6YXRpb246CisgKiAoYSkgYWxsb2NhdGVkIHdoZW4gdmNwdSBpcyBj cmVhdGVkCisgKiAoaSkgaW5pdGlhbGl6ZWQgd2hlbiB2Y3B1IGlzIGNyZWF0ZWQgYW5kIHdoZW4g aXQgaXMgcmVpbml0aWFsaXplZAorICogKG8pIGluaXRpYWxpemVkIHRoZSBmaXJzdCB0aW1lIHRo ZSB2Y3B1IGlzIGNyZWF0ZWQKKyAqICh4KSBpbml0aWFsaXplZCBiZWZvcmUgdXNlCisgKi8KK3N0 cnVjdCB2Y3B1IHsKKwlzdHJ1Y3QgbXR4IAltdHg7CQkvKiAobykgcHJvdGVjdHMgJ3N0YXRlJyBh bmQgJ2hvc3RjcHUnICovCisJZW51bSB2Y3B1X3N0YXRlCXN0YXRlOwkJLyogKG8pIHZjcHUgc3Rh dGUgKi8KKwlpbnQJCWhvc3RjcHU7CS8qIChvKSB2Y3B1J3MgaG9zdCBjcHUgKi8KKwlpbnQJCXJl cWlkbGU7CS8qIChpKSByZXF1ZXN0IHZjcHUgdG8gaWRsZSAqLworCXN0cnVjdCB2bGFwaWMJKnZs YXBpYzsJLyogKGkpIEFQSUMgZGV2aWNlIG1vZGVsICovCisJZW51bSB4MmFwaWNfc3RhdGUgeDJh cGljX3N0YXRlOwkvKiAoaSkgQVBJQyBtb2RlICovCisJdWludDY0X3QJZXhpdGludGluZm87CS8q IChpKSBldmVudHMgcGVuZGluZyBhdCBWTSBleGl0ICovCisJaW50CQlubWlfcGVuZGluZzsJLyog KGkpIE5NSSBwZW5kaW5nICovCisJaW50CQlleHRpbnRfcGVuZGluZzsJLyogKGkpIElOVFIgcGVu ZGluZyAqLworCWludAlleGNlcHRpb25fcGVuZGluZzsJLyogKGkpIGV4Y2VwdGlvbiBwZW5kaW5n ICovCisJaW50CWV4Y192ZWN0b3I7CQkvKiAoeCkgZXhjZXB0aW9uIGNvbGxhdGVyYWwgKi8KKwlp bnQJZXhjX2VycmNvZGVfdmFsaWQ7CisJdWludDMyX3QgZXhjX2VycmNvZGU7CisJc3RydWN0IHNh dmVmcHUJKmd1ZXN0ZnB1OwkvKiAoYSxpKSBndWVzdCBmcHUgc3RhdGUgKi8KKwl1aW50NjRfdAln dWVzdF94Y3IwOwkvKiAoaSkgZ3Vlc3QgJXhjcjAgcmVnaXN0ZXIgKi8KKwl2b2lkCQkqc3RhdHM7 CQkvKiAoYSxpKSBzdGF0aXN0aWNzICovCisJc3RydWN0IHZtX2V4aXQJZXhpdGluZm87CS8qICh4 KSBleGl0IHJlYXNvbiBhbmQgY29sbGF0ZXJhbCAqLworCXVpbnQ2NF90CW5leHRyaXA7CS8qICh4 KSBuZXh0IGluc3RydWN0aW9uIHRvIGV4ZWN1dGUgKi8KK307CisKKyNkZWZpbmUJdmNwdV9sb2Nr X2luaXRpYWxpemVkKHYpIG10eF9pbml0aWFsaXplZCgmKCh2KS0+bXR4KSkKKyNkZWZpbmUJdmNw dV9sb2NrX2luaXQodikJbXR4X2luaXQoJigodiktPm10eCksICJ2Y3B1IGxvY2siLCAwLCBNVFhf U1BJTikKKyNkZWZpbmUJdmNwdV9sb2NrKHYpCQltdHhfbG9ja19zcGluKCYoKHYpLT5tdHgpKQor I2RlZmluZQl2Y3B1X3VubG9jayh2KQkJbXR4X3VubG9ja19zcGluKCYoKHYpLT5tdHgpKQorI2Rl ZmluZQl2Y3B1X2Fzc2VydF9sb2NrZWQodikJbXR4X2Fzc2VydCgmKCh2KS0+bXR4KSwgTUFfT1dO RUQpCisKK3N0cnVjdCBtZW1fc2VnIHsKKwlzaXplX3QJbGVuOworCWJvb2wJc3lzbWVtOworCXN0 cnVjdCB2bV9vYmplY3QgKm9iamVjdDsKK307CisjZGVmaW5lCVZNX01BWF9NRU1TRUdTCTMKKwor c3RydWN0IG1lbV9tYXAgeworCXZtX3BhZGRyX3QJZ3BhOworCXNpemVfdAkJbGVuOworCXZtX29v ZmZzZXRfdAlzZWdvZmY7CisJaW50CQlzZWdpZDsKKwlpbnQJCXByb3Q7CisJaW50CQlmbGFnczsK K307CisjZGVmaW5lCVZNX01BWF9NRU1NQVBTCTQKKworLyoKKyAqIEluaXRpYWxpemF0aW9uOgor ICogKG8pIGluaXRpYWxpemVkIHRoZSBmaXJzdCB0aW1lIHRoZSBWTSBpcyBjcmVhdGVkCisgKiAo aSkgaW5pdGlhbGl6ZWQgd2hlbiBWTSBpcyBjcmVhdGVkIGFuZCB3aGVuIGl0IGlzIHJlaW5pdGlh bGl6ZWQKKyAqICh4KSBpbml0aWFsaXplZCBiZWZvcmUgdXNlCisgKi8KK3N0cnVjdCB2bSB7CisJ dm9pZAkJKmNvb2tpZTsJCS8qIChpKSBjcHUtc3BlY2lmaWMgZGF0YSAqLworCXZvaWQJCSppb21t dTsJCQkvKiAoeCkgaW9tbXUtc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCB2aHBldAkqdmhwZXQ7 CQkJLyogKGkpIHZpcnR1YWwgSFBFVCAqLworCXN0cnVjdCB2aW9hcGljCSp2aW9hcGljOwkJLyog KGkpIHZpcnR1YWwgaW9hcGljICovCisJc3RydWN0IHZhdHBpYwkqdmF0cGljOwkJLyogKGkpIHZp cnR1YWwgYXRwaWMgKi8KKwlzdHJ1Y3QgdmF0cGl0CSp2YXRwaXQ7CQkvKiAoaSkgdmlydHVhbCBh dHBpdCAqLworCXN0cnVjdCB2cG10bXIJKnZwbXRtcjsJCS8qIChpKSB2aXJ0dWFsIEFDUEkgUE0g dGltZXIgKi8KKwlzdHJ1Y3QgdnJ0YwkqdnJ0YzsJCQkvKiAobykgdmlydHVhbCBSVEMgKi8KKwl2 b2xhdGlsZSBjcHVzZXRfdCBhY3RpdmVfY3B1czsJCS8qIChpKSBhY3RpdmUgdmNwdXMgKi8KKwlp bnQJCXN1c3BlbmQ7CQkvKiAoaSkgc3RvcCBWTSBleGVjdXRpb24gKi8KKwl2b2xhdGlsZSBjcHVz ZXRfdCBzdXNwZW5kZWRfY3B1czsgCS8qIChpKSBzdXNwZW5kZWQgdmNwdXMgKi8KKwl2b2xhdGls ZSBjcHVzZXRfdCBoYWx0ZWRfY3B1czsJCS8qICh4KSBjcHVzIGluIGEgaGFyZCBoYWx0ICovCisJ Y3B1c2V0X3QJcmVuZGV6dm91c19yZXFfY3B1czsJLyogKHgpIHJlbmRlenZvdXMgcmVxdWVzdGVk ICovCisJY3B1c2V0X3QJcmVuZGV6dm91c19kb25lX2NwdXM7CS8qICh4KSByZW5kZXp2b3VzIGZp bmlzaGVkICovCisJdm9pZAkJKnJlbmRlenZvdXNfYXJnOwkvKiAoeCkgcmVuZGV6dm91cyBmdW5j L2FyZyAqLworCXZtX3JlbmRlenZvdXNfZnVuY190IHJlbmRlenZvdXNfZnVuYzsKKwlzdHJ1Y3Qg bXR4CXJlbmRlenZvdXNfbXR4OwkJLyogKG8pIHJlbmRlenZvdXMgbG9jayAqLworCXN0cnVjdCBt ZW1fbWFwCW1lbV9tYXBzW1ZNX01BWF9NRU1NQVBTXTsgLyogKGkpIGd1ZXN0IGFkZHJlc3Mgc3Bh Y2UgKi8KKwlzdHJ1Y3QgbWVtX3NlZwltZW1fc2Vnc1tWTV9NQVhfTUVNU0VHU107IC8qIChvKSBn dWVzdCBtZW1vcnkgcmVnaW9ucyAqLworCXN0cnVjdCB2bXNwYWNlCSp2bXNwYWNlOwkJLyogKG8p IGd1ZXN0J3MgYWRkcmVzcyBzcGFjZSAqLworCWNoYXIJCW5hbWVbVk1fTUFYX05BTUVMRU5dOwkv KiAobykgdmlydHVhbCBtYWNoaW5lIG5hbWUgKi8KKwlzdHJ1Y3QgdmNwdQl2Y3B1W1ZNX01BWENQ VV07CS8qIChpKSBndWVzdCB2Y3B1cyAqLworfTsKKworc3RhdGljIGludCB2bW1faW5pdGlhbGl6 ZWQ7CisKK3N0YXRpYyBzdHJ1Y3Qgdm1tX29wcyAqb3BzOworI2RlZmluZQlWTU1fSU5JVChudW0p CShvcHMgIT0gTlVMTCA/ICgqb3BzLT5pbml0KShudW0pIDogMCkKKyNkZWZpbmUJVk1NX0NMRUFO VVAoKQkob3BzICE9IE5VTEwgPyAoKm9wcy0+Y2xlYW51cCkoKSA6IDApCisjZGVmaW5lCVZNTV9S RVNVTUUoKQkob3BzICE9IE5VTEwgPyAoKm9wcy0+cmVzdW1lKSgpIDogMCkKKworI2RlZmluZQlW TUlOSVQodm0sIHBtYXApIChvcHMgIT0gTlVMTCA/ICgqb3BzLT52bWluaXQpKHZtLCBwbWFwKTog TlVMTCkKKyNkZWZpbmUJVk1SVU4odm1pLCB2Y3B1LCByaXAsIHBtYXAsIGV2aW5mbykgXAorCShv cHMgIT0gTlVMTCA/ICgqb3BzLT52bXJ1bikodm1pLCB2Y3B1LCByaXAsIHBtYXAsIGV2aW5mbykg OiBFTlhJTykKKyNkZWZpbmUJVk1DTEVBTlVQKHZtaSkJKG9wcyAhPSBOVUxMID8gKCpvcHMtPnZt Y2xlYW51cCkodm1pKSA6IE5VTEwpCisjZGVmaW5lCVZNU1BBQ0VfQUxMT0MobWluLCBtYXgpIFwK Kwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1zcGFjZV9hbGxvYykobWluLCBtYXgpIDogTlVMTCkK KyNkZWZpbmUJVk1TUEFDRV9GUkVFKHZtc3BhY2UpIFwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+ dm1zcGFjZV9mcmVlKSh2bXNwYWNlKSA6IEVOWElPKQorI2RlZmluZQlWTUdFVFJFRyh2bWksIHZj cHUsIG51bSwgcmV0dmFsKQkJXAorCShvcHMgIT0gTlVMTCA/ICgqb3BzLT52bWdldHJlZykodm1p LCB2Y3B1LCBudW0sIHJldHZhbCkgOiBFTlhJTykKKyNkZWZpbmUJVk1TRVRSRUcodm1pLCB2Y3B1 LCBudW0sIHZhbCkJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1zZXRyZWcpKHZtaSwgdmNw dSwgbnVtLCB2YWwpIDogRU5YSU8pCisjZGVmaW5lCVZNR0VUREVTQyh2bWksIHZjcHUsIG51bSwg ZGVzYykJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dm1nZXRkZXNjKSh2bWksIHZjcHUsIG51 bSwgZGVzYykgOiBFTlhJTykKKyNkZWZpbmUJVk1TRVRERVNDKHZtaSwgdmNwdSwgbnVtLCBkZXNj KQkJXAorCShvcHMgIT0gTlVMTCA/ICgqb3BzLT52bXNldGRlc2MpKHZtaSwgdmNwdSwgbnVtLCBk ZXNjKSA6IEVOWElPKQorI2RlZmluZQlWTUdFVENBUCh2bWksIHZjcHUsIG51bSwgcmV0dmFsKQlc CisJKG9wcyAhPSBOVUxMID8gKCpvcHMtPnZtZ2V0Y2FwKSh2bWksIHZjcHUsIG51bSwgcmV0dmFs KSA6IEVOWElPKQorI2RlZmluZQlWTVNFVENBUCh2bWksIHZjcHUsIG51bSwgdmFsKQkJXAorCShv cHMgIT0gTlVMTCA/ICgqb3BzLT52bXNldGNhcCkodm1pLCB2Y3B1LCBudW0sIHZhbCkgOiBFTlhJ TykKKyNkZWZpbmUJVkxBUElDX0lOSVQodm1pLCB2Y3B1KQkJCVwKKwkob3BzICE9IE5VTEwgPyAo Km9wcy0+dmxhcGljX2luaXQpKHZtaSwgdmNwdSkgOiBOVUxMKQorI2RlZmluZQlWTEFQSUNfQ0xF QU5VUCh2bWksIHZsYXBpYykJCVwKKwkob3BzICE9IE5VTEwgPyAoKm9wcy0+dmxhcGljX2NsZWFu dXApKHZtaSwgdmxhcGljKSA6IE5VTEwpCisKKyNkZWZpbmUJZnB1X3N0YXJ0X2VtdWxhdGluZygp CWxvYWRfY3IwKHJjcjAoKSB8IENSMF9UUykKKyNkZWZpbmUJZnB1X3N0b3BfZW11bGF0aW5nKCkJ Y2x0cygpCisKK3N0YXRpYyBNQUxMT0NfREVGSU5FKE1fVk0sICJ2bSIsICJ2bSIpOworCisvKiBz dGF0aXN0aWNzICovCitzdGF0aWMgVk1NX1NUQVQoVkNQVV9UT1RBTF9SVU5USU1FLCAidmNwdSB0 b3RhbCBydW50aW1lIik7CisKK1NZU0NUTF9OT0RFKF9odywgT0lEX0FVVE8sIHZtbSwgQ1RMRkxB R19SVywgTlVMTCwgTlVMTCk7CisKKy8qCisgKiBIYWx0IHRoZSBndWVzdCBpZiBhbGwgdmNwdXMg YXJlIGV4ZWN1dGluZyBhIEhMVCBpbnN0cnVjdGlvbiB3aXRoCisgKiBpbnRlcnJ1cHRzIGRpc2Fi bGVkLgorICovCitzdGF0aWMgaW50IGhhbHRfZGV0ZWN0aW9uX2VuYWJsZWQgPSAxOworU1lTQ1RM X0lOVChfaHdfdm1tLCBPSURfQVVUTywgaGFsdF9kZXRlY3Rpb24sIENUTEZMQUdfUkRUVU4sCisg ICAgJmhhbHRfZGV0ZWN0aW9uX2VuYWJsZWQsIDAsCisgICAgIkhhbHQgVk0gaWYgYWxsIHZjcHVz IGV4ZWN1dGUgSExUIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCIpOworCitzdGF0aWMgaW50IHZt bV9pcGludW07CitTWVNDVExfSU5UKF9od192bW0sIE9JRF9BVVRPLCBpcGludW0sIENUTEZMQUdf UkQsICZ2bW1faXBpbnVtLCAwLAorICAgICJJUEkgdmVjdG9yIHVzZWQgZm9yIHZjcHUgbm90aWZp Y2F0aW9ucyIpOworCitzdGF0aWMgaW50IHRyYWNlX2d1ZXN0X2V4Y2VwdGlvbnM7CitTWVNDVExf SU5UKF9od192bW0sIE9JRF9BVVRPLCB0cmFjZV9ndWVzdF9leGNlcHRpb25zLCBDVExGTEFHX1JE VFVOLAorICAgICZ0cmFjZV9ndWVzdF9leGNlcHRpb25zLCAwLAorICAgICJUcmFwIGludG8gaHlw ZXJ2aXNvciBvbiBhbGwgZ3Vlc3QgZXhjZXB0aW9ucyBhbmQgcmVmbGVjdCB0aGVtIGJhY2siKTsK Kworc3RhdGljIGludCB2bW1fZm9yY2VfaW9tbXUgPSAwOworVFVOQUJMRV9JTlQoImh3LnZtbS5m b3JjZV9pb21tdSIsICZ2bW1fZm9yY2VfaW9tbXUpOworU1lTQ1RMX0lOVChfaHdfdm1tLCBPSURf QVVUTywgZm9yY2VfaW9tbXUsIENUTEZMQUdfUkRUVU4sICZ2bW1fZm9yY2VfaW9tbXUsIDAsCisg ICAgIkZvcmNlIHVzZSBvZiBJL08gTU1VIGV2ZW4gaWYgbm8gcGFzc3Rocm91Z2ggZGV2aWNlcyB3 ZXJlIGZvdW5kLiIpOworCitzdGF0aWMgdm9pZCB2bV9mcmVlX21lbW1hcChzdHJ1Y3Qgdm0gKnZt LCBpbnQgaWRlbnQpOworc3RhdGljIGJvb2wgc3lzbWVtX21hcHBpbmcoc3RydWN0IHZtICp2bSwg c3RydWN0IG1lbV9tYXAgKm1tKTsKK3N0YXRpYyB2b2lkIHZjcHVfbm90aWZ5X2V2ZW50X2xvY2tl ZChzdHJ1Y3QgdmNwdSAqdmNwdSwgYm9vbCBsYXBpY19pbnRyKTsKKworI2lmZGVmIEtUUgorc3Rh dGljIGNvbnN0IGNoYXIgKgordmNwdV9zdGF0ZTJzdHIoZW51bSB2Y3B1X3N0YXRlIHN0YXRlKQor eworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVkNQVV9JRExFOgorCQlyZXR1cm4gKCJpZGxl Iik7CisJY2FzZSBWQ1BVX0ZST1pFTjoKKwkJcmV0dXJuICgiZnJvemVuIik7CisJY2FzZSBWQ1BV X1JVTk5JTkc6CisJCXJldHVybiAoInJ1bm5pbmciKTsKKwljYXNlIFZDUFVfU0xFRVBJTkc6CisJ CXJldHVybiAoInNsZWVwaW5nIik7CisJZGVmYXVsdDoKKwkJcmV0dXJuICgidW5rbm93biIpOwor CX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAordmNwdV9jbGVhbnVwKHN0cnVjdCB2bSAqdm0s IGludCBpLCBib29sIGRlc3Ryb3kpCit7CisJc3RydWN0IHZjcHUgKnZjcHUgPSAmdm0tPnZjcHVb aV07CisKKwlWTEFQSUNfQ0xFQU5VUCh2bS0+Y29va2llLCB2Y3B1LT52bGFwaWMpOworCWlmIChk ZXN0cm95KSB7CisJCXZtbV9zdGF0X2ZyZWUodmNwdS0+c3RhdHMpOwkKKwkJZnB1X3NhdmVfYXJl YV9mcmVlKHZjcHUtPmd1ZXN0ZnB1KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2Y3B1X2luaXQo c3RydWN0IHZtICp2bSwgaW50IHZjcHVfaWQsIGJvb2wgY3JlYXRlKQoreworCXN0cnVjdCB2Y3B1 ICp2Y3B1OworCisJS0FTU0VSVCh2Y3B1X2lkID49IDAgJiYgdmNwdV9pZCA8IFZNX01BWENQVSwK KwkgICAgKCJ2Y3B1X2luaXQ6IGludmFsaWQgdmNwdSAlZCIsIHZjcHVfaWQpKTsKKwkgIAorCXZj cHUgPSAmdm0tPnZjcHVbdmNwdV9pZF07CisKKwlpZiAoY3JlYXRlKSB7CisJCUtBU1NFUlQoIXZj cHVfbG9ja19pbml0aWFsaXplZCh2Y3B1KSwgKCJ2Y3B1ICVkIGFscmVhZHkgIgorCQkgICAgImlu aXRpYWxpemVkIiwgdmNwdV9pZCkpOworCQl2Y3B1X2xvY2tfaW5pdCh2Y3B1KTsKKwkJdmNwdS0+ c3RhdGUgPSBWQ1BVX0lETEU7CisJCXZjcHUtPmhvc3RjcHUgPSBOT0NQVTsKKwkJdmNwdS0+Z3Vl c3RmcHUgPSBmcHVfc2F2ZV9hcmVhX2FsbG9jKCk7CisJCXZjcHUtPnN0YXRzID0gdm1tX3N0YXRf YWxsb2MoKTsKKwl9CisKKwl2Y3B1LT52bGFwaWMgPSBWTEFQSUNfSU5JVCh2bS0+Y29va2llLCB2 Y3B1X2lkKTsKKwl2bV9zZXRfeDJhcGljX3N0YXRlKHZtLCB2Y3B1X2lkLCBYMkFQSUNfRElTQUJM RUQpOworCXZjcHUtPnJlcWlkbGUgPSAwOworCXZjcHUtPmV4aXRpbnRpbmZvID0gMDsKKwl2Y3B1 LT5ubWlfcGVuZGluZyA9IDA7CisJdmNwdS0+ZXh0aW50X3BlbmRpbmcgPSAwOworCXZjcHUtPmV4 Y2VwdGlvbl9wZW5kaW5nID0gMDsKKwl2Y3B1LT5ndWVzdF94Y3IwID0gWEZFQVRVUkVfRU5BQkxF RF9YODc7CisJZnB1X3NhdmVfYXJlYV9yZXNldCh2Y3B1LT5ndWVzdGZwdSk7CisJdm1tX3N0YXRf aW5pdCh2Y3B1LT5zdGF0cyk7Cit9CisKK2ludAordmNwdV90cmFjZV9leGNlcHRpb25zKHN0cnVj dCB2bSAqdm0sIGludCB2Y3B1aWQpCit7CisKKwlyZXR1cm4gKHRyYWNlX2d1ZXN0X2V4Y2VwdGlv bnMpOworfQorCitzdHJ1Y3Qgdm1fZXhpdCAqCit2bV9leGl0aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBp bnQgY3B1aWQpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAoY3B1aWQgPCAwIHx8IGNw dWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZtX2V4aXRpbmZvOiBpbnZhbGlkIGNwdWlkICVk IiwgY3B1aWQpOworCisJdmNwdSA9ICZ2bS0+dmNwdVtjcHVpZF07CisKKwlyZXR1cm4gKCZ2Y3B1 LT5leGl0aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCit2bW1fcmVzdW1lKHZvaWQpCit7CisJVk1N X1JFU1VNRSgpOworfQorCitzdGF0aWMgaW50Cit2bW1faW5pdCh2b2lkKQoreworCWludCBlcnJv cjsKKworCXZtbV9ob3N0X3N0YXRlX2luaXQoKTsKKworCXZtbV9pcGludW0gPSBsYXBpY19pcGlf YWxsb2MoJklEVFZFQyhqdXN0cmV0dXJuKSk7CisJaWYgKHZtbV9pcGludW0gPCAwKQorCQl2bW1f aXBpbnVtID0gSVBJX0FTVDsKKworCWVycm9yID0gdm1tX21lbV9pbml0KCk7CisJaWYgKGVycm9y KQorCQlyZXR1cm4gKGVycm9yKTsKKwkKKwlpZiAodm1tX2lzX2ludGVsKCkpCisJCW9wcyA9ICZ2 bW1fb3BzX2ludGVsOworCWVsc2UgaWYgKHZtbV9pc19hbWQoKSkKKwkJb3BzID0gJnZtbV9vcHNf YW1kOworCWVsc2UKKwkJcmV0dXJuIChFTlhJTyk7CisKKwl2bW1fcmVzdW1lX3AgPSB2bW1fcmVz dW1lOworCisJcmV0dXJuIChWTU1fSU5JVCh2bW1faXBpbnVtKSk7Cit9CisKK3N0YXRpYyBpbnQK K3ZtbV9oYW5kbGVyKG1vZHVsZV90IG1vZCwgaW50IHdoYXQsIHZvaWQgKmFyZykKK3sKKwlpbnQg ZXJyb3I7CisKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIE1PRF9MT0FEOgorCQl2bW1kZXZfaW5p dCgpOworCQlpZiAodm1tX2ZvcmNlX2lvbW11IHx8IHBwdF9hdmFpbF9kZXZpY2VzKCkgPiAwKQor CQkJaW9tbXVfaW5pdCgpOworCQllcnJvciA9IHZtbV9pbml0KCk7CisJCWlmIChlcnJvciA9PSAw KQorCQkJdm1tX2luaXRpYWxpemVkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNT0RfVU5MT0FEOgor CQllcnJvciA9IHZtbWRldl9jbGVhbnVwKCk7CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQl2bW1f cmVzdW1lX3AgPSBOVUxMOworCQkJaW9tbXVfY2xlYW51cCgpOworCQkJaWYgKHZtbV9pcGludW0g IT0gSVBJX0FTVCkKKwkJCQlsYXBpY19pcGlfZnJlZSh2bW1faXBpbnVtKTsKKwkJCWVycm9yID0g Vk1NX0NMRUFOVVAoKTsKKwkJCS8qCisJCQkgKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkIC0gcHJl dmVudCBuZXcKKwkJCSAqIFZNcyBmcm9tIGJlaW5nIGNyZWF0ZWQKKwkJCSAqLworCQkJaWYgKGVy cm9yKQorCQkJCXZtbV9pbml0aWFsaXplZCA9IDA7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRp YyBtb2R1bGVkYXRhX3Qgdm1tX2ttb2QgPSB7CisJInZtbSIsCisJdm1tX2hhbmRsZXIsCisJTlVM TAorfTsKKworLyoKKyAqIHZtbSBpbml0aWFsaXphdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBkZXBl bmRlbmNpZXM6CisgKgorICogLSBpb21tdSBpbml0aWFsaXphdGlvbiBtdXN0IGhhcHBlbiBhZnRl ciB0aGUgcGNpIHBhc3N0aHJ1IGRyaXZlciBoYXMgaGFkCisgKiAgIGEgY2hhbmNlIHRvIGF0dGFj aCB0byBhbnkgcGFzc3RocnUgZGV2aWNlcyAoYWZ0ZXIgU0lfU1VCX0NPTkZJR1VSRSkuCisgKgor ICogLSBWVC14IGluaXRpYWxpemF0aW9uIHJlcXVpcmVzIHNtcF9yZW5kZXp2b3VzKCkgYW5kIHRo ZXJlZm9yZSBtdXN0IGhhcHBlbgorICogICBhZnRlciBTTVAgaXMgZnVsbHkgZnVuY3Rpb25hbCAo YWZ0ZXIgU0lfU1VCX1NNUCkuCisgKi8KK0RFQ0xBUkVfTU9EVUxFKHZtbSwgdm1tX2ttb2QsIFNJ X1NVQl9TTVAgKyAxLCBTSV9PUkRFUl9BTlkpOworTU9EVUxFX1ZFUlNJT04odm1tLCAxKTsKKwor c3RhdGljIHZvaWQKK3ZtX2luaXQoc3RydWN0IHZtICp2bSwgYm9vbCBjcmVhdGUpCit7CisJaW50 IGk7CisKKwl2bS0+Y29va2llID0gVk1JTklUKHZtLCB2bXNwYWNlX3BtYXAodm0tPnZtc3BhY2Up KTsKKwl2bS0+aW9tbXUgPSBOVUxMOworCXZtLT52aW9hcGljID0gdmlvYXBpY19pbml0KHZtKTsK Kwl2bS0+dmhwZXQgPSB2aHBldF9pbml0KHZtKTsKKwl2bS0+dmF0cGljID0gdmF0cGljX2luaXQo dm0pOworCXZtLT52YXRwaXQgPSB2YXRwaXRfaW5pdCh2bSk7CisJdm0tPnZwbXRtciA9IHZwbXRt cl9pbml0KHZtKTsKKwlpZiAoY3JlYXRlKQorCQl2bS0+dnJ0YyA9IHZydGNfaW5pdCh2bSk7CisK KwlDUFVfWkVSTygmdm0tPmFjdGl2ZV9jcHVzKTsKKworCXZtLT5zdXNwZW5kID0gMDsKKwlDUFVf WkVSTygmdm0tPnN1c3BlbmRlZF9jcHVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBWTV9NQVhDUFU7 IGkrKykKKwkJdmNwdV9pbml0KHZtLCBpLCBjcmVhdGUpOworfQorCitpbnQKK3ZtX2NyZWF0ZShj b25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgdm0gKipyZXR2bSkKK3sKKwlzdHJ1Y3Qgdm0gKnZtOwor CXN0cnVjdCB2bXNwYWNlICp2bXNwYWNlOworCisJLyoKKwkgKiBJZiB2bW0ua28gY291bGQgbm90 IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCB0aGVuIGRvbid0IGF0dGVtcHQKKwkgKiB0byBj cmVhdGUgdGhlIHZpcnR1YWwgbWFjaGluZS4KKwkgKi8KKwlpZiAoIXZtbV9pbml0aWFsaXplZCkK KwkJcmV0dXJuIChFTlhJTyk7CisKKwlpZiAobmFtZSA9PSBOVUxMIHx8IHN0cmxlbihuYW1lKSA+ PSBWTV9NQVhfTkFNRUxFTikKKwkJcmV0dXJuIChFSU5WQUwpOworCisJdm1zcGFjZSA9IFZNU1BB Q0VfQUxMT0MoMCwgVk1fTUFYVVNFUl9BRERSRVNTKTsKKwlpZiAodm1zcGFjZSA9PSBOVUxMKQor CQlyZXR1cm4gKEVOT01FTSk7CisKKwl2bSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHZtKSwgTV9W TSwgTV9XQUlUT0sgfCBNX1pFUk8pOworCXN0cmNweSh2bS0+bmFtZSwgbmFtZSk7CisJdm0tPnZt c3BhY2UgPSB2bXNwYWNlOworCW10eF9pbml0KCZ2bS0+cmVuZGV6dm91c19tdHgsICJ2bSByZW5k ZXp2b3VzIGxvY2siLCAwLCBNVFhfREVGKTsKKworCXZtX2luaXQodm0sIHRydWUpOworCisJKnJl dHZtID0gdm07CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3ZtX2NsZWFudXAoc3Ry dWN0IHZtICp2bSwgYm9vbCBkZXN0cm95KQoreworCXN0cnVjdCBtZW1fbWFwICptbTsKKwlpbnQg aTsKKworCXBwdF91bmFzc2lnbl9hbGwodm0pOworCisJaWYgKHZtLT5pb21tdSAhPSBOVUxMKQor CQlpb21tdV9kZXN0cm95X2RvbWFpbih2bS0+aW9tbXUpOworCisJaWYgKGRlc3Ryb3kpCisJCXZy dGNfY2xlYW51cCh2bS0+dnJ0Yyk7CisJZWxzZQorCQl2cnRjX3Jlc2V0KHZtLT52cnRjKTsKKwl2 cG10bXJfY2xlYW51cCh2bS0+dnBtdG1yKTsKKwl2YXRwaXRfY2xlYW51cCh2bS0+dmF0cGl0KTsK Kwl2aHBldF9jbGVhbnVwKHZtLT52aHBldCk7CisJdmF0cGljX2NsZWFudXAodm0tPnZhdHBpYyk7 CisJdmlvYXBpY19jbGVhbnVwKHZtLT52aW9hcGljKTsKKworCWZvciAoaSA9IDA7IGkgPCBWTV9N QVhDUFU7IGkrKykKKwkJdmNwdV9jbGVhbnVwKHZtLCBpLCBkZXN0cm95KTsKKworCVZNQ0xFQU5V UCh2bS0+Y29va2llKTsKKworCS8qCisJICogU3lzdGVtIG1lbW9yeSBpcyByZW1vdmVkIGZyb20g dGhlIGd1ZXN0IGFkZHJlc3Mgc3BhY2Ugb25seSB3aGVuCisJICogdGhlIFZNIGlzIGRlc3Ryb3ll ZC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBtYXBwaW5nIHJlbWFpbnMgdGhlIHNhbWUKKwkgKiBhY3Jv c3MgVk0gcmVzZXQuCisJICoKKwkgKiBEZXZpY2UgbWVtb3J5IGNhbiBiZSByZWxvY2F0ZWQgYnkg dGhlIGd1ZXN0IChlLmcuIHVzaW5nIFBDSSBCQVJzKQorCSAqIHNvIHRob3NlIG1hcHBpbmdzIGFy ZSByZW1vdmVkIG9uIGEgVk0gcmVzZXQuCisJICovCisJZm9yIChpID0gMDsgaSA8IFZNX01BWF9N RU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBzW2ldOworCQlpZiAoZGVzdHJveSB8 fCAhc3lzbWVtX21hcHBpbmcodm0sIG1tKSkKKwkJCXZtX2ZyZWVfbWVtbWFwKHZtLCBpKTsKKwl9 CisKKwlpZiAoZGVzdHJveSkgeworCQlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYX01FTVNFR1M7IGkr KykKKwkJCXZtX2ZyZWVfbWVtc2VnKHZtLCBpKTsKKworCQlWTVNQQUNFX0ZSRUUodm0tPnZtc3Bh Y2UpOworCQl2bS0+dm1zcGFjZSA9IE5VTEw7CisJfQorfQorCit2b2lkCit2bV9kZXN0cm95KHN0 cnVjdCB2bSAqdm0pCit7CisJdm1fY2xlYW51cCh2bSwgdHJ1ZSk7CisJZnJlZSh2bSwgTV9WTSk7 Cit9CisKK2ludAordm1fcmVpbml0KHN0cnVjdCB2bSAqdm0pCit7CisJaW50IGVycm9yOworCisJ LyoKKwkgKiBBIHZpcnR1YWwgbWFjaGluZSBjYW4gYmUgcmVzZXQgb25seSBpZiBhbGwgdmNwdXMg YXJlIHN1c3BlbmRlZC4KKwkgKi8KKwlpZiAoQ1BVX0NNUCgmdm0tPnN1c3BlbmRlZF9jcHVzLCAm dm0tPmFjdGl2ZV9jcHVzKSA9PSAwKSB7CisJCXZtX2NsZWFudXAodm0sIGZhbHNlKTsKKwkJdm1f aW5pdCh2bSwgZmFsc2UpOworCQllcnJvciA9IDA7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBFQlVT WTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworY29uc3QgY2hhciAqCit2bV9uYW1lKHN0 cnVjdCB2bSAqdm0pCit7CisJcmV0dXJuICh2bS0+bmFtZSk7Cit9CisKK2ludAordm1fbWFwX21t aW8oc3RydWN0IHZtICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4sIHZtX3BhZGRyX3Qg aHBhKQoreworCXZtX29iamVjdF90IG9iajsKKworCWlmICgob2JqID0gdm1tX21taW9fYWxsb2Mo dm0tPnZtc3BhY2UsIGdwYSwgbGVuLCBocGEpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7 CisJZWxzZQorCQlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX3VubWFwX21taW8oc3RydWN0IHZt ICp2bSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisKKwl2bW1fbW1pb19mcmVlKHZt LT52bXNwYWNlLCBncGEsIGxlbik7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJldHVybiAn dHJ1ZScgaWYgJ2dwYScgaXMgYWxsb2NhdGVkIGluIHRoZSBndWVzdCBhZGRyZXNzIHNwYWNlLgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgcnVubmlu ZyB2Y3B1IHdoaWNoIGFjdHMgYXMKKyAqIGFuIGltcGxpY2l0IGxvY2sgb24gJ3ZtLT5tZW1fbWFw c1tdJy4KKyAqLworYm9vbAordm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw dWlkLCB2bV9wYWRkcl90IGdwYSkKK3sKKwlzdHJ1Y3QgbWVtX21hcCAqbW07CisJaW50IGk7CisK KyNpZmRlZiBJTlZBUklBTlRTCisJaW50IGhvc3RjcHUsIHN0YXRlOworCXN0YXRlID0gdmNwdV9n ZXRfc3RhdGUodm0sIHZjcHVpZCwgJmhvc3RjcHUpOworCUtBU1NFUlQoc3RhdGUgPT0gVkNQVV9S VU5OSU5HICYmIGhvc3RjcHUgPT0gY3VyY3B1LAorCSAgICAoIiVzOiBpbnZhbGlkIHZjcHUgc3Rh dGUgJWQvJWQiLCBfX2Z1bmNfXywgc3RhdGUsIGhvc3RjcHUpKTsKKyNlbmRpZgorCisJZm9yIChp ID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBzW2ld OworCQlpZiAobW0tPmxlbiAhPSAwICYmIGdwYSA+PSBtbS0+Z3BhICYmIGdwYSA8IG1tLT5ncGEg KyBtbS0+bGVuKQorCQkJcmV0dXJuICh0cnVlKTsJCS8qICdncGEnIGlzIHN5c21lbSBvciBkZXZt ZW0gKi8KKwl9CisKKwlpZiAocHB0X2lzX21taW8odm0sIGdwYSkpCisJCXJldHVybiAodHJ1ZSk7 CQkJLyogJ2dwYScgaXMgcGNpIHBhc3N0aHJ1IG1taW8gKi8KKworCXJldHVybiAoZmFsc2UpOwor fQorCitpbnQKK3ZtX2FsbG9jX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQsIHNpemVf dCBsZW4sIGJvb2wgc3lzbWVtKQoreworCXN0cnVjdCBtZW1fc2VnICpzZWc7CisJdm1fb2JqZWN0 X3Qgb2JqOworCisJaWYgKGlkZW50IDwgMCB8fCBpZGVudCA+PSBWTV9NQVhfTUVNU0VHUykKKwkJ cmV0dXJuIChFSU5WQUwpOworCisJaWYgKGxlbiA9PSAwIHx8IChsZW4gJiBQQUdFX01BU0spKQor CQlyZXR1cm4gKEVJTlZBTCk7CisKKwlzZWcgPSAmdm0tPm1lbV9zZWdzW2lkZW50XTsKKwlpZiAo c2VnLT5vYmplY3QgIT0gTlVMTCkgeworCQlpZiAoc2VnLT5sZW4gPT0gbGVuICYmIHNlZy0+c3lz bWVtID09IHN5c21lbSkKKwkJCXJldHVybiAoRUVYSVNUKTsKKwkJZWxzZQorCQkJcmV0dXJuIChF SU5WQUwpOworCX0KKworCW9iaiA9IHZtX29iamVjdF9hbGxvY2F0ZShPQkpUX0RFRkFVTFQsIGxl biA+PiBQQUdFX1NISUZUKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsK KworCXNlZy0+bGVuID0gbGVuOworCXNlZy0+b2JqZWN0ID0gb2JqOworCXNlZy0+c3lzbWVtID0g c3lzbWVtOworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1fZ2V0X21lbXNlZyhzdHJ1Y3Qgdm0g KnZtLCBpbnQgaWRlbnQsIHNpemVfdCAqbGVuLCBib29sICpzeXNtZW0sCisgICAgdm1fb2JqZWN0 X3QgKm9ianB0cikKK3sKKwlzdHJ1Y3QgbWVtX3NlZyAqc2VnOworCisJaWYgKGlkZW50IDwgMCB8 fCBpZGVudCA+PSBWTV9NQVhfTUVNU0VHUykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJc2VnID0g JnZtLT5tZW1fc2Vnc1tpZGVudF07CisJaWYgKGxlbikKKwkJKmxlbiA9IHNlZy0+bGVuOworCWlm IChzeXNtZW0pCisJCSpzeXNtZW0gPSBzZWctPnN5c21lbTsKKwlpZiAob2JqcHRyKQorCQkqb2Jq cHRyID0gc2VnLT5vYmplY3Q7CisJcmV0dXJuICgwKTsKK30KKwordm9pZAordm1fZnJlZV9tZW1z ZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50KQoreworCXN0cnVjdCBtZW1fc2VnICpzZWc7CisK KwlLQVNTRVJUKGlkZW50ID49IDAgJiYgaWRlbnQgPCBWTV9NQVhfTUVNU0VHUywKKwkgICAgKCIl czogaW52YWxpZCBtZW1zZWcgaWRlbnQgJWQiLCBfX2Z1bmNfXywgaWRlbnQpKTsKKworCXNlZyA9 ICZ2bS0+bWVtX3NlZ3NbaWRlbnRdOworCWlmIChzZWctPm9iamVjdCAhPSBOVUxMKSB7CisJCXZt X29iamVjdF9kZWFsbG9jYXRlKHNlZy0+b2JqZWN0KTsKKwkJYnplcm8oc2VnLCBzaXplb2Yoc3Ry dWN0IG1lbV9zZWcpKTsKKwl9Cit9CisKK2ludAordm1fbW1hcF9tZW1zZWcoc3RydWN0IHZtICp2 bSwgdm1fcGFkZHJfdCBncGEsIGludCBzZWdpZCwgdm1fb29mZnNldF90IGZpcnN0LAorICAgIHNp emVfdCBsZW4sIGludCBwcm90LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG1lbV9zZWcgKnNlZzsK KwlzdHJ1Y3QgbWVtX21hcCAqbSwgKm1hcDsKKwl2bV9vb2Zmc2V0X3QgbGFzdDsKKwlpbnQgaSwg ZXJyb3I7CisKKwlpZiAocHJvdCA9PSAwIHx8IChwcm90ICYgfihWTV9QUk9UX0FMTCkpICE9IDAp CisJCXJldHVybiAoRUlOVkFMKTsKKworCWlmIChmbGFncyAmIH5WTV9NRU1NQVBfRl9XSVJFRCkK KwkJcmV0dXJuIChFSU5WQUwpOworCisJaWYgKHNlZ2lkIDwgMCB8fCBzZWdpZCA+PSBWTV9NQVhf TUVNU0VHUykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJc2VnID0gJnZtLT5tZW1fc2Vnc1tzZWdp ZF07CisJaWYgKHNlZy0+b2JqZWN0ID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWxh c3QgPSBmaXJzdCArIGxlbjsKKwlpZiAoZmlyc3QgPCAwIHx8IGZpcnN0ID49IGxhc3QgfHwgbGFz dCA+IHNlZy0+bGVuKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoKGdwYSB8IGZpcnN0IHwg bGFzdCkgJiBQQUdFX01BU0spCisJCXJldHVybiAoRUlOVkFMKTsKKworCW1hcCA9IE5VTEw7CisJ Zm9yIChpID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbSA9ICZ2bS0+bWVtX21h cHNbaV07CisJCWlmIChtLT5sZW4gPT0gMCkgeworCQkJbWFwID0gbTsKKwkJCWJyZWFrOworCQl9 CisJfQorCisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT1NQQyk7CisKKwllcnJvciA9 IHZtX21hcF9maW5kKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBzZWctPm9iamVjdCwgZmlyc3QsICZn cGEsCisJICAgIGxlbiwgMCwgVk1GU19OT19TUEFDRSwgcHJvdCwgcHJvdCwgMCk7CisJaWYgKGVy cm9yICE9IEtFUk5fU1VDQ0VTUykKKwkJcmV0dXJuIChFRkFVTFQpOworCisJdm1fb2JqZWN0X3Jl ZmVyZW5jZShzZWctPm9iamVjdCk7CisKKwlpZiAoZmxhZ3MgJiBWTV9NRU1NQVBfRl9XSVJFRCkg eworCQllcnJvciA9IHZtX21hcF93aXJlKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBncGEsIGdwYSAr IGxlbiwKKwkJICAgIFZNX01BUF9XSVJFX1VTRVIgfCBWTV9NQVBfV0lSRV9OT0hPTEVTKTsKKwkJ aWYgKGVycm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fbWFwX3JlbW92ZSgmdm0tPnZtc3Bh Y2UtPnZtX21hcCwgZ3BhLCBncGEgKyBsZW4pOworCQkJcmV0dXJuIChFRkFVTFQpOworCQl9CisJ fQorCisJbWFwLT5ncGEgPSBncGE7CisJbWFwLT5sZW4gPSBsZW47CisJbWFwLT5zZWdvZmYgPSBm aXJzdDsKKwltYXAtPnNlZ2lkID0gc2VnaWQ7CisJbWFwLT5wcm90ID0gcHJvdDsKKwltYXAtPmZs YWdzID0gZmxhZ3M7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9tbWFwX2dldG5leHQoc3Ry dWN0IHZtICp2bSwgdm1fcGFkZHJfdCAqZ3BhLCBpbnQgKnNlZ2lkLAorICAgIHZtX29vZmZzZXRf dCAqc2Vnb2ZmLCBzaXplX3QgKmxlbiwgaW50ICpwcm90LCBpbnQgKmZsYWdzKQoreworCXN0cnVj dCBtZW1fbWFwICptbSwgKm1tbmV4dDsKKwlpbnQgaTsKKworCW1tbmV4dCA9IE5VTEw7CisJZm9y IChpID0gMDsgaSA8IFZNX01BWF9NRU1NQVBTOyBpKyspIHsKKwkJbW0gPSAmdm0tPm1lbV9tYXBz W2ldOworCQlpZiAobW0tPmxlbiA9PSAwIHx8IG1tLT5ncGEgPCAqZ3BhKQorCQkJY29udGludWU7 CisJCWlmIChtbW5leHQgPT0gTlVMTCB8fCBtbS0+Z3BhIDwgbW1uZXh0LT5ncGEpCisJCQltbW5l eHQgPSBtbTsKKwl9CisKKwlpZiAobW1uZXh0ICE9IE5VTEwpIHsKKwkJKmdwYSA9IG1tbmV4dC0+ Z3BhOworCQlpZiAoc2VnaWQpCisJCQkqc2VnaWQgPSBtbW5leHQtPnNlZ2lkOworCQlpZiAoc2Vn b2ZmKQorCQkJKnNlZ29mZiA9IG1tbmV4dC0+c2Vnb2ZmOworCQlpZiAobGVuKQorCQkJKmxlbiA9 IG1tbmV4dC0+bGVuOworCQlpZiAocHJvdCkKKwkJCSpwcm90ID0gbW1uZXh0LT5wcm90OworCQlp ZiAoZmxhZ3MpCisJCQkqZmxhZ3MgPSBtbW5leHQtPmZsYWdzOworCQlyZXR1cm4gKDApOworCX0g ZWxzZSB7CisJCXJldHVybiAoRU5PRU5UKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2bV9mcmVl X21lbW1hcChzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpCit7CisJc3RydWN0IG1lbV9tYXAgKm1t OworCWludCBlcnJvcjsKKworCW1tID0gJnZtLT5tZW1fbWFwc1tpZGVudF07CisJaWYgKG1tLT5s ZW4pIHsKKwkJZXJyb3IgPSB2bV9tYXBfcmVtb3ZlKCZ2bS0+dm1zcGFjZS0+dm1fbWFwLCBtbS0+ Z3BhLAorCQkgICAgbW0tPmdwYSArIG1tLT5sZW4pOworCQlLQVNTRVJUKGVycm9yID09IEtFUk5f U1VDQ0VTUywgKCIlczogdm1fbWFwX3JlbW92ZSBlcnJvciAlZCIsCisJCSAgICBfX2Z1bmNfXywg ZXJyb3IpKTsKKwkJYnplcm8obW0sIHNpemVvZihzdHJ1Y3QgbWVtX21hcCkpOworCX0KK30KKwor c3RhdGljIF9faW5saW5lIGJvb2wKK3N5c21lbV9tYXBwaW5nKHN0cnVjdCB2bSAqdm0sIHN0cnVj dCBtZW1fbWFwICptbSkKK3sKKworCWlmIChtbS0+bGVuICE9IDAgJiYgdm0tPm1lbV9zZWdzW21t LT5zZWdpZF0uc3lzbWVtKQorCQlyZXR1cm4gKHRydWUpOworCWVsc2UKKwkJcmV0dXJuIChmYWxz ZSk7Cit9CisKK3N0YXRpYyB2bV9wYWRkcl90CitzeXNtZW1fbWF4YWRkcihzdHJ1Y3Qgdm0gKnZt KQoreworCXN0cnVjdCBtZW1fbWFwICptbTsKKwl2bV9wYWRkcl90IG1heGFkZHI7CisJaW50IGk7 CisKKwltYXhhZGRyID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYX01FTU1BUFM7IGkrKykg eworCQltbSA9ICZ2bS0+bWVtX21hcHNbaV07CisJCWlmIChzeXNtZW1fbWFwcGluZyh2bSwgbW0p KSB7CisJCQlpZiAobWF4YWRkciA8IG1tLT5ncGEgKyBtbS0+bGVuKQorCQkJCW1heGFkZHIgPSBt bS0+Z3BhICsgbW0tPmxlbjsKKwkJfQorCX0KKwlyZXR1cm4gKG1heGFkZHIpOworfQorCitzdGF0 aWMgdm9pZAordm1faW9tbXVfbW9kaWZ5KHN0cnVjdCB2bSAqdm0sIGJvb2xlYW5fdCBtYXApCit7 CisJaW50IGksIHN6OworCXZtX3BhZGRyX3QgZ3BhLCBocGE7CisJc3RydWN0IG1lbV9tYXAgKm1t OworCXZvaWQgKnZwLCAqY29va2llLCAqaG9zdF9kb21haW47CisKKwlzeiA9IFBBR0VfU0laRTsK Kwlob3N0X2RvbWFpbiA9IGlvbW11X2hvc3RfZG9tYWluKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwg Vk1fTUFYX01FTU1BUFM7IGkrKykgeworCQltbSA9ICZ2bS0+bWVtX21hcHNbaV07CisJCWlmICgh c3lzbWVtX21hcHBpbmcodm0sIG1tKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtYXApIHsKKwkJ CUtBU1NFUlQoKG1tLT5mbGFncyAmIFZNX01FTU1BUF9GX0lPTU1VKSA9PSAwLAorCQkJICAgICgi aW9tbXUgbWFwIGZvdW5kIGludmFsaWQgbWVtbWFwICUjbHgvJSNseC8lI3giLAorCQkJICAgIG1t LT5ncGEsIG1tLT5sZW4sIG1tLT5mbGFncykpOworCQkJaWYgKChtbS0+ZmxhZ3MgJiBWTV9NRU1N QVBfRl9XSVJFRCkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCW1tLT5mbGFncyB8PSBWTV9NRU1N QVBfRl9JT01NVTsKKwkJfSBlbHNlIHsKKwkJCWlmICgobW0tPmZsYWdzICYgVk1fTUVNTUFQX0Zf SU9NTVUpID09IDApCisJCQkJY29udGludWU7CisJCQltbS0+ZmxhZ3MgJj0gflZNX01FTU1BUF9G X0lPTU1VOworCQkJS0FTU0VSVCgobW0tPmZsYWdzICYgVk1fTUVNTUFQX0ZfV0lSRUQpICE9IDAs CisJCQkgICAgKCJpb21tdSB1bm1hcCBmb3VuZCBpbnZhbGlkIG1lbW1hcCAlI2x4LyUjbHgvJSN4 IiwKKwkJCSAgICBtbS0+Z3BhLCBtbS0+bGVuLCBtbS0+ZmxhZ3MpKTsKKwkJfQorCisJCWdwYSA9 IG1tLT5ncGE7CisJCXdoaWxlIChncGEgPCBtbS0+Z3BhICsgbW0tPmxlbikgeworCQkJdnAgPSB2 bV9ncGFfaG9sZCh2bSwgLTEsIGdwYSwgUEFHRV9TSVpFLCBWTV9QUk9UX1dSSVRFLAorCQkJCQkg JmNvb2tpZSk7CisJCQlLQVNTRVJUKHZwICE9IE5VTEwsICgidm0oJXMpIGNvdWxkIG5vdCBtYXAg Z3BhICUjbHgiLAorCQkJICAgIHZtX25hbWUodm0pLCBncGEpKTsKKworCQkJdm1fZ3BhX3JlbGVh c2UoY29va2llKTsKKworCQkJaHBhID0gRE1BUF9UT19QSFlTKCh1aW50cHRyX3QpdnApOworCQkJ aWYgKG1hcCkgeworCQkJCWlvbW11X2NyZWF0ZV9tYXBwaW5nKHZtLT5pb21tdSwgZ3BhLCBocGEs IHN6KTsKKwkJCQlpb21tdV9yZW1vdmVfbWFwcGluZyhob3N0X2RvbWFpbiwgaHBhLCBzeik7CisJ CQl9IGVsc2UgeworCQkJCWlvbW11X3JlbW92ZV9tYXBwaW5nKHZtLT5pb21tdSwgZ3BhLCBzeik7 CisJCQkJaW9tbXVfY3JlYXRlX21hcHBpbmcoaG9zdF9kb21haW4sIGhwYSwgaHBhLCBzeik7CisJ CQl9CisKKwkJCWdwYSArPSBQQUdFX1NJWkU7CisJCX0KKwl9CisKKwkvKgorCSAqIEludmFsaWRh dGUgdGhlIGNhY2hlZCB0cmFuc2xhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb21haW4KKwkg KiBmcm9tIHdoaWNoIHBhZ2VzIHdlcmUgcmVtb3ZlZC4KKwkgKi8KKwlpZiAobWFwKQorCQlpb21t dV9pbnZhbGlkYXRlX3RsYihob3N0X2RvbWFpbik7CisJZWxzZQorCQlpb21tdV9pbnZhbGlkYXRl X3RsYih2bS0+aW9tbXUpOworfQorCisjZGVmaW5lCXZtX2lvbW11X3VubWFwKHZtKQl2bV9pb21t dV9tb2RpZnkoKHZtKSwgRkFMU0UpCisjZGVmaW5lCXZtX2lvbW11X21hcCh2bSkJdm1faW9tbXVf bW9kaWZ5KCh2bSksIFRSVUUpCisKK2ludAordm1fdW5hc3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAq dm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYykKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJv ciA9IHBwdF91bmFzc2lnbl9kZXZpY2Uodm0sIGJ1cywgc2xvdCwgZnVuYyk7CisJaWYgKGVycm9y KQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChwcHRfYXNzaWduZWRfZGV2aWNlcyh2bSkgPT0g MCkKKwkJdm1faW9tbXVfdW5tYXAodm0pOworCisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9h c3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYykK K3sKKwlpbnQgZXJyb3I7CisJdm1fcGFkZHJfdCBtYXhhZGRyOworCisJLyogU2V0IHVwIHRoZSBJ T01NVSB0byBkbyB0aGUgJ2dwYScgdG8gJ2hwYScgdHJhbnNsYXRpb24gKi8KKwlpZiAocHB0X2Fz c2lnbmVkX2RldmljZXModm0pID09IDApIHsKKwkJS0FTU0VSVCh2bS0+aW9tbXUgPT0gTlVMTCwK KwkJICAgICgidm1fYXNzaWduX3BwdGRldjogaW9tbXUgbXVzdCBiZSBOVUxMIikpOworCQltYXhh ZGRyID0gc3lzbWVtX21heGFkZHIodm0pOworCQl2bS0+aW9tbXUgPSBpb21tdV9jcmVhdGVfZG9t YWluKG1heGFkZHIpOworCQl2bV9pb21tdV9tYXAodm0pOworCX0KKworCWVycm9yID0gcHB0X2Fz c2lnbl9kZXZpY2Uodm0sIGJ1cywgc2xvdCwgZnVuYyk7CisJcmV0dXJuIChlcnJvcik7Cit9CisK K3ZvaWQgKgordm1fZ3BhX2hvbGQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdm1fcGFkZHJf dCBncGEsIHNpemVfdCBsZW4sIGludCByZXFwcm90LAorCSAgICB2b2lkICoqY29va2llKQorewor CWludCBpLCBjb3VudCwgcGFnZW9mZjsKKwlzdHJ1Y3QgbWVtX21hcCAqbW07CisJdm1fcGFnZV90 IG07CisjaWZkZWYgSU5WQVJJQU5UUworCS8qCisJICogQWxsIHZjcHVzIGFyZSBmcm96ZW4gYnkg aW9jdGxzIHRoYXQgbW9kaWZ5IHRoZSBtZW1vcnkgbWFwCisJICogKGUuZy4gVk1fTU1BUF9NRU1T RUcpLiBUaGVyZWZvcmUgJ3ZtLT5tZW1tYXBbXScgc3RhYmlsaXR5IGlzCisJICogZ3VhcmFudGVl ZCBpZiBhdCBsZWFzdCBvbmUgdmNwdSBpcyBpbiB0aGUgVkNQVV9GUk9aRU4gc3RhdGUuCisJICov CisJaW50IHN0YXRlOworCUtBU1NFUlQodmNwdWlkID49IC0xIHx8IHZjcHVpZCA8IFZNX01BWENQ VSwgKCIlczogaW52YWxpZCB2Y3B1aWQgJWQiLAorCSAgICBfX2Z1bmNfXywgdmNwdWlkKSk7CisJ Zm9yIChpID0gMDsgaSA8IFZNX01BWENQVTsgaSsrKSB7CisJCWlmICh2Y3B1aWQgIT0gLTEgJiYg dmNwdWlkICE9IGkpCisJCQljb250aW51ZTsKKwkJc3RhdGUgPSB2Y3B1X2dldF9zdGF0ZSh2bSwg aSwgTlVMTCk7CisJCUtBU1NFUlQoc3RhdGUgPT0gVkNQVV9GUk9aRU4sICgiJXM6IGludmFsaWQg dmNwdSBzdGF0ZSAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdGUpKTsKKwl9CisjZW5kaWYKKwlw YWdlb2ZmID0gZ3BhICYgUEFHRV9NQVNLOworCWlmIChsZW4gPiBQQUdFX1NJWkUgLSBwYWdlb2Zm KQorCQlwYW5pYygidm1fZ3BhX2hvbGQ6IGludmFsaWQgZ3BhL2xlbjogMHglMDE2bHgvJWx1Iiwg Z3BhLCBsZW4pOworCisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBWTV9NQVhfTUVNTUFQ UzsgaSsrKSB7CisJCW1tID0gJnZtLT5tZW1fbWFwc1tpXTsKKwkJaWYgKHN5c21lbV9tYXBwaW5n KHZtLCBtbSkgJiYgZ3BhID49IG1tLT5ncGEgJiYKKwkJICAgIGdwYSA8IG1tLT5ncGEgKyBtbS0+ bGVuKSB7CisJCQljb3VudCA9IHZtX2ZhdWx0X3F1aWNrX2hvbGRfcGFnZXMoJnZtLT52bXNwYWNl LT52bV9tYXAsCisJCQkgICAgdHJ1bmNfcGFnZShncGEpLCBQQUdFX1NJWkUsIHJlcXByb3QsICZt LCAxKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGNvdW50ID09IDEpIHsKKwkJKmNvb2tp ZSA9IG07CisJCXJldHVybiAoKHZvaWQgKikoUEhZU19UT19ETUFQKFZNX1BBR0VfVE9fUEhZUyht KSkgKyBwYWdlb2ZmKSk7CisJfSBlbHNlIHsKKwkJKmNvb2tpZSA9IE5VTEw7CisJCXJldHVybiAo TlVMTCk7CisJfQorfQorCit2b2lkCit2bV9ncGFfcmVsZWFzZSh2b2lkICpjb29raWUpCit7CisJ dm1fcGFnZV90IG0gPSBjb29raWU7CisKKwl2bV9wYWdlX2xvY2sobSk7CisJdm1fcGFnZV91bmhv bGQobSk7CisJdm1fcGFnZV91bmxvY2sobSk7Cit9CisKK2ludAordm1fZ2V0X3JlZ2lzdGVyKHN0 cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLCB1aW50NjRfdCAqcmV0dmFsKQoreworCisJ aWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK KwlpZiAocmVnID49IFZNX1JFR19MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4g KFZNR0VUUkVHKHZtLT5jb29raWUsIHZjcHUsIHJlZywgcmV0dmFsKSk7Cit9CisKK2ludAordm1f c2V0X3JlZ2lzdGVyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGludCByZWcsIHVpbnQ2NF90 IHZhbCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKwlpbnQgZXJyb3I7CisKKwlpZiAodmNwdWlk IDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAo cmVnID49IFZNX1JFR19MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IFZNU0VU UkVHKHZtLT5jb29raWUsIHZjcHVpZCwgcmVnLCB2YWwpOworCWlmIChlcnJvciB8fCByZWcgIT0g Vk1fUkVHX0dVRVNUX1JJUCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwkvKiBTZXQgJ25leHRyaXAn IHRvIG1hdGNoIHRoZSB2YWx1ZSBvZiAlcmlwICovCisJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJT ZXR0aW5nIG5leHRyaXAgdG8gJSNseCIsIHZhbCk7CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRd OworCXZjcHUtPm5leHRyaXAgPSB2YWw7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGJvb2xl YW5fdAoraXNfZGVzY3JpcHRvcl90YWJsZShpbnQgcmVnKQoreworCisJc3dpdGNoIChyZWcpIHsK KwljYXNlIFZNX1JFR19HVUVTVF9JRFRSOgorCWNhc2UgVk1fUkVHX0dVRVNUX0dEVFI6CisJCXJl dHVybiAoVFJVRSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorfQorCitzdGF0 aWMgYm9vbGVhbl90Citpc19zZWdtZW50X3JlZ2lzdGVyKGludCByZWcpCit7CisJCisJc3dpdGNo IChyZWcpIHsKKwljYXNlIFZNX1JFR19HVUVTVF9FUzoKKwljYXNlIFZNX1JFR19HVUVTVF9DUzoK KwljYXNlIFZNX1JFR19HVUVTVF9TUzoKKwljYXNlIFZNX1JFR19HVUVTVF9EUzoKKwljYXNlIFZN X1JFR19HVUVTVF9GUzoKKwljYXNlIFZNX1JFR19HVUVTVF9HUzoKKwljYXNlIFZNX1JFR19HVUVT VF9UUjoKKwljYXNlIFZNX1JFR19HVUVTVF9MRFRSOgorCQlyZXR1cm4gKFRSVUUpOworCWRlZmF1 bHQ6CisJCXJldHVybiAoRkFMU0UpOworCX0KK30KKworaW50Cit2bV9nZXRfc2VnX2Rlc2Moc3Ry dWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCXN0cnVjdCBzZWdfZGVzYyAqZGVzYykK K3sKKworCWlmICh2Y3B1IDwgMCB8fCB2Y3B1ID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5W QUwpOworCisJaWYgKCFpc19zZWdtZW50X3JlZ2lzdGVyKHJlZykgJiYgIWlzX2Rlc2NyaXB0b3Jf dGFibGUocmVnKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcmV0dXJuIChWTUdFVERFU0Modm0t PmNvb2tpZSwgdmNwdSwgcmVnLCBkZXNjKSk7Cit9CisKK2ludAordm1fc2V0X3NlZ19kZXNjKHN0 cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLAorCQlzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2Mp Cit7CisJaWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZB TCk7CisKKwlpZiAoIWlzX3NlZ21lbnRfcmVnaXN0ZXIocmVnKSAmJiAhaXNfZGVzY3JpcHRvcl90 YWJsZShyZWcpKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKFZNU0VUREVTQyh2bS0+ Y29va2llLCB2Y3B1LCByZWcsIGRlc2MpKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc3RvcmVfZ3Vl c3RfZnB1c3RhdGUoc3RydWN0IHZjcHUgKnZjcHUpCit7CisKKwkvKiBmbHVzaCBob3N0IHN0YXRl IHRvIHRoZSBwY2IgKi8KKwlmcHVleGl0KGN1cnRocmVhZCk7CisKKwkvKiByZXN0b3JlIGd1ZXN0 IEZQVSBzdGF0ZSAqLworCWZwdV9zdG9wX2VtdWxhdGluZygpOworCWZwdXJlc3RvcmUodmNwdS0+ Z3Vlc3RmcHUpOworCisJLyogcmVzdG9yZSBndWVzdCBYQ1IwIGlmIFhTQVZFIGlzIGVuYWJsZWQg aW4gdGhlIGhvc3QgKi8KKwlpZiAocmNyNCgpICYgQ1I0X1hTQVZFKQorCQlsb2FkX3hjcigwLCB2 Y3B1LT5ndWVzdF94Y3IwKTsKKworCS8qCisJICogVGhlIEZQVSBpcyBub3cgImRpcnR5IiB3aXRo IHRoZSBndWVzdCdzIHN0YXRlIHNvIHR1cm4gb24gZW11bGF0aW9uCisJICogdG8gdHJhcCBhbnkg YWNjZXNzIHRvIHRoZSBGUFUgYnkgdGhlIGhvc3QuCisJICovCisJZnB1X3N0YXJ0X2VtdWxhdGlu ZygpOworfQorCitzdGF0aWMgdm9pZAorc2F2ZV9ndWVzdF9mcHVzdGF0ZShzdHJ1Y3QgdmNwdSAq dmNwdSkKK3sKKworCWlmICgocmNyMCgpICYgQ1IwX1RTKSA9PSAwKQorCQlwYW5pYygiZnB1IGVt dWxhdGlvbiBub3QgZW5hYmxlZCBpbiBob3N0ISIpOworCisJLyogc2F2ZSBndWVzdCBYQ1IwIGFu ZCByZXN0b3JlIGhvc3QgWENSMCAqLworCWlmIChyY3I0KCkgJiBDUjRfWFNBVkUpIHsKKwkJdmNw dS0+Z3Vlc3RfeGNyMCA9IHJ4Y3IoMCk7CisJCWxvYWRfeGNyKDAsIHZtbV9nZXRfaG9zdF94Y3Iw KCkpOworCX0KKworCS8qIHNhdmUgZ3Vlc3QgRlBVIHN0YXRlICovCisJZnB1X3N0b3BfZW11bGF0 aW5nKCk7CisJZnB1c2F2ZSh2Y3B1LT5ndWVzdGZwdSk7CisJZnB1X3N0YXJ0X2VtdWxhdGluZygp OworfQorCitzdGF0aWMgVk1NX1NUQVQoVkNQVV9JRExFX1RJQ0tTLCAibnVtYmVyIG9mIHRpY2tz IHZjcHUgd2FzIGlkbGUiKTsKKworc3RhdGljIGludAordmNwdV9zZXRfc3RhdGVfbG9ja2VkKHN0 cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGVudW0gdmNwdV9zdGF0ZSBuZXdzdGF0ZSwKKyAgICBi b29sIGZyb21faWRsZSkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKwlpbnQgZXJyb3I7CisKKwl2 Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJdmNwdV9hc3NlcnRfbG9ja2VkKHZjcHUpOworCisJ LyoKKwkgKiBTdGF0ZSB0cmFuc2l0aW9ucyBmcm9tIHRoZSB2bW1kZXZfaW9jdGwoKSBtdXN0IGFs d2F5cyBiZWdpbiBmcm9tCisJICogdGhlIFZDUFVfSURMRSBzdGF0ZS4gVGhpcyBndWFyYW50ZWVz IHRoYXQgdGhlcmUgaXMgb25seSBhIHNpbmdsZQorCSAqIGlvY3RsKCkgb3BlcmF0aW5nIG9uIGEg dmNwdSBhdCBhbnkgcG9pbnQuCisJICovCisJaWYgKGZyb21faWRsZSkgeworCQl3aGlsZSAodmNw dS0+c3RhdGUgIT0gVkNQVV9JRExFKSB7CisJCQl2Y3B1LT5yZXFpZGxlID0gMTsKKwkJCXZjcHVf bm90aWZ5X2V2ZW50X2xvY2tlZCh2Y3B1LCBmYWxzZSk7CisJCQlWQ1BVX0NUUjEodm0sIHZjcHVp ZCwgInZjcHUgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gIgorCQkJICAgICJpZGxlIHJlcXVlc3Rl ZCIsIHZjcHVfc3RhdGUyc3RyKHZjcHUtPnN0YXRlKSk7CisJCQltc2xlZXBfc3BpbigmdmNwdS0+ c3RhdGUsICZ2Y3B1LT5tdHgsICJ2bXN0YXQiLCBoeik7CisJCX0KKwl9IGVsc2UgeworCQlLQVNT RVJUKHZjcHUtPnN0YXRlICE9IFZDUFVfSURMRSwgKCJpbnZhbGlkIHRyYW5zaXRpb24gZnJvbSAi CisJCSAgICAidmNwdSBpZGxlIHN0YXRlIikpOworCX0KKworCWlmICh2Y3B1LT5zdGF0ZSA9PSBW Q1BVX1JVTk5JTkcpIHsKKwkJS0FTU0VSVCh2Y3B1LT5ob3N0Y3B1ID09IGN1cmNwdSwgKCJjdXJj cHUgJWQgYW5kIGhvc3RjcHUgJWQgIgorCQkgICAgIm1pc21hdGNoIGZvciBydW5uaW5nIHZjcHUi LCBjdXJjcHUsIHZjcHUtPmhvc3RjcHUpKTsKKwl9IGVsc2UgeworCQlLQVNTRVJUKHZjcHUtPmhv c3RjcHUgPT0gTk9DUFUsICgiSW52YWxpZCBob3N0Y3B1ICVkIGZvciBhICIKKwkJICAgICJ2Y3B1 IHRoYXQgaXMgbm90IHJ1bm5pbmciLCB2Y3B1LT5ob3N0Y3B1KSk7CisJfQorCisJLyoKKwkgKiBU aGUgZm9sbG93aW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBhbGxvd2VkOgorCSAqIElETEUgLT4g RlJPWkVOIC0+IElETEUKKwkgKiBGUk9aRU4gLT4gUlVOTklORyAtPiBGUk9aRU4KKwkgKiBGUk9a RU4gLT4gU0xFRVBJTkcgLT4gRlJPWkVOCisJICovCisJc3dpdGNoICh2Y3B1LT5zdGF0ZSkgewor CWNhc2UgVkNQVV9JRExFOgorCWNhc2UgVkNQVV9SVU5OSU5HOgorCWNhc2UgVkNQVV9TTEVFUElO RzoKKwkJZXJyb3IgPSAobmV3c3RhdGUgIT0gVkNQVV9GUk9aRU4pOworCQlicmVhazsKKwljYXNl IFZDUFVfRlJPWkVOOgorCQllcnJvciA9IChuZXdzdGF0ZSA9PSBWQ1BVX0ZST1pFTik7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycm9y KQorCQlyZXR1cm4gKEVCVVNZKTsKKworCVZDUFVfQ1RSMih2bSwgdmNwdWlkLCAidmNwdSBzdGF0 ZSBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiLAorCSAgICB2Y3B1X3N0YXRlMnN0cih2Y3B1LT5zdGF0 ZSksIHZjcHVfc3RhdGUyc3RyKG5ld3N0YXRlKSk7CisKKwl2Y3B1LT5zdGF0ZSA9IG5ld3N0YXRl OworCWlmIChuZXdzdGF0ZSA9PSBWQ1BVX1JVTk5JTkcpCisJCXZjcHUtPmhvc3RjcHUgPSBjdXJj cHU7CisJZWxzZQorCQl2Y3B1LT5ob3N0Y3B1ID0gTk9DUFU7CisKKwlpZiAobmV3c3RhdGUgPT0g VkNQVV9JRExFKQorCQl3YWtldXAoJnZjcHUtPnN0YXRlKTsKKworCXJldHVybiAoMCk7Cit9CisK K3N0YXRpYyB2b2lkCit2Y3B1X3JlcXVpcmVfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp ZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0YXRlKQoreworCWludCBlcnJvcjsKKworCWlmICgoZXJy b3IgPSB2Y3B1X3NldF9zdGF0ZSh2bSwgdmNwdWlkLCBuZXdzdGF0ZSwgZmFsc2UpKSAhPSAwKQor CQlwYW5pYygiRXJyb3IgJWQgc2V0dGluZyBzdGF0ZSB0byAlZFxuIiwgZXJyb3IsIG5ld3N0YXRl KTsKK30KKworc3RhdGljIHZvaWQKK3ZjcHVfcmVxdWlyZV9zdGF0ZV9sb2NrZWQoc3RydWN0IHZt ICp2bSwgaW50IHZjcHVpZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0YXRlKQoreworCWludCBlcnJv cjsKKworCWlmICgoZXJyb3IgPSB2Y3B1X3NldF9zdGF0ZV9sb2NrZWQodm0sIHZjcHVpZCwgbmV3 c3RhdGUsIGZhbHNlKSkgIT0gMCkKKwkJcGFuaWMoIkVycm9yICVkIHNldHRpbmcgc3RhdGUgdG8g JWQiLCBlcnJvciwgbmV3c3RhdGUpOworfQorCitzdGF0aWMgdm9pZAordm1fc2V0X3JlbmRlenZv dXNfZnVuYyhzdHJ1Y3Qgdm0gKnZtLCB2bV9yZW5kZXp2b3VzX2Z1bmNfdCBmdW5jKQoreworCisJ S0FTU0VSVChtdHhfb3duZWQoJnZtLT5yZW5kZXp2b3VzX210eCksICgicmVuZGV6dm91c19tdHgg bm90IGxvY2tlZCIpKTsKKworCS8qCisJICogVXBkYXRlICdyZW5kZXp2b3VzX2Z1bmMnIGFuZCBl eGVjdXRlIGEgd3JpdGUgbWVtb3J5IGJhcnJpZXIgdG8KKwkgKiBlbnN1cmUgdGhhdCBpdCBpcyB2 aXNpYmxlIGFjcm9zcyBhbGwgaG9zdCBjcHVzLiBUaGlzIGlzIG5vdCBuZWVkZWQKKwkgKiBmb3Ig Y29ycmVjdG5lc3MgYnV0IGl0IGRvZXMgZW5zdXJlIHRoYXQgYWxsIHRoZSB2Y3B1cyB3aWxsIG5v dGljZQorCSAqIHRoYXQgdGhlIHJlbmRlenZvdXMgaXMgcmVxdWVzdGVkIGltbWVkaWF0ZWx5Lgor CSAqLworCXZtLT5yZW5kZXp2b3VzX2Z1bmMgPSBmdW5jOworCXdtYigpOworfQorCisjZGVmaW5l CVJFTkRFWlZPVVNfQ1RSMCh2bSwgdmNwdWlkLCBmbXQpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJ CWlmICh2Y3B1aWQgPj0gMCkJCQkJCVwKKwkJCVZDUFVfQ1RSMCh2bSwgdmNwdWlkLCBmbXQpOwkJ CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlWTV9DVFIwKHZtLCBmbXQpOwkJCQlcCisJfSB3aGlsZSAo MCkKKworc3RhdGljIHZvaWQKK3ZtX2hhbmRsZV9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGlu dCB2Y3B1aWQpCit7CisKKwlLQVNTRVJUKHZjcHVpZCA9PSAtMSB8fCAodmNwdWlkID49IDAgJiYg dmNwdWlkIDwgVk1fTUFYQ1BVKSwKKwkgICAgKCJ2bV9oYW5kbGVfcmVuZGV6dm91czogaW52YWxp ZCB2Y3B1aWQgJWQiLCB2Y3B1aWQpKTsKKworCW10eF9sb2NrKCZ2bS0+cmVuZGV6dm91c19tdHgp OworCXdoaWxlICh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5VTEwpIHsKKwkJLyogJ3JlbmRlenZv dXNfcmVxX2NwdXMnIG11c3QgYmUgYSBzdWJzZXQgb2YgJ2FjdGl2ZV9jcHVzJyAqLworCQlDUFVf QU5EKCZ2bS0+cmVuZGV6dm91c19yZXFfY3B1cywgJnZtLT5hY3RpdmVfY3B1cyk7CisKKwkJaWYg KHZjcHVpZCAhPSAtMSAmJgorCQkgICAgQ1BVX0lTU0VUKHZjcHVpZCwgJnZtLT5yZW5kZXp2b3Vz X3JlcV9jcHVzKSAmJgorCQkgICAgIUNQVV9JU1NFVCh2Y3B1aWQsICZ2bS0+cmVuZGV6dm91c19k b25lX2NwdXMpKSB7CisJCQlWQ1BVX0NUUjAodm0sIHZjcHVpZCwgIkNhbGxpbmcgcmVuZGV6dm91 cyBmdW5jIik7CisJCQkoKnZtLT5yZW5kZXp2b3VzX2Z1bmMpKHZtLCB2Y3B1aWQsIHZtLT5yZW5k ZXp2b3VzX2FyZyk7CisJCQlDUFVfU0VUKHZjcHVpZCwgJnZtLT5yZW5kZXp2b3VzX2RvbmVfY3B1 cyk7CisJCX0KKwkJaWYgKENQVV9DTVAoJnZtLT5yZW5kZXp2b3VzX3JlcV9jcHVzLAorCQkgICAg JnZtLT5yZW5kZXp2b3VzX2RvbmVfY3B1cykgPT0gMCkgeworCQkJVkNQVV9DVFIwKHZtLCB2Y3B1 aWQsICJSZW5kZXp2b3VzIGNvbXBsZXRlZCIpOworCQkJdm1fc2V0X3JlbmRlenZvdXNfZnVuYyh2 bSwgTlVMTCk7CisJCQl3YWtldXAoJnZtLT5yZW5kZXp2b3VzX2Z1bmMpOworCQkJYnJlYWs7CisJ CX0KKwkJUkVOREVaVk9VU19DVFIwKHZtLCB2Y3B1aWQsICJXYWl0IGZvciByZW5kZXp2b3VzIGNv bXBsZXRpb24iKTsKKwkJbXR4X3NsZWVwKCZ2bS0+cmVuZGV6dm91c19mdW5jLCAmdm0tPnJlbmRl enZvdXNfbXR4LCAwLAorCQkgICAgInZtcm5kdiIsIDApOworCX0KKwltdHhfdW5sb2NrKCZ2bS0+ cmVuZGV6dm91c19tdHgpOworfQorCisvKgorICogRW11bGF0ZSBhIGd1ZXN0ICdobHQnIGJ5IHNs ZWVwaW5nIHVudGlsIHRoZSB2Y3B1IGlzIHJlYWR5IHRvIHJ1bi4KKyAqLworc3RhdGljIGludAor dm1faGFuZGxlX2hsdChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBib29sIGludHJfZGlzYWJs ZWQsIGJvb2wgKnJldHUpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJY29uc3QgY2hhciAqd21l c2c7CisJaW50IHQsIHZjcHVfaGFsdGVkLCB2bV9oYWx0ZWQ7CisKKwlLQVNTRVJUKCFDUFVfSVNT RVQodmNwdWlkLCAmdm0tPmhhbHRlZF9jcHVzKSwgKCJ2Y3B1IGFscmVhZHkgaGFsdGVkIikpOwor CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCXZjcHVfaGFsdGVkID0gMDsKKwl2bV9oYWx0 ZWQgPSAwOworCisJdmNwdV9sb2NrKHZjcHUpOworCXdoaWxlICgxKSB7CisJCS8qCisJCSAqIERv IGEgZmluYWwgY2hlY2sgZm9yIHBlbmRpbmcgTk1JIG9yIGludGVycnVwdHMgYmVmb3JlCisJCSAq IHJlYWxseSBwdXR0aW5nIHRoaXMgdGhyZWFkIHRvIHNsZWVwLiBBbHNvIGNoZWNrIGZvcgorCQkg KiBzb2Z0d2FyZSBldmVudHMgdGhhdCB3b3VsZCBjYXVzZSB0aGlzIHZjcHUgdG8gd2FrZXVwLgor CQkgKgorCQkgKiBUaGVzZSBpbnRlcnJ1cHRzL2V2ZW50cyBjb3VsZCBoYXZlIGhhcHBlbmVkIGFm dGVyIHRoZQorCQkgKiB2Y3B1IHJldHVybmVkIGZyb20gVk1SVU4oKSBhbmQgYmVmb3JlIGl0IGFj cXVpcmVkIHRoZQorCQkgKiB2Y3B1IGxvY2sgYWJvdmUuCisJCSAqLworCQlpZiAodm0tPnJlbmRl enZvdXNfZnVuYyAhPSBOVUxMIHx8IHZtLT5zdXNwZW5kIHx8IHZjcHUtPnJlcWlkbGUpCisJCQli cmVhazsKKwkJaWYgKHZtX25taV9wZW5kaW5nKHZtLCB2Y3B1aWQpKQorCQkJYnJlYWs7CisJCWlm ICghaW50cl9kaXNhYmxlZCkgeworCQkJaWYgKHZtX2V4dGludF9wZW5kaW5nKHZtLCB2Y3B1aWQp IHx8CisJCQkgICAgdmxhcGljX3BlbmRpbmdfaW50cih2Y3B1LT52bGFwaWMsIE5VTEwpKSB7CisJ CQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBEb24ndCBnbyB0byBzbGVlcCBpZiB0aGUgdmNw dSB0aHJlYWQgbmVlZHMgdG8geWllbGQgKi8KKwkJaWYgKHZjcHVfc2hvdWxkX3lpZWxkKHZtLCB2 Y3B1aWQpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogU29tZSBMaW51eCBndWVzdHMgaW1wbGVt ZW50ICJoYWx0IiBieSBoYXZpbmcgYWxsIHZjcHVzCisJCSAqIGV4ZWN1dGUgSExUIHdpdGggaW50 ZXJydXB0cyBkaXNhYmxlZC4gJ2hhbHRlZF9jcHVzJyBrZWVwcworCQkgKiB0cmFjayBvZiB0aGUg dmNwdXMgdGhhdCBoYXZlIGVudGVyZWQgdGhpcyBzdGF0ZS4gV2hlbiBhbGwKKwkJICogdmNwdXMg ZW50ZXIgdGhlIGhhbHRlZCBzdGF0ZSB0aGUgdmlydHVhbCBtYWNoaW5lIGlzIGhhbHRlZC4KKwkJ ICovCisJCWlmIChpbnRyX2Rpc2FibGVkKSB7CisJCQl3bWVzZyA9ICJ2bWhhbHQiOworCQkJVkNQ VV9DVFIwKHZtLCB2Y3B1aWQsICJIYWx0ZWQiKTsKKwkJCWlmICghdmNwdV9oYWx0ZWQgJiYgaGFs dF9kZXRlY3Rpb25fZW5hYmxlZCkgeworCQkJCXZjcHVfaGFsdGVkID0gMTsKKwkJCQlDUFVfU0VU X0FUT01JQyh2Y3B1aWQsICZ2bS0+aGFsdGVkX2NwdXMpOworCQkJfQorCQkJaWYgKENQVV9DTVAo JnZtLT5oYWx0ZWRfY3B1cywgJnZtLT5hY3RpdmVfY3B1cykgPT0gMCkgeworCQkJCXZtX2hhbHRl ZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQl3bWVzZyA9ICJ2bWlkbGUi OworCQl9CisKKwkJdCA9IHRpY2tzOworCQl2Y3B1X3JlcXVpcmVfc3RhdGVfbG9ja2VkKHZtLCB2 Y3B1aWQsIFZDUFVfU0xFRVBJTkcpOworCQkvKgorCQkgKiBYWFggbXNsZWVwX3NwaW4oKSBjYW5u b3QgYmUgaW50ZXJydXB0ZWQgYnkgc2lnbmFscyBzbworCQkgKiB3YWtlIHVwIHBlcmlvZGljYWxs eSB0byBjaGVjayBwZW5kaW5nIHNpZ25hbHMuCisJCSAqLworCQltc2xlZXBfc3Bpbih2Y3B1LCAm dmNwdS0+bXR4LCB3bWVzZywgaHopOworCQl2Y3B1X3JlcXVpcmVfc3RhdGVfbG9ja2VkKHZtLCB2 Y3B1aWQsIFZDUFVfRlJPWkVOKTsKKwkJdm1tX3N0YXRfaW5jcih2bSwgdmNwdWlkLCBWQ1BVX0lE TEVfVElDS1MsIHRpY2tzIC0gdCk7CisJfQorCisJaWYgKHZjcHVfaGFsdGVkKQorCQlDUFVfQ0xS X0FUT01JQyh2Y3B1aWQsICZ2bS0+aGFsdGVkX2NwdXMpOworCisJdmNwdV91bmxvY2sodmNwdSk7 CisKKwlpZiAodm1faGFsdGVkKQorCQl2bV9zdXNwZW5kKHZtLCBWTV9TVVNQRU5EX0hBTFQpOwor CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAordm1faGFuZGxlX3BhZ2luZyhzdHJ1Y3Qg dm0gKnZtLCBpbnQgdmNwdWlkLCBib29sICpyZXR1KQoreworCWludCBydiwgZnR5cGU7CisJc3Ry dWN0IHZtX21hcCAqbWFwOworCXN0cnVjdCB2Y3B1ICp2Y3B1OworCXN0cnVjdCB2bV9leGl0ICp2 bWU7CisKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJdm1lID0gJnZjcHUtPmV4aXRpbmZv OworCisJS0FTU0VSVCh2bWUtPmluc3RfbGVuZ3RoID09IDAsICgiJXM6IGludmFsaWQgaW5zdF9s ZW5ndGggJWQiLAorCSAgICBfX2Z1bmNfXywgdm1lLT5pbnN0X2xlbmd0aCkpOworCisJZnR5cGUg PSB2bWUtPnUucGFnaW5nLmZhdWx0X3R5cGU7CisJS0FTU0VSVChmdHlwZSA9PSBWTV9QUk9UX1JF QUQgfHwKKwkgICAgZnR5cGUgPT0gVk1fUFJPVF9XUklURSB8fCBmdHlwZSA9PSBWTV9QUk9UX0VY RUNVVEUsCisJICAgICgidm1faGFuZGxlX3BhZ2luZzogaW52YWxpZCBmYXVsdF90eXBlICVkIiwg ZnR5cGUpKTsKKworCWlmIChmdHlwZSA9PSBWTV9QUk9UX1JFQUQgfHwgZnR5cGUgPT0gVk1fUFJP VF9XUklURSkgeworCQlydiA9IHBtYXBfZW11bGF0ZV9hY2Nlc3NlZF9kaXJ0eSh2bXNwYWNlX3Bt YXAodm0tPnZtc3BhY2UpLAorCQkgICAgdm1lLT51LnBhZ2luZy5ncGEsIGZ0eXBlKTsKKwkJaWYg KHJ2ID09IDApIHsKKwkJCVZDUFVfQ1RSMih2bSwgdmNwdWlkLCAiJXMgYml0IGVtdWxhdGlvbiBm b3IgZ3BhICUjbHgiLAorCQkJICAgIGZ0eXBlID09IFZNX1BST1RfUkVBRCA/ICJhY2Nlc3NlZCIg OiAiZGlydHkiLAorCQkJICAgIHZtZS0+dS5wYWdpbmcuZ3BhKTsKKwkJCWdvdG8gZG9uZTsKKwkJ fQorCX0KKworCW1hcCA9ICZ2bS0+dm1zcGFjZS0+dm1fbWFwOworCXJ2ID0gdm1fZmF1bHQobWFw LCB2bWUtPnUucGFnaW5nLmdwYSwgZnR5cGUsIFZNX0ZBVUxUX05PUk1BTCk7CisKKwlWQ1BVX0NU UjModm0sIHZjcHVpZCwgInZtX2hhbmRsZV9wYWdpbmcgcnYgPSAlZCwgZ3BhID0gJSNseCwgIgor CSAgICAiZnR5cGUgPSAlZCIsIHJ2LCB2bWUtPnUucGFnaW5nLmdwYSwgZnR5cGUpOworCisJaWYg KHJ2ICE9IEtFUk5fU1VDQ0VTUykKKwkJcmV0dXJuIChFRkFVTFQpOworZG9uZToKKwlyZXR1cm4g KDApOworfQorCitzdGF0aWMgaW50Cit2bV9oYW5kbGVfaW5zdF9lbXVsKHN0cnVjdCB2bSAqdm0s IGludCB2Y3B1aWQsIGJvb2wgKnJldHUpCit7CisJc3RydWN0IHZpZSAqdmllOworCXN0cnVjdCB2 Y3B1ICp2Y3B1OworCXN0cnVjdCB2bV9leGl0ICp2bWU7CisJdWludDY0X3QgZ2xhLCBncGEsIGNz X2Jhc2U7CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFnaW5nOworCW1lbV9yZWdpb25fcmVh ZF90IG1yZWFkOworCW1lbV9yZWdpb25fd3JpdGVfdCBtd3JpdGU7CisJZW51bSB2bV9jcHVfbW9k ZSBjcHVfbW9kZTsKKwlpbnQgY3NfZCwgZXJyb3IsIGZhdWx0OworCisJdmNwdSA9ICZ2bS0+dmNw dVt2Y3B1aWRdOworCXZtZSA9ICZ2Y3B1LT5leGl0aW5mbzsKKworCUtBU1NFUlQodm1lLT5pbnN0 X2xlbmd0aCA9PSAwLCAoIiVzOiBpbnZhbGlkIGluc3RfbGVuZ3RoICVkIiwKKwkgICAgX19mdW5j X18sIHZtZS0+aW5zdF9sZW5ndGgpKTsKKworCWdsYSA9IHZtZS0+dS5pbnN0X2VtdWwuZ2xhOwor CWdwYSA9IHZtZS0+dS5pbnN0X2VtdWwuZ3BhOworCWNzX2Jhc2UgPSB2bWUtPnUuaW5zdF9lbXVs LmNzX2Jhc2U7CisJY3NfZCA9IHZtZS0+dS5pbnN0X2VtdWwuY3NfZDsKKwl2aWUgPSAmdm1lLT51 Lmluc3RfZW11bC52aWU7CisJcGFnaW5nID0gJnZtZS0+dS5pbnN0X2VtdWwucGFnaW5nOworCWNw dV9tb2RlID0gcGFnaW5nLT5jcHVfbW9kZTsKKworCVZDUFVfQ1RSMSh2bSwgdmNwdWlkLCAiaW5z dF9lbXVsIGZhdWx0IGFjY2Vzc2luZyBncGEgJSNseCIsIGdwYSk7CisKKwkvKiBGZXRjaCwgZGVj b2RlIGFuZCBlbXVsYXRlIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiAqLworCWlmICh2aWUtPm51 bV92YWxpZCA9PSAwKSB7CisJCWVycm9yID0gdm1tX2ZldGNoX2luc3RydWN0aW9uKHZtLCB2Y3B1 aWQsIHBhZ2luZywgdm1lLT5yaXAgKworCQkgICAgY3NfYmFzZSwgVklFX0lOU1RfU0laRSwgdmll LCAmZmF1bHQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBpbnN0cnVjdGlvbiBieXRlcyBo YXZlIGFscmVhZHkgYmVlbiBjb3BpZWQgaW50byAndmllJworCQkgKi8KKwkJZXJyb3IgPSBmYXVs dCA9IDA7CisJfQorCWlmIChlcnJvciB8fCBmYXVsdCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlp ZiAodm1tX2RlY29kZV9pbnN0cnVjdGlvbih2bSwgdmNwdWlkLCBnbGEsIGNwdV9tb2RlLCBjc19k LCB2aWUpICE9IDApIHsKKwkJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJFcnJvciBkZWNvZGluZyBp bnN0cnVjdGlvbiBhdCAlI2x4IiwKKwkJICAgIHZtZS0+cmlwICsgY3NfYmFzZSk7CisJCSpyZXR1 ID0gdHJ1ZTsJICAgIC8qIGR1bXAgaW5zdHJ1Y3Rpb24gYnl0ZXMgaW4gdXNlcnNwYWNlICovCisJ CXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgJ25leHRyaXAnIGJhc2VkIG9uIHRo ZSBsZW5ndGggb2YgdGhlIGVtdWxhdGVkIGluc3RydWN0aW9uLgorCSAqLworCXZtZS0+aW5zdF9s ZW5ndGggPSB2aWUtPm51bV9wcm9jZXNzZWQ7CisJdmNwdS0+bmV4dHJpcCArPSB2aWUtPm51bV9w cm9jZXNzZWQ7CisJVkNQVV9DVFIxKHZtLCB2Y3B1aWQsICJuZXh0cmlwIHVwZGF0ZWQgdG8gJSNs eCBhZnRlciBpbnN0cnVjdGlvbiAiCisJICAgICJkZWNvZGluZyIsIHZjcHUtPm5leHRyaXApOwor IAorCS8qIHJldHVybiB0byB1c2VybGFuZCB1bmxlc3MgdGhpcyBpcyBhbiBpbi1rZXJuZWwgZW11 bGF0ZWQgZGV2aWNlICovCisJaWYgKGdwYSA+PSBERUZBVUxUX0FQSUNfQkFTRSAmJiBncGEgPCBE RUZBVUxUX0FQSUNfQkFTRSArIFBBR0VfU0laRSkgeworCQltcmVhZCA9IGxhcGljX21taW9fcmVh ZDsKKwkJbXdyaXRlID0gbGFwaWNfbW1pb193cml0ZTsKKwl9IGVsc2UgaWYgKGdwYSA+PSBWSU9B UElDX0JBU0UgJiYgZ3BhIDwgVklPQVBJQ19CQVNFICsgVklPQVBJQ19TSVpFKSB7CisJCW1yZWFk ID0gdmlvYXBpY19tbWlvX3JlYWQ7CisJCW13cml0ZSA9IHZpb2FwaWNfbW1pb193cml0ZTsKKwl9 IGVsc2UgaWYgKGdwYSA+PSBWSFBFVF9CQVNFICYmIGdwYSA8IFZIUEVUX0JBU0UgKyBWSFBFVF9T SVpFKSB7CisJCW1yZWFkID0gdmhwZXRfbW1pb19yZWFkOworCQltd3JpdGUgPSB2aHBldF9tbWlv X3dyaXRlOworCX0gZWxzZSB7CisJCSpyZXR1ID0gdHJ1ZTsKKwkJcmV0dXJuICgwKTsKKwl9CisK KwllcnJvciA9IHZtbV9lbXVsYXRlX2luc3RydWN0aW9uKHZtLCB2Y3B1aWQsIGdwYSwgdmllLCBw YWdpbmcsCisJICAgIG1yZWFkLCBtd3JpdGUsIHJldHUpOworCisJcmV0dXJuIChlcnJvcik7Cit9 CisKK3N0YXRpYyBpbnQKK3ZtX2hhbmRsZV9zdXNwZW5kKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1 aWQsIGJvb2wgKnJldHUpCit7CisJaW50IGksIGRvbmU7CisJc3RydWN0IHZjcHUgKnZjcHU7CisK Kwlkb25lID0gMDsKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwlDUFVfU0VUX0FUT01J Qyh2Y3B1aWQsICZ2bS0+c3VzcGVuZGVkX2NwdXMpOworCisJLyoKKwkgKiBXYWl0IHVudGlsIGFs bCAnYWN0aXZlX2NwdXMnIGhhdmUgc3VzcGVuZGVkIHRoZW1zZWx2ZXMuCisJICoKKwkgKiBTaW5j ZSBhIFZNIG1heSBiZSBzdXNwZW5kZWQgYXQgYW55IHRpbWUgaW5jbHVkaW5nIHdoZW4gb25lIG9y CisJICogbW9yZSB2Y3B1cyBhcmUgZG9pbmcgYSByZW5kZXp2b3VzIHdlIG5lZWQgdG8gY2FsbCB0 aGUgcmVuZGV6dm91cworCSAqIGhhbmRsZXIgd2hpbGUgd2UgYXJlIHdhaXRpbmcgdG8gcHJldmVu dCBhIGRlYWRsb2NrLgorCSAqLworCXZjcHVfbG9jayh2Y3B1KTsKKwl3aGlsZSAoMSkgeworCQlp ZiAoQ1BVX0NNUCgmdm0tPnN1c3BlbmRlZF9jcHVzLCAmdm0tPmFjdGl2ZV9jcHVzKSA9PSAwKSB7 CisJCQlWQ1BVX0NUUjAodm0sIHZjcHVpZCwgIkFsbCB2Y3B1cyBzdXNwZW5kZWQiKTsKKwkJCWJy ZWFrOworCQl9CisKKwkJaWYgKHZtLT5yZW5kZXp2b3VzX2Z1bmMgPT0gTlVMTCkgeworCQkJVkNQ VV9DVFIwKHZtLCB2Y3B1aWQsICJTbGVlcGluZyBkdXJpbmcgc3VzcGVuZCIpOworCQkJdmNwdV9y ZXF1aXJlX3N0YXRlX2xvY2tlZCh2bSwgdmNwdWlkLCBWQ1BVX1NMRUVQSU5HKTsKKwkJCW1zbGVl cF9zcGluKHZjcHUsICZ2Y3B1LT5tdHgsICJ2bXN1c3AiLCBoeik7CisJCQl2Y3B1X3JlcXVpcmVf c3RhdGVfbG9ja2VkKHZtLCB2Y3B1aWQsIFZDUFVfRlJPWkVOKTsKKwkJfSBlbHNlIHsKKwkJCVZD UFVfQ1RSMCh2bSwgdmNwdWlkLCAiUmVuZGV6dm91cyBkdXJpbmcgc3VzcGVuZCIpOworCQkJdmNw dV91bmxvY2sodmNwdSk7CisJCQl2bV9oYW5kbGVfcmVuZGV6dm91cyh2bSwgdmNwdWlkKTsKKwkJ CXZjcHVfbG9jayh2Y3B1KTsKKwkJfQorCX0KKwl2Y3B1X3VubG9jayh2Y3B1KTsKKworCS8qCisJ ICogV2FrZXVwIHRoZSBvdGhlciBzbGVlcGluZyB2Y3B1cyBhbmQgcmV0dXJuIHRvIHVzZXJzcGFj ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFYQ1BVOyBpKyspIHsKKwkJaWYgKENQVV9J U1NFVChpLCAmdm0tPnN1c3BlbmRlZF9jcHVzKSkgeworCQkJdmNwdV9ub3RpZnlfZXZlbnQodm0s IGksIGZhbHNlKTsKKwkJfQorCX0KKworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOworfQor CitzdGF0aWMgaW50Cit2bV9oYW5kbGVfcmVxaWRsZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlk LCBib29sICpyZXR1KQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07 CisKKwl2Y3B1X2xvY2sodmNwdSk7CisJS0FTU0VSVCh2Y3B1LT5yZXFpZGxlLCAoImludmFsaWQg dmNwdSByZXFpZGxlICVkIiwgdmNwdS0+cmVxaWRsZSkpOworCXZjcHUtPnJlcWlkbGUgPSAwOwor CXZjcHVfdW5sb2NrKHZjcHUpOworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOworfQorCitp bnQKK3ZtX3N1c3BlbmQoc3RydWN0IHZtICp2bSwgZW51bSB2bV9zdXNwZW5kX2hvdyBob3cpCit7 CisJaW50IGk7CisKKwlpZiAoaG93IDw9IFZNX1NVU1BFTkRfTk9ORSB8fCBob3cgPj0gVk1fU1VT UEVORF9MQVNUKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoYXRvbWljX2NtcHNldF9pbnQo JnZtLT5zdXNwZW5kLCAwLCBob3cpID09IDApIHsKKwkJVk1fQ1RSMih2bSwgInZpcnR1YWwgbWFj aGluZSBhbHJlYWR5IHN1c3BlbmRlZCAlZC8lZCIsCisJCSAgICB2bS0+c3VzcGVuZCwgaG93KTsK KwkJcmV0dXJuIChFQUxSRUFEWSk7CisJfQorCisJVk1fQ1RSMSh2bSwgInZpcnR1YWwgbWFjaGlu ZSBzdWNjZXNzZnVsbHkgc3VzcGVuZGVkICVkIiwgaG93KTsKKworCS8qCisJICogTm90aWZ5IGFs bCBhY3RpdmUgdmNwdXMgdGhhdCB0aGV5IGFyZSBub3cgc3VzcGVuZGVkLgorCSAqLworCWZvciAo aSA9IDA7IGkgPCBWTV9NQVhDUFU7IGkrKykgeworCQlpZiAoQ1BVX0lTU0VUKGksICZ2bS0+YWN0 aXZlX2NwdXMpKQorCQkJdmNwdV9ub3RpZnlfZXZlbnQodm0sIGksIGZhbHNlKTsKKwl9CisKKwly ZXR1cm4gKDApOworfQorCit2b2lkCit2bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBp bnQgdmNwdWlkLCB1aW50NjRfdCByaXApCit7CisJc3RydWN0IHZtX2V4aXQgKnZtZXhpdDsKKwor CUtBU1NFUlQodm0tPnN1c3BlbmQgPiBWTV9TVVNQRU5EX05PTkUgJiYgdm0tPnN1c3BlbmQgPCBW TV9TVVNQRU5EX0xBU1QsCisJICAgICgidm1fZXhpdF9zdXNwZW5kZWQ6IGludmFsaWQgc3VzcGVu ZCB0eXBlICVkIiwgdm0tPnN1c3BlbmQpKTsKKworCXZtZXhpdCA9IHZtX2V4aXRpbmZvKHZtLCB2 Y3B1aWQpOworCXZtZXhpdC0+cmlwID0gcmlwOworCXZtZXhpdC0+aW5zdF9sZW5ndGggPSAwOwor CXZtZXhpdC0+ZXhpdGNvZGUgPSBWTV9FWElUQ09ERV9TVVNQRU5ERUQ7CisJdm1leGl0LT51LnN1 c3BlbmRlZC5ob3cgPSB2bS0+c3VzcGVuZDsKK30KKwordm9pZAordm1fZXhpdF9yZW5kZXp2b3Vz KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCkKK3sKKwlzdHJ1Y3Qgdm1f ZXhpdCAqdm1leGl0OworCisJS0FTU0VSVCh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5VTEwsICgi cmVuZGV6dm91cyBub3QgaW4gcHJvZ3Jlc3MiKSk7CisKKwl2bWV4aXQgPSB2bV9leGl0aW5mbyh2 bSwgdmNwdWlkKTsKKwl2bWV4aXQtPnJpcCA9IHJpcDsKKwl2bWV4aXQtPmluc3RfbGVuZ3RoID0g MDsKKwl2bWV4aXQtPmV4aXRjb2RlID0gVk1fRVhJVENPREVfUkVOREVaVk9VUzsKKwl2bW1fc3Rh dF9pbmNyKHZtLCB2Y3B1aWQsIFZNRVhJVF9SRU5ERVpWT1VTLCAxKTsKK30KKwordm9pZAordm1f ZXhpdF9yZXFpZGxlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90IHJpcCkKK3sK KwlzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0OworCisJdm1leGl0ID0gdm1fZXhpdGluZm8odm0sIHZj cHVpZCk7CisJdm1leGl0LT5yaXAgPSByaXA7CisJdm1leGl0LT5pbnN0X2xlbmd0aCA9IDA7CisJ dm1leGl0LT5leGl0Y29kZSA9IFZNX0VYSVRDT0RFX1JFUUlETEU7CisJdm1tX3N0YXRfaW5jcih2 bSwgdmNwdWlkLCBWTUVYSVRfUkVRSURMRSwgMSk7Cit9CisKK3ZvaWQKK3ZtX2V4aXRfYXN0cGVu ZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApCit7CisJc3RydWN0 IHZtX2V4aXQgKnZtZXhpdDsKKworCXZtZXhpdCA9IHZtX2V4aXRpbmZvKHZtLCB2Y3B1aWQpOwor CXZtZXhpdC0+cmlwID0gcmlwOworCXZtZXhpdC0+aW5zdF9sZW5ndGggPSAwOworCXZtZXhpdC0+ ZXhpdGNvZGUgPSBWTV9FWElUQ09ERV9CT0dVUzsKKwl2bW1fc3RhdF9pbmNyKHZtLCB2Y3B1aWQs IFZNRVhJVF9BU1RQRU5ESU5HLCAxKTsKK30KKworaW50Cit2bV9ydW4oc3RydWN0IHZtICp2bSwg c3RydWN0IHZtX3J1biAqdm1ydW4pCit7CisJc3RydWN0IHZtX2V2ZW50aW5mbyBldmluZm87CisJ aW50IGVycm9yLCB2Y3B1aWQ7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJc3RydWN0IHBjYiAqcGNi OworCXVpbnQ2NF90IHRzY3ZhbDsKKwlzdHJ1Y3Qgdm1fZXhpdCAqdm1lOworCWJvb2wgcmV0dSwg aW50cl9kaXNhYmxlZDsKKwlwbWFwX3QgcG1hcDsKKworCXZjcHVpZCA9IHZtcnVuLT5jcHVpZDsK KworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlO VkFMKTsKKworCWlmICghQ1BVX0lTU0VUKHZjcHVpZCwgJnZtLT5hY3RpdmVfY3B1cykpCisJCXJl dHVybiAoRUlOVkFMKTsKKworCWlmIChDUFVfSVNTRVQodmNwdWlkLCAmdm0tPnN1c3BlbmRlZF9j cHVzKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcG1hcCA9IHZtc3BhY2VfcG1hcCh2bS0+dm1z cGFjZSk7CisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCXZtZSA9ICZ2Y3B1LT5leGl0aW5m bzsKKwlldmluZm8ucnB0ciA9ICZ2bS0+cmVuZGV6dm91c19mdW5jOworCWV2aW5mby5zcHRyID0g JnZtLT5zdXNwZW5kOworCWV2aW5mby5pcHRyID0gJnZjcHUtPnJlcWlkbGU7CityZXN0YXJ0Ogor CWNyaXRpY2FsX2VudGVyKCk7CisKKwlLQVNTRVJUKCFDUFVfSVNTRVQoY3VyY3B1LCAmcG1hcC0+ cG1fYWN0aXZlKSwKKwkgICAgKCJ2bV9ydW46IGFic3VyZCBwbV9hY3RpdmUiKSk7CisKKwl0c2N2 YWwgPSByZHRzYygpOworCisJcGNiID0gUENQVV9HRVQoY3VycGNiKTsKKwlzZXRfcGNiX2ZsYWdz KHBjYiwgUENCX0ZVTExfSVJFVCk7CisKKwlyZXN0b3JlX2d1ZXN0X2ZwdXN0YXRlKHZjcHUpOwor CisJdmNwdV9yZXF1aXJlX3N0YXRlKHZtLCB2Y3B1aWQsIFZDUFVfUlVOTklORyk7CisJZXJyb3Ig PSBWTVJVTih2bS0+Y29va2llLCB2Y3B1aWQsIHZjcHUtPm5leHRyaXAsIHBtYXAsICZldmluZm8p OworCXZjcHVfcmVxdWlyZV9zdGF0ZSh2bSwgdmNwdWlkLCBWQ1BVX0ZST1pFTik7CisKKwlzYXZl X2d1ZXN0X2ZwdXN0YXRlKHZjcHUpOworCisJdm1tX3N0YXRfaW5jcih2bSwgdmNwdWlkLCBWQ1BV X1RPVEFMX1JVTlRJTUUsIHJkdHNjKCkgLSB0c2N2YWwpOworCisJY3JpdGljYWxfZXhpdCgpOwor CisJaWYgKGVycm9yID09IDApIHsKKwkJcmV0dSA9IGZhbHNlOworCQl2Y3B1LT5uZXh0cmlwID0g dm1lLT5yaXAgKyB2bWUtPmluc3RfbGVuZ3RoOworCQlzd2l0Y2ggKHZtZS0+ZXhpdGNvZGUpIHsK KwkJY2FzZSBWTV9FWElUQ09ERV9SRVFJRExFOgorCQkJZXJyb3IgPSB2bV9oYW5kbGVfcmVxaWRs ZSh2bSwgdmNwdWlkLCAmcmV0dSk7CisJCQlicmVhazsKKwkJY2FzZSBWTV9FWElUQ09ERV9TVVNQ RU5ERUQ6CisJCQllcnJvciA9IHZtX2hhbmRsZV9zdXNwZW5kKHZtLCB2Y3B1aWQsICZyZXR1KTsK KwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX0lPQVBJQ19FT0k6CisJCQl2aW9hcGljX3By b2Nlc3NfZW9pKHZtLCB2Y3B1aWQsCisJCQkgICAgdm1lLT51LmlvYXBpY19lb2kudmVjdG9yKTsK KwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX1JFTkRFWlZPVVM6CisJCQl2bV9oYW5kbGVf cmVuZGV6dm91cyh2bSwgdmNwdWlkKTsKKwkJCWVycm9yID0gMDsKKwkJCWJyZWFrOworCQljYXNl IFZNX0VYSVRDT0RFX0hMVDoKKwkJCWludHJfZGlzYWJsZWQgPSAoKHZtZS0+dS5obHQucmZsYWdz ICYgUFNMX0kpID09IDApOworCQkJZXJyb3IgPSB2bV9oYW5kbGVfaGx0KHZtLCB2Y3B1aWQsIGlu dHJfZGlzYWJsZWQsICZyZXR1KTsKKwkJCWJyZWFrOworCQljYXNlIFZNX0VYSVRDT0RFX1BBR0lO RzoKKwkJCWVycm9yID0gdm1faGFuZGxlX3BhZ2luZyh2bSwgdmNwdWlkLCAmcmV0dSk7CisJCQli cmVhazsKKwkJY2FzZSBWTV9FWElUQ09ERV9JTlNUX0VNVUw6CisJCQllcnJvciA9IHZtX2hhbmRs ZV9pbnN0X2VtdWwodm0sIHZjcHVpZCwgJnJldHUpOworCQkJYnJlYWs7CisJCWNhc2UgVk1fRVhJ VENPREVfSU5PVVQ6CisJCWNhc2UgVk1fRVhJVENPREVfSU5PVVRfU1RSOgorCQkJZXJyb3IgPSB2 bV9oYW5kbGVfaW5vdXQodm0sIHZjcHVpZCwgdm1lLCAmcmV0dSk7CisJCQlicmVhazsKKwkJY2Fz ZSBWTV9FWElUQ09ERV9NT05JVE9SOgorCQljYXNlIFZNX0VYSVRDT0RFX01XQUlUOgorCQkJdm1f aW5qZWN0X3VkKHZtLCB2Y3B1aWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1ID0g dHJ1ZTsJLyogaGFuZGxlZCBpbiB1c2VybGFuZCAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlp ZiAoZXJyb3IgPT0gMCAmJiByZXR1ID09IGZhbHNlKQorCQlnb3RvIHJlc3RhcnQ7CisKKwlWQ1BV X0NUUjIodm0sIHZjcHVpZCwgInJldHUgJWQvJWQiLCBlcnJvciwgdm1lLT5leGl0Y29kZSk7CisK KwkvKiBjb3B5IHRoZSBleGl0IGluZm9ybWF0aW9uICovCisJYmNvcHkodm1lLCAmdm1ydW4tPnZt X2V4aXQsIHNpemVvZihzdHJ1Y3Qgdm1fZXhpdCkpOworCXJldHVybiAoZXJyb3IpOworfQorCitp bnQKK3ZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9pZCAqYXJnLCBpbnQgdmNwdWlkKQoreworCXN0 cnVjdCB2bSAqdm07CisJc3RydWN0IHZjcHUgKnZjcHU7CisJZW51bSB2Y3B1X3N0YXRlIHN0YXRl OworCXVpbnQ2NF90IHJpcDsKKwlpbnQgZXJyb3I7CisKKwl2bSA9IGFyZzsKKwlpZiAodmNwdWlk IDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwl2Y3B1 ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisJc3RhdGUgPSB2Y3B1X2dldF9zdGF0ZSh2bSwgdmNwdWlk LCBOVUxMKTsKKwlpZiAoc3RhdGUgPT0gVkNQVV9SVU5OSU5HKSB7CisJCS8qCisJCSAqIFdoZW4g YSB2Y3B1IGlzICJydW5uaW5nIiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBkZXRlcm1pbmVkCisJ CSAqIGJ5IGFkZGluZyAncmlwJyBhbmQgJ2luc3RfbGVuZ3RoJyBpbiB0aGUgdmNwdSdzICdleGl0 aW5mbycuCisJCSAqIFRodXMgc2V0dGluZyAnaW5zdF9sZW5ndGgnIHRvIHplcm8gd2lsbCBjYXVz ZSB0aGUgY3VycmVudAorCQkgKiBpbnN0cnVjdGlvbiB0byBiZSByZXN0YXJ0ZWQuCisJCSAqLwor CQl2Y3B1LT5leGl0aW5mby5pbnN0X2xlbmd0aCA9IDA7CisJCVZDUFVfQ1RSMSh2bSwgdmNwdWlk LCAicmVzdGFydGluZyBpbnN0cnVjdGlvbiBhdCAlI2x4IGJ5ICIKKwkJICAgICJzZXR0aW5nIGlu c3RfbGVuZ3RoIHRvIHplcm8iLCB2Y3B1LT5leGl0aW5mby5yaXApOworCX0gZWxzZSBpZiAoc3Rh dGUgPT0gVkNQVV9GUk9aRU4pIHsKKwkJLyoKKwkJICogV2hlbiBhIHZjcHUgaXMgImZyb3plbiIg aXQgaXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbgorCQkgKiBhcm91bmQgVk1SVU4oKSBh bmQgJ25leHRyaXAnIHBvaW50cyB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KKwkJICogVGh1cyBp bnN0cnVjdGlvbiByZXN0YXJ0IGlzIGFjaGlldmVkIGJ5IHNldHRpbmcgJ25leHRyaXAnCisJCSAq IHRvIHRoZSB2Y3B1J3MgJXJpcC4KKwkJICovCisJCWVycm9yID0gdm1fZ2V0X3JlZ2lzdGVyKHZt LCB2Y3B1aWQsIFZNX1JFR19HVUVTVF9SSVAsICZyaXApOworCQlLQVNTRVJUKCFlcnJvciwgKCIl czogZXJyb3IgJWQgZ2V0dGluZyByaXAiLCBfX2Z1bmNfXywgZXJyb3IpKTsKKwkJVkNQVV9DVFIy KHZtLCB2Y3B1aWQsICJyZXN0YXJ0aW5nIGluc3RydWN0aW9uIGJ5IHVwZGF0aW5nICIKKwkJICAg ICJuZXh0cmlwIGZyb20gJSNseCB0byAlI2x4IiwgdmNwdS0+bmV4dHJpcCwgcmlwKTsKKwkJdmNw dS0+bmV4dHJpcCA9IHJpcDsKKwl9IGVsc2UgeworCQlwYW5pYygiJXM6IGludmFsaWQgc3RhdGUg JWQiLCBfX2Z1bmNfXywgc3RhdGUpOworCX0KKwlyZXR1cm4gKDApOworfQorCitpbnQKK3ZtX2V4 aXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbmZvKQorewor CXN0cnVjdCB2Y3B1ICp2Y3B1OworCWludCB0eXBlLCB2ZWN0b3I7CisKKwlpZiAodmNwdWlkIDwg MCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwl2Y3B1ID0g JnZtLT52Y3B1W3ZjcHVpZF07CisKKwlpZiAoaW5mbyAmIFZNX0lOVElORk9fVkFMSUQpIHsKKwkJ dHlwZSA9IGluZm8gJiBWTV9JTlRJTkZPX1RZUEU7CisJCXZlY3RvciA9IGluZm8gJiAweGZmOwor CQlpZiAodHlwZSA9PSBWTV9JTlRJTkZPX05NSSAmJiB2ZWN0b3IgIT0gSURUX05NSSkKKwkJCXJl dHVybiAoRUlOVkFMKTsKKwkJaWYgKHR5cGUgPT0gVk1fSU5USU5GT19IV0VYQ0VQVElPTiAmJiB2 ZWN0b3IgPj0gMzIpCisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCWlmIChpbmZvICYgVk1fSU5USU5G T19SU1ZEKQorCQkJcmV0dXJuIChFSU5WQUwpOworCX0gZWxzZSB7CisJCWluZm8gPSAwOworCX0K KwlWQ1BVX0NUUjIodm0sIHZjcHVpZCwgIiVzOiBpbmZvMSglI2x4KSIsIF9fZnVuY19fLCBpbmZv KTsKKwl2Y3B1LT5leGl0aW50aW5mbyA9IGluZm87CisJcmV0dXJuICgwKTsKK30KKworZW51bSBl eGNfY2xhc3MgeworCUVYQ19CRU5JR04sCisJRVhDX0NPTlRSSUJVVE9SWSwKKwlFWENfUEFHRUZB VUxUCit9OworCisjZGVmaW5lCUlEVF9WRQkyMAkvKiBWaXJ0dWFsaXphdGlvbiBFeGNlcHRpb24g KEludGVsIHNwZWNpZmljKSAqLworCitzdGF0aWMgZW51bSBleGNfY2xhc3MKK2V4Y2VwdGlvbl9j bGFzcyh1aW50NjRfdCBpbmZvKQoreworCWludCB0eXBlLCB2ZWN0b3I7CisKKwlLQVNTRVJUKGlu Zm8gJiBWTV9JTlRJTkZPX1ZBTElELCAoImludGluZm8gbXVzdCBiZSB2YWxpZDogJSNseCIsIGlu Zm8pKTsKKwl0eXBlID0gaW5mbyAmIFZNX0lOVElORk9fVFlQRTsKKwl2ZWN0b3IgPSBpbmZvICYg MHhmZjsKKworCS8qIFRhYmxlIDYtNCwgIkludGVycnVwdCBhbmQgRXhjZXB0aW9uIENsYXNzZXMi LCBJbnRlbCBTRE0sIFZvbCAzICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBWTV9JTlRJTkZP X0hXSU5UUjoKKwljYXNlIFZNX0lOVElORk9fU1dJTlRSOgorCWNhc2UgVk1fSU5USU5GT19OTUk6 CisJCXJldHVybiAoRVhDX0JFTklHTik7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogSGFyZHdhcmUg ZXhjZXB0aW9uLgorCQkgKgorCQkgKiBTVk0gYW5kIFZULXggdXNlIGlkZW50aWNhbCB0eXBlIHZh bHVlcyB0byByZXByZXNlbnQgTk1JLAorCQkgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgYW5kIHNvZnR3 YXJlIGludGVycnVwdC4KKwkJICoKKwkJICogU1ZNIHVzZXMgdHlwZSAnMycgZm9yIGFsbCBleGNl cHRpb25zLiBWVC14IHVzZXMgdHlwZSAnMycKKwkJICogZm9yIGV4Y2VwdGlvbnMgZXhjZXB0ICNC UCBhbmQgI09GLiAjQlAgYW5kICNPRiB1c2UgYSB0eXBlCisJCSAqIHZhbHVlIG9mICc1JyBvciAn NicuIFRoZXJlZm9yZSB3ZSBkb24ndCBjaGVjayBmb3IgZXhwbGljaXQKKwkJICogdmFsdWVzIG9m ICd0eXBlJyB0byBjbGFzc2lmeSAnaW50aW5mbycgaW50byBhIGhhcmR3YXJlCisJCSAqIGV4Y2Vw dGlvbi4KKwkJICovCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodmVjdG9yKSB7CisJY2FzZSBJ RFRfUEY6CisJY2FzZSBJRFRfVkU6CisJCXJldHVybiAoRVhDX1BBR0VGQVVMVCk7CisJY2FzZSBJ RFRfREU6CisJY2FzZSBJRFRfVFM6CisJY2FzZSBJRFRfTlA6CisJY2FzZSBJRFRfU1M6CisJY2Fz ZSBJRFRfR1A6CisJCXJldHVybiAoRVhDX0NPTlRSSUJVVE9SWSk7CisJZGVmYXVsdDoKKwkJcmV0 dXJuIChFWENfQkVOSUdOKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK25lc3RlZF9mYXVsdChzdHJ1 Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbmZvMSwgdWludDY0X3QgaW5mbzIsCisg ICAgdWludDY0X3QgKnJldGluZm8pCit7CisJZW51bSBleGNfY2xhc3MgZXhjMSwgZXhjMjsKKwlp bnQgdHlwZTEsIHZlY3RvcjE7CisKKwlLQVNTRVJUKGluZm8xICYgVk1fSU5USU5GT19WQUxJRCwg KCJpbmZvMSAlI2x4IGlzIG5vdCB2YWxpZCIsIGluZm8xKSk7CisJS0FTU0VSVChpbmZvMiAmIFZN X0lOVElORk9fVkFMSUQsICgiaW5mbzIgJSNseCBpcyBub3QgdmFsaWQiLCBpbmZvMikpOworCisJ LyoKKwkgKiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIHdoaWxlIGF0dGVtcHRpbmcgdG8gY2FsbCB0 aGUgZG91YmxlLWZhdWx0CisJICogaGFuZGxlciB0aGUgcHJvY2Vzc29yIGVudGVycyBzaHV0ZG93 biBtb2RlIChha2EgdHJpcGxlIGZhdWx0KS4KKwkgKi8KKwl0eXBlMSA9IGluZm8xICYgVk1fSU5U SU5GT19UWVBFOworCXZlY3RvcjEgPSBpbmZvMSAmIDB4ZmY7CisJaWYgKHR5cGUxID09IFZNX0lO VElORk9fSFdFWENFUFRJT04gJiYgdmVjdG9yMSA9PSBJRFRfREYpIHsKKwkJVkNQVV9DVFIyKHZt LCB2Y3B1aWQsICJ0cmlwbGUgZmF1bHQ6IGluZm8xKCUjbHgpLCBpbmZvMiglI2x4KSIsCisJCSAg ICBpbmZvMSwgaW5mbzIpOworCQl2bV9zdXNwZW5kKHZtLCBWTV9TVVNQRU5EX1RSSVBMRUZBVUxU KTsKKwkJKnJldGluZm8gPSAwOworCQlyZXR1cm4gKDApOworCX0KKworCS8qCisJICogVGFibGUg Ni01ICJDb25kaXRpb25zIGZvciBHZW5lcmF0aW5nIGEgRG91YmxlIEZhdWx0IiwgSW50ZWwgU0RN LCBWb2wzCisJICovCisJZXhjMSA9IGV4Y2VwdGlvbl9jbGFzcyhpbmZvMSk7CisJZXhjMiA9IGV4 Y2VwdGlvbl9jbGFzcyhpbmZvMik7CisJaWYgKChleGMxID09IEVYQ19DT05UUklCVVRPUlkgJiYg ZXhjMiA9PSBFWENfQ09OVFJJQlVUT1JZKSB8fAorCSAgICAoZXhjMSA9PSBFWENfUEFHRUZBVUxU ICYmIGV4YzIgIT0gRVhDX0JFTklHTikpIHsKKwkJLyogQ29udmVydCBuZXN0ZWQgZmF1bHQgaW50 byBhIGRvdWJsZSBmYXVsdC4gKi8KKwkJKnJldGluZm8gPSBJRFRfREY7CisJCSpyZXRpbmZvIHw9 IFZNX0lOVElORk9fVkFMSUQgfCBWTV9JTlRJTkZPX0hXRVhDRVBUSU9OOworCQkqcmV0aW5mbyB8 PSBWTV9JTlRJTkZPX0RFTF9FUlJDT0RFOworCX0gZWxzZSB7CisJCS8qIEhhbmRsZSBleGNlcHRp b25zIHNlcmlhbGx5ICovCisJCSpyZXRpbmZvID0gaW5mbzI7CisJfQorCXJldHVybiAoMSk7Cit9 CisKK3N0YXRpYyB1aW50NjRfdAordmNwdV9leGNlcHRpb25faW50aW5mbyhzdHJ1Y3QgdmNwdSAq dmNwdSkKK3sKKwl1aW50NjRfdCBpbmZvID0gMDsKKworCWlmICh2Y3B1LT5leGNlcHRpb25fcGVu ZGluZykgeworCQlpbmZvID0gdmNwdS0+ZXhjX3ZlY3RvciAmIDB4ZmY7CisJCWluZm8gfD0gVk1f SU5USU5GT19WQUxJRCB8IFZNX0lOVElORk9fSFdFWENFUFRJT047CisJCWlmICh2Y3B1LT5leGNf ZXJyY29kZV92YWxpZCkgeworCQkJaW5mbyB8PSBWTV9JTlRJTkZPX0RFTF9FUlJDT0RFOworCQkJ aW5mbyB8PSAodWludDY0X3QpdmNwdS0+ZXhjX2VycmNvZGUgPDwgMzI7CisJCX0KKwl9CisJcmV0 dXJuIChpbmZvKTsKK30KKworaW50Cit2bV9lbnRyeV9pbnRpbmZvKHN0cnVjdCB2bSAqdm0sIGlu dCB2Y3B1aWQsIHVpbnQ2NF90ICpyZXRpbmZvKQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1OworCXVp bnQ2NF90IGluZm8xLCBpbmZvMjsKKwlpbnQgdmFsaWQ7CisKKwlLQVNTRVJUKHZjcHVpZCA+PSAw ICYmIHZjcHVpZCA8IFZNX01BWENQVSwgKCJpbnZhbGlkIHZjcHUgJWQiLCB2Y3B1aWQpKTsKKwor CXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCWluZm8xID0gdmNwdS0+ZXhpdGludGluZm87 CisJdmNwdS0+ZXhpdGludGluZm8gPSAwOworCisJaW5mbzIgPSAwOworCWlmICh2Y3B1LT5leGNl cHRpb25fcGVuZGluZykgeworCQlpbmZvMiA9IHZjcHVfZXhjZXB0aW9uX2ludGluZm8odmNwdSk7 CisJCXZjcHUtPmV4Y2VwdGlvbl9wZW5kaW5nID0gMDsKKwkJVkNQVV9DVFIyKHZtLCB2Y3B1aWQs ICJFeGNlcHRpb24gJWQgZGVsaXZlcmVkOiAlI2x4IiwKKwkJICAgIHZjcHUtPmV4Y192ZWN0b3Is IGluZm8yKTsKKwl9CisKKwlpZiAoKGluZm8xICYgVk1fSU5USU5GT19WQUxJRCkgJiYgKGluZm8y ICYgVk1fSU5USU5GT19WQUxJRCkpIHsKKwkJdmFsaWQgPSBuZXN0ZWRfZmF1bHQodm0sIHZjcHVp ZCwgaW5mbzEsIGluZm8yLCByZXRpbmZvKTsKKwl9IGVsc2UgaWYgKGluZm8xICYgVk1fSU5USU5G T19WQUxJRCkgeworCQkqcmV0aW5mbyA9IGluZm8xOworCQl2YWxpZCA9IDE7CisJfSBlbHNlIGlm IChpbmZvMiAmIFZNX0lOVElORk9fVkFMSUQpIHsKKwkJKnJldGluZm8gPSBpbmZvMjsKKwkJdmFs aWQgPSAxOworCX0gZWxzZSB7CisJCXZhbGlkID0gMDsKKwl9CisKKwlpZiAodmFsaWQpIHsKKwkJ VkNQVV9DVFI0KHZtLCB2Y3B1aWQsICIlczogaW5mbzEoJSNseCksIGluZm8yKCUjbHgpLCAiCisJ CSAgICAicmV0aW5mbyglI2x4KSIsIF9fZnVuY19fLCBpbmZvMSwgaW5mbzIsICpyZXRpbmZvKTsK Kwl9CisKKwlyZXR1cm4gKHZhbGlkKTsKK30KKworaW50Cit2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qg dm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCAqaW5mbzEsIHVpbnQ2NF90ICppbmZvMikKK3sK KwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9N QVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsK KwkqaW5mbzEgPSB2Y3B1LT5leGl0aW50aW5mbzsKKwkqaW5mbzIgPSB2Y3B1X2V4Y2VwdGlvbl9p bnRpbmZvKHZjcHUpOworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1faW5qZWN0X2V4Y2VwdGlv bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgdmVjdG9yLCBpbnQgZXJyY29kZV92YWxp ZCwKKyAgICB1aW50MzJfdCBlcnJjb2RlLCBpbnQgcmVzdGFydF9pbnN0cnVjdGlvbikKK3sKKwlz dHJ1Y3QgdmNwdSAqdmNwdTsKKwl1aW50NjRfdCByZWd2YWw7CisJaW50IGVycm9yOworCisJaWYg KHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5WQUwpOwor CisJaWYgKHZlY3RvciA8IDAgfHwgdmVjdG9yID49IDMyKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK KwkvKgorCSAqIEEgZG91YmxlIGZhdWx0IGV4Y2VwdGlvbiBzaG91bGQgbmV2ZXIgYmUgaW5qZWN0 ZWQgZGlyZWN0bHkgaW50bworCSAqIHRoZSBndWVzdC4gSXQgaXMgYSBkZXJpdmVkIGV4Y2VwdGlv biB0aGF0IHJlc3VsdHMgZnJvbSBzcGVjaWZpYworCSAqIGNvbWJpbmF0aW9ucyBvZiBuZXN0ZWQg ZmF1bHRzLgorCSAqLworCWlmICh2ZWN0b3IgPT0gSURUX0RGKQorCQlyZXR1cm4gKEVJTlZBTCk7 CisKKwl2Y3B1ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwlpZiAodmNwdS0+ZXhjZXB0aW9uX3Bl bmRpbmcpIHsKKwkJVkNQVV9DVFIyKHZtLCB2Y3B1aWQsICJVbmFibGUgdG8gaW5qZWN0IGV4Y2Vw dGlvbiAlZCBkdWUgdG8gIgorCQkgICAgInBlbmRpbmcgZXhjZXB0aW9uICVkIiwgdmVjdG9yLCB2 Y3B1LT5leGNfdmVjdG9yKTsKKwkJcmV0dXJuIChFQlVTWSk7CisJfQorCisJaWYgKGVycmNvZGVf dmFsaWQpIHsKKwkJLyoKKwkJICogRXhjZXB0aW9ucyBkb24ndCBkZWxpdmVyIGFuIGVycm9yIGNv ZGUgaW4gcmVhbCBtb2RlLgorCQkgKi8KKwkJZXJyb3IgPSB2bV9nZXRfcmVnaXN0ZXIodm0sIHZj cHVpZCwgVk1fUkVHX0dVRVNUX0NSMCwgJnJlZ3ZhbCk7CisJCUtBU1NFUlQoIWVycm9yLCAoIiVz OiBlcnJvciAlZCBnZXR0aW5nIENSMCIsIF9fZnVuY19fLCBlcnJvcikpOworCQlpZiAoIShyZWd2 YWwgJiBDUjBfUEUpKQorCQkJZXJyY29kZV92YWxpZCA9IDA7CisJfQorCisJLyoKKwkgKiBGcm9t IHNlY3Rpb24gMjYuNi4xICJJbnRlcnJ1cHRpYmlsaXR5IFN0YXRlIiBpbiBJbnRlbCBTRE06CisJ ICoKKwkgKiBFdmVudCBibG9ja2luZyBieSAiU1RJIiBvciAiTU9WIFNTIiBpcyBjbGVhcmVkIGFm dGVyIGd1ZXN0IGV4ZWN1dGVzCisJICogb25lIGluc3RydWN0aW9uIG9yIGluY3VycyBhbiBleGNl cHRpb24uCisJICovCisJZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm0sIHZjcHVpZCwgVk1fUkVH X0dVRVNUX0lOVFJfU0hBRE9XLCAwKTsKKwlLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGVycm9y ICVkIGNsZWFyaW5nIGludGVycnVwdCBzaGFkb3ciLAorCSAgICBfX2Z1bmNfXywgZXJyb3IpKTsK KworCWlmIChyZXN0YXJ0X2luc3RydWN0aW9uKQorCQl2bV9yZXN0YXJ0X2luc3RydWN0aW9uKHZt LCB2Y3B1aWQpOworCisJdmNwdS0+ZXhjZXB0aW9uX3BlbmRpbmcgPSAxOworCXZjcHUtPmV4Y192 ZWN0b3IgPSB2ZWN0b3I7CisJdmNwdS0+ZXhjX2VycmNvZGUgPSBlcnJjb2RlOworCXZjcHUtPmV4 Y19lcnJjb2RlX3ZhbGlkID0gZXJyY29kZV92YWxpZDsKKwlWQ1BVX0NUUjEodm0sIHZjcHVpZCwg IkV4Y2VwdGlvbiAlZCBwZW5kaW5nIiwgdmVjdG9yKTsKKwlyZXR1cm4gKDApOworfQorCit2b2lk Cit2bV9pbmplY3RfZmF1bHQodm9pZCAqdm1hcmcsIGludCB2Y3B1aWQsIGludCB2ZWN0b3IsIGlu dCBlcnJjb2RlX3ZhbGlkLAorICAgIGludCBlcnJjb2RlKQoreworCXN0cnVjdCB2bSAqdm07CisJ aW50IGVycm9yLCByZXN0YXJ0X2luc3RydWN0aW9uOworCisJdm0gPSB2bWFyZzsKKwlyZXN0YXJ0 X2luc3RydWN0aW9uID0gMTsKKworCWVycm9yID0gdm1faW5qZWN0X2V4Y2VwdGlvbih2bSwgdmNw dWlkLCB2ZWN0b3IsIGVycmNvZGVfdmFsaWQsCisJICAgIGVycmNvZGUsIHJlc3RhcnRfaW5zdHJ1 Y3Rpb24pOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCJ2bV9pbmplY3RfZXhjZXB0aW9uIGVycm9y ICVkIiwgZXJyb3IpKTsKK30KKwordm9pZAordm1faW5qZWN0X3BmKHZvaWQgKnZtYXJnLCBpbnQg dmNwdWlkLCBpbnQgZXJyb3JfY29kZSwgdWludDY0X3QgY3IyKQoreworCXN0cnVjdCB2bSAqdm07 CisJaW50IGVycm9yOworCisJdm0gPSB2bWFyZzsKKwlWQ1BVX0NUUjIodm0sIHZjcHVpZCwgIklu amVjdGluZyBwYWdlIGZhdWx0OiBlcnJvcl9jb2RlICUjeCwgY3IyICUjbHgiLAorCSAgICBlcnJv cl9jb2RlLCBjcjIpOworCisJZXJyb3IgPSB2bV9zZXRfcmVnaXN0ZXIodm0sIHZjcHVpZCwgVk1f UkVHX0dVRVNUX0NSMiwgY3IyKTsKKwlLQVNTRVJUKGVycm9yID09IDAsICgidm1fc2V0X3JlZ2lz dGVyKGNyMikgZXJyb3IgJWQiLCBlcnJvcikpOworCisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1 aWQsIElEVF9QRiwgMSwgZXJyb3JfY29kZSk7Cit9CisKK3N0YXRpYyBWTU1fU1RBVChWQ1BVX05N SV9DT1VOVCwgIm51bWJlciBvZiBOTUlzIGRlbGl2ZXJlZCB0byB2Y3B1Iik7CisKK2ludAordm1f aW5qZWN0X25taShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCXN0cnVjdCB2Y3B1ICp2 Y3B1OworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJu IChFSU5WQUwpOworCisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCisJdmNwdS0+bm1pX3Bl bmRpbmcgPSAxOworCXZjcHVfbm90aWZ5X2V2ZW50KHZtLCB2Y3B1aWQsIGZhbHNlKTsKKwlyZXR1 cm4gKDApOworfQorCitpbnQKK3ZtX25taV9wZW5kaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1 aWQpCit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQg Pj0gVk1fTUFYQ1BVKQorCQlwYW5pYygidm1fbm1pX3BlbmRpbmc6IGludmFsaWQgdmNwdWlkICVk IiwgdmNwdWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCXJldHVybiAodmNw dS0+bm1pX3BlbmRpbmcpOworfQorCit2b2lkCit2bV9ubWlfY2xlYXIoc3RydWN0IHZtICp2bSwg aW50IHZjcHVpZCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8 IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXBhbmljKCJ2bV9ubWlfcGVuZGluZzogaW52YWxpZCB2 Y3B1aWQgJWQiLCB2Y3B1aWQpOworCisJdmNwdSA9ICZ2bS0+dmNwdVt2Y3B1aWRdOworCisJaWYg KHZjcHUtPm5taV9wZW5kaW5nID09IDApCisJCXBhbmljKCJ2bV9ubWlfY2xlYXI6IGluY29uc2lz dGVudCBubWlfcGVuZGluZyBzdGF0ZSIpOworCisJdmNwdS0+bm1pX3BlbmRpbmcgPSAwOworCXZt bV9zdGF0X2luY3Iodm0sIHZjcHVpZCwgVkNQVV9OTUlfQ09VTlQsIDEpOworfQorCitzdGF0aWMg Vk1NX1NUQVQoVkNQVV9FWFRJTlRfQ09VTlQsICJudW1iZXIgb2YgRXh0SU5UcyBkZWxpdmVyZWQg dG8gdmNwdSIpOworCitpbnQKK3ZtX2luamVjdF9leHRpbnQoc3RydWN0IHZtICp2bSwgaW50IHZj cHVpZCkKK3sKKwlzdHJ1Y3QgdmNwdSAqdmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVp ZCA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXZjcHUgPSAmdm0tPnZjcHVb dmNwdWlkXTsKKworCXZjcHUtPmV4dGludF9wZW5kaW5nID0gMTsKKwl2Y3B1X25vdGlmeV9ldmVu dCh2bSwgdmNwdWlkLCBmYWxzZSk7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit2bV9leHRpbnRf cGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCXN0cnVjdCB2Y3B1ICp2Y3B1 OworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZt X2V4dGludF9wZW5kaW5nOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCk7CisKKwl2Y3B1ID0g JnZtLT52Y3B1W3ZjcHVpZF07CisKKwlyZXR1cm4gKHZjcHUtPmV4dGludF9wZW5kaW5nKTsKK30K Kwordm9pZAordm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpCit7CisJ c3RydWN0IHZjcHUgKnZjcHU7CisKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFY Q1BVKQorCQlwYW5pYygidm1fZXh0aW50X3BlbmRpbmc6IGludmFsaWQgdmNwdWlkICVkIiwgdmNw dWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCWlmICh2Y3B1LT5leHRpbnRf cGVuZGluZyA9PSAwKQorCQlwYW5pYygidm1fZXh0aW50X2NsZWFyOiBpbmNvbnNpc3RlbnQgZXh0 aW50X3BlbmRpbmcgc3RhdGUiKTsKKworCXZjcHUtPmV4dGludF9wZW5kaW5nID0gMDsKKwl2bW1f c3RhdF9pbmNyKHZtLCB2Y3B1aWQsIFZDUFVfRVhUSU5UX0NPVU5ULCAxKTsKK30KKworaW50Cit2 bV9nZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHR5cGUsIGludCAq cmV0dmFsKQoreworCWlmICh2Y3B1IDwgMCB8fCB2Y3B1ID49IFZNX01BWENQVSkKKwkJcmV0dXJu IChFSU5WQUwpOworCisJaWYgKHR5cGUgPCAwIHx8IHR5cGUgPj0gVk1fQ0FQX01BWCkKKwkJcmV0 dXJuIChFSU5WQUwpOworCisJcmV0dXJuIChWTUdFVENBUCh2bS0+Y29va2llLCB2Y3B1LCB0eXBl LCByZXR2YWwpKTsKK30KKworaW50Cit2bV9zZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBp bnQgdmNwdSwgaW50IHR5cGUsIGludCB2YWwpCit7CisJaWYgKHZjcHUgPCAwIHx8IHZjcHUgPj0g Vk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAodHlwZSA8IDAgfHwgdHlwZSA+ PSBWTV9DQVBfTUFYKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKFZNU0VUQ0FQKHZt LT5jb29raWUsIHZjcHUsIHR5cGUsIHZhbCkpOworfQorCitzdHJ1Y3QgdmxhcGljICoKK3ZtX2xh cGljKHN0cnVjdCB2bSAqdm0sIGludCBjcHUpCit7CisJcmV0dXJuICh2bS0+dmNwdVtjcHVdLnZs YXBpYyk7Cit9CisKK3N0cnVjdCB2aW9hcGljICoKK3ZtX2lvYXBpYyhzdHJ1Y3Qgdm0gKnZtKQor eworCisJcmV0dXJuICh2bS0+dmlvYXBpYyk7Cit9CisKK3N0cnVjdCB2aHBldCAqCit2bV9ocGV0 KHN0cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4gKHZtLT52aHBldCk7Cit9CisKK2Jvb2xlYW5f dAordm1tX2lzX3BwdGRldihpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMpCit7CisJaW50IGZv dW5kLCBpLCBuOworCWludCBiLCBzLCBmOworCWNoYXIgKnZhbCwgKmNwLCAqY3AyOworCisJLyoK KwkgKiBYWFgKKwkgKiBUaGUgbGVuZ3RoIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGxp bWl0ZWQgdG8gMTI4IGJ5dGVzIHdoaWNoCisJICogcHV0cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUg bnVtYmVyIG9mIHBhc3N0aHJ1IGRldmljZXMgdGhhdCBtYXkgYmUKKwkgKiBzcGVjaWZpZWQgdXNp bmcgYSBzaW5nbGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJICoKKwkgKiBXb3JrIGFyb3VuZCB0 aGlzIGJ5IHNjYW5uaW5nIG11bHRpcGxlIGVudmlyb25tZW50IHZhcmlhYmxlCisJICogbmFtZXMg aW5zdGVhZCBvZiBhIHNpbmdsZSBvbmUgLSB5dWNrIQorCSAqLworCWNvbnN0IGNoYXIgKm5hbWVz W10gPSB7ICJwcHRkZXZzIiwgInBwdGRldnMyIiwgInBwdGRldnMzIiwgTlVMTCB9OworCisJLyog c2V0IHBwdGRldnM9IjEvMi8zIDQvNS82IDcvOC85IDEwLzExLzEyIiAqLworCWZvdW5kID0gMDsK Kwlmb3IgKGkgPSAwOyBuYW1lc1tpXSAhPSBOVUxMICYmICFmb3VuZDsgaSsrKSB7CisJCWNwID0g dmFsID0ga2Vybl9nZXRlbnYobmFtZXNbaV0pOworCQl3aGlsZSAoY3AgIT0gTlVMTCAmJiAqY3Ag IT0gJ1wwJykgeworCQkJaWYgKChjcDIgPSBzdHJjaHIoY3AsICcgJykpICE9IE5VTEwpCisJCQkJ KmNwMiA9ICdcMCc7CisKKwkJCW4gPSBzc2NhbmYoY3AsICIlZC8lZC8lZCIsICZiLCAmcywgJmYp OworCQkJaWYgKG4gPT0gMyAmJiBidXMgPT0gYiAmJiBzbG90ID09IHMgJiYgZnVuYyA9PSBmKSB7 CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkKKwkJCWlmIChjcDIgIT0gTlVM TCkKKwkJCQkqY3AyKysgPSAnICc7CisKKwkJCWNwID0gY3AyOworCQl9CisJCWZyZWVlbnYodmFs KTsKKwl9CisJcmV0dXJuIChmb3VuZCk7Cit9CisKK3ZvaWQgKgordm1faW9tbXVfZG9tYWluKHN0 cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4gKHZtLT5pb21tdSk7Cit9CisKK2ludAordmNwdV9z ZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgZW51bSB2Y3B1X3N0YXRlIG5ld3N0 YXRlLAorICAgIGJvb2wgZnJvbV9pZGxlKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdmNwdSAq dmNwdTsKKworCWlmICh2Y3B1aWQgPCAwIHx8IHZjcHVpZCA+PSBWTV9NQVhDUFUpCisJCXBhbmlj KCJ2bV9zZXRfcnVuX3N0YXRlOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCk7CisKKwl2Y3B1 ID0gJnZtLT52Y3B1W3ZjcHVpZF07CisKKwl2Y3B1X2xvY2sodmNwdSk7CisJZXJyb3IgPSB2Y3B1 X3NldF9zdGF0ZV9sb2NrZWQodm0sIHZjcHVpZCwgbmV3c3RhdGUsIGZyb21faWRsZSk7CisJdmNw dV91bmxvY2sodmNwdSk7CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworZW51bSB2Y3B1X3N0YXRl Cit2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBpbnQgKmhvc3RjcHUp Cit7CisJc3RydWN0IHZjcHUgKnZjcHU7CisJZW51bSB2Y3B1X3N0YXRlIHN0YXRlOworCisJaWYg KHZjcHVpZCA8IDAgfHwgdmNwdWlkID49IFZNX01BWENQVSkKKwkJcGFuaWMoInZtX2dldF9ydW5f c3RhdGU6IGludmFsaWQgdmNwdWlkICVkIiwgdmNwdWlkKTsKKworCXZjcHUgPSAmdm0tPnZjcHVb dmNwdWlkXTsKKworCXZjcHVfbG9jayh2Y3B1KTsKKwlzdGF0ZSA9IHZjcHUtPnN0YXRlOworCWlm IChob3N0Y3B1ICE9IE5VTEwpCisJCSpob3N0Y3B1ID0gdmNwdS0+aG9zdGNwdTsKKwl2Y3B1X3Vu bG9jayh2Y3B1KTsKKworCXJldHVybiAoc3RhdGUpOworfQorCitpbnQKK3ZtX2FjdGl2YXRlX2Nw dShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKQoreworCisJaWYgKHZjcHVpZCA8IDAgfHwgdmNw dWlkID49IFZNX01BWENQVSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJaWYgKENQVV9JU1NFVCh2 Y3B1aWQsICZ2bS0+YWN0aXZlX2NwdXMpKQorCQlyZXR1cm4gKEVCVVNZKTsKKworCVZDUFVfQ1RS MCh2bSwgdmNwdWlkLCAiYWN0aXZhdGVkIik7CisJQ1BVX1NFVF9BVE9NSUModmNwdWlkLCAmdm0t PmFjdGl2ZV9jcHVzKTsKKwlyZXR1cm4gKDApOworfQorCitjcHVzZXRfdAordm1fYWN0aXZlX2Nw dXMoc3RydWN0IHZtICp2bSkKK3sKKworCXJldHVybiAodm0tPmFjdGl2ZV9jcHVzKTsKK30KKwor Y3B1c2V0X3QKK3ZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bSAqdm0pCit7CisKKwlyZXR1cm4g KHZtLT5zdXNwZW5kZWRfY3B1cyk7Cit9CisKK3ZvaWQgKgordmNwdV9zdGF0cyhzdHJ1Y3Qgdm0g KnZtLCBpbnQgdmNwdWlkKQoreworCisJcmV0dXJuICh2bS0+dmNwdVt2Y3B1aWRdLnN0YXRzKTsK K30KKworaW50Cit2bV9nZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQs IGVudW0geDJhcGljX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQg Pj0gVk1fTUFYQ1BVKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwkqc3RhdGUgPSB2bS0+dmNwdVt2 Y3B1aWRdLngyYXBpY19zdGF0ZTsKKworCXJldHVybiAoMCk7Cit9CisKK2ludAordm1fc2V0X3gy YXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBlbnVtIHgyYXBpY19zdGF0ZSBz dGF0ZSkKK3sKKwlpZiAodmNwdWlkIDwgMCB8fCB2Y3B1aWQgPj0gVk1fTUFYQ1BVKQorCQlyZXR1 cm4gKEVJTlZBTCk7CisKKwlpZiAoc3RhdGUgPj0gWDJBUElDX1NUQVRFX0xBU1QpCisJCXJldHVy biAoRUlOVkFMKTsKKworCXZtLT52Y3B1W3ZjcHVpZF0ueDJhcGljX3N0YXRlID0gc3RhdGU7CisK Kwl2bGFwaWNfc2V0X3gyYXBpY19zdGF0ZSh2bSwgdmNwdWlkLCBzdGF0ZSk7CisKKwlyZXR1cm4g KDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZW5zdXJlIHRoYXQg YSB2Y3B1ICJzZWVzIiBhIHBlbmRpbmcgZXZlbnQKKyAqIGFzIHNvb24gYXMgcG9zc2libGU6Cisg KiAtIElmIHRoZSB2Y3B1IHRocmVhZCBpcyBzbGVlcGluZyB0aGVuIGl0IGlzIHdva2VuIHVwLgor ICogLSBJZiB0aGUgdmNwdSBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGhvc3RfY3B1IHRoZW4g YW4gSVBJIHdpbGwgYmUgZGlyZWN0ZWQKKyAqICAgdG8gdGhlIGhvc3RfY3B1IHRvIGNhdXNlIHRo ZSB2Y3B1IHRvIHRyYXAgaW50byB0aGUgaHlwZXJ2aXNvci4KKyAqLworc3RhdGljIHZvaWQKK3Zj cHVfbm90aWZ5X2V2ZW50X2xvY2tlZChzdHJ1Y3QgdmNwdSAqdmNwdSwgYm9vbCBsYXBpY19pbnRy KQoreworCWludCBob3N0Y3B1OworCisJaG9zdGNwdSA9IHZjcHUtPmhvc3RjcHU7CisJaWYgKHZj cHUtPnN0YXRlID09IFZDUFVfUlVOTklORykgeworCQlLQVNTRVJUKGhvc3RjcHUgIT0gTk9DUFUs ICgidmNwdSBydW5uaW5nIG9uIGludmFsaWQgaG9zdGNwdSIpKTsKKwkJaWYgKGhvc3RjcHUgIT0g Y3VyY3B1KSB7CisJCQlpZiAobGFwaWNfaW50cikgeworCQkJCXZsYXBpY19wb3N0X2ludHIodmNw dS0+dmxhcGljLCBob3N0Y3B1LAorCQkJCSAgICB2bW1faXBpbnVtKTsKKwkJCX0gZWxzZSB7CisJ CQkJaXBpX2NwdShob3N0Y3B1LCB2bW1faXBpbnVtKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8q CisJCQkgKiBJZiB0aGUgJ3ZjcHUnIGlzIHJ1bm5pbmcgb24gJ2N1cmNwdScgdGhlbiBpdCBtdXN0 CisJCQkgKiBiZSBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIHRvIGl0c2VsZiAoZS5nLiBTRUxGX0lQ SSkuCisJCQkgKiBUaGUgcGVuZGluZyBldmVudCB3aWxsIGJlIHBpY2tlZCB1cCB3aGVuIHRoZSB2 Y3B1CisJCQkgKiB0cmFuc2l0aW9ucyBiYWNrIHRvIGd1ZXN0IGNvbnRleHQuCisJCQkgKi8KKwkJ fQorCX0gZWxzZSB7CisJCUtBU1NFUlQoaG9zdGNwdSA9PSBOT0NQVSwgKCJ2Y3B1IHN0YXRlICVk IG5vdCBjb25zaXN0ZW50ICIKKwkJICAgICJ3aXRoIGhvc3RjcHUgJWQiLCB2Y3B1LT5zdGF0ZSwg aG9zdGNwdSkpOworCQlpZiAodmNwdS0+c3RhdGUgPT0gVkNQVV9TTEVFUElORykKKwkJCXdha2V1 cF9vbmUodmNwdSk7CisJfQorfQorCit2b2lkCit2Y3B1X25vdGlmeV9ldmVudChzdHJ1Y3Qgdm0g KnZtLCBpbnQgdmNwdWlkLCBib29sIGxhcGljX2ludHIpCit7CisJc3RydWN0IHZjcHUgKnZjcHUg PSAmdm0tPnZjcHVbdmNwdWlkXTsKKworCXZjcHVfbG9jayh2Y3B1KTsKKwl2Y3B1X25vdGlmeV9l dmVudF9sb2NrZWQodmNwdSwgbGFwaWNfaW50cik7CisJdmNwdV91bmxvY2sodmNwdSk7Cit9CisK K3N0cnVjdCB2bXNwYWNlICoKK3ZtX2dldF92bXNwYWNlKHN0cnVjdCB2bSAqdm0pCit7CisKKwly ZXR1cm4gKHZtLT52bXNwYWNlKTsKK30KKworaW50Cit2bV9hcGljaWQydmNwdWlkKHN0cnVjdCB2 bSAqdm0sIGludCBhcGljaWQpCit7CisJLyoKKwkgKiBYWFggYXBpYyBpZCBpcyBhc3N1bWVkIHRv IGJlIG51bWVyaWNhbGx5IGlkZW50aWNhbCB0byB2Y3B1IGlkCisJICovCisJcmV0dXJuIChhcGlj aWQpOworfQorCit2b2lkCit2bV9zbXBfcmVuZGV6dm91cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw dWlkLCBjcHVzZXRfdCBkZXN0LAorICAgIHZtX3JlbmRlenZvdXNfZnVuY190IGZ1bmMsIHZvaWQg KmFyZykKK3sKKwlpbnQgaTsKKworCS8qCisJICogRW5mb3JjZSB0aGF0IHRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzCisJICovCisJV0lUTkVTU19XQVJOKFdBUk5fUEFO SUMsIE5VTEwsICJ2bV9zbXBfcmVuZGV6dm91cyIpOworCUtBU1NFUlQodmNwdWlkID09IC0xIHx8 ICh2Y3B1aWQgPj0gMCAmJiB2Y3B1aWQgPCBWTV9NQVhDUFUpLAorCSAgICAoInZtX3NtcF9yZW5k ZXp2b3VzOiBpbnZhbGlkIHZjcHVpZCAlZCIsIHZjcHVpZCkpOworCityZXN0YXJ0OgorCW10eF9s b2NrKCZ2bS0+cmVuZGV6dm91c19tdHgpOworCWlmICh2bS0+cmVuZGV6dm91c19mdW5jICE9IE5V TEwpIHsKKwkJLyoKKwkJICogSWYgYSByZW5kZXp2b3VzIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3Mg dGhlbiB3ZSBuZWVkIHRvCisJCSAqIGNhbGwgdGhlIHJlbmRlenZvdXMgaGFuZGxlciBpbiBjYXNl IHRoaXMgJ3ZjcHVpZCcgaXMgb25lCisJCSAqIG9mIHRoZSB0YXJnZXRzIG9mIHRoZSByZW5kZXp2 b3VzLgorCQkgKi8KKwkJUkVOREVaVk9VU19DVFIwKHZtLCB2Y3B1aWQsICJSZW5kZXp2b3VzIGFs cmVhZHkgaW4gcHJvZ3Jlc3MiKTsKKwkJbXR4X3VubG9jaygmdm0tPnJlbmRlenZvdXNfbXR4KTsK KwkJdm1faGFuZGxlX3JlbmRlenZvdXModm0sIHZjcHVpZCk7CisJCWdvdG8gcmVzdGFydDsKKwl9 CisJS0FTU0VSVCh2bS0+cmVuZGV6dm91c19mdW5jID09IE5VTEwsICgidm1fc21wX3JlbmRlenZv dXM6IHByZXZpb3VzICIKKwkgICAgInJlbmRlenZvdXMgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MiKSk7 CisKKwlSRU5ERVpWT1VTX0NUUjAodm0sIHZjcHVpZCwgIkluaXRpYXRpbmcgcmVuZGV6dm91cyIp OworCXZtLT5yZW5kZXp2b3VzX3JlcV9jcHVzID0gZGVzdDsKKwlDUFVfWkVSTygmdm0tPnJlbmRl enZvdXNfZG9uZV9jcHVzKTsKKwl2bS0+cmVuZGV6dm91c19hcmcgPSBhcmc7CisJdm1fc2V0X3Jl bmRlenZvdXNfZnVuYyh2bSwgZnVuYyk7CisJbXR4X3VubG9jaygmdm0tPnJlbmRlenZvdXNfbXR4 KTsKKworCS8qCisJICogV2FrZSB1cCBhbnkgc2xlZXBpbmcgdmNwdXMgYW5kIHRyaWdnZXIgYSBW TS1leGl0IGluIGFueSBydW5uaW5nCisJICogdmNwdXMgc28gdGhleSBoYW5kbGUgdGhlIHJlbmRl enZvdXMgYXMgc29vbiBhcyBwb3NzaWJsZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVk1fTUFY Q1BVOyBpKyspIHsKKwkJaWYgKENQVV9JU1NFVChpLCAmZGVzdCkpCisJCQl2Y3B1X25vdGlmeV9l dmVudCh2bSwgaSwgZmFsc2UpOworCX0KKworCXZtX2hhbmRsZV9yZW5kZXp2b3VzKHZtLCB2Y3B1 aWQpOworfQorCitzdHJ1Y3QgdmF0cGljICoKK3ZtX2F0cGljKHN0cnVjdCB2bSAqdm0pCit7CisJ cmV0dXJuICh2bS0+dmF0cGljKTsKK30KKworc3RydWN0IHZhdHBpdCAqCit2bV9hdHBpdChzdHJ1 Y3Qgdm0gKnZtKQoreworCXJldHVybiAodm0tPnZhdHBpdCk7Cit9CisKK3N0cnVjdCB2cG10bXIg Kgordm1fcG10bXIoc3RydWN0IHZtICp2bSkKK3sKKworCXJldHVybiAodm0tPnZwbXRtcik7Cit9 CisKK3N0cnVjdCB2cnRjICoKK3ZtX3J0YyhzdHJ1Y3Qgdm0gKnZtKQoreworCisJcmV0dXJuICh2 bS0+dnJ0Yyk7Cit9CisKK2VudW0gdm1fcmVnX25hbWUKK3ZtX3NlZ21lbnRfbmFtZShpbnQgc2Vn KQoreworCXN0YXRpYyBlbnVtIHZtX3JlZ19uYW1lIHNlZ19uYW1lc1tdID0geworCQlWTV9SRUdf R1VFU1RfRVMsCisJCVZNX1JFR19HVUVTVF9DUywKKwkJVk1fUkVHX0dVRVNUX1NTLAorCQlWTV9S RUdfR1VFU1RfRFMsCisJCVZNX1JFR19HVUVTVF9GUywKKwkJVk1fUkVHX0dVRVNUX0dTCisJfTsK KworCUtBU1NFUlQoc2VnID49IDAgJiYgc2VnIDwgbml0ZW1zKHNlZ19uYW1lcyksCisJICAgICgi JXM6IGludmFsaWQgc2VnbWVudCBlbmNvZGluZyAlZCIsIF9fZnVuY19fLCBzZWcpKTsKKwlyZXR1 cm4gKHNlZ19uYW1lc1tzZWddKTsKK30KKwordm9pZAordm1fY29weV90ZWFyZG93bihzdHJ1Y3Qg dm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGlu dCBudW1fY29weWluZm8pCit7CisJaW50IGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnVt X2NvcHlpbmZvOyBpZHgrKykgeworCQlpZiAoY29weWluZm9baWR4XS5jb29raWUgIT0gTlVMTCkK KwkJCXZtX2dwYV9yZWxlYXNlKGNvcHlpbmZvW2lkeF0uY29va2llKTsKKwl9CisJYnplcm8oY29w eWluZm8sIG51bV9jb3B5aW5mbyAqIHNpemVvZihzdHJ1Y3Qgdm1fY29weWluZm8pKTsKK30KKwor aW50Cit2bV9jb3B5X3NldHVwKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9n dWVzdF9wYWdpbmcgKnBhZ2luZywKKyAgICB1aW50NjRfdCBnbGEsIHNpemVfdCBsZW4sIGludCBw cm90LCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZvLAorICAgIGludCBudW1fY29weWluZm8s IGludCAqZmF1bHQpCit7CisJaW50IGVycm9yLCBpZHgsIG51c2VkOworCXNpemVfdCBuLCBvZmYs IHJlbWFpbmluZzsKKwl2b2lkICpodmEsICpjb29raWU7CisJdWludDY0X3QgZ3BhOworCisJYnpl cm8oY29weWluZm8sIHNpemVvZihzdHJ1Y3Qgdm1fY29weWluZm8pICogbnVtX2NvcHlpbmZvKTsK KworCW51c2VkID0gMDsKKwlyZW1haW5pbmcgPSBsZW47CisJd2hpbGUgKHJlbWFpbmluZyA+IDAp IHsKKwkJS0FTU0VSVChudXNlZCA8IG51bV9jb3B5aW5mbywgKCJpbnN1ZmZpY2llbnQgdm1fY29w eWluZm8iKSk7CisJCWVycm9yID0gdm1fZ2xhMmdwYSh2bSwgdmNwdWlkLCBwYWdpbmcsIGdsYSwg cHJvdCwgJmdwYSwgZmF1bHQpOworCQlpZiAoZXJyb3IgfHwgKmZhdWx0KQorCQkJcmV0dXJuIChl cnJvcik7CisJCW9mZiA9IGdwYSAmIFBBR0VfTUFTSzsKKwkJbiA9IG1pbihyZW1haW5pbmcsIFBB R0VfU0laRSAtIG9mZik7CisJCWNvcHlpbmZvW251c2VkXS5ncGEgPSBncGE7CisJCWNvcHlpbmZv W251c2VkXS5sZW4gPSBuOworCQlyZW1haW5pbmcgLT0gbjsKKwkJZ2xhICs9IG47CisJCW51c2Vk Kys7CisJfQorCisJZm9yIChpZHggPSAwOyBpZHggPCBudXNlZDsgaWR4KyspIHsKKwkJaHZhID0g dm1fZ3BhX2hvbGQodm0sIHZjcHVpZCwgY29weWluZm9baWR4XS5ncGEsCisJCSAgICBjb3B5aW5m b1tpZHhdLmxlbiwgcHJvdCwgJmNvb2tpZSk7CisJCWlmIChodmEgPT0gTlVMTCkKKwkJCWJyZWFr OworCQljb3B5aW5mb1tpZHhdLmh2YSA9IGh2YTsKKwkJY29weWluZm9baWR4XS5jb29raWUgPSBj b29raWU7CisJfQorCisJaWYgKGlkeCAhPSBudXNlZCkgeworCQl2bV9jb3B5X3RlYXJkb3duKHZt LCB2Y3B1aWQsIGNvcHlpbmZvLCBudW1fY29weWluZm8pOworCQlyZXR1cm4gKEVGQVVMVCk7CisJ fSBlbHNlIHsKKwkJKmZhdWx0ID0gMDsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3ZvaWQKK3Zt X2NvcHlpbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNv cHlpbmZvLCB2b2lkICprYWRkciwKKyAgICBzaXplX3QgbGVuKQoreworCWNoYXIgKmRzdDsKKwlp bnQgaWR4OworCQorCWRzdCA9IGthZGRyOworCWlkeCA9IDA7CisJd2hpbGUgKGxlbiA+IDApIHsK KwkJYmNvcHkoY29weWluZm9baWR4XS5odmEsIGRzdCwgY29weWluZm9baWR4XS5sZW4pOworCQls ZW4gLT0gY29weWluZm9baWR4XS5sZW47CisJCWRzdCArPSBjb3B5aW5mb1tpZHhdLmxlbjsKKwkJ aWR4Kys7CisJfQorfQorCit2b2lkCit2bV9jb3B5b3V0KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1 aWQsIGNvbnN0IHZvaWQgKmthZGRyLAorICAgIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29weWluZm8s IHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqc3JjOworCWludCBpZHg7CisKKwlzcmMgPSBr YWRkcjsKKwlpZHggPSAwOworCXdoaWxlIChsZW4gPiAwKSB7CisJCWJjb3B5KHNyYywgY29weWlu Zm9baWR4XS5odmEsIGNvcHlpbmZvW2lkeF0ubGVuKTsKKwkJbGVuIC09IGNvcHlpbmZvW2lkeF0u bGVuOworCQlzcmMgKz0gY29weWluZm9baWR4XS5sZW47CisJCWlkeCsrOworCX0KK30KKworLyoK KyAqIFJldHVybiB0aGUgYW1vdW50IG9mIGluLXVzZSBhbmQgd2lyZWQgbWVtb3J5IGZvciB0aGUg Vk0uIFNpbmNlCisgKiB0aGVzZSBhcmUgZ2xvYmFsIHN0YXRzLCBvbmx5IHJldHVybiB0aGUgdmFs dWVzIHdpdGggZm9yIHZDUFUgMAorICovCitWTU1fU1RBVF9ERUNMQVJFKFZNTV9NRU1fUkVTSURF TlQpOworVk1NX1NUQVRfREVDTEFSRShWTU1fTUVNX1dJUkVEKTsKKworc3RhdGljIHZvaWQKK3Zt X2dldF9yZXNjbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIHN0cnVjdCB2bW1fc3RhdF90eXBl ICpzdGF0KQoreworCisJaWYgKHZjcHUgPT0gMCkgeworCQl2bW1fc3RhdF9zZXQodm0sIHZjcHUs IFZNTV9NRU1fUkVTSURFTlQsCisJICAgICAgIAkgICAgUEFHRV9TSVpFICogdm1zcGFjZV9yZXNp ZGVudF9jb3VudCh2bS0+dm1zcGFjZSkpOworCX0JCit9CisKK3N0YXRpYyB2b2lkCit2bV9nZXRf d2lyZWRjbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIHN0cnVjdCB2bW1fc3RhdF90eXBlICpz dGF0KQoreworCisJaWYgKHZjcHUgPT0gMCkgeworCQl2bW1fc3RhdF9zZXQodm0sIHZjcHUsIFZN TV9NRU1fV0lSRUQsCisJICAgICAgCSAgICBQQUdFX1NJWkUgKiBwbWFwX3dpcmVkX2NvdW50KHZt c3BhY2VfcG1hcCh2bS0+dm1zcGFjZSkpKTsKKwl9CQorfQorCitWTU1fU1RBVF9GVU5DKFZNTV9N RU1fUkVTSURFTlQsICJSZXNpZGVudCBtZW1vcnkiLCB2bV9nZXRfcmVzY250KTsKK1ZNTV9TVEFU X0ZVTkMoVk1NX01FTV9XSVJFRCwgIldpcmVkIG1lbW9yeSIsIHZtX2dldF93aXJlZGNudCk7CmRp ZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYyAvdXNyL3NyYy9zeXMv YW1kNjQvdm1tL3ZtbV9kZXYuYwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYwky MDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0 L3ZtbS92bW1fZGV2LmMJMjAxNi0xMS0zMCAxMDo1NjowNS43OTI3NDUwMDAgKzAwMDAKQEAgLTU1 LDYgKzU1LDcgQEAKICNpbmNsdWRlICJ2bW1fbGFwaWMuaCIKICNpbmNsdWRlICJ2bW1fc3RhdC5o IgogI2luY2x1ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1faW9wb3J0LmgiCiAjaW5jbHVk ZSAiaW8vcHB0LmgiCiAjaW5jbHVkZSAiaW8vdmF0cGljLmgiCiAjaW5jbHVkZSAiaW8vdmlvYXBp Yy5oIgpAQCAtMzAwLDYgKzMwMSw4IEBACiAJc3RydWN0IHZtX3BwdGRldl9tbWlvICpwcHRtbWlv OwogCXN0cnVjdCB2bV9wcHRkZXZfbXNpICpwcHRtc2k7CiAJc3RydWN0IHZtX3BwdGRldl9tc2l4 ICpwcHRtc2l4OworCXN0cnVjdCB2bV91c2VyX2J1ZiAqdXNlcm1lbTsKKwlzdHJ1Y3Qgdm1faW9f cmVnX2hhbmRsZXIgKmlvcmVnaDsKIAlzdHJ1Y3Qgdm1fbm1pICp2bW5taTsKIAlzdHJ1Y3Qgdm1f c3RhdHMgKnZtc3RhdHM7CiAJc3RydWN0IHZtX3N0YXRfZGVzYyAqc3RhdGRlc2M7CkBAIC0zNTgs NiArMzYxLDcgQEAKIAljYXNlIFZNX1VOQklORF9QUFRERVY6CiAJY2FzZSBWTV9BTExPQ19NRU1T RUc6CiAJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwljYXNlIFZNX01BUF9VU0VSX0JVRjoKIAljYXNl IFZNX1JFSU5JVDoKIAkJLyoKIAkJICogaW9jdGxzIHRoYXQgb3BlcmF0ZSBvbiB0aGUgZW50aXJl IHZpcnR1YWwgbWFjaGluZSBtdXN0CkBAIC00MzMsNiArNDM3LDE2IEBACiAJCQkJICAgICBwcHRt bWlvLT5mdW5jLCBwcHRtbWlvLT5ncGEsIHBwdG1taW8tPmxlbiwKIAkJCQkgICAgIHBwdG1taW8t PmhwYSk7CiAJCWJyZWFrOworCWNhc2UgVk1fTUFQX1VTRVJfQlVGOgorCQl1c2VybWVtID0gKHN0 cnVjdCB2bV91c2VyX2J1ZiAqKWRhdGE7CisJCWVycm9yID0gdm1fbWFwX3VzZXJtZW0oc2MtPnZt LCB1c2VybWVtLT5ncGEsIHVzZXJtZW0tPmxlbiwKKwkJCQkJdXNlcm1lbS0+YWRkciwgdGQpOwor CQlicmVhazsKKwljYXNlIFZNX0lPX1JFR19IQU5ETEVSOgorCQlpb3JlZ2ggPSAoc3RydWN0IHZt X2lvX3JlZ19oYW5kbGVyICopZGF0YTsKKwkJZXJyb3IgPSB2bW1faW9wb3J0X3JlZ19oYW5kbGVy KHNjLT52bSwgaW9yZWdoLT5wb3J0LCBpb3JlZ2gtPmluLCBpb3JlZ2gtPm1hc2tfZGF0YSwKKwkJ CQkJaW9yZWdoLT5kYXRhLCBpb3JlZ2gtPnR5cGUsIGlvcmVnaC0+YXJnKTsKKwkJYnJlYWs7CiAJ Y2FzZSBWTV9CSU5EX1BQVERFVjoKIAkJcHB0ZGV2ID0gKHN0cnVjdCB2bV9wcHRkZXYgKilkYXRh OwogCQllcnJvciA9IHZtX2Fzc2lnbl9wcHRkZXYoc2MtPnZtLCBwcHRkZXYtPmJ1cywgcHB0ZGV2 LT5zbG90LApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMub3Jp ZyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9kZXYuYy5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9h bWQ2NC92bW0vdm1tX2Rldi5jLm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX2Rldi5jLm9yaWcJMjAxNi0xMS0zMCAx MDo1Mjo1OC40NTkwMTYwMDAgKzAwMDAKQEAgLTAsMCArMSw5ODMgQEAKKy8qLQorICogQ29weXJp Z2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVEFQUCwgSU5DIGBgQVMg SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQLCBJTkMgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n LzExLjAvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMgMjg1MjE4IDIwMTUtMDctMDYgMTk6NDE6NDNa IG5lZWwgJAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJT RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L3ZtbS92bW1fZGV2LmMgMjg1MjE4IDIwMTUtMDctMDYg MTk6NDE6NDNaIG5lZWwgJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8 c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9sb2Nr Lmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2lu Y2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5 cy9saWJrZXJuLmg+CisjaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgorI2luY2x1ZGUgPHN5cy9tbWFu Lmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRl IDx2bS9wbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fbWFwLmg+CisjaW5jbHVkZSA8dm0vdm1fb2Jq ZWN0Lmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL3ZtcGFyYW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5l L3ZtbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvdm1tX2luc3RydWN0aW9uX2VtdWwuaD4KKyNpbmNs dWRlIDxtYWNoaW5lL3ZtbV9kZXYuaD4KKworI2luY2x1ZGUgInZtbV9sYXBpYy5oIgorI2luY2x1 ZGUgInZtbV9zdGF0LmgiCisjaW5jbHVkZSAidm1tX21lbS5oIgorI2luY2x1ZGUgImlvL3BwdC5o IgorI2luY2x1ZGUgImlvL3ZhdHBpYy5oIgorI2luY2x1ZGUgImlvL3Zpb2FwaWMuaCIKKyNpbmNs dWRlICJpby92aHBldC5oIgorI2luY2x1ZGUgImlvL3ZydGMuaCIKKworc3RydWN0IGRldm1lbV9z b2Z0YyB7CisJaW50CXNlZ2lkOworCWNoYXIJKm5hbWU7CisJc3RydWN0IGNkZXYgKmNkZXY7CisJ c3RydWN0IHZtbWRldl9zb2Z0YyAqc2M7CisJU0xJU1RfRU5UUlkoZGV2bWVtX3NvZnRjKSBsaW5r OworfTsKKworc3RydWN0IHZtbWRldl9zb2Z0YyB7CisJc3RydWN0IHZtCSp2bTsJCS8qIHZtIGlu c3RhbmNlIGNvb2tpZSAqLworCXN0cnVjdCBjZGV2CSpjZGV2OworCVNMSVNUX0VOVFJZKHZtbWRl dl9zb2Z0YykgbGluazsKKwlTTElTVF9IRUFEKCwgZGV2bWVtX3NvZnRjKSBkZXZtZW07CisJaW50 CQlmbGFnczsKK307CisjZGVmaW5lCVZTQ19MSU5LRUQJCTB4MDEKKworc3RhdGljIFNMSVNUX0hF QUQoLCB2bW1kZXZfc29mdGMpIGhlYWQ7CisKK3N0YXRpYyBzdHJ1Y3QgbXR4IHZtbWRldl9tdHg7 CisKK3N0YXRpYyBNQUxMT0NfREVGSU5FKE1fVk1NREVWLCAidm1tZGV2IiwgInZtbWRldiIpOwor CitTWVNDVExfREVDTChfaHdfdm1tKTsKKworc3RhdGljIGludCBkZXZtZW1fY3JlYXRlX2NkZXYo Y29uc3QgY2hhciAqdm1uYW1lLCBpbnQgaWQsIGNoYXIgKmRldm1lbSk7CitzdGF0aWMgdm9pZCBk ZXZtZW1fZGVzdHJveSh2b2lkICphcmcpOworCitzdGF0aWMgaW50Cit2Y3B1X2xvY2tfb25lKHN0 cnVjdCB2bW1kZXZfc29mdGMgKnNjLCBpbnQgdmNwdSkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAo dmNwdSA8IDAgfHwgdmNwdSA+PSBWTV9NQVhDUFUpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWVy cm9yID0gdmNwdV9zZXRfc3RhdGUoc2MtPnZtLCB2Y3B1LCBWQ1BVX0ZST1pFTiwgdHJ1ZSk7CisJ cmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit2Y3B1X3VubG9ja19vbmUoc3RydWN0 IHZtbWRldl9zb2Z0YyAqc2MsIGludCB2Y3B1KQoreworCWVudW0gdmNwdV9zdGF0ZSBzdGF0ZTsK KworCXN0YXRlID0gdmNwdV9nZXRfc3RhdGUoc2MtPnZtLCB2Y3B1LCBOVUxMKTsKKwlpZiAoc3Rh dGUgIT0gVkNQVV9GUk9aRU4pIHsKKwkJcGFuaWMoInZjcHUgJXMoJWQpIGhhcyBpbnZhbGlkIHN0 YXRlICVkIiwgdm1fbmFtZShzYy0+dm0pLAorCQkgICAgdmNwdSwgc3RhdGUpOworCX0KKworCXZj cHVfc2V0X3N0YXRlKHNjLT52bSwgdmNwdSwgVkNQVV9JRExFLCBmYWxzZSk7Cit9CisKK3N0YXRp YyBpbnQKK3ZjcHVfbG9ja19hbGwoc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MpCit7CisJaW50IGVy cm9yLCB2Y3B1OworCisJZm9yICh2Y3B1ID0gMDsgdmNwdSA8IFZNX01BWENQVTsgdmNwdSsrKSB7 CisJCWVycm9yID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWJy ZWFrOworCX0KKworCWlmIChlcnJvcikgeworCQl3aGlsZSAoLS12Y3B1ID49IDApCisJCQl2Y3B1 X3VubG9ja19vbmUoc2MsIHZjcHUpOworCX0KKworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0 aWMgdm9pZAordmNwdV91bmxvY2tfYWxsKHN0cnVjdCB2bW1kZXZfc29mdGMgKnNjKQoreworCWlu dCB2Y3B1OworCisJZm9yICh2Y3B1ID0gMDsgdmNwdSA8IFZNX01BWENQVTsgdmNwdSsrKQorCQl2 Y3B1X3VubG9ja19vbmUoc2MsIHZjcHUpOworfQorCitzdGF0aWMgc3RydWN0IHZtbWRldl9zb2Z0 YyAqCit2bW1kZXZfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHZtbWRldl9z b2Z0YyAqc2M7CisKKyNpZmRlZiBub3R5ZXQJLyogWFhYIGtlcm5lbCBpcyBub3QgY29tcGlsZWQg d2l0aCBpbnZhcmlhbnRzICovCisJbXR4X2Fzc2VydCgmdm1tZGV2X210eCwgTUFfT1dORUQpOwor I2VuZGlmCisKKwlTTElTVF9GT1JFQUNIKHNjLCAmaGVhZCwgbGluaykgeworCQlpZiAoc3RyY21w KG5hbWUsIHZtX25hbWUoc2MtPnZtKSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAo c2MpOworfQorCitzdGF0aWMgc3RydWN0IHZtbWRldl9zb2Z0YyAqCit2bW1kZXZfbG9va3VwMihz dHJ1Y3QgY2RldiAqY2RldikKK3sKKworCXJldHVybiAoY2Rldi0+c2lfZHJ2MSk7Cit9CisKK3N0 YXRpYyBpbnQKK3ZtbWRldl9ydyhzdHJ1Y3QgY2RldiAqY2Rldiwgc3RydWN0IHVpbyAqdWlvLCBp bnQgZmxhZ3MpCit7CisJaW50IGVycm9yLCBvZmYsIGMsIHByb3Q7CisJdm1fcGFkZHJfdCBncGE7 CisJdm9pZCAqaHBhLCAqY29va2llOworCXN0cnVjdCB2bW1kZXZfc29mdGMgKnNjOworCisJc2Mg PSB2bW1kZXZfbG9va3VwMihjZGV2KTsKKwlpZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuIChFTlhJ Tyk7CisKKwkvKgorCSAqIEdldCBhIHJlYWQgbG9jayBvbiB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCBi eSBmcmVlemluZyBhbnkgdmNwdS4KKwkgKi8KKwllcnJvciA9IHZjcHVfbG9ja19vbmUoc2MsIFZN X01BWENQVSAtIDEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CisKKwlwcm90ID0g KHVpby0+dWlvX3J3ID09IFVJT19XUklURSA/IFZNX1BST1RfV1JJVEUgOiBWTV9QUk9UX1JFQUQp OworCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDAgJiYgZXJyb3IgPT0gMCkgeworCQlncGEgPSB1 aW8tPnVpb19vZmZzZXQ7CisJCW9mZiA9IGdwYSAmIFBBR0VfTUFTSzsKKwkJYyA9IG1pbih1aW8t PnVpb19yZXNpZCwgUEFHRV9TSVpFIC0gb2ZmKTsKKworCQkvKgorCQkgKiBUaGUgVk0gaGFzIGEg aG9sZSBpbiBpdHMgcGh5c2ljYWwgbWVtb3J5IG1hcC4gSWYgd2Ugd2FudCB0bworCQkgKiB1c2Ug J2RkJyB0byBpbnNwZWN0IG1lbW9yeSBiZXlvbmQgdGhlIGhvbGUgd2UgbmVlZCB0bworCQkgKiBw cm92aWRlIGJvZ3VzIGRhdGEgZm9yIG1lbW9yeSB0aGF0IGxpZXMgaW4gdGhlIGhvbGUuCisJCSAq CisJCSAqIFNpbmNlIHRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgbHNlZWsoMiksIGRkKDEp IHdpbGwKKwkJICogcmVhZCgyKSBibG9ja3Mgb2YgZGF0YSB0byBzaW11bGF0ZSB0aGUgbHNlZWso MikuCisJCSAqLworCQlocGEgPSB2bV9ncGFfaG9sZChzYy0+dm0sIFZNX01BWENQVSAtIDEsIGdw YSwgYywgcHJvdCwgJmNvb2tpZSk7CisJCWlmIChocGEgPT0gTlVMTCkgeworCQkJaWYgKHVpby0+ dWlvX3J3ID09IFVJT19SRUFEKQorCQkJCWVycm9yID0gdWlvbW92ZShfX0RFQ09OU1Qodm9pZCAq LCB6ZXJvX3JlZ2lvbiksCisJCQkJICAgIGMsIHVpbyk7CisJCQllbHNlCisJCQkJZXJyb3IgPSBF RkFVTFQ7CisJCX0gZWxzZSB7CisJCQllcnJvciA9IHVpb21vdmUoaHBhLCBjLCB1aW8pOworCQkJ dm1fZ3BhX3JlbGVhc2UoY29va2llKTsKKwkJfQorCX0KKwl2Y3B1X3VubG9ja19vbmUoc2MsIFZN X01BWENQVSAtIDEpOworCXJldHVybiAoZXJyb3IpOworfQorCitDVEFTU0VSVChzaXplb2YoKChz dHJ1Y3Qgdm1fbWVtc2VnICopMCktPm5hbWUpID49IFNQRUNOQU1FTEVOICsgMSk7CisKK3N0YXRp YyBpbnQKK2dldF9tZW1zZWcoc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MsIHN0cnVjdCB2bV9tZW1z ZWcgKm1zZWcpCit7CisJc3RydWN0IGRldm1lbV9zb2Z0YyAqZHNjOworCWludCBlcnJvcjsKKwli b29sIHN5c21lbTsKKworCWVycm9yID0gdm1fZ2V0X21lbXNlZyhzYy0+dm0sIG1zZWctPnNlZ2lk LCAmbXNlZy0+bGVuLCAmc3lzbWVtLCBOVUxMKTsKKwlpZiAoZXJyb3IgfHwgbXNlZy0+bGVuID09 IDApCisJCXJldHVybiAoZXJyb3IpOworCisJaWYgKCFzeXNtZW0pIHsKKwkJU0xJU1RfRk9SRUFD SChkc2MsICZzYy0+ZGV2bWVtLCBsaW5rKSB7CisJCQlpZiAoZHNjLT5zZWdpZCA9PSBtc2VnLT5z ZWdpZCkKKwkJCQlicmVhazsKKwkJfQorCQlLQVNTRVJUKGRzYyAhPSBOVUxMLCAoIiVzOiBkZXZt ZW0gc2VnbWVudCAlZCBub3QgZm91bmQiLAorCQkgICAgX19mdW5jX18sIG1zZWctPnNlZ2lkKSk7 CisJCWVycm9yID0gY29weXN0cihkc2MtPm5hbWUsIG1zZWctPm5hbWUsIFNQRUNOQU1FTEVOICsg MSwgTlVMTCk7CisJfSBlbHNlIHsKKwkJYnplcm8obXNlZy0+bmFtZSwgc2l6ZW9mKG1zZWctPm5h bWUpKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorYWxsb2NfbWVt c2VnKHN0cnVjdCB2bW1kZXZfc29mdGMgKnNjLCBzdHJ1Y3Qgdm1fbWVtc2VnICptc2VnKQorewor CWNoYXIgKm5hbWU7CisJaW50IGVycm9yOworCWJvb2wgc3lzbWVtOworCisJZXJyb3IgPSAwOwor CW5hbWUgPSBOVUxMOworCXN5c21lbSA9IHRydWU7CisKKwlpZiAoVk1fTUVNU0VHX05BTUUobXNl ZykpIHsKKwkJc3lzbWVtID0gZmFsc2U7CisJCW5hbWUgPSBtYWxsb2MoU1BFQ05BTUVMRU4gKyAx LCBNX1ZNTURFViwgTV9XQUlUT0spOworCQllcnJvciA9IGNvcHlzdHIoVk1fTUVNU0VHX05BTUUo bXNlZyksIG5hbWUsIFNQRUNOQU1FTEVOICsgMSwgMCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8g ZG9uZTsKKwl9CisKKwllcnJvciA9IHZtX2FsbG9jX21lbXNlZyhzYy0+dm0sIG1zZWctPnNlZ2lk LCBtc2VnLT5sZW4sIHN5c21lbSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGRvbmU7CisKKwlpZiAo Vk1fTUVNU0VHX05BTUUobXNlZykpIHsKKwkJZXJyb3IgPSBkZXZtZW1fY3JlYXRlX2NkZXYodm1f bmFtZShzYy0+dm0pLCBtc2VnLT5zZWdpZCwgbmFtZSk7CisJCWlmIChlcnJvcikKKwkJCXZtX2Zy ZWVfbWVtc2VnKHNjLT52bSwgbXNlZy0+c2VnaWQpOworCQllbHNlCisJCQluYW1lID0gTlVMTDsJ LyogZnJlZWQgd2hlbiAnY2RldicgaXMgZGVzdHJveWVkICovCisJfQorZG9uZToKKwlmcmVlKG5h bWUsIE1fVk1NREVWKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAordm1tZGV2 X2lvY3RsKHN0cnVjdCBjZGV2ICpjZGV2LCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsIGludCBm ZmxhZywKKwkgICAgIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBlcnJvciwgdmNwdSwgc3Rh dGVfY2hhbmdlZCwgc2l6ZTsKKwljcHVzZXRfdCAqY3B1c2V0OworCXN0cnVjdCB2bW1kZXZfc29m dGMgKnNjOworCXN0cnVjdCB2bV9yZWdpc3RlciAqdm1yZWc7CisJc3RydWN0IHZtX3NlZ19kZXNj ICp2bXNlZ2Rlc2M7CisJc3RydWN0IHZtX3J1biAqdm1ydW47CisJc3RydWN0IHZtX2V4Y2VwdGlv biAqdm1leGM7CisJc3RydWN0IHZtX2xhcGljX2lycSAqdm1pcnE7CisJc3RydWN0IHZtX2xhcGlj X21zaSAqdm1tc2k7CisJc3RydWN0IHZtX2lvYXBpY19pcnEgKmlvYXBpY19pcnE7CisJc3RydWN0 IHZtX2lzYV9pcnEgKmlzYV9pcnE7CisJc3RydWN0IHZtX2lzYV9pcnFfdHJpZ2dlciAqaXNhX2ly cV90cmlnZ2VyOworCXN0cnVjdCB2bV9jYXBhYmlsaXR5ICp2bWNhcDsKKwlzdHJ1Y3Qgdm1fcHB0 ZGV2ICpwcHRkZXY7CisJc3RydWN0IHZtX3BwdGRldl9tbWlvICpwcHRtbWlvOworCXN0cnVjdCB2 bV9wcHRkZXZfbXNpICpwcHRtc2k7CisJc3RydWN0IHZtX3BwdGRldl9tc2l4ICpwcHRtc2l4Owor CXN0cnVjdCB2bV9ubWkgKnZtbm1pOworCXN0cnVjdCB2bV9zdGF0cyAqdm1zdGF0czsKKwlzdHJ1 Y3Qgdm1fc3RhdF9kZXNjICpzdGF0ZGVzYzsKKwlzdHJ1Y3Qgdm1feDJhcGljICp4MmFwaWM7CisJ c3RydWN0IHZtX2dwYV9wdGUgKmdwYXB0ZTsKKwlzdHJ1Y3Qgdm1fc3VzcGVuZCAqdm1zdXNwZW5k OworCXN0cnVjdCB2bV9nbGEyZ3BhICpnZzsKKwlzdHJ1Y3Qgdm1fYWN0aXZhdGVfY3B1ICp2YWM7 CisJc3RydWN0IHZtX2NwdXNldCAqdm1fY3B1c2V0OworCXN0cnVjdCB2bV9pbnRpbmZvICp2bWlp OworCXN0cnVjdCB2bV9ydGNfdGltZSAqcnRjdGltZTsKKwlzdHJ1Y3Qgdm1fcnRjX2RhdGEgKnJ0 Y2RhdGE7CisJc3RydWN0IHZtX21lbW1hcCAqbW07CisKKwlzYyA9IHZtbWRldl9sb29rdXAyKGNk ZXYpOworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWVycm9yID0gMDsK Kwl2Y3B1ID0gLTE7CisJc3RhdGVfY2hhbmdlZCA9IDA7CisKKwkvKgorCSAqIFNvbWUgVk1NIGlv Y3RscyBjYW4gb3BlcmF0ZSBvbmx5IG9uIHZjcHVzIHRoYXQgYXJlIG5vdCBydW5uaW5nLgorCSAq LworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWTV9SVU46CisJY2FzZSBWTV9HRVRfUkVHSVNURVI6 CisJY2FzZSBWTV9TRVRfUkVHSVNURVI6CisJY2FzZSBWTV9HRVRfU0VHTUVOVF9ERVNDUklQVE9S OgorCWNhc2UgVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUjoKKwljYXNlIFZNX0lOSkVDVF9FWENF UFRJT046CisJY2FzZSBWTV9HRVRfQ0FQQUJJTElUWToKKwljYXNlIFZNX1NFVF9DQVBBQklMSVRZ OgorCWNhc2UgVk1fUFBUREVWX01TSToKKwljYXNlIFZNX1BQVERFVl9NU0lYOgorCWNhc2UgVk1f U0VUX1gyQVBJQ19TVEFURToKKwljYXNlIFZNX0dMQTJHUEE6CisJY2FzZSBWTV9BQ1RJVkFURV9D UFU6CisJY2FzZSBWTV9TRVRfSU5USU5GTzoKKwljYXNlIFZNX0dFVF9JTlRJTkZPOgorCWNhc2Ug Vk1fUkVTVEFSVF9JTlNUUlVDVElPTjoKKwkJLyoKKwkJICogWFhYIGZyYWdpbGUsIGhhbmRsZSB3 aXRoIGNhcmUKKwkJICogQXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgaW9jdGwg ZGF0YSBpcyB0aGUgdmNwdS4KKwkJICovCisJCXZjcHUgPSAqKGludCAqKWRhdGE7CisJCWVycm9y ID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZG9uZTsK KwkJc3RhdGVfY2hhbmdlZCA9IDE7CisJCWJyZWFrOworCisJY2FzZSBWTV9NQVBfUFBUREVWX01N SU86CisJY2FzZSBWTV9CSU5EX1BQVERFVjoKKwljYXNlIFZNX1VOQklORF9QUFRERVY6CisJY2Fz ZSBWTV9BTExPQ19NRU1TRUc6CisJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwljYXNlIFZNX1JFSU5J VDoKKwkJLyoKKwkJICogaW9jdGxzIHRoYXQgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHZpcnR1YWwg bWFjaGluZSBtdXN0CisJCSAqIHByZXZlbnQgYWxsIHZjcHVzIGZyb20gcnVubmluZy4KKwkJICov CisJCWVycm9yID0gdmNwdV9sb2NrX2FsbChzYyk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZG9u ZTsKKwkJc3RhdGVfY2hhbmdlZCA9IDI7CisJCWJyZWFrOworCisJY2FzZSBWTV9HRVRfTUVNU0VH OgorCWNhc2UgVk1fTU1BUF9HRVRORVhUOgorCQkvKgorCQkgKiBMb2NrIGEgdmNwdSB0byBtYWtl IHN1cmUgdGhhdCB0aGUgbWVtb3J5IG1hcCBjYW5ub3QgYmUKKwkJICogbW9kaWZpZWQgd2hpbGUg aXQgaXMgYmVpbmcgaW5zcGVjdGVkLgorCQkgKi8KKwkJdmNwdSA9IFZNX01BWENQVSAtIDE7CisJ CWVycm9yID0gdmNwdV9sb2NrX29uZShzYywgdmNwdSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8g ZG9uZTsKKwkJc3RhdGVfY2hhbmdlZCA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJl YWs7CisJfQorCisJc3dpdGNoKGNtZCkgeworCWNhc2UgVk1fUlVOOgorCQl2bXJ1biA9IChzdHJ1 Y3Qgdm1fcnVuICopZGF0YTsKKwkJZXJyb3IgPSB2bV9ydW4oc2MtPnZtLCB2bXJ1bik7CisJCWJy ZWFrOworCWNhc2UgVk1fU1VTUEVORDoKKwkJdm1zdXNwZW5kID0gKHN0cnVjdCB2bV9zdXNwZW5k ICopZGF0YTsKKwkJZXJyb3IgPSB2bV9zdXNwZW5kKHNjLT52bSwgdm1zdXNwZW5kLT5ob3cpOwor CQlicmVhazsKKwljYXNlIFZNX1JFSU5JVDoKKwkJZXJyb3IgPSB2bV9yZWluaXQoc2MtPnZtKTsK KwkJYnJlYWs7CisJY2FzZSBWTV9TVEFUX0RFU0M6IHsKKwkJc3RhdGRlc2MgPSAoc3RydWN0IHZt X3N0YXRfZGVzYyAqKWRhdGE7CisJCWVycm9yID0gdm1tX3N0YXRfZGVzY19jb3B5KHN0YXRkZXNj LT5pbmRleCwKKwkJCQkJc3RhdGRlc2MtPmRlc2MsIHNpemVvZihzdGF0ZGVzYy0+ZGVzYykpOwor CQlicmVhazsKKwl9CisJY2FzZSBWTV9TVEFUUzogeworCQlDVEFTU0VSVChNQVhfVk1fU1RBVFMg Pj0gTUFYX1ZNTV9TVEFUX0VMRU1TKTsKKwkJdm1zdGF0cyA9IChzdHJ1Y3Qgdm1fc3RhdHMgKilk YXRhOworCQlnZXRtaWNyb3RpbWUoJnZtc3RhdHMtPnR2KTsKKwkJZXJyb3IgPSB2bW1fc3RhdF9j b3B5KHNjLT52bSwgdm1zdGF0cy0+Y3B1aWQsCisJCQkJICAgICAgJnZtc3RhdHMtPm51bV9lbnRy aWVzLCB2bXN0YXRzLT5zdGF0YnVmKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVk1fUFBUREVWX01T SToKKwkJcHB0bXNpID0gKHN0cnVjdCB2bV9wcHRkZXZfbXNpICopZGF0YTsKKwkJZXJyb3IgPSBw cHRfc2V0dXBfbXNpKHNjLT52bSwgcHB0bXNpLT52Y3B1LAorCQkJCSAgICAgIHBwdG1zaS0+YnVz LCBwcHRtc2ktPnNsb3QsIHBwdG1zaS0+ZnVuYywKKwkJCQkgICAgICBwcHRtc2ktPmFkZHIsIHBw dG1zaS0+bXNnLAorCQkJCSAgICAgIHBwdG1zaS0+bnVtdmVjKTsKKwkJYnJlYWs7CisJY2FzZSBW TV9QUFRERVZfTVNJWDoKKwkJcHB0bXNpeCA9IChzdHJ1Y3Qgdm1fcHB0ZGV2X21zaXggKilkYXRh OworCQllcnJvciA9IHBwdF9zZXR1cF9tc2l4KHNjLT52bSwgcHB0bXNpeC0+dmNwdSwKKwkJCQkg ICAgICAgcHB0bXNpeC0+YnVzLCBwcHRtc2l4LT5zbG90LCAKKwkJCQkgICAgICAgcHB0bXNpeC0+ ZnVuYywgcHB0bXNpeC0+aWR4LAorCQkJCSAgICAgICBwcHRtc2l4LT5hZGRyLCBwcHRtc2l4LT5t c2csCisJCQkJICAgICAgIHBwdG1zaXgtPnZlY3Rvcl9jb250cm9sKTsKKwkJYnJlYWs7CisJY2Fz ZSBWTV9NQVBfUFBUREVWX01NSU86CisJCXBwdG1taW8gPSAoc3RydWN0IHZtX3BwdGRldl9tbWlv ICopZGF0YTsKKwkJZXJyb3IgPSBwcHRfbWFwX21taW8oc2MtPnZtLCBwcHRtbWlvLT5idXMsIHBw dG1taW8tPnNsb3QsCisJCQkJICAgICBwcHRtbWlvLT5mdW5jLCBwcHRtbWlvLT5ncGEsIHBwdG1t aW8tPmxlbiwKKwkJCQkgICAgIHBwdG1taW8tPmhwYSk7CisJCWJyZWFrOworCWNhc2UgVk1fQklO RF9QUFRERVY6CisJCXBwdGRldiA9IChzdHJ1Y3Qgdm1fcHB0ZGV2ICopZGF0YTsKKwkJZXJyb3Ig PSB2bV9hc3NpZ25fcHB0ZGV2KHNjLT52bSwgcHB0ZGV2LT5idXMsIHBwdGRldi0+c2xvdCwKKwkJ CQkJIHBwdGRldi0+ZnVuYyk7CisJCWJyZWFrOworCWNhc2UgVk1fVU5CSU5EX1BQVERFVjoKKwkJ cHB0ZGV2ID0gKHN0cnVjdCB2bV9wcHRkZXYgKilkYXRhOworCQllcnJvciA9IHZtX3VuYXNzaWdu X3BwdGRldihzYy0+dm0sIHBwdGRldi0+YnVzLCBwcHRkZXYtPnNsb3QsCisJCQkJCSAgIHBwdGRl di0+ZnVuYyk7CisJCWJyZWFrOworCWNhc2UgVk1fSU5KRUNUX0VYQ0VQVElPTjoKKwkJdm1leGMg PSAoc3RydWN0IHZtX2V4Y2VwdGlvbiAqKWRhdGE7CisJCWVycm9yID0gdm1faW5qZWN0X2V4Y2Vw dGlvbihzYy0+dm0sIHZtZXhjLT5jcHVpZCwKKwkJICAgIHZtZXhjLT52ZWN0b3IsIHZtZXhjLT5l cnJvcl9jb2RlX3ZhbGlkLCB2bWV4Yy0+ZXJyb3JfY29kZSwKKwkJICAgIHZtZXhjLT5yZXN0YXJ0 X2luc3RydWN0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JTkpFQ1RfTk1JOgorCQl2bW5taSA9 IChzdHJ1Y3Qgdm1fbm1pICopZGF0YTsKKwkJZXJyb3IgPSB2bV9pbmplY3Rfbm1pKHNjLT52bSwg dm1ubWktPmNwdWlkKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9MQVBJQ19JUlE6CisJCXZtaXJxID0g KHN0cnVjdCB2bV9sYXBpY19pcnEgKilkYXRhOworCQllcnJvciA9IGxhcGljX2ludHJfZWRnZShz Yy0+dm0sIHZtaXJxLT5jcHVpZCwgdm1pcnEtPnZlY3Rvcik7CisJCWJyZWFrOworCWNhc2UgVk1f TEFQSUNfTE9DQUxfSVJROgorCQl2bWlycSA9IChzdHJ1Y3Qgdm1fbGFwaWNfaXJxICopZGF0YTsK KwkJZXJyb3IgPSBsYXBpY19zZXRfbG9jYWxfaW50cihzYy0+dm0sIHZtaXJxLT5jcHVpZCwKKwkJ ICAgIHZtaXJxLT52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFZNX0xBUElDX01TSToKKwkJdm1t c2kgPSAoc3RydWN0IHZtX2xhcGljX21zaSAqKWRhdGE7CisJCWVycm9yID0gbGFwaWNfaW50cl9t c2koc2MtPnZtLCB2bW1zaS0+YWRkciwgdm1tc2ktPm1zZyk7CisJCWJyZWFrOworCWNhc2UgVk1f SU9BUElDX0FTU0VSVF9JUlE6CisJCWlvYXBpY19pcnEgPSAoc3RydWN0IHZtX2lvYXBpY19pcnEg KilkYXRhOworCQllcnJvciA9IHZpb2FwaWNfYXNzZXJ0X2lycShzYy0+dm0sIGlvYXBpY19pcnEt PmlycSk7CisJCWJyZWFrOworCWNhc2UgVk1fSU9BUElDX0RFQVNTRVJUX0lSUToKKwkJaW9hcGlj X2lycSA9IChzdHJ1Y3Qgdm1faW9hcGljX2lycSAqKWRhdGE7CisJCWVycm9yID0gdmlvYXBpY19k ZWFzc2VydF9pcnEoc2MtPnZtLCBpb2FwaWNfaXJxLT5pcnEpOworCQlicmVhazsKKwljYXNlIFZN X0lPQVBJQ19QVUxTRV9JUlE6CisJCWlvYXBpY19pcnEgPSAoc3RydWN0IHZtX2lvYXBpY19pcnEg KilkYXRhOworCQllcnJvciA9IHZpb2FwaWNfcHVsc2VfaXJxKHNjLT52bSwgaW9hcGljX2lycS0+ aXJxKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JT0FQSUNfUElOQ09VTlQ6CisJCSooaW50ICopZGF0 YSA9IHZpb2FwaWNfcGluY291bnQoc2MtPnZtKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9JU0FfQVNT RVJUX0lSUToKKwkJaXNhX2lycSA9IChzdHJ1Y3Qgdm1faXNhX2lycSAqKWRhdGE7CisJCWVycm9y ID0gdmF0cGljX2Fzc2VydF9pcnEoc2MtPnZtLCBpc2FfaXJxLT5hdHBpY19pcnEpOworCQlpZiAo ZXJyb3IgPT0gMCAmJiBpc2FfaXJxLT5pb2FwaWNfaXJxICE9IC0xKQorCQkJZXJyb3IgPSB2aW9h cGljX2Fzc2VydF9pcnEoc2MtPnZtLAorCQkJICAgIGlzYV9pcnEtPmlvYXBpY19pcnEpOworCQli cmVhazsKKwljYXNlIFZNX0lTQV9ERUFTU0VSVF9JUlE6CisJCWlzYV9pcnEgPSAoc3RydWN0IHZt X2lzYV9pcnEgKilkYXRhOworCQllcnJvciA9IHZhdHBpY19kZWFzc2VydF9pcnEoc2MtPnZtLCBp c2FfaXJxLT5hdHBpY19pcnEpOworCQlpZiAoZXJyb3IgPT0gMCAmJiBpc2FfaXJxLT5pb2FwaWNf aXJxICE9IC0xKQorCQkJZXJyb3IgPSB2aW9hcGljX2RlYXNzZXJ0X2lycShzYy0+dm0sCisJCQkg ICAgaXNhX2lycS0+aW9hcGljX2lycSk7CisJCWJyZWFrOworCWNhc2UgVk1fSVNBX1BVTFNFX0lS UToKKwkJaXNhX2lycSA9IChzdHJ1Y3Qgdm1faXNhX2lycSAqKWRhdGE7CisJCWVycm9yID0gdmF0 cGljX3B1bHNlX2lycShzYy0+dm0sIGlzYV9pcnEtPmF0cGljX2lycSk7CisJCWlmIChlcnJvciA9 PSAwICYmIGlzYV9pcnEtPmlvYXBpY19pcnEgIT0gLTEpCisJCQllcnJvciA9IHZpb2FwaWNfcHVs c2VfaXJxKHNjLT52bSwgaXNhX2lycS0+aW9hcGljX2lycSk7CisJCWJyZWFrOworCWNhc2UgVk1f SVNBX1NFVF9JUlFfVFJJR0dFUjoKKwkJaXNhX2lycV90cmlnZ2VyID0gKHN0cnVjdCB2bV9pc2Ff aXJxX3RyaWdnZXIgKilkYXRhOworCQllcnJvciA9IHZhdHBpY19zZXRfaXJxX3RyaWdnZXIoc2Mt PnZtLAorCQkgICAgaXNhX2lycV90cmlnZ2VyLT5hdHBpY19pcnEsIGlzYV9pcnFfdHJpZ2dlci0+ dHJpZ2dlcik7CisJCWJyZWFrOworCWNhc2UgVk1fTU1BUF9HRVRORVhUOgorCQltbSA9IChzdHJ1 Y3Qgdm1fbWVtbWFwICopZGF0YTsKKwkJZXJyb3IgPSB2bV9tbWFwX2dldG5leHQoc2MtPnZtLCAm bW0tPmdwYSwgJm1tLT5zZWdpZCwKKwkJICAgICZtbS0+c2Vnb2ZmLCAmbW0tPmxlbiwgJm1tLT5w cm90LCAmbW0tPmZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9NTUFQX01FTVNFRzoKKwkJbW0g PSAoc3RydWN0IHZtX21lbW1hcCAqKWRhdGE7CisJCWVycm9yID0gdm1fbW1hcF9tZW1zZWcoc2Mt PnZtLCBtbS0+Z3BhLCBtbS0+c2VnaWQsIG1tLT5zZWdvZmYsCisJCSAgICBtbS0+bGVuLCBtbS0+ cHJvdCwgbW0tPmZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9BTExPQ19NRU1TRUc6CisJCWVy cm9yID0gYWxsb2NfbWVtc2VnKHNjLCAoc3RydWN0IHZtX21lbXNlZyAqKWRhdGEpOworCQlicmVh azsKKwljYXNlIFZNX0dFVF9NRU1TRUc6CisJCWVycm9yID0gZ2V0X21lbXNlZyhzYywgKHN0cnVj dCB2bV9tZW1zZWcgKilkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HRVRfUkVHSVNURVI6CisJ CXZtcmVnID0gKHN0cnVjdCB2bV9yZWdpc3RlciAqKWRhdGE7CisJCWVycm9yID0gdm1fZ2V0X3Jl Z2lzdGVyKHNjLT52bSwgdm1yZWctPmNwdWlkLCB2bXJlZy0+cmVnbnVtLAorCQkJCQkmdm1yZWct PnJlZ3ZhbCk7CisJCWJyZWFrOworCWNhc2UgVk1fU0VUX1JFR0lTVEVSOgorCQl2bXJlZyA9IChz dHJ1Y3Qgdm1fcmVnaXN0ZXIgKilkYXRhOworCQllcnJvciA9IHZtX3NldF9yZWdpc3RlcihzYy0+ dm0sIHZtcmVnLT5jcHVpZCwgdm1yZWctPnJlZ251bSwKKwkJCQkJdm1yZWctPnJlZ3ZhbCk7CisJ CWJyZWFrOworCWNhc2UgVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUjoKKwkJdm1zZWdkZXNjID0g KHN0cnVjdCB2bV9zZWdfZGVzYyAqKWRhdGE7CisJCWVycm9yID0gdm1fc2V0X3NlZ19kZXNjKHNj LT52bSwgdm1zZWdkZXNjLT5jcHVpZCwKKwkJCQkJdm1zZWdkZXNjLT5yZWdudW0sCisJCQkJCSZ2 bXNlZ2Rlc2MtPmRlc2MpOworCQlicmVhazsKKwljYXNlIFZNX0dFVF9TRUdNRU5UX0RFU0NSSVBU T1I6CisJCXZtc2VnZGVzYyA9IChzdHJ1Y3Qgdm1fc2VnX2Rlc2MgKilkYXRhOworCQllcnJvciA9 IHZtX2dldF9zZWdfZGVzYyhzYy0+dm0sIHZtc2VnZGVzYy0+Y3B1aWQsCisJCQkJCXZtc2VnZGVz Yy0+cmVnbnVtLAorCQkJCQkmdm1zZWdkZXNjLT5kZXNjKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9H RVRfQ0FQQUJJTElUWToKKwkJdm1jYXAgPSAoc3RydWN0IHZtX2NhcGFiaWxpdHkgKilkYXRhOwor CQllcnJvciA9IHZtX2dldF9jYXBhYmlsaXR5KHNjLT52bSwgdm1jYXAtPmNwdWlkLAorCQkJCQkg IHZtY2FwLT5jYXB0eXBlLAorCQkJCQkgICZ2bWNhcC0+Y2FwdmFsKTsKKwkJYnJlYWs7CisJY2Fz ZSBWTV9TRVRfQ0FQQUJJTElUWToKKwkJdm1jYXAgPSAoc3RydWN0IHZtX2NhcGFiaWxpdHkgKilk YXRhOworCQllcnJvciA9IHZtX3NldF9jYXBhYmlsaXR5KHNjLT52bSwgdm1jYXAtPmNwdWlkLAor CQkJCQkgIHZtY2FwLT5jYXB0eXBlLAorCQkJCQkgIHZtY2FwLT5jYXB2YWwpOworCQlicmVhazsK KwljYXNlIFZNX1NFVF9YMkFQSUNfU1RBVEU6CisJCXgyYXBpYyA9IChzdHJ1Y3Qgdm1feDJhcGlj ICopZGF0YTsKKwkJZXJyb3IgPSB2bV9zZXRfeDJhcGljX3N0YXRlKHNjLT52bSwKKwkJCQkJICAg IHgyYXBpYy0+Y3B1aWQsIHgyYXBpYy0+c3RhdGUpOworCQlicmVhazsKKwljYXNlIFZNX0dFVF9Y MkFQSUNfU1RBVEU6CisJCXgyYXBpYyA9IChzdHJ1Y3Qgdm1feDJhcGljICopZGF0YTsKKwkJZXJy b3IgPSB2bV9nZXRfeDJhcGljX3N0YXRlKHNjLT52bSwKKwkJCQkJICAgIHgyYXBpYy0+Y3B1aWQs ICZ4MmFwaWMtPnN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HRVRfR1BBX1BNQVA6CisJCWdw YXB0ZSA9IChzdHJ1Y3Qgdm1fZ3BhX3B0ZSAqKWRhdGE7CisJCXBtYXBfZ2V0X21hcHBpbmcodm1z cGFjZV9wbWFwKHZtX2dldF92bXNwYWNlKHNjLT52bSkpLAorCQkJCSBncGFwdGUtPmdwYSwgZ3Bh cHRlLT5wdGUsICZncGFwdGUtPnB0ZW51bSk7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJY2Fz ZSBWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVM6CisJCWVycm9yID0gdmhwZXRfZ2V0Y2FwKChzdHJ1 Y3Qgdm1faHBldF9jYXAgKilkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9HTEEyR1BBOiB7CisJ CUNUQVNTRVJUKFBST1RfUkVBRCA9PSBWTV9QUk9UX1JFQUQpOworCQlDVEFTU0VSVChQUk9UX1dS SVRFID09IFZNX1BST1RfV1JJVEUpOworCQlDVEFTU0VSVChQUk9UX0VYRUMgPT0gVk1fUFJPVF9F WEVDVVRFKTsKKwkJZ2cgPSAoc3RydWN0IHZtX2dsYTJncGEgKilkYXRhOworCQllcnJvciA9IHZt X2dsYTJncGEoc2MtPnZtLCBnZy0+dmNwdWlkLCAmZ2ctPnBhZ2luZywgZ2ctPmdsYSwKKwkJICAg IGdnLT5wcm90LCAmZ2ctPmdwYSwgJmdnLT5mYXVsdCk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCB8 fCBlcnJvciA9PSBFRkFVTFQsCisJCSAgICAoIiVzOiB2bV9nbGEyZ3BhIHVua25vd24gZXJyb3Ig JWQiLCBfX2Z1bmNfXywgZXJyb3IpKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVk1fQUNUSVZBVEVf Q1BVOgorCQl2YWMgPSAoc3RydWN0IHZtX2FjdGl2YXRlX2NwdSAqKWRhdGE7CisJCWVycm9yID0g dm1fYWN0aXZhdGVfY3B1KHNjLT52bSwgdmFjLT52Y3B1aWQpOworCQlicmVhazsKKwljYXNlIFZN X0dFVF9DUFVTOgorCQllcnJvciA9IDA7CisJCXZtX2NwdXNldCA9IChzdHJ1Y3Qgdm1fY3B1c2V0 ICopZGF0YTsKKwkJc2l6ZSA9IHZtX2NwdXNldC0+Y3B1c2V0c2l6ZTsKKwkJaWYgKHNpemUgPCBz aXplb2YoY3B1c2V0X3QpIHx8IHNpemUgPiBDUFVfTUFYU0laRSAvIE5CQlkpIHsKKwkJCWVycm9y ID0gRVJBTkdFOworCQkJYnJlYWs7CisJCX0KKwkJY3B1c2V0ID0gbWFsbG9jKHNpemUsIE1fVEVN UCwgTV9XQUlUT0sgfCBNX1pFUk8pOworCQlpZiAodm1fY3B1c2V0LT53aGljaCA9PSBWTV9BQ1RJ VkVfQ1BVUykKKwkJCSpjcHVzZXQgPSB2bV9hY3RpdmVfY3B1cyhzYy0+dm0pOworCQllbHNlIGlm ICh2bV9jcHVzZXQtPndoaWNoID09IFZNX1NVU1BFTkRFRF9DUFVTKQorCQkJKmNwdXNldCA9IHZt X3N1c3BlbmRlZF9jcHVzKHNjLT52bSk7CisJCWVsc2UKKwkJCWVycm9yID0gRUlOVkFMOworCQlp ZiAoZXJyb3IgPT0gMCkKKwkJCWVycm9yID0gY29weW91dChjcHVzZXQsIHZtX2NwdXNldC0+Y3B1 cywgc2l6ZSk7CisJCWZyZWUoY3B1c2V0LCBNX1RFTVApOworCQlicmVhazsKKwljYXNlIFZNX1NF VF9JTlRJTkZPOgorCQl2bWlpID0gKHN0cnVjdCB2bV9pbnRpbmZvICopZGF0YTsKKwkJZXJyb3Ig PSB2bV9leGl0X2ludGluZm8oc2MtPnZtLCB2bWlpLT52Y3B1aWQsIHZtaWktPmluZm8xKTsKKwkJ YnJlYWs7CisJY2FzZSBWTV9HRVRfSU5USU5GTzoKKwkJdm1paSA9IChzdHJ1Y3Qgdm1faW50aW5m byAqKWRhdGE7CisJCWVycm9yID0gdm1fZ2V0X2ludGluZm8oc2MtPnZtLCB2bWlpLT52Y3B1aWQs ICZ2bWlpLT5pbmZvMSwKKwkJICAgICZ2bWlpLT5pbmZvMik7CisJCWJyZWFrOworCWNhc2UgVk1f UlRDX1dSSVRFOgorCQlydGNkYXRhID0gKHN0cnVjdCB2bV9ydGNfZGF0YSAqKWRhdGE7CisJCWVy cm9yID0gdnJ0Y19udnJhbV93cml0ZShzYy0+dm0sIHJ0Y2RhdGEtPm9mZnNldCwKKwkJICAgIHJ0 Y2RhdGEtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWTV9SVENfUkVBRDoKKwkJcnRjZGF0YSA9 IChzdHJ1Y3Qgdm1fcnRjX2RhdGEgKilkYXRhOworCQllcnJvciA9IHZydGNfbnZyYW1fcmVhZChz Yy0+dm0sIHJ0Y2RhdGEtPm9mZnNldCwKKwkJICAgICZydGNkYXRhLT52YWx1ZSk7CisJCWJyZWFr OworCWNhc2UgVk1fUlRDX1NFVFRJTUU6CisJCXJ0Y3RpbWUgPSAoc3RydWN0IHZtX3J0Y190aW1l ICopZGF0YTsKKwkJZXJyb3IgPSB2cnRjX3NldF90aW1lKHNjLT52bSwgcnRjdGltZS0+c2Vjcyk7 CisJCWJyZWFrOworCWNhc2UgVk1fUlRDX0dFVFRJTUU6CisJCWVycm9yID0gMDsKKwkJcnRjdGlt ZSA9IChzdHJ1Y3Qgdm1fcnRjX3RpbWUgKilkYXRhOworCQlydGN0aW1lLT5zZWNzID0gdnJ0Y19n ZXRfdGltZShzYy0+dm0pOworCQlicmVhazsKKwljYXNlIFZNX1JFU1RBUlRfSU5TVFJVQ1RJT046 CisJCWVycm9yID0gdm1fcmVzdGFydF9pbnN0cnVjdGlvbihzYy0+dm0sIHZjcHUpOworCQlicmVh azsKKwlkZWZhdWx0OgorCQllcnJvciA9IEVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHN0 YXRlX2NoYW5nZWQgPT0gMSkKKwkJdmNwdV91bmxvY2tfb25lKHNjLCB2Y3B1KTsKKwllbHNlIGlm IChzdGF0ZV9jaGFuZ2VkID09IDIpCisJCXZjcHVfdW5sb2NrX2FsbChzYyk7CisKK2RvbmU6CisJ LyogTWFrZSBzdXJlIHRoYXQgbm8gaGFuZGxlciByZXR1cm5zIGEgYm9ndXMgdmFsdWUgbGlrZSBF UkVTVEFSVCAqLworCUtBU1NFUlQoZXJyb3IgPj0gMCwgKCJ2bW1kZXZfaW9jdGw6IGludmFsaWQg ZXJyb3IgcmV0dXJuICVkIiwgZXJyb3IpKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGlj IGludAordm1tZGV2X21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2LCB2bV9vb2Zmc2V0X3Qg Km9mZnNldCwgdm1fc2l6ZV90IG1hcHNpemUsCisgICAgc3RydWN0IHZtX29iamVjdCAqKm9ianAs IGludCBucHJvdCkKK3sKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYzsKKwl2bV9wYWRkcl90IGdw YTsKKwlzaXplX3QgbGVuOworCXZtX29vZmZzZXRfdCBzZWdvZmYsIGZpcnN0LCBsYXN0OworCWlu dCBlcnJvciwgZm91bmQsIHNlZ2lkOworCWJvb2wgc3lzbWVtOworCisJZmlyc3QgPSAqb2Zmc2V0 OworCWxhc3QgPSBmaXJzdCArIG1hcHNpemU7CisJaWYgKChucHJvdCAmIFBST1RfRVhFQykgfHwg Zmlyc3QgPCAwIHx8IGZpcnN0ID49IGxhc3QpCisJCXJldHVybiAoRUlOVkFMKTsKKworCXNjID0g dm1tZGV2X2xvb2t1cDIoY2Rldik7CisJaWYgKHNjID09IE5VTEwpIHsKKwkJLyogdmlydHVhbCBt YWNoaW5lIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQgKi8KKwkJcmV0dXJuIChF SU5WQUwpOworCX0KKworCS8qCisJICogR2V0IGEgcmVhZCBsb2NrIG9uIHRoZSBndWVzdCBtZW1v cnkgbWFwIGJ5IGZyZWV6aW5nIGFueSB2Y3B1LgorCSAqLworCWVycm9yID0gdmNwdV9sb2NrX29u ZShzYywgVk1fTUFYQ1BVIC0gMSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKKwor CWdwYSA9IDA7CisJZm91bmQgPSAwOworCXdoaWxlICghZm91bmQpIHsKKwkJZXJyb3IgPSB2bV9t bWFwX2dldG5leHQoc2MtPnZtLCAmZ3BhLCAmc2VnaWQsICZzZWdvZmYsICZsZW4sCisJCSAgICBO VUxMLCBOVUxMKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJaWYgKGZpcnN0ID49IGdw YSAmJiBsYXN0IDw9IGdwYSArIGxlbikKKwkJCWZvdW5kID0gMTsKKwkJZWxzZQorCQkJZ3BhICs9 IGxlbjsKKwl9CisKKwlpZiAoZm91bmQpIHsKKwkJZXJyb3IgPSB2bV9nZXRfbWVtc2VnKHNjLT52 bSwgc2VnaWQsICZsZW4sICZzeXNtZW0sIG9ianApOworCQlLQVNTRVJUKGVycm9yID09IDAgJiYg Km9ianAgIT0gTlVMTCwKKwkJICAgICgiJXM6IGludmFsaWQgbWVtb3J5IHNlZ21lbnQgJWQiLCBf X2Z1bmNfXywgc2VnaWQpKTsKKwkJaWYgKHN5c21lbSkgeworCQkJdm1fb2JqZWN0X3JlZmVyZW5j ZSgqb2JqcCk7CisJCQkqb2Zmc2V0ID0gc2Vnb2ZmICsgKGZpcnN0IC0gZ3BhKTsKKwkJfSBlbHNl IHsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9CisJfQorCXZjcHVfdW5sb2NrX29uZShzYywgVk1f TUFYQ1BVIC0gMSk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCit2bW1kZXZf ZGVzdHJveSh2b2lkICphcmcpCit7CisJc3RydWN0IHZtbWRldl9zb2Z0YyAqc2MgPSBhcmc7CisJ c3RydWN0IGRldm1lbV9zb2Z0YyAqZHNjOworCWludCBlcnJvcjsKKworCWVycm9yID0gdmNwdV9s b2NrX2FsbChzYyk7CisJS0FTU0VSVChlcnJvciA9PSAwLCAoIiVzOiBlcnJvciAlZCBmcmVlemlu ZyB2Y3B1cyIsIF9fZnVuY19fLCBlcnJvcikpOworCisJd2hpbGUgKChkc2MgPSBTTElTVF9GSVJT VCgmc2MtPmRldm1lbSkpICE9IE5VTEwpIHsKKwkJS0FTU0VSVChkc2MtPmNkZXYgPT0gTlVMTCwg KCIlczogZGV2bWVtIG5vdCBmcmVlIiwgX19mdW5jX18pKTsKKwkJU0xJU1RfUkVNT1ZFX0hFQUQo JnNjLT5kZXZtZW0sIGxpbmspOworCQlmcmVlKGRzYy0+bmFtZSwgTV9WTU1ERVYpOworCQlmcmVl KGRzYywgTV9WTU1ERVYpOworCX0KKworCWlmIChzYy0+Y2RldiAhPSBOVUxMKQorCQlkZXN0cm95 X2RldihzYy0+Y2Rldik7CisKKwlpZiAoc2MtPnZtICE9IE5VTEwpCisJCXZtX2Rlc3Ryb3koc2Mt PnZtKTsKKworCWlmICgoc2MtPmZsYWdzICYgVlNDX0xJTktFRCkgIT0gMCkgeworCQltdHhfbG9j aygmdm1tZGV2X210eCk7CisJCVNMSVNUX1JFTU9WRSgmaGVhZCwgc2MsIHZtbWRldl9zb2Z0Yywg bGluayk7CisJCW10eF91bmxvY2soJnZtbWRldl9tdHgpOworCX0KKworCWZyZWUoc2MsIE1fVk1N REVWKTsKK30KKworc3RhdGljIGludAorc3lzY3RsX3ZtbV9kZXN0cm95KFNZU0NUTF9IQU5ETEVS X0FSR1MpCit7CisJaW50IGVycm9yOworCWNoYXIgYnVmW1ZNX01BWF9OQU1FTEVOXTsKKwlzdHJ1 Y3QgZGV2bWVtX3NvZnRjICpkc2M7CisJc3RydWN0IHZtbWRldl9zb2Z0YyAqc2M7CisJc3RydWN0 IGNkZXYgKmNkZXY7CisKKwlzdHJsY3B5KGJ1ZiwgImJlYXZpcyIsIHNpemVvZihidWYpKTsKKwll cnJvciA9IHN5c2N0bF9oYW5kbGVfc3RyaW5nKG9pZHAsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIHJlcSk7 CisJaWYgKGVycm9yICE9IDAgfHwgcmVxLT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIChlcnJv cik7CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MgPSB2bW1kZXZfbG9va3VwKGJ1Zik7 CisJaWYgKHNjID09IE5VTEwgfHwgc2MtPmNkZXYgPT0gTlVMTCkgeworCQltdHhfdW5sb2NrKCZ2 bW1kZXZfbXR4KTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCS8qCisJICogVGhlICdjZGV2 JyB3aWxsIGJlIGRlc3Ryb3llZCBhc3luY2hyb25vdXNseSB3aGVuICdzaV90aHJlYWRjb3VudCcK KwkgKiBnb2VzIGRvd24gdG8gMCBzbyB3ZSBzaG91bGQgbm90IGRvIGl0IGFnYWluIGluIHRoZSBj YWxsYmFjay4KKwkgKgorCSAqIFNldHRpbmcgJ3NjLT5jZGV2JyB0byBOVUxMIGlzIGFsc28gdXNl ZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBWTQorCSAqIGlzIHNjaGVkdWxlZCBmb3IgZGVzdHJ1Y3Rp b24uCisJICovCisJY2RldiA9IHNjLT5jZGV2OworCXNjLT5jZGV2ID0gTlVMTDsJCQorCW10eF91 bmxvY2soJnZtbWRldl9tdHgpOworCisJLyoKKwkgKiBTY2hlZHVsZSBhbGwgY2RldnMgdG8gYmUg ZGVzdHJveWVkOgorCSAqCisJICogLSBhbnkgbmV3IG9wZXJhdGlvbnMgb24gdGhlICdjZGV2JyB3 aWxsIHJldHVybiBhbiBlcnJvciAoRU5YSU8pLgorCSAqCisJICogLSB3aGVuIHRoZSAnc2lfdGhy ZWFkY291bnQnIGR3aW5kbGVzIGRvd24gdG8gemVybyB0aGUgJ2NkZXYnIHdpbGwKKwkgKiAgIGJl IGRlc3Ryb3llZCBhbmQgdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBpbiBhIHRhc2txdWV1 ZQorCSAqICAgY29udGV4dC4KKwkgKgorCSAqIC0gdGhlICdkZXZtZW0nIGNkZXZzIGFyZSBkZXN0 cm95ZWQgYmVmb3JlIHRoZSB2aXJ0dWFsIG1hY2hpbmUgJ2NkZXYnCisJICovCisJU0xJU1RfRk9S RUFDSChkc2MsICZzYy0+ZGV2bWVtLCBsaW5rKSB7CisJCUtBU1NFUlQoZHNjLT5jZGV2ICE9IE5V TEwsICgiZGV2bWVtIGNkZXYgYWxyZWFkeSBkZXN0cm95ZWQiKSk7CisJCWRlc3Ryb3lfZGV2X3Nj aGVkX2NiKGRzYy0+Y2RldiwgZGV2bWVtX2Rlc3Ryb3ksIGRzYyk7CisJfQorCWRlc3Ryb3lfZGV2 X3NjaGVkX2NiKGNkZXYsIHZtbWRldl9kZXN0cm95LCBzYyk7CisJcmV0dXJuICgwKTsKK30KK1NZ U0NUTF9QUk9DKF9od192bW0sIE9JRF9BVVRPLCBkZXN0cm95LCBDVExUWVBFX1NUUklORyB8IENU TEZMQUdfUlcsCisJICAgIE5VTEwsIDAsIHN5c2N0bF92bW1fZGVzdHJveSwgIkEiLCBOVUxMKTsK Kworc3RhdGljIHN0cnVjdCBjZGV2c3cgdm1tZGV2c3cgPSB7CisJLmRfbmFtZQkJPSAidm1tZGV2 IiwKKwkuZF92ZXJzaW9uCT0gRF9WRVJTSU9OLAorCS5kX2lvY3RsCT0gdm1tZGV2X2lvY3RsLAor CS5kX21tYXBfc2luZ2xlCT0gdm1tZGV2X21tYXBfc2luZ2xlLAorCS5kX3JlYWQJCT0gdm1tZGV2 X3J3LAorCS5kX3dyaXRlCT0gdm1tZGV2X3J3LAorfTsKKworc3RhdGljIGludAorc3lzY3RsX3Zt bV9jcmVhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHZt ICp2bTsKKwlzdHJ1Y3QgY2RldiAqY2RldjsKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYywgKnNj MjsKKwljaGFyIGJ1ZltWTV9NQVhfTkFNRUxFTl07CisKKwlzdHJsY3B5KGJ1ZiwgImJlYXZpcyIs IHNpemVvZihidWYpKTsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfc3RyaW5nKG9pZHAsIGJ1Ziwg c2l6ZW9mKGJ1ZiksIHJlcSk7CisJaWYgKGVycm9yICE9IDAgfHwgcmVxLT5uZXdwdHIgPT0gTlVM TCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MgPSB2 bW1kZXZfbG9va3VwKGJ1Zik7CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisJaWYgKHNjICE9 IE5VTEwpCisJCXJldHVybiAoRUVYSVNUKTsKKworCWVycm9yID0gdm1fY3JlYXRlKGJ1ZiwgJnZt KTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlzYyA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IHZtbWRldl9zb2Z0YyksIE1fVk1NREVWLCBNX1dBSVRPSyB8IE1fWkVSTyk7 CisJc2MtPnZtID0gdm07CisJU0xJU1RfSU5JVCgmc2MtPmRldm1lbSk7CisKKwkvKgorCSAqIExv b2t1cCB0aGUgbmFtZSBhZ2FpbiBqdXN0IGluIGNhc2Ugc29tZWJvZHkgc25lYWtlZCBpbiB3aGVu IHdlCisJICogZHJvcHBlZCB0aGUgbG9jay4KKwkgKi8KKwltdHhfbG9jaygmdm1tZGV2X210eCk7 CisJc2MyID0gdm1tZGV2X2xvb2t1cChidWYpOworCWlmIChzYzIgPT0gTlVMTCkgeworCQlTTElT VF9JTlNFUlRfSEVBRCgmaGVhZCwgc2MsIGxpbmspOworCQlzYy0+ZmxhZ3MgfD0gVlNDX0xJTktF RDsKKwl9CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisKKwlpZiAoc2MyICE9IE5VTEwpIHsK KwkJdm1tZGV2X2Rlc3Ryb3koc2MpOworCQlyZXR1cm4gKEVFWElTVCk7CisJfQorCisJZXJyb3Ig PSBtYWtlX2Rldl9wKE1BS0VERVZfQ0hFQ0tOQU1FLCAmY2RldiwgJnZtbWRldnN3LCBOVUxMLAor CQkJICAgVUlEX1JPT1QsIEdJRF9XSEVFTCwgMDYwMCwgInZtbS8lcyIsIGJ1Zik7CisJaWYgKGVy cm9yICE9IDApIHsKKwkJdm1tZGV2X2Rlc3Ryb3koc2MpOworCQlyZXR1cm4gKGVycm9yKTsKKwl9 CisKKwltdHhfbG9jaygmdm1tZGV2X210eCk7CisJc2MtPmNkZXYgPSBjZGV2OworCXNjLT5jZGV2 LT5zaV9kcnYxID0gc2M7CisJbXR4X3VubG9jaygmdm1tZGV2X210eCk7CisKKwlyZXR1cm4gKDAp OworfQorU1lTQ1RMX1BST0MoX2h3X3ZtbSwgT0lEX0FVVE8sIGNyZWF0ZSwgQ1RMVFlQRV9TVFJJ TkcgfCBDVExGTEFHX1JXLAorCSAgICBOVUxMLCAwLCBzeXNjdGxfdm1tX2NyZWF0ZSwgIkEiLCBO VUxMKTsKKwordm9pZAordm1tZGV2X2luaXQodm9pZCkKK3sKKwltdHhfaW5pdCgmdm1tZGV2X210 eCwgInZtbSBkZXZpY2UgbXV0ZXgiLCBOVUxMLCBNVFhfREVGKTsKK30KKworaW50Cit2bW1kZXZf Y2xlYW51cCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWlmIChTTElTVF9FTVBUWSgmaGVhZCkp CisJCWVycm9yID0gMDsKKwllbHNlCisJCWVycm9yID0gRUJVU1k7CisKKwlyZXR1cm4gKGVycm9y KTsKK30KKworc3RhdGljIGludAorZGV2bWVtX21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2 LCB2bV9vb2Zmc2V0X3QgKm9mZnNldCwgdm1fc2l6ZV90IGxlbiwKKyAgICBzdHJ1Y3Qgdm1fb2Jq ZWN0ICoqb2JqcCwgaW50IG5wcm90KQoreworCXN0cnVjdCBkZXZtZW1fc29mdGMgKmRzYzsKKwl2 bV9vb2Zmc2V0X3QgZmlyc3QsIGxhc3Q7CisJc2l6ZV90IHNlZ2xlbjsKKwlpbnQgZXJyb3I7CisJ Ym9vbCBzeXNtZW07CisKKwlkc2MgPSBjZGV2LT5zaV9kcnYxOworCWlmIChkc2MgPT0gTlVMTCkg eworCQkvKiAnY2RldicgaGFzIGJlZW4gY3JlYXRlZCBidXQgaXMgbm90IHJlYWR5IGZvciB1c2Ug Ki8KKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJZmlyc3QgPSAqb2Zmc2V0OworCWxhc3QgPSAq b2Zmc2V0ICsgbGVuOworCWlmICgobnByb3QgJiBQUk9UX0VYRUMpIHx8IGZpcnN0IDwgMCB8fCBm aXJzdCA+PSBsYXN0KQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IHZjcHVfbG9ja19v bmUoZHNjLT5zYywgVk1fTUFYQ1BVIC0gMSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9y KTsKKworCWVycm9yID0gdm1fZ2V0X21lbXNlZyhkc2MtPnNjLT52bSwgZHNjLT5zZWdpZCwgJnNl Z2xlbiwgJnN5c21lbSwgb2JqcCk7CisJS0FTU0VSVChlcnJvciA9PSAwICYmICFzeXNtZW0gJiYg Km9ianAgIT0gTlVMTCwKKwkgICAgKCIlczogaW52YWxpZCBkZXZtZW0gc2VnbWVudCAlZCIsIF9f ZnVuY19fLCBkc2MtPnNlZ2lkKSk7CisKKwl2Y3B1X3VubG9ja19vbmUoZHNjLT5zYywgVk1fTUFY Q1BVIC0gMSk7CisKKwlpZiAoc2VnbGVuID49IGxhc3QpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5j ZSgqb2JqcCk7CisJCXJldHVybiAoMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChFSU5WQUwpOwor CX0KK30KKworc3RhdGljIHN0cnVjdCBjZGV2c3cgZGV2bWVtc3cgPSB7CisJLmRfbmFtZQkJPSAi ZGV2bWVtIiwKKwkuZF92ZXJzaW9uCT0gRF9WRVJTSU9OLAorCS5kX21tYXBfc2luZ2xlCT0gZGV2 bWVtX21tYXBfc2luZ2xlLAorfTsKKworc3RhdGljIGludAorZGV2bWVtX2NyZWF0ZV9jZGV2KGNv bnN0IGNoYXIgKnZtbmFtZSwgaW50IHNlZ2lkLCBjaGFyICpkZXZuYW1lKQoreworCXN0cnVjdCBk ZXZtZW1fc29mdGMgKmRzYzsKKwlzdHJ1Y3Qgdm1tZGV2X3NvZnRjICpzYzsKKwlzdHJ1Y3QgY2Rl diAqY2RldjsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IG1ha2VfZGV2X3AoTUFLRURFVl9DSEVD S05BTUUsICZjZGV2LCAmZGV2bWVtc3csIE5VTEwsCisJICAgIFVJRF9ST09ULCBHSURfV0hFRUws IDA2MDAsICJ2bW0uaW8vJXMuJXMiLCB2bW5hbWUsIGRldm5hbWUpOworCWlmIChlcnJvcikKKwkJ cmV0dXJuIChlcnJvcik7CisKKwlkc2MgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZtZW1fc29m dGMpLCBNX1ZNTURFViwgTV9XQUlUT0sgfCBNX1pFUk8pOworCisJbXR4X2xvY2soJnZtbWRldl9t dHgpOworCXNjID0gdm1tZGV2X2xvb2t1cCh2bW5hbWUpOworCUtBU1NFUlQoc2MgIT0gTlVMTCwg KCIlczogdm0gJXMgc29mdGMgbm90IGZvdW5kIiwgX19mdW5jX18sIHZtbmFtZSkpOworCWlmIChz Yy0+Y2RldiA9PSBOVUxMKSB7CisJCS8qIHZpcnR1YWwgbWFjaGluZSBpcyBiZWluZyBjcmVhdGVk IG9yIGRlc3Ryb3llZCAqLworCQltdHhfdW5sb2NrKCZ2bW1kZXZfbXR4KTsKKwkJZnJlZShkc2Ms IE1fVk1NREVWKTsKKwkJZGVzdHJveV9kZXZfc2NoZWRfY2IoY2RldiwgTlVMTCwgMCk7CisJCXJl dHVybiAoRU5PREVWKTsKKwl9CisKKwlkc2MtPnNlZ2lkID0gc2VnaWQ7CisJZHNjLT5uYW1lID0g ZGV2bmFtZTsKKwlkc2MtPmNkZXYgPSBjZGV2OworCWRzYy0+c2MgPSBzYzsKKwlTTElTVF9JTlNF UlRfSEVBRCgmc2MtPmRldm1lbSwgZHNjLCBsaW5rKTsKKwltdHhfdW5sb2NrKCZ2bW1kZXZfbXR4 KTsKKworCS8qIFRoZSAnY2RldicgaXMgcmVhZHkgZm9yIHVzZSBhZnRlciAnc2lfZHJ2MScgaXMg aW5pdGlhbGl6ZWQgKi8KKwljZGV2LT5zaV9kcnYxID0gZHNjOworCXJldHVybiAoMCk7Cit9CisK K3N0YXRpYyB2b2lkCitkZXZtZW1fZGVzdHJveSh2b2lkICphcmcpCit7CisJc3RydWN0IGRldm1l bV9zb2Z0YyAqZHNjID0gYXJnOworCisJS0FTU0VSVChkc2MtPmNkZXYsICgiJXM6IGRldm1lbSBj ZGV2IGFscmVhZHkgZGVzdHJveWVkIiwgX19mdW5jX18pKTsKKwlkc2MtPmNkZXYgPSBOVUxMOwor CWRzYy0+c2MgPSBOVUxMOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92 bW1faW9wb3J0LmMgL3Vzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMKLS0tIHVzci9z cmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX2lvcG9ydC5jCTIwMTYtMTEt MzAgMTA6NTY6MDUuNzk0NTYzMDAwICswMDAwCkBAIC05NywzMSArOTcsMjc0IEBACiB9CiAjZW5k aWYJLyogS1RSICovCiAKKyNpZmRlZiBWTU1fSU9QT1JUX1JFR19IQU5ETEVSCisjaW5jbHVkZSA8 c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9sb2Nr Lmg+CisjaW5jbHVkZSA8c3lzL3N4Lmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1 ZGUgPHN5cy9zeXN0bS5oPgorCitzdGF0aWMgTUFMTE9DX0RFRklORShNX0lPUkVHSCwgImlvcmVn aCIsICJiaHl2ZSBpb3BvcnQgcmVnIGhhbmRsZXJzIik7CisKKyNkZWZpbmUgSU9QT1JUX01BWF9S RUdfSEFORExFUgkxNgorCisvKgorICogaW9wb3J0X3JlZ19oYW5kbGVyIGZ1bmN0aW9ucyBhbGxv d3MgdXMgdG8gdG8gY2F0Y2ggVk0gd3JpdGUvcmVhZAorICogb24gc3BlY2lmaWMgSS9PIGFkZHJl c3MgYW5kIHNlbmQgbm90aWZpY2F0aW9uLgorICoKKyAqIFdoZW4gdGhlIFZNIHdyaXRlcyBvciBy ZWFkcyBhIHNwZWNpZmljIHZhbHVlIG9uIEkvTyBhZGRyZXNzLCBpZiB0aGUgYWRkcmVzcworICog YW5kIHRoZSB2YWx1ZSBtYXRjaGVzIHdpdGggdGhlIGluZm8gc3RvcmVkIGR1cmlnbiB0aGUgaGFu ZGxlciByZWdpc3RyYXRpb24sCisgKiB0aGVuIHdlIHNlbmQgYSBub3RpZmljYXRpb24gKHdlIGNh biBoYXZlIG11bHRpcGxlIHR5cGUgb2Ygbm90aWZpY2F0aW9uLAorICogYnV0IGZvciBub3cgaXMg aW1wbGVtZW50ZWQgb25seSB0aGUgVk1fSU9fUkVHSF9LV0VWRU5UUyBoYW5kbGVyLgorICovCisK K3R5cGVkZWYgaW50ICgqaW9wb3J0X3JlZ19oYW5kbGVyX2Z1bmNfdCkoc3RydWN0IHZtICp2bSwK KwkJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaCwgdWludDMyX3QgKnZhbCk7CisKK3N0 cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgeworCXVpbnQxNl90IHBvcnQ7CQkJCS8qIEkvTyBhZGRy ZXNzICovCisJdWludDE2X3QgaW47CQkJCS8qIDAgb3V0LCAxIGluICovCisJdWludDMyX3QgbWFz a19kYXRhOwkJCS8qIDAgbWVhbnMgbWF0Y2ggYW55dGhpbmcgKi8KKwl1aW50MzJfdCBkYXRhOwkJ CQkvKiBkYXRhIHRvIG1hdGNoICovCisJaW9wb3J0X3JlZ19oYW5kbGVyX2Z1bmNfdCBoYW5kbGVy OwkvKiBoYW5kbGVyIHBvaW50ZXIgKi8KKwl2b2lkICpoYW5kbGVyX2FyZzsJCQkvKiBoYW5kbGVy IGFyZ3VtZW50ICovCit9OworCitzdHJ1Y3QgaW9yZWdoIHsKKwlzdHJ1Y3Qgc3ggbG9jazsKKwkv KiBUT0RPOiB1c2UgaGFzaCB0YWJsZSAqLworCXN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgaGFu ZGxlcnNbSU9QT1JUX01BWF9SRUdfSEFORExFUl07Cit9OworCisvKiAtLS0tLSBJL08gcmVnIGhh bmRsZXJzIC0tLS0tICovCisKKy8qCisgKiBWTV9JT19SRUdIX0tXRVZFTlRTIGhhbmRsZXIKKyAq CisgKiB3YWtldXAoKSBvbiBzcGVjaWZpZWQgYWRkcmVzcyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZp ZXMgdGhlIGV2ZW50CisgKgorICovCitzdGF0aWMgaW50Cit2bW1faW9wb3J0X3JlZ193YWtldXAo c3RydWN0IHZtICp2bSwgc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaCwgdWludDMyX3Qg KnZhbCkKK3sKKwl3YWtldXAocmVnaC0+aGFuZGxlcl9hcmcpOworCXJldHVybiAoMCk7Cit9CisK Ky8qCisgKiBUT0RPOgorICogLSBWTV9JT19SRUdIX0NPTkRTSUdOQUw6CXB0aHJlYWRfY29uZF9z aWduYWwKKyAqIC0gVk1fSU9fUkVHSF9XUklURUZEOgl3cml0ZSBvbiBmZAorICogLSBWTV9JT19S RUdIX0lPQ1RMOgkJaW9jdGwgb24gZmQKKyAqLworCisvKiBjYWxsIHdpdGggaW9yZWdoLT5sb2Nr IGhlbGQgKi8KK3N0YXRpYyBzdHJ1Y3QgaW9wb3J0X3JlZ19oYW5kbGVyICoKK3ZtbV9pb3BvcnRf ZmluZF9oYW5kbGVyKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCwgdWludDE2X3QgcG9ydCwgdWludDE2 X3QgaW4sCisJCXVpbnQzMl90IG1hc2tfZGF0YSwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3Qg aW9wb3J0X3JlZ19oYW5kbGVyICpyZWdoOworCXVpbnQzMl90IG1hc2s7CisJaW50IGk7CisKKwly ZWdoID0gaW9yZWdoLT5oYW5kbGVyczsKKwlmb3IgKGkgPSAwOyBpIDwgSU9QT1JUX01BWF9SRUdf SEFORExFUjsgaSsrKSB7CisJCWlmIChyZWdoW2ldLmhhbmRsZXIgIT0gTlVMTCkgeworCQkJbWFz ayA9IHJlZ2hbaV0ubWFza19kYXRhICYgbWFza19kYXRhOworCQkJaWYgKChyZWdoW2ldLnBvcnQg PT0gcG9ydCkgJiYgKHJlZ2hbaV0uaW4gPT0gaW4pCisJCQkJJiYgKChtYXNrICYgcmVnaFtpXS5k YXRhKSA9PSAobWFzayAmIGRhdGEpKSkgeworCQkJCXJldHVybiAmcmVnaFtpXTsKKwkJCX0KKwkJ fQorCX0KKworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qIGNhbGwgd2l0aCBpb3JlZ2gtPmxvY2sg aGVsZCAqLworc3RhdGljIHN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgKgordm1tX2lvcG9ydF9l bXB0eV9oYW5kbGVyKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCkKK3sKKwlzdHJ1Y3QgaW9wb3J0X3Jl Z19oYW5kbGVyICpyZWdoOworCWludCBpOworCisJcmVnaCA9IGlvcmVnaC0+aGFuZGxlcnM7CisJ Zm9yIChpID0gMDsgaSA8IElPUE9SVF9NQVhfUkVHX0hBTkRMRVI7IGkrKykgeworCQlpZiAocmVn aFtpXS5oYW5kbGVyID09IE5VTEwpIHsKKwkJCXJldHVybiAmcmVnaFtpXTsKKwkJfQorCX0KKwor CXJldHVybiAoTlVMTCk7Cit9CisKKworc3RhdGljIGludAordm1tX2lvcG9ydF9hZGRfaGFuZGxl cihzdHJ1Y3Qgdm0gKnZtLCB1aW50MTZfdCBwb3J0LCB1aW50MTZfdCBpbiwgdWludDMyX3QgbWFz a19kYXRhLAorCXVpbnQzMl90IGRhdGEsIGlvcG9ydF9yZWdfaGFuZGxlcl9mdW5jX3QgaGFuZGxl ciwgdm9pZCAqaGFuZGxlcl9hcmcpCit7CisJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVn aDsKKwlzdHJ1Y3QgaW9yZWdoICppb3JlZ2g7CisJaW50IHJldCA9IDA7CisKKwlpb3JlZ2ggPSB2 bV9pb3JlZ2godm0pOworCisJc3hfeGxvY2soJmlvcmVnaC0+bG9jayk7CisKKwlyZWdoID0gdm1t X2lvcG9ydF9maW5kX2hhbmRsZXIoaW9yZWdoLCBwb3J0LCBpbiwgbWFza19kYXRhLCBkYXRhKTsK KwlpZiAocmVnaCAhPSBOVUxMKSB7CisJCXByaW50ZigiJXM6IGhhbmRsZXIgZm9yIHBvcnQgJWQg aW4gJWQgbWFza19kYXRhICVkIGRhdGEgJWQgXAorCQkJCWFscmVhZHkgcmVnaXN0ZXJlZFxuIiwK KwkJCQlfX0ZVTkNUSU9OX18sIHBvcnQsIGluLCAgbWFza19kYXRhLCBkYXRhKTsKKwkJcmV0ID0g RUVYSVNUOworCQlnb3RvIGVycjsKKwl9CisKKwlyZWdoID0gdm1tX2lvcG9ydF9lbXB0eV9oYW5k bGVyKGlvcmVnaCk7CisJaWYgKHJlZ2ggPT0gTlVMTCkgeworCQlwcmludGYoIiVzOiBlbXB0eSBy ZWdfaGFuZGxlciBzbG90IG5vdCBmb3VuZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gRU5P TUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlyZWdoLT5wb3J0ID0gcG9ydDsKKwlyZWdoLT5pbiA9 IGluOworCXJlZ2gtPm1hc2tfZGF0YSA9IG1hc2tfZGF0YTsKKwlyZWdoLT5kYXRhID0gZGF0YTsK KwlyZWdoLT5oYW5kbGVyID0gaGFuZGxlcjsKKwlyZWdoLT5oYW5kbGVyX2FyZyA9IGhhbmRsZXJf YXJnOworCitlcnI6CisJc3hfeHVubG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZXR1cm4gKHJldCk7 Cit9CisKK3N0YXRpYyBpbnQKK3ZtbV9pb3BvcnRfZGVsX2hhbmRsZXIoc3RydWN0IHZtICp2bSwg dWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJdWludDMyX3QgbWFza19kYXRhLCB1aW50MzJf dCBkYXRhKQoreworCXN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIgKnJlZ2g7CisJc3RydWN0IGlv cmVnaCAqaW9yZWdoOworCWludCByZXQgPSAwOworCisJaW9yZWdoID0gdm1faW9yZWdoKHZtKTsK KworCXN4X3hsb2NrKCZpb3JlZ2gtPmxvY2spOworCisJcmVnaCA9IHZtbV9pb3BvcnRfZmluZF9o YW5kbGVyKGlvcmVnaCwgcG9ydCwgaW4sIG1hc2tfZGF0YSwgZGF0YSk7CisKKwlpZiAocmVnaCA9 PSBOVUxMKSB7CisJCXJldCA9IEVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJYnplcm8ocmVn aCwgc2l6ZW9mKHN0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXIpKTsKK2VycjoKKwlzeF94dW5sb2Nr KCZpb3JlZ2gtPmxvY2spOworCXJldHVybiAocmV0KTsKK30KKworLyoKKyAqIHJlZ2lzdGVyIG9y IGRlbGV0ZSBhIG5ldyBJL08gZXZlbnQgaGFuZGxlci4KKyAqLworaW50Cit2bW1faW9wb3J0X3Jl Z19oYW5kbGVyKHN0cnVjdCB2bSAqdm0sIHVpbnQxNl90IHBvcnQsIHVpbnQxNl90IGluLAorCXVp bnQzMl90IG1hc2tfZGF0YSwgdWludDMyX3QgZGF0YSwgZW51bSB2bV9pb19yZWdoX3R5cGUgdHlw ZSwgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoICh0eXBlKSB7CisJY2Fz ZSBWTV9JT19SRUdIX0RFTEVURToKKwkJcmV0ID0gdm1tX2lvcG9ydF9kZWxfaGFuZGxlcih2bSwg cG9ydCwgaW4sIG1hc2tfZGF0YSwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgVk1fSU9fUkVHSF9L V0VWRU5UUzoKKwkJcmV0ID0gdm1tX2lvcG9ydF9hZGRfaGFuZGxlcih2bSwgcG9ydCwgaW4sIG1h c2tfZGF0YSwgZGF0YSwKKwkJCQl2bW1faW9wb3J0X3JlZ193YWtldXAsIGFyZyk7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCXByaW50ZigiJXM6IHVua25vd24gcmVnX2hhbmRsZXIgdHlwZVxuIiwg X19GVU5DVElPTl9fKTsKKwkJcmV0ID0gRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4g KHJldCk7Cit9CisKKy8qCisgKiBJbnZva2UgYW4gaGFuZGxlciwgaWYgdGhlIGRhdGEgbWF0Y2hl cy4KKyAqLworc3RhdGljIGludAoraW52b2tlX3JlZ19oYW5kbGVyKHN0cnVjdCB2bSAqdm0sIGlu dCB2Y3B1aWQsIHN0cnVjdCB2bV9leGl0ICp2bWV4aXQsCisJCSAgIHVpbnQzMl90ICp2YWwsIGlu dCAqZXJyb3IpCit7CisJc3RydWN0IGlvcG9ydF9yZWdfaGFuZGxlciAqcmVnaDsKKwlzdHJ1Y3Qg aW9yZWdoICppb3JlZ2g7CisJdWludDMyX3QgbWFza19kYXRhOworCisJbWFza19kYXRhID0gdmll X3NpemUybWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCWlvcmVnaCA9IHZtX2lvcmVnaCh2 bSk7CisKKwlzeF9zbG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZWdoID0gdm1tX2lvcG9ydF9maW5k X2hhbmRsZXIoaW9yZWdoLCB2bWV4aXQtPnUuaW5vdXQucG9ydCwKKwkJCXZtZXhpdC0+dS5pbm91 dC5pbiwgbWFza19kYXRhLCB2bWV4aXQtPnUuaW5vdXQuZWF4KTsKKwlpZiAocmVnaCAhPSBOVUxM KSB7CisJCSplcnJvciA9ICgqKHJlZ2gtPmhhbmRsZXIpKSh2bSwgcmVnaCwgdmFsKTsKKwl9CisJ c3hfc3VubG9jaygmaW9yZWdoLT5sb2NrKTsKKwlyZXR1cm4gKHJlZ2ggIT0gTlVMTCk7Cit9CisK K3N0cnVjdCBpb3JlZ2ggKgoraW9yZWdoX2luaXQoc3RydWN0IHZtICp2bSkKK3sKKwlzdHJ1Y3Qg aW9yZWdoICppb3JlZ2g7CisKKwlpb3JlZ2ggPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb3JlZ2gp LCBNX0lPUkVHSCwgTV9XQUlUT0sgfCBNX1pFUk8pOworCXN4X2luaXQoJmlvcmVnaC0+bG9jaywg ImlvcmVnaCBsb2NrIik7CisKKwlyZXR1cm4gKGlvcmVnaCk7Cit9CisKK3ZvaWQKK2lvcmVnaF9j bGVhbnVwKHN0cnVjdCBpb3JlZ2ggKmlvcmVnaCkKK3sKKwlzeF9kZXN0cm95KCZpb3JlZ2gtPmxv Y2spOworCWZyZWUoaW9yZWdoLCBNX0lPUkVHSCk7Cit9CisjZWxzZSAvKiAhVk1NX0lPUE9SVF9S RUdfSEFORExFUiAqLworI2RlZmluZSBpbnZva2VfcmVnX2hhbmRsZXIoXzEsIF8yLCBfMywgXzQs IF81KSAoMCkKKyNlbmRpZiAvKiBWTU1fSU9QT1JUX1JFR19IQU5ETEVSICovCisKIHN0YXRpYyBp bnQKIGVtdWxhdGVfaW5vdXRfcG9ydChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qg dm1fZXhpdCAqdm1leGl0LAogICAgIGJvb2wgKnJldHUpCiB7CiAJaW9wb3J0X2hhbmRsZXJfZnVu Y190IGhhbmRsZXI7CiAJdWludDMyX3QgbWFzaywgdmFsOwotCWludCBlcnJvcjsKKwlpbnQgcmVn aCA9IDAsIGVycm9yID0gMDsKIAogCS8qCiAJICogSWYgdGhlcmUgaXMgbm8gaGFuZGxlciBmb3Ig dGhlIEkvTyBwb3J0IHRoZW4gcHVudCB0byB1c2Vyc3BhY2UuCiAJICovCi0JaWYgKHZtZXhpdC0+ dS5pbm91dC5wb3J0ID49IE1BWF9JT1BPUlRTIHx8Ci0JICAgIChoYW5kbGVyID0gaW9wb3J0X2hh bmRsZXJbdm1leGl0LT51Lmlub3V0LnBvcnRdKSA9PSBOVUxMKSB7CisJaWYgKCh2bWV4aXQtPnUu aW5vdXQucG9ydCA+PSBNQVhfSU9QT1JUUyB8fAorCSAgICAoaGFuZGxlciA9IGlvcG9ydF9oYW5k bGVyW3ZtZXhpdC0+dS5pbm91dC5wb3J0XSkgPT0gTlVMTCkgJiYKKwkgICAgKHJlZ2ggPSBpbnZv a2VfcmVnX2hhbmRsZXIodm0sIHZjcHVpZCwgdm1leGl0LCAmdmFsLCAmZXJyb3IpKSA9PSAwKSB7 CiAJCSpyZXR1ID0gdHJ1ZTsKIAkJcmV0dXJuICgwKTsKIAl9CiAKLQltYXNrID0gdmllX3NpemUy bWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCWlmICghcmVnaCkgeworCQltYXNrID0gdmll X3NpemUybWFzayh2bWV4aXQtPnUuaW5vdXQuYnl0ZXMpOworCisJCWlmICghdm1leGl0LT51Lmlu b3V0LmluKSB7CisJCQl2YWwgPSB2bWV4aXQtPnUuaW5vdXQuZWF4ICYgbWFzazsKKwkJfQogCi0J aWYgKCF2bWV4aXQtPnUuaW5vdXQuaW4pIHsKLQkJdmFsID0gdm1leGl0LT51Lmlub3V0LmVheCAm IG1hc2s7CisJCWVycm9yID0gKCpoYW5kbGVyKSh2bSwgdmNwdWlkLCB2bWV4aXQtPnUuaW5vdXQu aW4sCisJCQl2bWV4aXQtPnUuaW5vdXQucG9ydCwgdm1leGl0LT51Lmlub3V0LmJ5dGVzLCAmdmFs KTsKIAl9CiAKLQllcnJvciA9ICgqaGFuZGxlcikodm0sIHZjcHVpZCwgdm1leGl0LT51Lmlub3V0 LmluLAotCSAgICB2bWV4aXQtPnUuaW5vdXQucG9ydCwgdm1leGl0LT51Lmlub3V0LmJ5dGVzLCAm dmFsKTsKIAlpZiAoZXJyb3IpIHsKIAkJLyoKIAkJICogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRo aXMgZnVuY3Rpb24gaXMgYWxzbyB0aGUgcmV0dXJuIHZhbHVlCmRpZmYgLXUgLXIgLU4gdXNyL3Ny Yy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuYy5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0v dm1tX2lvcG9ydC5jLm9yaWcKLS0tIHVzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9wb3J0LmMu b3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lz L2FtZDY0L3ZtbS92bW1faW9wb3J0LmMub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjAzNzA2NTAw MCArMDAwMApAQCAtMCwwICsxLDE3NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVHlj aG8gTmlnaHRpbmdhbGUgPHR5Y2hvLm5pZ2h0aW5nYWxlQHBsdXJpYnVzbmV0d29ya3MuY29tPgor ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B R0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBy ZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuYyAyODIyODcgMjAxNS0wNC0zMCAy MjoyMzoyMlogbmVlbCAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxz eXMvc3lzdG0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8bWFjaGlu ZS92bW1faW5zdHJ1Y3Rpb25fZW11bC5oPgorCisjaW5jbHVkZSAidmF0cGljLmgiCisjaW5jbHVk ZSAidmF0cGl0LmgiCisjaW5jbHVkZSAidnBtdG1yLmgiCisjaW5jbHVkZSAidnJ0Yy5oIgorI2lu Y2x1ZGUgInZtbV9pb3BvcnQuaCIKKyNpbmNsdWRlICJ2bW1fa3RyLmgiCisKKyNkZWZpbmUJTUFY X0lPUE9SVFMJCTEyODAKKworaW9wb3J0X2hhbmRsZXJfZnVuY190IGlvcG9ydF9oYW5kbGVyW01B WF9JT1BPUlRTXSA9IHsKKwlbVElNRVJfTU9ERV0gPSB2YXRwaXRfaGFuZGxlciwKKwlbVElNRVJf Q05UUjBdID0gdmF0cGl0X2hhbmRsZXIsCisJW1RJTUVSX0NOVFIxXSA9IHZhdHBpdF9oYW5kbGVy LAorCVtUSU1FUl9DTlRSMl0gPSB2YXRwaXRfaGFuZGxlciwKKwlbTk1JU0NfUE9SVF0gPSB2YXRw aXRfbm1pc2NfaGFuZGxlciwKKwlbSU9fSUNVMV0gPSB2YXRwaWNfbWFzdGVyX2hhbmRsZXIsCisJ W0lPX0lDVTEgKyBJQ1VfSU1SX09GRlNFVF0gPSB2YXRwaWNfbWFzdGVyX2hhbmRsZXIsCisJW0lP X0lDVTJdID0gdmF0cGljX3NsYXZlX2hhbmRsZXIsCisJW0lPX0lDVTIgKyBJQ1VfSU1SX09GRlNF VF0gPSB2YXRwaWNfc2xhdmVfaGFuZGxlciwKKwlbSU9fRUxDUjFdID0gdmF0cGljX2VsY19oYW5k bGVyLAorCVtJT19FTENSMl0gPSB2YXRwaWNfZWxjX2hhbmRsZXIsCisJW0lPX1BNVE1SXSA9IHZw bXRtcl9oYW5kbGVyLAorCVtJT19SVENdID0gdnJ0Y19hZGRyX2hhbmRsZXIsCisJW0lPX1JUQyAr IDFdID0gdnJ0Y19kYXRhX2hhbmRsZXIsCit9OworCisjaWZkZWYgS1RSCitzdGF0aWMgY29uc3Qg Y2hhciAqCitpbm91dF9pbnN0cnVjdGlvbihzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0KQoreworCWlu dCBpbmRleDsKKworCXN0YXRpYyBjb25zdCBjaGFyICppb2Rlc2NbXSA9IHsKKwkJIm91dGIiLCAi b3V0dyIsICJvdXRsIiwKKwkJImluYiIsICJpbnciLCAiaW5sIiwKKwkJIm91dHNiIiwgIm91dHN3 IiwgIm91dHNkIiwKKwkJImluc2IiLCAiaW5zdyIsICJpbnNkIiwKKwl9OworCisJc3dpdGNoICh2 bWV4aXQtPnUuaW5vdXQuYnl0ZXMpIHsKKwljYXNlIDE6CisJCWluZGV4ID0gMDsKKwkJYnJlYWs7 CisJY2FzZSAyOgorCQlpbmRleCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWluZGV4ID0g MjsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZtZXhpdC0+dS5pbm91dC5pbikKKwkJaW5kZXggKz0g MzsKKworCWlmICh2bWV4aXQtPnUuaW5vdXQuc3RyaW5nKQorCQlpbmRleCArPSA2OworCisJS0FT U0VSVChpbmRleCA8IG5pdGVtcyhpb2Rlc2MpLCAoIiVzOiBpbnZhbGlkIGluZGV4ICVkIiwKKwkg ICAgX19mdW5jX18sIGluZGV4KSk7CisKKwlyZXR1cm4gKGlvZGVzY1tpbmRleF0pOworfQorI2Vu ZGlmCS8qIEtUUiAqLworCitzdGF0aWMgaW50CitlbXVsYXRlX2lub3V0X3BvcnQoc3RydWN0IHZt ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2V4aXQgKnZtZXhpdCwKKyAgICBib29sICpyZXR1 KQoreworCWlvcG9ydF9oYW5kbGVyX2Z1bmNfdCBoYW5kbGVyOworCXVpbnQzMl90IG1hc2ssIHZh bDsKKwlpbnQgZXJyb3I7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGhhbmRsZXIgZm9yIHRo ZSBJL08gcG9ydCB0aGVuIHB1bnQgdG8gdXNlcnNwYWNlLgorCSAqLworCWlmICh2bWV4aXQtPnUu aW5vdXQucG9ydCA+PSBNQVhfSU9QT1JUUyB8fAorCSAgICAoaGFuZGxlciA9IGlvcG9ydF9oYW5k bGVyW3ZtZXhpdC0+dS5pbm91dC5wb3J0XSkgPT0gTlVMTCkgeworCQkqcmV0dSA9IHRydWU7CisJ CXJldHVybiAoMCk7CisJfQorCisJbWFzayA9IHZpZV9zaXplMm1hc2sodm1leGl0LT51Lmlub3V0 LmJ5dGVzKTsKKworCWlmICghdm1leGl0LT51Lmlub3V0LmluKSB7CisJCXZhbCA9IHZtZXhpdC0+ dS5pbm91dC5lYXggJiBtYXNrOworCX0KKworCWVycm9yID0gKCpoYW5kbGVyKSh2bSwgdmNwdWlk LCB2bWV4aXQtPnUuaW5vdXQuaW4sCisJICAgIHZtZXhpdC0+dS5pbm91dC5wb3J0LCB2bWV4aXQt PnUuaW5vdXQuYnl0ZXMsICZ2YWwpOworCWlmIChlcnJvcikgeworCQkvKgorCQkgKiBUaGUgdmFs dWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHRoZSByZXR1cm4gdmFsdWUKKwkJ ICogb2Ygdm1fcnVuKCkuIFRoaXMgbmVlZHMgdG8gYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3RoZXJ3 aXNlIGl0CisJCSAqIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhICJwc2V1ZG8tZXJyb3IiIGxpa2Ug RVJFU1RBUlQuCisJCSAqCisJCSAqIEVuZm9yY2UgdGhpcyBieSBtYXBwaW5nIGFsbCBlcnJvcnMg dG8gRUlPLgorCQkgKi8KKwkJcmV0dXJuIChFSU8pOworCX0KKworCWlmICh2bWV4aXQtPnUuaW5v dXQuaW4pIHsKKwkJdm1leGl0LT51Lmlub3V0LmVheCAmPSB+bWFzazsKKwkJdm1leGl0LT51Lmlu b3V0LmVheCB8PSB2YWwgJiBtYXNrOworCQllcnJvciA9IHZtX3NldF9yZWdpc3Rlcih2bSwgdmNw dWlkLCBWTV9SRUdfR1VFU1RfUkFYLAorCQkgICAgdm1leGl0LT51Lmlub3V0LmVheCk7CisJCUtB U1NFUlQoZXJyb3IgPT0gMCwgKCJlbXVsYXRlX2lvcG9ydDogZXJyb3IgJWQgc2V0dGluZyBndWVz dCAiCisJCSAgICAicmF4IHJlZ2lzdGVyIiwgZXJyb3IpKTsKKwl9CisJKnJldHUgPSBmYWxzZTsK KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlbXVsYXRlX2lub3V0X3N0cihzdHJ1Y3Qg dm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZXhpdCAqdm1leGl0LCBib29sICpyZXR1KQor eworCSpyZXR1ID0gdHJ1ZTsKKwlyZXR1cm4gKDApOwkvKiBSZXR1cm4gdG8gdXNlcnNwYWNlIHRv IGZpbmlzaCBlbXVsYXRpb24gKi8KK30KKworaW50Cit2bV9oYW5kbGVfaW5vdXQoc3RydWN0IHZt ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2V4aXQgKnZtZXhpdCwgYm9vbCAqcmV0dSkKK3sK KwlpbnQgYnl0ZXMsIGVycm9yOworCisJYnl0ZXMgPSB2bWV4aXQtPnUuaW5vdXQuYnl0ZXM7CisJ S0FTU0VSVChieXRlcyA9PSAxIHx8IGJ5dGVzID09IDIgfHwgYnl0ZXMgPT0gNCwKKwkgICAgKCJ2 bV9oYW5kbGVfaW5vdXQ6IGludmFsaWQgb3BlcmFuZCBzaXplICVkIiwgYnl0ZXMpKTsKKworCWlm ICh2bWV4aXQtPnUuaW5vdXQuc3RyaW5nKQorCQllcnJvciA9IGVtdWxhdGVfaW5vdXRfc3RyKHZt LCB2Y3B1aWQsIHZtZXhpdCwgcmV0dSk7CisJZWxzZQorCQllcnJvciA9IGVtdWxhdGVfaW5vdXRf cG9ydCh2bSwgdmNwdWlkLCB2bWV4aXQsIHJldHUpOworCisJVkNQVV9DVFI0KHZtLCB2Y3B1aWQs ICIlcyVzIDB4JTA0eDogJXMiLAorCSAgICB2bWV4aXQtPnUuaW5vdXQucmVwID8gInJlcCAiIDog IiIsCisJICAgIGlub3V0X2luc3RydWN0aW9uKHZtZXhpdCksCisJICAgIHZtZXhpdC0+dS5pbm91 dC5wb3J0LAorCSAgICBlcnJvciA/ICJlcnJvciIgOiAoKnJldHUgPyAidXNlcnNwYWNlIiA6ICJo YW5kbGVkIikpOworCisJcmV0dXJuIChlcnJvcik7Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z eXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaCAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3Bv cnQuaAotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaAkyMDE2LTA5LTI5IDAw OjI0OjU0LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0L3ZtbS92bW1faW9w b3J0LmgJMjAxNi0xMS0zMCAxMDo1NjowNS43OTU5NDAwMDAgKzAwMDAKQEAgLTI5LDYgKzI5LDIy IEBACiAjaWZuZGVmCV9WTU1fSU9QT1JUX0hfCiAjZGVmaW5lCV9WTU1fSU9QT1JUX0hfCiAKKyNk ZWZpbmUgVk1NX0lPUE9SVF9SRUdfSEFORExFUgorI2lmZGVmIFZNTV9JT1BPUlRfUkVHX0hBTkRM RVIKK3N0cnVjdCBpb3BvcnRfcmVnX2hhbmRsZXI7CitzdHJ1Y3QgaW9yZWdoOworCitzdHJ1Y3Qg aW9yZWdoICppb3JlZ2hfaW5pdChzdHJ1Y3Qgdm0gKnZtKTsKK3ZvaWQgaW9yZWdoX2NsZWFudXAo c3RydWN0IGlvcmVnaCAqaW9yZWdoKTsKKworaW50IHZtbV9pb3BvcnRfcmVnX2hhbmRsZXIoc3Ry dWN0IHZtICp2bSwgdWludDE2X3QgcG9ydCwgdWludDE2X3QgaW4sCisJdWludDMyX3QgbWFza19k YXRhLCB1aW50MzJfdCBkYXRhLCBlbnVtIHZtX2lvX3JlZ2hfdHlwZSB0eXBlLCB2b2lkICphcmcp OworI2Vsc2UgLyogIVZNTV9JT1BPUlRfUkVHX0hBTkRMRVIgKi8KKyNkZWZpbmUgaW9yZWdoX2lu aXQoXzEpCShOVUxMKQorI2RlZmluZSBpb3JlZ2hfY2xlYW51cChfMSkKKyNkZWZpbmUgdm1tX2lv cG9ydF9yZWdfaGFuZGxlcihfMSwgXzIsIF8zLCBfNCxfNSwgXzYsIF83KSAoRUlOVkFMKQorI2Vu ZGlmIC8qIFZNTV9JT1BPUlRfUkVHX0hBTkRMRVIgKi8KKwogdHlwZWRlZiBpbnQgKCppb3BvcnRf aGFuZGxlcl9mdW5jX3QpKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsCiAgICAgYm9vbCBpbiwg aW50IHBvcnQsIGludCBieXRlcywgdWludDMyX3QgKnZhbCk7CiAKZGlmZiAtdSAtciAtTiB1c3Iv c3JjL3N5cy9hbWQ2NC92bW0vdm1tX2lvcG9ydC5oLm9yaWcgL3Vzci9zcmMvc3lzL2FtZDY0L3Zt bS92bW1faW9wb3J0Lmgub3JpZwotLS0gdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQu aC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z eXMvYW1kNjQvdm1tL3ZtbV9pb3BvcnQuaC5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuNDA5MDYw MDAwICswMDAwCkBAIC0wLDAgKzEsMzcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE0IFR5 Y2hvIE5pZ2h0aW5nYWxlIDx0eWNoby5uaWdodGluZ2FsZUBwbHVyaWJ1c25ldHdvcmtzLmNvbT4K KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN QUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvdm1tL3ZtbV9pb3Bv cnQuaCAyNzM3MDYgMjAxNC0xMC0yNiAxOTowMzowNlogbmVlbCAkCisgKi8KKworI2lmbmRlZglf Vk1NX0lPUE9SVF9IXworI2RlZmluZQlfVk1NX0lPUE9SVF9IXworCit0eXBlZGVmIGludCAoKmlv cG9ydF9oYW5kbGVyX2Z1bmNfdCkoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwKKyAgICBib29s IGluLCBpbnQgcG9ydCwgaW50IGJ5dGVzLCB1aW50MzJfdCAqdmFsKTsKKworaW50IHZtX2hhbmRs ZV9pbm91dChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZXhpdCAqdm1lLCBi b29sICpyZXR1KTsKKworI2VuZGlmCS8qIF9WTU1fSU9QT1JUX0hfICovCmRpZmYgLXUgLXIgLU4g dXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmMgL3Vzci9zcmMvc3lzL2FtZDY0L3Zt bS92bW1fdXNlcm1lbS5jCi0tLSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYwkx OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2FtZDY0 L3ZtbS92bW1fdXNlcm1lbS5jCTIwMTYtMTItMDEgMTQ6NDI6MzguNDEwNTk2MDAwICswMDAwCkBA IC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFy ZWxsYSAoc3RlZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI IERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+ CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNs dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz L3NnbGlzdC5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL3J3bG9jay5o PgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUg PHZtL3ZtX3BhcmFtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX21h cC5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4K KyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9tZF92YXIuaD4K KworI2luY2x1ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1fdXNlcm1lbS5oIgorCisvKgor ICogdXNlcm1lbSBmdW5jdGlvbnMgYWxsb3cgdXMgdG8gbWFwIGFuIGhvc3QgdXNlcnNwYWNlIGJ1 ZmZlciAoZWcuIGZyb20gYmh5dmUpCisgKiBpbiB0aGUgZ3Vlc3QgVk0uCisgKgorICogVGhpcyBm ZWF0dXJlIGlzIHVzZWQgdG8gaW1wbGVtZW50IHB0bmV0bWFwIG9uIGJoeXZlLCBtYXBwaW5nIHRo ZSBuZXRtYXAgbWVtb3J5CisgKiAocmV0dXJuZWQgYnkgdGhlIG1tYXAoKSBpbiB0aGUgYnl2aGUg dXNlcnNwYWNlIGFwcGxpY2F0aW9uKSBpbiB0aGUgZ3Vlc3QgVk0uCisgKi8KKworLyogVE9ETzog d2UgY2FuIGNyZWF0ZSBhIGR5bmFtaWNhbCBsaXN0IG9mIHVzZXJtZW0gKi8KKyNkZWZpbmUgTUFY X1VTRVJNRU1TCTY0CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcm1lbSB7CisJc3RydWN0IHZtc3BhY2Ug ICAqdm1zcGFjZTsJLyogZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCXZtX3BhZGRyX3QJZ3BhOwkJ LyogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyAqLworCXNpemVfdAkJbGVuOworfSB1c2VybWVtc1tN QVhfVVNFUk1FTVNdOworCitzdGF0aWMgaW50Cit2bW1fdXNlcm1lbV9hZGQoc3RydWN0IHZtc3Bh Y2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKQoreworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS5s ZW4gPT0gMCkgeworCQkJdXNlcm1lbXNbaV0udm1zcGFjZSA9IHZtc3BhY2U7CisJCQl1c2VybWVt c1tpXS5ncGEgPSBncGE7CisJCQl1c2VybWVtc1tpXS5sZW4gPSBsZW47CisJCQlicmVhazsKKwkJ fQorCX0KKworCWlmIChpID09IE1BWF9VU0VSTUVNUykgeworCQlwcmludGYoInZtbV91c2VybWVt X2FkZDogZW1wdHkgdXNlcm1lbSBzbG90IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAoRU5PTUVN KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordm1tX3VzZXJtZW1fZGVsKHN0 cnVjdCB2bXNwYWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlp bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNl cm1lbXNbaV0udm1zcGFjZSA9PSB2bXNwYWNlICYmIHVzZXJtZW1zW2ldLmdwYSA9PSBncGEKKwkJ CQkmJiB1c2VybWVtc1tpXS5sZW4gPT0gbGVuKSB7CisJCQliemVybygmdXNlcm1lbXNbaV0sIHNp emVvZihzdHJ1Y3QgdXNlcm1lbSkpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4g MDsKK30KKworYm9vbGVhbl90Cit1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFj ZSwgdm1fcGFkZHJfdCBncGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VT RVJNRU1TOyBpKyspIHsKKwkJaWYgKHVzZXJtZW1zW2ldLnZtc3BhY2UgIT0gdm1zcGFjZSB8fCB1 c2VybWVtc1tpXS5sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ3BhID49IHVzZXJtZW1z W2ldLmdwYSAmJgorCQkJCWdwYSA8IHVzZXJtZW1zW2ldLmdwYSArIHVzZXJtZW1zW2ldLmxlbikK KwkJCXJldHVybiAoVFJVRSk7CisJfQorCXJldHVybiAoRkFMU0UpOworfQorCit2bV9vYmplY3Rf dAordm1tX3VzZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3Qg Z3BhLCBzaXplX3QgbGVuLAorCSAgICAgICB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKQor eworCWludCBlcnJvcjsKKwl2bV9vYmplY3RfdCBvYmo7CisJdm1fbWFwX3QgbWFwOworCXZtX21h cF9lbnRyeV90IGVudHJ5OworCXZtX3BpbmRleF90IGluZGV4OworCXZtX3Byb3RfdCBwcm90Owor CWJvb2xlYW5fdCB3aXJlZDsKKworCW1hcCA9ICZ0ZC0+dGRfcHJvYy0+cF92bXNwYWNlLT52bV9t YXA7CisJLyogbG9va3VwIHRoZSB2bV9vYmplY3QgdGhhdCBkZXNjcmliZSB1c2VyIGFkZHIgKi8K KwllcnJvciA9IHZtX21hcF9sb29rdXAoJm1hcCwgKHVuc2lnbmVkIGxvbmcpYnVmLCBWTV9QUk9U X1JXLCAmZW50cnksCisJCSZvYmosICZpbmRleCwgJnByb3QsICZ3aXJlZCk7CisKKwkvKiBtYXAg dGggdm1fb2JqZWN0IGluIHRoZSB2bXNwYWNlICovCisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCWVy cm9yID0gdm1fbWFwX2ZpbmQoJnZtc3BhY2UtPnZtX21hcCwgb2JqLCBpbmRleCwgJmdwYSwgbGVu LCAwLAorCQkJCSAgICBWTUZTX05PX1NQQUNFLCBWTV9QUk9UX1JXLCBWTV9QUk9UX1JXLCAwKTsK KwkJaWYgKGVycm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fb2JqZWN0X2RlYWxsb2NhdGUo b2JqKTsKKwkJCW9iaiA9IE5VTEw7CisJCX0KKwl9CisJdm1fbWFwX2xvb2t1cF9kb25lKG1hcCwg ZW50cnkpOworCisJLyogYWNxdWlyZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB2bV9vYmplY3QgKi8K KwlpZiAob2JqICE9IE5VTEwpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCQl2bW1f dXNlcm1lbV9hZGQodm1zcGFjZSwgZ3BhLCBsZW4pOworCX0KKworCXJldHVybiAob2JqKTsKK30K Kwordm9pZAordm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFk ZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCAgPSB2bW1fdXNlcm1l bV9kZWwodm1zcGFjZSwgZ3BhLCBsZW4pOworCWlmIChyZXQpIHsKKwkJLy9UT0RPIGNoZWNrIHJl dHVybiB2YWx1ZSBvZiB2bV9tYXBfcmVtb3ZlID8KKwkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+ dm1fbWFwLCBncGEsIGdwYSArIGxlbik7CisJCS8vVE9ETyBzaG91bGQgd2UgY2FsbCB2bV9vYmpl Y3RfZGVhbGxvY2F0ZSA/CisJfQorfQorCit2b2lkCit2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVj dCB2bXNwYWNlICp2bXNwYWNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9V U0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlID09IHZtc3BhY2UpIHsK KwkJCS8vVE9ETyBzYW1lIGFzIGFib3ZlCisJCQl2bV9tYXBfcmVtb3ZlKCZ2bXNwYWNlLT52bV9t YXAsIHVzZXJtZW1zW2ldLmdwYSwKKwkJCQkgICAgICB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVt c1tpXS5sZW4pOworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3RydWN0IHVzZXJtZW0p KTsKKwkJfQorCX0KK30KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3Vz ZXJtZW0uYy5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYy5vcmlnCi0t LSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uYy5vcmlnCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2Vy bWVtLmMub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjQxNTI1MDAwMCArMDAwMApAQCAtMCwwICsx LDM3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBTdGVmYW5vIEdhcnphcmVsbGEgKHN0 ZWZhbm8uZ2FyemFyZWxsYUBnbWFpbC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU SE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu CisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNE SUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lz L3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9zZ2xpc3Qu aD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4KKyNpbmNs dWRlIDxzeXMvcHJvYy5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS92bV9w YXJhbS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9tYXAuaD4KKyNp bmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+CisjaW5jbHVk ZSA8dm0vdm1fcGFnZXIuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvbWRfdmFyLmg+CisKKyNpbmNs dWRlICJ2bW1fbWVtLmgiCisjaW5jbHVkZSAidm1tX3VzZXJtZW0uaCIKKworLyoKKyAqIHVzZXJt ZW0gZnVuY3Rpb25zIGFsbG93IHVzIHRvIG1hcCBhbiBob3N0IHVzZXJzcGFjZSBidWZmZXIgKGVn LiBmcm9tIGJoeXZlKQorICogaW4gdGhlIGd1ZXN0IFZNLgorICoKKyAqIFRoaXMgZmVhdHVyZSBp cyB1c2VkIHRvIGltcGxlbWVudCBwdG5ldG1hcCBvbiBiaHl2ZSwgbWFwcGluZyB0aGUgbmV0bWFw IG1lbW9yeQorICogKHJldHVybmVkIGJ5IHRoZSBtbWFwKCkgaW4gdGhlIGJ5dmhlIHVzZXJzcGFj ZSBhcHBsaWNhdGlvbikgaW4gdGhlIGd1ZXN0IFZNLgorICovCisKKy8qIFRPRE86IHdlIGNhbiBj cmVhdGUgYSBkeW5hbWljYWwgbGlzdCBvZiB1c2VybWVtICovCisjZGVmaW5lIE1BWF9VU0VSTUVN Uwk2NAorCitzdGF0aWMgc3RydWN0IHVzZXJtZW0geworCXN0cnVjdCB2bXNwYWNlICAgKnZtc3Bh Y2U7CS8qIGd1ZXN0IGFkZHJlc3Mgc3BhY2UgKi8KKwl2bV9wYWRkcl90CWdwYTsJCS8qIGd1ZXN0 IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlzaXplX3QJCWxlbjsKK30gdXNlcm1lbXNbTUFYX1VTRVJN RU1TXTsKKworc3RhdGljIGludAordm1tX3VzZXJtZW1fYWRkKHN0cnVjdCB2bXNwYWNlICp2bXNw YWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0ubGVuID09IDAp IHsKKwkJCXVzZXJtZW1zW2ldLnZtc3BhY2UgPSB2bXNwYWNlOworCQkJdXNlcm1lbXNbaV0uZ3Bh ID0gZ3BhOworCQkJdXNlcm1lbXNbaV0ubGVuID0gbGVuOworCQkJYnJlYWs7CisJCX0KKwl9CisK KwlpZiAoaSA9PSBNQVhfVVNFUk1FTVMpIHsKKwkJcHJpbnRmKCJ2bW1fdXNlcm1lbV9hZGQ6IGVt cHR5IHVzZXJtZW0gc2xvdCBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZtbV91c2VybWVtX2RlbChzdHJ1Y3Qgdm1z cGFjZSAqdm1zcGFjZSwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VTRVJNRU1TOyBpKyspIHsKKwkJaWYgKHVzZXJtZW1zW2ld LnZtc3BhY2UgPT0gdm1zcGFjZSAmJiB1c2VybWVtc1tpXS5ncGEgPT0gZ3BhCisJCQkJJiYgdXNl cm1lbXNbaV0ubGVuID09IGxlbikgeworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3Ry dWN0IHVzZXJtZW0pKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisK K2Jvb2xlYW5fdAordXNlcm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3Bh ZGRyX3QgZ3BhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsg aSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlICE9IHZtc3BhY2UgfHwgdXNlcm1lbXNb aV0ubGVuID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKGdwYSA+PSB1c2VybWVtc1tpXS5ncGEg JiYKKwkJCQlncGEgPCB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVtc1tpXS5sZW4pCisJCQlyZXR1 cm4gKFRSVUUpOworCX0KKwlyZXR1cm4gKEZBTFNFKTsKK30KKwordm1fb2JqZWN0X3QKK3ZtbV91 c2VybWVtX2FsbG9jKHN0cnVjdCB2bXNwYWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6 ZV90IGxlbiwKKwkgICAgICAgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQg ZXJyb3I7CisJdm1fb2JqZWN0X3Qgb2JqOworCXZtX21hcF90IG1hcDsKKwl2bV9tYXBfZW50cnlf dCBlbnRyeTsKKwl2bV9waW5kZXhfdCBpbmRleDsKKwl2bV9wcm90X3QgcHJvdDsKKwlib29sZWFu X3Qgd2lyZWQ7CisKKwltYXAgPSAmdGQtPnRkX3Byb2MtPnBfdm1zcGFjZS0+dm1fbWFwOworCS8q IGxvb2t1cCB0aGUgdm1fb2JqZWN0IHRoYXQgZGVzY3JpYmUgdXNlciBhZGRyICovCisJZXJyb3Ig PSB2bV9tYXBfbG9va3VwKCZtYXAsICh1bnNpZ25lZCBsb25nKWJ1ZiwgVk1fUFJPVF9SVywgJmVu dHJ5LAorCQkmb2JqLCAmaW5kZXgsICZwcm90LCAmd2lyZWQpOworCisJLyogbWFwIHRoIHZtX29i amVjdCBpbiB0aGUgdm1zcGFjZSAqLworCWlmIChvYmogIT0gTlVMTCkgeworCQllcnJvciA9IHZt X21hcF9maW5kKCZ2bXNwYWNlLT52bV9tYXAsIG9iaiwgaW5kZXgsICZncGEsIGxlbiwgMCwKKwkJ CQkgICAgVk1GU19OT19TUEFDRSwgVk1fUFJPVF9SVywgVk1fUFJPVF9SVywgMCk7CisJCWlmIChl cnJvciAhPSBLRVJOX1NVQ0NFU1MpIHsKKwkJCXZtX29iamVjdF9kZWFsbG9jYXRlKG9iaik7CisJ CQlvYmogPSBOVUxMOworCQl9CisJfQorCXZtX21hcF9sb29rdXBfZG9uZShtYXAsIGVudHJ5KTsK KworCS8qIGFjcXVpcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgdm1fb2JqZWN0ICovCisJaWYgKG9i aiAhPSBOVUxMKSB7CisJCXZtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwkJdm1tX3VzZXJtZW1f YWRkKHZtc3BhY2UsIGdwYSwgbGVuKTsKKwl9CisKKwlyZXR1cm4gKG9iaik7Cit9CisKK3ZvaWQK K3ZtbV91c2VybWVtX2ZyZWUoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3Bh LCBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisKKwlyZXQgID0gdm1tX3VzZXJtZW1fZGVsKHZt c3BhY2UsIGdwYSwgbGVuKTsKKwlpZiAocmV0KSB7CisJCS8vVE9ETyBjaGVjayByZXR1cm4gdmFs dWUgb2Ygdm1fbWFwX3JlbW92ZSA/CisJCXZtX21hcF9yZW1vdmUoJnZtc3BhY2UtPnZtX21hcCwg Z3BhLCBncGEgKyBsZW4pOworCQkvL1RPRE8gc2hvdWxkIHdlIGNhbGwgdm1fb2JqZWN0X2RlYWxs b2NhdGUgPworCX0KK30KKwordm9pZAordm1tX3VzZXJtZW1fY2xlYW51cChzdHJ1Y3Qgdm1zcGFj ZSAqdm1zcGFjZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7 IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0udm1zcGFjZSA9PSB2bXNwYWNlKSB7CisJCQkvL1RP RE8gc2FtZSBhcyBhYm92ZQorCQkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+dm1fbWFwLCB1c2Vy bWVtc1tpXS5ncGEsCisJCQkJICAgICAgdXNlcm1lbXNbaV0uZ3BhICsgdXNlcm1lbXNbaV0ubGVu KTsKKwkJCWJ6ZXJvKCZ1c2VybWVtc1tpXSwgc2l6ZW9mKHN0cnVjdCB1c2VybWVtKSk7CisJCX0K Kwl9Cit9CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYSAoc3Rl ZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K KyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJ RCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMv c3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL3NnbGlzdC5o PgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL3J3bG9jay5oPgorI2luY2x1 ZGUgPHN5cy9wcm9jLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX3Bh cmFtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX21hcC5oPgorI2lu Y2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRl IDx2bS92bV9wYWdlci5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9tZF92YXIuaD4KKworI2luY2x1 ZGUgInZtbV9tZW0uaCIKKyNpbmNsdWRlICJ2bW1fdXNlcm1lbS5oIgorCisvKgorICogdXNlcm1l bSBmdW5jdGlvbnMgYWxsb3cgdXMgdG8gbWFwIGFuIGhvc3QgdXNlcnNwYWNlIGJ1ZmZlciAoZWcu IGZyb20gYmh5dmUpCisgKiBpbiB0aGUgZ3Vlc3QgVk0uCisgKgorICogVGhpcyBmZWF0dXJlIGlz IHVzZWQgdG8gaW1wbGVtZW50IHB0bmV0bWFwIG9uIGJoeXZlLCBtYXBwaW5nIHRoZSBuZXRtYXAg bWVtb3J5CisgKiAocmV0dXJuZWQgYnkgdGhlIG1tYXAoKSBpbiB0aGUgYnl2aGUgdXNlcnNwYWNl IGFwcGxpY2F0aW9uKSBpbiB0aGUgZ3Vlc3QgVk0uCisgKi8KKworLyogVE9ETzogd2UgY2FuIGNy ZWF0ZSBhIGR5bmFtaWNhbCBsaXN0IG9mIHVzZXJtZW0gKi8KKyNkZWZpbmUgTUFYX1VTRVJNRU1T CTY0CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcm1lbSB7CisJc3RydWN0IHZtc3BhY2UgICAqdm1zcGFj ZTsJLyogZ3Vlc3QgYWRkcmVzcyBzcGFjZSAqLworCXZtX3BhZGRyX3QJZ3BhOwkJLyogZ3Vlc3Qg cGh5c2ljYWwgYWRkcmVzcyAqLworCXNpemVfdAkJbGVuOworfSB1c2VybWVtc1tNQVhfVVNFUk1F TVNdOworCitzdGF0aWMgaW50Cit2bW1fdXNlcm1lbV9hZGQoc3RydWN0IHZtc3BhY2UgKnZtc3Bh Y2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IE1BWF9VU0VSTUVNUzsgaSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS5sZW4gPT0gMCkg eworCQkJdXNlcm1lbXNbaV0udm1zcGFjZSA9IHZtc3BhY2U7CisJCQl1c2VybWVtc1tpXS5ncGEg PSBncGE7CisJCQl1c2VybWVtc1tpXS5sZW4gPSBsZW47CisJCQlicmVhazsKKwkJfQorCX0KKwor CWlmIChpID09IE1BWF9VU0VSTUVNUykgeworCQlwcmludGYoInZtbV91c2VybWVtX2FkZDogZW1w dHkgdXNlcm1lbSBzbG90IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAoRU5PTUVNKTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordm1tX3VzZXJtZW1fZGVsKHN0cnVjdCB2bXNw YWNlICp2bXNwYWNlLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUk1FTVM7IGkrKykgeworCQlpZiAodXNlcm1lbXNbaV0u dm1zcGFjZSA9PSB2bXNwYWNlICYmIHVzZXJtZW1zW2ldLmdwYSA9PSBncGEKKwkJCQkmJiB1c2Vy bWVtc1tpXS5sZW4gPT0gbGVuKSB7CisJCQliemVybygmdXNlcm1lbXNbaV0sIHNpemVvZihzdHJ1 Y3QgdXNlcm1lbSkpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor Ym9vbGVhbl90Cit1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFk ZHJfdCBncGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VTRVJNRU1TOyBp KyspIHsKKwkJaWYgKHVzZXJtZW1zW2ldLnZtc3BhY2UgIT0gdm1zcGFjZSB8fCB1c2VybWVtc1tp XS5sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ3BhID49IHVzZXJtZW1zW2ldLmdwYSAm JgorCQkJCWdwYSA8IHVzZXJtZW1zW2ldLmdwYSArIHVzZXJtZW1zW2ldLmxlbikKKwkJCXJldHVy biAoVFJVRSk7CisJfQorCXJldHVybiAoRkFMU0UpOworfQorCit2bV9vYmplY3RfdAordm1tX3Vz ZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UsIHZtX3BhZGRyX3QgZ3BhLCBzaXpl X3QgbGVuLAorCSAgICAgICB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBl cnJvcjsKKwl2bV9vYmplY3RfdCBvYmo7CisJdm1fbWFwX3QgbWFwOworCXZtX21hcF9lbnRyeV90 IGVudHJ5OworCXZtX3BpbmRleF90IGluZGV4OworCXZtX3Byb3RfdCBwcm90OworCWJvb2xlYW5f dCB3aXJlZDsKKworCW1hcCA9ICZ0ZC0+dGRfcHJvYy0+cF92bXNwYWNlLT52bV9tYXA7CisJLyog bG9va3VwIHRoZSB2bV9vYmplY3QgdGhhdCBkZXNjcmliZSB1c2VyIGFkZHIgKi8KKwllcnJvciA9 IHZtX21hcF9sb29rdXAoJm1hcCwgKHVuc2lnbmVkIGxvbmcpYnVmLCBWTV9QUk9UX1JXLCAmZW50 cnksCisJCSZvYmosICZpbmRleCwgJnByb3QsICZ3aXJlZCk7CisKKwkvKiBtYXAgdGggdm1fb2Jq ZWN0IGluIHRoZSB2bXNwYWNlICovCisJaWYgKG9iaiAhPSBOVUxMKSB7CisJCWVycm9yID0gdm1f bWFwX2ZpbmQoJnZtc3BhY2UtPnZtX21hcCwgb2JqLCBpbmRleCwgJmdwYSwgbGVuLCAwLAorCQkJ CSAgICBWTUZTX05PX1NQQUNFLCBWTV9QUk9UX1JXLCBWTV9QUk9UX1JXLCAwKTsKKwkJaWYgKGVy cm9yICE9IEtFUk5fU1VDQ0VTUykgeworCQkJdm1fb2JqZWN0X2RlYWxsb2NhdGUob2JqKTsKKwkJ CW9iaiA9IE5VTEw7CisJCX0KKwl9CisJdm1fbWFwX2xvb2t1cF9kb25lKG1hcCwgZW50cnkpOwor CisJLyogYWNxdWlyZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB2bV9vYmplY3QgKi8KKwlpZiAob2Jq ICE9IE5VTEwpIHsKKwkJdm1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCQl2bW1fdXNlcm1lbV9h ZGQodm1zcGFjZSwgZ3BhLCBsZW4pOworCX0KKworCXJldHVybiAob2JqKTsKK30KKwordm9pZAor dm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqdm1zcGFjZSwgdm1fcGFkZHJfdCBncGEs IHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCAgPSB2bW1fdXNlcm1lbV9kZWwodm1z cGFjZSwgZ3BhLCBsZW4pOworCWlmIChyZXQpIHsKKwkJLy9UT0RPIGNoZWNrIHJldHVybiB2YWx1 ZSBvZiB2bV9tYXBfcmVtb3ZlID8KKwkJdm1fbWFwX3JlbW92ZSgmdm1zcGFjZS0+dm1fbWFwLCBn cGEsIGdwYSArIGxlbik7CisJCS8vVE9ETyBzaG91bGQgd2UgY2FsbCB2bV9vYmplY3RfZGVhbGxv Y2F0ZSA/CisJfQorfQorCit2b2lkCit2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVjdCB2bXNwYWNl ICp2bXNwYWNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9VU0VSTUVNUzsg aSsrKSB7CisJCWlmICh1c2VybWVtc1tpXS52bXNwYWNlID09IHZtc3BhY2UpIHsKKwkJCS8vVE9E TyBzYW1lIGFzIGFib3ZlCisJCQl2bV9tYXBfcmVtb3ZlKCZ2bXNwYWNlLT52bV9tYXAsIHVzZXJt ZW1zW2ldLmdwYSwKKwkJCQkgICAgICB1c2VybWVtc1tpXS5ncGEgKyB1c2VybWVtc1tpXS5sZW4p OworCQkJYnplcm8oJnVzZXJtZW1zW2ldLCBzaXplb2Yoc3RydWN0IHVzZXJtZW0pKTsKKwkJfQor CX0KK30KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaCAv dXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmgKLS0tIHVzci9zcmMvc3lzL2FtZDY0 L3ZtbS92bW1fdXNlcm1lbS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr KyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2VybWVtLmgJMjAxNi0xMS0zMCAxMDo1Njow NS44MDQyNDEwMDAgKzAwMDAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdhcnphcmVsbGFAZ21haWwuY29tKQor ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor ICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNp Zm5kZWYJX1ZNTV9VU0VSTUVNX0hfCisjZGVmaW5lCV9WTU1fVVNFUk1FTV9IXworCitzdHJ1Y3Qg dm07CisKK3N0cnVjdCB2bV9vYmplY3QgKnZtbV91c2VybWVtX2FsbG9jKHN0cnVjdCB2bXNwYWNl ICosIHZtX3BhZGRyX3QgZ3BhLAorCQkJCSBzaXplX3QgbGVuLCB2b2lkICpidWYsIHN0cnVjdCB0 aHJlYWQgKnRkKTsKK3ZvaWQJCXZtbV91c2VybWVtX2ZyZWUoc3RydWN0IHZtc3BhY2UgKiwgdm1f cGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwordm9pZAkJdm1tX3VzZXJtZW1fY2xlYW51cChzdHJ1 Y3Qgdm1zcGFjZSAqKTsKK2Jvb2xlYW5fdAl1c2VybWVtX21hcHBlZChzdHJ1Y3Qgdm1zcGFjZSAq LCB2bV9wYWRkcl90IGdwYSk7CisKKyNlbmRpZgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBT dGVmYW5vIEdhcnphcmVsbGEgKHN0ZWZhbm8uZ2FyemFyZWxsYUBnbWFpbC5jb20pCisgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg bWV0OgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZglf Vk1NX1VTRVJNRU1fSF8KKyNkZWZpbmUJX1ZNTV9VU0VSTUVNX0hfCisKK3N0cnVjdCB2bTsKKwor c3RydWN0IHZtX29iamVjdCAqdm1tX3VzZXJtZW1fYWxsb2Moc3RydWN0IHZtc3BhY2UgKiwgdm1f cGFkZHJfdCBncGEsCisJCQkJIHNpemVfdCBsZW4sIHZvaWQgKmJ1Ziwgc3RydWN0IHRocmVhZCAq dGQpOwordm9pZAkJdm1tX3VzZXJtZW1fZnJlZShzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90 IGdwYSwgc2l6ZV90IGxlbik7Cit2b2lkCQl2bW1fdXNlcm1lbV9jbGVhbnVwKHN0cnVjdCB2bXNw YWNlICopOworYm9vbGVhbl90CXVzZXJtZW1fbWFwcGVkKHN0cnVjdCB2bXNwYWNlICosIHZtX3Bh ZGRyX3QgZ3BhKTsKKworI2VuZGlmCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8g R2FyemFyZWxsYSAoc3RlZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg KiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg KiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9WTU1fVVNF Uk1FTV9IXworI2RlZmluZQlfVk1NX1VTRVJNRU1fSF8KKworc3RydWN0IHZtOworCitzdHJ1Y3Qg dm1fb2JqZWN0ICp2bW1fdXNlcm1lbV9hbGxvYyhzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90 IGdwYSwKKwkJCQkgc2l6ZV90IGxlbiwgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2 b2lkCQl2bW1fdXNlcm1lbV9mcmVlKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLCBz aXplX3QgbGVuKTsKK3ZvaWQJCXZtbV91c2VybWVtX2NsZWFudXAoc3RydWN0IHZtc3BhY2UgKik7 Citib29sZWFuX3QJdXNlcm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBn cGEpOworCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3Vz ZXJtZW0uaC5vcmlnIC91c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaC5vcmlnCi0t LSB1c3Ivc3JjL3N5cy9hbWQ2NC92bW0vdm1tX3VzZXJtZW0uaC5vcmlnCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvYW1kNjQvdm1tL3ZtbV91c2Vy bWVtLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjQxNzQzOTAwMCArMDAwMApAQCAtMCwwICsx LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYSAoc3Rl ZmFuby5nYXJ6YXJlbGxhQGdtYWlsLmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K KyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9WTU1fVVNFUk1FTV9IXworI2RlZmlu ZQlfVk1NX1VTRVJNRU1fSF8KKworc3RydWN0IHZtOworCitzdHJ1Y3Qgdm1fb2JqZWN0ICp2bW1f dXNlcm1lbV9hbGxvYyhzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90IGdwYSwKKwkJCQkgc2l6 ZV90IGxlbiwgdm9pZCAqYnVmLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCQl2bW1fdXNlcm1l bV9mcmVlKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuKTsKK3Zv aWQJCXZtbV91c2VybWVtX2NsZWFudXAoc3RydWN0IHZtc3BhY2UgKik7Citib29sZWFuX3QJdXNl cm1lbV9tYXBwZWQoc3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBncGEpOworCisjZW5kaWYK Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdh cnphcmVsbGFAZ21haWwuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq ICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYJX1ZNTV9VU0VSTUVNX0hfCisjZGVmaW5lCV9WTU1f VVNFUk1FTV9IXworCitzdHJ1Y3Qgdm07CisKK3N0cnVjdCB2bV9vYmplY3QgKnZtbV91c2VybWVt X2FsbG9jKHN0cnVjdCB2bXNwYWNlICosIHZtX3BhZGRyX3QgZ3BhLAorCQkJCSBzaXplX3QgbGVu LCB2b2lkICpidWYsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK3ZvaWQJCXZtbV91c2VybWVtX2ZyZWUo c3RydWN0IHZtc3BhY2UgKiwgdm1fcGFkZHJfdCBncGEsIHNpemVfdCBsZW4pOwordm9pZAkJdm1t X3VzZXJtZW1fY2xlYW51cChzdHJ1Y3Qgdm1zcGFjZSAqKTsKK2Jvb2xlYW5fdAl1c2VybWVtX21h cHBlZChzdHJ1Y3Qgdm1zcGFjZSAqLCB2bV9wYWRkcl90IGdwYSk7CisKKyNlbmRpZgpkaWZmIC11 IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfZW1fbmV0bWFwLmggL3Vzci9zcmMvc3lz L2Rldi9uZXRtYXAvaWZfZW1fbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZf ZW1fbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv c3JjL3N5cy9kZXYvbmV0bWFwL2lmX2VtX25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6NTcuODQx ODIyMDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiBy ZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl9lbV9uZXRtYXAuaCAyOTMzMzEgMjAxNi0wMS0w NyAxNjo0Mjo0OFogc2JydW5vICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL2lm X2VtX25ldG1hcC5oIDIzODk4NSAyMDEyLTA4LTAyIDExOjU5OjQzWiBsdWlnaSAkCiAgKgogICog bmV0bWFwIHN1cHBvcnQgZm9yOiBlbS4KICAqCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2 L25ldG1hcC9pZl9pZ2JfbmV0bWFwLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfaWdiX25l dG1hcC5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2lnYl9uZXRtYXAuaAkyMDE2LTA5 LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAv aWZfaWdiX25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6NTcuODQyNTQyMDAwICswMDAwCkBAIC0y NCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2 L25ldG1hcC9pZl9pZ2JfbmV0bWFwLmggMjg1MzQ5IDIwMTUtMDctMTAgMDU6NTE6MzZaIGx1aWdp ICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL2lmX2lnYl9uZXRtYXAuaCAyNTYy MDAgMjAxMy0xMC0wOSAxNzozMjo1MlogamZ2ICQKICAqCiAgKiBOZXRtYXAgc3VwcG9ydCBmb3Ig aWdiLCBwYXJ0bHkgY29udHJpYnV0ZWQgYnkgQWhtZWQgS29vbGkKICAqIEZvciBkZXRhaWxzIG9u IG5ldG1hcCBzdXBwb3J0IHBsZWFzZSBzZWUgaXhnYmVfbmV0bWFwLmgKZGlmZiAtdSAtciAtTiB1 c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2l4bF9uZXRtYXAuaCAvdXNyL3NyYy9zeXMvZGV2L25l dG1hcC9pZl9peGxfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfaXhsX25l dG1hcC5oCTIwMTYtMDktMjkgMDA6MjQ6NDcuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z eXMvZGV2L25ldG1hcC9pZl9peGxfbmV0bWFwLmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NDI5Nzkw MDAgKzAwMDAKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVu Zy8xMS4wL3N5cy9kZXYvbmV0bWFwL2lmX2l4bF9uZXRtYXAuaCAyODUzNDkgMjAxNS0wNy0xMCAw NTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvaWZfaXhs X25ldG1hcC5oIDI3OTIzMiAyMDE1LTAyLTI0IDA2OjIwOjUwWiBsdWlnaSAkCiAgKgogICogbmV0 bWFwIHN1cHBvcnQgZm9yOiBpeGwKICAqCkBAIC01OSw3ICs1OSw3IEBACiAvKgogICogZGV2aWNl LXNwZWNpZmljIHN5c2N0bCB2YXJpYWJsZXM6CiAgKgotICogaXhsX2NyY3N0cmlwOiAwOiBrZWVw IENSQyBpbiByeCBmcmFtZXMgKGRlZmF1bHQpLCAxOiBzdHJpcCBpdC4KKyAqIGl4bF9jcmNzdHJp cDogMDogTklDIGtlZXBzIENSQyBpbiByeCBmcmFtZXMsIDE6IE5JQyBzdHJpcHMgaXQgKGRlZmF1 bHQpLgogICoJRHVyaW5nIHJlZ3VsYXIgb3BlcmF0aW9ucyB0aGUgQ1JDIGlzIHN0cmlwcGVkLCBi dXQgb24gc29tZQogICoJaGFyZHdhcmUgcmVjZXB0aW9uIG9mIGZyYW1lcyBub3QgbXVsdGlwbGUg b2YgNjQgaXMgc2xvd2VyLAogICoJc28gdXNpbmcgY3Jjc3RyaXA9MCBoZWxwcyBpbiBiZW5jaG1h cmtzLgpAQCAtNzEsMTAgKzcxLDkgQEAKIC8qCiAgKiBUaGUgeGwgZHJpdmVyIGJ5IGRlZmF1bHQg c3RyaXBzIENSQ3MgYW5kIHdlIGRvIG5vdCBvdmVycmlkZSBpdC4KICAqLwotaW50IGl4bF9yeF9t aXNzLCBpeGxfcnhfbWlzc19idWZzLCBpeGxfY3Jjc3RyaXAgPSAxOwogI2lmIDAKIFNZU0NUTF9J TlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeGxfY3Jjc3RyaXAsCi0gICAgQ1RMRkxBR19SVywg Jml4bF9jcmNzdHJpcCwgMSwgInN0cmlwIENSQyBvbiByeCBmcmFtZXMiKTsKKyAgICBDVExGTEFH X1JXLCAmaXhsX2NyY3N0cmlwLCAxLCAiTklDIHN0cmlwcyBDUkMgb24gcnggZnJhbWVzIik7CiAj ZW5kaWYKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeGxfcnhfbWlzcywKICAg ICBDVExGTEFHX1JXLCAmaXhsX3J4X21pc3MsIDAsICJwb3RlbnRpYWxseSBtaXNzZWQgcnggaW50 ciIpOwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfbGVtX25ldG1hcC5o IC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2xlbV9uZXRtYXAuaAotLS0gdXNyL3NyYy9zeXMv ZGV2L25ldG1hcC9pZl9sZW1fbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAg KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX2xlbV9uZXRtYXAuaAkyMDE2LTEx LTIzIDE2OjU3OjU3Ljg0MzMyNzAwMCArMDAwMApAQCAtMjUsNyArMjUsNyBAQAogCiAKIC8qCi0g KiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvaWZfbGVtX25ldG1hcC5oIDI4 NTM0OSAyMDE1LTA3LTEwIDA1OjUxOjM2WiBsdWlnaSAkCisgKiAkRnJlZUJTRDogaGVhZC9zeXMv ZGV2L25ldG1hcC9pZl9sZW1fbmV0bWFwLmggMjcxODQ5IDIwMTQtMDktMTkgMDM6NTE6MjZaIGds ZWJpdXMgJAogICoKICAqIG5ldG1hcCBzdXBwb3J0IGZvcjogbGVtCiAgKgpAQCAtMzUsMTIgKzM1 LDggQEAKIAogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNpbmNsdWRlIDxzeXMvc2VsaW5mby5o PgotI2luY2x1ZGUgPHZtL3ZtLmg+Ci0jaW5jbHVkZSA8dm0vcG1hcC5oPiAgICAvKiB2dG9waHlz ID8gKi8KICNpbmNsdWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CiAKLWV4dGVybiBpbnQg bmV0bWFwX2FkYXB0aXZlX2lvOwotCiAvKgogICogUmVnaXN0ZXIvdW5yZWdpc3Rlci4gV2UgYXJl IGFscmVhZHkgdW5kZXIgbmV0bWFwIGxvY2suCiAgKi8KQEAgLTgxLDYgKzc3LDIyIEBACiB9CiAK IAorc3RhdGljIHZvaWQKK2xlbV9uZXRtYXBfaW50cihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5h LCBpbnQgb25vZmYpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBuYS0+aWZwOworCXN0cnVjdCBh ZGFwdGVyICphZGFwdGVyID0gaWZwLT5pZl9zb2Z0YzsKKworCUVNX0NPUkVfTE9DSyhhZGFwdGVy KTsKKwlpZiAob25vZmYpIHsKKwkJbGVtX2VuYWJsZV9pbnRyKGFkYXB0ZXIpOworCX0gZWxzZSB7 CisJCWxlbV9kaXNhYmxlX2ludHIoYWRhcHRlcik7CisJfQorCUVNX0NPUkVfVU5MT0NLKGFkYXB0 ZXIpOworfQorCisKIC8qCiAgKiBSZWNvbmNpbGUga2VybmVsIGFuZCB1c2VyIHZpZXcgb2YgdGhl IHRyYW5zbWl0IHJpbmcuCiAgKi8KQEAgLTk5LDEwICsxMTEsNiBAQAogCiAJLyogZGV2aWNlLXNw ZWNpZmljICovCiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBpZnAtPmlmX3NvZnRjOwotI2lm ZGVmIE5JQ19QQVJBVklSVAotCXN0cnVjdCBwYXJhdmlydF9jc2IgKmNzYiA9IGFkYXB0ZXItPmNz YjsKLQl1aW50NjRfdCAqY3NiZCA9ICh1aW50NjRfdCAqKShjc2IgKyAxKTsKLSNlbmRpZiAvKiBO SUNfUEFSQVZJUlQgKi8KIAogCWJ1c19kbWFtYXBfc3luYyhhZGFwdGVyLT50eGRtYS5kbWFfdGFn LCBhZGFwdGVyLT50eGRtYS5kbWFfbWFwLAogCQkJQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwpAQCAt MTEzLDE5ICsxMjEsNiBAQAogCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAobm1faSAh PSBoZWFkKSB7CS8qIHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLwotI2lmZGVmIE5JQ19Q QVJBVklSVAotCQlpbnQgZG9fa2ljayA9IDA7Ci0JCXVpbnQ2NF90IHQgPSAwOyAvLyB0aW1lc3Rh bXAKLQkJaW50IG4gPSBoZWFkIC0gbm1faTsKLQkJaWYgKG4gPCAwKQotCQkJbiArPSBsaW0gKyAx OwotCQlpZiAoY3NiKSB7Ci0JCQl0ID0gcmR0c2MoKTsgLyogbGFzdCB0aW1lc3RhbXAgKi8KLQkJ CWNzYmRbMTZdICs9IHQgLSBjc2JkWzBdOyAvKiB0b3RhbCBXZyAqLwotCQkJY3NiZFsxN10gKz0g bjsJCS8qIFdnIGNvdW50ICovCi0JCQljc2JkWzBdID0gdDsKLQkJfQotI2VuZGlmIC8qIE5JQ19Q QVJBVklSVCAqLwogCQluaWNfaSA9IG5ldG1hcF9pZHhfazJuKGtyaW5nLCBubV9pKTsKIAkJd2hp bGUgKG5tX2kgIT0gaGVhZCkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gJnJpbmct PnNsb3Rbbm1faV07CkBAIC0xNjYsMzggKzE2MSw4IEBACiAJCWJ1c19kbWFtYXBfc3luYyhhZGFw dGVyLT50eGRtYS5kbWFfdGFnLCBhZGFwdGVyLT50eGRtYS5kbWFfbWFwLAogCQkJQlVTX0RNQVNZ TkNfUFJFUkVBRCB8IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKIAotI2lmZGVmIE5JQ19QQVJBVklS VAotCQkvKiBzZXQgdW5jb25kaXRpb25hbGx5LCB0aGVuIGFsc28ga2ljayBpZiBuZWVkZWQgKi8K LQkJaWYgKGNzYikgewotCQkJdCA9IHJkdHNjKCk7Ci0JCQlpZiAoY3NiLT5ob3N0X25lZWRfdHhr aWNrID09IDIpIHsKLQkJCQkvKiBjYW4gY29tcHV0ZSBhbiB1cGRhdGUgb2YgZGVsdGEgKi8KLQkJ CQlpbnQ2NF90IGRlbHRhID0gdCAtIGNzYmRbM107Ci0JCQkJaWYgKGRlbHRhIDwgMCkKLQkJCQkJ ZGVsdGEgPSAtZGVsdGE7Ci0JCQkJaWYgKGNzYmRbOF0gPT0gMCB8fCBkZWx0YSA8IGNzYmRbOF0p IHsKLQkJCQkJY3NiZFs4XSA9IGRlbHRhOwotCQkJCQljc2JkWzldKys7Ci0JCQkJfQotCQkJCWNz YmRbMTBdKys7Ci0JCQl9Ci0JCQljc2ItPmd1ZXN0X3RkdCA9IG5pY19pOwotCQkJY3NiZFsxOF0g Kz0gdCAtIGNzYmRbMF07IC8vIHRvdGFsIHdwCi0JCQljc2JkWzE5XSArPSBuOwotCQl9Ci0JCWlm ICghY3NiIHx8ICFjc2ItPmd1ZXN0X2NzYl9vbiB8fCAoY3NiLT5ob3N0X25lZWRfdHhraWNrICYg MSkpCi0JCQlkb19raWNrID0gMTsKLQkJaWYgKGRvX2tpY2spCi0jZW5kaWYgLyogTklDX1BBUkFW SVJUICovCiAJCS8qIChyZSlzdGFydCB0aGUgdHggdW5pdCB1cCB0byBzbG90IG5pY19pIChleGNs dWRlZCkgKi8KIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgRTEwMDBfVERUKDApLCBu aWNfaSk7Ci0jaWZkZWYgTklDX1BBUkFWSVJUCi0JCWlmIChkb19raWNrKSB7Ci0JCQl1aW50NjRf dCB0MSA9IHJkdHNjKCk7Ci0JCQljc2JkWzIwXSArPSB0MSAtIHQ7IC8vIHRvdGFsIE5wCi0JCQlj c2JkWzIxXSsrOwotCQl9Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAJfQogCiAJLyoKQEAg LTIwNiw5MyArMTcxLDYgQEAKIAlpZiAodGlja3MgIT0ga3JpbmctPmxhc3RfcmVjbGFpbSB8fCBm bGFncyAmIE5BRl9GT1JDRV9SRUNMQUlNIHx8IG5tX2tyX3R4ZW1wdHkoa3JpbmcpKSB7CiAJCWty aW5nLT5sYXN0X3JlY2xhaW0gPSB0aWNrczsKIAkJLyogcmVjb3JkIGNvbXBsZXRlZCB0cmFuc21p c3Npb25zIHVzaW5nIFRESCAqLwotI2lmZGVmIE5JQ19QQVJBVklSVAotCQkvKiBob3N0IHVwZGF0 ZXMgdGRoIHVuY29uZGl0aW9uYWxseSwgYW5kIHdlIGhhdmUKLQkJICogbm8gc2lkZSBlZmZlY3Rz IG9uIHJlYWRzLCBzbyB3ZSBjYW4gcmVhZCBmcm9tIHRoZXJlCi0JCSAqIGluc3RlYWQgb2YgZXhp dGluZy4KLQkJICovCi0JCWlmIChjc2IpIHsKLQkJICAgIHN0YXRpYyBpbnQgZHJhaW4gPSAwLCBu b2RyYWluPTAsIGdvb2QgPSAwLCBiYWQgPSAwLCBmYWlsID0gMDsKLQkJICAgIHVfaW50IHggPSBh ZGFwdGVyLT5uZXh0X3R4X3RvX2NsZWFuOwotCQkgICAgY3NiZFsxOV0rKzsgLy8gWFhYIGNvdW50 IHJlY2xhaW1zCi0JCSAgICBuaWNfaSA9IGNzYi0+aG9zdF90ZGg7Ci0JCSAgICBpZiAoY3NiLT5n dWVzdF9jc2Jfb24pIHsKLQkJCWlmIChuaWNfaSA9PSB4KSB7Ci0JCQkgICAgYmFkKys7Ci0JCSAg ICAJICAgIGNzYmRbMjRdKys7IC8vIGZhaWxlZCByZWNsYWltcwotCQkJICAgIC8qIG5vIHByb2dy ZXNzLCByZXF1ZXN0IGtpY2sgYW5kIHJldHJ5ICovCi0JCQkgICAgY3NiLT5ndWVzdF9uZWVkX3R4 a2ljayA9IDE7Ci0JCQkgICAgbWIoKTsgLy8gWFhYIGJhcnJpZXIKLQkJICAgIAkgICAgbmljX2kg PSBjc2ItPmhvc3RfdGRoOwotCQkJfSBlbHNlIHsKLQkJCSAgICBnb29kKys7Ci0JCQl9Ci0JCQlp ZiAobmljX2kgIT0geCkgewotCQkJICAgIGNzYi0+Z3Vlc3RfbmVlZF90eGtpY2sgPSAyOwotCQkJ ICAgIGlmIChuaWNfaSA9PSBjc2ItPmd1ZXN0X3RkdCkKLQkJCQlkcmFpbisrOwotCQkJICAgIGVs c2UKLQkJCQlub2RyYWluKys7Ci0jaWYgMQotCQkJaWYgKG5ldG1hcF9hZGFwdGl2ZV9pbykgewot CQkJICAgIC8qIG5ldyBtZWNoYW5pc206IGxhc3QgaGFsZiByaW5nIChvciBzbykKLQkJCSAgICAg KiByZWxlYXNlZCBvbmUgc2xvdCBhdCBhIHRpbWUuCi0JCQkgICAgICogVGhpcyBlZmZlY3RpdmVs eSBtYWtlcyB0aGUgc3lzdGVtIHNwaW4uCi0JCQkgICAgICoKLQkJCSAgICAgKiBUYWtlIG5leHRf dG9fY2xlYW4gKyAxIGFzIGEgcmVmZXJlbmNlLgotCQkJICAgICAqIHRkaCBtdXN0IGJlIGFoZWFk IG9yIGVxdWFsCi0JCQkgICAgICogT24gZW50cnksIHRoZSBsb2dpY2FsIG9yZGVyIGlzCi0JCQkg ICAgICoJCXggPCB0ZGggPSBuaWNfaQotCQkJICAgICAqIFdlIGZpcnN0IHB1c2ggdGRoIHVwIHRv IGF2b2lkIHdyYXBzLgotCQkJICAgICAqIFRoZSBsaW1pdCBpcyB0ZGgtbGwgKGhhbGYgcmluZyku Ci0JCQkgICAgICogaWYgdGRoLTI1NiA8IHggd2UgcmVwb3J0IHg7Ci0JCQkgICAgICogZWxzZSB3 ZSByZXBvcnQgdGRoLTI1NgotCQkJICAgICAqLwotCQkJICAgIHVfaW50IHRkaCA9IG5pY19pOwot CQkJICAgIHVfaW50IGxsID0gY3NiZFsxNV07Ci0JCQkgICAgdV9pbnQgZGVsdGEgPSBsaW0vODsK LQkJCSAgICBpZiAobmV0bWFwX2FkYXB0aXZlX2lvID09IDIgfHwgbGwgPiBkZWx0YSkKLQkJCQlj c2JkWzE1XSA9IGxsID0gZGVsdGE7Ci0JCQkgICAgZWxzZSBpZiAobmV0bWFwX2FkYXB0aXZlX2lv ID09IDEgJiYgbGwgPiAxKSB7Ci0JCQkJY3NiZFsxNV0tLTsKLQkJCSAgICB9Ci0KLQkJCSAgICBp ZiAobmljX2kgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsKLQkJCQlSRCg1LCAiYmFkIG5pY19p ICVkIG9uIGlucHV0IiwgbmljX2kpOwotCQkJICAgIH0KLQkJCSAgICB4ID0gbm1fbmV4dCh4LCBs aW0pOwotCQkJICAgIGlmICh0ZGggPCB4KQotCQkJCXRkaCArPSBsaW0gKyAxOwotCQkJICAgIGlm ICh0ZGggPD0geCArIGxsKSB7Ci0JCQkJbmljX2kgPSB4OwotCQkJCWNzYmRbMjVdKys7IC8vcmVw b3J0IG4gKyAxOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJdGRoID0gbmljX2k7Ci0JCQkJaWYgKHRk aCA8IGxsKQotCQkJCSAgICB0ZGggKz0gbGltICsgMTsKLQkJCQluaWNfaSA9IHRkaCAtIGxsOwot CQkJCWNzYmRbMjZdKys7IC8vIHJlcG9ydCB0ZGggLSBsbAotCQkJICAgIH0KLQkJCX0KLSNlbmRp ZgotCQkJfSBlbHNlIHsKLQkJCSAgICAvKiB3ZSBzdG9wLCBjb3VudCB3aGV0aGVyIHdlIGFyZSBp ZGxlIG9yIG5vdCAqLwotCQkJICAgIGludCBiaF9hY3RpdmUgPSBjc2ItPmhvc3RfbmVlZF90eGtp Y2sgJiAyID8gNCA6IDA7Ci0JCQkgICAgY3NiZFsyNysgY3NiLT5ob3N0X25lZWRfdHhraWNrXSsr OwotCQkJICAgIGlmIChuZXRtYXBfYWRhcHRpdmVfaW8gPT0gMSkgewotCQkJCWlmIChiaF9hY3Rp dmUgJiYgY3NiZFsxNV0gPiAxKQotCQkJCSAgICBjc2JkWzE1XS0tOwotCQkJCWVsc2UgaWYgKCFi aF9hY3RpdmUgJiYgY3NiZFsxNV0gPCBsaW0vMikKLQkJCQkgICAgY3NiZFsxNV0rKzsKLQkJCSAg ICB9Ci0JCQkgICAgYmFkLS07Ci0JCQkgICAgZmFpbCsrOwotCQkJfQotCQkgICAgfQotCQkgICAg UkQoMSwgImRyYWluICVkIG5vZHJhaW4gJWQgZ29vZCAlZCByZXRyeSAlZCBmYWlsICVkIiwKLQkJ CWRyYWluLCBub2RyYWluLCBnb29kLCBiYWQsIGZhaWwpOwotCQl9IGVsc2UKLSNlbmRpZiAvKiAh TklDX1BBUkFWSVJUICovCiAJCW5pY19pID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBF MTAwMF9UREgoMCkpOwogCQlpZiAobmljX2kgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsgLyog WFhYIGNhbiBpdCBoYXBwZW4gPyAqLwogCQkJRCgiVERIIHdyYXAgJWQiLCBuaWNfaSk7CkBAIC0z MjQsMjEgKzIwMiwxMCBAQAogCiAJLyogZGV2aWNlLXNwZWNpZmljICovCiAJc3RydWN0IGFkYXB0 ZXIgKmFkYXB0ZXIgPSBpZnAtPmlmX3NvZnRjOwotI2lmZGVmIE5JQ19QQVJBVklSVAotCXN0cnVj dCBwYXJhdmlydF9jc2IgKmNzYiA9IGFkYXB0ZXItPmNzYjsKLQl1aW50MzJfdCBjc2JfbW9kZSA9 IGNzYiAmJiBjc2ItPmd1ZXN0X2NzYl9vbjsKLQl1aW50MzJfdCBkb19ob3N0X3J4a2ljayA9IDA7 Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAKIAlpZiAoaGVhZCA+IGxpbSkKIAkJcmV0dXJu IG5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7CiAKLSNpZmRlZiBOSUNfUEFSQVZJUlQKLQlpZiAo Y3NiX21vZGUpIHsKLQkJZm9yY2VfdXBkYXRlID0gMTsKLQkJY3NiLT5ndWVzdF9uZWVkX3J4a2lj ayA9IDA7Ci0JfQotI2VuZGlmIC8qIE5JQ19QQVJBVklSVCAqLwogCS8qIFhYWCBjaGVjayBzeW5j IG1vZGVzICovCiAJYnVzX2RtYW1hcF9zeW5jKGFkYXB0ZXItPnJ4ZG1hLmRtYV90YWcsIGFkYXB0 ZXItPnJ4ZG1hLmRtYV9tYXAsCiAJCQlCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5D X1BPU1RXUklURSk7CkBAIC0zNTcsMjMgKzIyNCw2IEBACiAJCQl1aW50MzJfdCBzdGF0ZXJyID0g bGUzMnRvaChjdXJyLT5zdGF0dXMpOwogCQkJaW50IGxlbjsKIAotI2lmZGVmIE5JQ19QQVJBVklS VAotCQkJaWYgKGNzYl9tb2RlKSB7Ci0JCQkgICAgaWYgKChzdGF0ZXJyICYgRTEwMDBfUlhEX1NU QVRfREQpID09IDApIHsKLQkJCQkvKiBkb24ndCBib3RoZXIgdG8gcmV0cnkgaWYgbW9yZSB0aGFu IDEgcGt0ICovCi0JCQkJaWYgKG4gPiAxKQotCQkJCSAgICBicmVhazsKLQkJCQljc2ItPmd1ZXN0 X25lZWRfcnhraWNrID0gMTsKLQkJCQl3bWIoKTsKLQkJCQlzdGF0ZXJyID0gbGUzMnRvaChjdXJy LT5zdGF0dXMpOwotCQkJCWlmICgoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX0REKSA9PSAwKSB7 Ci0JCQkJICAgIGJyZWFrOwotCQkJCX0gZWxzZSB7IC8qIHdlIGFyZSBnb29kICovCi0JCQkJICAg Y3NiLT5ndWVzdF9uZWVkX3J4a2ljayA9IDA7Ci0JCQkJfQotCQkJICAgIH0KLQkJCX0gZWxzZQot I2VuZGlmIC8qIE5JQ19QQVJBVklSVCAqLwogCQkJaWYgKChzdGF0ZXJyICYgRTEwMDBfUlhEX1NU QVRfREQpID09IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gPSBsZTE2dG9oKGN1cnItPmxlbmd0aCkg LSA0OyAvLyBDUkMKQEAgLTM5MCwxOCArMjQwLDYgQEAKIAkJCW5pY19pID0gbm1fbmV4dChuaWNf aSwgbGltKTsKIAkJfQogCQlpZiAobikgeyAvKiB1cGRhdGUgdGhlIHN0YXRlIHZhcmlhYmxlcyAq LwotI2lmZGVmIE5JQ19QQVJBVklSVAotCQkJaWYgKGNzYl9tb2RlKSB7Ci0JCQkgICAgaWYgKG4g PiAxKSB7Ci0JCQkJLyogbGVhdmUgb25lIHNwYXJlIGJ1ZmZlciBzbyB3ZSBhdm9pZCByeGtpY2tz ICovCi0JCQkJbm1faSA9IG5tX3ByZXYobm1faSwgbGltKTsKLQkJCQluaWNfaSA9IG5tX3ByZXYo bmljX2ksIGxpbSk7Ci0JCQkJbi0tOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJY3NiLT5ndWVzdF9u ZWVkX3J4a2ljayA9IDE7Ci0JCQkgICAgfQotCQkJfQotI2VuZGlmIC8qIE5JQ19QQVJBVklSVCAq LwogCQkJTkQoIiVkIG5ldyBwYWNrZXRzIGF0IG5pYyAlZCBubSAlZCB0YWlsICVkIiwKIAkJCQlu LAogCQkJCWFkYXB0ZXItPm5leHRfcnhfZGVzY190b19jaGVjaywKQEAgLTQ0MCwxMCArMjc4LDYg QEAKIAkJCWN1cnItPnN0YXR1cyA9IDA7CiAJCQlidXNfZG1hbWFwX3N5bmMoYWRhcHRlci0+cnh0 YWcsIHJ4YnVmLT5tYXAsCiAJCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRCk7Ci0jaWZkZWYgTklD X1BBUkFWSVJUCi0JCQlpZiAoY3NiX21vZGUgJiYgY3NiLT5ob3N0X3J4a2lja19hdCA9PSBuaWNf aSkKLQkJCQlkb19ob3N0X3J4a2ljayA9IDE7Ci0jZW5kaWYgLyogTklDX1BBUkFWSVJUICovCiAJ CQlubV9pID0gbm1fbmV4dChubV9pLCBsaW0pOwogCQkJbmljX2kgPSBubV9uZXh0KG5pY19pLCBs aW0pOwogCQl9CkBAIC00NTUsMTIgKzI4OSw2IEBACiAJCSAqIHNvIG1vdmUgbmljX2kgYmFjayBi eSBvbmUgdW5pdAogCQkgKi8KIAkJbmljX2kgPSBubV9wcmV2KG5pY19pLCBsaW0pOwotI2lmZGVm IE5JQ19QQVJBVklSVAotCQkvKiBzZXQgdW5jb25kaXRpb25hbGx5LCB0aGVuIGFsc28ga2ljayBp ZiBuZWVkZWQgKi8KLQkJaWYgKGNzYikKLQkJCWNzYi0+Z3Vlc3RfcmR0ID0gbmljX2k7Ci0JCWlm ICghY3NiX21vZGUgfHwgZG9faG9zdF9yeGtpY2spCi0jZW5kaWYgLyogTklDX1BBUkFWSVJUICov CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIEUxMDAwX1JEVCgwKSwgbmljX2kpOwog CX0KIApAQCAtNDg2LDYgKzMxNCw3IEBACiAJbmEubm1fcnhzeW5jID0gbGVtX25ldG1hcF9yeHN5 bmM7CiAJbmEubm1fcmVnaXN0ZXIgPSBsZW1fbmV0bWFwX3JlZzsKIAluYS5udW1fdHhfcmluZ3Mg PSBuYS5udW1fcnhfcmluZ3MgPSAxOworCW5hLm5tX2ludHIgPSBsZW1fbmV0bWFwX2ludHI7CiAJ bmV0bWFwX2F0dGFjaCgmbmEpOwogfQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25l dG1hcC9pZl9wdG5ldC5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3B0bmV0LmMKLS0tIHVz ci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcHRuZXQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcHRuZXQuYwkyMDE2LTEx LTIzIDE2OjU3OjU3Ljg0NDYyODAwMCArMDAwMApAQCAtMCwwICsxLDIyNzYgQEAKKy8qLQorICog Q29weXJpZ2h0IChjKSAyMDE2LCBWaW5jZW56byBNYWZmaW9uZQorICogQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMs IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAq IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ TVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJ REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE JAorICovCisKKy8qIERyaXZlciBmb3IgcHRuZXQgcGFyYXZpcnR1YWxpemVkIG5ldHdvcmsgZGV2 aWNlLiAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNs dWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2luY2x1ZGUgPHN5 cy9tYnVmLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUu aD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2lu Y2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lz L3Rhc2txdWV1ZS5oPgorI2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5o PgorI2luY2x1ZGUgPG1hY2hpbmUvc21wLmg+CisKKyNpbmNsdWRlIDx2bS91bWEuaD4KKyNpbmNs dWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKworI2luY2x1ZGUgPG5ldC9ldGhl cm5ldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNp bmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8 bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+CisjaW5jbHVkZSA8bmV0 L2lmX3ZsYW5fdmFyLmg+CisjaW5jbHVkZSA8bmV0L2JwZi5oPgorCisjaW5jbHVkZSA8bmV0aW5l dC9pbl9zeXN0bS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0 L2lwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZf dmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5o PgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4K KyNpbmNsdWRlIDxtYWNoaW5lL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2lu Y2x1ZGUgPHN5cy9ybWFuLmg+CisKKyNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgorI2luY2x1 ZGUgPGRldi9wY2kvcGNpcmVnLmg+CisKKyNpbmNsdWRlICJvcHRfaW5ldC5oIgorI2luY2x1ZGUg Im9wdF9pbmV0Ni5oIgorCisjaW5jbHVkZSA8c3lzL3NlbGluZm8uaD4KKyNpbmNsdWRlIDxuZXQv bmV0bWFwLmg+CisjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oPgorI2luY2x1ZGUg PG5ldC9uZXRtYXBfdmlydC5oPgorI2luY2x1ZGUgPGRldi9uZXRtYXAvbmV0bWFwX21lbTIuaD4K KyNpbmNsdWRlIDxkZXYvdmlydGlvL25ldHdvcmsvdmlydGlvX25ldC5oPgorCisjaWZuZGVmIFBU TkVUX0NTQl9BTExPQworI2Vycm9yICJObyBzdXBwb3J0IGZvciBvbi1kZXZpY2UgQ1NCIgorI2Vu ZGlmCisKKyNpZm5kZWYgSU5FVAorI2Vycm9yICJJTkVUIG5vdCBkZWZpbmVkLCBjYW5ub3Qgc3Vw cG9ydCBvZmZsb2FkaW5ncyIKKyNlbmRpZgorCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEw MDAwMAorc3RhdGljIHVpbnQ2NF90CXB0bmV0X2dldF9jb3VudGVyKGlmX3QsIGlmdF9jb3VudGVy KTsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBpZm5ldCAqaWZfdDsKKyNkZWZpbmUgaWZfZ2V0c29m dGMoX2lmcCkgICAoX2lmcCktPmlmX3NvZnRjCisjZW5kaWYKKworLy8jZGVmaW5lIFBUTkVUTUFQ X1NUQVRTCisvLyNkZWZpbmUgREVCVUcKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoeCkgeAor I2Vsc2UgICAvKiAhREVCVUcgKi8KKyNkZWZpbmUgREJHKHgpCisjZW5kaWYgIC8qICFERUJVRyAq LworCitleHRlcm4gaW50IHB0bmV0X3ZuZXRfaGRyOyAvKiBUdW5hYmxlIHBhcmFtZXRlciAqLwor CitzdHJ1Y3QgcHRuZXRfc29mdGM7CisKK3N0cnVjdCBwdG5ldF9xdWV1ZV9zdGF0cyB7CisJdWlu dDY0X3QJcGFja2V0czsgLyogaWZfW2lvXXBhY2tldHMgKi8KKwl1aW50NjRfdAlieXRlczsJIC8q IGlmX1tpb11ieXRlcyAqLworCXVpbnQ2NF90CWVycm9yczsJIC8qIGlmX1tpb11lcnJvcnMgKi8K Kwl1aW50NjRfdAlpcWRyb3BzOyAvKiBpZl9pcWRyb3BzICovCisJdWludDY0X3QJbWNhc3RzOyAg LyogaWZfW2lvXW1jYXN0cyAqLworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCisJdWludDY0X3QJaW50 cnM7CisJdWludDY0X3QJa2lja3M7CisjZW5kaWYgLyogUFRORVRNQVBfU1RBVFMgKi8KK307CisK K3N0cnVjdCBwdG5ldF9xdWV1ZSB7CisJc3RydWN0IHB0bmV0X3NvZnRjCQkqc2M7CisJc3RydWN0 CQkJCXJlc291cmNlICppcnE7CisJdm9pZAkJCQkqY29va2llOworCWludAkJCQlrcmluZ19pZDsK KwlzdHJ1Y3QgcHRuZXRfcmluZwkJKnB0cmluZzsKKwl1bnNpZ25lZCBpbnQJCQlraWNrOworCXN0 cnVjdCBtdHgJCQlsb2NrOworCXN0cnVjdCBidWZfcmluZwkJCSpidWZyaW5nOyAvKiBmb3IgVFgg cXVldWVzICovCisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzCXN0YXRzOworI2lmZGVmIFBUTkVU TUFQX1NUQVRTCisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzCWxhc3Rfc3RhdHM7CisjZW5kaWYg LyogUFRORVRNQVBfU1RBVFMgKi8KKwlzdHJ1Y3QgdGFza3F1ZXVlCQkqdGFza3E7CisJc3RydWN0 IHRhc2sJCQl0YXNrOworCWNoYXIJCQkJbG9ja19uYW1lWzE2XTsKK307CisKKyNkZWZpbmUgUFRO RVRfUV9MT0NLKF9wcSkJbXR4X2xvY2soJihfcHEpLT5sb2NrKQorI2RlZmluZSBQVE5FVF9RX1RS WUxPQ0soX3BxKQltdHhfdHJ5bG9jaygmKF9wcSktPmxvY2spCisjZGVmaW5lIFBUTkVUX1FfVU5M T0NLKF9wcSkJbXR4X3VubG9jaygmKF9wcSktPmxvY2spCisKK3N0cnVjdCBwdG5ldF9zb2Z0YyB7 CisJZGV2aWNlX3QJCWRldjsKKwlpZl90CQkJaWZwOworCXN0cnVjdCBpZm1lZGlhCQltZWRpYTsK KwlzdHJ1Y3QgbXR4CQlsb2NrOworCWNoYXIJCQlsb2NrX25hbWVbMTZdOworCWNoYXIJCQlod2Fk ZHJbRVRIRVJfQUREUl9MRU5dOworCisJLyogTWlycm9yIG9mIFBURkVBVCByZWdpc3Rlci4gKi8K Kwl1aW50MzJfdAkJcHRmZWF0dXJlczsKKwl1bnNpZ25lZCBpbnQJCXZuZXRfaGRyX2xlbjsKKwor CS8qIFBDSSBCQVJzIHN1cHBvcnQuICovCisJc3RydWN0IHJlc291cmNlCQkqaW9tZW07CisJc3Ry dWN0IHJlc291cmNlCQkqbXNpeF9tZW07CisKKwl1bnNpZ25lZCBpbnQJCW51bV9yaW5nczsKKwl1 bnNpZ25lZCBpbnQJCW51bV90eF9yaW5nczsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUJKnF1ZXVlczsK KwlzdHJ1Y3QgcHRuZXRfcXVldWUJKnJ4cXVldWVzOworCXN0cnVjdCBwdG5ldF9jc2IJKmNzYjsK KworCXVuc2lnbmVkIGludAkJbWluX3R4X3NwYWNlOworCisJc3RydWN0IG5ldG1hcF9wdF9ndWVz dF9hZGFwdGVyICpwdG5hOworCisJc3RydWN0IGNhbGxvdXQJCXRpY2s7CisjaWZkZWYgUFRORVRN QVBfU1RBVFMKKwlzdHJ1Y3QgdGltZXZhbAkJbGFzdF90czsKKyNlbmRpZiAvKiBQVE5FVE1BUF9T VEFUUyAqLworfTsKKworI2RlZmluZSBQVE5FVF9DT1JFX0xPQ0soX3NjKQltdHhfbG9jaygmKF9z YyktPmxvY2spCisjZGVmaW5lIFBUTkVUX0NPUkVfVU5MT0NLKF9zYykJbXR4X3VubG9jaygmKF9z YyktPmxvY2spCisKK3N0YXRpYyBpbnQJcHRuZXRfcHJvYmUoZGV2aWNlX3QpOworc3RhdGljIGlu dAlwdG5ldF9hdHRhY2goZGV2aWNlX3QpOworc3RhdGljIGludAlwdG5ldF9kZXRhY2goZGV2aWNl X3QpOworc3RhdGljIGludAlwdG5ldF9zdXNwZW5kKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRu ZXRfcmVzdW1lKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRuZXRfc2h1dGRvd24oZGV2aWNlX3Qp OworCitzdGF0aWMgdm9pZAlwdG5ldF9pbml0KHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgaW50CXB0 bmV0X2lvY3RsKGlmX3QgaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpOworc3RhdGljIGlu dAlwdG5ldF9pbml0X2xvY2tlZChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQJ cHRuZXRfc3RvcChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQJcHRuZXRfdHJh bnNtaXQoaWZfdCBpZnAsIHN0cnVjdCBtYnVmICptKTsKK3N0YXRpYyBpbnQJcHRuZXRfZHJhaW5f dHJhbnNtaXRfcXVldWUoc3RydWN0IHB0bmV0X3F1ZXVlICpwcSwKKwkJCQkJICAgdW5zaWduZWQg aW50IGJ1ZGdldCwKKwkJCQkJICAgYm9vbCBtYXlfcmVzY2hlZCk7CitzdGF0aWMgdm9pZAlwdG5l dF9xZmx1c2goaWZfdCBpZnApOworc3RhdGljIHZvaWQJcHRuZXRfdHhfdGFzayh2b2lkICpjb250 ZXh0LCBpbnQgcGVuZGluZyk7CisKK3N0YXRpYyBpbnQJcHRuZXRfbWVkaWFfY2hhbmdlKGlmX3Qg aWZwKTsKK3N0YXRpYyB2b2lkCXB0bmV0X21lZGlhX3N0YXR1cyhpZl90IGlmcCwgc3RydWN0IGlm bWVkaWFyZXEgKmlmbXIpOworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCitzdGF0aWMgdm9pZAlwdG5l dF90aWNrKHZvaWQgKm9wYXF1ZSk7CisjZW5kaWYKKworc3RhdGljIGludAlwdG5ldF9pcnFzX2lu aXQoc3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CitzdGF0aWMgdm9pZAlwdG5ldF9pcnFzX2Zpbmko c3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CisKK3N0YXRpYyB1aW50MzJfdCBwdG5ldF9ubV9wdGN0 bChpZl90IGlmcCwgdWludDMyX3QgY21kKTsKK3N0YXRpYyBpbnQJcHRuZXRfbm1fY29uZmlnKHN0 cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHVuc2lnbmVkICp0eHIsCisJCQkJdW5zaWduZWQgKnR4 ZCwgdW5zaWduZWQgKnJ4ciwgdW5zaWduZWQgKnJ4ZCk7CitzdGF0aWMgdm9pZAlwdG5ldF91cGRh dGVfdm5ldF9oZHIoc3RydWN0IHB0bmV0X3NvZnRjICpzYyk7CitzdGF0aWMgaW50CXB0bmV0X25t X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZik7CitzdGF0aWMg aW50CXB0bmV0X25tX3R4c3luYyhzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdz KTsKK3N0YXRpYyBpbnQJcHRuZXRfbm1fcnhzeW5jKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5n LCBpbnQgZmxhZ3MpOworCitzdGF0aWMgdm9pZAlwdG5ldF90eF9pbnRyKHZvaWQgKm9wYXF1ZSk7 CitzdGF0aWMgdm9pZAlwdG5ldF9yeF9pbnRyKHZvaWQgKm9wYXF1ZSk7CisKK3N0YXRpYyB1bnNp Z25lZAlwdG5ldF9yeF9kaXNjYXJkKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkJCSB1 bnNpZ25lZCBpbnQgaGVhZCk7CitzdGF0aWMgaW50CXB0bmV0X3J4X2VvZihzdHJ1Y3QgcHRuZXRf cXVldWUgKnBxLCB1bnNpZ25lZCBpbnQgYnVkZ2V0LAorCQkJICAgICBib29sIG1heV9yZXNjaGVk KTsKK3N0YXRpYyB2b2lkCXB0bmV0X3J4X3Rhc2sodm9pZCAqY29udGV4dCwgaW50IHBlbmRpbmcp OworCisjaWZkZWYgREVWSUNFX1BPTExJTkcKK3N0YXRpYyBwb2xsX2hhbmRsZXJfdCBwdG5ldF9w b2xsOworI2VuZGlmCisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgcHRuZXRfbWV0aG9kc1tdID0g eworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQkJcHRuZXRfcHJvYmUpLAorCURFVk1FVEhPRChk ZXZpY2VfYXR0YWNoLAkJcHRuZXRfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJ CXB0bmV0X2RldGFjaCksCisJREVWTUVUSE9EKGRldmljZV9zdXNwZW5kLAkJcHRuZXRfc3VzcGVu ZCksCisJREVWTUVUSE9EKGRldmljZV9yZXN1bWUsCQlwdG5ldF9yZXN1bWUpLAorCURFVk1FVEhP RChkZXZpY2Vfc2h1dGRvd24sCQlwdG5ldF9zaHV0ZG93biksCisJREVWTUVUSE9EX0VORAorfTsK Kworc3RhdGljIGRyaXZlcl90IHB0bmV0X2RyaXZlciA9IHsKKwkicHRuZXQiLAorCXB0bmV0X21l dGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBwdG5ldF9zb2Z0YykKK307CisKKy8qIFdlIHVzZSAoU0lf T1JERVJfTUlERExFKzIpIGhlcmUsIHNlZSBERVZfTU9EVUxFX09SREVSRUQoKSBpbnZvY2F0aW9u LiAqLworc3RhdGljIGRldmNsYXNzX3QgcHRuZXRfZGV2Y2xhc3M7CitEUklWRVJfTU9EVUxFX09S REVSRUQocHRuZXQsIHBjaSwgcHRuZXRfZHJpdmVyLCBwdG5ldF9kZXZjbGFzcywKKwkJICAgICAg TlVMTCwgTlVMTCwgU0lfT1JERVJfTUlERExFICsgMik7CisKK3N0YXRpYyBpbnQKK3B0bmV0X3By b2JlKGRldmljZV90IGRldikKK3sKKwlpZiAocGNpX2dldF92ZW5kb3IoZGV2KSAhPSBQVE5FVE1B UF9QQ0lfVkVORE9SX0lEIHx8CisJCXBjaV9nZXRfZGV2aWNlKGRldikgIT0gUFRORVRNQVBfUENJ X05FVElGX0lEKSB7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCWRldmljZV9zZXRfZGVzYyhk ZXYsICJwdG5ldCBuZXR3b3JrIGFkYXB0ZXIiKTsKKworCXJldHVybiAoQlVTX1BST0JFX0RFRkFV TFQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHRuZXRfa2ljayhzdHJ1Y3QgcHRuZXRfcXVl dWUgKnBxKQoreworI2lmZGVmIFBUTkVUTUFQX1NUQVRTCisJcHEtPnN0YXRzLmtpY2tzICsrOwor I2VuZGlmIC8qIFBUTkVUTUFQX1NUQVRTICovCisJYnVzX3dyaXRlXzQocHEtPnNjLT5pb21lbSwg cHEtPmtpY2ssIDApOworfQorCisjZGVmaW5lIFBUTkVUX0JVRl9SSU5HX1NJWkUJNDA5NgorI2Rl ZmluZSBQVE5FVF9SWF9CVURHRVQJCTUxMgorI2RlZmluZSBQVE5FVF9SWF9CQVRDSAkJMQorI2Rl ZmluZSBQVE5FVF9UWF9CVURHRVQJCTUxMgorI2RlZmluZSBQVE5FVF9UWF9CQVRDSAkJNjQKKyNk ZWZpbmUgUFRORVRfSERSX1NJWkUJCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4 YnVmKQorI2RlZmluZSBQVE5FVF9NQVhfUEtUX1NJWkUJNjU1MzYKKworI2RlZmluZSBQVE5FVF9D U1VNX09GRkxPQUQJKENTVU1fVENQIHwgQ1NVTV9VRFAgfCBDU1VNX1NDVFApCisjZGVmaW5lIFBU TkVUX0NTVU1fT0ZGTE9BRF9JUFY2CShDU1VNX1RDUF9JUFY2IHwgQ1NVTV9VRFBfSVBWNiB8XAor CQkJCSBDU1VNX1NDVFBfSVBWNikKKyNkZWZpbmUgUFRORVRfQUxMX09GRkxPQUQJKENTVU1fVFNP IHwgUFRORVRfQ1NVTV9PRkZMT0FEIHxcCisJCQkJIFBUTkVUX0NTVU1fT0ZGTE9BRF9JUFY2KQor CitzdGF0aWMgaW50CitwdG5ldF9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXVpbnQzMl90IHB0 ZmVhdHVyZXMgPSAwOworCXVuc2lnbmVkIGludCBudW1fcnhfcmluZ3MsIG51bV90eF9yaW5nczsK KwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgbmFfYXJnOworCXVuc2lnbmVkIGludCBuaWZwX29mZnNl dDsKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjOworCWlmX3QgaWZwOworCXVpbnQzMl90IG1hY3Jl ZzsKKwlpbnQgZXJyLCByaWQ7CisJaW50IGk7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2 KTsKKwlzYy0+ZGV2ID0gZGV2OworCisJLyogU2V0dXAgUENJIHJlc291cmNlcy4gKi8KKwlwY2lf ZW5hYmxlX2J1c21hc3RlcihkZXYpOworCisJcmlkID0gUENJUl9CQVIoUFRORVRNQVBfSU9fUENJ X0JBUik7CisJc2MtPmlvbWVtID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNf SU9QT1JULCAmcmlkLAorCQkJCQkgICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aW9tZW0gPT0gTlVM TCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBtYXAgSS9PIEJBUlxuIik7CisJ CXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIE5lZ290aWF0ZSBmZWF0dXJlcyB3aXRoIHRoZSBo eXBlcnZpc29yLiAqLworCWlmIChwdG5ldF92bmV0X2hkcikgeworCQlwdGZlYXR1cmVzIHw9IFBU TkVUTUFQX0ZfVk5FVF9IRFI7CisJfQorCWJ1c193cml0ZV80KHNjLT5pb21lbSwgUFRORVRfSU9f UFRGRUFULCBwdGZlYXR1cmVzKTsgLyogd2FudGVkICovCisJcHRmZWF0dXJlcyA9IGJ1c19yZWFk XzQoc2MtPmlvbWVtLCBQVE5FVF9JT19QVEZFQVQpOyAvKiBhY2tlZCAqLworCXNjLT5wdGZlYXR1 cmVzID0gcHRmZWF0dXJlczsKKworCS8qIEFsbG9jYXRlIENTQiBhbmQgY2Fycnkgb3V0IENTQiBh bGxvY2F0aW9uIHByb3RvY29sIChDU0JCQUggZmlyc3QsCisJICogdGhlbiBDU0JCQUwpLiAqLwor CXNjLT5jc2IgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwdG5ldF9jc2IpLCBNX0RFVkJVRiwKKwkJ CSBNX05PV0FJVCB8IE1fWkVSTyk7CisJaWYgKHNjLT5jc2IgPT0gTlVMTCkgeworCQlkZXZpY2Vf cHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBDU0JcbiIpOworCQllcnIgPSBFTk9NRU07 CisJCWdvdG8gZXJyX3BhdGg7CisJfQorCisJeworCQkvKgorCQkgKiBXZSB1c2UgdWludDY0X3Qg cmF0aGVyIHRoYW4gdm1fcGFkZHJfdCBzaW5jZSB3ZQorCQkgKiBuZWVkIDY0IGJpdCBhZGRyZXNz ZXMgZXZlbiBvbiAzMiBiaXQgcGxhdGZvcm1zLgorCQkgKi8KKwkJdWludDY0X3QgcGFkZHIgPSB2 dG9waHlzKHNjLT5jc2IpOworCisJCWJ1c193cml0ZV80KHNjLT5pb21lbSwgUFRORVRfSU9fQ1NC QkFILAorCQkJICAgIChwYWRkciA+PiAzMikgJiAweGZmZmZmZmZmKTsKKwkJYnVzX3dyaXRlXzQo c2MtPmlvbWVtLCBQVE5FVF9JT19DU0JCQUwsIHBhZGRyICYgMHhmZmZmZmZmZik7CisJfQorCisJ bnVtX3R4X3JpbmdzID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9SSU5H Uyk7CisJbnVtX3J4X3JpbmdzID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9S WF9SSU5HUyk7CisJc2MtPm51bV9yaW5ncyA9IG51bV90eF9yaW5ncyArIG51bV9yeF9yaW5nczsK KwlzYy0+bnVtX3R4X3JpbmdzID0gbnVtX3R4X3JpbmdzOworCisJLyogQWxsb2NhdGUgYW5kIGlu aXRpYWxpemUgcGVyLXF1ZXVlIGRhdGEgc3RydWN0dXJlcy4gKi8KKwlzYy0+cXVldWVzID0gbWFs bG9jKHNpemVvZihzdHJ1Y3QgcHRuZXRfcXVldWUpICogc2MtPm51bV9yaW5ncywKKwkJCSAgICBN X0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChzYy0+cXVldWVzID09IE5VTEwpIHsK KwkJZXJyID0gRU5PTUVNOworCQlnb3RvIGVycl9wYXRoOworCX0KKwlzYy0+cnhxdWV1ZXMgPSBz Yy0+cXVldWVzICsgbnVtX3R4X3JpbmdzOworCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmlu Z3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisK KwkJcHEtPnNjID0gc2M7CisJCXBxLT5rcmluZ19pZCA9IGk7CisJCXBxLT5raWNrID0gUFRORVRf SU9fS0lDS19CQVNFICsgNCAqIGk7CisJCXBxLT5wdHJpbmcgPSBzYy0+Y3NiLT5yaW5ncyArIGk7 CisJCXNucHJpbnRmKHBxLT5sb2NrX25hbWUsIHNpemVvZihwcS0+bG9ja19uYW1lKSwgIiVzLSVk IiwKKwkJCSBkZXZpY2VfZ2V0X25hbWV1bml0KGRldiksIGkpOworCQltdHhfaW5pdCgmcHEtPmxv Y2ssIHBxLT5sb2NrX25hbWUsIE5VTEwsIE1UWF9ERUYpOworCQlpZiAoaSA+PSBudW1fdHhfcmlu Z3MpIHsKKwkJCS8qIFJYIHF1ZXVlOiBmaXgga3JpbmdfaWQuICovCisJCQlwcS0+a3JpbmdfaWQg LT0gbnVtX3R4X3JpbmdzOworCQl9IGVsc2UgeworCQkJLyogVFggcXVldWU6IGFsbG9jYXRlIGJ1 Zl9yaW5nLiAqLworCQkJcHEtPmJ1ZnJpbmcgPSBidWZfcmluZ19hbGxvYyhQVE5FVF9CVUZfUklO R19TSVpFLAorCQkJCQkJTV9ERVZCVUYsIE1fTk9XQUlULCAmcHEtPmxvY2spOworCQkJaWYgKHBx LT5idWZyaW5nID09IE5VTEwpIHsKKwkJCQllcnIgPSBFTk9NRU07CisJCQkJZ290byBlcnJfcGF0 aDsKKwkJCX0KKwkJfQorCX0KKworCXNjLT5taW5fdHhfc3BhY2UgPSA2NDsgLyogU2FmZSBpbml0 aWFsIHZhbHVlLiAqLworCisJZXJyID0gcHRuZXRfaXJxc19pbml0KHNjKTsKKwlpZiAoZXJyKSB7 CisJCWdvdG8gZXJyX3BhdGg7CisJfQorCisJLyogU2V0dXAgRXRoZXJuZXQgaW50ZXJmYWNlLiAq LworCXNjLT5pZnAgPSBpZnAgPSBpZl9hbGxvYyhJRlRfRVRIRVIpOworCWlmIChpZnAgPT0gTlVM TCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBpZm5ldFxuIik7 CisJCWVyciA9IEVOT01FTTsKKwkJZ290byBlcnJfcGF0aDsKKwl9CisKKwlpZl9pbml0bmFtZShp ZnAsIGRldmljZV9nZXRfbmFtZShkZXYpLCBkZXZpY2VfZ2V0X3VuaXQoZGV2KSk7CisJaWZwLT5p Zl9iYXVkcmF0ZSA9IElGX0dicHMoMTApOworCWlmcC0+aWZfc29mdGMgPSBzYzsKKwlpZnAtPmlm X2ZsYWdzID0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1QgfCBJRkZfU0lNUExFWDsKKwlp ZnAtPmlmX2luaXQgPSBwdG5ldF9pbml0OworCWlmcC0+aWZfaW9jdGwgPSBwdG5ldF9pb2N0bDsK KyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwCisJaWZwLT5pZl9nZXRfY291bnRlciA9 IHB0bmV0X2dldF9jb3VudGVyOworI2VuZGlmCisJaWZwLT5pZl90cmFuc21pdCA9IHB0bmV0X3Ry YW5zbWl0OworCWlmcC0+aWZfcWZsdXNoID0gcHRuZXRfcWZsdXNoOworCisJaWZtZWRpYV9pbml0 KCZzYy0+bWVkaWEsIElGTV9JTUFTSywgcHRuZXRfbWVkaWFfY2hhbmdlLAorCQkgICAgIHB0bmV0 X21lZGlhX3N0YXR1cyk7CisJaWZtZWRpYV9hZGQoJnNjLT5tZWRpYSwgSUZNX0VUSEVSIHwgSUZN XzEwR19UIHwgSUZNX0ZEWCwgMCwgTlVMTCk7CisJaWZtZWRpYV9zZXQoJnNjLT5tZWRpYSwgSUZN X0VUSEVSIHwgSUZNXzEwR19UIHwgSUZNX0ZEWCk7CisKKwltYWNyZWcgPSBidXNfcmVhZF80KHNj LT5pb21lbSwgUFRORVRfSU9fTUFDX0hJKTsKKwlzYy0+aHdhZGRyWzBdID0gKG1hY3JlZyA+PiA4 KSAmIDB4ZmY7CisJc2MtPmh3YWRkclsxXSA9IG1hY3JlZyAmIDB4ZmY7CisJbWFjcmVnID0gYnVz X3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX01BQ19MTyk7CisJc2MtPmh3YWRkclsyXSA9ICht YWNyZWcgPj4gMjQpICYgMHhmZjsKKwlzYy0+aHdhZGRyWzNdID0gKG1hY3JlZyA+PiAxNikgJiAw eGZmOworCXNjLT5od2FkZHJbNF0gPSAobWFjcmVnID4+IDgpICYgMHhmZjsKKwlzYy0+aHdhZGRy WzVdID0gbWFjcmVnICYgMHhmZjsKKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgc2MtPmh3YWRkcik7 CisKKwlpZnAtPmlmX2hkcmxlbiA9IHNpemVvZihzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIpOwor CWlmcC0+aWZfY2FwYWJpbGl0aWVzIHw9IElGQ0FQX0pVTUJPX01UVSB8IElGQ0FQX1ZMQU5fTVRV OworCisJaWYgKHNjLT5wdGZlYXR1cmVzICYgUFRORVRNQVBfRl9WTkVUX0hEUikgeworCQkvKiBT aW1pbGFybHkgdG8gd2hhdCB0aGUgdnRuZXQgZHJpdmVyIGRvZXMsIHdlIGNhbiBlbXVsYXRlCisJ CSAqIFZMQU4gb2ZmbG9hZGluZ3MgYnkgaW5zZXJ0aW5nIGFuZCByZW1vdmluZyB0aGUgODAyLjFR CisJCSAqIGhlYWRlciBkdXJpbmcgdHJhbnNtaXQgYW5kIHJlY2VpdmUuIFdlIGFyZSB0aGVuIGFi bGUKKwkJICogdG8gZG8gY2hlY2tzdW0gb2ZmbG9hZGluZyBvZiBWTEFOIGZyYW1lcy4gKi8KKwkJ aWZwLT5pZl9jYXBhYmlsaXRpZXMgfD0gSUZDQVBfSFdDU1VNIHwgSUZDQVBfSFdDU1VNX0lQVjYK KwkJCQkJfCBJRkNBUF9WTEFOX0hXQ1NVTQorCQkJCQl8IElGQ0FQX1RTTyB8IElGQ0FQX0xSTwor CQkJCQl8IElGQ0FQX1ZMQU5fSFdUU08KKwkJCQkJfCBJRkNBUF9WTEFOX0hXVEFHR0lORzsKKwl9 CisKKwlpZnAtPmlmX2NhcGVuYWJsZSA9IGlmcC0+aWZfY2FwYWJpbGl0aWVzOworI2lmZGVmIERF VklDRV9QT0xMSU5HCisJLyogRG9uJ3QgZW5hYmxlIHBvbGxpbmcgYnkgZGVmYXVsdC4gKi8KKwlp ZnAtPmlmX2NhcGFiaWxpdGllcyB8PSBJRkNBUF9QT0xMSU5HOworI2VuZGlmCisJc25wcmludGYo c2MtPmxvY2tfbmFtZSwgc2l6ZW9mKHNjLT5sb2NrX25hbWUpLAorCQkgIiVzIiwgZGV2aWNlX2dl dF9uYW1ldW5pdChkZXYpKTsKKwltdHhfaW5pdCgmc2MtPmxvY2ssIHNjLT5sb2NrX25hbWUsICJw dG5ldCBjb3JlIGxvY2siLCBNVFhfREVGKTsKKwljYWxsb3V0X2luaXRfbXR4KCZzYy0+dGljaywg JnNjLT5sb2NrLCAwKTsKKworCS8qIFByZXBhcmUgYSBuZXRtYXBfYWRhcHRlciBzdHJ1Y3QgaW5z dGFuY2UgdG8gZG8gbmV0bWFwX2F0dGFjaCgpLiAqLworCW5pZnBfb2Zmc2V0ID0gYnVzX3JlYWRf NChzYy0+aW9tZW0sIFBUTkVUX0lPX05JRlBfT0ZTKTsKKwltZW1zZXQoJm5hX2FyZywgMCwgc2l6 ZW9mKG5hX2FyZykpOworCW5hX2FyZy5pZnAgPSBpZnA7CisJbmFfYXJnLm51bV90eF9kZXNjID0g YnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9TTE9UUyk7CisJbmFfYXJnLm51 bV9yeF9kZXNjID0gYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX05VTV9SWF9TTE9UUyk7 CisJbmFfYXJnLm51bV90eF9yaW5ncyA9IG51bV90eF9yaW5nczsKKwluYV9hcmcubnVtX3J4X3Jp bmdzID0gbnVtX3J4X3JpbmdzOworCW5hX2FyZy5ubV9jb25maWcgPSBwdG5ldF9ubV9jb25maWc7 CisJbmFfYXJnLm5tX2tyaW5nc19jcmVhdGUgPSBwdG5ldF9ubV9rcmluZ3NfY3JlYXRlOworCW5h X2FyZy5ubV9rcmluZ3NfZGVsZXRlID0gcHRuZXRfbm1fa3JpbmdzX2RlbGV0ZTsKKwluYV9hcmcu bm1fZHRvciA9IHB0bmV0X25tX2R0b3I7CisJbmFfYXJnLm5tX3JlZ2lzdGVyID0gcHRuZXRfbm1f cmVnaXN0ZXI7CisJbmFfYXJnLm5tX3R4c3luYyA9IHB0bmV0X25tX3R4c3luYzsKKwluYV9hcmcu bm1fcnhzeW5jID0gcHRuZXRfbm1fcnhzeW5jOworCisJbmV0bWFwX3B0X2d1ZXN0X2F0dGFjaCgm bmFfYXJnLCBzYy0+Y3NiLCBuaWZwX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnVzX3JlYWRfNChzYy0+aW9tZW0sIFBUTkVUX0lPX0hPU1RNRU1JRCkpOworCisJLyog Tm93IGEgbmV0bWFwIGFkYXB0ZXIgZm9yIHRoaXMgaWZwIGhhcyBiZWVuIGFsbG9jYXRlZCwgYW5k IGl0CisJICogY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggTkEoaWZwKS4gV2UgYWxzbyBoYXZlIHRv IGluaXRpYWxpemUgdGhlIENTQgorCSAqIHBvaW50ZXIuICovCisJc2MtPnB0bmEgPSAoc3RydWN0 IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICopTkEoaWZwKTsKKworCS8qIElmIHZpcnRpby1uZXQg aGVhZGVyIHdhcyBuZWdvdGlhdGVkLCBzZXQgdGhlIHZpcnRfaGRyX2xlbiBmaWVsZCBpbgorCSAq IHRoZSBuZXRtYXAgYWRhcHRlciwgdG8gaW5mb3JtIHVzZXJzIHRoYXQgdGhpcyBuZXRtYXAgYWRh cHRlciByZXF1aXJlcworCSAqIHRoZSBhcHBsaWNhdGlvbiB0byBkZWFsIHdpdGggdGhlIGhlYWRl cnMuICovCisJcHRuZXRfdXBkYXRlX3ZuZXRfaGRyKHNjKTsKKworCWRldmljZV9wcmludGYoZGV2 LCAiJXMoKSBjb21wbGV0ZWRcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAoMCk7CisKK2Vycl9w YXRoOgorCXB0bmV0X2RldGFjaChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQK K3B0bmV0X2RldGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9 IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlpbnQgaTsKKworI2lmZGVmIERFVklDRV9QT0xMSU5H CisJaWYgKHNjLT5pZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQX1BPTExJTkcpIHsKKwkJZXRoZXJf cG9sbF9kZXJlZ2lzdGVyKHNjLT5pZnApOworCX0KKyNlbmRpZgorCWNhbGxvdXRfZHJhaW4oJnNj LT50aWNrKTsKKworCWlmIChzYy0+cXVldWVzKSB7CisJCS8qIERyYWluIHRhc2txdWV1ZXMgYmVm b3JlIGNhbGxpbmcgaWZfZGV0YWNoLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9yaW5n czsgaSsrKSB7CisJCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisK KwkJCWlmIChwcS0+dGFza3EpIHsKKwkJCQl0YXNrcXVldWVfZHJhaW4ocHEtPnRhc2txLCAmcHEt PnRhc2spOworCQkJfQorCQl9CisJfQorCisJaWYgKHNjLT5pZnApIHsKKwkJZXRoZXJfaWZkZXRh Y2goc2MtPmlmcCk7CisKKwkJLyogVW5pbml0aWFsaXplIG5ldG1hcCBhZGFwdGVycyBmb3IgdGhp cyBkZXZpY2UuICovCisJCW5ldG1hcF9kZXRhY2goc2MtPmlmcCk7CisKKwkJaWZtZWRpYV9yZW1v dmVhbGwoJnNjLT5tZWRpYSk7CisJCWlmX2ZyZWUoc2MtPmlmcCk7CisJCXNjLT5pZnAgPSBOVUxM OworCX0KKworCXB0bmV0X2lycXNfZmluaShzYyk7CisKKwlpZiAoc2MtPmNzYikgeworCQlidXNf d3JpdGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX0NTQkJBSCwgMCk7CisJCWJ1c193cml0ZV80KHNj LT5pb21lbSwgUFRORVRfSU9fQ1NCQkFMLCAwKTsKKwkJZnJlZShzYy0+Y3NiLCBNX0RFVkJVRik7 CisJCXNjLT5jc2IgPSBOVUxMOworCX0KKworCWlmIChzYy0+cXVldWVzKSB7CisJCWZvciAoaSA9 IDA7IGkgPCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJCXN0cnVjdCBwdG5ldF9xdWV1ZSAqcHEg PSBzYy0+cXVldWVzICsgaTsKKworCQkJaWYgKG10eF9pbml0aWFsaXplZCgmcHEtPmxvY2spKSB7 CisJCQkJbXR4X2Rlc3Ryb3koJnBxLT5sb2NrKTsKKwkJCX0KKwkJCWlmIChwcS0+YnVmcmluZyAh PSBOVUxMKSB7CisJCQkJYnVmX3JpbmdfZnJlZShwcS0+YnVmcmluZywgTV9ERVZCVUYpOworCQkJ fQorCQl9CisJCWZyZWUoc2MtPnF1ZXVlcywgTV9ERVZCVUYpOworCQlzYy0+cXVldWVzID0gTlVM TDsKKwl9CisKKwlpZiAoc2MtPmlvbWVtKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwg U1lTX1JFU19JT1BPUlQsCisJCQkJICAgICBQQ0lSX0JBUihQVE5FVE1BUF9JT19QQ0lfQkFSKSwg c2MtPmlvbWVtKTsKKwkJc2MtPmlvbWVtID0gTlVMTDsKKwl9CisKKwltdHhfZGVzdHJveSgmc2Mt PmxvY2spOworCisJZGV2aWNlX3ByaW50ZihkZXYsICIlcygpIGNvbXBsZXRlZFxuIiwgX19mdW5j X18pOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcHRuZXRfc3VzcGVuZChkZXZp Y2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dl dF9zb2Z0YyhkZXYpOworCSh2b2lkKXNjOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu dAorcHRuZXRfcmVzdW1lKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNj OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJKHZvaWQpc2M7CisKKwlyZXR1cm4g KDApOworfQorCitzdGF0aWMgaW50CitwdG5ldF9zaHV0ZG93bihkZXZpY2VfdCBkZXYpCit7CisJ LyoKKwkgKiBTdXNwZW5kIGFscmVhZHkgZG9lcyBhbGwgb2Ygd2hhdCB3ZSBuZWVkIHRvCisJICog ZG8gaGVyZTsgd2UganVzdCBuZXZlciBleHBlY3QgdG8gYmUgcmVzdW1lZC4KKwkgKi8KKwlyZXR1 cm4gKHB0bmV0X3N1c3BlbmQoZGV2KSk7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X2lycXNfaW5p dChzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKQoreworCWludCByaWQgPSBQQ0lSX0JBUihQVE5FVE1B UF9NU0lYX1BDSV9CQVIpOworCWludCBudmVjcyA9IHNjLT5udW1fcmluZ3M7CisJZGV2aWNlX3Qg ZGV2ID0gc2MtPmRldjsKKwlpbnQgZXJyID0gRU5PU1BDOworCWludCBjcHVfY3VyOworCWludCBp OworCisJaWYgKHBjaV9maW5kX2NhcChkZXYsIFBDSVlfTVNJWCwgTlVMTCkgIT0gMCkgIHsKKwkJ ZGV2aWNlX3ByaW50ZihkZXYsICJDb3VsZCBub3QgZmluZCBNU0ktWCBjYXBhYmlsaXR5XG4iKTsK KwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPm1zaXhfbWVtID0gYnVzX2FsbG9jX3Jlc291 cmNlX2FueShkZXYsIFNZU19SRVNfTUVNT1JZLAorCQkJCQkgICAgICAmcmlkLCBSRl9BQ1RJVkUp OworCWlmIChzYy0+bXNpeF9tZW0gPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkZh aWxlZCB0byBhbGxvY2F0ZSBNU0lYIFBDSSBCQVJcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9 CisKKwlpZiAocGNpX21zaXhfY291bnQoZGV2KSA8IG52ZWNzKSB7CisJCWRldmljZV9wcmludGYo ZGV2LCAiTm90IGVub3VnaCBNU0ktWCB2ZWN0b3JzXG4iKTsKKwkJZ290byBlcnJfcGF0aDsKKwl9 CisKKwllcnIgPSBwY2lfYWxsb2NfbXNpeChkZXYsICZudmVjcyk7CisJaWYgKGVycikgeworCQlk ZXZpY2VfcHJpbnRmKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNU0ktWCB2ZWN0b3JzXG4iKTsK KwkJZ290byBlcnJfcGF0aDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnZlY3M7IGkrKykgewor CQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisKKwkJcmlkID0gaSAr IDE7CisJCXBxLT5pcnEgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEs ICZyaWQsCisJCQkJCQkgUkZfQUNUSVZFKTsKKwkJaWYgKHBxLT5pcnEgPT0gTlVMTCkgeworCQkJ ZGV2aWNlX3ByaW50ZihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJydXB0ICIKKwkJCQkJ ICAgImZvciBxdWV1ZSAjJWRcbiIsIGkpOworCQkJZXJyID0gRU5PU1BDOworCQkJZ290byBlcnJf cGF0aDsKKwkJfQorCX0KKworCWNwdV9jdXIgPSBDUFVfRklSU1QoKTsKKwlmb3IgKGkgPSAwOyBp IDwgbnZlY3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyAr IGk7CisJCXZvaWQgKCpoYW5kbGVyKSh2b2lkICopID0gcHRuZXRfdHhfaW50cjsKKworCQlpZiAo aSA+PSBzYy0+bnVtX3R4X3JpbmdzKSB7CisJCQloYW5kbGVyID0gcHRuZXRfcnhfaW50cjsKKwkJ fQorCQllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHBxLT5pcnEsIElOVFJfVFlQRV9ORVQgfCBJ TlRSX01QU0FGRSwKKwkJCQkgICAgIE5VTEwgLyogaW50cl9maWx0ZXIgKi8sIGhhbmRsZXIsCisJ CQkJICAgICBwcSwgJnBxLT5jb29raWUpOworCQlpZiAoZXJyKSB7CisJCQlkZXZpY2VfcHJpbnRm KGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpbnRyIGhhbmRsZXIgIgorCQkJCQkgICAiZm9yIHF1 ZXVlICMlZFxuIiwgaSk7CisJCQlnb3RvIGVycl9wYXRoOworCQl9CisKKwkJYnVzX2Rlc2NyaWJl X2ludHIoZGV2LCBwcS0+aXJxLCBwcS0+Y29va2llLCAicSVkIiwgaSk7CisjaWYgMAorCQlidXNf YmluZF9pbnRyKHNjLT5kZXYsIHBxLT5pcnEsIGNwdV9jdXIpOworI2VuZGlmCisJCWNwdV9jdXIg PSBDUFVfTkVYVChjcHVfY3VyKTsKKwl9CisKKwlkZXZpY2VfcHJpbnRmKGRldiwgIkFsbG9jYXRl ZCAlZCBNU0ktWCB2ZWN0b3JzXG4iLCBudmVjcyk7CisKKwljcHVfY3VyID0gQ1BVX0ZJUlNUKCk7 CisJZm9yIChpID0gMDsgaSA8IG52ZWNzOyBpKyspIHsKKwkJc3RydWN0IHB0bmV0X3F1ZXVlICpw cSA9IHNjLT5xdWV1ZXMgKyBpOworCQlzdGF0aWMgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKmNvbnRl eHQsIGludCBwZW5kaW5nKTsKKworCQloYW5kbGVyID0gKGkgPCBzYy0+bnVtX3R4X3JpbmdzKSA/ IHB0bmV0X3R4X3Rhc2sgOiBwdG5ldF9yeF90YXNrOworCisJCVRBU0tfSU5JVCgmcHEtPnRhc2ss IDAsIGhhbmRsZXIsIHBxKTsKKwkJcHEtPnRhc2txID0gdGFza3F1ZXVlX2NyZWF0ZV9mYXN0KCJw dG5ldF9xdWV1ZSIsIE1fTk9XQUlULAorCQkJCQl0YXNrcXVldWVfdGhyZWFkX2VucXVldWUsICZw cS0+dGFza3EpOworCQl0YXNrcXVldWVfc3RhcnRfdGhyZWFkcygmcHEtPnRhc2txLCAxLCBQSV9O RVQsICIlcy1wcS0lZCIsCisJCQkJCWRldmljZV9nZXRfbmFtZXVuaXQoc2MtPmRldiksIGNwdV9j dXIpOworCQljcHVfY3VyID0gQ1BVX05FWFQoY3B1X2N1cik7CisJfQorCisJcmV0dXJuIDA7Citl cnJfcGF0aDoKKwlwdG5ldF9pcnFzX2Zpbmkoc2MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyB2b2lkCitwdG5ldF9pcnFzX2Zpbmkoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwlkZXZp Y2VfdCBkZXYgPSBzYy0+ZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1f cmluZ3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7 CisKKwkJaWYgKHBxLT50YXNrcSkgeworCQkJdGFza3F1ZXVlX2ZyZWUocHEtPnRhc2txKTsKKwkJ CXBxLT50YXNrcSA9IE5VTEw7CisJCX0KKworCQlpZiAocHEtPmNvb2tpZSkgeworCQkJYnVzX3Rl YXJkb3duX2ludHIoZGV2LCBwcS0+aXJxLCBwcS0+Y29va2llKTsKKwkJCXBxLT5jb29raWUgPSBO VUxMOworCQl9CisKKwkJaWYgKHBxLT5pcnEpIHsKKwkJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRl diwgU1lTX1JFU19JUlEsIGkgKyAxLCBwcS0+aXJxKTsKKwkJCXBxLT5pcnEgPSBOVUxMOworCQl9 CisJfQorCisJaWYgKHNjLT5tc2l4X21lbSkgeworCQlwY2lfcmVsZWFzZV9tc2koZGV2KTsKKwor CQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLAorCQkJCSAgICAgUENJ Ul9CQVIoUFRORVRNQVBfTVNJWF9QQ0lfQkFSKSwKKwkJCQkgICAgIHNjLT5tc2l4X21lbSk7CisJ CXNjLT5tc2l4X21lbSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZAorcHRuZXRfaW5pdCh2 b2lkICpvcGFxdWUpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9IG9wYXF1ZTsKKworCVBU TkVUX0NPUkVfTE9DSyhzYyk7CisJcHRuZXRfaW5pdF9sb2NrZWQoc2MpOworCVBUTkVUX0NPUkVf VU5MT0NLKHNjKTsKK30KKworc3RhdGljIGludAorcHRuZXRfaW9jdGwoaWZfdCBpZnAsIHVfbG9u ZyBjbWQsIGNhZGRyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0 c29mdGMoaWZwKTsKKwlkZXZpY2VfdCBkZXYgPSBzYy0+ZGV2OworCXN0cnVjdCBpZnJlcSAqaWZy ID0gKHN0cnVjdCBpZnJlcSAqKWRhdGE7CisJaW50IG1hc2ssIGVyciA9IDA7CisKKwlzd2l0Y2gg KGNtZCkgeworCWNhc2UgU0lPQ1NJRkZMQUdTOgorCQlkZXZpY2VfcHJpbnRmKGRldiwgIlNJT0NT SUZGTEFHUyAleFxuIiwgaWZwLT5pZl9mbGFncyk7CisJCVBUTkVUX0NPUkVfTE9DSyhzYyk7CisJ CWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSB7CisJCQkvKiBOZXR3b3JrIHN0YWNrIHdhbnRz IHRoZSBpZmYgdG8gYmUgdXAuICovCisJCQllcnIgPSBwdG5ldF9pbml0X2xvY2tlZChzYyk7CisJ CX0gZWxzZSB7CisJCQkvKiBOZXR3b3JrIHN0YWNrIHdhbnRzIHRoZSBpZmYgdG8gYmUgZG93bi4g Ki8KKwkJCWVyciA9IHB0bmV0X3N0b3Aoc2MpOworCQl9CisJCS8qIFdlIGRvbid0IG5lZWQgdG8g ZG8gbm90aGluZyB0byBzdXBwb3J0IElGRl9QUk9NSVNDLAorCQkgKiBzaW5jZSB0aGF0IGlzIG1h bmFnZWQgYnkgdGhlIGJhY2tlbmQgcG9ydC4gKi8KKwkJUFRORVRfQ09SRV9VTkxPQ0soc2MpOwor CQlicmVhazsKKworCWNhc2UgU0lPQ1NJRkNBUDoKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJTSU9D U0lGQ0FQICV4ICV4XG4iLAorCQkJICAgICAgaWZyLT5pZnJfcmVxY2FwLCBpZnAtPmlmX2NhcGVu YWJsZSk7CisJCW1hc2sgPSBpZnItPmlmcl9yZXFjYXAgXiBpZnAtPmlmX2NhcGVuYWJsZTsKKyNp ZmRlZiBERVZJQ0VfUE9MTElORworCQlpZiAobWFzayAmIElGQ0FQX1BPTExJTkcpIHsKKwkJCXN0 cnVjdCBwdG5ldF9xdWV1ZSAqcHE7CisJCQlpbnQgaTsKKworCQkJaWYgKGlmci0+aWZyX3JlcWNh cCAmIElGQ0FQX1BPTExJTkcpIHsKKwkJCQllcnIgPSBldGhlcl9wb2xsX3JlZ2lzdGVyKHB0bmV0 X3BvbGwsIGlmcCk7CisJCQkJaWYgKGVycikgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyog U3RvcCBxdWV1ZXMgYW5kIHN5bmMgd2l0aCB0YXNrcXVldWVzLiAqLworCQkJCWlmcC0+aWZfZHJ2 X2ZsYWdzICY9IH5JRkZfRFJWX1JVTk5JTkc7CisJCQkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1f cmluZ3M7IGkrKykgeworCQkJCQlwcSA9IHNjLT4gcXVldWVzICsgaTsKKwkJCQkJLyogTWFrZSBz dXJlIHRoZSB3b3JrZXIgc2VlcyB0aGUKKwkJCQkJICogSUZGX0RSVl9SVU5OSU5HIGRvd24uICov CisJCQkJCVBUTkVUX1FfTE9DSyhwcSk7CisJCQkJCXBxLT5wdHJpbmctPmd1ZXN0X25lZWRfa2lj ayA9IDA7CisJCQkJCVBUTkVUX1FfVU5MT0NLKHBxKTsKKwkJCQkJLyogV2FpdCBmb3IgcmVzY2hl ZHVsaW5nIHRvIGZpbmlzaC4gKi8KKwkJCQkJaWYgKHBxLT50YXNrcSkgeworCQkJCQkJdGFza3F1 ZXVlX2RyYWluKHBxLT50YXNrcSwKKwkJCQkJCQkJJnBxLT50YXNrKTsKKwkJCQkJfQorCQkJCX0K KwkJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJCQl9IGVsc2Ugewor CQkJCWVyciA9IGV0aGVyX3BvbGxfZGVyZWdpc3RlcihpZnApOworCQkJCWZvciAoaSA9IDA7IGkg PCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJCQkJcHEgPSBzYy0+IHF1ZXVlcyArIGk7CisJCQkJ CVBUTkVUX1FfTE9DSyhwcSk7CisJCQkJCXBxLT5wdHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7 CisJCQkJCVBUTkVUX1FfVU5MT0NLKHBxKTsKKwkJCQl9CisJCQl9CisJCX0KKyNlbmRpZiAgLyog REVWSUNFX1BPTExJTkcgKi8KKwkJaWZwLT5pZl9jYXBlbmFibGUgPSBpZnItPmlmcl9yZXFjYXA7 CisJCWJyZWFrOworCisJY2FzZSBTSU9DU0lGTVRVOgorCQkvKiBXZSBzdXBwb3J0IGFueSByZWFz b25hYmxlIE1UVS4gKi8KKwkJaWYgKGlmci0+aWZyX210dSA8IEVUSEVSTUlOIHx8CisJCQkJaWZy LT5pZnJfbXR1ID4gUFRORVRfTUFYX1BLVF9TSVpFKSB7CisJCQllcnIgPSBFSU5WQUw7CisJCX0g ZWxzZSB7CisJCQlQVE5FVF9DT1JFX0xPQ0soc2MpOworCQkJaWZwLT5pZl9tdHUgPSBpZnItPmlm cl9tdHU7CisJCQlQVE5FVF9DT1JFX1VOTE9DSyhzYyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNl IFNJT0NTSUZNRURJQToKKwljYXNlIFNJT0NHSUZNRURJQToKKwkJZXJyID0gaWZtZWRpYV9pb2N0 bChpZnAsIGlmciwgJnNjLT5tZWRpYSwgY21kKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQll cnIgPSBldGhlcl9pb2N0bChpZnAsIGNtZCwgZGF0YSk7CisJCWJyZWFrOworCX0KKworCXJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X2luaXRfbG9ja2VkKHN0cnVjdCBwdG5ldF9z b2Z0YyAqc2MpCit7CisJaWZfdCBpZnAgPSBzYy0+aWZwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRl ciAqbmFfZHIgPSAmc2MtPnB0bmEtPmRyLnVwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmFf bm0gPSAmc2MtPnB0bmEtPmh3dXAudXA7CisJdW5zaWduZWQgaW50IG5tX2J1Zl9zaXplOworCWlu dCByZXQ7CisKKwlpZiAoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpIHsKKwkJ cmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwl9CisKKwlkZXZpY2VfcHJpbnRmKHNjLT5k ZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyogVHJhbnNsYXRlIG9mZmxvYWQgY2FwYWJpbGl0 aWVzIGFjY29yZGluZyB0byBpZl9jYXBlbmFibGUuICovCisJaWZwLT5pZl9od2Fzc2lzdCA9IDA7 CisJaWYgKGlmcC0+aWZfY2FwZW5hYmxlICYgSUZDQVBfVFhDU1VNKQorCQlpZnAtPmlmX2h3YXNz aXN0IHw9IFBUTkVUX0NTVU1fT0ZGTE9BRDsKKwlpZiAoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNB UF9UWENTVU1fSVBWNikKKwkJaWZwLT5pZl9od2Fzc2lzdCB8PSBQVE5FVF9DU1VNX09GRkxPQURf SVBWNjsKKwlpZiAoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9UU080KQorCQlpZnAtPmlmX2h3 YXNzaXN0IHw9IENTVU1fSVBfVFNPOworCWlmIChpZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQX1RT TzYpCisJCWlmcC0+aWZfaHdhc3Npc3QgfD0gQ1NVTV9JUDZfVFNPOworCisJLyoKKwkgKiBQcmVw YXJlIHRoZSBpbnRlcmZhY2UgZm9yIG5ldG1hcCBtb2RlIGFjY2Vzcy4KKwkgKi8KKwluZXRtYXBf dXBkYXRlX2NvbmZpZyhuYV9kcik7CisKKwlyZXQgPSBuZXRtYXBfbWVtX2ZpbmFsaXplKG5hX2Ry LT5ubV9tZW0sIG5hX2RyKTsKKwlpZiAocmV0KSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwg Im5ldG1hcF9tZW1fZmluYWxpemUoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor CWlmIChzYy0+cHRuYS0+YmFja2VuZF9yZWdpZnMgPT0gMCkgeworCQlyZXQgPSBwdG5ldF9ubV9r cmluZ3NfY3JlYXRlKG5hX25tKTsKKwkJaWYgKHJldCkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+ ZGV2LCAicHRuZXRfbm1fa3JpbmdzX2NyZWF0ZSgpICIKKwkJCQkJICAgICAgICJmYWlsZWRcbiIp OworCQkJZ290byBlcnJfbWVtX2ZpbmFsaXplOworCQl9CisKKwkJcmV0ID0gbmV0bWFwX21lbV9y aW5nc19jcmVhdGUobmFfZHIpOworCQlpZiAocmV0KSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5k ZXYsICJuZXRtYXBfbWVtX3JpbmdzX2NyZWF0ZSgpICIKKwkJCQkJICAgICAgICJmYWlsZWRcbiIp OworCQkJZ290byBlcnJfcmluZ3NfY3JlYXRlOworCQl9CisKKwkJcmV0ID0gbmV0bWFwX21lbV9n ZXRfbHV0KG5hX2RyLT5ubV9tZW0sICZuYV9kci0+bmFfbHV0KTsKKwkJaWYgKHJldCkgeworCQkJ ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAibmV0bWFwX21lbV9nZXRfbHV0KCkgIgorCQkJCQkgICAg ICAgImZhaWxlZFxuIik7CisJCQlnb3RvIGVycl9nZXRfbHV0OworCQl9CisJfQorCisJcmV0ID0g cHRuZXRfbm1fcmVnaXN0ZXIobmFfZHIsIDEgLyogb24gKi8pOworCWlmIChyZXQpIHsKKwkJZ290 byBlcnJfcmVnaXN0ZXI7CisJfQorCisJbm1fYnVmX3NpemUgPSBORVRNQVBfQlVGX1NJWkUobmFf ZHIpOworCisJS0FTU0VSVChubV9idWZfc2l6ZSA+IDAsICgiSW52YWxpZCBuZXRtYXAgYnVmZmVy IHNpemUiKSk7CisJc2MtPm1pbl90eF9zcGFjZSA9IFBUTkVUX01BWF9QS1RfU0laRSAvIG5tX2J1 Zl9zaXplICsgMjsKKwlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIlczogbWluX3R4X3NwYWNlID0g JXVcbiIsIF9fZnVuY19fLAorCQkgICAgICBzYy0+bWluX3R4X3NwYWNlKTsKKyNpZmRlZiBQVE5F VE1BUF9TVEFUUworCWNhbGxvdXRfcmVzZXQoJnNjLT50aWNrLCBoeiwgcHRuZXRfdGljaywgc2Mp OworI2VuZGlmCisKKwlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisKKwly ZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCW1lbXNldCgmbmFfZHItPm5hX2x1dCwgMCwgc2l6 ZW9mKG5hX2RyLT5uYV9sdXQpKTsKK2Vycl9nZXRfbHV0OgorCW5ldG1hcF9tZW1fcmluZ3NfZGVs ZXRlKG5hX2RyKTsKK2Vycl9yaW5nc19jcmVhdGU6CisJcHRuZXRfbm1fa3JpbmdzX2RlbGV0ZShu YV9ubSk7CitlcnJfbWVtX2ZpbmFsaXplOgorCW5ldG1hcF9tZW1fZGVyZWYobmFfZHItPm5tX21l bSwgbmFfZHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyogVG8gYmUgY2FsbGVkIHVuZGVyIGNv cmUgbG9jay4gKi8KK3N0YXRpYyBpbnQKK3B0bmV0X3N0b3Aoc3RydWN0IHB0bmV0X3NvZnRjICpz YykKK3sKKwlpZl90IGlmcCA9IHNjLT5pZnA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9k ciA9ICZzYy0+cHRuYS0+ZHIudXA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9ubSA9ICZz Yy0+cHRuYS0+aHd1cC51cDsKKwlpbnQgaTsKKworCWRldmljZV9wcmludGYoc2MtPmRldiwgIiVz XG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVO TklORykpIHsKKwkJcmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwl9CisKKwkvKiBDbGVh ciB0aGUgZHJpdmVyLXJlYWR5IGZsYWcsIGFuZCBzeW5jaHJvbml6ZSB3aXRoIGFsbCB0aGUgcXVl dWVzLAorCSAqIHNvIHRoYXQgYWZ0ZXIgdGhpcyBsb29wIHdlIGFyZSBzdXJlIG5vYm9keSBpcyB3 b3JraW5nIGFueW1vcmUgd2l0aAorCSAqIHRoZSBkZXZpY2UuIFRoaXMgc2NoZW1lIGlzIHRha2Vu IGZyb20gdGhlIHZ0bmV0IGRyaXZlci4gKi8KKwlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RS Vl9SVU5OSU5HOworCWNhbGxvdXRfc3RvcCgmc2MtPnRpY2spOworCWZvciAoaSA9IDA7IGkgPCBz Yy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJUFRORVRfUV9MT0NLKHNjLT5xdWV1ZXMgKyBpKTsKKwkJ UFRORVRfUV9VTkxPQ0soc2MtPnF1ZXVlcyArIGkpOworCX0KKworCXB0bmV0X25tX3JlZ2lzdGVy KG5hX2RyLCAwIC8qIG9mZiAqLyk7CisKKwlpZiAoc2MtPnB0bmEtPmJhY2tlbmRfcmVnaWZzID09 IDApIHsKKwkJbmV0bWFwX21lbV9yaW5nc19kZWxldGUobmFfZHIpOworCQlwdG5ldF9ubV9rcmlu Z3NfZGVsZXRlKG5hX25tKTsKKwl9CisJbmV0bWFwX21lbV9kZXJlZihuYV9kci0+bm1fbWVtLCBu YV9kcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0X3FmbHVzaChpZl90 IGlmcCkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0c29mdGMoaWZwKTsKKwlp bnQgaTsKKworCS8qIEZsdXNoIGFsbCB0aGUgYnVmcmluZ3MgYW5kIGRvIHRoZSBpbnRlcmZhY2Ug Zmx1c2guICovCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQlzdHJ1 Y3QgcHRuZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGk7CisJCXN0cnVjdCBtYnVmICptOwor CisJCVBUTkVUX1FfTE9DSyhwcSk7CisJCWlmIChwcS0+YnVmcmluZykgeworCQkJd2hpbGUgKCht ID0gYnVmX3JpbmdfZGVxdWV1ZV9zYyhwcS0+YnVmcmluZykpKSB7CisJCQkJbV9mcmVlbShtKTsK KwkJCX0KKwkJfQorCQlQVE5FVF9RX1VOTE9DSyhwcSk7CisJfQorCisJaWZfcWZsdXNoKGlmcCk7 Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X21lZGlhX2NoYW5nZShpZl90IGlmcCkKK3sKKwlzdHJ1 Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0c29mdGMoaWZwKTsKKwlzdHJ1Y3QgaWZtZWRpYSAq aWZtID0gJnNjLT5tZWRpYTsKKworCWlmIChJRk1fVFlQRShpZm0tPmlmbV9tZWRpYSkgIT0gSUZN X0VUSEVSKSB7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZiBf X0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwCitzdGF0aWMgdWludDY0X3QKK3B0bmV0X2dldF9j b3VudGVyKGlmX3QgaWZwLCBpZnRfY291bnRlciBjbnQpCit7CisJc3RydWN0IHB0bmV0X3NvZnRj ICpzYyA9IGlmX2dldHNvZnRjKGlmcCk7CisJc3RydWN0IHB0bmV0X3F1ZXVlX3N0YXRzIHN0YXRz WzJdOworCWludCBpOworCisJLyogQWNjdW11bGF0ZSBzdGF0aXN0aWNzIG92ZXIgdGhlIHF1ZXVl cy4gKi8KKwltZW1zZXQoc3RhdHMsIDAsIHNpemVvZihzdGF0cykpOworCWZvciAoaSA9IDA7IGkg PCBzYy0+bnVtX3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5x dWV1ZXMgKyBpOworCQlpbnQgaWR4ID0gKGkgPCBzYy0+bnVtX3R4X3JpbmdzKSA/IDAgOiAxOwor CisJCXN0YXRzW2lkeF0ucGFja2V0cwkrPSBwcS0+c3RhdHMucGFja2V0czsKKwkJc3RhdHNbaWR4 XS5ieXRlcwkrPSBwcS0+c3RhdHMuYnl0ZXM7CisJCXN0YXRzW2lkeF0uZXJyb3JzCSs9IHBxLT5z dGF0cy5lcnJvcnM7CisJCXN0YXRzW2lkeF0uaXFkcm9wcwkrPSBwcS0+c3RhdHMuaXFkcm9wczsK KwkJc3RhdHNbaWR4XS5tY2FzdHMJKz0gcHEtPnN0YXRzLm1jYXN0czsKKwl9CisKKwlzd2l0Y2gg KGNudCkgeworCWNhc2UgSUZDT1VOVEVSX0lQQUNLRVRTOgorCQlyZXR1cm4gKHN0YXRzWzFdLnBh Y2tldHMpOworCWNhc2UgSUZDT1VOVEVSX0lRRFJPUFM6CisJCXJldHVybiAoc3RhdHNbMV0uaXFk cm9wcyk7CisJY2FzZSBJRkNPVU5URVJfSUVSUk9SUzoKKwkJcmV0dXJuIChzdGF0c1sxXS5lcnJv cnMpOworCWNhc2UgSUZDT1VOVEVSX09QQUNLRVRTOgorCQlyZXR1cm4gKHN0YXRzWzBdLnBhY2tl dHMpOworCWNhc2UgSUZDT1VOVEVSX09CWVRFUzoKKwkJcmV0dXJuIChzdGF0c1swXS5ieXRlcyk7 CisJY2FzZSBJRkNPVU5URVJfT01DQVNUUzoKKwkJcmV0dXJuIChzdGF0c1swXS5tY2FzdHMpOwor CWRlZmF1bHQ6CisJCXJldHVybiAoaWZfZ2V0X2NvdW50ZXJfZGVmYXVsdChpZnAsIGNudCkpOwor CX0KK30KKyNlbmRpZgorCisKKyNpZmRlZiBQVE5FVE1BUF9TVEFUUworLyogQ2FsbGVkIHVuZGVy IGNvcmUgbG9jay4gKi8KK3N0YXRpYyB2b2lkCitwdG5ldF90aWNrKHZvaWQgKm9wYXF1ZSkKK3sK KwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gb3BhcXVlOworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0g c2MtPnF1ZXVlcyArIGk7CisJCXN0cnVjdCBwdG5ldF9xdWV1ZV9zdGF0cyBjdXIgPSBwcS0+c3Rh dHM7CisJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwkJdW5zaWduZWQgaW50IGRlbHRhOworCisJCW1p Y3JvdGltZSgmbm93KTsKKwkJZGVsdGEgPSBub3cudHZfdXNlYyAtIHNjLT5sYXN0X3RzLnR2X3Vz ZWMgKworCQkJKG5vdy50dl9zZWMgLSBzYy0+bGFzdF90cy50dl9zZWMpICogMTAwMDAwMDsKKwkJ ZGVsdGEgLz0gMTAwMDsgLyogaW4gbWlsbGlzZWNvbmRzICovCisKKwkJaWYgKGRlbHRhID09IDAp CisJCQljb250aW51ZTsKKworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIjJWRbJXUgbXNdOnBr dHMgJWx1LCBraWNrcyAlbHUsICIKKwkJCSAgICAgICJpbnRyICVsdVxuIiwgaSwgZGVsdGEsCisJ CQkgICAgICAoY3VyLnBhY2tldHMgLSBwcS0+bGFzdF9zdGF0cy5wYWNrZXRzKSwKKwkJCSAgICAg IChjdXIua2lja3MgLSBwcS0+bGFzdF9zdGF0cy5raWNrcyksCisJCQkgICAgICAoY3VyLmludHJz IC0gcHEtPmxhc3Rfc3RhdHMuaW50cnMpKTsKKwkJcHEtPmxhc3Rfc3RhdHMgPSBjdXI7CisJfQor CW1pY3JvdGltZSgmc2MtPmxhc3RfdHMpOworCWNhbGxvdXRfc2NoZWR1bGUoJnNjLT50aWNrLCBo eik7Cit9CisjZW5kaWYgLyogUFRORVRNQVBfU1RBVFMgKi8KKworc3RhdGljIHZvaWQKK3B0bmV0 X21lZGlhX3N0YXR1cyhpZl90IGlmcCwgc3RydWN0IGlmbWVkaWFyZXEgKmlmbXIpCit7CisJLyog V2UgYXJlIGFsd2F5cyBhY3RpdmUsIGFzIHRoZSBiYWNrZW5kIG5ldG1hcCBwb3J0IGlzCisJICog YWx3YXlzIG9wZW4gaW4gbmV0bWFwIG1vZGUuICovCisJaWZtci0+aWZtX3N0YXR1cyA9IElGTV9B VkFMSUQgfCBJRk1fQUNUSVZFOworCWlmbXItPmlmbV9hY3RpdmUgPSBJRk1fRVRIRVIgfCBJRk1f MTBHX1QgfCBJRk1fRkRYOworfQorCitzdGF0aWMgdWludDMyX3QKK3B0bmV0X25tX3B0Y3RsKGlm X3QgaWZwLCB1aW50MzJfdCBjbWQpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYyA9IGlmX2dl dHNvZnRjKGlmcCk7CisJLyoKKwkgKiBXcml0ZSBhIGNvbW1hbmQgYW5kIHJlYWQgYmFjayBlcnJv ciBzdGF0dXMsCisJICogd2l0aCB6ZXJvIG1lYW5pbmcgc3VjY2Vzcy4KKwkgKi8KKwlidXNfd3Jp dGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX1BUQ1RMLCBjbWQpOworCXJldHVybiBidXNfcmVhZF80 KHNjLT5pb21lbSwgUFRORVRfSU9fUFRDVEwpOworfQorCitzdGF0aWMgaW50CitwdG5ldF9ubV9j b25maWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgdW5zaWduZWQgKnR4ciwgdW5zaWduZWQg KnR4ZCwKKwkJdW5zaWduZWQgKnJ4ciwgdW5zaWduZWQgKnJ4ZCkKK3sKKwlzdHJ1Y3QgcHRuZXRf c29mdGMgKnNjID0gaWZfZ2V0c29mdGMobmEtPmlmcCk7CisKKwkqdHhyID0gYnVzX3JlYWRfNChz Yy0+aW9tZW0sIFBUTkVUX0lPX05VTV9UWF9SSU5HUyk7CisJKnJ4ciA9IGJ1c19yZWFkXzQoc2Mt PmlvbWVtLCBQVE5FVF9JT19OVU1fUlhfUklOR1MpOworCSp0eGQgPSBidXNfcmVhZF80KHNjLT5p b21lbSwgUFRORVRfSU9fTlVNX1RYX1NMT1RTKTsKKwkqcnhkID0gYnVzX3JlYWRfNChzYy0+aW9t ZW0sIFBUTkVUX0lPX05VTV9SWF9TTE9UUyk7CisKKwlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJ0 eHIgJXUsIHJ4ciAldSwgdHhkICV1LCByeGQgJXVcbiIsCisJCSAgICAgICp0eHIsICpyeHIsICp0 eGQsICpyeGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9zeW5jX2Zy b21fY3NiKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEp Cit7CisJaW50IGk7CisKKwkvKiBTeW5jIGtyaW5ncyBmcm9tIHRoZSBob3N0LCByZWFkaW5nIGZy b20KKwkgKiBDU0IuICovCisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkrKykgewor CQlzdHJ1Y3QgcHRuZXRfcmluZyAqcHRyaW5nID0gc2MtPnF1ZXVlc1tpXS5wdHJpbmc7CisJCXN0 cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nOworCisJCWlmIChpIDwgbmEtPm51bV90eF9yaW5ncykg eworCQkJa3JpbmcgPSBuYS0+dHhfcmluZ3MgKyBpOworCQl9IGVsc2UgeworCQkJa3JpbmcgPSBu YS0+cnhfcmluZ3MgKyBpIC0gbmEtPm51bV90eF9yaW5nczsKKwkJfQorCQlrcmluZy0+cmhlYWQg PSBrcmluZy0+cmluZy0+aGVhZCA9IHB0cmluZy0+aGVhZDsKKwkJa3JpbmctPnJjdXIgPSBrcmlu Zy0+cmluZy0+Y3VyID0gcHRyaW5nLT5jdXI7CisJCWtyaW5nLT5ucl9od2N1ciA9IHB0cmluZy0+ aHdjdXI7CisJCWtyaW5nLT5ucl9od3RhaWwgPSBrcmluZy0+cnRhaWwgPQorCQkJa3JpbmctPnJp bmctPnRhaWwgPSBwdHJpbmctPmh3dGFpbDsKKworCQlORCgiJWQsJWQ6IGNzYiB7aGMgJXUgaCAl dSBjICV1IGh0ICV1fSIsIHQsIGksCisJCSAgIHB0cmluZy0+aHdjdXIsIHB0cmluZy0+aGVhZCwg cHRyaW5nLT5jdXIsCisJCSAgIHB0cmluZy0+aHd0YWlsKTsKKwkJTkQoIiVkLCVkOiBrcmluZyB7 aGMgJXUgcmggJXUgcmMgJXUgaCAldSBjICV1IGh0ICV1IHJ0ICV1IHQgJXV9IiwKKwkJICAgdCwg aSwga3JpbmctPm5yX2h3Y3VyLCBrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLAorCQkgICBrcmlu Zy0+cmluZy0+aGVhZCwga3JpbmctPnJpbmctPmN1ciwga3JpbmctPm5yX2h3dGFpbCwKKwkJICAg a3JpbmctPnJ0YWlsLCBrcmluZy0+cmluZy0+dGFpbCk7CisJfQorfQorCitzdGF0aWMgdm9pZAor cHRuZXRfdXBkYXRlX3ZuZXRfaGRyKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MpCit7CisJdW5zaWdu ZWQgaW50IHdhbnRlZF9oZHJfbGVuID0gcHRuZXRfdm5ldF9oZHIgPyBQVE5FVF9IRFJfU0laRSA6 IDA7CisKKwlidXNfd3JpdGVfNChzYy0+aW9tZW0sIFBUTkVUX0lPX1ZORVRfSERSX0xFTiwgd2Fu dGVkX2hkcl9sZW4pOworCXNjLT52bmV0X2hkcl9sZW4gPSBidXNfcmVhZF80KHNjLT5pb21lbSwg UFRORVRfSU9fVk5FVF9IRFJfTEVOKTsKKwlzYy0+cHRuYS0+aHd1cC51cC52aXJ0X2hkcl9sZW4g PSBzYy0+dm5ldF9oZHJfbGVuOworfQorCitzdGF0aWMgaW50CitwdG5ldF9ubV9yZWdpc3Rlcihz dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCit7CisJLyogZGV2aWNlLXNwZWNp ZmljICovCisJaWZfdCBpZnAgPSBuYS0+aWZwOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBp Zl9nZXRzb2Z0YyhpZnApOworCWludCBuYXRpdmUgPSAobmEgPT0gJnNjLT5wdG5hLT5od3VwLnVw KTsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxOworCWVudW0gdHhyeCB0OworCWludCByZXQgPSAw OworCWludCBpOworCisJaWYgKCFvbm9mZikgeworCQlzYy0+cHRuYS0+YmFja2VuZF9yZWdpZnMt LTsKKwl9CisKKwkvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IG5ldG1hcCBjbGllbnQsIGd1ZXN0IGlu dGVycnVwdCBlbmFibGUgZmxhZ3MgbWF5CisJICogYmUgaW4gYXJiaXRyYXJ5IHN0YXRlLiBTaW5j ZSB0aGVzZSBmbGFncyBhcmUgZ29pbmcgdG8gYmUgdXNlZCBhbHNvCisJICogYnkgdGhlIG5ldGRl dmljZSBkcml2ZXIsIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRvIHN0YXJ0IHdpdGgKKwkgKiBub3Rp ZmljYXRpb25zIGVuYWJsZWQuIEFsc28sIHNjaGVkdWxlIE5BUEkgdG8gZmx1c2ggcGVuZGluZyBw YWNrZXRzCisJICogaW4gdGhlIFJYIHJpbmdzLCBzaW5jZSB3ZSB3aWxsIG5vdCByZWNlaXZlIGZ1 cnRoZXIgaW50ZXJydXB0cworCSAqIHVudGlsIHRoZXNlIHdpbGwgYmUgcHJvY2Vzc2VkLiAqLwor CWlmIChuYXRpdmUgJiYgIW9ub2ZmICYmIG5hLT5hY3RpdmVfZmRzID09IDApIHsKKwkJRCgiRXhp dCBuZXRtYXAgbW9kZSwgcmUtZW5hYmxlIGludGVycnVwdHMiKTsKKwkJZm9yIChpID0gMDsgaSA8 IHNjLT5udW1fcmluZ3M7IGkrKykgeworCQkJcHEgPSBzYy0+cXVldWVzICsgaTsKKwkJCXBxLT5w dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7CisJCX0KKwl9CisKKwlpZiAob25vZmYpIHsKKwkJ aWYgKHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lmcyA9PSAwKSB7CisJCQkvKiBJbml0aWFsaXplIG5v dGlmaWNhdGlvbiBlbmFibGUgZmllbGRzIGluIHRoZSBDU0IuICovCisJCQlmb3IgKGkgPSAwOyBp IDwgc2MtPm51bV9yaW5nczsgaSsrKSB7CisJCQkJcHEgPSBzYy0+cXVldWVzICsgaTsKKwkJCQlw cS0+cHRyaW5nLT5ob3N0X25lZWRfa2ljayA9IDE7CisJCQkJcHEtPnB0cmluZy0+Z3Vlc3RfbmVl ZF9raWNrID0KKwkJCQkJKCEoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9QT0xMSU5HKQorCQkJ CQkJJiYgaSA+PSBzYy0+bnVtX3R4X3JpbmdzKTsKKwkJCX0KKworCQkJLyogU2V0IHRoZSB2aXJ0 aW8tbmV0IGhlYWRlciBsZW5ndGguICovCisJCQlwdG5ldF91cGRhdGVfdm5ldF9oZHIoc2MpOwor CisJCQkvKiBNYWtlIHN1cmUgdGhlIGhvc3QgYWRhcHRlciBwYXNzZWQgdGhyb3VnaCBpcyByZWFk eQorCQkJICogZm9yIHR4c3luYy9yeHN5bmMuICovCisJCQlyZXQgPSBwdG5ldF9ubV9wdGN0bChp ZnAsIFBUTkVUTUFQX1BUQ1RMX0NSRUFURSk7CisJCQlpZiAocmV0KSB7CisJCQkJcmV0dXJuIHJl dDsKKwkJCX0KKwkJfQorCisJCS8qIFN5bmMgZnJvbSBDU0IgbXVzdCBiZSBkb25lIGFmdGVyIFJF R0lGIFBUQ1RMLiBTa2lwIHRoaXMKKwkJICogc3RlcCBvbmx5IGlmIHRoaXMgaXMgYSBuZXRtYXAg Y2xpZW50IGFuZCBpdCBpcyBub3QgdGhlCisJCSAqIGZpcnN0IG9uZS4gKi8KKwkJaWYgKCghbmF0 aXZlICYmIHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lmcyA9PSAwKSB8fAorCQkJCShuYXRpdmUgJiYg bmEtPmFjdGl2ZV9mZHMgPT0gMCkpIHsKKwkJCXB0bmV0X3N5bmNfZnJvbV9jc2Ioc2MsIG5hKTsK KwkJfQorCisJCS8qIElmIG5vdCBuYXRpdmUsIGRvbid0IGNhbGwgbm1fc2V0X25hdGl2ZV9mbGFn cywgc2luY2Ugd2UgZG9uJ3Qgd2FudAorCQkgKiB0byByZXBsYWNlIGlmX3RyYW5zbWl0IG1ldGhv ZCwgbm9yIHNldCBOQUZfTkVUTUFQX09OICovCisJCWlmIChuYXRpdmUpIHsKKwkJCWZvcl9yeF90 eCh0KSB7CisJCQkJZm9yIChpID0gMDsgaSA8PSBubWFfZ2V0X25yaW5ncyhuYSwgdCk7IGkrKykg eworCQkJCQlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ldOworCisJ CQkJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkgeworCQkJCQkJa3JpbmctPm5yX21v ZGUgPSBOS1JfTkVUTUFQX09OOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJbm1fc2V0X25hdGl2 ZV9mbGFncyhuYSk7CisJCX0KKworCX0gZWxzZSB7CisJCWlmIChuYXRpdmUpIHsKKwkJCW5tX2Ns ZWFyX25hdGl2ZV9mbGFncyhuYSk7CisJCQlmb3JfcnhfdHgodCkgeworCQkJCWZvciAoaSA9IDA7 IGkgPD0gbm1hX2dldF9ucmluZ3MobmEsIHQpOyBpKyspIHsKKwkJCQkJc3RydWN0IG5ldG1hcF9r cmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKworCQkJCQlpZiAobm1fa3JpbmdfcGVuZGlu Z19vZmYoa3JpbmcpKSB7CisJCQkJCQlrcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT0ZGOwor CQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogU3luYyBmcm9tIENTQiBtdXN0IGJlIGRv bmUgYmVmb3JlIFVOUkVHSUYgUFRDVEwsIG9uIHRoZSBsYXN0CisJCSAqIG5ldG1hcCBjbGllbnQu ICovCisJCWlmIChuYXRpdmUgJiYgbmEtPmFjdGl2ZV9mZHMgPT0gMCkgeworCQkJcHRuZXRfc3lu Y19mcm9tX2NzYihzYywgbmEpOworCQl9CisKKwkJaWYgKHNjLT5wdG5hLT5iYWNrZW5kX3JlZ2lm cyA9PSAwKSB7CisJCQlyZXQgPSBwdG5ldF9ubV9wdGN0bChpZnAsIFBUTkVUTUFQX1BUQ1RMX0RF TEVURSk7CisJCX0KKwl9CisKKwlpZiAob25vZmYpIHsKKwkJc2MtPnB0bmEtPmJhY2tlbmRfcmVn aWZzKys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcHRuZXRfbm1fdHhz eW5jKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHB0 bmV0X3NvZnRjICpzYyA9IGlmX2dldHNvZnRjKGtyaW5nLT5uYS0+aWZwKTsKKwlzdHJ1Y3QgcHRu ZXRfcXVldWUgKnBxID0gc2MtPnF1ZXVlcyArIGtyaW5nLT5yaW5nX2lkOworCWJvb2wgbm90aWZ5 OworCisJbm90aWZ5ID0gbmV0bWFwX3B0X2d1ZXN0X3R4c3luYyhwcS0+cHRyaW5nLCBrcmluZywg ZmxhZ3MpOworCWlmIChub3RpZnkpIHsKKwkJcHRuZXRfa2ljayhwcSk7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X25tX3J4c3luYyhzdHJ1Y3QgbmV0bWFwX2tyaW5n ICprcmluZywgaW50IGZsYWdzKQoreworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBpZl9nZXRz b2Z0YyhrcmluZy0+bmEtPmlmcCk7CisJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5yeHF1 ZXVlcyArIGtyaW5nLT5yaW5nX2lkOworCWJvb2wgbm90aWZ5OworCisJbm90aWZ5ID0gbmV0bWFw X3B0X2d1ZXN0X3J4c3luYyhwcS0+cHRyaW5nLCBrcmluZywgZmxhZ3MpOworCWlmIChub3RpZnkp IHsKKwkJcHRuZXRfa2ljayhwcSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk CitwdG5ldF90eF9pbnRyKHZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBx ID0gb3BhcXVlOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBwcS0+c2M7CisKKwlEQkcoZGV2 aWNlX3ByaW50ZihzYy0+ZGV2LCAiVHggaW50ZXJydXB0ICMlZFxuIiwgcHEtPmtyaW5nX2lkKSk7 CisjaWZkZWYgUFRORVRNQVBfU1RBVFMKKwlwcS0+c3RhdHMuaW50cnMgKys7CisjZW5kaWYgLyog UFRORVRNQVBfU1RBVFMgKi8KKworCWlmIChuZXRtYXBfdHhfaXJxKHNjLT5pZnAsIHBxLT5rcmlu Z19pZCkgIT0gTk1fSVJRX1BBU1MpIHsKKwkJcmV0dXJuOworCX0KKworCS8qIFNjaGVkdWxlIHRo ZSB0YXNxdWV1ZSB0byBmbHVzaCBwcm9jZXNzIHRyYW5zbWlzc2lvbnMgcmVxdWVzdHMuCisJICog SG93ZXZlciwgdnRuZXQsIGlmX2VtIGFuZCBpZl9pZ2IganVzdCBjYWxsIHB0bmV0X3RyYW5zbWl0 KCkgaGVyZSwKKwkgKiBhdCBsZWFzdCB3aGVuIHVzaW5nIE1TSS1YIGludGVycnVwdHMuIFRoZSBp Zl9lbSBkcml2ZXIsIGluc3RlYWQKKwkgKiBzY2hlZHVsZSB0YXNrcXVldWUgd2hlbiB1c2luZyBs ZWdhY3kgaW50ZXJydXB0cy4gKi8KKwl0YXNrcXVldWVfZW5xdWV1ZShwcS0+dGFza3EsICZwcS0+ dGFzayk7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9yeF9pbnRyKHZvaWQgKm9wYXF1ZSkKK3sK KwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gb3BhcXVlOworCXN0cnVjdCBwdG5ldF9zb2Z0YyAq c2MgPSBwcS0+c2M7CisJdW5zaWduZWQgaW50IHVudXNlZDsKKworCURCRyhkZXZpY2VfcHJpbnRm KHNjLT5kZXYsICJSeCBpbnRlcnJ1cHQgIyVkXG4iLCBwcS0+a3JpbmdfaWQpKTsKKyNpZmRlZiBQ VE5FVE1BUF9TVEFUUworCXBxLT5zdGF0cy5pbnRycyArKzsKKyNlbmRpZiAvKiBQVE5FVE1BUF9T VEFUUyAqLworCisJaWYgKG5ldG1hcF9yeF9pcnEoc2MtPmlmcCwgcHEtPmtyaW5nX2lkLCAmdW51 c2VkKSAhPSBOTV9JUlFfUEFTUykgeworCQlyZXR1cm47CisJfQorCisJLyogTGlrZSB2dG5ldCwg aWZfaWdiIGFuZCBpZl9lbSBkcml2ZXJzIHdoZW4gdXNpbmcgTVNJLVggaW50ZXJydXB0cywKKwkg KiByZWNlaXZlLXNpZGUgcHJvY2Vzc2luZyBpcyBleGVjdXRlZCBkaXJlY3RseSBpbiB0aGUgaW50 ZXJydXB0CisJICogc2VydmljZSByb3V0aW5lLiBBbHRlcm5hdGl2ZWx5LCB3ZSBtYXkgc2NoZWR1 bGUgdGhlIHRhc2txdWV1ZS4gKi8KKwlwdG5ldF9yeF9lb2YocHEsIFBUTkVUX1JYX0JVREdFVCwg dHJ1ZSk7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgb2ZmbG9hZGluZ3MtcmVsYXRlZCBmdW5jdGlv bnMgYXJlIHRha2VuIGZyb20gdGhlIHZ0bmV0CisgKiBkcml2ZXIsIGJ1dCB0aGUgc2FtZSBmdW5j dGlvbmFsaXR5IGlzIHJlcXVpcmVkIGZvciB0aGUgcHRuZXQgZHJpdmVyLgorICogQXMgYSB0ZW1w b3Jhcnkgc29sdXRpb24sIEkgY29waWVkIHRoaXMgY29kZSBmcm9tIHZ0bmV0IGFuZCBJIHN0YXJ0 ZWQKKyAqIHRvIGdlbmVyYWxpemUgaXQgKHRha2luZyBhd2F5IGRyaXZlci1zcGVjaWZpYyBzdGF0 aXN0aWMgYWNjb3VudGluZyksCisgKiBtYWtpbmcgYXMgbGl0dGxlIG1vZGlmaWNhdGlvbnMgYXMg cG9zc2libGUuCisgKiBJbiB0aGUgZnV0dXJlIHdlIG5lZWQgdG8gc2hhcmUgdGhlc2UgZnVuY3Rp b25zIGJldHdlZW4gdnRuZXQgYW5kIHB0bmV0LgorICovCitzdGF0aWMgaW50CitwdG5ldF90eF9v ZmZsb2FkX2N0eChzdHJ1Y3QgbWJ1ZiAqbSwgaW50ICpldHlwZSwgaW50ICpwcm90bywgaW50ICpz dGFydCkKK3sKKwlzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKmV2aDsKKwlpbnQgb2Zmc2V0Owor CisJZXZoID0gbXRvZChtLCBzdHJ1Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKik7CisJaWYgKGV2aC0+ ZXZsX2VuY2FwX3Byb3RvID09IGh0b25zKEVUSEVSVFlQRV9WTEFOKSkgeworCQkvKiBCTVY6IFdl IHNob3VsZCBoYW5kbGUgbmVzdGVkIFZMQU4gdGFncyB0b28uICovCisJCSpldHlwZSA9IG50b2hz KGV2aC0+ZXZsX3Byb3RvKTsKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBldGhlcl92bGFuX2hl YWRlcik7CisJfSBlbHNlIHsKKwkJKmV0eXBlID0gbnRvaHMoZXZoLT5ldmxfZW5jYXBfcHJvdG8p OworCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcik7CisJfQorCisJc3dpdGNo ICgqZXR5cGUpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJY2FzZSBFVEhFUlRZUEVfSVA6IHsKKwkJ c3RydWN0IGlwICppcCwgaXBoZHI7CisJCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBv ZmZzZXQgKyBzaXplb2Yoc3RydWN0IGlwKSkpIHsKKwkJCW1fY29weWRhdGEobSwgb2Zmc2V0LCBz aXplb2Yoc3RydWN0IGlwKSwKKwkJCSAgICAoY2FkZHJfdCkgJmlwaGRyKTsKKwkJCWlwID0gJmlw aGRyOworCQl9IGVsc2UKKwkJCWlwID0gKHN0cnVjdCBpcCAqKShtLT5tX2RhdGEgKyBvZmZzZXQp OworCQkqcHJvdG8gPSBpcC0+aXBfcDsKKwkJKnN0YXJ0ID0gb2Zmc2V0ICsgKGlwLT5pcF9obCA8 PCAyKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEVU SEVSVFlQRV9JUFY2OgorCQkqcHJvdG8gPSAtMTsKKwkJKnN0YXJ0ID0gaXA2X2xhc3RoZHIobSwg b2Zmc2V0LCBJUFBST1RPX0lQVjYsIHByb3RvKTsKKwkJLyogQXNzZXJ0IHRoZSBuZXR3b3JrIHN0 YWNrIHNlbnQgdXMgYSB2YWxpZCBwYWNrZXQuICovCisJCUtBU1NFUlQoKnN0YXJ0ID4gb2Zmc2V0 LAorCQkgICAgKCIlczogbWJ1ZiAlcCBzdGFydCAlZCBvZmZzZXQgJWQgcHJvdG8gJWQiLCBfX2Z1 bmNfXywgbSwKKwkJICAgICpzdGFydCwgb2Zmc2V0LCAqcHJvdG8pKTsKKwkJYnJlYWs7CisjZW5k aWYKKwlkZWZhdWx0OgorCQkvKiBIZXJlIHdlIHNob3VsZCBpbmNyZW1lbnQgdGhlIHR4X2NzdW1f YmFkX2V0aHR5cGUgY291bnRlci4gKi8KKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCXJldHVy biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3R4X29mZmxvYWRfdHNvKGlmX3QgaWZwLCBz dHJ1Y3QgbWJ1ZiAqbSwgaW50IGV0aF90eXBlLAorCQkgICAgIGludCBvZmZzZXQsIGJvb2wgYWxs b3dfZWNuLCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKmhkcikKK3sKKwlzdGF0aWMgc3RydWN0IHRp bWV2YWwgbGFzdGVjbjsKKwlzdGF0aWMgaW50IGN1cmVjbjsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3As IHRjcGhkcjsKKworCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBvZmZzZXQgKyBzaXpl b2Yoc3RydWN0IHRjcGhkcikpKSB7CisJCW1fY29weWRhdGEobSwgb2Zmc2V0LCBzaXplb2Yoc3Ry dWN0IHRjcGhkciksIChjYWRkcl90KSAmdGNwaGRyKTsKKwkJdGNwID0gJnRjcGhkcjsKKwl9IGVs c2UKKwkJdGNwID0gKHN0cnVjdCB0Y3BoZHIgKikobS0+bV9kYXRhICsgb2Zmc2V0KTsKKworCWhk ci0+aGRyX2xlbiA9IG9mZnNldCArICh0Y3AtPnRoX29mZiA8PCAyKTsKKwloZHItPmdzb19zaXpl ID0gbS0+bV9wa3RoZHIudHNvX3NlZ3N6OworCWhkci0+Z3NvX3R5cGUgPSBldGhfdHlwZSA9PSBF VEhFUlRZUEVfSVAgPyBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjQgOgorCSAgICBWSVJUSU9fTkVU X0hEUl9HU09fVENQVjY7CisKKwlpZiAodGNwLT50aF9mbGFncyAmIFRIX0NXUikgeworCQkvKgor CQkgKiBEcm9wIGlmIFZJUlRJT19ORVRfRl9IT1NUX0VDTiB3YXMgbm90IG5lZ290aWF0ZWQuIElu IEZyZWVCU0QsCisJCSAqIEVDTiBzdXBwb3J0IGlzIG5vdCBvbiBhIHBlci1pbnRlcmZhY2UgYmFz aXMsIGJ1dCBnbG9iYWxseSB2aWEKKwkJICogdGhlIG5ldC5pbmV0LnRjcC5lY24uZW5hYmxlIHN5 c2N0bCBrbm9iLiBUaGUgZGVmYXVsdCBpcyBvZmYuCisJCSAqLworCQlpZiAoIWFsbG93X2Vjbikg eworCQkJaWYgKHBwc3JhdGVjaGVjaygmbGFzdGVjbiwgJmN1cmVjbiwgMSkpCisJCQkJaWZfcHJp bnRmKGlmcCwKKwkJCQkgICAgIlRTTyB3aXRoIEVDTiBub3QgbmVnb3RpYXRlZCB3aXRoIGhvc3Rc biIpOworCQkJcmV0dXJuIChFTk9UU1VQKTsKKwkJfQorCQloZHItPmdzb190eXBlIHw9IFZJUlRJ T19ORVRfSERSX0dTT19FQ047CisJfQorCisJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50IHR4 X3RzbyBjb3VudGVyLiAqLworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCBtYnVm ICoKK3B0bmV0X3R4X29mZmxvYWQoaWZfdCBpZnAsIHN0cnVjdCBtYnVmICptLCBib29sIGFsbG93 X2VjbiwKKwkJIHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworCWludCBmbGFncywgZXR5 cGUsIGNzdW1fc3RhcnQsIHByb3RvLCBlcnJvcjsKKworCWZsYWdzID0gbS0+bV9wa3RoZHIuY3N1 bV9mbGFnczsKKworCWVycm9yID0gcHRuZXRfdHhfb2ZmbG9hZF9jdHgobSwgJmV0eXBlLCAmcHJv dG8sICZjc3VtX3N0YXJ0KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZHJvcDsKKworCWlmICgoZXR5 cGUgPT0gRVRIRVJUWVBFX0lQICYmIGZsYWdzICYgUFRORVRfQ1NVTV9PRkZMT0FEKSB8fAorCSAg ICAoZXR5cGUgPT0gRVRIRVJUWVBFX0lQVjYgJiYgZmxhZ3MgJiBQVE5FVF9DU1VNX09GRkxPQURf SVBWNikpIHsKKwkJLyoKKwkJICogV2UgY291bGQgY29tcGFyZSB0aGUgSVAgcHJvdG9jb2wgdnMg dGhlIENTVU1fIGZsYWcgdG9vLAorCQkgKiBidXQgdGhhdCByZWFsbHkgc2hvdWxkIG5vdCBiZSBu ZWNlc3NhcnkuCisJCSAqLworCQloZHItPmZsYWdzIHw9IFZJUlRJT19ORVRfSERSX0ZfTkVFRFNf Q1NVTTsKKwkJaGRyLT5jc3VtX3N0YXJ0ID0gY3N1bV9zdGFydDsKKwkJaGRyLT5jc3VtX29mZnNl dCA9IG0tPm1fcGt0aGRyLmNzdW1fZGF0YTsKKwkJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50 IHRoZSB0eF9jc3VtIGNvdW50ZXIuICovCisJfQorCisJaWYgKGZsYWdzICYgQ1NVTV9UU08pIHsK KwkJaWYgKF9fcHJlZGljdF9mYWxzZShwcm90byAhPSBJUFBST1RPX1RDUCkpIHsKKwkJCS8qIExp a2VseSBmYWlsZWQgdG8gY29ycmVjdGx5IHBhcnNlIHRoZSBtYnVmLgorCQkJICogSGVyZSB3ZSBz aG91bGQgaW5jcmVtZW50IHRoZSB0eF90c29fbm90X3RjcAorCQkJICogY291bnRlci4gKi8KKwkJ CWdvdG8gZHJvcDsKKwkJfQorCisJCUtBU1NFUlQoaGRyLT5mbGFncyAmIFZJUlRJT19ORVRfSERS X0ZfTkVFRFNfQ1NVTSwKKwkJICAgICgiJXM6IG1idWYgJXAgVFNPIHdpdGhvdXQgY2hlY2tzdW0g b2ZmbG9hZCAlI3giLAorCQkgICAgX19mdW5jX18sIG0sIGZsYWdzKSk7CisKKwkJZXJyb3IgPSBw dG5ldF90eF9vZmZsb2FkX3RzbyhpZnAsIG0sIGV0eXBlLCBjc3VtX3N0YXJ0LAorCQkJCQkgICAg IGFsbG93X2VjbiwgaGRyKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBkcm9wOworCX0KKworCXJl dHVybiAobSk7CisKK2Ryb3A6CisJbV9mcmVlbShtKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCitz dGF0aWMgdm9pZAorcHRuZXRfdmxhbl90YWdfcmVtb3ZlKHN0cnVjdCBtYnVmICptKQoreworCXN0 cnVjdCBldGhlcl92bGFuX2hlYWRlciAqZXZoOworCisJZXZoID0gbXRvZChtLCBzdHJ1Y3QgZXRo ZXJfdmxhbl9oZWFkZXIgKik7CisJbS0+bV9wa3RoZHIuZXRoZXJfdnRhZyA9IG50b2hzKGV2aC0+ ZXZsX3RhZyk7CisJbS0+bV9mbGFncyB8PSBNX1ZMQU5UQUc7CisKKwkvKiBTdHJpcCB0aGUgODAy LjFRIGhlYWRlci4gKi8KKwliY29weSgoY2hhciAqKSBldmgsIChjaGFyICopIGV2aCArIEVUSEVS X1ZMQU5fRU5DQVBfTEVOLAorCSAgICBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfVFlQRV9MRU4pOwor CW1fYWRqKG0sIEVUSEVSX1ZMQU5fRU5DQVBfTEVOKTsKK30KKworLyoKKyAqIFVzZSB0aGUgY2hl Y2tzdW0gb2Zmc2V0IGluIHRoZSBWaXJ0SU8gaGVhZGVyIHRvIHNldCB0aGUKKyAqIGNvcnJlY3Qg Q1NVTV8qIGZsYWdzLgorICovCitzdGF0aWMgaW50CitwdG5ldF9yeF9jc3VtX2J5X29mZnNldChz dHJ1Y3QgbWJ1ZiAqbSwgdWludDE2X3QgZXRoX3R5cGUsIGludCBpcF9zdGFydCwKKwkJCXN0cnVj dCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ TkVUNikKKwlpbnQgb2Zmc2V0ID0gaGRyLT5jc3VtX3N0YXJ0ICsgaGRyLT5jc3VtX29mZnNldDsK KyNlbmRpZgorCisJLyogT25seSBkbyBhIGJhc2ljIHNhbml0eSBjaGVjayBvbiB0aGUgb2Zmc2V0 LiAqLworCXN3aXRjaCAoZXRoX3R5cGUpIHsKKyNpZiBkZWZpbmVkKElORVQpCisJY2FzZSBFVEhF UlRZUEVfSVA6CisJCWlmIChfX3ByZWRpY3RfZmFsc2Uob2Zmc2V0IDwgaXBfc3RhcnQgKyBzaXpl b2Yoc3RydWN0IGlwKSkpCisJCQlyZXR1cm4gKDEpOworCQlicmVhazsKKyNlbmRpZgorI2lmIGRl ZmluZWQoSU5FVDYpCisJY2FzZSBFVEhFUlRZUEVfSVBWNjoKKwkJaWYgKF9fcHJlZGljdF9mYWxz ZShvZmZzZXQgPCBpcF9zdGFydCArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpKQorCQkJcmV0dXJu ICgxKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBIZXJlIHdlIHNob3VsZCBp bmNyZW1lbnQgdGhlIHJ4X2NzdW1fYmFkX2V0aHR5cGUgY291bnRlci4gKi8KKwkJcmV0dXJuICgx KTsKKwl9CisKKwkvKgorCSAqIFVzZSB0aGUgb2Zmc2V0IHRvIGRldGVybWluZSB0aGUgYXBwcm9w cmlhdGUgQ1NVTV8qIGZsYWdzLiBUaGlzIGlzCisJICogYSBiaXQgZGlydHksIGJ1dCB3ZSBjYW4g Z2V0IGJ5IHdpdGggaXQgc2luY2UgdGhlIGNoZWNrc3VtIG9mZnNldHMKKwkgKiBoYXBwZW4gdG8g YmUgZGlmZmVyZW50LiBXZSBhc3N1bWUgdGhlIGhvc3QgaG9zdCBkb2VzIG5vdCBkbyBJUHY0CisJ ICogaGVhZGVyIGNoZWNrc3VtIG9mZmxvYWRpbmcuCisJICovCisJc3dpdGNoIChoZHItPmNzdW1f b2Zmc2V0KSB7CisJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCB1aF9zdW0pOgorCWNhc2Ug b2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgdGhfc3VtKToKKwkJbS0+bV9wa3RoZHIuY3N1bV9mbGFn cyB8PSBDU1VNX0RBVEFfVkFMSUQgfCBDU1VNX1BTRVVET19IRFI7CisJCW0tPm1fcGt0aGRyLmNz dW1fZGF0YSA9IDB4RkZGRjsKKwkJYnJlYWs7CisJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhk ciwgY2hlY2tzdW0pOgorCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzIHw9IENTVU1fU0NUUF9WQUxJ RDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogSGVyZSB3ZSBzaG91bGQgaW5jcmVtZW50IHRo ZSByeF9jc3VtX2JhZF9vZmZzZXQgY291bnRlci4gKi8KKwkJcmV0dXJuICgxKTsKKwl9CisKKwly ZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitwdG5ldF9yeF9jc3VtX2J5X3BhcnNlKHN0cnVj dCBtYnVmICptLCB1aW50MTZfdCBldGhfdHlwZSwgaW50IGlwX3N0YXJ0LAorCQkgICAgICAgc3Ry dWN0IHZpcnRpb19uZXRfaGRyICpoZHIpCit7CisJaW50IG9mZnNldCwgcHJvdG87CisKKwlzd2l0 Y2ggKGV0aF90eXBlKSB7CisjaWYgZGVmaW5lZChJTkVUKQorCWNhc2UgRVRIRVJUWVBFX0lQOiB7 CisJCXN0cnVjdCBpcCAqaXA7CisJCWlmIChfX3ByZWRpY3RfZmFsc2UobS0+bV9sZW4gPCBpcF9z dGFydCArIHNpemVvZihzdHJ1Y3QgaXApKSkKKwkJCXJldHVybiAoMSk7CisJCWlwID0gKHN0cnVj dCBpcCAqKShtLT5tX2RhdGEgKyBpcF9zdGFydCk7CisJCXByb3RvID0gaXAtPmlwX3A7CisJCW9m ZnNldCA9IGlwX3N0YXJ0ICsgKGlwLT5pcF9obCA8PCAyKTsKKwkJYnJlYWs7CisJfQorI2VuZGlm CisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEVUSEVSVFlQRV9JUFY2OgorCQlpZiAoX19wcmVk aWN0X2ZhbHNlKG0tPm1fbGVuIDwgaXBfc3RhcnQgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBpcDZf aGRyKSkpCisJCQlyZXR1cm4gKDEpOworCQlvZmZzZXQgPSBpcDZfbGFzdGhkcihtLCBpcF9zdGFy dCwgSVBQUk9UT19JUFY2LCAmcHJvdG8pOworCQlpZiAoX19wcmVkaWN0X2ZhbHNlKG9mZnNldCA8 IDApKQorCQkJcmV0dXJuICgxKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBI ZXJlIHdlIHNob3VsZCBpbmNyZW1lbnQgdGhlIHJ4X2NzdW1fYmFkX2V0aHR5cGUgY291bnRlci4g Ki8KKwkJcmV0dXJuICgxKTsKKwl9CisKKwlzd2l0Y2ggKHByb3RvKSB7CisJY2FzZSBJUFBST1RP X1RDUDoKKwkJaWYgKF9fcHJlZGljdF9mYWxzZShtLT5tX2xlbiA8IG9mZnNldCArIHNpemVvZihz dHJ1Y3QgdGNwaGRyKSkpCisJCQlyZXR1cm4gKDEpOworCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdz IHw9IENTVU1fREFUQV9WQUxJRCB8IENTVU1fUFNFVURPX0hEUjsKKwkJbS0+bV9wa3RoZHIuY3N1 bV9kYXRhID0gMHhGRkZGOworCQlicmVhazsKKwljYXNlIElQUFJPVE9fVURQOgorCQlpZiAoX19w cmVkaWN0X2ZhbHNlKG0tPm1fbGVuIDwgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSkK KwkJCXJldHVybiAoMSk7CisJCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0gQ1NVTV9EQVRBX1ZB TElEIHwgQ1NVTV9QU0VVRE9fSERSOworCQltLT5tX3BrdGhkci5jc3VtX2RhdGEgPSAweEZGRkY7 CisJCWJyZWFrOworCWNhc2UgSVBQUk9UT19TQ1RQOgorCQlpZiAoX19wcmVkaWN0X2ZhbHNlKG0t Pm1fbGVuIDwgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpCisJCQlyZXR1cm4gKDEp OworCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzIHw9IENTVU1fU0NUUF9WQUxJRDsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRm9yIHRoZSByZW1haW5pbmcgcHJvdG9jb2xzLCBGcmVl QlNEIGRvZXMgbm90IHN1cHBvcnQKKwkJICogY2hlY2tzdW0gb2ZmbG9hZGluZywgc28gdGhlIGNo ZWNrc3VtIHdpbGwgYmUgcmVjb21wdXRlZC4KKwkJICovCisjaWYgMAorCQlpZl9wcmludGYoaWZw LCAiY2tzdW0gb2ZmbG9hZCBvZiB1bnN1cHBvcnRlZCAiCisJCSAgICAicHJvdG9jb2wgZXRoX3R5 cGU9JSN4IHByb3RvPSVkIGNzdW1fc3RhcnQ9JWQgIgorCQkgICAgImNzdW1fb2Zmc2V0PSVkXG4i LCBfX2Z1bmNfXywgZXRoX3R5cGUsIHByb3RvLAorCQkgICAgaGRyLT5jc3VtX3N0YXJ0LCBoZHIt PmNzdW1fb2Zmc2V0KTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKDApOworfQor CisvKgorICogU2V0IHRoZSBhcHByb3ByaWF0ZSBDU1VNXyogZmxhZ3MuIFVuZm9ydHVuYXRlbHks IHRoZSBpbmZvcm1hdGlvbgorICogcHJvdmlkZWQgaXMgbm90IGRpcmVjdGx5IHVzZWZ1bCB0byB1 cy4gVGhlIFZpcnRJTyBoZWFkZXIgZ2l2ZXMgdGhlCisgKiBvZmZzZXQgb2YgdGhlIGNoZWNrc3Vt LCB3aGljaCBpcyBhbGwgTGludXggbmVlZHMsIGJ1dCB0aGlzIGlzIG5vdAorICogaG93IEZyZWVC U0QgZG9lcyB0aGluZ3MuIFdlIGFyZSBmb3JjZWQgdG8gcGVlayBpbnNpZGUgdGhlIHBhY2tldAor ICogYSBiaXQuCisgKgorICogSXQgd291bGQgYmUgbmljZSBpZiBWaXJ0SU8gZ2F2ZSB1cyB0aGUg TDQgcHJvdG9jb2wgb3IgaWYgRnJlZUJTRAorICogY291bGQgYWNjZXB0IHRoZSBvZmZzZXRzIGFu ZCBsZXQgdGhlIHN0YWNrIGZpZ3VyZSBpdCBvdXQuCisgKi8KK3N0YXRpYyBpbnQKK3B0bmV0X3J4 X2NzdW0oc3RydWN0IG1idWYgKm0sIHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKQoreworCXN0 cnVjdCBldGhlcl9oZWFkZXIgKmVoOworCXN0cnVjdCBldGhlcl92bGFuX2hlYWRlciAqZXZoOwor CXVpbnQxNl90IGV0aF90eXBlOworCWludCBvZmZzZXQsIGVycm9yOworCisJZWggPSBtdG9kKG0s IHN0cnVjdCBldGhlcl9oZWFkZXIgKik7CisJZXRoX3R5cGUgPSBudG9ocyhlaC0+ZXRoZXJfdHlw ZSk7CisJaWYgKGV0aF90eXBlID09IEVUSEVSVFlQRV9WTEFOKSB7CisJCS8qIEJNVjogV2Ugc2hv dWxkIGhhbmRsZSBuZXN0ZWQgVkxBTiB0YWdzIHRvby4gKi8KKwkJZXZoID0gbXRvZChtLCBzdHJ1 Y3QgZXRoZXJfdmxhbl9oZWFkZXIgKik7CisJCWV0aF90eXBlID0gbnRvaHMoZXZoLT5ldmxfcHJv dG8pOworCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV0aGVyX3ZsYW5faGVhZGVyKTsKKwl9IGVs c2UKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpOworCisJaWYgKGhkci0+ ZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0pCisJCWVycm9yID0gcHRuZXRfcnhf Y3N1bV9ieV9vZmZzZXQobSwgZXRoX3R5cGUsIG9mZnNldCwgaGRyKTsKKwllbHNlCisJCWVycm9y ID0gcHRuZXRfcnhfY3N1bV9ieV9wYXJzZShtLCBldGhfdHlwZSwgb2Zmc2V0LCBoZHIpOworCisJ cmV0dXJuIChlcnJvcik7Cit9CisvKiBFbmQgb2Ygb2ZmbG9hZGluZy1yZWxhdGVkIGZ1bmN0aW9u cyB0byBiZSBzaGFyZWQgd2l0aCB2dG5ldC4gKi8KKworc3RhdGljIGlubGluZSB2b2lkCitwdG5l dF9zeW5jX3RhaWwoc3RydWN0IHB0bmV0X3JpbmcgKnB0cmluZywgc3RydWN0IG5ldG1hcF9rcmlu ZyAqa3JpbmcpCit7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CisK KwkvKiBVcGRhdGUgaHdjdXIgYW5kIGh3dGFpbCBhcyBrbm93biBieSB0aGUgaG9zdC4gKi8KKyAg ICAgICAgcHRuZXRtYXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCBrcmluZyk7CisKKwkv KiBubV9zeW5jX2ZpbmFsaXplICovCisJcmluZy0+dGFpbCA9IGtyaW5nLT5ydGFpbCA9IGtyaW5n LT5ucl9od3RhaWw7Cit9CisKK3N0YXRpYyB2b2lkCitwdG5ldF9yaW5nX3VwZGF0ZShzdHJ1Y3Qg cHRuZXRfcXVldWUgKnBxLCBzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywKKwkJICB1bnNpZ25l ZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IHN5bmNfZmxhZ3MpCit7CisJc3RydWN0IG5ldG1hcF9y aW5nICpyaW5nID0ga3JpbmctPnJpbmc7CisJc3RydWN0IHB0bmV0X3JpbmcgKnB0cmluZyA9IHBx LT5wdHJpbmc7CisKKwkvKiBTb21lIHBhY2tldHMgaGF2ZSBiZWVuIHB1c2hlZCB0byB0aGUgbmV0 bWFwIHJpbmcuIFdlIGhhdmUKKwkgKiB0byB0ZWxsIHRoZSBob3N0IHRvIHByb2Nlc3MgdGhlIG5l dyBwYWNrZXRzLCB1cGRhdGluZyBjdXIKKwkgKiBhbmQgaGVhZCBpbiB0aGUgQ1NCLiAqLworCXJp bmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFkOworCisJLyogTWltaWMgbm1fdHhzeW5jX3Byb2xv Z3VlL25tX3J4c3luY19wcm9sb2d1ZS4gKi8KKwlrcmluZy0+cmN1ciA9IGtyaW5nLT5yaGVhZCA9 IGhlYWQ7CisKKwlwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+ cmN1ciwga3JpbmctPnJoZWFkKTsKKworCS8qIEtpY2sgdGhlIGhvc3QgaWYgbmVlZGVkLiAqLwor CWlmIChOTV9BQ0NFU1NfT05DRShwdHJpbmctPmhvc3RfbmVlZF9raWNrKSkgeworCQlwdHJpbmct PnN5bmNfZmxhZ3MgPSBzeW5jX2ZsYWdzOworCQlwdG5ldF9raWNrKHBxKTsKKwl9Cit9CisKKyNk ZWZpbmUgUFRORVRfVFhfTk9TUEFDRShfaCwgX2ssIF9taW4pCVwKKwkoKCgoX2gpIDwgKF9rKS0+ cnRhaWwpID8gMCA6IChfayktPm5rcl9udW1fc2xvdHMpICsgXAorCQkoX2spLT5ydGFpbCAtIChf aCkpIDwgKF9taW4pCisKKy8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBieSB0aGUgbmV0 d29yayBzdGFjaywgb3IgYnkKKyAqIGJ5IHRoZSB0YXNrcXVldWUgdGhyZWFkLiAqLworc3RhdGlj IGludAorcHRuZXRfZHJhaW5fdHJhbnNtaXRfcXVldWUoc3RydWN0IHB0bmV0X3F1ZXVlICpwcSwg dW5zaWduZWQgaW50IGJ1ZGdldCwKKwkJCSAgIGJvb2wgbWF5X3Jlc2NoZWQpCit7CisJc3RydWN0 IHB0bmV0X3NvZnRjICpzYyA9IHBxLT5zYzsKKwlib29sIGhhdmVfdm5ldF9oZHIgPSBzYy0+dm5l dF9oZHJfbGVuOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSAmc2MtPnB0bmEtPmRyLnVw OworCWlmX3QgaWZwID0gc2MtPmlmcDsKKwl1bnNpZ25lZCBpbnQgYmF0Y2hfY291bnQgPSAwOwor CXN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmc7CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3Jpbmc7 CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCXN0cnVjdCBuZXRtYXBfc2xvdCAqc2xvdDsK Kwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCXVuc2lnbmVkIGludCBtaW5zcGFjZTsKKwl1bnNp Z25lZCBpbnQgaGVhZDsKKwl1bnNpZ25lZCBpbnQgbGltOworCXN0cnVjdCBtYnVmICptaGVhZDsK KwlzdHJ1Y3QgbWJ1ZiAqbWY7CisJaW50IG5tYnVmX2J5dGVzOworCXVpbnQ4X3QgKm5tYnVmOwor CisJaWYgKCFQVE5FVF9RX1RSWUxPQ0socHEpKSB7CisJCS8qIFdlIGZhaWxlZCB0byBhY3F1aXJl IHRoZSBsb2NrLCBzY2hlZHVsZSB0aGUgdGFza3F1ZXVlLiAqLworCQlSRCgxLCAiRGVmZXJyaW5n IFRYIHdvcmsiKTsKKwkJaWYgKG1heV9yZXNjaGVkKSB7CisJCQl0YXNrcXVldWVfZW5xdWV1ZShw cS0+dGFza3EsICZwcS0+dGFzayk7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodW5s aWtlbHkoIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpKSB7CisJCVBUTkVU X1FfVU5MT0NLKHBxKTsKKwkJUkQoMSwgIkludGVyZmFjZSBpcyBkb3duIik7CisJCXJldHVybiBF TkVURE9XTjsKKwl9CisKKwlwdHJpbmcgPSBwcS0+cHRyaW5nOworCWtyaW5nID0gbmEtPnR4X3Jp bmdzICsgcHEtPmtyaW5nX2lkOworCXJpbmcgPSBrcmluZy0+cmluZzsKKwlsaW0gPSBrcmluZy0+ bmtyX251bV9zbG90cyAtIDE7CisJaGVhZCA9IHJpbmctPmhlYWQ7CisJbWluc3BhY2UgPSBzYy0+ bWluX3R4X3NwYWNlOworCisJd2hpbGUgKGNvdW50IDwgYnVkZ2V0KSB7CisJCWlmIChQVE5FVF9U WF9OT1NQQUNFKGhlYWQsIGtyaW5nLCBtaW5zcGFjZSkpIHsKKwkJCS8qIFdlIHJhbiBvdXQgb2Yg c2xvdCwgbGV0J3Mgc2VlIGlmIHRoZSBob3N0IGhhcworCQkJICogZnJlZWQgdXAgc29tZSwgYnkg cmVhZGluZyBod2N1ciBhbmQgaHd0YWlsIGZyb20KKwkJCSAqIHRoZSBDU0IuICovCisJCQlwdG5l dF9zeW5jX3RhaWwocHRyaW5nLCBrcmluZyk7CisKKwkJCWlmIChQVE5FVF9UWF9OT1NQQUNFKGhl YWQsIGtyaW5nLCBtaW5zcGFjZSkpIHsKKwkJCQkvKiBTdGlsbCBubyBzbG90cyBhdmFpbGFibGUu IFJlYWN0aXZhdGUgdGhlCisJCQkJICogaW50ZXJydXB0cyBzbyB0aGF0IHdlIGNhbiBiZSBub3Rp ZmllZAorCQkJCSAqIHdoZW4gc29tZSBmcmVlIHNsb3RzIGFyZSBtYWRlIGF2YWlsYWJsZSBieQor CQkJCSAqIHRoZSBob3N0LiAqLworCQkJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNrID0gMTsKKwor CQkJCS8qIERvdWJsZS1jaGVjay4gKi8KKwkJCQlwdG5ldF9zeW5jX3RhaWwocHRyaW5nLCBrcmlu Zyk7CisJCQkJaWYgKGxpa2VseShQVE5FVF9UWF9OT1NQQUNFKGhlYWQsIGtyaW5nLAorCQkJCQkJ CSAgICBtaW5zcGFjZSkpKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCVJEKDEsICJGb3Vu ZCBtb3JlIHNsb3RzIGJ5IGRvdWJsZWNoZWNrIik7CisJCQkJLyogTW9yZSBzbG90cyB3ZXJlIGZy ZWVkIGJlZm9yZSByZWFjdGl2YXRpbmcKKwkJCQkgKiB0aGUgaW50ZXJydXB0cy4gKi8KKwkJCQlw dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisJCQl9CisJCX0KKworCQltaGVhZCA9IGRyYnJf cGVlayhpZnAsIHBxLT5idWZyaW5nKTsKKwkJaWYgKCFtaGVhZCkgeworCQkJYnJlYWs7CisJCX0K KworCQkvKiBJbml0aWFsaXplIHRyYW5zbWlzc2lvbiBzdGF0ZSB2YXJpYWJsZXMuICovCisJCXNs b3QgPSByaW5nLT5zbG90ICsgaGVhZDsKKwkJbm1idWYgPSBOTUIobmEsIHNsb3QpOworCQlubWJ1 Zl9ieXRlcyA9IDA7CisKKwkJLyogSWYgbmVlZGVkLCBwcmVwYXJlIHRoZSB2aXJ0aW8tbmV0IGhl YWRlciBhdCB0aGUgYmVnaW5uaW5nCisJCSAqIG9mIHRoZSBmaXJzdCBzbG90LiAqLworCQlpZiAo aGF2ZV92bmV0X2hkcikgeworCQkJc3RydWN0IHZpcnRpb19uZXRfaGRyICp2aCA9CisJCQkJCShz dHJ1Y3QgdmlydGlvX25ldF9oZHIgKilubWJ1ZjsKKworCQkJLyogRm9yIHBlcmZvcm1hbmNlLCB3 ZSBjb3VsZCByZXBsYWNlIHRoaXMgbWVtc2V0KCkgd2l0aAorCQkJICogdHdvIDgtYnl0ZXMtd2lk ZSB3cml0ZXMuICovCisJCQltZW1zZXQobm1idWYsIDAsIFBUTkVUX0hEUl9TSVpFKTsKKwkJCWlm IChtaGVhZC0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIFBUTkVUX0FMTF9PRkZMT0FEKSB7CisJCQkJ bWhlYWQgPSBwdG5ldF90eF9vZmZsb2FkKGlmcCwgbWhlYWQsIGZhbHNlLAorCQkJCQkJCSB2aCk7 CisJCQkJaWYgKHVubGlrZWx5KCFtaGVhZCkpIHsKKwkJCQkJLyogUGFja2V0IGRyb3BwZWQgYmVj YXVzZSBlcnJvcnMKKwkJCQkJICogb2NjdXJyZWQgd2hpbGUgcHJlcGFyaW5nIHRoZSB2bmV0CisJ CQkJCSAqIGhlYWRlci4gTGV0J3MgZ28gYWhlYWQgd2l0aCB0aGUgbmV4dAorCQkJCQkgKiBwYWNr ZXQuICovCisJCQkJCXBxLT5zdGF0cy5lcnJvcnMgKys7CisJCQkJCWRyYnJfYWR2YW5jZShpZnAs IHBxLT5idWZyaW5nKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJTkQoMSwgIiVz OiBbY3N1bV9mbGFncyAlbFhdIHZuZXQgaGRyOiBmbGFncyAleCAiCisJCQkgICAgICAiY3N1bV9z dGFydCAldSBjc3VtX29mcyAldSBoZHJfbGVuID0gJXUgIgorCQkJICAgICAgImdzb19zaXplICV1 IGdzb190eXBlICV4IiwgX19mdW5jX18sCisJCQkgICAgICBtaGVhZC0+bV9wa3RoZHIuY3N1bV9m bGFncywgdmgtPmZsYWdzLAorCQkJICAgICAgdmgtPmNzdW1fc3RhcnQsIHZoLT5jc3VtX29mZnNl dCwgdmgtPmhkcl9sZW4sCisJCQkgICAgICB2aC0+Z3NvX3NpemUsIHZoLT5nc29fdHlwZSk7CisK KwkJCW5tYnVmICs9IFBUTkVUX0hEUl9TSVpFOworCQkJbm1idWZfYnl0ZXMgKz0gUFRORVRfSERS X1NJWkU7CisJCX0KKworCQlmb3IgKG1mID0gbWhlYWQ7IG1mOyBtZiA9IG1mLT5tX25leHQpIHsK KwkJCXVpbnQ4X3QgKm1kYXRhID0gbWYtPm1fZGF0YTsKKwkJCWludCBtbGVuID0gbWYtPm1fbGVu OworCisJCQlmb3IgKDs7KSB7CisJCQkJaW50IGNvcHkgPSBORVRNQVBfQlVGX1NJWkUobmEpIC0g bm1idWZfYnl0ZXM7CisKKwkJCQlpZiAobWxlbiA8IGNvcHkpIHsKKwkJCQkJY29weSA9IG1sZW47 CisJCQkJfQorCQkJCW1lbWNweShubWJ1ZiwgbWRhdGEsIGNvcHkpOworCisJCQkJbWRhdGEgKz0g Y29weTsKKwkJCQltbGVuIC09IGNvcHk7CisJCQkJbm1idWYgKz0gY29weTsKKwkJCQlubWJ1Zl9i eXRlcyArPSBjb3B5OworCisJCQkJaWYgKCFtbGVuKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwor CQkJCXNsb3QtPmxlbiA9IG5tYnVmX2J5dGVzOworCQkJCXNsb3QtPmZsYWdzID0gTlNfTU9SRUZS QUc7CisKKwkJCQloZWFkID0gbm1fbmV4dChoZWFkLCBsaW0pOworCQkJCUtBU1NFUlQoaGVhZCAh PSByaW5nLT50YWlsLAorCQkJCQkoIlVuZXhwZWN0ZWRseSBydW4gb3V0IG9mIFRYIHNwYWNlIikp OworCQkJCXNsb3QgPSByaW5nLT5zbG90ICsgaGVhZDsKKwkJCQlubWJ1ZiA9IE5NQihuYSwgc2xv dCk7CisJCQkJbm1idWZfYnl0ZXMgPSAwOworCQkJfQorCQl9CisKKwkJLyogQ29tcGxldGUgbGFz dCBzbG90IGFuZCB1cGRhdGUgaGVhZC4gKi8KKwkJc2xvdC0+bGVuID0gbm1idWZfYnl0ZXM7CisJ CXNsb3QtPmZsYWdzID0gMDsKKwkJaGVhZCA9IG5tX25leHQoaGVhZCwgbGltKTsKKworCQkvKiBD b25zdW1lIHRoZSBwYWNrZXQganVzdCBwcm9jZXNzZWQuICovCisJCWRyYnJfYWR2YW5jZShpZnAs IHBxLT5idWZyaW5nKTsKKworCQkvKiBDb3B5IHRoZSBwYWNrZXQgdG8gbGlzdGVuZXJzLiAqLwor CQlFVEhFUl9CUEZfTVRBUChpZnAsIG1oZWFkKTsKKworCQlwcS0+c3RhdHMucGFja2V0cyArKzsK KwkJcHEtPnN0YXRzLmJ5dGVzICs9IG1oZWFkLT5tX3BrdGhkci5sZW47CisJCWlmIChtaGVhZC0+ bV9mbGFncyAmIE1fTUNBU1QpIHsKKwkJCXBxLT5zdGF0cy5tY2FzdHMgKys7CisJCX0KKworCQlt X2ZyZWVtKG1oZWFkKTsKKworCQljb3VudCArKzsKKwkJaWYgKCsrYmF0Y2hfY291bnQgPT0gUFRO RVRfVFhfQkFUQ0gpIHsKKwkJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFG X0ZPUkNFX1JFQ0xBSU0pOworCQkJYmF0Y2hfY291bnQgPSAwOworCQl9CisJfQorCisJaWYgKGJh dGNoX2NvdW50KSB7CisJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFGX0ZP UkNFX1JFQ0xBSU0pOworCX0KKworCWlmIChjb3VudCA+PSBidWRnZXQgJiYgbWF5X3Jlc2NoZWQp IHsKKwkJREJHKFJEKDEsICJvdXQgb2YgYnVkZ2V0OiByZXNjaGVkLCAlZCBtYnVmcyBwZW5kaW5n XG4iLAorCQkJCQlkcmJyX2ludXNlKGlmcCwgcHEtPmJ1ZnJpbmcpKSk7CisJCXRhc2txdWV1ZV9l bnF1ZXVlKHBxLT50YXNrcSwgJnBxLT50YXNrKTsKKwl9CisKKwlQVE5FVF9RX1VOTE9DSyhwcSk7 CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3RyYW5zbWl0KGlmX3Qg aWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0gaWZfZ2V0 c29mdGMoaWZwKTsKKwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxOworCXVuc2lnbmVkIGludCBxdWV1 ZV9pZHg7CisJaW50IGVycjsKKworCURCRyhkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJ0cmFuc21p dCAlcFxuIiwgbSkpOworCisJLyogSW5zZXJ0IDgwMi4xUSBoZWFkZXIgaWYgbmVlZGVkLiAqLwor CWlmIChtLT5tX2ZsYWdzICYgTV9WTEFOVEFHKSB7CisJCW0gPSBldGhlcl92bGFuZW5jYXAobSwg bS0+bV9wa3RoZHIuZXRoZXJfdnRhZyk7CisJCWlmIChtID09IE5VTEwpIHsKKwkJCXJldHVybiBF Tk9CVUZTOworCQl9CisJCW0tPm1fZmxhZ3MgJj0gfk1fVkxBTlRBRzsKKwl9CisKKwkvKiBHZXQg dGhlIGZsb3ctaWQgaWYgYXZhaWxhYmxlLiAqLworCXF1ZXVlX2lkeCA9IChNX0hBU0hUWVBFX0dF VChtKSAhPSBNX0hBU0hUWVBFX05PTkUpID8KKwkJICAgIG0tPm1fcGt0aGRyLmZsb3dpZCA6IGN1 cmNwdTsKKworCWlmICh1bmxpa2VseShxdWV1ZV9pZHggPj0gc2MtPm51bV90eF9yaW5ncykpIHsK KwkJcXVldWVfaWR4ICU9IHNjLT5udW1fdHhfcmluZ3M7CisJfQorCisJcHEgPSBzYy0+cXVldWVz ICsgcXVldWVfaWR4OworCisJZXJyID0gZHJicl9lbnF1ZXVlKGlmcCwgcHEtPmJ1ZnJpbmcsIG0p OworCWlmIChlcnIpIHsKKwkJLyogRU5PQlVGUyB3aGVuIHRoZSBidWZyaW5nIGlzIGZ1bGwgKi8K KwkJUkQoMSwgIiVzOiBkcmJyX2VucXVldWUoKSBmYWlsZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywg ZXJyKTsKKwkJcHEtPnN0YXRzLmVycm9ycyArKzsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAo aWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9QT0xMSU5HKSB7CisJCS8qIElmIHBvbGxpbmcgaXMg b24sIHRoZSB0cmFuc21pdCBxdWV1ZXMgd2lsbCBiZQorCQkgKiBkcmFpbmVkIGJ5IHRoZSBwb2xs ZXIuICovCisJCXJldHVybiAwOworCX0KKworCWVyciA9IHB0bmV0X2RyYWluX3RyYW5zbWl0X3F1 ZXVlKHBxLCBQVE5FVF9UWF9CVURHRVQsIHRydWUpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVy ciA6IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3B0bmV0X3J4X2Rpc2NhcmQoc3RydWN0 IG5ldG1hcF9rcmluZyAqa3JpbmcsIHVuc2lnbmVkIGludCBoZWFkKQoreworCXN0cnVjdCBuZXRt YXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOworCXN0cnVjdCBuZXRtYXBfc2xvdCAqc2xvdCA9 IHJpbmctPnNsb3QgKyBoZWFkOworCisJZm9yICg7OykgeworCQloZWFkID0gbm1fbmV4dChoZWFk LCBrcmluZy0+bmtyX251bV9zbG90cyAtIDEpOworCQlpZiAoIShzbG90LT5mbGFncyAmIE5TX01P UkVGUkFHKSB8fCBoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJCWJyZWFrOworCQl9CisJCXNsb3Qg PSByaW5nLT5zbG90ICsgaGVhZDsKKwl9CisKKwlyZXR1cm4gaGVhZDsKK30KKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgbWJ1ZiAqCitwdG5ldF9yeF9zbG90KHN0cnVjdCBtYnVmICptdGFpbCwgdWlu dDhfdCAqbm1idWYsIHVuc2lnbmVkIGludCBubWJ1Zl9sZW4pCit7CisJdWludDhfdCAqbWRhdGEg PSBtdG9kKG10YWlsLCB1aW50OF90ICopICsgbXRhaWwtPm1fbGVuOworCisJZG8geworCQl1bnNp Z25lZCBpbnQgY29weTsKKworCQlpZiAobXRhaWwtPm1fbGVuID09IE1DTEJZVEVTKSB7CisJCQlz dHJ1Y3QgbWJ1ZiAqbWY7CisKKwkJCW1mID0gbV9nZXRjbChNX05PV0FJVCwgTVRfREFUQSwgMCk7 CisJCQlpZiAodW5saWtlbHkoIW1mKSkgeworCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQlt dGFpbC0+bV9uZXh0ID0gbWY7CisJCQltdGFpbCA9IG1mOworCQkJbWRhdGEgPSBtdG9kKG10YWls LCB1aW50OF90ICopOworCQkJbXRhaWwtPm1fbGVuID0gMDsKKwkJfQorCisJCWNvcHkgPSBNQ0xC WVRFUyAtIG10YWlsLT5tX2xlbjsKKwkJaWYgKG5tYnVmX2xlbiA8IGNvcHkpIHsKKwkJCWNvcHkg PSBubWJ1Zl9sZW47CisJCX0KKworCQltZW1jcHkobWRhdGEsIG5tYnVmLCBjb3B5KTsKKworCQlu bWJ1ZiArPSBjb3B5OworCQlubWJ1Zl9sZW4gLT0gY29weTsKKwkJbWRhdGEgKz0gY29weTsKKwkJ bXRhaWwtPm1fbGVuICs9IGNvcHk7CisJfSB3aGlsZSAobm1idWZfbGVuKTsKKworCXJldHVybiBt dGFpbDsKK30KKworc3RhdGljIGludAorcHRuZXRfcnhfZW9mKHN0cnVjdCBwdG5ldF9xdWV1ZSAq cHEsIHVuc2lnbmVkIGludCBidWRnZXQsIGJvb2wgbWF5X3Jlc2NoZWQpCit7CisJc3RydWN0IHB0 bmV0X3NvZnRjICpzYyA9IHBxLT5zYzsKKwlib29sIGhhdmVfdm5ldF9oZHIgPSBzYy0+dm5ldF9o ZHJfbGVuOworCXN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcgPSBwcS0+cHRyaW5nOworCXN0cnVj dCBuZXRtYXBfYWRhcHRlciAqbmEgPSAmc2MtPnB0bmEtPmRyLnVwOworCXN0cnVjdCBuZXRtYXBf a3JpbmcgKmtyaW5nID0gbmEtPnJ4X3JpbmdzICsgcHEtPmtyaW5nX2lkOworCXN0cnVjdCBuZXRt YXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOworCXVuc2lnbmVkIGludCBjb25zdCBsaW0gPSBr cmluZy0+bmtyX251bV9zbG90cyAtIDE7CisJdW5zaWduZWQgaW50IGhlYWQgPSByaW5nLT5oZWFk OworCXVuc2lnbmVkIGludCBiYXRjaF9jb3VudCA9IDA7CisJaWZfdCBpZnAgPSBzYy0+aWZwOwor CXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisKKwlQVE5FVF9RX0xPQ0socHEpOworCisJaWYgKHVu bGlrZWx5KCEoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpKSkgeworCQlnb3Rv IHVubG9jazsKKwl9CisKKwlrcmluZy0+bnJfa2ZsYWdzICY9IH5OS1JfUEVORElOVFI7CisKKwl3 aGlsZSAoY291bnQgPCBidWRnZXQpIHsKKwkJdW5zaWduZWQgaW50IHByZXZfaGVhZCA9IGhlYWQ7 CisJCXN0cnVjdCBtYnVmICptaGVhZCwgKm10YWlsOworCQlzdHJ1Y3QgdmlydGlvX25ldF9oZHIg KnZoOworCQlzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnNsb3Q7CisJCXVuc2lnbmVkIGludCBubWJ1Zl9s ZW47CisJCXVpbnQ4X3QgKm5tYnVmOworaG9zdF9zeW5jOgorCQlpZiAoaGVhZCA9PSByaW5nLT50 YWlsKSB7CisJCQkvKiBXZSByYW4gb3V0IG9mIHNsb3QsIGxldCdzIHNlZSBpZiB0aGUgaG9zdCBo YXMKKwkJCSAqIGFkZGVkIHNvbWUsIGJ5IHJlYWRpbmcgaHdjdXIgYW5kIGh3dGFpbCBmcm9tCisJ CQkgKiB0aGUgQ1NCLiAqLworCQkJcHRuZXRfc3luY190YWlsKHB0cmluZywga3JpbmcpOworCisJ CQlpZiAoaGVhZCA9PSByaW5nLT50YWlsKSB7CisJCQkJLyogU3RpbGwgbm8gc2xvdHMgYXZhaWxh YmxlLiBSZWFjdGl2YXRlCisJCQkJICogaW50ZXJydXB0cyBhcyB0aGV5IHdlcmUgZGlzYWJsZWQg YnkgdGhlCisJCQkJICogaG9zdCB0aHJlYWQgcmlnaHQgYmVmb3JlIGlzc3VpbmcgdGhlCisJCQkJ ICogbGFzdCBpbnRlcnJ1cHQuICovCisJCQkJcHRyaW5nLT5ndWVzdF9uZWVkX2tpY2sgPSAxOwor CisJCQkJLyogRG91YmxlLWNoZWNrLiAqLworCQkJCXB0bmV0X3N5bmNfdGFpbChwdHJpbmcsIGty aW5nKTsKKwkJCQlpZiAobGlrZWx5KGhlYWQgPT0gcmluZy0+dGFpbCkpIHsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCQkJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNrID0gMDsKKwkJCX0KKwkJfQorCisJ CS8qIEluaXRpYWxpemUgcmluZyBzdGF0ZSB2YXJpYWJsZXMsIHBvc3NpYmx5IGdyYWJiaW5nIHRo ZQorCQkgKiB2aXJ0aW8tbmV0IGhlYWRlci4gKi8KKwkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFk OworCQlubWJ1ZiA9IE5NQihuYSwgc2xvdCk7CisJCW5tYnVmX2xlbiA9IHNsb3QtPmxlbjsKKwor CQl2aCA9IChzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKilubWJ1ZjsKKwkJaWYgKGhhdmVfdm5ldF9o ZHIpIHsKKwkJCWlmICh1bmxpa2VseShubWJ1Zl9sZW4gPCBQVE5FVF9IRFJfU0laRSkpIHsKKwkJ CQkvKiBUaGVyZSBpcyBubyBnb29kIHJlYXNvbiB3aHkgaG9zdCBzaG91bGQKKwkJCQkgKiBwdXQg dGhlIGhlYWRlciBpbiBtdWx0aXBsZSBuZXRtYXAgc2xvdHMuCisJCQkJICogSWYgdGhpcyBpcyB0 aGUgY2FzZSwgZGlzY2FyZC4gKi8KKwkJCQlSRCgxLCAiRnJhZ21lbnRlZCB2bmV0LWhkcjogZHJv cHBpbmciKTsKKwkJCQloZWFkID0gcHRuZXRfcnhfZGlzY2FyZChrcmluZywgaGVhZCk7CisJCQkJ cHEtPnN0YXRzLmlxZHJvcHMgKys7CisJCQkJZ290byBza2lwOworCQkJfQorCQkJTkQoMSwgIiVz OiB2bmV0IGhkcjogZmxhZ3MgJXggY3N1bV9zdGFydCAldSAiCisJCQkgICAgICAiY3N1bV9vZnMg JXUgaGRyX2xlbiA9ICV1IGdzb19zaXplICV1ICIKKwkJCSAgICAgICJnc29fdHlwZSAleCIsIF9f ZnVuY19fLCB2aC0+ZmxhZ3MsCisJCQkgICAgICB2aC0+Y3N1bV9zdGFydCwgdmgtPmNzdW1fb2Zm c2V0LCB2aC0+aGRyX2xlbiwKKwkJCSAgICAgIHZoLT5nc29fc2l6ZSwgdmgtPmdzb190eXBlKTsK KwkJCW5tYnVmICs9IFBUTkVUX0hEUl9TSVpFOworCQkJbm1idWZfbGVuIC09IFBUTkVUX0hEUl9T SVpFOworCQl9CisKKwkJLyogQWxsb2NhdGUgdGhlIGhlYWQgb2YgYSBuZXcgbWJ1ZiBjaGFpbi4K KwkJICogV2UgdXNlIG1fZ2V0Y2woKSB0byBhbGxvY2F0ZSBhbiBtYnVmIHdpdGggc3RhbmRhcmQg Y2x1c3RlcgorCQkgKiBzaXplIChNQ0xCWVRFUykuIEluIHRoZSBmdXR1cmUgd2UgY291bGQgdXNl IG1fZ2V0amNsKCkKKwkJICogdG8gY2hvb3NlIGRpZmZlcmVudCBzaXplcy4gKi8KKwkJbWhlYWQg PSBtdGFpbCA9IG1fZ2V0Y2woTV9OT1dBSVQsIE1UX0RBVEEsIE1fUEtUSERSKTsKKwkJaWYgKHVu bGlrZWx5KG1oZWFkID09IE5VTEwpKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICIlczog ZmFpbGVkIHRvIGFsbG9jYXRlIG1idWYgIgorCQkJCSAgICAgICJoZWFkXG4iLCBfX2Z1bmNfXyk7 CisJCQlwcS0+c3RhdHMuZXJyb3JzICsrOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbml0aWFs aXplIHRoZSBtYnVmIHN0YXRlIHZhcmlhYmxlcy4gKi8KKwkJbWhlYWQtPm1fcGt0aGRyLmxlbiA9 IG5tYnVmX2xlbjsKKwkJbXRhaWwtPm1fbGVuID0gMDsKKworCQkvKiBTY2FuIGFsbCB0aGUgbmV0 bWFwIHNsb3RzIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcGFja2V0LiAqLworCQlmb3IgKDs7KSB7 CisJCQlEQkcoZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiJXM6IGggJXUgdCAldSByY3YgZnJhZyAi CisJCQkJCSAgImxlbiAldSwgZmxhZ3MgJXVcbiIsIF9fZnVuY19fLAorCQkJCQkgIGhlYWQsIHJp bmctPnRhaWwsIHNsb3QtPmxlbiwKKwkJCQkJICBzbG90LT5mbGFncykpOworCisJCQltdGFpbCA9 IHB0bmV0X3J4X3Nsb3QobXRhaWwsIG5tYnVmLCBubWJ1Zl9sZW4pOworCQkJaWYgKHVubGlrZWx5 KCFtdGFpbCkpIHsKKwkJCQkvKiBPdWNoLiBXZSByYW4gb3V0IG9mIG1lbW9yeSB3aGlsZSBwcm9j ZXNzaW5nCisJCQkJICogYSBwYWNrZXQuIFdlIGhhdmUgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXMK KwkJCQkgKiBoZWFkIHBvc2l0aW9uLCBmcmVlIHRoZSBtYnVmIGNoYWluLCBhbmQKKwkJCQkgKiBz Y2hlZHVsZSB0aGUgdGFza3F1ZXVlIHRvIGdpdmUgdGhlIHBhY2tldAorCQkJCSAqIGFub3RoZXIg Y2hhbmNlLiAqLworCQkJCWRldmljZV9wcmludGYoc2MtPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxs b2NhdGUiCisJCQkJCSIgbWJ1ZiBmcmFnLCByZXNldCBoZWFkICV1IC0tPiAldVxuIiwKKwkJCQkJ X19mdW5jX18sIGhlYWQsIHByZXZfaGVhZCk7CisJCQkJaGVhZCA9IHByZXZfaGVhZDsKKwkJCQlt X2ZyZWVtKG1oZWFkKTsKKwkJCQlwcS0+c3RhdHMuZXJyb3JzICsrOworCQkJCWlmIChtYXlfcmVz Y2hlZCkgeworCQkJCQl0YXNrcXVldWVfZW5xdWV1ZShwcS0+dGFza3EsCisJCQkJCQkJICAmcHEt PnRhc2spOworCQkJCX0KKwkJCQlnb3RvIGVzY2FwZTsKKwkJCX0KKworCQkJLyogV2UgaGF2ZSB0 byBpbmNyZW1lbnQgaGVhZCBpcnJlc3BlY3RpdmUgb2YgdGhlCisJCQkgKiBOU19NT1JFRlJBRyBi ZWluZyBzZXQgb3Igbm90LiAqLworCQkJaGVhZCA9IG5tX25leHQoaGVhZCwgbGltKTsKKworCQkJ aWYgKCEoc2xvdC0+ZmxhZ3MgJiBOU19NT1JFRlJBRykpIHsKKwkJCQlicmVhazsKKwkJCX0KKwor CQkJaWYgKHVubGlrZWx5KGhlYWQgPT0gcmluZy0+dGFpbCkpIHsKKwkJCQkvKiBUaGUgdmVyeSBs YXN0IHNsb3QgcHJlcGFyZWQgYnkgdGhlIGhvc3QgaGFzCisJCQkJICogdGhlIE5TX01PUkVGUkFH IHNldC4gRHJvcCBpdCBhbmQgY29udGludWUKKwkJCQkgKiB0aGUgb3V0ZXIgY3ljbGUgKHRvIGRv IHRoZSBkb3VibGUtY2hlY2spLiAqLworCQkJCVJEKDEsICJJbmNvbXBsZXRlIHBhY2tldDogZHJv cHBpbmciKTsKKwkJCQltX2ZyZWVtKG1oZWFkKTsKKwkJCQlwcS0+c3RhdHMuaXFkcm9wcyArKzsK KwkJCQlnb3RvIGhvc3Rfc3luYzsKKwkJCX0KKworCQkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFk OworCQkJbm1idWYgPSBOTUIobmEsIHNsb3QpOworCQkJbm1idWZfbGVuID0gc2xvdC0+bGVuOwor CQkJbWhlYWQtPm1fcGt0aGRyLmxlbiArPSBubWJ1Zl9sZW47CisJCX0KKworCQltaGVhZC0+bV9w a3RoZHIucmN2aWYgPSBpZnA7CisJCW1oZWFkLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gMDsKKwor CQkvKiBTdG9yZSB0aGUgcXVldWUgaWR4IGluIHRoZSBwYWNrZXQgaGVhZGVyLiAqLworCQltaGVh ZC0+bV9wa3RoZHIuZmxvd2lkID0gcHEtPmtyaW5nX2lkOworCQlNX0hBU0hUWVBFX1NFVChtaGVh ZCwgTV9IQVNIVFlQRV9PUEFRVUUpOworCisJCWlmIChpZnAtPmlmX2NhcGVuYWJsZSAmIElGQ0FQ X1ZMQU5fSFdUQUdHSU5HKSB7CisJCQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICplaDsKKworCQkJZWgg PSBtdG9kKG1oZWFkLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopOworCQkJaWYgKGVoLT5ldGhlcl90 eXBlID09IGh0b25zKEVUSEVSVFlQRV9WTEFOKSkgeworCQkJCXB0bmV0X3ZsYW5fdGFnX3JlbW92 ZShtaGVhZCk7CisJCQkJLyoKKwkJCQkgKiBXaXRoIHRoZSA4MDIuMVEgaGVhZGVyIHJlbW92ZWQs IHVwZGF0ZSB0aGUKKwkJCQkgKiBjaGVja3N1bSBzdGFydGluZyBsb2NhdGlvbiBhY2NvcmRpbmds eS4KKwkJCQkgKi8KKwkJCQlpZiAodmgtPmZsYWdzICYgVklSVElPX05FVF9IRFJfRl9ORUVEU19D U1VNKQorCQkJCQl2aC0+Y3N1bV9zdGFydCAtPSBFVEhFUl9WTEFOX0VOQ0FQX0xFTjsKKwkJCX0K KwkJfQorCisJCWlmIChoYXZlX3ZuZXRfaGRyICYmICh2aC0+ZmxhZ3MgJiAoVklSVElPX05FVF9I RFJfRl9ORUVEU19DU1VNCisJCQkJCXwgVklSVElPX05FVF9IRFJfRl9EQVRBX1ZBTElEKSkpIHsK KwkJCWlmICh1bmxpa2VseShwdG5ldF9yeF9jc3VtKG1oZWFkLCB2aCkpKSB7CisJCQkJbV9mcmVl bShtaGVhZCk7CisJCQkJUkQoMSwgIkNzdW0gb2ZmbG9hZCBlcnJvcjogZHJvcHBpbmciKTsKKwkJ CQlwcS0+c3RhdHMuaXFkcm9wcyArKzsKKwkJCQlnb3RvIHNraXA7CisJCQl9CisJCX0KKworCQlw cS0+c3RhdHMucGFja2V0cyArKzsKKwkJcHEtPnN0YXRzLmJ5dGVzICs9IG1oZWFkLT5tX3BrdGhk ci5sZW47CisKKwkJUFRORVRfUV9VTkxPQ0socHEpOworCQkoKmlmcC0+aWZfaW5wdXQpKGlmcCwg bWhlYWQpOworCQlQVE5FVF9RX0xPQ0socHEpOworCisJCWlmICh1bmxpa2VseSghKGlmcC0+aWZf ZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSkpIHsKKwkJCS8qIFRoZSBpbnRlcmZhY2UgaGFz IGdvbmUgZG93biB3aGlsZSB3ZSBkaWRuJ3QKKwkJCSAqIGhhdmUgdGhlIGxvY2suIFN0b3AgYW55 IHByb2Nlc3NpbmcgYW5kIGV4aXQuICovCisJCQlnb3RvIHVubG9jazsKKwkJfQorc2tpcDoKKwkJ Y291bnQgKys7CisJCWlmICgrK2JhdGNoX2NvdW50ID09IFBUTkVUX1JYX0JBVENIKSB7CisJCQkv KiBTb21lIHBhY2tldHMgaGF2ZSBiZWVuIHB1c2hlZCB0byB0aGUgbmV0d29yayBzdGFjay4KKwkJ CSAqIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBDU0IgdG8gdGVsbCB0aGUgaG9zdCBhYm91dCB0aGUg bmV3CisJCQkgKiByaW5nLT5jdXIgYW5kIHJpbmctPmhlYWQgKFJYIGJ1ZmZlciByZWZpbGwpLiAq LworCQkJcHRuZXRfcmluZ191cGRhdGUocHEsIGtyaW5nLCBoZWFkLCBOQUZfRk9SQ0VfUkVBRCk7 CisJCQliYXRjaF9jb3VudCA9IDA7CisJCX0KKwl9Citlc2NhcGU6CisJaWYgKGJhdGNoX2NvdW50 KSB7CisJCXB0bmV0X3JpbmdfdXBkYXRlKHBxLCBrcmluZywgaGVhZCwgTkFGX0ZPUkNFX1JFQUQp OworCisJfQorCisJaWYgKGNvdW50ID49IGJ1ZGdldCAmJiBtYXlfcmVzY2hlZCkgeworCQkvKiBJ ZiB3ZSByYW4gb3V0IG9mIGJ1ZGdldCBvciB0aGUgZG91YmxlLWNoZWNrIGZvdW5kIG5ldworCQkg KiBzbG90cyB0byBwcm9jZXNzLCBzY2hlZHVsZSB0aGUgdGFza3F1ZXVlLiAqLworCQlEQkcoUkQo MSwgIm91dCBvZiBidWRnZXQ6IHJlc2NoZWQgaCAldSB0ICV1XG4iLAorCQkJCQloZWFkLCByaW5n LT50YWlsKSk7CisJCXRhc2txdWV1ZV9lbnF1ZXVlKHBxLT50YXNrcSwgJnBxLT50YXNrKTsKKwl9 Cit1bmxvY2s6CisJUFRORVRfUV9VTkxPQ0socHEpOworCisJcmV0dXJuIGNvdW50OworfQorCitz dGF0aWMgdm9pZAorcHRuZXRfcnhfdGFzayh2b2lkICpjb250ZXh0LCBpbnQgcGVuZGluZykKK3sK KwlzdHJ1Y3QgcHRuZXRfcXVldWUgKnBxID0gY29udGV4dDsKKworCURCRyhSRCgxLCAiJXM6IHBx ICMldVxuIiwgX19mdW5jX18sIHBxLT5rcmluZ19pZCkpOworCXB0bmV0X3J4X2VvZihwcSwgUFRO RVRfUlhfQlVER0VULCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0X3R4X3Rhc2sodm9p ZCAqY29udGV4dCwgaW50IHBlbmRpbmcpCit7CisJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IGNv bnRleHQ7CisKKwlEQkcoUkQoMSwgIiVzOiBwcSAjJXVcbiIsIF9fZnVuY19fLCBwcS0+a3Jpbmdf aWQpKTsKKwlwdG5ldF9kcmFpbl90cmFuc21pdF9xdWV1ZShwcSwgUFRORVRfVFhfQlVER0VULCB0 cnVlKTsKK30KKworI2lmZGVmIERFVklDRV9QT0xMSU5HCisvKiBXZSBkb24ndCBuZWVkIHRvIGhh bmRsZSBkaWZmZXJlbnRseSBQT0xMX0FORF9DSEVDS19TVEFUVVMgYW5kCisgKiBQT0xMX09OTFks IHNpbmNlIHdlIGRvbid0IGhhdmUgYW4gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlci4gKi8KK3N0 YXRpYyBpbnQKK3B0bmV0X3BvbGwoaWZfdCBpZnAsIGVudW0gcG9sbF9jbWQgY21kLCBpbnQgYnVk Z2V0KQoreworCXN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MgPSBpZl9nZXRzb2Z0YyhpZnApOworCXVu c2lnbmVkIGludCBxdWV1ZV9idWRnZXQ7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlib29s IGJvcnJvdyA9IGZhbHNlOworCWludCBpOworCisJS0FTU0VSVChzYy0+bnVtX3JpbmdzID4gMCwg KCJGb3VuZCBubyBxdWV1ZXMgaW4gd2hpbGUgcG9sbGluZyBwdG5ldCIpKTsKKwlxdWV1ZV9idWRn ZXQgPSBNQVgoYnVkZ2V0IC8gc2MtPm51bV9yaW5ncywgMSk7CisJUkQoMSwgIlBlci1xdWV1ZSBi dWRnZXQgaXMgJWQiLCBxdWV1ZV9idWRnZXQpOworCisJd2hpbGUgKGJ1ZGdldCkgeworCQl1bnNp Z25lZCBpbnQgcmNudCA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fcmluZ3M7IGkr KykgeworCQkJc3RydWN0IHB0bmV0X3F1ZXVlICpwcSA9IHNjLT5xdWV1ZXMgKyBpOworCisJCQlp ZiAoYm9ycm93KSB7CisJCQkJcXVldWVfYnVkZ2V0ID0gTUlOKHF1ZXVlX2J1ZGdldCwgYnVkZ2V0 KTsKKwkJCQlpZiAocXVldWVfYnVkZ2V0ID09IDApIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ fQorCisJCQlpZiAoaSA8IHNjLT5udW1fdHhfcmluZ3MpIHsKKwkJCQlyY250ICs9IHB0bmV0X2Ry YWluX3RyYW5zbWl0X3F1ZXVlKHBxLAorCQkJCQkJICAgcXVldWVfYnVkZ2V0LCBmYWxzZSk7CisJ CQl9IGVsc2UgeworCQkJCXJjbnQgKz0gcHRuZXRfcnhfZW9mKHBxLCBxdWV1ZV9idWRnZXQsCisJ CQkJCQkgICAgICBmYWxzZSk7CisJCQl9CisJCX0KKworCQlpZiAoIXJjbnQpIHsKKwkJCS8qIEEg c2NhbiBvZiB0aGUgcXVldWVzIGdhdmUgbm8gcmVzdWx0LCB3ZSBjYW4KKwkJCSAqIHN0b3AgaGVy ZS4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJjbnQgPiBidWRnZXQpIHsKKwkJCS8qIFRo aXMgbWF5IGhhcHBlbiB3aGVuIGluaXRpYWwgYnVkZ2V0IDwgc2MtPm51bV9yaW5ncywKKwkJCSAq IHNpbmNlIG9uZSBwYWNrZXQgYnVkZ2V0IGlzIGdpdmVuIHRvIGVhY2ggcXVldWUKKwkJCSAqIGFu eXdheS4gSnVzdCBwcmV0ZW5kIHdlIGRpZG4ndCBlYXQgInNvIG11Y2giLiAqLworCQkJcmNudCA9 IGJ1ZGdldDsKKwkJfQorCQljb3VudCArPSByY250OworCQlidWRnZXQgLT0gcmNudDsKKwkJYm9y cm93ID0gdHJ1ZTsKKwl9CisKKworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZiAvKiBERVZJQ0Vf UE9MTElORyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0 bWFwLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmgKLS0tIHVzci9zcmMv c3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAw MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3JlX25ldG1hcC5oCTIwMTYt MTEtMjMgMTY6NTc6NTcuODQ1MTU2MDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAog LyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl9yZV9uZXRtYXAu aCAyODUzNDkgMjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQv c3lzL2Rldi9uZXRtYXAvaWZfcmVfbmV0bWFwLmggMjM0MjI1IDIwMTItMDQtMTMgMTU6MzM6MTJa IGx1aWdpICQKICAqCiAgKiBuZXRtYXAgc3VwcG9ydCBmb3I6IHJlCiAgKgpkaWZmIC11IC1yIC1O IHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmggL3Vzci9zcmMvc3lzL2Rl di9uZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaWZf dnRuZXRfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91 c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2lmX3Z0bmV0X25ldG1hcC5oCTIwMTYtMTEtMjMgMTY6NTc6 NTcuODQ1NTQzMDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoKLSAqICRGcmVl QlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9pZl92dG5ldF9uZXRtYXAuaCAyODUzNDkg MjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9u ZXRtYXAvaWZfdnRuZXRfbmV0bWFwLmggMjcwMDk3IDIwMTQtMDgtMTcgMTA6MjU6MjdaIGx1aWdp ICQKICAqLwogCiAjaW5jbHVkZSA8bmV0L25ldG1hcC5oPgpAQCAtMTI3LDcgKzEyNyw3IEBACiAJ ICogRmlyc3QgcGFydDogcHJvY2VzcyBuZXcgcGFja2V0cyB0byBzZW5kLgogCSAqLwogCXJtYigp OwotCQorCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAobm1faSAhPSBoZWFkKSB7CS8q IHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLwogCQlzdHJ1Y3Qgc2dsaXN0ICpzZyA9IHR4 cS0+dnRudHhfc2c7CkBAIC0xODIsNyArMTgyLDcgQEAKIAkJdmlydHF1ZXVlX2VuYWJsZV9pbnRy KHZxKTsgLy8gbGlrZSBwb3N0cG9uZSB3aXRoIDAKIAl9CiAKLQkKKwogICAgICAgICAvKiBGcmVl IHVzZWQgc2xvdHMuIFdlIG9ubHkgY29uc2lkZXIgb3VyIG93biB1c2VkIGJ1ZmZlcnMsIHJlY29n bml6ZWQKIAkgKiBieSB0aGUgdG9rZW4gd2UgcGFzc2VkIHRvIHZpcnRxdWV1ZV9hZGRfb3V0YnVm LgogCSAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFw LmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFwLmgKLS0tIHVzci9zcmMvc3lz L2Rldi9uZXRtYXAvaXhnYmVfbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAg KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL2l4Z2JlX25ldG1hcC5oCTIwMTYtMTEt MjMgMTY6NTc6NTcuODQ2MDU3MDAwICswMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogLyoK LSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9peGdiZV9uZXRtYXAuaCAy ODU1OTIgMjAxNS0wNy0xNSAwMTowMjowMVogcGtlbHNleSAkCisgKiAkRnJlZUJTRDogaGVhZC9z eXMvZGV2L25ldG1hcC9peGdiZV9uZXRtYXAuaCAyNDQ1MTQgMjAxMi0xMi0yMCAyMjoyNjowM1og bHVpZ2kgJAogICoKICAqIG5ldG1hcCBzdXBwb3J0IGZvcjogaXhnYmUgKGJvdGggaXggYW5kIGl4 dikKICAqCkBAIC01Myw3ICs1Myw3IEBACiAvKgogICogZGV2aWNlLXNwZWNpZmljIHN5c2N0bCB2 YXJpYWJsZXM6CiAgKgotICogaXhfY3Jjc3RyaXA6IDA6IGtlZXAgQ1JDIGluIHJ4IGZyYW1lcyAo ZGVmYXVsdCksIDE6IHN0cmlwIGl0LgorICogaXhfY3Jjc3RyaXA6IDA6IE5JQyBrZWVwcyBDUkMg aW4gcnggZnJhbWVzIChkZWZhdWx0KSwgMTogTklDIHN0cmlwcyBpdC4KICAqCUR1cmluZyByZWd1 bGFyIG9wZXJhdGlvbnMgdGhlIENSQyBpcyBzdHJpcHBlZCwgYnV0IG9uIHNvbWUKICAqCWhhcmR3 YXJlIHJlY2VwdGlvbiBvZiBmcmFtZXMgbm90IG11bHRpcGxlIG9mIDY0IGlzIHNsb3dlciwKICAq CXNvIHVzaW5nIGNyY3N0cmlwPTAgaGVscHMgaW4gYmVuY2htYXJrcy4KQEAgLTY1LDcgKzY1LDcg QEAKIHN0YXRpYyBpbnQgaXhfcnhfbWlzcywgaXhfcnhfbWlzc19idWZzOwogaW50IGl4X2NyY3N0 cmlwOwogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGl4X2NyY3N0cmlwLAotICAg IENUTEZMQUdfUlcsICZpeF9jcmNzdHJpcCwgMCwgInN0cmlwIENSQyBvbiByeCBmcmFtZXMiKTsK KyAgICBDVExGTEFHX1JXLCAmaXhfY3Jjc3RyaXAsIDAsICJOSUMgc3RyaXBzIENSQyBvbiByeCBm cmFtZXMiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeF9yeF9taXNzLAog ICAgIENUTEZMQUdfUlcsICZpeF9yeF9taXNzLCAwLCAicG90ZW50aWFsbHkgbWlzc2VkIHJ4IGlu dHIiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBpeF9yeF9taXNzX2J1ZnMs CkBAIC0xMDksNiArMTA5LDIwIEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFJYQ1RM LCByeGMpOwogfQogCitzdGF0aWMgdm9pZAoraXhnYmVfbmV0bWFwX2ludHIoc3RydWN0IG5ldG1h cF9hZGFwdGVyICpuYSwgaW50IG9ub2ZmKQoreworCXN0cnVjdCBpZm5ldCAqaWZwID0gbmEtPmlm cDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGlmcC0+aWZfc29mdGM7CisKKwlJWEdCRV9D T1JFX0xPQ0soYWRhcHRlcik7CisJaWYgKG9ub2ZmKSB7CisJCWl4Z2JlX2VuYWJsZV9pbnRyKGFk YXB0ZXIpOyAvLyBYWFggbWF5YmUgaXhnYmVfc3RvcCA/CisJfSBlbHNlIHsKKwkJaXhnYmVfZGlz YWJsZV9pbnRyKGFkYXB0ZXIpOyAvLyBYWFggbWF5YmUgaXhnYmVfc3RvcCA/CisJfQorCUlYR0JF X0NPUkVfVU5MT0NLKGFkYXB0ZXIpOworfQogCiAvKgogICogUmVnaXN0ZXIvdW5yZWdpc3Rlci4g V2UgYXJlIGFscmVhZHkgdW5kZXIgbmV0bWFwIGxvY2suCkBAIC0zMTEsNyArMzI1LDcgQEAKIAkJ ICogZ29vZCB3YXkuCiAJCSAqLwogCQluaWNfaSA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5o dywgSVhHQkVfSVNfVkYoYWRhcHRlcikgPwotCQkJCSAgICAgICBJWEdCRV9WRlRESChrcmluZy0+ cmluZ19pZCkgOiBJWEdCRV9UREgoa3JpbmctPnJpbmdfaWQpKTsKKwkJCQlJWEdCRV9WRlRESChr cmluZy0+cmluZ19pZCkgOiBJWEdCRV9UREgoa3JpbmctPnJpbmdfaWQpKTsKIAkJaWYgKG5pY19p ID49IGtyaW5nLT5ua3JfbnVtX3Nsb3RzKSB7IC8qIFhYWCBjYW4gaXQgaGFwcGVuID8gKi8KIAkJ CUQoIlRESCB3cmFwICVkIiwgbmljX2kpOwogCQkJbmljX2kgLT0ga3JpbmctPm5rcl9udW1fc2xv dHM7CkBAIC00ODYsNiArNTAwLDcgQEAKIAluYS5ubV9yeHN5bmMgPSBpeGdiZV9uZXRtYXBfcnhz eW5jOwogCW5hLm5tX3JlZ2lzdGVyID0gaXhnYmVfbmV0bWFwX3JlZzsKIAluYS5udW1fdHhfcmlu Z3MgPSBuYS5udW1fcnhfcmluZ3MgPSBhZGFwdGVyLT5udW1fcXVldWVzOworCW5hLm5tX2ludHIg PSBpeGdiZV9uZXRtYXBfaW50cjsKIAluZXRtYXBfYXR0YWNoKCZuYSk7CiB9CiAKZGlmZiAtdSAt ciAtTiB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcC5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0 bWFwL25ldG1hcC5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcC5jCTIwMTYtMDkt MjkgMDA6MjQ6NDcuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9u ZXRtYXAuYwkyMDE2LTExLTIzIDE2OjU3OjU3Ljg0Nzk3NTAwMCArMDAwMApAQCAtMSw1ICsxLDkg QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBNYXR0ZW8gTGFuZGksIEx1aWdpIFJp enpvLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgTWF0 dGVvIExhbmRpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBMdWlnaSBSaXp6bworICogQ29w eXJpZ2h0IChDKSAyMDExLTIwMTYgR2l1c2VwcGUgTGV0dGllcmkKKyAqIENvcHlyaWdodCAoQykg MjAxMS0yMDE2IFZpbmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyOSw3IEBACiAKIAogLyoKLSAq ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXAuYyAzMDAwNTAgMjAx Ni0wNS0xNyAxMjo1MjozMVogZWFkbGVyICQKKyAqICRGcmVlQlNEJAogICoKICAqIFRoaXMgbW9k dWxlIHN1cHBvcnRzIG1lbW9yeSBtYXBwZWQgYWNjZXNzIHRvIG5ldHdvcmsgZGV2aWNlcywKICAq IHNlZSBuZXRtYXAoNCkuCkBAIC0xMzMsMTMgKzEzNywxMiBAQAogICogPiAgICBzZWxlY3QoKWFi bGUgZmlsZSBkZXNjcmlwdG9yIG9uIHdoaWNoIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCiAgKgogICog IAlJbnRlcm5hbGx5LCB3ZSBhbGxvY2F0ZSBhIG5ldG1hcF9wcml2X2Qgc3RydWN0dXJlLCB0aGF0 IHdpbGwgYmUKLSAqICAJaW5pdGlhbGl6ZWQgb24gaW9jdGwoTklPQ1JFR0lGKS4KKyAqICAJaW5p dGlhbGl6ZWQgb24gaW9jdGwoTklPQ1JFR0lGKS4gVGhlcmUgaXMgb25lIG5ldG1hcF9wcml2X2QK KyAqICAJc3RydWN0dXJlIGZvciBlYWNoIG9wZW4oKS4KICAqCiAgKiAgICAgIG9zLXNwZWNpZmlj OgotICogIAkgICAgRnJlZUJTRDogbmV0bWFwX29wZW4gKG5ldG1hcF9mcmVlYnNkLmMpLiBUaGUg cHJpdiBpcwotICogIAkJICAgICBwZXItdGhyZWFkLgotICogIAkgICAgbGludXg6ICAgbGludXhf bmV0bWFwX29wZW4gKG5ldG1hcF9saW51eC5jKS4gVGhlIHByaXYgaXMKLSAqICAJCSAgICAgcGVy LW9wZW4uCisgKiAgCSAgICBGcmVlQlNEOiBzZWUgbmV0bWFwX29wZW4oKSAobmV0bWFwX2ZyZWVi c2QuYykKKyAqICAJICAgIGxpbnV4OiAgIHNlZSBsaW51eF9uZXRtYXBfb3BlbigpIChuZXRtYXBf bGludXguYykKICAqCiAgKiA+IDIuIG9uIGVhY2ggZGVzY3JpcHRvciwgdGhlIHByb2Nlc3MgaXNz dWVzIGFuIGlvY3RsKCkgdG8gaWRlbnRpZnkKICAqID4gICAgdGhlIGludGVyZmFjZSB0aGF0IHNo b3VsZCByZXBvcnQgZXZlbnRzIHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IuCkBAIC0yOTksMTggKzMw MiwxNyBAQAogICogICAgICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAg ICAgICAgICAgbmEtPm5tX25vdGlmeSAgPT0gbmV0bWFwX25vdGlmeSgpCiAgKiAgICAgICAgICAg MikgaW9jdGwoTklPQ1JYU1lOQykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAq ICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFwX3J4c3luY19mcm9tX2hv c3RfY29tcGF0CisgKiAgICAgICAgICAgICAgICBrcmluZy0+bm1fc3luYygpID09IG5ldG1hcF9y eHN5bmNfZnJvbV9ob3N0CiAgKiAgICAgICAgICAgICAgICAgIG5ldG1hcF9yeHN5bmNfZnJvbV9o b3N0KG5hLCBOVUxMLCBOVUxMKQogICogICAgLSB0eCB0byBob3N0IHN0YWNrCiAgKiAgICAgICAg ICAgaW9jdGwoTklPQ1RYU1lOQykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAq ICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFwX3R4c3luY190b19ob3N0X2Nv bXBhdAorICogICAgICAgICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3Rv X2hvc3QKICAqICAgICAgICAgICAgICAgbmV0bWFwX3R4c3luY190b19ob3N0KG5hKQotICogICAg ICAgICAgICAgICAgIE5NX1NFTkRfVVAoKQotICogICAgICAgICAgICAgICAgICAgRnJlZUJTRDog bmEtPmlmX2lucHV0KCkgPT0gPz8gWFhYCisgKiAgICAgICAgICAgICAgICAgbm1fb3Nfc2VuZF91 cCgpCisgKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfaW5wdXQoKSA9PSBldGhl cl9pbnB1dCgpCiAgKiAgICAgICAgICAgICAgICAgICBsaW51eDogbmV0aWZfcngoKSB3aXRoIE5N X01BR0lDX1BSSU9SSVRZX1JYCiAgKgogICoKLSAqCiAgKiAgICAgICAgICAgICAgIC09IFNZU1RF TSBERVZJQ0UgV0lUSCBHRU5FUklDIFNVUFBPUlQgPS0KICAqCiAgKiAgICBuYSA9PSBOQShpZnAp ID09IGdlbmVyaWNfbmV0bWFwX2FkYXB0ZXIgY3JlYXRlZCBpbiBnZW5lcmljX25ldG1hcF9hdHRh Y2goKQpAQCAtMzE5LDEwICszMjEsMTEgQEAKICAqICAgICAgIGNvbmN1cnJlbnRseToKICAqICAg ICAgICAgICAxKSBpb2N0bChOSU9DVFhTWU5DKS9uZXRtYXBfcG9sbCgpIGluIHByb2Nlc3MgY29u dGV4dAogICogICAgICAgICAgICAgICBrcmluZy0+bm1fc3luYygpID09IGdlbmVyaWNfbmV0bWFw X3R4c3luYygpCi0gKiAgICAgICAgICAgICAgICAgICBsaW51eDogICBkZXZfcXVldWVfeG1pdCgp IHdpdGggTk1fTUFHSUNfUFJJT1JJVFlfVFgKLSAqICAgICAgICAgICAgICAgICAgICAgICBnZW5l cmljX25kb19zdGFydF94bWl0KCkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZy4g ZGV2LiBzdGFydF94bWl0Ci0gKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfdHJh bnNtaXQoKSA9PSBvcmlnLiBkZXYgaWZfdHJhbnNtaXQKKyAqICAgICAgICAgICAgICAgICAgIG5t X29zX2dlbmVyaWNfeG1pdF9mcmFtZSgpCisgKiAgICAgICAgICAgICAgICAgICAgICAgbGludXg6 ICAgZGV2X3F1ZXVlX3htaXQoKSB3aXRoIE5NX01BR0lDX1BSSU9SSVRZX1RYCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmcC0+bmRvX3N0YXJ0X3htaXQgPT0gZ2VuZXJpY19uZG9fc3Rh cnRfeG1pdCgpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbmEtPnNhdmVfc3Rh cnRfeG1pdCA9PSBvcmlnLiBkZXYuIHN0YXJ0X3htaXQKKyAqICAgICAgICAgICAgICAgICAgICAg ICBGcmVlQlNEOiBuYS0+aWZfdHJhbnNtaXQoKSA9PSBvcmlnLiBkZXYgaWZfdHJhbnNtaXQKICAq ICAgICAgICAgICAyKSBnZW5lcmljX21idWZfZGVzdHJ1Y3RvcigpCiAgKiAgICAgICAgICAgICAg ICAgICBuYS0+bm1fbm90aWZ5KCkgPT0gbmV0bWFwX25vdGlmeSgpCiAgKiAgICAtIHJ4IGZyb20g bmV0bWFwIHVzZXJzcGFjZToKQEAgLTMzMywyNCArMzM2LDE1IEBACiAgKiAgICAgICAgICAgICAg IGdlbmVyaWNfcnhfaGFuZGxlcigpCiAgKiAgICAgICAgICAgICAgICAgICBtYnFfc2FmZV9lbnF1 ZXVlKCkKICAqICAgICAgICAgICAgICAgICAgIG5hLT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfbm90 aWZ5KCkKLSAqICAgIC0gcnggZnJvbSBob3N0IHN0YWNrOgotICogICAgICAgIGNvbmN1cnJlbnRs eToKKyAqICAgIC0gcnggZnJvbSBob3N0IHN0YWNrCisgKiAgICAgICAgRnJlZUJTRDogc2FtZSBh cyBuYXRpdmUKKyAqICAgICAgICBMaW51eDogc2FtZSBhcyBuYXRpdmUgZXhjZXB0OgogICogICAg ICAgICAgIDEpIGhvc3Qgc3RhY2sKLSAqICAgICAgICAgICAgICAgbGludXg6IGdlbmVyaWNfbmRv X3N0YXJ0X3htaXQoKQotICogICAgICAgICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKLSAq ICAgICAgICAgICAgICAgRnJlZUJTRDogaWZwLT5pZl9pbnB1dCgpID09IG5ldG1hcF90cmFuc21p dAotICogICAgICAgICAgICAgICBib3RoOgotICogICAgICAgICAgICAgICAgICAgICAgIG5hLT5u bV9ub3RpZnkoKSA9PSBuZXRtYXBfbm90aWZ5KCkKLSAqICAgICAgICAgICAyKSBpb2N0bChOSU9D UlhTWU5DKS9uZXRtYXBfcG9sbCgpIGluIHByb2Nlc3MgY29udGV4dAotICogICAgICAgICAgICAg ICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdF9jb21wYXQKLSAq ICAgICAgICAgICAgICAgICAgbmV0bWFwX3J4c3luY19mcm9tX2hvc3QobmEsIE5VTEwsIE5VTEwp Ci0gKiAgICAtIHR4IHRvIGhvc3Qgc3RhY2s6Ci0gKiAgICAgICAgICAgaW9jdGwoTklPQ1RYU1lO QykvbmV0bWFwX3BvbGwoKSBpbiBwcm9jZXNzIGNvbnRleHQKLSAqICAgICAgICAgICAgIGtyaW5n LT5ubV9zeW5jKCkgPT0gbmV0bWFwX3R4c3luY190b19ob3N0X2NvbXBhdAotICogICAgICAgICAg ICAgICBuZXRtYXBfdHhzeW5jX3RvX2hvc3QobmEpCi0gKiAgICAgICAgICAgICAgICAgTk1fU0VO RF9VUCgpCi0gKiAgICAgICAgICAgICAgICAgICBGcmVlQlNEOiBuYS0+aWZfaW5wdXQoKSA9PSA/ Pz8gWFhYCi0gKiAgICAgICAgICAgICAgICAgICBsaW51eDogbmV0aWZfcngoKSB3aXRoIE5NX01B R0lDX1BSSU9SSVRZX1JYCisgKiAgICAgICAgICAgICAgIGRldl9xdWV1ZV94bWl0KCkgd2l0aG91 dCBOTV9NQUdJQ19QUklPUklUWV9UWAorICogICAgICAgICAgICAgICAgICAgaWZwLT5uZG9fc3Rh cnRfeG1pdCA9PSBnZW5lcmljX25kb19zdGFydF94bWl0KCkKKyAqICAgICAgICAgICAgICAgICAg ICAgICBuZXRtYXBfdHJhbnNtaXQoKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYS0+ bm1fbm90aWZ5KCkgPT0gbmV0bWFwX25vdGlmeSgpCisgKiAgICAtIHR4IHRvIGhvc3Qgc3RhY2sg KHNhbWUgYXMgbmF0aXZlKToKICAqCiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAt PSBWQUxFID0tCkBAIC0zNzEsNyArMzY1LDcgQEAKICAqICAgICAgICAgZnJvbSBob3N0IHN0YWNr OgogICogICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAgICAgICAgIG5h LT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkocmluZ19uciA9PSBob3N0 IHJpbmcpCi0gKiAgICAgICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkgPT0gbmV0bWFw X3J4c3luY19mcm9tX2hvc3RfY29tcGF0KCkKKyAqICAgICAgICAgICAgICAgICAgICAga3Jpbmct Pm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdCgpCiAgKiAgICAgICAgICAgICAg ICAgICAgIG5ldG1hcF92cF90eHN5bmMoKQogICoKICAqICAgICAgLSBzeXN0ZW0gZGV2aWNlIHdp dGggZ2VuZXJpYyBzdXBwb3J0OgpAQCAtMzg0LDcgKzM3OCw3IEBACiAgKiAgICAgICAgIGZyb20g aG9zdCBzdGFjazoKICAqICAgICAgICAgICAgbmV0bWFwX3RyYW5zbWl0KCkKICAqICAgICAgICAg ICAgICAgIG5hLT5ubV9ub3RpZnkoKSA9PSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkocmluZ19u ciA9PSBob3N0IHJpbmcpCi0gKiAgICAgICAgICAgICAgICAgICAgIGtyaW5nLT5ubV9zeW5jKCkg PT0gbmV0bWFwX3J4c3luY19mcm9tX2hvc3RfY29tcGF0KCkKKyAqICAgICAgICAgICAgICAgICAg ICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfcnhzeW5jX2Zyb21faG9zdCgpCiAgKiAgICAg ICAgICAgICAgICAgICAgIG5ldG1hcF92cF90eHN5bmMoKQogICoKICAqICAgKGFsbCBjYXNlcykg LS0+IG5tX2JkZ19mbHVzaCgpCkBAIC00MDcsNyArNDAxLDcgQEAKICAqICAgICAgICAgICAgICAg ICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqICAgICAgICAgIHRvIGhvc3Qgc3RhY2s6CiAgKiAgICAg ICAgICAgICAgICAgbmV0bWFwX3ZwX3J4c3luYygpCi0gKiAgICAgICAgICAgICAgICAga3Jpbmct Pm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3RfY29tcGF0CisgKiAgICAgICAgICAg ICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3QKICAqICAgICAg ICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jX2xvY2tlZCgpCiAgKgogICogICAgICAtIHN5c3Rl bSBkZXZpY2Ugd2l0aCBnZW5lcmljIGFkYXB0ZXI6CkBAIC00MTgsNyArNDEyLDcgQEAKICAqICAg ICAgICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqICAgICAgICAgIHRvIGhvc3Qgc3Rh Y2s6CiAgKiAgICAgICAgICAgICAgICAgbmV0bWFwX3ZwX3J4c3luYygpCi0gKiAgICAgICAgICAg ICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hvc3RfY29tcGF0Cisg KiAgICAgICAgICAgICAgICAga3JpbmctPm5tX3N5bmMoKSA9PSBuZXRtYXBfdHhzeW5jX3RvX2hv c3QKICAqICAgICAgICAgICAgICAgICBuZXRtYXBfdnBfcnhzeW5jKCkKICAqCiAgKi8KQEAgLTQ1 NSwyOSArNDQ5LDE5IEBACiAjaW5jbHVkZSA8c3lzL3JlZmNvdW50Lmg+CiAKIAotLyogcmVkdWNl IGNvbmRpdGlvbmFsIGNvZGUgKi8KLS8vIGxpbnV4IEFQSSwgdXNlIGZvciB0aGUga25saXN0IGlu IEZyZWVCU0QKLS8qIHVzZSBhIHByaXZhdGUgbXV0ZXggZm9yIHRoZSBrbmxpc3QgKi8KLSNkZWZp bmUgaW5pdF93YWl0cXVldWVfaGVhZCh4KSBkbyB7CQkJXAotCXN0cnVjdCBtdHggKm0gPSAmKHgp LT5tOwkJCVwKLQltdHhfaW5pdChtLCAibm1fa25fbG9jayIsIE5VTEwsIE1UWF9ERUYpOwlcCi0J a25saXN0X2luaXRfbXR4KCYoeCktPnNpLnNpX25vdGUsIG0pOwkJXAotICAgIH0gd2hpbGUgKDAp Ci0KLSNkZWZpbmUgT1Nfc2VscmVjb3JkKGEsIGIpCXNlbHJlY29yZChhLCAmKChiKS0+c2kpKQot I2RlZmluZSBPU19zZWx3YWtldXAoYSwgYikJZnJlZWJzZF9zZWx3YWtldXAoYSwgYikKLQogI2Vs aWYgZGVmaW5lZChsaW51eCkKIAogI2luY2x1ZGUgImJzZF9nbHVlLmgiCiAKLQotCiAjZWxpZiBk ZWZpbmVkKF9fQVBQTEVfXykKIAogI3dhcm5pbmcgT1NYIHN1cHBvcnQgaXMgb25seSBwYXJ0aWFs CiAjaW5jbHVkZSAib3N4X2dsdWUuaCIKIAorI2VsaWYgZGVmaW5lZCAoX1dJTjMyKQorCisjaW5j bHVkZSAid2luX2dsdWUuaCIKKwogI2Vsc2UKIAogI2Vycm9yCVVuc3VwcG9ydGVkIHBsYXRmb3Jt CkBAIC00OTIsNDcgKzQ3Niw2OSBAQAogI2luY2x1ZGUgPGRldi9uZXRtYXAvbmV0bWFwX21lbTIu aD4KIAogCi1NQUxMT0NfREVGSU5FKE1fTkVUTUFQLCAibmV0bWFwIiwgIk5ldHdvcmsgbWVtb3J5 IG1hcCIpOwotCiAvKiB1c2VyLWNvbnRyb2xsZWQgdmFyaWFibGVzICovCiBpbnQgbmV0bWFwX3Zl cmJvc2U7CiAKIHN0YXRpYyBpbnQgbmV0bWFwX25vX3RpbWVzdGFtcDsgLyogZG9uJ3QgdGltZXN0 YW1wIG9uIHJ4c3luYyAqLwotCi1TWVNDVExfTk9ERShfZGV2LCBPSURfQVVUTywgbmV0bWFwLCBD VExGTEFHX1JXLCAwLCAiTmV0bWFwIGFyZ3MiKTsKLVNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9J RF9BVVRPLCB2ZXJib3NlLAotICAgIENUTEZMQUdfUlcsICZuZXRtYXBfdmVyYm9zZSwgMCwgIlZl cmJvc2UgbW9kZSIpOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5vX3RpbWVz dGFtcCwKLSAgICBDVExGTEFHX1JXLCAmbmV0bWFwX25vX3RpbWVzdGFtcCwgMCwgIm5vX3RpbWVz dGFtcCIpOwogaW50IG5ldG1hcF9taXRpZ2F0ZSA9IDE7Ci1TWVNDVExfSU5UKF9kZXZfbmV0bWFw LCBPSURfQVVUTywgbWl0aWdhdGUsIENUTEZMQUdfUlcsICZuZXRtYXBfbWl0aWdhdGUsIDAsICIi KTsKIGludCBuZXRtYXBfbm9fcGVuZGludHIgPSAxOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwg T0lEX0FVVE8sIG5vX3BlbmRpbnRyLAotICAgIENUTEZMQUdfUlcsICZuZXRtYXBfbm9fcGVuZGlu dHIsIDAsICJBbHdheXMgbG9vayBmb3IgbmV3IHJlY2VpdmVkIHBhY2tldHMuIik7CiBpbnQgbmV0 bWFwX3R4c3luY19yZXRyeSA9IDI7Ci1TWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVUTywg dHhzeW5jX3JldHJ5LCBDVExGTEFHX1JXLAotICAgICZuZXRtYXBfdHhzeW5jX3JldHJ5LCAwICwg Ik51bWJlciBvZiB0eHN5bmMgbG9vcHMgaW4gYnJpZGdlJ3MgZmx1c2guIik7Ci0KLWludCBuZXRt YXBfYWRhcHRpdmVfaW8gPSAwOwotU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGFk YXB0aXZlX2lvLCBDVExGTEFHX1JXLAotICAgICZuZXRtYXBfYWRhcHRpdmVfaW8sIDAgLCAiQWRh cHRpdmUgSS9PIG9uIHBhcmF2aXJ0Iik7Ci0KIGludCBuZXRtYXBfZmxhZ3MgPSAwOwkvKiBkZWJ1 ZyBmbGFncyAqLwotaW50IG5ldG1hcF9md2QgPSAwOwkvKiBmb3JjZSB0cmFuc3BhcmVudCBtb2Rl ICovCitzdGF0aWMgaW50IG5ldG1hcF9md2QgPSAwOwkvKiBmb3JjZSB0cmFuc3BhcmVudCBtb2Rl ICovCiAKIC8qCiAgKiBuZXRtYXBfYWRtb2RlIHNlbGVjdHMgdGhlIG5ldG1hcCBtb2RlIHRvIHVz ZS4KICAqIEludmFsaWQgdmFsdWVzIGFyZSByZXNldCB0byBORVRNQVBfQURNT0RFX0JFU1QKICAq LwotZW51bSB7IE5FVE1BUF9BRE1PREVfQkVTVCA9IDAsCS8qIHVzZSBuYXRpdmUsIGZhbGxiYWNr IHRvIGdlbmVyaWMgKi8KK2VudW0gewlORVRNQVBfQURNT0RFX0JFU1QgPSAwLAkvKiB1c2UgbmF0 aXZlLCBmYWxsYmFjayB0byBnZW5lcmljICovCiAJTkVUTUFQX0FETU9ERV9OQVRJVkUsCS8qIGVp dGhlciBuYXRpdmUgb3Igbm9uZSAqLwogCU5FVE1BUF9BRE1PREVfR0VORVJJQywJLyogZm9yY2Ug Z2VuZXJpYyAqLwogCU5FVE1BUF9BRE1PREVfTEFTVCB9Owogc3RhdGljIGludCBuZXRtYXBfYWRt b2RlID0gTkVUTUFQX0FETU9ERV9CRVNUOwogCi1pbnQgbmV0bWFwX2dlbmVyaWNfbWl0ID0gMTAw KjEwMDA7ICAgLyogR2VuZXJpYyBtaXRpZ2F0aW9uIGludGVydmFsIGluIG5hbm9zZWNvbmRzLiAq LwotaW50IG5ldG1hcF9nZW5lcmljX3JpbmdzaXplID0gMTAyNDsgICAvKiBHZW5lcmljIHJpbmdz aXplLiAqLwotaW50IG5ldG1hcF9nZW5lcmljX3JpbmdzID0gMTsgICAvKiBudW1iZXIgb2YgcXVl dWVzIGluIGdlbmVyaWMuICovCisvKiBuZXRtYXBfZ2VuZXJpY19taXQgY29udHJvbHMgbWl0aWdh dGlvbiBvZiBSWCBub3RpZmljYXRpb25zIGZvcgorICogdGhlIGdlbmVyaWMgbmV0bWFwIGFkYXB0 ZXIuIFRoZSB2YWx1ZSBpcyBhIHRpbWUgaW50ZXJ2YWwgaW4KKyAqIG5hbm9zZWNvbmRzLiAqLwor aW50IG5ldG1hcF9nZW5lcmljX21pdCA9IDEwMCoxMDAwOworCisvKiBXZSB1c2UgYnkgZGVmYXVs dCBuZXRtYXAtYXdhcmUgcWRpc2NzIHdpdGggZ2VuZXJpYyBuZXRtYXAgYWRhcHRlcnMsCisgKiBl dmVuIGlmIHRoZXJlIGNhbiBiZSBhIGxpdHRsZSBwZXJmb3JtYW5jZSBoaXQgd2l0aCBoYXJkd2Fy ZSBOSUNzLgorICogSG93ZXZlciwgdXNpbmcgdGhlIHFkaXNjIGlzIHRoZSBzYWZlciBhcHByb2Fj aCwgZm9yIHR3byByZWFzb25zOgorICogMSkgaXQgcHJldmVudHMgbm9uLWZpZm8gcWRpc2NzIHRv IGJyZWFrIHRoZSBUWCBub3RpZmljYXRpb24KKyAqICAgIHNjaGVtZSwgd2hpY2ggaXMgYmFzZWQg b24gbWJ1ZiBkZXN0cnVjdG9ycyB3aGVuIHR4cWRpc2MgaXMKKyAqICAgIG5vdCB1c2VkLgorICog MikgaXQgbWFrZXMgaXQgcG9zc2libGUgdG8gdHJhbnNtaXQgb3ZlciBzb2Z0d2FyZSBkZXZpY2Vz IHRoYXQKKyAqICAgIGNoYW5nZSBza2ItPmRldiwgbGlrZSBicmlkZ2UsIHZldGgsIC4uLgorICoK KyAqIEFueXdheSB1c2VycyBsb29raW5nIGZvciB0aGUgYmVzdCBwZXJmb3JtYW5jZSBzaG91bGQK KyAqIHVzZSBuYXRpdmUgYWRhcHRlcnMuCisgKi8KK2ludCBuZXRtYXBfZ2VuZXJpY190eHFkaXNj ID0gMTsKKworLyogRGVmYXVsdCBudW1iZXIgb2Ygc2xvdHMgYW5kIHF1ZXVlcyBmb3IgZ2VuZXJp YyBhZGFwdGVycy4gKi8KK2ludCBuZXRtYXBfZ2VuZXJpY19yaW5nc2l6ZSA9IDEwMjQ7CitpbnQg bmV0bWFwX2dlbmVyaWNfcmluZ3MgPSAxOworCisvKiBOb24temVybyBpZiBwdG5ldCBkZXZpY2Vz IGFyZSBhbGxvd2VkIHRvIHVzZSB2aXJ0aW8tbmV0IGhlYWRlcnMuICovCitpbnQgcHRuZXRfdm5l dF9oZHIgPSAxOworCisvKgorICogU1lTQ1RMIGNhbGxzIGFyZSBncm91cGVkIGJldHdlZW4gU1lT QkVHSU4gYW5kIFNZU0VORCB0byBiZSBlbXVsYXRlZAorICogaW4gc29tZSBvdGhlciBvcGVyYXRp bmcgc3lzdGVtcworICovCitTWVNCRUdJTihtYWluX2luaXQpOworCitTWVNDVExfREVDTChfZGV2 X25ldG1hcCk7CitTWVNDVExfTk9ERShfZGV2LCBPSURfQVVUTywgbmV0bWFwLCBDVExGTEFHX1JX LCAwLCAiTmV0bWFwIGFyZ3MiKTsKK1NZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCB2 ZXJib3NlLAorICAgIENUTEZMQUdfUlcsICZuZXRtYXBfdmVyYm9zZSwgMCwgIlZlcmJvc2UgbW9k ZSIpOworU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5vX3RpbWVzdGFtcCwKKyAg ICBDVExGTEFHX1JXLCAmbmV0bWFwX25vX3RpbWVzdGFtcCwgMCwgIm5vX3RpbWVzdGFtcCIpOwor U1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG1pdGlnYXRlLCBDVExGTEFHX1JXLCAm bmV0bWFwX21pdGlnYXRlLCAwLCAiIik7CitTWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVU Tywgbm9fcGVuZGludHIsCisgICAgQ1RMRkxBR19SVywgJm5ldG1hcF9ub19wZW5kaW50ciwgMCwg IkFsd2F5cyBsb29rIGZvciBuZXcgcmVjZWl2ZWQgcGFja2V0cy4iKTsKK1NZU0NUTF9JTlQoX2Rl dl9uZXRtYXAsIE9JRF9BVVRPLCB0eHN5bmNfcmV0cnksIENUTEZMQUdfUlcsCisgICAgJm5ldG1h cF90eHN5bmNfcmV0cnksIDAgLCAiTnVtYmVyIG9mIHR4c3luYyBsb29wcyBpbiBicmlkZ2UncyBm bHVzaC4iKTsKIAogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGZsYWdzLCBDVExG TEFHX1JXLCAmbmV0bWFwX2ZsYWdzLCAwICwgIiIpOwogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwg T0lEX0FVVE8sIGZ3ZCwgQ1RMRkxBR19SVywgJm5ldG1hcF9md2QsIDAgLCAiIik7CkBAIC01NDAs MTkgKzU0NiwyNCBAQAogU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGdlbmVyaWNf bWl0LCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfbWl0LCAwICwgIiIpOwogU1lTQ1RMX0lO VChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIGdlbmVyaWNfcmluZ3NpemUsIENUTEZMQUdfUlcsICZu ZXRtYXBfZ2VuZXJpY19yaW5nc2l6ZSwgMCAsICIiKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAs IE9JRF9BVVRPLCBnZW5lcmljX3JpbmdzLCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfcmlu Z3MsIDAgLCAiIik7CitTWVNDVExfSU5UKF9kZXZfbmV0bWFwLCBPSURfQVVUTywgZ2VuZXJpY190 eHFkaXNjLCBDVExGTEFHX1JXLCAmbmV0bWFwX2dlbmVyaWNfdHhxZGlzYywgMCAsICIiKTsKK1NZ U0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBwdG5ldF92bmV0X2hkciwgQ1RMRkxBR19S VywgJnB0bmV0X3ZuZXRfaGRyLCAwICwgIiIpOworCitTWVNFTkQ7CiAKIE5NR19MT0NLX1QJbmV0 bWFwX2dsb2JhbF9sb2NrOwotaW50IG5ldG1hcF91c2VfY291bnQgPSAwOyAvKiBudW1iZXIgb2Yg YWN0aXZlIG5ldG1hcCBpbnN0YW5jZXMgKi8KIAogLyoKICAqIG1hcmsgdGhlIHJpbmcgYXMgc3Rv cHBlZCwgYW5kIHJ1biB0aHJvdWdoIHRoZSBsb2NrcwogICogdG8gbWFrZSBzdXJlIG90aGVyIHVz ZXJzIGdldCB0byBzZWUgaXQuCisgKiBzdG9wcGVkIG11c3QgYmUgZWl0aGVyIE5SX0tSX1NUT1BQ RUQgKGZvciB1bmJvdW5kZWQgc3RvcCkKKyAqIG9mIE5SX0tSX0xPQ0tFRCAoYnJpZWYgc3RvcCBm b3IgbXV0dWFsIGV4Y2x1c2lvbiBwdXJwb3NlcykKICAqLwogc3RhdGljIHZvaWQKLW5ldG1hcF9k aXNhYmxlX3Jpbmcoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCituZXRtYXBfZGlzYWJsZV9yaW5n KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyLCBpbnQgc3RvcHBlZCkKIHsKLQlrci0+bmtyX3N0b3Bw ZWQgPSAxOwotCW5tX2tyX2dldChrcik7CisJbm1fa3Jfc3RvcChrciwgc3RvcHBlZCk7CisJLy8g WFhYIGNoZWNrIGlmIG5tX2tyX3N0b3AgaXMgc3VmZmljaWVudAogCW10eF9sb2NrKCZrci0+cV9s b2NrKTsKIAltdHhfdW5sb2NrKCZrci0+cV9sb2NrKTsKIAlubV9rcl9wdXQoa3IpOwpAQCAtNTYz LDcgKzU3NCw3IEBACiBuZXRtYXBfc2V0X3Jpbmcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwg dV9pbnQgcmluZ19pZCwgZW51bSB0eHJ4IHQsIGludCBzdG9wcGVkKQogewogCWlmIChzdG9wcGVk KQotCQluZXRtYXBfZGlzYWJsZV9yaW5nKE5NUihuYSwgdCkgKyByaW5nX2lkKTsKKwkJbmV0bWFw X2Rpc2FibGVfcmluZyhOTVIobmEsIHQpICsgcmluZ19pZCwgc3RvcHBlZCk7CiAJZWxzZQogCQlO TVIobmEsIHQpW3JpbmdfaWRdLm5rcl9zdG9wcGVkID0gMDsKIH0KQEAgLTU5MCwxMyArNjAxLDE0 IEBACiAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB1c2VkIGluIGRyaXZlcnMuICBXYWl0cyBmb3Ig Y3VycmVudCB0eHN5bmMoKXMvcnhzeW5jKClzCiAgKiB0byBmaW5pc2ggYW5kIHByZXZlbnRzIGFu eSBuZXcgb25lIGZyb20gc3RhcnRpbmcuICBDYWxsIHRoaXMgYmVmb3JlIHR1cm5pbmcKICAqIG5l dG1hcCBtb2RlIG9mZiwgb3IgYmVmb3JlIHJlbW92aW5nIHRoZSBoYXJkd2FyZSByaW5ncyAoZS5n Liwgb24gbW9kdWxlCi0gKiBvbmxvYWQpLiAgQXMgYSBydWxlIG9mIHRodW1iIGZvciBsaW51eCBk cml2ZXJzLCB0aGlzIHNob3VsZCBiZSBwbGFjZWQgbmVhcgotICogZWFjaCBuYXBpX2Rpc2FibGUo KS4KKyAqIG9ubG9hZCkuCiAgKi8KIHZvaWQKIG5ldG1hcF9kaXNhYmxlX2FsbF9yaW5ncyhzdHJ1 Y3QgaWZuZXQgKmlmcCkKIHsKLQluZXRtYXBfc2V0X2FsbF9yaW5ncyhOQShpZnApLCAxIC8qIHN0 b3BwZWQgKi8pOworCWlmIChOTV9OQV9WQUxJRChpZnApKSB7CisJCW5ldG1hcF9zZXRfYWxsX3Jp bmdzKE5BKGlmcCksIE5NX0tSX1NUT1BQRUQpOworCX0KIH0KIAogLyoKQEAgLTYwNyw5ICs2MTks MzQgQEAKIHZvaWQKIG5ldG1hcF9lbmFibGVfYWxsX3JpbmdzKHN0cnVjdCBpZm5ldCAqaWZwKQog ewotCW5ldG1hcF9zZXRfYWxsX3JpbmdzKE5BKGlmcCksIDAgLyogZW5hYmxlZCAqLyk7CisJaWYg KE5NX05BX1ZBTElEKGlmcCkpIHsKKwkJbmV0bWFwX3NldF9hbGxfcmluZ3MoTkEoaWZwKSwgMCAv KiBlbmFibGVkICovKTsKKwl9Cit9CisKK3ZvaWQKK25ldG1hcF9tYWtlX3pvbWJpZShzdHJ1Y3Qg aWZuZXQgKmlmcCkKK3sKKwlpZiAoTk1fTkFfVkFMSUQoaWZwKSkgeworCQlzdHJ1Y3QgbmV0bWFw X2FkYXB0ZXIgKm5hID0gTkEoaWZwKTsKKwkJbmV0bWFwX3NldF9hbGxfcmluZ3MobmEsIE5NX0tS X0xPQ0tFRCk7CisJCW5hLT5uYV9mbGFncyB8PSBOQUZfWk9NQklFOworCQluZXRtYXBfc2V0X2Fs bF9yaW5ncyhuYSwgMCk7CisJfQogfQogCit2b2lkCituZXRtYXBfdW5kb196b21iaWUoc3RydWN0 IGlmbmV0ICppZnApCit7CisJaWYgKE5NX05BX1ZBTElEKGlmcCkpIHsKKwkJc3RydWN0IG5ldG1h cF9hZGFwdGVyICpuYSA9IE5BKGlmcCk7CisJCWlmIChuYS0+bmFfZmxhZ3MgJiBOQUZfWk9NQklF KSB7CisJCQluZXRtYXBfc2V0X2FsbF9yaW5ncyhuYSwgTk1fS1JfTE9DS0VEKTsKKwkJCW5hLT5u YV9mbGFncyAmPSB+TkFGX1pPTUJJRTsKKwkJCW5ldG1hcF9zZXRfYWxsX3JpbmdzKG5hLCAwKTsK KwkJfQorCX0KK30KIAogLyoKICAqIGdlbmVyaWMgYm91bmRfY2hlY2tpbmcgZnVuY3Rpb24KQEAg LTcyNywyOCArNzY0LDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgbmV0bWFwX3R4 c3luY190b19ob3N0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpOwotc3RhdGljIGludCBuZXRt YXBfcnhzeW5jX2Zyb21faG9zdChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBzdHJ1Y3QgdGhy ZWFkICp0ZCwgdm9pZCAqcHdhaXQpOwotCi0vKiBrcmluZy0+bm1fc3luYyBjYWxsYmFjayBmb3Ig dGhlIGhvc3QgdHggcmluZyAqLwotc3RhdGljIGludAotbmV0bWFwX3R4c3luY190b19ob3N0X2Nv bXBhdChzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQotewotCSh2b2lkKWZs YWdzOyAvKiB1bnVzZWQgKi8KLQluZXRtYXBfdHhzeW5jX3RvX2hvc3Qoa3JpbmctPm5hKTsKLQly ZXR1cm4gMDsKLX0KLQotLyoga3JpbmctPm5tX3N5bmMgY2FsbGJhY2sgZm9yIHRoZSBob3N0IHJ4 IHJpbmcgKi8KLXN0YXRpYyBpbnQKLW5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0X2NvbXBhdChzdHJ1 Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQotewotCSh2b2lkKWZsYWdzOyAvKiB1 bnVzZWQgKi8KLQluZXRtYXBfcnhzeW5jX2Zyb21faG9zdChrcmluZy0+bmEsIE5VTEwsIE5VTEwp OwotCXJldHVybiAwOwotfQotCi0KKy8qIG5tX3N5bmMgY2FsbGJhY2tzIGZvciB0aGUgaG9zdCBy aW5ncyAqLworc3RhdGljIGludCBuZXRtYXBfdHhzeW5jX3RvX2hvc3Qoc3RydWN0IG5ldG1hcF9r cmluZyAqa3JpbmcsIGludCBmbGFncyk7CitzdGF0aWMgaW50IG5ldG1hcF9yeHN5bmNfZnJvbV9o b3N0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpOwogCiAvKiBjcmVhdGUg dGhlIGtyaW5ncyBhcnJheSBhbmQgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGNvbW1vbiB0byBhbGwg YWRhcHRlcnMuCiAgKiBUaGUgYXJyYXkgbGF5b3V0IGlzIHRoaXM6CkBAIC03ODksNyArODA3LDcg QEAKIAogCWxlbiA9IChuW05SX1RYXSArIG5bTlJfUlhdKSAqIHNpemVvZihzdHJ1Y3QgbmV0bWFw X2tyaW5nKSArIHRhaWxyb29tOwogCi0JbmEtPnR4X3JpbmdzID0gbWFsbG9jKChzaXplX3QpbGVu LCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCW5hLT50eF9yaW5ncyA9IG5tX29zX21h bGxvYygoc2l6ZV90KWxlbik7CiAJaWYgKG5hLT50eF9yaW5ncyA9PSBOVUxMKSB7CiAJCUQoIkNh bm5vdCBhbGxvY2F0ZSBrcmluZ3MiKTsKIAkJcmV0dXJuIEVOT01FTTsKQEAgLTgwOSwxMiArODI3 LDE0IEBACiAJCQlrcmluZy0+cmluZ19pZCA9IGk7CiAJCQlrcmluZy0+dHggPSB0OwogCQkJa3Jp bmctPm5rcl9udW1fc2xvdHMgPSBuZGVzYzsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1B UF9PRkY7CisJCQlrcmluZy0+bnJfcGVuZGluZ19tb2RlID0gTktSX05FVE1BUF9PRkY7CiAJCQlp ZiAoaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSkgewogCQkJCWtyaW5nLT5ubV9zeW5jID0gKHQg PT0gTlJfVFggPyBuYS0+bm1fdHhzeW5jIDogbmEtPm5tX3J4c3luYyk7Ci0JCQl9IGVsc2UgaWYg KGkgPT0gbmEtPm51bV90eF9yaW5ncykgeworCQkJfSBlbHNlIHsKIAkJCQlrcmluZy0+bm1fc3lu YyA9ICh0ID09IE5SX1RYID8KLQkJCQkJCW5ldG1hcF90eHN5bmNfdG9faG9zdF9jb21wYXQgOgot CQkJCQkJbmV0bWFwX3J4c3luY19mcm9tX2hvc3RfY29tcGF0KTsKKwkJCQkJCW5ldG1hcF90eHN5 bmNfdG9faG9zdDoKKwkJCQkJCW5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KTsKIAkJCX0KIAkJCWty aW5nLT5ubV9ub3RpZnkgPSBuYS0+bm1fbm90aWZ5OwogCQkJa3JpbmctPnJoZWFkID0ga3Jpbmct PnJjdXIgPSBrcmluZy0+bnJfaHdjdXIgPSAwOwpAQCAtODIyLDE0ICs4NDIsMTQgQEAKIAkJCSAq IElNUE9SVEFOVDogQWx3YXlzIGtlZXAgb25lIHNsb3QgZW1wdHkuCiAJCQkgKi8KIAkJCWtyaW5n LT5ydGFpbCA9IGtyaW5nLT5ucl9od3RhaWwgPSAodCA9PSBOUl9UWCA/IG5kZXNjIC0gMSA6IDAp OwotCQkJc25wcmludGYoa3JpbmctPm5hbWUsIHNpemVvZihrcmluZy0+bmFtZSkgLSAxLCAiJXMg JXMlZCIsIG5hLT5uYW1lLCAKKwkJCXNucHJpbnRmKGtyaW5nLT5uYW1lLCBzaXplb2Yoa3Jpbmct Pm5hbWUpIC0gMSwgIiVzICVzJWQiLCBuYS0+bmFtZSwKIAkJCQkJbm1fdHhyeDJzdHIodCksIGkp OwogCQkJTkQoImt0eCAlcyBoICVkIGMgJWQgdCAlZCIsCiAJCQkJa3JpbmctPm5hbWUsIGtyaW5n LT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ydGFpbCk7CiAJCQltdHhfaW5pdCgma3Jpbmct PnFfbG9jaywgKHQgPT0gTlJfVFggPyAibm1fdHhxX2xvY2siIDogIm5tX3J4cV9sb2NrIiksIE5V TEwsIE1UWF9ERUYpOwotCQkJaW5pdF93YWl0cXVldWVfaGVhZCgma3JpbmctPnNpKTsKKwkJCW5t X29zX3NlbGluZm9faW5pdCgma3JpbmctPnNpKTsKIAkJfQotCQlpbml0X3dhaXRxdWV1ZV9oZWFk KCZuYS0+c2lbdF0pOworCQlubV9vc19zZWxpbmZvX2luaXQoJm5hLT5zaVt0XSk7CiAJfQogCiAJ bmEtPnRhaWxyb29tID0gbmEtPnJ4X3JpbmdzICsgbltOUl9SWF07CkBAIC04MzgsMTkgKzg1OCw2 IEBACiB9CiAKIAotI2lmZGVmIF9fRnJlZUJTRF9fCi1zdGF0aWMgdm9pZAotbmV0bWFwX2tubGlz dF9kZXN0cm95KE5NX1NFTElORk9fVCAqc2kpCi17Ci0JLyogWFhYIGtxdWV1ZSg5KSBuZWVkZWQ7 IHRoZXNlIHdpbGwgbWlycm9yIGtubGlzdF9pbml0LiAqLwotCWtubGlzdF9kZWxldGUoJnNpLT5z aS5zaV9ub3RlLCBjdXJ0aHJlYWQsIDAgLyogbm90IGxvY2tlZCAqLyApOwotCWtubGlzdF9kZXN0 cm95KCZzaS0+c2kuc2lfbm90ZSk7Ci0JLyogbm93IHdlIGRvbid0IG5lZWQgdGhlIG11dGV4IGFu eW1vcmUgKi8KLQltdHhfZGVzdHJveSgmc2ktPm0pOwotfQotI2VuZGlmIC8qIF9fRnJlZUJTRF9f ICovCi0KLQogLyogdW5kbyB0aGUgYWN0aW9ucyBwZXJmb3JtZWQgYnkgbmV0bWFwX2tyaW5nc19j cmVhdGUgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBoZWxkICovCiB2b2lkCkBAIC04NjAsMTQg Kzg2NywxNCBAQAogCWVudW0gdHhyeCB0OwogCiAJZm9yX3J4X3R4KHQpCi0JCW5ldG1hcF9rbmxp c3RfZGVzdHJveSgmbmEtPnNpW3RdKTsKKwkJbm1fb3Nfc2VsaW5mb191bmluaXQoJm5hLT5zaVt0 XSk7CiAKIAkvKiB3ZSByZWx5IG9uIHRoZSBrcmluZ3MgbGF5b3V0IGRlc2NyaWJlZCBhYm92ZSAq LwogCWZvciAoIDsga3JpbmcgIT0gbmEtPnRhaWxyb29tOyBrcmluZysrKSB7CiAJCW10eF9kZXN0 cm95KCZrcmluZy0+cV9sb2NrKTsKLQkJbmV0bWFwX2tubGlzdF9kZXN0cm95KCZrcmluZy0+c2kp OworCQlubV9vc19zZWxpbmZvX3VuaW5pdCgma3JpbmctPnNpKTsKIAl9Ci0JZnJlZShuYS0+dHhf cmluZ3MsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKG5hLT50eF9yaW5ncyk7CiAJbmEtPnR4X3Jp bmdzID0gbmEtPnJ4X3JpbmdzID0gbmEtPnRhaWxyb29tID0gTlVMTDsKIH0KIApAQCAtODc4LDE0 ICs4ODUsMTQgQEAKICAqIHRoZW0gZmlyc3QuCiAgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBo ZWxkICovCi1zdGF0aWMgdm9pZAordm9pZAogbmV0bWFwX2h3X2tyaW5nc19kZWxldGUoc3RydWN0 IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKIAlzdHJ1Y3QgbWJxICpxID0gJm5hLT5yeF9yaW5nc1tu YS0+bnVtX3J4X3JpbmdzXS5yeF9xdWV1ZTsKIAogCU5EKCJkZXN0cm95IHN3IG1icSB3aXRoIGxl biAlZCIsIG1icV9sZW4ocSkpOwogCW1icV9wdXJnZShxKTsKLQltYnFfc2FmZV9kZXN0cm95KHEp OworCW1icV9zYWZlX2ZpbmkocSk7CiAJbmV0bWFwX2tyaW5nc19kZWxldGUobmEpOwogfQogCkBA IC04OTgsMjkgKzkwNSwzOCBAQAogICovCiAvKiBjYWxsIHdpdGggTk1HX0xPQ0sgaGVsZCAqLwog c3RhdGljIHZvaWQgbmV0bWFwX3Vuc2V0X3JpbmdpZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqKTsK LXN0YXRpYyB2b2lkIG5ldG1hcF9yZWxfZXhjbHVzaXZlKHN0cnVjdCBuZXRtYXBfcHJpdl9kICop Owotc3RhdGljIHZvaWQKK3N0YXRpYyB2b2lkIG5ldG1hcF9rcmluZ3NfcHV0KHN0cnVjdCBuZXRt YXBfcHJpdl9kICopOwordm9pZAogbmV0bWFwX2RvX3VucmVnaWYoc3RydWN0IG5ldG1hcF9wcml2 X2QgKnByaXYpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IHByaXYtPm5wX25hOwog CiAJTk1HX0xPQ0tfQVNTRVJUKCk7CiAJbmEtPmFjdGl2ZV9mZHMtLTsKLQkvKiByZWxlYXNlIGV4 Y2x1c2l2ZSB1c2UgaWYgaXQgd2FzIHJlcXVlc3RlZCBvbiByZWdpZiAqLwotCW5ldG1hcF9yZWxf ZXhjbHVzaXZlKHByaXYpOwotCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwKSB7CS8qIGxhc3QgaW5z dGFuY2UgKi8KLQotCQlpZiAobmV0bWFwX3ZlcmJvc2UpCi0JCQlEKCJkZWxldGluZyBsYXN0IGlu c3RhbmNlIGZvciAlcyIsIG5hLT5uYW1lKTsKKwkvKiB1bnNldCBucl9wZW5kaW5nX21vZGUgYW5k IHBvc3NpYmx5IHJlbGVhc2UgZXhjbHVzaXZlIG1vZGUgKi8KKwluZXRtYXBfa3JpbmdzX3B1dChw cml2KTsKIAogI2lmZGVmCVdJVEhfTU9OSVRPUgorCS8qIFhYWCBjaGVjayB3aGV0aGVyIHdlIGhh dmUgdG8gZG8gc29tZXRoaW5nIHdpdGggbW9uaXRvcgorCSAqIHdoZW4gcmluZ3MgY2hhbmdlIG5y X21vZGUuICovCisJaWYgKG5hLT5hY3RpdmVfZmRzIDw9IDApIHsKIAkJLyogd2FsayB0aHJvdWdo IGFsbCB0aGUgcmluZ3MgYW5kIHRlbGwgYW55IG1vbml0b3IKIAkJICogdGhhdCB0aGUgcG9ydCBp cyBnb2luZyB0byBleGl0IG5ldG1hcCBtb2RlCiAJCSAqLwogCQluZXRtYXBfbW9uaXRvcl9zdG9w KG5hKTsKKwl9CiAjZW5kaWYKKworCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwIHx8IG5tX2tyaW5n X3BlbmRpbmcocHJpdikpIHsKKwkJbmEtPm5tX3JlZ2lzdGVyKG5hLCAwKTsKKwl9CisKKwkvKiBk ZWxldGUgcmluZ3MgYW5kIGJ1ZmZlcnMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCAqLworCW5l dG1hcF9tZW1fcmluZ3NfZGVsZXRlKG5hKTsKKworCWlmIChuYS0+YWN0aXZlX2ZkcyA8PSAwKSB7 CS8qIGxhc3QgaW5zdGFuY2UgKi8KIAkJLyoKLQkJICogKFRPIENIRUNLKSBUaGlzIGZ1bmN0aW9u IGlzIG9ubHkgY2FsbGVkCisJCSAqIChUTyBDSEVDSykgV2UgZW50ZXIgaGVyZQogCQkgKiB3aGVu IHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIGZpbGUgZGVzY3JpcHRvciBnb2VzCiAJCSAqIGF3 YXkuIFRoaXMgbWVhbnMgd2UgY2Fubm90IGhhdmUgYW55IHBlbmRpbmcgcG9sbCgpCiAJCSAqIG9y IGludGVycnVwdCByb3V0aW5lIG9wZXJhdGluZyBvbiB0aGUgc3RydWN0dXJlLgpAQCAtOTMzLDE2 ICs5NDksMTYgQEAKIAkJICogaGFwcGVucyBpZiB0aGUgY2xvc2UoKSBvY2N1cnMgd2hpbGUgYSBj b25jdXJyZW50CiAJCSAqIHN5c2NhbGwgaXMgcnVubmluZy4KIAkJICovCi0JCW5hLT5ubV9yZWdp c3RlcihuYSwgMCk7IC8qIG9mZiwgY2xlYXIgZmxhZ3MgKi8KLQkJLyogV2FrZSB1cCBhbnkgc2xl ZXBpbmcgdGhyZWFkcy4gbmV0bWFwX3BvbGwgd2lsbAotCQkgKiB0aGVuIHJldHVybiBQT0xMRVJS Ci0JCSAqIFhYWCBUaGUgd2FrZSB1cCBub3cgbXVzdCBoYXBwZW4gZHVyaW5nICpfZG93bigpLCB3 aGVuCi0JCSAqIHdlIG9yZGVyIGFsbCBhY3Rpdml0aWVzIHRvIHN0b3AuIC1nbAotCQkgKi8KLQkJ LyogZGVsZXRlIHJpbmdzIGFuZCBidWZmZXJzICovCi0JCW5ldG1hcF9tZW1fcmluZ3NfZGVsZXRl KG5hKTsKKwkJaWYgKG5ldG1hcF92ZXJib3NlKQorCQkJRCgiZGVsZXRpbmcgbGFzdCBpbnN0YW5j ZSBmb3IgJXMiLCBuYS0+bmFtZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm1fbmV0bWFwX29u KG5hKSkgeworICAgICAgICAgICAgICAgICAgICBEKCJCVUc6IG5ldG1hcCBvbiB3aGlsZSBnb2lu ZyB0byBkZWxldGUgdGhlIGtyaW5ncyIpOworICAgICAgICAgICAgICAgIH0KKwogCQluYS0+bm1f a3JpbmdzX2RlbGV0ZShuYSk7CiAJfQorCiAJLyogcG9zc2liaWx5IGRlY3JlbWVudCBjb3VudGVy IG9mIHR4X3NpL3J4X3NpIHVzZXJzICovCiAJbmV0bWFwX3Vuc2V0X3JpbmdpZChwcml2KTsKIAkv KiBkZWxldGUgdGhlIG5pZnAgKi8KQEAgLTk2Miw2ICs5NzgsMTkgQEAKIAkJKHByaXYtPm5wX3Fs YXN0W3RdIC0gcHJpdi0+bnBfcWZpcnN0W3RdID4gMSkpOwogfQogCitzdHJ1Y3QgbmV0bWFwX3By aXZfZCoKK25ldG1hcF9wcml2X25ldyh2b2lkKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdl9kICpw cml2OworCisJcHJpdiA9IG5tX29zX21hbGxvYyhzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2X2Qp KTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlwcml2LT5ucF9yZWZzID0g MTsKKwlubV9vc19nZXRfbW9kdWxlKCk7CisJcmV0dXJuIHByaXY7Cit9CisKIC8qCiAgKiBEZXN0 cnVjdG9yIG9mIHRoZSBuZXRtYXBfcHJpdl9kLCBjYWxsZWQgd2hlbiB0aGUgZmQgaXMgY2xvc2Vk CiAgKiBBY3Rpb246IHVuZG8gYWxsIHRoZSB0aGluZ3MgZG9uZSBieSBOSU9DUkVHSUYsCkBAIC05 NzEsMjIgKzEwMDAsMjIgQEAKICAqCiAgKi8KIC8qIGNhbGwgd2l0aCBOTUdfTE9DSyBoZWxkICov Ci1pbnQKLW5ldG1hcF9kdG9yX2xvY2tlZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKK3Zv aWQKK25ldG1hcF9wcml2X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKIHsKIAlz dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gcHJpdi0+bnBfbmE7CiAKIAkvKiBudW1iZXIgb2Yg YWN0aXZlIHJlZmVyZW5jZXMgdG8gdGhpcyBmZCAqLwogCWlmICgtLXByaXYtPm5wX3JlZnMgPiAw KSB7Ci0JCXJldHVybiAwOwotCX0KLQluZXRtYXBfdXNlX2NvdW50LS07Ci0JaWYgKCFuYSkgewot CQlyZXR1cm4gMTsgLy9YWFggaXMgaXQgY29ycmVjdD8KKwkJcmV0dXJuOwogCX0KLQluZXRtYXBf ZG9fdW5yZWdpZihwcml2KTsKLQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOwotCXJldHVybiAxOwor CW5tX29zX3B1dF9tb2R1bGUoKTsKKwlpZiAobmEpIHsKKwkJbmV0bWFwX2RvX3VucmVnaWYocHJp dik7CisJfQorCW5ldG1hcF91bmdldF9uYShuYSwgcHJpdi0+bnBfaWZwKTsKKwliemVybyhwcml2 LCBzaXplb2YoKnByaXYpKTsJLyogZm9yIHNhZmV0eSAqLworCW5tX29zX2ZyZWUocHJpdik7CiB9 CiAKIApAQCAtOTk1LDE1ICsxMDI0LDEwIEBACiBuZXRtYXBfZHRvcih2b2lkICpkYXRhKQogewog CXN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2ID0gZGF0YTsKLQlpbnQgbGFzdF9pbnN0YW5jZTsK IAogCU5NR19MT0NLKCk7Ci0JbGFzdF9pbnN0YW5jZSA9IG5ldG1hcF9kdG9yX2xvY2tlZChwcml2 KTsKKwluZXRtYXBfcHJpdl9kZWxldGUocHJpdik7CiAJTk1HX1VOTE9DSygpOwotCWlmIChsYXN0 X2luc3RhbmNlKSB7Ci0JCWJ6ZXJvKHByaXYsIHNpemVvZigqcHJpdikpOwkvKiBmb3Igc2FmZXR5 ICovCi0JCWZyZWUocHJpdiwgTV9ERVZCVUYpOwotCX0KIH0KIAogCkBAIC0xMDM2LDE0ICsxMDYw LDE5IEBACiBuZXRtYXBfc2VuZF91cChzdHJ1Y3QgaWZuZXQgKmRzdCwgc3RydWN0IG1icSAqcSkK IHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgbWJ1ZiAqaGVhZCA9IE5VTEwsICpwcmV2ID0g TlVMTDsKIAogCS8qIHNlbmQgcGFja2V0cyB1cCwgb3V0c2lkZSB0aGUgbG9jayAqLwogCXdoaWxl ICgobSA9IG1icV9kZXF1ZXVlKHEpKSAhPSBOVUxMKSB7CiAJCWlmIChuZXRtYXBfdmVyYm9zZSAm IE5NX1ZFUkJfSE9TVCkKIAkJCUQoInNlbmRpbmcgdXAgcGt0ICVwIHNpemUgJWQiLCBtLCBNQlVG X0xFTihtKSk7Ci0JCU5NX1NFTkRfVVAoZHN0LCBtKTsKLQl9Ci0JbWJxX2Rlc3Ryb3kocSk7CisJ CXByZXYgPSBubV9vc19zZW5kX3VwKGRzdCwgbSwgcHJldik7CisJCWlmIChoZWFkID09IE5VTEwp CisJCQloZWFkID0gcHJldjsKKwl9CisJaWYgKGhlYWQpCisJCW5tX29zX3NlbmRfdXAoZHN0LCBO VUxMLCBoZWFkKTsKKwltYnFfZmluaShxKTsKIH0KIAogCkBAIC0xMDgxLDYgKzExMTAsMjcgQEAK IAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50Citfbm1fbWF5X2ZvcndhcmQoc3RydWN0IG5ldG1h cF9rcmluZyAqa3JpbmcpCit7CisJcmV0dXJuCSgobmV0bWFwX2Z3ZCB8fCBrcmluZy0+cmluZy0+ ZmxhZ3MgJiBOUl9GT1JXQVJEKSAmJgorCQkga3JpbmctPm5hLT5uYV9mbGFncyAmIE5BRl9IT1NU X1JJTkdTICYmCisJCSBrcmluZy0+dHggPT0gTlJfUlgpOworfQorCitzdGF0aWMgaW5saW5lIGlu dAorbm1fbWF5X2ZvcndhcmRfdXAoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCit7CisJcmV0 dXJuCV9ubV9tYXlfZm9yd2FyZChrcmluZykgJiYKKwkJIGtyaW5nLT5yaW5nX2lkICE9IGtyaW5n LT5uYS0+bnVtX3J4X3JpbmdzOworfQorCitzdGF0aWMgaW5saW5lIGludAorbm1fbWF5X2Zvcndh cmRfZG93bihzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZykKK3sKKwlyZXR1cm4JX25tX21heV9m b3J3YXJkKGtyaW5nKSAmJgorCQkga3JpbmctPnJpbmdfaWQgPT0ga3JpbmctPm5hLT5udW1fcnhf cmluZ3M7Cit9CiAKIC8qCiAgKiBTZW5kIHRvIHRoZSBOSUMgcmluZ3MgcGFja2V0cyBtYXJrZWQg TlNfRk9SV0FSRCBiZXR3ZWVuCkBAIC0xMTA3LDcgKzExNTcsNyBAQAogCQlmb3IgKDsgcnhjdXIg IT0gaGVhZCAmJiAhbm1fcmluZ19lbXB0eShyZHN0KTsKIAkJICAgICByeGN1ciA9IG5tX25leHQo cnhjdXIsIHNyY19saW0pICkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzcmMsICpkc3QsIHRt cDsKLQkJCXVfaW50IGRzdF9jdXIgPSByZHN0LT5jdXI7CisJCQl1X2ludCBkc3RfaGVhZCA9IHJk c3QtPmhlYWQ7CiAKIAkJCXNyYyA9ICZyeHNsb3RbcnhjdXJdOwogCQkJaWYgKChzcmMtPmZsYWdz ICYgTlNfRk9SV0FSRCkgPT0gMCAmJiAhbmV0bWFwX2Z3ZCkKQEAgLTExMTUsNyArMTE2NSw3IEBA CiAKIAkJCXNlbnQrKzsKIAotCQkJZHN0ID0gJnJkc3QtPnNsb3RbZHN0X2N1cl07CisJCQlkc3Qg PSAmcmRzdC0+c2xvdFtkc3RfaGVhZF07CiAKIAkJCXRtcCA9ICpzcmM7CiAKQEAgLTExMjYsNyAr MTE3Niw3IEBACiAJCQlkc3QtPmxlbiA9IHRtcC5sZW47CiAJCQlkc3QtPmZsYWdzID0gTlNfQlVG X0NIQU5HRUQ7CiAKLQkJCXJkc3QtPmN1ciA9IG5tX25leHQoZHN0X2N1ciwgZHN0X2xpbSk7CisJ CQlyZHN0LT5oZWFkID0gcmRzdC0+Y3VyID0gbm1fbmV4dChkc3RfaGVhZCwgZHN0X2xpbSk7CiAJ CX0KIAkJLyogaWYgKHNlbnQpIFhYWCB0eHN5bmMgPyAqLwogCX0KQEAgLTExNDAsMTAgKzExOTAs MTAgQEAKICAqIGNhbiBiZSBhbW9uZyBtdWx0aXBsZSB1c2VyIHRocmVhZHMgZXJyb25lb3VzbHkg Y2FsbGluZwogICogdGhpcyByb3V0aW5lIGNvbmN1cnJlbnRseS4KICAqLwotc3RhdGljIHZvaWQK LW5ldG1hcF90eHN5bmNfdG9faG9zdChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQorc3RhdGlj IGludAorbmV0bWFwX3R4c3luY190b19ob3N0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBp bnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmbmEtPnR4X3Jpbmdz W25hLT5udW1fdHhfcmluZ3NdOworCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBrcmluZy0+ bmE7CiAJdV9pbnQgY29uc3QgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXVfaW50 IGNvbnN0IGhlYWQgPSBrcmluZy0+cmhlYWQ7CiAJc3RydWN0IG1icSBxOwpAQCAtMTE2Miw2ICsx MjEyLDcgQEAKIAkJa3JpbmctPm5yX2h3dGFpbCAtPSBsaW0gKyAxOwogCiAJbmV0bWFwX3NlbmRf dXAobmEtPmlmcCwgJnEpOworCXJldHVybiAwOwogfQogCiAKQEAgLTExNzEsMTcgKzEyMjIsMTUg QEAKICAqIFdlIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBrcmluZyB1c2luZyBrcmluZy0+cnhfcXVl dWUubG9jawogICoKICAqIFRoaXMgcm91dGluZSBhbHNvIGRvZXMgdGhlIHNlbHJlY29yZCBpZiBj YWxsZWQgZnJvbSB0aGUgcG9sbCBoYW5kbGVyCi0gKiAod2Uga25vdyBiZWNhdXNlIHRkICE9IE5V TEwpLgorICogKHdlIGtub3cgYmVjYXVzZSBzciAhPSBOVUxMKS4KICAqCi0gKiBOT1RFOiBvbiBs aW51eCwgc2VscmVjb3JkKCkgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIGFuZCB1c2VzIHB3YWl0Ci0g KiAgICAgYXMgYW4gYWRkaXRpb25hbCBoaWRkZW4gYXJndW1lbnQuCiAgKiByZXR1cm5zIHRoZSBu dW1iZXIgb2YgcGFja2V0cyBkZWxpdmVyZWQgdG8gdHggcXVldWVzIGluCiAgKiB0cmFuc3BhcmVu dCBtb2RlLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIGVycm9yCiAgKi8KIHN0YXRpYyBpbnQKLW5l dG1hcF9yeHN5bmNfZnJvbV9ob3N0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHN0cnVjdCB0 aHJlYWQgKnRkLCB2b2lkICpwd2FpdCkKK25ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KHN0cnVjdCBu ZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldG1hcF9rcmluZyAq a3JpbmcgPSAmbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdOworCXN0cnVjdCBuZXRtYXBf YWRhcHRlciAqbmEgPSBrcmluZy0+bmE7CiAJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3Jp bmctPnJpbmc7CiAJdV9pbnQgbm1faSwgbjsKIAl1X2ludCBjb25zdCBsaW0gPSBrcmluZy0+bmty X251bV9zbG90cyAtIDE7CkBAIC0xMTg5LDkgKzEyMzgsNiBAQAogCWludCByZXQgPSAwOwogCXN0 cnVjdCBtYnEgKnEgPSAma3JpbmctPnJ4X3F1ZXVlLCBmcTsKIAotCSh2b2lkKXB3YWl0OwkvKiBk aXNhYmxlIHVudXNlZCB3YXJuaW5ncyAqLwotCSh2b2lkKXRkOwotCiAJbWJxX2luaXQoJmZxKTsg LyogZnEgaG9sZHMgcGFja2V0cyB0byBiZSBmcmVlZCAqLwogCiAJbWJxX2xvY2socSk7CkBAIC0x MjI2LDE5ICsxMjcyLDIwIEBACiAJICovCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlpZiAo bm1faSAhPSBoZWFkKSB7IC8qIHNvbWV0aGluZyB3YXMgcmVsZWFzZWQgKi8KLQkJaWYgKG5ldG1h cF9md2QgfHwga3JpbmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkKKwkJaWYgKG5tX21heV9m b3J3YXJkX2Rvd24oa3JpbmcpKSB7CiAJCQlyZXQgPSBuZXRtYXBfc3dfdG9fbmljKG5hKTsKKwkJ CWlmIChyZXQgPiAwKSB7CisJCQkJa3JpbmctPm5yX2tmbGFncyB8PSBOUl9GT1JXQVJEOworCQkJ CXJldCA9IDA7CisJCQl9CisJCX0KIAkJa3JpbmctPm5yX2h3Y3VyID0gaGVhZDsKIAl9CiAKLQkv KiBhY2Nlc3MgY29waWVzIG9mIGN1cix0YWlsIGluIHRoZSBrcmluZyAqLwotCWlmIChrcmluZy0+ cmN1ciA9PSBrcmluZy0+cnRhaWwgJiYgdGQpIC8qIG5vIGJ1ZnMgYXZhaWxhYmxlICovCi0JCU9T X3NlbHJlY29yZCh0ZCwgJmtyaW5nLT5zaSk7Ci0KIAltYnFfdW5sb2NrKHEpOwogCiAJbWJxX3B1 cmdlKCZmcSk7Ci0JbWJxX2Rlc3Ryb3koJmZxKTsKKwltYnFfZmluaSgmZnEpOwogCiAJcmV0dXJu IHJldDsKIH0KQEAgLTEyNjcsMTcgKzEzMTQsMTQgQEAKICAqICAgICAwICAgICAgICBORVRNQVBf QURNT0RFX0dFTkVSSUMgICBHRU5FUklDIEdFTkVSSUMKICAqCiAgKi8KLQorc3RhdGljIHZvaWQg bmV0bWFwX2h3X2R0b3Ioc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOyAvKiBuZWVkZWQgYnkgTk1f SVNfTkFUSVZFKCkgKi8KIGludAogbmV0bWFwX2dldF9od19uYShzdHJ1Y3QgaWZuZXQgKmlmcCwg c3RydWN0IG5ldG1hcF9hZGFwdGVyICoqbmEpCiB7CiAJLyogZ2VuZXJpYyBzdXBwb3J0ICovCiAJ aW50IGkgPSBuZXRtYXBfYWRtb2RlOwkvKiBUYWtlIGEgc25hcHNob3QuICovCiAJc3RydWN0IG5l dG1hcF9hZGFwdGVyICpwcmV2X25hOwotI2lmZGVmIFdJVEhfR0VORVJJQwotCXN0cnVjdCBuZXRt YXBfZ2VuZXJpY19hZGFwdGVyICpnbmE7CiAJaW50IGVycm9yID0gMDsKLSNlbmRpZgogCiAJKm5h ID0gTlVMTDsgLyogZGVmYXVsdCAqLwogCkBAIC0xMjg1LDcgKzEzMjksNyBAQAogCWlmIChpIDwg TkVUTUFQX0FETU9ERV9CRVNUIHx8IGkgPj0gTkVUTUFQX0FETU9ERV9MQVNUKQogCQlpID0gbmV0 bWFwX2FkbW9kZSA9IE5FVE1BUF9BRE1PREVfQkVTVDsKIAotCWlmIChORVRNQVBfQ0FQQUJMRShp ZnApKSB7CisJaWYgKE5NX05BX1ZBTElEKGlmcCkpIHsKIAkJcHJldl9uYSA9IE5BKGlmcCk7CiAJ CS8qIElmIGFuIGFkYXB0ZXIgYWxyZWFkeSBleGlzdHMsIHJldHVybiBpdCBpZgogCQkgKiB0aGVy ZSBhcmUgYWN0aXZlIGZpbGUgZGVzY3JpcHRvcnMgb3IgaWYKQEAgLTEzMTAsMTAgKzEzNTQsOSBA QAogCS8qIElmIHRoZXJlIGlzbid0IG5hdGl2ZSBzdXBwb3J0IGFuZCBuZXRtYXAgaXMgbm90IGFs bG93ZWQKIAkgKiB0byB1c2UgZ2VuZXJpYyBhZGFwdGVycywgd2UgY2Fubm90IHNhdGlzZnkgdGhl IHJlcXVlc3QuCiAJICovCi0JaWYgKCFORVRNQVBfQ0FQQUJMRShpZnApICYmIGkgPT0gTkVUTUFQ X0FETU9ERV9OQVRJVkUpCisJaWYgKCFOTV9JU19OQVRJVkUoaWZwKSAmJiBpID09IE5FVE1BUF9B RE1PREVfTkFUSVZFKQogCQlyZXR1cm4gRU9QTk9UU1VQUDsKIAotI2lmZGVmIFdJVEhfR0VORVJJ QwogCS8qIE90aGVyd2lzZSwgY3JlYXRlIGEgZ2VuZXJpYyBhZGFwdGVyIGFuZCByZXR1cm4gaXQs CiAJICogc2F2aW5nIHRoZSBwcmV2aW91c2x5IHVzZWQgbmV0bWFwIGFkYXB0ZXIsIGlmIGFueS4K IAkgKgpAQCAtMTMyOCwyNSArMTM3MSwxMiBAQAogCSAqIHRoZSBicmFuY2hlcyBhYm92ZS4gVGhp cyBlbnN1cmVzIHRoYXQgd2UgbmV2ZXIgb3ZlcnJpZGUKIAkgKiBhIGdlbmVyaWMgYWRhcHRlciB3 aXRoIGFub3RoZXIgZ2VuZXJpYyBhZGFwdGVyLgogCSAqLwotCXByZXZfbmEgPSBOQShpZnApOwog CWVycm9yID0gZ2VuZXJpY19uZXRtYXBfYXR0YWNoKGlmcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1 cm4gZXJyb3I7CiAKIAkqbmEgPSBOQShpZnApOwotCWduYSA9IChzdHJ1Y3QgbmV0bWFwX2dlbmVy aWNfYWRhcHRlciopTkEoaWZwKTsKLQlnbmEtPnByZXYgPSBwcmV2X25hOyAvKiBzYXZlIG9sZCBu YSAqLwotCWlmIChwcmV2X25hICE9IE5VTEwpIHsKLQkJaWZ1bml0X3JlZihpZnAtPmlmX3huYW1l KTsKLQkJLy8gWFhYIGFkZCBhIHJlZmNvdW50ID8KLQkJbmV0bWFwX2FkYXB0ZXJfZ2V0KHByZXZf bmEpOwotCX0KLQlORCgiQ3JlYXRlZCBnZW5lcmljIE5BICVwIChwcmV2ICVwKSIsIGduYSwgZ25h LT5wcmV2KTsKLQogCXJldHVybiAwOwotI2Vsc2UgLyogIVdJVEhfR0VORVJJQyAqLwotCXJldHVy biBFT1BOT1RTVVBQOwotI2VuZGlmCiB9CiAKIApAQCAtMTM2NCwyMSArMTM5NCwyMiBAQAogICog Y291bGQgbm90IGJlIGFsbG9jYXRlZC4KICAqIElmIHN1Y2Nlc3NmdWwsIGhvbGQgYSByZWZlcmVu Y2UgdG8gdGhlIG5ldG1hcCBhZGFwdGVyLgogICoKLSAqIE5vIHJlZmVyZW5jZSBpcyBrZXB0IG9u IHRoZSByZWFsIGludGVyZmFjZSwgd2hpY2ggbWF5IHRoZW4KLSAqIGRpc2FwcGVhciBhdCBhbnkg dGltZS4KKyAqIElmIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWVkIGJ5IG5tciBpcyBhIHN5c3RlbSBv bmUsIGFsc28ga2VlcAorICogYSByZWZlcmVuY2UgdG8gaXQgYW5kIHJldHVybiBhIHZhbGlkICpp ZnAuCiAgKi8KIGludAotbmV0bWFwX2dldF9uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5l dG1hcF9hZGFwdGVyICoqbmEsIGludCBjcmVhdGUpCituZXRtYXBfZ2V0X25hKHN0cnVjdCBubXJl cSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwKKwkgICAgICBzdHJ1Y3QgaWZuZXQg KippZnAsIGludCBjcmVhdGUpCiB7Ci0Jc3RydWN0IGlmbmV0ICppZnAgPSBOVUxMOwogCWludCBl cnJvciA9IDA7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpyZXQgPSBOVUxMOwogCiAJKm5hID0g TlVMTDsgICAgIC8qIGRlZmF1bHQgcmV0dXJuIHZhbHVlICovCisJKmlmcCA9IE5VTEw7CiAKIAlO TUdfTE9DS19BU1NFUlQoKTsKIAotCS8qIHdlIGNhc2NhZGUgdGhyb3VnaCBhbGwgcG9zc2libGUg dHlwZXMgb2YgbmV0bWFwIGFkYXB0ZXIuCisJLyogV2UgY2FzY2FkZSB0aHJvdWdoIGFsbCBwb3Nz aWJsZSB0eXBlcyBvZiBuZXRtYXAgYWRhcHRlci4KIAkgKiBBbGwgbmV0bWFwX2dldF8qX25hKCkg ZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvciBhbmQgYW4gbmEsCiAJICogd2l0aCB0aGUgZm9sbG93 aW5nIGNvbWJpbmF0aW9uczoKIAkgKgpAQCAtMTM4OSw2ICsxNDIwLDExIEBACiAJICogICEwICAg ICFOVUxMCQlpbXBvc3NpYmxlCiAJICovCiAKKwkvKiB0cnkgdG8gc2VlIGlmIHRoaXMgaXMgYSBw dG5ldG1hcCBwb3J0ICovCisJZXJyb3IgPSBuZXRtYXBfZ2V0X3B0X2hvc3RfbmEobm1yLCBuYSwg Y3JlYXRlKTsKKwlpZiAoZXJyb3IgfHwgKm5hICE9IE5VTEwpCisJCXJldHVybiBlcnJvcjsKKwog CS8qIHRyeSB0byBzZWUgaWYgdGhpcyBpcyBhIG1vbml0b3IgcG9ydCAqLwogCWVycm9yID0gbmV0 bWFwX2dldF9tb25pdG9yX25hKG5tciwgbmEsIGNyZWF0ZSk7CiAJaWYgKGVycm9yIHx8ICpuYSAh PSBOVUxMKQpAQCAtMTQxMywxMiArMTQ0OSwxMiBAQAogCSAqIFRoaXMgbWF5IHN0aWxsIGJlIGEg dGFwLCBhIHZldGgvZXBhaXIsIG9yIGV2ZW4gYQogCSAqIHBlcnNpc3RlbnQgVkFMRSBwb3J0Lgog CSAqLwotCWlmcCA9IGlmdW5pdF9yZWYobm1yLT5ucl9uYW1lKTsKLQlpZiAoaWZwID09IE5VTEwp IHsKKwkqaWZwID0gaWZ1bml0X3JlZihubXItPm5yX25hbWUpOworCWlmICgqaWZwID09IE5VTEwp IHsKIAkgICAgICAgIHJldHVybiBFTlhJTzsKIAl9CiAKLQllcnJvciA9IG5ldG1hcF9nZXRfaHdf bmEoaWZwLCAmcmV0KTsKKwllcnJvciA9IG5ldG1hcF9nZXRfaHdfbmEoKmlmcCwgJnJldCk7CiAJ aWYgKGVycm9yKQogCQlnb3RvIG91dDsKIApAQCAtMTQyNiwxNSArMTQ2Miw0MiBAQAogCW5ldG1h cF9hZGFwdGVyX2dldChyZXQpOwogCiBvdXQ6Ci0JaWYgKGVycm9yICYmIHJldCAhPSBOVUxMKQot CQluZXRtYXBfYWRhcHRlcl9wdXQocmV0KTsKLQotCWlmIChpZnApCi0JCWlmX3JlbGUoaWZwKTsg LyogYWxsb3cgbGl2ZSB1bmxvYWRpbmcgb2YgZHJpdmVycyBtb2R1bGVzICovCisJaWYgKGVycm9y KSB7CisJCWlmIChyZXQpCisJCQluZXRtYXBfYWRhcHRlcl9wdXQocmV0KTsKKwkJaWYgKCppZnAp IHsKKwkJCWlmX3JlbGUoKmlmcCk7CisJCQkqaWZwID0gTlVMTDsKKwkJfQorCX0KIAogCXJldHVy biBlcnJvcjsKIH0KIAorLyogdW5kbyBuZXRtYXBfZ2V0X25hKCkgKi8KK3ZvaWQKK25ldG1hcF91 bmdldF9uYShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sK KwlpZiAoaWZwKQorCQlpZl9yZWxlKGlmcCk7CisJaWYgKG5hKQorCQluZXRtYXBfYWRhcHRlcl9w dXQobmEpOworfQorCisKKyNkZWZpbmUgTk1fRkFJTF9PTih0KSBkbyB7CQkJCQkJXAorCWlmICh1 bmxpa2VseSh0KSkgewkJCQkJCVwKKwkJUkQoNSwgIiVzOiBmYWlsICciICN0ICInICIJCQkJXAor CQkJImggJWQgYyAlZCB0ICVkICIJCQkJXAorCQkJInJoICVkIHJjICVkIHJ0ICVkICIJCQkJXAor CQkJImhjICVkIGh0ICVkIiwJCQkJCVwKKwkJCWtyaW5nLT5uYW1lLAkJCQkJXAorCQkJaGVhZCwg Y3VyLCByaW5nLT50YWlsLAkJCQlcCisJCQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmlu Zy0+cnRhaWwsCVwKKwkJCWtyaW5nLT5ucl9od2N1ciwga3JpbmctPm5yX2h3dGFpbCk7CQlcCisJ CXJldHVybiBrcmluZy0+bmtyX251bV9zbG90czsJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUg KDApCiAKIC8qCiAgKiB2YWxpZGF0ZSBwYXJhbWV0ZXJzIG9uIGVudHJ5IGZvciAqX3R4c3luYygp CkBAIC0xNDQ5LDExICsxNTEyLDkgQEAKICAqCiAgKiBod2N1ciwgcmhlYWQsIHJ0YWlsIGFuZCBo d3RhaWwgYXJlIHJlbGlhYmxlCiAgKi8KLXN0YXRpYyB1X2ludAotbm1fdHhzeW5jX3Byb2xvZ3Vl KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQordV9pbnQKK25tX3R4c3luY19wcm9sb2d1ZShz dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nKQogewot I2RlZmluZSBOTV9BU1NFUlQodCkgaWYgKHQpIHsgRCgiZmFpbCAiICN0KTsgZ290byBlcnJvcjsg fQotCXN0cnVjdCBuZXRtYXBfcmluZyAqcmluZyA9IGtyaW5nLT5yaW5nOwogCXVfaW50IGhlYWQg PSByaW5nLT5oZWFkOyAvKiByZWFkIG9ubHkgb25jZSAqLwogCXVfaW50IGN1ciA9IHJpbmctPmN1 cjsgLyogcmVhZCBvbmx5IG9uY2UgKi8KIAl1X2ludCBuID0ga3JpbmctPm5rcl9udW1fc2xvdHM7 CkBAIC0xNDYzLDU0ICsxNTI0LDQ0IEBACiAJCWtyaW5nLT5ucl9od2N1ciwga3JpbmctPm5yX2h3 dGFpbCwKIAkJcmluZy0+aGVhZCwgcmluZy0+Y3VyLCByaW5nLT50YWlsKTsKICNpZiAxIC8qIGtl cm5lbCBzYW5pdHkgY2hlY2tzOyBidXQgd2UgY2FuIHRydXN0IHRoZSBrcmluZy4gKi8KLQlpZiAo a3JpbmctPm5yX2h3Y3VyID49IG4gfHwga3JpbmctPnJoZWFkID49IG4gfHwKLQkgICAga3Jpbmct PnJ0YWlsID49IG4gfHwgIGtyaW5nLT5ucl9od3RhaWwgPj0gbikKLQkJZ290byBlcnJvcjsKKwlO TV9GQUlMX09OKGtyaW5nLT5ucl9od2N1ciA+PSBuIHx8IGtyaW5nLT5yaGVhZCA+PSBuIHx8CisJ ICAgIGtyaW5nLT5ydGFpbCA+PSBuIHx8ICBrcmluZy0+bnJfaHd0YWlsID49IG4pOwogI2VuZGlm IC8qIGtlcm5lbCBzYW5pdHkgY2hlY2tzICovCiAJLyoKLQkgKiB1c2VyIHNhbml0eSBjaGVja3Mu IFdlIG9ubHkgdXNlICdjdXInLAotCSAqIEEsIEIsIC4uLiBhcmUgcG9zc2libGUgcG9zaXRpb25z IGZvciBjdXI6CisJICogdXNlciBzYW5pdHkgY2hlY2tzLiBXZSBvbmx5IHVzZSBoZWFkLAorCSAq IEEsIEIsIC4uLiBhcmUgcG9zc2libGUgcG9zaXRpb25zIGZvciBoZWFkOgogCSAqCi0JICogIDAg ICAgQSAgY3VyICAgQiAgdGFpbCAgQyAgbi0xCi0JICogIDAgICAgRCAgdGFpbCAgRSAgY3VyICAg RiAgbi0xCisJICogIDAgICAgQSAgcmhlYWQgICBCICBydGFpbCAgIEMgIG4tMQorCSAqICAwICAg IEQgIHJ0YWlsICAgRSAgcmhlYWQgICBGICBuLTEKIAkgKgogCSAqIEIsIEYsIEQgYXJlIHZhbGlk LiBBLCBDLCBFIGFyZSB3cm9uZwogCSAqLwogCWlmIChrcmluZy0+cnRhaWwgPj0ga3JpbmctPnJo ZWFkKSB7CiAJCS8qIHdhbnQgcmhlYWQgPD0gaGVhZCA8PSBydGFpbCAqLwotCQlOTV9BU1NFUlQo aGVhZCA8IGtyaW5nLT5yaGVhZCB8fCBoZWFkID4ga3JpbmctPnJ0YWlsKTsKKwkJTk1fRkFJTF9P TihoZWFkIDwga3JpbmctPnJoZWFkIHx8IGhlYWQgPiBrcmluZy0+cnRhaWwpOwogCQkvKiBhbmQg YWxzbyBoZWFkIDw9IGN1ciA8PSBydGFpbCAqLwotCQlOTV9BU1NFUlQoY3VyIDwgaGVhZCB8fCBj dXIgPiBrcmluZy0+cnRhaWwpOworCQlOTV9GQUlMX09OKGN1ciA8IGhlYWQgfHwgY3VyID4ga3Jp bmctPnJ0YWlsKTsKIAl9IGVsc2UgeyAvKiBoZXJlIHJ0YWlsIDwgcmhlYWQgKi8KIAkJLyogd2Ug bmVlZCBoZWFkIG91dHNpZGUgcnRhaWwgLi4gcmhlYWQgKi8KLQkJTk1fQVNTRVJUKGhlYWQgPiBr cmluZy0+cnRhaWwgJiYgaGVhZCA8IGtyaW5nLT5yaGVhZCk7CisJCU5NX0ZBSUxfT04oaGVhZCA+ IGtyaW5nLT5ydGFpbCAmJiBoZWFkIDwga3JpbmctPnJoZWFkKTsKIAogCQkvKiB0d28gY2FzZXMg bm93OiBoZWFkIDw9IHJ0YWlsIG9yIGhlYWQgPj0gcmhlYWQgICovCiAJCWlmIChoZWFkIDw9IGty aW5nLT5ydGFpbCkgewogCQkJLyogd2FudCBoZWFkIDw9IGN1ciA8PSBydGFpbCAqLwotCQkJTk1f QVNTRVJUKGN1ciA8IGhlYWQgfHwgY3VyID4ga3JpbmctPnJ0YWlsKTsKKwkJCU5NX0ZBSUxfT04o Y3VyIDwgaGVhZCB8fCBjdXIgPiBrcmluZy0+cnRhaWwpOwogCQl9IGVsc2UgeyAvKiBoZWFkID49 IHJoZWFkICovCiAJCQkvKiBjdXIgbXVzdCBiZSBvdXRzaWRlIHJ0YWlsLi5oZWFkICovCi0JCQlO TV9BU1NFUlQoY3VyID4ga3JpbmctPnJ0YWlsICYmIGN1ciA8IGhlYWQpOworCQkJTk1fRkFJTF9P TihjdXIgPiBrcmluZy0+cnRhaWwgJiYgY3VyIDwgaGVhZCk7CiAJCX0KIAl9CiAJaWYgKHJpbmct PnRhaWwgIT0ga3JpbmctPnJ0YWlsKSB7Ci0JCVJEKDUsICJ0YWlsIG92ZXJ3cml0dGVuIHdhcyAl ZCBuZWVkICVkIiwKKwkJUkQoNSwgIiVzIHRhaWwgb3ZlcndyaXR0ZW4gd2FzICVkIG5lZWQgJWQi LCBrcmluZy0+bmFtZSwKIAkJCXJpbmctPnRhaWwsIGtyaW5nLT5ydGFpbCk7CiAJCXJpbmctPnRh aWwgPSBrcmluZy0+cnRhaWw7CiAJfQogCWtyaW5nLT5yaGVhZCA9IGhlYWQ7CiAJa3JpbmctPnJj dXIgPSBjdXI7CiAJcmV0dXJuIGhlYWQ7Ci0KLWVycm9yOgotCVJEKDUsICIlcyBrcmluZyBlcnJv cjogaGVhZCAlZCBjdXIgJWQgdGFpbCAlZCByaGVhZCAlZCByY3VyICVkIHJ0YWlsICVkIGh3Y3Vy ICVkIGh3dGFpbCAlZCIsCi0JCWtyaW5nLT5uYW1lLAotCQloZWFkLCBjdXIsIHJpbmctPnRhaWws Ci0JCWtyaW5nLT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ydGFpbCwKLQkJa3JpbmctPm5y X2h3Y3VyLCBrcmluZy0+bnJfaHd0YWlsKTsKLQlyZXR1cm4gbjsKLSN1bmRlZiBOTV9BU1NFUlQK IH0KIAogCkBAIC0xNTI1LDEwICsxNTc2LDkgQEAKICAqIGh3Y3VyIGFuZCBod3RhaWwgYXJlIHJl bGlhYmxlLgogICoKICAqLwotc3RhdGljIHVfaW50Ci1ubV9yeHN5bmNfcHJvbG9ndWUoc3RydWN0 IG5ldG1hcF9rcmluZyAqa3JpbmcpCit1X2ludAorbm1fcnhzeW5jX3Byb2xvZ3VlKHN0cnVjdCBu ZXRtYXBfa3JpbmcgKmtyaW5nLCBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcpCiB7Ci0Jc3RydWN0 IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CiAJdWludDMyX3QgY29uc3QgbiA9IGty aW5nLT5ua3JfbnVtX3Nsb3RzOwogCXVpbnQzMl90IGhlYWQsIGN1cjsKIApAQCAtMTU0NiwzMCAr MTU5NiwyNCBAQAogCWN1ciA9IGtyaW5nLT5yY3VyID0gcmluZy0+Y3VyOwkvKiByZWFkIG9ubHkg b25jZSAqLwogCWhlYWQgPSBrcmluZy0+cmhlYWQgPSByaW5nLT5oZWFkOwkvKiByZWFkIG9ubHkg b25jZSAqLwogI2lmIDEgLyoga2VybmVsIHNhbml0eSBjaGVja3MgKi8KLQlpZiAoa3JpbmctPm5y X2h3Y3VyID49IG4gfHwga3JpbmctPm5yX2h3dGFpbCA+PSBuKQotCQlnb3RvIGVycm9yOworCU5N X0ZBSUxfT04oa3JpbmctPm5yX2h3Y3VyID49IG4gfHwga3JpbmctPm5yX2h3dGFpbCA+PSBuKTsK ICNlbmRpZiAvKiBrZXJuZWwgc2FuaXR5IGNoZWNrcyAqLwogCS8qIHVzZXIgc2FuaXR5IGNoZWNr cyAqLwogCWlmIChrcmluZy0+bnJfaHd0YWlsID49IGtyaW5nLT5ucl9od2N1cikgewogCQkvKiB3 YW50IGh3Y3VyIDw9IHJoZWFkIDw9IGh3dGFpbCAqLwotCQlpZiAoaGVhZCA8IGtyaW5nLT5ucl9o d2N1ciB8fCBoZWFkID4ga3JpbmctPm5yX2h3dGFpbCkKLQkJCWdvdG8gZXJyb3I7CisJCU5NX0ZB SUxfT04oaGVhZCA8IGtyaW5nLT5ucl9od2N1ciB8fCBoZWFkID4ga3JpbmctPm5yX2h3dGFpbCk7 CiAJCS8qIGFuZCBhbHNvIHJoZWFkIDw9IHJjdXIgPD0gaHd0YWlsICovCi0JCWlmIChjdXIgPCBo ZWFkIHx8IGN1ciA+IGtyaW5nLT5ucl9od3RhaWwpCi0JCQlnb3RvIGVycm9yOworCQlOTV9GQUlM X09OKGN1ciA8IGhlYWQgfHwgY3VyID4ga3JpbmctPm5yX2h3dGFpbCk7CiAJfSBlbHNlIHsKIAkJ Lyogd2UgbmVlZCByaGVhZCBvdXRzaWRlIGh3dGFpbC4uaHdjdXIgKi8KLQkJaWYgKGhlYWQgPCBr cmluZy0+bnJfaHdjdXIgJiYgaGVhZCA+IGtyaW5nLT5ucl9od3RhaWwpCi0JCQlnb3RvIGVycm9y OworCQlOTV9GQUlMX09OKGhlYWQgPCBrcmluZy0+bnJfaHdjdXIgJiYgaGVhZCA+IGtyaW5nLT5u cl9od3RhaWwpOwogCQkvKiB0d28gY2FzZXMgbm93OiBoZWFkIDw9IGh3dGFpbCBvciBoZWFkID49 IGh3Y3VyICAqLwogCQlpZiAoaGVhZCA8PSBrcmluZy0+bnJfaHd0YWlsKSB7CiAJCQkvKiB3YW50 IGhlYWQgPD0gY3VyIDw9IGh3dGFpbCAqLwotCQkJaWYgKGN1ciA8IGhlYWQgfHwgY3VyID4ga3Jp bmctPm5yX2h3dGFpbCkKLQkJCQlnb3RvIGVycm9yOworCQkJTk1fRkFJTF9PTihjdXIgPCBoZWFk IHx8IGN1ciA+IGtyaW5nLT5ucl9od3RhaWwpOwogCQl9IGVsc2UgewogCQkJLyogY3VyIG11c3Qg YmUgb3V0c2lkZSBod3RhaWwuLmhlYWQgKi8KLQkJCWlmIChjdXIgPCBoZWFkICYmIGN1ciA+IGty aW5nLT5ucl9od3RhaWwpCi0JCQkJZ290byBlcnJvcjsKKwkJCU5NX0ZBSUxfT04oY3VyIDwgaGVh ZCAmJiBjdXIgPiBrcmluZy0+bnJfaHd0YWlsKTsKIAkJfQogCX0KIAlpZiAocmluZy0+dGFpbCAh PSBrcmluZy0+cnRhaWwpIHsKQEAgLTE1NzksMTMgKzE2MjMsNiBAQAogCQlyaW5nLT50YWlsID0g a3JpbmctPnJ0YWlsOwogCX0KIAlyZXR1cm4gaGVhZDsKLQotZXJyb3I6Ci0JUkQoNSwgImtyaW5n IGVycm9yOiBod2N1ciAlZCByY3VyICVkIGh3dGFpbCAlZCBoZWFkICVkIGN1ciAlZCB0YWlsICVk IiwKLQkJa3JpbmctPm5yX2h3Y3VyLAotCQlrcmluZy0+cmN1ciwga3JpbmctPm5yX2h3dGFpbCwK LQkJa3JpbmctPnJoZWFkLCBrcmluZy0+cmN1ciwgcmluZy0+dGFpbCk7Ci0JcmV0dXJuIG47CiB9 CiAKIApAQCAtMTY1OSw2ICsxNjk2LDcgQEAKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0g cHJpdi0+bnBfbmE7CiAJdV9pbnQgaiwgaSA9IHJpbmdpZCAmIE5FVE1BUF9SSU5HX01BU0s7CiAJ dV9pbnQgcmVnID0gZmxhZ3MgJiBOUl9SRUdfTUFTSzsKKwlpbnQgZXhjbHVkZWRfZGlyZWN0aW9u W10gPSB7IE5SX1RYX1JJTkdTX09OTFksIE5SX1JYX1JJTkdTX09OTFkgfTsKIAllbnVtIHR4cngg dDsKIAogCWlmIChyZWcgPT0gTlJfUkVHX0RFRkFVTFQpIHsKQEAgLTE2NzIsNDggKzE3MTAsNTgg QEAKIAkJfQogCQlEKCJkZXByZWNhdGVkIEFQSSwgb2xkIHJpbmdpZCAweCV4IC0+IHJpbmdpZCAl eCByZWcgJWQiLCByaW5naWQsIGksIHJlZyk7CiAJfQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSBO Ul9SRUdfQUxMX05JQzoKLQljYXNlIE5SX1JFR19QSVBFX01BU1RFUjoKLQljYXNlIE5SX1JFR19Q SVBFX1NMQVZFOgotCQlmb3JfcnhfdHgodCkgeworCisJaWYgKChmbGFncyAmIE5SX1BUTkVUTUFQ X0hPU1QpICYmIChyZWcgIT0gTlJfUkVHX0FMTF9OSUMgfHwKKwkJCWZsYWdzICYgKE5SX1JYX1JJ TkdTX09OTFl8TlJfVFhfUklOR1NfT05MWSkpKSB7CisJCUQoIkVycm9yOiBvbmx5IE5SX1JFR19B TExfTklDIHN1cHBvcnRlZCB3aXRoIG5ldG1hcCBwYXNzdGhyb3VnaCIpOworCQlyZXR1cm4gRUlO VkFMOworCX0KKworCWZvcl9yeF90eCh0KSB7CisJCWlmIChmbGFncyAmIGV4Y2x1ZGVkX2RpcmVj dGlvblt0XSkgeworCQkJcHJpdi0+bnBfcWZpcnN0W3RdID0gcHJpdi0+bnBfcWxhc3RbdF0gPSAw OworCQkJY29udGludWU7CisJCX0KKwkJc3dpdGNoIChyZWcpIHsKKwkJY2FzZSBOUl9SRUdfQUxM X05JQzoKKwkJY2FzZSBOUl9SRUdfUElQRV9NQVNURVI6CisJCWNhc2UgTlJfUkVHX1BJUEVfU0xB VkU6CiAJCQlwcml2LT5ucF9xZmlyc3RbdF0gPSAwOwogCQkJcHJpdi0+bnBfcWxhc3RbdF0gPSBu bWFfZ2V0X25yaW5ncyhuYSwgdCk7Ci0JCX0KLQkJTkQoIiVzICVkICVkIiwgIkFMTC9QSVBFIiwK LQkJCXByaXYtPm5wX3FmaXJzdFtOUl9SWF0sIHByaXYtPm5wX3FsYXN0W05SX1JYXSk7Ci0JCWJy ZWFrOwotCWNhc2UgTlJfUkVHX1NXOgotCWNhc2UgTlJfUkVHX05JQ19TVzoKLQkJaWYgKCEobmEt Pm5hX2ZsYWdzICYgTkFGX0hPU1RfUklOR1MpKSB7Ci0JCQlEKCJob3N0IHJpbmdzIG5vdCBzdXBw b3J0ZWQiKTsKLQkJCXJldHVybiBFSU5WQUw7Ci0JCX0KLQkJZm9yX3J4X3R4KHQpIHsKKwkJCU5E KCJBTEwvUElQRTogJXMgJWQgJWQiLCBubV90eHJ4MnN0cih0KSwKKwkJCQlwcml2LT5ucF9xZmly c3RbdF0sIHByaXYtPm5wX3FsYXN0W3RdKTsKKwkJCWJyZWFrOworCQljYXNlIE5SX1JFR19TVzoK KwkJY2FzZSBOUl9SRUdfTklDX1NXOgorCQkJaWYgKCEobmEtPm5hX2ZsYWdzICYgTkFGX0hPU1Rf UklOR1MpKSB7CisJCQkJRCgiaG9zdCByaW5ncyBub3Qgc3VwcG9ydGVkIik7CisJCQkJcmV0dXJu IEVJTlZBTDsKKwkJCX0KIAkJCXByaXYtPm5wX3FmaXJzdFt0XSA9IChyZWcgPT0gTlJfUkVHX1NX ID8KIAkJCQlubWFfZ2V0X25yaW5ncyhuYSwgdCkgOiAwKTsKIAkJCXByaXYtPm5wX3FsYXN0W3Rd ID0gbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsKLQkJfQotCQlORCgiJXMgJWQgJWQiLCByZWcg PT0gTlJfUkVHX1NXID8gIlNXIiA6ICJOSUMrU1ciLAotCQkJcHJpdi0+bnBfcWZpcnN0W05SX1JY XSwgcHJpdi0+bnBfcWxhc3RbTlJfUlhdKTsKLQkJYnJlYWs7Ci0JY2FzZSBOUl9SRUdfT05FX05J QzoKLQkJaWYgKGkgPj0gbmEtPm51bV90eF9yaW5ncyAmJiBpID49IG5hLT5udW1fcnhfcmluZ3Mp IHsKLQkJCUQoImludmFsaWQgcmluZyBpZCAlZCIsIGkpOwotCQkJcmV0dXJuIEVJTlZBTDsKLQkJ fQotCQlmb3JfcnhfdHgodCkgeworCQkJTkQoIiVzOiAlcyAlZCAlZCIsIHJlZyA9PSBOUl9SRUdf U1cgPyAiU1ciIDogIk5JQytTVyIsCisJCQkJbm1fdHhyeDJzdHIodCksCisJCQkJcHJpdi0+bnBf cWZpcnN0W3RdLCBwcml2LT5ucF9xbGFzdFt0XSk7CisJCQlicmVhazsKKwkJY2FzZSBOUl9SRUdf T05FX05JQzoKKwkJCWlmIChpID49IG5hLT5udW1fdHhfcmluZ3MgJiYgaSA+PSBuYS0+bnVtX3J4 X3JpbmdzKSB7CisJCQkJRCgiaW52YWxpZCByaW5nIGlkICVkIiwgaSk7CisJCQkJcmV0dXJuIEVJ TlZBTDsKKwkJCX0KIAkJCS8qIGlmIG5vdCBlbm91Z2ggcmluZ3MsIHVzZSB0aGUgZmlyc3Qgb25l ICovCiAJCQlqID0gaTsKIAkJCWlmIChqID49IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSkKIAkJCQlq ID0gMDsKIAkJCXByaXYtPm5wX3FmaXJzdFt0XSA9IGo7CiAJCQlwcml2LT5ucF9xbGFzdFt0XSA9 IGogKyAxOworCQkJTkQoIk9ORV9OSUM6ICVzICVkICVkIiwgbm1fdHhyeDJzdHIodCksCisJCQkJ cHJpdi0+bnBfcWZpcnN0W3RdLCBwcml2LT5ucF9xbGFzdFt0XSk7CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCUQoImludmFsaWQgcmVnaWYgdHlwZSAlZCIsIHJlZyk7CisJCQlyZXR1cm4gRUlO VkFMOwogCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUQoImludmFsaWQgcmVnaWYgdHlwZSAl ZCIsIHJlZyk7Ci0JCXJldHVybiBFSU5WQUw7CiAJfQogCXByaXYtPm5wX2ZsYWdzID0gKGZsYWdz ICYgfk5SX1JFR19NQVNLKSB8IHJlZzsKIApAQCAtMTc3NiwxMSArMTgyNCwxMiBAQAogfQogCiAK LS8qIGNoZWNrIHRoYXQgdGhlIHJpbmdzIHdlIHdhbnQgdG8gYmluZCBhcmUgbm90IGV4Y2x1c2l2 ZWx5IG93bmVkIGJ5IGEgcHJldmlvdXMKLSAqIGJpbmQuICBJZiBleGNsdXNpdmUgb3duZXJzaGlw IGhhcyBiZWVuIHJlcXVlc3RlZCwgd2UgYWxzbyBtYXJrIHRoZSByaW5ncy4KKy8qIFNldCB0aGUg bnJfcGVuZGluZ19tb2RlIGZvciB0aGUgcmVxdWVzdGVkIHJpbmdzLgorICogSWYgcmVxdWVzdGVk LCBhbHNvIHRyeSB0byBnZXQgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcmluZ3MsIHByb3ZpZGVk CisgKiB0aGUgcmluZ3Mgd2Ugd2FudCB0byBiaW5kIGFyZSBub3QgZXhjbHVzaXZlbHkgb3duZWQg YnkgYSBwcmV2aW91cyBiaW5kLgogICovCiBzdGF0aWMgaW50Ci1uZXRtYXBfZ2V0X2V4Y2x1c2l2 ZShzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdikKK25ldG1hcF9rcmluZ3NfZ2V0KHN0cnVjdCBu ZXRtYXBfcHJpdl9kICpwcml2KQogewogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBwcml2 LT5ucF9uYTsKIAl1X2ludCBpOwpAQCAtMTgxMSwxNiArMTg2MCwxNiBAQAogCQl9CiAJfQogCi0J Lyogc2Vjb25kIHJvdW5kOiBpbmNyZW1lbnQgdXNhZ2UgY291bmQgYW5kIHBvc3NpYmx5Ci0JICog bWFyayBhcyBleGNsdXNpdmUKKwkvKiBzZWNvbmQgcm91bmQ6IGluY3JlbWVudCB1c2FnZSBjb3Vu dCAocG9zc2libHkgbWFya2luZyB0aGVtCisJICogYXMgZXhjbHVzaXZlKSBhbmQgc2V0IHRoZSBu cl9wZW5kaW5nX21vZGUKIAkgKi8KLQogCWZvcl9yeF90eCh0KSB7CiAJCWZvciAoaSA9IHByaXYt Pm5wX3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBpKyspIHsKIAkJCWtyaW5nID0g Jk5NUihuYSwgdClbaV07CiAJCQlrcmluZy0+dXNlcnMrKzsKIAkJCWlmIChleGNsKQogCQkJCWty aW5nLT5ucl9rZmxhZ3MgfD0gTktSX0VYQ0xVU0lWRTsKKwkgICAgICAgICAgICAgICAga3Jpbmct Pm5yX3BlbmRpbmdfbW9kZSA9IE5LUl9ORVRNQVBfT047CiAJCX0KIAl9CiAKQEAgLTE4MjgsOSAr MTg3NywxMSBAQAogCiB9CiAKLS8qIHVuZG8gbmV0bWFwX2dldF9vd25lcnNoaXAoKSAqLworLyog VW5kbyBuZXRtYXBfa3JpbmdzX2dldCgpLiBUaGlzIGlzIGRvbmUgYnkgY2xlYXJpbmcgdGhlIGV4 Y2x1c2l2ZSBtb2RlCisgKiBpZiB3YXMgYXNrZWQgb24gcmVnaWYsIGFuZCB1bnNldCB0aGUgbnJf cGVuZGluZ19tb2RlIGlmIHdlIGFyZSB0aGUKKyAqIGxhc3QgdXNlcnMgb2YgdGhlIGludm9sdmVk IHJpbmdzLiAqLwogc3RhdGljIHZvaWQKLW5ldG1hcF9yZWxfZXhjbHVzaXZlKHN0cnVjdCBuZXRt YXBfcHJpdl9kICpwcml2KQorbmV0bWFwX2tyaW5nc19wdXQoc3RydWN0IG5ldG1hcF9wcml2X2Qg KnByaXYpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IHByaXYtPm5wX25hOwogCXVf aW50IGk7CkBAIC0xODUyLDYgKzE5MDMsOCBAQAogCQkJaWYgKGV4Y2wpCiAJCQkJa3JpbmctPm5y X2tmbGFncyAmPSB+TktSX0VYQ0xVU0lWRTsKIAkJCWtyaW5nLT51c2Vycy0tOworCQkJaWYgKGty aW5nLT51c2VycyA9PSAwKQorCQkJCWtyaW5nLT5ucl9wZW5kaW5nX21vZGUgPSBOS1JfTkVUTUFQ X09GRjsKIAkJfQogCX0KIH0KQEAgLTE4OTksOSArMTk1Miw4IEBACiAgKiAocHV0IHRoZSBhZGFw dGVyIGluIG5ldG1hcCBtb2RlKQogICoKICAqIAlUaGlzIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxv d2luZzoKLSAqIAkoWFhYIHRoZXNlIHNob3VsZCBiZSBlaXRoZXIgYWxsICpfcmVnaXN0ZXIgb3Ig YWxsICpfcmVnIDIwMTQtMDMtMTUpCiAgKgotICogCSogbmV0bWFwX2h3X3JlZ2lzdGVyCQkJCSho dyBwb3J0cykKKyAqIAkqIG5ldG1hcF9od19yZWcJCQkJICAgICAgICAoaHcgcG9ydHMpCiAgKiAJ CWNoZWNrcyB0aGF0IHRoZSBpZnAgaXMgc3RpbGwgdGhlcmUsIHRoZW4gY2FsbHMKICAqIAkJdGhl IGhhcmR3YXJlIHNwZWNpZmljIGNhbGxiYWNrOwogICoKQEAgLTE5MTksNyArMTk3MSw3IEBACiAg KgkJaW50ZXJjZXB0IHRoZSBzeW5jIGNhbGxiYWNrcyBvZiB0aGUgbW9uaXRvcmVkCiAgKgkJcmlu Z3MKICAqCi0gKgkqIG5ldG1hcF9id3JhcF9yZWdpc3RlcgkJCQkoYndyYXBzKQorICoJKiBuZXRt YXBfYndyYXBfcmVnCQkJCShid3JhcHMpCiAgKgkJY3Jvc3MtbGluayB0aGUgYndyYXAgYW5kIGh3 bmEgcmluZ3MsCiAgKgkJZm9yd2FyZCB0aGUgcmVxdWVzdCB0byB0aGUgaHduYSwgb3ZlcnJpZGUK ICAqCQl0aGUgaHduYSBub3RpZnkgY2FsbGJhY2sgKHRvIGdldCB0aGUgZnJhbWVzCkBAIC0xOTQ4 LDcgKzIwMDAsNyBAQAogCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKSB7CiAJCS8qCiAJCSAqIElm IHRoaXMgaXMgdGhlIGZpcnN0IHJlZ2lzdHJhdGlvbiBvZiB0aGUgYWRhcHRlciwKLQkJICogYWxz byBjcmVhdGUgdGhlIG5ldG1hcCByaW5ncyBhbmQgdGhlaXIgaW4ta2VybmVsIHZpZXcsCisJCSAq IGNyZWF0ZSB0aGUgIGluLWtlcm5lbCB2aWV3IG9mIHRoZSBuZXRtYXAgcmluZ3MsCiAJCSAqIHRo ZSBuZXRtYXAga3JpbmdzLgogCQkgKi8KIApAQCAtMTk2MCwzOSArMjAxMiw0OCBAQAogCQlpZiAo ZXJyb3IpCiAJCQlnb3RvIGVycl9kcm9wX21lbTsKIAotCQkvKiBjcmVhdGUgYWxsIG1pc3Npbmcg bmV0bWFwIHJpbmdzICovCi0JCWVycm9yID0gbmV0bWFwX21lbV9yaW5nc19jcmVhdGUobmEpOwot CQlpZiAoZXJyb3IpCi0JCQlnb3RvIGVycl9kZWxfa3JpbmdzOwogCX0KIAotCS8qIG5vdyB0aGUg a3JpbmcgbXVzdCBleGlzdCBhbmQgd2UgY2FuIGNoZWNrIHdoZXRoZXIgc29tZQotCSAqIHByZXZp b3VzIGJpbmQgaGFzIGV4Y2x1c2l2ZSBvd25lcnNoaXAgb24gdGhlbQorCS8qIG5vdyB0aGUga3Jp bmdzIG11c3QgZXhpc3QgYW5kIHdlIGNhbiBjaGVjayB3aGV0aGVyIHNvbWUKKwkgKiBwcmV2aW91 cyBiaW5kIGhhcyBleGNsdXNpdmUgb3duZXJzaGlwIG9uIHRoZW0sIGFuZCBzZXQKKwkgKiBucl9w ZW5kaW5nX21vZGUKIAkgKi8KLQllcnJvciA9IG5ldG1hcF9nZXRfZXhjbHVzaXZlKHByaXYpOwor CWVycm9yID0gbmV0bWFwX2tyaW5nc19nZXQocHJpdik7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVy cl9kZWxfcmluZ3M7CisJCWdvdG8gZXJyX2RlbF9rcmluZ3M7CisKKwkvKiBjcmVhdGUgYWxsIG5l ZWRlZCBtaXNzaW5nIG5ldG1hcCByaW5ncyAqLworCWVycm9yID0gbmV0bWFwX21lbV9yaW5nc19j cmVhdGUobmEpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfcmVsX2V4Y2w7CiAKIAkvKiBpbiBh bGwgY2FzZXMsIGNyZWF0ZSBhIG5ldyBuZXRtYXAgaWYgKi8KIAluaWZwID0gbmV0bWFwX21lbV9p Zl9uZXcobmEpOwogCWlmIChuaWZwID09IE5VTEwpIHsKIAkJZXJyb3IgPSBFTk9NRU07Ci0JCWdv dG8gZXJyX3JlbF9leGNsOworCQlnb3RvIGVycl9kZWxfcmluZ3M7CiAJfQogCi0JbmEtPmFjdGl2 ZV9mZHMrKzsKLQlpZiAoIW5tX25ldG1hcF9vbihuYSkpIHsKLQkJLyogTmV0bWFwIG5vdCBhY3Rp dmUsIHNldCB0aGUgY2FyZCBpbiBuZXRtYXAgbW9kZQotCQkgKiBhbmQgbWFrZSBpdCB1c2UgdGhl IHNoYXJlZCBidWZmZXJzLgotCQkgKi8KKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgewogCQkv KiBjYWNoZSB0aGUgYWxsb2NhdG9yIGluZm8gaW4gdGhlIG5hICovCi0JCW5ldG1hcF9tZW1fZ2V0 X2x1dChuYS0+bm1fbWVtLCAmbmEtPm5hX2x1dCk7Ci0JCU5EKCIlcC0+bmFfbHV0ID09ICVwIiwg bmEsIG5hLT5uYV9sdXQubHV0KTsKLQkJZXJyb3IgPSBuYS0+bm1fcmVnaXN0ZXIobmEsIDEpOyAv KiBtb2RlIG9uICovCi0JCWlmIChlcnJvcikgCisJCWVycm9yID0gbmV0bWFwX21lbV9nZXRfbHV0 KG5hLT5ubV9tZW0sICZuYS0+bmFfbHV0KTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBlcnJfZGVs X2lmOworCQlORCgibHV0ICVwIGJ1ZnMgJXUgc2l6ZSAldSIsIG5hLT5uYV9sdXQubHV0LCBuYS0+ bmFfbHV0Lm9ianRvdGFsLAorCQkJCQkgICAgbmEtPm5hX2x1dC5vYmpzaXplKTsKKwl9CisKKwlp ZiAobm1fa3JpbmdfcGVuZGluZyhwcml2KSkgeworCQkvKiBTb21lIGtyaW5nIGlzIHN3aXRjaGlu ZyBtb2RlLCB0ZWxsIHRoZSBhZGFwdGVyIHRvCisJCSAqIHJlYWN0IG9uIHRoaXMuICovCisJCWVy cm9yID0gbmEtPm5tX3JlZ2lzdGVyKG5hLCAxKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBlcnJf cHV0X2x1dDsKIAl9CiAKKwkvKiBDb21taXQgdGhlIHJlZmVyZW5jZS4gKi8KKwluYS0+YWN0aXZl X2ZkcysrOworCiAJLyoKIAkgKiBhZHZlcnRpc2UgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5 IGJ5IHNldHRpbmcgbnBfbmlmcC4KIAkgKiBUaGUgYmFycmllciBpcyBuZWVkZWQgYmVjYXVzZSBy ZWFkZXJzIChwb2xsLCAqU1lOQyBhbmQgbW1hcCkKQEAgLTIwMDMsMTUgKzIwNjQsMTUgQEAKIAog CXJldHVybiAwOwogCitlcnJfcHV0X2x1dDoKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkKKwkJ bWVtc2V0KCZuYS0+bmFfbHV0LCAwLCBzaXplb2YobmEtPm5hX2x1dCkpOwogZXJyX2RlbF9pZjoK LQltZW1zZXQoJm5hLT5uYV9sdXQsIDAsIHNpemVvZihuYS0+bmFfbHV0KSk7Ci0JbmEtPmFjdGl2 ZV9mZHMtLTsKIAluZXRtYXBfbWVtX2lmX2RlbGV0ZShuYSwgbmlmcCk7CiBlcnJfcmVsX2V4Y2w6 Ci0JbmV0bWFwX3JlbF9leGNsdXNpdmUocHJpdik7CisJbmV0bWFwX2tyaW5nc19wdXQocHJpdik7 CiBlcnJfZGVsX3JpbmdzOgotCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQotCQluZXRtYXBfbWVt X3JpbmdzX2RlbGV0ZShuYSk7CisJbmV0bWFwX21lbV9yaW5nc19kZWxldGUobmEpOwogZXJyX2Rl bF9rcmluZ3M6CiAJaWYgKG5hLT5hY3RpdmVfZmRzID09IDApCiAJCW5hLT5ubV9rcmluZ3NfZGVs ZXRlKG5hKTsKQEAgLTIwMjQsNDAgKzIwODUsNDUgQEAKIAogCiAvKgotICogdXBkYXRlIGtyaW5n IGFuZCByaW5nIGF0IHRoZSBlbmQgb2YgdHhzeW5jLgorICogdXBkYXRlIGtyaW5nIGFuZCByaW5n IGF0IHRoZSBlbmQgb2YgcnhzeW5jL3R4c3luYy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1u bV90eHN5bmNfZmluYWxpemUoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCitubV9zeW5jX2Zp bmFsaXplKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQogewotCS8qIHVwZGF0ZSByaW5nIHRh aWwgdG8gd2hhdCB0aGUga2VybmVsIGtub3dzICovCisJLyoKKwkgKiBVcGRhdGUgcmluZyB0YWls IHRvIHdoYXQgdGhlIGtlcm5lbCBrbm93cworCSAqIEFmdGVyIHR4c3luYzogaGVhZC9yaGVhZC9o d2N1ciBtaWdodCBiZSBiZWhpbmQgY3VyL3JjdXIKKwkgKiBpZiBubyBjYXJyaWVyLgorCSAqLwog CWtyaW5nLT5yaW5nLT50YWlsID0ga3JpbmctPnJ0YWlsID0ga3JpbmctPm5yX2h3dGFpbDsKIAot CS8qIG5vdGUsIGhlYWQvcmhlYWQvaHdjdXIgbWlnaHQgYmUgYmVoaW5kIGN1ci9yY3VyCi0JICog aWYgbm8gY2FycmllcgotCSAqLwogCU5EKDUsICIlcyBub3cgaHdjdXIgJWQgaHd0YWlsICVkIGhl YWQgJWQgY3VyICVkIHRhaWwgJWQiLAogCQlrcmluZy0+bmFtZSwga3JpbmctPm5yX2h3Y3VyLCBr cmluZy0+bnJfaHd0YWlsLAogCQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmluZy0+cnRh aWwpOwogfQogCi0KLS8qCi0gKiB1cGRhdGUga3JpbmcgYW5kIHJpbmcgYXQgdGhlIGVuZCBvZiBy eHN5bmMKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1ubV9yeHN5bmNfZmluYWxpemUoc3RydWN0 IG5ldG1hcF9rcmluZyAqa3JpbmcpCitzdGF0aWMgaW50CitubV9vdmVycmlkZV9tZW0oc3RydWN0 IG5ldG1hcF9hZGFwdGVyICpuYSwgbm1fbWVtaWRfdCBpZCkKIHsKLQkvKiB0ZWxsIHVzZXJzcGFj ZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIG5ldyBwYWNrZXRzICovCi0JLy9zdHJ1Y3QgbmV0bWFwX3Jp bmcgKnJpbmcgPSBrcmluZy0+cmluZzsKLQlORCgiaGVhZCAlZCBjdXIgJWQgdGFpbCAlZCAtPiAl ZCIsIHJpbmctPmhlYWQsIHJpbmctPmN1ciwgcmluZy0+dGFpbCwKLQkJa3JpbmctPm5yX2h3dGFp bCk7Ci0Ja3JpbmctPnJpbmctPnRhaWwgPSBrcmluZy0+cnRhaWwgPSBrcmluZy0+bnJfaHd0YWls OwotCS8qIG1ha2UgYSBjb3B5IG9mIHRoZSBzdGF0ZSBmb3IgbmV4dCByb3VuZCAqLwotCWtyaW5n LT5yaGVhZCA9IGtyaW5nLT5yaW5nLT5oZWFkOwotCWtyaW5nLT5yY3VyID0ga3JpbmctPnJpbmct PmN1cjsKLX0KKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQ7CisKKwlpZiAoaWQgPT0gMCB8fCBu ZXRtYXBfbWVtX2dldF9pZChuYS0+bm1fbWVtKSA9PSBpZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAo bmEtPm5hX2ZsYWdzICYgTkFGX01FTV9PV05FUikKKwkJcmV0dXJuIEVJTlZBTDsKIAorCWlmIChu YS0+YWN0aXZlX2ZkcyA+IDApCisJCXJldHVybiBFQlVTWTsKIAorCW5tZCA9IG5ldG1hcF9tZW1f ZmluZChpZCk7CisJaWYgKG5tZCA9PSBOVUxMKQorCQlyZXR1cm4gRU5PRU5UOworCisJbmV0bWFw X21lbV9wdXQobmEtPm5tX21lbSk7CisJbmEtPm5tX21lbSA9IG5tZDsKKwlyZXR1cm4gMDsKK30K IAogLyoKICAqIGlvY3RsKDIpIHN1cHBvcnQgZm9yIHRoZSAibmV0bWFwIiBkZXZpY2UuCkBAIC0y MDcyLDIxICsyMTM4LDE3IEBACiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndp c2UuCiAgKi8KIGludAotbmV0bWFwX2lvY3RsKHN0cnVjdCBjZGV2ICpkZXYsIHVfbG9uZyBjbWQs IGNhZGRyX3QgZGF0YSwKLQlpbnQgZmZsYWcsIHN0cnVjdCB0aHJlYWQgKnRkKQorbmV0bWFwX2lv Y3RsKHN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2LCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEs IHN0cnVjdCB0aHJlYWQgKnRkKQogewotCXN0cnVjdCBuZXRtYXBfcHJpdl9kICpwcml2ID0gTlVM TDsKIAlzdHJ1Y3Qgbm1yZXEgKm5tciA9IChzdHJ1Y3Qgbm1yZXEgKikgZGF0YTsKIAlzdHJ1Y3Qg bmV0bWFwX2FkYXB0ZXIgKm5hID0gTlVMTDsKLQlpbnQgZXJyb3I7CisJc3RydWN0IGlmbmV0ICpp ZnAgPSBOVUxMOworCWludCBlcnJvciA9IDA7CiAJdV9pbnQgaSwgcWZpcnN0LCBxbGFzdDsKIAlz dHJ1Y3QgbmV0bWFwX2lmICpuaWZwOwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nczsKIAll bnVtIHR4cnggdDsKIAotCSh2b2lkKWRldjsJLyogVU5VU0VEICovCi0JKHZvaWQpZmZsYWc7CS8q IFVOVVNFRCAqLwotCiAJaWYgKGNtZCA9PSBOSU9DR0lORk8gfHwgY21kID09IE5JT0NSRUdJRikg ewogCQkvKiB0cnVuY2F0ZSBuYW1lICovCiAJCW5tci0+bnJfbmFtZVtzaXplb2Yobm1yLT5ucl9u YW1lKSAtIDFdID0gJ1wwJzsKQEAgLTIxMDEsMTUgKzIxNjMsNiBAQAogCQkJcmV0dXJuIEVJTlZB TDsKIAkJfQogCX0KLQlDVVJWTkVUX1NFVChURF9UT19WTkVUKHRkKSk7Ci0KLQllcnJvciA9IGRl dmZzX2dldF9jZGV2cHJpdigodm9pZCAqKikmcHJpdik7Ci0JaWYgKGVycm9yKSB7Ci0JCUNVUlZO RVRfUkVTVE9SRSgpOwotCQkvKiBYWFggRU5PRU5UIHNob3VsZCBiZSBpbXBvc3NpYmxlLCBzaW5j ZSB0aGUgcHJpdgotCQkgKiBpcyBub3cgY3JlYXRlZCBpbiB0aGUgb3BlbiAqLwotCQlyZXR1cm4g KGVycm9yID09IEVOT0VOVCA/IEVOWElPIDogZXJyb3IpOwotCX0KIAogCXN3aXRjaCAoY21kKSB7 CiAJY2FzZSBOSU9DR0lORk86CQkvKiByZXR1cm4gY2FwYWJpbGl0aWVzIGV0YyAqLwpAQCAtMjEy NSwxMyArMjE3OCwyMyBAQAogCQkJdV9pbnQgbWVtZmxhZ3M7CiAKIAkJCWlmIChubXItPm5yX25h bWVbMF0gIT0gJ1wwJykgeworCiAJCQkJLyogZ2V0IGEgcmVmY291bnQgKi8KLQkJCQllcnJvciA9 IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsIDEgLyogY3JlYXRlICovKTsKLQkJCQlpZiAoZXJyb3Ip CisJCQkJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKG5tciwgJm5hLCAmaWZwLCAxIC8qIGNyZWF0ZSAq Lyk7CisJCQkJaWYgKGVycm9yKSB7CisJCQkJCW5hID0gTlVMTDsKKwkJCQkJaWZwID0gTlVMTDsK IAkJCQkJYnJlYWs7CisJCQkJfQogCQkJCW5tZCA9IG5hLT5ubV9tZW07IC8qIGdldCBtZW1vcnkg YWxsb2NhdG9yICovCiAJCQl9CiAKKwkJCWVycm9yID0gbm1fb3ZlcnJpZGVfbWVtKG5hLCBubXIt Pm5yX2FyZzIpOworCQkJaWYgKGVycm9yKSB7CisJCQkJbmV0bWFwX3VuZ2V0X25hKG5hLCBpZnAp OworCQkJCWJyZWFrOworCQkJfQorCiAJCQllcnJvciA9IG5ldG1hcF9tZW1fZ2V0X2luZm8obm1k LCAmbm1yLT5ucl9tZW1zaXplLCAmbWVtZmxhZ3MsCiAJCQkJJm5tci0+bnJfYXJnMik7CiAJCQlp ZiAoZXJyb3IpCkBAIC0yMTQ1LDIwICsyMjA4LDQ3IEBACiAJCQlubXItPm5yX3R4X3JpbmdzID0g bmEtPm51bV90eF9yaW5nczsKIAkJCW5tci0+bnJfcnhfc2xvdHMgPSBuYS0+bnVtX3J4X2Rlc2M7 CiAJCQlubXItPm5yX3R4X3Nsb3RzID0gbmEtPm51bV90eF9kZXNjOwotCQkJbmV0bWFwX2FkYXB0 ZXJfcHV0KG5hKTsKIAkJfSB3aGlsZSAoMCk7CisJCW5ldG1hcF91bmdldF9uYShuYSwgaWZwKTsK IAkJTk1HX1VOTE9DSygpOwogCQlicmVhazsKIAogCWNhc2UgTklPQ1JFR0lGOgotCQkvKiBwb3Nz aWJseSBhdHRhY2gvZGV0YWNoIE5JQyBhbmQgVkFMRSBzd2l0Y2ggKi8KKwkJLyoKKwkJICogSWYg bm1yLT5ucl9jbWQgaXMgbm90IHplcm8sIHRoaXMgTklPQ1JFR0lGIGlzIG5vdCByZWFsbHkKKwkJ ICogYSByZWdpZiBvcGVyYXRpb24sIGJ1dCBhIGRpZmZlcmVudCBvbmUsIHNwZWNpZmllZCBieSB0 aGUKKwkJICogdmFsdWUgb2Ygbm1yLT5ucl9jbWQuCisJCSAqLwogCQlpID0gbm1yLT5ucl9jbWQ7 CiAJCWlmIChpID09IE5FVE1BUF9CREdfQVRUQUNIIHx8IGkgPT0gTkVUTUFQX0JER19ERVRBQ0gK IAkJCQl8fCBpID09IE5FVE1BUF9CREdfVk5FVF9IRFIKIAkJCQl8fCBpID09IE5FVE1BUF9CREdf TkVXSUYKLQkJCQl8fCBpID09IE5FVE1BUF9CREdfREVMSUYpIHsKKwkJCQl8fCBpID09IE5FVE1B UF9CREdfREVMSUYKKwkJCQl8fCBpID09IE5FVE1BUF9CREdfUE9MTElOR19PTgorCQkJCXx8IGkg PT0gTkVUTUFQX0JER19QT0xMSU5HX09GRikgeworCQkJLyogcG9zc2libHkgYXR0YWNoL2RldGFj aCBOSUMgYW5kIFZBTEUgc3dpdGNoICovCiAJCQllcnJvciA9IG5ldG1hcF9iZGdfY3RsKG5tciwg TlVMTCk7CiAJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpID09IE5FVE1BUF9QVF9IT1NUX0NSRUFU RSB8fCBpID09IE5FVE1BUF9QVF9IT1NUX0RFTEVURSkgeworCQkJLyogZm9yd2FyZCB0aGUgY29t bWFuZCB0byB0aGUgcHRuZXRtYXAgc3Vic3lzdGVtICovCisJCQllcnJvciA9IHB0bmV0bWFwX2N0 bChubXIsIHByaXYtPm5wX25hKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGkgPT0gTkVUTUFQ X1ZORVRfSERSX0dFVCkgeworCQkJLyogZ2V0IHZuZXQtaGVhZGVyIGxlbmd0aCBmb3IgdGhpcyBu ZXRtYXAgcG9ydCAqLworCQkJc3RydWN0IGlmbmV0ICppZnA7CisKKwkJCU5NR19MT0NLKCk7CisJ CQllcnJvciA9IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsICZpZnAsIDApOworCQkJaWYgKG5hICYm ICFlcnJvcikgeworCQkJCW5tci0+bnJfYXJnMSA9IG5hLT52aXJ0X2hkcl9sZW47CisJCQl9CisJ CQluZXRtYXBfdW5nZXRfbmEobmEsIGlmcCk7CisJCQlOTUdfVU5MT0NLKCk7CisJCQlicmVhazsK KwkJfSBlbHNlIGlmIChpID09IE5FVE1BUF9QT09MU19JTkZPX0dFVCkgeworCQkJLyogZ2V0IGlu Zm9ybWF0aW9uIGZyb20gdGhlIG1lbW9yeSBhbGxvY2F0b3IgKi8KKwkJCWVycm9yID0gbmV0bWFw X21lbV9wb29sc19pbmZvX2dldChubXIsIHByaXYtPm5wX25hKTsKKwkJCWJyZWFrOwogCQl9IGVs c2UgaWYgKGkgIT0gMCkgewogCQkJRCgibnJfY21kIG11c3QgYmUgMCBub3QgJWQiLCBpKTsKIAkJ CWVycm9yID0gRUlOVkFMOwpAQCAtMjE2OSwyMyArMjI1OSwzOCBAQAogCQlOTUdfTE9DSygpOwog CQlkbyB7CiAJCQl1X2ludCBtZW1mbGFnczsKKwkJCXN0cnVjdCBpZm5ldCAqaWZwOwogCiAJCQlp ZiAocHJpdi0+bnBfbmlmcCAhPSBOVUxMKSB7CS8qIHRocmVhZCBhbHJlYWR5IHJlZ2lzdGVyZWQg Ki8KIAkJCQllcnJvciA9IEVCVVNZOwogCQkJCWJyZWFrOwogCQkJfQogCQkJLyogZmluZCB0aGUg aW50ZXJmYWNlIGFuZCBhIHJlZmVyZW5jZSAqLwotCQkJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKG5t ciwgJm5hLCAxIC8qIGNyZWF0ZSAqLyk7IC8qIGtlZXAgcmVmZXJlbmNlICovCisJCQllcnJvciA9 IG5ldG1hcF9nZXRfbmEobm1yLCAmbmEsICZpZnAsCisJCQkJCSAgICAgIDEgLyogY3JlYXRlICov KTsgLyoga2VlcCByZWZlcmVuY2UgKi8KIAkJCWlmIChlcnJvcikKIAkJCQlicmVhazsKIAkJCWlm IChORVRNQVBfT1dORURfQllfS0VSTihuYSkpIHsKLQkJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEp OworCQkJCW5ldG1hcF91bmdldF9uYShuYSwgaWZwKTsKIAkJCQllcnJvciA9IEVCVVNZOwogCQkJ CWJyZWFrOwogCQkJfQorCisJCQlpZiAobmEtPnZpcnRfaGRyX2xlbiAmJiAhKG5tci0+bnJfZmxh Z3MgJiBOUl9BQ0NFUFRfVk5FVF9IRFIpKSB7CisJCQkJbmV0bWFwX3VuZ2V0X25hKG5hLCBpZnAp OworCQkJCWVycm9yID0gRUlPOworCQkJCWJyZWFrOworCQkJfQorCisJCQllcnJvciA9IG5tX292 ZXJyaWRlX21lbShuYSwgbm1yLT5ucl9hcmcyKTsKKwkJCWlmIChlcnJvcikgeworCQkJCW5ldG1h cF91bmdldF9uYShuYSwgaWZwKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJZXJyb3IgPSBuZXRt YXBfZG9fcmVnaWYocHJpdiwgbmEsIG5tci0+bnJfcmluZ2lkLCBubXItPm5yX2ZsYWdzKTsKIAkJ CWlmIChlcnJvcikgeyAgICAvKiByZWcuIGZhaWxlZCwgcmVsZWFzZSBwcml2IGFuZCByZWYgKi8K LQkJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOworCQkJCW5ldG1hcF91bmdldF9uYShuYSwgaWZw KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW5pZnAgPSBwcml2LT5ucF9uaWZwOwpAQCAtMjIwMCw3 ICsyMzA1LDcgQEAKIAkJCQkmbm1yLT5ucl9hcmcyKTsKIAkJCWlmIChlcnJvcikgewogCQkJCW5l dG1hcF9kb191bnJlZ2lmKHByaXYpOwotCQkJCW5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CisJCQkJ bmV0bWFwX3VuZ2V0X25hKG5hLCBpZnApOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKG1lbWZs YWdzICYgTkVUTUFQX01FTV9QUklWQVRFKSB7CkBAIC0yMjEyLDEyICsyMzE3LDE3IEBACiAJCQl9 CiAKIAkJCWlmIChubXItPm5yX2FyZzMpIHsKLQkJCQlEKCJyZXF1ZXN0ZWQgJWQgZXh0cmEgYnVm ZmVycyIsIG5tci0+bnJfYXJnMyk7CisJCQkJaWYgKG5ldG1hcF92ZXJib3NlKQorCQkJCQlEKCJy ZXF1ZXN0ZWQgJWQgZXh0cmEgYnVmZmVycyIsIG5tci0+bnJfYXJnMyk7CiAJCQkJbm1yLT5ucl9h cmczID0gbmV0bWFwX2V4dHJhX2FsbG9jKG5hLAogCQkJCQkmbmlmcC0+bmlfYnVmc19oZWFkLCBu bXItPm5yX2FyZzMpOwotCQkJCUQoImdvdCAlZCBleHRyYSBidWZmZXJzIiwgbm1yLT5ucl9hcmcz KTsKKwkJCQlpZiAobmV0bWFwX3ZlcmJvc2UpCisJCQkJCUQoImdvdCAlZCBleHRyYSBidWZmZXJz Iiwgbm1yLT5ucl9hcmczKTsKIAkJCX0KIAkJCW5tci0+bnJfb2Zmc2V0ID0gbmV0bWFwX21lbV9p Zl9vZmZzZXQobmEtPm5tX21lbSwgbmlmcCk7CisKKwkJCS8qIHN0b3JlIGlmcCByZWZlcmVuY2Ug c28gdGhhdCBwcml2IGRlc3RydWN0b3IgbWF5IHJlbGVhc2UgaXQgKi8KKwkJCXByaXYtPm5wX2lm cCA9IGlmcDsKIAkJfSB3aGlsZSAoMCk7CiAJCU5NR19VTkxPQ0soKTsKIAkJYnJlYWs7CkBAIC0y MjQwLDExICsyMzUwLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCFubV9uZXRtYXBfb24o bmEpKSB7Ci0JCQllcnJvciA9IEVOWElPOwotCQkJYnJlYWs7Ci0JCX0KLQogCQl0ID0gKGNtZCA9 PSBOSU9DVFhTWU5DID8gTlJfVFggOiBOUl9SWCk7CiAJCWtyaW5ncyA9IE5NUihuYSwgdCk7CiAJ CXFmaXJzdCA9IHByaXYtPm5wX3FmaXJzdFt0XTsKQEAgLTIyNTIsMzEgKzIzNTcsMzQgQEAKIAog CQlmb3IgKGkgPSBxZmlyc3Q7IGkgPCBxbGFzdDsgaSsrKSB7CiAJCQlzdHJ1Y3QgbmV0bWFwX2ty aW5nICprcmluZyA9IGtyaW5ncyArIGk7Ci0JCQlpZiAobm1fa3JfdHJ5Z2V0KGtyaW5nKSkgewot CQkJCWVycm9yID0gRUJVU1k7Ci0JCQkJZ290byBvdXQ7CisJCQlzdHJ1Y3QgbmV0bWFwX3Jpbmcg KnJpbmcgPSBrcmluZy0+cmluZzsKKworCQkJaWYgKHVubGlrZWx5KG5tX2tyX3RyeWdldChrcmlu ZywgMSwgJmVycm9yKSkpIHsKKwkJCQllcnJvciA9IChlcnJvciA/IEVJTyA6IDApOworCQkJCWNv bnRpbnVlOwogCQkJfQorCiAJCQlpZiAoY21kID09IE5JT0NUWFNZTkMpIHsKIAkJCQlpZiAobmV0 bWFwX3ZlcmJvc2UgJiBOTV9WRVJCX1RYU1lOQykKIAkJCQkJRCgicHJlIHR4c3luYyByaW5nICVk IGN1ciAlZCBod2N1ciAlZCIsCi0JCQkJCSAgICBpLCBrcmluZy0+cmluZy0+Y3VyLAorCQkJCQkg ICAgaSwgcmluZy0+Y3VyLAogCQkJCQkgICAga3JpbmctPm5yX2h3Y3VyKTsKLQkJCQlpZiAobm1f dHhzeW5jX3Byb2xvZ3VlKGtyaW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgeworCQkJCWlm IChubV90eHN5bmNfcHJvbG9ndWUoa3JpbmcsIHJpbmcpID49IGtyaW5nLT5ua3JfbnVtX3Nsb3Rz KSB7CiAJCQkJCW5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7CiAJCQkJfSBlbHNlIGlmIChrcmlu Zy0+bm1fc3luYyhrcmluZywgTkFGX0ZPUkNFX1JFQ0xBSU0pID09IDApIHsKLQkJCQkJbm1fdHhz eW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJCQkJbm1fc3luY19maW5hbGl6ZShrcmluZyk7CiAJCQkJ fQogCQkJCWlmIChuZXRtYXBfdmVyYm9zZSAmIE5NX1ZFUkJfVFhTWU5DKQogCQkJCQlEKCJwb3N0 IHR4c3luYyByaW5nICVkIGN1ciAlZCBod2N1ciAlZCIsCi0JCQkJCSAgICBpLCBrcmluZy0+cmlu Zy0+Y3VyLAorCQkJCQkgICAgaSwgcmluZy0+Y3VyLAogCQkJCQkgICAga3JpbmctPm5yX2h3Y3Vy KTsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKG5tX3J4c3luY19wcm9sb2d1ZShrcmluZykgPj0ga3Jp bmctPm5rcl9udW1fc2xvdHMpIHsKKwkJCQlpZiAobm1fcnhzeW5jX3Byb2xvZ3VlKGtyaW5nLCBy aW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgewogCQkJCQluZXRtYXBfcmluZ19yZWluaXQo a3JpbmcpOwogCQkJCX0gZWxzZSBpZiAoa3JpbmctPm5tX3N5bmMoa3JpbmcsIE5BRl9GT1JDRV9S RUFEKSA9PSAwKSB7Ci0JCQkJCW5tX3J4c3luY19maW5hbGl6ZShrcmluZyk7CisJCQkJCW5tX3N5 bmNfZmluYWxpemUoa3JpbmcpOwogCQkJCX0KLQkJCQltaWNyb3RpbWUoJm5hLT5yeF9yaW5nc1tp XS5yaW5nLT50cyk7CisJCQkJbWljcm90aW1lKCZyaW5nLT50cyk7CiAJCQl9CiAJCQlubV9rcl9w dXQoa3JpbmcpOwogCQl9CkBAIC0yMzIzLDkgKzI0MzEsNyBAQAogCQllcnJvciA9IEVPUE5PVFNV UFA7CiAjZW5kaWYgLyogbGludXggKi8KIAl9Ci1vdXQ6CiAKLQlDVVJWTkVUX1JFU1RPUkUoKTsK IAlyZXR1cm4gKGVycm9yKTsKIH0KIApAQCAtMjM0NSwxNyArMjQ1MSwxNSBAQAogICogaGlkZGVu IGFyZ3VtZW50LgogICovCiBpbnQKLW5ldG1hcF9wb2xsKHN0cnVjdCBjZGV2ICpkZXYsIGludCBl dmVudHMsIHN0cnVjdCB0aHJlYWQgKnRkKQorbmV0bWFwX3BvbGwoc3RydWN0IG5ldG1hcF9wcml2 X2QgKnByaXYsIGludCBldmVudHMsIE5NX1NFTFJFQ09SRF9UICpzcikKIHsKLQlzdHJ1Y3QgbmV0 bWFwX3ByaXZfZCAqcHJpdiA9IE5VTEw7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYTsKIAlz dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZzsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CiAJ dV9pbnQgaSwgY2hlY2tfYWxsX3R4LCBjaGVja19hbGxfcngsIHdhbnRbTlJfVFhSWF0sIHJldmVu dHMgPSAwOwogI2RlZmluZSB3YW50X3R4IHdhbnRbTlJfVFhdCiAjZGVmaW5lIHdhbnRfcnggd2Fu dFtOUl9SWF0KIAlzdHJ1Y3QgbWJxIHE7CQkvKiBwYWNrZXRzIGZyb20gaHcgcXVldWVzIHRvIGhv c3Qgc3RhY2sgKi8KLQl2b2lkICpwd2FpdCA9IGRldjsJLyogbGludXggY29tcGF0aWJpbGl0eSAq LwotCWludCBpc19rZXZlbnQgPSAwOwogCWVudW0gdHhyeCB0OwogCiAJLyoKQEAgLTIzNjUsMjMg KzI0NjksMTMgQEAKIAkgKi8KIAlpbnQgcmV0cnlfdHggPSAxLCByZXRyeV9yeCA9IDE7CiAKLQko dm9pZClwd2FpdDsKLQltYnFfaW5pdCgmcSk7Ci0KLQkvKgotCSAqIFhYWCBrZXZlbnQgaGFzIGN1 cnRocmVhZC0+dHBfZm9wID09IE5VTEwsCi0JICogc28gZGV2ZnNfZ2V0X2NkZXZwcml2KCkgZmFp bHMuIFdlIGNpcmN1bXZlbnQgdGhpcyBieSBwYXNzaW5nCi0JICogcHJpdiBhcyB0aGUgZmlyc3Qg YXJndW1lbnQsIHdoaWNoIGlzIGFsc28gdXNlZnVsIHRvIGF2b2lkCi0JICogdGhlIHNlbHJlY29y ZCgpIHdoaWNoIGFyZSBub3QgbmVjZXNzYXJ5IGluIHRoYXQgY2FzZS4KKwkvKiB0cmFuc3BhcmVu dCBtb2RlOiBzZW5kX2Rvd24gaXMgMSBpZiB3ZSBoYXZlIGZvdW5kIHNvbWUKKwkgKiBwYWNrZXRz IHRvIGZvcndhcmQgZHVyaW5nIHRoZSByeCBzY2FuIGFuZCB3ZSBoYXZlIG5vdAorCSAqIHNlbnQg dGhlbSBkb3duIHRvIHRoZSBuaWMgeWV0CiAJICovCi0JaWYgKGRldmZzX2dldF9jZGV2cHJpdigo dm9pZCAqKikmcHJpdikgIT0gMCkgewotCQlpc19rZXZlbnQgPSAxOwotCQlpZiAobmV0bWFwX3Zl cmJvc2UpCi0JCQlEKCJjYWxsZWQgZnJvbSBrZXZlbnQiKTsKLQkJcHJpdiA9IChzdHJ1Y3QgbmV0 bWFwX3ByaXZfZCAqKWRldjsKLQl9Ci0JaWYgKHByaXYgPT0gTlVMTCkKLQkJcmV0dXJuIFBPTExF UlI7CisJaW50IHNlbmRfZG93biA9IDA7CisKKwltYnFfaW5pdCgmcSk7CiAKIAlpZiAocHJpdi0+ bnBfbmlmcCA9PSBOVUxMKSB7CiAJCUQoIk5vIGlmIHJlZ2lzdGVyZWQiKTsKQEAgLTIzOTksNyAr MjQ5Myw2IEBACiAJd2FudF90eCA9IGV2ZW50cyAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSk7CiAJ d2FudF9yeCA9IGV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUkROT1JNKTsKIAotCiAJLyoKIAkgKiBj aGVja19hbGxfe3R4fHJ4fSBhcmUgc2V0IGlmIHRoZSBjYXJkIGhhcyBtb3JlIHRoYW4gb25lIHF1 ZXVlIEFORAogCSAqIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYm91bmQgdG8gYWxsIG9mIHRoZW0u IElmIHNvLCB3ZSBzbGVlcCBvbgpAQCAtMjQyMSw2ICsyNTE0LDMyIEBACiAJICogc2xvdHMgYXZh aWxhYmxlLiBJZiB0aGlzIGZhaWxzLCB0aGVuIGxvY2sgYW5kIGNhbGwgdGhlIHN5bmMKIAkgKiBy b3V0aW5lcy4KIAkgKi8KKyNpZiAxIC8qIG5ldyBjb2RlLSBjYWxsIHJ4IGlmIGFueSBvZiB0aGUg cmluZyBuZWVkcyB0byByZWxlYXNlIG9yIHJlYWQgYnVmZmVycyAqLworCWlmICh3YW50X3R4KSB7 CisJCXQgPSBOUl9UWDsKKwkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W3RdOyB3YW50W3RdICYm IGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7CisJCQlrcmluZyA9ICZOTVIobmEsIHQpW2ld OworCQkJLyogWFhYIGNvbXBhcmUgcmluZy0+Y3VyIGFuZCBrcmluZy0+dGFpbCAqLworCQkJaWYg KCFubV9yaW5nX2VtcHR5KGtyaW5nLT5yaW5nKSkgeworCQkJCXJldmVudHMgfD0gd2FudFt0XTsK KwkJCQl3YW50W3RdID0gMDsJLyogYWxzbyBicmVha3MgdGhlIGxvb3AgKi8KKwkJCX0KKwkJfQor CX0KKwlpZiAod2FudF9yeCkgeworCQl3YW50X3J4ID0gMDsgLyogbG9vayBmb3IgYSByZWFzb24g dG8gcnVuIHRoZSBoYW5kbGVycyAqLworCQl0ID0gTlJfUlg7CisJCWZvciAoaSA9IHByaXYtPm5w X3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBpKyspIHsKKwkJCWtyaW5nID0gJk5N UihuYSwgdClbaV07CisJCQlpZiAoa3JpbmctPnJpbmctPmN1ciA9PSBrcmluZy0+cmluZy0+dGFp bCAvKiB0cnkgZmV0Y2ggbmV3IGJ1ZmZlcnMgKi8KKwkJCSAgICB8fCBrcmluZy0+cmhlYWQgIT0g a3JpbmctPnJpbmctPmhlYWQgLyogcmVsZWFzZSBidWZmZXJzICovKSB7CisJCQkJd2FudF9yeCA9 IDE7CisJCQl9CisJCX0KKwkJaWYgKCF3YW50X3J4KQorCQkJcmV2ZW50cyB8PSBldmVudHMgJiAo UE9MTElOIHwgUE9MTFJETk9STSk7IC8qIHdlIGhhdmUgZGF0YSAqLworCX0KKyNlbHNlIC8qIG9s ZCBjb2RlICovCiAJZm9yX3J4X3R4KHQpIHsKIAkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W3Rd OyB3YW50W3RdICYmIGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7CiAJCQlrcmluZyA9ICZO TVIobmEsIHQpW2ldOwpAQCAtMjQzMSw2ICsyNTUwLDcgQEAKIAkJCX0KIAkJfQogCX0KKyNlbmRp ZiAvKiBvbGQgY29kZSAqLwogCiAJLyoKIAkgKiBJZiB3ZSB3YW50IHRvIHB1c2ggcGFja2V0cyBv dXQgKHByaXYtPm5wX3R4cG9sbCkgb3IKQEAgLTI0NDcsMzIgKzI1NjcsMjYgQEAKIAkJICogdXNl ZCB0byBza2lwIHJpbmdzIHdpdGggbm8gcGVuZGluZyB0cmFuc21pc3Npb25zLgogCQkgKi8KIGZs dXNoX3R4OgotCQlmb3IgKGkgPSBwcml2LT5ucF9xZmlyc3RbTlJfVFhdOyBpIDwgcHJpdi0+bnBf cWxhc3RbTlJfUlhdOyBpKyspIHsKKwkJZm9yIChpID0gcHJpdi0+bnBfcWZpcnN0W05SX1RYXTsg aSA8IHByaXYtPm5wX3FsYXN0W05SX1RYXTsgaSsrKSB7CiAJCQlpbnQgZm91bmQgPSAwOwogCiAJ CQlrcmluZyA9ICZuYS0+dHhfcmluZ3NbaV07Ci0JCQlpZiAoIXdhbnRfdHggJiYga3JpbmctPnJp bmctPmN1ciA9PSBrcmluZy0+bnJfaHdjdXIpCisJCQlyaW5nID0ga3JpbmctPnJpbmc7CisKKwkJ CWlmICghc2VuZF9kb3duICYmICF3YW50X3R4ICYmIHJpbmctPmN1ciA9PSBrcmluZy0+bnJfaHdj dXIpCiAJCQkJY29udGludWU7Ci0JCQkvKiBvbmx5IG9uZSB0aHJlYWQgZG9lcyB0eHN5bmMgKi8K LQkJCWlmIChubV9rcl90cnlnZXQoa3JpbmcpKSB7Ci0JCQkJLyogZWl0aGVyIGJ1c3kgb3Igc3Rv cHBlZAotCQkJCSAqIFhYWCBpZiB0aGUgcmluZyBpcyBzdG9wcGVkLCBzbGVlcGluZyB3b3VsZAot CQkJCSAqIGJlIGJldHRlci4gSW4gY3VycmVudCBjb2RlLCBob3dldmVyLCB3ZSBvbmx5Ci0JCQkJ ICogc3RvcCB0aGUgcmluZ3MgZm9yIGJyaWVmIGludGVydmFscyAoMjAxNC0wMy0xNCkKLQkJCQkg Ki8KLQkJCQlpZiAobmV0bWFwX3ZlcmJvc2UpCi0JCQkJCVJEKDIsICIlcCBsb3N0IHJhY2Ugb24g dHhyaW5nICVkLCBvayIsCi0JCQkJCSAgICBwcml2LCBpKTsKKworCQkJaWYgKG5tX2tyX3RyeWdl dChrcmluZywgMSwgJnJldmVudHMpKQogCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKG5tX3R4 c3luY19wcm9sb2d1ZShrcmluZykgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpIHsKKworCQkJaWYg KG5tX3R4c3luY19wcm9sb2d1ZShrcmluZywgcmluZykgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMp IHsKIAkJCQluZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCQkJCXJldmVudHMgfD0gUE9MTEVS UjsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGtyaW5nLT5ubV9zeW5jKGtyaW5nLCAwKSkKIAkJCQkJ cmV2ZW50cyB8PSBQT0xMRVJSOwogCQkJCWVsc2UKLQkJCQkJbm1fdHhzeW5jX2ZpbmFsaXplKGty aW5nKTsKKwkJCQkJbm1fc3luY19maW5hbGl6ZShrcmluZyk7CiAJCQl9CiAKIAkJCS8qCkBAIC0y NDg5LDggKzI2MDMsMTAgQEAKIAkJCQlrcmluZy0+bm1fbm90aWZ5KGtyaW5nLCAwKTsKIAkJCX0K IAkJfQotCQlpZiAod2FudF90eCAmJiByZXRyeV90eCAmJiAhaXNfa2V2ZW50KSB7Ci0JCQlPU19z ZWxyZWNvcmQodGQsIGNoZWNrX2FsbF90eCA/CisJCS8qIGlmIHRoZXJlIHdlcmUgYW55IHBhY2tl dCB0byBmb3J3YXJkIHdlIG11c3QgaGF2ZSBoYW5kbGVkIHRoZW0gYnkgbm93ICovCisJCXNlbmRf ZG93biA9IDA7CisJCWlmICh3YW50X3R4ICYmIHJldHJ5X3R4ICYmIHNyKSB7CisJCQlubV9vc19z ZWxyZWNvcmQoc3IsIGNoZWNrX2FsbF90eCA/CiAJCQkgICAgJm5hLT5zaVtOUl9UWF0gOiAmbmEt PnR4X3JpbmdzW3ByaXYtPm5wX3FmaXJzdFtOUl9UWF1dLnNpKTsKIAkJCXJldHJ5X3R4ID0gMDsK IAkJCWdvdG8gZmx1c2hfdHg7CkBAIC0yNTAyLDIyICsyNjE4LDE4IEBACiAJICogRG8gaXQgb24g YWxsIHJpbmdzIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHN0YXJ2ZS4KIAkgKi8KIAlpZiAod2FudF9y eCkgewotCQlpbnQgc2VuZF9kb3duID0gMDsgLyogdHJhbnNwYXJlbnQgbW9kZSAqLwogCQkvKiB0 d28gcm91bmRzIGhlcmUgZm9yIHJhY2UgYXZvaWRhbmNlICovCiBkb19yZXRyeV9yeDoKIAkJZm9y IChpID0gcHJpdi0+bnBfcWZpcnN0W05SX1JYXTsgaSA8IHByaXYtPm5wX3FsYXN0W05SX1JYXTsg aSsrKSB7CiAJCQlpbnQgZm91bmQgPSAwOwogCiAJCQlrcmluZyA9ICZuYS0+cnhfcmluZ3NbaV07 CisJCQlyaW5nID0ga3JpbmctPnJpbmc7CiAKLQkJCWlmIChubV9rcl90cnlnZXQoa3JpbmcpKSB7 Ci0JCQkJaWYgKG5ldG1hcF92ZXJib3NlKQotCQkJCQlSRCgyLCAiJXAgbG9zdCByYWNlIG9uIHJ4 cmluZyAlZCwgb2siLAotCQkJCQkgICAgcHJpdiwgaSk7CisJCQlpZiAodW5saWtlbHkobm1fa3Jf dHJ5Z2V0KGtyaW5nLCAxLCAmcmV2ZW50cykpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCi0JCQlp ZiAobm1fcnhzeW5jX3Byb2xvZ3VlKGtyaW5nKSA+PSBrcmluZy0+bmtyX251bV9zbG90cykgewor CQkJaWYgKG5tX3J4c3luY19wcm9sb2d1ZShrcmluZywgcmluZykgPj0ga3JpbmctPm5rcl9udW1f c2xvdHMpIHsKIAkJCQluZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCQkJCXJldmVudHMgfD0g UE9MTEVSUjsKIAkJCX0KQEAgLTI1MjYsMjIgKzI2MzgsMjIgQEAKIAkJCS8qCiAJCQkgKiB0cmFu c3BhcmVudCBtb2RlIHN1cHBvcnQ6IGNvbGxlY3QgcGFja2V0cwogCQkJICogZnJvbSB0aGUgcnhy aW5nKHMpLgotCQkJICogWFhYIE5SX0ZPUldBUkQgc2hvdWxkIG9ubHkgYmUgcmVhZCBvbgotCQkJ ICogcGh5c2ljYWwgb3IgTklDIHBvcnRzCiAJCQkgKi8KLQkJCWlmIChuZXRtYXBfZndkIHx8a3Jp bmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkgeworCQkJaWYgKG5tX21heV9mb3J3YXJkX3Vw KGtyaW5nKSkgewogCQkJCU5EKDEwLCAiZm9yd2FyZGluZyBzb21lIGJ1ZmZlcnMgdXAgJWQgdG8g JWQiLAotCQkJCSAgICBrcmluZy0+bnJfaHdjdXIsIGtyaW5nLT5yaW5nLT5jdXIpOworCQkJCSAg ICBrcmluZy0+bnJfaHdjdXIsIHJpbmctPmN1cik7CiAJCQkJbmV0bWFwX2dyYWJfcGFja2V0cyhr cmluZywgJnEsIG5ldG1hcF9md2QpOwogCQkJfQogCisJCQlrcmluZy0+bnJfa2ZsYWdzICY9IH5O Ul9GT1JXQVJEOwogCQkJaWYgKGtyaW5nLT5ubV9zeW5jKGtyaW5nLCAwKSkKIAkJCQlyZXZlbnRz IHw9IFBPTExFUlI7CiAJCQllbHNlCi0JCQkJbm1fcnhzeW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJ CQlubV9zeW5jX2ZpbmFsaXplKGtyaW5nKTsKKwkJCXNlbmRfZG93biB8PSAoa3JpbmctPm5yX2tm bGFncyAmIE5SX0ZPUldBUkQpOyAvKiBob3N0IHJpbmcgb25seSAqLwogCQkJaWYgKG5ldG1hcF9u b190aW1lc3RhbXAgPT0gMCB8fAotCQkJCQlrcmluZy0+cmluZy0+ZmxhZ3MgJiBOUl9USU1FU1RB TVApIHsKLQkJCQltaWNyb3RpbWUoJmtyaW5nLT5yaW5nLT50cyk7CisJCQkJCXJpbmctPmZsYWdz ICYgTlJfVElNRVNUQU1QKSB7CisJCQkJbWljcm90aW1lKCZyaW5nLT50cyk7CiAJCQl9CiAJCQlm b3VuZCA9IGtyaW5nLT5yY3VyICE9IGtyaW5nLT5ydGFpbDsKIAkJCW5tX2tyX3B1dChrcmluZyk7 CkBAIC0yNTUyLDIyICsyNjY0LDEwIEBACiAJCQl9CiAJCX0KIAotCQkvKiB0cmFuc3BhcmVudCBt b2RlIFhYWCBvbmx5IGR1cmluZyBmaXJzdCBwYXNzID8gKi8KLQkJaWYgKG5hLT5uYV9mbGFncyAm IE5BRl9IT1NUX1JJTkdTKSB7Ci0JCQlrcmluZyA9ICZuYS0+cnhfcmluZ3NbbmEtPm51bV9yeF9y aW5nc107Ci0JCQlpZiAoY2hlY2tfYWxsX3J4Ci0JCQkgICAgJiYgKG5ldG1hcF9md2QgfHwga3Jp bmctPnJpbmctPmZsYWdzICYgTlJfRk9SV0FSRCkpIHsKLQkJCQkvKiBYWFggZml4IHRvIHVzZSBr cmluZyBmaWVsZHMgKi8KLQkJCQlpZiAobm1fcmluZ19lbXB0eShrcmluZy0+cmluZykpCi0JCQkJ CXNlbmRfZG93biA9IG5ldG1hcF9yeHN5bmNfZnJvbV9ob3N0KG5hLCB0ZCwgZGV2KTsKLQkJCQlp ZiAoIW5tX3JpbmdfZW1wdHkoa3JpbmctPnJpbmcpKQotCQkJCQlyZXZlbnRzIHw9IHdhbnRfcng7 Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmV0cnlfcnggJiYgIWlzX2tldmVudCkKLQkJCU9TX3NlbHJl Y29yZCh0ZCwgY2hlY2tfYWxsX3J4ID8KKwkJaWYgKHJldHJ5X3J4ICYmIHNyKSB7CisJCQlubV9v c19zZWxyZWNvcmQoc3IsIGNoZWNrX2FsbF9yeCA/CiAJCQkgICAgJm5hLT5zaVtOUl9SWF0gOiAm bmEtPnJ4X3JpbmdzW3ByaXYtPm5wX3FmaXJzdFtOUl9SWF1dLnNpKTsKKwkJfQogCQlpZiAoc2Vu ZF9kb3duID4gMCB8fCByZXRyeV9yeCkgewogCQkJcmV0cnlfcnggPSAwOwogCQkJaWYgKHNlbmRf ZG93bikKQEAgLTI1ODIsMTUgKzI2ODIsMTQgQEAKIAkgKiBrcmluZy0+bnJfaHdjdXIgYW5kIHJp bmctPmhlYWQKIAkgKiBhcmUgcGFzc2VkIHRvIHRoZSBvdGhlciBlbmRwb2ludC4KIAkgKgotCSAq IEluIHRoaXMgbW9kZSB3ZSBhbHNvIHNjYW4gdGhlIHN3IHJ4cmluZywgd2hpY2ggaW4KLQkgKiB0 dXJuIHBhc3NlcyBwYWNrZXRzIHVwLgotCSAqCi0JICogWFhYIFRyYW5zcGFyZW50IG1vZGUgYXQg dGhlIG1vbWVudCByZXF1aXJlcyB0byBiaW5kIGFsbAorCSAqIFRyYW5zcGFyZW50IG1vZGUgcmVx dWlyZXMgdG8gYmluZCBhbGwKICAJICogcmluZ3MgdG8gYSBzaW5nbGUgZmlsZSBkZXNjcmlwdG9y LgogCSAqLwogCi0JaWYgKHEuaGVhZCAmJiBuYS0+aWZwICE9IE5VTEwpCisJaWYgKHEuaGVhZCAm JiAhbm1fa3JfdHJ5Z2V0KCZuYS0+dHhfcmluZ3NbbmEtPm51bV90eF9yaW5nc10sIDEsICZyZXZl bnRzKSkgewogCQluZXRtYXBfc2VuZF91cChuYS0+aWZwLCAmcSk7CisJCW5tX2tyX3B1dCgmbmEt PnR4X3JpbmdzW25hLT5udW1fdHhfcmluZ3NdKTsKKwl9CiAKIAlyZXR1cm4gKHJldmVudHMpOwog I3VuZGVmIHdhbnRfdHgKQEAgLTI2MDAsOCArMjY5OSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0t LS0tLS0gZHJpdmVyIHN1cHBvcnQgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0 YXRpYyBpbnQgbmV0bWFwX2h3X2tyaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICop OwotCiAvKiBkZWZhdWx0IG5vdGlmeSBjYWxsYmFjayAqLwogc3RhdGljIGludAogbmV0bWFwX25v dGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQpAQCAtMjYwOSw1MSAr MjcwNiw1MSBAQAogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBrcmluZy0+bmE7CiAJZW51 bSB0eHJ4IHQgPSBrcmluZy0+dHg7CiAKLQlPU19zZWx3YWtldXAoJmtyaW5nLT5zaSwgUElfTkVU KTsKKwlubV9vc19zZWx3YWtldXAoJmtyaW5nLT5zaSk7CiAJLyogb3B0aW1pemF0aW9uOiBhdm9p ZCBhIHdha2UgdXAgb24gdGhlIGdsb2JhbAogCSAqIHF1ZXVlIGlmIG5vYm9keSBoYXMgcmVnaXN0 ZXJlZCBmb3IgbW9yZQogCSAqIHRoYW4gb25lIHJpbmcKIAkgKi8KIAlpZiAobmEtPnNpX3VzZXJz W3RdID4gMCkKLQkJT1Nfc2Vsd2FrZXVwKCZuYS0+c2lbdF0sIFBJX05FVCk7CisJCW5tX29zX3Nl bHdha2V1cCgmbmEtPnNpW3RdKTsKIAotCXJldHVybiAwOworCXJldHVybiBOTV9JUlFfQ09NUExF VEVEOwogfQogCisjaWYgMAorc3RhdGljIGludAorbmV0bWFwX25vdGlmeShzdHJ1Y3QgbmV0bWFw X2FkYXB0ZXIgKm5hLCB1X2ludCBuX3JpbmcsCitlbnVtIHR4cnggdHgsIGludCBmbGFncykKK3sK KwlpZiAodHggPT0gTlJfVFgpIHsKKwkJS2VTZXRFdmVudChub3Rlcy0+VFhfRVZFTlQsIDAsIEZB TFNFKTsKKwl9CisJZWxzZQorCXsKKwkJS2VTZXRFdmVudChub3Rlcy0+UlhfRVZFTlQsIDAsIEZB TFNFKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogLyogY2FsbGVkIGJ5IGFsbCByb3V0 aW5lcyB0aGF0IGNyZWF0ZSBuZXRtYXBfYWRhcHRlcnMuCi0gKiBBdHRhY2ggbmEgdG8gdGhlIGlm cCAoaWYgYW55KSBhbmQgcHJvdmlkZSBkZWZhdWx0cwotICogZm9yIG9wdGlvbmFsIGNhbGxiYWNr cy4gRGVmYXVsdHMgYXNzdW1lIHRoYXQgd2UKLSAqIGFyZSBjcmVhdGluZyBhbiBoYXJkd2FyZSBu ZXRtYXBfYWRhcHRlci4KKyAqIHByb3ZpZGUgc29tZSBkZWZhdWx0cyBhbmQgZ2V0IGEgcmVmZXJl bmNlIHRvIHRoZQorICogbWVtb3J5IGFsbG9jYXRvcgogICovCiBpbnQKIG5ldG1hcF9hdHRhY2hf Y29tbW9uKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCiB7Ci0Jc3RydWN0IGlmbmV0ICppZnAg PSBuYS0+aWZwOwotCiAJaWYgKG5hLT5udW1fdHhfcmluZ3MgPT0gMCB8fCBuYS0+bnVtX3J4X3Jp bmdzID09IDApIHsKIAkJRCgiJXM6IGludmFsaWQgcmluZ3MgdHggJWQgcnggJWQiLAogCQkJbmEt Pm5hbWUsIG5hLT5udW1fdHhfcmluZ3MsIG5hLT5udW1fcnhfcmluZ3MpOwogCQlyZXR1cm4gRUlO VkFMOwogCX0KLQkvKiBpZnAgaXMgTlVMTCBmb3IgdmlydHVhbCBhZGFwdGVycyAoYndyYXAsIG5v bi1wZXJzaXN0ZW50IFZBTEUgcG9ydHMsCi0JICogcGlwZXMsIG1vbml0b3JzKS4gRm9yIGJ3cmFw IHdlIGFjdHVhbGx5IGhhdmUgYSBub24tbnVsbCBpZnAgZm9yCi0JICogdXNlIGJ5IHRoZSBleHRl cm5hbCBtb2R1bGVzLCBidXQgdGhhdCBpcyBzZXQgYWZ0ZXIgdGhpcwotCSAqIGZ1bmN0aW9uIGhh cyBiZWVuIGNhbGxlZC4KLQkgKiBYWFggdGhpcyBpcyB1Z2x5LCBtYXliZSBzcGxpdCB0aGlzIGZ1 bmN0aW9uIGluIHR3byAoMjAxNC0wMy0xNCkKLQkgKi8KLQlpZiAoaWZwICE9IE5VTEwpIHsKLQkJ V05BKGlmcCkgPSBuYTsKIAotCS8qIHRoZSBmb2xsb3dpbmcgaXMgb25seSBuZWVkZWQgZm9yIG5h IHRoYXQgdXNlIHRoZSBob3N0IHBvcnQuCi0JICogWFhYIGRvIHdlIGhhdmUgc29tZXRoaW5nIHNp bWlsYXIgZm9yIGxpbnV4ID8KLQkgKi8KICNpZmRlZiBfX0ZyZWVCU0RfXwotCQluYS0+aWZfaW5w dXQgPSBpZnAtPmlmX2lucHV0OyAvKiBmb3IgbmV0bWFwX3NlbmRfdXAgKi8KLSNlbmRpZiAvKiBf X0ZyZWVCU0RfXyAqLwotCi0JCU5FVE1BUF9TRVRfQ0FQQUJMRShpZnApOworCWlmIChuYS0+bmFf ZmxhZ3MgJiBOQUZfSE9TVF9SSU5HUyAmJiBuYS0+aWZwKSB7CisJCW5hLT5pZl9pbnB1dCA9IG5h LT5pZnAtPmlmX2lucHV0OyAvKiBmb3IgbmV0bWFwX3NlbmRfdXAgKi8KIAl9CisjZW5kaWYgLyog X19GcmVlQlNEX18gKi8KIAlpZiAobmEtPm5tX2tyaW5nc19jcmVhdGUgPT0gTlVMTCkgewogCQkv KiB3ZSBhc3N1bWUgdGhhdCB3ZSBoYXZlIGJlZW4gY2FsbGVkIGJ5IGEgZHJpdmVyLAogCQkgKiBz aW5jZSBvdGhlciBwb3J0IHR5cGVzIGFsbCBwcm92aWRlIHRoZWlyIG93bgpAQCAtMjY2NiwxMCAr Mjc2MywxMCBAQAogCQluYS0+bm1fbm90aWZ5ID0gbmV0bWFwX25vdGlmeTsKIAluYS0+YWN0aXZl X2ZkcyA9IDA7CiAKLQlpZiAobmEtPm5tX21lbSA9PSBOVUxMKQorCWlmIChuYS0+bm1fbWVtID09 IE5VTEwpIHsKIAkJLyogdXNlIHRoZSBnbG9iYWwgYWxsb2NhdG9yICovCi0JCW5hLT5ubV9tZW0g PSAmbm1fbWVtOwotCW5ldG1hcF9tZW1fZ2V0KG5hLT5ubV9tZW0pOworCQluYS0+bm1fbWVtID0g bmV0bWFwX21lbV9nZXQoJm5tX21lbSk7CisJfQogI2lmZGVmIFdJVEhfVkFMRQogCWlmIChuYS0+ bm1fYmRnX2F0dGFjaCA9PSBOVUxMKQogCQkvKiBubyBzcGVjaWFsIG5tX2JkZ19hdHRhY2ggY2Fs bGJhY2suIE9uIFZBTEUKQEAgLTI2NzcsNiArMjc3NCw3IEBACiAJCSAqLwogCQluYS0+bm1fYmRn X2F0dGFjaCA9IG5ldG1hcF9id3JhcF9hdHRhY2g7CiAjZW5kaWYKKwogCXJldHVybiAwOwogfQog CkBAIC0yNjg1LDkgKzI3ODMsNiBAQAogdm9pZAogbmV0bWFwX2RldGFjaF9jb21tb24oc3RydWN0 IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKLQlpZiAobmEtPmlmcCAhPSBOVUxMKQotCQlXTkEobmEt PmlmcCkgPSBOVUxMOyAvKiBYWFggZG8gd2UgbmVlZCB0aGlzPyAqLwotCiAJaWYgKG5hLT50eF9y aW5ncykgeyAvKiBYWFggc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJRCgiZnJlZWluZyBsZWZ0b3Zl ciB0eF9yaW5ncyIpOwogCQluYS0+bm1fa3JpbmdzX2RlbGV0ZShuYSk7CkBAIC0yNjk2LDM0ICsy NzkxLDU1IEBACiAJaWYgKG5hLT5ubV9tZW0pCiAJCW5ldG1hcF9tZW1fcHV0KG5hLT5ubV9tZW0p OwogCWJ6ZXJvKG5hLCBzaXplb2YoKm5hKSk7Ci0JZnJlZShuYSwgTV9ERVZCVUYpOworCW5tX29z X2ZyZWUobmEpOwogfQogCi0vKiBXcmFwcGVyIGZvciB0aGUgcmVnaXN0ZXIgY2FsbGJhY2sgcHJv dmlkZWQgaGFyZHdhcmUgZHJpdmVycy4KLSAqIG5hLT5pZnAgPT0gTlVMTCBtZWFucyB0aGUgZHJp dmVyIG1vZHVsZSBoYXMgYmVlbgorLyogV3JhcHBlciBmb3IgdGhlIHJlZ2lzdGVyIGNhbGxiYWNr IHByb3ZpZGVkIG5ldG1hcC1lbmFibGVkCisgKiBoYXJkd2FyZSBkcml2ZXJzLgorICogbm1faXN6 b21iaWUobmEpIG1lYW5zIHRoYXQgdGhlIGRyaXZlciBtb2R1bGUgaGFzIGJlZW4KICAqIHVubG9h ZGVkLCBzbyB3ZSBjYW5ub3QgY2FsbCBpbnRvIGl0LgotICogTm90ZSB0aGF0IG1vZHVsZSB1bmxv YWRpbmcsIGluIG91ciBwYXRjaGVkIGxpbnV4IGRyaXZlcnMsCi0gKiBoYXBwZW5zIHVuZGVyIE5N R19MT0NLIGFuZCBhZnRlciBoYXZpbmcgc3RvcHBlZCBhbGwgdGhlCi0gKiBuaWMgcmluZ3MgKHNl ZSBuZXRtYXBfZGV0YWNoKS4gVGhpcyBwcm92aWRlcyBzdWZmaWNpZW50Ci0gKiBwcm90ZWN0aW9u IGZvciB0aGUgb3RoZXIgZHJpdmVyLXByb3ZpZWQgY2FsbGJhY2tzCi0gKiAoaS5lLiwgbm1fY29u ZmlnIGFuZCBubV8qeHN5bmMpLCB0aGF0IHRoZXJlZm9yZSBkb24ndCBuZWVkCi0gKiB0byB3cmFw cGVkLgorICogbm1fb3NfaWZuZXRfbG9jaygpIG11c3QgZ3VhcmFudGVlIG11dHVhbCBleGNsdXNp b24gd2l0aAorICogbW9kdWxlIHVubG9hZGluZy4KICAqLwogc3RhdGljIGludAotbmV0bWFwX2h3 X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZikKK25ldG1hcF9o d19yZWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgaW50IG9ub2ZmKQogewogCXN0cnVjdCBu ZXRtYXBfaHdfYWRhcHRlciAqaHduYSA9CiAJCShzdHJ1Y3QgbmV0bWFwX2h3X2FkYXB0ZXIqKW5h OworCWludCBlcnJvciA9IDA7CisKKwlubV9vc19pZm5ldF9sb2NrKCk7CisKKwlpZiAobm1faXN6 b21iaWUobmEpKSB7CisJCWlmIChvbm9mZikgeworCQkJZXJyb3IgPSBFTlhJTzsKKwkJfSBlbHNl IGlmIChuYSAhPSBOVUxMKSB7CisJCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9ORVRNQVBfT047CisJ CX0KKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKG5hLT5pZnAgPT0gTlVMTCkKLQkJcmV0dXJuIG9u b2ZmID8gRU5YSU8gOiAwOworCWVycm9yID0gaHduYS0+bm1faHdfcmVnaXN0ZXIobmEsIG9ub2Zm KTsKKworb3V0OgorCW5tX29zX2lmbmV0X3VubG9jaygpOwogCi0JcmV0dXJuIGh3bmEtPm5tX2h3 X3JlZ2lzdGVyKG5hLCBvbm9mZik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZAor bmV0bWFwX2h3X2R0b3Ioc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sKKwlpZiAobm1faXN6 b21iaWUobmEpIHx8IG5hLT5pZnAgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJV05BKG5hLT5pZnAp ID0gTlVMTDsKIH0KIAogCiAvKgotICogSW5pdGlhbGl6ZSBhIGBgbmV0bWFwX2FkYXB0ZXJgYCBv YmplY3QgY3JlYXRlZCBieSBkcml2ZXIgb24gYXR0YWNoLgorICogQWxsb2NhdGUgYSBgYG5ldG1h cF9hZGFwdGVyYGAgb2JqZWN0LCBhbmQgaW5pdGlhbGl6ZSBpdCBmcm9tIHRoZQorICogJ2FyZycg cGFzc2VkIGJ5IHRoZSBkcml2ZXIgb24gYXR0YWNoLgogICogV2UgYWxsb2NhdGUgYSBibG9jayBv ZiBtZW1vcnkgd2l0aCByb29tIGZvciBhIHN0cnVjdCBuZXRtYXBfYWRhcHRlcgogICogcGx1cyB0 d28gc2V0cyBvZiBOKzIgc3RydWN0IG5ldG1hcF9rcmluZyAod2hlcmUgTiBpcyB0aGUgbnVtYmVy CiAgKiBvZiBoYXJkd2FyZSByaW5ncyk6CkBAIC0yNzMyLDI5ICsyODQ4LDMxIEBACiAgKiBrcmlu ZwlOKzEJaXMgb25seSB1c2VkIGZvciB0aGUgc2VsaW5mbyBmb3IgYWxsIHF1ZXVlcy4gLy8gWFhY IHN0aWxsIHRydWUgPwogICogUmV0dXJuIDAgb24gc3VjY2VzcywgRU5PTUVNIG90aGVyd2lzZS4K ICAqLwotaW50Ci1uZXRtYXBfYXR0YWNoKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqYXJnKQorc3Rh dGljIGludAorX25ldG1hcF9hdHRhY2goc3RydWN0IG5ldG1hcF9hZGFwdGVyICphcmcsIHNpemVf dCBzaXplKQogewogCXN0cnVjdCBuZXRtYXBfaHdfYWRhcHRlciAqaHduYSA9IE5VTEw7Ci0JLy8g WFhYIHdoZW4gaXMgYXJnID09IE5VTEwgPwotCXN0cnVjdCBpZm5ldCAqaWZwID0gYXJnID8gYXJn LT5pZnAgOiBOVUxMOworCXN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsKIAotCWlmIChhcmcgPT0g TlVMTCB8fCBpZnAgPT0gTlVMTCkKKwlpZiAoYXJnID09IE5VTEwgfHwgYXJnLT5pZnAgPT0gTlVM TCkKIAkJZ290byBmYWlsOwotCWh3bmEgPSBtYWxsb2Moc2l6ZW9mKCpod25hKSwgTV9ERVZCVUYs IE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlpZnAgPSBhcmctPmlmcDsKKwlod25hID0gbm1fb3NfbWFs bG9jKHNpemUpOwogCWlmIChod25hID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKIAlod25hLT51cCA9 ICphcmc7CiAJaHduYS0+dXAubmFfZmxhZ3MgfD0gTkFGX0hPU1RfUklOR1MgfCBOQUZfTkFUSVZF OwogCXN0cm5jcHkoaHduYS0+dXAubmFtZSwgaWZwLT5pZl94bmFtZSwgc2l6ZW9mKGh3bmEtPnVw Lm5hbWUpKTsKIAlod25hLT5ubV9od19yZWdpc3RlciA9IGh3bmEtPnVwLm5tX3JlZ2lzdGVyOwot CWh3bmEtPnVwLm5tX3JlZ2lzdGVyID0gbmV0bWFwX2h3X3JlZ2lzdGVyOworCWh3bmEtPnVwLm5t X3JlZ2lzdGVyID0gbmV0bWFwX2h3X3JlZzsKIAlpZiAobmV0bWFwX2F0dGFjaF9jb21tb24oJmh3 bmEtPnVwKSkgewotCQlmcmVlKGh3bmEsIE1fREVWQlVGKTsKKwkJbm1fb3NfZnJlZShod25hKTsK IAkJZ290byBmYWlsOwogCX0KIAluZXRtYXBfYWRhcHRlcl9nZXQoJmh3bmEtPnVwKTsKIAorCU5N X0FUVEFDSF9OQShpZnAsICZod25hLT51cCk7CisKICNpZmRlZiBsaW51eAogCWlmIChpZnAtPm5l dGRldl9vcHMpIHsKIAkJLyogcHJlcGFyZSBhIGNsb25lIG9mIHRoZSBuZXRkZXYgb3BzICovCkBA IC0yNzYyLDcgKzI4ODAsNyBAQAogCQlod25hLT5ubV9uZG8ubmRvX3N0YXJ0X3htaXQgPSBpZnAt Pm5ldGRldl9vcHM7CiAjZWxzZQogCQlod25hLT5ubV9uZG8gPSAqaWZwLT5uZXRkZXZfb3BzOwot I2VuZGlmCisjZW5kaWYgLyogTkVUTUFQX0xJTlVYX0hBVkVfTkVUREVWX09QUyAqLwogCX0KIAlo d25hLT5ubV9uZG8ubmRvX3N0YXJ0X3htaXQgPSBsaW51eF9uZXRtYXBfc3RhcnRfeG1pdDsKIAlp ZiAoaWZwLT5ldGh0b29sX29wcykgewpAQCAtMjc3MSwxMSArMjg4OSwxNCBAQAogCWh3bmEtPm5t X2V0by5zZXRfcmluZ3BhcmFtID0gbGludXhfbmV0bWFwX3NldF9yaW5ncGFyYW07CiAjaWZkZWYg TkVUTUFQX0xJTlVYX0hBVkVfU0VUX0NIQU5ORUxTCiAJaHduYS0+bm1fZXRvLnNldF9jaGFubmVs cyA9IGxpbnV4X25ldG1hcF9zZXRfY2hhbm5lbHM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRNQVBf TElOVVhfSEFWRV9TRVRfQ0hBTk5FTFMgKi8KIAlpZiAoYXJnLT5ubV9jb25maWcgPT0gTlVMTCkg ewogCQlod25hLT51cC5ubV9jb25maWcgPSBuZXRtYXBfbGludXhfY29uZmlnOwogCX0KICNlbmRp ZiAvKiBsaW51eCAqLworCWlmIChhcmctPm5tX2R0b3IgPT0gTlVMTCkgeworCQlod25hLT51cC5u bV9kdG9yID0gbmV0bWFwX2h3X2R0b3I7CisJfQogCiAJaWZfcHJpbnRmKGlmcCwgIm5ldG1hcCBx dWV1ZXMvc2xvdHM6IFRYICVkLyVkLCBSWCAlZC8lZFxuIiwKIAkgICAgaHduYS0+dXAubnVtX3R4 X3JpbmdzLCBod25hLT51cC5udW1fdHhfZGVzYywKQEAgLTI3ODQsMTIgKzI5MDUsNTQgQEAKIAog ZmFpbDoKIAlEKCJmYWlsLCBhcmcgJXAgaWZwICVwIG5hICVwIiwgYXJnLCBpZnAsIGh3bmEpOwot CWlmIChpZnApCi0JCW5ldG1hcF9kZXRhY2goaWZwKTsKIAlyZXR1cm4gKGh3bmEgPyBFSU5WQUwg OiBFTk9NRU0pOwogfQogCiAKK2ludAorbmV0bWFwX2F0dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0 ZXIgKmFyZykKK3sKKwlyZXR1cm4gX25ldG1hcF9hdHRhY2goYXJnLCBzaXplb2Yoc3RydWN0IG5l dG1hcF9od19hZGFwdGVyKSk7Cit9CisKKworI2lmZGVmIFdJVEhfUFRORVRNQVBfR1VFU1QKK2lu dAorbmV0bWFwX3B0X2d1ZXN0X2F0dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmFyZywgdm9p ZCAqY3NiLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5pZnBfb2Zmc2V0LCB1bnNpZ25lZCBpbnQg bWVtaWQpCit7CisJc3RydWN0IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICpwdG5hOworCXN0cnVj dCBpZm5ldCAqaWZwID0gYXJnID8gYXJnLT5pZnAgOiBOVUxMOworCWludCBlcnJvcjsKKworCS8q IGdldCBhbGxvY2F0b3IgKi8KKwlhcmctPm5tX21lbSA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfbmV3 KGlmcCwgbmlmcF9vZmZzZXQsIG1lbWlkKTsKKwlpZiAoYXJnLT5ubV9tZW0gPT0gTlVMTCkKKwkJ cmV0dXJuIEVOT01FTTsKKwlhcmctPm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7CisJZXJyb3Ig PSBfbmV0bWFwX2F0dGFjaChhcmcsIHNpemVvZihzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0 ZXIpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCS8qIGdldCB0aGUgbmV0bWFw X3B0X2d1ZXN0X2FkYXB0ZXIgKi8KKwlwdG5hID0gKHN0cnVjdCBuZXRtYXBfcHRfZ3Vlc3RfYWRh cHRlciAqKSBOQShpZnApOworCXB0bmEtPmNzYiA9IGNzYjsKKworCS8qIEluaXRpYWxpemUgYSBz ZXBhcmF0ZSBwYXNzLXRocm91Z2ggbmV0bWFwIGFkYXB0ZXIgdGhhdCBpcyBnb2luZyB0bworCSAq IGJlIHVzZWQgYnkgdGhlIHB0bmV0IGRyaXZlciBvbmx5LCBhbmQgc28gbmV2ZXIgZXhwb3NlZCB0 byBuZXRtYXAKKyAgICAgICAgICogYXBwbGljYXRpb25zLiBXZSBvbmx5IG5lZWQgYSBzdWJzZXQg b2YgdGhlIGF2YWlsYWJsZSBmaWVsZHMuICovCisJbWVtc2V0KCZwdG5hLT5kciwgMCwgc2l6ZW9m KHB0bmEtPmRyKSk7CisJcHRuYS0+ZHIudXAuaWZwID0gaWZwOworCXB0bmEtPmRyLnVwLm5tX21l bSA9IG5ldG1hcF9tZW1fZ2V0KHB0bmEtPmh3dXAudXAubm1fbWVtKTsKKyAgICAgICAgcHRuYS0+ ZHIudXAubm1fY29uZmlnID0gcHRuYS0+aHd1cC51cC5ubV9jb25maWc7CisKKwlwdG5hLT5iYWNr ZW5kX3JlZ2lmcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQ X0dVRVNUICovCisKKwogdm9pZAogTk1fREJHKG5ldG1hcF9hZGFwdGVyX2dldCkoc3RydWN0IG5l dG1hcF9hZGFwdGVyICpuYSkKIHsKQEAgLTI4NDEsMjggKzMwMDQsMjkgQEAKIG5ldG1hcF9kZXRh Y2goc3RydWN0IGlmbmV0ICppZnApCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IE5B KGlmcCk7Ci0JaW50IHNraXA7CiAKIAlpZiAoIW5hKQogCQlyZXR1cm47CiAKLQlza2lwID0gMDsK IAlOTUdfTE9DSygpOwotCW5ldG1hcF9kaXNhYmxlX2FsbF9yaW5ncyhpZnApOwotCW5hLT5pZnAg PSBOVUxMOwotCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwluZXRtYXBfc2V0X2Fs bF9yaW5ncyhuYSwgTk1fS1JfTE9DS0VEKTsKKwluYS0+bmFfZmxhZ3MgfD0gTkFGX1pPTUJJRTsK IAkvKgogCSAqIGlmIHRoZSBuZXRtYXAgYWRhcHRlciBpcyBub3QgbmF0aXZlLCBzb21lYm9keQog CSAqIGNoYW5nZWQgaXQsIHNvIHdlIGNhbiBub3QgcmVsZWFzZSBpdCBoZXJlLgotCSAqIFRoZSBO VUxMIG5hLT5pZnAgd2lsbCBub3RpZnkgdGhlIG5ldyBvd25lciB0aGF0CisJICogVGhlIE5BRl9a T01CSUUgZmxhZyB3aWxsIG5vdGlmeSB0aGUgbmV3IG93bmVyIHRoYXQKIAkgKiB0aGUgZHJpdmVy IGlzIGdvbmUuCiAJICovCiAJaWYgKG5hLT5uYV9mbGFncyAmIE5BRl9OQVRJVkUpIHsKLQkJc2tp cCA9IG5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CisJICAgICAgICBuZXRtYXBfYWRhcHRlcl9wdXQo bmEpOwogCX0KLQkvKiBnaXZlIHRoZW0gYSBjaGFuY2UgdG8gbm90aWNlICovCi0JaWYgKHNraXAg PT0gMCkKLQkJbmV0bWFwX2VuYWJsZV9hbGxfcmluZ3MoaWZwKTsKKwkvKiBnaXZlIGFjdGl2ZSB1 c2VycyBhIGNoYW5jZSB0byBub3RpY2UgdGhhdCBOQUZfWk9NQklFIGhhcyBiZWVuCisJICogdHVy bmVkIG9uLCBzbyB0aGF0IHRoZXkgY2FuIHN0b3AgYW5kIHJldHVybiBhbiBlcnJvciB0byB1c2Vy c3BhY2UuCisJICogTm90ZSB0aGF0IHRoaXMgYmVjb21lcyBhIE5PUCBpZiB0aGVyZSBhcmUgbm8g YWN0aXZlIHVzZXJzIGFuZCwKKwkgKiB0aGVyZWZvcmUsIHRoZSBwdXQoKSBhYm92ZSBoYXMgZGVs ZXRlZCB0aGUgbmEsIHNpbmNlIG5vdyBOQShpZnApIGlzCisJICogTlVMTC4KKwkgKi8KKwluZXRt YXBfZW5hYmxlX2FsbF9yaW5ncyhpZnApOwogCU5NR19VTkxPQ0soKTsKIH0KIApAQCAtMjg4Myw5 ICszMDQ3LDEwIEBACiBuZXRtYXBfdHJhbnNtaXQoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBt YnVmICptKQogewogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShpZnApOwotCXN0cnVj dCBuZXRtYXBfa3JpbmcgKmtyaW5nOworCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCAqdHhf a3Jpbmc7CiAJdV9pbnQgbGVuID0gTUJVRl9MRU4obSk7CiAJdV9pbnQgZXJyb3IgPSBFTk9CVUZT OworCXVuc2lnbmVkIGludCB0eHI7CiAJc3RydWN0IG1icSAqcTsKIAlpbnQgc3BhY2U7CiAKQEAg LTI5MDAsNiArMzA2NSwxNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJdHhyID0gTUJVRl9UWFEo bSk7CisJaWYgKHR4ciA+PSBuYS0+bnVtX3R4X3JpbmdzKSB7CisJCXR4ciAlPSBuYS0+bnVtX3R4 X3JpbmdzOworCX0KKwl0eF9rcmluZyA9ICZOTVIobmEsIE5SX1RYKVt0eHJdOworCisJaWYgKHR4 X2tyaW5nLT5ucl9tb2RlID09IE5LUl9ORVRNQVBfT0ZGKSB7CisJCXJldHVybiBNQlVGX1RSQU5T TUlUKG5hLCBpZnAsIG0pOworCX0KKwogCXEgPSAma3JpbmctPnJ4X3F1ZXVlOwogCiAJLy8gWFhY IHJlY29uc2lkZXIgbG9uZyBwYWNrZXRzIGlmIHdlIGhhbmRsZSBmcmFnbWVudHMKQEAgLTI5MDks NiArMzA4NCwxMSBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKG5tX29zX21idWZfaGFzX29m ZmxkKG0pKSB7CisJCVJEKDEsICIlcyBkcm9wIG1idWYgcmVxdWlyaW5nIG9mZmxvYWRpbmdzIiwg bmEtPm5hbWUpOworCQlnb3RvIGRvbmU7CisJfQorCiAJLyogcHJvdGVjdCBhZ2FpbnN0IHJ4c3lu Y19mcm9tX2hvc3QoKSwgbmV0bWFwX3N3X3RvX25pYygpCiAJICogYW5kIG1heWJlIG90aGVyIGlu c3RhbmNlcyBvZiBuZXRtYXBfdHJhbnNtaXQgKHRoZSBsYXR0ZXIKIAkgKiBub3QgcG9zc2libGUg b24gTGludXgpLgpAQCAtMjk1MSw2ICszMTMxLDggQEAKICAqIG5ldG1hcF9yZXNldCgpIGlzIGNh bGxlZCBieSB0aGUgZHJpdmVyIHJvdXRpbmVzIHdoZW4gcmVpbml0aWFsaXppbmcKICAqIGEgcmlu Zy4gVGhlIGRyaXZlciBpcyBpbiBjaGFyZ2Ugb2YgbG9ja2luZyB0byBwcm90ZWN0IHRoZSBrcmlu Zy4KICAqIElmIG5hdGl2ZSBuZXRtYXAgbW9kZSBpcyBub3Qgc2V0IGp1c3QgcmV0dXJuIE5VTEwu CisgKiBJZiBuYXRpdmUgbmV0bWFwIG1vZGUgaXMgc2V0LCBpbiBwYXJ0aWN1bGFyLCB3ZSBoYXZl IHRvIHNldCBucl9tb2RlIHRvCisgKiBOS1JfTkVUTUFQX09OLgogICovCiBzdHJ1Y3QgbmV0bWFw X3Nsb3QgKgogbmV0bWFwX3Jlc2V0KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGVudW0gdHhy eCB0eCwgdV9pbnQgbiwKQEAgLTI5NzUsMTMgKzMxNTcsMjYgQEAKIAlpZiAodHggPT0gTlJfVFgp IHsKIAkJaWYgKG4gPj0gbmEtPm51bV90eF9yaW5ncykKIAkJCXJldHVybiBOVUxMOworCiAJCWty aW5nID0gbmEtPnR4X3JpbmdzICsgbjsKKworCQlpZiAoa3JpbmctPm5yX3BlbmRpbmdfbW9kZSA9 PSBOS1JfTkVUTUFQX09GRikgeworCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsK KwkJCXJldHVybiBOVUxMOworCQl9CisKIAkJLy8gWFhYIGNoZWNrIHdoZXRoZXIgd2Ugc2hvdWxk IHVzZSBod2N1ciBvciByY3VyCiAJCW5ld19od29mcyA9IGtyaW5nLT5ucl9od2N1ciAtIG5ld19j dXI7CiAJfSBlbHNlIHsKIAkJaWYgKG4gPj0gbmEtPm51bV9yeF9yaW5ncykKIAkJCXJldHVybiBO VUxMOwogCQlrcmluZyA9IG5hLT5yeF9yaW5ncyArIG47CisKKwkJaWYgKGtyaW5nLT5ucl9wZW5k aW5nX21vZGUgPT0gTktSX05FVE1BUF9PRkYpIHsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05F VE1BUF9PRkY7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCiAJCW5ld19od29mcyA9IGtyaW5nLT5u cl9od3RhaWwgLSBuZXdfY3VyOwogCX0KIAlsaW0gPSBrcmluZy0+bmtyX251bV9zbG90cyAtIDE7 CkBAIC0zMDE4LDYgKzMyMTMsNyBAQAogCSAqIFdlIGRvIHRoZSB3YWtldXAgaGVyZSwgYnV0IHRo ZSByaW5nIGlzIG5vdCB5ZXQgcmVjb25maWd1cmVkLgogCSAqIEhvd2V2ZXIsIHdlIGFyZSB1bmRl ciBsb2NrIHNvIHRoZXJlIGFyZSBubyByYWNlcy4KIAkgKi8KKwlrcmluZy0+bnJfbW9kZSA9IE5L Ul9ORVRNQVBfT047CiAJa3JpbmctPm5tX25vdGlmeShrcmluZywgMCk7CiAJcmV0dXJuIGtyaW5n LT5yaW5nLT5zbG90OwogfQpAQCAtMzAzNywxMCArMzIzMyw5IEBACiAgKiAtIGZvciBhIG5pYyBj b25uZWN0ZWQgdG8gYSBzd2l0Y2gsIGNhbGwgdGhlIHByb3BlciBmb3J3YXJkaW5nIHJvdXRpbmUK ICAqICAgKHNlZSBuZXRtYXBfYndyYXBfaW50cl9ub3RpZnkpCiAgKi8KLXZvaWQKLW5ldG1hcF9j b21tb25faXJxKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2ludCBxLCB1X2ludCAqd29ya19kb25lKQor aW50CituZXRtYXBfY29tbW9uX2lycShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBx LCB1X2ludCAqd29ya19kb25lKQogewotCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShp ZnApOwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nOwogCWVudW0gdHhyeCB0ID0gKHdvcmtf ZG9uZSA/IE5SX1JYIDogTlJfVFgpOwogCkBAIC0zMDUxLDE1ICszMjQ2LDIwIEBACiAJfQogCiAJ aWYgKHEgPj0gbm1hX2dldF9ucmluZ3MobmEsIHQpKQotCQlyZXR1cm47CS8vIG5vdCBhIHBoeXNp Y2FsIHF1ZXVlCisJCXJldHVybiBOTV9JUlFfUEFTUzsgLy8gbm90IGEgcGh5c2ljYWwgcXVldWUK IAogCWtyaW5nID0gTk1SKG5hLCB0KSArIHE7CiAKKwlpZiAoa3JpbmctPm5yX21vZGUgPT0gTktS X05FVE1BUF9PRkYpIHsKKwkJcmV0dXJuIE5NX0lSUV9QQVNTOworCX0KKwogCWlmICh0ID09IE5S X1JYKSB7CiAJCWtyaW5nLT5ucl9rZmxhZ3MgfD0gTktSX1BFTkRJTlRSOwkvLyBYWFggYXRvbWlj ID8KIAkJKndvcmtfZG9uZSA9IDE7IC8qIGRvIG5vdCBmaXJlIG5hcGkgYWdhaW4gKi8KIAl9Ci0J a3JpbmctPm5tX25vdGlmeShrcmluZywgMCk7CisKKwlyZXR1cm4ga3JpbmctPm5tX25vdGlmeShr cmluZywgMCk7CiB9CiAKIApAQCAtMzA2NywxNyArMzI2NywxNyBAQAogICogRGVmYXVsdCBmdW5j dGlvbnMgdG8gaGFuZGxlIHJ4L3R4IGludGVycnVwdHMgZnJvbSBhIHBoeXNpY2FsIGRldmljZS4K ICAqICJ3b3JrX2RvbmUiIGlzIG5vbi1udWxsIG9uIHRoZSBSWCBwYXRoLCBOVUxMIGZvciB0aGUg VFggcGF0aC4KICAqCi0gKiBJZiB0aGUgY2FyZCBpcyBub3QgaW4gbmV0bWFwIG1vZGUsIHNpbXBs eSByZXR1cm4gMCwKKyAqIElmIHRoZSBjYXJkIGlzIG5vdCBpbiBuZXRtYXAgbW9kZSwgc2ltcGx5 IHJldHVybiBOTV9JUlFfUEFTUywKICAqIHNvIHRoYXQgdGhlIGNhbGxlciBwcm9jZWVkcyB3aXRo IHJlZ3VsYXIgcHJvY2Vzc2luZy4KLSAqIE90aGVyd2lzZSBjYWxsIG5ldG1hcF9jb21tb25faXJx KCkgYW5kIHJldHVybiAxLgorICogT3RoZXJ3aXNlIGNhbGwgbmV0bWFwX2NvbW1vbl9pcnEoKS4K ICAqCiAgKiBJZiB0aGUgY2FyZCBpcyBjb25uZWN0ZWQgdG8gYSBuZXRtYXAgZmlsZSBkZXNjcmlw dG9yLAogICogZG8gYSBzZWx3YWtldXAgb24gdGhlIGluZGl2aWR1YWwgcXVldWUsIHBsdXMgb25l IG9uIHRoZSBnbG9iYWwgb25lCiAgKiBpZiBuZWVkZWQgKG11bHRpcXVldWUgY2FyZCBfYW5kXyB0 aGVyZSBhcmUgbXVsdGlxdWV1ZSBsaXN0ZW5lcnMpLAotICogYW5kIHJldHVybiAxLgorICogYW5k IHJldHVybiBOUl9JUlFfQ09NUExFVEVELgogICoKICAqIEZpbmFsbHksIGlmIGNhbGxlZCBvbiBy eCBmcm9tIGFuIGludGVyZmFjZSBjb25uZWN0ZWQgdG8gYSBzd2l0Y2gsCi0gKiBjYWxscyB0aGUg cHJvcGVyIGZvcndhcmRpbmcgcm91dGluZSwgYW5kIHJldHVybiAxLgorICogY2FsbHMgdGhlIHBy b3BlciBmb3J3YXJkaW5nIHJvdXRpbmUuCiAgKi8KIGludAogbmV0bWFwX3J4X2lycShzdHJ1Y3Qg aWZuZXQgKmlmcCwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSkKQEAgLTMwOTEsMTUgKzMyOTEs MTQgQEAKIAkgKiBubV9uYXRpdmVfb24oKSBoZXJlLgogCSAqLwogCWlmICghbm1fbmV0bWFwX29u KG5hKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOTV9JUlFfUEFTUzsKIAogCWlmIChuYS0+bmFf ZmxhZ3MgJiBOQUZfU0tJUF9JTlRSKSB7CiAJCU5EKCJ1c2UgcmVndWxhciBpbnRlcnJ1cHQiKTsK LQkJcmV0dXJuIDA7CisJCXJldHVybiBOTV9JUlFfUEFTUzsKIAl9CiAKLQluZXRtYXBfY29tbW9u X2lycShpZnAsIHEsIHdvcmtfZG9uZSk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIG5ldG1hcF9jb21t b25faXJxKG5hLCBxLCB3b3JrX2RvbmUpOwogfQogCiAKQEAgLTMxMjAsOSArMzMxOSwxMSBAQAog dm9pZAogbmV0bWFwX2Zpbmkodm9pZCkKIHsKLQluZXRtYXBfdW5pbml0X2JyaWRnZXMoKTsKIAlp ZiAobmV0bWFwX2RldikKIAkJZGVzdHJveV9kZXYobmV0bWFwX2Rldik7CisJLyogd2UgYXNzdW1l IHRoYXQgdGhlcmUgYXJlIG5vIGxvbmdlciBuZXRtYXAgdXNlcnMgKi8KKwlubV9vc19pZm5ldF9m aW5pKCk7CisJbmV0bWFwX3VuaW5pdF9icmlkZ2VzKCk7CiAJbmV0bWFwX21lbV9maW5pKCk7CiAJ Tk1HX0xPQ0tfREVTVFJPWSgpOwogCXByaW50ZigibmV0bWFwOiB1bmxvYWRlZCBtb2R1bGUuXG4i KTsKQEAgLTMxNTUsOSArMzM1NiwxMyBAQAogCQlnb3RvIGZhaWw7CiAKICNpZmRlZiBfX0ZyZWVC U0RfXwotCW5tX3ZpX2luaXRfaW5kZXgoKTsKKwlubV9vc192aV9pbml0X2luZGV4KCk7CiAjZW5k aWYKIAorCWVycm9yID0gbm1fb3NfaWZuZXRfaW5pdCgpOworCWlmIChlcnJvcikKKwkJZ290byBm YWlsOworCiAJcHJpbnRmKCJuZXRtYXA6IGxvYWRlZCBtb2R1bGVcbiIpOwogCXJldHVybiAoMCk7 CiBmYWlsOgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2ZyZWVi c2QuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZnJlZWJzZC5jCi0tLSB1c3Ivc3Jj L3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAw MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMJ MjAxNi0xMS0yMyAxNjo1Nzo1Ny44NDg3MTAwMDAgKzAwMDAKQEAgLTIzLDE4ICsyMywxOSBAQAog ICogU1VDSCBEQU1BR0UuCiAgKi8KIAotLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9kZXYv bmV0bWFwL25ldG1hcF9mcmVlYnNkLmMgMjg1Njk5IDIwMTUtMDctMTkgMTg6MDc6MjVaIGx1aWdp ICQgKi8KKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMg MzA3NzA2IDIwMTYtMTAtMjEgMDY6MzI6NDVaIHNlcGhlICQgKi8KICNpbmNsdWRlICJvcHRfaW5l dC5oIgogI2luY2x1ZGUgIm9wdF9pbmV0Ni5oIgogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj aW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgogI2luY2x1ZGUg PHN5cy9lcnJuby5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAgLyogZGVmaW5lcyB1c2VkIGlu IGtlcm5lbC5oICovCisjaW5jbHVkZSA8c3lzL2phaWwuaD4KICNpbmNsdWRlIDxzeXMvcG9sbC5o PiAgLyogUE9MTElOLCBQT0xMT1VUICovCiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPiAvKiB0eXBl cyB1c2VkIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwotI2luY2x1ZGUgPHN5cy9jb25mLmg+ CS8qIERFVl9NT0RVTEUgKi8KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgkvKiBERVZfTU9EVUxFX09S REVSRUQgKi8KICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGxz dWJyLmg+IC8qIGtlcm5faW9jdGwoKSAqLwogCiAjaW5jbHVkZSA8c3lzL3J3bG9jay5oPgogCkBA IC01MCw2ICs1MSwxMSBAQAogI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KICNpbmNsdWRlIDxzeXMv c29ja2V0Lmg+IC8qIHNvY2thZGRycyAqLwogI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+CisjaW5j bHVkZSA8c3lzL2t0aHJlYWQuaD4gLyoga3RocmVhZF9hZGQoKSAqLworI2luY2x1ZGUgPHN5cy9w cm9jLmg+IC8qIFBST0NfTE9DSygpICovCisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPiAvKiBSRk5P V0FJVCAqLworI2luY2x1ZGUgPHN5cy9zY2hlZC5oPiAvKiBzY2hlZF9iaW5kKCkgKi8KKyNpbmNs dWRlIDxzeXMvc21wLmg+IC8qIG1wX21heGlkICovCiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjaW5j bHVkZSA8bmV0L2lmX3Zhci5oPgogI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPiAvKiBJRlRfRVRI RVIgKi8KQEAgLTYxLDEzICs2NywxMTIgQEAKIAogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNp bmNsdWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92 aXJ0Lmg+CiAjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oPgogCiAKIC8qID09PT09 PT09PT09PT09PT09PT09PT09PSBGUkVFQlNELVNQRUNJRklDIFJPVVRJTkVTID09PT09PT09PT09 PT09PT09PSAqLwogCit2b2lkIG5tX29zX3NlbGluZm9faW5pdChOTV9TRUxJTkZPX1QgKnNpKSB7 CisJc3RydWN0IG10eCAqbSA9ICZzaS0+bTsKKwltdHhfaW5pdChtLCAibm1fa25fbG9jayIsIE5V TEwsIE1UWF9ERUYpOworCWtubGlzdF9pbml0X210eCgmc2ktPnNpLnNpX25vdGUsIG0pOworfQor Cit2b2lkCitubV9vc19zZWxpbmZvX3VuaW5pdChOTV9TRUxJTkZPX1QgKnNpKQoreworCS8qIFhY WCBrcXVldWUoOSkgbmVlZGVkOyB0aGVzZSB3aWxsIG1pcnJvciBrbmxpc3RfaW5pdC4gKi8KKwlr bmxpc3RfZGVsZXRlKCZzaS0+c2kuc2lfbm90ZSwgY3VydGhyZWFkLCAwIC8qIG5vdCBsb2NrZWQg Ki8gKTsKKwlrbmxpc3RfZGVzdHJveSgmc2ktPnNpLnNpX25vdGUpOworCS8qIG5vdyB3ZSBkb24n dCBuZWVkIHRoZSBtdXRleCBhbnltb3JlICovCisJbXR4X2Rlc3Ryb3koJnNpLT5tKTsKK30KKwor dm9pZCAqCitubV9vc19tYWxsb2Moc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIG1hbGxvYyhzaXpl LCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworfQorCit2b2lkICoKK25tX29zX3JlYWxs b2Modm9pZCAqYWRkciwgc2l6ZV90IG5ld19zaXplLCBzaXplX3Qgb2xkX3NpemUgX191bnVzZWQp Cit7CisJcmV0dXJuIHJlYWxsb2MoYWRkciwgbmV3X3NpemUsIE1fREVWQlVGLCBNX05PV0FJVCB8 IE1fWkVSTyk7CQorfQorCit2b2lkCitubV9vc19mcmVlKHZvaWQgKmFkZHIpCit7CisJZnJlZShh ZGRyLCBNX0RFVkJVRik7Cit9CisKK3ZvaWQKK25tX29zX2lmbmV0X2xvY2sodm9pZCkKK3sKKwlJ Rk5FVF9XTE9DSygpOworfQorCit2b2lkCitubV9vc19pZm5ldF91bmxvY2sodm9pZCkKK3sKKwlJ Rk5FVF9XVU5MT0NLKCk7Cit9CisKK3N0YXRpYyBpbnQgbmV0bWFwX3VzZV9jb3VudCA9IDA7CisK K3ZvaWQKK25tX29zX2dldF9tb2R1bGUodm9pZCkKK3sKKwluZXRtYXBfdXNlX2NvdW50Kys7Cit9 CisKK3ZvaWQKK25tX29zX3B1dF9tb2R1bGUodm9pZCkKK3sKKwluZXRtYXBfdXNlX2NvdW50LS07 Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfaWZuZXRfYXJyaXZhbF9oYW5kbGVyKHZvaWQgKmFy ZyBfX3VudXNlZCwgc3RydWN0IGlmbmV0ICppZnApCit7CisgICAgICAgIG5ldG1hcF91bmRvX3pv bWJpZShpZnApOworfQorCitzdGF0aWMgdm9pZAorbmV0bWFwX2lmbmV0X2RlcGFydHVyZV9oYW5k bGVyKHZvaWQgKmFyZyBfX3VudXNlZCwgc3RydWN0IGlmbmV0ICppZnApCit7CisgICAgICAgIG5l dG1hcF9tYWtlX3pvbWJpZShpZnApOworfQorCitzdGF0aWMgZXZlbnRoYW5kbGVyX3RhZyBubV9p Zm5ldF9haF90YWc7CitzdGF0aWMgZXZlbnRoYW5kbGVyX3RhZyBubV9pZm5ldF9kaF90YWc7CisK K2ludAorbm1fb3NfaWZuZXRfaW5pdCh2b2lkKQoreworICAgICAgICBubV9pZm5ldF9haF90YWcg PQorICAgICAgICAgICAgICAgIEVWRU5USEFORExFUl9SRUdJU1RFUihpZm5ldF9hcnJpdmFsX2V2 ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgbmV0bWFwX2lmbmV0X2Fycml2YWxfaGFuZGxl ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIEVWRU5USEFORExFUl9QUklfQU5ZKTsK KyAgICAgICAgbm1faWZuZXRfZGhfdGFnID0KKyAgICAgICAgICAgICAgICBFVkVOVEhBTkRMRVJf UkVHSVNURVIoaWZuZXRfZGVwYXJ0dXJlX2V2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg bmV0bWFwX2lmbmV0X2RlcGFydHVyZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgRVZFTlRIQU5ETEVSX1BSSV9BTlkpOworICAgICAgICByZXR1cm4gMDsKK30KKwordm9p ZAorbm1fb3NfaWZuZXRfZmluaSh2b2lkKQoreworICAgICAgICBFVkVOVEhBTkRMRVJfREVSRUdJ U1RFUihpZm5ldF9hcnJpdmFsX2V2ZW50LAorICAgICAgICAgICAgICAgIG5tX2lmbmV0X2FoX3Rh Zyk7CisgICAgICAgIEVWRU5USEFORExFUl9ERVJFR0lTVEVSKGlmbmV0X2RlcGFydHVyZV9ldmVu dCwKKyAgICAgICAgICAgICAgICBubV9pZm5ldF9kaF90YWcpOworfQorCiByYXdzdW1fdAotbm1f Y3N1bV9yYXcodWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSkKK25t X29zX2NzdW1fcmF3KHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4sIHJhd3N1bV90IGN1cl9zdW0p CiB7CiAJLyogVE9ETyBYWFggcGxlYXNlIHVzZSB0aGUgRnJlZUJTRCBpbXBsZW1lbnRhdGlvbiBm b3IgdGhpcy4gKi8KIAl1aW50MTZfdCAqd29yZHMgPSAodWludDE2X3QgKilkYXRhOwpAQCAtODcs NyArMTkyLDcgQEAKICAqIHJldHVybiB2YWx1ZSBpcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCiAg Ki8KIHVpbnQxNl90Ci1ubV9jc3VtX2ZvbGQocmF3c3VtX3QgY3VyX3N1bSkKK25tX29zX2NzdW1f Zm9sZChyYXdzdW1fdCBjdXJfc3VtKQogewogCS8qIFRPRE8gWFhYIHBsZWFzZSB1c2UgdGhlIEZy ZWVCU0QgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMuICovCiAJd2hpbGUgKGN1cl9zdW0gPj4gMTYp CkBAIC05NiwxNyArMjAxLDE3IEBACiAJcmV0dXJuIGh0b2JlMTYoKH5jdXJfc3VtKSAmIDB4RkZG Rik7CiB9CiAKLXVpbnQxNl90IG5tX2NzdW1faXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCkKK3Vp bnQxNl90IG5tX29zX2NzdW1faXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCkKIHsKICNpZiAwCiAJ cmV0dXJuIGluX2Nrc3VtX2hkcigodm9pZCAqKWlwaCk7CiAjZWxzZQotCXJldHVybiBubV9jc3Vt X2ZvbGQobm1fY3N1bV9yYXcoKHVpbnQ4X3QqKWlwaCwgc2l6ZW9mKHN0cnVjdCBubV9pcGhkciks IDApKTsKKwlyZXR1cm4gbm1fb3NfY3N1bV9mb2xkKG5tX29zX2NzdW1fcmF3KCh1aW50OF90Kilp cGgsIHNpemVvZihzdHJ1Y3Qgbm1faXBoZHIpLCAwKSk7CiAjZW5kaWYKIH0KIAogdm9pZAotbm1f Y3N1bV90Y3B1ZHBfaXB2NChzdHJ1Y3Qgbm1faXBoZHIgKmlwaCwgdm9pZCAqZGF0YSwKK25tX29z X2NzdW1fdGNwdWRwX2lwdjQoc3RydWN0IG5tX2lwaGRyICppcGgsIHZvaWQgKmRhdGEsCiAJCQkJ CXNpemVfdCBkYXRhbGVuLCB1aW50MTZfdCAqY2hlY2spCiB7CiAjaWZkZWYgSU5FVApAQCAtMTE4 LDcgKzIyMyw3IEBACiAJLyogQ29tcHV0ZSB0aGUgY2hlY2tzdW0gb24gVENQL1VEUCBoZWFkZXIg KyBwYXlsb2FkCiAJICogKGluY2x1ZGVzIHRoZSBwc2V1ZG8taGVhZGVyKS4KIAkgKi8KLQkqY2hl Y2sgPSBubV9jc3VtX2ZvbGQobm1fY3N1bV9yYXcoZGF0YSwgZGF0YWxlbiwgMCkpOworCSpjaGVj ayA9IG5tX29zX2NzdW1fZm9sZChubV9vc19jc3VtX3JhdyhkYXRhLCBkYXRhbGVuLCAwKSk7CiAj ZWxzZQogCXN0YXRpYyBpbnQgbm90c3VwcG9ydGVkID0gMDsKIAlpZiAoIW5vdHN1cHBvcnRlZCkg ewpAQCAtMTI5LDEyICsyMzQsMTIgQEAKIH0KIAogdm9pZAotbm1fY3N1bV90Y3B1ZHBfaXB2Nihz dHJ1Y3Qgbm1faXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKK25tX29zX2NzdW1fdGNwdWRwX2lw djYoc3RydWN0IG5tX2lwdjZoZHIgKmlwNmgsIHZvaWQgKmRhdGEsCiAJCQkJCXNpemVfdCBkYXRh bGVuLCB1aW50MTZfdCAqY2hlY2spCiB7CiAjaWZkZWYgSU5FVDYKIAkqY2hlY2sgPSBpbjZfY2tz dW1fcHNldWRvKCh2b2lkKilpcDZoLCBkYXRhbGVuLCBpcDZoLT5uZXh0aGRyLCAwKTsKLQkqY2hl Y2sgPSBubV9jc3VtX2ZvbGQobm1fY3N1bV9yYXcoZGF0YSwgZGF0YWxlbiwgMCkpOworCSpjaGVj ayA9IG5tX29zX2NzdW1fZm9sZChubV9vc19jc3VtX3JhdyhkYXRhLCBkYXRhbGVuLCAwKSk7CiAj ZWxzZQogCXN0YXRpYyBpbnQgbm90c3VwcG9ydGVkID0gMDsKIAlpZiAoIW5vdHN1cHBvcnRlZCkg ewpAQCAtMTQ0LDEzICsyNDksNDEgQEAKICNlbmRpZgogfQogCisvKiBvbiBGcmVlQlNEIHdlIHNl bmQgdXAgb25lIHBhY2tldCBhdCBhIHRpbWUgKi8KK3ZvaWQgKgorbm1fb3Nfc2VuZF91cChzdHJ1 Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpwcmV2KQoreworCisJ TkEoaWZwKS0+aWZfaW5wdXQoaWZwLCBtKTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50CitubV9v c19tYnVmX2hhc19vZmZsZChzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlyZXR1cm4gbS0+bV9wa3RoZHIu Y3N1bV9mbGFncyAmIChDU1VNX1RDUCB8IENTVU1fVURQIHwgQ1NVTV9TQ1RQIHwKKwkJCQkJIENT VU1fVENQX0lQVjYgfCBDU1VNX1VEUF9JUFY2IHwKKwkJCQkJIENTVU1fU0NUUF9JUFY2IHwgQ1NV TV9UU08pOworfQorCitzdGF0aWMgdm9pZAorZnJlZWJzZF9nZW5lcmljX3J4X2hhbmRsZXIoc3Ry dWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptKQoreworCXN0cnVjdCBuZXRtYXBfZ2VuZXJp Y19hZGFwdGVyICpnbmEgPQorCQkJKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICopTkEo aWZwKTsKKwlpbnQgc3RvbGVuID0gZ2VuZXJpY19yeF9oYW5kbGVyKGlmcCwgbSk7CisKKwlpZiAo IXN0b2xlbikgeworCQlnbmEtPnNhdmVfaWZfaW5wdXQoaWZwLCBtKTsKKwl9Cit9CiAKIC8qCiAg KiBJbnRlcmNlcHQgdGhlIHJ4IHJvdXRpbmUgaW4gdGhlIHN0YW5kYXJkIGRldmljZSBkcml2ZXIu CiAgKiBTZWNvbmQgYXJndW1lbnQgaXMgbm9uLXplcm8gdG8gaW50ZXJjZXB0LCAwIHRvIHJlc3Rv cmUKICAqLwogaW50Ci1uZXRtYXBfY2F0Y2hfcngoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0 ZXIgKmduYSwgaW50IGludGVyY2VwdCkKK25tX29zX2NhdGNoX3J4KHN0cnVjdCBuZXRtYXBfZ2Vu ZXJpY19hZGFwdGVyICpnbmEsIGludCBpbnRlcmNlcHQpCiB7CiAJc3RydWN0IG5ldG1hcF9hZGFw dGVyICpuYSA9ICZnbmEtPnVwLnVwOwogCXN0cnVjdCBpZm5ldCAqaWZwID0gbmEtPmlmcDsKQEAg LTE2MSw3ICsyOTQsNyBAQAogCQkJcmV0dXJuIEVJTlZBTDsgLyogYWxyZWFkeSBzZXQgKi8KIAkJ fQogCQlnbmEtPnNhdmVfaWZfaW5wdXQgPSBpZnAtPmlmX2lucHV0OwotCQlpZnAtPmlmX2lucHV0 ID0gZ2VuZXJpY19yeF9oYW5kbGVyOworCQlpZnAtPmlmX2lucHV0ID0gZnJlZWJzZF9nZW5lcmlj X3J4X2hhbmRsZXI7CiAJfSBlbHNlIHsKIAkJaWYgKCFnbmEtPnNhdmVfaWZfaW5wdXQpewogCQkJ RCgiY2Fubm90IHJlc3RvcmUiKTsKQEAgLTE4MSwxOCArMzE0LDIwIEBACiAgKiBTZWNvbmQgYXJn dW1lbnQgaXMgbm9uLXplcm8gdG8gaW50ZXJjZXB0LCAwIHRvIHJlc3RvcmUuCiAgKiBPbiBmcmVl YnNkIHdlIGp1c3QgaW50ZXJjZXB0IGlmX3RyYW5zbWl0LgogICovCi12b2lkCi1uZXRtYXBfY2F0 Y2hfdHgoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSwgaW50IGVuYWJsZSkKK2lu dAorbm1fb3NfY2F0Y2hfdHgoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSwgaW50 IGludGVyY2VwdCkKIHsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gJmduYS0+dXAudXA7 CiAJc3RydWN0IGlmbmV0ICppZnAgPSBuZXRtYXBfZ2VuZXJpY19nZXRpZnAoZ25hKTsKIAotCWlm IChlbmFibGUpIHsKKwlpZiAoaW50ZXJjZXB0KSB7CiAJCW5hLT5pZl90cmFuc21pdCA9IGlmcC0+ aWZfdHJhbnNtaXQ7CiAJCWlmcC0+aWZfdHJhbnNtaXQgPSBuZXRtYXBfdHJhbnNtaXQ7CiAJfSBl bHNlIHsKIAkJaWZwLT5pZl90cmFuc21pdCA9IG5hLT5pZl90cmFuc21pdDsKIAl9CisKKwlyZXR1 cm4gMDsKIH0KIAogCkBAIC0yMTMsNDAgKzM0OCw0NCBAQAogICoKICAqLwogaW50Ci1nZW5lcmlj X3htaXRfZnJhbWUoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptLAotCXZvaWQgKmFk ZHIsIHVfaW50IGxlbiwgdV9pbnQgcmluZ19ucikKK25tX29zX2dlbmVyaWNfeG1pdF9mcmFtZShz dHJ1Y3Qgbm1fb3NfZ2VuX2FyZyAqYSkKIHsKIAlpbnQgcmV0OworCXVfaW50IGxlbiA9IGEtPmxl bjsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IGEtPmlmcDsKKwlzdHJ1Y3QgbWJ1ZiAqbSA9IGEtPm07 CiAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDExMDAwMDAKIAkvKgotCSAqIFRoZSBtYnVmIHNo b3VsZCBiZSBhIGNsdXN0ZXIgZnJvbSBvdXIgc3BlY2lhbCBwb29sLAotCSAqIHNvIHdlIGRvIG5v dCBuZWVkIHRvIGRvIGFuIG1fY29weWJhY2sgYnV0IGp1c3QgY29weQotCSAqIChhbmQgZXZlbnR1 YWxseSwganVzdCByZWZlcmVuY2UgdGhlIG5ldG1hcCBidWZmZXIpCisJICogT2xkIEZyZWVCU0Qg dmVyc2lvbnMuIFRoZSBtYnVmIGhhcyBhIGNsdXN0ZXIgYXR0YWNoZWQsCisJICogd2UgbmVlZCB0 byBjb3B5IGZyb20gdGhlIGNsdXN0ZXIgdG8gdGhlIG5ldG1hcCBidWZmZXIuCiAJICovCi0KLQlp ZiAoR0VUX01CVUZfUkVGQ05UKG0pICE9IDEpIHsKLQkJRCgiaW52YWxpZCByZWZjbnQgJWQgZm9y ICVwIiwKLQkJCUdFVF9NQlVGX1JFRkNOVChtKSwgbSk7CisJaWYgKE1CVUZfUkVGQ05UKG0pICE9 IDEpIHsKKwkJRCgiaW52YWxpZCByZWZjbnQgJWQgZm9yICVwIiwgTUJVRl9SRUZDTlQobSksIG0p OwogCQlwYW5pYygiaW4gZ2VuZXJpY194bWl0X2ZyYW1lIik7CiAJfQotCS8vIFhYWCB0aGUgZXh0 X3NpemUgY2hlY2sgaXMgdW5uZWNlc3NhcnkgaWYgd2UgbGluayB0aGUgbmV0bWFwIGJ1ZgogCWlm IChtLT5tX2V4dC5leHRfc2l6ZSA8IGxlbikgewogCQlSRCg1LCAic2l6ZSAlZCA8IGxlbiAlZCIs IG0tPm1fZXh0LmV4dF9zaXplLCBsZW4pOwogCQlsZW4gPSBtLT5tX2V4dC5leHRfc2l6ZTsKIAl9 Ci0JaWYgKDApIHsgLyogWFhYIHNlZW1zIHRvIGhhdmUgbmVnbGlnaWJsZSBiZW5lZml0cyAqLwot CQltLT5tX2V4dC5leHRfYnVmID0gbS0+bV9kYXRhID0gYWRkcjsKLQl9IGVsc2UgewotCQliY29w eShhZGRyLCBtLT5tX2RhdGEsIGxlbik7Ci0JfQorCWJjb3B5KGEtPmFkZHIsIG0tPm1fZGF0YSwg bGVuKTsKKyNlbHNlICAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisJLyogTmV3 IEZyZWVCU0QgdmVyc2lvbnMuIExpbmsgdGhlIGV4dGVybmFsIHN0b3JhZ2UgdG8KKwkgKiB0aGUg bmV0bWFwIGJ1ZmZlciwgc28gdGhhdCBubyBjb3B5IGlzIG5lY2Vzc2FyeS4gKi8KKwltLT5tX2V4 dC5leHRfYnVmID0gbS0+bV9kYXRhID0gYS0+YWRkcjsKKwltLT5tX2V4dC5leHRfc2l6ZSA9IGxl bjsKKyNlbmRpZiAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisKIAltLT5tX2xl biA9IG0tPm1fcGt0aGRyLmxlbiA9IGxlbjsKLQkvLyBpbmMgcmVmY291bnQuIEFsbCBvdXJzLCB3 ZSBjb3VsZCBza2lwIHRoZSBhdG9taWMKLQlhdG9taWNfZmV0Y2hhZGRfaW50KFBOVF9NQlVGX1JF RkNOVChtKSwgMSk7CisKKwkvKiBtYnVmIHJlZmNudCBpcyBub3QgY29udGVuZGVkLCBubyBuZWVk IHRvIHVzZSBhdG9taWMKKwkgKiAoYSBtZW1vcnkgYmFycmllciBpcyBlbm91Z2gpLiAqLworCVNF VF9NQlVGX1JFRkNOVChtLCAyKTsKIAlNX0hBU0hUWVBFX1NFVChtLCBNX0hBU0hUWVBFX09QQVFV RSk7Ci0JbS0+bV9wa3RoZHIuZmxvd2lkID0gcmluZ19ucjsKKwltLT5tX3BrdGhkci5mbG93aWQg PSBhLT5yaW5nX25yOwogCW0tPm1fcGt0aGRyLnJjdmlmID0gaWZwOyAvKiB1c2VkIGZvciB0eCBu b3RpZmljYXRpb24gKi8KIAlyZXQgPSBOQShpZnApLT5pZl90cmFuc21pdChpZnAsIG0pOwotCXJl dHVybiByZXQ7CisJcmV0dXJuIHJldCA/IC0xIDogMDsKIH0KIAogCkBAIC0yNjMsNyArNDAyLDcg QEAKICAqIHdheSB0byBleHRyYWN0IHRoZSBpbmZvIGZyb20gdGhlIGlmcAogICovCiBpbnQKLWdl bmVyaWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZuZXQgKmlmcCwgdW5zaWduZWQgaW50ICp0eCwg dW5zaWduZWQgaW50ICpyeCkKK25tX29zX2dlbmVyaWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZu ZXQgKmlmcCwgdW5zaWduZWQgaW50ICp0eCwgdW5zaWduZWQgaW50ICpyeCkKIHsKIAlEKCJjYWxs ZWQsIGluIHR4ICVkIHJ4ICVkIiwgKnR4LCAqcngpOwogCXJldHVybiAwOwpAQCAtMjcxLDE2ICs0 MTAsMjMgQEAKIAogCiB2b2lkCi1nZW5lcmljX2ZpbmRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWZuZXQg KmlmcCwgdV9pbnQgKnR4cSwgdV9pbnQgKnJ4cSkKK25tX29zX2dlbmVyaWNfZmluZF9udW1fcXVl dWVzKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2ludCAqdHhxLCB1X2ludCAqcnhxKQogewogCUQoImNh bGxlZCwgaW4gdHhxICVkIHJ4cSAlZCIsICp0eHEsICpyeHEpOwogCSp0eHEgPSBuZXRtYXBfZ2Vu ZXJpY19yaW5nczsKIAkqcnhxID0gbmV0bWFwX2dlbmVyaWNfcmluZ3M7CiB9CiAKK3ZvaWQKK25t X29zX2dlbmVyaWNfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpn bmEpCit7CisKKwlnbmEtPnJ4c2cgPSAxOyAvKiBTdXBwb3J0ZWQgdGhyb3VnaCBtX2NvcHlkYXRh LiAqLworCWduYS0+dHhxZGlzYyA9IDA7IC8qIE5vdCBzdXBwb3J0ZWQuICovCit9CiAKIHZvaWQK LW5ldG1hcF9taXRpZ2F0aW9uX2luaXQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQsIGludCBp ZHgsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCitubV9vc19taXRpZ2F0aW9uX2luaXQoc3Ry dWN0IG5tX2dlbmVyaWNfbWl0ICptaXQsIGludCBpZHgsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAq bmEpCiB7CiAJTkQoImNhbGxlZCIpOwogCW1pdC0+bWl0X3BlbmRpbmcgPSAwOwpAQCAtMjkwLDIx ICs0MzYsMjEgQEAKIAogCiB2b2lkCi1uZXRtYXBfbWl0aWdhdGlvbl9zdGFydChzdHJ1Y3Qgbm1f Z2VuZXJpY19taXQgKm1pdCkKK25tX29zX21pdGlnYXRpb25fc3RhcnQoc3RydWN0IG5tX2dlbmVy aWNfbWl0ICptaXQpCiB7CiAJTkQoImNhbGxlZCIpOwogfQogCiAKIHZvaWQKLW5ldG1hcF9taXRp Z2F0aW9uX3Jlc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpCitubV9vc19taXRpZ2F0 aW9uX3Jlc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpCiB7CiAJTkQoImNhbGxlZCIp OwogfQogCiAKIGludAotbmV0bWFwX21pdGlnYXRpb25fYWN0aXZlKHN0cnVjdCBubV9nZW5lcmlj X21pdCAqbWl0KQorbm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0IG5tX2dlbmVyaWNfbWl0 ICptaXQpCiB7CiAJTkQoImNhbGxlZCIpOwogCXJldHVybiAwOwpAQCAtMzEyLDcgKzQ1OCw3IEBA CiAKIAogdm9pZAotbmV0bWFwX21pdGlnYXRpb25fY2xlYW51cChzdHJ1Y3Qgbm1fZ2VuZXJpY19t aXQgKm1pdCkKK25tX29zX21pdGlnYXRpb25fY2xlYW51cChzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQg Km1pdCkKIHsKIAlORCgiY2FsbGVkIik7CiB9CkBAIC0zNDIsNyArNDg4LDcgQEAKIH0gbm1fdmlf aW5kaWNlczsKIAogdm9pZAotbm1fdmlfaW5pdF9pbmRleCh2b2lkKQorbm1fb3NfdmlfaW5pdF9p bmRleCh2b2lkKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBOTV9WSV9NQVg7IGkrKykK QEAgLTM5OCw3ICs1NDQsNyBAQAogICogaW5jcmVtZW50IHRoaXMgcmVmY291bnQgb24gaWZfYXR0 YWNoKCkuCiAgKi8KIGludAotbm1fdmlfcGVyc2lzdChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qg aWZuZXQgKipyZXQpCitubV9vc192aV9wZXJzaXN0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBp Zm5ldCAqKnJldCkKIHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcDsKIAl1X3Nob3J0IG1hY2FkZHJfaGk7 CkBAIC00MzgsMTUgKzU4NCwyMTUgQEAKIAkqcmV0ID0gaWZwOwogCXJldHVybiAwOwogfQorCiAv KiB1bnJlZ2lzdGVyIGZyb20gdGhlIHN5c3RlbSBhbmQgZHJvcCB0aGUgZmluYWwgcmVmY291bnQg Ki8KIHZvaWQKLW5tX3ZpX2RldGFjaChzdHJ1Y3QgaWZuZXQgKmlmcCkKK25tX29zX3ZpX2RldGFj aChzdHJ1Y3QgaWZuZXQgKmlmcCkKIHsKIAlubV92aV9mcmVlX2luZGV4KCgoY2hhciAqKUlGX0xM QUREUihpZnApKVs1XSk7CiAJZXRoZXJfaWZkZXRhY2goaWZwKTsKIAlpZl9mcmVlKGlmcCk7CiB9 CiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PSBQVE5FVE1BUCBTVVBQT1JUID09PT09PT09 PT09PT09PT09PT09PT09PT09ICovCisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCisjaW5j bHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8bWFjaGlu ZS9idXMuaD4gICAgICAgIC8qIGJ1c19kbWFtYXBfKiAqLworI2luY2x1ZGUgPG1hY2hpbmUvcmVz b3VyY2UuaD4KKyNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgorI2luY2x1ZGUgPGRldi9wY2kv cGNpcmVnLmg+CisvKgorICogcHRuZXRtYXAgbWVtb3J5IGRldmljZSAobWVtZGV2KSBmb3IgZnJl ZWJzZCBndWVzdCwKKyAqIHNzZWQgdG8gZXhwb3NlIGhvc3QgbmV0bWFwIG1lbW9yeSB0byB0aGUg Z3Vlc3QgdGhyb3VnaCBhIFBDSSBCQVIuCisgKi8KKworLyoKKyAqIHB0bmV0bWFwIG1lbWRldiBw cml2YXRlIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBwdG5ldG1hcF9tZW1kZXYgeworCWRl dmljZV90IGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnBjaV9pbzsKKwlzdHJ1Y3QgcmVzb3VyY2Ug KnBjaV9tZW07CisJc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1fbWVtOworfTsKKworc3RhdGljIGlu dAlwdG5fbWVtZGV2X3Byb2JlKGRldmljZV90KTsKK3N0YXRpYyBpbnQJcHRuX21lbWRldl9hdHRh Y2goZGV2aWNlX3QpOworc3RhdGljIGludAlwdG5fbWVtZGV2X2RldGFjaChkZXZpY2VfdCk7Citz dGF0aWMgaW50CXB0bl9tZW1kZXZfc2h1dGRvd24oZGV2aWNlX3QpOworCitzdGF0aWMgZGV2aWNl X21ldGhvZF90IHB0bl9tZW1kZXZfbWV0aG9kc1tdID0geworCURFVk1FVEhPRChkZXZpY2VfcHJv YmUsIHB0bl9tZW1kZXZfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBwdG5fbWVt ZGV2X2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIHB0bl9tZW1kZXZfZGV0YWNo KSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBwdG5fbWVtZGV2X3NodXRkb3duKSwKKwlE RVZNRVRIT0RfRU5ECit9OworCitzdGF0aWMgZHJpdmVyX3QgcHRuX21lbWRldl9kcml2ZXIgPSB7 CisJUFRORVRNQVBfTUVNREVWX05BTUUsCisJcHRuX21lbWRldl9tZXRob2RzLAorCXNpemVvZihz dHJ1Y3QgcHRuZXRtYXBfbWVtZGV2KSwKK307CisKKy8qIFdlIHVzZSAoU0lfT1JERVJfTUlERExF KzEpIGhlcmUsIHNlZSBERVZfTU9EVUxFX09SREVSRUQoKSBpbnZvY2F0aW9uCisgKiBiZWxvdy4g Ki8KK3N0YXRpYyBkZXZjbGFzc190IHB0bmV0bWFwX2RldmNsYXNzOworRFJJVkVSX01PRFVMRV9P UkRFUkVEKHB0bl9tZW1kZXYsIHBjaSwgcHRuX21lbWRldl9kcml2ZXIsIHB0bmV0bWFwX2RldmNs YXNzLAorCQkgICAgICBOVUxMLCBOVUxMLCBTSV9PUkRFUl9NSURETEUgKyAxKTsKKworLyoKKyAq IE1hcCBob3N0IG5ldG1hcCBtZW1vcnkgdGhyb3VnaCBQQ0ktQkFSIGluIHRoZSBndWVzdCBPUywK KyAqIHJldHVybmluZyBwaHlzaWNhbCAobm1fcGFkZHIpIGFuZCB2aXJ0dWFsIChubV9hZGRyKSBh ZGRyZXNzZXMKKyAqIG9mIHRoZSBuZXRtYXAgbWVtb3J5IG1hcHBlZCBpbiB0aGUgZ3Vlc3QuCisg Ki8KK2ludAorbm1fb3NfcHRfbWVtZGV2X2lvbWFwKHN0cnVjdCBwdG5ldG1hcF9tZW1kZXYgKnB0 bl9kZXYsIHZtX3BhZGRyX3QgKm5tX3BhZGRyLAorCQkgICAgICB2b2lkICoqbm1fYWRkciwgdWlu dDY0X3QgKm1lbV9zaXplKQoreworCWludCByaWQ7CisKKwlEKCJwdG5fbWVtZGV2X2RyaXZlciBp b21hcCIpOworCisJcmlkID0gUENJUl9CQVIoUFRORVRNQVBfTUVNX1BDSV9CQVIpOworCSptZW1f c2l6ZSA9IGJ1c19yZWFkXzQocHRuX2Rldi0+cGNpX2lvLCBQVE5FVF9NREVWX0lPX01FTVNJWkVf SEkpOworCSptZW1fc2l6ZSA9IGJ1c19yZWFkXzQocHRuX2Rldi0+cGNpX2lvLCBQVE5FVF9NREVW X0lPX01FTVNJWkVfTE8pIHwKKwkJCSgqbWVtX3NpemUgPDwgMzIpOworCisJLyogbWFwIG1lbW9y eSBhbGxvY2F0b3IgKi8KKwlwdG5fZGV2LT5wY2lfbWVtID0gYnVzX2FsbG9jX3Jlc291cmNlKHB0 bl9kZXYtPmRldiwgU1lTX1JFU19NRU1PUlksCisJCQkmcmlkLCAwLCB+MCwgKm1lbV9zaXplLCBS Rl9BQ1RJVkUpOworCWlmIChwdG5fZGV2LT5wY2lfbWVtID09IE5VTEwpIHsKKwkJKm5tX3BhZGRy ID0gMDsKKwkJKm5tX2FkZHIgPSAwOworCQlyZXR1cm4gRU5PTUVNOworCX0KKworCSpubV9wYWRk ciA9IHJtYW5fZ2V0X3N0YXJ0KHB0bl9kZXYtPnBjaV9tZW0pOworCSpubV9hZGRyID0gcm1hbl9n ZXRfdmlydHVhbChwdG5fZGV2LT5wY2lfbWVtKTsKKworCUQoIj09PSBCQVIgJWQgc3RhcnQgJWx4 IGxlbiAlbHggbWVtX3NpemUgJWx4ID09PSIsCisJCQlQVE5FVE1BUF9NRU1fUENJX0JBUiwKKwkJ CSh1bnNpZ25lZCBsb25nKSgqbm1fcGFkZHIpLAorCQkJKHVuc2lnbmVkIGxvbmcpcm1hbl9nZXRf c2l6ZShwdG5fZGV2LT5wY2lfbWVtKSwKKwkJCSh1bnNpZ25lZCBsb25nKSptZW1fc2l6ZSk7CisJ cmV0dXJuICgwKTsKK30KKwordWludDMyX3QKK25tX29zX3B0X21lbWRldl9pb3JlYWQoc3RydWN0 IHB0bmV0bWFwX21lbWRldiAqcHRuX2RldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4g YnVzX3JlYWRfNChwdG5fZGV2LT5wY2lfaW8sIHJlZyk7Cit9CisKKy8qIFVubWFwIGhvc3QgbmV0 bWFwIG1lbW9yeS4gKi8KK3ZvaWQKK25tX29zX3B0X21lbWRldl9pb3VubWFwKHN0cnVjdCBwdG5l dG1hcF9tZW1kZXYgKnB0bl9kZXYpCit7CisJRCgicHRuX21lbWRldl9kcml2ZXIgaW91bm1hcCIp OworCisJaWYgKHB0bl9kZXYtPnBjaV9tZW0pIHsKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UocHRu X2Rldi0+ZGV2LCBTWVNfUkVTX01FTU9SWSwKKwkJCVBDSVJfQkFSKFBUTkVUTUFQX01FTV9QQ0lf QkFSKSwgcHRuX2Rldi0+cGNpX21lbSk7CisJCXB0bl9kZXYtPnBjaV9tZW0gPSBOVUxMOworCX0K K30KKworLyogRGV2aWNlIGlkZW50aWZpY2F0aW9uIHJvdXRpbmUsIHJldHVybiBCVVNfUFJPQkVf REVGQVVMVCBvbiBzdWNjZXNzLAorICogcG9zaXRpdmUgb24gZmFpbHVyZSAqLworc3RhdGljIGlu dAorcHRuX21lbWRldl9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJY2hhciBkZXNjWzI1Nl07CisK KwlpZiAocGNpX2dldF92ZW5kb3IoZGV2KSAhPSBQVE5FVE1BUF9QQ0lfVkVORE9SX0lEKQorCQly ZXR1cm4gKEVOWElPKTsKKwlpZiAocGNpX2dldF9kZXZpY2UoZGV2KSAhPSBQVE5FVE1BUF9QQ0lf REVWSUNFX0lEKQorCQlyZXR1cm4gKEVOWElPKTsKKworCXNucHJpbnRmKGRlc2MsIHNpemVvZihk ZXNjKSwgIiVzIFBDSSBhZGFwdGVyIiwKKwkJCVBUTkVUTUFQX01FTURFVl9OQU1FKTsKKwlkZXZp Y2Vfc2V0X2Rlc2NfY29weShkZXYsIGRlc2MpOworCisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVM VCk7Cit9CisKKy8qIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiAqLworc3RhdGljIGlu dAorcHRuX21lbWRldl9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBwdG5ldG1hcF9t ZW1kZXYgKnB0bl9kZXY7CisJaW50IHJpZDsKKwl1aW50MTZfdCBtZW1faWQ7CisKKwlEKCJwdG5f bWVtZGV2X2RyaXZlciBhdHRhY2giKTsKKworCXB0bl9kZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CisJcHRuX2Rldi0+ZGV2ID0gZGV2OworCisJcGNpX2VuYWJsZV9idXNtYXN0ZXIoZGV2KTsK KworCXJpZCA9IFBDSVJfQkFSKFBUTkVUTUFQX0lPX1BDSV9CQVIpOworCXB0bl9kZXYtPnBjaV9p byA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lPUE9SVCwgJnJpZCwKKwkJ CQkJCSBSRl9BQ1RJVkUpOworCWlmIChwdG5fZGV2LT5wY2lfaW8gPT0gTlVMTCkgeworCSAgICAg ICAgZGV2aWNlX3ByaW50ZihkZXYsICJjYW5ub3QgbWFwIEkvTyBzcGFjZVxuIik7CisJICAgICAg ICByZXR1cm4gKEVOWElPKTsKKwl9CisKKwltZW1faWQgPSBidXNfcmVhZF80KHB0bl9kZXYtPnBj aV9pbywgUFRORVRfTURFVl9JT19NRU1JRCk7CisKKwkvKiBjcmVhdGUgZ3Vlc3QgYWxsb2NhdG9y ICovCisJcHRuX2Rldi0+bm1fbWVtID0gbmV0bWFwX21lbV9wdF9ndWVzdF9hdHRhY2gocHRuX2Rl diwgbWVtX2lkKTsKKwlpZiAocHRuX2Rldi0+bm1fbWVtID09IE5VTEwpIHsKKwkJcHRuX21lbWRl dl9kZXRhY2goZGV2KTsKKwkgICAgICAgIHJldHVybiAoRU5PTUVNKTsKKwl9CisJbmV0bWFwX21l bV9nZXQocHRuX2Rldi0+bm1fbWVtKTsKKworCUQoInB0bl9tZW1kZXZfZHJpdmVyIHByb2JlIE9L IC0gaG9zdF9tZW1faWQ6ICVkIiwgbWVtX2lkKTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIERl dmljZSByZW1vdmFsIHJvdXRpbmUuICovCitzdGF0aWMgaW50CitwdG5fbWVtZGV2X2RldGFjaChk ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHB0bmV0bWFwX21lbWRldiAqcHRuX2RldjsKKworCUQo InB0bl9tZW1kZXZfZHJpdmVyIGRldGFjaCIpOworCXB0bl9kZXYgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CisKKwlpZiAocHRuX2Rldi0+bm1fbWVtKSB7CisJCW5ldG1hcF9tZW1fcHV0KHB0bl9k ZXYtPm5tX21lbSk7CisJCXB0bl9kZXYtPm5tX21lbSA9IE5VTEw7CisJfQorCWlmIChwdG5fZGV2 LT5wY2lfbWVtKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlks CisJCQlQQ0lSX0JBUihQVE5FVE1BUF9NRU1fUENJX0JBUiksIHB0bl9kZXYtPnBjaV9tZW0pOwor CQlwdG5fZGV2LT5wY2lfbWVtID0gTlVMTDsKKwl9CisJaWYgKHB0bl9kZXYtPnBjaV9pbykgewor CQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSU9QT1JULAorCQkJUENJUl9CQVIo UFRORVRNQVBfSU9fUENJX0JBUiksIHB0bl9kZXYtPnBjaV9pbyk7CisJCXB0bl9kZXYtPnBjaV9p byA9IE5VTEw7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcHRuX21lbWRl dl9zaHV0ZG93bihkZXZpY2VfdCBkZXYpCit7CisJRCgicHRuX21lbWRldl9kcml2ZXIgc2h1dGRv d24iKTsKKwlyZXR1cm4gYnVzX2dlbmVyaWNfc2h1dGRvd24oZGV2KTsKK30KKworI2VuZGlmIC8q IFdJVEhfUFRORVRNQVBfR1VFU1QgKi8KKwogLyoKICAqIEluIG9yZGVyIHRvIHRyYWNrIHdoZXRo ZXIgcGFnZXMgYXJlIHN0aWxsIG1hcHBlZCwgd2UgaG9vayBpbnRvCiAgKiB0aGUgc3RhbmRhcmQg Y2Rldl9wYWdlciBhbmQgaW50ZXJjZXB0IHRoZSBjb25zdHJ1Y3RvciBhbmQKQEAgLTYwNiw3ICs5 NTIsNyBAQAogICogdGhlIGRldmljZSAoL2Rldi9uZXRtYXApIHNvIHdlIGNhbm5vdCBkbyBhbnl0 aGluZyB1c2VmdWwuCiAgKiBUbyB0cmFjayBjbG9zZSgpIG9uIGluZGl2aWR1YWwgZmlsZSBkZXNj cmlwdG9ycyB3ZSBwYXNzIG5ldG1hcF9kdG9yKCkgdG8KICAqIGRldmZzX3NldF9jZGV2cHJpdigp IG9uIG9wZW4oKS4gVGhlIEZyZWVCU0Qga2VybmVsIHdpbGwgY2FsbCB0aGUgZGVzdHJ1Y3Rvcgot ICogd2hlbiB0aGUgbGFzdCBmZCBwb2ludGluZyB0byB0aGUgZGV2aWNlIGlzIGNsb3NlZC4gCisg KiB3aGVuIHRoZSBsYXN0IGZkIHBvaW50aW5nIHRvIHRoZSBkZXZpY2UgaXMgY2xvc2VkLgogICoK ICAqIE5vdGUgdGhhdCBGcmVlQlNEIGRvZXMgbm90IGV2ZW4gbXVubWFwKCkgb24gY2xvc2UoKSBz byB3ZSBhbHNvIGhhdmUKICAqIHRvIHRyYWNrIG1tYXAoKSBvdXJzZWx2ZXMsIGFuZCBwb3N0cG9u ZSB0aGUgY2FsbCB0bwpAQCAtNjM0LDI2ICs5ODAsMjUxIEBACiAJKHZvaWQpZGV2dHlwZTsKIAko dm9pZCl0ZDsKIAotCXByaXYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRtYXBfcHJpdl9kKSwg TV9ERVZCVUYsCi0JCQkgICAgICBNX05PV0FJVCB8IE1fWkVSTyk7Ci0JaWYgKHByaXYgPT0gTlVM TCkKLQkJcmV0dXJuIEVOT01FTTsKLQlwcml2LT5ucF9yZWZzID0gMTsKKwlOTUdfTE9DSygpOwor CXByaXYgPSBuZXRtYXBfcHJpdl9uZXcoKTsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCWVycm9y ID0gRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAJZXJyb3IgPSBkZXZmc19zZXRfY2RldnByaXYo cHJpdiwgbmV0bWFwX2R0b3IpOwogCWlmIChlcnJvcikgewotCQlmcmVlKHByaXYsIE1fREVWQlVG KTsKLQl9IGVsc2UgewotCQlOTUdfTE9DSygpOwotCQluZXRtYXBfdXNlX2NvdW50Kys7Ci0JCU5N R19VTkxPQ0soKTsKKwkJbmV0bWFwX3ByaXZfZGVsZXRlKHByaXYpOwogCX0KK291dDoKKwlOTUdf VU5MT0NLKCk7CiAJcmV0dXJuIGVycm9yOwogfQogCisvKioqKioqKioqKioqKioqKioqKioga3Ro cmVhZCB3cmFwcGVyICoqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3lzL3N5c3Byb3RvLmg+ Cit1X2ludAorbm1fb3NfbmNwdXModm9pZCkKK3sKKwlyZXR1cm4gbXBfbWF4aWQgKyAxOworfQor CitzdHJ1Y3Qgbm1fa3RocmVhZF9jdHggeworCXN0cnVjdCB0aHJlYWQgKnVzZXJfdGQ7CQkvKiB0 aHJlYWQgdXNlci1zcGFjZSAoa3RocmVhZCBjcmVhdG9yKSB0byBzZW5kIGlvY3RsICovCisJc3Ry dWN0IHB0bmV0bWFwX2NmZ2VudHJ5X2JoeXZlCWNmZzsKKworCS8qIHdvcmtlciBmdW5jdGlvbiBh bmQgcGFyYW1ldGVyICovCisJbm1fa3RocmVhZF93b3JrZXJfZm5fdCB3b3JrZXJfZm47CisJdm9p ZCAqd29ya2VyX3ByaXZhdGU7CisKKwlzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rOworCisJLyogaW50 ZWdlciB0byBtYW5hZ2UgbXVsdGlwbGUgd29ya2VyIGNvbnRleHRzIChlLmcuLCBSWCBvciBUWCBv biBwdG5ldG1hcCkgKi8KKwlsb25nIHR5cGU7Cit9OworCitzdHJ1Y3Qgbm1fa3RocmVhZCB7CisJ c3RydWN0IHRocmVhZCAqd29ya2VyOworCXN0cnVjdCBtdHggd29ya2VyX2xvY2s7CisJdWludDY0 X3Qgc2NoZWR1bGVkOyAJCS8qIHBlbmRpbmcgd2FrZV91cCByZXF1ZXN0ICovCisJc3RydWN0IG5t X2t0aHJlYWRfY3R4IHdvcmtlcl9jdHg7CisJaW50IHJ1bjsJCQkvKiB1c2VkIHRvIHN0b3Aga3Ro cmVhZCAqLworCWludCBhdHRhY2hfdXNlcjsJCS8qIGt0aHJlYWQgYXR0YWNoZWQgdG8gdXNlcl9w cm9jZXNzICovCisJaW50IGFmZmluaXR5OworfTsKKwordm9pZCBpbmxpbmUKK25tX29zX2t0aHJl YWRfd2FrZXVwX3dvcmtlcihzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rKQoreworCS8qCisJICogVGhl cmUgbWF5IGJlIGEgcmFjZSBiZXR3ZWVuIEZFIGFuZCBCRSwKKwkgKiB3aGljaCBjYWxsIGJvdGgg dGhpcyBmdW5jdGlvbiwgYW5kIHdvcmtlciBrdGhyZWFkLAorCSAqIHRoYXQgcmVhZHMgbm1rLT5z Y2hlZHVsZWQuCisJICoKKwkgKiBGb3IgdXMgaXQgaXMgbm90IGltcG9ydGFudCB0aGUgY291bnRl ciB2YWx1ZSwKKwkgKiBidXQgc2ltcGx5IHRoYXQgaXQgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxh c3QKKwkgKiB0aW1lIHRoZSBrdGhyZWFkIHNhdyBpdC4KKwkgKi8KKwltdHhfbG9jaygmbm1rLT53 b3JrZXJfbG9jayk7CisJbm1rLT5zY2hlZHVsZWQrKzsKKwlpZiAobm1rLT53b3JrZXJfY3R4LmNm Zy53Y2hhbikgeworCQl3YWtldXAoKHZvaWQgKilubWstPndvcmtlcl9jdHguY2ZnLndjaGFuKTsK Kwl9CisJbXR4X3VubG9jaygmbm1rLT53b3JrZXJfbG9jayk7Cit9CisKK3ZvaWQgaW5saW5lCitu bV9vc19rdGhyZWFkX3NlbmRfaXJxKHN0cnVjdCBubV9rdGhyZWFkICpubWspCit7CisJc3RydWN0 IG5tX2t0aHJlYWRfY3R4ICpjdHggPSAmbm1rLT53b3JrZXJfY3R4OworCWludCBlcnI7CisKKwlp ZiAoY3R4LT51c2VyX3RkICYmIGN0eC0+Y2ZnLmlvY3RsX2ZkID4gMCkgeworCQllcnIgPSBrZXJu X2lvY3RsKGN0eC0+dXNlcl90ZCwgY3R4LT5jZmcuaW9jdGxfZmQsIGN0eC0+Y2ZnLmlvY3RsX2Nt ZCwKKwkJCQkgKGNhZGRyX3QpJmN0eC0+Y2ZnLmlvY3RsX2RhdGEpOworCQlpZiAoZXJyKSB7CisJ CQlEKCJrZXJuX2lvY3RsIGVycm9yOiAlZCBpb2N0bCBwYXJhbWV0ZXJzOiBmZCAlZCBjb20gJWx1 IGRhdGEgJXAiLAorCQkJCWVyciwgY3R4LT5jZmcuaW9jdGxfZmQsICh1bnNpZ25lZCBsb25nKWN0 eC0+Y2ZnLmlvY3RsX2NtZCwKKwkJCQkmY3R4LT5jZmcuaW9jdGxfZGF0YSk7CisJCX0KKwl9Cit9 CisKK3N0YXRpYyB2b2lkCitubV9rdGhyZWFkX3dvcmtlcih2b2lkICpkYXRhKQoreworCXN0cnVj dCBubV9rdGhyZWFkICpubWsgPSBkYXRhOworCXN0cnVjdCBubV9rdGhyZWFkX2N0eCAqY3R4ID0g Jm5tay0+d29ya2VyX2N0eDsKKwl1aW50NjRfdCBvbGRfc2NoZWR1bGVkID0gbm1rLT5zY2hlZHVs ZWQ7CisKKwlpZiAobm1rLT5hZmZpbml0eSA+PSAwKSB7CisJCXRocmVhZF9sb2NrKGN1cnRocmVh ZCk7CisJCXNjaGVkX2JpbmQoY3VydGhyZWFkLCBubWstPmFmZmluaXR5KTsKKwkJdGhyZWFkX3Vu bG9jayhjdXJ0aHJlYWQpOworCX0KKworCXdoaWxlIChubWstPnJ1bikgeworCQkvKgorCQkgKiBj aGVjayBpZiB0aGUgcGFyZW50IHByb2Nlc3MgZGllcworCQkgKiAod2hlbiBrdGhyZWFkIGlzIGF0 dGFjaGVkIHRvIHVzZXIgcHJvY2VzcykKKwkJICovCisJCWlmIChjdHgtPnVzZXJfdGQpIHsKKwkJ CVBST0NfTE9DSyhjdXJwcm9jKTsKKwkJCXRocmVhZF9zdXNwZW5kX2NoZWNrKDApOworCQkJUFJP Q19VTkxPQ0soY3VycHJvYyk7CisJCX0gZWxzZSB7CisJCQlrdGhyZWFkX3N1c3BlbmRfY2hlY2so KTsKKwkJfQorCisJCS8qCisJCSAqIGlmIHdjaGFuIGlzIG5vdCBkZWZpbmVkLCB3ZSBkb24ndCBo YXZlIG5vdGlmaWNhdGlvbgorCQkgKiBtZWNoYW5pc20gYW5kIHdlIGNvbnRpbnVhbGx5IGV4ZWN1 dGUgd29ya2VyX2ZuKCkKKwkJICovCisJCWlmICghY3R4LT5jZmcud2NoYW4pIHsKKwkJCWN0eC0+ d29ya2VyX2ZuKGN0eC0+d29ya2VyX3ByaXZhdGUpOyAvKiB3b3JrZXIgYm9keSAqLworCQl9IGVs c2UgeworCQkJLyogY2hlY2tzIGlmIHRoZXJlIGlzIGEgcGVuZGluZyBub3RpZmljYXRpb24gKi8K KwkJCW10eF9sb2NrKCZubWstPndvcmtlcl9sb2NrKTsKKwkJCWlmIChsaWtlbHkobm1rLT5zY2hl ZHVsZWQgIT0gb2xkX3NjaGVkdWxlZCkpIHsKKwkJCQlvbGRfc2NoZWR1bGVkID0gbm1rLT5zY2hl ZHVsZWQ7CisJCQkJbXR4X3VubG9jaygmbm1rLT53b3JrZXJfbG9jayk7CisKKwkJCQljdHgtPndv cmtlcl9mbihjdHgtPndvcmtlcl9wcml2YXRlKTsgLyogd29ya2VyIGJvZHkgKi8KKworCQkJCWNv bnRpbnVlOworCQkJfSBlbHNlIGlmIChubWstPnJ1bikgeworCQkJCS8qIHdhaXQgb24gZXZlbnQg d2l0aCBvbmUgc2Vjb25kIHRpbWVvdXQgKi8KKwkJCQltc2xlZXBfc3Bpbigodm9pZCAqKWN0eC0+ Y2ZnLndjaGFuLCAmbm1rLT53b3JrZXJfbG9jaywKKwkJCQkJICAgICJubWtfZXYiLCBoeik7CisJ CQkJbm1rLT5zY2hlZHVsZWQrKzsKKwkJCX0KKwkJCW10eF91bmxvY2soJm5tay0+d29ya2VyX2xv Y2spOworCQl9CisJfQorCisJa3RocmVhZF9leGl0KCk7Cit9CisKK3ZvaWQKK25tX29zX2t0aHJl YWRfc2V0X2FmZmluaXR5KHN0cnVjdCBubV9rdGhyZWFkICpubWssIGludCBhZmZpbml0eSkKK3sK KwlubWstPmFmZmluaXR5ID0gYWZmaW5pdHk7Cit9CisKK3N0cnVjdCBubV9rdGhyZWFkICoKK25t X29zX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBubV9rdGhyZWFkX2NmZyAqY2ZnLCB1bnNpZ25lZCBp bnQgY2ZndHlwZSwKKwkJICAgICB2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IG5tX2t0aHJlYWQg Km5tayA9IE5VTEw7CisKKwlpZiAoY2ZndHlwZSAhPSBQVE5FVE1BUF9DRkdUWVBFX0JIWVZFKSB7 CisJCUQoIlVuc3VwcG9ydGVkIGNmZ3R5cGUgJXUiLCBjZmd0eXBlKTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJbm1rID0gbWFsbG9jKHNpemVvZigqbm1rKSwgIE1fREVWQlVGLCBNX05PV0FJVCB8 IE1fWkVSTyk7CisJaWYgKCFubWspCisJCXJldHVybiBOVUxMOworCisJbXR4X2luaXQoJm5tay0+ d29ya2VyX2xvY2ssICJubV9rdGhyZWFkIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7CisJbm1rLT53 b3JrZXJfY3R4Lndvcmtlcl9mbiA9IGNmZy0+d29ya2VyX2ZuOworCW5tay0+d29ya2VyX2N0eC53 b3JrZXJfcHJpdmF0ZSA9IGNmZy0+d29ya2VyX3ByaXZhdGU7CisJbm1rLT53b3JrZXJfY3R4LnR5 cGUgPSBjZmctPnR5cGU7CisJbm1rLT5hZmZpbml0eSA9IC0xOworCisJLyogYXR0YWNoIGt0aHJl YWQgdG8gdXNlciBwcm9jZXNzIChwdG5ldG1hcCkgKi8KKwlubWstPmF0dGFjaF91c2VyID0gY2Zn LT5hdHRhY2hfdXNlcjsKKworCS8qIHN0b3JlIGtpY2svaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24g Ki8KKwlpZiAob3BhcXVlKSB7CisJCW5tay0+d29ya2VyX2N0eC5jZmcgPSAqKChzdHJ1Y3QgcHRu ZXRtYXBfY2ZnZW50cnlfYmh5dmUgKilvcGFxdWUpOworCX0KKworCXJldHVybiBubWs7Cit9CisK K2ludAorbm1fb3Nfa3RocmVhZF9zdGFydChzdHJ1Y3Qgbm1fa3RocmVhZCAqbm1rKQoreworCXN0 cnVjdCBwcm9jICpwID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKG5tay0+d29ya2Vy KSB7CisJCXJldHVybiBFQlVTWTsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSB3YW50IHRvIGF0dGFj aCBrdGhyZWFkIHRvIHVzZXIgcHJvY2VzcyAqLworCWlmIChubWstPmF0dGFjaF91c2VyKSB7CisJ CW5tay0+d29ya2VyX2N0eC51c2VyX3RkID0gY3VydGhyZWFkOworCQlwID0gY3VydGhyZWFkLT50 ZF9wcm9jOworCX0KKworCS8qIGVuYWJsZSBrdGhyZWFkIG1haW4gbG9vcCAqLworCW5tay0+cnVu ID0gMTsKKwkvKiBjcmVhdGUga3RocmVhZCAqLworCWlmKChlcnJvciA9IGt0aHJlYWRfYWRkKG5t X2t0aHJlYWRfd29ya2VyLCBubWssIHAsCisJCQkmbm1rLT53b3JrZXIsIFJGTk9XQUlUIC8qIHRv IGJlIGNoZWNrZWQgKi8sIDAsICJubS1rdGhyZWFkLSVsZCIsCisJCQlubWstPndvcmtlcl9jdHgu dHlwZSkpKSB7CisJCWdvdG8gZXJyOworCX0KKworCUQoIm5tX2t0aHJlYWQgc3RhcnRlZCB0ZCAl cCIsIG5tay0+d29ya2VyKTsKKworCXJldHVybiAwOworZXJyOgorCUQoIm5tX2t0aHJlYWQgc3Rh cnQgZmFpbGVkIGVyciAlZCIsIGVycm9yKTsKKwlubWstPndvcmtlciA9IE5VTEw7CisJcmV0dXJu IGVycm9yOworfQorCit2b2lkCitubV9vc19rdGhyZWFkX3N0b3Aoc3RydWN0IG5tX2t0aHJlYWQg Km5taykKK3sKKwlpZiAoIW5tay0+d29ya2VyKSB7CisJCXJldHVybjsKKwl9CisJLyogdGVsbCB0 byBrdGhyZWFkIHRvIGV4aXQgZnJvbSBtYWluIGxvb3AgKi8KKwlubWstPnJ1biA9IDA7CisKKwkv KiB3YWtlIHVwIGt0aHJlYWQgaWYgaXQgc2xlZXBzICovCisJa3RocmVhZF9yZXN1bWUobm1rLT53 b3JrZXIpOworCW5tX29zX2t0aHJlYWRfd2FrZXVwX3dvcmtlcihubWspOworCisJbm1rLT53b3Jr ZXIgPSBOVUxMOworfQorCit2b2lkCitubV9vc19rdGhyZWFkX2RlbGV0ZShzdHJ1Y3Qgbm1fa3Ro cmVhZCAqbm1rKQoreworCWlmICghbm1rKQorCQlyZXR1cm47CisJaWYgKG5tay0+d29ya2VyKSB7 CisJCW5tX29zX2t0aHJlYWRfc3RvcChubWspOworCX0KKworCW1lbXNldCgmbm1rLT53b3JrZXJf Y3R4LmNmZywgMCwgc2l6ZW9mKG5tay0+d29ya2VyX2N0eC5jZmcpKTsKKworCWZyZWUobm1rLCBN X0RFVkJVRik7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKiBrcXVldWUgc3VwcG9ydCAqKioq KioqKioqKioqKioqLwogCiAvKgotICogVGhlIE9TX3NlbHdha2V1cCBhbHNvIG5lZWRzIHRvIGlz c3VlIGEgS05PVEVfVU5MT0NLRUQuCisgKiBubV9vc19zZWx3YWtldXAgYWxzbyBuZWVkcyB0byBp c3N1ZSBhIEtOT1RFX1VOTE9DS0VELgogICogV2UgdXNlIGEgbm9uLXplcm8gYXJndW1lbnQgdG8g ZGlzdGluZ3Vpc2ggdGhlIGNhbGwgZnJvbSB0aGUgb25lCiAgKiBpbiBrZXZlbnRfc2NhbigpIHdo aWNoIGluc3RlYWQgYWxzbyBuZWVkcyB0byBydW4gbmV0bWFwX3BvbGwoKS4KICAqIFRoZSBrbm90 ZSB1c2VzIGEgZ2xvYmFsIG11dGV4IGZvciB0aGUgdGltZSBiZWluZy4gV2UgbWlnaHQKQEAgLTY3 MiwxNyArMTI0MywyMyBAQAogCiAKIHZvaWQKLWZyZWVic2Rfc2Vsd2FrZXVwKHN0cnVjdCBubV9z ZWxpbmZvICpzaSwgaW50IHByaSkKK25tX29zX3NlbHdha2V1cChzdHJ1Y3Qgbm1fc2VsaW5mbyAq c2kpCiB7CiAJaWYgKG5ldG1hcF92ZXJib3NlKQogCQlEKCJvbiBrbm90ZSAlcCIsICZzaS0+c2ku c2lfbm90ZSk7Ci0Jc2Vsd2FrZXVwcHJpKCZzaS0+c2ksIHByaSk7CisJc2Vsd2FrZXVwcHJpKCZz aS0+c2ksIFBJX05FVCk7CiAJLyogdXNlIGEgbm9uLXplcm8gaGludCB0byB0ZWxsIHRoZSBub3Rp ZmljYXRpb24gZnJvbSB0aGUKIAkgKiBjYWxsIGRvbmUgaW4ga3F1ZXVlX3NjYW4oKSB3aGljaCB1 c2VzIDAKIAkgKi8KIAlLTk9URV9VTkxPQ0tFRCgmc2ktPnNpLnNpX25vdGUsIDB4MTAwIC8qIG5v dGlmaWNhdGlvbiAqLyk7CiB9CiAKK3ZvaWQKK25tX29zX3NlbHJlY29yZChzdHJ1Y3QgdGhyZWFk ICp0ZCwgc3RydWN0IG5tX3NlbGluZm8gKnNpKQoreworCXNlbHJlY29yZCh0ZCwgJnNpLT5zaSk7 Cit9CisKIHN0YXRpYyB2b2lkCiBuZXRtYXBfa25yZGV0YWNoKHN0cnVjdCBrbm90ZSAqa24pCiB7 CkBAIC03MjgsNyArMTMwNSw3IEBACiAJCVJEKDUsICJjdXJ0aHJlYWQgY2hhbmdlZCAlcCAlcCIs IGN1cnRocmVhZCwgcHJpdi0+bnBfdGQpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewotCQlyZXZl bnRzID0gbmV0bWFwX3BvbGwoKHZvaWQgKilwcml2LCBldmVudHMsIGN1cnRocmVhZCk7CisJCXJl dmVudHMgPSBuZXRtYXBfcG9sbChwcml2LCBldmVudHMsIE5VTEwpOwogCQlyZXR1cm4gKGV2ZW50 cyAmIHJldmVudHMpID8gMSA6IDA7CiAJfQogfQpAQCAtODAxLDEzICsxMzc4LDQ3IEBACiAJcmV0 dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2ZyZWVic2RfbmV0bWFwX3BvbGwoc3RydWN0IGNkZXYg KmNkZXZpIF9fdW51c2VkLCBpbnQgZXZlbnRzLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1 Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdjsKKwlpZiAoZGV2ZnNfZ2V0X2NkZXZwcml2KCh2b2lkICoq KSZwcml2KSkgeworCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisJcmV0dXJuIG5ldG1hcF9wb2xsKHBy aXYsIGV2ZW50cywgdGQpOworfQorCitzdGF0aWMgaW50CitmcmVlYnNkX25ldG1hcF9pb2N0bChz dHJ1Y3QgY2RldiAqZGV2IF9fdW51c2VkLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsCisgICAg ICAgIGludCBmZmxhIF9fdW51c2VkLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQgZXJyb3I7 CisJc3RydWN0IG5ldG1hcF9wcml2X2QgKnByaXY7CisKKwlDVVJWTkVUX1NFVChURF9UT19WTkVU KHRkKSk7CisJZXJyb3IgPSBkZXZmc19nZXRfY2RldnByaXYoKHZvaWQgKiopJnByaXYpOworCWlm IChlcnJvcikgeworCQkvKiBYWFggRU5PRU5UIHNob3VsZCBiZSBpbXBvc3NpYmxlLCBzaW5jZSB0 aGUgcHJpdgorCQkgKiBpcyBub3cgY3JlYXRlZCBpbiB0aGUgb3BlbiAqLworCQlpZiAoZXJyb3Ig PT0gRU5PRU5UKQorCQkJZXJyb3IgPSBFTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWVycm9yID0g bmV0bWFwX2lvY3RsKHByaXYsIGNtZCwgZGF0YSwgdGQpOworb3V0OgorCUNVUlZORVRfUkVTVE9S RSgpOworCisJcmV0dXJuIGVycm9yOworfQorCitleHRlcm4gc3RydWN0IGNkZXZzdyBuZXRtYXBf Y2RldnN3OyAvKiBYWFggdXNlZCBpbiBuZXRtYXAuYywgc2hvdWxkIGdvIGVsc2V3aGVyZSAqLwog c3RydWN0IGNkZXZzdyBuZXRtYXBfY2RldnN3ID0gewogCS5kX3ZlcnNpb24gPSBEX1ZFUlNJT04s CiAJLmRfbmFtZSA9ICJuZXRtYXAiLAogCS5kX29wZW4gPSBuZXRtYXBfb3BlbiwKIAkuZF9tbWFw X3NpbmdsZSA9IG5ldG1hcF9tbWFwX3NpbmdsZSwKLQkuZF9pb2N0bCA9IG5ldG1hcF9pb2N0bCwK LQkuZF9wb2xsID0gbmV0bWFwX3BvbGwsCisJLmRfaW9jdGwgPSBmcmVlYnNkX25ldG1hcF9pb2N0 bCwKKwkuZF9wb2xsID0gZnJlZWJzZF9uZXRtYXBfcG9sbCwKIAkuZF9rcWZpbHRlciA9IG5ldG1h cF9rcWZpbHRlciwKIAkuZF9jbG9zZSA9IG5ldG1hcF9jbG9zZSwKIH07CkBAIC04NTIsNiArMTQ2 MywyNCBAQAogCXJldHVybiAoZXJyb3IpOwogfQogCi0KKyNpZmRlZiBERVZfTU9EVUxFX09SREVS RUQKKy8qCisgKiBUaGUgbmV0bWFwIG1vZHVsZSBjb250YWlucyB0aHJlZSBkcml2ZXJzOiAoaSkg dGhlIG5ldG1hcCBjaGFyYWN0ZXIgZGV2aWNlCisgKiBkcml2ZXI7IChpaSkgdGhlIHB0bmV0bWFw IG1lbWRldiBQQ0kgZGV2aWNlIGRyaXZlciwgKGlpaSkgdGhlIHB0bmV0IFBDSQorICogZGV2aWNl IGRyaXZlci4gVGhlIGF0dGFjaCgpIHJvdXRpbmVzIG9mIGJvdGggKGlpKSBhbmQgKGlpaSkgbmVl ZCB0aGUKKyAqIGxvY2sgb2YgdGhlIGdsb2JhbCBhbGxvY2F0b3IsIGFuZCBzdWNoIGxvY2sgaXMg aW5pdGlhbGl6ZWQgaW4gbmV0bWFwX2luaXQoKSwKKyAqIHdoaWNoIGlzIHBhcnQgb2YgKGkpLgor ICogVGhlcmVmb3JlLCB3ZSBtYWtlIHN1cmUgdGhhdCAoaSkgaXMgbG9hZGVkIGJlZm9yZSAoaWkp IGFuZCAoaWlpKSwgdXNpbmcKKyAqIHRoZSAnb3JkZXInIHBhcmFtZXRlciBvZiBkcml2ZXIgZGVj bGFyYXRpb24gbWFjcm9zLiBGb3IgKGkpLCB3ZSBzcGVjaWZ5CisgKiBTSV9PUkRFUl9NSURETEUs IHdoaWxlIGhpZ2hlciBvcmRlcnMgYXJlIHVzZWQgd2l0aCB0aGUgRFJJVkVSX01PRFVMRV9PUkRF UkVECisgKiBtYWNyb3MgZm9yIChpaSkgYW5kIChpaWkpLgorICovCitERVZfTU9EVUxFX09SREVS RUQobmV0bWFwLCBuZXRtYXBfbG9hZGVyLCBOVUxMLCBTSV9PUkRFUl9NSURETEUpOworI2Vsc2Ug LyogIURFVl9NT0RVTEVfT1JERVJFRCAqLwogREVWX01PRFVMRShuZXRtYXAsIG5ldG1hcF9sb2Fk ZXIsIE5VTEwpOworI2VuZGlmIC8qIERFVl9NT0RVTEVfT1JERVJFRCAgKi8KK01PRFVMRV9ERVBF TkQobmV0bWFwLCBwY2ksIDEsIDEsIDEpOwogTU9EVUxFX1ZFUlNJT04obmV0bWFwLCAxKTsKKy8q IHJlZHVjZSBjb25kaXRpb25hbCBjb2RlICovCisvLyBsaW51eCBBUEksIHVzZSBmb3IgdGhlIGtu bGlzdCBpbiBGcmVlQlNECisvKiB1c2UgYSBwcml2YXRlIG11dGV4IGZvciB0aGUga25saXN0ICov CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jIC91 c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9nZW5lcmljLmMKLS0tIHVzci9zcmMvc3lzL2Rl di9uZXRtYXAvbmV0bWFwX2dlbmVyaWMuYwkyMDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCAr MDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2dlbmVyaWMuYwkyMDE2LTEx LTIzIDE2OjU3OjU3Ljg0OTQyNzAwMCArMDAwMApAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBDb3B5 cmlnaHQgKEMpIDIwMTMtMjAxNCBVbml2ZXJzaXRhYCBkaSBQaXNhLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgVmluY2Vuem8gTWFmZmlvbmUKKyAqIENv cHlyaWdodCAoQykgMjAxMy0yMDE2IEx1aWdpIFJpenpvCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2NSw3IEBACiAjaWZk ZWYgX19GcmVlQlNEX18KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPiAvKiBwcmVyZXF1aXNpdGUg Ki8KLV9fRkJTRElEKCIkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFw X2dlbmVyaWMuYyAyOTg5NTUgMjAxNi0wNS0wMyAwMzo0MToyNVogcGZnICQiKTsKK19fRkJTRElE KCIkRnJlZUJTRDogaGVhZC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jIDI3NDM1MyAy MDE0LTExLTEwIDIwOjE5OjU4WiBsdWlnaSAkIik7CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K ICNpbmNsdWRlIDxzeXMvZXJybm8uaD4KQEAgLTgzLDI1ICs4NSwyNSBAQAogCiAjZGVmaW5lIHJ0 bmxfbG9jaygpCU5EKCJydG5sX2xvY2sgY2FsbGVkIikKICNkZWZpbmUgcnRubF91bmxvY2soKQlO RCgicnRubF91bmxvY2sgY2FsbGVkIikKLSNkZWZpbmUgTUJVRl9UWFEobSkJKChtKS0+bV9wa3Ro ZHIuZmxvd2lkKQogI2RlZmluZSBNQlVGX1JYUShtKQkoKG0pLT5tX3BrdGhkci5mbG93aWQpCiAj ZGVmaW5lIHNtcF9tYigpCiAKIC8qCiAgKiBGcmVlQlNEIG1idWYgYWxsb2NhdG9yL2RlYWxsb2Nh dG9yIGluIGVtdWxhdGlvbiBtb2RlOgorICovCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCAxMTAw MDAwCisKKy8qCisgKiBGb3Igb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRDoKICAqCiAgKiBXZSBh bGxvY2F0ZSBFWFRfUEFDS0VUIG1idWYrY2x1c3RlcnMsIGJ1dCBuZWVkIHRvIHNldCBNX05PRlJF RQogICogc28gdGhhdCB0aGUgZGVzdHJ1Y3RvciwgaWYgaW52b2tlZCwgd2lsbCBub3QgZnJlZSB0 aGUgcGFja2V0LgotICogICAgSW4gcHJpbmNpcGxlIHdlIHNob3VsZCBzZXQgdGhlIGRlc3RydWN0 b3Igb25seSBvbiBkZW1hbmQsCisgKiBJbiBwcmluY2lwbGUgd2Ugc2hvdWxkIHNldCB0aGUgZGVz dHJ1Y3RvciBvbmx5IG9uIGRlbWFuZCwKICAqIGJ1dCBzaW5jZSB0aGVyZSBtaWdodCBiZSBhIHJh Y2Ugd2UgYmV0dGVyIGRvIGl0IG9uIGFsbG9jYXRpb24uCiAgKiBBcyBhIGNvbnNlcXVlbmNlLCB3 ZSBhbHNvIG5lZWQgdG8gc2V0IHRoZSBkZXN0cnVjdG9yIG9yIHdlCiAgKiB3b3VsZCBsZWFrIGJ1 ZmZlcnMuCiAgKi8KIAotLyoKLSAqIG1idWYgd3JhcHBlcnMKLSAqLwotCiAvKiBtYnVmIGRlc3Ry dWN0b3IsIGFsc28gbmVlZCB0byBjaGFuZ2UgdGhlIHR5cGUgdG8gRVhUX0VYVFJFRiwKICAqIGFk ZCBhbiBNX05PRlJFRSBmbGFnLCBhbmQgdGhlbiBjbGVhciB0aGUgZmxhZyBhbmQKICAqIGNoYWlu IGludG8gdW1hX3pmcmVlKHpvbmVfcGFjaywgbWYpCkBAIC0xMTIsMzUgKzExNCw5MyBAQAogCSht KS0+bV9leHQuZXh0X3R5cGUgPSBFWFRfRVhUUkVGOwlcCiB9IHdoaWxlICgwKQogCi1zdGF0aWMg dm9pZAotbmV0bWFwX2RlZmF1bHRfbWJ1Zl9kZXN0cnVjdG9yKHN0cnVjdCBtYnVmICptKQorc3Rh dGljIGludAordm9pZF9tYnVmX2R0b3Ioc3RydWN0IG1idWYgKm0sIHZvaWQgKmFyZzEsIHZvaWQg KmFyZzIpCiB7CiAJLyogcmVzdG9yZSBvcmlnaW5hbCBtYnVmICovCiAJbS0+bV9leHQuZXh0X2J1 ZiA9IG0tPm1fZGF0YSA9IG0tPm1fZXh0LmV4dF9hcmcxOwogCW0tPm1fZXh0LmV4dF9hcmcxID0g TlVMTDsKIAltLT5tX2V4dC5leHRfdHlwZSA9IEVYVF9QQUNLRVQ7CiAJbS0+bV9leHQuZXh0X2Zy ZWUgPSBOVUxMOwotCWlmIChHRVRfTUJVRl9SRUZDTlQobSkgPT0gMCkKKwlpZiAoTUJVRl9SRUZD TlQobSkgPT0gMCkKIAkJU0VUX01CVUZfUkVGQ05UKG0sIDEpOwogCXVtYV96ZnJlZSh6b25lX3Bh Y2ssIG0pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1idWYgKgot bmV0bWFwX2dldF9tYnVmKGludCBsZW4pCitubV9vc19nZXRfbWJ1ZihzdHJ1Y3QgaWZuZXQgKmlm cCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKKworCSh2b2lkKWlmcDsKIAltID0gbV9n ZXRjbChNX05PV0FJVCwgTVRfREFUQSwgTV9QS1RIRFIpOwogCWlmIChtKSB7Ci0JCW0tPm1fZmxh Z3MgfD0gTV9OT0ZSRUU7CS8qIFhYWE5QOiBBbG1vc3QgY2VydGFpbmx5IGluY29ycmVjdC4gKi8K KwkJLyogbV9nZXRjbCgpIChtYl9jdG9yX21idWYpIGhhcyBhbiBhc3NlcnQgdGhhdCBjaGVja3Mg dGhhdAorCQkgKiBNX05PRlJFRSBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgYXMgdGhpcmQgYXJndW1l bnQsCisJCSAqIHNvIHdlIGhhdmUgdG8gc2V0IE1fTk9GUkVFIGFmdGVyIG1fZ2V0Y2woKS4gKi8K KwkJbS0+bV9mbGFncyB8PSBNX05PRlJFRTsKIAkJbS0+bV9leHQuZXh0X2FyZzEgPSBtLT5tX2V4 dC5leHRfYnVmOyAvLyBYWFggc2F2ZQotCQltLT5tX2V4dC5leHRfZnJlZSA9ICh2b2lkICopbmV0 bWFwX2RlZmF1bHRfbWJ1Zl9kZXN0cnVjdG9yOworCQltLT5tX2V4dC5leHRfZnJlZSA9ICh2b2lk ICopdm9pZF9tYnVmX2R0b3I7CiAJCW0tPm1fZXh0LmV4dF90eXBlID0gRVhUX0VYVFJFRjsKLQkJ TkQoNSwgImNyZWF0ZSBtICVwIHJlZmNudCAlZCIsIG0sIEdFVF9NQlVGX1JFRkNOVChtKSk7CisJ CU5EKDUsICJjcmVhdGUgbSAlcCByZWZjbnQgJWQiLCBtLCBNQlVGX1JFRkNOVChtKSk7CiAJfQog CXJldHVybiBtOwogfQogCisjZWxzZSAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICov CisKKy8qCisgKiBOZXdlciB2ZXJzaW9ucyBvZiBGcmVlQlNELCB1c2luZyBhIHN0cmFpZ2h0Zm9y d2FyZCBzY2hlbWUuCisgKgorICogV2UgYWxsb2NhdGUgbWJ1ZnMgd2l0aCBtX2dldGhkcigpLCBz aW5jZSB0aGUgbWJ1ZiBoZWFkZXIgaXMgbmVlZGVkCisgKiBieSB0aGUgZHJpdmVyLiBXZSBhbHNv IGF0dGFjaCBhIGN1c3RvbWx5LXByb3ZpZGVkIGV4dGVybmFsIHN0b3JhZ2UsCisgKiB3aGljaCBp biB0aGlzIGNhc2UgaXMgYSBuZXRtYXAgYnVmZmVyLiBXaGVuIGNhbGxpbmcgbV9leHRhZGQoKSwg aG93ZXZlcgorICogd2UgcGFzcyBhIE5VTEwgYWRkcmVzcywgc2luY2UgdGhlIHJlYWwgYWRkcmVz cyAoYW5kIGxlbmd0aCkgd2lsbCBiZQorICogZmlsbGVkIGluIGJ5IG5tX29zX2dlbmVyaWNfeG1p dF9mcmFtZSgpIHJpZ2h0IGJlZm9yZSBjYWxsaW5nCisgKiBpZl90cmFuc21pdCgpLgorICoKKyAq IFRoZSBkdG9yIGZ1bmN0aW9uIGRvZXMgbm90aGluZywgaG93ZXZlciB3ZSBuZWVkIGl0IHNpbmNl IG1iX2ZyZWVfZXh0KCkKKyAqIGhhcyBhIEtBU1NFUlQoKSwgY2hlY2tpbmcgdGhhdCB0aGUgbWJ1 ZiBkdG9yIGZ1bmN0aW9uIGlzIG5vdCBOVUxMLgorICovCisKKyNkZWZpbmUgU0VUX01CVUZfREVT VFJVQ1RPUihtLCBmbikJZG8gewkJXAorCShtKS0+bV9leHQuZXh0X2ZyZWUgPSAodm9pZCAqKWZu OwlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCB2b2lkX21idWZfZHRvcihzdHJ1Y3QgbWJ1 ZiAqbSwgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMikgeyB9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IG1idWYgKgorbm1fb3NfZ2V0X21idWYoc3RydWN0IGlmbmV0ICppZnAsIGludCBsZW4pCit7CisJ c3RydWN0IG1idWYgKm07CisKKwkodm9pZClpZnA7CisJKHZvaWQpbGVuOworCisJbSA9IG1fZ2V0 aGRyKE1fTk9XQUlULCBNVF9EQVRBKTsKKwlpZiAobSA9PSBOVUxMKSB7CisJCXJldHVybiBtOwor CX0KKworCW1fZXh0YWRkKG0sIE5VTEwgLyogYnVmICovLCAwIC8qIHNpemUgKi8sIHZvaWRfbWJ1 Zl9kdG9yLAorCQkgTlVMTCwgTlVMTCwgMCwgRVhUX05FVF9EUlYpOworCisJcmV0dXJuIG07Cit9 CisKKyNlbmRpZiAvKiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwICovCisKKyNlbGlmIGRl ZmluZWQgX1dJTjMyCiAKKyNpbmNsdWRlICJ3aW5fZ2x1ZS5oIgorCisjZGVmaW5lIHJ0bmxfbG9j aygpCU5EKCJydG5sX2xvY2sgY2FsbGVkIikKKyNkZWZpbmUgcnRubF91bmxvY2soKQlORCgicnRu bF91bmxvY2sgY2FsbGVkIikKKyNkZWZpbmUgTUJVRl9UWFEobSkgCTAvLygobSktPm1fcGt0aGRy LmZsb3dpZCkKKyNkZWZpbmUgTUJVRl9SWFEobSkJICAgIDAvLygobSktPm1fcGt0aGRyLmZsb3dp ZCkKKyNkZWZpbmUgc21wX21iKCkJCS8vWFhYOiB0byBiZSBjb3JyZWN0bHkgZGVmaW5lZAogCiAj ZWxzZSAvKiBsaW51eCAqLwogCkBAIC0xNTAsNyArMjEwLDEyIEBACiAjaW5jbHVkZSA8bGludXgv ZXRodG9vbC5oPiAgICAgIC8qIHN0cnVjdCBldGh0b29sX29wcywgZ2V0X3JpbmdwYXJhbSAqLwog I2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KIAotLy8jZGVmaW5lIFJFR19SRVNFVAorc3RhdGlj IGlubGluZSBzdHJ1Y3QgbWJ1ZiAqCitubV9vc19nZXRfbWJ1ZihzdHJ1Y3QgaWZuZXQgKmlmcCwg aW50IGxlbikKK3sKKwlyZXR1cm4gYWxsb2Nfc2tiKGlmcC0+bmVlZGVkX2hlYWRyb29tICsgbGVu ICsKKwkJCSBpZnAtPm5lZWRlZF90YWlscm9vbSwgR0ZQX0FUT01JQyk7Cit9CiAKICNlbmRpZiAv KiBsaW51eCAqLwogCkBAIC0xNjEsOCArMjI2LDIxIEBACiAjaW5jbHVkZSA8ZGV2L25ldG1hcC9u ZXRtYXBfbWVtMi5oPgogCiAKKyNkZWZpbmUgZm9yX2VhY2hfa3JpbmdfbihfaSwgX2ssIF9rYXJy LCBfbikgXAorCWZvciAoX2s9X2thcnIsIF9pID0gMDsgX2kgPCBfbjsgKF9rKSsrLCAoX2kpKysp CisKKyNkZWZpbmUgZm9yX2VhY2hfdHhfa3JpbmcoX2ksIF9rLCBfbmEpIFwKKyAgICAgICAgICAg IGZvcl9lYWNoX2tyaW5nX24oX2ksIF9rLCAoX25hKS0+dHhfcmluZ3MsIChfbmEpLT5udW1fdHhf cmluZ3MpCisjZGVmaW5lIGZvcl9lYWNoX3R4X2tyaW5nX2goX2ksIF9rLCBfbmEpIFwKKyAgICAg ICAgICAgIGZvcl9lYWNoX2tyaW5nX24oX2ksIF9rLCAoX25hKS0+dHhfcmluZ3MsIChfbmEpLT5u dW1fdHhfcmluZ3MgKyAxKQorCisjZGVmaW5lIGZvcl9lYWNoX3J4X2tyaW5nKF9pLCBfaywgX25h KSBcCisgICAgICAgICAgICBmb3JfZWFjaF9rcmluZ19uKF9pLCBfaywgKF9uYSktPnJ4X3Jpbmdz LCAoX25hKS0+bnVtX3J4X3JpbmdzKQorI2RlZmluZSBmb3JfZWFjaF9yeF9rcmluZ19oKF9pLCBf aywgX25hKSBcCisgICAgICAgICAgICBmb3JfZWFjaF9rcmluZ19uKF9pLCBfaywgKF9uYSktPnJ4 X3JpbmdzLCAoX25hKS0+bnVtX3J4X3JpbmdzICsgMSkKKwogCi0vKiA9PT09PT09PT09PT09PT09 PT09PT09PT0gdXNhZ2Ugc3RhdHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9 PT09PT09PT09PT09PT09PT09PT09PT0gUEVSRk9STUFOQ0UgU1RBVElTVElDUyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT0gKi8KIAogI2lmZGVmIFJBVEVfR0VORVJJQwogI2RlZmluZSBJRlJB VEUoeCkgeApAQCAtMTcwLDYgKzI0OCw4IEBACiAJdW5zaWduZWQgbG9uZyB0eHBrdDsKIAl1bnNp Z25lZCBsb25nIHR4c3luYzsKIAl1bnNpZ25lZCBsb25nIHR4aXJxOworCXVuc2lnbmVkIGxvbmcg dHhyZXBsOworCXVuc2lnbmVkIGxvbmcgdHhkcm9wOwogCXVuc2lnbmVkIGxvbmcgcnhwa3Q7CiAJ dW5zaWduZWQgbG9uZyByeGlycTsKIAl1bnNpZ25lZCBsb25nIHJ4c3luYzsKQEAgLTE5NCw2ICsy NzQsOCBAQAogCVJBVEVfUFJJTlRLKHR4cGt0KTsKIAlSQVRFX1BSSU5USyh0eHN5bmMpOwogCVJB VEVfUFJJTlRLKHR4aXJxKTsKKwlSQVRFX1BSSU5USyh0eHJlcGwpOworCVJBVEVfUFJJTlRLKHR4 ZHJvcCk7CiAJUkFURV9QUklOVEsocnhwa3QpOwogCVJBVEVfUFJJTlRLKHJ4c3luYyk7CiAJUkFU RV9QUklOVEsocnhpcnEpOwpAQCAtMjMwLDk0ICszMTIsMjIwIEBACiAgKiB0aGUgcG9sbGVyIHRo cmVhZHMuIERpZmZlcmVudGx5IGZyb20gbmV0bWFwX3J4X2lycSgpLCB3ZSBjaGVjawogICogb25s eSBOQUZfTkVUTUFQX09OIGluc3RlYWQgb2YgTkFGX05BVElWRV9PTiB0byBlbmFibGUgdGhlIGly cS4KICAqLwotc3RhdGljIHZvaWQKLW5ldG1hcF9nZW5lcmljX2lycShzdHJ1Y3QgaWZuZXQgKmlm cCwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSkKK3ZvaWQKK25ldG1hcF9nZW5lcmljX2lycShz dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBxLCB1X2ludCAqd29ya19kb25lKQogewot CXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEgPSBOQShpZnApOwogCWlmICh1bmxpa2VseSghbm1f bmV0bWFwX29uKG5hKSkpCiAJCXJldHVybjsKIAotCW5ldG1hcF9jb21tb25faXJxKGlmcCwgcSwg d29ya19kb25lKTsKKwluZXRtYXBfY29tbW9uX2lycShuYSwgcSwgd29ya19kb25lKTsKKyNpZmRl ZiBSQVRFX0dFTkVSSUMKKwlpZiAod29ya19kb25lKQorCQlyYXRlX2N0eC5uZXcucnhpcnErKzsK KwllbHNlCisJCXJhdGVfY3R4Lm5ldy50eGlycSsrOworI2VuZGlmICAvKiBSQVRFX0dFTkVSSUMg Ki8KIH0KIAorc3RhdGljIGludAorZ2VuZXJpY19uZXRtYXBfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0 bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEg PSAoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKiluYTsKKwlzdHJ1Y3QgbmV0bWFwX2ty aW5nICprcmluZyA9IE5VTEw7CisJaW50IGksIHI7CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0g MCkgeworCQlEKCJHZW5lcmljIGFkYXB0ZXIgJXAgZ29lcyBvZmYiLCBuYSk7CisJCXJ0bmxfbG9j aygpOworCisJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKworCQkvKiBSZWxlYXNl IHBhY2tldCBzdGVlcmluZyBjb250cm9sLiAqLworCQlubV9vc19jYXRjaF90eChnbmEsIDApOwor CisJCS8qIFN0b3AgaW50ZXJjZXB0aW5nIHBhY2tldHMgb24gdGhlIFJYIHBhdGguICovCisJCW5t X29zX2NhdGNoX3J4KGduYSwgMCk7CisKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlmb3JfZWFj aF9yeF9rcmluZ19oKHIsIGtyaW5nLCBuYSkgeworCQlpZiAobm1fa3JpbmdfcGVuZGluZ19vZmYo a3JpbmcpKSB7CisJCQlEKCJSWCByaW5nICVkIG9mIGdlbmVyaWMgYWRhcHRlciAlcCBnb2VzIG9m ZiIsIHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PRkY7CisJCX0KKwl9 CisJZm9yX2VhY2hfdHhfa3JpbmdfaChyLCBrcmluZywgbmEpIHsKKwkJaWYgKG5tX2tyaW5nX3Bl bmRpbmdfb2ZmKGtyaW5nKSkgeworCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsK KwkJCUQoIlRYIHJpbmcgJWQgb2YgZ2VuZXJpYyBhZGFwdGVyICVwIGdvZXMgb2ZmIiwgciwgbmEp OworCQl9CisJfQorCisJZm9yX2VhY2hfcnhfa3Jpbmcociwga3JpbmcsIG5hKSB7CisJCS8qIEZy ZWUgdGhlIG1idWZzIHN0aWxsIHBlbmRpbmcgaW4gdGhlIFJYIHF1ZXVlcywKKwkJICogdGhhdCBk aWQgbm90IGVuZCB1cCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG5ldG1hcAorCQkgKiBSWCByaW5n cy4gKi8KKwkJbWJxX3NhZmVfcHVyZ2UoJmtyaW5nLT5yeF9xdWV1ZSk7CisJCW5tX29zX21pdGln YXRpb25fY2xlYW51cCgmZ25hLT5taXRbcl0pOworCX0KKworCS8qIERlY3JlbWVudCByZWZlcmVu Y2UgY291bnRlciBmb3IgdGhlIG1idWZzIGluIHRoZQorCSAqIFRYIHBvb2xzLiBUaGVzZSBtYnVm cyBjYW4gYmUgc3RpbGwgcGVuZGluZyBpbiBkcml2ZXJzLAorCSAqIChlLmcuIHRoaXMgaGFwcGVu cyB3aXRoIHZpcnRpby1uZXQgZHJpdmVyLCB3aGljaAorCSAqIGRvZXMgbGF6eSByZWNsYWltaW5n IG9mIHRyYW5zbWl0dGVkIG1idWZzKS4gKi8KKwlmb3JfZWFjaF90eF9rcmluZyhyLCBrcmluZywg bmEpIHsKKwkJLyogV2UgbXVzdCByZW1vdmUgdGhlIGRlc3RydWN0b3Igb24gdGhlIFRYIGV2ZW50 LAorCQkgKiBiZWNhdXNlIHRoZSBkZXN0cnVjdG9yIGludm9rZXMgbmV0bWFwIGNvZGUsIGFuZAor CQkgKiB0aGUgbmV0bWFwIG1vZHVsZSBtYXkgZGlzYXBwZWFyIGJlZm9yZSB0aGUKKwkJICogVFgg ZXZlbnQgaXMgY29uc3VtZWQuICovCisJCW10eF9sb2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9s b2NrKTsKKwkJaWYgKGtyaW5nLT50eF9ldmVudCkgeworCQkJU0VUX01CVUZfREVTVFJVQ1RPUihr cmluZy0+dHhfZXZlbnQsIE5VTEwpOworCQl9CisJCWtyaW5nLT50eF9ldmVudCA9IE5VTEw7CisJ CW10eF91bmxvY2tfc3Bpbigma3JpbmctPnR4X2V2ZW50X2xvY2spOworCX0KKworCWlmIChuYS0+ YWN0aXZlX2ZkcyA9PSAwKSB7CisJCW5tX29zX2ZyZWUoZ25hLT5taXQpOworCisJCWZvcl9lYWNo X3J4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkJbWJxX3NhZmVfZmluaSgma3JpbmctPnJ4X3F1 ZXVlKTsKKwkJfQorCisJCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkJbXR4 X2Rlc3Ryb3koJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKwkJCWlmIChrcmluZy0+dHhfcG9vbCA9 PSBOVUxMKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZvciAoaT0wOyBpPG5hLT5udW1f dHhfZGVzYzsgaSsrKSB7CisJCQkJaWYgKGtyaW5nLT50eF9wb29sW2ldKSB7CisJCQkJCW1fZnJl ZW0oa3JpbmctPnR4X3Bvb2xbaV0pOworCQkJCX0KKwkJCX0KKwkJCW5tX29zX2ZyZWUoa3Jpbmct PnR4X3Bvb2wpOworCQkJa3JpbmctPnR4X3Bvb2wgPSBOVUxMOworCQl9CisKKyNpZmRlZiBSQVRF X0dFTkVSSUMKKwkJaWYgKC0tcmF0ZV9jdHgucmVmY291bnQgPT0gMCkgeworCQkJRCgiZGVsX3Rp bWVyKCkiKTsKKwkJCWRlbF90aW1lcigmcmF0ZV9jdHgudGltZXIpOworCQl9CisjZW5kaWYKKwl9 CisKKwlyZXR1cm4gMDsKK30KIAogLyogRW5hYmxlL2Rpc2FibGUgbmV0bWFwIG1vZGUgZm9yIGEg Z2VuZXJpYyBuZXR3b3JrIGludGVyZmFjZS4gKi8KIHN0YXRpYyBpbnQKIGdlbmVyaWNfbmV0bWFw X3JlZ2lzdGVyKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBlbmFibGUpCiB7CiAJc3Ry dWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmduYSA9IChzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNf YWRhcHRlciAqKW5hOwotCXN0cnVjdCBtYnVmICptOworCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmty aW5nID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAJaW50IGksIHI7CiAKLQlpZiAoIW5hKQorCWlmICgh bmEpIHsKIAkJcmV0dXJuIEVJTlZBTDsKKwl9CiAKLSNpZmRlZiBSRUdfUkVTRVQKLQllcnJvciA9 IGlmcC0+bmV0ZGV2X29wcy0+bmRvX3N0b3AoaWZwKTsKLQlpZiAoZXJyb3IpIHsKLQkJcmV0dXJu IGVycm9yOwotCX0KLSNlbmRpZiAvKiBSRUdfUkVTRVQgKi8KLQotCWlmIChlbmFibGUpIHsgLyog RW5hYmxlIG5ldG1hcCBtb2RlLiAqLwotCQkvKiBJbml0IHRoZSBtaXRpZ2F0aW9uIHN1cHBvcnQg b24gYWxsIHRoZSByeCBxdWV1ZXMuICovCi0JCWduYS0+bWl0ID0gbWFsbG9jKG5hLT5udW1fcnhf cmluZ3MgKiBzaXplb2Yoc3RydWN0IG5tX2dlbmVyaWNfbWl0KSwKLQkJCQkJTV9ERVZCVUYsIE1f Tk9XQUlUIHwgTV9aRVJPKTsKKwlpZiAoIWVuYWJsZSkgeworCQkvKiBUaGlzIGlzIGFjdHVhbGx5 IGFuIHVucmVnaWYuICovCisJCXJldHVybiBnZW5lcmljX25ldG1hcF91bnJlZ2lzdGVyKG5hKTsK Kwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgeworCQlEKCJHZW5lcmljIGFkYXB0ZXIg JXAgZ29lcyBvbiIsIG5hKTsKKwkJLyogRG8gYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyB3aGVuIChu YS0+YWN0aXZlX2ZkcyA9PSAwKSwgdG8KKwkJICogc2ltcGxpZnkgZXJyb3IgbWFuYWdlbWVudC4g Ki8KKworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG1pdGlnYXRpb24gc3VwcG9ydCBvbiBhbGwg dGhlIHJ4IHF1ZXVlcy4gKi8KKwkJZ25hLT5taXQgPSBubV9vc19tYWxsb2MobmEtPm51bV9yeF9y aW5ncyAqIHNpemVvZihzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQpKTsKIAkJaWYgKCFnbmEtPm1pdCkg ewogCQkJRCgibWl0aWdhdGlvbiBhbGxvY2F0aW9uIGZhaWxlZCIpOwogCQkJZXJyb3IgPSBFTk9N RU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQlmb3IgKHI9MDsgcjxuYS0+bnVtX3J4X3JpbmdzOyBy KyspCi0JCQluZXRtYXBfbWl0aWdhdGlvbl9pbml0KCZnbmEtPm1pdFtyXSwgciwgbmEpOwogCi0J CS8qIEluaXRpYWxpemUgdGhlIHJ4IHF1ZXVlLCBhcyBnZW5lcmljX3J4X2hhbmRsZXIoKSBjYW4K LQkJICogYmUgY2FsbGVkIGFzIHNvb24gYXMgbmV0bWFwX2NhdGNoX3J4KCkgcmV0dXJucy4KLQkJ ICovCi0JCWZvciAocj0wOyByPG5hLT5udW1fcnhfcmluZ3M7IHIrKykgewotCQkJbWJxX3NhZmVf aW5pdCgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKKwkJZm9yX2VhY2hfcnhfa3Jpbmcociwg a3JpbmcsIG5hKSB7CisJCQkvKiBJbml0IG1pdGlnYXRpb24gc3VwcG9ydC4gKi8KKwkJCW5tX29z X21pdGlnYXRpb25faW5pdCgmZ25hLT5taXRbcl0sIHIsIG5hKTsKKworCQkJLyogSW5pdGlhbGl6 ZSB0aGUgcnggcXVldWUsIGFzIGdlbmVyaWNfcnhfaGFuZGxlcigpIGNhbgorCQkJICogYmUgY2Fs bGVkIGFzIHNvb24gYXMgbm1fb3NfY2F0Y2hfcngoKSByZXR1cm5zLgorCQkJICovCisJCQltYnFf c2FmZV9pbml0KCZrcmluZy0+cnhfcXVldWUpOwogCQl9CiAKIAkJLyoKLQkJICogUHJlYWxsb2Nh dGUgcGFja2V0IGJ1ZmZlcnMgZm9yIHRoZSB0eCByaW5ncy4KKwkJICogUHJlcGFyZSBtYnVmIHBv b2xzIChwYXJhbGxlbCB0byB0aGUgdHggcmluZ3MpLCBmb3IgcGFja2V0CisJCSAqIHRyYW5zbWlz c2lvbi4gRG9uJ3QgcHJlYWxsb2NhdGUgdGhlIG1idWZzIGhlcmUsIGl0J3Mgc2ltcGxlcgorCQkg KiB0byBsZWF2ZSB0aGlzIHRhc2sgdG8gdHhzeW5jLgogCQkgKi8KLQkJZm9yIChyPTA7IHI8bmEt Pm51bV90eF9yaW5nczsgcisrKQotCQkJbmEtPnR4X3JpbmdzW3JdLnR4X3Bvb2wgPSBOVUxMOwot CQlmb3IgKHI9MDsgcjxuYS0+bnVtX3R4X3JpbmdzOyByKyspIHsKLQkJCW5hLT50eF9yaW5nc1ty XS50eF9wb29sID0gbWFsbG9jKG5hLT5udW1fdHhfZGVzYyAqIHNpemVvZihzdHJ1Y3QgbWJ1ZiAq KSwKLQkJCQkJTV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9aRVJPKTsKLQkJCWlmICghbmEtPnR4X3Jp bmdzW3JdLnR4X3Bvb2wpIHsKKwkJZm9yX2VhY2hfdHhfa3Jpbmcociwga3JpbmcsIG5hKSB7CisJ CQlrcmluZy0+dHhfcG9vbCA9IE5VTEw7CisJCX0KKwkJZm9yX2VhY2hfdHhfa3Jpbmcociwga3Jp bmcsIG5hKSB7CisJCQlrcmluZy0+dHhfcG9vbCA9CisJCQkJbm1fb3NfbWFsbG9jKG5hLT5udW1f dHhfZGVzYyAqIHNpemVvZihzdHJ1Y3QgbWJ1ZiAqKSk7CisJCQlpZiAoIWtyaW5nLT50eF9wb29s KSB7CiAJCQkJRCgidHhfcG9vbCBhbGxvY2F0aW9uIGZhaWxlZCIpOwogCQkJCWVycm9yID0gRU5P TUVNOwogCQkJCWdvdG8gZnJlZV90eF9wb29sczsKIAkJCX0KLQkJCWZvciAoaT0wOyBpPG5hLT5u dW1fdHhfZGVzYzsgaSsrKQotCQkJCW5hLT50eF9yaW5nc1tyXS50eF9wb29sW2ldID0gTlVMTDsK LQkJCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsgaSsrKSB7Ci0JCQkJbSA9IG5ldG1hcF9n ZXRfbWJ1ZihORVRNQVBfQlVGX1NJWkUobmEpKTsKLQkJCQlpZiAoIW0pIHsKLQkJCQkJRCgidHhf cG9vbFslZF0gYWxsb2NhdGlvbiBmYWlsZWQiLCBpKTsKLQkJCQkJZXJyb3IgPSBFTk9NRU07Ci0J CQkJCWdvdG8gZnJlZV90eF9wb29sczsKLQkJCQl9Ci0JCQkJbmEtPnR4X3JpbmdzW3JdLnR4X3Bv b2xbaV0gPSBtOwotCQkJfQorCQkJbXR4X2luaXQoJmtyaW5nLT50eF9ldmVudF9sb2NrLCAidHhf ZXZlbnRfbG9jayIsCisJCQkJIE5VTEwsIE1UWF9TUElOKTsKIAkJfQorCX0KKworCWZvcl9lYWNo X3J4X2tyaW5nX2gociwga3JpbmcsIG5hKSB7CisJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGty aW5nKSkgeworCQkJRCgiUlggcmluZyAlZCBvZiBnZW5lcmljIGFkYXB0ZXIgJXAgZ29lcyBvbiIs IHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PTjsKKwkJfQorCisJfQor CWZvcl9lYWNoX3R4X2tyaW5nX2gociwga3JpbmcsIG5hKSB7CisJCWlmIChubV9rcmluZ19wZW5k aW5nX29uKGtyaW5nKSkgeworCQkJRCgiVFggcmluZyAlZCBvZiBnZW5lcmljIGFkYXB0ZXIgJXAg Z29lcyBvbiIsIHIsIG5hKTsKKwkJCWtyaW5nLT5ucl9tb2RlID0gTktSX05FVE1BUF9PTjsKKwkJ fQorCX0KKworCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQkvKiBJbml0aWFs aXplIHR4X3Bvb2wgYW5kIHR4X2V2ZW50LiAqLworCQlmb3IgKGk9MDsgaTxuYS0+bnVtX3R4X2Rl c2M7IGkrKykgeworCQkJa3JpbmctPnR4X3Bvb2xbaV0gPSBOVUxMOworCQl9CisKKwkJa3Jpbmct PnR4X2V2ZW50ID0gTlVMTDsKKwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkgewogCQly dG5sX2xvY2soKTsKKwogCQkvKiBQcmVwYXJlIHRvIGludGVyY2VwdCBpbmNvbWluZyB0cmFmZmlj LiAqLwotCQllcnJvciA9IG5ldG1hcF9jYXRjaF9yeChnbmEsIDEpOworCQllcnJvciA9IG5tX29z X2NhdGNoX3J4KGduYSwgMSk7CiAJCWlmIChlcnJvcikgewotCQkJRCgibmV0ZGV2X3J4X2hhbmRs ZXJfcmVnaXN0ZXIoKSBmYWlsZWQgKCVkKSIsIGVycm9yKTsKKwkJCUQoIm5tX29zX2NhdGNoX3J4 KDEpIGZhaWxlZCAoJWQpIiwgZXJyb3IpOwogCQkJZ290byByZWdpc3Rlcl9oYW5kbGVyOwogCQl9 Ci0JCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVUTUFQX09OOwogCiAJCS8qIE1ha2UgbmV0bWFwIGNv bnRyb2wgdGhlIHBhY2tldCBzdGVlcmluZy4gKi8KLQkJbmV0bWFwX2NhdGNoX3R4KGduYSwgMSk7 CisJCWVycm9yID0gbm1fb3NfY2F0Y2hfdHgoZ25hLCAxKTsKKwkJaWYgKGVycm9yKSB7CisJCQlE KCJubV9vc19jYXRjaF90eCgxKSBmYWlsZWQgKCVkKSIsIGVycm9yKTsKKwkJCWdvdG8gY2F0Y2hf cng7CisJCX0KIAogCQlydG5sX3VubG9jaygpOwogCisJCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVU TUFQX09OOworCiAjaWZkZWYgUkFURV9HRU5FUklDCiAJCWlmIChyYXRlX2N0eC5yZWZjb3VudCA9 PSAwKSB7CiAJCQlEKCJzZXR1cF90aW1lcigpIik7CkBAIC0zMjksNzUgKzUzNywyOCBAQAogCQl9 CiAJCXJhdGVfY3R4LnJlZmNvdW50Kys7CiAjZW5kaWYgLyogUkFURSAqLwotCi0JfSBlbHNlIGlm IChuYS0+dHhfcmluZ3NbMF0udHhfcG9vbCkgewotCQkvKiBEaXNhYmxlIG5ldG1hcCBtb2RlLiBX ZSBlbnRlciBoZXJlIG9ubHkgaWYgdGhlIHByZXZpb3VzCi0JCSAgIGdlbmVyaWNfbmV0bWFwX3Jl Z2lzdGVyKG5hLCAxKSB3YXMgc3VjY2Vzc2Z1bC4KLQkJICAgSWYgaXQgd2FzIG5vdCwgbmEtPnR4 X3JpbmdzWzBdLnR4X3Bvb2wgd2FzIHNldCB0byBOVUxMIGJ5IHRoZQotCQkgICBlcnJvciBoYW5k bGluZyBjb2RlIGJlbG93LiAqLwotCQlydG5sX2xvY2soKTsKLQotCQluYS0+bmFfZmxhZ3MgJj0g fk5BRl9ORVRNQVBfT047Ci0KLQkJLyogUmVsZWFzZSBwYWNrZXQgc3RlZXJpbmcgY29udHJvbC4g Ki8KLQkJbmV0bWFwX2NhdGNoX3R4KGduYSwgMCk7Ci0KLQkJLyogRG8gbm90IGludGVyY2VwdCBw YWNrZXRzIG9uIHRoZSByeCBwYXRoLiAqLwotCQluZXRtYXBfY2F0Y2hfcngoZ25hLCAwKTsKLQot CQlydG5sX3VubG9jaygpOwotCi0JCS8qIEZyZWUgdGhlIG1idWZzIGdvaW5nIHRvIHRoZSBuZXRt YXAgcmluZ3MgKi8KLQkJZm9yIChyPTA7IHI8bmEtPm51bV9yeF9yaW5nczsgcisrKSB7Ci0JCQlt YnFfc2FmZV9wdXJnZSgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKLQkJCW1icV9zYWZlX2Rl c3Ryb3koJm5hLT5yeF9yaW5nc1tyXS5yeF9xdWV1ZSk7Ci0JCX0KLQotCQlmb3IgKHI9MDsgcjxu YS0+bnVtX3J4X3JpbmdzOyByKyspCi0JCQluZXRtYXBfbWl0aWdhdGlvbl9jbGVhbnVwKCZnbmEt Pm1pdFtyXSk7Ci0JCWZyZWUoZ25hLT5taXQsIE1fREVWQlVGKTsKLQotCQlmb3IgKHI9MDsgcjxu YS0+bnVtX3R4X3JpbmdzOyByKyspIHsKLQkJCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsg aSsrKSB7Ci0JCQkJbV9mcmVlbShuYS0+dHhfcmluZ3Nbcl0udHhfcG9vbFtpXSk7Ci0JCQl9Ci0J CQlmcmVlKG5hLT50eF9yaW5nc1tyXS50eF9wb29sLCBNX0RFVkJVRik7Ci0JCX0KLQotI2lmZGVm IFJBVEVfR0VORVJJQwotCQlpZiAoLS1yYXRlX2N0eC5yZWZjb3VudCA9PSAwKSB7Ci0JCQlEKCJk ZWxfdGltZXIoKSIpOwotCQkJZGVsX3RpbWVyKCZyYXRlX2N0eC50aW1lcik7Ci0JCX0KLSNlbmRp ZgogCX0KIAotI2lmZGVmIFJFR19SRVNFVAotCWVycm9yID0gaWZwLT5uZXRkZXZfb3BzLT5uZG9f b3BlbihpZnApOwotCWlmIChlcnJvcikgewotCQlnb3RvIGZyZWVfdHhfcG9vbHM7Ci0JfQotI2Vu ZGlmCi0KIAlyZXR1cm4gMDsKIAorCS8qIEhlcmUgKG5hLT5hY3RpdmVfZmRzID09IDApIGhvbGRz LiAqLworY2F0Y2hfcng6CisJbm1fb3NfY2F0Y2hfcngoZ25hLCAwKTsKIHJlZ2lzdGVyX2hhbmRs ZXI6CiAJcnRubF91bmxvY2soKTsKIGZyZWVfdHhfcG9vbHM6Ci0JZm9yIChyPTA7IHI8bmEtPm51 bV90eF9yaW5nczsgcisrKSB7Ci0JCWlmIChuYS0+dHhfcmluZ3Nbcl0udHhfcG9vbCA9PSBOVUxM KQorCWZvcl9lYWNoX3R4X2tyaW5nKHIsIGtyaW5nLCBuYSkgeworCQltdHhfZGVzdHJveSgma3Jp bmctPnR4X2V2ZW50X2xvY2spOworCQlpZiAoa3JpbmctPnR4X3Bvb2wgPT0gTlVMTCkgewogCQkJ Y29udGludWU7Ci0JCWZvciAoaT0wOyBpPG5hLT5udW1fdHhfZGVzYzsgaSsrKQotCQkJaWYgKG5h LT50eF9yaW5nc1tyXS50eF9wb29sW2ldKQotCQkJCW1fZnJlZW0obmEtPnR4X3JpbmdzW3JdLnR4 X3Bvb2xbaV0pOwotCQlmcmVlKG5hLT50eF9yaW5nc1tyXS50eF9wb29sLCBNX0RFVkJVRik7Ci0J CW5hLT50eF9yaW5nc1tyXS50eF9wb29sID0gTlVMTDsKLQl9Ci0JZm9yIChyPTA7IHI8bmEtPm51 bV9yeF9yaW5nczsgcisrKSB7Ci0JCW5ldG1hcF9taXRpZ2F0aW9uX2NsZWFudXAoJmduYS0+bWl0 W3JdKTsKLQkJbWJxX3NhZmVfZGVzdHJveSgmbmEtPnJ4X3JpbmdzW3JdLnJ4X3F1ZXVlKTsKKwkJ fQorCQlubV9vc19mcmVlKGtyaW5nLT50eF9wb29sKTsKKwkJa3JpbmctPnR4X3Bvb2wgPSBOVUxM OwogCX0KLQlmcmVlKGduYS0+bWl0LCBNX0RFVkJVRik7CisJZm9yX2VhY2hfcnhfa3Jpbmcociwg a3JpbmcsIG5hKSB7CisJCW1icV9zYWZlX2ZpbmkoJmtyaW5nLT5yeF9xdWV1ZSk7CisJfQorCW5t X29zX2ZyZWUoZ25hLT5taXQpOwogb3V0OgogCiAJcmV0dXJuIGVycm9yOwpAQCAtNDExLDI0ICs1 NzIsNjcgQEAKIHN0YXRpYyB2b2lkCiBnZW5lcmljX21idWZfZGVzdHJ1Y3RvcihzdHJ1Y3QgbWJ1 ZiAqbSkKIHsKLQluZXRtYXBfZ2VuZXJpY19pcnEoTUJVRl9JRlAobSksIE1CVUZfVFhRKG0pLCBO VUxMKTsKKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0gTkEoR0VOX1RYX01CVUZfSUZQKG0p KTsKKwlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZzsKKwl1bnNpZ25lZCBpbnQgciA9IE1CVUZf VFhRKG0pOworCXVuc2lnbmVkIGludCByX29yaWcgPSByOworCisJaWYgKHVubGlrZWx5KCFubV9u ZXRtYXBfb24obmEpIHx8IHIgPj0gbmEtPm51bV90eF9yaW5ncykpIHsKKwkJRCgiRXJyb3I6IG5v IG5ldG1hcCBhZGFwdGVyIG9uIGRldmljZSAlcCIsCisJCSAgR0VOX1RYX01CVUZfSUZQKG0pKTsK KwkJcmV0dXJuOworCX0KKworCS8qCisJICogRmlyc3QsIGNsZWFyIHRoZSBldmVudCBtYnVmLgor CSAqIEluIHByaW5jaXBsZSwgdGhlIGV2ZW50ICdtJyBzaG91bGQgbWF0Y2ggdGhlIG9uZSBzdG9y ZWQKKwkgKiBvbiByaW5nICdyJy4gSG93ZXZlciB3ZSBjaGVjayBpdCBleHBsaWNpdGVseSB0byBz dGF5CisJICogc2FmZSBhZ2FpbnN0IGxvd2VyIGxheWVycyAocWRpc2MsIGRyaXZlciwgZXRjLikg Y2hhbmdpbmcKKwkgKiBNQlVGX1RYUShtKSB1bmRlciBvdXIgZmVldC4gSWYgdGhlIG1hdGNoIGlz IG5vdCBmb3VuZAorCSAqIG9uICdyJywgd2UgdHJ5IHRvIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNv bWUgb3RoZXIgcmluZy4KKwkgKi8KKyAgICAgICAgZm9yICg7OykgeworCQlib29sIG1hdGNoID0g ZmFsc2U7CisKKwkJa3JpbmcgPSAmbmEtPnR4X3JpbmdzW3JdOworCQltdHhfbG9ja19zcGluKCZr cmluZy0+dHhfZXZlbnRfbG9jayk7CisJCWlmIChrcmluZy0+dHhfZXZlbnQgPT0gbSkgeworCQkJ a3JpbmctPnR4X2V2ZW50ID0gTlVMTDsKKwkJCW1hdGNoID0gdHJ1ZTsKKwkJfQorCQltdHhfdW5s b2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKworCQlpZiAobWF0Y2gpIHsKKwkJCWlm IChyICE9IHJfb3JpZykgeworCQkJCVJEKDEsICJldmVudCAlcCBtaWdyYXRlZDogcmluZyAldSAt LT4gJXUiLAorCQkJCSAgICAgIG0sIHJfb3JpZywgcik7CisJCQl9CisJCQlicmVhazsKKwkJfQor CisJCWlmICgrK3IgPT0gbmEtPm51bV90eF9yaW5ncykgciA9IDA7CisKKwkJaWYgKHIgPT0gcl9v cmlnKSB7CisJCQlSRCgxLCAiQ2Fubm90IG1hdGNoIGV2ZW50ICVwIiwgbSk7CisJCQlyZXR1cm47 CisJCX0KKwl9CisKKwkvKiBTZWNvbmQsIHdha2UgdXAgY2xpZW50cy4gVGhleSB3aWxsIHJlY2xh aW0gdGhlIGV2ZW50IHRocm91Z2gKKwkgKiB0eHN5bmMuICovCisJbmV0bWFwX2dlbmVyaWNfaXJx KG5hLCByLCBOVUxMKTsKICNpZmRlZiBfX0ZyZWVCU0RfXwotCWlmIChuZXRtYXBfdmVyYm9zZSkK LQkJUkQoNSwgIlR4IGlycSAoJXApIHF1ZXVlICVkIGluZGV4ICVkIiAsIG0sIE1CVUZfVFhRKG0p LCAoaW50KSh1aW50cHRyX3QpbS0+bV9leHQuZXh0X2FyZzEpOwotCW5ldG1hcF9kZWZhdWx0X21i dWZfZGVzdHJ1Y3RvcihtKTsKLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwotCUlGUkFURShyYXRl X2N0eC5uZXcudHhpcnErKyk7CisJdm9pZF9tYnVmX2R0b3IobSwgTlVMTCwgTlVMTCk7CisjZW5k aWYKIH0KIAotZXh0ZXJuIGludCBuZXRtYXBfYWRhcHRpdmVfaW87Ci0KIC8qIFJlY29yZCBjb21w bGV0ZWQgdHJhbnNtaXNzaW9ucyBhbmQgdXBkYXRlIGh3dGFpbC4KICAqCiAgKiBUaGUgb2xkZXN0 IHR4IGJ1ZmZlciBub3QgeWV0IGNvbXBsZXRlZCBpcyBhdCBucl9od3RhaWwgKyAxLAogICogbnJf aHdjdXIgaXMgdGhlIGZpcnN0IHVuc2VudCBidWZmZXIuCiAgKi8KIHN0YXRpYyB1X2ludAotZ2Vu ZXJpY19uZXRtYXBfdHhfY2xlYW4oc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcpCitnZW5lcmlj X25ldG1hcF90eF9jbGVhbihzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IHR4cWRpc2Mp CiB7CiAJdV9pbnQgY29uc3QgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXVfaW50 IG5tX2kgPSBubV9uZXh0KGtyaW5nLT5ucl9od3RhaWwsIGxpbSk7CkBAIC00MzYsMzkgKzY0MCw1 MiBAQAogCXVfaW50IG4gPSAwOwogCXN0cnVjdCBtYnVmICoqdHhfcG9vbCA9IGtyaW5nLT50eF9w b29sOwogCisJTkQoImh3Y3VyID0gJWQsIGh3dGFpbCA9ICVkIiwga3JpbmctPm5yX2h3Y3VyLCBr cmluZy0+bnJfaHd0YWlsKTsKKwogCXdoaWxlIChubV9pICE9IGh3Y3VyKSB7IC8qIGJ1ZmZlcnMg bm90IGNvbXBsZXRlZCAqLwogCQlzdHJ1Y3QgbWJ1ZiAqbSA9IHR4X3Bvb2xbbm1faV07CiAKLQkJ aWYgKHVubGlrZWx5KG0gPT0gTlVMTCkpIHsKLQkJCS8qIHRoaXMgaXMgZG9uZSwgdHJ5IHRvIHJl cGxlbmlzaCB0aGUgZW50cnkgKi8KLQkJCXR4X3Bvb2xbbm1faV0gPSBtID0gbmV0bWFwX2dldF9t YnVmKE5FVE1BUF9CVUZfU0laRShrcmluZy0+bmEpKTsKKwkJaWYgKHR4cWRpc2MpIHsKKwkJCWlm IChtID09IE5VTEwpIHsKKwkJCQkvKiBOb3RoaW5nIHRvIGRvLCB0aGlzIGlzIGdvaW5nCisJCQkJ ICogdG8gYmUgcmVwbGVuaXNoZWQuICovCisJCQkJUkQoMywgIklzIHRoaXMgaGFwcGVuaW5nPyIp OworCisJCQl9IGVsc2UgaWYgKE1CVUZfUVVFVUVEKG0pKSB7CisJCQkJYnJlYWs7IC8qIE5vdCBk ZXF1ZXVlZCB5ZXQuICovCisKKwkJCX0gZWxzZSBpZiAoTUJVRl9SRUZDTlQobSkgIT0gMSkgewor CQkJCS8qIFRoaXMgbWJ1ZiBoYXMgYmVlbiBkZXF1ZXVlZCBidXQgaXMgc3RpbGwgYnVzeQorCQkJ CSAqIChyZWZjb3VudCBpcyAyKS4KKwkJCQkgKiBMZWF2ZSBpdCB0byB0aGUgZHJpdmVyIGFuZCBy ZXBsZW5pc2guICovCisJCQkJbV9mcmVlbShtKTsKKwkJCQl0eF9wb29sW25tX2ldID0gTlVMTDsK KwkJCX0KKworCQl9IGVsc2UgewogCQkJaWYgKHVubGlrZWx5KG0gPT0gTlVMTCkpIHsKLQkJCQlE KCJtYnVmIGFsbG9jYXRpb24gZmFpbGVkLCBYWFggZXJyb3IiKTsKLQkJCQkvLyBYWFggaG93IGRv IHdlIHByb2NlZWQgPyBicmVhayA/Ci0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJaW50IGV2ZW50 X2NvbnN1bWVkOworCisJCQkJLyogVGhpcyBzbG90IHdhcyB1c2VkIHRvIHBsYWNlIGFuIGV2ZW50 LiAqLworCQkJCW10eF9sb2NrX3NwaW4oJmtyaW5nLT50eF9ldmVudF9sb2NrKTsKKwkJCQlldmVu dF9jb25zdW1lZCA9IChrcmluZy0+dHhfZXZlbnQgPT0gTlVMTCk7CisJCQkJbXR4X3VubG9ja19z cGluKCZrcmluZy0+dHhfZXZlbnRfbG9jayk7CisJCQkJaWYgKCFldmVudF9jb25zdW1lZCkgewor CQkJCQkvKiBUaGUgZXZlbnQgaGFzIG5vdCBiZWVuIGNvbnN1bWVkIHlldCwKKwkJCQkJICogc3Rp bGwgYnVzeSBpbiB0aGUgZHJpdmVyLiAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogVGhl IGV2ZW50IGhhcyBiZWVuIGNvbnN1bWVkLCB3ZSBjYW4gZ28KKwkJCQkgKiBhaGVhZC4gKi8KKwor CQkJfSBlbHNlIGlmIChNQlVGX1JFRkNOVChtKSAhPSAxKSB7CisJCQkJLyogVGhpcyBtYnVmIGlz IHN0aWxsIGJ1c3k6IGl0cyByZWZjbnQgaXMgMi4gKi8KKwkJCQlicmVhazsKIAkJCX0KLQkJfSBl bHNlIGlmIChHRVRfTUJVRl9SRUZDTlQobSkgIT0gMSkgewotCQkJYnJlYWs7IC8qIFRoaXMgbWJ1 ZiBpcyBzdGlsbCBidXN5OiBpdHMgcmVmY250IGlzIDIuICovCiAJCX0KKwogCQluKys7CiAJCW5t X2kgPSBubV9uZXh0KG5tX2ksIGxpbSk7Ci0jaWYgMCAvKiByYXRlIGFkYXB0YXRpb24gKi8KLQkJ aWYgKG5ldG1hcF9hZGFwdGl2ZV9pbyA+IDEpIHsKLQkJCWlmIChuID49IG5ldG1hcF9hZGFwdGl2 ZV9pbykKLQkJCQlicmVhazsKLQkJfSBlbHNlIGlmIChuZXRtYXBfYWRhcHRpdmVfaW8pIHsKLQkJ CS8qIGlmIGh3Y3VyIC0gbm1faSA8IGxpbS84IGRvIGFuIGVhcmx5IGJyZWFrCi0JCQkgKiBzbyB3 ZSBwcmV2ZW50IHRoZSBzZW5kZXIgZnJvbSBzdGFsbGluZy4gU2VlIENWVC4KLQkJCSAqLwotCQkJ aWYgKGh3Y3VyID49IG5tX2kpIHsKLQkJCQlpZiAoaHdjdXIgLSBubV9pIDwgbGltLzIpCi0JCQkJ CWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaHdjdXIgKyBsaW0gKyAxIC0gbm1faSA8IGxp bS8yKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotI2VuZGlmCiAJfQogCWtyaW5nLT5ucl9od3Rh aWwgPSBubV9wcmV2KG5tX2ksIGxpbSk7CiAJTkQoInR4IGNvbXBsZXRlZCBbJWRdIC0+IGh3dGFp bCAlZCIsIG4sIGtyaW5nLT5ucl9od3RhaWwpOwpAQCAtNDc2LDIzICs2OTMsMTcgQEAKIAlyZXR1 cm4gbjsKIH0KIAotCi0vKgotICogV2UgaGF2ZSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGRyaXZl ciBiZXR3ZWVuIG5yX2h3dGFpbCArMSBhbmQgaHdjdXIuCi0gKiBDb21wdXRlIGEgcG9zaXRpb24g aW4gdGhlIG1pZGRsZSwgdG8gYmUgdXNlZCB0byBnZW5lcmF0ZQotICogYSBub3RpZmljYXRpb24u Ci0gKi8KKy8qIENvbXB1dGUgYSBzbG90IGluZGV4IGluIHRoZSBtaWRkbGUgYmV0d2VlbiBpbmYg YW5kIHN1cC4gKi8KIHN0YXRpYyBpbmxpbmUgdV9pbnQKLWdlbmVyaWNfdHhfZXZlbnRfbWlkZGxl KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCB1X2ludCBod2N1cikKK3JpbmdfbWlkZGxlKHVf aW50IGluZiwgdV9pbnQgc3VwLCB1X2ludCBsaW0pCiB7Ci0JdV9pbnQgbiA9IGtyaW5nLT5ua3Jf bnVtX3Nsb3RzOwotCXVfaW50IG50YyA9IG5tX25leHQoa3JpbmctPm5yX2h3dGFpbCwgbi0xKTsK Kwl1X2ludCBuID0gbGltICsgMTsKIAl1X2ludCBlOwogCi0JaWYgKGh3Y3VyID49IG50Yykgewot CQllID0gKGh3Y3VyICsgbnRjKSAvIDI7CisJaWYgKHN1cCA+PSBpbmYpIHsKKwkJZSA9IChzdXAg KyBpbmYpIC8gMjsKIAl9IGVsc2UgeyAvKiB3cmFwIGFyb3VuZCAqLwotCQllID0gKGh3Y3VyICsg biArIG50YykgLyAyOworCQllID0gKHN1cCArIG4gKyBpbmYpIC8gMjsKIAkJaWYgKGUgPj0gbikg ewogCQkJZSAtPSBuOwogCQl9CkBAIC01MDYsMzUgKzcxNyw1OSBAQAogCXJldHVybiBlOwogfQog Ci0vKgotICogV2UgaGF2ZSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGRyaXZlciBiZXR3ZWVuIG5y X2h3dGFpbCsxIGFuZCBod2N1ci4KLSAqIFNjaGVkdWxlIGEgbm90aWZpY2F0aW9uIGFwcHJveGlt YXRlbHkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdHdvLgotICogVGhlcmUgaXMgYSByYWNlIGJ1dCB0 aGlzIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiB0eHN5bmMgd2hpY2ggZG9lcwotICogYSBkb3VibGUg Y2hlY2suCi0gKi8KIHN0YXRpYyB2b2lkCiBnZW5lcmljX3NldF90eF9ldmVudChzdHJ1Y3QgbmV0 bWFwX2tyaW5nICprcmluZywgdV9pbnQgaHdjdXIpCiB7CisJdV9pbnQgbGltID0ga3JpbmctPm5r cl9udW1fc2xvdHMgLSAxOwogCXN0cnVjdCBtYnVmICptOwogCXVfaW50IGU7CisJdV9pbnQgbnRj ID0gbm1fbmV4dChrcmluZy0+bnJfaHd0YWlsLCBsaW0pOyAvKiBuZXh0IHRvIGNsZWFuICovCiAK LQlpZiAobm1fbmV4dChrcmluZy0+bnJfaHd0YWlsLCBrcmluZy0+bmtyX251bV9zbG90cyAtMSkg PT0gaHdjdXIpIHsKKwlpZiAobnRjID09IGh3Y3VyKSB7CiAJCXJldHVybjsgLyogYWxsIGJ1ZmZl cnMgYXJlIGZyZWUgKi8KIAl9Ci0JZSA9IGdlbmVyaWNfdHhfZXZlbnRfbWlkZGxlKGtyaW5nLCBo d2N1cik7CisKKwkvKgorCSAqIFdlIGhhdmUgcGVuZGluZyBwYWNrZXRzIGluIHRoZSBkcml2ZXIg YmV0d2VlbiBod3RhaWwrMQorCSAqIGFuZCBod2N1ciwgYW5kIHdlIGhhdmUgdG8gY2hvc2Ugb25l IG9mIHRoZXNlIHNsb3QgdG8KKwkgKiBnZW5lcmF0ZSBhIG5vdGlmaWNhdGlvbi4KKwkgKiBUaGVy ZSBpcyBhIHJhY2UgYnV0IHRoaXMgaXMgb25seSBjYWxsZWQgd2l0aGluIHR4c3luYyB3aGljaAor CSAqIGRvZXMgYSBkb3VibGUgY2hlY2suCisJICovCisjaWYgMAorCS8qIENob29zZSBhIHNsb3Qg aW4gdGhlIG1pZGRsZSwgc28gdGhhdCB3ZSBkb24ndCByaXNrIGVuZGluZworCSAqIHVwIGluIGEg c2l0dWF0aW9uIHdoZXJlIHRoZSBjbGllbnQgY29udGludW91c2x5IHdha2UgdXAsCisJICogZmls bHMgb25lIG9yIGEgZmV3IFRYIHNsb3RzIGFuZCBnbyB0byBzbGVlcCBhZ2Fpbi4gKi8KKwllID0g cmluZ19taWRkbGUobnRjLCBod2N1ciwgbGltKTsKKyNlbHNlCisJLyogQ2hvb3NlIHRoZSBmaXJz dCBwZW5kaW5nIHNsb3QsIHRvIGJlIHNhZmUgYWdhaW5zdCBkcml2ZXIKKwkgKiByZW9yZGVyaW5n IG1idWYgdHJhbnNtaXNzaW9ucy4gKi8KKwllID0gbnRjOworI2VuZGlmCiAKIAltID0ga3Jpbmct PnR4X3Bvb2xbZV07Ci0JTkQoNSwgIlJlcXVlc3QgRXZlbnQgYXQgJWQgbWJ1ZiAlcCByZWZjbnQg JWQiLCBlLCBtLCBtID8gR0VUX01CVUZfUkVGQ05UKG0pIDogLTIgKTsKIAlpZiAobSA9PSBOVUxM KSB7Ci0JCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGV2ZW50IG9u IHRoZSBuZXRtYXAKLQkJICAgc2xvdCAnZSc6IFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCisJ CS8qIEFuIGV2ZW50IGlzIGFscmVhZHkgaW4gcGxhY2UuICovCiAJCXJldHVybjsKIAl9Ci0Ja3Jp bmctPnR4X3Bvb2xbZV0gPSBOVUxMOworCisJbXR4X2xvY2tfc3Bpbigma3JpbmctPnR4X2V2ZW50 X2xvY2spOworCWlmIChrcmluZy0+dHhfZXZlbnQpIHsKKwkJLyogQW4gZXZlbnQgaXMgYWxyZWFk eSBpbiBwbGFjZS4gKi8KKwkJbXR4X3VubG9ja19zcGluKCZrcmluZy0+dHhfZXZlbnRfbG9jayk7 CisJCXJldHVybjsKKwl9CisKIAlTRVRfTUJVRl9ERVNUUlVDVE9SKG0sIGdlbmVyaWNfbWJ1Zl9k ZXN0cnVjdG9yKTsKKwlrcmluZy0+dHhfZXZlbnQgPSBtOworCW10eF91bmxvY2tfc3Bpbigma3Jp bmctPnR4X2V2ZW50X2xvY2spOworCisJa3JpbmctPnR4X3Bvb2xbZV0gPSBOVUxMOworCisJTkQo NSwgIlJlcXVlc3QgRXZlbnQgYXQgJWQgbWJ1ZiAlcCByZWZjbnQgJWQiLCBlLCBtLCBtID8gTUJV Rl9SRUZDTlQobSkgOiAtMiApOwogCi0JLy8gWFhYIHdtYigpID8KLQkvKiBEZWNyZW1lbnQgdGhl IHJlZmNvdW50IGFuIGZyZWUgaXQgaWYgd2UgaGF2ZSB0aGUgbGFzdCBvbmUuICovCisJLyogRGVj cmVtZW50IHRoZSByZWZjb3VudC4gVGhpcyB3aWxsIGZyZWUgaXQgaWYgd2UgbG9zZSB0aGUgcmFj ZQorCSAqIHdpdGggdGhlIGRyaXZlci4gKi8KIAltX2ZyZWVtKG0pOwogCXNtcF9tYigpOwogfQpA QCAtNTUxLDYgKzc4Niw3IEBACiBnZW5lcmljX25ldG1hcF90eHN5bmMoc3RydWN0IG5ldG1hcF9r cmluZyAqa3JpbmcsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0g a3JpbmctPm5hOworCXN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEgPSAoc3RydWN0 IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5p ZnA7CiAJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0ga3JpbmctPnJpbmc7CiAJdV9pbnQgbm1f aTsJLyogaW5kZXggaW50byB0aGUgbmV0bWFwIHJpbmcgKi8gLy8gagpAQCAtNTYwLDggKzc5Niw2 IEBACiAKIAlJRlJBVEUocmF0ZV9jdHgubmV3LnR4c3luYysrKTsKIAotCS8vIFRPRE86IGhhbmRs ZSB0aGUgY2FzZSBvZiBtYnVmIGFsbG9jYXRpb24gZmFpbHVyZQotCiAJcm1iKCk7CiAKIAkvKgpA QCAtNTY5LDcyICs4MDMsMTIxIEBACiAJICovCiAJbm1faSA9IGtyaW5nLT5ucl9od2N1cjsKIAlp ZiAobm1faSAhPSBoZWFkKSB7CS8qIHdlIGhhdmUgbmV3IHBhY2tldHMgdG8gc2VuZCAqLworCQlz dHJ1Y3Qgbm1fb3NfZ2VuX2FyZyBhOworCQl1X2ludCBldmVudCA9IC0xOworCisJCWlmIChnbmEt PnR4cWRpc2MgJiYgbm1fa3JfdHhlbXB0eShrcmluZykpIHsKKwkJCS8qIEluIHR4cWRpc2MgbW9k ZSwgd2UgYXNrIGZvciBhIGRlbGF5ZWQgbm90aWZpY2F0aW9uLAorCQkJICogYnV0IG9ubHkgd2hl biBjdXIgPT0gaHd0YWlsLCB3aGljaCBtZWFucyB0aGF0IHRoZQorCQkJICogY2xpZW50IGlzIGdv aW5nIHRvIGJsb2NrLiAqLworCQkJZXZlbnQgPSByaW5nX21pZGRsZShubV9pLCBoZWFkLCBsaW0p OworCQkJTkQoMywgIlBsYWNlIHR4cWRpc2MgZXZlbnQgKGh3Y3VyPSV1LGV2ZW50PSV1LCIKKwkJ CSAgICAgICJoZWFkPSV1LGh3dGFpbD0ldSkiLCBubV9pLCBldmVudCwgaGVhZCwKKwkJCSAgICAg IGtyaW5nLT5ucl9od3RhaWwpOworCQl9CisKKwkJYS5pZnAgPSBpZnA7CisJCWEucmluZ19uciA9 IHJpbmdfbnI7CisJCWEuaGVhZCA9IGEudGFpbCA9IE5VTEw7CisKIAkJd2hpbGUgKG5tX2kgIT0g aGVhZCkgewogCQkJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gJnJpbmctPnNsb3Rbbm1faV07 CiAJCQl1X2ludCBsZW4gPSBzbG90LT5sZW47CiAJCQl2b2lkICphZGRyID0gTk1CKG5hLCBzbG90 KTsKLQogCQkJLyogZGV2aWNlLXNwZWNpZmljICovCiAJCQlzdHJ1Y3QgbWJ1ZiAqbTsKIAkJCWlu dCB0eF9yZXQ7CiAKIAkJCU5NX0NIRUNLX0FERFJfTEVOKG5hLCBhZGRyLCBsZW4pOwogCi0JCQkv KiBUYWxlIGEgbWJ1ZiBmcm9tIHRoZSB0eCBwb29sIGFuZCBjb3B5IGluIHRoZSB1c2VyIHBhY2tl dC4gKi8KKwkJCS8qIFRhbGUgYSBtYnVmIGZyb20gdGhlIHR4IHBvb2wgKHJlcGxlbmlzaGluZyB0 aGUgcG9vbAorCQkJICogZW50cnkgaWYgbmVjZXNzYXJ5KSBhbmQgY29weSBpbiB0aGUgdXNlciBw YWNrZXQuICovCiAJCQltID0ga3JpbmctPnR4X3Bvb2xbbm1faV07Ci0JCQlpZiAodW5saWtlbHko IW0pKSB7Ci0JCQkJUkQoNSwgIlRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiIpOwotCQkJCWtyaW5n LT50eF9wb29sW25tX2ldID0gbSA9IG5ldG1hcF9nZXRfbWJ1ZihORVRNQVBfQlVGX1NJWkUobmEp KTsKLQkJCQlpZiAodW5saWtlbHkobSA9PSBOVUxMKSkgewotCQkJCQlEKCJtYnVmIGFsbG9jYXRp b24gZmFpbGVkIik7CisJCQlpZiAodW5saWtlbHkobSA9PSBOVUxMKSkgeworCQkJCWtyaW5nLT50 eF9wb29sW25tX2ldID0gbSA9CisJCQkJCW5tX29zX2dldF9tYnVmKGlmcCwgTkVUTUFQX0JVRl9T SVpFKG5hKSk7CisJCQkJaWYgKG0gPT0gTlVMTCkgeworCQkJCQlSRCgyLCAiRmFpbGVkIHRvIHJl cGxlbmlzaCBtYnVmIik7CisJCQkJCS8qIEhlcmUgd2UgY291bGQgc2NoZWR1bGUgYSB0aW1lciB3 aGljaAorCQkJCQkgKiByZXRyaWVzIHRvIHJlcGxlbmlzaCBhZnRlciBhIHdoaWxlLAorCQkJCQkg KiBhbmQgbm90aWZpZXMgdGhlIGNsaWVudCB3aGVuIGl0CisJCQkJCSAqIG1hbmFnZXMgdG8gcmVw bGVuaXNoIHNvbWUgc2xvdHMuIEluCisJCQkJCSAqIGFueSBjYXNlIHdlIGJyZWFrIGVhcmx5IHRv IGF2b2lkCisJCQkJCSAqIGNyYXNoZXMuICovCiAJCQkJCWJyZWFrOwogCQkJCX0KKwkJCQlJRlJB VEUocmF0ZV9jdHgubmV3LnR4cmVwbCsrKTsKIAkJCX0KLQkJCS8qIFhYWCB3ZSBzaG91bGQgYXNr IG5vdGlmaWNhdGlvbnMgd2hlbiBOU19SRVBPUlQgaXMgc2V0LAotCQkJICogb3Igcm91Z2hseSBl dmVyeSBoYWxmIGZyYW1lLiBXZSBjYW4gb3B0aW1pemUgdGhpcwotCQkJICogYnkgbGF6aWx5IHJl cXVlc3Rpbmcgbm90aWZpY2F0aW9ucyBvbmx5IHdoZW4gYQotCQkJICogdHJhbnNtaXNzaW9uIGZh aWxzLiBQcm9iYWJseSB0aGUgYmVzdCB3YXkgaXMgdG8KLQkJCSAqIGJyZWFrIG9uIGZhaWx1cmVz IGFuZCBzZXQgbm90aWZpY2F0aW9ucyB3aGVuCi0JCQkgKiByaW5nLT5jdXIgPT0gcmluZy0+dGFp bCB8fCBubV9pICE9IGN1cgorCisJCQlhLm0gPSBtOworCQkJYS5hZGRyID0gYWRkcjsKKwkJCWEu bGVuID0gbGVuOworCQkJYS5xZXZlbnQgPSAobm1faSA9PSBldmVudCk7CisJCQkvKiBXaGVuIG5v dCBpbiB0eHFkaXNjIG1vZGUsIHdlIHNob3VsZCBhc2sKKwkJCSAqIG5vdGlmaWNhdGlvbnMgd2hl biBOU19SRVBPUlQgaXMgc2V0LCBvciByb3VnaGx5CisJCQkgKiBldmVyeSBoYWxmIHJpbmcuIFRv IG9wdGltaXplIHRoaXMsIHdlIHNldCBhCisJCQkgKiBub3RpZmljYXRpb24gZXZlbnQgd2hlbiB0 aGUgY2xpZW50IHJ1bnMgb3V0IG9mCisJCQkgKiBUWCByaW5nIHNwYWNlLCBvciB3aGVuIHRyYW5z bWlzc2lvbiBmYWlscy4gSW4KKwkJCSAqIHRoZSBsYXR0ZXIgY2FzZSB3ZSBhbHNvIGJyZWFrIGVh cmx5LgogCQkJICovCi0JCQl0eF9yZXQgPSBnZW5lcmljX3htaXRfZnJhbWUoaWZwLCBtLCBhZGRy LCBsZW4sIHJpbmdfbnIpOworCQkJdHhfcmV0ID0gbm1fb3NfZ2VuZXJpY194bWl0X2ZyYW1lKCZh KTsKIAkJCWlmICh1bmxpa2VseSh0eF9yZXQpKSB7Ci0JCQkJTkQoNSwgInN0YXJ0X3htaXQgZmFp bGVkOiBlcnIgJWQgW25tX2kgJXUsIGhlYWQgJXUsIGh3dGFpbCAldV0iLAotCQkJCQkJdHhfcmV0 LCBubV9pLCBoZWFkLCBrcmluZy0+bnJfaHd0YWlsKTsKLQkJCQkvKgotCQkJCSAqIE5vIHJvb20g Zm9yIHRoaXMgbWJ1ZiBpbiB0aGUgZGV2aWNlIGRyaXZlci4KLQkJCQkgKiBSZXF1ZXN0IGEgbm90 aWZpY2F0aW9uIEZPUiBBIFBSRVZJT1VTIE1CVUYsCi0JCQkJICogdGhlbiBjYWxsIGdlbmVyaWNf bmV0bWFwX3R4X2NsZWFuKGtyaW5nKSB0byBkbyB0aGUKLQkJCQkgKiBkb3VibGUgY2hlY2sgYW5k IHNlZSBpZiB3ZSBjYW4gZnJlZSBtb3JlIGJ1ZmZlcnMuCi0JCQkJICogSWYgdGhlcmUgaXMgc3Bh Y2UgY29udGludWUsIGVsc2UgYnJlYWs7Ci0JCQkJICogTk9URTogdGhlIGRvdWJsZSBjaGVjayBp cyBuZWNlc3NhcnkgaWYgdGhlIHByb2JsZW0KLQkJCQkgKiBvY2N1cnMgaW4gdGhlIHR4c3luYyBj YWxsIGFmdGVyIHNlbHJlY29yZCgpLgotCQkJCSAqIEFsc28sIHdlIG5lZWQgc29tZSB3YXkgdG8g dGVsbCB0aGUgY2FsbGVyIHRoYXQgbm90Ci0JCQkJICogYWxsIGJ1ZmZlcnMgd2VyZSBxdWV1ZWQg b250byB0aGUgZGV2aWNlICh0aGlzIHdhcwotCQkJCSAqIG5vdCBhIHByb2JsZW0gd2l0aCBuYXRp dmUgbmV0bWFwIGRyaXZlciB3aGVyZSBzcGFjZQotCQkJCSAqIGlzIHByZWFsbG9jYXRlZCkuIFRo ZSBicmlkZ2UgaGFzIGEgc2ltaWxhciBwcm9ibGVtCi0JCQkJICogYW5kIHdlIHNvbHZlIGl0IHRo ZXJlIGJ5IGRyb3BwaW5nIHRoZSBleGNlc3MgcGFja2V0cy4KLQkJCQkgKi8KLQkJCQlnZW5lcmlj X3NldF90eF9ldmVudChrcmluZywgbm1faSk7Ci0JCQkJaWYgKGdlbmVyaWNfbmV0bWFwX3R4X2Ns ZWFuKGtyaW5nKSkgeyAvKiBzcGFjZSBub3cgYXZhaWxhYmxlICovCi0JCQkJCWNvbnRpbnVlOwot CQkJCX0gZWxzZSB7Ci0JCQkJCWJyZWFrOworCQkJCWlmICghZ25hLT50eHFkaXNjKSB7CisJCQkJ CS8qCisJCQkJCSAqIE5vIHJvb20gZm9yIHRoaXMgbWJ1ZiBpbiB0aGUgZGV2aWNlIGRyaXZlci4K KwkJCQkJICogUmVxdWVzdCBhIG5vdGlmaWNhdGlvbiBGT1IgQSBQUkVWSU9VUyBNQlVGLAorCQkJ CQkgKiB0aGVuIGNhbGwgZ2VuZXJpY19uZXRtYXBfdHhfY2xlYW4oa3JpbmcpIHRvIGRvIHRoZQor CQkJCQkgKiBkb3VibGUgY2hlY2sgYW5kIHNlZSBpZiB3ZSBjYW4gZnJlZSBtb3JlIGJ1ZmZlcnMu CisJCQkJCSAqIElmIHRoZXJlIGlzIHNwYWNlIGNvbnRpbnVlLCBlbHNlIGJyZWFrOworCQkJCQkg KiBOT1RFOiB0aGUgZG91YmxlIGNoZWNrIGlzIG5lY2Vzc2FyeSBpZiB0aGUgcHJvYmxlbQorCQkJ CQkgKiBvY2N1cnMgaW4gdGhlIHR4c3luYyBjYWxsIGFmdGVyIHNlbHJlY29yZCgpLgorCQkJCQkg KiBBbHNvLCB3ZSBuZWVkIHNvbWUgd2F5IHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0IG5vdAorCQkJ CQkgKiBhbGwgYnVmZmVycyB3ZXJlIHF1ZXVlZCBvbnRvIHRoZSBkZXZpY2UgKHRoaXMgd2FzCisJ CQkJCSAqIG5vdCBhIHByb2JsZW0gd2l0aCBuYXRpdmUgbmV0bWFwIGRyaXZlciB3aGVyZSBzcGFj ZQorCQkJCQkgKiBpcyBwcmVhbGxvY2F0ZWQpLiBUaGUgYnJpZGdlIGhhcyBhIHNpbWlsYXIgcHJv YmxlbQorCQkJCQkgKiBhbmQgd2Ugc29sdmUgaXQgdGhlcmUgYnkgZHJvcHBpbmcgdGhlIGV4Y2Vz cyBwYWNrZXRzLgorCQkJCQkgKi8KKwkJCQkJZ2VuZXJpY19zZXRfdHhfZXZlbnQoa3JpbmcsIG5t X2kpOworCQkJCQlpZiAoZ2VuZXJpY19uZXRtYXBfdHhfY2xlYW4oa3JpbmcsIGduYS0+dHhxZGlz YykpIHsKKwkJCQkJCS8qIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KKwkJCQkJCWNvbnRpbnVlOwor CQkJCQl9IGVsc2UgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQl9CisKKwkJCQkvKiBJbiB0 eHFkaXNjIG1vZGUsIHRoZSBuZXRtYXAtYXdhcmUgcWRpc2MKKwkJCQkgKiBxdWV1ZSBoYXMgdGhl IHNhbWUgbGVuZ3RoIGFzIHRoZSBudW1iZXIgb2YKKwkJCQkgKiBuZXRtYXAgc2xvdHMgKE4pLiBT aW5jZSB0YWlsIGlzIGFkdmFuY2VkCisJCQkJICogb25seSB3aGVuIHBhY2tldHMgYXJlIGRlcXVl dWVkLCBxZGlzYworCQkJCSAqIHF1ZXVlIG92ZXJydW4gY2Fubm90IGhhcHBlbiwgc28KKwkJCQkg KiBubV9vc19nZW5lcmljX3htaXRfZnJhbWUoKSBkaWQgbm90IGZhaWwKKwkJCQkgKiBiZWNhdXNl IG9mIHRoYXQuCisJCQkJICogSG93ZXZlciwgcGFja2V0cyBjYW4gYmUgZHJvcHBlZCBiZWNhdXNl CisJCQkJICogY2FycmllciBpcyBvZmYsIG9yIGJlY2F1c2Ugb3VyIHFkaXNjIGlzCisJCQkJICog YmVpbmcgZGVhY3RpdmF0ZWQsIG9yIHBvc3NpYmx5IGZvciBvdGhlcgorCQkJCSAqIHJlYXNvbnMu IEluIHRoZXNlIGNhc2VzLCB3ZSBqdXN0IGxldCB0aGUKKwkJCQkgKiBwYWNrZXQgdG8gYmUgZHJv cHBlZC4gKi8KKwkJCQlJRlJBVEUocmF0ZV9jdHgubmV3LnR4ZHJvcCsrKTsKIAkJCX0KKwogCQkJ c2xvdC0+ZmxhZ3MgJj0gfihOU19SRVBPUlQgfCBOU19CVUZfQ0hBTkdFRCk7CiAJCQlubV9pID0g bm1fbmV4dChubV9pLCBsaW0pOwotCQkJSUZSQVRFKHJhdGVfY3R4Lm5ldy50eHBrdCArKyk7CisJ CQlJRlJBVEUocmF0ZV9jdHgubmV3LnR4cGt0KyspOwogCQl9Ci0KLQkJLyogVXBkYXRlIGh3Y3Vy IHRvIHRoZSBuZXh0IHNsb3QgdG8gdHJhbnNtaXQuICovCi0JCWtyaW5nLT5ucl9od2N1ciA9IG5t X2k7IC8qIG5vdCBoZWFkLCB3ZSBjb3VsZCBicmVhayBlYXJseSAqLworCQlpZiAoYS5oZWFkICE9 IE5VTEwpIHsKKwkJCWEuYWRkciA9IE5VTEw7CisJCQlubV9vc19nZW5lcmljX3htaXRfZnJhbWUo JmEpOworCQl9CisJCS8qIFVwZGF0ZSBod2N1ciB0byB0aGUgbmV4dCBzbG90IHRvIHRyYW5zbWl0 LiBIZXJlIG5tX2kKKwkJICogaXMgbm90IG5lY2Vzc2FyaWx5IGhlYWQsIHdlIGNvdWxkIGJyZWFr IGVhcmx5LiAqLworCQlrcmluZy0+bnJfaHdjdXIgPSBubV9pOwogCX0KIAogCS8qCiAJICogU2Vj b25kLCByZWNsYWltIGNvbXBsZXRlZCBidWZmZXJzCiAJICovCi0JaWYgKGZsYWdzICYgTkFGX0ZP UkNFX1JFQ0xBSU0gfHwgbm1fa3JfdHhlbXB0eShrcmluZykpIHsKKwlpZiAoIWduYS0+dHhxZGlz YyAmJiAoZmxhZ3MgJiBOQUZfRk9SQ0VfUkVDTEFJTSB8fCBubV9rcl90eGVtcHR5KGtyaW5nKSkp IHsKIAkJLyogTm8gbW9yZSBhdmFpbGFibGUgc2xvdHM/IFNldCBhIG5vdGlmaWNhdGlvbiBldmVu dAogCQkgKiBvbiBhIG5ldG1hcCBzbG90IHRoYXQgd2lsbCBiZSBjbGVhbmVkIGluIHRoZSBmdXR1 cmUuCiAJCSAqIE5vIGRvdWJsZWNoZWNrIGlzIHBlcmZvcm1lZCwgc2luY2UgdHhzeW5jKCkgd2ls bCBiZQpAQCAtNjQyLDU4ICs5MjUsNzQgQEAKIAkJICovCiAJCWdlbmVyaWNfc2V0X3R4X2V2ZW50 KGtyaW5nLCBubV9pKTsKIAl9Ci0JTkQoInR4ICMlZCwgaHd0YWlsID0gJWQiLCBuLCBrcmluZy0+ bnJfaHd0YWlsKTsKIAotCWdlbmVyaWNfbmV0bWFwX3R4X2NsZWFuKGtyaW5nKTsKKwlnZW5lcmlj X25ldG1hcF90eF9jbGVhbihrcmluZywgZ25hLT50eHFkaXNjKTsKIAogCXJldHVybiAwOwogfQog CiAKIC8qCi0gKiBUaGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCAodGhyb3VnaCBuZXRtYXBfY2F0 Y2hfcngoKSkKKyAqIFRoaXMgaGFuZGxlciBpcyByZWdpc3RlcmVkICh0aHJvdWdoIG5tX29zX2Nh dGNoX3J4KCkpCiAgKiB3aXRoaW4gdGhlIGF0dGFjaGVkIG5ldHdvcmsgaW50ZXJmYWNlCiAgKiBp biB0aGUgUlggc3Vic3lzdGVtLCBzbyB0aGF0IGV2ZXJ5IG1idWYgcGFzc2VkIHVwIGJ5CiAgKiB0 aGUgZHJpdmVyIGNhbiBiZSBzdG9sZW4gdG8gdGhlIG5ldHdvcmsgc3RhY2suCiAgKiBTdG9sZW4g cGFja2V0cyBhcmUgcHV0IGluIGEgcXVldWUgd2hlcmUgdGhlCiAgKiBnZW5lcmljX25ldG1hcF9y eHN5bmMoKSBjYWxsYmFjayBjYW4gZXh0cmFjdCB0aGVtLgorICogUmV0dXJucyAxIGlmIHRoZSBw YWNrZXQgd2FzIHN0b2xlbiwgMCBvdGhlcndpc2UuCiAgKi8KLXZvaWQKK2ludAogZ2VuZXJpY19y eF9oYW5kbGVyKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKIAlzdHJ1Y3Qg bmV0bWFwX2FkYXB0ZXIgKm5hID0gTkEoaWZwKTsKIAlzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNfYWRh cHRlciAqZ25hID0gKHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICopbmE7CisJc3RydWN0 IG5ldG1hcF9rcmluZyAqa3Jpbmc7CiAJdV9pbnQgd29ya19kb25lOwotCXVfaW50IHJyID0gTUJV Rl9SWFEobSk7IC8vIHJlY2VpdmUgcmluZyBudW1iZXIKKwl1X2ludCByID0gTUJVRl9SWFEobSk7 IC8qIHJlY2VpdmUgcmluZyBudW1iZXIgKi8KKworCWlmIChyID49IG5hLT5udW1fcnhfcmluZ3Mp IHsKKwkJciA9IHIgJSBuYS0+bnVtX3J4X3JpbmdzOworCX0KKworCWtyaW5nID0gJm5hLT5yeF9y aW5nc1tyXTsKIAotCWlmIChyciA+PSBuYS0+bnVtX3J4X3JpbmdzKSB7Ci0JCXJyID0gcnIgJSBu YS0+bnVtX3J4X3JpbmdzOyAvLyBYWFggZXhwZW5zaXZlLi4uCisJaWYgKGtyaW5nLT5ucl9tb2Rl ID09IE5LUl9ORVRNQVBfT0ZGKSB7CisJCS8qIFdlIG11c3Qgbm90IGludGVyY2VwdCB0aGlzIG1i dWYuICovCisJCXJldHVybiAwOwogCX0KIAogCS8qIGxpbWl0IHRoZSBzaXplIG9mIHRoZSBxdWV1 ZSAqLwotCWlmICh1bmxpa2VseShtYnFfbGVuKCZuYS0+cnhfcmluZ3NbcnJdLnJ4X3F1ZXVlKSA+ IDEwMjQpKSB7CisJaWYgKHVubGlrZWx5KCFnbmEtPnJ4c2cgJiYgTUJVRl9MRU4obSkgPiBORVRN QVBfQlVGX1NJWkUobmEpKSkgeworCQkvKiBUaGlzIG1heSBoYXBwZW4gd2hlbiBHUk8vTFJPIGZl YXR1cmVzIGFyZSBlbmFibGVkIGZvcgorCQkgKiB0aGUgTklDIGRyaXZlciB3aGVuIHRoZSBnZW5l cmljIGFkYXB0ZXIgZG9lcyBub3QKKwkJICogc3VwcG9ydCBSWCBzY2F0dGVyLWdhdGhlci4gKi8K KwkJUkQoMiwgIldhcm5pbmc6IGRyaXZlciBwdXNoZWQgdXAgYmlnIHBhY2tldCAiCisJCQkJIihz aXplPSVkKSIsIChpbnQpTUJVRl9MRU4obSkpOworCQltX2ZyZWVtKG0pOworCX0gZWxzZSBpZiAo dW5saWtlbHkobWJxX2xlbigma3JpbmctPnJ4X3F1ZXVlKSA+IDEwMjQpKSB7CiAJCW1fZnJlZW0o bSk7CiAJfSBlbHNlIHsKLQkJbWJxX3NhZmVfZW5xdWV1ZSgmbmEtPnJ4X3JpbmdzW3JyXS5yeF9x dWV1ZSwgbSk7CisJCW1icV9zYWZlX2VucXVldWUoJmtyaW5nLT5yeF9xdWV1ZSwgbSk7CiAJfQog CiAJaWYgKG5ldG1hcF9nZW5lcmljX21pdCA8IDMyNzY4KSB7CiAJCS8qIG5vIHJ4IG1pdGlnYXRp b24sIHBhc3Mgbm90aWZpY2F0aW9uIHVwICovCi0JCW5ldG1hcF9nZW5lcmljX2lycShuYS0+aWZw LCByciwgJndvcmtfZG9uZSk7Ci0JCUlGUkFURShyYXRlX2N0eC5uZXcucnhpcnErKyk7CisJCW5l dG1hcF9nZW5lcmljX2lycShuYSwgciwgJndvcmtfZG9uZSk7CiAJfSBlbHNlIHsKIAkJLyogc2Ft ZSBhcyBzZW5kIGNvbWJpbmluZywgZmlsdGVyIG5vdGlmaWNhdGlvbiBpZiB0aGVyZSBpcyBhCiAJ CSAqIHBlbmRpbmcgdGltZXIsIG90aGVyd2lzZSBwYXNzIGl0IHVwIGFuZCBzdGFydCBhIHRpbWVy LgogCQkgKi8KLQkJaWYgKGxpa2VseShuZXRtYXBfbWl0aWdhdGlvbl9hY3RpdmUoJmduYS0+bWl0 W3JyXSkpKSB7CisJCWlmIChsaWtlbHkobm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoJmduYS0+bWl0 W3JdKSkpIHsKIAkJCS8qIFJlY29yZCB0aGF0IHRoZXJlIGlzIHNvbWUgcGVuZGluZyB3b3JrLiAq LwotCQkJZ25hLT5taXRbcnJdLm1pdF9wZW5kaW5nID0gMTsKKwkJCWduYS0+bWl0W3JdLm1pdF9w ZW5kaW5nID0gMTsKIAkJfSBlbHNlIHsKLQkJCW5ldG1hcF9nZW5lcmljX2lycShuYS0+aWZwLCBy ciwgJndvcmtfZG9uZSk7Ci0JCQlJRlJBVEUocmF0ZV9jdHgubmV3LnJ4aXJxKyspOwotCQkJbmV0 bWFwX21pdGlnYXRpb25fc3RhcnQoJmduYS0+bWl0W3JyXSk7CisJCQluZXRtYXBfZ2VuZXJpY19p cnEobmEsIHIsICZ3b3JrX2RvbmUpOworCQkJbm1fb3NfbWl0aWdhdGlvbl9zdGFydCgmZ25hLT5t aXRbcl0pOwogCQl9CiAJfQorCisJLyogV2UgaGF2ZSBpbnRlcmNlcHRlZCB0aGUgbWJ1Zi4gKi8K KwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTcxMyw1NCArMTAxMiwyMyBAQAogCXVfaW50IGNvbnN0 IGhlYWQgPSBrcmluZy0+cmhlYWQ7CiAJaW50IGZvcmNlX3VwZGF0ZSA9IChmbGFncyAmIE5BRl9G T1JDRV9SRUFEKSB8fCBrcmluZy0+bnJfa2ZsYWdzICYgTktSX1BFTkRJTlRSOwogCisJLyogQWRh cHRlci1zcGVjaWZpYyB2YXJpYWJsZXMuICovCisJdWludDE2X3Qgc2xvdF9mbGFncyA9IGtyaW5n LT5ua3Jfc2xvdF9mbGFnczsKKwl1X2ludCBubV9idWZfbGVuID0gTkVUTUFQX0JVRl9TSVpFKG5h KTsKKwlzdHJ1Y3QgbWJxIHRtcHE7CisJc3RydWN0IG1idWYgKm07CisJaW50IGF2YWlsOyAvKiBp biBieXRlcyAqLworCWludCBtbGVuOworCWludCBjb3B5OworCiAJaWYgKGhlYWQgPiBsaW0pCiAJ CXJldHVybiBuZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOwogCi0JLyoKLQkgKiBGaXJzdCBwYXJ0 OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cy4KLQkgKi8KLQlpZiAobmV0bWFwX25vX3Bl bmRpbnRyIHx8IGZvcmNlX3VwZGF0ZSkgewotCQkvKiBleHRyYWN0IGJ1ZmZlcnMgZnJvbSB0aGUg cnggcXVldWUsIHN0b3AgYXQgbW9zdCBvbmUKLQkJICogc2xvdCBiZWZvcmUgbnJfaHdjdXIgKHN0 b3BfaSkKLQkJICovCi0JCXVpbnQxNl90IHNsb3RfZmxhZ3MgPSBrcmluZy0+bmtyX3Nsb3RfZmxh Z3M7Ci0JCXVfaW50IHN0b3BfaSA9IG5tX3ByZXYoa3JpbmctPm5yX2h3Y3VyLCBsaW0pOwotCi0J CW5tX2kgPSBrcmluZy0+bnJfaHd0YWlsOyAvKiBmaXJzdCBlbXB0eSBzbG90IGluIHRoZSByZWNl aXZlIHJpbmcgKi8KLQkJZm9yIChuID0gMDsgbm1faSAhPSBzdG9wX2k7IG4rKykgewotCQkJaW50 IGxlbjsKLQkJCXZvaWQgKmFkZHIgPSBOTUIobmEsICZyaW5nLT5zbG90W25tX2ldKTsKLQkJCXN0 cnVjdCBtYnVmICptOwotCi0JCQkvKiB3ZSBvbmx5IGNoZWNrIHRoZSBhZGRyZXNzIGhlcmUgb24g Z2VuZXJpYyByeCByaW5ncyAqLwotCQkJaWYgKGFkZHIgPT0gTkVUTUFQX0JVRl9CQVNFKG5hKSkg eyAvKiBCYWQgYnVmZmVyICovCi0JCQkJcmV0dXJuIG5ldG1hcF9yaW5nX3JlaW5pdChrcmluZyk7 Ci0JCQl9Ci0JCQkvKgotCQkJICogQ2FsbCB0aGUgbG9ja2VkIHZlcnNpb24gb2YgdGhlIGZ1bmN0 aW9uLgotCQkJICogWFhYIElkZWFsbHkgd2UgY291bGQgZ3JhYiBhIGJhdGNoIG9mIG1idWZzIGF0 IG9uY2UKLQkJCSAqIGFuZCBzYXZlIHNvbWUgbG9ja2luZyBvdmVyaGVhZC4KLQkJCSAqLwotCQkJ bSA9IG1icV9zYWZlX2RlcXVldWUoJmtyaW5nLT5yeF9xdWV1ZSk7Ci0JCQlpZiAoIW0pCS8qIG5v IG1vcmUgZGF0YSAqLwotCQkJCWJyZWFrOwotCQkJbGVuID0gTUJVRl9MRU4obSk7Ci0JCQltX2Nv cHlkYXRhKG0sIDAsIGxlbiwgYWRkcik7Ci0JCQlyaW5nLT5zbG90W25tX2ldLmxlbiA9IGxlbjsK LQkJCXJpbmctPnNsb3Rbbm1faV0uZmxhZ3MgPSBzbG90X2ZsYWdzOwotCQkJbV9mcmVlbShtKTsK LQkJCW5tX2kgPSBubV9uZXh0KG5tX2ksIGxpbSk7Ci0JCX0KLQkJaWYgKG4pIHsKLQkJCWtyaW5n LT5ucl9od3RhaWwgPSBubV9pOwotCQkJSUZSQVRFKHJhdGVfY3R4Lm5ldy5yeHBrdCArPSBuKTsK LQkJfQotCQlrcmluZy0+bnJfa2ZsYWdzICY9IH5OS1JfUEVORElOVFI7Ci0JfQorCUlGUkFURShy YXRlX2N0eC5uZXcucnhzeW5jKyspOwogCi0JLy8gWFhYIHNob3VsZCB3ZSBpbnZlcnQgdGhlIG9y ZGVyID8KIAkvKgotCSAqIFNlY29uZCBwYXJ0OiBza2lwIHBhc3QgcGFja2V0cyB0aGF0IHVzZXJz cGFjZSBoYXMgcmVsZWFzZWQuCisJICogRmlyc3QgcGFydDogc2tpcCBwYXN0IHBhY2tldHMgdGhh dCB1c2Vyc3BhY2UgaGFzIHJlbGVhc2VkLgorCSAqIFRoaXMgY2FuIHBvc3NpYmx5IG1ha2Ugcm9v bSBmb3IgdGhlIHNlY29uZCBwYXJ0LgogCSAqLwogCW5tX2kgPSBrcmluZy0+bnJfaHdjdXI7CiAJ aWYgKG5tX2kgIT0gaGVhZCkgewpAQCAtNzczLDcgKzEwNDEsMTA2IEBACiAJCX0KIAkJa3Jpbmct Pm5yX2h3Y3VyID0gaGVhZDsKIAl9Ci0JSUZSQVRFKHJhdGVfY3R4Lm5ldy5yeHN5bmMrKyk7CisK KwkvKgorCSAqIFNlY29uZCBwYXJ0OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cy4KKwkg Ki8KKwlpZiAoIW5ldG1hcF9ub19wZW5kaW50ciAmJiAhZm9yY2VfdXBkYXRlKSB7CisJCXJldHVy biAwOworCX0KKworCW5tX2kgPSBrcmluZy0+bnJfaHd0YWlsOyAvKiBGaXJzdCBlbXB0eSBzbG90 IGluIHRoZSByZWNlaXZlIHJpbmcuICovCisKKwkvKiBDb21wdXRlIHRoZSBhdmFpbGFibGUgc3Bh Y2UgKGluIGJ5dGVzKSBpbiB0aGlzIG5ldG1hcCByaW5nLgorCSAqIFRoZSBmaXJzdCBzbG90IHRo YXQgaXMgbm90IGNvbnNpZGVyZWQgaW4gaXMgdGhlIG9uZSBiZWZvcmUKKwkgKiBucl9od2N1ci4g Ki8KKworCWF2YWlsID0gbm1fcHJldihrcmluZy0+bnJfaHdjdXIsIGxpbSkgLSBubV9pOworCWlm IChhdmFpbCA8IDApCisJCWF2YWlsICs9IGxpbSArIDE7CisJYXZhaWwgKj0gbm1fYnVmX2xlbjsK KworCS8qIEZpcnN0IHBhc3M6IFdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgb24gdGhlIFJYIG1idWYg cXVldWUsCisJICogZXh0cmFjdCBhcyBtYW55IG1idWZzIGFzIHRoZXkgZml0IHRoZSBhdmFpbGFi bGUgc3BhY2UsCisJICogYW5kIHB1dCB0aGVtIGluIGEgdGVtcG9yYXJ5IHF1ZXVlLgorCSAqIFRv IGF2b2lkIHBlcmZvcm1pbmcgYSBwZXItbWJ1ZiBkaXZpc2lvbiAobWxlbiAvIG5tX2J1Zl9sZW4p IHRvCisJICogdG8gdXBkYXRlIGF2YWlsLCB3ZSBkbyB0aGUgdXBkYXRlIGluIGEgd2hpbGUgbG9v cCB0aGF0IHdlCisJICogYWxzbyB1c2UgdG8gc2V0IHRoZSBSWCBzbG90cywgYnV0IHdpdGhvdXQg cGVyZm9ybWluZyB0aGUgY29weS4gKi8KKwltYnFfaW5pdCgmdG1wcSk7CisJbWJxX2xvY2soJmty aW5nLT5yeF9xdWV1ZSk7CisJZm9yIChuID0gMDs7IG4rKykgeworCQltID0gbWJxX3BlZWsoJmty aW5nLT5yeF9xdWV1ZSk7CisJCWlmICghbSkgeworCQkJLyogTm8gbW9yZSBwYWNrZXRzIGZyb20g dGhlIGRyaXZlci4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJbWxlbiA9IE1CVUZfTEVOKG0pOwor CQlpZiAobWxlbiA+IGF2YWlsKSB7CisJCQkvKiBObyBtb3JlIHNwYWNlIGluIHRoZSByaW5nLiAq LworCQkJYnJlYWs7CisJCX0KKworCQltYnFfZGVxdWV1ZSgma3JpbmctPnJ4X3F1ZXVlKTsKKwor CQl3aGlsZSAobWxlbikgeworCQkJY29weSA9IG5tX2J1Zl9sZW47CisJCQlpZiAobWxlbiA8IGNv cHkpIHsKKwkJCQljb3B5ID0gbWxlbjsKKwkJCX0KKwkJCW1sZW4gLT0gY29weTsKKwkJCWF2YWls IC09IG5tX2J1Zl9sZW47CisKKwkJCXJpbmctPnNsb3Rbbm1faV0ubGVuID0gY29weTsKKwkJCXJp bmctPnNsb3Rbbm1faV0uZmxhZ3MgPSBzbG90X2ZsYWdzIHwgKG1sZW4gPyBOU19NT1JFRlJBRyA6 IDApOworCQkJbm1faSA9IG5tX25leHQobm1faSwgbGltKTsKKwkJfQorCisJCW1icV9lbnF1ZXVl KCZ0bXBxLCBtKTsKKwl9CisJbWJxX3VubG9jaygma3JpbmctPnJ4X3F1ZXVlKTsKKworCS8qIFNl Y29uZCBwYXNzOiBEcmFpbiB0aGUgdGVtcG9yYXJ5IHF1ZXVlLCBnb2luZyBvdmVyIHRoZSB1c2Vk IFJYIHNsb3RzLAorCSAqIGFuZCBwZXJmb3JtIHRoZSBjb3B5IG91dCBvZiB0aGUgUlggcXVldWUg bG9jay4gKi8KKwlubV9pID0ga3JpbmctPm5yX2h3dGFpbDsKKworCWZvciAoOzspIHsKKwkJdm9p ZCAqbm1hZGRyOworCQlpbnQgb2ZzID0gMDsKKwkJaW50IG1vcmVmcmFnOworCisJCW0gPSBtYnFf ZGVxdWV1ZSgmdG1wcSk7CisJCWlmICghbSkJeworCQkJYnJlYWs7CisJCX0KKworCQlkbyB7CisJ CQlubWFkZHIgPSBOTUIobmEsICZyaW5nLT5zbG90W25tX2ldKTsKKwkJCS8qIFdlIG9ubHkgY2hl Y2sgdGhlIGFkZHJlc3MgaGVyZSBvbiBnZW5lcmljIHJ4IHJpbmdzLiAqLworCQkJaWYgKG5tYWRk ciA9PSBORVRNQVBfQlVGX0JBU0UobmEpKSB7IC8qIEJhZCBidWZmZXIgKi8KKwkJCQltX2ZyZWVt KG0pOworCQkJCW1icV9wdXJnZSgmdG1wcSk7CisJCQkJbWJxX2ZpbmkoJnRtcHEpOworCQkJCXJl dHVybiBuZXRtYXBfcmluZ19yZWluaXQoa3JpbmcpOworCQkJfQorCisJCQljb3B5ID0gcmluZy0+ c2xvdFtubV9pXS5sZW47CisJCQltX2NvcHlkYXRhKG0sIG9mcywgY29weSwgbm1hZGRyKTsKKwkJ CW9mcyArPSBjb3B5OworCQkJbW9yZWZyYWcgPSByaW5nLT5zbG90W25tX2ldLmZsYWdzICYgTlNf TU9SRUZSQUc7CisJCQlubV9pID0gbm1fbmV4dChubV9pLCBsaW0pOworCQl9IHdoaWxlIChtb3Jl ZnJhZyk7CisKKwkJbV9mcmVlbShtKTsKKwl9CisKKwltYnFfZmluaSgmdG1wcSk7CisKKwlpZiAo bikgeworCQlrcmluZy0+bnJfaHd0YWlsID0gbm1faTsKKwkJSUZSQVRFKHJhdGVfY3R4Lm5ldy5y eHBrdCArPSBuKTsKKwl9CisJa3JpbmctPm5yX2tmbGFncyAmPSB+TktSX1BFTkRJTlRSOwogCiAJ cmV0dXJuIDA7CiB9CkBAIC03ODcsOSArMTE1NCw4IEBACiAKIAlpZiAocHJldl9uYSAhPSBOVUxM KSB7CiAJCUQoIlJlbGVhc2VkIGdlbmVyaWMgTkEgJXAiLCBnbmEpOwotCQlpZl9yZWxlKGlmcCk7 CiAJCW5ldG1hcF9hZGFwdGVyX3B1dChwcmV2X25hKTsKLQkJaWYgKG5hLT5pZnAgPT0gTlVMTCkg eworCQlpZiAobm1faXN6b21iaWUobmEpKSB7CiAJCSAgICAgICAgLyoKIAkJICAgICAgICAgKiBU aGUgZHJpdmVyIGhhcyBiZWVuIHJlbW92ZWQgd2l0aG91dCByZWxlYXNpbmcKIAkJICAgICAgICAg KiB0aGUgcmVmZXJlbmNlIHNvIHdlIG5lZWQgdG8gZG8gaXQgaGVyZS4KQEAgLTc5Nyw5ICsxMTYz LDEzIEBACiAJCSAgICAgICAgbmV0bWFwX2FkYXB0ZXJfcHV0KHByZXZfbmEpOwogCQl9CiAJfQot CVdOQShpZnApID0gcHJldl9uYTsKLQlEKCJSZXN0b3JlZCBuYXRpdmUgTkEgJXAiLCBwcmV2X25h KTsKKwlOTV9BVFRBQ0hfTkEoaWZwLCBwcmV2X25hKTsKKwkvKgorCSAqIG5ldG1hcF9kZXRhY2hf Y29tbW9uKCksIHRoYXQgaXQncyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwKKwkgKiBvdmVy cmlkZXMgV05BKGlmcCkgaWYgbmEtPmlmcCBpcyBub3QgTlVMTC4KKwkgKi8KIAluYS0+aWZwID0g TlVMTDsKKwlEKCJSZXN0b3JlZCBuYXRpdmUgTkEgJXAiLCBwcmV2X25hKTsKIH0KIAogLyoKQEAg LTgyMywxNCArMTE5MywxNCBAQAogCiAJbnVtX3R4X2Rlc2MgPSBudW1fcnhfZGVzYyA9IG5ldG1h cF9nZW5lcmljX3JpbmdzaXplOyAvKiBzdGFydGluZyBwb2ludCAqLwogCi0JZ2VuZXJpY19maW5k X251bV9kZXNjKGlmcCwgJm51bV90eF9kZXNjLCAmbnVtX3J4X2Rlc2MpOyAvKiBpZ25vcmUgZXJy b3JzICovCisJbm1fb3NfZ2VuZXJpY19maW5kX251bV9kZXNjKGlmcCwgJm51bV90eF9kZXNjLCAm bnVtX3J4X2Rlc2MpOyAvKiBpZ25vcmUgZXJyb3JzICovCiAJTkQoIk5ldG1hcCByaW5nIHNpemU6 IFRYID0gJWQsIFJYID0gJWQiLCBudW1fdHhfZGVzYywgbnVtX3J4X2Rlc2MpOwogCWlmIChudW1f dHhfZGVzYyA9PSAwIHx8IG51bV9yeF9kZXNjID09IDApIHsKIAkJRCgiRGV2aWNlIGhhcyBubyBo dyBzbG90cyAodHggJXUsIHJ4ICV1KSIsIG51bV90eF9kZXNjLCBudW1fcnhfZGVzYyk7CiAJCXJl dHVybiBFSU5WQUw7CiAJfQogCi0JZ25hID0gbWFsbG9jKHNpemVvZigqZ25hKSwgTV9ERVZCVUYs IE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlnbmEgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCpnbmEpKTsK IAlpZiAoZ25hID09IE5VTEwpIHsKIAkJRCgibm8gbWVtb3J5IG9uIGF0dGFjaCwgZ2l2ZSB1cCIp OwogCQlyZXR1cm4gRU5PTUVNOwpAQCAtODU1LDEyICsxMjI1LDIzIEBACiAJTkQoIltHTkFdIG51 bV9yeF9xdWV1ZXMoJWQpLCByZWFsX251bV9yeF9xdWV1ZXMoJWQpIiwKIAkJCWlmcC0+bnVtX3J4 X3F1ZXVlcywgaWZwLT5yZWFsX251bV9yeF9xdWV1ZXMpOwogCi0JZ2VuZXJpY19maW5kX251bV9x dWV1ZXMoaWZwLCAmbmEtPm51bV90eF9yaW5ncywgJm5hLT5udW1fcnhfcmluZ3MpOworCW5tX29z X2dlbmVyaWNfZmluZF9udW1fcXVldWVzKGlmcCwgJm5hLT5udW1fdHhfcmluZ3MsICZuYS0+bnVt X3J4X3JpbmdzKTsKIAogCXJldHZhbCA9IG5ldG1hcF9hdHRhY2hfY29tbW9uKG5hKTsKIAlpZiAo cmV0dmFsKSB7Ci0JCWZyZWUoZ25hLCBNX0RFVkJVRik7CisJCW5tX29zX2ZyZWUoZ25hKTsKKwkJ cmV0dXJuIHJldHZhbDsKIAl9CiAKKwlnbmEtPnByZXYgPSBOQShpZnApOyAvKiBzYXZlIG9sZCBu YSAqLworCWlmIChnbmEtPnByZXYgIT0gTlVMTCkgeworCQluZXRtYXBfYWRhcHRlcl9nZXQoZ25h LT5wcmV2KTsKKwl9CisJTk1fQVRUQUNIX05BKGlmcCwgbmEpOworCisJbm1fb3NfZ2VuZXJpY19z ZXRfZmVhdHVyZXMoZ25hKTsKKworCUQoIkNyZWF0ZWQgZ2VuZXJpYyBOQSAlcCAocHJldiAlcCki LCBnbmEsIGduYS0+cHJldik7CisKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC11IC1yIC1OIHVz ci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCAvdXNyL3NyYy9zeXMvZGV2L25ldG1h cC9uZXRtYXBfa2Vybi5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9rZXJuLmgJ MjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYv bmV0bWFwL25ldG1hcF9rZXJuLmgJMjAxNi0xMi0wMSAwOTo1MToyOC43MTQzMTQwMDAgKzAwMDAK QEAgLTEsNiArMSw3IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgTWF0dGVvIExh bmRpLCBMdWlnaSBSaXp6by4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg MjAxMy0yMDE0IFVuaXZlcnNpdGFgIGRpIFBpc2EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD b3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBNYXR0ZW8gTGFuZGksIEx1aWdpIFJpenpvCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTMtMjAxNiBVbml2ZXJzaXRhYCBkaSBQaXNhCisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNiw3IEBA CiAgKi8KIAogLyoKLSAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRt YXBfa2Vybi5oIDI4NTY5OSAyMDE1LTA3LTE5IDE4OjA3OjI1WiBsdWlnaSAkCisgKiAkRnJlZUJT RDogaGVhZC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIDIzODk4NSAyMDEyLTA4LTAyIDEx OjU5OjQzWiBsdWlnaSAkCiAgKgogICogVGhlIGhlYWRlciBjb250YWlucyB0aGUgZGVmaW5pdGlv bnMgb2YgY29uc3RhbnRzIGFuZCBmdW5jdGlvbgogICogcHJvdG90eXBlcyB1c2VkIG9ubHkgaW4g a2VybmVsc3BhY2UuCkBAIC00OCwyMyArNDksMzggQEAKICNpZiBkZWZpbmVkKENPTkZJR19ORVRN QVBfR0VORVJJQykKICNkZWZpbmUgV0lUSF9HRU5FUklDCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENP TkZJR19ORVRNQVBfVjEwMDApCi0jZGVmaW5lIFdJVEhfVjEwMDAKKyNpZiBkZWZpbmVkKENPTkZJ R19ORVRNQVBfUFRORVRNQVBfR1VFU1QpCisjZGVmaW5lIFdJVEhfUFRORVRNQVBfR1VFU1QKKyNl bmRpZgorI2lmIGRlZmluZWQoQ09ORklHX05FVE1BUF9QVE5FVE1BUF9IT1NUKQorI2RlZmluZSBX SVRIX1BUTkVUTUFQX0hPU1QKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX05FVE1BUF9TSU5L KQorI2RlZmluZSBXSVRIX1NJTksKICNlbmRpZgogCi0jZWxzZSAvKiBub3QgbGludXggKi8KKyNl bGlmIGRlZmluZWQgKF9XSU4zMikKKyNkZWZpbmUgV0lUSF9WQUxFCS8vIGNvbW1lbnQgb3V0IHRv IGRpc2FibGUgVkFMRSBzdXBwb3J0CisjZGVmaW5lIFdJVEhfUElQRVMKKyNkZWZpbmUgV0lUSF9N T05JVE9SCisjZGVmaW5lIFdJVEhfR0VORVJJQwogCisjZWxzZQkvKiBuZWl0aGVyIGxpbnV4IG5v ciB3aW5kb3dzICovCiAjZGVmaW5lIFdJVEhfVkFMRQkvLyBjb21tZW50IG91dCB0byBkaXNhYmxl IFZBTEUgc3VwcG9ydAogI2RlZmluZSBXSVRIX1BJUEVTCiAjZGVmaW5lIFdJVEhfTU9OSVRPUgog I2RlZmluZSBXSVRIX0dFTkVSSUMKKyNkZWZpbmUgV0lUSF9QVE5FVE1BUF9IT1NUCS8qIHB0bmV0 bWFwIGhvc3Qgc3VwcG9ydCAqLworI2RlZmluZSBXSVRIX1BUTkVUTUFQX0dVRVNUCS8qIHB0bmV0 bWFwIGd1ZXN0IHN1cHBvcnQgKi8KIAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f KQorI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+CiAKICNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRp bl9leHBlY3QoKGxvbmcpISEoeCksIDFMKQogI2RlZmluZSB1bmxpa2VseSh4KQlfX2J1aWx0aW5f ZXhwZWN0KChsb25nKSEhKHgpLCAwTCkKKyNkZWZpbmUgX191c2VyCiAKICNkZWZpbmUJTk1fTE9D S19UCXN0cnVjdCBtdHgJLyogbG93IGxldmVsIHNwaW5sb2NrLCB1c2VkIHRvIHByb3RlY3QgcXVl dWVzICovCiAKQEAgLTc2LDkgKzkyLDExIEBACiAjZGVmaW5lIE5NX01UWF9BU1NFUlQobSkJc3hf YXNzZXJ0KCYobSksIFNBX1hMT0NLRUQpCiAKICNkZWZpbmUJTk1fU0VMSU5GT19UCXN0cnVjdCBu bV9zZWxpbmZvCisjZGVmaW5lIE5NX1NFTFJFQ09SRF9UCXN0cnVjdCB0aHJlYWQKICNkZWZpbmUJ TUJVRl9MRU4obSkJKChtKS0+bV9wa3RoZHIubGVuKQotI2RlZmluZQlNQlVGX0lGUChtKQkoKG0p LT5tX3BrdGhkci5yY3ZpZikKLSNkZWZpbmUJTk1fU0VORF9VUChpZnAsIG0pCSgoTkEoaWZwKSkt PmlmX2lucHV0KShpZnAsIG0pCisjZGVmaW5lIE1CVUZfVFhRKG0pCSgobSktPm1fcGt0aGRyLmZs b3dpZCkKKyNkZWZpbmUgTUJVRl9UUkFOU01JVChuYSwgaWZwLCBtKQkoKG5hKS0+aWZfdHJhbnNt aXQoaWZwLCBtKSkKKyNkZWZpbmUJR0VOX1RYX01CVUZfSUZQKG0pCSgobSktPm1fcGt0aGRyLnJj dmlmKQogCiAjZGVmaW5lIE5NX0FUT01JQ19UCXZvbGF0aWxlIGludAkvLyBYWFggPwogLyogYXRv bWljIG9wZXJhdGlvbnMgKi8KQEAgLTk3LDIzICsxMTUsMjAgQEAKICNlbmRpZgogCiAjaWYgX19G cmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAyNwotI2RlZmluZSBHRVRfTUJVRl9SRUZDTlQobSkgICAg ICAoKG0pLT5tX2V4dC5leHRfY250ID8gKigobSktPm1fZXh0LmV4dF9jbnQpIDogLTEpCi0jZGVm aW5lIFNFVF9NQlVGX1JFRkNOVChtLCB4KSAgICooKG0pLT5tX2V4dC5leHRfY250KSA9IHgKLSNk ZWZpbmUgUE5UX01CVUZfUkVGQ05UKG0pICAgICAgKChtKS0+bV9leHQuZXh0X2NudCkKKyNkZWZp bmUgTUJVRl9SRUZDTlQobSkJCSgobSktPm1fZXh0LmV4dF9jb3VudCkKKyNkZWZpbmUgU0VUX01C VUZfUkVGQ05UKG0sIHgpICAgKG0pLT5tX2V4dC5leHRfY291bnQgPSB4CiAjZWxzZQotI2RlZmlu ZSBHRVRfTUJVRl9SRUZDTlQobSkgICAgICAoKG0pLT5tX2V4dC5yZWZfY250ID8gKigobSktPm1f ZXh0LnJlZl9jbnQpIDogLTEpCisjZGVmaW5lIE1CVUZfUkVGQ05UKG0pCQkoKG0pLT5tX2V4dC5y ZWZfY250ID8gKigobSktPm1fZXh0LnJlZl9jbnQpIDogLTEpCiAjZGVmaW5lIFNFVF9NQlVGX1JF RkNOVChtLCB4KSAgICooKG0pLT5tX2V4dC5yZWZfY250KSA9IHgKLSNkZWZpbmUgUE5UX01CVUZf UkVGQ05UKG0pICAgICAgKChtKS0+bV9leHQucmVmX2NudCkKICNlbmRpZgogCi1NQUxMT0NfREVD TEFSRShNX05FVE1BUCk7CisjZGVmaW5lIE1CVUZfUVVFVUVEKG0pCQkxCiAKIHN0cnVjdCBubV9z ZWxpbmZvIHsKIAlzdHJ1Y3Qgc2VsaW5mbyBzaTsKIAlzdHJ1Y3QgbXR4IG07CiB9OwogCi12b2lk IGZyZWVic2Rfc2Vsd2FrZXVwKHN0cnVjdCBubV9zZWxpbmZvICpzaSwgaW50IHByaSk7CiAKIC8v IFhYWCBsaW51eCBzdHJ1Y3QsIG5vdCB1c2VkIGluIEZyZWVCU0QKIHN0cnVjdCBuZXRfZGV2aWNl X29wcyB7CkBAIC0xMzAsMTIgKzE0NSwxNiBAQAogI2RlZmluZQlOTV9MT0NLX1QJc2FmZV9zcGlu bG9ja190CS8vIHNlZSBic2RfZ2x1ZS5oCiAjZGVmaW5lCU5NX1NFTElORk9fVAl3YWl0X3F1ZXVl X2hlYWRfdAogI2RlZmluZQlNQlVGX0xFTihtKQkoKG0pLT5sZW4pCi0jZGVmaW5lCU1CVUZfSUZQ KG0pCSgobSktPmRldikKLSNkZWZpbmUJTk1fU0VORF9VUChpZnAsIG0pICBcCi0gICAgICAgICAg ICAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLT5wcmlv cml0eSA9IE5NX01BR0lDX1BSSU9SSVRZX1JYOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmV0aWZfcngobSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApCisj ZGVmaW5lIE1CVUZfVFJBTlNNSVQobmEsIGlmcCwgbSkJCQkJCQkJXAorCSh7CQkJCQkJCQkJCVwK KwkJLyogQXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIHdpdGggZ2VuZXJpYy4gKi8JCQkJXAorCQlt LT5wcmlvcml0eSA9IE5NX01BR0lDX1BSSU9SSVRZX1RYOwkJCQkJXAorCQkoKChzdHJ1Y3QgbmV0 X2RldmljZV9vcHMgKikobmEpLT5pZl90cmFuc21pdCktPm5kb19zdGFydF94bWl0KG0sIGlmcCkp OwlcCisJCTA7CQkJCQkJCQkJXAorCX0pCisKKy8qIFNlZSBleHBsYW5hdGlvbiBpbiBubV9vc19n ZW5lcmljX3htaXRfZnJhbWUuICovCisjZGVmaW5lCUdFTl9UWF9NQlVGX0lGUChtKQkoKHN0cnVj dCBpZm5ldCAqKXNrYl9zaGluZm8obSktPmRlc3RydWN0b3JfYXJnKQogCiAjZGVmaW5lIE5NX0FU T01JQ19UCXZvbGF0aWxlIGxvbmcgdW5zaWduZWQgaW50CiAKQEAgLTE1OCw3ICsxNzcsNTEgQEAK ICNkZWZpbmUJTk1fTE9DS19UCUlPTG9jayAqCiAjZGVmaW5lCU5NX1NFTElORk9fVAlzdHJ1Y3Qg c2VsaW5mbwogI2RlZmluZQlNQlVGX0xFTihtKQkoKG0pLT5tX3BrdGhkci5sZW4pCi0jZGVmaW5l CU5NX1NFTkRfVVAoaWZwLCBtKQkoKGlmcCktPmlmX2lucHV0KShpZnAsIG0pCisKKyNlbGlmIGRl ZmluZWQgKF9XSU4zMikKKyNpbmNsdWRlICIuLi8uLi8uLi9XSU5ET1dTL3dpbl9nbHVlLmgiCisK KyNkZWZpbmUgTk1fU0VMUkVDT1JEX1QJCUlPX1NUQUNLX0xPQ0FUSU9OCisjZGVmaW5lIE5NX1NF TElORk9fVAkJd2luX1NFTElORk8JCS8vIHNlZSB3aW5fZ2x1ZS5oCisjZGVmaW5lIE5NX0xPQ0tf VAkJd2luX3NwaW5sb2NrX3QJLy8gc2VlIHdpbl9nbHVlLmgKKyNkZWZpbmUgTk1fTVRYX1QJCUtH VUFSREVEX01VVEVYCS8qIE9TLXNwZWNpZmljIG11dGV4IChzbGVlcGFibGUpICovCisKKyNkZWZp bmUgTk1fTVRYX0lOSVQobSkJCUtlSW5pdGlhbGl6ZUd1YXJkZWRNdXRleCgmbSk7CisjZGVmaW5l IE5NX01UWF9ERVNUUk9ZKG0pCWRvIHsgKHZvaWQpKG0pOyB9IHdoaWxlICgwKQorI2RlZmluZSBO TV9NVFhfTE9DSyhtKQkJS2VBY3F1aXJlR3VhcmRlZE11dGV4KCYobSkpCisjZGVmaW5lIE5NX01U WF9VTkxPQ0sobSkJS2VSZWxlYXNlR3VhcmRlZE11dGV4KCYobSkpCisjZGVmaW5lIE5NX01UWF9B U1NFUlQobSkJYXNzZXJ0KCZtLkNvdW50PjApCisKKy8vVGhlc2UgbGlua25hbWVzIGFyZSBmb3Ig dGhlIE5ESVMgZHJpdmVyCisjZGVmaW5lIE5FVE1BUF9ORElTX0xJTktOQU1FX1NUUklORyAgICAg ICAgICAgICBMIlxcRG9zRGV2aWNlc1xcTk1BUE5ESVMiCisjZGVmaW5lIE5FVE1BUF9ORElTX05U REVWSUNFX1NUUklORyAgICAgICAgICAgICBMIlxcRGV2aWNlXFxOTUFQTkRJUyIKKworLy9EZWZp bml0aW9uIG9mIGludGVybmFsIGRyaXZlci10by1kcml2ZXIgaW9jdGwgY29kZXMKKyNkZWZpbmUg TkVUTUFQX0tFUk5FTF9YQ0hBTkdFX1BPSU5URVJTCQlfSU8oJ2knLCAxODApCisjZGVmaW5lIE5F VE1BUF9LRVJORUxfU0VORF9TSFVURE9XTl9TSUdOQUwJX0lPX2RpcmVjdCgnaScsIDE5NSkKKwor Ly9FbXB0eSBkYXRhIHN0cnVjdHVyZXMgYXJlIG5vdCBwZXJtaXR0ZWQgYnkgTVNWQyBjb21waWxl cgorLy9YWFhfYWxlLCB0cnkgdG8gc29sdmUgdGhpcyBwcm9ibGVtCitzdHJ1Y3QgbmV0X2Rldmlj ZV9vcHN7CisJY2hhciBkYXRhWzFdOworfTsKK3R5cGVkZWYgc3RydWN0IGV0aHRvb2xfb3Bzewor CWNoYXIgZGF0YVsxXTsKK307Cit0eXBlZGVmIHN0cnVjdCBocnRpbWVyeworCUtUSU1FUiB0aW1l cjsKKwlCT09MRUFOIGFjdGl2ZTsKKwlLRFBDIGRlZmVycmVkX3Byb2M7Cit9OworCisvKiBNU1ZD IGRvZXMgbm90IGhhdmUgbGlrZWx5L3VubGlrZWx5IHN1cHBvcnQgKi8KKyNpZmRlZiBfTVNDX1ZF UgorI2RlZmluZSBsaWtlbHkoeCkJKHgpCisjZGVmaW5lIHVubGlrZWx5KHgpCSh4KQorI2Vsc2UK KyNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoKGxvbmcpISEoeCksIDFMKQorI2Rl ZmluZSB1bmxpa2VseSh4KQlfX2J1aWx0aW5fZXhwZWN0KChsb25nKSEhKHgpLCAwTCkKKyNlbmRp ZiAvL19NU0NfVkVSCiAKICNlbHNlCiAKQEAgLTE2Niw2ICsyMjksMTMgQEAKIAogI2VuZGlmIC8q IGVuZCAtIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgKi8KIAorI2lmbmRlZiBfV0lOMzIgLyogc3Vw cG9ydCBmb3IgZW11bGF0ZWQgc3lzY3RsICovCisjZGVmaW5lIFNZU0JFR0lOKHgpCisjZGVmaW5l IFNZU0VORAorI2VuZGlmIC8qIF9XSU4zMiAqLworCisjZGVmaW5lIE5NX0FDQ0VTU19PTkNFKHgp CSgqKHZvbGF0aWxlIF9fdHlwZW9mX18oeCkgKikmKHgpKQorCiAjZGVmaW5lCU5NR19MT0NLX1QJ CU5NX01UWF9UCiAjZGVmaW5lCU5NR19MT0NLX0lOSVQoKQkJTk1fTVRYX0lOSVQobmV0bWFwX2ds b2JhbF9sb2NrKQogI2RlZmluZQlOTUdfTE9DS19ERVNUUk9ZKCkJTk1fTVRYX0RFU1RST1kobmV0 bWFwX2dsb2JhbF9sb2NrKQpAQCAtMjAwLDggKzI3MCw0MSBAQAogc3RydWN0IG5tX2JyaWRnZTsK IHN0cnVjdCBuZXRtYXBfcHJpdl9kOwogCisvKiBvcy1zcGVjaWZpYyBOTV9TRUxJTkZPX1QgaW5p dGlhbHphdGlvbi9kZXN0cnVjdGlvbiBmdW5jdGlvbnMgKi8KK3ZvaWQgbm1fb3Nfc2VsaW5mb19p bml0KE5NX1NFTElORk9fVCAqKTsKK3ZvaWQgbm1fb3Nfc2VsaW5mb191bmluaXQoTk1fU0VMSU5G T19UICopOworCiBjb25zdCBjaGFyICpubV9kdW1wX2J1ZihjaGFyICpwLCBpbnQgbGVuLCBpbnQg bGltLCBjaGFyICpkc3QpOwogCit2b2lkIG5tX29zX3NlbHdha2V1cChOTV9TRUxJTkZPX1QgKnNp KTsKK3ZvaWQgbm1fb3Nfc2VscmVjb3JkKE5NX1NFTFJFQ09SRF9UICpzciwgTk1fU0VMSU5GT19U ICpzaSk7CisKK2ludCBubV9vc19pZm5ldF9pbml0KHZvaWQpOwordm9pZCBubV9vc19pZm5ldF9m aW5pKHZvaWQpOwordm9pZCBubV9vc19pZm5ldF9sb2NrKHZvaWQpOwordm9pZCBubV9vc19pZm5l dF91bmxvY2sodm9pZCk7CisKK3ZvaWQgbm1fb3NfZ2V0X21vZHVsZSh2b2lkKTsKK3ZvaWQgbm1f b3NfcHV0X21vZHVsZSh2b2lkKTsKKwordm9pZCBuZXRtYXBfbWFrZV96b21iaWUoc3RydWN0IGlm bmV0ICopOwordm9pZCBuZXRtYXBfdW5kb196b21iaWUoc3RydWN0IGlmbmV0ICopOworCisvKiBv cyBpbmRlcGVuZGVudCBhbGxvYy9yZWFsbG9jL2ZyZWUgKi8KK3ZvaWQgKm5tX29zX21hbGxvYyhz aXplX3QpOwordm9pZCAqbm1fb3NfcmVhbGxvYyh2b2lkICosIHNpemVfdCBuZXdfc2l6ZSwgc2l6 ZV90IG9sZF9zaXplKTsKK3ZvaWQgbm1fb3NfZnJlZSh2b2lkICopOworCisvKiBwYXNzZXMgYSBw YWNrZXQgdXAgdG8gdGhlIGhvc3Qgc3RhY2suCisgKiBJZiB0aGUgcGFja2V0IGlzIHNlbnQgKG9y IGRyb3BwZWQpIGltbWVkaWF0ZWx5IGl0IHJldHVybnMgTlVMTCwKKyAqIG90aGVyd2lzZSBpdCBs aW5rcyB0aGUgcGFja2V0IHRvIHByZXYgYW5kIHJldHVybnMgbS4KKyAqIEluIHRoaXMgY2FzZSwg YSBmaW5hbCBjYWxsIHdpdGggbT1OVUxMIGFuZCBwcmV2ICE9IE5VTEwgd2lsbCBzZW5kIHVwCisg KiB0aGUgZW50aXJlIGNoYWluIHRvIHRoZSBob3N0IHN0YWNrLgorICovCit2b2lkICpubV9vc19z ZW5kX3VwKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYgKnByZXYp OworCitpbnQgbm1fb3NfbWJ1Zl9oYXNfb2ZmbGQoc3RydWN0IG1idWYgKm0pOworCiAjaW5jbHVk ZSAibmV0bWFwX21icS5oIgogCiBleHRlcm4gTk1HX0xPQ0tfVAluZXRtYXBfZ2xvYmFsX2xvY2s7 CkBAIC0yOTgsNiArNDAxLDE5IEBACiAJdWludDMyX3QJbnJfa2ZsYWdzOwkvKiBwcml2YXRlIGRy aXZlciBmbGFncyAqLwogI2RlZmluZSBOS1JfUEVORElOVFIJMHgxCQkvLyBQZW5kaW5nIGludGVy cnVwdC4KICNkZWZpbmUgTktSX0VYQ0xVU0lWRQkweDIJCS8qIGV4Y2x1c2l2ZSBiaW5kaW5nICov CisjZGVmaW5lIE5LUl9GT1JXQVJECTB4NAkJLyogKGhvc3QgcmluZyBvbmx5KSB0aGVyZSBhcmUK KwkJCQkJICAgcGFja2V0cyB0byBmb3J3YXJkCisJCQkJCSAqLworI2RlZmluZSBOS1JfTkVFRFJJ TkcJMHg4CQkvKiByaW5nIG5lZWRlZCBldmVuIGlmIHVzZXJzPT0wCisJCQkJCSAqICh1c2VkIGlu dGVybmFsbHkgYnkgcGlwZXMgYW5kCisJCQkJCSAqICBieSBwdG5ldG1hcCBob3N0IHBvcnRzKQor CQkJCQkgKi8KKworCXVpbnQzMl90CW5yX21vZGU7CisJdWludDMyX3QJbnJfcGVuZGluZ19tb2Rl OworI2RlZmluZSBOS1JfTkVUTUFQX09GRgkweDAKKyNkZWZpbmUgTktSX05FVE1BUF9PTgkweDEK KwogCXVpbnQzMl90CW5rcl9udW1fc2xvdHM7CiAKIAkvKgpAQCAtMzQzLDEzICs0NTksMTQgQEAK IAkgKiBzdG9yZSBpbmNvbWluZyBtYnVmcyBpbiBhIHF1ZXVlIHRoYXQgaXMgZHJhaW5lZCBieQog CSAqIGEgcnhzeW5jLgogCSAqLwotCXN0cnVjdCBtYnVmICoqdHhfcG9vbDsKLQkvLyB1X2ludCBu cl9udGM7CQkvKiBFbXVsYXRpb24gb2YgYSBuZXh0LXRvLWNsZWFuIFJYIHJpbmcgcG9pbnRlci4g Ki8KLQlzdHJ1Y3QgbWJxIHJ4X3F1ZXVlOyAgICAgICAgICAgIC8qIGludGVyY2VwdGVkIHJ4IG1i dWZzLiAqLworCXN0cnVjdCBtYnVmCSoqdHhfcG9vbDsKKwlzdHJ1Y3QgbWJ1ZgkqdHhfZXZlbnQ7 CS8qIFRYIGV2ZW50IHVzZWQgYXMgYSBub3RpZmljYXRpb24gKi8KKwlOTV9MT0NLX1QJdHhfZXZl bnRfbG9jazsJLyogcHJvdGVjdHMgdGhlIHR4X2V2ZW50IG1idWYgKi8KKwlzdHJ1Y3QgbWJxCXJ4 X3F1ZXVlOyAgICAgICAvKiBpbnRlcmNlcHRlZCByeCBtYnVmcy4gKi8KIAogCXVpbnQzMl90CXVz ZXJzOwkJLyogZXhpc3RpbmcgYmluZGluZ3MgZm9yIHRoaXMgcmluZyAqLwogCi0JdWludDMyX3QJ cmluZ19pZDsJLyogZGVidWdnaW5nICovCisJdWludDMyX3QJcmluZ19pZDsJLyoga3JpbmcgaWRl bnRpZmllciAqLwogCWVudW0gdHhyeAl0eDsJCS8qIGtpbmQgb2YgcmluZyAodHggb3IgcngpICov CiAJY2hhciBuYW1lWzY0XTsJCQkvKiBkaWFnbm9zdGljICovCiAKQEAgLTM3MSw5ICs0ODgsNiBA QAogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKnBpcGU7CS8qIGlmIHRoaXMgaXMgYSBwaXBlIHJpbmcs CiAJCQkJCSAqIHBvaW50ZXIgdG8gdGhlIG90aGVyIGVuZAogCQkJCQkgKi8KLQlzdHJ1Y3QgbmV0 bWFwX3JpbmcgKnNhdmVfcmluZzsJLyogcG9pbnRlciB0byBoaWRkZW4gcmluZ3MKLSAgICAgICAJ CQkJCSAqIChzZWUgbmV0bWFwX3BpcGUuYyBmb3IgZGV0YWlscykKLQkJCQkJICovCiAjZW5kaWYg LyogV0lUSF9QSVBFUyAqLwogCiAjaWZkZWYgV0lUSF9WQUxFCkBAIC0zOTQsMTAgKzUwOCwzMCBA QAogCWludCAoKm1vbl9ub3RpZnkpKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxh Z3MpOwogCiAJdWludDMyX3QgbW9uX3RhaWw7ICAvKiBsYXN0IHNlZW4gc2xvdCBvbiByeCAqLwot CXVpbnQzMl90IG1vbl9wb3M7ICAgLyogaW5kZXggb2YgdGhpcyByaW5nIGluIHRoZSBtb25pdG9y ZWQgcmluZyBhcnJheSAqLworCXVpbnQzMl90IG1vbl9wb3NbTlJfVFhSWF07ICAvKiBpbmRleCBv ZiB0aGlzIHJpbmcgaW4gdGhlIG1vbml0b3JlZCByaW5nIGFycmF5ICovCisjZW5kaWYKK30KKyNp ZmRlZiBfV0lOMzIKK19fZGVjbHNwZWMoYWxpZ24oNjQpKTsKKyNlbHNlCitfX2F0dHJpYnV0ZV9f KChfX2FsaWduZWRfXyg2NCkpKTsKICNlbmRpZgotfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRf Xyg2NCkpKTsKIAorLyogcmV0dXJuIDEgaWZmIHRoZSBrcmluZyBuZWVkcyB0byBiZSB0dXJuZWQg b24gKi8KK3N0YXRpYyBpbmxpbmUgaW50CitubV9rcmluZ19wZW5kaW5nX29uKHN0cnVjdCBuZXRt YXBfa3JpbmcgKmtyaW5nKQoreworCXJldHVybiBrcmluZy0+bnJfcGVuZGluZ19tb2RlID09IE5L Ul9ORVRNQVBfT04gJiYKKwkgICAgICAga3JpbmctPm5yX21vZGUgPT0gTktSX05FVE1BUF9PRkY7 Cit9CisKKy8qIHJldHVybiAxIGlmZiB0aGUga3JpbmcgbmVlZHMgdG8gYmUgdHVybmVkIG9mZiAq Lworc3RhdGljIGlubGluZSBpbnQKK25tX2tyaW5nX3BlbmRpbmdfb2ZmKHN0cnVjdCBuZXRtYXBf a3JpbmcgKmtyaW5nKQoreworCXJldHVybiBrcmluZy0+bnJfcGVuZGluZ19tb2RlID09IE5LUl9O RVRNQVBfT0ZGICYmCisJICAgICAgIGtyaW5nLT5ucl9tb2RlID09IE5LUl9ORVRNQVBfT047Cit9 CiAKIC8qIHJldHVybiB0aGUgbmV4dCBpbmRleCwgd2l0aCB3cmFwYXJvdW5kICovCiBzdGF0aWMg aW5saW5lIHVpbnQzMl90CkBAIC01MTMsNiArNjQ3LDggQEAKIAkJCQkgKi8KICNkZWZpbmUgTkFG X0hPU1RfUklOR1MgIDY0CS8qIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBob3N0IHJpbmdzICov CiAjZGVmaW5lIE5BRl9GT1JDRV9OQVRJVkUgMTI4CS8qIHRoZSBhZGFwdGVyIGlzIGFsd2F5cyBO QVRJVkUgKi8KKyNkZWZpbmUgTkFGX1BUTkVUTUFQX0hPU1QgMjU2CS8qIHRoZSBhZGFwdGVyIHN1 cHBvcnRzIHB0bmV0bWFwIGluIHRoZSBob3N0ICovCisjZGVmaW5lIE5BRl9aT01CSUUJKDFVPDwz MCkgLyogdGhlIG5pYyBkcml2ZXIgaGFzIGJlZW4gdW5sb2FkZWQgKi8KICNkZWZpbmUJTkFGX0JV U1kJKDFVPDwzMSkgLyogdGhlIGFkYXB0ZXIgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZAogCQkJCSAg KiBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBmcm9tIHVzZXJzcGFjZQogCQkJCSAgKi8KQEAgLTU5MSwx MCArNzI3LDE0IEBACiAJICoJRm9yIGh3IGRldmljZXMgdGhpcyBpcyB0eXBpY2FsbHkgYSBzZWx3 YWtldXAoKSwKIAkgKglidXQgZm9yIE5JQy9ob3N0IHBvcnRzIGF0dGFjaGVkIHRvIGEgc3dpdGNo IChvciB2aWNlLXZlcnNhKQogCSAqCXdlIGFsc28gbmVlZCB0byBpbnZva2UgdGhlICd0eHN5bmMn IGNvZGUgZG93bnN0cmVhbS4KKwkgKiAgICAgIFRoaXMgY2FsbGJhY2sgcG9pbnRlciBpcyBhY3R1 YWxseSB1c2VkIG9ubHkgdG8gaW5pdGlhbGl6ZQorCSAqICAgICAga3JpbmctPm5tX25vdGlmeS4K KwkgKiAgICAgIFJldHVybiB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBuZXRtYXBfcnhfaXJx KCkuCiAJICovCiAJdm9pZCAoKm5tX2R0b3IpKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIAog CWludCAoKm5tX3JlZ2lzdGVyKShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKiwgaW50IG9ub2ZmKTsK Kwl2b2lkICgqbm1faW50cikoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIGludCBvbm9mZik7CiAK IAlpbnQgKCpubV90eHN5bmMpKHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3Mp OwogCWludCAoKm5tX3J4c3luYykoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGludCBmbGFn cyk7CkBAIC02MzksMTQgKzc3OSwxNCBAQAogCiAJLyogbWVtb3J5IGFsbG9jYXRvciAob3BhcXVl KQogCSAqIFdlIGFsc28gY2FjaGUgYSBwb2ludGVyIHRvIHRoZSBsdXRfZW50cnkgZm9yIHRyYW5z bGF0aW5nCi0JICogYnVmZmVyIGFkZHJlc3NlcywgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgYnVm ZmVycy4KKwkgKiBidWZmZXIgYWRkcmVzc2VzLCB0aGUgdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMg YW5kIHRoZSBidWZmZXIgc2l6ZS4KIAkgKi8KICAJc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1fbWVt OwogCXN0cnVjdCBuZXRtYXBfbHV0IG5hX2x1dDsKIAogCS8qIGFkZGl0aW9uYWwgaW5mb3JtYXRp b24gYXR0YWNoZWQgdG8gdGhpcyBhZGFwdGVyCiAJICogYnkgb3RoZXIgbmV0bWFwIHN1YnN5c3Rl bXMuIEN1cnJlbnRseSB1c2VkIGJ5Ci0JICogYndyYXAgYW5kIExJTlVYL3YxMDAwLgorCSAqIGJ3 cmFwLCBMSU5VWC92MTAwMCBhbmQgcHRuZXRtYXAKIAkgKi8KIAl2b2lkICpuYV9wcml2YXRlOwog CkBAIC02NTUsNiArNzk1LDkgQEAKIAlpbnQgbmFfbmV4dF9waXBlOwkvKiBuZXh0IGZyZWUgc2xv dCBpbiB0aGUgYXJyYXkgKi8KIAlpbnQgbmFfbWF4X3BpcGVzOwkvKiBzaXplIG9mIHRoZSBhcnJh eSAqLwogCisJLyogT2Zmc2V0IG9mIGV0aGVybmV0IGhlYWRlciBmb3IgZWFjaCBwYWNrZXQuICov CisJdV9pbnQgdmlydF9oZHJfbGVuOworCiAJY2hhciBuYW1lWzY0XTsKIH07CiAKQEAgLTcyMCw4 ICs4NjMsNiBAQAogCXN0cnVjdCBubV9icmlkZ2UgKm5hX2JkZzsKIAlpbnQgcmV0cnk7CiAKLQkv KiBPZmZzZXQgb2YgZXRoZXJuZXQgaGVhZGVyIGZvciBlYWNoIHBhY2tldC4gKi8KLQl1X2ludCB2 aXJ0X2hkcl9sZW47CiAJLyogTWF4aW11bSBGcmFtZSBTaXplLCB1c2VkIGluIGJkZ19taXNtYXRj aF9kYXRhcGF0aCgpICovCiAJdV9pbnQgbWZzOwogCS8qIExhc3Qgc291cmNlIE1BQyBvbiB0aGlz IHBvcnQgKi8KQEAgLTc2Niw2ICs5MDcsMTMgQEAKICNpZmRlZiBsaW51eAogICAgICAgICBuZXRk ZXZfdHhfdCAoKnNhdmVfc3RhcnRfeG1pdCkoc3RydWN0IG1idWYgKiwgc3RydWN0IGlmbmV0ICop OwogI2VuZGlmCisJLyogSXMgdGhlIGFkYXB0ZXIgYWJsZSB0byB1c2UgbXVsdGlwbGUgUlggc2xv dHMgdG8gc2NhdHRlcgorCSAqIGVhY2ggcGFja2V0IHB1c2hlZCB1cCBieSB0aGUgZHJpdmVyPyAq LworCWludCByeHNnOworCisJLyogSXMgdGhlIHRyYW5zbWlzc2lvbiBwYXRoIGNvbnRyb2xsZWQg YnkgYSBuZXRtYXAtYXdhcmUKKwkgKiBkZXZpY2UgcXVldWUgKGkuZS4gcWRpc2Mgb24gbGludXgp PyAqLworCWludCB0eHFkaXNjOwogfTsKICNlbmRpZiAgLyogV0lUSF9HRU5FUklDICovCiAKQEAg LTc3Niw3ICs5MjQsNyBAQAogfQogCiAjaWZkZWYgV0lUSF9WQUxFCi0KK3N0cnVjdCBubV9iZGdf cG9sbGluZ19zdGF0ZTsKIC8qCiAgKiBCcmlkZ2Ugd3JhcHBlciBmb3Igbm9uIFZBTEUgcG9ydHMg YXR0YWNoZWQgdG8gYSBWQUxFIHN3aXRjaC4KICAqCkBAIC04MjYsOSArOTc0LDYgQEAKIAlzdHJ1 Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgaG9zdDsgIC8qIGZvciBob3N0IHJpbmdzICovCiAJc3RydWN0 IG5ldG1hcF9hZGFwdGVyICpod25hOwkvKiB0aGUgdW5kZXJseWluZyBkZXZpY2UgKi8KIAotCS8q IGJhY2t1cCBvZiB0aGUgaHduYSBtZW1vcnkgYWxsb2NhdG9yICovCi0Jc3RydWN0IG5ldG1hcF9t ZW1fZCAqc2F2ZV9ubWQ7Ci0KIAkvKgogCSAqIFdoZW4gd2UgYXR0YWNoIGEgcGh5c2ljYWwgaW50 ZXJmYWNlIHRvIHRoZSBicmlkZ2UsIHdlCiAJICogYWxsb3cgdGhlIGNvbnRyb2xsaW5nIHByb2Nl c3MgdG8gdGVybWluYXRlLCBzbyB3ZSBuZWVkCkBAIC04MzcsMTAgKzk4MiwxMCBAQAogCSAqIGFy ZSBhdHRhY2hlZCB0byBhIGJyaWRnZS4KIAkgKi8KIAlzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqbmFf a3ByaXY7CisJc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpuYV9wb2xsaW5nX3N0YXRlOwog fTsKIGludCBuZXRtYXBfYndyYXBfYXR0YWNoKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuZXRt YXBfYWRhcHRlciAqKTsKIAotCiAjZW5kaWYgLyogV0lUSF9WQUxFICovCiAKICNpZmRlZiBXSVRI X1BJUEVTCkBAIC04NzUsNTYgKzEwMjAsMTIyIEBACiAJcmV0dXJuIHNwYWNlOwogfQogCisvKiBy ZXR1cm4gc2xvdHMgcmVzZXJ2ZWQgdG8gdHggY2xpZW50cyAqLworI2RlZmluZSBubV9rcl90eHNw YWNlKF9rKSBubV9rcl9yeHNwYWNlKF9rKQogCi0vKiBUcnVlIGlmIG5vIHNwYWNlIGluIHRoZSB0 eCByaW5nLiBvbmx5IHZhbGlkIGFmdGVyIHR4c3luY19wcm9sb2d1ZSAqLworCisvKiBUcnVlIGlm IG5vIHNwYWNlIGluIHRoZSB0eCByaW5nLCBvbmx5IHZhbGlkIGFmdGVyIHR4c3luY19wcm9sb2d1 ZSAqLwogc3RhdGljIGlubGluZSBpbnQKIG5tX2tyX3R4ZW1wdHkoc3RydWN0IG5ldG1hcF9rcmlu ZyAqa3JpbmcpCiB7CiAJcmV0dXJuIGtyaW5nLT5yY3VyID09IGtyaW5nLT5ucl9od3RhaWw7CiB9 CiAKKy8qIFRydWUgaWYgbm8gbW9yZSBjb21wbGV0ZWQgc2xvdHMgaW4gdGhlIHJ4IHJpbmcsIG9u bHkgdmFsaWQgYWZ0ZXIKKyAqIHJ4c3luY19wcm9sb2d1ZSAqLworI2RlZmluZSBubV9rcl9yeGVt cHR5KF9rKQlubV9rcl90eGVtcHR5KF9rKQogCiAvKgogICogcHJvdGVjdCBhZ2FpbnN0IG11bHRp cGxlIHRocmVhZHMgdXNpbmcgdGhlIHNhbWUgcmluZy4KLSAqIGFsc28gY2hlY2sgdGhhdCB0aGUg cmluZyBoYXMgbm90IGJlZW4gc3RvcHBlZC4KLSAqIFdlIG9ubHkgY2FyZSBmb3IgMCBvciAhPTAg YXMgYSByZXR1cm4gY29kZS4KKyAqIGFsc28gY2hlY2sgdGhhdCB0aGUgcmluZyBoYXMgbm90IGJl ZW4gc3RvcHBlZCBvciBsb2NrZWQKICAqLwotI2RlZmluZSBOTV9LUl9CVVNZCTEKLSNkZWZpbmUg Tk1fS1JfU1RPUFBFRAkyCisjZGVmaW5lIE5NX0tSX0JVU1kJMQkvKiBzb21lIG90aGVyIHRocmVh ZCBpcyBzeW5jaW5nIHRoZSByaW5nICovCisjZGVmaW5lIE5NX0tSX1NUT1BQRUQJMgkvKiB1bmJv dW5kZWQgc3RvcCAoaWZjb25maWcgZG93biBvciBkcml2ZXIgdW5sb2FkKSAqLworI2RlZmluZSBO TV9LUl9MT0NLRUQJMwkvKiBib3VuZGVkLCBicmllZiBzdG9wIGZvciBtdXR1YWwgZXhjbHVzaW9u ICovCiAKIAorLyogcmVsZWFzZSB0aGUgcHJldmlvdXNseSBhY3F1aXJlZCByaWdodCB0byB1c2Ug dGhlICpzeW5jKCkgbWV0aG9kcyBvZiB0aGUgcmluZyAqLwogc3RhdGljIF9faW5saW5lIHZvaWQg bm1fa3JfcHV0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyKQogewogCU5NX0FUT01JQ19DTEVBUigm a3ItPm5yX2J1c3kpOwogfQogCiAKLXN0YXRpYyBfX2lubGluZSBpbnQgbm1fa3JfdHJ5Z2V0KHN0 cnVjdCBuZXRtYXBfa3JpbmcgKmtyKQorLyogdHJ1ZSBpZiB0aGUgaWZwIHRoYXQgYmFja2VkIHRo ZSBhZGFwdGVyIGhhcyBkaXNhcHBlYXJlZCAoZS5nLiwgdGhlCisgKiBkcml2ZXIgaGFzIGJlZW4g dW5sb2FkZWQpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5tX2lzem9tYmllKHN0cnVjdCBuZXRt YXBfYWRhcHRlciAqbmEpOworCisvKiB0cnkgdG8gb2J0YWluIGV4Y2x1c2l2ZSByaWdodCB0byBp c3N1ZSB0aGUgKnN5bmMoKSBvcGVyYXRpb25zIG9uIHRoZSByaW5nLgorICogVGhlIHJpZ2h0IGlz IG9idGFpbmVkIGFuZCBtdXN0IGJlIGxhdGVyIHJlbGlucXVpc2hlZCB2aWEgbm1fa3JfcHV0KCkg aWYgYW5kCisgKiBvbmx5IGlmIG5tX2tyX3RyeWdldCgpIHJldHVybnMgMC4KKyAqIElmIGNhbl9z bGVlcCBpcyAxIHRoZXJlIGFyZSBvbmx5IHR3byBvdGhlciBwb3NzaWJsZSBvdXRjb21lczoKKyAq IC0gdGhlIGZ1bmN0aW9uIHJldHVybnMgTk1fS1JfQlVTWQorICogLSB0aGUgZnVuY3Rpb24gcmV0 dXJucyBOTV9LUl9TVE9QUEVEIGFuZCBzZXRzIHRoZSBQT0xMRVJSIGJpdCBpbiAqcGVycgorICog ICAoaWYgbm9uLW51bGwpCisgKiBJbiBib3RoIGNhc2VzIHRoZSBjYWxsZXIgd2lsbCB0eXBpY2Fs bHkgc2tpcCB0aGUgcmluZywgcG9zc2libHkgY29sbGVjdGluZworICogZXJyb3JzIGFsb25nIHRo ZSB3YXkuCisgKiBJZiB0aGUgY2FsbGluZyBjb250ZXh0IGRvZXMgbm90IGFsbG93IHNsZWVwaW5n LCB0aGUgY2FsbGVyIG11c3QgcGFzcyAwIGluIGNhbl9zbGVlcC4KKyAqIEluIHRoZSBsYXR0ZXIg Y2FzZSwgdGhlIGZ1bmN0aW9uIG1heSBhbHNvIHJldHVybiBOTV9LUl9MT0NLRUQgYW5kIGxlYXZl ICpwZXJyCisgKiB1bnRvdWNoZWQ6IGlkZWFsbHksIHRoZSBjYWxsZXIgc2hvdWxkIHRyeSBhZ2Fp biBhdCBhIGxhdGVyIHRpbWUuCisgKi8KK3N0YXRpYyBfX2lubGluZSBpbnQgbm1fa3JfdHJ5Z2V0 KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyLCBpbnQgY2FuX3NsZWVwLCBpbnQgKnBlcnIpCiB7CisJ aW50IGJ1c3kgPSAxLCBzdG9wcGVkOwogCS8qIGNoZWNrIGEgZmlyc3QgdGltZSB3aXRob3V0IHRh a2luZyB0aGUgbG9jawogCSAqIHRvIGF2b2lkIHN0YXJ2YXRpb24gZm9yIG5tX2tyX2dldCgpCiAJ ICovCi0JaWYgKHVubGlrZWx5KGtyLT5ua3Jfc3RvcHBlZCkpIHsKLQkJTkQoInJpbmcgJXAgc3Rv cHBlZCAoJWQpIiwga3IsIGtyLT5ua3Jfc3RvcHBlZCk7Ci0JCXJldHVybiBOTV9LUl9TVE9QUEVE OworcmV0cnk6CisJc3RvcHBlZCA9IGtyLT5ua3Jfc3RvcHBlZDsKKwlpZiAodW5saWtlbHkoc3Rv cHBlZCkpIHsKKwkJZ290byBzdG9wOworCX0KKwlidXN5ID0gTk1fQVRPTUlDX1RFU1RfQU5EX1NF VCgma3ItPm5yX2J1c3kpOworCS8qIHdlIHNob3VsZCBub3QgcmV0dXJuIE5NX0tSX0JVU1kgaWYg dGhlIHJpbmcgd2FzCisJICogYWN0dWFsbHkgc3RvcHBlZCwgc28gY2hlY2sgYW5vdGhlciB0aW1l IGFmdGVyCisJICogdGhlIGJhcnJpZXIgcHJvdmlkZWQgYnkgdGhlIGF0b21pYyBvcGVyYXRpb24K KwkgKi8KKwlzdG9wcGVkID0ga3ItPm5rcl9zdG9wcGVkOworCWlmICh1bmxpa2VseShzdG9wcGVk KSkgeworCQlnb3RvIHN0b3A7CisJfQorCisJaWYgKHVubGlrZWx5KG5tX2lzem9tYmllKGtyLT5u YSkpKSB7CisJCXN0b3BwZWQgPSBOTV9LUl9TVE9QUEVEOworCQlnb3RvIHN0b3A7CiAJfQotCWlm ICh1bmxpa2VseShOTV9BVE9NSUNfVEVTVF9BTkRfU0VUKCZrci0+bnJfYnVzeSkpKQotCQlyZXR1 cm4gTk1fS1JfQlVTWTsKLQkvKiBjaGVjayBhIHNlY29uZCB0aW1lIHdpdGggbG9jayBoZWxkICov Ci0JaWYgKHVubGlrZWx5KGtyLT5ua3Jfc3RvcHBlZCkpIHsKLQkJTkQoInJpbmcgJXAgc3RvcHBl ZCAoJWQpIiwga3IsIGtyLT5ua3Jfc3RvcHBlZCk7CisKKwlyZXR1cm4gdW5saWtlbHkoYnVzeSkg PyBOTV9LUl9CVVNZIDogMDsKKworc3RvcDoKKwlpZiAoIWJ1c3kpCiAJCW5tX2tyX3B1dChrcik7 Ci0JCXJldHVybiBOTV9LUl9TVE9QUEVEOworCWlmIChzdG9wcGVkID09IE5NX0tSX1NUT1BQRUQp IHsKKy8qIGlmIFBPTExFUlIgaXMgZGVmaW5lZCB3ZSB3YW50IHRvIHVzZSBpdCB0byBzaW1wbGlm eSBuZXRtYXBfcG9sbCgpLgorICogT3RoZXJ3aXNlLCBhbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBk by4KKyAqLworI2lmZGVmIFBPTExFUlIKKyNkZWZpbmUgTk1fUE9MTEVSUiBQT0xMRVJSCisjZWxz ZQorI2RlZmluZSBOTV9QT0xMRVJSIDEKKyNlbmRpZiAvKiBQT0xMRVJSICovCisJCWlmIChwZXJy KQorCQkJKnBlcnIgfD0gTk1fUE9MTEVSUjsKKyN1bmRlZiBOTV9QT0xMRVJSCisJfSBlbHNlIGlm IChjYW5fc2xlZXApIHsKKwkJdHNsZWVwKGtyLCAwLCAiTk1fS1JfVFJZR0VUIiwgNCk7CisJCWdv dG8gcmV0cnk7CiAJfQotCXJldHVybiAwOworCXJldHVybiBzdG9wcGVkOwogfQogCi1zdGF0aWMg X19pbmxpbmUgdm9pZCBubV9rcl9nZXQoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCisvKiBwdXQg dGhlIHJpbmcgaW4gdGhlICdzdG9wcGVkJyBzdGF0ZSBhbmQgd2FpdCBmb3IgdGhlIGN1cnJlbnQg dXNlciAoaWYgYW55KSB0bworICogbm90aWNlLiBzdG9wcGVkIG11c3QgYmUgZWl0aGVyIE5NX0tS X1NUT1BQRUQgb3IgTk1fS1JfTE9DS0VECisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIG5tX2ty X3N0b3Aoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IsIGludCBzdG9wcGVkKQogeworCWtyLT5ua3Jf c3RvcHBlZCA9IHN0b3BwZWQ7CiAJd2hpbGUgKE5NX0FUT01JQ19URVNUX0FORF9TRVQoJmtyLT5u cl9idXN5KSkKIAkJdHNsZWVwKGtyLCAwLCAiTk1fS1JfR0VUIiwgNCk7CiB9CiAKKy8qIHJlc3Rh cnQgYSByaW5nIGFmdGVyIGEgc3RvcCAqLworc3RhdGljIF9faW5saW5lIHZvaWQgbm1fa3Jfc3Rh cnQoc3RydWN0IG5ldG1hcF9rcmluZyAqa3IpCit7CisJa3ItPm5rcl9zdG9wcGVkID0gMDsKKwlu bV9rcl9wdXQoa3IpOworfQorCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUg dXNlZCBieSBpbmRpdmlkdWFsIGRyaXZlcnMgdG8KQEAgLTk1MiwxMCArMTE2MywyNiBAQAogCWVu dW0gdHhyeCB0eCwgdV9pbnQgbiwgdV9pbnQgbmV3X2N1cik7CiBpbnQgbmV0bWFwX3JpbmdfcmVp bml0KHN0cnVjdCBuZXRtYXBfa3JpbmcgKik7CiAKKy8qIFJldHVybiBjb2RlcyBmb3IgbmV0bWFw Xyp4X2lycS4gKi8KK2VudW0geworCS8qIERyaXZlciBzaG91bGQgZG8gbm9ybWFsIGludGVycnVw dCBwcm9jZXNzaW5nLCBlLmcuIGJlY2F1c2UKKwkgKiB0aGUgaW50ZXJmYWNlIGlzIG5vdCBpbiBu ZXRtYXAgbW9kZS4gKi8KKwlOTV9JUlFfUEFTUyA9IDAsCisJLyogUG9ydCBpcyBpbiBuZXRtYXAg bW9kZSwgYW5kIHRoZSBpbnRlcnJ1cHQgd29yayBoYXMgYmVlbgorCSAqIGNvbXBsZXRlZC4gVGhl IGRyaXZlciBkb2VzIG5vdCBoYXZlIHRvIG5vdGlmeSBuZXRtYXAKKwkgKiBhZ2FpbiBiZWZvcmUg dGhlIG5leHQgaW50ZXJydXB0LiAqLworCU5NX0lSUV9DT01QTEVURUQgPSAtMSwKKwkvKiBQb3J0 IGlzIGluIG5ldG1hcCBtb2RlLCBidXQgdGhlIGludGVycnVwdCB3b3JrIGhhcyBub3QgYmVlbgor CSAqIGNvbXBsZXRlZC4gVGhlIGRyaXZlciBoYXMgdG8gbWFrZSBzdXJlIG5ldG1hcCB3aWxsIGJl CisJICogbm90aWZpZWQgYWdhaW4gc29vbiwgZXZlbiBpZiBubyBtb3JlIGludGVycnVwdHMgY29t ZSAoZS5nLgorCSAqIG9uIExpbnV4IHRoZSBkcml2ZXIgc2hvdWxkIG5vdCBjYWxsIG5hcGlfY29t cGxldGUoKSkuICovCisJTk1fSVJRX1JFU0NIRUQgPSAtMiwKK307CisKIC8qIGRlZmF1bHQgZnVu Y3Rpb25zIHRvIGhhbmRsZSByeC90eCBpbnRlcnJ1cHRzICovCiBpbnQgbmV0bWFwX3J4X2lycShz dHJ1Y3QgaWZuZXQgKiwgdV9pbnQsIHVfaW50ICopOwogI2RlZmluZSBuZXRtYXBfdHhfaXJxKF9u LCBfcSkgbmV0bWFwX3J4X2lycShfbiwgX3EsIE5VTEwpCi12b2lkIG5ldG1hcF9jb21tb25faXJx KHN0cnVjdCBpZm5ldCAqLCB1X2ludCwgdV9pbnQgKndvcmtfZG9uZSk7CitpbnQgbmV0bWFwX2Nv bW1vbl9pcnEoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIHVfaW50LCB1X2ludCAqd29ya19kb25l KTsKIAogCiAjaWZkZWYgV0lUSF9WQUxFCkBAIC05ODUsMzUgKzEyMTIsNzQgQEAKIAlyZXR1cm4g bm1fbmV0bWFwX29uKG5hKSAmJiAobmEtPm5hX2ZsYWdzICYgTkFGX05BVElWRSk7CiB9CiAKK3N0 YXRpYyBpbmxpbmUgaW50CitubV9pc3pvbWJpZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQor eworCXJldHVybiBuYSA9PSBOVUxMIHx8IChuYS0+bmFfZmxhZ3MgJiBOQUZfWk9NQklFKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkCitubV91cGRhdGVfaG9zdHJpbmdzX21vZGUoc3RydWN0IG5l dG1hcF9hZGFwdGVyICpuYSkKK3sKKwkvKiBQcm9jZXNzIG5yX21vZGUgYW5kIG5yX3BlbmRpbmdf bW9kZSBmb3IgaG9zdCByaW5ncy4gKi8KKwluYS0+dHhfcmluZ3NbbmEtPm51bV90eF9yaW5nc10u bnJfbW9kZSA9CisJCW5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXS5ucl9wZW5kaW5nX21v ZGU7CisJbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdLm5yX21vZGUgPQorCQluYS0+cnhf cmluZ3NbbmEtPm51bV9yeF9yaW5nc10ubnJfcGVuZGluZ19tb2RlOworfQorCiAvKiBzZXQvY2xl YXIgbmF0aXZlIGZsYWdzIGFuZCBpZl90cmFuc21pdC9uZXRkZXZfb3BzICovCiBzdGF0aWMgaW5s aW5lIHZvaWQKIG5tX3NldF9uYXRpdmVfZmxhZ3Moc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK IHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5pZnA7CiAKKwkvKiBXZSBkbyB0aGUgc2V0dXAg Zm9yIGludGVyY2VwdGluZyBwYWNrZXRzIG9ubHkgaWYgd2UgYXJlIHRoZQorCSAqIGZpcnN0IHVz ZXIgb2YgdGhpcyBhZGFwYXB0ZXIuICovCisJaWYgKG5hLT5hY3RpdmVfZmRzID4gMCkgeworCQly ZXR1cm47CisJfQorCiAJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAjaWZkZWYgSUZD QVBfTkVUTUFQIC8qIG9yIEZyZWVCU0QgPyAqLwogCWlmcC0+aWZfY2FwZW5hYmxlIHw9IElGQ0FQ X05FVE1BUDsKICNlbmRpZgotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZCAoX19GcmVl QlNEX18pCiAJbmEtPmlmX3RyYW5zbWl0ID0gaWZwLT5pZl90cmFuc21pdDsKIAlpZnAtPmlmX3Ry YW5zbWl0ID0gbmV0bWFwX3RyYW5zbWl0OworI2VsaWYgZGVmaW5lZCAoX1dJTjMyKQorCSh2b2lk KWlmcDsgLyogcHJldmVudCBhIHdhcm5pbmcgKi8KKwkvL1hYWF9hbGUgY2FuIHdlIGp1c3QgY29t bWVudCB0aG9zZT8KKwkvL25hLT5pZl90cmFuc21pdCA9IGlmcC0+aWZfdHJhbnNtaXQ7CisJLy9p ZnAtPmlmX3RyYW5zbWl0ID0gbmV0bWFwX3RyYW5zbWl0OwogI2Vsc2UKIAluYS0+aWZfdHJhbnNt aXQgPSAodm9pZCAqKWlmcC0+bmV0ZGV2X29wczsKIAlpZnAtPm5ldGRldl9vcHMgPSAmKChzdHJ1 Y3QgbmV0bWFwX2h3X2FkYXB0ZXIgKiluYSktPm5tX25kbzsKIAkoKHN0cnVjdCBuZXRtYXBfaHdf YWRhcHRlciAqKW5hKS0+c2F2ZV9ldGh0b29sID0gaWZwLT5ldGh0b29sX29wczsKIAlpZnAtPmV0 aHRvb2xfb3BzID0gJigoc3RydWN0IG5ldG1hcF9od19hZGFwdGVyKiluYSktPm5tX2V0bzsKICNl bmRpZgorCW5tX3VwZGF0ZV9ob3N0cmluZ3NfbW9kZShuYSk7CiB9CiAKLQogc3RhdGljIGlubGlu ZSB2b2lkCiBubV9jbGVhcl9uYXRpdmVfZmxhZ3Moc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK IHsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IG5hLT5pZnA7CiAKLSNpZmRlZiBfX0ZyZWVCU0RfXwor CS8qIFdlIHVuZG8gdGhlIHNldHVwIGZvciBpbnRlcmNlcHRpbmcgcGFja2V0cyBvbmx5IGlmIHdl IGFyZSB0aGUKKwkgKiBsYXN0IHVzZXIgb2YgdGhpcyBhZGFwYXB0ZXIuICovCisJaWYgKG5hLT5h Y3RpdmVfZmRzID4gMCkgeworCQlyZXR1cm47CisJfQorCisJbm1fdXBkYXRlX2hvc3RyaW5nc19t b2RlKG5hKTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAJaWZwLT5pZl90cmFuc21pdCA9 IG5hLT5pZl90cmFuc21pdDsKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCSh2b2lkKWlmcDsgLyog cHJldmVudCBhIHdhcm5pbmcgKi8KKwkvL1hYWF9hbGUgY2FuIHdlIGp1c3QgY29tbWVudCB0aG9z ZT8KKwkvL2lmcC0+aWZfdHJhbnNtaXQgPSBuYS0+aWZfdHJhbnNtaXQ7CiAjZWxzZQogCWlmcC0+ bmV0ZGV2X29wcyA9ICh2b2lkICopbmEtPmlmX3RyYW5zbWl0OwogCWlmcC0+ZXRodG9vbF9vcHMg PSAoKHN0cnVjdCBuZXRtYXBfaHdfYWRhcHRlciopbmEpLT5zYXZlX2V0aHRvb2w7CkBAIC0xMDI0 LDYgKzEyOTAsMjggQEAKICNlbmRpZgogfQogCisvKgorICogbm1fKnN5bmNfcHJvbG9ndWUoKSBm dW5jdGlvbnMgYXJlIHVzZWQgaW4gaW9jdGwvcG9sbCBhbmQgcHRuZXRtYXAKKyAqIGt0aHJlYWRz LgorICogV2UgbmVlZCBuZXRtYXBfcmluZyogcGFyYW1ldGVyLCBiZWNhdXNlIGluIHB0bmV0bWFw IGl0IGlzIGRlY291cGxlZAorICogZnJvbSBob3N0IGtyaW5nLgorICogVGhlIHVzZXItc3BhY2Ug cmluZyBwb2ludGVycyAoaGVhZC9jdXIvdGFpbCkgYXJlIHNoYXJlZCB0aHJvdWdoCisgKiBDU0Ig YmV0d2VlbiBob3N0IGFuZCBndWVzdC4KKyAqLworCisvKgorICogdmFsaWRhdGVzIHBhcmFtZXRl cnMgaW4gdGhlIHJpbmcva3JpbmcsIHJldHVybnMgYSB2YWx1ZSBmb3IgaGVhZAorICogSWYgYW55 IGVycm9yLCByZXR1cm5zIHJpbmdfc2l6ZSB0byBmb3JjZSBhIHJlaW5pdC4KKyAqLwordWludDMy X3Qgbm1fdHhzeW5jX3Byb2xvZ3VlKHN0cnVjdCBuZXRtYXBfa3JpbmcgKiwgc3RydWN0IG5ldG1h cF9yaW5nICopOworCisKKy8qCisgKiB2YWxpZGF0ZXMgcGFyYW1ldGVycyBpbiB0aGUgcmluZy9r cmluZywgcmV0dXJucyBhIHZhbHVlIGZvciBoZWFkCisgKiBJZiBhbnkgZXJyb3IsIHJldHVybnMg cmluZ19zaXplIGxpbSB0byBmb3JjZSBhIHJlaW5pdC4KKyAqLwordWludDMyX3Qgbm1fcnhzeW5j X3Byb2xvZ3VlKHN0cnVjdCBuZXRtYXBfa3JpbmcgKiwgc3RydWN0IG5ldG1hcF9yaW5nICopOwor CiAKIC8qIGNoZWNrL2ZpeCBhZGRyZXNzIGFuZCBsZW4gaW4gdHggcmluZ3MgKi8KICNpZiAxIC8q IGRlYnVnIHZlcnNpb24gKi8KQEAgLTEwNzksNiArMTM2Nyw5IEBACiAgKi8KIHZvaWQgbmV0bWFw X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSk7CiAKK2ludCBuZXRtYXBf aHdfa3JpbmdzX2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgbmV0bWFw X2h3X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSk7CisKIC8qIHNldCB0 aGUgc3RvcHBlZC9lbmFibGVkIHN0YXR1cyBvZiByaW5nCiAgKiBXaGVuIHN0b3BwaW5nLCB0aGV5 IGFsc28gd2FpdCBmb3IgYWxsIGN1cnJlbnQgYWN0aXZpdHkgb24gdGhlIHJpbmcgdG8KICAqIHRl cm1pbmF0ZS4gVGhlIHN0YXR1cyBjaGFuZ2UgaXMgdGhlbiBub3RpZmllZCB1c2luZyB0aGUgbmEg bm1fbm90aWZ5CkBAIC0xMDg3LDE2ICsxMzc4LDE4IEBACiB2b2lkIG5ldG1hcF9zZXRfcmluZyhz dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKiwgdV9pbnQgcmluZ19pZCwgZW51bSB0eHJ4LCBpbnQgc3Rv cHBlZCk7CiAvKiBzZXQgdGhlIHN0b3BwZWQvZW5hYmxlZCBzdGF0dXMgb2YgYWxsIHJpbmdzIG9m IHRoZSBhZGFwdGVyLiAqLwogdm9pZCBuZXRtYXBfc2V0X2FsbF9yaW5ncyhzdHJ1Y3QgbmV0bWFw X2FkYXB0ZXIgKiwgaW50IHN0b3BwZWQpOwotLyogY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIG5l dG1hcF9zZXRfYWxsX3JpbmdzLCB1c2VkIGluIGRyaXZlcnMgKi8KKy8qIGNvbnZlbmllbmNlIHdy YXBwZXJzIGZvciBuZXRtYXBfc2V0X2FsbF9yaW5ncyAqLwogdm9pZCBuZXRtYXBfZGlzYWJsZV9h bGxfcmluZ3Moc3RydWN0IGlmbmV0ICopOwogdm9pZCBuZXRtYXBfZW5hYmxlX2FsbF9yaW5ncyhz dHJ1Y3QgaWZuZXQgKik7CiAKIGludCBuZXRtYXBfZG9fcmVnaWYoc3RydWN0IG5ldG1hcF9wcml2 X2QgKnByaXYsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsCiAJdWludDE2X3QgcmluZ2lkLCB1 aW50MzJfdCBmbGFncyk7Ci0KK3ZvaWQgbmV0bWFwX2RvX3VucmVnaWYoc3RydWN0IG5ldG1hcF9w cml2X2QgKnByaXYpOwogCiB1X2ludCBubV9ib3VuZF92YXIodV9pbnQgKnYsIHVfaW50IGRmbHQs IHVfaW50IGxvLCB1X2ludCBoaSwgY29uc3QgY2hhciAqbXNnKTsKLWludCBuZXRtYXBfZ2V0X25h KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwgaW50IGNyZWF0 ZSk7CitpbnQgbmV0bWFwX2dldF9uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9h ZGFwdGVyICoqbmEsCisJCSAgc3RydWN0IGlmbmV0ICoqaWZwLCBpbnQgY3JlYXRlKTsKK3ZvaWQg bmV0bWFwX3VuZ2V0X25hKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIHN0cnVjdCBpZm5ldCAq aWZwKTsKIGludCBuZXRtYXBfZ2V0X2h3X25hKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgbmV0 bWFwX2FkYXB0ZXIgKipuYSk7CiAKIApAQCAtMTEyMywxMiArMTQxNiwxMSBAQAogdV9pbnQgbmV0 bWFwX2JkZ19sZWFybmluZyhzdHJ1Y3Qgbm1fYmRnX2Z3ZCAqZnQsIHVpbnQ4X3QgKmRzdF9yaW5n LAogCQlzdHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKik7CiAKKyNkZWZpbmUJTk1fQlJJREdFUwkJ OAkvKiBudW1iZXIgb2YgYnJpZGdlcyAqLwogI2RlZmluZQlOTV9CREdfTUFYUE9SVFMJCTI1NAkv KiB1cCB0byAyNTQgKi8KICNkZWZpbmUJTk1fQkRHX0JST0FEQ0FTVAlOTV9CREdfTUFYUE9SVFMK ICNkZWZpbmUJTk1fQkRHX05PUE9SVAkJKE5NX0JER19NQVhQT1JUUysxKQogCi0jZGVmaW5lCU5N X05BTUUJCQkidmFsZSIJLyogcHJlZml4IGZvciBicmlkZ2UgcG9ydCBuYW1lICovCi0KIC8qIHRo ZXNlIGFyZSByZWRlZmluZWQgaW4gY2FzZSBvZiBubyBWQUxFIHN1cHBvcnQgKi8KIGludCBuZXRt YXBfZ2V0X2JkZ19uYShzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICoq bmEsIGludCBjcmVhdGUpOwogc3RydWN0IG5tX2JyaWRnZSAqbmV0bWFwX2luaXRfYnJpZGdlczIo dV9pbnQpOwpAQCAtMTE4MCwxNCArMTQ3MiwxMyBAQAogI2VuZGlmCiAKIC8qIFZhcmlvdXMgcHJv dG90eXBlcyAqLwotaW50IG5ldG1hcF9wb2xsKHN0cnVjdCBjZGV2ICpkZXYsIGludCBldmVudHMs IHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludCBuZXRtYXBfcG9sbChzdHJ1Y3QgbmV0bWFwX3ByaXZf ZCAqLCBpbnQgZXZlbnRzLCBOTV9TRUxSRUNPUkRfVCAqdGQpOwogaW50IG5ldG1hcF9pbml0KHZv aWQpOwogdm9pZCBuZXRtYXBfZmluaSh2b2lkKTsKIGludCBuZXRtYXBfZ2V0X21lbW9yeShzdHJ1 Y3QgbmV0bWFwX3ByaXZfZCogcCk7CiB2b2lkIG5ldG1hcF9kdG9yKHZvaWQgKmRhdGEpOwotaW50 IG5ldG1hcF9kdG9yX2xvY2tlZChzdHJ1Y3QgbmV0bWFwX3ByaXZfZCAqcHJpdik7CiAKLWludCBu ZXRtYXBfaW9jdGwoc3RydWN0IGNkZXYgKmRldiwgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRhLCBp bnQgZmZsYWcsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludCBuZXRtYXBfaW9jdGwoc3RydWN0IG5l dG1hcF9wcml2X2QgKnByaXYsIHVfbG9uZyBjbWQsIGNhZGRyX3QgZGF0YSwgc3RydWN0IHRocmVh ZCAqKTsKIAogLyogbmV0bWFwX2FkYXB0ZXIgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gKi8KIApAQCAt MTIyNywxMSArMTUxOCwxMSBAQAogLyoKICAqIG1vZHVsZSB2YXJpYWJsZXMKICAqLwotI2RlZmlu ZSBORVRNQVBfQlVGX0JBU0UobmEpCSgobmEpLT5uYV9sdXQubHV0WzBdLnZhZGRyKQotI2RlZmlu ZSBORVRNQVBfQlVGX1NJWkUobmEpCSgobmEpLT5uYV9sdXQub2Jqc2l6ZSkKLWV4dGVybiBpbnQg bmV0bWFwX21pdGlnYXRlOwkvLyBYWFggbm90IHJlYWxseSB1c2VkCisjZGVmaW5lIE5FVE1BUF9C VUZfQkFTRShfbmEpCSgoX25hKS0+bmFfbHV0Lmx1dFswXS52YWRkcikKKyNkZWZpbmUgTkVUTUFQ X0JVRl9TSVpFKF9uYSkJKChfbmEpLT5uYV9sdXQub2Jqc2l6ZSkKIGV4dGVybiBpbnQgbmV0bWFw X25vX3BlbmRpbnRyOwotZXh0ZXJuIGludCBuZXRtYXBfdmVyYm9zZTsJLy8gWFhYIGRlYnVnZ2lu ZworZXh0ZXJuIGludCBuZXRtYXBfbWl0aWdhdGU7CitleHRlcm4gaW50IG5ldG1hcF92ZXJib3Nl OwkJLyogZm9yIGRlYnVnZ2luZyAqLwogZW51bSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHZlcmJvc2UgZmxhZ3MgKi8KIAlOTV9WRVJCX09OID0gMSwgICAgICAgICAgICAg ICAgIC8qIGdlbmVyaWMgdmVyYm9zZSAqLwogCU5NX1ZFUkJfSE9TVCA9IDB4MiwgICAgICAgICAg ICAgLyogdmVyYm9zZSBob3N0IHN0YWNrICovCkBAIC0xMjQ0LDEwICsxNTM1LDExIEBACiB9Owog CiBleHRlcm4gaW50IG5ldG1hcF90eHN5bmNfcmV0cnk7CitleHRlcm4gaW50IG5ldG1hcF9mbGFn czsKIGV4dGVybiBpbnQgbmV0bWFwX2dlbmVyaWNfbWl0OwogZXh0ZXJuIGludCBuZXRtYXBfZ2Vu ZXJpY19yaW5nc2l6ZTsKIGV4dGVybiBpbnQgbmV0bWFwX2dlbmVyaWNfcmluZ3M7Ci1leHRlcm4g aW50IG5ldG1hcF91c2VfY291bnQ7CitleHRlcm4gaW50IG5ldG1hcF9nZW5lcmljX3R4cWRpc2M7 CiAKIC8qCiAgKiBOQSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IG5ldG1hcCBhZGFw dGVyIGZyb20gdGhlIGlmcCwKQEAgLTEyNTYsMzcgKzE1NDgsMjcgQEAKICNkZWZpbmUJTkEoX2lm cCkJKChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKilXTkEoX2lmcCkpCiAKIC8qCi0gKiBNYWNyb3Mg dG8gZGV0ZXJtaW5lIGlmIGFuIGludGVyZmFjZSBpcyBuZXRtYXAgY2FwYWJsZSBvciBuZXRtYXAg ZW5hYmxlZC4KLSAqIFNlZSB0aGUgbWFnaWMgZmllbGQgaW4gc3RydWN0IG5ldG1hcF9hZGFwdGVy LgotICovCi0jaWZkZWYgX19GcmVlQlNEX18KLS8qCi0gKiBvbiBGcmVlQlNEIGp1c3QgdXNlIGlm X2NhcGFiaWxpdGllcyBhbmQgaWZfY2FwZW5hYmxlLgotICovCi0jZGVmaW5lIE5FVE1BUF9DQVBB QkxFKGlmcCkJKE5BKGlmcCkgJiYJCVwKLQkoaWZwKS0+aWZfY2FwYWJpbGl0aWVzICYgSUZDQVBf TkVUTUFQICkKLQotI2RlZmluZQlORVRNQVBfU0VUX0NBUEFCTEUoaWZwKQkJCQlcCi0JKGlmcCkt PmlmX2NhcGFiaWxpdGllcyB8PSBJRkNBUF9ORVRNQVAKLQotI2Vsc2UJLyogbGludXggKi8KLQot LyoKLSAqIG9uIGxpbnV4OgotICogd2UgY2hlY2sgaWYgTkEoaWZwKSBpcyBzZXQgYW5kIGl0cyBm aXJzdCBlbGVtZW50IGhhcyBhIHJlbGF0ZWQKKyAqIE9uIG9sZCB2ZXJzaW9ucyBvZiBGcmVlQlNE LCBOQShpZnApIGlzIGEgcHNwYXJlLiBPbiBsaW51eCB3ZQorICogb3ZlcmxvYWQgYW5vdGhlciBw b2ludGVyIGluIHRoZSBuZXRkZXYuCisgKgorICogV2UgY2hlY2sgaWYgTkEoaWZwKSBpcyBzZXQg YW5kIGl0cyBmaXJzdCBlbGVtZW50IGhhcyBhIHJlbGF0ZWQKICAqIG1hZ2ljIHZhbHVlLiBUaGUg Y2FwZW5hYmxlIGlzIHdpdGhpbiB0aGUgc3RydWN0IG5ldG1hcF9hZGFwdGVyLgogICovCiAjZGVm aW5lCU5FVE1BUF9NQUdJQwkweDUyNjk3YTdhCiAKLSNkZWZpbmUgTkVUTUFQX0NBUEFCTEUoaWZw KQkoTkEoaWZwKSAmJgkJXAorI2RlZmluZSBOTV9OQV9WQUxJRChpZnApCShOQShpZnApICYmCQlc CiAJKCh1aW50MzJfdCkodWludHB0cl90KU5BKGlmcCkgXiBOQShpZnApLT5tYWdpYykgPT0gTkVU TUFQX01BR0lDICkKIAotI2RlZmluZQlORVRNQVBfU0VUX0NBUEFCTEUoaWZwKQkJCQlcCi0JTkEo aWZwKS0+bWFnaWMgPSAoKHVpbnQzMl90KSh1aW50cHRyX3QpTkEoaWZwKSkgXiBORVRNQVBfTUFH SUMKKyNkZWZpbmUJTk1fQVRUQUNIX05BKGlmcCwgbmEpIGRvIHsJCQkJCVwKKwlXTkEoaWZwKSA9 IG5hOwkJCQkJCQlcCisJaWYgKE5BKGlmcCkpCQkJCQkJCVwKKwkJTkEoaWZwKS0+bWFnaWMgPSAJ CQkJCVwKKwkJCSgodWludDMyX3QpKHVpbnRwdHJfdClOQShpZnApKSBeIE5FVE1BUF9NQUdJQzsJ XAorfSB3aGlsZSgwKQogCi0jZW5kaWYJLyogbGludXggKi8KKyNkZWZpbmUgTk1fSVNfTkFUSVZF KGlmcCkJKE5NX05BX1ZBTElEKGlmcCkgJiYgTkEoaWZwKS0+bm1fZHRvciA9PSBuZXRtYXBfaHdf ZHRvcikKIAotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKIAog LyogQXNzaWducyB0aGUgZGV2aWNlIElPTU1VIGRvbWFpbiB0byBhbiBhbGxvY2F0b3IuCiAgKiBS ZXR1cm5zIC1FTk9NRU0gaW4gY2FzZSB0aGUgZG9tYWluIGlzIGRpZmZlcmVudCAqLwpAQCAtMTMz MCw2ICsxNjEyLDggQEAKIAl9CiB9CiAKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCiAjZWxzZSAv KiBsaW51eCAqLwogCiBpbnQgbm1faW9tbXVfZ3JvdXBfaWQoYnVzX2RtYV90YWdfdCBkZXYpOwpA QCAtMTM0MCw4ICsxNjI0LDggQEAKIAlidXNfZG1hX3RhZ190IHRhZywgYnVzX2RtYW1hcF90IG1h cCwgdm9pZCAqYnVmKQogewogCWlmICgwICYmIG1hcCkgewotCQkqbWFwID0gZG1hX21hcF9zaW5n bGUobmEtPnBkZXYsIGJ1ZiwgbmEtPm5hX2x1dC5vYmpzaXplLAotCQkJCURNQV9CSURJUkVDVElP TkFMKTsKKwkJKm1hcCA9IGRtYV9tYXBfc2luZ2xlKG5hLT5wZGV2LCBidWYsIE5FVE1BUF9CVUZf U0laRShuYSksCisJCQkJICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCX0KIH0KIApAQCAtMTM0 OSwxMSArMTYzMywxMSBAQAogbmV0bWFwX3VubG9hZF9tYXAoc3RydWN0IG5ldG1hcF9hZGFwdGVy ICpuYSwKIAlidXNfZG1hX3RhZ190IHRhZywgYnVzX2RtYW1hcF90IG1hcCkKIHsKLQl1X2ludCBz eiA9IG5hLT5uYV9sdXQub2Jqc2l6ZTsKKwl1X2ludCBzeiA9IE5FVE1BUF9CVUZfU0laRShuYSk7 CiAKIAlpZiAoKm1hcCkgewogCQlkbWFfdW5tYXBfc2luZ2xlKG5hLT5wZGV2LCAqbWFwLCBzeiwK LQkJCQlETUFfQklESVJFQ1RJT05BTCk7CisJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKIAl9CiB9 CiAKQEAgLTEzNjEsNyArMTY0NSw3IEBACiBuZXRtYXBfcmVsb2FkX21hcChzdHJ1Y3QgbmV0bWFw X2FkYXB0ZXIgKm5hLAogCWJ1c19kbWFfdGFnX3QgdGFnLCBidXNfZG1hbWFwX3QgbWFwLCB2b2lk ICpidWYpCiB7Ci0JdV9pbnQgc3ogPSBuYS0+bmFfbHV0Lm9ianNpemU7CisJdV9pbnQgc3ogPSBO RVRNQVBfQlVGX1NJWkUobmEpOwogCiAJaWYgKCptYXApIHsKIAkJZG1hX3VubWFwX3NpbmdsZShu YS0+cGRldiwgKm1hcCwgc3osCkBAIC0xNDcyLDcgKzE3NTYsMTEgQEAKIAlzdHJ1Y3QgbHV0X2Vu dHJ5ICpsdXQgPSBuYS0+bmFfbHV0Lmx1dDsKIAl2b2lkICpyZXQgPSAoaSA+PSBuYS0+bmFfbHV0 Lm9ianRvdGFsKSA/IGx1dFswXS52YWRkciA6IGx1dFtpXS52YWRkcjsKIAorI2lmbmRlZiBfV0lO MzIKIAkqcHAgPSAoaSA+PSBuYS0+bmFfbHV0Lm9ianRvdGFsKSA/IGx1dFswXS5wYWRkciA6IGx1 dFtpXS5wYWRkcjsKKyNlbHNlCisJKnBwID0gKGkgPj0gbmEtPm5hX2x1dC5vYmp0b3RhbCkgPyAo dWludDY0X3QpbHV0WzBdLnBhZGRyLlF1YWRQYXJ0IDogKHVpbnQ2NF90KWx1dFtpXS5wYWRkci5R dWFkUGFydDsKKyNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0OTYsOCArMTc4NCw5IEBA CiAJc3RydWN0IG5ldG1hcF9pZiAqIHZvbGF0aWxlIG5wX25pZnA7CS8qIG5ldG1hcCBpZiBkZXNj cmlwdG9yLiAqLwogCiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyCSpucF9uYTsKKwlzdHJ1Y3QgaWZu ZXQJKm5wX2lmcDsKIAl1aW50MzJfdAlucF9mbGFnczsJLyogZnJvbSB0aGUgaW9jdGwgKi8KLQl1 X2ludAkJbnBfcWZpcnN0W05SX1RYUlhdLCAKKwl1X2ludAkJbnBfcWZpcnN0W05SX1RYUlhdLAog CQkJbnBfcWxhc3RbTlJfVFhSWF07IC8qIHJhbmdlIG9mIHR4L3J4IHJpbmdzIHRvIHNjYW4gKi8K IAl1aW50MTZfdAlucF90eHBvbGw7CS8qIFhYWCBhbmQgYWxzbyBucF9yeHBvbGwgPyAqLwogCkBA IC0xNTExLDYgKzE4MDAsMjYgQEAKIAlzdHJ1Y3QgdGhyZWFkCSpucF90ZDsJCS8qIGtxdWV1ZSwg anVzdCBkZWJ1Z2dpbmcgKi8KIH07CiAKK3N0cnVjdCBuZXRtYXBfcHJpdl9kICpuZXRtYXBfcHJp dl9uZXcodm9pZCk7Cit2b2lkIG5ldG1hcF9wcml2X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3ByaXZf ZCAqKTsKKworc3RhdGljIGlubGluZSBpbnQgbm1fa3JpbmdfcGVuZGluZyhzdHJ1Y3QgbmV0bWFw X3ByaXZfZCAqbnApCit7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSA9IG5wLT5ucF9uYTsK KwllbnVtIHR4cnggdDsKKwlpbnQgaTsKKworCWZvcl9yeF90eCh0KSB7CisJCWZvciAoaSA9IG5w LT5ucF9xZmlyc3RbdF07IGkgPCBucC0+bnBfcWxhc3RbdF07IGkrKykgeworCQkJc3RydWN0IG5l dG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKwkJCWlmIChrcmluZy0+bnJfbW9k ZSAhPSBrcmluZy0+bnJfcGVuZGluZ19tb2RlKSB7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0K Kwl9CisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBXSVRIX01PTklUT1IKIAogc3RydWN0IG5ldG1h cF9tb25pdG9yX2FkYXB0ZXIgewpAQCAtMTUyOSwxMyArMTgzOCwzNiBAQAogICogbmF0aXZlIG5l dG1hcCBzdXBwb3J0LgogICovCiBpbnQgZ2VuZXJpY19uZXRtYXBfYXR0YWNoKHN0cnVjdCBpZm5l dCAqaWZwKTsKK2ludCBnZW5lcmljX3J4X2hhbmRsZXIoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVj dCBtYnVmICptKTs7CisKK2ludCBubV9vc19jYXRjaF9yeChzdHJ1Y3QgbmV0bWFwX2dlbmVyaWNf YWRhcHRlciAqZ25hLCBpbnQgaW50ZXJjZXB0KTsKK2ludCBubV9vc19jYXRjaF90eChzdHJ1Y3Qg bmV0bWFwX2dlbmVyaWNfYWRhcHRlciAqZ25hLCBpbnQgaW50ZXJjZXB0KTsKKworLyoKKyAqIHRo ZSBnZW5lcmljIHRyYW5zbWl0IHJvdXRpbmUgaXMgcGFzc2VkIGEgc3RydWN0dXJlIHRvIG9wdGlv bmFsbHkKKyAqIGJ1aWxkIGEgcXVldWUgb2YgZGVzY3JpcHRvcnMsIGluIGFuIE9TLXNwZWNpZmlj IHdheS4KKyAqIFRoZSBwYXlsb2FkIGlzIGF0IGFkZHIsIGlmIG5vbi1udWxsLCBhbmQgdGhlIHJv dXRpbmUgc2hvdWxkIHNlbmQgb3IgcXVldWUKKyAqIHRoZSBwYWNrZXQsIHJldHVybmluZyAwIGlm IHN1Y2Nlc3NmdWwsIDEgb24gZmFpbHVyZS4KKyAqCisgKiBBdCB0aGUgZW5kLCBpZiBoZWFkIGlz IG5vbi1udWxsLCB0aGVyZSB3aWxsIGJlIGFuIGFkZGl0aW9uYWwgY2FsbAorICogdG8gdGhlIGZ1 bmN0aW9uIHdpdGggYWRkciA9IE5VTEw7IHRoaXMgc2hvdWxkIHRlbGwgdGhlIE9TLXNwZWNpZmlj CisgKiByb3V0aW5lIHRvIHNlbmQgdGhlIHF1ZXVlIGFuZCBmcmVlIGFueSByZXNvdXJjZXMuIEZh aWx1cmUgaXMgaWdub3JlZC4KKyAqLworc3RydWN0IG5tX29zX2dlbl9hcmcgeworCXN0cnVjdCBp Zm5ldCAqaWZwOworCXZvaWQgKm07CS8qIG9zLXNwZWNpZmljIG1idWYtbGlrZSBvYmplY3QgKi8K Kwl2b2lkICpoZWFkLCAqdGFpbDsgLyogdGFpbHEsIGlmIHRoZSBPUy1zcGVjaWZpYyByb3V0aW5l IG5lZWRzIHRvIGJ1aWxkIG9uZSAqLworCXZvaWQgKmFkZHI7CS8qIHBheWxvYWQgb2YgY3VycmVu dCBwYWNrZXQgKi8KKwl1X2ludCBsZW47CS8qIHBhY2tldCBsZW5ndGggKi8KKwl1X2ludCByaW5n X25yOwkvKiBwYWNrZXQgbGVuZ3RoICovCisJdV9pbnQgcWV2ZW50OyAgIC8qIGluIHR4cWRpc2Mg bW9kZSwgcGxhY2UgYW4gZXZlbnQgb24gdGhpcyBtYnVmICovCit9OworCitpbnQgbm1fb3NfZ2Vu ZXJpY194bWl0X2ZyYW1lKHN0cnVjdCBubV9vc19nZW5fYXJnICopOworaW50IG5tX29zX2dlbmVy aWNfZmluZF9udW1fZGVzYyhzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9pbnQgKnR4LCB1X2ludCAqcngp Owordm9pZCBubV9vc19nZW5lcmljX2ZpbmRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWZuZXQgKmlmcCwg dV9pbnQgKnR4cSwgdV9pbnQgKnJ4cSk7Cit2b2lkIG5tX29zX2dlbmVyaWNfc2V0X2ZlYXR1cmVz KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpnbmEpOwogCi1pbnQgbmV0bWFwX2NhdGNo X3J4KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpuYSwgaW50IGludGVyY2VwdCk7Ci12 b2lkIGdlbmVyaWNfcnhfaGFuZGxlcihzdHJ1Y3QgaWZuZXQgKmlmcCwgc3RydWN0IG1idWYgKm0p OzsKLXZvaWQgbmV0bWFwX2NhdGNoX3R4KHN0cnVjdCBuZXRtYXBfZ2VuZXJpY19hZGFwdGVyICpu YSwgaW50IGVuYWJsZSk7Ci1pbnQgZ2VuZXJpY194bWl0X2ZyYW1lKHN0cnVjdCBpZm5ldCAqaWZw LCBzdHJ1Y3QgbWJ1ZiAqbSwgdm9pZCAqYWRkciwgdV9pbnQgbGVuLCB1X2ludCByaW5nX25yKTsK LWludCBnZW5lcmljX2ZpbmRfbnVtX2Rlc2Moc3RydWN0IGlmbmV0ICppZnAsIHVfaW50ICp0eCwg dV9pbnQgKnJ4KTsKLXZvaWQgZ2VuZXJpY19maW5kX251bV9xdWV1ZXMoc3RydWN0IGlmbmV0ICpp ZnAsIHVfaW50ICp0eHEsIHVfaW50ICpyeHEpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWZuZXQq CiBuZXRtYXBfZ2VuZXJpY19nZXRpZnAoc3RydWN0IG5ldG1hcF9nZW5lcmljX2FkYXB0ZXIgKmdu YSkKIHsKQEAgLTE1NDUsNiArMTg3Nyw4IEBACiAgICAgICAgIHJldHVybiBnbmEtPnVwLnVwLmlm cDsKIH0KIAordm9pZCBuZXRtYXBfZ2VuZXJpY19pcnEoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu YSwgdV9pbnQgcSwgdV9pbnQgKndvcmtfZG9uZSk7CisKIC8vI2RlZmluZSBSQVRFX0dFTkVSSUMg IC8qIEVuYWJsZXMgY29tbXVuaWNhdGlvbiBzdGF0aXN0aWNzIGZvciBnZW5lcmljLiAqLwogI2lm ZGVmIFJBVEVfR0VORVJJQwogdm9pZCBnZW5lcmljX3JhdGUoaW50IHR4cCwgaW50IHR4cywgaW50 IHR4aSwgaW50IHJ4cCwgaW50IHJ4cywgaW50IHJ4aSk7CkBAIC0xNTU3LDE2ICsxODkxLDE2IEBA CiAgKiB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHQgcmVxdWVzdHMvc2Vsd2FrZXVw CiAgKiB0byBjbGllbnRzIG9uIGluY29taW5nIHBhY2tldHMuCiAgKi8KLXZvaWQgbmV0bWFwX21p dGlnYXRpb25faW5pdChzdHJ1Y3Qgbm1fZ2VuZXJpY19taXQgKm1pdCwgaW50IGlkeCwKK3ZvaWQg bm1fb3NfbWl0aWdhdGlvbl9pbml0KHN0cnVjdCBubV9nZW5lcmljX21pdCAqbWl0LCBpbnQgaWR4 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg Km5hKTsKLXZvaWQgbmV0bWFwX21pdGlnYXRpb25fc3RhcnQoc3RydWN0IG5tX2dlbmVyaWNfbWl0 ICptaXQpOwotdm9pZCBuZXRtYXBfbWl0aWdhdGlvbl9yZXN0YXJ0KHN0cnVjdCBubV9nZW5lcmlj X21pdCAqbWl0KTsKLWludCBuZXRtYXBfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0IG5tX2dlbmVy aWNfbWl0ICptaXQpOwotdm9pZCBuZXRtYXBfbWl0aWdhdGlvbl9jbGVhbnVwKHN0cnVjdCBubV9n ZW5lcmljX21pdCAqbWl0KTsKK3ZvaWQgbm1fb3NfbWl0aWdhdGlvbl9zdGFydChzdHJ1Y3Qgbm1f Z2VuZXJpY19taXQgKm1pdCk7Cit2b2lkIG5tX29zX21pdGlnYXRpb25fcmVzdGFydChzdHJ1Y3Qg bm1fZ2VuZXJpY19taXQgKm1pdCk7CitpbnQgbm1fb3NfbWl0aWdhdGlvbl9hY3RpdmUoc3RydWN0 IG5tX2dlbmVyaWNfbWl0ICptaXQpOwordm9pZCBubV9vc19taXRpZ2F0aW9uX2NsZWFudXAoc3Ry dWN0IG5tX2dlbmVyaWNfbWl0ICptaXQpOworI2Vsc2UgLyogIVdJVEhfR0VORVJJQyAqLworI2Rl ZmluZSBnZW5lcmljX25ldG1hcF9hdHRhY2goaWZwKQkoRU9QTk9UU1VQUCkKICNlbmRpZiAvKiBX SVRIX0dFTkVSSUMgKi8KIAotCi0KIC8qIFNoYXJlZCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBWQUxF IHN3aXRjaC4gKi8KIAogLyoKQEAgLTE2NTUsMjIgKzE5ODksMTEwIEBACiAgKi8KICNkZWZpbmUg cmF3c3VtX3QgdWludDMyX3QKIAotcmF3c3VtX3Qgbm1fY3N1bV9yYXcodWludDhfdCAqZGF0YSwg c2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSk7Ci11aW50MTZfdCBubV9jc3VtX2lwdjQoc3Ry dWN0IG5tX2lwaGRyICppcGgpOwotdm9pZCBubV9jc3VtX3RjcHVkcF9pcHY0KHN0cnVjdCBubV9p cGhkciAqaXBoLCB2b2lkICpkYXRhLAorcmF3c3VtX3Qgbm1fb3NfY3N1bV9yYXcodWludDhfdCAq ZGF0YSwgc2l6ZV90IGxlbiwgcmF3c3VtX3QgY3VyX3N1bSk7Cit1aW50MTZfdCBubV9vc19jc3Vt X2lwdjQoc3RydWN0IG5tX2lwaGRyICppcGgpOwordm9pZCBubV9vc19jc3VtX3RjcHVkcF9pcHY0 KHN0cnVjdCBubV9pcGhkciAqaXBoLCB2b2lkICpkYXRhLAogCQkgICAgICBzaXplX3QgZGF0YWxl biwgdWludDE2X3QgKmNoZWNrKTsKLXZvaWQgbm1fY3N1bV90Y3B1ZHBfaXB2NihzdHJ1Y3Qgbm1f aXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKK3ZvaWQgbm1fb3NfY3N1bV90Y3B1ZHBfaXB2Nihz dHJ1Y3Qgbm1faXB2NmhkciAqaXA2aCwgdm9pZCAqZGF0YSwKIAkJICAgICAgc2l6ZV90IGRhdGFs ZW4sIHVpbnQxNl90ICpjaGVjayk7Ci11aW50MTZfdCBubV9jc3VtX2ZvbGQocmF3c3VtX3QgY3Vy X3N1bSk7Cit1aW50MTZfdCBubV9vc19jc3VtX2ZvbGQocmF3c3VtX3QgY3VyX3N1bSk7CiAKIHZv aWQgYmRnX21pc21hdGNoX2RhdGFwYXRoKHN0cnVjdCBuZXRtYXBfdnBfYWRhcHRlciAqbmEsCiAJ CQkgICBzdHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKmRzdF9uYSwKLQkJCSAgIHN0cnVjdCBubV9i ZGdfZndkICpmdF9wLCBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcsCisJCQkgICBjb25zdCBzdHJ1 Y3Qgbm1fYmRnX2Z3ZCAqZnRfcCwKKwkJCSAgIHN0cnVjdCBuZXRtYXBfcmluZyAqZHN0X3Jpbmcs CiAJCQkgICB1X2ludCAqaiwgdV9pbnQgbGltLCB1X2ludCAqaG93bWFueSk7CiAKIC8qIHBlcnNp c3RlbnQgdmlydHVhbCBwb3J0IHJvdXRpbmVzICovCi1pbnQgbm1fdmlfcGVyc2lzdChjb25zdCBj aGFyICosIHN0cnVjdCBpZm5ldCAqKik7Ci12b2lkIG5tX3ZpX2RldGFjaChzdHJ1Y3QgaWZuZXQg Kik7Ci12b2lkIG5tX3ZpX2luaXRfaW5kZXgodm9pZCk7CitpbnQgbm1fb3NfdmlfcGVyc2lzdChj b25zdCBjaGFyICosIHN0cnVjdCBpZm5ldCAqKik7Cit2b2lkIG5tX29zX3ZpX2RldGFjaChzdHJ1 Y3QgaWZuZXQgKik7Cit2b2lkIG5tX29zX3ZpX2luaXRfaW5kZXgodm9pZCk7CisKKy8qCisgKiBr ZXJuZWwgdGhyZWFkIHJvdXRpbmVzCisgKi8KK3N0cnVjdCBubV9rdGhyZWFkOyAvKiBPUy1zcGVj aWZpYyBrdGhyZWFkIC0gb3BhcXVlICovCit0eXBlZGVmIHZvaWQgKCpubV9rdGhyZWFkX3dvcmtl cl9mbl90KSh2b2lkICpkYXRhKTsKKworLyoga3RocmVhZCBjb25maWd1cmF0aW9uICovCitzdHJ1 Y3Qgbm1fa3RocmVhZF9jZmcgeworCWxvbmcJCQkJdHlwZTsJCS8qIGt0aHJlYWQgdHlwZS9pZGVu dGlmaWVyICovCisJbm1fa3RocmVhZF93b3JrZXJfZm5fdAkJd29ya2VyX2ZuOwkvKiB3b3JrZXIg ZnVuY3Rpb24gKi8KKwl2b2lkCQkJCSp3b3JrZXJfcHJpdmF0ZTsvKiB3b3JrZXIgcGFyYW1ldGVy ICovCisJaW50CQkJCWF0dGFjaF91c2VyOwkvKiBhdHRhY2gga3RocmVhZCB0byB1c2VyIHByb2Nl c3MgKi8KK307CisvKiBrdGhyZWFkIGNvbmZpZ3VyYXRpb24gKi8KK3N0cnVjdCBubV9rdGhyZWFk ICpubV9vc19rdGhyZWFkX2NyZWF0ZShzdHJ1Y3Qgbm1fa3RocmVhZF9jZmcgKmNmZywKKwkJCQkJ dW5zaWduZWQgaW50IGNmZ3R5cGUsCisJCQkJCXZvaWQgKm9wYXF1ZSk7CitpbnQgbm1fb3Nfa3Ro cmVhZF9zdGFydChzdHJ1Y3Qgbm1fa3RocmVhZCAqKTsKK3ZvaWQgbm1fb3Nfa3RocmVhZF9zdG9w KHN0cnVjdCBubV9rdGhyZWFkICopOwordm9pZCBubV9vc19rdGhyZWFkX2RlbGV0ZShzdHJ1Y3Qg bm1fa3RocmVhZCAqKTsKK3ZvaWQgbm1fb3Nfa3RocmVhZF93YWtldXBfd29ya2VyKHN0cnVjdCBu bV9rdGhyZWFkICpubWspOwordm9pZCBubV9vc19rdGhyZWFkX3NlbmRfaXJxKHN0cnVjdCBubV9r dGhyZWFkICopOwordm9pZCBubV9vc19rdGhyZWFkX3NldF9hZmZpbml0eShzdHJ1Y3Qgbm1fa3Ro cmVhZCAqLCBpbnQpOwordV9pbnQgbm1fb3NfbmNwdXModm9pZCk7CisKKyNpZmRlZiBXSVRIX1BU TkVUTUFQX0hPU1QKKy8qCisgKiBuZXRtYXAgYWRhcHRlciBmb3IgaG9zdCBwdG5ldG1hcCBwb3J0 cworICovCitzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciB7CisJc3RydWN0IG5ldG1hcF9h ZGFwdGVyIHVwOworCisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpwYXJlbnQ7CisJaW50ICgqcGFy ZW50X25tX25vdGlmeSkoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGludCBmbGFncyk7CisJ dm9pZCAqcHRuczsKK307CisvKiBwdG5ldG1hcCBIT1NUIHJvdXRpbmVzICovCitpbnQgbmV0bWFw X2dldF9wdF9ob3N0X25hKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg KipuYSwgaW50IGNyZWF0ZSk7CitpbnQgcHRuZXRtYXBfY3RsKHN0cnVjdCBubXJlcSAqbm1yLCBz dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3N0YXRpYyBpbmxpbmUgaW50CitubV9wdG5ldG1h cF9ob3N0X29uKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJcmV0dXJuIG5hICYmIG5h LT5uYV9mbGFncyAmIE5BRl9QVE5FVE1BUF9IT1NUOworfQorI2Vsc2UgLyogIVdJVEhfUFRORVRN QVBfSE9TVCAqLworI2RlZmluZSBuZXRtYXBfZ2V0X3B0X2hvc3RfbmEobm1yLCBfMiwgXzMpIFwK KwkoKG5tciktPm5yX2ZsYWdzICYgKE5SX1BUTkVUTUFQX0hPU1QpID8gRU9QTk9UU1VQUCA6IDAp CisjZGVmaW5lIHB0bmV0bWFwX2N0bChfMSwgXzIpICAgRUlOVkFMCisjZGVmaW5lIG5tX3B0bmV0 bWFwX2hvc3Rfb24oXzEpICAgRUlOVkFMCisjZW5kaWYgLyogIVdJVEhfUFRORVRNQVBfSE9TVCAq LworCisjaWZkZWYgV0lUSF9QVE5FVE1BUF9HVUVTVAorLyogcHRuZXRtYXAgR1VFU1Qgcm91dGlu ZXMgKi8KKworLyoKKyAqIG5ldG1hcCBhZGFwdGVyIGZvciBndWVzdCBwdG5ldG1hcCBwb3J0cwor ICovCitzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0ZXIgeworICAgICAgICAvKiBUaGUgbmV0 bWFwIGFkYXB0ZXIgdG8gYmUgdXNlZCBieSBuZXRtYXAgYXBwbGljYXRpb25zLgorCSAqIFRoaXMg ZmllbGQgbXVzdCBiZSB0aGUgZmlyc3QsIHRvIGFsbG93IHVwY2FzdC4gKi8KKwlzdHJ1Y3QgbmV0 bWFwX2h3X2FkYXB0ZXIgaHd1cDsKKworICAgICAgICAvKiBUaGUgbmV0bWFwIGFkYXB0ZXIgdG8g YmUgdXNlZCBieSB0aGUgZHJpdmVyLiAqLworICAgICAgICBzdHJ1Y3QgbmV0bWFwX2h3X2FkYXB0 ZXIgZHI7CisKKwl2b2lkICpjc2I7CisKKwkvKiBSZWZlcmVuY2UgY291bnRlciB0byB0cmFjayB1 c2VycyBvZiBiYWNrZW5kIG5ldG1hcCBwb3J0OiB0aGUKKwkgKiBuZXR3b3JrIHN0YWNrIGFuZCBu ZXRtYXAgY2xpZW50cy4KKwkgKiBVc2VkIHRvIGRlY2lkZSB3aGVuIHdlIG5lZWQgKGRlKWFsbG9j YXRlIGtyaW5ncy9yaW5ncyBhbmQKKwkgKiBzdGFydCAoc3RvcCkgcHRuZXRtYXAga3RocmVhZHMu ICovCisJaW50IGJhY2tlbmRfcmVnaWZzOworCit9OworCitpbnQgbmV0bWFwX3B0X2d1ZXN0X2F0 dGFjaChzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB2b2lkICpjc2IsCisJCQkgICB1bnNpZ25l ZCBpbnQgbmlmcF9vZmZzZXQsIHVuc2lnbmVkIGludCBtZW1pZCk7CitzdHJ1Y3QgcHRuZXRfcmlu ZzsKK2Jvb2wgbmV0bWFwX3B0X2d1ZXN0X3R4c3luYyhzdHJ1Y3QgcHRuZXRfcmluZyAqcHRyaW5n LCBzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywKKwkJCSAgICBpbnQgZmxhZ3MpOworYm9vbCBu ZXRtYXBfcHRfZ3Vlc3RfcnhzeW5jKHN0cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcsIHN0cnVjdCBu ZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkJICAgIGludCBmbGFncyk7CitpbnQgcHRuZXRfbm1fa3Jp bmdzX2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgcHRuZXRfbm1fa3Jp bmdzX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKK3ZvaWQgcHRuZXRfbm1fZHRv cihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKTsKKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQX0dV RVNUICovCiAKICNlbmRpZiAvKiBfTkVUX05FVE1BUF9LRVJOX0hfICovCmRpZmYgLXUgLXIgLU4g dXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWJxLmMgL3Vzci9zcmMvc3lzL2Rldi9uZXRt YXAvbmV0bWFwX21icS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tYnEuYwky MDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9u ZXRtYXAvbmV0bWFwX21icS5jCTIwMTYtMTEtMjMgMTY6NTc6NTcuODUwOTQ1MDAwICswMDAwCkBA IC0xLDUgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IFZpbmNlbnpvIE1h ZmZpb25lLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQg VmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDEyICsyNSwxNCBAQAogICovCiAKIC8qCi0gKiAkRnJl ZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5jIDI2NzE3NyAyMDE0 LTA2LTA2IDE4OjAyOjMyWiBsdWlnaSAkCisgKiAkRnJlZUJTRCQKICAqLwogCiAKICNpZmRlZiBs aW51eAogI2luY2x1ZGUgImJzZF9nbHVlLmgiCisjZWxpZiBkZWZpbmVkIChfV0lOMzIpCisjaW5j bHVkZSAid2luX2dsdWUuaCIKICNlbHNlICAgLyogX19GcmVlQlNEX18gKi8KICNpbmNsdWRlIDxz eXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvbG9jay5oPgpAQCAtMTUyLDEyICsxNTUsMTIgQEAK IH0KIAogCi12b2lkIG1icV9zYWZlX2Rlc3Ryb3koc3RydWN0IG1icSAqcSkKK3ZvaWQgbWJxX3Nh ZmVfZmluaShzdHJ1Y3QgbWJxICpxKQogewogICAgIG10eF9kZXN0cm95KCZxLT5sb2NrKTsKIH0K IAogCi12b2lkIG1icV9kZXN0cm95KHN0cnVjdCBtYnEgKnEpCit2b2lkIG1icV9maW5pKHN0cnVj dCBtYnEgKnEpCiB7CiB9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRt YXBfbWJxLmggL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCi0tLSB1c3Ivc3Jj L3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaAkyMDE2LTA5LTI5IDAwOjI0OjQ3LjAwMDAwMDAw MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCTIwMTYtMTEt MjMgMTY6NTc6NTcuODUxMjQ1MDAwICswMDAwCkBAIC0xLDUgKzEsNiBAQAogLyoKLSAqIENvcHly aWdodCAoQykgMjAxMy0yMDE0IFZpbmNlbnpvIE1hZmZpb25lLiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgVmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDcg KzI1LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9kZXYvbmV0 bWFwL25ldG1hcF9tYnEuaCAyNzAwNjMgMjAxNC0wOC0xNiAxNTowMDowMVogbHVpZ2kgJAorICog JEZyZWVCU0QkCiAgKi8KIAogCkBAIC00MCw2ICs0MSw4IEBACiAvKiBYWFggcHJvYmFibHkgcmVs eSBvbiBhIHByZXZpb3VzIGRlZmluaXRpb24gb2YgU1BJTkxPQ0tfVCAqLwogI2lmZGVmIGxpbnV4 CiAjZGVmaW5lIFNQSU5MT0NLX1QgIHNhZmVfc3BpbmxvY2tfdAorI2VsaWYgZGVmaW5lZCAoX1dJ TjMyKQorI2RlZmluZSBTUElOTE9DS19UIAl3aW5fc3BpbmxvY2tfdAogI2Vsc2UKICNkZWZpbmUg U1BJTkxPQ0tfVCAgc3RydWN0IG10eAogI2VuZGlmCkBAIC01MiwxNiArNTUsMjEgQEAKICAgICBT UElOTE9DS19UIGxvY2s7CiB9OwogCi0vKiBYWFggImRlc3Ryb3kiIGRvZXMgbm90IG1hdGNoICJp bml0IiBhcyBhIG5hbWUuCi0gKiBXZSBzaG91bGQgYWxzbyBjbGFyaWZ5IHdoZXRoZXIgaW5pdCBj YW4gYmUgdXNlZCB3aGlsZQorLyogV2Ugc2hvdWxkIGNsYXJpZnkgd2hldGhlciBpbml0IGNhbiBi ZSB1c2VkIHdoaWxlCiAgKiBob2xkaW5nIGEgbG9jaywgYW5kIHdoZXRoZXIgbWJxX3NhZmVfZGVz dHJveSgpIGlzIGEgTk9QLgogICovCiB2b2lkIG1icV9pbml0KHN0cnVjdCBtYnEgKnEpOwotdm9p ZCBtYnFfZGVzdHJveShzdHJ1Y3QgbWJxICpxKTsKK3ZvaWQgbWJxX2Zpbmkoc3RydWN0IG1icSAq cSk7CiB2b2lkIG1icV9lbnF1ZXVlKHN0cnVjdCBtYnEgKnEsIHN0cnVjdCBtYnVmICptKTsKIHN0 cnVjdCBtYnVmICptYnFfZGVxdWV1ZShzdHJ1Y3QgbWJxICpxKTsKIHZvaWQgbWJxX3B1cmdlKHN0 cnVjdCBtYnEgKnEpOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYnVmICoKK21icV9wZWVrKHN0 cnVjdCBtYnEgKnEpCit7CisJcmV0dXJuIHEtPmhlYWQgPyBxLT5oZWFkIDogTlVMTDsKK30KKwog c3RhdGljIGlubGluZSB2b2lkCiBtYnFfbG9jayhzdHJ1Y3QgbWJxICpxKQogewpAQCAtNzYsNyAr ODQsNyBAQAogCiAKIHZvaWQgbWJxX3NhZmVfaW5pdChzdHJ1Y3QgbWJxICpxKTsKLXZvaWQgbWJx X3NhZmVfZGVzdHJveShzdHJ1Y3QgbWJxICpxKTsKK3ZvaWQgbWJxX3NhZmVfZmluaShzdHJ1Y3Qg bWJxICpxKTsKIHZvaWQgbWJxX3NhZmVfZW5xdWV1ZShzdHJ1Y3QgbWJxICpxLCBzdHJ1Y3QgbWJ1 ZiAqbSk7CiBzdHJ1Y3QgbWJ1ZiAqbWJxX3NhZmVfZGVxdWV1ZShzdHJ1Y3QgbWJxICpxKTsKIHZv aWQgbWJxX3NhZmVfcHVyZ2Uoc3RydWN0IG1icSAqcSk7CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z eXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1h cF9tZW0yLmMKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuYwkyMDE2LTA5 LTI5IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAv bmV0bWFwX21lbTIuYwkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1MjE0NDAwMCArMDAwMApAQCAtMSw1 ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBNYXR0ZW8gTGFuZGksIEx1 aWdpIFJpenpvLCBHaXVzZXBwZSBMZXR0aWVyaS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv cHlyaWdodCAoQykgMjAxMi0yMDE0IE1hdHRlbyBMYW5kaQorICogQ29weXJpZ2h0IChDKSAyMDEy LTIwMTYgTHVpZ2kgUml6em8KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEdpdXNlcHBlIExl dHRpZXJpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCkBAIC0zMywxMCArMzYsMTEgQEAKIAogI2lmZGVmIF9fRnJlZUJTRF9fCiAjaW5jbHVk ZSA8c3lzL2NkZWZzLmg+IC8qIHByZXJlcXVpc2l0ZSAqLwotX19GQlNESUQoIiRGcmVlQlNEOiBy ZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5jIDI4NTM0OSAyMDE1LTA3LTEw IDA1OjUxOjM2WiBsdWlnaSAkIik7CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9u ZXRtYXAvbmV0bWFwLmMgMjQxNzIzIDIwMTItMTAtMTkgMDk6NDE6NDVaIGdsZWJpdXMgJCIpOwog CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1 ZGUgPHN5cy9rZXJuZWwuaD4JCS8qIE1BTExPQ19ERUZJTkUgKi8KICNpbmNsdWRlIDxzeXMvcHJv Yy5oPgogI2luY2x1ZGUgPHZtL3ZtLmg+CS8qIHZ0b3BoeXMgKi8KICNpbmNsdWRlIDx2bS9wbWFw Lmg+CS8qIHZ0b3BoeXMgKi8KQEAgLTQ4LDEzICs1MiwyNiBAQAogI2luY2x1ZGUgPG5ldC92bmV0 Lmg+CiAjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4JLyogYnVzX2RtYW1hcF8qICovCiAKKy8qIE1f TkVUTUFQIG9ubHkgdXNlZCBpbiBoZXJlICovCitNQUxMT0NfREVDTEFSRShNX05FVE1BUCk7CitN QUxMT0NfREVGSU5FKE1fTkVUTUFQLCAibmV0bWFwIiwgIk5ldHdvcmsgbWVtb3J5IG1hcCIpOwor CiAjZW5kaWYgLyogX19GcmVlQlNEX18gKi8KIAorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHdp bl9nbHVlLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KICNpbmNsdWRlIDxk ZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0Lmg+CiAj aW5jbHVkZSAibmV0bWFwX21lbTIuaCIKIAotI2RlZmluZSBORVRNQVBfQlVGX01BWF9OVU0JMjAq NDA5NioyCS8qIGxhcmdlIG1hY2hpbmUgKi8KKyNpZmRlZiBfV0lOMzJfVVNFX1NNQUxMX0dFTkVS SUNfREVWSUNFU19NRU1PUlkKKyNkZWZpbmUgTkVUTUFQX0JVRl9NQVhfTlVNICA4KjQwOTYgICAg ICAvKiBpZiB0b28gYmlnIHRha2VzIHRvbyBtdWNoIHRpbWUgdG8gYWxsb2NhdGUgKi8KKyNlbHNl CisjZGVmaW5lIE5FVE1BUF9CVUZfTUFYX05VTSAyMCo0MDk2KjIJLyogbGFyZ2UgbWFjaGluZSAq LworI2VuZGlmCiAKICNkZWZpbmUgTkVUTUFQX1BPT0xfTUFYX05BTVNaCTMyCiAKQEAgLTcwLDYg Kzg3LDkgQEAKIHN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyB7CiAJdV9pbnQgc2l6ZTsKIAl1X2lu dCBudW07CisKKwl1X2ludCBsYXN0X3NpemU7CisJdV9pbnQgbGFzdF9udW07CiB9OwogCiBzdHJ1 Y3QgbmV0bWFwX29ial9wb29sIHsKQEAgLTExMSw3ICsxMzEsNyBAQAogCiAKIHN0cnVjdCBuZXRt YXBfbWVtX29wcyB7Ci0Jdm9pZCAoKm5tZF9nZXRfbHV0KShzdHJ1Y3QgbmV0bWFwX21lbV9kICos IHN0cnVjdCBuZXRtYXBfbHV0Kik7CisJaW50ICgqbm1kX2dldF9sdXQpKHN0cnVjdCBuZXRtYXBf bWVtX2QgKiwgc3RydWN0IG5ldG1hcF9sdXQqKTsKIAlpbnQgICgqbm1kX2dldF9pbmZvKShzdHJ1 Y3QgbmV0bWFwX21lbV9kICosIHVfaW50ICpzaXplLAogCQkJdV9pbnQgKm1lbWZsYWdzLCB1aW50 MTZfdCAqaWQpOwogCkBAIC0xMjgsMTQgKzE0OCwxMyBAQAogCXZvaWQgKCpubWRfcmluZ3NfZGVs ZXRlKShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKik7CiB9OwogCi10eXBlZGVmIHVpbnQxNl90IG5t X21lbWlkX3Q7Ci0KIHN0cnVjdCBuZXRtYXBfbWVtX2QgewogCU5NQV9MT0NLX1Qgbm1fbXR4OyAg LyogcHJvdGVjdCB0aGUgYWxsb2NhdG9yICovCiAJdV9pbnQgbm1fdG90YWxzaXplOyAvKiBzaG9y dGhhbmQgKi8KIAogCXVfaW50IGZsYWdzOwogI2RlZmluZSBORVRNQVBfTUVNX0ZJTkFMSVpFRAkw eDEJLyogcHJlYWxsb2NhdGlvbiBkb25lICovCisjZGVmaW5lIE5FVE1BUF9NRU1fSElEREVOCTB4 OAkvKiBiZWVpbmcgcHJlcGFyZWQgKi8KIAlpbnQgbGFzdGVycjsJCS8qIGxhc3QgZXJyb3IgZm9y IGN1cnIgY29uZmlnICovCiAJaW50IGFjdGl2ZTsJCS8qIGFjdGl2ZSB1c2VycyAqLwogCWludCBy ZWZjb3VudDsKQEAgLTE0OSw4ICsxNjgsMTYgQEAKIAlzdHJ1Y3QgbmV0bWFwX21lbV9kICpwcmV2 LCAqbmV4dDsKIAogCXN0cnVjdCBuZXRtYXBfbWVtX29wcyAqb3BzOworCisJc3RydWN0IG5ldG1h cF9vYmpfcGFyYW1zIHBhcmFtc1tORVRNQVBfUE9PTFNfTlJdOworCisjZGVmaW5lIE5NX01FTV9O QU1FU1oJMTYKKwljaGFyIG5hbWVbTk1fTUVNX05BTUVTWl07CiB9OwogCisvKgorICogWFhYIG5l ZWQgdG8gZml4IHRoZSBjYXNlIG9mIHQwID09IHZvaWQKKyAqLwogI2RlZmluZSBOTURfREVGQ0Io dDAsIG5hbWUpIFwKIHQwIFwKIG5ldG1hcF9tZW1fIyNuYW1lKHN0cnVjdCBuZXRtYXBfbWVtX2Qg Km5tZCkgXApAQCAtMTg2LDcgKzIxMyw3IEBACiAJcmV0dXJuIG5hLT5ubV9tZW0tPm9wcy0+bm1k XyMjbmFtZShuYSwgYTEpOyBcCiB9CiAKLU5NRF9ERUZDQjEodm9pZCwgZ2V0X2x1dCwgc3RydWN0 IG5ldG1hcF9sdXQgKik7CitOTURfREVGQ0IxKGludCwgZ2V0X2x1dCwgc3RydWN0IG5ldG1hcF9s dXQgKik7CiBOTURfREVGQ0IzKGludCwgZ2V0X2luZm8sIHVfaW50ICosIHVfaW50ICosIHVpbnQx Nl90ICopOwogTk1EX0RFRkNCMSh2bV9wYWRkcl90LCBvZnN0b3BoeXMsIHZtX29vZmZzZXRfdCk7 CiBzdGF0aWMgaW50IG5ldG1hcF9tZW1fY29uZmlnKHN0cnVjdCBuZXRtYXBfbWVtX2QgKik7CkBA IC0yMDIsNiArMjI5LDEzIEBACiBzdGF0aWMgaW50IG5ldG1hcF9tZW1fbWFwKHN0cnVjdCBuZXRt YXBfb2JqX3Bvb2wgKiwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOwogc3RhdGljIGludCBuZXRt YXBfbWVtX3VubWFwKHN0cnVjdCBuZXRtYXBfb2JqX3Bvb2wgKiwgc3RydWN0IG5ldG1hcF9hZGFw dGVyICopOwogc3RhdGljIGludCBubV9tZW1fYXNzaWduX2dyb3VwKHN0cnVjdCBuZXRtYXBfbWVt X2QgKiwgc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyB2b2lkIG5tX21lbV9yZWxlYXNlX2lkKHN0 cnVjdCBuZXRtYXBfbWVtX2QgKik7CisKK25tX21lbWlkX3QKK25ldG1hcF9tZW1fZ2V0X2lkKHN0 cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK3sKKwlyZXR1cm4gbm1kLT5ubV9pZDsKK30KIAogI2Rl ZmluZSBOTUFfTE9DS19JTklUKG4pCU5NX01UWF9JTklUKChuKS0+bm1fbXR4KQogI2RlZmluZSBO TUFfTE9DS19ERVNUUk9ZKG4pCU5NX01UWF9ERVNUUk9ZKChuKS0+bm1fbXR4KQpAQCAtMjE1LDI5 ICsyNDksMzAgQEAKICNkZWZpbmUgTk1fREJHX1JFRkMobm1kLCBmdW5jLCBsaW5lKQogI2VuZGlm CiAKLSNpZmRlZiBOTV9ERUJVR19NRU1fUFVUR0VUCi12b2lkIF9fbmV0bWFwX21lbV9nZXQoc3Ry dWN0IG5ldG1hcF9tZW1fZCAqbm1kLCBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkKLSNlbHNl Ci12b2lkIG5ldG1hcF9tZW1fZ2V0KHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKLSNlbmRpZgor LyogY2lyY3VsYXIgbGlzdCBvZiBhbGwgZXhpc3RpbmcgYWxsb2NhdG9ycyAqLworc3RhdGljIHN0 cnVjdCBuZXRtYXBfbWVtX2QgKm5ldG1hcF9sYXN0X21lbV9kID0gJm5tX21lbTsKK05NX01UWF9U IG5tX21lbV9saXN0X2xvY2s7CisKK3N0cnVjdCBuZXRtYXBfbWVtX2QgKgorbmV0bWFwX21lbV9n ZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQogewotCU5NQV9MT0NLKG5tZCk7CisJTk1fTVRY X0xPQ0sobm1fbWVtX2xpc3RfbG9jayk7CiAJbm1kLT5yZWZjb3VudCsrOwogCU5NX0RCR19SRUZD KG5tZCwgZnVuYywgbGluZSk7Ci0JTk1BX1VOTE9DSyhubWQpOworCU5NX01UWF9VTkxPQ0sobm1f bWVtX2xpc3RfbG9jayk7CisJcmV0dXJuIG5tZDsKIH0KIAotI2lmZGVmIE5NX0RFQlVHX01FTV9Q VVRHRVQKLXZvaWQgX19uZXRtYXBfbWVtX3B1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIGNv bnN0IGNoYXIgKmZ1bmMsIGludCBsaW5lKQotI2Vsc2UKLXZvaWQgbmV0bWFwX21lbV9wdXQoc3Ry dWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotI2VuZGlmCit2b2lkCituZXRtYXBfbWVtX3B1dChzdHJ1 Y3QgbmV0bWFwX21lbV9kICpubWQpCiB7CiAJaW50IGxhc3Q7Ci0JTk1BX0xPQ0sobm1kKTsKKwlO TV9NVFhfTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKIAlsYXN0ID0gKC0tbm1kLT5yZWZjb3VudCA9 PSAwKTsKKwlpZiAobGFzdCkKKwkJbm1fbWVtX3JlbGVhc2VfaWQobm1kKTsKIAlOTV9EQkdfUkVG QyhubWQsIGZ1bmMsIGxpbmUpOwotCU5NQV9VTkxPQ0sobm1kKTsKKwlOTV9NVFhfVU5MT0NLKG5t X21lbV9saXN0X2xvY2spOwogCWlmIChsYXN0KQogCQluZXRtYXBfbWVtX2RlbGV0ZShubWQpOwog fQpAQCAtMjQ4LDcgKzI4Myw5IEBACiAJaWYgKG5tX21lbV9hc3NpZ25fZ3JvdXAobm1kLCBuYS0+ cGRldikgPCAwKSB7CiAJCXJldHVybiBFTk9NRU07CiAJfSBlbHNlIHsKLQkJbm1kLT5vcHMtPm5t ZF9maW5hbGl6ZShubWQpOworCQlOTUFfTE9DSyhubWQpOworCQlubWQtPmxhc3RlcnIgPSBubWQt Pm9wcy0+bm1kX2ZpbmFsaXplKG5tZCk7CisJCU5NQV9VTkxPQ0sobm1kKTsKIAl9CiAKIAlpZiAo IW5tZC0+bGFzdGVyciAmJiBuYS0+cGRldikKQEAgLTI2MiwyMSArMjk5LDcyIEBACiB7CiAJTk1B X0xPQ0sobm1kKTsKIAluZXRtYXBfbWVtX3VubWFwKCZubWQtPnBvb2xzW05FVE1BUF9CVUZfUE9P TF0sIG5hKTsKKwlpZiAobm1kLT5hY3RpdmUgPT0gMSkgeworCQl1X2ludCBpOworCisJCS8qCisJ CSAqIFJlc2V0IHRoZSBhbGxvY2F0b3Igd2hlbiBpdCBmYWxscyBvdXQgb2YgdXNlIHNvIHRoYXQg YW55CisJCSAqIHBvb2wgcmVzb3VyY2VzIGxlYWtlZCBieSB1bmNsZWFuIGFwcGxpY2F0aW9uIGV4 aXRzIGFyZQorCQkgKiByZWNsYWltZWQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQ X1BPT0xTX05SOyBpKyspIHsKKwkJCXN0cnVjdCBuZXRtYXBfb2JqX3Bvb2wgKnA7CisJCQl1X2lu dCBqOworCisJCQlwID0gJm5tZC0+cG9vbHNbaV07CisJCQlwLT5vYmpmcmVlID0gcC0+b2JqdG90 YWw7CisJCQkvKgorCQkJICogUmVwcm9kdWNlIHRoZSBuZXQgZWZmZWN0IG9mIHRoZSBNX1pFUk8g bWFsbG9jKCkKKwkJCSAqIGFuZCBtYXJraW5nIG9mIGZyZWUgZW50cmllcyBpbiB0aGUgYml0bWFw IHRoYXQKKwkJCSAqIG9jY3VyIGluIGZpbmFsaXplX29ial9hbGxvY2F0b3IoKQorCQkJICovCisJ CQltZW1zZXQocC0+Yml0bWFwLAorCQkJICAgICdcMCcsCisJCQkgICAgc2l6ZW9mKHVpbnQzMl90 KSAqICgocC0+b2JqdG90YWwgKyAzMSkgLyAzMikpOworCisJCQkvKgorCQkJICogU2V0IGFsbCB0 aGUgYml0cyBpbiB0aGUgYml0bWFwIHRoYXQgaGF2ZQorCQkJICogY29ycmVzcG9uZGluZyBidWZm ZXJzIHRvIDEgdG8gaW5kaWNhdGUgdGhleSBhcmUKKwkJCSAqIGZyZWUuCisJCQkgKi8KKwkJCWZv ciAoaiA9IDA7IGogPCBwLT5vYmp0b3RhbDsgaisrKSB7CisJCQkJaWYgKHAtPmx1dFtqXS52YWRk ciAhPSBOVUxMKSB7CisJCQkJCXAtPmJpdG1hcFsgKGo+PjUpIF0gfD0gICggMSA8PCAoaiAmIDMx KSApOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFBlciBuZXRtYXBfbWVtX2ZpbmFs aXplX2FsbCgpLAorCQkgKiBidWZmZXJzIDAgYW5kIDEgYXJlIHJlc2VydmVkCisJCSAqLworCQlu bWQtPnBvb2xzW05FVE1BUF9CVUZfUE9PTF0ub2JqZnJlZSAtPSAyOworCQlpZiAobm1kLT5wb29s c1tORVRNQVBfQlVGX1BPT0xdLmJpdG1hcCkgeworCQkJLyogWFhYIFRoaXMgY2hlY2sgaXMgYSB3 b3JrYXJvdW5kIHRoYXQgcHJldmVudHMgYQorCQkJICogTlVMTCBwb2ludGVyIGNyYXNoIHdoaWNo IGN1cnJlbnRseSBoYXBwZW5zIG9ubHkKKwkJCSAqIHdpdGggcHRuZXRtYXAgZ3Vlc3RzLgorCQkJ ICogUmVtb3ZlZCBzaGFyZWQtaW5mbyAtLT4gaXMgdGhlIGJ1ZyBzdGlsbCB0aGVyZT8gKi8KKwkJ CW5tZC0+cG9vbHNbTkVUTUFQX0JVRl9QT09MXS5iaXRtYXBbMF0gPSB+MzsKKwkJfQorCX0KKwlu bWQtPm9wcy0+bm1kX2RlcmVmKG5tZCk7CisKIAlOTUFfVU5MT0NLKG5tZCk7Ci0JcmV0dXJuIG5t ZC0+b3BzLT5ubWRfZGVyZWYobm1kKTsKIH0KIAogCiAvKiBhY2Nlc3NvciBmdW5jdGlvbnMgKi8K LXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBuZXRtYXBfbWVtMl9nZXRfbHV0KHN0cnVjdCBuZXRt YXBfbWVtX2QgKm5tZCwgc3RydWN0IG5ldG1hcF9sdXQgKmx1dCkKIHsKIAlsdXQtPmx1dCA9IG5t ZC0+cG9vbHNbTkVUTUFQX0JVRl9QT09MXS5sdXQ7CiAJbHV0LT5vYmp0b3RhbCA9IG5tZC0+cG9v bHNbTkVUTUFQX0JVRl9QT09MXS5vYmp0b3RhbDsKIAlsdXQtPm9ianNpemUgPSBubWQtPnBvb2xz W05FVE1BUF9CVUZfUE9PTF0uX29ianNpemU7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RydWN0IG5l dG1hcF9vYmpfcGFyYW1zIG5ldG1hcF9wYXJhbXNbTkVUTUFQX1BPT0xTX05SXSA9IHsKK3N0YXRp YyBzdHJ1Y3QgbmV0bWFwX29ial9wYXJhbXMgbmV0bWFwX3BhcmFtc1tORVRNQVBfUE9PTFNfTlJd ID0gewogCVtORVRNQVBfSUZfUE9PTF0gPSB7CiAJCS5zaXplID0gMTAyNCwKIAkJLm51bSAgPSAx MDAsCkBAIC0yOTEsMTAgKzM3OSwxMCBAQAogCX0sCiB9OwogCi1zdHJ1Y3QgbmV0bWFwX29ial9w YXJhbXMgbmV0bWFwX21pbl9wcml2X3BhcmFtc1tORVRNQVBfUE9PTFNfTlJdID0geworc3RhdGlj IHN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyBuZXRtYXBfbWluX3ByaXZfcGFyYW1zW05FVE1BUF9Q T09MU19OUl0gPSB7CiAJW05FVE1BUF9JRl9QT09MXSA9IHsKIAkJLnNpemUgPSAxMDI0LAotCQku bnVtICA9IDEsCisJCS5udW0gID0gMiwKIAl9LAogCVtORVRNQVBfUklOR19QT09MXSA9IHsKIAkJ LnNpemUgPSA1KlBBR0VfU0laRSwKQEAgLTMzOCwyMSArNDI2LDM3IEBACiAJCX0sCiAJfSwKIAor CS5wYXJhbXMgPSB7CisJCVtORVRNQVBfSUZfUE9PTF0gPSB7CisJCQkuc2l6ZSA9IDEwMjQsCisJ CQkubnVtICA9IDEwMCwKKwkJfSwKKwkJW05FVE1BUF9SSU5HX1BPT0xdID0geworCQkJLnNpemUg PSA5KlBBR0VfU0laRSwKKwkJCS5udW0gID0gMjAwLAorCQl9LAorCQlbTkVUTUFQX0JVRl9QT09M XSA9IHsKKwkJCS5zaXplID0gMjA0OCwKKwkJCS5udW0gID0gTkVUTUFQX0JVRl9NQVhfTlVNLAor CQl9LAorCX0sCisKIAkubm1faWQgPSAxLAogCS5ubV9ncnAgPSAtMSwKIAogCS5wcmV2ID0gJm5t X21lbSwKIAkubmV4dCA9ICZubV9tZW0sCiAKLQkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29w cwotfTsKKwkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29wcywKIAorCS5uYW1lID0gIjEiCit9 OwogCi1zdHJ1Y3QgbmV0bWFwX21lbV9kICpuZXRtYXBfbGFzdF9tZW1fZCA9ICZubV9tZW07CiAK IC8qIGJsdWVwcmludCBmb3IgdGhlIHByaXZhdGUgbWVtb3J5IGFsbG9jYXRvcnMgKi8KIGV4dGVy biBzdHJ1Y3QgbmV0bWFwX21lbV9vcHMgbmV0bWFwX21lbV9wcml2YXRlX29wczsgLyogZm9yd2Fy ZCAqLwotY29uc3Qgc3RydWN0IG5ldG1hcF9tZW1fZCBubV9ibHVlcHJpbnQgPSB7CisvKiBYWFgg Y2xhbmcgaXMgbm90IGhhcHB5IGFib3V0IHVzaW5nIG5hbWUgYXMgYSBwcmludCBmb3JtYXQgKi8K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bWFwX21lbV9kIG5tX2JsdWVwcmludCA9IHsKIAkucG9v bHMgPSB7CiAJCVtORVRNQVBfSUZfUE9PTF0gPSB7CiAJCQkubmFtZSAJPSAiJXNfaWYiLApAQCAt Mzc3LDkgKzQ4MSwxMSBAQAogCQl9LAogCX0sCiAKKwkubm1fZ3JwID0gLTEsCisKIAkuZmxhZ3Mg PSBORVRNQVBfTUVNX1BSSVZBVEUsCiAKLQkub3BzID0gJm5ldG1hcF9tZW1fcHJpdmF0ZV9vcHMK Kwkub3BzID0gJm5ldG1hcF9tZW1fZ2xvYmFsX29wcywKIH07CiAKIC8qIG1lbW9yeSBhbGxvY2F0 b3IgcmVsYXRlZCBzeXNjdGxzICovCkBAIC0zODgsNiArNDk0LDcgQEAKIAogCiAjZGVmaW5lIERF Q0xBUkVfU1lTQ1RMUyhpZCwgbmFtZSkgXAorCVNZU0JFR0lOKG1lbTJfICMjIG5hbWUpOyBcCiAJ U1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIG5hbWUjI19zaXplLCBcCiAJICAgIENU TEZMQUdfUlcsICZuZXRtYXBfcGFyYW1zW2lkXS5zaXplLCAwLCAiUmVxdWVzdGVkIHNpemUgb2Yg bmV0bWFwICIgU1RSSU5HSUZZKG5hbWUpICJzIik7IFwKIAlTWVNDVExfSU5UKF9kZXZfbmV0bWFw LCBPSURfQVVUTywgbmFtZSMjX2N1cnJfc2l6ZSwgXApAQCAtNDAxLDIyICs1MDgsMjIgQEAKIAkg ICAgIkRlZmF1bHQgc2l6ZSBvZiBwcml2YXRlIG5ldG1hcCAiIFNUUklOR0lGWShuYW1lKSAicyIp OyBcCiAJU1lTQ1RMX0lOVChfZGV2X25ldG1hcCwgT0lEX0FVVE8sIHByaXZfIyNuYW1lIyNfbnVt LCBcCiAJICAgIENUTEZMQUdfUlcsICZuZXRtYXBfbWluX3ByaXZfcGFyYW1zW2lkXS5udW0sIDAs IFwKLQkgICAgIkRlZmF1bHQgbnVtYmVyIG9mIHByaXZhdGUgbmV0bWFwICIgU1RSSU5HSUZZKG5h bWUpICJzIikKKwkgICAgIkRlZmF1bHQgbnVtYmVyIG9mIHByaXZhdGUgbmV0bWFwICIgU1RSSU5H SUZZKG5hbWUpICJzIik7CVwKKwlTWVNFTkQKIAogU1lTQ1RMX0RFQ0woX2Rldl9uZXRtYXApOwog REVDTEFSRV9TWVNDVExTKE5FVE1BUF9JRl9QT09MLCBpZik7CiBERUNMQVJFX1NZU0NUTFMoTkVU TUFQX1JJTkdfUE9PTCwgcmluZyk7CiBERUNMQVJFX1NZU0NUTFMoTkVUTUFQX0JVRl9QT09MLCBi dWYpOwogCisvKiBjYWxsIHdpdGggbm1fbWVtX2xpc3RfbG9jayBoZWxkICovCiBzdGF0aWMgaW50 Ci1ubV9tZW1fYXNzaWduX2lkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25tX21lbV9hc3Np Z25faWRfbG9ja2VkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKIHsKIAlubV9tZW1pZF90IGlk OwogCXN0cnVjdCBuZXRtYXBfbWVtX2QgKnNjYW4gPSBuZXRtYXBfbGFzdF9tZW1fZDsKIAlpbnQg ZXJyb3IgPSBFTk9NRU07CiAKLQlOTUFfTE9DSygmbm1fbWVtKTsKLQogCWRvIHsKIAkJLyogd2Ug cmVseSBvbiB1bnNpZ25lZCB3cmFwIGFyb3VuZCAqLwogCQlpZCA9IHNjYW4tPm5tX2lkICsgMTsK QEAgLTQzMCwyMCArNTM3LDMyIEBACiAJCQlzY2FuLT5wcmV2LT5uZXh0ID0gbm1kOwogCQkJc2Nh bi0+cHJldiA9IG5tZDsKIAkJCW5ldG1hcF9sYXN0X21lbV9kID0gbm1kOworCQkJbm1kLT5yZWZj b3VudCA9IDE7CiAJCQllcnJvciA9IDA7CiAJCQlicmVhazsKIAkJfQogCX0gd2hpbGUgKHNjYW4g IT0gbmV0bWFwX2xhc3RfbWVtX2QpOwogCi0JTk1BX1VOTE9DSygmbm1fbWVtKTsKIAlyZXR1cm4g ZXJyb3I7CiB9CiAKKy8qIGNhbGwgd2l0aCBubV9tZW1fbGlzdF9sb2NrICpub3QqIGhlbGQgKi8K K3N0YXRpYyBpbnQKK25tX21lbV9hc3NpZ25faWQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQor eworICAgICAgICBpbnQgcmV0OworCisJTk1fTVRYX0xPQ0sobm1fbWVtX2xpc3RfbG9jayk7Cisg ICAgICAgIHJldCA9IG5tX21lbV9hc3NpZ25faWRfbG9ja2VkKG5tZCk7CisJTk1fTVRYX1VOTE9D SyhubV9tZW1fbGlzdF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGNhbGwgd2l0aCBu bV9tZW1fbGlzdF9sb2NrIGhlbGQgKi8KIHN0YXRpYyB2b2lkCiBubV9tZW1fcmVsZWFzZV9pZChz dHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCiB7Ci0JTk1BX0xPQ0soJm5tX21lbSk7Ci0KIAlubWQt PnByZXYtPm5leHQgPSBubWQtPm5leHQ7CiAJbm1kLT5uZXh0LT5wcmV2ID0gbm1kLT5wcmV2Owog CkBAIC00NTEsOCArNTcwLDI1IEBACiAJCW5ldG1hcF9sYXN0X21lbV9kID0gbm1kLT5wcmV2Owog CiAJbm1kLT5wcmV2ID0gbm1kLT5uZXh0ID0gTlVMTDsKK30KKworc3RydWN0IG5ldG1hcF9tZW1f ZCAqCituZXRtYXBfbWVtX2ZpbmQobm1fbWVtaWRfdCBpZCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21l bV9kICpubWQ7CiAKLQlOTUFfVU5MT0NLKCZubV9tZW0pOworCU5NX01UWF9MT0NLKG5tX21lbV9s aXN0X2xvY2spOworCW5tZCA9IG5ldG1hcF9sYXN0X21lbV9kOworCWRvIHsKKwkJaWYgKCEobm1k LT5mbGFncyAmIE5FVE1BUF9NRU1fSElEREVOKSAmJiBubWQtPm5tX2lkID09IGlkKSB7CisJCQlu bWQtPnJlZmNvdW50Kys7CisJCQlOTV9NVFhfVU5MT0NLKG5tX21lbV9saXN0X2xvY2spOworCQkJ cmV0dXJuIG5tZDsKKwkJfQorCQlubWQgPSBubWQtPm5leHQ7CisJfSB3aGlsZSAobm1kICE9IG5l dG1hcF9sYXN0X21lbV9kKTsKKwlOTV9NVFhfVU5MT0NLKG5tX21lbV9saXN0X2xvY2spOworCXJl dHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW50CkBAIC00OTQsOCArNjMwLDEzIEBACiAJCWlmIChv ZmZzZXQgPj0gcFtpXS5tZW10b3RhbCkKIAkJCWNvbnRpbnVlOwogCQkvLyBub3cgbG9va3VwIHRo ZSBjbHVzdGVyJ3MgYWRkcmVzcworI2lmbmRlZiBfV0lOMzIKIAkJcGEgPSB2dG9waHlzKHBbaV0u bHV0W29mZnNldCAvIHBbaV0uX29ianNpemVdLnZhZGRyKSArCiAJCQlvZmZzZXQgJSBwW2ldLl9v YmpzaXplOworI2Vsc2UKKwkJcGEgPSB2dG9waHlzKHBbaV0ubHV0W29mZnNldCAvIHBbaV0uX29i anNpemVdLnZhZGRyKTsKKwkJcGEuUXVhZFBhcnQgKz0gb2Zmc2V0ICUgcFtpXS5fb2Jqc2l6ZTsK KyNlbmRpZgogCQlOTUFfVU5MT0NLKG5tZCk7CiAJCXJldHVybiBwYTsKIAl9CkBAIC01MDgsNyAr NjQ5LDExMCBAQAogCQkJKyBwW05FVE1BUF9SSU5HX1BPT0xdLm1lbXRvdGFsCiAJCQkrIHBbTkVU TUFQX0JVRl9QT09MXS5tZW10b3RhbCk7CiAJTk1BX1VOTE9DSyhubWQpOworI2lmbmRlZiBfV0lO MzIKIAlyZXR1cm4gMDsJLy8gWFhYIGJhZCBhZGRyZXNzCisjZWxzZQorCXZtX3BhZGRyX3QgcmVz OworCXJlcy5RdWFkUGFydCA9IDA7CisJcmV0dXJuIHJlczsKKyNlbmRpZgorfQorCisjaWZkZWYg X1dJTjMyCisKKy8qCisgKiB3aW4zMl9idWlsZF92aXJ0dWFsX21lbW9yeV9mb3JfdXNlcnNwYWNl CisgKgorICogVGhpcyBmdW5jdGlvbiBnZXQgYWxsIHRoZSBvYmplY3QgbWFraW5nIHBhcnQgb2Yg dGhlIHBvb2xzIGFuZCBtYXBzCisgKiBhIGNvbnRpZ3VvdXMgdmlydHVhbCBtZW1vcnkgc3BhY2Ug Zm9yIHRoZSB1c2Vyc3BhY2UKKyAqIEl0IHdvcmtzIHRoaXMgd2F5CisgKiAxIC0gYWxsb2NhdGUg YSBNZW1vcnkgRGVzY3JpcHRvciBMaXN0IHdpZGUgYXMgdGhlIHN1bQorICoJCW9mIHRoZSBtZW1v cnkgbmVlZGVkIGZvciB0aGUgcG9vbHMKKyAqIDIgLSBjeWNsZSBhbGwgdGhlIG9iamVjdHMgaW4g ZXZlcnkgcG9vbCBhbmQgZm9yIGV2ZXJ5IG9iamVjdCBkbworICoKKyAqCQkyYSAtIGN5Y2xlIGFs bCB0aGUgb2JqZWN0cyBpbiBldmVyeSBwb29sLCBnZXQgdGhlIGxpc3QKKyAqCQkJCW9mIHRoZSBw aHlzaWNhbCBhZGRyZXNzIGRlc2NyaXB0b3JzCisgKgkJMmIgLSBjYWxjdWxhdGUgdGhlIG9mZnNl dCBpbiB0aGUgYXJyYXkgb2YgcGFnZXMgZGVzY2lwdG9yIGluIHRoZQorICoJCQkJbWFpbiBNREwK KyAqCQkyYyAtIGNvcHkgdGhlIGRlc2NyaXB0b3JzIG9mIHRoZSBvYmplY3QgaW4gdGhlIG1haW4g TURMCisgKgorICogMyAtIHJldHVybiB0aGUgcmVzdWx0aW5nIE1ETCB0aGF0IG5lZWRzIHRvIGJl IG1hcHBlZCBpbiB1c2VybGFuZAorICoKKyAqIEluIHRoaXMgd2F5IHdlIHdpbGwgaGF2ZSBhbiBN REwgdGhhdCBkZXNjcmliZXMgYWxsIHRoZSBtZW1vcnkgZm9yIHRoZQorICogb2JqZWN0cyBpbiBh IHNpbmdsZSBvYmplY3QKKyovCisKK1BNREwKK3dpbjMyX2J1aWxkX3VzZXJfdm1fbWFwKHN0cnVj dCBuZXRtYXBfbWVtX2QqIG5tZCkKK3sKKwlpbnQgaSwgajsKKwl1X2ludCBtZW1zaXplLCBtZW1m bGFncywgb2ZzID0gMDsKKwlQTURMIG1haW5NZGwsIHRlbXBNZGw7CisKKwlpZiAobmV0bWFwX21l bV9nZXRfaW5mbyhubWQsICZtZW1zaXplLCAmbWVtZmxhZ3MsIE5VTEwpKSB7CisJCUQoIm1lbW9y eSBub3QgZmluYWxpc2VkIHlldCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltYWluTWRsID0g SW9BbGxvY2F0ZU1kbChOVUxMLCBtZW1zaXplLCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCWlmICht YWluTWRsID09IE5VTEwpIHsKKwkJRCgiZmFpbGVkIHRvIGFsbG9jYXRlIG1kbCIpOworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwlOTUFfTE9DSyhubWQpOworCWZvciAoaSA9IDA7IGkgPCBORVRNQVBf UE9PTFNfTlI7IGkrKykgeworCQlzdHJ1Y3QgbmV0bWFwX29ial9wb29sICpwID0gJm5tZC0+cG9v bHNbaV07CisJCWludCBjbHN6ID0gcC0+X2NsdXN0c2l6ZTsKKwkJaW50IGNsb2JqcyA9IHAtPl9j bHVzdGVudHJpZXM7IC8qIG9iamVjdHMgcGVyIGNsdXN0ZXIgKi8KKwkJaW50IG1kbF9sZW4gPSBz aXplb2YoUEZOX05VTUJFUikgKiBCWVRFU19UT19QQUdFUyhjbHN6KTsKKwkJUFBGTl9OVU1CRVIg cFNyYywgcERzdDsKKworCQkvKiBlYWNoIHBvb2wgaGFzIGEgZGlmZmVyZW50IGNsdXN0ZXIgc2l6 ZSBzbyB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgKi8KKwkJdGVtcE1kbCA9IElvQWxsb2NhdGVNZGwo cC0+bHV0WzBdLnZhZGRyLCBjbHN6LCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCQlpZiAodGVtcE1k bCA9PSBOVUxMKSB7CisJCQlOTUFfVU5MT0NLKG5tZCk7CisJCQlEKCJmYWlsIHRvIGFsbG9jYXRl IHRlbXBNZGwiKTsKKwkJCUlvRnJlZU1kbChtYWluTWRsKTsKKwkJCXJldHVybiBOVUxMOworCQl9 CisJCXBTcmMgPSBNbUdldE1kbFBmbkFycmF5KHRlbXBNZGwpOworCQkvKiBjcmVhdGUgb25lIGVu dHJ5IHBlciBjbHVzdGVyLCB0aGUgbHV0W10gaGFzIG9uZSBlbnRyeSBwZXIgb2JqZWN0ICovCisJ CWZvciAoaiA9IDA7IGogPCBwLT5udW1jbHVzdGVyczsgaisrLCBvZnMgKz0gY2xzeikgeworCQkJ cERzdCA9ICZNbUdldE1kbFBmbkFycmF5KG1haW5NZGwpW0JZVEVTX1RPX1BBR0VTKG9mcyldOwor CQkJTW1Jbml0aWFsaXplTWRsKHRlbXBNZGwsIHAtPmx1dFtqKmNsb2Jqc10udmFkZHIsIGNsc3op OworCQkJTW1CdWlsZE1kbEZvck5vblBhZ2VkUG9vbCh0ZW1wTWRsKTsgLyogY29tcHV0ZSBwaHlz aWNhbCBwYWdlIGFkZHJlc3NlcyAqLworCQkJUnRsQ29weU1lbW9yeShwRHN0LCBwU3JjLCBtZGxf bGVuKTsgLyogY29weSB0aGUgcGFnZSBkZXNjcmlwdG9ycyAqLworCQkJbWFpbk1kbC0+TWRsRmxh Z3MgPSB0ZW1wTWRsLT5NZGxGbGFnczsgLyogWFhYIHdoYXQgaXMgaW4gaGVyZSA/ICovCisJCX0K KwkJSW9GcmVlTWRsKHRlbXBNZGwpOworCX0KKwlOTUFfVU5MT0NLKG5tZCk7CisJcmV0dXJuIG1h aW5NZGw7Cit9CisKKyNlbmRpZiAvKiBfV0lOMzIgKi8KKworLyoKKyAqIGhlbHBlciBmdW5jdGlv biBmb3IgT1Mtc3BlY2lmaWMgbW1hcCByb3V0aW5lcyAoY3VycmVudGx5IG9ubHkgd2luZG93cyku CisgKiBHaXZlbiBhbiBubWQgYW5kIGEgcG9vbCBpbmRleCwgcmV0dXJucyB0aGUgY2x1c3RlciBz aXplIGFuZCBudW1iZXIgb2YgY2x1c3RlcnMuCisgKiBSZXR1cm5zIDAgaWYgbWVtb3J5IGlzIGZp bmFsaXNlZCBhbmQgdGhlIHBvb2wgaXMgdmFsaWQsIG90aGVyd2lzZSAxLgorICogSXQgc2hvdWxk IGJlIGNhbGxlZCB1bmRlciBOTUFfTE9DSyhubWQpIG90aGVyd2lzZSB0aGUgdW5kZXJseWluZyBp bmZvIGNhbiBjaGFuZ2UuCisgKi8KKworaW50CituZXRtYXBfbWVtMl9nZXRfcG9vbF9pbmZvKHN0 cnVjdCBuZXRtYXBfbWVtX2QqIG5tZCwgdV9pbnQgcG9vbCwgdV9pbnQgKmNsdXN0c2l6ZSwgdV9p bnQgKm51bWNsdXN0ZXJzKQoreworCWlmICghbm1kIHx8ICFjbHVzdHNpemUgfHwgIW51bWNsdXN0 ZXJzIHx8IHBvb2wgPj0gTkVUTUFQX1BPT0xTX05SKQorCQlyZXR1cm4gMTsgLyogaW52YWxpZCBh cmd1bWVudHMgKi8KKwkvLyBOTUFfTE9DS19BU1NFUlQobm1kKTsKKwlpZiAoIShubWQtPmZsYWdz ICYgTkVUTUFQX01FTV9GSU5BTElaRUQpKSB7CisJCSpjbHVzdHNpemUgPSAqbnVtY2x1c3RlcnMg PSAwOworCQlyZXR1cm4gMTsgLyogbm90IHJlYWR5IHlldCAqLworCX0KKwkqY2x1c3RzaXplID0g bm1kLT5wb29sc1twb29sXS5fY2x1c3RzaXplOworCSpudW1jbHVzdGVycyA9IG5tZC0+cG9vbHNb cG9vbF0ubnVtY2x1c3RlcnM7CisJcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KIH0KIAogc3RhdGlj IGludApAQCAtNTc4LDEyICs4MjIsNiBAQAogICAgICgobiktPnBvb2xzW05FVE1BUF9JRl9QT09M XS5tZW10b3RhbCArIAkJCVwKIAluZXRtYXBfb2JqX29mZnNldCgmKG4pLT5wb29sc1tORVRNQVBf UklOR19QT09MXSwgKHYpKSkKIAotI2RlZmluZSBuZXRtYXBfYnVmX29mZnNldChuLCB2KQkJCQkJ XAotICAgICgobiktPnBvb2xzW05FVE1BUF9JRl9QT09MXS5tZW10b3RhbCArCQkJXAotCShuKS0+ cG9vbHNbTkVUTUFQX1JJTkdfUE9PTF0ubWVtdG90YWwgKwkJXAotCW5ldG1hcF9vYmpfb2Zmc2V0 KCYobiktPnBvb2xzW05FVE1BUF9CVUZfUE9PTF0sICh2KSkpCi0KLQogc3RhdGljIHNzaXplX3QK IG5ldG1hcF9tZW0yX2lmX29mZnNldChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIGNvbnN0IHZv aWQgKmFkZHIpCiB7CkBAIC02MDIsNyArODQwLDcgQEAKIG5ldG1hcF9vYmpfbWFsbG9jKHN0cnVj dCBuZXRtYXBfb2JqX3Bvb2wgKnAsIHVfaW50IGxlbiwgdWludDMyX3QgKnN0YXJ0LCB1aW50MzJf dCAqaW5kZXgpCiB7CiAJdWludDMyX3QgaSA9IDA7CQkJLyogaW5kZXggaW4gdGhlIGJpdG1hcCAq LwotCXVpbnQzMl90IG1hc2ssIGo7CQkvKiBzbG90IGNvdW50ZXIgKi8KKwl1aW50MzJfdCBtYXNr LCBqID0gMDsJCS8qIHNsb3QgY291bnRlciAqLwogCXZvaWQgKnZhZGRyID0gTlVMTDsKIAogCWlm IChsZW4gPiBwLT5fb2Jqc2l6ZSkgewpAQCAtNjM2LDcgKzg3NCw3IEBACiAJCWlmIChpbmRleCkK IAkJCSppbmRleCA9IGkgKiAzMiArIGo7CiAJfQotCU5EKCIlcyBhbGxvY2F0b3I6IGFsbG9jYXRl ZCBvYmplY3QgQCBbJWRdWyVkXTogdmFkZHIgJXAiLCBpLCBqLCB2YWRkcik7CisJTkQoIiVzIGFs bG9jYXRvcjogYWxsb2NhdGVkIG9iamVjdCBAIFslZF1bJWRdOiB2YWRkciAlcCIscC0+bmFtZSwg aSwgaiwgdmFkZHIpOwogCiAJaWYgKHN0YXJ0KQogCQkqc3RhcnQgPSBpOwpAQCAtNzMzLDcgKzk3 MSw3IEBACiAJCQkqaGVhZCA9IGN1cjsgLyogcmVzdG9yZSAqLwogCQkJYnJlYWs7CiAJCX0KLQkJ UkQoNSwgImFsbG9jYXRlIGJ1ZmZlciAlZCAtPiAlZCIsICpoZWFkLCBjdXIpOworCQlORCg1LCAi YWxsb2NhdGUgYnVmZmVyICVkIC0+ICVkIiwgKmhlYWQsIGN1cik7CiAJCSpwID0gY3VyOyAvKiBs aW5rIHRvIHByZXZpb3VzIGhlYWQgKi8KIAl9CiAKQEAgLTc1MCw3ICs5ODgsNyBAQAogCXN0cnVj dCBuZXRtYXBfb2JqX3Bvb2wgKnAgPSAmbm1kLT5wb29sc1tORVRNQVBfQlVGX1BPT0xdOwogCXVp bnQzMl90IGksIGN1ciwgKmJ1ZjsKIAotCUQoImZyZWVpbmcgdGhlIGV4dHJhIGxpc3QiKTsKKwlO RCgiZnJlZWluZyB0aGUgZXh0cmEgbGlzdCIpOwogCWZvciAoaSA9IDA7IGhlYWQgPj0yICYmIGhl YWQgPCBwLT5vYmp0b3RhbDsgaSsrKSB7CiAJCWN1ciA9IGhlYWQ7CiAJCWJ1ZiA9IGx1dFtoZWFk XS52YWRkcjsKQEAgLTc2MSw3ICs5OTksOCBAQAogCX0KIAlpZiAoaGVhZCAhPSAwKQogCQlEKCJi cmVha2luZyB3aXRoIGhlYWQgJWQiLCBoZWFkKTsKLQlEKCJmcmVlZCAlZCBidWZmZXJzIiwgaSk7 CisJaWYgKG5ldG1hcF92ZXJib3NlKQorCQlEKCJmcmVlZCAlZCBidWZmZXJzIiwgaSk7CiB9CiAK IApAQCAtODQyLDExICsxMDgxLDEwIEBACiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWlm IChwLT5iaXRtYXApCi0JCWZyZWUocC0+Yml0bWFwLCBNX05FVE1BUCk7CisJCW5tX29zX2ZyZWUo cC0+Yml0bWFwKTsKIAlwLT5iaXRtYXAgPSBOVUxMOwogCWlmIChwLT5sdXQpIHsKIAkJdV9pbnQg aTsKLQkJc2l6ZV90IHN6ID0gcC0+X2NsdXN0c2l6ZTsKIAogCQkvKgogCQkgKiBGcmVlIGVhY2gg Y2x1c3RlciBhbGxvY2F0ZWQgaW4KQEAgLTg1NiwxMyArMTA5NCwxMyBAQAogCQkgKi8KIAkJZm9y IChpID0gMDsgaSA8IHAtPm9ianRvdGFsOyBpICs9IHAtPl9jbHVzdGVudHJpZXMpIHsKIAkJCWlm IChwLT5sdXRbaV0udmFkZHIpCi0JCQkJY29udGlnZnJlZShwLT5sdXRbaV0udmFkZHIsIHN6LCBN X05FVE1BUCk7CisJCQkJY29udGlnZnJlZShwLT5sdXRbaV0udmFkZHIsIHAtPl9jbHVzdHNpemUs IE1fTkVUTUFQKTsKIAkJfQogCQliemVybyhwLT5sdXQsIHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5 KSAqIHAtPm9ianRvdGFsKTsKICNpZmRlZiBsaW51eAogCQl2ZnJlZShwLT5sdXQpOwogI2Vsc2UK LQkJZnJlZShwLT5sdXQsIE1fTkVUTUFQKTsKKwkJbm1fb3NfZnJlZShwLT5sdXQpOwogI2VuZGlm CiAJfQogCXAtPmx1dCA9IE5VTEw7CkBAIC05NzMsNiArMTIxMSwxOCBAQAogCXJldHVybiAwOwog fQogCitzdGF0aWMgc3RydWN0IGx1dF9lbnRyeSAqCitubV9hbGxvY19sdXQodV9pbnQgbm9iaikK K3sKKwlzaXplX3QgbiA9IHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5KSAqIG5vYmo7CisJc3RydWN0 IGx1dF9lbnRyeSAqbHV0OworI2lmZGVmIGxpbnV4CisJbHV0ID0gdm1hbGxvYyhuKTsKKyNlbHNl CisJbHV0ID0gbm1fb3NfbWFsbG9jKG4pOworI2VuZGlmCisJcmV0dXJuIGx1dDsKK30KIAogLyog Y2FsbCB3aXRoIE5NQV9MT0NLIGhlbGQgKi8KIHN0YXRpYyBpbnQKQEAgLTk4NSwyMCArMTIzNSwx NSBAQAogCXAtPm51bWNsdXN0ZXJzID0gcC0+X251bWNsdXN0ZXJzOwogCXAtPm9ianRvdGFsID0g cC0+X29ianRvdGFsOwogCi0JbiA9IHNpemVvZihzdHJ1Y3QgbHV0X2VudHJ5KSAqIHAtPm9ianRv dGFsOwotI2lmZGVmIGxpbnV4Ci0JcC0+bHV0ID0gdm1hbGxvYyhuKTsKLSNlbHNlCi0JcC0+bHV0 ID0gbWFsbG9jKG4sIE1fTkVUTUFQLCBNX05PV0FJVCB8IE1fWkVSTyk7Ci0jZW5kaWYKKwlwLT5s dXQgPSBubV9hbGxvY19sdXQocC0+b2JqdG90YWwpOwogCWlmIChwLT5sdXQgPT0gTlVMTCkgewot CQlEKCJVbmFibGUgdG8gY3JlYXRlIGxvb2t1cCB0YWJsZSAoJWQgYnl0ZXMpIGZvciAnJXMnIiwg KGludCluLCBwLT5uYW1lKTsKKwkJRCgiVW5hYmxlIHRvIGNyZWF0ZSBsb29rdXAgdGFibGUgZm9y ICclcyciLCBwLT5uYW1lKTsKIAkJZ290byBjbGVhbjsKIAl9CiAKIAkvKiBBbGxvY2F0ZSB0aGUg Yml0bWFwICovCiAJbiA9IChwLT5vYmp0b3RhbCArIDMxKSAvIDMyOwotCXAtPmJpdG1hcCA9IG1h bGxvYyhzaXplb2YodWludDMyX3QpICogbiwgTV9ORVRNQVAsIE1fTk9XQUlUIHwgTV9aRVJPKTsK KwlwLT5iaXRtYXAgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSAqIG4pOwogCWlmIChw LT5iaXRtYXAgPT0gTlVMTCkgewogCQlEKCJVbmFibGUgdG8gY3JlYXRlIGJpdG1hcCAoJWQgZW50 cmllcykgZm9yIGFsbG9jYXRvciAnJXMnIiwgKGludCluLAogCQkgICAgcC0+bmFtZSk7CkBAIC0x MDE1LDYgKzEyNjAsMTMgQEAKIAkJaW50IGxpbSA9IGkgKyBwLT5fY2x1c3RlbnRyaWVzOwogCQlj aGFyICpjbHVzdDsKIAorCQkvKgorCQkgKiBYWFggTm90ZSwgd2Ugb25seSBuZWVkIGNvbnRpZ21h bGxvYygpIGZvciBidWZmZXJzIGF0dGFjaGVkCisJCSAqIHRvIG5hdGl2ZSBpbnRlcmZhY2VzLiBJ biBhbGwgb3RoZXIgY2FzZXMgKG5pZnAsIG5ldG1hcCByaW5ncworCQkgKiBhbmQgZXZlbiBidWZm ZXJzIGZvciBWQUxFIHBvcnRzIG9yIGVtdWxhdGVkIGludGVyZmFjZXMpIHdlCisJCSAqIGNhbiBs aXZlIHdpdGggc3RhbmRhcmQgbWFsbG9jLCBiZWNhdXNlIHRoZSBoYXJkd2FyZSB3aWxsIG5vdAor CQkgKiBhY2Nlc3MgdGhlIHBhZ2VzIGRpcmVjdGx5LgorCQkgKi8KIAkJY2x1c3QgPSBjb250aWdt YWxsb2MobiwgTV9ORVRNQVAsIE1fTk9XQUlUIHwgTV9aRVJPLAogCQkgICAgKHNpemVfdCkwLCAt MVVMLCBQQUdFX1NJWkUsIDApOwogCQlpZiAoY2x1c3QgPT0gTlVMTCkgewpAQCAtMTA3NSwxNiAr MTMyNywxOCBAQAogCiAvKiBjYWxsIHdpdGggbG9jayBoZWxkICovCiBzdGF0aWMgaW50Ci1uZXRt YXBfbWVtb3J5X2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1h cF9tZW1fcGFyYW1zX2NoYW5nZWQoc3RydWN0IG5ldG1hcF9vYmpfcGFyYW1zKiBwKQogewotCWlu dCBpOworCWludCBpLCBydiA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05S OyBpKyspIHsKLQkJaWYgKG5tZC0+cG9vbHNbaV0ucl9vYmpzaXplICE9IG5ldG1hcF9wYXJhbXNb aV0uc2l6ZSB8fAotCQkgICAgbm1kLT5wb29sc1tpXS5yX29ianRvdGFsICE9IG5ldG1hcF9wYXJh bXNbaV0ubnVtKQotCQkgICAgcmV0dXJuIDE7CisJCWlmIChwW2ldLmxhc3Rfc2l6ZSAhPSBwW2ld LnNpemUgfHwgcFtpXS5sYXN0X251bSAhPSBwW2ldLm51bSkgeworCQkJcFtpXS5sYXN0X3NpemUg PSBwW2ldLnNpemU7CisJCQlwW2ldLmxhc3RfbnVtID0gcFtpXS5udW07CisJCQlydiA9IDE7CisJ CX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTEw NSwxMyArMTM1OSwxOCBAQAogewogCWludCBpLCBsaW0gPSBwLT5fb2JqdG90YWw7CiAKLQlpZiAo bmEtPnBkZXYgPT0gTlVMTCkKKwlpZiAobmEgPT0gTlVMTCB8fCBuYS0+cGRldiA9PSBOVUxMKQog CQlyZXR1cm4gMDsKIAotI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf XykKIAkodm9pZClpOwogCSh2b2lkKWxpbTsKIAlEKCJ1bnN1cHBvcnRlZCBvbiBGcmVlQlNEIik7 CisKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCSh2b2lkKWk7CisJKHZvaWQpbGltOworCUQoInVu c3VwcG9ydGVkIG9uIFdpbmRvd3MiKTsJLy9YWFhfYWxlLCByZWFsbHk/CiAjZWxzZSAvKiBsaW51 eCAqLwogCWZvciAoaSA9IDI7IGkgPCBsaW07IGkrKykgewogCQluZXRtYXBfdW5sb2FkX21hcChu YSwgKGJ1c19kbWFfdGFnX3QpIG5hLT5wZGV2LCAmcC0+bHV0W2ldLnBhZGRyKTsKQEAgLTExMjQs OCArMTM4MywxMCBAQAogc3RhdGljIGludAogbmV0bWFwX21lbV9tYXAoc3RydWN0IG5ldG1hcF9v YmpfcG9vbCAqcCwgc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKIHsKLSNpZmRlZiBfX0ZyZWVC U0RfXworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAJRCgidW5zdXBwb3J0ZWQgb24gRnJlZUJT RCIpOworI2VsaWYgZGVmaW5lZChfV0lOMzIpCisJRCgidW5zdXBwb3J0ZWQgb24gV2luZG93cyIp OwkvL1hYWF9hbGUsIHJlYWxseT8KICNlbHNlIC8qIGxpbnV4ICovCiAJaW50IGksIGxpbSA9IHAt Pl9vYmp0b3RhbDsKIApAQCAtMTE3Niw2OSArMTQzNywxNiBAQAogCXJldHVybiBubWQtPmxhc3Rl cnI7CiB9CiAKLQotCi1zdGF0aWMgdm9pZAotbmV0bWFwX21lbV9wcml2YXRlX2RlbGV0ZShzdHJ1 Y3QgbmV0bWFwX21lbV9kICpubWQpCi17Ci0JaWYgKG5tZCA9PSBOVUxMKQotCQlyZXR1cm47Ci0J aWYgKG5ldG1hcF92ZXJib3NlKQotCQlEKCJkZWxldGluZyAlcCIsIG5tZCk7Ci0JaWYgKG5tZC0+ YWN0aXZlID4gMCkKLQkJRCgiYnVnOiBkZWxldGluZyBtZW0gYWxsb2NhdG9yIHdpdGggYWN0aXZl PSVkISIsIG5tZC0+YWN0aXZlKTsKLQlubV9tZW1fcmVsZWFzZV9pZChubWQpOwotCWlmIChuZXRt YXBfdmVyYm9zZSkKLQkJRCgiZG9uZSBkZWxldGluZyAlcCIsIG5tZCk7Ci0JTk1BX0xPQ0tfREVT VFJPWShubWQpOwotCWZyZWUobm1kLCBNX0RFVkJVRik7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldG1h cF9tZW1fcHJpdmF0ZV9jb25maWcoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotewotCS8qIG5v dGhpbmcgdG8gZG8sIHdlIGFyZSBjb25maWd1cmVkIG9uIGNyZWF0aW9uCi0gCSAqIGFuZCBjb25m aWd1cmF0aW9uIG5ldmVyIGNoYW5nZXMgdGhlcmVhZnRlcgotIAkgKi8KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludAotbmV0bWFwX21lbV9wcml2YXRlX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBf bWVtX2QgKm5tZCkKLXsKLQlpbnQgZXJyOwotCU5NQV9MT0NLKG5tZCk7Ci0Jbm1kLT5hY3RpdmUr KzsKLQllcnIgPSBuZXRtYXBfbWVtX2ZpbmFsaXplX2FsbChubWQpOwotCU5NQV9VTkxPQ0sobm1k KTsKLQlyZXR1cm4gZXJyOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1uZXRtYXBfbWVtX3ByaXZhdGVf ZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQotewotCU5NQV9MT0NLKG5tZCk7Ci0JaWYg KC0tbm1kLT5hY3RpdmUgPD0gMCkKLQkJbmV0bWFwX21lbV9yZXNldF9hbGwobm1kKTsKLQlOTUFf VU5MT0NLKG5tZCk7Ci19Ci0KLQogLyoKICAqIGFsbG9jYXRvciBmb3IgcHJpdmF0ZSBtZW1vcnkK ICAqLwotc3RydWN0IG5ldG1hcF9tZW1fZCAqCi1uZXRtYXBfbWVtX3ByaXZhdGVfbmV3KGNvbnN0 IGNoYXIgKm5hbWUsIHVfaW50IHR4ciwgdV9pbnQgdHhkLAotCXVfaW50IHJ4ciwgdV9pbnQgcnhk LCB1X2ludCBleHRyYV9idWZzLCB1X2ludCBucGlwZXMsIGludCAqcGVycikKK3N0YXRpYyBzdHJ1 Y3QgbmV0bWFwX21lbV9kICoKK19uZXRtYXBfbWVtX3ByaXZhdGVfbmV3KHN0cnVjdCBuZXRtYXBf b2JqX3BhcmFtcyAqcCwgaW50ICpwZXJyKQogewogCXN0cnVjdCBuZXRtYXBfbWVtX2QgKmQgPSBO VUxMOwotCXN0cnVjdCBuZXRtYXBfb2JqX3BhcmFtcyBwW05FVE1BUF9QT09MU19OUl07Ci0JaW50 IGksIGVycjsKLQl1X2ludCB2LCBtYXhkOworCWludCBpLCBlcnIgPSAwOwogCi0JZCA9IG1hbGxv YyhzaXplb2Yoc3RydWN0IG5ldG1hcF9tZW1fZCksCi0JCQlNX0RFVkJVRiwgTV9OT1dBSVQgfCBN X1pFUk8pOworCWQgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRtYXBfbWVtX2QpKTsK IAlpZiAoZCA9PSBOVUxMKSB7CiAJCWVyciA9IEVOT01FTTsKIAkJZ290byBlcnJvcjsKQEAgLTEy NDksNyArMTQ1Nyw0MSBAQAogCWVyciA9IG5tX21lbV9hc3NpZ25faWQoZCk7CiAJaWYgKGVycikK IAkJZ290byBlcnJvcjsKKwlzbnByaW50ZihkLT5uYW1lLCBOTV9NRU1fTkFNRVNaLCAiJWQiLCBk LT5ubV9pZCk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05SOyBpKyspIHsKKwkJ c25wcmludGYoZC0+cG9vbHNbaV0ubmFtZSwgTkVUTUFQX1BPT0xfTUFYX05BTVNaLAorCQkJCW5t X2JsdWVwcmludC5wb29sc1tpXS5uYW1lLAorCQkJCWQtPm5hbWUpOworCQlkLT5wYXJhbXNbaV0u bnVtID0gcFtpXS5udW07CisJCWQtPnBhcmFtc1tpXS5zaXplID0gcFtpXS5zaXplOworCX0KKwor CU5NQV9MT0NLX0lOSVQoZCk7CisKKwllcnIgPSBuZXRtYXBfbWVtX2NvbmZpZyhkKTsKKwlpZiAo ZXJyKQorCQlnb3RvIGVycm9yOworCisJZC0+ZmxhZ3MgJj0gfk5FVE1BUF9NRU1fRklOQUxJWkVE OworCisJcmV0dXJuIGQ7CisKK2Vycm9yOgorCW5ldG1hcF9tZW1fZGVsZXRlKGQpOworCWlmIChw ZXJyKQorCQkqcGVyciA9IGVycjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG5ldG1hcF9t ZW1fZCAqCituZXRtYXBfbWVtX3ByaXZhdGVfbmV3KHVfaW50IHR4ciwgdV9pbnQgdHhkLCB1X2lu dCByeHIsIHVfaW50IHJ4ZCwKKwkJdV9pbnQgZXh0cmFfYnVmcywgdV9pbnQgbnBpcGVzLCBpbnQg KnBlcnIpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fZCAqZCA9IE5VTEw7CisJc3RydWN0IG5ldG1h cF9vYmpfcGFyYW1zIHBbTkVUTUFQX1BPT0xTX05SXTsKKwlpbnQgaSwgZXJyID0gMDsKKwl1X2lu dCB2LCBtYXhkOwogCS8qIGFjY291bnQgZm9yIHRoZSBmYWtlIGhvc3QgcmluZ3MgKi8KIAl0eHIr KzsKIAlyeHIrKzsKQEAgLTEyOTUsMjMgKzE1MzcsMTMgQEAKIAkJCXBbTkVUTUFQX0JVRl9QT09M XS5udW0sCiAJCQlwW05FVE1BUF9CVUZfUE9PTF0uc2l6ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwg TkVUTUFQX1BPT0xTX05SOyBpKyspIHsKLQkJc25wcmludGYoZC0+cG9vbHNbaV0ubmFtZSwgTkVU TUFQX1BPT0xfTUFYX05BTVNaLAotCQkJCW5tX2JsdWVwcmludC5wb29sc1tpXS5uYW1lLAotCQkJ CW5hbWUpOwotCQllcnIgPSBuZXRtYXBfY29uZmlnX29ial9hbGxvY2F0b3IoJmQtPnBvb2xzW2ld LAotCQkJCXBbaV0ubnVtLCBwW2ldLnNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcjsK LQl9Ci0KLQlkLT5mbGFncyAmPSB+TkVUTUFQX01FTV9GSU5BTElaRUQ7Ci0KLQlOTUFfTE9DS19J TklUKGQpOworCWQgPSBfbmV0bWFwX21lbV9wcml2YXRlX25ldyhwLCBwZXJyKTsKKwlpZiAoZCA9 PSBOVUxMKQorCQlnb3RvIGVycm9yOwogCiAJcmV0dXJuIGQ7CiBlcnJvcjoKLQluZXRtYXBfbWVt X3ByaXZhdGVfZGVsZXRlKGQpOworCW5ldG1hcF9tZW1fZGVsZXRlKGQpOwogCWlmIChwZXJyKQog CQkqcGVyciA9IGVycjsKIAlyZXR1cm4gTlVMTDsKQEAgLTEzMjAsNyArMTU1Miw3IEBACiAKIC8q IGNhbGwgd2l0aCBsb2NrIGhlbGQgKi8KIHN0YXRpYyBpbnQKLW5ldG1hcF9tZW1fZ2xvYmFsX2Nv bmZpZyhzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCituZXRtYXBfbWVtMl9jb25maWcoc3RydWN0 IG5ldG1hcF9tZW1fZCAqbm1kKQogewogCWludCBpOwogCkBAIC0xMzI4LDcgKzE1NjAsNyBAQAog CQkvKiBhbHJlYWR5IGluIHVzZSwgd2UgY2Fubm90IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiAq LwogCQlnb3RvIG91dDsKIAotCWlmICghbmV0bWFwX21lbW9yeV9jb25maWdfY2hhbmdlZChubWQp KQorCWlmICghbmV0bWFwX21lbV9wYXJhbXNfY2hhbmdlZChubWQtPnBhcmFtcykpCiAJCWdvdG8g b3V0OwogCiAJTkQoInJlY29uZmlndXJpbmciKTsKQEAgLTEzNDMsNyArMTU3NSw3IEBACiAKIAlm b3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05SOyBpKyspIHsKIAkJbm1kLT5sYXN0ZXJyID0g bmV0bWFwX2NvbmZpZ19vYmpfYWxsb2NhdG9yKCZubWQtPnBvb2xzW2ldLAotCQkJCW5ldG1hcF9w YXJhbXNbaV0ubnVtLCBuZXRtYXBfcGFyYW1zW2ldLnNpemUpOworCQkJCW5tZC0+cGFyYW1zW2ld Lm51bSwgbm1kLT5wYXJhbXNbaV0uc2l6ZSk7CiAJCWlmIChubWQtPmxhc3RlcnIpCiAJCQlnb3Rv IG91dDsKIAl9CkBAIC0xMzU0LDEzICsxNTg2LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLW5ldG1h cF9tZW1fZ2xvYmFsX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1hcF9t ZW0yX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCkKIHsKIAlpbnQgZXJyOwotCQkK KwogCS8qIHVwZGF0ZSBjb25maWd1cmF0aW9uIGlmIGNoYW5nZWQgKi8KLQlpZiAobmV0bWFwX21l bV9nbG9iYWxfY29uZmlnKG5tZCkpCi0JCWdvdG8gb3V0OworCWlmIChuZXRtYXBfbWVtMl9jb25m aWcobm1kKSkKKwkJZ290byBvdXQxOwogCiAJbm1kLT5hY3RpdmUrKzsKIApAQCAtMTM3OCw2ICsx NjEwLDcgQEAKIG91dDoKIAlpZiAobm1kLT5sYXN0ZXJyKQogCQlubWQtPmFjdGl2ZS0tOworb3V0 MToKIAllcnIgPSBubWQtPmxhc3RlcnI7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTM4NSwyMCArMTYx OCwyMyBAQAogfQogCiBzdGF0aWMgdm9pZAotbmV0bWFwX21lbV9nbG9iYWxfZGVsZXRlKHN0cnVj dCBuZXRtYXBfbWVtX2QgKm5tZCkKK25ldG1hcF9tZW0yX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX21l bV9kICpubWQpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkVUTUFQX1BPT0xTX05S OyBpKyspIHsKLQkgICAgbmV0bWFwX2Rlc3Ryb3lfb2JqX2FsbG9jYXRvcigmbm1fbWVtLnBvb2xz W2ldKTsKKwkgICAgbmV0bWFwX2Rlc3Ryb3lfb2JqX2FsbG9jYXRvcigmbm1kLT5wb29sc1tpXSk7 CiAJfQogCi0JTk1BX0xPQ0tfREVTVFJPWSgmbm1fbWVtKTsKKwlOTUFfTE9DS19ERVNUUk9ZKG5t ZCk7CisJaWYgKG5tZCAhPSAmbm1fbWVtKQorCQlubV9vc19mcmVlKG5tZCk7CiB9CiAKIGludAog bmV0bWFwX21lbV9pbml0KHZvaWQpCiB7CisJTk1fTVRYX0lOSVQobm1fbWVtX2xpc3RfbG9jayk7 CiAJTk1BX0xPQ0tfSU5JVCgmbm1fbWVtKTsKIAluZXRtYXBfbWVtX2dldCgmbm1fbWVtKTsKIAly ZXR1cm4gKDApOwpAQCAtMTQxNywxMyArMTY1MywxNyBAQAogCiAJZm9yX3J4X3R4KHQpIHsKIAkJ dV9pbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IG5ldG1hcF9yZWFsX3JpbmdzKG5hLCB0KTsgaSsr KSB7CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsK IAkJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gJk5NUihuYSwgdClbaV07CiAJCQlzdHJ1 Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBrcmluZy0+cmluZzsKIAotCQkJaWYgKHJpbmcgPT0gTlVM TCkKKwkJCWlmIChyaW5nID09IE5VTEwgfHwga3JpbmctPnVzZXJzID4gMCB8fCAoa3JpbmctPm5y X2tmbGFncyAmIE5LUl9ORUVEUklORykpIHsKKwkJCQlORCgic2tpcHBpbmcgcmluZyAlcyAocmlu ZyAlcCwgdXNlcnMgJWQpIiwKKwkJCQkJCWtyaW5nLT5uYW1lLCByaW5nLCBrcmluZy0+dXNlcnMp OwogCQkJCWNvbnRpbnVlOwotCQkJbmV0bWFwX2ZyZWVfYnVmcyhuYS0+bm1fbWVtLCByaW5nLT5z bG90LCBrcmluZy0+bmtyX251bV9zbG90cyk7CisJCQl9CisJCQlpZiAoaSAhPSBubWFfZ2V0X25y aW5ncyhuYSwgdCkgfHwgbmEtPm5hX2ZsYWdzICYgTkFGX0hPU1RfUklOR1MpCisJCQkJbmV0bWFw X2ZyZWVfYnVmcyhuYS0+bm1fbWVtLCByaW5nLT5zbG90LCBrcmluZy0+bmtyX251bV9zbG90cyk7 CiAJCQluZXRtYXBfcmluZ19mcmVlKG5hLT5ubV9tZW0sIHJpbmcpOwogCQkJa3JpbmctPnJpbmcg PSBOVUxMOwogCQl9CkBAIC0xNDUyLDkgKzE2OTIsMTAgQEAKIAkJCXN0cnVjdCBuZXRtYXBfcmlu ZyAqcmluZyA9IGtyaW5nLT5yaW5nOwogCQkJdV9pbnQgbGVuLCBuZGVzYzsKIAotCQkJaWYgKHJp bmcpIHsKLQkJCQlORCgiJXMgYWxyZWFkeSBjcmVhdGVkIiwga3JpbmctPm5hbWUpOwotCQkJCWNv bnRpbnVlOyAvKiBhbHJlYWR5IGNyZWF0ZWQgYnkgc29tZWJvZHkgZWxzZSAqLworCQkJaWYgKHJp bmcgfHwgKCFrcmluZy0+dXNlcnMgJiYgIShrcmluZy0+bnJfa2ZsYWdzICYgTktSX05FRURSSU5H KSkpIHsKKwkJCQkvKiB1bmVlZGVkLCBvciBhbHJlYWR5IGNyZWF0ZWQgYnkgc29tZWJvZHkgZWxz ZSAqLworCQkJCU5EKCJza2lwcGluZyByaW5nICVzIiwga3JpbmctPm5hbWUpOworCQkJCWNvbnRp bnVlOwogCQkJfQogCQkJbmRlc2MgPSBrcmluZy0+bmtyX251bV9zbG90czsKIAkJCWxlbiA9IHNp emVvZihzdHJ1Y3QgbmV0bWFwX3JpbmcpICsKQEAgLTE1NjksMTAgKzE4MTAsMjIgQEAKIAkgKi8K IAliYXNlID0gbmV0bWFwX2lmX29mZnNldChuYS0+bm1fbWVtLCBuaWZwKTsKIAlmb3IgKGkgPSAw OyBpIDwgbltOUl9UWF07IGkrKykgeworCQlpZiAobmEtPnR4X3JpbmdzW2ldLnJpbmcgPT0gTlVM TCkgeworCQkJLy8gWFhYIG1heWJlIHVzZSB0aGUgb2Zmc2V0IG9mIGFuIGVycm9yIHJpbmcsCisJ CQkvLyBsaWtlIHdlIGRvIGZvciBidWZmZXJzPworCQkJKihzc2l6ZV90ICopKHVpbnRwdHJfdCkm bmlmcC0+cmluZ19vZnNbaV0gPSAwOworCQkJY29udGludWU7CisJCX0KIAkJKihzc2l6ZV90ICop KHVpbnRwdHJfdCkmbmlmcC0+cmluZ19vZnNbaV0gPQogCQkJbmV0bWFwX3Jpbmdfb2Zmc2V0KG5h LT5ubV9tZW0sIG5hLT50eF9yaW5nc1tpXS5yaW5nKSAtIGJhc2U7CiAJfQogCWZvciAoaSA9IDA7 IGkgPCBuW05SX1JYXTsgaSsrKSB7CisJCWlmIChuYS0+cnhfcmluZ3NbaV0ucmluZyA9PSBOVUxM KSB7CisJCQkvLyBYWFggbWF5YmUgdXNlIHRoZSBvZmZzZXQgb2YgYW4gZXJyb3IgcmluZywKKwkJ CS8vIGxpa2Ugd2UgZG8gZm9yIGJ1ZmZlcnM/CisJCQkqKHNzaXplX3QgKikodWludHB0cl90KSZu aWZwLT5yaW5nX29mc1tpK25bTlJfVFhdXSA9IDA7CisJCQljb250aW51ZTsKKwkJfQogCQkqKHNz aXplX3QgKikodWludHB0cl90KSZuaWZwLT5yaW5nX29mc1tpK25bTlJfVFhdXSA9CiAJCQluZXRt YXBfcmluZ19vZmZzZXQobmEtPm5tX21lbSwgbmEtPnJ4X3JpbmdzW2ldLnJpbmcpIC0gYmFzZTsK IAl9CkBAIC0xNTk3LDcgKzE4NTAsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbmV0bWFwX21lbV9n bG9iYWxfZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQorbmV0bWFwX21lbTJfZGVyZWYo c3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQogewogCiAJbm1kLT5hY3RpdmUtLTsKQEAgLTE2MTIs MjcgKzE4NjUsNTUxIEBACiAJLm5tZF9nZXRfbHV0ID0gbmV0bWFwX21lbTJfZ2V0X2x1dCwKIAku bm1kX2dldF9pbmZvID0gbmV0bWFwX21lbTJfZ2V0X2luZm8sCiAJLm5tZF9vZnN0b3BoeXMgPSBu ZXRtYXBfbWVtMl9vZnN0b3BoeXMsCi0JLm5tZF9jb25maWcgPSBuZXRtYXBfbWVtX2dsb2JhbF9j b25maWcsCi0JLm5tZF9maW5hbGl6ZSA9IG5ldG1hcF9tZW1fZ2xvYmFsX2ZpbmFsaXplLAotCS5u bWRfZGVyZWYgPSBuZXRtYXBfbWVtX2dsb2JhbF9kZXJlZiwKLQkubm1kX2RlbGV0ZSA9IG5ldG1h cF9tZW1fZ2xvYmFsX2RlbGV0ZSwKKwkubm1kX2NvbmZpZyA9IG5ldG1hcF9tZW0yX2NvbmZpZywK Kwkubm1kX2ZpbmFsaXplID0gbmV0bWFwX21lbTJfZmluYWxpemUsCisJLm5tZF9kZXJlZiA9IG5l dG1hcF9tZW0yX2RlcmVmLAorCS5ubWRfZGVsZXRlID0gbmV0bWFwX21lbTJfZGVsZXRlLAogCS5u bWRfaWZfb2Zmc2V0ID0gbmV0bWFwX21lbTJfaWZfb2Zmc2V0LAogCS5ubWRfaWZfbmV3ID0gbmV0 bWFwX21lbTJfaWZfbmV3LAogCS5ubWRfaWZfZGVsZXRlID0gbmV0bWFwX21lbTJfaWZfZGVsZXRl LAogCS5ubWRfcmluZ3NfY3JlYXRlID0gbmV0bWFwX21lbTJfcmluZ3NfY3JlYXRlLAogCS5ubWRf cmluZ3NfZGVsZXRlID0gbmV0bWFwX21lbTJfcmluZ3NfZGVsZXRlCiB9Owotc3RydWN0IG5ldG1h cF9tZW1fb3BzIG5ldG1hcF9tZW1fcHJpdmF0ZV9vcHMgPSB7Ci0JLm5tZF9nZXRfbHV0ID0gbmV0 bWFwX21lbTJfZ2V0X2x1dCwKLQkubm1kX2dldF9pbmZvID0gbmV0bWFwX21lbTJfZ2V0X2luZm8s Ci0JLm5tZF9vZnN0b3BoeXMgPSBuZXRtYXBfbWVtMl9vZnN0b3BoeXMsCi0JLm5tZF9jb25maWcg PSBuZXRtYXBfbWVtX3ByaXZhdGVfY29uZmlnLAotCS5ubWRfZmluYWxpemUgPSBuZXRtYXBfbWVt X3ByaXZhdGVfZmluYWxpemUsCi0JLm5tZF9kZXJlZiA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9kZXJl ZiwKLQkubm1kX2lmX29mZnNldCA9IG5ldG1hcF9tZW0yX2lmX29mZnNldCwKLQkubm1kX2RlbGV0 ZSA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9kZWxldGUsCi0JLm5tZF9pZl9uZXcgPSBuZXRtYXBfbWVt Ml9pZl9uZXcsCi0JLm5tZF9pZl9kZWxldGUgPSBuZXRtYXBfbWVtMl9pZl9kZWxldGUsCi0JLm5t ZF9yaW5nc19jcmVhdGUgPSBuZXRtYXBfbWVtMl9yaW5nc19jcmVhdGUsCi0JLm5tZF9yaW5nc19k ZWxldGUgPSBuZXRtYXBfbWVtMl9yaW5nc19kZWxldGUKKworaW50CituZXRtYXBfbWVtX3Bvb2xz X2luZm9fZ2V0KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQor eworCXVpbnRwdHJfdCAqcHAgPSAodWludHB0cl90ICopJm5tci0+bnJfYXJnMTsKKwlzdHJ1Y3Qg bmV0bWFwX3Bvb2xzX2luZm8gKnVwaSA9IChzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gKikoKnBw KTsKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQgPSBuYS0+bm1fbWVtOworCXN0cnVjdCBuZXRt YXBfcG9vbHNfaW5mbyBwaTsKKwl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKKwl1aW50MTZfdCBtZW1p ZDsKKwlpbnQgcmV0OworCisJaWYgKCFubWQpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9 IG5ldG1hcF9tZW1fZ2V0X2luZm8obm1kLCAmbWVtc2l6ZSwgTlVMTCwgJm1lbWlkKTsKKwlpZiAo cmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcGkubWVtc2l6ZSA9IG1lbXNpemU7CisJcGku bWVtaWQgPSBtZW1pZDsKKwlwaS5pZl9wb29sX29mZnNldCA9IDA7CisJcGkuaWZfcG9vbF9vYmp0 b3RhbCA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLm9ianRvdGFsOworCXBpLmlmX3Bvb2xf b2Jqc2l6ZSA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLl9vYmpzaXplOworCisJcGkucmlu Z19wb29sX29mZnNldCA9IG5tZC0+cG9vbHNbTkVUTUFQX0lGX1BPT0xdLm1lbXRvdGFsOworCXBp LnJpbmdfcG9vbF9vYmp0b3RhbCA9IG5tZC0+cG9vbHNbTkVUTUFQX1JJTkdfUE9PTF0ub2JqdG90 YWw7CisJcGkucmluZ19wb29sX29ianNpemUgPSBubWQtPnBvb2xzW05FVE1BUF9SSU5HX1BPT0xd Ll9vYmpzaXplOworCisJcGkuYnVmX3Bvb2xfb2Zmc2V0ID0gbm1kLT5wb29sc1tORVRNQVBfSUZf UE9PTF0ubWVtdG90YWwgKworCQkJICAgICBubWQtPnBvb2xzW05FVE1BUF9SSU5HX1BPT0xdLm1l bXRvdGFsOworCXBpLmJ1Zl9wb29sX29ianRvdGFsID0gbm1kLT5wb29sc1tORVRNQVBfQlVGX1BP T0xdLm9ianRvdGFsOworCXBpLmJ1Zl9wb29sX29ianNpemUgPSBubWQtPnBvb2xzW05FVE1BUF9C VUZfUE9PTF0uX29ianNpemU7CisKKwlyZXQgPSBjb3B5b3V0KCZwaSwgdXBpLCBzaXplb2YocGkp KTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNp ZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCitzdHJ1Y3QgbWVtX3B0X2lmIHsKKwlzdHJ1Y3QgbWVt X3B0X2lmICpuZXh0OworCXN0cnVjdCBpZm5ldCAqaWZwOworCXVuc2lnbmVkIGludCBuaWZwX29m ZnNldDsKK307CisKKy8qIE5ldG1hcCBhbGxvY2F0b3IgZm9yIHB0bmV0bWFwIGd1ZXN0cy4gKi8K K3N0cnVjdCBuZXRtYXBfbWVtX3B0ZyB7CisJc3RydWN0IG5ldG1hcF9tZW1fZCB1cDsKKworCXZt X3BhZGRyX3Qgbm1fcGFkZHI7ICAgICAgICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBpbiB0aGUg Z3Vlc3QgKi8KKwl2b2lkICpubV9hZGRyOyAgICAgICAgICAgICAgICAgIC8qIHZpcnR1YWwgYWRk cmVzcyBpbiB0aGUgZ3Vlc3QgKi8KKwlzdHJ1Y3QgbmV0bWFwX2x1dCBidWZfbHV0OyAgICAgIC8q IGxvb2t1cCB0YWJsZSBmb3IgQlVGIHBvb2wgaW4gdGhlIGd1ZXN0ICovCisJbm1fbWVtaWRfdCBo b3N0X21lbV9pZDsgICAgICAgICAvKiBhbGxvY2F0b3IgaWRlbnRpZmllciBpbiB0aGUgaG9zdCAq LworCXN0cnVjdCBwdG5ldG1hcF9tZW1kZXYgKnB0bl9kZXY7LyogcHRuZXRtYXAgbWVtZGV2ICov CisJc3RydWN0IG1lbV9wdF9pZiAqcHRfaWZzOwkvKiBsaXN0IG9mIGludGVyZmFjZXMgaW4gcGFz c3Rocm91Z2ggKi8KK307CisKKy8qIExpbmsgYSBwYXNzdGhyb3VnaCBpbnRlcmZhY2UgdG8gYSBw YXNzdGhyb3VnaCBuZXRtYXAgYWxsb2NhdG9yLiAqLworc3RhdGljIGludAorbmV0bWFwX21lbV9w dF9ndWVzdF9pZnBfYWRkKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCwgc3RydWN0IGlmbmV0ICpp ZnAsCisJCQkgICAgdW5zaWduZWQgaW50IG5pZnBfb2Zmc2V0KQoreworCXN0cnVjdCBuZXRtYXBf bWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCXN0cnVjdCBt ZW1fcHRfaWYgKnB0aWYgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCpwdGlmKSk7CisKKwlpZiAoIXB0 aWYpIHsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwlOTUFfTE9DSyhubWQpOworCisJcHRpZi0+ aWZwID0gaWZwOworCXB0aWYtPm5pZnBfb2Zmc2V0ID0gbmlmcF9vZmZzZXQ7CisKKwlpZiAocHRu bWQtPnB0X2lmcykgeworCQlwdGlmLT5uZXh0ID0gcHRubWQtPnB0X2lmczsKKwl9CisJcHRubWQt PnB0X2lmcyA9IHB0aWY7CisKKwlOTUFfVU5MT0NLKG5tZCk7CisKKwlEKCJhZGRlZCAoaWZwPSVw LG5pZnBfb2Zmc2V0PSV1KSIsIHB0aWYtPmlmcCwgcHRpZi0+bmlmcF9vZmZzZXQpOworCisJcmV0 dXJuIDA7Cit9CisKKy8qIENhbGxlZCB3aXRoIE5NQV9MT0NLKG5tZCkgaGVsZC4gKi8KK3N0YXRp YyBzdHJ1Y3QgbWVtX3B0X2lmICoKK25ldG1hcF9tZW1fcHRfZ3Vlc3RfaWZwX2xvb2t1cChzdHJ1 Y3QgbmV0bWFwX21lbV9kICpubWQsIHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCBuZXRt YXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCXN0cnVj dCBtZW1fcHRfaWYgKmN1cnI7CisKKwlmb3IgKGN1cnIgPSBwdG5tZC0+cHRfaWZzOyBjdXJyOyBj dXJyID0gY3Vyci0+bmV4dCkgeworCQlpZiAoY3Vyci0+aWZwID09IGlmcCkgeworCQkJcmV0dXJu IGN1cnI7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogVW5saW5rIGEgcGFzc3Ro cm91Z2ggaW50ZXJmYWNlIGZyb20gYSBwYXNzdGhyb3VnaCBuZXRtYXAgYWxsb2NhdG9yLiAqLwor aW50CituZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9kZWwoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1k LCBzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0g KHN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAqKW5tZDsKKwlzdHJ1Y3QgbWVtX3B0X2lmICpwcmV2ID0g TlVMTDsKKwlzdHJ1Y3QgbWVtX3B0X2lmICpjdXJyOworCWludCByZXQgPSAtMTsKKworCU5NQV9M T0NLKG5tZCk7CisKKwlmb3IgKGN1cnIgPSBwdG5tZC0+cHRfaWZzOyBjdXJyOyBjdXJyID0gY3Vy ci0+bmV4dCkgeworCQlpZiAoY3Vyci0+aWZwID09IGlmcCkgeworCQkJaWYgKHByZXYpIHsKKwkJ CQlwcmV2LT5uZXh0ID0gY3Vyci0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJcHRubWQtPnB0X2lm cyA9IGN1cnItPm5leHQ7CisJCQl9CisJCQlEKCJyZW1vdmVkIChpZnA9JXAsbmlmcF9vZmZzZXQ9 JXUpIiwKKwkJCSAgY3Vyci0+aWZwLCBjdXJyLT5uaWZwX29mZnNldCk7CisJCQlubV9vc19mcmVl KGN1cnIpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXByZXYgPSBjdXJyOworCX0K KworCU5NQV9VTkxPQ0sobm1kKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK25l dG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQsIHN0cnVj dCBuZXRtYXBfbHV0ICpsdXQpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChz dHJ1Y3QgbmV0bWFwX21lbV9wdGcgKilubWQ7CisKKwlpZiAoIShubWQtPmZsYWdzICYgTkVUTUFQ X01FTV9GSU5BTElaRUQpKSB7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJKmx1dCA9IHB0bm1k LT5idWZfbHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRtYXBfbWVtX3B0X2d1 ZXN0X2dldF9pbmZvKHN0cnVjdCBuZXRtYXBfbWVtX2QgKm5tZCwgdV9pbnQgKnNpemUsCisJCQkg ICAgIHVfaW50ICptZW1mbGFncywgdWludDE2X3QgKmlkKQoreworCWludCBlcnJvciA9IDA7CisK KwlOTUFfTE9DSyhubWQpOworCisJZXJyb3IgPSBubWQtPm9wcy0+bm1kX2NvbmZpZyhubWQpOwor CWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwlpZiAoc2l6ZSkKKwkJKnNpemUgPSBubWQtPm5t X3RvdGFsc2l6ZTsKKwlpZiAobWVtZmxhZ3MpCisJCSptZW1mbGFncyA9IG5tZC0+ZmxhZ3M7CisJ aWYgKGlkKQorCQkqaWQgPSBubWQtPm5tX2lkOworCitvdXQ6CisJTk1BX1VOTE9DSyhubWQpOwor CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm1fcGFkZHJfdAorbmV0bWFwX21lbV9wdF9n dWVzdF9vZnN0b3BoeXMoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kLCB2bV9vb2Zmc2V0X3Qgb2Zm KQoreworCXN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1f cHRnICopbm1kOworCXZtX3BhZGRyX3QgcGFkZHI7CisJLyogaWYgdGhlIG9mZnNldCBpcyB2YWxp ZCwganVzdCByZXR1cm4gY3NiLT5iYXNlX2FkZHIgKyBvZmYgKi8KKwlwYWRkciA9ICh2bV9wYWRk cl90KShwdG5tZC0+bm1fcGFkZHIgKyBvZmYpOworCU5EKCJvZmYgJWx4IHBhZHIgJWx4Iiwgb2Zm LCAodW5zaWduZWQgbG9uZylwYWRkcik7CisJcmV0dXJuIHBhZGRyOworfQorCitzdGF0aWMgaW50 CituZXRtYXBfbWVtX3B0X2d1ZXN0X2NvbmZpZyhzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCit7 CisJLyogbm90aGluZyB0byBkbywgd2UgYXJlIGNvbmZpZ3VyZWQgb24gY3JlYXRpb24KKwkgKiBh bmQgY29uZmlndXJhdGlvbiBuZXZlciBjaGFuZ2VzIHRoZXJlYWZ0ZXIKKwkgKi8KKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludAorbmV0bWFwX21lbV9wdF9ndWVzdF9maW5hbGl6ZShzdHJ1Y3Qg bmV0bWFwX21lbV9kICpubWQpCit7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChz dHJ1Y3QgbmV0bWFwX21lbV9wdGcgKilubWQ7CisJdWludDY0X3QgbWVtX3NpemU7CisJdWludDMy X3QgYnVmc2l6ZTsKKwl1aW50MzJfdCBuYnVmZmVyczsKKwl1aW50MzJfdCBwb29sb2ZzOworCXZt X3BhZGRyX3QgcGFkZHI7CisJY2hhciAqdmFkZHI7CisJaW50IGk7CisJaW50IGVycm9yID0gMDsK KworCW5tZC0+YWN0aXZlKys7CisKKwlpZiAobm1kLT5mbGFncyAmIE5FVE1BUF9NRU1fRklOQUxJ WkVEKQorCQlnb3RvIG91dDsKKworCWlmIChwdG5tZC0+cHRuX2RldiA9PSBOVUxMKSB7CisJCUQo InB0bmV0bWFwIG1lbWRldiBub3QgYXR0YWNoZWQiKTsKKwkJZXJyb3IgPSBFTk9NRU07CisJCWdv dG8gZXJyOworCX0KKwkvKiBNYXAgbWVtb3J5IHRocm91Z2ggcHRuZXRtYXAtbWVtZGV2IEJBUi4g Ki8KKwllcnJvciA9IG5tX29zX3B0X21lbWRldl9pb21hcChwdG5tZC0+cHRuX2RldiwgJnB0bm1k LT5ubV9wYWRkciwKKwkJCQkgICAgICAmcHRubWQtPm5tX2FkZHIsICZtZW1fc2l6ZSk7CisJaWYg KGVycm9yKQorCQlnb3RvIGVycjsKKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBsdXQgdXNp bmcgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUKKwkgKiBwdG5ldG1hcCBtZW1vcnkg ZGV2aWNlLiAqLworICAgICAgICBidWZzaXplID0gbm1fb3NfcHRfbWVtZGV2X2lvcmVhZChwdG5t ZC0+cHRuX2RldiwKKwkJCQkJIFBUTkVUX01ERVZfSU9fQlVGX1BPT0xfT0JKU1opOworICAgICAg ICBuYnVmZmVycyA9IG5tX29zX3B0X21lbWRldl9pb3JlYWQocHRubWQtPnB0bl9kZXYsCisJCQkJ CSBQVE5FVF9NREVWX0lPX0JVRl9QT09MX09CSk5VTSk7CisKKwkvKiBhbGxvY2F0ZSB0aGUgbHV0 ICovCisJaWYgKHB0bm1kLT5idWZfbHV0Lmx1dCA9PSBOVUxMKSB7CisJCUQoImFsbG9jYXRpbmcg bHV0Iik7CisJCXB0bm1kLT5idWZfbHV0Lmx1dCA9IG5tX2FsbG9jX2x1dChuYnVmZmVycyk7CisJ CWlmIChwdG5tZC0+YnVmX2x1dC5sdXQgPT0gTlVMTCkgeworCQkJRCgibHV0IGFsbG9jYXRpb24g ZmFpbGVkIik7CisJCQlyZXR1cm4gRU5PTUVNOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBwaHlz aWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IG1hcHBlZCB0aHJvdWdoIFBDSSBCQVIgKi8KKwlwb29s b2ZzID0gbm1fb3NfcHRfbWVtZGV2X2lvcmVhZChwdG5tZC0+cHRuX2RldiwKKwkJCQkJIFBUTkVU X01ERVZfSU9fQlVGX1BPT0xfT0ZTKTsKKwl2YWRkciA9IChjaGFyICopKHB0bm1kLT5ubV9hZGRy KSArIHBvb2xvZnM7CisJcGFkZHIgPSBwdG5tZC0+bm1fcGFkZHIgKyBwb29sb2ZzOworCisJZm9y IChpID0gMDsgaSA8IG5idWZmZXJzOyBpKyspIHsKKwkJcHRubWQtPmJ1Zl9sdXQubHV0W2ldLnZh ZGRyID0gdmFkZHI7CisJCXB0bm1kLT5idWZfbHV0Lmx1dFtpXS5wYWRkciA9IHBhZGRyOworCQl2 YWRkciArPSBidWZzaXplOworCQlwYWRkciArPSBidWZzaXplOworCX0KKworCXB0bm1kLT5idWZf bHV0Lm9ianRvdGFsID0gbmJ1ZmZlcnM7CisJcHRubWQtPmJ1Zl9sdXQub2Jqc2l6ZSA9IGJ1ZnNp emU7CisJbm1kLT5ubV90b3RhbHNpemUgPSAodW5zaWduZWQgaW50KW1lbV9zaXplOworCisJbm1k LT5mbGFncyB8PSBORVRNQVBfTUVNX0ZJTkFMSVpFRDsKK291dDoKKwlyZXR1cm4gMDsKK2VycjoK KwlubWQtPmFjdGl2ZS0tOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQKK25ldG1h cF9tZW1fcHRfZ3Vlc3RfZGVyZWYoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kKQoreworCXN0cnVj dCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOwor CisJbm1kLT5hY3RpdmUtLTsKKwlpZiAobm1kLT5hY3RpdmUgPD0gMCAmJgorCQkobm1kLT5mbGFn cyAmIE5FVE1BUF9NRU1fRklOQUxJWkVEKSkgeworCSAgICBubWQtPmZsYWdzICAmPSB+TkVUTUFQ X01FTV9GSU5BTElaRUQ7CisJICAgIC8qIHVubWFwIHB0bmV0bWFwLW1lbWRldiBtZW1vcnkgKi8K KwkgICAgaWYgKHB0bm1kLT5wdG5fZGV2KSB7CisJCW5tX29zX3B0X21lbWRldl9pb3VubWFwKHB0 bm1kLT5wdG5fZGV2KTsKKwkgICAgfQorCSAgICBwdG5tZC0+bm1fYWRkciA9IDA7CisJICAgIHB0 bm1kLT5ubV9wYWRkciA9IDA7CisJfQorfQorCitzdGF0aWMgc3NpemVfdAorbmV0bWFwX21lbV9w dF9ndWVzdF9pZl9vZmZzZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqbm1kLCBjb25zdCB2b2lkICp2 YWRkcikKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0gKHN0cnVjdCBuZXRtYXBf bWVtX3B0ZyAqKW5tZDsKKworCXJldHVybiAoY29uc3QgY2hhciAqKSh2YWRkcikgLSAoY2hhciAq KShwdG5tZC0+bm1fYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfbWVtX3B0X2d1ZXN0 X2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQpCit7CisJaWYgKG5tZCA9PSBOVUxMKQor CQlyZXR1cm47CisJaWYgKG5ldG1hcF92ZXJib3NlKQorCQlEKCJkZWxldGluZyAlcCIsIG5tZCk7 CisJaWYgKG5tZC0+YWN0aXZlID4gMCkKKwkJRCgiYnVnOiBkZWxldGluZyBtZW0gYWxsb2NhdG9y IHdpdGggYWN0aXZlPSVkISIsIG5tZC0+YWN0aXZlKTsKKwlpZiAobmV0bWFwX3ZlcmJvc2UpCisJ CUQoImRvbmUgZGVsZXRpbmcgJXAiLCBubWQpOworCU5NQV9MT0NLX0RFU1RST1kobm1kKTsKKwlu bV9vc19mcmVlKG5tZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0bWFwX2lmICoKK25ldG1hcF9t ZW1fcHRfZ3Vlc3RfaWZfbmV3KHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJc3RydWN0 IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKiluYS0+bm1f bWVtOworCXN0cnVjdCBtZW1fcHRfaWYgKnB0aWY7CisJc3RydWN0IG5ldG1hcF9pZiAqbmlmcCA9 IE5VTEw7CisKKwlOTUFfTE9DSyhuYS0+bm1fbWVtKTsKKworCXB0aWYgPSBuZXRtYXBfbWVtX3B0 X2d1ZXN0X2lmcF9sb29rdXAobmEtPm5tX21lbSwgbmEtPmlmcCk7CisJaWYgKHB0aWYgPT0gTlVM TCkgeworCQlEKCJFcnJvcjogaW50ZXJmYWNlICVwIGlzIG5vdCBpbiBwYXNzdGhyb3VnaCIsIG5h LT5pZnApOworCQlnb3RvIG91dDsKKwl9CisKKwluaWZwID0gKHN0cnVjdCBuZXRtYXBfaWYgKiko KGNoYXIgKikocHRubWQtPm5tX2FkZHIpICsKKwkJCQkgICAgcHRpZi0+bmlmcF9vZmZzZXQpOwor CU5NQV9VTkxPQ0sobmEtPm5tX21lbSk7CitvdXQ6CisJcmV0dXJuIG5pZnA7Cit9CisKK3N0YXRp YyB2b2lkCituZXRtYXBfbWVtX3B0X2d1ZXN0X2lmX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0 ZXIgKm5hLCBzdHJ1Y3QgbmV0bWFwX2lmICpuaWZwKQoreworCXN0cnVjdCBtZW1fcHRfaWYgKnB0 aWY7CisKKwlOTUFfTE9DSyhuYS0+bm1fbWVtKTsKKwlwdGlmID0gbmV0bWFwX21lbV9wdF9ndWVz dF9pZnBfbG9va3VwKG5hLT5ubV9tZW0sIG5hLT5pZnApOworCWlmIChwdGlmID09IE5VTEwpIHsK KwkJRCgiRXJyb3I6IGludGVyZmFjZSAlcCBpcyBub3QgaW4gcGFzc3Rocm91Z2giLCBuYS0+aWZw KTsKKwl9CisJTk1BX1VOTE9DSyhuYS0+bm1fbWVtKTsKK30KKworc3RhdGljIGludAorbmV0bWFw X21lbV9wdF9ndWVzdF9yaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sK KwlzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKnB0bm1kID0gKHN0cnVjdCBuZXRtYXBfbWVtX3B0ZyAq KW5hLT5ubV9tZW07CisJc3RydWN0IG1lbV9wdF9pZiAqcHRpZjsKKwlzdHJ1Y3QgbmV0bWFwX2lm ICpuaWZwOworCWludCBpLCBlcnJvciA9IC0xOworCisJTk1BX0xPQ0sobmEtPm5tX21lbSk7CisK KwlwdGlmID0gbmV0bWFwX21lbV9wdF9ndWVzdF9pZnBfbG9va3VwKG5hLT5ubV9tZW0sIG5hLT5p ZnApOworCWlmIChwdGlmID09IE5VTEwpIHsKKwkJRCgiRXJyb3I6IGludGVyZmFjZSAlcCBpcyBu b3QgaW4gcGFzc3Rocm91Z2giLCBuYS0+aWZwKTsKKwkJZ290byBvdXQ7CisJfQorCisKKwkvKiBw b2ludCBlYWNoIGtyaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgcmluZyAqLworCW5p ZnAgPSAoc3RydWN0IG5ldG1hcF9pZiAqKSgoY2hhciAqKXB0bm1kLT5ubV9hZGRyICsgcHRpZi0+ bmlmcF9vZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPD0gbmEtPm51bV90eF9yaW5nczsgaSsrKSB7 CisJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gbmEtPnR4X3JpbmdzICsgaTsKKwkJaWYg KGtyaW5nLT5yaW5nKQorCQkJY29udGludWU7CisJCWtyaW5nLT5yaW5nID0gKHN0cnVjdCBuZXRt YXBfcmluZyAqKQorCQkJKChjaGFyICopbmlmcCArIG5pZnAtPnJpbmdfb2ZzW2ldKTsKKwl9CisJ Zm9yIChpID0gMDsgaSA8PSBuYS0+bnVtX3J4X3JpbmdzOyBpKyspIHsKKwkJc3RydWN0IG5ldG1h cF9rcmluZyAqa3JpbmcgPSBuYS0+cnhfcmluZ3MgKyBpOworCQlpZiAoa3JpbmctPnJpbmcpCisJ CQljb250aW51ZTsKKwkJa3JpbmctPnJpbmcgPSAoc3RydWN0IG5ldG1hcF9yaW5nICopCisJCQko KGNoYXIgKiluaWZwICsKKwkJCSBuaWZwLT5yaW5nX29mc1tpICsgbmEtPm51bV90eF9yaW5ncyAr IDFdKTsKKwl9CisKKwllcnJvciA9IDA7CitvdXQ6CisJTk1BX1VOTE9DSyhuYS0+bm1fbWVtKTsK KworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQKK25ldG1hcF9tZW1fcHRfZ3Vlc3Rf cmluZ3NfZGVsZXRlKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJLyogVE9ETzogcmVt b3ZlPz8gKi8KKyNpZiAwCisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5tZCA9IChzdHJ1Y3Qg bmV0bWFwX21lbV9wdGcgKiluYS0+bm1fbWVtOworCXN0cnVjdCBtZW1fcHRfaWYgKnB0aWYgPSBu ZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9sb29rdXAobmEtPm5tX21lbSwKKwkJCQkJCQkJbmEtPmlm cCk7CisjZW5kaWYKK30KKworc3RhdGljIHN0cnVjdCBuZXRtYXBfbWVtX29wcyBuZXRtYXBfbWVt X3B0X2d1ZXN0X29wcyA9IHsKKwkubm1kX2dldF9sdXQgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2dl dF9sdXQsCisJLm5tZF9nZXRfaW5mbyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0X2luZm8sCisJ Lm5tZF9vZnN0b3BoeXMgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X29mc3RvcGh5cywKKwkubm1kX2Nv bmZpZyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfY29uZmlnLAorCS5ubWRfZmluYWxpemUgPSBuZXRt YXBfbWVtX3B0X2d1ZXN0X2ZpbmFsaXplLAorCS5ubWRfZGVyZWYgPSBuZXRtYXBfbWVtX3B0X2d1 ZXN0X2RlcmVmLAorCS5ubWRfaWZfb2Zmc2V0ID0gbmV0bWFwX21lbV9wdF9ndWVzdF9pZl9vZmZz ZXQsCisJLm5tZF9kZWxldGUgPSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2RlbGV0ZSwKKwkubm1kX2lm X25ldyA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfaWZfbmV3LAorCS5ubWRfaWZfZGVsZXRlID0gbmV0 bWFwX21lbV9wdF9ndWVzdF9pZl9kZWxldGUsCisJLm5tZF9yaW5nc19jcmVhdGUgPSBuZXRtYXBf bWVtX3B0X2d1ZXN0X3JpbmdzX2NyZWF0ZSwKKwkubm1kX3JpbmdzX2RlbGV0ZSA9IG5ldG1hcF9t ZW1fcHRfZ3Vlc3RfcmluZ3NfZGVsZXRlCiB9OworCisvKiBDYWxsZWQgd2l0aCBubV9tZW1fbGlz dF9sb2NrIGhlbGQuICovCitzdGF0aWMgc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVt X3B0X2d1ZXN0X2ZpbmRfbWVtaWQobm1fbWVtaWRfdCBtZW1faWQpCit7CisJc3RydWN0IG5ldG1h cF9tZW1fZCAqbWVtID0gTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpzY2FuID0gbmV0bWFw X2xhc3RfbWVtX2Q7CisKKwlkbyB7CisJCS8qIGZpbmQgcHRuZXRtYXAgYWxsb2NhdG9yIHRocm91 Z2ggaG9zdCBJRCAqLworCQlpZiAoc2Nhbi0+b3BzLT5ubWRfZGVyZWYgPT0gbmV0bWFwX21lbV9w dF9ndWVzdF9kZXJlZiAmJgorCQkJKChzdHJ1Y3QgbmV0bWFwX21lbV9wdGcgKikoc2NhbikpLT5o b3N0X21lbV9pZCA9PSBtZW1faWQpIHsKKwkJCW1lbSA9IHNjYW47CisJCQltZW0tPnJlZmNvdW50 Kys7CisJCQlicmVhazsKKwkJfQorCQlzY2FuID0gc2Nhbi0+bmV4dDsKKwl9IHdoaWxlIChzY2Fu ICE9IG5ldG1hcF9sYXN0X21lbV9kKTsKKworCXJldHVybiBtZW07Cit9CisKKy8qIENhbGxlZCB3 aXRoIG5tX21lbV9saXN0X2xvY2sgaGVsZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0bWFwX21lbV9k ICoKK25ldG1hcF9tZW1fcHRfZ3Vlc3RfY3JlYXRlKG5tX21lbWlkX3QgbWVtX2lkKQoreworCXN0 cnVjdCBuZXRtYXBfbWVtX3B0ZyAqcHRubWQ7CisJaW50IGVyciA9IDA7CisKKwlwdG5tZCA9IG5t X29zX21hbGxvYyhzaXplb2Yoc3RydWN0IG5ldG1hcF9tZW1fcHRnKSk7CisJaWYgKHB0bm1kID09 IE5VTEwpIHsKKwkJZXJyID0gRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXB0bm1kLT51 cC5vcHMgPSAmbmV0bWFwX21lbV9wdF9ndWVzdF9vcHM7CisJcHRubWQtPmhvc3RfbWVtX2lkID0g bWVtX2lkOworCXB0bm1kLT5wdF9pZnMgPSBOVUxMOworCisgICAgICAgIC8qIEFzc2lnbiBuZXcg aWQgaW4gdGhlIGd1ZXN0IChXZSBoYXZlIHRoZSBsb2NrKSAqLworCWVyciA9IG5tX21lbV9hc3Np Z25faWRfbG9ja2VkKCZwdG5tZC0+dXApOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlw dG5tZC0+dXAuZmxhZ3MgJj0gfk5FVE1BUF9NRU1fRklOQUxJWkVEOworCXB0bm1kLT51cC5mbGFn cyB8PSBORVRNQVBfTUVNX0lPOworCisJTk1BX0xPQ0tfSU5JVCgmcHRubWQtPnVwKTsKKworCXNu cHJpbnRmKHB0bm1kLT51cC5uYW1lLCBOTV9NRU1fTkFNRVNaLCAiJWQiLCBwdG5tZC0+dXAubm1f aWQpOworCisKKwlyZXR1cm4gJnB0bm1kLT51cDsKK2Vycm9yOgorCW5ldG1hcF9tZW1fcHRfZ3Vl c3RfZGVsZXRlKCZwdG5tZC0+dXApOworCXJldHVybiBOVUxMOworfQorCisvKgorICogZmluZCBo b3N0IGlkIGluIGd1ZXN0IGFsbG9jYXRvcnMgYW5kIGNyZWF0ZSBndWVzdCBhbGxvY2F0b3IKKyAq IGlmIGl0IGlzIG5vdCB0aGVyZQorICovCitzdGF0aWMgc3RydWN0IG5ldG1hcF9tZW1fZCAqCitu ZXRtYXBfbWVtX3B0X2d1ZXN0X2dldChubV9tZW1pZF90IG1lbV9pZCkKK3sKKwlzdHJ1Y3QgbmV0 bWFwX21lbV9kICpubWQ7CisKKwlOTV9NVFhfTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKKwlubWQg PSBuZXRtYXBfbWVtX3B0X2d1ZXN0X2ZpbmRfbWVtaWQobWVtX2lkKTsKKwlpZiAobm1kID09IE5V TEwpIHsKKwkJbm1kID0gbmV0bWFwX21lbV9wdF9ndWVzdF9jcmVhdGUobWVtX2lkKTsKKwl9CisJ Tk1fTVRYX1VOTE9DSyhubV9tZW1fbGlzdF9sb2NrKTsKKworCXJldHVybiBubWQ7Cit9CisKKy8q CisgKiBUaGUgZ3Vlc3QgYWxsb2NhdG9yIGNhbiBiZSBjcmVhdGVkIGJ5IHB0bmV0bWFwX21lbWRl diAoZHVyaW5nIHRoZSBkZXZpY2UKKyAqIGF0dGFjaCkgb3IgYnkgcHRuZXRtYXAgZGV2aWNlIChw dG5ldCksIGR1cmluZyB0aGUgbmV0bWFwX2F0dGFjaC4KKyAqCisgKiBUaGUgb3JkZXIgaXMgbm90 IGltcG9ydGFudCAod2UgaGF2ZSBkaWZmZXJlbnQgb3JkZXIgaW4gTElOVVggYW5kIEZyZWVCU0Qp LgorICogVGhlIGZpcnN0IG9uZSwgY3JlYXRlcyB0aGUgZGV2aWNlLCBhbmQgdGhlIHNlY29uZCBv bmUgc2ltcGx5IGF0dGFjaGVzIGl0LgorICovCisKKy8qIENhbGxlZCB3aGVuIHB0bmV0bWFwX21l bWRldiBpcyBhdHRhY2hpbmcsIHRvIGF0dGFjaCBhIG5ldyBhbGxvY2F0b3IgaW4KKyAqIHRoZSBn dWVzdCAqLworc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVtX3B0X2d1ZXN0X2F0dGFj aChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICpwdG5fZGV2LCBubV9tZW1pZF90IG1lbV9pZCkKK3sK KwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpubWQ7CisJc3RydWN0IG5ldG1hcF9tZW1fcHRnICpwdG5t ZDsKKworCW5tZCA9IG5ldG1hcF9tZW1fcHRfZ3Vlc3RfZ2V0KG1lbV9pZCk7CisKKwkvKiBhc3Np Z24gdGhpcyBkZXZpY2UgdG8gdGhlIGd1ZXN0IGFsbG9jYXRvciAqLworCWlmIChubWQpIHsKKwkJ cHRubWQgPSAoc3RydWN0IG5ldG1hcF9tZW1fcHRnICopbm1kOworCQlwdG5tZC0+cHRuX2RldiA9 IHB0bl9kZXY7CisJfQorCisJcmV0dXJuIG5tZDsKK30KKworLyogQ2FsbGVkIHdoZW4gcHRuZXQg ZGV2aWNlIGlzIGF0dGFjaGluZyAqLworc3RydWN0IG5ldG1hcF9tZW1fZCAqCituZXRtYXBfbWVt X3B0X2d1ZXN0X25ldyhzdHJ1Y3QgaWZuZXQgKmlmcCwKKwkJCXVuc2lnbmVkIGludCBuaWZwX29m ZnNldCwKKwkJCXVuc2lnbmVkIGludCBtZW1pZCkKK3sKKwlzdHJ1Y3QgbmV0bWFwX21lbV9kICpu bWQ7CisKKwlpZiAoaWZwID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1kID0g bmV0bWFwX21lbV9wdF9ndWVzdF9nZXQoKG5tX21lbWlkX3QpbWVtaWQpOworCisJaWYgKG5tZCkg eworCQluZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9hZGQobm1kLCBpZnAsIG5pZnBfb2Zmc2V0KTsK Kwl9CisKKwlyZXR1cm4gbm1kOworfQorCisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAq LwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuaCAvdXNy L3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0 bWFwL25ldG1hcF9tZW0yLmgJMjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysr IC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgJMjAxNi0xMS0yMyAxNjo1Nzo1 Ny44NTI1MTgwMDAgKzAwMDAKQEAgLTEsNSArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy MDEyLTIwMTQgTWF0dGVvIExhbmRpLCBMdWlnaSBSaXp6bywgR2l1c2VwcGUgTGV0dGllcmkuIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBNYXR0ZW8gTGFu ZGkKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEx1aWdpIFJpenpvCisgKiBDb3B5cmlnaHQg KEMpIDIwMTItMjAxNiBHaXVzZXBwZSBMZXR0aWVyaQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyArMjcsNyBAQAogICovCiAK IC8qCi0gKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu aCAyODUzNDkgMjAxNS0wNy0xMCAwNTo1MTozNlogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQv c3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuYyAyMzQyOTAgMjAxMi0wNC0xNCAxNjo0NDoxOFog bHVpZ2kgJAogICoKICAqIChOZXcpIG1lbW9yeSBhbGxvY2F0b3IgZm9yIG5ldG1hcAogICovCkBA IC0xMTYsOSArMTE5LDE0IEBACiAgKi8KIAogZXh0ZXJuIHN0cnVjdCBuZXRtYXBfbWVtX2Qgbm1f bWVtOwordHlwZWRlZiB1aW50MTZfdCBubV9tZW1pZF90OwogCi12b2lkCSAgIG5ldG1hcF9tZW1f Z2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRtYXBfbHV0ICopOworaW50 CSAgIG5ldG1hcF9tZW1fZ2V0X2x1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRt YXBfbHV0ICopOworbm1fbWVtaWRfdCBuZXRtYXBfbWVtX2dldF9pZChzdHJ1Y3QgbmV0bWFwX21l bV9kICopOwogdm1fcGFkZHJfdCBuZXRtYXBfbWVtX29mc3RvcGh5cyhzdHJ1Y3QgbmV0bWFwX21l bV9kICosIHZtX29vZmZzZXRfdCk7CisjaWZkZWYgX1dJTjMyCitQTURMIHdpbjMyX2J1aWxkX3Vz ZXJfdm1fbWFwKHN0cnVjdCBuZXRtYXBfbWVtX2QqIG5tZCk7CisjZW5kaWYKIGludAkgICBuZXRt YXBfbWVtX2ZpbmFsaXplKHN0cnVjdCBuZXRtYXBfbWVtX2QgKiwgc3RydWN0IG5ldG1hcF9hZGFw dGVyICopOwogaW50IAkgICBuZXRtYXBfbWVtX2luaXQodm9pZCk7CiB2b2lkIAkgICBuZXRtYXBf bWVtX2Zpbmkodm9pZCk7CkBAIC0xMjcsMzUgKzEzNSwyNyBAQAogaW50CSAgIG5ldG1hcF9tZW1f cmluZ3NfY3JlYXRlKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIHZvaWQJICAgbmV0bWFwX21l bV9yaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICopOwogdm9pZCAJICAgbmV0bWFw X21lbV9kZXJlZihzdHJ1Y3QgbmV0bWFwX21lbV9kICosIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAq KTsKK2ludAluZXRtYXBfbWVtMl9nZXRfcG9vbF9pbmZvKHN0cnVjdCBuZXRtYXBfbWVtX2QgKiwg dV9pbnQsIHVfaW50ICosIHVfaW50ICopOwogaW50CSAgIG5ldG1hcF9tZW1fZ2V0X2luZm8oc3Ry dWN0IG5ldG1hcF9tZW1fZCAqLCB1X2ludCAqc2l6ZSwgdV9pbnQgKm1lbWZsYWdzLCB1aW50MTZf dCAqaWQpOwogc3NpemVfdCAgICBuZXRtYXBfbWVtX2lmX29mZnNldChzdHJ1Y3QgbmV0bWFwX21l bV9kICosIGNvbnN0IHZvaWQgKnZhZGRyKTsKLXN0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1hcF9t ZW1fcHJpdmF0ZV9uZXcoY29uc3QgY2hhciAqbmFtZSwKLQl1X2ludCB0eHIsIHVfaW50IHR4ZCwg dV9pbnQgcnhyLCB1X2ludCByeGQsIHVfaW50IGV4dHJhX2J1ZnMsIHVfaW50IG5waXBlcywKLQlp bnQqIGVycm9yKTsKK3N0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1hcF9tZW1fcHJpdmF0ZV9uZXco IHVfaW50IHR4ciwgdV9pbnQgdHhkLCB1X2ludCByeHIsIHVfaW50IHJ4ZCwKKwkJdV9pbnQgZXh0 cmFfYnVmcywgdV9pbnQgbnBpcGVzLCBpbnQqIGVycm9yKTsKIHZvaWQJICAgbmV0bWFwX21lbV9k ZWxldGUoc3RydWN0IG5ldG1hcF9tZW1fZCAqKTsKIAotLy8jZGVmaW5lIE5NX0RFQlVHX01FTV9Q VVRHRVQgMQotCi0jaWZkZWYgTk1fREVCVUdfTUVNX1BVVEdFVAotCi0jZGVmaW5lIG5ldG1hcF9t ZW1fZ2V0KG5tZCkgCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlfX25ldG1hcF9tZW1fZ2V0KG5tZCwg X19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIG5ldG1h cF9tZW1fcHV0KG5tZCkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCV9fbmV0bWFwX21lbV9wdXQobm1k LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsJXAotCX0gd2hpbGUgKDApCi0KLXZvaWQgX19uZXRt YXBfbWVtX2dldChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIGNvbnN0IGNoYXIgKiwgaW50KTsKLXZv aWQgX19uZXRtYXBfbWVtX3B1dChzdHJ1Y3QgbmV0bWFwX21lbV9kICosIGNvbnN0IGNoYXIgKiwg aW50KTsKLSNlbHNlIC8qICFOTV9ERUJVR19NRU1fUFVUR0VUICovCi0KLXZvaWQgbmV0bWFwX21l bV9nZXQoc3RydWN0IG5ldG1hcF9tZW1fZCAqKTsKK3N0cnVjdCBuZXRtYXBfbWVtX2QqIG5ldG1h cF9tZW1fZ2V0KHN0cnVjdCBuZXRtYXBfbWVtX2QgKik7CiB2b2lkIG5ldG1hcF9tZW1fcHV0KHN0 cnVjdCBuZXRtYXBfbWVtX2QgKik7CitzdHJ1Y3QgbmV0bWFwX21lbV9kKiBuZXRtYXBfbWVtX2Zp bmQobm1fbWVtaWRfdCk7CisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCitzdHJ1Y3QgbmV0 bWFwX21lbV9kKiBuZXRtYXBfbWVtX3B0X2d1ZXN0X25ldyhzdHJ1Y3QgaWZuZXQgKiwKKwkJCQkJ ICAgICB1bnNpZ25lZCBpbnQgbmlmcF9vZmZzZXQsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG1l bWlkKTsKK3N0cnVjdCBwdG5ldG1hcF9tZW1kZXY7CitzdHJ1Y3QgbmV0bWFwX21lbV9kKiBuZXRt YXBfbWVtX3B0X2d1ZXN0X2F0dGFjaChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICosIHVpbnQxNl90 KTsKK2ludCBuZXRtYXBfbWVtX3B0X2d1ZXN0X2lmcF9kZWwoc3RydWN0IG5ldG1hcF9tZW1fZCAq LCBzdHJ1Y3QgaWZuZXQgKik7CisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAqLwogCi0j ZW5kaWYgLyogIU5NX0RFQlVHX1BVVEdFVCAqLworaW50IG5ldG1hcF9tZW1fcG9vbHNfaW5mb19n ZXQoc3RydWN0IG5tcmVxICosIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqKTsKIAogI2RlZmluZSBO RVRNQVBfTUVNX1BSSVZBVEUJMHgyCS8qIGFsbG9jYXRvciB1c2VzIHByaXZhdGUgYWRkcmVzcyBz cGFjZSAqLwogI2RlZmluZSBORVRNQVBfTUVNX0lPCQkweDQJLyogdGhlIHVuZGVybHlpbmcgbWVt b3J5IGlzIG1tYXBwZWQgSS9PICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1h cC9uZXRtYXBfbW9uaXRvci5jIC91c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9tb25pdG9y LmMKLS0tIHVzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21vbml0b3IuYwkyMDE2LTA5LTI5 IDAwOjI0OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0 bWFwX21vbml0b3IuYwkyMDE2LTEyLTAxIDA5OjUxOjI4LjcxNTEzODAwMCArMDAwMApAQCAtMSw1 ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgR2l1c2VwcGUgTGV0dGllcmkuIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBHaXVzZXBwZSBM ZXR0aWVyaQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwpAQCAtMjQsNyArMjUsNyBAQAogICovCiAKIC8qCi0gKiAkRnJlZUJTRDogcmVsZW5n LzExLjAvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX21vbml0b3IuYyAyODU2OTYgMjAxNS0wNy0xOSAx ODowNDo1MVogbHVpZ2kgJAorICogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvbmV0bWFw X3ptb24uYyAyNzAwNjMgMjAxNC0wOC0xNiAxNTowMDowMVogbHVpZ2kgJAogICoKICAqIE1vbml0 b3JzCiAgKgpAQCAtMTAxLDYgKzEwMiw4IEBACiAjd2FybmluZyBPU1ggc3VwcG9ydCBpcyBvbmx5 IHBhcnRpYWwKICNpbmNsdWRlICJvc3hfZ2x1ZS5oIgogCisjZWxpZiBkZWZpbmVkKF9XSU4zMikK KyNpbmNsdWRlICJ3aW5fZ2x1ZS5oIgogI2Vsc2UKIAogI2Vycm9yCVVuc3VwcG9ydGVkIHBsYXRm b3JtCkBAIC0xNDUsMTkgKzE0OCwyMyBAQAogbmV0bWFwX21vbml0b3JfcnhzeW5jKHN0cnVjdCBu ZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCiB7CiAgICAgICAgIE5EKCIlcyAleCIsIGty aW5nLT5uYW1lLCBmbGFncyk7Ci0Ja3JpbmctPm5yX2h3Y3VyID0ga3JpbmctPnJjdXI7CisJa3Jp bmctPm5yX2h3Y3VyID0ga3JpbmctPnJoZWFkOwogCW1iKCk7CiAgICAgICAgIHJldHVybiAwOwog fQogCiAvKiBubV9rcmluZ3NfY3JlYXRlIGNhbGxiYWNrcyBmb3IgbW9uaXRvcnMuCi0gKiBXZSBj b3VsZCB1c2UgdGhlIGRlZmF1bHQgbmV0bWFwX2h3X2tyaW5nc196bW9uLCBidXQKLSAqIHdlIGRv bid0IG5lZWQgdGhlIG1icS4KICAqLwogc3RhdGljIGludAogbmV0bWFwX21vbml0b3Jfa3Jpbmdz X2NyZWF0ZShzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQogewotCXJldHVybiBuZXRtYXBfa3Jp bmdzX2NyZWF0ZShuYSwgMCk7CisJaW50IGVycm9yID0gbmV0bWFwX2tyaW5nc19jcmVhdGUobmEs IDApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCS8qIG92ZXJyaWRlIHRoZSBob3N0 IHJpbmdzIGNhbGxiYWNrcyAqLworCW5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXS5ubV9z eW5jID0gbmV0bWFwX21vbml0b3JfdHhzeW5jOworCW5hLT5yeF9yaW5nc1tuYS0+bnVtX3J4X3Jp bmdzXS5ubV9zeW5jID0gbmV0bWFwX21vbml0b3JfcnhzeW5jOworCXJldHVybiAwOwogfQogCiAv KiBubV9rcmluZ3NfZGVsZXRlIGNhbGxiYWNrIGZvciBtb25pdG9ycyAqLwpAQCAtMTc4LDE1ICsx ODUsMTYgQEAKIHN0YXRpYyBpbnQKIG5tX21vbml0b3JfYWxsb2Moc3RydWN0IG5ldG1hcF9rcmlu ZyAqa3JpbmcsIHVfaW50IG4pCiB7Ci0Jc2l6ZV90IGxlbjsKKwlzaXplX3Qgb2xkX2xlbiwgbGVu OwogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKipubTsKIAogCWlmIChuIDw9IGtyaW5nLT5tYXhfbW9u aXRvcnMpCiAJCS8qIHdlIGFscmVhZHkgaGF2ZSBtb3JlIGVudHJpZXMgdGhhdCByZXF1ZXN0ZWQg Ki8KIAkJcmV0dXJuIDA7CiAJCisJb2xkX2xlbiA9IHNpemVvZihzdHJ1Y3QgbmV0bWFwX2tyaW5n ICopKmtyaW5nLT5tYXhfbW9uaXRvcnM7CiAgICAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmV0 bWFwX2tyaW5nICopICogbjsKLQlubSA9IHJlYWxsb2Moa3JpbmctPm1vbml0b3JzLCBsZW4sIE1f REVWQlVGLCBNX05PV0FJVCB8IE1fWkVSTyk7CisJbm0gPSBubV9vc19yZWFsbG9jKGtyaW5nLT5t b25pdG9ycywgbGVuLCBvbGRfbGVuKTsKIAlpZiAobm0gPT0gTlVMTCkKIAkJcmV0dXJuIEVOT01F TTsKIApAQCAtMjA1LDcgKzIxMyw3IEBACiAJCQlEKCJmcmVlaW5nIG5vdCBlbXB0eSBtb25pdG9y IGFycmF5IGZvciAlcyAoJWQgZGFuZ2xpbmcgbW9uaXRvcnMpISIsIGtyaW5nLT5uYW1lLAogCQkJ CQlrcmluZy0+bl9tb25pdG9ycyk7CiAJCX0KLQkJZnJlZShrcmluZy0+bW9uaXRvcnMsIE1fREVW QlVGKTsKKwkJbm1fb3NfZnJlZShrcmluZy0+bW9uaXRvcnMpOwogCQlrcmluZy0+bW9uaXRvcnMg PSBOVUxMOwogCQlrcmluZy0+bWF4X21vbml0b3JzID0gMDsKIAkJa3JpbmctPm5fbW9uaXRvcnMg PSAwOwpAQCAtMjI5LDIwICsyMzcsMjAgQEAKIHN0YXRpYyBpbnQKIG5ldG1hcF9tb25pdG9yX2Fk ZChzdHJ1Y3QgbmV0bWFwX2tyaW5nICpta3JpbmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5n LCBpbnQgemNvcHkpCiB7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgZXJyb3IgPSBOTV9JUlFfQ09N UExFVEVEOwogCiAJLyogc2luY2hyb25pemUgd2l0aCBjb25jdXJyZW50bHkgcnVubmluZyBubV9z eW5jKClzICovCi0Jbm1fa3JfZ2V0KGtyaW5nKTsKKwlubV9rcl9zdG9wKGtyaW5nLCBOTV9LUl9M T0NLRUQpOwogCS8qIG1ha2Ugc3VyZSB0aGUgbW9uaXRvciBhcnJheSBleGlzdHMgYW5kIGlzIGJp ZyBlbm91Z2ggKi8KIAllcnJvciA9IG5tX21vbml0b3JfYWxsb2Moa3JpbmcsIGtyaW5nLT5uX21v bml0b3JzICsgMSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAlrcmluZy0+bW9uaXRvcnNb a3JpbmctPm5fbW9uaXRvcnNdID0gbWtyaW5nOwotCW1rcmluZy0+bW9uX3BvcyA9IGtyaW5nLT5u X21vbml0b3JzOworCW1rcmluZy0+bW9uX3Bvc1trcmluZy0+dHhdID0ga3JpbmctPm5fbW9uaXRv cnM7CiAJa3JpbmctPm5fbW9uaXRvcnMrKzsKIAlpZiAoa3JpbmctPm5fbW9uaXRvcnMgPT0gMSkg ewogCQkvKiB0aGlzIGlzIHRoZSBmaXJzdCBtb25pdG9yLCBpbnRlcmNlcHQgY2FsbGJhY2tzICov Ci0JCUQoIiVzOiBpbnRlcmNlcHQgY2FsbGJhY2tzIG9uICVzIiwgbWtyaW5nLT5uYW1lLCBrcmlu Zy0+bmFtZSk7CisJCU5EKCIlczogaW50ZXJjZXB0IGNhbGxiYWNrcyBvbiAlcyIsIG1rcmluZy0+ bmFtZSwga3JpbmctPm5hbWUpOwogCQlrcmluZy0+bW9uX3N5bmMgPSBrcmluZy0+bm1fc3luYzsK IAkJLyogemNvcHkgbW9uaXRvcnMgZG8gbm90IG92ZXJyaWRlIG5tX25vdGlmeSgpLCBidXQKIAkJ ICogd2Ugc2F2ZSB0aGUgb3JpZ2luYWwgb25lIHJlZ2FyZGxlc3MsIHNvIHRoYXQKQEAgLTI2NSw3 ICsyNzMsNyBAQAogCX0KIAogb3V0OgotCW5tX2tyX3B1dChrcmluZyk7CisJbm1fa3Jfc3RhcnQo a3JpbmcpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjc2LDI4ICsyODQsMzAgQEAKIHN0YXRp YyB2b2lkCiBuZXRtYXBfbW9uaXRvcl9kZWwoc3RydWN0IG5ldG1hcF9rcmluZyAqbWtyaW5nLCBz dHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZykKIHsKKwl1aW50MzJfdCBtb25fcG9zOwogCS8qIHNp bmNocm9uaXplIHdpdGggY29uY3VycmVudGx5IHJ1bm5pbmcgbm1fc3luYygpcyAqLwotCW5tX2ty X2dldChrcmluZyk7CisJbm1fa3Jfc3RvcChrcmluZywgTk1fS1JfTE9DS0VEKTsKIAlrcmluZy0+ bl9tb25pdG9ycy0tOwotCWlmIChta3JpbmctPm1vbl9wb3MgIT0ga3JpbmctPm5fbW9uaXRvcnMp IHsKLQkJa3JpbmctPm1vbml0b3JzW21rcmluZy0+bW9uX3Bvc10gPSBrcmluZy0+bW9uaXRvcnNb a3JpbmctPm5fbW9uaXRvcnNdOwotCQlrcmluZy0+bW9uaXRvcnNbbWtyaW5nLT5tb25fcG9zXS0+ bW9uX3BvcyA9IG1rcmluZy0+bW9uX3BvczsKKwltb25fcG9zID0gbWtyaW5nLT5tb25fcG9zW2ty aW5nLT50eF07CisJaWYgKG1vbl9wb3MgIT0ga3JpbmctPm5fbW9uaXRvcnMpIHsKKwkJa3Jpbmct Pm1vbml0b3JzW21vbl9wb3NdID0ga3JpbmctPm1vbml0b3JzW2tyaW5nLT5uX21vbml0b3JzXTsK KwkJa3JpbmctPm1vbml0b3JzW21vbl9wb3NdLT5tb25fcG9zW2tyaW5nLT50eF0gPSBtb25fcG9z OwogCX0KIAlrcmluZy0+bW9uaXRvcnNba3JpbmctPm5fbW9uaXRvcnNdID0gTlVMTDsKIAlpZiAo a3JpbmctPm5fbW9uaXRvcnMgPT0gMCkgewogCQkvKiB0aGlzIHdhcyB0aGUgbGFzdCBtb25pdG9y LCByZXN0b3JlIGNhbGxiYWNrcyAgYW5kIGRlbGV0ZSBtb25pdG9yIGFycmF5ICovCi0JCUQoIiVz OiByZXN0b3Jpbmcgc3luYyBvbiAlczogJXAiLCBta3JpbmctPm5hbWUsIGtyaW5nLT5uYW1lLCBr cmluZy0+bW9uX3N5bmMpOworCQlORCgiJXM6IHJlc3RvcmluZyBzeW5jIG9uICVzOiAlcCIsIG1r cmluZy0+bmFtZSwga3JpbmctPm5hbWUsIGtyaW5nLT5tb25fc3luYyk7CiAJCWtyaW5nLT5ubV9z eW5jID0ga3JpbmctPm1vbl9zeW5jOwogCQlrcmluZy0+bW9uX3N5bmMgPSBOVUxMOwogCQlpZiAo a3JpbmctPnR4ID09IE5SX1JYKSB7Ci0JCQlEKCIlczogcmVzdG9yaW5nIG5vdGlmeSBvbiAlczog JXAiLCAKKwkJCU5EKCIlczogcmVzdG9yaW5nIG5vdGlmeSBvbiAlczogJXAiLAogCQkJCQlta3Jp bmctPm5hbWUsIGtyaW5nLT5uYW1lLCBrcmluZy0+bW9uX25vdGlmeSk7CiAJCQlrcmluZy0+bm1f bm90aWZ5ID0ga3JpbmctPm1vbl9ub3RpZnk7CiAJCQlrcmluZy0+bW9uX25vdGlmeSA9IE5VTEw7 CiAJCX0KIAkJbm1fbW9uaXRvcl9kZWFsbG9jKGtyaW5nKTsKIAl9Ci0Jbm1fa3JfcHV0KGtyaW5n KTsKKwlubV9rcl9zdGFydChrcmluZyk7CiB9CiAKIApAQCAtMzE2LDcgKzMyNiw3IEBACiAJZm9y X3J4X3R4KHQpIHsKIAkJdV9pbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmlu Z3MobmEsIHQpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0 KSArIDE7IGkrKykgewogCQkJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0 KVtpXTsKIAkJCXVfaW50IGo7CiAKQEAgLTMyNiw4ICszMzYsMTAgQEAKIAkJCQlzdHJ1Y3QgbmV0 bWFwX21vbml0b3JfYWRhcHRlciAqbW5hID0KIAkJCQkJKHN0cnVjdCBuZXRtYXBfbW9uaXRvcl9h ZGFwdGVyICopbWtyaW5nLT5uYTsKIAkJCQkvKiBmb3JnZXQgYWJvdXQgdGhpcyBhZGFwdGVyICov Ci0JCQkJbmV0bWFwX2FkYXB0ZXJfcHV0KG1uYS0+cHJpdi5ucF9uYSk7Ci0JCQkJbW5hLT5wcml2 Lm5wX25hID0gTlVMTDsKKwkJCQlpZiAobW5hLT5wcml2Lm5wX25hICE9IE5VTEwpIHsKKwkJCQkJ bmV0bWFwX2FkYXB0ZXJfcHV0KG1uYS0+cHJpdi5ucF9uYSk7CisJCQkJCW1uYS0+cHJpdi5ucF9u YSA9IE5VTEw7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMzQ2LDcgKzM1OCw3IEBACiAJc3Ry dWN0IG5ldG1hcF9hZGFwdGVyICpwbmEgPSBwcml2LT5ucF9uYTsKIAlzdHJ1Y3QgbmV0bWFwX2ty aW5nICprcmluZywgKm1rcmluZzsKIAlpbnQgaTsKLQllbnVtIHR4cnggdDsKKwllbnVtIHR4cngg dCwgczsKIAogCU5EKCIlcDogb25vZmYgJWQiLCBuYSwgb25vZmYpOwogCWlmIChvbm9mZikgewpA QCAtMzU2LDI3ICszNjgsNDggQEAKIAkJCXJldHVybiBFTlhJTzsKIAkJfQogCQlmb3JfcnhfdHgo dCkgewotCQkJaWYgKG1uYS0+ZmxhZ3MgJiBubV90eHJ4MmZsYWcodCkpIHsKLQkJCQlmb3IgKGkg PSBwcml2LT5ucF9xZmlyc3RbdF07IGkgPCBwcml2LT5ucF9xbGFzdFt0XTsgaSsrKSB7Ci0JCQkJ CWtyaW5nID0gJk5NUihwbmEsIHQpW2ldOwotCQkJCQlta3JpbmcgPSAmbmEtPnJ4X3JpbmdzW2ld OwotCQkJCQluZXRtYXBfbW9uaXRvcl9hZGQobWtyaW5nLCBrcmluZywgem1vbik7CisJCQlmb3Ig KGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKSB7CisJCQkJbWtyaW5n ID0gJk5NUihuYSwgdClbaV07CisJCQkJaWYgKCFubV9rcmluZ19wZW5kaW5nX29uKG1rcmluZykp CisJCQkJCWNvbnRpbnVlOworCQkJCW1rcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT047CisJ CQkJaWYgKHQgPT0gTlJfVFgpCisJCQkJCWNvbnRpbnVlOworCQkJCWZvcl9yeF90eChzKSB7CisJ CQkJCWlmIChpID4gbm1hX2dldF9ucmluZ3MocG5hLCBzKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJ CQlpZiAobW5hLT5mbGFncyAmIG5tX3R4cngyZmxhZyhzKSkgeworCQkJCQkJa3JpbmcgPSAmTk1S KHBuYSwgcylbaV07CisJCQkJCQluZXRtYXBfbW9uaXRvcl9hZGQobWtyaW5nLCBrcmluZywgem1v bik7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KIAkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRN QVBfT047CiAJfSBlbHNlIHsKLQkJaWYgKHBuYSA9PSBOVUxMKSB7Ci0JCQlEKCIlczogcGFyZW50 IGxlZnQgbmV0bWFwIG1vZGUsIG5vdGhpbmcgdG8gcmVzdG9yZSIsIG5hLT5uYW1lKTsKLQkJCXJl dHVybiAwOwotCQl9Ci0JCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJaWYgKG5h LT5hY3RpdmVfZmRzID09IDApCisJCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9ORVRNQVBfT047CiAJ CWZvcl9yeF90eCh0KSB7Ci0JCQlpZiAobW5hLT5mbGFncyAmIG5tX3R4cngyZmxhZyh0KSkgewot CQkJCWZvciAoaSA9IHByaXYtPm5wX3FmaXJzdFt0XTsgaSA8IHByaXYtPm5wX3FsYXN0W3RdOyBp KyspIHsKLQkJCQkJa3JpbmcgPSAmTk1SKHBuYSwgdClbaV07Ci0JCQkJCW1rcmluZyA9ICZuYS0+ cnhfcmluZ3NbaV07Ci0JCQkJCW5ldG1hcF9tb25pdG9yX2RlbChta3JpbmcsIGtyaW5nKTsKKwkJ CWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsKKwkJCQlt a3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKwkJCQlpZiAoIW5tX2tyaW5nX3BlbmRpbmdfb2ZmKG1r cmluZykpCisJCQkJCWNvbnRpbnVlOworCQkJCW1rcmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBf T0ZGOworCQkJCWlmICh0ID09IE5SX1RYKQorCQkJCQljb250aW51ZTsKKwkJCQkvKiB3ZSBjYW5u b3QgYWNjZXNzIHRoZSBwYXJlbnQga3JpbmdzIGlmIHRoZSBwYXJlbnQKKwkJCQkgKiBoYXMgbGVm dCBuZXRtYXAgbW9kZS4gVGhpcyBpcyBzaWduYWxlZCBieSBhIE5VTEwKKwkJCQkgKiBwbmEgcG9p bnRlcgorCQkJCSAqLworCQkJCWlmIChwbmEgPT0gTlVMTCkKKwkJCQkJY29udGludWU7CisJCQkJ Zm9yX3J4X3R4KHMpIHsKKwkJCQkJaWYgKGkgPiBubWFfZ2V0X25yaW5ncyhwbmEsIHMpKQorCQkJ CQkJY29udGludWU7CisJCQkJCWlmIChtbmEtPmZsYWdzICYgbm1fdHhyeDJmbGFnKHMpKSB7CisJ CQkJCQlrcmluZyA9ICZOTVIocG5hLCBzKVtpXTsKKwkJCQkJCW5ldG1hcF9tb25pdG9yX2RlbCht a3JpbmcsIGtyaW5nKTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMzg2LDcgKzQxOSw3 IEBACiAKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb25zIHNwZWNpZmljIGZvciB6ZXJvLWNvcHkg bW9uaXRvcnMgICAgICAgICAgICAgICAgICAgIAorICogZnVuY3Rpb25zIHNwZWNpZmljIGZvciB6 ZXJvLWNvcHkgbW9uaXRvcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIApAQCAtNDE0LDExICs0NDcsMTEgQEAK IAogCS8qIGdldCB0aGUgcmVsYXNlZCBzbG90cyAocmVsX3Nsb3RzKSAqLwogCWlmICh0eCA9PSBO Ul9UWCkgewotCQliZWcgPSBrcmluZy0+bnJfaHd0YWlsOworCQliZWcgPSBrcmluZy0+bnJfaHd0 YWlsICsgMTsKIAkJZXJyb3IgPSBrcmluZy0+bW9uX3N5bmMoa3JpbmcsIGZsYWdzKTsKIAkJaWYg KGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQllbmQgPSBrcmluZy0+bnJfaHd0YWlsOworCQll bmQgPSBrcmluZy0+bnJfaHd0YWlsICsgMTsKIAl9IGVsc2UgeyAvKiBOUl9SWCAqLwogCQliZWcg PSBrcmluZy0+bnJfaHdjdXI7CiAJCWVuZCA9IGtyaW5nLT5yaGVhZDsKQEAgLTQ1MywxMCArNDg2 LDEwIEBACiAJLyogc3dhcCBtaW4oZnJlZV9zbG90cywgcmVsX3Nsb3RzKSBzbG90cyAqLwogCWlm IChmcmVlX3Nsb3RzIDwgcmVsX3Nsb3RzKSB7CiAJCWJlZyArPSAocmVsX3Nsb3RzIC0gZnJlZV9z bG90cyk7Ci0JCWlmIChiZWcgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpCi0JCQliZWcgLT0ga3Jp bmctPm5rcl9udW1fc2xvdHM7CiAJCXJlbF9zbG90cyA9IGZyZWVfc2xvdHM7CiAJfQorCWlmICh1 bmxpa2VseShiZWcgPj0ga3JpbmctPm5rcl9udW1fc2xvdHMpKQorCQliZWcgLT0ga3JpbmctPm5r cl9udW1fc2xvdHM7CiAKIAlzZW50ID0gcmVsX3Nsb3RzOwogCWZvciAoIDsgcmVsX3Nsb3RzOyBy ZWxfc2xvdHMtLSkgewpAQCAtNTM0LDcgKzU2Nyw3IEBACiAKIC8qCiAgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVu Y3Rpb25zIHNwZWNpZmljIGZvciBjb3B5IG1vbml0b3JzICAgICAgICAgICAgICAgICAgICAKKyAq IGZ1bmN0aW9ucyBzcGVjaWZpYyBmb3IgY29weSBtb25pdG9ycwogICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCkBA IC02NTIsMTcgKzY4NSwyNyBAQAogc3RhdGljIGludAogbmV0bWFwX21vbml0b3JfcGFyZW50X25v dGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgaW50IGZsYWdzKQogeworCWludCAoKm5v dGlmeSkoc3RydWN0IG5ldG1hcF9rcmluZyosIGludCk7CiAJTkQoNSwgIiVzICV4Iiwga3Jpbmct Pm5hbWUsIGZsYWdzKTsKIAkvKiA/eHN5bmMgY2FsbGJhY2tzIGhhdmUgdHJ5Z2V0IGNhbGxlZCBi eSB0aGVpciBjYWxsZXJzCiAJICogKE5JT0NSRUdJRiBhbmQgcG9sbCgpKSwgYnV0IGhlcmUgd2Ug aGF2ZSB0byBjYWxsIGl0CiAJICogYnkgb3Vyc2VsZgogCSAqLwotCWlmIChubV9rcl90cnlnZXQo a3JpbmcpKQotCQlnb3RvIG91dDsKLQluZXRtYXBfbW9uaXRvcl9wYXJlbnRfcnhzeW5jKGtyaW5n LCBOQUZfRk9SQ0VfUkVBRCk7CisJaWYgKG5tX2tyX3RyeWdldChrcmluZywgMCwgTlVMTCkpIHsK KwkJLyogaW4gYWxsIGNhc2VzLCBqdXN0IHNraXAgdGhlIHN5bmMgKi8KKwkJcmV0dXJuIE5NX0lS UV9DT01QTEVURUQ7CisJfQorCWlmIChrcmluZy0+bl9tb25pdG9ycyA+IDApIHsKKwkJbmV0bWFw X21vbml0b3JfcGFyZW50X3J4c3luYyhrcmluZywgTkFGX0ZPUkNFX1JFQUQpOworCQlub3RpZnkg PSBrcmluZy0+bW9uX25vdGlmeTsKKwl9IGVsc2UgeworCQkvKiB3ZSBhcmUgbm8gbG9uZ2VyIG1v bml0b3JpbmcgdGhpcyByaW5nLCBzbyBib3RoCisJCSAqIG1vbl9zeW5jIGFuZCBtb25fbm90aWZ5 IGFyZSBOVUxMCisJCSAqLworCQlub3RpZnkgPSBrcmluZy0+bm1fbm90aWZ5OworCX0KIAlubV9r cl9wdXQoa3JpbmcpOwotb3V0OgotICAgICAgICByZXR1cm4ga3JpbmctPm1vbl9ub3RpZnkoa3Jp bmcsIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIG5vdGlmeShrcmluZywgZmxhZ3MpOwogfQogCiAK QEAgLTY5MSwyMCArNzM0LDI3IEBACiAJc3RydWN0IG5tcmVxIHBubXI7CiAJc3RydWN0IG5ldG1h cF9hZGFwdGVyICpwbmE7IC8qIHBhcmVudCBhZGFwdGVyICovCiAJc3RydWN0IG5ldG1hcF9tb25p dG9yX2FkYXB0ZXIgKm1uYTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IE5VTEw7CiAJaW50IGksIGVy cm9yOwogCWVudW0gdHhyeCB0OwogCWludCB6Y29weSA9IChubXItPm5yX2ZsYWdzICYgTlJfWkNP UFlfTU9OKTsKIAljaGFyIG1vbnN1ZmZbMTBdID0gIiI7CiAKIAlpZiAoKG5tci0+bnJfZmxhZ3Mg JiAoTlJfTU9OSVRPUl9UWCB8IE5SX01PTklUT1JfUlgpKSA9PSAwKSB7CisJCWlmIChubXItPm5y X2ZsYWdzICYgTlJfWkNPUFlfTU9OKSB7CisJCQkvKiB0aGUgZmxhZyBtYWtlcyBubyBzZW5zZSB1 bmxlc3MgeW91IGFyZQorCQkJICogY3JlYXRpbmcgYSBtb25pdG9yCisJCQkgKi8KKwkJCXJldHVy biBFSU5WQUw7CisJCX0KIAkJTkQoIm5vdCBhIG1vbml0b3IiKTsKIAkJcmV0dXJuIDA7CiAJfQog CS8qIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhIG1vbml0b3IgYWRhcHRlciAqLwogCi0JRCgiZmxh Z3MgJXgiLCBubXItPm5yX2ZsYWdzKTsKKwlORCgiZmxhZ3MgJXgiLCBubXItPm5yX2ZsYWdzKTsK IAotCW1uYSA9IG1hbGxvYyhzaXplb2YoKm1uYSksIE1fREVWQlVGLCBNX05PV0FJVCB8IE1fWkVS Tyk7CisJbW5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqbW5hKSk7CiAJaWYgKG1uYSA9PSBOVUxM KSB7CiAJCUQoIm1lbW9yeSBlcnJvciIpOwogCQlyZXR1cm4gRU5PTUVNOwpAQCAtNzE2LDEzICs3 NjYsMTQgQEAKIAkgKiBleGNlcHQgb3RoZXIgbW9uaXRvcnMuCiAJICovCiAJbWVtY3B5KCZwbm1y LCBubXIsIHNpemVvZihwbm1yKSk7Ci0JcG5tci5ucl9mbGFncyAmPSB+KE5SX01PTklUT1JfVFgg fCBOUl9NT05JVE9SX1JYKTsKLQllcnJvciA9IG5ldG1hcF9nZXRfbmEoJnBubXIsICZwbmEsIGNy ZWF0ZSk7CisJcG5tci5ucl9mbGFncyAmPSB+KE5SX01PTklUT1JfVFggfCBOUl9NT05JVE9SX1JY IHwgTlJfWkNPUFlfTU9OKTsKKwllcnJvciA9IG5ldG1hcF9nZXRfbmEoJnBubXIsICZwbmEsICZp ZnAsIGNyZWF0ZSk7CiAJaWYgKGVycm9yKSB7CiAJCUQoInBhcmVudCBsb29rdXAgZmFpbGVkOiAl ZCIsIGVycm9yKTsKKwkJbm1fb3NfZnJlZShtbmEpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotCUQo ImZvdW5kIHBhcmVudDogJXMiLCBwbmEtPm5hbWUpOworCU5EKCJmb3VuZCBwYXJlbnQ6ICVzIiwg cG5hLT5uYW1lKTsKIAogCWlmICghbm1fbmV0bWFwX29uKHBuYSkpIHsKIAkJLyogcGFyZW50IG5v dCBpbiBuZXRtYXAgbW9kZSAqLwpAQCAtNzcwLDggKzgyMSwxMCBAQAogCQkvKiB0byBoYXZlIHpl cm8gY29weSwgd2UgbmVlZCB0byB1c2UgdGhlIHNhbWUgbWVtb3J5IGFsbG9jYXRvcgogCQkgKiBh cyB0aGUgbW9uaXRvcmVkIHBvcnQKIAkJICovCi0JCW1uYS0+dXAubm1fbWVtID0gcG5hLT5ubV9t ZW07CisJCW1uYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQocG5hLT5ubV9tZW0pOwogCQlt bmEtPnVwLm5hX2x1dCA9IHBuYS0+bmFfbHV0OworCQkvKiBhbmQgdGhlIGFsbG9jYXRvciBjYW5u b3QgYmUgY2hhbmdlZCAqLworCQltbmEtPnVwLm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7CiAJ fSBlbHNlIHsKIAkJLyogbm9ybWFsIG1vbml0b3JzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB6ZXJv IGNvcHkgb25lcyAqLwogCQlmb3JfcnhfdHgodCkgewpAQCAtNzk0LDcgKzg0Nyw3IEBACiAJfQog CiAJLyogdGhlIG1vbml0b3Igc3VwcG9ydHMgdGhlIGhvc3QgcmluZ3MgaWZmIHRoZSBwYXJlbnQg ZG9lcyAqLwotCW1uYS0+dXAubmFfZmxhZ3MgPSAocG5hLT5uYV9mbGFncyAmIE5BRl9IT1NUX1JJ TkdTKTsKKwltbmEtPnVwLm5hX2ZsYWdzIHw9IChwbmEtPm5hX2ZsYWdzICYgTkFGX0hPU1RfUklO R1MpOwogCS8qIGEgZG8tbm90aGluZyB0eHN5bmM6IG1vbml0b3JzIGNhbm5vdCBiZSB1c2VkIHRv IGluamVjdCBwYWNrZXRzICovCiAJbW5hLT51cC5ubV90eHN5bmMgPSBuZXRtYXBfbW9uaXRvcl90 eHN5bmM7CiAJbW5hLT51cC5ubV9yeHN5bmMgPSBuZXRtYXBfbW9uaXRvcl9yeHN5bmM7CkBAIC04 MjksMjAgKzg4MiwxOCBAQAogCSpuYSA9ICZtbmEtPnVwOwogCW5ldG1hcF9hZGFwdGVyX2dldCgq bmEpOwogCi0JLyogd3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gYmFjayAqLwotCW5tci0+bnJfdHhf cmluZ3MgPSBtbmEtPnVwLm51bV90eF9yaW5nczsKLQlubXItPm5yX3J4X3JpbmdzID0gbW5hLT51 cC5udW1fcnhfcmluZ3M7Ci0Jbm1yLT5ucl90eF9zbG90cyA9IG1uYS0+dXAubnVtX3R4X2Rlc2M7 Ci0Jbm1yLT5ucl9yeF9zbG90cyA9IG1uYS0+dXAubnVtX3J4X2Rlc2M7Ci0KIAkvKiBrZWVwIHRo ZSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCAqLwotCUQoIm1vbml0b3Igb2siKTsKKwlORCgibW9u aXRvciBvayIpOworCisJLyogZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBpZnAsIGlmIGFueSAq LworCWlmIChpZnApCisJCWlmX3JlbGUoaWZwKTsKIAogCXJldHVybiAwOwogCiBwdXRfb3V0Ogot CW5ldG1hcF9hZGFwdGVyX3B1dChwbmEpOwotCWZyZWUobW5hLCBNX0RFVkJVRik7CisJbmV0bWFw X3VuZ2V0X25hKHBuYSwgaWZwKTsKKwlubV9vc19mcmVlKG1uYSk7CiAJcmV0dXJuIGVycm9yOwog fQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGlu Z3MuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYwotLS0gdXNy L3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYwkyMDE2LTA5LTI5IDAwOjI0 OjQ3LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX29m ZmxvYWRpbmdzLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTM1MTMwMDAgKzAwMDAKQEAgLTEsNSAr MSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFZpbmNlbnpvIE1hZmZpb25lLiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgVmluY2Vuem8gTWFm ZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKQEAgLTIzLDcgKzI0LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLS8qICRGcmVl QlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYyAyOTg5 NTUgMjAxNi0wNS0wMyAwMzo0MToyNVogcGZnICQgKi8KKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9k ZXYvbmV0bWFwL25ldG1hcF9vZmZsb2FkaW5ncy5jIDI2MTkwOSAyMDE0LTAyLTE1IDA0OjUzOjA0 WiBsdWlnaSAkICovCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2luY2x1ZGUgPHN5cy9j ZGVmcy5oPiAvKiBwcmVyZXF1aXNpdGUgKi8KQEAgLTMxLDkgKzMyLDkgQEAKICNpbmNsdWRlIDxz eXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvZXJybm8uaD4KICNpbmNsdWRlIDxzeXMvcGFyYW0u aD4JLyogZGVmaW5lcyB1c2VkIGluIGtlcm5lbC5oICovCi0jaW5jbHVkZSA8c3lzL21hbGxvYy5o PgkvKiB0eXBlcyB1c2VkIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwogI2luY2x1ZGUgPHN5 cy9rZXJuZWwuaD4JLyogdHlwZXMgdXNlZCBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KICNp bmNsdWRlIDxzeXMvc29ja2lvLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2luY2x1ZGUg PHN5cy9zb2NrZXR2YXIuaD4JLyogc3RydWN0IHNvY2tldCAqLwogI2luY2x1ZGUgPHN5cy9zb2Nr ZXQuaD4gLyogc29ja2FkZHJzICovCiAjaW5jbHVkZSA8bmV0L2lmLmg+CkBAIC02NCwyMSArNjUs MjEgQEAKIC8qIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgYmRnX21pc21hdGNoX2RhdGFwYXRo KCkgd2hlbiBpdCBmaW5pc2hlcwogICogYWNjdW11bGF0aW5nIGJ5dGVzIGZvciBhIHNlZ21lbnQs IGluIG9yZGVyIHRvIGZpeCBzb21lIGZpZWxkcyBpbiB0aGUKICAqIHNlZ21lbnQgaGVhZGVycyAo d2hpY2ggc3RpbGwgY29udGFpbiB0aGUgc2FtZSBjb250ZW50IGFzIHRoZSBoZWFkZXIKLSAqIG9m IHRoZSBvcmlnaW5hbCBHU08gcGFja2V0KS4gJ2J1ZicgcG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcg KGUuZy4KLSAqIHRoZSBldGhlcm5ldCBoZWFkZXIpIG9mIHRoZSBzZWdtZW50LCBhbmQgJ2xlbicg aXMgaXRzIGxlbmd0aC4KKyAqIG9mIHRoZSBvcmlnaW5hbCBHU08gcGFja2V0KS4gJ3BrdCcgcG9p bnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIElQCisgKiBoZWFkZXIgb2YgdGhlIHNlZ21lbnQs IHdoaWxlICdsZW4nIGlzIHRoZSBsZW5ndGggb2YgdGhlIElQIHBhY2tldC4KICAqLwotc3RhdGlj IHZvaWQgZ3NvX2ZpeF9zZWdtZW50KHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbiwgdV9pbnQgaWR4 LAotCQkJICAgIHVfaW50IHNlZ21lbnRlZF9ieXRlcywgdV9pbnQgbGFzdF9zZWdtZW50LAotCQkJ ICAgIHVfaW50IHRjcCwgdV9pbnQgaXBobGVuKQorc3RhdGljIHZvaWQKK2dzb19maXhfc2VnbWVu dCh1aW50OF90ICpwa3QsIHNpemVfdCBsZW4sIHVfaW50IGlwdjQsIHVfaW50IGlwaGxlbiwgdV9p bnQgdGNwLAorCQl1X2ludCBpZHgsIHVfaW50IHNlZ21lbnRlZF9ieXRlcywgdV9pbnQgbGFzdF9z ZWdtZW50KQogewotCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAqKShi dWYgKyAxNCk7Ci0Jc3RydWN0IG5tX2lwdjZoZHIgKmlwNmggPSAoc3RydWN0IG5tX2lwdjZoZHIg KikoYnVmICsgMTQpOworCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAq KShwa3QpOworCXN0cnVjdCBubV9pcHY2aGRyICppcDZoID0gKHN0cnVjdCBubV9pcHY2aGRyICop KHBrdCk7CiAJdWludDE2X3QgKmNoZWNrID0gTlVMTDsKIAl1aW50OF90ICpjaGVja19kYXRhID0g TlVMTDsKIAotCWlmIChpcGhsZW4gPT0gMjApIHsKKwlpZiAoaXB2NCkgewogCQkvKiBTZXQgdGhl IElQdjQgIlRvdGFsIExlbmd0aCIgZmllbGQuICovCi0JCWlwaC0+dG90X2xlbiA9IGh0b2JlMTYo bGVuLTE0KTsKKwkJaXBoLT50b3RfbGVuID0gaHRvYmUxNihsZW4pOwogCQlORCgiaXAgdG90YWwg bGVuZ3RoICV1IiwgYmUxNnRvaChpcC0+dG90X2xlbikpOwogCiAJCS8qIFNldCB0aGUgSVB2NCAi SWRlbnRpZmljYXRpb24iIGZpZWxkLiAqLwpAQCAtODcsMTUgKzg4LDE1IEBACiAKIAkJLyogQ29t cHV0ZSBhbmQgaW5zZXJ0IHRoZSBJUHY0IGhlYWRlciBjaGVja3N1bS4gKi8KIAkJaXBoLT5jaGVj ayA9IDA7Ci0JCWlwaC0+Y2hlY2sgPSBubV9jc3VtX2lwdjQoaXBoKTsKKwkJaXBoLT5jaGVjayA9 IG5tX29zX2NzdW1faXB2NChpcGgpOwogCQlORCgiSVAgY3N1bSAleCIsIGJlMTZ0b2goaXBoLT5j aGVjaykpOwotCX0gZWxzZSB7LyogaWYgKGlwaGxlbiA9PSA0MCkgKi8KKwl9IGVsc2UgewogCQkv KiBTZXQgdGhlIElQdjYgIlBheWxvYWQgTGVuIiBmaWVsZC4gKi8KLQkJaXA2aC0+cGF5bG9hZF9s ZW4gPSBodG9iZTE2KGxlbi0xNC1pcGhsZW4pOworCQlpcDZoLT5wYXlsb2FkX2xlbiA9IGh0b2Jl MTYobGVuLWlwaGxlbik7CiAJfQogCiAJaWYgKHRjcCkgewotCQlzdHJ1Y3Qgbm1fdGNwaGRyICp0 Y3BoID0gKHN0cnVjdCBubV90Y3BoZHIgKikoYnVmICsgMTQgKyBpcGhsZW4pOworCQlzdHJ1Y3Qg bm1fdGNwaGRyICp0Y3BoID0gKHN0cnVjdCBubV90Y3BoZHIgKikocGt0ICsgaXBobGVuKTsKIAog CQkvKiBTZXQgdGhlIFRDUCBzZXF1ZW5jZSBudW1iZXIuICovCiAJCXRjcGgtPnNlcSA9IGh0b2Jl MzIoYmUzMnRvaCh0Y3BoLT5zZXEpICsgc2VnbWVudGVkX2J5dGVzKTsKQEAgLTExMCwxMCArMTEx LDEwIEBACiAJCWNoZWNrID0gJnRjcGgtPmNoZWNrOwogCQljaGVja19kYXRhID0gKHVpbnQ4X3Qg Kil0Y3BoOwogCX0gZWxzZSB7IC8qIFVEUCAqLwotCQlzdHJ1Y3Qgbm1fdWRwaGRyICp1ZHBoID0g KHN0cnVjdCBubV91ZHBoZHIgKikoYnVmICsgMTQgKyBpcGhsZW4pOworCQlzdHJ1Y3Qgbm1fdWRw aGRyICp1ZHBoID0gKHN0cnVjdCBubV91ZHBoZHIgKikocGt0ICsgaXBobGVuKTsKIAogCQkvKiBT ZXQgdGhlIFVEUCAnTGVuZ3RoJyBmaWVsZC4gKi8KLQkJdWRwaC0+bGVuID0gaHRvYmUxNihsZW4t MTQtaXBobGVuKTsKKwkJdWRwaC0+bGVuID0gaHRvYmUxNihsZW4taXBobGVuKTsKIAogCQljaGVj ayA9ICZ1ZHBoLT5jaGVjazsKIAkJY2hlY2tfZGF0YSA9ICh1aW50OF90ICopdWRwaDsKQEAgLTEy MSw0OCArMTIyLDgwIEBACiAKIAkvKiBDb21wdXRlIGFuZCBpbnNlcnQgVENQL1VEUCBjaGVja3N1 bS4gKi8KIAkqY2hlY2sgPSAwOwotCWlmIChpcGhsZW4gPT0gMjApCi0JCW5tX2NzdW1fdGNwdWRw X2lwdjQoaXBoLCBjaGVja19kYXRhLCBsZW4tMTQtaXBobGVuLCBjaGVjayk7CisJaWYgKGlwdjQp CisJCW5tX29zX2NzdW1fdGNwdWRwX2lwdjQoaXBoLCBjaGVja19kYXRhLCBsZW4taXBobGVuLCBj aGVjayk7CiAJZWxzZQotCQlubV9jc3VtX3RjcHVkcF9pcHY2KGlwNmgsIGNoZWNrX2RhdGEsIGxl bi0xNC1pcGhsZW4sIGNoZWNrKTsKKwkJbm1fb3NfY3N1bV90Y3B1ZHBfaXB2NihpcDZoLCBjaGVj a19kYXRhLCBsZW4taXBobGVuLCBjaGVjayk7CiAKIAlORCgiVENQL1VEUCBjc3VtICV4IiwgYmUx NnRvaCgqY2hlY2spKTsKIH0KIAorc3RhdGljIGludAordm5ldF9oZHJfaXNfYmFkKHN0cnVjdCBu bV92bmV0X2hkciAqdmgpCit7CisJdWludDhfdCBnc29fdHlwZSA9IHZoLT5nc29fdHlwZSAmIH5W SVJUSU9fTkVUX0hEUl9HU09fRUNOOworCisJcmV0dXJuICgKKwkJKGdzb190eXBlICE9IFZJUlRJ T19ORVRfSERSX0dTT19OT05FICYmCisJCSBnc29fdHlwZSAhPSBWSVJUSU9fTkVUX0hEUl9HU09f VENQVjQgJiYKKwkJIGdzb190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19VRFAgJiYKKwkJIGdz b190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNikKKwkJfHwKKwkJICh2aC0+ZmxhZ3Mg JiB+KFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTQorCQkJICAgICAgIHwgVklSVElPX05FVF9I RFJfRl9EQVRBX1ZBTElEKSkKKwkgICAgICAgKTsKK30KIAogLyogVGhlIFZBTEUgbWlzbWF0Y2gg ZGF0YXBhdGggaW1wbGVtZW50YXRpb24uICovCi12b2lkIGJkZ19taXNtYXRjaF9kYXRhcGF0aChz dHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKm5hLAotCQkJICAgc3RydWN0IG5ldG1hcF92cF9hZGFw dGVyICpkc3RfbmEsCi0JCQkgICBzdHJ1Y3Qgbm1fYmRnX2Z3ZCAqZnRfcCwgc3RydWN0IG5ldG1h cF9yaW5nICpyaW5nLAotCQkJICAgdV9pbnQgKmosIHVfaW50IGxpbSwgdV9pbnQgKmhvd21hbnkp Cit2b2lkCitiZGdfbWlzbWF0Y2hfZGF0YXBhdGgoc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpu YSwKKwkJICAgICAgc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpkc3RfbmEsCisJCSAgICAgIGNv bnN0IHN0cnVjdCBubV9iZGdfZndkICpmdF9wLAorCQkgICAgICBzdHJ1Y3QgbmV0bWFwX3Jpbmcg KmRzdF9yaW5nLAorCQkgICAgICB1X2ludCAqaiwgdV9pbnQgbGltLCB1X2ludCAqaG93bWFueSkK IHsKLQlzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnNsb3QgPSBOVUxMOworCXN0cnVjdCBuZXRtYXBfc2xv dCAqZHN0X3Nsb3QgPSBOVUxMOwogCXN0cnVjdCBubV92bmV0X2hkciAqdmggPSBOVUxMOwotCS8q IE51bWJlciBvZiBzb3VyY2Ugc2xvdHMgdG8gcHJvY2Vzcy4gKi8KLQl1X2ludCBmcmFncyA9IGZ0 X3AtPmZ0X2ZyYWdzOwotCXN0cnVjdCBubV9iZGdfZndkICpmdF9lbmQgPSBmdF9wICsgZnJhZ3M7 CisJY29uc3Qgc3RydWN0IG5tX2JkZ19md2QgKmZ0X2VuZCA9IGZ0X3AgKyBmdF9wLT5mdF9mcmFn czsKIAogCS8qIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9pbnRlcnMuICovCiAJdWludDhfdCAq ZHN0LCAqc3JjOwogCXNpemVfdCBzcmNfbGVuLCBkc3RfbGVuOwogCisJLyogSW5kaWNlcyBhbmQg Y291bnRlcnMgZm9yIHRoZSBkZXN0aW5hdGlvbiByaW5nLiAqLwogCXVfaW50IGpfc3RhcnQgPSAq ajsKKwl1X2ludCBqX2N1ciA9IGpfc3RhcnQ7CiAJdV9pbnQgZHN0X3Nsb3RzID0gMDsKIAotCS8q IElmIHRoZSBzb3VyY2UgcG9ydCB1c2VzIHRoZSBvZmZsb2FkaW5ncywgd2hpbGUgZGVzdGluYXRp b24gZG9lc24ndCwKLQkgKiB3ZSBncmFiIHRoZSBzb3VyY2UgdmlydGlvLW5ldCBoZWFkZXIgYW5k IGRvIHRoZSBvZmZsb2FkaW5ncyBoZXJlLgotCSAqLwotCWlmIChuYS0+dmlydF9oZHJfbGVuICYm ICFkc3RfbmEtPnZpcnRfaGRyX2xlbikgewotCQl2aCA9IChzdHJ1Y3Qgbm1fdm5ldF9oZHIgKilm dF9wLT5mdF9idWY7CisJaWYgKHVubGlrZWx5KGZ0X3AgPT0gZnRfZW5kKSkgeworCQlSRCgzLCAi Tm8gc291cmNlIHNsb3RzIHRvIHByb2Nlc3MiKTsKKwkJcmV0dXJuOwogCX0KIAogCS8qIEluaXQg c291cmNlIGFuZCBkZXN0IHBvaW50ZXJzLiAqLwogCXNyYyA9IGZ0X3AtPmZ0X2J1ZjsKIAlzcmNf bGVuID0gZnRfcC0+ZnRfbGVuOwotCXNsb3QgPSAmcmluZy0+c2xvdFsqal07Ci0JZHN0ID0gTk1C KCZkc3RfbmEtPnVwLCBzbG90KTsKKwlkc3Rfc2xvdCA9ICZkc3RfcmluZy0+c2xvdFtqX2N1cl07 CisJZHN0ID0gTk1CKCZkc3RfbmEtPnVwLCBkc3Rfc2xvdCk7CiAJZHN0X2xlbiA9IHNyY19sZW47 CiAKKwkvKiBJZiB0aGUgc291cmNlIHBvcnQgdXNlcyB0aGUgb2ZmbG9hZGluZ3MsIHdoaWxlIGRl c3RpbmF0aW9uIGRvZXNuJ3QsCisJICogd2UgZ3JhYiB0aGUgc291cmNlIHZpcnRpby1uZXQgaGVh ZGVyIGFuZCBkbyB0aGUgb2ZmbG9hZGluZ3MgaGVyZS4KKwkgKi8KKwlpZiAobmEtPnVwLnZpcnRf aGRyX2xlbiAmJiAhZHN0X25hLT51cC52aXJ0X2hkcl9sZW4pIHsKKwkJdmggPSAoc3RydWN0IG5t X3ZuZXRfaGRyICopc3JjOworCQkvKiBJbml0aWFsIHNhbml0eSBjaGVjayBvbiB0aGUgc291cmNl IHZpcnRpby1uZXQgaGVhZGVyLiBJZgorCQkgKiBzb21ldGhpbmcgc2VlbXMgd3JvbmcsIGp1c3Qg ZHJvcCB0aGUgcGFja2V0LiAqLworCQlpZiAoc3JjX2xlbiA8IG5hLT51cC52aXJ0X2hkcl9sZW4p IHsKKwkJCVJEKDMsICJTaG9ydCBzcmMgdm5ldCBoZWFkZXIsIGRyb3BwaW5nIik7CisJCQlyZXR1 cm47CisJCX0KKwkJaWYgKHZuZXRfaGRyX2lzX2JhZCh2aCkpIHsKKwkJCVJEKDMsICJCYWQgc3Jj IHZuZXQgaGVhZGVyLCBkcm9wcGluZyIpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJLyogV2Ug YXJlIHByb2Nlc3NpbmcgdGhlIGZpcnN0IGlucHV0IHNsb3QgYW5kIHRoZXJlIGlzIGEgbWlzbWF0 Y2gKIAkgKiBiZXR3ZWVuIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gdmlydF9oZHJfbGVuIChTSEwg YW5kIERITCkuCiAJICogV2hlbiB0aGUgYSBjbGllbnQgaXMgdXNpbmcgdmlydGlvLW5ldCBoZWFk ZXJzLCB0aGUgaGVhZGVyIGxlbmd0aApAQCAtMTg1LDE0ICsyMTgsMTQgQEAKIAkgKiAgMTIgfCAg IDAgfCBkb2Vzbid0IGV4aXN0CiAJICogIDEyIHwgIDEwIHwgY29waWVkIGZyb20gdGhlIGZpcnN0 IDEwIGJ5dGVzIG9mIHNvdXJjZSBoZWFkZXIKIAkgKi8KLQliemVybyhkc3QsIGRzdF9uYS0+dmly dF9oZHJfbGVuKTsKLQlpZiAobmEtPnZpcnRfaGRyX2xlbiAmJiBkc3RfbmEtPnZpcnRfaGRyX2xl bikKKwliemVybyhkc3QsIGRzdF9uYS0+dXAudmlydF9oZHJfbGVuKTsKKwlpZiAobmEtPnVwLnZp cnRfaGRyX2xlbiAmJiBkc3RfbmEtPnVwLnZpcnRfaGRyX2xlbikKIAkJbWVtY3B5KGRzdCwgc3Jj LCBzaXplb2Yoc3RydWN0IG5tX3ZuZXRfaGRyKSk7CiAJLyogU2tpcCB0aGUgdmlydGlvLW5ldCBo ZWFkZXJzLiAqLwotCXNyYyArPSBuYS0+dmlydF9oZHJfbGVuOwotCXNyY19sZW4gLT0gbmEtPnZp cnRfaGRyX2xlbjsKLQlkc3QgKz0gZHN0X25hLT52aXJ0X2hkcl9sZW47Ci0JZHN0X2xlbiA9IGRz dF9uYS0+dmlydF9oZHJfbGVuICsgc3JjX2xlbjsKKwlzcmMgKz0gbmEtPnVwLnZpcnRfaGRyX2xl bjsKKwlzcmNfbGVuIC09IG5hLT51cC52aXJ0X2hkcl9sZW47CisJZHN0ICs9IGRzdF9uYS0+dXAu dmlydF9oZHJfbGVuOworCWRzdF9sZW4gPSBkc3RfbmEtPnVwLnZpcnRfaGRyX2xlbiArIHNyY19s ZW47CiAKIAkvKiBIZXJlIGl0IGNvdWxkIGJlIGRzdF9sZW4gPT0gMCAod2hpY2ggaW1wbGllcyBz cmNfbGVuID09IDApLAogCSAqIHNvIHdlIGF2b2lkIHBhc3NpbmcgYSB6ZXJvIGxlbmd0aCBmcmFn bWVudC4KQEAgLTIxNCwxNiArMjQ3LDI3IEBACiAJCXVfaW50IGdzb19pZHggPSAwOwogCQkvKiBQ YXlsb2FkIGRhdGEgYnl0ZXMgc2VnbWVudGVkIHNvIGZhciAoZS5nLiBUQ1AgZGF0YSBieXRlcyku ICovCiAJCXVfaW50IHNlZ21lbnRlZF9ieXRlcyA9IDA7CisJCS8qIElzIHRoaXMgYW4gSVB2NCBv ciBJUHY2IEdTTyBwYWNrZXQ/ICovCisJCXVfaW50IGlwdjQgPSAwOwogCQkvKiBMZW5ndGggb2Yg dGhlIElQIGhlYWRlciAoMjAgaWYgSVB2NCwgNDAgaWYgSVB2NikuICovCiAJCXVfaW50IGlwaGxl biA9IDA7CisJCS8qIExlbmd0aCBvZiB0aGUgRXRoZXJuZXQgaGVhZGVyICgxOCBpZiA4MDIuMXEs IG90aGVyd2lzZSAxNCkuICovCisJCXVfaW50IGV0aGhsZW4gPSAxNDsKIAkJLyogSXMgdGhpcyBh IFRDUCBvciBhbiBVRFAgR1NPIHBhY2tldD8gKi8KIAkJdV9pbnQgdGNwID0gKCh2aC0+Z3NvX3R5 cGUgJiB+VklSVElPX05FVF9IRFJfR1NPX0VDTikKIAkJCQk9PSBWSVJUSU9fTkVUX0hEUl9HU09f VURQKSA/IDAgOiAxOwogCiAJCS8qIFNlZ21lbnQgdGhlIEdTTyBwYWNrZXQgY29udGFpbmVkIGlu dG8gdGhlIGlucHV0IHNsb3RzIChmcmFncykuICovCi0JCXdoaWxlIChmdF9wICE9IGZ0X2VuZCkg eworCQlmb3IgKDs7KSB7CiAJCQlzaXplX3QgY29weTsKIAorCQkJaWYgKGRzdF9zbG90cyA+PSAq aG93bWFueSkgeworCQkJCS8qIFdlIHN0aWxsIGhhdmUgd29yayB0byBkbywgYnV0IHdlJ3ZlIHJ1 biBvdXQgb2YKKwkJCQkgKiBkc3Qgc2xvdHMsIHNvIHdlIGhhdmUgdG8gZHJvcCB0aGUgcGFja2V0 LiAqLworCQkJCVJEKDMsICJOb3QgZW5vdWdoIHNsb3RzLCBkcm9wcGluZyBHU08gcGFja2V0Iik7 CisJCQkJcmV0dXJuOworCQkJfQorCiAJCQkvKiBHcmFiIHRoZSBHU08gaGVhZGVyIGlmIHdlIGRv bid0IGhhdmUgaXQuICovCiAJCQlpZiAoIWdzb19oZHIpIHsKIAkJCQl1aW50MTZfdCBldGhlcnR5 cGU7CkBAIC0yMzEsMjggKzI3NSw3NSBAQAogCQkJCWdzb19oZHIgPSBzcmM7CiAKIAkJCQkvKiBM b29rIGF0IHRoZSAnRXRoZXJ0eXBlJyBmaWVsZCB0byBzZWUgaWYgdGhpcyBwYWNrZXQKLQkJCQkg KiBpcyBJUHY0IG9yIElQdjYuCi0JCQkJICovCi0JCQkJZXRoZXJ0eXBlID0gYmUxNnRvaCgqKCh1 aW50MTZfdCAqKShnc29faGRyICArIDEyKSkpOwotCQkJCWlmIChldGhlcnR5cGUgPT0gMHgwODAw KQotCQkJCQlpcGhsZW4gPSAyMDsKLQkJCQllbHNlIC8qIGlmIChldGhlcnR5cGUgPT0gMHg4NkRE KSAqLwotCQkJCQlpcGhsZW4gPSA0MDsKKwkJCQkgKiBpcyBJUHY0IG9yIElQdjYsIHRha2luZyBp bnRvIGFjY291bnQgVkxBTgorCQkJCSAqIGVuY2Fwc3VsYXRpb24uICovCisJCQkJZm9yICg7Oykg eworCQkJCQlpZiAoc3JjX2xlbiA8IGV0aGhsZW4pIHsKKwkJCQkJCVJEKDMsICJTaG9ydCBHU08g ZnJhZ21lbnQgW2V0aF0sIGRyb3BwaW5nIik7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQkJ ZXRoZXJ0eXBlID0gYmUxNnRvaCgqKCh1aW50MTZfdCAqKQorCQkJCQkJCSAgICAoZ3NvX2hkciAr IGV0aGhsZW4gLSAyKSkpOworCQkJCQlpZiAoZXRoZXJ0eXBlICE9IDB4ODEwMCkgLyogbm90IDgw Mi4xcSAqLworCQkJCQkJYnJlYWs7CisJCQkJCWV0aGhsZW4gKz0gNDsKKwkJCQl9CisJCQkJc3dp dGNoIChldGhlcnR5cGUpIHsKKwkJCQkJY2FzZSAweDA4MDA6ICAvKiBJUHY0ICovCisJCQkJCXsK KwkJCQkJCXN0cnVjdCBubV9pcGhkciAqaXBoID0gKHN0cnVjdCBubV9pcGhkciAqKQorCQkJCQkJ CQkJKGdzb19oZHIgKyBldGhobGVuKTsKKworCQkJCQkJaWYgKHNyY19sZW4gPCBldGhobGVuICsg MjApIHsKKwkJCQkJCQlSRCgzLCAiU2hvcnQgR1NPIGZyYWdtZW50ICIKKwkJCQkJCQkgICAgICAi W0lQdjRdLCBkcm9wcGluZyIpOworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJCWlwdjQg PSAxOworCQkJCQkJaXBobGVuID0gNCAqIChpcGgtPnZlcnNpb25faWhsICYgMHgwRik7CisJCQkJ CQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDB4ODZERDogIC8qIElQdjYgKi8KKwkJCQkJCWlw djQgPSAwOworCQkJCQkJaXBobGVuID0gNDA7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoK KwkJCQkJCVJEKDMsICJVbnN1cHBvcnRlZCBldGhlcnR5cGUsICIKKwkJCQkJCSAgICAgICJkcm9w cGluZyBHU08gcGFja2V0Iik7CisJCQkJCQlyZXR1cm47CisJCQkJfQogCQkJCU5EKDMsICJ0eXBl PSUwNHgiLCBldGhlcnR5cGUpOwogCisJCQkJaWYgKHNyY19sZW4gPCBldGhobGVuICsgaXBobGVu KSB7CisJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgW0lQXSwgZHJvcHBpbmciKTsKKwkJ CQkJcmV0dXJuOworCQkJCX0KKwogCQkJCS8qIENvbXB1dGUgZ3NvX2hkcl9sZW4uIEZvciBUQ1Ag d2UgbmVlZCB0byByZWFkIHRoZQogCQkJCSAqIGNvbnRlbnQgb2YgdGhlICdEYXRhIE9mZnNldCcg ZmllbGQuCiAJCQkJICovCiAJCQkJaWYgKHRjcCkgewotCQkJCQlzdHJ1Y3Qgbm1fdGNwaGRyICp0 Y3BoID0KLQkJCQkJCShzdHJ1Y3Qgbm1fdGNwaGRyICopJmdzb19oZHJbMTQraXBobGVuXTsKKwkJ CQkJc3RydWN0IG5tX3RjcGhkciAqdGNwaCA9IChzdHJ1Y3Qgbm1fdGNwaGRyICopCisJCQkJCQkJ CShnc29faGRyICsgZXRoaGxlbiArIGlwaGxlbik7CisKKwkJCQkJaWYgKHNyY19sZW4gPCBldGho bGVuICsgaXBobGVuICsgMjApIHsKKwkJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgIgor CQkJCQkJCQkiW1RDUF0sIGRyb3BwaW5nIik7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQkJ Z3NvX2hkcl9sZW4gPSBldGhobGVuICsgaXBobGVuICsKKwkJCQkJCSAgICAgIDQgKiAodGNwaC0+ ZG9mZiA+PiA0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlnc29faGRyX2xlbiA9IGV0aGhsZW4gKyBp cGhsZW4gKyA4OyAvKiBVRFAgKi8KKwkJCQl9CiAKLQkJCQkJZ3NvX2hkcl9sZW4gPSAxNCArIGlw aGxlbiArIDQqKHRjcGgtPmRvZmYgPj4gNCk7Ci0JCQkJfSBlbHNlCi0JCQkJCWdzb19oZHJfbGVu ID0gMTQgKyBpcGhsZW4gKyA4OyAvKiBVRFAgKi8KKwkJCQlpZiAoc3JjX2xlbiA8IGdzb19oZHJf bGVuKSB7CisJCQkJCVJEKDMsICJTaG9ydCBHU08gZnJhZ21lbnQgW1RDUC9VRFBdLCBkcm9wcGlu ZyIpOworCQkJCQlyZXR1cm47CisJCQkJfQogCiAJCQkJTkQoMywgImdzb19oZHJfbGVuICV1IGdz b19tdHUgJWQiLCBnc29faGRyX2xlbiwKLQkJCQkJCQkJZHN0X25hLT5tZnMpOworCQkJCQkJCQkg ICBkc3RfbmEtPm1mcyk7CiAKIAkJCQkvKiBBZHZhbmNlIHNvdXJjZSBwb2ludGVycy4gKi8KIAkJ CQlzcmMgKz0gZ3NvX2hkcl9sZW47CkBAIC0yNjMsNyArMzU0LDYgQEAKIAkJCQkJCWJyZWFrOwog CQkJCQlzcmMgPSBmdF9wLT5mdF9idWY7CiAJCQkJCXNyY19sZW4gPSBmdF9wLT5mdF9sZW47Ci0J CQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCX0KIApAQCAtMjg5LDI1ICszNzksMjQgQEAKIAkJCQkv KiBBZnRlciByYXcgc2VnbWVudGF0aW9uLCB3ZSBtdXN0IGZpeCBzb21lIGhlYWRlcgogCQkJCSAq IGZpZWxkcyBhbmQgY29tcHV0ZSBjaGVja3N1bXMsIGluIGEgcHJvdG9jb2wgZGVwZW5kZW50CiAJ CQkJICogd2F5LiAqLwotCQkJCWdzb19maXhfc2VnbWVudChkc3QsIGdzb19ieXRlcywgZ3NvX2lk eCwKLQkJCQkJCXNlZ21lbnRlZF9ieXRlcywKLQkJCQkJCXNyY19sZW4gPT0gMCAmJiBmdF9wICsg MSA9PSBmdF9lbmQsCi0JCQkJCQl0Y3AsIGlwaGxlbik7CisJCQkJZ3NvX2ZpeF9zZWdtZW50KGRz dCArIGV0aGhsZW4sIGdzb19ieXRlcyAtIGV0aGhsZW4sCisJCQkJCQlpcHY0LCBpcGhsZW4sIHRj cCwKKwkJCQkJCWdzb19pZHgsIHNlZ21lbnRlZF9ieXRlcywKKwkJCQkJCXNyY19sZW4gPT0gMCAm JiBmdF9wICsgMSA9PSBmdF9lbmQpOwogCiAJCQkJTkQoImZyYW1lICV1IGNvbXBsZXRlZCB3aXRo ICVkIGJ5dGVzIiwgZ3NvX2lkeCwgKGludClnc29fYnl0ZXMpOwotCQkJCXNsb3QtPmxlbiA9IGdz b19ieXRlczsKLQkJCQlzbG90LT5mbGFncyA9IDA7Ci0JCQkJc2VnbWVudGVkX2J5dGVzICs9IGdz b19ieXRlcyAtIGdzb19oZHJfbGVuOwotCisJCQkJZHN0X3Nsb3QtPmxlbiA9IGdzb19ieXRlczsK KwkJCQlkc3Rfc2xvdC0+ZmxhZ3MgPSAwOwogCQkJCWRzdF9zbG90cysrOwotCi0JCQkJLyogTmV4 dCBkZXN0aW5hdGlvbiBzbG90LiAqLwotCQkJCSpqID0gbm1fbmV4dCgqaiwgbGltKTsKLQkJCQlz bG90ID0gJnJpbmctPnNsb3RbKmpdOwotCQkJCWRzdCA9IE5NQigmZHN0X25hLT51cCwgc2xvdCk7 CisJCQkJc2VnbWVudGVkX2J5dGVzICs9IGdzb19ieXRlcyAtIGdzb19oZHJfbGVuOwogCiAJCQkJ Z3NvX2J5dGVzID0gMDsKIAkJCQlnc29faWR4Kys7CisKKwkJCQkvKiBOZXh0IGRlc3RpbmF0aW9u IHNsb3QuICovCisJCQkJal9jdXIgPSBubV9uZXh0KGpfY3VyLCBsaW0pOworCQkJCWRzdF9zbG90 ID0gJmRzdF9yaW5nLT5zbG90W2pfY3VyXTsKKwkJCQlkc3QgPSBOTUIoJmRzdF9uYS0+dXAsIGRz dF9zbG90KTsKIAkJCX0KIAogCQkJLyogTmV4dCBpbnB1dCBzbG90LiAqLwpAQCAtMzQyLDEwICs0 MzEsMTAgQEAKIAkJCS8qIEluaXQvdXBkYXRlIHRoZSBwYWNrZXQgY2hlY2tzdW0gaWYgbmVlZGVk LiAqLwogCQkJaWYgKHZoICYmICh2aC0+ZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NT VU0pKSB7CiAJCQkJaWYgKCFkc3Rfc2xvdHMpCi0JCQkJCWNzdW0gPSBubV9jc3VtX3JhdyhzcmMg KyB2aC0+Y3N1bV9zdGFydCwKKwkJCQkJY3N1bSA9IG5tX29zX2NzdW1fcmF3KHNyYyArIHZoLT5j c3VtX3N0YXJ0LAogCQkJCQkJCQlzcmNfbGVuIC0gdmgtPmNzdW1fc3RhcnQsIDApOwogCQkJCWVs c2UKLQkJCQkJY3N1bSA9IG5tX2NzdW1fcmF3KHNyYywgc3JjX2xlbiwgY3N1bSk7CisJCQkJCWNz dW0gPSBubV9vc19jc3VtX3JhdyhzcmMsIHNyY19sZW4sIGNzdW0pOwogCQkJfQogCiAJCQkvKiBS b3VuZCB0byBhIG11bHRpcGxlIG9mIDY0ICovCkBAIC0zNTksNDQgKzQ0OCw0MyBAQAogCQkJfSBl bHNlIHsKIAkJCQltZW1jcHkoZHN0LCBzcmMsIChpbnQpc3JjX2xlbik7CiAJCQl9Ci0JCQlzbG90 LT5sZW4gPSBkc3RfbGVuOwotCisJCQlkc3Rfc2xvdC0+bGVuID0gZHN0X2xlbjsKIAkJCWRzdF9z bG90cysrOwogCiAJCQkvKiBOZXh0IGRlc3RpbmF0aW9uIHNsb3QuICovCi0JCQkqaiA9IG5tX25l eHQoKmosIGxpbSk7Ci0JCQlzbG90ID0gJnJpbmctPnNsb3RbKmpdOwotCQkJZHN0ID0gTk1CKCZk c3RfbmEtPnVwLCBzbG90KTsKKwkJCWpfY3VyID0gbm1fbmV4dChqX2N1ciwgbGltKTsKKwkJCWRz dF9zbG90ID0gJmRzdF9yaW5nLT5zbG90W2pfY3VyXTsKKwkJCWRzdCA9IE5NQigmZHN0X25hLT51 cCwgZHN0X3Nsb3QpOwogCiAJCQkvKiBOZXh0IHNvdXJjZSBzbG90LiAqLwogCQkJZnRfcCsrOwog CQkJc3JjID0gZnRfcC0+ZnRfYnVmOwogCQkJZHN0X2xlbiA9IHNyY19sZW4gPSBmdF9wLT5mdF9s ZW47Ci0KIAkJfQogCiAJCS8qIEZpbmFsaXplIChmb2xkKSB0aGUgY2hlY2tzdW0gaWYgbmVlZGVk LiAqLwogCQlpZiAoY2hlY2sgJiYgdmggJiYgKHZoLT5mbGFncyAmIFZJUlRJT19ORVRfSERSX0Zf TkVFRFNfQ1NVTSkpIHsKLQkJCSpjaGVjayA9IG5tX2NzdW1fZm9sZChjc3VtKTsKKwkJCSpjaGVj ayA9IG5tX29zX2NzdW1fZm9sZChjc3VtKTsKIAkJfQogCQlORCgzLCAidXNpbmcgJXUgZHN0X3Ns b3RzIiwgZHN0X3Nsb3RzKTsKIAotCQkvKiBBIHNlY29uZCBwYXNzIG9uIHRoZSBkZXNpdGF0aW9u cyBzbG90cyB0byBzZXQgdGhlIHNsb3QgZmxhZ3MsCisJCS8qIEEgc2Vjb25kIHBhc3Mgb24gdGhl IGRlc3RpbmF0aW9uIHNsb3RzIHRvIHNldCB0aGUgc2xvdCBmbGFncywKIAkJICogdXNpbmcgdGhl IHJpZ2h0IG51bWJlciBvZiBkZXN0aW5hdGlvbiBzbG90cy4KIAkJICovCi0JCXdoaWxlIChqX3N0 YXJ0ICE9ICpqKSB7Ci0JCQlzbG90ID0gJnJpbmctPnNsb3Rbal9zdGFydF07Ci0JCQlzbG90LT5m bGFncyA9IChkc3Rfc2xvdHMgPDwgOCl8IE5TX01PUkVGUkFHOworCQl3aGlsZSAoal9zdGFydCAh PSBqX2N1cikgeworCQkJZHN0X3Nsb3QgPSAmZHN0X3JpbmctPnNsb3Rbal9zdGFydF07CisJCQlk c3Rfc2xvdC0+ZmxhZ3MgPSAoZHN0X3Nsb3RzIDw8IDgpfCBOU19NT1JFRlJBRzsKIAkJCWpfc3Rh cnQgPSBubV9uZXh0KGpfc3RhcnQsIGxpbSk7CiAJCX0KIAkJLyogQ2xlYXIgTlNfTU9SRUZSQUcg ZmxhZyBvbiBsYXN0IGVudHJ5LiAqLwotCQlzbG90LT5mbGFncyA9IChkc3Rfc2xvdHMgPDwgOCk7 CisJCWRzdF9zbG90LT5mbGFncyA9IChkc3Rfc2xvdHMgPDwgOCk7CiAJfQogCi0JLyogVXBkYXRl IGhvd21hbnkuICovCisJLyogVXBkYXRlIGhvd21hbnkgYW5kIGouIFRoaXMgaXMgdG8gY29tbWl0 IHRoZSB1c2Ugb2YKKwkgKiB0aG9zZSBzbG90cyBpbiB0aGUgZGVzdGluYXRpb24gcmluZy4gKi8K IAlpZiAodW5saWtlbHkoZHN0X3Nsb3RzID4gKmhvd21hbnkpKSB7Ci0JCWRzdF9zbG90cyA9ICpo b3dtYW55OwotCQlEKCJTbG90IGFsbG9jYXRpb24gZXJyb3I6IFNob3VsZCBuZXZlciBoYXBwZW4i KTsKKwkJRCgiU2xvdCBhbGxvY2F0aW9uIGVycm9yOiBUaGlzIGlzIGEgYnVnIik7CiAJfQorCSpq ID0gal9jdXI7CiAJKmhvd21hbnkgLT0gZHN0X3Nsb3RzOwogfQpkaWZmIC11IC1yIC1OIHVzci9z cmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3BpcGUuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9u ZXRtYXBfcGlwZS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9waXBlLmMJMjAx Ni0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYvbmV0 bWFwL25ldG1hcF9waXBlLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTM5NjcwMDAgKzAwMDAKQEAg LTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEdpdXNlcHBlIExldHRpZXJp LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgR2l1c2Vw cGUgTGV0dGllcmkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKQEAgLTIzLDcgKzI0LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLS8q ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfcGlwZS5jIDI4NTY5 NyAyMDE1LTA3LTE5IDE4OjA1OjQ5WiBsdWlnaSAkICovCisvKiAkRnJlZUJTRDogaGVhZC9zeXMv ZGV2L25ldG1hcC9uZXRtYXBfcGlwZS5jIDI2MTkwOSAyMDE0LTAyLTE1IDA0OjUzOjA0WiBsdWln aSAkICovCiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2luY2x1ZGUgPHN5cy9jZGVmcy5o PiAvKiBwcmVyZXF1aXNpdGUgKi8KQEAgLTU0LDYgKzU1LDkgQEAKICN3YXJuaW5nIE9TWCBzdXBw b3J0IGlzIG9ubHkgcGFydGlhbAogI2luY2x1ZGUgIm9zeF9nbHVlLmgiCiAKKyNlbGlmIGRlZmlu ZWQoX1dJTjMyKQorI2luY2x1ZGUgIndpbl9nbHVlLmgiCisKICNlbHNlCiAKICNlcnJvcglVbnN1 cHBvcnRlZCBwbGF0Zm9ybQpAQCAtNzIsMjYgKzc2LDI5IEBACiAKICNkZWZpbmUgTk1fUElQRV9N QVhTTE9UUwk0MDk2CiAKLWludCBuZXRtYXBfZGVmYXVsdF9waXBlcyA9IDA7IC8qIGlnbm9yZWQs IGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KK3N0YXRpYyBpbnQgbmV0bWFwX2RlZmF1bHRfcGlw ZXMgPSAwOyAvKiBpZ25vcmVkLCBrZXB0IGZvciBjb21wYXRpYmlsaXR5ICovCitTWVNCRUdJTih2 YXJzX3BpcGVzKTsKIFNZU0NUTF9ERUNMKF9kZXZfbmV0bWFwKTsKIFNZU0NUTF9JTlQoX2Rldl9u ZXRtYXAsIE9JRF9BVVRPLCBkZWZhdWx0X3BpcGVzLCBDVExGTEFHX1JXLCAmbmV0bWFwX2RlZmF1 bHRfcGlwZXMsIDAgLCAiIik7CitTWVNFTkQ7CiAKIC8qIGFsbG9jYXRlIHRoZSBwaXBlIGFycmF5 IGluIHRoZSBwYXJlbnQgYWRhcHRlciAqLwogc3RhdGljIGludAogbm1fcGlwZV9hbGxvYyhzdHJ1 Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCB1X2ludCBucGlwZXMpCiB7Ci0Jc2l6ZV90IGxlbjsKKwlz aXplX3Qgb2xkX2xlbiwgbGVuOwogCXN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICoqbnBhOwog CiAJaWYgKG5waXBlcyA8PSBuYS0+bmFfbWF4X3BpcGVzKQogCQkvKiB3ZSBhbHJlYWR5IGhhdmUg bW9yZSBlbnRyaWVzIHRoYXQgcmVxdWVzdGVkICovCiAJCXJldHVybiAwOwotCQorCiAJaWYgKG5w aXBlcyA8IG5hLT5uYV9uZXh0X3BpcGUgfHwgbnBpcGVzID4gTk1fTUFYUElQRVMpCiAJCXJldHVy biBFSU5WQUw7CiAKKwlvbGRfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVy ICopKm5hLT5uYV9tYXhfcGlwZXM7CiAgICAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmV0bWFw X3BpcGVfYWRhcHRlciAqKSAqIG5waXBlczsKLQlucGEgPSByZWFsbG9jKG5hLT5uYV9waXBlcywg bGVuLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCW5wYSA9IG5tX29zX3JlYWxsb2Mo bmEtPm5hX3BpcGVzLCBsZW4sIG9sZF9sZW4pOwogCWlmIChucGEgPT0gTlVMTCkKIAkJcmV0dXJu IEVOT01FTTsKIApAQCAtMTEwLDcgKzExNyw3IEBACiAJCQlEKCJmcmVlaW5nIG5vdCBlbXB0eSBw aXBlIGFycmF5IGZvciAlcyAoJWQgZGFuZ2xpbmcgcGlwZXMpISIsIG5hLT5uYW1lLAogCQkJCQlu YS0+bmFfbmV4dF9waXBlKTsKIAkJfQotCQlmcmVlKG5hLT5uYV9waXBlcywgTV9ERVZCVUYpOwor CQlubV9vc19mcmVlKG5hLT5uYV9waXBlcyk7CiAJCW5hLT5uYV9waXBlcyA9IE5VTEw7CiAJCW5h LT5uYV9tYXhfcGlwZXMgPSAwOwogCQluYS0+bmFfbmV4dF9waXBlID0gMDsKQEAgLTE5OSw3ICsy MDYsNyBAQAogCX0KIAogICAgICAgICB3aGlsZSAobGltaXQtLSA+IDApIHsKLSAgICAgICAgICAg ICAgICBzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnJzID0gJnJ4a3JpbmctPnNhdmVfcmluZy0+c2xvdFtq XTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bWFwX3Nsb3QgKnJzID0gJnJ4a3JpbmctPnJp bmctPnNsb3Rbal07CiAgICAgICAgICAgICAgICAgc3RydWN0IG5ldG1hcF9zbG90ICp0cyA9ICZ0 eGtyaW5nLT5yaW5nLT5zbG90W2tdOwogICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRtYXBfc2xv dCB0bXA7CiAKQEAgLTI5NSw3ICszMDIsNyBAQAogICogICAgICAgIHVzcjEgLS0+IGUxIC0tPiBl MgogICoKICAqICAgIGFuZCB3ZSBhcmUgZTIuIGUxIGlzIGNlcnRhaW5seSByZWdpc3RlcmVkIGFu ZCBvdXIKLSAqICAgIGtyaW5ncyBhbHJlYWR5IGV4aXN0LCBidXQgdGhleSBtYXkgYmUgaGlkZGVu LgorICogICAga3JpbmdzIGFscmVhZHkgZXhpc3QuIE5vdGhpbmcgdG8gZG8uCiAgKi8KIHN0YXRp YyBpbnQKIG5ldG1hcF9waXBlX2tyaW5nc19jcmVhdGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu YSkKQEAgLTMxMCw2NSArMzE3LDI4IEBACiAJCWludCBpOwogCiAJCS8qIGNhc2UgMSkgYWJvdmUg Ki8KLQkJTkQoIiVwOiBjYXNlIDEsIGNyZWF0ZSBldmVyeXRoaW5nIiwgbmEpOworCQlEKCIlcDog Y2FzZSAxLCBjcmVhdGUgYm90aCBlbmRzIiwgbmEpOwogCQllcnJvciA9IG5ldG1hcF9rcmluZ3Nf Y3JlYXRlKG5hLCAwKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnI7CiAKLQkJLyogd2UgYWxz byBjcmVhdGUgYWxsIHRoZSByaW5ncywgc2luY2Ugd2UgbmVlZCB0bwotICAgICAgICAgICAgICAg ICAqIHVwZGF0ZSB0aGUgc2F2ZV9yaW5nIHBvaW50ZXJzLgotICAgICAgICAgICAgICAgICAqIG5l dG1hcF9tZW1fcmluZ3NfY3JlYXRlIChjYWxsZWQgYnkgb3VyIGNhbGxlcikKLSAgICAgICAgICAg ICAgICAgKiB3aWxsIG5vdCBjcmVhdGUgdGhlIHJpbmdzIGFnYWluCi0gICAgICAgICAgICAgICAg ICovCi0KLQkJZXJyb3IgPSBuZXRtYXBfbWVtX3JpbmdzX2NyZWF0ZShuYSk7Ci0JCWlmIChlcnJv cikKLQkJCWdvdG8gZGVsX2tyaW5nczE7Ci0KLQkJLyogdXBkYXRlIG91ciBoaWRkZW4gcmluZyBw b2ludGVycyAqLwotCQlmb3JfcnhfdHgodCkgewotCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRf bnJpbmdzKG5hLCB0KSArIDE7IGkrKykKLQkJCQlOTVIobmEsIHQpW2ldLnNhdmVfcmluZyA9IE5N UihuYSwgdClbaV0ucmluZzsKLQkJfQotCi0JCS8qIG5vdywgY3JlYXRlIGtyaW5ncyBhbmQgcmlu Z3Mgb2YgdGhlIG90aGVyIGVuZCAqLworCQkvKiBjcmVhdGUgdGhlIGtyaW5ncyBvZiB0aGUgb3Ro ZXIgZW5kICovCiAJCWVycm9yID0gbmV0bWFwX2tyaW5nc19jcmVhdGUob25hLCAwKTsKIAkJaWYg KGVycm9yKQotCQkJZ290byBkZWxfcmluZ3MxOwotCi0JCWVycm9yID0gbmV0bWFwX21lbV9yaW5n c19jcmVhdGUob25hKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBkZWxfa3JpbmdzMjsKLQotCQlm b3JfcnhfdHgodCkgewotCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG9uYSwgdCkg KyAxOyBpKyspCi0JCQkJTk1SKG9uYSwgdClbaV0uc2F2ZV9yaW5nID0gTk1SKG9uYSwgdClbaV0u cmluZzsKLQkJfQorCQkJZ290byBkZWxfa3JpbmdzMTsKIAogCQkvKiBjcm9zcyBsaW5rIHRoZSBr cmluZ3MgKi8KIAkJZm9yX3J4X3R4KHQpIHsKLQkJCWVudW0gdHhyeCByPSBubV90eHJ4X3N3YXAo dCk7IC8qIHN3YXAgTlJfVFggPC0+IE5SX1JYICovCisJCQllbnVtIHR4cnggciA9IG5tX3R4cnhf c3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlggKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBu bWFfZ2V0X25yaW5ncyhuYSwgdCk7IGkrKykgewogCQkJCU5NUihuYSwgdClbaV0ucGlwZSA9IE5N UigmcG5hLT5wZWVyLT51cCwgcikgKyBpOwogCQkJCU5NUigmcG5hLT5wZWVyLT51cCwgcilbaV0u cGlwZSA9IE5NUihuYSwgdCkgKyBpOwogCQkJfQogCQl9Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0J CS8qIGNhc2UgMikgYWJvdmUgKi8KLQkJLyogcmVjb3ZlciB0aGUgaGlkZGVuIHJpbmdzICovCi0J CU5EKCIlcDogY2FzZSAyLCBoaWRkZW4gcmluZ3MiLCBuYSk7Ci0JCWZvcl9yeF90eCh0KSB7Ci0J CQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKQotCQkJCU5N UihuYSwgdClbaV0ucmluZyA9IE5NUihuYSwgdClbaV0uc2F2ZV9yaW5nOwotCQl9CisKIAl9CiAJ cmV0dXJuIDA7CiAKLWRlbF9rcmluZ3MyOgotCW5ldG1hcF9rcmluZ3NfZGVsZXRlKG9uYSk7Ci1k ZWxfcmluZ3MxOgotCW5ldG1hcF9tZW1fcmluZ3NfZGVsZXRlKG5hKTsKIGRlbF9rcmluZ3MxOgog CW5ldG1hcF9rcmluZ3NfZGVsZXRlKG5hKTsKIGVycjoKQEAgLTM4Myw3ICszNTMsOCBAQAogICoK ICAqICAgICAgICB1c3IxIC0tPiBlMSAtLT4gZTIKICAqCi0gKiAgICAgIGFuZCB3ZSBhcmUgZTEu IE5vdGhpbmcgc3BlY2lhbCB0byBkby4KKyAqICAgICAgYW5kIHdlIGFyZSBlMS4gQ3JlYXRlIHRo ZSBuZWVkZWQgcmluZ3Mgb2YgdGhlCisgKiAgICAgIG90aGVyIGVuZC4KICAqCiAgKiAxLmIpIHN0 YXRlIGlzCiAgKgpAQCAtNDEyLDE0ICszODMsNjUgQEAKIHsKIAlzdHJ1Y3QgbmV0bWFwX3BpcGVf YWRhcHRlciAqcG5hID0KIAkJKHN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICopbmE7CisJc3Ry dWN0IG5ldG1hcF9hZGFwdGVyICpvbmEgPSAmcG5hLT5wZWVyLT51cDsKKwlpbnQgaSwgZXJyb3Ig PSAwOwogCWVudW0gdHhyeCB0OwogCiAJTkQoIiVwOiBvbm9mZiAlZCIsIG5hLCBvbm9mZik7CiAJ aWYgKG9ub2ZmKSB7Ci0JCW5hLT5uYV9mbGFncyB8PSBOQUZfTkVUTUFQX09OOworCQlmb3Jfcnhf dHgodCkgeworCQkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKG5hLCB0KSArIDE7IGkr KykgeworCQkJCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nID0gJk5NUihuYSwgdClbaV07CisK KwkJCQlpZiAobm1fa3JpbmdfcGVuZGluZ19vbihrcmluZykpIHsKKwkJCQkJLyogbWFyayB0aGUg cGFydG5lciByaW5nIGFzIG5lZWRlZCAqLworCQkJCQlrcmluZy0+cGlwZS0+bnJfa2ZsYWdzIHw9 IE5LUl9ORUVEUklORzsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBjcmVhdGUgYWxsIG1pc3Np bmcgbmVlZGVkIHJpbmdzIG9uIHRoZSBvdGhlciBlbmQgKi8KKwkJZXJyb3IgPSBuZXRtYXBfbWVt X3JpbmdzX2NyZWF0ZShvbmEpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJ LyogSW4gY2FzZSBvZiBubyBlcnJvciB3ZSBwdXQgb3VyIHJpbmdzIGluIG5ldG1hcCBtb2RlICov CisJCWZvcl9yeF90eCh0KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEs IHQpICsgMTsgaSsrKSB7CisJCQkJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5h LCB0KVtpXTsKKworCQkJCWlmIChubV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkgeworCQkJCQlr cmluZy0+bnJfbW9kZSA9IE5LUl9ORVRNQVBfT047CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChu YS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAJ fSBlbHNlIHsKLQkJbmEtPm5hX2ZsYWdzICY9IH5OQUZfTkVUTUFQX09OOworCQlpZiAobmEtPmFj dGl2ZV9mZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJZm9y X3J4X3R4KHQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAx OyBpKyspIHsKKwkJCQlzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ld OworCisJCQkJaWYgKG5tX2tyaW5nX3BlbmRpbmdfb2ZmKGtyaW5nKSkgeworCQkJCQlrcmluZy0+ bnJfbW9kZSA9IE5LUl9ORVRNQVBfT0ZGOworCQkJCQkvKiBtYXJrIHRoZSBwZWVyIHJpbmcgYXMg bm8gbG9uZ2VyIG5lZWRlZCBieSB1cworCQkJCQkgKiAoaXQgbWF5IHN0aWxsIGJlIGtlcHQgaWYg c29tYm9keSBlbHNlIGlzIHVzaW5nIGl0KQorCQkJCQkgKi8KKwkJCQkJa3JpbmctPnBpcGUtPm5y X2tmbGFncyAmPSB+TktSX05FRURSSU5HOworCQkJCX0KKwkJCX0KKwkJfQorCQkvKiBkZWxldGUg YWxsIHRoZSBwZWVyIHJpbmdzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQgKi8KKwkJbmV0bWFw X21lbV9yaW5nc19kZWxldGUob25hKTsKKwl9CisKKwlpZiAobmEtPmFjdGl2ZV9mZHMpIHsKKwkJ RCgiYWN0aXZlX2ZkcyAlZCIsIG5hLT5hY3RpdmVfZmRzKTsKKwkJcmV0dXJuIDA7CiAJfQorCiAJ aWYgKHBuYS0+cGVlcl9yZWYpIHsKIAkJTkQoIiVwOiBjYXNlIDEuYSBvciAyLmEsIG5vdGhpbmcg dG8gZG8iLCBuYSk7CiAJCXJldHVybiAwOwpAQCAtNDI5LDE4ICs0NTEsMTEgQEAKIAkJcG5hLT5w ZWVyLT5wZWVyX3JlZiA9IDA7CiAJCW5ldG1hcF9hZGFwdGVyX3B1dChuYSk7CiAJfSBlbHNlIHsK LQkJaW50IGk7CiAJCU5EKCIlcDogY2FzZSAyLmIsIGdyYWIgcGVlciIsIG5hKTsKIAkJbmV0bWFw X2FkYXB0ZXJfZ2V0KG5hKTsKIAkJcG5hLT5wZWVyLT5wZWVyX3JlZiA9IDE7Ci0JCS8qIGhpZGUg b3VyIHJpbmdzIGZyb20gbmV0bWFwX21lbV9yaW5nc19kZWxldGUgKi8KLQkJZm9yX3J4X3R4KHQp IHsKLQkJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsK LQkJCQlOTVIobmEsIHQpW2ldLnJpbmcgPSBOVUxMOwotCQkJfQotCQl9CiAJfQotCXJldHVybiAw OworCXJldHVybiBlcnJvcjsKIH0KIAogLyogbmV0bWFwX3BpcGVfa3JpbmdzX2RlbGV0ZS4KQEAg LTQ3MCw4ICs0ODUsNiBAQAogCXN0cnVjdCBuZXRtYXBfcGlwZV9hZGFwdGVyICpwbmEgPQogCQko c3RydWN0IG5ldG1hcF9waXBlX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg Km9uYTsgLyogbmEgb2YgdGhlIG90aGVyIGVuZCAqLwotCWludCBpOwotCWVudW0gdHhyeCB0Owog CiAJaWYgKCFwbmEtPnBlZXJfcmVmKSB7CiAJCU5EKCIlcDogY2FzZSAyLCBrZXB0IGFsaXZlIGJ5 IHBlZXIiLCAgbmEpOwpAQCAtNDgwLDE4ICs0OTMsMTIgQEAKIAkvKiBjYXNlIDEpIGFib3ZlICov CiAJTkQoIiVwOiBjYXNlIDEsIGRlbGV0aW5nIGV2ZXJ5aGluZyIsIG5hKTsKIAluZXRtYXBfa3Jp bmdzX2RlbGV0ZShuYSk7IC8qIGFsc28gemVyb2VzIHR4X3JpbmdzIGV0Yy4gKi8KLQkvKiByZXN0 b3JlIHRoZSByaW5nIHRvIGJlIGRlbGV0ZWQgb24gdGhlIHBlZXIgKi8KIAlvbmEgPSAmcG5hLT5w ZWVyLT51cDsKIAlpZiAob25hLT50eF9yaW5ncyA9PSBOVUxMKSB7CiAJCS8qIGFscmVhZHkgZGVs ZXRlZCwgd2UgbXVzdCBiZSBvbiBhbgogICAgICAgICAgICAgICAgICAqIGNsZWFudXAtYWZ0ZXIt ZXJyb3IgcGF0aCAqLwogCQlyZXR1cm47CiAJfQotCWZvcl9yeF90eCh0KSB7Ci0JCWZvciAoaSA9 IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhvbmEsIHQpICsgMTsgaSsrKQotCQkJTk1SKG9uYSwgdClb aV0ucmluZyA9IE5NUihvbmEsIHQpW2ldLnNhdmVfcmluZzsKLQl9Ci0JbmV0bWFwX21lbV9yaW5n c19kZWxldGUob25hKTsKIAluZXRtYXBfa3JpbmdzX2RlbGV0ZShvbmEpOwogfQogCkBAIC01MTks NiArNTI2LDcgQEAKIAlzdHJ1Y3Qgbm1yZXEgcG5tcjsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIg KnBuYTsgLyogcGFyZW50IGFkYXB0ZXIgKi8KIAlzdHJ1Y3QgbmV0bWFwX3BpcGVfYWRhcHRlciAq bW5hLCAqc25hLCAqcmVxOworCXN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsKIAl1X2ludCBwaXBl X2lkOwogCWludCByb2xlID0gbm1yLT5ucl9mbGFncyAmIE5SX1JFR19NQVNLOwogCWludCBlcnJv cjsKQEAgLTUzNiw3ICs1NDQsNyBAQAogCW1lbWNweSgmcG5tci5ucl9uYW1lLCBubXItPm5yX25h bWUsIElGTkFNU0laKTsKIAkvKiBwYXNzIHRvIHBhcmVudCB0aGUgcmVxdWVzdGVkIG51bWJlciBv ZiBwaXBlcyAqLwogCXBubXIubnJfYXJnMSA9IG5tci0+bnJfYXJnMTsKLQllcnJvciA9IG5ldG1h cF9nZXRfbmEoJnBubXIsICZwbmEsIGNyZWF0ZSk7CisJZXJyb3IgPSBuZXRtYXBfZ2V0X25hKCZw bm1yLCAmcG5hLCAmaWZwLCBjcmVhdGUpOwogCWlmIChlcnJvcikgewogCQlORCgicGFyZW50IGxv b2t1cCBmYWlsZWQ6ICVkIiwgZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC01NzYsNyArNTg0 LDcgQEAKICAgICAgICAgICogVGhlIGVuZHBvaW50IHdlIHdlcmUgYXNrZWQgZm9yIGhvbGRzIGEg cmVmZXJlbmNlIHRvCiAgICAgICAgICAqIHRoZSBvdGhlciBvbmUuCiAgICAgICAgICAqLwotCW1u YSA9IG1hbGxvYyhzaXplb2YoKm1uYSksIE1fREVWQlVGLCBNX05PV0FJVCB8IE1fWkVSTyk7CisJ bW5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqbW5hKSk7CiAJaWYgKG1uYSA9PSBOVUxMKSB7CiAJ CWVycm9yID0gRU5PTUVNOwogCQlnb3RvIHB1dF9vdXQ7CkBAIC01OTMsNyArNjAxLDggQEAKIAlt bmEtPnVwLm5tX2R0b3IgPSBuZXRtYXBfcGlwZV9kdG9yOwogCW1uYS0+dXAubm1fa3JpbmdzX2Ny ZWF0ZSA9IG5ldG1hcF9waXBlX2tyaW5nc19jcmVhdGU7CiAJbW5hLT51cC5ubV9rcmluZ3NfZGVs ZXRlID0gbmV0bWFwX3BpcGVfa3JpbmdzX2RlbGV0ZTsKLQltbmEtPnVwLm5tX21lbSA9IHBuYS0+ bm1fbWVtOworCW1uYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQocG5hLT5ubV9tZW0pOwor CW1uYS0+dXAubmFfZmxhZ3MgfD0gTkFGX01FTV9PV05FUjsKIAltbmEtPnVwLm5hX2x1dCA9IHBu YS0+bmFfbHV0OwogCiAJbW5hLT51cC5udW1fdHhfcmluZ3MgPSAxOwpAQCAtNjEzLDEzICs2MjIs MTQgQEAKIAkJZ290byBmcmVlX21uYTsKIAogCS8qIGNyZWF0ZSB0aGUgc2xhdmUgKi8KLQlzbmEg PSBtYWxsb2Moc2l6ZW9mKCptbmEpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCXNu YSA9IG5tX29zX21hbGxvYyhzaXplb2YoKm1uYSkpOwogCWlmIChzbmEgPT0gTlVMTCkgewogCQll cnJvciA9IEVOT01FTTsKIAkJZ290byB1bnJlZ2lzdGVyX21uYTsKIAl9CiAJLyogbW9zdCBmaWVs ZHMgYXJlIHRoZSBzYW1lLCBjb3B5IGZyb20gbWFzdGVyIGFuZCB0aGVuIGZpeCAqLwogCSpzbmEg PSAqbW5hOworCXNuYS0+dXAubm1fbWVtID0gbmV0bWFwX21lbV9nZXQobW5hLT51cC5ubV9tZW0p OwogCXNucHJpbnRmKHNuYS0+dXAubmFtZSwgc2l6ZW9mKHNuYS0+dXAubmFtZSksICIlc30lZCIs IHBuYS0+bmFtZSwgcGlwZV9pZCk7CiAJc25hLT5yb2xlID0gTlJfUkVHX1BJUEVfU0xBVkU7CiAJ ZXJyb3IgPSBuZXRtYXBfYXR0YWNoX2NvbW1vbigmc25hLT51cCk7CkBAIC02NTIsMjYgKzY2Miwy NSBAQAogCSpuYSA9ICZyZXEtPnVwOwogCW5ldG1hcF9hZGFwdGVyX2dldCgqbmEpOwogCi0JLyog d3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gYmFjayAqLwotCW5tci0+bnJfdHhfcmluZ3MgPSByZXEt PnVwLm51bV90eF9yaW5nczsKLQlubXItPm5yX3J4X3JpbmdzID0gcmVxLT51cC5udW1fcnhfcmlu Z3M7Ci0Jbm1yLT5ucl90eF9zbG90cyA9IHJlcS0+dXAubnVtX3R4X2Rlc2M7Ci0Jbm1yLT5ucl9y eF9zbG90cyA9IHJlcS0+dXAubnVtX3J4X2Rlc2M7Ci0KIAkvKiBrZWVwIHRoZSByZWZlcmVuY2Ug dG8gdGhlIHBhcmVudC4KICAgICAgICAgICogSXQgd2lsbCBiZSByZWxlYXNlZCBieSB0aGUgcmVx IGRlc3RydWN0b3IKICAgICAgICAgICovCiAKKwkvKiBkcm9wIHRoZSBpZnAgcmVmZXJlbmNlLCBp ZiBhbnkgKi8KKwlpZiAoaWZwKSB7CisJCWlmX3JlbGUoaWZwKTsKKwl9CisKIAlyZXR1cm4gMDsK IAogZnJlZV9zbmE6Ci0JZnJlZShzbmEsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKHNuYSk7CiB1 bnJlZ2lzdGVyX21uYToKIAluZXRtYXBfcGlwZV9yZW1vdmUocG5hLCBtbmEpOwogZnJlZV9tbmE6 Ci0JZnJlZShtbmEsIE1fREVWQlVGKTsKKwlubV9vc19mcmVlKG1uYSk7CiBwdXRfb3V0OgotCW5l dG1hcF9hZGFwdGVyX3B1dChwbmEpOworCW5ldG1hcF91bmdldF9uYShwbmEsIGlmcCk7CiAJcmV0 dXJuIGVycm9yOwogfQogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRt YXBfcHQuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1hcC9uZXRtYXBfcHQuYwotLS0gdXNyL3NyYy9z eXMvZGV2L25ldG1hcC9uZXRtYXBfcHQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAorKysgL3Vzci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3B0LmMJMjAxNi0xMS0yMyAx Njo1Nzo1Ny44NTQ2NjcwMDAgKzAwMDAKQEAgLTAsMCArMSwxNDUyIEBACisvKgorICogQ29weXJp Z2h0IChDKSAyMDE1IFN0ZWZhbm8gR2FyemFyZWxsYQorICogQ29weXJpZ2h0IChDKSAyMDE2IFZp bmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAk RnJlZUJTRCQKKyAqLworCisvKgorICogY29tbW9uIGhlYWRlcnMKKyAqLworI2lmIGRlZmluZWQo X19GcmVlQlNEX18pCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFt Lmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lu Y2x1ZGUgPHN5cy9zZWxpbmZvLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUg PG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2J1 cy5oPgorCisvLyNkZWZpbmUgdXNsZWVwX3JhbmdlKF8xLCBfMikKKyNkZWZpbmUgdXNsZWVwX3Jh bmdlKF8xLCBfMikgXAorCXBhdXNlX3NidCgicHRuZXRtYXAtc2xlZXAiLCBTQlRfMVVTICogXzEs IFNCVF8xVVMgKiAxLCBDX0FCU09MVVRFKQorCisjZWxpZiBkZWZpbmVkKGxpbnV4KQorI2luY2x1 ZGUgPGJzZF9nbHVlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNs dWRlIDxkZXYvbmV0bWFwL25ldG1hcF9rZXJuLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0 Lmg+CisjaW5jbHVkZSA8ZGV2L25ldG1hcC9uZXRtYXBfbWVtMi5oPgorCisjaWZkZWYgV0lUSF9Q VE5FVE1BUF9IT1NUCisKKy8qIFJYIGN5Y2xlIHdpdGhvdXQgcmVjZWl2ZSBhbnkgcGFja2V0cyAq LworI2RlZmluZSBQVE5fUlhfRFJZX0NZQ0xFU19NQVgJMTAKKworLyogTGltaXQgQmF0Y2ggVFgg dG8gaGFsZiByaW5nLgorICogQ3VycmVudGx5IGRpc2FibGVkLCBzaW5jZSBpdCBkb2VzIG5vdCBt YW5hZ2UgTlNfTU9SRUZSQUcsIHdoaWNoCisgKiByZXN1bHRzIGluIHJhbmRvbSBkcm9wcyBpbiB0 aGUgVkFMRSB0eHN5bmMuICovCisvLyNkZWZpbmUgUFROX1RYX0JBVENIX0xJTShfbikJKChfbiA+ PiAxKSkKKworLy8jZGVmaW5lIEJVU1lfV0FJVAorCisjZGVmaW5lIE5FVE1BUF9QVF9ERUJVRyAg LyogRW5hYmxlcyBjb21tdW5pY2F0aW9uIGRlYnVnZ2luZy4gKi8KKyNpZmRlZiBORVRNQVBfUFRf REVCVUcKKyNkZWZpbmUgREJHKHgpIHgKKyNlbHNlCisjZGVmaW5lIERCRyh4KQorI2VuZGlmCisK KworI3VuZGVmIFJBVEUKKy8vI2RlZmluZSBSQVRFICAvKiBFbmFibGVzIGNvbW11bmljYXRpb24g c3RhdGlzdGljcy4gKi8KKyNpZmRlZiBSQVRFCisjZGVmaW5lIElGUkFURSh4KSB4CitzdHJ1Y3Qg cmF0ZV9iYXRjaF9zdGF0cyB7CisgICAgdW5zaWduZWQgbG9uZyBzeW5jOworICAgIHVuc2lnbmVk IGxvbmcgc3luY19kcnk7CisgICAgdW5zaWduZWQgbG9uZyBwa3Q7Cit9OworCitzdHJ1Y3QgcmF0 ZV9zdGF0cyB7CisgICAgdW5zaWduZWQgbG9uZyBndHhrOyAgICAgLyogR3Vlc3QgLS0+IEhvc3Qg VHgga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBncnhrOyAgICAgLyogR3Vlc3QgLS0+IEhv c3QgUngga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBodHhrOyAgICAgLyogSG9zdCAtLT4g R3Vlc3QgVHgga2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBocnhrOyAgICAgLyogSG9zdCAt LT4gR3Vlc3QgUnggS2lja3MuICovCisgICAgdW5zaWduZWQgbG9uZyBidHh3dTsgICAgLyogQmFj a2VuZCBUeCB3YWtlLXVwLiAqLworICAgIHVuc2lnbmVkIGxvbmcgYnJ4d3U7ICAgIC8qIEJhY2tl bmQgUnggd2FrZS11cC4gKi8KKyAgICBzdHJ1Y3QgcmF0ZV9iYXRjaF9zdGF0cyB0eGJzOworICAg IHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzIHJ4YnM7Cit9OworCitzdHJ1Y3QgcmF0ZV9jb250ZXh0 IHsKKyAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKyAgICBzdHJ1Y3QgcmF0ZV9zdGF0cyBu ZXc7CisgICAgc3RydWN0IHJhdGVfc3RhdHMgb2xkOworfTsKKworI2RlZmluZSBSQVRFX1BFUklP RCAgMgorc3RhdGljIHZvaWQKK3JhdGVfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBhcmcpCit7Cisg ICAgc3RydWN0IHJhdGVfY29udGV4dCAqIGN0eCA9IChzdHJ1Y3QgcmF0ZV9jb250ZXh0ICopYXJn OworICAgIHN0cnVjdCByYXRlX3N0YXRzIGN1ciA9IGN0eC0+bmV3OworICAgIHN0cnVjdCByYXRl X2JhdGNoX3N0YXRzICp0eGJzID0gJmN1ci50eGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0 YXRzICpyeGJzID0gJmN1ci5yeGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzICp0eGJz X29sZCA9ICZjdHgtPm9sZC50eGJzOworICAgIHN0cnVjdCByYXRlX2JhdGNoX3N0YXRzICpyeGJz X29sZCA9ICZjdHgtPm9sZC5yeGJzOworICAgIHVpbnQ2NF90IHR4X2JhdGNoLCByeF9iYXRjaDsK KyAgICB1bnNpZ25lZCBsb25nIHR4cGt0cywgcnhwa3RzOworICAgIHVuc2lnbmVkIGxvbmcgZ3R4 aywgZ3J4azsKKyAgICBpbnQgcjsKKworICAgIHR4cGt0cyA9IHR4YnMtPnBrdCAtIHR4YnNfb2xk LT5wa3Q7CisgICAgcnhwa3RzID0gcnhicy0+cGt0IC0gcnhic19vbGQtPnBrdDsKKworICAgIHR4 X2JhdGNoID0gKCh0eGJzLT5zeW5jIC0gdHhic19vbGQtPnN5bmMpID4gMCkgPworCSAgICAgICB0 eHBrdHMgLyAodHhicy0+c3luYyAtIHR4YnNfb2xkLT5zeW5jKTogMDsKKyAgICByeF9iYXRjaCA9 ICgocnhicy0+c3luYyAtIHJ4YnNfb2xkLT5zeW5jKSA+IDApID8KKwkgICAgICAgcnhwa3RzIC8g KHJ4YnMtPnN5bmMgLSByeGJzX29sZC0+c3luYyk6IDA7CisKKyAgICAvKiBGaXgtdXAgZ3R4ayBh bmQgZ3J4ayBlc3RpbWF0ZXMuICovCisgICAgZ3R4ayA9IChjdXIuZ3R4ayAtIGN0eC0+b2xkLmd0 eGspIC0gKGN1ci5idHh3dSAtIGN0eC0+b2xkLmJ0eHd1KTsKKyAgICBncnhrID0gKGN1ci5ncnhr IC0gY3R4LT5vbGQuZ3J4aykgLSAoY3VyLmJyeHd1IC0gY3R4LT5vbGQuYnJ4d3UpOworCisgICAg cHJpbnRrKCJ0eHBrdHMgID0gJWx1IEh6XG4iLCB0eHBrdHMvUkFURV9QRVJJT0QpOworICAgIHBy aW50aygiZ3R4ayAgICA9ICVsdSBIelxuIiwgZ3R4ay9SQVRFX1BFUklPRCk7CisgICAgcHJpbnRr KCJodHhrICAgID0gJWx1IEh6XG4iLCAoY3VyLmh0eGsgLSBjdHgtPm9sZC5odHhrKS9SQVRFX1BF UklPRCk7CisgICAgcHJpbnRrKCJidHh3ICAgID0gJWx1IEh6XG4iLCAoY3VyLmJ0eHd1IC0gY3R4 LT5vbGQuYnR4d3UpL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoInJ4cGt0cyAgPSAlbHUgSHpc biIsIHJ4cGt0cy9SQVRFX1BFUklPRCk7CisgICAgcHJpbnRrKCJncnhrICAgID0gJWx1IEh6XG4i LCBncnhrL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoImhyeGsgICAgPSAlbHUgSHpcbiIsIChj dXIuaHJ4ayAtIGN0eC0+b2xkLmhyeGspL1JBVEVfUEVSSU9EKTsKKyAgICBwcmludGsoImJyeHcg ICAgPSAlbHUgSHpcbiIsIChjdXIuYnJ4d3UgLSBjdHgtPm9sZC5icnh3dSkvUkFURV9QRVJJT0Qp OworICAgIHByaW50aygidHhiYXRjaCA9ICVsbHUgYXZnXG4iLCB0eF9iYXRjaCk7CisgICAgcHJp bnRrKCJyeGJhdGNoID0gJWxsdSBhdmdcbiIsIHJ4X2JhdGNoKTsKKyAgICBwcmludGsoIlxuIik7 CisKKyAgICBjdHgtPm9sZCA9IGN1cjsKKyAgICByID0gbW9kX3RpbWVyKCZjdHgtPnRpbWVyLCBq aWZmaWVzICsKKyAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoUkFURV9QRVJJT0QgKiAxMDAw KSk7CisgICAgaWYgKHVubGlrZWx5KHIpKQorICAgICAgICBEKCJbcHRuZXRtYXBdIEVycm9yOiBt b2RfdGltZXIoKVxuIik7Cit9CisKK3N0YXRpYyB2b2lkCityYXRlX2JhdGNoX3N0YXRzX3VwZGF0 ZShzdHJ1Y3QgcmF0ZV9iYXRjaF9zdGF0cyAqYmYsIHVpbnQzMl90IHByZV90YWlsLAorCQkgICAg ICAgIHVpbnQzMl90IGFjdF90YWlsLCB1aW50MzJfdCBudW1fc2xvdHMpCit7CisgICAgaW50IG4g PSAoaW50KWFjdF90YWlsIC0gcHJlX3RhaWw7CisKKyAgICBpZiAobikgeworICAgICAgICBpZiAo biA8IDApCisgICAgICAgICAgICBuICs9IG51bV9zbG90czsKKworICAgICAgICBiZi0+c3luYysr OworICAgICAgICBiZi0+cGt0ICs9IG47CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmYtPnN5bmNf ZHJ5Kys7CisgICAgfQorfQorCisjZWxzZSAvKiAhUkFURSAqLworI2RlZmluZSBJRlJBVEUoeCkK KyNlbmRpZiAvKiBSQVRFICovCisKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisgICAgLyogS3Ro cmVhZHMuICovCisgICAgc3RydWN0IG5tX2t0aHJlYWQgKiprdGhyZWFkczsKKworICAgIC8qIFNo YXJlZCBtZW1vcnkgd2l0aCB0aGUgZ3Vlc3QgKFRYL1JYKSAqLworICAgIHN0cnVjdCBwdG5ldF9y aW5nIF9fdXNlciAqcHRyaW5nczsKKworICAgIGJvb2wgc3RvcHBlZDsKKworICAgIC8qIE5ldG1h cCBhZGFwdGVyIHdyYXBwaW5nIHRoZSBiYWNrZW5kLiAqLworICAgIHN0cnVjdCBuZXRtYXBfcHRf aG9zdF9hZGFwdGVyICpwdGhfbmE7CisKKyAgICBJRlJBVEUoc3RydWN0IHJhdGVfY29udGV4dCBy YXRlX2N0eDspCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK3B0bmV0bWFwX2tyaW5nX2R1bXAo Y29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQorewor ICAgIFJEKDEsICIlcyAtIG5hbWU6ICVzIGh3Y3VyOiAlZCBod3RhaWw6ICVkIHJoZWFkOiAlZCBy Y3VyOiAlZCBcCisgICAgCQkgICAgcnRhaWw6ICVkIGhlYWQ6ICVkIGN1cjogJWQgdGFpbDogJWQi LAorICAgICAgICAgICAgdGl0bGUsIGtyaW5nLT5uYW1lLCBrcmluZy0+bnJfaHdjdXIsCisgICAg ICAgICAgICBrcmluZy0+bnJfaHd0YWlsLCBrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyLCBrcmlu Zy0+cnRhaWwsCisgICAgICAgICAgICBrcmluZy0+cmluZy0+aGVhZCwga3JpbmctPnJpbmctPmN1 ciwga3JpbmctPnJpbmctPnRhaWwpOworfQorCisvKgorICogVFggZnVuY3Rpb25zIHRvIHNldC9n ZXQgYW5kIHRvIGhhbmRsZSBob3N0L2d1ZXN0IGtpY2suCisgKi8KKworCisvKiBFbmFibGUgb3Ig ZGlzYWJsZSBndWVzdCAtLT4gaG9zdCBraWNrcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRy aW5nX2tpY2tfZW5hYmxlKHN0cnVjdCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5nLCB1aW50MzJf dCB2YWwpCit7CisgICAgQ1NCX1dSSVRFKHB0cmluZywgaG9zdF9uZWVkX2tpY2ssIHZhbCk7Cit9 CisKKy8qIEFyZSBndWVzdCBpbnRlcnJ1cHQgZW5hYmxlZCBvciBkaXNhYmxlZD8gKi8KK3N0YXRp YyBpbmxpbmUgdWludDMyX3QKK3B0cmluZ19pbnRyX2VuYWJsZWQoc3RydWN0IHB0bmV0X3Jpbmcg X191c2VyICpwdHJpbmcpCit7CisgICAgdWludDMyX3QgdjsKKworICAgIENTQl9SRUFEKHB0cmlu ZywgZ3Vlc3RfbmVlZF9raWNrLCB2KTsKKworICAgIHJldHVybiB2OworfQorCisvKiBFbmFibGUg b3IgZGlzYWJsZSBndWVzdCBpbnRlcnJ1cHRzLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwdHJp bmdfaW50cl9lbmFibGUoc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHJpbmcsIHVpbnQzMl90 IHZhbCkKK3sKKyAgICBDU0JfV1JJVEUocHRyaW5nLCBndWVzdF9uZWVkX2tpY2ssIHZhbCk7Cit9 CisKKy8qIEhhbmRsZSBUWCBldmVudHM6IGZyb20gdGhlIGd1ZXN0IG9yIGZyb20gdGhlIGJhY2tl bmQgKi8KK3N0YXRpYyB2b2lkCitwdG5ldG1hcF90eF9oYW5kbGVyKHZvaWQgKmRhdGEpCit7Cisg ICAgc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSBkYXRhOworICAgIHN0cnVjdCBuZXRtYXBf cHRfaG9zdF9hZGFwdGVyICpwdGhfbmEgPQorCQkoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0 ZXIgKilrcmluZy0+bmEtPm5hX3ByaXZhdGU7CisgICAgc3RydWN0IHB0bmV0bWFwX3N0YXRlICpw dG5zID0gcHRoX25hLT5wdG5zOworICAgIHN0cnVjdCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5n OworICAgIHN0cnVjdCBuZXRtYXBfcmluZyBzaGFkb3dfcmluZzsgLyogc2hhZG93IGNvcHkgb2Yg dGhlIG5ldG1hcF9yaW5nICovCisgICAgYm9vbCBtb3JlX3R4c3BhY2UgPSBmYWxzZTsKKyAgICBz dHJ1Y3Qgbm1fa3RocmVhZCAqa3RoOworICAgIHVpbnQzMl90IG51bV9zbG90czsKKyAgICBpbnQg YmF0Y2g7CisgICAgSUZSQVRFKHVpbnQzMl90IHByZV90YWlsKTsKKworICAgIGlmICh1bmxpa2Vs eSghcHRucykpIHsKKyAgICAgICAgRCgiRVJST1IgcHRuZXRtYXAgc3RhdGUgaXMgTlVMTCIpOwor ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVubGlrZWx5KHB0bnMtPnN0b3BwZWQp KSB7CisgICAgICAgIFJEKDEsICJiYWNrZW5kIG5ldG1hcCBpcyBiZWluZyBzdG9wcGVkIik7Cisg ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodW5saWtlbHkobm1fa3JfdHJ5Z2V0KGty aW5nLCAxLCBOVUxMKSkpIHsKKyAgICAgICAgRCgiRVJST1Igbm1fa3JfdHJ5Z2V0KCkiKTsKKyAg ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFRoaXMgaXMgYSBndWVzcywgdG8gYmUgZml4 ZWQgaW4gdGhlIHJhdGUgY2FsbGJhY2suICovCisgICAgSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5l dy5ndHhrKyspOworCisgICAgLyogR2V0IFRYIHB0cmluZyBwb2ludGVyIGZyb20gdGhlIENTQi4g Ki8KKyAgICBwdHJpbmcgPSBwdG5zLT5wdHJpbmdzICsga3JpbmctPnJpbmdfaWQ7CisgICAga3Ro ID0gcHRucy0+a3RocmVhZHNba3JpbmctPnJpbmdfaWRdOworCisgICAgbnVtX3Nsb3RzID0ga3Jp bmctPm5rcl9udW1fc2xvdHM7CisgICAgc2hhZG93X3JpbmcuaGVhZCA9IGtyaW5nLT5yaGVhZDsK KyAgICBzaGFkb3dfcmluZy5jdXIgPSBrcmluZy0+cmN1cjsKKworICAgIC8qIERpc2FibGUgZ3Vl c3QgLS0+IGhvc3Qgbm90aWZpY2F0aW9ucy4gKi8KKyAgICBwdHJpbmdfa2lja19lbmFibGUocHRy aW5nLCAwKTsKKyAgICAvKiBDb3B5IHRoZSBndWVzdCBrcmluZyBwb2ludGVycyBmcm9tIHRoZSBD U0IgKi8KKyAgICBwdG5ldG1hcF9ob3N0X3JlYWRfa3JpbmdfY3NiKHB0cmluZywgJnNoYWRvd19y aW5nLCBudW1fc2xvdHMpOworCisgICAgZm9yICg7OykgeworCS8qIElmIGd1ZXN0IG1vdmVzIGFo ZWFkIHRvbyBmYXN0LCBsZXQncyBjdXQgdGhlIG1vdmUgc28KKwkgKiB0aGF0IHdlIGRvbid0IGV4 Y2VlZCBvdXIgYmF0Y2ggbGltaXQuICovCisgICAgICAgIGJhdGNoID0gc2hhZG93X3JpbmcuaGVh ZCAtIGtyaW5nLT5ucl9od2N1cjsKKyAgICAgICAgaWYgKGJhdGNoIDwgMCkKKyAgICAgICAgICAg IGJhdGNoICs9IG51bV9zbG90czsKKworI2lmZGVmIFBUTl9UWF9CQVRDSF9MSU0KKyAgICAgICAg aWYgKGJhdGNoID4gUFROX1RYX0JBVENIX0xJTShudW1fc2xvdHMpKSB7CisgICAgICAgICAgICB1 aW50MzJfdCBoZWFkX2xpbSA9IGtyaW5nLT5ucl9od2N1ciArIFBUTl9UWF9CQVRDSF9MSU0obnVt X3Nsb3RzKTsKKworICAgICAgICAgICAgaWYgKGhlYWRfbGltID49IG51bV9zbG90cykKKyAgICAg ICAgICAgICAgICBoZWFkX2xpbSAtPSBudW1fc2xvdHM7CisgICAgICAgICAgICBORCgxLCAiYmF0 Y2g6ICVkIGhlYWQ6ICVkIGhlYWRfbGltOiAlZCIsIGJhdGNoLCBzaGFkb3dfcmluZy5oZWFkLAor CQkJCQkJICAgICBoZWFkX2xpbSk7CisgICAgICAgICAgICBzaGFkb3dfcmluZy5oZWFkID0gaGVh ZF9saW07CisJICAgIGJhdGNoID0gUFROX1RYX0JBVENIX0xJTShudW1fc2xvdHMpOworICAgICAg ICB9CisjZW5kaWYgLyogUFROX1RYX0JBVENIX0xJTSAqLworCisgICAgICAgIGlmIChubV9rcl90 eHNwYWNlKGtyaW5nKSA8PSAobnVtX3Nsb3RzID4+IDEpKSB7CisgICAgICAgICAgICBzaGFkb3df cmluZy5mbGFncyB8PSBOQUZfRk9SQ0VfUkVDTEFJTTsKKyAgICAgICAgfQorCisgICAgICAgIC8q IE5ldG1hcCBwcm9sb2d1ZSAqLworCXNoYWRvd19yaW5nLnRhaWwgPSBrcmluZy0+cnRhaWw7Cisg ICAgICAgIGlmICh1bmxpa2VseShubV90eHN5bmNfcHJvbG9ndWUoa3JpbmcsICZzaGFkb3dfcmlu ZykgPj0gbnVtX3Nsb3RzKSkgeworICAgICAgICAgICAgLyogUmVpbml0IHJpbmcgYW5kIGVuYWJs ZSBub3RpZmljYXRpb25zLiAqLworICAgICAgICAgICAgbmV0bWFwX3JpbmdfcmVpbml0KGtyaW5n KTsKKyAgICAgICAgICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAodW5saWtlbHkobmV0bWFwX3ZlcmJv c2UgJiBOTV9WRVJCX1RYU1lOQykpIHsKKyAgICAgICAgICAgIHB0bmV0bWFwX2tyaW5nX2R1bXAo InByZSB0eHN5bmMiLCBrcmluZyk7CisJfQorCisgICAgICAgIElGUkFURShwcmVfdGFpbCA9IGty aW5nLT5ydGFpbCk7CisgICAgICAgIGlmICh1bmxpa2VseShrcmluZy0+bm1fc3luYyhrcmluZywg c2hhZG93X3JpbmcuZmxhZ3MpKSkgeworICAgICAgICAgICAgLyogUmVlbmFibGUgbm90aWZpY2F0 aW9ucy4gKi8KKyAgICAgICAgICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAg ICAgICAgICAgRCgiRVJST1IgdHhzeW5jKCkiKTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgICAvKgorICAgICAgICAgKiBGaW5hbGl6ZQorICAgICAgICAgKiBDb3B5IGhvc3QgaHdj dXIgYW5kIGh3dGFpbCBpbnRvIHRoZSBDU0IgZm9yIHRoZSBndWVzdCBzeW5jKCksIGFuZAorCSAq IGRvIHRoZSBubV9zeW5jX2ZpbmFsaXplLgorICAgICAgICAgKi8KKyAgICAgICAgcHRuZXRtYXBf aG9zdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+bnJfaHdjdXIsCisJCQkJICAgICAg a3JpbmctPm5yX2h3dGFpbCk7CisgICAgICAgIGlmIChrcmluZy0+cnRhaWwgIT0ga3JpbmctPm5y X2h3dGFpbCkgeworCSAgICAvKiBTb21lIG1vcmUgcm9vbSBhdmFpbGFibGUgaW4gdGhlIHBhcmVu dCBhZGFwdGVyLiAqLworCSAgICBrcmluZy0+cnRhaWwgPSBrcmluZy0+bnJfaHd0YWlsOworCSAg ICBtb3JlX3R4c3BhY2UgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgSUZSQVRFKHJhdGVf YmF0Y2hfc3RhdHNfdXBkYXRlKCZwdG5zLT5yYXRlX2N0eC5uZXcudHhicywgcHJlX3RhaWwsCisJ CQkJICAgICAgIGtyaW5nLT5ydGFpbCwgbnVtX3Nsb3RzKSk7CisKKyAgICAgICAgaWYgKHVubGlr ZWx5KG5ldG1hcF92ZXJib3NlICYgTk1fVkVSQl9UWFNZTkMpKSB7CisgICAgICAgICAgICBwdG5l dG1hcF9rcmluZ19kdW1wKCJwb3N0IHR4c3luYyIsIGtyaW5nKTsKKwl9CisKKyNpZm5kZWYgQlVT WV9XQUlUCisgICAgICAgIC8qIEludGVycnVwdCB0aGUgZ3Vlc3QgaWYgbmVlZGVkLiAqLworICAg ICAgICBpZiAobW9yZV90eHNwYWNlICYmIHB0cmluZ19pbnRyX2VuYWJsZWQocHRyaW5nKSkgewor ICAgICAgICAgICAgLyogRGlzYWJsZSBndWVzdCBraWNrIHRvIGF2b2lkIHNlbmRpbmcgdW5uZWNl c3Nhcnkga2lja3MgKi8KKyAgICAgICAgICAgIHB0cmluZ19pbnRyX2VuYWJsZShwdHJpbmcsIDAp OworICAgICAgICAgICAgbm1fb3Nfa3RocmVhZF9zZW5kX2lycShrdGgpOworICAgICAgICAgICAg SUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5ldy5odHhrKyspOworICAgICAgICAgICAgbW9yZV90eHNw YWNlID0gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAvKiBSZWFkIENTQiB0byBz ZWUgaWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvLiAqLworICAgICAgICBwdG5ldG1hcF9ob3N0 X3JlYWRfa3JpbmdfY3NiKHB0cmluZywgJnNoYWRvd19yaW5nLCBudW1fc2xvdHMpOworI2lmbmRl ZiBCVVNZX1dBSVQKKyAgICAgICAgaWYgKHNoYWRvd19yaW5nLmhlYWQgPT0ga3JpbmctPnJoZWFk KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTm8gbW9yZSBwYWNrZXRzIHRvIHRy YW5zbWl0LiBXZSBlbmFibGUgbm90aWZpY2F0aW9ucyBhbmQKKyAgICAgICAgICAgICAqIGdvIHRv IHNsZWVwLCB3YWl0aW5nIGZvciBhIGtpY2sgZnJvbSB0aGUgZ3Vlc3Qgd2hlbiBuZXcKKyAgICAg ICAgICAgICAqIG5ldyBzbG90cyBhcmUgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgICAg ICAgICAqLworICAgICAgICAgICAgdXNsZWVwX3JhbmdlKDEsMSk7CisgICAgICAgICAgICAvKiBS ZWVuYWJsZSBub3RpZmljYXRpb25zLiAqLworICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxl KHB0cmluZywgMSk7CisgICAgICAgICAgICAvKiBEb3VibGVjaGVjay4gKi8KKyAgICAgICAgICAg IHB0bmV0bWFwX2hvc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9z bG90cyk7CisgICAgICAgICAgICBpZiAoc2hhZG93X3JpbmcuaGVhZCAhPSBrcmluZy0+cmhlYWQp IHsKKwkJLyogV2Ugd29uIHRoZSByYWNlIGNvbmRpdGlvbiwgdGhlcmUgYXJlIG1vcmUgcGFja2V0 cyB0bworCQkgKiB0cmFuc21pdC4gRGlzYWJsZSBub3RpZmljYXRpb25zIGFuZCBkbyBhbm90aGVy IGN5Y2xlICovCisJCXB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDApOworCQljb250aW51ZTsK KwkgICAgfQorCSAgICBicmVhazsKKyAgICAgICAgfQorCisJaWYgKG5tX2tyX3R4ZW1wdHkoa3Jp bmcpKSB7CisJICAgIC8qIE5vIG1vcmUgYXZhaWxhYmxlIFRYIHNsb3RzLiBXZSBzdG9wIHdhaXRp bmcgZm9yIGEgbm90aWZpY2F0aW9uCisJICAgICAqIGZyb20gdGhlIGJhY2tlbmQgKG5ldG1hcF90 eF9pcnEpLiAqLworICAgICAgICAgICAgTkQoMSwgIlRYIHJpbmciKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKHVubGlrZWx5KHB0bnMtPnN0b3Bw ZWQpKSB7CisgICAgICAgICAgICBEKCJiYWNrZW5kIG5ldG1hcCBpcyBiZWluZyBzdG9wcGVkIik7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG5tX2tyX3B1dChr cmluZyk7CisKKyAgICBpZiAobW9yZV90eHNwYWNlICYmIHB0cmluZ19pbnRyX2VuYWJsZWQocHRy aW5nKSkgeworICAgICAgICBwdHJpbmdfaW50cl9lbmFibGUocHRyaW5nLCAwKTsKKyAgICAgICAg bm1fb3Nfa3RocmVhZF9zZW5kX2lycShrdGgpOworICAgICAgICBJRlJBVEUocHRucy0+cmF0ZV9j dHgubmV3Lmh0eGsrKyk7CisgICAgfQorfQorCisvKgorICogV2UgbmVlZCBSWCBraWNrcyBmcm9t IHRoZSBndWVzdCB3aGVuICh0YWlsID09IGhlYWQtMSksIHdoZXJlIHdlIHdhaXQKKyAqIGZvciB0 aGUgZ3Vlc3QgdG8gcmVmaWxsLgorICovCisjaWZuZGVmIEJVU1lfV0FJVAorc3RhdGljIGlubGlu ZSBpbnQKK3B0bmV0bWFwX25vcnhzbG90cyhzdHJ1Y3QgbmV0bWFwX2tyaW5nICprcmluZywgdWlu dDMyX3QgZ19oZWFkKQoreworICAgIHJldHVybiAoTk1fQUNDRVNTX09OQ0Uoa3JpbmctPm5yX2h3 dGFpbCkgPT0gbm1fcHJldihnX2hlYWQsCisgICAgCQkJICAgIGtyaW5nLT5ua3JfbnVtX3Nsb3Rz IC0gMSkpOworfQorI2VuZGlmIC8qICFCVVNZX1dBSVQgKi8KKworLyogSGFuZGxlIFJYIGV2ZW50 czogZnJvbSB0aGUgZ3Vlc3Qgb3IgZnJvbSB0aGUgYmFja2VuZCAqLworc3RhdGljIHZvaWQKK3B0 bmV0bWFwX3J4X2hhbmRsZXIodm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgbmV0bWFwX2tyaW5n ICprcmluZyA9IGRhdGE7CisgICAgc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9u YSA9CisJCShzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqKWtyaW5nLT5uYS0+bmFfcHJp dmF0ZTsKKyAgICBzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7Cisg ICAgc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHJpbmc7CisgICAgc3RydWN0IG5ldG1hcF9y aW5nIHNoYWRvd19yaW5nOyAvKiBzaGFkb3cgY29weSBvZiB0aGUgbmV0bWFwX3JpbmcgKi8KKyAg ICBzdHJ1Y3Qgbm1fa3RocmVhZCAqa3RoOworICAgIHVpbnQzMl90IG51bV9zbG90czsKKyAgICBp bnQgZHJ5X2N5Y2xlcyA9IDA7CisgICAgYm9vbCBzb21lX3JlY3ZkID0gZmFsc2U7CisgICAgSUZS QVRFKHVpbnQzMl90IHByZV90YWlsKTsKKworICAgIGlmICh1bmxpa2VseSghcHRucyB8fCAhcHRu cy0+cHRoX25hKSkgeworICAgICAgICBEKCJFUlJPUiBwdG5ldG1hcCBzdGF0ZSAlcCwgcHRuZXRt YXAgaG9zdCBhZGFwdGVyICVwIiwgcHRucywKKwkgIHB0bnMgPyBwdG5zLT5wdGhfbmEgOiBOVUxM KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh1bmxpa2VseShwdG5zLT5zdG9w cGVkKSkgeworICAgICAgICBSRCgxLCAiYmFja2VuZCBuZXRtYXAgaXMgYmVpbmcgc3RvcHBlZCIp OworCXJldHVybjsKKyAgICB9CisKKyAgICBpZiAodW5saWtlbHkobm1fa3JfdHJ5Z2V0KGtyaW5n LCAxLCBOVUxMKSkpIHsKKyAgICAgICAgRCgiRVJST1Igbm1fa3JfdHJ5Z2V0KCkiKTsKKwlyZXR1 cm47CisgICAgfQorCisgICAgLyogVGhpcyBpcyBhIGd1ZXNzLCB0byBiZSBmaXhlZCBpbiB0aGUg cmF0ZSBjYWxsYmFjay4gKi8KKyAgICBJRlJBVEUocHRucy0+cmF0ZV9jdHgubmV3LmdyeGsrKyk7 CisKKyAgICAvKiBHZXQgUlggcHRyaW5nIHBvaW50ZXIgZnJvbSB0aGUgQ1NCLiAqLworICAgIHB0 cmluZyA9IHB0bnMtPnB0cmluZ3MgKyAocHRoX25hLT51cC5udW1fdHhfcmluZ3MgKyBrcmluZy0+ cmluZ19pZCk7CisgICAga3RoID0gcHRucy0+a3RocmVhZHNbcHRoX25hLT51cC5udW1fdHhfcmlu Z3MgKyBrcmluZy0+cmluZ19pZF07CisKKyAgICBudW1fc2xvdHMgPSBrcmluZy0+bmtyX251bV9z bG90czsKKyAgICBzaGFkb3dfcmluZy5oZWFkID0ga3JpbmctPnJoZWFkOworICAgIHNoYWRvd19y aW5nLmN1ciA9IGtyaW5nLT5yY3VyOworCisgICAgLyogRGlzYWJsZSBub3RpZmljYXRpb25zLiAq LworICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDApOworICAgIC8qIENvcHkgdGhlIGd1 ZXN0IGtyaW5nIHBvaW50ZXJzIGZyb20gdGhlIENTQiAqLworICAgIHB0bmV0bWFwX2hvc3RfcmVh ZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisKKyAgICBmb3Ig KDs7KSB7CisJdWludDMyX3QgaHd0YWlsOworCisgICAgICAgIC8qIE5ldG1hcCBwcm9sb2d1ZSAq LworCXNoYWRvd19yaW5nLnRhaWwgPSBrcmluZy0+cnRhaWw7CisgICAgICAgIGlmICh1bmxpa2Vs eShubV9yeHN5bmNfcHJvbG9ndWUoa3JpbmcsICZzaGFkb3dfcmluZykgPj0gbnVtX3Nsb3RzKSkg eworICAgICAgICAgICAgLyogUmVpbml0IHJpbmcgYW5kIGVuYWJsZSBub3RpZmljYXRpb25zLiAq LworICAgICAgICAgICAgbmV0bWFwX3JpbmdfcmVpbml0KGtyaW5nKTsKKyAgICAgICAgICAgIHB0 cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKworICAgICAgICBpZiAodW5saWtlbHkobmV0bWFwX3ZlcmJvc2UgJiBOTV9WRVJCX1JYU1lO QykpIHsKKyAgICAgICAgICAgIHB0bmV0bWFwX2tyaW5nX2R1bXAoInByZSByeHN5bmMiLCBrcmlu Zyk7CisJfQorCisgICAgICAgIElGUkFURShwcmVfdGFpbCA9IGtyaW5nLT5ydGFpbCk7CisgICAg ICAgIGlmICh1bmxpa2VseShrcmluZy0+bm1fc3luYyhrcmluZywgc2hhZG93X3JpbmcuZmxhZ3Mp KSkgeworICAgICAgICAgICAgLyogUmVlbmFibGUgbm90aWZpY2F0aW9ucy4gKi8KKyAgICAgICAg ICAgIHB0cmluZ19raWNrX2VuYWJsZShwdHJpbmcsIDEpOworICAgICAgICAgICAgRCgiRVJST1Ig cnhzeW5jKCkiKTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAg ICogRmluYWxpemUKKyAgICAgICAgICogQ29weSBob3N0IGh3Y3VyIGFuZCBod3RhaWwgaW50byB0 aGUgQ1NCIGZvciB0aGUgZ3Vlc3Qgc3luYygpCisgICAgICAgICAqLworCWh3dGFpbCA9IE5NX0FD Q0VTU19PTkNFKGtyaW5nLT5ucl9od3RhaWwpOworICAgICAgICBwdG5ldG1hcF9ob3N0X3dyaXRl X2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nLT5ucl9od2N1ciwgaHd0YWlsKTsKKyAgICAgICAgaWYg KGtyaW5nLT5ydGFpbCAhPSBod3RhaWwpIHsKKwkgICAga3JpbmctPnJ0YWlsID0gaHd0YWlsOwor ICAgICAgICAgICAgc29tZV9yZWN2ZCA9IHRydWU7CisgICAgICAgICAgICBkcnlfY3ljbGVzID0g MDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRyeV9jeWNsZXMrKzsKKyAgICAgICAg fQorCisgICAgICAgIElGUkFURShyYXRlX2JhdGNoX3N0YXRzX3VwZGF0ZSgmcHRucy0+cmF0ZV9j dHgubmV3LnJ4YnMsIHByZV90YWlsLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr cmluZy0+cnRhaWwsIG51bV9zbG90cykpOworCisgICAgICAgIGlmICh1bmxpa2VseShuZXRtYXBf dmVyYm9zZSAmIE5NX1ZFUkJfUlhTWU5DKSkgeworICAgICAgICAgICAgcHRuZXRtYXBfa3Jpbmdf ZHVtcCgicG9zdCByeHN5bmMiLCBrcmluZyk7CisJfQorCisjaWZuZGVmIEJVU1lfV0FJVAorCS8q IEludGVycnVwdCB0aGUgZ3Vlc3QgaWYgbmVlZGVkLiAqLworICAgICAgICBpZiAoc29tZV9yZWN2 ZCAmJiBwdHJpbmdfaW50cl9lbmFibGVkKHB0cmluZykpIHsKKyAgICAgICAgICAgIC8qIERpc2Fi bGUgZ3Vlc3Qga2ljayB0byBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IGtpY2tzICovCisgICAg ICAgICAgICBwdHJpbmdfaW50cl9lbmFibGUocHRyaW5nLCAwKTsKKyAgICAgICAgICAgIG5tX29z X2t0aHJlYWRfc2VuZF9pcnEoa3RoKTsKKyAgICAgICAgICAgIElGUkFURShwdG5zLT5yYXRlX2N0 eC5uZXcuaHJ4aysrKTsKKyAgICAgICAgICAgIHNvbWVfcmVjdmQgPSBmYWxzZTsKKyAgICAgICAg fQorI2VuZGlmCisgICAgICAgIC8qIFJlYWQgQ1NCIHRvIHNlZSBpZiB0aGVyZSBpcyBtb3JlIHdv cmsgdG8gZG8uICovCisgICAgICAgIHB0bmV0bWFwX2hvc3RfcmVhZF9rcmluZ19jc2IocHRyaW5n LCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisjaWZuZGVmIEJVU1lfV0FJVAorICAgICAgICBp ZiAocHRuZXRtYXBfbm9yeHNsb3RzKGtyaW5nLCBzaGFkb3dfcmluZy5oZWFkKSkgeworICAgICAg ICAgICAgLyoKKyAgICAgICAgICAgICAqIE5vIG1vcmUgc2xvdHMgYXZhaWxhYmxlIGZvciByZWNl cHRpb24uIFdlIGVuYWJsZSBub3RpZmljYXRpb24gYW5kCisgICAgICAgICAgICAgKiBnbyB0byBz bGVlcCwgd2FpdGluZyBmb3IgYSBraWNrIGZyb20gdGhlIGd1ZXN0IHdoZW4gbmV3IHJlY2VpdmUK KwkgICAgICogc2xvdHMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAg ICAgdXNsZWVwX3JhbmdlKDEsMSk7CisgICAgICAgICAgICAvKiBSZWVuYWJsZSBub3RpZmljYXRp b25zLiAqLworICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxlKHB0cmluZywgMSk7CisgICAg ICAgICAgICAvKiBEb3VibGVjaGVjay4gKi8KKyAgICAgICAgICAgIHB0bmV0bWFwX2hvc3RfcmVh ZF9rcmluZ19jc2IocHRyaW5nLCAmc2hhZG93X3JpbmcsIG51bV9zbG90cyk7CisgICAgICAgICAg ICBpZiAoIXB0bmV0bWFwX25vcnhzbG90cyhrcmluZywgc2hhZG93X3JpbmcuaGVhZCkpIHsKKwkJ LyogV2Ugd29uIHRoZSByYWNlIGNvbmRpdGlvbiwgbW9yZSBzbG90cyBhcmUgYXZhaWxhYmxlLiBE aXNhYmxlCisJCSAqIG5vdGlmaWNhdGlvbnMgYW5kIGRvIGFub3RoZXIgY3ljbGUuICovCisgICAg ICAgICAgICAgICAgcHRyaW5nX2tpY2tfZW5hYmxlKHB0cmluZywgMCk7CisgICAgICAgICAgICAg ICAgY29udGludWU7CisJICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKwlo d3RhaWwgPSBOTV9BQ0NFU1NfT05DRShrcmluZy0+bnJfaHd0YWlsKTsKKyAgICAgICAgaWYgKHVu bGlrZWx5KGh3dGFpbCA9PSBrcmluZy0+cmhlYWQgfHwKKwkJICAgICBkcnlfY3ljbGVzID49IFBU Tl9SWF9EUllfQ1lDTEVTX01BWCkpIHsKKwkgICAgLyogTm8gbW9yZSBwYWNrZXRzIHRvIGJlIHJl YWQgZnJvbSB0aGUgYmFja2VuZC4gV2Ugc3RvcCBhbmQKKwkgICAgICogd2FpdCBmb3IgYSBub3Rp ZmljYXRpb24gZnJvbSB0aGUgYmFja2VuZCAobmV0bWFwX3J4X2lycSkuICovCisgICAgICAgICAg ICBORCgxLCAibnJfaHd0YWlsOiAlZCByaGVhZDogJWQgZHJ5X2N5Y2xlczogJWQiLAorCSAgICAg ICBod3RhaWwsIGtyaW5nLT5yaGVhZCwgZHJ5X2N5Y2xlcyk7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmICh1bmxpa2VseShwdG5zLT5zdG9wcGVkKSkg eworICAgICAgICAgICAgRCgiYmFja2VuZCBuZXRtYXAgaXMgYmVpbmcgc3RvcHBlZCIpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBubV9rcl9wdXQoa3Jpbmcp OworCisgICAgLyogSW50ZXJydXB0IHRoZSBndWVzdCBpZiBuZWVkZWQuICovCisgICAgaWYgKHNv bWVfcmVjdmQgJiYgcHRyaW5nX2ludHJfZW5hYmxlZChwdHJpbmcpKSB7CisgICAgICAgIHB0cmlu Z19pbnRyX2VuYWJsZShwdHJpbmcsIDApOworICAgICAgICBubV9vc19rdGhyZWFkX3NlbmRfaXJx KGt0aCk7CisgICAgICAgIElGUkFURShwdG5zLT5yYXRlX2N0eC5uZXcuaHJ4aysrKTsKKyAgICB9 Cit9CisKKyNpZmRlZiBORVRNQVBfUFRfREVCVUcKK3N0YXRpYyB2b2lkCitwdG5ldG1hcF9wcmlu dF9jb25maWd1cmF0aW9uKHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlpbnQgazsKKwor CUQoInB0bmV0bWFwIGNvbmZpZ3VyYXRpb246Iik7CisJRCgiICBDU0IgcHRyaW5ncyBAJXAsIG51 bV9yaW5ncz0ldSwgY2ZndHlwZSAlMDh4IiwgY2ZnLT5wdHJpbmdzLAorCSAgY2ZnLT5udW1fcmlu Z3MsIGNmZy0+Y2ZndHlwZSk7CisJZm9yIChrID0gMDsgayA8IGNmZy0+bnVtX3JpbmdzOyBrKysp IHsKKwkJc3dpdGNoIChjZmctPmNmZ3R5cGUpIHsKKwkJY2FzZSBQVE5FVE1BUF9DRkdUWVBFX1FF TVU6IHsKKwkJCXN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9xZW11ICplID0KKwkJCQkoc3RydWN0 IHB0bmV0bWFwX2NmZ2VudHJ5X3FlbXUgKikoY2ZnKzEpICsgazsKKwkJCUQoIiAgICByaW5nICMl ZDogaW9ldmVudGZkPSVsdSwgaXJxZmQ9JWx1IiwgaywKKwkJCQkodW5zaWduZWQgbG9uZyllLT5p b2V2ZW50ZmQsCisJCQkJKHVuc2lnbmVkIGxvbmcpZS0+aXJxZmQpOworCQkJYnJlYWs7CisJCX0K KworCQljYXNlIFBUTkVUTUFQX0NGR1RZUEVfQkhZVkU6CisJCXsKKwkJCXN0cnVjdCBwdG5ldG1h cF9jZmdlbnRyeV9iaHl2ZSAqZSA9CisJCQkJKHN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9iaHl2 ZSAqKShjZmcrMSkgKyBrOworCQkJRCgiICAgIHJpbmcgIyVkOiB3Y2hhbj0lbHUsIGlvY3RsX2Zk PSVsdSwgIgorCQkJICAiaW9jdGxfY21kPSVsdSwgbXNpeF9tc2dfZGF0YT0lbHUsIG1zaXhfYWRk cj0lbHUiLAorCQkJCWssICh1bnNpZ25lZCBsb25nKWUtPndjaGFuLAorCQkJCSh1bnNpZ25lZCBs b25nKWUtPmlvY3RsX2ZkLAorCQkJCSh1bnNpZ25lZCBsb25nKWUtPmlvY3RsX2NtZCwKKwkJCQko dW5zaWduZWQgbG9uZyllLT5pb2N0bF9kYXRhLm1zZ19kYXRhLAorCQkJCSh1bnNpZ25lZCBsb25n KWUtPmlvY3RsX2RhdGEuYWRkcik7CisJCQlicmVhazsKKwkJfQorCQl9CisJfQorCit9CisjZW5k aWYgLyogTkVUTUFQX1BUX0RFQlVHICovCisKKy8qIENvcHkgYWN0dWFsIHN0YXRlIG9mIHRoZSBo b3N0IHJpbmcgaW50byB0aGUgQ1NCIGZvciB0aGUgZ3Vlc3QgaW5pdCAqLworc3RhdGljIGludAor cHRuZXRtYXBfa3Jpbmdfc25hcHNob3Qoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIHN0cnVj dCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyaW5nKQoreworICAgIGlmKENTQl9XUklURShwdHJpbmcs IGhlYWQsIGtyaW5nLT5yaGVhZCkpCisgICAgICAgIGdvdG8gZXJyOworICAgIGlmKENTQl9XUklU RShwdHJpbmcsIGN1ciwga3JpbmctPnJjdXIpKQorICAgICAgICBnb3RvIGVycjsKKworICAgIGlm KENTQl9XUklURShwdHJpbmcsIGh3Y3VyLCBrcmluZy0+bnJfaHdjdXIpKQorICAgICAgICBnb3Rv IGVycjsKKyAgICBpZihDU0JfV1JJVEUocHRyaW5nLCBod3RhaWwsIE5NX0FDQ0VTU19PTkNFKGty aW5nLT5ucl9od3RhaWwpKSkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBEQkcocHRuZXRtYXBf a3JpbmdfZHVtcCgicHRuZXRtYXBfa3Jpbmdfc25hcHNob3QiLCBrcmluZyk7KQorCisgICAgcmV0 dXJuIDA7CitlcnI6CisgICAgcmV0dXJuIEVGQVVMVDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRt YXBfa3JpbmcgKgorcHRuZXRtYXBfa3Jpbmcoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIg KnB0aF9uYSwgaW50IGspCit7CisJaWYgKGsgPCBwdGhfbmEtPnVwLm51bV90eF9yaW5ncykgewor CQlyZXR1cm4gcHRoX25hLT51cC50eF9yaW5ncyArIGs7CisJfQorCXJldHVybiBwdGhfbmEtPnVw LnJ4X3JpbmdzICsgayAtIHB0aF9uYS0+dXAubnVtX3R4X3JpbmdzOworfQorCitzdGF0aWMgaW50 CitwdG5ldG1hcF9rcmluZ3Nfc25hcHNob3Qoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIg KnB0aF9uYSkKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7 CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3Jpbmc7CisJdW5zaWduZWQgaW50IG51bV9yaW5nczsK KwlpbnQgZXJyID0gMCwgazsKKworCW51bV9yaW5ncyA9IHB0aF9uYS0+dXAubnVtX3R4X3Jpbmdz ICsKKwkJICAgIHB0aF9uYS0+dXAubnVtX3J4X3JpbmdzOworCisJZm9yIChrID0gMDsgayA8IG51 bV9yaW5nczsgaysrKSB7CisJCWtyaW5nID0gcHRuZXRtYXBfa3JpbmcocHRoX25hLCBrKTsKKwkJ ZXJyIHw9IHB0bmV0bWFwX2tyaW5nX3NuYXBzaG90KGtyaW5nLCBwdG5zLT5wdHJpbmdzICsgayk7 CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBjcmVhdGUsIHN0 YXJ0IGFuZCBzdG9wIHRoZSBrdGhyZWFkcworICovCisKK3N0YXRpYyBpbnQKK3B0bmV0bWFwX2Ny ZWF0ZV9rdGhyZWFkcyhzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hLAorCQkJ IHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0 bnMgPSBwdGhfbmEtPnB0bnM7CisJc3RydWN0IG5tX2t0aHJlYWRfY2ZnIG5ta19jZmc7CisJdW5z aWduZWQgaW50IG51bV9yaW5nczsKKwl1aW50OF90ICpjZmdfZW50cmllcyA9ICh1aW50OF90ICop KGNmZyArIDEpOworCWludCBrOworCisJbnVtX3JpbmdzID0gcHRoX25hLT51cC5udW1fdHhfcmlu Z3MgKworCQkgICAgcHRoX25hLT51cC5udW1fcnhfcmluZ3M7CisKKwlmb3IgKGsgPSAwOyBrIDwg bnVtX3JpbmdzOyBrKyspIHsKKwkJbm1rX2NmZy5hdHRhY2hfdXNlciA9IDE7IC8qIGF0dGFjaCBr dGhyZWFkIHRvIHVzZXIgcHJvY2VzcyAqLworCQlubWtfY2ZnLndvcmtlcl9wcml2YXRlID0gcHRu ZXRtYXBfa3JpbmcocHRoX25hLCBrKTsKKwkJbm1rX2NmZy50eXBlID0gazsKKwkJaWYgKGsgPCBw dGhfbmEtPnVwLm51bV90eF9yaW5ncykgeworCQkJbm1rX2NmZy53b3JrZXJfZm4gPSBwdG5ldG1h cF90eF9oYW5kbGVyOworCQl9IGVsc2UgeworCQkJbm1rX2NmZy53b3JrZXJfZm4gPSBwdG5ldG1h cF9yeF9oYW5kbGVyOworCQl9CisKKwkJcHRucy0+a3RocmVhZHNba10gPSBubV9vc19rdGhyZWFk X2NyZWF0ZSgmbm1rX2NmZywKKwkJCWNmZy0+Y2ZndHlwZSwgY2ZnX2VudHJpZXMgKyBrICogY2Zn LT5lbnRyeV9zaXplKTsKKwkJaWYgKHB0bnMtPmt0aHJlYWRzW2tdID09IE5VTEwpIHsKKwkJCWdv dG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJZm9yIChrID0gMDsgayA8IG51 bV9yaW5nczsgaysrKSB7CisJCWlmIChwdG5zLT5rdGhyZWFkc1trXSkgeworCQkJbm1fb3Nfa3Ro cmVhZF9kZWxldGUocHRucy0+a3RocmVhZHNba10pOworCQkJcHRucy0+a3RocmVhZHNba10gPSBO VUxMOworCQl9CisJfQorCXJldHVybiBFRkFVTFQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0bWFw X3N0YXJ0X2t0aHJlYWRzKHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhfbmEpCit7 CisJc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG5zID0gcHRoX25hLT5wdG5zOworCWludCBudW1f cmluZ3M7CisJaW50IGVycm9yOworCWludCBrOworCisJaWYgKCFwdG5zKSB7CisJCUQoIkJVRyBw dG5zIGlzIE5VTEwiKTsKKwkJcmV0dXJuIEVGQVVMVDsKKwl9CisKKwlwdG5zLT5zdG9wcGVkID0g ZmFsc2U7CisKKwludW1fcmluZ3MgPSBwdG5zLT5wdGhfbmEtPnVwLm51bV90eF9yaW5ncyArCisJ CSAgICBwdG5zLT5wdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKwlmb3IgKGsgPSAwOyBrIDwgbnVt X3JpbmdzOyBrKyspIHsKKwkJLy9ubV9vc19rdGhyZWFkX3NldF9hZmZpbml0eShwdG5zLT5rdGhy ZWFkc1trXSwgeHh4KTsKKwkJZXJyb3IgPSBubV9vc19rdGhyZWFkX3N0YXJ0KHB0bnMtPmt0aHJl YWRzW2tdKTsKKwkJaWYgKGVycm9yKSB7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3B0bmV0bWFwX3N0b3Bfa3RocmVhZHMoc3RydWN0 IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9uYSkKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfc3Rh dGUgKnB0bnMgPSBwdGhfbmEtPnB0bnM7CisJaW50IG51bV9yaW5nczsKKwlpbnQgazsKKworCWlm ICghcHRucykgeworCQkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQlyZXR1cm47CisJfQorCisJcHRu cy0+c3RvcHBlZCA9IHRydWU7CisKKwludW1fcmluZ3MgPSBwdG5zLT5wdGhfbmEtPnVwLm51bV90 eF9yaW5ncyArCisJCSAgICBwdG5zLT5wdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKwlmb3IgKGsg PSAwOyBrIDwgbnVtX3JpbmdzOyBrKyspIHsKKwkJbm1fb3Nfa3RocmVhZF9zdG9wKHB0bnMtPmt0 aHJlYWRzW2tdKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICoKK3B0bmV0 bWFwX3JlYWRfY2ZnKHN0cnVjdCBubXJlcSAqbm1yKQoreworCXVpbnRwdHJfdCAqbm1yX3B0bmNm ZyA9ICh1aW50cHRyX3QgKikmbm1yLT5ucl9hcmcxOworCXN0cnVjdCBwdG5ldG1hcF9jZmcgKmNm ZzsKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnIHRtcDsKKwlzaXplX3QgY2ZnbGVuOworCisJaWYgKGNv cHlpbigoY29uc3Qgdm9pZCAqKSpubXJfcHRuY2ZnLCAmdG1wLCBzaXplb2YodG1wKSkpIHsKKwkJ RCgiUGFydGlhbCBjb3B5aW4oKSBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2Zn bGVuID0gc2l6ZW9mKHRtcCkgKyB0bXAubnVtX3JpbmdzICogdG1wLmVudHJ5X3NpemU7CisJY2Zn ID0gbm1fb3NfbWFsbG9jKGNmZ2xlbik7CisJaWYgKCFjZmcpIHsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJaWYgKGNvcHlpbigoY29uc3Qgdm9pZCAqKSpubXJfcHRuY2ZnLCBjZmcsIGNmZ2xlbikp IHsKKwkJRCgiRnVsbCBjb3B5aW4oKSBmYWlsZWQiKTsKKwkJbm1fb3NfZnJlZShjZmcpOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gY2ZnOworfQorCitzdGF0aWMgaW50IG5tX3VudXNl ZF9ub3RpZnkoc3RydWN0IG5ldG1hcF9rcmluZyAqLCBpbnQpOworc3RhdGljIGludCBubV9wdF9o b3N0X25vdGlmeShzdHJ1Y3QgbmV0bWFwX2tyaW5nICosIGludCk7CisKKy8qIENyZWF0ZSBwdG5l dG1hcCBzdGF0ZSBhbmQgc3dpdGNoIHBhcmVudCBhZGFwdGVyIHRvIHB0bmV0bWFwIG1vZGUuICov CitzdGF0aWMgaW50CitwdG5ldG1hcF9jcmVhdGUoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0 ZXIgKnB0aF9uYSwKKwkJc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKQoreworICAgIHN0cnVjdCBw dG5ldG1hcF9zdGF0ZSAqcHRuczsKKyAgICB1bnNpZ25lZCBpbnQgbnVtX3JpbmdzOworICAgIGlu dCByZXQsIGk7CisKKyAgICAvKiBDaGVjayBpZiBwdG5ldG1hcCBzdGF0ZSBpcyBhbHJlYWR5IHRo ZXJlLiAqLworICAgIGlmIChwdGhfbmEtPnB0bnMpIHsKKyAgICAgICAgRCgiRVJST1IgYWRhcHRl ciAlcCBhbHJlYWR5IGluIHB0bmV0bWFwIG1vZGUiLCBwdGhfbmEtPnBhcmVudCk7CisgICAgICAg IHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAgbnVtX3JpbmdzID0gcHRoX25hLT51cC5udW1f dHhfcmluZ3MgKyBwdGhfbmEtPnVwLm51bV9yeF9yaW5nczsKKworICAgIGlmIChudW1fcmluZ3Mg IT0gY2ZnLT5udW1fcmluZ3MpIHsKKyAgICAgICAgRCgiRVJST1IgY29uZmlndXJhdGlvbiBtaXNt YXRjaCwgZXhwZWN0ZWQgJXUgcmluZ3MsIGZvdW5kICV1IiwKKyAgICAgICAgICAgbnVtX3Jpbmdz LCBjZmctPm51bV9yaW5ncyk7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAg cHRucyA9IG5tX29zX21hbGxvYyhzaXplb2YoKnB0bnMpICsgbnVtX3JpbmdzICogc2l6ZW9mKCpw dG5zLT5rdGhyZWFkcykpOworICAgIGlmICghcHRucykgeworICAgICAgICByZXR1cm4gRU5PTUVN OworICAgIH0KKworICAgIHB0bnMtPmt0aHJlYWRzID0gKHN0cnVjdCBubV9rdGhyZWFkICoqKShw dG5zICsgMSk7CisgICAgcHRucy0+c3RvcHBlZCA9IHRydWU7CisKKyAgICAvKiBDcm9zcy1saW5r IGRhdGEgc3RydWN0dXJlcy4gKi8KKyAgICBwdGhfbmEtPnB0bnMgPSBwdG5zOworICAgIHB0bnMt PnB0aF9uYSA9IHB0aF9uYTsKKworICAgIC8qIFN0b3JlIHRoZSBDU0IgYWRkcmVzcyBwcm92aWRl ZCBieSB0aGUgaHlwZXJ2aXNvci4gKi8KKyAgICBwdG5zLT5wdHJpbmdzID0gY2ZnLT5wdHJpbmdz OworCisgICAgREJHKHB0bmV0bWFwX3ByaW50X2NvbmZpZ3VyYXRpb24oY2ZnKSk7CisKKyAgICAv KiBDcmVhdGUga3RocmVhZHMgKi8KKyAgICBpZiAoKHJldCA9IHB0bmV0bWFwX2NyZWF0ZV9rdGhy ZWFkcyhwdGhfbmEsIGNmZykpKSB7CisgICAgICAgIEQoIkVSUk9SIHB0bmV0bWFwX2NyZWF0ZV9r dGhyZWFkcygpIik7CisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKyAgICAvKiBDb3B5IGtyaW5n cyBzdGF0ZSBpbnRvIHRoZSBDU0IgZm9yIHRoZSBndWVzdCBpbml0aWFsaXphdGlvbiAqLworICAg IGlmICgocmV0ID0gcHRuZXRtYXBfa3JpbmdzX3NuYXBzaG90KHB0aF9uYSkpKSB7CisgICAgICAg IEQoIkVSUk9SIHB0bmV0bWFwX2tyaW5nc19zbmFwc2hvdCgpIik7CisgICAgICAgIGdvdG8gZXJy OworICAgIH0KKworICAgIC8qIE92ZXJ3cml0ZSBwYXJlbnQgbm1fbm90aWZ5IGtyaW5ncyBjYWxs YmFjay4gKi8KKyAgICBwdGhfbmEtPnBhcmVudC0+bmFfcHJpdmF0ZSA9IHB0aF9uYTsKKyAgICBw dGhfbmEtPnBhcmVudF9ubV9ub3RpZnkgPSBwdGhfbmEtPnBhcmVudC0+bm1fbm90aWZ5OworICAg IHB0aF9uYS0+cGFyZW50LT5ubV9ub3RpZnkgPSBubV91bnVzZWRfbm90aWZ5OworCisgICAgZm9y IChpID0gMDsgaSA8IHB0aF9uYS0+cGFyZW50LT5udW1fcnhfcmluZ3M7IGkrKykgeworICAgICAg ICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0KKyAgICAgICAgCXB0aF9uYS0+ dXAucnhfcmluZ3NbaV0ubm1fbm90aWZ5OworICAgICAgICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ld Lm5tX25vdGlmeSA9IG5tX3B0X2hvc3Rfbm90aWZ5OworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBp IDwgcHRoX25hLT5wYXJlbnQtPm51bV90eF9yaW5nczsgaSsrKSB7CisgICAgICAgIHB0aF9uYS0+ dXAudHhfcmluZ3NbaV0uc2F2ZV9ub3RpZnkgPQorICAgICAgICAJcHRoX25hLT51cC50eF9yaW5n c1tpXS5ubV9ub3RpZnk7CisgICAgICAgIHB0aF9uYS0+dXAudHhfcmluZ3NbaV0ubm1fbm90aWZ5 ID0gbm1fcHRfaG9zdF9ub3RpZnk7CisgICAgfQorCisjaWZkZWYgUkFURQorICAgIG1lbXNldCgm cHRucy0+cmF0ZV9jdHgsIDAsIHNpemVvZihwdG5zLT5yYXRlX2N0eCkpOworICAgIHNldHVwX3Rp bWVyKCZwdG5zLT5yYXRlX2N0eC50aW1lciwgJnJhdGVfY2FsbGJhY2ssCisgICAgICAgICAgICAo dW5zaWduZWQgbG9uZykmcHRucy0+cmF0ZV9jdHgpOworICAgIGlmIChtb2RfdGltZXIoJnB0bnMt PnJhdGVfY3R4LnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNTAwKSkpCisgICAg ICAgIEQoIltwdG5dIEVycm9yOiBtb2RfdGltZXIoKVxuIik7CisjZW5kaWYKKworICAgIERCRyhE KCJbJXNdIHB0bmV0bWFwIGNvbmZpZ3VyYXRpb24gRE9ORSIsIHB0aF9uYS0+dXAubmFtZSkpOwor CisgICAgcmV0dXJuIDA7CisKK2VycjoKKyAgICBwdGhfbmEtPnB0bnMgPSBOVUxMOworICAgIG5t X29zX2ZyZWUocHRucyk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogU3dpdGNoIHBhcmVudCBh ZGFwdGVyIGJhY2sgdG8gbm9ybWFsIG1vZGUgYW5kIGRlc3Ryb3kKKyAqIHB0bmV0bWFwIHN0YXRl LiAqLworc3RhdGljIHZvaWQKK3B0bmV0bWFwX2RlbGV0ZShzdHJ1Y3QgbmV0bWFwX3B0X2hvc3Rf YWRhcHRlciAqcHRoX25hKQoreworICAgIHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRucyA9IHB0 aF9uYS0+cHRuczsKKyAgICBpbnQgbnVtX3JpbmdzOworICAgIGludCBpOworCisgICAgaWYgKCFw dG5zKSB7CisJLyogTm90aGluZyB0byBkby4gKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIC8qIFJlc3RvcmUgcGFyZW50IGFkYXB0ZXIgY2FsbGJhY2tzLiAqLworICAgIHB0aF9uYS0+ cGFyZW50LT5ubV9ub3RpZnkgPSBwdGhfbmEtPnBhcmVudF9ubV9ub3RpZnk7CisgICAgcHRoX25h LT5wYXJlbnQtPm5hX3ByaXZhdGUgPSBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IHB0aF9u YS0+cGFyZW50LT5udW1fcnhfcmluZ3M7IGkrKykgeworICAgICAgICBwdGhfbmEtPnVwLnJ4X3Jp bmdzW2ldLm5tX25vdGlmeSA9CisgICAgICAgIAlwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVf bm90aWZ5OworICAgICAgICBwdGhfbmEtPnVwLnJ4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0gTlVM TDsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHB0aF9uYS0+cGFyZW50LT5udW1fdHhfcmlu Z3M7IGkrKykgeworICAgICAgICBwdGhfbmEtPnVwLnR4X3JpbmdzW2ldLm5tX25vdGlmeSA9Cisg ICAgICAgIAlwdGhfbmEtPnVwLnR4X3JpbmdzW2ldLnNhdmVfbm90aWZ5OworICAgICAgICBwdGhf bmEtPnVwLnR4X3JpbmdzW2ldLnNhdmVfbm90aWZ5ID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBE ZWxldGUga3RocmVhZHMuICovCisgICAgbnVtX3JpbmdzID0gcHRucy0+cHRoX25hLT51cC5udW1f dHhfcmluZ3MgKworICAgICAgICAgICAgICAgIHB0bnMtPnB0aF9uYS0+dXAubnVtX3J4X3Jpbmdz OworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcmluZ3M7IGkrKykgeworICAgICAgICBubV9vc19r dGhyZWFkX2RlbGV0ZShwdG5zLT5rdGhyZWFkc1tpXSk7CisJcHRucy0+a3RocmVhZHNbaV0gPSBO VUxMOworICAgIH0KKworICAgIElGUkFURShkZWxfdGltZXIoJnB0bnMtPnJhdGVfY3R4LnRpbWVy KSk7CisKKyAgICBubV9vc19mcmVlKHB0bnMpOworCisgICAgcHRoX25hLT5wdG5zID0gTlVMTDsK KworICAgIERCRyhEKCJbJXNdIHB0bmV0bWFwIGRlbGV0ZWQiLCBwdGhfbmEtPnVwLm5hbWUpKTsK K30KKworLyoKKyAqIENhbGxlZCBieSBuZXRtYXBfaW9jdGwoKS4KKyAqIE9wZXJhdGlvbiBpcyBp bmRpY2F0ZWQgaW4gbm1yLT5ucl9jbWQuCisgKgorICogQ2FsbGVkIHdpdGhvdXQgTk1HX0xPQ0su CisgKi8KK2ludAorcHRuZXRtYXBfY3RsKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFw X2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhf bmE7CisgICAgc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnOworICAgIGNoYXIgKm5hbWU7CisgICAg aW50IGNtZCwgZXJyb3IgPSAwOworCisgICAgbmFtZSA9IG5tci0+bnJfbmFtZTsKKyAgICBjbWQg PSBubXItPm5yX2NtZDsKKworICAgIERCRyhEKCJuYW1lOiAlcyIsIG5hbWUpKTsKKworICAgIGlm ICghbm1fcHRuZXRtYXBfaG9zdF9vbihuYSkpIHsKKyAgICAgICAgRCgiRVJST1IgTmV0bWFwIGFk YXB0ZXIgJXAgaXMgbm90IGEgcHRuZXRtYXAgaG9zdCBhZGFwdGVyIiwgbmEpOworICAgICAgICBl cnJvciA9IEVOWElPOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIHB0aF9uYSA9IChz dHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqKW5hOworCisgICAgTk1HX0xPQ0soKTsKKyAg ICBzd2l0Y2ggKGNtZCkgeworICAgIGNhc2UgTkVUTUFQX1BUX0hPU1RfQ1JFQVRFOgorCS8qIFJl YWQgaHlwZXJ2aXNvciBjb25maWd1cmF0aW9uIGZyb20gdXNlcnNwYWNlLiAqLworICAgICAgICBj ZmcgPSBwdG5ldG1hcF9yZWFkX2NmZyhubXIpOworICAgICAgICBpZiAoIWNmZykKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAvKiBDcmVhdGUgcHRuZXRtYXAgc3RhdGUgKGt0aHJlYWRzLCAu Li4pIGFuZCBzd2l0Y2ggcGFyZW50CisJICogYWRhcHRlciB0byBwdG5ldG1hcCBtb2RlLiAqLwor ICAgICAgICBlcnJvciA9IHB0bmV0bWFwX2NyZWF0ZShwdGhfbmEsIGNmZyk7CisJbm1fb3NfZnJl ZShjZmcpOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg LyogU3RhcnQga3RocmVhZHMuICovCisgICAgICAgIGVycm9yID0gcHRuZXRtYXBfc3RhcnRfa3Ro cmVhZHMocHRoX25hKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgcHRuZXRtYXBf ZGVsZXRlKHB0aF9uYSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBORVRNQVBfUFRfSE9T VF9ERUxFVEU6CisgICAgICAgIC8qIFN0b3Aga3RocmVhZHMuICovCisgICAgICAgIHB0bmV0bWFw X3N0b3Bfa3RocmVhZHMocHRoX25hKTsKKyAgICAgICAgLyogU3dpdGNoIHBhcmVudCBhZGFwdGVy IGJhY2sgdG8gbm9ybWFsIG1vZGUgYW5kIGRlc3Ryb3kKKwkgKiBwdG5ldG1hcCBzdGF0ZSAoa3Ro cmVhZHMsIC4uLikuICovCisgICAgICAgIHB0bmV0bWFwX2RlbGV0ZShwdGhfbmEpOworICAgICAg ICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEQoIkVSUk9SIGludmFsaWQgY21kIChu bXItPm5yX2NtZCkgKDB4JXgpIiwgY21kKTsKKyAgICAgICAgZXJyb3IgPSBFSU5WQUw7CisgICAg ICAgIGJyZWFrOworICAgIH0KKyAgICBOTUdfVU5MT0NLKCk7CisKK2RvbmU6CisgICAgcmV0dXJu IGVycm9yOworfQorCisvKiBubV9ub3RpZnkgY2FsbGJhY2tzIGZvciBwdG5ldG1hcCAqLworc3Rh dGljIGludAorbm1fcHRfaG9zdF9ub3RpZnkoc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcsIGlu dCBmbGFncykKK3sKKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hID0ga3JpbmctPm5hOworCXN0 cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhfbmEgPQorCQkoc3RydWN0IG5ldG1hcF9w dF9ob3N0X2FkYXB0ZXIgKiluYS0+bmFfcHJpdmF0ZTsKKwlzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUg KnB0bnM7CisJaW50IGs7CisKKwkvKiBGaXJzdCBjaGVjayB0aGF0IHRoZSBwYXNzdGhyb3VnaCBw b3J0IGlzIG5vdCBiZWluZyBkZXN0cm95ZWQuICovCisJaWYgKHVubGlrZWx5KCFwdGhfbmEpKSB7 CisJCXJldHVybiBOTV9JUlFfQ09NUExFVEVEOworCX0KKworCXB0bnMgPSBwdGhfbmEtPnB0bnM7 CisJaWYgKHVubGlrZWx5KCFwdG5zIHx8IHB0bnMtPnN0b3BwZWQpKSB7CisJCXJldHVybiBOTV9J UlFfQ09NUExFVEVEOworCX0KKworCWsgPSBrcmluZy0+cmluZ19pZDsKKworCS8qIE5vdGlmeSBr dGhyZWFkcyAod2FrZSB1cCBpZiBuZWVkZWQpICovCisJaWYgKGtyaW5nLT50eCA9PSBOUl9UWCkg eworCQlORCgxLCAiVFggYmFja2VuZCBpcnEiKTsKKwkJSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5l dy5idHh3dSsrKTsKKwl9IGVsc2UgeworCQlrICs9IHB0aF9uYS0+dXAubnVtX3R4X3JpbmdzOwor CQlORCgxLCAiUlggYmFja2VuZCBpcnEiKTsKKwkJSUZSQVRFKHB0bnMtPnJhdGVfY3R4Lm5ldy5i cnh3dSsrKTsKKwl9CisJbm1fb3Nfa3RocmVhZF93YWtldXBfd29ya2VyKHB0bnMtPmt0aHJlYWRz W2tdKTsKKworCXJldHVybiBOTV9JUlFfQ09NUExFVEVEOworfQorCitzdGF0aWMgaW50CitubV91 bnVzZWRfbm90aWZ5KHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLCBpbnQgZmxhZ3MpCit7Cisg ICAgRCgiQlVHIHRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCIpOworICAgIHJldHVybiBFTlhJ TzsKK30KKworLyogbm1fY29uZmlnIGNhbGxiYWNrIGZvciBid3JhcCAqLworc3RhdGljIGludAor bm1fcHRfaG9zdF9jb25maWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSwgdV9pbnQgKnR4ciwg dV9pbnQgKnR4ZCwKKyAgICAgICAgdV9pbnQgKnJ4ciwgdV9pbnQgKnJ4ZCkKK3sKKyAgICBzdHJ1 Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hID0KKyAgICAgICAgKHN0cnVjdCBuZXRt YXBfcHRfaG9zdF9hZGFwdGVyICopbmE7CisgICAgc3RydWN0IG5ldG1hcF9hZGFwdGVyICpwYXJl bnQgPSBwdGhfbmEtPnBhcmVudDsKKyAgICBpbnQgZXJyb3I7CisKKyAgICAvL1hYWDogbWF5YmUg Y2FsbGluZyBwYXJlbnQtPm5tX2NvbmZpZyBpcyBiZXR0ZXIKKworICAgIC8qIGZvcndhcmQgdGhl IHJlcXVlc3QgKi8KKyAgICBlcnJvciA9IG5ldG1hcF91cGRhdGVfY29uZmlnKHBhcmVudCk7CisK KyAgICAqcnhyID0gbmEtPm51bV9yeF9yaW5ncyA9IHBhcmVudC0+bnVtX3J4X3JpbmdzOworICAg ICp0eHIgPSBuYS0+bnVtX3R4X3JpbmdzID0gcGFyZW50LT5udW1fdHhfcmluZ3M7CisgICAgKnR4 ZCA9IG5hLT5udW1fdHhfZGVzYyA9IHBhcmVudC0+bnVtX3R4X2Rlc2M7CisgICAgKnJ4ZCA9IG5h LT5udW1fcnhfZGVzYyA9IHBhcmVudC0+bnVtX3J4X2Rlc2M7CisKKyAgICBEQkcoRCgicnhyOiAl ZCB0eHI6ICVkIHR4ZDogJWQgcnhkOiAlZCIsICpyeHIsICp0eHIsICp0eGQsICpyeGQpKTsKKwor ICAgIHJldHVybiBlcnJvcjsKK30KKworLyogbm1fa3JpbmdzX2NyZWF0ZSBjYWxsYmFjayBmb3Ig cHRuZXRtYXAgKi8KK3N0YXRpYyBpbnQKK25tX3B0X2hvc3Rfa3JpbmdzX2NyZWF0ZShzdHJ1Y3Qg bmV0bWFwX2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVy ICpwdGhfbmEgPQorICAgICAgICAoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKiluYTsK KyAgICBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKnBhcmVudCA9IHB0aF9uYS0+cGFyZW50OworICAg IGVudW0gdHhyeCB0OworICAgIGludCBlcnJvcjsKKworICAgIERCRyhEKCIlcyIsIHB0aF9uYS0+ dXAubmFtZSkpOworCisgICAgLyogY3JlYXRlIHRoZSBwYXJlbnQga3JpbmdzICovCisgICAgZXJy b3IgPSBwYXJlbnQtPm5tX2tyaW5nc19jcmVhdGUocGFyZW50KTsKKyAgICBpZiAoZXJyb3IpIHsK KyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIC8qIEEgcHRuZXRtYXAgaG9zdCBh ZGFwdGVyIHBvaW50cyB0aGUgdmVyeSBzYW1lIGtyaW5ncworICAgICAqIGFzIGl0cyBwYXJlbnQg YWRhcHRlci4gVGhlc2UgcG9pbnRlciBhcmUgdXNlZCBpbiB0aGUKKyAgICAgKiBUWC9SWCB3b3Jr ZXIgZnVuY3Rpb25zLiAqLworICAgIG5hLT50eF9yaW5ncyA9IHBhcmVudC0+dHhfcmluZ3M7Cisg ICAgbmEtPnJ4X3JpbmdzID0gcGFyZW50LT5yeF9yaW5nczsKKyAgICBuYS0+dGFpbHJvb20gPSBw YXJlbnQtPnRhaWxyb29tOworCisgICAgZm9yX3J4X3R4KHQpIHsKKwlzdHJ1Y3QgbmV0bWFwX2ty aW5nICprcmluZzsKKworCS8qIFBhcmVudCdzIGtyaW5nX2NyZWF0ZSBmdW5jdGlvbiB3aWxsIGlu aXRpYWxpemUKKwkgKiBpdHMgb3duIG5hLT5zaS4gV2UgaGF2ZSB0byBpbml0IG91ciBuYS0+c2kg aGVyZS4gKi8KKwlubV9vc19zZWxpbmZvX2luaXQoJm5hLT5zaVt0XSk7CisKKwkvKiBGb3JjZSB0 aGUgbWVtX3JpbmdzX2NyZWF0ZSgpIG1ldGhvZCB0byBjcmVhdGUgdGhlCisJICogaG9zdCByaW5n cyBpbmRlcGVuZGVudGx5IG9uIHdoYXQgdGhlIHJlZ2lmIGFza2VkIGZvcjoKKwkgKiB0aGVzZSBy aW5ncyBhcmUgbmVlZGVkIGJ5IHRoZSBndWVzdCBwdG5ldG1hcCBhZGFwdGVyCisJICogYW55d2F5 LiAqLworCWtyaW5nID0gJk5NUihuYSwgdClbbm1hX2dldF9ucmluZ3MobmEsIHQpXTsKKwlrcmlu Zy0+bnJfa2ZsYWdzIHw9IE5LUl9ORUVEUklORzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K KworLyogbm1fa3JpbmdzX2RlbGV0ZSBjYWxsYmFjayBmb3IgcHRuZXRtYXAgKi8KK3N0YXRpYyB2 b2lkCitubV9wdF9ob3N0X2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK K3sKKyAgICBzdHJ1Y3QgbmV0bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hID0KKyAgICAgICAg KHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICopbmE7CisgICAgc3RydWN0IG5ldG1hcF9h ZGFwdGVyICpwYXJlbnQgPSBwdGhfbmEtPnBhcmVudDsKKworICAgIERCRyhEKCIlcyIsIHB0aF9u YS0+dXAubmFtZSkpOworCisgICAgcGFyZW50LT5ubV9rcmluZ3NfZGVsZXRlKHBhcmVudCk7CisK KyAgICBuYS0+dHhfcmluZ3MgPSBuYS0+cnhfcmluZ3MgPSBuYS0+dGFpbHJvb20gPSBOVUxMOwor fQorCisvKiBubV9yZWdpc3RlciBjYWxsYmFjayAqLworc3RhdGljIGludAorbm1fcHRfaG9zdF9y ZWdpc3RlcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCit7CisgICAgc3Ry dWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKnB0aF9uYSA9CisgICAgICAgIChzdHJ1Y3QgbmV0 bWFwX3B0X2hvc3RfYWRhcHRlciAqKW5hOworICAgIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqcGFy ZW50ID0gcHRoX25hLT5wYXJlbnQ7CisgICAgaW50IGVycm9yOworICAgIERCRyhEKCIlcyBvbm9m ZiAlZCIsIHB0aF9uYS0+dXAubmFtZSwgb25vZmYpKTsKKworICAgIGlmIChvbm9mZikgeworICAg ICAgICAvKiBuZXRtYXBfZG9fcmVnaWYgaGFzIGJlZW4gY2FsbGVkIG9uIHRoZSBwdG5ldG1hcCBu YS4KKyAgICAgICAgICogV2UgbmVlZCB0byBwYXNzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUK KyAgICAgICAgICogbWVtb3J5IGFsbG9jYXRvciB0byB0aGUgcGFyZW50IGJlZm9yZQorICAgICAg ICAgKiBwdXR0aW5nIGl0IGluIG5ldG1hcCBtb2RlCisgICAgICAgICAqLworICAgICAgICBwYXJl bnQtPm5hX2x1dCA9IG5hLT5uYV9sdXQ7CisgICAgfQorCisgICAgLyogZm9yd2FyZCB0aGUgcmVx dWVzdCB0byB0aGUgcGFyZW50ICovCisgICAgZXJyb3IgPSBwYXJlbnQtPm5tX3JlZ2lzdGVyKHBh cmVudCwgb25vZmYpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisK KyAgICBpZiAob25vZmYpIHsKKyAgICAgICAgbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT04g fCBOQUZfUFRORVRNQVBfSE9TVDsKKyAgICB9IGVsc2UgeworICAgICAgICBwdG5ldG1hcF9kZWxl dGUocHRoX25hKTsKKyAgICAgICAgbmEtPm5hX2ZsYWdzICY9IH4oTkFGX05FVE1BUF9PTiB8IE5B Rl9QVE5FVE1BUF9IT1NUKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyogbm1fZHRv ciBjYWxsYmFjayAqLworc3RhdGljIHZvaWQKK25tX3B0X2hvc3RfZHRvcihzdHJ1Y3QgbmV0bWFw X2FkYXB0ZXIgKm5hKQoreworICAgIHN0cnVjdCBuZXRtYXBfcHRfaG9zdF9hZGFwdGVyICpwdGhf bmEgPQorICAgICAgICAoc3RydWN0IG5ldG1hcF9wdF9ob3N0X2FkYXB0ZXIgKiluYTsKKyAgICBz dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKnBhcmVudCA9IHB0aF9uYS0+cGFyZW50OworCisgICAgREJH KEQoIiVzIiwgcHRoX25hLT51cC5uYW1lKSk7CisKKyAgICAvKiBUaGUgZXF1aXZhbGVudCBvZiBO RVRNQVBfUFRfSE9TVF9ERUxFVEUgaWYgdGhlIGh5cGVydmlzb3IKKyAgICAgKiBkaWRuJ3QgZG8g aXQuICovCisgICAgcHRuZXRtYXBfc3RvcF9rdGhyZWFkcyhwdGhfbmEpOworICAgIHB0bmV0bWFw X2RlbGV0ZShwdGhfbmEpOworCisgICAgcGFyZW50LT5uYV9mbGFncyAmPSB+TkFGX0JVU1k7CisK KyAgICBuZXRtYXBfYWRhcHRlcl9wdXQocHRoX25hLT5wYXJlbnQpOworICAgIHB0aF9uYS0+cGFy ZW50ID0gTlVMTDsKK30KKworLyogY2hlY2sgaWYgbm1yIGlzIGEgcmVxdWVzdCBmb3IgYSBwdG5l dG1hcCBhZGFwdGVyIHRoYXQgd2UgY2FuIHNhdGlzZnkgKi8KK2ludAorbmV0bWFwX2dldF9wdF9o b3N0X25hKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKipuYSwgaW50 IGNyZWF0ZSkKK3sKKyAgICBzdHJ1Y3Qgbm1yZXEgcGFyZW50X25tcjsKKyAgICBzdHJ1Y3QgbmV0 bWFwX2FkYXB0ZXIgKnBhcmVudDsgLyogdGFyZ2V0IGFkYXB0ZXIgKi8KKyAgICBzdHJ1Y3QgbmV0 bWFwX3B0X2hvc3RfYWRhcHRlciAqcHRoX25hOworICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gTlVM TDsKKyAgICBpbnQgZXJyb3I7CisKKyAgICAvKiBDaGVjayBpZiBpdCBpcyBhIHJlcXVlc3QgZm9y IGEgcHRuZXRtYXAgYWRhcHRlciAqLworICAgIGlmICgobm1yLT5ucl9mbGFncyAmIChOUl9QVE5F VE1BUF9IT1NUKSkgPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBEKCJS ZXF1ZXN0aW5nIGEgcHRuZXRtYXAgaG9zdCBhZGFwdGVyIik7CisKKyAgICBwdGhfbmEgPSBubV9v c19tYWxsb2Moc2l6ZW9mKCpwdGhfbmEpKTsKKyAgICBpZiAocHRoX25hID09IE5VTEwpIHsKKyAg ICAgICAgRCgiRVJST1IgbWFsbG9jIik7CisgICAgICAgIHJldHVybiBFTk9NRU07CisgICAgfQor CisgICAgLyogZmlyc3QsIHRyeSB0byBmaW5kIHRoZSBhZGFwdGVyIHRoYXQgd2Ugd2FudCB0byBw YXNzdGhyb3VnaAorICAgICAqIFdlIHVzZSB0aGUgc2FtZSBubXIsIGFmdGVyIHdlIGhhdmUgdHVy bmVkIG9mZiB0aGUgcHRuZXRtYXAgZmxhZy4KKyAgICAgKiBJbiB0aGlzIHdheSB3ZSBjYW4gcG90 ZW50aWFsbHkgcGFzc3Rocm91Z2ggZXZlcnl0aGluZyBuZXRtYXAgdW5kZXJzdGFuZHMuCisgICAg ICovCisgICAgbWVtY3B5KCZwYXJlbnRfbm1yLCBubXIsIHNpemVvZihwYXJlbnRfbm1yKSk7Cisg ICAgcGFyZW50X25tci5ucl9mbGFncyAmPSB+KE5SX1BUTkVUTUFQX0hPU1QpOworICAgIGVycm9y ID0gbmV0bWFwX2dldF9uYSgmcGFyZW50X25tciwgJnBhcmVudCwgJmlmcCwgY3JlYXRlKTsKKyAg ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgRCgicGFyZW50IGxvb2t1cCBmYWlsZWQ6ICVkIiwgZXJy b3IpOworICAgICAgICBnb3RvIHB1dF9vdXRfbm9wdXRwYXJlbnQ7CisgICAgfQorICAgIERCRyhE KCJmb3VuZCBwYXJlbnQ6ICVzIiwgcGFyZW50LT5uYW1lKSk7CisKKyAgICAvKiBtYWtlIHN1cmUg dGhlIGludGVyZmFjZSBpcyBub3QgYWxyZWFkeSBpbiB1c2UgKi8KKyAgICBpZiAoTkVUTUFQX09X TkVEX0JZX0FOWShwYXJlbnQpKSB7CisgICAgICAgIEQoIk5JQyAlcyBidXN5LCBjYW5ub3QgcHRu ZXRtYXAiLCBwYXJlbnQtPm5hbWUpOworICAgICAgICBlcnJvciA9IEVCVVNZOworICAgICAgICBn b3RvIHB1dF9vdXQ7CisgICAgfQorCisgICAgcHRoX25hLT5wYXJlbnQgPSBwYXJlbnQ7CisKKyAg ICAvKiBGb2xsb3cgbmV0bWFwX2F0dGFjaCgpLWxpa2Ugb3BlcmF0aW9ucyBmb3IgdGhlIGhvc3QK KyAgICAgKiBwdG5ldG1hcCBhZGFwdGVyLiAqLworCisgICAgLy9YWFggcHRoX25hLT51cC5uYV9m bGFncyA9IHBhcmVudC0+bmFfZmxhZ3M7CisgICAgcHRoX25hLT51cC5udW1fcnhfcmluZ3MgPSBw YXJlbnQtPm51bV9yeF9yaW5nczsKKyAgICBwdGhfbmEtPnVwLm51bV90eF9yaW5ncyA9IHBhcmVu dC0+bnVtX3R4X3JpbmdzOworICAgIHB0aF9uYS0+dXAubnVtX3R4X2Rlc2MgPSBwYXJlbnQtPm51 bV90eF9kZXNjOworICAgIHB0aF9uYS0+dXAubnVtX3J4X2Rlc2MgPSBwYXJlbnQtPm51bV9yeF9k ZXNjOworCisgICAgcHRoX25hLT51cC5ubV9kdG9yID0gbm1fcHRfaG9zdF9kdG9yOworICAgIHB0 aF9uYS0+dXAubm1fcmVnaXN0ZXIgPSBubV9wdF9ob3N0X3JlZ2lzdGVyOworCisgICAgLyogUmV1 c2UgcGFyZW50J3MgYWRhcHRlciB0eHN5bmMgYW5kIHJ4c3luYyBtZXRob2RzLiAqLworICAgIHB0 aF9uYS0+dXAubm1fdHhzeW5jID0gcGFyZW50LT5ubV90eHN5bmM7CisgICAgcHRoX25hLT51cC5u bV9yeHN5bmMgPSBwYXJlbnQtPm5tX3J4c3luYzsKKworICAgIHB0aF9uYS0+dXAubm1fa3Jpbmdz X2NyZWF0ZSA9IG5tX3B0X2hvc3Rfa3JpbmdzX2NyZWF0ZTsKKyAgICBwdGhfbmEtPnVwLm5tX2ty aW5nc19kZWxldGUgPSBubV9wdF9ob3N0X2tyaW5nc19kZWxldGU7CisgICAgcHRoX25hLT51cC5u bV9jb25maWcgPSBubV9wdF9ob3N0X2NvbmZpZzsKKworICAgIC8qIFNldCB0aGUgbm90aWZ5IG1l dGhvZCBvbmx5IG9yIGNvbnZlbmllbmNlLCBpdCB3aWxsIG5ldmVyCisgICAgICogYmUgdXNlZCwg c2luY2UgLSBkaWZmZXJlbnRseSBmcm9tIGRlZmF1bHQga3JpbmdzX2NyZWF0ZSAtIHdlCisgICAg ICogcHRuZXRtYXAga3JpbmdzX2NyZWF0ZSBjYWxsYmFjayBpbml0cyBrcmluZy0+bm1fbm90aWZ5 CisgICAgICogZGlyZWN0bHkuICovCisgICAgcHRoX25hLT51cC5ubV9ub3RpZnkgPSBubV91bnVz ZWRfbm90aWZ5OworCisgICAgcHRoX25hLT51cC5ubV9tZW0gPSBuZXRtYXBfbWVtX2dldChwYXJl bnQtPm5tX21lbSk7CisKKyAgICBwdGhfbmEtPnVwLm5hX2ZsYWdzIHw9IE5BRl9IT1NUX1JJTkdT OworCisgICAgZXJyb3IgPSBuZXRtYXBfYXR0YWNoX2NvbW1vbigmcHRoX25hLT51cCk7CisgICAg aWYgKGVycm9yKSB7CisgICAgICAgIEQoIkVSUk9SIG5ldG1hcF9hdHRhY2hfY29tbW9uKCkiKTsK KyAgICAgICAgZ290byBwdXRfb3V0OworICAgIH0KKworICAgICpuYSA9ICZwdGhfbmEtPnVwOwor ICAgIG5ldG1hcF9hZGFwdGVyX2dldCgqbmEpOworCisgICAgLyogc2V0IHBhcmVudCBidXN5LCBi ZWNhdXNlIGF0dGFjaGVkIGZvciBwdG5ldG1hcCAqLworICAgIHBhcmVudC0+bmFfZmxhZ3MgfD0g TkFGX0JVU1k7CisKKyAgICBzdHJuY3B5KHB0aF9uYS0+dXAubmFtZSwgcGFyZW50LT5uYW1lLCBz aXplb2YocHRoX25hLT51cC5uYW1lKSk7CisgICAgc3RyY2F0KHB0aF9uYS0+dXAubmFtZSwgIi1Q VE4iKTsKKworICAgIERCRyhEKCIlcyBwdG5ldG1hcCByZXF1ZXN0IERPTkUiLCBwdGhfbmEtPnVw Lm5hbWUpKTsKKworICAgIC8qIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgaWZwLCBpZiBhbnkg Ki8KKyAgICBpZiAoaWZwKQorICAgICAgICBpZl9yZWxlKGlmcCk7CisKKyAgICByZXR1cm4gMDsK KworcHV0X291dDoKKyAgICBuZXRtYXBfYWRhcHRlcl9wdXQocGFyZW50KTsKKyAgICBpZiAoaWZw KQorCWlmX3JlbGUoaWZwKTsKK3B1dF9vdXRfbm9wdXRwYXJlbnQ6CisgICAgbm1fb3NfZnJlZShw dGhfbmEpOworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvKiBXSVRIX1BUTkVUTUFQX0hP U1QgKi8KKworI2lmZGVmIFdJVEhfUFRORVRNQVBfR1VFU1QKKy8qCisgKiBHdWVzdCBwdG5ldG1h cCB0eHN5bmMoKS9yeHN5bmMoKSByb3V0aW5lcywgdXNlZCBpbiBwdG5ldCBkZXZpY2UgZHJpdmVy cy4KKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSByZXVzZWQgYWNyb3NzIHRoZSBkaWZmZXJlbnQgb3Bl cmF0aW5nIHN5c3RlbXMgc3VwcG9ydGVkCisgKiBieSBuZXRtYXAuCisgKi8KKworLyoKKyAqIFJl Y29uY2lsZSBob3N0IGFuZCBndWVzdCB2aWV3cyBvZiB0aGUgdHJhbnNtaXQgcmluZy4KKyAqCisg KiBHdWVzdCB1c2VyIHdhbnRzIHRvIHRyYW5zbWl0IHBhY2tldHMgdXAgdG8gdGhlIG9uZSBiZWZv cmUgcmluZy0+aGVhZCwKKyAqIGFuZCBndWVzdCBrZXJuZWwga25vd3MgdHhfcmluZy0+aHdjdXIg aXMgdGhlIGZpcnN0IHBhY2tldCB1bnNlbnQKKyAqIGJ5IHRoZSBob3N0IGtlcm5lbC4KKyAqCisg KiBXZSBwdXNoIG91dCBhcyBtYW55IHBhY2tldHMgYXMgcG9zc2libGUsIGFuZCBwb3NzaWJseQor ICogcmVjbGFpbSBidWZmZXJzIGZyb20gcHJldmlvdXNseSBjb21wbGV0ZWQgdHJhbnNtaXNzaW9u LgorICoKKyAqIE5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgaG9zdCBhcmUgZW5hYmxlZCBvbmx5IGlm IHRoZSB1c2VyIGd1ZXN0IHdvdWxkCisgKiBibG9jayAobm8gc3BhY2UgaW4gdGhlIHJpbmcpLgor ICovCitib29sCituZXRtYXBfcHRfZ3Vlc3RfdHhzeW5jKHN0cnVjdCBwdG5ldF9yaW5nICpwdHJp bmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkgICAgICAgaW50IGZsYWdzKQorewor CWJvb2wgbm90aWZ5ID0gZmFsc2U7CisKKwkvKiBEaXNhYmxlIG5vdGlmaWNhdGlvbnMgKi8KKwlw dHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisKKwkvKgorCSAqIEZpcnN0IHBhcnQ6IHRlbGwg dGhlIGhvc3QgKHVwZGF0aW5nIHRoZSBDU0IpIHRvIHByb2Nlc3MgdGhlIG5ldworCSAqIHBhY2tl dHMuCisJICovCisJa3JpbmctPm5yX2h3Y3VyID0gcHRyaW5nLT5od2N1cjsKKwlwdG5ldG1hcF9n dWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+cmN1ciwga3JpbmctPnJoZWFkKTsK KworICAgICAgICAvKiBBc2sgZm9yIGEga2ljayBmcm9tIGEgZ3Vlc3QgdG8gdGhlIGhvc3QgaWYg bmVlZGVkLiAqLworCWlmICgoa3JpbmctPnJoZWFkICE9IGtyaW5nLT5ucl9od2N1ciAmJgorCQlO TV9BQ0NFU1NfT05DRShwdHJpbmctPmhvc3RfbmVlZF9raWNrKSkgfHwKKwkJCShmbGFncyAmIE5B Rl9GT1JDRV9SRUNMQUlNKSkgeworCQlwdHJpbmctPnN5bmNfZmxhZ3MgPSBmbGFnczsKKwkJbm90 aWZ5ID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIFNlY29uZCBwYXJ0OiByZWNsYWltIGJ1ZmZlcnMg Zm9yIGNvbXBsZXRlZCB0cmFuc21pc3Npb25zLgorCSAqLworCWlmIChubV9rcl90eGVtcHR5KGty aW5nKSB8fCAoZmxhZ3MgJiBOQUZfRk9SQ0VfUkVDTEFJTSkpIHsKKyAgICAgICAgICAgICAgICBw dG5ldG1hcF9ndWVzdF9yZWFkX2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nKTsKKwl9CisKKyAgICAg ICAgLyoKKyAgICAgICAgICogTm8gbW9yZSByb29tIGluIHRoZSByaW5nIGZvciBuZXcgdHJhbnNt aXNzaW9ucy4gVGhlIHVzZXIgdGhyZWFkIHdpbGwKKwkgKiBnbyB0byBzbGVlcCBhbmQgd2UgbmVl ZCB0byBiZSBub3RpZmllZCBieSB0aGUgaG9zdCB3aGVuIG1vcmUgZnJlZQorCSAqIHNwYWNlIGlz IGF2YWlsYWJsZS4KKyAgICAgICAgICovCisJaWYgKG5tX2tyX3R4ZW1wdHkoa3JpbmcpKSB7CisJ CS8qIFJlZW5hYmxlIG5vdGlmaWNhdGlvbnMuICovCisJCXB0cmluZy0+Z3Vlc3RfbmVlZF9raWNr ID0gMTsKKyAgICAgICAgICAgICAgICAvKiBEb3VibGUgY2hlY2sgKi8KKyAgICAgICAgICAgICAg ICBwdG5ldG1hcF9ndWVzdF9yZWFkX2tyaW5nX2NzYihwdHJpbmcsIGtyaW5nKTsKKyAgICAgICAg ICAgICAgICAvKiBJZiB0aGVyZSBpcyBuZXcgZnJlZSBzcGFjZSwgZGlzYWJsZSBub3RpZmljYXRp b25zICovCisJCWlmICh1bmxpa2VseSghbm1fa3JfdHhlbXB0eShrcmluZykpKSB7CisJCQlwdHJp bmctPmd1ZXN0X25lZWRfa2ljayA9IDA7CisJCX0KKwl9CisKKwlORCgxLCAiVFggLSBDU0I6IGhl YWQ6JXUgY3VyOiV1IGh3dGFpbDoldSAtIEtSSU5HOiBoZWFkOiV1IGN1cjoldSB0YWlsOiAldSIs CisJCQlwdHJpbmctPmhlYWQsIHB0cmluZy0+Y3VyLCBwdHJpbmctPmh3dGFpbCwKKwkJCWtyaW5n LT5yaGVhZCwga3JpbmctPnJjdXIsIGtyaW5nLT5ucl9od3RhaWwpOworCisJcmV0dXJuIG5vdGlm eTsKK30KKworLyoKKyAqIFJlY29uY2lsZSBob3N0IGFuZCBndWVzdCB2aWV3IG9mIHRoZSByZWNl aXZlIHJpbmcuCisgKgorICogVXBkYXRlIGh3Y3VyL2h3dGFpbCBmcm9tIGhvc3QgKHJlYWRpbmcg ZnJvbSBDU0IpLgorICoKKyAqIElmIGd1ZXN0IHVzZXIgaGFzIHJlbGVhc2VkIGJ1ZmZlcnMgdXAg dG8gdGhlIG9uZSBiZWZvcmUgcmluZy0+aGVhZCwgd2UKKyAqIGFsc28gZ2l2ZSB0aGVtIHRvIHRo ZSBob3N0LgorICoKKyAqIE5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgaG9zdCBhcmUgZW5hYmxlZCBv bmx5IGlmIHRoZSB1c2VyIGd1ZXN0IHdvdWxkCisgKiBibG9jayAobm8gbW9yZSBjb21wbGV0ZWQg c2xvdHMgaW4gdGhlIHJpbmcpLgorICovCitib29sCituZXRtYXBfcHRfZ3Vlc3RfcnhzeW5jKHN0 cnVjdCBwdG5ldF9yaW5nICpwdHJpbmcsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nLAorCQkg ICAgICAgaW50IGZsYWdzKQoreworCWJvb2wgbm90aWZ5ID0gZmFsc2U7CisKKyAgICAgICAgLyog RGlzYWJsZSBub3RpZmljYXRpb25zICovCisJcHRyaW5nLT5ndWVzdF9uZWVkX2tpY2sgPSAwOwor CisJLyoKKwkgKiBGaXJzdCBwYXJ0OiBpbXBvcnQgbmV3bHkgcmVjZWl2ZWQgcGFja2V0cywgYnkg dXBkYXRpbmcgdGhlIGtyaW5nCisJICogaHd0YWlsIHRvIHRoZSBod3RhaWwga25vd24gZnJvbSB0 aGUgaG9zdCAocmVhZCBmcm9tIHRoZSBDU0IpLgorCSAqIFRoaXMgYWxzbyB1cGRhdGVzIHRoZSBr cmluZyBod2N1ci4KKwkgKi8KKyAgICAgICAgcHRuZXRtYXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2Io cHRyaW5nLCBrcmluZyk7CisJa3JpbmctPm5yX2tmbGFncyAmPSB+TktSX1BFTkRJTlRSOworCisJ LyoKKwkgKiBTZWNvbmQgcGFydDogdGVsbCB0aGUgaG9zdCBhYm91dCB0aGUgc2xvdHMgdGhhdCBn dWVzdCB1c2VyIGhhcworCSAqIHJlbGVhc2VkLCBieSB1cGRhdGluZyBjdXIgYW5kIGhlYWQgaW4g dGhlIENTQi4KKwkgKi8KKwlpZiAoa3JpbmctPnJoZWFkICE9IGtyaW5nLT5ucl9od2N1cikgewor CQlwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2IocHRyaW5nLCBrcmluZy0+cmN1ciwKKwkJ CQkJICAgICAgIGtyaW5nLT5yaGVhZCk7CisgICAgICAgICAgICAgICAgLyogQXNrIGZvciBhIGtp Y2sgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIGhvc3QgaWYgbmVlZGVkLiAqLworCQlpZiAoTk1fQUND RVNTX09OQ0UocHRyaW5nLT5ob3N0X25lZWRfa2ljaykpIHsKKwkJCXB0cmluZy0+c3luY19mbGFn cyA9IGZsYWdzOworCQkJbm90aWZ5ID0gdHJ1ZTsKKwkJfQorCX0KKworICAgICAgICAvKgorICAg ICAgICAgKiBObyBtb3JlIGNvbXBsZXRlZCBSWCBzbG90cy4gVGhlIHVzZXIgdGhyZWFkIHdpbGwg Z28gdG8gc2xlZXAgYW5kCisJICogd2UgbmVlZCB0byBiZSBub3RpZmllZCBieSB0aGUgaG9zdCB3 aGVuIG1vcmUgUlggc2xvdHMgaGF2ZSBiZWVuCisJICogY29tcGxldGVkLgorICAgICAgICAgKi8K KwlpZiAobm1fa3JfcnhlbXB0eShrcmluZykpIHsKKwkJLyogUmVlbmFibGUgbm90aWZpY2F0aW9u cy4gKi8KKyAgICAgICAgICAgICAgICBwdHJpbmctPmd1ZXN0X25lZWRfa2ljayA9IDE7CisgICAg ICAgICAgICAgICAgLyogRG91YmxlIGNoZWNrICovCisgICAgICAgICAgICAgICAgcHRuZXRtYXBf Z3Vlc3RfcmVhZF9rcmluZ19jc2IocHRyaW5nLCBrcmluZyk7CisgICAgICAgICAgICAgICAgLyog SWYgdGhlcmUgYXJlIG5ldyBzbG90cywgZGlzYWJsZSBub3RpZmljYXRpb25zLiAqLworCQlpZiAo IW5tX2tyX3J4ZW1wdHkoa3JpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHJpbmct Pmd1ZXN0X25lZWRfa2ljayA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKwlO RCgxLCAiUlggLSBDU0I6IGhlYWQ6JXUgY3VyOiV1IGh3dGFpbDoldSAtIEtSSU5HOiBoZWFkOiV1 IGN1cjoldSIsCisJCXB0cmluZy0+aGVhZCwgcHRyaW5nLT5jdXIsIHB0cmluZy0+aHd0YWlsLAor CQlrcmluZy0+cmhlYWQsIGtyaW5nLT5yY3VyKTsKKworCXJldHVybiBub3RpZnk7Cit9CisKKy8q CisgKiBDYWxsYmFja3MgZm9yIHB0bmV0IGRyaXZlcnM6IG5tX2tyaW5nc19jcmVhdGUsIG5tX2ty aW5nc19kZWxldGUsIG5tX2R0b3IuCisgKi8KK2ludAorcHRuZXRfbm1fa3JpbmdzX2NyZWF0ZShz dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBuZXRtYXBfcHRfZ3Vlc3RfYWRh cHRlciAqcHRuYSA9CisJCQkoc3RydWN0IG5ldG1hcF9wdF9ndWVzdF9hZGFwdGVyICopbmE7IC8q IFVwY2FzdC4gKi8KKwlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hX25tID0gJnB0bmEtPmh3dXAu dXA7CisJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYV9kciA9ICZwdG5hLT5kci51cDsKKwlpbnQg cmV0OworCisJaWYgKHB0bmEtPmJhY2tlbmRfcmVnaWZzKSB7CisJCXJldHVybiAwOworCX0KKwor CS8qIENyZWF0ZSBrcmluZ3Mgb24gdGhlIHB1YmxpYyBuZXRtYXAgYWRhcHRlci4gKi8KKwlyZXQg PSBuZXRtYXBfaHdfa3JpbmdzX2NyZWF0ZShuYV9ubSk7CisJaWYgKHJldCkgeworCQlyZXR1cm4g cmV0OworCX0KKworCS8qIENvcHkga3JpbmdzIGludG8gdGhlIG5ldG1hcCBhZGFwdGVyIHByaXZh dGUgdG8gdGhlIGRyaXZlci4gKi8KKwluYV9kci0+dHhfcmluZ3MgPSBuYV9ubS0+dHhfcmluZ3M7 CisJbmFfZHItPnJ4X3JpbmdzID0gbmFfbm0tPnJ4X3JpbmdzOworCisJcmV0dXJuIDA7Cit9CisK K3ZvaWQKK3B0bmV0X25tX2tyaW5nc19kZWxldGUoc3RydWN0IG5ldG1hcF9hZGFwdGVyICpuYSkK K3sKKwlzdHJ1Y3QgbmV0bWFwX3B0X2d1ZXN0X2FkYXB0ZXIgKnB0bmEgPQorCQkJKHN0cnVjdCBu ZXRtYXBfcHRfZ3Vlc3RfYWRhcHRlciAqKW5hOyAvKiBVcGNhc3QuICovCisJc3RydWN0IG5ldG1h cF9hZGFwdGVyICpuYV9ubSA9ICZwdG5hLT5od3VwLnVwOworCXN0cnVjdCBuZXRtYXBfYWRhcHRl ciAqbmFfZHIgPSAmcHRuYS0+ZHIudXA7CisKKwlpZiAocHRuYS0+YmFja2VuZF9yZWdpZnMpIHsK KwkJcmV0dXJuOworCX0KKworCW5hX2RyLT50eF9yaW5ncyA9IE5VTEw7CisJbmFfZHItPnJ4X3Jp bmdzID0gTlVMTDsKKworCW5ldG1hcF9od19rcmluZ3NfZGVsZXRlKG5hX25tKTsKK30KKwordm9p ZAorcHRuZXRfbm1fZHRvcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVjdCBu ZXRtYXBfcHRfZ3Vlc3RfYWRhcHRlciAqcHRuYSA9CisJCQkoc3RydWN0IG5ldG1hcF9wdF9ndWVz dF9hZGFwdGVyICopbmE7CisKKwluZXRtYXBfbWVtX3B1dChwdG5hLT5kci51cC5ubV9tZW0pOyAv LyBYWFggaXMgdGhpcyBuZWVkZWQ/CisJbWVtc2V0KCZwdG5hLT5kciwgMCwgc2l6ZW9mKHB0bmEt PmRyKSk7CisJbmV0bWFwX21lbV9wdF9ndWVzdF9pZnBfZGVsKG5hLT5ubV9tZW0sIG5hLT5pZnAp OworfQorCisjZW5kaWYgLyogV0lUSF9QVE5FVE1BUF9HVUVTVCAqLwpkaWZmIC11IC1yIC1OIHVz ci9zcmMvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX3ZhbGUuYyAvdXNyL3NyYy9zeXMvZGV2L25ldG1h cC9uZXRtYXBfdmFsZS5jCi0tLSB1c3Ivc3JjL3N5cy9kZXYvbmV0bWFwL25ldG1hcF92YWxlLmMJ MjAxNi0wOS0yOSAwMDoyNDo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9kZXYv bmV0bWFwL25ldG1hcF92YWxlLmMJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTYwNDIwMDAgKzAwMDAK QEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgVW5pdmVyc2l0 YWAgZGkgUGlzYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y MDE2IFVuaXZlcnNpdGFgIGRpIFBpc2EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU4LDcgQEAKIAogI2lmIGRlZmluZWQo X19GcmVlQlNEX18pCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+IC8qIHByZXJlcXVpc2l0ZSAqLwot X19GQlNESUQoIiRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvZGV2L25ldG1hcC9uZXRtYXBfdmFs ZS5jIDI4NTY5OCAyMDE1LTA3LTE5IDE4OjA2OjMwWiBsdWlnaSAkIik7CitfX0ZCU0RJRCgiJEZy ZWVCU0Q6IGhlYWQvc3lzL2Rldi9uZXRtYXAvbmV0bWFwLmMgMjU3MTc2IDIwMTMtMTAtMjYgMTc6 NTg6MzZaIGdsZWJpdXMgJCIpOwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8 c3lzL2Vycm5vLmg+CkBAIC0xMDEsNiArMTAyLDkgQEAKICN3YXJuaW5nIE9TWCBzdXBwb3J0IGlz IG9ubHkgcGFydGlhbAogI2luY2x1ZGUgIm9zeF9nbHVlLmgiCiAKKyNlbGlmIGRlZmluZWQoX1dJ TjMyKQorI2luY2x1ZGUgIndpbl9nbHVlLmgiCisKICNlbHNlCiAKICNlcnJvcglVbnN1cHBvcnRl ZCBwbGF0Zm9ybQpAQCAtMTE5LDcgKzEyMyw3IEBACiAKIC8qCiAgKiBzeXN0ZW0gcGFyYW1ldGVy cyAobW9zdCBvZiB0aGVtIGluIG5ldG1hcF9rZXJuLmgpCi0gKiBOTV9OQU1FCXByZWZpeCBmb3Ig c3dpdGNoIHBvcnQgbmFtZXMsIGRlZmF1bHQgInZhbGUiCisgKiBOTV9CREdfTkFNRQlwcmVmaXgg Zm9yIHN3aXRjaCBwb3J0IG5hbWVzLCBkZWZhdWx0ICJ2YWxlIgogICogTk1fQkRHX01BWFBPUlRT CW51bWJlciBvZiBwb3J0cwogICogTk1fQlJJREdFUwltYXggbnVtYmVyIG9mIHN3aXRjaGVzIGlu IHRoZSBzeXN0ZW0uCiAgKglYWFggc2hvdWxkIGJlY29tZSBhIHN5c2N0bCBvciB0dW5hYmxlCkBA IC0xNDQsNyArMTQ4LDYgQEAKICNkZWZpbmUgTk1fQkRHX0JBVENIX01BWAkoTk1fQkRHX0JBVENI ICsgTk1fTVVMVElTRUcpCiAvKiBOTV9GVF9OVUxMIHRlcm1pbmF0ZXMgYSBsaXN0IG9mIHNsb3Rz IGluIHRoZSBmdCAqLwogI2RlZmluZSBOTV9GVF9OVUxMCQlOTV9CREdfQkFUQ0hfTUFYCi0jZGVm aW5lCU5NX0JSSURHRVMJCTgJLyogbnVtYmVyIG9mIGJyaWRnZXMgKi8KIAogCiAvKgpAQCAtMTUy LDE0ICsxNTUsMTUgQEAKICAqIHVzZWQgaW4gdGhlIGJyaWRnZS4gVGhlIGFjdHVhbCB2YWx1ZSBt YXkgYmUgbGFyZ2VyIGFzIHRoZQogICogbGFzdCBwYWNrZXQgaW4gdGhlIGJsb2NrIG1heSBvdmVy ZmxvdyB0aGUgc2l6ZS4KICAqLwotaW50IGJyaWRnZV9iYXRjaCA9IE5NX0JER19CQVRDSDsgLyog YnJpZGdlIGJhdGNoIHNpemUgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JhdGNoID0gTk1fQkRHX0JB VENIOyAvKiBicmlkZ2UgYmF0Y2ggc2l6ZSAqLworU1lTQkVHSU4odmFyc192YWxlKTsKIFNZU0NU TF9ERUNMKF9kZXZfbmV0bWFwKTsKIFNZU0NUTF9JTlQoX2Rldl9uZXRtYXAsIE9JRF9BVVRPLCBi cmlkZ2VfYmF0Y2gsIENUTEZMQUdfUlcsICZicmlkZ2VfYmF0Y2gsIDAgLCAiIik7Ci0KK1NZU0VO RDsKIAogc3RhdGljIGludCBuZXRtYXBfdnBfY3JlYXRlKHN0cnVjdCBubXJlcSAqLCBzdHJ1Y3Qg aWZuZXQgKiwgc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICoqKTsKIHN0YXRpYyBpbnQgbmV0bWFw X3ZwX3JlZyhzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpOwotc3RhdGljIGlu dCBuZXRtYXBfYndyYXBfcmVnaXN0ZXIoc3RydWN0IG5ldG1hcF9hZGFwdGVyICosIGludCBvbm9m Zik7CitzdGF0aWMgaW50IG5ldG1hcF9id3JhcF9yZWcoc3RydWN0IG5ldG1hcF9hZGFwdGVyICos IGludCBvbm9mZik7CiAKIC8qCiAgKiBGb3IgZWFjaCBvdXRwdXQgaW50ZXJmYWNlLCBubV9iZGdf cSBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhIGxpc3QuCkBAIC0yMTMsNyArMjE3LDcgQEAKIAkgKiBm b3J3YXJkIHRoaXMgcGFja2V0LiAgcmluZ19uciBpcyB0aGUgc291cmNlIHJpbmcgaW5kZXgsIGFu ZCB0aGUKIAkgKiBmdW5jdGlvbiBtYXkgb3ZlcndyaXRlIHRoaXMgdmFsdWUgdG8gZm9yd2FyZCB0 aGlzIHBhY2tldCB0byBhCiAJICogZGlmZmVyZW50IHJpbmcgaW5kZXguCi0JICogVGhpcyBmdW5j dGlvbiBtdXN0IGJlIHNldCBieSBuZXRtYXBfYmRnY3RsKCkuCisJICogVGhpcyBmdW5jdGlvbiBt dXN0IGJlIHNldCBieSBuZXRtYXBfYmRnX2N0bCgpLgogCSAqLwogCXN0cnVjdCBuZXRtYXBfYmRn X29wcyBiZGdfb3BzOwogCkBAIC0yNDQsNyArMjQ4LDcgQEAKICAqIFJpZ2h0IG5vdyB3ZSBoYXZl IGEgc3RhdGljIGFycmF5IGFuZCBkZWxldGlvbnMgYXJlIHByb3RlY3RlZAogICogYnkgYW4gZXhj bHVzaXZlIGxvY2suCiAgKi8KLXN0cnVjdCBubV9icmlkZ2UgKm5tX2JyaWRnZXM7CitzdGF0aWMg c3RydWN0IG5tX2JyaWRnZSAqbm1fYnJpZGdlczsKICNlbmRpZiAvKiAhQ09ORklHX05FVF9OUyAq LwogCiAKQEAgLTI3OCw2ICsyODIsNDUgQEAKIH0KIAogCitzdGF0aWMgaW50CitubV9pc19pZF9j aGFyKGNvbnN0IGNoYXIgYykKK3sKKwlyZXR1cm4gKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fAor CSAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8CisJICAgICAgIChjID49ICcwJyAmJiBj IDw9ICc5JykgfHwKKwkgICAgICAgKGMgPT0gJ18nKTsKK30KKworLyogVmFsaWRhdGUgdGhlIG5h bWUgb2YgYSBWQUxFIGJyaWRnZSBwb3J0IGFuZCByZXR1cm4gdGhlCisgKiBwb3NpdGlvbiBvZiB0 aGUgIjoiIGNoYXJhY3Rlci4gKi8KK3N0YXRpYyBpbnQKK25tX3ZhbGVfbmFtZV92YWxpZGF0ZShj b25zdCBjaGFyICpuYW1lKQoreworCWludCBjb2xvbl9wb3MgPSAtMTsKKwlpbnQgaTsKKworCWlm ICghbmFtZSB8fCBzdHJsZW4obmFtZSkgPCBzdHJsZW4oTk1fQkRHX05BTUUpKSB7CisJCXJldHVy biAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBuYW1lW2ldOyBpKyspIHsKKwkJaWYgKG5hbWVbaV0g PT0gJzonKSB7CisJCQlpZiAoY29sb25fcG9zICE9IC0xKSB7CisJCQkJcmV0dXJuIC0xOworCQkJ fQorCQkJY29sb25fcG9zID0gaTsKKwkJfSBlbHNlIGlmICghbm1faXNfaWRfY2hhcihuYW1lW2ld KSkgeworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGkgPj0gSUZOQU1TSVopIHsKKwkJ cmV0dXJuIC0xOworCX0KKworCXJldHVybiBjb2xvbl9wb3M7Cit9CisKIC8qCiAgKiBsb2NhdGUg YSBicmlkZ2UgYW1vbmcgdGhlIGV4aXN0aW5nIG9uZXMuCiAgKiBNVVNUIEJFIENBTExFRCBXSVRI IE5NR19MT0NLKCkKQEAgLTI4OCw3ICszMzEsNyBAQAogc3RhdGljIHN0cnVjdCBubV9icmlkZ2Ug Kgogbm1fZmluZF9icmlkZ2UoY29uc3QgY2hhciAqbmFtZSwgaW50IGNyZWF0ZSkKIHsKLQlpbnQg aSwgbCwgbmFtZWxlbjsKKwlpbnQgaSwgbmFtZWxlbjsKIAlzdHJ1Y3Qgbm1fYnJpZGdlICpiID0g TlVMTCwgKmJyaWRnZXM7CiAJdV9pbnQgbnVtX2JyaWRnZXM7CiAKQEAgLTI5NiwyMSArMzM5LDEx IEBACiAKIAluZXRtYXBfYm5zX2dldGJyaWRnZXMoJmJyaWRnZXMsICZudW1fYnJpZGdlcyk7CiAK LQluYW1lbGVuID0gc3RybGVuKE5NX05BTUUpOwkvKiBiYXNlIGxlbmd0aCAqLwotCWwgPSBuYW1l ID8gc3RybGVuKG5hbWUpIDogMDsJCS8qIGFjdHVhbCBsZW5ndGggKi8KLQlpZiAobCA8IG5hbWVs ZW4pIHsKKwluYW1lbGVuID0gbm1fdmFsZV9uYW1lX3ZhbGlkYXRlKG5hbWUpOworCWlmIChuYW1l bGVuIDwgMCkgewogCQlEKCJpbnZhbGlkIGJyaWRnZSBuYW1lICVzIiwgbmFtZSA/IG5hbWUgOiBO VUxMKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWZvciAoaSA9IG5hbWVsZW4gKyAxOyBpIDwgbDsg aSsrKSB7Ci0JCWlmIChuYW1lW2ldID09ICc6JykgewotCQkJbmFtZWxlbiA9IGk7Ci0JCQlicmVh azsKLQkJfQotCX0KLQlpZiAobmFtZWxlbiA+PSBJRk5BTVNJWikKLQkJbmFtZWxlbiA9IElGTkFN U0laOwotCU5EKCItLS0gcHJlZml4IGlzICclLipzJyAtLS0iLCBuYW1lbGVuLCBuYW1lKTsKIAog CS8qIGxvb2t1cCB0aGUgbmFtZSwgcmVtZW1iZXIgZW1wdHkgc2xvdCBpZiB0aGVyZSBpcyBvbmUg Ki8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2JyaWRnZXM7IGkrKykgewpAQCAtMzYwLDcgKzM5Myw3 IEBACiAJa3JpbmcgPSBuYS0+dHhfcmluZ3M7CiAJZm9yIChpID0gMDsgaSA8IG5yaW5nczsgaSsr KSB7CiAJCWlmIChrcmluZ1tpXS5ua3JfZnQpIHsKLQkJCWZyZWUoa3JpbmdbaV0ubmtyX2Z0LCBN X0RFVkJVRik7CisJCQlubV9vc19mcmVlKGtyaW5nW2ldLm5rcl9mdCk7CiAJCQlrcmluZ1tpXS5u a3JfZnQgPSBOVUxMOyAvKiBwcm90ZWN0IGZyb20gZnJlZWluZyB0d2ljZSAqLwogCQl9CiAJfQpA QCAtMzkwLDcgKzQyMyw3IEBACiAJCXN0cnVjdCBubV9iZGdfcSAqZHN0cTsKIAkJaW50IGo7CiAK LQkJZnQgPSBtYWxsb2MobCwgTV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwkJZnQgPSBu bV9vc19tYWxsb2MobCk7CiAJCWlmICghZnQpIHsKIAkJCW5tX2ZyZWVfYmRnZndkKG5hKTsKIAkJ CXJldHVybiBFTk9NRU07CkBAIC00NzksNiArNTEyLDcgQEAKIAlzdHJ1Y3QgbmV0bWFwX3ZwX2Fk YXB0ZXIgKnZwbmEgPSAoc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICopbmE7CiAJc3RydWN0IG5t X2JyaWRnZSAqYiA9IHZwbmEtPm5hX2JkZzsKIAorCSh2b2lkKW5tcjsJLy8gWFhYIG1lcmdlID8K IAlpZiAoYXR0YWNoKQogCQlyZXR1cm4gMDsgLyogbm90aGluZyB0byBkbyAqLwogCWlmIChiKSB7 CkBAIC01MTgsNyArNTUyLDcgQEAKIAkJcmV0dXJuIEVOWElPOwogCU5NR19MT0NLKCk7CiAJLyog bWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBWQUxFIHBvcnQgKi8KLQlpZiAoIU5FVE1BUF9D QVBBQkxFKGlmcCkgfHwgTkEoaWZwKS0+bm1fcmVnaXN0ZXIgIT0gbmV0bWFwX3ZwX3JlZykgewor CWlmICghTk1fTkFfVkFMSUQoaWZwKSB8fCBOQShpZnApLT5ubV9yZWdpc3RlciAhPSBuZXRtYXBf dnBfcmVnKSB7CiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIGVycjsKIAl9CkBAIC01MzUsNyAr NTY5LDcgQEAKIAkgKi8KIAlpZl9yZWxlKGlmcCk7CiAJbmV0bWFwX2RldGFjaChpZnApOwotCW5t X3ZpX2RldGFjaChpZnApOworCW5tX29zX3ZpX2RldGFjaChpZnApOwogCXJldHVybiAwOwogCiBl cnI6CkBAIC01NDQsNiArNTc4LDE2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50 CitubV91cGRhdGVfaW5mbyhzdHJ1Y3Qgbm1yZXEgKm5tciwgc3RydWN0IG5ldG1hcF9hZGFwdGVy ICpuYSkKK3sKKwlubXItPm5yX3J4X3JpbmdzID0gbmEtPm51bV9yeF9yaW5nczsKKwlubXItPm5y X3R4X3JpbmdzID0gbmEtPm51bV90eF9yaW5nczsKKwlubXItPm5yX3J4X3Nsb3RzID0gbmEtPm51 bV9yeF9kZXNjOworCW5tci0+bnJfdHhfc2xvdHMgPSBuYS0+bnVtX3R4X2Rlc2M7CisJcmV0dXJu IG5ldG1hcF9tZW1fZ2V0X2luZm8obmEtPm5tX21lbSwgJm5tci0+bnJfbWVtc2l6ZSwgTlVMTCwg Jm5tci0+bnJfYXJnMik7Cit9CisKIC8qCiAgKiBDcmVhdGUgYSB2aXJ0dWFsIGludGVyZmFjZSBy ZWdpc3RlcmVkIHRvIHRoZSBzeXN0ZW0uCiAgKiBUaGUgaW50ZXJmYWNlIHdpbGwgYmUgYXR0YWNo ZWQgdG8gYSBicmlkZ2UgbGF0ZXIuCkBAIC01NTYsMTQgKzYwMCwyMiBAQAogCWludCBlcnJvcjsK IAogCS8qIGRvbid0IGluY2x1ZGUgVkFMRSBwcmVmaXggKi8KLQlpZiAoIXN0cm5jbXAobm1yLT5u cl9uYW1lLCBOTV9OQU1FLCBzdHJsZW4oTk1fTkFNRSkpKQorCWlmICghc3RybmNtcChubXItPm5y X25hbWUsIE5NX0JER19OQU1FLCBzdHJsZW4oTk1fQkRHX05BTUUpKSkKIAkJcmV0dXJuIEVJTlZB TDsKIAlpZnAgPSBpZnVuaXRfcmVmKG5tci0+bnJfbmFtZSk7CiAJaWYgKGlmcCkgeyAvKiBhbHJl YWR5IGV4aXN0LCBjYW5ub3QgY3JlYXRlIG5ldyBvbmUgKi8KKwkJZXJyb3IgPSBFRVhJU1Q7CisJ CU5NR19MT0NLKCk7CisJCWlmIChOTV9OQV9WQUxJRChpZnApKSB7CisJCQlpbnQgdXBkYXRlX2Vy ciA9IG5tX3VwZGF0ZV9pbmZvKG5tciwgTkEoaWZwKSk7CisJCQlpZiAodXBkYXRlX2VycikKKwkJ CQllcnJvciA9IHVwZGF0ZV9lcnI7CisJCX0KKwkJTk1HX1VOTE9DSygpOwogCQlpZl9yZWxlKGlm cCk7Ci0JCXJldHVybiBFRVhJU1Q7CisJCXJldHVybiBlcnJvcjsKIAl9Ci0JZXJyb3IgPSBubV92 aV9wZXJzaXN0KG5tci0+bnJfbmFtZSwgJmlmcCk7CisJZXJyb3IgPSBubV9vc192aV9wZXJzaXN0 KG5tci0+bnJfbmFtZSwgJmlmcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAg LTU3MiwxNSArNjI0LDI5IEBACiAJZXJyb3IgPSBuZXRtYXBfdnBfY3JlYXRlKG5tciwgaWZwLCAm dnBuYSk7CiAJaWYgKGVycm9yKSB7CiAJCUQoImVycm9yICVkIiwgZXJyb3IpOwotCQlubV92aV9k ZXRhY2goaWZwKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl8xOwogCX0KIAkvKiBwZXJz aXN0LXNwZWNpZmljIHJvdXRpbmVzICovCiAJdnBuYS0+dXAubm1fYmRnX2N0bCA9IG5ldG1hcF92 cF9iZGdfY3RsOwogCW5ldG1hcF9hZGFwdGVyX2dldCgmdnBuYS0+dXApOworCU5NX0FUVEFDSF9O QShpZnAsICZ2cG5hLT51cCk7CisJLyogcmV0dXJuIHRoZSB1cGRhdGVkIGluZm8gKi8KKwllcnJv ciA9IG5tX3VwZGF0ZV9pbmZvKG5tciwgJnZwbmEtPnVwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ290 byBlcnJfMjsKKwl9CisJRCgicmV0dXJuaW5nIG5yX2FyZzIgJWQiLCBubXItPm5yX2FyZzIpOwog CU5NR19VTkxPQ0soKTsKIAlEKCJjcmVhdGVkICVzIiwgaWZwLT5pZl94bmFtZSk7CiAJcmV0dXJu IDA7CisKK2Vycl8yOgorCW5ldG1hcF9kZXRhY2goaWZwKTsKK2Vycl8xOgorCU5NR19VTkxPQ0so KTsKKwlubV9vc192aV9kZXRhY2goaWZwKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogLyogVHJ5 IHRvIGdldCBhIHJlZmVyZW5jZSB0byBhIG5ldG1hcCBhZGFwdGVyIGF0dGFjaGVkIHRvIGEgVkFM RSBzd2l0Y2guCkBAIC02MDgsNyArNjc0LDcgQEAKIAogCS8qIGZpcnN0IHRyeSB0byBzZWUgaWYg dGhpcyBpcyBhIGJyaWRnZSBwb3J0LiAqLwogCU5NR19MT0NLX0FTU0VSVCgpOwotCWlmIChzdHJu Y21wKG5yX25hbWUsIE5NX05BTUUsIHNpemVvZihOTV9OQU1FKSAtIDEpKSB7CisJaWYgKHN0cm5j bXAobnJfbmFtZSwgTk1fQkRHX05BTUUsIHNpemVvZihOTV9CREdfTkFNRSkgLSAxKSkgewogCQly ZXR1cm4gMDsgIC8qIG5vIGVycm9yLCBidXQgbm8gVkFMRSBwcmVmaXggKi8KIAl9CiAKQEAgLTY3 NCw3ICs3NDAsNyBAQAogCQllcnJvciA9IG5ldG1hcF92cF9jcmVhdGUobm1yLCBOVUxMLCAmdnBu YSk7CiAJCWlmIChlcnJvcikgewogCQkJRCgiZXJyb3IgJWQiLCBlcnJvcik7Ci0JCQlmcmVlKGlm cCwgTV9ERVZCVUYpOworCQkJbm1fb3NfZnJlZShpZnApOwogCQkJcmV0dXJuIGVycm9yOwogCQl9 CiAJCS8qIHNob3J0Y3V0IC0gd2UgY2FuIHNraXAgZ2V0X2h3X25hKCksCkBAIC02OTMsNyArNzU5 LDYgQEAKIAkJCWdvdG8gb3V0OwogCQl2cG5hID0gaHctPm5hX3ZwOwogCQlob3N0bmEgPSBody0+ bmFfaG9zdHZwOwotCQlpZl9yZWxlKGlmcCk7CiAJCWlmIChubXItPm5yX2FyZzEgIT0gTkVUTUFQ X0JER19IT1NUKQogCQkJaG9zdG5hID0gTlVMTDsKIAl9CkBAIC03NjgsNiArODMzLDExIEBACiAJ cmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW5saW5lIGludAorbm1faXNfYndyYXAoc3RydWN0 IG5ldG1hcF9hZGFwdGVyICpuYSkKK3sKKwlyZXR1cm4gbmEtPm5tX3JlZ2lzdGVyID09IG5ldG1h cF9id3JhcF9yZWc7Cit9CiAKIC8qIHByb2Nlc3MgTkVUTUFQX0JER19ERVRBQ0ggKi8KIHN0YXRp YyBpbnQKQEAgLTc4NSw4ICs4NTUsMTMgQEAKIAlpZiAobmEgPT0gTlVMTCkgeyAvKiBWQUxFIHBy ZWZpeCBtaXNzaW5nICovCiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIHVubG9ja19leGl0Owor CX0gZWxzZSBpZiAobm1faXNfYndyYXAobmEpICYmCisJCSAgICgoc3RydWN0IG5ldG1hcF9id3Jh cF9hZGFwdGVyICopbmEpLT5uYV9wb2xsaW5nX3N0YXRlKSB7CisJCS8qIERvbid0IGRldGFjaCBh IE5JQyB3aXRoIHBvbGxpbmcgKi8KKwkJZXJyb3IgPSBFQlVTWTsKKwkJbmV0bWFwX2FkYXB0ZXJf cHV0KG5hKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKIAl9Ci0KIAlpZiAobmEtPm5tX2JkZ19jdGwp IHsKIAkJLyogcmVtb3ZlIHRoZSBwb3J0IGZyb20gYnJpZGdlLiBUaGUgYndyYXAKIAkJICogYWxz byBuZWVkcyB0byBwdXQgdGhlIGh3bmEgaW4gbm9ybWFsIG1vZGUKQEAgLTgwMSw2ICs4NzYsMjY2 IEBACiAKIH0KIAorc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlOworc3RydWN0CitubV9iZGdf a3RocmVhZCB7CisJc3RydWN0IG5tX2t0aHJlYWQgKm5tazsKKwl1X2ludCBxZmlyc3Q7CisJdV9p bnQgcWxhc3Q7CisJc3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHM7Cit9OworCitzdHJ1 Y3Qgbm1fYmRnX3BvbGxpbmdfc3RhdGUgeworCWJvb2wgY29uZmlndXJlZDsKKwlib29sIHN0b3Bw ZWQ7CisJc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVyICpibmE7CisJdV9pbnQgcmVnOworCXVf aW50IHFmaXJzdDsKKwl1X2ludCBxbGFzdDsKKwl1X2ludCBjcHVfZnJvbTsKKwl1X2ludCBuY3B1 czsKKwlzdHJ1Y3Qgbm1fYmRnX2t0aHJlYWQgKmt0aHJlYWRzOworfTsKKworc3RhdGljIHZvaWQK K25ldG1hcF9id3JhcF9wb2xsaW5nKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5tX2JkZ19rdGhy ZWFkICpuYmsgPSBkYXRhOworCXN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hOworCXVf aW50IHFmaXJzdCwgcWxhc3QsIGk7CisJc3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcwLCAqa3Jp bmc7CisKKwlpZiAoIW5iaykKKwkJcmV0dXJuOworCXFmaXJzdCA9IG5iay0+cWZpcnN0OworCXFs YXN0ID0gbmJrLT5xbGFzdDsKKwlibmEgPSBuYmstPmJwcy0+Ym5hOworCWtyaW5nMCA9IE5NUihi bmEtPmh3bmEsIE5SX1JYKTsKKworCWZvciAoaSA9IHFmaXJzdDsgaSA8IHFsYXN0OyBpKyspIHsK KwkJa3JpbmcgPSBrcmluZzAgKyBpOworCQlrcmluZy0+bm1fbm90aWZ5KGtyaW5nLCAwKTsKKwl9 Cit9CisKK3N0YXRpYyBpbnQKK25tX2JkZ19jcmVhdGVfa3RocmVhZHMoc3RydWN0IG5tX2JkZ19w b2xsaW5nX3N0YXRlICpicHMpCit7CisJc3RydWN0IG5tX2t0aHJlYWRfY2ZnIGtjZmc7CisJaW50 IGksIGo7CisKKwlicHMtPmt0aHJlYWRzID0gbm1fb3NfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm1f YmRnX2t0aHJlYWQpICogYnBzLT5uY3B1cyk7CisJaWYgKGJwcy0+a3RocmVhZHMgPT0gTlVMTCkK KwkJcmV0dXJuIEVOT01FTTsKKworCWJ6ZXJvKCZrY2ZnLCBzaXplb2Yoa2NmZykpOworCWtjZmcu d29ya2VyX2ZuID0gbmV0bWFwX2J3cmFwX3BvbGxpbmc7CisJZm9yIChpID0gMDsgaSA8IGJwcy0+ bmNwdXM7IGkrKykgeworCQlzdHJ1Y3Qgbm1fYmRnX2t0aHJlYWQgKnQgPSBicHMtPmt0aHJlYWRz ICsgaTsKKwkJaW50IGFsbCA9IChicHMtPm5jcHVzID09IDEgJiYgYnBzLT5yZWcgPT0gTlJfUkVH X0FMTF9OSUMpOworCQlpbnQgYWZmaW5pdHkgPSBicHMtPmNwdV9mcm9tICsgaTsKKworCQl0LT5i cHMgPSBicHM7CisJCXQtPnFmaXJzdCA9IGFsbCA/IGJwcy0+cWZpcnN0IC8qIG11c3QgYmUgMCAq LzogYWZmaW5pdHk7CisJCXQtPnFsYXN0ID0gYWxsID8gYnBzLT5xbGFzdCA6IHQtPnFmaXJzdCAr IDE7CisJCUQoImt0aHJlYWQgJWQgYToldSBxZjoldSBxbDoldSIsIGksIGFmZmluaXR5LCB0LT5x Zmlyc3QsCisJCQl0LT5xbGFzdCk7CisKKwkJa2NmZy50eXBlID0gaTsKKwkJa2NmZy53b3JrZXJf cHJpdmF0ZSA9IHQ7CisJCXQtPm5tayA9IG5tX29zX2t0aHJlYWRfY3JlYXRlKCZrY2ZnLCAwLCBO VUxMKTsKKwkJaWYgKHQtPm5tayA9PSBOVUxMKSB7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJ bm1fb3Nfa3RocmVhZF9zZXRfYWZmaW5pdHkodC0+bm1rLCBhZmZpbml0eSk7CisJfQorCXJldHVy biAwOworCitjbGVhbnVwOgorCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJc3RydWN0IG5t X2JkZ19rdGhyZWFkICp0ID0gYnBzLT5rdGhyZWFkcyArIGk7CisJCW5tX29zX2t0aHJlYWRfZGVs ZXRlKHQtPm5tayk7CisJfQorCW5tX29zX2ZyZWUoYnBzLT5rdGhyZWFkcyk7CisJcmV0dXJuIEVG QVVMVDsKK30KKworLyogYSB2ZXJzaW9uIG9mIHB0bmV0bWFwX3N0YXJ0X2t0aHJlYWRzKCkgKi8K K3N0YXRpYyBpbnQKK25tX2JkZ19wb2xsaW5nX3N0YXJ0X2t0aHJlYWRzKHN0cnVjdCBubV9iZGdf cG9sbGluZ19zdGF0ZSAqYnBzKQoreworCWludCBlcnJvciwgaSwgajsKKworCWlmICghYnBzKSB7 CisJCUQoInBvbGxpbmcgaXMgbm90IGNvbmZpZ3VyZWQiKTsKKwkJcmV0dXJuIEVGQVVMVDsKKwl9 CisJYnBzLT5zdG9wcGVkID0gZmFsc2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnBzLT5uY3B1czsg aSsrKSB7CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOwor CQllcnJvciA9IG5tX29zX2t0aHJlYWRfc3RhcnQodC0+bm1rKTsKKwkJaWYgKGVycm9yKSB7CisJ CQlEKCJlcnJvciBpbiBubV9rdGhyZWFkX3N0YXJ0KCkiKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJ fQorCX0KKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7 CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOworCQlubV9v c19rdGhyZWFkX3N0b3AodC0+bm1rKTsKKwl9CisJYnBzLT5zdG9wcGVkID0gdHJ1ZTsKKwlyZXR1 cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkCitubV9iZGdfcG9sbGluZ19zdG9wX2RlbGV0ZV9r dGhyZWFkcyhzdHJ1Y3Qgbm1fYmRnX3BvbGxpbmdfc3RhdGUgKmJwcykKK3sKKwlpbnQgaTsKKwor CWlmICghYnBzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgYnBzLT5uY3B1czsgaSsr KSB7CisJCXN0cnVjdCBubV9iZGdfa3RocmVhZCAqdCA9IGJwcy0+a3RocmVhZHMgKyBpOworCQlu bV9vc19rdGhyZWFkX3N0b3AodC0+bm1rKTsKKwkJbm1fb3Nfa3RocmVhZF9kZWxldGUodC0+bm1r KTsKKwl9CisJYnBzLT5zdG9wcGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGludAorZ2V0X3BvbGxp bmdfY2ZnKHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLAorCQkJ c3RydWN0IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHMpCit7CisJaW50IHJlcV9jcHVzLCBhdmFp bF9jcHVzLCBjb3JlX2Zyb207CisJdV9pbnQgcmVnLCBpLCBxZmlyc3QsIHFsYXN0OworCisJYXZh aWxfY3B1cyA9IG5tX29zX25jcHVzKCk7CisJcmVxX2NwdXMgPSBubXItPm5yX2FyZzE7CisKKwlp ZiAocmVxX2NwdXMgPT0gMCkgeworCQlEKCJyZXFfY3B1cyBtdXN0IGJlID4gMCIpOworCQlyZXR1 cm4gRUlOVkFMOworCX0gZWxzZSBpZiAocmVxX2NwdXMgPj0gYXZhaWxfY3B1cykgeworCQlEKCJm b3Igc2FmZXR5LCB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBjb3JlIGxlZnQgaW4gdGhlIHN5c3RlbSIp OworCQlyZXR1cm4gRUlOVkFMOworCX0KKwlyZWcgPSBubXItPm5yX2ZsYWdzICYgTlJfUkVHX01B U0s7CisJaSA9IG5tci0+bnJfcmluZ2lkICYgTkVUTUFQX1JJTkdfTUFTSzsKKwkvKgorCSAqIE9O RV9OSUM6IGRlZGljYXRlIG9uZSBjb3JlIHRvIG9uZSByaW5nLiBJZiBtdWx0aXBsZSBjb3Jlcwor CSAqICAgICAgICAgIGFyZSBzcGVjaWZpZWQsIGNvbnNlY3V0aXZlIHJpbmdzIGFyZSBhbHNvIHBv bGxlZC4KKwkgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgcmluZ2lkPTIgYW5kIDIgY29yZXMg YXJlIGdpdmVuLAorCSAqICAgICAgICAgIHJpbmcgMiBhbmQgMyBhcmUgcG9sbGVkIGJ5IGNvcmUg MiBhbmQgMywgcmVzcGVjdGl2ZWx5LgorCSAqIEFMTF9OSUM6IHBvbGwgYWxsIHRoZSByaW5ncyB1 c2luZyBhIGNvcmUgc3BlY2lmaWVkIGJ5IHJpbmdpZC4KKwkgKiAgICAgICAgICB0aGUgbnVtYmVy IG9mIGNvcmVzIG11c3QgYmUgMS4KKwkgKi8KKwlpZiAocmVnID09IE5SX1JFR19PTkVfTklDKSB7 CisJCWlmIChpICsgcmVxX2NwdXMgPiBubWFfZ2V0X25yaW5ncyhuYSwgTlJfUlgpKSB7CisJCQlE KCJvbmx5ICVkIHJpbmdzIGV4aXN0IChyaW5nICV1LSV1IGlzIGdpdmVuKSIsCisJCQkJbm1hX2dl dF9ucmluZ3MobmEsIE5SX1JYKSwgaSwgaStyZXFfY3B1cyk7CisJCQlyZXR1cm4gRUlOVkFMOwor CQl9CisJCXFmaXJzdCA9IGk7CisJCXFsYXN0ID0gcWZpcnN0ICsgcmVxX2NwdXM7CisJCWNvcmVf ZnJvbSA9IHFmaXJzdDsKKwl9IGVsc2UgaWYgKHJlZyA9PSBOUl9SRUdfQUxMX05JQykgeworCQlp ZiAocmVxX2NwdXMgIT0gMSkgeworCQkJRCgibmNwdXMgbXVzdCBiZSAxIG5vdCAlZCBmb3IgUkVH X0FMTF9OSUMiLCByZXFfY3B1cyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJCXFmaXJzdCA9 IDA7CisJCXFsYXN0ID0gbm1hX2dldF9ucmluZ3MobmEsIE5SX1JYKTsKKwkJY29yZV9mcm9tID0g aTsKKwl9IGVsc2UgeworCQlEKCJyZWcgbXVzdCBiZSBBTExfTklDIG9yIE9ORV9OSUMiKTsKKwkJ cmV0dXJuIEVJTlZBTDsKKwl9CisKKwlicHMtPnJlZyA9IHJlZzsKKwlicHMtPnFmaXJzdCA9IHFm aXJzdDsKKwlicHMtPnFsYXN0ID0gcWxhc3Q7CisJYnBzLT5jcHVfZnJvbSA9IGNvcmVfZnJvbTsK KwlicHMtPm5jcHVzID0gcmVxX2NwdXM7CisJRCgiJXMgcWZpcnN0ICV1IHFsYXN0ICV1IGNwdV9m cm9tICV1IG5jcHVzICV1IiwKKwkJcmVnID09IE5SX1JFR19BTExfTklDID8gIlJFR19BTExfTklD IiA6ICJSRUdfT05FX05JQyIsCisJCXFmaXJzdCwgcWxhc3QsIGNvcmVfZnJvbSwgcmVxX2NwdXMp OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitubV9iZGdfY3RsX3BvbGxpbmdfc3RhcnQo c3RydWN0IG5tcmVxICpubXIsIHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEpCit7CisJc3RydWN0 IG5tX2JkZ19wb2xsaW5nX3N0YXRlICpicHM7CisJc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVy ICpibmE7CisJaW50IGVycm9yOworCisJYm5hID0gKHN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRl ciAqKW5hOworCWlmIChibmEtPm5hX3BvbGxpbmdfc3RhdGUpIHsKKwkJRCgiRVJST1IgYWRhcHRl ciBhbHJlYWR5IGluIHBvbGxpbmcgbW9kZSIpOworCQlyZXR1cm4gRUZBVUxUOworCX0KKworCWJw cyA9IG5tX29zX21hbGxvYyhzaXplb2YoKmJwcykpOworCWlmICghYnBzKQorCQlyZXR1cm4gRU5P TUVNOworCWJwcy0+Y29uZmlndXJlZCA9IGZhbHNlOworCWJwcy0+c3RvcHBlZCA9IHRydWU7CisK KwlpZiAoZ2V0X3BvbGxpbmdfY2ZnKG5tciwgbmEsIGJwcykpIHsKKwkJbm1fb3NfZnJlZShicHMp OworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCWlmIChubV9iZGdfY3JlYXRlX2t0aHJlYWRzKGJw cykpIHsKKwkJbm1fb3NfZnJlZShicHMpOworCQlyZXR1cm4gRUZBVUxUOworCX0KKworCWJwcy0+ Y29uZmlndXJlZCA9IHRydWU7CisJYm5hLT5uYV9wb2xsaW5nX3N0YXRlID0gYnBzOworCWJwcy0+ Ym5hID0gYm5hOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgaWYgcG9zc2libGUgKi8KKwlpZiAo Ym5hLT5od25hLT5ubV9pbnRyKQorCQlibmEtPmh3bmEtPm5tX2ludHIoYm5hLT5od25hLCAwKTsK KwkvKiBzdGFydCBrdGhyZWFkIG5vdyAqLworCWVycm9yID0gbm1fYmRnX3BvbGxpbmdfc3RhcnRf a3RocmVhZHMoYnBzKTsKKwlpZiAoZXJyb3IpIHsKKwkJRCgiRVJST1Igbm1fYmRnX3BvbGxpbmdf c3RhcnRfa3RocmVhZCgpIik7CisJCW5tX29zX2ZyZWUoYnBzLT5rdGhyZWFkcyk7CisJCW5tX29z X2ZyZWUoYnBzKTsKKwkJYm5hLT5uYV9wb2xsaW5nX3N0YXRlID0gTlVMTDsKKwkJaWYgKGJuYS0+ aHduYS0+bm1faW50cikKKwkJCWJuYS0+aHduYS0+bm1faW50cihibmEtPmh3bmEsIDEpOworCX0K KwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQKK25tX2JkZ19jdGxfcG9sbGluZ19zdG9w KHN0cnVjdCBubXJlcSAqbm1yLCBzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hKQoreworCXN0cnVj dCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hID0gKHN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRl ciAqKW5hOworCXN0cnVjdCBubV9iZGdfcG9sbGluZ19zdGF0ZSAqYnBzOworCisJaWYgKCFibmEt Pm5hX3BvbGxpbmdfc3RhdGUpIHsKKwkJRCgiRVJST1IgYWRhcHRlciBpcyBub3QgaW4gcG9sbGlu ZyBtb2RlIik7CisJCXJldHVybiBFRkFVTFQ7CisJfQorCWJwcyA9IGJuYS0+bmFfcG9sbGluZ19z dGF0ZTsKKwlubV9iZGdfcG9sbGluZ19zdG9wX2RlbGV0ZV9rdGhyZWFkcyhibmEtPm5hX3BvbGxp bmdfc3RhdGUpOworCWJwcy0+Y29uZmlndXJlZCA9IGZhbHNlOworCW5tX29zX2ZyZWUoYnBzKTsK KwlibmEtPm5hX3BvbGxpbmdfc3RhdGUgPSBOVUxMOworCS8qIHJlZW5hYmxlIGludGVycnVwdCAq LworCWlmIChibmEtPmh3bmEtPm5tX2ludHIpCisJCWJuYS0+aHduYS0+bm1faW50cihibmEtPmh3 bmEsIDEpOworCXJldHVybiAwOworfQogCiAvKiBDYWxsZWQgYnkgZWl0aGVyIHVzZXIncyBjb250 ZXh0IChuZXRtYXBfaW9jdGwoKSkKICAqIG9yIGV4dGVybmFsIGtlcm5lbCBtb2R1bGVzIChlLmcu LCBPcGVudnN3aXRjaCkuCkBAIC04NDMsNyArMTE3OCw3IEBACiAJY2FzZSBORVRNQVBfQkRHX0xJ U1Q6CiAJCS8qIHRoaXMgaXMgdXNlZCB0byBlbnVtZXJhdGUgYnJpZGdlcyBhbmQgcG9ydHMgKi8K IAkJaWYgKG5hbWVsZW4pIHsgLyogbG9vayB1cCBpbmRleGVzIG9mIGJyaWRnZSBhbmQgcG9ydCAq LwotCQkJaWYgKHN0cm5jbXAobmFtZSwgTk1fTkFNRSwgc3RybGVuKE5NX05BTUUpKSkgeworCQkJ aWYgKHN0cm5jbXAobmFtZSwgTk1fQkRHX05BTUUsIHN0cmxlbihOTV9CREdfTkFNRSkpKSB7CiAJ CQkJZXJyb3IgPSBFSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04NTUsNyArMTE5MCw5IEBA CiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWVycm9yID0gRU5PRU5UOworCQkJZXJyb3IgPSAwOwor CQkJbm1yLT5ucl9hcmcxID0gYiAtIGJyaWRnZXM7IC8qIGJyaWRnZSBpbmRleCAqLworCQkJbm1y LT5ucl9hcmcyID0gTk1fQkRHX05PUE9SVDsKIAkJCWZvciAoaiA9IDA7IGogPCBiLT5iZGdfYWN0 aXZlX3BvcnRzOyBqKyspIHsKIAkJCQlpID0gYi0+YmRnX3BvcnRfaW5kZXhbal07CiAJCQkJdnBu YSA9IGItPmJkZ19wb3J0c1tpXTsKQEAgLTg2NywxMCArMTIwNCw3IEBACiAJCQkJICogdmlydHVh bCBwb3J0IGFuZCBhIE5JQywgcmVzcGVjdGl2ZWx5CiAJCQkJICovCiAJCQkJaWYgKCFzdHJjbXAo dnBuYS0+dXAubmFtZSwgbmFtZSkpIHsKLQkJCQkJLyogYnJpZGdlIGluZGV4ICovCi0JCQkJCW5t ci0+bnJfYXJnMSA9IGIgLSBicmlkZ2VzOwogCQkJCQlubXItPm5yX2FyZzIgPSBpOyAvKiBwb3J0 IGluZGV4ICovCi0JCQkJCWVycm9yID0gMDsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAt OTM3LDEwICsxMjcxLDM0IEBACiAJCWVycm9yID0gbmV0bWFwX2dldF9iZGdfbmEobm1yLCAmbmEs IDApOwogCQlpZiAobmEgJiYgIWVycm9yKSB7CiAJCQl2cG5hID0gKHN0cnVjdCBuZXRtYXBfdnBf YWRhcHRlciAqKW5hOwotCQkJdnBuYS0+dmlydF9oZHJfbGVuID0gbm1yLT5ucl9hcmcxOwotCQkJ aWYgKHZwbmEtPnZpcnRfaGRyX2xlbikKKwkJCW5hLT52aXJ0X2hkcl9sZW4gPSBubXItPm5yX2Fy ZzE7CisJCQlpZiAobmEtPnZpcnRfaGRyX2xlbikgewogCQkJCXZwbmEtPm1mcyA9IE5FVE1BUF9C VUZfU0laRShuYSk7Ci0JCQlEKCJVc2luZyB2bmV0X2hkcl9sZW4gJWQgZm9yICVwIiwgdnBuYS0+ dmlydF9oZHJfbGVuLCB2cG5hKTsKKwkJCX0KKwkJCUQoIlVzaW5nIHZuZXRfaGRyX2xlbiAlZCBm b3IgJXAiLCBuYS0+dmlydF9oZHJfbGVuLCBuYSk7CisJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEp OworCQl9IGVsc2UgaWYgKCFuYSkgeworCQkJZXJyb3IgPSBFTlhJTzsKKwkJfQorCQlOTUdfVU5M T0NLKCk7CisJCWJyZWFrOworCisJY2FzZSBORVRNQVBfQkRHX1BPTExJTkdfT046CisJY2FzZSBO RVRNQVBfQkRHX1BPTExJTkdfT0ZGOgorCQlOTUdfTE9DSygpOworCQllcnJvciA9IG5ldG1hcF9n ZXRfYmRnX25hKG5tciwgJm5hLCAwKTsKKwkJaWYgKG5hICYmICFlcnJvcikgeworCQkJaWYgKCFu bV9pc19id3JhcChuYSkpIHsKKwkJCQllcnJvciA9IEVPUE5PVFNVUFA7CisJCQl9IGVsc2UgaWYg KGNtZCA9PSBORVRNQVBfQkRHX1BPTExJTkdfT04pIHsKKwkJCQllcnJvciA9IG5tX2JkZ19jdGxf cG9sbGluZ19zdGFydChubXIsIG5hKTsKKwkJCQlpZiAoIWVycm9yKQorCQkJCQluZXRtYXBfYWRh cHRlcl9nZXQobmEpOworCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IG5tX2JkZ19jdGxfcG9sbGlu Z19zdG9wKG5tciwgbmEpOworCQkJCWlmICghZXJyb3IpCisJCQkJCW5ldG1hcF9hZGFwdGVyX3B1 dChuYSk7CisJCQl9CiAJCQluZXRtYXBfYWRhcHRlcl9wdXQobmEpOwogCQl9CiAJCU5NR19VTkxP Q0soKTsKQEAgLTEwOTcsMTAgKzE0NTUsMTIgQEAKIAkJCWZ0X2kgPSBubV9iZGdfZmx1c2goZnQs IGZ0X2ksIG5hLCByaW5nX25yKTsKIAl9CiAJaWYgKGZyYWdzID4gMSkgewotCQlEKCJ0cnVuY2F0 ZSBpbmNvbXBsZXRlIGZyYWdtZW50IGF0ICVkICglZCBmcmFncykiLCBmdF9pLCBmcmFncyk7Ci0J CS8vIGZ0X2kgPiAwLCBmdFtmdF9pLTFdLmZsYWdzIGhhcyBOU19NT1JFRlJBRwotCQlmdFtmdF9p IC0gMV0uZnRfZnJhZ3MgJj0gfk5TX01PUkVGUkFHOwotCQlmdFtmdF9pIC0gZnJhZ3NdLmZ0X2Zy YWdzID0gZnJhZ3MgLSAxOworCQkvKiBIZXJlIGZ0X2kgPiAwLCBmdFtmdF9pLTFdLmZsYWdzIGhh cyBOU19NT1JFRlJBRywgYW5kIHdlCisJCSAqIGhhdmUgdG8gZml4IGZyYWdzIGNvdW50LiAqLwor CQlmcmFncy0tOworCQlmdFtmdF9pIC0gMV0uZnRfZmxhZ3MgJj0gfk5TX01PUkVGUkFHOworCQlm dFtmdF9pIC0gZnJhZ3NdLmZ0X2ZyYWdzID0gZnJhZ3M7CisJCUQoIlRydW5jYXRlIGluY29tcGxl dGUgZnJhZ21lbnQgYXQgJWQgKCVkIGZyYWdzKSIsIGZ0X2ksIGZyYWdzKTsKIAl9CiAJaWYgKGZ0 X2kpCiAJCWZ0X2kgPSBubV9iZGdfZmx1c2goZnQsIGZ0X2ksIG5hLCByaW5nX25yKTsKQEAgLTEx NTcsNiArMTUxNyw4IEBACiB7CiAJc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICp2cG5hID0KIAkJ KHN0cnVjdCBuZXRtYXBfdnBfYWRhcHRlciopbmE7CisJZW51bSB0eHJ4IHQ7CisJaW50IGk7CiAK IAkvKiBwZXJzaXN0ZW50IHBvcnRzIG1heSBiZSBwdXQgaW4gbmV0bWFwIG1vZGUKIAkgKiBiZWZv cmUgYmVpbmcgYXR0YWNoZWQgdG8gYSBicmlkZ2UKQEAgLTExNjQsMTIgKzE1MjYsMzAgQEAKIAlp ZiAodnBuYS0+bmFfYmRnKQogCQlCREdfV0xPQ0sodnBuYS0+bmFfYmRnKTsKIAlpZiAob25vZmYp IHsKLQkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CisJCWZvcl9yeF90eCh0KSB7CisJ CQlmb3IgKGkgPSAwOyBpIDwgbm1hX2dldF9ucmluZ3MobmEsIHQpICsgMTsgaSsrKSB7CisJCQkJ c3RydWN0IG5ldG1hcF9rcmluZyAqa3JpbmcgPSAmTk1SKG5hLCB0KVtpXTsKKworCQkJCWlmIChu bV9rcmluZ19wZW5kaW5nX29uKGtyaW5nKSkKKwkJCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVU TUFQX09OOworCQkJfQorCQl9CisJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5h X2ZsYWdzIHw9IE5BRl9ORVRNQVBfT047CiAJCSAvKiBYWFggb24gRnJlZUJTRCwgcGVyc2lzdGVu dCBWQUxFIHBvcnRzIHNob3VsZCBhbHNvCiAJCSAqIHRvZ2dsZSBJRkNBUF9ORVRNQVAgaW4gbmEt PmlmcCAoMjAxNC0wMy0xNikKIAkJICovCiAJfSBlbHNlIHsKLQkJbmEtPm5hX2ZsYWdzICY9IH5O QUZfTkVUTUFQX09OOworCQlpZiAobmEtPmFjdGl2ZV9mZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFn cyAmPSB+TkFGX05FVE1BUF9PTjsKKwkJZm9yX3J4X3R4KHQpIHsKKwkJCWZvciAoaSA9IDA7IGkg PCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspIHsKKwkJCQlzdHJ1Y3QgbmV0bWFwX2ty aW5nICprcmluZyA9ICZOTVIobmEsIHQpW2ldOworCisJCQkJaWYgKG5tX2tyaW5nX3BlbmRpbmdf b2ZmKGtyaW5nKSkKKwkJCQkJa3JpbmctPm5yX21vZGUgPSBOS1JfTkVUTUFQX09GRjsKKwkJCX0K KwkJfQogCX0KIAlpZiAodnBuYS0+bmFfYmRnKQogCQlCREdfV1VOTE9DSyh2cG5hLT5uYV9iZGcp OwpAQCAtMTE5MywxMyArMTU3MywxNCBAQAogCXVpbnQzMl90IHNoLCBkaDsKIAl1X2ludCBkc3Qs IG15c3JjID0gbmEtPmJkZ19wb3J0OwogCXVpbnQ2NF90IHNtYWMsIGRtYWM7CisJdWludDhfdCBp bmRidWZbMTJdOwogCiAJLyogc2FmZXR5IGNoZWNrLCB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgbWFu eSBjYXNlcyAqLwotCWlmIChidWZfbGVuID49IDE0ICsgbmEtPnZpcnRfaGRyX2xlbikgeworCWlm IChidWZfbGVuID49IDE0ICsgbmEtPnVwLnZpcnRfaGRyX2xlbikgewogCQkvKiB2aXJ0aGRyICsg bWFjX2hkciBpbiB0aGUgc2FtZSBzbG90ICovCi0JCWJ1ZiArPSBuYS0+dmlydF9oZHJfbGVuOwot CQlidWZfbGVuIC09IG5hLT52aXJ0X2hkcl9sZW47Ci0JfSBlbHNlIGlmIChidWZfbGVuID09IG5h LT52aXJ0X2hkcl9sZW4gJiYgZnQtPmZ0X2ZsYWdzICYgTlNfTU9SRUZSQUcpIHsKKwkJYnVmICs9 IG5hLT51cC52aXJ0X2hkcl9sZW47CisJCWJ1Zl9sZW4gLT0gbmEtPnVwLnZpcnRfaGRyX2xlbjsK Kwl9IGVsc2UgaWYgKGJ1Zl9sZW4gPT0gbmEtPnVwLnZpcnRfaGRyX2xlbiAmJiBmdC0+ZnRfZmxh Z3MgJiBOU19NT1JFRlJBRykgewogCQkvKiBvbmx5IGhlYWRlciBpbiBmaXJzdCBmcmFnbWVudCAq LwogCQlmdCsrOwogCQlidWYgPSBmdC0+ZnRfYnVmOwpAQCAtMTIwOCw2ICsxNTg5LDE0IEBACiAJ CVJEKDUsICJpbnZhbGlkIGJ1ZiBmb3JtYXQsIGxlbmd0aCAlZCIsIGJ1Zl9sZW4pOwogCQlyZXR1 cm4gTk1fQkRHX05PUE9SVDsKIAl9CisKKwlpZiAoZnQtPmZ0X2ZsYWdzICYgTlNfSU5ESVJFQ1Qp IHsKKwkJaWYgKGNvcHlpbihidWYsIGluZGJ1Ziwgc2l6ZW9mKGluZGJ1ZikpKSB7CisJCQlyZXR1 cm4gTk1fQkRHX05PUE9SVDsKKwkJfQorCQlidWYgPSBpbmRidWY7CisJfQorCiAJZG1hYyA9IGxl NjR0b2goKih1aW50NjRfdCAqKShidWYpKSAmIDB4ZmZmZmZmZmZmZmZmOwogCXNtYWMgPSBsZTY0 dG9oKCoodWludDY0X3QgKikoYnVmICsgNCkpOwogCXNtYWMgPj49IDE2OwpAQCAtMTMyMSw3ICsx NzEwLDcgQEAKIAlzdHJ1Y3Qgbm1fYmRnX3EgKmRzdF9lbnRzLCAqYnJkZHN0OwogCXVpbnQxNl90 IG51bV9kc3RzID0gMCwgKmRzdHM7CiAJc3RydWN0IG5tX2JyaWRnZSAqYiA9IG5hLT5uYV9iZGc7 Ci0JdV9pbnQgaSwgaiwgbWUgPSBuYS0+YmRnX3BvcnQ7CisJdV9pbnQgaSwgbWUgPSBuYS0+YmRn X3BvcnQ7CiAKIAkvKgogCSAqIFRoZSB3b3JrIGFyZWEgKHBvaW50ZWQgYnkgZnQpIGlzIGZvbGxv d2VkIGJ5IGFuIGFycmF5IG9mCkBAIC0xMzQxLDcgKzE3MzAsNyBAQAogCQlORCgic2xvdCAlZCBm cmFncyAlZCIsIGksIGZ0W2ldLmZ0X2ZyYWdzKTsKIAkJLyogRHJvcCB0aGUgcGFja2V0IGlmIHRo ZSB2aXJ0aW8tbmV0IGhlYWRlciBpcyBub3QgaW50byB0aGUgZmlyc3QKIAkJICAgZnJhZ21lbnQg bm9yIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kLiAqLwotCQlpZiAodW5saWtl bHkobmEtPnZpcnRfaGRyX2xlbiA+IGZ0W2ldLmZ0X2xlbikpCisJCWlmICh1bmxpa2VseShuYS0+ dXAudmlydF9oZHJfbGVuID4gZnRbaV0uZnRfbGVuKSkKIAkJCWNvbnRpbnVlOwogCQlkc3RfcG9y dCA9IGItPmJkZ19vcHMubG9va3VwKCZmdFtpXSwgJmRzdF9yaW5nLCBuYSk7CiAJCWlmIChuZXRt YXBfdmVyYm9zZSA+IDI1NSkKQEAgLTEzODIsNiArMTc3MSw3IEBACiAJICovCiAJYnJkZHN0ID0g ZHN0X2VudHMgKyBOTV9CREdfQlJPQURDQVNUICogTk1fQkRHX01BWFJJTkdTOwogCWlmIChicmRk c3QtPmJxX2hlYWQgIT0gTk1fRlRfTlVMTCkgeworCQl1X2ludCBqOwogCQlmb3IgKGogPSAwOyBs aWtlbHkoaiA8IGItPmJkZ19hY3RpdmVfcG9ydHMpOyBqKyspIHsKIAkJCXVpbnQxNl90IGRfaTsK IAkJCWkgPSBiLT5iZGdfcG9ydF9pbmRleFtqXTsKQEAgLTE0NDEsOCArMTgzMSw5IEBACiAJCSAq LwogCQluZWVkZWQgPSBkLT5icV9sZW4gKyBicmRkc3QtPmJxX2xlbjsKIAotCQlpZiAodW5saWtl bHkoZHN0X25hLT52aXJ0X2hkcl9sZW4gIT0gbmEtPnZpcnRfaGRyX2xlbikpIHsKLQkJCVJEKDMs ICJ2aXJ0X2hkcl9taXNtYXRjaCwgc3JjICVkIGRzdCAlZCIsIG5hLT52aXJ0X2hkcl9sZW4sIGRz dF9uYS0+dmlydF9oZHJfbGVuKTsKKwkJaWYgKHVubGlrZWx5KGRzdF9uYS0+dXAudmlydF9oZHJf bGVuICE9IG5hLT51cC52aXJ0X2hkcl9sZW4pKSB7CisJCQlSRCgzLCAidmlydF9oZHJfbWlzbWF0 Y2gsIHNyYyAlZCBkc3QgJWQiLCBuYS0+dXAudmlydF9oZHJfbGVuLAorCQkJICAgICAgZHN0X25h LT51cC52aXJ0X2hkcl9sZW4pOwogCQkJLyogVGhlcmUgaXMgYSB2aXJ0aW8tbmV0IGhlYWRlci9v ZmZsb2FkaW5ncyBtaXNtYXRjaCBiZXR3ZWVuCiAJCQkgKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u LiBUaGUgc2xvd2VyIG1pc21hdGNoIGRhdGFwYXRoIHdpbGwKIAkJCSAqIGJlIHVzZWQgdG8gY29w ZSB3aXRoIGFsbCB0aGUgbWlzbWF0Y2hlcy4KQEAgLTE3NjgsMTAgKzIxNTksMTAgQEAKIHsKIAlz dHJ1Y3QgbmV0bWFwX3ZwX2FkYXB0ZXIgKnZwbmE7CiAJc3RydWN0IG5ldG1hcF9hZGFwdGVyICpu YTsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gMDsKIAl1X2ludCBucGlwZXMgPSAwOwogCi0J dnBuYSA9IG1hbGxvYyhzaXplb2YoKnZwbmEpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8p OworCXZwbmEgPSBubV9vc19tYWxsb2Moc2l6ZW9mKCp2cG5hKSk7CiAJaWYgKHZwbmEgPT0gTlVM TCkKIAkJcmV0dXJuIEVOT01FTTsKIApAQCAtMTgwMyw3ICsyMTk0LDYgQEAKIAlubV9ib3VuZF92 YXIoJm5tci0+bnJfYXJnMywgMCwgMCwKIAkJCTEyOCpOTV9CREdfTUFYU0xPVFMsIE5VTEwpOwog CW5hLT5udW1fcnhfZGVzYyA9IG5tci0+bnJfcnhfc2xvdHM7Ci0JdnBuYS0+dmlydF9oZHJfbGVu ID0gMDsKIAl2cG5hLT5tZnMgPSAxNTE0OwogCXZwbmEtPmxhc3Rfc21hYyA9IH4wbGx1OwogCS8q aWYgKHZwbmEtPm1mcyA+IG5ldG1hcF9idWZfc2l6ZSkgIFRPRE8gbmV0bWFwX2J1Zl9zaXplIGlz IHplcm8/PwpAQCAtMTgyMyw3ICsyMjEzLDEwIEBACiAJbmEtPm5tX2tyaW5nc19jcmVhdGUgPSBu ZXRtYXBfdnBfa3JpbmdzX2NyZWF0ZTsKIAluYS0+bm1fa3JpbmdzX2RlbGV0ZSA9IG5ldG1hcF92 cF9rcmluZ3NfZGVsZXRlOwogCW5hLT5ubV9kdG9yID0gbmV0bWFwX3ZwX2R0b3I7Ci0JbmEtPm5t X21lbSA9IG5ldG1hcF9tZW1fcHJpdmF0ZV9uZXcobmEtPm5hbWUsCisJRCgibnJfYXJnMiAlZCIs IG5tci0+bnJfYXJnMik7CisJbmEtPm5tX21lbSA9IChubXItPm5yX2FyZzIgPiAwKSA/CisJCW5l dG1hcF9tZW1fZmluZChubXItPm5yX2FyZzIpOgorCQluZXRtYXBfbWVtX3ByaXZhdGVfbmV3KAog CQkJbmEtPm51bV90eF9yaW5ncywgbmEtPm51bV90eF9kZXNjLAogCQkJbmEtPm51bV9yeF9yaW5n cywgbmEtPm51bV9yeF9kZXNjLAogCQkJbm1yLT5ucl9hcmczLCBucGlwZXMsICZlcnJvcik7CkBA IC0xODM5LDggKzIyMzIsOCBAQAogCiBlcnI6CiAJaWYgKG5hLT5ubV9tZW0gIT0gTlVMTCkKLQkJ bmV0bWFwX21lbV9kZWxldGUobmEtPm5tX21lbSk7Ci0JZnJlZSh2cG5hLCBNX0RFVkJVRik7CisJ CW5ldG1hcF9tZW1fcHV0KG5hLT5ubV9tZW0pOworCW5tX29zX2ZyZWUodnBuYSk7CiAJcmV0dXJu IGVycm9yOwogfQogCkBAIC0xODgwLDE5ICsyMjczLDE5IEBACiB7CiAJc3RydWN0IG5ldG1hcF9i d3JhcF9hZGFwdGVyICpibmEgPSAoc3RydWN0IG5ldG1hcF9id3JhcF9hZGFwdGVyKiluYTsKIAlz dHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmh3bmEgPSBibmEtPmh3bmE7CisJc3RydWN0IG5tX2JyaWRn ZSAqYiA9IGJuYS0+dXAubmFfYmRnLAorCQkqYmggPSBibmEtPmhvc3QubmFfYmRnOworCisJbmV0 bWFwX21lbV9wdXQoYm5hLT5ob3N0LnVwLm5tX21lbSk7CisKKwlpZiAoYikgeworCQluZXRtYXBf YmRnX2RldGFjaF9jb21tb24oYiwgYm5hLT51cC5iZGdfcG9ydCwKKwkJCSAgICAoYmggPyBibmEt Pmhvc3QuYmRnX3BvcnQgOiAtMSkpOworCX0KIAogCU5EKCJuYSAlcCIsIG5hKTsKLQkvKiBkcm9w IHJlZmVyZW5jZSB0byBod25hLT5pZnAuCi0JICogSWYgd2UgZG9uJ3QgZG8gdGhpcywgbmV0bWFw X2RldGFjaF9jb21tb24obmEpCi0JICogd2lsbCB0aGluayBpdCBoYXMgc2V0IE5BKG5hLT5pZnAp IHRvIE5VTEwKLQkgKi8KIAluYS0+aWZwID0gTlVMTDsKLQkvKiBmb3Igc2FmZXR5LCBhbHNvIGRy b3AgdGhlIHBvc3NpYmxlIHJlZmVyZW5jZQotCSAqIGluIHRoZSBob3N0bmEKLQkgKi8KIAlibmEt Pmhvc3QudXAuaWZwID0gTlVMTDsKLQotCWh3bmEtPm5tX21lbSA9IGJuYS0+c2F2ZV9ubWQ7CiAJ aHduYS0+bmFfcHJpdmF0ZSA9IE5VTEw7CiAJaHduYS0+bmFfdnAgPSBod25hLT5uYV9ob3N0dnAg PSBOVUxMOwogCWh3bmEtPm5hX2ZsYWdzICY9IH5OQUZfQlVTWTsKQEAgLTE5MTYsNyArMjMwOSw4 IEBACiAgKiAocGFydCBhcyBhIHJlY2VpdmUgcmluZywgcGFydCBhcyBhIHRyYW5zbWl0IHJpbmcp LgogICoKICAqIGNhbGxiYWNrIHRoYXQgb3ZlcndyaXRlcyB0aGUgaHduYSBub3RpZnkgY2FsbGJh Y2suCi0gKiBQYWNrZXRzIGNvbWUgZnJvbSB0aGUgb3V0c2lkZSBvciBmcm9tIHRoZSBob3N0IHN0 YWNrIGFuZCBhcmUgcHV0IG9uIGFuIGh3bmEgcnggcmluZy4KKyAqIFBhY2tldHMgY29tZSBmcm9t IHRoZSBvdXRzaWRlIG9yIGZyb20gdGhlIGhvc3Qgc3RhY2sgYW5kIGFyZSBwdXQgb24gYW4KKyAq IGh3bmEgcnggcmluZy4KICAqIFRoZSBicmlkZ2Ugd3JhcHBlciB0aGVuIHNlbmRzIHRoZSBwYWNr ZXRzIHRocm91Z2ggdGhlIGJyaWRnZS4KICAqLwogc3RhdGljIGludApAQCAtMTkyNywxOSArMjMy MSwxOCBAQAogCXN0cnVjdCBuZXRtYXBfa3JpbmcgKmJrcmluZzsKIAlzdHJ1Y3QgbmV0bWFwX3Zw X2FkYXB0ZXIgKnZwbmEgPSAmYm5hLT51cDsKIAl1X2ludCByaW5nX25yID0ga3JpbmctPnJpbmdf aWQ7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgcmV0ID0gTk1fSVJRX0NPTVBMRVRFRDsKKwlpbnQg ZXJyb3I7CiAKIAlpZiAobmV0bWFwX3ZlcmJvc2UpCiAJICAgIEQoIiVzICVzIDB4JXgiLCBuYS0+ bmFtZSwga3JpbmctPm5hbWUsIGZsYWdzKTsKIAotCWlmICghbm1fbmV0bWFwX29uKG5hKSkKLQkJ cmV0dXJuIDA7Ci0KIAlia3JpbmcgPSAmdnBuYS0+dXAudHhfcmluZ3NbcmluZ19ucl07CiAKIAkv KiBtYWtlIHN1cmUgdGhlIHJpbmcgaXMgbm90IGRpc2FibGVkICovCi0JaWYgKG5tX2tyX3RyeWdl dChrcmluZykpCi0JCXJldHVybiAwOworCWlmIChubV9rcl90cnlnZXQoa3JpbmcsIDAgLyogY2Fu J3Qgc2xlZXAgKi8sIE5VTEwpKSB7CisJCXJldHVybiBFSU87CisJfQogCiAJaWYgKG5ldG1hcF92 ZXJib3NlKQogCSAgICBEKCIlcyBoZWFkICVkIGN1ciAlZCB0YWlsICVkIiwgIG5hLT5uYW1lLApA QCAtMTk1MSw5ICsyMzQ0LDEwIEBACiAJZXJyb3IgPSBrcmluZy0+bm1fc3luYyhrcmluZywgMCk7 CiAJaWYgKGVycm9yKQogCQlnb3RvIHB1dF9vdXQ7Ci0JaWYgKGtyaW5nLT5ucl9od2N1ciA9PSBr cmluZy0+bnJfaHd0YWlsICYmIG5ldG1hcF92ZXJib3NlKSB7Ci0JCUQoImhvdyBzdHJhbmdlLCBp bnRlcnJ1cHQgd2l0aCBubyBwYWNrZXRzIG9uICVzIiwKLQkJCW5hLT5uYW1lKTsKKwlpZiAoa3Jp bmctPm5yX2h3Y3VyID09IGtyaW5nLT5ucl9od3RhaWwpIHsKKwkJaWYgKG5ldG1hcF92ZXJib3Nl KQorCQkJRCgiaG93IHN0cmFuZ2UsIGludGVycnVwdCB3aXRoIG5vIHBhY2tldHMgb24gJXMiLAor CQkJICAgIG5hLT5uYW1lKTsKIAkJZ290byBwdXRfb3V0OwogCX0KIApAQCAtMTk3MCwyOCArMjM2 NCwzMiBAQAogCS8qIGFub3RoZXIgY2FsbCB0byBhY3R1YWxseSByZWxlYXNlIHRoZSBidWZmZXJz ICovCiAJZXJyb3IgPSBrcmluZy0+bm1fc3luYyhrcmluZywgMCk7CiAKKwkvKiBUaGUgc2Vjb25k IHJ4c3luYyBtYXkgaGF2ZSBmdXJ0aGVyIGFkdmFuY2VkIGh3dGFpbC4gSWYgdGhpcyBoYXBwZW5z LAorCSAqICByZXR1cm4gTk1fSVJRX1JFU0NIRUQsIG90aGVyd2lzZSBqdXN0IHJldHVybiBOTV9J UlFfQ09NUExFVEVELiAqLworCWlmIChrcmluZy0+cmN1ciAhPSBrcmluZy0+bnJfaHd0YWlsKSB7 CisJCXJldCA9IE5NX0lSUV9SRVNDSEVEOworCX0KIHB1dF9vdXQ6CiAJbm1fa3JfcHV0KGtyaW5n KTsKLQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IHJldDsKIH0KIAog CiAvKiBubV9yZWdpc3RlciBjYWxsYmFjayBmb3IgYndyYXAgKi8KIHN0YXRpYyBpbnQKLW5ldG1h cF9id3JhcF9yZWdpc3RlcihzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKm5hLCBpbnQgb25vZmYpCitu ZXRtYXBfYndyYXBfcmVnKHN0cnVjdCBuZXRtYXBfYWRhcHRlciAqbmEsIGludCBvbm9mZikKIHsK IAlzdHJ1Y3QgbmV0bWFwX2J3cmFwX2FkYXB0ZXIgKmJuYSA9CiAJCShzdHJ1Y3QgbmV0bWFwX2J3 cmFwX2FkYXB0ZXIgKiluYTsKIAlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmh3bmEgPSBibmEtPmh3 bmE7CiAJc3RydWN0IG5ldG1hcF92cF9hZGFwdGVyICpob3N0bmEgPSAmYm5hLT5ob3N0OwotCWlu dCBlcnJvcjsKKwlpbnQgZXJyb3IsIGk7CiAJZW51bSB0eHJ4IHQ7CiAKIAlORCgiJXMgJXMiLCBu YS0+bmFtZSwgb25vZmYgPyAib24iIDogIm9mZiIpOwogCiAJaWYgKG9ub2ZmKSB7Ci0JCWludCBp OwotCiAJCS8qIG5ldG1hcF9kb19yZWdpZiBoYXMgYmVlbiBjYWxsZWQgb24gdGhlIGJ3cmFwIG5h LgogCQkgKiBXZSBuZWVkIHRvIHBhc3MgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQogCQkgKiBt ZW1vcnkgYWxsb2NhdG9yIGRvd24gdG8gdGhlIGh3bmEgYmVmb3JlCkBAIC0yMDEwLDE2ICsyNDA4 LDMyIEBACiAJCS8qIGNyb3NzLWxpbmsgdGhlIG5ldG1hcCByaW5ncwogCQkgKiBUaGUgb3JpZ2lu YWwgbnVtYmVyIG9mIHJpbmdzIGNvbWVzIGZyb20gaHduYSwKIAkJICogcnggcmluZ3Mgb24gb25l IHNpZGUgZXF1YWxzIHR4IHJpbmdzIG9uIHRoZSBvdGhlci4KLQkJICogV2UgbmVlZCB0byBkbyB0 aGlzIG5vdywgYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uCi0JCSAqIG9mIHRoZSBrcmluZy0+cmlu ZyBwb2ludGVycwogCQkgKi8KIAkJZm9yX3J4X3R4KHQpIHsKLQkJCWVudW0gdHhyeCByPSBubV90 eHJ4X3N3YXAodCk7IC8qIHN3YXAgTlJfVFggPC0+IE5SX1JYICovCi0JCQlmb3IgKGkgPSAwOyBp IDwgbm1hX2dldF9ucmluZ3MobmEsIHIpICsgMTsgaSsrKSB7Ci0JCQkJTk1SKGh3bmEsIHQpW2ld Lm5rcl9udW1fc2xvdHMgPSBOTVIobmEsIHIpW2ldLm5rcl9udW1fc2xvdHM7Ci0JCQkJTk1SKGh3 bmEsIHQpW2ldLnJpbmcgPSBOTVIobmEsIHIpW2ldLnJpbmc7CisJCQllbnVtIHR4cnggciA9IG5t X3R4cnhfc3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlggKi8KKwkJCWZvciAoaSA9IDA7 IGkgPCBubWFfZ2V0X25yaW5ncyhod25hLCByKSArIDE7IGkrKykgeworCQkJCU5NUihod25hLCBy KVtpXS5yaW5nID0gTk1SKG5hLCB0KVtpXS5yaW5nOwogCQkJfQogCQl9CisKKwkJaWYgKG5hLT5u YV9mbGFncyAmIE5BRl9IT1NUX1JJTkdTKSB7CisJCQlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmhu YSA9ICZob3N0bmEtPnVwOworCQkJLyogdGhlIGhvc3RuYSByaW5ncyBhcmUgdGhlIGhvc3Qgcmlu Z3Mgb2YgdGhlIGJ3cmFwLgorCQkJICogVGhlIGNvcnJlc3BvbmRpbmcga3JpbmdzIG11c3QgcG9p bnQgYmFjayB0byB0aGUKKwkJCSAqIGhvc3RuYQorCQkJICovCisJCQlobmEtPnR4X3JpbmdzID0g Jm5hLT50eF9yaW5nc1tuYS0+bnVtX3R4X3JpbmdzXTsKKwkJCWhuYS0+dHhfcmluZ3NbMF0ubmEg PSBobmE7CisJCQlobmEtPnJ4X3JpbmdzID0gJm5hLT5yeF9yaW5nc1tuYS0+bnVtX3J4X3Jpbmdz XTsKKwkJCWhuYS0+cnhfcmluZ3NbMF0ubmEgPSBobmE7CisJCX0KKwl9CisKKwkvKiBwYXNzIGRv d24gdGhlIHBlbmRpbmcgcmluZyBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCWZvcl9yeF90eCh0KSB7 CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBpKyspCisJCQlO TVIoaHduYSwgdClbaV0ubnJfcGVuZGluZ19tb2RlID0KKwkJCQlOTVIobmEsIHQpW2ldLm5yX3Bl bmRpbmdfbW9kZTsKIAl9CiAKIAkvKiBmb3J3YXJkIHRoZSByZXF1ZXN0IHRvIHRoZSBod25hICov CkBAIC0yMDI3LDYgKzI0NDEsMTMgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAor CS8qIGNvcHkgdXAgdGhlIGN1cnJlbnQgcmluZyBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCWZvcl9y eF90eCh0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBubWFfZ2V0X25yaW5ncyhuYSwgdCkgKyAxOyBp KyspCisJCQlOTVIobmEsIHQpW2ldLm5yX21vZGUgPQorCQkJCU5NUihod25hLCB0KVtpXS5ucl9t b2RlOworCX0KKwogCS8qIGltcGVyc29uYXRlIGEgbmV0bWFwX3ZwX2FkYXB0ZXIgKi8KIAluZXRt YXBfdnBfcmVnKG5hLCBvbm9mZik7CiAJaWYgKGhvc3RuYS0+bmFfYmRnKQpAQCAtMjA0Niw4ICsy NDY3LDE0IEBACiAJCQkvKiBhbHNvIGludGVyY2VwdCB0aGUgaG9zdCByaW5nIG5vdGlmeSAqLwog CQkJaHduYS0+cnhfcmluZ3NbaV0ubm1fbm90aWZ5ID0gbmV0bWFwX2J3cmFwX2ludHJfbm90aWZ5 OwogCQl9CisJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKQorCQkJbmEtPm5hX2ZsYWdzIHw9IE5B Rl9ORVRNQVBfT047CiAJfSBlbHNlIHsKIAkJdV9pbnQgaTsKKworCQlpZiAobmEtPmFjdGl2ZV9m ZHMgPT0gMCkKKwkJCW5hLT5uYV9mbGFncyAmPSB+TkFGX05FVE1BUF9PTjsKKwogCQkvKiByZXNl dCBhbGwgbm90aWZ5IGNhbGxiYWNrcyAoaW5jbHVkaW5nIGhvc3QgcmluZykgKi8KIAkJZm9yIChp ID0gMDsgaSA8PSBod25hLT5udW1fcnhfcmluZ3M7IGkrKykgewogCQkJaHduYS0+cnhfcmluZ3Nb aV0ubm1fbm90aWZ5ID0gaHduYS0+cnhfcmluZ3NbaV0uc2F2ZV9ub3RpZnk7CkBAIC0yMDg5LDgg KzI1MTYsOCBAQAogCXN0cnVjdCBuZXRtYXBfYndyYXBfYWRhcHRlciAqYm5hID0KIAkJKHN0cnVj dCBuZXRtYXBfYndyYXBfYWRhcHRlciAqKW5hOwogCXN0cnVjdCBuZXRtYXBfYWRhcHRlciAqaHdu YSA9IGJuYS0+aHduYTsKLQlzdHJ1Y3QgbmV0bWFwX2FkYXB0ZXIgKmhvc3RuYSA9ICZibmEtPmhv c3QudXA7Ci0JaW50IGVycm9yOworCWludCBpLCBlcnJvciA9IDA7CisJZW51bSB0eHJ4IHQ7CiAK IAlORCgiJXMiLCBuYS0+bmFtZSk7CiAKQEAgLTIxMDIsMjYgKzI1MjksMjMgQEAKIAkvKiBhbHNv IGNyZWF0ZSB0aGUgaHduYSBrcmluZ3MgKi8KIAllcnJvciA9IGh3bmEtPm5tX2tyaW5nc19jcmVh dGUoaHduYSk7CiAJaWYgKGVycm9yKSB7Ci0JCW5ldG1hcF92cF9rcmluZ3NfZGVsZXRlKG5hKTsK LQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl9kZWxfdnBfcmluZ3M7CiAJfQotCS8qIHRoZSBj b25uZWN0aW9uIGJldHdlZW4gdGhlIGJ3cmFwIGtyaW5ncyBhbmQgdGhlIGh3bmEga3JpbmdzCi0J ICogd2lsbCBiZSBwZXJmb21lZCBsYXRlciwgaW4gdGhlIG5tX3JlZ2lzdGVyIGNhbGxiYWNrLCBz aW5jZQotCSAqIG5vdyB0aGUga3JpbmctPnJpbmcgcG9pbnRlcnMgaGF2ZSBub3QgYmVlbiBpbml0 aWFsaXplZCB5ZXQKLQkgKi8KIAotCWlmIChuYS0+bmFfZmxhZ3MgJiBOQUZfSE9TVF9SSU5HUykg ewotCQkvKiB0aGUgaG9zdG5hIHJpbmdzIGFyZSB0aGUgaG9zdCByaW5ncyBvZiB0aGUgYndyYXAu Ci0JCSAqIFRoZSBjb3JyZXNwb25kaW5nIGtyaW5ncyBtdXN0IHBvaW50IGJhY2sgdG8gdGhlCi0J CSAqIGhvc3RuYQotCQkgKi8KLQkJaG9zdG5hLT50eF9yaW5ncyA9ICZuYS0+dHhfcmluZ3NbbmEt Pm51bV90eF9yaW5nc107Ci0JCWhvc3RuYS0+dHhfcmluZ3NbMF0ubmEgPSBob3N0bmE7Ci0JCWhv c3RuYS0+cnhfcmluZ3MgPSAmbmEtPnJ4X3JpbmdzW25hLT5udW1fcnhfcmluZ3NdOwotCQlob3N0 bmEtPnJ4X3JpbmdzWzBdLm5hID0gaG9zdG5hOworCS8qIGdldCBlYWNoIHJpbmcgc2xvdCBudW1i ZXIgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBod25hIHJpbmcgKi8KKwlmb3JfcnhfdHgodCkgewor CQllbnVtIHR4cnggciA9IG5tX3R4cnhfc3dhcCh0KTsgLyogc3dhcCBOUl9UWCA8LT4gTlJfUlgg Ki8KKwkJZm9yIChpID0gMDsgaSA8IG5tYV9nZXRfbnJpbmdzKGh3bmEsIHIpICsgMTsgaSsrKSB7 CisJCQlOTVIobmEsIHQpW2ldLm5rcl9udW1fc2xvdHMgPSBOTVIoaHduYSwgcilbaV0ubmtyX251 bV9zbG90czsKKwkJfQogCX0KIAogCXJldHVybiAwOworCitlcnJfZGVsX3ZwX3JpbmdzOgorCW5l dG1hcF92cF9rcmluZ3NfZGVsZXRlKG5hKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogCkBAIC0y MTQ5LDE5ICsyNTczLDE4IEBACiAJdV9pbnQgcmluZ19uID0ga3JpbmctPnJpbmdfaWQ7CiAJdV9p bnQgbGltID0ga3JpbmctPm5rcl9udW1fc2xvdHMgLSAxOwogCXN0cnVjdCBuZXRtYXBfa3Jpbmcg Kmh3X2tyaW5nOwotCWludCBlcnJvciA9IDA7CisJaW50IGVycm9yOwogCi0JTkQoIiVzOiBuYSAl cyBod25hICVzIiwgCisJTkQoIiVzOiBuYSAlcyBod25hICVzIiwKIAkJCShrcmluZyA/IGtyaW5n LT5uYW1lIDogIk5VTEwhIiksCiAJCQkobmEgPyBuYS0+bmFtZSA6ICJOVUxMISIpLAogCQkJKGh3 bmEgPyBod25hLT5uYW1lIDogIk5VTEwhIikpOwogCWh3X2tyaW5nID0gJmh3bmEtPnR4X3Jpbmdz W3Jpbmdfbl07CiAKLQlpZiAobm1fa3JfdHJ5Z2V0KGh3X2tyaW5nKSkKLQkJcmV0dXJuIDA7CisJ aWYgKG5tX2tyX3RyeWdldChod19rcmluZywgMCwgTlVMTCkpIHsKKwkJcmV0dXJuIEVOWElPOwor CX0KIAotCWlmICghbm1fbmV0bWFwX29uKGh3bmEpKQotCQlyZXR1cm4gMDsKIAkvKiBmaXJzdCBz dGVwOiBzaW11bGF0ZSBhIHVzZXIgd2FrZXVwIG9uIHRoZSByeCByaW5nICovCiAJbmV0bWFwX3Zw X3J4c3luYyhrcmluZywgZmxhZ3MpOwogCU5EKCIlc1slZF0gUFJFIHJ4KGMlM2QgdCUzZCBsJTNk KSByaW5nKGglM2QgYyUzZCB0JTNkKSB0eChjJTNkIGh0JTNkIHQlM2QpIiwKQEAgLTIxNzUsNyAr MjU5OCw3IEBACiAJaHdfa3JpbmctPnJoZWFkID0gaHdfa3JpbmctPnJjdXIgPSBrcmluZy0+bnJf aHd0YWlsOwogCWVycm9yID0gaHdfa3JpbmctPm5tX3N5bmMoaHdfa3JpbmcsIGZsYWdzKTsKIAlp ZiAoZXJyb3IpCi0JCWdvdG8gb3V0OworCQlnb3RvIHB1dF9vdXQ7CiAKIAkvKiB0aGlyZCBzdGVw OiBub3cgd2UgYXJlIGJhY2sgdGhlIHJ4IHJpbmcgKi8KIAkvKiBjbGFpbSBvd25lcnNoaXAgb24g YWxsIGh3IG93bmVkIGJ1ZnMgKi8KQEAgLTIxODgsOSArMjYxMSwxMCBAQAogCQlrcmluZy0+bnJf aHdjdXIsIGtyaW5nLT5ucl9od3RhaWwsIGtyaW5nLT5ua3JfaHdsZWFzZSwKIAkJcmluZy0+aGVh ZCwgcmluZy0+Y3VyLCByaW5nLT50YWlsLAogCQlod19rcmluZy0+bnJfaHdjdXIsIGh3X2tyaW5n LT5ucl9od3RhaWwsIGh3X2tyaW5nLT5ydGFpbCk7Ci1vdXQ6CitwdXRfb3V0OgogCW5tX2tyX3B1 dChod19rcmluZyk7Ci0JcmV0dXJuIGVycm9yOworCisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBO TV9JUlFfQ09NUExFVEVEOwogfQogCiAKQEAgLTIyMTcsNDQgKzI2NDEsMjMgQEAKIAkJCS8qIG5v dGhpbmcgdG8gZG8gKi8KIAkJCXJldHVybiAwOwogCQl9Ci0JCW5wcml2ID0gbWFsbG9jKHNpemVv ZigqbnByaXYpLCBNX0RFVkJVRiwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJbnByaXYgPSBuZXRtYXBf cHJpdl9uZXcoKTsKIAkJaWYgKG5wcml2ID09IE5VTEwpCiAJCQlyZXR1cm4gRU5PTUVNOwotCQll cnJvciA9IG5ldG1hcF9kb19yZWdpZihucHJpdiwgbmEsIG5tci0+bnJfcmluZ2lkLCBubXItPm5y X2ZsYWdzKTsKKwkJbnByaXYtPm5wX2lmcCA9IG5hLT5pZnA7IC8qIGxldCB0aGUgcHJpdiBkZXN0 cnVjdG9yIHJlbGVhc2UgdGhlIHJlZiAqLworCQllcnJvciA9IG5ldG1hcF9kb19yZWdpZihucHJp diwgbmEsIDAsIE5SX1JFR19OSUNfU1cpOwogCQlpZiAoZXJyb3IpIHsKLQkJCWJ6ZXJvKG5wcml2 LCBzaXplb2YoKm5wcml2KSk7Ci0JCQlmcmVlKG5wcml2LCBNX0RFVkJVRik7CisJCQluZXRtYXBf cHJpdl9kZWxldGUobnByaXYpOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCWJuYS0+bmFfa3By aXYgPSBucHJpdjsKIAkJbmEtPm5hX2ZsYWdzIHw9IE5BRl9CVVNZOwogCX0gZWxzZSB7Ci0JCWlu dCBsYXN0X2luc3RhbmNlOwotCiAJCWlmIChuYS0+YWN0aXZlX2ZkcyA9PSAwKSAvKiBub3QgcmVn aXN0ZXJlZCAqLwogCQkJcmV0dXJuIEVJTlZBTDsKLQkJbGFzdF9pbnN0YW5jZSA9IG5ldG1hcF9k dG9yX2xvY2tlZChibmEtPm5hX2twcml2KTsKLQkJaWYgKCFsYXN0X2luc3RhbmNlKSB7Ci0JCQlE KCItLS0gZXJyb3IsIHRyeWluZyB0byBkZXRhY2ggYW4gZW50cnkgd2l0aCBhY3RpdmUgbW1hcHMi KTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVsc2UgewotCQkJc3RydWN0IG5tX2JyaWRnZSAq YiA9IGJuYS0+dXAubmFfYmRnLAotCQkJCSpiaCA9IGJuYS0+aG9zdC5uYV9iZGc7Ci0JCQlucHJp diA9IGJuYS0+bmFfa3ByaXY7Ci0JCQlibmEtPm5hX2twcml2ID0gTlVMTDsKLQkJCUQoImRlbGV0 aW5nIHByaXYiKTsKLQotCQkJYnplcm8obnByaXYsIHNpemVvZigqbnByaXYpKTsKLQkJCWZyZWUo bnByaXYsIE1fREVWQlVGKTsKLQkJCWlmIChiKSB7Ci0JCQkJLyogWFhYIHRoZSBid3JhcCBkdG9y IHNob3VsZCB0YWtlIGNhcmUKLQkJCQkgKiBvZiB0aGlzICgyMDE0LTA2LTE2KQotCQkJCSAqLwot CQkJCW5ldG1hcF9iZGdfZGV0YWNoX2NvbW1vbihiLCBibmEtPnVwLmJkZ19wb3J0LAotCQkJCSAg ICAoYmggPyBibmEtPmhvc3QuYmRnX3BvcnQgOiAtMSkpOwotCQkJfQotCQkJbmEtPm5hX2ZsYWdz ICY9IH5OQUZfQlVTWTsKLQkJfQorCQluZXRtYXBfcHJpdl9kZWxldGUoYm5hLT5uYV9rcHJpdik7 CisJCWJuYS0+bmFfa3ByaXYgPSBOVUxMOworCQluYS0+bmFfZmxhZ3MgJj0gfk5BRl9CVVNZOwog CX0KIAlyZXR1cm4gZXJyb3I7CiAKQEAgLTIyNzYsMTIgKzI2NzksMTQgQEAKIAkJcmV0dXJuIEVC VVNZOwogCX0KIAotCWJuYSA9IG1hbGxvYyhzaXplb2YoKmJuYSksIE1fREVWQlVGLCBNX05PV0FJ VCB8IE1fWkVSTyk7CisJYm5hID0gbm1fb3NfbWFsbG9jKHNpemVvZigqYm5hKSk7CiAJaWYgKGJu YSA9PSBOVUxMKSB7CiAJCXJldHVybiBFTk9NRU07CiAJfQogCiAJbmEgPSAmYm5hLT51cC51cDsK KwkvKiBtYWtlIGJ3cmFwIGlmcCBwb2ludCB0byB0aGUgcmVhbCBpZnAgKi8KKwluYS0+aWZwID0g aHduYS0+aWZwOwogCW5hLT5uYV9wcml2YXRlID0gYm5hOwogCXN0cm5jcHkobmEtPm5hbWUsIG5y X25hbWUsIHNpemVvZihuYS0+bmFtZSkpOwogCS8qIGZpbGwgdGhlIHJpbmcgZGF0YSBmb3IgdGhl IGJ3cmFwIGFkYXB0ZXIgd2l0aCByeC90eCBtZWFuaW5ncwpAQCAtMjI5NCw3ICsyNjk5LDcgQEAK IAkJbm1hX3NldF9uZGVzYyhuYSwgdCwgbm1hX2dldF9uZGVzYyhod25hLCByKSk7CiAJfQogCW5h LT5ubV9kdG9yID0gbmV0bWFwX2J3cmFwX2R0b3I7Ci0JbmEtPm5tX3JlZ2lzdGVyID0gbmV0bWFw X2J3cmFwX3JlZ2lzdGVyOworCW5hLT5ubV9yZWdpc3RlciA9IG5ldG1hcF9id3JhcF9yZWc7CiAJ Ly8gbmEtPm5tX3R4c3luYyA9IG5ldG1hcF9id3JhcF90eHN5bmM7CiAJLy8gbmEtPm5tX3J4c3lu YyA9IG5ldG1hcF9id3JhcF9yeHN5bmM7CiAJbmEtPm5tX2NvbmZpZyA9IG5ldG1hcF9id3JhcF9j b25maWc7CkBAIC0yMzAzLDEzICsyNzA4LDggQEAKIAluYS0+bm1fbm90aWZ5ID0gbmV0bWFwX2J3 cmFwX25vdGlmeTsKIAluYS0+bm1fYmRnX2N0bCA9IG5ldG1hcF9id3JhcF9iZGdfY3RsOwogCW5h LT5wZGV2ID0gaHduYS0+cGRldjsKLQluYS0+bm1fbWVtID0gbmV0bWFwX21lbV9wcml2YXRlX25l dyhuYS0+bmFtZSwKLQkJCW5hLT5udW1fdHhfcmluZ3MsIG5hLT5udW1fdHhfZGVzYywKLQkJCW5h LT5udW1fcnhfcmluZ3MsIG5hLT5udW1fcnhfZGVzYywKLQkJCTAsIDAsICZlcnJvcik7Ci0JbmEt Pm5hX2ZsYWdzIHw9IE5BRl9NRU1fT1dORVI7Ci0JaWYgKG5hLT5ubV9tZW0gPT0gTlVMTCkKLQkJ Z290byBlcnJfcHV0OworCW5hLT5ubV9tZW0gPSBuZXRtYXBfbWVtX2dldChod25hLT5ubV9tZW0p OworCW5hLT52aXJ0X2hkcl9sZW4gPSBod25hLT52aXJ0X2hkcl9sZW47CiAJYm5hLT51cC5yZXRy eSA9IDE7IC8qIFhYWCBtYXliZSB0aGlzIHNob3VsZCBkZXBlbmQgb24gdGhlIGh3bmEgKi8KIAog CWJuYS0+aHduYSA9IGh3bmE7CkBAIC0yMzMyLDcgKzI3MzIsNyBAQAogCQkvLyBob3N0bmEtPm5t X3R4c3luYyA9IG5ldG1hcF9id3JhcF9ob3N0X3R4c3luYzsKIAkJLy8gaG9zdG5hLT5ubV9yeHN5 bmMgPSBuZXRtYXBfYndyYXBfaG9zdF9yeHN5bmM7CiAJCWhvc3RuYS0+bm1fbm90aWZ5ID0gbmV0 bWFwX2J3cmFwX25vdGlmeTsKLQkJaG9zdG5hLT5ubV9tZW0gPSBuYS0+bm1fbWVtOworCQlob3N0 bmEtPm5tX21lbSA9IG5ldG1hcF9tZW1fZ2V0KG5hLT5ubV9tZW0pOwogCQlob3N0bmEtPm5hX3By aXZhdGUgPSBibmE7CiAJCWhvc3RuYS0+bmFfdnAgPSAmYm5hLT51cDsKIAkJbmEtPm5hX2hvc3R2 cCA9IGh3bmEtPm5hX2hvc3R2cCA9CkBAIC0yMzQ5LDI3ICsyNzQ5LDEzIEBACiAJaWYgKGVycm9y KSB7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQotCS8qIG1ha2UgYndyYXAgaWZwIHBvaW50IHRvIHRo ZSByZWFsIGlmcAotCSAqIE5PVEU6IG5ldG1hcF9hdHRhY2hfY29tbW9uKCkgaW50ZXJwcmV0cyBh IG5vbi1OVUxMIG5hLT5pZnAKLQkgKiBhcyBhIHJlcXVlc3QgdG8gbWFrZSB0aGUgaWZwIHBvaW50 IHRvIHRoZSBuYS4gU2luY2Ugd2UKLQkgKiBkbyBub3Qgd2FudCB0byBjaGFuZ2UgdGhlIG5hIGFs cmVhZHkgcG9pbnRlZCB0byBieSBod25hLT5pZnAsCi0JICogdGhlIGZvbGxvd2luZyBhc3NpZ25t ZW50IGhhcyB0byBiZSBkZWxheWVkIHVudGlsIG5vdwotCSAqLwotCW5hLT5pZnAgPSBod25hLT5p ZnA7CiAJaHduYS0+bmFfZmxhZ3MgfD0gTkFGX0JVU1k7Ci0JLyogbWFrZSBod25hIHBvaW50IHRv IHRoZSBhbGxvY2F0b3Igd2UgYXJlIGFjdHVhbGx5IHVzaW5nLAotCSAqIHNvIHRoYXQgbW9uaXRv cnMgd2lsbCBiZSBhYmxlIHRvIGZpbmQgaXQKLQkgKi8KLQlibmEtPnNhdmVfbm1kID0gaHduYS0+ bm1fbWVtOwotCWh3bmEtPm5tX21lbSA9IG5hLT5ubV9tZW07CiAJcmV0dXJuIDA7CiAKIGVycl9m cmVlOgotCW5ldG1hcF9tZW1fZGVsZXRlKG5hLT5ubV9tZW0pOwotZXJyX3B1dDoKIAlod25hLT5u YV92cCA9IGh3bmEtPm5hX2hvc3R2cCA9IE5VTEw7CiAJbmV0bWFwX2FkYXB0ZXJfcHV0KGh3bmEp OwotCWZyZWUoYm5hLCBNX0RFVkJVRik7CisJbm1fb3NfZnJlZShibmEpOwogCXJldHVybiBlcnJv cjsKIAogfQpAQCAtMjM4MCw4ICsyNzY2LDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgbm1fYnJpZGdl ICpiOwogCi0JYiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5tX2JyaWRnZSkgKiBuLCBNX0RFVkJV RiwKLQkJTV9OT1dBSVQgfCBNX1pFUk8pOworCWIgPSBubV9vc19tYWxsb2Moc2l6ZW9mKHN0cnVj dCBubV9icmlkZ2UpICogbik7CiAJaWYgKGIgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJZm9y IChpID0gMDsgaSA8IG47IGkrKykKQEAgLTIzOTksNyArMjc4NCw3IEBACiAKIAlmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKQogCQlCREdfUldERVNUUk9ZKCZiW2ldKTsKLQlmcmVlKGIsIE1fREVWQlVG KTsKKwlubV9vc19mcmVlKGIpOwogfQogCiBpbnQKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC8uZGVwZW5kLmlmX3B0bmV0Lm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwLy5kZXBlbmQuaWZfcHRuZXQubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRl cGVuZC5pZl9wdG5ldC5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5pZl9wdG5ldC5vCTIwMTYtMTEtMjMg MTc6MDU6NDIuMzQ0MzkwMDAwICswMDAwCkBAIC0wLDAgKzEsNjIgQEAKK2lmX3B0bmV0Lm86IFwK KyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9u ZXRtYXAvaWZfcHRuZXQuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9z eXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3Ny Yy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFj aGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlw ZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2Vs ZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190 aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5 cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCAvdXNyL3NyYy9zeXMv c3lzL19udWxsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N5c2xpbWl0cy5oIC91c3Ivc3JjL3N5 cy9zeXMvZXJybm8uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5oIC91c3Ivc3JjL3N5cy9z eXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5lL19hbGlnbi5oIHg4Ni9f YWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL3N5c3RtLmggXAorICBtYWNoaW5lL2F0b21pYy5oIG1h Y2hpbmUvY3B1ZnVuYy5oIC91c3Ivc3JjL3N5cy9zeXMvY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMv c3lzL3N5cy9fY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Ivc3Jj L3N5cy9zeXMvc3RkaW50LmggbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvbGlia2Vybi5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3NvY2tpby5oIFwK KyAgL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisg IC91c3Ivc3JjL3N5cy92bS91bWEuaCAvdXNyL3NyYy9zeXMvc3lzL21hbGxvYy5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9fbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggXAorICAvdXNy L3NyYy9zeXMvc3lzL3NkdC5oIC91c3Ivc3JjL3N5cy9zeXMvbW9kdWxlLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL3NvY2tldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2lvdmVjLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdlLmggL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMva3RyX2NsYXNzLmgg XAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9wY3B1LmggXAor ICAvdXNyL3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19iaXRzZXQuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fcm1sb2NrLmggXAor ICAvdXNyL3NyYy9zeXMvc3lzL3ZtbWV0ZXIuaCAvdXNyL3NyYy9zeXMvc3lzL3Jlc291cmNlLmgg bWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmlsZS5oIC91c3Iv c3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGFza3F1ZXVlLmgg L3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zbXAuaCAvdXNy L3NyYy9zeXMvc3lzL2NwdXNldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9iaXRzZXQuaCBtYWNo aW5lL3NtcC5oIC91c3Ivc3JjL3N5cy92bS92bS5oIFwKKyAgbWFjaGluZS92bS5oIG1hY2hpbmUv c3BlY2lhbHJlZy5oIHg4Ni9zcGVjaWFscmVnLmggXAorICAvdXNyL3NyYy9zeXMvdm0vcG1hcC5o IG1hY2hpbmUvcG1hcC5oIC91c3Ivc3JjL3N5cy92bS9fdm1fcmFkaXguaCBcCisgIC91c3Ivc3Jj L3N5cy9uZXQvZXRoZXJuZXQuaCAvdXNyL3NyYy9zeXMvbmV0L2lmLmggXAorICAvdXNyL3NyYy9z eXMvbmV0L2lmX3Zhci5oIC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5o IFwKKyAgbWFjaGluZS9wc2wuaCB4ODYvcHNsLmggbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5o IG1hY2hpbmUvc2VnbWVudHMuaCBcCisgIHg4Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9uZXQv dm5ldC5oIC91c3Ivc3JjL3N5cy9zeXMvY291bnRlci5oIFwKKyAgbWFjaGluZS9jb3VudGVyLmgg L3Vzci9zcmMvc3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMvc3guaCAvdXNyL3NyYy9zeXMvbmV0L2FsdHEvaWZfYWx0cS5oIFwK KyAgL3Vzci9zcmMvc3lzL3N5cy9ldmVudC5oIC91c3Ivc3JjL3N5cy9uZXQvaWZxLmggXAorICAv dXNyL3NyYy9zeXMvbmV0L2lmX2FycC5oIC91c3Ivc3JjL3N5cy9uZXQvaWZfZGwuaCBcCisgIC91 c3Ivc3JjL3N5cy9uZXQvaWZfdHlwZXMuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX21lZGlhLmggXAor ICAvdXNyL3NyYy9zeXMvbmV0L2lmX3ZsYW5fdmFyLmggL3Vzci9zcmMvc3lzL25ldC9icGYuaCBc CisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0L2luX3N5c3RtLmggL3Vzci9zcmMvc3lzL25ldGluZXQv aW4uaCBcCisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0Ni9pbjYuaCAvdXNyL3NyYy9zeXMvbmV0aW5l dC9pcC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQvaXA2LmggL3Vzci9zcmMvc3lzL25ldGlu ZXQ2L2lwNl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXRpbmV0L3VkcC5oIC91c3Ivc3JjL3N5 cy9uZXRpbmV0L3RjcC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQvc2N0cC5oIC91c3Ivc3Jj L3N5cy9uZXRpbmV0L3NjdHBfdWlvLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2VuZGlhbi5oIG1h Y2hpbmUvYnVzLmggeDg2L2J1cy5oIG1hY2hpbmUvX2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1h LmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNf ZG1hLmggbWFjaGluZS9yZXNvdXJjZS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzLmggXAorICAvdXNy L3NyYy9zeXMvc3lzL2V2ZW50aGFuZGxlci5oIC91c3Ivc3JjL3N5cy9zeXMva3RyLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL2tvYmouaCBkZXZpY2VfaWYuaCBidXNfaWYuaCAvdXNyL3NyYy9zeXMv c3lzL3JtYW4uaCBcCisgIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXZhci5oIHBjaV9pZi5oIC91 c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXJlZy5oIFwKKyAgb3B0X2luZXQuaCBvcHRfaW5ldDYuaCAv dXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5 cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVu L25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5o IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl di9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v ZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu aCBcCisgIC91c3Ivc3JjL3N5cy9kZXYvdmlydGlvL25ldHdvcmsvdmlydGlvX25ldC5oCmRpZmYg LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubyAvdXNy L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubwotLS0gdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXAubwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw Lm8JMjAxNi0xMS0yMyAxNzowNTozNS44MTcxMTQwMDAgKzAwMDAKQEAgLTAsMCArMSw1MCBAQAor bmV0bWFwLm86IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFw Ly4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwLmMgXAorICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmgg L3Vzci9zcmMvc3lzL3N5cy90eXBlcy5oIG1hY2hpbmUvZW5kaWFuLmggXAorICB4ODYvZW5kaWFu LmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBtYWNoaW5lL190eXBlcy5oIHg4Ni9fdHlwZXMu aCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9fbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9f cHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zdGRpbnQuaCAvdXNyL3NyYy9z eXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc2lnc2V0LmggL3Vzci9zcmMv c3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lc3BlYy5oIC91c3Iv c3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vz ci9zcmMvc3lzL3N5cy9wYXJhbS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Iv c3JjL3N5cy9zeXMvc3lzbGltaXRzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWUuaCAvdXNy L3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5oIFwKKyAgbWFjaGluZS9fYWxp Z24uaCB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3Jj L3N5cy9zeXMvbGlua2VyX3NldC5oIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Iv c3JjL3N5cy9zeXMvY29uZi5oIC91c3Ivc3JjL3N5cy9zeXMvZXZlbnRoYW5kbGVyLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNy L3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIC91c3Ivc3JjL3N5cy9zeXMva3RyLmggXAorICAvdXNy L3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19iaXRzZXQuaCBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvbXV0ZXguaCAvdXNyL3NyYy9zeXMvc3lzL19tdXRleC5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy9fc3guaCBcCisgIC91c3Ivc3Jj L3N5cy9zeXMvX3JtbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvdm1tZXRlci5oIFwKKyAgL3Vzci9z cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5 cy9sb2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL3NkdC5oIG1hY2hpbmUvYXRvbWljLmggbWFjaGluZS9jcHVmdW5jLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL2ZpbGlvLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvc29ja2lvLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrZXR2YXIuaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIC91c3Ivc3JjL3N5cy9zeXMvZXZlbnQuaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMvb3NkLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrYnVmLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nrc3RhdGUuaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMvY2FwcmlnaHRzLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nrb3B0Lmgg XAorICAvdXNyL3NyYy9zeXMvc3lzL21hbGxvYy5oIC91c3Ivc3JjL3N5cy9zeXMvcG9sbC5oIFwK KyAgL3Vzci9zcmMvc3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0LmggL3Vzci9zcmMvc3lzL3N5cy9faW92ZWMuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRyX3N0b3JhZ2UuaCAvdXNyL3NyYy9zeXMvc3lz L3N5c2N0bC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9qYWlsLmggL3Vzci9zcmMvc3lzL25ldC92 bmV0LmggL3Vzci9zcmMvc3lzL25ldC9pZi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZl92YXIu aCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCAv dXNyL3NyYy9zeXMvc3lzL2NhbGxvdXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQu aCAvdXNyL3NyYy9zeXMvc3lzL3N0ZGludC5oIFwKKyAgbWFjaGluZS9fc3RkaW50LmggeDg2L19z dGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL2xpYmtlcm4uaCBcCisgIC91c3Ivc3JjL3N5cy92bS91 bWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1Zl9yaW5nLmggbWFjaGluZS9jcHUuaCBcCisgIG1hY2hp bmUvcHNsLmggeDg2L3BzbC5oIG1hY2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBtYWNoaW5lL3Nl Z21lbnRzLmggXAorICB4ODYvc2VnbWVudHMuaCAvdXNyL3NyYy9zeXMvc3lzL2NvdW50ZXIuaCBt YWNoaW5lL2NvdW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3guaCAvdXNyL3NyYy9zeXMv bmV0L2FsdHEvaWZfYWx0cS5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZnEuaCAvdXNyL3NyYy9z eXMvbmV0L2JwZi5oIG1hY2hpbmUvYnVzLmggeDg2L2J1cy5oIFwKKyAgbWFjaGluZS9fYnVzLmgg bWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9lbmRpYW4uaCBcCisgIC91c3Iv c3JjL3N5cy9zeXMvcmVmY291bnQuaCAvdXNyL3NyYy9zeXMvc3lzL2xpbWl0cy5oIFwKKyAgL3Vz ci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXAu aCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9k ZXYvbmV0bWFwL25ldG1hcF9rZXJuLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMv bW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfbWJxLmggXAorICAvdXNyL2hv bWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRt YXBfbWVtMi5oCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVu ZC5uZXRtYXBfZnJlZWJzZC5vIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5l dG1hcF9mcmVlYnNkLm8KLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0 bWFwX2ZyZWVic2QubwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX2ZyZWVic2QubwkyMDE2LTEx LTIzIDE3OjA1OjM5LjYxMTU4NTAwMCArMDAwMApAQCAtMCwwICsxLDc2IEBACituZXRtYXBfZnJl ZWJzZC5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8u Li8uLi9kZXYvbmV0bWFwL25ldG1hcF9mcmVlYnNkLmMgXAorICBvcHRfaW5ldC5oIG9wdF9pbmV0 Ni5oIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwu aCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmgg bWFjaGluZS9lbmRpYW4uaCB4ODYvZW5kaWFuLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL190eXBl cy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmgg eDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Iv c3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNy L3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5o IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9zcmMvc3lzL3N5cy9wcmlvcml0eS5o IG1hY2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWduLmggeDg2L19hbGlnbi5oIC91c3Iv c3JjL3N5cy9zeXMvbW9kdWxlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAv dXNyL3NyYy9zeXMvc3lzL2phaWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCAvdXNy L3NyYy9zeXMvc3lzL3N5c2N0bC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9sb2NrLmggL3Vzci9z cmMvc3lzL3N5cy9fbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9rdHJfY2xhc3MuaCAvdXNy L3NyYy9zeXMvc3lzL211dGV4LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19tdXRleC5oIC91c3Iv c3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggL3Vzci9z cmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91c3Ivc3Jj L3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggL3Vzci9z cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5 cy9sb2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL3NkdC5oIG1hY2hpbmUvYXRvbWljLmggbWFjaGluZS9jcHVmdW5jLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL3N5cy9vc2QuaCBcCisgIC91c3Iv c3JjL3N5cy9zeXMvcG9sbC5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL2NvbmYuaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50aGFuZGxlci5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9rdHIuaCAvdXNyL3NyYy9zeXMvc3lzL2VuZGlhbi5oIFwKKyAgL3Vzci9z cmMvc3lzL3N5cy9zeXNjYWxsc3Vici5oIC91c3Ivc3JjL3N5cy9zeXMvc2lnbmFsLmggXAorICBt YWNoaW5lL3NpZ25hbC5oIHg4Ni9zaWduYWwuaCBtYWNoaW5lL3RyYXAuaCB4ODYvdHJhcC5oIFwK KyAgL3Vzci9zcmMvc3lzL3N5cy91aW8uaCAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIFwKKyAg L3Vzci9zcmMvc3lzL3N5cy9zb2NrZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9y YWdlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL21hYy5oIC91c3Ivc3JjL3N5cy9zeXMvbW91bnQu aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdWNyZWQuaCAvdXNyL3NyYy9zeXMvYnNtL2F1ZGl0Lmgg XAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2ttZ3IuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrbWdy LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL3J3bG9j ay5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3ZtLmggbWFjaGluZS92bS5oIG1hY2hpbmUvc3BlY2lh bHJlZy5oIFwKKyAgeDg2L3NwZWNpYWxyZWcuaCAvdXNyL3NyYy9zeXMvdm0vcG1hcC5oIG1hY2hp bmUvcG1hcC5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL192bV9yYWRpeC5oIC91c3Ivc3JjL3N5cy92 bS92bV9wYXJhbS5oIFwKKyAgbWFjaGluZS92bXBhcmFtLmggL3Vzci9zcmMvc3lzL3ZtL3ZtX29i amVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3ZtX3BhZ2UuaCAvdXNyL3NyYy9zeXMvc3lzL3N5 c3RtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NhbGxvdXQuaCAvdXNyL3NyYy9zeXMvc3lzL19j YWxsb3V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N0ZGludC5oIG1hY2hpbmUvX3N0ZGludC5o IHg4Ni9fc3RkaW50LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpYmtlcm4uaCAvdXNyL3NyYy9z eXMvdm0vdm1fcGFnZXIuaCBcCisgIC91c3Ivc3JjL3N5cy92bS91bWEuaCAvdXNyL3NyYy9zeXMv c3lzL21hbGxvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZvLmggL3Vzci9zcmMvc3lz L3N5cy9ldmVudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9rdGhyZWFkLmggL3Vzci9zcmMvc3lz L3N5cy9wcm9jLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NvbmR2YXIuaCAvdXNyL3NyYy9zeXMv c3lzL3J0cHJpby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9ydW5xLmggbWFjaGluZS9ydW5xLmgg L3Vzci9zcmMvc3lzL3N5cy9zaWdpby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zaWduYWx2YXIu aCAvdXNyL3NyYy9zeXMvc3lzL3Vjb250ZXh0LmggXAorICBtYWNoaW5lL3Vjb250ZXh0LmggeDg2 L3Vjb250ZXh0LmggL3Vzci9zcmMvc3lzL3N5cy9fdWNvbnRleHQuaCBcCisgIC91c3Ivc3JjL3N5 cy9zeXMvX3ZtX2RvbWFpbi5oIC91c3Ivc3JjL3N5cy9zeXMvc2VxLmggbWFjaGluZS9jcHUuaCBc CisgIG1hY2hpbmUvcHNsLmggeDg2L3BzbC5oIG1hY2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBt YWNoaW5lL3NlZ21lbnRzLmggXAorICB4ODYvc2VnbWVudHMuaCBtYWNoaW5lL3Byb2MuaCAvdXNy L3NyYy9zeXMvc3lzL3VuaXN0ZC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zY2hlZC5oIC91c3Iv c3JjL3N5cy9zeXMvc21wLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2NwdXNldC5oIC91c3Ivc3Jj L3N5cy9zeXMvYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lz L25ldC9pZl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy9z eXMvYnVmX3JpbmcuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3JjL3N5cy9z eXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeC5o IC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9pZl9hbHRxLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lm cS5oIC91c3Ivc3JjL3N5cy9uZXQvaWZfdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvZXRo ZXJuZXQuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX2RsLmggbWFjaGluZS9idXMuaCBcCisgIHg4Ni9i dXMuaCBtYWNoaW5lL19idXMuaCBtYWNoaW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1 c19kbWEuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvbmV0 aW5ldC9pbi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldGluZXQ2L2luNi5oIG1hY2hpbmUvaW5fY2tz dW0uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u Li9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9u ZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5o IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL25l dC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMv bmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuaCBcCisgIC91c3Ivc3JjL3N5cy9z eXMvYnVzLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMv a29iai5oIGRldmljZV9pZi5oIGJ1c19pZi5oIC91c3Ivc3JjL3N5cy9zeXMvcm1hbi5oIFwKKyAg bWFjaGluZS9yZXNvdXJjZS5oIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaXZhci5oIHBjaV9pZi5o IFwKKyAgL3Vzci9zcmMvc3lzL2Rldi9wY2kvcGNpcmVnLmggL3Vzci9zcmMvc3lzL3N5cy9zeXNw cm90by5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9hY2wuaCAvdXNyL3NyYy9zeXMvc3lzL19mZmNv dW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3NlbWFwaG9yZS5oIC91c3Ivc3JjL3N5cy9z eXMvd2FpdC5oIFwKKyAgL3Vzci9zcmMvc3lzL2JzbS9hdWRpdF9rZXZlbnRzLmgKZGlmZiAtdSAt ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9nZW5lcmljLm8g L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX2dlbmVyaWMubwotLS0g dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfZ2VuZXJpYy5vCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvLmRlcGVuZC5uZXRtYXBfZ2VuZXJpYy5vCTIwMTYtMTEtMjMgMTc6MDU6MzcuMzgyMzc4 MDAwICswMDAwCkBAIC0wLDAgKzEsNDAgQEAKK25ldG1hcF9nZW5lcmljLm86IFwKKyAgL3Vzci9o b21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0 bWFwX2dlbmVyaWMuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9zeXMv c3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9z eXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGlu ZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMu aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0 LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1l dmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9f dGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCAvdXNyL3NyYy9zeXMvc3lz L21hbGxvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9wYXJhbS5oIC91c3Ivc3JjL3N5cy9zeXMv X251bGwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5 cy90aW1lLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5o IG1hY2hpbmUvX2FsaWduLmggXAorICB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1 ZS5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4 LmggL3Vzci9zcmMvc3lzL3N5cy9sb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFz cy5oIC91c3Ivc3JjL3N5cy9zeXMvcndsb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19yd2xv Y2suaCAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmlsZS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5 cy9sb2Nrc3RhdC5oIC91c3Ivc3JjL3N5cy9zeXMvc2R0LmggXAorICAvdXNyL3NyYy9zeXMvc3lz L2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCBcCisgIC91c3Ivc3JjL3N5cy9z eXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwKKyAgL3Vzci9zcmMvc3lz L3N5cy9fc3guaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9z eXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNoaW5lL3BjcHUuaCBc CisgIG1hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL3N5cy9zb2NrZXQuaCAvdXNyL3NyYy9z eXMvc3lzL19pb3ZlYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc29ja2FkZHJfc3RvcmFnZS5o IC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9ldmVudC5o IC91c3Ivc3JjL3N5cy9uZXQvaWYuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvaWZfdmFyLmggL3Vz ci9zcmMvc3lzL3N5cy9tYnVmLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3N5c3RtLmggbWFjaGlu ZS9jcHVmdW5jLmggL3Vzci9zcmMvc3lzL3N5cy9jYWxsb3V0LmggXAorICAvdXNyL3NyYy9zeXMv c3lzL19jYWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBcCisgIG1hY2hpbmUvX3N0 ZGludC5oIHg4Ni9fc3RkaW50LmggL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJuLmggXAorICAvdXNy L3NyYy9zeXMvdm0vdW1hLmggL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5oIG1hY2hpbmUvY3B1 LmggXAorICBtYWNoaW5lL3BzbC5oIHg4Ni9wc2wuaCBtYWNoaW5lL2ZyYW1lLmggeDg2L2ZyYW1l LmggbWFjaGluZS9zZWdtZW50cy5oIFwKKyAgeDg2L3NlZ21lbnRzLmggL3Vzci9zcmMvc3lzL25l dC92bmV0LmggL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmggXAorICBtYWNoaW5lL2NvdW50ZXIu aCAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9zeC5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9fdGFzay5oIC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9pZl9hbHRxLmggXAor ICAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggeDg2L2J1cy5oIG1hY2hpbmUv X2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmgg XAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25l dG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vbmV0L25ldG1hcC5oIFwKKyAgL3Vzci9ob21l L3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFw X2tlcm4uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8u Li8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFw L3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAt dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tYnEubyAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWJxLm8KLS0tIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX21icS5vCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRl cGVuZC5uZXRtYXBfbWJxLm8JMjAxNi0xMS0yMyAxNzowNTozNy41MTAyMTMwMDAgKzAwMDAKQEAg LTAsMCArMSwyNiBAQAorbmV0bWFwX21icS5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFw L3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuYyBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmggXAorICAvdXNy L3NyYy9zeXMvc3lzL3R5cGVzLmggL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIG1hY2hpbmUvZW5k aWFuLmggXAorICB4ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBtYWNoaW5l L190eXBlcy5oIHg4Ni9fdHlwZXMuaCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9fbGltaXRz LmggL3Vzci9zcmMvc3lzL3N5cy9fcHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9zeXMvc3lz L19zdGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5 cy9fc2lnc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9zcmMvc3lz L3N5cy90aW1lc3BlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL3N5c2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCBcCisgIC91c3Iv c3JjL3N5cy9zeXMvdGltZS5oIC91c3Ivc3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3Bh cmFtLmggXAorICBtYWNoaW5lL19hbGlnbi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lz L2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcXVldWUuaCAvdXNyL3NyYy9zeXMvc3lzL19s b2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIC91c3Ivc3JjL3N5cy9zeXMv bXV0ZXguaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9w Y3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19jcHVzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19i aXRzZXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fcm1s b2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ZtbWV0ZXIuaCAvdXNyL3NyYy9zeXMvc3lzL3Jl c291cmNlLmggbWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xvY2tfcHJvZmls ZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc2R0 LmggL3Vzci9zcmMvc3lzL3N5cy9saW5rZXJfc2V0LmggbWFjaGluZS9hdG9taWMuaCBcCisgIG1h Y2hpbmUvY3B1ZnVuYy5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCAvdXNyL3NyYy9zeXMvc3lz L2NhbGxvdXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQuaCAvdXNyL3NyYy9zeXMv c3lzL3N0ZGludC5oIFwKKyAgbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCAvdXNyL3Ny Yy9zeXMvc3lzL2xpYmtlcm4uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3Jj L3N5cy92bS91bWEuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggXAorICAvdXNyL2hv bWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRt YXBfbWJxLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5k Lm5ldG1hcF9tZW0yLm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw X21lbTIubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWVt Mi5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbWVtMi5vCTIwMTYtMTEtMjMgMTc6MDU6MzYu OTIxNjU2MDAwICswMDAwCkBAIC0wLDAgKzEsNTMgQEAKK25ldG1hcF9tZW0yLm86IFwKKyAgL3Vz ci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAv bmV0bWFwX21lbTIuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAvdXNyL3NyYy9zeXMv c3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9z eXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGlu ZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMu aCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0 LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1l dmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9f dGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggL3Vzci9zcmMvc3lzL3N5 cy9wYXJhbS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Ivc3JjL3N5cy9zeXMv c3lzbGltaXRzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vzci9zcmMvc3lzL3N5 cy90aW1lLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGluZS9wYXJhbS5o IG1hY2hpbmUvX2FsaWduLmggXAorICB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1 ZS5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4 LmggL3Vzci9zcmMvc3lzL3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbGlua2Vy X3NldC5oIC91c3Ivc3JjL3N5cy9zeXMvcHJvYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jYWxs b3V0LmggL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9l dmVudC5oIC91c3Ivc3JjL3N5cy9zeXMvY29uZHZhci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9s b2NrX3Byb2ZpbGUuaCAvdXNyL3NyYy9zeXMvc3lzL29zZC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5 cy9ydHByaW8uaCAvdXNyL3NyYy9zeXMvc3lzL3J1bnEuaCBtYWNoaW5lL3J1bnEuaCBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCAvdXNyL3NyYy9zeXMvc3lzL3NpZ2lvLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL3NpZ25hbC5oIG1hY2hpbmUvc2lnbmFsLmggeDg2L3NpZ25hbC5oIG1h Y2hpbmUvdHJhcC5oIFwKKyAgeDg2L3RyYXAuaCAvdXNyL3NyYy9zeXMvc3lzL3NpZ25hbHZhci5o IC91c3Ivc3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0Lmgg L3Vzci9zcmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91 c3Ivc3JjL3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmgg bWFjaGluZS9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy91Y29udGV4dC5oIFwKKyAgbWFjaGluZS91 Y29udGV4dC5oIHg4Ni91Y29udGV4dC5oIC91c3Ivc3JjL3N5cy9zeXMvX3Vjb250ZXh0LmggXAor ICAvdXNyL3NyYy9zeXMvc3lzL3VjcmVkLmggL3Vzci9zcmMvc3lzL2JzbS9hdWRpdC5oIFwKKyAg L3Vzci9zcmMvc3lzL3N5cy9fdm1fZG9tYWluLmggL3Vzci9zcmMvc3lzL3N5cy9zZXEuaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNoaW5lL2F0b21pYy5oIG1hY2hpbmUvY3B1ZnVu Yy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBtYWNoaW5lL19zdGRpbnQuaCB4ODYv X3N0ZGludC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJuLmggL3Vzci9zcmMvc3lzL3N5 cy9sb2NrLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIG1hY2hpbmUvY3B1Lmgg bWFjaGluZS9wc2wuaCB4ODYvcHNsLmggXAorICBtYWNoaW5lL2ZyYW1lLmggeDg2L2ZyYW1lLmgg bWFjaGluZS9zZWdtZW50cy5oIHg4Ni9zZWdtZW50cy5oIFwKKyAgbWFjaGluZS9wcm9jLmggL3Vz ci9zcmMvc3lzL3ZtL3ZtLmggbWFjaGluZS92bS5oIG1hY2hpbmUvc3BlY2lhbHJlZy5oIFwKKyAg eDg2L3NwZWNpYWxyZWcuaCAvdXNyL3NyYy9zeXMvdm0vcG1hcC5oIG1hY2hpbmUvcG1hcC5oIFwK KyAgL3Vzci9zcmMvc3lzL3ZtL192bV9yYWRpeC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0Lmgg XAorICAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRy X3N0b3JhZ2UuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc2VsaW5mby5oIC91c3Ivc3JjL3N5cy9z eXMvc3lzY3RsLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lzL25ldC9p Zl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy92bS91bWEu aCAvdXNyL3NyYy9zeXMvc3lzL3NkdC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5o IC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmgg bWFjaGluZS9jb3VudGVyLmggL3Vzci9zcmMvc3lzL3N5cy9tdXRleC5oIFwKKyAgL3Vzci9zcmMv c3lzL3N5cy9sb2Nrc3RhdC5oIC91c3Ivc3JjL3N5cy9zeXMvcndsb2NrLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL19yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL3N4LmggXAorICAvdXNyL3NyYy9z eXMvc3lzL190YXNrLmggL3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCBcCisgIC91c3Iv c3JjL3N5cy9uZXQvaWZxLmggbWFjaGluZS9idXMuaCB4ODYvYnVzLmggbWFjaGluZS9fYnVzLmgg XAorICBtYWNoaW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvc3lzL2J1c19kbWEuaCBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvX2J1c19kbWEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5 cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVu L25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5o IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl di9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v ZHVsZXMvbmV0bWFwLy4uLy4uL25ldC9uZXRtYXBfdmlydC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIu aApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFw X21vbml0b3IubyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfbW9u aXRvci5vCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tb25p dG9yLm8JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9tb25pdG9yLm8JMjAxNi0xMS0yMyAxNzow NTo0MC42OTE4ODIwMDAgKzAwMDAKQEAgLTAsMCArMSw0MyBAQAorbmV0bWFwX21vbml0b3Iubzog XAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2 L25ldG1hcC9uZXRtYXBfbW9uaXRvci5jIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIC91 c3Ivc3JjL3N5cy9zeXMvdHlwZXMuaCBtYWNoaW5lL2VuZGlhbi5oIFwKKyAgeDg2L2VuZGlhbi5o IC91c3Ivc3JjL3N5cy9zeXMvX3R5cGVzLmggbWFjaGluZS9fdHlwZXMuaCB4ODYvX3R5cGVzLmgg XAorICBtYWNoaW5lL19saW1pdHMuaCB4ODYvX2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9zeXMvX3B0 aHJlYWR0eXBlcy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fc3RkaW50LmggL3Vzci9zcmMvc3lz L3N5cy9zZWxlY3QuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3NpZ3NldC5oIC91c3Ivc3JjL3N5 cy9zeXMvX3RpbWV2YWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZXNwZWMuaCAvdXNyL3Ny Yy9zeXMvc3lzL190aW1lc3BlYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5oIC91c3Iv c3JjL3N5cy9zeXMvcGFyYW0uaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwuaCAvdXNyL3Ny Yy9zeXMvc3lzL3N5c2xpbWl0cy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9z cmMvc3lzL3N5cy9wcmlvcml0eS5oIG1hY2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWdu LmggeDg2L19hbGlnbi5oIC91c3Ivc3JjL3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3NyYy9z eXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNyL3NyYy9zeXMvc3lzL3F1ZXVlLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL21hbGxvYy5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisgIC91c3Ivc3Jj L3N5cy9zeXMvX211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9wb2xsLmggXAorICAvdXNyL3NyYy9z eXMvc3lzL2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL2t0cl9jbGFzcy5oIFwKKyAgL3Vzci9zcmMv c3lzL3N5cy9yd2xvY2suaCAvdXNyL3NyYy9zeXMvc3lzL19yd2xvY2suaCBcCisgIC91c3Ivc3Jj L3N5cy9zeXMvbG9ja19wcm9maWxlLmggL3Vzci9zcmMvc3lzL3N5cy9sb2Nrc3RhdC5oIFwKKyAg L3Vzci9zcmMvc3lzL3N5cy9zZHQuaCAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCBcCisgIC91c3Iv c3JjL3N5cy9zeXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9fc3guaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91c3Iv c3JjL3N5cy9zeXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNoaW5l L3BjcHUuaCBcCisgIG1hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZvLmgg L3Vzci9zcmMvc3lzL3N5cy9ldmVudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCAv dXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9faW92ZWMuaCAv dXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdlLmggXAorICAvdXNyL3NyYy9zeXMvbmV0 L2lmLmggL3Vzci9zcmMvc3lzL25ldC9pZl92YXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1 Zi5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNoaW5lL2NwdWZ1bmMuaCBcCisgIC91c3Iv c3JjL3N5cy9zeXMvY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9zeXMvX2NhbGxvdXQuaCBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvc3RkaW50LmggbWFjaGluZS9fc3RkaW50LmggeDg2L19zdGRpbnQuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvbGlia2Vybi5oIC91c3Ivc3JjL3N5cy92bS91bWEuaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIG1hY2hpbmUvcHNsLmgg eDg2L3BzbC5oIFwKKyAgbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1hY2hpbmUvc2VnbWVu dHMuaCB4ODYvc2VnbWVudHMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3Jj L3N5cy9zeXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5 cy9tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc3guaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3Rh c2suaCAvdXNyL3NyYy9zeXMvbmV0L2FsdHEvaWZfYWx0cS5oIFwKKyAgL3Vzci9zcmMvc3lzL25l dC9pZnEuaCBtYWNoaW5lL2J1cy5oIHg4Ni9idXMuaCBtYWNoaW5lL19idXMuaCBcCisgIG1hY2hp bmUvYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzX2RtYS5oIFwKKyAgL3Vzci9zcmMvc3lz L3N5cy9fYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvcmVmY291bnQuaCBcCisgIC91c3Ivc3Jj L3N5cy9zeXMvbGltaXRzLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxl cy9uZXRtYXAvLi4vLi4vbmV0L25ldG1hcC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAv c3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCBcCisgIC91 c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFw L25ldG1hcF9tYnEuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25l dG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vCi0tLSB1c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9vZmZsb2FkaW5ncy5vCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvLmRlcGVuZC5uZXRtYXBfb2ZmbG9hZGluZ3MubwkyMDE2LTExLTIzIDE3OjA1OjM5Ljky MzU4MDAwMCArMDAwMApAQCAtMCwwICsxLDQ0IEBACituZXRtYXBfb2ZmbG9hZGluZ3MubzogXAor ICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2L25l dG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2RlZnMuaCAv dXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4u aCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5o IFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19w dGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5 cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9z eXMvc3lzL190aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9z cmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8uaCAvdXNy L3NyYy9zeXMvc3lzL3BhcmFtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmggL3Vzci9z cmMvc3lzL3N5cy9zeXNsaW1pdHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5oIC91c3Iv c3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5lL19hbGln bi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL2tlcm5lbC5oIFwKKyAgL3Vzci9zcmMv c3lzL3N5cy9saW5rZXJfc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1ZS5oIFwKKyAgL3Vzci9z cmMvc3lzL3N5cy9zb2NraW8uaCAvdXNyL3NyYy9zeXMvc3lzL2lvY2NvbS5oIFwKKyAgL3Vzci9z cmMvc3lzL3N5cy9tYWxsb2MuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL19tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0dmFyLmggXAorICAvdXNy L3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggXAorICAvdXNy L3NyYy9zeXMvc3lzL29zZC5oIC91c3Ivc3JjL3N5cy9zeXMvX3N4LmggXAorICAvdXNyL3NyYy9z eXMvc3lzL3NvY2tidWYuaCAvdXNyL3NyYy9zeXMvc3lzL190YXNrLmggXAorICAvdXNyL3NyYy9z eXMvc3lzL3NvY2tzdGF0ZS5oIC91c3Ivc3JjL3N5cy9zeXMvY2FwcmlnaHRzLmggXAorICAvdXNy L3NyYy9zeXMvc3lzL3NvY2tvcHQuaCAvdXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9faW92ZWMuaCAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9yYWdl LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmLmggL3Vzci9zcmMvc3lzL25ldC9pZl92YXIuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvbWJ1Zi5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBtYWNo aW5lL2F0b21pYy5oIFwKKyAgbWFjaGluZS9jcHVmdW5jLmggL3Vzci9zcmMvc3lzL3N5cy9jYWxs b3V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19jYWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9z dGRpbnQuaCBcCisgIG1hY2hpbmUvX3N0ZGludC5oIHg4Ni9fc3RkaW50LmggL3Vzci9zcmMvc3lz L3N5cy9saWJrZXJuLmggXAorICAvdXNyL3NyYy9zeXMvdm0vdW1hLmggL3Vzci9zcmMvc3lzL3N5 cy9zZHQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIG1h Y2hpbmUvcHNsLmggeDg2L3BzbC5oIFwKKyAgbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1h Y2hpbmUvc2VnbWVudHMuaCB4ODYvc2VnbWVudHMuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvdm5l dC5oIC91c3Ivc3JjL3N5cy9zeXMvY291bnRlci5oIG1hY2hpbmUvY291bnRlci5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9wY3B1LmggL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggXAorICAvdXNy L3NyYy9zeXMvc3lzL19iaXRzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL19ybWxvY2suaCBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvdm1tZXRlci5oIC91c3Ivc3JjL3N5cy9zeXMvcmVzb3VyY2UuaCBtYWNo aW5lL3BjcHUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMv a3RyX2NsYXNzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5 cy9sb2NrX3Byb2ZpbGUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCAvdXNyL3Ny Yy9zeXMvc3lzL3J3bG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggL3Vzci9z cmMvc3lzL3N5cy9zeC5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCAvdXNy L3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggXAorICB4ODYvYnVzLmggbWFjaGluZS9f YnVzLmggbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9idXNfZG1hLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5cy9lbmRpYW4uaCBcCisg IC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0 bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4v Li4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAv c3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oCmRpZmYgLXUg LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfcGlwZS5vIC91 c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF9waXBlLm8KLS0tIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3BpcGUubwkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5k ZXBlbmQubmV0bWFwX3BpcGUubwkyMDE2LTExLTIzIDE3OjA1OjQwLjIzMjAzMjAwMCArMDAwMApA QCAtMCwwICsxLDQzIEBACituZXRtYXBfcGlwZS5vOiBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0 bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9waXBlLmMgXAor ICAvdXNyL3NyYy9zeXMvc3lzL2NkZWZzLmggL3Vzci9zcmMvc3lzL3N5cy90eXBlcy5oIG1hY2hp bmUvZW5kaWFuLmggXAorICB4ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lzL3N5cy9fdHlwZXMuaCBt YWNoaW5lL190eXBlcy5oIHg4Ni9fdHlwZXMuaCBcCisgIG1hY2hpbmUvX2xpbWl0cy5oIHg4Ni9f bGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9fcHRocmVhZHR5cGVzLmggXAorICAvdXNyL3NyYy9z eXMvc3lzL19zdGRpbnQuaCAvdXNyL3NyYy9zeXMvc3lzL3NlbGVjdC5oIFwKKyAgL3Vzci9zcmMv c3lzL3N5cy9fc2lnc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXZhbC5oIFwKKyAgL3Vzci9z cmMvc3lzL3N5cy90aW1lc3BlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3RpbWVzcGVjLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggL3Vzci9zcmMvc3lzL3N5cy9wYXJhbS5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9fbnVsbC5oIC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL3RpbWUuaCAvdXNyL3NyYy9zeXMvc3lzL3ByaW9yaXR5LmggbWFjaGlu ZS9wYXJhbS5oIFwKKyAgbWFjaGluZS9fYWxpZ24uaCB4ODYvX2FsaWduLmggL3Vzci9zcmMvc3lz L3N5cy9rZXJuZWwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbGlua2VyX3NldC5oIC91c3Ivc3Jj L3N5cy9zeXMvcXVldWUuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbWFsbG9jLmggL3Vzci9zcmMv c3lzL3N5cy9fbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fbXV0ZXguaCAvdXNyL3NyYy9z eXMvc3lzL3BvbGwuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9z eXMva3RyX2NsYXNzLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3J3bG9jay5oIC91c3Ivc3JjL3N5 cy9zeXMvX3J3bG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9sb2NrX3Byb2ZpbGUuaCAvdXNy L3NyYy9zeXMvc3lzL2xvY2tzdGF0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NkdC5oIC91c3Iv c3JjL3N5cy9zeXMvcGNwdS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY3B1c2V0LmggL3Vzci9z cmMvc3lzL3N5cy9fYml0c2V0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIC91c3Ivc3Jj L3N5cy9zeXMvX3JtbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggL3Vzci9z cmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hpbmUvcGNwdS5oIFwKKyAgbWFjaGluZS9hdG9taWMu aCAvdXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggXAor ICAvdXNyL3NyYy9zeXMvc3lzL3N5c2N0bC5oIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0LmggXAor ICAvdXNyL3NyYy9zeXMvc3lzL19pb3ZlYy5oIC91c3Ivc3JjL3N5cy9zeXMvX3NvY2thZGRyX3N0 b3JhZ2UuaCBcCisgIC91c3Ivc3JjL3N5cy9uZXQvaWYuaCAvdXNyL3NyYy9zeXMvbmV0L2lmX3Zh ci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9tYnVmLmggL3Vzci9zcmMvc3lzL3N5cy9zeXN0bS5o IG1hY2hpbmUvY3B1ZnVuYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jYWxsb3V0LmggL3Vzci9z cmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zdGRpbnQuaCBtYWNo aW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saWJrZXJu LmggL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9idWZfcmluZy5o IG1hY2hpbmUvY3B1LmggbWFjaGluZS9wc2wuaCB4ODYvcHNsLmggXAorICBtYWNoaW5lL2ZyYW1l LmggeDg2L2ZyYW1lLmggbWFjaGluZS9zZWdtZW50cy5oIHg4Ni9zZWdtZW50cy5oIFwKKyAgL3Vz ci9zcmMvc3lzL25ldC92bmV0LmggL3Vzci9zcmMvc3lzL3N5cy9jb3VudGVyLmggbWFjaGluZS9j b3VudGVyLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggL3Vzci9zcmMvc3lzL3N5cy9z eC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIC91c3Ivc3JjL3N5cy9uZXQvYWx0cS9p Zl9hbHRxLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmggeDg2L2J1 cy5oIG1hY2hpbmUvX2J1cy5oIFwKKyAgbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMvc3lzL3N5 cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggL3Vzci9zcmMvc3lz L3N5cy9yZWZjb3VudC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9saW1pdHMuaCBcCisgIC91c3Iv aG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwLmgg XAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vZGV2 L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21v ZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5oIFwKKyAgL3Vzci9ob21l L3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFw X21lbTIuaApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQu bmV0bWFwX3B0Lm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3B0 Lm8KLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5kZXBlbmQubmV0bWFwX3B0Lm8JMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC8uZGVwZW5kLm5ldG1hcF9wdC5vCTIwMTYtMTEtMjMgMTc6MDU6NDEuMzIyNTA2MDAw ICswMDAwCkBAIC0wLDAgKzEsNDIgQEAKK25ldG1hcF9wdC5vOiBcCisgIC91c3IvaG9tZS9zdGV2 ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9wdC5j IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9jZGVmcy5oIC91c3Ivc3JjL3N5cy9zeXMvcGFyYW0uaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvX251bGwuaCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFj aGluZS9lbmRpYW4uaCBcCisgIHg4Ni9lbmRpYW4uaCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5o IG1hY2hpbmUvX3R5cGVzLmggeDg2L190eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2 L19saW1pdHMuaCAvdXNyL3NyYy9zeXMvc3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3Jj L3N5cy9zeXMvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL19zaWdzZXQuaCAvdXNyL3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAvdXNy L3NyYy9zeXMvc3lzL3RpbWVzcGVjLmggL3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMvc3lzbGltaXRzLmggL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5oIFwK KyAgL3Vzci9zcmMvc3lzL3N5cy90aW1lLmggL3Vzci9zcmMvc3lzL3N5cy9wcmlvcml0eS5oIG1h Y2hpbmUvcGFyYW0uaCBcCisgIG1hY2hpbmUvX2FsaWduLmggeDg2L19hbGlnbi5oIC91c3Ivc3Jj L3N5cy9zeXMva2VybmVsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2xpbmtlcl9zZXQuaCAvdXNy L3NyYy9zeXMvc3lzL3F1ZXVlLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NlbGluZm8uaCAvdXNy L3NyYy9zeXMvc3lzL2V2ZW50LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3NvY2tldC5oIC91c3Iv c3JjL3N5cy9zeXMvX2lvdmVjLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zb2NrYWRkcl9zdG9y YWdlLmggL3Vzci9zcmMvc3lzL25ldC9pZi5oIFwKKyAgL3Vzci9zcmMvc3lzL25ldC9pZl92YXIu aCAvdXNyL3NyYy9zeXMvc3lzL21idWYuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc3lzdG0uaCBt YWNoaW5lL2F0b21pYy5oIG1hY2hpbmUvY3B1ZnVuYy5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9j YWxsb3V0LmggL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5 cy9zdGRpbnQuaCBtYWNoaW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIFwKKyAgL3Vzci9zcmMv c3lzL3N5cy9saWJrZXJuLmggL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIFwKKyAgL3Vzci9zcmMvc3lz L3N5cy9tYWxsb2MuaCAvdXNyL3NyYy9zeXMvc3lzL19sb2NrLmggXAorICAvdXNyL3NyYy9zeXMv c3lzL19tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvc2R0LmggXAorICAvdXNyL3NyYy9zeXMvc3lz L2J1Zl9yaW5nLmggbWFjaGluZS9jcHUuaCBtYWNoaW5lL3BzbC5oIHg4Ni9wc2wuaCBcCisgIG1h Y2hpbmUvZnJhbWUuaCB4ODYvZnJhbWUuaCBtYWNoaW5lL3NlZ21lbnRzLmggeDg2L3NlZ21lbnRz LmggXAorICAvdXNyL3NyYy9zeXMvbmV0L3ZuZXQuaCAvdXNyL3NyYy9zeXMvc3lzL2NvdW50ZXIu aCBtYWNoaW5lL2NvdW50ZXIuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvcGNwdS5oIC91c3Ivc3Jj L3N5cy9zeXMvX2NwdXNldC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fYml0c2V0LmggL3Vzci9z cmMvc3lzL3N5cy9fc3guaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3JtbG9jay5oIC91c3Ivc3Jj L3N5cy9zeXMvdm1tZXRlci5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9yZXNvdXJjZS5oIG1hY2hp bmUvcGNwdS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9r dHJfY2xhc3MuaCAvdXNyL3NyYy9zeXMvc3lzL211dGV4LmggXAorICAvdXNyL3NyYy9zeXMvc3lz L2xvY2tfcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91c3Ivc3Jj L3N5cy9zeXMvcndsb2NrLmggL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggXAorICAvdXNyL3Ny Yy9zeXMvc3lzL3N4LmggL3Vzci9zcmMvc3lzL3N5cy9fdGFzay5oIFwKKyAgL3Vzci9zcmMvc3lz L25ldC9hbHRxL2lmX2FsdHEuaCAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIG1hY2hpbmUvYnVzLmgg XAorICB4ODYvYnVzLmggbWFjaGluZS9fYnVzLmggbWFjaGluZS9idXNfZG1hLmggL3Vzci9zcmMv c3lzL3N5cy9idXNfZG1hLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19idXNfZG1hLmggXAorICAv dXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9uZXRtYXAvLi4vLi4vbmV0L25ldG1h cC5oIFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4u L2Rldi9uZXRtYXAvbmV0bWFwX2tlcm4uaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5 cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9kZXYvbmV0bWFwL25ldG1hcF9tYnEuaCBcCisgIC91c3Iv aG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8uLi9uZXQvbmV0bWFwX3Zp cnQuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u Li9kZXYvbmV0bWFwL25ldG1hcF9tZW0yLmgKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1 bGVzL25ldG1hcC8uZGVwZW5kLm5ldG1hcF92YWxlLm8gL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwLy5kZXBlbmQubmV0bWFwX3ZhbGUubwotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv LmRlcGVuZC5uZXRtYXBfdmFsZS5vCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvLmRlcGVuZC5uZXRtYXBfdmFsZS5vCTIw MTYtMTEtMjMgMTc6MDU6MzguODA0NTI5MDAwICswMDAwCkBAIC0wLDAgKzEsNTAgQEAKK25ldG1h cF92YWxlLm86IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFw Ly4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX3ZhbGUuYyBcCisgIC91c3Ivc3JjL3N5cy9zeXMvY2Rl ZnMuaCAvdXNyL3NyYy9zeXMvc3lzL3R5cGVzLmggbWFjaGluZS9lbmRpYW4uaCBcCisgIHg4Ni9l bmRpYW4uaCAvdXNyL3NyYy9zeXMvc3lzL190eXBlcy5oIG1hY2hpbmUvX3R5cGVzLmggeDg2L190 eXBlcy5oIFwKKyAgbWFjaGluZS9fbGltaXRzLmggeDg2L19saW1pdHMuaCAvdXNyL3NyYy9zeXMv c3lzL19wdGhyZWFkdHlwZXMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX3N0ZGludC5oIC91c3Iv c3JjL3N5cy9zeXMvc2VsZWN0LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19zaWdzZXQuaCAvdXNy L3NyYy9zeXMvc3lzL190aW1ldmFsLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3RpbWVzcGVjLmgg L3Vzci9zcmMvc3lzL3N5cy9fdGltZXNwZWMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvZXJybm8u aCAvdXNyL3NyYy9zeXMvc3lzL3BhcmFtLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL19udWxsLmgg L3Vzci9zcmMvc3lzL3N5cy9zeXNsaW1pdHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvdGltZS5o IC91c3Ivc3JjL3N5cy9zeXMvcHJpb3JpdHkuaCBtYWNoaW5lL3BhcmFtLmggXAorICBtYWNoaW5l L19hbGlnbi5oIHg4Ni9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvc3lzL2tlcm5lbC5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9saW5rZXJfc2V0LmggL3Vzci9zcmMvc3lzL3N5cy9xdWV1ZS5oIFwKKyAg L3Vzci9zcmMvc3lzL3N5cy9jb25mLmggL3Vzci9zcmMvc3lzL3N5cy9ldmVudGhhbmRsZXIuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvbG9jay5oIC91c3Ivc3JjL3N5cy9zeXMvX2xvY2suaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMva3RyX2NsYXNzLmggL3Vzci9zcmMvc3lzL3N5cy9rdHIuaCBcCisg IC91c3Ivc3JjL3N5cy9zeXMvX2NwdXNldC5oIC91c3Ivc3JjL3N5cy9zeXMvX2JpdHNldC5oIFwK KyAgL3Vzci9zcmMvc3lzL3N5cy9tdXRleC5oIC91c3Ivc3JjL3N5cy9zeXMvX211dGV4LmggXAor ICAvdXNyL3NyYy9zeXMvc3lzL3BjcHUuaCAvdXNyL3NyYy9zeXMvc3lzL19zeC5oIFwKKyAgL3Vz ci9zcmMvc3lzL3N5cy9fcm1sb2NrLmggL3Vzci9zcmMvc3lzL3N5cy92bW1ldGVyLmggXAorICAv dXNyL3NyYy9zeXMvc3lzL3Jlc291cmNlLmggbWFjaGluZS9wY3B1LmggXAorICAvdXNyL3NyYy9z eXMvc3lzL2xvY2tfcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9zeXMvbG9ja3N0YXQuaCBcCisgIC91 c3Ivc3JjL3N5cy9zeXMvc2R0LmggbWFjaGluZS9hdG9taWMuaCBtYWNoaW5lL2NwdWZ1bmMuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2lvLmggL3Vzci9zcmMvc3lzL3N5cy9pb2Njb20uaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2V0dmFyLmggL3Vzci9zcmMvc3lzL3N5cy9zZWxpbmZv LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL2V2ZW50LmggL3Vzci9zcmMvc3lzL3N5cy9vc2QuaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja2J1Zi5oIC91c3Ivc3JjL3N5cy9zeXMvX3Rhc2suaCBc CisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja3N0YXRlLmggL3Vzci9zcmMvc3lzL3N5cy9jYXByaWdo dHMuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvc29ja29wdC5oIC91c3Ivc3JjL3N5cy9zeXMvbWFs bG9jLmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3BvbGwuaCAvdXNyL3NyYy9zeXMvc3lzL3J3bG9j ay5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fcndsb2NrLmggL3Vzci9zcmMvc3lzL3N5cy9zb2Nr ZXQuaCBcCisgIC91c3Ivc3JjL3N5cy9zeXMvX2lvdmVjLmggL3Vzci9zcmMvc3lzL3N5cy9fc29j a2FkZHJfc3RvcmFnZS5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXNjdGwuaCAvdXNyL3NyYy9z eXMvbmV0L2lmLmggXAorICAvdXNyL3NyYy9zeXMvbmV0L2lmX3Zhci5oIC91c3Ivc3JjL3N5cy9z eXMvbWJ1Zi5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9zeXN0bS5oIC91c3Ivc3JjL3N5cy9zeXMv Y2FsbG91dC5oIFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fY2FsbG91dC5oIC91c3Ivc3JjL3N5cy9z eXMvc3RkaW50LmggXAorICBtYWNoaW5lL19zdGRpbnQuaCB4ODYvX3N0ZGludC5oIC91c3Ivc3Jj L3N5cy9zeXMvbGlia2Vybi5oIFwKKyAgL3Vzci9zcmMvc3lzL3ZtL3VtYS5oIC91c3Ivc3JjL3N5 cy9zeXMvYnVmX3JpbmcuaCBtYWNoaW5lL2NwdS5oIFwKKyAgbWFjaGluZS9wc2wuaCB4ODYvcHNs LmggbWFjaGluZS9mcmFtZS5oIHg4Ni9mcmFtZS5oIG1hY2hpbmUvc2VnbWVudHMuaCBcCisgIHg4 Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9uZXQvdm5ldC5oIC91c3Ivc3JjL3N5cy9zeXMvY291 bnRlci5oIFwKKyAgbWFjaGluZS9jb3VudGVyLmggL3Vzci9zcmMvc3lzL3N5cy9zeC5oIFwKKyAg L3Vzci9zcmMvc3lzL25ldC9hbHRxL2lmX2FsdHEuaCAvdXNyL3NyYy9zeXMvbmV0L2lmcS5oIFwK KyAgL3Vzci9zcmMvc3lzL25ldC9icGYuaCBtYWNoaW5lL2J1cy5oIHg4Ni9idXMuaCBtYWNoaW5l L19idXMuaCBcCisgIG1hY2hpbmUvYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvYnVzX2RtYS5o IFwKKyAgL3Vzci9zcmMvc3lzL3N5cy9fYnVzX2RtYS5oIC91c3Ivc3JjL3N5cy9zeXMvZW5kaWFu LmggXAorICAvdXNyL3NyYy9zeXMvc3lzL3JlZmNvdW50LmggL3Vzci9zcmMvc3lzL3N5cy9saW1p dHMuaCBcCisgIC91c3IvaG9tZS9zdGV2ZW4vbmV0bWFwL3N5cy9tb2R1bGVzL25ldG1hcC8uLi8u Li9uZXQvbmV0bWFwLmggXAorICAvdXNyL2hvbWUvc3RldmVuL25ldG1hcC9zeXMvbW9kdWxlcy9u ZXRtYXAvLi4vLi4vZGV2L25ldG1hcC9uZXRtYXBfa2Vybi5oIFwKKyAgL3Vzci9ob21lL3N0ZXZl bi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rldi9uZXRtYXAvbmV0bWFwX21icS5o IFwKKyAgL3Vzci9ob21lL3N0ZXZlbi9uZXRtYXAvc3lzL21vZHVsZXMvbmV0bWFwLy4uLy4uL2Rl di9uZXRtYXAvbmV0bWFwX21lbTIuaApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwLy5naXRpZ25vcmUgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5naXRpZ25vcmUK LS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwLy5naXRpZ25vcmUJMTk3MC0wMS0wMSAwMTow MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC8uZ2l0 aWdub3JlCTIwMTYtMTEtMjMgMTY6NTc6NTcuODU2NjM5MDAwICswMDAwCkBAIC0wLDAgKzEsMyBA QAorKgorIU1ha2VmaWxlCishLmdpdGlnbm9yZQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL01ha2VmaWxlIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9NYWtlZmls ZQotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvTWFrZWZpbGUJMjAxNi0wOS0yOSAwMDoy NDo1My4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9NYWtl ZmlsZQkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1NjkzNDAwMCArMDAwMApAQCAtMSwxMyArMSwxNiBA QAotIyAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL21vZHVsZXMvbmV0bWFwL01ha2VmaWxlIDI3 MjEwOCAyMDE0LTA5LTI1IDE0OjI1OjM4WiBsdWlnaSAkCisjICRGcmVlQlNEJAogIwogIyBDb21w aWxlIG5ldG1hcCBhcyBhIG1vZHVsZSwgdXNlZnVsIGlmIHlvdSB3YW50IGEgbmV0bWFwIGJyaWRn ZQogIyBvciBsb2FkYWJsZSBkcml2ZXJzLgogCisuaW5jbHVkZSA8YnNkLm93bi5taz4gIyBGcmVl QlNEIDEwIGFuZCBlYXJsaWVyCisjIC5pbmNsdWRlICIke1NZU0RJUn0vY29uZi9rZXJuLm9wdHMu bWsiCisKIC5QQVRIOiAkey5DVVJESVJ9Ly4uLy4uL2Rldi9uZXRtYXAKIC5QQVRILmg6ICR7LkNV UkRJUn0vLi4vLi4vbmV0Ci1DRkxBR1MgKz0gLUkkey5DVVJESVJ9Ly4uLy4uLworQ0ZMQUdTICs9 IC1JJHsuQ1VSRElSfS8uLi8uLi8gLUQgSU5FVAogS01PRAk9IG5ldG1hcAotU1JDUwk9IGRldmlj ZV9pZi5oIGJ1c19pZi5oIG9wdF9uZXRtYXAuaAorU1JDUwk9IGRldmljZV9pZi5oIGJ1c19pZi5o IHBjaV9pZi5oIG9wdF9uZXRtYXAuaAogU1JDUwkrPSBuZXRtYXAuYyBuZXRtYXAuaCBuZXRtYXBf a2Vybi5oCiBTUkNTCSs9IG5ldG1hcF9tZW0yLmMgbmV0bWFwX21lbTIuaAogU1JDUwkrPSBuZXRt YXBfZ2VuZXJpYy5jCkBAIC0xNyw1ICsyMCw4IEBACiBTUkNTCSs9IG5ldG1hcF9vZmZsb2FkaW5n cy5jCiBTUkNTCSs9IG5ldG1hcF9waXBlLmMKIFNSQ1MJKz0gbmV0bWFwX21vbml0b3IuYworU1JD UwkrPSBuZXRtYXBfcHQuYworU1JDUwkrPSBpZl9wdG5ldC5jCitTUkNTCSs9IG9wdF9pbmV0Lmgg b3B0X2luZXQ2LmgKIAogLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZmIC11IC1yIC1OIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL2J1c19pZi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9idXNfaWYuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvYnVzX2lmLmgJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC9idXNfaWYuaAkyMDE2LTExLTIzIDE3OjA1OjMzLjg1NzI3NTAwMCArMDAwMApAQCAtMCww ICsxLDEwNDAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcHJvZHVjZWQgYXV0b21hdGljYWxseS4K KyAqIERvIG5vdCBtb2RpZnkgYW55dGhpbmcgaW4gaGVyZSBieSBoYW5kLgorICoKKyAqIENyZWF0 ZWQgZnJvbSBzb3VyY2UgZmlsZQorICogICAvdXNyL3NyYy9zeXMva2Vybi9idXNfaWYubQorICog d2l0aAorICogICBtYWtlb2Jqb3BzLmF3aworICoKKyAqIFNlZSB0aGUgc291cmNlIGZpbGUgZm9y IGxlZ2FsIGluZm9ybWF0aW9uCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgQlVTIGJ1cyAtIEtP YmogbWV0aG9kcyBmb3IgZHJpdmVycyBvZiBkZXZpY2VzIHdpdGggY2hpbGRyZW4KKyAqIEBicmll ZiBBIHNldCBvZiBtZXRob2RzIHJlcXVpcmVkIGRldmljZSBkcml2ZXJzIHRoYXQgc3VwcG9ydAor ICogY2hpbGQgZGV2aWNlcy4KKyAqIEB7CisgKi8KKworI2lmbmRlZiBfYnVzX2lmX2hfCisjZGVm aW5lIF9idXNfaWZfaF8KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV U19QUklOVF9DSElMRCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNf cHJpbnRfY2hpbGRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl IEJVU19QUklOVF9DSElMRCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3ByaW50X2NoaWxk X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFByaW50 IGEgZGVzY3JpcHRpb24gb2YgYSBjaGlsZCBkZXZpY2UKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBm cm9tIHN5c3RlbSBjb2RlIHdoaWNoIHByaW50cyBvdXQgYSBkZXNjcmlwdGlvbiBvZiBhCisgKiBk ZXZpY2UuIEl0IHNob3VsZCBkZXNjcmliZSB0aGUgYXR0YWNobWVudCB0aGF0IHRoZSBjaGlsZCBo YXMgd2l0aAorICogdGhlIHBhcmVudC4gRm9yIGluc3RhbmNlIHRoZSBUdXJib0xhc2VyIGJ1cyBw cmludHMgd2hpY2ggbm9kZSB0aGUKKyAqIGRldmljZSBpcyBhdHRhY2hlZCB0by4gU2VlIGJ1c19n ZW5lcmljX3ByaW50X2NoaWxkKCkgZm9yIG1vcmUgCisgKiBpbmZvcm1hdGlvbi4KKyAqCisgKiBA cGFyYW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCBpcyBiZWluZyBwcmludGVkCisgKiBA cGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBkZXZpY2UgdG8gZGVzY3JpYmUKKyAqCisgKiBAcmV0dXJu cwkJdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIG91dHB1dC4KKyAqLworCitzdGF0aWMgX19pbmxp bmUgaW50IEJVU19QUklOVF9DSElMRChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpCit7 CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX3By aW50X2NoaWxkKTsKKwlyZXR1cm4gKChidXNfcHJpbnRfY2hpbGRfdCAqKSBfbSkoX2RldiwgX2No aWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19QUk9C RV9OT01BVENIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19wcm9i ZV9ub21hdGNoX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBC VVNfUFJPQkVfTk9NQVRDSCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19wcm9iZV9ub21h dGNoX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFBy aW50IGEgbm90aWZpY2F0aW9uIGFib3V0IGFuIHVucHJvYmVkIGNoaWxkIGRldmljZS4KKyAqCisg KiBDYWxsZWQgZm9yIGVhY2ggY2hpbGQgZGV2aWNlIHRoYXQgZGlkIG5vdCBzdWNjZWVkIGluIHBy b2JpbmcgZm9yIGEKKyAqIGRyaXZlci4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhlIGRldmljZSB3 aG9zZSBjaGlsZCB3YXMgYmVpbmcgcHJvYmVkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBk ZXZpY2Ugd2hpY2ggZmFpbGVkIHRvIHByb2JlCisgKi8gICAKKworc3RhdGljIF9faW5saW5lIHZv aWQgQlVTX1BST0JFX05PTUFUQ0goZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKQorewor CWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19wcm9i ZV9ub21hdGNoKTsKKwkoKGJ1c19wcm9iZV9ub21hdGNoX3QgKikgX20pKF9kZXYsIF9jaGlsZCk7 Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfUkVBRF9JVkFS KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19yZWFkX2l2YXJfZGVz YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19SRUFEX0lWQVIo KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19yZWFkX2l2YXJfdChkZXZpY2VfdCBfZGV2LCBk ZXZpY2VfdCBfY2hpbGQsIGludCBfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludHB0cl90ICpfcmVzdWx0KTsKKy8qKgorICogQGJyaWVmIFJlYWQgdGhlIHZhbHVlIG9mIGEg YnVzLXNwZWNpZmljIGF0dHJpYnV0ZSBvZiBhIGRldmljZQorICoKKyAqIFRoaXMgbWV0aG9kLCBh bG9uZyB3aXRoIEJVU19XUklURV9JVkFSKCkgbWFuYWdlcyBhIGJ1cy1zcGVjaWZpYyBzZXQKKyAq IG9mIGluc3RhbmNlIHZhcmlhYmxlcyBvZiBhIGNoaWxkIGRldmljZS4gIFRoZSBpbnRlbnRpb24g aXMgdGhhdAorICogZWFjaCBkaWZmZXJlbnQgdHlwZSBvZiBidXMgZGVmaW5lcyBhIHNldCBvZiBh cHByb3ByaWF0ZSBpbnN0YW5jZQorICogdmFyaWFibGVzIChzdWNoIGFzIHBvcnRzIGFuZCBpcnFz IGZvciBJU0EgYnVzIGV0Yy4pCisgKgorICogVGhpcyBpbmZvcm1hdGlvbiBjb3VsZCBiZSBnaXZl biB0byB0aGUgY2hpbGQgZGV2aWNlIGFzIGEgc3RydWN0IGJ1dAorICogdGhhdCBtYWtlcyBpdCBo YXJkIGZvciBhIGJ1cyB0byBhZGQgb3IgcmVtb3ZlIHZhcmlhYmxlcyB3aXRob3V0CisgKiBmb3Jj aW5nIGFuIGVkaXQgYW5kIHJlY29tcGlsZSBmb3IgYWxsIGRyaXZlcnMgd2hpY2ggbWF5IG5vdCBi ZQorICogcG9zc2libGUgZm9yIHZlbmRvciBzdXBwbGllZCBiaW5hcnkgZHJpdmVycy4KKyAqCisg KiBUaGlzIG1ldGhvZCBjb3BpZXMgdGhlIHZhbHVlIG9mIGFuIGluc3RhbmNlIHZhcmlhYmxlIHRv IHRoZQorICogbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEBwICpfcmVzdWx0LgorICogCisgKiBAcGFy YW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCB3YXMgYmVpbmcgZXhhbWluZWQKKyAqIEBw YXJhbSBfY2hpbGQJdGhlIGNoaWxkIGRldmljZSB3aG9zZSBpbnN0YW5jZSB2YXJpYWJsZSBpcwor ICoJCQliZWluZyByZWFkCisgKiBAcGFyYW0gX2luZGV4CXRoZSBpbnN0YW5jZSB2YXJpYWJsZSB0 byByZWFkCisgKiBAcGFyYW0gX3Jlc3VsdAlhIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhlIGluc3Rh bmNlIHZhcmlhYmxlCisgKgkJCXZhbHVlCisgKiAKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICog QHJldHZhbCBFTk9FTlQJbm8gc3VjaCBpbnN0YW5jZSB2YXJpYWJsZSBpcyBzdXBwb3J0ZWQgYnkg QHAKKyAqCQkJX2RldiAKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19SRUFEX0lWQVIo ZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX2luZGV4LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCAqX3Jlc3VsdCkKK3sKKwlrb2Jqb3BfdCBf bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfcmVhZF9pdmFyKTsKKwly ZXR1cm4gKChidXNfcmVhZF9pdmFyX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX2luZGV4LCBfcmVz dWx0KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19XUklU RV9JVkFSKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c193cml0ZV9p dmFyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfV1JJ VEVfSVZBUigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3dyaXRlX2l2YXJfdChkZXZpY2Vf dCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfaW5keCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludHB0cl90IF92YWx1ZSk7CisvKioKKyAqIEBicmllZiBXcml0ZSB0aGUgdmFs dWUgb2YgYSBidXMtc3BlY2lmaWMgYXR0cmlidXRlIG9mIGEgZGV2aWNlCisgKiAKKyAqIFRoaXMg bWV0aG9kIHNldHMgdGhlIHZhbHVlIG9mIGFuIGluc3RhbmNlIHZhcmlhYmxlIHRvIEBwIF92YWx1 ZS4KKyAqIAorICogQHBhcmFtIF9kZXYJCXRoZSBkZXZpY2Ugd2hvc2UgY2hpbGQgd2FzIGJlaW5n IHVwZGF0ZWQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGNoaWxkIGRldmljZSB3aG9zZSBpbnN0YW5j ZSB2YXJpYWJsZSBpcworICoJCQliZWluZyB3cml0dGVuCisgKiBAcGFyYW0gX2luZGV4CXRoZSBp bnN0YW5jZSB2YXJpYWJsZSB0byB3cml0ZQorICogQHBhcmFtIF92YWx1ZQl0aGUgdmFsdWUgdG8g d3JpdGUgdG8gdGhhdCBpbnN0YW5jZSB2YXJpYWJsZQorICogCisgKiBAcmV0dmFsIDAJCXN1Y2Nl c3MKKyAqIEByZXR2YWwgRU5PRU5UCW5vIHN1Y2ggaW5zdGFuY2UgdmFyaWFibGUgaXMgc3VwcG9y dGVkIGJ5IEBwCisgKgkJCV9kZXYgCisgKiBAcmV0dmFsIEVJTlZBTAl0aGUgaW5zdGFuY2UgdmFy aWFibGUgd2FzIHJlY29nbmlzZWQgYnV0CisgKgkJCWNvbnRhaW5zIGEgcmVhZC1vbmx5IHZhbHVl CisgKi8KKworc3RhdGljIF9faW5saW5lIGludCBCVVNfV1JJVEVfSVZBUihkZXZpY2VfdCBfZGV2 LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfaW5keCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludHB0cl90IF92YWx1ZSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfd3JpdGVfaXZhcik7CisJcmV0dXJuICgoYnVzX3dy aXRlX2l2YXJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaW5keCwgX3ZhbHVlKTsKK30KKworLyoq IEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19DSElMRF9ERUxFVEVEKCkgbWV0 aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19jaGlsZF9kZWxldGVkX2Rlc2M7 CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQ0hJTERfREVMRVRF RCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19jaGlsZF9kZWxldGVkX3QoZGV2aWNlX3Qg X2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0 IGEgY2hpbGQgd2FzIGRlbGV0ZWQKKyAqCisgKiBDYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBk ZXZpY2VfZGVsZXRlX2NoaWxkKCkgdG8gYWxsb3cgdGhlIHBhcmVudAorICogdG8gdGVhcmRvd24g YW55IGJ1cy1zcGVjaWZpYyBzdGF0ZSBmb3IgdGhlIGNoaWxkLgorICogCisgKiBAcGFyYW0gX2Rl dgkJdGhlIGRldmljZSB3aG9zZSBjaGlsZCBpcyBiZWluZyBkZWxldGVkCisgKiBAcGFyYW0gX2No aWxkCXRoZSBjaGlsZCBkZXZpY2Ugd2hpY2ggaXMgYmVpbmcgZGVsZXRlZAorICovCisKK3N0YXRp YyBfX2lubGluZSB2b2lkIEJVU19DSElMRF9ERUxFVEVEKGRldmljZV90IF9kZXYsIGRldmljZV90 IF9jaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2Rldikt Pm9wcyxidXNfY2hpbGRfZGVsZXRlZCk7CisJKChidXNfY2hpbGRfZGVsZXRlZF90ICopIF9tKShf ZGV2LCBfY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUg QlVTX0NISUxEX0RFVEFDSEVEKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj IGJ1c19jaGlsZF9kZXRhY2hlZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVu dGluZyB0aGUgQlVTX0NISUxEX0RFVEFDSEVEKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVz X2NoaWxkX2RldGFjaGVkX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgor ICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0IGEgY2hpbGQgd2FzIGRldGFjaGVkCisgKgorICog Q2FsbGVkIGFmdGVyIHRoZSBjaGlsZCdzIERFVklDRV9ERVRBQ0goKSBtZXRob2QgdG8gYWxsb3cg dGhlIHBhcmVudAorICogdG8gcmVjbGFpbSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBvbiBiZWhh bGYgb2YgdGhlIGNoaWxkLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIGRldmljZSB3aG9zZSBj aGlsZCBjaGFuZ2VkIHN0YXRlCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBjaGlsZCBkZXZpY2Ugd2hp Y2ggY2hhbmdlZCBzdGF0ZQorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJVU19DSElMRF9E RVRBQ0hFRChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpCit7CisJa29iam9wX3QgX207 CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2NoaWxkX2RldGFjaGVkKTsK KwkoKGJ1c19jaGlsZF9kZXRhY2hlZF90ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisvKiog QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0RSSVZFUl9BRERFRCgpIG1ldGhv ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfZHJpdmVyX2FkZGVkX2Rlc2M7Cisv KiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfRFJJVkVSX0FEREVEKCkg bWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVzX2RyaXZlcl9hZGRlZF90KGRldmljZV90IF9kZXYs IGRyaXZlcl90ICpfZHJpdmVyKTsKKy8qKgorICogQGJyaWVmIE5vdGlmeSBhIGJ1cyB0aGF0IGEg bmV3IGRyaXZlciB3YXMgYWRkZWQKKyAqIAorICogQ2FsbGVkIHdoZW4gYSBuZXcgZHJpdmVyIGlz IGFkZGVkIHRvIHRoZSBkZXZjbGFzcyB3aGljaCBvd25zIHRoaXMKKyAqIGJ1cy4gVGhlIGdlbmVy aWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcHJvYmUgYW5kCisg KiBhdHRhY2ggYW55IHVuLW1hdGNoZWQgY2hpbGRyZW4gb2YgdGhlIGJ1cy4KKyAqIAorICogQHBh cmFtIF9kZXYJCXRoZSBkZXZpY2Ugd2hvc2UgZGV2Y2xhc3MgaGFkIGEgbmV3IGRyaXZlcgorICoJ CQlhZGRlZCB0byBpdAorICogQHBhcmFtIF9kcml2ZXIJdGhlIG5ldyBkcml2ZXIgd2hpY2ggd2Fz IGFkZGVkCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgQlVTX0RSSVZFUl9BRERFRChkZXZp Y2VfdCBfZGV2LCBkcml2ZXJfdCAqX2RyaXZlcikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BM T09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZHJpdmVyX2FkZGVkKTsKKwkoKGJ1c19kcml2 ZXJfYWRkZWRfdCAqKSBfbSkoX2RldiwgX2RyaXZlcik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVl IGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfQUREX0NISUxEKCkgbWV0aG9kICovCitleHRlcm4gc3Ry dWN0IGtvYmpvcF9kZXNjIGJ1c19hZGRfY2hpbGRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv biBpbXBsZW1lbnRpbmcgdGhlIEJVU19BRERfQ0hJTEQoKSBtZXRob2QgKi8KK3R5cGVkZWYgZGV2 aWNlX3QgYnVzX2FkZF9jaGlsZF90KGRldmljZV90IF9kZXYsIHVfaW50IF9vcmRlciwgY29uc3Qg Y2hhciAqX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3VuaXQp OworLyoqCisgKiBAYnJpZWYgQ3JlYXRlIGEgbmV3IGNoaWxkIGRldmljZQorICoKKyAqIEZvciBi dXNzZXMgd2hpY2ggdXNlIHVzZSBkcml2ZXJzIHN1cHBvcnRpbmcgREVWSUNFX0lERU5USUZZKCkg dG8KKyAqIGVudW1lcmF0ZSB0aGVpciBkZXZpY2VzLCB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNy ZWF0ZSBuZXcKKyAqIGRldmljZSBpbnN0YW5jZXMuIFRoZSBuZXcgZGV2aWNlIHdpbGwgYmUgYWRk ZWQgYWZ0ZXIgdGhlIGxhc3QKKyAqIGV4aXN0aW5nIGNoaWxkIHdpdGggdGhlIHNhbWUgb3JkZXIu IEltcGxlbWVudGF0aW9ucyBvZiBidXNfYWRkX2NoaWxkCisgKiBjYWxsIGRldmljZV9hZGRfY2hp bGRfb3JkZXJlZCB0byBhZGQgdGhlIGNoaWxkIGFuZCBvZnRlbiBhZGQKKyAqIGEgc3VpdGFibGUg aXZhciB0byB0aGUgZGV2aWNlIHNwZWNpZmljIHRvIHRoYXQgYnVzLgorICogCisgKiBAcGFyYW0g X2RldgkJdGhlIGJ1cyBkZXZpY2Ugd2hpY2ggd2lsbCBiZSB0aGUgcGFyZW50IG9mIHRoZQorICoJ CQluZXcgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX29yZGVyCWEgdmFsdWUgd2hpY2ggaXMgdXNl ZCB0byBwYXJ0aWFsbHkgc29ydCB0aGUKKyAqCQkJY2hpbGRyZW4gb2YgQHAgX2RldiAtIGRldmlj ZXMgY3JlYXRlZCB1c2luZworICoJCQlsb3dlciB2YWx1ZXMgb2YgQHAgX29yZGVyIGFwcGVhciBm aXJzdCBpbiBAcAorICoJCQlfZGV2J3MgbGlzdCBvZiBjaGlsZHJlbgorICogQHBhcmFtIF9uYW1l CQlkZXZjbGFzcyBuYW1lIGZvciBuZXcgZGV2aWNlIG9yIEBjIE5VTEwgaWYgbm90CisgKgkJCXNw ZWNpZmllZAorICogQHBhcmFtIF91bml0CQl1bml0IG51bWJlciBmb3IgbmV3IGRldmljZSBvciBA YyAtMSBpZiBub3QKKyAqCQkJc3BlY2lmaWVkCisgKi8KKworc3RhdGljIF9faW5saW5lIGRldmlj ZV90IEJVU19BRERfQ0hJTEQoZGV2aWNlX3QgX2RldiwgdV9pbnQgX29yZGVyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX25hbWUsIGludCBfdW5p dCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxi dXNfYWRkX2NoaWxkKTsKKwlyZXR1cm4gKChidXNfYWRkX2NoaWxkX3QgKikgX20pKF9kZXYsIF9v cmRlciwgX25hbWUsIF91bml0KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm b3IgdGhlIEJVU19SRVNDQU4oKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2Mg YnVzX3Jlc2Nhbl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg QlVTX1JFU0NBTigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3Jlc2Nhbl90KGRldmljZV90 IF9kZXYpOworLyoqCisgKiBAYnJpZWYgUmVzY2FuIHRoZSBidXMKKyAqCisgKiBUaGlzIG1ldGhv ZCBpcyBjYWxsZWQgYnkgYSBwYXJlbnQgYnJpZGdlIG9yIGRldmN0bCB0byB0cmlnZ2VyIGEgYnVz CisgKiByZXNjYW4uICBUaGUgcmVzY2FuIHNob3VsZCBkZWxldGUgZGV2aWNlcyBubyBsb25nZXIg cHJlc2VudCBhbmQKKyAqIGVudW1lcmF0ZSBkZXZpY2VzIHRoYXQgaGF2ZSBuZXdseSBhcnJpdmVk LgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICovCisKK3N0YXRpYyBfX2lu bGluZSBpbnQgQlVTX1JFU0NBTihkZXZpY2VfdCBfZGV2KQoreworCWtvYmpvcF90IF9tOworCUtP QkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19yZXNjYW4pOworCXJldHVybiAoKGJ1 c19yZXNjYW5fdCAqKSBfbSkoX2Rldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0 b3IgZm9yIHRoZSBCVVNfQUxMT0NfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qg a29iam9wX2Rlc2MgYnVzX2FsbG9jX3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp b24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQUxMT0NfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVk ZWYgc3RydWN0IHJlc291cmNlICogYnVzX2FsbG9jX3Jlc291cmNlX3QoZGV2aWNlX3QgX2Rldiwg ZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX3R5cGUsIGludCAqX3JpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfc3RhcnQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtYW5fcmVzX3QgX2VuZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfY291bnQs IHVfaW50IF9mbGFncyk7CisvKioKKyAqIEBicmllZiBBbGxvY2F0ZSBhIHN5c3RlbSByZXNvdXJj ZQorICoKKyAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBjaGlsZCBkZXZpY2VzIG9mIGEgYnVz IHRvIGFsbG9jYXRlIHJlc291cmNlcy4KKyAqIFRoZSB0eXBlcyBhcmUgZGVmaW5lZCBpbiA8bWFj aGluZS9yZXNvdXJjZS5oPjsgdGhlIG1lYW5pbmcgb2YgdGhlCisgKiByZXNvdXJjZS1JRCBmaWVs ZCB2YXJpZXMgZnJvbSBidXMgdG8gYnVzIChidXQgQHAgKnJpZCA9PSAwIGlzIGFsd2F5cworICog dmFsaWQgaWYgdGhlIHJlc291cmNlIHR5cGUgaXMpLiBJZiBhIHJlc291cmNlIHdhcyBhbGxvY2F0 ZWQgYW5kIHRoZQorICogY2FsbGVyIGRpZCBub3QgdXNlIHRoZSBSRl9BQ1RJVkUgdG8gc3BlY2lm eSB0aGF0IGl0IHNob3VsZCBiZQorICogYWN0aXZhdGVkIGltbWVkaWF0ZWx5LCB0aGUgY2FsbGVy IGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCisgKiBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSB3 aGVuIGl0IGFjdHVhbGx5IHVzZXMgdGhlIHJlc291cmNlLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0 aGUgcGFyZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmlj ZSB3aGljaCBpcyByZXF1ZXN0aW5nIGFuIGFsbG9jYXRpb24KKyAqIEBwYXJhbSBfdHlwZQkJdGhl IHR5cGUgb2YgcmVzb3VyY2UgdG8gYWxsb2NhdGUKKyAqIEBwYXJhbSBfcmlkCQlhIHBvaW50ZXIg dG8gdGhlIHJlc291cmNlIGlkZW50aWZpZXIKKyAqIEBwYXJhbSBfc3RhcnQJaGludCBhdCB0aGUg c3RhcnQgb2YgdGhlIHJlc291cmNlIHJhbmdlIC0gcGFzcworICoJCQlAYyAwIGZvciBhbnkgc3Rh cnQgYWRkcmVzcworICogQHBhcmFtIF9lbmQJCWhpbnQgYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3Vy Y2UgcmFuZ2UgLSBwYXNzCisgKgkJCUBjIH4wIGZvciBhbnkgZW5kIGFkZHJlc3MKKyAqIEBwYXJh bSBfY291bnQJaGludCBhdCB0aGUgc2l6ZSBvZiByYW5nZSByZXF1aXJlZCAtIHBhc3MgQGMgMQor ICoJCQlmb3IgYW55IHNpemUKKyAqIEBwYXJhbSBfZmxhZ3MJYW55IGV4dHJhIGZsYWdzIHRvIGNv bnRyb2wgdGhlIHJlc291cmNlCisgKgkJCWFsbG9jYXRpb24gLSBzZWUgQGMgUkZfWFhYIGZsYWdz IGluCisgKgkJCTxzeXMvcm1hbi5oPiBmb3IgZGV0YWlscworICogCisgKiBAcmV0dXJucwkJdGhl IHJlc291cmNlIHdoaWNoIHdhcyBhbGxvY2F0ZWQgb3IgQGMgTlVMTCBpZiBubworICoJCQlyZXNv dXJjZSBjb3VsZCBiZSBhbGxvY2F0ZWQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IHJl c291cmNlICogQlVTX0FMTE9DX1JFU09VUkNFKGRldmljZV90IF9kZXYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV90IF9jaGlsZCwg aW50IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKl9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJtYW5fcmVzX3QgX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybWFuX3Jlc190IF9lbmQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtYW5fcmVzX3Qg X2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1X2ludCBfZmxhZ3MpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29i al90KV9kZXYpLT5vcHMsYnVzX2FsbG9jX3Jlc291cmNlKTsKKwlyZXR1cm4gKChidXNfYWxsb2Nf cmVzb3VyY2VfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfdHlwZSwgX3JpZCwgX3N0YXJ0LCBfZW5k LCBfY291bnQsIF9mbGFncyk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y IHRoZSBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i am9wX2Rlc2MgYnVzX2FjdGl2YXRlX3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp b24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5 cGVkZWYgaW50IGJ1c19hY3RpdmF0ZV9yZXNvdXJjZV90KGRldmljZV90IF9kZXYsIGRldmljZV90 IF9jaGlsZCwgaW50IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IF9yaWQsIHN0cnVjdCByZXNvdXJjZSAqX3IpOworLyoqCisgKiBAYnJpZWYgQWN0aXZhdGUg YSByZXNvdXJjZQorICoKKyAqIEFjdGl2YXRlIGEgcmVzb3VyY2UgcHJldmlvdXNseSBhbGxvY2F0 ZWQgd2l0aAorICogQlVTX0FMTE9DX1JFU09VUkNFKCkuICBUaGlzIG1heSBlbmFibGUgZGVjb2Rp bmcgb2YgdGhpcyByZXNvdXJjZSBpbiBhCisgKiBkZXZpY2UgZm9yIGluc3RhbmNlLiAgSXQgd2ls bCBhbHNvIGVzdGFibGlzaCBhIG1hcHBpbmcgZm9yIHRoZSByZXNvdXJjZQorICogdW5sZXNzIFJG X1VOTUFQUEVEIHdhcyBzZXQgd2hlbiBhbGxvY2F0aW5nIHRoZSByZXNvdXJjZS4KKyAqCisgKiBA cGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2No aWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF90 eXBlCQl0aGUgdHlwZSBvZiByZXNvdXJjZQorICogQHBhcmFtIF9yaWQJCXRoZSByZXNvdXJjZSBp ZGVudGlmaWVyCisgKiBAcGFyYW0gX3IJCXRoZSByZXNvdXJjZSB0byBhY3RpdmF0ZQorICovCisK K3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0FDVElWQVRFX1JFU09VUkNFKGRldmljZV90IF9kZXYs IGRldmljZV90IF9jaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfdHlwZSwgaW50IF9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKl9yKQoreworCWtvYmpvcF90IF9tOworCUtPQkpP UExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19hY3RpdmF0ZV9yZXNvdXJjZSk7CisJcmV0 dXJuICgoYnVzX2FjdGl2YXRlX3Jlc291cmNlX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX3R5cGUs IF9yaWQsIF9yKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV U19NQVBfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVz X21hcF9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0 aGUgQlVTX01BUF9SRVNPVVJDRSgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX21hcF9yZXNv dXJjZV90KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgaW50IF90eXBlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZSAqX3IsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlX21hcF9yZXF1ZXN0ICpfYXJncywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2VfbWFwICpfbWFw KTsKKy8qKgorICogQGJyaWVmIE1hcCBhIHJlc291cmNlCisgKgorICogQWxsb2NhdGUgYSBtYXBw aW5nIGZvciBhIHJhbmdlIG9mIGFuIGFjdGl2ZSByZXNvdXJjZS4gIFRoZSBtYXBwaW5nCisgKiBp cyBkZXNjcmliZWQgYnkgYSBzdHJ1Y3QgcmVzb3VyY2VfbWFwIG9iamVjdC4gIFRoaXMgbWF5IGZv ciBpbnN0YW5jZQorICogbWFwIGEgbWVtb3J5IHJlZ2lvbiBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0 dWFsIGFkZHJlc3Mgc3BhY2UuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNl IG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRl ZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAq IEBwYXJhbSBfcgkJdGhlIHJlc291cmNlIHRvIG1hcAorICogQHBhcmFtIF9hcmdzCQlvcHRpb25h bCBhdHRyaWJ1dGVzIG9mIHRoZSBtYXBwaW5nCisgKiBAcGFyYW0gX21hcAkJdGhlIG1hcHBpbmcK KyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19NQVBfUkVTT1VSQ0UoZGV2aWNlX3QgX2Rl diwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2VfbWFwX3JlcXVlc3QgKl9hcmdzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZV9tYXAgKl9tYXAp Cit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVz X21hcF9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX21hcF9yZXNvdXJjZV90ICopIF9tKShfZGV2 LCBfY2hpbGQsIF90eXBlLCBfciwgX2FyZ3MsIF9tYXApOworfQorCisvKiogQGJyaWVmIFVuaXF1 ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX1VOTUFQX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRl cm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c191bm1hcF9yZXNvdXJjZV9kZXNjOworLyoqIEBicmll ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1VOTUFQX1JFU09VUkNFKCkgbWV0aG9k ICovCit0eXBlZGVmIGludCBidXNfdW5tYXBfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZp Y2VfdCBfY2hpbGQsIGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCByZXNvdXJjZSAqX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcmVzb3VyY2VfbWFwICpfbWFwKTsKKy8qKgorICogQGJyaWVmIFVubWFwIGEgcmVzb3Vy Y2UKKyAqCisgKiBSZWxlYXNlIGEgbWFwcGluZyBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoCisg KiBCVVNfTUFQX1JFU09VUkNFKCkuIFRoaXMgbWF5IGZvciBpbnN0YW5jZSB1bm1hcCBhIG1lbW9y eSByZWdpb24KKyAqIGZyb20gdGhlIGtlcm5lbCdzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKyAq CisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFy YW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBh cmFtIF90eXBlCQl0aGUgdHlwZSBvZiByZXNvdXJjZQorICogQHBhcmFtIF9yCQl0aGUgcmVzb3Vy Y2UKKyAqIEBwYXJhbSBfbWFwCQl0aGUgbWFwcGluZyB0byByZWxlYXNlCisgKi8KKworc3RhdGlj IF9faW5saW5lIGludCBCVVNfVU5NQVBfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3Qg X2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF90eXBl LCBzdHJ1Y3QgcmVzb3VyY2UgKl9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJlc291cmNlX21hcCAqX21hcCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JK T1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfdW5tYXBfcmVzb3VyY2UpOworCXJldHVy biAoKGJ1c191bm1hcF9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBlLCBfciwg X21hcCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfREVB Q1RJVkFURV9SRVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBi dXNfZGVhY3RpdmF0ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl bWVudGluZyB0aGUgQlVTX0RFQUNUSVZBVEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYg aW50IGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No aWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfcmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKl9yKTsKKy8qKgorICogQGJyaWVmIERlYWN0aXZhdGUg YSByZXNvdXJjZQorICoKKyAqIERlYWN0aXZhdGUgYSByZXNvdXJjZSBwcmV2aW91c2x5IGFsbG9j YXRlZCB3aXRoCisgKiBCVVNfQUxMT0NfUkVTT1VSQ0UoKS4gCisgKgorICogQHBhcmFtIF9kZXYJ CXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2 aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5 cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0aGUgcmVzb3VyY2UgaWRlbnRpZmllcgor ICogQHBhcmFtIF9yCQl0aGUgcmVzb3VyY2UgdG8gZGVhY3RpdmF0ZQorICovCisKK3N0YXRpYyBf X2lubGluZSBpbnQgQlVTX0RFQUNUSVZBVEVfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNl X3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX3R5cGUsIGludCBfcmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKl9yKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExP T0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlKTsKKwlyZXR1 cm4gKChidXNfZGVhY3RpdmF0ZV9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBl LCBfcmlkLCBfcik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBC VVNfQURKVVNUX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj IGJ1c19hZGp1c3RfcmVzb3VyY2VfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1l bnRpbmcgdGhlIEJVU19BREpVU1RfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1 c19hZGp1c3RfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBf dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2Ug Kl9yZXMsIHJtYW5fcmVzX3QgX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJtYW5fcmVzX3QgX2VuZCk7CisvKioKKyAqIEBicmllZiBBZGp1c3QgYSByZXNvdXJjZQor ICoKKyAqIEFkanVzdCB0aGUgc3RhcnQgYW5kL29yIGVuZCBvZiBhIHJlc291cmNlIGFsbG9jYXRl ZCBieQorICogQlVTX0FMTE9DX1JFU09VUkNFLiAgQXQgbGVhc3QgcGFydCBvZiB0aGUgbmV3IGFk ZHJlc3MgcmFuZ2UgbXVzdCBvdmVybGFwCisgKiB3aXRoIHRoZSBleGlzdGluZyBhZGRyZXNzIHJh bmdlLiAgSWYgdGhlIHN1Y2Nlc3NmdWwsIHRoZSByZXNvdXJjZSdzIHJhbmdlCisgKiB3aWxsIGJl IGFkanVzdGVkIHRvIFtzdGFydCwgZW5kXSBvbiByZXR1cm4uCisgKgorICogQHBhcmFtIF9kZXYJ CXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2 aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5 cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmVzCQl0aGUgcmVzb3VyY2UgdG8gYWRqdXN0Cisg KiBAcGFyYW0gX3N0YXJ0CXRoZSBuZXcgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgcmVzb3VyY2Ug cmFuZ2UKKyAqIEBwYXJhbSBfZW5kCQl0aGUgbmV3IGVuZGluZyBhZGRyZXNzIG9mIHRoZSByZXNv dXJjZSByYW5nZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0FESlVTVF9SRVNPVVJD RShkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF90eXBlLCBzdHJ1Y3QgcmVzb3VyY2UgKl9yZXMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfc3RhcnQsIHJt YW5fcmVzX3QgX2VuZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3Qp X2RldiktPm9wcyxidXNfYWRqdXN0X3Jlc291cmNlKTsKKwlyZXR1cm4gKChidXNfYWRqdXN0X3Jl c291cmNlX3QgKikgX20pKF9kZXYsIF9jaGlsZCwgX3R5cGUsIF9yZXMsIF9zdGFydCwgX2VuZCk7 Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfUkVMRUFTRV9S RVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfcmVsZWFz ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg QlVTX1JFTEVBU0VfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19yZWxlYXNl X3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQgX3R5cGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfcmlkLCBzdHJ1Y3QgcmVzb3Vy Y2UgKl9yZXMpOworLyoqCisgKiBAYnJpZWYgUmVsZWFzZSBhIHJlc291cmNlCisgKgorICogRnJl ZSBhIHJlc291cmNlIGFsbG9jYXRlZCBieSB0aGUgQlVTX0FMTE9DX1JFU09VUkNFLiAgVGhlIEBw IF9yaWQKKyAqIHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXR1cm5lZCBieSBC VVNfQUxMT0NfUkVTT1VSQ0UoKQorICogKHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2Ft ZSBhcyB0aGUgb25lIHRoZSBjbGllbnQgcGFzc2VkKS4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhl IHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ug d2hpY2ggYWxsb2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF90eXBlCQl0aGUgdHlwZSBv ZiByZXNvdXJjZQorICogQHBhcmFtIF9yaWQJCXRoZSByZXNvdXJjZSBpZGVudGlmaWVyCisgKiBA cGFyYW0gX3IJCXRoZSByZXNvdXJjZSB0byByZWxlYXNlCisgKi8KKworc3RhdGljIF9faW5saW5l IGludCBCVVNfUkVMRUFTRV9SRVNPVVJDRShkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfdHlwZSwgaW50 IF9yaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBy ZXNvdXJjZSAqX3JlcykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3Qp X2RldiktPm9wcyxidXNfcmVsZWFzZV9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX3JlbGVhc2Vf cmVzb3VyY2VfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfdHlwZSwgX3JpZCwgX3Jlcyk7Cit9CisK Ky8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfU0VUVVBfSU5UUigpIG1l dGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfc2V0dXBfaW50cl9kZXNjOwor LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1NFVFVQX0lOVFIoKSBt ZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19zZXR1cF9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2 aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3Vy Y2UgKl9pcnEsIGludCBfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZl cl9maWx0ZXJfdCAqX2ZpbHRlciwgZHJpdmVyX2ludHJfdCAqX2ludHIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKl9hcmcsIHZvaWQgKipfY29va2llcCk7CisvKioKKyAqIEBi cmllZiBJbnN0YWxsIGFuIGludGVycnVwdCBoYW5kbGVyCisgKgorICogVGhpcyBtZXRob2QgaXMg dXNlZCB0byBhc3NvY2lhdGUgYW4gaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gd2l0aAorICog YW4gaXJxIHJlc291cmNlLiBXaGVuIHRoZSBpbnRlcnJ1cHQgdHJpZ2dlcnMsIHRoZSBmdW5jdGlv biBAcCBfaW50cgorICogd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdmFsdWUgb2YgQHAgX2FyZyBh cyBpdHMgc2luZ2xlCisgKiBhcmd1bWVudC4gVGhlIHZhbHVlIHJldHVybmVkIGluIEBwICpfY29v a2llcCBpcyB1c2VkIHRvIGNhbmNlbCB0aGUKKyAqIGludGVycnVwdCBoYW5kbGVyIC0gdGhlIGNh bGxlciBzaG91bGQgc2F2ZSB0aGlzIHZhbHVlIHRvIHVzZSBpbiBhCisgKiBmdXR1cmUgY2FsbCB0 byBCVVNfVEVBUkRPV05fSU5UUigpLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBk ZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxs b2NhdGVkIHRoZSByZXNvdXJjZQorICogQHBhcmFtIF9pcnEJCXRoZSByZXNvdXJjZSByZXByZXNl bnRpbmcgdGhlIGludGVycnVwdAorICogQHBhcmFtIF9mbGFncwlhIHNldCBvZiBiaXRzIGZyb20g ZW51bSBpbnRyX3R5cGUgc3BlY2lmeWluZworICoJCQl0aGUgY2xhc3Mgb2YgaW50ZXJydXB0Cisg KiBAcGFyYW0gX2ludHIJCXRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGludGVycnVwdAor ICoJCQl0cmlnZ2VycworICogQHBhcmFtIF9hcmcJCWEgdmFsdWUgdG8gdXNlIGFzIHRoZSBzaW5n bGUgYXJndW1lbnQgaW4gY2FsbHMKKyAqCQkJdG8gQHAgX2ludHIKKyAqIEBwYXJhbSBfY29va2ll cAlhIHBvaW50ZXIgdG8gYSBsb2NhdGlvbiB0byByZWNlaXZlIGEgY29va2llCisgKgkJCXZhbHVl IHRoYXQgbWF5IGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSBpbnRlcnJ1cHQKKyAqCQkJaGFuZGxlcgor ICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX1NFVFVQX0lOVFIoZGV2aWNlX3QgX2Rldiwg ZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcmVzb3VyY2UgKl9pcnEsIGludCBfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRyaXZlcl9maWx0ZXJfdCAqX2ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHJpdmVyX2ludHJfdCAqX2ludHIsIHZvaWQgKl9hcmcsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfY29va2llcCkKK3sKKwlrb2Jqb3Bf dCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfc2V0dXBfaW50cik7 CisJcmV0dXJuICgoYnVzX3NldHVwX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJxLCBf ZmxhZ3MsIF9maWx0ZXIsIF9pbnRyLCBfYXJnLCBfY29va2llcCk7Cit9CisKKy8qKiBAYnJpZWYg VW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfVEVBUkRPV05fSU5UUigpIG1ldGhvZCAqLwor ZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfdGVhcmRvd25faW50cl9kZXNjOworLyoqIEBi cmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX1RFQVJET1dOX0lOVFIoKSBtZXRo b2QgKi8KK3R5cGVkZWYgaW50IGJ1c190ZWFyZG93bl9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2 aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVz b3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUpOworLyoqCisgKiBAYnJpZWYgVW5pbnN0YWxsIGFu IGludGVycnVwdCBoYW5kbGVyCisgKgorICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkaXNhc3Nv Y2lhdGUgYW4gaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24KKyAqIHdpdGggYW4gaXJxIHJlc291 cmNlLiBUaGUgdmFsdWUgb2YgQHAgX2Nvb2tpZSBtdXN0IGJlIHRoZSB2YWx1ZQorICogcmV0dXJu ZWQgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gQlVTX1NFVFVQX0lOVFIoKS4KKyAqIAorICogQHBh cmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGls ZAl0aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfaXJx CQl0aGUgcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnJ1cHQKKyAqIEBwYXJhbSBfY29v a2llCXRoZSBjb29raWUgdmFsdWUgcmV0dXJuZWQgd2hlbiB0aGUgaW50ZXJydXB0CisgKgkJCXdh cyBvcmlnaW5hbGx5IHJlZ2lzdGVyZWQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19U RUFSRE9XTl9JTlRSKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfaXJxLCB2b2lkICpf Y29va2llKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+ b3BzLGJ1c190ZWFyZG93bl9pbnRyKTsKKwlyZXR1cm4gKChidXNfdGVhcmRvd25faW50cl90ICop IF9tKShfZGV2LCBfY2hpbGQsIF9pcnEsIF9jb29raWUpOworfQorCisvKiogQGJyaWVmIFVuaXF1 ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX1NFVF9SRVNPVVJDRSgpIG1ldGhvZCAqLworZXh0ZXJu IHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfc2V0X3Jlc291cmNlX2Rlc2M7CisvKiogQGJyaWVmIEEg ZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfU0VUX1JFU09VUkNFKCkgbWV0aG9kICovCit0 eXBlZGVmIGludCBidXNfc2V0X3Jlc291cmNlX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No aWxkLCBpbnQgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9yaWQs IHJtYW5fcmVzX3QgX3N0YXJ0LCBybWFuX3Jlc190IF9jb3VudCk7CisvKioKKyAqIEBicmllZiBE ZWZpbmUgYSByZXNvdXJjZSB3aGljaCBjYW4gYmUgYWxsb2NhdGVkIHdpdGgKKyAqIEJVU19BTExP Q19SRVNPVVJDRSgpLgorICoKKyAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgc29tZSBidXNzZXMg KHR5cGljYWxseSBJU0EpIHRvIGFsbG93IGEKKyAqIGRyaXZlciB0byBkZXNjcmliZSBhIHJlc291 cmNlIHJhbmdlIHRoYXQgaXQgd291bGQgbGlrZSB0bworICogYWxsb2NhdGUuIFRoZSByZXNvdXJj ZSBkZWZpbmVkIGJ5IEBwIF90eXBlIGFuZCBAcCBfcmlkIGlzIGRlZmluZWQKKyAqIHRvIHN0YXJ0 IGF0IEBwIF9zdGFydCBhbmQgdG8gaW5jbHVkZSBAcCBfY291bnQgaW5kaWNlcyBpbiBpdHMKKyAq IHJhbmdlLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2No aWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3VyY2UK KyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0 aGUgcmVzb3VyY2UgaWRlbnRpZmllcgorICogQHBhcmFtIF9zdGFydAl0aGUgc3RhcnQgb2YgdGhl IHJlc291cmNlIHJhbmdlCisgKiBAcGFyYW0gX2NvdW50CXRoZSBzaXplIG9mIHRoZSByZXNvdXJj ZSByYW5nZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX1NFVF9SRVNPVVJDRShkZXZp Y2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX3JpZCwgcm1hbl9yZXNfdCBfc3RhcnQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1hbl9yZXNfdCBfY291bnQpCit7CisJa29i am9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX3NldF9yZXNv dXJjZSk7CisJcmV0dXJuICgoYnVzX3NldF9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQs IF90eXBlLCBfcmlkLCBfc3RhcnQsIF9jb3VudCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRl c2NyaXB0b3IgZm9yIHRoZSBCVVNfR0VUX1JFU09VUkNFKCkgbWV0aG9kICovCitleHRlcm4gc3Ry dWN0IGtvYmpvcF9kZXNjIGJ1c19nZXRfcmVzb3VyY2VfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19HRVRfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK3R5cGVk ZWYgaW50IGJ1c19nZXRfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQs IGludCBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3JpZCwgcm1h bl9yZXNfdCAqX3N0YXJ0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybWFuX3Jl c190ICpfY291bnRwKTsKKy8qKgorICogQGJyaWVmIERlc2NyaWJlIGEgcmVzb3VyY2UKKyAqCisg KiBUaGlzIG1ldGhvZCBhbGxvd3MgYSBkcml2ZXIgdG8gZXhhbWluZSB0aGUgcmFuZ2UgdXNlZCBm b3IgYSBnaXZlbgorICogcmVzb3VyY2Ugd2l0aG91dCBhY3R1YWxseSBhbGxvY2F0aW5nIGl0Lgor ICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBA cGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3VyY2UKKyAqIEBwYXJh bSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlkCQl0aGUgcmVzb3Vy Y2UgaWRlbnRpZmllcgorICogQHBhcmFtIF9zdGFydAl0aGUgYWRkcmVzcyBvZiBhIGxvY2F0aW9u IHRvIHJlY2VpdmUgdGhlIHN0YXJ0CisgKgkJCWluZGV4IG9mIHRoZSByZXNvdXJjZSByYW5nZQor ICogQHBhcmFtIF9jb3VudAl0aGUgYWRkcmVzcyBvZiBhIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhl IHNpemUKKyAqCQkJb2YgdGhlIHJlc291cmNlIHJhbmdlCisgKi8KKworc3RhdGljIF9faW5saW5l IGludCBCVVNfR0VUX1JFU09VUkNFKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgaW50 IF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfcmlkLCBy bWFuX3Jlc190ICpfc3RhcnRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJtYW5fcmVzX3QgKl9jb3VudHApCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgo a29ial90KV9kZXYpLT5vcHMsYnVzX2dldF9yZXNvdXJjZSk7CisJcmV0dXJuICgoYnVzX2dldF9y ZXNvdXJjZV90ICopIF9tKShfZGV2LCBfY2hpbGQsIF90eXBlLCBfcmlkLCBfc3RhcnRwLCBfY291 bnRwKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19ERUxF VEVfUkVTT1VSQ0UoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVzX2Rl bGV0ZV9yZXNvdXJjZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0 aGUgQlVTX0RFTEVURV9SRVNPVVJDRSgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGJ1c19kZWxl dGVfcmVzb3VyY2VfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCBfdHlwZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9yaWQpOworLyoqCisgKiBA YnJpZWYgRGVsZXRlIGEgcmVzb3VyY2UuCisgKiAKKyAqIFVzZSB0aGlzIHRvIGRlbGV0ZSBhIHJl c291cmNlIChwb3NzaWJseSBvbmUgcHJldmlvdXNseSBhZGRlZCB3aXRoCisgKiBCVVNfU0VUX1JF U09VUkNFKCkpLgorICogCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAg X2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggb3ducyB0aGUgcmVzb3Vy Y2UKKyAqIEBwYXJhbSBfdHlwZQkJdGhlIHR5cGUgb2YgcmVzb3VyY2UKKyAqIEBwYXJhbSBfcmlk CQl0aGUgcmVzb3VyY2UgaWRlbnRpZmllcgorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJV U19ERUxFVEVfUkVTT1VSQ0UoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX3R5cGUsIGludCBfcmlkKQor eworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19k ZWxldGVfcmVzb3VyY2UpOworCSgoYnVzX2RlbGV0ZV9yZXNvdXJjZV90ICopIF9tKShfZGV2LCBf Y2hpbGQsIF90eXBlLCBfcmlkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm b3IgdGhlIEJVU19HRVRfUkVTT1VSQ0VfTElTVCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBr b2Jqb3BfZGVzYyBidXNfZ2V0X3Jlc291cmNlX2xpc3RfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19HRVRfUkVTT1VSQ0VfTElTVCgpIG1ldGhvZCAqLwor dHlwZWRlZiBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqIGJ1c19nZXRfcmVzb3VyY2VfbGlzdF90KGRl dmljZV90IF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGV2aWNlX3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIFJldHVybiBhIHN0 cnVjdCByZXNvdXJjZV9saXN0LgorICoKKyAqIFVzZWQgYnkgZHJpdmVycyB3aGljaCB1c2UgYnVz X2dlbmVyaWNfcmxfYWxsb2NfcmVzb3VyY2UoKSBldGMuIHRvCisgKiBpbXBsZW1lbnQgdGhlaXIg cmVzb3VyY2UgaGFuZGxpbmcuIEl0IHNob3VsZCByZXR1cm4gdGhlIHJlc291cmNlCisgKiBsaXN0 IG9mIHRoZSBnaXZlbiBjaGlsZCBkZXZpY2UuCisgKiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFy ZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB3aGlj aCBvd25zIHRoZSByZXNvdXJjZSBsaXN0CisgKi8KKworc3RhdGljIF9faW5saW5lIHN0cnVjdCBy ZXNvdXJjZV9saXN0ICogQlVTX0dFVF9SRVNPVVJDRV9MSVNUKGRldmljZV90IF9kZXYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGV2aWNlX3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpf dClfZGV2KS0+b3BzLGJ1c19nZXRfcmVzb3VyY2VfbGlzdCk7CisJcmV0dXJuICgoYnVzX2dldF9y ZXNvdXJjZV9saXN0X3QgKikgX20pKF9kZXYsIF9jaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5p cXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfQ0hJTERfUFJFU0VOVCgpIG1ldGhvZCAqLworZXh0 ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfY2hpbGRfcHJlc2VudF9kZXNjOworLyoqIEBicmll ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0NISUxEX1BSRVNFTlQoKSBtZXRob2Qg Ki8KK3R5cGVkZWYgaW50IGJ1c19jaGlsZF9wcmVzZW50X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNl X3QgX2NoaWxkKTsKKy8qKgorICogQGJyaWVmIElzIHRoZSBoYXJkd2FyZSBkZXNjcmliZWQgYnkg QHAgX2NoaWxkIHN0aWxsIGF0dGFjaGVkIHRvIHRoZQorICogc3lzdGVtPworICoKKyAqIFRoaXMg bWV0aG9kIHNob3VsZCByZXR1cm4gMCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50LiAgSXQK KyAqIHNob3VsZCByZXR1cm4gLTEgaWYgaXQgaXMgcHJlc2VudC4gIEFueSBlcnJvcnMgaW4gZGV0 ZXJtaW5pbmcKKyAqIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhIG5vcm1hbCBlcnJubyB2YWx1ZS4g IENsaWVudCBkcml2ZXJzIGFyZSB0bworICogYXNzdW1lIHRoYXQgdGhlIGRldmljZSBpcyBwcmVz ZW50LCBldmVuIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgKiBkZXRlcm1pbmluZyBpZiBpdCBpcyB0 aGVyZS4gIEJ1c3NlcyBhcmUgdG8gdHJ5IHRvIGF2b2lkIHJldHVybmluZworICogZXJyb3JzLCBi dXQgbmV3Y2FyZCB3aWxsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgZGV2aWNlIGZhaWxzIHRvCisg KiBpbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgKiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50 IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB3aGljaCBp cyBiZWluZyBleGFtaW5lZAorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NISUxEX1BS RVNFTlQoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOwor CUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2KS0+b3BzLGJ1c19jaGlsZF9wcmVzZW50KTsKKwly ZXR1cm4gKChidXNfY2hpbGRfcHJlc2VudF90ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisv KiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0NISUxEX1BOUElORk9fU1RS KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19jaGlsZF9wbnBpbmZv X3N0cl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0NI SUxEX1BOUElORk9fU1RSKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBidXNfY2hpbGRfcG5waW5m b19zdHJfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGNoYXIgKl9idWYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX2J1Zmxlbik7CisvKioKKyAq IEBicmllZiBSZXR1cm5zIHRoZSBwbnAgaW5mbyBmb3IgdGhpcyBkZXZpY2UuCisgKgorICogUmV0 dXJuIGl0IGFzIGEgc3RyaW5nLiAgSWYgdGhlIHN0b3JhZ2UgaXMgaW5zdWZmaWNpZW50IGZvciB0 aGUKKyAqIHN0cmluZywgdGhlbiByZXR1cm4gRU9WRVJGTE9XLgorICoKKyAqIFRoZSBzdHJpbmcg bXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgorICogbmFtZT12 YWx1ZSBwYWlycy4gIE5hbWVzIG1heSBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3Rl cnMsCisgKiB1bmRlcnNjb3JlcyAoJ18nKSBhbmQgaHlwaGVucyAoJy0nKS4gIFZhbHVlcyBjYW4g Y29udGFpbiBhbnkKKyAqIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBWYWx1ZXMgY29udGFp bmluZyB3aGl0ZXNwYWNlIGNhbiBiZQorICogcXVvdGVkIHdpdGggZG91YmxlIHF1b3RlcyAoJyIn KS4gIERvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIGluCisgKiBxdW90ZWQgdmFsdWVzIGNh biBiZSBlc2NhcGVkIHdpdGggYmFja3NsYXNoZXMgKCdcJykuCisgKiAKKyAqIEBwYXJhbSBfZGV2 CQl0aGUgcGFyZW50IGRldmljZSBvZiBAcCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRl dmljZSB3aGljaCBpcyBiZWluZyBleGFtaW5lZAorICogQHBhcmFtIF9idWYJCXRoZSBhZGRyZXNz IG9mIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBucAorICoJCQlzdHJpbmcKKyAqIEBwYXJhbSBf YnVmbGVuCXRoZSBzaXplIG9mIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAcCBfYnVmCisgKi8K Kworc3RhdGljIF9faW5saW5lIGludCBCVVNfQ0hJTERfUE5QSU5GT19TVFIoZGV2aWNlX3QgX2Rl diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqX2J1Ziwgc2l6ZV90IF9idWZsZW4pCit7CisJa29iam9wX3QgX207CisJS09C Sk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2NoaWxkX3BucGluZm9fc3RyKTsKKwly ZXR1cm4gKChidXNfY2hpbGRfcG5waW5mb19zdHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfYnVm LCBfYnVmbGVuKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJV U19DSElMRF9MT0NBVElPTl9TVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl c2MgYnVzX2NoaWxkX2xvY2F0aW9uX3N0cl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGlt cGxlbWVudGluZyB0aGUgQlVTX0NISUxEX0xPQ0FUSU9OX1NUUigpIG1ldGhvZCAqLwordHlwZWRl ZiBpbnQgYnVzX2NoaWxkX2xvY2F0aW9uX3N0cl90KGRldmljZV90IF9kZXYsIGRldmljZV90IF9j aGlsZCwgY2hhciAqX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX2J1Zmxlbik7CisvKioKKyAqIEBicmllZiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBmb3Ig dGhpcyBkZXZpY2UuCisgKgorICogUmV0dXJuIGl0IGFzIGEgc3RyaW5nLiAgSWYgdGhlIHN0b3Jh Z2UgaXMgaW5zdWZmaWNpZW50IGZvciB0aGUKKyAqIHN0cmluZywgdGhlbiByZXR1cm4gRU9WRVJG TE9XLgorICoKKyAqIFRoZSBzdHJpbmcgbXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBzcGFjZS1zZXBh cmF0ZWQgbGlzdCBvZgorICogbmFtZT12YWx1ZSBwYWlycy4gIE5hbWVzIG1heSBvbmx5IGNvbnRh aW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsCisgKiB1bmRlcnNjb3JlcyAoJ18nKSBhbmQgaHlw aGVucyAoJy0nKS4gIFZhbHVlcyBjYW4gY29udGFpbiBhbnkKKyAqIG5vbi13aGl0ZXNwYWNlIGNo YXJhY3RlcnMuICBWYWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNhbiBiZQorICogcXVvdGVk IHdpdGggZG91YmxlIHF1b3RlcyAoJyInKS4gIERvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVz IGluCisgKiBxdW90ZWQgdmFsdWVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYmFja3NsYXNoZXMgKCdc JykuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAor ICogQHBhcmFtIF9jaGlsZAl0aGUgZGV2aWNlIHdoaWNoIGlzIGJlaW5nIGV4YW1pbmVkCisgKiBA cGFyYW0gX2J1ZgkJdGhlIGFkZHJlc3Mgb2YgYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgbG9jYXRp b24KKyAqCQkJc3RyaW5nCisgKiBAcGFyYW0gX2J1Zmxlbgl0aGUgc2l6ZSBvZiB0aGUgYnVmZmVy IHBvaW50ZWQgdG8gYnkgQHAgX2J1ZgorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NI SUxEX0xPQ0FUSU9OX1NUUihkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX2J1Ziwgc2l6ZV90IF9i dWZsZW4pCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5v cHMsYnVzX2NoaWxkX2xvY2F0aW9uX3N0cik7CisJcmV0dXJuICgoYnVzX2NoaWxkX2xvY2F0aW9u X3N0cl90ICopIF9tKShfZGV2LCBfY2hpbGQsIF9idWYsIF9idWZsZW4pOworfQorCisvKiogQGJy aWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0JJTkRfSU5UUigpIG1ldGhvZCAqLwor ZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfYmluZF9pbnRyX2Rlc2M7CisvKiogQGJyaWVm IEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfQklORF9JTlRSKCkgbWV0aG9kICovCit0 eXBlZGVmIGludCBidXNfYmluZF9pbnRyX3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZXNvdXJjZSAqX2lycSwgaW50 IF9jcHUpOworLyoqCisgKiBAYnJpZWYgQWxsb3cgZHJpdmVycyB0byByZXF1ZXN0IHRoYXQgYW4g aW50ZXJydXB0IGJlIGJvdW5kIHRvIGEgc3BlY2lmaWMKKyAqIENQVS4KKyAqIAorICogQHBhcmFt IF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0 aGUgZGV2aWNlIHdoaWNoIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2UKKyAqIEBwYXJhbSBfaXJxCQl0 aGUgcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnJ1cHQKKyAqIEBwYXJhbSBfY3B1CQl0 aGUgQ1BVIHRvIGJpbmQgdGhlIGludGVycnVwdCB0bworICovCisKK3N0YXRpYyBfX2lubGluZSBp bnQgQlVTX0JJTkRfSU5UUihkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpfaXJxLCBpbnQgX2Nw dSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxi dXNfYmluZF9pbnRyKTsKKwlyZXR1cm4gKChidXNfYmluZF9pbnRyX3QgKikgX20pKF9kZXYsIF9j aGlsZCwgX2lycSwgX2NwdSk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y IHRoZSBCVVNfQ09ORklHX0lOVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl c2MgYnVzX2NvbmZpZ19pbnRyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50 aW5nIHRoZSBCVVNfQ09ORklHX0lOVFIoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19jb25m aWdfaW50cl90KGRldmljZV90IF9kZXYsIGludCBfaXJxLCBlbnVtIGludHJfdHJpZ2dlciBfdHJp ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gaW50cl9wb2xhcml0eSBfcG9s KTsKKy8qKgorICogQGJyaWVmIEFsbG93IChidXMpIGRyaXZlcnMgdG8gc3BlY2lmeSB0aGUgdHJp Z2dlciBtb2RlIGFuZCBwb2xhcml0eQorICogb2YgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisg KiAKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9pcnEJCXRoZSBp bnRlcnJ1cHQgbnVtYmVyIHRvIG1vZGlmeQorICogQHBhcmFtIF90cmlnCQl0aGUgdHJpZ2dlciBt b2RlIHJlcXVpcmVkCisgKiBAcGFyYW0gX3BvbAkJdGhlIGludGVycnVwdCBwb2xhcml0eSByZXF1 aXJlZAorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0NPTkZJR19JTlRSKGRldmljZV90 IF9kZXYsIGludCBfaXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBpbnRyX3RyaWdnZXIgX3RyaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbnVtIGludHJfcG9sYXJpdHkgX3BvbCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfY29uZmlnX2ludHIpOworCXJldHVybiAoKGJ1c19j b25maWdfaW50cl90ICopIF9tKShfZGV2LCBfaXJxLCBfdHJpZywgX3BvbCk7Cit9CisKKy8qKiBA YnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBCVVNfREVTQ1JJQkVfSU5UUigpIG1ldGhv ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfZGVzY3JpYmVfaW50cl9kZXNjOwor LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0RFU0NSSUJFX0lOVFIo KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19kZXNjcmliZV9pbnRyX3QoZGV2aWNlX3QgX2Rl diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcmVzb3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKl9kZXNjcik7CisvKioKKyAqIEBicmllZiBBbGxvdyBkcml2 ZXJzIHRvIGFzc29jaWF0ZSBhIGRlc2NyaXB0aW9uIHdpdGggYW4gYWN0aXZlCisgKiBpbnRlcnJ1 cHQgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhlIHBhcmVudCBkZXZpY2Ugb2YgQHAg X2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ugd2hpY2ggYWxsb2NhdGVkIHRoZSBy ZXNvdXJjZQorICogQHBhcmFtIF9pcnEJCXRoZSByZXNvdXJjZSByZXByZXNlbnRpbmcgdGhlIGlu dGVycnVwdAorICogQHBhcmFtIF9jb29raWUJdGhlIGNvb2tpZSB2YWx1ZSByZXR1cm5lZCB3aGVu IHRoZSBpbnRlcnJ1cHQKKyAqCQkJd2FzIG9yaWdpbmFsbHkgcmVnaXN0ZXJlZAorICogQHBhcmFt IF9kZXNjcgl0aGUgZGVzY3JpcHRpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGludGVycnVwdAor ICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgQlVTX0RFU0NSSUJFX0lOVFIoZGV2aWNlX3QgX2Rl diwgZGV2aWNlX3QgX2NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgcmVzb3VyY2UgKl9pcnEsIHZvaWQgKl9jb29raWUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9kZXNjcikKK3sKKwlrb2Jqb3BfdCBf bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZGVzY3JpYmVfaW50cik7 CisJcmV0dXJuICgoYnVzX2Rlc2NyaWJlX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJx LCBfY29va2llLCBfZGVzY3IpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZv ciB0aGUgQlVTX0hJTlRFRF9DSElMRCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3Bf ZGVzYyBidXNfaGludGVkX2NoaWxkX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVt ZW50aW5nIHRoZSBCVVNfSElOVEVEX0NISUxEKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgYnVz X2hpbnRlZF9jaGlsZF90KGRldmljZV90IF9kZXYsIGNvbnN0IGNoYXIgKl9kbmFtZSwgaW50IF9k dW5pdCk7CisvKioKKyAqIEBicmllZiBOb3RpZnkgYSAoYnVzKSBkcml2ZXIgYWJvdXQgYSBjaGls ZCB0aGF0IHRoZSBoaW50cyBtZWNoYW5pc20KKyAqIGJlbGlldmVzIGl0IGhhcyBkaXNjb3ZlcmVk LgorICoKKyAqIFRoZSBidXMgaXMgcmVzcG9uc2libGUgZm9yIHRoZW4gYWRkaW5nIHRoZSBjaGls ZCBpbiB0aGUgcmlnaHQgb3JkZXIKKyAqIGFuZCBkaXNjb3ZlcmluZyBvdGhlciB0aGluZ3MgYWJv dXQgdGhlIGNoaWxkLiAgVGhlIGJ1cyBkcml2ZXIgaXMKKyAqIGZyZWUgdG8gaWdub3JlIHRoaXMg aGludCwgdG8gZG8gc3BlY2lhbCB0aGluZ3MsIGV0Yy4gIEl0IGlzIGFsbCB1cAorICogdG8gdGhl IGJ1cyBkcml2ZXIgdG8gaW50ZXJwcmV0LgorICoKKyAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2Fs bGVkIGluIHJlc3BvbnNlIHRvIHRoZSBwYXJlbnQgYnVzIGFza2luZyBmb3IKKyAqIGhpbnRlZCBk ZXZpY2VzIHRvIGJlIGVudW1lcmF0ZWQuCisgKgorICogQHBhcmFtIF9kZXYJCXRoZSBidXMgZGV2 aWNlCisgKiBAcGFyYW0gX2RuYW1lCXRoZSBuYW1lIG9mIHRoZSBkZXZpY2Ugdy9vIHVuaXQgbnVt YmVycworICogQHBhcmFtIF9kdW5pdAl0aGUgdW5pdCBudW1iZXIgb2YgdGhlIGRldmljZQorICov CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIEJVU19ISU5URURfQ0hJTEQoZGV2aWNlX3QgX2Rldiwg Y29uc3QgY2hhciAqX2RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX2R1bml0KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClf ZGV2KS0+b3BzLGJ1c19oaW50ZWRfY2hpbGQpOworCSgoYnVzX2hpbnRlZF9jaGlsZF90ICopIF9t KShfZGV2LCBfZG5hbWUsIF9kdW5pdCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0 b3IgZm9yIHRoZSBCVVNfR0VUX0RNQV9UQUcoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i am9wX2Rlc2MgYnVzX2dldF9kbWFfdGFnX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1w bGVtZW50aW5nIHRoZSBCVVNfR0VUX0RNQV9UQUcoKSBtZXRob2QgKi8KK3R5cGVkZWYgYnVzX2Rt YV90YWdfdCBidXNfZ2V0X2RtYV90YWdfdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQp OworLyoqCisgKiBAYnJpZWYgUmV0dXJucyBidXNfZG1hX3RhZ190IGZvciB1c2Ugdy8gZGV2aWNl cyBvbiB0aGUgYnVzLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50IGRldmljZSBvZiBA cCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB0byB3aGljaCB0aGUgdGFnIHdp bGwgYmVsb25nCisgKi8KKworc3RhdGljIF9faW5saW5lIGJ1c19kbWFfdGFnX3QgQlVTX0dFVF9E TUFfVEFHKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsK KwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfZ2V0X2RtYV90YWcpOworCXJl dHVybiAoKGJ1c19nZXRfZG1hX3RhZ190ICopIF9tKShfZGV2LCBfY2hpbGQpOworfQorCisvKiog QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgQlVTX0dFVF9CVVNfVEFHKCkgbWV0aG9k ICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19nZXRfYnVzX3RhZ19kZXNjOworLyoq IEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVTX0dFVF9CVVNfVEFHKCkgbWV0 aG9kICovCit0eXBlZGVmIGJ1c19zcGFjZV90YWdfdCBidXNfZ2V0X2J1c190YWdfdChkZXZpY2Vf dCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQpOworLyoqCisgKiBAYnJpZWYgUmV0dXJucyBidXNfc3Bh Y2VfdGFnX3QgZm9yIHVzZSB3LyBkZXZpY2VzIG9uIHRoZSBidXMuCisgKgorICogQHBhcmFtIF9k ZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFtIF9jaGlsZAl0aGUg ZGV2aWNlIHRvIHdoaWNoIHRoZSB0YWcgd2lsbCBiZWxvbmcKKyAqLworCitzdGF0aWMgX19pbmxp bmUgYnVzX3NwYWNlX3RhZ190IEJVU19HRVRfQlVTX1RBRyhkZXZpY2VfdCBfZGV2LCBkZXZpY2Vf dCBfY2hpbGQpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYp LT5vcHMsYnVzX2dldF9idXNfdGFnKTsKKwlyZXR1cm4gKChidXNfZ2V0X2J1c190YWdfdCAqKSBf bSkoX2RldiwgX2NoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3Ig dGhlIEJVU19ISU5UX0RFVklDRV9VTklUKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpv cF9kZXNjIGJ1c19oaW50X2RldmljZV91bml0X2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24g aW1wbGVtZW50aW5nIHRoZSBCVVNfSElOVF9ERVZJQ0VfVU5JVCgpIG1ldGhvZCAqLwordHlwZWRl ZiB2b2lkIGJ1c19oaW50X2RldmljZV91bml0X3QoZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2No aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX25h bWUsIGludCAqX3VuaXRwKTsKKy8qKgorICogQGJyaWVmIEFsbG93IHRoZSBidXMgdG8gZGV0ZXJt aW5lIHRoZSB1bml0IG51bWJlciBvZiBhIGRldmljZS4KKyAqCisgKiBAcGFyYW0gX2RldgkJdGhl IHBhcmVudCBkZXZpY2Ugb2YgQHAgX2NoaWxkCisgKiBAcGFyYW0gX2NoaWxkCXRoZSBkZXZpY2Ug d2hvc2UgdW5pdCBpcyB0byBiZSB3aXJlZAorICogQHBhcmFtIF9uYW1lCQl0aGUgbmFtZSBvZiB0 aGUgZGV2aWNlJ3MgbmV3IGRldmNsYXNzCisgKiBAcGFyYW0gX3VuaXRwCWEgcG9pbnRlciB0byB0 aGUgZGV2aWNlJ3MgbmV3IHVuaXQgdmFsdWUKKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBC VVNfSElOVF9ERVZJQ0VfVU5JVChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfbmFtZSwg aW50ICpfdW5pdHApCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9k ZXYpLT5vcHMsYnVzX2hpbnRfZGV2aWNlX3VuaXQpOworCSgoYnVzX2hpbnRfZGV2aWNlX3VuaXRf dCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfbmFtZSwgX3VuaXRwKTsKK30KKworLyoqIEBicmllZiBV bmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19ORVdfUEFTUygpIG1ldGhvZCAqLworZXh0ZXJu IHN0cnVjdCBrb2Jqb3BfZGVzYyBidXNfbmV3X3Bhc3NfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5j dGlvbiBpbXBsZW1lbnRpbmcgdGhlIEJVU19ORVdfUEFTUygpIG1ldGhvZCAqLwordHlwZWRlZiB2 b2lkIGJ1c19uZXdfcGFzc190KGRldmljZV90IF9kZXYpOworLyoqCisgKiBAYnJpZWYgTm90aWZ5 IGEgYnVzIHRoYXQgdGhlIGJ1cyBwYXNzIGxldmVsIGhhcyBiZWVuIGNoYW5nZWQKKyAqCisgKiBA cGFyYW0gX2RldgkJdGhlIGJ1cyBkZXZpY2UKKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBC VVNfTkVXX1BBU1MoZGV2aWNlX3QgX2RldikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfbmV3X3Bhc3MpOworCSgoYnVzX25ld19wYXNzX3Qg KikgX20pKF9kZXYpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUg QlVTX1JFTUFQX0lOVFIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVz X3JlbWFwX2ludHJfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl IEJVU19SRU1BUF9JTlRSKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBidXNfcmVtYXBfaW50cl90 KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgdV9pbnQgX2lycSk7CisvKioKKyAqIEBi cmllZiBOb3RpZnkgYSBidXMgdGhhdCBzcGVjaWZpZWQgY2hpbGQncyBJUlEgc2hvdWxkIGJlIHJl bWFwcGVkLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9j aGlsZAl0aGUgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX2lycQkJdGhlIGlycSBudW1iZXIKKyAq LworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19SRU1BUF9JTlRSKGRldmljZV90IF9kZXYsIGRl dmljZV90IF9jaGlsZCwgdV9pbnQgX2lycSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L VVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfcmVtYXBfaW50cik7CisJcmV0dXJuICgoYnVzX3Jl bWFwX2ludHJfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfaXJxKTsKK30KKworLyoqIEBicmllZiBV bmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19TVVNQRU5EX0NISUxEKCkgbWV0aG9kICovCitl eHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGJ1c19zdXNwZW5kX2NoaWxkX2Rlc2M7CisvKiogQGJy aWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBCVVNfU1VTUEVORF9DSElMRCgpIG1ldGhv ZCAqLwordHlwZWRlZiBpbnQgYnVzX3N1c3BlbmRfY2hpbGRfdChkZXZpY2VfdCBfZGV2LCBkZXZp Y2VfdCBfY2hpbGQpOworLyoqCisgKiBAYnJpZWYgU3VzcGVuZCBhIGdpdmVuIGNoaWxkCisgKgor ICogQHBhcmFtIF9kZXYJCXRoZSBwYXJlbnQgZGV2aWNlIG9mIEBwIF9jaGlsZAorICogQHBhcmFt IF9jaGlsZAl0aGUgZGV2aWNlIHRvIHN1c3BlbmQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50 IEJVU19TVVNQRU5EX0NISUxEKGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCkKK3sKKwlr b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpX2RldiktPm9wcyxidXNfc3VzcGVu ZF9jaGlsZCk7CisJcmV0dXJuICgoYnVzX3N1c3BlbmRfY2hpbGRfdCAqKSBfbSkoX2RldiwgX2No aWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIEJVU19SRVNV TUVfQ0hJTEQoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgYnVzX3Jlc3Vt ZV9jaGlsZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgQlVT X1JFU1VNRV9DSElMRCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX3Jlc3VtZV9jaGlsZF90 KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCk7CisvKioKKyAqIEBicmllZiBSZXN1bWUg YSBnaXZlbiBjaGlsZAorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgcGFyZW50IGRldmljZSBvZiBA cCBfY2hpbGQKKyAqIEBwYXJhbSBfY2hpbGQJdGhlIGRldmljZSB0byByZXN1bWUKKyAqLworCitz dGF0aWMgX19pbmxpbmUgaW50IEJVU19SRVNVTUVfQ0hJTEQoZGV2aWNlX3QgX2RldiwgZGV2aWNl X3QgX2NoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClfZGV2 KS0+b3BzLGJ1c19yZXN1bWVfY2hpbGQpOworCXJldHVybiAoKGJ1c19yZXN1bWVfY2hpbGRfdCAq KSBfbSkoX2RldiwgX2NoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm b3IgdGhlIEJVU19HRVRfRE9NQUlOKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9k ZXNjIGJ1c19nZXRfZG9tYWluX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50 aW5nIHRoZSBCVVNfR0VUX0RPTUFJTigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgYnVzX2dldF9k b21haW5fdChkZXZpY2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsIGludCAqX2RvbWFpbik7Cisv KioKKyAqIEBicmllZiBHZXQgdGhlIFZNIGRvbWFpbiBoYW5kbGUgZm9yIHRoZSBnaXZlbiBidXMg YW5kIGNoaWxkLgorICoKKyAqIEBwYXJhbSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFt IF9jaGlsZAl0aGUgY2hpbGQgZGV2aWNlCisgKiBAcGFyYW0gX2RvbWFpbglhIHBvaW50ZXIgdG8g dGhlIGJ1cydzIGRvbWFpbiBoYW5kbGUgaWRlbnRpZmllcgorICovCisKK3N0YXRpYyBfX2lubGlu ZSBpbnQgQlVTX0dFVF9ET01BSU4oZGV2aWNlX3QgX2RldiwgZGV2aWNlX3QgX2NoaWxkLCBpbnQg Kl9kb21haW4pCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYp LT5vcHMsYnVzX2dldF9kb21haW4pOworCXJldHVybiAoKGJ1c19nZXRfZG9tYWluX3QgKikgX20p KF9kZXYsIF9jaGlsZCwgX2RvbWFpbik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0 b3IgZm9yIHRoZSBCVVNfR0VUX0NQVVMoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9w X2Rlc2MgYnVzX2dldF9jcHVzX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50 aW5nIHRoZSBCVVNfR0VUX0NQVVMoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGJ1c19nZXRfY3B1 c190KGRldmljZV90IF9kZXYsIGRldmljZV90IF9jaGlsZCwgZW51bSBjcHVfc2V0cyBfb3AsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX3NldHNpemUsIGNwdXNldF90ICpfY3B1 c2V0KTsKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgYSBzZXQgb2YgQ1BVcworICoKKyAqIEBwYXJh bSBfZGV2CQl0aGUgYnVzIGRldmljZQorICogQHBhcmFtIF9jaGlsZAl0aGUgY2hpbGQgZGV2aWNl CisgKiBAcGFyYW0gX29wCQl0eXBlIG9mIENQVXMgdG8gcmVxdWVzdAorICogQHBhcmFtIF9zZXRz aXplCXRoZSBzaXplIG9mIHRoZSBzZXQgcGFzc2VkIGluIF9jcHVzZXQKKyAqIEBwYXJhbSBfY3B1 c2V0CWEgcG9pbnRlciB0byBhIGNwdXNldCB0byByZWNlaXZlIHRoZSByZXF1ZXN0ZWQKKyAqCQkJ c2V0IG9mIENQVXMKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IEJVU19HRVRfQ1BVUyhkZXZp Y2VfdCBfZGV2LCBkZXZpY2VfdCBfY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIGNwdV9zZXRzIF9vcCwgc2l6ZV90IF9zZXRzaXplLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3B1c2V0X3QgKl9jcHVzZXQpCit7CisJa29iam9wX3QgX207CisJ S09CSk9QTE9PS1VQKCgoa29ial90KV9kZXYpLT5vcHMsYnVzX2dldF9jcHVzKTsKKwlyZXR1cm4g KChidXNfZ2V0X2NwdXNfdCAqKSBfbSkoX2RldiwgX2NoaWxkLCBfb3AsIF9zZXRzaXplLCBfY3B1 c2V0KTsKK30KKworI2VuZGlmIC8qIF9idXNfaWZfaF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9kZXZpY2VfaWYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvZGV2aWNlX2lmLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL2RldmljZV9pZi5o CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9k dWxlcy9uZXRtYXAvZGV2aWNlX2lmLmgJMjAxNi0xMS0yMyAxNzowNTozMy44MTMwNTYwMDAgKzAw MDAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcHJvZHVjZWQgYXV0b21h dGljYWxseS4KKyAqIERvIG5vdCBtb2RpZnkgYW55dGhpbmcgaW4gaGVyZSBieSBoYW5kLgorICoK KyAqIENyZWF0ZWQgZnJvbSBzb3VyY2UgZmlsZQorICogICAvdXNyL3NyYy9zeXMva2Vybi9kZXZp Y2VfaWYubQorICogd2l0aAorICogICBtYWtlb2Jqb3BzLmF3aworICoKKyAqIFNlZSB0aGUgc291 cmNlIGZpbGUgZm9yIGxlZ2FsIGluZm9ybWF0aW9uCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAg REVWSUNFIGRldmljZSAtIEtPYmogbWV0aG9kcyBmb3IgYWxsIGRldmljZSBkcml2ZXJzCisgKiBA YnJpZWYgQSBiYXNpYyBzZXQgb2YgbWV0aG9kcyByZXF1aXJlZCBmb3IgYWxsIGRldmljZSBkcml2 ZXJzLgorICoKKyAqIFRoZSBkZXZpY2UgaW50ZXJmYWNlIGlzIHVzZWQgdG8gbWF0Y2ggZGV2aWNl cyB0byBkcml2ZXJzIGR1cmluZworICogYXV0b2NvbmZpZ3VyYXRpb24gYW5kIHByb3ZpZGVzIG1l dGhvZHMgdG8gYWxsb3cgZHJpdmVycyB0byBoYW5kbGUKKyAqIHN5c3RlbS13aWRlIGV2ZW50cyBz dWNoIGFzIHN1c3BlbmQsIHJlc3VtZSBvciBzaHV0ZG93bi4KKyAqIEB7CisgKi8KKworI2lmbmRl ZiBfZGV2aWNlX2lmX2hfCisjZGVmaW5lIF9kZXZpY2VfaWZfaF8KKworLyoqIEBicmllZiBVbmlx dWUgZGVzY3JpcHRvciBmb3IgdGhlIERFVklDRV9QUk9CRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0 cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2VfcHJvYmVfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv biBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9QUk9CRSgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQg ZGV2aWNlX3Byb2JlX3QoZGV2aWNlX3QgZGV2KTsKKy8qKgorICogQGJyaWVmIFByb2JlIHRvIHNl ZSBpZiBhIGRldmljZSBtYXRjaGVzIGEgZHJpdmVyLgorICoKKyAqIFVzZXJzIHNob3VsZCBub3Qg Y2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseS4gTm9ybWFsbHksIHRoaXMKKyAqIGlzIGNhbGxlZCB2 aWEgZGV2aWNlX3Byb2JlX2FuZF9hdHRhY2goKSB0byBzZWxlY3QgYSBkcml2ZXIKKyAqIGNhbGxp bmcgdGhlIERFVklDRV9QUk9CRSgpIG9mIGFsbCBjYW5kaWRhdGUgZHJpdmVycyBhbmQgYXR0YWNo CisgKiB0aGUgd2lubmluZyBkcml2ZXIgKGlmIGFueSkgdG8gdGhlIGRldmljZS4KKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWF0Y2ggZGV2aWNlcyB0byBkZXZpY2UgZHJpdmVycy4K KyAqIFR5cGljYWxseSwgdGhlIGRyaXZlciB3aWxsIGV4YW1pbmUgdGhlIGRldmljZSB0byBzZWUg aWYKKyAqIGl0IGlzIHN1aXRhYmxlIGZvciB0aGlzIGRyaXZlci4gVGhpcyBtaWdodCBpbmNsdWRl IGNoZWNraW5nCisgKiB0aGUgdmFsdWVzIG9mIHZhcmlvdXMgZGV2aWNlIGluc3RhbmNlIHZhcmlh YmxlcyBvciByZWFkaW5nCisgKiBoYXJkd2FyZSByZWdpc3RlcnMuCisgKiAgCisgKiBJbiBzb21l IGNhc2VzLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBkcml2ZXIgYXZhaWxhYmxlCisgKiB3 aGljaCBjYW4gYmUgdXNlZCBmb3IgYSBkZXZpY2UgKGZvciBpbnN0YW5jZSB0aGVyZSBtaWdodAor ICogYmUgYSBnZW5lcmljIGRyaXZlciB3aGljaCB3b3JrcyBmb3IgYSBzZXQgb2YgbWFueSB0eXBl cyBvZgorICogZGV2aWNlIGFuZCBhIG1vcmUgc3BlY2lmaWMgZHJpdmVyIHdoaWNoIHdvcmtzIGZv ciBhIHN1YnNldAorICogb2YgZGV2aWNlcykuIEJlY2F1c2Ugb2YgdGhpcywgYSBkcml2ZXIgc2hv dWxkIG5vdCBhc3N1bWUKKyAqIHRoYXQgaXQgd2lsbCBiZSB0aGUgZHJpdmVyIHRoYXQgYXR0YWNo ZXMgdG8gdGhlIGRldmljZSBldmVuCisgKiBpZiBpdCByZXR1cm5zIGEgc3VjY2VzcyBzdGF0dXMg ZnJvbSBERVZJQ0VfUFJPQkUoKS4gSW4gcGFydGljdWxhciwKKyAqIGEgZHJpdmVyIG11c3QgZnJl ZSBhbnkgcmVzb3VyY2VzIHdoaWNoIGl0IGFsbG9jYXRlZCBkdXJpbmcKKyAqIHRoZSBwcm9iZSBi ZWZvcmUgcmV0dXJuaW5nLiBUaGUgcmV0dXJuIHZhbHVlIG9mIERFVklDRV9QUk9CRSgpCisgKiBp cyB1c2VkIHRvIGVsZWN0IHdoaWNoIGRyaXZlciBpcyB1c2VkIC0gdGhlIGRyaXZlciB3aGljaCBy ZXR1cm5zCisgKiB0aGUgbGFyZ2VzdCBub24tZXJyb3IgdmFsdWUgd2lucyB0aGUgZWxlY3Rpb24g YW5kIGF0dGFjaGVzIHRvCisgKiB0aGUgZGV2aWNlLiBDb21tb24gbm9uLWVycm9yIHZhbHVlcyBh cmUgZGVzY3JpYmVkIGluIHRoZQorICogREVWSUNFX1BST0JFKDkpIG1hbnVhbCBwYWdlLgorICoK KyAqIElmIGEgZHJpdmVyIG1hdGNoZXMgdGhlIGhhcmR3YXJlLCBpdCBzaG91bGQgc2V0IHRoZSBk ZXZpY2UKKyAqIGRlc2NyaXB0aW9uIHN0cmluZyB1c2luZyBkZXZpY2Vfc2V0X2Rlc2MoKSBvcgor ICogZGV2aWNlX3NldF9kZXNjX2NvcHkoKS4gVGhpcyBzdHJpbmcgaXMgdXNlZCB0byBnZW5lcmF0 ZSBhbgorICogaW5mb3JtYXRpdmUgbWVzc2FnZSB3aGVuIERFVklDRV9BVFRBQ0goKSBpcyBjYWxs ZWQuCisgKiAKKyAqIEFzIGEgc3BlY2lhbCBjYXNlLCBpZiBhIGRyaXZlciByZXR1cm5zIHplcm8s IHRoZSBkcml2ZXIgZWxlY3Rpb24KKyAqIGlzIGN1dCBzaG9ydCBhbmQgdGhhdCBkcml2ZXIgd2ls bCBhdHRhY2ggdG8gdGhlIGRldmljZQorICogaW1tZWRpYXRlbHkuIFRoaXMgc2hvdWxkIHJhcmVs eSBiZSB1c2VkLgorICoKKyAqIEZvciBleGFtcGxlLCBhIHByb2JlIG1ldGhvZCBmb3IgYSBQQ0kg ZGV2aWNlIGRyaXZlciBtaWdodCBsb29rCisgKiBsaWtlIHRoaXM6CisgKgorICogQGNvZGUKKyAq IGludAorICogZm9vX3Byb2JlKGRldmljZV90IGRldikKKyAqIHsKKyAqICAgICAgICAgaWYgKHBj aV9nZXRfdmVuZG9yKGRldikgPT0gRk9PVkVORE9SICYmCisgKiAgICAgICAgICAgICBwY2lfZ2V0 X2RldmljZShkZXYpID09IEZPT0RFVklDRSkgeworICogICAgICAgICAgICAgICAgIGRldmljZV9z ZXRfZGVzYyhkZXYsICJGb28gZGV2aWNlIik7CisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIChC VVNfUFJPQkVfREVGQVVMVCk7CisgKiAgICAgICAgIH0KKyAqICAgICAgICAgcmV0dXJuIChFTlhJ Tyk7CisgKiB9CisgKiBAZW5kY29kZQorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4g YSBkZXZpY2UgZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidz IG1ldGhvZCBsaXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcHJvYmUs IGZvb19wcm9iZSkKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRldmljZSB0 byBwcm9iZQorICoKKyAqIEByZXR2YWwgMAkJaWYgdGhpcyBpcyB0aGUgb25seSBwb3NzaWJsZSBk cml2ZXIgZm9yIHRoaXMKKyAqCQkJZGV2aWNlCisgKiBAcmV0dmFsIG5lZ2F0aXZlCWlmIHRoZSBk cml2ZXIgY2FuIG1hdGNoIHRoaXMgZGV2aWNlIC0gdGhlCisgKgkJCWxlYXN0IG5lZ2F0aXZlIHZh bHVlIGlzIHVzZWQgdG8gc2VsZWN0IHRoZQorICoJCQlkcml2ZXIKKyAqIEByZXR2YWwgRU5YSU8J aWYgdGhlIGRyaXZlciBkb2VzIG5vdCBtYXRjaCB0aGUgZGV2aWNlCisgKiBAcmV0dmFsIHBvc2l0 aXZlCWlmIHNvbWUga2luZCBvZiBlcnJvciB3YXMgZGV0ZWN0ZWQgZHVyaW5nCisgKgkJCXRoZSBw cm9iZSwgYSByZWd1bGFyIHVuaXggZXJyb3IgY29kZSBzaG91bGQKKyAqCQkJYmUgcmV0dXJuZWQg dG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgZXJyb3IKKyAqIEBzZWUgREVWSUNFX0FUVEFDSCgpLCBw Y2lfZ2V0X3ZlbmRvcigpLCBwY2lfZ2V0X2RldmljZSgpCisgKi8KKworc3RhdGljIF9faW5saW5l IGludCBERVZJQ0VfUFJPQkUoZGV2aWNlX3QgZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpP UExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMsZGV2aWNlX3Byb2JlKTsKKwlyZXR1cm4gKChkZXZp Y2VfcHJvYmVfdCAqKSBfbSkoZGV2KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRv ciBmb3IgdGhlIERFVklDRV9JREVOVElGWSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jq b3BfZGVzYyBkZXZpY2VfaWRlbnRpZnlfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBs ZW1lbnRpbmcgdGhlIERFVklDRV9JREVOVElGWSgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIGRl dmljZV9pZGVudGlmeV90KGRyaXZlcl90ICpkcml2ZXIsIGRldmljZV90IHBhcmVudCk7CisvKioK KyAqIEBicmllZiBBbGxvdyBhIGRldmljZSBkcml2ZXIgdG8gZGV0ZWN0IGRldmljZXMgbm90IG90 aGVyd2lzZSBlbnVtZXJhdGVkLgorICoKKyAqIFRoZSBERVZJQ0VfSURFTlRJRlkoKSBtZXRob2Qg aXMgdXNlZCBieSBzb21lIGRyaXZlcnMgKGUuZy4gdGhlIElTQQorICogYnVzIGRyaXZlcikgdG8g aGVscCBwb3B1bGF0ZSB0aGUgYnVzIGRldmljZSB3aXRoIGEgdXNlZnVsIHNldCBvZgorICogY2hp bGQgZGV2aWNlcywgbm9ybWFsbHkgYnkgY2FsbGluZyB0aGUgQlVTX0FERF9DSElMRCgpIG1ldGhv ZCBvZgorICogdGhlIHBhcmVudCBkZXZpY2UuIEZvciBpbnN0YW5jZSwgdGhlIElTQSBidXMgZHJp dmVyIHVzZXMgc2V2ZXJhbAorICogc3BlY2lhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGlzYWhp bnQgZHJpdmVyIGFuZCB0aGUgcG5wIGRyaXZlciB0bworICogY3JlYXRlIGNoaWxkIGRldmljZXMg YmFzZWQgb24gY29uZmlndXJhdGlvbiBoaW50cyBhbmQgUG5QIGJ1cworICogcHJvYmVzIHJlc3Bl Y3RpdmVseS4KKyAqCisgKiBNYW55IGJ1cyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgdHJ1ZSBwbHVn LWFuZC1wbGF5IGRvIG5vdCBuZWVkIHRvCisgKiB1c2UgdGhpcyBtZXRob2QgYXQgYWxsIHNpbmNl IGNoaWxkIGRldmljZXMgY2FuIGJlIGRpc2NvdmVyZWQKKyAqIGF1dG9tYXRpY2FsbHkgd2l0aG91 dCBoZWxwIGZyb20gY2hpbGQgZHJpdmVycy4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9k IGluIGEgZGV2aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMKKyAqIGluIHRoZSBkcml2 ZXIncyBtZXRob2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX2lk ZW50aWZ5LCBmb29faWRlbnRpZnkpCisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBkcml2ZXIJ dGhlIGRyaXZlciB3aG9zZSBpZGVudGlmeSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkCisgKiBAcGFy YW0gcGFyZW50CXRoZSBwYXJlbnQgZGV2aWNlIHRvIHVzZSB3aGVuIGFkZGluZyBuZXcgY2hpbGRy ZW4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBERVZJQ0VfSURFTlRJRlkoZHJpdmVyX3Qg KmRyaXZlciwgZGV2aWNlX3QgcGFyZW50KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV UChkcml2ZXItPm9wcyxkZXZpY2VfaWRlbnRpZnkpOworCSgoZGV2aWNlX2lkZW50aWZ5X3QgKikg X20pKGRyaXZlciwgcGFyZW50KTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm b3IgdGhlIERFVklDRV9BVFRBQ0goKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl c2MgZGV2aWNlX2F0dGFjaF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGlu ZyB0aGUgREVWSUNFX0FUVEFDSCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgZGV2aWNlX2F0dGFj aF90KGRldmljZV90IGRldik7CisvKioKKyAqIEBicmllZiBBdHRhY2ggYSBkZXZpY2UgdG8gYSBk ZXZpY2UgZHJpdmVyCisgKgorICogTm9ybWFsbHkgb25seSBjYWxsZWQgdmlhIGRldmljZV9wcm9i ZV9hbmRfYXR0YWNoKCksIHRoaXMgaXMgY2FsbGVkCisgKiB3aGVuIGEgZHJpdmVyIGhhcyBzdWNj ZWVkZWQgaW4gcHJvYmluZyBhZ2FpbnN0IGEgZGV2aWNlLgorICogVGhpcyBtZXRob2Qgc2hvdWxk IGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlIGFuZCBhbGxvY2F0ZSBvdGhlcgorICogc3lzdGVtIHJl c291cmNlcyAoZS5nLiBkZXZmcyBlbnRyaWVzKSBhcyByZXF1aXJlZC4KKyAqCisgKiBUbyBpbmNs dWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMK KyAqIGluIHRoZSBkcml2ZXIncyBtZXRob2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpN RVRIT0QoZGV2aWNlX2F0dGFjaCwgZm9vX2F0dGFjaCkKKyAqIEBlbmRjb2RlCisgKgorICogQHBh cmFtIGRldgkJdGhlIGRldmljZSB0byBwcm9iZQorICoKKyAqIEByZXR2YWwgMAkJc3VjY2Vzcwor ICogQHJldHZhbCBub24temVybwlpZiBzb21lIGtpbmQgb2YgZXJyb3Igd2FzIGRldGVjdGVkIGR1 cmluZworICoJCQl0aGUgYXR0YWNoLCBhIHJlZ3VsYXIgdW5peCBlcnJvciBjb2RlIHNob3VsZAor ICoJCQliZSByZXR1cm5lZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBlcnJvcgorICogQHNlZSBE RVZJQ0VfUFJPQkUoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX0FUVEFDSChk ZXZpY2VfdCBkZXYpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRl diktPm9wcyxkZXZpY2VfYXR0YWNoKTsKKwlyZXR1cm4gKChkZXZpY2VfYXR0YWNoX3QgKikgX20p KGRldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0Vf REVUQUNIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGRldmljZV9kZXRh Y2hfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9E RVRBQ0goKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9kZXRhY2hfdChkZXZpY2VfdCBk ZXYpOworLyoqCisgKiBAYnJpZWYgRGV0YWNoIGEgZHJpdmVyIGZyb20gYSBkZXZpY2UuCisgKgor ICogVGhpcyBjYW4gYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGlzIHJlcGxhY2luZyB0aGUKKyAqIGRy aXZlciBzb2Z0d2FyZSBvciBpZiBhIGRldmljZSBpcyBhYm91dCB0byBiZSBwaHlzaWNhbGx5IHJl bW92ZWQKKyAqIGZyb20gdGhlIHN5c3RlbSAoZS5nLiBmb3IgcmVtb3ZhYmxlIGhhcmR3YXJlIHN1 Y2ggYXMgVVNCIG9yIFBDQ0FSRCkuCisgKgorICogVG8gaW5jbHVkZSB0aGlzIG1ldGhvZCBpbiBh IGRldmljZSBkcml2ZXIsIHVzZSBhIGxpbmUgbGlrZSB0aGlzCisgKiBpbiB0aGUgZHJpdmVyJ3Mg bWV0aG9kIGxpc3Q6CisgKgorICogQGNvZGUKKyAqIAlLT0JKTUVUSE9EKGRldmljZV9kZXRhY2gs IGZvb19kZXRhY2gpCisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBkZXYJCXRoZSBkZXZpY2Ug dG8gZGV0YWNoCisgKgorICogQHJldHZhbCAwCQlzdWNjZXNzCisgKiBAcmV0dmFsIG5vbi16ZXJv CXRoZSBkZXRhY2ggY291bGQgbm90IGJlIHBlcmZvcm1lZCwgZS5nLiBpZiB0aGUKKyAqCQkJZHJp dmVyIGRvZXMgbm90IHN1cHBvcnQgZGV0YWNoaW5nLgorICoKKyAqIEBzZWUgREVWSUNFX0FUVEFD SCgpCisgKi8KKworc3RhdGljIF9faW5saW5lIGludCBERVZJQ0VfREVUQUNIKGRldmljZV90IGRl dikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLGRl dmljZV9kZXRhY2gpOworCXJldHVybiAoKGRldmljZV9kZXRhY2hfdCAqKSBfbSkoZGV2KTsKK30K KworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIERFVklDRV9TSFVURE9XTigp IG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2Vfc2h1dGRvd25fZGVz YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9TSFVURE9X TigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgZGV2aWNlX3NodXRkb3duX3QoZGV2aWNlX3QgZGV2 KTsKKy8qKgorICogQGJyaWVmIENhbGxlZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duLgorICoKKyAq IFRoaXMgbWV0aG9kIGFsbG93cyBkcml2ZXJzIHRvIGRldGVjdCB3aGVuIHRoZSBzeXN0ZW0gaXMg YmVpbmcgc2h1dCBkb3duLgorICogU29tZSBkcml2ZXJzIG5lZWQgdG8gdXNlIHRoaXMgdG8gcGxh Y2UgdGhlaXIgaGFyZHdhcmUgaW4gYSBjb25zaXN0ZW50CisgKiBzdGF0ZSBiZWZvcmUgcmVib290 aW5nIHRoZSBjb21wdXRlci4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2 aWNlIGRyaXZlciwgdXNlIGEgbGluZSBsaWtlIHRoaXMKKyAqIGluIHRoZSBkcml2ZXIncyBtZXRo b2QgbGlzdDoKKyAqCisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBm b29fc2h1dGRvd24pCisgKiBAZW5kY29kZQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVW SUNFX1NIVVRET1dOKGRldmljZV90IGRldikKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09L VVAoKChrb2JqX3QpZGV2KS0+b3BzLGRldmljZV9zaHV0ZG93bik7CisJcmV0dXJuICgoZGV2aWNl X3NodXRkb3duX3QgKikgX20pKGRldik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0 b3IgZm9yIHRoZSBERVZJQ0VfU1VTUEVORCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jq b3BfZGVzYyBkZXZpY2Vfc3VzcGVuZF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl bWVudGluZyB0aGUgREVWSUNFX1NVU1BFTkQoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmlj ZV9zdXNwZW5kX3QoZGV2aWNlX3QgZGV2KTsKKy8qKgorICogQGJyaWVmIFRoaXMgaXMgY2FsbGVk IGJ5IHRoZSBwb3dlci1tYW5hZ2VtZW50IHN1YnN5c3RlbSB3aGVuIGEKKyAqIHN1c3BlbmQgaGFz IGJlZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyIG9yIGJ5IHNvbWUgYXV0b21hdGljCisgKiBtZWNo YW5pc20uCisgKgorICogVGhpcyBnaXZlcyBkcml2ZXJzIGEgY2hhbmNlIHRvIHZldG8gdGhlIHN1 c3BlbmQgb3Igc2F2ZSB0aGVpcgorICogY29uZmlndXJhdGlvbiBiZWZvcmUgcG93ZXIgaXMgcmVt b3ZlZC4KKyAqCisgKiBUbyBpbmNsdWRlIHRoaXMgbWV0aG9kIGluIGEgZGV2aWNlIGRyaXZlciwg dXNlIGEgbGluZSBsaWtlIHRoaXMgaW4KKyAqIHRoZSBkcml2ZXIncyBtZXRob2QgbGlzdDoKKyAq CisgKiBAY29kZQorICogCUtPQkpNRVRIT0QoZGV2aWNlX3N1c3BlbmQsIGZvb19zdXNwZW5kKQor ICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gZGV2CQl0aGUgZGV2aWNlIGJlaW5nIHN1c3BlbmRl ZAorICoKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICogQHJldHZhbCBub24temVybwlhbiBlcnJv ciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHByZXBhcmUgdGhlCisgKiAgICAgICAgICAg ICAgICAgICAgICBkZXZpY2UgZm9yIHN1c3BlbnNpb24KKyAqCisgKiBAc2VlIERFVklDRV9SRVNV TUUoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1NVU1BFTkQoZGV2aWNlX3Qg ZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMs ZGV2aWNlX3N1c3BlbmQpOworCXJldHVybiAoKGRldmljZV9zdXNwZW5kX3QgKikgX20pKGRldik7 Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUkVTVU1F KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIGRldmljZV9yZXN1bWVfZGVz YzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERFVklDRV9SRVNVTUUo KSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9yZXN1bWVfdChkZXZpY2VfdCBkZXYpOwor LyoqCisgKiBAYnJpZWYgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIHJlc3VtZXMgYWZ0 ZXIgYSBzdXNwZW5kLgorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4gYSBkZXZpY2Ug ZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidzIG1ldGhvZCBs aXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcmVzdW1lLCBmb29fcmVz dW1lKQorICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gZGV2CQl0aGUgZGV2aWNlIGJlaW5nIHJl c3VtZWQKKyAqCisgKiBAcmV0dmFsIDAJCXN1Y2Nlc3MKKyAqIEByZXR2YWwgbm9uLXplcm8JYW4g ZXJyb3Igb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byByZXN0b3JlIHRoZQorICogICAgICAg ICAgICAgICAgICAgICAgZGV2aWNlIGZyb20gc3VzcGVuc2lvbgorICoKKyAqIEBzZWUgREVWSUNF X1NVU1BFTkQoKQorICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1JFU1VNRShkZXZp Y2VfdCBkZXYpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldikt Pm9wcyxkZXZpY2VfcmVzdW1lKTsKKwlyZXR1cm4gKChkZXZpY2VfcmVzdW1lX3QgKikgX20pKGRl dik7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUVVJ RVNDRSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBkZXZpY2VfcXVpZXNj ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgREVWSUNFX1FV SUVTQ0UoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IGRldmljZV9xdWllc2NlX3QoZGV2aWNlX3Qg ZGV2KTsKKy8qKgorICogQGJyaWVmIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBh c2tlZCB0byBxdWllc2NlIGl0c2VsZi4KKyAqCisgKiBUaGUgZHJpdmVyIHNob3VsZCBhcnJhbmdl IGZvciB0aGUgb3JkZXJseSBzaHV0ZG93biBvZiB0aGlzIGRldmljZS4KKyAqIEFsbCBmdXJ0aGVy IGFjY2VzcyB0byB0aGUgZGV2aWNlIHNob3VsZCBiZSBjdXJ0YWlsZWQuICBTb29uIHRoZXJlCisg KiB3aWxsIGJlIGEgcmVxdWVzdCB0byBkZXRhY2gsIGJ1dCB0aGVyZSB3b24ndCBuZWNlc3Nhcmls eSBiZSBvbmUuCisgKgorICogVG8gaW5jbHVkZSB0aGlzIG1ldGhvZCBpbiBhIGRldmljZSBkcml2 ZXIsIHVzZSBhIGxpbmUgbGlrZSB0aGlzCisgKiBpbiB0aGUgZHJpdmVyJ3MgbWV0aG9kIGxpc3Q6 CisgKgorICogQGNvZGUKKyAqIAlLT0JKTUVUSE9EKGRldmljZV9xdWllc2NlLCBmb29fcXVpZXNj ZSkKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRldmljZSBiZWluZyBxdWll c2NlZAorICoKKyAqIEByZXR2YWwgMAkJc3VjY2VzcworICogQHJldHZhbCBub24temVybwlhbiBl cnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHF1aWVzY2UgdGhlCisgKiAgICAgICAg ICAgICAgICAgICAgICBkZXZpY2UKKyAqCisgKiBAc2VlIERFVklDRV9ERVRBQ0goKQorICovCisK K3N0YXRpYyBfX2lubGluZSBpbnQgREVWSUNFX1FVSUVTQ0UoZGV2aWNlX3QgZGV2KQoreworCWtv YmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMsZGV2aWNlX3F1aWVz Y2UpOworCXJldHVybiAoKGRldmljZV9xdWllc2NlX3QgKikgX20pKGRldik7Cit9CisKKy8qKiBA YnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBERVZJQ0VfUkVHSVNURVIoKSBtZXRob2Qg Ki8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgZGV2aWNlX3JlZ2lzdGVyX2Rlc2M7CisvKiog QGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBERVZJQ0VfUkVHSVNURVIoKSBtZXRo b2QgKi8KK3R5cGVkZWYgdm9pZCAqIGRldmljZV9yZWdpc3Rlcl90KGRldmljZV90IGRldik7Cisv KioKKyAqIEBicmllZiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgYXNrZWQgdG8g cmVnaXN0ZXIgaGFuZGxlcnMuCisgKgorICoKKyAqIFRvIGluY2x1ZGUgdGhpcyBtZXRob2QgaW4g YSBkZXZpY2UgZHJpdmVyLCB1c2UgYSBsaW5lIGxpa2UgdGhpcworICogaW4gdGhlIGRyaXZlcidz IG1ldGhvZCBsaXN0OgorICoKKyAqIEBjb2RlCisgKiAJS09CSk1FVEhPRChkZXZpY2VfcmVnaXN0 ZXIsIGZvb19yZWdpc3RlcikKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGRldgkJdGhlIGRl dmljZSBmb3Igd2hpY2ggaGFuZGxlcnMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQKKyAqCisgKiBAcmV0 dmFsIE5VTEwgICAgIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQKKyAqIEByZXR2YWwgbm9uLU5VTEwJ YSBwb2ludGVyIHRvIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0YXRpYyBkcml2ZXIgc3RhdGUK KyAqCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgKiBERVZJQ0VfUkVHSVNURVIoZGV2aWNl X3QgZGV2KQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5v cHMsZGV2aWNlX3JlZ2lzdGVyKTsKKwlyZXR1cm4gKChkZXZpY2VfcmVnaXN0ZXJfdCAqKSBfbSko ZGV2KTsKK30KKworI2VuZGlmIC8qIF9kZXZpY2VfaWZfaF8gKi8KRmlsZXMgdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvaWZfcHRuZXQubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw L2lmX3B0bmV0Lm8gZGlmZmVyCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvbWFjaGluZS9fYWxpZ24uaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9f YWxpZ24uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fYWxpZ24uaAkx OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvX2FsaWduLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl L19hbGlnbi5oIDIxNTg1NiAyMDEwLTExLTI2IDEwOjU5OjIwWiB0aWpsICQgKi8KKworI2luY2x1 ZGUgPHg4Ni9fYWxpZ24uaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL19idXMuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fYnVz LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX2J1cy5oCTE5NzAtMDEt MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvbWFjaGluZS9fYnVzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAg LTAsMCArMSw0NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTS4gV2FybmVyIExvc2gu CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1v ZGlmaWNhdGlvbiwgaW1tZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4K KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRS SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVl QlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fYnVzLmggMTQ1MjUzIDIwMDUtMDQt MTggMjE6NDU6MzRaIGltcCAkCisgKi8KKworI2lmbmRlZiBBTUQ2NF9JTkNMVURFX19CVVNfSAor I2RlZmluZSBBTUQ2NF9JTkNMVURFX19CVVNfSAorCisvKgorICogQnVzIGFkZHJlc3MgYW5kIHNp emUgdHlwZXMKKyAqLwordHlwZWRlZiB1aW50NjRfdCBidXNfYWRkcl90OwordHlwZWRlZiB1aW50 NjRfdCBidXNfc2l6ZV90OworCisvKgorICogQWNjZXNzIG1ldGhvZHMgZm9yIGJ1cyByZXNvdXJj ZXMgYW5kIGFkZHJlc3Mgc3BhY2UuCisgKi8KK3R5cGVkZWYJdWludDY0X3QgYnVzX3NwYWNlX3Rh Z190OwordHlwZWRlZgl1aW50NjRfdCBidXNfc3BhY2VfaGFuZGxlX3Q7CisKKyNlbmRpZiAvKiBB TUQ2NF9JTkNMVURFX19CVVNfSCAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL21hY2hpbmUvX2ludHR5cGVzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvX2ludHR5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv X2ludHR5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL19pbnR0eXBlcy5oCTIwMTYtMDktMjkgMDA6 MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUg aXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z eXMvYW1kNjQvaW5jbHVkZS9faW50dHlwZXMuaCAyMTcxNTcgMjAxMS0wMS0wOCAxODowOTo0OFog dGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX2ludHR5cGVzLmg+CmRpZmYgLXUgLXIgLU4gdXNy L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fbGltaXRzLmggL3Vzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL21hY2hpbmUvX2xpbWl0cy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC9tYWNoaW5lL19saW1pdHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX2xpbWl0cy5oCTIwMTYt MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBU aGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxl bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fbGltaXRzLmggMjMyMjYyIDIwMTItMDItMjggMTg6 MjQ6MjhaIHRpamwgJCAqLworCisjaW5jbHVkZSA8eDg2L19saW1pdHMuaD4KZGlmZiAtdSAtciAt TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL19zdGRpbnQuaCAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fc3RkaW50LmgKLS0tIHVzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvX3N0ZGludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9fc3RkaW50LmgJ MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0K KyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6 IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL19zdGRpbnQuaCAyMzIyNjQgMjAxMi0wMi0y OCAxODozODozM1ogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX3N0ZGludC5oPgpkaWZmIC11 IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmggL3Vzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL21hY2hpbmUvX3R5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL190eXBlcy5o CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyot CisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNE OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9fdHlwZXMuaCAyMzIyNjEgMjAxMi0wMi0y OCAxODoxNToyOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvX3R5cGVzLmg+CmRpZmYgLXUg LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hY3BpY2FfbWFjaGRlcC5o IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FjcGljYV9tYWNoZGVwLmgKLS0t IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYWNwaWNhX21hY2hkZXAuaAkxOTcw LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL21hY2hpbmUvYWNwaWNhX21hY2hkZXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAw MDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBw dWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu Y2x1ZGUvYWNwaWNhX21hY2hkZXAuaCAyNTQzMDUgMjAxMy0wOC0xMyAyMjowNToxMFogamtpbSAk ICovCisKKyNpbmNsdWRlIDx4ODYvYWNwaWNhX21hY2hkZXAuaD4KZGlmZiAtdSAtciAtTiB1c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FwbV9iaW9zLmggL3Vzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL21hY2hpbmUvYXBtX2Jpb3MuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9hcG1fYmlvcy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hcG1fYmlvcy5oCTIw MTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisg KiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiBy ZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9hcG1fYmlvcy5oIDIxNTE0MCAyMDEwLTExLTEx IDE5OjM2OjIxWiBqa2ltICQgKi8KKworI2luY2x1ZGUgPHg4Ni9hcG1fYmlvcy5oPgpkaWZmIC11 IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtLmggL3Vzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL21hY2hpbmUvYXNtLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK KysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FzbS5oCTIwMTYtMDktMjkg MDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsOTkgQEAKKy8qLQorICogQ29weXJp Z2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEu CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6 LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3Ig dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpREVGUy5o CTUuMSAoQmVya2VsZXkpIDQvMjMvOTAKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k NjQvaW5jbHVkZS9hc20uaCAyNzUwMDQgMjAxNC0xMS0yNSAwMzo1MDozMVogZW1hc3RlICQKKyAq LworCisjaWZuZGVmIF9NQUNISU5FX0FTTV9IXworI2RlZmluZQlfTUFDSElORV9BU01fSF8KKwor I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWZkZWYgUElDCisjZGVmaW5lCVBJQ19QTFQoeCkJ eEBQTFQKKyNkZWZpbmUJUElDX0dPVCh4KQl4QEdPVFBDUkVMKCVyaXApCisjZWxzZQorI2RlZmlu ZQlQSUNfUExUKHgpCXgKKyNlbmRpZgorCisvKgorICogQ05BTUUgYW5kIEhJREVOQU1FIG1hbmFn ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3ltYm9sIG5hbWVzIGluIEMKKyAqIGFuZCB0aGUg ZXF1aXZhbGVudCBhc3NlbWJseSBsYW5ndWFnZSBuYW1lcy4gIENOQU1FIGlzIGdpdmVuIGEgbmFt ZSBhcworICogaXQgd291bGQgYmUgdXNlZCBpbiBhIEMgcHJvZ3JhbS4gIEl0IGV4cGFuZHMgdG8g dGhlIGVxdWl2YWxlbnQgYXNzZW1ibHkKKyAqIGxhbmd1YWdlIG5hbWUuICBISURFTkFNRSBpcyBn aXZlbiBhbiBhc3NlbWJseS1sYW5ndWFnZSBuYW1lLCBhbmQgZXhwYW5kcworICogdG8gYSBwb3Nz aWJseS1tb2RpZmllZCBmb3JtIHRoYXQgd2lsbCBiZSBpbnZpc2libGUgdG8gQyBwcm9ncmFtcy4K KyAqLworI2RlZmluZSBDTkFNRShjc3ltKQkJY3N5bQorI2RlZmluZSBISURFTkFNRShhc21zeW0p CS5hc21zeW0KKworI2RlZmluZSBfU1RBUlRfRU5UUlkJLnRleHQ7IC5wMmFsaWduIDQsMHg5MAor CisjZGVmaW5lIF9FTlRSWSh4KQlfU1RBUlRfRU5UUlk7IFwKKwkJCS5nbG9ibCBDTkFNRSh4KTsg LnR5cGUgQ05BTUUoeCksQGZ1bmN0aW9uOyBDTkFNRSh4KToKKworI2lmZGVmIFBST0YKKyNkZWZp bmUJQUxURU5UUlkoeCkJX0VOVFJZKHgpOyBcCisJCQlwdXNocSAlcmJwOyBtb3ZxICVyc3AsJXJi cDsgXAorCQkJY2FsbCBQSUNfUExUKEhJREVOQU1FKG1jb3VudCkpOyBcCisJCQlwb3BxICVyYnA7 IFwKKwkJCWptcCA5ZgorI2RlZmluZQlFTlRSWSh4KQlfRU5UUlkoeCk7IFwKKwkJCXB1c2hxICVy YnA7IG1vdnEgJXJzcCwlcmJwOyBcCisJCQljYWxsIFBJQ19QTFQoSElERU5BTUUobWNvdW50KSk7 IFwKKwkJCXBvcHEgJXJicDsgXAorCQkJOToKKyNlbHNlCisjZGVmaW5lCUFMVEVOVFJZKHgpCV9F TlRSWSh4KQorI2RlZmluZQlFTlRSWSh4KQlfRU5UUlkoeCkKKyNlbmRpZgorCisjZGVmaW5lCUVO RCh4KQkJLnNpemUgeCwgLiAtIHgKKy8qCisgKiBXRUFLX1JFRkVSRU5DRSgpOiBjcmVhdGUgYSB3 ZWFrIHJlZmVyZW5jZSBhbGlhcyBmcm9tIHN5bS4gCisgKiBUaGUgbWFjcm8gaXMgbm90IGEgZ2Vu ZXJhbCBhc20gbWFjcm8gdGhhdCB0YWtlcyBhcmJpdHJhcnkgbmFtZXMsCisgKiBidXQgb25lIHRo YXQgdGFrZXMgb25seSBDIG5hbWVzLiBJdCBkb2VzIHRoZSBub24tbnVsbCBuYW1lCisgKiB0cmFu c2xhdGlvbiBpbnNpZGUgdGhlIG1hY3JvLgorICovCisjZGVmaW5lCVdFQUtfUkVGRVJFTkNFKHN5 bSwgYWxpYXMpCQkJCQlcCisJLndlYWsgQ05BTUUoYWxpYXMpOwkJCQkJCVwKKwkuZXF1IENOQU1F KGFsaWFzKSxDTkFNRShzeW0pCisKKyNkZWZpbmUgUkNTSUQoeCkJLnRleHQ7IC5hc2NpeiB4CisK KyN1bmRlZiBfX0ZCU0RJRAorI2lmICFkZWZpbmVkKGxpbnQpICYmICFkZWZpbmVkKFNUUklQX0ZC U0RJRCkKKyNkZWZpbmUgX19GQlNESUQocykJLmlkZW50IHMKKyNlbHNlCisjZGVmaW5lIF9fRkJT RElEKHMpCS8qIG5vdGhpbmcgKi8KKyNlbmRpZiAvKiBub3QgbGludCBhbmQgbm90IFNUUklQX0ZC U0RJRCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX0FTTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXNtYWNyb3MuaCAvdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9hc21hY3Jvcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC9tYWNoaW5lL2FzbWFjcm9zLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg KzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2FzbWFjcm9zLmgJ MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyNDAgQEAKKy8q LQorICogQ29weXJpZ2h0IChjKSAxOTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT VUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1 ZGUvYXNtYWNyb3MuaCAyNzQ0ODkgMjAxNC0xMS0xMyAyMjoxMTo0NFogc2NvdHRsICQKKyAqLwor CisjaWZuZGVmIF9NQUNISU5FX0FTTUFDUk9TX0hfCisjZGVmaW5lIF9NQUNISU5FX0FTTUFDUk9T X0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyogWFhYIHRvbyBtdWNoIGR1cGxpY2F0 aW9uIGluIHZhcmlvdXMgYXNtKi5oJ3MuICovCisKKy8qCisgKiBDTkFNRSBpcyB1c2VkIHRvIG1h bmFnZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3ltYm9sIG5hbWVzIGluIEMKKyAqIGFuZCB0 aGUgZXF1aXZhbGVudCBhc3NlbWJseSBsYW5ndWFnZSBuYW1lcy4gIENOQU1FIGlzIGdpdmVuIGEg bmFtZSBhcworICogaXQgd291bGQgYmUgdXNlZCBpbiBhIEMgcHJvZ3JhbS4gIEl0IGV4cGFuZHMg dG8gdGhlIGVxdWl2YWxlbnQgYXNzZW1ibHkKKyAqIGxhbmd1YWdlIG5hbWUuCisgKi8KKyNkZWZp bmUgQ05BTUUoY3N5bSkJCWNzeW0KKworI2RlZmluZSBBTElHTl9EQVRBCS5wMmFsaWduIDMJLyog OCBieXRlIGFsaWdubWVudCwgemVybyBmaWxsZWQgKi8KKyNpZmRlZiBHUFJPRgorI2RlZmluZSBB TElHTl9URVhUCS5wMmFsaWduIDQsMHg5MAkvKiAxNi1ieXRlIGFsaWdubWVudCwgbm9wIGZpbGxl ZCAqLworI2Vsc2UKKyNkZWZpbmUgQUxJR05fVEVYVAkucDJhbGlnbiA0LDB4OTAJLyogMTYtYnl0 ZSBhbGlnbm1lbnQsIG5vcCBmaWxsZWQgKi8KKyNlbmRpZgorI2RlZmluZSBTVVBFUkFMSUdOX1RF WFQJLnAyYWxpZ24gNCwweDkwCS8qIDE2LWJ5dGUgYWxpZ25tZW50LCBub3AgZmlsbGVkICovCisK KyNkZWZpbmUgR0VOX0VOVFJZKG5hbWUpCQlBTElHTl9URVhUOyAuZ2xvYmwgQ05BTUUobmFtZSk7 IFwKKwkJCQkudHlwZSBDTkFNRShuYW1lKSxAZnVuY3Rpb247IENOQU1FKG5hbWUpOgorI2RlZmlu ZSBOT05fR1BST0ZfRU5UUlkobmFtZSkJR0VOX0VOVFJZKG5hbWUpCisjZGVmaW5lIE5PTl9HUFJP Rl9SRVQJCS5ieXRlIDB4YzMJLyogb3Bjb2RlIGZvciBgcmV0JyAqLworCisjZGVmaW5lCUVORChu YW1lKQkJLnNpemUgbmFtZSwgLiAtIG5hbWUKKworI2lmZGVmIEdQUk9GCisvKgorICogX19tY291 bnQgaXMgbGlrZSBbLl1tY291bnQgZXhjZXB0IHRoYXQgZG9lc24ndCByZXF1aXJlIGl0cyBjYWxs ZXIgdG8gc2V0CisgKiB1cCBhIGZyYW1lIHBvaW50ZXIuICBJdCBtdXN0IGJlIGNhbGxlZCBiZWZv cmUgcHVzaGluZyBhbnl0aGluZyBvbnRvIHRoZQorICogc3RhY2suICBnY2Mgc2hvdWxkIGV2ZW50 dWFsbHkgZ2VuZXJhdGUgY29kZSB0byBjYWxsIF9fbWNvdW50IGluIG1vc3QKKyAqIGNhc2VzLiAg VGhpcyB3b3VsZCBtYWtlIC1wZyBpbiBjb21iaW5hdGlvbiB3aXRoIC1mb21pdC1mcmFtZS1wb2lu dGVyCisgKiB1c2VmdWwuICBnY2MgaGFzIGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBQUk9GSUxF X0JFRk9SRV9QUk9MT0dVRSB0bworICogYWxsb3cgcHJvZmlsaW5nIGJlZm9yZSBzZXR0aW5nIHVw IHRoZSBmcmFtZSBwb2ludGVyLCBidXQgdGhpcyBpcworICogaW5hZGVxdWF0ZSBmb3IgZ29vZCBo YW5kbGluZyBvZiBzcGVjaWFsIGNhc2VzLCBlLmcuLCAtZnBpYyB3b3JrcyBiZXN0CisgKiB3aXRo IHByb2ZpbGluZyBhZnRlciB0aGUgcHJvbG9ndWUuCisgKgorICogWy5dbWV4aXRjb3VudCBpcyBh IG5ldyBmdW5jdGlvbiB0byBzdXBwb3J0IG5vbi1zdGF0aXN0aWNhbCBwcm9maWxpbmcgaWYgYW4K KyAqIGFjY3VyYXRlIGNsb2NrIGlzIGF2YWlsYWJsZS4gIEZvciBDIHNvdXJjZXMsIGNhbGxzIHRv IGl0IGFyZSBnZW5lcmF0ZWQKKyAqIGJ5IHRoZSBGcmVlQlNEIGV4dGVuc2lvbiBgLW1wcm9maWxl ci1lcGlsb2d1ZScgdG8gZ2NjLiAgSXQgaXMgYmVzdCB0bworICogY2FsbCBbLl1tZXhpdGNvdW50 IGF0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBsaWtlIHRoZSBNRVhJVENPVU5UIG1hY3JvIGRvZXMs CisgKiBidXQgZ2NjIGN1cnJlbnRseSBnZW5lcmF0ZXMgY2FsbHMgdG8gaXQgYXQgdGhlIHN0YXJ0 IG9mIHRoZSBlcGlsb2d1ZSB0bworICogYXZvaWQgcHJvYmxlbXMgd2l0aCAtZnBpYy4KKyAqCisg KiBbLl1tY291bnQgYW5kIF9fbWNvdW50IG1heSBjbG9iYmVyIHRoZSBjYWxsLXVzZWQgcmVnaXN0 ZXJzIGFuZCAlZWYuCisgKiBbLl1tZXhpdGNvdW50IG1heSBjbG9iYmVyICVlY3ggYW5kICVlZi4K KyAqCisgKiBDcm9zcy1qdW1waW5nIG1ha2VzIG5vbi1zdGF0aXN0aWNhbCBwcm9maWxpbmcgdGlt aW5nIG1vcmUgY29tcGxpY2F0ZWQuCisgKiBJdCBpcyBoYW5kbGVkIGluIG1hbnkgY2FzZXMgYnkg Y2FsbGluZyBbLl1tZXhpdGNvdW50IGJlZm9yZSBqdW1waW5nLiAgSXQKKyAqIGlzIGhhbmRsZWQg Zm9yIGNvbmRpdGlvbmFsIGp1bXBzIHVzaW5nIENST1NTSlVNUCgpIGFuZCBDUk9TU0pVTVBfTEFC RUwoKS4KKyAqIEl0IGlzIGhhbmRsZWQgZm9yIHNvbWUgZmF1bHQtaGFuZGxpbmcganVtcHMgYnkg bm90IHNoYXJpbmcgdGhlIGV4aXQKKyAqIHJvdXRpbmUuCisgKgorICogQUxURU5UUlkoKSBtdXN0 IGJlIGJlZm9yZSBhIGNvcnJlc3BvbmRpbmcgRU5UUlkoKSBzbyB0aGF0IGl0IGNhbiBqdW1wIHRv CisgKiB0aGUgbWFpbiBlbnRyeSBwb2ludC4gIE5vdGUgdGhhdCBhbHQgZW50cmllcyBhcmUgY291 bnRlZCB0d2ljZS4gIFRoZXkKKyAqIGhhdmUgdG8gYmUgY291bnRlZCBhcyBvcmRpbmFyeSBlbnRy aWVzIGZvciBncHJvZiB0byBnZXQgdGhlIGNhbGwgdGltZXMKKyAqIHJpZ2h0IGZvciB0aGUgb3Jk aW5hcnkgZW50cmllcy4KKyAqCisgKiBIaWdoIGxvY2FsIGxhYmVscyBhcmUgdXNlZCBpbiBtYWNy b3MgdG8gYXZvaWQgY2xhc2hlcyB3aXRoIGxvY2FsIGxhYmVscworICogaW4gZnVuY3Rpb25zLgor ICoKKyAqIE9yZGluYXJ5IGByZXQnIGlzIHVzZWQgaW5zdGVhZCBvZiBhIG1hY3JvIGBSRVQnIGJl Y2F1c2UgdGhlcmUgYXJlIGEgbG90CisgKiBvZiBgcmV0J3MuICAweGMzIGlzIHRoZSBvcGNvZGUg Zm9yIGByZXQnIChgI2RlZmluZSByZXQgLi4uIHJldCcgY2FuJ3QKKyAqIGJlIHVzZWQgYmVjYXVz ZSB0aGlzIGZpbGUgaXMgc29tZXRpbWVzIHByZXByb2Nlc3NlZCBpbiB0cmFkaXRpb25hbCBtb2Rl KS4KKyAqIGByZXQnIGNsb2JiZXJzIGVmbGFncyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlci4KKyAq LworI2RlZmluZSBBTFRFTlRSWShuYW1lKQkJR0VOX0VOVFJZKG5hbWUpIDsgTUNPVU5UIDsgTUVY SVRDT1VOVCA7IGptcCA5ZgorI2RlZmluZQlDUk9TU0pVTVAoanRydWUsIGxhYmVsLCBqZmFsc2Up IFwKKwlqZmFsc2UgOGY7IE1FWElUQ09VTlQ7IGptcCBfX0NPTkNBVCh0byxsYWJlbCk7IDg6Cisj ZGVmaW5lIENST1NTSlVNUFRBUkdFVChsYWJlbCkgXAorCUFMSUdOX1RFWFQ7IF9fQ09OQ0FUKHRv LGxhYmVsKTogOyBNQ09VTlQ7IGptcCBsYWJlbAorI2RlZmluZSBFTlRSWShuYW1lKQkJR0VOX0VO VFJZKG5hbWUpIDsgOTogOyBNQ09VTlQKKyNkZWZpbmUgRkFLRV9NQ09VTlQoY2FsbGVyKQlwdXNo cSBjYWxsZXIgOyBjYWxsIF9fbWNvdW50IDsgcG9wcSAlcmN4CisjZGVmaW5lIE1DT1VOVAkJCWNh bGwgX19tY291bnQKKyNkZWZpbmUgTUNPVU5UX0xBQkVMKG5hbWUpCUdFTl9FTlRSWShuYW1lKSA7 IG5vcCA7IEFMSUdOX1RFWFQKKyNpZmRlZiBHVVBST0YKKyNkZWZpbmUgTUVYSVRDT1VOVAkJY2Fs bCAubWV4aXRjb3VudAorI2RlZmluZSByZXQJCQlNRVhJVENPVU5UIDsgTk9OX0dQUk9GX1JFVAor I2Vsc2UKKyNkZWZpbmUgTUVYSVRDT1VOVAorI2VuZGlmCisKKyNlbHNlIC8qICFHUFJPRiAqLwor LyoKKyAqIEFMVEVOVFJZKCkgaGFzIHRvIGFsaWduIGJlY2F1c2UgaXQgaXMgYmVmb3JlIGEgY29y cmVzcG9uZGluZyBFTlRSWSgpLgorICogRU5UUlkoKSBoYXMgdG8gYWxpZ24gdG8gYmVjYXVzZSB0 aGVyZSBtYXkgYmUgbm8gQUxURU5UUlkoKSBiZWZvcmUgaXQuCisgKiBJZiB0aGVyZSBpcyBhIHBy ZXZpb3VzIEFMVEVOVFJZKCkgdGhlbiB0aGUgYWxpZ25tZW50IGNvZGUgZm9yIEVOVFJZKCkKKyAq IGlzIGVtcHR5LgorICovCisjZGVmaW5lIEFMVEVOVFJZKG5hbWUpCQlHRU5fRU5UUlkobmFtZSkK KyNkZWZpbmUJQ1JPU1NKVU1QKGp0cnVlLCBsYWJlbCwgamZhbHNlKQlqdHJ1ZSBsYWJlbAorI2Rl ZmluZQlDUk9TU0pVTVBUQVJHRVQobGFiZWwpCisjZGVmaW5lIEVOVFJZKG5hbWUpCQlHRU5fRU5U UlkobmFtZSkKKyNkZWZpbmUgRkFLRV9NQ09VTlQoY2FsbGVyKQorI2RlZmluZSBNQ09VTlQKKyNk ZWZpbmUgTUNPVU5UX0xBQkVMKG5hbWUpCisjZGVmaW5lIE1FWElUQ09VTlQKKyNlbmRpZiAvKiBH UFJPRiAqLworCisvKgorICogQ29udmVuaWVuY2UgZm9yIGFkZGluZyBmcmFtZSBwb2ludGVycyB0 byBoYW5kLWNvZGVkIEFTTS4gIFVzZWZ1bCBmb3IKKyAqIERUcmFjZSwgSFdQTUMsIGFuZCBLREIu CisgKi8KKyNkZWZpbmUgUFVTSF9GUkFNRV9QT0lOVEVSCVwKKwlwdXNocQklcmJwIDsJCVwKKwlt b3ZxCSVyc3AsICVyYnAgOworI2RlZmluZSBQT1BfRlJBTUVfUE9JTlRFUglcCisJcG9wcQklcmJw CisKKyNpZmRlZiBMT0NPUkUKKy8qCisgKiBDb252ZW5pZW5jZSBtYWNybyBmb3IgZGVjbGFyaW5n IGludGVycnVwdCBlbnRyeSBwb2ludHMuCisgKi8KKyNkZWZpbmUJSURUVkVDKG5hbWUpCUFMSUdO X1RFWFQ7IC5nbG9ibCBfX0NPTkNBVChYLG5hbWUpOyBcCisJCQkudHlwZSBfX0NPTkNBVChYLG5h bWUpLEBmdW5jdGlvbjsgX19DT05DQVQoWCxuYW1lKToKKworLyoKKyAqIE1hY3JvcyB0byBjcmVh dGUgYW5kIGRlc3Ryb3kgYSB0cmFwIGZyYW1lLgorICovCisjZGVmaW5lIFBVU0hfRlJBTUUJCQkJ CQkJXAorCXN1YnEJJFRGX1JJUCwlcnNwIDsJLyogc2tpcCBkdW1teSB0Zl9lcnIgYW5kIHRmX3Ry YXBubyAqLwlcCisJdGVzdGIJJFNFTF9SUExfTUFTSyxURl9DUyglcnNwKSA7IC8qIGNvbWUgZnJv bSBrZXJuZWw/ICovCVwKKwlqegkxZiA7CQkvKiBZZXMsIGRvbnQgc3dhcGdzIGFnYWluICovCQlc CisJc3dhcGdzIDsJCQkJCQkJXAorMToJbW92cQklcmRpLFRGX1JESSglcnNwKSA7CQkJCQlcCisJ bW92cQklcnNpLFRGX1JTSSglcnNwKSA7CQkJCQlcCisJbW92cQklcmR4LFRGX1JEWCglcnNwKSA7 CQkJCQlcCisJbW92cQklcmN4LFRGX1JDWCglcnNwKSA7CQkJCQlcCisJbW92cQklcjgsVEZfUjgo JXJzcCkgOwkJCQkJXAorCW1vdnEJJXI5LFRGX1I5KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyYXgs VEZfUkFYKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyYngsVEZfUkJYKCVyc3ApIDsJCQkJCVwKKwlt b3ZxCSVyYnAsVEZfUkJQKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTAsVEZfUjEwKCVyc3ApIDsJ CQkJCVwKKwltb3ZxCSVyMTEsVEZfUjExKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTIsVEZfUjEy KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTMsVEZfUjEzKCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVy MTQsVEZfUjE0KCVyc3ApIDsJCQkJCVwKKwltb3ZxCSVyMTUsVEZfUjE1KCVyc3ApIDsJCQkJCVwK Kwltb3Z3CSVmcyxURl9GUyglcnNwKSA7CQkJCQlcCisJbW92dwklZ3MsVEZfR1MoJXJzcCkgOwkJ CQkJXAorCW1vdncJJWVzLFRGX0VTKCVyc3ApIDsJCQkJCVwKKwltb3Z3CSVkcyxURl9EUyglcnNw KSA7CQkJCQlcCisJbW92bAkkVEZfSEFTU0VHUyxURl9GTEFHUyglcnNwKSA7CQkJCVwKKwljbGQK KworI2RlZmluZSBQT1BfRlJBTUUJCQkJCQkJXAorCW1vdnEJVEZfUkRJKCVyc3ApLCVyZGkgOwkJ CQkJXAorCW1vdnEJVEZfUlNJKCVyc3ApLCVyc2kgOwkJCQkJXAorCW1vdnEJVEZfUkRYKCVyc3Ap LCVyZHggOwkJCQkJXAorCW1vdnEJVEZfUkNYKCVyc3ApLCVyY3ggOwkJCQkJXAorCW1vdnEJVEZf UjgoJXJzcCksJXI4IDsJCQkJCVwKKwltb3ZxCVRGX1I5KCVyc3ApLCVyOSA7CQkJCQlcCisJbW92 cQlURl9SQVgoJXJzcCksJXJheCA7CQkJCQlcCisJbW92cQlURl9SQlgoJXJzcCksJXJieCA7CQkJ CQlcCisJbW92cQlURl9SQlAoJXJzcCksJXJicCA7CQkJCQlcCisJbW92cQlURl9SMTAoJXJzcCks JXIxMCA7CQkJCQlcCisJbW92cQlURl9SMTEoJXJzcCksJXIxMSA7CQkJCQlcCisJbW92cQlURl9S MTIoJXJzcCksJXIxMiA7CQkJCQlcCisJbW92cQlURl9SMTMoJXJzcCksJXIxMyA7CQkJCQlcCisJ bW92cQlURl9SMTQoJXJzcCksJXIxNCA7CQkJCQlcCisJbW92cQlURl9SMTUoJXJzcCksJXIxNSA7 CQkJCQlcCisJdGVzdGIJJFNFTF9SUExfTUFTSyxURl9DUyglcnNwKSA7IC8qIGNvbWUgZnJvbSBr ZXJuZWw/ICovCVwKKwlqegkxZiA7CQkvKiBrZWVwIGtlcm5lbCBHUy5iYXNlICovCQlcCisJY2xp IDsJCQkJCQkJCVwKKwlzd2FwZ3MgOwkJCQkJCQlcCisxOglhZGRxCSRURl9SSVAsJXJzcAkvKiBz a2lwIG92ZXIgdGZfZXJyLCB0Zl90cmFwbm8gKi8KKworLyoKKyAqIEFjY2VzcyBwZXItQ1BVIGRh dGEuCisgKi8KKyNkZWZpbmUJUENQVShtZW1iZXIpCSVnczpQQ18gIyMgbWVtYmVyCisjZGVmaW5l CVBDUFVfQUREUihtZW1iZXIsIHJlZykJCQkJCVwKKwltb3ZxICVnczpQQ19QUlZTUEFDRSwgcmVn IDsJCQkJXAorCWFkZHEgJFBDXyAjIyBtZW1iZXIsIHJlZworCisjZW5kaWYgLyogTE9DT1JFICov CisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBFTEZOT1RFKG5hbWUsIHR5cGUsIGRlc2N0eXBl LCBkZXNjZGF0YS4uLikgXAorLnB1c2hzZWN0aW9uIC5ub3RlLm5hbWUgICAgICAgICAgICAgICAg IDsgICAgICAgXAorICAuYWxpZ24gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAg ICAgXAorICAubG9uZyAyZiAtIDFmICAgICAgICAgLyogbmFtZXN6ICovICAgIDsgICAgICAgXAor ICAubG9uZyA0ZiAtIDNmICAgICAgICAgLyogZGVzY3N6ICovICAgIDsgICAgICAgXAorICAubG9u ZyB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMTouYXNjaXogI25h bWUgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMjouYWxpZ24gNCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsgICAgICAgXAorMzpkZXNjdHlwZSBkZXNjZGF0YSAgICAg ICAgICAgICAgICAgICAgIDsgICAgICAgXAorNDouYWxpZ24gNCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsgICAgICAgXAorLnBvcHNlY3Rpb24KKyNlbHNlIC8qICFfX1NURENfXywgaS5l LiAtdHJhZGl0aW9uYWwgKi8KKyNkZWZpbmUgRUxGTk9URShuYW1lLCB0eXBlLCBkZXNjdHlwZSwg ZGVzY2RhdGEpIFwKKy5wdXNoc2VjdGlvbiAubm90ZS5uYW1lICAgICAgICAgICAgICAgICA7ICAg ICAgIFwKKyAgLmFsaWduIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwK KyAgLmxvbmcgMmYgLSAxZiAgICAgICAgIC8qIG5hbWVzeiAqLyAgICA7ICAgICAgIFwKKyAgLmxv bmcgNGYgLSAzZiAgICAgICAgIC8qIGRlc2NzeiAqLyAgICA7ICAgICAgIFwKKyAgLmxvbmcgdHlw ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzE6LmFzY2l6ICJuYW1lIiAg ICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzI6LmFsaWduIDQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7ICAgICAgIFwKKzM6ZGVzY3R5cGUgZGVzY2RhdGEgICAgICAgICAg ICAgICAgICAgICA7ICAgICAgIFwKKzQ6LmFsaWduIDQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7ICAgICAgIFwKKy5wb3BzZWN0aW9uCisjZW5kaWYgLyogX19TVERDX18gKi8KKworI2Vu ZGlmIC8qICFfTUFDSElORV9BU01BQ1JPU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYXRvbWljLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL21hY2hpbmUvYXRvbWljLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp bmUvYXRvbWljLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2F0b21pYy5oCTIwMTYtMDktMjkgMDA6MjQ6 NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNjI1IEBACisvKi0KKyAqIENvcHlyaWdodCAo YykgMTk5OCBEb3VnIFJhYnNvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvYXRvbWljLmggMjk5OTEyIDIwMTYtMDUt MTYgMDc6MTk6MzNaIHNlcGhlICQKKyAqLworI2lmbmRlZiBfTUFDSElORV9BVE9NSUNfSF8KKyNk ZWZpbmUJX01BQ0hJTkVfQVRPTUlDX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9y IHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisK Ky8qCisgKiBUbyBleHByZXNzIGludGVycHJvY2Vzc29yIChhcyBvcHBvc2VkIHRvIHByb2Nlc3Nv ciBhbmQgZGV2aWNlKSBtZW1vcnkKKyAqIG9yZGVyaW5nIGNvbnN0cmFpbnRzLCB1c2UgdGhlIGF0 b21pY18qKCkgZnVuY3Rpb25zIHdpdGggYWNxdWlyZSBhbmQgcmVsZWFzZQorICogc2VtYW50aWNz IHJhdGhlciB0aGFuIHRoZSAqbWIoKSBmdW5jdGlvbnMuICBBbiBhcmNoaXRlY3R1cmUncyBtZW1v cnkKKyAqIG9yZGVyaW5nIChvciBtZW1vcnkgY29uc2lzdGVuY3kpIG1vZGVsIGdvdmVybnMgdGhl IG9yZGVyIGluIHdoaWNoIGEKKyAqIHByb2dyYW0ncyBhY2Nlc3NlcyB0byBkaWZmZXJlbnQgbG9j YXRpb25zIG1heSBiZSBwZXJmb3JtZWQgYnkgYW4KKyAqIGltcGxlbWVudGF0aW9uIG9mIHRoYXQg YXJjaGl0ZWN0dXJlLiAgSW4gZ2VuZXJhbCwgZm9yIG1lbW9yeSByZWdpb25zCisgKiBkZWZpbmVk IGFzIHdyaXRlYmFjayBjYWNoZWFibGUsIHRoZSBtZW1vcnkgb3JkZXJpbmcgaW1wbGVtZW50ZWQg YnkgYW1kNjQKKyAqIHByb2Nlc3NvcnMgcHJlc2VydmVzIHRoZSBwcm9ncmFtIG9yZGVyaW5nIG9m IGEgbG9hZCBmb2xsb3dlZCBieSBhIGxvYWQsIGEKKyAqIGxvYWQgZm9sbG93ZWQgYnkgYSBzdG9y ZSwgYW5kIGEgc3RvcmUgZm9sbG93ZWQgYnkgYSBzdG9yZS4gIE9ubHkgYSBzdG9yZQorICogZm9s bG93ZWQgYnkgYSBsb2FkIHRvIGEgZGlmZmVyZW50IG1lbW9yeSBsb2NhdGlvbiBtYXkgYmUgcmVv cmRlcmVkLgorICogVGhlcmVmb3JlLCBleGNlcHQgZm9yIHNwZWNpYWwgY2FzZXMsIGxpa2Ugbm9u LXRlbXBvcmFsIG1lbW9yeSBhY2Nlc3NlcyBvcgorICogbWVtb3J5IHJlZ2lvbnMgZGVmaW5lZCBh cyB3cml0ZSBjb21iaW5pbmcsIHRoZSBtZW1vcnkgb3JkZXJpbmcgZWZmZWN0cworICogcHJvdmlk ZWQgYnkgdGhlIHNmZW5jZSBpbnN0cnVjdGlvbiBpbiB0aGUgd21iKCkgZnVuY3Rpb24gYW5kIHRo ZSBsZmVuY2UKKyAqIGluc3RydWN0aW9uIGluIHRoZSBybWIoKSBmdW5jdGlvbiBhcmUgcmVkdW5k YW50LiAgSW4gY29udHJhc3QsIHRoZQorICogYXRvbWljXyooKSBmdW5jdGlvbnMgd2l0aCBhY3F1 aXJlIGFuZCByZWxlYXNlIHNlbWFudGljcyBkbyBub3QgcGVyZm9ybQorICogcmVkdW5kYW50IGlu c3RydWN0aW9ucyBmb3Igb3JkaW5hcnkgY2FzZXMgb2YgaW50ZXJwcm9jZXNzb3IgbWVtb3J5Cisg KiBvcmRlcmluZyBvbiBhbnkgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lCW1iKCkJX19hc20g X192b2xhdGlsZSgibWZlbmNlOyIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lCXdtYigpCV9fYXNt IF9fdm9sYXRpbGUoInNmZW5jZTsiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZQlybWIoKQlfX2Fz bSBfX3ZvbGF0aWxlKCJsZmVuY2U7IiA6IDogOiAibWVtb3J5IikKKworLyoKKyAqIFZhcmlvdXMg c2ltcGxlIG9wZXJhdGlvbnMgb24gbWVtb3J5LCBlYWNoIG9mIHdoaWNoIGlzIGF0b21pYyBpbiB0 aGUKKyAqIHByZXNlbmNlIG9mIGludGVycnVwdHMgYW5kIG11bHRpcGxlIHByb2Nlc3NvcnMuCisg KgorICogYXRvbWljX3NldF9jaGFyKFAsIFYpCSgqKHVfY2hhciAqKShQKSB8PSAoVikpCisgKiBh dG9taWNfY2xlYXJfY2hhcihQLCBWKQkoKih1X2NoYXIgKikoUCkgJj0gfihWKSkKKyAqIGF0b21p Y19hZGRfY2hhcihQLCBWKQkoKih1X2NoYXIgKikoUCkgKz0gKFYpKQorICogYXRvbWljX3N1YnRy YWN0X2NoYXIoUCwgVikJKCoodV9jaGFyICopKFApIC09IChWKSkKKyAqCisgKiBhdG9taWNfc2V0 X3Nob3J0KFAsIFYpCSgqKHVfc2hvcnQgKikoUCkgfD0gKFYpKQorICogYXRvbWljX2NsZWFyX3No b3J0KFAsIFYpCSgqKHVfc2hvcnQgKikoUCkgJj0gfihWKSkKKyAqIGF0b21pY19hZGRfc2hvcnQo UCwgVikJKCoodV9zaG9ydCAqKShQKSArPSAoVikpCisgKiBhdG9taWNfc3VidHJhY3Rfc2hvcnQo UCwgVikJKCoodV9zaG9ydCAqKShQKSAtPSAoVikpCisgKgorICogYXRvbWljX3NldF9pbnQoUCwg VikJCSgqKHVfaW50ICopKFApIHw9IChWKSkKKyAqIGF0b21pY19jbGVhcl9pbnQoUCwgVikJKCoo dV9pbnQgKikoUCkgJj0gfihWKSkKKyAqIGF0b21pY19hZGRfaW50KFAsIFYpCQkoKih1X2ludCAq KShQKSArPSAoVikpCisgKiBhdG9taWNfc3VidHJhY3RfaW50KFAsIFYpCSgqKHVfaW50ICopKFAp IC09IChWKSkKKyAqIGF0b21pY19zd2FwX2ludChQLCBWKQkocmV0dXJuICgqKHVfaW50ICopKFAp KTsgKih1X2ludCAqKShQKSA9IChWKTspCisgKiBhdG9taWNfcmVhZGFuZGNsZWFyX2ludChQKQko cmV0dXJuICgqKHVfaW50ICopKFApKTsgKih1X2ludCAqKShQKSA9IDA7KQorICoKKyAqIGF0b21p Y19zZXRfbG9uZyhQLCBWKQkoKih1X2xvbmcgKikoUCkgfD0gKFYpKQorICogYXRvbWljX2NsZWFy X2xvbmcoUCwgVikJKCoodV9sb25nICopKFApICY9IH4oVikpCisgKiBhdG9taWNfYWRkX2xvbmco UCwgVikJKCoodV9sb25nICopKFApICs9IChWKSkKKyAqIGF0b21pY19zdWJ0cmFjdF9sb25nKFAs IFYpCSgqKHVfbG9uZyAqKShQKSAtPSAoVikpCisgKiBhdG9taWNfc3dhcF9sb25nKFAsIFYpCShy ZXR1cm4gKCoodV9sb25nICopKFApKTsgKih1X2xvbmcgKikoUCkgPSAoVik7KQorICogYXRvbWlj X3JlYWRhbmRjbGVhcl9sb25nKFApCShyZXR1cm4gKCoodV9sb25nICopKFApKTsgKih1X2xvbmcg KikoUCkgPSAwOykKKyAqLworCisvKgorICogVGhlIGFib3ZlIGZ1bmN0aW9ucyBhcmUgZXhwYW5k ZWQgaW5saW5lIGluIHRoZSBzdGF0aWNhbGx5LWxpbmtlZAorICoga2VybmVsLiAgTG9jayBwcmVm aXhlcyBhcmUgZ2VuZXJhdGVkIGlmIGFuIFNNUCBrZXJuZWwgaXMgYmVpbmcKKyAqIGJ1aWx0Lgor ICoKKyAqIEtlcm5lbCBtb2R1bGVzIGNhbGwgcmVhbCBmdW5jdGlvbnMgd2hpY2ggYXJlIGJ1aWx0 IGludG8gdGhlIGtlcm5lbC4KKyAqIFRoaXMgYWxsb3dzIGtlcm5lbCBtb2R1bGVzIHRvIGJlIHBv cnRhYmxlIGJldHdlZW4gVVAgYW5kIFNNUCBzeXN0ZW1zLgorICovCisjaWYgZGVmaW5lZChLTERf TU9EVUxFKSB8fCAhZGVmaW5lZChfX0dOVUNMSUtFX0FTTSkKKyNkZWZpbmUJQVRPTUlDX0FTTShO QU1FLCBUWVBFLCBPUCwgQ09OUywgVikJCQlcCit2b2lkIGF0b21pY18jI05BTUUjI18jI1RZUEUo dm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYpOwlcCit2b2lkIGF0b21pY18jI05BTUUj I19iYXJyXyMjVFlQRSh2b2xhdGlsZSB1XyMjVFlQRSAqcCwgdV8jI1RZUEUgdikKKworaW50CWF0 b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3QsIHVfaW50IGV4cGVjdCwgdV9pbnQg c3JjKTsKK2ludAlhdG9taWNfY21wc2V0X2xvbmcodm9sYXRpbGUgdV9sb25nICpkc3QsIHVfbG9u ZyBleHBlY3QsIHVfbG9uZyBzcmMpOwordV9pbnQJYXRvbWljX2ZldGNoYWRkX2ludCh2b2xhdGls ZSB1X2ludCAqcCwgdV9pbnQgdik7Cit1X2xvbmcJYXRvbWljX2ZldGNoYWRkX2xvbmcodm9sYXRp bGUgdV9sb25nICpwLCB1X2xvbmcgdik7CitpbnQJYXRvbWljX3Rlc3RhbmRzZXRfaW50KHZvbGF0 aWxlIHVfaW50ICpwLCB1X2ludCB2KTsKK2ludAlhdG9taWNfdGVzdGFuZHNldF9sb25nKHZvbGF0 aWxlIHVfbG9uZyAqcCwgdV9pbnQgdik7CitpbnQJYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQodm9s YXRpbGUgdV9pbnQgKnAsIHVfaW50IHYpOworaW50CWF0b21pY190ZXN0YW5kY2xlYXJfbG9uZyh2 b2xhdGlsZSB1X2xvbmcgKnAsIHVfaW50IHYpOwordm9pZAlhdG9taWNfdGhyZWFkX2ZlbmNlX2Fj cSh2b2lkKTsKK3ZvaWQJYXRvbWljX3RocmVhZF9mZW5jZV9hY3FfcmVsKHZvaWQpOwordm9pZAlh dG9taWNfdGhyZWFkX2ZlbmNlX3JlbCh2b2lkKTsKK3ZvaWQJYXRvbWljX3RocmVhZF9mZW5jZV9z ZXFfY3N0KHZvaWQpOworCisjZGVmaW5lCUFUT01JQ19MT0FEKFRZUEUpCQkJCQlcCit1XyMjVFlQ RQlhdG9taWNfbG9hZF9hY3FfIyNUWVBFKHZvbGF0aWxlIHVfIyNUWVBFICpwKQorI2RlZmluZQlB VE9NSUNfU1RPUkUoVFlQRSkJCQkJCVwKK3ZvaWQJCWF0b21pY19zdG9yZV9yZWxfIyNUWVBFKHZv bGF0aWxlIHVfIyNUWVBFICpwLCB1XyMjVFlQRSB2KQorCisjZWxzZSAvKiAhS0xEX01PRFVMRSAm JiBfX0dOVUNMSUtFX0FTTSAqLworCisvKgorICogRm9yIHVzZXJsYW5kLCBhbHdheXMgdXNlIGxv Y2sgcHJlZml4ZXMgc28gdGhhdCB0aGUgYmluYXJpZXMgd2lsbCBydW4KKyAqIG9uIGJvdGggU01Q IGFuZCAhU01QIHN5c3RlbXMuCisgKi8KKyNpZiBkZWZpbmVkKFNNUCkgfHwgIWRlZmluZWQoX0tF Uk5FTCkKKyNkZWZpbmUJTVBMT0NLRUQJImxvY2sgOyAiCisjZWxzZQorI2RlZmluZQlNUExPQ0tF RAorI2VuZGlmCisKKy8qCisgKiBUaGUgYXNzZW1ibHkgaXMgdm9sYXRpbGl6ZWQgdG8gYXZvaWQg Y29kZSBjaHVuayByZW1vdmFsIGJ5IHRoZSBjb21waWxlci4KKyAqIEdDQyBhZ2dyZXNzaXZlbHkg cmVvcmRlcnMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGNsb2JiZXJpbmcgaXMgbmVjZXNzYXJ5Cisg KiBpbiBvcmRlciB0byBhdm9pZCB0aGF0IGZvciBtZW1vcnkgYmFycmllcnMuCisgKi8KKyNkZWZp bmUJQVRPTUlDX0FTTShOQU1FLCBUWVBFLCBPUCwgQ09OUywgVikJCVwKK3N0YXRpYyBfX2lubGlu ZSB2b2lkCQkJCQlcCithdG9taWNfIyNOQU1FIyNfIyNUWVBFKHZvbGF0aWxlIHVfIyNUWVBFICpw LCB1XyMjVFlQRSB2KVwKK3sJCQkJCQkJXAorCV9fYXNtIF9fdm9sYXRpbGUoTVBMT0NLRUQgT1AJ CQlcCisJOiAiK20iICgqcCkJCQkJCVwKKwk6IENPTlMgKFYpCQkJCQlcCisJOiAiY2MiKTsJCQkJ CVwKK30JCQkJCQkJXAorCQkJCQkJCVwKK3N0YXRpYyBfX2lubGluZSB2b2lkCQkJCQlcCithdG9t aWNfIyNOQU1FIyNfYmFycl8jI1RZUEUodm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYp XAorewkJCQkJCQlcCisJX19hc20gX192b2xhdGlsZShNUExPQ0tFRCBPUAkJCVwKKwk6ICIrbSIg KCpwKQkJCQkJXAorCTogQ09OUyAoVikJCQkJCVwKKwk6ICJtZW1vcnkiLCAiY2MiKTsJCQkJXAor fQkJCQkJCQlcCitzdHJ1Y3QgX19oYWNrCisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgc2V0 LCB1c2VkIGJ5IHRoZSBtdXRleCBmdW5jdGlvbnMKKyAqCisgKiBpZiAoKmRzdCA9PSBleHBlY3Qp ICpkc3QgPSBzcmMgKGFsbCAzMiBiaXQgd29yZHMpCisgKgorICogUmV0dXJucyAwIG9uIGZhaWx1 cmUsIG5vbi16ZXJvIG9uIHN1Y2Nlc3MKKyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9t aWNfY21wc2V0X2ludCh2b2xhdGlsZSB1X2ludCAqZHN0LCB1X2ludCBleHBlY3QsIHVfaW50IHNy YykKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQg IgkJIgorCSIJY21weGNoZ2wgJTMsJTEgOwkiCisJIiAgICAgICBzZXRlCSUwIDsJCSIKKwkiIyBh dG9taWNfY21wc2V0X2ludCIKKwk6ICI9cSIgKHJlcyksCQkJLyogMCAqLworCSAgIittIiAoKmRz dCksCQkJLyogMSAqLworCSAgIithIiAoZXhwZWN0KQkJCS8qIDIgKi8KKwk6ICJyIiAoc3JjKQkJ CS8qIDMgKi8KKwk6ICJtZW1vcnkiLCAiY2MiKTsKKwlyZXR1cm4gKHJlcyk7Cit9CisKK3N0YXRp YyBfX2lubGluZSBpbnQKK2F0b21pY19jbXBzZXRfbG9uZyh2b2xhdGlsZSB1X2xvbmcgKmRzdCwg dV9sb25nIGV4cGVjdCwgdV9sb25nIHNyYykKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192 b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJY21weGNoZ3EgJTMsJTEgOwkiCisJIiAg ICAgICBzZXRlCSUwIDsJCSIKKwkiIyBhdG9taWNfY21wc2V0X2xvbmciCisJOiAiPXEiIChyZXMp LAkJCS8qIDAgKi8KKwkgICIrbSIgKCpkc3QpLAkJCS8qIDEgKi8KKwkgICIrYSIgKGV4cGVjdCkJ CQkvKiAyICovCisJOiAiciIgKHNyYykJCQkvKiAzICovCisJOiAibWVtb3J5IiwgImNjIik7CisJ cmV0dXJuIChyZXMpOworfQorCisvKgorICogQXRvbWljYWxseSBhZGQgdGhlIHZhbHVlIG9mIHYg dG8gdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSBwIGFuZCByZXR1cm4KKyAqIHRoZSBwcmV2aW91 cyB2YWx1ZSBvZiAqcC4KKyAqLworc3RhdGljIF9faW5saW5lIHVfaW50CithdG9taWNfZmV0Y2hh ZGRfaW50KHZvbGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KQoreworCisJX19hc20gX192b2xhdGls ZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJeGFkZGwJJTAsJTEgOwkJIgorCSIjIGF0b21pY19m ZXRjaGFkZF9pbnQiCisJOiAiK3IiICh2KSwJCQkvKiAwICovCisJICAiK20iICgqcCkJCQkvKiAx ICovCisJOiA6ICJjYyIpOworCXJldHVybiAodik7Cit9CisKKy8qCisgKiBBdG9taWNhbGx5IGFk ZCB0aGUgdmFsdWUgb2YgdiB0byB0aGUgbG9uZyBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQg cmV0dXJuCisgKiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCisgKi8KK3N0YXRpYyBfX2lubGlu ZSB1X2xvbmcKK2F0b21pY19mZXRjaGFkZF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9sb25n IHYpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJIiBNUExPQ0tFRCAiCQkiCisJIgl4YWRk cQklMCwlMSA7CQkiCisJIiMgYXRvbWljX2ZldGNoYWRkX2xvbmciCisJOiAiK3IiICh2KSwJCQkv KiAwICovCisJICAiK20iICgqcCkJCQkvKiAxICovCisJOiA6ICJjYyIpOworCXJldHVybiAodik7 Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK2F0b21pY190ZXN0YW5kc2V0X2ludCh2b2xhdGls ZSB1X2ludCAqcCwgdV9pbnQgdikKK3sKKwl1X2NoYXIgcmVzOworCisJX19hc20gX192b2xhdGls ZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJYnRzbAklMiwlMSA7CQkiCisJIglzZXRjCSUwIDsJ CSIKKwkiIyBhdG9taWNfdGVzdGFuZHNldF9pbnQiCisJOiAiPXEiIChyZXMpLAkJCS8qIDAgKi8K KwkgICIrbSIgKCpwKQkJCS8qIDEgKi8KKwk6ICJJciIgKHYgJiAweDFmKQkJLyogMiAqLworCTog ImNjIik7CisJcmV0dXJuIChyZXMpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9taWNf dGVzdGFuZHNldF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9pbnQgdikKK3sKKwl1X2NoYXIg cmVzOworCisJX19hc20gX192b2xhdGlsZSgKKwkiCSIgTVBMT0NLRUQgIgkJIgorCSIJYnRzcQkl MiwlMSA7CQkiCisJIglzZXRjCSUwIDsJCSIKKwkiIyBhdG9taWNfdGVzdGFuZHNldF9sb25nIgor CTogIj1xIiAocmVzKSwJCQkvKiAwICovCisJICAiK20iICgqcCkJCQkvKiAxICovCisJOiAiSnIi ICgodV9sb25nKSh2ICYgMHgzZikpCS8qIDIgKi8KKwk6ICJjYyIpOworCXJldHVybiAocmVzKTsK K30KKworc3RhdGljIF9faW5saW5lIGludAorYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQodm9sYXRp bGUgdV9pbnQgKnAsIHVfaW50IHYpCit7CisJdV9jaGFyIHJlczsKKworCV9fYXNtIF9fdm9sYXRp bGUoCisJIgkiIE1QTE9DS0VEICIJCSIKKwkiCWJ0cmwJJTIsJTEgOwkJIgorCSIJc2V0YwklMCA7 CQkiCisJIiMgYXRvbWljX3Rlc3RhbmRjbGVhcl9pbnQiCisJOiAiPXEiIChyZXMpLAkJCS8qIDAg Ki8KKwkgICIrbSIgKCpwKQkJCS8qIDEgKi8KKwk6ICJJciIgKHYgJiAweDFmKQkJLyogMiAqLwor CTogImNjIik7CisJcmV0dXJuIChyZXMpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50CithdG9t aWNfdGVzdGFuZGNsZWFyX2xvbmcodm9sYXRpbGUgdV9sb25nICpwLCB1X2ludCB2KQoreworCXVf Y2hhciByZXM7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJIiBNUExPQ0tFRCAiCQkiCisJIgli dHJxCSUyLCUxIDsJCSIKKwkiCXNldGMJJTAgOwkJIgorCSIjIGF0b21pY190ZXN0YW5kY2xlYXJf bG9uZyIKKwk6ICI9cSIgKHJlcyksCQkJLyogMCAqLworCSAgIittIiAoKnApCQkJLyogMSAqLwor CTogIkpyIiAoKHVfbG9uZykodiAmIDB4M2YpKQkvKiAyICovCisJOiAiY2MiKTsKKwlyZXR1cm4g KHJlcyk7Cit9CisKKy8qCisgKiBXZSBhc3N1bWUgdGhhdCBhID0gYiB3aWxsIGRvIGF0b21pYyBs b2FkcyBhbmQgc3RvcmVzLiAgRHVlIHRvIHRoZQorICogSUEzMiBtZW1vcnkgbW9kZWwsIGEgc2lt cGxlIHN0b3JlIGd1YXJhbnRlZXMgcmVsZWFzZSBzZW1hbnRpY3MuCisgKgorICogSG93ZXZlciwg YSBsb2FkIG1heSBwYXNzIGEgc3RvcmUgaWYgdGhleSBhcmUgcGVyZm9ybWVkIG9uIGRpc3RpbmN0 CisgKiBhZGRyZXNzZXMsIHNvIHdlIG5lZWQgYSBTdG9yZS9Mb2FkIGJhcnJpZXIgZm9yIHNlcXVl bnRpYWxseQorICogY29uc2lzdGVudCBmZW5jZXMgaW4gU01QIGtlcm5lbHMuICBXZSB1c2UgImxv Y2sgYWRkbCAkMCxtZW0iIGZvciBhCisgKiBTdG9yZS9Mb2FkIGJhcnJpZXIsIGFzIHJlY29tbWVu ZGVkIGJ5IHRoZSBBTUQgU29mdHdhcmUgT3B0aW1pemF0aW9uCisgKiBHdWlkZSwgYW5kIG5vdCBt ZmVuY2UuICBUbyBhdm9pZCBmYWxzZSBkYXRhIGRlcGVuZGVuY2llcywgd2UgdXNlIGEKKyAqIHNw ZWNpYWwgYWRkcmVzcyBmb3IgIm1lbSIuICBJbiB0aGUga2VybmVsLCB3ZSB1c2UgYSBwcml2YXRl IHBlci1jcHUKKyAqIGNhY2hlIGxpbmUuICBJbiB1c2VyIHNwYWNlLCB3ZSB1c2UgYSB3b3JkIGlu IHRoZSBzdGFjaydzIHJlZCB6b25lCisgKiAoLTgoJXJzcCkpLgorICoKKyAqIEZvciBVUCBrZXJu ZWxzLCBob3dldmVyLCB0aGUgbWVtb3J5IG9mIHRoZSBzaW5nbGUgcHJvY2Vzc29yIGlzCisgKiBh bHdheXMgY29uc2lzdGVudCwgc28gd2Ugb25seSBuZWVkIHRvIHN0b3AgdGhlIGNvbXBpbGVyIGZy b20KKyAqIHJlb3JkZXJpbmcgYWNjZXNzZXMgaW4gYSB3YXkgdGhhdCB2aW9sYXRlcyB0aGUgc2Vt YW50aWNzIG9mIGFjcXVpcmUKKyAqIGFuZCByZWxlYXNlLgorICovCisKKyNpZiBkZWZpbmVkKF9L RVJORUwpCisKKy8qCisgKiBPRkZTRVRPRl9NT05JVE9SQlVGID09IF9fcGNwdV9vZmZzZXQocGNf bW9uaXRvcmJ1ZikuCisgKgorICogVGhlIG9wZW4tY29kZWQgbnVtYmVyIGlzIHVzZWQgaW5zdGVh ZCBvZiB0aGUgc3ltYm9saWMgZXhwcmVzc2lvbiB0bworICogYXZvaWQgYSBkZXBlbmRlbmN5IG9u IHN5cy9wY3B1LmggaW4gbWFjaGluZS9hdG9taWMuaCBjb25zdW1lcnMuCisgKiBBbiBhc3NlcnRp b24gaW4gYW1kNjQvdm1fbWFjaGRlcC5jIGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgaXMgY29ycmVj dC4KKyAqLworI2RlZmluZQlPRkZTRVRPRl9NT05JVE9SQlVGCTB4MTgwCisKKyNpZiBkZWZpbmVk KFNNUCkKK3N0YXRpYyBfX2lubGluZSB2b2lkCitfX3N0b3JlbG9hZF9iYXJyaWVyKHZvaWQpCit7 CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLCUlZ3M6JTAiCisJICAgIDogIitt IiAoKih1X2ludCAqKU9GRlNFVE9GX01PTklUT1JCVUYpIDogOiAibWVtb3J5IiwgImNjIik7Cit9 CisjZWxzZSAvKiBfS0VSTkVMICYmIFVQICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAorX19zdG9y ZWxvYWRfYmFycmllcih2b2lkKQoreworCisJX19jb21waWxlcl9tZW1iYXIoKTsKK30KKyNlbmRp ZiAvKiBTTVAgKi8KKyNlbHNlIC8qICFfS0VSTkVMICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAor X19zdG9yZWxvYWRfYmFycmllcih2b2lkKQoreworCisJX19hc20gX192b2xhdGlsZSgibG9jazsg YWRkbCAkMCwtOCglJXJzcCkiIDogOiA6ICJtZW1vcnkiLCAiY2MiKTsKK30KKyNlbmRpZiAvKiBf S0VSTkVMKi8KKworI2RlZmluZQlBVE9NSUNfTE9BRChUWVBFKQkJCQkJXAorc3RhdGljIF9faW5s aW5lIHVfIyNUWVBFCQkJCQlcCithdG9taWNfbG9hZF9hY3FfIyNUWVBFKHZvbGF0aWxlIHVfIyNU WVBFICpwKQkJCVwKK3sJCQkJCQkJCVwKKwl1XyMjVFlQRSByZXM7CQkJCQkJXAorCQkJCQkJCQlc CisJcmVzID0gKnA7CQkJCQkJXAorCV9fY29tcGlsZXJfbWVtYmFyKCk7CQkJCQlcCisJcmV0dXJu IChyZXMpOwkJCQkJCVwKK30JCQkJCQkJCVwKK3N0cnVjdCBfX2hhY2sKKworI2RlZmluZQlBVE9N SUNfU1RPUkUoVFlQRSkJCQkJCVwKK3N0YXRpYyBfX2lubGluZSB2b2lkCQkJCQkJXAorYXRvbWlj X3N0b3JlX3JlbF8jI1RZUEUodm9sYXRpbGUgdV8jI1RZUEUgKnAsIHVfIyNUWVBFIHYpCVwKK3sJ CQkJCQkJCVwKKwkJCQkJCQkJXAorCV9fY29tcGlsZXJfbWVtYmFyKCk7CQkJCQlcCisJKnAgPSB2 OwkJCQkJCQlcCit9CQkJCQkJCQlcCitzdHJ1Y3QgX19oYWNrCisKK3N0YXRpYyBfX2lubGluZSB2 b2lkCithdG9taWNfdGhyZWFkX2ZlbmNlX2FjcSh2b2lkKQoreworCisJX19jb21waWxlcl9tZW1i YXIoKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY190aHJlYWRfZmVuY2VfcmVs KHZvaWQpCit7CisKKwlfX2NvbXBpbGVyX21lbWJhcigpOworfQorCitzdGF0aWMgX19pbmxpbmUg dm9pZAorYXRvbWljX3RocmVhZF9mZW5jZV9hY3FfcmVsKHZvaWQpCit7CisKKwlfX2NvbXBpbGVy X21lbWJhcigpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX3RocmVhZF9mZW5j ZV9zZXFfY3N0KHZvaWQpCit7CisKKwlfX3N0b3JlbG9hZF9iYXJyaWVyKCk7Cit9CisKKyNlbmRp ZiAvKiBLTERfTU9EVUxFIHx8ICFfX0dOVUNMSUtFX0FTTSAqLworCitBVE9NSUNfQVNNKHNldCwJ ICAgICBjaGFyLCAgIm9yYiAlYjEsJTAiLCAgImlxIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwg ICAgY2hhciwgICJhbmRiICViMSwlMCIsICJpcSIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAg IGNoYXIsICAiYWRkYiAlYjEsJTAiLCAiaXEiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBj aGFyLCAgInN1YmIgJWIxLCUwIiwgImlxIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBz aG9ydCwgIm9ydyAldzEsJTAiLCAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgc2hv cnQsICJhbmR3ICV3MSwlMCIsICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIHNob3J0 LCAiYWRkdyAldzEsJTAiLCAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBzaG9ydCwg InN1YncgJXcxLCUwIiwgImlyIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBpbnQsICAg Im9ybCAlMSwlMCIsICAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgaW50LCAgICJh bmRsICUxLCUwIiwgICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIGludCwgICAiYWRk bCAlMSwlMCIsICAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBpbnQsICAgInN1Ymwg JTEsJTAiLCAgImlyIiwgIHYpOworCitBVE9NSUNfQVNNKHNldCwJICAgICBsb25nLCAgIm9ycSAl MSwlMCIsICAgImlyIiwgIHYpOworQVRPTUlDX0FTTShjbGVhciwgICAgbG9uZywgICJhbmRxICUx LCUwIiwgICJpciIsIH52KTsKK0FUT01JQ19BU00oYWRkLAkgICAgIGxvbmcsICAiYWRkcSAlMSwl MCIsICAiaXIiLCAgdik7CitBVE9NSUNfQVNNKHN1YnRyYWN0LCBsb25nLCAgInN1YnEgJTEsJTAi LCAgImlyIiwgIHYpOworCisjZGVmaW5lCUFUT01JQ19MT0FEU1RPUkUoVFlQRSkJCQkJCVwKKwlB VE9NSUNfTE9BRChUWVBFKTsJCQkJCVwKKwlBVE9NSUNfU1RPUkUoVFlQRSkKKworQVRPTUlDX0xP QURTVE9SRShjaGFyKTsKK0FUT01JQ19MT0FEU1RPUkUoc2hvcnQpOworQVRPTUlDX0xPQURTVE9S RShpbnQpOworQVRPTUlDX0xPQURTVE9SRShsb25nKTsKKworI3VuZGVmIEFUT01JQ19BU00KKyN1 bmRlZiBBVE9NSUNfTE9BRAorI3VuZGVmIEFUT01JQ19TVE9SRQorI3VuZGVmIEFUT01JQ19MT0FE U1RPUkUKKyNpZm5kZWYgV0FOVF9GVU5DVElPTlMKKworLyogUmVhZCB0aGUgY3VycmVudCB2YWx1 ZSBhbmQgc3RvcmUgYSBuZXcgdmFsdWUgaW4gdGhlIGRlc3RpbmF0aW9uLiAqLworI2lmZGVmIF9f R05VQ0xJS0VfQVNNCisKK3N0YXRpYyBfX2lubGluZSB1X2ludAorYXRvbWljX3N3YXBfaW50KHZv bGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KQoreworCisJX19hc20gX192b2xhdGlsZSgKKwkiCXhj aGdsCSUxLCUwIDsJCSIKKwkiIyBhdG9taWNfc3dhcF9pbnQiCisJOiAiK3IiICh2KSwJCQkvKiAw ICovCisJICAiK20iICgqcCkpOwkJCS8qIDEgKi8KKwlyZXR1cm4gKHYpOworfQorCitzdGF0aWMg X19pbmxpbmUgdV9sb25nCithdG9taWNfc3dhcF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9s b25nIHYpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKAorCSIJeGNoZ3EJJTEsJTAgOwkJIgorCSIj IGF0b21pY19zd2FwX2xvbmciCisJOiAiK3IiICh2KSwJCQkvKiAwICovCisJICAiK20iICgqcCkp OwkJCS8qIDEgKi8KKwlyZXR1cm4gKHYpOworfQorCisjZWxzZSAvKiAhX19HTlVDTElLRV9BU00g Ki8KKwordV9pbnQJYXRvbWljX3N3YXBfaW50KHZvbGF0aWxlIHVfaW50ICpwLCB1X2ludCB2KTsK K3VfbG9uZwlhdG9taWNfc3dhcF9sb25nKHZvbGF0aWxlIHVfbG9uZyAqcCwgdV9sb25nIHYpOwor CisjZW5kaWYgLyogX19HTlVDTElLRV9BU00gKi8KKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9j aGFyCQlhdG9taWNfc2V0X2JhcnJfY2hhcgorI2RlZmluZQlhdG9taWNfc2V0X3JlbF9jaGFyCQlh dG9taWNfc2V0X2JhcnJfY2hhcgorI2RlZmluZQlhdG9taWNfY2xlYXJfYWNxX2NoYXIJCWF0b21p Y19jbGVhcl9iYXJyX2NoYXIKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3JlbF9jaGFyCQlhdG9taWNf Y2xlYXJfYmFycl9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfYWNxX2NoYXIJCWF0b21pY19hZGRf YmFycl9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfcmVsX2NoYXIJCWF0b21pY19hZGRfYmFycl9j aGFyCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfY2hhcglhdG9taWNfc3VidHJhY3RfYmFy cl9jaGFyCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfY2hhcglhdG9taWNfc3VidHJhY3Rf YmFycl9jaGFyCisKKyNkZWZpbmUJYXRvbWljX3NldF9hY3Ffc2hvcnQJCWF0b21pY19zZXRfYmFy cl9zaG9ydAorI2RlZmluZQlhdG9taWNfc2V0X3JlbF9zaG9ydAkJYXRvbWljX3NldF9iYXJyX3No b3J0CisjZGVmaW5lCWF0b21pY19jbGVhcl9hY3Ffc2hvcnQJCWF0b21pY19jbGVhcl9iYXJyX3No b3J0CisjZGVmaW5lCWF0b21pY19jbGVhcl9yZWxfc2hvcnQJCWF0b21pY19jbGVhcl9iYXJyX3No b3J0CisjZGVmaW5lCWF0b21pY19hZGRfYWNxX3Nob3J0CQlhdG9taWNfYWRkX2JhcnJfc2hvcnQK KyNkZWZpbmUJYXRvbWljX2FkZF9yZWxfc2hvcnQJCWF0b21pY19hZGRfYmFycl9zaG9ydAorI2Rl ZmluZQlhdG9taWNfc3VidHJhY3RfYWNxX3Nob3J0CWF0b21pY19zdWJ0cmFjdF9iYXJyX3Nob3J0 CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfc2hvcnQJYXRvbWljX3N1YnRyYWN0X2JhcnJf c2hvcnQKKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9pbnQJCWF0b21pY19zZXRfYmFycl9pbnQK KyNkZWZpbmUJYXRvbWljX3NldF9yZWxfaW50CQlhdG9taWNfc2V0X2JhcnJfaW50CisjZGVmaW5l CWF0b21pY19jbGVhcl9hY3FfaW50CQlhdG9taWNfY2xlYXJfYmFycl9pbnQKKyNkZWZpbmUJYXRv bWljX2NsZWFyX3JlbF9pbnQJCWF0b21pY19jbGVhcl9iYXJyX2ludAorI2RlZmluZQlhdG9taWNf YWRkX2FjcV9pbnQJCWF0b21pY19hZGRfYmFycl9pbnQKKyNkZWZpbmUJYXRvbWljX2FkZF9yZWxf aW50CQlhdG9taWNfYWRkX2JhcnJfaW50CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfaW50 CQlhdG9taWNfc3VidHJhY3RfYmFycl9pbnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X3JlbF9p bnQJCWF0b21pY19zdWJ0cmFjdF9iYXJyX2ludAorI2RlZmluZQlhdG9taWNfY21wc2V0X2FjcV9p bnQJCWF0b21pY19jbXBzZXRfaW50CisjZGVmaW5lCWF0b21pY19jbXBzZXRfcmVsX2ludAkJYXRv bWljX2NtcHNldF9pbnQKKworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9sb25nCQlhdG9taWNfc2V0 X2JhcnJfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X3JlbF9sb25nCQlhdG9taWNfc2V0X2JhcnJf bG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfYWNxX2xvbmcJCWF0b21pY19jbGVhcl9iYXJyX2xv bmcKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3JlbF9sb25nCQlhdG9taWNfY2xlYXJfYmFycl9sb25n CisjZGVmaW5lCWF0b21pY19hZGRfYWNxX2xvbmcJCWF0b21pY19hZGRfYmFycl9sb25nCisjZGVm aW5lCWF0b21pY19hZGRfcmVsX2xvbmcJCWF0b21pY19hZGRfYmFycl9sb25nCisjZGVmaW5lCWF0 b21pY19zdWJ0cmFjdF9hY3FfbG9uZwlhdG9taWNfc3VidHJhY3RfYmFycl9sb25nCisjZGVmaW5l CWF0b21pY19zdWJ0cmFjdF9yZWxfbG9uZwlhdG9taWNfc3VidHJhY3RfYmFycl9sb25nCisjZGVm aW5lCWF0b21pY19jbXBzZXRfYWNxX2xvbmcJCWF0b21pY19jbXBzZXRfbG9uZworI2RlZmluZQlh dG9taWNfY21wc2V0X3JlbF9sb25nCQlhdG9taWNfY21wc2V0X2xvbmcKKworI2RlZmluZQlhdG9t aWNfcmVhZGFuZGNsZWFyX2ludChwKQlhdG9taWNfc3dhcF9pbnQocCwgMCkKKyNkZWZpbmUJYXRv bWljX3JlYWRhbmRjbGVhcl9sb25nKHApCWF0b21pY19zd2FwX2xvbmcocCwgMCkKKworLyogT3Bl cmF0aW9ucyBvbiA4LWJpdCBieXRlcy4gKi8KKyNkZWZpbmUJYXRvbWljX3NldF84CQlhdG9taWNf c2V0X2NoYXIKKyNkZWZpbmUJYXRvbWljX3NldF9hY3FfOAlhdG9taWNfc2V0X2FjcV9jaGFyCisj ZGVmaW5lCWF0b21pY19zZXRfcmVsXzgJYXRvbWljX3NldF9yZWxfY2hhcgorI2RlZmluZQlhdG9t aWNfY2xlYXJfOAkJYXRvbWljX2NsZWFyX2NoYXIKKyNkZWZpbmUJYXRvbWljX2NsZWFyX2FjcV84 CWF0b21pY19jbGVhcl9hY3FfY2hhcgorI2RlZmluZQlhdG9taWNfY2xlYXJfcmVsXzgJYXRvbWlj X2NsZWFyX3JlbF9jaGFyCisjZGVmaW5lCWF0b21pY19hZGRfOAkJYXRvbWljX2FkZF9jaGFyCisj ZGVmaW5lCWF0b21pY19hZGRfYWNxXzgJYXRvbWljX2FkZF9hY3FfY2hhcgorI2RlZmluZQlhdG9t aWNfYWRkX3JlbF84CWF0b21pY19hZGRfcmVsX2NoYXIKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0 XzgJYXRvbWljX3N1YnRyYWN0X2NoYXIKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X2FjcV84CWF0 b21pY19zdWJ0cmFjdF9hY3FfY2hhcgorI2RlZmluZQlhdG9taWNfc3VidHJhY3RfcmVsXzgJYXRv bWljX3N1YnRyYWN0X3JlbF9jaGFyCisjZGVmaW5lCWF0b21pY19sb2FkX2FjcV84CWF0b21pY19s b2FkX2FjcV9jaGFyCisjZGVmaW5lCWF0b21pY19zdG9yZV9yZWxfOAlhdG9taWNfc3RvcmVfcmVs X2NoYXIKKworLyogT3BlcmF0aW9ucyBvbiAxNi1iaXQgd29yZHMuICovCisjZGVmaW5lCWF0b21p Y19zZXRfMTYJCWF0b21pY19zZXRfc2hvcnQKKyNkZWZpbmUJYXRvbWljX3NldF9hY3FfMTYJYXRv bWljX3NldF9hY3Ffc2hvcnQKKyNkZWZpbmUJYXRvbWljX3NldF9yZWxfMTYJYXRvbWljX3NldF9y ZWxfc2hvcnQKKyNkZWZpbmUJYXRvbWljX2NsZWFyXzE2CQlhdG9taWNfY2xlYXJfc2hvcnQKKyNk ZWZpbmUJYXRvbWljX2NsZWFyX2FjcV8xNglhdG9taWNfY2xlYXJfYWNxX3Nob3J0CisjZGVmaW5l CWF0b21pY19jbGVhcl9yZWxfMTYJYXRvbWljX2NsZWFyX3JlbF9zaG9ydAorI2RlZmluZQlhdG9t aWNfYWRkXzE2CQlhdG9taWNfYWRkX3Nob3J0CisjZGVmaW5lCWF0b21pY19hZGRfYWNxXzE2CWF0 b21pY19hZGRfYWNxX3Nob3J0CisjZGVmaW5lCWF0b21pY19hZGRfcmVsXzE2CWF0b21pY19hZGRf cmVsX3Nob3J0CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF8xNglhdG9taWNfc3VidHJhY3Rfc2hv cnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0X2FjcV8xNglhdG9taWNfc3VidHJhY3RfYWNxX3No b3J0CisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfMTYJYXRvbWljX3N1YnRyYWN0X3JlbF9z aG9ydAorI2RlZmluZQlhdG9taWNfbG9hZF9hY3FfMTYJYXRvbWljX2xvYWRfYWNxX3Nob3J0Cisj ZGVmaW5lCWF0b21pY19zdG9yZV9yZWxfMTYJYXRvbWljX3N0b3JlX3JlbF9zaG9ydAorCisvKiBP cGVyYXRpb25zIG9uIDMyLWJpdCBkb3VibGUgd29yZHMuICovCisjZGVmaW5lCWF0b21pY19zZXRf MzIJCWF0b21pY19zZXRfaW50CisjZGVmaW5lCWF0b21pY19zZXRfYWNxXzMyCWF0b21pY19zZXRf YWNxX2ludAorI2RlZmluZQlhdG9taWNfc2V0X3JlbF8zMglhdG9taWNfc2V0X3JlbF9pbnQKKyNk ZWZpbmUJYXRvbWljX2NsZWFyXzMyCQlhdG9taWNfY2xlYXJfaW50CisjZGVmaW5lCWF0b21pY19j bGVhcl9hY3FfMzIJYXRvbWljX2NsZWFyX2FjcV9pbnQKKyNkZWZpbmUJYXRvbWljX2NsZWFyX3Jl bF8zMglhdG9taWNfY2xlYXJfcmVsX2ludAorI2RlZmluZQlhdG9taWNfYWRkXzMyCQlhdG9taWNf YWRkX2ludAorI2RlZmluZQlhdG9taWNfYWRkX2FjcV8zMglhdG9taWNfYWRkX2FjcV9pbnQKKyNk ZWZpbmUJYXRvbWljX2FkZF9yZWxfMzIJYXRvbWljX2FkZF9yZWxfaW50CisjZGVmaW5lCWF0b21p Y19zdWJ0cmFjdF8zMglhdG9taWNfc3VidHJhY3RfaW50CisjZGVmaW5lCWF0b21pY19zdWJ0cmFj dF9hY3FfMzIJYXRvbWljX3N1YnRyYWN0X2FjcV9pbnQKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0 X3JlbF8zMglhdG9taWNfc3VidHJhY3RfcmVsX2ludAorI2RlZmluZQlhdG9taWNfbG9hZF9hY3Ff MzIJYXRvbWljX2xvYWRfYWNxX2ludAorI2RlZmluZQlhdG9taWNfc3RvcmVfcmVsXzMyCWF0b21p Y19zdG9yZV9yZWxfaW50CisjZGVmaW5lCWF0b21pY19jbXBzZXRfMzIJYXRvbWljX2NtcHNldF9p bnQKKyNkZWZpbmUJYXRvbWljX2NtcHNldF9hY3FfMzIJYXRvbWljX2NtcHNldF9hY3FfaW50Cisj ZGVmaW5lCWF0b21pY19jbXBzZXRfcmVsXzMyCWF0b21pY19jbXBzZXRfcmVsX2ludAorI2RlZmlu ZQlhdG9taWNfc3dhcF8zMgkJYXRvbWljX3N3YXBfaW50CisjZGVmaW5lCWF0b21pY19yZWFkYW5k Y2xlYXJfMzIJYXRvbWljX3JlYWRhbmRjbGVhcl9pbnQKKyNkZWZpbmUJYXRvbWljX2ZldGNoYWRk XzMyCWF0b21pY19mZXRjaGFkZF9pbnQKKyNkZWZpbmUJYXRvbWljX3Rlc3RhbmRzZXRfMzIJYXRv bWljX3Rlc3RhbmRzZXRfaW50CisjZGVmaW5lCWF0b21pY190ZXN0YW5kY2xlYXJfMzIJYXRvbWlj X3Rlc3RhbmRjbGVhcl9pbnQKKworLyogT3BlcmF0aW9ucyBvbiA2NC1iaXQgcXVhZCB3b3Jkcy4g Ki8KKyNkZWZpbmUJYXRvbWljX3NldF82NAkJYXRvbWljX3NldF9sb25nCisjZGVmaW5lCWF0b21p Y19zZXRfYWNxXzY0CWF0b21pY19zZXRfYWNxX2xvbmcKKyNkZWZpbmUJYXRvbWljX3NldF9yZWxf NjQJYXRvbWljX3NldF9yZWxfbG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfNjQJCWF0b21pY19j bGVhcl9sb25nCisjZGVmaW5lCWF0b21pY19jbGVhcl9hY3FfNjQJYXRvbWljX2NsZWFyX2FjcV9s b25nCisjZGVmaW5lCWF0b21pY19jbGVhcl9yZWxfNjQJYXRvbWljX2NsZWFyX3JlbF9sb25nCisj ZGVmaW5lCWF0b21pY19hZGRfNjQJCWF0b21pY19hZGRfbG9uZworI2RlZmluZQlhdG9taWNfYWRk X2FjcV82NAlhdG9taWNfYWRkX2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19hZGRfcmVsXzY0CWF0 b21pY19hZGRfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX3N1YnRyYWN0XzY0CWF0b21pY19zdWJ0 cmFjdF9sb25nCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfNjQJYXRvbWljX3N1YnRyYWN0 X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9yZWxfNjQJYXRvbWljX3N1YnRyYWN0 X3JlbF9sb25nCisjZGVmaW5lCWF0b21pY19sb2FkX2FjcV82NAlhdG9taWNfbG9hZF9hY3FfbG9u ZworI2RlZmluZQlhdG9taWNfc3RvcmVfcmVsXzY0CWF0b21pY19zdG9yZV9yZWxfbG9uZworI2Rl ZmluZQlhdG9taWNfY21wc2V0XzY0CWF0b21pY19jbXBzZXRfbG9uZworI2RlZmluZQlhdG9taWNf Y21wc2V0X2FjcV82NAlhdG9taWNfY21wc2V0X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19jbXBz ZXRfcmVsXzY0CWF0b21pY19jbXBzZXRfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX3N3YXBfNjQJ CWF0b21pY19zd2FwX2xvbmcKKyNkZWZpbmUJYXRvbWljX3JlYWRhbmRjbGVhcl82NAlhdG9taWNf cmVhZGFuZGNsZWFyX2xvbmcKKyNkZWZpbmUJYXRvbWljX2ZldGNoYWRkXzY0CWF0b21pY19mZXRj aGFkZF9sb25nCisjZGVmaW5lCWF0b21pY190ZXN0YW5kc2V0XzY0CWF0b21pY190ZXN0YW5kc2V0 X2xvbmcKKyNkZWZpbmUJYXRvbWljX3Rlc3RhbmRjbGVhcl82NAlhdG9taWNfdGVzdGFuZGNsZWFy X2xvbmcKKworLyogT3BlcmF0aW9ucyBvbiBwb2ludGVycy4gKi8KKyNkZWZpbmUJYXRvbWljX3Nl dF9wdHIJCWF0b21pY19zZXRfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X2FjcV9wdHIJYXRvbWlj X3NldF9hY3FfbG9uZworI2RlZmluZQlhdG9taWNfc2V0X3JlbF9wdHIJYXRvbWljX3NldF9yZWxf bG9uZworI2RlZmluZQlhdG9taWNfY2xlYXJfcHRyCWF0b21pY19jbGVhcl9sb25nCisjZGVmaW5l CWF0b21pY19jbGVhcl9hY3FfcHRyCWF0b21pY19jbGVhcl9hY3FfbG9uZworI2RlZmluZQlhdG9t aWNfY2xlYXJfcmVsX3B0cglhdG9taWNfY2xlYXJfcmVsX2xvbmcKKyNkZWZpbmUJYXRvbWljX2Fk ZF9wdHIJCWF0b21pY19hZGRfbG9uZworI2RlZmluZQlhdG9taWNfYWRkX2FjcV9wdHIJYXRvbWlj X2FkZF9hY3FfbG9uZworI2RlZmluZQlhdG9taWNfYWRkX3JlbF9wdHIJYXRvbWljX2FkZF9yZWxf bG9uZworI2RlZmluZQlhdG9taWNfc3VidHJhY3RfcHRyCWF0b21pY19zdWJ0cmFjdF9sb25nCisj ZGVmaW5lCWF0b21pY19zdWJ0cmFjdF9hY3FfcHRyCWF0b21pY19zdWJ0cmFjdF9hY3FfbG9uZwor I2RlZmluZQlhdG9taWNfc3VidHJhY3RfcmVsX3B0cglhdG9taWNfc3VidHJhY3RfcmVsX2xvbmcK KyNkZWZpbmUJYXRvbWljX2xvYWRfYWNxX3B0cglhdG9taWNfbG9hZF9hY3FfbG9uZworI2RlZmlu ZQlhdG9taWNfc3RvcmVfcmVsX3B0cglhdG9taWNfc3RvcmVfcmVsX2xvbmcKKyNkZWZpbmUJYXRv bWljX2NtcHNldF9wdHIJYXRvbWljX2NtcHNldF9sb25nCisjZGVmaW5lCWF0b21pY19jbXBzZXRf YWNxX3B0cglhdG9taWNfY21wc2V0X2FjcV9sb25nCisjZGVmaW5lCWF0b21pY19jbXBzZXRfcmVs X3B0cglhdG9taWNfY21wc2V0X3JlbF9sb25nCisjZGVmaW5lCWF0b21pY19zd2FwX3B0cgkJYXRv bWljX3N3YXBfbG9uZworI2RlZmluZQlhdG9taWNfcmVhZGFuZGNsZWFyX3B0cglhdG9taWNfcmVh ZGFuZGNsZWFyX2xvbmcKKworI2VuZGlmIC8qICFXQU5UX0ZVTkNUSU9OUyAqLworCisjZW5kaWYg LyogIV9NQUNISU5FX0FUT01JQ19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvYnVzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp bmUvYnVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYnVzLmgJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC9tYWNoaW5lL2J1cy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAw CkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21h aW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9idXMu aCAyNDQxOTEgMjAxMi0xMi0xMyAyMToyNzoyMFogamltaGFycmlzICQgKi8KKworI2luY2x1ZGUg PHg4Ni9idXMuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo aW5lL2J1c19kbWEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9idXNfZG1h LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvYnVzX2RtYS5oCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9idXNfZG1hLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAx MDAKQEAgLTAsMCArMSwzNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2NvdHQgTG9u ZworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lz L2FtZDY0L2luY2x1ZGUvYnVzX2RtYS5oIDE0ODI3NSAyMDA1LTA3LTIyIDA0OjAzOjI1WiBvYnJp ZW4gJAorICovCisKKyNpZm5kZWYgX0FNRDY0X0JVU19ETUFfSF8KKyNkZWZpbmUgX0FNRDY0X0JV U19ETUFfSF8KKworI2luY2x1ZGUgPHN5cy9idXNfZG1hLmg+CisKKyNlbmRpZiAvKiBfQU1ENjRf QlVTX0RNQV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvY2xvY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jbG9jay5o Ci0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2Nsb2NrLmgJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL2Nsb2NrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAg LTAsMCArMSw0NSBAQAorLyotCisgKiBLZXJuZWwgaW50ZXJmYWNlIHRvIG1hY2hpbmUtZGVwZW5k ZW50IGNsb2NrIGRyaXZlci4KKyAqIEdhcnJldHQgV29sbG1hbiwgU2VwdGVtYmVyIDE5OTQuCisg KiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKgorICogJEZyZWVCU0Q6IHJl bGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2Nsb2NrLmggMjYzMDA4IDIwMTQtMDMtMTEgMTA6 MjA6NDJaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9DTE9DS19IXworI2RlZmlu ZQlfTUFDSElORV9DTE9DS19IXworCisjaWZkZWYgX0tFUk5FTAorLyoKKyAqIGkzODYgdG8gY2xv Y2sgZHJpdmVyIGludGVyZmFjZS4KKyAqIFhYWCBsYXJnZSBwYXJ0cyBvZiB0aGUgZHJpdmVyIGFu ZCBpdHMgaW50ZXJmYWNlIGFyZSBtaXNwbGFjZWQuCisgKi8KK2V4dGVybiBpbnQJY2xraW50cl9w ZW5kaW5nOworZXh0ZXJuIHVfaW50CWk4MjU0X2ZyZXE7CitleHRlcm4gaW50CWk4MjU0X21heF9j b3VudDsKK2V4dGVybiB1aW50NjRfdAl0c2NfZnJlcTsKK2V4dGVybiBpbnQJdHNjX2lzX2ludmFy aWFudDsKK2V4dGVybiBpbnQJdHNjX3BlcmZfc3RhdDsKKyNpZmRlZiBTTVAKK2V4dGVybiBpbnQJ c21wX3RzYzsKKyNlbmRpZgorCit2b2lkCWk4MjU0X2luaXQodm9pZCk7Cit2b2lkCWk4MjU0X2Rl bGF5KGludCk7Cit2b2lkCWNsb2NrX2luaXQodm9pZCk7CisKKy8qCisgKiBEcml2ZXIgdG8gY2xv Y2sgZHJpdmVyIGludGVyZmFjZS4KKyAqLworCit2b2lkCXN0YXJ0cnRjbG9jayh2b2lkKTsKK3Zv aWQJaW5pdF9UU0Modm9pZCk7CisKKyNkZWZpbmUJSEFTX1RJTUVSX1NQS1IgMQoraW50CXRpbWVy X3Nwa3JfYWNxdWlyZSh2b2lkKTsKK2ludAl0aW1lcl9zcGtyX3JlbGVhc2Uodm9pZCk7Cit2b2lk CXRpbWVyX3Nwa3Jfc2V0ZnJlcShpbnQgZnJlcSk7CisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisK KyNlbmRpZiAvKiAhX01BQ0hJTkVfQ0xPQ0tfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NvdW50ZXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9jb3VudGVyLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvY291bnRlci5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jb3VudGVyLmgJMjAxNi0wOS0yOSAw MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4OSBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMTIgS29uc3RhbnRpbiBCZWxvdXNvdiA8a2liQEZyZWVCU0Qub3JnPgorICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg KiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu Y2x1ZGUvY291bnRlci5oIDMwMjM3MiAyMDE2LTA3LTA2IDE0OjA5OjQ5WiBud2hpdGVob3JuICQK KyAqLworCisjaWZuZGVmIF9fTUFDSElORV9DT1VOVEVSX0hfXworI2RlZmluZSBfX01BQ0hJTkVf Q09VTlRFUl9IX18KKworI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisKK2V4dGVybiBzdHJ1Y3QgcGNw dSBfX3BjcHVbMV07CisKKyNkZWZpbmUJY291bnRlcl9lbnRlcigpCWRvIHt9IHdoaWxlICgwKQor I2RlZmluZQljb3VudGVyX2V4aXQoKQlkbyB7fSB3aGlsZSAoMCkKKworI2lmZGVmIElOX1NVQlJf Q09VTlRFUl9DCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90Citjb3VudGVyX3U2NF9yZWFkX29uZSh1 aW50NjRfdCAqcCwgaW50IGNwdSkKK3sKKworCXJldHVybiAoKih1aW50NjRfdCAqKSgoY2hhciAq KXAgKyBzaXplb2Yoc3RydWN0IHBjcHUpICogY3B1KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWlu dDY0X3QKK2NvdW50ZXJfdTY0X2ZldGNoX2lubGluZSh1aW50NjRfdCAqcCkKK3sKKwl1aW50NjRf dCByOworCWludCBpOworCisJciA9IDA7CisJQ1BVX0ZPUkVBQ0goaSkKKwkJciArPSBjb3VudGVy X3U2NF9yZWFkX29uZSgodWludDY0X3QgKilwLCBpKTsKKworCXJldHVybiAocik7Cit9CisKK3N0 YXRpYyB2b2lkCitjb3VudGVyX3U2NF96ZXJvX29uZV9jcHUodm9pZCAqYXJnKQoreworCisJKigo dWludDY0X3QgKikoKGNoYXIgKilhcmcgKyBzaXplb2Yoc3RydWN0IHBjcHUpICoKKwkgICAgUENQ VV9HRVQoY3B1aWQpKSkgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NvdW50ZXJfdTY0 X3plcm9faW5saW5lKGNvdW50ZXJfdTY0X3QgYykKK3sKKworCXNtcF9yZW5kZXp2b3VzKHNtcF9u b19yZW5kZXZvdXNfYmFycmllciwgY291bnRlcl91NjRfemVyb19vbmVfY3B1LAorCSAgICBzbXBf bm9fcmVuZGV2b3VzX2JhcnJpZXIsIGMpOworfQorI2VuZGlmCisKKyNkZWZpbmUJY291bnRlcl91 NjRfYWRkX3Byb3RlY3RlZChjLCBpKQljb3VudGVyX3U2NF9hZGQoYywgaSkKKworc3RhdGljIGlu bGluZSB2b2lkCitjb3VudGVyX3U2NF9hZGQoY291bnRlcl91NjRfdCBjLCBpbnQ2NF90IGluYykK K3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImFkZHFcdCUxLCUlZ3M6KCUwKSIKKwkgICAgOgorCSAg ICA6ICJyIiAoKGNoYXIgKiljIC0gKGNoYXIgKikmX19wY3B1WzBdKSwgInJpIiAoaW5jKQorCSAg ICA6ICJtZW1vcnkiLCAiY2MiKTsKK30KKworI2VuZGlmCS8qICEgX19NQUNISU5FX0NPVU5URVJf SF9fICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9j cHUuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHUuaAotLS0gdXNyL3Ny Yy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAw MDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1 LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5MyBAQAor LyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2Rl IGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICog V2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBV bml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJl IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05U UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBP UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdF UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCWZy b206IEAoIyljcHUuaAk1LjQgKEJlcmtlbGV5KSA1LzkvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcv MTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9jcHUuaCAyNjc1MjYgMjAxNC0wNi0xNiAwODo0MzowM1og cm95Z2VyICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX0NQVV9IXworI2RlZmluZQlfTUFDSElO RV9DUFVfSF8KKworLyoKKyAqIERlZmluaXRpb25zIHVuaXF1ZSB0byBpMzg2IGNwdSBzdXBwb3J0 LgorICovCisjaW5jbHVkZSA8bWFjaGluZS9wc2wuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1l Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9zZWdtZW50cy5oPgorCisjZGVmaW5lCWNwdV9leGVjKHAp CS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUJY3B1X3N3YXBpbihwKQkvKiBub3RoaW5nICovCisjZGVm aW5lCWNwdV9nZXRzdGFjayh0ZCkJCSgodGQpLT50ZF9mcmFtZS0+dGZfcnNwKQorI2RlZmluZQlj cHVfc2V0c3RhY2sodGQsIGFwKQkJKCh0ZCktPnRkX2ZyYW1lLT50Zl9yc3AgPSAoYXApKQorI2Rl ZmluZQljcHVfc3BpbndhaXQoKQkJCWlhMzJfcGF1c2UoKQorCisjZGVmaW5lCVRSQVBGX1VTRVJN T0RFKGZyYW1lcCkgXAorCShJU1BMKChmcmFtZXApLT50Zl9jcykgPT0gU0VMX1VQTCkKKyNkZWZp bmUJVFJBUEZfUEMoZnJhbWVwKQkoKGZyYW1lcCktPnRmX3JpcCkKKworI2lmZGVmIF9LRVJORUwK Ky8qCisgKiBTdHJ1Y3QgY29udGFpbmluZyBwb2ludGVycyB0byBDUFUgbWFuYWdlbWVudCBmdW5j dGlvbnMgd2hvc2UKKyAqIGltcGxlbWVudGF0aW9uIGlzIHJ1biB0aW1lIHNlbGVjdGFibGUuICBT ZWxlY3Rpb24gY2FuIGJlIG1hZGUsCisgKiBmb3IgZXhhbXBsZSwgYmFzZWQgb24gZGV0ZWN0aW9u IG9mIGEgcGFydGljdWxhciBDUFUgdmFyaWFudCBvcgorICogaHlwZXJ2aXNvciBlbnZpcm9ubWVu dC4KKyAqLworc3RydWN0IGNwdV9vcHMgeworCXZvaWQgKCpjcHVfaW5pdCkodm9pZCk7CisJdm9p ZCAoKmNwdV9yZXN1bWUpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdAljcHVfb3BzIGNwdV9v cHM7CitleHRlcm4gY2hhcglidGV4dFtdOworZXh0ZXJuIGNoYXIJZXRleHRbXTsKKworLyogUmVz dW1lIGhvb2sgZm9yIFZNTS4gKi8KK2V4dGVybgl2b2lkICgqdm1tX3Jlc3VtZV9wKSh2b2lkKTsK Kwordm9pZAljcHVfaGFsdCh2b2lkKTsKK3ZvaWQJY3B1X3Jlc2V0KHZvaWQpOwordm9pZAlmb3Jr X3RyYW1wb2xpbmUodm9pZCk7Cit2b2lkCXN3aV92bSh2b2lkICopOworCisvKgorICogUmV0dXJu IGNvbnRlbnRzIG9mIGluLWNwdSBmYXN0IGNvdW50ZXIgYXMgYSBzb3J0IG9mICJib2dvLXRpbWUi CisgKiBmb3IgcmFuZG9tLWhhcnZlc3RpbmcgcHVycG9zZXMuCisgKi8KK3N0YXRpYyBfX2lubGlu ZSB1X2ludDY0X3QKK2dldF9jeWNsZWNvdW50KHZvaWQpCit7CisKKwlyZXR1cm4gKHJkdHNjKCkp OworfQorCisjZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9DUFVfSF8gKi8KZGlmZiAtdSAt ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NwdWZ1bmMuaCAvdXNyL3Ny Yy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHVmdW5jLmgKLS0tIHVzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1ZnVuYy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHVmdW5j LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4NzEgQEAK Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIFBldGVyIFdlbW0uCisgKiBDb3B5cmlnaHQgKGMp IDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo ZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBD T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5U UyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9jcHVmdW5jLmggMjkxNjg4 IDIwMTUtMTItMDMgMTE6MTQ6MTRaIGtpYiAkCisgKi8KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBw cm92aWRlIGFjY2VzcyB0byBzcGVjaWFsIGkzODYgaW5zdHJ1Y3Rpb25zLgorICogVGhpcyBpbiBp bmNsdWRlZCBpbiBzeXMvc3lzdG0uaCwgYW5kIHRoYXQgZmlsZSBzaG91bGQgYmUKKyAqIHVzZWQg aW4gcHJlZmVyZW5jZSB0byB0aGlzLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfQ1BVRlVOQ19I XworI2RlZmluZQlfTUFDSElORV9DUFVGVU5DX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXwor I2Vycm9yIHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2Vu ZGlmCisKK3N0cnVjdCByZWdpb25fZGVzY3JpcHRvcjsKKworI2RlZmluZSByZWFkYih2YSkJKCoo dm9sYXRpbGUgdWludDhfdCAqKSAodmEpKQorI2RlZmluZSByZWFkdyh2YSkJKCoodm9sYXRpbGUg dWludDE2X3QgKikgKHZhKSkKKyNkZWZpbmUgcmVhZGwodmEpCSgqKHZvbGF0aWxlIHVpbnQzMl90 ICopICh2YSkpCisjZGVmaW5lIHJlYWRxKHZhKQkoKih2b2xhdGlsZSB1aW50NjRfdCAqKSAodmEp KQorCisjZGVmaW5lIHdyaXRlYih2YSwgZCkJKCoodm9sYXRpbGUgdWludDhfdCAqKSAodmEpID0g KGQpKQorI2RlZmluZSB3cml0ZXcodmEsIGQpCSgqKHZvbGF0aWxlIHVpbnQxNl90ICopICh2YSkg PSAoZCkpCisjZGVmaW5lIHdyaXRlbCh2YSwgZCkJKCoodm9sYXRpbGUgdWludDMyX3QgKikgKHZh KSA9IChkKSkKKyNkZWZpbmUgd3JpdGVxKHZhLCBkKQkoKih2b2xhdGlsZSB1aW50NjRfdCAqKSAo dmEpID0gKGQpKQorCisjaWYgZGVmaW5lZChfX0dOVUNMSUtFX0FTTSkgJiYgZGVmaW5lZChfX0ND X1NVUFBPUlRTX19fSU5MSU5FKQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnJlYWtwb2ludCh2 b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImludCAkMyIpOworfQorCitzdGF0aWMgX19pbmxp bmUgdV9pbnQKK2JzZmwodV9pbnQgbWFzaykKK3sKKwl1X2ludAlyZXN1bHQ7CisKKwlfX2FzbSBf X3ZvbGF0aWxlKCJic2ZsICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJ cmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCitic2ZxKHVfbG9u ZyBtYXNrKQoreworCXVfbG9uZwlyZXN1bHQ7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJic2ZxICUx LCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJcmV0dXJuIChyZXN1bHQpOwor fQorCitzdGF0aWMgX19pbmxpbmUgdV9pbnQKK2JzcmwodV9pbnQgbWFzaykKK3sKKwl1X2ludAly ZXN1bHQ7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJic3JsICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkg OiAicm0iIChtYXNrKSk7CisJcmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUg dV9sb25nCitic3JxKHVfbG9uZyBtYXNrKQoreworCXVfbG9uZwlyZXN1bHQ7CisKKwlfX2FzbSBf X3ZvbGF0aWxlKCJic3JxICUxLCUwIiA6ICI9ciIgKHJlc3VsdCkgOiAicm0iIChtYXNrKSk7CisJ cmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY2xmbHVzaCh1X2xv bmcgYWRkcikKK3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImNsZmx1c2ggJTAiIDogOiAibSIgKCoo Y2hhciAqKWFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NsZmx1c2hvcHQodV9s b25nIGFkZHIpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCIuYnl0ZSAweDY2O2NsZmx1c2ggJTAi IDogOiAibSIgKCooY2hhciAqKWFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2Ns dHModm9pZCkKK3sKKworCV9fYXNtIF9fdm9sYXRpbGUoImNsdHMiKTsKK30KKworc3RhdGljIF9f aW5saW5lIHZvaWQKK2Rpc2FibGVfaW50cih2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNs aSIgOiA6IDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorZG9fY3B1aWQo dV9pbnQgYXgsIHVfaW50ICpwKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNwdWlkIgorCQkJIDog Ij1hIiAocFswXSksICI9YiIgKHBbMV0pLCAiPWMiIChwWzJdKSwgIj1kIiAocFszXSkKKwkJCSA6 ICAiMCIgKGF4KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjcHVpZF9jb3VudCh1X2lu dCBheCwgdV9pbnQgY3gsIHVfaW50ICpwKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNwdWlkIgor CQkJIDogIj1hIiAocFswXSksICI9YiIgKHBbMV0pLCAiPWMiIChwWzJdKSwgIj1kIiAocFszXSkK KwkJCSA6ICAiMCIgKGF4KSwgImMiIChjeCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAor ZW5hYmxlX2ludHIodm9pZCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJzdGkiKTsKK30KKworI2lm ZGVmIF9LRVJORUwKKworI2RlZmluZQlIQVZFX0lOTElORV9GRlMKKyNkZWZpbmUgICAgICAgIGZm cyh4KSAgX19idWlsdGluX2Zmcyh4KQorCisjZGVmaW5lCUhBVkVfSU5MSU5FX0ZGU0wKKworc3Rh dGljIF9faW5saW5lIGludAorZmZzbChsb25nIG1hc2spCit7CisJcmV0dXJuIChtYXNrID09IDAg PyBtYXNrIDogKGludClic2ZxKCh1X2xvbmcpbWFzaykgKyAxKTsKK30KKworI2RlZmluZQlIQVZF X0lOTElORV9GRlNMTAorCitzdGF0aWMgX19pbmxpbmUgaW50CitmZnNsbChsb25nIGxvbmcgbWFz aykKK3sKKwlyZXR1cm4gKGZmc2woKGxvbmcpbWFzaykpOworfQorCisjZGVmaW5lCUhBVkVfSU5M SU5FX0ZMUworCitzdGF0aWMgX19pbmxpbmUgaW50CitmbHMoaW50IG1hc2spCit7CisJcmV0dXJu IChtYXNrID09IDAgPyBtYXNrIDogKGludClic3JsKCh1X2ludCltYXNrKSArIDEpOworfQorCisj ZGVmaW5lCUhBVkVfSU5MSU5FX0ZMU0wKKworc3RhdGljIF9faW5saW5lIGludAorZmxzbChsb25n IG1hc2spCit7CisJcmV0dXJuIChtYXNrID09IDAgPyBtYXNrIDogKGludClic3JxKCh1X2xvbmcp bWFzaykgKyAxKTsKK30KKworI2RlZmluZQlIQVZFX0lOTElORV9GTFNMTAorCitzdGF0aWMgX19p bmxpbmUgaW50CitmbHNsbChsb25nIGxvbmcgbWFzaykKK3sKKwlyZXR1cm4gKGZsc2woKGxvbmcp bWFzaykpOworfQorCisjZW5kaWYgLyogX0tFUk5FTCAqLworCitzdGF0aWMgX19pbmxpbmUgdm9p ZAoraGFsdCh2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoImhsdCIpOworfQorCitzdGF0aWMg X19pbmxpbmUgdV9jaGFyCitpbmIodV9pbnQgcG9ydCkKK3sKKwl1X2NoYXIJZGF0YTsKKworCV9f YXNtIF9fdm9sYXRpbGUoImluYiAldzEsICUwIiA6ICI9YSIgKGRhdGEpIDogIk5kIiAocG9ydCkp OworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2ludAoraW5sKHVfaW50 IHBvcnQpCit7CisJdV9pbnQJZGF0YTsKKworCV9fYXNtIF9fdm9sYXRpbGUoImlubCAldzEsICUw IiA6ICI9YSIgKGRhdGEpIDogIk5kIiAocG9ydCkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0 YXRpYyBfX2lubGluZSB2b2lkCitpbnNiKHVfaW50IHBvcnQsIHZvaWQgKmFkZHIsIHNpemVfdCBj b3VudCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgaW5zYiIKKwkJCSA6ICIrRCIg KGFkZHIpLCAiK2MiIChjb3VudCkKKwkJCSA6ICJkIiAocG9ydCkKKwkJCSA6ICJtZW1vcnkiKTsK K30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2luc3codV9pbnQgcG9ydCwgdm9pZCAqYWRkciwg c2l6ZV90IGNvdW50KQoreworCV9fYXNtIF9fdm9sYXRpbGUoImNsZDsgcmVwOyBpbnN3IgorCQkJ IDogIitEIiAoYWRkciksICIrYyIgKGNvdW50KQorCQkJIDogImQiIChwb3J0KQorCQkJIDogIm1l bW9yeSIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW5zbCh1X2ludCBwb3J0LCB2b2lk ICphZGRyLCBzaXplX3QgY291bnQpCit7CisJX19hc20gX192b2xhdGlsZSgiY2xkOyByZXA7IGlu c2wiCisJCQkgOiAiK0QiIChhZGRyKSwgIitjIiAoY291bnQpCisJCQkgOiAiZCIgKHBvcnQpCisJ CQkgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitpbnZkKHZvaWQpCit7 CisJX19hc20gX192b2xhdGlsZSgiaW52ZCIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9zaG9y dAoraW53KHVfaW50IHBvcnQpCit7CisJdV9zaG9ydAlkYXRhOworCisJX19hc20gX192b2xhdGls ZSgiaW53ICV3MSwgJTAiIDogIj1hIiAoZGF0YSkgOiAiTmQiIChwb3J0KSk7CisJcmV0dXJuIChk YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291dGIodV9pbnQgcG9ydCwgdV9jaGFy IGRhdGEpCit7CisJX19hc20gX192b2xhdGlsZSgib3V0YiAlMCwgJXcxIiA6IDogImEiIChkYXRh KSwgIk5kIiAocG9ydCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorb3V0bCh1X2ludCBw b3J0LCB1X2ludCBkYXRhKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm91dGwgJTAsICV3MSIgOiA6 ICJhIiAoZGF0YSksICJOZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291 dHNiKHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c2IiCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291 dHN3KHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c3ciCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291 dHNsKHVfaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKwlfX2Fz bSBfX3ZvbGF0aWxlKCJjbGQ7IHJlcDsgb3V0c2wiCisJCQkgOiAiK1MiIChhZGRyKSwgIitjIiAo Y291bnQpCisJCQkgOiAiZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK291 dHcodV9pbnQgcG9ydCwgdV9zaG9ydCBkYXRhKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm91dHcg JTAsICV3MSIgOiA6ICJhIiAoZGF0YSksICJOZCIgKHBvcnQpKTsKK30KKworc3RhdGljIF9faW5s aW5lIHVfbG9uZworcG9wY250cSh1X2xvbmcgbWFzaykKK3sKKwl1X2xvbmcgcmVzdWx0OworCisJ X19hc20gX192b2xhdGlsZSgicG9wY250cSAlMSwlMCIgOiAiPXIiIChyZXN1bHQpIDogInJtIiAo bWFzaykpOworCXJldHVybiAocmVzdWx0KTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xm ZW5jZSh2b2lkKQoreworCisJX19hc20gX192b2xhdGlsZSgibGZlbmNlIiA6IDogOiAibWVtb3J5 Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCittZmVuY2Uodm9pZCkKK3sKKworCV9fYXNt IF9fdm9sYXRpbGUoIm1mZW5jZSIgOiA6IDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgX19pbmxp bmUgdm9pZAoraWEzMl9wYXVzZSh2b2lkKQoreworCV9fYXNtIF9fdm9sYXRpbGUoInBhdXNlIik7 Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2xvbmcKK3JlYWRfcmZsYWdzKHZvaWQpCit7CisJdV9s b25nCXJmOworCisJX19hc20gX192b2xhdGlsZSgicHVzaGZxOyBwb3BxICUwIiA6ICI9ciIgKHJm KSk7CisJcmV0dXJuIChyZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdAorcmRtc3Io dV9pbnQgbXNyKQoreworCXVpbnQzMl90IGxvdywgaGlnaDsKKworCV9fYXNtIF9fdm9sYXRpbGUo InJkbXNyIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpIDogImMiIChtc3IpKTsKKwlyZXR1cm4g KGxvdyB8ICgodWludDY0X3QpaGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWlu dDMyX3QKK3JkbXNyMzIodV9pbnQgbXNyKQoreworCXVpbnQzMl90IGxvdzsKKworCV9fYXNtIF9f dm9sYXRpbGUoInJkbXNyIiA6ICI9YSIgKGxvdykgOiAiYyIgKG1zcikgOiAicmR4Iik7CisJcmV0 dXJuIChsb3cpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QKK3JkcG1jKHVfaW50IHBt YykKK3sKKwl1aW50MzJfdCBsb3csIGhpZ2g7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJyZHBtYyIg OiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSA6ICJjIiAocG1jKSk7CisJcmV0dXJuIChsb3cgfCAo KHVpbnQ2NF90KWhpZ2ggPDwgMzIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90City ZHRzYyh2b2lkKQoreworCXVpbnQzMl90IGxvdywgaGlnaDsKKworCV9fYXNtIF9fdm9sYXRpbGUo InJkdHNjIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpKTsKKwlyZXR1cm4gKGxvdyB8ICgodWlu dDY0X3QpaGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3JkdHNj MzIodm9pZCkKK3sKKwl1aW50MzJfdCBydjsKKworCV9fYXNtIF9fdm9sYXRpbGUoInJkdHNjIiA6 ICI9YSIgKHJ2KSA6IDogImVkeCIpOworCXJldHVybiAocnYpOworfQorCitzdGF0aWMgX19pbmxp bmUgdm9pZAord2JpbnZkKHZvaWQpCit7CisJX19hc20gX192b2xhdGlsZSgid2JpbnZkIik7Cit9 CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit3cml0ZV9yZmxhZ3ModV9sb25nIHJmKQoreworCV9f YXNtIF9fdm9sYXRpbGUoInB1c2hxICUwOyAgcG9wZnEiIDogOiAiciIgKHJmKSk7Cit9CisKK3N0 YXRpYyBfX2lubGluZSB2b2lkCit3cm1zcih1X2ludCBtc3IsIHVpbnQ2NF90IG5ld3ZhbCkKK3sK Kwl1aW50MzJfdCBsb3csIGhpZ2g7CisKKwlsb3cgPSBuZXd2YWw7CisJaGlnaCA9IG5ld3ZhbCA+ PiAzMjsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJ3cm1zciIgOiA6ICJhIiAobG93KSwgImQiIChoaWdo KSwgImMiIChtc3IpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfY3IwKHVfbG9u ZyBkYXRhKQoreworCisJX19hc20gX192b2xhdGlsZSgibW92cSAlMCwlJWNyMCIgOiA6ICJyIiAo ZGF0YSkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCityY3IwKHZvaWQpCit7CisJdV9s b25nCWRhdGE7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlY3IwLCUwIiA6ICI9ciIgKGRh dGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9sb25nCityY3Iy KHZvaWQpCit7CisJdV9sb25nCWRhdGE7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlY3Iy LCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxp bmUgdm9pZAorbG9hZF9jcjModV9sb25nIGRhdGEpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJt b3ZxICUwLCUlY3IzIiA6IDogInIiIChkYXRhKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIF9f aW5saW5lIHVfbG9uZworcmNyMyh2b2lkKQoreworCXVfbG9uZwlkYXRhOworCisJX19hc20gX192 b2xhdGlsZSgibW92cSAlJWNyMywlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChkYXRhKTsK K30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfY3I0KHVfbG9uZyBkYXRhKQoreworCV9f YXNtIF9fdm9sYXRpbGUoIm1vdnEgJTAsJSVjcjQiIDogOiAiciIgKGRhdGEpKTsKK30KKworc3Rh dGljIF9faW5saW5lIHVfbG9uZworcmNyNCh2b2lkKQoreworCXVfbG9uZwlkYXRhOworCisJX19h c20gX192b2xhdGlsZSgibW92cSAlJWNyNCwlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChk YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHVfbG9uZworcnhjcih1X2ludCByZWcpCit7CisJ dV9pbnQgbG93LCBoaWdoOworCisJX19hc20gX192b2xhdGlsZSgieGdldGJ2IiA6ICI9YSIgKGxv dyksICI9ZCIgKGhpZ2gpIDogImMiIChyZWcpKTsKKwlyZXR1cm4gKGxvdyB8ICgodWludDY0X3Qp aGlnaCA8PCAzMikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF94Y3IodV9pbnQg cmVnLCB1X2xvbmcgdmFsKQoreworCXVfaW50IGxvdywgaGlnaDsKKworCWxvdyA9IHZhbDsKKwlo aWdoID0gdmFsID4+IDMyOworCV9fYXNtIF9fdm9sYXRpbGUoInhzZXRidiIgOiA6ICJjIiAocmVn KSwgImEiIChsb3cpLCAiZCIgKGhpZ2gpKTsKK30KKworLyoKKyAqIEdsb2JhbCBUTEIgZmx1c2gg KGV4Y2VwdCBmb3IgdGhpc2UgZm9yIHBhZ2VzIG1hcmtlZCBQR19HKQorICovCitzdGF0aWMgX19p bmxpbmUgdm9pZAoraW52bHRsYih2b2lkKQoreworCisJbG9hZF9jcjMocmNyMygpKTsKK30KKwor I2lmbmRlZiBDUjRfUEdFCisjZGVmaW5lCUNSNF9QR0UJMHgwMDAwMDA4MAkvKiBQYWdlIGdsb2Jh bCBlbmFibGUgKi8KKyNlbmRpZgorCisvKgorICogUGVyZm9ybSB0aGUgZ3VhcmFudGVlZCBpbnZh bGlkYXRpb24gb2YgYWxsIFRMQiBlbnRyaWVzLiAgVGhpcworICogaW5jbHVkZXMgdGhlIGdsb2Jh bCBlbnRyaWVzLCBhbmQgZW50cmllcyBpbiBhbGwgUENJRHMsIG5vdCBvbmx5IHRoZQorICogY3Vy cmVudCBjb250ZXh0LiAgVGhlIGZ1bmN0aW9uIHdvcmtzIGJvdGggb24gbm9uLVBDSUQgQ1BVcyBh bmQgQ1BVcworICogd2l0aCB0aGUgUENJRCB0dXJuZWQgb2ZmIG9yIG9uLiAgU2VlIElBLTMyIFNE TSBWb2wuIDNhIDQuMTAuNC4xCisgKiBPcGVyYXRpb25zIHRoYXQgSW52YWxpZGF0ZSBUTEJzIGFu ZCBQYWdpbmctU3RydWN0dXJlIENhY2hlcy4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2lu dmx0bGJfZ2xvYih2b2lkKQoreworCXVpbnQ2NF90IGNyNDsKKworCWNyNCA9IHJjcjQoKTsKKwls b2FkX2NyNChjcjQgJiB+Q1I0X1BHRSk7CisJLyoKKwkgKiBBbHRob3VnaCBwcmVlbXB0aW9uIGF0 IHRoaXMgcG9pbnQgY291bGQgYmUgZGV0cmltZW50YWwgdG8KKwkgKiBwZXJmb3JtYW5jZSwgaXQg d291bGQgbm90IGxlYWQgdG8gYW4gZXJyb3IuICBQR19HIGlzIHNpbXBseQorCSAqIGlnbm9yZWQg aWYgQ1I0LlBHRSBpcyBjbGVhci4gIE1vcmVvdmVyLCBpbiBjYXNlIHRoaXMgYmxvY2sKKwkgKiBp cyByZS1lbnRlcmVkLCB0aGUgbG9hZF9jcjQoKSBlaXRoZXIgYWJvdmUgb3IgYmVsb3cgd2lsbAor CSAqIG1vZGlmeSBDUjQuUEdFIGZsdXNoaW5nIHRoZSBUTEIuCisJICovCisJbG9hZF9jcjQoY3I0 IHwgQ1I0X1BHRSk7Cit9CisKKy8qCisgKiBUTEIgZmx1c2ggZm9yIGFuIGluZGl2aWR1YWwgcGFn ZSAoZXZlbiBpZiBpdCBoYXMgUEdfRykuCisgKiBPbmx5IHdvcmtzIG9uIDQ4NisgQ1BVcyAoaTM4 NiBkb2VzIG5vdCBoYXZlIFBHX0cpLgorICovCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW52bHBn KHVfbG9uZyBhZGRyKQoreworCisJX19hc20gX192b2xhdGlsZSgiaW52bHBnICUwIiA6IDogIm0i ICgqKGNoYXIgKilhZGRyKSA6ICJtZW1vcnkiKTsKK30KKworI2RlZmluZQlJTlZQQ0lEX0FERFIJ MAorI2RlZmluZQlJTlZQQ0lEX0NUWAkxCisjZGVmaW5lCUlOVlBDSURfQ1RYR0xPQgkyCisjZGVm aW5lCUlOVlBDSURfQUxMQ1RYCTMKKworc3RydWN0IGludnBjaWRfZGVzY3IgeworCXVpbnQ2NF90 CXBjaWQ6MTIgX19wYWNrZWQ7CisJdWludDY0X3QJcGFkOjUyIF9fcGFja2VkOworCXVpbnQ2NF90 CWFkZHI7Cit9IF9fcGFja2VkOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW52cGNpZChzdHJ1 Y3QgaW52cGNpZF9kZXNjciAqZCwgaW50IHR5cGUpCit7CisKKwlfX2FzbSBfX3ZvbGF0aWxlKCJp bnZwY2lkICglMCksJTEiCisJICAgIDogOiAiciIgKGQpLCAiciIgKCh1X2xvbmcpdHlwZSkgOiAi bWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X3Nob3J0CityZnModm9pZCkKK3sKKwl1 X3Nob3J0IHNlbDsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3Z3ICUlZnMsJTAiIDogIj1ybSIgKHNl bCkpOworCXJldHVybiAoc2VsKTsKK30KKworc3RhdGljIF9faW5saW5lIHVfc2hvcnQKK3Jncyh2 b2lkKQoreworCXVfc2hvcnQgc2VsOworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdncgJSVncywlMCIg OiAiPXJtIiAoc2VsKSk7CisJcmV0dXJuIChzZWwpOworfQorCitzdGF0aWMgX19pbmxpbmUgdV9z aG9ydAorcnNzKHZvaWQpCit7CisJdV9zaG9ydCBzZWw7CisJX19hc20gX192b2xhdGlsZSgibW92 dyAlJXNzLCUwIiA6ICI9cm0iIChzZWwpKTsKKwlyZXR1cm4gKHNlbCk7Cit9CisKK3N0YXRpYyBf X2lubGluZSB2b2lkCitsb2FkX2RzKHVfc2hvcnQgc2VsKQoreworCV9fYXNtIF9fdm9sYXRpbGUo Im1vdncgJTAsJSVkcyIgOiA6ICJybSIgKHNlbCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9p ZAorbG9hZF9lcyh1X3Nob3J0IHNlbCkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3Z3ICUwLCUl ZXMiIDogOiAicm0iIChzZWwpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NwdV9tb25p dG9yKGNvbnN0IHZvaWQgKmFkZHIsIHVfbG9uZyBleHRlbnNpb25zLCB1X2ludCBoaW50cykKK3sK KworCV9fYXNtIF9fdm9sYXRpbGUoIm1vbml0b3IiCisJICAgIDogOiAiYSIgKGFkZHIpLCAiYyIg KGV4dGVuc2lvbnMpLCAiZCIgKGhpbnRzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitj cHVfbXdhaXQodV9sb25nIGV4dGVuc2lvbnMsIHVfaW50IGhpbnRzKQoreworCisJX19hc20gX192 b2xhdGlsZSgibXdhaXQiIDogOiAiYSIgKGhpbnRzKSwgImMiIChleHRlbnNpb25zKSk7Cit9CisK KyNpZmRlZiBfS0VSTkVMCisvKiBUaGlzIGlzIGRlZmluZWQgaW4gPG1hY2hpbmUvc3BlY2lhbHJl Zy5oPiBidXQgaXMgdG9vIHBhaW5mdWwgdG8gZ2V0IHRvICovCisjaWZuZGVmCU1TUl9GU0JBU0UK KyNkZWZpbmUJTVNSX0ZTQkFTRQkweGMwMDAwMTAwCisjZW5kaWYKK3N0YXRpYyBfX2lubGluZSB2 b2lkCitsb2FkX2ZzKHVfc2hvcnQgc2VsKQoreworCS8qIFByZXNlcnZlIHRoZSBmc2Jhc2UgdmFs dWUgYWNyb3NzIHRoZSBzZWxlY3RvciBsb2FkICovCisJX19hc20gX192b2xhdGlsZSgicmRtc3I7 IG1vdncgJTAsJSVmczsgd3Jtc3IiCisJICAgIDogOiAicm0iIChzZWwpLCAiYyIgKE1TUl9GU0JB U0UpIDogImVheCIsICJlZHgiKTsKK30KKworI2lmbmRlZglNU1JfR1NCQVNFCisjZGVmaW5lCU1T Ul9HU0JBU0UJMHhjMDAwMDEwMQorI2VuZGlmCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF9n cyh1X3Nob3J0IHNlbCkKK3sKKwkvKgorCSAqIFByZXNlcnZlIHRoZSBnc2Jhc2UgdmFsdWUgYWNy b3NzIHRoZSBzZWxlY3RvciBsb2FkLgorCSAqIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGRpc2FibGUg aW50ZXJydXB0cyBiZWNhdXNlIHRoZSBnc2Jhc2UKKwkgKiBiZWluZyB0cmFzaGVkIGhhcHBlbnMg dG8gYmUgdGhlIGtlcm5lbCBnc2Jhc2UgYXQgdGhlIHRpbWUuCisJICovCisJX19hc20gX192b2xh dGlsZSgicHVzaGZxOyBjbGk7IHJkbXNyOyBtb3Z3ICUwLCUlZ3M7IHdybXNyOyBwb3BmcSIKKwkg ICAgOiA6ICJybSIgKHNlbCksICJjIiAoTVNSX0dTQkFTRSkgOiAiZWF4IiwgImVkeCIpOworfQor I2Vsc2UKKy8qIFVzYWJsZSBieSB1c2VybGFuZCAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2xv YWRfZnModV9zaG9ydCBzZWwpCit7CisJX19hc20gX192b2xhdGlsZSgibW92dyAlMCwlJWZzIiA6 IDogInJtIiAoc2VsKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2dzKHVfc2hv cnQgc2VsKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdncgJTAsJSVncyIgOiA6ICJybSIgKHNl bCkpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsaWR0KHN0cnVjdCByZWdp b25fZGVzY3JpcHRvciAqYWRkcikKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJsaWR0ICglMCkiIDog OiAiciIgKGFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xsZHQodV9zaG9ydCBz ZWwpCit7CisJX19hc20gX192b2xhdGlsZSgibGxkdCAlMCIgOiA6ICJyIiAoc2VsKSk7Cit9CisK K3N0YXRpYyBfX2lubGluZSB2b2lkCitsdHIodV9zaG9ydCBzZWwpCit7CisJX19hc20gX192b2xh dGlsZSgibHRyICUwIiA6IDogInIiIChzZWwpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2 NF90CityZHIwKHZvaWQpCit7CisJdWludDY0X3QgZGF0YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJt b3ZxICUlZHIwLCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0 aWMgX19pbmxpbmUgdm9pZAorbG9hZF9kcjAodWludDY0X3QgZHIwKQoreworCV9fYXNtIF9fdm9s YXRpbGUoIm1vdnEgJTAsJSVkcjAiIDogOiAiciIgKGRyMCkpOworfQorCitzdGF0aWMgX19pbmxp bmUgdWludDY0X3QKK3JkcjEodm9pZCkKK3sKKwl1aW50NjRfdCBkYXRhOworCV9fYXNtIF9fdm9s YXRpbGUoIm1vdnEgJSVkcjEsJTAiIDogIj1yIiAoZGF0YSkpOworCXJldHVybiAoZGF0YSk7Cit9 CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2RyMSh1aW50NjRfdCBkcjEpCit7CisJX19h c20gX192b2xhdGlsZSgibW92cSAlMCwlJWRyMSIgOiA6ICJyIiAoZHIxKSk7Cit9CisKK3N0YXRp YyBfX2lubGluZSB1aW50NjRfdAorcmRyMih2b2lkKQoreworCXVpbnQ2NF90IGRhdGE7CisJX19h c20gX192b2xhdGlsZSgibW92cSAlJWRyMiwlMCIgOiAiPXIiIChkYXRhKSk7CisJcmV0dXJuIChk YXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2xvYWRfZHIyKHVpbnQ2NF90IGRyMikK K3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUwLCUlZHIyIiA6IDogInIiIChkcjIpKTsKK30K Kworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90CityZHIzKHZvaWQpCit7CisJdWludDY0X3QgZGF0 YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlZHIzLCUwIiA6ICI9ciIgKGRhdGEpKTsKKwly ZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorbG9hZF9kcjModWludDY0 X3QgZHIzKQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJTAsJSVkcjMiIDogOiAiciIgKGRy MykpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QKK3JkcjQodm9pZCkKK3sKKwl1aW50 NjRfdCBkYXRhOworCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVkcjQsJTAiIDogIj1yIiAoZGF0 YSkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitsb2FkX2Ry NCh1aW50NjRfdCBkcjQpCit7CisJX19hc20gX192b2xhdGlsZSgibW92cSAlMCwlJWRyNCIgOiA6 ICJyIiAoZHI0KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdAorcmRyNSh2b2lkKQor eworCXVpbnQ2NF90IGRhdGE7CisJX19hc20gX192b2xhdGlsZSgibW92cSAlJWRyNSwlMCIgOiAi PXIiIChkYXRhKSk7CisJcmV0dXJuIChkYXRhKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQK K2xvYWRfZHI1KHVpbnQ2NF90IGRyNSkKK3sKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUwLCUl ZHI1IiA6IDogInIiIChkcjUpKTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90CityZHI2 KHZvaWQpCit7CisJdWludDY0X3QgZGF0YTsKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICUlZHI2 LCUwIiA6ICI9ciIgKGRhdGEpKTsKKwlyZXR1cm4gKGRhdGEpOworfQorCitzdGF0aWMgX19pbmxp bmUgdm9pZAorbG9hZF9kcjYodWludDY0X3QgZHI2KQoreworCV9fYXNtIF9fdm9sYXRpbGUoIm1v dnEgJTAsJSVkcjYiIDogOiAiciIgKGRyNikpOworfQorCitzdGF0aWMgX19pbmxpbmUgdWludDY0 X3QKK3Jkcjcodm9pZCkKK3sKKwl1aW50NjRfdCBkYXRhOworCV9fYXNtIF9fdm9sYXRpbGUoIm1v dnEgJSVkcjcsJTAiIDogIj1yIiAoZGF0YSkpOworCXJldHVybiAoZGF0YSk7Cit9CisKK3N0YXRp YyBfX2lubGluZSB2b2lkCitsb2FkX2RyNyh1aW50NjRfdCBkcjcpCit7CisJX19hc20gX192b2xh dGlsZSgibW92cSAlMCwlJWRyNyIgOiA6ICJyIiAoZHI3KSk7Cit9CisKK3N0YXRpYyBfX2lubGlu ZSByZWdpc3Rlcl90CitpbnRyX2Rpc2FibGUodm9pZCkKK3sKKwlyZWdpc3Rlcl90IHJmbGFnczsK KworCXJmbGFncyA9IHJlYWRfcmZsYWdzKCk7CisJZGlzYWJsZV9pbnRyKCk7CisJcmV0dXJuIChy ZmxhZ3MpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraW50cl9yZXN0b3JlKHJlZ2lzdGVy X3QgcmZsYWdzKQoreworCXdyaXRlX3JmbGFncyhyZmxhZ3MpOworfQorCisjZWxzZSAvKiAhKF9f R05VQ0xJS0VfQVNNICYmIF9fQ0NfU1VQUE9SVFNfX19JTkxJTkUpICovCisKK2ludAlicmVha3Bv aW50KHZvaWQpOwordV9pbnQJYnNmbCh1X2ludCBtYXNrKTsKK3VfaW50CWJzcmwodV9pbnQgbWFz ayk7Cit2b2lkCWNsZmx1c2godV9sb25nIGFkZHIpOwordm9pZAljbHRzKHZvaWQpOwordm9pZAlj cHVpZF9jb3VudCh1X2ludCBheCwgdV9pbnQgY3gsIHVfaW50ICpwKTsKK3ZvaWQJZGlzYWJsZV9p bnRyKHZvaWQpOwordm9pZAlkb19jcHVpZCh1X2ludCBheCwgdV9pbnQgKnApOwordm9pZAllbmFi bGVfaW50cih2b2lkKTsKK3ZvaWQJaGFsdCh2b2lkKTsKK3ZvaWQJaWEzMl9wYXVzZSh2b2lkKTsK K3VfY2hhcglpbmIodV9pbnQgcG9ydCk7Cit1X2ludAlpbmwodV9pbnQgcG9ydCk7Cit2b2lkCWlu c2IodV9pbnQgcG9ydCwgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJaW5zbCh1X2lu dCBwb3J0LCB2b2lkICphZGRyLCBzaXplX3QgY291bnQpOwordm9pZAlpbnN3KHVfaW50IHBvcnQs IHZvaWQgKmFkZHIsIHNpemVfdCBjb3VudCk7CityZWdpc3Rlcl90CWludHJfZGlzYWJsZSh2b2lk KTsKK3ZvaWQJaW50cl9yZXN0b3JlKHJlZ2lzdGVyX3QgcmYpOwordm9pZAlpbnZkKHZvaWQpOwor dm9pZAlpbnZscGcodV9pbnQgYWRkcik7Cit2b2lkCWludmx0bGIodm9pZCk7Cit1X3Nob3J0CWlu dyh1X2ludCBwb3J0KTsKK3ZvaWQJbGlkdChzdHJ1Y3QgcmVnaW9uX2Rlc2NyaXB0b3IgKmFkZHIp Owordm9pZAlsbGR0KHVfc2hvcnQgc2VsKTsKK3ZvaWQJbG9hZF9jcjAodV9sb25nIGNyMCk7Cit2 b2lkCWxvYWRfY3IzKHVfbG9uZyBjcjMpOwordm9pZAlsb2FkX2NyNCh1X2xvbmcgY3I0KTsKK3Zv aWQJbG9hZF9kcjAodWludDY0X3QgZHIwKTsKK3ZvaWQJbG9hZF9kcjEodWludDY0X3QgZHIxKTsK K3ZvaWQJbG9hZF9kcjIodWludDY0X3QgZHIyKTsKK3ZvaWQJbG9hZF9kcjModWludDY0X3QgZHIz KTsKK3ZvaWQJbG9hZF9kcjQodWludDY0X3QgZHI0KTsKK3ZvaWQJbG9hZF9kcjUodWludDY0X3Qg ZHI1KTsKK3ZvaWQJbG9hZF9kcjYodWludDY0X3QgZHI2KTsKK3ZvaWQJbG9hZF9kcjcodWludDY0 X3QgZHI3KTsKK3ZvaWQJbG9hZF9mcyh1X3Nob3J0IHNlbCk7Cit2b2lkCWxvYWRfZ3ModV9zaG9y dCBzZWwpOwordm9pZAlsdHIodV9zaG9ydCBzZWwpOwordm9pZAlvdXRiKHVfaW50IHBvcnQsIHVf Y2hhciBkYXRhKTsKK3ZvaWQJb3V0bCh1X2ludCBwb3J0LCB1X2ludCBkYXRhKTsKK3ZvaWQJb3V0 c2IodV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0 c2wodV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0 c3codV9pbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGNvdW50KTsKK3ZvaWQJb3V0 dyh1X2ludCBwb3J0LCB1X3Nob3J0IGRhdGEpOwordV9sb25nCXJjcjAodm9pZCk7Cit1X2xvbmcJ cmNyMih2b2lkKTsKK3VfbG9uZwlyY3IzKHZvaWQpOwordV9sb25nCXJjcjQodm9pZCk7Cit1aW50 NjRfdCByZG1zcih1X2ludCBtc3IpOwordWludDMyX3QgcmRtc3IzMih1X2ludCBtc3IpOwordWlu dDY0X3QgcmRwbWModV9pbnQgcG1jKTsKK3VpbnQ2NF90IHJkcjAodm9pZCk7Cit1aW50NjRfdCBy ZHIxKHZvaWQpOwordWludDY0X3QgcmRyMih2b2lkKTsKK3VpbnQ2NF90IHJkcjModm9pZCk7Cit1 aW50NjRfdCByZHI0KHZvaWQpOwordWludDY0X3QgcmRyNSh2b2lkKTsKK3VpbnQ2NF90IHJkcjYo dm9pZCk7Cit1aW50NjRfdCByZHI3KHZvaWQpOwordWludDY0X3QgcmR0c2Modm9pZCk7Cit1X2xv bmcJcmVhZF9yZmxhZ3Modm9pZCk7Cit1X2ludAlyZnModm9pZCk7Cit1X2ludAlyZ3Modm9pZCk7 Cit2b2lkCXdiaW52ZCh2b2lkKTsKK3ZvaWQJd3JpdGVfcmZsYWdzKHVfaW50IHJmKTsKK3ZvaWQJ d3Jtc3IodV9pbnQgbXNyLCB1aW50NjRfdCBuZXd2YWwpOworCisjZW5kaWYJLyogX19HTlVDTElL RV9BU00gJiYgX19DQ19TVVBQT1JUU19fX0lOTElORSAqLworCit2b2lkCXJlc2V0X2RicmVncyh2 b2lkKTsKKworI2lmZGVmIF9LRVJORUwKK2ludAlyZG1zcl9zYWZlKHVfaW50IG1zciwgdWludDY0 X3QgKnZhbCk7CitpbnQJd3Jtc3Jfc2FmZSh1X2ludCBtc3IsIHVpbnQ2NF90IG5ld3ZhbCk7Cisj ZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9DUFVGVU5DX0hfICovCmRpZmYgLXUgLXIgLU4g dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9jcHV0eXBlcy5oIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2NwdXR5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvY3B1dHlwZXMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvY3B1dHlwZXMu aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ4IEBACisv Ki0KKyAqIENvcHlyaWdodCAoYykgMTk5MyBDaHJpc3RvcGhlciBHLiBEZW1ldHJpb3UKKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9y IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv aW5jbHVkZS9jcHV0eXBlcy5oIDI5MjY2OCAyMDE1LTEyLTIzIDIxOjQxOjQyWiBqaGIgJAorICov CisKKyNpZm5kZWYgX01BQ0hJTkVfQ1BVVFlQRVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVfQ1BVVFlQ RVNfSF8KKworI2luY2x1ZGUgPHg4Ni9jcHV0eXBlcy5oPgorCisvKgorICogQ2xhc3NlcyBvZiBw cm9jZXNzb3IuCisgKi8KKyNkZWZpbmUJQ1BVQ0xBU1NfWDg2CQkwCS8qIFg4NiAqLworI2RlZmlu ZQlDUFVDTEFTU19LOAkJMQkvKiBLOCBBTUQ2NCBjbGFzcyAqLworCisvKgorICogS2luZHMgb2Yg cHJvY2Vzc29yLgorICovCisjZGVmaW5lCUNQVV9YODYJCQkwCS8qIEludGVsICovCisjZGVmaW5l CUNQVV9DTEFXSEFNTUVSCQkxCS8qIEFNRCBDbGF3aGFtbWVyICovCisjZGVmaW5lCUNQVV9TTEVE R0VIQU1NRVIJMgkvKiBBTUQgU2xlZGdlaGFtbWVyICovCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVf Q1BVVFlQRVNfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t YWNoaW5lL2RiX21hY2hkZXAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9k Yl9tYWNoZGVwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZGJfbWFj aGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9kYl9tYWNoZGVwLmgJMjAxNi0wOS0yOSAwMDoyNDo1 NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5NCBAQAorLyotCisgKiBNYWNoIE9wZXJhdGlu ZyBTeXN0ZW0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwxOTkwIENhcm5lZ2llIE1lbGxvbiBVbml2 ZXJzaXR5CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNl LCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBk b2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNv cHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh bGwgY29waWVzIG9mIHRoZQorICogc29mdHdhcmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZp ZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlvbnMKKyAqIHRoZXJlb2YsIGFuZCB0aGF0IGJvdGgg bm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICoKKyAqIENBUk5F R0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMgIkFTIElT IgorICogQ09ORElUSU9OLiAgQ0FSTkVHSUUgTUVMTE9OIERJU0NMQUlNUyBBTlkgTElBQklMSVRZ IE9GIEFOWSBLSU5EIEZPUgorICogQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJP TSBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQ2FybmVnaWUgTWVsbG9uIHJlcXVl c3RzIHVzZXJzIG9mIHRoaXMgc29mdHdhcmUgdG8gcmV0dXJuIHRvCisgKgorICogIFNvZnR3YXJl IERpc3RyaWJ1dGlvbiBDb29yZGluYXRvciAgb3IgIFNvZnR3YXJlLkRpc3RyaWJ1dGlvbkBDUy5D TVUuRURVCisgKiAgU2Nob29sIG9mIENvbXB1dGVyIFNjaWVuY2UKKyAqICBDYXJuZWdpZSBNZWxs b24gVW5pdmVyc2l0eQorICogIFBpdHRzYnVyZ2ggUEEgMTUyMTMtMzg5MAorICoKKyAqIGFueSBp bXByb3ZlbWVudHMgb3IgZXh0ZW5zaW9ucyB0aGF0IHRoZXkgbWFrZSBhbmQgZ3JhbnQgQ2FybmVn aWUgTWVsbG9uCisgKiB0aGUgcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzLgor ICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9kYl9tYWNoZGVw LmggMTM5NzMxIDIwMDUtMDEtMDUgMjA6MTc6MjFaIGltcCAkCisgKi8KKworI2lmbmRlZiBfTUFD SElORV9EQl9NQUNIREVQX0hfCisjZGVmaW5lCV9NQUNISU5FX0RCX01BQ0hERVBfSF8KKworI2lu Y2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3RyYXAuaD4KKwordHlw ZWRlZgl2bV9vZmZzZXRfdAlkYl9hZGRyX3Q7CS8qIGFkZHJlc3MgLSB1bnNpZ25lZCAqLwordHlw ZWRlZglsb25nCQlkYl9leHByX3Q7CS8qIGV4cHJlc3Npb24gLSBzaWduZWQgKi8KKworI2RlZmlu ZQlQQ19SRUdTKCkJKChkYl9hZGRyX3Qpa2RiX3RocmN0eC0+cGNiX3JpcCkKKworI2RlZmluZQlC S1BUX0lOU1QJMHhjYwkJLyogYnJlYWtwb2ludCBpbnN0cnVjdGlvbiAqLworI2RlZmluZQlCS1BU X1NJWkUJKDEpCQkvKiBzaXplIG9mIGJyZWFrcG9pbnQgaW5zdCAqLworI2RlZmluZQlCS1BUX1NF VChpbnN0KQkoQktQVF9JTlNUKQorCisjZGVmaW5lIEJLUFRfU0tJUAkJCQlcCitkbyB7CQkJCQkJ XAorCWtkYl9mcmFtZS0+dGZfcmlwICs9IDE7CQkJXAorCWtkYl90aHJjdHgtPnBjYl9yaXAgKz0g MTsJCVwKK30gd2hpbGUoMCkKKworI2RlZmluZQlGSVhVUF9QQ19BRlRFUl9CUkVBSwkJCVwKK2Rv IHsJCQkJCQlcCisJa2RiX2ZyYW1lLT50Zl9yaXAgLT0gMTsJCQlcCisJa2RiX3RocmN0eC0+cGNi X3JpcCAtPSAxOwkJXAorfSB3aGlsZSgwKTsKKworI2RlZmluZQlkYl9jbGVhcl9zaW5nbGVfc3Rl cAlrZGJfY3B1X2NsZWFyX3NpbmdsZXN0ZXAKKyNkZWZpbmUJZGJfc2V0X3NpbmdsZV9zdGVwCWtk Yl9jcHVfc2V0X3NpbmdsZXN0ZXAKKworI2RlZmluZQlJU19CUkVBS1BPSU5UX1RSQVAodHlwZSwg Y29kZSkJKCh0eXBlKSA9PSBUX0JQVEZMVCkKKy8qCisgKiBXYXRjaHBvaW50cyBhcmUgbm90IHN1 cHBvcnRlZC4gIFRoZSBkZWJ1ZyBleGNlcHRpb24gdHlwZSBpcyBpbiAlZHI2CisgKiBhbmQgbm90 IHlldCBpbiB0aGUgYXJncyB0byB0aGlzIG1hY3JvLgorICovCisjZGVmaW5lIElTX1dBVENIUE9J TlRfVFJBUCh0eXBlLCBjb2RlKQkwCisKKyNkZWZpbmUJSV9DQUxMCQkweGU4CisjZGVmaW5lCUlf Q0FMTEkJCTB4ZmYKKyNkZWZpbmUJSV9SRVQJCTB4YzMKKyNkZWZpbmUJSV9JUkVUCQkweGNmCisK KyNkZWZpbmUJaW5zdF90cmFwX3JldHVybihpbnMpCSgoKGlucykmMHhmZikgPT0gSV9JUkVUKQor I2RlZmluZQlpbnN0X3JldHVybihpbnMpCSgoKGlucykmMHhmZikgPT0gSV9SRVQpCisjZGVmaW5l CWluc3RfY2FsbChpbnMpCQkoKChpbnMpJjB4ZmYpID09IElfQ0FMTCB8fCBcCisJCQkJICgoKGlu cykmMHhmZikgPT0gSV9DQUxMSSAmJiBcCisJCQkJICAoKGlucykmMHgzODAwKSA9PSAweDEwMDAp KQorI2RlZmluZSBpbnN0X2xvYWQoaW5zKQkJMAorI2RlZmluZSBpbnN0X3N0b3JlKGlucykJCTAK KworLyoKKyAqIFRoZXJlIG5vIGludGVyZXN0aW5nIGFkZHJlc3NlcyBiZWxvdyBfa3N0YWNrID0g MHhlZmJmZTAwMC4gIFRoZXJlCisgKiBhcmUgc21hbGwgYWJzb2x1dGUgdmFsdWVzIGZvciBHVVBS T0YsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHNlZSB0aGVtLgorICogVHJlYXQgIm5lZ2F0aXZlIiBh ZGRyZXNzZXMgYmVsb3cgX2tzdGFjayBhcyBub24tc21hbGwgdG8gYWxsb3cgZm9yCisgKiBmdXR1 cmUgcmVkdWN0aW9ucyBvZiBfa3N0YWNrIGFuZCB0byBhdm9pZCBzaWduIGV4dGVuc2lvbiBwcm9i bGVtcy4KKyAqCisgKiBUaGVyZSBpcyBvbmUgaW50ZXJlc3Rpbmcgc3ltYm9sIGFib3ZlIC1kYl9t YXhvZmYgPSAweGZmZmYwMDAwLAorICogbmFtZWx5IF9BUFREID0gMHhmZmZmZjAwMC4gIEFjY2Vw dGluZyB0aGlzIHdvdWxkIG1lc3MgdXAgdGhlCisgKiBwcmludGluZyBvZiBzbWFsbCBuZWdhdGl2 ZSBvZmZzZXRzLiAgVGhlIG5leHQgbGFyZ2VzdCBzeW1ib2wgaXMKKyAqIF9BUFRtYXAgPSAweGZm YzAwMDAwLiAgQWNjZXB0aW5nIHRoaXMgaXMgT0sgKHVubGVzcyBkYl9tYXhvZmYgaXMKKyAqIHNl dCB0byA+PSAweDQwMDAwMCAtIChtYXggc3RhY2sgb2Zmc2V0KSkuCisgKi8KKyNkZWZpbmUJREJf U01BTExfVkFMVUVfTUFYCTB4N2ZmZmZmZmYKKyNkZWZpbmUJREJfU01BTExfVkFMVUVfTUlOCSgt MHg0MDAwMDEpCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfREJfTUFDSERFUF9IXyAqLwpkaWZmIC11 IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZHVtcC5oIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2R1bXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxl cy9uZXRtYXAvbWFjaGluZS9kdW1wLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2R1bXAuaAkyMDE2LTA5 LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhp cyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5n LzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvZHVtcC5oIDI3Njc3MiAyMDE1LTAxLTA3IDAxOjAxOjM5 WiBtYXJraiAkICovCisKKyNpbmNsdWRlIDx4ODYvZHVtcC5oPgpkaWZmIC11IC1yIC1OIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZWxmLmggL3Vzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL21hY2hpbmUvZWxmLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp bmUvZWxmLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2VsZi5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAw MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhl IHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv aW5jbHVkZS9lbGYuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKworI2lu Y2x1ZGUgPHg4Ni9lbGYuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL2VuZGlhbi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2Vu ZGlhbi5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2VuZGlhbi5oCTE5 NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxl cy9uZXRtYXAvbWFjaGluZS9lbmRpYW4uaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCAr MDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMg ZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUv ZW5kaWFuLmggMjMyMjY2IDIwMTItMDItMjggMTk6Mzk6NTRaIHRpamwgJCAqLworCisjaW5jbHVk ZSA8eDg2L2VuZGlhbi5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw L21hY2hpbmUvZXhlYy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2V4ZWMu aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9leGVjLmgJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL2V4ZWMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt MCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAg ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylleGVjLmgJOC4x IChCZXJrZWxleSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p bmNsdWRlL2V4ZWMuaCAxNDIxMDcgMjAwNS0wMi0xOSAyMToxNjo0OFogcnUgJAorICovCisKKyNp Zm5kZWYJX01BQ0hJTkVfRVhFQ19IXworI2RlZmluZQlfTUFDSElORV9FWEVDX0hfCisKKyNkZWZp bmUJX19MRFBHU1oJNDA5NgorCisjZW5kaWYgLyogIV9NQUNISU5FX0VYRUNfSF8gKi8KZGlmZiAt dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZkdC5oIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZkdC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC9tYWNoaW5lL2ZkdC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mZHQuaAkyMDE2LTA5LTI5 IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBm aWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzEx LjAvc3lzL2FtZDY0L2luY2x1ZGUvZmR0LmggMjUwODQwIDIwMTMtMDUtMjEgMDM6MDU6NDlaIG1h cmNlbCAkICovCisKKyNpbmNsdWRlIDx4ODYvZmR0Lmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mbG9hdC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC9tYWNoaW5lL2Zsb2F0LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp bmUvZmxvYXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZmxvYXQuaAkyMDE2LTA5LTI5IDAwOjI0OjU0 LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGlu IHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft ZDY0L2luY2x1ZGUvZmxvYXQuaCAyMzI0OTEgMjAxMi0wMy0wNCAxNDowMDozMlogdGlqbCAkICov CisKKyNpbmNsdWRlIDx4ODYvZmxvYXQuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1 bGVzL25ldG1hcC9tYWNoaW5lL2Zsb2F0aW5ncG9pbnQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9mbG9hdGluZ3BvaW50LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL21hY2hpbmUvZmxvYXRpbmdwb2ludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9mbG9hdGluZ3Bv aW50LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MyBA QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgQW5kcmV3IE1vb3JlLCBUYWxrZSBTdHVkaW8K KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAq ICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YK KyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVp dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT VUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpIGZsb2F0aW5ncG9pbnQuaAkxLjAgKEJlcmtl bGV5KSA5LzIzLzkzCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUv ZmxvYXRpbmdwb2ludC5oIDE0NDU0NCAyMDA1LTA0LTAyIDE3OjMxOjQyWiBuZXRjaGlsZCAkCisg Ki8KKworI2lmbmRlZiBfRkxPQVRJTkdQT0lOVF9IXworI2RlZmluZSBfRkxPQVRJTkdQT0lOVF9I XworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4K KworI2VuZGlmIC8qICFfRkxPQVRJTkdQT0lOVF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZnB1LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL21hY2hpbmUvZnB1LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv ZnB1LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZwdS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAw MDAwICswMTAwCkBAIC0wLDAgKzEsOTIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRo ZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29u dHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog NC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0 cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZp YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFO WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICog Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G CisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpbnB4LmgJNS4zIChCZXJrZWxleSkg MS8xOC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2ZwdS5o IDI3MTE5MiAyMDE0LTA5LTA2IDE1OjIzOjI4WiBqaGIgJAorICovCisKKy8qCisgKiBGbG9hdGlu ZyBQb2ludCBEYXRhIFN0cnVjdHVyZXMgYW5kIENvbnN0YW50cworICogVy4gSm9saXR6IDEvOTAK KyAqLworCisjaWZuZGVmIF9NQUNISU5FX0ZQVV9IXworI2RlZmluZQlfTUFDSElORV9GUFVfSF8K KworI2luY2x1ZGUgPHg4Ni9mcHUuaD4KKworI2lmZGVmIF9LRVJORUwKKworc3RydWN0IGZwdV9r ZXJuX2N0eDsKKworI2RlZmluZQlQQ0JfVVNFUl9GUFUocGNiKSAoKChwY2IpLT5wY2JfZmxhZ3Mg JiBQQ0JfS0VSTkZQVSkgPT0gMCkKKworI2RlZmluZQlYU0FWRV9BUkVBX0FMSUdOCTY0CisKK3Zv aWQJZnB1ZG5hKHZvaWQpOwordm9pZAlmcHVkcm9wKHZvaWQpOwordm9pZAlmcHVleGl0KHN0cnVj dCB0aHJlYWQgKnRkKTsKK2ludAlmcHVmb3JtYXQodm9pZCk7CitpbnQJZnB1Z2V0cmVncyhzdHJ1 Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCWZwdWluaXQodm9pZCk7Cit2b2lkCWZwdXJlc3RvcmUodm9p ZCAqYWRkcik7Cit2b2lkCWZwdXJlc3VtZSh2b2lkICphZGRyKTsKK3ZvaWQJZnB1c2F2ZSh2b2lk ICphZGRyKTsKK2ludAlmcHVzZXRyZWdzKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3Qgc2F2ZWZw dSAqYWRkciwKKwkgICAgY2hhciAqeGZwdXN0YXRlLCBzaXplX3QgeGZwdXN0YXRlX3NpemUpOwor aW50CWZwdXNldHhzdGF0ZShzdHJ1Y3QgdGhyZWFkICp0ZCwgY2hhciAqeGZwdXN0YXRlLAorCSAg ICBzaXplX3QgeGZwdXN0YXRlX3NpemUpOwordm9pZAlmcHVzdXNwZW5kKHZvaWQgKmFkZHIpOwor aW50CWZwdXRyYXBfc3NlKHZvaWQpOworaW50CWZwdXRyYXBfeDg3KHZvaWQpOwordm9pZAlmcHV1 c2VyaW5pdGVkKHN0cnVjdCB0aHJlYWQgKnRkKTsKK3N0cnVjdCBmcHVfa2Vybl9jdHggKmZwdV9r ZXJuX2FsbG9jX2N0eCh1X2ludCBmbGFncyk7Cit2b2lkCWZwdV9rZXJuX2ZyZWVfY3R4KHN0cnVj dCBmcHVfa2Vybl9jdHggKmN0eCk7CitpbnQJZnB1X2tlcm5fZW50ZXIoc3RydWN0IHRocmVhZCAq dGQsIHN0cnVjdCBmcHVfa2Vybl9jdHggKmN0eCwKKwkgICAgdV9pbnQgZmxhZ3MpOworaW50CWZw dV9rZXJuX2xlYXZlKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgZnB1X2tlcm5fY3R4ICpjdHgp OworaW50CWZwdV9rZXJuX3RocmVhZCh1X2ludCBmbGFncyk7CitpbnQJaXNfZnB1X2tlcm5fdGhy ZWFkKHVfaW50IGZsYWdzKTsKKworc3RydWN0IHNhdmVmcHUJKmZwdV9zYXZlX2FyZWFfYWxsb2Mo dm9pZCk7Cit2b2lkCWZwdV9zYXZlX2FyZWFfZnJlZShzdHJ1Y3Qgc2F2ZWZwdSAqZnNhKTsKK3Zv aWQJZnB1X3NhdmVfYXJlYV9yZXNldChzdHJ1Y3Qgc2F2ZWZwdSAqZnNhKTsKKworLyoKKyAqIEZs YWdzIGZvciBmcHVfa2Vybl9hbGxvY19jdHgoKSwgZnB1X2tlcm5fZW50ZXIoKSBhbmQgZnB1X2tl cm5fdGhyZWFkKCkuCisgKi8KKyNkZWZpbmUJRlBVX0tFUk5fTk9STUFMCTB4MDAwMAorI2RlZmlu ZQlGUFVfS0VSTl9OT1dBSVQJMHgwMDAxCisjZGVmaW5lCUZQVV9LRVJOX0tUSFIJMHgwMDAyCisK KyNlbmRpZgorCisjZW5kaWYgLyogIV9NQUNISU5FX0ZQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvZnJhbWUuaCAvdXNyL3NyYy9zeXMvbW9k dWxlcy9uZXRtYXAvbWFjaGluZS9mcmFtZS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL2ZyYW1lLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2ZyYW1lLmgJMjAxNi0wOS0yOSAw MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmls ZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w L3N5cy9hbWQ2NC9pbmNsdWRlL2ZyYW1lLmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6Mzk6NTJaIGtp YiAkICovCisKKyNpbmNsdWRlIDx4ODYvZnJhbWUuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2dkYl9tYWNoZGVwLmggL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvZ2RiX21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9nZGJfbWFjaGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9nZGJfbWFjaGRl cC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTIgQEAK Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6 CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n LzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvZ2RiX21hY2hkZXAuaCAxNjY1MjAgMjAwNy0wMi0wNSAy MTo0ODozMlogamhiICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX0dEQl9NQUNIREVQX0hfCisj ZGVmaW5lCV9NQUNISU5FX0dEQl9NQUNIREVQX0hfCisKKyNkZWZpbmUJR0RCX0JVRlNaCShHREJf TlJFR1MgKiAxNikKKyNkZWZpbmUJR0RCX05SRUdTCTU2CisjZGVmaW5lCUdEQl9SRUdfUEMJMTYK Kworc3RhdGljIF9faW5saW5lIHNpemVfdAorZ2RiX2NwdV9yZWdzeihpbnQgcmVnbnVtKQorewor CXJldHVybiAoKHJlZ251bSA+IDE2ICYmIHJlZ251bSA8IDI0KSA/IDQgOiA4KTsKK30KKworc3Rh dGljIF9faW5saW5lIGludAorZ2RiX2NwdV9xdWVyeSh2b2lkKQoreworCXJldHVybiAoMCk7Cit9 CisKK3ZvaWQgKmdkYl9jcHVfZ2V0cmVnKGludCwgc2l6ZV90ICopOwordm9pZCBnZGJfY3B1X3Nl dHJlZyhpbnQsIHZvaWQgKik7CitpbnQgZ2RiX2NwdV9zaWduYWwoaW50LCBpbnQpOworCisjZW5k aWYgLyogIV9NQUNISU5FX0dEQl9NQUNIREVQX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pZWVlZnAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9pZWVlZnAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS9pZWVlZnAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaWVlZWZwLmgJMjAxNi0wOS0yOSAwMDoy NDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzMDggQEAKKy8qLQorICogQ29weXJpZ2h0 IChjKSAyMDAzIFBldGVyIFdlbW0uCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgQW5kcmV3IE1vb3Jl LCBUYWxrZSBTdHVkaW8KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl bWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0 b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5h bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAJZnJvbTogQCgjKSBpZWVlZnAuaCAJ MS4wIChCZXJrZWxleSkgOS8yMy85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2 NC9pbmNsdWRlL2llZWVmcC5oIDIyNjYwNyAyMDExLTEwLTIxIDA2OjQxOjQ2WiBkYXMgJAorICov CisKKyNpZm5kZWYgX01BQ0hJTkVfSUVFRUZQX0hfCisjZGVmaW5lIF9NQUNISU5FX0lFRUVGUF9I XworCisvKgorICogRGVwcmVjYXRlZCBoaXN0b3JpY2FsIEZQVSBjb250cm9sIGludGVyZmFjZQor ICoKKyAqIElFRUUgZmxvYXRpbmcgcG9pbnQgdHlwZSwgY29uc3RhbnQgYW5kIGZ1bmN0aW9uIGRl ZmluaXRpb25zLgorICogWFhYOiB7RlAsU1NFfSpGTEQgYW5kIHtGUCxTU0V9Kk9GRiBhcmUgdW5k b2N1bWVudGVkIHBvbGx1dGlvbi4KKyAqLworCisjaWZuZGVmIF9TWVNfQ0RFRlNfSF8KKyNlcnJv ciB0aGlzIGZpbGUgbmVlZHMgc3lzL2NkZWZzLmggYXMgYSBwcmVyZXF1aXNpdGUKKyNlbmRpZgor CisvKgorICogUm91bmRpbmcgbW9kZXMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJRlBfUk49MCwJ Lyogcm91bmQgdG8gbmVhcmVzdCAqLworCUZQX1JNLAkJLyogcm91bmQgZG93biB0b3dhcmRzIG1p bnVzIGluZmluaXR5ICovCisJRlBfUlAsCQkvKiByb3VuZCB1cCB0b3dhcmRzIHBsdXMgaW5maW5p dHkgKi8KKwlGUF9SWgkJLyogdHJ1bmNhdGUgKi8KK30gZnBfcm5kX3Q7CisKKy8qCisgKiBQcmVj aXNpb24gKGkuZS4sIHJvdW5kaW5nIHByZWNpc2lvbikgbW9kZXMuCisgKi8KK3R5cGVkZWYgZW51 bSB7CisJRlBfUFM9MCwJLyogMjQgYml0IChzaW5nbGUtcHJlY2lzaW9uKSAqLworCUZQX1BSUywJ CS8qIHJlc2VydmVkICovCisJRlBfUEQsCQkvKiA1MyBiaXQgKGRvdWJsZS1wcmVjaXNpb24pICov CisJRlBfUEUJCS8qIDY0IGJpdCAoZXh0ZW5kZWQtcHJlY2lzaW9uKSAqLworfSBmcF9wcmVjX3Q7 CisKKyNkZWZpbmUgZnBfZXhjZXB0X3QJaW50CisKKy8qCisgKiBFeGNlcHRpb24gYml0IG1hc2tz LgorICovCisjZGVmaW5lIEZQX1hfSU5WCTB4MDEJLyogaW52YWxpZCBvcGVyYXRpb24gKi8KKyNk ZWZpbmUgRlBfWF9ETk1MCTB4MDIJLyogZGVub3JtYWwgKi8KKyNkZWZpbmUgRlBfWF9EWgkJMHgw NAkvKiB6ZXJvIGRpdmlkZSAqLworI2RlZmluZSBGUF9YX09GTAkweDA4CS8qIG92ZXJmbG93ICov CisjZGVmaW5lIEZQX1hfVUZMCTB4MTAJLyogdW5kZXJmbG93ICovCisjZGVmaW5lIEZQX1hfSU1Q CTB4MjAJLyogKGltKXByZWNpc2lvbiAqLworI2RlZmluZSBGUF9YX1NUSwkweDQwCS8qIHN0YWNr IGZhdWx0ICovCisKKy8qCisgKiBGUFUgY29udHJvbCB3b3JkIGJpdC1maWVsZCBtYXNrcy4KKyAq LworI2RlZmluZSBGUF9NU0tTX0ZMRAkweDNmCS8qIGV4Y2VwdGlvbiBtYXNrcyBmaWVsZCAqLwor I2RlZmluZSBGUF9QUkNfRkxECTB4MzAwCS8qIHByZWNpc2lvbiBjb250cm9sIGZpZWxkICovCisj ZGVmaW5lCUZQX1JORF9GTEQJMHhjMDAJLyogcm91bmRpbmcgY29udHJvbCBmaWVsZCAqLworCisv KgorICogRlBVIHN0YXR1cyB3b3JkIGJpdC1maWVsZCBtYXNrcy4KKyAqLworI2RlZmluZSBGUF9T VEtZX0ZMRAkweDNmCS8qIHN0aWNreSBmbGFncyBmaWVsZCAqLworCisvKgorICogU1NFIG14Y3Ny IHJlZ2lzdGVyIGJpdC1maWVsZCBtYXNrcy4KKyAqLworI2RlZmluZQlTU0VfU1RLWV9GTEQJMHgz ZgkvKiBleGNlcHRpb24gZmxhZ3MgKi8KKyNkZWZpbmUJU1NFX0RBWl9GTEQJMHg0MAkvKiBEZW5v cm1hbHMgYXJlIHplcm8gKi8KKyNkZWZpbmUJU1NFX01TS1NfRkxECTB4MWY4MAkvKiBleGNlcHRp b24gbWFza3MgZmllbGQgKi8KKyNkZWZpbmUJU1NFX1JORF9GTEQJMHg2MDAwCS8qIHJvdW5kaW5n IGNvbnRyb2wgKi8KKyNkZWZpbmUJU1NFX0ZaX0ZMRAkweDgwMDAJLyogZmx1c2ggdG8gemVybyBv biB1bmRlcmZsb3cgKi8KKworLyoKKyAqIEZQVSBjb250cm9sIHdvcmQgYml0LWZpZWxkIG9mZnNl dHMgKHNoaWZ0IGNvdW50cykuCisgKi8KKyNkZWZpbmUgRlBfTVNLU19PRkYJMAkvKiBleGNlcHRp b24gbWFza3Mgb2Zmc2V0ICovCisjZGVmaW5lIEZQX1BSQ19PRkYJOAkvKiBwcmVjaXNpb24gY29u dHJvbCBvZmZzZXQgKi8KKyNkZWZpbmUJRlBfUk5EX09GRgkxMAkvKiByb3VuZGluZyBjb250cm9s IG9mZnNldCAqLworCisvKgorICogRlBVIHN0YXR1cyB3b3JkIGJpdC1maWVsZCBvZmZzZXRzIChz aGlmdCBjb3VudHMpLgorICovCisjZGVmaW5lIEZQX1NUS1lfT0ZGCTAJLyogc3RpY2t5IGZsYWdz IG9mZnNldCAqLworCisvKgorICogU1NFIG14Y3NyIHJlZ2lzdGVyIGJpdC1maWVsZCBvZmZzZXRz IChzaGlmdCBjb3VudHMpLgorICovCisjZGVmaW5lCVNTRV9TVEtZX09GRgkwCS8qIGV4Y2VwdGlv biBmbGFncyBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX0RBWl9PRkYJNgkvKiBEQVogZXhjZXB0aW9u IG1hc2sgb2Zmc2V0ICovCisjZGVmaW5lCVNTRV9NU0tTX09GRgk3CS8qIG90aGVyIGV4Y2VwdGlv biBtYXNrcyBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX1JORF9PRkYJMTMJLyogcm91bmRpbmcgY29u dHJvbCBvZmZzZXQgKi8KKyNkZWZpbmUJU1NFX0ZaX09GRgkxNQkvKiBmbHVzaCB0byB6ZXJvIG9m ZnNldCAqLworCisjaWZkZWYgX19HTlVDTElLRV9BU00KKworI2RlZmluZQlfX2ZsZGN3KGFkZHIp CV9fYXNtIF9fdm9sYXRpbGUoImZsZGN3ICUwIiA6IDogIm0iICgqKGFkZHIpKSkKKyNkZWZpbmUJ X19mbGRlbnYoYWRkcikJX19hc20gX192b2xhdGlsZSgiZmxkZW52ICUwIiA6IDogIm0iICgqKGFk ZHIpKSkKKyNkZWZpbmUJX19mbnN0Y3coYWRkcikJX19hc20gX192b2xhdGlsZSgiZm5zdGN3ICUw IiA6ICI9bSIgKCooYWRkcikpKQorI2RlZmluZQlfX2Zuc3RlbnYoYWRkcikJX19hc20gX192b2xh dGlsZSgiZm5zdGVudiAlMCIgOiAiPW0iICgqKGFkZHIpKSkKKyNkZWZpbmUJX19mbnN0c3coYWRk cikJX19hc20gX192b2xhdGlsZSgiZm5zdHN3ICUwIiA6ICI9bSIgKCooYWRkcikpKQorI2RlZmlu ZQlfX2xkbXhjc3IoYWRkcikJX19hc20gX192b2xhdGlsZSgibGRteGNzciAlMCIgOiA6ICJtIiAo KihhZGRyKSkpCisjZGVmaW5lCV9fc3RteGNzcihhZGRyKQlfX2FzbSBfX3ZvbGF0aWxlKCJzdG14 Y3NyICUwIiA6ICI9bSIgKCooYWRkcikpKQorCisvKgorICogTG9hZCB0aGUgY29udHJvbCB3b3Jk LiAgQmUgY2FyZWZ1bCBub3QgdG8gdHJhcCBpZiB0aGVyZSBpcyBhIGN1cnJlbnRseQorICogdW5t YXNrZWQgZXhjZXB0aW9uIChvbmVzIHRoYXQgd2lsbCBiZWNvbWUgZnJlc2hseSB1bm1hc2tlZCBh cmUgbm90IGEKKyAqIHByb2JsZW0pLiAgVGhpcyBjYXNlIG11c3QgYmUgaGFuZGxlZCBieSBhIHNh dmUvcmVzdG9yZSBvZiB0aGUKKyAqIGVudmlyb25tZW50IG9yIGV2ZW4gb2YgdGhlIGZ1bGwgeDg3 IHN0YXRlLiAgQWNjZXNzaW5nIHRoZSBlbnZpcm9ubWVudAorICogaXMgdmVyeSBpbmVmZmljaWVu dCwgc28gb25seSBkbyBpdCB3aGVuIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIF9faW5saW5lIHZv aWQKK19fZm5sZGN3KHVuc2lnbmVkIHNob3J0IF9jdywgdW5zaWduZWQgc2hvcnQgX25ld2N3KQor eworCXN0cnVjdCB7CisJCXVuc2lnbmVkIF9jdzsKKwkJdW5zaWduZWQgX290aGVyWzZdOworCX0g X2VudjsKKwl1bnNpZ25lZCBzaG9ydCBfc3c7CisKKwlpZiAoKF9jdyAmIEZQX01TS1NfRkxEKSAh PSBGUF9NU0tTX0ZMRCkgeworCQlfX2Zuc3RzdygmX3N3KTsKKwkJaWYgKCgoX3N3ICYgfl9jdykg JiBGUF9TVEtZX0ZMRCkgIT0gMCkgeworCQkJX19mbnN0ZW52KCZfZW52KTsKKwkJCV9lbnYuX2N3 ID0gX25ld2N3OworCQkJX19mbGRlbnYoJl9lbnYpOworCQkJcmV0dXJuOworCQl9CisJfQorCV9f ZmxkY3coJl9uZXdjdyk7Cit9CisKKy8qCisgKiBHZW5lcmFsIG5vdGVzIGFib3V0IGNvbmZsaWN0 aW5nIFNTRSB2cyBGUCBzdGF0dXMgYml0cy4KKyAqIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgc29m dHdhcmUgd2lsbCBub3QgZmlkZGxlIHdpdGggdGhlIGNvbnRyb2wKKyAqIGJpdHMgb2YgdGhlIFNT RSBhbmQgeDg3IGluIHN1Y2ggYSB3YXkgdG8gZ2V0IHRoZW0gb3V0IG9mIHN5bmMgYW5kCisgKiBz dGlsbCBleHBlY3QgdGhpcyB0byB3b3JrLiAgQnJlYWsgdGhpcyBhdCB5b3VyIHBlcmlsLgorICog QmVjYXVzZSBJIGJhc2VkIHRoaXMgb24gdGhlIGkzODYgcG9ydCwgdGhlIHg4NyBzdGF0ZSBpcyB1 c2VkIGZvcgorICogdGhlIGZwZ2V0KigpIGZ1bmN0aW9ucywgYW5kIGlzIHNoYWRvd2VkIGludG8g dGhlIFNTRSBzdGF0ZSBmb3IKKyAqIHRoZSBmcHNldCooKSBmdW5jdGlvbnMuICBGb3IgZHVhbCBz b3VyY2UgZnBnZXQqKCkgZnVuY3Rpb25zLCBJCisgKiBtZXJnZSB0aGUgdHdvIHRvZ2V0aGVyLiAg SSB0aGluay4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgZnBfcm5kX3QKK19fZnBnZXRyb3VuZCh2 b2lkKQoreworCXVuc2lnbmVkIHNob3J0IF9jdzsKKworCV9fZm5zdGN3KCZfY3cpOworCXJldHVy biAoKGZwX3JuZF90KSgoX2N3ICYgRlBfUk5EX0ZMRCkgPj4gRlBfUk5EX09GRikpOworfQorCitz dGF0aWMgX19pbmxpbmUgZnBfcm5kX3QKK19fZnBzZXRyb3VuZChmcF9ybmRfdCBfbSkKK3sKKwlm cF9ybmRfdCBfcDsKKwl1bnNpZ25lZCBfbXhjc3I7CisJdW5zaWduZWQgc2hvcnQgX2N3LCBfbmV3 Y3c7CisKKwlfX2Zuc3RjdygmX2N3KTsKKwlfcCA9IChmcF9ybmRfdCkoKF9jdyAmIEZQX1JORF9G TEQpID4+IEZQX1JORF9PRkYpOworCV9uZXdjdyA9IF9jdyAmIH5GUF9STkRfRkxEOworCV9uZXdj dyB8PSAoX20gPDwgRlBfUk5EX09GRikgJiBGUF9STkRfRkxEOworCV9fZm5sZGN3KF9jdywgX25l d2N3KTsKKwlfX3N0bXhjc3IoJl9teGNzcik7CisJX214Y3NyICY9IH5TU0VfUk5EX0ZMRDsKKwlf bXhjc3IgfD0gKF9tIDw8IFNTRV9STkRfT0ZGKSAmIFNTRV9STkRfRkxEOworCV9fbGRteGNzcigm X214Y3NyKTsKKwlyZXR1cm4gKF9wKTsKK30KKworLyoKKyAqIEdldCBvciBzZXQgdGhlIHJvdW5k aW5nIHByZWNpc2lvbiBmb3IgeDg3IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKyAqIFRoZXJlIGlz IG5vIGVxdWl2YWxlbnQgU1NFIG1vZGUgb3IgY29udHJvbC4KKyAqLworCitzdGF0aWMgX19pbmxp bmUgZnBfcHJlY190CitfX2ZwZ2V0cHJlYyh2b2lkKQoreworCXVuc2lnbmVkIHNob3J0IF9jdzsK KworCV9fZm5zdGN3KCZfY3cpOworCXJldHVybiAoKGZwX3ByZWNfdCkoKF9jdyAmIEZQX1BSQ19G TEQpID4+IEZQX1BSQ19PRkYpKTsKK30KKworc3RhdGljIF9faW5saW5lIGZwX3ByZWNfdAorX19m cHNldHByZWMoZnBfcHJlY190IF9tKQoreworCWZwX3ByZWNfdCBfcDsKKwl1bnNpZ25lZCBzaG9y dCBfY3csIF9uZXdjdzsKKworCV9fZm5zdGN3KCZfY3cpOworCV9wID0gKGZwX3ByZWNfdCkoKF9j dyAmIEZQX1BSQ19GTEQpID4+IEZQX1BSQ19PRkYpOworCV9uZXdjdyA9IF9jdyAmIH5GUF9QUkNf RkxEOworCV9uZXdjdyB8PSAoX20gPDwgRlBfUFJDX09GRikgJiBGUF9QUkNfRkxEOworCV9fZm5s ZGN3KF9jdywgX25ld2N3KTsKKwlyZXR1cm4gKF9wKTsKK30KKworLyoKKyAqIEdldCBvciBzZXQg dGhlIGV4Y2VwdGlvbiBtYXNrLgorICogTm90ZSB0aGF0IHRoZSB4ODcgbWFzayBiaXRzIGFyZSBp bnZlcnRlZCBieSB0aGUgQVBJIC0tIGEgbWFzayBiaXQgb2YgMQorICogbWVhbnMgZGlzYWJsZSBm b3IgeDg3IGFuZCBTU0UsIGJ1dCBmb3IgZnAqbWFzaygpIGl0IG1lYW5zIGVuYWJsZS4KKyAqLwor CitzdGF0aWMgX19pbmxpbmUgZnBfZXhjZXB0X3QKK19fZnBnZXRtYXNrKHZvaWQpCit7CisJdW5z aWduZWQgc2hvcnQgX2N3OworCisJX19mbnN0Y3coJl9jdyk7CisJcmV0dXJuICgofl9jdyAmIEZQ X01TS1NfRkxEKSA+PiBGUF9NU0tTX09GRik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBmcF9leGNl cHRfdAorX19mcHNldG1hc2soZnBfZXhjZXB0X3QgX20pCit7CisJZnBfZXhjZXB0X3QgX3A7CisJ dW5zaWduZWQgX214Y3NyOworCXVuc2lnbmVkIHNob3J0IF9jdywgX25ld2N3OworCisJX19mbnN0 Y3coJl9jdyk7CisJX3AgPSAofl9jdyAmIEZQX01TS1NfRkxEKSA+PiBGUF9NU0tTX09GRjsKKwlf bmV3Y3cgPSBfY3cgJiB+RlBfTVNLU19GTEQ7CisJX25ld2N3IHw9ICh+X20gPDwgRlBfTVNLU19P RkYpICYgRlBfTVNLU19GTEQ7CisJX19mbmxkY3coX2N3LCBfbmV3Y3cpOworCV9fc3RteGNzcigm X214Y3NyKTsKKwkvKiBYWFggc2hvdWxkIHdlIGNsZWFyIG5vbi1pZWVlIFNTRV9EQVpfRkxEIGFu ZCBTU0VfRlpfRkxEID8gKi8KKwlfbXhjc3IgJj0gflNTRV9NU0tTX0ZMRDsKKwlfbXhjc3IgfD0g KH5fbSA8PCBTU0VfTVNLU19PRkYpICYgU1NFX01TS1NfRkxEOworCV9fbGRteGNzcigmX214Y3Ny KTsKKwlyZXR1cm4gKF9wKTsKK30KKworc3RhdGljIF9faW5saW5lIGZwX2V4Y2VwdF90CitfX2Zw Z2V0c3RpY2t5KHZvaWQpCit7CisJdW5zaWduZWQgX2V4LCBfbXhjc3I7CisJdW5zaWduZWQgc2hv cnQgX3N3OworCisJX19mbnN0c3coJl9zdyk7CisJX2V4ID0gKF9zdyAmIEZQX1NUS1lfRkxEKSA+ PiBGUF9TVEtZX09GRjsKKwlfX3N0bXhjc3IoJl9teGNzcik7CisJX2V4IHw9IChfbXhjc3IgJiBT U0VfU1RLWV9GTEQpID4+IFNTRV9TVEtZX09GRjsKKwlyZXR1cm4gKChmcF9leGNlcHRfdClfZXgp OworfQorCisjZW5kaWYgLyogX19HTlVDTElLRV9BU00gKi8KKworI2lmICFkZWZpbmVkKF9fSUVF RUZQX05PSU5MSU5FU19fKSAmJiBkZWZpbmVkKF9fR05VQ0xJS0VfQVNNKQorCisjZGVmaW5lCWZw Z2V0bWFzaygpCV9fZnBnZXRtYXNrKCkKKyNkZWZpbmUJZnBnZXRwcmVjKCkJX19mcGdldHByZWMo KQorI2RlZmluZQlmcGdldHJvdW5kKCkJX19mcGdldHJvdW5kKCkKKyNkZWZpbmUJZnBnZXRzdGlj a3koKQlfX2ZwZ2V0c3RpY2t5KCkKKyNkZWZpbmUJZnBzZXRtYXNrKG0pCV9fZnBzZXRtYXNrKG0p CisjZGVmaW5lCWZwc2V0cHJlYyhtKQlfX2Zwc2V0cHJlYyhtKQorI2RlZmluZQlmcHNldHJvdW5k KG0pCV9fZnBzZXRyb3VuZChtKQorCisjZWxzZSAvKiAhKCFfX0lFRUVGUF9OT0lOTElORVNfXyAm JiBfX0dOVUNMSUtFX0FTTSkgKi8KKworLyogQXVnbWVudCB0aGUgdXNlcmxhbmQgZGVjbGFyYXRp b25zLiAqLworX19CRUdJTl9ERUNMUworZXh0ZXJuIGZwX3JuZF90ICAgIGZwZ2V0cm91bmQodm9p ZCk7CitleHRlcm4gZnBfcm5kX3QgICAgZnBzZXRyb3VuZChmcF9ybmRfdCk7CitleHRlcm4gZnBf ZXhjZXB0X3QgZnBnZXRtYXNrKHZvaWQpOworZXh0ZXJuIGZwX2V4Y2VwdF90IGZwc2V0bWFzayhm cF9leGNlcHRfdCk7CitleHRlcm4gZnBfZXhjZXB0X3QgZnBnZXRzdGlja3kodm9pZCk7CitleHRl cm4gZnBfZXhjZXB0X3QgZnBzZXRzdGlja3koZnBfZXhjZXB0X3QpOworZnBfcHJlY190CWZwZ2V0 cHJlYyh2b2lkKTsKK2ZwX3ByZWNfdAlmcHNldHByZWMoZnBfcHJlY190KTsKK19fRU5EX0RFQ0xT CisKKyNlbmRpZiAvKiAhX19JRUVFRlBfTk9JTkxJTkVTX18gJiYgX19HTlVDTElLRV9BU00gKi8K KworI2VuZGlmIC8qICFfTUFDSElORV9JRUVFRlBfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2luX2Nrc3VtLmggL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvaW5fY2tzdW0uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvbWFjaGluZS9pbl9ja3N1bS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pbl9ja3N1bS5oCTIwMTYt MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsODQgQEAKKy8qLQorICog Q29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0 aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg UkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB TUFHRS4KKyAqCisgKglmcm9tIHRhaG9lOglpbl9ja3N1bS5jCTEuMgk4Ni8wMS8wNQorICoJZnJv bToJCUAoIylpbl9ja3N1bS5jCTEuMyAoQmVya2VsZXkpIDEvMTkvOTEKKyAqCWZyb206IElkOiBp bl9ja3N1bS5jLHYgMS44IDE5OTUvMTIvMDMgMTg6MzU6MTkgYmRlIEV4cAorICogJEZyZWVCU0Q6 IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2luX2Nrc3VtLmggMjg2MzM2IDIwMTUtMDgt MDUgMTk6MDU6MTJaIGVtYXN0ZSAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9JTl9DS1NVTV9I XworI2RlZmluZQlfTUFDSElORV9JTl9DS1NVTV9IXwkxCisKKyNpZm5kZWYgX1NZU19DREVGU19I XworI2Vycm9yIHRoaXMgZmlsZSBuZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQor I2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2RlZmluZSBpbl9ja3N1bShtLCBs ZW4pCWluX2Nrc3VtX3NraXAobSwgbGVuLCAwKQorCisjaWYgZGVmaW5lZChJUFZFUlNJT04pICYm IChJUFZFUlNJT04gPT0gNCkKKy8qCisgKiBJdCBpdCB1c2VmdWwgdG8gaGF2ZSBhbiBJbnRlcm5l dCBjaGVja3N1bSByb3V0aW5lIHdoaWNoIGlzIGlubGluZWFibGUKKyAqIGFuZCBvcHRpbWl6ZWQg c3BlY2lmaWNhbGx5IGZvciB0aGUgdGFzayBvZiBjb21wdXRpbmcgSVAgaGVhZGVyIGNoZWNrc3Vt cworICogaW4gdGhlIG5vcm1hbCBjYXNlICh3aGVyZSB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhbmQg dGhlIGhlYWRlciBsZW5ndGggaXMKKyAqIHRoZXJlZm9yZSBhbHdheXMgZXhhY3RseSBmaXZlIDMy LWJpdCB3b3Jkcy4KKyAqLworI2lmZGVmIF9fQ0NfU1VQUE9SVFNfX19JTkxJTkUKKworc3RhdGlj IF9faW5saW5lIHZvaWQKK2luX2Nrc3VtX3VwZGF0ZShzdHJ1Y3QgaXAgKmlwKQoreworCWludCBf X3RtcHN1bTsKKwlfX3RtcHN1bSA9IChpbnQpbnRvaHMoaXAtPmlwX3N1bSkgKyAyNTY7CisJaXAt PmlwX3N1bSA9IGh0b25zKF9fdG1wc3VtICsgKF9fdG1wc3VtID4+IDE2KSk7Cit9CisKKyNlbHNl CisKKyNkZWZpbmUJaW5fY2tzdW1fdXBkYXRlKGlwKSBcCisJZG8geyBcCisJCWludCBfX3RtcHN1 bTsgXAorCQlfX3RtcHN1bSA9IChpbnQpbnRvaHMoaXAtPmlwX3N1bSkgKyAyNTY7IFwKKwkJaXAt PmlwX3N1bSA9IGh0b25zKF9fdG1wc3VtICsgKF9fdG1wc3VtID4+IDE2KSk7IFwKKwl9IHdoaWxl KDApCisKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfS0VSTkVMCisjaWYgZGVmaW5lZChJUFZF UlNJT04pICYmIChJUFZFUlNJT04gPT0gNCkKK3VfaW50IGluX2Nrc3VtX2hkcihjb25zdCBzdHJ1 Y3QgaXAgKmlwKTsKKyNlbmRpZgordV9zaG9ydAlpbl9hZGR3b3JkKHVfc2hvcnQgc3VtLCB1X3No b3J0IGIpOwordV9zaG9ydAlpbl9wc2V1ZG8odV9pbnQgc3VtLCB1X2ludCBiLCB1X2ludCBjKTsK K3Vfc2hvcnQJaW5fY2tzdW1fc2tpcChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IHNraXAp OworI2VuZGlmCisKKyNlbmRpZiAvKiBfTUFDSElORV9JTl9DS1NVTV9IXyAqLwpkaWZmIC11IC1y IC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmggL3Vz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmgKLS0tIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW50cl9tYWNoZGVwLmgJMTk3MC0wMS0wMSAw MTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t YWNoaW5lL2ludHJfbWFjaGRlcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAw CkBAIC0wLDAgKzEsMTk0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBKb2huIEJhbGR3 aW4gPGpoYkBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL2ludHJfbWFjaGRlcC5oIDMwMjg5NSAy MDE2LTA3LTE1IDA5OjQ0OjQ4WiByb3lnZXIgJAorICovCisKKyNpZm5kZWYgX19NQUNISU5FX0lO VFJfTUFDSERFUF9IX18KKyNkZWZpbmUJX19NQUNISU5FX0lOVFJfTUFDSERFUF9IX18KKworI2lm ZGVmIF9LRVJORUwKKworLyoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBJL08gaW50ZXJydXB0 cyB3ZSBhbGxvdy4gIFRoaXMgbnVtYmVyIGlzIHJhdGhlcgorICogYXJiaXRyYXJ5IGFzIGl0IGlz IGp1c3QgdGhlIG1heGltdW0gSVJRIHJlc291cmNlIHZhbHVlLiAgVGhlIGludGVycnVwdAorICog c291cmNlIGZvciBhIGdpdmVuIElSUSBtYXBzIHRoYXQgSS9PIGludGVycnVwdCB0byBkZXZpY2Ug aW50ZXJydXB0CisgKiBzb3VyY2Ugd2hldGhlciBpdCBiZSBhIHBpbiBvbiBhbiBpbnRlcnJ1cHQg Y29udHJvbGxlciBvciBhbiBNU0kgaW50ZXJydXB0LgorICogVGhlIDE2IElTQSBJUlFzIGFyZSBh c3NpZ25lZCBmaXhlZCBJRFQgdmVjdG9ycywgYnV0IGFsbCBvdGhlciBkZXZpY2UKKyAqIGludGVy cnVwdHMgYWxsb2NhdGUgSURUIHZlY3RvcnMgb24gZGVtYW5kLiAgQ3VycmVudGx5IHdlIGhhdmUg MTkxIElEVAorICogdmVjdG9ycyBhdmFpbGFibGUgZm9yIGRldmljZSBpbnRlcnJ1cHRzLiAgT24g bWFueSBzeXN0ZW1zIHdpdGggSS9PIEFQSUNzLAorICogYSBsb3Qgb2YgdGhlIElSUXMgYXJlIG5v dCB1c2VkLCBzbyB0aGlzIG51bWJlciBjYW4gYmUgbXVjaCBsYXJnZXIgdGhhbgorICogMTkxIGFu ZCBzdGlsbCBiZSBzYWZlIHNpbmNlIG9ubHkgaW50ZXJydXB0IHNvdXJjZXMgaW4gYWN0dWFsIHVz ZSB3aWxsCisgKiBhbGxvY2F0ZSBJRFQgdmVjdG9ycy4KKyAqCisgKiBUaGUgZmlyc3QgMjU1IElS UXMgKDAgLSAyNTQpIGFyZSByZXNlcnZlZCBmb3IgSVNBIElSUXMgYW5kIFBDSSBpbnRsaW5lIElS UXMuCisgKiBJUlEgdmFsdWVzIGZyb20gMjU2IHRvIDc2NyBhcmUgdXNlZCBieSBNU0kuICBXaGVu IHJ1bm5pbmcgdW5kZXIgdGhlIFhlbgorICogSHlwZXJ2aXNvciwgSVJRIHZhbHVlcyBmcm9tIDc2 OCB0byA0ODYzIGFyZSBhdmFpbGFibGUgZm9yIGJpbmRpbmcgdG8KKyAqIGV2ZW50IGNoYW5uZWwg ZXZlbnRzLiAgV2UgbGVhdmUgMjU1IHVudXNlZCB0byBhdm9pZCBjb25mdXNpb24gc2luY2UgMjU1 IGlzCisgKiB1c2VkIGluIFBDSSB0byBpbmRpY2F0ZSBhbiBpbnZhbGlkIElSUS4KKyAqLworI2Rl ZmluZQlOVU1fTVNJX0lOVFMJNTEyCisjZGVmaW5lCUZJUlNUX01TSV9JTlQJMjU2CisjaWZkZWYg WEVOSFZNCisjaW5jbHVkZSA8eGVuL3hlbi1vcy5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uv ZXZlbnRfY2hhbm5lbC5oPgorI2RlZmluZQlOVU1fRVZUQ0hOX0lOVFMJTlJfRVZFTlRfQ0hBTk5F TFMKKyNkZWZpbmUJRklSU1RfRVZUQ0hOX0lOVCBcCisgICAgKEZJUlNUX01TSV9JTlQgKyBOVU1f TVNJX0lOVFMpCisjZGVmaW5lCUxBU1RfRVZUQ0hOX0lOVCBcCisgICAgKEZJUlNUX0VWVENITl9J TlQgKyBOVU1fRVZUQ0hOX0lOVFMgLSAxKQorI2Vsc2UKKyNkZWZpbmUJTlVNX0VWVENITl9JTlRT CTAKKyNlbmRpZgorI2RlZmluZQlOVU1fSU9fSU5UUwkoRklSU1RfTVNJX0lOVCArIE5VTV9NU0lf SU5UUyArIE5VTV9FVlRDSE5fSU5UUykKKworLyoKKyAqIERlZmF1bHQgYmFzZSBhZGRyZXNzIGZv ciBNU0kgbWVzc2FnZXMgb24geDg2IHBsYXRmb3Jtcy4KKyAqLworI2RlZmluZQlNU0lfSU5URUxf QUREUl9CQVNFCQkweGZlZTAwMDAwCisKKy8qCisgKiAtIDEgPz8/IGR1bW15IGNvdW50ZXIuCisg KiAtIDIgY291bnRlcnMgZm9yIGVhY2ggSS9PIGludGVycnVwdC4KKyAqIC0gMSBjb3VudGVyIGZv ciBlYWNoIENQVSBmb3IgbGFwaWMgdGltZXIuCisgKiAtIDggY291bnRlcnMgZm9yIGVhY2ggQ1BV IGZvciBJUEkgY291bnRlcnMgZm9yIFNNUC4KKyAqLworI2lmZGVmIFNNUAorI2RlZmluZQlJTlRS Q05UX0NPVU5UCSgxICsgTlVNX0lPX0lOVFMgKiAyICsgKDEgKyA4KSAqIE1BWENQVSkKKyNlbHNl CisjZGVmaW5lCUlOVFJDTlRfQ09VTlQJKDEgKyBOVU1fSU9fSU5UUyAqIDIgKyAxKQorI2VuZGlm CisKKyNpZm5kZWYgTE9DT1JFCisKK3R5cGVkZWYgdm9pZCBpbnRoYW5kX3Qodm9pZCk7CisKKyNk ZWZpbmUJSURUVkVDKG5hbWUpCV9fQ09OQ0FUKFgsbmFtZSkKKworc3RydWN0IGludHNyYzsKKwor LyoKKyAqIE1ldGhvZHMgdGhhdCBhIFBJQyBwcm92aWRlcyB0byBtYXNrL3VubWFzayBhIGdpdmVu IGludGVycnVwdCBzb3VyY2UsCisgKiAidHVybiBvbiIgdGhlIGludGVycnVwdCBvbiB0aGUgQ1BV IHNpZGUgYnkgc2V0dGluZyB1cCBhbiBJRFQgZW50cnksIGFuZAorICogcmV0dXJuIHRoZSB2ZWN0 b3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cmNlLgorICovCitzdHJ1Y3QgcGljIHsKKwl2b2lk ICgqcGljX2VuYWJsZV9zb3VyY2UpKHN0cnVjdCBpbnRzcmMgKik7CisJdm9pZCAoKnBpY19kaXNh YmxlX3NvdXJjZSkoc3RydWN0IGludHNyYyAqLCBpbnQpOworCXZvaWQgKCpwaWNfZW9pX3NvdXJj ZSkoc3RydWN0IGludHNyYyAqKTsKKwl2b2lkICgqcGljX2VuYWJsZV9pbnRyKShzdHJ1Y3QgaW50 c3JjICopOworCXZvaWQgKCpwaWNfZGlzYWJsZV9pbnRyKShzdHJ1Y3QgaW50c3JjICopOworCWlu dCAoKnBpY192ZWN0b3IpKHN0cnVjdCBpbnRzcmMgKik7CisJaW50ICgqcGljX3NvdXJjZV9wZW5k aW5nKShzdHJ1Y3QgaW50c3JjICopOworCXZvaWQgKCpwaWNfc3VzcGVuZCkoc3RydWN0IHBpYyAq KTsKKwl2b2lkICgqcGljX3Jlc3VtZSkoc3RydWN0IHBpYyAqLCBib29sIHN1c3BlbmRfY2FuY2Vs bGVkKTsKKwlpbnQgKCpwaWNfY29uZmlnX2ludHIpKHN0cnVjdCBpbnRzcmMgKiwgZW51bSBpbnRy X3RyaWdnZXIsCisJICAgIGVudW0gaW50cl9wb2xhcml0eSk7CisJaW50ICgqcGljX2Fzc2lnbl9j cHUpKHN0cnVjdCBpbnRzcmMgKiwgdV9pbnQgYXBpY19pZCk7CisJdm9pZCAoKnBpY19yZXByb2dy YW1fcGluKShzdHJ1Y3QgaW50c3JjICopOworCVRBSUxRX0VOVFJZKHBpYykgcGljczsKK307CisK Ky8qIEZsYWdzIGZvciBwaWNfZGlzYWJsZV9zb3VyY2UoKSAqLworZW51bSB7CisJUElDX0VPSSwK KwlQSUNfTk9fRU9JLAorfTsKKworLyoKKyAqIEFuIGludGVycnVwdCBzb3VyY2UuICBUaGUgdXBw ZXItbGF5ZXIgY29kZSB1c2VzIHRoZSBQSUMgbWV0aG9kcyB0bworICogY29udHJvbCBhIGdpdmVu IHNvdXJjZS4gIFRoZSBsb3dlci1sYXllciBQSUMgZHJpdmVycyBjYW4gc3RvcmUgYWRkaXRpb25h bAorICogcHJpdmF0ZSBkYXRhIGluIGEgZ2l2ZW4gaW50ZXJydXB0IHNvdXJjZSBzdWNoIGFzIGFu IGludGVycnVwdCBwaW4gbnVtYmVyCisgKiBvciBhbiBJL08gQVBJQyBwb2ludGVyLgorICovCitz dHJ1Y3QgaW50c3JjIHsKKwlzdHJ1Y3QgcGljICppc19waWM7CisJc3RydWN0IGludHJfZXZlbnQg KmlzX2V2ZW50OworCXVfbG9uZyAqaXNfY291bnQ7CisJdV9sb25nICppc19zdHJheWNvdW50Owor CXVfaW50IGlzX2luZGV4OworCXVfaW50IGlzX2hhbmRsZXJzOworfTsKKworc3RydWN0IHRyYXBm cmFtZTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmUgaG9sZHMgcGVyLWNw dSBkYXRhLCBhbmQgaXMgcGxhY2VkIGp1c3QKKyAqIGFib3ZlIHRoZSB0b3Agb2YgdGhlIHNwYWNl IHVzZWQgZm9yIHRoZSBOTUkgc3RhY2suCisgKi8KK3N0cnVjdCBubWlfcGNwdSB7CisJcmVnaXN0 ZXJfdAlucF9wY3B1OworCXJlZ2lzdGVyX3QJX19wYWRkaW5nOwkvKiBwYWQgdG8gMTYgYnl0ZXMg Ki8KK307CisKKyNpZmRlZiBTTVAKK2V4dGVybiBjcHVzZXRfdCBpbnRyX2NwdXM7CisjZW5kaWYK K2V4dGVybiBzdHJ1Y3QgbXR4IGljdV9sb2NrOworZXh0ZXJuIGludCBlbGNyX2ZvdW5kOworCitl eHRlcm4gaW50IG1zaXhfZGlzYWJsZV9taWdyYXRpb247CisKKyNpZm5kZWYgREVWX0FUUElDCit2 b2lkCWF0cGljX3Jlc2V0KHZvaWQpOworI2VuZGlmCisvKiBYWFg6IFRoZSBlbGNyXyogcHJvdG90 eXBlcyBwcm9iYWJseSBiZWxvbmcgc29tZXdoZXJlIGVsc2UuICovCitpbnQJZWxjcl9wcm9iZSh2 b2lkKTsKK2VudW0gaW50cl90cmlnZ2VyIGVsY3JfcmVhZF90cmlnZ2VyKHVfaW50IGlycSk7Cit2 b2lkCWVsY3JfcmVzdW1lKHZvaWQpOwordm9pZAllbGNyX3dyaXRlX3RyaWdnZXIodV9pbnQgaXJx LCBlbnVtIGludHJfdHJpZ2dlciB0cmlnZ2VyKTsKKyNpZmRlZiBTTVAKK3ZvaWQJaW50cl9hZGRf Y3B1KHVfaW50IGNwdSk7CisjZW5kaWYKK2ludAlpbnRyX2FkZF9oYW5kbGVyKGNvbnN0IGNoYXIg Km5hbWUsIGludCB2ZWN0b3IsIGRyaXZlcl9maWx0ZXJfdCBmaWx0ZXIsIAorCQkJIGRyaXZlcl9p bnRyX3QgaGFuZGxlciwgdm9pZCAqYXJnLCBlbnVtIGludHJfdHlwZSBmbGFncywgCisJCQkgdm9p ZCAqKmNvb2tpZXApOyAgICAKKyNpZmRlZiBTTVAKK2ludAlpbnRyX2JpbmQodV9pbnQgdmVjdG9y LCB1X2NoYXIgY3B1KTsKKyNlbmRpZgoraW50CWludHJfY29uZmlnX2ludHIoaW50IHZlY3Rvciwg ZW51bSBpbnRyX3RyaWdnZXIgdHJpZywKKyAgICBlbnVtIGludHJfcG9sYXJpdHkgcG9sKTsKK2lu dAlpbnRyX2Rlc2NyaWJlKHVfaW50IHZlY3Rvciwgdm9pZCAqaWgsIGNvbnN0IGNoYXIgKmRlc2Ny KTsKK3ZvaWQJaW50cl9leGVjdXRlX2hhbmRsZXJzKHN0cnVjdCBpbnRzcmMgKmlzcmMsIHN0cnVj dCB0cmFwZnJhbWUgKmZyYW1lKTsKK3VfaW50CWludHJfbmV4dF9jcHUodm9pZCk7CitzdHJ1Y3Qg aW50c3JjICppbnRyX2xvb2t1cF9zb3VyY2UoaW50IHZlY3Rvcik7CitpbnQJaW50cl9yZWdpc3Rl cl9waWMoc3RydWN0IHBpYyAqcGljKTsKK2ludAlpbnRyX3JlZ2lzdGVyX3NvdXJjZShzdHJ1Y3Qg aW50c3JjICppc3JjKTsKK2ludAlpbnRyX3JlbW92ZV9oYW5kbGVyKHZvaWQgKmNvb2tpZSk7Cit2 b2lkCWludHJfcmVzdW1lKGJvb2wgc3VzcGVuZF9jYW5jZWxsZWQpOwordm9pZAlpbnRyX3N1c3Bl bmQodm9pZCk7Cit2b2lkCWludHJfcmVwcm9ncmFtKHZvaWQpOwordm9pZAlpbnRyY250X2FkZChj b25zdCBjaGFyICpuYW1lLCB1X2xvbmcgKipjb3VudHApOwordm9pZAluZXh1c19hZGRfaXJxKHVf bG9uZyBpcnEpOworaW50CW1zaV9hbGxvYyhkZXZpY2VfdCBkZXYsIGludCBjb3VudCwgaW50IG1h eGNvdW50LCBpbnQgKmlycXMpOwordm9pZAltc2lfaW5pdCh2b2lkKTsKK2ludAltc2lfbWFwKGlu dCBpcnEsIHVpbnQ2NF90ICphZGRyLCB1aW50MzJfdCAqZGF0YSk7CitpbnQJbXNpX3JlbGVhc2Uo aW50ICppcnFzLCBpbnQgY291bnQpOworaW50CW1zaXhfYWxsb2MoZGV2aWNlX3QgZGV2LCBpbnQg KmlycSk7CitpbnQJbXNpeF9yZWxlYXNlKGludCBpcnEpOworCisjZW5kaWYJLyogIUxPQ09SRSAq LworI2VuZGlmCS8qIF9LRVJORUwgKi8KKyNlbmRpZgkvKiAhX19NQUNISU5FX0lOVFJfTUFDSERF UF9IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5l L2lvZGV2LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvaW9kZXYuaAotLS0g dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9pb2Rldi5oCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS9pb2Rldi5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg KzEsNDYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcmsgUiBWIE11cnJheQorICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoaXMgcG9zaXRpb24g YW5kIHVuY2hhbmdlZC4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICog T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2 NC9pbmNsdWRlL2lvZGV2LmggMjA3MzI5IDIwMTAtMDQtMjggMTU6Mzg6MDFaIGF0dGlsaW8gJAor ICovCisjaWZuZGVmIF9NQUNISU5FX0lPREVWX0hfCisjZGVmaW5lCV9NQUNISU5FX0lPREVWX0hf CisKKyNpZmRlZiBfS0VSTkVMCisjaW5jbHVkZSA8bWFjaGluZS9jcHVmdW5jLmg+CisKKyNkZWZp bmUJaW9kZXZfcmVhZF8xCWluYgorI2RlZmluZQlpb2Rldl9yZWFkXzIJaW53CisjZGVmaW5lCWlv ZGV2X3JlYWRfNAlpbmwKKyNkZWZpbmUJaW9kZXZfd3JpdGVfMQlvdXRiCisjZGVmaW5lCWlvZGV2 X3dyaXRlXzIJb3V0dworI2RlZmluZQlpb2Rldl93cml0ZV80CW91dGwKKworaW50CSBpb2Rldl9v cGVuKHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludAkgaW9kZXZfY2xvc2Uoc3RydWN0IHRocmVhZCAq dGQpOworaW50CSBpb2Rldl9pb2N0bCh1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpOworCisjZW5k aWYgLyogX0tFUk5FTCAqLworI2VuZGlmIC8qIF9NQUNISU5FX0lPREVWX0hfICovCmRpZmYgLXUg LXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9rZGIuaCAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9rZGIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9rZGIuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUva2RiLmgJMjAxNi0wOS0yOSAw MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1OSBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMDQgTWFyY2VsIE1vb2xlbmFhcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0 cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv aW5jbHVkZS9rZGIuaCAxNzA0NzMgMjAwNy0wNi0wOSAyMTo1NToxN1ogbWFyY2VsICQKKyAqLwor CisjaWZuZGVmIF9NQUNISU5FX0tEQl9IXworI2RlZmluZSBfTUFDSElORV9LREJfSF8KKworI2lu Y2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BzbC5oPgorCisjZGVm aW5lCUtEQl9TVE9QUEVEUENCKHBjKQkmc3RvcHBjYnNbcGMtPnBjX2NwdWlkXQorCitzdGF0aWMg X19pbmxpbmUgdm9pZAora2RiX2NwdV9jbGVhcl9zaW5nbGVzdGVwKHZvaWQpCit7CisJa2RiX2Zy YW1lLT50Zl9yZmxhZ3MgJj0gflBTTF9UOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAora2Ri X2NwdV9zZXRfc2luZ2xlc3RlcCh2b2lkKQoreworCWtkYl9mcmFtZS0+dGZfcmZsYWdzIHw9IFBT TF9UOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAora2RiX2NwdV9zeW5jX2ljYWNoZSh1bnNp Z25lZCBjaGFyICphZGRyLCBzaXplX3Qgc2l6ZSkKK3sKK30KKworc3RhdGljIF9faW5saW5lIHZv aWQKK2tkYl9jcHVfdHJhcChpbnQgdHlwZSwgaW50IGNvZGUpCit7Cit9CisKKyNlbmRpZiAvKiBf TUFDSElORV9LREJfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL2xpbWl0cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2xp bWl0cy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL2xpbWl0cy5oCTE5 NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxl cy9uZXRtYXAvbWFjaGluZS9saW1pdHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCAr MDEwMApAQCAtMCwwICsxLDQ0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5Mwor ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6 CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2 ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklC VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyls aW1pdHMuaAk4LjMgKEJlcmtlbGV5KSAxLzQvOTQKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z eXMvYW1kNjQvaW5jbHVkZS9saW1pdHMuaCAxNDMwNjMgMjAwNS0wMy0wMiAyMTozMzoyOVogam9l cmcgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTElNSVRTX0hfCisjZGVmaW5lCV9NQUNISU5F X0xJTUlUU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpZmRlZiBfX0NDX1NVUFBP UlRTX1dBUk5JTkcKKyN3YXJuaW5nICJtYWNoaW5lL2xpbWl0cy5oIGlzIGRlcHJlY2F0ZWQuICBJ bmNsdWRlIHN5cy9saW1pdHMuaCBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL2xp bWl0cy5oPgorCisjZW5kaWYgLyogIV9NQUNISU5FX0xJTUlUU19IXyAqLwpkaWZmIC11IC1yIC1O IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWRfdmFyLmggL3Vzci9zcmMvc3lz L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWRfdmFyLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL21hY2hpbmUvbWRfdmFyLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21kX3Zhci5oCTIwMTYt MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNjMgQEAKKy8qLQorICog Q29weXJpZ2h0IChjKSAxOTk1IEJydWNlIEQuIEV2YW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhl IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0 IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lz L2FtZDY0L2luY2x1ZGUvbWRfdmFyLmggMjk3Mzk5IDIwMTYtMDMtMjkgMTk6NTY6NDhaIGtpYiAk CisgKi8KKworI2lmbmRlZiBfTUFDSElORV9NRF9WQVJfSF8KKyNkZWZpbmUJX01BQ0hJTkVfTURf VkFSX0hfCisKKyNpbmNsdWRlIDx4ODYveDg2X3Zhci5oPgorCitleHRlcm4gIHVpbnQ2NF90ICp2 bV9wYWdlX2R1bXA7CisKK3N0cnVjdAlzYXZlZnB1OworCit2b2lkCWFtZDY0X2RiX3Jlc3VtZV9k YnJlZyh2b2lkKTsKK3ZvaWQJYW1kNjRfc3lzY2FsbChzdHJ1Y3QgdGhyZWFkICp0ZCwgaW50IHRy YWNlZCk7Cit2b2lkCWRvcmV0aV9pcmV0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRvcmV0aV9pcmV0 KSk7Cit2b2lkCWRvcmV0aV9pcmV0X2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRvcmV0aV9p cmV0X2ZhdWx0KSk7Cit2b2lkCWxkX2RzKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2RzKSk7Cit2 b2lkCWxkX2VzKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2VzKSk7Cit2b2lkCWxkX2ZzKHZvaWQp IF9fYXNtKF9fU1RSSU5HKGxkX2ZzKSk7Cit2b2lkCWxkX2dzKHZvaWQpIF9fYXNtKF9fU1RSSU5H KGxkX2dzKSk7Cit2b2lkCWxkX2ZzYmFzZSh2b2lkKSBfX2FzbShfX1NUUklORyhsZF9mc2Jhc2Up KTsKK3ZvaWQJbGRfZ3NiYXNlKHZvaWQpIF9fYXNtKF9fU1RSSU5HKGxkX2dzYmFzZSkpOwordm9p ZAlkc19sb2FkX2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGRzX2xvYWRfZmF1bHQpKTsKK3Zv aWQJZXNfbG9hZF9mYXVsdCh2b2lkKSBfX2FzbShfX1NUUklORyhlc19sb2FkX2ZhdWx0KSk7Cit2 b2lkCWZzX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZnNfbG9hZF9mYXVsdCkpOwor dm9pZAlnc19sb2FkX2ZhdWx0KHZvaWQpIF9fYXNtKF9fU1RSSU5HKGdzX2xvYWRfZmF1bHQpKTsK K3ZvaWQJZnNiYXNlX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZnNiYXNlX2xvYWRf ZmF1bHQpKTsKK3ZvaWQJZ3NiYXNlX2xvYWRfZmF1bHQodm9pZCkgX19hc20oX19TVFJJTkcoZ3Ni YXNlX2xvYWRfZmF1bHQpKTsKK3ZvaWQJZnBzdGF0ZV9kcm9wKHN0cnVjdCB0aHJlYWQgKnRkKTsK K3ZvaWQJcGFnZXplcm8odm9pZCAqYWRkcik7Cit2b2lkCXNldGlkdChpbnQgaWR4LCBhbGlhc19m b3JfaW50aGFuZF90ICpmdW5jLCBpbnQgdHlwLCBpbnQgZHBsLCBpbnQgaXN0KTsKK3N0cnVjdCBz YXZlZnB1ICpnZXRfcGNiX3VzZXJfc2F2ZV90ZChzdHJ1Y3QgdGhyZWFkICp0ZCk7CitzdHJ1Y3Qg c2F2ZWZwdSAqZ2V0X3BjYl91c2VyX3NhdmVfcGNiKHN0cnVjdCBwY2IgKnBjYik7CisKKyNlbmRp ZiAvKiAhX01BQ0hJTkVfTURfVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9k dWxlcy9uZXRtYXAvbWFjaGluZS9tZW1kZXYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv bWFjaGluZS9tZW1kZXYuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9t ZW1kZXYuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvbWVtZGV2LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4w MDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw MDQgTWFyayBSIFYgTXVycmF5CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor ICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgorICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvbWVtZGV2LmggMjE3NTE1IDIwMTEtMDEt MTcgMjI6NTg6MjhaIGpraW0gJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTUVNREVWX0hfCisj ZGVmaW5lCV9NQUNISU5FX01FTURFVl9IXworCisjZGVmaW5lCUNERVZfTUlOT1JfTUVNCTAKKyNk ZWZpbmUJQ0RFVl9NSU5PUl9LTUVNCTEKKworZF9vcGVuX3QJbWVtb3BlbjsKK2RfcmVhZF90CW1l bXJ3OworZF9pb2N0bF90CW1lbWlvY3RsOworZF9tbWFwX3QJbWVtbW1hcDsKKworI2VuZGlmIC8q IF9NQUNISU5FX01FTURFVl9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL21hY2hpbmUvbWV0YWRhdGEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS9tZXRhZGF0YS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21l dGFkYXRhLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21ldGFkYXRhLmgJMjAxNi0wOS0yOSAwMDoyNDo1 NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBp biB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9h bWQ2NC9pbmNsdWRlL21ldGFkYXRhLmggMjkzMzQzIDIwMTYtMDEtMDcgMTk6NDc6MjZaIGVtYXN0 ZSAkICovCisKKyNpbmNsdWRlIDx4ODYvbWV0YWRhdGEuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21pbmlkdW1wLmggL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvbWluaWR1bXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvbWFjaGluZS9taW5pZHVtcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9taW5pZHVtcC5oCTIwMTYt MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDYgQEAKKy8qLQorICog Q29weXJpZ2h0IChjKSAyMDA2IFBldGVyIFdlbW0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0 L2luY2x1ZGUvbWluaWR1bXAuaCAyMTUxMzMgMjAxMC0xMS0xMSAxODozNToyOFogYXZnICQKKyAq LworCisjaWZuZGVmCV9NQUNISU5FX01JTklEVU1QX0hfCisjZGVmaW5lCV9NQUNISU5FX01JTklE VU1QX0hfIDEKKworI2RlZmluZQlNSU5JRFVNUF9NQUdJQwkJIm1pbmlkdW1wIEZyZWVCU0QvYW1k NjQiCisjZGVmaW5lCU1JTklEVU1QX1ZFUlNJT04JMgorCitzdHJ1Y3QgbWluaWR1bXBoZHIgewor CWNoYXIgbWFnaWNbMjRdOworCXVpbnQzMl90IHZlcnNpb247CisJdWludDMyX3QgbXNnYnVmc2l6 ZTsKKwl1aW50MzJfdCBiaXRtYXBzaXplOworCXVpbnQzMl90IHBtYXBzaXplOworCXVpbnQ2NF90 IGtlcm5iYXNlOworCXVpbnQ2NF90IGRtYXBiYXNlOworCXVpbnQ2NF90IGRtYXBlbmQ7Cit9Owor CisjZW5kaWYgLyogX01BQ0hJTkVfTUlOSURVTVBfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL21wX3dhdGNoZG9nLmggL3Vzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL21hY2hpbmUvbXBfd2F0Y2hkb2cuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxl cy9uZXRtYXAvbWFjaGluZS9tcF93YXRjaGRvZy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9tcF93YXRj aGRvZy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMzQg QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IFJvYmVydCBOLiBNLiBXYXRzb24KKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor ICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p bmNsdWRlL21wX3dhdGNoZG9nLmggMTMzNzU5IDIwMDQtMDgtMTUgMTg6MDI6MDlaIHJ3YXRzb24g JAorICovCisKKyNpZm5kZWYJX01BQ0hJTkVfTVBfV0FUQ0hET0dfSF8KKyNkZWZpbmUJX01BQ0hJ TkVfTVBfV0FUQ0hET0dfSF8KKwordm9pZAlhcF93YXRjaGRvZyh1X2ludCBjcHVpZCk7CisKKyNl bmRpZiAvKiAhX01BQ0hJTkVfTVBfV0FUQ0hET0dfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL25leHVzdmFyLmggL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvbmV4dXN2YXIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvbWFjaGluZS9uZXh1c3Zhci5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9uZXh1c3Zhci5oCTIwMTYt MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDUgQEAKKy8qLQorICog Q29weXJpZ2h0IDE5OTggTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorICoK KyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMg c29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdp dGhvdXQgZmVlIGlzIGhlcmVieQorICogZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCBib3RoIHRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCisgKiBwZXJtaXNzaW9uIG5vdGljZSBhcHBl YXIgaW4gYWxsIGNvcGllcywgdGhhdCBib3RoIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsCisgKiBzdXBwb3J0aW5n IGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZAor ICogaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9u IG9mIHRoZQorICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJt aXNzaW9uLiAgTS5JLlQuIG1ha2VzCisgKiBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1 aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHBy b3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5Lgor ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTS5JLlQuIGBgQVMgSVMnJy4gIE0u SS5ULiBESVNDTEFJTVMKKyAqIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUyBXSVRI IFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBNLkku VC4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg T1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxl bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9uZXh1c3Zhci5oIDE3NzE1NyAyMDA4LTAzLTEzIDIw OjM5OjA0WiBqaGIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTkVYVVNWQVJfSF8KKyNkZWZp bmUJX01BQ0hJTkVfTkVYVVNWQVJfSF8KKworc3RydWN0IG5leHVzX2RldmljZSB7CisJc3RydWN0 IHJlc291cmNlX2xpc3QJbnhfcmVzb3VyY2VzOworfTsKKworREVDTEFSRV9DTEFTUyhuZXh1c19k cml2ZXIpOworCitleHRlcm4gc3RydWN0IHJtYW4gaXJxX3JtYW4sIGRycV9ybWFuLCBwb3J0X3Jt YW4sIG1lbV9ybWFuOworCit2b2lkCW5leHVzX2luaXRfcmVzb3VyY2VzKHZvaWQpOworCisjZW5k aWYgLyogIV9NQUNISU5FX05FWFVTVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ucHguaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv bWFjaGluZS9ucHguaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ucHgu aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL21hY2hpbmUvbnB4LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl L25weC5oIDIzMzA0NCAyMDEyLTAzLTE2IDIwOjI0OjMwWiB0aWpsICQgKi8KKworI2luY2x1ZGUg PHg4Ni9mcHUuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo aW5lL29md19tYWNoZGVwLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvb2Z3 X21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9vZndfbWFj aGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9vZndfbWFjaGRlcC5oCTIwMTYtMDktMjkgMDA6MjQ6 NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMg aW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMv YW1kNjQvaW5jbHVkZS9vZndfbWFjaGRlcC5oIDI1MDg0MCAyMDEzLTA1LTIxIDAzOjA1OjQ5WiBt YXJjZWwgJCAqLworCisjaW5jbHVkZSA8eDg2L29md19tYWNoZGVwLmg+CmRpZmYgLXUgLXIgLU4g dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wYXJhbS5oIC91c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC9tYWNoaW5lL3BhcmFtLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL21hY2hpbmUvcGFyYW0uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGFyYW0uaAkyMDE2LTA5LTI5 IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE1NSBAQAorLyotCisgKiBDb3B5 cmlnaHQgKGMpIDIwMDIgRGF2aWQgRS4gTydCcmllbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz aXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29k ZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAq IHRoZSBTeXN0ZW1zIFByb2dyYW1taW5nIEdyb3VwIG9mIHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgg Q29tcHV0ZXIKKyAqIFNjaWVuY2UgRGVwYXJ0bWVudCBhbmQgUmFscGggQ2FtcGJlbGwuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBp dHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0 eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRv IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQor ICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JT IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcGFyYW0u aAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft ZDY0L2luY2x1ZGUvcGFyYW0uaCAyOTc4NzcgMjAxNi0wNC0xMiAyMToyMzo0NFogamhiICQKKyAq LworCisKKyNpZm5kZWYgX0FNRDY0X0lOQ0xVREVfUEFSQU1fSF8KKyNkZWZpbmUJX0FNRDY0X0lO Q0xVREVfUEFSQU1fSF8KKworI2luY2x1ZGUgPG1hY2hpbmUvX2FsaWduLmg+CisKKy8qCisgKiBN YWNoaW5lIGRlcGVuZGVudCBjb25zdGFudHMgZm9yIEFNRDY0LgorICovCisKKworI2RlZmluZSBf X0hBVkVfQUNQSQorI2RlZmluZSBfX1BDSV9SRVJPVVRFX0lOVEVSUlVQVAorCisjaWZuZGVmIE1B Q0hJTkUKKyNkZWZpbmUJTUFDSElORQkJImFtZDY0IgorI2VuZGlmCisjaWZuZGVmIE1BQ0hJTkVf QVJDSAorI2RlZmluZQlNQUNISU5FX0FSQ0gJImFtZDY0IgorI2VuZGlmCisjaWZuZGVmIE1BQ0hJ TkVfQVJDSDMyCisjZGVmaW5lCU1BQ0hJTkVfQVJDSDMyCSJpMzg2IgorI2VuZGlmCisKKyNpZiBk ZWZpbmVkKFNNUCkgfHwgZGVmaW5lZChLTERfTU9EVUxFKQorI2lmbmRlZiBNQVhDUFUKKyNkZWZp bmUgTUFYQ1BVCQkyNTYKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgTUFYQ1BVCQkxCisjZW5kaWYK KworI2lmbmRlZiBNQVhNRU1ET00KKyNkZWZpbmUJTUFYTUVNRE9NCTgKKyNlbmRpZgorCisjZGVm aW5lCUFMSUdOQllURVMJCV9BTElHTkJZVEVTCisjZGVmaW5lCUFMSUdOKHApCQlfQUxJR04ocCkK Ky8qCisgKiBBTElHTkVEX1BPSU5URVIgaXMgYSBib29sZWFuIG1hY3JvIHRoYXQgY2hlY2tzIHdo ZXRoZXIgYW4gYWRkcmVzcworICogaXMgdmFsaWQgdG8gZmV0Y2ggZGF0YSBlbGVtZW50cyBvZiB0 eXBlIHQgZnJvbSBvbiB0aGlzIGFyY2hpdGVjdHVyZS4KKyAqIFRoaXMgZG9lcyBub3QgcmVmbGVj dCB0aGUgb3B0aW1hbCBhbGlnbm1lbnQsIGp1c3QgdGhlIHBvc3NpYmlsaXR5CisgKiAod2l0aGlu IHJlYXNvbmFibGUgbGltaXRzKS4gCisgKi8KKyNkZWZpbmUJQUxJR05FRF9QT0lOVEVSKHAsIHQp CTEKKworLyoKKyAqIENBQ0hFX0xJTkVfU0laRSBpcyB0aGUgY29tcGlsZS10aW1lIG1heGltdW0g Y2FjaGUgbGluZSBzaXplIGZvciBhbgorICogYXJjaGl0ZWN0dXJlLiAgSXQgc2hvdWxkIGJlIHVz ZWQgd2l0aCBhcHByb3ByaWF0ZSBjYXV0aW9uLgorICovCisjZGVmaW5lCUNBQ0hFX0xJTkVfU0hJ RlQJNworI2RlZmluZQlDQUNIRV9MSU5FX1NJWkUJCSgxIDw8IENBQ0hFX0xJTkVfU0hJRlQpCisK Ky8qIFNpemUgb2YgdGhlIGxldmVsIDEgcGFnZSB0YWJsZSB1bml0cyAqLworI2RlZmluZSBOUFRF UEcJCShQQUdFX1NJWkUvKHNpemVvZiAocHRfZW50cnlfdCkpKQorI2RlZmluZQlOUFRFUEdTSElG VAk5CQkvKiBMT0cyKE5QVEVQRykgKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxMgkJLyogTE9HMihQ QUdFX1NJWkUpICovCisjZGVmaW5lIFBBR0VfU0laRQkoMTw8UEFHRV9TSElGVCkJLyogYnl0ZXMv cGFnZSAqLworI2RlZmluZSBQQUdFX01BU0sJKFBBR0VfU0laRS0xKQorLyogU2l6ZSBvZiB0aGUg bGV2ZWwgMiBwYWdlIGRpcmVjdG9yeSB1bml0cyAqLworI2RlZmluZQlOUERFUEcJCShQQUdFX1NJ WkUvKHNpemVvZiAocGRfZW50cnlfdCkpKQorI2RlZmluZQlOUERFUEdTSElGVAk5CQkvKiBMT0cy KE5QREVQRykgKi8KKyNkZWZpbmUJUERSU0hJRlQJMjEgICAgICAgICAgICAgIC8qIExPRzIoTkJQ RFIpICovCisjZGVmaW5lCU5CUERSCQkoMTw8UERSU0hJRlQpICAgLyogYnl0ZXMvcGFnZSBkaXIg Ki8KKyNkZWZpbmUJUERSTUFTSwkJKE5CUERSLTEpCisvKiBTaXplIG9mIHRoZSBsZXZlbCAzIHBh Z2UgZGlyZWN0b3J5IHBvaW50ZXIgdGFibGUgdW5pdHMgKi8KKyNkZWZpbmUJTlBEUEVQRwkJKFBB R0VfU0laRS8oc2l6ZW9mIChwZHBfZW50cnlfdCkpKQorI2RlZmluZQlOUERQRVBHU0hJRlQJOQkJ LyogTE9HMihOUERQRVBHKSAqLworI2RlZmluZQlQRFBTSElGVAkzMAkJLyogTE9HMihOQlBEUCkg Ki8KKyNkZWZpbmUJTkJQRFAJCSgxPDxQRFBTSElGVCkJLyogYnl0ZXMvcGFnZSBkaXIgcHRyIHRh YmxlICovCisjZGVmaW5lCVBEUE1BU0sJCShOQlBEUC0xKQorLyogU2l6ZSBvZiB0aGUgbGV2ZWwg NCBwYWdlLW1hcCBsZXZlbC00IHRhYmxlIHVuaXRzICovCisjZGVmaW5lCU5QTUw0RVBHCShQQUdF X1NJWkUvKHNpemVvZiAocG1sNF9lbnRyeV90KSkpCisjZGVmaW5lCU5QTUw0RVBHU0hJRlQJOQkJ LyogTE9HMihOUE1MNEVQRykgKi8KKyNkZWZpbmUJUE1MNFNISUZUCTM5CQkvKiBMT0cyKE5CUE1M NCkgKi8KKyNkZWZpbmUJTkJQTUw0CQkoMVVMPDxQTUw0U0hJRlQpLyogYnl0ZXMvcGFnZSBtYXAg bGV2NCB0YWJsZSAqLworI2RlZmluZQlQTUw0TUFTSwkoTkJQTUw0LTEpCisKKyNkZWZpbmUJTUFY UEFHRVNJWkVTCTMJLyogbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHBhZ2Ugc2l6ZXMgKi8K KworI2RlZmluZSBJT1BBR0VTCTIJCS8qIHBhZ2VzIG9mIGkvbyBwZXJtaXNzaW9uIGJpdG1hcCAq LworLyoKKyAqIEkvTyBwZXJtaXNzaW9uIGJpdG1hcCBoYXMgYSBiaXQgZm9yIGVhY2ggSS9PIHBv cnQgcGx1cyBhbiBhZGRpdGlvbmFsCisgKiBieXRlIGF0IHRoZSBlbmQgd2l0aCBhbGwgYml0cyBz ZXQuIFNlZSBzZWN0aW9uICJJL08gUGVybWlzc2lvbiBCaXQgTWFwIgorICogaW4gdGhlIEludGVs IFNETSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjZGVmaW5lCUlPUEVSTV9CSVRNQVBfU0laRQko SU9QQUdFUyAqIFBBR0VfU0laRSArIDEpCisKKyNpZm5kZWYJS1NUQUNLX1BBR0VTCisjZGVmaW5l CUtTVEFDS19QQUdFUwk0CS8qIHBhZ2VzIG9mIGtzdGFjayAod2l0aCBwY2IpICovCisjZW5kaWYK KyNkZWZpbmUJS1NUQUNLX0dVQVJEX1BBR0VTIDEJLyogcGFnZXMgb2Yga3N0YWNrIGd1YXJkOyAw IGRpc2FibGVzICovCisKKy8qCisgKiBNYWNoIGRlcml2ZWQgY29udmVyc2lvbiBtYWNyb3MKKyAq LworI2RlZmluZQlyb3VuZF9wYWdlKHgpCSgoKCh1bnNpZ25lZCBsb25nKSh4KSkgKyBQQUdFX01B U0spICYgfihQQUdFX01BU0spKQorI2RlZmluZQl0cnVuY19wYWdlKHgpCSgodW5zaWduZWQgbG9u ZykoeCkgJiB+KFBBR0VfTUFTSykpCisjZGVmaW5lIHRydW5jXzJtcGFnZSh4KQkoKHVuc2lnbmVk IGxvbmcpKHgpICYgflBEUk1BU0spCisjZGVmaW5lIHJvdW5kXzJtcGFnZSh4KQkoKCgodW5zaWdu ZWQgbG9uZykoeCkpICsgUERSTUFTSykgJiB+UERSTUFTSykKKyNkZWZpbmUgdHJ1bmNfMWdwYWdl KHgpCSgodW5zaWduZWQgbG9uZykoeCkgJiB+UERQTUFTSykKKworI2RlZmluZQlhdG9wKHgpCQko KHVuc2lnbmVkIGxvbmcpKHgpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lCXB0b2EoeCkJCSgodW5z aWduZWQgbG9uZykoeCkgPDwgUEFHRV9TSElGVCkKKworI2RlZmluZQlhbWQ2NF9idG9wKHgpCSgo dW5zaWduZWQgbG9uZykoeCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUJYW1kNjRfcHRvYih4KQko KHVuc2lnbmVkIGxvbmcpKHgpIDw8IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUJcGd0b2soeCkJKCh1 bnNpZ25lZCBsb25nKSh4KSAqIChQQUdFX1NJWkUgLyAxMDI0KSkgCisKKyNkZWZpbmUJSU5LRVJO RUwodmEpICgoKHZhKSA+PSBETUFQX01JTl9BRERSRVNTICYmICh2YSkgPCBETUFQX01BWF9BRERS RVNTKSBcCisgICAgfHwgKCh2YSkgPj0gVk1fTUlOX0tFUk5FTF9BRERSRVNTICYmICh2YSkgPCBW TV9NQVhfS0VSTkVMX0FERFJFU1MpKQorCisjZW5kaWYgLyogIV9BTUQ2NF9JTkNMVURFX1BBUkFN X0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9w Yy9iaW9zLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGMvYmlvcy5oCi0t LSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjL2Jpb3MuaAkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw L21hY2hpbmUvcGMvYmlvcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBA IC0wLDAgKzEsMTIxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NyBNaWNoYWVsIFNtaXRo CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggSm9uYXRoYW4gTGVtb24KKyAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B R0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3BjL2Jp b3MuaCAyNzA4MjggMjAxNC0wOC0yOSAyMToyNTo0N1ogamhiICQKKyAqLworCisjaWZuZGVmIF9N QUNISU5FX1BDX0JJT1NfSF8KKyNkZWZpbmUgX01BQ0hJTkVfUENfQklPU19IXworCisvKgorICog SW50IDE1OkU4MjAgJ1NNQVAnIHN0cnVjdHVyZQorICovCisjZGVmaW5lIFNNQVBfU0lHCTB4NTM0 RDQxNTAJCQkvKiAnU01BUCcgKi8KKworI2RlZmluZQlTTUFQX1RZUEVfTUVNT1JZCTEKKyNkZWZp bmUJU01BUF9UWVBFX1JFU0VSVkVECTIKKyNkZWZpbmUJU01BUF9UWVBFX0FDUElfUkVDTEFJTQkz CisjZGVmaW5lCVNNQVBfVFlQRV9BQ1BJX05WUwk0CisjZGVmaW5lCVNNQVBfVFlQRV9BQ1BJX0VS Uk9SCTUKKworI2RlZmluZQlTTUFQX1hBVFRSX0VOQUJMRUQJMHgwMDAwMDAwMQorI2RlZmluZQlT TUFQX1hBVFRSX05PTl9WT0xBVElMRQkweDAwMDAwMDAyCisjZGVmaW5lCVNNQVBfWEFUVFJfTUFT SwkJKFNNQVBfWEFUVFJfRU5BQkxFRCB8IFNNQVBfWEFUVFJfTk9OX1ZPTEFUSUxFKQorCitzdHJ1 Y3QgYmlvc19zbWFwIHsKKyAgICB1X2ludDY0X3QJYmFzZTsKKyAgICB1X2ludDY0X3QJbGVuZ3Ro OworICAgIHVfaW50MzJfdAl0eXBlOworfSBfX3BhY2tlZDsKKworLyogU3RydWN0dXJlIGV4dGVu ZGVkIHRvIGluY2x1ZGUgZXh0ZW5kZWQgYXR0cmlidXRlIGZpZWxkIGluIEFDUEkgMy4wLiAqLwor c3RydWN0IGJpb3Nfc21hcF94YXR0ciB7CisgICAgdV9pbnQ2NF90CWJhc2U7CisgICAgdV9pbnQ2 NF90CWxlbmd0aDsKKyAgICB1X2ludDMyX3QJdHlwZTsKKyAgICB1X2ludDMyX3QJeGF0dHI7Cit9 IF9fcGFja2VkOworCQorLyoKKyAqIFN5c3RlbSBNYW5hZ2VtZW50IEJJT1MKKyAqLworI2RlZmlu ZQlTTUJJT1NfU1RBUlQJMHhmMDAwMAorI2RlZmluZQlTTUJJT1NfU1RFUAkweDEwCisjZGVmaW5l CVNNQklPU19PRkYJMAorI2RlZmluZQlTTUJJT1NfTEVOCTQKKyNkZWZpbmUJU01CSU9TX1NJRwki X1NNXyIKKworc3RydWN0IHNtYmlvc19lcHMgeworCXVpbnQ4X3QJCWFuY2hvcl9zdHJpbmdbNF07 CQkvKiAnX1NNXycgKi8KKwl1aW50OF90CQljaGVja3N1bTsKKwl1aW50OF90CQlsZW5ndGg7CisJ dWludDhfdAkJbWFqb3JfdmVyc2lvbjsKKwl1aW50OF90CQltaW5vcl92ZXJzaW9uOworCXVpbnQx Nl90CW1heGltdW1fc3RydWN0dXJlX3NpemU7CisJdWludDhfdAkJZW50cnlfcG9pbnRfcmV2aXNp b247CisJdWludDhfdAkJZm9ybWF0dGVkX2FyZWFbNV07CisJdWludDhfdAkJaW50ZXJtZWRpYXRl X2FuY2hvcl9zdHJpbmdbNV07CS8qICdfRE1JXycgKi8KKwl1aW50OF90CQlpbnRlcm1lZGlhdGVf Y2hlY2tzdW07CisJdWludDE2X3QJc3RydWN0dXJlX3RhYmxlX2xlbmd0aDsKKwl1aW50MzJfdAlz dHJ1Y3R1cmVfdGFibGVfYWRkcmVzczsKKwl1aW50MTZfdAludW1iZXJfc3RydWN0dXJlczsKKwl1 aW50OF90CQlCQ0RfcmV2aXNpb247Cit9OworCitzdHJ1Y3Qgc21iaW9zX3N0cnVjdHVyZV9oZWFk ZXIgeworCXVpbnQ4X3QJCXR5cGU7CisJdWludDhfdAkJbGVuZ3RoOworCXVpbnQxNl90CWhhbmRs ZTsKK307CisKKyNpZmRlZiBfS0VSTkVMCisjZGVmaW5lIEJJT1NfUEFERFJUT1ZBRERSKHgpCSgo eCkgKyBLRVJOQkFTRSkKKyNkZWZpbmUgQklPU19WQUREUlRPUEFERFIoeCkJKCh4KSAtIEtFUk5C QVNFKQorCitzdHJ1Y3QgYmlvc19vZW1fc2lnbmF0dXJlIHsKKwljaGFyICogYW5jaG9yOwkJLyog c2VhcmNoIGFuY2hvciBzdHJpbmcgaW4gQklPUyBtZW1vcnkgKi8KKwlzaXplX3Qgb2Zmc2V0OwkJ Lyogb2Zmc2V0IGZyb20gYW5jaG9yIChtYXkgYmUgbmVnYXRpdmUpICovCisJc2l6ZV90IHRvdGxl bjsJCS8qIHRvdGFsIGxlbmd0aCBvZiBCSU9TIHN0cmluZyB0byBjb3B5ICovCit9IF9fcGFja2Vk OworCitzdHJ1Y3QgYmlvc19vZW1fcmFuZ2UgeworCXVfaW50IGZyb207CQkvKiBzaG91bGRuJ3Qg YmUgYmVsb3cgMHhlMDAwMCAqLworCXVfaW50IHRvOwkJLyogc2hvdWxkbid0IGJlIGFib3ZlIDB4 ZmZmZmYgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiaW9zX29lbSB7CisJc3RydWN0IGJpb3Nf b2VtX3JhbmdlIHJhbmdlOworCXN0cnVjdCBiaW9zX29lbV9zaWduYXR1cmUgc2lnbmF0dXJlW107 Cit9IF9fcGFja2VkOworCitpbnQJYmlvc19vZW1fc3RyaW5ncyhzdHJ1Y3QgYmlvc19vZW0gKm9l bSwgdV9jaGFyICpidWZmZXIsIHNpemVfdCBtYXhsZW4pOwordWludDMyX3QgYmlvc19zaWdzZWFy Y2godWludDMyX3Qgc3RhcnQsIHVfY2hhciAqc2lnLCBpbnQgc2lnbGVuLCBpbnQgcGFyYWxlbiwK KwkgICAgaW50IHNpZ29mcyk7Cit2b2lkIGJpb3NfYWRkX3NtYXBfZW50cmllcyhzdHJ1Y3QgYmlv c19zbWFwICpzbWFwYmFzZSwgdV9pbnQzMl90IHNtYXBzaXplLAorCSAgICB2bV9wYWRkcl90ICpw aHlzbWFwLCBpbnQgKnBoeXNtYXBfaWR4KTsKKyNlbmRpZgorCisjZW5kaWYgLyogX01BQ0hJTkVf UENfQklPU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvcGMvZGlzcGxheS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Bj L2Rpc3BsYXkuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wYy9kaXNw bGF5LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjL2Rpc3BsYXkuaAkyMDE2LTA5LTI5IDAwOjI0OjU0 LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ1IEBACisvKgorICogSUJNIFBDIGRpc3BsYXkg ZGVmaW5pdGlvbnMKKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1 ZGUvcGMvZGlzcGxheS5oIDEzOTczMCAyMDA1LTAxLTA1IDIwOjExOjEzWiBpbXAgJAorICovCisK Ky8qIENvbG9yIGF0dHJpYnV0ZXMgZm9yIGZvcmVncm91bmQgdGV4dCAqLworCisjZGVmaW5lCUZH X0JMQUNLCQkgICAwCisjZGVmaW5lCUZHX0JMVUUJCQkgICAxCisjZGVmaW5lCUZHX0dSRUVOCQkg ICAyCisjZGVmaW5lCUZHX0NZQU4JCQkgICAzCisjZGVmaW5lCUZHX1JFRAkJCSAgIDQKKyNkZWZp bmUJRkdfTUFHRU5UQQkJICAgNQorI2RlZmluZQlGR19CUk9XTgkJICAgNgorI2RlZmluZQlGR19M SUdIVEdSRVkJCSAgIDcKKyNkZWZpbmUJRkdfREFSS0dSRVkJCSAgIDgKKyNkZWZpbmUJRkdfTElH SFRCTFVFCQkgICA5CisjZGVmaW5lCUZHX0xJR0hUR1JFRU4JCSAgMTAKKyNkZWZpbmUJRkdfTElH SFRDWUFOCQkgIDExCisjZGVmaW5lCUZHX0xJR0hUUkVECQkgIDEyCisjZGVmaW5lCUZHX0xJR0hU TUFHRU5UQQkJICAxMworI2RlZmluZQlGR19ZRUxMT1cJCSAgMTQKKyNkZWZpbmUJRkdfV0hJVEUJ CSAgMTUKKyNkZWZpbmUJRkdfQkxJTksJCTB4ODAKKworLyogQ29sb3IgYXR0cmlidXRlcyBmb3Ig dGV4dCBiYWNrZ3JvdW5kICovCisKKyNkZWZpbmUJQkdfQkxBQ0sJCTB4MDAKKyNkZWZpbmUJQkdf QkxVRQkJCTB4MTAKKyNkZWZpbmUJQkdfR1JFRU4JCTB4MjAKKyNkZWZpbmUJQkdfQ1lBTgkJCTB4 MzAKKyNkZWZpbmUJQkdfUkVECQkJMHg0MAorI2RlZmluZQlCR19NQUdFTlRBCQkweDUwCisjZGVm aW5lCUJHX0JST1dOCQkweDYwCisjZGVmaW5lCUJHX0xJR0hUR1JFWQkJMHg3MAorCisvKiBNb25v Y2hyb21lIGF0dHJpYnV0ZXMgZm9yIGZvcmVncm91bmQgdGV4dCAqLworCisjZGVmaW5lCUZHX1VO REVSTElORQkJMHgwMQorI2RlZmluZQlGR19JTlRFTlNFCQkweDA4CisKKy8qIE1vbm9jaHJvbWUg YXR0cmlidXRlcyBmb3IgdGV4dCBiYWNrZ3JvdW5kICovCisKKyNkZWZpbmUJQkdfSU5URU5TRQkJ MHgxMApkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNi LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNiLmgKLS0tIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNiLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjYi5o CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTU3IEBACisv Ki0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBQZXRlciBXZW1tLgorICogQ29weXJpZ2h0IChjKSAx OTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdh cmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcGNiLmgJNS4xMCAoQmVy a2VsZXkpIDUvMTIvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVk ZS9wY2IuaCAyOTA3MjggMjAxNS0xMS0xMiAyMjowMDo1OVogamhiICQKKyAqLworCisjaWZuZGVm IF9BTUQ2NF9QQ0JfSF8KKyNkZWZpbmUgX0FNRDY0X1BDQl9IXworCisvKgorICogQU1ENjQgcHJv Y2VzcyBjb250cm9sIGJsb2NrCisgKi8KKyNpbmNsdWRlIDxtYWNoaW5lL2ZwdS5oPgorI2luY2x1 ZGUgPG1hY2hpbmUvc2VnbWVudHMuaD4KKworI2lmZGVmIF9fYW1kNjRfXworLyoKKyAqIE5COiBU aGUgZmllbGRzIG1hcmtlZCB3aXRoICgqKSBhcmUgdXNlZCBieSBrZXJuZWwgZGVidWdnZXJzLiAg VGhlaXIKKyAqIEFCSSBzaG91bGQgYmUgcHJlc2VydmVkLgorICovCitzdHJ1Y3QgcGNiIHsKKwly ZWdpc3Rlcl90CXBjYl9yMTU7CS8qICgqKSAqLworCXJlZ2lzdGVyX3QJcGNiX3IxNDsJLyogKCop ICovCisJcmVnaXN0ZXJfdAlwY2JfcjEzOwkvKiAoKikgKi8KKwlyZWdpc3Rlcl90CXBjYl9yMTI7 CS8qICgqKSAqLworCXJlZ2lzdGVyX3QJcGNiX3JicDsJLyogKCopICovCisJcmVnaXN0ZXJfdAlw Y2JfcnNwOwkvKiAoKikgKi8KKwlyZWdpc3Rlcl90CXBjYl9yYng7CS8qICgqKSAqLworCXJlZ2lz dGVyX3QJcGNiX3JpcDsJLyogKCopICovCisJcmVnaXN0ZXJfdAlwY2JfZnNiYXNlOworCXJlZ2lz dGVyX3QJcGNiX2dzYmFzZTsKKwlyZWdpc3Rlcl90CXBjYl9rZ3NiYXNlOworCXJlZ2lzdGVyX3QJ cGNiX2NyMDsKKwlyZWdpc3Rlcl90CXBjYl9jcjI7CisJcmVnaXN0ZXJfdAlwY2JfY3IzOworCXJl Z2lzdGVyX3QJcGNiX2NyNDsKKwlyZWdpc3Rlcl90CXBjYl9kcjA7CisJcmVnaXN0ZXJfdAlwY2Jf ZHIxOworCXJlZ2lzdGVyX3QJcGNiX2RyMjsKKwlyZWdpc3Rlcl90CXBjYl9kcjM7CisJcmVnaXN0 ZXJfdAlwY2JfZHI2OworCXJlZ2lzdGVyX3QJcGNiX2RyNzsKKworCXN0cnVjdCByZWdpb25fZGVz Y3JpcHRvciBwY2JfZ2R0OworCXN0cnVjdCByZWdpb25fZGVzY3JpcHRvciBwY2JfaWR0OworCXN0 cnVjdCByZWdpb25fZGVzY3JpcHRvciBwY2JfbGR0OworCXVpbnQxNl90CXBjYl90cjsKKworCXVf aW50CQlwY2JfZmxhZ3M7CisjZGVmaW5lCVBDQl9GVUxMX0lSRVQJMHgwMQkvKiBmdWxsIGlyZXQg aXMgcmVxdWlyZWQgKi8KKyNkZWZpbmUJUENCX0RCUkVHUwkweDAyCS8qIHByb2Nlc3MgdXNpbmcg ZGVidWcgcmVnaXN0ZXJzICovCisjZGVmaW5lCVBDQl9LRVJORlBVCTB4MDQJLyoga2VybmVsIHVz ZXMgZnB1ICovCisjZGVmaW5lCVBDQl9GUFVJTklURE9ORQkweDA4CS8qIGZwdSBzdGF0ZSBpcyBp bml0aWFsaXplZCAqLworI2RlZmluZQlQQ0JfVVNFUkZQVUlOSVRET05FIDB4MTAgLyogZnB1IHVz ZXIgc3RhdGUgaXMgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUJUENCXzMyQklUCTB4NDAJLyogcHJv Y2VzcyBoYXMgMzIgYml0IGNvbnRleHQgKHNlZ3MgZXRjKSAqLworCisJdWludDE2X3QJcGNiX2lu aXRpYWxfZnB1Y3c7CisKKwkvKiBjb3B5aW4vb3V0IGZhdWx0IHJlY292ZXJ5ICovCisJY2FkZHJf dAkJcGNiX29uZmF1bHQ7CisKKwl1aW50NjRfdAlwY2JfcGFkMDsKKworCS8qIGxvY2FsIHRzcywg d2l0aCBpL28gYml0bWFwOyBOVUxMIGZvciBjb21tb24gKi8KKwlzdHJ1Y3QgYW1kNjR0c3MgKnBj Yl90c3NwOworCisJLyogbW9kZWwgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisJcmVnaXN0ZXJfdAlw Y2JfZWZlcjsKKwlyZWdpc3Rlcl90CXBjYl9zdGFyOworCXJlZ2lzdGVyX3QJcGNiX2xzdGFyOwor CXJlZ2lzdGVyX3QJcGNiX2NzdGFyOworCXJlZ2lzdGVyX3QJcGNiX3NmbWFzazsKKworCXN0cnVj dCBzYXZlZnB1CSpwY2Jfc2F2ZTsKKworCXVpbnQ2NF90CXBjYl9wYWRbNV07Cit9OworCisvKiBQ ZXItQ1BVIHN0YXRlIHNhdmVkIGR1cmluZyBzdXNwZW5kIGFuZCByZXN1bWUuICovCitzdHJ1Y3Qg c3VzcHBjYiB7CisJc3RydWN0IHBjYglzcF9wY2I7CisKKwkvKiBmcHUgY29udGV4dCBmb3Igc3Vz cGVuZC9yZXN1bWUgKi8KKwl2b2lkCQkqc3BfZnB1c3VzcGVuZDsKK307CisjZW5kaWYKKworI2lm ZGVmIF9LRVJORUwKK3N0cnVjdCB0cmFwZnJhbWU7CisKKy8qCisgKiBUaGUgcGNiX2ZsYWdzIGlz IG9ubHkgbW9kaWZpZWQgYnkgY3VycmVudCB0aHJlYWQsIG9yIGJ5IG90aGVyIHRocmVhZHMKKyAq IHdoZW4gY3VycmVudCB0aHJlYWQgaXMgc3RvcHBlZC4gIEhvd2V2ZXIsIGN1cnJlbnQgdGhyZWFk IG1heSBjaGFuZ2UgaXQKKyAqIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0IGluIGNwdV9zd2l0 Y2goKSwgb3IgaW4gdGhlIHRyYXAgaGFuZGxlci4KKyAqIFdoZW4gd2UgcmVhZC1tb2RpZnktd3Jp dGUgcGNiX2ZsYWdzIGZyb20gQyBzb3VyY2VzLCBjb21waWxlciBtYXkgZ2VuZXJhdGUKKyAqIGNv ZGUgdGhhdCBpcyBub3QgYXRvbWljIHJlZ2FyZGluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBJ ZiBhIHRyYXAgb3IKKyAqIGludGVycnVwdCBoYXBwZW5zIGFuZCBhbnkgZmxhZyBpcyBtb2RpZmll ZCBmcm9tIHRoZSBoYW5kbGVyLCBpdCBjYW4gYmUKKyAqIGNsb2JiZXJlZCB3aXRoIHRoZSBjYWNo ZWQgdmFsdWUgbGF0ZXIuICBUaGVyZWZvcmUsIHdlIGltcGxlbWVudCBzZXR0aW5nCisgKiBhbmQg Y2xlYXJpbmcgZmxhZ3Mgd2l0aCBzaW5nbGUtaW5zdHJ1Y3Rpb24gZnVuY3Rpb25zLCB3aGljaCBk byBub3QgcmFjZQorICogd2l0aCBwb3NzaWJsZSBtb2RpZmljYXRpb24gb2YgdGhlIGZsYWdzIGZy b20gdGhlIHRyYXAgb3IgaW50ZXJydXB0IGNvbnRleHQsCisgKiBiZWNhdXNlIHRyYXBzIGFuZCBp bnRlcnJ1cHRzIGFyZSBleGVjdXRlZCBvbmx5IG9uIGluc3RydWN0aW9uIGJvdW5kYXJ5LgorICov CitzdGF0aWMgX19pbmxpbmUgdm9pZAorc2V0X3BjYl9mbGFncyhzdHJ1Y3QgcGNiICpwY2IsIGNv bnN0IHVfaW50IGZsYWdzKQoreworCisJX19hc20gX192b2xhdGlsZSgib3JsICUxLCUwIgorCSAg ICA6ICI9bSIgKHBjYi0+cGNiX2ZsYWdzKSA6ICJpciIgKGZsYWdzKSwgIm0iIChwY2ItPnBjYl9m bGFncykKKwkgICAgOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NsZWFyX3Bj Yl9mbGFncyhzdHJ1Y3QgcGNiICpwY2IsIGNvbnN0IHVfaW50IGZsYWdzKQoreworCisJX19hc20g X192b2xhdGlsZSgiYW5kbCAlMSwlMCIKKwkgICAgOiAiPW0iIChwY2ItPnBjYl9mbGFncykgOiAi aXIiICh+ZmxhZ3MpLCAibSIgKHBjYi0+cGNiX2ZsYWdzKQorCSAgICA6ICJjYyIpOworfQorCit2 b2lkCW1ha2VjdHgoc3RydWN0IHRyYXBmcmFtZSAqLCBzdHJ1Y3QgcGNiICopOworaW50CXNhdmVj dHgoc3RydWN0IHBjYiAqKSBfX3JldHVybnNfdHdpY2U7Cit2b2lkCXJlc3VtZWN0eChzdHJ1Y3Qg cGNiICopOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9BTUQ2NF9QQ0JfSF8gKi8KZGlmZiAtdSAt ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjaV9jZmdyZWcuaCAvdXNy L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wY2lfY2ZncmVnLmgKLS0tIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNpX2NmZ3JlZy5oCTE5NzAtMDEtMDEgMDE6MDA6 MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGlu ZS9wY2lfY2ZncmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs MCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAq LworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3BjaV9jZmdyZWcu aCAyMjM0NDAgMjAxMS0wNi0yMiAyMTowNDoxM1ogamhiICQgKi8KKworI2luY2x1ZGUgPHg4Ni9w Y2lfY2ZncmVnLmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS9wY3B1LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcGNwdS5oCi0t LSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BjcHUuaAkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvcGNwdS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg KzEsMjUxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgUGV0ZXIgV2VtbSA8cGV0ZXJAbmV0cGxl eC5jb20uYXU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg QkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9S IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcv MTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wY3B1LmggMjgyNjg0IDIwMTUtMDUtMDkgMTk6MTE6MDFa IGtpYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9QQ1BVX0hfCisjZGVmaW5lCV9NQUNISU5F X1BDUFVfSF8KKworI2lmbmRlZiBfU1lTX0NERUZTX0hfCisjZXJyb3IgInN5cy9jZGVmcy5oIGlz IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZpbGUiCisjZW5kaWYKKworLyoKKyAqIFRoZSBTTVAg cGFydHMgYXJlIHNldHVwIGluIHBtYXAuYyBhbmQgbG9jb3JlLnMgZm9yIHRoZSBCU1AsIGFuZAor ICogbXBfbWFjaGRlcC5jIHNldHMgdXAgdGhlIGRhdGEgZm9yIHRoZSBBUCdzIHRvICJzZWUiIHdo ZW4gdGhleSBhd2FrZS4KKyAqIFRoZSByZWFzb24gZm9yIGRvaW5nIGl0IHZpYSBhIHN0cnVjdCBp cyBzbyB0aGF0IGFuIGFycmF5IG9mIHBvaW50ZXJzCisgKiB0byBlYWNoIENQVSdzIGRhdGEgY2Fu IGJlIHNldCB1cCBmb3IgdGhpbmdzIGxpa2UgImNoZWNrIGN1cnByb2Mgb24gYWxsCisgKiBvdGhl ciBwcm9jZXNzb3JzIgorICovCisjZGVmaW5lCVBDUFVfTURfRklFTERTCQkJCQkJCVwKKwljaGFy CXBjX21vbml0b3JidWZbMTI4XSBfX2FsaWduZWQoMTI4KTsgLyogY2FjaGUgbGluZSAqLwlcCisJ c3RydWN0CXBjcHUgKnBjX3BydnNwYWNlOwkvKiBTZWxmLXJlZmVyZW5jZSAqLwkJXAorCXN0cnVj dAlwbWFwICpwY19jdXJwbWFwOwkJCQkJXAorCXN0cnVjdAlhbWQ2NHRzcyAqcGNfdHNzcDsJLyog VFNTIHNlZ21lbnQgYWN0aXZlIG9uIENQVSAqLwlcCisJc3RydWN0CWFtZDY0dHNzICpwY19jb21t b250c3NwOy8qIENvbW1vbiBUU1MgZm9yIHRoZSBDUFUgKi8JXAorCXJlZ2lzdGVyX3QgcGNfcnNw MDsJCQkJCQlcCisJcmVnaXN0ZXJfdCBwY19zY3JhdGNoX3JzcDsJLyogVXNlciAlcnNwIGluIHN5 c2NhbGwgKi8JXAorCXVfaW50CXBjX2FwaWNfaWQ7CQkJCQkJXAorCXVfaW50ICAgcGNfYWNwaV9p ZDsJCS8qIEFDUEkgQ1BVIGlkICovCQlcCisJLyogUG9pbnRlciB0byB0aGUgQ1BVICVmcyBkZXNj cmlwdG9yICovCQkJCVwKKwlzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3IJKnBjX2ZzMzJw OwkJCVwKKwkvKiBQb2ludGVyIHRvIHRoZSBDUFUgJWdzIGRlc2NyaXB0b3IgKi8JCQkJXAorCXN0 cnVjdCB1c2VyX3NlZ21lbnRfZGVzY3JpcHRvcgkqcGNfZ3MzMnA7CQkJXAorCS8qIFBvaW50ZXIg dG8gdGhlIENQVSBMRFQgZGVzY3JpcHRvciAqLwkJCQlcCisJc3RydWN0IHN5c3RlbV9zZWdtZW50 X2Rlc2NyaXB0b3IgKnBjX2xkdDsJCQlcCisJLyogUG9pbnRlciB0byB0aGUgQ1BVIFRTUyBkZXNj cmlwdG9yICovCQkJCVwKKwlzdHJ1Y3Qgc3lzdGVtX3NlZ21lbnRfZGVzY3JpcHRvciAqcGNfdHNz OwkJCVwKKwl1aW50NjRfdAlwY19wbV9zYXZlX2NudDsJCQkJCVwKKwl1X2ludAlwY19jbWNpX21h c2s7CQkvKiBNQ3ggYmFua3MgZm9yIENNQ0kgKi8JXAorCXVpbnQ2NF90IHBjX2RicmVnWzE2XTsJ CS8qIGRkYiBkZWJ1Z2dpbmcgcmVncyAqLwlcCisJaW50IHBjX2RicmVnX2NtZDsJCS8qIGRkYiBk ZWJ1Z2dpbmcgcmVnIGNtZCAqLwlcCisJdV9pbnQJcGNfdmNwdV9pZDsJCS8qIFhlbiB2Q1BVIElE ICovCQlcCisJdWludDMyX3QgcGNfcGNpZF9uZXh0OwkJCQkJCVwKKwl1aW50MzJfdCBwY19wY2lk X2dlbjsJCQkJCQlcCisJY2hhcglfX3BhZFsxNDldCQkvKiBiZSBkaXZpc29yIG9mIFBBR0VfU0la RQlcCisJCQkJCSAgIGFmdGVyIGNhY2hlIGFsaWdubWVudCAqLworCisjZGVmaW5lCVBDX0RCUkVH X0NNRF9OT05FCTAKKyNkZWZpbmUJUENfREJSRUdfQ01EX0xPQUQJMQorCisjaWZkZWYgX0tFUk5F TAorCisjaWZkZWYgbGludAorCitleHRlcm4gc3RydWN0IHBjcHUgKnBjcHVwOworCisjZGVmaW5l CVBDUFVfR0VUKG1lbWJlcikJKHBjcHVwLT5wY18gIyMgbWVtYmVyKQorI2RlZmluZQlQQ1BVX0FE RChtZW1iZXIsIHZhbCkJKHBjcHVwLT5wY18gIyMgbWVtYmVyICs9ICh2YWwpKQorI2RlZmluZQlQ Q1BVX0lOQyhtZW1iZXIpCVBDUFVfQUREKG1lbWJlciwgMSkKKyNkZWZpbmUJUENQVV9QVFIobWVt YmVyKQkoJnBjcHVwLT5wY18gIyMgbWVtYmVyKQorI2RlZmluZQlQQ1BVX1NFVChtZW1iZXIsIHZh bCkJKHBjcHVwLT5wY18gIyMgbWVtYmVyID0gKHZhbCkpCisKKyNlbGlmIGRlZmluZWQoX19HTlVD TElLRV9BU00pICYmIGRlZmluZWQoX19HTlVDTElLRV9fX1RZUEVPRikKKworLyoKKyAqIEV2YWx1 YXRlcyB0byB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZS4KKyAq LworI2RlZmluZQlfX3BjcHVfb2Zmc2V0KG5hbWUpCQkJCQkJXAorCV9fb2Zmc2V0b2Yoc3RydWN0 IHBjcHUsIG5hbWUpCisKKy8qCisgKiBFdmFsdWF0ZXMgdG8gdGhlIHR5cGUgb2YgdGhlIHBlci1j cHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmluZQlfX3BjcHVfdHlwZShuYW1lKQkJCQkJCVwK KwlfX3R5cGVvZigoKHN0cnVjdCBwY3B1ICopMCktPm5hbWUpCisKKy8qCisgKiBFdmFsdWF0ZXMg dG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmlu ZQlfX1BDUFVfUFRSKG5hbWUpIF9fZXh0ZW5zaW9uX18gKHsJCQkJXAorCV9fcGNwdV90eXBlKG5h bWUpICpfX3A7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVn czolMSwlMDsgYWRkcSAlMiwlMCIJCQlcCisJICAgIDogIj1yIiAoX19wKQkJCQkJCVwKKwkgICAg OiAibSIgKCooc3RydWN0IHBjcHUgKikoX19wY3B1X29mZnNldChwY19wcnZzcGFjZSkpKSwJXAor CSAgICAgICJpIiAoX19wY3B1X29mZnNldChuYW1lKSkpOwkJCQlcCisJCQkJCQkJCQlcCisJX19w OwkJCQkJCQkJXAorfSkKKworLyoKKyAqIEV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgdGhlIHBl ci1jcHUgdmFyaWFibGUgbmFtZS4KKyAqLworI2RlZmluZQlfX1BDUFVfR0VUKG5hbWUpIF9fZXh0 ZW5zaW9uX18gKHsJCQkJXAorCV9fcGNwdV90eXBlKG5hbWUpIF9fcmVzOwkJCQkJXAorCXN0cnVj dCBfX3MgewkJCQkJCQlcCisJCXVfY2hhcglfX2JbTUlOKHNpemVvZihfX3BjcHVfdHlwZShuYW1l KSksIDgpXTsJCVwKKwl9IF9fczsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc2l6ZW9mKF9f cmVzKSA9PSAxIHx8IHNpemVvZihfX3JlcykgPT0gMiB8fAkJCVwKKwkgICAgc2l6ZW9mKF9fcmVz KSA9PSA0IHx8IHNpemVvZihfX3JlcykgPT0gOCkgewkJCVwKKwkJX19hc20gX192b2xhdGlsZSgi bW92ICUlZ3M6JTEsJTAiCQkJXAorCQkgICAgOiAiPXIiIChfX3MpCQkJCQlcCisJCSAgICA6ICJt IiAoKihzdHJ1Y3QgX19zICopKF9fcGNwdV9vZmZzZXQobmFtZSkpKSk7CVwKKwkJKihzdHJ1Y3Qg X19zICopKHZvaWQgKikmX19yZXMgPSBfX3M7CQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJX19y ZXMgPSAqX19QQ1BVX1BUUihuYW1lKTsJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3JlczsJCQkJCQkJ CVwKK30pCisKKy8qCisgKiBBZGRzIHRoZSB2YWx1ZSB0byB0aGUgcGVyLWNwdSBjb3VudGVyIG5h bWUuICBUaGUgaW1wbGVtZW50YXRpb24KKyAqIG11c3QgYmUgYXRvbWljIHdpdGggcmVzcGVjdCB0 byBpbnRlcnJ1cHRzLgorICovCisjZGVmaW5lCV9fUENQVV9BREQobmFtZSwgdmFsKSBkbyB7CQkJ CQlcCisJX19wY3B1X3R5cGUobmFtZSkgX192YWw7CQkJCQlcCisJc3RydWN0IF9fcyB7CQkJCQkJ CVwKKwkJdV9jaGFyCV9fYltNSU4oc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSwgOCldOwkJXAor CX0gX19zOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9fdmFsID0gKHZhbCk7CQkJCQkJCVwKKwlp ZiAoc2l6ZW9mKF9fdmFsKSA9PSAxIHx8IHNpemVvZihfX3ZhbCkgPT0gMiB8fAkJCVwKKwkgICAg c2l6ZW9mKF9fdmFsKSA9PSA0IHx8IHNpemVvZihfX3ZhbCkgPT0gOCkgewkJCVwKKwkJX19zID0g KihzdHJ1Y3QgX19zICopKHZvaWQgKikmX192YWw7CQkJXAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJh ZGQgJTEsJSVnczolMCIJCQlcCisJCSAgICA6ICI9bSIgKCooc3RydWN0IF9fcyAqKShfX3BjcHVf b2Zmc2V0KG5hbWUpKSkJXAorCQkgICAgOiAiciIgKF9fcykpOwkJCQkJXAorCX0gZWxzZQkJCQkJ CQkJXAorCQkqX19QQ1BVX1BUUihuYW1lKSArPSBfX3ZhbDsJCQkJXAorfSB3aGlsZSAoMCkKKwor LyoKKyAqIEluY3JlbWVudHMgdGhlIHZhbHVlIG9mIHRoZSBwZXItY3B1IGNvdW50ZXIgbmFtZS4g IFRoZSBpbXBsZW1lbnRhdGlvbgorICogbXVzdCBiZSBhdG9taWMgd2l0aCByZXNwZWN0IHRvIGlu dGVycnVwdHMuCisgKi8KKyNkZWZpbmUJX19QQ1BVX0lOQyhuYW1lKSBkbyB7CQkJCQkJXAorCUNU QVNTRVJUKHNpemVvZihfX3BjcHVfdHlwZShuYW1lKSkgPT0gMSB8fAkJCVwKKwkgICAgc2l6ZW9m KF9fcGNwdV90eXBlKG5hbWUpKSA9PSAyIHx8CQkJCVwKKwkgICAgc2l6ZW9mKF9fcGNwdV90eXBl KG5hbWUpKSA9PSA0IHx8CQkJCVwKKwkgICAgc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSA9PSA4 KTsJCQkJXAorCWlmIChzaXplb2YoX19wY3B1X3R5cGUobmFtZSkpID09IDEpIHsJCQkJXAorCQlf X2FzbSBfX3ZvbGF0aWxlKCJpbmNiICUlZ3M6JTAiCQkJCVwKKwkJICAgIDogIj1tIiAoKihfX3Bj cHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSlcCisJCSAgICA6ICJtIiAoKihf X3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkpO1wKKwl9IGVsc2UgaWYg KHNpemVvZihfX3BjcHVfdHlwZShuYW1lKSkgPT0gMikgewkJCVwKKwkJX19hc20gX192b2xhdGls ZSgiaW5jdyAlJWdzOiUwIgkJCQlcCisJCSAgICA6ICI9bSIgKCooX19wY3B1X3R5cGUobmFtZSkg KikoX19wY3B1X29mZnNldChuYW1lKSkpXAorCQkgICAgOiAibSIgKCooX19wY3B1X3R5cGUobmFt ZSkgKikoX19wY3B1X29mZnNldChuYW1lKSkpKTtcCisJfSBlbHNlIGlmIChzaXplb2YoX19wY3B1 X3R5cGUobmFtZSkpID09IDQpIHsJCQlcCisJCV9fYXNtIF9fdm9sYXRpbGUoImluY2wgJSVnczol MCIJCQkJXAorCQkgICAgOiAiPW0iICgqKF9fcGNwdV90eXBlKG5hbWUpICopKF9fcGNwdV9vZmZz ZXQobmFtZSkpKVwKKwkJICAgIDogIm0iICgqKF9fcGNwdV90eXBlKG5hbWUpICopKF9fcGNwdV9v ZmZzZXQobmFtZSkpKSk7XAorCX0gZWxzZSBpZiAoc2l6ZW9mKF9fcGNwdV90eXBlKG5hbWUpKSA9 PSA4KSB7CQkJXAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJpbmNxICUlZ3M6JTAiCQkJCVwKKwkJICAg IDogIj1tIiAoKihfX3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSlcCisJ CSAgICA6ICJtIiAoKihfX3BjcHVfdHlwZShuYW1lKSAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkp O1wKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogU2V0cyB0aGUgdmFsdWUgb2Yg dGhlIHBlci1jcHUgdmFyaWFibGUgbmFtZSB0byB2YWx1ZSB2YWwuCisgKi8KKyNkZWZpbmUJX19Q Q1BVX1NFVChuYW1lLCB2YWwpIHsJCQkJCQlcCisJX19wY3B1X3R5cGUobmFtZSkgX192YWw7CQkJ CQlcCisJc3RydWN0IF9fcyB7CQkJCQkJCVwKKwkJdV9jaGFyCV9fYltNSU4oc2l6ZW9mKF9fcGNw dV90eXBlKG5hbWUpKSwgOCldOwkJXAorCX0gX19zOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9f dmFsID0gKHZhbCk7CQkJCQkJCVwKKwlpZiAoc2l6ZW9mKF9fdmFsKSA9PSAxIHx8IHNpemVvZihf X3ZhbCkgPT0gMiB8fAkJCVwKKwkgICAgc2l6ZW9mKF9fdmFsKSA9PSA0IHx8IHNpemVvZihfX3Zh bCkgPT0gOCkgewkJCVwKKwkJX19zID0gKihzdHJ1Y3QgX19zICopKHZvaWQgKikmX192YWw7CQkJ XAorCQlfX2FzbSBfX3ZvbGF0aWxlKCJtb3YgJTEsJSVnczolMCIJCQlcCisJCSAgICA6ICI9bSIg KCooc3RydWN0IF9fcyAqKShfX3BjcHVfb2Zmc2V0KG5hbWUpKSkJXAorCQkgICAgOiAiciIgKF9f cykpOwkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKl9fUENQVV9QVFIobmFtZSkgPSBfX3Zh bDsJCQkJXAorCX0JCQkJCQkJCVwKK30KKworI2RlZmluZQlQQ1BVX0dFVChtZW1iZXIpCV9fUENQ VV9HRVQocGNfICMjIG1lbWJlcikKKyNkZWZpbmUJUENQVV9BREQobWVtYmVyLCB2YWwpCV9fUENQ VV9BREQocGNfICMjIG1lbWJlciwgdmFsKQorI2RlZmluZQlQQ1BVX0lOQyhtZW1iZXIpCV9fUENQ VV9JTkMocGNfICMjIG1lbWJlcikKKyNkZWZpbmUJUENQVV9QVFIobWVtYmVyKQlfX1BDUFVfUFRS KHBjXyAjIyBtZW1iZXIpCisjZGVmaW5lCVBDUFVfU0VUKG1lbWJlciwgdmFsKQlfX1BDUFVfU0VU KHBjXyAjIyBtZW1iZXIsIHZhbCkKKworI2RlZmluZQlPRkZTRVRPRl9DVVJUSFJFQUQJMAorI2lm ZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xh bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV251bGwtZGVyZWZlcmVuY2UiCisjZW5kaWYKK3N0YXRp YyBfX2lubGluZSBfX3B1cmUyIHN0cnVjdCB0aHJlYWQgKgorX19jdXJ0aHJlYWQodm9pZCkKK3sK KwlzdHJ1Y3QgdGhyZWFkICp0ZDsKKworCV9fYXNtKCJtb3ZxICUlZ3M6JTEsJTAiIDogIj1yIiAo dGQpCisJICAgIDogIm0iICgqKGNoYXIgKilPRkZTRVRPRl9DVVJUSFJFQUQpKTsKKwlyZXR1cm4g KHRkKTsKK30KKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AK KyNlbmRpZgorI2RlZmluZQljdXJ0aHJlYWQJCShfX2N1cnRocmVhZCgpKQorCisjZGVmaW5lCU9G RlNFVE9GX0NVUlBDQgkJMzIKK3N0YXRpYyBfX2lubGluZSBfX3B1cmUyIHN0cnVjdCBwY2IgKgor X19jdXJwY2Iodm9pZCkKK3sKKwlzdHJ1Y3QgcGNiICpwY2I7CisKKwlfX2FzbSgibW92cSAlJWdz OiUxLCUwIiA6ICI9ciIgKHBjYikgOiAibSIgKCooY2hhciAqKU9GRlNFVE9GX0NVUlBDQikpOwor CXJldHVybiAocGNiKTsKK30KKyNkZWZpbmUJY3VycGNiCQkoX19jdXJwY2IoKSkKKworI2RlZmlu ZQlJU19CU1AoKQkoUENQVV9HRVQoY3B1aWQpID09IDApCisKKyNlbHNlIC8qICFsaW50IHx8IGRl ZmluZWQoX19HTlVDTElLRV9BU00pICYmIGRlZmluZWQoX19HTlVDTElLRV9fX1RZUEVPRikgKi8K KworI2Vycm9yICJ0aGlzIGZpbGUgbmVlZHMgdG8gYmUgcG9ydGVkIHRvIHlvdXIgY29tcGlsZXIi CisKKyNlbmRpZiAvKiBsaW50LCBldGMuICovCisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisKKyNl bmRpZiAvKiAhX01BQ0hJTkVfUENQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL21hY2hpbmUvcG1hcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t YWNoaW5lL3BtYXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wbWFw LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC9tYWNoaW5lL3BtYXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAw MCArMDEwMApAQCAtMCwwICsxLDQyMSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0 ZXIgV2VtbS4KKyAqIENvcHlyaWdodCAoYykgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29k ZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAq IHRoZSBTeXN0ZW1zIFByb2dyYW1taW5nIEdyb3VwIG9mIHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgg Q29tcHV0ZXIKKyAqIFNjaWVuY2UgRGVwYXJ0bWVudCBhbmQgV2lsbGlhbSBKb2xpdHogb2YgVVVO RVQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2Yg dGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5E IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdF TlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgor ICogRGVyaXZlZCBmcm9tIGhwMzAwIHZlcnNpb24gYnkgTWlrZSBIaWJsZXIsIHRoaXMgdmVyc2lv biBieSBXaWxsaWFtCisgKiBKb2xpdHogdXNlcyBhIHJlY3Vyc2l2ZSBtYXAgW2EgcGRlIHBvaW50 cyB0byB0aGUgcGFnZSBkaXJlY3RvcnldIHRvCisgKiBtYXAgdGhlIHBhZ2UgdGFibGVzIHVzaW5n IHRoZSBwYWdldGFibGVzIHRoZW1zZWx2ZXMuIFRoaXMgaXMgZG9uZSB0bworICogcmVkdWNlIHRo ZSBpbXBhY3Qgb24ga2VybmVsIHZpcnR1YWwgbWVtb3J5IGZvciBsb3RzIG9mIHNwYXJzZSBhZGRy ZXNzCisgKiBzcGFjZSwgYW5kIHRvIHJlZHVjZSB0aGUgY29zdCBvZiBtZW1vcnkgdG8gZWFjaCBw cm9jZXNzLgorICoKKyAqCWZyb206IGhwMzAwOiBAKCMpcG1hcC5oCTcuMiAoQmVya2VsZXkpIDEy LzE2LzkwCisgKglmcm9tOiBAKCMpcG1hcC5oCTcuNCAoQmVya2VsZXkpIDUvMTIvOTEKKyAqICRG cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wbWFwLmggMjk5MzUwIDIwMTYt MDUtMTAgMDk6NTg6NTFaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9QTUFQX0hfCisj ZGVmaW5lCV9NQUNISU5FX1BNQVBfSF8KKworLyoKKyAqIFBhZ2UtZGlyZWN0b3J5IGFuZCBwYWdl LXRhYmxlIGVudHJpZXMgZm9sbG93IHRoaXMgZm9ybWF0LCB3aXRoIGEgZmV3CisgKiBvZiB0aGUg ZmllbGRzIG5vdCBwcmVzZW50IGhlcmUgYW5kIHRoZXJlLCBkZXBlbmRpbmcgb24gYSBsb3Qgb2Yg dGhpbmdzLgorICovCisJCQkJLyogLS0tLSBJbnRlbCBOb21lbmNsYXR1cmUgLS0tLSAqLworI2Rl ZmluZQlYODZfUEdfVgkweDAwMQkvKiBQCVZhbGlkCQkJKi8KKyNkZWZpbmUJWDg2X1BHX1JXCTB4 MDAyCS8qIFIvVwlSZWFkL1dyaXRlCQkqLworI2RlZmluZQlYODZfUEdfVQkweDAwNAkvKiBVL1Mg IFVzZXIvU3VwZXJ2aXNvcgkJKi8KKyNkZWZpbmUJWDg2X1BHX05DX1BXVAkweDAwOAkvKiBQV1QJ V3JpdGUgdGhyb3VnaAkJKi8KKyNkZWZpbmUJWDg2X1BHX05DX1BDRAkweDAxMAkvKiBQQ0QJQ2Fj aGUgZGlzYWJsZQkJKi8KKyNkZWZpbmUJWDg2X1BHX0EJMHgwMjAJLyogQQlBY2Nlc3NlZAkJKi8K KyNkZWZpbmUJWDg2X1BHX00JMHgwNDAJLyogRAlEaXJ0eQkJCSovCisjZGVmaW5lCVg4Nl9QR19Q UwkweDA4MAkvKiBQUwlQYWdlIHNpemUgKDA9NGssMT0yTSkJKi8KKyNkZWZpbmUJWDg2X1BHX1BU RV9QQVQJMHgwODAJLyogUEFUCVBBVCBpbmRleAkJKi8KKyNkZWZpbmUJWDg2X1BHX0cJMHgxMDAJ LyogRwlHbG9iYWwJCQkqLworI2RlZmluZQlYODZfUEdfQVZBSUwxCTB4MjAwCS8qICAgIC8JQXZh aWxhYmxlIGZvciBzeXN0ZW0JKi8KKyNkZWZpbmUJWDg2X1BHX0FWQUlMMgkweDQwMAkvKiAgIDwJ cHJvZ3JhbW1lcnMgdXNlCQkqLworI2RlZmluZQlYODZfUEdfQVZBSUwzCTB4ODAwCS8qICAgIFwJ CQkJKi8KKyNkZWZpbmUJWDg2X1BHX1BERV9QQVQJMHgxMDAwCS8qIFBBVAlQQVQgaW5kZXgJCSov CisjZGVmaW5lCVg4Nl9QR19OWAkoMXVsPDw2MykgLyogTm8tZXhlY3V0ZSAqLworI2RlZmluZQlY ODZfUEdfQVZBSUwoeCkJKDF1bCA8PCAoeCkpCisKKy8qIFBhZ2UgbGV2ZWwgY2FjaGUgY29udHJv bCBmaWVsZHMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIFBBVCB0eXBlICovCisjZGVmaW5lCVg4Nl9Q R19QREVfQ0FDSEUgKFg4Nl9QR19QREVfUEFUIHwgWDg2X1BHX05DX1BXVCB8IFg4Nl9QR19OQ19Q Q0QpCisjZGVmaW5lCVg4Nl9QR19QVEVfQ0FDSEUgKFg4Nl9QR19QVEVfUEFUIHwgWDg2X1BHX05D X1BXVCB8IFg4Nl9QR19OQ19QQ0QpCisKKy8qCisgKiBJbnRlbCBleHRlbmRlZCBwYWdlIHRhYmxl IChFUFQpIGJpdCBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZQlFUFRfUEdfUkVBRAkJMHgwMDEJ LyogUglSZWFkCQkqLworI2RlZmluZQlFUFRfUEdfV1JJVEUJCTB4MDAyCS8qIFcJV3JpdGUJCSov CisjZGVmaW5lCUVQVF9QR19FWEVDVVRFCQkweDAwNAkvKiBYCUV4ZWN1dGUJCSovCisjZGVmaW5l CUVQVF9QR19JR05PUkVfUEFUCTB4MDQwCS8qIElQQVQJSWdub3JlIFBBVAkqLworI2RlZmluZQlF UFRfUEdfUFMJCTB4MDgwCS8qIFBTCVBhZ2Ugc2l6ZQkqLworI2RlZmluZQlFUFRfUEdfQQkJMHgx MDAJLyogQQlBY2Nlc3NlZAkqLworI2RlZmluZQlFUFRfUEdfTQkJMHgyMDAJLyogRAlEaXJ0eQkJ Ki8KKyNkZWZpbmUJRVBUX1BHX01FTU9SWV9UWVBFKHgpCSgoeCkgPDwgMykgLyogTVQgTWVtb3J5 IFR5cGUJKi8KKworLyoKKyAqIERlZmluZSB0aGUgUEdfeHggbWFjcm9zIGluIHRlcm1zIG9mIHRo ZSBiaXRzIG9uIHg4NiBQVEVzLgorICovCisjZGVmaW5lCVBHX1YJCVg4Nl9QR19WCisjZGVmaW5l CVBHX1JXCQlYODZfUEdfUlcKKyNkZWZpbmUJUEdfVQkJWDg2X1BHX1UKKyNkZWZpbmUJUEdfTkNf UFdUCVg4Nl9QR19OQ19QV1QKKyNkZWZpbmUJUEdfTkNfUENECVg4Nl9QR19OQ19QQ0QKKyNkZWZp bmUJUEdfQQkJWDg2X1BHX0EKKyNkZWZpbmUJUEdfTQkJWDg2X1BHX00KKyNkZWZpbmUJUEdfUFMJ CVg4Nl9QR19QUworI2RlZmluZQlQR19QVEVfUEFUCVg4Nl9QR19QVEVfUEFUCisjZGVmaW5lCVBH X0cJCVg4Nl9QR19HCisjZGVmaW5lCVBHX0FWQUlMMQlYODZfUEdfQVZBSUwxCisjZGVmaW5lCVBH X0FWQUlMMglYODZfUEdfQVZBSUwyCisjZGVmaW5lCVBHX0FWQUlMMwlYODZfUEdfQVZBSUwzCisj ZGVmaW5lCVBHX1BERV9QQVQJWDg2X1BHX1BERV9QQVQKKyNkZWZpbmUJUEdfTlgJCVg4Nl9QR19O WAorI2RlZmluZQlQR19QREVfQ0FDSEUJWDg2X1BHX1BERV9DQUNIRQorI2RlZmluZQlQR19QVEVf Q0FDSEUJWDg2X1BHX1BURV9DQUNIRQorCisvKiBPdXIgdmFyaW91cyBpbnRlcnByZXRhdGlvbnMg b2YgdGhlIGFib3ZlICovCisjZGVmaW5lCVBHX1cJCVg4Nl9QR19BVkFJTDMJLyogIldpcmVkIiBw c2V1ZG9mbGFnICovCisjZGVmaW5lCVBHX01BTkFHRUQJWDg2X1BHX0FWQUlMMgorI2RlZmluZQlF UFRfUEdfRU1VTF9WCVg4Nl9QR19BVkFJTCg1MikKKyNkZWZpbmUJRVBUX1BHX0VNVUxfUlcJWDg2 X1BHX0FWQUlMKDUzKQorI2RlZmluZQlQR19GUkFNRQkoMHgwMDBmZmZmZmZmZmZmMDAwdWwpCisj ZGVmaW5lCVBHX1BTX0ZSQU1FCSgweDAwMGZmZmZmZmZlMDAwMDB1bCkKKworLyoKKyAqIFByb21v dGlvbiB0byBhIDJNQiAoUERFKSBwYWdlIG1hcHBpbmcgcmVxdWlyZXMgdGhhdCB0aGUgY29ycmVz cG9uZGluZyA0S0IKKyAqIChQVEUpIHBhZ2UgbWFwcGluZ3MgaGF2ZSBpZGVudGljYWwgc2V0dGlu Z3MgZm9yIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICovCisjZGVmaW5lCVBHX1BURV9QUk9NT1RF CShQR19OWCB8IFBHX01BTkFHRUQgfCBQR19XIHwgUEdfRyB8IFBHX1BURV9DQUNIRSB8IFwKKwkg ICAgUEdfTSB8IFBHX0EgfCBQR19VIHwgUEdfUlcgfCBQR19WKQorCisvKgorICogUGFnZSBQcm90 ZWN0aW9uIEV4Y2VwdGlvbiBiaXRzCisgKi8KKworI2RlZmluZSBQR0VYX1AJCTB4MDEJLyogUHJv dGVjdGlvbiB2aW9sYXRpb24gdnMuIG5vdCBwcmVzZW50ICovCisjZGVmaW5lIFBHRVhfVwkJMHgw MgkvKiBkdXJpbmcgYSBXcml0ZSBjeWNsZSAqLworI2RlZmluZSBQR0VYX1UJCTB4MDQJLyogYWNj ZXNzIGZyb20gVXNlciBtb2RlIChVUEwpICovCisjZGVmaW5lIFBHRVhfUlNWCTB4MDgJLyogcmVz ZXJ2ZWQgUFRFIGZpZWxkIGlzIG5vbi16ZXJvICovCisjZGVmaW5lIFBHRVhfSQkJMHgxMAkvKiBk dXJpbmcgYW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggKi8KKworLyogCisgKiB1bmRlZiB0aGUgUEdfeHgg bWFjcm9zIHRoYXQgZGVmaW5lIGJpdHMgaW4gdGhlIHJlZ3VsYXIgeDg2IFBURXMgdGhhdAorICog aGF2ZSBhIGRpZmZlcmVudCBwb3NpdGlvbiBpbiBuZXN0ZWQgUFRFcy4gVGhpcyBpcyBkb25lIHdo ZW4gY29tcGlsaW5nCisgKiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgYXdhcmUgb2YgdGhlIGRpZmZl cmVuY2VzIGJldHdlZW4gcmVndWxhciB4ODYgYW5kCisgKiBuZXN0ZWQgUFRFcy4KKyAqCisgKiBU aGUgYXBwcm9wcmlhdGUgYml0bWFzayB3aWxsIGJlIGNhbGN1bGF0ZWQgYXQgcnVudGltZSBiYXNl ZCBvbiB0aGUgcG1hcAorICogdHlwZS4KKyAqLworI2lmZGVmIEFNRDY0X05QVF9BV0FSRQorI3Vu ZGVmIFBHX0FWQUlMMQkJLyogWDg2X1BHX0FWQUlMMSBhbGlhc2VzIHdpdGggRVBUX1BHX00gKi8K KyN1bmRlZiBQR19HCisjdW5kZWYgUEdfQQorI3VuZGVmIFBHX00KKyN1bmRlZiBQR19QREVfUEFU CisjdW5kZWYgUEdfUERFX0NBQ0hFCisjdW5kZWYgUEdfUFRFX1BBVAorI3VuZGVmIFBHX1BURV9D QUNIRQorI3VuZGVmIFBHX1JXCisjdW5kZWYgUEdfVgorI2VuZGlmCisKKy8qCisgKiBQdGUgcmVs YXRlZCBtYWNyb3MuICBUaGlzIGlzIGNvbXBsaWNhdGVkIGJ5IGhhdmluZyB0byBkZWFsIHdpdGgK KyAqIHRoZSBzaWduIGV4dGVuc2lvbiBvZiB0aGUgNDh0aCBiaXQuCisgKi8KKyNkZWZpbmUgS1ZB RERSKGw0LCBsMywgbDIsIGwxKSAoIFwKKwkoKHVuc2lnbmVkIGxvbmcpLTEgPDwgNDcpIHwgXAor CSgodW5zaWduZWQgbG9uZykobDQpIDw8IFBNTDRTSElGVCkgfCBcCisJKCh1bnNpZ25lZCBsb25n KShsMykgPDwgUERQU0hJRlQpIHwgXAorCSgodW5zaWduZWQgbG9uZykobDIpIDw8IFBEUlNISUZU KSB8IFwKKwkoKHVuc2lnbmVkIGxvbmcpKGwxKSA8PCBQQUdFX1NISUZUKSkKKworI2RlZmluZSBV VkFERFIobDQsIGwzLCBsMiwgbDEpICggXAorCSgodW5zaWduZWQgbG9uZykobDQpIDw8IFBNTDRT SElGVCkgfCBcCisJKCh1bnNpZ25lZCBsb25nKShsMykgPDwgUERQU0hJRlQpIHwgXAorCSgodW5z aWduZWQgbG9uZykobDIpIDw8IFBEUlNISUZUKSB8IFwKKwkoKHVuc2lnbmVkIGxvbmcpKGwxKSA8 PCBQQUdFX1NISUZUKSkKKworLyoKKyAqIE51bWJlciBvZiBrZXJuZWwgUE1MNCBzbG90cy4gIENh biBiZSBhbnl3aGVyZSBmcm9tIDEgdG8gNjQgb3Igc28sCisgKiBidXQgc2V0dGluZyBpdCBsYXJn ZXIgdGhhbiBORE1QTUw0RSBtYWtlcyBubyBzZW5zZS4KKyAqCisgKiBFYWNoIHNsb3QgcHJvdmlk ZXMgLjUgVEIgb2Yga2VybmVsIHZpcnR1YWwgc3BhY2UuCisgKi8KKyNkZWZpbmUgTktQTUw0RQkJ NAorCisjZGVmaW5lCU5VUE1MNEUJCShOUE1MNEVQRy8yKQkvKiBudW1iZXIgb2YgdXNlcmxhbmQg UE1MNCBwYWdlcyAqLworI2RlZmluZQlOVVBEUEUJCShOVVBNTDRFKk5QRFBFUEcpLyogbnVtYmVy IG9mIHVzZXJsYW5kIFBEUCBwYWdlcyAqLworI2RlZmluZQlOVVBERQkJKE5VUERQRSpOUERFUEcp CS8qIG51bWJlciBvZiB1c2VybGFuZCBQRCBlbnRyaWVzICovCisKKy8qCisgKiBORE1QTUw0RSBp cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgUE1MNCBlbnRyaWVzIHRoYXQgd2lsbCBiZQorICogdXNl ZCB0byBpbXBsZW1lbnQgdGhlIGRpcmVjdCBtYXAuICBJdCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdv LAorICogYW5kIHNob3VsZCBnZW5lcmFsbHkgZXhjZWVkIE5LUE1MNEUuICBUaGUgbWF4aW11bSBw b3NzaWJsZQorICogdmFsdWUgaXMgNjQ7IHVzaW5nIDEyOCB3aWxsIG1ha2UgdGhlIGRpcmVjdCBt YXAgaW50cnVkZSBpbnRvCisgKiB0aGUgcmVjdXJzaXZlIHBhZ2UgdGFibGUgbWFwLgorICovCisj ZGVmaW5lCU5ETVBNTDRFCTgKKworLyoKKyAqIFRoZXNlIHZhbHVlcyBjb250cm9sIHRoZSBsYXlv dXQgb2YgdmlydHVhbCBtZW1vcnkuICBUaGUgc3RhcnRpbmcgYWRkcmVzcworICogb2YgdGhlIGRp cmVjdCBtYXAsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgRE1QTUw0SSwgbXVzdCBiZSBhIG11bHRp cGxlIG9mCisgKiBpdHMgc2l6ZS4gIChTZWUgdGhlIFBIWVNfVE9fRE1BUCgpIGFuZCBETUFQX1RP X1BIWVMoKSBtYWNyb3MuKQorICoKKyAqIE5vdGU6IEtQTUw0SSBpcyB0aGUgaW5kZXggb2YgdGhl IChzaW5nbGUpIGxldmVsIDQgcGFnZSB0aGF0IG1hcHMKKyAqIHRoZSBLVkEgdGhhdCBob2xkcyBL RVJOQkFTRSwgd2hpbGUgS1BNTDRCQVNFIGlzIHRoZSBpbmRleCBvZiB0aGUKKyAqIGZpcnN0IGxl dmVsIDQgcGFnZSB0aGF0IG1hcHMgVk1fTUlOX0tFUk5FTF9BRERSRVNTLiAgSWYgTktQTUw0RQor ICogaXMgMSwgdGhlc2UgYXJlIHRoZSBzYW1lLCBvdGhlcndpc2UgS1BNTDRCQVNFIDwgS1BNTDRJ IGFuZCBleHRyYQorICogbGV2ZWwgNCBQREVzIGFyZSBuZWVkZWQgdG8gbWFwIGZyb20gVk1fTUlO X0tFUk5FTF9BRERSRVNTIHVwIHRvCisgKiBLRVJOQkFTRS4KKyAqCisgKiAoS1BNTDRJIGNvbWJp bmVzIHdpdGggS1BEUEkgdG8gY2hvb3NlIHdoZXJlIEtFUk5CQVNFIHN0YXJ0cy4KKyAqIE9yLCBp biBvdGhlciB3b3JkcywgS1BNTDRJIHByb3ZpZGVzIGJpdHMgMzkuLjQ3IG9mIEtFUk5CQVNFLAor ICogYW5kIEtQRFBJIHByb3ZpZGVzIGJpdHMgMzAuLjM4LikKKyAqLworI2RlZmluZQlQTUw0UE1M NEkJKE5QTUw0RVBHLzIpCS8qIEluZGV4IG9mIHJlY3Vyc2l2ZSBwbWw0IG1hcHBpbmcgKi8KKwor I2RlZmluZQlLUE1MNEJBU0UJKE5QTUw0RVBHLU5LUE1MNEUpIC8qIEtWTSBhdCBoaWdoZXN0IGFk ZHJlc3NlcyAqLworI2RlZmluZQlETVBNTDRJCQlyb3VuZGRvd24oS1BNTDRCQVNFLU5ETVBNTDRF LCBORE1QTUw0RSkgLyogQmVsb3cgS1ZNICovCisKKyNkZWZpbmUJS1BNTDRJCQkoTlBNTDRFUEct MSkKKyNkZWZpbmUJS1BEUEkJCShOUERQRVBHLTIpCS8qIGtlcm5iYXNlIGF0IC0yR0IgKi8KKwor LyoKKyAqIFhYWCBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZSBJIGd1ZXNzLi4uCisgKi8KKyNk ZWZpbmUgSVNBX0hPTEVfU1RBUlQgICAgMHhhMDAwMAorI2RlZmluZSBJU0FfSE9MRV9MRU5HVEgg KDB4MTAwMDAwLUlTQV9IT0xFX1NUQVJUKQorCisjZGVmaW5lCVBNQVBfUENJRF9OT05FCQkweGZm ZmZmZmZmCisjZGVmaW5lCVBNQVBfUENJRF9LRVJOCQkwCisjZGVmaW5lCVBNQVBfUENJRF9PVkVS TUFYCTB4MTAwMAorCisjaWZuZGVmIExPQ09SRQorCisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Cisj aW5jbHVkZSA8c3lzL19jcHVzZXQuaD4KKyNpbmNsdWRlIDxzeXMvX2xvY2suaD4KKyNpbmNsdWRl IDxzeXMvX211dGV4Lmg+CisKKyNpbmNsdWRlIDx2bS9fdm1fcmFkaXguaD4KKwordHlwZWRlZiB1 X2ludDY0X3QgcGRfZW50cnlfdDsKK3R5cGVkZWYgdV9pbnQ2NF90IHB0X2VudHJ5X3Q7Cit0eXBl ZGVmIHVfaW50NjRfdCBwZHBfZW50cnlfdDsKK3R5cGVkZWYgdV9pbnQ2NF90IHBtbDRfZW50cnlf dDsKKworLyoKKyAqIEFkZHJlc3Mgb2YgY3VycmVudCBhZGRyZXNzIHNwYWNlIHBhZ2UgdGFibGUg bWFwcyBhbmQgZGlyZWN0b3JpZXMuCisgKi8KKyNpZmRlZiBfS0VSTkVMCisjZGVmaW5lCWFkZHJf UFRtYXAJKEtWQUREUihQTUw0UE1MNEksIDAsIDAsIDApKQorI2RlZmluZQlhZGRyX1BEbWFwCShL VkFERFIoUE1MNFBNTDRJLCBQTUw0UE1MNEksIDAsIDApKQorI2RlZmluZQlhZGRyX1BEUG1hcAko S1ZBRERSKFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1MNEksIDApKQorI2RlZmluZQlhZGRy X1BNTDRtYXAJKEtWQUREUihQTUw0UE1MNEksIFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1M NEkpKQorI2RlZmluZQlhZGRyX1BNTDRwbWw0ZQkoYWRkcl9QTUw0bWFwICsgKFBNTDRQTUw0SSAq IHNpemVvZihwbWw0X2VudHJ5X3QpKSkKKyNkZWZpbmUJUFRtYXAJCSgocHRfZW50cnlfdCAqKShh ZGRyX1BUbWFwKSkKKyNkZWZpbmUJUERtYXAJCSgocGRfZW50cnlfdCAqKShhZGRyX1BEbWFwKSkK KyNkZWZpbmUJUERQbWFwCQkoKHBkX2VudHJ5X3QgKikoYWRkcl9QRFBtYXApKQorI2RlZmluZQlQ TUw0bWFwCQkoKHBkX2VudHJ5X3QgKikoYWRkcl9QTUw0bWFwKSkKKyNkZWZpbmUJUE1MNHBtbDRl CSgocGRfZW50cnlfdCAqKShhZGRyX1BNTDRwbWw0ZSkpCisKK2V4dGVybiBpbnQgbmtwdDsJCS8q IEluaXRpYWwgbnVtYmVyIG9mIGtlcm5lbCBwYWdlIHRhYmxlcyAqLworZXh0ZXJuIHVfaW50NjRf dCBLUERQcGh5czsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBrZXJuZWwgbGV2ZWwgMyAqLworZXh0 ZXJuIHVfaW50NjRfdCBLUE1MNHBoeXM7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Yga2VybmVsIGxl dmVsIDQgKi8KKworLyoKKyAqIHZpcnR1YWwgYWRkcmVzcyB0byBwYWdlIHRhYmxlIGVudHJ5IGFu ZAorICogdG8gcGh5c2ljYWwgYWRkcmVzcy4KKyAqIE5vdGU6IHRoZXNlIHdvcmsgcmVjdXJzaXZl bHksIHRodXMgdnRvcHRlIG9mIGEgcHRlIHdpbGwgZ2l2ZQorICogdGhlIGNvcnJlc3BvbmRpbmcg cGRlIHRoYXQgaW4gdHVybiBtYXBzIGl0LgorICovCitwdF9lbnRyeV90ICp2dG9wdGUodm1fb2Zm c2V0X3QpOworI2RlZmluZQl2dG9waHlzKHZhKQlwbWFwX2tleHRyYWN0KCgodm1fb2Zmc2V0X3Qp ICh2YSkpKQorCisjZGVmaW5lCXB0ZV9sb2FkX3N0b3JlKHB0ZXAsIHB0ZSkJYXRvbWljX3N3YXBf bG9uZyhwdGVwLCBwdGUpCisjZGVmaW5lCXB0ZV9sb2FkX2NsZWFyKHB0ZXApCQlhdG9taWNfc3dh cF9sb25nKHB0ZXAsIDApCisjZGVmaW5lCXB0ZV9zdG9yZShwdGVwLCBwdGUpIGRvIHsgXAorCSoo dV9sb25nICopKHB0ZXApID0gKHVfbG9uZykocHRlKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJ cHRlX2NsZWFyKHB0ZXApCQkJcHRlX3N0b3JlKHB0ZXAsIDApCisKKyNkZWZpbmUJcGRlX3N0b3Jl KHBkZXAsIHBkZSkJCXB0ZV9zdG9yZShwZGVwLCBwZGUpCisKK2V4dGVybiBwdF9lbnRyeV90IHBn X254OworCisjZW5kaWYgLyogX0tFUk5FTCAqLworCisvKgorICogUG1hcCBzdHVmZgorICovCitz dHJ1Y3QJcHZfZW50cnk7CitzdHJ1Y3QJcHZfY2h1bms7CisKKy8qCisgKiBMb2NrcworICogKHAp IFBWIGxpc3QgbG9jaworICovCitzdHJ1Y3QgbWRfcGFnZSB7CisJVEFJTFFfSEVBRCgsIHB2X2Vu dHJ5KQlwdl9saXN0OyAgLyogKHApICovCisJaW50CQkJcHZfZ2VuOyAgIC8qIChwKSAqLworCWlu dAkJCXBhdF9tb2RlOworfTsKKworZW51bSBwbWFwX3R5cGUgeworCVBUX1g4NiwJCQkvKiByZWd1 bGFyIHg4NiBwYWdlIHRhYmxlcyAqLworCVBUX0VQVCwJCQkvKiBJbnRlbCdzIG5lc3RlZCBwYWdl IHRhYmxlcyAqLworCVBUX1JWSSwJCQkvKiBBTUQncyBuZXN0ZWQgcGFnZSB0YWJsZXMgKi8KK307 CisKK3N0cnVjdCBwbWFwX3BjaWRzIHsKKwl1aW50MzJfdAlwbV9wY2lkOworCXVpbnQzMl90CXBt X2dlbjsKK307CisKKy8qCisgKiBUaGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoS1ZBKSBvZiB0 aGUgbGV2ZWwgNCBwYWdlIHRhYmxlIHBhZ2UgaXMgYWx3YXlzCisgKiB3aXRoaW4gdGhlIGRpcmVj dCBtYXAgKERNQVApIHJlZ2lvbi4KKyAqLworc3RydWN0IHBtYXAgeworCXN0cnVjdCBtdHgJCXBt X210eDsKKwlwbWw0X2VudHJ5X3QJCSpwbV9wbWw0OwkvKiBLVkEgb2YgbGV2ZWwgNCBwYWdlIHRh YmxlICovCisJdWludDY0X3QJCXBtX2NyMzsKKwlUQUlMUV9IRUFEKCxwdl9jaHVuaykJcG1fcHZj aHVuazsJLyogbGlzdCBvZiBtYXBwaW5ncyBpbiBwbWFwICovCisJY3B1c2V0X3QJCXBtX2FjdGl2 ZTsJLyogYWN0aXZlIG9uIGNwdXMgKi8KKwllbnVtIHBtYXBfdHlwZQkJcG1fdHlwZTsJLyogcmVn dWxhciBvciBuZXN0ZWQgdGFibGVzICovCisJc3RydWN0IHBtYXBfc3RhdGlzdGljcwlwbV9zdGF0 czsJLyogcG1hcCBzdGF0aXN0aWNzICovCisJc3RydWN0IHZtX3JhZGl4CQlwbV9yb290OwkvKiBz cGFyZSBwYWdlIHRhYmxlIHBhZ2VzICovCisJbG9uZwkJCXBtX2VwdGdlbjsJLyogRVBUIHBtYXAg Z2VuZXJhdGlvbiBpZCAqLworCWludAkJCXBtX2ZsYWdzOworCXN0cnVjdCBwbWFwX3BjaWRzCXBt X3BjaWRzW01BWENQVV07Cit9OworCisvKiBmbGFncyAqLworI2RlZmluZQlQTUFQX05FU1RFRF9J UElNQVNLCTB4ZmYKKyNkZWZpbmUJUE1BUF9QREVfU1VQRVJQQUdFCSgxIDw8IDgpCS8qIHN1cHBv cnRzIDJNQiBzdXBlcnBhZ2VzICovCisjZGVmaW5lCVBNQVBfRU1VTEFURV9BRF9CSVRTCSgxIDw8 IDkpCS8qIG5lZWRzIEEvRCBiaXRzIGVtdWxhdGlvbiAqLworI2RlZmluZQlQTUFQX1NVUFBPUlRT X0VYRUNfT05MWQkoMSA8PCAxMCkJLyogZXhlY3V0ZSBvbmx5IG1hcHBpbmdzIG9rICovCisKK3R5 cGVkZWYgc3RydWN0IHBtYXAJKnBtYXBfdDsKKworI2lmZGVmIF9LRVJORUwKK2V4dGVybiBzdHJ1 Y3QgcG1hcAlrZXJuZWxfcG1hcF9zdG9yZTsKKyNkZWZpbmUga2VybmVsX3BtYXAJKCZrZXJuZWxf cG1hcF9zdG9yZSkKKworI2RlZmluZQlQTUFQX0xPQ0socG1hcCkJCW10eF9sb2NrKCYocG1hcCkt PnBtX210eCkKKyNkZWZpbmUJUE1BUF9MT0NLX0FTU0VSVChwbWFwLCB0eXBlKSBcCisJCQkJbXR4 X2Fzc2VydCgmKHBtYXApLT5wbV9tdHgsICh0eXBlKSkKKyNkZWZpbmUJUE1BUF9MT0NLX0RFU1RS T1kocG1hcCkJbXR4X2Rlc3Ryb3koJihwbWFwKS0+cG1fbXR4KQorI2RlZmluZQlQTUFQX0xPQ0tf SU5JVChwbWFwKQltdHhfaW5pdCgmKHBtYXApLT5wbV9tdHgsICJwbWFwIiwgXAorCQkJCSAgICBO VUxMLCBNVFhfREVGIHwgTVRYX0RVUE9LKQorI2RlZmluZQlQTUFQX0xPQ0tFRChwbWFwKQltdHhf b3duZWQoJihwbWFwKS0+cG1fbXR4KQorI2RlZmluZQlQTUFQX01UWChwbWFwKQkJKCYocG1hcCkt PnBtX210eCkKKyNkZWZpbmUJUE1BUF9UUllMT0NLKHBtYXApCW10eF90cnlsb2NrKCYocG1hcCkt PnBtX210eCkKKyNkZWZpbmUJUE1BUF9VTkxPQ0socG1hcCkJbXR4X3VubG9jaygmKHBtYXApLT5w bV9tdHgpCisKK2ludAlwbWFwX3Bpbml0X3R5cGUocG1hcF90IHBtYXAsIGVudW0gcG1hcF90eXBl IHBtX3R5cGUsIGludCBmbGFncyk7CitpbnQJcG1hcF9lbXVsYXRlX2FjY2Vzc2VkX2RpcnR5KHBt YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgaW50IGZ0eXBlKTsKKyNlbmRpZgorCisvKgorICog Rm9yIGVhY2ggdm1fcGFnZV90LCB0aGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGN1cnJlbnRseSB2YWxp ZCB2aXJ0dWFsCisgKiBtYXBwaW5ncyBvZiB0aGF0IHBhZ2UuICBBbiBlbnRyeSBpcyBhIHB2X2Vu dHJ5X3QsIHRoZSBsaXN0IGlzIHB2X2xpc3QuCisgKi8KK3R5cGVkZWYgc3RydWN0IHB2X2VudHJ5 IHsKKwl2bV9vZmZzZXRfdAlwdl92YTsJCS8qIHZpcnR1YWwgYWRkcmVzcyBmb3IgbWFwcGluZyAq LworCVRBSUxRX0VOVFJZKHB2X2VudHJ5KQlwdl9uZXh0OworfSAqcHZfZW50cnlfdDsKKworLyoK KyAqIHB2X2VudHJpZXMgYXJlIGFsbG9jYXRlZCBpbiBjaHVua3MgcGVyLXByb2Nlc3MuICBUaGlz IGF2b2lkcyB0aGUKKyAqIG5lZWQgdG8gdHJhY2sgcGVyLXBtYXAgYXNzaWdubWVudHMuCisgKi8K KyNkZWZpbmUJX05QQ00JMworI2RlZmluZQlfTlBDUFYJMTY4CitzdHJ1Y3QgcHZfY2h1bmsgewor CXBtYXBfdAkJCXBjX3BtYXA7CisJVEFJTFFfRU5UUlkocHZfY2h1bmspCXBjX2xpc3Q7CisJdWlu dDY0X3QJCXBjX21hcFtfTlBDTV07CS8qIGJpdG1hcDsgMSA9IGZyZWUgKi8KKwlUQUlMUV9FTlRS WShwdl9jaHVuaykJcGNfbHJ1OworCXN0cnVjdCBwdl9lbnRyeQkJcGNfcHZlbnRyeVtfTlBDUFZd OworfTsKKworI2lmZGVmCV9LRVJORUwKKworZXh0ZXJuIGNhZGRyX3QJQ0FERFIxOworZXh0ZXJu IHB0X2VudHJ5X3QgKkNNQVAxOworZXh0ZXJuIHZtX3BhZGRyX3QgcGh5c19hdmFpbFtdOworZXh0 ZXJuIHZtX3BhZGRyX3QgZHVtcF9hdmFpbFtdOworZXh0ZXJuIHZtX29mZnNldF90IHZpcnR1YWxf YXZhaWw7CitleHRlcm4gdm1fb2Zmc2V0X3QgdmlydHVhbF9lbmQ7CitleHRlcm4gdm1fcGFkZHJf dCBkbWFwbGltaXQ7CisKKyNkZWZpbmUJcG1hcF9wYWdlX2dldF9tZW1hdHRyKG0pCSgodm1fbWVt YXR0cl90KShtKS0+bWQucGF0X21vZGUpCisjZGVmaW5lCXBtYXBfcGFnZV9pc193cml0ZV9tYXBw ZWQobSkJKCgobSktPmFmbGFncyAmIFBHQV9XUklURUFCTEUpICE9IDApCisjZGVmaW5lCXBtYXBf dW5tYXBiaW9zKHZhLCBzeikJcG1hcF91bm1hcGRldigodmEpLCAoc3opKQorCitzdHJ1Y3QgdGhy ZWFkOworCit2b2lkCXBtYXBfYWN0aXZhdGVfc3coc3RydWN0IHRocmVhZCAqKTsKK3ZvaWQJcG1h cF9ib290c3RyYXAodm1fcGFkZHJfdCAqKTsKK2ludAlwbWFwX2NoYW5nZV9hdHRyKHZtX29mZnNl dF90LCB2bV9zaXplX3QsIGludCk7Cit2b2lkCXBtYXBfZGVtb3RlX0RNQVAodm1fcGFkZHJfdCBi YXNlLCB2bV9zaXplX3QgbGVuLCBib29sZWFuX3QgaW52YWxpZGF0ZSk7Cit2b2lkCXBtYXBfaW5p dF9wYXQodm9pZCk7Cit2b2lkCXBtYXBfa2VudGVyKHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90 IHBhKTsKK3ZvaWQJKnBtYXBfa2VudGVyX3RlbXBvcmFyeSh2bV9wYWRkcl90IHBhLCBpbnQgaSk7 Cit2bV9wYWRkcl90IHBtYXBfa2V4dHJhY3Qodm1fb2Zmc2V0X3QpOwordm9pZAlwbWFwX2tyZW1v dmUodm1fb2Zmc2V0X3QpOwordm9pZAkqcG1hcF9tYXBiaW9zKHZtX3BhZGRyX3QsIHZtX3NpemVf dCk7Cit2b2lkCSpwbWFwX21hcGRldih2bV9wYWRkcl90LCB2bV9zaXplX3QpOwordm9pZAkqcG1h cF9tYXBkZXZfYXR0cih2bV9wYWRkcl90LCB2bV9zaXplX3QsIGludCk7Citib29sZWFuX3QgcG1h cF9wYWdlX2lzX21hcHBlZCh2bV9wYWdlX3QgbSk7Cit2b2lkCXBtYXBfcGFnZV9zZXRfbWVtYXR0 cih2bV9wYWdlX3QgbSwgdm1fbWVtYXR0cl90IG1hKTsKK3ZvaWQJcG1hcF91bm1hcGRldih2bV9v ZmZzZXRfdCwgdm1fc2l6ZV90KTsKK3ZvaWQJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcF90LCB2 bV9vZmZzZXRfdCk7Cit2b2lkCXBtYXBfaW52YWxpZGF0ZV9yYW5nZShwbWFwX3QsIHZtX29mZnNl dF90LCB2bV9vZmZzZXRfdCk7Cit2b2lkCXBtYXBfaW52YWxpZGF0ZV9hbGwocG1hcF90KTsKK3Zv aWQJcG1hcF9pbnZhbGlkYXRlX2NhY2hlKHZvaWQpOwordm9pZAlwbWFwX2ludmFsaWRhdGVfY2Fj aGVfcGFnZXModm1fcGFnZV90ICpwYWdlcywgaW50IGNvdW50KTsKK3ZvaWQJcG1hcF9pbnZhbGlk YXRlX2NhY2hlX3JhbmdlKHZtX29mZnNldF90IHN2YSwgdm1fb2Zmc2V0X3QgZXZhLAorCSAgICBi b29sZWFuX3QgZm9yY2UpOwordm9pZAlwbWFwX2dldF9tYXBwaW5nKHBtYXBfdCBwbWFwLCB2bV9v ZmZzZXRfdCB2YSwgdWludDY0X3QgKnB0ciwgaW50ICpudW0pOworYm9vbGVhbl90IHBtYXBfbWFw X2lvX3RyYW5zaWVudCh2bV9wYWdlX3QgKiwgdm1fb2Zmc2V0X3QgKiwgaW50LCBib29sZWFuX3Qp Owordm9pZAlwbWFwX3VubWFwX2lvX3RyYW5zaWVudCh2bV9wYWdlX3QgKiwgdm1fb2Zmc2V0X3Qg KiwgaW50LCBib29sZWFuX3QpOworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qICFM T0NPUkUgKi8KKworI2VuZGlmIC8qICFfTUFDSElORV9QTUFQX0hfICovCmRpZmYgLXUgLXIgLU4g dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wbWNfbWRlcC5oIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BtY19tZGVwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvcG1jX21kZXAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcG1jX21kZXAu aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE0MSBAQAor LyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBKb3NlcGggS29zaHkKKyAqIENvcHlyaWdo dCAoYykgMjAwNyBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgYnkgQS4g Sm9zZXBoIEtvc2h5IHVuZGVyCisgKiBzcG9uc29yc2hpcCBmcm9tIHRoZSBGcmVlQlNEIEZvdW5k YXRpb24gYW5kIEdvb2dsZSwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k NjQvaW5jbHVkZS9wbWNfbWRlcC5oIDI4NTA0MSAyMDE1LTA3LTAyIDE0OjM3OjIxWiBraWIgJAor ICovCisKKy8qIE1hY2hpbmUgZGVwZW5kZW50IGludGVyZmFjZXMgKi8KKworI2lmbmRlZiBfTUFD SElORV9QTUNfTURFUF9ICisjZGVmaW5lCV9NQUNISU5FX1BNQ19NREVQX0ggMQorCisjaWZkZWYJ X0tFUk5FTAorc3RydWN0IHBtY19tZGVwOworI2VuZGlmCisKKyNpbmNsdWRlIDxkZXYvaHdwbWMv aHdwbWNfYW1kLmg+CisjaW5jbHVkZSA8ZGV2L2h3cG1jL2h3cG1jX2NvcmUuaD4KKyNpbmNsdWRl IDxkZXYvaHdwbWMvaHdwbWNfcGl2Lmg+CisjaW5jbHVkZSA8ZGV2L2h3cG1jL2h3cG1jX3RzYy5o PgorI2luY2x1ZGUgPGRldi9od3BtYy9od3BtY191bmNvcmUuaD4KKworLyoKKyAqIEludGVsIHBy b2Nlc3NvcnMgaW1wbGVtZW50aW5nIFYyIGFuZCBsYXRlciBvZiB0aGUgSW50ZWwgcGVyZm9ybWFu Y2UKKyAqIG1lYXN1cmVtZW50IGFyY2hpdGVjdHVyZSBoYXZlIFBNQ3Mgb2YgdGhlIGZvbGxvd2lu ZyBjbGFzc2VzOiBUU0MsCisgKiBJQUYsIElBUCwgVUNGIGFuZCBVQ1AuCisgKi8KKyNkZWZpbmUJ UE1DX01ERVBfQ0xBU1NfSU5ERVhfVFNDCTEKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhf SzgJCTIKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfUDQJCTIKKyNkZWZpbmUJUE1DX01E RVBfQ0xBU1NfSU5ERVhfSUFQCTIKKyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfSUFGCTMK KyNkZWZpbmUJUE1DX01ERVBfQ0xBU1NfSU5ERVhfVUNQCTQKKyNkZWZpbmUJUE1DX01ERVBfQ0xB U1NfSU5ERVhfVUNGCTUKKworLyoKKyAqIE9uIHRoZSBhbWQ2NCBwbGF0Zm9ybSB3ZSBzdXBwb3J0 IHRoZSBmb2xsb3dpbmcgUE1Dcy4KKyAqCisgKiBUU0MJCVRoZSB0aW1lc3RhbXAgY291bnRlcgor ICogSzgJCUFNRCBBdGhsb242NCBhbmQgT3B0ZXJvbiBQTUNzIGluIDY0IGJpdCBtb2RlLgorICog UElWCQlJbnRlbCBQNC9IVFQgYW5kIFA0L0VNVDY0CisgKiBJQVAJCUludGVsIENvcmUvQ29yZTIv QXRvbSBDUFVzIGluIDY0IGJpdHMgbW9kZS4KKyAqIElBRgkJSW50ZWwgZml4ZWQtZnVuY3Rpb24g UE1DcyBpbiBDb3JlMiBhbmQgbGF0ZXIgQ1BVcy4KKyAqIFVDUAkJSW50ZWwgVW5jb3JlIHByb2dy YW1tYWJsZSBQTUNzLgorICogVUNGCQlJbnRlbCBVbmNvcmUgZml4ZWQtZnVuY3Rpb24gUE1Dcy4K KyAqLworCit1bmlvbiBwbWNfbWRfb3BfcG1jYWxsb2NhdGUgIHsKKwlzdHJ1Y3QgcG1jX21kX2Ft ZF9vcF9wbWNhbGxvY2F0ZQlwbV9hbWQ7CisJc3RydWN0IHBtY19tZF9pYWZfb3BfcG1jYWxsb2Nh dGUJcG1faWFmOworCXN0cnVjdCBwbWNfbWRfaWFwX29wX3BtY2FsbG9jYXRlCXBtX2lhcDsKKwlz dHJ1Y3QgcG1jX21kX3VjZl9vcF9wbWNhbGxvY2F0ZQlwbV91Y2Y7CisJc3RydWN0IHBtY19tZF91 Y3Bfb3BfcG1jYWxsb2NhdGUJcG1fdWNwOworCXN0cnVjdCBwbWNfbWRfcDRfb3BfcG1jYWxsb2Nh dGUJCXBtX3A0OworCXVpbnQ2NF90CQkJCV9fcGFkWzRdOworfTsKKworLyogTG9nZ2luZyAqLwor I2RlZmluZQlQTUNMT0dfUkVBREFERFIJCVBNQ0xPR19SRUFENjQKKyNkZWZpbmUJUE1DTE9HX0VN SVRBRERSCQlQTUNMT0dfRU1JVDY0CisKKyNpZmRlZglfS0VSTkVMCisKK3VuaW9uIHBtY19tZF9w bWMgeworCXN0cnVjdCBwbWNfbWRfYW1kX3BtYwlwbV9hbWQ7CisJc3RydWN0IHBtY19tZF9pYWZf cG1jCXBtX2lhZjsKKwlzdHJ1Y3QgcG1jX21kX2lhcF9wbWMJcG1faWFwOworCXN0cnVjdCBwbWNf bWRfdWNmX3BtYwlwbV91Y2Y7CisJc3RydWN0IHBtY19tZF91Y3BfcG1jCXBtX3VjcDsKKwlzdHJ1 Y3QgcG1jX21kX3A0X3BtYwlwbV9wNDsKK307CisKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19Q QyhURikJKChURiktPnRmX3JpcCkKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19GUChURikJKChU RiktPnRmX3JicCkKKyNkZWZpbmUJUE1DX1RSQVBGUkFNRV9UT19VU0VSX1NQKFRGKQkoKFRGKS0+ dGZfcnNwKQorI2RlZmluZQlQTUNfVFJBUEZSQU1FX1RPX0tFUk5FTF9TUChURikJKChURiktPnRm X3JzcCkKKworI2RlZmluZQlQTUNfQVRfRlVOQ1RJT05fUFJPTE9HVUVfUFVTSF9CUChJKQkJXAor CSgoKEkpICYgMHhmZmZmZmZmZikgPT0gMHhlNTg5NDg1NSkgLyogcHVzaHEgJXJicDsgbW92cSAl cnNwLCVyYnAgKi8KKyNkZWZpbmUJUE1DX0FUX0ZVTkNUSU9OX1BST0xPR1VFX01PVl9TUF9CUChJ KQkJXAorCSgoKEkpICYgMHgwMGZmZmZmZikgPT0gMHgwMGU1ODk0OCkgLyogbW92cSAlcnNwLCVy YnAgKi8KKyNkZWZpbmUJUE1DX0FUX0ZVTkNUSU9OX0VQSUxPR1VFX1JFVChJKQkJCVwKKwkoKChJ KSAmIDB4RkYpID09IDB4QzMpCQkgICAvKiByZXQgKi8KKworI2RlZmluZQlQTUNfSU5fVFJBUF9I QU5ETEVSKFBDKSAJCQlcCisJKChQQykgPj0gKHVpbnRwdHJfdCkgc3RhcnRfZXhjZXB0aW9ucyAm JglcCisJIChQQykgPCAodWludHB0cl90KSBlbmRfZXhjZXB0aW9ucykKKworI2RlZmluZQlQTUNf SU5fS0VSTkVMX1NUQUNLKFMsU1RBUlQsRU5EKQkJXAorCSgoUykgPj0gKFNUQVJUKSAmJiAoUykg PCAoRU5EKSkKKyNkZWZpbmUJUE1DX0lOX0tFUk5FTCh2YSkgSU5LRVJORUwodmEpCisKKyNkZWZp bmUJUE1DX0lOX1VTRVJTUEFDRSh2YSkgKCh2YSkgPD0gVk1fTUFYVVNFUl9BRERSRVNTKQorCisv KiBCdWlsZCBhIGZha2Uga2VybmVsIHRyYXBmcmFtZSBmcm9tIGN1cnJlbnQgaW5zdHJ1Y3Rpb24g cG9pbnRlci4gKi8KKyNkZWZpbmUgUE1DX0ZBS0VfVFJBUEZSQU1FKFRGKQkJCQkJCVwKKwlkbyB7 CQkJCQkJCQlcCisJKFRGKS0+dGZfY3MgPSAwOyAoVEYpLT50Zl9yZmxhZ3MgPSAwOwkJCQlcCisJ X19hc20gX192b2xhdGlsZSgibW92cSAlJXJicCwlMCIgOiAiPXIiICgoVEYpLT50Zl9yYnApKTsJ XAorCV9fYXNtIF9fdm9sYXRpbGUoIm1vdnEgJSVyc3AsJTAiIDogIj1yIiAoKFRGKS0+dGZfcnNw KSk7CVwKKwlfX2FzbSBfX3ZvbGF0aWxlKCJjYWxsIDFmIFxuXHQxOiBwb3AgJTAiIDogIj1yIigo VEYpLT50Zl9yaXApKTsJXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8K Kwordm9pZAlzdGFydF9leGNlcHRpb25zKHZvaWQpLCBlbmRfZXhjZXB0aW9ucyh2b2lkKTsKKwor c3RydWN0IHBtY19tZGVwICpwbWNfYW1kX2luaXRpYWxpemUodm9pZCk7Cit2b2lkCXBtY19hbWRf ZmluYWxpemUoc3RydWN0IHBtY19tZGVwICpfbWQpOworc3RydWN0IHBtY19tZGVwICpwbWNfaW50 ZWxfaW5pdGlhbGl6ZSh2b2lkKTsKK3ZvaWQJcG1jX2ludGVsX2ZpbmFsaXplKHN0cnVjdCBwbWNf bWRlcCAqX21kKTsKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKyNlbmRpZiAvKiBfTUFDSElORV9Q TUNfTURFUF9IICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS9wcGlyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcGlyZWcu aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcGlyZWcuaAkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL21hY2hpbmUvcHBpcmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAK QEAgLTAsMCArMSw0OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVEFLQUhBU0hJIFlv c2hpaGlyby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2 NC9pbmNsdWRlL3BwaXJlZy5oIDE0NjIxMSAyMDA1LTA1LTE0IDA5OjEwOjAyWiBueWFuICQKKyAq LworCisjaWZuZGVmIF9NQUNISU5FX1BQSVJFR19IXworI2RlZmluZSBfTUFDSElORV9QUElSRUdf SF8KKworI2lmZGVmIF9LRVJORUwKKworI2RlZmluZQlJT19QUEkJCTB4NjEJLyogUHJvZ3JhbW1h YmxlIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisKKy8qCisgKiBQUEkgc3BlYWtlciBjb250cm9s IHZhbHVlcworICovCisKKyNkZWZpbmUJUElUX0VOQUJMRVRNUjIJMHgwMQkvKiBFbmFibGUgdGlt ZXIvY291bnRlciAyICovCisjZGVmaW5lCVBJVF9TUEtSREFUQQkweDAyCS8qIERpcmVjdCB0byBz cGVha2VyICovCisKKyNkZWZpbmUJUElUX1NQS1IJKFBJVF9FTkFCTEVUTVIyIHwgUElUX1NQS1JE QVRBKQorCisjZGVmaW5lCXBwaV9zcGtyX29uKCkJb3V0YihJT19QUEksIGluYihJT19QUEkpIHwg UElUX1NQS1IpCisjZGVmaW5lCXBwaV9zcGtyX29mZigpCW91dGIoSU9fUFBJLCBpbmIoSU9fUFBJ KSAmIH5QSVRfU1BLUikKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qIF9NQUNI SU5FX1BQSVJFR19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw L21hY2hpbmUvcHJvYy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Byb2Mu aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wcm9jLmgJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL3Byb2MuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt MCwwICsxLDEwNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1l cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQg c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXByb2MuaAk3LjEgKEJl cmtlbGV5KSA1LzE1LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1 ZGUvcHJvYy5oIDI5OTc4OCAyMDE2LTA1LTE0IDIzOjM1OjExWiBraWIgJAorICovCisKKyNpZm5k ZWYgX01BQ0hJTkVfUFJPQ19IXworI2RlZmluZQlfTUFDSElORV9QUk9DX0hfCisKKyNpbmNsdWRl IDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NlZ21lbnRzLmg+CisKKy8qCisgKiBM aXN0IG9mIGxvY2tzCisgKglrIC0gb25seSBhY2Nlc3NlZCBieSBjdXJ0aHJlYWQKKyAqCXBwIC0g cG1hcC5jOmludmxfZ2VuX210eAorICovCisKK3N0cnVjdCBwcm9jX2xkdCB7CisJY2FkZHJfdCBs ZHRfYmFzZTsKKwlpbnQgICAgIGxkdF9yZWZjbnQ7Cit9OworCitzdHJ1Y3QgcG1hcF9pbnZsX2dl biB7CisJdV9sb25nIGdlbjsJCQkvKiAoaykgKi8KKwlMSVNUX0VOVFJZKHBtYXBfaW52bF9nZW4p IGxpbms7CS8qIChwcCkgKi8KK307CisKKy8qCisgKiBNYWNoaW5lLWRlcGVuZGVudCBwYXJ0IG9m IHRoZSBwcm9jIHN0cnVjdHVyZSBmb3IgQU1ENjQuCisgKi8KK3N0cnVjdCBtZHRocmVhZCB7CisJ aW50CW1kX3NwaW5sb2NrX2NvdW50OwkvKiAoaykgKi8KKwlyZWdpc3Rlcl90IG1kX3NhdmVkX2Zs YWdzOwkvKiAoaykgKi8KKwlyZWdpc3Rlcl90IG1kX3NwdXJmbHRfYWRkcjsJLyogKGspIFNwdXJp b3VzIHBhZ2UgZmF1bHQgYWRkcmVzcy4gKi8KKwlzdHJ1Y3QgcG1hcF9pbnZsX2dlbiBtZF9pbnZs X2dlbjsKK307CisKK3N0cnVjdCBtZHByb2MgeworCXN0cnVjdCBwcm9jX2xkdCAqbWRfbGR0Owkv KiAodCkgcGVyLXByb2Nlc3MgbGR0ICovCisJc3RydWN0IHN5c3RlbV9zZWdtZW50X2Rlc2NyaXB0 b3IgbWRfbGR0X3NkOworfTsKKworI2RlZmluZQlLSU5GT19QUk9DX1NJWkUgMTA4OAorI2RlZmlu ZQlLSU5GT19QUk9DMzJfU0laRSA3NjgKKworI2lmZGVmCV9LRVJORUwKKworLyogR2V0IHRoZSBj dXJyZW50IGtlcm5lbCB0aHJlYWQgc3RhY2sgdXNhZ2UuICovCisjZGVmaW5lIEdFVF9TVEFDS19V U0FHRSh0b3RhbCwgdXNlZCkgZG8gewkJCQlcCisJc3RydWN0IHRocmVhZAkqdGQgPSBjdXJ0aHJl YWQ7CQkJCVwKKwkodG90YWwpID0gdGQtPnRkX2tzdGFja19wYWdlcyAqIFBBR0VfU0laRTsJCQlc CisJKHVzZWQpID0gKGNoYXIgKil0ZC0+dGRfa3N0YWNrICsJCQkJXAorCSAgICB0ZC0+dGRfa3N0 YWNrX3BhZ2VzICogUEFHRV9TSVpFIC0JCQkJXAorCSAgICAoY2hhciAqKSZ0ZDsJCQkJCQlcCit9 IHdoaWxlICgwKQorCit2b2lkIHNldF91c2VyX2xkdChzdHJ1Y3QgbWRwcm9jICopOworc3RydWN0 IHByb2NfbGR0ICp1c2VyX2xkdF9hbGxvYyhzdHJ1Y3QgcHJvYyAqLCBpbnQpOwordm9pZCB1c2Vy X2xkdF9mcmVlKHN0cnVjdCB0aHJlYWQgKik7Cit2b2lkIHVzZXJfbGR0X2RlcmVmKHN0cnVjdCBw cm9jX2xkdCAqKTsKK3N0cnVjdCBzeXNhcmNoX2FyZ3M7CitpbnQgc3lzYXJjaF9sZHQoc3RydWN0 IHRocmVhZCAqdGQsIHN0cnVjdCBzeXNhcmNoX2FyZ3MgKnVhcCwgaW50IHVhcF9zcGFjZSk7Citp bnQgYW1kNjRfc2V0X2xkdF9kYXRhKHN0cnVjdCB0aHJlYWQgKnRkLCBpbnQgc3RhcnQsIGludCBu dW0sCisgICAgc3RydWN0IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpkZXNjcyk7CisKK2V4dGVy biBzdHJ1Y3QgbXR4IGR0X2xvY2s7CitleHRlcm4gaW50IG1heF9sZHRfc2VnbWVudDsKKworc3Ry dWN0IHN5c2NhbGxfYXJncyB7CisJdV9pbnQgY29kZTsKKwlzdHJ1Y3Qgc3lzZW50ICpjYWxscDsK KwlyZWdpc3Rlcl90IGFyZ3NbOF07CisJaW50IG5hcmc7Cit9OworI2VuZGlmICAvKiBfS0VSTkVM ICovCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfUFJPQ19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHJvZmlsZS5oIC91c3Ivc3JjL3N5cy9tb2R1 bGVzL25ldG1hcC9tYWNoaW5lL3Byb2ZpbGUuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvbWFjaGluZS9wcm9maWxlLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK KysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Byb2ZpbGUuaAkyMDE2LTA5 LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDIwMSBAQAorLyotCisgKiBD b3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT VUNIIERBTUFHRS4KKyAqCisgKglAKCMpcHJvZmlsZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMK KyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wcm9maWxlLmggMjE0 MzQ2IDIwMTAtMTAtMjUgMTU6Mjg6MDNaIGpoYiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9Q Uk9GSUxFX0hfCisjZGVmaW5lCV9NQUNISU5FX1BST0ZJTEVfSF8KKworI2lmbmRlZiBfU1lTX0NE RUZTX0hfCisjZXJyb3IgdGhpcyBmaWxlIG5lZWRzIHN5cy9jZGVmcy5oIGFzIGEgcHJlcmVxdWlz aXRlCisjZW5kaWYKKworI2lmZGVmIF9LRVJORUwKKworLyoKKyAqIENvbmZpZyBnZW5lcmF0ZXMg c29tZXRoaW5nIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRvIGFsaWduIGZ1bmN0aW9ucyBvbiAxNgor ICogYnl0ZSBib3VuZGFyaWVzLiAgQSBzdHJpY3QgYWxpZ25tZW50IGlzIGdvb2QgZm9yIGtlZXBp bmcgdGhlIHRhYmxlcyBzbWFsbC4KKyAqLworI2RlZmluZQlGVU5DVElPTl9BTElHTk1FTlQJMTYK KworLyoKKyAqIFRoZSBrZXJuZWwgdXNlcyBhc3NlbWJsZXIgc3R1YnMgaW5zdGVhZCBvZiB1bnBv cnRhYmxlIGlubGluZXMuCisgKiBUaGlzIGlzIG1haW5seSB0byBzYXZlIGEgbGl0dGxlIHRpbWUg d2hlbiBwcm9maWxpbmcgaXMgbm90IGVuYWJsZWQsCisgKiB3aGljaCBpcyB0aGUgdXN1YWwgY2Fz ZSBmb3IgdGhlIGtlcm5lbC4KKyAqLworI2RlZmluZQlfTUNPVU5UX0RFQ0wgdm9pZCBtY291bnQK KyNkZWZpbmUJTUNPVU5UCisKKyNpZmRlZiBHVVBST0YKKyNkZWZpbmUJTUNPVU5UX0RFQ0wocykK KyNkZWZpbmUJTUNPVU5UX0VOVEVSKHMpCisjZGVmaW5lCU1DT1VOVF9FWElUKHMpCisjaWZkZWYg X19HTlVDTElLRV9BU00KKyNkZWZpbmUJTUNPVU5UX09WRVJIRUFEKGxhYmVsKQkJCQkJCVwKKwlf X2FzbSBfX3ZvbGF0aWxlKCJwdXNocSAlMDsgY2FsbCBfX21jb3VudDsgcG9wcSAlJXJjeCIJCVwK KwkJCSA6CQkJCQkJXAorCQkJIDogImkiIChsYWJlbCkJCQkJCVwKKwkJCSA6ICJheCIsICJkeCIs ICJjeCIsICJkaSIsICJzaSIsICJyOCIsICJyOSIsICJtZW1vcnkiKQorI2RlZmluZQlNRVhJVENP VU5UX09WRVJIRUFEKCkJCQkJCQlcCisJX19hc20gX192b2xhdGlsZSgiY2FsbCAubWV4aXRjb3Vu dDsgMToiCQkJCVwKKwkJCSA6IDoJCQkJCQlcCisJCQkgOiAiYXgiLCAiZHgiLCAiY3giLCAiZGki LCAic2kiLCAicjgiLCAicjkiLCAibWVtb3J5IikKKyNkZWZpbmUJTUVYSVRDT1VOVF9PVkVSSEVB RF9HRVRMQUJFTChsYWJlbHApCQkJCVwKKwlfX2FzbSBfX3ZvbGF0aWxlKCJtb3ZxICQxYiwlMCIg OiAiPXJtIiAobGFiZWxwKSkKKyNlbGlmIGRlZmluZWQobGludCkKKyNkZWZpbmUJTUNPVU5UX09W RVJIRUFEKGxhYmVsKQorI2RlZmluZQlNRVhJVENPVU5UX09WRVJIRUFEKCkKKyNkZWZpbmUJTUVY SVRDT1VOVF9PVkVSSEVBRF9HRVRMQUJFTCgpCisjZWxzZQorI2Vycm9yIHRoaXMgZmlsZSBuZWVk cyB0byBiZSBwb3J0ZWQgdG8geW91ciBjb21waWxlcgorI2VuZGlmIC8qICFfX0dOVUNMSUtFX0FT TSAqLworI2Vsc2UgLyogIUdVUFJPRiAqLworI2RlZmluZQlNQ09VTlRfREVDTChzKQlyZWdpc3Rl cl90IHM7CisjaWZkZWYgU01QCitleHRlcm4gaW50CW1jb3VudF9sb2NrOworI2RlZmluZQlNQ09V TlRfRU5URVIocykJeyBzID0gaW50cl9kaXNhYmxlKCk7IFwKKyAJCQkgIHdoaWxlICghYXRvbWlj X2NtcHNldF9hY3FfaW50KCZtY291bnRfbG9jaywgMCwgMSkpIFwKKwkJCSAgCS8qIG5vdGhpbmcg Ki8gOyB9CisjZGVmaW5lCU1DT1VOVF9FWElUKHMpCXsgYXRvbWljX3N0b3JlX3JlbF9pbnQoJm1j b3VudF9sb2NrLCAwKTsgXAorCQkJICBpbnRyX3Jlc3RvcmUocyk7IH0KKyNlbHNlCisjZGVmaW5l CU1DT1VOVF9FTlRFUihzKQl7IHMgPSBpbnRyX2Rpc2FibGUoKTsgfQorI2RlZmluZQlNQ09VTlRf RVhJVChzKQkoaW50cl9yZXN0b3JlKHMpKQorI2VuZGlmCisjZW5kaWYgLyogR1VQUk9GICovCisK K3ZvaWQgYmludHIodm9pZCk7Cit2b2lkIGJ0cmFwKHZvaWQpOwordm9pZCBlaW50cih2b2lkKTsK K3ZvaWQgdXNlcih2b2lkKTsKKworI2RlZmluZQlNQ09VTlRfRlJPTVBDX1VTRVIocGMpCQkJCQlc CisJKChwYyA8ICh1aW50ZnB0cl90KVZNX01BWFVTRVJfQUREUkVTUykgPyAodWludGZwdHJfdCl1 c2VyIDogcGMpCisKKyNkZWZpbmUJTUNPVU5UX0ZST01QQ19JTlRSKHBjKQkJCQkJXAorCSgocGMg Pj0gKHVpbnRmcHRyX3QpYnRyYXAgJiYgcGMgPCAodWludGZwdHJfdCllaW50cikgPwlcCisJICAg ICgocGMgPj0gKHVpbnRmcHRyX3QpYmludHIpID8gKHVpbnRmcHRyX3QpYmludHIgOglcCisJCSh1 aW50ZnB0cl90KWJ0cmFwKSA6IH4wVUwpCisKKyNlbHNlIC8qICFfS0VSTkVMICovCisKKyNkZWZp bmUJRlVOQ1RJT05fQUxJR05NRU5UCTQKKworI2RlZmluZQlfTUNPVU5UX0RFQ0wgXAorc3RhdGlj IHZvaWQgX21jb3VudCh1aW50ZnB0cl90IGZyb21wYywgdWludGZwdHJfdCBzZWxmcGMpIF9fdXNl ZDsgXAorc3RhdGljIHZvaWQgX21jb3VudAorCisjaWZkZWYgX19HTlVDTElLRV9BU00KKyNkZWZp bmUJTUNPVU5UIF9fYXNtKCIJCQlcblwKKwkudGV4dAkJCQlcblwKKwkucDJhbGlnbiA0LDB4OTAJ CQlcblwKKwkuZ2xvYmwJLm1jb3VudAkJCVxuXAorCS50eXBlCS5tY291bnQsQGZ1bmN0aW9uCVxu XAorLm1jb3VudDoJCQkJXG5cCisJcHVzaHEJJXJkaQkJCVxuXAorCXB1c2hxCSVyc2kJCQlcblwK KwlwdXNocQklcmR4CQkJXG5cCisJcHVzaHEJJXJjeAkJCVxuXAorCXB1c2hxCSVyOAkJCVxuXAor CXB1c2hxCSVyOQkJCVxuXAorCXB1c2hxCSVyYXgJCQlcblwKKwltb3ZxCTgoJXJicCksJXJkaQkJ XG5cCisJbW92cQk3KjgoJXJzcCksJXJzaQkJXG5cCisJY2FsbAlfbWNvdW50CQkJXG5cCisJcG9w cQklcmF4CQkJXG5cCisJcG9wcQklcjkJCQlcblwKKwlwb3BxCSVyOAkJCVxuXAorCXBvcHEJJXJj eAkJCVxuXAorCXBvcHEJJXJkeAkJCVxuXAorCXBvcHEJJXJzaQkJCVxuXAorCXBvcHEJJXJkaQkJ CVxuXAorCXJldAkJCQlcblwKKwkuc2l6ZQkubWNvdW50LCAuIC0gLm1jb3VudCIpOworI2lmIDAK Ky8qCisgKiBXZSBjb3VsZCB1c2UgdGhpcywgZXhjZXB0IGl0IGRvZXNuJ3QgcHJlc2VydmUgdGhl IHJlZ2lzdGVycyB0aGF0IHdlcmUKKyAqIGJlaW5nIHBhc3NlZCB3aXRoIGFyZ3VtZW50cyB0byB0 aGUgZnVuY3Rpb24gdGhhdCB3ZSB3ZXJlIGluc2VydGVkCisgKiBpbnRvLiAgSSd2ZSBsZWZ0IGl0 IGhlcmUgYXMgZG9jdW1lbnRhdGlvbiBvZiB3aGF0IHRoZSBjb2RlIGFib3ZlIGlzCisgKiBzdXBw b3NlZCB0byBkby4KKyAqLworI2RlZmluZQlNQ09VTlQJCQkJCQkJCVwKK3ZvaWQJCQkJCQkJCQlc CittY291bnQoKQkJCQkJCQkJXAorewkJCQkJCQkJCVwKKwl1aW50ZnB0cl90IHNlbGZwYywgZnJv bXBjOwkJCQkJXAorCS8qCQkJCQkJCQlcCisJICogRmluZCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9y IG1jb3VudCwJCQkJXAorCSAqIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIG1jb3VudCdzIGNh bGxlci4JCQlcCisJICoJCQkJCQkJCVwKKwkgKiBzZWxmcGMgPSBwYyBwdXNoZWQgYnkgY2FsbCB0 byBtY291bnQJCQkJXAorCSAqLwkJCQkJCQkJXAorCV9fYXNtKCJtb3ZxIDgoJSVyYnApLCUwIiA6 ICI9ciIgKHNlbGZwYykpOwkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIGZyb21wYyA9IHBjIHB1c2hl ZCBieSBjYWxsIHRvIG1jb3VudCdzIGNhbGxlci4JCVwKKwkgKiBUaGUgY2FsbGVyJ3Mgc3RhY2sg ZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBidWlsdCwgc28gJXJicCBpcwlcCisJICogdGhlIGNhbGxl cidzIGZyYW1lIHBvaW50ZXIuICBUaGUgY2FsbGVyJ3MgcmFkZHIgaXMgaW4gdGhlCVwKKwkgKiBj YWxsZXIncyBmcmFtZSBmb2xsb3dpbmcgdGhlIGNhbGxlcidzIGNhbGxlcidzIGZyYW1lIHBvaW50 ZXIuXAorCSAqLwkJCQkJCQkJXAorCV9fYXNtKCJtb3ZxICglJXJicCksJTAiIDogIj1yIiAoZnJv bXBjKSk7CQkJXAorCWZyb21wYyA9ICgodWludGZwdHJfdCAqKWZyb21wYylbMV07CQkJCVwKKwlf bWNvdW50KGZyb21wYywgc2VsZnBjKTsJCQkJCVwKK30KKyNlbmRpZgorI2Vsc2UgLyogIV9fR05V Q0xJS0VfQVNNICovCisjZGVmaW5lCU1DT1VOVAorI2VuZGlmIC8qIF9fR05VQ0xJS0VfQVNNICov CisKK3R5cGVkZWYJdV9sb25nCXVpbnRmcHRyX3Q7CisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisK Ky8qCisgKiBBbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgY2FuIGhvbGQgbm9uLW5lZ2F0 aXZlIGRpZmZlcmVuY2UgYmV0d2VlbgorICogZnVuY3Rpb24gcG9pbnRlcnMuCisgKi8KK3R5cGVk ZWYJdV9sb25nCWZwdHJkaWZmX3Q7CisKKyNpZmRlZiBfS0VSTkVMCisKK3ZvaWQJbWNvdW50KHVp bnRmcHRyX3QgZnJvbXBjLCB1aW50ZnB0cl90IHNlbGZwYyk7CisKKyNlbHNlIC8qICFfS0VSTkVM ICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworI2lmZGVmIF9f R05VQ0xJS0VfQVNNCit2b2lkCW1jb3VudCh2b2lkKSBfX2FzbSgiLm1jb3VudCIpOworI2VuZGlm CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9NQUNI SU5FX1BST0ZJTEVfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL3BzbC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BzbC5o Ci0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3BzbC5oCTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv bWFjaGluZS9wc2wuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCww ICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICov CisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvcHNsLmggMjMzMjA0 IDIwMTItMDMtMTkgMjE6Mjk6NTdaIHRpamwgJCAqLworCisjaW5jbHVkZSA8eDg2L3BzbC5oPgpk aWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgg L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgKLS0tIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHRyYWNlLmgJMTk3MC0wMS0wMSAwMTowMDowMC4w MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3B0 cmFjZS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBA QAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRG cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wdHJhY2UuaCAyMzI1MjAgMjAx Mi0wMy0wNCAyMDoyNDoyOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvcHRyYWNlLmg+CmRp ZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9wdmNsb2NrLmgg L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcHZjbG9jay5oCi0tLSB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3B2Y2xvY2suaAkxOTcwLTAxLTAxIDAxOjAwOjAw LjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUv cHZjbG9jay5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs NiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8q ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9wdmNsb2NrLmggMjc4MTgz IDIwMTUtMDItMDQgMDg6MjY6NDNaIGJyeWFudiAkICovCisKKyNpbmNsdWRlIDx4ODYvcHZjbG9j ay5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVn LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVnLmgKLS0tIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVnLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3JlZy5o CTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyot CisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNE OiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZWcuaCAyMzMxMjQgMjAxMi0wMy0xOCAx OTowNjozOFogdGlqbCAkICovCisKKyNpbmNsdWRlIDx4ODYvcmVnLmg+CmRpZmYgLXUgLXIgLU4g dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9yZWxvYy5oIC91c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC9tYWNoaW5lL3JlbG9jLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL21hY2hpbmUvcmVsb2MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcmVsb2MuaAkyMDE2LTA5LTI5 IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQ5IEBACisvKi0KKyAqIENvcHly aWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVy IHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1 dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg REFNQUdFLgorICoKKyAqCUAoIylyZWxvYy5oCTguMSAoQmVya2VsZXkpIDYvMTAvOTMKKyAqICRG cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZWxvYy5oIDEyNzkxNCAyMDA0 LTA0LTA1IDIxOjI5OjQxWiBpbXAgJAorICovCisKKyNpZm5kZWYgX0kzODZfTUFDSElORV9SRUxP Q19IXworI2RlZmluZSBfSTM4Nl9NQUNISU5FX1JFTE9DX0hfCisKKy8qIFJlbG9jYXRpb24gZm9y bWF0LiAqLworc3RydWN0IHJlbG9jYXRpb25faW5mbyB7CisJaW50IHJfYWRkcmVzczsJCQkgIC8q IG9mZnNldCBpbiB0ZXh0IG9yIGRhdGEgc2VnbWVudCAqLworCXVuc2lnbmVkIGludCAgIHJfc3lt Ym9sbnVtIDogMjQsICAvKiBvcmRpbmFsIG51bWJlciBvZiBhZGQgc3ltYm9sICovCisJCQkgICBy X3BjcmVsIDogIDEsICAvKiAxIGlmIHZhbHVlIHNob3VsZCBiZSBwYy1yZWxhdGl2ZSAqLworCQkJ ICByX2xlbmd0aCA6ICAyLCAgLyogbG9nIGJhc2UgMiBvZiB2YWx1ZSdzIHdpZHRoICovCisJCQkg IHJfZXh0ZXJuIDogIDEsICAvKiAxIGlmIG5lZWQgdG8gYWRkIHN5bWJvbCB0byB2YWx1ZSAqLwor CQkJIHJfYmFzZXJlbCA6ICAxLCAgLyogbGlua2FnZSB0YWJsZSByZWxhdGl2ZSAqLworCQkJcl9q bXB0YWJsZSA6ICAxLCAgLyogcmVsb2NhdGUgdG8ganVtcCB0YWJsZSAqLworCQkJcl9yZWxhdGl2 ZSA6ICAxLCAgLyogbG9hZCBhZGRyZXNzIHJlbGF0aXZlICovCisJCQkgICAgcl9jb3B5IDogIDE7 ICAvKiBydW4gdGltZSBjb3B5ICovCit9OworCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Jlc291cmNlLmggL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvcmVzb3VyY2UuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvbWFjaGluZS9yZXNvdXJjZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9yZXNvdXJjZS5oCTIwMTYt MDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDcgQEAKKy8qICRGcmVl QlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS9yZXNvdXJjZS5oIDI2MTc5MCAyMDE0 LTAyLTEyIDA0OjMwOjM3WiBqaGIgJCAqLworLyotCisgKiBDb3B5cmlnaHQgMTk5OCBNYXNzYWNo dXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisgKgorICogUGVybWlzc2lvbiB0byB1c2Us IGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBk b2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5Cisg KiBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMKKyAqIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCB0aGF0 IGJvdGggdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRo YXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkCisgKiBpbiBhZHZlcnRpc2luZyBvciBw dWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCisgKiBzb2Z0d2FyZSB3 aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMK KyAqIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0 d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0 IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuCisgKiAKKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgTS5JLlQuIGBgQVMgSVMnJy4gIE0uSS5ULiBESVNDTEFJTVMKKyAqIEFM TCBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRX QVJFLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB TlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBNLkkuVC4gQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAq IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfUkVTT1VSQ0VfSF8KKyNkZWZp bmUJX01BQ0hJTkVfUkVTT1VSQ0VfSF8JMQorCisvKgorICogRGVmaW5pdGlvbnMgb2YgcmVzb3Vy Y2UgdHlwZXMgZm9yIEludGVsIEFyY2hpdGVjdHVyZSBtYWNoaW5lcworICogd2l0aCBzdXBwb3J0 IGZvciBsZWdhY3kgSVNBIGRldmljZXMgYW5kIGRyaXZlcnMuCisgKi8KKworI2RlZmluZQlTWVNf UkVTX0lSUQkxCS8qIGludGVycnVwdCBsaW5lcyAqLworI2RlZmluZQlTWVNfUkVTX0RSUQkyCS8q IGlzYSBkbWEgbGluZXMgKi8KKyNkZWZpbmUJU1lTX1JFU19NRU1PUlkJMwkvKiBpL28gbWVtb3J5 ICovCisjZGVmaW5lCVNZU19SRVNfSU9QT1JUCTQJLyogaS9vIHBvcnRzICovCisjaWZkZWYgTkVX X1BDSUIKKyNkZWZpbmUJUENJX1JFU19CVVMJNQkvKiBQQ0kgYnVzIG51bWJlcnMgKi8KKyNlbmRp ZgorCisjZW5kaWYgLyogIV9NQUNISU5FX1JFU09VUkNFX0hfICovCmRpZmYgLXUgLXIgLU4gdXNy L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9ydW5xLmggL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvcnVucS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9t YWNoaW5lL3J1bnEuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvcnVucS5oCTIwMTYtMDktMjkgMDA6MjQ6 NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNDYgQEAKKy8qLQorICogQ29weXJpZ2h0IChj KSAyMDAxIEpha2UgQnVya2hvbGRlciA8amFrZUBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE QU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3J1 bnEuaCAxMzk3MzEgMjAwNS0wMS0wNSAyMDoxNzoyMVogaW1wICQKKyAqLworCisjaWZuZGVmCV9N QUNISU5FX1JVTlFfSF8KKyNkZWZpbmUJX01BQ0hJTkVfUlVOUV9IXworCisjZGVmaW5lCVJRQl9M RU4JCSgxKQkJLyogTnVtYmVyIG9mIHByaW9yaXR5IHN0YXR1cyB3b3Jkcy4gKi8KKyNkZWZpbmUJ UlFCX0wyQlBXCSg2KQkJLyogTG9nMihzaXplb2YocnFiX3dvcmRfdCkgKiBOQkJZKSkuICovCisj ZGVmaW5lCVJRQl9CUFcJCSgxPDxSUUJfTDJCUFcpCS8qIEJpdHMgaW4gYW4gcnFiX3dvcmRfdC4g Ki8KKworI2RlZmluZQlSUUJfQklUKHByaSkJKDF1bCA8PCAoKHByaSkgJiAoUlFCX0JQVyAtIDEp KSkKKyNkZWZpbmUJUlFCX1dPUkQocHJpKQkoKHByaSkgPj4gUlFCX0wyQlBXKQorCisjZGVmaW5l CVJRQl9GRlMod29yZCkJKGJzZnEod29yZCkpCisKKy8qCisgKiBUeXBlIG9mIHJ1biBxdWV1ZSBz dGF0dXMgd29yZC4KKyAqLwordHlwZWRlZgl1X2ludDY0X3QJcnFiX3dvcmRfdDsKKworI2VuZGlm CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZWdtZW50 cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NlZ21lbnRzLmgKLS0tIHVz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2VnbWVudHMuaAkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvc2VnbWVudHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAt MCwwICsxLDEwNiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTAgV2lsbGlhbSBG LiBKb2xpdHoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz IGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5 CisgKiBXaWxsaWFtIEpvbGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2Yg dGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5E IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdF TlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgor ICoJZnJvbTogQCgjKXNlZ21lbnRzLmgJNy4xIChCZXJrZWxleSkgNS85LzkxCisgKiAkRnJlZUJT RDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvc2VnbWVudHMuaCAyNTg2NjAgMjAxMy0x MS0yNiAxOTozODo0Mloga2liICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX1NFR01FTlRTX0hf CisjZGVmaW5lCV9NQUNISU5FX1NFR01FTlRTX0hfCisKKy8qCisgKiBBTUQ2NCBTZWdtZW50YXRp b24gRGF0YSBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucworICovCisKKyNpbmNsdWRlIDx4ODYv c2VnbWVudHMuaD4KKworLyoKKyAqIFN5c3RlbSBzZWdtZW50IGRlc2NyaXB0b3JzICgxMjggYml0 IHdpZGUpCisgKi8KK3N0cnVjdAlzeXN0ZW1fc2VnbWVudF9kZXNjcmlwdG9yIHsKKwl1X2ludDY0 X3Qgc2RfbG9saW1pdDoxNjsJLyogc2VnbWVudCBleHRlbnQgKGxzYikgKi8KKwl1X2ludDY0X3Qg c2RfbG9iYXNlOjI0OwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgKGxzYikgKi8KKwl1X2ludDY0 X3Qgc2RfdHlwZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdV9pbnQ2NF90IHNkX2RwbDoyOwkJ Lyogc2VnbWVudCBkZXNjcmlwdG9yIHByaW9yaXR5IGxldmVsICovCisJdV9pbnQ2NF90IHNkX3A6 MTsJCS8qIHNlZ21lbnQgZGVzY3JpcHRvciBwcmVzZW50ICovCisJdV9pbnQ2NF90IHNkX2hpbGlt aXQ6NDsJCS8qIHNlZ21lbnQgZXh0ZW50IChtc2IpICovCisJdV9pbnQ2NF90IHNkX3h4MDozOwkJ LyogdW51c2VkICovCisJdV9pbnQ2NF90IHNkX2dyYW46MTsJCS8qIGxpbWl0IGdyYW51bGFyaXR5 IChieXRlL3BhZ2UgdW5pdHMpKi8KKwl1X2ludDY0X3Qgc2RfaGliYXNlOjQwIF9fcGFja2VkOy8q IHNlZ21lbnQgYmFzZSBhZGRyZXNzICAobXNiKSAqLworCXVfaW50NjRfdCBzZF94eDE6ODsKKwl1 X2ludDY0X3Qgc2RfbWJ6OjU7CQkvKiBNVVNUIGJlIHplcm8gKi8KKwl1X2ludDY0X3Qgc2RfeHgy OjE5OworfSBfX3BhY2tlZDsKKworLyoKKyAqIFNvZnR3YXJlIGRlZmluaXRpb25zIGFyZSBpbiB0 aGlzIGNvbnZlbmllbnQgZm9ybWF0LAorICogd2hpY2ggYXJlIHRyYW5zbGF0ZWQgaW50byBpbmNv bnZlbmllbnQgc2VnbWVudCBkZXNjcmlwdG9ycworICogd2hlbiBuZWVkZWQgdG8gYmUgdXNlZCBi eSB0aGUgMzg2IGhhcmR3YXJlCisgKi8KKworc3RydWN0CXNvZnRfc2VnbWVudF9kZXNjcmlwdG9y IHsKKwl1bnNpZ25lZCBsb25nIHNzZF9iYXNlOwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgICov CisJdW5zaWduZWQgbG9uZyBzc2RfbGltaXQ7CS8qIHNlZ21lbnQgZXh0ZW50ICovCisJdW5zaWdu ZWQgbG9uZyBzc2RfdHlwZTo1OwkvKiBzZWdtZW50IHR5cGUgKi8KKwl1bnNpZ25lZCBsb25nIHNz ZF9kcGw6MjsJLyogc2VnbWVudCBkZXNjcmlwdG9yIHByaW9yaXR5IGxldmVsICovCisJdW5zaWdu ZWQgbG9uZyBzc2RfcDoxOwkJLyogc2VnbWVudCBkZXNjcmlwdG9yIHByZXNlbnQgKi8KKwl1bnNp Z25lZCBsb25nIHNzZF9sb25nOjE7CS8qIGxvbmcgbW9kZSAoZm9yICVjcykgKi8KKwl1bnNpZ25l ZCBsb25nIHNzZF9kZWYzMjoxOwkvKiBkZWZhdWx0IDMyIHZzIDE2IGJpdCBzaXplICovCisJdW5z aWduZWQgbG9uZyBzc2RfZ3JhbjoxOwkvKiBsaW1pdCBncmFudWxhcml0eSAoYnl0ZS9wYWdlIHVu aXRzKSovCit9IF9fcGFja2VkOworCisvKgorICogcmVnaW9uIGRlc2NyaXB0b3JzLCB1c2VkIHRv IGxvYWQgZ2R0L2lkdCB0YWJsZXMgYmVmb3JlIHNlZ21lbnRzIHlldCBleGlzdC4KKyAqLworc3Ry dWN0IHJlZ2lvbl9kZXNjcmlwdG9yIHsKKwl1aW50NjRfdCByZF9saW1pdDoxNjsJCS8qIHNlZ21l bnQgZXh0ZW50ICovCisJdWludDY0X3QgcmRfYmFzZTo2NCBfX3BhY2tlZDsJLyogYmFzZSBhZGRy ZXNzICAqLworfSBfX3BhY2tlZDsKKworI2lmZGVmIF9LRVJORUwKK2V4dGVybiBzdHJ1Y3QgdXNl cl9zZWdtZW50X2Rlc2NyaXB0b3IgZ2R0W107CitleHRlcm4gc3RydWN0IHNvZnRfc2VnbWVudF9k ZXNjcmlwdG9yIGdkdF9zZWdzW107CitleHRlcm4gc3RydWN0IGdhdGVfZGVzY3JpcHRvciAqaWR0 OworZXh0ZXJuIHN0cnVjdCByZWdpb25fZGVzY3JpcHRvciByX2dkdCwgcl9pZHQ7CisKK3ZvaWQJ bGdkdChzdHJ1Y3QgcmVnaW9uX2Rlc2NyaXB0b3IgKnJkcCk7Cit2b2lkCXNkdG9zc2Qoc3RydWN0 IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpzZHAsCisJICAgIHN0cnVjdCBzb2Z0X3NlZ21lbnRf ZGVzY3JpcHRvciAqc3NkcCk7Cit2b2lkCXNzZHRvc2Qoc3RydWN0IHNvZnRfc2VnbWVudF9kZXNj cmlwdG9yICpzc2RwLAorCSAgICBzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3IgKnNkcCk7 Cit2b2lkCXNzZHRvc3lzc2Qoc3RydWN0IHNvZnRfc2VnbWVudF9kZXNjcmlwdG9yICpzc2RwLAor CSAgICBzdHJ1Y3Qgc3lzdGVtX3NlZ21lbnRfZGVzY3JpcHRvciAqc2RwKTsKK3ZvaWQJdXBkYXRl X2dkdF9nc2Jhc2Uoc3RydWN0IHRocmVhZCAqdGQsIHVpbnQzMl90IGJhc2UpOwordm9pZAl1cGRh dGVfZ2R0X2ZzYmFzZShzdHJ1Y3QgdGhyZWFkICp0ZCwgdWludDMyX3QgYmFzZSk7CisjZW5kaWYg LyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX1NFR01FTlRTX0hfICovCmRpZmYg LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaCAvdXNy L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaAotLS0gdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZXRqbXAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2V0am1w LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisv Ki0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVC U0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3NldGptcC5oIDIzMjI3NSAyMDEyLTAy LTI4IDIyOjE3OjUyWiB0aWpsICQgKi8KKworI2luY2x1ZGUgPHg4Ni9zZXRqbXAuaD4KZGlmZiAt dSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oIC91c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oCi0tLSB1c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC9tYWNoaW5lL3NmX2J1Zi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zZl9idWYu aAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDUxIEBACisv Ki0KKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNSBBbGFuIEwuIENveCA8YWxjQGNzLnJpY2Uu ZWR1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAv c3lzL2FtZDY0L2luY2x1ZGUvc2ZfYnVmLmggMjY5NTc3IDIwMTQtMDgtMDUgMDk6NDQ6MTBaIGds ZWJpdXMgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU0ZfQlVGX0hfCisjZGVmaW5lIF9NQUNI SU5FX1NGX0JVRl9IXworCisvKgorICogT24gdGhpcyBtYWNoaW5lLCB0aGUgb25seSBwdXJwb3Nl IGZvciB3aGljaCBzZl9idWYgaXMgdXNlZCBpcyB0byBpbXBsZW1lbnQKKyAqIGFuIG9wYXF1ZSBw b2ludGVyIHJlcXVpcmVkIGJ5IHRoZSBtYWNoaW5lLWluZGVwZW5kZW50IHBhcnRzIG9mIHRoZSBr ZXJuZWwuCisgKiBUaGF0IHBvaW50ZXIgcmVmZXJlbmNlcyB0aGUgdm1fcGFnZSB0aGF0IGlzICJt YXBwZWQiIGJ5IHRoZSBzZl9idWYuICBUaGUKKyAqIGFjdHVhbCBtYXBwaW5nIGlzIHByb3ZpZGVk IGJ5IHRoZSBkaXJlY3QgdmlydHVhbC10by1waHlzaWNhbCBtYXBwaW5nLiAgCisgKi8KK3N0YXRp YyBpbmxpbmUgdm1fb2Zmc2V0X3QKK3NmX2J1Zl9rdmEoc3RydWN0IHNmX2J1ZiAqc2YpCit7CisK KwlyZXR1cm4gKFBIWVNfVE9fRE1BUChWTV9QQUdFX1RPX1BIWVMoKHZtX3BhZ2VfdClzZikpKTsK K30KKworc3RhdGljIGlubGluZSB2bV9wYWdlX3QKK3NmX2J1Zl9wYWdlKHN0cnVjdCBzZl9idWYg KnNmKQoreworCisJcmV0dXJuICgodm1fcGFnZV90KXNmKTsKK30KKyNlbmRpZiAvKiAhX01BQ0hJ TkVfU0ZfQlVGX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv bWFjaGluZS9zaWdmcmFtZS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Np Z2ZyYW1lLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2lnZnJhbWUu aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL21hY2hpbmUvc2lnZnJhbWUuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAw MDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRoZSBw dWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2lu Y2x1ZGUvc2lnZnJhbWUuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKwor I2luY2x1ZGUgPHg4Ni9zaWdmcmFtZS5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvc2lnbmFsLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvc2lnbmFsLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc2ln bmFsLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NpZ25hbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAw MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNiBAQAorLyotCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhl IHB1YmxpYyBkb21haW4uCisgKi8KKy8qICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQv aW5jbHVkZS9zaWduYWwuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQgKi8KKwor I2luY2x1ZGUgPHg4Ni9zaWduYWwuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC9tYWNoaW5lL3NtcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5l L3NtcC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NtcC5oCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9zbXAuaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAwMDAwMDAwMCArMDEwMApA QCAtMCwwICsxLDQ2IEBACisvKi0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICJUSEUgQkVF Ui1XQVJFIExJQ0VOU0UiIChSZXZpc2lvbiA0Mik6CisgKiA8cGhrQEZyZWVCU0Qub3JnPiB3cm90 ZSB0aGlzIGZpbGUuICBBcyBsb25nIGFzIHlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91CisgKiBj YW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQgd2l0aCB0aGlzIHN0dWZmLiBJZiB3ZSBtZWV0IHNvbWUg ZGF5LCBhbmQgeW91IHRoaW5rCisgKiB0aGlzIHN0dWZmIGlzIHdvcnRoIGl0LCB5b3UgY2FuIGJ1 eSBtZSBhIGJlZXIgaW4gcmV0dXJuLiAgIFBvdWwtSGVubmluZyBLYW1wCisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl L3NtcC5oIDI5MTk0OSAyMDE1LTEyLTA3IDE3OjQxOjIwWiBraWIgJAorICoKKyAqLworCisjaWZu ZGVmIF9NQUNISU5FX1NNUF9IXworI2RlZmluZSBfTUFDSElORV9TTVBfSF8KKworI2lmZGVmIF9L RVJORUwKKworI2lmZGVmIFNNUAorCisjaWZuZGVmIExPQ09SRQorCisjaW5jbHVkZSA8eDg2L3g4 Nl9zbXAuaD4KKworZXh0ZXJuIGludCBwbWFwX3BjaWRfZW5hYmxlZDsKK2V4dGVybiBpbnQgaW52 cGNpZF93b3JrczsKKworLyogZ2xvYmFsIHN5bWJvbHMgaW4gbXBib290LlMgKi8KK2V4dGVybiBj aGFyCQkJbXB0cmFtcF9zdGFydFtdOworZXh0ZXJuIGNoYXIJCQltcHRyYW1wX2VuZFtdOworZXh0 ZXJuIHVfaW50MzJfdAkJbXB0cmFtcF9wYWdldGFibGVzOworCisvKiBJUEkgaGFuZGxlcnMgKi8K K2ludGhhbmRfdAorCUlEVFZFQyhpbnZsdGxiX3BjaWQpLAkvKiBUTEIgc2hvb3Rkb3ducyAtIGds b2JhbCwgcGNpZCAqLworCUlEVFZFQyhpbnZsdGxiX2ludnBjaWQpLC8qIFRMQiBzaG9vdGRvd25z IC0gZ2xvYmFsLCBpbnZwY2lkICovCisJSURUVkVDKGp1c3RyZXR1cm4pOwkvKiBpbnRlcnJ1cHQg Q1BVIHdpdGggbWluaW11bSBvdmVyaGVhZCAqLworCit2b2lkCWludmx0bGJfcGNpZF9oYW5kbGVy KHZvaWQpOwordm9pZAlpbnZsdGxiX2ludnBjaWRfaGFuZGxlcih2b2lkKTsKK2ludAluYXRpdmVf c3RhcnRfYWxsX2Fwcyh2b2lkKTsKKworI2VuZGlmIC8qICFMT0NPUkUgKi8KKyNlbmRpZiAvKiBT TVAgKi8KKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKyNlbmRpZiAvKiBfTUFDSElORV9TTVBfSF8g Ki8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3NwZWNp YWxyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zcGVjaWFscmVnLmgK LS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc3BlY2lhbHJlZy5oCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAvbWFjaGluZS9zcGVjaWFscmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl L3NwZWNpYWxyZWcuaCAyMzMyMDcgMjAxMi0wMy0xOSAyMTozNDoxMVogdGlqbCAkICovCisKKyNp bmNsdWRlIDx4ODYvc3BlY2lhbHJlZy5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvc3RhY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS9zdGFjay5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3N0YWNr LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC9tYWNoaW5lL3N0YWNrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKgorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJs aWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1 ZGUvc3RhY2suaCAyODc2NDMgMjAxNS0wOS0xMSAwMzoyNDowN1ogbWFya2ogJCAqLworCisjaW5j bHVkZSA8eDg2L3N0YWNrLmg+CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAvbWFjaGluZS9zdGRhcmcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9z dGRhcmcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9zdGRhcmcuaAkx OTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL21hY2hpbmUvc3RkYXJnLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAg KzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGlj IGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRl L3N0ZGFyZy5oIDIzMjI3NiAyMDEyLTAyLTI4IDIyOjMwOjU4WiB0aWpsICQgKi8KKworI2luY2x1 ZGUgPHg4Ni9zdGRhcmcuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9tYWNoaW5lL3N5c2FyY2guaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS9z eXNhcmNoLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvc3lzYXJjaC5o CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9k dWxlcy9uZXRtYXAvbWFjaGluZS9zeXNhcmNoLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVi bGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNs dWRlL3N5c2FyY2guaCAyMzMyMDkgMjAxMi0wMy0xOSAyMTo1NzozMVogdGlqbCAkICovCisKKyNp bmNsdWRlIDx4ODYvc3lzYXJjaC5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL21hY2hpbmUvdGltZXJyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS90aW1lcnJlZy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Rp bWVycmVnLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3RpbWVycmVnLmgJMjAxNi0wOS0yOSAwMDoyNDo1 NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMp IDIwMDUgVEFLQUhBU0hJIFlvc2hpaGlyby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVU T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJl bGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3RpbWVycmVnLmggMTc3NjQyIDIwMDgtMDMtMjYg MjA6MDk6MjFaIHBoayAkCisgKi8KKworLyoKKyAqIFRoZSBvdXRwdXRzIG9mIHRoZSB0aHJlZSB0 aW1lcnMgYXJlIGNvbm5lY3RlZCBhcyBmb2xsb3dzOgorICoKKyAqCSB0aW1lciAwIC0+IGlycSAw CisgKgkgdGltZXIgMSAtPiBkbWEgY2hhbiAwIChmb3IgZHJhbSByZWZyZXNoKQorICogCSB0aW1l ciAyIC0+IHNwZWFrZXIgKHZpYSBrZXlib2FyZCBjb250cm9sbGVyKQorICoKKyAqIFRpbWVyIDAg aXMgdXNlZCB0byBjYWxsIGhhcmRjbG9jay4KKyAqIFRpbWVyIDIgaXMgdXNlZCB0byBnZW5lcmF0 ZSBjb25zb2xlIGJlZXBzLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfVElNRVJSRUdfSF8KKyNk ZWZpbmUgX01BQ0hJTkVfVElNRVJSRUdfSF8KKworI2lmZGVmIF9LRVJORUwKKworI2luY2x1ZGUg PGRldi9pYy9pODI1M3JlZy5oPgorCisjZGVmaW5lCUlPX1RJTUVSMQkweDQwCQkvKiA4MjUzIFRp bWVyICMxICovCisjZGVmaW5lCVRJTUVSX0NOVFIwCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05U UjApCisjZGVmaW5lCVRJTUVSX0NOVFIxCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05UUjEpCisj ZGVmaW5lCVRJTUVSX0NOVFIyCShJT19USU1FUjEgKyBUSU1FUl9SRUdfQ05UUjIpCisjZGVmaW5l CVRJTUVSX01PREUJKElPX1RJTUVSMSArIFRJTUVSX1JFR19NT0RFKQorCisjZW5kaWYgLyogX0tF Uk5FTCAqLworCisjZW5kaWYgLyogX01BQ0hJTkVfVElNRVJSRUdfSF8gKi8KZGlmZiAtdSAtciAt TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3RyYXAuaCAvdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvbWFjaGluZS90cmFwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL21hY2hpbmUvdHJhcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr KyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS90cmFwLmgJMjAxNi0wOS0yOSAw MDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmls ZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4w L3N5cy9hbWQ2NC9pbmNsdWRlL3RyYXAuaCAyMzI0OTIgMjAxMi0wMy0wNCAxNDoxMjo1N1ogdGlq bCAkICovCisKKyNpbmNsdWRlIDx4ODYvdHJhcC5oPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdHNzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw L21hY2hpbmUvdHNzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdHNz LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC9tYWNoaW5lL3Rzcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAw ICswMTAwCkBAIC0wLDAgKzEsNzAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJp YnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4g TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg KiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpdHNzLmgJNS40IChCZXJrZWxleSkgMS8x OC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3Rzcy5oIDE0 NTEyMCAyMDA1LTA0LTE1IDE4OjM5OjMxWiBwZXRlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElO RV9UU1NfSF8KKyNkZWZpbmUgX01BQ0hJTkVfVFNTX0hfIDEKKworLyoKKyAqIGFtZDY0IENvbnRl eHQgRGF0YSBUeXBlCisgKgorICogVGhlIGFsaWdubWVudCBpcyBwcmV0dHkgbWVzc2VkIHVwIGhl cmUgZHVlIHRvIHJldXNlIG9mIHRoZSBvcmlnaW5hbCAzMiBiaXQKKyAqIGZpZWxkcy4gIEl0IG1p Z2h0IGJlIHdvcnRoIHRyeWluZyB0byBzZXQgdGhlIHRzcyBvbiBhICs0IGJ5dGUgb2Zmc2V0IHRv CisgKiBtYWtlIHRoZSA2NCBiaXQgZmllbGRzIGFsaWduZWQgaW4gcHJhY3RpY2UuCisgKi8KK3N0 cnVjdCBhbWQ2NHRzcyB7CisJdV9pbnQzMl90CXRzc19yc3ZkMDsKKwl1X2ludDY0X3QJdHNzX3Jz cDAgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciByaW5nIDAgKi8KKwl1X2ludDY0 X3QJdHNzX3JzcDEgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciByaW5nIDEgKi8K Kwl1X2ludDY0X3QJdHNzX3JzcDIgX19wYWNrZWQ7IAkvKiBrZXJuZWwgc3RhY2sgcG9pbnRlciBy aW5nIDIgKi8KKwl1X2ludDMyX3QJdHNzX3JzdmQxOworCXVfaW50MzJfdAl0c3NfcnN2ZDI7CisJ dV9pbnQ2NF90CXRzc19pc3QxIF9fcGFja2VkOwkvKiBJbnRlcnJ1cHQgc3RhY2sgdGFibGUgMSAq LworCXVfaW50NjRfdAl0c3NfaXN0MiBfX3BhY2tlZDsJLyogSW50ZXJydXB0IHN0YWNrIHRhYmxl IDIgKi8KKwl1X2ludDY0X3QJdHNzX2lzdDMgX19wYWNrZWQ7CS8qIEludGVycnVwdCBzdGFjayB0 YWJsZSAzICovCisJdV9pbnQ2NF90CXRzc19pc3Q0IF9fcGFja2VkOwkvKiBJbnRlcnJ1cHQgc3Rh Y2sgdGFibGUgNCAqLworCXVfaW50NjRfdAl0c3NfaXN0NSBfX3BhY2tlZDsJLyogSW50ZXJydXB0 IHN0YWNrIHRhYmxlIDUgKi8KKwl1X2ludDY0X3QJdHNzX2lzdDYgX19wYWNrZWQ7CS8qIEludGVy cnVwdCBzdGFjayB0YWJsZSA2ICovCisJdV9pbnQ2NF90CXRzc19pc3Q3IF9fcGFja2VkOwkvKiBJ bnRlcnJ1cHQgc3RhY2sgdGFibGUgNyAqLworCXVfaW50MzJfdAl0c3NfcnN2ZDM7CisJdV9pbnQz Ml90CXRzc19yc3ZkNDsKKwl1X2ludDE2X3QJdHNzX3JzdmQ1OworCXVfaW50MTZfdAl0c3NfaW9i YXNlOwkvKiBpbyBiaXRtYXAgb2Zmc2V0ICovCit9OworCisjaWZkZWYgX0tFUk5FTAorZXh0ZXJu IHN0cnVjdCBhbWQ2NHRzcyBjb21tb25fdHNzW107CisjZW5kaWYKKworI2VuZGlmIC8qIF9NQUNI SU5FX1RTU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvdWNvbnRleHQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS91Y29u dGV4dC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Vjb250ZXh0LmgJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1 bGVzL25ldG1hcC9tYWNoaW5lL3Vjb250ZXh0LmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAw MDAgKzAxMDAKQEAgLTAsMCArMSw2IEBACisvKi0KKyAqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVi bGljIGRvbWFpbi4KKyAqLworLyogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9pbmNs dWRlL3Vjb250ZXh0LmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6Mzk6NTJaIGtpYiAkICovCisKKyNp bmNsdWRlIDx4ODYvdWNvbnRleHQuaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC9tYWNoaW5lL3ZhcmFyZ3MuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS92YXJhcmdzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdmFy YXJncy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92YXJhcmdzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NC4w MDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw MDIgRGF2aWQgRS4gTydCcmllbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg KGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRv cmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJp dmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4 IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRo CisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5k IGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl2YXJh cmdzLmgJOC4yIChCZXJrZWxleSkgMy8yMi85NAorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5 cy9hbWQ2NC9pbmNsdWRlL3ZhcmFyZ3MuaCAxNDM0MzQgMjAwNS0wMy0xMSAyMjoxNjowOVogcGV0 ZXIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfVkFSQVJHU19IXworI2RlZmluZQlfTUFDSElO RV9WQVJBUkdTX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9yIHRoaXMgZmlsZSBu ZWVkcyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisKKyNpZmRlZiBfX0dO VUNMSUtFX0JVSUxUSU5fVkFSQVJHUworCisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCisjaWZu ZGVmIF9WQV9MSVNUX0RFQ0xBUkVECisjZGVmaW5lCV9WQV9MSVNUX0RFQ0xBUkVECit0eXBlZGVm CV9fdmFfbGlzdAl2YV9saXN0OworI2VuZGlmCisKK3R5cGVkZWYgaW50IF9fYnVpbHRpbl92YV9h bGlzdF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fd29yZF9fKSkpOworCisjZGVmaW5lCXZh X2FsaXN0CQlfX2J1aWx0aW5fdmFfYWxpc3QKKyNkZWZpbmUJdmFfZGNsCQkJX19idWlsdGluX3Zh X2FsaXN0X3QgX19idWlsdGluX3ZhX2FsaXN0OyAuLi4KKyNkZWZpbmUJdmFfc3RhcnQoYXApCQlf X2J1aWx0aW5fdmFyYXJnc19zdGFydChhcCkKKyNkZWZpbmUJdmFfYXJnKGFwLCB0eXBlKQlfX2J1 aWx0aW5fdmFfYXJnKChhcCksIHR5cGUpCisjZGVmaW5lCXZhX2VuZChhcCkJCV9fYnVpbHRpbl92 YV9lbmQoYXApCisKKyNlbHNlCS8qICFfX0dOVUNMSUtFX0JVSUxUSU5fVkFSQVJHUyAqLworCit0 eXBlZGVmIGNoYXIgKnZhX2xpc3Q7CisKKyNkZWZpbmUJX192YV9zaXplKHR5cGUpIFwKKwkoKChz aXplb2YodHlwZSkgKyBzaXplb2YoaW50KSAtIDEpIC8gc2l6ZW9mKGludCkpICogc2l6ZW9mKGlu dCkpCisKKyNpZiBkZWZpbmVkKF9fR05VQ0xJS0VfQlVJTFRJTl9WQUFMSVNUKQorI2RlZmluZQl2 YV9hbGlzdAlfX2J1aWx0aW5fdmFfYWxpc3QKKyNlbmRpZgorI2RlZmluZQl2YV9kY2wJaW50IHZh X2FsaXN0OyAuLi4KKworI2RlZmluZQl2YV9zdGFydChhcCkgXAorCSgoYXApID0gKHZhX2xpc3Qp JnZhX2FsaXN0KQorCisjZGVmaW5lCXZhX2FyZyhhcCwgdHlwZSkgXAorCSgqKHR5cGUgKikoKGFw KSArPSBfX3ZhX3NpemUodHlwZSksIChhcCkgLSBfX3ZhX3NpemUodHlwZSkpKQorCisjZGVmaW5l CXZhX2VuZChhcCkKKworI2VuZGlmIC8qIF9fR05VQ0xJS0VfQlVJTFRJTl9WQVJBUkdTICovCisK KyNlbmRpZiAvKiAhX01BQ0hJTkVfVkFSQVJHU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdmRzby5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC9tYWNoaW5lL3Zkc28uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGlu ZS92ZHNvLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zkc28uaAkyMDE2LTA5LTI5IDAwOjI0OjU0LjAw MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGluIHRo ZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0 L2luY2x1ZGUvdmRzby5oIDIzNzQzMyAyMDEyLTA2LTIyIDA3OjA2OjQwWiBraWIgJCAqLworCisj aW5jbHVkZSA8eDg2L3Zkc28uaD4KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC9tYWNoaW5lL3ZtLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm0u aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bS5oCTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv bWFjaGluZS92bS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg KzEsNDUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IEh1ZHNvbiBSaXZlciBUcmFkaW5n IExMQworICogV3JpdHRlbiBieTogSm9obiBILiBCYWxkd2luIDxqaGJARnJlZUJTRC5vcmc+Cisg KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1k NjQvaW5jbHVkZS92bS5oIDI4MTg4NyAyMDE1LTA0LTIzIDE0OjIyOjIwWiBqaGIgJAorICovCisK KyNpZm5kZWYgX01BQ0hJTkVfVk1fSF8KKyNkZWZpbmUJX01BQ0hJTkVfVk1fSF8KKworI2luY2x1 ZGUgPG1hY2hpbmUvc3BlY2lhbHJlZy5oPgorCisvKiBNZW1vcnkgYXR0cmlidXRlcy4gKi8KKyNk ZWZpbmUJVk1fTUVNQVRUUl9VTkNBQ0hFQUJMRQkJKCh2bV9tZW1hdHRyX3QpUEFUX1VOQ0FDSEVB QkxFKQorI2RlZmluZQlWTV9NRU1BVFRSX1dSSVRFX0NPTUJJTklORwkoKHZtX21lbWF0dHJfdClQ QVRfV1JJVEVfQ09NQklOSU5HKQorI2RlZmluZQlWTV9NRU1BVFRSX1dSSVRFX1RIUk9VR0gJKCh2 bV9tZW1hdHRyX3QpUEFUX1dSSVRFX1RIUk9VR0gpCisjZGVmaW5lCVZNX01FTUFUVFJfV1JJVEVf UFJPVEVDVEVECSgodm1fbWVtYXR0cl90KVBBVF9XUklURV9QUk9URUNURUQpCisjZGVmaW5lCVZN X01FTUFUVFJfV1JJVEVfQkFDSwkJKCh2bV9tZW1hdHRyX3QpUEFUX1dSSVRFX0JBQ0spCisjZGVm aW5lCVZNX01FTUFUVFJfV0VBS19VTkNBQ0hFQUJMRQkoKHZtX21lbWF0dHJfdClQQVRfVU5DQUNI RUQpCisKKyNkZWZpbmUJVk1fTUVNQVRUUl9ERUZBVUxUCQlWTV9NRU1BVFRSX1dSSVRFX0JBQ0sK KworI2VuZGlmIC8qICFfTUFDSElORV9WTV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz L21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw L21hY2hpbmUvdm1tLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1t LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oCTIwMTYtMTEtMzAgMTA6NTY6MDUuNzg0OTk5MDAw ICswMDAwCkBAIC0wLDAgKzEsNjg0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRB cHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFTIElTJycgQU5ECisgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor ICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9hbWQ2NC9p bmNsdWRlL3ZtbS5oIDI5OTAxMCAyMDE2LTA1LTAzIDIyOjEzOjA0WiBwZmcgJAorICovCisKKyNp Zm5kZWYgX1ZNTV9IXworI2RlZmluZQlfVk1NX0hfCisKKyNpbmNsdWRlIDx4ODYvc2VnbWVudHMu aD4KKworZW51bSB2bV9zdXNwZW5kX2hvdyB7CisJVk1fU1VTUEVORF9OT05FLAorCVZNX1NVU1BF TkRfUkVTRVQsCisJVk1fU1VTUEVORF9QT1dFUk9GRiwKKwlWTV9TVVNQRU5EX0hBTFQsCisJVk1f U1VTUEVORF9UUklQTEVGQVVMVCwKKwlWTV9TVVNQRU5EX0xBU1QKK307CisKKy8qCisgKiBJZGVu dGlmaWVycyBmb3IgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgcmVnaXN0ZXJzLgorICovCitlbnVt IHZtX3JlZ19uYW1lIHsKKwlWTV9SRUdfR1VFU1RfUkFYLAorCVZNX1JFR19HVUVTVF9SQlgsCisJ Vk1fUkVHX0dVRVNUX1JDWCwKKwlWTV9SRUdfR1VFU1RfUkRYLAorCVZNX1JFR19HVUVTVF9SU0ks CisJVk1fUkVHX0dVRVNUX1JESSwKKwlWTV9SRUdfR1VFU1RfUkJQLAorCVZNX1JFR19HVUVTVF9S OCwKKwlWTV9SRUdfR1VFU1RfUjksCisJVk1fUkVHX0dVRVNUX1IxMCwKKwlWTV9SRUdfR1VFU1Rf UjExLAorCVZNX1JFR19HVUVTVF9SMTIsCisJVk1fUkVHX0dVRVNUX1IxMywKKwlWTV9SRUdfR1VF U1RfUjE0LAorCVZNX1JFR19HVUVTVF9SMTUsCisJVk1fUkVHX0dVRVNUX0NSMCwKKwlWTV9SRUdf R1VFU1RfQ1IzLAorCVZNX1JFR19HVUVTVF9DUjQsCisJVk1fUkVHX0dVRVNUX0RSNywKKwlWTV9S RUdfR1VFU1RfUlNQLAorCVZNX1JFR19HVUVTVF9SSVAsCisJVk1fUkVHX0dVRVNUX1JGTEFHUywK KwlWTV9SRUdfR1VFU1RfRVMsCisJVk1fUkVHX0dVRVNUX0NTLAorCVZNX1JFR19HVUVTVF9TUywK KwlWTV9SRUdfR1VFU1RfRFMsCisJVk1fUkVHX0dVRVNUX0ZTLAorCVZNX1JFR19HVUVTVF9HUywK KwlWTV9SRUdfR1VFU1RfTERUUiwKKwlWTV9SRUdfR1VFU1RfVFIsCisJVk1fUkVHX0dVRVNUX0lE VFIsCisJVk1fUkVHX0dVRVNUX0dEVFIsCisJVk1fUkVHX0dVRVNUX0VGRVIsCisJVk1fUkVHX0dV RVNUX0NSMiwKKwlWTV9SRUdfR1VFU1RfUERQVEUwLAorCVZNX1JFR19HVUVTVF9QRFBURTEsCisJ Vk1fUkVHX0dVRVNUX1BEUFRFMiwKKwlWTV9SRUdfR1VFU1RfUERQVEUzLAorCVZNX1JFR19HVUVT VF9JTlRSX1NIQURPVywKKwlWTV9SRUdfTEFTVAorfTsKKworZW51bSB4MmFwaWNfc3RhdGUgewor CVgyQVBJQ19ESVNBQkxFRCwKKwlYMkFQSUNfRU5BQkxFRCwKKwlYMkFQSUNfU1RBVEVfTEFTVAor fTsKKworI2RlZmluZQlWTV9JTlRJTkZPX1ZFQ1RPUihpbmZvKQkoKGluZm8pICYgMHhmZikKKyNk ZWZpbmUJVk1fSU5USU5GT19ERUxfRVJSQ09ERQkweDgwMAorI2RlZmluZQlWTV9JTlRJTkZPX1JT VkQJCTB4N2ZmZmYwMDAKKyNkZWZpbmUJVk1fSU5USU5GT19WQUxJRAkweDgwMDAwMDAwCisjZGVm aW5lCVZNX0lOVElORk9fVFlQRQkJMHg3MDAKKyNkZWZpbmUJVk1fSU5USU5GT19IV0lOVFIJKDAg PDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19OTUkJCSgyIDw8IDgpCisjZGVmaW5lCVZNX0lOVElO Rk9fSFdFWENFUFRJT04JKDMgPDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19TV0lOVFIJKDQgPDwg OCkKKworI2lmZGVmIF9LRVJORUwKKworI2RlZmluZQlWTV9NQVhfTkFNRUxFTgkzMgorCitzdHJ1 Y3Qgdm07CitzdHJ1Y3Qgdm1fZXhjZXB0aW9uOworc3RydWN0IHNlZ19kZXNjOworc3RydWN0IHZt X2V4aXQ7CitzdHJ1Y3Qgdm1fcnVuOworc3RydWN0IHZocGV0Oworc3RydWN0IHZpb2FwaWM7Citz dHJ1Y3QgdmxhcGljOworc3RydWN0IHZtc3BhY2U7CitzdHJ1Y3Qgdm1fb2JqZWN0Oworc3RydWN0 IHZtX2d1ZXN0X3BhZ2luZzsKK3N0cnVjdCBwbWFwOworCitzdHJ1Y3Qgdm1fZXZlbnRpbmZvIHsK Kwl2b2lkCSpycHRyOwkJLyogcmVuZGV6dm91cyBjb29raWUgKi8KKwlpbnQJKnNwdHI7CQkvKiBz dXNwZW5kIGNvb2tpZSAqLworCWludAkqaXB0cjsJCS8qIHJlcWlkbGUgY29va2llICovCit9Owor Cit0eXBlZGVmIGludAkoKnZtbV9pbml0X2Z1bmNfdCkoaW50IGlwaW51bSk7Cit0eXBlZGVmIGlu dAkoKnZtbV9jbGVhbnVwX2Z1bmNfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQJKCp2bW1fcmVzdW1l X2Z1bmNfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKgkoKnZtaV9pbml0X2Z1bmNfdCkoc3RydWN0 IHZtICp2bSwgc3RydWN0IHBtYXAgKnBtYXApOwordHlwZWRlZiBpbnQJKCp2bWlfcnVuX2Z1bmNf dCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgcmVnaXN0ZXJfdCByaXAsCisJCSAgICBzdHJ1Y3QgcG1h cCAqcG1hcCwgc3RydWN0IHZtX2V2ZW50aW5mbyAqaW5mbyk7Cit0eXBlZGVmIHZvaWQJKCp2bWlf Y2xlYW51cF9mdW5jX3QpKHZvaWQgKnZtaSk7Cit0eXBlZGVmIGludAkoKnZtaV9nZXRfcmVnaXN0 ZXJfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwKKwkJCQkgICAgICB1aW50NjRfdCAq cmV0dmFsKTsKK3R5cGVkZWYgaW50CSgqdm1pX3NldF9yZWdpc3Rlcl90KSh2b2lkICp2bWksIGlu dCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgICAgIHVpbnQ2NF90IHZhbCk7Cit0eXBlZGVmIGludAko KnZtaV9nZXRfZGVzY190KSh2b2lkICp2bWksIGludCB2Y3B1LCBpbnQgbnVtLAorCQkJCSAgc3Ry dWN0IHNlZ19kZXNjICpkZXNjKTsKK3R5cGVkZWYgaW50CSgqdm1pX3NldF9kZXNjX3QpKHZvaWQg KnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOwor dHlwZWRlZiBpbnQJKCp2bWlfZ2V0X2NhcF90KSh2b2lkICp2bWksIGludCB2Y3B1LCBpbnQgbnVt LCBpbnQgKnJldHZhbCk7Cit0eXBlZGVmIGludAkoKnZtaV9zZXRfY2FwX3QpKHZvaWQgKnZtaSwg aW50IHZjcHUsIGludCBudW0sIGludCB2YWwpOwordHlwZWRlZiBzdHJ1Y3Qgdm1zcGFjZSAqICgq dm1pX3Ztc3BhY2VfYWxsb2MpKHZtX29mZnNldF90IG1pbiwgdm1fb2Zmc2V0X3QgbWF4KTsKK3R5 cGVkZWYgdm9pZAkoKnZtaV92bXNwYWNlX2ZyZWUpKHN0cnVjdCB2bXNwYWNlICp2bXNwYWNlKTsK K3R5cGVkZWYgc3RydWN0IHZsYXBpYyAqICgqdm1pX3ZsYXBpY19pbml0KSh2b2lkICp2bWksIGlu dCB2Y3B1KTsKK3R5cGVkZWYgdm9pZAkoKnZtaV92bGFwaWNfY2xlYW51cCkodm9pZCAqdm1pLCBz dHJ1Y3QgdmxhcGljICp2bGFwaWMpOworCitzdHJ1Y3Qgdm1tX29wcyB7CisJdm1tX2luaXRfZnVu Y190CQlpbml0OwkJLyogbW9kdWxlIHdpZGUgaW5pdGlhbGl6YXRpb24gKi8KKwl2bW1fY2xlYW51 cF9mdW5jX3QJY2xlYW51cDsKKwl2bW1fcmVzdW1lX2Z1bmNfdAlyZXN1bWU7CisKKwl2bWlfaW5p dF9mdW5jX3QJCXZtaW5pdDsJCS8qIHZtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCisJdm1p X3J1bl9mdW5jX3QJCXZtcnVuOworCXZtaV9jbGVhbnVwX2Z1bmNfdAl2bWNsZWFudXA7CisJdm1p X2dldF9yZWdpc3Rlcl90CXZtZ2V0cmVnOworCXZtaV9zZXRfcmVnaXN0ZXJfdAl2bXNldHJlZzsK Kwl2bWlfZ2V0X2Rlc2NfdAkJdm1nZXRkZXNjOworCXZtaV9zZXRfZGVzY190CQl2bXNldGRlc2M7 CisJdm1pX2dldF9jYXBfdAkJdm1nZXRjYXA7CisJdm1pX3NldF9jYXBfdAkJdm1zZXRjYXA7CisJ dm1pX3Ztc3BhY2VfYWxsb2MJdm1zcGFjZV9hbGxvYzsKKwl2bWlfdm1zcGFjZV9mcmVlCXZtc3Bh Y2VfZnJlZTsKKwl2bWlfdmxhcGljX2luaXQJCXZsYXBpY19pbml0OworCXZtaV92bGFwaWNfY2xl YW51cAl2bGFwaWNfY2xlYW51cDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgdm1tX29wcyB2bW1fb3Bz X2ludGVsOworZXh0ZXJuIHN0cnVjdCB2bW1fb3BzIHZtbV9vcHNfYW1kOworCitpbnQgdm1fY3Jl YXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCB2bSAqKnJldHZtKTsKK3ZvaWQgdm1fZGVzdHJv eShzdHJ1Y3Qgdm0gKnZtKTsKK2ludCB2bV9yZWluaXQoc3RydWN0IHZtICp2bSk7Citjb25zdCBj aGFyICp2bV9uYW1lKHN0cnVjdCB2bSAqdm0pOworCisvKgorICogQVBJcyB0aGF0IG1vZGlmeSB0 aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJlIGFsbCB2Y3B1cyB0byBiZSBmcm96ZW4uCisgKi8K K2ludCB2bV9tbWFwX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdwYSwgaW50IHNl Z2lkLCB2bV9vb2Zmc2V0X3Qgb2ZmLAorICAgIHNpemVfdCBsZW4sIGludCBwcm90LCBpbnQgZmxh Z3MpOworaW50IHZtX2FsbG9jX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQsIHNpemVf dCBsZW4sIGJvb2wgc3lzbWVtKTsKK3ZvaWQgdm1fZnJlZV9tZW1zZWcoc3RydWN0IHZtICp2bSwg aW50IGlkZW50KTsKK2ludCB2bV9tYXBfbW1pbyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdw YSwgc2l6ZV90IGxlbiwgdm1fcGFkZHJfdCBocGEpOworaW50IHZtX21hcF91c2VybWVtKHN0cnVj dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2b2lkICpidWYsIHN0cnVjdCB0 aHJlYWQgKnRkKTsKK2ludCB2bV91bm1hcF9tbWlvKHN0cnVjdCB2bSAqdm0sIHZtX3BhZGRyX3Qg Z3BhLCBzaXplX3QgbGVuKTsKK2ludCB2bV9hc3NpZ25fcHB0ZGV2KHN0cnVjdCB2bSAqdm0sIGlu dCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CitpbnQgdm1fdW5hc3NpZ25fcHB0ZGV2KHN0cnVj dCB2bSAqdm0sIGludCBidXMsIGludCBzbG90LCBpbnQgZnVuYyk7CisKKy8qCisgKiBBUElzIHRo YXQgaW5zcGVjdCB0aGUgZ3Vlc3QgbWVtb3J5IG1hcCByZXF1aXJlIG9ubHkgYSAqc2luZ2xlKiB2 Y3B1IHRvCisgKiBiZSBmcm96ZW4uIFRoaXMgYWN0cyBsaWtlIGEgcmVhZCBsb2NrIG9uIHRoZSBn dWVzdCBtZW1vcnkgbWFwIHNpbmNlIGFueQorICogbW9kaWZpY2F0aW9uIHJlcXVpcmVzICphbGwq IHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBfZ2V0bmV4dChzdHJ1Y3Qgdm0g KnZtLCB2bV9wYWRkcl90ICpncGEsIGludCAqc2VnaWQsCisgICAgdm1fb29mZnNldF90ICpzZWdv ZmYsIHNpemVfdCAqbGVuLCBpbnQgKnByb3QsIGludCAqZmxhZ3MpOworaW50IHZtX2dldF9tZW1z ZWcoc3RydWN0IHZtICp2bSwgaW50IGlkZW50LCBzaXplX3QgKmxlbiwgYm9vbCAqc3lzbWVtLAor ICAgIHN0cnVjdCB2bV9vYmplY3QgKipvYmpwdHIpOwordm9pZCAqdm1fZ3BhX2hvbGQoc3RydWN0 IHZtICosIGludCB2Y3B1aWQsIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLAorICAgIGludCBw cm90LCB2b2lkICoqY29va2llKTsKK3ZvaWQgdm1fZ3BhX3JlbGVhc2Uodm9pZCAqY29va2llKTsK K2Jvb2wgdm1fbWVtX2FsbG9jYXRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB2bV9wYWRk cl90IGdwYSk7CisKK2ludCB2bV9nZXRfcmVnaXN0ZXIoc3RydWN0IHZtICp2bSwgaW50IHZjcHUs IGludCByZWcsIHVpbnQ2NF90ICpyZXR2YWwpOworaW50IHZtX3NldF9yZWdpc3RlcihzdHJ1Y3Qg dm0gKnZtLCBpbnQgdmNwdSwgaW50IHJlZywgdWludDY0X3QgdmFsKTsKK2ludCB2bV9nZXRfc2Vn X2Rlc2Moc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2Vn X2Rlc2MgKnJldF9kZXNjKTsKK2ludCB2bV9zZXRfc2VnX2Rlc2Moc3RydWN0IHZtICp2bSwgaW50 IHZjcHUsIGludCByZWcsCisJCSAgICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOworaW50IHZtX3J1 bihzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3Qgdm1fcnVuICp2bXJ1bik7CitpbnQgdm1fc3VzcGVuZChz dHJ1Y3Qgdm0gKnZtLCBlbnVtIHZtX3N1c3BlbmRfaG93IGhvdyk7CitpbnQgdm1faW5qZWN0X25t aShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQgdm1fbm1pX3BlbmRpbmcoc3RydWN0IHZt ICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX25taV9jbGVhcihzdHJ1Y3Qgdm0gKnZtLCBpbnQg dmNwdWlkKTsKK2ludCB2bV9pbmplY3RfZXh0aW50KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsK K2ludCB2bV9leHRpbnRfcGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3ZvaWQg dm1fZXh0aW50X2NsZWFyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpOworc3RydWN0IHZsYXBp YyAqdm1fbGFwaWMoc3RydWN0IHZtICp2bSwgaW50IGNwdSk7CitzdHJ1Y3QgdmlvYXBpYyAqdm1f aW9hcGljKHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZocGV0ICp2bV9ocGV0KHN0cnVjdCB2bSAq dm0pOworaW50IHZtX2dldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQg dHlwZSwgaW50ICp2YWwpOworaW50IHZtX3NldF9jYXBhYmlsaXR5KHN0cnVjdCB2bSAqdm0sIGlu dCB2Y3B1LCBpbnQgdHlwZSwgaW50IHZhbCk7CitpbnQgdm1fZ2V0X3gyYXBpY19zdGF0ZShzdHJ1 Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUgKnN0YXRlKTsKK2ludCB2bV9z ZXRfeDJhcGljX3N0YXRlKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBlbnVtIHgyYXBpY19zdGF0 ZSBzdGF0ZSk7CitpbnQgdm1fYXBpY2lkMnZjcHVpZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgYXBpY2lk KTsKK2ludCB2bV9hY3RpdmF0ZV9jcHUoc3RydWN0IHZtICp2bSwgaW50IHZjcHUpOworc3RydWN0 IHZtX2V4aXQgKnZtX2V4aXRpbmZvKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQpOwordm9pZCB2 bV9leGl0X3N1c3BlbmRlZChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXAp Owordm9pZCB2bV9leGl0X3JlbmRlenZvdXMoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdWlu dDY0X3QgcmlwKTsKK3ZvaWQgdm1fZXhpdF9hc3RwZW5kaW5nKHN0cnVjdCB2bSAqdm0sIGludCB2 Y3B1aWQsIHVpbnQ2NF90IHJpcCk7Cit2b2lkIHZtX2V4aXRfcmVxaWRsZShzdHJ1Y3Qgdm0gKnZt LCBpbnQgdmNwdWlkLCB1aW50NjRfdCByaXApOworCisjaWZkZWYgX1NZU19fQ1BVU0VUX0hfCisv KgorICogUmVuZGV6dm91cyBhbGwgdmNwdXMgc3BlY2lmaWVkIGluICdkZXN0JyBhbmQgZXhlY3V0 ZSAnZnVuYyhhcmcpJy4KKyAqIFRoZSByZW5kZXp2b3VzICdmdW5jKGFyZyknIGlzIG5vdCBhbGxv d2VkIHRvIGRvIGFueXRoaW5nIHRoYXQgd2lsbAorICogY2F1c2UgdGhlIHRocmVhZCB0byBiZSBw dXQgdG8gc2xlZXAuCisgKgorICogSWYgdGhlIHJlbmRlenZvdXMgaXMgYmVpbmcgaW5pdGlhdGVk IGZyb20gYSB2Y3B1IGNvbnRleHQgdGhlbiB0aGUKKyAqICd2Y3B1aWQnIG11c3QgcmVmZXIgdG8g dGhhdCB2Y3B1LCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0byAtMS4KKyAqCisgKiBUaGUg Y2FsbGVyIGNhbm5vdCBob2xkIGFueSBsb2NrcyB3aGVuIGluaXRpYXRpbmcgdGhlIHJlbmRlenZv dXMuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgQVBJIG1heSBjYXVzZSB2Y3B1 cyBvdGhlciB0aGFuIHRob3NlIHNwZWNpZmllZAorICogYnkgJ2Rlc3QnIHRvIGJlIHN0YWxsZWQu IFRoZSBjYWxsZXIgc2hvdWxkIG5vdCByZWx5IG9uIGFueSB2Y3B1cyBtYWtpbmcKKyAqIGZvcndh cmQgcHJvZ3Jlc3Mgd2hlbiB0aGUgcmVuZGV6dm91cyBpcyBpbiBwcm9ncmVzcy4KKyAqLwordHlw ZWRlZiB2b2lkICgqdm1fcmVuZGV6dm91c19mdW5jX3QpKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1 aWQsIHZvaWQgKmFyZyk7Cit2b2lkIHZtX3NtcF9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGlu dCB2Y3B1aWQsIGNwdXNldF90IGRlc3QsCisgICAgdm1fcmVuZGV6dm91c19mdW5jX3QgZnVuYywg dm9pZCAqYXJnKTsKK2NwdXNldF90IHZtX2FjdGl2ZV9jcHVzKHN0cnVjdCB2bSAqdm0pOworY3B1 c2V0X3Qgdm1fc3VzcGVuZGVkX2NwdXMoc3RydWN0IHZtICp2bSk7CisjZW5kaWYJLyogX1NZU19f Q1BVU0VUX0hfICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVfcmVuZGV6dm91c19wZW5k aW5nKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCooKHVpbnRwdHJf dCAqKShpbmZvLT5ycHRyKSkgIT0gMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVf c3VzcGVuZGVkKHN0cnVjdCB2bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZv LT5zcHRyKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAordmNwdV9yZXFpZGxlKHN0cnVjdCB2 bV9ldmVudGluZm8gKmluZm8pCit7CisKKwlyZXR1cm4gKCppbmZvLT5pcHRyKTsKK30KKworLyoK KyAqIFJldHVybiAxIGlmIGRldmljZSBpbmRpY2F0ZWQgYnkgYnVzL3Nsb3QvZnVuYyBpcyBzdXBw b3NlZCB0byBiZSBhCisgKiBwY2kgcGFzc3Rocm91Z2ggZGV2aWNlLgorICoKKyAqIFJldHVybiAw IG90aGVyd2lzZS4KKyAqLworaW50IHZtbV9pc19wcHRkZXYoaW50IGJ1cywgaW50IHNsb3QsIGlu dCBmdW5jKTsKKwordm9pZCAqdm1faW9tbXVfZG9tYWluKHN0cnVjdCB2bSAqdm0pOworCitlbnVt IHZjcHVfc3RhdGUgeworCVZDUFVfSURMRSwKKwlWQ1BVX0ZST1pFTiwKKwlWQ1BVX1JVTk5JTkcs CisJVkNQVV9TTEVFUElORywKK307CisKK2ludCB2Y3B1X3NldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZt LCBpbnQgdmNwdSwgZW51bSB2Y3B1X3N0YXRlIHN0YXRlLAorICAgIGJvb2wgZnJvbV9pZGxlKTsK K2VudW0gdmNwdV9zdGF0ZSB2Y3B1X2dldF9zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwg aW50ICpob3N0Y3B1KTsKKworc3RhdGljIGludCBfX2lubGluZQordmNwdV9pc19ydW5uaW5nKHN0 cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgKmhvc3RjcHUpCit7CisJcmV0dXJuICh2Y3B1X2dl dF9zdGF0ZSh2bSwgdmNwdSwgaG9zdGNwdSkgPT0gVkNQVV9SVU5OSU5HKTsKK30KKworI2lmZGVm IF9TWVNfUFJPQ19IXworc3RhdGljIGludCBfX2lubGluZQordmNwdV9zaG91bGRfeWllbGQoc3Ry dWN0IHZtICp2bSwgaW50IHZjcHUpCit7CisKKwlpZiAoY3VydGhyZWFkLT50ZF9mbGFncyAmIChU REZfQVNUUEVORElORyB8IFRERl9ORUVEUkVTQ0hFRCkpCisJCXJldHVybiAoMSk7CisJZWxzZSBp ZiAoY3VydGhyZWFkLT50ZF9vd2VwcmVlbXB0KQorCQlyZXR1cm4gKDEpOworCWVsc2UKKwkJcmV0 dXJuICgwKTsKK30KKyNlbmRpZgorCit2b2lkICp2Y3B1X3N0YXRzKHN0cnVjdCB2bSAqdm0sIGlu dCB2Y3B1KTsKK3ZvaWQgdmNwdV9ub3RpZnlfZXZlbnQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp ZCwgYm9vbCBsYXBpY19pbnRyKTsKK3N0cnVjdCB2bXNwYWNlICp2bV9nZXRfdm1zcGFjZShzdHJ1 Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2YXRwaWMgKnZtX2F0cGljKHN0cnVjdCB2bSAqdm0pOworc3Ry dWN0IHZhdHBpdCAqdm1fYXRwaXQoc3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgdnBtdG1yICp2bV9w bXRtcihzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2cnRjICp2bV9ydGMoc3RydWN0IHZtICp2bSk7 CitzdHJ1Y3QgaW9yZWdoICp2bV9pb3JlZ2goc3RydWN0IHZtICp2bSk7CisKKy8qCisgKiBJbmpl Y3QgZXhjZXB0aW9uICd2ZWN0b3InIGludG8gdGhlIGd1ZXN0IHZjcHUuIFRoaXMgZnVuY3Rpb24g cmV0dXJucyAwIG9uCisgKiBzdWNjZXNzIGFuZCBub24temVybyBvbiBmYWlsdXJlLgorICoKKyAq IFdyYXBwZXIgZnVuY3Rpb25zIGxpa2UgJ3ZtX2luamVjdF9ncCgpJyBzaG91bGQgYmUgcHJlZmVy cmVkIHRvIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGVu Zm9yY2UgdGhlIHRyYXAtbGlrZSBvciBmYXVsdC1saWtlCisgKiBiZWhhdmlvciBvZiBhbiBleGNl cHRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdGhl IGNvbnRleHQgb2YgdGhlIHRocmVhZCB0aGF0IGlzCisgKiBleGVjdXRpbmcgdGhpcyB2Y3B1Lgor ICovCitpbnQgdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBp bnQgdmVjdG9yLCBpbnQgZXJyX3ZhbGlkLAorICAgIHVpbnQzMl90IGVycmNvZGUsIGludCByZXN0 YXJ0X2luc3RydWN0aW9uKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVy IGEgVk0tZXhpdCB0aGF0IG9jY3VycmVkIGR1cmluZyBleGNlcHRpb24gb3IKKyAqIGludGVycnVw dCBkZWxpdmVyeSB0aHJvdWdoIHRoZSBJRFQuIFRoZSBmb3JtYXQgb2YgJ2ludGluZm8nIGlzIGRl c2NyaWJlZAorICogaW4gRmlndXJlIDE1LTEsICJFWElUSU5USU5GTyBmb3IgQWxsIEludGVyY2Vw dHMiLCBBUE0sIFZvbCAyLgorICoKKyAqIElmIGEgVk0tZXhpdCBoYW5kbGVyIGNvbXBsZXRlcyB0 aGUgZXZlbnQgZGVsaXZlcnkgc3VjY2Vzc2Z1bGx5IHRoZW4gaXQKKyAqIHNob3VsZCBjYWxsIHZt X2V4aXRfaW50aW5mbygpIHRvIGV4dGluZ3Vpc2ggdGhlIHBlbmRpbmcgZXZlbnQuIEZvciBlLmcu LAorICogaWYgdGhlIHRhc2sgc3dpdGNoIGVtdWxhdGlvbiBpcyB0cmlnZ2VyZWQgdmlhIGEgdGFz ayBnYXRlIHRoZW4gaXQgc2hvdWxkCisgKiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAnaW50aW5m bz0wJyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBleHRlcm5hbCBldmVudAorICogaXMgbm90IHBlbmRp bmcgYW55bW9yZS4KKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgMCBvbiBzdWNjZXNzIGFuZCBub24t emVybyBvbiBmYWlsdXJlLgorICovCitpbnQgdm1fZXhpdF9pbnRpbmZvKHN0cnVjdCB2bSAqdm0s IGludCB2Y3B1aWQsIHVpbnQ2NF90IGludGluZm8pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgYmVmb3JlIGV2ZXJ5IFZNLWVudHJ5IHRvIHJldHJpZXZlIGEgcGVuZGluZworICog ZXZlbnQgdGhhdCBzaG91bGQgYmUgaW5qZWN0ZWQgaW50byB0aGUgZ3Vlc3QuIFRoaXMgZnVuY3Rp b24gY29tYmluZXMKKyAqIG5lc3RlZCBldmVudHMgaW50byBhIGRvdWJsZSBvciB0cmlwbGUgZmF1 bHQuCisgKgorICogUmV0dXJucyAwIGlmIHRoZXJlIGFyZSBubyBldmVudHMgdGhhdCBuZWVkIHRv IGJlIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgor ICovCitpbnQgdm1fZW50cnlfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50 NjRfdCAqaW5mbyk7CisKK2ludCB2bV9nZXRfaW50aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw dWlkLCB1aW50NjRfdCAqaW5mbzEsIHVpbnQ2NF90ICppbmZvMik7CisKK2VudW0gdm1fcmVnX25h bWUgdm1fc2VnbWVudF9uYW1lKGludCBzZWdfZW5jb2RpbmcpOworCitzdHJ1Y3Qgdm1fY29weWlu Zm8geworCXVpbnQ2NF90CWdwYTsKKwlzaXplX3QJCWxlbjsKKwl2b2lkCQkqaHZhOworCXZvaWQJ CSpjb29raWU7Cit9OworCisvKgorICogU2V0IHVwICdjb3B5aW5mb1tdJyB0byBjb3B5IHRvL2Zy b20gZ3Vlc3QgbGluZWFyIGFkZHJlc3Mgc3BhY2Ugc3RhcnRpbmcKKyAqIGF0ICdnbGEnIGFuZCAn bGVuJyBieXRlcyBsb25nLiBUaGUgJ3Byb3QnIHNob3VsZCBiZSBzZXQgdG8gUFJPVF9SRUFEIGZv cgorICogYSBjb3B5aW4gb3IgUFJPVF9XUklURSBmb3IgYSBjb3B5b3V0LiAKKyAqCisgKiByZXR2 YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRpb24KKyAqICAgMAkJICAgMAkJU3VjY2VzcworICogICAw CQkgICAxCQlBbiBleGNlcHRpb24gd2FzIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFV TFQJICBOL0EJCVVucmVjb3ZlcmFibGUgZXJyb3IKKyAqCisgKiBUaGUgJ2NvcHlpbmZvW10nIGNh biBiZSBwYXNzZWQgdG8gJ3ZtX2NvcHlpbigpJyBvciAndm1fY29weW91dCgpJyBvbmx5IGlmCisg KiB0aGUgcmV0dXJuIHZhbHVlIGlzIDAuIFRoZSAnY29weWluZm9bXScgcmVzb3VyY2VzIHNob3Vs ZCBiZSBmcmVlZCBieSBjYWxsaW5nCisgKiAndm1fY29weV90ZWFyZG93bigpJyBhZnRlciB0aGUg Y29weSBpcyBkb25lLgorICovCitpbnQgdm1fY29weV9zZXR1cChzdHJ1Y3Qgdm0gKnZtLCBpbnQg dmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xh LCBzaXplX3QgbGVuLCBpbnQgcHJvdCwgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAg ICBpbnQgbnVtX2NvcHlpbmZvLCBpbnQgKmlzX2ZhdWx0KTsKK3ZvaWQgdm1fY29weV90ZWFyZG93 bihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fY29weWluZm8gKmNvcHlpbmZv LAorICAgIGludCBudW1fY29weWluZm8pOwordm9pZCB2bV9jb3B5aW4oc3RydWN0IHZtICp2bSwg aW50IHZjcHVpZCwgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywKKyAgICB2b2lkICprYWRk ciwgc2l6ZV90IGxlbik7Cit2b2lkIHZtX2NvcHlvdXQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp ZCwgY29uc3Qgdm9pZCAqa2FkZHIsCisgICAgc3RydWN0IHZtX2NvcHlpbmZvICpjb3B5aW5mbywg c2l6ZV90IGxlbik7CisKK2ludCB2Y3B1X3RyYWNlX2V4Y2VwdGlvbnMoc3RydWN0IHZtICp2bSwg aW50IHZjcHVpZCk7CisjZW5kaWYJLyogS0VSTkVMICovCisKKyNkZWZpbmUJVk1fTUFYQ1BVCTE2 CQkJLyogbWF4aW11bSB2aXJ0dWFsIGNwdXMgKi8KKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBv cHRpb25hbCB2bW0gY2FwYWJpbGl0aWVzCisgKi8KK2VudW0gdm1fY2FwX3R5cGUgeworCVZNX0NB UF9IQUxUX0VYSVQsCisJVk1fQ0FQX01UUkFQX0VYSVQsCisJVk1fQ0FQX1BBVVNFX0VYSVQsCisJ Vk1fQ0FQX1VOUkVTVFJJQ1RFRF9HVUVTVCwKKwlWTV9DQVBfRU5BQkxFX0lOVlBDSUQsCisJVk1f Q0FQX01BWAorfTsKKworZW51bSB2bV9pbnRyX3RyaWdnZXIgeworCUVER0VfVFJJR0dFUiwKKwlM RVZFTF9UUklHR0VSCit9OworCisvKiBPcGVyYXRpb25zIHN1cHBvcnRlZCBvbiBWTV9JT19SRUdf SEFORExFUiBpb2N0bC4gKi8KK2VudW0gdm1faW9fcmVnaF90eXBlIHsKKwlWTV9JT19SRUdIX0RF TEVURSwKKwlWTV9JT19SRUdIX0tXRVZFTlRTLAkvKiBrZXJuZWwgd2FpdCBldmVudHMgKi8KKwlW TV9JT19SRUdIX01BWAorfTsKKworLyoKKyAqIFRoZSAnYWNjZXNzJyBmaWVsZCBoYXMgdGhlIGZv cm1hdCBzcGVjaWZpZWQgaW4gVGFibGUgMjEtMiBvZiB0aGUgSW50ZWwKKyAqIEFyY2hpdGVjdHVy ZSBNYW51YWwgdm9sIDNiLgorICoKKyAqIFhYWCBUaGUgY29udGVudHMgb2YgdGhlICdhY2Nlc3Mn IGZpZWxkIGFyZSBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCBleGNlcHQKKyAqIGJpdCAxNiAtIFNl Z21lbnQgVW51c2FibGUuCisgKi8KK3N0cnVjdCBzZWdfZGVzYyB7CisJdWludDY0X3QJYmFzZTsK Kwl1aW50MzJfdAlsaW1pdDsKKwl1aW50MzJfdAlhY2Nlc3M7Cit9OworI2RlZmluZQlTRUdfREVT Q19UWVBFKGFjY2VzcykJCSgoYWNjZXNzKSAmIDB4MDAxZikKKyNkZWZpbmUJU0VHX0RFU0NfRFBM KGFjY2VzcykJCSgoKGFjY2VzcykgPj4gNSkgJiAweDMpCisjZGVmaW5lCVNFR19ERVNDX1BSRVNF TlQoYWNjZXNzKQkoKChhY2Nlc3MpICYgMHgwMDgwKSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVT Q19ERUYzMihhY2Nlc3MpCQkoKChhY2Nlc3MpICYgMHg0MDAwKSA/IDEgOiAwKQorI2RlZmluZQlT RUdfREVTQ19HUkFOVUxBUklUWShhY2Nlc3MpCSgoKGFjY2VzcykgJiAweDgwMDApID8gMSA6IDAp CisjZGVmaW5lCVNFR19ERVNDX1VOVVNBQkxFKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MTAwMDAp ID8gMSA6IDApCisKK2VudW0gdm1fY3B1X21vZGUgeworCUNQVV9NT0RFX1JFQUwsCisJQ1BVX01P REVfUFJPVEVDVEVELAorCUNQVV9NT0RFX0NPTVBBVElCSUxJVFksCQkvKiBJQS0zMkUgbW9kZSAo Q1MuTCA9IDApICovCisJQ1BVX01PREVfNjRCSVQsCQkJLyogSUEtMzJFIG1vZGUgKENTLkwgPSAx KSAqLworfTsKKworZW51bSB2bV9wYWdpbmdfbW9kZSB7CisJUEFHSU5HX01PREVfRkxBVCwKKwlQ QUdJTkdfTU9ERV8zMiwKKwlQQUdJTkdfTU9ERV9QQUUsCisJUEFHSU5HX01PREVfNjQsCit9Owor CitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nIHsKKwl1aW50NjRfdAljcjM7CisJaW50CQljcGw7CisJ ZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9kZTsKKwllbnVtIHZtX3BhZ2luZ19tb2RlIHBhZ2luZ19t b2RlOworfTsKKworLyoKKyAqIFRoZSBkYXRhIHN0cnVjdHVyZXMgJ3ZpZScgYW5kICd2aWVfb3An IGFyZSBtZWFudCB0byBiZSBvcGFxdWUgdG8gdGhlCisgKiBjb25zdW1lcnMgb2YgaW5zdHJ1Y3Rp b24gZGVjb2RpbmcuIFRoZSBvbmx5IHJlYXNvbiB3aHkgdGhlaXIgY29udGVudHMKKyAqIG5lZWQg dG8gYmUgZXhwb3NlZCBpcyBiZWNhdXNlIHRoZXkgYXJlIHBhcnQgb2YgdGhlICd2bV9leGl0JyBz dHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB2aWVfb3AgeworCXVpbnQ4X3QJCW9wX2J5dGU7CS8qIGFj dHVhbCBvcGNvZGUgYnl0ZSAqLworCXVpbnQ4X3QJCW9wX3R5cGU7CS8qIHR5cGUgb2Ygb3BlcmF0 aW9uIChlLmcuIE1PVikgKi8KKwl1aW50MTZfdAlvcF9mbGFnczsKK307CisKKyNkZWZpbmUJVklF X0lOU1RfU0laRQkxNQorc3RydWN0IHZpZSB7CisJdWludDhfdAkJaW5zdFtWSUVfSU5TVF9TSVpF XTsJLyogaW5zdHJ1Y3Rpb24gYnl0ZXMgKi8KKwl1aW50OF90CQludW1fdmFsaWQ7CQkvKiBzaXpl IG9mIHRoZSBpbnN0cnVjdGlvbiAqLworCXVpbnQ4X3QJCW51bV9wcm9jZXNzZWQ7CisKKwl1aW50 OF90CQlhZGRyc2l6ZTo0LCBvcHNpemU6NDsJLyogYWRkcmVzcyBhbmQgb3BlcmFuZCBzaXplcyAq LworCXVpbnQ4X3QJCXJleF93OjEsCQkvKiBSRVggcHJlZml4ICovCisJCQlyZXhfcjoxLAorCQkJ cmV4X3g6MSwKKwkJCXJleF9iOjEsCisJCQlyZXhfcHJlc2VudDoxLAorCQkJcmVwel9wcmVzZW50 OjEsCQkvKiBSRVAvUkVQRS9SRVBaIHByZWZpeCAqLworCQkJcmVwbnpfcHJlc2VudDoxLAkvKiBS RVBORS9SRVBOWiBwcmVmaXggKi8KKwkJCW9wc2l6ZV9vdmVycmlkZToxLAkvKiBPcGVyYW5kIHNp emUgb3ZlcnJpZGUgKi8KKwkJCWFkZHJzaXplX292ZXJyaWRlOjEsCS8qIEFkZHJlc3Mgc2l6ZSBv dmVycmlkZSAqLworCQkJc2VnbWVudF9vdmVycmlkZToxOwkvKiBTZWdtZW50IG92ZXJyaWRlICov CisKKwl1aW50OF90CQltb2Q6MiwJCQkvKiBNb2RSTSBieXRlICovCisJCQlyZWc6NCwKKwkJCXJt OjQ7CisKKwl1aW50OF90CQlzczoyLAkJCS8qIFNJQiBieXRlICovCisJCQlpbmRleDo0LAorCQkJ YmFzZTo0OworCisJdWludDhfdAkJZGlzcF9ieXRlczsKKwl1aW50OF90CQlpbW1fYnl0ZXM7CisK Kwl1aW50OF90CQlzY2FsZTsKKwlpbnQJCWJhc2VfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1Rf eHl6ICovCisJaW50CQlpbmRleF9yZWdpc3RlcjsJCS8qIFZNX1JFR19HVUVTVF94eXogKi8KKwlp bnQJCXNlZ21lbnRfcmVnaXN0ZXI7CS8qIFZNX1JFR19HVUVTVF94eXogKi8KKworCWludDY0X3QJ CWRpc3BsYWNlbWVudDsJCS8qIG9wdGlvbmFsIGFkZHIgZGlzcGxhY2VtZW50ICovCisJaW50NjRf dAkJaW1tZWRpYXRlOwkJLyogb3B0aW9uYWwgaW1tZWRpYXRlIG9wZXJhbmQgKi8KKworCXVpbnQ4 X3QJCWRlY29kZWQ7CS8qIHNldCB0byAxIGlmIHN1Y2Nlc3NmdWxseSBkZWNvZGVkICovCisKKwlz dHJ1Y3QgdmllX29wCW9wOwkJCS8qIG9wY29kZSBkZXNjcmlwdGlvbiAqLworfTsKKworZW51bSB2 bV9leGl0Y29kZSB7CisJVk1fRVhJVENPREVfSU5PVVQsCisJVk1fRVhJVENPREVfVk1YLAorCVZN X0VYSVRDT0RFX0JPR1VTLAorCVZNX0VYSVRDT0RFX1JETVNSLAorCVZNX0VYSVRDT0RFX1dSTVNS LAorCVZNX0VYSVRDT0RFX0hMVCwKKwlWTV9FWElUQ09ERV9NVFJBUCwKKwlWTV9FWElUQ09ERV9Q QVVTRSwKKwlWTV9FWElUQ09ERV9QQUdJTkcsCisJVk1fRVhJVENPREVfSU5TVF9FTVVMLAorCVZN X0VYSVRDT0RFX1NQSU5VUF9BUCwKKwlWTV9FWElUQ09ERV9ERVBSRUNBVEVEMSwJLyogdXNlZCB0 byBiZSBTUElORE9XTl9DUFUgKi8KKwlWTV9FWElUQ09ERV9SRU5ERVpWT1VTLAorCVZNX0VYSVRD T0RFX0lPQVBJQ19FT0ksCisJVk1fRVhJVENPREVfU1VTUEVOREVELAorCVZNX0VYSVRDT0RFX0lO T1VUX1NUUiwKKwlWTV9FWElUQ09ERV9UQVNLX1NXSVRDSCwKKwlWTV9FWElUQ09ERV9NT05JVE9S LAorCVZNX0VYSVRDT0RFX01XQUlULAorCVZNX0VYSVRDT0RFX1NWTSwKKwlWTV9FWElUQ09ERV9S RVFJRExFLAorCVZNX0VYSVRDT0RFX01BWAorfTsKKworc3RydWN0IHZtX2lub3V0IHsKKwl1aW50 MTZfdAlieXRlczozOwkvKiAxIG9yIDIgb3IgNCAqLworCXVpbnQxNl90CWluOjE7CisJdWludDE2 X3QJc3RyaW5nOjE7CisJdWludDE2X3QJcmVwOjE7CisJdWludDE2X3QJcG9ydDsKKwl1aW50MzJf dAllYXg7CQkvKiB2YWxpZCBmb3Igb3V0ICovCit9OworCitzdHJ1Y3Qgdm1faW5vdXRfc3RyIHsK KwlzdHJ1Y3Qgdm1faW5vdXQJaW5vdXQ7CQkvKiBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50ICov CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7CisJdWludDY0X3QJcmZsYWdzOworCXVp bnQ2NF90CWNyMDsKKwl1aW50NjRfdAlpbmRleDsKKwl1aW50NjRfdAljb3VudDsJCS8qIHJlcD0x ICglcmN4KSwgcmVwPTAgKDEpICovCisJaW50CQlhZGRyc2l6ZTsKKwllbnVtIHZtX3JlZ19uYW1l IHNlZ19uYW1lOworCXN0cnVjdCBzZWdfZGVzYyBzZWdfZGVzYzsKK307CisKK2VudW0gdGFza19z d2l0Y2hfcmVhc29uIHsKKwlUU1JfQ0FMTCwKKwlUU1JfSVJFVCwKKwlUU1JfSk1QLAorCVRTUl9J RFRfR0FURSwJLyogdGFzayBnYXRlIGluIElEVCAqLworfTsKKworc3RydWN0IHZtX3Rhc2tfc3dp dGNoIHsKKwl1aW50MTZfdAl0c3NzZWw7CQkvKiBuZXcgVFNTIHNlbGVjdG9yICovCisJaW50CQll eHQ7CQkvKiB0YXNrIHN3aXRjaCBkdWUgdG8gZXh0ZXJuYWwgZXZlbnQgKi8KKwl1aW50MzJfdAll cnJjb2RlOworCWludAkJZXJyY29kZV92YWxpZDsJLyogcHVzaCAnZXJyY29kZScgb24gdGhlIG5l dyBzdGFjayAqLworCWVudW0gdGFza19zd2l0Y2hfcmVhc29uIHJlYXNvbjsKKwlzdHJ1Y3Qgdm1f Z3Vlc3RfcGFnaW5nIHBhZ2luZzsKK307CisKK3N0cnVjdCB2bV9leGl0IHsKKwllbnVtIHZtX2V4 aXRjb2RlCWV4aXRjb2RlOworCWludAkJCWluc3RfbGVuZ3RoOwkvKiAwIG1lYW5zIHVua25vd24g Ki8KKwl1aW50NjRfdAkJcmlwOworCXVuaW9uIHsKKwkJc3RydWN0IHZtX2lub3V0CWlub3V0Owor CQlzdHJ1Y3Qgdm1faW5vdXRfc3RyIGlub3V0X3N0cjsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90 CWdwYTsKKwkJCWludAkJZmF1bHRfdHlwZTsKKwkJfSBwYWdpbmc7CisJCXN0cnVjdCB7CisJCQl1 aW50NjRfdAlncGE7CisJCQl1aW50NjRfdAlnbGE7CisJCQl1aW50NjRfdAljc19iYXNlOworCQkJ aW50CQljc19kOwkJLyogQ1MuRCAqLworCQkJc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7 CisJCQlzdHJ1Y3QgdmllCXZpZTsKKwkJfSBpbnN0X2VtdWw7CisJCS8qCisJCSAqIFZNWCBzcGVj aWZpYyBwYXlsb2FkLiBVc2VkIHdoZW4gdGhlcmUgaXMgbm8gImJldHRlciIKKwkJICogZXhpdGNv ZGUgdG8gcmVwcmVzZW50IHRoZSBWTS1leGl0LgorCQkgKi8KKwkJc3RydWN0IHsKKwkJCWludAkJ c3RhdHVzOwkJLyogdm14IGluc3Qgc3RhdHVzICovCisJCQkvKgorCQkJICogJ2V4aXRfcmVhc29u JyBhbmQgJ2V4aXRfcXVhbGlmaWNhdGlvbicgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0 dXMnIGlzIHplcm8uCisJCQkgKi8KKwkJCXVpbnQzMl90CWV4aXRfcmVhc29uOworCQkJdWludDY0 X3QJZXhpdF9xdWFsaWZpY2F0aW9uOworCQkJLyoKKwkJCSAqICdpbnN0X2Vycm9yJyBhbmQgJ2lu c3RfdHlwZScgYXJlIHZhbGlkCisJCQkgKiBvbmx5IGlmICdzdGF0dXMnIGlzIG5vbi16ZXJvLgor CQkJICovCisJCQlpbnQJCWluc3RfdHlwZTsKKwkJCWludAkJaW5zdF9lcnJvcjsKKwkJfSB2bXg7 CisJCS8qCisJCSAqIFNWTSBzcGVjaWZpYyBwYXlsb2FkLgorCQkgKi8KKwkJc3RydWN0IHsKKwkJ CXVpbnQ2NF90CWV4aXRjb2RlOworCQkJdWludDY0X3QJZXhpdGluZm8xOworCQkJdWludDY0X3QJ ZXhpdGluZm8yOworCQl9IHN2bTsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90CWNvZGU7CQkvKiBl Y3ggdmFsdWUgKi8KKwkJCXVpbnQ2NF90CXd2YWw7CisJCX0gbXNyOworCQlzdHJ1Y3QgeworCQkJ aW50CQl2Y3B1OworCQkJdWludDY0X3QJcmlwOworCQl9IHNwaW51cF9hcDsKKwkJc3RydWN0IHsK KwkJCXVpbnQ2NF90CXJmbGFnczsKKwkJfSBobHQ7CisJCXN0cnVjdCB7CisJCQlpbnQJCXZlY3Rv cjsKKwkJfSBpb2FwaWNfZW9pOworCQlzdHJ1Y3QgeworCQkJZW51bSB2bV9zdXNwZW5kX2hvdyBo b3c7CisJCX0gc3VzcGVuZGVkOworCQlzdHJ1Y3Qgdm1fdGFza19zd2l0Y2ggdGFza19zd2l0Y2g7 CisJfSB1OworfTsKKworLyogQVBJcyB0byBpbmplY3QgZmF1bHRzIGludG8gdGhlIGd1ZXN0ICov Cit2b2lkIHZtX2luamVjdF9mYXVsdCh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IHZlY3Rvciwg aW50IGVycmNvZGVfdmFsaWQsCisgICAgaW50IGVycmNvZGUpOworCitzdGF0aWMgX19pbmxpbmUg dm9pZAordm1faW5qZWN0X3VkKHZvaWQgKnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9m YXVsdCh2bSwgdmNwdWlkLCBJRFRfVUQsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9p ZAordm1faW5qZWN0X2dwKHZvaWQgKnZtLCBpbnQgdmNwdWlkKQoreworCXZtX2luamVjdF9mYXVs dCh2bSwgdmNwdWlkLCBJRFRfR1AsIDEsIDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAor dm1faW5qZWN0X2FjKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJyY29kZSkKK3sKKwl2bV9p bmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX0FDLCAxLCBlcnJjb2RlKTsKK30KKworc3RhdGlj IF9faW5saW5lIHZvaWQKK3ZtX2luamVjdF9zcyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVy cmNvZGUpCit7CisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1aWQsIElEVF9TUywgMSwgZXJyY29k ZSk7Cit9CisKK3ZvaWQgdm1faW5qZWN0X3BmKHZvaWQgKnZtLCBpbnQgdmNwdWlkLCBpbnQgZXJy b3JfY29kZSwgdWludDY0X3QgY3IyKTsKKworaW50IHZtX3Jlc3RhcnRfaW5zdHJ1Y3Rpb24odm9p ZCAqdm0sIGludCB2Y3B1aWQpOworCisjZW5kaWYJLyogX1ZNTV9IXyAqLwpkaWZmIC11IC1yIC1O IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tLmgub3JpZyAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW0uaC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9tb2R1 bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oLm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw MDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbS5oLm9y aWcJMjAxNi0xMS0zMCAxMDo1Mjo1My44MjI5NTkwMDAgKzAwMDAKQEAgLTAsMCArMSw2NzUgQEAK Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5F VEFQUCwgSU5DIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQLCBJTkMg T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAk RnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvdm1tLmggMjk5MDEwIDIwMTYt MDUtMDMgMjI6MTM6MDRaIHBmZyAkCisgKi8KKworI2lmbmRlZiBfVk1NX0hfCisjZGVmaW5lCV9W TU1fSF8KKworI2luY2x1ZGUgPHg4Ni9zZWdtZW50cy5oPgorCitlbnVtIHZtX3N1c3BlbmRfaG93 IHsKKwlWTV9TVVNQRU5EX05PTkUsCisJVk1fU1VTUEVORF9SRVNFVCwKKwlWTV9TVVNQRU5EX1BP V0VST0ZGLAorCVZNX1NVU1BFTkRfSEFMVCwKKwlWTV9TVVNQRU5EX1RSSVBMRUZBVUxULAorCVZN X1NVU1BFTkRfTEFTVAorfTsKKworLyoKKyAqIElkZW50aWZpZXJzIGZvciBhcmNoaXRlY3R1cmFs bHkgZGVmaW5lZCByZWdpc3RlcnMuCisgKi8KK2VudW0gdm1fcmVnX25hbWUgeworCVZNX1JFR19H VUVTVF9SQVgsCisJVk1fUkVHX0dVRVNUX1JCWCwKKwlWTV9SRUdfR1VFU1RfUkNYLAorCVZNX1JF R19HVUVTVF9SRFgsCisJVk1fUkVHX0dVRVNUX1JTSSwKKwlWTV9SRUdfR1VFU1RfUkRJLAorCVZN X1JFR19HVUVTVF9SQlAsCisJVk1fUkVHX0dVRVNUX1I4LAorCVZNX1JFR19HVUVTVF9SOSwKKwlW TV9SRUdfR1VFU1RfUjEwLAorCVZNX1JFR19HVUVTVF9SMTEsCisJVk1fUkVHX0dVRVNUX1IxMiwK KwlWTV9SRUdfR1VFU1RfUjEzLAorCVZNX1JFR19HVUVTVF9SMTQsCisJVk1fUkVHX0dVRVNUX1Ix NSwKKwlWTV9SRUdfR1VFU1RfQ1IwLAorCVZNX1JFR19HVUVTVF9DUjMsCisJVk1fUkVHX0dVRVNU X0NSNCwKKwlWTV9SRUdfR1VFU1RfRFI3LAorCVZNX1JFR19HVUVTVF9SU1AsCisJVk1fUkVHX0dV RVNUX1JJUCwKKwlWTV9SRUdfR1VFU1RfUkZMQUdTLAorCVZNX1JFR19HVUVTVF9FUywKKwlWTV9S RUdfR1VFU1RfQ1MsCisJVk1fUkVHX0dVRVNUX1NTLAorCVZNX1JFR19HVUVTVF9EUywKKwlWTV9S RUdfR1VFU1RfRlMsCisJVk1fUkVHX0dVRVNUX0dTLAorCVZNX1JFR19HVUVTVF9MRFRSLAorCVZN X1JFR19HVUVTVF9UUiwKKwlWTV9SRUdfR1VFU1RfSURUUiwKKwlWTV9SRUdfR1VFU1RfR0RUUiwK KwlWTV9SRUdfR1VFU1RfRUZFUiwKKwlWTV9SRUdfR1VFU1RfQ1IyLAorCVZNX1JFR19HVUVTVF9Q RFBURTAsCisJVk1fUkVHX0dVRVNUX1BEUFRFMSwKKwlWTV9SRUdfR1VFU1RfUERQVEUyLAorCVZN X1JFR19HVUVTVF9QRFBURTMsCisJVk1fUkVHX0dVRVNUX0lOVFJfU0hBRE9XLAorCVZNX1JFR19M QVNUCit9OworCitlbnVtIHgyYXBpY19zdGF0ZSB7CisJWDJBUElDX0RJU0FCTEVELAorCVgyQVBJ Q19FTkFCTEVELAorCVgyQVBJQ19TVEFURV9MQVNUCit9OworCisjZGVmaW5lCVZNX0lOVElORk9f VkVDVE9SKGluZm8pCSgoaW5mbykgJiAweGZmKQorI2RlZmluZQlWTV9JTlRJTkZPX0RFTF9FUlJD T0RFCTB4ODAwCisjZGVmaW5lCVZNX0lOVElORk9fUlNWRAkJMHg3ZmZmZjAwMAorI2RlZmluZQlW TV9JTlRJTkZPX1ZBTElECTB4ODAwMDAwMDAKKyNkZWZpbmUJVk1fSU5USU5GT19UWVBFCQkweDcw MAorI2RlZmluZQlWTV9JTlRJTkZPX0hXSU5UUgkoMCA8PCA4KQorI2RlZmluZQlWTV9JTlRJTkZP X05NSQkJKDIgPDwgOCkKKyNkZWZpbmUJVk1fSU5USU5GT19IV0VYQ0VQVElPTgkoMyA8PCA4KQor I2RlZmluZQlWTV9JTlRJTkZPX1NXSU5UUgkoNCA8PCA4KQorCisjaWZkZWYgX0tFUk5FTAorCisj ZGVmaW5lCVZNX01BWF9OQU1FTEVOCTMyCisKK3N0cnVjdCB2bTsKK3N0cnVjdCB2bV9leGNlcHRp b247CitzdHJ1Y3Qgc2VnX2Rlc2M7CitzdHJ1Y3Qgdm1fZXhpdDsKK3N0cnVjdCB2bV9ydW47Citz dHJ1Y3QgdmhwZXQ7CitzdHJ1Y3QgdmlvYXBpYzsKK3N0cnVjdCB2bGFwaWM7CitzdHJ1Y3Qgdm1z cGFjZTsKK3N0cnVjdCB2bV9vYmplY3Q7CitzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5nOworc3RydWN0 IHBtYXA7CisKK3N0cnVjdCB2bV9ldmVudGluZm8geworCXZvaWQJKnJwdHI7CQkvKiByZW5kZXp2 b3VzIGNvb2tpZSAqLworCWludAkqc3B0cjsJCS8qIHN1c3BlbmQgY29va2llICovCisJaW50CSpp cHRyOwkJLyogcmVxaWRsZSBjb29raWUgKi8KK307CisKK3R5cGVkZWYgaW50CSgqdm1tX2luaXRf ZnVuY190KShpbnQgaXBpbnVtKTsKK3R5cGVkZWYgaW50CSgqdm1tX2NsZWFudXBfZnVuY190KSh2 b2lkKTsKK3R5cGVkZWYgdm9pZAkoKnZtbV9yZXN1bWVfZnVuY190KSh2b2lkKTsKK3R5cGVkZWYg dm9pZCAqCSgqdm1pX2luaXRfZnVuY190KShzdHJ1Y3Qgdm0gKnZtLCBzdHJ1Y3QgcG1hcCAqcG1h cCk7Cit0eXBlZGVmIGludAkoKnZtaV9ydW5fZnVuY190KSh2b2lkICp2bWksIGludCB2Y3B1LCBy ZWdpc3Rlcl90IHJpcCwKKwkJICAgIHN0cnVjdCBwbWFwICpwbWFwLCBzdHJ1Y3Qgdm1fZXZlbnRp bmZvICppbmZvKTsKK3R5cGVkZWYgdm9pZAkoKnZtaV9jbGVhbnVwX2Z1bmNfdCkodm9pZCAqdm1p KTsKK3R5cGVkZWYgaW50CSgqdm1pX2dldF9yZWdpc3Rlcl90KSh2b2lkICp2bWksIGludCB2Y3B1 LCBpbnQgbnVtLAorCQkJCSAgICAgIHVpbnQ2NF90ICpyZXR2YWwpOwordHlwZWRlZiBpbnQJKCp2 bWlfc2V0X3JlZ2lzdGVyX3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICAg ICAgdWludDY0X3QgdmFsKTsKK3R5cGVkZWYgaW50CSgqdm1pX2dldF9kZXNjX3QpKHZvaWQgKnZt aSwgaW50IHZjcHUsIGludCBudW0sCisJCQkJICBzdHJ1Y3Qgc2VnX2Rlc2MgKmRlc2MpOwordHlw ZWRlZiBpbnQJKCp2bWlfc2V0X2Rlc2NfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwK KwkJCQkgIHN0cnVjdCBzZWdfZGVzYyAqZGVzYyk7Cit0eXBlZGVmIGludAkoKnZtaV9nZXRfY2Fw X3QpKHZvaWQgKnZtaSwgaW50IHZjcHUsIGludCBudW0sIGludCAqcmV0dmFsKTsKK3R5cGVkZWYg aW50CSgqdm1pX3NldF9jYXBfdCkodm9pZCAqdm1pLCBpbnQgdmNwdSwgaW50IG51bSwgaW50IHZh bCk7Cit0eXBlZGVmIHN0cnVjdCB2bXNwYWNlICogKCp2bWlfdm1zcGFjZV9hbGxvYykodm1fb2Zm c2V0X3QgbWluLCB2bV9vZmZzZXRfdCBtYXgpOwordHlwZWRlZiB2b2lkCSgqdm1pX3Ztc3BhY2Vf ZnJlZSkoc3RydWN0IHZtc3BhY2UgKnZtc3BhY2UpOwordHlwZWRlZiBzdHJ1Y3QgdmxhcGljICog KCp2bWlfdmxhcGljX2luaXQpKHZvaWQgKnZtaSwgaW50IHZjcHUpOwordHlwZWRlZiB2b2lkCSgq dm1pX3ZsYXBpY19jbGVhbnVwKSh2b2lkICp2bWksIHN0cnVjdCB2bGFwaWMgKnZsYXBpYyk7CisK K3N0cnVjdCB2bW1fb3BzIHsKKwl2bW1faW5pdF9mdW5jX3QJCWluaXQ7CQkvKiBtb2R1bGUgd2lk ZSBpbml0aWFsaXphdGlvbiAqLworCXZtbV9jbGVhbnVwX2Z1bmNfdAljbGVhbnVwOworCXZtbV9y ZXN1bWVfZnVuY190CXJlc3VtZTsKKworCXZtaV9pbml0X2Z1bmNfdAkJdm1pbml0OwkJLyogdm0t c3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KKwl2bWlfcnVuX2Z1bmNfdAkJdm1ydW47CisJdm1p X2NsZWFudXBfZnVuY190CXZtY2xlYW51cDsKKwl2bWlfZ2V0X3JlZ2lzdGVyX3QJdm1nZXRyZWc7 CisJdm1pX3NldF9yZWdpc3Rlcl90CXZtc2V0cmVnOworCXZtaV9nZXRfZGVzY190CQl2bWdldGRl c2M7CisJdm1pX3NldF9kZXNjX3QJCXZtc2V0ZGVzYzsKKwl2bWlfZ2V0X2NhcF90CQl2bWdldGNh cDsKKwl2bWlfc2V0X2NhcF90CQl2bXNldGNhcDsKKwl2bWlfdm1zcGFjZV9hbGxvYwl2bXNwYWNl X2FsbG9jOworCXZtaV92bXNwYWNlX2ZyZWUJdm1zcGFjZV9mcmVlOworCXZtaV92bGFwaWNfaW5p dAkJdmxhcGljX2luaXQ7CisJdm1pX3ZsYXBpY19jbGVhbnVwCXZsYXBpY19jbGVhbnVwOworfTsK KworZXh0ZXJuIHN0cnVjdCB2bW1fb3BzIHZtbV9vcHNfaW50ZWw7CitleHRlcm4gc3RydWN0IHZt bV9vcHMgdm1tX29wc19hbWQ7CisKK2ludCB2bV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3Ry dWN0IHZtICoqcmV0dm0pOwordm9pZCB2bV9kZXN0cm95KHN0cnVjdCB2bSAqdm0pOworaW50IHZt X3JlaW5pdChzdHJ1Y3Qgdm0gKnZtKTsKK2NvbnN0IGNoYXIgKnZtX25hbWUoc3RydWN0IHZtICp2 bSk7CisKKy8qCisgKiBBUElzIHRoYXQgbW9kaWZ5IHRoZSBndWVzdCBtZW1vcnkgbWFwIHJlcXVp cmUgYWxsIHZjcHVzIHRvIGJlIGZyb3plbi4KKyAqLworaW50IHZtX21tYXBfbWVtc2VnKHN0cnVj dCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBpbnQgc2VnaWQsIHZtX29vZmZzZXRfdCBvZmYsCisg ICAgc2l6ZV90IGxlbiwgaW50IHByb3QsIGludCBmbGFncyk7CitpbnQgdm1fYWxsb2NfbWVtc2Vn KHN0cnVjdCB2bSAqdm0sIGludCBpZGVudCwgc2l6ZV90IGxlbiwgYm9vbCBzeXNtZW0pOwordm9p ZCB2bV9mcmVlX21lbXNlZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgaWRlbnQpOworaW50IHZtX21hcF9t bWlvKHN0cnVjdCB2bSAqdm0sIHZtX3BhZGRyX3QgZ3BhLCBzaXplX3QgbGVuLCB2bV9wYWRkcl90 IGhwYSk7CitpbnQgdm1fdW5tYXBfbW1pbyhzdHJ1Y3Qgdm0gKnZtLCB2bV9wYWRkcl90IGdwYSwg c2l6ZV90IGxlbik7CitpbnQgdm1fYXNzaWduX3BwdGRldihzdHJ1Y3Qgdm0gKnZtLCBpbnQgYnVz LCBpbnQgc2xvdCwgaW50IGZ1bmMpOworaW50IHZtX3VuYXNzaWduX3BwdGRldihzdHJ1Y3Qgdm0g KnZtLCBpbnQgYnVzLCBpbnQgc2xvdCwgaW50IGZ1bmMpOworCisvKgorICogQVBJcyB0aGF0IGlu c3BlY3QgdGhlIGd1ZXN0IG1lbW9yeSBtYXAgcmVxdWlyZSBvbmx5IGEgKnNpbmdsZSogdmNwdSB0 bworICogYmUgZnJvemVuLiBUaGlzIGFjdHMgbGlrZSBhIHJlYWQgbG9jayBvbiB0aGUgZ3Vlc3Qg bWVtb3J5IG1hcCBzaW5jZSBhbnkKKyAqIG1vZGlmaWNhdGlvbiByZXF1aXJlcyAqYWxsKiB2Y3B1 cyB0byBiZSBmcm96ZW4uCisgKi8KK2ludCB2bV9tbWFwX2dldG5leHQoc3RydWN0IHZtICp2bSwg dm1fcGFkZHJfdCAqZ3BhLCBpbnQgKnNlZ2lkLAorICAgIHZtX29vZmZzZXRfdCAqc2Vnb2ZmLCBz aXplX3QgKmxlbiwgaW50ICpwcm90LCBpbnQgKmZsYWdzKTsKK2ludCB2bV9nZXRfbWVtc2VnKHN0 cnVjdCB2bSAqdm0sIGludCBpZGVudCwgc2l6ZV90ICpsZW4sIGJvb2wgKnN5c21lbSwKKyAgICBz dHJ1Y3Qgdm1fb2JqZWN0ICoqb2JqcHRyKTsKK3ZvaWQgKnZtX2dwYV9ob2xkKHN0cnVjdCB2bSAq LCBpbnQgdmNwdWlkLCB2bV9wYWRkcl90IGdwYSwgc2l6ZV90IGxlbiwKKyAgICBpbnQgcHJvdCwg dm9pZCAqKmNvb2tpZSk7Cit2b2lkIHZtX2dwYV9yZWxlYXNlKHZvaWQgKmNvb2tpZSk7Citib29s IHZtX21lbV9hbGxvY2F0ZWQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdm1fcGFkZHJfdCBn cGEpOworCitpbnQgdm1fZ2V0X3JlZ2lzdGVyKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQg cmVnLCB1aW50NjRfdCAqcmV0dmFsKTsKK2ludCB2bV9zZXRfcmVnaXN0ZXIoc3RydWN0IHZtICp2 bSwgaW50IHZjcHUsIGludCByZWcsIHVpbnQ2NF90IHZhbCk7CitpbnQgdm1fZ2V0X3NlZ19kZXNj KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1LCBpbnQgcmVnLAorCQkgICAgc3RydWN0IHNlZ19kZXNj ICpyZXRfZGVzYyk7CitpbnQgdm1fc2V0X3NlZ19kZXNjKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1 LCBpbnQgcmVnLAorCQkgICAgc3RydWN0IHNlZ19kZXNjICpkZXNjKTsKK2ludCB2bV9ydW4oc3Ry dWN0IHZtICp2bSwgc3RydWN0IHZtX3J1biAqdm1ydW4pOworaW50IHZtX3N1c3BlbmQoc3RydWN0 IHZtICp2bSwgZW51bSB2bV9zdXNwZW5kX2hvdyBob3cpOworaW50IHZtX2luamVjdF9ubWkoc3Ry dWN0IHZtICp2bSwgaW50IHZjcHUpOworaW50IHZtX25taV9wZW5kaW5nKHN0cnVjdCB2bSAqdm0s IGludCB2Y3B1aWQpOwordm9pZCB2bV9ubWlfY2xlYXIoc3RydWN0IHZtICp2bSwgaW50IHZjcHVp ZCk7CitpbnQgdm1faW5qZWN0X2V4dGludChzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSk7CitpbnQg dm1fZXh0aW50X3BlbmRpbmcoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCk7Cit2b2lkIHZtX2V4 dGludF9jbGVhcihzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3N0cnVjdCB2bGFwaWMgKnZt X2xhcGljKHN0cnVjdCB2bSAqdm0sIGludCBjcHUpOworc3RydWN0IHZpb2FwaWMgKnZtX2lvYXBp YyhzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2aHBldCAqdm1faHBldChzdHJ1Y3Qgdm0gKnZtKTsK K2ludCB2bV9nZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgaW50IHR5cGUs IGludCAqdmFsKTsKK2ludCB2bV9zZXRfY2FwYWJpbGl0eShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw dSwgaW50IHR5cGUsIGludCB2YWwpOworaW50IHZtX2dldF94MmFwaWNfc3RhdGUoc3RydWN0IHZt ICp2bSwgaW50IHZjcHUsIGVudW0geDJhcGljX3N0YXRlICpzdGF0ZSk7CitpbnQgdm1fc2V0X3gy YXBpY19zdGF0ZShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdSwgZW51bSB4MmFwaWNfc3RhdGUgc3Rh dGUpOworaW50IHZtX2FwaWNpZDJ2Y3B1aWQoc3RydWN0IHZtICp2bSwgaW50IGFwaWNpZCk7Citp bnQgdm1fYWN0aXZhdGVfY3B1KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1KTsKK3N0cnVjdCB2bV9l eGl0ICp2bV9leGl0aW5mbyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkKTsKK3ZvaWQgdm1fZXhp dF9zdXNwZW5kZWQoc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKK3Zv aWQgdm1fZXhpdF9yZW5kZXp2b3VzKHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIHVpbnQ2NF90 IHJpcCk7Cit2b2lkIHZtX2V4aXRfYXN0cGVuZGluZyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlk LCB1aW50NjRfdCByaXApOwordm9pZCB2bV9leGl0X3JlcWlkbGUoc3RydWN0IHZtICp2bSwgaW50 IHZjcHVpZCwgdWludDY0X3QgcmlwKTsKKworI2lmZGVmIF9TWVNfX0NQVVNFVF9IXworLyoKKyAq IFJlbmRlenZvdXMgYWxsIHZjcHVzIHNwZWNpZmllZCBpbiAnZGVzdCcgYW5kIGV4ZWN1dGUgJ2Z1 bmMoYXJnKScuCisgKiBUaGUgcmVuZGV6dm91cyAnZnVuYyhhcmcpJyBpcyBub3QgYWxsb3dlZCB0 byBkbyBhbnl0aGluZyB0aGF0IHdpbGwKKyAqIGNhdXNlIHRoZSB0aHJlYWQgdG8gYmUgcHV0IHRv IHNsZWVwLgorICoKKyAqIElmIHRoZSByZW5kZXp2b3VzIGlzIGJlaW5nIGluaXRpYXRlZCBmcm9t IGEgdmNwdSBjb250ZXh0IHRoZW4gdGhlCisgKiAndmNwdWlkJyBtdXN0IHJlZmVyIHRvIHRoYXQg dmNwdSwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8gLTEuCisgKgorICogVGhlIGNhbGxl ciBjYW5ub3QgaG9sZCBhbnkgbG9ja3Mgd2hlbiBpbml0aWF0aW5nIHRoZSByZW5kZXp2b3VzLgor ICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIEFQSSBtYXkgY2F1c2UgdmNwdXMgb3Ro ZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQKKyAqIGJ5ICdkZXN0JyB0byBiZSBzdGFsbGVkLiBUaGUg Y2FsbGVyIHNob3VsZCBub3QgcmVseSBvbiBhbnkgdmNwdXMgbWFraW5nCisgKiBmb3J3YXJkIHBy b2dyZXNzIHdoZW4gdGhlIHJlbmRlenZvdXMgaXMgaW4gcHJvZ3Jlc3MuCisgKi8KK3R5cGVkZWYg dm9pZCAoKnZtX3JlbmRlenZvdXNfZnVuY190KShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB2 b2lkICphcmcpOwordm9pZCB2bV9zbXBfcmVuZGV6dm91cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw dWlkLCBjcHVzZXRfdCBkZXN0LAorICAgIHZtX3JlbmRlenZvdXNfZnVuY190IGZ1bmMsIHZvaWQg KmFyZyk7CitjcHVzZXRfdCB2bV9hY3RpdmVfY3B1cyhzdHJ1Y3Qgdm0gKnZtKTsKK2NwdXNldF90 IHZtX3N1c3BlbmRlZF9jcHVzKHN0cnVjdCB2bSAqdm0pOworI2VuZGlmCS8qIF9TWVNfX0NQVVNF VF9IXyAqLworCitzdGF0aWMgX19pbmxpbmUgaW50Cit2Y3B1X3JlbmRlenZvdXNfcGVuZGluZyhz dHJ1Y3Qgdm1fZXZlbnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqKCh1aW50cHRyX3QgKiko aW5mby0+cnB0cikpICE9IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50Cit2Y3B1X3N1c3Bl bmRlZChzdHJ1Y3Qgdm1fZXZlbnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqaW5mby0+c3B0 cik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQKK3ZjcHVfcmVxaWRsZShzdHJ1Y3Qgdm1fZXZl bnRpbmZvICppbmZvKQoreworCisJcmV0dXJuICgqaW5mby0+aXB0cik7Cit9CisKKy8qCisgKiBS ZXR1cm4gMSBpZiBkZXZpY2UgaW5kaWNhdGVkIGJ5IGJ1cy9zbG90L2Z1bmMgaXMgc3VwcG9zZWQg dG8gYmUgYQorICogcGNpIHBhc3N0aHJvdWdoIGRldmljZS4KKyAqCisgKiBSZXR1cm4gMCBvdGhl cndpc2UuCisgKi8KK2ludCB2bW1faXNfcHB0ZGV2KGludCBidXMsIGludCBzbG90LCBpbnQgZnVu Yyk7CisKK3ZvaWQgKnZtX2lvbW11X2RvbWFpbihzdHJ1Y3Qgdm0gKnZtKTsKKworZW51bSB2Y3B1 X3N0YXRlIHsKKwlWQ1BVX0lETEUsCisJVkNQVV9GUk9aRU4sCisJVkNQVV9SVU5OSU5HLAorCVZD UFVfU0xFRVBJTkcsCit9OworCitpbnQgdmNwdV9zZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50 IHZjcHUsIGVudW0gdmNwdV9zdGF0ZSBzdGF0ZSwKKyAgICBib29sIGZyb21faWRsZSk7CitlbnVt IHZjcHVfc3RhdGUgdmNwdV9nZXRfc3RhdGUoc3RydWN0IHZtICp2bSwgaW50IHZjcHUsIGludCAq aG9zdGNwdSk7CisKK3N0YXRpYyBpbnQgX19pbmxpbmUKK3ZjcHVfaXNfcnVubmluZyhzdHJ1Y3Qg dm0gKnZtLCBpbnQgdmNwdSwgaW50ICpob3N0Y3B1KQoreworCXJldHVybiAodmNwdV9nZXRfc3Rh dGUodm0sIHZjcHUsIGhvc3RjcHUpID09IFZDUFVfUlVOTklORyk7Cit9CisKKyNpZmRlZiBfU1lT X1BST0NfSF8KK3N0YXRpYyBpbnQgX19pbmxpbmUKK3ZjcHVfc2hvdWxkX3lpZWxkKHN0cnVjdCB2 bSAqdm0sIGludCB2Y3B1KQoreworCisJaWYgKGN1cnRocmVhZC0+dGRfZmxhZ3MgJiAoVERGX0FT VFBFTkRJTkcgfCBUREZfTkVFRFJFU0NIRUQpKQorCQlyZXR1cm4gKDEpOworCWVsc2UgaWYgKGN1 cnRocmVhZC0+dGRfb3dlcHJlZW1wdCkKKwkJcmV0dXJuICgxKTsKKwllbHNlCisJCXJldHVybiAo MCk7Cit9CisjZW5kaWYKKwordm9pZCAqdmNwdV9zdGF0cyhzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNw dSk7Cit2b2lkIHZjcHVfbm90aWZ5X2V2ZW50KHN0cnVjdCB2bSAqdm0sIGludCB2Y3B1aWQsIGJv b2wgbGFwaWNfaW50cik7CitzdHJ1Y3Qgdm1zcGFjZSAqdm1fZ2V0X3Ztc3BhY2Uoc3RydWN0IHZt ICp2bSk7CitzdHJ1Y3QgdmF0cGljICp2bV9hdHBpYyhzdHJ1Y3Qgdm0gKnZtKTsKK3N0cnVjdCB2 YXRwaXQgKnZtX2F0cGl0KHN0cnVjdCB2bSAqdm0pOworc3RydWN0IHZwbXRtciAqdm1fcG10bXIo c3RydWN0IHZtICp2bSk7CitzdHJ1Y3QgdnJ0YyAqdm1fcnRjKHN0cnVjdCB2bSAqdm0pOworCisv KgorICogSW5qZWN0IGV4Y2VwdGlvbiAndmVjdG9yJyBpbnRvIHRoZSBndWVzdCB2Y3B1LiBUaGlz IGZ1bmN0aW9uIHJldHVybnMgMCBvbgorICogc3VjY2VzcyBhbmQgbm9uLXplcm8gb24gZmFpbHVy ZS4KKyAqCisgKiBXcmFwcGVyIGZ1bmN0aW9ucyBsaWtlICd2bV9pbmplY3RfZ3AoKScgc2hvdWxk IGJlIHByZWZlcnJlZCB0byBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGJlY2F1 c2UgdGhleSBlbmZvcmNlIHRoZSB0cmFwLWxpa2Ugb3IgZmF1bHQtbGlrZQorICogYmVoYXZpb3Ig b2YgYW4gZXhjZXB0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2Fs bGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSB0aHJlYWQgdGhhdCBpcworICogZXhlY3V0aW5nIHRo aXMgdmNwdS4KKyAqLworaW50IHZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IHZtICp2bSwgaW50 IHZjcHVpZCwgaW50IHZlY3RvciwgaW50IGVycl92YWxpZCwKKyAgICB1aW50MzJfdCBlcnJjb2Rl LCBpbnQgcmVzdGFydF9pbnN0cnVjdGlvbik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNh bGxlZCBhZnRlciBhIFZNLWV4aXQgdGhhdCBvY2N1cnJlZCBkdXJpbmcgZXhjZXB0aW9uIG9yCisg KiBpbnRlcnJ1cHQgZGVsaXZlcnkgdGhyb3VnaCB0aGUgSURULiBUaGUgZm9ybWF0IG9mICdpbnRp bmZvJyBpcyBkZXNjcmliZWQKKyAqIGluIEZpZ3VyZSAxNS0xLCAiRVhJVElOVElORk8gZm9yIEFs bCBJbnRlcmNlcHRzIiwgQVBNLCBWb2wgMi4KKyAqCisgKiBJZiBhIFZNLWV4aXQgaGFuZGxlciBj b21wbGV0ZXMgdGhlIGV2ZW50IGRlbGl2ZXJ5IHN1Y2Nlc3NmdWxseSB0aGVuIGl0CisgKiBzaG91 bGQgY2FsbCB2bV9leGl0X2ludGluZm8oKSB0byBleHRpbmd1aXNoIHRoZSBwZW5kaW5nIGV2ZW50 LiBGb3IgZS5nLiwKKyAqIGlmIHRoZSB0YXNrIHN3aXRjaCBlbXVsYXRpb24gaXMgdHJpZ2dlcmVk IHZpYSBhIHRhc2sgZ2F0ZSB0aGVuIGl0IHNob3VsZAorICogY2FsbCB0aGlzIGZ1bmN0aW9uIHdp dGggJ2ludGluZm89MCcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZXh0ZXJuYWwgZXZlbnQKKyAqIGlz IG5vdCBwZW5kaW5nIGFueW1vcmUuCisgKgorICogUmV0dXJuIHZhbHVlIGlzIDAgb24gc3VjY2Vz cyBhbmQgbm9uLXplcm8gb24gZmFpbHVyZS4KKyAqLworaW50IHZtX2V4aXRfaW50aW5mbyhzdHJ1 Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCB1aW50NjRfdCBpbnRpbmZvKTsKKworLyoKKyAqIFRoaXMg ZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBldmVyeSBWTS1lbnRyeSB0byByZXRyaWV2ZSBhIHBl bmRpbmcKKyAqIGV2ZW50IHRoYXQgc2hvdWxkIGJlIGluamVjdGVkIGludG8gdGhlIGd1ZXN0LiBU aGlzIGZ1bmN0aW9uIGNvbWJpbmVzCisgKiBuZXN0ZWQgZXZlbnRzIGludG8gYSBkb3VibGUgb3Ig dHJpcGxlIGZhdWx0LgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVyZSBhcmUgbm8gZXZlbnRzIHRo YXQgbmVlZCB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBndWVzdAorICogYW5kIG5vbi16ZXJvIG90 aGVyd2lzZS4KKyAqLworaW50IHZtX2VudHJ5X2ludGluZm8oc3RydWN0IHZtICp2bSwgaW50IHZj cHVpZCwgdWludDY0X3QgKmluZm8pOworCitpbnQgdm1fZ2V0X2ludGluZm8oc3RydWN0IHZtICp2 bSwgaW50IHZjcHVpZCwgdWludDY0X3QgKmluZm8xLCB1aW50NjRfdCAqaW5mbzIpOworCitlbnVt IHZtX3JlZ19uYW1lIHZtX3NlZ21lbnRfbmFtZShpbnQgc2VnX2VuY29kaW5nKTsKKworc3RydWN0 IHZtX2NvcHlpbmZvIHsKKwl1aW50NjRfdAlncGE7CisJc2l6ZV90CQlsZW47CisJdm9pZAkJKmh2 YTsKKwl2b2lkCQkqY29va2llOworfTsKKworLyoKKyAqIFNldCB1cCAnY29weWluZm9bXScgdG8g Y29weSB0by9mcm9tIGd1ZXN0IGxpbmVhciBhZGRyZXNzIHNwYWNlIHN0YXJ0aW5nCisgKiBhdCAn Z2xhJyBhbmQgJ2xlbicgYnl0ZXMgbG9uZy4gVGhlICdwcm90JyBzaG91bGQgYmUgc2V0IHRvIFBS T1RfUkVBRCBmb3IKKyAqIGEgY29weWluIG9yIFBST1RfV1JJVEUgZm9yIGEgY29weW91dC4gCisg KgorICogcmV0dmFsCWlzX2ZhdWx0CUludGVycHJldGF0aW9uCisgKiAgIDAJCSAgIDAJCVN1Y2Nl c3MKKyAqICAgMAkJICAgMQkJQW4gZXhjZXB0aW9uIHdhcyBpbmplY3RlZCBpbnRvIHRoZSBndWVz dAorICogRUZBVUxUCSAgTi9BCQlVbnJlY292ZXJhYmxlIGVycm9yCisgKgorICogVGhlICdjb3B5 aW5mb1tdJyBjYW4gYmUgcGFzc2VkIHRvICd2bV9jb3B5aW4oKScgb3IgJ3ZtX2NvcHlvdXQoKScg b25seSBpZgorICogdGhlIHJldHVybiB2YWx1ZSBpcyAwLiBUaGUgJ2NvcHlpbmZvW10nIHJlc291 cmNlcyBzaG91bGQgYmUgZnJlZWQgYnkgY2FsbGluZworICogJ3ZtX2NvcHlfdGVhcmRvd24oKScg YWZ0ZXIgdGhlIGNvcHkgaXMgZG9uZS4KKyAqLworaW50IHZtX2NvcHlfc2V0dXAoc3RydWN0IHZt ICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFnaW5nLAorICAgIHVp bnQ2NF90IGdsYSwgc2l6ZV90IGxlbiwgaW50IHByb3QsIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29w eWluZm8sCisgICAgaW50IG51bV9jb3B5aW5mbywgaW50ICppc19mYXVsdCk7Cit2b2lkIHZtX2Nv cHlfdGVhcmRvd24oc3RydWN0IHZtICp2bSwgaW50IHZjcHVpZCwgc3RydWN0IHZtX2NvcHlpbmZv ICpjb3B5aW5mbywKKyAgICBpbnQgbnVtX2NvcHlpbmZvKTsKK3ZvaWQgdm1fY29weWluKHN0cnVj dCB2bSAqdm0sIGludCB2Y3B1aWQsIHN0cnVjdCB2bV9jb3B5aW5mbyAqY29weWluZm8sCisgICAg dm9pZCAqa2FkZHIsIHNpemVfdCBsZW4pOwordm9pZCB2bV9jb3B5b3V0KHN0cnVjdCB2bSAqdm0s IGludCB2Y3B1aWQsIGNvbnN0IHZvaWQgKmthZGRyLAorICAgIHN0cnVjdCB2bV9jb3B5aW5mbyAq Y29weWluZm8sIHNpemVfdCBsZW4pOworCitpbnQgdmNwdV90cmFjZV9leGNlcHRpb25zKHN0cnVj dCB2bSAqdm0sIGludCB2Y3B1aWQpOworI2VuZGlmCS8qIEtFUk5FTCAqLworCisjZGVmaW5lCVZN X01BWENQVQkxNgkJCS8qIG1heGltdW0gdmlydHVhbCBjcHVzICovCisKKy8qCisgKiBJZGVudGlm aWVycyBmb3Igb3B0aW9uYWwgdm1tIGNhcGFiaWxpdGllcworICovCitlbnVtIHZtX2NhcF90eXBl IHsKKwlWTV9DQVBfSEFMVF9FWElULAorCVZNX0NBUF9NVFJBUF9FWElULAorCVZNX0NBUF9QQVVT RV9FWElULAorCVZNX0NBUF9VTlJFU1RSSUNURURfR1VFU1QsCisJVk1fQ0FQX0VOQUJMRV9JTlZQ Q0lELAorCVZNX0NBUF9NQVgKK307CisKK2VudW0gdm1faW50cl90cmlnZ2VyIHsKKwlFREdFX1RS SUdHRVIsCisJTEVWRUxfVFJJR0dFUgorfTsKKwkKKy8qCisgKiBUaGUgJ2FjY2VzcycgZmllbGQg aGFzIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluIFRhYmxlIDIxLTIgb2YgdGhlIEludGVsCisgKiBB cmNoaXRlY3R1cmUgTWFudWFsIHZvbCAzYi4KKyAqCisgKiBYWFggVGhlIGNvbnRlbnRzIG9mIHRo ZSAnYWNjZXNzJyBmaWVsZCBhcmUgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgZXhjZXB0CisgKiBi aXQgMTYgLSBTZWdtZW50IFVudXNhYmxlLgorICovCitzdHJ1Y3Qgc2VnX2Rlc2MgeworCXVpbnQ2 NF90CWJhc2U7CisJdWludDMyX3QJbGltaXQ7CisJdWludDMyX3QJYWNjZXNzOworfTsKKyNkZWZp bmUJU0VHX0RFU0NfVFlQRShhY2Nlc3MpCQkoKGFjY2VzcykgJiAweDAwMWYpCisjZGVmaW5lCVNF R19ERVNDX0RQTChhY2Nlc3MpCQkoKChhY2Nlc3MpID4+IDUpICYgMHgzKQorI2RlZmluZQlTRUdf REVTQ19QUkVTRU5UKGFjY2VzcykJKCgoYWNjZXNzKSAmIDB4MDA4MCkgPyAxIDogMCkKKyNkZWZp bmUJU0VHX0RFU0NfREVGMzIoYWNjZXNzKQkJKCgoYWNjZXNzKSAmIDB4NDAwMCkgPyAxIDogMCkK KyNkZWZpbmUJU0VHX0RFU0NfR1JBTlVMQVJJVFkoYWNjZXNzKQkoKChhY2Nlc3MpICYgMHg4MDAw KSA/IDEgOiAwKQorI2RlZmluZQlTRUdfREVTQ19VTlVTQUJMRShhY2Nlc3MpCSgoKGFjY2Vzcykg JiAweDEwMDAwKSA/IDEgOiAwKQorCitlbnVtIHZtX2NwdV9tb2RlIHsKKwlDUFVfTU9ERV9SRUFM LAorCUNQVV9NT0RFX1BST1RFQ1RFRCwKKwlDUFVfTU9ERV9DT01QQVRJQklMSVRZLAkJLyogSUEt MzJFIG1vZGUgKENTLkwgPSAwKSAqLworCUNQVV9NT0RFXzY0QklULAkJCS8qIElBLTMyRSBtb2Rl IChDUy5MID0gMSkgKi8KK307CisKK2VudW0gdm1fcGFnaW5nX21vZGUgeworCVBBR0lOR19NT0RF X0ZMQVQsCisJUEFHSU5HX01PREVfMzIsCisJUEFHSU5HX01PREVfUEFFLAorCVBBR0lOR19NT0RF XzY0LAorfTsKKworc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyB7CisJdWludDY0X3QJY3IzOworCWlu dAkJY3BsOworCWVudW0gdm1fY3B1X21vZGUgY3B1X21vZGU7CisJZW51bSB2bV9wYWdpbmdfbW9k ZSBwYWdpbmdfbW9kZTsKK307CisKKy8qCisgKiBUaGUgZGF0YSBzdHJ1Y3R1cmVzICd2aWUnIGFu ZCAndmllX29wJyBhcmUgbWVhbnQgdG8gYmUgb3BhcXVlIHRvIHRoZQorICogY29uc3VtZXJzIG9m IGluc3RydWN0aW9uIGRlY29kaW5nLiBUaGUgb25seSByZWFzb24gd2h5IHRoZWlyIGNvbnRlbnRz CisgKiBuZWVkIHRvIGJlIGV4cG9zZWQgaXMgYmVjYXVzZSB0aGV5IGFyZSBwYXJ0IG9mIHRoZSAn dm1fZXhpdCcgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgdmllX29wIHsKKwl1aW50OF90CQlvcF9i eXRlOwkvKiBhY3R1YWwgb3Bjb2RlIGJ5dGUgKi8KKwl1aW50OF90CQlvcF90eXBlOwkvKiB0eXBl IG9mIG9wZXJhdGlvbiAoZS5nLiBNT1YpICovCisJdWludDE2X3QJb3BfZmxhZ3M7Cit9OworCisj ZGVmaW5lCVZJRV9JTlNUX1NJWkUJMTUKK3N0cnVjdCB2aWUgeworCXVpbnQ4X3QJCWluc3RbVklF X0lOU1RfU0laRV07CS8qIGluc3RydWN0aW9uIGJ5dGVzICovCisJdWludDhfdAkJbnVtX3ZhbGlk OwkJLyogc2l6ZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gKi8KKwl1aW50OF90CQludW1fcHJvY2Vzc2Vk OworCisJdWludDhfdAkJYWRkcnNpemU6NCwgb3BzaXplOjQ7CS8qIGFkZHJlc3MgYW5kIG9wZXJh bmQgc2l6ZXMgKi8KKwl1aW50OF90CQlyZXhfdzoxLAkJLyogUkVYIHByZWZpeCAqLworCQkJcmV4 X3I6MSwKKwkJCXJleF94OjEsCisJCQlyZXhfYjoxLAorCQkJcmV4X3ByZXNlbnQ6MSwKKwkJCXJl cHpfcHJlc2VudDoxLAkJLyogUkVQL1JFUEUvUkVQWiBwcmVmaXggKi8KKwkJCXJlcG56X3ByZXNl bnQ6MSwJLyogUkVQTkUvUkVQTlogcHJlZml4ICovCisJCQlvcHNpemVfb3ZlcnJpZGU6MSwJLyog T3BlcmFuZCBzaXplIG92ZXJyaWRlICovCisJCQlhZGRyc2l6ZV9vdmVycmlkZToxLAkvKiBBZGRy ZXNzIHNpemUgb3ZlcnJpZGUgKi8KKwkJCXNlZ21lbnRfb3ZlcnJpZGU6MTsJLyogU2VnbWVudCBv dmVycmlkZSAqLworCisJdWludDhfdAkJbW9kOjIsCQkJLyogTW9kUk0gYnl0ZSAqLworCQkJcmVn OjQsCisJCQlybTo0OworCisJdWludDhfdAkJc3M6MiwJCQkvKiBTSUIgYnl0ZSAqLworCQkJaW5k ZXg6NCwKKwkJCWJhc2U6NDsKKworCXVpbnQ4X3QJCWRpc3BfYnl0ZXM7CisJdWludDhfdAkJaW1t X2J5dGVzOworCisJdWludDhfdAkJc2NhbGU7CisJaW50CQliYXNlX3JlZ2lzdGVyOwkJLyogVk1f UkVHX0dVRVNUX3h5eiAqLworCWludAkJaW5kZXhfcmVnaXN0ZXI7CQkvKiBWTV9SRUdfR1VFU1Rf eHl6ICovCisJaW50CQlzZWdtZW50X3JlZ2lzdGVyOwkvKiBWTV9SRUdfR1VFU1RfeHl6ICovCisK KwlpbnQ2NF90CQlkaXNwbGFjZW1lbnQ7CQkvKiBvcHRpb25hbCBhZGRyIGRpc3BsYWNlbWVudCAq LworCWludDY0X3QJCWltbWVkaWF0ZTsJCS8qIG9wdGlvbmFsIGltbWVkaWF0ZSBvcGVyYW5kICov CisKKwl1aW50OF90CQlkZWNvZGVkOwkvKiBzZXQgdG8gMSBpZiBzdWNjZXNzZnVsbHkgZGVjb2Rl ZCAqLworCisJc3RydWN0IHZpZV9vcAlvcDsJCQkvKiBvcGNvZGUgZGVzY3JpcHRpb24gKi8KK307 CisKK2VudW0gdm1fZXhpdGNvZGUgeworCVZNX0VYSVRDT0RFX0lOT1VULAorCVZNX0VYSVRDT0RF X1ZNWCwKKwlWTV9FWElUQ09ERV9CT0dVUywKKwlWTV9FWElUQ09ERV9SRE1TUiwKKwlWTV9FWElU Q09ERV9XUk1TUiwKKwlWTV9FWElUQ09ERV9ITFQsCisJVk1fRVhJVENPREVfTVRSQVAsCisJVk1f RVhJVENPREVfUEFVU0UsCisJVk1fRVhJVENPREVfUEFHSU5HLAorCVZNX0VYSVRDT0RFX0lOU1Rf RU1VTCwKKwlWTV9FWElUQ09ERV9TUElOVVBfQVAsCisJVk1fRVhJVENPREVfREVQUkVDQVRFRDEs CS8qIHVzZWQgdG8gYmUgU1BJTkRPV05fQ1BVICovCisJVk1fRVhJVENPREVfUkVOREVaVk9VUywK KwlWTV9FWElUQ09ERV9JT0FQSUNfRU9JLAorCVZNX0VYSVRDT0RFX1NVU1BFTkRFRCwKKwlWTV9F WElUQ09ERV9JTk9VVF9TVFIsCisJVk1fRVhJVENPREVfVEFTS19TV0lUQ0gsCisJVk1fRVhJVENP REVfTU9OSVRPUiwKKwlWTV9FWElUQ09ERV9NV0FJVCwKKwlWTV9FWElUQ09ERV9TVk0sCisJVk1f RVhJVENPREVfUkVRSURMRSwKKwlWTV9FWElUQ09ERV9NQVgKK307CisKK3N0cnVjdCB2bV9pbm91 dCB7CisJdWludDE2X3QJYnl0ZXM6MzsJLyogMSBvciAyIG9yIDQgKi8KKwl1aW50MTZfdAlpbjox OworCXVpbnQxNl90CXN0cmluZzoxOworCXVpbnQxNl90CXJlcDoxOworCXVpbnQxNl90CXBvcnQ7 CisJdWludDMyX3QJZWF4OwkJLyogdmFsaWQgZm9yIG91dCAqLworfTsKKworc3RydWN0IHZtX2lu b3V0X3N0ciB7CisJc3RydWN0IHZtX2lub3V0CWlub3V0OwkJLyogbXVzdCBiZSB0aGUgZmlyc3Qg ZWxlbWVudCAqLworCXN0cnVjdCB2bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCXVpbnQ2NF90CXJm bGFnczsKKwl1aW50NjRfdAljcjA7CisJdWludDY0X3QJaW5kZXg7CisJdWludDY0X3QJY291bnQ7 CQkvKiByZXA9MSAoJXJjeCksIHJlcD0wICgxKSAqLworCWludAkJYWRkcnNpemU7CisJZW51bSB2 bV9yZWdfbmFtZSBzZWdfbmFtZTsKKwlzdHJ1Y3Qgc2VnX2Rlc2Mgc2VnX2Rlc2M7Cit9OworCitl bnVtIHRhc2tfc3dpdGNoX3JlYXNvbiB7CisJVFNSX0NBTEwsCisJVFNSX0lSRVQsCisJVFNSX0pN UCwKKwlUU1JfSURUX0dBVEUsCS8qIHRhc2sgZ2F0ZSBpbiBJRFQgKi8KK307CisKK3N0cnVjdCB2 bV90YXNrX3N3aXRjaCB7CisJdWludDE2X3QJdHNzc2VsOwkJLyogbmV3IFRTUyBzZWxlY3RvciAq LworCWludAkJZXh0OwkJLyogdGFzayBzd2l0Y2ggZHVlIHRvIGV4dGVybmFsIGV2ZW50ICovCisJ dWludDMyX3QJZXJyY29kZTsKKwlpbnQJCWVycmNvZGVfdmFsaWQ7CS8qIHB1c2ggJ2VycmNvZGUn IG9uIHRoZSBuZXcgc3RhY2sgKi8KKwllbnVtIHRhc2tfc3dpdGNoX3JlYXNvbiByZWFzb247CisJ c3RydWN0IHZtX2d1ZXN0X3BhZ2luZyBwYWdpbmc7Cit9OworCitzdHJ1Y3Qgdm1fZXhpdCB7CisJ ZW51bSB2bV9leGl0Y29kZQlleGl0Y29kZTsKKwlpbnQJCQlpbnN0X2xlbmd0aDsJLyogMCBtZWFu cyB1bmtub3duICovCisJdWludDY0X3QJCXJpcDsKKwl1bmlvbiB7CisJCXN0cnVjdCB2bV9pbm91 dAlpbm91dDsKKwkJc3RydWN0IHZtX2lub3V0X3N0ciBpbm91dF9zdHI7CisJCXN0cnVjdCB7CisJ CQl1aW50NjRfdAlncGE7CisJCQlpbnQJCWZhdWx0X3R5cGU7CisJCX0gcGFnaW5nOworCQlzdHJ1 Y3QgeworCQkJdWludDY0X3QJZ3BhOworCQkJdWludDY0X3QJZ2xhOworCQkJdWludDY0X3QJY3Nf YmFzZTsKKwkJCWludAkJY3NfZDsJCS8qIENTLkQgKi8KKwkJCXN0cnVjdCB2bV9ndWVzdF9wYWdp bmcgcGFnaW5nOworCQkJc3RydWN0IHZpZQl2aWU7CisJCX0gaW5zdF9lbXVsOworCQkvKgorCQkg KiBWTVggc3BlY2lmaWMgcGF5bG9hZC4gVXNlZCB3aGVuIHRoZXJlIGlzIG5vICJiZXR0ZXIiCisJ CSAqIGV4aXRjb2RlIHRvIHJlcHJlc2VudCB0aGUgVk0tZXhpdC4KKwkJICovCisJCXN0cnVjdCB7 CisJCQlpbnQJCXN0YXR1czsJCS8qIHZteCBpbnN0IHN0YXR1cyAqLworCQkJLyoKKwkJCSAqICdl eGl0X3JlYXNvbicgYW5kICdleGl0X3F1YWxpZmljYXRpb24nIGFyZSB2YWxpZAorCQkJICogb25s eSBpZiAnc3RhdHVzJyBpcyB6ZXJvLgorCQkJICovCisJCQl1aW50MzJfdAlleGl0X3JlYXNvbjsK KwkJCXVpbnQ2NF90CWV4aXRfcXVhbGlmaWNhdGlvbjsKKwkJCS8qCisJCQkgKiAnaW5zdF9lcnJv cicgYW5kICdpbnN0X3R5cGUnIGFyZSB2YWxpZAorCQkJICogb25seSBpZiAnc3RhdHVzJyBpcyBu b24temVyby4KKwkJCSAqLworCQkJaW50CQlpbnN0X3R5cGU7CisJCQlpbnQJCWluc3RfZXJyb3I7 CisJCX0gdm14OworCQkvKgorCQkgKiBTVk0gc3BlY2lmaWMgcGF5bG9hZC4KKwkJICovCisJCXN0 cnVjdCB7CisJCQl1aW50NjRfdAlleGl0Y29kZTsKKwkJCXVpbnQ2NF90CWV4aXRpbmZvMTsKKwkJ CXVpbnQ2NF90CWV4aXRpbmZvMjsKKwkJfSBzdm07CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdAlj b2RlOwkJLyogZWN4IHZhbHVlICovCisJCQl1aW50NjRfdAl3dmFsOworCQl9IG1zcjsKKwkJc3Ry dWN0IHsKKwkJCWludAkJdmNwdTsKKwkJCXVpbnQ2NF90CXJpcDsKKwkJfSBzcGludXBfYXA7CisJ CXN0cnVjdCB7CisJCQl1aW50NjRfdAlyZmxhZ3M7CisJCX0gaGx0OworCQlzdHJ1Y3QgeworCQkJ aW50CQl2ZWN0b3I7CisJCX0gaW9hcGljX2VvaTsKKwkJc3RydWN0IHsKKwkJCWVudW0gdm1fc3Vz cGVuZF9ob3cgaG93OworCQl9IHN1c3BlbmRlZDsKKwkJc3RydWN0IHZtX3Rhc2tfc3dpdGNoIHRh c2tfc3dpdGNoOworCX0gdTsKK307CisKKy8qIEFQSXMgdG8gaW5qZWN0IGZhdWx0cyBpbnRvIHRo ZSBndWVzdCAqLwordm9pZCB2bV9pbmplY3RfZmF1bHQodm9pZCAqdm0sIGludCB2Y3B1aWQsIGlu dCB2ZWN0b3IsIGludCBlcnJjb2RlX3ZhbGlkLAorICAgIGludCBlcnJjb2RlKTsKKworc3RhdGlj IF9faW5saW5lIHZvaWQKK3ZtX2luamVjdF91ZCh2b2lkICp2bSwgaW50IHZjcHVpZCkKK3sKKwl2 bV9pbmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX1VELCAwLCAwKTsKK30KKworc3RhdGljIF9f aW5saW5lIHZvaWQKK3ZtX2luamVjdF9ncCh2b2lkICp2bSwgaW50IHZjcHVpZCkKK3sKKwl2bV9p bmplY3RfZmF1bHQodm0sIHZjcHVpZCwgSURUX0dQLCAxLCAwKTsKK30KKworc3RhdGljIF9faW5s aW5lIHZvaWQKK3ZtX2luamVjdF9hYyh2b2lkICp2bSwgaW50IHZjcHVpZCwgaW50IGVycmNvZGUp Cit7CisJdm1faW5qZWN0X2ZhdWx0KHZtLCB2Y3B1aWQsIElEVF9BQywgMSwgZXJyY29kZSk7Cit9 CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit2bV9pbmplY3Rfc3Modm9pZCAqdm0sIGludCB2Y3B1 aWQsIGludCBlcnJjb2RlKQoreworCXZtX2luamVjdF9mYXVsdCh2bSwgdmNwdWlkLCBJRFRfU1Ms IDEsIGVycmNvZGUpOworfQorCit2b2lkIHZtX2luamVjdF9wZih2b2lkICp2bSwgaW50IHZjcHVp ZCwgaW50IGVycm9yX2NvZGUsIHVpbnQ2NF90IGNyMik7CisKK2ludCB2bV9yZXN0YXJ0X2luc3Ry dWN0aW9uKHZvaWQgKnZtLCBpbnQgdmNwdWlkKTsKKworI2VuZGlmCS8qIF9WTU1fSF8gKi8KZGlm ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYuaCAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1fZGV2LmgKLS0tIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tX2Rldi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAu MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92 bW1fZGV2LmgJMjAxNi0xMS0zMCAxMDo1NjowNS43ODY1ODMwMDAgKzAwMDAKQEAgLTAsMCArMSw0 MTAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIE5FVEFQUCwgSU5DIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgTkVUQVBQ LCBJTkMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq CisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2FtZDY0L2luY2x1ZGUvdm1tX2Rldi5oIDI5 ODA5NCAyMDE2LTA0LTE2IDAzOjQ0OjUwWiBnamIgJAorICovCisKKyNpZm5kZWYJX1ZNTV9ERVZf SF8KKyNkZWZpbmUJX1ZNTV9ERVZfSF8KKworI2lmZGVmIF9LRVJORUwKK3ZvaWQJdm1tZGV2X2lu aXQodm9pZCk7CitpbnQJdm1tZGV2X2NsZWFudXAodm9pZCk7CisjZW5kaWYKKworc3RydWN0IHZt X21lbW1hcCB7CisJdm1fcGFkZHJfdAlncGE7CisJaW50CQlzZWdpZDsJCS8qIG1lbW9yeSBzZWdt ZW50ICovCisJdm1fb29mZnNldF90CXNlZ29mZjsJCS8qIG9mZnNldCBpbnRvIG1lbW9yeSBzZWdt ZW50ICovCisJc2l6ZV90CQlsZW47CQkvKiBtbWFwIGxlbmd0aCAqLworCWludAkJcHJvdDsJCS8q IFJXWCAqLworCWludAkJZmxhZ3M7Cit9OworI2RlZmluZQlWTV9NRU1NQVBfRl9XSVJFRAkweDAx CisjZGVmaW5lCVZNX01FTU1BUF9GX0lPTU1VCTB4MDIKKworI2RlZmluZQlWTV9NRU1TRUdfTkFN RShtKQkoKG0pLT5uYW1lWzBdICE9ICdcMCcgPyAobSktPm5hbWUgOiBOVUxMKQorc3RydWN0IHZt X21lbXNlZyB7CisJaW50CQlzZWdpZDsKKwlzaXplX3QJCWxlbjsKKwljaGFyCQluYW1lW1NQRUNO QU1FTEVOICsgMV07Cit9OworCitzdHJ1Y3Qgdm1fcmVnaXN0ZXIgeworCWludAkJY3B1aWQ7CisJ aW50CQlyZWdudW07CQkvKiBlbnVtIHZtX3JlZ19uYW1lICovCisJdWludDY0X3QJcmVndmFsOwor fTsKKworc3RydWN0IHZtX3NlZ19kZXNjIHsJCQkvKiBkYXRhIG9yIGNvZGUgc2VnbWVudCAqLwor CWludAkJY3B1aWQ7CisJaW50CQlyZWdudW07CQkvKiBlbnVtIHZtX3JlZ19uYW1lICovCisJc3Ry dWN0IHNlZ19kZXNjIGRlc2M7Cit9OworCitzdHJ1Y3Qgdm1fcnVuIHsKKwlpbnQJCWNwdWlkOwor CXN0cnVjdCB2bV9leGl0CXZtX2V4aXQ7Cit9OworCitzdHJ1Y3Qgdm1fZXhjZXB0aW9uIHsKKwlp bnQJCWNwdWlkOworCWludAkJdmVjdG9yOworCXVpbnQzMl90CWVycm9yX2NvZGU7CisJaW50CQll cnJvcl9jb2RlX3ZhbGlkOworCWludAkJcmVzdGFydF9pbnN0cnVjdGlvbjsKK307CisKK3N0cnVj dCB2bV9sYXBpY19tc2kgeworCXVpbnQ2NF90CW1zZzsKKwl1aW50NjRfdAlhZGRyOworfTsKKwor c3RydWN0IHZtX2xhcGljX2lycSB7CisJaW50CQljcHVpZDsKKwlpbnQJCXZlY3RvcjsKK307CisK K3N0cnVjdCB2bV9pb2FwaWNfaXJxIHsKKwlpbnQJCWlycTsKK307CisKK3N0cnVjdCB2bV9pc2Ff aXJxIHsKKwlpbnQJCWF0cGljX2lycTsKKwlpbnQJCWlvYXBpY19pcnE7Cit9OworCitzdHJ1Y3Qg dm1faXNhX2lycV90cmlnZ2VyIHsKKwlpbnQJCWF0cGljX2lycTsKKwllbnVtIHZtX2ludHJfdHJp Z2dlciB0cmlnZ2VyOworfTsKKworc3RydWN0IHZtX2NhcGFiaWxpdHkgeworCWludAkJY3B1aWQ7 CisJZW51bSB2bV9jYXBfdHlwZSBjYXB0eXBlOworCWludAkJY2FwdmFsOworCWludAkJYWxsY3B1 czsKK307CisKK3N0cnVjdCB2bV9wcHRkZXYgeworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlp bnQJCWZ1bmM7Cit9OworCitzdHJ1Y3Qgdm1fcHB0ZGV2X21taW8geworCWludAkJYnVzOworCWlu dAkJc2xvdDsKKwlpbnQJCWZ1bmM7CisJdm1fcGFkZHJfdAlncGE7CisJdm1fcGFkZHJfdAlocGE7 CisJc2l6ZV90CQlsZW47Cit9OworCisvKiBBcmd1bWVudCBmb3IgVk1fTUFQX1VTRVJfQlVGIGlv Y3RsIGluIHZtbWFwaS5jICovCitzdHJ1Y3Qgdm1fdXNlcl9idWYgeworCXZtX3BhZGRyX3QJZ3Bh OworCXZvaWQgCQkqYWRkcjsKKwlzaXplX3QJCWxlbjsKK307CisKKy8qIEFyZ3VtZW50IGZvciBW TV9JT19SRUdfSEFORExFUiBpb2N0bCBpbiB2bW1hcGkuYyAqLworc3RydWN0IHZtX2lvX3JlZ19o YW5kbGVyIHsKKwl1aW50MTZfdAkJcG9ydDsJCS8qIEkvTyBhZGRyZXNzICovCisJdWludDE2X3QJ CWluOwkJLyogMCBvdXQsIDEgaW4gKi8KKwl1aW50MzJfdAkJbWFza19kYXRhOwkvKiAwIG1lYW5z IG1hdGNoIGFueXRoaW5nICovCisJdWludDMyX3QJCWRhdGE7CQkvKiBkYXRhIHRvIG1hdGNoICov CisJZW51bSB2bV9pb19yZWdoX3R5cGUJdHlwZTsJCS8qIGhhbmRsZXIgdHlwZSAqLworCXZvaWQJ CQkqYXJnOwkJLyogaGFuZGxlciBhcmd1bWVudCAqLworfTsKKworc3RydWN0IHZtX3BwdGRldl9t c2kgeworCWludAkJdmNwdTsKKwlpbnQJCWJ1czsKKwlpbnQJCXNsb3Q7CisJaW50CQlmdW5jOwor CWludAkJbnVtdmVjOwkJLyogMCBtZWFucyBkaXNhYmxlZCAqLworCXVpbnQ2NF90CW1zZzsKKwl1 aW50NjRfdAlhZGRyOworfTsKKworc3RydWN0IHZtX3BwdGRldl9tc2l4IHsKKwlpbnQJCXZjcHU7 CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwlpbnQJCWlkeDsKKwl1aW50 NjRfdAltc2c7CisJdWludDMyX3QJdmVjdG9yX2NvbnRyb2w7CisJdWludDY0X3QJYWRkcjsKK307 CisKK3N0cnVjdCB2bV9ubWkgeworCWludAkJY3B1aWQ7Cit9OworCisjZGVmaW5lCU1BWF9WTV9T VEFUUwk2NAorc3RydWN0IHZtX3N0YXRzIHsKKwlpbnQJCWNwdWlkOwkJCQkvKiBpbiAqLworCWlu dAkJbnVtX2VudHJpZXM7CQkJLyogb3V0ICovCisJc3RydWN0IHRpbWV2YWwJdHY7CisJdWludDY0 X3QJc3RhdGJ1ZltNQVhfVk1fU1RBVFNdOworfTsKKworc3RydWN0IHZtX3N0YXRfZGVzYyB7CisJ aW50CQlpbmRleDsJCQkJLyogaW4gKi8KKwljaGFyCQlkZXNjWzEyOF07CQkJLyogb3V0ICovCit9 OworCitzdHJ1Y3Qgdm1feDJhcGljIHsKKwlpbnQJCQljcHVpZDsKKwllbnVtIHgyYXBpY19zdGF0 ZQlzdGF0ZTsKK307CisKK3N0cnVjdCB2bV9ncGFfcHRlIHsKKwl1aW50NjRfdAlncGE7CQkJCS8q IGluICovCisJdWludDY0X3QJcHRlWzRdOwkJCQkvKiBvdXQgKi8KKwlpbnQJCXB0ZW51bTsKK307 CisKK3N0cnVjdCB2bV9ocGV0X2NhcCB7CisJdWludDMyX3QJY2FwYWJpbGl0aWVzOwkvKiBsb3dl ciAzMiBiaXRzIG9mIEhQRVQgY2FwYWJpbGl0aWVzICovCit9OworCitzdHJ1Y3Qgdm1fc3VzcGVu ZCB7CisJZW51bSB2bV9zdXNwZW5kX2hvdyBob3c7Cit9OworCitzdHJ1Y3Qgdm1fZ2xhMmdwYSB7 CisJaW50CQl2Y3B1aWQ7CQkvKiBpbnB1dHMgKi8KKwlpbnQgCQlwcm90OwkJLyogUFJPVF9SRUFE IG9yIFBST1RfV1JJVEUgKi8KKwl1aW50NjRfdAlnbGE7CisJc3RydWN0IHZtX2d1ZXN0X3BhZ2lu ZyBwYWdpbmc7CisJaW50CQlmYXVsdDsJCS8qIG91dHB1dHMgKi8KKwl1aW50NjRfdAlncGE7Cit9 OworCitzdHJ1Y3Qgdm1fYWN0aXZhdGVfY3B1IHsKKwlpbnQJCXZjcHVpZDsKK307CisKK3N0cnVj dCB2bV9jcHVzZXQgeworCWludAkJd2hpY2g7CisJaW50CQljcHVzZXRzaXplOworCWNwdXNldF90 CSpjcHVzOworfTsKKyNkZWZpbmUJVk1fQUNUSVZFX0NQVVMJCTAKKyNkZWZpbmUJVk1fU1VTUEVO REVEX0NQVVMJMQorCitzdHJ1Y3Qgdm1faW50aW5mbyB7CisJaW50CQl2Y3B1aWQ7CisJdWludDY0 X3QJaW5mbzE7CisJdWludDY0X3QJaW5mbzI7Cit9OworCitzdHJ1Y3Qgdm1fcnRjX3RpbWUgewor CXRpbWVfdAkJc2VjczsKK307CisKK3N0cnVjdCB2bV9ydGNfZGF0YSB7CisJaW50CQlvZmZzZXQ7 CisJdWludDhfdAkJdmFsdWU7Cit9OworCitlbnVtIHsKKwkvKiBnZW5lcmFsIHJvdXRpbmVzICov CisJSU9DTlVNX0FCSVZFUlMgPSAwLAorCUlPQ05VTV9SVU4gPSAxLAorCUlPQ05VTV9TRVRfQ0FQ QUJJTElUWSA9IDIsCisJSU9DTlVNX0dFVF9DQVBBQklMSVRZID0gMywKKwlJT0NOVU1fU1VTUEVO RCA9IDQsCisJSU9DTlVNX1JFSU5JVCA9IDUsCisKKwkvKiBtZW1vcnkgYXBpcyAqLworCUlPQ05V TV9NQVBfTUVNT1JZID0gMTAsCQkJLyogZGVwcmVjYXRlZCAqLworCUlPQ05VTV9HRVRfTUVNT1JZ X1NFRyA9IDExLAkJLyogZGVwcmVjYXRlZCAqLworCUlPQ05VTV9HRVRfR1BBX1BNQVAgPSAxMiwK KwlJT0NOVU1fR0xBMkdQQSA9IDEzLAorCUlPQ05VTV9BTExPQ19NRU1TRUcgPSAxNCwKKwlJT0NO VU1fR0VUX01FTVNFRyA9IDE1LAorCUlPQ05VTV9NTUFQX01FTVNFRyA9IDE2LAorCUlPQ05VTV9N TUFQX0dFVE5FWFQgPSAxNywKKworCS8qIHJlZ2lzdGVyL3N0YXRlIGFjY2Vzc29ycyAqLworCUlP Q05VTV9TRVRfUkVHSVNURVIgPSAyMCwKKwlJT0NOVU1fR0VUX1JFR0lTVEVSID0gMjEsCisJSU9D TlVNX1NFVF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMiwKKwlJT0NOVU1fR0VUX1NFR01FTlRfREVT Q1JJUFRPUiA9IDIzLAorCisJLyogaW50ZXJydXB0IGluamVjdGlvbiAqLworCUlPQ05VTV9HRVRf SU5USU5GTyA9IDI4LAorCUlPQ05VTV9TRVRfSU5USU5GTyA9IDI5LAorCUlPQ05VTV9JTkpFQ1Rf RVhDRVBUSU9OID0gMzAsCisJSU9DTlVNX0xBUElDX0lSUSA9IDMxLAorCUlPQ05VTV9JTkpFQ1Rf Tk1JID0gMzIsCisJSU9DTlVNX0lPQVBJQ19BU1NFUlRfSVJRID0gMzMsCisJSU9DTlVNX0lPQVBJ Q19ERUFTU0VSVF9JUlEgPSAzNCwKKwlJT0NOVU1fSU9BUElDX1BVTFNFX0lSUSA9IDM1LAorCUlP Q05VTV9MQVBJQ19NU0kgPSAzNiwKKwlJT0NOVU1fTEFQSUNfTE9DQUxfSVJRID0gMzcsCisJSU9D TlVNX0lPQVBJQ19QSU5DT1VOVCA9IDM4LAorCUlPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OID0g MzksCisKKwkvKiBQQ0kgcGFzcy10aHJ1ICovCisJSU9DTlVNX0JJTkRfUFBUREVWID0gNDAsCisJ SU9DTlVNX1VOQklORF9QUFRERVYgPSA0MSwKKwlJT0NOVU1fTUFQX1BQVERFVl9NTUlPID0gNDIs CisJSU9DTlVNX1BQVERFVl9NU0kgPSA0MywKKwlJT0NOVU1fUFBUREVWX01TSVggPSA0NCwKKwor CS8qIHN0YXRpc3RpY3MgKi8KKwlJT0NOVU1fVk1fU1RBVFMgPSA1MCwgCisJSU9DTlVNX1ZNX1NU QVRfREVTQyA9IDUxLAorCisJLyoga2VybmVsIGRldmljZSBzdGF0ZSAqLworCUlPQ05VTV9TRVRf WDJBUElDX1NUQVRFID0gNjAsCisJSU9DTlVNX0dFVF9YMkFQSUNfU1RBVEUgPSA2MSwKKwlJT0NO VU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTID0gNjIsCisKKwkvKiBsZWdhY3kgaW50ZXJydXB0IGlu amVjdGlvbiAqLworCUlPQ05VTV9JU0FfQVNTRVJUX0lSUSA9IDgwLAorCUlPQ05VTV9JU0FfREVB U1NFUlRfSVJRID0gODEsCisJSU9DTlVNX0lTQV9QVUxTRV9JUlEgPSA4MiwKKwlJT0NOVU1fSVNB X1NFVF9JUlFfVFJJR0dFUiA9IDgzLAorCisJLyogdm1fY3B1c2V0ICovCisJSU9DTlVNX0FDVElW QVRFX0NQVSA9IDkwLAorCUlPQ05VTV9HRVRfQ1BVU0VUID0gOTEsCisKKwkvKiBSVEMgKi8KKwlJ T0NOVU1fUlRDX1JFQUQgPSAxMDAsCisJSU9DTlVNX1JUQ19XUklURSA9IDEwMSwKKwlJT0NOVU1f UlRDX1NFVFRJTUUgPSAxMDIsCisJSU9DTlVNX1JUQ19HRVRUSU1FID0gMTAzLAorCisJLyogaG9z dCBtbWFwIGFuZCBJTyBoYW5kbGVyICovCisJSU9DTlVNX01BUF9VU0VSX0JVRiA9IDEwNCwKKwlJ T0NOVU1fSU9fUkVHX0hBTkRMRVIgPSAxMDUsCit9OworCisjZGVmaW5lCVZNX1JVTgkJXAorCV9J T1dSKCd2JywgSU9DTlVNX1JVTiwgc3RydWN0IHZtX3J1bikKKyNkZWZpbmUJVk1fU1VTUEVORAlc CisJX0lPVygndicsIElPQ05VTV9TVVNQRU5ELCBzdHJ1Y3Qgdm1fc3VzcGVuZCkKKyNkZWZpbmUJ Vk1fUkVJTklUCVwKKwlfSU8oJ3YnLCBJT0NOVU1fUkVJTklUKQorI2RlZmluZQlWTV9BTExPQ19N RU1TRUcJXAorCV9JT1coJ3YnLCBJT0NOVU1fQUxMT0NfTUVNU0VHLCBzdHJ1Y3Qgdm1fbWVtc2Vn KQorI2RlZmluZQlWTV9HRVRfTUVNU0VHCVwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfTUVNU0VH LCBzdHJ1Y3Qgdm1fbWVtc2VnKQorI2RlZmluZQlWTV9NTUFQX01FTVNFRwlcCisJX0lPVygndics IElPQ05VTV9NTUFQX01FTVNFRywgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZpbmUJVk1fTU1BUF9H RVRORVhUCVwKKwlfSU9XUigndicsIElPQ05VTV9NTUFQX0dFVE5FWFQsIHN0cnVjdCB2bV9tZW1t YXApCisjZGVmaW5lCVZNX1NFVF9SRUdJU1RFUiBcCisJX0lPVygndicsIElPQ05VTV9TRVRfUkVH SVNURVIsIHN0cnVjdCB2bV9yZWdpc3RlcikKKyNkZWZpbmUJVk1fR0VUX1JFR0lTVEVSIFwKKwlf SU9XUigndicsIElPQ05VTV9HRVRfUkVHSVNURVIsIHN0cnVjdCB2bV9yZWdpc3RlcikKKyNkZWZp bmUJVk1fU0VUX1NFR01FTlRfREVTQ1JJUFRPUiBcCisJX0lPVygndicsIElPQ05VTV9TRVRfU0VH TUVOVF9ERVNDUklQVE9SLCBzdHJ1Y3Qgdm1fc2VnX2Rlc2MpCisjZGVmaW5lCVZNX0dFVF9TRUdN RU5UX0RFU0NSSVBUT1IgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9TRUdNRU5UX0RFU0NSSVBU T1IsIHN0cnVjdCB2bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fSU5KRUNUX0VYQ0VQVElPTglcCisJ X0lPVygndicsIElPQ05VTV9JTkpFQ1RfRVhDRVBUSU9OLCBzdHJ1Y3Qgdm1fZXhjZXB0aW9uKQor I2RlZmluZQlWTV9MQVBJQ19JUlEgCQlcCisJX0lPVygndicsIElPQ05VTV9MQVBJQ19JUlEsIHN0 cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElDX0xPQ0FMX0lSUSAJXAorCV9JT1co J3YnLCBJT0NOVU1fTEFQSUNfTE9DQUxfSVJRLCBzdHJ1Y3Qgdm1fbGFwaWNfaXJxKQorI2RlZmlu ZQlWTV9MQVBJQ19NU0kJCVwKKwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX01TSSwgc3RydWN0IHZt X2xhcGljX21zaSkKKyNkZWZpbmUJVk1fSU9BUElDX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJ T0NOVU1fSU9BUElDX0FTU0VSVF9JUlEsIHN0cnVjdCB2bV9pb2FwaWNfaXJxKQorI2RlZmluZQlW TV9JT0FQSUNfREVBU1NFUlRfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lPQVBJQ19ERUFTU0VS VF9JUlEsIHN0cnVjdCB2bV9pb2FwaWNfaXJxKQorI2RlZmluZQlWTV9JT0FQSUNfUFVMU0VfSVJR CVwKKwlfSU9XKCd2JywgSU9DTlVNX0lPQVBJQ19QVUxTRV9JUlEsIHN0cnVjdCB2bV9pb2FwaWNf aXJxKQorI2RlZmluZQlWTV9JT0FQSUNfUElOQ09VTlQJXAorCV9JT1IoJ3YnLCBJT0NOVU1fSU9B UElDX1BJTkNPVU5ULCBpbnQpCisjZGVmaW5lCVZNX0lTQV9BU1NFUlRfSVJRCVwKKwlfSU9XKCd2 JywgSU9DTlVNX0lTQV9BU1NFUlRfSVJRLCBzdHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1f SVNBX0RFQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JU0FfREVBU1NFUlRfSVJRLCBz dHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1fSVNBX1BVTFNFX0lSUQlcCisJX0lPVygndics IElPQ05VTV9JU0FfUFVMU0VfSVJRLCBzdHJ1Y3Qgdm1faXNhX2lycSkKKyNkZWZpbmUJVk1fSVNB X1NFVF9JUlFfVFJJR0dFUglcCisJX0lPVygndicsIElPQ05VTV9JU0FfU0VUX0lSUV9UUklHR0VS LCBzdHJ1Y3Qgdm1faXNhX2lycV90cmlnZ2VyKQorI2RlZmluZQlWTV9TRVRfQ0FQQUJJTElUWSBc CisJX0lPVygndicsIElPQ05VTV9TRVRfQ0FQQUJJTElUWSwgc3RydWN0IHZtX2NhcGFiaWxpdHkp CisjZGVmaW5lCVZNX0dFVF9DQVBBQklMSVRZIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfQ0FQ QUJJTElUWSwgc3RydWN0IHZtX2NhcGFiaWxpdHkpCisjZGVmaW5lCVZNX0JJTkRfUFBUREVWIFwK KwlfSU9XKCd2JywgSU9DTlVNX0JJTkRfUFBUREVWLCBzdHJ1Y3Qgdm1fcHB0ZGV2KQorI2RlZmlu ZQlWTV9VTkJJTkRfUFBUREVWIFwKKwlfSU9XKCd2JywgSU9DTlVNX1VOQklORF9QUFRERVYsIHN0 cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX01BUF9QUFRERVZfTU1JTyBcCisJX0lPVygndics IElPQ05VTV9NQVBfUFBUREVWX01NSU8sIHN0cnVjdCB2bV9wcHRkZXZfbW1pbykKKyNkZWZpbmUJ Vk1fTUFQX1VTRVJfQlVGIFwKKwlfSU9XKCd2JywgSU9DTlVNX01BUF9VU0VSX0JVRiwgc3RydWN0 IHZtX3VzZXJfYnVmKQorI2RlZmluZQlWTV9JT19SRUdfSEFORExFUiBcCisJX0lPVygndicsIElP Q05VTV9JT19SRUdfSEFORExFUiwgc3RydWN0IHZtX2lvX3JlZ19oYW5kbGVyKQorI2RlZmluZQlW TV9QUFRERVZfTVNJIFwKKwlfSU9XKCd2JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9w cHRkZXZfbXNpKQorI2RlZmluZQlWTV9QUFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9Q UFRERVZfTVNJWCwgc3RydWN0IHZtX3BwdGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1J IFwKKwlfSU9XKCd2JywgSU9DTlVNX0lOSkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5l CVZNX1NUQVRTIFwKKwlfSU9XUigndicsIElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRz KQorI2RlZmluZQlWTV9TVEFUX0RFU0MgXAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVT Qywgc3RydWN0IHZtX3N0YXRfZGVzYykKKyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJ X0lPVygndicsIElPQ05VTV9TRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2Rl ZmluZQlWTV9HRVRfWDJBUElDX1NUQVRFIFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElD X1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJ RVMgXAorCV9JT1IoJ3YnLCBJT0NOVU1fR0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1f aHBldF9jYXApCisjZGVmaW5lCVZNX0dFVF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1f R0VUX0dQQV9QTUFQLCBzdHJ1Y3Qgdm1fZ3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJ X0lPV1IoJ3YnLCBJT0NOVU1fR0xBMkdQQSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZN X0FDVElWQVRFX0NQVQlcCisJX0lPVygndicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2 bV9hY3RpdmF0ZV9jcHUpCisjZGVmaW5lCVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVN X0dFVF9DUFVTRVQsIHN0cnVjdCB2bV9jcHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwK KwlfSU9XKCd2JywgSU9DTlVNX1NFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZp bmUJVk1fR0VUX0lOVElORk8JXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1 Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUgVk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVN X1JUQ19XUklURSwgc3RydWN0IHZtX3J0Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJ X0lPV1IoJ3YnLCBJT0NOVU1fUlRDX1JFQUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUg Vk1fUlRDX1NFVFRJTUUJXAorCV9JT1coJ3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2 bV9ydGNfdGltZSkKKyNkZWZpbmUgVk1fUlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1f UlRDX0dFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNU UlVDVElPTiBcCisJX0lPVygndicsIElPQ05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisj ZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zt bV9kZXYuaC5vcmlnIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYu aC5vcmlnCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9kZXYuaC5v cmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1fZGV2Lmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU0 LjM3MDQ0MDAwMCArMDAwMApAQCAtMCwwICsxLDM4NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMp IDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFO RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z eXMvYW1kNjQvaW5jbHVkZS92bW1fZGV2LmggMjk4MDk0IDIwMTYtMDQtMTYgMDM6NDQ6NTBaIGdq YiAkCisgKi8KKworI2lmbmRlZglfVk1NX0RFVl9IXworI2RlZmluZQlfVk1NX0RFVl9IXworCisj aWZkZWYgX0tFUk5FTAordm9pZAl2bW1kZXZfaW5pdCh2b2lkKTsKK2ludAl2bW1kZXZfY2xlYW51 cCh2b2lkKTsKKyNlbmRpZgorCitzdHJ1Y3Qgdm1fbWVtbWFwIHsKKwl2bV9wYWRkcl90CWdwYTsK KwlpbnQJCXNlZ2lkOwkJLyogbWVtb3J5IHNlZ21lbnQgKi8KKwl2bV9vb2Zmc2V0X3QJc2Vnb2Zm OwkJLyogb2Zmc2V0IGludG8gbWVtb3J5IHNlZ21lbnQgKi8KKwlzaXplX3QJCWxlbjsJCS8qIG1t YXAgbGVuZ3RoICovCisJaW50CQlwcm90OwkJLyogUldYICovCisJaW50CQlmbGFnczsKK307Cisj ZGVmaW5lCVZNX01FTU1BUF9GX1dJUkVECTB4MDEKKyNkZWZpbmUJVk1fTUVNTUFQX0ZfSU9NTVUJ MHgwMgorCisjZGVmaW5lCVZNX01FTVNFR19OQU1FKG0pCSgobSktPm5hbWVbMF0gIT0gJ1wwJyA/ IChtKS0+bmFtZSA6IE5VTEwpCitzdHJ1Y3Qgdm1fbWVtc2VnIHsKKwlpbnQJCXNlZ2lkOworCXNp emVfdAkJbGVuOworCWNoYXIJCW5hbWVbU1BFQ05BTUVMRU4gKyAxXTsKK307CisKK3N0cnVjdCB2 bV9yZWdpc3RlciB7CisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJCS8qIGVudW0gdm1fcmVn X25hbWUgKi8KKwl1aW50NjRfdAlyZWd2YWw7Cit9OworCitzdHJ1Y3Qgdm1fc2VnX2Rlc2MgewkJ CS8qIGRhdGEgb3IgY29kZSBzZWdtZW50ICovCisJaW50CQljcHVpZDsKKwlpbnQJCXJlZ251bTsJ CS8qIGVudW0gdm1fcmVnX25hbWUgKi8KKwlzdHJ1Y3Qgc2VnX2Rlc2MgZGVzYzsKK307CisKK3N0 cnVjdCB2bV9ydW4geworCWludAkJY3B1aWQ7CisJc3RydWN0IHZtX2V4aXQJdm1fZXhpdDsKK307 CisKK3N0cnVjdCB2bV9leGNlcHRpb24geworCWludAkJY3B1aWQ7CisJaW50CQl2ZWN0b3I7CisJ dWludDMyX3QJZXJyb3JfY29kZTsKKwlpbnQJCWVycm9yX2NvZGVfdmFsaWQ7CisJaW50CQlyZXN0 YXJ0X2luc3RydWN0aW9uOworfTsKKworc3RydWN0IHZtX2xhcGljX21zaSB7CisJdWludDY0X3QJ bXNnOworCXVpbnQ2NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbGFwaWNfaXJxIHsKKwlpbnQJ CWNwdWlkOworCWludAkJdmVjdG9yOworfTsKKworc3RydWN0IHZtX2lvYXBpY19pcnEgeworCWlu dAkJaXJxOworfTsKKworc3RydWN0IHZtX2lzYV9pcnEgeworCWludAkJYXRwaWNfaXJxOworCWlu dAkJaW9hcGljX2lycTsKK307CisKK3N0cnVjdCB2bV9pc2FfaXJxX3RyaWdnZXIgeworCWludAkJ YXRwaWNfaXJxOworCWVudW0gdm1faW50cl90cmlnZ2VyIHRyaWdnZXI7Cit9OworCitzdHJ1Y3Qg dm1fY2FwYWJpbGl0eSB7CisJaW50CQljcHVpZDsKKwllbnVtIHZtX2NhcF90eXBlIGNhcHR5cGU7 CisJaW50CQljYXB2YWw7CisJaW50CQlhbGxjcHVzOworfTsKKworc3RydWN0IHZtX3BwdGRldiB7 CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKK307CisKK3N0cnVjdCB2bV9w cHRkZXZfbW1pbyB7CisJaW50CQlidXM7CisJaW50CQlzbG90OworCWludAkJZnVuYzsKKwl2bV9w YWRkcl90CWdwYTsKKwl2bV9wYWRkcl90CWhwYTsKKwlzaXplX3QJCWxlbjsKK307CisKK3N0cnVj dCB2bV9wcHRkZXZfbXNpIHsKKwlpbnQJCXZjcHU7CisJaW50CQlidXM7CisJaW50CQlzbG90Owor CWludAkJZnVuYzsKKwlpbnQJCW51bXZlYzsJCS8qIDAgbWVhbnMgZGlzYWJsZWQgKi8KKwl1aW50 NjRfdAltc2c7CisJdWludDY0X3QJYWRkcjsKK307CisKK3N0cnVjdCB2bV9wcHRkZXZfbXNpeCB7 CisJaW50CQl2Y3B1OworCWludAkJYnVzOworCWludAkJc2xvdDsKKwlpbnQJCWZ1bmM7CisJaW50 CQlpZHg7CisJdWludDY0X3QJbXNnOworCXVpbnQzMl90CXZlY3Rvcl9jb250cm9sOworCXVpbnQ2 NF90CWFkZHI7Cit9OworCitzdHJ1Y3Qgdm1fbm1pIHsKKwlpbnQJCWNwdWlkOworfTsKKworI2Rl ZmluZQlNQVhfVk1fU1RBVFMJNjQKK3N0cnVjdCB2bV9zdGF0cyB7CisJaW50CQljcHVpZDsJCQkJ LyogaW4gKi8KKwlpbnQJCW51bV9lbnRyaWVzOwkJCS8qIG91dCAqLworCXN0cnVjdCB0aW1ldmFs CXR2OworCXVpbnQ2NF90CXN0YXRidWZbTUFYX1ZNX1NUQVRTXTsKK307CisKK3N0cnVjdCB2bV9z dGF0X2Rlc2MgeworCWludAkJaW5kZXg7CQkJCS8qIGluICovCisJY2hhcgkJZGVzY1sxMjhdOwkJ CS8qIG91dCAqLworfTsKKworc3RydWN0IHZtX3gyYXBpYyB7CisJaW50CQkJY3B1aWQ7CisJZW51 bSB4MmFwaWNfc3RhdGUJc3RhdGU7Cit9OworCitzdHJ1Y3Qgdm1fZ3BhX3B0ZSB7CisJdWludDY0 X3QJZ3BhOwkJCQkvKiBpbiAqLworCXVpbnQ2NF90CXB0ZVs0XTsJCQkJLyogb3V0ICovCisJaW50 CQlwdGVudW07Cit9OworCitzdHJ1Y3Qgdm1faHBldF9jYXAgeworCXVpbnQzMl90CWNhcGFiaWxp dGllczsJLyogbG93ZXIgMzIgYml0cyBvZiBIUEVUIGNhcGFiaWxpdGllcyAqLworfTsKKworc3Ry dWN0IHZtX3N1c3BlbmQgeworCWVudW0gdm1fc3VzcGVuZF9ob3cgaG93OworfTsKKworc3RydWN0 IHZtX2dsYTJncGEgeworCWludAkJdmNwdWlkOwkJLyogaW5wdXRzICovCisJaW50IAkJcHJvdDsJ CS8qIFBST1RfUkVBRCBvciBQUk9UX1dSSVRFICovCisJdWludDY0X3QJZ2xhOworCXN0cnVjdCB2 bV9ndWVzdF9wYWdpbmcgcGFnaW5nOworCWludAkJZmF1bHQ7CQkvKiBvdXRwdXRzICovCisJdWlu dDY0X3QJZ3BhOworfTsKKworc3RydWN0IHZtX2FjdGl2YXRlX2NwdSB7CisJaW50CQl2Y3B1aWQ7 Cit9OworCitzdHJ1Y3Qgdm1fY3B1c2V0IHsKKwlpbnQJCXdoaWNoOworCWludAkJY3B1c2V0c2l6 ZTsKKwljcHVzZXRfdAkqY3B1czsKK307CisjZGVmaW5lCVZNX0FDVElWRV9DUFVTCQkwCisjZGVm aW5lCVZNX1NVU1BFTkRFRF9DUFVTCTEKKworc3RydWN0IHZtX2ludGluZm8geworCWludAkJdmNw dWlkOworCXVpbnQ2NF90CWluZm8xOworCXVpbnQ2NF90CWluZm8yOworfTsKKworc3RydWN0IHZt X3J0Y190aW1lIHsKKwl0aW1lX3QJCXNlY3M7Cit9OworCitzdHJ1Y3Qgdm1fcnRjX2RhdGEgewor CWludAkJb2Zmc2V0OworCXVpbnQ4X3QJCXZhbHVlOworfTsKKworZW51bSB7CisJLyogZ2VuZXJh bCByb3V0aW5lcyAqLworCUlPQ05VTV9BQklWRVJTID0gMCwKKwlJT0NOVU1fUlVOID0gMSwKKwlJ T0NOVU1fU0VUX0NBUEFCSUxJVFkgPSAyLAorCUlPQ05VTV9HRVRfQ0FQQUJJTElUWSA9IDMsCisJ SU9DTlVNX1NVU1BFTkQgPSA0LAorCUlPQ05VTV9SRUlOSVQgPSA1LAorCisJLyogbWVtb3J5IGFw aXMgKi8KKwlJT0NOVU1fTUFQX01FTU9SWSA9IDEwLAkJCS8qIGRlcHJlY2F0ZWQgKi8KKwlJT0NO VU1fR0VUX01FTU9SWV9TRUcgPSAxMSwJCS8qIGRlcHJlY2F0ZWQgKi8KKwlJT0NOVU1fR0VUX0dQ QV9QTUFQID0gMTIsCisJSU9DTlVNX0dMQTJHUEEgPSAxMywKKwlJT0NOVU1fQUxMT0NfTUVNU0VH ID0gMTQsCisJSU9DTlVNX0dFVF9NRU1TRUcgPSAxNSwKKwlJT0NOVU1fTU1BUF9NRU1TRUcgPSAx NiwKKwlJT0NOVU1fTU1BUF9HRVRORVhUID0gMTcsCisKKwkvKiByZWdpc3Rlci9zdGF0ZSBhY2Nl c3NvcnMgKi8KKwlJT0NOVU1fU0VUX1JFR0lTVEVSID0gMjAsCisJSU9DTlVNX0dFVF9SRUdJU1RF UiA9IDIxLAorCUlPQ05VTV9TRVRfU0VHTUVOVF9ERVNDUklQVE9SID0gMjIsCisJSU9DTlVNX0dF VF9TRUdNRU5UX0RFU0NSSVBUT1IgPSAyMywKKworCS8qIGludGVycnVwdCBpbmplY3Rpb24gKi8K KwlJT0NOVU1fR0VUX0lOVElORk8gPSAyOCwKKwlJT0NOVU1fU0VUX0lOVElORk8gPSAyOSwKKwlJ T0NOVU1fSU5KRUNUX0VYQ0VQVElPTiA9IDMwLAorCUlPQ05VTV9MQVBJQ19JUlEgPSAzMSwKKwlJ T0NOVU1fSU5KRUNUX05NSSA9IDMyLAorCUlPQ05VTV9JT0FQSUNfQVNTRVJUX0lSUSA9IDMzLAor CUlPQ05VTV9JT0FQSUNfREVBU1NFUlRfSVJRID0gMzQsCisJSU9DTlVNX0lPQVBJQ19QVUxTRV9J UlEgPSAzNSwKKwlJT0NOVU1fTEFQSUNfTVNJID0gMzYsCisJSU9DTlVNX0xBUElDX0xPQ0FMX0lS USA9IDM3LAorCUlPQ05VTV9JT0FQSUNfUElOQ09VTlQgPSAzOCwKKwlJT0NOVU1fUkVTVEFSVF9J TlNUUlVDVElPTiA9IDM5LAorCisJLyogUENJIHBhc3MtdGhydSAqLworCUlPQ05VTV9CSU5EX1BQ VERFViA9IDQwLAorCUlPQ05VTV9VTkJJTkRfUFBUREVWID0gNDEsCisJSU9DTlVNX01BUF9QUFRE RVZfTU1JTyA9IDQyLAorCUlPQ05VTV9QUFRERVZfTVNJID0gNDMsCisJSU9DTlVNX1BQVERFVl9N U0lYID0gNDQsCisKKwkvKiBzdGF0aXN0aWNzICovCisJSU9DTlVNX1ZNX1NUQVRTID0gNTAsIAor CUlPQ05VTV9WTV9TVEFUX0RFU0MgPSA1MSwKKworCS8qIGtlcm5lbCBkZXZpY2Ugc3RhdGUgKi8K KwlJT0NOVU1fU0VUX1gyQVBJQ19TVEFURSA9IDYwLAorCUlPQ05VTV9HRVRfWDJBUElDX1NUQVRF ID0gNjEsCisJSU9DTlVNX0dFVF9IUEVUX0NBUEFCSUxJVElFUyA9IDYyLAorCisJLyogbGVnYWN5 IGludGVycnVwdCBpbmplY3Rpb24gKi8KKwlJT0NOVU1fSVNBX0FTU0VSVF9JUlEgPSA4MCwKKwlJ T0NOVU1fSVNBX0RFQVNTRVJUX0lSUSA9IDgxLAorCUlPQ05VTV9JU0FfUFVMU0VfSVJRID0gODIs CisJSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIgPSA4MywKKworCS8qIHZtX2NwdXNldCAqLwor CUlPQ05VTV9BQ1RJVkFURV9DUFUgPSA5MCwKKwlJT0NOVU1fR0VUX0NQVVNFVCA9IDkxLAorCisJ LyogUlRDICovCisJSU9DTlVNX1JUQ19SRUFEID0gMTAwLAorCUlPQ05VTV9SVENfV1JJVEUgPSAx MDEsCisJSU9DTlVNX1JUQ19TRVRUSU1FID0gMTAyLAorCUlPQ05VTV9SVENfR0VUVElNRSA9IDEw MywKK307CisKKyNkZWZpbmUJVk1fUlVOCQlcCisJX0lPV1IoJ3YnLCBJT0NOVU1fUlVOLCBzdHJ1 Y3Qgdm1fcnVuKQorI2RlZmluZQlWTV9TVVNQRU5ECVwKKwlfSU9XKCd2JywgSU9DTlVNX1NVU1BF TkQsIHN0cnVjdCB2bV9zdXNwZW5kKQorI2RlZmluZQlWTV9SRUlOSVQJXAorCV9JTygndicsIElP Q05VTV9SRUlOSVQpCisjZGVmaW5lCVZNX0FMTE9DX01FTVNFRwlcCisJX0lPVygndicsIElPQ05V TV9BTExPQ19NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVmaW5lCVZNX0dFVF9NRU1TRUcJ XAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9NRU1TRUcsIHN0cnVjdCB2bV9tZW1zZWcpCisjZGVm aW5lCVZNX01NQVBfTUVNU0VHCVwKKwlfSU9XKCd2JywgSU9DTlVNX01NQVBfTUVNU0VHLCBzdHJ1 Y3Qgdm1fbWVtbWFwKQorI2RlZmluZQlWTV9NTUFQX0dFVE5FWFQJXAorCV9JT1dSKCd2JywgSU9D TlVNX01NQVBfR0VUTkVYVCwgc3RydWN0IHZtX21lbW1hcCkKKyNkZWZpbmUJVk1fU0VUX1JFR0lT VEVSIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9SRUdJU1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVy KQorI2RlZmluZQlWTV9HRVRfUkVHSVNURVIgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9SRUdJ U1RFUiwgc3RydWN0IHZtX3JlZ2lzdGVyKQorI2RlZmluZQlWTV9TRVRfU0VHTUVOVF9ERVNDUklQ VE9SIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9TRUdNRU5UX0RFU0NSSVBUT1IsIHN0cnVjdCB2 bV9zZWdfZGVzYykKKyNkZWZpbmUJVk1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiBcCisJX0lPV1Io J3YnLCBJT0NOVU1fR0VUX1NFR01FTlRfREVTQ1JJUFRPUiwgc3RydWN0IHZtX3NlZ19kZXNjKQor I2RlZmluZQlWTV9JTkpFQ1RfRVhDRVBUSU9OCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lOSkVDVF9F WENFUFRJT04sIHN0cnVjdCB2bV9leGNlcHRpb24pCisjZGVmaW5lCVZNX0xBUElDX0lSUSAJCVwK KwlfSU9XKCd2JywgSU9DTlVNX0xBUElDX0lSUSwgc3RydWN0IHZtX2xhcGljX2lycSkKKyNkZWZp bmUJVk1fTEFQSUNfTE9DQUxfSVJRIAlcCisJX0lPVygndicsIElPQ05VTV9MQVBJQ19MT0NBTF9J UlEsIHN0cnVjdCB2bV9sYXBpY19pcnEpCisjZGVmaW5lCVZNX0xBUElDX01TSQkJXAorCV9JT1co J3YnLCBJT0NOVU1fTEFQSUNfTVNJLCBzdHJ1Y3Qgdm1fbGFwaWNfbXNpKQorI2RlZmluZQlWTV9J T0FQSUNfQVNTRVJUX0lSUQlcCisJX0lPVygndicsIElPQ05VTV9JT0FQSUNfQVNTRVJUX0lSUSwg c3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19ERUFTU0VSVF9JUlEJXAor CV9JT1coJ3YnLCBJT0NOVU1fSU9BUElDX0RFQVNTRVJUX0lSUSwgc3RydWN0IHZtX2lvYXBpY19p cnEpCisjZGVmaW5lCVZNX0lPQVBJQ19QVUxTRV9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSU9B UElDX1BVTFNFX0lSUSwgc3RydWN0IHZtX2lvYXBpY19pcnEpCisjZGVmaW5lCVZNX0lPQVBJQ19Q SU5DT1VOVAlcCisJX0lPUigndicsIElPQ05VTV9JT0FQSUNfUElOQ09VTlQsIGludCkKKyNkZWZp bmUJVk1fSVNBX0FTU0VSVF9JUlEJXAorCV9JT1coJ3YnLCBJT0NOVU1fSVNBX0FTU0VSVF9JUlEs IHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfREVBU1NFUlRfSVJRCVwKKwlfSU9X KCd2JywgSU9DTlVNX0lTQV9ERUFTU0VSVF9JUlEsIHN0cnVjdCB2bV9pc2FfaXJxKQorI2RlZmlu ZQlWTV9JU0FfUFVMU0VfSVJRCVwKKwlfSU9XKCd2JywgSU9DTlVNX0lTQV9QVUxTRV9JUlEsIHN0 cnVjdCB2bV9pc2FfaXJxKQorI2RlZmluZQlWTV9JU0FfU0VUX0lSUV9UUklHR0VSCVwKKwlfSU9X KCd2JywgSU9DTlVNX0lTQV9TRVRfSVJRX1RSSUdHRVIsIHN0cnVjdCB2bV9pc2FfaXJxX3RyaWdn ZXIpCisjZGVmaW5lCVZNX1NFVF9DQVBBQklMSVRZIFwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9D QVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJpbGl0eSkKKyNkZWZpbmUJVk1fR0VUX0NBUEFCSUxJ VFkgXAorCV9JT1dSKCd2JywgSU9DTlVNX0dFVF9DQVBBQklMSVRZLCBzdHJ1Y3Qgdm1fY2FwYWJp bGl0eSkKKyNkZWZpbmUJVk1fQklORF9QUFRERVYgXAorCV9JT1coJ3YnLCBJT0NOVU1fQklORF9Q UFRERVYsIHN0cnVjdCB2bV9wcHRkZXYpCisjZGVmaW5lCVZNX1VOQklORF9QUFRERVYgXAorCV9J T1coJ3YnLCBJT0NOVU1fVU5CSU5EX1BQVERFViwgc3RydWN0IHZtX3BwdGRldikKKyNkZWZpbmUJ Vk1fTUFQX1BQVERFVl9NTUlPIFwKKwlfSU9XKCd2JywgSU9DTlVNX01BUF9QUFRERVZfTU1JTywg c3RydWN0IHZtX3BwdGRldl9tbWlvKQorI2RlZmluZQlWTV9QUFRERVZfTVNJIFwKKwlfSU9XKCd2 JywgSU9DTlVNX1BQVERFVl9NU0ksIHN0cnVjdCB2bV9wcHRkZXZfbXNpKQorI2RlZmluZQlWTV9Q UFRERVZfTVNJWCBcCisJX0lPVygndicsIElPQ05VTV9QUFRERVZfTVNJWCwgc3RydWN0IHZtX3Bw dGRldl9tc2l4KQorI2RlZmluZSBWTV9JTkpFQ1RfTk1JIFwKKwlfSU9XKCd2JywgSU9DTlVNX0lO SkVDVF9OTUksIHN0cnVjdCB2bV9ubWkpCisjZGVmaW5lCVZNX1NUQVRTIFwKKwlfSU9XUigndics IElPQ05VTV9WTV9TVEFUUywgc3RydWN0IHZtX3N0YXRzKQorI2RlZmluZQlWTV9TVEFUX0RFU0Mg XAorCV9JT1dSKCd2JywgSU9DTlVNX1ZNX1NUQVRfREVTQywgc3RydWN0IHZtX3N0YXRfZGVzYykK KyNkZWZpbmUJVk1fU0VUX1gyQVBJQ19TVEFURSBcCisJX0lPVygndicsIElPQ05VTV9TRVRfWDJB UElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGljKQorI2RlZmluZQlWTV9HRVRfWDJBUElDX1NUQVRF IFwKKwlfSU9XUigndicsIElPQ05VTV9HRVRfWDJBUElDX1NUQVRFLCBzdHJ1Y3Qgdm1feDJhcGlj KQorI2RlZmluZQlWTV9HRVRfSFBFVF9DQVBBQklMSVRJRVMgXAorCV9JT1IoJ3YnLCBJT0NOVU1f R0VUX0hQRVRfQ0FQQUJJTElUSUVTLCBzdHJ1Y3Qgdm1faHBldF9jYXApCisjZGVmaW5lCVZNX0dF VF9HUEFfUE1BUCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0VUX0dQQV9QTUFQLCBzdHJ1Y3Qgdm1f Z3BhX3B0ZSkKKyNkZWZpbmUJVk1fR0xBMkdQQQlcCisJX0lPV1IoJ3YnLCBJT0NOVU1fR0xBMkdQ QSwgc3RydWN0IHZtX2dsYTJncGEpCisjZGVmaW5lCVZNX0FDVElWQVRFX0NQVQlcCisJX0lPVygn dicsIElPQ05VTV9BQ1RJVkFURV9DUFUsIHN0cnVjdCB2bV9hY3RpdmF0ZV9jcHUpCisjZGVmaW5l CVZNX0dFVF9DUFVTCVwKKwlfSU9XKCd2JywgSU9DTlVNX0dFVF9DUFVTRVQsIHN0cnVjdCB2bV9j cHVzZXQpCisjZGVmaW5lCVZNX1NFVF9JTlRJTkZPCVwKKwlfSU9XKCd2JywgSU9DTlVNX1NFVF9J TlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUJVk1fR0VUX0lOVElORk8JXAorCV9J T1dSKCd2JywgSU9DTlVNX0dFVF9JTlRJTkZPLCBzdHJ1Y3Qgdm1faW50aW5mbykKKyNkZWZpbmUg Vk1fUlRDX1dSSVRFIFwKKwlfSU9XKCd2JywgSU9DTlVNX1JUQ19XUklURSwgc3RydWN0IHZtX3J0 Y19kYXRhKQorI2RlZmluZSBWTV9SVENfUkVBRCBcCisJX0lPV1IoJ3YnLCBJT0NOVU1fUlRDX1JF QUQsIHN0cnVjdCB2bV9ydGNfZGF0YSkKKyNkZWZpbmUgVk1fUlRDX1NFVFRJTUUJXAorCV9JT1co J3YnLCBJT0NOVU1fUlRDX1NFVFRJTUUsIHN0cnVjdCB2bV9ydGNfdGltZSkKKyNkZWZpbmUgVk1f UlRDX0dFVFRJTUUJXAorCV9JT1IoJ3YnLCBJT0NOVU1fUlRDX0dFVFRJTUUsIHN0cnVjdCB2bV9y dGNfdGltZSkKKyNkZWZpbmUJVk1fUkVTVEFSVF9JTlNUUlVDVElPTiBcCisJX0lPVygndicsIElP Q05VTV9SRVNUQVJUX0lOU1RSVUNUSU9OLCBpbnQpCisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmggL3Vz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1tX2luc3RydWN0aW9uX2VtdWwuaAot LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1faW5zdHJ1Y3Rpb25fZW11 bC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvbWFjaGluZS92bW1faW5zdHJ1Y3Rpb25fZW11bC5oCTIwMTYtMDktMjkg MDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTE2IEBACisvKi0KKyAqIENvcHly aWdodCAoYykgMjAxMiBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRBUFAsIElOQyBgYEFT IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIE5FVEFQUCwgSU5DIE9SIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICog T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVu Zy8xMS4wL3N5cy9hbWQ2NC9pbmNsdWRlL3ZtbV9pbnN0cnVjdGlvbl9lbXVsLmggMjk4MDk0IDIw MTYtMDQtMTYgMDM6NDQ6NTBaIGdqYiAkCisgKi8KKworI2lmbmRlZglfVk1NX0lOU1RSVUNUSU9O X0VNVUxfSF8KKyNkZWZpbmUJX1ZNTV9JTlNUUlVDVElPTl9FTVVMX0hfCisKKyNpbmNsdWRlIDxz eXMvbW1hbi5oPgorCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIHRvIHJlYWQgYW5kIHdyaXRl IG1lbW9yeSByZWdpb25zLgorICovCit0eXBlZGVmIGludCAoKm1lbV9yZWdpb25fcmVhZF90KSh2 b2lkICp2bSwgaW50IGNwdWlkLCB1aW50NjRfdCBncGEsCisJCQkJIHVpbnQ2NF90ICpydmFsLCBp bnQgcnNpemUsIHZvaWQgKmFyZyk7CisKK3R5cGVkZWYgaW50ICgqbWVtX3JlZ2lvbl93cml0ZV90 KSh2b2lkICp2bSwgaW50IGNwdWlkLCB1aW50NjRfdCBncGEsCisJCQkJICB1aW50NjRfdCB3dmFs LCBpbnQgd3NpemUsIHZvaWQgKmFyZyk7CisKKy8qCisgKiBFbXVsYXRlIHRoZSBkZWNvZGVkICd2 aWUnIGluc3RydWN0aW9uLgorICoKKyAqIFRoZSBjYWxsYmFja3MgJ21ycicgYW5kICdtcncnIGVt dWxhdGUgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgbWVtb3J5IHJlZ2lvbgorICogY29udGFpbmlu ZyAnZ3BhJy4gJ21yYXJnJyBpcyBhbiBvcGFxdWUgYXJndW1lbnQgdGhhdCBpcyBwYXNzZWQgaW50 byB0aGUKKyAqIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqCisgKiAndm9pZCAqdm0nIHNob3VsZCBi ZSAnc3RydWN0IHZtIConIHdoZW4gY2FsbGVkIGZyb20ga2VybmVsIGNvbnRleHQgYW5kCisgKiAn c3RydWN0IHZtY3R4IConIHdoZW4gY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LgorICogcworICov CitpbnQgdm1tX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odm9pZCAqdm0sIGludCBjcHVpZCwgdWludDY0 X3QgZ3BhLCBzdHJ1Y3QgdmllICp2aWUsCisgICAgc3RydWN0IHZtX2d1ZXN0X3BhZ2luZyAqcGFn aW5nLCBtZW1fcmVnaW9uX3JlYWRfdCBtcnIsCisgICAgbWVtX3JlZ2lvbl93cml0ZV90IG1ydywg dm9pZCAqbXJhcmcpOworCitpbnQgdmllX3VwZGF0ZV9yZWdpc3Rlcih2b2lkICp2bSwgaW50IHZj cHVpZCwgZW51bSB2bV9yZWdfbmFtZSByZWcsCisgICAgdWludDY0X3QgdmFsLCBpbnQgc2l6ZSk7 CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgYW4gYWxpZ25tZW50IGNoZWNrIGV4Y2VwdGlvbiBzaG91 bGQgYmUgaW5qZWN0ZWQgYW5kIDAgb3RoZXJ3aXNlLgorICovCitpbnQgdmllX2FsaWdubWVudF9j aGVjayhpbnQgY3BsLCBpbnQgb3BlcmFuZF9zaXplLCB1aW50NjRfdCBjcjAsCisgICAgdWludDY0 X3QgcmZsYWdzLCB1aW50NjRfdCBnbGEpOworCisvKiBSZXR1cm5zIDEgaWYgdGhlICdnbGEnIGlz IG5vdCBjYW5vbmljYWwgYW5kIDAgb3RoZXJ3aXNlLiAqLworaW50IHZpZV9jYW5vbmljYWxfY2hl Y2soZW51bSB2bV9jcHVfbW9kZSBjcHVfbW9kZSwgdWludDY0X3QgZ2xhKTsKKwordWludDY0X3Qg dmllX3NpemUybWFzayhpbnQgc2l6ZSk7CisKK2ludCB2aWVfY2FsY3VsYXRlX2dsYShlbnVtIHZt X2NwdV9tb2RlIGNwdV9tb2RlLCBlbnVtIHZtX3JlZ19uYW1lIHNlZywKKyAgICBzdHJ1Y3Qgc2Vn X2Rlc2MgKmRlc2MsIHVpbnQ2NF90IG9mZiwgaW50IGxlbmd0aCwgaW50IGFkZHJzaXplLCBpbnQg cHJvdCwKKyAgICB1aW50NjRfdCAqZ2xhKTsKKworI2lmZGVmIF9LRVJORUwKKy8qCisgKiBBUElz IHRvIGZldGNoIGFuZCBkZWNvZGUgdGhlIGluc3RydWN0aW9uIGZyb20gbmVzdGVkIHBhZ2UgZmF1 bHQgaGFuZGxlci4KKyAqCisgKiAndmllJyBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxs aW5nICd2bW1fZmV0Y2hfaW5zdHJ1Y3Rpb24oKScKKyAqLworaW50IHZtbV9mZXRjaF9pbnN0cnVj dGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgY3B1aWQsCisJCQkgIHN0cnVjdCB2bV9ndWVzdF9wYWdp bmcgKmd1ZXN0X3BhZ2luZywKKwkJCSAgdWludDY0X3QgcmlwLCBpbnQgaW5zdF9sZW5ndGgsIHN0 cnVjdCB2aWUgKnZpZSwKKwkJCSAgaW50ICppc19mYXVsdCk7CisKKy8qCisgKiBUcmFuc2xhdGUg dGhlIGd1ZXN0IGxpbmVhciBhZGRyZXNzICdnbGEnIHRvIGEgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVz cy4KKyAqCisgKiByZXR2YWwJaXNfZmF1bHQJSW50ZXJwcmV0YXRpb24KKyAqICAgMAkJICAgMAkJ J2dwYScgY29udGFpbnMgcmVzdWx0IG9mIHRoZSB0cmFuc2xhdGlvbgorICogICAwCQkgICAxCQlB biBleGNlcHRpb24gd2FzIGluamVjdGVkIGludG8gdGhlIGd1ZXN0CisgKiBFRkFVTFQJICBOL0EJ CUFuIHVucmVjb3ZlcmFibGUgaHlwZXJ2aXNvciBlcnJvciBvY2N1cnJlZAorICovCitpbnQgdm1f Z2xhMmdwYShzdHJ1Y3Qgdm0gKnZtLCBpbnQgdmNwdWlkLCBzdHJ1Y3Qgdm1fZ3Vlc3RfcGFnaW5n ICpwYWdpbmcsCisgICAgdWludDY0X3QgZ2xhLCBpbnQgcHJvdCwgdWludDY0X3QgKmdwYSwgaW50 ICppc19mYXVsdCk7CisKK3ZvaWQgdmllX2luaXQoc3RydWN0IHZpZSAqdmllLCBjb25zdCBjaGFy ICppbnN0X2J5dGVzLCBpbnQgaW5zdF9sZW5ndGgpOworCisvKgorICogRGVjb2RlIHRoZSBpbnN0 cnVjdGlvbiBmZXRjaGVkIGludG8gJ3ZpZScgc28gaXQgY2FuIGJlIGVtdWxhdGVkLgorICoKKyAq ICdnbGEnIGlzIHRoZSBndWVzdCBsaW5lYXIgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgaGFyZHdh cmUgYXNzaXN0CisgKiB0aGF0IGNhdXNlZCB0aGUgbmVzdGVkIHBhZ2UgdGFibGUgZmF1bHQuIEl0 IGlzIHVzZWQgdG8gdmVyaWZ5IHRoYXQKKyAqIHRoZSBzb2Z0d2FyZSBpbnN0cnVjdGlvbiBkZWNv ZGluZyBpcyBpbiBhZ3JlZW1lbnQgd2l0aCB0aGUgaGFyZHdhcmUuCisgKiAKKyAqIFNvbWUgaGFy ZHdhcmUgYXNzaXN0cyBkbyBub3QgcHJvdmlkZSB0aGUgJ2dsYScgdG8gdGhlIGh5cGVydmlzb3Iu CisgKiBUbyBza2lwIHRoZSAnZ2xhJyB2ZXJpZmljYXRpb24gZm9yIHRoaXMgb3IgYW55IG90aGVy IHJlYXNvbiBwYXNzCisgKiBpbiBWSUVfSU5WQUxJRF9HTEEgaW5zdGVhZC4KKyAqLworI2RlZmlu ZQlWSUVfSU5WQUxJRF9HTEEJCSgxVUwgPDwgNjMpCS8qIGEgbm9uLWNhbm9uaWNhbCBhZGRyZXNz ICovCitpbnQgdm1tX2RlY29kZV9pbnN0cnVjdGlvbihzdHJ1Y3Qgdm0gKnZtLCBpbnQgY3B1aWQs IHVpbnQ2NF90IGdsYSwKKwkJCSAgIGVudW0gdm1fY3B1X21vZGUgY3B1X21vZGUsIGludCBjc2Qs IHN0cnVjdCB2aWUgKnZpZSk7CisjZW5kaWYJLyogX0tFUk5FTCAqLworCisjZW5kaWYJLyogX1ZN TV9JTlNUUlVDVElPTl9FTVVMX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxl cy9uZXRtYXAvbWFjaGluZS92bXBhcmFtLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUvdm1wYXJhbS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3Zt cGFyYW0uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUvdm1wYXJhbS5oCTIwMTYtMDktMjkgMDA6MjQ6NTQu MDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMjI3IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg MTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5NCBKb2huIFMuIER5c29uCisg KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzIFBldGVyIFdlbW0K KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJv bSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogV2lsbGlhbSBKb2xpdHou CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0 cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5 IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJ QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1Ig Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9t OiBAKCMpdm1wYXJhbS5oCTUuOSAoQmVya2VsZXkpIDUvMTIvOTEKKyAqICRGcmVlQlNEOiByZWxl bmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS92bXBhcmFtLmggMjg0MTQ3IDIwMTUtMDYtMDggMDQ6 NTk6MzJaIGFsYyAkCisgKi8KKworCisjaWZuZGVmIF9NQUNISU5FX1ZNUEFSQU1fSF8KKyNkZWZp bmUJX01BQ0hJTkVfVk1QQVJBTV9IXyAxCisKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBjb25z dGFudHMgZm9yIEFNRDY0LgorICovCisKKy8qCisgKiBWaXJ0dWFsIG1lbW9yeSByZWxhdGVkIGNv bnN0YW50cywgYWxsIGluIGJ5dGVzCisgKi8KKyNkZWZpbmUJTUFYVFNJWgkJKDEyOFVMKjEwMjQq MTAyNCkJLyogbWF4IHRleHQgc2l6ZSAqLworI2lmbmRlZiBERkxEU0laCisjZGVmaW5lCURGTERT SVoJCSgzMjc2OFVMKjEwMjQqMTAyNCkJLyogaW5pdGlhbCBkYXRhIHNpemUgbGltaXQgKi8KKyNl bmRpZgorI2lmbmRlZiBNQVhEU0laCisjZGVmaW5lCU1BWERTSVoJCSgzMjc2OFVMKjEwMjQqMTAy NCkJLyogbWF4IGRhdGEgc2l6ZSAqLworI2VuZGlmCisjaWZuZGVmCURGTFNTSVoKKyNkZWZpbmUJ REZMU1NJWgkJKDhVTCoxMDI0KjEwMjQpCQkvKiBpbml0aWFsIHN0YWNrIHNpemUgbGltaXQgKi8K KyNlbmRpZgorI2lmbmRlZglNQVhTU0laCisjZGVmaW5lCU1BWFNTSVoJCSg1MTJVTCoxMDI0KjEw MjQpCS8qIG1heCBzdGFjayBzaXplICovCisjZW5kaWYKKyNpZm5kZWYgU0dST1dTSVoKKyNkZWZp bmUJU0dST1dTSVoJKDEyOFVMKjEwMjQpCQkvKiBhbW91bnQgdG8gZ3JvdyBzdGFjayAqLworI2Vu ZGlmCisKKy8qCisgKiBXZSBwcm92aWRlIGEgbWFjaGluZSBzcGVjaWZpYyBzaW5nbGUgcGFnZSBh bGxvY2F0b3IgdGhyb3VnaCB0aGUgdXNlCisgKiBvZiB0aGUgZGlyZWN0IG1hcHBlZCBzZWdtZW50 LiAgVGhpcyB1c2VzIDJNQiBwYWdlcyBmb3IgcmVkdWNlZAorICogVExCIHByZXNzdXJlLgorICov CisjZGVmaW5lCVVNQV9NRF9TTUFMTF9BTExPQworCisvKgorICogVGhlIHBoeXNpY2FsIGFkZHJl c3Mgc3BhY2UgaXMgZGVuc2VseSBwb3B1bGF0ZWQuCisgKi8KKyNkZWZpbmUJVk1fUEhZU1NFR19E RU5TRQorCisvKgorICogVGhlIG51bWJlciBvZiBQSFlTU0VHIGVudHJpZXMgbXVzdCBiZSBvbmUg Z3JlYXRlciB0aGFuIHRoZSBudW1iZXIKKyAqIG9mIHBoeXNfYXZhaWwgZW50cmllcyBiZWNhdXNl IHRoZSBwaHlzX2F2YWlsIGVudHJ5IHRoYXQgc3BhbnMgdGhlCisgKiBsYXJnZXN0IHBoeXNpY2Fs IGFkZHJlc3MgdGhhdCBpcyBhY2Nlc3NpYmxlIGJ5IElTQSBETUEgaXMgc3BsaXQKKyAqIGludG8g dHdvIFBIWVNTRUcgZW50cmllcy4gCisgKi8KKyNkZWZpbmUJVk1fUEhZU1NFR19NQVgJCTYzCisK Ky8qCisgKiBDcmVhdGUgdHdvIGZyZWUgcGFnZSBwb29sczogVk1fRlJFRVBPT0xfREVGQVVMVCBp cyB0aGUgZGVmYXVsdCBwb29sCisgKiBmcm9tIHdoaWNoIHBoeXNpY2FsIHBhZ2VzIGFyZSBhbGxv Y2F0ZWQgYW5kIFZNX0ZSRUVQT09MX0RJUkVDVCBpcworICogdGhlIHBvb2wgZnJvbSB3aGljaCBw aHlzaWNhbCBwYWdlcyBmb3IgcGFnZSB0YWJsZXMgYW5kIHNtYWxsIFVNQQorICogb2JqZWN0cyBh cmUgYWxsb2NhdGVkLgorICovCisjZGVmaW5lCVZNX05GUkVFUE9PTAkJMgorI2RlZmluZQlWTV9G UkVFUE9PTF9ERUZBVUxUCTAKKyNkZWZpbmUJVk1fRlJFRVBPT0xfRElSRUNUCTEKKworLyoKKyAq IENyZWF0ZSB1cCB0byB0aHJlZSBmcmVlIHBhZ2UgbGlzdHM6IFZNX0ZSRUVMSVNUX0RNQTMyIGlz IGZvciBwaHlzaWNhbCBwYWdlcworICogdGhhdCBoYXZlIHBoeXNpY2FsIGFkZHJlc3NlcyBiZWxv dyA0RyBidXQgYXJlIG5vdCBhY2Nlc3NpYmxlIGJ5IElTQSBETUEsCisgKiBhbmQgVk1fRlJFRUxJ U1RfSVNBRE1BIGlzIGZvciBwaHlzaWNhbCBwYWdlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGJ5IElT QQorICogRE1BLgorICovCisjZGVmaW5lCVZNX05GUkVFTElTVAkJMworI2RlZmluZQlWTV9GUkVF TElTVF9ERUZBVUxUCTAKKyNkZWZpbmUJVk1fRlJFRUxJU1RfRE1BMzIJMQorI2RlZmluZQlWTV9G UkVFTElTVF9JU0FETUEJMgorCisvKgorICogQ3JlYXRlIHRoZSBETUEzMiBmcmVlIGxpc3Qgb25s eSBpZiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIGFib3ZlCisgKiBwaHlzaWNhbCBhZGRy ZXNzIDRHIGlzIGF0IGxlYXN0IDE2TSwgd2hpY2ggYW1vdW50cyB0byA2NEdCIG9mIHBoeXNpY2Fs CisgKiBtZW1vcnkuCisgKi8KKyNkZWZpbmUJVk1fRE1BMzJfTlBBR0VTX1RIUkVTSE9MRAkxNjc3 NzIxNgorCisvKgorICogQW4gYWxsb2NhdGlvbiBzaXplIG9mIDE2TUIgaXMgc3VwcG9ydGVkIGlu IG9yZGVyIHRvIG9wdGltaXplIHRoZQorICogdXNlIG9mIHRoZSBkaXJlY3QgbWFwIGJ5IFVNQS4g IFNwZWNpZmljYWxseSwgYSBjYWNoZSBsaW5lIGNvbnRhaW5zCisgKiBhdCBtb3N0IDggUERFcywg Y29sbGVjdGl2ZWx5IG1hcHBpbmcgMTZNQiBvZiBwaHlzaWNhbCBtZW1vcnkuICBCeQorICogcmVk dWNpbmcgdGhlIG51bWJlciBvZiBkaXN0aW5jdCAxNk1CICJwYWdlcyIgdGhhdCBhcmUgdXNlZCBi eSBVTUEsCisgKiB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRvciByZWR1Y2VzIHRoZSBsaWtl bGlob29kIG9mIGJvdGggMk1CCisgKiBwYWdlIFRMQiBtaXNzZXMgYW5kIGNhY2hlIG1pc3NlcyBj YXVzZWQgYnkgMk1CIHBhZ2UgVExCIG1pc3Nlcy4KKyAqLworI2RlZmluZQlWTV9ORlJFRU9SREVS CQkxMworCisvKgorICogRW5hYmxlIHN1cGVycGFnZSByZXNlcnZhdGlvbnM6IDEgbGV2ZWwuCisg Ki8KKyNpZm5kZWYJVk1fTlJFU0VSVkxFVkVMCisjZGVmaW5lCVZNX05SRVNFUlZMRVZFTAkJMQor I2VuZGlmCisKKy8qCisgKiBMZXZlbCAwIHJlc2VydmF0aW9ucyBjb25zaXN0IG9mIDUxMiBwYWdl cy4KKyAqLworI2lmbmRlZglWTV9MRVZFTF8wX09SREVSCisjZGVmaW5lCVZNX0xFVkVMXzBfT1JE RVIJOQorI2VuZGlmCisKKyNpZmRlZglTTVAKKyNkZWZpbmUJUEFfTE9DS19DT1VOVAkyNTYKKyNl bmRpZgorCisvKgorICogVmlydHVhbCBhZGRyZXNzZXMgb2YgdGhpbmdzLiAgRGVyaXZlZCBmcm9t IHRoZSBwYWdlIGRpcmVjdG9yeSBhbmQKKyAqIHBhZ2UgdGFibGUgaW5kZXhlcyBmcm9tIHBtYXAu aCBmb3IgcHJlY2lzaW9uLgorICoKKyAqIDB4MDAwMDAwMDAwMDAwMDAwMCAtIDB4MDAwMDdmZmZm ZmZmZmZmZiAgIHVzZXIgbWFwCisgKiAweDAwMDA4MDAwMDAwMDAwMDAgLSAweGZmZmY3ZmZmZmZm ZmZmZmYgICBkb2VzIG5vdCBleGlzdCAoaG9sZSkKKyAqIDB4ZmZmZjgwMDAwMDAwMDAwMCAtIDB4 ZmZmZjgwNDAyMDEwMGZmZiAgIHJlY3Vyc2l2ZSBwYWdlIHRhYmxlICg1MTJHQiBzbG90KQorICog MHhmZmZmODA0MDIwMTAxMDAwIC0gMHhmZmZmZjdmZmZmZmZmZmZmICAgdW51c2VkCisgKiAweGZm ZmZmODAwMDAwMDAwMDAgLSAweGZmZmZmYmZmZmZmZmZmZmYgICA0VEIgZGlyZWN0IG1hcAorICog MHhmZmZmZmMwMDAwMDAwMDAwIC0gMHhmZmZmZmRmZmZmZmZmZmZmICAgdW51c2VkCisgKiAweGZm ZmZmZTAwMDAwMDAwMDAgLSAweGZmZmZmZmZmZmZmZmZmZmYgICAyVEIga2VybmVsIG1hcAorICoK KyAqIFdpdGhpbiB0aGUga2VybmVsIG1hcDoKKyAqCisgKiAweGZmZmZmZmZmODAwMDAwMDAgICAg ICAgICAgICAgICAgICAgICAgICBLRVJOQkFTRQorICovCisKKyNkZWZpbmUJVk1fTUlOX0tFUk5F TF9BRERSRVNTCUtWQUREUihLUE1MNEJBU0UsIDAsIDAsIDApCisjZGVmaW5lCVZNX01BWF9LRVJO RUxfQUREUkVTUwlLVkFERFIoS1BNTDRCQVNFICsgTktQTUw0RSAtIDEsIFwKKwkJCQkJTlBEUEVQ Ry0xLCBOUERFUEctMSwgTlBURVBHLTEpCisKKyNkZWZpbmUJRE1BUF9NSU5fQUREUkVTUwlLVkFE RFIoRE1QTUw0SSwgMCwgMCwgMCkKKyNkZWZpbmUJRE1BUF9NQVhfQUREUkVTUwlLVkFERFIoRE1Q TUw0SSArIE5ETVBNTDRFLCAwLCAwLCAwKQorCisjZGVmaW5lCUtFUk5CQVNFCQlLVkFERFIoS1BN TDRJLCBLUERQSSwgMCwgMCkKKworI2RlZmluZQlVUFRfTUFYX0FERFJFU1MJCUtWQUREUihQTUw0 UE1MNEksIFBNTDRQTUw0SSwgUE1MNFBNTDRJLCBQTUw0UE1MNEkpCisjZGVmaW5lCVVQVF9NSU5f QUREUkVTUwkJS1ZBRERSKFBNTDRQTUw0SSwgMCwgMCwgMCkKKworI2RlZmluZQlWTV9NQVhVU0VS X0FERFJFU1MJVVZBRERSKE5VUE1MNEUsIDAsIDAsIDApCisKKyNkZWZpbmUJU0hBUkVEUEFHRQkJ KFZNX01BWFVTRVJfQUREUkVTUyAtIFBBR0VfU0laRSkKKyNkZWZpbmUJVVNSU1RBQ0sJCVNIQVJF RFBBR0UKKworI2RlZmluZQlWTV9NQVhfQUREUkVTUwkJVVBUX01BWF9BRERSRVNTCisjZGVmaW5l CVZNX01JTl9BRERSRVNTCQkoMCkKKworLyoKKyAqIFhYWCBBbGxvd2luZyBkbWFwbGltaXQgPT0g MCBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciB2dCg0KSBlZmlmYidzCisgKiBlYXJseSB1 c2Ugb2YgUEhZU19UT19ETUFQIGJlZm9yZSB0aGUgbWFwcGluZyBpcyBhY3R1YWxseSBzZXR1cC4g VGhpcyB3b3JrcworICogYmVjYXVzZSB0aGUgcmVzdWx0IGlzIG5vdCBhY3R1YWxseSBhY2Nlc3Nl ZCB1bnRpbCBsYXRlciwgYnV0IHRoZSBlYXJseQorICogdnQgZmIgc3RhcnR1cCBuZWVkcyB0byBi ZSByZXdvcmtlZC4KKyAqLworI2RlZmluZQlQSFlTX1RPX0RNQVAoeCkJKHsJCQkJCQlcCisJS0FT U0VSVChkbWFwbGltaXQgPT0gMCB8fCAoeCkgPCBkbWFwbGltaXQsCQkJXAorCSAgICAoInBoeXNp Y2FsIGFkZHJlc3MgJSNqeCBub3QgY292ZXJlZCBieSB0aGUgRE1BUCIsCQlcCisJICAgICh1aW50 bWF4X3QpeCkpOwkJCQkJCVwKKwkoeCkgfCBETUFQX01JTl9BRERSRVNTOyB9KQorCisjZGVmaW5l CURNQVBfVE9fUEhZUyh4KQkoewkJCQkJCVwKKwlLQVNTRVJUKCh4KSA8IChETUFQX01JTl9BRERS RVNTICsgZG1hcGxpbWl0KSAmJgkJCVwKKwkgICAgKHgpID49IERNQVBfTUlOX0FERFJFU1MsCQkJ CQlcCisJICAgICgidmlydHVhbCBhZGRyZXNzICUjanggbm90IGNvdmVyZWQgYnkgdGhlIERNQVAi LAkJXAorCSAgICAodWludG1heF90KXgpKTsJCQkJCQlcCisJKHgpICYgfkRNQVBfTUlOX0FERFJF U1M7IH0pCisKKy8qCisgKiBIb3cgbWFueSBwaHlzaWNhbCBwYWdlcyBwZXIga21lbSBhcmVuYSB2 aXJ0dWFsIHBhZ2UuCisgKi8KKyNpZm5kZWYgVk1fS01FTV9TSVpFX1NDQUxFCisjZGVmaW5lCVZN X0tNRU1fU0laRV9TQ0FMRQkoMSkKKyNlbmRpZgorCisvKgorICogT3B0aW9uYWwgY2VpbGluZyAo aW4gYnl0ZXMpIG9uIHRoZSBzaXplIG9mIHRoZSBrbWVtIGFyZW5hOiA2MCUgb2YgdGhlCisgKiBr ZXJuZWwgbWFwLgorICovCisjaWZuZGVmIFZNX0tNRU1fU0laRV9NQVgKKyNkZWZpbmUJVk1fS01F TV9TSVpFX01BWAkoKFZNX01BWF9LRVJORUxfQUREUkVTUyAtIFwKKyAgICBWTV9NSU5fS0VSTkVM X0FERFJFU1MgKyAxKSAqIDMgLyA1KQorI2VuZGlmCisKKy8qIGluaXRpYWwgcGFnZWluIHNpemUg b2YgYmVnaW5uaW5nIG9mIGV4ZWN1dGFibGUgZmlsZSAqLworI2lmbmRlZiBWTV9JTklUSUFMX1BB R0VJTgorI2RlZmluZQlWTV9JTklUSUFMX1BBR0VJTgkxNgorI2VuZGlmCisKKyNkZWZpbmUJWkVS T19SRUdJT05fU0laRQkoMiAqIDEwMjQgKiAxMDI0KQkvKiAyTUIgKi8KKworI2VuZGlmIC8qIF9N QUNISU5FX1ZNUEFSQU1fSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC9tYWNoaW5lL3hlbi9oeXBlcmNhbGwuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv bWFjaGluZS94ZW4vaHlwZXJjYWxsLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUveGVuL2h5cGVyY2FsbC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS94ZW4vaHlwZXJjYWxsLmgJ MjAxNi0wOS0yOSAwMDoyNDo1NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0MzIgQEAKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAqIGh5cGVyY2FsbC5oCisgKiAKKyAqIEZyZWVCU0Qtc3Bl Y2lmaWMgaHlwZXJ2aXNvciBoYW5kbGluZy4KKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLTIw MDQsIEsgQSBGcmFzZXIKKyAqIAorICogNjQtYml0IHVwZGF0ZXM6CisgKiAgIEJlbmphbWluIExp dSA8YmVuamFtaW4ubGl1QGludGVsLmNvbT4KKyAqICAgSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWpp bWFAaW50ZWwuY29tPgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBvciwgd2hlbiBkaXN0cmlidXRl ZAorICogc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgb3IgaW5jb3Jwb3JhdGVkIGlu dG8gb3RoZXIKKyAqIHNvZnR3YXJlIHBhY2thZ2VzLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg bGljZW5zZToKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2Ug ZmlsZSAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0Cisg KiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu Y2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT b2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g SU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqICRG cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMvYW1kNjQvaW5jbHVkZS94ZW4vaHlwZXJjYWxsLmggMjg5 MDMzIDIwMTUtMTAtMDggMTY6Mzk6NDNaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfX01BQ0hJ TkVfWEVOX0hZUEVSQ0FMTF9IX18KKyNkZWZpbmUgX19NQUNISU5FX1hFTl9IWVBFUkNBTExfSF9f CisKKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKworI2lmbmRlZiBfX1hFTl9IWVBFUlZJU09SX0hf XworIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2Vu ZGlmCisKK2V4dGVybiBjaGFyICpoeXBlcmNhbGxfcGFnZTsKKworI2RlZmluZSBfX1NUUih4KSAj eAorI2RlZmluZSBTVFIoeCkgX19TVFIoeCkKKyNkZWZpbmUJRU5PWEVOU1lTCTM4CisjZGVmaW5l IENPTkZJR19YRU5fQ09NUEFUCTB4MDMwMDAyCisjZGVmaW5lIF9fbXVzdF9jaGVjaworCisjZGVm aW5lIEhZUEVSQ0FMTF9TVFIobmFtZSkJCQkJCVwKKwkiY2FsbCBoeXBlcmNhbGxfcGFnZSArICgi U1RSKF9fSFlQRVJWSVNPUl8jI25hbWUpIiAqIDMyKSIKKworI2RlZmluZSBfaHlwZXJjYWxsMCh0 eXBlLCBuYW1lKQkJCVwKKyh7CQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCVwKKwlfX2FzbV9fIHZv bGF0aWxlICgJCQkJXAorCQlIWVBFUkNBTExfU1RSKG5hbWUpCQlcCisJCTogIj1hIiAoX19yZXMp CQkJXAorCQk6CQkJCVwKKwkJOiAibWVtb3J5IiApOwkJCVwKKwlfX3JlczsJCQkJCVwKK30pCisK KyNkZWZpbmUgX2h5cGVyY2FsbDEodHlwZSwgbmFtZSwgYTEpCQkJCVwKKyh7CQkJCQkJCQlcCisJ dHlwZSBfX3JlczsJCQkJCQlcCisJbG9uZyBfX2lnbjE7CQkJCQkJXAorCV9fYXNtX18gdm9sYXRp bGUgKAkJCQkJCVwKKwkJSFlQRVJDQUxMX1NUUihuYW1lKQkJCQlcCisJCTogIj1hIiAoX19yZXMp LCAiPUQiIChfX2lnbjEpCQkJXAorCQk6ICIxIiAoKGxvbmcpKGExKSkJCQkJXAorCQk6ICJtZW1v cnkiICk7CQkJCQlcCisJX19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDIo dHlwZSwgbmFtZSwgYTEsIGEyKQkJCQlcCisoewkJCQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCQkJ XAorCWxvbmcgX19pZ24xLCBfX2lnbjI7CQkJCQlcCisJX19hc21fXyB2b2xhdGlsZSAoCQkJCQkJ XAorCQlIWVBFUkNBTExfU1RSKG5hbWUpCQkJCVwKKwkJOiAiPWEiIChfX3JlcyksICI9RCIgKF9f aWduMSksICI9UyIgKF9faWduMikJXAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcp KGEyKSkJCVwKKwkJOiAibWVtb3J5IiApOwkJCQkJXAorCV9fcmVzOwkJCQkJCQlcCit9KQorCisj ZGVmaW5lIF9oeXBlcmNhbGwzKHR5cGUsIG5hbWUsIGExLCBhMiwgYTMpCQkJXAorKHsJCQkJCQkJ CVwKKwl0eXBlIF9fcmVzOwkJCQkJCVwKKwlsb25nIF9faWduMSwgX19pZ24yLCBfX2lnbjM7CQkJ CVwKKwlfX2FzbV9fIHZvbGF0aWxlICgJCQkJCQlcCisJCUhZUEVSQ0FMTF9TVFIobmFtZSkJCQkJ XAorCQk6ICI9YSIgKF9fcmVzKSwgIj1EIiAoX19pZ24xKSwgIj1TIiAoX19pZ24yKSwgCVwKKwkJ Ij1kIiAoX19pZ24zKQkJCQkJXAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEy KSksCQlcCisJCSIzIiAoKGxvbmcpKGEzKSkJCQkJXAorCQk6ICJtZW1vcnkiICk7CQkJCQlcCisJ X19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDQodHlwZSwgbmFtZSwgYTEs IGEyLCBhMywgYTQpCQkJXAorKHsJCQkJCQkJCVwKKwl0eXBlIF9fcmVzOwkJCQkJCVwKKwlsb25n IF9faWduMSwgX19pZ24yLCBfX2lnbjM7CQkJCVwKKwlyZWdpc3RlciBsb25nIF9fYXJnNCBfX2Fz bV9fKCJyMTAiKSA9IChsb25nKShhNCk7CQlcCisJX19hc21fXyB2b2xhdGlsZSAoCQkJCQkJXAor CQlIWVBFUkNBTExfU1RSKG5hbWUpCQkJCVwKKwkJOiAiPWEiIChfX3JlcyksICI9RCIgKF9faWdu MSksICI9UyIgKF9faWduMiksCVwKKwkJICAiPWQiIChfX2lnbjMpLCAiK3IiIChfX2FyZzQpCQkJ XAorCQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksCQlcCisJCSAgIjMiICgo bG9uZykoYTMpKQkJCQlcCisJCTogIm1lbW9yeSIgKTsJCQkJCVwKKwlfX3JlczsJCQkJCQkJXAor fSkKKworI2RlZmluZSBfaHlwZXJjYWxsNSh0eXBlLCBuYW1lLCBhMSwgYTIsIGEzLCBhNCwgYTUp CQlcCisoewkJCQkJCQkJXAorCXR5cGUgX19yZXM7CQkJCQkJXAorCWxvbmcgX19pZ24xLCBfX2ln bjIsIF9faWduMzsJCQkJXAorCXJlZ2lzdGVyIGxvbmcgX19hcmc0IF9fYXNtX18oInIxMCIpID0g KGxvbmcpKGE0KTsJCVwKKwlyZWdpc3RlciBsb25nIF9fYXJnNSBfX2FzbV9fKCJyOCIpID0gKGxv bmcpKGE1KTsJCVwKKwlfX2FzbV9fIHZvbGF0aWxlICgJCQkJCQlcCisJCUhZUEVSQ0FMTF9TVFIo bmFtZSkJCQkJXAorCQk6ICI9YSIgKF9fcmVzKSwgIj1EIiAoX19pZ24xKSwgIj1TIiAoX19pZ24y KSwJXAorCQkgICI9ZCIgKF9faWduMyksICIrciIgKF9fYXJnNCksICIrciIgKF9fYXJnNSkJXAor CQk6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksCQlcCisJCSAgIjMiICgobG9u ZykoYTMpKQkJCQlcCisJCTogIm1lbW9yeSIgKTsJCQkJCVwKKwlfX3JlczsJCQkJCQkJXAorfSkK Kworc3RhdGljIGlubGluZSBpbnQKK3ByaXZjbWRfaHlwZXJjYWxsKGxvbmcgb3AsIGxvbmcgYTEs IGxvbmcgYTIsIGxvbmcgYTMsIGxvbmcgYTQsIGxvbmcgYTUpCit7CisJaW50IF9fcmVzOworCWxv bmcgX19pZ24xLCBfX2lnbjIsIF9faWduMzsKKwlyZWdpc3RlciBsb25nIF9fYXJnNCBfX2FzbV9f KCJyMTAiKSA9IChsb25nKShhNCk7CisJcmVnaXN0ZXIgbG9uZyBfX2FyZzUgX19hc21fXygicjgi KSA9IChsb25nKShhNSk7CisJbG9uZyBfX2NhbGwgPSAobG9uZykmaHlwZXJjYWxsX3BhZ2UgKyAo b3AgKiAzMik7CisKKwlfX2FzbV9fIHZvbGF0aWxlICgKKwkJImNhbGwgKiVbY2FsbF0iCisJCTog Ij1hIiAoX19yZXMpLCAiPUQiIChfX2lnbjEpLCAiPVMiIChfX2lnbjIpLAorCQkgICI9ZCIgKF9f aWduMyksICIrciIgKF9fYXJnNCksICIrciIgKF9fYXJnNSkKKwkJOiAiMSIgKChsb25nKShhMSkp LCAiMiIgKChsb25nKShhMikpLAorCQkgICIzIiAoKGxvbmcpKGEzKSksIFtjYWxsXSAiYSIgKF9f Y2FsbCkKKwkJOiAibWVtb3J5IiApOworCisJcmV0dXJuIChfX3Jlcyk7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9zZXRfdHJhcF90YWJsZSgKKwljb25z dCB0cmFwX2luZm9fdCAqdGFibGUpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwxKGludCwgc2V0X3Ry YXBfdGFibGUsIHRhYmxlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitI WVBFUlZJU09SX21tdV91cGRhdGUoCisJbW11X3VwZGF0ZV90ICpyZXEsIHVuc2lnbmVkIGludCBj b3VudCwgdW5zaWduZWQgaW50ICpzdWNjZXNzX2NvdW50LAorCWRvbWlkX3QgZG9taWQpCit7CisJ cmV0dXJuIF9oeXBlcmNhbGw0KGludCwgbW11X3VwZGF0ZSwgcmVxLCBjb3VudCwgc3VjY2Vzc19j b3VudCwgZG9taWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVS VklTT1JfbW11ZXh0X29wKAorCXN0cnVjdCBtbXVleHRfb3AgKm9wLCB1bnNpZ25lZCBpbnQgY291 bnQsIHVuc2lnbmVkIGludCAqc3VjY2Vzc19jb3VudCwKKwlkb21pZF90IGRvbWlkKQoreworCXJl dHVybiBfaHlwZXJjYWxsNChpbnQsIG1tdWV4dF9vcCwgb3AsIGNvdW50LCBzdWNjZXNzX2NvdW50 LCBkb21pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNP Ul9zZXRfZ2R0KAorCXVuc2lnbmVkIGxvbmcgKmZyYW1lX2xpc3QsIHVuc2lnbmVkIGludCBlbnRy aWVzKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHNldF9nZHQsIGZyYW1lX2xpc3QsIGVu dHJpZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1Jf c3RhY2tfc3dpdGNoKAorCXVuc2lnbmVkIGxvbmcgc3MsIHVuc2lnbmVkIGxvbmcgZXNwKQorewor CXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHN0YWNrX3N3aXRjaCwgc3MsIGVzcCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9zZXRfY2FsbGJhY2tzKAor CXVuc2lnbmVkIGxvbmcgZXZlbnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBmYWlsc2FmZV9hZGRy ZXNzLCAKKwl1bnNpZ25lZCBsb25nIHN5c2NhbGxfYWRkcmVzcykKK3sKKwlyZXR1cm4gX2h5cGVy Y2FsbDMoaW50LCBzZXRfY2FsbGJhY2tzLAorCQkJICAgZXZlbnRfYWRkcmVzcywgZmFpbHNhZmVf YWRkcmVzcywgc3lzY2FsbF9hZGRyZXNzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVS VklTT1JfZnB1X3Rhc2tzd2l0Y2goCisJaW50IHNldCkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDEo aW50LCBmcHVfdGFza3N3aXRjaCwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0 X2NoZWNrCitIWVBFUlZJU09SX3NjaGVkX29wX2NvbXBhdCgKKwlpbnQgY21kLCB1bnNpZ25lZCBs b25nIGFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCBzY2hlZF9vcF9jb21wYXQsIGNt ZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S X3NjaGVkX29wKAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIo aW50LCBzY2hlZF9vcCwgY21kLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgX19tdXN0 X2NoZWNrCitIWVBFUlZJU09SX3NldF90aW1lcl9vcCgKKwl1aW50NjRfdCB0aW1lb3V0KQorewor CXJldHVybiBfaHlwZXJjYWxsMShsb25nLCBzZXRfdGltZXJfb3AsIHRpbWVvdXQpOworfQorCitz dGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfcGxhdGZvcm1fb3AoCisJ c3RydWN0IHhlbl9wbGF0Zm9ybV9vcCAqcGxhdGZvcm1fb3ApCit7CisJcGxhdGZvcm1fb3AtPmlu dGVyZmFjZV92ZXJzaW9uID0gWEVOUEZfSU5URVJGQUNFX1ZFUlNJT047CisJcmV0dXJuIF9oeXBl cmNhbGwxKGludCwgcGxhdGZvcm1fb3AsIHBsYXRmb3JtX29wKTsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09SX3NldF9kZWJ1Z3JlZygKKwl1bnNpZ25lZCBp bnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQs IHNldF9kZWJ1Z3JlZywgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg bG9uZyBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfZ2V0X2RlYnVncmVnKAorCXVuc2lnbmVkIGlu dCByZWcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwxKHVuc2lnbmVkIGxvbmcsIGdldF9kZWJ1Z3Jl ZywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S X3VwZGF0ZV9kZXNjcmlwdG9yKAorCXVuc2lnbmVkIGxvbmcgbWEsIHVuc2lnbmVkIGxvbmcgd29y ZCkKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCB1cGRhdGVfZGVzY3JpcHRvciwgbWEsIHdv cmQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfbWVt b3J5X29wKAorCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gX2h5cGVy Y2FsbDIoaW50LCBtZW1vcnlfb3AsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQg X19tdXN0X2NoZWNrCitIWVBFUlZJU09SX211bHRpY2FsbCgKKwltdWx0aWNhbGxfZW50cnlfdCAq Y2FsbF9saXN0LCB1bnNpZ25lZCBpbnQgbnJfY2FsbHMpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwy KGludCwgbXVsdGljYWxsLCBjYWxsX2xpc3QsIG5yX2NhbGxzKTsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKAorCXVuc2ln bmVkIGxvbmcgdmEsIHVpbnQ2NF90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJ cmV0dXJuIF9oeXBlcmNhbGwzKGludCwgdXBkYXRlX3ZhX21hcHBpbmcsIHZhLCBuZXdfdmFsLCBm bGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9l dmVudF9jaGFubmVsX29wKAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmMgPSBfaHlw ZXJjYWxsMihpbnQsIGV2ZW50X2NoYW5uZWxfb3AsIGNtZCwgYXJnKTsKKworI2lmIENPTkZJR19Y RU5fQ09NUEFUIDw9IDB4MDMwMDAyCisJaWYgKF9fcHJlZGljdF9mYWxzZShyYyA9PSAtRU5PWEVO U1lTKSkgeworCQlzdHJ1Y3QgZXZ0Y2huX29wIG9wOworCQlvcC5jbWQgPSBjbWQ7CisJCW1lbWNw eSgmb3AudSwgYXJnLCBzaXplb2Yob3AudSkpOworCQlyYyA9IF9oeXBlcmNhbGwxKGludCwgZXZl bnRfY2hhbm5lbF9vcF9jb21wYXQsICZvcCk7CisJCW1lbWNweShhcmcsICZvcC51LCBzaXplb2Yo b3AudSkpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIGlu dCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfeGVuX3ZlcnNpb24oCisJaW50IGNtZCwgdm9pZCAq YXJnKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHhlbl92ZXJzaW9uLCBjbWQsIGFyZyk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9jb25zb2xl X2lvKAorCWludCBjbWQsIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgY2hhciAqc3RyKQorewor CXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIGNvbnNvbGVfaW8sIGNtZCwgY291bnQsIHN0cik7Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9waHlzZGV2X29w KAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmMgPSBfaHlwZXJjYWxsMihpbnQsIHBo eXNkZXZfb3AsIGNtZCwgYXJnKTsKKworI2lmIENPTkZJR19YRU5fQ09NUEFUIDw9IDB4MDMwMDAy CisJaWYgKF9fcHJlZGljdF9mYWxzZShyYyA9PSAtRU5PWEVOU1lTKSkgeworCQlzdHJ1Y3QgcGh5 c2Rldl9vcCBvcDsKKwkJb3AuY21kID0gY21kOworCQltZW1jcHkoJm9wLnUsIGFyZywgc2l6ZW9m KG9wLnUpKTsKKwkJcmMgPSBfaHlwZXJjYWxsMShpbnQsIHBoeXNkZXZfb3BfY29tcGF0LCAmb3Ap OworCQltZW1jcHkoYXJnLCAmb3AudSwgc2l6ZW9mKG9wLnUpKTsKKwl9CisjZW5kaWYKKworCXJl dHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S X2dyYW50X3RhYmxlX29wKAorCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnVvcCwgdW5zaWduZWQg aW50IGNvdW50KQoreworCXJldHVybiBfaHlwZXJjYWxsMyhpbnQsIGdyYW50X3RhYmxlX29wLCBj bWQsIHVvcCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sKK0hZ UEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21haW4oCisJdW5zaWduZWQgbG9uZyB2 YSwgdWludDY0X3QgbmV3X3ZhbCwgdW5zaWduZWQgbG9uZyBmbGFncywgZG9taWRfdCBkb21pZCkK K3sKKwlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCB1cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFp biwgdmEsCisJCQkgICBuZXdfdmFsLCBmbGFncywgZG9taWQpOworfQorCitzdGF0aWMgaW5saW5l IGludCBfX211c3RfY2hlY2sKK0hZUEVSVklTT1Jfdm1fYXNzaXN0KAorCXVuc2lnbmVkIGludCBj bWQsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHZtX2Fz c2lzdCwgY21kLCB0eXBlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitI WVBFUlZJU09SX3ZjcHVfb3AoCisJaW50IGNtZCwgdW5zaWduZWQgaW50IHZjcHVpZCwgdm9pZCAq ZXh0cmFfYXJncykKK3sKKwlyZXR1cm4gX2h5cGVyY2FsbDMoaW50LCB2Y3B1X29wLCBjbWQsIHZj cHVpZCwgZXh0cmFfYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjawor SFlQRVJWSVNPUl9zZXRfc2VnbWVudF9iYXNlKAorCWludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFs dWUpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgc2V0X3NlZ21lbnRfYmFzZSwgcmVnLCB2 YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9z dXNwZW5kKAorCXVuc2lnbmVkIGxvbmcgc3JlYykKK3sKKwlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24g c2NoZWRfc2h1dGRvd24gPSB7CisJCS5yZWFzb24gPSBTSFVURE9XTl9zdXNwZW5kCisJfTsKKwor CWludCByYyA9IF9oeXBlcmNhbGwzKGludCwgc2NoZWRfb3AsIFNDSEVET1Bfc2h1dGRvd24sCisJ CQkgICAgICZzY2hlZF9zaHV0ZG93biwgc3JlYyk7CisKKyNpZiBDT05GSUdfWEVOX0NPTVBBVCA8 PSAweDAzMDAwMgorCWlmIChyYyA9PSAtRU5PWEVOU1lTKQorCQlyYyA9IF9oeXBlcmNhbGwzKGlu dCwgc2NoZWRfb3BfY29tcGF0LCBTQ0hFRE9QX3NodXRkb3duLAorCQkJCSBTSFVURE9XTl9zdXNw ZW5kLCBzcmVjKTsKKyNlbmRpZgorCisJcmV0dXJuIHJjOworfQorCisjaWYgQ09ORklHX1hFTl9D T01QQVQgPD0gMHgwMzAwMDIKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX25taV9vcCgK Kwl1bnNpZ25lZCBsb25nIG9wLCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGlu dCwgbm1pX29wLCBvcCwgYXJnKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19YRU4KK3N0 YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK0hZUEVSVklTT1JfaHZtX29w KAorICAgIGludCBvcCwgdm9pZCAqYXJnKQoreworICAgIHJldHVybiBfaHlwZXJjYWxsMih1bnNp Z25lZCBsb25nLCBodm1fb3AsIG9wLCBhcmcpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUg aW50IF9fbXVzdF9jaGVjaworSFlQRVJWSVNPUl9jYWxsYmFja19vcCgKKwlpbnQgY21kLCBjb25z dCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgY2FsbGJhY2tfb3AsIGNt ZCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitIWVBFUlZJU09S X3hlbm9wcm9mX29wKAorCWludCBvcCwgdm9pZCAqYXJnKQoreworCXJldHVybiBfaHlwZXJjYWxs MihpbnQsIHhlbm9wcm9mX29wLCBvcCwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19t dXN0X2NoZWNrCitIWVBFUlZJU09SX2tleGVjX29wKAorCXVuc2lnbmVkIGxvbmcgb3AsIHZvaWQg KmFyZ3MpCit7CisJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwga2V4ZWNfb3AsIG9wLCBhcmdzKTsK K30KKworI3VuZGVmIF9fbXVzdF9jaGVjaworCisjZW5kaWYgLyogX19NQUNISU5FX1hFTl9IWVBF UkNBTExfSF9fICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFj aGluZS94ZW4vc3luY2hfYml0b3BzLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hp bmUveGVuL3N5bmNoX2JpdG9wcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNo aW5lL3hlbi9zeW5jaF9iaXRvcHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21hY2hpbmUveGVuL3N5bmNoX2JpdG9w cy5oCTIwMTYtMDktMjkgMDA6MjQ6NTQuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTI5IEBA CisjaWZuZGVmIF9fWEVOX1NZTkNIX0JJVE9QU19IX18KKyNkZWZpbmUgX19YRU5fU1lOQ0hfQklU T1BTX0hfXworCisvKgorICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgorICogSGVh dmlseSBtb2RpZmllZCB0byBwcm92aWRlIGd1YXJhbnRlZWQgc3Ryb25nIHN5bmNocm9uaXNhdGlv bgorICogd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggWGVuIG9yIG90aGVyIGd1ZXN0IE9TZXMgcnVu bmluZyBvbiBvdGhlciBDUFVzLgorICovCisKKworI2RlZmluZSBBRERSICgqKHZvbGF0aWxlIGxv bmcgKikgYWRkcikKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBzeW5jaF9zZXRfYml0KGludCBu ciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAK KyAgICAgICAgImxvY2sgYnRzbCAlMSwlMCIKKyAgICAgICAgOiAiPW0iIChBRERSKSA6ICJJciIg KG5yKSA6ICJtZW1vcnkiICk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3luY2hfY2xl YXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAgX19hc21fXyBfX3Zv bGF0aWxlX18gKAorICAgICAgICAibG9jayBidHJsICUxLCUwIgorICAgICAgICA6ICI9bSIgKEFE RFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIgKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9p ZCBzeW5jaF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisgICAg X19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAibG9jayBidGNsICUxLCUwIgorICAgICAg ICA6ICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIgKTsKK30KKworc3RhdGljIF9f aW5saW5lX18gaW50IHN5bmNoX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lk ICogYWRkcikKK3sKKyAgICBpbnQgb2xkYml0OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK KyAgICAgICAgImxvY2sgYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorICAgICAgICA6ICI9ciIg KG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworICAgIHJldHVy biBvbGRiaXQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBzeW5jaF90ZXN0X2FuZF9jbGVh cl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKyAgICBpbnQgb2xkYml0Owor ICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgImxvY2sgYnRybCAlMiwlMVxuXHRz YmJsICUwLCUwIgorICAgICAgICA6ICI9ciIgKG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAo bnIpIDogIm1lbW9yeSIpOworICAgIHJldHVybiBvbGRiaXQ7Cit9CisKK3N0YXRpYyBfX2lubGlu ZV9fIGludCBzeW5jaF90ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAq IGFkZHIpCit7CisgICAgaW50IG9sZGJpdDsKKworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK KyAgICAgICAgImxvY2sgYnRjbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorICAgICAgICA6ICI9ciIg KG9sZGJpdCksICI9bSIgKEFERFIpIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworICAgIHJldHVy biBvbGRiaXQ7Cit9CisKK3N0cnVjdCBfX3N5bmNoX3hjaGdfZHVtbXkgeyB1bnNpZ25lZCBsb25n IGFbMTAwXTsgfTsKKyNkZWZpbmUgX19zeW5jaF94Zyh4KSAoKHZvbGF0aWxlIHN0cnVjdCBfX3N5 bmNoX3hjaGdfZHVtbXkgKikoeCkpCisKKyNkZWZpbmUgc3luY2hfY21weGNoZyhwdHIsIG9sZCwg bmV3KSBcCisoKF9fdHlwZW9mX18oKihwdHIpKSlfX3N5bmNoX2NtcHhjaGcoKHB0ciksXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShvbGQpLCBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKG5l dyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKihwdHIp KSkpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3N5bmNoX2NtcHhjaGcodm9sYXRp bGUgdm9pZCAqcHRyLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJCSAgICB1bnNp Z25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCXN3aXRj aCAoc2l6ZSkgeworCWNhc2UgMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhj aGdiICViMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwg Im0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJCSAgICAgICAiMCIob2xkKQorCQkJCSAgICAgOiAi bWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgMjoKKwkJX19hc21fXyBfX3ZvbGF0aWxl X18oImxvY2s7IGNtcHhjaGd3ICV3MSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAg ICAgOiAicSIobmV3KSwgIm0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJCSAgICAgICAiMCIob2xk KQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJX19h c21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdsICVrMSwlMiIKKwkJCQkgICAgIDogIj1h IihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3N5bmNoX3hnKHB0cikpLAorCQkJ CSAgICAgICAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2Owor CWNhc2UgODoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdxICUxLCUyIgor CQkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9fc3luY2hf eGcocHRyKSksCisJCQkJICAgICAgICIwIihvbGQpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJ cmV0dXJuIHByZXY7CisJfQorCXJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGlu dCBzeW5jaF9jb25zdF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRy KQoreworICAgIHJldHVybiAoKDFVTCA8PCAobnIgJiAzMSkpICYgCisgICAgICAgICAgICAoKChj b25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcilbbnIgPj4gNV0pKSAhPSAwOworfQor CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc3luY2hfdmFyX3Rlc3RfYml0KGludCBuciwgdm9sYXRp bGUgdm9pZCAqIGFkZHIpCit7CisgICAgaW50IG9sZGJpdDsKKyAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoCisgICAgICAgICJidGwgJTIsJTFcblx0c2JibCAlMCwlMCIKKyAgICAgICAgOiAiPXIi IChvbGRiaXQpIDogIm0iIChBRERSKSwgIklyIiAobnIpICk7CisgICAgcmV0dXJuIG9sZGJpdDsK K30KKworI2RlZmluZSBzeW5jaF90ZXN0X2JpdChucixhZGRyKSBcCisoX19idWlsdGluX2NvbnN0 YW50X3AobnIpID8gXAorIHN5bmNoX2NvbnN0X3Rlc3RfYml0KChuciksKGFkZHIpKSA6IFwKKyBz eW5jaF92YXJfdGVzdF9iaXQoKG5yKSwoYWRkcikpKQorCisjZW5kaWYgLyogX19YRU5fU1lOQ0hf QklUT1BTX0hfXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL21h Y2hpbmUveGVuL3hlbi1vcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3hl bi94ZW4tb3MuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbWFjaGluZS94ZW4veGVu LW9zLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC9tYWNoaW5lL3hlbi94ZW4tb3MuaAkyMDE2LTA5LTI5IDAwOjI0OjU0 LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDYgQEAKKy8qLQorICogVGhpcyBmaWxlIGlzIGlu IHRoZSBwdWJsaWMgZG9tYWluLgorICovCisvKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL2Ft ZDY0L2luY2x1ZGUveGVuL3hlbi1vcy5oIDI4OTY4NSAyMDE1LTEwLTIxIDEwOjA0OjM1WiByb3ln ZXIgJCAqLworCisjaW5jbHVkZSA8eDg2L3hlbi94ZW4tb3MuaD4KRmlsZXMgdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvbmV0bWFwLmtvIGFuZCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv bmV0bWFwLmtvIGRpZmZlcgpGaWxlcyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXAu byBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcC5vIGRpZmZlcgpGaWxlcyB1 c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfZnJlZWJzZC5vIGFuZCAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX2ZyZWVic2QubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX2dlbmVyaWMubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL25ldG1hcF9nZW5lcmljLm8gZGlmZmVyCkZpbGVzIHVzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL25ldG1hcF9tYnEubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25l dG1hcF9tYnEubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFw X21lbTIubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9tZW0yLm8gZGlm ZmVyCkZpbGVzIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9tb25pdG9yLm8gYW5k IC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfbW9uaXRvci5vIGRpZmZlcgpGaWxl cyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfb2ZmbG9hZGluZ3MubyBhbmQgL3Vz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF9vZmZsb2FkaW5ncy5vIGRpZmZlcgpGaWxl cyB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9uZXRtYXBfcGlwZS5vIGFuZCAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAvbmV0bWFwX3BpcGUubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvbmV0bWFwX3B0Lm8gYW5kIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC9uZXRtYXBfcHQubyBkaWZmZXIKRmlsZXMgdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvbmV0 bWFwX3ZhbGUubyBhbmQgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL25ldG1hcF92YWxlLm8g ZGlmZmVyCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvb3B0X2luZXQu aCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvb3B0X2luZXQuaAotLS0gdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAvb3B0X2luZXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL29wdF9pbmV0LmgJMjAxNi0xMS0y MyAxNzowNTozMy45MDc1OTAwMDAgKzAwMDAKQEAgLTAsMCArMSwyIEBACisjZGVmaW5lIElORVQg MQorI2RlZmluZSBUQ1BfT0ZGTE9BRCAxCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxl cy9uZXRtYXAvb3B0X2luZXQ2LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL29wdF9pbmV0 Ni5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9vcHRfaW5ldDYuaAkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw L29wdF9pbmV0Ni5oCTIwMTYtMTEtMjMgMTc6MDU6MzMuOTA5ODE2MDAwICswMDAwCkBAIC0wLDAg KzEgQEAKKyNkZWZpbmUgSU5FVDYgMQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL3BjaV9pZi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9wY2lfaWYuaAotLS0g dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAvcGNpX2lmLmgJMTk3MC0wMS0wMSAwMTowMDowMC4w MDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC9wY2lfaWYuaAky MDE2LTExLTIzIDE3OjA1OjMzLjg5NzE5MTAwMCArMDAwMApAQCAtMCwwICsxLDQyNiBAQAorLyoK KyAqIFRoaXMgZmlsZSBpcyBwcm9kdWNlZCBhdXRvbWF0aWNhbGx5LgorICogRG8gbm90IG1vZGlm eSBhbnl0aGluZyBpbiBoZXJlIGJ5IGhhbmQuCisgKgorICogQ3JlYXRlZCBmcm9tIHNvdXJjZSBm aWxlCisgKiAgIC91c3Ivc3JjL3N5cy9kZXYvcGNpL3BjaV9pZi5tCisgKiB3aXRoCisgKiAgIG1h a2VvYmpvcHMuYXdrCisgKgorICogU2VlIHRoZSBzb3VyY2UgZmlsZSBmb3IgbGVnYWwgaW5mb3Jt YXRpb24KKyAqLworCisKKyNpZm5kZWYgX3BjaV9pZl9oXworI2RlZmluZSBfcGNpX2lmX2hfCisK Kworc3RydWN0IG52bGlzdDsKKworZW51bSBwY2lfaWRfdHlwZSB7CisgICAgUENJX0lEX1JJRCwK KyAgICBQQ0lfSURfTVNJLAorfTsKKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3Ig dGhlIFBDSV9SRUFEX0NPTkZJRygpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVz YyBwY2lfcmVhZF9jb25maWdfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRp bmcgdGhlIFBDSV9SRUFEX0NPTkZJRygpIG1ldGhvZCAqLwordHlwZWRlZiB1X2ludDMyX3QgcGNp X3JlYWRfY29uZmlnX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHJlZywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCk7CisKK3N0YXRpYyBf X2lubGluZSB1X2ludDMyX3QgUENJX1JFQURfQ09ORklHKGRldmljZV90IGRldiwgZGV2aWNlX3Qg Y2hpbGQsIGludCByZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgd2lkdGgpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRl diktPm9wcyxwY2lfcmVhZF9jb25maWcpOworCXJldHVybiAoKHBjaV9yZWFkX2NvbmZpZ190ICop IF9tKShkZXYsIGNoaWxkLCByZWcsIHdpZHRoKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVz Y3JpcHRvciBmb3IgdGhlIFBDSV9XUklURV9DT05GSUcoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1 Y3Qga29iam9wX2Rlc2MgcGNpX3dyaXRlX2NvbmZpZ19kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0 aW9uIGltcGxlbWVudGluZyB0aGUgUENJX1dSSVRFX0NPTkZJRygpIG1ldGhvZCAqLwordHlwZWRl ZiB2b2lkIHBjaV93cml0ZV9jb25maWdfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBp bnQgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgdmFsLCBp bnQgd2lkdGgpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBQQ0lfV1JJVEVfQ09ORklHKGRldmlj ZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCByZWcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVfaW50MzJfdCB2YWwsIGludCB3aWR0aCkKK3sKKwlrb2Jqb3BfdCBf bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV93cml0ZV9jb25maWcpOwor CSgocGNpX3dyaXRlX2NvbmZpZ190ICopIF9tKShkZXYsIGNoaWxkLCByZWcsIHZhbCwgd2lkdGgp OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0dFVF9QT1dF UlNUQVRFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9nZXRfcG93 ZXJzdGF0ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJ X0dFVF9QT1dFUlNUQVRFKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfZ2V0X3Bvd2Vyc3Rh dGVfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGlu dCBQQ0lfR0VUX1BPV0VSU1RBVEUoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlr b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9nZXRfcG93 ZXJzdGF0ZSk7CisJcmV0dXJuICgocGNpX2dldF9wb3dlcnN0YXRlX3QgKikgX20pKGRldiwgY2hp bGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX1NFVF9Q T1dFUlNUQVRFKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9zZXRf cG93ZXJzdGF0ZV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUg UENJX1NFVF9QT1dFUlNUQVRFKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfc2V0X3Bvd2Vy c3RhdGVfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQgc3RhdGUpOworCitzdGF0 aWMgX19pbmxpbmUgaW50IFBDSV9TRVRfUE9XRVJTVEFURShkZXZpY2VfdCBkZXYsIGRldmljZV90 IGNoaWxkLCBpbnQgc3RhdGUpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29i al90KWRldiktPm9wcyxwY2lfc2V0X3Bvd2Vyc3RhdGUpOworCXJldHVybiAoKHBjaV9zZXRfcG93 ZXJzdGF0ZV90ICopIF9tKShkZXYsIGNoaWxkLCBzdGF0ZSk7Cit9CisKKy8qKiBAYnJpZWYgVW5p cXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfR0VUX1ZQRF9JREVOVCgpIG1ldGhvZCAqLworZXh0 ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZ2V0X3ZwZF9pZGVudF9kZXNjOworLyoqIEBicmll ZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0dFVF9WUERfSURFTlQoKSBtZXRob2Qg Ki8KK3R5cGVkZWYgaW50IHBjaV9nZXRfdnBkX2lkZW50X3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf dCBjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmlk ZW50cHRyKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfR0VUX1ZQRF9JREVOVChkZXZpY2Vf dCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICoqaWRlbnRwdHIpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9P S1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfZ2V0X3ZwZF9pZGVudCk7CisJcmV0dXJuICgocGNp X2dldF92cGRfaWRlbnRfdCAqKSBfbSkoZGV2LCBjaGlsZCwgaWRlbnRwdHIpOworfQorCisvKiog QGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0dFVF9WUERfUkVBRE9OTFkoKSBt ZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2dldF92cGRfcmVhZG9ubHlf ZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9HRVRfVlBE X1JFQURPTkxZKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfZ2V0X3ZwZF9yZWFkb25seV90 KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGNvbnN0IGNoYXIgKmt3LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqdnB0cik7CisKK3N0YXRpYyBf X2lubGluZSBpbnQgUENJX0dFVF9WUERfUkVBRE9OTFkoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBj aGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqa3csIGNvbnN0IGNoYXIgKip2cHRyKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2dldF92cGRfcmVhZG9ubHkpOworCXJldHVybiAoKHBj aV9nZXRfdnBkX3JlYWRvbmx5X3QgKikgX20pKGRldiwgY2hpbGQsIGt3LCB2cHRyKTsKK30KKwor LyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9FTkFCTEVfQlVTTUFTVEVS KCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9lbmFibGVfYnVzbWFz dGVyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRU5B QkxFX0JVU01BU1RFUigpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2VuYWJsZV9idXNtYXN0 ZXJfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGlu dCBQQ0lfRU5BQkxFX0JVU01BU1RFUihkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQorewor CWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2VuYWJs ZV9idXNtYXN0ZXIpOworCXJldHVybiAoKHBjaV9lbmFibGVfYnVzbWFzdGVyX3QgKikgX20pKGRl diwgY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJ X0RJU0FCTEVfQlVTTUFTVEVSKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNj IHBjaV9kaXNhYmxlX2J1c21hc3Rlcl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl bWVudGluZyB0aGUgUENJX0RJU0FCTEVfQlVTTUFTVEVSKCkgbWV0aG9kICovCit0eXBlZGVmIGlu dCBwY2lfZGlzYWJsZV9idXNtYXN0ZXJfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKTsK Kworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRElTQUJMRV9CVVNNQVNURVIoZGV2aWNlX3QgZGV2 LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2Jq X3QpZGV2KS0+b3BzLHBjaV9kaXNhYmxlX2J1c21hc3Rlcik7CisJcmV0dXJuICgocGNpX2Rpc2Fi bGVfYnVzbWFzdGVyX3QgKikgX20pKGRldiwgY2hpbGQpOworfQorCisvKiogQGJyaWVmIFVuaXF1 ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0VOQUJMRV9JTygpIG1ldGhvZCAqLworZXh0ZXJuIHN0 cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZW5hYmxlX2lvX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rp b24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRU5BQkxFX0lPKCkgbWV0aG9kICovCit0eXBlZGVmIGlu dCBwY2lfZW5hYmxlX2lvX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHNwYWNl KTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRU5BQkxFX0lPKGRldmljZV90IGRldiwgZGV2 aWNlX3QgY2hpbGQsIGludCBzcGFjZSkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAo KChrb2JqX3QpZGV2KS0+b3BzLHBjaV9lbmFibGVfaW8pOworCXJldHVybiAoKHBjaV9lbmFibGVf aW9fdCAqKSBfbSkoZGV2LCBjaGlsZCwgc3BhY2UpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBk ZXNjcmlwdG9yIGZvciB0aGUgUENJX0RJU0FCTEVfSU8oKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1 Y3Qga29iam9wX2Rlc2MgcGNpX2Rpc2FibGVfaW9fZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlv biBpbXBsZW1lbnRpbmcgdGhlIFBDSV9ESVNBQkxFX0lPKCkgbWV0aG9kICovCit0eXBlZGVmIGlu dCBwY2lfZGlzYWJsZV9pb190KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCBzcGFj ZSk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0RJU0FCTEVfSU8oZGV2aWNlX3QgZGV2LCBk ZXZpY2VfdCBjaGlsZCwgaW50IHNwYWNlKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Rpc2FibGVfaW8pOworCXJldHVybiAoKHBjaV9kaXNh YmxlX2lvX3QgKikgX20pKGRldiwgY2hpbGQsIHNwYWNlKTsKK30KKworLyoqIEBicmllZiBVbmlx dWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9BU1NJR05fSU5URVJSVVBUKCkgbWV0aG9kICovCitl eHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9hc3NpZ25faW50ZXJydXB0X2Rlc2M7CisvKiog QGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfQVNTSUdOX0lOVEVSUlVQVCgp IG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2Fzc2lnbl9pbnRlcnJ1cHRfdChkZXZpY2VfdCBk ZXYsIGRldmljZV90IGNoaWxkKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfQVNTSUdOX0lO VEVSUlVQVChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOwor CUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Fzc2lnbl9pbnRlcnJ1cHQpOwor CXJldHVybiAoKHBjaV9hc3NpZ25faW50ZXJydXB0X3QgKikgX20pKGRldiwgY2hpbGQpOworfQor CisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0ZJTkRfQ0FQKCkgbWV0 aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9maW5kX2NhcF9kZXNjOworLyoq IEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0ZJTkRfQ0FQKCkgbWV0aG9k ICovCit0eXBlZGVmIGludCBwY2lfZmluZF9jYXBfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNo aWxkLCBpbnQgY2FwYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2Fw cmVnKTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfRklORF9DQVAoZGV2aWNlX3QgZGV2LCBk ZXZpY2VfdCBjaGlsZCwgaW50IGNhcGFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKmNhcHJlZykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChr b2JqX3QpZGV2KS0+b3BzLHBjaV9maW5kX2NhcCk7CisJcmV0dXJuICgocGNpX2ZpbmRfY2FwX3Qg KikgX20pKGRldiwgY2hpbGQsIGNhcGFiaWxpdHksIGNhcHJlZyk7Cit9CisKKy8qKiBAYnJpZWYg VW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfRklORF9FWFRDQVAoKSBtZXRob2QgKi8KK2V4 dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2ZpbmRfZXh0Y2FwX2Rlc2M7CisvKiogQGJyaWVm IEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRklORF9FWFRDQVAoKSBtZXRob2QgKi8K K3R5cGVkZWYgaW50IHBjaV9maW5kX2V4dGNhcF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hp bGQsIGludCBjYXBhYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpj YXByZWcpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9GSU5EX0VYVENBUChkZXZpY2VfdCBk ZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGNhcGFiaWxpdHksIGludCAqY2FwcmVnKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExP T0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2ZpbmRfZXh0Y2FwKTsKKwlyZXR1cm4gKChwY2lf ZmluZF9leHRjYXBfdCAqKSBfbSkoZGV2LCBjaGlsZCwgY2FwYWJpbGl0eSwgY2FwcmVnKTsKK30K KworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9GSU5EX0hUQ0FQKCkg bWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9maW5kX2h0Y2FwX2Rlc2M7 CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfRklORF9IVENBUCgp IG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2ZpbmRfaHRjYXBfdChkZXZpY2VfdCBkZXYsIGRl dmljZV90IGNoaWxkLCBpbnQgY2FwYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50ICpjYXByZWcpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9GSU5EX0hUQ0FQKGRl dmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCBjYXBhYmlsaXR5LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNhcHJlZykKK3sKKwlrb2Jqb3BfdCBfbTsKKwlL T0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9maW5kX2h0Y2FwKTsKKwlyZXR1cm4g KChwY2lfZmluZF9odGNhcF90ICopIF9tKShkZXYsIGNoaWxkLCBjYXBhYmlsaXR5LCBjYXByZWcp OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0FMTE9DX01T SSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfYWxsb2NfbXNpX2Rl c2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfQUxMT0NfTVNJ KCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfYWxsb2NfbXNpX3QoZGV2aWNlX3QgZGV2LCBk ZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0FM TE9DX01TSShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQgKmNvdW50KQoreworCWtv YmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2FsbG9jX21z aSk7CisJcmV0dXJuICgocGNpX2FsbG9jX21zaV90ICopIF9tKShkZXYsIGNoaWxkLCBjb3VudCk7 Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfQUxMT0NfTVNJ WCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfYWxsb2NfbXNpeF9k ZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0FMTE9DX01T SVgoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9hbGxvY19tc2l4X3QoZGV2aWNlX3QgZGV2 LCBkZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJ X0FMTE9DX01TSVgoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50ICpjb3VudCkKK3sK Kwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9hbGxv Y19tc2l4KTsKKwlyZXR1cm4gKChwY2lfYWxsb2NfbXNpeF90ICopIF9tKShkZXYsIGNoaWxkLCBj b3VudCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfRU5B QkxFX01TSSgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfZW5hYmxl X21zaV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0VO QUJMRV9NU0koKSBtZXRob2QgKi8KK3R5cGVkZWYgdm9pZCBwY2lfZW5hYmxlX21zaV90KGRldmlj ZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIHVpbnQ2NF90IGFkZHJlc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MTZfdCBkYXRhKTsKKworc3RhdGljIF9faW5saW5lIHZvaWQg UENJX0VOQUJMRV9NU0koZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQxNl90IGRhdGEp Cit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lf ZW5hYmxlX21zaSk7CisJKChwY2lfZW5hYmxlX21zaV90ICopIF9tKShkZXYsIGNoaWxkLCBhZGRy ZXNzLCBkYXRhKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBD SV9FTkFCTEVfTVNJWCgpIG1ldGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lf ZW5hYmxlX21zaXhfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhl IFBDSV9FTkFCTEVfTVNJWCgpIG1ldGhvZCAqLwordHlwZWRlZiB2b2lkIHBjaV9lbmFibGVfbXNp eF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIHVfaW50IGluZGV4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQzMl90IGRhdGEpOwor CitzdGF0aWMgX19pbmxpbmUgdm9pZCBQQ0lfRU5BQkxFX01TSVgoZGV2aWNlX3QgZGV2LCBkZXZp Y2VfdCBjaGlsZCwgdV9pbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDY0X3QgYWRkcmVzcywgdWludDMyX3QgZGF0YSkKK3sKKwlrb2Jqb3BfdCBfbTsK KwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9lbmFibGVfbXNpeCk7CisJKChw Y2lfZW5hYmxlX21zaXhfdCAqKSBfbSkoZGV2LCBjaGlsZCwgaW5kZXgsIGFkZHJlc3MsIGRhdGEp OworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0RJU0FCTEVf TVNJKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9kaXNhYmxlX21z aV9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0RJU0FC TEVfTVNJKCkgbWV0aG9kICovCit0eXBlZGVmIHZvaWQgcGNpX2Rpc2FibGVfbXNpX3QoZGV2aWNl X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIFBDSV9ESVNB QkxFX01TSShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOwor CUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX2Rpc2FibGVfbXNpKTsKKwkoKHBj aV9kaXNhYmxlX21zaV90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlx dWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9SRU1BUF9NU0lYKCkgbWV0aG9kICovCitleHRlcm4g c3RydWN0IGtvYmpvcF9kZXNjIHBjaV9yZW1hcF9tc2l4X2Rlc2M7CisvKiogQGJyaWVmIEEgZnVu Y3Rpb24gaW1wbGVtZW50aW5nIHRoZSBQQ0lfUkVNQVBfTVNJWCgpIG1ldGhvZCAqLwordHlwZWRl ZiBpbnQgcGNpX3JlbWFwX21zaXhfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQg Y291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfaW50ICp2ZWN0b3Jz KTsKKworc3RhdGljIF9faW5saW5lIGludCBQQ0lfUkVNQVBfTVNJWChkZXZpY2VfdCBkZXYsIGRl dmljZV90IGNoaWxkLCBpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVfaW50ICp2ZWN0b3JzKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tV UCgoKGtvYmpfdClkZXYpLT5vcHMscGNpX3JlbWFwX21zaXgpOworCXJldHVybiAoKHBjaV9yZW1h cF9tc2l4X3QgKikgX20pKGRldiwgY2hpbGQsIGNvdW50LCB2ZWN0b3JzKTsKK30KKworLyoqIEBi cmllZiBVbmlxdWUgZGVzY3JpcHRvciBmb3IgdGhlIFBDSV9SRUxFQVNFX01TSSgpIG1ldGhvZCAq LworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfcmVsZWFzZV9tc2lfZGVzYzsKKy8qKiBA YnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9SRUxFQVNFX01TSSgpIG1ldGhv ZCAqLwordHlwZWRlZiBpbnQgcGNpX3JlbGVhc2VfbXNpX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf dCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX1JFTEVBU0VfTVNJKGRldmljZV90 IGRldiwgZGV2aWNlX3QgY2hpbGQpCit7CisJa29iam9wX3QgX207CisJS09CSk9QTE9PS1VQKCgo a29ial90KWRldiktPm9wcyxwY2lfcmVsZWFzZV9tc2kpOworCXJldHVybiAoKHBjaV9yZWxlYXNl X21zaV90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3Jp cHRvciBmb3IgdGhlIFBDSV9NU0lfQ09VTlQoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29i am9wX2Rlc2MgcGNpX21zaV9jb3VudF9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxl bWVudGluZyB0aGUgUENJX01TSV9DT1VOVCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX21z aV9jb3VudF90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0aWMgX19pbmxp bmUgaW50IFBDSV9NU0lfQ09VTlQoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlr b2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9tc2lfY291 bnQpOworCXJldHVybiAoKHBjaV9tc2lfY291bnRfdCAqKSBfbSkoZGV2LCBjaGlsZCk7Cit9CisK Ky8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfTVNJWF9DT1VOVCgpIG1l dGhvZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfbXNpeF9jb3VudF9kZXNjOwor LyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX01TSVhfQ09VTlQoKSBt ZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9tc2l4X2NvdW50X3QoZGV2aWNlX3QgZGV2LCBkZXZp Y2VfdCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX01TSVhfQ09VTlQoZGV2aWNl X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAo KChrb2JqX3QpZGV2KS0+b3BzLHBjaV9tc2l4X2NvdW50KTsKKwlyZXR1cm4gKChwY2lfbXNpeF9j b3VudF90ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3Jp cHRvciBmb3IgdGhlIFBDSV9NU0lYX1BCQV9CQVIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qg a29iam9wX2Rlc2MgcGNpX21zaXhfcGJhX2Jhcl9kZXNjOworLyoqIEBicmllZiBBIGZ1bmN0aW9u IGltcGxlbWVudGluZyB0aGUgUENJX01TSVhfUEJBX0JBUigpIG1ldGhvZCAqLwordHlwZWRlZiBp bnQgcGNpX21zaXhfcGJhX2Jhcl90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitz dGF0aWMgX19pbmxpbmUgaW50IFBDSV9NU0lYX1BCQV9CQVIoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf dCBjaGlsZCkKK3sKKwlrb2Jqb3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+ b3BzLHBjaV9tc2l4X3BiYV9iYXIpOworCXJldHVybiAoKHBjaV9tc2l4X3BiYV9iYXJfdCAqKSBf bSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRo ZSBQQ0lfTVNJWF9UQUJMRV9CQVIoKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rl c2MgcGNpX21zaXhfdGFibGVfYmFyX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVt ZW50aW5nIHRoZSBQQ0lfTVNJWF9UQUJMRV9CQVIoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBj aV9tc2l4X3RhYmxlX2Jhcl90KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0 aWMgX19pbmxpbmUgaW50IFBDSV9NU0lYX1RBQkxFX0JBUihkZXZpY2VfdCBkZXYsIGRldmljZV90 IGNoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgoKGtvYmpfdClkZXYpLT5v cHMscGNpX21zaXhfdGFibGVfYmFyKTsKKwlyZXR1cm4gKChwY2lfbXNpeF90YWJsZV9iYXJfdCAq KSBfbSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJpZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9y IHRoZSBQQ0lfR0VUX0lEKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBj aV9nZXRfaWRfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBD SV9HRVRfSUQoKSBtZXRob2QgKi8KK3R5cGVkZWYgaW50IHBjaV9nZXRfaWRfdChkZXZpY2VfdCBk ZXYsIGRldmljZV90IGNoaWxkLCBlbnVtIHBjaV9pZF90eXBlIHR5cGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgdWludHB0cl90ICppZCk7CisKK3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0dF VF9JRChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gcGNpX2lkX3R5cGUgdHlwZSwgdWludHB0cl90ICppZCkKK3sKKwlrb2Jq b3BfdCBfbTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9nZXRfaWQpOwor CXJldHVybiAoKHBjaV9nZXRfaWRfdCAqKSBfbSkoZGV2LCBjaGlsZCwgdHlwZSwgaWQpOworfQor CisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0FMTE9DX0RFVklORk8o KSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2FsbG9jX2RldmluZm9f ZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBDSV9BTExPQ19E RVZJTkZPKCkgbWV0aG9kICovCit0eXBlZGVmIHN0cnVjdCBwY2lfZGV2aW5mbyAqIHBjaV9hbGxv Y19kZXZpbmZvX3QoZGV2aWNlX3QgZGV2KTsKKworc3RhdGljIF9faW5saW5lIHN0cnVjdCBwY2lf ZGV2aW5mbyAqIFBDSV9BTExPQ19ERVZJTkZPKGRldmljZV90IGRldikKK3sKKwlrb2Jqb3BfdCBf bTsKKwlLT0JKT1BMT09LVVAoKChrb2JqX3QpZGV2KS0+b3BzLHBjaV9hbGxvY19kZXZpbmZvKTsK KwlyZXR1cm4gKChwY2lfYWxsb2NfZGV2aW5mb190ICopIF9tKShkZXYpOworfQorCisvKiogQGJy aWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJX0NISUxEX0FEREVEKCkgbWV0aG9kICov CitleHRlcm4gc3RydWN0IGtvYmpvcF9kZXNjIHBjaV9jaGlsZF9hZGRlZF9kZXNjOworLyoqIEBi cmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0NISUxEX0FEREVEKCkgbWV0aG9k ICovCit0eXBlZGVmIHZvaWQgcGNpX2NoaWxkX2FkZGVkX3QoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf dCBjaGlsZCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIFBDSV9DSElMRF9BRERFRChkZXZpY2Vf dCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCWtvYmpvcF90IF9tOworCUtPQkpPUExPT0tVUCgo KGtvYmpfdClkZXYpLT5vcHMscGNpX2NoaWxkX2FkZGVkKTsKKwkoKHBjaV9jaGlsZF9hZGRlZF90 ICopIF9tKShkZXYsIGNoaWxkKTsKK30KKworLyoqIEBicmllZiBVbmlxdWUgZGVzY3JpcHRvciBm b3IgdGhlIFBDSV9JT1ZfQVRUQUNIKCkgbWV0aG9kICovCitleHRlcm4gc3RydWN0IGtvYmpvcF9k ZXNjIHBjaV9pb3ZfYXR0YWNoX2Rlc2M7CisvKiogQGJyaWVmIEEgZnVuY3Rpb24gaW1wbGVtZW50 aW5nIHRoZSBQQ0lfSU9WX0FUVEFDSCgpIG1ldGhvZCAqLwordHlwZWRlZiBpbnQgcGNpX2lvdl9h dHRhY2hfdChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbnZsaXN0ICpwZl9zY2hlbWEsIHN0cnVjdCBudmxpc3QgKnZmX3Nj aGVtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisK K3N0YXRpYyBfX2lubGluZSBpbnQgUENJX0lPVl9BVFRBQ0goZGV2aWNlX3QgZGV2LCBkZXZpY2Vf dCBjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG52bGlz dCAqcGZfc2NoZW1hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg bnZsaXN0ICp2Zl9zY2hlbWEsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJa29iam9wX3QgX207CisJ S09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfaW92X2F0dGFjaCk7CisJcmV0dXJu ICgocGNpX2lvdl9hdHRhY2hfdCAqKSBfbSkoZGV2LCBjaGlsZCwgcGZfc2NoZW1hLCB2Zl9zY2hl bWEsIG5hbWUpOworfQorCisvKiogQGJyaWVmIFVuaXF1ZSBkZXNjcmlwdG9yIGZvciB0aGUgUENJ X0lPVl9ERVRBQ0goKSBtZXRob2QgKi8KK2V4dGVybiBzdHJ1Y3Qga29iam9wX2Rlc2MgcGNpX2lv dl9kZXRhY2hfZGVzYzsKKy8qKiBAYnJpZWYgQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIFBD SV9JT1ZfREVUQUNIKCkgbWV0aG9kICovCit0eXBlZGVmIGludCBwY2lfaW92X2RldGFjaF90KGRl dmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpOworCitzdGF0aWMgX19pbmxpbmUgaW50IFBDSV9J T1ZfREVUQUNIKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQpCit7CisJa29iam9wX3QgX207 CisJS09CSk9QTE9PS1VQKCgoa29ial90KWRldiktPm9wcyxwY2lfaW92X2RldGFjaCk7CisJcmV0 dXJuICgocGNpX2lvdl9kZXRhY2hfdCAqKSBfbSkoZGV2LCBjaGlsZCk7Cit9CisKKy8qKiBAYnJp ZWYgVW5pcXVlIGRlc2NyaXB0b3IgZm9yIHRoZSBQQ0lfQ1JFQVRFX0lPVl9DSElMRCgpIG1ldGhv ZCAqLworZXh0ZXJuIHN0cnVjdCBrb2Jqb3BfZGVzYyBwY2lfY3JlYXRlX2lvdl9jaGlsZF9kZXNj OworLyoqIEBicmllZiBBIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgUENJX0NSRUFURV9JT1Zf Q0hJTEQoKSBtZXRob2QgKi8KK3R5cGVkZWYgZGV2aWNlX3QgcGNpX2NyZWF0ZV9pb3ZfY2hpbGRf dChkZXZpY2VfdCBidXMsIGRldmljZV90IHBmLCB1aW50MTZfdCByaWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgdmlkLCB1aW50MTZfdCBkaWQpOwor CitzdGF0aWMgX19pbmxpbmUgZGV2aWNlX3QgUENJX0NSRUFURV9JT1ZfQ0hJTEQoZGV2aWNlX3Qg YnVzLCBkZXZpY2VfdCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MTZfdCByaWQsIHVpbnQxNl90IHZpZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBkaWQpCit7CisJa29iam9wX3QgX207 CisJS09CSk9QTE9PS1VQKCgoa29ial90KWJ1cyktPm9wcyxwY2lfY3JlYXRlX2lvdl9jaGlsZCk7 CisJcmV0dXJuICgocGNpX2NyZWF0ZV9pb3ZfY2hpbGRfdCAqKSBfbSkoYnVzLCBwZiwgcmlkLCB2 aWQsIGRpZCk7Cit9CisKKyNlbmRpZiAvKiBfcGNpX2lmX2hfICovCmRpZmYgLXUgLXIgLU4gdXNy L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19hbGlnbi5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC94ODYvX2FsaWduLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9f YWxpZ24uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fYWxpZ24uaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAw MDAwMCArMDEwMApAQCAtMCwwICsxLDUyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMSBE YXZpZCBFLiBPJ0JyaWVuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJr ZWxleSBieQorICogV2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUK KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkg b2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4g TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg KiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcGFyYW0uaAk1LjggKEJlcmtlbGV5KSA2 LzI4LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL19hbGlnbi5o IDMwMTAzNyAyMDE2LTA1LTMxIDEzOjMxOjE5WiBlZCAkCisgKi8KKworI2lmbmRlZiBfWDg2X0lO Q0xVREVfX0FMSUdOX0hfCisjZGVmaW5lCV9YODZfSU5DTFVERV9fQUxJR05fSF8KKworLyoKKyAq IFJvdW5kIHAgKHBvaW50ZXIgb3IgYnl0ZSBpbmRleCkgdXAgdG8gYSBjb3JyZWN0bHktYWxpZ25l ZCB2YWx1ZQorICogZm9yIGFsbCBkYXRhIHR5cGVzIChpbnQsIGxvbmcsIC4uLikuICAgVGhlIHJl c3VsdCBpcyB1bnNpZ25lZCBpbnQKKyAqIGFuZCBtdXN0IGJlIGNhc3QgdG8gYW55IGRlc2lyZWQg cG9pbnRlciB0eXBlLgorICovCisjZGVmaW5lCV9BTElHTkJZVEVTCShzaXplb2YoX19yZWdpc3Rl cl90KSAtIDEpCisjZGVmaW5lCV9BTElHTihwKQkoKChfX3VpbnRwdHJfdCkocCkgKyBfQUxJR05C WVRFUykgJiB+X0FMSUdOQllURVMpCisKKyNlbmRpZiAvKiAhX1g4Nl9JTkNMVURFX19BTElHTl9I XyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9faW50dHlw ZXMuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19pbnR0eXBlcy5oCi0tLSB1c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX2ludHR5cGVzLmgJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX2lu dHR5cGVzLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwy MjEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwg SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZl ZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICog YnkgS2xhdXMgS2xlaW4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBB UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9S UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJRnJvbTogJE5ldEJTRDog aW50X2ZtdGlvLmgsdiAxLjIgMjAwMS8wNC8yNiAxNjoyNToyMSBrbGVpbmsgRXhwICQKKyAqICRG cmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvX2ludHR5cGVzLmggMjE3MTU3IDIw MTEtMDEtMDggMTg6MDk6NDhaIHRpamwgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfSU5UVFlQ RVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVfSU5UVFlQRVNfSF8KKworLyoKKyAqIE1hY3JvcyBmb3Ig Zm9ybWF0IHNwZWNpZmllcnMuCisgKi8KKworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lCV9fUFJJ NjQJCSJsIgorI2RlZmluZQlfX1BSSXB0cgkibCIKKyNlbHNlCisjZGVmaW5lCV9fUFJJNjQJCSJs bCIKKyNkZWZpbmUJX19QUklwdHIKKyNlbmRpZgorCisvKiBmcHJpbnRmKDMpIG1hY3JvcyBmb3Ig c2lnbmVkIGludGVnZXJzLiAqLworCisjZGVmaW5lCVBSSWQ4CQkiZCIJCS8qIGludDhfdCAqLwor I2RlZmluZQlQUklkMTYJCSJkIgkJLyogaW50MTZfdCAqLworI2RlZmluZQlQUklkMzIJCSJkIgkJ LyogaW50MzJfdCAqLworI2RlZmluZQlQUklkNjQJCV9fUFJJNjQiZCIJLyogaW50NjRfdCAqLwor I2RlZmluZQlQUklkTEVBU1Q4CSJkIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSWRM RUFTVDE2CSJkIgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUklkTEVBU1QzMgkiZCIJ CS8qIGludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJZExFQVNUNjQJX19QUkk2NCJkIgkvKiBp bnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVBSSWRGQVNUOAkiZCIJCS8qIGludF9mYXN0OF90ICov CisjZGVmaW5lCVBSSWRGQVNUMTYJImQiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJ ZEZBU1QzMgkiZCIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklkRkFTVDY0CV9fUFJJ NjQiZCIJLyogaW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVBSSWRNQVgJCSJqZCIJCS8qIGludG1h eF90ICovCisjZGVmaW5lCVBSSWRQVFIJCV9fUFJJcHRyImQiCS8qIGludHB0cl90ICovCisKKyNk ZWZpbmUJUFJJaTgJCSJpIgkJLyogaW50OF90ICovCisjZGVmaW5lCVBSSWkxNgkJImkiCQkvKiBp bnQxNl90ICovCisjZGVmaW5lCVBSSWkzMgkJImkiCQkvKiBpbnQzMl90ICovCisjZGVmaW5lCVBS SWk2NAkJX19QUkk2NCJpIgkvKiBpbnQ2NF90ICovCisjZGVmaW5lCVBSSWlMRUFTVDgJImkiCQkv KiBpbnRfbGVhc3Q4X3QgICovCisjZGVmaW5lCVBSSWlMRUFTVDE2CSJpIgkJLyogaW50X2xlYXN0 MTZfdCAqLworI2RlZmluZQlQUklpTEVBU1QzMgkiaSIJCS8qIGludF9sZWFzdDMyX3QgKi8KKyNk ZWZpbmUJUFJJaUxFQVNUNjQJX19QUkk2NCJpIgkvKiBpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5l CVBSSWlGQVNUOAkiaSIJCS8qIGludF9mYXN0OF90ICovCisjZGVmaW5lCVBSSWlGQVNUMTYJImki CQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJaUZBU1QzMgkiaSIJCS8qIGludF9mYXN0 MzJfdCAqLworI2RlZmluZQlQUklpRkFTVDY0CV9fUFJJNjQiaSIJLyogaW50X2Zhc3Q2NF90ICov CisjZGVmaW5lCVBSSWlNQVgJCSJqaSIJCS8qIGludG1heF90ICovCisjZGVmaW5lCVBSSWlQVFIJ CV9fUFJJcHRyImkiCS8qIGludHB0cl90ICovCisKKy8qIGZwcmludGYoMykgbWFjcm9zIGZvciB1 bnNpZ25lZCBpbnRlZ2Vycy4gKi8KKworI2RlZmluZQlQUklvOAkJIm8iCQkvKiB1aW50OF90ICov CisjZGVmaW5lCVBSSW8xNgkJIm8iCQkvKiB1aW50MTZfdCAqLworI2RlZmluZQlQUklvMzIJCSJv IgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJbzY0CQlfX1BSSTY0Im8iCS8qIHVpbnQ2NF90 ICovCisjZGVmaW5lCVBSSW9MRUFTVDgJIm8iCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5l CVBSSW9MRUFTVDE2CSJvIgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJb0xFQVNU MzIJIm8iCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlQUklvTEVBU1Q2NAlfX1BSSTY0 Im8iCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVBSSW9GQVNUOAkibyIJCS8qIHVpbnRf ZmFzdDhfdCAqLworI2RlZmluZQlQUklvRkFTVDE2CSJvIgkJLyogdWludF9mYXN0MTZfdCAqLwor I2RlZmluZQlQUklvRkFTVDMyCSJvIgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklv RkFTVDY0CV9fUFJJNjQibyIJLyogdWludF9mYXN0NjRfdCAqLworI2RlZmluZQlQUklvTUFYCQki am8iCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJb1BUUgkJX19QUklwdHIibyIJLyogdWlu dHB0cl90ICovCisKKyNkZWZpbmUJUFJJdTgJCSJ1IgkJLyogdWludDhfdCAqLworI2RlZmluZQlQ Ukl1MTYJCSJ1IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJUFJJdTMyCQkidSIJCS8qIHVpbnQz Ml90ICovCisjZGVmaW5lCVBSSXU2NAkJX19QUkk2NCJ1IgkvKiB1aW50NjRfdCAqLworI2RlZmlu ZQlQUkl1TEVBU1Q4CSJ1IgkJLyogdWludF9sZWFzdDhfdCAqLworI2RlZmluZQlQUkl1TEVBU1Qx NgkidSIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5lCVBSSXVMRUFTVDMyCSJ1IgkJLyog dWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJdUxFQVNUNjQJX19QUkk2NCJ1IgkvKiB1aW50 X2xlYXN0NjRfdCAqLworI2RlZmluZQlQUkl1RkFTVDgJInUiCQkvKiB1aW50X2Zhc3Q4X3QgKi8K KyNkZWZpbmUJUFJJdUZBU1QxNgkidSIJCS8qIHVpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJ dUZBU1QzMgkidSIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJdUZBU1Q2NAlfX1BS STY0InUiCS8qIHVpbnRfZmFzdDY0X3QgKi8KKyNkZWZpbmUJUFJJdU1BWAkJImp1IgkJLyogdWlu dG1heF90ICovCisjZGVmaW5lCVBSSXVQVFIJCV9fUFJJcHRyInUiCS8qIHVpbnRwdHJfdCAqLwor CisjZGVmaW5lCVBSSXg4CQkieCIJCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUJUFJJeDE2CQkieCIJ CS8qIHVpbnQxNl90ICovCisjZGVmaW5lCVBSSXgzMgkJIngiCQkvKiB1aW50MzJfdCAqLworI2Rl ZmluZQlQUkl4NjQJCV9fUFJJNjQieCIJLyogdWludDY0X3QgKi8KKyNkZWZpbmUJUFJJeExFQVNU OAkieCIJCS8qIHVpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJeExFQVNUMTYJIngiCQkvKiB1 aW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUkl4TEVBU1QzMgkieCIJCS8qIHVpbnRfbGVhc3Qz Ml90ICovCisjZGVmaW5lCVBSSXhMRUFTVDY0CV9fUFJJNjQieCIJLyogdWludF9sZWFzdDY0X3Qg Ki8KKyNkZWZpbmUJUFJJeEZBU1Q4CSJ4IgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVBS SXhGQVNUMTYJIngiCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVBSSXhGQVNUMzIJIngi CQkvKiB1aW50X2Zhc3QzMl90ICovCisjZGVmaW5lCVBSSXhGQVNUNjQJX19QUkk2NCJ4IgkvKiB1 aW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVBSSXhNQVgJCSJqeCIJCS8qIHVpbnRtYXhfdCAqLwor I2RlZmluZQlQUkl4UFRSCQlfX1BSSXB0ciJ4IgkvKiB1aW50cHRyX3QgKi8KKworI2RlZmluZQlQ UklYOAkJIlgiCQkvKiB1aW50OF90ICovCisjZGVmaW5lCVBSSVgxNgkJIlgiCQkvKiB1aW50MTZf dCAqLworI2RlZmluZQlQUklYMzIJCSJYIgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJWDY0 CQlfX1BSSTY0IlgiCS8qIHVpbnQ2NF90ICovCisjZGVmaW5lCVBSSVhMRUFTVDgJIlgiCQkvKiB1 aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSVhMRUFTVDE2CSJYIgkJLyogdWludF9sZWFzdDE2 X3QgKi8KKyNkZWZpbmUJUFJJWExFQVNUMzIJIlgiCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2Rl ZmluZQlQUklYTEVBU1Q2NAlfX1BSSTY0IlgiCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5l CVBSSVhGQVNUOAkiWCIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlQUklYRkFTVDE2CSJY IgkJLyogdWludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUklYRkFTVDMyCSJYIgkJLyogdWludF9m YXN0MzJfdCAqLworI2RlZmluZQlQUklYRkFTVDY0CV9fUFJJNjQiWCIJLyogdWludF9mYXN0NjRf dCAqLworI2RlZmluZQlQUklYTUFYCQkialgiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJ WFBUUgkJX19QUklwdHIiWCIJLyogdWludHB0cl90ICovCisKKy8qIGZzY2FuZigzKSBtYWNyb3Mg Zm9yIHNpZ25lZCBpbnRlZ2Vycy4gKi8KKworI2RlZmluZQlTQ05kOAkJImhoZCIJCS8qIGludDhf dCAqLworI2RlZmluZQlTQ05kMTYJCSJoZCIJCS8qIGludDE2X3QgKi8KKyNkZWZpbmUJU0NOZDMy CQkiZCIJCS8qIGludDMyX3QgKi8KKyNkZWZpbmUJU0NOZDY0CQlfX1BSSTY0ImQiCS8qIGludDY0 X3QgKi8KKyNkZWZpbmUJU0NOZExFQVNUOAkiaGhkIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVm aW5lCVNDTmRMRUFTVDE2CSJoZCIJCS8qIGludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOZExF QVNUMzIJImQiCQkvKiBpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVNDTmRMRUFTVDY0CV9fUFJJ NjQiZCIJLyogaW50X2xlYXN0NjRfdCAqLworI2RlZmluZQlTQ05kRkFTVDgJImQiCQkvKiBpbnRf ZmFzdDhfdCAqLworI2RlZmluZQlTQ05kRkFTVDE2CSJkIgkJLyogaW50X2Zhc3QxNl90ICovCisj ZGVmaW5lCVNDTmRGQVNUMzIJImQiCQkvKiBpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOZEZB U1Q2NAlfX1BSSTY0ImQiCS8qIGludF9mYXN0NjRfdCAqLworI2RlZmluZQlTQ05kTUFYCQkiamQi CQkvKiBpbnRtYXhfdCAqLworI2RlZmluZQlTQ05kUFRSCQlfX1BSSXB0ciJkIgkvKiBpbnRwdHJf dCAqLworCisjZGVmaW5lCVNDTmk4CQkiaGhpIgkJLyogaW50OF90ICovCisjZGVmaW5lCVNDTmkx NgkJImhpIgkJLyogaW50MTZfdCAqLworI2RlZmluZQlTQ05pMzIJCSJpIgkJLyogaW50MzJfdCAq LworI2RlZmluZQlTQ05pNjQJCV9fUFJJNjQiaSIJLyogaW50NjRfdCAqLworI2RlZmluZQlTQ05p TEVBU1Q4CSJoaGkiCQkvKiBpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUMTYJImhp IgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlTQ05pTEVBU1QzMgkiaSIJCS8qIGludF9s ZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUNjQJX19QUkk2NCJpIgkvKiBpbnRfbGVhc3Q2 NF90ICovCisjZGVmaW5lCVNDTmlGQVNUOAkiaSIJCS8qIGludF9mYXN0OF90ICovCisjZGVmaW5l CVNDTmlGQVNUMTYJImkiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOaUZBU1QzMgki aSIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlTQ05pRkFTVDY0CV9fUFJJNjQiaSIJLyog aW50X2Zhc3Q2NF90ICovCisjZGVmaW5lCVNDTmlNQVgJCSJqaSIJCS8qIGludG1heF90ICovCisj ZGVmaW5lCVNDTmlQVFIJCV9fUFJJcHRyImkiCS8qIGludHB0cl90ICovCisKKy8qIGZzY2FuZigz KSBtYWNyb3MgZm9yIHVuc2lnbmVkIGludGVnZXJzLiAqLworCisjZGVmaW5lCVNDTm84CQkiaGhv IgkJLyogdWludDhfdCAqLworI2RlZmluZQlTQ05vMTYJCSJobyIJCS8qIHVpbnQxNl90ICovCisj ZGVmaW5lCVNDTm8zMgkJIm8iCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlTQ05vNjQJCV9fUFJJ NjQibyIJLyogdWludDY0X3QgKi8KKyNkZWZpbmUJU0NOb0xFQVNUOAkiaGhvIgkJLyogdWludF9s ZWFzdDhfdCAqLworI2RlZmluZQlTQ05vTEVBU1QxNgkiaG8iCQkvKiB1aW50X2xlYXN0MTZfdCAq LworI2RlZmluZQlTQ05vTEVBU1QzMgkibyIJCS8qIHVpbnRfbGVhc3QzMl90ICovCisjZGVmaW5l CVNDTm9MRUFTVDY0CV9fUFJJNjQibyIJLyogdWludF9sZWFzdDY0X3QgKi8KKyNkZWZpbmUJU0NO b0ZBU1Q4CSJvIgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVNDTm9GQVNUMTYJIm8iCQkv KiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVNDTm9GQVNUMzIJIm8iCQkvKiB1aW50X2Zhc3Qz Ml90ICovCisjZGVmaW5lCVNDTm9GQVNUNjQJX19QUkk2NCJvIgkvKiB1aW50X2Zhc3Q2NF90ICov CisjZGVmaW5lCVNDTm9NQVgJCSJqbyIJCS8qIHVpbnRtYXhfdCAqLworI2RlZmluZQlTQ05vUFRS CQlfX1BSSXB0ciJvIgkvKiB1aW50cHRyX3QgKi8KKworI2RlZmluZQlTQ051OAkJImhodSIJCS8q IHVpbnQ4X3QgKi8KKyNkZWZpbmUJU0NOdTE2CQkiaHUiCQkvKiB1aW50MTZfdCAqLworI2RlZmlu ZQlTQ051MzIJCSJ1IgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJU0NOdTY0CQlfX1BSSTY0InUi CS8qIHVpbnQ2NF90ICovCisjZGVmaW5lCVNDTnVMRUFTVDgJImhodSIJCS8qIHVpbnRfbGVhc3Q4 X3QgKi8KKyNkZWZpbmUJU0NOdUxFQVNUMTYJImh1IgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNk ZWZpbmUJU0NOdUxFQVNUMzIJInUiCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlTQ051 TEVBU1Q2NAlfX1BSSTY0InUiCS8qIHVpbnRfbGVhc3Q2NF90ICovCisjZGVmaW5lCVNDTnVGQVNU OAkidSIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlTQ051RkFTVDE2CSJ1IgkJLyogdWlu dF9mYXN0MTZfdCAqLworI2RlZmluZQlTQ051RkFTVDMyCSJ1IgkJLyogdWludF9mYXN0MzJfdCAq LworI2RlZmluZQlTQ051RkFTVDY0CV9fUFJJNjQidSIJLyogdWludF9mYXN0NjRfdCAqLworI2Rl ZmluZQlTQ051TUFYCQkianUiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJU0NOdVBUUgkJX19Q UklwdHIidSIJLyogdWludHB0cl90ICovCisKKyNkZWZpbmUJU0NOeDgJCSJoaHgiCQkvKiB1aW50 OF90ICovCisjZGVmaW5lCVNDTngxNgkJImh4IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJU0NO eDMyCQkieCIJCS8qIHVpbnQzMl90ICovCisjZGVmaW5lCVNDTng2NAkJX19QUkk2NCJ4IgkvKiB1 aW50NjRfdCAqLworI2RlZmluZQlTQ054TEVBU1Q4CSJoaHgiCQkvKiB1aW50X2xlYXN0OF90ICov CisjZGVmaW5lCVNDTnhMRUFTVDE2CSJoeCIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5l CVNDTnhMRUFTVDMyCSJ4IgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOeExFQVNU NjQJX19QUkk2NCJ4IgkvKiB1aW50X2xlYXN0NjRfdCAqLworI2RlZmluZQlTQ054RkFTVDgJIngi CQkvKiB1aW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOeEZBU1QxNgkieCIJCS8qIHVpbnRfZmFz dDE2X3QgKi8KKyNkZWZpbmUJU0NOeEZBU1QzMgkieCIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNk ZWZpbmUJU0NOeEZBU1Q2NAlfX1BSSTY0IngiCS8qIHVpbnRfZmFzdDY0X3QgKi8KKyNkZWZpbmUJ U0NOeE1BWAkJImp4IgkJLyogdWludG1heF90ICovCisjZGVmaW5lCVNDTnhQVFIJCV9fUFJJcHRy IngiCS8qIHVpbnRwdHJfdCAqLworCisjZW5kaWYgLyogIV9NQUNISU5FX0lOVFRZUEVTX0hfICov CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaCAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaAotLS0gdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAveDg2L19saW1pdHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fbGltaXRzLmgJMjAx Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMDEgQEAKKy8qLQor ICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQu IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMg Y29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor ICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWxpbWl0cy5oCTguMyAoQmVya2VsZXkpIDEvNC85 NAorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9fbGltaXRzLmggMjM1 OTM5IDIwMTItMDUtMjQgMjE6NDQ6NDZaIG9icmllbiAkCisgKi8KKworI2lmbmRlZglfTUFDSElO RV9fTElNSVRTX0hfCisjZGVmaW5lCV9NQUNISU5FX19MSU1JVFNfSF8KKworLyoKKyAqIEFjY29y ZGluZyB0byBBTlNJIChzZWN0aW9uIDIuMi40LjIpLCB0aGUgdmFsdWVzIGJlbG93IG11c3QgYmUg dXNhYmxlIGJ5CisgKiAjaWYgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzLiAgQWRkaXRpb25hbGx5 LCB0aGUgZXhwcmVzc2lvbiBtdXN0IGhhdmUgdGhlCisgKiBzYW1lIHR5cGUgYXMgd291bGQgYW4g ZXhwcmVzc2lvbiB0aGF0IGlzIGFuIG9iamVjdCBvZiB0aGUgY29ycmVzcG9uZGluZworICogdHlw ZSBjb252ZXJ0ZWQgYWNjb3JkaW5nIHRvIHRoZSBpbnRlZ3JhbCBwcm9tb3Rpb25zLiAgVGhlIHN1 YnRyYWN0aW9uIGZvcgorICogSU5UX01JTiwgZXRjLiwgaXMgc28gdGhlIHZhbHVlIGlzIG5vdCB1 bnNpZ25lZDsgZS5nLiwgMHg4MDAwMDAwMCBpcyBhbgorICogdW5zaWduZWQgaW50IGZvciAzMi1i aXQgdHdvJ3MgY29tcGxlbWVudCBBTlNJIGNvbXBpbGVycyAoc2VjdGlvbiAzLjEuMy4yKS4KKyAq LworCisjZGVmaW5lCV9fQ0hBUl9CSVQJOAkJLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBjaGFyICov CisKKyNkZWZpbmUJX19TQ0hBUl9NQVgJMHg3ZgkJLyogbWF4IHZhbHVlIGZvciBhIHNpZ25lZCBj aGFyICovCisjZGVmaW5lCV9fU0NIQVJfTUlOCSgtMHg3ZiAtIDEpCS8qIG1pbiB2YWx1ZSBmb3Ig YSBzaWduZWQgY2hhciAqLworCisjZGVmaW5lCV9fVUNIQVJfTUFYCTB4ZmYJCS8qIG1heCB2YWx1 ZSBmb3IgYW4gdW5zaWduZWQgY2hhciAqLworCisjZGVmaW5lCV9fVVNIUlRfTUFYCTB4ZmZmZgkJ LyogbWF4IHZhbHVlIGZvciBhbiB1bnNpZ25lZCBzaG9ydCAqLworI2RlZmluZQlfX1NIUlRfTUFY CTB4N2ZmZgkJLyogbWF4IHZhbHVlIGZvciBhIHNob3J0ICovCisjZGVmaW5lCV9fU0hSVF9NSU4J KC0weDdmZmYgLSAxKQkvKiBtaW4gdmFsdWUgZm9yIGEgc2hvcnQgKi8KKworI2RlZmluZQlfX1VJ TlRfTUFYCTB4ZmZmZmZmZmYJLyogbWF4IHZhbHVlIGZvciBhbiB1bnNpZ25lZCBpbnQgKi8KKyNk ZWZpbmUJX19JTlRfTUFYCTB4N2ZmZmZmZmYJLyogbWF4IHZhbHVlIGZvciBhbiBpbnQgKi8KKyNk ZWZpbmUJX19JTlRfTUlOCSgtMHg3ZmZmZmZmZiAtIDEpCS8qIG1pbiB2YWx1ZSBmb3IgYW4gaW50 ICovCisKKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlfX1VMT05HX01BWAkweGZmZmZmZmZmZmZm ZmZmZmYJLyogbWF4IGZvciBhbiB1bnNpZ25lZCBsb25nICovCisjZGVmaW5lCV9fTE9OR19NQVgJ MHg3ZmZmZmZmZmZmZmZmZmZmCS8qIG1heCBmb3IgYSBsb25nICovCisjZGVmaW5lCV9fTE9OR19N SU4JKC0weDdmZmZmZmZmZmZmZmZmZmYgLSAxKSAvKiBtaW4gZm9yIGEgbG9uZyAqLworI2Vsc2UK KyNkZWZpbmUJX19VTE9OR19NQVgJMHhmZmZmZmZmZlVMCisjZGVmaW5lCV9fTE9OR19NQVgJMHg3 ZmZmZmZmZkwKKyNkZWZpbmUJX19MT05HX01JTgkoLTB4N2ZmZmZmZmZMIC0gMSkKKyNlbmRpZgor CisJCQkvKiBtYXggdmFsdWUgZm9yIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyAqLworI2RlZmluZQlf X1VMTE9OR19NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCisjZGVmaW5lCV9fTExPTkdfTUFYCTB4 N2ZmZmZmZmZmZmZmZmZmZkxMCS8qIG1heCB2YWx1ZSBmb3IgYSBsb25nIGxvbmcgKi8KKyNkZWZp bmUJX19MTE9OR19NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTCAtIDEpICAvKiBtaW4gZm9yIGEg bG9uZyBsb25nICovCisKKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlfX1NTSVpFX01BWAlfX0xP TkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCisjZGVmaW5lCV9fU0laRV9UX01B WAlfX1VMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90ICovCisjZGVmaW5lCV9fT0ZG X01BWAlfX0xPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYW4gb2ZmX3QgKi8KKyNkZWZpbmUJX19P RkZfTUlOCV9fTE9OR19NSU4JLyogbWluIHZhbHVlIGZvciBhbiBvZmZfdCAqLworLyogUXVhZHMg YW5kIGxvbmdzIGFyZSB0aGUgc2FtZSBvbiB0aGUgYW1kNjQuICBFbnN1cmUgdGhleSBzdGF5IGlu IHN5bmMuICovCisjZGVmaW5lCV9fVVFVQURfTUFYCV9fVUxPTkdfTUFYCS8qIG1heCB2YWx1ZSBm b3IgYSB1cXVhZF90ICovCisjZGVmaW5lCV9fUVVBRF9NQVgJX19MT05HX01BWAkvKiBtYXggdmFs dWUgZm9yIGEgcXVhZF90ICovCisjZGVmaW5lCV9fUVVBRF9NSU4JX19MT05HX01JTgkvKiBtaW4g dmFsdWUgZm9yIGEgcXVhZF90ICovCisjZGVmaW5lCV9fTE9OR19CSVQJNjQKKyNlbHNlCisjZGVm aW5lCV9fU1NJWkVfTUFYCV9fSU5UX01BWAorI2RlZmluZQlfX1NJWkVfVF9NQVgJX19VSU5UX01B WAorI2RlZmluZQlfX09GRl9NQVgJX19MTE9OR19NQVgKKyNkZWZpbmUJX19PRkZfTUlOCV9fTExP TkdfTUlOCisjZGVmaW5lCV9fVVFVQURfTUFYCV9fVUxMT05HX01BWAorI2RlZmluZQlfX1FVQURf TUFYCV9fTExPTkdfTUFYCisjZGVmaW5lCV9fUVVBRF9NSU4JX19MTE9OR19NSU4KKyNkZWZpbmUJ X19MT05HX0JJVAkzMgorI2VuZGlmCisKKyNkZWZpbmUJX19XT1JEX0JJVAkzMgorCisvKiBNaW5p bXVtIHNpZ25hbCBzdGFjayBzaXplLiAqLworI2RlZmluZQlfX01JTlNJR1NUS1NaCSg1MTIgKiA0 KQorCisjZW5kaWYgLyogIV9NQUNISU5FX19MSU1JVFNfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvX3N0ZGludC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC94ODYvX3N0ZGludC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYv X3N0ZGludC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3Ny Yy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L19zdGRpbnQuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAw MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE5MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw MDEsIDIwMDIgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAo YykgMjAwMSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRl ZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEtsYXVzIEtsZWluLgorICoKKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnZW1lbnQ6CisgKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgTmV0QlNECisgKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRz IGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3Vu ZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwg SU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL19zdGRp bnQuaCAzMDEwMzAgMjAxNi0wNS0zMSAwODozODoyNFogZWQgJAorICovCisKKyNpZm5kZWYgX01B Q0hJTkVfX1NURElOVF9IXworI2RlZmluZQlfTUFDSElORV9fU1RESU5UX0hfCisKKyNpbmNsdWRl IDxtYWNoaW5lL19saW1pdHMuaD4KKworI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZp bmVkKF9fU1REQ19DT05TVEFOVF9NQUNST1MpCisKKyNkZWZpbmUJSU5UOF9DKGMpCQkoYykKKyNk ZWZpbmUJSU5UMTZfQyhjKQkJKGMpCisjZGVmaW5lCUlOVDMyX0MoYykJCShjKQorCisjZGVmaW5l CVVJTlQ4X0MoYykJCShjKQorI2RlZmluZQlVSU5UMTZfQyhjKQkJKGMpCisjZGVmaW5lCVVJTlQz Ml9DKGMpCQkoYyAjIyBVKQorCisjaWZkZWYJX19MUDY0X18KKyNkZWZpbmUJSU5UNjRfQyhjKQkJ KGMgIyMgTCkKKyNkZWZpbmUJVUlOVDY0X0MoYykJCShjICMjIFVMKQorI2Vsc2UKKyNkZWZpbmUJ SU5UNjRfQyhjKQkJKGMgIyMgTEwpCisjZGVmaW5lCVVJTlQ2NF9DKGMpCQkoYyAjIyBVTEwpCisj ZW5kaWYKKworI2RlZmluZQlJTlRNQVhfQyhjKQkJSU5UNjRfQyhjKQorI2RlZmluZQlVSU5UTUFY X0MoYykJCVVJTlQ2NF9DKGMpCisKKyNlbmRpZiAvKiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwg ZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKSAqLworCisjaWYgIWRlZmluZWQoX19jcGx1 c3BsdXMpIHx8IGRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykKKworLyoKKyAqIElTTy9JRUMg OTg5OToxOTk5CisgKiA3LjE4LjIuMSBMaW1pdHMgb2YgZXhhY3Qtd2lkdGggaW50ZWdlciB0eXBl cworICovCisjZGVmaW5lCUlOVDhfTUlOCSgtMHg3Zi0xKQorI2RlZmluZQlJTlQxNl9NSU4JKC0w eDdmZmYtMSkKKyNkZWZpbmUJSU5UMzJfTUlOCSgtMHg3ZmZmZmZmZi0xKQorCisjZGVmaW5lCUlO VDhfTUFYCTB4N2YKKyNkZWZpbmUJSU5UMTZfTUFYCTB4N2ZmZgorI2RlZmluZQlJTlQzMl9NQVgJ MHg3ZmZmZmZmZgorCisjZGVmaW5lCVVJTlQ4X01BWAkweGZmCisjZGVmaW5lCVVJTlQxNl9NQVgJ MHhmZmZmCisjZGVmaW5lCVVJTlQzMl9NQVgJMHhmZmZmZmZmZlUKKworI2lmZGVmIF9fTFA2NF9f CisjZGVmaW5lCUlOVDY0X01JTgkoLTB4N2ZmZmZmZmZmZmZmZmZmZi0xKQorI2RlZmluZQlJTlQ2 NF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmCisjZGVmaW5lCVVJTlQ2NF9NQVgJMHhmZmZmZmZmZmZm ZmZmZmZmCisjZWxzZQorI2RlZmluZQlJTlQ2NF9NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTC0x KQorI2RlZmluZQlJTlQ2NF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTEwKKyNkZWZpbmUJVUlOVDY0 X01BWAkweGZmZmZmZmZmZmZmZmZmZmZVTEwKKyNlbmRpZgorCisvKgorICogSVNPL0lFQyA5ODk5 OjE5OTkKKyAqIDcuMTguMi4yICBMaW1pdHMgb2YgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVz CisgKi8KKy8qIE1pbmltdW0gdmFsdWVzIG9mIG1pbmltdW0td2lkdGggc2lnbmVkIGludGVnZXIg dHlwZXMuICovCisjZGVmaW5lCUlOVF9MRUFTVDhfTUlOCUlOVDhfTUlOCisjZGVmaW5lCUlOVF9M RUFTVDE2X01JTglJTlQxNl9NSU4KKyNkZWZpbmUJSU5UX0xFQVNUMzJfTUlOCUlOVDMyX01JTgor I2RlZmluZQlJTlRfTEVBU1Q2NF9NSU4JSU5UNjRfTUlOCisKKy8qIE1heGltdW0gdmFsdWVzIG9m IG1pbmltdW0td2lkdGggc2lnbmVkIGludGVnZXIgdHlwZXMuICovCisjZGVmaW5lCUlOVF9MRUFT VDhfTUFYCUlOVDhfTUFYCisjZGVmaW5lCUlOVF9MRUFTVDE2X01BWAlJTlQxNl9NQVgKKyNkZWZp bmUJSU5UX0xFQVNUMzJfTUFYCUlOVDMyX01BWAorI2RlZmluZQlJTlRfTEVBU1Q2NF9NQVgJSU5U NjRfTUFYCisKKy8qIE1heGltdW0gdmFsdWVzIG9mIG1pbmltdW0td2lkdGggdW5zaWduZWQgaW50 ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUJVUlOVF9MRUFTVDhfTUFYCSBVSU5UOF9NQVgKKyNkZWZp bmUJVUlOVF9MRUFTVDE2X01BWCBVSU5UMTZfTUFYCisjZGVmaW5lCVVJTlRfTEVBU1QzMl9NQVgg VUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0xFQVNUNjRfTUFYIFVJTlQ2NF9NQVgKKworLyoKKyAq IElTTy9JRUMgOTg5OToxOTk5CisgKiA3LjE4LjIuMyAgTGltaXRzIG9mIGZhc3Rlc3QgbWluaW11 bS13aWR0aCBpbnRlZ2VyIHR5cGVzCisgKi8KKy8qIE1pbmltdW0gdmFsdWVzIG9mIGZhc3Rlc3Qg bWluaW11bS13aWR0aCBzaWduZWQgaW50ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUJSU5UX0ZBU1Q4 X01JTglJTlQzMl9NSU4KKyNkZWZpbmUJSU5UX0ZBU1QxNl9NSU4JSU5UMzJfTUlOCisjZGVmaW5l CUlOVF9GQVNUMzJfTUlOCUlOVDMyX01JTgorI2RlZmluZQlJTlRfRkFTVDY0X01JTglJTlQ2NF9N SU4KKworLyogTWF4aW11bSB2YWx1ZXMgb2YgZmFzdGVzdCBtaW5pbXVtLXdpZHRoIHNpZ25lZCBp bnRlZ2VyIHR5cGVzLiAqLworI2RlZmluZQlJTlRfRkFTVDhfTUFYCUlOVDMyX01BWAorI2RlZmlu ZQlJTlRfRkFTVDE2X01BWAlJTlQzMl9NQVgKKyNkZWZpbmUJSU5UX0ZBU1QzMl9NQVgJSU5UMzJf TUFYCisjZGVmaW5lCUlOVF9GQVNUNjRfTUFYCUlOVDY0X01BWAorCisvKiBNYXhpbXVtIHZhbHVl cyBvZiBmYXN0ZXN0IG1pbmltdW0td2lkdGggdW5zaWduZWQgaW50ZWdlciB0eXBlcy4gKi8KKyNk ZWZpbmUJVUlOVF9GQVNUOF9NQVgJVUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0ZBU1QxNl9NQVgJ VUlOVDMyX01BWAorI2RlZmluZQlVSU5UX0ZBU1QzMl9NQVgJVUlOVDMyX01BWAorI2RlZmluZQlV SU5UX0ZBU1Q2NF9NQVgJVUlOVDY0X01BWAorCisvKgorICogSVNPL0lFQyA5ODk5OjE5OTkKKyAq IDcuMTguMi40ICBMaW1pdHMgb2YgaW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2Jq ZWN0IHBvaW50ZXJzCisgKi8KKyNpZmRlZglfX0xQNjRfXworI2RlZmluZQlJTlRQVFJfTUlOCUlO VDY0X01JTgorI2RlZmluZQlJTlRQVFJfTUFYCUlOVDY0X01BWAorI2RlZmluZQlVSU5UUFRSX01B WAlVSU5UNjRfTUFYCisjZWxzZQorI2RlZmluZQlJTlRQVFJfTUlOCUlOVDMyX01JTgorI2RlZmlu ZQlJTlRQVFJfTUFYCUlOVDMyX01BWAorI2RlZmluZQlVSU5UUFRSX01BWAlVSU5UMzJfTUFYCisj ZW5kaWYKKworLyoKKyAqIElTTy9JRUMgOTg5OToxOTk5CisgKiA3LjE4LjIuNSAgTGltaXRzIG9m IGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMKKyAqLworI2RlZmluZQlJTlRNQVhfTUlOCUlO VDY0X01JTgorI2RlZmluZQlJTlRNQVhfTUFYCUlOVDY0X01BWAorI2RlZmluZQlVSU5UTUFYX01B WAlVSU5UNjRfTUFYCisKKy8qCisgKiBJU08vSUVDIDk4OTk6MTk5OQorICogNy4xOC4zICBMaW1p dHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcworICovCisjaWZkZWYJX19MUDY0X18KKy8qIExpbWl0 cyBvZiBwdHJkaWZmX3QuICovCisjZGVmaW5lCVBUUkRJRkZfTUlOCUlOVDY0X01JTgkKKyNkZWZp bmUJUFRSRElGRl9NQVgJSU5UNjRfTUFYCisKKy8qIExpbWl0cyBvZiBzaWdfYXRvbWljX3QuICov CisjZGVmaW5lCVNJR19BVE9NSUNfTUlOCV9fTE9OR19NSU4KKyNkZWZpbmUJU0lHX0FUT01JQ19N QVgJX19MT05HX01BWAorCisvKiBMaW1pdCBvZiBzaXplX3QuICovCisjZGVmaW5lCVNJWkVfTUFY CVVJTlQ2NF9NQVgKKyNlbHNlCisjZGVmaW5lCVBUUkRJRkZfTUlOCUlOVDMyX01JTgorI2RlZmlu ZQlQVFJESUZGX01BWAlJTlQzMl9NQVgKKyNkZWZpbmUJU0lHX0FUT01JQ19NSU4JSU5UMzJfTUlO CisjZGVmaW5lCVNJR19BVE9NSUNfTUFYCUlOVDMyX01BWAorI2RlZmluZQlTSVpFX01BWAlVSU5U MzJfTUFYCisjZW5kaWYKKworLyogTGltaXRzIG9mIHdpbnRfdC4gKi8KKyNkZWZpbmUJV0lOVF9N SU4JSU5UMzJfTUlOCisjZGVmaW5lCVdJTlRfTUFYCUlOVDMyX01BWAorCisjZW5kaWYgLyogIWRl ZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykgKi8KKwor I2VuZGlmIC8qICFfTUFDSElORV9fU1RESU5UX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAveDg2L190eXBlcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC94ODYvX3R5cGVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9fdHlwZXMu aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21v ZHVsZXMvbmV0bWFwL3g4Ni9fdHlwZXMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCAr MDEwMApAQCAtMCwwICsxLDE3NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTWlrZSBC YXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5Mwor ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6 CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3Ju aWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5U UyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K KyAqCisgKglGcm9tOiBAKCMpYW5zaS5oCTguMiAoQmVya2VsZXkpIDEvNC85NAorICoJRnJvbTog QCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0CisgKiAkRnJlZUJTRDogcmVsZW5nLzEx LjAvc3lzL3g4Ni9pbmNsdWRlL190eXBlcy5oIDMwMTAyOSAyMDE2LTA1LTMxIDA4OjM2OjM5WiBl ZCAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9fVFlQRVNfSF8KKyNkZWZpbmUJX01BQ0hJTkVf X1RZUEVTX0hfCisKKyNpZm5kZWYgX1NZU19DREVGU19IXworI2Vycm9yIHRoaXMgZmlsZSBuZWVk cyBzeXMvY2RlZnMuaCBhcyBhIHByZXJlcXVpc2l0ZQorI2VuZGlmCisKKyNpbmNsdWRlIDxtYWNo aW5lL19saW1pdHMuaD4KKworI2RlZmluZSBfX05PX1NUUklDVF9BTElHTk1FTlQKKworLyoKKyAq IEJhc2ljIHR5cGVzIHVwb24gd2hpY2ggbW9zdCBvdGhlciB0eXBlcyBhcmUgYnVpbHQuCisgKi8K K3R5cGVkZWYJc2lnbmVkIGNoYXIJCV9faW50OF90OwordHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlf X3VpbnQ4X3Q7Cit0eXBlZGVmCXNob3J0CQkJX19pbnQxNl90OwordHlwZWRlZgl1bnNpZ25lZCBz aG9ydAkJX191aW50MTZfdDsKK3R5cGVkZWYJaW50CQkJX19pbnQzMl90OwordHlwZWRlZgl1bnNp Z25lZCBpbnQJCV9fdWludDMyX3Q7CisjaWZkZWYJX19MUDY0X18KK3R5cGVkZWYJbG9uZwkJCV9f aW50NjRfdDsKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwkJX191aW50NjRfdDsKKyNlbHNlCisjaWZu ZGVmIGxpbnQKK19fZXh0ZW5zaW9uX18KKyNlbmRpZgorLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJ bG9uZyBsb25nCQlfX2ludDY0X3Q7CisjaWZuZGVmIGxpbnQKK19fZXh0ZW5zaW9uX18KKyNlbmRp ZgorLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJdW5zaWduZWQgbG9uZyBsb25nCV9fdWludDY0X3Q7 CisjZW5kaWYKKworLyoKKyAqIFN0YW5kYXJkIHR5cGUgZGVmaW5pdGlvbnMuCisgKi8KKyNpZmRl ZglfX0xQNjRfXwordHlwZWRlZglfX2ludDMyX3QJX19jbG9ja190OwkJLyogY2xvY2soKS4uLiAq LwordHlwZWRlZglfX2ludDY0X3QJX19jcml0aWNhbF90OwordHlwZWRlZglkb3VibGUJCV9fZG91 YmxlX3Q7Cit0eXBlZGVmCWZsb2F0CQlfX2Zsb2F0X3Q7Cit0eXBlZGVmCV9faW50NjRfdAlfX2lu dGZwdHJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CV9faW50cHRyX3Q7CisjZWxzZQordHlwZWRlZgl1 bnNpZ25lZCBsb25nCV9fY2xvY2tfdDsKK3R5cGVkZWYJX19pbnQzMl90CV9fY3JpdGljYWxfdDsK K3R5cGVkZWYJbG9uZyBkb3VibGUJX19kb3VibGVfdDsKK3R5cGVkZWYJbG9uZyBkb3VibGUJX19m bG9hdF90OwordHlwZWRlZglfX2ludDMyX3QJX19pbnRmcHRyX3Q7Cit0eXBlZGVmCV9faW50MzJf dAlfX2ludHB0cl90OworI2VuZGlmCit0eXBlZGVmCV9faW50NjRfdAlfX2ludG1heF90OwordHlw ZWRlZglfX2ludDMyX3QJX19pbnRfZmFzdDhfdDsKK3R5cGVkZWYJX19pbnQzMl90CV9faW50X2Zh c3QxNl90OwordHlwZWRlZglfX2ludDMyX3QJX19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmCV9faW50 NjRfdAlfX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYJX19pbnQ4X3QJX19pbnRfbGVhc3Q4X3Q7Cit0 eXBlZGVmCV9faW50MTZfdAlfX2ludF9sZWFzdDE2X3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX2lu dF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9faW50NjRfdAlfX2ludF9sZWFzdDY0X3Q7CisjaWZkZWYJ X19MUDY0X18KK3R5cGVkZWYJX19pbnQ2NF90CV9fcHRyZGlmZl90OwkJLyogcHRyMSAtIHB0cjIg Ki8KK3R5cGVkZWYJX19pbnQ2NF90CV9fcmVnaXN0ZXJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CV9f c2Vnc3pfdDsJCS8qIHNlZ21lbnQgc2l6ZSAoaW4gcGFnZXMpICovCit0eXBlZGVmCV9fdWludDY0 X3QJX19zaXplX3Q7CQkvKiBzaXplb2YoKSAqLwordHlwZWRlZglfX2ludDY0X3QJX19zc2l6ZV90 OwkJLyogYnl0ZSBjb3VudCBvciBlcnJvciAqLwordHlwZWRlZglfX2ludDY0X3QJX190aW1lX3Q7 CQkvKiB0aW1lKCkuLi4gKi8KK3R5cGVkZWYJX191aW50NjRfdAlfX3VpbnRmcHRyX3Q7Cit0eXBl ZGVmCV9fdWludDY0X3QJX191aW50cHRyX3Q7CisjZWxzZQordHlwZWRlZglfX2ludDMyX3QJX19w dHJkaWZmX3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX3JlZ2lzdGVyX3Q7Cit0eXBlZGVmCV9faW50 MzJfdAlfX3NlZ3N6X3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJX19zaXplX3Q7Cit0eXBlZGVmCV9f aW50MzJfdAlfX3NzaXplX3Q7Cit0eXBlZGVmCV9faW50MzJfdAlfX3RpbWVfdDsKK3R5cGVkZWYJ X191aW50MzJfdAlfX3VpbnRmcHRyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJX191aW50cHRyX3Q7 CisjZW5kaWYKK3R5cGVkZWYJX191aW50NjRfdAlfX3VpbnRtYXhfdDsKK3R5cGVkZWYJX191aW50 MzJfdAlfX3VpbnRfZmFzdDhfdDsKK3R5cGVkZWYJX191aW50MzJfdAlfX3VpbnRfZmFzdDE2X3Q7 Cit0eXBlZGVmCV9fdWludDMyX3QJX191aW50X2Zhc3QzMl90OwordHlwZWRlZglfX3VpbnQ2NF90 CV9fdWludF9mYXN0NjRfdDsKK3R5cGVkZWYJX191aW50OF90CV9fdWludF9sZWFzdDhfdDsKK3R5 cGVkZWYJX191aW50MTZfdAlfX3VpbnRfbGVhc3QxNl90OwordHlwZWRlZglfX3VpbnQzMl90CV9f dWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDY0X3QJX191aW50X2xlYXN0NjRfdDsKKyNp ZmRlZglfX0xQNjRfXwordHlwZWRlZglfX3VpbnQ2NF90CV9fdV9yZWdpc3Rlcl90OwordHlwZWRl ZglfX3VpbnQ2NF90CV9fdm1fb2Zmc2V0X3Q7Cit0eXBlZGVmCV9fdWludDY0X3QJX192bV9wYWRk cl90OwordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fc2l6ZV90OworI2Vsc2UKK3R5cGVkZWYJX191 aW50MzJfdAlfX3VfcmVnaXN0ZXJfdDsKK3R5cGVkZWYJX191aW50MzJfdAlfX3ZtX29mZnNldF90 OworI2lmZGVmIFBBRQordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fcGFkZHJfdDsKKyNlbHNlCit0 eXBlZGVmCV9fdWludDMyX3QJX192bV9wYWRkcl90OworI2VuZGlmCit0eXBlZGVmCV9fdWludDMy X3QJX192bV9zaXplX3Q7CisjZW5kaWYKK3R5cGVkZWYJX19pbnQ2NF90CV9fdm1fb29mZnNldF90 OwordHlwZWRlZglfX3VpbnQ2NF90CV9fdm1fcGluZGV4X3Q7Cit0eXBlZGVmCWludAkJX19fd2No YXJfdDsKKworI2RlZmluZQlfX1dDSEFSX01JTglfX0lOVF9NSU4JLyogbWluIHZhbHVlIGZvciBh IHdjaGFyX3QgKi8KKyNkZWZpbmUJX19XQ0hBUl9NQVgJX19JTlRfTUFYCS8qIG1heCB2YWx1ZSBm b3IgYSB3Y2hhcl90ICovCisKKy8qCisgKiBVbnVzdWFsIHR5cGUgZGVmaW5pdGlvbnMuCisgKi8K KyNpZmRlZiBfX0dOVUNMSUtFX0JVSUxUSU5fVkFSQVJHUwordHlwZWRlZglfX2J1aWx0aW5fdmFf bGlzdAlfX3ZhX2xpc3Q7CS8qIGludGVybmFsbHkga25vd24gdG8gZ2NjICovCisjZWxzZQorI2lm ZGVmIF9fTFA2NF9fCitzdHJ1Y3QgX19zX3ZhX2xpc3QgeworCV9fdWludDMyX3QJX3BhZDFbMl07 CS8qIGdwX29mZnNldCwgZnBfb2Zmc2V0ICovCisJX191aW50NjRfdAlfcGFkMlsyXTsJLyogb3Zl cmZsb3dfYXJnX2FyZWEsIHJlZ19zYXZlX2FyZWEgKi8KK307Cit0eXBlZGVmCXN0cnVjdCBfX3Nf dmFfbGlzdAlfX3ZhX2xpc3Q7CisjZWxzZQordHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7Cisj ZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19HTlVDX1ZBX0xJU1RfQ09NUEFUSUJJTElUWSkg JiYgIWRlZmluZWQoX19HTlVDX1ZBX0xJU1QpIFwKKyAgICAmJiAhZGVmaW5lZChfX05PX0dOVUNf VkFfTElTVCkKKyNkZWZpbmUgX19HTlVDX1ZBX0xJU1QKK3R5cGVkZWYgX192YV9saXN0CQlfX2du dWNfdmFfbGlzdDsJLyogY29tcGF0aWJpbGl0eSB3L0dOVSBoZWFkZXJzKi8KKyNlbmRpZgorCisj ZW5kaWYgLyogIV9NQUNISU5FX19UWVBFU19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lz L21vZHVsZXMvbmV0bWFwL3g4Ni9hY3BpY2FfbWFjaGRlcC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC94ODYvYWNwaWNhX21hY2hkZXAuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAveDg2L2FjcGljYV9tYWNoZGVwLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYWNwaWNhX21hY2hkZXAuaAky MDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDg4IEBACisvKi0K KyAqIENvcHlyaWdodCAoYykgMjAwMiBNaXRzdXJ1IElXQVNBS0kKKyAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B R0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9hY3BpY2Ff bWFjaGRlcC5oIDI5ODA5NCAyMDE2LTA0LTE2IDAzOjQ0OjUwWiBnamIgJAorICovCisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqCisgKiBOYW1lOiBhY3BpY2FfbWFjaGRlcC5oIC0gYXJjaC1z cGVjaWZpYyBkZWZpbmVzLCBldGMuCisgKiAgICAgICAkUmV2aXNpb24kCisgKgorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCisjaWZuZGVmIF9fQUNQSUNBX01BQ0hERVBfSF9fCisjZGVmaW5lCV9f QUNQSUNBX01BQ0hERVBfSF9fCisKKyNpZmRlZiBfS0VSTkVMCisvKgorICogQ2FsbGluZyBjb252 ZW50aW9uczoKKyAqCisgKiBBQ1BJX1NZU1RFTV9YRkFDRSAgICAgICAgLSBJbnRlcmZhY2VzIHRv IGhvc3QgT1MgKGhhbmRsZXJzLCB0aHJlYWRzKQorICogQUNQSV9FWFRFUk5BTF9YRkFDRSAgICAg IC0gRXh0ZXJuYWwgQUNQSSBpbnRlcmZhY2VzIAorICogQUNQSV9JTlRFUk5BTF9YRkFDRSAgICAg IC0gSW50ZXJuYWwgQUNQSSBpbnRlcmZhY2VzCisgKiBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRSAg LSBJbnRlcm5hbCB2YXJpYWJsZS1wYXJhbWV0ZXIgbGlzdCBpbnRlcmZhY2VzCisgKi8KKyNkZWZp bmUJQUNQSV9TWVNURU1fWEZBQ0UKKyNkZWZpbmUJQUNQSV9FWFRFUk5BTF9YRkFDRQorI2RlZmlu ZQlBQ1BJX0lOVEVSTkFMX1hGQUNFCisjZGVmaW5lCUFDUElfSU5URVJOQUxfVkFSX1hGQUNFCisK Ky8qIEFzbSBtYWNyb3MgKi8KKworI2RlZmluZQlBQ1BJX0FTTV9NQUNST1MKKyNkZWZpbmUJQlJF QUtQT0lOVDMKKyNkZWZpbmUJQUNQSV9ESVNBQkxFX0lSUVMoKSBkaXNhYmxlX2ludHIoKQorI2Rl ZmluZQlBQ1BJX0VOQUJMRV9JUlFTKCkgIGVuYWJsZV9pbnRyKCkKKworI2RlZmluZQlBQ1BJX0ZM VVNIX0NQVV9DQUNIRSgpCXdiaW52ZCgpCisKKy8qIFNlY3Rpb24gNS4yLjEwLjE6IGdsb2JhbCBs b2NrIGFjcXVpcmUvcmVsZWFzZSBmdW5jdGlvbnMgKi8KK2ludAlhY3BpX2FjcXVpcmVfZ2xvYmFs X2xvY2sodm9sYXRpbGUgdWludDMyX3QgKik7CitpbnQJYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2Nr KHZvbGF0aWxlIHVpbnQzMl90ICopOworI2RlZmluZQlBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0so R0xwdHIsIEFjcSkJZG8gewkJCVwKKwkoQWNxKSA9IGFjcGlfYWNxdWlyZV9nbG9iYWxfbG9jaygm KChHTHB0ciktPkdsb2JhbExvY2spKTsJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJQUNQSV9SRUxF QVNFX0dMT0JBTF9MT0NLKEdMcHRyLCBBY3EpCWRvIHsJCQlcCisJKEFjcSkgPSBhY3BpX3JlbGVh c2VfZ2xvYmFsX2xvY2soJigoR0xwdHIpLT5HbG9iYWxMb2NrKSk7CVwKK30gd2hpbGUgKDApCisg CitlbnVtIGludHJfdHJpZ2dlcjsKK2VudW0gaW50cl9wb2xhcml0eTsKKwordm9pZAlhY3BpX1Nl dERlZmF1bHRJbnRyTW9kZWwoaW50IG1vZGVsKTsKK3ZvaWQJYWNwaV9jcHVfYzEodm9pZCk7Cit2 b2lkCWFjcGlfY3B1X2lkbGVfbXdhaXQodWludDMyX3QgbXdhaXRfaGludCk7Cit2b2lkCSphY3Bp X21hcF90YWJsZSh2bV9wYWRkcl90IHBhLCBjb25zdCBjaGFyICpzaWcpOwordm9pZAlhY3BpX3Vu bWFwX3RhYmxlKHZvaWQgKnRhYmxlKTsKK3ZtX3BhZGRyX3QgYWNwaV9maW5kX3RhYmxlKGNvbnN0 IGNoYXIgKnNpZyk7Cit2b2lkCW1hZHRfcGFyc2VfaW50ZXJydXB0X3ZhbHVlcyh2b2lkICplbnRy eSwKKwkgICAgZW51bSBpbnRyX3RyaWdnZXIgKnRyaWcsIGVudW0gaW50cl9wb2xhcml0eSAqcG9s KTsKKworZXh0ZXJuIGludCBtYWR0X2ZvdW5kX3NjaV9vdmVycmlkZTsKKworI2VuZGlmIC8qIF9L RVJORUwgKi8KKworI2VuZGlmIC8qIF9fQUNQSUNBX01BQ0hERVBfSF9fICovCmRpZmYgLXUgLXIg LU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWNyZWcuaCAvdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAveDg2L2FwaWNyZWcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAveDg2L2FwaWNyZWcuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysg L3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9hcGljcmVnLmgJMjAxNi0wOS0yOSAwMDoy NDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw1MTYgQEAKKy8qLQorICogQ29weXJpZ2h0 IChjKSAxOTk2LCBieSBQZXRlciBXZW1tIGFuZCBTdGV2ZSBQYXNzZQorICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgZGV2ZWxvcGVyIG1h eSBOT1QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBB TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICog REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAq IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoK KyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvYXBpY3JlZy5oIDI5NzM0 NyAyMDE2LTAzLTI4IDA5OjQzOjQwWiBraWIgJAorICovCisKKyNpZm5kZWYgX1g4Nl9BUElDUkVH X0hfCisjZGVmaW5lIF9YODZfQVBJQ1JFR19IXworCisvKgorICogTG9jYWwgJiYgSS9PIEFQSUMg ZGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFBlbnRpdW0gUDU0QysgQnVpbHQtaW4gQVBJQwor ICogKEFkdmFuY2VkIHByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcikKKyAqIAorICog QmFzZSBBZGRyZXNzIG9mIEJ1aWx0LWluIEFQSUMgaW4gbWVtb3J5IGxvY2F0aW9uCisgKiBpcyAw eGZlZTAwMDAwLgorICogCisgKiBNYXAgb2YgQVBJQyBSZWdpc3RlcnM6CisgKiAKKyAqIE9mZnNl dCAoaGV4KSAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgIFJlYWQvV3JpdGUgc3Rh dGUKKyAqIDAwMCAgICAgICAgICAgICBSZXNlcnZlZAorICogMDEwICAgICAgICAgICAgIFJlc2Vy dmVkCisgKiAwMjAgSUQgICAgICAgICAgTG9jYWwgQVBJQyBJRCAgICAgICAgICAgICAgICAgICBS L1cKKyAqIDAzMCBWRVIgICAgICAgICBMb2NhbCBBUElDIFZlcnNpb24gICAgICAgICAgICAgIFIK KyAqIDA0MCAgICAgICAgICAgICBSZXNlcnZlZAorICogMDUwICAgICAgICAgICAgIFJlc2VydmVk CisgKiAwNjAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDA3MCAgICAgICAgICAgICBSZXNlcnZl ZAorICogMDgwICAgICAgICAgICAgIFRhc2sgUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgUi9X CisgKiAwOTAgICAgICAgICAgICAgQXJiaXRyYXRpb24gUHJpb3JpdHkgUmVnaXN0ZXIgICBSCisg KiAwQTAgICAgICAgICAgICAgUHJvY2Vzc29yIFByaW9yaXR5IFJlZ2lzdGVyICAgICBSCisgKiAw QjAgICAgICAgICAgICAgRU9JIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICBXCisgKiAwQzAg UlJSICAgICAgICAgUmVtb3RlIHJlYWQgICAgICAgICAgICAgICAgICAgICBSCisgKiAwRDAgICAg ICAgICAgICAgTG9naWNhbCBEZXN0aW5hdGlvbiAgICAgICAgICAgICBSL1cKKyAqIDBFMCAgICAg ICAgICAgICBEZXN0aW5hdGlvbiBGb3JtYXQgUmVnaXN0ZXIgICAgIDAuLjI3IFI7ICAyOC4uMzEg Ui9XCisgKiAwRjAgU1ZSICAgICAgICAgU3B1cmlvdXMgSW50ZXJydXB0IFZlY3RvciBSZWcuICAw Li4zICBSOyAgNC4uOSAgIFIvVworICogMTAwICAgICAgICAgICAgIElTUiAgMDAwLTAzMSAgICAg ICAgICAgICAgICAgICAgUgorICogMTEwICAgICAgICAgICAgIElTUiAgMDMyLTA2MyAgICAgICAg ICAgICAgICAgICAgUgorICogMTIwICAgICAgICAgICAgIElTUiAgMDY0LTA5NSAgICAgICAgICAg ICAgICAgICAgUgorICogMTMwICAgICAgICAgICAgIElTUiAgMDk1LTEyOCAgICAgICAgICAgICAg ICAgICAgUgorICogMTQwICAgICAgICAgICAgIElTUiAgMTI4LTE1OSAgICAgICAgICAgICAgICAg ICAgUgorICogMTUwICAgICAgICAgICAgIElTUiAgMTYwLTE5MSAgICAgICAgICAgICAgICAgICAg UgorICogMTYwICAgICAgICAgICAgIElTUiAgMTkyLTIyMyAgICAgICAgICAgICAgICAgICAgUgor ICogMTcwICAgICAgICAgICAgIElTUiAgMjI0LTI1NSAgICAgICAgICAgICAgICAgICAgUgorICog MTgwICAgICAgICAgICAgIFRNUiAgMDAwLTAzMSAgICAgICAgICAgICAgICAgICAgUgorICogMTkw ICAgICAgICAgICAgIFRNUiAgMDMyLTA2MyAgICAgICAgICAgICAgICAgICAgUgorICogMUEwICAg ICAgICAgICAgIFRNUiAgMDY0LTA5NSAgICAgICAgICAgICAgICAgICAgUgorICogMUIwICAgICAg ICAgICAgIFRNUiAgMDk1LTEyOCAgICAgICAgICAgICAgICAgICAgUgorICogMUMwICAgICAgICAg ICAgIFRNUiAgMTI4LTE1OSAgICAgICAgICAgICAgICAgICAgUgorICogMUQwICAgICAgICAgICAg IFRNUiAgMTYwLTE5MSAgICAgICAgICAgICAgICAgICAgUgorICogMUUwICAgICAgICAgICAgIFRN UiAgMTkyLTIyMyAgICAgICAgICAgICAgICAgICAgUgorICogMUYwICAgICAgICAgICAgIFRNUiAg MjI0LTI1NSAgICAgICAgICAgICAgICAgICAgUgorICogMjAwICAgICAgICAgICAgIElSUiAgMDAw LTAzMSAgICAgICAgICAgICAgICAgICAgUgorICogMjEwICAgICAgICAgICAgIElSUiAgMDMyLTA2 MyAgICAgICAgICAgICAgICAgICAgUgorICogMjIwICAgICAgICAgICAgIElSUiAgMDY0LTA5NSAg ICAgICAgICAgICAgICAgICAgUgorICogMjMwICAgICAgICAgICAgIElSUiAgMDk1LTEyOCAgICAg ICAgICAgICAgICAgICAgUgorICogMjQwICAgICAgICAgICAgIElSUiAgMTI4LTE1OSAgICAgICAg ICAgICAgICAgICAgUgorICogMjUwICAgICAgICAgICAgIElSUiAgMTYwLTE5MSAgICAgICAgICAg ICAgICAgICAgUgorICogMjYwICAgICAgICAgICAgIElSUiAgMTkyLTIyMyAgICAgICAgICAgICAg ICAgICAgUgorICogMjcwICAgICAgICAgICAgIElSUiAgMjI0LTI1NSAgICAgICAgICAgICAgICAg ICAgUgorICogMjgwICAgICAgICAgICAgIEVycm9yIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAg UgorICogMjkwICAgICAgICAgICAgIFJlc2VydmVkCisgKiAyQTAgICAgICAgICAgICAgUmVzZXJ2 ZWQKKyAqIDJCMCAgICAgICAgICAgICBSZXNlcnZlZAorICogMkMwICAgICAgICAgICAgIFJlc2Vy dmVkCisgKiAyRDAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDJFMCAgICAgICAgICAgICBSZXNl cnZlZAorICogMkYwICAgICAgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoQ01DSSkgICAgICAg Ui9XCisgKiAzMDAgSUNSX0xPVyAgICAgSW50ZXJydXB0IENvbW1hbmQgUmVnLiAoMC0zMSkgICBS L1cKKyAqIDMxMCBJQ1JfSEkgICAgICBJbnRlcnJ1cHQgQ29tbWFuZCBSZWcuICgzMi02MykgIFIv VworICogMzIwICAgICAgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoVGltZXIpICAgICAgUi9X CisgKiAzMzAgICAgICAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChUaGVybWFsKSAgICBSL1cg KFBJVispCisgKiAzNDAgICAgICAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChQZXJmb3JtYW5j ZSkgUi9XIChQNispCisgKiAzNTAgTFZUMSAgICAgICAgTG9jYWwgVmVjdG9yIFRhYmxlIChMSU5U MCkgICAgICBSL1cKKyAqIDM2MCBMVlQyICAgICAgICBMb2NhbCBWZWN0b3IgVGFibGUgKExJTlQx KSAgICAgIFIvVworICogMzcwIExWVDMgICAgICAgIExvY2FsIFZlY3RvciBUYWJsZSAoRVJST1Ip ICAgICAgUi9XCisgKiAzODAgICAgICAgICAgICAgSW5pdGlhbCBDb3VudCBSZWcuIGZvciBUaW1l ciAgICBSL1cKKyAqIDM5MCAgICAgICAgICAgICBDdXJyZW50IENvdW50IG9mIFRpbWVyICAgICAg ICAgIFIKKyAqIDNBMCAgICAgICAgICAgICBSZXNlcnZlZAorICogM0IwICAgICAgICAgICAgIFJl c2VydmVkCisgKiAzQzAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqIDNEMCAgICAgICAgICAgICBS ZXNlcnZlZAorICogM0UwICAgICAgICAgICAgIFRpbWVyIERpdmlkZSBDb25maWd1cmF0aW9uIFJl Zy4gUi9XCisgKiAzRjAgICAgICAgICAgICAgUmVzZXJ2ZWQKKyAqLworCisKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqIGdsb2JhbCBkZWZpbmVzLCBldGMuCisgKi8KKworCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiBMT0NBTCBBUElDIHN0cnVjdHVyZQorICovCisKKyNpZm5kZWYgTE9D T1JFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgUEFEMwlpbnQgOiAzMjsgaW50 IDogMzI7IGludCA6IDMyCisjZGVmaW5lIFBBRDQJaW50IDogMzI7IGludCA6IDMyOyBpbnQgOiAz MjsgaW50IDogMzIKKworc3RydWN0IExBUElDIHsKKwkvKiByZXNlcnZlZCAqLwkJUEFENDsKKwkv KiByZXNlcnZlZCAqLwkJUEFENDsKKwl1X2ludDMyX3QgaWQ7CQlQQUQzOworCXVfaW50MzJfdCB2 ZXJzaW9uOwlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQ QUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCXVf aW50MzJfdCB0cHI7CQlQQUQzOworCXVfaW50MzJfdCBhcHI7CQlQQUQzOworCXVfaW50MzJfdCBw cHI7CQlQQUQzOworCXVfaW50MzJfdCBlb2k7CQlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0 OworCXVfaW50MzJfdCBsZHI7CQlQQUQzOworCXVfaW50MzJfdCBkZnI7CQlQQUQzOworCXVfaW50 MzJfdCBzdnI7CQlQQUQzOworCXVfaW50MzJfdCBpc3IwOwkJUEFEMzsKKwl1X2ludDMyX3QgaXNy MTsJCVBBRDM7CisJdV9pbnQzMl90IGlzcjI7CQlQQUQzOworCXVfaW50MzJfdCBpc3IzOwkJUEFE MzsKKwl1X2ludDMyX3QgaXNyNDsJCVBBRDM7CisJdV9pbnQzMl90IGlzcjU7CQlQQUQzOworCXVf aW50MzJfdCBpc3I2OwkJUEFEMzsKKwl1X2ludDMyX3QgaXNyNzsJCVBBRDM7CisJdV9pbnQzMl90 IHRtcjA7CQlQQUQzOworCXVfaW50MzJfdCB0bXIxOwkJUEFEMzsKKwl1X2ludDMyX3QgdG1yMjsJ CVBBRDM7CisJdV9pbnQzMl90IHRtcjM7CQlQQUQzOworCXVfaW50MzJfdCB0bXI0OwkJUEFEMzsK Kwl1X2ludDMyX3QgdG1yNTsJCVBBRDM7CisJdV9pbnQzMl90IHRtcjY7CQlQQUQzOworCXVfaW50 MzJfdCB0bXI3OwkJUEFEMzsKKwl1X2ludDMyX3QgaXJyMDsJCVBBRDM7CisJdV9pbnQzMl90IGly cjE7CQlQQUQzOworCXVfaW50MzJfdCBpcnIyOwkJUEFEMzsKKwl1X2ludDMyX3QgaXJyMzsJCVBB RDM7CisJdV9pbnQzMl90IGlycjQ7CQlQQUQzOworCXVfaW50MzJfdCBpcnI1OwkJUEFEMzsKKwl1 X2ludDMyX3QgaXJyNjsJCVBBRDM7CisJdV9pbnQzMl90IGlycjc7CQlQQUQzOworCXVfaW50MzJf dCBlc3I7CQlQQUQzOworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQ QUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCS8q IHJlc2VydmVkICovCQlQQUQ0OworCS8qIHJlc2VydmVkICovCQlQQUQ0OworCXVfaW50MzJfdCBs dnRfY21jaTsJUEFEMzsKKwl1X2ludDMyX3QgaWNyX2xvOwlQQUQzOworCXVfaW50MzJfdCBpY3Jf aGk7CVBBRDM7CisJdV9pbnQzMl90IGx2dF90aW1lcjsJUEFEMzsKKwl1X2ludDMyX3QgbHZ0X3Ro ZXJtYWw7CVBBRDM7CisJdV9pbnQzMl90IGx2dF9wY2ludDsJUEFEMzsKKwl1X2ludDMyX3QgbHZ0 X2xpbnQwOwlQQUQzOworCXVfaW50MzJfdCBsdnRfbGludDE7CVBBRDM7CisJdV9pbnQzMl90IGx2 dF9lcnJvcjsJUEFEMzsKKwl1X2ludDMyX3QgaWNyX3RpbWVyOwlQQUQzOworCXVfaW50MzJfdCBj Y3JfdGltZXI7CVBBRDM7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8J CVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJLyogcmVzZXJ2ZWQgKi8JCVBBRDQ7CisJ dV9pbnQzMl90IGRjcl90aW1lcjsJUEFEMzsKKwkvKiByZXNlcnZlZCAqLwkJUEFENDsKK307CisK K3R5cGVkZWYgc3RydWN0IExBUElDIGxhcGljX3Q7CisKK2VudW0gTEFQSUNfUkVHSVNURVJTIHsK KwlMQVBJQ19JRAk9IDB4MiwKKwlMQVBJQ19WRVJTSU9OCT0gMHgzLAorCUxBUElDX1RQUgk9IDB4 OCwKKwlMQVBJQ19BUFIJPSAweDksCisJTEFQSUNfUFBSCT0gMHhhLAorCUxBUElDX0VPSQk9IDB4 YiwKKwlMQVBJQ19MRFIJPSAweGQsCisJTEFQSUNfREZSCT0gMHhlLCAvKiBOb3QgaW4geDJBUElD ICovCisJTEFQSUNfU1ZSCT0gMHhmLAorCUxBUElDX0lTUjAJPSAweDEwLAorCUxBUElDX0lTUjEJ PSAweDExLAorCUxBUElDX0lTUjIJPSAweDEyLAorCUxBUElDX0lTUjMJPSAweDEzLAorCUxBUElD X0lTUjQJPSAweDE0LAorCUxBUElDX0lTUjUJPSAweDE1LAorCUxBUElDX0lTUjYJPSAweDE2LAor CUxBUElDX0lTUjcJPSAweDE3LAorCUxBUElDX1RNUjAJPSAweDE4LAorCUxBUElDX1RNUjEJPSAw eDE5LAorCUxBUElDX1RNUjIJPSAweDFhLAorCUxBUElDX1RNUjMJPSAweDFiLAorCUxBUElDX1RN UjQJPSAweDFjLAorCUxBUElDX1RNUjUJPSAweDFkLAorCUxBUElDX1RNUjYJPSAweDFlLAorCUxB UElDX1RNUjcJPSAweDFmLAorCUxBUElDX0lSUjAJPSAweDIwLAorCUxBUElDX0lSUjEJPSAweDIx LAorCUxBUElDX0lSUjIJPSAweDIyLAorCUxBUElDX0lSUjMJPSAweDIzLAorCUxBUElDX0lSUjQJ PSAweDI0LAorCUxBUElDX0lSUjUJPSAweDI1LAorCUxBUElDX0lSUjYJPSAweDI2LAorCUxBUElD X0lSUjcJPSAweDI3LAorCUxBUElDX0VTUgk9IDB4MjgsCisJTEFQSUNfTFZUX0NNQ0kJPSAweDJm LAorCUxBUElDX0lDUl9MTwk9IDB4MzAsCisJTEFQSUNfSUNSX0hJCT0gMHgzMSwgLyogTm90IGlu IHgyQVBJQyAqLworCUxBUElDX0xWVF9USU1FUgk9IDB4MzIsCisJTEFQSUNfTFZUX1RIRVJNQUwg PSAweDMzLAorCUxBUElDX0xWVF9QQ0lOVAk9IDB4MzQsCisJTEFQSUNfTFZUX0xJTlQwCT0gMHgz NSwKKwlMQVBJQ19MVlRfTElOVDEJPSAweDM2LAorCUxBUElDX0xWVF9FUlJPUgk9IDB4MzcsCisJ TEFQSUNfSUNSX1RJTUVSCT0gMHgzOCwKKwlMQVBJQ19DQ1JfVElNRVIJPSAweDM5LAorCUxBUElD X0RDUl9USU1FUgk9IDB4M2UsCisJTEFQSUNfU0VMRl9JUEkJPSAweDNmLCAvKiBPbmx5IGluIHgy QVBJQyAqLworfTsKKworLyoKKyAqIFRoZSBMQVBJQ19TRUxGX0lQSSByZWdpc3RlciBvbmx5IGV4 aXN0cyBpbiB4MkFQSUMgbW9kZS4gIFRoZQorICogZm9ybXVsYSBiZWxvdyBpcyBhcHBsaWNhYmxl IG9ubHkgdG8gcmVzZXJ2ZSB0aGUgbWVtb3J5IHJlZ2lvbiwKKyAqIGkuZS4gZm9yIHhBUElDIG1v ZGUsIHdoZXJlIExBUElDX1NFTEZfSVBJIGZpbmVseSBzZXJ2ZXMgYXMgdGhlCisgKiBhZGRyZXNz IHBhc3QgZW5kIG9mIHRoZSByZWdpb24uCisgKi8KKyNkZWZpbmUJTEFQSUNfTUVNX1JFR0lPTiAo TEFQSUNfU0VMRl9JUEkgKiAweDEwKQorCisjZGVmaW5lCUxBUElDX01FTV9NVUwJMHgxMAorCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiBJL08gQVBJQyBzdHJ1Y3R1cmUKKyAqLworCitzdHJ1 Y3QgSU9BUElDIHsKKwl1X2ludDMyX3QgaW9yZWdzZWw7CVBBRDM7CisJdV9pbnQzMl90IGlvd2lu OwlQQUQzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgSU9BUElDIGlvYXBpY190OworCisjdW5kZWYg UEFENAorI3VuZGVmIFBBRDMKKworI2VuZGlmICAvKiAhTE9DT1JFICovCisKKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogdmFyaW91cyBjb2RlICdsb2dpY2FsJyB2YWx1ZXMKKyAqLworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiBMT0NBTCBBUElDIGRlZmluZXMKKyAqLworCisvKiBk ZWZhdWx0IHBoeXNpY2FsIGxvY2F0aW9ucyBvZiBMT0NBTCAoQ1BVKSBBUElDcyAqLworI2RlZmlu ZSBERUZBVUxUX0FQSUNfQkFTRQkweGZlZTAwMDAwCisKKy8qIGNvbnN0YW50cyByZWxhdGluZyB0 byBBUElDIElEIHJlZ2lzdGVycyAqLworI2RlZmluZSBBUElDX0lEX01BU0sJCTB4ZmYwMDAwMDAK KyNkZWZpbmUJQVBJQ19JRF9TSElGVAkJMjQKKyNkZWZpbmUJQVBJQ19JRF9DTFVTVEVSCQkweGYw CisjZGVmaW5lCUFQSUNfSURfQ0xVU1RFUl9JRAkweDBmCisjZGVmaW5lCUFQSUNfTUFYX0NMVVNU RVIJMHhlCisjZGVmaW5lCUFQSUNfTUFYX0lOVFJBQ0xVU1RFUl9JRCAzCisjZGVmaW5lCUFQSUNf SURfQ0xVU1RFUl9TSElGVAk0CisKKy8qIGZpZWxkcyBpbiBWRVIgKi8KKyNkZWZpbmUgQVBJQ19W RVJfVkVSU0lPTgkweDAwMDAwMGZmCisjZGVmaW5lIEFQSUNfVkVSX01BWExWVAkJMHgwMGZmMDAw MAorI2RlZmluZSBNQVhMVlRTSElGVAkJMTYKKyNkZWZpbmUgQVBJQ19WRVJfRU9JX1NVUFBSRVNT SU9OIDB4MDEwMDAwMDAKKworLyogZmllbGRzIGluIExEUiAqLworI2RlZmluZQlBUElDX0xEUl9S RVNFUlZFRAkweDAwZmZmZmZmCisKKy8qIGZpZWxkcyBpbiBERlIgKi8KKyNkZWZpbmUJQVBJQ19E RlJfUkVTRVJWRUQJMHgwZmZmZmZmZgorI2RlZmluZQlBUElDX0RGUl9NT0RFTF9NQVNLCTB4ZjAw MDAwMDAKKyNkZWZpbmUJQVBJQ19ERlJfTU9ERUxfRkxBVAkweGYwMDAwMDAwCisjZGVmaW5lCUFQ SUNfREZSX01PREVMX0NMVVNURVIJMHgwMDAwMDAwMAorCisvKiBmaWVsZHMgaW4gU1ZSICovCisj ZGVmaW5lIEFQSUNfU1ZSX1ZFQ1RPUgkJMHgwMDAwMDBmZgorI2RlZmluZSBBUElDX1NWUl9WRUNf UFJPRwkweDAwMDAwMGYwCisjZGVmaW5lIEFQSUNfU1ZSX1ZFQ19GSVgJMHgwMDAwMDAwZgorI2Rl ZmluZSBBUElDX1NWUl9FTkFCTEUJCTB4MDAwMDAxMDAKKyMgZGVmaW5lIEFQSUNfU1ZSX1NXRElT CQkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX1NWUl9TV0VOCQkweDAwMDAwMTAwCisjZGVmaW5l IEFQSUNfU1ZSX0ZPQ1VTCQkweDAwMDAwMjAwCisjIGRlZmluZSBBUElDX1NWUl9GRU4JCTB4MDAw MDAwMDAKKyMgZGVmaW5lIEFQSUNfU1ZSX0ZESVMJCTB4MDAwMDAyMDAKKyNkZWZpbmUgQVBJQ19T VlJfRU9JX1NVUFBSRVNTSU9OIDB4MDAwMDEwMDAKKworLyogZmllbGRzIGluIFRQUiAqLworI2Rl ZmluZSBBUElDX1RQUl9QUklPCQkweDAwMDAwMGZmCisjIGRlZmluZSBBUElDX1RQUl9JTlQJCTB4 MDAwMDAwZjAKKyMgZGVmaW5lIEFQSUNfVFBSX1NVQgkJMHgwMDAwMDAwZgorCisvKiBmaWVsZHMg aW4gRVNSICovCisjZGVmaW5lCUFQSUNfRVNSX1NFTkRfQ1NfRVJST1IJCTB4MDAwMDAwMDEKKyNk ZWZpbmUJQVBJQ19FU1JfUkVDRUlWRV9DU19FUlJPUgkweDAwMDAwMDAyCisjZGVmaW5lCUFQSUNf RVNSX1NFTkRfQUNDRVBUCQkweDAwMDAwMDA0CisjZGVmaW5lCUFQSUNfRVNSX1JFQ0VJVkVfQUND RVBUCQkweDAwMDAwMDA4CisjZGVmaW5lCUFQSUNfRVNSX1NFTkRfSUxMRUdBTF9WRUNUT1IJMHgw MDAwMDAyMAorI2RlZmluZQlBUElDX0VTUl9SRUNFSVZFX0lMTEVHQUxfVkVDVE9SCTB4MDAwMDAw NDAKKyNkZWZpbmUJQVBJQ19FU1JfSUxMRUdBTF9SRUdJU1RFUgkweDAwMDAwMDgwCisKKy8qIGZp ZWxkcyBpbiBJQ1JfTE9XICovCisjZGVmaW5lIEFQSUNfVkVDVE9SX01BU0sJMHgwMDAwMDBmZgor CisjZGVmaW5lIEFQSUNfREVMTU9ERV9NQVNLCTB4MDAwMDA3MDAKKyMgZGVmaW5lIEFQSUNfREVM TU9ERV9GSVhFRAkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfTE9XUFJJTwkweDAw MDAwMTAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfU01JCTB4MDAwMDAyMDAKKyMgZGVmaW5lIEFQ SUNfREVMTU9ERV9SUgkweDAwMDAwMzAwCisjIGRlZmluZSBBUElDX0RFTE1PREVfTk1JCTB4MDAw MDA0MDAKKyMgZGVmaW5lIEFQSUNfREVMTU9ERV9JTklUCTB4MDAwMDA1MDAKKyMgZGVmaW5lIEFQ SUNfREVMTU9ERV9TVEFSVFVQCTB4MDAwMDA2MDAKKyMgZGVmaW5lIEFQSUNfREVMTU9ERV9SRVNW CTB4MDAwMDA3MDAKKworI2RlZmluZSBBUElDX0RFU1RNT0RFX01BU0sJMHgwMDAwMDgwMAorIyBk ZWZpbmUgQVBJQ19ERVNUTU9ERV9QSFkJMHgwMDAwMDAwMAorIyBkZWZpbmUgQVBJQ19ERVNUTU9E RV9MT0cJMHgwMDAwMDgwMAorCisjZGVmaW5lIEFQSUNfREVMU1RBVF9NQVNLCTB4MDAwMDEwMDAK KyMgZGVmaW5lIEFQSUNfREVMU1RBVF9JRExFCTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfREVM U1RBVF9QRU5ECTB4MDAwMDEwMDAKKworI2RlZmluZSBBUElDX1JFU1YxX01BU0sJCTB4MDAwMDIw MDAKKworI2RlZmluZSBBUElDX0xFVkVMX01BU0sJCTB4MDAwMDQwMDAKKyMgZGVmaW5lIEFQSUNf TEVWRUxfREVBU1NFUlQJMHgwMDAwMDAwMAorIyBkZWZpbmUgQVBJQ19MRVZFTF9BU1NFUlQJMHgw MDAwNDAwMAorCisjZGVmaW5lIEFQSUNfVFJJR01PRF9NQVNLCTB4MDAwMDgwMDAKKyMgZGVmaW5l IEFQSUNfVFJJR01PRF9FREdFCTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfVFJJR01PRF9MRVZF TAkweDAwMDA4MDAwCisKKyNkZWZpbmUgQVBJQ19SUlNUQVRfTUFTSwkweDAwMDMwMDAwCisjIGRl ZmluZSBBUElDX1JSU1RBVF9JTlZBTElECTB4MDAwMDAwMDAKKyMgZGVmaW5lIEFQSUNfUlJTVEFU X0lOUFJPRwkweDAwMDEwMDAwCisjIGRlZmluZSBBUElDX1JSU1RBVF9WQUxJRAkweDAwMDIwMDAw CisjIGRlZmluZSBBUElDX1JSU1RBVF9SRVNWCTB4MDAwMzAwMDAKKworI2RlZmluZSBBUElDX0RF U1RfTUFTSwkJMHgwMDBjMDAwMAorIyBkZWZpbmUgQVBJQ19ERVNUX0RFU1RGTEQJMHgwMDAwMDAw MAorIyBkZWZpbmUgQVBJQ19ERVNUX1NFTEYJCTB4MDAwNDAwMDAKKyMgZGVmaW5lIEFQSUNfREVT VF9BTExJU0VMRgkweDAwMDgwMDAwCisjIGRlZmluZSBBUElDX0RFU1RfQUxMRVNFTEYJMHgwMDBj MDAwMAorCisjZGVmaW5lIEFQSUNfUkVTVjJfTUFTSwkJMHhmZmYwMDAwMAorCisjZGVmaW5lCUFQ SUNfSUNSTE9fUkVTVl9NQVNLCShBUElDX1JFU1YxX01BU0sgfCBBUElDX1JFU1YyX01BU0spCisK Ky8qIGZpZWxkcyBpbiBMVlQxLzIgKi8KKyNkZWZpbmUgQVBJQ19MVlRfVkVDVE9SCQkweDAwMDAw MGZmCisjZGVmaW5lIEFQSUNfTFZUX0RNCQkweDAwMDAwNzAwCisjIGRlZmluZSBBUElDX0xWVF9E TV9GSVhFRAkweDAwMDAwMDAwCisjIGRlZmluZSBBUElDX0xWVF9ETV9TTUkJMHgwMDAwMDIwMAor IyBkZWZpbmUgQVBJQ19MVlRfRE1fTk1JCTB4MDAwMDA0MDAKKyMgZGVmaW5lIEFQSUNfTFZUX0RN X0lOSVQJMHgwMDAwMDUwMAorIyBkZWZpbmUgQVBJQ19MVlRfRE1fRVhUSU5UCTB4MDAwMDA3MDAK KyNkZWZpbmUgQVBJQ19MVlRfRFMJCTB4MDAwMDEwMDAKKyNkZWZpbmUgQVBJQ19MVlRfSUlQUAkJ MHgwMDAwMjAwMAorI2RlZmluZSBBUElDX0xWVF9JSVBQX0lOVEFMTwkweDAwMDAyMDAwCisjZGVm aW5lIEFQSUNfTFZUX0lJUFBfSU5UQUhJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQVBJQ19MVlRfUklS UgkJMHgwMDAwNDAwMAorI2RlZmluZSBBUElDX0xWVF9UTQkJMHgwMDAwODAwMAorI2RlZmluZSBB UElDX0xWVF9NCQkweDAwMDEwMDAwCisKKworLyogZmllbGRzIGluIExWVCBUaW1lciAqLworI2Rl ZmluZSBBUElDX0xWVFRfVkVDVE9SCTB4MDAwMDAwZmYKKyNkZWZpbmUgQVBJQ19MVlRUX0RTCQkw eDAwMDAxMDAwCisjZGVmaW5lIEFQSUNfTFZUVF9NCQkweDAwMDEwMDAwCisjZGVmaW5lIEFQSUNf TFZUVF9UTQkJMHgwMDA2MDAwMAorIyBkZWZpbmUgQVBJQ19MVlRUX1RNX09ORV9TSE9UCTB4MDAw MDAwMDAKKyMgZGVmaW5lIEFQSUNfTFZUVF9UTV9QRVJJT0RJQwkweDAwMDIwMDAwCisjIGRlZmlu ZSBBUElDX0xWVFRfVE1fVFNDRExUCTB4MDAwNDAwMDAKKyMgZGVmaW5lIEFQSUNfTFZUVF9UTV9S U1JWCTB4MDAwNjAwMDAKKworLyogQVBJQyB0aW1lciBjdXJyZW50IGNvdW50ICovCisjZGVmaW5l CUFQSUNfVElNRVJfTUFYX0NPVU5UCTB4ZmZmZmZmZmYKKworLyogZmllbGRzIGluIFREQ1IgKi8K KyNkZWZpbmUgQVBJQ19URENSXzIJCTB4MDAKKyNkZWZpbmUgQVBJQ19URENSXzQJCTB4MDEKKyNk ZWZpbmUgQVBJQ19URENSXzgJCTB4MDIKKyNkZWZpbmUgQVBJQ19URENSXzE2CQkweDAzCisjZGVm aW5lIEFQSUNfVERDUl8zMgkJMHgwOAorI2RlZmluZSBBUElDX1REQ1JfNjQJCTB4MDkKKyNkZWZp bmUgQVBJQ19URENSXzEyOAkJMHgwYQorI2RlZmluZSBBUElDX1REQ1JfMQkJMHgwYgorCisvKiBM VlQgdGFibGUgaW5kaWNlcyAqLworI2RlZmluZQlBUElDX0xWVF9MSU5UMAkJMAorI2RlZmluZQlB UElDX0xWVF9MSU5UMQkJMQorI2RlZmluZQlBUElDX0xWVF9USU1FUgkJMgorI2RlZmluZQlBUElD X0xWVF9FUlJPUgkJMworI2RlZmluZQlBUElDX0xWVF9QTUMJCTQKKyNkZWZpbmUJQVBJQ19MVlRf VEhFUk1BTAk1CisjZGVmaW5lCUFQSUNfTFZUX0NNQ0kJCTYKKyNkZWZpbmUJQVBJQ19MVlRfTUFY CQlBUElDX0xWVF9DTUNJCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkvTyBBUElDIGRl ZmluZXMKKyAqLworCisvKiBkZWZhdWx0IHBoeXNpY2FsIGxvY2F0aW9ucyBvZiBhbiBJTyBBUElD ICovCisjZGVmaW5lIERFRkFVTFRfSU9fQVBJQ19CQVNFCTB4ZmVjMDAwMDAKKworLyogd2luZG93 IHJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBJT0FQSUNfV0lORE9XCQkweDEwCisjZGVmaW5l IElPQVBJQ19FT0lSCQkweDQwCisKKy8qIGluZGV4ZXMgaW50byBJTyBBUElDICovCisjZGVmaW5l IElPQVBJQ19JRAkJMHgwMAorI2RlZmluZSBJT0FQSUNfVkVSCQkweDAxCisjZGVmaW5lIElPQVBJ Q19BUkIJCTB4MDIKKyNkZWZpbmUgSU9BUElDX1JFRFRCTAkJMHgxMAorI2RlZmluZSBJT0FQSUNf UkVEVEJMMAkJSU9BUElDX1JFRFRCTAorI2RlZmluZSBJT0FQSUNfUkVEVEJMMQkJKElPQVBJQ19S RURUQkwrMHgwMikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDIJCShJT0FQSUNfUkVEVEJMKzB4MDQp CisjZGVmaW5lIElPQVBJQ19SRURUQkwzCQkoSU9BUElDX1JFRFRCTCsweDA2KQorI2RlZmluZSBJ T0FQSUNfUkVEVEJMNAkJKElPQVBJQ19SRURUQkwrMHgwOCkKKyNkZWZpbmUgSU9BUElDX1JFRFRC TDUJCShJT0FQSUNfUkVEVEJMKzB4MGEpCisjZGVmaW5lIElPQVBJQ19SRURUQkw2CQkoSU9BUElD X1JFRFRCTCsweDBjKQorI2RlZmluZSBJT0FQSUNfUkVEVEJMNwkJKElPQVBJQ19SRURUQkwrMHgw ZSkKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDgJCShJT0FQSUNfUkVEVEJMKzB4MTApCisjZGVmaW5l IElPQVBJQ19SRURUQkw5CQkoSU9BUElDX1JFRFRCTCsweDEyKQorI2RlZmluZSBJT0FQSUNfUkVE VEJMMTAJCShJT0FQSUNfUkVEVEJMKzB4MTQpCisjZGVmaW5lIElPQVBJQ19SRURUQkwxMQkJKElP QVBJQ19SRURUQkwrMHgxNikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDEyCQkoSU9BUElDX1JFRFRC TCsweDE4KQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMTMJCShJT0FQSUNfUkVEVEJMKzB4MWEpCisj ZGVmaW5lIElPQVBJQ19SRURUQkwxNAkJKElPQVBJQ19SRURUQkwrMHgxYykKKyNkZWZpbmUgSU9B UElDX1JFRFRCTDE1CQkoSU9BUElDX1JFRFRCTCsweDFlKQorI2RlZmluZSBJT0FQSUNfUkVEVEJM MTYJCShJT0FQSUNfUkVEVEJMKzB4MjApCisjZGVmaW5lIElPQVBJQ19SRURUQkwxNwkJKElPQVBJ Q19SRURUQkwrMHgyMikKKyNkZWZpbmUgSU9BUElDX1JFRFRCTDE4CQkoSU9BUElDX1JFRFRCTCsw eDI0KQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMTkJCShJT0FQSUNfUkVEVEJMKzB4MjYpCisjZGVm aW5lIElPQVBJQ19SRURUQkwyMAkJKElPQVBJQ19SRURUQkwrMHgyOCkKKyNkZWZpbmUgSU9BUElD X1JFRFRCTDIxCQkoSU9BUElDX1JFRFRCTCsweDJhKQorI2RlZmluZSBJT0FQSUNfUkVEVEJMMjIJ CShJT0FQSUNfUkVEVEJMKzB4MmMpCisjZGVmaW5lIElPQVBJQ19SRURUQkwyMwkJKElPQVBJQ19S RURUQkwrMHgyZSkKKworLyogZmllbGRzIGluIFZFUiAqLworI2RlZmluZSBJT0FSVF9WRVJfVkVS U0lPTgkweDAwMDAwMGZmCisjZGVmaW5lIElPQVJUX1ZFUl9NQVhSRURJUgkweDAwZmYwMDAwCisj ZGVmaW5lIE1BWFJFRElSU0hJRlQJCTE2CisKKy8qCisgKiBmaWVsZHMgaW4gdGhlIElPIEFQSUMn cyByZWRpcmVjdGlvbiB0YWJsZSBlbnRyaWVzCisgKi8KKyNkZWZpbmUgSU9BUlRfREVTVAlBUElD X0lEX01BU0sJLyogYnJvYWRjYXN0IGFkZHI6IGFsbCBBUElDcyAqLworCisjZGVmaW5lIElPQVJU X1JFU1YJMHgwMGZlMDAwMAkvKiByZXNlcnZlZCAqLworCisjZGVmaW5lIElPQVJUX0lOVE1BU0sJ MHgwMDAxMDAwMAkvKiBSL1c6IElOVGVycnVwdCBtYXNrICovCisjIGRlZmluZSBJT0FSVF9JTlRN Q0xSCTB4MDAwMDAwMDAJLyogICAgICAgY2xlYXIsIGFsbG93IElOVHMgKi8KKyMgZGVmaW5lIElP QVJUX0lOVE1TRVQJMHgwMDAxMDAwMAkvKiAgICAgICBzZXQsIGluaGliaXQgSU5UcyAqLworCisj ZGVmaW5lIElPQVJUX1RSR1JNT0QJMHgwMDAwODAwMAkvKiBSL1c6IHRyaWdnZXIgbW9kZSAqLwor IyBkZWZpbmUgSU9BUlRfVFJHUkVERwkweDAwMDAwMDAwCS8qICAgICAgIGVkZ2UgKi8KKyMgZGVm aW5lIElPQVJUX1RSR1JMVkwJMHgwMDAwODAwMAkvKiAgICAgICBsZXZlbCAqLworCisjZGVmaW5l IElPQVJUX1JFTV9JUlIJMHgwMDAwNDAwMAkvKiBSTzogcmVtb3RlIElSUiAqLworCisjZGVmaW5l IElPQVJUX0lOVFBPTAkweDAwMDAyMDAwCS8qIFIvVzogSU5UIGlucHV0IHBpbiBwb2xhcml0eSAq LworIyBkZWZpbmUgSU9BUlRfSU5UQUhJCTB4MDAwMDAwMDAJLyogICAgICBhY3RpdmUgaGlnaCAq LworIyBkZWZpbmUgSU9BUlRfSU5UQUxPCTB4MDAwMDIwMDAJLyogICAgICBhY3RpdmUgbG93ICov CisKKyNkZWZpbmUgSU9BUlRfREVMSVZTCTB4MDAwMDEwMDAJLyogUk86IGRlbGl2ZXJ5IHN0YXR1 cyAqLworCisjZGVmaW5lIElPQVJUX0RFU1RNT0QJMHgwMDAwMDgwMAkvKiBSL1c6IGRlc3RpbmF0 aW9uIG1vZGUgKi8KKyMgZGVmaW5lIElPQVJUX0RFU1RQSFkJMHgwMDAwMDAwMAkvKiAgICAgIHBo eXNpY2FsICovCisjIGRlZmluZSBJT0FSVF9ERVNUTE9HCTB4MDAwMDA4MDAJLyogICAgICBsb2dp Y2FsICovCisKKyNkZWZpbmUgSU9BUlRfREVMTU9ECTB4MDAwMDA3MDAJLyogUi9XOiBkZWxpdmVy eSBtb2RlICovCisjIGRlZmluZSBJT0FSVF9ERUxGSVhFRAkweDAwMDAwMDAwCS8qICAgICAgIGZp eGVkICovCisjIGRlZmluZSBJT0FSVF9ERUxMT1BSSQkweDAwMDAwMTAwCS8qICAgICAgIGxvd2Vz dCBwcmlvcml0eSAqLworIyBkZWZpbmUgSU9BUlRfREVMU01JCTB4MDAwMDAyMDAJLyogICAgICAg U3lzdGVtIE1hbmFnZW1lbnQgSU5UICovCisjIGRlZmluZSBJT0FSVF9ERUxSU1YxCTB4MDAwMDAz MDAJLyogICAgICAgcmVzZXJ2ZWQgKi8KKyMgZGVmaW5lIElPQVJUX0RFTE5NSQkweDAwMDAwNDAw CS8qICAgICAgIE5NSSBzaWduYWwgKi8KKyMgZGVmaW5lIElPQVJUX0RFTElOSVQJMHgwMDAwMDUw MAkvKiAgICAgICBJTklUIHNpZ25hbCAqLworIyBkZWZpbmUgSU9BUlRfREVMUlNWMgkweDAwMDAw NjAwCS8qICAgICAgIHJlc2VydmVkICovCisjIGRlZmluZSBJT0FSVF9ERUxFWElOVAkweDAwMDAw NzAwCS8qICAgICAgIEV4dGVybmFsIElOVGVycnVwdCAqLworCisjZGVmaW5lIElPQVJUX0lOVFZF QwkweDAwMDAwMGZmCS8qIFIvVzogSU5UZXJydXB0IHZlY3RvciBmaWVsZCAqLworCisjZW5kaWYg LyogX1g4Nl9BUElDUkVHX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAveDg2L2FwaWN2YXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWN2 YXIuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2FwaWN2YXIuaAkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL3g4Ni9hcGljdmFyLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAg LTAsMCArMSw0NjcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIEpvaG4gQmFsZHdpbiA8 amhiQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDog cmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2FwaWN2YXIuaCAzMDEwMTUgMjAxNi0wNS0zMSAw NDo0Nzo1M1ogc2VwaGUgJAorICovCisKKyNpZm5kZWYgX1g4Nl9BUElDVkFSX0hfCisjZGVmaW5l IF9YODZfQVBJQ1ZBUl9IXworCisvKgorICogTG9jYWwgJiYgSS9PIEFQSUMgdmFyaWFibGUgZGVm aW5pdGlvbnMuCisgKi8KKworLyoKKyAqIExheW91dCBvZiBsb2NhbCBBUElDIGludGVycnVwdCB2 ZWN0b3JzOgorICoKKyAqCTB4ZmYgKDI1NSkgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgIHwgMTUgKFNwdXJpb3VzIC8gSVBJcyAvIExvY2FsIEludGVy cnVwdHMpCisgKgkweGYwICgyNDApICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgICB8IDE0IChJL08gSW50ZXJydXB0cyAvIFRpbWVyKQorICoJMHhlMCAo MjI0KSAgKy0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg fCAxMyAoSS9PIEludGVycnVwdHMpCisgKgkweGQwICgyMDgpICArLS0tLS0tLS0tLS0tLSsKKyAq ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8IDEyIChJL08gSW50ZXJydXB0cykKKyAq CTB4YzAgKDE5MikgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgIHwgMTEgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHhiMCAoMTc2KSAgKy0tLS0tLS0tLS0t LS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAxMCAoSS9PIEludGVycnVw dHMpCisgKgkweGEwICgxNjApICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgICB8IDkgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHg5MCAoMTQ0KSAgKy0tLS0t LS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCA4IChJL08gSW50 ZXJydXB0cyAvIFN5c3RlbSBDYWxscykKKyAqCTB4ODAgKDEyOCkgICstLS0tLS0tLS0tLS0tKwor ICogICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgNyAoSS9PIEludGVycnVwdHMpCisg KgkweDcwICgxMTIpICArLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgICB8IDYgKEkvTyBJbnRlcnJ1cHRzKQorICoJMHg2MCAoOTYpICAgKy0tLS0tLS0tLS0t LS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCA1IChJL08gSW50ZXJydXB0 cykKKyAqCTB4NTAgKDgwKSAgICstLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgIHwgNCAoSS9PIEludGVycnVwdHMpCisgKgkweDQwICg2NCkgICArLS0tLS0t LS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8IDMgKEkvTyBJbnRl cnJ1cHRzKQorICoJMHgzMCAoNDgpICAgKy0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAg ICAgIHwgICAgICAgICAgICAgfCAyIChBVFBJQyBJbnRlcnJ1cHRzKQorICoJMHgyMCAoMzIpICAg Ky0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAxIChF eGNlcHRpb25zLCB0cmFwcywgZmF1bHRzLCBldGMuKQorICoJMHgxMCAoMTYpICAgKy0tLS0tLS0t LS0tLS0rCisgKiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAwIChFeGNlcHRpb25z LCB0cmFwcywgZmF1bHRzLCBldGMuKQorICoJMHgwMCAoMCkgICAgKy0tLS0tLS0tLS0tLS0rCisg KgorICogTm90ZTogMHg4MCBuZWVkcyB0byBiZSBoYW5kbGVkIHNwZWNpYWxseSBhbmQgbm90IGFs bG9jYXRlZCB0byBhbgorICogSS9PIGRldmljZSEKKyAqLworCisjZGVmaW5lCU1BWF9BUElDX0lE CTB4ZmUKKyNkZWZpbmUJQVBJQ19JRF9BTEwJMHhmZgorCisvKiBJL08gSW50ZXJydXB0cyBhcmUg dXNlZCBmb3IgZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIElTQSwgUENJLCBldGMuICovCisjZGVm aW5lCUFQSUNfSU9fSU5UUwkoSURUX0lPX0lOVFMgKyAxNikKKyNkZWZpbmUJQVBJQ19OVU1fSU9J TlRTCTE5MQorCisvKiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIHVzZWQgZm9yIGNsb2NrIGhhbmRs aW5nIGFuZCBkcml2ZXMgaGFyZGNsb2NrLCBldGMuICovCisjZGVmaW5lCUFQSUNfVElNRVJfSU5U CShBUElDX0lPX0lOVFMgKyBBUElDX05VTV9JT0lOVFMpCisKKy8qICAKKyAqKioqKioqKioqKioq KioqKioqKiogISEhIFdBUk5JTkcgISEhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICogRWFjaCBsb2NhbCBhcGljIGhhcyBhbiBpbnRlcnJ1cHQgcmVjZWl2ZSBmaWZvIHRoYXQgaXMg dHdvIGVudHJpZXMgZGVlcAorICogZm9yIGVhY2ggaW50ZXJydXB0IHByaW9yaXR5IGNsYXNzICho aWdoZXIgNCBiaXRzIG9mIGludGVycnVwdCB2ZWN0b3IpLgorICogT25jZSB0aGUgZmlmbyBpcyBm dWxsIHRoZSBBUElDIGNhbiBubyBsb25nZXIgcmVjZWl2ZSBpbnRlcnJ1cHRzIGZvciB0aGlzCisg KiBjbGFzcyBhbmQgc2VuZGluZyBJUElzIGZyb20gb3RoZXIgQ1BVcyB3aWxsIGJlIGJsb2NrZWQu CisgKiBUbyBhdm9pZCBkZWFkbG9ja3MgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiB0d28g SVBJIGludGVycnVwdHMKKyAqIHBlbmRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKyAqIEN1cnJlbnRs eSB0aGlzIGlzIGd1YXJhbnRlZWQgYnkgZGl2aWRpbmcgdGhlIElQSXMgaW4gdHdvIGdyb3VwcyB0 aGF0IGhhdmUgCisgKiBlYWNoIGF0IG1vc3Qgb25lIElQSSBpbnRlcnJ1cHQgcGVuZGluZy4gVGhl IGZpcnN0IGdyb3VwIGlzIHByb3RlY3RlZCBieSB0aGUKKyAqIHNtcF9pcGlfbXR4IGFuZCB3YWl0 cyBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIElQSSAoT25seSBvbmUgSVBJIHVzZXIgCisgKiBh dCBhIHRpbWUpIFRoZSBzZWNvbmQgZ3JvdXAgdXNlcyBhIHNpbmdsZSBpbnRlcnJ1cHQgYW5kIGEg Yml0bWFwIHRvIGF2b2lkCisgKiByZWR1bmRhbnQgSVBJIGludGVycnVwdHMuCisgKi8gCisKKy8q IEludGVycnVwdHMgZm9yIGxvY2FsIEFQSUMgTFZUIGVudHJpZXMgb3RoZXIgdGhhbiB0aGUgdGlt ZXIuICovCisjZGVmaW5lCUFQSUNfTE9DQUxfSU5UUwkyNDAKKyNkZWZpbmUJQVBJQ19FUlJPUl9J TlQJQVBJQ19MT0NBTF9JTlRTCisjZGVmaW5lCUFQSUNfVEhFUk1BTF9JTlQgKEFQSUNfTE9DQUxf SU5UUyArIDEpCisjZGVmaW5lCUFQSUNfQ01DX0lOVAkoQVBJQ19MT0NBTF9JTlRTICsgMikKKyNk ZWZpbmUJQVBJQ19JUElfSU5UUwkoQVBJQ19MT0NBTF9JTlRTICsgMykKKworI2RlZmluZQlJUElf UkVOREVaVk9VUwkoQVBJQ19JUElfSU5UUykJCS8qIEludGVyLUNQVSByZW5kZXp2b3VzLiAqLwor I2RlZmluZQlJUElfSU5WTFRMQgkoQVBJQ19JUElfSU5UUyArIDEpCS8qIFRMQiBTaG9vdGRvd24g SVBJcyAqLworI2RlZmluZQlJUElfSU5WTFBHCShBUElDX0lQSV9JTlRTICsgMikKKyNkZWZpbmUJ SVBJX0lOVkxSTkcJKEFQSUNfSVBJX0lOVFMgKyAzKQorI2RlZmluZQlJUElfSU5WTENBQ0hFCShB UElDX0lQSV9JTlRTICsgNCkKKy8qIFZlY3RvciB0byBoYW5kbGUgYml0bWFwIGJhc2VkIElQSXMg Ki8KKyNkZWZpbmUJSVBJX0JJVE1BUF9WRUNUT1IJKEFQSUNfSVBJX0lOVFMgKyA1KSAKKworLyog SVBJcyBoYW5kbGVkIGJ5IElQSV9CSVRNQVBfVkVDVE9SICovCisjZGVmaW5lCUlQSV9BU1QJCTAg CS8qIEdlbmVyYXRlIHNvZnR3YXJlIHRyYXAuICovCisjZGVmaW5lIElQSV9QUkVFTVBUICAgICAx CisjZGVmaW5lIElQSV9IQVJEQ0xPQ0sgICAyCisjZGVmaW5lIElQSV9CSVRNQVBfTEFTVCBJUElf SEFSRENMT0NLCisjZGVmaW5lIElQSV9JU19CSVRNQVBFRCh4KSAoKHgpIDw9IElQSV9CSVRNQVBf TEFTVCkKKworI2RlZmluZQlJUElfU1RPUAkoQVBJQ19JUElfSU5UUyArIDYpCS8qIFN0b3AgQ1BV IHVudGlsIHJlc3RhcnRlZC4gKi8KKyNkZWZpbmUJSVBJX1NVU1BFTkQJKEFQSUNfSVBJX0lOVFMg KyA3KQkvKiBTdXNwZW5kIENQVSB1bnRpbCByZXN0YXJ0ZWQuICovCisjaWZkZWYgX19pMzg2X18K KyNkZWZpbmUJSVBJX0xBWllQTUFQCShBUElDX0lQSV9JTlRTICsgOCkJLyogTGF6eSBwbWFwIHJl bGVhc2UuICovCisjZGVmaW5lCUlQSV9EWU5fRklSU1QJKEFQSUNfSVBJX0lOVFMgKyA5KQorI2Vs c2UKKyNkZWZpbmUJSVBJX0RZTl9GSVJTVAkoQVBJQ19JUElfSU5UUyArIDgpCisjZW5kaWYKKyNk ZWZpbmUJSVBJX0RZTl9MQVNUCSgyNTMpCQkJLyogSVBJcyBhbGxvY2F0ZWQgYXQgcnVudGltZSAq LworCisvKgorICogSVBJX1NUT1BfSEFSRCBkb2VzIG5vdCBuZWVkIHRvIG9jY3VweSBhIHNsb3Qg aW4gdGhlIElQSSB2ZWN0b3Igc3BhY2Ugc2luY2UKKyAqIGl0IGlzIGRlbGl2ZXJlZCB1c2luZyBh biBOTUkgYW55d2F5cy4KKyAqLworI2RlZmluZQlJUElfTk1JX0ZJUlNUCTI1NAorI2RlZmluZQlJ UElfVFJBQ0UJMjU0CQkJLyogSW50ZXJydXB0IGZvciB0cmFjaW5nLiAqLworI2RlZmluZQlJUElf U1RPUF9IQVJECTI1NQkJCS8qIFN0b3AgQ1BVIHdpdGggYSBOTUkuICovCisKKy8qCisgKiBUaGUg c3B1cmlvdXMgaW50ZXJydXB0IGNhbiBzaGFyZSB0aGUgcHJpb3JpdHkgY2xhc3Mgd2l0aCB0aGUg SVBJcyBzaW5jZQorICogaXQgaXMgbm90IGEgbm9ybWFsIGludGVycnVwdC4gKERvZXMgbm90IHVz ZSB0aGUgQVBJQydzIGludGVycnVwdCBmaWZvKQorICovCisjZGVmaW5lCUFQSUNfU1BVUklPVVNf SU5UIDI1NQorCisjaWZuZGVmIExPQ09SRQorCisjZGVmaW5lCUFQSUNfSVBJX0RFU1RfU0VMRgkt MQorI2RlZmluZQlBUElDX0lQSV9ERVNUX0FMTAktMgorI2RlZmluZQlBUElDX0lQSV9ERVNUX09U SEVSUwktMworCisjZGVmaW5lCUFQSUNfQlVTX1VOS05PV04JLTEKKyNkZWZpbmUJQVBJQ19CVVNf SVNBCQkwCisjZGVmaW5lCUFQSUNfQlVTX0VJU0EJCTEKKyNkZWZpbmUJQVBJQ19CVVNfUENJCQky CisjZGVmaW5lCUFQSUNfQlVTX01BWAkJQVBJQ19CVVNfUENJCisKKyNkZWZpbmUJSVJRX0VYVElO VAkJKE5VTV9JT19JTlRTICsgMSkKKyNkZWZpbmUJSVJRX05NSQkJCShOVU1fSU9fSU5UUyArIDIp CisjZGVmaW5lCUlSUV9TTUkJCQkoTlVNX0lPX0lOVFMgKyAzKQorI2RlZmluZQlJUlFfRElTQUJM RUQJCShOVU1fSU9fSU5UUyArIDQpCisKKy8qCisgKiBBbiBBUElDIGVudW1lcmF0b3IgaXMgYSBw c3VlZG8gYnVzIGRyaXZlciB0aGF0IGVudW1lcmF0ZXMgQVBJQydzIGluY2x1ZGluZworICogQ1BV J3MgYW5kIEkvTyBBUElDJ3MuCisgKi8KK3N0cnVjdCBhcGljX2VudW1lcmF0b3IgeworCWNvbnN0 IGNoYXIgKmFwaWNfbmFtZTsKKwlpbnQgKCphcGljX3Byb2JlKSh2b2lkKTsKKwlpbnQgKCphcGlj X3Byb2JlX2NwdXMpKHZvaWQpOworCWludCAoKmFwaWNfc2V0dXBfbG9jYWwpKHZvaWQpOworCWlu dCAoKmFwaWNfc2V0dXBfaW8pKHZvaWQpOworCVNMSVNUX0VOVFJZKGFwaWNfZW51bWVyYXRvcikg YXBpY19uZXh0OworfTsKKworaW50aGFuZF90CisJSURUVkVDKGFwaWNfaXNyMSksIElEVFZFQyhh cGljX2lzcjIpLCBJRFRWRUMoYXBpY19pc3IzKSwKKwlJRFRWRUMoYXBpY19pc3I0KSwgSURUVkVD KGFwaWNfaXNyNSksIElEVFZFQyhhcGljX2lzcjYpLAorCUlEVFZFQyhhcGljX2lzcjcpLCBJRFRW RUMoY21jaW50KSwgSURUVkVDKGVycm9yaW50KSwKKwlJRFRWRUMoc3B1cmlvdXNpbnQpLCBJRFRW RUModGltZXJpbnQpOworCitleHRlcm4gdm1fcGFkZHJfdCBsYXBpY19wYWRkcjsKK2V4dGVybiBp bnQgYXBpY19jcHVpZHNbXTsKKwordm9pZAlhcGljX3JlZ2lzdGVyX2VudW1lcmF0b3Ioc3RydWN0 IGFwaWNfZW51bWVyYXRvciAqZW51bWVyYXRvcik7Cit2b2lkCSppb2FwaWNfY3JlYXRlKHZtX3Bh ZGRyX3QgYWRkciwgaW50MzJfdCBhcGljX2lkLCBpbnQgaW50YmFzZSk7CitpbnQJaW9hcGljX2Rp c2FibGVfcGluKHZvaWQgKmNvb2tpZSwgdV9pbnQgcGluKTsKK2ludAlpb2FwaWNfZ2V0X3ZlY3Rv cih2b2lkICpjb29raWUsIHVfaW50IHBpbik7Cit2b2lkCWlvYXBpY19yZWdpc3Rlcih2b2lkICpj b29raWUpOworaW50CWlvYXBpY19yZW1hcF92ZWN0b3Iodm9pZCAqY29va2llLCB1X2ludCBwaW4s IGludCB2ZWN0b3IpOworaW50CWlvYXBpY19zZXRfYnVzKHZvaWQgKmNvb2tpZSwgdV9pbnQgcGlu LCBpbnQgYnVzX3R5cGUpOworaW50CWlvYXBpY19zZXRfZXh0aW50KHZvaWQgKmNvb2tpZSwgdV9p bnQgcGluKTsKK2ludAlpb2FwaWNfc2V0X25taSh2b2lkICpjb29raWUsIHVfaW50IHBpbik7Citp bnQJaW9hcGljX3NldF9wb2xhcml0eSh2b2lkICpjb29raWUsIHVfaW50IHBpbiwgZW51bSBpbnRy X3BvbGFyaXR5IHBvbCk7CitpbnQJaW9hcGljX3NldF90cmlnZ2VybW9kZSh2b2lkICpjb29raWUs IHVfaW50IHBpbiwKKwkgICAgZW51bSBpbnRyX3RyaWdnZXIgdHJpZ2dlcik7CitpbnQJaW9hcGlj X3NldF9zbWkodm9pZCAqY29va2llLCB1X2ludCBwaW4pOworCisvKgorICogU3RydWN0IGNvbnRh aW5pbmcgcG9pbnRlcnMgdG8gQVBJQyBmdW5jdGlvbnMgd2hvc2UKKyAqIGltcGxlbWVudGF0aW9u IGlzIHJ1biB0aW1lIHNlbGVjdGFibGUuCisgKi8KK3N0cnVjdCBhcGljX29wcyB7CisJdm9pZAko KmNyZWF0ZSkodV9pbnQsIGludCk7CisJdm9pZAkoKmluaXQpKHZtX3BhZGRyX3QpOworCXZvaWQJ KCp4YXBpY19tb2RlKSh2b2lkKTsKKwl2b2lkCSgqc2V0dXApKGludCk7CisJdm9pZAkoKmR1bXAp KGNvbnN0IGNoYXIgKik7CisJdm9pZAkoKmRpc2FibGUpKHZvaWQpOworCXZvaWQJKCplb2kpKHZv aWQpOworCWludAkoKmlkKSh2b2lkKTsKKwlpbnQJKCppbnRyX3BlbmRpbmcpKHVfaW50KTsKKwl2 b2lkCSgqc2V0X2xvZ2ljYWxfaWQpKHVfaW50LCB1X2ludCwgdV9pbnQpOworCXVfaW50CSgqY3B1 aWQpKHVfaW50KTsKKworCS8qIFZlY3RvcnMgKi8KKwl1X2ludAkoKmFsbG9jX3ZlY3RvcikodV9p bnQsIHVfaW50KTsKKwl1X2ludAkoKmFsbG9jX3ZlY3RvcnMpKHVfaW50LCB1X2ludCAqLCB1X2lu dCwgdV9pbnQpOworCXZvaWQJKCplbmFibGVfdmVjdG9yKSh1X2ludCwgdV9pbnQpOworCXZvaWQJ KCpkaXNhYmxlX3ZlY3RvcikodV9pbnQsIHVfaW50KTsKKwl2b2lkCSgqZnJlZV92ZWN0b3IpKHVf aW50LCB1X2ludCwgdV9pbnQpOworCisKKwkvKiBQTUMgKi8KKwlpbnQJKCplbmFibGVfcG1jKSh2 b2lkKTsKKwl2b2lkCSgqZGlzYWJsZV9wbWMpKHZvaWQpOworCXZvaWQJKCpyZWVuYWJsZV9wbWMp KHZvaWQpOworCisJLyogQ01DICovCisJdm9pZAkoKmVuYWJsZV9jbWMpKHZvaWQpOworCisJLyog SVBJICovCisJdm9pZAkoKmlwaV9yYXcpKHJlZ2lzdGVyX3QsIHVfaW50KTsKKwl2b2lkCSgqaXBp X3ZlY3RvcmVkKSh1X2ludCwgaW50KTsKKwlpbnQJKCppcGlfd2FpdCkoaW50KTsKKwlpbnQJKCpp cGlfYWxsb2MpKGludGhhbmRfdCAqaXBpZnVuYyk7CisJdm9pZAkoKmlwaV9mcmVlKShpbnQgdmVj dG9yKTsKKworCS8qIExWVCAqLworCWludAkoKnNldF9sdnRfbWFzaykodV9pbnQsIHVfaW50LCB1 X2NoYXIpOworCWludAkoKnNldF9sdnRfbW9kZSkodV9pbnQsIHVfaW50LCB1X2ludDMyX3QpOwor CWludAkoKnNldF9sdnRfcG9sYXJpdHkpKHVfaW50LCB1X2ludCwgZW51bSBpbnRyX3BvbGFyaXR5 KTsKKwlpbnQJKCpzZXRfbHZ0X3RyaWdnZXJtb2RlKSh1X2ludCwgdV9pbnQsIGVudW0gaW50cl90 cmlnZ2VyKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgYXBpY19vcHMgYXBpY19vcHM7CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorbGFwaWNfY3JlYXRlKHVfaW50IGFwaWNfaWQsIGludCBib290X2NwdSkK K3sKKworCWFwaWNfb3BzLmNyZWF0ZShhcGljX2lkLCBib290X2NwdSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorbGFwaWNfaW5pdCh2bV9wYWRkcl90IGFkZHIpCit7CisKKwlhcGljX29wcy5p bml0KGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3hhcGljX21vZGUodm9p ZCkKK3sKKworCWFwaWNfb3BzLnhhcGljX21vZGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitsYXBpY19zZXR1cChpbnQgYm9vdCkKK3sKKworCWFwaWNfb3BzLnNldHVwKGJvb3QpOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2R1bXAoY29uc3QgY2hhciAqc3RyKQoreworCisJ YXBpY19vcHMuZHVtcChzdHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2Rpc2Fi bGUodm9pZCkKK3sKKworCWFwaWNfb3BzLmRpc2FibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCitsYXBpY19lb2kodm9pZCkKK3sKKworCWFwaWNfb3BzLmVvaSgpOworfQorCitzdGF0aWMg aW5saW5lIGludAorbGFwaWNfaWQodm9pZCkKK3sKKworCXJldHVybiAoYXBpY19vcHMuaWQoKSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitsYXBpY19pbnRyX3BlbmRpbmcodV9pbnQgdmVjdG9y KQoreworCisJcmV0dXJuIChhcGljX29wcy5pbnRyX3BlbmRpbmcodmVjdG9yKSk7Cit9CisKKy8q IFhYWDogVU5VU0VEICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3NldF9sb2dpY2FsX2lk KHVfaW50IGFwaWNfaWQsIHVfaW50IGNsdXN0ZXIsIHVfaW50IGNsdXN0ZXJfaWQpCit7CisKKwlh cGljX29wcy5zZXRfbG9naWNhbF9pZChhcGljX2lkLCBjbHVzdGVyLCBjbHVzdGVyX2lkKTsKK30K Kworc3RhdGljIGlubGluZSB1X2ludAorYXBpY19jcHVpZCh1X2ludCBhcGljX2lkKQoreworCisJ cmV0dXJuIChhcGljX29wcy5jcHVpZChhcGljX2lkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9p bnQKK2FwaWNfYWxsb2NfdmVjdG9yKHVfaW50IGFwaWNfaWQsIHVfaW50IGlycSkKK3sKKworCXJl dHVybiAoYXBpY19vcHMuYWxsb2NfdmVjdG9yKGFwaWNfaWQsIGlycSkpOworfQorCitzdGF0aWMg aW5saW5lIHVfaW50CithcGljX2FsbG9jX3ZlY3RvcnModV9pbnQgYXBpY19pZCwgdV9pbnQgKmly cXMsIHVfaW50IGNvdW50LCB1X2ludCBhbGlnbikKK3sKKworCXJldHVybiAoYXBpY19vcHMuYWxs b2NfdmVjdG9ycyhhcGljX2lkLCBpcnFzLCBjb3VudCwgYWxpZ24pKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkCithcGljX2VuYWJsZV92ZWN0b3IodV9pbnQgYXBpY19pZCwgdV9pbnQgdmVjdG9y KQoreworCisJYXBpY19vcHMuZW5hYmxlX3ZlY3RvcihhcGljX2lkLCB2ZWN0b3IpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK2FwaWNfZGlzYWJsZV92ZWN0b3IodV9pbnQgYXBpY19pZCwgdV9p bnQgdmVjdG9yKQoreworCisJYXBpY19vcHMuZGlzYWJsZV92ZWN0b3IoYXBpY19pZCwgdmVjdG9y KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithcGljX2ZyZWVfdmVjdG9yKHVfaW50IGFwaWNf aWQsIHVfaW50IHZlY3RvciwgdV9pbnQgaXJxKQoreworCisJYXBpY19vcHMuZnJlZV92ZWN0b3Io YXBpY19pZCwgdmVjdG9yLCBpcnEpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfZW5h YmxlX3BtYyh2b2lkKQoreworCisJcmV0dXJuIChhcGljX29wcy5lbmFibGVfcG1jKCkpOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2Rpc2FibGVfcG1jKHZvaWQpCit7CisKKwlhcGlj X29wcy5kaXNhYmxlX3BtYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX3JlZW5h YmxlX3BtYyh2b2lkKQoreworCisJYXBpY19vcHMucmVlbmFibGVfcG1jKCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorbGFwaWNfZW5hYmxlX2NtYyh2b2lkKQoreworCisJYXBpY19vcHMuZW5h YmxlX2NtYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2lwaV9yYXcocmVnaXN0 ZXJfdCBpY3JsbywgdV9pbnQgZGVzdCkKK3sKKworCWFwaWNfb3BzLmlwaV9yYXcoaWNybG8sIGRl c3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xhcGljX2lwaV92ZWN0b3JlZCh1X2ludCB2 ZWN0b3IsIGludCBkZXN0KQoreworCisJYXBpY19vcHMuaXBpX3ZlY3RvcmVkKHZlY3RvciwgZGVz dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitsYXBpY19pcGlfd2FpdChpbnQgZGVsYXkpCit7 CisKKwlyZXR1cm4gKGFwaWNfb3BzLmlwaV93YWl0KGRlbGF5KSk7Cit9CisKK3N0YXRpYyBpbmxp bmUgaW50CitsYXBpY19pcGlfYWxsb2MoaW50aGFuZF90ICppcGlmdW5jKQoreworCisJcmV0dXJu IChhcGljX29wcy5pcGlfYWxsb2MoaXBpZnVuYykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQK K2xhcGljX2lwaV9mcmVlKGludCB2ZWN0b3IpCit7CisKKwlyZXR1cm4gKGFwaWNfb3BzLmlwaV9m cmVlKHZlY3RvcikpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfc2V0X2x2dF9tYXNr KHVfaW50IGFwaWNfaWQsIHVfaW50IGx2dCwgdV9jaGFyIG1hc2tlZCkKK3sKKworCXJldHVybiAo YXBpY19vcHMuc2V0X2x2dF9tYXNrKGFwaWNfaWQsIGx2dCwgbWFza2VkKSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50CitsYXBpY19zZXRfbHZ0X21vZGUodV9pbnQgYXBpY19pZCwgdV9pbnQgbHZ0 LCB1X2ludDMyX3QgbW9kZSkKK3sKKworCXJldHVybiAoYXBpY19vcHMuc2V0X2x2dF9tb2RlKGFw aWNfaWQsIGx2dCwgbW9kZSkpOworfQorCitzdGF0aWMgaW5saW5lIGludAorbGFwaWNfc2V0X2x2 dF9wb2xhcml0eSh1X2ludCBhcGljX2lkLCB1X2ludCBsdnQsIGVudW0gaW50cl9wb2xhcml0eSBw b2wpCit7CisKKwlyZXR1cm4gKGFwaWNfb3BzLnNldF9sdnRfcG9sYXJpdHkoYXBpY19pZCwgbHZ0 LCBwb2wpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2xhcGljX3NldF9sdnRfdHJpZ2dlcm1v ZGUodV9pbnQgYXBpY19pZCwgdV9pbnQgbHZ0LCBlbnVtIGludHJfdHJpZ2dlciB0cmlnZ2VyKQor eworCisJcmV0dXJuIChhcGljX29wcy5zZXRfbHZ0X3RyaWdnZXJtb2RlKGFwaWNfaWQsIGx2dCwg dHJpZ2dlcikpOworfQorCit2b2lkCWxhcGljX2hhbmRsZV9jbWModm9pZCk7Cit2b2lkCWxhcGlj X2hhbmRsZV9lcnJvcih2b2lkKTsKK3ZvaWQJbGFwaWNfaGFuZGxlX2ludHIoaW50IHZlY3Rvciwg c3RydWN0IHRyYXBmcmFtZSAqZnJhbWUpOwordm9pZAlsYXBpY19oYW5kbGVfdGltZXIoc3RydWN0 IHRyYXBmcmFtZSAqZnJhbWUpOworCitleHRlcm4gaW50IHgyYXBpY19tb2RlOworZXh0ZXJuIGlu dCBsYXBpY19lb2lfc3VwcHJlc3Npb247CisKKyNpZmRlZiBfU1lTX1NZU0NUTF9IXworU1lTQ1RM X0RFQ0woX2h3X2FwaWMpOworI2VuZGlmCisKKyNlbmRpZiAvKiAhTE9DT1JFICovCisjZW5kaWYg LyogX1g4Nl9BUElDVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAveDg2L2FwbV9iaW9zLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9hcG1f Ymlvcy5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYXBtX2Jpb3MuaAkxOTcw LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL3g4Ni9hcG1fYmlvcy5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAw CkBAIC0wLDAgKzEsMjY0IEBACisvKi0KKyAqIEFQTSAoQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVu dCkgQklPUyBEZXZpY2UgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0LTE5OTUgYnkg SE9TT0tBV0EsIFRhdHN1bWkgPGhvc29rYXdhQG10LmNzLmtlaW8uYWMuanA+CisgKgorICogVGhp cyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCwgbW9kaWZpZWQsIGNvcGllZCwgYW5kIGRpc3RyaWJ1dGVk LCBpbgorICogYm90aCBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtIHByb3ZpZGVkIHRoYXQgdGhlIGFi b3ZlIGNvcHlyaWdodCBhbmQKKyAqIHRoZXNlIHRlcm1zIGFyZSByZXRhaW5lZC4gVW5kZXIgbm8g Y2lyY3Vtc3RhbmNlcyBpcyB0aGUgYXV0aG9yCisgKiByZXNwb25zaWJsZSBmb3IgdGhlIHByb3Bl ciBmdW5jdGlvbmluZyBvZiB0aGlzIHNvZnR3YXJlLCBub3IgZG9lcworICogdGhlIGF1dGhvciBh c3N1bWUgYW55IHJlc3BvbnNpYmlsaXR5IGZvciBkYW1hZ2VzIGluY3VycmVkIHdpdGggaXRzCisg KiB1c2UuCisgKgorICogQXVnLCAxOTk0CUltcGxlbWVudGVkIG9uIEZyZWVCU0QgMS4xLjUuMVIg KFRvc2hpYmEgQVZTMDAxV0QpCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv aW5jbHVkZS9hcG1fYmlvcy5oIDIxNTE0MCAyMDEwLTExLTExIDE5OjM2OjIxWiBqa2ltICQKKyAq LworCisjaWZuZGVmIF9YODZfQVBNX0JJT1NfSF8KKyNkZWZpbmUJX1g4Nl9BUE1fQklPU19IXwor CisjaWZuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2luY2x1 ZGUgPHN5cy9pb2Njb20uaD4KKworLyogQklPUyBpZCAqLworI2RlZmluZSBBUE1fQklPUwkJMHg1 MworI2RlZmluZSBBUE1fSU5UCQkJMHgxNQorCisvKiBBUE0gZmxhZ3MgKi8KKyNkZWZpbmUgQVBN XzE2QklUX1NVUFBPUlQJMHgwMQorI2RlZmluZSBBUE1fMzJCSVRfU1VQUE9SVAkweDAyCisjZGVm aW5lIEFQTV9DUFVJRExFX1NMT1cJMHgwNAorI2RlZmluZSBBUE1fRElTQUJMRUQJCTB4MDgKKyNk ZWZpbmUgQVBNX0RJU0VOR0FHRUQJCTB4MTAKKworLyogQVBNIGluaXRpYWxpemVyIHBoeXNpY2Fs IGFkZHJlc3MgKi8KKyNkZWZpbmUgQVBNX09VUkFERFIJCTB4MDAwODAwMDAKKworLyogQVBNIGZ1 bmN0aW9ucyAqLworI2RlZmluZSBBUE1fSU5TVENIRUNLCQkweDAwCisjZGVmaW5lIEFQTV9SRUFM Q09OTkVDVAkJMHgwMQorI2RlZmluZSBBUE1fUFJPVDE2Q09OTkVDVAkweDAyCisjZGVmaW5lIEFQ TV9QUk9UMzJDT05ORUNUCTB4MDMKKyNkZWZpbmUgQVBNX0RJU0NPTk5FQ1QJCTB4MDQKKyNkZWZp bmUgQVBNX0NQVUlETEUJCTB4MDUKKyNkZWZpbmUgQVBNX0NQVUJVU1kJCTB4MDYKKyNkZWZpbmUg QVBNX1NFVFBXU1RBVEUJCTB4MDcKKyNkZWZpbmUgQVBNX0VOQUJMRURJU0FCTEVQTQkweDA4Cisj ZGVmaW5lIEFQTV9SRVNUT1JFREVGQVVMVAkweDA5CisjZGVmaW5lCUFQTV9HRVRQV1NUQVRVUwkJ MHgwYQorI2RlZmluZSBBUE1fR0VUUE1FVkVOVAkJMHgwYgorI2RlZmluZSBBUE1fR0VUUFdTVEFU RQkJMHgwYworI2RlZmluZSBBUE1fRU5BQkxFRElTQUJMRURQTQkweDBkCisjZGVmaW5lIEFQTV9E UlZWRVJTSU9OCQkweDBlCisjZGVmaW5lIEFQTV9FTkdBR0VESVNFTkdBR0VQTQkweDBmCisjZGVm aW5lIEFQTV9HRVRDQVBBQklMSVRJRVMJMHgxMAorI2RlZmluZSBBUE1fUkVTVU1FVElNRVIJCTB4 MTEKKyNkZWZpbmUgQVBNX1JFU1VNRU9OUklORwkweDEyCisjZGVmaW5lIEFQTV9USU1FUlJFUVVF U1RTCTB4MTMKKyNkZWZpbmUgQVBNX09FTUZVTkMJCTB4ODAKKworLyogZXJyb3IgY29kZSAqLwor I2RlZmluZSBBUE1FX09LCQkJMHgwMAorI2RlZmluZSBBUE1FX1BNRElTQUJMRUQJCTB4MDEKKyNk ZWZpbmUgQVBNRV9SRUFMRVNUQUJMSVNIRUQJMHgwMgorI2RlZmluZSBBUE1FX05PVENPTk5FQ1RF RAkweDAzCisjZGVmaW5lIEFQTUVfUFJPVDE2RVNUQUJMSVNIRUQJMHgwNQorI2RlZmluZSBBUE1F X1BST1QxNk5PVFNVUFBPUlRFRAkweDA2CisjZGVmaW5lIEFQTUVfUFJPVDMyRVNUQUJMSVNIRUQJ MHgwNworI2RlZmluZSBBUE1FX1BST1QzMk5PVERVUFBPUlRFRAkweDA4CisjZGVmaW5lIEFQTUVf VU5LTk9XTkRFVklDRUlECTB4MDkKKyNkZWZpbmUgQVBNRV9PVVRPRlJBTkdFCQkweDBhCisjZGVm aW5lIEFQTUVfTk9URU5HQUdFRAkJMHgwYgorI2RlZmluZSBBUE1FX0NBTlRFTlRFUlNUQVRFCTB4 NjAKKyNkZWZpbmUgQVBNRV9OT1BNRVZFTlQJCTB4ODAKKyNkZWZpbmUgQVBNRV9OT0FQTVBSRVNF TlQJMHg4NgorCisKKy8qIGRldmljZSBjb2RlICovCisjZGVmaW5lIFBNRFZfQVBNQklPUwkJMHgw MDAwCisjZGVmaW5lIFBNRFZfQUxMREVWCQkweDAwMDEKKyNkZWZpbmUgUE1EVl9ESVNQMAkJMHgw MTAwCisjZGVmaW5lIFBNRFZfRElTUDEJCTB4MDEwMQorI2RlZmluZSBQTURWX0RJU1BBTEwJCTB4 MDFmZgorI2RlZmluZSBQTURWXzJORFNUT1JBR0UwCTB4MDIwMAorI2RlZmluZSBQTURWXzJORFNU T1JBR0UxCTB4MDIwMQorI2RlZmluZSBQTURWXzJORFNUT1JBR0UyCTB4MDIwMgorI2RlZmluZSBQ TURWXzJORFNUT1JBR0UzCTB4MDIwMworI2RlZmluZSBQTURWX1BBUkFMTEVMMAkJMHgwMzAwCisj ZGVmaW5lIFBNRFZfUEFSQUxMRUwxCQkweDAzMDEKKyNkZWZpbmUgUE1EVl9TRVJJQUwwCQkweDA0 MDAKKyNkZWZpbmUgUE1EVl9TRVJJQUwxCQkweDA0MDEKKyNkZWZpbmUgUE1EVl9TRVJJQUwyCQkw eDA0MDIKKyNkZWZpbmUgUE1EVl9TRVJJQUwzCQkweDA0MDMKKyNkZWZpbmUgUE1EVl9TRVJJQUw0 CQkweDA0MDQKKyNkZWZpbmUgUE1EVl9TRVJJQUw1CQkweDA0MDUKKyNkZWZpbmUgUE1EVl9TRVJJ QUw2CQkweDA0MDYKKyNkZWZpbmUgUE1EVl9TRVJJQUw3CQkweDA0MDcKKyNkZWZpbmUgUE1EVl9O RVQwCQkweDA1MDAKKyNkZWZpbmUgUE1EVl9ORVQxCQkweDA1MDEKKyNkZWZpbmUgUE1EVl9ORVQy CQkweDA1MDIKKyNkZWZpbmUgUE1EVl9ORVQzCQkweDA1MDMKKyNkZWZpbmUgUE1EVl9QQ01DSUEw CQkweDA2MDAKKyNkZWZpbmUgUE1EVl9QQ01DSUExCQkweDA2MDEKKyNkZWZpbmUgUE1EVl9QQ01D SUEyCQkweDA2MDIKKyNkZWZpbmUgUE1EVl9QQ01DSUEzCQkweDA2MDMKKy8qIDB4MDcwMCAtIDB4 N2ZmZglSZXNlcnZlZAkJCSovCisjZGVmaW5lIFBNRFZfQkFUVF9CQVNFCQkweDgwMDAKKyNkZWZp bmUgUE1EVl9CQVRUMAkJMHg4MDAxCisjZGVmaW5lIFBNRFZfQkFUVDEJCTB4ODAwMgorI2RlZmlu ZSBQTURWX0JBVFRfQUxMCQkweDgwZmYKKy8qIDB4ODEwMCAtIDB4ZGZmZglSZXNlcnZlZAkJCSov CisvKiAweGUwMDAgLSAweGVmZmYJT0VNLWRlZmluZWQgcG93ZXIgZGV2aWNlIElEcwkqLworLyog MHhmMDAwIC0gMHhmZmZmCVJlc2VydmVkCQkJKi8KKworLyogUG93ZXIgc3RhdGUgKi8KKyNkZWZp bmUgUE1TVF9BUE1FTkFCTEVECQkweDAwMDAKKyNkZWZpbmUgUE1TVF9TVEFOREJZCQkweDAwMDEK KyNkZWZpbmUgUE1TVF9TVVNQRU5ECQkweDAwMDIKKyNkZWZpbmUgUE1TVF9PRkYJCTB4MDAwMwor I2RlZmluZSBQTVNUX0xBU1RSRVFOT1RJRlkJMHgwMDA0CisjZGVmaW5lIFBNU1RfTEFTVFJFUVJF SkVDVAkweDAwMDUKKy8qIDB4MDAwNiAtIDB4MDAxZglSZXNlcnZlZCBzeXN0ZW0gc3RhdGVzCQkq LworLyogMHgwMDIwIC0gMHgwMDNmCU9FTS1kZWZpbmVkIHN5c3RlbSBzdGF0ZXMJKi8KKy8qIDB4 MDA0MCAtIDB4MDA3ZglPRU0tZGVmaW5lZCBkZXZpY2Ugc3RhdGVzCSovCisvKiAweDAwODAgLSAw eGZmZmYJUmVzZXJ2ZWQgZGV2aWNlIHN0YXRlcwkJKi8KKworI2lmICFkZWZpbmVkKEFTU0VNQkxF UikgJiYgIWRlZmluZWQoSU5JVElBTElaRVIpCisKKy8qIEMgZGVmaW5pdGlvbnMgKi8KK3N0cnVj dCBhcG1ob29rIHsKKwlzdHJ1Y3QgYXBtaG9vawkqYWhfbmV4dDsKKwlpbnQJCSgqYWhfZnVuKSh2 b2lkICphaF9hcmcpOworCXZvaWQJCSphaF9hcmc7CisJY29uc3QgY2hhcgkqYWhfbmFtZTsKKwlp bnQJCWFoX29yZGVyOworfTsKKyNkZWZpbmUgQVBNX0hPT0tfTk9ORQkJKC0xKQorI2RlZmluZSBB UE1fSE9PS19TVVNQRU5EICAgICAgICAwCisjZGVmaW5lIEFQTV9IT09LX1JFU1VNRSAgICAgICAg IDEKKyNkZWZpbmUgTkFQTV9IT09LICAgICAgICAgICAgICAgMgorCisjaWZkZWYgX0tFUk5FTAor Cit2b2lkIGFwbV9zdXNwZW5kKGludCBzdGF0ZSk7CitzdHJ1Y3QgYXBtaG9vayAqYXBtX2hvb2tf ZXN0YWJsaXNoIChpbnQgYXBtaCwgc3RydWN0IGFwbWhvb2sgKik7Cit2b2lkIGFwbV9ob29rX2Rp c2VzdGFibGlzaCAoaW50IGFwbWgsIHN0cnVjdCBhcG1ob29rICopOwordm9pZCBhcG1fY3B1X2lk bGUodm9pZCk7Cit2b2lkIGFwbV9jcHVfYnVzeSh2b2lkKTsKKworI2VuZGlmCisKKyNlbmRpZiAv KiAhQVNTRU1CTEVSICYmICFJTklUSUFMSVpFUiAqLworCisjZGVmaW5lIEFQTV9NSU5fT1JERVIJ CTB4MDAKKyNkZWZpbmUgQVBNX01JRF9PUkRFUgkJMHg4MAorI2RlZmluZSBBUE1fTUFYX09SREVS CQkweGZmCisKKy8qIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnQgY29kZSAqLworI2RlZmluZSBQTUVW X05PRVZFTlQJCTB4MDAwMAorI2RlZmluZSBQTUVWX1NUQU5EQllSRVEJCTB4MDAwMQorI2RlZmlu ZSBQTUVWX1NVU1BFTkRSRVEJCTB4MDAwMgorI2RlZmluZSBQTUVWX05PUk1SRVNVTUUJCTB4MDAw MworI2RlZmluZSBQTUVWX0NSSVRSRVNVTUUJCTB4MDAwNAorI2RlZmluZSBQTUVWX0JBVFRFUllM T1cJCTB4MDAwNQorI2RlZmluZSBQTUVWX1BPV0VSU1RBVEVDSEFOR0UJMHgwMDA2CisjZGVmaW5l IFBNRVZfVVBEQVRFVElNRQkJMHgwMDA3CisjZGVmaW5lIFBNRVZfQ1JJVFNVU1BFTkQJMHgwMDA4 CisjZGVmaW5lIFBNRVZfVVNFUlNUQU5EQllSRVEJMHgwMDA5CisjZGVmaW5lIFBNRVZfVVNFUlNV U1BFTkRSRVEJMHgwMDBhCisjZGVmaW5lIFBNRVZfU1RBTkRCWVJFU1VNRQkweDAwMGIKKyNkZWZp bmUgUE1FVl9DQVBBQklMSVRJRVNDSEFOR0UgMHgwMDBjCisvKiAweDAwMGQgLSAweDAwZmYJUmVz ZXJ2ZWQgc3lzdGVtIGV2ZW50cwkqLworLyogMHgwMTAwIC0gMHgwMWZmCVJlc2VydmVkIGRldmlj ZSBldmVudHMJKi8KKy8qIDB4MDIwMCAtIDB4MDJmZglPRU0tZGVmaW5lZCBBUE0gZXZlbnRzCSov CisvKiAweDAzMDAgLSAweGZmZmYJUmVzZXJ2ZWQJCSovCisjZGVmaW5lIFBNRVZfREVGQVVMVAkJ MHhmZmZmZmZmZgkvKiB1c2VkIGZvciBjdXN0b21pemF0aW9uICovCisKKyNpZiAhZGVmaW5lZChB U1NFTUJMRVIpICYmICFkZWZpbmVkKElOSVRJQUxJWkVSKQorCisvKgorICogT2xkIGFwbV9pbmZv IHN0cnVjdHVyZSwgcmV0dXJuZWQgYnkgdGhlIEFQTUlPX0dFVElORk9fT0xEIGlvY3RsLiAgVGhp cworICogaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZXhlY3V0YWJsZXMu CisgKi8KK3R5cGVkZWYgc3RydWN0IGFwbV9pbmZvX29sZCB7CisJdV9pbnQJYWlfbWFqb3I7CS8q IEFQTSBtYWpvciB2ZXJzaW9uICovCisJdV9pbnQJYWlfbWlub3I7CS8qIEFQTSBtaW5vciB2ZXJz aW9uICovCisJdV9pbnQJYWlfYWNsaW5lOwkvKiBBQyBsaW5lIHN0YXR1cyAqLworCXVfaW50CWFp X2JhdHRfc3RhdDsJLyogQmF0dGVyeSBzdGF0dXMgKi8KKwl1X2ludAlhaV9iYXR0X2xpZmU7CS8q IFJlbWFpbmluZyBiYXR0ZXJ5IGxpZmUgKi8KKwl1X2ludAlhaV9zdGF0dXM7CS8qIFN0YXR1cyBv ZiBBUE0gc3VwcG9ydCAoZW5hYmxlZC9kaXNhYmxlZCkgKi8KK30gKmFwbV9pbmZvX29sZF90Owor CisvKgorICogU3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSBBUE1JT19HRVRJTkZPIGlvY3RsLgor ICoKKyAqIEluIHRoZSBjb21tZW50cyBiZWxvdywgdGhlIHBhcmVudGhlc2l6ZWQgbnVtYmVycyBp bmRpY2F0ZSB0aGUgbWluaW11bQorICogdmFsdWUgb2YgYWlfaW5mb3ZlcnNpb24gZm9yIHdoaWNo IGVhY2ggZmllbGQgaXMgdmFsaWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IGFwbV9pbmZvIHsKKwl1 X2ludAlhaV9pbmZvdmVyc2lvbjsJLyogSW5kaWNhdGVzIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQg Ki8KKwl1X2ludAlhaV9tYWpvcjsJLyogQVBNIG1ham9yIHZlcnNpb24gKDApICovCisJdV9pbnQJ YWlfbWlub3I7CS8qIEFQTSBtaW5vciB2ZXJzaW9uICgwKSAqLworCXVfaW50CWFpX2FjbGluZTsJ LyogQUMgbGluZSBzdGF0dXMgKDApICovCisJdV9pbnQJYWlfYmF0dF9zdGF0OwkvKiBCYXR0ZXJ5 IHN0YXR1cyAoMCkgKi8KKwl1X2ludAlhaV9iYXR0X2xpZmU7CS8qIFJlbWFpbmluZyBiYXR0ZXJ5 IGxpZmUgaW4gcGVyY2VudCAoMCkgKi8KKwlpbnQJYWlfYmF0dF90aW1lOwkvKiBSZW1haW5pbmcg YmF0dGVyeSB0aW1lIGluIHNlY29uZHMgKDApICovCisJdV9pbnQJYWlfc3RhdHVzOwkvKiBUcnVl IGlmIGVuYWJsZWQgKDApICovCisJdV9pbnQJYWlfYmF0dGVyaWVzOwkvKiBOdW1iZXIgb2YgYmF0 dGVyaWVzICgxKSAqLworCXVfaW50CWFpX2NhcGFiaWxpdGllczsvKiBBUE0gQ2FwYWJpbGl0aWVz ICgxKSAqLworCXVfaW50CWFpX3NwYXJlWzZdOwkvKiBGb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwor fSAqYXBtX2luZm9fdDsKKworLyogQmF0dGVyeSBmbGFnICovCisjZGVmaW5lIEFQTV9CQVRUX0hJ R0gJCTB4MDEKKyNkZWZpbmUgQVBNX0JBVFRfTE9XCQkweDAyCisjZGVmaW5lIEFQTV9CQVRUX0NS SVRJQ0FMCTB4MDQKKyNkZWZpbmUgQVBNX0JBVFRfQ0hBUkdJTkcJMHgwOAorI2RlZmluZSBBUE1f QkFUVF9OT1RfUFJFU0VOVAkweDEwCisjZGVmaW5lIEFQTV9CQVRUX05PX1NZU1RFTQkweDgwCisK K3R5cGVkZWYgc3RydWN0IGFwbV9wd3N0YXR1cyB7CisJdV9pbnQJYXBfZGV2aWNlOwkvKiBEZXZp Y2UgY29kZSBvZiBiYXR0ZXJ5ICovCisJdV9pbnQJYXBfYWNsaW5lOwkvKiBBQyBsaW5lIHN0YXR1 cyAoMCkgKi8KKwl1X2ludAlhcF9iYXR0X3N0YXQ7CS8qIEJhdHRlcnkgc3RhdHVzICgwKSAqLwor CXVfaW50CWFwX2JhdHRfZmxhZzsJLyogQmF0dGVyeSBmbGFnICgwKSAqLworCXVfaW50CWFwX2Jh dHRfbGlmZTsJLyogUmVtYWluaW5nIGJhdHRlcnkgbGlmZSBpbiBwZXJjZW50ICgwKSAqLworCWlu dAlhcF9iYXR0X3RpbWU7CS8qIFJlbWFpbmluZyBiYXR0ZXJ5IHRpbWUgaW4gc2Vjb25kcyAoMCkg Ki8KK30gKmFwbV9wd3N0YXR1c190OworCitzdHJ1Y3QgYXBtX2Jpb3NfYXJnIHsKKyAgICAgICAg dWludDMyX3QgZWF4OworICAgICAgICB1aW50MzJfdCBlYng7CisgICAgICAgIHVpbnQzMl90IGVj eDsKKyAgICAgICAgdWludDMyX3QgZWR4OworICAgICAgICB1aW50MzJfdCBlc2k7CisgICAgICAg IHVpbnQzMl90IGVkaTsKK307CisKK3N0cnVjdCBhcG1fZXZlbnRfaW5mbyB7CisJdV9pbnQgdHlw ZTsKKwl1X2ludCBpbmRleDsKKwl1X2ludCBzcGFyZVs4XTsKK307CisKKyNkZWZpbmUgQVBNSU9f U1VTUEVORAkJX0lPKCdQJywgMSkKKyNkZWZpbmUgQVBNSU9fR0VUSU5GT19PTEQJX0lPUignUCcs IDIsIHN0cnVjdCBhcG1faW5mb19vbGQpCisjZGVmaW5lIEFQTUlPX0VOQUJMRQkJX0lPKCdQJywg NSkKKyNkZWZpbmUgQVBNSU9fRElTQUJMRQkJX0lPKCdQJywgNikKKyNkZWZpbmUgQVBNSU9fSEFM VENQVQkJX0lPKCdQJywgNykKKyNkZWZpbmUgQVBNSU9fTk9USEFMVENQVQlfSU8oJ1AnLCA4KQor I2RlZmluZSBBUE1JT19ESVNQTEFZCQlfSU9XKCdQJywgOSwgaW50KQorI2RlZmluZSBBUE1JT19C SU9TCQlfSU9XUignUCcsIDEwLCBzdHJ1Y3QgYXBtX2Jpb3NfYXJnKQorI2RlZmluZSBBUE1JT19H RVRJTkZPCQlfSU9SKCdQJywgMTEsIHN0cnVjdCBhcG1faW5mbykKKyNkZWZpbmUgQVBNSU9fU1RB TkRCWQkJX0lPKCdQJywgMTIpCisjZGVmaW5lIEFQTUlPX0dFVFBXU1RBVFVTCV9JT1dSKCdQJywg MTMsIHN0cnVjdCBhcG1fcHdzdGF0dXMpCisvKiBmb3IgL2Rldi9hcG1jdGwgKi8KKyNkZWZpbmUg QVBNSU9fTkVYVEVWRU5UCQlfSU9SKCdBJywgMTAwLCBzdHJ1Y3QgYXBtX2V2ZW50X2luZm8pCisj ZGVmaW5lIEFQTUlPX1JFSkVDVExBU1RSRVEJX0lPKCdQJywgMTAxKQorCisjZW5kaWYgLyogIUFT U0VNQkxFUiAmJiAhSU5JVElBTElaRVIgKi8KKworI2VuZGlmIC8qICFfWDg2X0FQTV9CSU9TX0hf ICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2J1cy5oIC91 c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYnVzLmgKLS0tIHVzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL3g4Ni9idXMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9idXMuaAkyMDE2LTA5LTI5IDAwOjI0 OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDExMDQgQEAKKy8qLQorICogQ29weXJpZ2h0 IChjKSBLQVRPIFRha2Vub3JpLCAxOTk5LgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBV bnB1Ymxpc2hlZCByaWdodHMgcmVzZXJ2ZWQgdW5kZXIgdGhlIGNvcHlyaWdodAorICogbGF3cyBv ZiBKYXBhbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq IAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBhcworICogICAgdGhlIGZpcnN0IGxpbmVzIG9mIHRo aXMgZmlsZSB1bm1vZGlmaWVkLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUg dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn IEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9idXMu aCAyODY2NjcgMjAxNS0wOC0xMiAxNToyNjozMlogbWFyY2VsICQKKyAqLworCisvKgkkTmV0QlNE OiBidXMuaCx2IDEuMTIgMTk5Ny8xMC8wMSAwODoyNToxNSBmdmRsIEV4cCAkCSovCisKKy8qLQor ICogQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgor ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9t IHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgSmFz b24gUi4gVGhvcnBlIG9mIHRoZSBOdW1lcmljYWwgQWVyb3NwYWNlIFNpbXVsYXRpb24gRmFjaWxp dHksCisgKiBOQVNBIEFtZXMgUmVzZWFyY2ggQ2VudGVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBD T05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRB VElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov CisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk2IENoYXJsZXMgTS4gSGFubnVtLiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5NiBDaHJpc3RvcGhlciBHLiBEZW1l dHJpb3UuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJl CisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAg ICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgQ2hyaXN0b3Bo ZXIgRy4gRGVtZXRyaW91CisgKglmb3IgdGhlIE5ldEJTRCBQcm9qZWN0LgorICogNC4gVGhlIG5h bWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9YODZfQlVT X0hfCisjZGVmaW5lIF9YODZfQlVTX0hfCisKKyNpbmNsdWRlIDxtYWNoaW5lL19idXMuaD4KKyNp bmNsdWRlIDxtYWNoaW5lL2NwdWZ1bmMuaD4KKworI2lmbmRlZiBfX0dOVUNMSUtFX0FTTQorIyBp Zm5kZWYgbGludAorIyAgZXJyb3IgIm5vIGFzc2VtYmxlciBjb2RlIGZvciB5b3VyIGNvbXBpbGVy IgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSB4ODYgYnVzIHNwYWNl IHRhZywgbm90IHRvIGJlIHVzZWQgZGlyZWN0bHkgYnkgTUkgY29kZS4KKyAqLworI2RlZmluZQlY ODZfQlVTX1NQQUNFX0lPCTAJLyogc3BhY2UgaXMgaS9vIHNwYWNlICovCisjZGVmaW5lCVg4Nl9C VVNfU1BBQ0VfTUVNCTEJLyogc3BhY2UgaXMgbWVtIHNwYWNlICovCisKKyNkZWZpbmUgQlVTX1NQ QUNFX01BWFNJWkVfMjRCSVQJMHhGRkZGRkYKKyNkZWZpbmUgQlVTX1NQQUNFX01BWFNJWkVfMzJC SVQgMHhGRkZGRkZGRgorI2RlZmluZSBCVVNfU1BBQ0VfTUFYU0laRQkweEZGRkZGRkZGCisjZGVm aW5lIEJVU19TUEFDRV9NQVhBRERSXzI0QklUCTB4RkZGRkZGCisjZGVmaW5lIEJVU19TUEFDRV9N QVhBRERSXzMyQklUIDB4RkZGRkZGRkYKKyNpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5l ZChQQUUpCisjZGVmaW5lIEJVU19TUEFDRV9NQVhBRERSCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAor I2Vsc2UKKyNkZWZpbmUgQlVTX1NQQUNFX01BWEFERFIJMHhGRkZGRkZGRgorI2VuZGlmCisKKyNk ZWZpbmUgQlVTX1NQQUNFX0lOVkFMSURfREFUQQkofjApCisjZGVmaW5lIEJVU19TUEFDRV9VTlJF U1RSSUNURUQJKH4wKQorCisvKgorICogTWFwIGEgcmVnaW9uIG9mIGRldmljZSBidXMgc3BhY2Ug aW50byBDUFUgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorICovCisKK2ludCBidXNfc3BhY2VfbWFw KGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19hZGRyX3QgYWRkciwgYnVzX3NpemVfdCBzaXplLAor ICAgIGludCBmbGFncywgYnVzX3NwYWNlX2hhbmRsZV90ICpic2hwKTsKKworLyoKKyAqIFVubWFw IGEgcmVnaW9uIG9mIGRldmljZSBidXMgc3BhY2UuCisgKi8KKwordm9pZCBidXNfc3BhY2VfdW5t YXAoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKyAgICBidXNf c2l6ZV90IHNpemUpOworCisvKgorICogR2V0IGEgbmV3IGhhbmRsZSBmb3IgYSBzdWJyZWdpb24g b2YgYW4gYWxyZWFkeS1tYXBwZWQgYXJlYSBvZiBidXMgc3BhY2UuCisgKi8KKworc3RhdGljIF9f aW5saW5lIGludCBidXNfc3BhY2Vfc3VicmVnaW9uKGJ1c19zcGFjZV90YWdfdCB0LAorCQkJCQli dXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQlidXNfc2l6ZV90IG9mZnNldCwgYnVzX3NpemVf dCBzaXplLAorCQkJCQlidXNfc3BhY2VfaGFuZGxlX3QgKm5ic2hwKTsKKworc3RhdGljIF9faW5s aW5lIGludAorYnVzX3NwYWNlX3N1YnJlZ2lvbihidXNfc3BhY2VfdGFnX3QgdCBfX3VudXNlZCwg YnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCBidXNfc2l6 ZV90IHNpemUgX191bnVzZWQsCisJCSAgICBidXNfc3BhY2VfaGFuZGxlX3QgKm5ic2hwKQorewor CisJKm5ic2hwID0gYnNoICsgb2Zmc2V0OworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBBbGxv Y2F0ZSBhIHJlZ2lvbiBvZiBtZW1vcnkgdGhhdCBpcyBhY2Nlc3NpYmxlIHRvIGRldmljZXMgaW4g YnVzIHNwYWNlLgorICovCisKK2ludAlidXNfc3BhY2VfYWxsb2MoYnVzX3NwYWNlX3RhZ190IHQs IGJ1c19hZGRyX3QgcnN0YXJ0LAorCQkJYnVzX2FkZHJfdCByZW5kLCBidXNfc2l6ZV90IHNpemUs IGJ1c19zaXplX3QgYWxpZ24sCisJCQlidXNfc2l6ZV90IGJvdW5kYXJ5LCBpbnQgZmxhZ3MsIGJ1 c19hZGRyX3QgKmFkZHJwLAorCQkJYnVzX3NwYWNlX2hhbmRsZV90ICpic2hwKTsKKworLyoKKyAq IEZyZWUgYSByZWdpb24gb2YgYnVzIHNwYWNlIGFjY2Vzc2libGUgbWVtb3J5LgorICovCisKK3N0 YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9mcmVlKGJ1c19zcGFjZV90YWdfdCB0LCBidXNf c3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCSAgICBidXNfc2l6ZV90IHNpemUpOworCitzdGF0aWMg X19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX2ZyZWUoYnVzX3NwYWNlX3RhZ190IHQgX191bnVzZWQs IGJ1c19zcGFjZV9oYW5kbGVfdCBic2ggX191bnVzZWQsCisJICAgICAgIGJ1c19zaXplX3Qgc2l6 ZSBfX3VudXNlZCkKK3sKK30KKworCisvKgorICogUmVhZCBhIDEsIDIsIDQsIG9yIDggYnl0ZSBx dWFudGl0eSBmcm9tIGJ1cyBzcGFjZQorICogZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUvb2Zmc2V0 LgorICovCitzdGF0aWMgX19pbmxpbmUgdV9pbnQ4X3QgYnVzX3NwYWNlX3JlYWRfMShidXNfc3Bh Y2VfdGFnX3QgdGFnLAorCQkJCQkgIGJ1c19zcGFjZV9oYW5kbGVfdCBoYW5kbGUsCisJCQkJCSAg YnVzX3NpemVfdCBvZmZzZXQpOworCitzdGF0aWMgX19pbmxpbmUgdV9pbnQxNl90IGJ1c19zcGFj ZV9yZWFkXzIoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgYnVzX3NwYWNlX2hhbmRsZV90 IGhhbmRsZSwKKwkJCQkJICAgYnVzX3NpemVfdCBvZmZzZXQpOworCitzdGF0aWMgX19pbmxpbmUg dV9pbnQzMl90IGJ1c19zcGFjZV9yZWFkXzQoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAg YnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJCQkJICAgYnVzX3NpemVfdCBvZmZzZXQpOwor CisjaWZkZWYgX19hbWQ2NF9fCitzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgYnVzX3NwYWNlX3Jl YWRfOChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgIGJ1c19zcGFjZV9oYW5kbGVfdCBoYW5k bGUsCisJCQkJCSAgYnVzX3NpemVfdCBvZmZzZXQpOworI2VuZGlmCisKK3N0YXRpYyBfX2lubGlu ZSB1X2ludDhfdAorYnVzX3NwYWNlX3JlYWRfMShidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3Bh Y2VfaGFuZGxlX3QgaGFuZGxlLAorCQkgYnVzX3NpemVfdCBvZmZzZXQpCit7CisKKwlpZiAodGFn ID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXJldHVybiAoaW5iKGhhbmRsZSArIG9mZnNldCkpOwor CXJldHVybiAoKih2b2xhdGlsZSB1X2ludDhfdCAqKShoYW5kbGUgKyBvZmZzZXQpKTsKK30KKwor c3RhdGljIF9faW5saW5lIHVfaW50MTZfdAorYnVzX3NwYWNlX3JlYWRfMihidXNfc3BhY2VfdGFn X3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgaGFuZGxlLAorCQkgYnVzX3NpemVfdCBvZmZzZXQp Cit7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXJldHVybiAoaW53KGhhbmRs ZSArIG9mZnNldCkpOworCXJldHVybiAoKih2b2xhdGlsZSB1X2ludDE2X3QgKikoaGFuZGxlICsg b2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2ludDMyX3QKK2J1c19zcGFjZV9yZWFk XzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJIGJ1 c19zaXplX3Qgb2Zmc2V0KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQly ZXR1cm4gKGlubChoYW5kbGUgKyBvZmZzZXQpKTsKKwlyZXR1cm4gKCoodm9sYXRpbGUgdV9pbnQz Ml90ICopKGhhbmRsZSArIG9mZnNldCkpOworfQorCisjaWZkZWYgX19hbWQ2NF9fCitzdGF0aWMg X19pbmxpbmUgdWludDY0X3QKK2J1c19zcGFjZV9yZWFkXzgoYnVzX3NwYWNlX3RhZ190IHRhZywg YnVzX3NwYWNlX2hhbmRsZV90IGhhbmRsZSwKKwkJIGJ1c19zaXplX3Qgb2Zmc2V0KQoreworCisJ aWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKSAvKiBObyA4IGJ5dGUgSU8gc3BhY2UgYWNjZXNz IG9uIHg4NiAqLworCQlyZXR1cm4gKEJVU19TUEFDRV9JTlZBTElEX0RBVEEpOworCXJldHVybiAo Kih2b2xhdGlsZSB1aW50NjRfdCAqKShoYW5kbGUgKyBvZmZzZXQpKTsKK30KKyNlbmRpZgorCisv KgorICogUmVhZCBgY291bnQnIDEsIDIsIDQsIG9yIDggYnl0ZSBxdWFudGl0aWVzIGZyb20gYnVz IHNwYWNlCisgKiBkZXNjcmliZWQgYnkgdGFnL2hhbmRsZS9vZmZzZXQgYW5kIGNvcHkgaW50byBi dWZmZXIgcHJvdmlkZWQuCisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFk X211bHRpXzEoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19zcGFjZV9oYW5kbGVf dCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgKmFkZHIsCisJCQkJ CSAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2VfcmVh ZF9tdWx0aV8yKGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICBidXNfc3BhY2VfaGFuZGxl X3QgYnNoLAorCQkJCQkgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVfaW50MTZfdCAqYWRkciwKKwkJ CQkJICAgIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9y ZWFkX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19zcGFjZV9oYW5k bGVfdCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQzMl90ICphZGRyLAor CQkJCQkgICAgc2l6ZV90IGNvdW50KTsKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFj ZV9yZWFkX211bHRpXzEoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJz aCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDhfdCAqYWRkciwgc2l6ZV90IGNv dW50KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQlpbnNiKGJzaCArIG9m ZnNldCwgYWRkciwgY291bnQpOworCWVsc2UgeworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9f YXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CW1vdmIgKCUyKSwl JWFsCQkJCVxuXAorCQkJc3Rvc2IJCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1E IiAoYWRkciksICI9YyIgKGNvdW50KQkJCToKKwkJICAgICJyIiAoYnNoICsgb2Zmc2V0KSwgIjAi IChhZGRyKSwgIjEiIChjb3VudCkJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5Iik7CisjZW5kaWYK Kwl9Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2VfcmVhZF9tdWx0aV8yKGJ1 c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgICBidXNf c2l6ZV90IG9mZnNldCwgdV9pbnQxNl90ICphZGRyLCBzaXplX3QgY291bnQpCit7CisKKwlpZiAo dGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWluc3coYnNoICsgb2Zmc2V0LCBhZGRyLCBjb3Vu dCk7CisJZWxzZSB7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgi CQkJCVxuXAorCQkJY2xkCQkJCQlcblwKKwkJMToJbW92dyAoJTIpLCUlYXgJCQkJXG5cCisJCQlz dG9zdwkJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRyKSwgIj1jIiAo Y291bnQpCQkJOgorCQkgICAgInIiIChic2ggKyBvZmZzZXQpLCAiMCIgKGFkZHIpLCAiMSIgKGNv dW50KQk6CisJCSAgICAiJWVheCIsICJtZW1vcnkiKTsKKyNlbmRpZgorCX0KK30KKworc3RhdGlj IF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9yZWFkX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRh ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1 X2ludDMyX3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19T UEFDRV9JTykKKwkJaW5zbChic2ggKyBvZmZzZXQsIGFkZHIsIGNvdW50KTsKKwllbHNlIHsKKyNp ZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJ CQkJCVxuXAorCQkxOgltb3ZsICglMiksJSVlYXgJCQkJXG5cCisJCQlzdG9zbAkJCQkJXG5cCisJ CQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJOgorCQkg ICAgInIiIChic2ggKyBvZmZzZXQpLCAiMCIgKGFkZHIpLCAiMSIgKGNvdW50KQk6CisJCSAgICAi JWVheCIsICJtZW1vcnkiKTsKKyNlbmRpZgorCX0KK30KKworI2lmIDAJLyogQ2F1c2UgYSBsaW5r IGVycm9yIGZvciBidXNfc3BhY2VfcmVhZF9tdWx0aV84ICovCisjZGVmaW5lCWJ1c19zcGFjZV9y ZWFkX211bHRpXzgJISEhIGJ1c19zcGFjZV9yZWFkX211bHRpXzggdW5pbXBsZW1lbnRlZCAhISEK KyNlbmRpZgorCisvKgorICogUmVhZCBgY291bnQnIDEsIDIsIDQsIG9yIDggYnl0ZSBxdWFudGl0 aWVzIGZyb20gYnVzIHNwYWNlCisgKiBkZXNjcmliZWQgYnkgdGFnL2hhbmRsZSBhbmQgc3RhcnRp bmcgYXQgYG9mZnNldCcgYW5kIGNvcHkgaW50bworICogYnVmZmVyIHByb3ZpZGVkLgorICovCitz dGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2VfcmVhZF9yZWdpb25fMShidXNfc3BhY2VfdGFn X3QgdGFnLAorCQkJCQkgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICAgYnVz X3NpemVfdCBvZmZzZXQsIHVfaW50OF90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBjb3VudCk7 CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl8yKGJ1c19zcGFj ZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAg ICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBj b3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl80KGJ1 c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJ CQkJICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQzMl90ICphZGRyLAorCQkJCQkgICAgIHNp emVfdCBjb3VudCk7CisKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9yZWFkX3Jl Z2lvbl8xKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQli dXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlm ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0 OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJ CWNsZAkJCQkJXG5cCisJCTE6CWluYiAldzIsJSVhbAkJCQlcblwKKwkJCXN0b3NiCQkJCQlcblwK KwkJCWluY2wgJTIJCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1EIiAoYWRkciks ICI9YyIgKGNvdW50KSwgIj1kIiAoX3BvcnRfKQk6CisJCSAgICAiMCIgKGFkZHIpLCAiMSIgKGNv dW50KSwgIjIiIChfcG9ydF8pCToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2Vu ZGlmCisJfSBlbHNlIHsKKwkJYnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNl dDsKKyNpZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJ CQljbGQJCQkJCVxuXAorCQkJcmVwbmUJCQkJCVxuXAorCQkJbW92c2IiCQkJCQk6CisJCSAgICAi PUQiIChhZGRyKSwgIj1jIiAoY291bnQpLCAiPVMiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRk ciksICIxIiAoY291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOwor I2VuZGlmCisJfQorfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3JlYWRfcmVn aW9uXzIoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCWJ1 c19zaXplX3Qgb2Zmc2V0LCB1X2ludDE2X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlm ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0 OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJ CWNsZAkJCQkJXG5cCisJCTE6CWludyAldzIsJSVheAkJCQlcblwKKwkJCXN0b3N3CQkJCQlcblwK KwkJCWFkZGwgJDIsJTIJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChhZGRy KSwgIj1jIiAoY291bnQpLCAiPWQiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRkciksICIxIiAo Y291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7Cisj ZW5kaWYKKwl9IGVsc2UgeworCQlidXNfc3BhY2VfaGFuZGxlX3QgX3BvcnRfID0gYnNoICsgb2Zm c2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwK KwkJCWNsZAkJCQkJXG5cCisJCQlyZXBuZQkJCQkJXG5cCisJCQltb3ZzdyIJCQkJCToKKwkJICAg ICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCksICI9UyIgKF9wb3J0XykJOgorCQkgICAgIjAiIChh ZGRyKSwgIjEiIChjb3VudCksICIyIiAoX3BvcnRfKQk6CisJCSAgICAibWVtb3J5IiwgImNjIik7 CisjZW5kaWYKKwl9Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2VfcmVhZF9y ZWdpb25fNChidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJ YnVzX3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJ aWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKSB7CisJCWludCBfcG9ydF8gPSBic2ggKyBvZmZz ZXQ7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAor CQkJY2xkCQkJCQlcblwKKwkJMToJaW5sICV3MiwlJWVheAkJCQlcblwKKwkJCXN0b3NsCQkJCQlc blwKKwkJCWFkZGwgJDQsJTIJCQkJXG5cCisJCQlsb29wIDFiIgkJCQk6CisJCSAgICAiPUQiIChh ZGRyKSwgIj1jIiAoY291bnQpLCAiPWQiIChfcG9ydF8pCToKKwkJICAgICIwIiAoYWRkciksICIx IiAoY291bnQpLCAiMiIgKF9wb3J0XykJOgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7 CisjZW5kaWYKKwl9IGVsc2UgeworCQlidXNfc3BhY2VfaGFuZGxlX3QgX3BvcnRfID0gYnNoICsg b2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlc blwKKwkJCWNsZAkJCQkJXG5cCisJCQlyZXBuZQkJCQkJXG5cCisJCQltb3ZzbCIJCQkJCToKKwkJ ICAgICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCksICI9UyIgKF9wb3J0XykJOgorCQkgICAgIjAi IChhZGRyKSwgIjEiIChjb3VudCksICIyIiAoX3BvcnRfKQk6CisJCSAgICAibWVtb3J5IiwgImNj Iik7CisjZW5kaWYKKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGluayBlcnJvciBmb3IgYnVz X3NwYWNlX3JlYWRfcmVnaW9uXzggKi8KKyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfcmVnaW9uXzgJ ISEhIGJ1c19zcGFjZV9yZWFkX3JlZ2lvbl84IHVuaW1wbGVtZW50ZWQgISEhCisjZW5kaWYKKwor LyoKKyAqIFdyaXRlIHRoZSAxLCAyLCA0LCBvciA4IGJ5dGUgdmFsdWUgYHZhbHVlJyB0byBidXMg c3BhY2UKKyAqIGRlc2NyaWJlZCBieSB0YWcvaGFuZGxlL29mZnNldC4KKyAqLworCitzdGF0aWMg X19pbmxpbmUgdm9pZCBidXNfc3BhY2Vfd3JpdGVfMShidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJ CSAgICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCSAgICAgICBidXNfc2l6ZV90IG9m ZnNldCwgdV9pbnQ4X3QgdmFsdWUpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2Vf d3JpdGVfMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCSAgICAgICBidXNfc3BhY2VfaGFuZGxl X3QgYnNoLAorCQkJCSAgICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlKTsK Kworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlXzQoYnVzX3NwYWNlX3RhZ190 IHRhZywKKwkJCQkgICAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkgICAgICAgYnVz X3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCB2YWx1ZSk7CisKKyNpZmRlZiBfX2FtZDY0X18KK3N0 YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV93cml0ZV84KGJ1c19zcGFjZV90YWdfdCB0YWcs CisJCQkJICAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJICAgICAgIGJ1c19zaXpl X3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSk7CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lIHZv aWQKK2J1c19zcGFjZV93cml0ZV8xKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5k bGVfdCBic2gsCisJCSAgICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3QgdmFsdWUpCit7 CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dGIoYnNoICsgb2Zmc2V0LCB2 YWx1ZSk7CisJZWxzZQorCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGJzaCArIG9mZnNldCkgPSB2 YWx1ZTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV93cml0ZV8yKGJ1c19z cGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgICBidXNfc2l6 ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlKQoreworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQ QUNFX0lPKQorCQlvdXR3KGJzaCArIG9mZnNldCwgdmFsdWUpOworCWVsc2UKKwkJKih2b2xhdGls ZSB1X2ludDE2X3QgKikoYnNoICsgb2Zmc2V0KSA9IHZhbHVlOworfQorCitzdGF0aWMgX19pbmxp bmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl X2hhbmRsZV90IGJzaCwKKwkJICAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDMyX3QgdmFs dWUpCit7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dGwoYnNoICsgb2Zm c2V0LCB2YWx1ZSk7CisJZWxzZQorCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShic2ggKyBvZmZz ZXQpID0gdmFsdWU7Cit9CisKKyNpZmRlZiBfX2FtZDY0X18KK3N0YXRpYyBfX2lubGluZSB2b2lk CitidXNfc3BhY2Vfd3JpdGVfOChidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxl X3QgYnNoLAorCQkgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSkKK3sKKworCWlm ICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgLyogTm8gOCBieXRlIElPIHNwYWNlIGFjY2VzcyBv biB4ODYgKi8KKwkJcmV0dXJuOworCWVsc2UKKwkJKih2b2xhdGlsZSB1aW50NjRfdCAqKShic2gg KyBvZmZzZXQpID0gdmFsdWU7Cit9CisjZW5kaWYKKworLyoKKyAqIFdyaXRlIGBjb3VudCcgMSwg MiwgNCwgb3IgOCBieXRlIHF1YW50aXRpZXMgZnJvbSB0aGUgYnVmZmVyCisgKiBwcm92aWRlZCB0 byBidXMgc3BhY2UgZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUvb2Zmc2V0LgorICovCisKK3N0YXRp YyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV93cml0ZV9tdWx0aV8xKGJ1c19zcGFjZV90YWdfdCB0 YWcsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgICBidXNfc2l6 ZV90IG9mZnNldCwKKwkJCQkJICAgICBjb25zdCB1X2ludDhfdCAqYWRkciwKKwkJCQkJICAgICBz aXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX211bHRp XzIoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNo LAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgIGNvbnN0IHVfaW50MTZf dCAqYWRkciwKKwkJCQkJICAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9p ZCBidXNfc3BhY2Vfd3JpdGVfbXVsdGlfNChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAg IGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICAgYnVzX3NpemVfdCBvZmZzZXQsCisJ CQkJCSAgICAgY29uc3QgdV9pbnQzMl90ICphZGRyLAorCQkJCQkgICAgIHNpemVfdCBjb3VudCk7 CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfd3JpdGVfbXVsdGlfMShidXNfc3Bh Y2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJYnVzX3NpemVfdCBvZmZz ZXQsIGNvbnN0IHVfaW50OF90ICphZGRyLCBzaXplX3QgY291bnQpCit7CisKKwlpZiAodGFnID09 IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCW91dHNiKGJzaCArIG9mZnNldCwgYWRkciwgY291bnQpOwor CWVsc2UgeworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlc blwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxvZHNiCQkJCQlcblwKKwkJCW1vdmIgJSVhbCwoJTIp CQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1TIiAoYWRkciksICI9YyIgKGNvdW50 KQkJCToKKwkJICAgICJyIiAoYnNoICsgb2Zmc2V0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkJ OgorCQkgICAgIiVlYXgiLCAibWVtb3J5IiwgImNjIik7CisjZW5kaWYKKwl9Cit9CisKK3N0YXRp YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfd3JpdGVfbXVsdGlfMihidXNfc3BhY2VfdGFnX3Qg dGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJYnVzX3NpemVfdCBvZmZzZXQsIGNvbnN0 IHVfaW50MTZfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJaWYgKHRhZyA9PSBYODZfQlVT X1NQQUNFX0lPKQorCQlvdXRzdyhic2ggKyBvZmZzZXQsIGFkZHIsIGNvdW50KTsKKwllbHNlIHsK KyNpZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQlj bGQJCQkJCVxuXAorCQkxOglsb2RzdwkJCQkJXG5cCisJCQltb3Z3ICUlYXgsKCUyKQkJCQlcblwK KwkJCWxvb3AgMWIiCQkJCToKKwkJICAgICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJCQk6CisJ CSAgICAiciIgKGJzaCArIG9mZnNldCksICIwIiAoYWRkciksICIxIiAoY291bnQpCToKKwkJICAg ICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfQorfQorCitzdGF0aWMgX19pbmxp bmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlX211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVz X3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCWJ1c19zaXplX3Qgb2Zmc2V0LCBjb25zdCB1X2ludDMy X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFDRV9J TykKKwkJb3V0c2woYnNoICsgb2Zmc2V0LCBhZGRyLCBjb3VudCk7CisJZWxzZSB7CisjaWZkZWYg X19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlc blwKKwkJMToJbG9kc2wJCQkJCVxuXAorCQkJbW92bCAlJWVheCwoJTIpCQkJCVxuXAorCQkJbG9v cCAxYiIJCQkJOgorCQkgICAgIj1TIiAoYWRkciksICI9YyIgKGNvdW50KQkJCToKKwkJICAgICJy IiAoYnNoICsgb2Zmc2V0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkJOgorCQkgICAgIiVlYXgi LCAibWVtb3J5IiwgImNjIik7CisjZW5kaWYKKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGlu ayBlcnJvciBmb3IgYnVzX3NwYWNlX3dyaXRlX211bHRpXzggKi8KKyNkZWZpbmUJYnVzX3NwYWNl X3dyaXRlX211bHRpXzgodCwgaCwgbywgYSwgYykJCQkJXAorCQkJISEhIGJ1c19zcGFjZV93cml0 ZV9tdWx0aV84IHVuaW1wbGVtZW50ZWQgISEhCisjZW5kaWYKKworLyoKKyAqIFdyaXRlIGBjb3Vu dCcgMSwgMiwgNCwgb3IgOCBieXRlIHF1YW50aXRpZXMgZnJvbSB0aGUgYnVmZmVyIHByb3ZpZGVk CisgKiB0byBidXMgc3BhY2UgZGVzY3JpYmVkIGJ5IHRhZy9oYW5kbGUgc3RhcnRpbmcgYXQgYG9m ZnNldCcuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX3JlZ2lv bl8xKGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBi c2gsCisJCQkJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgICBjb25zdCB1X2lu dDhfdCAqYWRkciwKKwkJCQkJICAgICAgc2l6ZV90IGNvdW50KTsKK3N0YXRpYyBfX2lubGluZSB2 b2lkIGJ1c19zcGFjZV93cml0ZV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkg ICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICAgICBidXNfc2l6ZV90IG9mZnNl dCwKKwkJCQkJICAgICAgY29uc3QgdV9pbnQxNl90ICphZGRyLAorCQkJCQkgICAgICBzaXplX3Qg Y291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KGJ1 c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJ CQkJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICAgICBjb25zdCB1X2ludDMyX3Qg KmFkZHIsCisJCQkJCSAgICAgIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lk CitidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzEoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl X2hhbmRsZV90IGJzaCwKKwkJCSBidXNfc2l6ZV90IG9mZnNldCwgY29uc3QgdV9pbnQ4X3QgKmFk ZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFDRV9JTykgewor CQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0VfQVNNCisJCV9f YXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxvZHNiCQkJCQlc blwKKwkJCW91dGIgJSVhbCwldzAJCQkJXG5cCisJCQlpbmNsICUwCQkJCQlcblwKKwkJCWxvb3Ag MWIiCQkJCToKKwkJICAgICI9ZCIgKF9wb3J0XyksICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJ OgorCQkgICAgIjAiIChfcG9ydF8pLCAiMSIgKGFkZHIpLCAiMiIgKGNvdW50KQk6CisJCSAgICAi JWVheCIsICJtZW1vcnkiLCAiY2MiKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWJ1c19zcGFjZV9o YW5kbGVfdCBfcG9ydF8gPSBic2ggKyBvZmZzZXQ7CisjaWZkZWYgX19HTlVDTElLRV9BU00KKwkJ X19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlcblwKKwkJCXJlcG5lCQkJCQlc blwKKwkJCW1vdnNiIgkJCQkJOgorCQkgICAgIj1EIiAoX3BvcnRfKSwgIj1TIiAoYWRkciksICI9 YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciksICIyIiAoY291bnQp CToKKwkJICAgICJtZW1vcnkiLCAiY2MiKTsKKyNlbmRpZgorCX0KK30KKworc3RhdGljIF9faW5s aW5lIHZvaWQKK2J1c19zcGFjZV93cml0ZV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLCBi dXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJIGJ1c19zaXplX3Qgb2Zmc2V0LCBjb25zdCB1X2lu dDE2X3QgKmFkZHIsIHNpemVfdCBjb3VudCkKK3sKKworCWlmICh0YWcgPT0gWDg2X0JVU19TUEFD RV9JTykgeworCQlpbnQgX3BvcnRfID0gYnNoICsgb2Zmc2V0OworI2lmZGVmIF9fR05VQ0xJS0Vf QVNNCisJCV9fYXNtIF9fdm9sYXRpbGUoIgkJCQlcblwKKwkJCWNsZAkJCQkJXG5cCisJCTE6CWxv ZHN3CQkJCQlcblwKKwkJCW91dHcgJSVheCwldzAJCQkJXG5cCisJCQlhZGRsICQyLCUwCQkJCVxu XAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1kIiAoX3BvcnRfKSwgIj1TIiAoYWRkciksICI9 YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciksICIyIiAoY291bnQp CToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJ YnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNldDsKKyNpZmRlZiBfX0dOVUNM SUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJCQkJCVxuXAorCQkJ cmVwbmUJCQkJCVxuXAorCQkJbW92c3ciCQkJCQk6CisJCSAgICAiPUQiIChfcG9ydF8pLCAiPVMi IChhZGRyKSwgIj1jIiAoY291bnQpCToKKwkJICAgICIwIiAoX3BvcnRfKSwgIjEiIChhZGRyKSwg IjIiIChjb3VudCkJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJfQorfQorCitz dGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KGJ1c19zcGFjZV90 YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCQkgYnVzX3NpemVfdCBvZmZzZXQs IGNvbnN0IHVfaW50MzJfdCAqYWRkciwgc2l6ZV90IGNvdW50KQoreworCisJaWYgKHRhZyA9PSBY ODZfQlVTX1NQQUNFX0lPKSB7CisJCWludCBfcG9ydF8gPSBic2ggKyBvZmZzZXQ7CisjaWZkZWYg X19HTlVDTElLRV9BU00KKwkJX19hc20gX192b2xhdGlsZSgiCQkJCVxuXAorCQkJY2xkCQkJCQlc blwKKwkJMToJbG9kc2wJCQkJCVxuXAorCQkJb3V0bCAlJWVheCwldzAJCQkJXG5cCisJCQlhZGRs ICQ0LCUwCQkJCVxuXAorCQkJbG9vcCAxYiIJCQkJOgorCQkgICAgIj1kIiAoX3BvcnRfKSwgIj1T IiAoYWRkciksICI9YyIgKGNvdW50KQk6CisJCSAgICAiMCIgKF9wb3J0XyksICIxIiAoYWRkciks ICIyIiAoY291bnQpCToKKwkJICAgICIlZWF4IiwgIm1lbW9yeSIsICJjYyIpOworI2VuZGlmCisJ fSBlbHNlIHsKKwkJYnVzX3NwYWNlX2hhbmRsZV90IF9wb3J0XyA9IGJzaCArIG9mZnNldDsKKyNp ZmRlZiBfX0dOVUNMSUtFX0FTTQorCQlfX2FzbSBfX3ZvbGF0aWxlKCIJCQkJXG5cCisJCQljbGQJ CQkJCVxuXAorCQkJcmVwbmUJCQkJCVxuXAorCQkJbW92c2wiCQkJCQk6CisJCSAgICAiPUQiIChf cG9ydF8pLCAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpCToKKwkJICAgICIwIiAoX3BvcnRfKSwg IjEiIChhZGRyKSwgIjIiIChjb3VudCkJOgorCQkgICAgIm1lbW9yeSIsICJjYyIpOworI2VuZGlm CisJfQorfQorCisjaWYgMAkvKiBDYXVzZSBhIGxpbmsgZXJyb3IgZm9yIGJ1c19zcGFjZV93cml0 ZV9yZWdpb25fOCAqLworI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzgJCQkJCVwKKwkJ CSEhISBidXNfc3BhY2Vfd3JpdGVfcmVnaW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgor CisvKgorICogV3JpdGUgdGhlIDEsIDIsIDQsIG9yIDggYnl0ZSB2YWx1ZSBgdmFsJyB0byBidXMg c3BhY2UgZGVzY3JpYmVkCisgKiBieSB0YWcvaGFuZGxlL29mZnNldCBgY291bnQnIHRpbWVzLgor ICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9zZXRfbXVsdGlfMShidXNfc3Bh Y2VfdGFnX3QgdGFnLAorCQkJCQkgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICBi dXNfc2l6ZV90IG9mZnNldCwKKwkJCQkJICAgdV9pbnQ4X3QgdmFsdWUsIHNpemVfdCBjb3VudCk7 CitzdGF0aWMgX19pbmxpbmUgdm9pZCBidXNfc3BhY2Vfc2V0X211bHRpXzIoYnVzX3NwYWNlX3Rh Z190IHRhZywKKwkJCQkJICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgYnVzX3Np emVfdCBvZmZzZXQsCisJCQkJCSAgIHVfaW50MTZfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KTsKK3N0 YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFjZV9zZXRfbXVsdGlfNChidXNfc3BhY2VfdGFnX3Qg dGFnLAorCQkJCQkgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkJCQkgICBidXNfc2l6ZV90 IG9mZnNldCwKKwkJCQkJICAgdV9pbnQzMl90IHZhbHVlLCBzaXplX3QgY291bnQpOworCitzdGF0 aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3NldF9tdWx0aV8xKGJ1c19zcGFjZV90YWdfdCB0 YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAgICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1 X2ludDhfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRy ID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQl3aGls ZSAoY291bnQtLSkKKwkJCW91dGIoYWRkciwgdmFsdWUpOworCWVsc2UKKwkJd2hpbGUgKGNvdW50 LS0pCisJCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGFkZHIpID0gdmFsdWU7Cit9CisKK3N0YXRp YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X211bHRpXzIoYnVzX3NwYWNlX3RhZ190IHRh ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9p bnQxNl90IHZhbHVlLCBzaXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIg PSBic2ggKyBvZmZzZXQ7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCXdoaWxl IChjb3VudC0tKQorCQkJb3V0dyhhZGRyLCB2YWx1ZSk7CisJZWxzZQorCQl3aGlsZSAoY291bnQt LSkKKwkJCSoodm9sYXRpbGUgdV9pbnQxNl90ICopKGFkZHIpID0gdmFsdWU7Cit9CisKK3N0YXRp YyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X211bHRpXzQoYnVzX3NwYWNlX3RhZ190IHRh ZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKwkJICAgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVf aW50MzJfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRy ID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVTX1NQQUNFX0lPKQorCQl3aGls ZSAoY291bnQtLSkKKwkJCW91dGwoYWRkciwgdmFsdWUpOworCWVsc2UKKwkJd2hpbGUgKGNvdW50 LS0pCisJCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyKSA9IHZhbHVlOworfQorCisjaWYg MAkvKiBDYXVzZSBhIGxpbmsgZXJyb3IgZm9yIGJ1c19zcGFjZV9zZXRfbXVsdGlfOCAqLworI2Rl ZmluZQlidXNfc3BhY2Vfc2V0X211bHRpXzggISEhIGJ1c19zcGFjZV9zZXRfbXVsdGlfOCB1bmlt cGxlbWVudGVkICEhIQorI2VuZGlmCisKKy8qCisgKiBXcml0ZSBgY291bnQnIDEsIDIsIDQsIG9y IDggYnl0ZSB2YWx1ZSBgdmFsJyB0byBidXMgc3BhY2UgZGVzY3JpYmVkCisgKiBieSB0YWcvaGFu ZGxlIHN0YXJ0aW5nIGF0IGBvZmZzZXQnLgorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1 c19zcGFjZV9zZXRfcmVnaW9uXzEoYnVzX3NwYWNlX3RhZ190IHRhZywKKwkJCQkJICAgIGJ1c19z cGFjZV9oYW5kbGVfdCBic2gsCisJCQkJCSAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQ4X3Qg dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVz X3NwYWNlX3NldF9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAgYnVzX3Nw YWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDE2X3Qg dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworc3RhdGljIF9faW5saW5lIHZvaWQgYnVz X3NwYWNlX3NldF9yZWdpb25fNChidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJCQkgICAgYnVzX3Nw YWNlX2hhbmRsZV90IGJzaCwKKwkJCQkJICAgIGJ1c19zaXplX3Qgb2Zmc2V0LCB1X2ludDMyX3Qg dmFsdWUsCisJCQkJCSAgICBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAor YnVzX3NwYWNlX3NldF9yZWdpb25fMShidXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFu ZGxlX3QgYnNoLAorCQkgICAgICAgYnVzX3NpemVfdCBvZmZzZXQsIHVfaW50OF90IHZhbHVlLCBz aXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIgPSBic2ggKyBvZmZzZXQ7 CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWZvciAoOyBjb3VudCAhPSAwOyBj b3VudC0tLCBhZGRyKyspCisJCQlvdXRiKGFkZHIsIHZhbHVlKTsKKwllbHNlCisJCWZvciAoOyBj b3VudCAhPSAwOyBjb3VudC0tLCBhZGRyKyspCisJCQkqKHZvbGF0aWxlIHVfaW50OF90ICopKGFk ZHIpID0gdmFsdWU7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitidXNfc3BhY2Vfc2V0X3Jl Z2lvbl8yKGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gsCisJCSAg ICAgICBidXNfc2l6ZV90IG9mZnNldCwgdV9pbnQxNl90IHZhbHVlLCBzaXplX3QgY291bnQpCit7 CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIgPSBic2ggKyBvZmZzZXQ7CisKKwlpZiAodGFnID09 IFg4Nl9CVVNfU1BBQ0VfSU8pCisJCWZvciAoOyBjb3VudCAhPSAwOyBjb3VudC0tLCBhZGRyICs9 IDIpCisJCQlvdXR3KGFkZHIsIHZhbHVlKTsKKwllbHNlCisJCWZvciAoOyBjb3VudCAhPSAwOyBj b3VudC0tLCBhZGRyICs9IDIpCisJCQkqKHZvbGF0aWxlIHVfaW50MTZfdCAqKShhZGRyKSA9IHZh bHVlOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX3NldF9yZWdpb25fNChi dXNfc3BhY2VfdGFnX3QgdGFnLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoLAorCQkgICAgICAgYnVz X3NpemVfdCBvZmZzZXQsIHVfaW50MzJfdCB2YWx1ZSwgc2l6ZV90IGNvdW50KQoreworCWJ1c19z cGFjZV9oYW5kbGVfdCBhZGRyID0gYnNoICsgb2Zmc2V0OworCisJaWYgKHRhZyA9PSBYODZfQlVT X1NQQUNFX0lPKQorCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkciArPSA0KQorCQkJ b3V0bChhZGRyLCB2YWx1ZSk7CisJZWxzZQorCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwg YWRkciArPSA0KQorCQkJKih2b2xhdGlsZSB1X2ludDMyX3QgKikoYWRkcikgPSB2YWx1ZTsKK30K KworI2lmIDAJLyogQ2F1c2UgYSBsaW5rIGVycm9yIGZvciBidXNfc3BhY2Vfc2V0X3JlZ2lvbl84 ICovCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfcmVnaW9uXzgJISEhIGJ1c19zcGFjZV9zZXRfcmVn aW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgorCisvKgorICogQ29weSBgY291bnQnIDEs IDIsIDQsIG9yIDggYnl0ZSB2YWx1ZXMgZnJvbSBidXMgc3BhY2Ugc3RhcnRpbmcKKyAqIGF0IHRh Zy9ic2gxL29mZjEgdG8gYnVzIHNwYWNlIHN0YXJ0aW5nIGF0IHRhZy9ic2gyL29mZjIuCisgKi8K Kworc3RhdGljIF9faW5saW5lIHZvaWQgYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzEoYnVzX3NwYWNl X3RhZ190IHRhZywKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMSwKKwkJCQkJICAg ICBidXNfc2l6ZV90IG9mZjEsCisJCQkJCSAgICAgYnVzX3NwYWNlX2hhbmRsZV90IGJzaDIsCisJ CQkJCSAgICAgYnVzX3NpemVfdCBvZmYyLCBzaXplX3QgY291bnQpOworCitzdGF0aWMgX19pbmxp bmUgdm9pZCBidXNfc3BhY2VfY29weV9yZWdpb25fMihidXNfc3BhY2VfdGFnX3QgdGFnLAorCQkJ CQkgICAgIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2Zm MSwKKwkJCQkJICAgICBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCQkJICAgICBidXNfc2l6 ZV90IG9mZjIsIHNpemVfdCBjb3VudCk7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIGJ1c19zcGFj ZV9jb3B5X3JlZ2lvbl80KGJ1c19zcGFjZV90YWdfdCB0YWcsCisJCQkJCSAgICAgYnVzX3NwYWNl X2hhbmRsZV90IGJzaDEsCisJCQkJCSAgICAgYnVzX3NpemVfdCBvZmYxLAorCQkJCQkgICAgIGJ1 c19zcGFjZV9oYW5kbGVfdCBic2gyLAorCQkJCQkgICAgIGJ1c19zaXplX3Qgb2ZmMiwgc2l6ZV90 IGNvdW50KTsKKworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9jb3B5X3JlZ2lvbl8x KGJ1c19zcGFjZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJYnVzX3Np emVfdCBvZmYxLCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCWJ1c19zaXplX3Qgb2ZmMiwg c2l6ZV90IGNvdW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMSA9IGJzaDEgKyBvZmYx OworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMiA9IGJzaDIgKyBvZmYyOworCisJaWYgKHRhZyA9 PSBYODZfQlVTX1NQQUNFX0lPKSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikgeworCQkJLyogc3Jj IGFmdGVyIGRlc3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50ICE9IDA7IGNvdW50 LS0sIGFkZHIxKyssIGFkZHIyKyspCisJCQkJb3V0YihhZGRyMiwgaW5iKGFkZHIxKSk7CisJCX0g ZWxzZSB7CisJCQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAo YWRkcjEgKz0gKGNvdW50IC0gMSksIGFkZHIyICs9IChjb3VudCAtIDEpOworCQkJICAgIGNvdW50 ICE9IDA7IGNvdW50LS0sIGFkZHIxLS0sIGFkZHIyLS0pCisJCQkJb3V0YihhZGRyMiwgaW5iKGFk ZHIxKSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYWRkcjEgPj0gYWRkcjIpIHsKKwkJCS8qIHNy YyBhZnRlciBkZXN0OiBjb3B5IGZvcndhcmQgKi8KKwkJCWZvciAoOyBjb3VudCAhPSAwOyBjb3Vu dC0tLCBhZGRyMSsrLCBhZGRyMisrKQorCQkJCSoodm9sYXRpbGUgdV9pbnQ4X3QgKikoYWRkcjIp ID0KKwkJCQkgICAgKih2b2xhdGlsZSB1X2ludDhfdCAqKShhZGRyMSk7CisJCX0gZWxzZSB7CisJ CQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRkcjEgKz0g KGNvdW50IC0gMSksIGFkZHIyICs9IChjb3VudCAtIDEpOworCQkJICAgIGNvdW50ICE9IDA7IGNv dW50LS0sIGFkZHIxLS0sIGFkZHIyLS0pCisJCQkJKih2b2xhdGlsZSB1X2ludDhfdCAqKShhZGRy MikgPQorCQkJCSAgICAqKHZvbGF0aWxlIHVfaW50OF90ICopKGFkZHIxKTsKKwkJfQorCX0KK30K Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2J1c19zcGFjZV9jb3B5X3JlZ2lvbl8yKGJ1c19zcGFj ZV90YWdfdCB0YWcsIGJ1c19zcGFjZV9oYW5kbGVfdCBic2gxLAorCQkJYnVzX3NpemVfdCBvZmYx LCBidXNfc3BhY2VfaGFuZGxlX3QgYnNoMiwKKwkJCWJ1c19zaXplX3Qgb2ZmMiwgc2l6ZV90IGNv dW50KQoreworCWJ1c19zcGFjZV9oYW5kbGVfdCBhZGRyMSA9IGJzaDEgKyBvZmYxOworCWJ1c19z cGFjZV9oYW5kbGVfdCBhZGRyMiA9IGJzaDIgKyBvZmYyOworCisJaWYgKHRhZyA9PSBYODZfQlVT X1NQQUNFX0lPKSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikgeworCQkJLyogc3JjIGFmdGVyIGRl c3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50ICE9IDA7IGNvdW50LS0sIGFkZHIx ICs9IDIsIGFkZHIyICs9IDIpCisJCQkJb3V0dyhhZGRyMiwgaW53KGFkZHIxKSk7CisJCX0gZWxz ZSB7CisJCQkvKiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRk cjEgKz0gMiAqIChjb3VudCAtIDEpLCBhZGRyMiArPSAyICogKGNvdW50IC0gMSk7CisJCQkgICAg Y291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEgLT0gMiwgYWRkcjIgLT0gMikKKwkJCQlvdXR3KGFk ZHIyLCBpbncoYWRkcjEpKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhZGRyMSA+PSBhZGRyMikg eworCQkJLyogc3JjIGFmdGVyIGRlc3Q6IGNvcHkgZm9yd2FyZCAqLworCQkJZm9yICg7IGNvdW50 ICE9IDA7IGNvdW50LS0sIGFkZHIxICs9IDIsIGFkZHIyICs9IDIpCisJCQkJKih2b2xhdGlsZSB1 X2ludDE2X3QgKikoYWRkcjIpID0KKwkJCQkgICAgKih2b2xhdGlsZSB1X2ludDE2X3QgKikoYWRk cjEpOworCQl9IGVsc2UgeworCQkJLyogZGVzdCBhZnRlciBzcmM6IGNvcHkgYmFja3dhcmRzICov CisJCQlmb3IgKGFkZHIxICs9IDIgKiAoY291bnQgLSAxKSwgYWRkcjIgKz0gMiAqIChjb3VudCAt IDEpOworCQkJICAgIGNvdW50ICE9IDA7IGNvdW50LS0sIGFkZHIxIC09IDIsIGFkZHIyIC09IDIp CisJCQkJKih2b2xhdGlsZSB1X2ludDE2X3QgKikoYWRkcjIpID0KKwkJCQkgICAgKih2b2xhdGls ZSB1X2ludDE2X3QgKikoYWRkcjEpOworCQl9CisJfQorfQorCitzdGF0aWMgX19pbmxpbmUgdm9p ZAorYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzQoYnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNl X2hhbmRsZV90IGJzaDEsCisJCQlidXNfc2l6ZV90IG9mZjEsIGJ1c19zcGFjZV9oYW5kbGVfdCBi c2gyLAorCQkJYnVzX3NpemVfdCBvZmYyLCBzaXplX3QgY291bnQpCit7CisJYnVzX3NwYWNlX2hh bmRsZV90IGFkZHIxID0gYnNoMSArIG9mZjE7CisJYnVzX3NwYWNlX2hhbmRsZV90IGFkZHIyID0g YnNoMiArIG9mZjI7CisKKwlpZiAodGFnID09IFg4Nl9CVVNfU1BBQ0VfSU8pIHsKKwkJaWYgKGFk ZHIxID49IGFkZHIyKSB7CisJCQkvKiBzcmMgYWZ0ZXIgZGVzdDogY29weSBmb3J3YXJkICovCisJ CQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEgKz0gNCwgYWRkcjIgKz0gNCkKKwkJ CQlvdXRsKGFkZHIyLCBpbmwoYWRkcjEpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRlc3QgYWZ0ZXIg c3JjOiBjb3B5IGJhY2t3YXJkcyAqLworCQkJZm9yIChhZGRyMSArPSA0ICogKGNvdW50IC0gMSks IGFkZHIyICs9IDQgKiAoY291bnQgLSAxKTsKKwkJCSAgICBjb3VudCAhPSAwOyBjb3VudC0tLCBh ZGRyMSAtPSA0LCBhZGRyMiAtPSA0KQorCQkJCW91dGwoYWRkcjIsIGlubChhZGRyMSkpOworCQl9 CisJfSBlbHNlIHsKKwkJaWYgKGFkZHIxID49IGFkZHIyKSB7CisJCQkvKiBzcmMgYWZ0ZXIgZGVz dDogY29weSBmb3J3YXJkICovCisJCQlmb3IgKDsgY291bnQgIT0gMDsgY291bnQtLSwgYWRkcjEg Kz0gNCwgYWRkcjIgKz0gNCkKKwkJCQkqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMikgPQor CQkJCSAgICAqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMSk7CisJCX0gZWxzZSB7CisJCQkv KiBkZXN0IGFmdGVyIHNyYzogY29weSBiYWNrd2FyZHMgKi8KKwkJCWZvciAoYWRkcjEgKz0gNCAq IChjb3VudCAtIDEpLCBhZGRyMiArPSA0ICogKGNvdW50IC0gMSk7CisJCQkgICAgY291bnQgIT0g MDsgY291bnQtLSwgYWRkcjEgLT0gNCwgYWRkcjIgLT0gNCkKKwkJCQkqKHZvbGF0aWxlIHVfaW50 MzJfdCAqKShhZGRyMikgPQorCQkJCSAgICAqKHZvbGF0aWxlIHVfaW50MzJfdCAqKShhZGRyMSk7 CisJCX0KKwl9Cit9CisKKyNpZiAwCS8qIENhdXNlIGEgbGluayBlcnJvciBmb3IgYnVzX3NwYWNl X2NvcHlfOCAqLworI2RlZmluZQlidXNfc3BhY2VfY29weV9yZWdpb25fOAkhISEgYnVzX3NwYWNl X2NvcHlfcmVnaW9uXzggdW5pbXBsZW1lbnRlZCAhISEKKyNlbmRpZgorCisvKgorICogQnVzIHJl YWQvd3JpdGUgYmFycmllciBtZXRob2RzLgorICoKKyAqCXZvaWQgYnVzX3NwYWNlX2JhcnJpZXIo YnVzX3NwYWNlX3RhZ190IHRhZywgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCwKKyAqCQkJICAgICAg IGJ1c19zaXplX3Qgb2Zmc2V0LCBidXNfc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKyAqCisgKgor ICogTm90ZSB0aGF0IEJVU19TUEFDRV9CQVJSSUVSX1dSSVRFIGRvZXNuJ3QgZG8gYW55dGhpbmcg b3RoZXIgdGhhbgorICogcHJldmVudCByZW9yZGVyaW5nIGJ5IHRoZSBjb21waWxlcjsgYWxsIElu dGVsIHg4NiBwcm9jZXNzb3JzIGN1cnJlbnRseQorICogcmV0aXJlIG9wZXJhdGlvbnMgb3V0c2lk ZSB0aGUgQ1BVIGluIHByb2dyYW0gb3JkZXIuCisgKi8KKyNkZWZpbmUJQlVTX1NQQUNFX0JBUlJJ RVJfUkVBRAkweDAxCQkvKiBmb3JjZSByZWFkIGJhcnJpZXIgKi8KKyNkZWZpbmUJQlVTX1NQQUNF X0JBUlJJRVJfV1JJVEUJMHgwMgkJLyogZm9yY2Ugd3JpdGUgYmFycmllciAqLworCitzdGF0aWMg X19pbmxpbmUgdm9pZAorYnVzX3NwYWNlX2JhcnJpZXIoYnVzX3NwYWNlX3RhZ190IHRhZyBfX3Vu dXNlZCwgYnVzX3NwYWNlX2hhbmRsZV90IGJzaCBfX3VudXNlZCwKKwkJICBidXNfc2l6ZV90IG9m ZnNldCBfX3VudXNlZCwgYnVzX3NpemVfdCBsZW4gX191bnVzZWQsIGludCBmbGFncykKK3sKKyNp ZmRlZiBfX0dOVUNMSUtFX0FTTQorCWlmIChmbGFncyAmIEJVU19TUEFDRV9CQVJSSUVSX1JFQUQp CisjaWZkZWYgX19hbWQ2NF9fCisJCV9fYXNtIF9fdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCgl JXJzcCkiIDogOiA6ICJtZW1vcnkiKTsKKyNlbHNlCisJCV9fYXNtIF9fdm9sYXRpbGUoImxvY2s7 IGFkZGwgJDAsMCglJWVzcCkiIDogOiA6ICJtZW1vcnkiKTsKKyNlbmRpZgorCWVsc2UKKwkJX19j b21waWxlcl9tZW1iYXIoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgQlVTX1NQQUNFX05PX0xFR0FD WQorI3VuZGVmIGluYgorI3VuZGVmIG91dGIKKyNkZWZpbmUgaW5iKGEpIGNvbXBpbGVyX2Vycm9y CisjZGVmaW5lIGludyhhKSBjb21waWxlcl9lcnJvcgorI2RlZmluZSBpbmwoYSkgY29tcGlsZXJf ZXJyb3IKKyNkZWZpbmUgb3V0YihhLCBiKSBjb21waWxlcl9lcnJvcgorI2RlZmluZSBvdXR3KGEs IGIpIGNvbXBpbGVyX2Vycm9yCisjZGVmaW5lIG91dGwoYSwgYikgY29tcGlsZXJfZXJyb3IKKyNl bmRpZgorCisjaW5jbHVkZSA8bWFjaGluZS9idXNfZG1hLmg+CisKKy8qCisgKiBTdHJlYW0gYWNj ZXNzZXMgYXJlIHRoZSBzYW1lIGFzIG5vcm1hbCBhY2Nlc3NlcyBvbiB4ODY7IHRoZXJlIGFyZSBu bworICogc3VwcG9ydGVkIGJ1cyBzeXN0ZW1zIHdpdGggYW4gZW5kaWFuZXNzIGRpZmZlcmVudCBm cm9tIHRoZSBob3N0IG9uZS4KKyAqLworI2RlZmluZQlidXNfc3BhY2VfcmVhZF9zdHJlYW1fMSh0 LCBoLCBvKQlidXNfc3BhY2VfcmVhZF8xKCh0KSwgKGgpLCAobykpCisjZGVmaW5lCWJ1c19zcGFj ZV9yZWFkX3N0cmVhbV8yKHQsIGgsIG8pCWJ1c19zcGFjZV9yZWFkXzIoKHQpLCAoaCksIChvKSkK KyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfc3RyZWFtXzQodCwgaCwgbykJYnVzX3NwYWNlX3JlYWRf NCgodCksIChoKSwgKG8pKQorCisjZGVmaW5lCWJ1c19zcGFjZV9yZWFkX211bHRpX3N0cmVhbV8x KHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVhZF9tdWx0aV8xKCh0KSwgKGgpLCAobyks IChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2VfcmVhZF9tdWx0aV9zdHJlYW1fMih0LCBoLCBv LCBhLCBjKSBcCisJYnVzX3NwYWNlX3JlYWRfbXVsdGlfMigodCksIChoKSwgKG8pLCAoYSksIChj KSkKKyNkZWZpbmUJYnVzX3NwYWNlX3JlYWRfbXVsdGlfc3RyZWFtXzQodCwgaCwgbywgYSwgYykg XAorCWJ1c19zcGFjZV9yZWFkX211bHRpXzQoKHQpLCAoaCksIChvKSwgKGEpLCAoYykpCisKKyNk ZWZpbmUJYnVzX3NwYWNlX3dyaXRlX3N0cmVhbV8xKHQsIGgsIG8sIHYpIFwKKwlidXNfc3BhY2Vf d3JpdGVfMSgodCksIChoKSwgKG8pLCAodikpCisjZGVmaW5lCWJ1c19zcGFjZV93cml0ZV9zdHJl YW1fMih0LCBoLCBvLCB2KSBcCisJYnVzX3NwYWNlX3dyaXRlXzIoKHQpLCAoaCksIChvKSwgKHYp KQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfc3RyZWFtXzQodCwgaCwgbywgdikgXAorCWJ1c19z cGFjZV93cml0ZV80KCh0KSwgKGgpLCAobyksICh2KSkKKworI2RlZmluZQlidXNfc3BhY2Vfd3Jp dGVfbXVsdGlfc3RyZWFtXzEodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0 aV8xKCh0KSwgKGgpLCAobyksIChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfbXVs dGlfc3RyZWFtXzIodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0aV8yKCh0 KSwgKGgpLCAobyksIChhKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVfbXVsdGlfc3Ry ZWFtXzQodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9tdWx0aV80KCh0KSwgKGgp LCAobyksIChhKSwgKGMpKQorCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfbXVsdGlfc3RyZWFtXzEo dCwgaCwgbywgdiwgYykgXAorCWJ1c19zcGFjZV9zZXRfbXVsdGlfMSgodCksIChoKSwgKG8pLCAo diksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3NldF9tdWx0aV9zdHJlYW1fMih0LCBoLCBvLCB2 LCBjKSBcCisJYnVzX3NwYWNlX3NldF9tdWx0aV8yKCh0KSwgKGgpLCAobyksICh2KSwgKGMpKQor I2RlZmluZQlidXNfc3BhY2Vfc2V0X211bHRpX3N0cmVhbV80KHQsIGgsIG8sIHYsIGMpIFwKKwli dXNfc3BhY2Vfc2V0X211bHRpXzQoKHQpLCAoaCksIChvKSwgKHYpLCAoYykpCisKKyNkZWZpbmUJ YnVzX3NwYWNlX3JlYWRfcmVnaW9uX3N0cmVhbV8xKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3Bh Y2VfcmVhZF9yZWdpb25fMSgodCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3Nw YWNlX3JlYWRfcmVnaW9uX3N0cmVhbV8yKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVh ZF9yZWdpb25fMigodCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3Jl YWRfcmVnaW9uX3N0cmVhbV80KHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2VfcmVhZF9yZWdp b25fNCgodCksIChoKSwgKG8pLCAoYSksIChjKSkKKworI2RlZmluZQlidXNfc3BhY2Vfd3JpdGVf cmVnaW9uX3N0cmVhbV8xKHQsIGgsIG8sIGEsIGMpIFwKKwlidXNfc3BhY2Vfd3JpdGVfcmVnaW9u XzEoKHQpLCAoaCksIChvKSwgKGEpLCAoYykpCisjZGVmaW5lCWJ1c19zcGFjZV93cml0ZV9yZWdp b25fc3RyZWFtXzIodCwgaCwgbywgYSwgYykgXAorCWJ1c19zcGFjZV93cml0ZV9yZWdpb25fMigo dCksIChoKSwgKG8pLCAoYSksIChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl9z dHJlYW1fNCh0LCBoLCBvLCBhLCBjKSBcCisJYnVzX3NwYWNlX3dyaXRlX3JlZ2lvbl80KCh0KSwg KGgpLCAobyksIChhKSwgKGMpKQorCisjZGVmaW5lCWJ1c19zcGFjZV9zZXRfcmVnaW9uX3N0cmVh bV8xKHQsIGgsIG8sIHYsIGMpIFwKKwlidXNfc3BhY2Vfc2V0X3JlZ2lvbl8xKCh0KSwgKGgpLCAo byksICh2KSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2Vfc2V0X3JlZ2lvbl9zdHJlYW1fMih0LCBo LCBvLCB2LCBjKSBcCisJYnVzX3NwYWNlX3NldF9yZWdpb25fMigodCksIChoKSwgKG8pLCAodiks IChjKSkKKyNkZWZpbmUJYnVzX3NwYWNlX3NldF9yZWdpb25fc3RyZWFtXzQodCwgaCwgbywgdiwg YykgXAorCWJ1c19zcGFjZV9zZXRfcmVnaW9uXzQoKHQpLCAoaCksIChvKSwgKHYpLCAoYykpCisK KyNkZWZpbmUJYnVzX3NwYWNlX2NvcHlfcmVnaW9uX3N0cmVhbV8xKHQsIGgxLCBvMSwgaDIsIG8y LCBjKSBcCisJYnVzX3NwYWNlX2NvcHlfcmVnaW9uXzEoKHQpLCAoaDEpLCAobzEpLCAoaDIpLCAo bzIpLCAoYykpCisjZGVmaW5lCWJ1c19zcGFjZV9jb3B5X3JlZ2lvbl9zdHJlYW1fMih0LCBoMSwg bzEsIGgyLCBvMiwgYykgXAorCWJ1c19zcGFjZV9jb3B5X3JlZ2lvbl8yKCh0KSwgKGgxKSwgKG8x KSwgKGgyKSwgKG8yKSwgKGMpKQorI2RlZmluZQlidXNfc3BhY2VfY29weV9yZWdpb25fc3RyZWFt XzQodCwgaDEsIG8xLCBoMiwgbzIsIGMpIFwKKwlidXNfc3BhY2VfY29weV9yZWdpb25fNCgodCks IChoMSksIChvMSksIChoMiksIChvMiksIChjKSkKKworI2VuZGlmIC8qIF9YODZfQlVTX0hfICov CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2J1c2RtYV9pbXBs LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9idXNkbWFfaW1wbC5oCi0tLSB1c3Iv c3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvYnVzZG1hX2ltcGwuaAkxOTcwLTAxLTAxIDAxOjAw OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9i dXNkbWFfaW1wbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg KzEsOTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBGcmVlQlNEIEZvdW5kYXRp b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2 ZWxvcGVkIGJ5IEtvbnN0YW50aW4gQmVsb3Vzb3YgPGtpYkBGcmVlQlNELm9yZz4KKyAqIHVuZGVy IHNwb25zb3JzaGlwIGZyb20gdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBy ZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvYnVzZG1hX2ltcGwuaCAyNTczMDggMjAxMy0xMC0y OSAwNzoyNTo1NFoga2liICQKKyAqLworCisjaWZuZGVmCV9fWDg2X0JVU0RNQV9JTVBMX0gKKyNk ZWZpbmUJX19YODZfQlVTRE1BX0lNUExfSAorCitzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uIHsK KwlzdHJ1Y3QgYnVzX2RtYV9pbXBsICppbXBsOworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24g KnBhcmVudDsKKwlidXNfc2l6ZV90CSAgYWxpZ25tZW50OworCWJ1c19hZGRyX3QJICBib3VuZGFy eTsKKwlidXNfYWRkcl90CSAgbG93YWRkcjsKKwlidXNfYWRkcl90CSAgaGlnaGFkZHI7CisJYnVz X2RtYV9maWx0ZXJfdCAqZmlsdGVyOworCXZvaWQJCSAqZmlsdGVyYXJnOworCWJ1c19zaXplX3QJ ICBtYXhzaXplOworCXVfaW50CQkgIG5zZWdtZW50czsKKwlidXNfc2l6ZV90CSAgbWF4c2Vnc3o7 CisJaW50CQkgIGZsYWdzOworCWJ1c19kbWFfbG9ja190CSAqbG9ja2Z1bmM7CisJdm9pZAkJICps b2NrZnVuY2FyZzsKKwlpbnQJCSAgcmVmX2NvdW50OworfTsKKworc3RydWN0IGJ1c19kbWFfaW1w bCB7CisJaW50ICgqdGFnX2NyZWF0ZSkoYnVzX2RtYV90YWdfdCBwYXJlbnQsCisJICAgIGJ1c19z aXplX3QgYWxpZ25tZW50LCBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIs CisJICAgIGJ1c19hZGRyX3QgaGlnaGFkZHIsIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwKKwkg ICAgdm9pZCAqZmlsdGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsIGludCBuc2VnbWVudHMsCisJ ICAgIGJ1c19zaXplX3QgbWF4c2Vnc3osIGludCBmbGFncywgYnVzX2RtYV9sb2NrX3QgKmxvY2tm dW5jLAorCSAgICB2b2lkICpsb2NrZnVuY2FyZywgYnVzX2RtYV90YWdfdCAqZG1hdCk7CisJaW50 ICgqdGFnX2Rlc3Ryb3kpKGJ1c19kbWFfdGFnX3QgZG1hdCk7CisJaW50ICgqbWFwX2NyZWF0ZSko YnVzX2RtYV90YWdfdCBkbWF0LCBpbnQgZmxhZ3MsIGJ1c19kbWFtYXBfdCAqbWFwcCk7CisJaW50 ICgqbWFwX2Rlc3Ryb3kpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCk7CisJ aW50ICgqbWVtX2FsbG9jKShidXNfZG1hX3RhZ190IGRtYXQsIHZvaWQqKiB2YWRkciwgaW50IGZs YWdzLAorCSAgICBidXNfZG1hbWFwX3QgKm1hcHApOworCXZvaWQgKCptZW1fZnJlZSkoYnVzX2Rt YV90YWdfdCBkbWF0LCB2b2lkICp2YWRkciwgYnVzX2RtYW1hcF90IG1hcCk7CisJaW50ICgqbG9h ZF9tYSkoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICBzdHJ1Y3Qg dm1fcGFnZSAqKm1hLCBidXNfc2l6ZV90IHRsZW4sIGludCBtYV9vZmZzLCBpbnQgZmxhZ3MsCisJ ICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgKnNlZ3ApOworCWludCAoKmxvYWRfcGh5 cykoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICB2bV9wYWRkcl90 IGJ1ZiwgYnVzX3NpemVfdCBidWZsZW4sIGludCBmbGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50 X3QgKnNlZ3MsIGludCAqc2VncCk7CisJaW50ICgqbG9hZF9idWZmZXIpKGJ1c19kbWFfdGFnX3Qg ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAgdm9pZCAqYnVmLCBidXNfc2l6ZV90IGJ1Zmxl biwgcG1hcF90IHBtYXAsIGludCBmbGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3Ms IGludCAqc2VncCk7CisJdm9pZCAoKm1hcF93YWl0b2spKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVz X2RtYW1hcF90IG1hcCwKKwkgICAgc3RydWN0IG1lbWRlc2MgKm1lbSwgYnVzX2RtYW1hcF9jYWxs YmFja190ICpjYWxsYmFjaywKKwkgICAgdm9pZCAqY2FsbGJhY2tfYXJnKTsKKwlidXNfZG1hX3Nl Z21lbnRfdCAqKCptYXBfY29tcGxldGUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90 IG1hcCwKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9y KTsKKwl2b2lkICgqbWFwX3VubG9hZCkoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3Qg bWFwKTsKKwl2b2lkICgqbWFwX3N5bmMpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90 IG1hcCwKKwkgICAgYnVzX2RtYXN5bmNfb3BfdCBvcCk7Cit9OworCit2b2lkIGJ1c19kbWFfZGZs dF9sb2NrKHZvaWQgKmFyZywgYnVzX2RtYV9sb2NrX29wX3Qgb3ApOworaW50IGJ1c19kbWFfcnVu X2ZpbHRlcihzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICpkbWF0LCBidXNfYWRkcl90IHBhZGRy KTsKK2ludCBjb21tb25fYnVzX2RtYV90YWdfY3JlYXRlKHN0cnVjdCBidXNfZG1hX3RhZ19jb21t b24gKnBhcmVudCwKKyAgICBidXNfc2l6ZV90IGFsaWdubWVudCwKKyAgICBidXNfYWRkcl90IGJv dW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIsIGJ1c19hZGRyX3QgaGlnaGFkZHIsCisgICAgYnVz X2RtYV9maWx0ZXJfdCAqZmlsdGVyLCB2b2lkICpmaWx0ZXJhcmcsIGJ1c19zaXplX3QgbWF4c2l6 ZSwKKyAgICBpbnQgbnNlZ21lbnRzLCBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsIGJ1 c19kbWFfbG9ja190ICpsb2NrZnVuYywKKyAgICB2b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6 LCB2b2lkICoqZG1hdCk7CisKK2V4dGVybiBzdHJ1Y3QgYnVzX2RtYV9pbXBsIGJ1c19kbWFfYm91 bmNlX2ltcGw7CisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL3g4Ni9jcHV0eXBlcy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvY3B1dHlw ZXMuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2NwdXR5cGVzLmgJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC94ODYvY3B1dHlwZXMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApA QCAtMCwwICsxLDU0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MyBDaHJpc3RvcGhlciBH LiBEZW1ldHJpb3UKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUg bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxl bmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvY3B1dHlwZXMuaCAyOTI2NjggMjAxNS0xMi0yMyAyMTo0 MTo0MlogamhiICQKKyAqLworCisjaWZuZGVmIF9YODZfQ1BVVFlQRVNfSF8KKyNkZWZpbmUJX1g4 Nl9DUFVUWVBFU19IXworCisvKgorICogVmVuZG9ycyBvZiBwcm9jZXNzb3IuCisgKi8KKyNkZWZp bmUJQ1BVX1ZFTkRPUl9OU0MJCTB4MTAwYgkJLyogTlNDICovCisjZGVmaW5lCUNQVV9WRU5ET1Jf SUJNCQkweDEwMTQJCS8qIElCTSAqLworI2RlZmluZQlDUFVfVkVORE9SX0FNRAkJMHgxMDIyCQkv KiBBTUQgKi8KKyNkZWZpbmUJQ1BVX1ZFTkRPUl9TSVMJCTB4MTAzOQkJLyogU2lTICovCisjZGVm aW5lCUNQVV9WRU5ET1JfVU1DCQkweDEwNjAJCS8qIFVNQyAqLworI2RlZmluZQlDUFVfVkVORE9S X05FWEdFTgkweDEwNzQJCS8qIE5leGdlbiAqLworI2RlZmluZQlDUFVfVkVORE9SX0NZUklYCTB4 MTA3OAkJLyogQ3lyaXggKi8KKyNkZWZpbmUJQ1BVX1ZFTkRPUl9JRFQJCTB4MTExZAkJLyogQ2Vu dGF1ci9JRFQvVklBICovCisjZGVmaW5lCUNQVV9WRU5ET1JfVFJBTlNNRVRBCTB4MTI3OQkJLyog VHJhbnNtZXRhICovCisjZGVmaW5lCUNQVV9WRU5ET1JfSU5URUwJMHg4MDg2CQkvKiBJbnRlbCAq LworI2RlZmluZQlDUFVfVkVORE9SX1JJU0UJCTB4ZGVhZDJiYWQJLyogUmlzZSAqLworI2RlZmlu ZQlDUFVfVkVORE9SX0NFTlRBVVIJQ1BVX1ZFTkRPUl9JRFQKKworI2lmbmRlZiBMT0NPUkUKK2V4 dGVybiBpbnQJY3B1OworZXh0ZXJuIGludAljcHVfY2xhc3M7CisjZW5kaWYKKworI2VuZGlmIC8q ICFfWDg2X0NQVVRZUEVTX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAveDg2L2R1bXAuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2R1bXAuaAot LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2R1bXAuaAkxOTcwLTAxLTAxIDAxOjAw OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9k dW1wLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw4NyBA QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgRU1DIENvcnAuCisgKiBBdXRob3I6IENvbnJh ZCBNZXllciA8Y29ucmFkLm1leWVyQGlzaWxvbi5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor ICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvZHVtcC5oIDI3Njc3 MiAyMDE1LTAxLTA3IDAxOjAxOjM5WiBtYXJraiAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9E VU1QX0hfCisjZGVmaW5lCV9NQUNISU5FX0RVTVBfSF8KKworI2lmZGVmIF9fYW1kNjRfXworI2Rl ZmluZQlLRVJORUxEVU1QX0FSQ0hfVkVSU0lPTglLRVJORUxEVU1QX0FNRDY0X1ZFUlNJT04KKyNk ZWZpbmUJRU1fVkFMVUUJCUVNX1g4Nl82NAorI2Vsc2UKKyNkZWZpbmUJS0VSTkVMRFVNUF9BUkNI X1ZFUlNJT04JS0VSTkVMRFVNUF9JMzg2X1ZFUlNJT04KKyNkZWZpbmUJRU1fVkFMVUUJCUVNXzM4 NgorI2VuZGlmCisKKy8qIDIwIHBoeXNfYXZhaWwgZW50cnkgcGFpcnMgY29ycmVzcG9uZCB0byAx MCBwYSdzICovCisjZGVmaW5lCURVTVBTWVNfTURfUEFfTlBBSVJTCTEwCisjZGVmaW5lCURVTVBT WVNfTlVNX0FVWF9IRFJTCTAKKworc3RhdGljIGlubGluZSB2b2lkCitkdW1wc3lzX3BhX2luaXQo dm9pZCkKK3sKKworCWR1bXBzeXNfZ2VuX3BhX2luaXQoKTsKK30KKworc3RhdGljIGlubGluZSBz dHJ1Y3QgZHVtcF9wYSAqCitkdW1wc3lzX3BhX25leHQoc3RydWN0IGR1bXBfcGEgKnApCit7CisK KwlyZXR1cm4gKGR1bXBzeXNfZ2VuX3BhX25leHQocCkpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQKK2R1bXBzeXNfd2JpbnZfYWxsKHZvaWQpCit7CisKKwlkdW1wc3lzX2dlbl93Ymludl9hbGwo KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkdW1wc3lzX3VubWFwX2NodW5rKHZtX3BhZGRy X3QgcGEsIHNpemVfdCBzLCB2b2lkICp2YSkKK3sKKworCWR1bXBzeXNfZ2VuX3VubWFwX2NodW5r KHBhLCBzLCB2YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkdW1wc3lzX3dyaXRlX2F1eF9o ZWFkZXJzKHN0cnVjdCBkdW1wZXJpbmZvICpkaSkKK3sKKworCXJldHVybiAoZHVtcHN5c19nZW5f d3JpdGVfYXV4X2hlYWRlcnMoZGkpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2R1bXBzeXMo c3RydWN0IGR1bXBlcmluZm8gKmRpKQoreworCisJcmV0dXJuIChkdW1wc3lzX2dlbmVyaWMoZGkp KTsKK30KKworI2VuZGlmICAvKiAhX01BQ0hJTkVfRFVNUF9IXyAqLwpkaWZmIC11IC1yIC1OIHVz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9lbGYuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAveDg2L2VsZi5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZWxmLmgJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1 bGVzL25ldG1hcC94ODYvZWxmLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAK QEAgLTAsMCArMSwyMTUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcgSm9obiBE LiBQb2xzdHJhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5n LzExLjAvc3lzL3g4Ni9pbmNsdWRlL2VsZi5oIDI0NzA0NyAyMDEzLTAyLTIwIDE3OjM5OjUyWiBr aWIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfRUxGX0hfCisjZGVmaW5lCV9NQUNISU5FX0VM Rl9IXyAxCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NQUNISU5FX0VMRl9X QU5UXzMyQklUKQorCisvKgorICogRUxGIGRlZmluaXRpb25zIGZvciB0aGUgaTM4NiBhcmNoaXRl Y3R1cmUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9lbGYzMi5oPgkvKiBEZWZpbml0aW9ucyBjb21t b24gdG8gYWxsIDMyIGJpdCBhcmNoaXRlY3R1cmVzLiAqLworI2lmIGRlZmluZWQoX19FTEZfV09S RF9TSVpFKSAmJiBfX0VMRl9XT1JEX1NJWkUgPT0gNjQKKyNpbmNsdWRlIDxzeXMvZWxmNjQuaD4J LyogRGVmaW5pdGlvbnMgY29tbW9uIHRvIGFsbCA2NCBiaXQgYXJjaGl0ZWN0dXJlcy4gKi8KKyNl bmRpZgorCisjaWZuZGVmIF9fRUxGX1dPUkRfU0laRQorI2RlZmluZQlfX0VMRl9XT1JEX1NJWkUJ MzIJLyogVXNlZCBieSA8c3lzL2VsZl9nZW5lcmljLmg+ICovCisjZW5kaWYKKworI2luY2x1ZGUg PHN5cy9lbGZfZ2VuZXJpYy5oPgorCisjZGVmaW5lCUVMRl9BUkNICUVNXzM4NgorCisjZGVmaW5l CUVMRl9NQUNISU5FX09LKHgpICgoeCkgPT0gRU1fMzg2IHx8ICh4KSA9PSBFTV80ODYpCisKKy8q CisgKiBBdXhpbGlhcnkgdmVjdG9yIGVudHJpZXMgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gdG8g dGhlIGludGVycHJldGVyLgorICoKKyAqIFRoZSBpMzg2IHN1cHBsZW1lbnQgdG8gdGhlIFNWUjQg QUJJIHNwZWNpZmljYXRpb24gbmFtZXMgdGhpcyAiYXV4dl90IiwKKyAqIGJ1dCBQT1NJWCBsYXlz IGNsYWltIHRvIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoICJfdCIuCisgKi8KKwordHlwZWRlZiBz dHJ1Y3QgewkvKiBBdXhpbGlhcnkgdmVjdG9yIGVudHJ5IG9uIGluaXRpYWwgc3RhY2sgKi8KKwlp bnQJYV90eXBlOwkJCS8qIEVudHJ5IHR5cGUuICovCisJdW5pb24geworCQlsb25nCWFfdmFsOwkJ LyogSW50ZWdlciB2YWx1ZS4gKi8KKwkJdm9pZAkqYV9wdHI7CQkvKiBBZGRyZXNzLiAqLworCQl2 b2lkCSgqYV9mY24pKHZvaWQpOwkvKiBGdW5jdGlvbiBwb2ludGVyIChub3QgdXNlZCkuICovCisJ fSBhX3VuOworfSBFbGYzMl9BdXhpbmZvOworCisjaWYgX19FTEZfV09SRF9TSVpFID09IDY0Cisv KiBGYWtlIGZvciBhbWQ2NCBsb2FkZXIgc3VwcG9ydCAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWlu dCBmYWtlOworfSBFbGY2NF9BdXhpbmZvOworI2VuZGlmCisKK19fRWxmVHlwZShBdXhpbmZvKTsK KworLyogVmFsdWVzIGZvciBhX3R5cGUuICovCisjZGVmaW5lCUFUX05VTEwJCTAJLyogVGVybWlu YXRlcyB0aGUgdmVjdG9yLiAqLworI2RlZmluZQlBVF9JR05PUkUJMQkvKiBJZ25vcmVkIGVudHJ5 LiAqLworI2RlZmluZQlBVF9FWEVDRkQJMgkvKiBGaWxlIGRlc2NyaXB0b3Igb2YgcHJvZ3JhbSB0 byBsb2FkLiAqLworI2RlZmluZQlBVF9QSERSCQkzCS8qIFByb2dyYW0gaGVhZGVyIG9mIHByb2dy YW0gYWxyZWFkeSBsb2FkZWQuICovCisjZGVmaW5lCUFUX1BIRU5UCTQJLyogU2l6ZSBvZiBlYWNo IHByb2dyYW0gaGVhZGVyIGVudHJ5LiAqLworI2RlZmluZQlBVF9QSE5VTQk1CS8qIE51bWJlciBv ZiBwcm9ncmFtIGhlYWRlciBlbnRyaWVzLiAqLworI2RlZmluZQlBVF9QQUdFU1oJNgkvKiBQYWdl IHNpemUgaW4gYnl0ZXMuICovCisjZGVmaW5lCUFUX0JBU0UJCTcJLyogSW50ZXJwcmV0ZXIncyBi YXNlIGFkZHJlc3MuICovCisjZGVmaW5lCUFUX0ZMQUdTCTgJLyogRmxhZ3MgKHVudXNlZCBmb3Ig aTM4NikuICovCisjZGVmaW5lCUFUX0VOVFJZCTkJLyogV2hlcmUgaW50ZXJwcmV0ZXIgc2hvdWxk IHRyYW5zZmVyIGNvbnRyb2wuICovCisjZGVmaW5lCUFUX05PVEVMRgkxMAkvKiBQcm9ncmFtIGlz IG5vdCBFTEYgPz8gKi8KKyNkZWZpbmUJQVRfVUlECQkxMQkvKiBSZWFsIHVpZC4gKi8KKyNkZWZp bmUJQVRfRVVJRAkJMTIJLyogRWZmZWN0aXZlIHVpZC4gKi8KKyNkZWZpbmUJQVRfR0lECQkxMwkv KiBSZWFsIGdpZC4gKi8KKyNkZWZpbmUJQVRfRUdJRAkJMTQJLyogRWZmZWN0aXZlIGdpZC4gKi8K KyNkZWZpbmUJQVRfRVhFQ1BBVEgJMTUJLyogUGF0aCB0byB0aGUgZXhlY3V0YWJsZS4gKi8KKyNk ZWZpbmUJQVRfQ0FOQVJZCTE2CS8qIENhbmFyeSBmb3IgU1NQLiAqLworI2RlZmluZQlBVF9DQU5B UllMRU4JMTcJLyogTGVuZ3RoIG9mIHRoZSBjYW5hcnkuICovCisjZGVmaW5lCUFUX09TUkVMREFU RQkxOAkvKiBPU1JFTERBVEUuICovCisjZGVmaW5lCUFUX05DUFVTCTE5CS8qIE51bWJlciBvZiBD UFVzLiAqLworI2RlZmluZQlBVF9QQUdFU0laRVMJMjAJLyogUGFnZXNpemVzLiAqLworI2RlZmlu ZQlBVF9QQUdFU0laRVNMRU4JMjEJLyogTnVtYmVyIG9mIHBhZ2VzaXplcy4gKi8KKyNkZWZpbmUJ QVRfVElNRUtFRVAJMjIJLyogUG9pbnRlciB0byB0aW1laGFuZHMuICovCisjZGVmaW5lCUFUX1NU QUNLUFJPVAkyMwkvKiBJbml0aWFsIHN0YWNrIHByb3RlY3Rpb24uICovCisKKyNkZWZpbmUJQVRf Q09VTlQJMjQJLyogQ291bnQgb2YgZGVmaW5lZCBhdXggZW50cnkgdHlwZXMuICovCisKKy8qCisg KiBSZWxvY2F0aW9uIHR5cGVzLgorICovCisKKyNkZWZpbmUJUl8zODZfQ09VTlQJMzgJLyogQ291 bnQgb2YgZGVmaW5lZCByZWxvY2F0aW9uIHR5cGVzLiAqLworCisvKiBEZWZpbmUgIm1hY2hpbmUi IGNoYXJhY3RlcmlzdGljcyAqLworI2RlZmluZQlFTEZfVEFSR19DTEFTUwlFTEZDTEFTUzMyCisj ZGVmaW5lCUVMRl9UQVJHX0RBVEEJRUxGREFUQTJMU0IKKyNkZWZpbmUJRUxGX1RBUkdfTUFDSAlF TV8zODYKKyNkZWZpbmUJRUxGX1RBUkdfVkVSCTEKKworI2RlZmluZQlFVF9EWU5fTE9BRF9BRERS IDB4MDEwMDEwMDAKKworI2VsaWYgZGVmaW5lZChfX2FtZDY0X18pCisKKy8qCisgKiBFTEYgZGVm aW5pdGlvbnMgZm9yIHRoZSBBTUQ2NCBhcmNoaXRlY3R1cmUuCisgKi8KKworI2lmbmRlZiBfX0VM Rl9XT1JEX1NJWkUKKyNkZWZpbmUJX19FTEZfV09SRF9TSVpFCTY0CS8qIFVzZWQgYnkgPHN5cy9l bGZfZ2VuZXJpYy5oPiAqLworI2VuZGlmCisjaW5jbHVkZSA8c3lzL2VsZjMyLmg+CS8qIERlZmlu aXRpb25zIGNvbW1vbiB0byBhbGwgMzIgYml0IGFyY2hpdGVjdHVyZXMuICovCisjaW5jbHVkZSA8 c3lzL2VsZjY0Lmg+CS8qIERlZmluaXRpb25zIGNvbW1vbiB0byBhbGwgNjQgYml0IGFyY2hpdGVj dHVyZXMuICovCisjaW5jbHVkZSA8c3lzL2VsZl9nZW5lcmljLmg+CisKKyNkZWZpbmUJRUxGX0FS Q0gJRU1fWDg2XzY0CisjZGVmaW5lCUVMRl9BUkNIMzIJRU1fMzg2CisKKyNkZWZpbmUJRUxGX01B Q0hJTkVfT0soeCkgKCh4KSA9PSBFTV9YODZfNjQpCisKKy8qCisgKiBBdXhpbGlhcnkgdmVjdG9y IGVudHJpZXMgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gdG8gdGhlIGludGVycHJldGVyLgorICoK KyAqIFRoZSBpMzg2IHN1cHBsZW1lbnQgdG8gdGhlIFNWUjQgQUJJIHNwZWNpZmljYXRpb24gbmFt ZXMgdGhpcyAiYXV4dl90IiwKKyAqIGJ1dCBQT1NJWCBsYXlzIGNsYWltIHRvIGFsbCBzeW1ib2xz IGVuZGluZyB3aXRoICJfdCIuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsJLyogQXV4aWxpYXJ5IHZl Y3RvciBlbnRyeSBvbiBpbml0aWFsIHN0YWNrICovCisJaW50CWFfdHlwZTsJCQkvKiBFbnRyeSB0 eXBlLiAqLworCXVuaW9uIHsKKwkJaW50CWFfdmFsOwkJLyogSW50ZWdlciB2YWx1ZS4gKi8KKwl9 IGFfdW47Cit9IEVsZjMyX0F1eGluZm87CisKKwordHlwZWRlZiBzdHJ1Y3QgewkvKiBBdXhpbGlh cnkgdmVjdG9yIGVudHJ5IG9uIGluaXRpYWwgc3RhY2sgKi8KKwlsb25nCWFfdHlwZTsJCQkvKiBF bnRyeSB0eXBlLiAqLworCXVuaW9uIHsKKwkJbG9uZwlhX3ZhbDsJCS8qIEludGVnZXIgdmFsdWUu ICovCisJCXZvaWQJKmFfcHRyOwkJLyogQWRkcmVzcy4gKi8KKwkJdm9pZAkoKmFfZmNuKSh2b2lk KTsJLyogRnVuY3Rpb24gcG9pbnRlciAobm90IHVzZWQpLiAqLworCX0gYV91bjsKK30gRWxmNjRf QXV4aW5mbzsKKworX19FbGZUeXBlKEF1eGluZm8pOworCisvKiBWYWx1ZXMgZm9yIGFfdHlwZS4g Ki8KKyNkZWZpbmUJQVRfTlVMTAkJMAkvKiBUZXJtaW5hdGVzIHRoZSB2ZWN0b3IuICovCisjZGVm aW5lCUFUX0lHTk9SRQkxCS8qIElnbm9yZWQgZW50cnkuICovCisjZGVmaW5lCUFUX0VYRUNGRAky CS8qIEZpbGUgZGVzY3JpcHRvciBvZiBwcm9ncmFtIHRvIGxvYWQuICovCisjZGVmaW5lCUFUX1BI RFIJCTMJLyogUHJvZ3JhbSBoZWFkZXIgb2YgcHJvZ3JhbSBhbHJlYWR5IGxvYWRlZC4gKi8KKyNk ZWZpbmUJQVRfUEhFTlQJNAkvKiBTaXplIG9mIGVhY2ggcHJvZ3JhbSBoZWFkZXIgZW50cnkuICov CisjZGVmaW5lCUFUX1BITlVNCTUJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVyIGVudHJpZXMu ICovCisjZGVmaW5lCUFUX1BBR0VTWgk2CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcy4gKi8KKyNkZWZp bmUJQVRfQkFTRQkJNwkvKiBJbnRlcnByZXRlcidzIGJhc2UgYWRkcmVzcy4gKi8KKyNkZWZpbmUJ QVRfRkxBR1MJOAkvKiBGbGFncyAodW51c2VkIGZvciBpMzg2KS4gKi8KKyNkZWZpbmUJQVRfRU5U UlkJOQkvKiBXaGVyZSBpbnRlcnByZXRlciBzaG91bGQgdHJhbnNmZXIgY29udHJvbC4gKi8KKyNk ZWZpbmUJQVRfTk9URUxGCTEwCS8qIFByb2dyYW0gaXMgbm90IEVMRiA/PyAqLworI2RlZmluZQlB VF9VSUQJCTExCS8qIFJlYWwgdWlkLiAqLworI2RlZmluZQlBVF9FVUlECQkxMgkvKiBFZmZlY3Rp dmUgdWlkLiAqLworI2RlZmluZQlBVF9HSUQJCTEzCS8qIFJlYWwgZ2lkLiAqLworI2RlZmluZQlB VF9FR0lECQkxNAkvKiBFZmZlY3RpdmUgZ2lkLiAqLworI2RlZmluZQlBVF9FWEVDUEFUSAkxNQkv KiBQYXRoIHRvIHRoZSBleGVjdXRhYmxlLiAqLworI2RlZmluZQlBVF9DQU5BUlkJMTYJLyogQ2Fu YXJ5IGZvciBTU1AgKi8KKyNkZWZpbmUJQVRfQ0FOQVJZTEVOCTE3CS8qIExlbmd0aCBvZiB0aGUg Y2FuYXJ5LiAqLworI2RlZmluZQlBVF9PU1JFTERBVEUJMTgJLyogT1NSRUxEQVRFLiAqLworI2Rl ZmluZQlBVF9OQ1BVUwkxOQkvKiBOdW1iZXIgb2YgQ1BVcy4gKi8KKyNkZWZpbmUJQVRfUEFHRVNJ WkVTCTIwCS8qIFBhZ2VzaXplcy4gKi8KKyNkZWZpbmUJQVRfUEFHRVNJWkVTTEVOCTIxCS8qIE51 bWJlciBvZiBwYWdlc2l6ZXMuICovCisjZGVmaW5lCUFUX1RJTUVLRUVQCTIyCS8qIFBvaW50ZXIg dG8gdGltZWhhbmRzLiAqLworI2RlZmluZQlBVF9TVEFDS1BST1QJMjMJLyogSW5pdGlhbCBzdGFj ayBwcm90ZWN0aW9uLiAqLworCisjZGVmaW5lCUFUX0NPVU5UCTI0CS8qIENvdW50IG9mIGRlZmlu ZWQgYXV4IGVudHJ5IHR5cGVzLiAqLworCisvKgorICogUmVsb2NhdGlvbiB0eXBlcy4KKyAqLwor CisjZGVmaW5lCVJfWDg2XzY0X0NPVU5UCTI0CS8qIENvdW50IG9mIGRlZmluZWQgcmVsb2NhdGlv biB0eXBlcy4gKi8KKworLyogRGVmaW5lICJtYWNoaW5lIiBjaGFyYWN0ZXJpc3RpY3MgKi8KKyNp ZiBfX0VMRl9XT1JEX1NJWkUgPT0gMzIKKyNkZWZpbmUgRUxGX1RBUkdfQ0xBU1MgIEVMRkNMQVNT MzIKKyNlbHNlCisjZGVmaW5lIEVMRl9UQVJHX0NMQVNTICBFTEZDTEFTUzY0CisjZW5kaWYKKyNk ZWZpbmUJRUxGX1RBUkdfREFUQQlFTEZEQVRBMkxTQgorI2RlZmluZQlFTEZfVEFSR19NQUNICUVN X1g4Nl82NAorI2RlZmluZQlFTEZfVEFSR19WRVIJMQorCisjaWYgX19FTEZfV09SRF9TSVpFID09 IDMyCisjZGVmaW5lCUVUX0RZTl9MT0FEX0FERFIgMHgwMTAwMTAwMAorI2Vsc2UKKyNkZWZpbmUJ RVRfRFlOX0xPQURfQUREUiAweDAxMDIxMDAwCisjZW5kaWYKKworI2VuZGlmIC8qIF9faTM4Nl9f LCBfX2FtZDY0X18gKi8KKworI2VuZGlmIC8qICFfTUFDSElORV9FTEZfSF8gKi8KZGlmZiAtdSAt ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZW5kaWFuLmggL3Vzci9zcmMvc3lz L21vZHVsZXMvbmV0bWFwL3g4Ni9lbmRpYW4uaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAveDg2L2VuZGlhbi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2VuZGlhbi5oCTIwMTYtMDktMjkgMDA6MjQ6 NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTMxIEBACisvKi0KKyAqIENvcHlyaWdodCAo YykgMTk4NywgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisg KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBv ZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBB TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJF R0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq CisgKglAKCMpZW5kaWFuLmgJNy44IChCZXJrZWxleSkgNC8zLzkxCisgKiAkRnJlZUJTRDogcmVs ZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2VuZGlhbi5oIDIzMzY4NCAyMDEyLTAzLTI5IDIzOjMx OjQ4WiBkaW0gJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfRU5ESUFOX0hfCisjZGVmaW5lCV9N QUNISU5FX0VORElBTl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lz L190eXBlcy5oPgorCisvKgorICogRGVmaW5lIHRoZSBvcmRlciBvZiAzMi1iaXQgd29yZHMgaW4g NjQtYml0IHdvcmRzLgorICovCisjZGVmaW5lCV9RVUFEX0hJR0hXT1JEIDEKKyNkZWZpbmUJX1FV QURfTE9XV09SRCAwCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgYnl0ZSBvcmRlciwgYWNjb3Jk aW5nIHRvIGJ5dGUgc2lnbmlmaWNhbmNlIGZyb20gbG93CisgKiBhZGRyZXNzIHRvIGhpZ2guCisg Ki8KKyNkZWZpbmUJX0xJVFRMRV9FTkRJQU4JMTIzNAkvKiBMU0IgZmlyc3Q6IGkzODYsIHZheCAq LworI2RlZmluZQlfQklHX0VORElBTgk0MzIxCS8qIE1TQiBmaXJzdDogNjgwMDAsIGlibSwgbmV0 ICovCisjZGVmaW5lCV9QRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBm aXJzdCBpbiBsb25nICovCisKKyNkZWZpbmUJX0JZVEVfT1JERVIJX0xJVFRMRV9FTkRJQU4KKwor LyoKKyAqIERlcHJlY2F0ZWQgdmFyaWFudHMgdGhhdCBkb24ndCBoYXZlIGVub3VnaCB1bmRlcnNj b3JlcyB0byBiZSB1c2VmdWwgaW4gbW9yZQorICogc3RyaWN0IG5hbWVzcGFjZXMuCisgKi8KKyNp ZiBfX0JTRF9WSVNJQkxFCisjZGVmaW5lCUxJVFRMRV9FTkRJQU4JX0xJVFRMRV9FTkRJQU4KKyNk ZWZpbmUJQklHX0VORElBTglfQklHX0VORElBTgorI2RlZmluZQlQRFBfRU5ESUFOCV9QRFBfRU5E SUFOCisjZGVmaW5lCUJZVEVfT1JERVIJX0JZVEVfT1JERVIKKyNlbmRpZgorCisjZGVmaW5lCV9f YnN3YXAxNl9nZW4oeCkJKF9fdWludDE2X3QpKCh4KSA8PCA4IHwgKHgpID4+IDgpCisjZGVmaW5l CV9fYnN3YXAzMl9nZW4oeCkJCVwKKwkoKChfX3VpbnQzMl90KV9fYnN3YXAxNigoeCkgJiAweGZm ZmYpIDw8IDE2KSB8IF9fYnN3YXAxNigoeCkgPj4gMTYpKQorI2RlZmluZQlfX2Jzd2FwNjRfZ2Vu KHgpCQlcCisJKCgoX191aW50NjRfdClfX2Jzd2FwMzIoKHgpICYgMHhmZmZmZmZmZikgPDwgMzIp IHwgX19ic3dhcDMyKCh4KSA+PiAzMikpCisKKyNpZmRlZiBfX0dOVUNMSUtFX0JVSUxUSU5fQ09O U1RBTlRfUAorI2RlZmluZQlfX2Jzd2FwMTYoeCkJCQkJXAorCSgoX191aW50MTZfdCkoX19idWls dGluX2NvbnN0YW50X3AoeCkgPwlcCisJICAgIF9fYnN3YXAxNl9nZW4oKF9fdWludDE2X3QpKHgp KSA6IF9fYnN3YXAxNl92YXIoeCkpKQorI2RlZmluZQlfX2Jzd2FwMzIoeCkJCQlcCisJKF9fYnVp bHRpbl9jb25zdGFudF9wKHgpID8JXAorCSAgICBfX2Jzd2FwMzJfZ2VuKChfX3VpbnQzMl90KSh4 KSkgOiBfX2Jzd2FwMzJfdmFyKHgpKQorI2RlZmluZQlfX2Jzd2FwNjQoeCkJCQlcCisJKF9fYnVp bHRpbl9jb25zdGFudF9wKHgpID8JXAorCSAgICBfX2Jzd2FwNjRfZ2VuKChfX3VpbnQ2NF90KSh4 KSkgOiBfX2Jzd2FwNjRfdmFyKHgpKQorI2Vsc2UKKy8qIFhYWCB0aGVzZSBhcmUgYnJva2VuIGZv ciB1c2UgaW4gc3RhdGljIGluaXRpYWxpemVycy4gKi8KKyNkZWZpbmUJX19ic3dhcDE2KHgpCV9f YnN3YXAxNl92YXIoeCkKKyNkZWZpbmUJX19ic3dhcDMyKHgpCV9fYnN3YXAzMl92YXIoeCkKKyNk ZWZpbmUJX19ic3dhcDY0KHgpCV9fYnN3YXA2NF92YXIoeCkKKyNlbmRpZgorCisvKiBUaGVzZSBh cmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMgdG8gYXZvaWQgbXVsdGlwbGUgZXZhbHVhdGlvbiBvZiB4 LiAqLworCitzdGF0aWMgX19pbmxpbmUgX191aW50MTZfdAorX19ic3dhcDE2X3ZhcihfX3VpbnQx Nl90IF94KQoreworCisJcmV0dXJuIChfX2Jzd2FwMTZfZ2VuKF94KSk7Cit9CisKK3N0YXRpYyBf X2lubGluZSBfX3VpbnQzMl90CitfX2Jzd2FwMzJfdmFyKF9fdWludDMyX3QgX3gpCit7CisKKyNp ZmRlZiBfX0dOVUNMSUtFX0FTTQorCV9fYXNtKCJic3dhcCAlMCIgOiAiK3IiIChfeCkpOworCXJl dHVybiAoX3gpOworI2Vsc2UKKwlyZXR1cm4gKF9fYnN3YXAzMl9nZW4oX3gpKTsKKyNlbmRpZgor fQorCitzdGF0aWMgX19pbmxpbmUgX191aW50NjRfdAorX19ic3dhcDY0X3ZhcihfX3VpbnQ2NF90 IF94KQoreworCisjaWYgZGVmaW5lZChfX2FtZDY0X18pICYmIGRlZmluZWQoX19HTlVDTElLRV9B U00pCisJX19hc20oImJzd2FwICUwIiA6ICIrciIgKF94KSk7CisJcmV0dXJuIChfeCk7CisjZWxz ZQorCS8qCisJICogSXQgaXMgaW1wb3J0YW50IGZvciB0aGUgb3B0aW1pemF0aW9ucyB0aGF0IHRo ZSBmb2xsb3dpbmcgaXMgbm90CisJICogcmVhbGx5IGdlbmVyaWMsIGJ1dCBleHBhbmRzIHRvIDIg X19ic3dhcDMyX3ZhcigpJ3MuCisJICovCisJcmV0dXJuIChfX2Jzd2FwNjRfZ2VuKF94KSk7Cisj ZW5kaWYKK30KKworI2RlZmluZQlfX2h0b25sKHgpCV9fYnN3YXAzMih4KQorI2RlZmluZQlfX2h0 b25zKHgpCV9fYnN3YXAxNih4KQorI2RlZmluZQlfX250b2hsKHgpCV9fYnN3YXAzMih4KQorI2Rl ZmluZQlfX250b2hzKHgpCV9fYnN3YXAxNih4KQorCisjZW5kaWYgLyogIV9NQUNISU5FX0VORElB Tl9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mZHQu aCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2ZkdC5oCi0tLSB1c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC94ODYvZmR0LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZmR0LmgJMjAxNi0wOS0yOSAw MDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzNiBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMTMgSnVuaXBlciBOZXR3b3JrcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K KyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2ZkdC5oIDI2MDMy NyAyMDE0LTAxLTA1IDE4OjQ2OjU4WiBud2hpdGVob3JuICQKKyAqLworCisjaWZuZGVmIF9NQUNI SU5FX0ZEVF9IXworI2RlZmluZSBfTUFDSElORV9GRFRfSF8KKworX19CRUdJTl9ERUNMUworaW50 IHg4Nl9pbml0X2ZkdCh2b2lkKTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfTUFDSElORV9G RFRfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZmxv YXQuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2Zsb2F0LmgKLS0tIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mbG9hdC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2Zsb2F0LmgJMjAx Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw5OCBAQAorLyotCisg KiBDb3B5cmlnaHQgKGMpIDE5ODkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl IG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz CisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJF R0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B R0UuCisgKgorICoJZnJvbTogQCgjKWZsb2F0LmgJNy4xIChCZXJrZWxleSkgNS84LzkwCisgKiAk RnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL2Zsb2F0LmggMjg2MzI3IDIwMTUt MDgtMDUgMTc6MDU6MzVaIGVtYXN0ZSAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9GTE9BVF9I XworI2RlZmluZSBfTUFDSElORV9GTE9BVF9IXyAxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K KworX19CRUdJTl9ERUNMUworZXh0ZXJuIGludCBfX2ZsdF9yb3VuZHModm9pZCk7CitfX0VORF9E RUNMUworCisjZGVmaW5lIEZMVF9SQURJWAkyCQkvKiBiICovCisjZGVmaW5lIEZMVF9ST1VORFMJ X19mbHRfcm91bmRzKCkKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OQorI2lmZGVmIF9fTFA2 NF9fCisjZGVmaW5lCUZMVF9FVkFMX01FVEhPRAkwCQkvKiBubyBwcm9tb3Rpb25zICovCisjZWxz ZQorI2RlZmluZQlGTFRfRVZBTF9NRVRIT0QJKC0xKQkJLyogaTM4NyBzZW1hbnRpY3MgYXJlLi4u aW50ZXJlc3RpbmcgKi8KKyNlbmRpZgorI2RlZmluZQlERUNJTUFMX0RJRwkyMQkJLyogbWF4IHBy ZWNpc2lvbiBpbiBkZWNpbWFsIGRpZ2l0cyAqLworI2VuZGlmCisKKyNkZWZpbmUgRkxUX01BTlRf RElHCTI0CQkvKiBwICovCisjZGVmaW5lIEZMVF9FUFNJTE9OCTEuMTkyMDkyOTBFLTA3RgkvKiBi KiooMS1wKSAqLworI2RlZmluZSBGTFRfRElHCQk2CQkvKiBmbG9vcigocC0xKSpsb2cxMChiKSkr KGIgPT0gMTApICovCisjZGVmaW5lIEZMVF9NSU5fRVhQCSgtMTI1KQkJLyogZW1pbiAqLworI2Rl ZmluZSBGTFRfTUlOCQkxLjE3NTQ5NDM1RS0zOEYJLyogYioqKGVtaW4tMSkgKi8KKyNkZWZpbmUg RkxUX01JTl8xMF9FWFAJKC0zNykJCS8qIGNlaWwobG9nMTAoYioqKGVtaW4tMSkpKSAqLworI2Rl ZmluZSBGTFRfTUFYX0VYUAkxMjgJCS8qIGVtYXggKi8KKyNkZWZpbmUgRkxUX01BWAkJMy40MDI4 MjM0N0UrMzhGCS8qICgxLWIqKigtcCkpKmIqKmVtYXggKi8KKyNkZWZpbmUgRkxUX01BWF8xMF9F WFAJMzgJCS8qIGZsb29yKGxvZzEwKCgxLWIqKigtcCkpKmIqKmVtYXgpKSAqLworI2lmIF9fSVNP X0NfVklTSUJMRSA+PSAyMDExCisjZGVmaW5lCUZMVF9UUlVFX01JTgkxLjQwMTI5ODQ2RS00NUYJ LyogYioqKGVtaW4tcCkgKi8KKyNkZWZpbmUJRkxUX0RFQ0lNQUxfRElHCTkJCS8qIGNlaWwoMStw KmxvZzEwKGIpKSAqLworI2RlZmluZQlGTFRfSEFTX1NVQk5PUk0JMQorI2VuZGlmIC8qIF9fSVNP X0NfVklTSUJMRSA+PSAyMDExICovCisKKyNkZWZpbmUgREJMX01BTlRfRElHCTUzCisjZGVmaW5l IERCTF9FUFNJTE9OCTIuMjIwNDQ2MDQ5MjUwMzEzMUUtMTYKKyNkZWZpbmUgREJMX0RJRwkJMTUK KyNkZWZpbmUgREJMX01JTl9FWFAJKC0xMDIxKQorI2RlZmluZSBEQkxfTUlOCQkyLjIyNTA3Mzg1 ODUwNzIwMTRFLTMwOAorI2RlZmluZSBEQkxfTUlOXzEwX0VYUAkoLTMwNykKKyNkZWZpbmUgREJM X01BWF9FWFAJMTAyNAorI2RlZmluZSBEQkxfTUFYCQkxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOAor I2RlZmluZSBEQkxfTUFYXzEwX0VYUAkzMDgKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMjAxMQor I2RlZmluZQlEQkxfVFJVRV9NSU4JNC45NDA2NTY0NTg0MTI0NjU0RS0zMjQKKyNkZWZpbmUJREJM X0RFQ0lNQUxfRElHCTE3CisjZGVmaW5lCURCTF9IQVNfU1VCTk9STQkxCisjZW5kaWYgLyogX19J U09fQ19WSVNJQkxFID49IDIwMTEgKi8KKworI2RlZmluZSBMREJMX01BTlRfRElHCTY0CisjZGVm aW5lIExEQkxfRVBTSUxPTgkxLjA4NDIwMjE3MjQ4NTUwNDQzNDBFLTE5TAorI2RlZmluZSBMREJM X0RJRwkxOAorI2RlZmluZSBMREJMX01JTl9FWFAJKC0xNjM4MSkKKyNkZWZpbmUgTERCTF9NSU4J My4zNjIxMDMxNDMxMTIwOTM1MDYzRS00OTMyTAorI2RlZmluZSBMREJMX01JTl8xMF9FWFAJKC00 OTMxKQorI2RlZmluZSBMREJMX01BWF9FWFAJMTYzODQKKyNkZWZpbmUgTERCTF9NQVgJMS4xODk3 MzE0OTUzNTcyMzE3NjUwRSs0OTMyTAorI2RlZmluZSBMREJMX01BWF8xMF9FWFAJNDkzMgorI2lm IF9fSVNPX0NfVklTSUJMRSA+PSAyMDExCisjZGVmaW5lCUxEQkxfVFJVRV9NSU4JMy42NDUxOTk1 MzE4ODI0NzQ2MDI1RS00OTUxTAorI2RlZmluZQlMREJMX0RFQ0lNQUxfRElHIDIxCisjZGVmaW5l CUxEQkxfSEFTX1NVQk5PUk0gMQorI2VuZGlmIC8qIF9fSVNPX0NfVklTSUJMRSA+PSAyMDExICov CisKKyNlbmRpZiAvKiBfTUFDSElORV9GTE9BVF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9mcHUuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv eDg2L2ZwdS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZnB1LmgJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC94ODYvZnB1LmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs MCArMSwyMTcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVy a2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUg bmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVH RU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH RS4KKyAqCisgKglmcm9tOiBAKCMpbnB4LmgJNS4zIChCZXJrZWxleSkgMS8xOC85MQorICogJEZy ZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9mcHUuaCAyNzQ4MTcgMjAxNC0xMS0y MSAyMDo1MzoxN1ogamhiICQKKyAqLworCisvKgorICogRmxvYXRpbmcgUG9pbnQgRGF0YSBTdHJ1 Y3R1cmVzIGFuZCBDb25zdGFudHMKKyAqIFcuIEpvbGl0eiAxLzkwCisgKi8KKworI2lmbmRlZiBf WDg2X0ZQVV9IXworI2RlZmluZQlfWDg2X0ZQVV9IXworCisvKiBFbnZpcm9ubWVudCBpbmZvcm1h dGlvbiBvZiBmbG9hdGluZyBwb2ludCB1bml0LiAqLworc3RydWN0IGVudjg3IHsKKwlpbnQzMl90 CQllbl9jdzsJCS8qIGNvbnRyb2wgd29yZCAoMTZiaXRzKSAqLworCWludDMyX3QJCWVuX3N3OwkJ Lyogc3RhdHVzIHdvcmQgKDE2Yml0cykgKi8KKwlpbnQzMl90CQllbl90dzsJCS8qIHRhZyB3b3Jk ICgxNmJpdHMpICovCisJaW50MzJfdAkJZW5fZmlwOwkJLyogZnAgaW5zdHJ1Y3Rpb24gcG9pbnRl ciAqLworCXVpbnQxNl90CWVuX2ZjczsJCS8qIGZwIGNvZGUgc2VnbWVudCBzZWxlY3RvciAqLwor CXVpbnQxNl90CWVuX29wY29kZTsJLyogb3Bjb2RlIGxhc3QgZXhlY3V0ZWQgKDExIGJpdHMpICov CisJaW50MzJfdAkJZW5fZm9vOwkJLyogZnAgb3BlcmFuZCBvZmZzZXQgKi8KKwlpbnQzMl90CQll bl9mb3M7CQkvKiBmcCBvcGVyYW5kIHNlZ21lbnQgc2VsZWN0b3IgKi8KK307CisKKy8qIENvbnRl bnRzIG9mIGVhY2ggeDg3IGZsb2F0aW5nIHBvaW50IGFjY3VtdWxhdG9yLiAqLworc3RydWN0IGZw YWNjODcgeworCXVpbnQ4X3QJCWZwX2J5dGVzWzEwXTsKK307CisKKy8qIEZsb2F0aW5nIHBvaW50 IGNvbnRleHQuIChpMzg2IGZuc2F2ZS9mcnN0b3IpICovCitzdHJ1Y3Qgc2F2ZTg3IHsKKwlzdHJ1 Y3QgZW52ODcJc3ZfZW52OwkJLyogZmxvYXRpbmcgcG9pbnQgY29udHJvbC9zdGF0dXMgKi8KKwlz dHJ1Y3QgZnBhY2M4Nwlzdl9hY1s4XTsJLyogYWNjdW11bGF0b3IgY29udGVudHMsIDAtNyAqLwor CXVpbnQ4X3QJCXN2X3BhZDBbNF07CS8qIHNhdmVkIHN0YXR1cyB3b3JkIChub3cgdW51c2VkKSAq LworCXVpbnQ4X3QJCXN2X3BhZFs2NF07Cit9OworCisvKiBDb250ZW50cyBvZiBlYWNoIFNTRSBl eHRlbmRlZCBhY2N1bXVsYXRvci4gKi8KK3N0cnVjdCB4bW1hY2MgeworCXVpbnQ4X3QJCXhtbV9i eXRlc1sxNl07Cit9OworCisvKiBDb250ZW50cyBvZiB0aGUgdXBwZXIgMTYgYnl0ZXMgb2YgZWFj aCBBVlggZXh0ZW5kZWQgYWNjdW11bGF0b3IuICovCitzdHJ1Y3QgeW1tYWNjIHsKKwl1aW50OF90 CQl5bW1fYnl0ZXNbMTZdOworfTsKKworLyogUmVuYW1lIHN0cnVjdHMgYmVsb3cgZGVwZW5kaW5n IG9uIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLiAqLworI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lCV9f ZW52eG1tMzIJZW52eG1tCisjZWxzZQorI2RlZmluZQlfX2VudnhtbTMyCWVudnhtbTMyCisjZGVm aW5lCV9fZW52eG1tNjQJZW52eG1tCisjZW5kaWYKKworc3RydWN0IF9fZW52eG1tMzIgeworCXVp bnQxNl90CWVuX2N3OwkJLyogY29udHJvbCB3b3JkICgxNmJpdHMpICovCisJdWludDE2X3QJZW5f c3c7CQkvKiBzdGF0dXMgd29yZCAoMTZiaXRzKSAqLworCXVpbnQxNl90CWVuX3R3OwkJLyogdGFn IHdvcmQgKDE2Yml0cykgKi8KKwl1aW50MTZfdAllbl9vcGNvZGU7CS8qIG9wY29kZSBsYXN0IGV4 ZWN1dGVkICgxMSBiaXRzKSAqLworCXVpbnQzMl90CWVuX2ZpcDsJCS8qIGZwIGluc3RydWN0aW9u IHBvaW50ZXIgKi8KKwl1aW50MTZfdAllbl9mY3M7CQkvKiBmcCBjb2RlIHNlZ21lbnQgc2VsZWN0 b3IgKi8KKwl1aW50MTZfdAllbl9wYWQwOwkvKiBwYWRkaW5nICovCisJdWludDMyX3QJZW5fZm9v OwkJLyogZnAgb3BlcmFuZCBvZmZzZXQgKi8KKwl1aW50MTZfdAllbl9mb3M7CQkvKiBmcCBvcGVy YW5kIHNlZ21lbnQgc2VsZWN0b3IgKi8KKwl1aW50MTZfdAllbl9wYWQxOwkvKiBwYWRkaW5nICov CisJdWludDMyX3QJZW5fbXhjc3I7CS8qIFNTRSBjb250cm9sL3N0YXR1cyByZWdpc3RlciAqLwor CXVpbnQzMl90CWVuX214Y3NyX21hc2s7CS8qIHZhbGlkIGJpdHMgaW4gbXhjc3IgKi8KK307CisK K3N0cnVjdCBfX2VudnhtbTY0IHsKKwl1aW50MTZfdAllbl9jdzsJCS8qIGNvbnRyb2wgd29yZCAo MTZiaXRzKSAqLworCXVpbnQxNl90CWVuX3N3OwkJLyogc3RhdHVzIHdvcmQgKDE2Yml0cykgKi8K Kwl1aW50OF90CQllbl90dzsJCS8qIHRhZyB3b3JkICg4Yml0cykgKi8KKwl1aW50OF90CQllbl96 ZXJvOworCXVpbnQxNl90CWVuX29wY29kZTsJLyogb3Bjb2RlIGxhc3QgZXhlY3V0ZWQgKDExIGJp dHMgKSAqLworCXVpbnQ2NF90CWVuX3JpcDsJCS8qIGZwIGluc3RydWN0aW9uIHBvaW50ZXIgKi8K Kwl1aW50NjRfdAllbl9yZHA7CQkvKiBmcCBvcGVyYW5kIHBvaW50ZXIgKi8KKwl1aW50MzJfdAll bl9teGNzcjsJLyogU1NFIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICovCisJdWludDMyX3QJZW5f bXhjc3JfbWFzazsJLyogdmFsaWQgYml0cyBpbiBteGNzciAqLworfTsKKworLyogRmxvYXRpbmcg cG9pbnQgY29udGV4dC4gKGkzODYgZnhzYXZlL2Z4cnN0b3IpICovCitzdHJ1Y3Qgc2F2ZXhtbSB7 CisJc3RydWN0IF9fZW52eG1tMzIJc3ZfZW52OworCXN0cnVjdCB7CisJCXN0cnVjdCBmcGFjYzg3 CWZwX2FjYzsKKwkJdWludDhfdAkJZnBfcGFkWzZdOyAgICAgIC8qIHBhZGRpbmcgKi8KKwl9IHN2 X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2X3htbVs4XTsKKwl1aW50OF90CQkJc3ZfcGFkWzIy NF07Cit9IF9fYWxpZ25lZCgxNik7CisKKyNpZmRlZiBfX2kzODZfXwordW5pb24gc2F2ZWZwdSB7 CisJc3RydWN0IHNhdmU4Nwlzdl84NzsKKwlzdHJ1Y3Qgc2F2ZXhtbQlzdl94bW07Cit9OworI2Vs c2UKKy8qIEZsb2F0aW5nIHBvaW50IGNvbnRleHQuIChhbWQ2NCBmeHNhdmUvZnhyc3RvcikgKi8K K3N0cnVjdCBzYXZlZnB1IHsKKwlzdHJ1Y3QgX19lbnZ4bW02NAlzdl9lbnY7CisJc3RydWN0IHsK KwkJc3RydWN0IGZwYWNjODcJZnBfYWNjOworCQl1aW50OF90CQlmcF9wYWRbNl07CS8qIHBhZGRp bmcgKi8KKwl9IHN2X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2X3htbVsxNl07CisJdWludDhf dAkJCXN2X3BhZFs5Nl07Cit9IF9fYWxpZ25lZCgxNik7CisjZW5kaWYKKworc3RydWN0IHhzdGF0 ZV9oZHIgeworCXVpbnQ2NF90CXhzdGF0ZV9idjsKKwl1aW50NjRfdAl4c3RhdGVfeGNvbXBfYnY7 CisJdWludDhfdAkJeHN0YXRlX3JzcnYwWzhdOworCXVpbnQ4X3QJCXhzdGF0ZV9yc3J2WzQwXTsK K307CisjZGVmaW5lCVhTVEFURV9YQ09NUF9CVl9DT01QQUNUCSgxVUxMIDw8IDYzKQorCitzdHJ1 Y3Qgc2F2ZXhtbV94c3RhdGUgeworCXN0cnVjdCB4c3RhdGVfaGRyCXN4X2hkOworCXN0cnVjdCB5 bW1hY2MJCXN4X3ltbVsxNl07Cit9OworCitzdHJ1Y3Qgc2F2ZXhtbV95bW0geworCXN0cnVjdCBf X2VudnhtbTMyCXN2X2VudjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZnBhY2M4NwlmcF9hY2M7CisJ CWludDhfdAkJZnBfcGFkWzZdOwkvKiBwYWRkaW5nICovCisJfSBzdl9mcFs4XTsKKwlzdHJ1Y3Qg eG1tYWNjCQlzdl94bW1bMTZdOworCXVpbnQ4X3QJCQlzdl9wYWRbOTZdOworCXN0cnVjdCBzYXZl eG1tX3hzdGF0ZQlzdl94c3RhdGU7Cit9IF9fYWxpZ25lZCg2NCk7CisKK3N0cnVjdCBzYXZlZnB1 X3hzdGF0ZSB7CisJc3RydWN0IHhzdGF0ZV9oZHIJc3hfaGQ7CisJc3RydWN0IHltbWFjYwkJc3hf eW1tWzE2XTsKK307CisKK3N0cnVjdCBzYXZlZnB1X3ltbSB7CisJc3RydWN0IF9fZW52eG1tNjQJ c3ZfZW52OworCXN0cnVjdCB7CisJCXN0cnVjdCBmcGFjYzg3CWZwX2FjYzsKKwkJaW50OF90CQlm cF9wYWRbNl07CS8qIHBhZGRpbmcgKi8KKwl9IHN2X2ZwWzhdOworCXN0cnVjdCB4bW1hY2MJCXN2 X3htbVsxNl07CisJdWludDhfdAkJCXN2X3BhZFs5Nl07CisJc3RydWN0IHNhdmVmcHVfeHN0YXRl CXN2X3hzdGF0ZTsKK30gX19hbGlnbmVkKDY0KTsKKworI3VuZGVmIF9fZW52eG1tMzIKKyN1bmRl ZiBfX2VudnhtbTY0CisKKy8qCisgKiBUaGUgaGFyZHdhcmUgZGVmYXVsdCBjb250cm9sIHdvcmQg Zm9yIGkzODcncyBhbmQgbGF0ZXIgY29wcm9jZXNzb3JzIGlzCisgKiAweDM3RiwgZ2l2aW5nOgor ICoKKyAqCXJvdW5kIHRvIG5lYXJlc3QKKyAqCTY0LWJpdCBwcmVjaXNpb24KKyAqCWFsbCBleGNl cHRpb25zIG1hc2tlZC4KKyAqCisgKiBGcmVlQlNEL2kzODYgdXNlcyA1MyBiaXQgcHJlY2lzaW9u IGZvciB0aGluZ3MgbGlrZSBmYWRkL2ZzdWIvZnNxcnQgZXRjCisgKiBiZWNhdXNlIG9mIHRoZSBk aWZmZXJlbmNlIGJldHdlZW4gbWVtb3J5IGFuZCBmcHUgcmVnaXN0ZXIgc3RhY2sgYXJndW1lbnRz LgorICogSWYgaXRzIHVzaW5nIGFuIGludGVybWVkaWF0ZSBmcHUgcmVnaXN0ZXIsIGl0IGhhcyA4 MC82NCBiaXRzIHRvIHdvcmsKKyAqIHdpdGguICBJZiBpdCB1c2VzIG1lbW9yeSwgaXQgaGFzIDY0 LzUzIGJpdHMgdG8gd29yayB3aXRoLiAgSG93ZXZlciwKKyAqIGdjYyBpcyBhd2FyZSBvZiB0aGlz IGFuZCBnb2VzIHRvIGEgZmFpciBiaXQgb2YgdHJvdWJsZSB0byBtYWtlIHRoZQorICogYmVzdCB1 c2Ugb2YgaXQuCisgKgorICogVGhpcyBpcyBtb3N0bHkgYWNhZGVtaWMgZm9yIEFNRDY0LCBiZWNh dXNlIHRoZSBBQkkgcHJlZmVycyB0aGUgdXNlCisgKiBTU0UyIGJhc2VkIG1hdGguICBGb3IgRnJl ZUJTRC9hbWQ2NCwgd2UgZ28gd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAqLworI2RlZmlu ZQlfX0lOSVRJQUxfRlBVQ1dfXwkweDAzN0YKKyNkZWZpbmUJX19JTklUSUFMX0ZQVUNXX0kzODZf XwkweDEyN0YKKyNkZWZpbmUJX19JTklUSUFMX05QWENXX18JX19JTklUSUFMX0ZQVUNXX0kzODZf XworI2RlZmluZQlfX0lOSVRJQUxfTVhDU1JfXwkweDFGODAKKyNkZWZpbmUJX19JTklUSUFMX01Y Q1NSX01BU0tfXwkweEZGQkYKKworLyoKKyAqIFRoZSBjdXJyZW50IHZhbHVlIG9mICV4Y3IwIGlz IHNhdmVkIGluIHRoZSBzdl9wYWRbXSBmaWVsZCBvZiB0aGUgRlBVCisgKiBzdGF0ZSBpbiB0aGUg TlRfWDg2X1hTVEFURSBub3RlIGluIGNvcmUgZHVtcHMuICBUaGlzIG9mZnNldCBpcyBjaG9zZW4K KyAqIHRvIG1hdGNoIHRoZSBvZmZzZXQgdXNlZCBieSBOVF9YODZfWFNUQVRFIGluIG90aGVyIHN5 c3RlbXMuCisgKi8KKyNkZWZpbmUJWDg2X1hTVEFURV9YQ1IwX09GRlNFVAk0NjQKKworI2VuZGlm IC8qICFfWDg2X0ZQVV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL3g4Ni9mcmFtZS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvZnJhbWUuaAot LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L2ZyYW1lLmgJMTk3MC0wMS0wMSAwMTow MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYv ZnJhbWUuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE0 OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbS4KKyAqIENvcHlyaWdo dCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgor ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9t IHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpvbGl0ei4K KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry aWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRo ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdp dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKWZyYW1lLmgJ NS4yIChCZXJrZWxleSkgMS8xOC85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv aW5jbHVkZS9mcmFtZS5oIDI0NzA0NyAyMDEzLTAyLTIwIDE3OjM5OjUyWiBraWIgJAorICovCisK KyNpZm5kZWYgX01BQ0hJTkVfRlJBTUVfSF8KKyNkZWZpbmUgX01BQ0hJTkVfRlJBTUVfSF8gMQor CisvKgorICogU3lzdGVtIHN0YWNrIGZyYW1lcy4KKyAqLworCisjaWZkZWYgX19pMzg2X18KKy8q CisgKiBFeGNlcHRpb24vVHJhcCBTdGFjayBGcmFtZQorICovCisKK3N0cnVjdCB0cmFwZnJhbWUg eworCWludAl0Zl9mczsKKwlpbnQJdGZfZXM7CisJaW50CXRmX2RzOworCWludAl0Zl9lZGk7CisJ aW50CXRmX2VzaTsKKwlpbnQJdGZfZWJwOworCWludAl0Zl9pc3A7CisJaW50CXRmX2VieDsKKwlp bnQJdGZfZWR4OworCWludAl0Zl9lY3g7CisJaW50CXRmX2VheDsKKwlpbnQJdGZfdHJhcG5vOwor CS8qIGJlbG93IHBvcnRpb24gZGVmaW5lZCBpbiAzODYgaGFyZHdhcmUgKi8KKwlpbnQJdGZfZXJy OworCWludAl0Zl9laXA7CisJaW50CXRmX2NzOworCWludAl0Zl9lZmxhZ3M7CisJLyogYmVsb3cg b25seSB3aGVuIGNyb3NzaW5nIHJpbmdzIChlLmcuIHVzZXIgdG8ga2VybmVsKSAqLworCWludAl0 Zl9lc3A7CisJaW50CXRmX3NzOworfTsKKworLyogU3VwZXJzZXQgb2YgdHJhcCBmcmFtZSwgZm9y IHRyYXBzIGZyb20gdmlydHVhbC04MDg2IG1vZGUgKi8KKworc3RydWN0IHRyYXBmcmFtZV92bTg2 IHsKKwlpbnQJdGZfZnM7CisJaW50CXRmX2VzOworCWludAl0Zl9kczsKKwlpbnQJdGZfZWRpOwor CWludAl0Zl9lc2k7CisJaW50CXRmX2VicDsKKwlpbnQJdGZfaXNwOworCWludAl0Zl9lYng7CisJ aW50CXRmX2VkeDsKKwlpbnQJdGZfZWN4OworCWludAl0Zl9lYXg7CisJaW50CXRmX3RyYXBubzsK KwkvKiBiZWxvdyBwb3J0aW9uIGRlZmluZWQgaW4gMzg2IGhhcmR3YXJlICovCisJaW50CXRmX2Vy cjsKKwlpbnQJdGZfZWlwOworCWludAl0Zl9jczsKKwlpbnQJdGZfZWZsYWdzOworCS8qIGJlbG93 IG9ubHkgd2hlbiBjcm9zc2luZyByaW5ncyAoZS5nLiB1c2VyIHRvIGtlcm5lbCkgKi8KKwlpbnQJ dGZfZXNwOworCWludAl0Zl9zczsKKwkvKiBiZWxvdyBvbmx5IHdoZW4gc3dpdGNoaW5nIG91dCBv ZiBWTTg2IG1vZGUgKi8KKwlpbnQJdGZfdm04Nl9lczsKKwlpbnQJdGZfdm04Nl9kczsKKwlpbnQJ dGZfdm04Nl9mczsKKwlpbnQJdGZfdm04Nl9nczsKK307CisjZW5kaWYgLyogX19pMzg2X18gKi8K KworI2lmZGVmIF9fYW1kNjRfXworLyoKKyAqIEV4Y2VwdGlvbi9UcmFwIFN0YWNrIEZyYW1lCisg KgorICogVGhlIG9yZGVyaW5nIG9mIHRoaXMgaXMgc3BlY2lmaWNhbGx5IHNvIHRoYXQgd2UgY2Fu IHRha2UgZmlyc3QgNgorICogdGhlIHN5c2NhbGwgYXJndW1lbnRzIGRpcmVjdGx5IGZyb20gdGhl IGJlZ2lubmluZyBvZiB0aGUgZnJhbWUuCisgKi8KKworc3RydWN0IHRyYXBmcmFtZSB7CisJcmVn aXN0ZXJfdAl0Zl9yZGk7CisJcmVnaXN0ZXJfdAl0Zl9yc2k7CisJcmVnaXN0ZXJfdAl0Zl9yZHg7 CisJcmVnaXN0ZXJfdAl0Zl9yY3g7CisJcmVnaXN0ZXJfdAl0Zl9yODsKKwlyZWdpc3Rlcl90CXRm X3I5OworCXJlZ2lzdGVyX3QJdGZfcmF4OworCXJlZ2lzdGVyX3QJdGZfcmJ4OworCXJlZ2lzdGVy X3QJdGZfcmJwOworCXJlZ2lzdGVyX3QJdGZfcjEwOworCXJlZ2lzdGVyX3QJdGZfcjExOworCXJl Z2lzdGVyX3QJdGZfcjEyOworCXJlZ2lzdGVyX3QJdGZfcjEzOworCXJlZ2lzdGVyX3QJdGZfcjE0 OworCXJlZ2lzdGVyX3QJdGZfcjE1OworCXVpbnQzMl90CXRmX3RyYXBubzsKKwl1aW50MTZfdAl0 Zl9mczsKKwl1aW50MTZfdAl0Zl9nczsKKwlyZWdpc3Rlcl90CXRmX2FkZHI7CisJdWludDMyX3QJ dGZfZmxhZ3M7CisJdWludDE2X3QJdGZfZXM7CisJdWludDE2X3QJdGZfZHM7CisJLyogYmVsb3cg cG9ydGlvbiBkZWZpbmVkIGluIGhhcmR3YXJlICovCisJcmVnaXN0ZXJfdAl0Zl9lcnI7CisJcmVn aXN0ZXJfdAl0Zl9yaXA7CisJcmVnaXN0ZXJfdAl0Zl9jczsKKwlyZWdpc3Rlcl90CXRmX3JmbGFn czsKKwlyZWdpc3Rlcl90CXRmX3JzcDsKKwlyZWdpc3Rlcl90CXRmX3NzOworfTsKKworI2RlZmlu ZQlURl9IQVNTRUdTCTB4MQorI2RlZmluZQlURl9IQVNCQVNFUwkweDIKKyNkZWZpbmUJVEZfSEFT RlBYU1RBVEUJMHg0CisjZW5kaWYgLyogX19hbWQ2NF9fICovCisKKyNlbmRpZiAvKiBfTUFDSElO RV9GUkFNRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4 Ni9pbml0LmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9pbml0LmgKLS0tIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9pbml0LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvaW5pdC5oCTIw MTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTggQEAKKy8qLQor ICogQ29weXJpZ2h0IChjKSAyMDEzIFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXgu Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBBUyBJUycnIEFO RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5 cy94ODYvaW5jbHVkZS9pbml0LmggMjcyMzEwIDIwMTQtMDktMzAgMTY6NDY6NDVaIHJveWdlciAk CisgKi8KKworI2lmbmRlZiBfX1g4Nl9JTklUX0hfXworI2RlZmluZSBfX1g4Nl9JTklUX0hfXwor LyoKKyAqIFN0cnVjdCBjb250YWluaW5nIHBvaW50ZXJzIHRvIGluaXQgZnVuY3Rpb25zIHdob3Nl CisgKiBpbXBsZW1lbnRhdGlvbiBpcyBydW4gdGltZSBzZWxlY3RhYmxlLiAgU2VsZWN0aW9uIGNh biBiZSBtYWRlLAorICogZm9yIGV4YW1wbGUsIGJhc2VkIG9uIGRldGVjdGlvbiBvZiBhIEJJT1Mg dmFyaWFudCBvcgorICogaHlwZXJ2aXNvciBlbnZpcm9ubWVudC4KKyAqLworc3RydWN0IGluaXRf b3BzIHsKKwljYWRkcl90CSgqcGFyc2VfcHJlbG9hZF9kYXRhKSh1X2ludDY0X3QpOworCXZvaWQJ KCplYXJseV9jbG9ja19zb3VyY2VfaW5pdCkodm9pZCk7CisJdm9pZAkoKmVhcmx5X2RlbGF5KShp bnQpOworCXZvaWQJKCpwYXJzZV9tZW1tYXApKGNhZGRyX3QsIHZtX3BhZGRyX3QgKiwgaW50ICop OworCXVfaW50CSgqbXBfYm9vdGFkZHJlc3MpKHVfaW50KTsKKwlpbnQJKCpzdGFydF9hbGxfYXBz KSh2b2lkKTsKKwl2b2lkCSgqbXNpX2luaXQpKHZvaWQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBp bml0X29wcyBpbml0X29wczsKKworLyogS25vYiB0byBkaXNhYmxlIGFjcGlfY3B1IGRldmljZXMg Ki8KK2V4dGVybiBib29sIGFjcGlfY3B1X2Rpc2FibGVkOworCisvKiBLbm9iIHRvIGRpc2FibGUg YWNwaV9ocGV0IGRldmljZSAqLworZXh0ZXJuIGJvb2wgYWNwaV9ocGV0X2Rpc2FibGVkOworCisv KiBLbm9iIHRvIGRpc2FibGUgYWNwaV90aW1lciBkZXZpY2UgKi8KK2V4dGVybiBib29sIGFjcGlf dGltZXJfZGlzYWJsZWQ7CisKKyNlbmRpZiAvKiBfX1g4Nl9JTklUX0hfXyAqLwpkaWZmIC11IC1y IC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9sZWdhY3l2YXIuaCAvdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAveDg2L2xlZ2FjeXZhci5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC94ODYvbGVnYWN5dmFyLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvbGVnYWN5dmFyLmgJMjAxNi0w OS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw3MSBAQAorLyotCisgKiBD b3B5cmlnaHQgKGMpIDIwMDAgUGV0ZXIgV2VtbSA8cGV0ZXJARnJlZUJTRC5vcmc+CisgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1 ZGUvbGVnYWN5dmFyLmggMjk0ODgzIDIwMTYtMDEtMjcgMDI6MjM6NTRaIGpoaWJiaXRzICQKKyAq LworCisjaWZuZGVmIF9YODZfTEVHQUNZVkFSX0hfCisjZGVmaW5lCV9YODZfTEVHQUNZVkFSX0hf CisKK2VudW0gbGVnYWN5X2RldmljZV9pdmFycyB7CisJTEVHQUNZX0lWQVJfUENJRE9NQUlOLAor CUxFR0FDWV9JVkFSX1BDSUJVUywKKwlMRUdBQ1lfSVZBUl9QQ0lTTE9ULAorCUxFR0FDWV9JVkFS X1BDSUZVTkMKK307CisKKyNkZWZpbmUgTEVHQUNZX0FDQ0VTU09SKHZhciwgaXZhciwgdHlwZSkJ CQkJXAorICAgIF9fQlVTX0FDQ0VTU09SKGxlZ2FjeSwgdmFyLCBMRUdBQ1ksIGl2YXIsIHR5cGUp CisKK0xFR0FDWV9BQ0NFU1NPUihwY2lkb21haW4sCQlQQ0lET01BSU4sCXVpbnQzMl90KQorTEVH QUNZX0FDQ0VTU09SKHBjaWJ1cywJCQlQQ0lCVVMsCQl1aW50MzJfdCkKK0xFR0FDWV9BQ0NFU1NP UihwY2lzbG90LAkJUENJU0xPVCwJaW50KQorTEVHQUNZX0FDQ0VTU09SKHBjaWZ1bmMsCQlQQ0lG VU5DLAlpbnQpCisKKyN1bmRlZiBMRUdBQ1lfQUNDRVNTT1IKKworaW50CWxlZ2FjeV9wY2liX21h eHNsb3RzKGRldmljZV90IGRldik7Cit1aW50MzJfdCBsZWdhY3lfcGNpYl9yZWFkX2NvbmZpZyhk ZXZpY2VfdCBkZXYsIHVfaW50IGJ1cywgdV9pbnQgc2xvdCwKKyAgICB1X2ludCBmdW5jLCB1X2lu dCByZWcsIGludCBieXRlcyk7CitpbnQJbGVnYWN5X3BjaWJfcmVhZF9pdmFyKGRldmljZV90IGRl diwgZGV2aWNlX3QgY2hpbGQsIGludCB3aGljaCwKKyAgICB1aW50cHRyX3QgKnJlc3VsdCk7Cit2 b2lkCWxlZ2FjeV9wY2liX3dyaXRlX2NvbmZpZyhkZXZpY2VfdCBkZXYsIHVfaW50IGJ1cywgdV9p bnQgc2xvdCwKKyAgICB1X2ludCBmdW5jLCB1X2ludCByZWcsIHVpbnQzMl90IGRhdGEsIGludCBi eXRlcyk7CitpbnQJbGVnYWN5X3BjaWJfd3JpdGVfaXZhcihkZXZpY2VfdCBkZXYsIGRldmljZV90 IGNoaWxkLCBpbnQgd2hpY2gsCisgICAgdWludHB0cl90IHZhbHVlKTsKK3N0cnVjdCByZXNvdXJj ZSAqbGVnYWN5X3BjaWJfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGls ZCwKKyAgICBpbnQgdHlwZSwgaW50ICpyaWQsIHJtYW5fcmVzX3Qgc3RhcnQsIHJtYW5fcmVzX3Qg ZW5kLCBybWFuX3Jlc190IGNvdW50LAorICAgIHVfaW50IGZsYWdzKTsKK2ludAlsZWdhY3lfcGNp Yl9hZGp1c3RfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUs CisgICAgc3RydWN0IHJlc291cmNlICpyLCBybWFuX3Jlc190IHN0YXJ0LCBybWFuX3Jlc190IGVu ZCk7CitpbnQJbGVnYWN5X3BjaWJfcmVsZWFzZV9yZXNvdXJjZShkZXZpY2VfdCBkZXYsIGRldmlj ZV90IGNoaWxkLCBpbnQgdHlwZSwKKyAgICBpbnQgcmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIpOwor aW50CWxlZ2FjeV9wY2liX2FsbG9jX21zaShkZXZpY2VfdCBwY2liLCBkZXZpY2VfdCBkZXYsIGlu dCBjb3VudCwKKyAgICBpbnQgbWF4Y291bnQsIGludCAqaXJxcyk7CitpbnQJbGVnYWN5X3BjaWJf YWxsb2NfbXNpeChkZXZpY2VfdCBwY2liLCBkZXZpY2VfdCBkZXYsIGludCAqaXJxKTsKK2ludAls ZWdhY3lfcGNpYl9tYXBfbXNpKGRldmljZV90IHBjaWIsIGRldmljZV90IGRldiwgaW50IGlycSwK KyAgICB1aW50NjRfdCAqYWRkciwgdWludDMyX3QgKmRhdGEpOworCisjZW5kaWYgLyogIV9YODZf TEVHQUNZVkFSX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv eDg2L21jYS5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvbWNhLmgKLS0tIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tY2EuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tY2EuaAkyMDE2 LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDU2IEBACisvKi0KKyAq IENvcHlyaWdodCAoYykgMjAwOSBIdWRzb24gUml2ZXIgVHJhZGluZyBMTEMKKyAqIFdyaXR0ZW4g Ynk6IEpvaG4gSC4gQmFsZHdpbiA8amhiQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB VVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH RS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL21jYS5oIDI4 MTg4NyAyMDE1LTA0LTIzIDE0OjIyOjIwWiBqaGIgJAorICovCisKKyNpZm5kZWYgX19YODZfTUNB X0hfXworI2RlZmluZQlfX1g4Nl9NQ0FfSF9fCisKK3N0cnVjdCBtY2FfcmVjb3JkIHsKKwl1aW50 NjRfdAltcl9zdGF0dXM7CisJdWludDY0X3QJbXJfYWRkcjsKKwl1aW50NjRfdAltcl9taXNjOwor CXVpbnQ2NF90CW1yX3RzYzsKKwlpbnQJCW1yX2FwaWNfaWQ7CisJaW50CQltcl9iYW5rOworCXVp bnQ2NF90CW1yX21jZ19jYXA7CisJdWludDY0X3QJbXJfbWNnX3N0YXR1czsKKwlpbnQJCW1yX2Nw dV9pZDsKKwlpbnQJCW1yX2NwdV92ZW5kb3JfaWQ7CisJaW50CQltcl9jcHU7Cit9OworCisjaWZk ZWYgX0tFUk5FTAorCit2b2lkCWNtY19pbnRyKHZvaWQpOwordm9pZAltY2FfaW5pdCh2b2lkKTsK K3ZvaWQJbWNhX2ludHIodm9pZCk7Cit2b2lkCW1jYV9yZXN1bWUodm9pZCk7CisKKyNlbmRpZgor CisjZW5kaWYgLyogIV9fWDg2X01DQV9IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC94ODYvbWV0YWRhdGEuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv eDg2L21ldGFkYXRhLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tZXRhZGF0 YS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAveDg2L21ldGFkYXRhLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAw MDAgKzAxMDAKQEAgLTAsMCArMSw1NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0 ZXIgV2VtbSA8cGV0ZXJARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvbWV0YWRhdGEuaCAyOTMzNDMg MjAxNi0wMS0wNyAxOTo0NzoyNlogZW1hc3RlICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX01F VEFEQVRBX0hfCisjZGVmaW5lCV9NQUNISU5FX01FVEFEQVRBX0hfCisKKyNkZWZpbmUJTU9ESU5G T01EX1NNQVAJCTB4MTAwMQorI2RlZmluZQlNT0RJTkZPTURfU01BUF9YQVRUUgkweDEwMDIKKyNk ZWZpbmUJTU9ESU5GT01EX0RUQlAJCTB4MTAwMworI2RlZmluZQlNT0RJTkZPTURfRUZJX01BUAkw eDEwMDQKKyNkZWZpbmUJTU9ESU5GT01EX0VGSV9GQgkweDEwMDUKKyNkZWZpbmUJTU9ESU5GT01E X01PRFVMRVAJMHgxMDA2CisKK3N0cnVjdCBlZmlfbWFwX2hlYWRlciB7CisJdWludDY0X3QJbWVt b3J5X3NpemU7CisJdWludDY0X3QJZGVzY3JpcHRvcl9zaXplOworCXVpbnQzMl90CWRlc2NyaXB0 b3JfdmVyc2lvbjsKK307CisKK3N0cnVjdCBlZmlfZmIgeworCXVpbnQ2NF90CWZiX2FkZHI7CisJ dWludDY0X3QJZmJfc2l6ZTsKKwl1aW50MzJfdAlmYl9oZWlnaHQ7CisJdWludDMyX3QJZmJfd2lk dGg7CisJdWludDMyX3QJZmJfc3RyaWRlOworCXVpbnQzMl90CWZiX21hc2tfcmVkOworCXVpbnQz Ml90CWZiX21hc2tfZ3JlZW47CisJdWludDMyX3QJZmJfbWFza19ibHVlOworCXVpbnQzMl90CWZi X21hc2tfcmVzZXJ2ZWQ7Cit9OworCisjZW5kaWYgLyogIV9NQUNISU5FX01FVEFEQVRBX0hfICov CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaCAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaAotLS0gdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAveDg2L21wdGFibGUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9tcHRhYmxlLmgJMjAx Ni0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyMDQgQEAKKy8qLQor ICogQ29weXJpZ2h0IChjKSAxOTk2LCBieSBTdGV2ZSBQYXNzZQorICogQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgZGV2ZWxvcGVyIG1heSBO T1QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvbXB0YWJsZS5oIDI1OTIyOCAy MDEzLTEyLTExIDIxOjE5OjA0WiBqaGIgJAorICovCisKKyNpZm5kZWYgX19NQUNISU5FX01QVEFC TEVfSF9fCisjZGVmaW5lCV9fTUFDSElORV9NUFRBQkxFX0hfXworCitlbnVtIGJ1c1R5cGVzIHsK KyAgICBOT0JVUyA9IDAsCisgICAgQ0JVUyA9IDEsCisgICAgQ0JVU0lJID0gMiwKKyAgICBFSVNB ID0gMywKKyAgICBJU0EgPSA2LAorICAgIE1DQSA9IDksCisgICAgUENJID0gMTMsCisgICAgWFBS RVNTID0gMTgsCisgICAgTUFYX0JVU1RZUEUgPSAxOCwKKyAgICBVTktOT1dOX0JVU1RZUEUgPSAw eGZmCit9OworCisvKiBNUCBGbG9hdGluZyBQb2ludGVyIFN0cnVjdHVyZSAqLwordHlwZWRlZiBz dHJ1Y3QgTVBGUFMgeworCXVpbnQ4X3QJc2lnbmF0dXJlWzRdOworCXVpbnQzMl90IHBhcDsKKwl1 aW50OF90CWxlbmd0aDsKKwl1aW50OF90CXNwZWNfcmV2OworCXVpbnQ4X3QJY2hlY2tzdW07CisJ dWludDhfdAljb25maWdfdHlwZTsKKwl1aW50OF90CW1wZmIyOworCXVpbnQ4X3QJbXBmYjM7CisJ dWludDhfdAltcGZiNDsKKwl1aW50OF90CW1wZmI1OworfSBfX3BhY2tlZCAqbXBmcHNfdDsKKwor I2RlZmluZQlNUEZCMl9JTUNSX1BSRVNFTlQJMHg4MAorI2RlZmluZQlNUEZCMl9NVUxfQ0xLX1NS Q1MJMHg0MAorCisvKiBNUCBDb25maWd1cmF0aW9uIFRhYmxlIEhlYWRlciAqLwordHlwZWRlZiBz dHJ1Y3QgTVBDVEggeworCXVpbnQ4X3QJc2lnbmF0dXJlWzRdOworCXVpbnQxNl90IGJhc2VfdGFi bGVfbGVuZ3RoOworCXVpbnQ4X3QJc3BlY19yZXY7CisJdWludDhfdAljaGVja3N1bTsKKwl1aW50 OF90CW9lbV9pZFs4XTsKKwl1aW50OF90CXByb2R1Y3RfaWRbMTJdOworCXVpbnQzMl90IG9lbV90 YWJsZV9wb2ludGVyOworCXVpbnQxNl90IG9lbV90YWJsZV9zaXplOworCXVpbnQxNl90IGVudHJ5 X2NvdW50OworCXVpbnQzMl90IGFwaWNfYWRkcmVzczsKKwl1aW50MTZfdCBleHRlbmRlZF90YWJs ZV9sZW5ndGg7CisJdWludDhfdAlleHRlbmRlZF90YWJsZV9jaGVja3N1bTsKKwl1aW50OF90CXJl c2VydmVkOworfSBfX3BhY2tlZCAqbXBjdGhfdDsKKworLyogQmFzZSB0YWJsZSBlbnRyaWVzICov CisKKyNkZWZpbmUJTVBDVF9FTlRSWV9QUk9DRVNTT1IJMAorI2RlZmluZQlNUENUX0VOVFJZX0JV UwkJMQorI2RlZmluZQlNUENUX0VOVFJZX0lPQVBJQwkyCisjZGVmaW5lCU1QQ1RfRU5UUllfSU5U CQkzCisjZGVmaW5lCU1QQ1RfRU5UUllfTE9DQUxfSU5UCTQKKwordHlwZWRlZiBzdHJ1Y3QgUFJP Q0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlhcGljX2lkOworCXVpbnQ4X3QJYXBp Y192ZXJzaW9uOworCXVpbnQ4X3QJY3B1X2ZsYWdzOworCXVpbnQzMl90IGNwdV9zaWduYXR1cmU7 CisJdWludDMyX3QgZmVhdHVyZV9mbGFnczsKKwl1aW50MzJfdCByZXNlcnZlZDE7CisJdWludDMy X3QgcmVzZXJ2ZWQyOworfSBfX3BhY2tlZCAqcHJvY19lbnRyeV9wdHI7CisKKyNkZWZpbmUgUFJP Q0VOVFJZX0ZMQUdfRU4JMHgwMQorI2RlZmluZSBQUk9DRU5UUllfRkxBR19CUAkweDAyCisKK3R5 cGVkZWYgc3RydWN0IEJVU0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlidXNfaWQ7 CisJdWludDhfdAlidXNfdHlwZVs2XTsKK30gX19wYWNrZWQgKmJ1c19lbnRyeV9wdHI7CisKK3R5 cGVkZWYgc3RydWN0IElPQVBJQ0VOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlhcGlj X2lkOworCXVpbnQ4X3QJYXBpY192ZXJzaW9uOworCXVpbnQ4X3QJYXBpY19mbGFnczsKKwl1aW50 MzJfdCBhcGljX2FkZHJlc3M7Cit9IF9fcGFja2VkICppb19hcGljX2VudHJ5X3B0cjsKKworI2Rl ZmluZSBJT0FQSUNFTlRSWV9GTEFHX0VOCTB4MDEKKwordHlwZWRlZiBzdHJ1Y3QgSU5URU5UUlkg eworCXVpbnQ4X3QJdHlwZTsKKwl1aW50OF90CWludF90eXBlOworCXVpbnQxNl90IGludF9mbGFn czsKKwl1aW50OF90CXNyY19idXNfaWQ7CisJdWludDhfdAlzcmNfYnVzX2lycTsKKwl1aW50OF90 CWRzdF9hcGljX2lkOworCXVpbnQ4X3QJZHN0X2FwaWNfaW50OworfSBfX3BhY2tlZCAqaW50X2Vu dHJ5X3B0cjsKKworI2RlZmluZQlJTlRFTlRSWV9UWVBFX0lOVCAgCTAKKyNkZWZpbmUJSU5URU5U UllfVFlQRV9OTUkJMQorI2RlZmluZQlJTlRFTlRSWV9UWVBFX1NNSQkyCisjZGVmaW5lCUlOVEVO VFJZX1RZUEVfRVhUSU5UCTMKKworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19QT0xBUklUWQkJCTB4 MworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19QT0xBUklUWV9DT05GT1JNCQkweDAKKyNkZWZpbmUJ SU5URU5UUllfRkxBR1NfUE9MQVJJVFlfQUNUSVZFSEkJMHgxCisjZGVmaW5lCUlOVEVOVFJZX0ZM QUdTX1BPTEFSSVRZX0FDVElWRUxPCTB4MworI2RlZmluZQlJTlRFTlRSWV9GTEFHU19UUklHR0VS CQkJMHhjCisjZGVmaW5lCUlOVEVOVFJZX0ZMQUdTX1RSSUdHRVJfQ09ORk9STQkJMHgwCisjZGVm aW5lCUlOVEVOVFJZX0ZMQUdTX1RSSUdHRVJfRURHRQkJMHg0CisjZGVmaW5lCUlOVEVOVFJZX0ZM QUdTX1RSSUdHRVJfTEVWRUwJCTB4YworCisvKiBFeHRlbmRlZCB0YWJsZSBlbnRyaWVzICovCisK K3R5cGVkZWYJc3RydWN0IEVYVEVOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJdWludDhfdAlsZW5n dGg7Cit9IF9fcGFja2VkICpleHRfZW50cnlfcHRyOworCisjZGVmaW5lCU1QQ1RfRVhURU5UUllf U0FTCTB4ODAKKyNkZWZpbmUJTVBDVF9FWFRFTlRSWV9CSEQJMHg4MQorI2RlZmluZQlNUENUX0VY VEVOVFJZX0NCQVNNCTB4ODIKKwordHlwZWRlZiBzdHJ1Y3QgU0FTRU5UUlkgeworCXVpbnQ4X3QJ dHlwZTsKKwl1aW50OF90CWxlbmd0aDsKKwl1aW50OF90CWJ1c19pZDsKKwl1aW50OF90CWFkZHJl c3NfdHlwZTsKKwl1aW50NjRfdCBhZGRyZXNzX2Jhc2U7CisJdWludDY0X3QgYWRkcmVzc19sZW5n dGg7Cit9IF9fcGFja2VkICpzYXNfZW50cnlfcHRyOworCisjZGVmaW5lCVNBU0VOVFJZX1RZUEVf SU8JMAorI2RlZmluZQlTQVNFTlRSWV9UWVBFX01FTU9SWQkxCisjZGVmaW5lCVNBU0VOVFJZX1RZ UEVfUFJFRkVUQ0gJMgorCit0eXBlZGVmIHN0cnVjdCBCSERFTlRSWSB7CisJdWludDhfdAl0eXBl OworCXVpbnQ4X3QJbGVuZ3RoOworCXVpbnQ4X3QJYnVzX2lkOworCXVpbnQ4X3QJYnVzX2luZm87 CisJdWludDhfdAlwYXJlbnRfYnVzOworCXVpbnQ4X3QJcmVzZXJ2ZWRbM107Cit9IF9fcGFja2Vk ICpiaGRfZW50cnlfcHRyOworCisjZGVmaW5lCUJIREVOVFJZX0lORk9fU1VCVFJBQ1RJVkVfREVD T0RFCTB4MQorCit0eXBlZGVmIHN0cnVjdCBDQkFTTUVOVFJZIHsKKwl1aW50OF90CXR5cGU7CisJ dWludDhfdAlsZW5ndGg7CisJdWludDhfdAlidXNfaWQ7CisJdWludDhfdAlhZGRyZXNzX21vZDsK Kwl1aW50MzJfdCBwcmVkZWZpbmVkX3JhbmdlOworfSBfX3BhY2tlZCAqY2Jhc21fZW50cnlfcHRy OworCisjZGVmaW5lCUNCQVNNRU5UUllfQUREUkVTU19NT0RfQURECQkweDAKKyNkZWZpbmUJQ0JB U01FTlRSWV9BRERSRVNTX01PRF9TVUJUUkFDVAkJMHgxCisKKyNkZWZpbmUJQ0JBU01FTlRSWV9S QU5HRV9JU0FfSU8JCTAKKyNkZWZpbmUJQ0JBU01FTlRSWV9SQU5HRV9WR0FfSU8JCTEKKworI2lm ZGVmIF9LRVJORUwKK3N0cnVjdCBtcHRhYmxlX2hvc3RiX3NvZnRjIHsKKyNpZmRlZiBORVdfUENJ QgorCXN0cnVjdCBwY2liX2hvc3RfcmVzb3VyY2VzIHNjX2hvc3RfcmVzOworCWludAkJc2NfZGVj b2Rlc192Z2FfaW87CisJaW50CQlzY19kZWNvZGVzX2lzYV9pbzsKKyNlbmRpZgorfTsKKworI2lm ZGVmIE5FV19QQ0lCCit2b2lkCW1wdGFibGVfcGNpX2hvc3RfcmVzX2luaXQoZGV2aWNlX3QgcGNp Yik7CisjZW5kaWYKK2ludAltcHRhYmxlX3BjaV9wcm9iZV90YWJsZShpbnQgYnVzKTsKK2ludAlt cHRhYmxlX3BjaV9yb3V0ZV9pbnRlcnJ1cHQoZGV2aWNlX3QgcGNpYiwgZGV2aWNlX3QgZGV2LCBp bnQgcGluKTsKKyNlbmRpZgorI2VuZGlmIC8qICFfX01BQ0hJTkVfTVBUQUJMRV9IX18gKi8KZGlm ZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvb2Z3X21hY2hkZXAuaCAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L29md19tYWNoZGVwLmgKLS0tIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9vZndfbWFjaGRlcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAu MDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L29md19t YWNoZGVwLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw0 MiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgSnVuaXBlciBOZXR3b3JrcywgSW5jLgor ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisg KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsg TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4 Ni9pbmNsdWRlL29md19tYWNoZGVwLmggMjg3MjYwIDIwMTUtMDgtMjggMTU6NDE6MDlaIGltcCAk CisgKi8KKworI2lmbmRlZiBfTUFDSElORV9PRldfTUFDSERFUF9IXworI2RlZmluZSBfTUFDSElO RV9PRldfTUFDSERFUF9IXworCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDx2 bS92bS5oPgorCit0eXBlZGVmCXVpbnQzMl90CWNlbGxfdDsKKworc3RydWN0IG1lbV9yZWdpb24g eworCXZtX29mZnNldF90CW1yX3N0YXJ0OworCXZtX3NpemVfdAltcl9zaXplOworfTsKKworI2Vu ZGlmIC8qIF9NQUNISU5FX09GV19NQUNIREVQX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAveDg2L3BjaV9jZmdyZWcuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9u ZXRtYXAveDg2L3BjaV9jZmdyZWcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2 L3BjaV9jZmdyZWcuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9wY2lfY2ZncmVnLmgJMjAxNi0wOS0yOSAwMDoy NDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2MCBAQAorLyotCisgKiBDb3B5cmlnaHQg KGMpIDE5OTcsIFN0ZWZhbiBFc3NlciA8c2VAZnJlZWJzZC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgor ICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF IElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElO Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVC U0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wY2lfY2ZncmVnLmggMjk0ODgzIDIwMTYt MDEtMjcgMDI6MjM6NTRaIGpoaWJiaXRzICQKKyAqCisgKi8KKworI2lmbmRlZiBfX1g4Nl9QQ0lf Q0ZHUkVHX0hfXworI2RlZmluZQlfX1g4Nl9QQ0lfQ0ZHUkVHX0hfXworCisjZGVmaW5lIENPTkYx X0FERFJfUE9SVCAgICAweDBjZjgKKyNkZWZpbmUgQ09ORjFfREFUQV9QT1JUICAgIDB4MGNmYwor CisjZGVmaW5lIENPTkYxX0VOQUJMRSAgICAgICAweDgwMDAwMDAwdWwKKyNkZWZpbmUgQ09ORjFf RU5BQkxFX0NISyAgIDB4ODAwMDAwMDB1bAorI2RlZmluZSBDT05GMV9FTkFCTEVfTVNLICAgMHg3 ZjAwMDAwMHVsCisjZGVmaW5lIENPTkYxX0VOQUJMRV9DSEsxICAweGZmMDAwMDAxdWwKKyNkZWZp bmUgQ09ORjFfRU5BQkxFX01TSzEgIDB4ODAwMDAwMDF1bAorI2RlZmluZSBDT05GMV9FTkFCTEVf UkVTMSAgMHg4MDAwMDAwMHVsCisKKyNkZWZpbmUgQ09ORjJfRU5BQkxFX1BPUlQgIDB4MGNmOAor I2RlZmluZSBDT05GMl9GT1JXQVJEX1BPUlQgMHgwY2ZhCisKKyNkZWZpbmUgQ09ORjJfRU5BQkxF X0NISyAgIDB4MGUKKyNkZWZpbmUgQ09ORjJfRU5BQkxFX1JFUyAgIDB4MGUKKworcm1hbl9yZXNf dAlob3N0Yl9hbGxvY19zdGFydChpbnQgdHlwZSwgcm1hbl9yZXNfdCBzdGFydCwgcm1hbl9yZXNf dCBlbmQsIHJtYW5fcmVzX3QgY291bnQpOworaW50CQlwY2llX2NmZ3JlZ29wZW4odWludDY0X3Qg YmFzZSwgdWludDhfdCBtaW5idXMsIHVpbnQ4X3QgbWF4YnVzKTsKK2ludAkJcGNpX2NmZ3JlZ29w ZW4odm9pZCk7Cit1X2ludDMyX3QJcGNpX2NmZ3JlZ3JlYWQoaW50IGJ1cywgaW50IHNsb3QsIGlu dCBmdW5jLCBpbnQgcmVnLCBpbnQgYnl0ZXMpOwordm9pZAkJcGNpX2NmZ3JlZ3dyaXRlKGludCBi dXMsIGludCBzbG90LCBpbnQgZnVuYywgaW50IHJlZywgdV9pbnQzMl90IGRhdGEsIGludCBieXRl cyk7CisjaWZkZWYgX19IQVZFX1BJUgordm9pZAkJcGNpX3Bpcl9vcGVuKHZvaWQpOworaW50CQlw Y2lfcGlyX3Byb2JlKGludCBidXMsIGludCByZXF1aXJlX3BhcnNlKTsKK2ludAkJcGNpX3Bpcl9y b3V0ZV9pbnRlcnJ1cHQoaW50IGJ1cywgaW50IGRldmljZSwgaW50IGZ1bmMsIGludCBwaW4pOwor I2VuZGlmCisKKyNlbmRpZiAvKiAhX19YODZfUENJX0NGR1JFR19IX18gKi8KZGlmZiAtdSAtciAt TiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHNsLmggL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL3g4Ni9wc2wuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Bz bC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAveDg2L3BzbC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICsw MTAwCkBAIC0wLDAgKzEsOTIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0 ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVp dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT VUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpcHNsLmgJNS4yIChCZXJrZWxleSkgMS8xOC85 MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wc2wuaCAyNTgxMzUg MjAxMy0xMS0xNCAxNTozNzoyMFogZW1hc3RlICQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX1BT TF9IXworI2RlZmluZQlfTUFDSElORV9QU0xfSF8KKworLyoKKyAqIDM4NiBwcm9jZXNzb3Igc3Rh dHVzIGxvbmd3b3JkLgorICovCisjZGVmaW5lCVBTTF9DCQkweDAwMDAwMDAxCS8qIGNhcnJ5IGJp dCAqLworI2RlZmluZQlQU0xfUEYJCTB4MDAwMDAwMDQJLyogcGFyaXR5IGJpdCAqLworI2RlZmlu ZQlQU0xfQUYJCTB4MDAwMDAwMTAJLyogYmNkIGNhcnJ5IGJpdCAqLworI2RlZmluZQlQU0xfWgkJ MHgwMDAwMDA0MAkvKiB6ZXJvIGJpdCAqLworI2RlZmluZQlQU0xfTgkJMHgwMDAwMDA4MAkvKiBu ZWdhdGl2ZSBiaXQgKi8KKyNkZWZpbmUJUFNMX1QJCTB4MDAwMDAxMDAJLyogdHJhY2UgZW5hYmxl IGJpdCAqLworI2RlZmluZQlQU0xfSQkJMHgwMDAwMDIwMAkvKiBpbnRlcnJ1cHQgZW5hYmxlIGJp dCAqLworI2RlZmluZQlQU0xfRAkJMHgwMDAwMDQwMAkvKiBzdHJpbmcgaW5zdHJ1Y3Rpb24gZGly ZWN0aW9uIGJpdCAqLworI2RlZmluZQlQU0xfVgkJMHgwMDAwMDgwMAkvKiBvdmVyZmxvdyBiaXQg Ki8KKyNkZWZpbmUJUFNMX0lPUEwJMHgwMDAwMzAwMAkvKiBpL28gcHJpdmlsZWdlIGxldmVsICov CisjZGVmaW5lCVBTTF9OVAkJMHgwMDAwNDAwMAkvKiBuZXN0ZWQgdGFzayBiaXQgKi8KKyNkZWZp bmUJUFNMX1JGCQkweDAwMDEwMDAwCS8qIHJlc3VtZSBmbGFnIGJpdCAqLworI2RlZmluZQlQU0xf Vk0JCTB4MDAwMjAwMDAJLyogdmlydHVhbCA4MDg2IG1vZGUgYml0ICovCisjZGVmaW5lCVBTTF9B QwkJMHgwMDA0MDAwMAkvKiBhbGlnbm1lbnQgY2hlY2tpbmcgKi8KKyNkZWZpbmUJUFNMX1ZJRgkJ MHgwMDA4MDAwMAkvKiB2aXJ0dWFsIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUJUFNMX1ZJ UAkJMHgwMDEwMDAwMAkvKiB2aXJ0dWFsIGludGVycnVwdCBwZW5kaW5nICovCisjZGVmaW5lCVBT TF9JRAkJMHgwMDIwMDAwMAkvKiBpZGVudGlmaWNhdGlvbiBiaXQgKi8KKworLyoKKyAqIFRoZSBp NDg2IG1hbnVhbCBzYXlzIHRoYXQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2UgcmVzZXJ2 ZWQgZmxhZ3MsCisgKiBidXQgdGhpcyBpcyB0b28gbXVjaCB0cm91YmxlIHNpbmNlIHRoZSByZXNl cnZlZCBmbGFncyBkZXBlbmQgb24gdGhlIGNwdQorICogYW5kIHNldHRpbmcgdGhlbSB0byB0aGVp ciBoaXN0b3JpY2FsIHZhbHVlcyB3b3JrcyBpbiBwcmFjdGljZS4KKyAqLworI2RlZmluZQlQU0xf UkVTRVJWRURfREVGQVVMVAkweDAwMDAwMDAyCisKKy8qCisgKiBJbml0aWFsIGZsYWdzIGZvciBr ZXJuZWwgYW5kIHVzZXIgbW9kZS4gIFRoZSBrZXJuZWwgbGF0ZXIgaW5oZXJpdHMKKyAqIFBTTF9J IGFuZCBzb21lIG90aGVyIGZsYWdzIGZyb20gdXNlciBtb2RlLgorICovCisjZGVmaW5lCVBTTF9L RVJORUwJUFNMX1JFU0VSVkVEX0RFRkFVTFQKKyNkZWZpbmUJUFNMX1VTRVIJKFBTTF9SRVNFUlZF RF9ERUZBVUxUIHwgUFNMX0kpCisKKy8qCisgKiBCaXRzIHRoYXQgY2FuIGJlIGNoYW5nZWQgaW4g dXNlciBtb2RlIG9uIDQ4NidzLiAgV2UgYWxsb3cgdGhlc2UgYml0cworICogdG8gYmUgY2hhbmdl ZCB1c2luZyBwdHJhY2UoKSwgc2lncmV0dXJuKCkgYW5kIHByb2Nmcy4gIFNldHRpbmcgUFNfTlQK KyAqIGlzIHVuZGVzaXJhYmxlIGJ1dCBpdCBtYXkgYXMgd2VsbCBiZSBhbGxvd2VkIHNpbmNlIHVz ZXJzIGNhbiBpbmZsaWN0CisgKiBpdCBvbiB0aGUga2VybmVsIGRpcmVjdGx5LiAgQ2hhbmdlcyB0 byBQU0xfQUMgYXJlIHNpbGVudGx5IGlnbm9yZWQgb24KKyAqIDM4NidzLgorICoKKyAqIFVzZXJz IGFyZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgcHJpdmlsZWdlZCBmbGFnIFBTTF9SRi4gIFRoZSBj cHUgc2V0cyBQU0xfUkYKKyAqIGluIHRmX2VmbGFncyBmb3IgZmF1bHRzLiAgRGVidWdnZXJzIHNo b3VsZCBzb21ldGltZXMgc2V0IGl0IHRoZXJlIHRvby4KKyAqIHRmX2VmbGFncyBpcyBrZXB0IGlu IHRoZSBzaWduYWwgY29udGV4dCBkdXJpbmcgc2lnbmFsIGhhbmRsaW5nIGFuZCB0aGVyZSBpcwor ICogbm8gb3RoZXIgcGxhY2UgdG8gcmVtZW1iZXIgaXQsIHNvIHRoZSBQU0xfUkYgYml0IG1heSBi ZSBjb3JydXB0ZWQgYnkgdGhlCisgKiBzaWduYWwgaGFuZGxlciB3aXRob3V0IHVzIGtub3dpbmcu ICBDb3JydXB0aW9uIG9mIHRoZSBQU0xfUkYgYml0IGF0IHdvcnN0CisgKiBjYXVzZXMgb25lIG1v cmUgb3Igb25lIGxlc3MgZGVidWdnZXIgdHJhcCwgc28gYWxsb3dpbmcgaXQgaXMgZmFpcmx5Cisg KiBoYXJtbGVzcy4gICAKKyAqLworI2RlZmluZQlQU0xfVVNFUkNIQU5HRSAoUFNMX0MgfCBQU0xf UEYgfCBQU0xfQUYgfCBQU0xfWiB8IFBTTF9OIHwgUFNMX1QgXAorCQkJfCBQU0xfRCB8IFBTTF9W IHwgUFNMX05UIHwgUFNMX1JGIHwgUFNMX0FDIHwgUFNMX0lEKQorCisjZW5kaWYgLyogIV9NQUNI SU5FX1BTTF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4 Ni9wdHJhY2UuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3B0cmFjZS5oCi0tLSB1 c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHRyYWNlLmgJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHRy YWNlLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw2NSBA QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcHRyYWNlLmgJOC4xIChCZXJrZWxl eSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9wdHJh Y2UuaCAyODQ5MTkgMjAxNS0wNi0yOSAwNzowNzoyNFoga2liICQKKyAqLworCisjaWZuZGVmIF9N QUNISU5FX1BUUkFDRV9IXworI2RlZmluZSBfTUFDSElORV9QVFJBQ0VfSF8KKworI2RlZmluZQlf X0hBVkVfUFRSQUNFX01BQ0hERVAKKworLyoKKyAqIE9uIGFtZDY0IChQVF9GSVJTVE1BQ0ggKyAw KSBhbmQgKFBUX0ZJUlNUTUFDSCArIDEpIGFyZSBvbGQgdmFsdWVzIGZvcgorICogUFRfR0VUWFNU QVRFX09MRCBhbmQgUFRfU0VUWFNUQVRFX09MRC4gIFRoZXkgc2hvdWxkIG5vdCBiZSAocmUpdXNl ZC4KKyAqLworCisjaWZkZWYgX19pMzg2X18KKyNkZWZpbmUJUFRfR0VUWE1NUkVHUwkoUFRfRklS U1RNQUNIICsgMCkKKyNkZWZpbmUJUFRfU0VUWE1NUkVHUwkoUFRfRklSU1RNQUNIICsgMSkKKyNl bmRpZgorI2lmZGVmIF9LRVJORUwKKyNkZWZpbmUJUFRfR0VUWFNUQVRFX09MRCAoUFRfRklSU1RN QUNIICsgMikKKyNkZWZpbmUJUFRfU0VUWFNUQVRFX09MRCAoUFRfRklSU1RNQUNIICsgMykKKyNl bmRpZgorI2RlZmluZQlQVF9HRVRYU1RBVEVfSU5GTyAoUFRfRklSU1RNQUNIICsgNCkKKyNkZWZp bmUJUFRfR0VUWFNUQVRFCShQVF9GSVJTVE1BQ0ggKyA1KQorI2RlZmluZQlQVF9TRVRYU1RBVEUJ KFBUX0ZJUlNUTUFDSCArIDYpCisjZGVmaW5lCVBUX0dFVEZTQkFTRQkoUFRfRklSU1RNQUNIICsg NykKKyNkZWZpbmUJUFRfU0VURlNCQVNFCShQVF9GSVJTVE1BQ0ggKyA4KQorI2RlZmluZQlQVF9H RVRHU0JBU0UJKFBUX0ZJUlNUTUFDSCArIDkpCisjZGVmaW5lCVBUX1NFVEdTQkFTRQkoUFRfRklS U1RNQUNIICsgMTApCisKKy8qIEFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgUFRfR0VUWFNUQVRFX0lO Rk8uICovCitzdHJ1Y3QgcHRyYWNlX3hzdGF0ZV9pbmZvIHsKKwl1aW50NjRfdAl4c2F2ZV9tYXNr OworCXVpbnQzMl90CXhzYXZlX2xlbjsKK307CisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9z cmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9wdmNsb2NrLmggL3Vzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL3g4Ni9wdmNsb2NrLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9w dmNsb2NrLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvcHZjbG9jay5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAw MDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTkgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE0 LCBCcnlhbiBWZW50ZWljaGVyIDxicnlhbnZARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN QUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvcHZjbG9j ay5oIDI3ODE4NCAyMDE1LTAyLTA0IDA4OjMzOjA0WiBicnlhbnYgJAorICovCisKKyNpZm5kZWYg WDg2X1BWQ0xPQ0sKKyNkZWZpbmUgWDg2X1BWQ0xPQ0sKKworc3RydWN0IHB2Y2xvY2tfdmNwdV90 aW1lX2luZm8geworCXVpbnQzMl90CXZlcnNpb247CisJdWludDMyX3QJcGFkMDsKKwl1aW50NjRf dAl0c2NfdGltZXN0YW1wOworCXVpbnQ2NF90CXN5c3RlbV90aW1lOworCXVpbnQzMl90CXRzY190 b19zeXN0ZW1fbXVsOworCWludDhfdAkJdHNjX3NoaWZ0OworCXVpbnQ4X3QJCWZsYWdzOworCXVp bnQ4X3QJCXBhZFsyXTsKK307CisKKyNkZWZpbmUgUFZDTE9DS19GTEFHX1RTQ19TVEFCTEUJCTB4 MDEKKyNkZWZpbmUgUFZDTE9DS19GTEFHX0dVRVNUX1BBU1VFRAkweDAyCisKK3N0cnVjdCBwdmNs b2NrX3dhbGxfY2xvY2sgeworCXVpbnQzMl90CXZlcnNpb247CisJdWludDMyX3QJc2VjOworCXVp bnQzMl90CW5zZWM7Cit9OworCit2b2lkCQlwdmNsb2NrX3Jlc3VtZSh2b2lkKTsKK3VpbnQ2NF90 CXB2Y2xvY2tfZ2V0X2xhc3RfY3ljbGVzKHZvaWQpOwordWludDY0X3QJcHZjbG9ja190c2NfZnJl cShzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqdGkpOwordWludDY0X3QJcHZjbG9ja19n ZXRfdGltZWNvdW50KHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICp0aSk7Cit2b2lkCQlw dmNsb2NrX2dldF93YWxsY2xvY2soc3RydWN0IHB2Y2xvY2tfd2FsbF9jbG9jayAqd2MsCisJCSAg ICBzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKKworI2VuZGlmCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9z eXMvbW9kdWxlcy9uZXRtYXAveDg2L3JlZy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94 ODYvcmVnLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9yZWcuaAkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL3g4Ni9yZWcuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCww ICsxLDI1NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbS4KKyAqIENv cHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZl ZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpv bGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkg bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAq ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBg YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXJl Zy5oCTUuNSAoQmVya2VsZXkpIDEvMTgvOTEKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMv eDg2L2luY2x1ZGUvcmVnLmggMjgxMjY2IDIwMTUtMDQtMDggMTY6MzA6NDVaIGpoYiAkCisgKi8K KworI2lmbmRlZiBfTUFDSElORV9SRUdfSF8KKyNkZWZpbmUJX01BQ0hJTkVfUkVHX0hfCisKKyNp bmNsdWRlIDxtYWNoaW5lL190eXBlcy5oPgorCisjaWZkZWYgX19pMzg2X18KKy8qCisgKiBJbmRp Y2VzIGZvciByZWdpc3RlcnMgaW4gYHN0cnVjdCB0cmFwZnJhbWUnIGFuZCBgc3RydWN0IHJlZ3Mn LgorICoKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQuICBJbiB0aGUga2VybmVsLCBp dCBpcyBvbmx5IHVzZWQgaW4gRlBVCisgKiBlbXVsYXRvcnMgdG8gY29udmVydCBmcm9tIHJlZ2lz dGVyIG51bWJlcnMgZW5jb2RlZCBpbiBpbnN0cnVjdGlvbnMgdG8KKyAqIHJlZ2lzdGVyIHZhbHVl cy4gIEV2ZXJ5dGhpbmcgZWxzZSBqdXN0IGFjY2Vzc2VzIHRoZSByZWxldmFudCBzdHJ1Y3QKKyAq IG1lbWJlcnMuICBJbiB1c2VybGFuZCwgZGVidWdnZXJzIHRlbmQgdG8gYWJ1c2UgdGhpcyBpbnRl cmZhY2Ugc2luY2UKKyAqIHRoZXkgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0IGBzdHJ1Y3QgcmVncycg aXMgYSBzdHJ1Y3QuICBJIGhvcGUgdGhleSBoYXZlCisgKiBzdG9wcGVkIGFjY2Vzc2luZyB0aGUg cmVnaXN0ZXJzIGluIHRoZSB0cmFwIGZyYW1lIHZpYSBQVF97UkVBRCxXUklURX1fVQorICogYW5k IHdlIGNhbiBzdG9wIHN1cHBvcnRpbmcgdGhlIHVzZXIgYXJlYSBzb29uLgorICovCisjZGVmaW5l CXRGUwkoMCkKKyNkZWZpbmUJdEVTCSgxKQorI2RlZmluZQl0RFMJKDIpCisjZGVmaW5lCXRFREkJ KDMpCisjZGVmaW5lCXRFU0kJKDQpCisjZGVmaW5lCXRFQlAJKDUpCisjZGVmaW5lCXRJU1AJKDYp CisjZGVmaW5lCXRFQlgJKDcpCisjZGVmaW5lCXRFRFgJKDgpCisjZGVmaW5lCXRFQ1gJKDkpCisj ZGVmaW5lCXRFQVgJKDEwKQorI2RlZmluZQl0RVJSCSgxMikKKyNkZWZpbmUJdEVJUAkoMTMpCisj ZGVmaW5lCXRDUwkoMTQpCisjZGVmaW5lCXRFRkxBR1MJKDE1KQorI2RlZmluZQl0RVNQCSgxNikK KyNkZWZpbmUJdFNTCSgxNykKKworLyoKKyAqIEluZGljZXMgZm9yIHJlZ2lzdGVycyBpbiBgc3Ry dWN0IHJlZ3MnIG9ubHkuCisgKgorICogU29tZSByZWdpc3RlcnMgbGl2ZSBpbiB0aGUgcGNiIGFu ZCBhcmUgb25seSBpbiBhbiAiYXJyYXkiIHdpdGggdGhlCisgKiBvdGhlciByZWdpc3RlcnMgaW4g YXBwbGljYXRpb24gaW50ZXJmYWNlcyB0aGF0IGNvcHkgYWxsIHRoZSByZWdpc3RlcnMKKyAqIHRv IG9yIGZyb20gYSBgc3RydWN0IHJlZ3MnLgorICovCisjZGVmaW5lCXRHUwkoMTgpCisjZW5kaWYg LyogX19pMzg2X18gKi8KKworLyogUmVuYW1lIHRoZSBzdHJ1Y3RzIGJlbG93IGRlcGVuZGluZyBv biB0aGUgbWFjaGluZSBhcmNoaXRlY3R1cmUuICovCisjaWZkZWYJX19pMzg2X18KKyNkZWZpbmUJ X19yZWczMgkJcmVnCisjZGVmaW5lCV9fZnByZWczMglmcHJlZworI2RlZmluZQlfX2RicmVnMzIJ ZGJyZWcKKyNlbHNlCisjZGVmaW5lCV9fcmVnMzIJCXJlZzMyCisjZGVmaW5lCV9fcmVnNjQJCXJl ZworI2RlZmluZQlfX2ZwcmVnMzIJZnByZWczMgorI2RlZmluZQlfX2ZwcmVnNjQJZnByZWcKKyNk ZWZpbmUJX19kYnJlZzMyCWRicmVnMzIKKyNkZWZpbmUJX19kYnJlZzY0CWRicmVnCisjZGVmaW5l CV9fSEFWRV9SRUczMgorI2VuZGlmCisKKy8qCisgKiBSZWdpc3RlciBzZXQgYWNjZXNzaWJsZSB2 aWEgL3Byb2MvJHBpZC9yZWdzIGFuZCBQVF97U0VULEdFVH1SRUdTLgorICovCitzdHJ1Y3QgX19y ZWczMiB7CisJX191aW50MzJfdAlyX2ZzOworCV9fdWludDMyX3QJcl9lczsKKwlfX3VpbnQzMl90 CXJfZHM7CisJX191aW50MzJfdAlyX2VkaTsKKwlfX3VpbnQzMl90CXJfZXNpOworCV9fdWludDMy X3QJcl9lYnA7CisJX191aW50MzJfdAlyX2lzcDsKKwlfX3VpbnQzMl90CXJfZWJ4OworCV9fdWlu dDMyX3QJcl9lZHg7CisJX191aW50MzJfdAlyX2VjeDsKKwlfX3VpbnQzMl90CXJfZWF4OworCV9f dWludDMyX3QJcl90cmFwbm87CisJX191aW50MzJfdAlyX2VycjsKKwlfX3VpbnQzMl90CXJfZWlw OworCV9fdWludDMyX3QJcl9jczsKKwlfX3VpbnQzMl90CXJfZWZsYWdzOworCV9fdWludDMyX3QJ cl9lc3A7CisJX191aW50MzJfdAlyX3NzOworCV9fdWludDMyX3QJcl9nczsKK307CisKK3N0cnVj dCBfX3JlZzY0IHsKKwlfX2ludDY0X3QJcl9yMTU7CisJX19pbnQ2NF90CXJfcjE0OworCV9faW50 NjRfdAlyX3IxMzsKKwlfX2ludDY0X3QJcl9yMTI7CisJX19pbnQ2NF90CXJfcjExOworCV9faW50 NjRfdAlyX3IxMDsKKwlfX2ludDY0X3QJcl9yOTsKKwlfX2ludDY0X3QJcl9yODsKKwlfX2ludDY0 X3QJcl9yZGk7CisJX19pbnQ2NF90CXJfcnNpOworCV9faW50NjRfdAlyX3JicDsKKwlfX2ludDY0 X3QJcl9yYng7CisJX19pbnQ2NF90CXJfcmR4OworCV9faW50NjRfdAlyX3JjeDsKKwlfX2ludDY0 X3QJcl9yYXg7CisJX191aW50MzJfdAlyX3RyYXBubzsKKwlfX3VpbnQxNl90CXJfZnM7CisJX191 aW50MTZfdAlyX2dzOworCV9fdWludDMyX3QJcl9lcnI7CisJX191aW50MTZfdAlyX2VzOworCV9f dWludDE2X3QJcl9kczsKKwlfX2ludDY0X3QJcl9yaXA7CisJX19pbnQ2NF90CXJfY3M7CisJX19p bnQ2NF90CXJfcmZsYWdzOworCV9faW50NjRfdAlyX3JzcDsKKwlfX2ludDY0X3QJcl9zczsKK307 CisKKy8qCisgKiBSZWdpc3RlciBzZXQgYWNjZXNzaWJsZSB2aWEgL3Byb2MvJHBpZC9mcHJlZ3Mu CisgKgorICogWFhYIHNob3VsZCBnZXQgc3RydWN0IGZyb20gZnB1LmguICBIZXJlIHdlIGdpdmUg YSBzbGlnaHRseQorICogc2ltcGxpZmllZCBzdHJ1Y3QuICBUaGlzIG1heSBiZSB0b28gbXVjaCBk ZXRhaWwuICBQZXJoYXBzCisgKiBhbiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBpcyBiZXN0Lgor ICovCitzdHJ1Y3QgX19mcHJlZzMyIHsKKwlfX3VpbnQzMl90CWZwcl9lbnZbN107CisJX191aW50 OF90CWZwcl9hY2NbOF1bMTBdOworCV9fdWludDMyX3QJZnByX2V4X3N3OworCV9fdWludDhfdAlm cHJfcGFkWzY0XTsKK307CisKK3N0cnVjdCBfX2ZwcmVnNjQgeworCV9fdWludDY0X3QJZnByX2Vu dls0XTsKKwlfX3VpbnQ4X3QJZnByX2FjY1s4XVsxNl07CisJX191aW50OF90CWZwcl94YWNjWzE2 XVsxNl07CisJX191aW50NjRfdAlmcHJfc3BhcmVbMTJdOworfTsKKworLyoKKyAqIFJlZ2lzdGVy IHNldCBhY2Nlc3NpYmxlIHZpYSBQVF9HRVRYTU1SRUdTIChpMzg2KS4KKyAqLworc3RydWN0IHht bXJlZyB7CisJLyoKKwkgKiBYWFggc2hvdWxkIGdldCBzdHJ1Y3QgZnJvbSBucHguaC4gIEhlcmUg d2UgZ2l2ZSBhIHNsaWdodGx5CisJICogc2ltcGxpZmllZCBzdHJ1Y3QuICBUaGlzIG1heSBiZSB0 b28gbXVjaCBkZXRhaWwuICBQZXJoYXBzCisJICogYW4gYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3Mg aXMgYmVzdC4KKwkgKi8KKwlfX3VpbnQzMl90CXhtbV9lbnZbOF07CisJX191aW50OF90CXhtbV9h Y2NbOF1bMTZdOworCV9fdWludDhfdAl4bW1fcmVnWzhdWzE2XTsKKwlfX3VpbnQ4X3QJeG1tX3Bh ZFsyMjRdOworfTsKKworLyoKKyAqIFJlZ2lzdGVyIHNldCBhY2Nlc3NpYmxlIHZpYSAvcHJvYy8k cGlkL2RicmVncy4KKyAqLworc3RydWN0IF9fZGJyZWczMiB7CisJX191aW50MzJfdAlkcls4XTsJ LyogZGVidWcgcmVnaXN0ZXJzICovCisJCQkJLyogSW5kZXggMC0zOiBkZWJ1ZyBhZGRyZXNzIHJl Z2lzdGVycyAqLworCQkJCS8qIEluZGV4IDQtNTogcmVzZXJ2ZWQgKi8KKwkJCQkvKiBJbmRleCA2 OiBkZWJ1ZyBzdGF0dXMgKi8KKwkJCQkvKiBJbmRleCA3OiBkZWJ1ZyBjb250cm9sICovCit9Owor CitzdHJ1Y3QgX19kYnJlZzY0IHsKKwlfX3VpbnQ2NF90CWRyWzE2XTsJLyogZGVidWcgcmVnaXN0 ZXJzICovCisJCQkJLyogSW5kZXggMC0zOiBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVycyAqLworCQkJ CS8qIEluZGV4IDQtNTogcmVzZXJ2ZWQgKi8KKwkJCQkvKiBJbmRleCA2OiBkZWJ1ZyBzdGF0dXMg Ki8KKwkJCQkvKiBJbmRleCA3OiBkZWJ1ZyBjb250cm9sICovCisJCQkJLyogSW5kZXggOC0xNTog cmVzZXJ2ZWQgKi8KK307CisKKyNkZWZpbmUJREJSRUdfRFI3X0xPQ0FMX0VOQUJMRQkweDAxCisj ZGVmaW5lCURCUkVHX0RSN19HTE9CQUxfRU5BQkxFCTB4MDIKKyNkZWZpbmUJREJSRUdfRFI3X0xF Tl8xCQkweDAwCS8qIDEgYnl0ZSBsZW5ndGggICAgICAgICAgKi8KKyNkZWZpbmUJREJSRUdfRFI3 X0xFTl8yCQkweDAxCisjZGVmaW5lCURCUkVHX0RSN19MRU5fNAkJMHgwMworI2RlZmluZQlEQlJF R19EUjdfTEVOXzgJCTB4MDIKKyNkZWZpbmUJREJSRUdfRFI3X0VYRUMJCTB4MDAJLyogYnJlYWsg b24gZXhlY3V0ZSAgICAgICAqLworI2RlZmluZQlEQlJFR19EUjdfV1JPTkxZCTB4MDEJLyogYnJl YWsgb24gd3JpdGUgICAgICAgICAqLworI2RlZmluZQlEQlJFR19EUjdfUkRXUgkJMHgwMwkvKiBi cmVhayBvbiByZWFkIG9yIHdyaXRlICovCisjZGVmaW5lCURCUkVHX0RSN19NQVNLKGkpCVwKKwko KF9fdV9yZWdpc3Rlcl90KSgweGYpIDw8ICgoaSkgKiA0ICsgMTYpIHwgMHgzIDw8IChpKSAqIDIp CisjZGVmaW5lCURCUkVHX0RSN19TRVQoaSwgbGVuLCBhY2Nlc3MsIGVuYWJsZSkJCQkJXAorCSgo X191X3JlZ2lzdGVyX3QpKChsZW4pIDw8IDIgfCAoYWNjZXNzKSkgPDwgKChpKSAqIDQgKyAxNikg fCAJXAorCShlbmFibGUpIDw8IChpKSAqIDIpCisjZGVmaW5lCURCUkVHX0RSN19HRAkJMHgyMDAw CisjZGVmaW5lCURCUkVHX0RSN19FTkFCTEVEKGQsIGkpCSgoKGQpICYgMHgzIDw8IChpKSAqIDIp ICE9IDApCisjZGVmaW5lCURCUkVHX0RSN19BQ0NFU1MoZCwgaSkJKChkKSA+PiAoKGkpICogNCAr IDE2KSAmIDB4MykKKyNkZWZpbmUJREJSRUdfRFI3X0xFTihkLCBpKQkoKGQpID4+ICgoaSkgKiA0 ICsgMTgpICYgMHgzKQorCisjZGVmaW5lCURCUkVHX0RSWChkLHgpCSgoZCktPmRyWyh4KV0pCS8q IHJlZmVyZW5jZSBkcjAgLSBkcjcgYnkKKwkJCQkJICAgcmVnaXN0ZXIgbnVtYmVyICovCisKKyN1 bmRlZiBfX3JlZzMyCisjdW5kZWYgX19yZWc2NAorI3VuZGVmIF9fZnByZWczMgorI3VuZGVmIF9f ZnByZWc2NAorI3VuZGVmIF9fZGJyZWczMgorI3VuZGVmIF9fZGJyZWc2NAorCisjaWZkZWYgX0tF Uk5FTAorLyoKKyAqIFhYWCB0aGVzZSBpbnRlcmZhY2VzIGFyZSBNSSwgc28gdGhleSBzaG91bGQg YmUgZGVjbGFyZWQgaW4gYSBNSSBwbGFjZS4KKyAqLworaW50CWZpbGxfcmVncyhzdHJ1Y3QgdGhy ZWFkICosIHN0cnVjdCByZWcgKik7CitpbnQJZmlsbF9mcmFtZV9yZWdzKHN0cnVjdCB0cmFwZnJh bWUgKiwgc3RydWN0IHJlZyAqKTsKK2ludAlzZXRfcmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVj dCByZWcgKik7CitpbnQJZmlsbF9mcHJlZ3Moc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWcg Kik7CitpbnQJc2V0X2ZwcmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBmcHJlZyAqKTsKK2lu dAlmaWxsX2RicmVncyhzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBkYnJlZyAqKTsKK2ludAlzZXRf ZGJyZWdzKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnICopOworI2lmZGVmIENPTVBBVF9G UkVFQlNEMzIKK2ludAlmaWxsX3JlZ3MzMihzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCByZWczMiAq KTsKK2ludAlzZXRfcmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHJlZzMyICopOworaW50 CWZpbGxfZnByZWdzMzIoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWczMiAqKTsKK2ludAlz ZXRfZnByZWdzMzIoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZnByZWczMiAqKTsKK2ludAlmaWxs X2RicmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnMzIgKik7CitpbnQJc2V0X2Ri cmVnczMyKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGRicmVnMzIgKik7CisjZW5kaWYKKyNlbmRp ZgorCisjZW5kaWYgLyogIV9NQUNISU5FX1JFR19IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zZWdtZW50cy5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC94ODYvc2VnbWVudHMuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Nl Z21lbnRzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2VnbWVudHMuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAw MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDI3OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5 ODksIDE5OTAgV2lsbGlhbSBGLiBKb2xpdHoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1 dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpvbGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5l aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog U1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTogQCgjKXNlZ21lbnRzLmgJNy4xIChCZXJrZWxleSkg NS85LzkxCisgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3NlZ21lbnRz LmggMjgyMjc0IDIwMTUtMDQtMzAgMTU6NDg6NDhaIGpoYiAkCisgKi8KKworI2lmbmRlZiBfWDg2 X1NFR01FTlRTX0hfCisjZGVmaW5lCV9YODZfU0VHTUVOVFNfSF8KKworLyoKKyAqIFg4NiBTZWdt ZW50YXRpb24gRGF0YSBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucworICovCisKKy8qCisgKiBT ZWxlY3RvcnMKKyAqLworI2RlZmluZQlTRUxfUlBMX01BU0sJMwkJLyogcmVxdWVzdGVyIHByaXYg bGV2ZWwgKi8KKyNkZWZpbmUJSVNQTChzKQkJKChzKSYzKQkJLyogcHJpb3JpdHkgbGV2ZWwgb2Yg YSBzZWxlY3RvciAqLworI2RlZmluZQlTRUxfS1BMCQkwCQkvKiBrZXJuZWwgcHJpb3JpdHkgbGV2 ZWwgKi8KKyNkZWZpbmUJU0VMX1VQTAkJMwkJLyogdXNlciBwcmlvcml0eSBsZXZlbCAqLworI2Rl ZmluZQlJU0xEVChzKQkoKHMpJlNFTF9MRFQpCS8qIGlzIGl0IGxvY2FsIG9yIGdsb2JhbCAqLwor I2RlZmluZQlTRUxfTERUCQk0CQkvKiBsb2NhbCBkZXNjcmlwdG9yIHRhYmxlICovCisjZGVmaW5l CUlEWFNFTChzKQkoKChzKT4+MykgJiAweDFmZmYpIC8qIGluZGV4IG9mIHNlbGVjdG9yICovCisj ZGVmaW5lCUxTRUwocyxyKQkoKChzKTw8MykgfCBTRUxfTERUIHwgcikgLyogYSBsb2NhbCBzZWxl Y3RvciAqLworI2RlZmluZQlHU0VMKHMscikJKCgocyk8PDMpIHwgcikJLyogYSBnbG9iYWwgc2Vs ZWN0b3IgKi8KKworLyoKKyAqIFVzZXIgc2VnbWVudCBkZXNjcmlwdG9ycyAoJWNzLCAlZHMgZXRj IGZvciBpMzg2IGFwcHMuIDY0IGJpdCB3aWRlKQorICogRm9yIGxvbmctbW9kZSBhcHBzLCAlY3Mg b25seSBoYXMgdGhlIGNvbmZvcm1pbmcgYml0IGluIHNkX3R5cGUsIHRoZSBzZF9kcGwsCisgKiBz ZF9wLCBzZF9sIGFuZCBzZF9kZWYzMiB3aGljaCBtdXN0IGJlIHplcm8pLiAgJWRzIG9ubHkgaGFz IHNkX3AuCisgKi8KK3N0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3IgeworCXVuc2lnbmVkIHNkX2xv bGltaXQ6MTY7CQkvKiBzZWdtZW50IGV4dGVudCAobHNiKSAqLworCXVuc2lnbmVkIHNkX2xvYmFz ZToyNDsJCS8qIHNlZ21lbnQgYmFzZSBhZGRyZXNzIChsc2IpICovCisJdW5zaWduZWQgc2RfdHlw ZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdW5zaWduZWQgc2RfZHBsOjI7CQkvKiBzZWdtZW50 IGRlc2NyaXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1bnNpZ25lZCBzZF9wOjE7CQkvKiBzZWdt ZW50IGRlc2NyaXB0b3IgcHJlc2VudCAqLworCXVuc2lnbmVkIHNkX2hpbGltaXQ6NDsJCS8qIHNl Z21lbnQgZXh0ZW50IChtc2IpICovCisJdW5zaWduZWQgc2RfeHg6MjsJCS8qIHVudXNlZCAqLwor CXVuc2lnbmVkIHNkX2RlZjMyOjE7CQkvKiBkZWZhdWx0IDMyIHZzIDE2IGJpdCBzaXplICovCisJ dW5zaWduZWQgc2RfZ3JhbjoxOwkJLyogbGltaXQgZ3JhbnVsYXJpdHkgKGJ5dGUvcGFnZSB1bml0 cykqLworCXVuc2lnbmVkIHNkX2hpYmFzZTo4OwkJLyogc2VnbWVudCBiYXNlIGFkZHJlc3MgICht c2IpICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgdXNlcl9zZWdtZW50X2Rlc2NyaXB0b3Igewor CXVuc2lnbmVkIHNkX2xvbGltaXQ6MTY7CQkvKiBzZWdtZW50IGV4dGVudCAobHNiKSAqLworCXVu c2lnbmVkIHNkX2xvYmFzZToyNDsJCS8qIHNlZ21lbnQgYmFzZSBhZGRyZXNzIChsc2IpICovCisJ dW5zaWduZWQgc2RfdHlwZTo1OwkJLyogc2VnbWVudCB0eXBlICovCisJdW5zaWduZWQgc2RfZHBs OjI7CQkvKiBzZWdtZW50IGRlc2NyaXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1bnNpZ25lZCBz ZF9wOjE7CQkvKiBzZWdtZW50IGRlc2NyaXB0b3IgcHJlc2VudCAqLworCXVuc2lnbmVkIHNkX2hp bGltaXQ6NDsJCS8qIHNlZ21lbnQgZXh0ZW50IChtc2IpICovCisJdW5zaWduZWQgc2RfeHg6MTsJ CS8qIHVudXNlZCAqLworCXVuc2lnbmVkIHNkX2xvbmc6MTsJCS8qIGxvbmcgbW9kZSAoY3Mgb25s eSkgKi8KKwl1bnNpZ25lZCBzZF9kZWYzMjoxOwkJLyogZGVmYXVsdCAzMiB2cyAxNiBiaXQgc2l6 ZSAqLworCXVuc2lnbmVkIHNkX2dyYW46MTsJCS8qIGxpbWl0IGdyYW51bGFyaXR5IChieXRlL3Bh Z2UgdW5pdHMpKi8KKwl1bnNpZ25lZCBzZF9oaWJhc2U6ODsJCS8qIHNlZ21lbnQgYmFzZSBhZGRy ZXNzICAobXNiKSAqLworfSBfX3BhY2tlZDsKKworI2RlZmluZQlVU0RfR0VUQkFTRShzZCkJCSgo KHNkKS0+c2RfbG9iYXNlKSB8IChzZCktPnNkX2hpYmFzZSA8PCAyNCkKKyNkZWZpbmUJVVNEX1NF VEJBU0Uoc2QsIGIpCShzZCktPnNkX2xvYmFzZSA9IChiKTsJXAorCQkJCShzZCktPnNkX2hpYmFz ZSA9ICgoYikgPj4gMjQpOworI2RlZmluZQlVU0RfR0VUTElNSVQoc2QpCSgoKHNkKS0+c2RfbG9s aW1pdCkgfCAoc2QpLT5zZF9oaWxpbWl0IDw8IDE2KQorI2RlZmluZQlVU0RfU0VUTElNSVQoc2Qs IGwpCShzZCktPnNkX2xvbGltaXQgPSAobCk7CVwKKwkJCQkoc2QpLT5zZF9oaWxpbWl0ID0gKChs KSA+PiAxNik7CisKKyNpZmRlZiBfX2kzODZfXworLyoKKyAqIEdhdGUgZGVzY3JpcHRvcnMgKGUu Zy4gaW5kaXJlY3QgZGVzY3JpcHRvcnMpCisgKi8KK3N0cnVjdCBnYXRlX2Rlc2NyaXB0b3Igewor CXVuc2lnbmVkIGdkX2xvb2Zmc2V0OjE2OwkvKiBnYXRlIG9mZnNldCAobHNiKSAqLworCXVuc2ln bmVkIGdkX3NlbGVjdG9yOjE2OwkvKiBnYXRlIHNlZ21lbnQgc2VsZWN0b3IgKi8KKwl1bnNpZ25l ZCBnZF9zdGtjcHk6NTsJCS8qIG51bWJlciBvZiBzdGFjayB3ZHMgdG8gY3B5ICovCisJdW5zaWdu ZWQgZ2RfeHg6MzsJCS8qIHVudXNlZCAqLworCXVuc2lnbmVkIGdkX3R5cGU6NTsJCS8qIHNlZ21l bnQgdHlwZSAqLworCXVuc2lnbmVkIGdkX2RwbDoyOwkJLyogc2VnbWVudCBkZXNjcmlwdG9yIHBy aW9yaXR5IGxldmVsICovCisJdW5zaWduZWQgZ2RfcDoxOwkJLyogc2VnbWVudCBkZXNjcmlwdG9y IHByZXNlbnQgKi8KKwl1bnNpZ25lZCBnZF9oaW9mZnNldDoxNjsJLyogZ2F0ZSBvZmZzZXQgKG1z YikgKi8KK30gX19wYWNrZWQ7CisKKy8qCisgKiBHZW5lcmljIGRlc2NyaXB0b3IKKyAqLwordW5p b24gZGVzY3JpcHRvciB7CisJc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvciBzZDsKKwlzdHJ1Y3Qg Z2F0ZV9kZXNjcmlwdG9yIGdkOworfTsKKyNlbHNlCisvKgorICogR2F0ZSBkZXNjcmlwdG9ycyAo ZS5nLiBpbmRpcmVjdCBkZXNjcmlwdG9ycywgdHJhcCwgaW50ZXJydXB0IGV0Yy4gMTI4IGJpdCkK KyAqIE9ubHkgaW50ZXJydXB0IGFuZCB0cmFwIGdhdGVzIGhhdmUgZ2RfaXN0LgorICovCitzdHJ1 Y3QgZ2F0ZV9kZXNjcmlwdG9yIHsKKwl1aW50NjRfdCBnZF9sb29mZnNldDoxNjsJLyogZ2F0ZSBv ZmZzZXQgKGxzYikgKi8KKwl1aW50NjRfdCBnZF9zZWxlY3RvcjoxNjsJLyogZ2F0ZSBzZWdtZW50 IHNlbGVjdG9yICovCisJdWludDY0X3QgZ2RfaXN0OjM7CQkvKiBJU1QgdGFibGUgaW5kZXggKi8K Kwl1aW50NjRfdCBnZF94eDo1OwkJLyogdW51c2VkICovCisJdWludDY0X3QgZ2RfdHlwZTo1OwkJ Lyogc2VnbWVudCB0eXBlICovCisJdWludDY0X3QgZ2RfZHBsOjI7CQkvKiBzZWdtZW50IGRlc2Ny aXB0b3IgcHJpb3JpdHkgbGV2ZWwgKi8KKwl1aW50NjRfdCBnZF9wOjE7CQkvKiBzZWdtZW50IGRl c2NyaXB0b3IgcHJlc2VudCAqLworCXVpbnQ2NF90IGdkX2hpb2Zmc2V0OjQ4OwkvKiBnYXRlIG9m ZnNldCAobXNiKSAqLworCXVpbnQ2NF90IHNkX3h4MTozMjsKK30gX19wYWNrZWQ7CisKKy8qCisg KiBHZW5lcmljIGRlc2NyaXB0b3IKKyAqLwordW5pb24gZGVzY3JpcHRvciB7CisJc3RydWN0IHVz ZXJfc2VnbWVudF9kZXNjcmlwdG9yIHNkOworCXN0cnVjdCBnYXRlX2Rlc2NyaXB0b3IgZ2Q7Cit9 OworI2VuZGlmCisKKwkvKiBzeXN0ZW0gc2VnbWVudHMgYW5kIGdhdGUgdHlwZXMgKi8KKyNkZWZp bmUJU0RUX1NZU05VTEwJIDAJLyogc3lzdGVtIG51bGwgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NlRT UwkgMQkvKiBzeXN0ZW0gMjg2IFRTUyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJU0RUX1NZU0xEVAkg MgkvKiBzeXN0ZW0gbG9jYWwgZGVzY3JpcHRvciB0YWJsZSAqLworI2RlZmluZQlTRFRfU1lTMjg2 QlNZCSAzCS8qIHN5c3RlbSAyODYgVFNTIGJ1c3kgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NkNHVAkg NAkvKiBzeXN0ZW0gMjg2IGNhbGwgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lTVEFTS0dUCSA1CS8q IHN5c3RlbSB0YXNrIGdhdGUgKi8KKyNkZWZpbmUJU0RUX1NZUzI4NklHVAkgNgkvKiBzeXN0ZW0g Mjg2IGludGVycnVwdCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVMyODZUR1QJIDcJLyogc3lzdGVt IDI4NiB0cmFwIGdhdGUgKi8KKyNkZWZpbmUJU0RUX1NZU05VTEwyCSA4CS8qIHN5c3RlbSBudWxs IGFnYWluICovCisjZGVmaW5lCVNEVF9TWVMzODZUU1MJIDkJLyogc3lzdGVtIDM4NiBUU1MgYXZh aWxhYmxlICovCisjZGVmaW5lCVNEVF9TWVNUU1MJIDkJLyogc3lzdGVtIGF2YWlsYWJsZSA2NCBi aXQgVFNTICovCisjZGVmaW5lCVNEVF9TWVNOVUxMMwkxMAkvKiBzeXN0ZW0gbnVsbCBhZ2FpbiAq LworI2RlZmluZQlTRFRfU1lTMzg2QlNZCTExCS8qIHN5c3RlbSAzODYgVFNTIGJ1c3kgKi8KKyNk ZWZpbmUJU0RUX1NZU0JTWQkxMQkvKiBzeXN0ZW0gYnVzeSA2NCBiaXQgVFNTICovCisjZGVmaW5l CVNEVF9TWVMzODZDR1QJMTIJLyogc3lzdGVtIDM4NiBjYWxsIGdhdGUgKi8KKyNkZWZpbmUJU0RU X1NZU0NHVAkxMgkvKiBzeXN0ZW0gNjQgYml0IGNhbGwgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lT TlVMTDQJMTMJLyogc3lzdGVtIG51bGwgYWdhaW4gKi8KKyNkZWZpbmUJU0RUX1NZUzM4NklHVAkx NAkvKiBzeXN0ZW0gMzg2IGludGVycnVwdCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVNJR1QJMTQJ Lyogc3lzdGVtIDY0IGJpdCBpbnRlcnJ1cHQgZ2F0ZSAqLworI2RlZmluZQlTRFRfU1lTMzg2VEdU CTE1CS8qIHN5c3RlbSAzODYgdHJhcCBnYXRlICovCisjZGVmaW5lCVNEVF9TWVNUR1QJMTUJLyog c3lzdGVtIDY0IGJpdCB0cmFwIGdhdGUgKi8KKworCS8qIG1lbW9yeSBzZWdtZW50IHR5cGVzICov CisjZGVmaW5lCVNEVF9NRU1STwkxNgkvKiBtZW1vcnkgcmVhZCBvbmx5ICovCisjZGVmaW5lCVNE VF9NRU1ST0EJMTcJLyogbWVtb3J5IHJlYWQgb25seSBhY2Nlc3NlZCAqLworI2RlZmluZQlTRFRf TUVNUlcJMTgJLyogbWVtb3J5IHJlYWQgd3JpdGUgKi8KKyNkZWZpbmUJU0RUX01FTVJXQQkxOQkv KiBtZW1vcnkgcmVhZCB3cml0ZSBhY2Nlc3NlZCAqLworI2RlZmluZQlTRFRfTUVNUk9ECTIwCS8q IG1lbW9yeSByZWFkIG9ubHkgZXhwYW5kIGR3biBsaW1pdCAqLworI2RlZmluZQlTRFRfTUVNUk9E QQkyMQkvKiBtZW1vcnkgcmVhZCBvbmx5IGV4cGFuZCBkd24gbGltaXQgYWNjZXNzZWQgKi8KKyNk ZWZpbmUJU0RUX01FTVJXRAkyMgkvKiBtZW1vcnkgcmVhZCB3cml0ZSBleHBhbmQgZHduIGxpbWl0 ICovCisjZGVmaW5lCVNEVF9NRU1SV0RBCTIzCS8qIG1lbW9yeSByZWFkIHdyaXRlIGV4cGFuZCBk d24gbGltaXQgYWNjZXNzZWQqLworI2RlZmluZQlTRFRfTUVNRQkyNAkvKiBtZW1vcnkgZXhlY3V0 ZSBvbmx5ICovCisjZGVmaW5lCVNEVF9NRU1FQQkyNQkvKiBtZW1vcnkgZXhlY3V0ZSBvbmx5IGFj Y2Vzc2VkICovCisjZGVmaW5lCVNEVF9NRU1FUgkyNgkvKiBtZW1vcnkgZXhlY3V0ZSByZWFkICov CisjZGVmaW5lCVNEVF9NRU1FUkEJMjcJLyogbWVtb3J5IGV4ZWN1dGUgcmVhZCBhY2Nlc3NlZCAq LworI2RlZmluZQlTRFRfTUVNRUMJMjgJLyogbWVtb3J5IGV4ZWN1dGUgb25seSBjb25mb3JtaW5n ICovCisjZGVmaW5lCVNEVF9NRU1FQUMJMjkJLyogbWVtb3J5IGV4ZWN1dGUgb25seSBhY2Nlc3Nl ZCBjb25mb3JtaW5nICovCisjZGVmaW5lCVNEVF9NRU1FUkMJMzAJLyogbWVtb3J5IGV4ZWN1dGUg cmVhZCBjb25mb3JtaW5nICovCisjZGVmaW5lCVNEVF9NRU1FUkFDCTMxCS8qIG1lbW9yeSBleGVj dXRlIHJlYWQgYWNjZXNzZWQgY29uZm9ybWluZyAqLworCisvKgorICogU2l6ZSBvZiBJRFQgdGFi bGUKKyAqLworI2RlZmluZQlOSURUCQkyNTYJLyogMzIgcmVzZXJ2ZWQsIDB4ODAgc3lzY2FsbCwg bW9zdCBhcmUgaC93ICovCisjZGVmaW5lCU5SU1ZJRFQJCTMyCS8qIHJlc2VydmVkIGVudHJpZXMg Zm9yIGNwdSBleGNlcHRpb25zICovCisKKy8qCisgKiBFbnRyaWVzIGluIHRoZSBJbnRlcnJ1cHQg RGVzY3JpcHRvciBUYWJsZSAoSURUKQorICovCisjZGVmaW5lCUlEVF9ERQkJMAkvKiAjREU6IERp dmlkZSBFcnJvciAqLworI2RlZmluZQlJRFRfREIJCTEJLyogI0RCOiBEZWJ1ZyAqLworI2RlZmlu ZQlJRFRfTk1JCQkyCS8qIE5vbm1hc2thYmxlIEV4dGVybmFsIEludGVycnVwdCAqLworI2RlZmlu ZQlJRFRfQlAJCTMJLyogI0JQOiBCcmVha3BvaW50ICovCisjZGVmaW5lCUlEVF9PRgkJNAkvKiAj T0Y6IE92ZXJmbG93ICovCisjZGVmaW5lCUlEVF9CUgkJNQkvKiAjQlI6IEJvdW5kIFJhbmdlIEV4 Y2VlZGVkICovCisjZGVmaW5lCUlEVF9VRAkJNgkvKiAjVUQ6IFVuZGVmaW5lZC9JbnZhbGlkIE9w Y29kZSAqLworI2RlZmluZQlJRFRfTk0JCTcJLyogI05NOiBObyBNYXRoIENvcHJvY2Vzc29yICov CisjZGVmaW5lCUlEVF9ERgkJOAkvKiAjREY6IERvdWJsZSBGYXVsdCAqLworI2RlZmluZQlJRFRf RlBVR1AJOQkvKiBDb3Byb2Nlc3NvciBTZWdtZW50IE92ZXJydW4gKi8KKyNkZWZpbmUJSURUX1RT CQkxMAkvKiAjVFM6IEludmFsaWQgVFNTICovCisjZGVmaW5lCUlEVF9OUAkJMTEJLyogI05QOiBT ZWdtZW50IE5vdCBQcmVzZW50ICovCisjZGVmaW5lCUlEVF9TUwkJMTIJLyogI1NTOiBTdGFjayBT ZWdtZW50IEZhdWx0ICovCisjZGVmaW5lCUlEVF9HUAkJMTMJLyogI0dQOiBHZW5lcmFsIFByb3Rl Y3Rpb24gRmF1bHQgKi8KKyNkZWZpbmUJSURUX1BGCQkxNAkvKiAjUEY6IFBhZ2UgRmF1bHQgKi8K KyNkZWZpbmUJSURUX01GCQkxNgkvKiAjTUY6IEZQVSBGbG9hdGluZy1Qb2ludCBFcnJvciAqLwor I2RlZmluZQlJRFRfQUMJCTE3CS8qICNBQzogQWxpZ25tZW50IENoZWNrICovCisjZGVmaW5lCUlE VF9NQwkJMTgJLyogI01DOiBNYWNoaW5lIENoZWNrICovCisjZGVmaW5lCUlEVF9YRgkJMTkJLyog I1hGOiBTSU1EIEZsb2F0aW5nLVBvaW50IEV4Y2VwdGlvbiAqLworI2RlZmluZQlJRFRfSU9fSU5U UwlOUlNWSURUCS8qIEJhc2Ugb2YgSURUIGVudHJpZXMgZm9yIEkvTyBpbnRlcnJ1cHRzLiAqLwor I2RlZmluZQlJRFRfU1lTQ0FMTAkweDgwCS8qIFN5c3RlbSBDYWxsIEludGVycnVwdCBWZWN0b3Ig Ki8KKyNkZWZpbmUJSURUX0RUUkFDRV9SRVQJMHg5MgkvKiBEVHJhY2UgcGlkIHByb3ZpZGVyIElu dGVycnVwdCBWZWN0b3IgKi8KKyNkZWZpbmUJSURUX0VWVENITgkweDkzCS8qIFhlbiBIVk0gRXZl bnQgQ2hhbm5lbCBJbnRlcnJ1cHQgVmVjdG9yICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQor LyoKKyAqIEVudHJpZXMgaW4gdGhlIEdsb2JhbCBEZXNjcmlwdG9yIFRhYmxlIChHRFQpCisgKiBO b3RlIHRoYXQgZWFjaCA0IGVudHJpZXMgc2hhcmUgYSBzaW5nbGUgMzIgYnl0ZSBMMSBjYWNoZSBs aW5lLgorICogU29tZSBvZiB0aGUgZmFzdCBzeXNjYWxsIGluc3RydWN0aW9ucyByZXF1aXJlIGEg c3BlY2lmaWMgb3JkZXIgaGVyZS4KKyAqLworI2RlZmluZQlHTlVMTF9TRUwJMAkvKiBOdWxsIERl c2NyaXB0b3IgKi8KKyNkZWZpbmUJR1BSSVZfU0VMCTEJLyogU01QIFBlci1Qcm9jZXNzb3IgUHJp dmF0ZSBEYXRhICovCisjZGVmaW5lCUdVRlNfU0VMCTIJLyogVXNlciAlZnMgRGVzY3JpcHRvciAo b3JkZXIgY3JpdGljYWw6IDEpICovCisjZGVmaW5lCUdVR1NfU0VMCTMJLyogVXNlciAlZ3MgRGVz Y3JpcHRvciAob3JkZXIgY3JpdGljYWw6IDIpICovCisjZGVmaW5lCUdDT0RFX1NFTAk0CS8qIEtl cm5lbCBDb2RlIERlc2NyaXB0b3IgKG9yZGVyIGNyaXRpY2FsOiAxKSAqLworI2RlZmluZQlHREFU QV9TRUwJNQkvKiBLZXJuZWwgRGF0YSBEZXNjcmlwdG9yIChvcmRlciBjcml0aWNhbDogMikgKi8K KyNkZWZpbmUJR1VDT0RFX1NFTAk2CS8qIFVzZXIgQ29kZSBEZXNjcmlwdG9yIChvcmRlciBjcml0 aWNhbDogMykgKi8KKyNkZWZpbmUJR1VEQVRBX1NFTAk3CS8qIFVzZXIgRGF0YSBEZXNjcmlwdG9y IChvcmRlciBjcml0aWNhbDogNCkgKi8KKyNkZWZpbmUJR0JJT1NMT1dNRU1fU0VMCTgJLyogQklP UyBsb3cgbWVtb3J5IGFjY2VzcyAobXVzdCBiZSBlbnRyeSA4KSAqLworI2RlZmluZQlHUFJPQzBf U0VMCTkJLyogVGFzayBzdGF0ZSBwcm9jZXNzIHNsb3QgemVybyBhbmQgdXAgKi8KKyNkZWZpbmUJ R0xEVF9TRUwJMTAJLyogRGVmYXVsdCBVc2VyIExEVCAqLworI2RlZmluZQlHVVNFUkxEVF9TRUwJ MTEJLyogVXNlciBMRFQgKi8KKyNkZWZpbmUJR1BBTklDX1NFTAkxMgkvKiBUYXNrIHN0YXRlIHRv IGNvbnNpZGVyIHBhbmljIGZyb20gKi8KKyNkZWZpbmUJR0JJT1NDT0RFMzJfU0VMCTEzCS8qIEJJ T1MgaW50ZXJmYWNlICgzMmJpdCBDb2RlKSAqLworI2RlZmluZQlHQklPU0NPREUxNl9TRUwJMTQJ LyogQklPUyBpbnRlcmZhY2UgKDE2Yml0IENvZGUpICovCisjZGVmaW5lCUdCSU9TREFUQV9TRUwJ MTUJLyogQklPUyBpbnRlcmZhY2UgKERhdGEpICovCisjZGVmaW5lCUdCSU9TVVRJTF9TRUwJMTYJ LyogQklPUyBpbnRlcmZhY2UgKFV0aWxpdHkpICovCisjZGVmaW5lCUdCSU9TQVJHU19TRUwJMTcJ LyogQklPUyBpbnRlcmZhY2UgKEFyZ3VtZW50cykgKi8KKyNkZWZpbmUJR05ESVNfU0VMCTE4CS8q IEZvciB0aGUgTkRJUyBsYXllciAqLworI2RlZmluZQlOR0RUCQkxOQorCisvKgorICogRW50cmll cyBpbiB0aGUgTG9jYWwgRGVzY3JpcHRvciBUYWJsZSAoTERUKQorICovCisjZGVmaW5lCUxTWVM1 Q0FMTFNfU0VMCTAJLyogZm9yY2VkIGJ5IGludGVsIEJDUyAqLworI2RlZmluZQlMU1lTNVNJR1Jf U0VMCTEKKyNkZWZpbmUJTDQzQlNEQ0FMTFNfU0VMCTIJLyogbm90eWV0ICovCisjZGVmaW5lCUxV Q09ERV9TRUwJMworI2RlZmluZQlMU09MMjZDQUxMU19TRUwJNAkvKiBTb2xhcmlzID49IDIuNiBz eXN0ZW0gY2FsbCBnYXRlICovCisjZGVmaW5lCUxVREFUQV9TRUwJNQorLyogc2VwYXJhdGUgc3Rh Y2ssIGVzLGZzLGdzIHNlbHMgPyAqLworLyogI2RlZmluZQlMUE9TSVhDQUxMU19TRUwJNSovCS8q IG5vdHlldCAqLworI2RlZmluZQlMQlNESUNBTExTX1NFTAkxNgkvKiBCU0RJIHN5c3RlbSBjYWxs IGdhdGUgKi8KKyNkZWZpbmUJTkxEVAkJKExCU0RJQ0FMTFNfU0VMICsgMSkKKworI2Vsc2UgLyog IV9faTM4Nl9fICovCisvKgorICogRW50cmllcyBpbiB0aGUgR2xvYmFsIERlc2NyaXB0b3IgVGFi bGUgKEdEVCkKKyAqLworI2RlZmluZQlHTlVMTF9TRUwJMAkvKiBOdWxsIERlc2NyaXB0b3IgKi8K KyNkZWZpbmUJR05VTEwyX1NFTAkxCS8qIE51bGwgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUZT MzJfU0VMCTIJLyogVXNlciAzMiBiaXQgJWZzIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR1VHUzMy X1NFTAkzCS8qIFVzZXIgMzIgYml0ICVncyBEZXNjcmlwdG9yICovCisjZGVmaW5lCUdDT0RFX1NF TAk0CS8qIEtlcm5lbCBDb2RlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR0RBVEFfU0VMCTUJLyog S2VybmVsIERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUNPREUzMl9TRUwJNgkvKiBVc2Vy IDMyIGJpdCBjb2RlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUJR1VEQVRBX1NFTAk3CS8qIFVzZXIg MzIvNjQgYml0IERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZQlHVUNPREVfU0VMCTgJLyogVXNl ciA2NCBiaXQgQ29kZSBEZXNjcmlwdG9yICovCisjZGVmaW5lCUdQUk9DMF9TRUwJOQkvKiBUU1Mg Zm9yIGVudGVyaW5nIGtlcm5lbCBldGMgKi8KKy8qIHNsb3QgMTAgaXMgc2Vjb25kIGhhbGYgb2Yg R1BST0MwX1NFTCAqLworI2RlZmluZQlHVVNFUkxEVF9TRUwJMTEJLyogTERUICovCisvKiBzbG90 IDEyIGlzIHNlY29uZCBoYWxmIG9mIEdVU0VSTERUX1NFTCAqLworI2RlZmluZQlOR0RUIAkJMTMK KyNlbmRpZiAvKiBfX2kzODZfXyAqLworCisjZW5kaWYgLyogIV9YODZfU0VHTUVOVFNfSF8gKi8K ZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2V0am1wLmggL3Vz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zZXRqbXAuaAotLS0gdXNyL3NyYy9zeXMvbW9k dWxlcy9uZXRtYXAveDg2L3NldGptcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NldGptcC5oCTIwMTYtMDkt MjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTAgQEAKKy8qLQorICogQ29w eXJpZ2h0IChjKSAxOTk4IEpvaG4gQmlycmVsbCA8amJAY2ltbG9naWMuY29tLmF1Pi4KKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo ZSBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY28tY29udHJpYnV0b3JzCisgKiAgICBtYXkg YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSk9ITiBCSVJSRUxMIEFORCBD T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5U UyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq ICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvc2V0am1wLmggMjMyMjc1IDIw MTItMDItMjggMjI6MTc6NTJaIHRpamwgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU0VUSk1Q X0hfCisjZGVmaW5lCV9NQUNISU5FX1NFVEpNUF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+ CisKKyNkZWZpbmUJX0pCTEVOCTEyCQkvKiBTaXplIG9mIHRoZSBqbXBfYnVmIG9uIEFNRDY0LiAq LworCisvKgorICogam1wX2J1ZiBhbmQgc2lnam1wX2J1ZiBhcmUgZW5jYXBzdWxhdGVkIGluIGRp ZmZlcmVudCBzdHJ1Y3RzIHRvIGZvcmNlCisgKiBjb21waWxlLXRpbWUgZGlhZ25vc3RpY3MgZm9y IG1pc21hdGNoZXMuICBUaGUgc3RydWN0cyBhcmUgdGhlIHNhbWUKKyAqIGludGVybmFsbHkgdG8g YXZvaWQgc29tZSBydW4tdGltZSBlcnJvcnMgZm9yIG1pc21hdGNoZXMuCisgKi8KKyNpZiBfX0JT RF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hTSV9WSVNJQkxFCit0eXBlZGVmCXN0 cnVjdCBfc2lnam1wX2J1ZiB7IGxvbmcgX3NqYltfSkJMRU5dOyB9IHNpZ2ptcF9idWZbMV07Cisj ZW5kaWYKKwordHlwZWRlZglzdHJ1Y3QgX2ptcF9idWYgeyBsb25nIF9qYltfSkJMRU5dOyB9IGpt cF9idWZbMV07CisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfU0VUSk1QX0hfICovCmRpZmYgLXUgLXIg LU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NpZ2ZyYW1lLmggL3Vzci9zcmMvc3lz L21vZHVsZXMvbmV0bWFwL3g4Ni9zaWdmcmFtZS5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25l dG1hcC94ODYvc2lnZnJhbWUuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAor KysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zaWdmcmFtZS5oCTIwMTYtMDktMjkg MDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNzIgQEAKKy8qLQorICogQ29weXJp Z2h0IChjKSAxOTk5IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIAorICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgorICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUg bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF RCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogcmVs ZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3NpZ2ZyYW1lLmggMjQ3MDQ3IDIwMTMtMDItMjAgMTc6 Mzk6NTJaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfWDg2X1NJR0ZSQU1FX0hfCisjZGVmaW5lCV9Y ODZfU0lHRlJBTUVfSF8KKworLyoKKyAqIFNpZ25hbCBmcmFtZXMsIGFyZ3VtZW50cyBwYXNzZWQg dG8gYXBwbGljYXRpb24gc2lnbmFsIGhhbmRsZXJzLgorICovCisKKyNpZmRlZiBfX2kzODZfXwor c3RydWN0IHNpZ2ZyYW1lIHsKKwkvKgorCSAqIFRoZSBmaXJzdCBmb3VyIG1lbWJlcnMgbWF5IGJl IHVzZWQgYnkgYXBwbGljYXRpb25zLgorCSAqCisJICogTk9URTogVGhlIDR0aCBhcmd1bWVudCBp cyB1bmRvY3VtZW50ZWQsIGlsbCBjb21tZW50ZWQKKwkgKiBvbiBhbmQgc2VlbXMgdG8gYmUgc29t ZXdoYXQgQlNEICJzdGFuZGFyZCIuICBIYW5kbGVycworCSAqIGluc3RhbGxlZCB3aXRoIHNpZ3Zl YyBtYXkgYmUgdXNpbmcgaXQuCisJICovCisJcmVnaXN0ZXJfdAlzZl9zaWdudW07CisJcmVnaXN0 ZXJfdAlzZl9zaWdpbmZvOwkvKiBjb2RlIG9yIHBvaW50ZXIgdG8gc2Zfc2kgKi8KKwlyZWdpc3Rl cl90CXNmX3Vjb250ZXh0OwkvKiBwb2ludHMgdG8gc2ZfdWMgKi8KKwlyZWdpc3Rlcl90CXNmX2Fk ZHI7CS8qIHVuZG9jdW1lbnRlZCA0dGggYXJnICovCisKKwl1bmlvbiB7CisJCV9fc2lnaW5mb2hh bmRsZXJfdAkqc2ZfYWN0aW9uOworCQlfX3NpZ2hhbmRsZXJfdAkJKnNmX2hhbmRsZXI7CisJfSBz Zl9haHU7CisJdWNvbnRleHRfdAlzZl91YzsJCS8qID0gKnNmX3Vjb250ZXh0ICovCisJc2lnaW5m b190CXNmX3NpOwkJLyogPSAqc2Zfc2lnaW5mbyAoU0FfU0lHSU5GTyBjYXNlKSAqLworfTsKKyNl bmRpZiAvKiBfX2kzODZfXyAqLworCisjaWZkZWYgX19hbWQ2NF9fCitzdHJ1Y3Qgc2lnZnJhbWUg eworCXVuaW9uIHsKKwkJX19zaWdpbmZvaGFuZGxlcl90CSpzZl9hY3Rpb247CisJCV9fc2lnaGFu ZGxlcl90CQkqc2ZfaGFuZGxlcjsKKwl9IHNmX2FodTsKKwl1Y29udGV4dF90CXNmX3VjOwkJLyog PSAqc2ZfdWNvbnRleHQgKi8KKwlzaWdpbmZvX3QJc2Zfc2k7CQkvKiA9ICpzZl9zaWdpbmZvIChT QV9TSUdJTkZPIGNhc2UpICovCit9OworI2VuZGlmIC8qIF9fYW1kNjRfXyAqLworCisjZW5kaWYg LyogX1g4Nl9TSUdGUkFNRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL3g4Ni9zaWduYWwuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3NpZ25h bC5oCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc2lnbmFsLmgJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC94ODYvc2lnbmFsLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs MCArMSwxNjcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTg2LCAxOTg5LCAxOTkxLCAxOTkz CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBQZXRlciBXZW1tLgorICoKKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpc2lnbmFsLmgJOC4xIChCZXJrZWxl eSkgNi8xMS85MworICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS9zaWdu YWwuaCAyNDcwNDcgMjAxMy0wMi0yMCAxNzozOTo1Mloga2liICQKKyAqLworCisjaWZuZGVmIF9Y ODZfU0lHTkFMX0gKKyNkZWZpbmUJX1g4Nl9TSUdOQUxfSCAxCisKKy8qCisgKiBNYWNoaW5lLWRl cGVuZGVudCBzaWduYWwgZGVmaW5pdGlvbnMKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+ CisjaW5jbHVkZSA8c3lzL19zaWdzZXQuaD4KKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNpbmNsdWRl IDxtYWNoaW5lL3RyYXAuaD4JLyogY29kZXMgZm9yIFNJR0lMTCwgU0lHRlBFICovCisjZW5kaWYK KworI2lmZGVmIF9faTM4Nl9fCit0eXBlZGVmIGludCBzaWdfYXRvbWljX3Q7CisKKyNpZiBfX0JT RF9WSVNJQkxFCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJc3RydWN0IF9fc2lnc2V0IHNjX21hc2s7 CS8qIHNpZ25hbCBtYXNrIHRvIHJlc3RvcmUgKi8KKwlpbnQJc2Nfb25zdGFjazsJCS8qIHNpZ3N0 YWNrIHN0YXRlIHRvIHJlc3RvcmUgKi8KKwlpbnQJc2NfZ3M7CQkJLyogbWFjaGluZSBzdGF0ZSAo c3RydWN0IHRyYXBmcmFtZSkgKi8KKwlpbnQJc2NfZnM7CisJaW50CXNjX2VzOworCWludAlzY19k czsKKwlpbnQJc2NfZWRpOworCWludAlzY19lc2k7CisJaW50CXNjX2VicDsKKwlpbnQJc2NfaXNw OworCWludAlzY19lYng7CisJaW50CXNjX2VkeDsKKwlpbnQJc2NfZWN4OworCWludAlzY19lYXg7 CisJaW50CXNjX3RyYXBubzsKKwlpbnQJc2NfZXJyOworCWludAlzY19laXA7CisJaW50CXNjX2Nz OworCWludAlzY19lZmw7CisJaW50CXNjX2VzcDsKKwlpbnQJc2Nfc3M7CisJaW50CXNjX2xlbjsJ CQkvKiBzaXplb2YobWNvbnRleHRfdCkgKi8KKwkvKgorCSAqIFNlZSA8bWFjaGluZS91Y29udGV4 dC5oPiBhbmQgPG1hY2hpbmUvbnB4Lmg+IGZvcgorCSAqIHRoZSBmb2xsb3dpbmcgZmllbGRzLgor CSAqLworCWludAlzY19mcGZvcm1hdDsKKwlpbnQJc2Nfb3duZWRmcDsKKwlpbnQJc2NfZmxhZ3M7 CisJaW50CXNjX2Zwc3RhdGVbMTI4XSBfX2FsaWduZWQoMTYpOworCisJaW50CXNjX2ZzYmFzZTsK KwlpbnQJc2NfZ3NiYXNlOworCisJaW50CXNjX3hmcHVzdGF0ZTsKKwlpbnQJc2NfeGZwdXN0YXRl X2xlbjsKKworCWludAlzY19zcGFyZTJbNF07Cit9OworCisjZGVmaW5lCXNjX3NwCQlzY19lc3AK KyNkZWZpbmUJc2NfZnAJCXNjX2VicAorI2RlZmluZQlzY19wYwkJc2NfZWlwCisjZGVmaW5lCXNj X3BzCQlzY19lZmwKKyNkZWZpbmUJc2NfZWZsYWdzCXNjX2VmbAorCisjZW5kaWYgLyogX19CU0Rf VklTSUJMRSAqLworI2VuZGlmIC8qIF9faTM4Nl9fICovCisKKyNpZmRlZiBfX2FtZDY0X18KK3R5 cGVkZWYgbG9uZyBzaWdfYXRvbWljX3Q7CisKKyNpZiBfX0JTRF9WSVNJQkxFCisvKgorICogSW5m b3JtYXRpb24gcHVzaGVkIG9uIHN0YWNrIHdoZW4gYSBzaWduYWwgaXMgZGVsaXZlcmVkLgorICog VGhpcyBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gcmVzdG9yZSBzdGF0ZSBmb2xsb3dpbmcKKyAq IGV4ZWN1dGlvbiBvZiB0aGUgc2lnbmFsIGhhbmRsZXIuICBJdCBpcyBhbHNvIG1hZGUgYXZhaWxh YmxlCisgKiB0byB0aGUgaGFuZGxlciB0byBhbGxvdyBpdCB0byByZXN0b3JlIHN0YXRlIHByb3Bl cmx5IGlmCisgKiBhIG5vbi1zdGFuZGFyZCBleGl0IGlzIHBlcmZvcm1lZC4KKyAqCisgKiBUaGUg c2VxdWVuY2Ugb2YgdGhlIGZpZWxkcy9yZWdpc3RlcnMgYWZ0ZXIgc2NfbWFzayBpbiBzdHJ1Y3QK KyAqIHNpZ2NvbnRleHQgbXVzdCBtYXRjaCB0aG9zZSBpbiBtY29udGV4dF90IGFuZCBzdHJ1Y3Qg dHJhcGZyYW1lLgorICovCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJc3RydWN0IF9fc2lnc2V0IHNj X21hc2s7CS8qIHNpZ25hbCBtYXNrIHRvIHJlc3RvcmUgKi8KKwlsb25nCXNjX29uc3RhY2s7CQkv KiBzaWdzdGFjayBzdGF0ZSB0byByZXN0b3JlICovCisJbG9uZwlzY19yZGk7CQkvKiBtYWNoaW5l IHN0YXRlIChzdHJ1Y3QgdHJhcGZyYW1lKSAqLworCWxvbmcJc2NfcnNpOworCWxvbmcJc2NfcmR4 OworCWxvbmcJc2NfcmN4OworCWxvbmcJc2Nfcjg7CisJbG9uZwlzY19yOTsKKwlsb25nCXNjX3Jh eDsKKwlsb25nCXNjX3JieDsKKwlsb25nCXNjX3JicDsKKwlsb25nCXNjX3IxMDsKKwlsb25nCXNj X3IxMTsKKwlsb25nCXNjX3IxMjsKKwlsb25nCXNjX3IxMzsKKwlsb25nCXNjX3IxNDsKKwlsb25n CXNjX3IxNTsKKwlpbnQJc2NfdHJhcG5vOworCXNob3J0CXNjX2ZzOworCXNob3J0CXNjX2dzOwor CWxvbmcJc2NfYWRkcjsKKwlpbnQJc2NfZmxhZ3M7CisJc2hvcnQJc2NfZXM7CisJc2hvcnQJc2Nf ZHM7CisJbG9uZwlzY19lcnI7CisJbG9uZwlzY19yaXA7CisJbG9uZwlzY19jczsKKwlsb25nCXNj X3JmbGFnczsKKwlsb25nCXNjX3JzcDsKKwlsb25nCXNjX3NzOworCWxvbmcJc2NfbGVuOwkJCS8q IHNpemVvZihtY29udGV4dF90KSAqLworCS8qCisJICogU2VlIDxtYWNoaW5lL3Vjb250ZXh0Lmg+ IGFuZCA8bWFjaGluZS9mcHUuaD4gZm9yIHRoZSBmb2xsb3dpbmcKKwkgKiBmaWVsZHMuCisJICov CisJbG9uZwlzY19mcGZvcm1hdDsKKwlsb25nCXNjX293bmVkZnA7CisJbG9uZwlzY19mcHN0YXRl WzY0XSBfX2FsaWduZWQoMTYpOworCisJbG9uZwlzY19mc2Jhc2U7CisJbG9uZwlzY19nc2Jhc2U7 CisKKwlsb25nCXNjX3hmcHVzdGF0ZTsKKwlsb25nCXNjX3hmcHVzdGF0ZV9sZW47CisKKwlsb25n CXNjX3NwYXJlWzRdOworfTsKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisjZW5kaWYgLyog X19hbWQ2NF9fICovCisKKyNlbmRpZgpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMv bmV0bWFwL3g4Ni9zcGVjaWFscmVnLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9z cGVjaWFscmVnLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zcGVjaWFscmVn LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9t b2R1bGVzL25ldG1hcC94ODYvc3BlY2lhbHJlZy5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAw MDAwICswMTAwCkBAIC0wLDAgKzEsODc5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MSBU aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZl cnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNl ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJV VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJZnJvbTog QCgjKXNwZWNpYWxyZWcuaAk3LjEgKEJlcmtlbGV5KSA1LzkvOTEKKyAqICRGcmVlQlNEOiByZWxl bmcvMTEuMC9zeXMveDg2L2luY2x1ZGUvc3BlY2lhbHJlZy5oIDI5ODEwMSAyMDE2LTA0LTE2IDA2 OjA3OjEzWiBraWIgJAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfU1BFQ0lBTFJFR19IXworI2Rl ZmluZQlfTUFDSElORV9TUEVDSUFMUkVHX0hfCisKKy8qCisgKiBCaXRzIGluIDM4NiBzcGVjaWFs IHJlZ2lzdGVyczoKKyAqLworI2RlZmluZQlDUjBfUEUJMHgwMDAwMDAwMQkvKiBQcm90ZWN0ZWQg bW9kZSBFbmFibGUgKi8KKyNkZWZpbmUJQ1IwX01QCTB4MDAwMDAwMDIJLyogIk1hdGgiIChmcHUp IFByZXNlbnQgKi8KKyNkZWZpbmUJQ1IwX0VNCTB4MDAwMDAwMDQJLyogRU11bGF0ZSBGUFUgaW5z dHJ1Y3Rpb25zLiAodHJhcCBFU0Mgb25seSkgKi8KKyNkZWZpbmUJQ1IwX1RTCTB4MDAwMDAwMDgJ LyogVGFzayBTd2l0Y2hlZCAoaWYgTVAsIHRyYXAgRVNDIGFuZCBXQUlUKSAqLworI2RlZmluZQlD UjBfUEcJMHg4MDAwMDAwMAkvKiBQYUdpbmcgZW5hYmxlICovCisKKy8qCisgKiBCaXRzIGluIDQ4 NiBzcGVjaWFsIHJlZ2lzdGVyczoKKyAqLworI2RlZmluZQlDUjBfTkUJMHgwMDAwMDAyMAkvKiBO dW1lcmljIEVycm9yIGVuYWJsZSAoRVgxNiB2cyBJUlExMykgKi8KKyNkZWZpbmUJQ1IwX1dQCTB4 MDAwMTAwMDAJLyogV3JpdGUgUHJvdGVjdCAoaG9ub3IgcGFnZSBwcm90ZWN0IGluCisJCQkJCQkJ ICAgYWxsIG1vZGVzKSAqLworI2RlZmluZQlDUjBfQU0JMHgwMDA0MDAwMAkvKiBBbGlnbm1lbnQg TWFzayAoc2V0IHRvIGVuYWJsZSBBQyBmbGFnKSAqLworI2RlZmluZQlDUjBfTlcgIDB4MjAwMDAw MDAJLyogTm90IFdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUJQ1IwX0NEICAweDQwMDAwMDAwCS8q IENhY2hlIERpc2FibGUgKi8KKworI2RlZmluZQlDUjNfUENJRF9TQVZFIDB4ODAwMDAwMDAwMDAw MDAwMAorI2RlZmluZQlDUjNfUENJRF9NQVNLIDB4ZmZmCisKKy8qCisgKiBCaXRzIGluIFBQcm8g c3BlY2lhbCByZWdpc3RlcnMKKyAqLworI2RlZmluZQlDUjRfVk1FCTB4MDAwMDAwMDEJLyogVmly dHVhbCA4MDg2IG1vZGUgZXh0ZW5zaW9ucyAqLworI2RlZmluZQlDUjRfUFZJCTB4MDAwMDAwMDIJ LyogUHJvdGVjdGVkLW1vZGUgdmlydHVhbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUNSNF9UU0QJ MHgwMDAwMDAwNAkvKiBUaW1lIHN0YW1wIGRpc2FibGUgKi8KKyNkZWZpbmUJQ1I0X0RFCTB4MDAw MDAwMDgJLyogRGVidWdnaW5nIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUJQ1I0X1BTRQkweDAwMDAw MDEwCS8qIFBhZ2Ugc2l6ZSBleHRlbnNpb25zICovCisjZGVmaW5lCUNSNF9QQUUJMHgwMDAwMDAy MAkvKiBQaHlzaWNhbCBhZGRyZXNzIGV4dGVuc2lvbiAqLworI2RlZmluZQlDUjRfTUNFCTB4MDAw MDAwNDAJLyogTWFjaGluZSBjaGVjayBlbmFibGUgKi8KKyNkZWZpbmUJQ1I0X1BHRQkweDAwMDAw MDgwCS8qIFBhZ2UgZ2xvYmFsIGVuYWJsZSAqLworI2RlZmluZQlDUjRfUENFCTB4MDAwMDAxMDAJ LyogUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBjb3VudGVyIGVuYWJsZSAqLworI2RlZmluZQlDUjRf RlhTUiAweDAwMDAwMjAwCS8qIEZhc3QgRlBVIHNhdmUvcmVzdG9yZSB1c2VkIGJ5IE9TICovCisj ZGVmaW5lCUNSNF9YTU0JMHgwMDAwMDQwMAkvKiBlbmFibGUgU0lNRC9NTVgyIHRvIHVzZSBleGNl cHQgMTYgKi8KKyNkZWZpbmUJQ1I0X1ZNWEUgMHgwMDAwMjAwMAkvKiBlbmFibGUgVk1YIG9wZXJh dGlvbiAoSW50ZWwtc3BlY2lmaWMpICovCisjZGVmaW5lCUNSNF9GU0dTQkFTRSAweDAwMDEwMDAw CS8qIEVuYWJsZSBGUy9HUyBCQVNFIGFjY2Vzc2luZyBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUJ Q1I0X1BDSURFIDB4MDAwMjAwMDAJLyogRW5hYmxlIENvbnRleHQgSUQgKi8KKyNkZWZpbmUJQ1I0 X1hTQVZFIDB4MDAwNDAwMDAJLyogWFNFVEJWL1hHRVRCViAqLworI2RlZmluZQlDUjRfU01FUCAw eDAwMTAwMDAwCS8qIFN1cGVydmlzb3ItTW9kZSBFeGVjdXRpb24gUHJldmVudGlvbiAqLworCisv KgorICogQml0cyBpbiBBTUQ2NCBzcGVjaWFsIHJlZ2lzdGVycy4gIEVGRVIgaXMgNjQgYml0cyB3 aWRlLgorICovCisjZGVmaW5lCUVGRVJfU0NFIDB4MDAwMDAwMDAxCS8qIFN5c3RlbSBDYWxsIEV4 dGVuc2lvbnMgKFIvVykgKi8KKyNkZWZpbmUJRUZFUl9MTUUgMHgwMDAwMDAxMDAJLyogTG9uZyBt b2RlIGVuYWJsZSAoUi9XKSAqLworI2RlZmluZQlFRkVSX0xNQSAweDAwMDAwMDQwMAkvKiBMb25n IG1vZGUgYWN0aXZlIChSKSAqLworI2RlZmluZQlFRkVSX05YRSAweDAwMDAwMDgwMAkvKiBQVEUg Tm8tRXhlY3V0ZSBiaXQgZW5hYmxlIChSL1cpICovCisjZGVmaW5lCUVGRVJfU1ZNIDB4MDAwMDAx MDAwCS8qIFNWTSBlbmFibGUgYml0IGZvciBBTUQsIHJlc2VydmVkIGZvciBJbnRlbCAqLworI2Rl ZmluZQlFRkVSX0xNU0xFIDB4MDAwMDAyMDAwCS8qIExvbmcgTW9kZSBTZWdtZW50IExpbWl0IEVu YWJsZSAqLworI2RlZmluZQlFRkVSX0ZGWFNSIDB4MDAwMDA0MDAwCS8qIEZhc3QgRlhTQVZFL0ZT UlNUT1IgKi8KKyNkZWZpbmUJRUZFUl9UQ0UgICAweDAwMDAwODAwMAkvKiBUcmFuc2xhdGlvbiBD YWNoZSBFeHRlbnNpb24gKi8KKworLyoKKyAqIEludGVsIEV4dGVuZGVkIEZlYXR1cmVzIHJlZ2lz dGVycworICovCisjZGVmaW5lCVhDUjAJMAkJLyogWEZFQVRVUkVfRU5BQkxFRF9NQVNLIHJlZ2lz dGVyICovCisKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9YODcJCTB4MDAwMDAwMDEKKyNkZWZp bmUJWEZFQVRVUkVfRU5BQkxFRF9TU0UJCTB4MDAwMDAwMDIKKyNkZWZpbmUJWEZFQVRVUkVfRU5B QkxFRF9ZTU1fSEkxMjgJMHgwMDAwMDAwNAorI2RlZmluZQlYRkVBVFVSRV9FTkFCTEVEX0FWWAkJ WEZFQVRVUkVfRU5BQkxFRF9ZTU1fSEkxMjgKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9CTkRS RUdTCTB4MDAwMDAwMDgKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9CTkRDU1IJCTB4MDAwMDAw MTAKKyNkZWZpbmUJWEZFQVRVUkVfRU5BQkxFRF9PUE1BU0sJCTB4MDAwMDAwMjAKKyNkZWZpbmUJ WEZFQVRVUkVfRU5BQkxFRF9aTU1fSEkyNTYJMHgwMDAwMDA0MAorI2RlZmluZQlYRkVBVFVSRV9F TkFCTEVEX0hJMTZfWk1NCTB4MDAwMDAwODAKKworI2RlZmluZQlYRkVBVFVSRV9BVlgJCQkJCVwK KyAgICAoWEZFQVRVUkVfRU5BQkxFRF9YODcgfCBYRkVBVFVSRV9FTkFCTEVEX1NTRSB8IFhGRUFU VVJFX0VOQUJMRURfQVZYKQorI2RlZmluZQlYRkVBVFVSRV9BVlg1MTIJCQkJCQlcCisgICAgKFhG RUFUVVJFX0VOQUJMRURfT1BNQVNLIHwgWEZFQVRVUkVfRU5BQkxFRF9aTU1fSEkyNTYgfAlcCisg ICAgWEZFQVRVUkVfRU5BQkxFRF9ISTE2X1pNTSkKKyNkZWZpbmUJWEZFQVRVUkVfTVBYCQkJCQlc CisgICAgKFhGRUFUVVJFX0VOQUJMRURfQk5EUkVHUyB8IFhGRUFUVVJFX0VOQUJMRURfQk5EQ1NS KQorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gZmVhdHVyZXMgcmVnaXN0ZXIKKyAqLworI2Rl ZmluZQlDUFVJRF9GUFUJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9WTUUJMHgwMDAwMDAwMgor I2RlZmluZQlDUFVJRF9ERQkweDAwMDAwMDA0CisjZGVmaW5lCUNQVUlEX1BTRQkweDAwMDAwMDA4 CisjZGVmaW5lCUNQVUlEX1RTQwkweDAwMDAwMDEwCisjZGVmaW5lCUNQVUlEX01TUgkweDAwMDAw MDIwCisjZGVmaW5lCUNQVUlEX1BBRQkweDAwMDAwMDQwCisjZGVmaW5lCUNQVUlEX01DRQkweDAw MDAwMDgwCisjZGVmaW5lCUNQVUlEX0NYOAkweDAwMDAwMTAwCisjZGVmaW5lCUNQVUlEX0FQSUMJ MHgwMDAwMDIwMAorI2RlZmluZQlDUFVJRF9CMTAJMHgwMDAwMDQwMAorI2RlZmluZQlDUFVJRF9T RVAJMHgwMDAwMDgwMAorI2RlZmluZQlDUFVJRF9NVFJSCTB4MDAwMDEwMDAKKyNkZWZpbmUJQ1BV SURfUEdFCTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSURfTUNBCTB4MDAwMDQwMDAKKyNkZWZpbmUJ Q1BVSURfQ01PVgkweDAwMDA4MDAwCisjZGVmaW5lCUNQVUlEX1BBVAkweDAwMDEwMDAwCisjZGVm aW5lCUNQVUlEX1BTRTM2CTB4MDAwMjAwMDAKKyNkZWZpbmUJQ1BVSURfUFNOCTB4MDAwNDAwMDAK KyNkZWZpbmUJQ1BVSURfQ0xGU0gJMHgwMDA4MDAwMAorI2RlZmluZQlDUFVJRF9CMjAJMHgwMDEw MDAwMAorI2RlZmluZQlDUFVJRF9EUwkweDAwMjAwMDAwCisjZGVmaW5lCUNQVUlEX0FDUEkJMHgw MDQwMDAwMAorI2RlZmluZQlDUFVJRF9NTVgJMHgwMDgwMDAwMAorI2RlZmluZQlDUFVJRF9GWFNS CTB4MDEwMDAwMDAKKyNkZWZpbmUJQ1BVSURfU1NFCTB4MDIwMDAwMDAKKyNkZWZpbmUJQ1BVSURf WE1NCTB4MDIwMDAwMDAKKyNkZWZpbmUJQ1BVSURfU1NFMgkweDA0MDAwMDAwCisjZGVmaW5lCUNQ VUlEX1NTCTB4MDgwMDAwMDAKKyNkZWZpbmUJQ1BVSURfSFRUCTB4MTAwMDAwMDAKKyNkZWZpbmUJ Q1BVSURfVE0JMHgyMDAwMDAwMAorI2RlZmluZQlDUFVJRF9JQTY0CTB4NDAwMDAwMDAKKyNkZWZp bmUJQ1BVSURfUEJFCTB4ODAwMDAwMDAKKworI2RlZmluZQlDUFVJRDJfU1NFMwkweDAwMDAwMDAx CisjZGVmaW5lCUNQVUlEMl9QQ0xNVUxRRFEgMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRDJfRFRF UzY0CTB4MDAwMDAwMDQKKyNkZWZpbmUJQ1BVSUQyX01PTgkweDAwMDAwMDA4CisjZGVmaW5lCUNQ VUlEMl9EU19DUEwJMHgwMDAwMDAxMAorI2RlZmluZQlDUFVJRDJfVk1YCTB4MDAwMDAwMjAKKyNk ZWZpbmUJQ1BVSUQyX1NNWAkweDAwMDAwMDQwCisjZGVmaW5lCUNQVUlEMl9FU1QJMHgwMDAwMDA4 MAorI2RlZmluZQlDUFVJRDJfVE0yCTB4MDAwMDAxMDAKKyNkZWZpbmUJQ1BVSUQyX1NTU0UzCTB4 MDAwMDAyMDAKKyNkZWZpbmUJQ1BVSUQyX0NOWFRJRAkweDAwMDAwNDAwCisjZGVmaW5lCUNQVUlE Ml9TREJHCTB4MDAwMDA4MDAKKyNkZWZpbmUJQ1BVSUQyX0ZNQQkweDAwMDAxMDAwCisjZGVmaW5l CUNQVUlEMl9DWDE2CTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSUQyX1hUUFIJMHgwMDAwNDAwMAor I2RlZmluZQlDUFVJRDJfUERDTQkweDAwMDA4MDAwCisjZGVmaW5lCUNQVUlEMl9QQ0lECTB4MDAw MjAwMDAKKyNkZWZpbmUJQ1BVSUQyX0RDQQkweDAwMDQwMDAwCisjZGVmaW5lCUNQVUlEMl9TU0U0 MQkweDAwMDgwMDAwCisjZGVmaW5lCUNQVUlEMl9TU0U0MgkweDAwMTAwMDAwCisjZGVmaW5lCUNQ VUlEMl9YMkFQSUMJMHgwMDIwMDAwMAorI2RlZmluZQlDUFVJRDJfTU9WQkUJMHgwMDQwMDAwMAor I2RlZmluZQlDUFVJRDJfUE9QQ05UCTB4MDA4MDAwMDAKKyNkZWZpbmUJQ1BVSUQyX1RTQ0RMVAkw eDAxMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9BRVNOSQkweDAyMDAwMDAwCisjZGVmaW5lCUNQVUlE Ml9YU0FWRQkweDA0MDAwMDAwCisjZGVmaW5lCUNQVUlEMl9PU1hTQVZFCTB4MDgwMDAwMDAKKyNk ZWZpbmUJQ1BVSUQyX0FWWAkweDEwMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9GMTZDCTB4MjAwMDAw MDAKKyNkZWZpbmUJQ1BVSUQyX1JEUkFORAkweDQwMDAwMDAwCisjZGVmaW5lCUNQVUlEMl9IVgkw eDgwMDAwMDAwCisKKy8qCisgKiBJbXBvcnRhbnQgYml0cyBpbiB0aGUgVGhlcm1hbCBhbmQgUG93 ZXIgTWFuYWdlbWVudCBmbGFncworICogQ1BVSUQuNiBFQVggYW5kIEVDWC4KKyAqLworI2RlZmlu ZQlDUFVUUE0xX1NFTlNPUgkweDAwMDAwMDAxCisjZGVmaW5lCUNQVVRQTTFfVFVSQk8JMHgwMDAw MDAwMgorI2RlZmluZQlDUFVUUE0xX0FSQVQJMHgwMDAwMDAwNAorI2RlZmluZQlDUFVUUE0yX0VG RlJFUQkweDAwMDAwMDAxCisKKy8qCisgKiBJbXBvcnRhbnQgYml0cyBpbiB0aGUgQU1EIGV4dGVu ZGVkIGNwdWlkIGZsYWdzCisgKi8KKyNkZWZpbmUJQU1ESURfU1lTQ0FMTAkweDAwMDAwODAwCisj ZGVmaW5lCUFNRElEX01QCTB4MDAwODAwMDAKKyNkZWZpbmUJQU1ESURfTlgJMHgwMDEwMDAwMAor I2RlZmluZQlBTURJRF9FWFRfTU1YCTB4MDA0MDAwMDAKKyNkZWZpbmUJQU1ESURfRkZYU1IJMHgw MjAwMDAwMAorI2RlZmluZQlBTURJRF9QQUdFMUdCCTB4MDQwMDAwMDAKKyNkZWZpbmUJQU1ESURf UkRUU0NQCTB4MDgwMDAwMDAKKyNkZWZpbmUJQU1ESURfTE0JMHgyMDAwMDAwMAorI2RlZmluZQlB TURJRF9FWFRfM0ROT1cJMHg0MDAwMDAwMAorI2RlZmluZQlBTURJRF8zRE5PVwkweDgwMDAwMDAw CisKKyNkZWZpbmUJQU1ESUQyX0xBSEYJMHgwMDAwMDAwMQorI2RlZmluZQlBTURJRDJfQ01QCTB4 MDAwMDAwMDIKKyNkZWZpbmUJQU1ESUQyX1NWTQkweDAwMDAwMDA0CisjZGVmaW5lCUFNRElEMl9F WFRfQVBJQwkweDAwMDAwMDA4CisjZGVmaW5lCUFNRElEMl9DUjgJMHgwMDAwMDAxMAorI2RlZmlu ZQlBTURJRDJfQUJNCTB4MDAwMDAwMjAKKyNkZWZpbmUJQU1ESUQyX1NTRTRBCTB4MDAwMDAwNDAK KyNkZWZpbmUJQU1ESUQyX01BUwkweDAwMDAwMDgwCisjZGVmaW5lCUFNRElEMl9QUkVGRVRDSAkw eDAwMDAwMTAwCisjZGVmaW5lCUFNRElEMl9PU1ZXCTB4MDAwMDAyMDAKKyNkZWZpbmUJQU1ESUQy X0lCUwkweDAwMDAwNDAwCisjZGVmaW5lCUFNRElEMl9YT1AJMHgwMDAwMDgwMAorI2RlZmluZQlB TURJRDJfU0tJTklUCTB4MDAwMDEwMDAKKyNkZWZpbmUJQU1ESUQyX1dEVAkweDAwMDAyMDAwCisj ZGVmaW5lCUFNRElEMl9MV1AJMHgwMDAwODAwMAorI2RlZmluZQlBTURJRDJfRk1BNAkweDAwMDEw MDAwCisjZGVmaW5lCUFNRElEMl9UQ0UJMHgwMDAyMDAwMAorI2RlZmluZQlBTURJRDJfTk9ERV9J RAkweDAwMDgwMDAwCisjZGVmaW5lCUFNRElEMl9UQk0JMHgwMDIwMDAwMAorI2RlZmluZQlBTURJ RDJfVE9QT0xPR1kJMHgwMDQwMDAwMAorI2RlZmluZQlBTURJRDJfUENYQwkweDAwODAwMDAwCisj ZGVmaW5lCUFNRElEMl9QTlhDCTB4MDEwMDAwMDAKKyNkZWZpbmUJQU1ESUQyX0RCRQkweDA0MDAw MDAwCisjZGVmaW5lCUFNRElEMl9QVFNDCTB4MDgwMDAwMDAKKyNkZWZpbmUJQU1ESUQyX1BUU0NF TDJJCTB4MTAwMDAwMDAKKworLyoKKyAqIENQVUlEIGluc3RydWN0aW9uIDEgZWF4IGluZm8KKyAq LworI2RlZmluZQlDUFVJRF9TVEVQUElORwkJMHgwMDAwMDAwZgorI2RlZmluZQlDUFVJRF9NT0RF TAkJMHgwMDAwMDBmMAorI2RlZmluZQlDUFVJRF9GQU1JTFkJCTB4MDAwMDBmMDAKKyNkZWZpbmUJ Q1BVSURfRVhUX01PREVMCQkweDAwMGYwMDAwCisjZGVmaW5lCUNQVUlEX0VYVF9GQU1JTFkJMHgw ZmYwMDAwMAorI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lCUNQVUlEX1RPX01PREVMKGlkKSBcCisg ICAgKCgoKGlkKSAmIENQVUlEX01PREVMKSA+PiA0KSB8IFwKKyAgICAoKCgoaWQpICYgQ1BVSURf RkFNSUxZKSA+PSAweDYwMCkgPyBcCisgICAgKCgoaWQpICYgQ1BVSURfRVhUX01PREVMKSA+PiAx MikgOiAwKSkKKyNkZWZpbmUJQ1BVSURfVE9fRkFNSUxZKGlkKSBcCisgICAgKCgoKGlkKSAmIENQ VUlEX0ZBTUlMWSkgPj4gOCkgKyBcCisgICAgKCgoKGlkKSAmIENQVUlEX0ZBTUlMWSkgPT0gMHhm MDApID8gXAorICAgICgoKGlkKSAmIENQVUlEX0VYVF9GQU1JTFkpID4+IDIwKSA6IDApKQorI2Vs c2UKKyNkZWZpbmUJQ1BVSURfVE9fTU9ERUwoaWQpIFwKKyAgICAoKCgoaWQpICYgQ1BVSURfTU9E RUwpID4+IDQpIHwgXAorICAgICgoKGlkKSAmIENQVUlEX0VYVF9NT0RFTCkgPj4gMTIpKQorI2Rl ZmluZQlDUFVJRF9UT19GQU1JTFkoaWQpIFwKKyAgICAoKCgoaWQpICYgQ1BVSURfRkFNSUxZKSA+ PiA4KSArIFwKKyAgICAoKChpZCkgJiBDUFVJRF9FWFRfRkFNSUxZKSA+PiAyMCkpCisjZW5kaWYK KworLyoKKyAqIENQVUlEIGluc3RydWN0aW9uIDEgZWJ4IGluZm8KKyAqLworI2RlZmluZQlDUFVJ RF9CUkFORF9JTkRFWAkweDAwMDAwMGZmCisjZGVmaW5lCUNQVUlEX0NMRlVTSF9TSVpFCTB4MDAw MGZmMDAKKyNkZWZpbmUJQ1BVSURfSFRUX0NPUkVTCQkweDAwZmYwMDAwCisjZGVmaW5lCUNQVUlE X0xPQ0FMX0FQSUNfSUQJMHhmZjAwMDAwMAorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gNSBp bmZvCisgKi8KKyNkZWZpbmUJQ1BVSUQ1X01PTl9NSU5fU0laRQkweDAwMDBmZmZmCS8qIGVheCAq LworI2RlZmluZQlDUFVJRDVfTU9OX01BWF9TSVpFCTB4MDAwMGZmZmYJLyogZWJ4ICovCisjZGVm aW5lCUNQVUlENV9NT05fTVdBSVRfRVhUCTB4MDAwMDAwMDEJLyogZWN4ICovCisjZGVmaW5lCUNQ VUlENV9NV0FJVF9JTlRSQlJFQUsJMHgwMDAwMDAwMgkvKiBlY3ggKi8KKworLyoKKyAqIE1XQUlU IGNwdSBwb3dlciBzdGF0ZXMuICBMb3dlciA0IGJpdHMgYXJlIHN1Yi1zdGF0ZXMuCisgKi8KKyNk ZWZpbmUJTVdBSVRfQzAJMHhmMAorI2RlZmluZQlNV0FJVF9DMQkweDAwCisjZGVmaW5lCU1XQUlU X0MyCTB4MTAKKyNkZWZpbmUJTVdBSVRfQzMJMHgyMAorI2RlZmluZQlNV0FJVF9DNAkweDMwCisK Ky8qCisgKiBNV0FJVCBleHRlbnNpb25zLgorICovCisvKiBJbnRlcnJ1cHQgYnJlYWtzIE1XQUlU IGV2ZW4gd2hlbiBtYXNrZWQuICovCisjZGVmaW5lCU1XQUlUX0lOVFJCUkVBSwkJMHgwMDAwMDAw MQorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gNiBlY3ggaW5mbworICovCisjZGVmaW5lCUNQ VUlEX1BFUkZfU1RBVAkJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9QRVJGX0JJQVMJCTB4MDAw MDAwMDgKKworLyogCisgKiBDUFVJRCBpbnN0cnVjdGlvbiAweGIgZWJ4IGluZm8uCisgKi8KKyNk ZWZpbmUJQ1BVSURfVFlQRV9JTlZBTAkwCisjZGVmaW5lCUNQVUlEX1RZUEVfU01UCQkxCisjZGVm aW5lCUNQVUlEX1RZUEVfQ09SRQkJMgorCisvKgorICogQ1BVSUQgaW5zdHJ1Y3Rpb24gMHhkIFBy b2Nlc3NvciBFeHRlbmRlZCBTdGF0ZSBFbnVtZXJhdGlvbiBTdWItbGVhZiAxCisgKi8KKyNkZWZp bmUJQ1BVSURfRVhUU1RBVEVfWFNBVkVPUFQJMHgwMDAwMDAwMQorI2RlZmluZQlDUFVJRF9FWFRT VEFURV9YU0FWRUMJMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRF9FWFRTVEFURV9YSU5VU0UJMHgw MDAwMDAwNAorI2RlZmluZQlDUFVJRF9FWFRTVEFURV9YU0FWRVMJMHgwMDAwMDAwOAorCisvKgor ICogQU1EIGV4dGVuZGVkIGZ1bmN0aW9uIDgwMDBfMDAwN2ggZWR4IGluZm8KKyAqLworI2RlZmlu ZQlBTURQTV9UUwkJMHgwMDAwMDAwMQorI2RlZmluZQlBTURQTV9GSUQJCTB4MDAwMDAwMDIKKyNk ZWZpbmUJQU1EUE1fVklECQkweDAwMDAwMDA0CisjZGVmaW5lCUFNRFBNX1RUUAkJMHgwMDAwMDAw OAorI2RlZmluZQlBTURQTV9UTQkJMHgwMDAwMDAxMAorI2RlZmluZQlBTURQTV9TVEMJCTB4MDAw MDAwMjAKKyNkZWZpbmUJQU1EUE1fMTAwTUhaX1NURVBTCTB4MDAwMDAwNDAKKyNkZWZpbmUJQU1E UE1fSFdfUFNUQVRFCQkweDAwMDAwMDgwCisjZGVmaW5lCUFNRFBNX1RTQ19JTlZBUklBTlQJMHgw MDAwMDEwMAorI2RlZmluZQlBTURQTV9DUEIJCTB4MDAwMDAyMDAKKworLyoKKyAqIEFNRCBleHRl bmRlZCBmdW5jdGlvbiA4MDAwXzAwMDhoIGVjeCBpbmZvCisgKi8KKyNkZWZpbmUJQU1ESURfQ01Q X0NPUkVTCQkweDAwMDAwMGZmCisjZGVmaW5lCUFNRElEX0NPUkVJRF9TSVpFCTB4MDAwMGYwMDAK KyNkZWZpbmUJQU1ESURfQ09SRUlEX1NJWkVfU0hJRlQJMTIKKworLyoKKyAqIENQVUlEIGluc3Ry dWN0aW9uIDcgU3RydWN0dXJlZCBFeHRlbmRlZCBGZWF0dXJlcywgbGVhZiAwIGVieCBpbmZvCisg Ki8KKyNkZWZpbmUJQ1BVSURfU1RERVhUX0ZTR1NCQVNFCTB4MDAwMDAwMDEKKyNkZWZpbmUJQ1BV SURfU1RERVhUX1RTQ19BREpVU1QJMHgwMDAwMDAwMgorI2RlZmluZQlDUFVJRF9TVERFWFRfU0dY CTB4MDAwMDAwMDQKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0JNSTEJMHgwMDAwMDAwOAorI2RlZmlu ZQlDUFVJRF9TVERFWFRfSExFCTB4MDAwMDAwMTAKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0FWWDIJ MHgwMDAwMDAyMAorI2RlZmluZQlDUFVJRF9TVERFWFRfRkRQX0VYQwkweDAwMDAwMDQwCisjZGVm aW5lCUNQVUlEX1NUREVYVF9TTUVQCTB4MDAwMDAwODAKKyNkZWZpbmUJQ1BVSURfU1RERVhUX0JN STIJMHgwMDAwMDEwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfRVJNUwkweDAwMDAwMjAwCisjZGVm aW5lCUNQVUlEX1NUREVYVF9JTlZQQ0lECTB4MDAwMDA0MDAKKyNkZWZpbmUJQ1BVSURfU1RERVhU X1JUTQkweDAwMDAwODAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUU0JMHgwMDAwMTAwMAorI2Rl ZmluZQlDUFVJRF9TVERFWFRfTkZQVVNHCTB4MDAwMDIwMDAKKyNkZWZpbmUJQ1BVSURfU1RERVhU X01QWAkweDAwMDA0MDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUUUJMHgwMDAwODAwMAorI2Rl ZmluZQlDUFVJRF9TVERFWFRfQVZYNTEyRgkweDAwMDEwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVY VF9BVlg1MTJEUQkweDAwMDIwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9SRFNFRUQJMHgwMDA0 MDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQURYCTB4MDAwODAwMDAKKyNkZWZpbmUJQ1BVSURf U1RERVhUX1NNQVAJMHgwMDEwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZYNTEySUZNQQkw eDAwMjAwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QQ09NTUlUCTB4MDA0MDAwMDAKKyNkZWZp bmUJQ1BVSURfU1RERVhUX0NMRkxVU0hPUFQJMHgwMDgwMDAwMAorI2RlZmluZQlDUFVJRF9TVERF WFRfQ0xXQgkweDAxMDAwMDAwCisjZGVmaW5lCUNQVUlEX1NUREVYVF9QUk9DVFJBQ0UJMHgwMjAw MDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZYNTEyUEYJMHgwNDAwMDAwMAorI2RlZmluZQlD UFVJRF9TVERFWFRfQVZYNTEyRVIJMHgwODAwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfQVZY NTEyQ0QJMHgxMDAwMDAwMAorI2RlZmluZQlDUFVJRF9TVERFWFRfU0hBCTB4MjAwMDAwMDAKKyNk ZWZpbmUJQ1BVSURfU1RERVhUX0FWWDUxMkJXCTB4NDAwMDAwMDAKKworLyoKKyAqIENQVUlEIGlu c3RydWN0aW9uIDcgU3RydWN0dXJlZCBFeHRlbmRlZCBGZWF0dXJlcywgbGVhZiAwIGVjeCBpbmZv CisgKi8KKyNkZWZpbmUJQ1BVSURfU1RERVhUMl9QUkVGRVRDSFdUMSAweDAwMDAwMDAxCisjZGVm aW5lCUNQVUlEX1NUREVYVDJfVU1JUAkweDAwMDAwMDA0CisjZGVmaW5lCUNQVUlEX1NUREVYVDJf UEtVCTB4MDAwMDAwMDgKKyNkZWZpbmUJQ1BVSURfU1RERVhUMl9PU1BLRQkweDAwMDAwMDEwCisj ZGVmaW5lCUNQVUlEX1NUREVYVDJfUkRQSUQJMHgwMDQwMDAwMAorI2RlZmluZQlDUFVJRF9TVERF WFQyX1NHWExDCTB4NDAwMDAwMDAKKworLyoKKyAqIENQVUlEIG1hbnVmYWN0dXJlcnMgaWRlbnRp ZmllcnMKKyAqLworI2RlZmluZQlBTURfVkVORE9SX0lECQkiQXV0aGVudGljQU1EIgorI2RlZmlu ZQlDRU5UQVVSX1ZFTkRPUl9JRAkiQ2VudGF1ckhhdWxzIgorI2RlZmluZQlDWVJJWF9WRU5ET1Jf SUQJCSJDeXJpeEluc3RlYWQiCisjZGVmaW5lCUlOVEVMX1ZFTkRPUl9JRAkJIkdlbnVpbmVJbnRl bCIKKyNkZWZpbmUJTkVYR0VOX1ZFTkRPUl9JRAkiTmV4R2VuRHJpdmVuIgorI2RlZmluZQlOU0Nf VkVORE9SX0lECQkiR2VvZGUgYnkgTlNDIgorI2RlZmluZQlSSVNFX1ZFTkRPUl9JRAkJIlJpc2VS aXNlUmlzZSIKKyNkZWZpbmUJU0lTX1ZFTkRPUl9JRAkJIlNpUyBTaVMgU2lTICIKKyNkZWZpbmUJ VFJBTlNNRVRBX1ZFTkRPUl9JRAkiR2VudWluZVRNeDg2IgorI2RlZmluZQlVTUNfVkVORE9SX0lE CQkiVU1DIFVNQyBVTUMgIgorCisvKgorICogTW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXJzIGZvciB0 aGUgaTM4NiBmYW1pbHkKKyAqLworI2RlZmluZQlNU1JfUDVfTUNfQUREUgkJMHgwMDAKKyNkZWZp bmUJTVNSX1A1X01DX1RZUEUJCTB4MDAxCisjZGVmaW5lCU1TUl9UU0MJCQkweDAxMAorI2RlZmlu ZQlNU1JfUDVfQ0VTUgkJMHgwMTEKKyNkZWZpbmUJTVNSX1A1X0NUUjAJCTB4MDEyCisjZGVmaW5l CU1TUl9QNV9DVFIxCQkweDAxMworI2RlZmluZQlNU1JfSUEzMl9QTEFURk9STV9JRAkweDAxNwor I2RlZmluZQlNU1JfQVBJQ0JBU0UJCTB4MDFiCisjZGVmaW5lCU1TUl9FQkxfQ1JfUE9XRVJPTgkw eDAyYQorI2RlZmluZQlNU1JfVEVTVF9DVEwJCTB4MDMzCisjZGVmaW5lCU1TUl9JQTMyX0ZFQVRV UkVfQ09OVFJPTCAweDAzYQorI2RlZmluZQlNU1JfQklPU19VUERUX1RSSUcJMHgwNzkKKyNkZWZp bmUJTVNSX0JCTF9DUl9EMAkJMHgwODgKKyNkZWZpbmUJTVNSX0JCTF9DUl9EMQkJMHgwODkKKyNk ZWZpbmUJTVNSX0JCTF9DUl9EMgkJMHgwOGEKKyNkZWZpbmUJTVNSX0JJT1NfU0lHTgkJMHgwOGIK KyNkZWZpbmUJTVNSX1BFUkZDVFIwCQkweDBjMQorI2RlZmluZQlNU1JfUEVSRkNUUjEJCTB4MGMy CisjZGVmaW5lCU1TUl9QTEFURk9STV9JTkZPCTB4MGNlCisjZGVmaW5lCU1TUl9NUEVSRgkJMHgw ZTcKKyNkZWZpbmUJTVNSX0FQRVJGCQkweDBlOAorI2RlZmluZQlNU1JfSUEzMl9FWFRfQ09ORklH CTB4MGVlCS8qIFVuZG9jdW1lbnRlZC4gQ29yZSBTb2xvL0R1byBvbmx5ICovCisjZGVmaW5lCU1T Ul9NVFJSY2FwCQkweDBmZQorI2RlZmluZQlNU1JfQkJMX0NSX0FERFIJCTB4MTE2CisjZGVmaW5l CU1TUl9CQkxfQ1JfREVDQwkJMHgxMTgKKyNkZWZpbmUJTVNSX0JCTF9DUl9DVEwJCTB4MTE5Cisj ZGVmaW5lCU1TUl9CQkxfQ1JfVFJJRwkJMHgxMWEKKyNkZWZpbmUJTVNSX0JCTF9DUl9CVVNZCQkw eDExYgorI2RlZmluZQlNU1JfQkJMX0NSX0NUTDMJCTB4MTFlCisjZGVmaW5lCU1TUl9TWVNFTlRF Ul9DU19NU1IJMHgxNzQKKyNkZWZpbmUJTVNSX1NZU0VOVEVSX0VTUF9NU1IJMHgxNzUKKyNkZWZp bmUJTVNSX1NZU0VOVEVSX0VJUF9NU1IJMHgxNzYKKyNkZWZpbmUJTVNSX01DR19DQVAJCTB4MTc5 CisjZGVmaW5lCU1TUl9NQ0dfU1RBVFVTCQkweDE3YQorI2RlZmluZQlNU1JfTUNHX0NUTAkJMHgx N2IKKyNkZWZpbmUJTVNSX0VWTlRTRUwwCQkweDE4NgorI2RlZmluZQlNU1JfRVZOVFNFTDEJCTB4 MTg3CisjZGVmaW5lCU1TUl9USEVSTV9DT05UUk9MCTB4MTlhCisjZGVmaW5lCU1TUl9USEVSTV9J TlRFUlJVUFQJMHgxOWIKKyNkZWZpbmUJTVNSX1RIRVJNX1NUQVRVUwkweDE5YworI2RlZmluZQlN U1JfSUEzMl9NSVNDX0VOQUJMRQkweDFhMAorI2RlZmluZQlNU1JfSUEzMl9URU1QRVJBVFVSRV9U QVJHRVQJMHgxYTIKKyNkZWZpbmUJTVNSX1RVUkJPX1JBVElPX0xJTUlUCTB4MWFkCisjZGVmaW5l CU1TUl9UVVJCT19SQVRJT19MSU1JVDEJMHgxYWUKKyNkZWZpbmUJTVNSX0RFQlVHQ1RMTVNSCQkw eDFkOQorI2RlZmluZQlNU1JfTEFTVEJSQU5DSEZST01JUAkweDFkYgorI2RlZmluZQlNU1JfTEFT VEJSQU5DSFRPSVAJMHgxZGMKKyNkZWZpbmUJTVNSX0xBU1RJTlRGUk9NSVAJMHgxZGQKKyNkZWZp bmUJTVNSX0xBU1RJTlRUT0lQCQkweDFkZQorI2RlZmluZQlNU1JfUk9CX0NSX0JLVVBUTVBEUjYJ MHgxZTAKKyNkZWZpbmUJTVNSX01UUlJWYXJCYXNlCQkweDIwMAorI2RlZmluZQlNU1JfTVRSUjY0 a0Jhc2UJCTB4MjUwCisjZGVmaW5lCU1TUl9NVFJSMTZrQmFzZQkJMHgyNTgKKyNkZWZpbmUJTVNS X01UUlI0a0Jhc2UJCTB4MjY4CisjZGVmaW5lCU1TUl9QQVQJCQkweDI3NworI2RlZmluZQlNU1Jf TUMwX0NUTDIJCTB4MjgwCisjZGVmaW5lCU1TUl9NVFJSZGVmVHlwZQkJMHgyZmYKKyNkZWZpbmUJ TVNSX01DMF9DVEwJCTB4NDAwCisjZGVmaW5lCU1TUl9NQzBfU1RBVFVTCQkweDQwMQorI2RlZmlu ZQlNU1JfTUMwX0FERFIJCTB4NDAyCisjZGVmaW5lCU1TUl9NQzBfTUlTQwkJMHg0MDMKKyNkZWZp bmUJTVNSX01DMV9DVEwJCTB4NDA0CisjZGVmaW5lCU1TUl9NQzFfU1RBVFVTCQkweDQwNQorI2Rl ZmluZQlNU1JfTUMxX0FERFIJCTB4NDA2CisjZGVmaW5lCU1TUl9NQzFfTUlTQwkJMHg0MDcKKyNk ZWZpbmUJTVNSX01DMl9DVEwJCTB4NDA4CisjZGVmaW5lCU1TUl9NQzJfU1RBVFVTCQkweDQwOQor I2RlZmluZQlNU1JfTUMyX0FERFIJCTB4NDBhCisjZGVmaW5lCU1TUl9NQzJfTUlTQwkJMHg0MGIK KyNkZWZpbmUJTVNSX01DM19DVEwJCTB4NDBjCisjZGVmaW5lCU1TUl9NQzNfU1RBVFVTCQkweDQw ZAorI2RlZmluZQlNU1JfTUMzX0FERFIJCTB4NDBlCisjZGVmaW5lCU1TUl9NQzNfTUlTQwkJMHg0 MGYKKyNkZWZpbmUJTVNSX01DNF9DVEwJCTB4NDEwCisjZGVmaW5lCU1TUl9NQzRfU1RBVFVTCQkw eDQxMQorI2RlZmluZQlNU1JfTUM0X0FERFIJCTB4NDEyCisjZGVmaW5lCU1TUl9NQzRfTUlTQwkJ MHg0MTMKKyNkZWZpbmUJTVNSX1JBUExfUE9XRVJfVU5JVAkweDYwNgorI2RlZmluZQlNU1JfUEtH X0VORVJHWV9TVEFUVVMJMHg2MTEKKyNkZWZpbmUJTVNSX0RSQU1fRU5FUkdZX1NUQVRVUwkweDYx OQorI2RlZmluZQlNU1JfUFAwX0VORVJHWV9TVEFUVVMJMHg2MzkKKyNkZWZpbmUJTVNSX1BQMV9F TkVSR1lfU1RBVFVTCTB4NjQxCisjZGVmaW5lCU1TUl9UU0NfREVBRExJTkUJMHg2ZTAJLyogV3Jp dGVzIGFyZSBub3Qgc2VyaWFsaXppbmcgKi8KKworLyoKKyAqIFZNWCBNU1JzCisgKi8KKyNkZWZp bmUJTVNSX1ZNWF9CQVNJQwkJMHg0ODAKKyNkZWZpbmUJTVNSX1ZNWF9QSU5CQVNFRF9DVExTCTB4 NDgxCisjZGVmaW5lCU1TUl9WTVhfUFJPQ0JBU0VEX0NUTFMJMHg0ODIKKyNkZWZpbmUJTVNSX1ZN WF9FWElUX0NUTFMJMHg0ODMKKyNkZWZpbmUJTVNSX1ZNWF9FTlRSWV9DVExTCTB4NDg0CisjZGVm aW5lCU1TUl9WTVhfQ1IwX0ZJWEVEMAkweDQ4NgorI2RlZmluZQlNU1JfVk1YX0NSMF9GSVhFRDEJ MHg0ODcKKyNkZWZpbmUJTVNSX1ZNWF9DUjRfRklYRUQwCTB4NDg4CisjZGVmaW5lCU1TUl9WTVhf Q1I0X0ZJWEVEMQkweDQ4OQorI2RlZmluZQlNU1JfVk1YX1BST0NCQVNFRF9DVExTMgkweDQ4Ygor I2RlZmluZQlNU1JfVk1YX0VQVF9WUElEX0NBUAkweDQ4YworI2RlZmluZQlNU1JfVk1YX1RSVUVf UElOQkFTRURfQ1RMUwkweDQ4ZAorI2RlZmluZQlNU1JfVk1YX1RSVUVfUFJPQ0JBU0VEX0NUTFMJ MHg0OGUKKyNkZWZpbmUJTVNSX1ZNWF9UUlVFX0VYSVRfQ1RMUwkweDQ4ZgorI2RlZmluZQlNU1Jf Vk1YX1RSVUVfRU5UUllfQ1RMUwkweDQ5MAorCisvKgorICogWDJBUElDIE1TUnMuCisgKiBXcml0 ZXMgYXJlIG5vdCBzZXJpYWxpemluZy4KKyAqLworI2RlZmluZQlNU1JfQVBJQ18wMDAJCTB4ODAw CisjZGVmaW5lCU1TUl9BUElDX0lECQkweDgwMgorI2RlZmluZQlNU1JfQVBJQ19WRVJTSU9OCTB4 ODAzCisjZGVmaW5lCU1TUl9BUElDX1RQUgkJMHg4MDgKKyNkZWZpbmUJTVNSX0FQSUNfRU9JCQkw eDgwYgorI2RlZmluZQlNU1JfQVBJQ19MRFIJCTB4ODBkCisjZGVmaW5lCU1TUl9BUElDX1NWUgkJ MHg4MGYKKyNkZWZpbmUJTVNSX0FQSUNfSVNSMAkJMHg4MTAKKyNkZWZpbmUJTVNSX0FQSUNfSVNS MQkJMHg4MTEKKyNkZWZpbmUJTVNSX0FQSUNfSVNSMgkJMHg4MTIKKyNkZWZpbmUJTVNSX0FQSUNf SVNSMwkJMHg4MTMKKyNkZWZpbmUJTVNSX0FQSUNfSVNSNAkJMHg4MTQKKyNkZWZpbmUJTVNSX0FQ SUNfSVNSNQkJMHg4MTUKKyNkZWZpbmUJTVNSX0FQSUNfSVNSNgkJMHg4MTYKKyNkZWZpbmUJTVNS X0FQSUNfSVNSNwkJMHg4MTcKKyNkZWZpbmUJTVNSX0FQSUNfVE1SMAkJMHg4MTgKKyNkZWZpbmUJ TVNSX0FQSUNfSVJSMAkJMHg4MjAKKyNkZWZpbmUJTVNSX0FQSUNfRVNSCQkweDgyOAorI2RlZmlu ZQlNU1JfQVBJQ19MVlRfQ01DSQkweDgyRgorI2RlZmluZQlNU1JfQVBJQ19JQ1IJCTB4ODMwCisj ZGVmaW5lCU1TUl9BUElDX0xWVF9USU1FUgkweDgzMgorI2RlZmluZQlNU1JfQVBJQ19MVlRfVEhF Uk1BTAkweDgzMworI2RlZmluZQlNU1JfQVBJQ19MVlRfUENJTlQJMHg4MzQKKyNkZWZpbmUJTVNS X0FQSUNfTFZUX0xJTlQwCTB4ODM1CisjZGVmaW5lCU1TUl9BUElDX0xWVF9MSU5UMQkweDgzNgor I2RlZmluZQlNU1JfQVBJQ19MVlRfRVJST1IJMHg4MzcKKyNkZWZpbmUJTVNSX0FQSUNfSUNSX1RJ TUVSCTB4ODM4CisjZGVmaW5lCU1TUl9BUElDX0NDUl9USU1FUgkweDgzOQorI2RlZmluZQlNU1Jf QVBJQ19EQ1JfVElNRVIJMHg4M2UKKyNkZWZpbmUJTVNSX0FQSUNfU0VMRl9JUEkJMHg4M2YKKwor I2RlZmluZQlNU1JfSUEzMl9YU1MJCTB4ZGEwCisKKy8qCisgKiBDb25zdGFudHMgcmVsYXRlZCB0 byBNU1Incy4KKyAqLworI2RlZmluZQlBUElDQkFTRV9SRVNFUlZFRAkweDAwMDAwMmZmCisjZGVm aW5lCUFQSUNCQVNFX0JTUAkJMHgwMDAwMDEwMAorI2RlZmluZQlBUElDQkFTRV9YMkFQSUMJCTB4 MDAwMDA0MDAKKyNkZWZpbmUJQVBJQ0JBU0VfRU5BQkxFRAkweDAwMDAwODAwCisjZGVmaW5lCUFQ SUNCQVNFX0FERFJFU1MJMHhmZmZmZjAwMAorCisvKiBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0wg cmVsYXRlZCAqLworI2RlZmluZQlJQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLCTB4MDEJLyogbG9j ayBiaXQgKi8KKyNkZWZpbmUJSUEzMl9GRUFUVVJFX0NPTlRST0xfU01YX0VOCTB4MDIJLyogZW5h YmxlIFZNWCBpbnNpZGUgU01YICovCisjZGVmaW5lCUlBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWF9F TgkweDA0CS8qIGVuYWJsZSBWTVggb3V0c2lkZSBTTVggKi8KKworLyogTVNSIElBMzJfTUlTQ19F TkFCTEUgKi8KKyNkZWZpbmUJSUEzMl9NSVNDX0VOX0ZBU1RTVFIJMHgwMDAwMDAwMDAwMDAwMDAx VUxMCisjZGVmaW5lCUlBMzJfTUlTQ19FTl9BVENDRQkweDAwMDAwMDAwMDAwMDAwMDhVTEwKKyNk ZWZpbmUJSUEzMl9NSVNDX0VOX1BFUkZNT04JMHgwMDAwMDAwMDAwMDAwMDgwVUxMCisjZGVmaW5l CUlBMzJfTUlTQ19FTl9QRUJTVQkweDAwMDAwMDAwMDAwMDEwMDBVTEwKKyNkZWZpbmUJSUEzMl9N SVNDX0VOX0VTU1RFCTB4MDAwMDAwMDAwMDAxMDAwMFVMTAorI2RlZmluZQlJQTMyX01JU0NfRU5f TU9ORQkweDAwMDAwMDAwMDAwNDAwMDBVTEwKKyNkZWZpbmUJSUEzMl9NSVNDX0VOX0xJTUNQVUlE CTB4MDAwMDAwMDAwMDQwMDAwMFVMTAorI2RlZmluZQlJQTMyX01JU0NfRU5feFRQUkQJMHgwMDAw MDAwMDAwODAwMDAwVUxMCisjZGVmaW5lCUlBMzJfTUlTQ19FTl9YREQJMHgwMDAwMDAwNDAwMDAw MDAwVUxMCisKKy8qCisgKiBQQVQgbW9kZXMuCisgKi8KKyNkZWZpbmUJUEFUX1VOQ0FDSEVBQkxF CQkweDAwCisjZGVmaW5lCVBBVF9XUklURV9DT01CSU5JTkcJMHgwMQorI2RlZmluZQlQQVRfV1JJ VEVfVEhST1VHSAkweDA0CisjZGVmaW5lCVBBVF9XUklURV9QUk9URUNURUQJMHgwNQorI2RlZmlu ZQlQQVRfV1JJVEVfQkFDSwkJMHgwNgorI2RlZmluZQlQQVRfVU5DQUNIRUQJCTB4MDcKKyNkZWZp bmUJUEFUX1ZBTFVFKGksIG0pCQkoKGxvbmcgbG9uZykobSkgPDwgKDggKiAoaSkpKQorI2RlZmlu ZQlQQVRfTUFTSyhpKQkJUEFUX1ZBTFVFKGksIDB4ZmYpCisKKy8qCisgKiBDb25zdGFudHMgcmVs YXRlZCB0byBNVFJScworICovCisjZGVmaW5lCU1UUlJfVU5DQUNIRUFCTEUJMHgwMAorI2RlZmlu ZQlNVFJSX1dSSVRFX0NPTUJJTklORwkweDAxCisjZGVmaW5lCU1UUlJfV1JJVEVfVEhST1VHSAkw eDA0CisjZGVmaW5lCU1UUlJfV1JJVEVfUFJPVEVDVEVECTB4MDUKKyNkZWZpbmUJTVRSUl9XUklU RV9CQUNLCQkweDA2CisjZGVmaW5lCU1UUlJfTjY0SwkJOAkvKiBudW1iZXJzIG9mIGZpeGVkLXNp emUgZW50cmllcyAqLworI2RlZmluZQlNVFJSX04xNksJCTE2CisjZGVmaW5lCU1UUlJfTjRLCQk2 NAorI2RlZmluZQlNVFJSX0NBUF9XQwkJMHgwMDAwMDAwMDAwMDAwNDAwCisjZGVmaW5lCU1UUlJf Q0FQX0ZJWEVECQkweDAwMDAwMDAwMDAwMDAxMDAKKyNkZWZpbmUJTVRSUl9DQVBfVkNOVAkJMHgw MDAwMDAwMDAwMDAwMGZmCisjZGVmaW5lCU1UUlJfREVGX0VOQUJMRQkJMHgwMDAwMDAwMDAwMDAw ODAwCisjZGVmaW5lCU1UUlJfREVGX0ZJWEVEX0VOQUJMRQkweDAwMDAwMDAwMDAwMDA0MDAKKyNk ZWZpbmUJTVRSUl9ERUZfVFlQRQkJMHgwMDAwMDAwMDAwMDAwMGZmCisjZGVmaW5lCU1UUlJfUEhZ U0JBU0VfUEhZU0JBU0UJMHgwMDBmZmZmZmZmZmZmMDAwCisjZGVmaW5lCU1UUlJfUEhZU0JBU0Vf VFlQRQkweDAwMDAwMDAwMDAwMDAwZmYKKyNkZWZpbmUJTVRSUl9QSFlTTUFTS19QSFlTTUFTSwkw eDAwMGZmZmZmZmZmZmYwMDAKKyNkZWZpbmUJTVRSUl9QSFlTTUFTS19WQUxJRAkweDAwMDAwMDAw MDAwMDA4MDAKKworLyoKKyAqIEN5cml4IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBhY2Nlc3Np YmxlIGFzIElPIHBvcnRzLgorICovCisjZGVmaW5lCUNDUjAJCQkweGMwCS8qIENvbmZpZ3VyYXRp b24gY29udHJvbCByZWdpc3RlciAwICovCisjZGVmaW5lCUNDUjBfTkMwCQkweDAxCS8qIEZpcnN0 IDY0SyBvZiBlYWNoIDFNIG1lbW9yeSByZWdpb24gaXMKKwkJCQkJCQkJICAgbm9uLWNhY2hlYWJs ZSAqLworI2RlZmluZQlDQ1IwX05DMQkJMHgwMgkvKiA2NDBLLTFNIHJlZ2lvbiBpcyBub24tY2Fj aGVhYmxlICovCisjZGVmaW5lCUNDUjBfQTIwTQkJMHgwNAkvKiBFbmFibGVzIEEyME0jIGlucHV0 IHBpbiAqLworI2RlZmluZQlDQ1IwX0tFTgkJMHgwOAkvKiBFbmFibGVzIEtFTiMgaW5wdXQgcGlu ICovCisjZGVmaW5lCUNDUjBfRkxVU0gJCTB4MTAJLyogRW5hYmxlcyBGTFVTSCMgaW5wdXQgcGlu ICovCisjZGVmaW5lCUNDUjBfQkFSQgkJMHgyMAkvKiBGbHVzaGVzIGludGVybmFsIGNhY2hlIHdo ZW4gZW50ZXJpbmcgaG9sZAorCQkJCQkJCQkgICBzdGF0ZSAqLworI2RlZmluZQlDQ1IwX0NPCQkJ MHg0MAkvKiBDYWNoZSBvcmc6IDE9ZGlyZWN0IG1hcHBlZCwgMD0yeCBzZXQKKwkJCQkJCQkJICAg YXNzb2MgKi8KKyNkZWZpbmUJQ0NSMF9TVVNQRU5ECTB4ODAJLyogRW5hYmxlcyBTVVNQIyBhbmQg U1VTUEEjIHBpbnMgKi8KKworI2RlZmluZQlDQ1IxCQkJMHhjMQkvKiBDb25maWd1cmF0aW9uIGNv bnRyb2wgcmVnaXN0ZXIgMSAqLworI2RlZmluZQlDQ1IxX1JQTAkJMHgwMQkvKiBFbmFibGVzIFJQ TFNFVCBhbmQgUlBMVkFMIyBwaW5zICovCisjZGVmaW5lCUNDUjFfU01JCQkweDAyCS8qIEVuYWJs ZXMgU01NIHBpbnMgKi8KKyNkZWZpbmUJQ0NSMV9TTUFDCQkweDA0CS8qIFN5c3RlbSBtYW5hZ2Vt ZW50IG1lbW9yeSBhY2Nlc3MgKi8KKyNkZWZpbmUJQ0NSMV9NTUFDCQkweDA4CS8qIE1haW4gbWVt b3J5IGFjY2VzcyAqLworI2RlZmluZQlDQ1IxX05PX0xPQ0sJMHgxMAkvKiBOZWdhdGUgTE9DSyMg Ki8KKyNkZWZpbmUJQ0NSMV9TTTMJCTB4ODAJLyogU01NIGFkZHJlc3Mgc3BhY2UgYWRkcmVzcyBy ZWdpb24gMyAqLworCisjZGVmaW5lCUNDUjIJCQkweGMyCisjZGVmaW5lCUNDUjJfV0IJCQkweDAy CS8qIEVuYWJsZXMgV0IgY2FjaGUgaW50ZXJmYWNlIHBpbnMgKi8KKyNkZWZpbmUJQ0NSMl9TQURT CQkweDAyCS8qIFNsb3cgQURTICovCisjZGVmaW5lCUNDUjJfTE9DS19OVwkweDA0CS8qIExPQ0sg TlcgQml0ICovCisjZGVmaW5lCUNDUjJfU1VTUF9ITFQJMHgwOAkvKiBTdXNwZW5kIG9uIEhBTFQg Ki8KKyNkZWZpbmUJQ0NSMl9XVDEJCTB4MTAJLyogV1QgcmVnaW9uIDEgKi8KKyNkZWZpbmUJQ0NS Ml9XUFIxCQkweDEwCS8qIFdyaXRlLXByb3RlY3QgcmVnaW9uIDEgKi8KKyNkZWZpbmUJQ0NSMl9C QVJCCQkweDIwCS8qIEZsdXNoZXMgd3JpdGUtYmFjayBjYWNoZSB3aGVuIGVudGVyaW5nCisJCQkJ CQkJCSAgIGhvbGQgc3RhdGUuICovCisjZGVmaW5lCUNDUjJfQldSVAkJMHg0MAkvKiBFbmFibGVz IGJ1cnN0IHdyaXRlIGN5Y2xlcyAqLworI2RlZmluZQlDQ1IyX1VTRV9TVVNQCTB4ODAJLyogRW5h YmxlcyBzdXNwZW5kIHBpbnMgKi8KKworI2RlZmluZQlDQ1IzCQkJMHhjMworI2RlZmluZQlDQ1Iz X1NNSUxPQ0sJMHgwMQkvKiBTTU0gcmVnaXN0ZXIgbG9jayAqLworI2RlZmluZQlDQ1IzX05NSQkJ MHgwMgkvKiBFbmFibGVzIE5NSSBkdXJpbmcgU01NICovCisjZGVmaW5lCUNDUjNfTElOQlJTVAkw eDA0CS8qIExpbmVhciBhZGRyZXNzIGJ1cnN0IGN5Y2xlcyAqLworI2RlZmluZQlDQ1IzX1NNTU1P REUJMHgwOAkvKiBTTU0gTW9kZSAqLworI2RlZmluZQlDQ1IzX01BUEVOMAkJMHgxMAkvKiBFbmFi bGVzIE1hcDAgKi8KKyNkZWZpbmUJQ0NSM19NQVBFTjEJCTB4MjAJLyogRW5hYmxlcyBNYXAxICov CisjZGVmaW5lCUNDUjNfTUFQRU4yCQkweDQwCS8qIEVuYWJsZXMgTWFwMiAqLworI2RlZmluZQlD Q1IzX01BUEVOMwkJMHg4MAkvKiBFbmFibGVzIE1hcDMgKi8KKworI2RlZmluZQlDQ1I0CQkJMHhl OAorI2RlZmluZQlDQ1I0X0lPTUFTSwkJMHgwNworI2RlZmluZQlDQ1I0X01FTQkJMHgwOAkvKiBF bmFibGVzIG1vbW9yeSBieXBhc3NpbmcgKi8KKyNkZWZpbmUJQ0NSNF9EVEUJCTB4MTAJLyogRW5h YmxlcyBkaXJlY3RvcnkgdGFibGUgZW50cnkgY2FjaGUgKi8KKyNkZWZpbmUJQ0NSNF9GQVNURlBF CTB4MjAJLyogRmFzdCBGUFUgZXhjZXB0aW9uICovCisjZGVmaW5lCUNDUjRfQ1BVSUQJCTB4ODAJ LyogRW5hYmxlcyBDUFVJRCBpbnN0cnVjdGlvbiAqLworCisjZGVmaW5lCUNDUjUJCQkweGU5Cisj ZGVmaW5lCUNDUjVfV1RfQUxMT0MJMHgwMQkvKiBXcml0ZS10aHJvdWdoIGFsbG9jYXRlICovCisj ZGVmaW5lCUNDUjVfU0xPUAkJMHgwMgkvKiBMT09QIGluc3RydWN0aW9uIHNsb3dlZCBkb3duICov CisjZGVmaW5lCUNDUjVfTEJSMQkJMHgxMAkvKiBMb2NhbCBidXMgcmVnaW9uIDEgKi8KKyNkZWZp bmUJQ0NSNV9BUlJFTgkJMHgyMAkvKiBFbmFibGVzIEFSUiByZWdpb24gKi8KKworI2RlZmluZQlD Q1I2CQkJMHhlYQorCisjZGVmaW5lCUNDUjcJCQkweGViCisKKy8qIFBlcmZvcm1hbmNlIENvbnRy b2wgUmVnaXN0ZXIgKDV4ODYgb25seSkuICovCisjZGVmaW5lCVBDUjAJCQkweDIwCisjZGVmaW5l CVBDUjBfUlNUSwkJMHgwMQkvKiBFbmFibGVzIHJldHVybiBzdGFjayAqLworI2RlZmluZQlQQ1Iw X0JUQgkJMHgwMgkvKiBFbmFibGVzIGJyYW5jaCB0YXJnZXQgYnVmZmVyICovCisjZGVmaW5lCVBD UjBfTE9PUAkJMHgwNAkvKiBFbmFibGVzIGxvb3AgKi8KKyNkZWZpbmUJUENSMF9BSVMJCTB4MDgJ LyogRW5hYmxlcyBhbGwgaW5zdHJjdXRpb25zIHN0YWxsZWQgdG8KKwkJCQkJCQkJICAgc2VyaWFs aXplIHBpcGUuICovCisjZGVmaW5lCVBDUjBfTUxSCQkweDEwCS8qIEVuYWJsZXMgcmVvcmRlcmlu ZyBvZiBtaXNhbGlnbmVkIGxvYWRzICovCisjZGVmaW5lCVBDUjBfQlRCUlQJCTB4NDAJLyogRW5h YmxlcyBCVEIgdGVzdCByZWdpc3Rlci4gKi8KKyNkZWZpbmUJUENSMF9MU1NFUgkJMHg4MAkvKiBE aXNhYmxlIHJlb3JkZXIgKi8KKworLyogRGV2aWNlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVycyAq LworI2RlZmluZQlESVIwCQkJMHhmZQorI2RlZmluZQlESVIxCQkJMHhmZgorCisvKgorICogTWFj aGluZSBDaGVjayByZWdpc3RlciBjb25zdGFudHMuCisgKi8KKyNkZWZpbmUJTUNHX0NBUF9DT1VO VAkJMHgwMDAwMDBmZgorI2RlZmluZQlNQ0dfQ0FQX0NUTF9QCQkweDAwMDAwMTAwCisjZGVmaW5l CU1DR19DQVBfRVhUX1AJCTB4MDAwMDAyMDAKKyNkZWZpbmUJTUNHX0NBUF9DTUNJX1AJCTB4MDAw MDA0MDAKKyNkZWZpbmUJTUNHX0NBUF9URVNfUAkJMHgwMDAwMDgwMAorI2RlZmluZQlNQ0dfQ0FQ X0VYVF9DTlQJCTB4MDBmZjAwMDAKKyNkZWZpbmUJTUNHX0NBUF9TRVJfUAkJMHgwMTAwMDAwMAor I2RlZmluZQlNQ0dfU1RBVFVTX1JJUFYJCTB4MDAwMDAwMDEKKyNkZWZpbmUJTUNHX1NUQVRVU19F SVBWCQkweDAwMDAwMDAyCisjZGVmaW5lCU1DR19TVEFUVVNfTUNJUAkJMHgwMDAwMDAwNAorI2Rl ZmluZQlNQ0dfQ1RMX0VOQUJMRQkJMHhmZmZmZmZmZmZmZmZmZmZmCisjZGVmaW5lCU1DR19DVExf RElTQUJMRQkJMHgwMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lCU1TUl9NQ19DVEwoeCkJCShNU1Jf TUMwX0NUTCArICh4KSAqIDQpCisjZGVmaW5lCU1TUl9NQ19TVEFUVVMoeCkJKE1TUl9NQzBfU1RB VFVTICsgKHgpICogNCkKKyNkZWZpbmUJTVNSX01DX0FERFIoeCkJCShNU1JfTUMwX0FERFIgKyAo eCkgKiA0KQorI2RlZmluZQlNU1JfTUNfTUlTQyh4KQkJKE1TUl9NQzBfTUlTQyArICh4KSAqIDQp CisjZGVmaW5lCU1TUl9NQ19DVEwyKHgpCQkoTVNSX01DMF9DVEwyICsgKHgpKQkvKiBJZiBNQ0df Q0FQX0NNQ0lfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfTUNBX0VSUk9SCTB4MDAwMDAwMDAwMDAw ZmZmZgorI2RlZmluZQlNQ19TVEFUVVNfTU9ERUxfRVJST1IJMHgwMDAwMDAwMGZmZmYwMDAwCisj ZGVmaW5lCU1DX1NUQVRVU19PVEhFUl9JTkZPCTB4MDFmZmZmZmYwMDAwMDAwMAorI2RlZmluZQlN Q19TVEFUVVNfQ09SX0NPVU5UCTB4MDAxZmZmYzAwMDAwMDAwMAkvKiBJZiBNQ0dfQ0FQX0NNQ0lf UCAqLworI2RlZmluZQlNQ19TVEFUVVNfVEVTX1NUQVRVUwkweDAwNjAwMDAwMDAwMDAwMDAJLyog SWYgTUNHX0NBUF9URVNfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfQVIJCTB4MDA4MDAwMDAwMDAw MDAwMAkvKiBJZiBNQ0dfQ0FQX1RFU19QICovCisjZGVmaW5lCU1DX1NUQVRVU19TCQkweDAxMDAw MDAwMDAwMDAwMDAJLyogSWYgTUNHX0NBUF9URVNfUCAqLworI2RlZmluZQlNQ19TVEFUVVNfUEND CQkweDAyMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX0FERFJWCQkweDA0MDAwMDAw MDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX01JU0NWCQkweDA4MDAwMDAwMDAwMDAwMDAKKyNk ZWZpbmUJTUNfU1RBVFVTX0VOCQkweDEwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVT X1VDCQkweDIwMDAwMDAwMDAwMDAwMDAKKyNkZWZpbmUJTUNfU1RBVFVTX09WRVIJCTB4NDAwMDAw MDAwMDAwMDAwMAorI2RlZmluZQlNQ19TVEFUVVNfVkFMCQkweDgwMDAwMDAwMDAwMDAwMDAKKyNk ZWZpbmUJTUNfTUlTQ19SQV9MU0IJCTB4MDAwMDAwMDAwMDAwMDAzZgkvKiBJZiBNQ0dfQ0FQX1NF Ul9QICovCisjZGVmaW5lCU1DX01JU0NfQUREUkVTU19NT0RFCTB4MDAwMDAwMDAwMDAwMDFjMAkv KiBJZiBNQ0dfQ0FQX1NFUl9QICovCisjZGVmaW5lCU1DX0NUTDJfVEhSRVNIT0xECTB4MDAwMDAw MDAwMDAwN2ZmZgorI2RlZmluZQlNQ19DVEwyX0NNQ0lfRU4JCTB4MDAwMDAwMDA0MDAwMDAwMAor CisvKgorICogVGhlIGZvbGxvd2luZyBmb3VyIDMtYnl0ZSByZWdpc3RlcnMgY29udHJvbCB0aGUg bm9uLWNhY2hlYWJsZSByZWdpb25zLgorICogVGhlc2UgcmVnaXN0ZXJzIG11c3QgYmUgd3JpdHRl biBhcyB0aHJlZSBzZXBhcmF0ZSBieXRlcy4KKyAqCisgKiBOQ1J4KzA6IEEzMS1BMjQgb2Ygc3Rh cnRpbmcgYWRkcmVzcworICogTkNSeCsxOiBBMjMtQTE2IG9mIHN0YXJ0aW5nIGFkZHJlc3MKKyAq IE5DUngrMjogQTE1LUExMiBvZiBzdGFydGluZyBhZGRyZXNzIHwgTkNSX1NJWkVfeHguCisgKgor ICogVGhlIG5vbi1jYWNoZWFibGUgcmVnaW9uJ3Mgc3RhcnRpbmcgYWRkcmVzcyBtdXN0IGJlIGFs aWduZWQgdG8gdGhlCisgKiBzaXplIGluZGljYXRlZCBieSB0aGUgTkNSX1NJWkVfeHggZmllbGQu CisgKi8KKyNkZWZpbmUJTkNSMQkweGM0CisjZGVmaW5lCU5DUjIJMHhjNworI2RlZmluZQlOQ1Iz CTB4Y2EKKyNkZWZpbmUJTkNSNAkweGNkCisKKyNkZWZpbmUJTkNSX1NJWkVfMEsJMAorI2RlZmlu ZQlOQ1JfU0laRV80SwkxCisjZGVmaW5lCU5DUl9TSVpFXzhLCTIKKyNkZWZpbmUJTkNSX1NJWkVf MTZLCTMKKyNkZWZpbmUJTkNSX1NJWkVfMzJLCTQKKyNkZWZpbmUJTkNSX1NJWkVfNjRLCTUKKyNk ZWZpbmUJTkNSX1NJWkVfMTI4Swk2CisjZGVmaW5lCU5DUl9TSVpFXzI1NksJNworI2RlZmluZQlO Q1JfU0laRV81MTJLCTgKKyNkZWZpbmUJTkNSX1NJWkVfMU0JOQorI2RlZmluZQlOQ1JfU0laRV8y TQkxMAorI2RlZmluZQlOQ1JfU0laRV80TQkxMQorI2RlZmluZQlOQ1JfU0laRV84TQkxMgorI2Rl ZmluZQlOQ1JfU0laRV8xNk0JMTMKKyNkZWZpbmUJTkNSX1NJWkVfMzJNCTE0CisjZGVmaW5lCU5D Ul9TSVpFXzRHCTE1CisKKy8qCisgKiBUaGUgYWRkcmVzcyByZWdpb24gcmVnaXN0ZXJzIGFyZSB1 c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIGFuZAorICogc2l6ZSBmb3IgdGhlIGVpZ2h0IGFk ZHJlc3MgcmVnaW9ucy4KKyAqCisgKiBBUlJ4ICsgMDogQTMxLUEyNCBvZiBzdGFydCBhZGRyZXNz CisgKiBBUlJ4ICsgMTogQTIzLUExNiBvZiBzdGFydCBhZGRyZXNzCisgKiBBUlJ4ICsgMjogQTE1 LUExMiBvZiBzdGFydCBhZGRyZXNzIHwgQVJSX1NJWkVfeHgKKyAqLworI2RlZmluZQlBUlIwCTB4 YzQKKyNkZWZpbmUJQVJSMQkweGM3CisjZGVmaW5lCUFSUjIJMHhjYQorI2RlZmluZQlBUlIzCTB4 Y2QKKyNkZWZpbmUJQVJSNAkweGQwCisjZGVmaW5lCUFSUjUJMHhkMworI2RlZmluZQlBUlI2CTB4 ZDYKKyNkZWZpbmUJQVJSNwkweGQ5CisKKyNkZWZpbmUJQVJSX1NJWkVfMEsJCTAKKyNkZWZpbmUJ QVJSX1NJWkVfNEsJCTEKKyNkZWZpbmUJQVJSX1NJWkVfOEsJCTIKKyNkZWZpbmUJQVJSX1NJWkVf MTZLCTMKKyNkZWZpbmUJQVJSX1NJWkVfMzJLCTQKKyNkZWZpbmUJQVJSX1NJWkVfNjRLCTUKKyNk ZWZpbmUJQVJSX1NJWkVfMTI4Swk2CisjZGVmaW5lCUFSUl9TSVpFXzI1NksJNworI2RlZmluZQlB UlJfU0laRV81MTJLCTgKKyNkZWZpbmUJQVJSX1NJWkVfMU0JCTkKKyNkZWZpbmUJQVJSX1NJWkVf Mk0JCTEwCisjZGVmaW5lCUFSUl9TSVpFXzRNCQkxMQorI2RlZmluZQlBUlJfU0laRV84TQkJMTIK KyNkZWZpbmUJQVJSX1NJWkVfMTZNCTEzCisjZGVmaW5lCUFSUl9TSVpFXzMyTQkxNAorI2RlZmlu ZQlBUlJfU0laRV80RwkJMTUKKworLyoKKyAqIFRoZSByZWdpb24gY29udHJvbCByZWdpc3RlcnMg c3BlY2lmeSB0aGUgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSBBUlJ4IGFkZHJl cyByZWdpb25zLgorICovCisjZGVmaW5lCVJDUjAJMHhkYworI2RlZmluZQlSQ1IxCTB4ZGQKKyNk ZWZpbmUJUkNSMgkweGRlCisjZGVmaW5lCVJDUjMJMHhkZgorI2RlZmluZQlSQ1I0CTB4ZTAKKyNk ZWZpbmUJUkNSNQkweGUxCisjZGVmaW5lCVJDUjYJMHhlMgorI2RlZmluZQlSQ1I3CTB4ZTMKKwor I2RlZmluZQlSQ1JfUkNECTB4MDEJLyogRGlzYWJsZXMgY2FjaGluZyBmb3IgQVJSeCAoeCA9IDAt NikuICovCisjZGVmaW5lCVJDUl9SQ0UJMHgwMQkvKiBFbmFibGVzIGNhY2hpbmcgZm9yIEFSUjcu ICovCisjZGVmaW5lCVJDUl9XV08JMHgwMgkvKiBXZWFrIHdyaXRlIG9yZGVyaW5nLiAqLworI2Rl ZmluZQlSQ1JfV0wJMHgwNAkvKiBXZWFrIGxvY2tpbmcuICovCisjZGVmaW5lCVJDUl9XRwkweDA4 CS8qIFdyaXRlIGdhdGhlcmluZy4gKi8KKyNkZWZpbmUJUkNSX1dUCTB4MTAJLyogV3JpdGUtdGhy b3VnaC4gKi8KKyNkZWZpbmUJUkNSX05MQgkweDIwCS8qIExCQSMgcGluIGlzIG5vdCBhc3NlcnRl ZC4gKi8KKworLyogQU1EIFdyaXRlIEFsbG9jYXRlIFRvcC1PZi1NZW1vcnkgYW5kIENvbnRyb2wg UmVnaXN0ZXIgKi8KKyNkZWZpbmUJQU1EX1dUX0FMTE9DX1RNRQkweDQwMDAwCS8qIHRvcC1vZi1t ZW1vcnkgZW5hYmxlICovCisjZGVmaW5lCUFNRF9XVF9BTExPQ19QUkUJMHgyMDAwMAkvKiBwcm9n cmFtbWFibGUgcmFuZ2UgZW5hYmxlICovCisjZGVmaW5lCUFNRF9XVF9BTExPQ19GUkUJMHgxMDAw MAkvKiBmaXhlZCAoQTAwMDAtRkZGRkYpIHJhbmdlIGVuYWJsZSAqLworCisvKiBBTUQ2NCBNU1In cyAqLworI2RlZmluZQlNU1JfRUZFUgkweGMwMDAwMDgwCS8qIGV4dGVuZGVkIGZlYXR1cmVzICov CisjZGVmaW5lCU1TUl9TVEFSCTB4YzAwMDAwODEJLyogbGVnYWN5IG1vZGUgU1lTQ0FMTCB0YXJn ZXQvY3Mvc3MgKi8KKyNkZWZpbmUJTVNSX0xTVEFSCTB4YzAwMDAwODIJLyogbG9uZyBtb2RlIFNZ U0NBTEwgdGFyZ2V0IHJpcCAqLworI2RlZmluZQlNU1JfQ1NUQVIJMHhjMDAwMDA4MwkvKiBjb21w YXQgbW9kZSBTWVNDQUxMIHRhcmdldCByaXAgKi8KKyNkZWZpbmUJTVNSX1NGX01BU0sJMHhjMDAw MDA4NAkvKiBzeXNjYWxsIGZsYWdzIG1hc2sgKi8KKyNkZWZpbmUJTVNSX0ZTQkFTRQkweGMwMDAw MTAwCS8qIGJhc2UgYWRkcmVzcyBvZiB0aGUgJWZzICJzZWdtZW50IiAqLworI2RlZmluZQlNU1Jf R1NCQVNFCTB4YzAwMDAxMDEJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSAlZ3MgInNlZ21lbnQiICov CisjZGVmaW5lCU1TUl9LR1NCQVNFCTB4YzAwMDAxMDIJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSBr ZXJuZWwgJWdzICovCisjZGVmaW5lCU1TUl9QRVJGRVZTRUwwCTB4YzAwMTAwMDAKKyNkZWZpbmUJ TVNSX1BFUkZFVlNFTDEJMHhjMDAxMDAwMQorI2RlZmluZQlNU1JfUEVSRkVWU0VMMgkweGMwMDEw MDAyCisjZGVmaW5lCU1TUl9QRVJGRVZTRUwzCTB4YzAwMTAwMDMKKyNkZWZpbmUJTVNSX0s3X1BF UkZDVFIwCTB4YzAwMTAwMDQKKyNkZWZpbmUJTVNSX0s3X1BFUkZDVFIxCTB4YzAwMTAwMDUKKyNk ZWZpbmUJTVNSX0s3X1BFUkZDVFIyCTB4YzAwMTAwMDYKKyNkZWZpbmUJTVNSX0s3X1BFUkZDVFIz CTB4YzAwMTAwMDcKKyNkZWZpbmUJTVNSX1NZU0NGRwkweGMwMDEwMDEwCisjZGVmaW5lCU1TUl9I V0NSCTB4YzAwMTAwMTUKKyNkZWZpbmUJTVNSX0lPUlJCQVNFMAkweGMwMDEwMDE2CisjZGVmaW5l CU1TUl9JT1JSTUFTSzAJMHhjMDAxMDAxNworI2RlZmluZQlNU1JfSU9SUkJBU0UxCTB4YzAwMTAw MTgKKyNkZWZpbmUJTVNSX0lPUlJNQVNLMQkweGMwMDEwMDE5CisjZGVmaW5lCU1TUl9UT1BfTUVN CTB4YzAwMTAwMWEJLyogYm91bmRhcnkgZm9yIHJhbSBiZWxvdyA0RyAqLworI2RlZmluZQlNU1Jf VE9QX01FTTIJMHhjMDAxMDAxZAkvKiBib3VuZGFyeSBmb3IgcmFtIGFib3ZlIDRHICovCisjZGVm aW5lCU1TUl9OQl9DRkcxCTB4YzAwMTAwMWYJLyogTkIgY29uZmlndXJhdGlvbiAxICovCisjZGVm aW5lCU1TUl9QX1NUQVRFX0xJTUlUIDB4YzAwMTAwNjEJLyogUC1zdGF0ZSBDdXJyZW50IExpbWl0 IFJlZ2lzdGVyICovCisjZGVmaW5lCU1TUl9QX1NUQVRFX0NPTlRST0wgMHhjMDAxMDA2MgkvKiBQ LXN0YXRlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTVNSX1BfU1RBVEVfU1RBVFVTIDB4 YzAwMTAwNjMJLyogUC1zdGF0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTVNSX1BfU1RB VEVfQ09ORklHKG4pICgweGMwMDEwMDY0ICsgKG4pKSAvKiBQLXN0YXRlIENvbmZpZyAqLworI2Rl ZmluZQlNU1JfU01NX0FERFIJMHhjMDAxMDExMgkvKiBTTU0gVFNFRyBiYXNlIGFkZHJlc3MgKi8K KyNkZWZpbmUJTVNSX1NNTV9NQVNLCTB4YzAwMTAxMTMJLyogU01NIFRTRUcgYWRkcmVzcyBtYXNr ICovCisjZGVmaW5lCU1TUl9FWFRGRUFUVVJFUwkweGMwMDExMDA1CS8qIEV4dGVuZGVkIENQVUlE IEZlYXR1cmVzIG92ZXJyaWRlICovCisjZGVmaW5lCU1TUl9JQ19DRkcJMHhjMDAxMTAyMQkvKiBJ bnN0cnVjdGlvbiBDYWNoZSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lCU1TUl9LOF9VQ09ERV9V UERBVEUJMHhjMDAxMDAyMAkvKiB1cGRhdGUgbWljcm9jb2RlICovCisjZGVmaW5lCU1TUl9NQzBf Q1RMX01BU0sJMHhjMDAxMDA0NAorI2RlZmluZQlNU1JfVk1fQ1IJCTB4YzAwMTAxMTQgLyogU1ZN OiBmZWF0dXJlIGNvbnRyb2wgKi8KKyNkZWZpbmUJTVNSX1ZNX0hTQVZFX1BBCQkweGMwMDEwMTE3 IC8qIFNWTTogaG9zdCBzYXZlIGFyZWEgYWRkcmVzcyAqLworCisvKiBNU1JfVk1fQ1IgcmVsYXRl ZCAqLworI2RlZmluZQlWTV9DUl9TVk1ESVMJCTB4MTAJLyogU1ZNOiBkaXNhYmxlZCBieSBCSU9T ICovCisKKy8qIFZJQSBBQ0UgY3J5cHRvIGZlYXR1cmVzZXQ6IGZvciB2aWFfZmVhdHVyZV9ybmcg Ki8KKyNkZWZpbmUJVklBX0hBU19STkcJCTEJLyogY3B1IGhhcyBSTkcgKi8KKworLyogVklBIEFD RSBjcnlwdG8gZmVhdHVyZXNldDogZm9yIHZpYV9mZWF0dXJlX3hjcnlwdCAqLworI2RlZmluZQlW SUFfSEFTX0FFUwkJMQkvKiBjcHUgaGFzIEFFUyAqLworI2RlZmluZQlWSUFfSEFTX1NIQQkJMgkv KiBjcHUgaGFzIFNIQTEgJiBTSEEyNTYgKi8KKyNkZWZpbmUJVklBX0hBU19NTQkJNAkvKiBjcHUg aGFzIFJTQSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUJVklBX0hBU19BRVNDVFIJCTgJLyogY3B1 IGhhcyBBRVMtQ1RSIGluc3RydWN0aW9ucyAqLworCisvKiBDZW50YXVyIEV4dGVuZGVkIEZlYXR1 cmUgZmxhZ3MgKi8KKyNkZWZpbmUJVklBX0NQVUlEX0hBU19STkcJMHgwMDAwMDQKKyNkZWZpbmUJ VklBX0NQVUlEX0RPX1JORwkweDAwMDAwOAorI2RlZmluZQlWSUFfQ1BVSURfSEFTX0FDRQkweDAw MDA0MAorI2RlZmluZQlWSUFfQ1BVSURfRE9fQUNFCTB4MDAwMDgwCisjZGVmaW5lCVZJQV9DUFVJ RF9IQVNfQUNFMgkweDAwMDEwMAorI2RlZmluZQlWSUFfQ1BVSURfRE9fQUNFMgkweDAwMDIwMAor I2RlZmluZQlWSUFfQ1BVSURfSEFTX1BIRQkweDAwMDQwMAorI2RlZmluZQlWSUFfQ1BVSURfRE9f UEhFCTB4MDAwODAwCisjZGVmaW5lCVZJQV9DUFVJRF9IQVNfUE1NCTB4MDAxMDAwCisjZGVmaW5l CVZJQV9DUFVJRF9ET19QTU0JMHgwMDIwMDAKKworLyogVklBIEFDRSB4Y3J5cHQtKiBpbnN0cnVj dGlvbiBjb250ZXh0IGNvbnRyb2wgb3B0aW9ucyAqLworI2RlZmluZQlWSUFfQ1JZUFRfQ1dMT19S T1VORF9NCQkweDAwMDAwMDBmCisjZGVmaW5lCVZJQV9DUllQVF9DV0xPX0FMR19NCQkweDAwMDAw MDcwCisjZGVmaW5lCVZJQV9DUllQVF9DV0xPX0FMR19BRVMJCTB4MDAwMDAwMDAKKyNkZWZpbmUJ VklBX0NSWVBUX0NXTE9fS0VZR0VOX00JCTB4MDAwMDAwODAKKyNkZWZpbmUJVklBX0NSWVBUX0NX TE9fS0VZR0VOX0hXCTB4MDAwMDAwMDAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fS0VZR0VOX1NX CTB4MDAwMDAwODAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fTk9STUFMCQkweDAwMDAwMDAwCisj ZGVmaW5lCVZJQV9DUllQVF9DV0xPX0lOVEVSTUVESUFURQkweDAwMDAwMTAwCisjZGVmaW5lCVZJ QV9DUllQVF9DV0xPX0VOQ1JZUFQJCTB4MDAwMDAwMDAKKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9f REVDUllQVAkJMHgwMDAwMDIwMAorI2RlZmluZQlWSUFfQ1JZUFRfQ1dMT19LRVkxMjgJCTB4MDAw MDAwMGEJLyogMTI4Yml0LCAxMCByZHMgKi8KKyNkZWZpbmUJVklBX0NSWVBUX0NXTE9fS0VZMTky CQkweDAwMDAwNDBjCS8qIDE5MmJpdCwgMTIgcmRzICovCisjZGVmaW5lCVZJQV9DUllQVF9DV0xP X0tFWTI1NgkJMHgwMDAwMDgwZQkvKiAyNTZiaXQsIDE1IHJkcyAqLworCisjZW5kaWYgLyogIV9N QUNISU5FX1NQRUNJQUxSRUdfSF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVz L25ldG1hcC94ODYvc3RhY2suaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N0YWNr LmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni9zdGFjay5oCTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv eDg2L3N0YWNrLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCAr MSw2MSBAQAorLyotCisgKiBNYWNoIE9wZXJhdGluZyBTeXN0ZW0KKyAqIENvcHlyaWdodCAoYykg MTk5MSwxOTkwIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgKiBBbGwgUmlnaHRzIFJlc2Vy dmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1 dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFu dGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZQorICogc29mdHdh cmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZpZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlv bnMKKyAqIHRoZXJlb2YsIGFuZCB0aGF0IGJvdGggbm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGlu ZyBkb2N1bWVudGF0aW9uLgorICoKKyAqIENBUk5FR0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMKKyAqIENPTkRJVElPTi4gIENBUk5FR0lFIE1FTExPTiBE SVNDTEFJTVMgQU5ZIExJQUJJTElUWSBPRiBBTlkgS0lORCBGT1IKKyAqIEFOWSBEQU1BR0VTIFdI QVRTT0VWRVIgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAq IENhcm5lZ2llIE1lbGxvbiByZXF1ZXN0cyB1c2VycyBvZiB0aGlzIHNvZnR3YXJlIHRvIHJldHVy biB0bworICoKKyAqICBTb2Z0d2FyZSBEaXN0cmlidXRpb24gQ29vcmRpbmF0b3IgIG9yICBTb2Z0 d2FyZS5EaXN0cmlidXRpb25AQ1MuQ01VLkVEVQorICogIFNjaG9vbCBvZiBDb21wdXRlciBTY2ll bmNlCisgKiAgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKKyAqICBQaXR0c2J1cmdoIFBBIDE1 MjEzLTM4OTAKKyAqCisgKiBhbnkgaW1wcm92ZW1lbnRzIG9yIGV4dGVuc2lvbnMgdGhhdCB0aGV5 IG1ha2UgYW5kIGdyYW50IENhcm5lZ2llIHRoZQorICogcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0 aGVzZSBjaGFuZ2VzLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1 ZGUvc3RhY2suaCAyODc2NDUgMjAxNS0wOS0xMSAwMzo1NDozN1ogbWFya2ogJAorICovCisKKyNp Zm5kZWYgX1g4Nl9TVEFDS19ICisjZGVmaW5lCV9YODZfU1RBQ0tfSAorCisvKgorICogU3RhY2sg dHJhY2UuCisgKi8KKworI2lmZGVmIF9faTM4Nl9fCitzdHJ1Y3QgaTM4Nl9mcmFtZSB7CisJc3Ry dWN0IGkzODZfZnJhbWUJKmZfZnJhbWU7CisJdV9pbnQJCQlmX3JldGFkZHI7CisJdV9pbnQJCQlm X2FyZzA7Cit9OworI2VuZGlmCisKKyNpZmRlZiBfX2FtZDY0X18KK3N0cnVjdCBhbWQ2NF9mcmFt ZSB7CisJc3RydWN0IGFtZDY0X2ZyYW1lCSpmX2ZyYW1lOworCXVfbG9uZwkJCWZfcmV0YWRkcjsK K307CisKK3N0cnVjdCBpMzg2X2ZyYW1lIHsKKwl1aW50MzJfdAkJZl9mcmFtZTsKKwl1aW50MzJf dAkJZl9yZXRhZGRyOworCXVpbnQzMl90CQlmX2FyZzA7Cit9OworI2VuZGlmIC8qIF9fYW1kNjRf XyAqLworCisjaWZkZWYgX0tFUk5FTAoraW50CXN0YWNrX25taV9oYW5kbGVyKHN0cnVjdCB0cmFw ZnJhbWUgKik7CisjZW5kaWYKKworI2VuZGlmIC8qICFfWDg2X1NUQUNLX0ggKi8KZGlmZiAtdSAt ciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3RkYXJnLmggL3Vzci9zcmMvc3lz L21vZHVsZXMvbmV0bWFwL3g4Ni9zdGRhcmcuaAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRt YXAveDg2L3N0ZGFyZy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAv dXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N0ZGFyZy5oCTIwMTYtMDktMjkgMDA6MjQ6 NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNzcgQEAKKy8qLQorICogQ29weXJpZ2h0IChj KSAyMDAyIERhdmlkIEUuIE8nQnJpZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9m IGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVj aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP RgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYv aW5jbHVkZS9zdGRhcmcuaCAyNTYxMDUgMjAxMy0xMC0wNyAxMDowMToyM1ogcGhrICQKKyAqLwor CisjaWZuZGVmIF9NQUNISU5FX1NUREFSR19IXworI2RlZmluZQlfTUFDSElORV9TVERBUkdfSF8K KworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKworI2lm bmRlZiBfVkFfTElTVF9ERUNMQVJFRAorI2RlZmluZQlfVkFfTElTVF9ERUNMQVJFRAordHlwZWRl ZglfX3ZhX2xpc3QJdmFfbGlzdDsKKyNlbmRpZgorCisjaWZkZWYgX19HTlVDTElLRV9CVUlMVElO X1NUREFSRworCisjZGVmaW5lCXZhX3N0YXJ0KGFwLCBsYXN0KSBcCisJX19idWlsdGluX3ZhX3N0 YXJ0KChhcCksIChsYXN0KSkKKworI2RlZmluZQl2YV9hcmcoYXAsIHR5cGUpIFwKKwlfX2J1aWx0 aW5fdmFfYXJnKChhcCksIHR5cGUpCisKKyNkZWZpbmUJX192YV9jb3B5KGRlc3QsIHNyYykgXAor CV9fYnVpbHRpbl92YV9jb3B5KChkZXN0KSwgKHNyYykpCisKKyNpZiBfX0lTT19DX1ZJU0lCTEUg Pj0gMTk5OQorI2RlZmluZQl2YV9jb3B5KGRlc3QsIHNyYykgXAorCV9fdmFfY29weShkZXN0LCBz cmMpCisjZW5kaWYKKworI2RlZmluZQl2YV9lbmQoYXApIFwKKwlfX2J1aWx0aW5fdmFfZW5kKGFw KQorCisjZWxpZiBkZWZpbmVkKGxpbnQpCisvKiBQcm92aWRlIGEgZmFrZSBpbXBsZW1lbnRhdGlv biBmb3IgbGludCdzIGJlbmVmaXQgKi8KKyNkZWZpbmUJX192YV9zaXplKHR5cGUpIFwKKwkoKChz aXplb2YodHlwZSkgKyBzaXplb2YobG9uZykgLSAxKSAvIHNpemVvZihsb25nKSkgKiBzaXplb2Yo bG9uZykpCisjZGVmaW5lCXZhX3N0YXJ0KGFwLCBsYXN0KSBcCisJKChhcCkgPSAodmFfbGlzdCkm KGxhc3QpICsgX192YV9zaXplKGxhc3QpKQorI2RlZmluZSB2YV9jb3B5KGRzdCwgc3JjKSBcCisJ KChkc3QpID0gKHNyYykpCisjZGVmaW5lCXZhX2FyZyhhcCwgdHlwZSkgXAorCSgqKHR5cGUgKiko KGFwKSArPSBfX3ZhX3NpemUodHlwZSksIChhcCkgLSBfX3ZhX3NpemUodHlwZSkpKQorI2RlZmlu ZQl2YV9lbmQoYXApCisKKyNlbHNlCisjZXJyb3IgdGhpcyBmaWxlIG5lZWRzIHRvIGJlIHBvcnRl ZCB0byB5b3VyIGNvbXBpbGVyCisjZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9TVERBUkdf SF8gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJj aC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJjaC5oCi0tLSB1c3Ivc3Jj L3N5cy9tb2R1bGVzL25ldG1hcC94ODYvc3lzYXJjaC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3N5c2FyY2gu aAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDEzOCBAQAor LyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBO ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1 ZGUvc3lzYXJjaC5oIDIzMzIwOSAyMDEyLTAzLTE5IDIxOjU3OjMxWiB0aWpsICQKKyAqLworCisv KgorICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIHN5c2NhbGxzIChYODYpCisgKi8KKyNpZm5kZWYg X01BQ0hJTkVfU1lTQVJDSF9IXworI2RlZmluZSBfTUFDSElORV9TWVNBUkNIX0hfCisKKyNpbmNs dWRlIDxzeXMvY2RlZnMuaD4KKworI2RlZmluZSBJMzg2X0dFVF9MRFQJMAorI2RlZmluZSBJMzg2 X1NFVF9MRFQJMQorI2RlZmluZQlMRFRfQVVUT19BTExPQwkweGZmZmZmZmZmCisJCQkJLyogSTM4 Nl9JT1BMICovCisjZGVmaW5lIEkzODZfR0VUX0lPUEVSTQkzCisjZGVmaW5lIEkzODZfU0VUX0lP UEVSTQk0CisJCQkJLyogeHh4eHggKi8KKyNkZWZpbmUJSTM4Nl9WTTg2CQk2CS8qIFhYWCBOb3Qg aW1wbGVtZW50YWJsZSBvbiBhbWQ2NCAqLworI2RlZmluZQlJMzg2X0dFVF9GU0JBU0UJCTcKKyNk ZWZpbmUJSTM4Nl9TRVRfRlNCQVNFCQk4CisjZGVmaW5lCUkzODZfR0VUX0dTQkFTRQkJOQorI2Rl ZmluZQlJMzg2X1NFVF9HU0JBU0UJCTEwCisjZGVmaW5lCUkzODZfR0VUX1hGUFVTVEFURQkxMQor CisvKiBMZWF2ZSBzcGFjZSBmb3IgMC0xMjcgZm9yIHRvIGF2b2lkIHRyYW5zbGF0aW5nIHN5c2Nh bGxzICovCisjZGVmaW5lCUFNRDY0X0dFVF9GU0JBU0UJMTI4CisjZGVmaW5lCUFNRDY0X1NFVF9G U0JBU0UJMTI5CisjZGVmaW5lCUFNRDY0X0dFVF9HU0JBU0UJMTMwCisjZGVmaW5lCUFNRDY0X1NF VF9HU0JBU0UJMTMxCisjZGVmaW5lCUFNRDY0X0dFVF9YRlBVU1RBVEUJMTMyCisKK3N0cnVjdCBp Mzg2X2lvcGVybV9hcmdzIHsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CisJdW5zaWduZWQgaW50IGxl bmd0aDsKKwlpbnQJZW5hYmxlOworfTsKKworI2lmZGVmIF9faTM4Nl9fCitzdHJ1Y3QgaTM4Nl9s ZHRfYXJncyB7CisJdW5zaWduZWQgaW50IHN0YXJ0OworCXVuaW9uIGRlc2NyaXB0b3IgKmRlc2Nz OworCXVuc2lnbmVkIGludCBudW07Cit9OworCitzdHJ1Y3QgaTM4Nl92bTg2X2FyZ3MgeworCWlu dAlzdWJfb3A7CQkJLyogc3ViLW9wZXJhdGlvbiB0byBwZXJmb3JtICovCisJY2hhcgkqc3ViX2Fy Z3M7CQkvKiBhcmdzICovCit9OworCitzdHJ1Y3QgaTM4Nl9nZXRfeGZwdXN0YXRlIHsKKwl2b2lk ICphZGRyOworCWludCBsZW47Cit9OworI2Vsc2UKK3N0cnVjdCBpMzg2X2xkdF9hcmdzIHsKKwl1 bnNpZ25lZCBpbnQgc3RhcnQ7CisJc3RydWN0IHVzZXJfc2VnbWVudF9kZXNjcmlwdG9yICpkZXNj cyBfX3BhY2tlZDsKKwl1bnNpZ25lZCBpbnQgbnVtOworfTsKKworc3RydWN0IGkzODZfZ2V0X3hm cHVzdGF0ZSB7CisJdW5zaWduZWQgaW50IGFkZHI7CisJaW50IGxlbjsKK307CisKK3N0cnVjdCBh bWQ2NF9nZXRfeGZwdXN0YXRlIHsKKwl2b2lkICphZGRyOworCWludCBsZW47Cit9OworI2VuZGlm CisKKyNpZm5kZWYgX0tFUk5FTAordW5pb24gZGVzY3JpcHRvcjsKK3N0cnVjdCBkYnJlZzsKKwor X19CRUdJTl9ERUNMUworaW50IGkzODZfZ2V0X2xkdChpbnQsIHVuaW9uIGRlc2NyaXB0b3IgKiwg aW50KTsKK2ludCBpMzg2X3NldF9sZHQoaW50LCB1bmlvbiBkZXNjcmlwdG9yICosIGludCk7Citp bnQgaTM4Nl9nZXRfaW9wZXJtKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICosIGludCAqKTsK K2ludCBpMzg2X3NldF9pb3Blcm0odW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIGludCk7Citp bnQgaTM4Nl92bTg2KGludCwgdm9pZCAqKTsKK2ludCBpMzg2X2dldF9mc2Jhc2Uodm9pZCAqKik7 CitpbnQgaTM4Nl9nZXRfZ3NiYXNlKHZvaWQgKiopOworaW50IGkzODZfc2V0X2ZzYmFzZSh2b2lk ICopOworaW50IGkzODZfc2V0X2dzYmFzZSh2b2lkICopOworaW50IGkzODZfc2V0X3dhdGNoKGlu dCwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgc3RydWN0IGRicmVnICopOworaW50IGkzODZfY2xy X3dhdGNoKGludCwgc3RydWN0IGRicmVnICopOworaW50IGFtZDY0X2dldF9mc2Jhc2Uodm9pZCAq Kik7CitpbnQgYW1kNjRfZ2V0X2dzYmFzZSh2b2lkICoqKTsKK2ludCBhbWQ2NF9zZXRfZnNiYXNl KHZvaWQgKik7CitpbnQgYW1kNjRfc2V0X2dzYmFzZSh2b2lkICopOworaW50IHN5c2FyY2goaW50 LCB2b2lkICopOworX19FTkRfREVDTFMKKyNlbHNlCitzdHJ1Y3QgdGhyZWFkOwordW5pb24gZGVz Y3JpcHRvcjsKKworaW50IGkzODZfZ2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2 X2xkdF9hcmdzICopOworaW50IGkzODZfc2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBp Mzg2X2xkdF9hcmdzICosIHVuaW9uIGRlc2NyaXB0b3IgKik7CitpbnQgaTM4Nl9nZXRfaW9wZXJt KHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7CitpbnQgaTM4Nl9z ZXRfaW9wZXJtKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7Citp bnQgYW1kNjRfZ2V0X2xkdChzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2X2xkdF9hcmdzICop OworaW50IGFtZDY0X3NldF9sZHQoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgaTM4Nl9sZHRfYXJn cyAqLAorICAgIHN0cnVjdCB1c2VyX3NlZ21lbnRfZGVzY3JpcHRvciAqKTsKK2ludCBhbWQ2NF9n ZXRfaW9wZXJtKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IGkzODZfaW9wZXJtX2FyZ3MgKik7Citp bnQgYW1kNjRfc2V0X2lvcGVybShzdHJ1Y3QgdGhyZWFkICosIHN0cnVjdCBpMzg2X2lvcGVybV9h cmdzICopOworI2VuZGlmCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfU1lTQVJDSF9IXyAqLwpkaWZm IC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni90cmFwLmggL3Vzci9zcmMv c3lzL21vZHVsZXMvbmV0bWFwL3g4Ni90cmFwLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0 bWFwL3g4Ni90cmFwLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91 c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdHJhcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUu MDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsOTQgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAx OTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdh cmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpdHJhcC5oCTUuNCAoQmVy a2VsZXkpIDUvOS85MQorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS90 cmFwLmggMjU3NDE3IDIwMTMtMTAtMzEgMDI6MzU6MDBaIG1hcmtqICQKKyAqLworCisjaWZuZGVm IF9NQUNISU5FX1RSQVBfSF8KKyNkZWZpbmUJX01BQ0hJTkVfVFJBUF9IXworCisvKgorICogVHJh cCB0eXBlIHZhbHVlcworICogYWxzbyBrbm93biBpbiB0cmFwLmMgZm9yIG5hbWUgc3RyaW5ncwor ICovCisKKyNkZWZpbmUJVF9QUklWSU5GTFQJMQkvKiBwcml2aWxlZ2VkIGluc3RydWN0aW9uICov CisjZGVmaW5lCVRfQlBURkxUCTMJLyogYnJlYWtwb2ludCBpbnN0cnVjdGlvbiAqLworI2RlZmlu ZQlUX0FSSVRIVFJBUAk2CS8qIGFyaXRobWV0aWMgdHJhcCAqLworI2RlZmluZQlUX1BST1RGTFQJ OQkvKiBwcm90ZWN0aW9uIGZhdWx0ICovCisjZGVmaW5lCVRfVFJDVFJBUAkxMAkvKiBkZWJ1ZyBl eGNlcHRpb24gKHNpYykgKi8KKyNkZWZpbmUJVF9QQUdFRkxUCTEyCS8qIHBhZ2UgZmF1bHQgKi8K KyNkZWZpbmUJVF9BTElHTkZMVAkxNAkvKiBhbGlnbm1lbnQgZmF1bHQgKi8KKworI2RlZmluZQlU X0RJVklERQkxOAkvKiBpbnRlZ2VyIGRpdmlkZSBmYXVsdCAqLworI2RlZmluZQlUX05NSQkJMTkJ Lyogbm9uLW1hc2thYmxlIHRyYXAgKi8KKyNkZWZpbmUJVF9PRkxPVwkJMjAJLyogb3ZlcmZsb3cg dHJhcCAqLworI2RlZmluZQlUX0JPVU5ECQkyMQkvKiBib3VuZCBpbnN0cnVjdGlvbiBmYXVsdCAq LworI2RlZmluZQlUX0ROQQkJMjIJLyogZGV2aWNlIG5vdCBhdmFpbGFibGUgZmF1bHQgKi8KKyNk ZWZpbmUJVF9ET1VCTEVGTFQJMjMJLyogZG91YmxlIGZhdWx0ICovCisjZGVmaW5lCVRfRlBPUEZM VAkyNAkvKiBmcCBjb3Byb2Nlc3NvciBvcGVyYW5kIGZldGNoIGZhdWx0ICovCisjZGVmaW5lCVRf VFNTRkxUCTI1CS8qIGludmFsaWQgdHNzIGZhdWx0ICovCisjZGVmaW5lCVRfU0VHTlBGTFQJMjYJ Lyogc2VnbWVudCBub3QgcHJlc2VudCBmYXVsdCAqLworI2RlZmluZQlUX1NUS0ZMVAkyNwkvKiBz dGFjayBmYXVsdCAqLworI2RlZmluZQlUX01DSEsJCTI4CS8qIG1hY2hpbmUgY2hlY2sgdHJhcCAq LworI2RlZmluZQlUX1hNTUZMVAkyOQkvKiBTSU1EIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiAq LworI2RlZmluZQlUX1JFU0VSVkVECTMwCS8qIHJlc2VydmVkICh1bmtub3duKSAqLworI2RlZmlu ZQlUX0RUUkFDRV9SRVQJMzIJLyogRFRyYWNlIHBpZCByZXR1cm4gKi8KKworLyogWFhYIG1vc3Qg b2YgdGhlIGZvbGxvd2luZyBjb2RlcyBhcmVuJ3QgdXNlZCwgYnV0IGNvdWxkIGJlLiAqLworCisv KiBkZWZpbml0aW9ucyBmb3IgPHN5cy9zaWduYWwuaD4gKi8KKyNkZWZpbmUJICAgIElMTF9SRVNB RF9GQVVMVAlUX1JFU0FERkxUCisjZGVmaW5lCSAgICBJTExfUFJJVklOX0ZBVUxUCVRfUFJJVklO RkxUCisjZGVmaW5lCSAgICBJTExfUkVTT1BfRkFVTFQJVF9SRVNPUEZMVAorI2RlZmluZQkgICAg SUxMX0FMSUdOX0ZBVUxUCVRfQUxJR05GTFQKKyNkZWZpbmUJICAgIElMTF9GUE9QX0ZBVUxUCVRf RlBPUEZMVAkvKiBjb3Byb2Nlc3NvciBvcGVyYW5kIGZhdWx0ICovCisKKy8qIG9sZCBGcmVlQlNE IG1hY3JvcywgZGVwcmVjYXRlZCAqLworI2RlZmluZQlGUEVfSU5UT1ZGX1RSQVAJMHgxCS8qIGlu dGVnZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUJRlBFX0lOVERJVl9UUkFQCTB4MgkvKiBpbnRlZ2Vy IGRpdmlkZSBieSB6ZXJvICovCisjZGVmaW5lCUZQRV9GTFRESVZfVFJBUAkweDMJLyogZmxvYXRp bmcvZGVjaW1hbCBkaXZpZGUgYnkgemVybyAqLworI2RlZmluZQlGUEVfRkxUT1ZGX1RSQVAJMHg0 CS8qIGZsb2F0aW5nIG92ZXJmbG93ICovCisjZGVmaW5lCUZQRV9GTFRVTkRfVFJBUAkweDUJLyog ZmxvYXRpbmcgdW5kZXJmbG93ICovCisjZGVmaW5lCUZQRV9GUFVfTlBfVFJBUAkweDYJLyogZmxv YXRpbmcgcG9pbnQgdW5pdCBub3QgcHJlc2VudCAgKi8KKyNkZWZpbmUJRlBFX1NVQlJOR19UUkFQ CTB4NwkvKiBzdWJyYW5nZSBvdXQgb2YgYm91bmRzICovCisKKy8qIGNvZGVzIGZvciBTSUdCVVMg Ki8KKyNkZWZpbmUJICAgIEJVU19QQUdFX0ZBVUxUCVRfUEFHRUZMVAkvKiBwYWdlIGZhdWx0IHBy b3RlY3Rpb24gYmFzZSAqLworI2RlZmluZQkgICAgQlVTX1NFR05QX0ZBVUxUCVRfU0VHTlBGTFQJ Lyogc2VnbWVudCBub3QgcHJlc2VudCAqLworI2RlZmluZQkgICAgQlVTX1NUS19GQVVMVAlUX1NU S0ZMVAkvKiBzdGFjayBzZWdtZW50ICovCisjZGVmaW5lCSAgICBCVVNfU0VHTV9GQVVMVAlUX1JF U0VSVkVECS8qIHNlZ21lbnQgcHJvdGVjdGlvbiBiYXNlICovCisKKy8qIFRyYXAncyBjb21pbmcg ZnJvbSB1c2VyIG1vZGUgKi8KKyNkZWZpbmUJVF9VU0VSCTB4MTAwCisKKyNlbmRpZiAvKiAhX01B Q0hJTkVfVFJBUF9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFw L3g4Ni91Y29udGV4dC5oIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdWNvbnRleHQu aAotLS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Vjb250ZXh0LmgJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1h cC94ODYvdWNvbnRleHQuaAkyMDE2LTA5LTI5IDAwOjI0OjU1LjAwMDAwMDAwMCArMDEwMApAQCAt MCwwICsxLDE3MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgUGV0ZXIgV2VtbQorICog Q29weXJpZ2h0IChjKSAxOTk5IE1hcmNlbCBNb29sZW5hYXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIAorICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgor ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT RDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3Vjb250ZXh0LmggMjk1NTYxIDIwMTYtMDIt MTIgMDc6Mzg6MTlaIGtpYiAkCisgKi8KKworI2lmbmRlZiBfWDg2X1VDT05URVhUX0hfCisjZGVm aW5lCV9YODZfVUNPTlRFWFRfSF8KKworI2lmZGVmIF9faTM4Nl9fCisvKiBLZWVwIF9NQ18qIHZh bHVlcyBzaW1pbGFyIHRvIGFtZDY0ICovCisjZGVmaW5lCV9NQ19IQVNTRUdTCTB4MQorI2RlZmlu ZQlfTUNfSEFTQkFTRVMJMHgyCisjZGVmaW5lCV9NQ19IQVNGUFhTVEFURQkweDQKKyNkZWZpbmUJ X01DX0ZMQUdfTUFTSwkoX01DX0hBU1NFR1MgfCBfTUNfSEFTQkFTRVMgfCBfTUNfSEFTRlBYU1RB VEUpCisKK3R5cGVkZWYgc3RydWN0IF9fbWNvbnRleHQgeworCS8qCisJICogVGhlIGRlZmluaXRp b24gb2YgbWNvbnRleHRfdCBtdXN0IG1hdGNoIHRoZSBsYXlvdXQgb2YKKwkgKiBzdHJ1Y3Qgc2ln Y29udGV4dCBhZnRlciB0aGUgc2NfbWFzayBtZW1iZXIuICBUaGlzIGlzIHNvCisJICogdGhhdCB3 ZSBjYW4gc3VwcG9ydCBzaWdjb250ZXh0IGFuZCB1Y29udGV4dF90IGF0IHRoZSBzYW1lCisJICog dGltZS4KKwkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfb25zdGFjazsJLyogWFhYIC0gc2lnY29udGV4 dCBjb21wYXQuICovCisJX19yZWdpc3Rlcl90CW1jX2dzOwkJLyogbWFjaGluZSBzdGF0ZSAoc3Ry dWN0IHRyYXBmcmFtZSkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfZnM7CisJX19yZWdpc3Rlcl90CW1j X2VzOworCV9fcmVnaXN0ZXJfdAltY19kczsKKwlfX3JlZ2lzdGVyX3QJbWNfZWRpOworCV9fcmVn aXN0ZXJfdAltY19lc2k7CisJX19yZWdpc3Rlcl90CW1jX2VicDsKKwlfX3JlZ2lzdGVyX3QJbWNf aXNwOworCV9fcmVnaXN0ZXJfdAltY19lYng7CisJX19yZWdpc3Rlcl90CW1jX2VkeDsKKwlfX3Jl Z2lzdGVyX3QJbWNfZWN4OworCV9fcmVnaXN0ZXJfdAltY19lYXg7CisJX19yZWdpc3Rlcl90CW1j X3RyYXBubzsKKwlfX3JlZ2lzdGVyX3QJbWNfZXJyOworCV9fcmVnaXN0ZXJfdAltY19laXA7CisJ X19yZWdpc3Rlcl90CW1jX2NzOworCV9fcmVnaXN0ZXJfdAltY19lZmxhZ3M7CisJX19yZWdpc3Rl cl90CW1jX2VzcDsKKwlfX3JlZ2lzdGVyX3QJbWNfc3M7CisKKwlpbnQJbWNfbGVuOwkJCS8qIHNp emVvZihtY29udGV4dF90KSAqLworI2RlZmluZQlfTUNfRlBGTVRfTk9ERVYJCTB4MTAwMDAJLyog ZGV2aWNlIG5vdCBwcmVzZW50IG9yIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUJX01DX0ZQRk1UXzM4 NwkJMHgxMDAwMQorI2RlZmluZQlfTUNfRlBGTVRfWE1NCQkweDEwMDAyCisJaW50CW1jX2ZwZm9y bWF0OworI2RlZmluZQlfTUNfRlBPV05FRF9OT05FCTB4MjAwMDAJLyogRlAgc3RhdGUgbm90IHVz ZWQgKi8KKyNkZWZpbmUJX01DX0ZQT1dORURfRlBVCQkweDIwMDAxCS8qIEZQIHN0YXRlIGNhbWUg ZnJvbSBGUFUgKi8KKyNkZWZpbmUJX01DX0ZQT1dORURfUENCCQkweDIwMDAyCS8qIEZQIHN0YXRl IGNhbWUgZnJvbSBQQ0IgKi8KKwlpbnQJbWNfb3duZWRmcDsKKwlfX3JlZ2lzdGVyX3QgbWNfZmxh Z3M7CisJLyoKKwkgKiBTZWUgPG1hY2hpbmUvbnB4Lmg+IGZvciB0aGUgaW50ZXJuYWxzIG9mIG1j X2Zwc3RhdGVbXS4KKwkgKi8KKwlpbnQJbWNfZnBzdGF0ZVsxMjhdIF9fYWxpZ25lZCgxNik7CisK KwlfX3JlZ2lzdGVyX3QgbWNfZnNiYXNlOworCV9fcmVnaXN0ZXJfdCBtY19nc2Jhc2U7CisKKwlf X3JlZ2lzdGVyX3QgbWNfeGZwdXN0YXRlOworCV9fcmVnaXN0ZXJfdCBtY194ZnB1c3RhdGVfbGVu OworCisJaW50CW1jX3NwYXJlMls0XTsKK30gbWNvbnRleHRfdDsKKyNlbmRpZiAvKiBfX2kzODZf XyAqLworCisjaWZkZWYgX19hbWQ2NF9fCisvKgorICogbWNfdHJhcG5vIGJpdHMuIFNoYWxsIGJl IGluIHN5bmMgd2l0aCBURl9YWFguCisgKi8KKyNkZWZpbmUJX01DX0hBU1NFR1MJMHgxCisjZGVm aW5lCV9NQ19IQVNCQVNFUwkweDIKKyNkZWZpbmUJX01DX0hBU0ZQWFNUQVRFCTB4NAorI2RlZmlu ZQlfTUNfRkxBR19NQVNLCShfTUNfSEFTU0VHUyB8IF9NQ19IQVNCQVNFUyB8IF9NQ19IQVNGUFhT VEFURSkKKwordHlwZWRlZiBzdHJ1Y3QgX19tY29udGV4dCB7CisJLyoKKwkgKiBUaGUgZGVmaW5p dGlvbiBvZiBtY29udGV4dF90IG11c3QgbWF0Y2ggdGhlIGxheW91dCBvZgorCSAqIHN0cnVjdCBz aWdjb250ZXh0IGFmdGVyIHRoZSBzY19tYXNrIG1lbWJlci4gIFRoaXMgaXMgc28KKwkgKiB0aGF0 IHdlIGNhbiBzdXBwb3J0IHNpZ2NvbnRleHQgYW5kIHVjb250ZXh0X3QgYXQgdGhlIHNhbWUKKwkg KiB0aW1lLgorCSAqLworCV9fcmVnaXN0ZXJfdAltY19vbnN0YWNrOwkvKiBYWFggLSBzaWdjb250 ZXh0IGNvbXBhdC4gKi8KKwlfX3JlZ2lzdGVyX3QJbWNfcmRpOwkJLyogbWFjaGluZSBzdGF0ZSAo c3RydWN0IHRyYXBmcmFtZSkgKi8KKwlfX3JlZ2lzdGVyX3QJbWNfcnNpOworCV9fcmVnaXN0ZXJf dAltY19yZHg7CisJX19yZWdpc3Rlcl90CW1jX3JjeDsKKwlfX3JlZ2lzdGVyX3QJbWNfcjg7CisJ X19yZWdpc3Rlcl90CW1jX3I5OworCV9fcmVnaXN0ZXJfdAltY19yYXg7CisJX19yZWdpc3Rlcl90 CW1jX3JieDsKKwlfX3JlZ2lzdGVyX3QJbWNfcmJwOworCV9fcmVnaXN0ZXJfdAltY19yMTA7CisJ X19yZWdpc3Rlcl90CW1jX3IxMTsKKwlfX3JlZ2lzdGVyX3QJbWNfcjEyOworCV9fcmVnaXN0ZXJf dAltY19yMTM7CisJX19yZWdpc3Rlcl90CW1jX3IxNDsKKwlfX3JlZ2lzdGVyX3QJbWNfcjE1Owor CV9fdWludDMyX3QJbWNfdHJhcG5vOworCV9fdWludDE2X3QJbWNfZnM7CisJX191aW50MTZfdAlt Y19nczsKKwlfX3JlZ2lzdGVyX3QJbWNfYWRkcjsKKwlfX3VpbnQzMl90CW1jX2ZsYWdzOworCV9f dWludDE2X3QJbWNfZXM7CisJX191aW50MTZfdAltY19kczsKKwlfX3JlZ2lzdGVyX3QJbWNfZXJy OworCV9fcmVnaXN0ZXJfdAltY19yaXA7CisJX19yZWdpc3Rlcl90CW1jX2NzOworCV9fcmVnaXN0 ZXJfdAltY19yZmxhZ3M7CisJX19yZWdpc3Rlcl90CW1jX3JzcDsKKwlfX3JlZ2lzdGVyX3QJbWNf c3M7CisKKwlsb25nCW1jX2xlbjsJCQkvKiBzaXplb2YobWNvbnRleHRfdCkgKi8KKworI2RlZmlu ZQlfTUNfRlBGTVRfTk9ERVYJCTB4MTAwMDAJLyogZGV2aWNlIG5vdCBwcmVzZW50IG9yIGNvbmZp Z3VyZWQgKi8KKyNkZWZpbmUJX01DX0ZQRk1UX1hNTQkJMHgxMDAwMgorCWxvbmcJbWNfZnBmb3Jt YXQ7CisjZGVmaW5lCV9NQ19GUE9XTkVEX05PTkUJMHgyMDAwMAkvKiBGUCBzdGF0ZSBub3QgdXNl ZCAqLworI2RlZmluZQlfTUNfRlBPV05FRF9GUFUJCTB4MjAwMDEJLyogRlAgc3RhdGUgY2FtZSBm cm9tIEZQVSAqLworI2RlZmluZQlfTUNfRlBPV05FRF9QQ0IJCTB4MjAwMDIJLyogRlAgc3RhdGUg Y2FtZSBmcm9tIFBDQiAqLworCWxvbmcJbWNfb3duZWRmcDsKKwkvKgorCSAqIFNlZSA8bWFjaGlu ZS9mcHUuaD4gZm9yIHRoZSBpbnRlcm5hbHMgb2YgbWNfZnBzdGF0ZVtdLgorCSAqLworCWxvbmcJ bWNfZnBzdGF0ZVs2NF0gX19hbGlnbmVkKDE2KTsKKworCV9fcmVnaXN0ZXJfdAltY19mc2Jhc2U7 CisJX19yZWdpc3Rlcl90CW1jX2dzYmFzZTsKKworCV9fcmVnaXN0ZXJfdAltY194ZnB1c3RhdGU7 CisJX19yZWdpc3Rlcl90CW1jX3hmcHVzdGF0ZV9sZW47CisKKwlsb25nCW1jX3NwYXJlWzRdOwor fSBtY29udGV4dF90OworI2VuZGlmIC8qIF9fYW1kNjRfXyAqLworCisjaWZkZWYgX19MSU5UX18K K3R5cGVkZWYgc3RydWN0IF9fbWNvbnRleHQgeworfSBtY29udGV4dF90OworI2VuZGlmIC8qIF9f TElOVF9fICovCisKKyNlbmRpZiAvKiAhX1g4Nl9VQ09OVEVYVF9IXyAqLwpkaWZmIC11IC1yIC1O IHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92ZHNvLmggL3Vzci9zcmMvc3lzL21vZHVs ZXMvbmV0bWFwL3g4Ni92ZHNvLmgKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92 ZHNvLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL25ldG1hcC94ODYvdmRzby5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAw ICswMTAwCkBAIC0wLDAgKzEsNDIgQEAKKy8qLQorICogQ29weXJpZ2h0IDIwMTIgS29uc3RhbnRp biBCZWxvdXNvdiA8a2liQEZyZWVCU0QuT1JHPi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9zeXMveDg2L2luY2x1 ZGUvdmRzby5oIDIzNzQzMyAyMDEyLTA2LTIyIDA3OjA2OjQwWiBraWIgJAorICovCisKKyNpZm5k ZWYgX1g4Nl9WRFNPX0gKKyNkZWZpbmUJX1g4Nl9WRFNPX0gKKworI2RlZmluZQlWRFNPX1RJTUVI QU5EU19NRAkJCVwKKwl1aW50MzJfdAl0aF94ODZfc2hpZnQ7CQlcCisJdWludDMyX3QJdGhfcmVz WzddOworCisjaWZkZWYgX0tFUk5FTAorI2lmZGVmIENPTVBBVF9GUkVFQlNEMzIKKworI2RlZmlu ZQlWRFNPX1RJTUVIQU5EU19NRDMyCVZEU09fVElNRUhBTkRTX01ECisKKyNlbmRpZgorI2VuZGlm CisjZW5kaWYKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYvdm13 YXJlLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni92bXdhcmUuaAotLS0gdXNyL3Ny Yy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Ztd2FyZS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3Ztd2FyZS5o CTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTIgQEAKKy8q LQorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgSnVuZy11ayBLaW0gPGpraW1ARnJlZUJTRC5v cmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC9z eXMveDg2L2luY2x1ZGUvdm13YXJlLmggMjc4NzQ5IDIwMTUtMDItMTQgMDk6MDA6MTJaIGtpYiAk CisgKi8KKworI2lmbmRlZiBfWDg2X1ZNV0FSRV9IXworI2RlZmluZQlfWDg2X1ZNV0FSRV9IXwor CisjZGVmaW5lCVZNV19IVk1BR0lDCQkweDU2NGQ1ODY4CisjZGVmaW5lCVZNV19IVlBPUlQJCTB4 NTY1OAorCisjZGVmaW5lCVZNV19IVkNNRF9HRVRWRVJTSU9OCTEwCisjZGVmaW5lCVZNV19IVkNN RF9HRVRIWgkJNDUKKyNkZWZpbmUJVk1XX0hWQ01EX0dFVFZDUFVfSU5GTwk2OAorCisjZGVmaW5l CVZNV19WQ1BVSU5GT19MRUdBQ1lfWDJBUElDCSgxIDw8IDMpCisjZGVmaW5lCVZNV19WQ1BVSU5G T19WQ1BVX1JFU0VSVkVECSgxIDw8IDMxKQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAordm13YXJl X2h2Y2FsbCh1X2ludCBjbWQsIHVfaW50ICpwKQoreworCisJX19hc20gX192b2xhdGlsZSgiaW5s ICV3MywgJTAiCisJOiAiPWEiIChwWzBdKSwgIj1iIiAocFsxXSksICI9YyIgKHBbMl0pLCAiPWQi IChwWzNdKQorCTogIjAiIChWTVdfSFZNQUdJQyksICIxIiAoVUlOVF9NQVgpLCAiMiIgKGNtZCks ICIzIiAoVk1XX0hWUE9SVCkKKwk6ICJtZW1vcnkiKTsKK30KKworI2VuZGlmIC8qICFfWDg2X1ZN V0FSRV9IXyAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94 ODZfc21wLmggL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ODZfc21wLmgKLS0tIHVz ci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ODZfc21wLmgJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9tb2R1bGVzL25ldG1hcC94ODYveDg2 X3NtcC5oCTIwMTYtMDktMjkgMDA6MjQ6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTAz IEBACisvKi0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICJUSEUgQkVFUi1XQVJFIExJQ0VO U0UiIChSZXZpc2lvbiA0Mik6CisgKiA8cGhrQEZyZWVCU0Qub3JnPiB3cm90ZSB0aGlzIGZpbGUu ICBBcyBsb25nIGFzIHlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91CisgKiBjYW4gZG8gd2hhdGV2 ZXIgeW91IHdhbnQgd2l0aCB0aGlzIHN0dWZmLiBJZiB3ZSBtZWV0IHNvbWUgZGF5LCBhbmQgeW91 IHRoaW5rCisgKiB0aGlzIHN0dWZmIGlzIHdvcnRoIGl0LCB5b3UgY2FuIGJ1eSBtZSBhIGJlZXIg aW4gcmV0dXJuLiAgIFBvdWwtSGVubmluZyBLYW1wCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy94ODYvaW5jbHVkZS94ODZfc21wLmggMjkx OTQ5IDIwMTUtMTItMDcgMTc6NDE6MjBaIGtpYiAkCisgKgorICovCisKKyNpZm5kZWYgX1g4Nl9Y ODZfU01QX0hfCisjZGVmaW5lCV9YODZfWDg2X1NNUF9IXworCisjaW5jbHVkZSA8c3lzL2J1cy5o PgorI2luY2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHJfbWFj aGRlcC5oPgorI2luY2x1ZGUgPHg4Ni9hcGljdmFyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9wY2Iu aD4KKworc3RydWN0IHBtYXA7CisKKy8qIGdsb2JhbCBkYXRhIGluIG1wX3g4Ni5jICovCitleHRl cm4gaW50IG1wX25hcHM7CitleHRlcm4gaW50IGJvb3RfY3B1X2lkOworZXh0ZXJuIHN0cnVjdCBw Y2Igc3RvcHBjYnNbXTsKK2V4dGVybiBpbnQgY3B1X2FwaWNfaWRzW107CitleHRlcm4gaW50IGJv b3RBUDsKK2V4dGVybiB2b2lkICpkcGNwdTsKK2V4dGVybiBjaGFyICpib290U1RLOworZXh0ZXJu IHZvaWQgKmJvb3RzdGFja3NbXTsKK2V4dGVybiB2b2xhdGlsZSB1X2ludCBjcHVfaXBpX3BlbmRp bmdbXTsKK2V4dGVybiB2b2xhdGlsZSBpbnQgYXBzX3JlYWR5OworZXh0ZXJuIHN0cnVjdCBtdHgg YXBfYm9vdF9tdHg7CitleHRlcm4gaW50IGNwdV9sb2dpY2FsOworZXh0ZXJuIGludCBjcHVfY29y ZXM7CitleHRlcm4gdm9sYXRpbGUgaW50IHNtcF90bGJfd2FpdDsKK2V4dGVybiBzdHJ1Y3QgcG1h cCAqc21wX3RsYl9wbWFwOworZXh0ZXJuIHVfaW50IHhoaXRzX2dibFtdOworZXh0ZXJuIHVfaW50 IHhoaXRzX3BnW107CitleHRlcm4gdV9pbnQgeGhpdHNfcm5nW107CitleHRlcm4gdV9pbnQgaXBp X2dsb2JhbDsKK2V4dGVybiB1X2ludCBpcGlfcGFnZTsKK2V4dGVybiB1X2ludCBpcGlfcmFuZ2U7 CitleHRlcm4gdV9pbnQgaXBpX3JhbmdlX3NpemU7CisKK3N0cnVjdCBjcHVfaW5mbyB7CisJaW50 CWNwdV9wcmVzZW50OjE7CisJaW50CWNwdV9ic3A6MTsKKwlpbnQJY3B1X2Rpc2FibGVkOjE7CisJ aW50CWNwdV9oeXBlcnRocmVhZDoxOworfTsKK2V4dGVybiBzdHJ1Y3QgY3B1X2luZm8gY3B1X2lu Zm9bXTsKKworI2lmZGVmIENPVU5UX0lQSVMKK2V4dGVybiB1X2xvbmcgKmlwaV9pbnZsdGxiX2Nv dW50c1tNQVhDUFVdOworZXh0ZXJuIHVfbG9uZyAqaXBpX2ludmxybmdfY291bnRzW01BWENQVV07 CitleHRlcm4gdV9sb25nICppcGlfaW52bHBnX2NvdW50c1tNQVhDUFVdOworZXh0ZXJuIHVfbG9u ZyAqaXBpX2ludmxjYWNoZV9jb3VudHNbTUFYQ1BVXTsKK2V4dGVybiB1X2xvbmcgKmlwaV9yZW5k ZXp2b3VzX2NvdW50c1tNQVhDUFVdOworI2VuZGlmCisKKy8qIElQSSBoYW5kbGVycyAqLworaW50 aGFuZF90CisJSURUVkVDKGludmx0bGIpLAkvKiBUTEIgc2hvb3Rkb3ducyAtIGdsb2JhbCAqLwor CUlEVFZFQyhpbnZscGcpLAkJLyogVExCIHNob290ZG93bnMgLSAxIHBhZ2UgKi8KKwlJRFRWRUMo aW52bHJuZyksCS8qIFRMQiBzaG9vdGRvd25zIC0gcGFnZSByYW5nZSAqLworCUlEVFZFQyhpbnZs Y2FjaGUpLAkvKiBXcml0ZSBiYWNrIGFuZCBpbnZhbGlkYXRlIGNhY2hlICovCisJSURUVkVDKGlw aV9pbnRyX2JpdG1hcF9oYW5kbGVyKSwgLyogQml0bWFwIGJhc2VkIElQSXMgKi8gCisJSURUVkVD KGNwdXN0b3ApLAkvKiBDUFUgc3RvcHMgJiB3YWl0cyB0byBiZSByZXN0YXJ0ZWQgKi8KKwlJRFRW RUMoY3B1c3VzcGVuZCksCS8qIENQVSBzdXNwZW5kcyAmIHdhaXRzIHRvIGJlIHJlc3VtZWQgKi8K KwlJRFRWRUMocmVuZGV6dm91cyk7CS8qIGhhbmRsZSBDUFUgcmVuZGV6dm91cyAqLworCisvKiBm dW5jdGlvbnMgaW4geDg2X21wLmMgKi8KK3ZvaWQJYXNzaWduX2NwdV9pZHModm9pZCk7Cit2b2lk CWNwdV9hZGQodV9pbnQgYXBpY19pZCwgY2hhciBib290X2NwdSk7Cit2b2lkCWNwdXN0b3BfaGFu ZGxlcih2b2lkKTsKK3ZvaWQJY3B1c3VzcGVuZF9oYW5kbGVyKHZvaWQpOwordm9pZAlpbml0X3Nl Y29uZGFyeV90YWlsKHZvaWQpOwordm9pZAlpbnZsdGxiX2hhbmRsZXIodm9pZCk7Cit2b2lkCWlu dmxwZ19oYW5kbGVyKHZvaWQpOwordm9pZAlpbnZscm5nX2hhbmRsZXIodm9pZCk7Cit2b2lkCWlu dmxjYWNoZV9oYW5kbGVyKHZvaWQpOwordm9pZAlpbml0X3NlY29uZGFyeSh2b2lkKTsKK3ZvaWQJ aXBpX3N0YXJ0dXAoaW50IGFwaWNfaWQsIGludCB2ZWN0b3IpOwordm9pZAlpcGlfYWxsX2J1dF9z ZWxmKHVfaW50IGlwaSk7Cit2b2lkIAlpcGlfYml0bWFwX2hhbmRsZXIoc3RydWN0IHRyYXBmcmFt ZSBmcmFtZSk7Cit2b2lkCWlwaV9jcHUoaW50IGNwdSwgdV9pbnQgaXBpKTsKK2ludAlpcGlfbm1p X2hhbmRsZXIodm9pZCk7Cit2b2lkCWlwaV9zZWxlY3RlZChjcHVzZXRfdCBjcHVzLCB1X2ludCBp cGkpOwordV9pbnQJbXBfYm9vdGFkZHJlc3ModV9pbnQpOwordm9pZAlzZXRfaW50ZXJydXB0X2Fw aWNfaWRzKHZvaWQpOwordm9pZAlzbXBfY2FjaGVfZmx1c2godm9pZCk7Cit2b2lkCXNtcF9tYXNr ZWRfaW52bHBnKGNwdXNldF90IG1hc2ssIHZtX29mZnNldF90IGFkZHIpOwordm9pZAlzbXBfbWFz a2VkX2ludmxwZ19yYW5nZShjcHVzZXRfdCBtYXNrLCB2bV9vZmZzZXRfdCBzdGFydHZhLAorCSAg ICB2bV9vZmZzZXRfdCBlbmR2YSk7Cit2b2lkCXNtcF9tYXNrZWRfaW52bHRsYihjcHVzZXRfdCBt YXNrLCBzdHJ1Y3QgcG1hcCAqcG1hcCk7Cit2b2lkCW1lbV9yYW5nZV9BUF9pbml0KHZvaWQpOwor dm9pZAl0b3BvX3Byb2JlKHZvaWQpOwordm9pZAlpcGlfc2VuZF9jcHUoaW50IGNwdSwgdV9pbnQg aXBpKTsKKworI2VuZGlmCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAv eDg2L3g4Nl92YXIuaCAvdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3g4Nl92YXIuaAot LS0gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3g4Nl92YXIuaAkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4 Ni94ODZfdmFyLmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCAr MSwxMTcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk1IEJydWNlIEQuIEV2YW5zLgorICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg dGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJT RDogcmVsZW5nLzExLjAvc3lzL3g4Ni9pbmNsdWRlL3g4Nl92YXIuaCAyOTc4NTcgMjAxNi0wNC0x MiAxMzozMDozOVogYXZnICQKKyAqLworCisjaWZuZGVmIF9YODZfWDg2X1ZBUl9IXworI2RlZmlu ZQlfWDg2X1g4Nl9WQVJfSF8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgbWFjaGluZS1kZXBlbmRl bnQgZGVjbGFyYXRpb25zLgorICovCisKK2V4dGVybglsb25nCU1heG1lbTsKK2V4dGVybgl1X2lu dAliYXNlbWVtOworZXh0ZXJuCWludAlidXNkbWFfc3dpX3BlbmRpbmc7CitleHRlcm4JdV9pbnQJ Y3B1X2V4dGhpZ2g7CitleHRlcm4JdV9pbnQJY3B1X2ZlYXR1cmU7CitleHRlcm4JdV9pbnQJY3B1 X2ZlYXR1cmUyOworZXh0ZXJuCXVfaW50CWFtZF9mZWF0dXJlOworZXh0ZXJuCXVfaW50CWFtZF9m ZWF0dXJlMjsKK2V4dGVybgl1X2ludAlhbWRfcG1pbmZvOworZXh0ZXJuCXVfaW50CXZpYV9mZWF0 dXJlX3JuZzsKK2V4dGVybgl1X2ludAl2aWFfZmVhdHVyZV94Y3J5cHQ7CitleHRlcm4JdV9pbnQJ Y3B1X2NsZmx1c2hfbGluZV9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9zdGRleHRfZmVhdHVyZTsK K2V4dGVybgl1X2ludAljcHVfc3RkZXh0X2ZlYXR1cmUyOworZXh0ZXJuCXVfaW50CWNwdV9meHNy OworZXh0ZXJuCXVfaW50CWNwdV9oaWdoOworZXh0ZXJuCXVfaW50CWNwdV9pZDsKK2V4dGVybgl1 X2ludAljcHVfbWF4X2V4dF9zdGF0ZV9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9teGNzcl9tYXNr OworZXh0ZXJuCXVfaW50CWNwdV9wcm9jaW5mbzsKK2V4dGVybgl1X2ludAljcHVfcHJvY2luZm8y OworZXh0ZXJuCWNoYXIJY3B1X3ZlbmRvcltdOworZXh0ZXJuCXVfaW50CWNwdV92ZW5kb3JfaWQ7 CitleHRlcm4JdV9pbnQJY3B1X21vbl9td2FpdF9mbGFnczsKK2V4dGVybgl1X2ludAljcHVfbW9u X21pbl9zaXplOworZXh0ZXJuCXVfaW50CWNwdV9tb25fbWF4X3NpemU7CitleHRlcm4JdV9pbnQJ Y3B1X21heHBoeWFkZHI7CitleHRlcm4JY2hhcgljdHhfc3dpdGNoX3hzYXZlW107CitleHRlcm4J dV9pbnQJaHZfaGlnaDsKK2V4dGVybgljaGFyCWh2X3ZlbmRvcltdOworZXh0ZXJuCWNoYXIJa3N0 YWNrW107CitleHRlcm4JY2hhcglzaWdjb2RlW107CitleHRlcm4JaW50CXN6c2lnY29kZTsKK2V4 dGVybglpbnQJdm1fcGFnZV9kdW1wX3NpemU7CitleHRlcm4JaW50CXdvcmthcm91bmRfZXJyYXR1 bTM4MzsKK2V4dGVybglpbnQJX3VkYXRhc2VsOworZXh0ZXJuCWludAlfdWNvZGVzZWw7CitleHRl cm4JaW50CV91Y29kZTMyc2VsOworZXh0ZXJuCWludAlfdWZzc2VsOworZXh0ZXJuCWludAlfdWdz c2VsOworZXh0ZXJuCWludAl1c2VfeHNhdmU7CitleHRlcm4JdWludDY0X3QgeHNhdmVfbWFzazsK Kworc3RydWN0CXBjYjsKK3N0cnVjdAl0aHJlYWQ7CitzdHJ1Y3QJcmVnOworc3RydWN0CWZwcmVn Oworc3RydWN0ICBkYnJlZzsKK3N0cnVjdAlkdW1wZXJpbmZvOworCisvKgorICogVGhlIGludGVy ZmFjZSB0eXBlIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBlbnRyeSBwb2ludCBjYW5ub3QgYmUK KyAqIGV4cHJlc3NlZCBpbiBDLiAgVXNlIHNpbXBsZXN0IG5vbi12YXJpYWRpYyBmdW5jdGlvbiB0 eXBlIGFzIGFuCisgKiBhcHByb3hpbWF0aW9uLgorICovCit0eXBlZGVmIHZvaWQgYWxpYXNfZm9y X2ludGhhbmRfdCh2b2lkKTsKKwordm9pZAkqYWxsb2NfZnB1c2F2ZShpbnQgZmxhZ3MpOwordm9p ZAlidXNkbWFfc3dpKHZvaWQpOworYm9vbAljcHVfbXdhaXRfdXNhYmxlKHZvaWQpOwordm9pZAlj cHVfcHJvYmVfYW1kYzFlKHZvaWQpOwordm9pZAljcHVfc2V0cmVncyh2b2lkKTsKK3ZvaWQJZHVt cF9hZGRfcGFnZSh2bV9wYWRkcl90KTsKK3ZvaWQJZHVtcF9kcm9wX3BhZ2Uodm1fcGFkZHJfdCk7 Cit2b2lkCWlkZW50aWZ5X2NwdSh2b2lkKTsKK3ZvaWQJaW5pdGlhbGl6ZWNwdSh2b2lkKTsKK3Zv aWQJaW5pdGlhbGl6ZWNwdWNhY2hlKHZvaWQpOworYm9vbAlmaXhfY3B1aWQodm9pZCk7Cit2b2lk CWZpbGx3KGludCAvKnVfc2hvcnQqLyBwYXQsIHZvaWQgKmJhc2UsIHNpemVfdCBjbnQpOworaW50 CWlzX3BoeXNpY2FsX21lbW9yeSh2bV9wYWRkcl90IGFkZHIpOworaW50CWlzYV9ubWkoaW50IGNk KTsKK3ZvaWQJcGFuaWNpZmNwdXVuc3VwcG9ydGVkKHZvaWQpOwordm9pZAlwYWdlY29weSh2b2lk ICpmcm9tLCB2b2lkICp0byk7Cit2b2lkCXByaW50Y3B1aW5mbyh2b2lkKTsKK2ludAl1c2VyX2Ri cmVnX3RyYXAodm9pZCk7CitpbnQJbWluaWR1bXBzeXMoc3RydWN0IGR1bXBlcmluZm8gKik7Citz dHJ1Y3QgcGNiICpnZXRfcGNiX3RkKHN0cnVjdCB0aHJlYWQgKnRkKTsKKworI2VuZGlmCmRpZmYg LXUgLXIgLU4gdXNyL3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaCAvdXNy L3NyYy9zeXMvbW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaAotLS0gdXNyL3NyYy9zeXMv bW9kdWxlcy9uZXRtYXAveDg2L3hlbi94ZW4tb3MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvbmV0bWFwL3g4Ni94ZW4veGVuLW9z LmgJMjAxNi0wOS0yOSAwMDoyNDo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzOCBAQAor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiB4ODYveGVuL3hlbi1vcy5oCisgKgorICogUmFuZG9t IGNvbGxlY3Rpb24gb2YgbWFjcm9zIGFuZCBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0IChj KSAyMDAzLCAyMDA0IEtlaXIgRnJhc2VyIChvbiBiZWhhbGYgb2YgdGhlIFhlbiB0ZWFtKQorICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IK KyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS CisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogJEZyZWVCU0Q6IHJlbGVuZy8x MS4wL3N5cy94ODYvaW5jbHVkZS94ZW4veGVuLW9zLmggMjg5Njg2IDIwMTUtMTAtMjEgMTA6NDQ6 MDdaIHJveWdlciAkCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9YODZfWEVOX1hFTl9PU19IXwor I2RlZmluZSBfTUFDSElORV9YODZfWEVOX1hFTl9PU19IXworCisvKiBFdmVyeXRoaW5nIGJlbG93 IHRoaXMgcG9pbnQgaXMgbm90IGluY2x1ZGVkIGJ5IGFzc2VtYmxlciAoLlMpIGZpbGVzLiAqLwor I2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2Vu ZGlmIC8qIF9NQUNISU5FX1g4Nl9YRU5fWEVOX09TX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3Ny Yy9zeXMvbW9kdWxlcy92bW0vTWFrZWZpbGUgL3Vzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2Vm aWxlCi0tLSB1c3Ivc3JjL3N5cy9tb2R1bGVzL3ZtbS9NYWtlZmlsZQkyMDE2LTA5LTI5IDAwOjI0 OjUyLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxl CTIwMTYtMTEtMzAgMTA6NTY6MDUuODA1NzYwMDAwICswMDAwCkBAIC0yMSw2ICsyMSw3IEBACiAJ dm1tX2lvcG9ydC5jCVwKIAl2bW1fbGFwaWMuYwlcCiAJdm1tX21lbS5jCVwKKwl2bW1fdXNlcm1l bS5jCVwKIAl2bW1fc3RhdC5jCVwKIAl2bW1fdXRpbC5jCVwKIAl4ODYuYwpkaWZmIC11IC1yIC1O IHVzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxlLm9yaWcgL3Vzci9zcmMvc3lzL21vZHVs ZXMvdm1tL01ha2VmaWxlLm9yaWcKLS0tIHVzci9zcmMvc3lzL21vZHVsZXMvdm1tL01ha2VmaWxl Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5 cy9tb2R1bGVzL3ZtbS9NYWtlZmlsZS5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuNjcwMjA4MDAw ICswMDAwCkBAIC0wLDAgKzEsNzkgQEAKKyMgJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3N5cy9tb2R1 bGVzL3ZtbS9NYWtlZmlsZSAyNzk5NzEgMjAxNS0wMy0xNCAwMjozMjowOFogbmVlbCAkCisKK0tN T0Q9CXZtbQorCitTUkNTPQlvcHRfYWNwaS5oIG9wdF9kZGIuaCBkZXZpY2VfaWYuaCBidXNfaWYu aCBwY2lfaWYuaAorU1JDUys9CXZteF9hc3N5bS5oIHN2bV9hc3N5bS5oCitEUFNSQ1M9CXZteF9n ZW5hc3N5bS5jIHN2bV9nZW5hc3N5bS5jCisKK0NGTEFHUys9IC1EVk1NX0tFRVBfU1RBVFMgLURT TVAKK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0KK0NGTEFHUys9IC1JJHsu Q1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vaW8KK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9h bWQ2NC92bW0vaW50ZWwKK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vYW1k CisKKyMgZ2VuZXJpYyB2bW0gc3VwcG9ydAorLlBBVEg6ICR7LkNVUkRJUn0vLi4vLi4vYW1kNjQv dm1tCitTUkNTKz0Jdm1tLmMJCVwKKwl2bW1fZGV2LmMJXAorCXZtbV9ob3N0LmMJXAorCXZtbV9p bnN0cnVjdGlvbl9lbXVsLmMJXAorCXZtbV9pb3BvcnQuYwlcCisJdm1tX2xhcGljLmMJXAorCXZt bV9tZW0uYwlcCisJdm1tX3N0YXQuYwlcCisJdm1tX3V0aWwuYwlcCisJeDg2LmMKKworLlBBVEg6 ICR7LkNVUkRJUn0vLi4vLi4vYW1kNjQvdm1tL2lvCitTUkNTKz0JaW9tbXUuYwkJXAorCXBwdC5j ICAgICAgICAgICBcCisJdmF0cGljLmMJXAorCXZhdHBpdC5jCVwKKwl2aHBldC5jCQlcCisJdmlv YXBpYy5jCVwKKwl2bGFwaWMuYwlcCisJdnBtdG1yLmMJXAorCXZydGMuYworCisjIGludGVsLXNw ZWNpZmljIGZpbGVzCisuUEFUSDogJHsuQ1VSRElSfS8uLi8uLi9hbWQ2NC92bW0vaW50ZWwKK1NS Q1MrPQllcHQuYwkJXAorCXZtY3MuYwkJXAorCXZteF9tc3IuYwlcCisJdm14X3N1cHBvcnQuUwlc CisJdm14LmMJCVwKKwl2dGQuYworCisjIGFtZC1zcGVjaWZpYyBmaWxlcworLlBBVEg6ICR7LkNV UkRJUn0vLi4vLi4vYW1kNjQvdm1tL2FtZAorU1JDUys9CXZtY2IuYwkJXAorCXN2bS5jCQlcCisJ c3ZtX3N1cHBvcnQuUwlcCisJbnB0LmMJCVwKKwlhbWR2LmMJCVwKKwlzdm1fbXNyLmMKKworQ0xF QU5GSUxFUz0Jdm14X2Fzc3ltLmggdm14X2dlbmFzc3ltLm8gc3ZtX2Fzc3ltLmggc3ZtX2dlbmFz c3ltLm8KKwordm14X2Fzc3ltLmg6ICAgIHZteF9nZW5hc3N5bS5vCisJc2ggJHtTWVNESVJ9L2tl cm4vZ2VuYXNzeW0uc2ggdm14X2dlbmFzc3ltLm8gPiAkey5UQVJHRVR9CisKK3N2bV9hc3N5bS5o OiAgICBzdm1fZ2VuYXNzeW0ubworCXNoICR7U1lTRElSfS9rZXJuL2dlbmFzc3ltLnNoIHN2bV9n ZW5hc3N5bS5vID4gJHsuVEFSR0VUfQorCit2bXhfc3VwcG9ydC5vOgorCSR7Q0N9IC1jIC14IGFz c2VtYmxlci13aXRoLWNwcCAtRExPQ09SRSAke0NGTEFHU30gXAorCSAgICAkey5JTVBTUkN9IC1v ICR7LlRBUkdFVH0KKworc3ZtX3N1cHBvcnQubzoKKwkke0NDfSAtYyAteCBhc3NlbWJsZXItd2l0 aC1jcHAgLURMT0NPUkUgJHtDRkxBR1N9IFwKKwkgICAgJHsuSU1QU1JDfSAtbyAkey5UQVJHRVR9 CisKK3ZteF9nZW5hc3N5bS5vOgorCSR7Q0N9IC1jICR7Q0ZMQUdTOk4tZm5vLWNvbW1vbn0gJHsu SU1QU1JDfQorCitzdm1fZ2VuYXNzeW0ubzoKKwkke0NDfSAtYyAke0NGTEFHUzpOLWZuby1jb21t b259ICR7LklNUFNSQ30KKworLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpkaWZmIC11IC1yIC1OIHVz ci9zcmMvc3lzL25ldC9uZXRtYXAuaCAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcC5oCi0tLSB1c3Iv c3JjL3N5cy9uZXQvbmV0bWFwLmgJMjAxNi0wOS0yOSAwMDoyNDo0MS4wMDAwMDAwMDAgKzAxMDAK KysrIC91c3Ivc3JjL3N5cy9uZXQvbmV0bWFwLmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44NTc3ODgw MDAgKzAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAvKgotICogJEZyZWVCU0Q6IHJlbGVu Zy8xMS4wL3N5cy9uZXQvbmV0bWFwLmggMjg1MzQ5IDIwMTUtMDctMTAgMDU6NTE6MzZaIGx1aWdp ICQKKyAqICRGcmVlQlNEOiBoZWFkL3N5cy9uZXQvbmV0bWFwLmggMjUxMTM5IDIwMTMtMDUtMzAg MTQ6MDc6MTRaIGx1aWdpICQKICAqCiAgKiBEZWZpbml0aW9ucyBvZiBjb25zdGFudHMgYW5kIHRo ZSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIG5ldG1hcAogICogZnJhbWV3b3JrLCBmb3IgdGhlIHBh cnQgdmlzaWJsZSB0byBib3RoIGtlcm5lbCBhbmQgdXNlcnNwYWNlLgpAQCAtMTM3LDYgKzEzNywy NiBAQAogICoJbmV0bWFwOmZvby1rCQkJdGhlIGstdGggTklDIHJpbmcgcGFpcgogICoJbmV0bWFw OmZvb3trCQkJUElQRSByaW5nIHBhaXIgaywgbWFzdGVyIHNpZGUKICAqCW5ldG1hcDpmb299awkJ CVBJUEUgcmluZyBwYWlyIGssIHNsYXZlIHNpZGUKKyAqCisgKiBTb21lIG5vdGVzIGFib3V0IGhv c3QgcmluZ3M6CisgKgorICogKyBUaGUgUlggaG9zdCByaW5nIGlzIHVzZWQgdG8gc3RvcmUgdGhv c2UgcGFja2V0cyB0aGF0IHRoZSBob3N0IG5ldHdvcmsKKyAqICAgc3RhY2sgaXMgdHJ5aW5nIHRv IHRyYW5zbWl0IHRocm91Z2ggYSBOSUMgcXVldWUsIGJ1dCBvbmx5IGlmIHRoYXQgcXVldWUKKyAq ICAgaXMgY3VycmVudGx5IGluIG5ldG1hcCBtb2RlLiBOZXRtYXAgd2lsbCBub3QgaW50ZXJjZXB0 IGhvc3Qgc3RhY2sgbWJ1ZnMKKyAqICAgZGVzaWduYXRlZCB0byBOSUMgcXVldWVzIHRoYXQgYXJl IG5vdCBpbiBuZXRtYXAgbW9kZS4gQXMgYSBjb25zZXF1ZW5jZSwKKyAqICAgcmVnaXN0ZXJpbmcg YSBuZXRtYXAgcG9ydCB3aXRoIG5ldG1hcDpmb29eIGlzIG5vdCBlbm91Z2ggdG8gaW50ZXJjZXB0 CisgKiAgIG1idWZzIGluIHRoZSBSWCBob3N0IHJpbmc7IHRoZSBuZXRtYXAgcG9ydCBzaG91bGQg YmUgcmVnaXN0ZXJlZCB3aXRoCisgKiAgIG5ldG1hcDpmb28qLCBvciBhbm90aGVyIHJlZ2lzdHJh dGlvbiBzaG91bGQgYmUgZG9uZSB0byBvcGVuIGF0IGxlYXN0IGEKKyAqICAgTklDIFRYIHF1ZXVl IGluIG5ldG1hcCBtb2RlLgorICoKKyAqICsgTmV0bWFwIGlzIG5vdCBjdXJyZW50bHkgYWJsZSB0 byBkZWFsIHdpdGggaW50ZXJjZXB0ZWQgdHJhc21pdCBtYnVmcyB3aGljaAorICogICByZXF1aXJl IG9mZmxvYWRpbmdzIGxpa2UgVFNPLCBVRk8sIGNoZWNrc3VtbWluZyBvZmZsb2FkaW5ncywgZXRj LiBJdCBpcworICogICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBkaXNhYmxlIHRob3Nl IG9mZmxvYWRpbmdzIChlLmcuIHVzaW5nCisgKiAgIGlmY29uZmlnIG9uIEZyZWVCU0Qgb3IgZXRo dG9vbCAtSyBvbiBMaW51eCkgZm9yIGFuIGludGVyZmFjZSB0aGF0IGlzIGJlaW5nCisgKiAgIHVz ZWQgaW4gbmV0bWFwIG1vZGUuIElmIHRoZSBvZmZsb2FkaW5ncyBhcmUgbm90IGRpc2FibGVkLCBH U08gYW5kL29yCisgKiAgIHVuY2hlY2tzdW1tZWQgcGFja2V0cyBtYXkgYmUgZHJvcHBlZCBpbW1l ZGlhdGVseSBvciBlbmQgdXAgaW4gdGhlIGhvc3QgUlgKKyAqICAgcmluZywgYW5kIHdpbGwgYmUg ZHJvcHBlZCBhcyBzb29uIGFzIHRoZSBwYWNrZXQgcmVhY2hlcyBhbm90aGVyIG5ldG1hcAorICog ICBhZGFwdGVyLgogICovCiAKIC8qCkBAIC0yNzcsNyArMjk3LDExIEBACiAJc3RydWN0IHRpbWV2 YWwJdHM7CQkvKiAoaykgdGltZSBvZiBsYXN0ICpzeW5jKCkgKi8KIAogCS8qIG9wYXF1ZSByb29t IGZvciBhIG11dGV4IG9yIHNpbWlsYXIgb2JqZWN0ICovCi0JdWludDhfdAkJc2VtWzEyOF0gX19h dHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTk1fQ0FDSEVfQUxJR04pKSk7CisjaWYgIWRlZmluZWQo X1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisJdWludDhfdAlfX2F0dHJpYnV0ZV9fKChf X2FsaWduZWRfXyhOTV9DQUNIRV9BTElHTikpKSBzZW1bMTI4XTsKKyNlbHNlCisJdWludDhfdAlf X2RlY2xzcGVjKGFsaWduKE5NX0NBQ0hFX0FMSUdOKSkgc2VtWzEyOF07CisjZW5kaWYKIAogCS8q IHRoZSBzbG90cyBmb2xsb3cuIFRoaXMgc3RydWN0IGhhcyB2YXJpYWJsZSBzaXplICovCiAJc3Ry dWN0IG5ldG1hcF9zbG90IHNsb3RbMF07CS8qIGFycmF5IG9mIHNsb3RzLiAqLwpAQCAtNDk2LDYg KzUyMCwxMiBAQAogI2RlZmluZSBORVRNQVBfQkRHX09GRlNFVAlORVRNQVBfQkRHX1ZORVRfSERS CS8qIGRlcHJlY2F0ZWQgYWxpYXMgKi8KICNkZWZpbmUgTkVUTUFQX0JER19ORVdJRgk2CS8qIGNy ZWF0ZSBhIHZpcnR1YWwgcG9ydCAqLwogI2RlZmluZSBORVRNQVBfQkRHX0RFTElGCTcJLyogZGVz dHJveSBhIHZpcnR1YWwgcG9ydCAqLworI2RlZmluZSBORVRNQVBfUFRfSE9TVF9DUkVBVEUJOAkv KiBjcmVhdGUgcHRuZXRtYXAga3RocmVhZHMgKi8KKyNkZWZpbmUgTkVUTUFQX1BUX0hPU1RfREVM RVRFCTkJLyogZGVsZXRlIHB0bmV0bWFwIGt0aHJlYWRzICovCisjZGVmaW5lIE5FVE1BUF9CREdf UE9MTElOR19PTgkxMAkvKiBkZWxldGUgcG9sbGluZyBrdGhyZWFkICovCisjZGVmaW5lIE5FVE1B UF9CREdfUE9MTElOR19PRkYJMTEJLyogZGVsZXRlIHBvbGxpbmcga3RocmVhZCAqLworI2RlZmlu ZSBORVRNQVBfVk5FVF9IRFJfR0VUCTEyICAgICAgLyogZ2V0IHRoZSBwb3J0IHZpcnRpby1uZXQt aGRyIGxlbmd0aCAqLworI2RlZmluZSBORVRNQVBfUE9PTFNfSU5GT19HRVQJMTMJLyogZ2V0IG1l bW9yeSBhbGxvY2F0b3IgcG9vbHMgaW5mbyAqLwogCXVpbnQxNl90CW5yX2FyZzE7CS8qIHJlc2Vy dmUgZXh0cmEgcmluZ3MgaW4gTklPQ1JFR0lGICovCiAjZGVmaW5lIE5FVE1BUF9CREdfSE9TVAkJ MQkvKiBhdHRhY2ggdGhlIGhvc3Qgc3RhY2sgb24gQVRUQUNIICovCiAKQEAgLTUyMSw3ICs1NTEs NjEgQEAKICNkZWZpbmUgTlJfWkNPUFlfTU9OCTB4NDAwCiAvKiByZXF1ZXN0IGV4Y2x1c2l2ZSBh Y2Nlc3MgdG8gdGhlIHNlbGVjdGVkIHJpbmdzICovCiAjZGVmaW5lIE5SX0VYQ0xVU0lWRQkweDgw MAorLyogcmVxdWVzdCBwdG5ldG1hcCBob3N0IHN1cHBvcnQgKi8KKyNkZWZpbmUgTlJfUEFTU1RI Uk9VR0hfSE9TVAlOUl9QVE5FVE1BUF9IT1NUIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgTlJf UFRORVRNQVBfSE9TVAkweDEwMDAKKyNkZWZpbmUgTlJfUlhfUklOR1NfT05MWQkweDIwMDAKKyNk ZWZpbmUgTlJfVFhfUklOR1NfT05MWQkweDQwMDAKKy8qIEFwcGxpY2F0aW9ucyBzZXQgdGhpcyBm bGFnIGlmIHRoZXkgYXJlIGFibGUgdG8gZGVhbCB3aXRoIHZpcnRpby1uZXQgaGVhZGVycywKKyAq IHRoYXQgaXMgc2VuZC9yZWNlaXZlIGZyYW1lcyB0aGF0IHN0YXJ0IHdpdGggYSB2aXJ0aW8tbmV0 IGhlYWRlci4KKyAqIElmIG5vdCBzZXQsIE5JT0NSRUdJRiB3aWxsIGZhaWwgd2l0aCBuZXRtYXAg cG9ydHMgdGhhdCByZXF1aXJlIGFwcGxpY2F0aW9ucworICogdG8gdXNlIHRob3NlIGhlYWRlcnMu IElmIHRoZSBmbGFnIGlzIHNldCwgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlCisgKiBORVRN QVBfVk5FVF9IRFJfR0VUIGNvbW1hbmQgdG8gZmlndXJlIG91dCB0aGUgaGVhZGVyIGxlbmd0aC4g Ki8KKyNkZWZpbmUgTlJfQUNDRVBUX1ZORVRfSERSCTB4ODAwMAorCisjZGVmaW5lCU5NX0JER19O QU1FCQkidmFsZSIJLyogcHJlZml4IGZvciBicmlkZ2UgcG9ydCBuYW1lICovCisKKy8qCisgKiBX aW5kb3dzIGRvZXMgbm90IGhhdmUgX0lPV1IoKS4gX0lPKCksIF9JT1coKSBhbmQgX0lPUigpIGFy ZSBkZWZpbmVkCisgKiBpbiB3czJkZWYuaCBidXQgbm90IHN1cmUgaWYgdGhleSBhcmUgaW4gdGhl IGZvcm0gd2UgbmVlZC4KKyAqIFhYWCBzbyB3ZSByZWRlZmluZSB0aGVtCisgKiBpbiBhIGNvbnZl bmllbnQgd2F5IHRvIHVzZSBmb3IgRGV2aWNlSW9Db250cm9sIHNpZ25hdHVyZXMKKyAqLworI2lm ZGVmIF9XSU4zMgorI3VuZGVmIF9JTwkvLyB3czJkZWYuaAorI2RlZmluZSBfV0lOX05NX0lPQ1RM X1RZUEUgNDAwMDAKKyNkZWZpbmUgX0lPKF9jLCBfbikJQ1RMX0NPREUoX1dJTl9OTV9JT0NUTF9U WVBFLCAoKF9uKSArIDB4ODAwKSAsIFwKKwkJTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NF U1MgICkKKyNkZWZpbmUgX0lPX2RpcmVjdChfYywgX24pCUNUTF9DT0RFKF9XSU5fTk1fSU9DVExf VFlQRSwgKChfbikgKyAweDgwMCkgLCBcCisJCU1FVEhPRF9PVVRfRElSRUNULCBGSUxFX0FOWV9B Q0NFU1MgICkKKworI2RlZmluZSBfSU9XUihfYywgX24sIF9zKQlfSU8oX2MsIF9uKQorCisvKiBX ZSBoYXZlc29tZSBpbnRlcm5hbCBzeXNjdGwgaW4gYWRkaXRpb24gdG8gdGhlIGV4dGVybmFsbHkg dmlzaWJsZSBvbmVzICovCisjZGVmaW5lIE5FVE1BUF9NTUFQIF9JT19kaXJlY3QoJ2knLCAxNjAp CS8vIG5vdGUgTUVUSE9EX09VVF9ESVJFQ1QKKyNkZWZpbmUgTkVUTUFQX1BPTEwgX0lPKCdpJywg MTYyKQorCisvKiBhbmQgYWxzbyB0d28gc2V0c29ja29wdCBmb3Igc3lzY3RsIGVtdWxhdGlvbiAq LworI2RlZmluZSBORVRNQVBfU0VUU09DS09QVCBfSU8oJ2knLCAxNDApCisjZGVmaW5lIE5FVE1B UF9HRVRTT0NLT1BUIF9JTygnaScsIDE0MSkKKworCisvL1RoZXNlIGxpbmtuYW1lcyBhcmUgZm9y IHRoZSBOZXRtYXAgQ29yZSBEcml2ZXIKKyNkZWZpbmUgTkVUTUFQX05UX0RFVklDRV9OQU1FCQkJ TCJcXERldmljZVxcTkVUTUFQIgorI2RlZmluZSBORVRNQVBfRE9TX0RFVklDRV9OQU1FCQkJTCJc XERvc0RldmljZXNcXG5ldG1hcCIKKworLy9EZWZpbml0aW9uIG9mIGEgc3RydWN0dXJlIHVzZWQg dG8gcGFzcyBhIHZpcnR1YWwgYWRkcmVzcyB3aXRoaW4gYW4gSU9DVEwKK3R5cGVkZWYgc3RydWN0 IF9NRU1PUllfRU5UUlkgeworCVBWT0lEICAgICAgIHBVc2VybW9kZVZpcnR1YWxBZGRyZXNzOwor fSBNRU1PUllfRU5UUlksICpQTUVNT1JZX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUE9MTF9S RVFVRVNUX0RBVEEgeworCWludCBldmVudHM7CisJaW50IHRpbWVvdXQ7CisJaW50IHJldmVudHM7 Cit9IFBPTExfUkVRVUVTVF9EQVRBOwogCisjZW5kaWYgLyogX1dJTjMyICovCiAKIC8qCiAgKiBG cmVlQlNEIHVzZXMgdGhlIHNpemUgdmFsdWUgZW1iZWRkZWQgaW4gdGhlIF9JT1dSIHRvIGRldGVy bWluZQpkaWZmIC11IC1yIC1OIHVzci9zcmMvc3lzL25ldC9uZXRtYXBfdXNlci5oIC91c3Ivc3Jj L3N5cy9uZXQvbmV0bWFwX3VzZXIuaAotLS0gdXNyL3NyYy9zeXMvbmV0L25ldG1hcF91c2VyLmgJ MjAxNi0wOS0yOSAwMDoyNDo0MS4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3N5cy9uZXQv bmV0bWFwX3VzZXIuaAkyMDE2LTExLTIzIDE2OjU3OjU3Ljg1ODM1MTAwMCArMDAwMApAQCAtMSw1 ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBVbml2ZXJzaXRhYCBkaSBQ aXNhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgVW5p dmVyc2l0YWAgZGkgUGlzYQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjYsNyBAQAogICovCiAKIC8qCi0gKiAkRnJlZUJT RDogcmVsZW5nLzExLjAvc3lzL25ldC9uZXRtYXBfdXNlci5oIDI4NTM0OSAyMDE1LTA3LTEwIDA1 OjUxOjM2WiBsdWlnaSAkCisgKiAkRnJlZUJTRCQKICAqCiAgKiBGdW5jdGlvbnMgYW5kIG1hY3Jv cyB0byBtYW5pcHVsYXRlIG5ldG1hcCBzdHJ1Y3R1cmVzIGFuZCBwYWNrZXRzCiAgKiBpbiB1c2Vy c3BhY2UuIFNlZSBuZXRtYXAoNCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCkBAIC02NSw5ICs2Niwz MSBAQAogI2lmbmRlZiBfTkVUX05FVE1BUF9VU0VSX0hfCiAjZGVmaW5lIF9ORVRfTkVUTUFQX1VT RVJfSF8KIAorI2RlZmluZSBORVRNQVBfREVWSUNFX05BTUUgIi9kZXYvbmV0bWFwIgorCisjaWZk ZWYgX19DWUdXSU5fXworLyoKKyAqIHdlIGNhbiBjb21waWxlIHVzZXJzcGFjZSBhcHBzIHdpdGgg ZWl0aGVyIGN5Z3dpbiBvciBtc3ZjLAorICogYW5kIHdlIHVzZSBfV0lOMzIgdG8gaWRlbnRpZnkg d2luZG93cyBzcGVjaWZpYyBjb2RlCisgKi8KKyNpZm5kZWYgX1dJTjMyCisjZGVmaW5lIF9XSU4z MgorI2VuZGlmCS8qIF9XSU4zMiAqLworCisjZW5kaWYJLyogX19DWUdXSU5fXyAqLworCisjaWZk ZWYgX1dJTjMyCisjdW5kZWYgTkVUTUFQX0RFVklDRV9OQU1FCisjZGVmaW5lIE5FVE1BUF9ERVZJ Q0VfTkFNRSAiL3Byb2Mvc3lzL0Rvc0RldmljZXMvR2xvYmFsL25ldG1hcCIKKyNpbmNsdWRlIDx3 aW5kb3dzLmg+CisjaW5jbHVkZSA8V2luRGVmLmg+CisjaW5jbHVkZSA8c3lzL2N5Z3dpbi5oPgor I2VuZGlmIC8qIF9XSU4zMiAqLworCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3lz L3NvY2tldC5oPgkJLyogYXBwbGUgbmVlZHMgc29ja2FkZHIgKi8KICNpbmNsdWRlIDxuZXQvaWYu aD4JCS8qIElGTkFNU0laICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KIAogI2lmbmRlZiBsaWtlbHkK ICNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpCkBAIC0xNzIsMTcg KzE5NSwyMyBAQAogICAgIH0gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RydWN0IG5tX3BrdGhkciB7 CS8qIHNhbWUgYXMgcGNhcF9wa3RoZHIgKi8KK3N0cnVjdCBubV9wa3RoZHIgewkvKiBmaXJzdCBw YXJ0IGlzIHRoZSBzYW1lIGFzIHBjYXBfcGt0aGRyICovCiAJc3RydWN0IHRpbWV2YWwJdHM7CiAJ dWludDMyX3QJY2FwbGVuOwogCXVpbnQzMl90CWxlbjsKKworCXVpbnQ2NF90IGZsYWdzOwkvKiBO TV9NT1JFX1BLVFMgZXRjICovCisjZGVmaW5lIE5NX01PUkVfUEtUUwkxCisJc3RydWN0IG5tX2Rl c2MgKmQ7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90OworCXVpbnQ4X3QgKmJ1ZjsKIH07CiAK IHN0cnVjdCBubV9zdGF0IHsJLyogc2FtZSBhcyBwY2FwX3N0YXQJKi8KIAl1X2ludAlwc19yZWN2 OwogCXVfaW50CXBzX2Ryb3A7CiAJdV9pbnQJcHNfaWZkcm9wOwotI2lmZGVmIFdJTjMyCisjaWZk ZWYgV0lOMzIgLyogWFhYIG9yIF9XSU4zMiA/ICovCiAJdV9pbnQJYnNfY2FwdDsKICNlbmRpZiAv KiBXSU4zMiAqLwogfTsKQEAgLTI4NCwxMiArMzEzLDE0IEBACiAgKgkJLU5OCQliaW5kIGluZGl2 aWR1YWwgTklDIHJpbmcgcGFpcgogICoJCXtOTgkJYmluZCBtYXN0ZXIgc2lkZSBvZiBwaXBlIE5O CiAgKgkJfU5OCQliaW5kIHNsYXZlIHNpZGUgb2YgcGlwZSBOTgotICoJCWEgc3VmZml4IHN0YXJ0 aW5nIHdpdGggKyBhbmQgdGhlIGZvbGxvd2luZyBmbGFncywKKyAqCQlhIHN1ZmZpeCBzdGFydGlu ZyB3aXRoIC8gYW5kIHRoZSBmb2xsb3dpbmcgZmxhZ3MsCiAgKgkJaW4gYW55IG9yZGVyOgogICoJ CXgJCWV4Y2x1c2l2ZSBhY2Nlc3MKICAqCQl6CQl6ZXJvIGNvcHkgbW9uaXRvcgogICoJCXQJCW1v bml0b3IgdHggc2lkZQogICoJCXIJCW1vbml0b3Igcnggc2lkZQorICoJCVIJCWJpbmQgb25seSBS WCByaW5nKHMpCisgKgkJVAkJYmluZCBvbmx5IFRYIHJpbmcocykKICAqCiAgKiByZXEJCXByb3Zp ZGVzIHRoZSBpbml0aWFsIHZhbHVlcyBvZiBubXJlcSBiZWZvcmUgcGFyc2luZyBpZm5hbWUuCiAg KgkJUmVtZW1iZXIgdGhhdCB0aGUgaWZuYW1lIHBhcnNpbmcgd2lsbCBvdmVycmlkZSB0aGUgcmlu ZwpAQCAtMzI5LDYgKzM2MCwxMyBAQAogc3RhdGljIGludCBubV9jbG9zZShzdHJ1Y3Qgbm1fZGVz YyAqKTsKIAogLyoKKyAqIG5tX21tYXAoKSAgICBkbyBtbWFwIG9yIGluaGVyaXQgZnJvbSBwYXJl bnQgaWYgdGhlIG5yX2FyZzIKKyAqICAgICAgICAgICAgICAobWVtb3J5IGJsb2NrKSBtYXRjaGVz LgorICovCisKK3N0YXRpYyBpbnQgbm1fbW1hcChzdHJ1Y3Qgbm1fZGVzYyAqLCBjb25zdCBzdHJ1 Y3Qgbm1fZGVzYyAqKTsKKworLyoKICAqIG5tX2luamVjdCgpIGlzIHRoZSBzYW1lIGFzIHBjYXBf aW5qZWN0KCkKICAqIG5tX2Rpc3BhdGNoKCkgaXMgdGhlIHNhbWUgYXMgcGNhcF9kaXNwYXRjaCgp CiAgKiBubV9uZXh0cGt0KCkgaXMgdGhlIHNhbWUgYXMgcGNhcF9uZXh0KCkKQEAgLTMzOCwxMyAr Mzc2LDI0NyBAQAogc3RhdGljIGludCBubV9kaXNwYXRjaChzdHJ1Y3Qgbm1fZGVzYyAqLCBpbnQs IG5tX2NiX3QsIHVfY2hhciAqKTsKIHN0YXRpYyB1X2NoYXIgKm5tX25leHRwa3Qoc3RydWN0IG5t X2Rlc2MgKiwgc3RydWN0IG5tX3BrdGhkciAqKTsKIAorI2lmZGVmIF9XSU4zMgorCitpbnRwdHJf dCBfZ2V0X29zZmhhbmRsZShpbnQpOyAvKiBkZWZpbmVkIGluIGlvLmggaW4gd2luZG93cyAqLwor CisvKgorICogSW4gd2luZG93cyB3ZSBkbyBub3QgaGF2ZSB5ZXQgbmF0aXZlIHBvbGwgc3VwcG9y dCwgc28gd2Uga2VlcCB0cmFjaworICogb2YgZmlsZSBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHRv IG5ldG1hcCBwb3J0cyB0byBlbXVsYXRlIHBvbGwgb24KKyAqIHRoZW0gYW5kIGZhbGwgYmFjayBv biByZWd1bGFyIHBvbGwgb24gb3RoZXIgZmlsZSBkZXNjcmlwdG9ycy4KKyAqLworc3RydWN0IHdp bl9uZXRtYXBfZmRfbGlzdCB7CisJc3RydWN0IHdpbl9uZXRtYXBfZmRfbGlzdCAqbmV4dDsKKwlp bnQgd2luX25ldG1hcF9mZDsKKwlIQU5ETEUgd2luX25ldG1hcF9oYW5kbGU7Cit9OworCisvKgor ICogbGlzdCBoZWFkIGNvbnRhaW5pbmcgYWxsIHRoZSBuZXRtYXAgb3BlbmVkIGZkIGFuZCB0aGVp cgorICogd2luZG93cyBIQU5ETEUgY291bnRlcnBhcnRzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgd2lu X25ldG1hcF9mZF9saXN0ICp3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZDsKKworc3RhdGljIHZvaWQK K3dpbl9pbnNlcnRfZmRfcmVjb3JkKGludCBmZCkKK3sKKwlzdHJ1Y3Qgd2luX25ldG1hcF9mZF9s aXN0ICpjdXJyOworCisJZm9yIChjdXJyID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7IGN1cnI7 IGN1cnIgPSBjdXJyLT5uZXh0KSB7CisJCWlmIChmZCA9PSBjdXJyLT53aW5fbmV0bWFwX2ZkKSB7 CisJCQlyZXR1cm47CisJCX0KKwl9CisJY3VyciA9IGNhbGxvYygxLCBzaXplb2YoKmN1cnIpKTsK KwljdXJyLT5uZXh0ID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7CisJY3Vyci0+d2luX25ldG1h cF9mZCA9IGZkOworCWN1cnItPndpbl9uZXRtYXBfaGFuZGxlID0gSW50VG9QdHIoX2dldF9vc2Zo YW5kbGUoZmQpKTsKKwl3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZCA9IGN1cnI7Cit9CisKK3ZvaWQK K3dpbl9yZW1vdmVfZmRfcmVjb3JkKGludCBmZCkKK3sKKwlzdHJ1Y3Qgd2luX25ldG1hcF9mZF9s aXN0ICpjdXJyID0gd2luX25ldG1hcF9mZF9saXN0X2hlYWQ7CisJc3RydWN0IHdpbl9uZXRtYXBf ZmRfbGlzdCAqcHJldiA9IE5VTEw7CisJZm9yICg7IGN1cnIgOyBwcmV2ID0gY3VyciwgY3VyciA9 IGN1cnItPm5leHQpIHsKKwkJaWYgKGZkICE9IGN1cnItPndpbl9uZXRtYXBfZmQpCisJCQljb250 aW51ZTsKKwkJLyogZm91bmQgdGhlIGVudHJ5ICovCisJCWlmIChwcmV2ID09IE5VTEwpIHsgLyog d2UgYXJlIGZyZWVpbmcgdGhlIGZpcnN0IGVudHJ5ICovCisJCQl3aW5fbmV0bWFwX2ZkX2xpc3Rf aGVhZCA9IGN1cnItPm5leHQ7CisJCX0gZWxzZSB7CisJCQlwcmV2LT5uZXh0ID0gY3Vyci0+bmV4 dDsKKwkJfQorCQlmcmVlKGN1cnIpOworCQlicmVhazsKKwl9Cit9CisKKworSEFORExFCit3aW5f Z2V0X25ldG1hcF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCB3aW5fbmV0bWFwX2ZkX2xpc3Qg KmN1cnI7CisKKwlmb3IgKGN1cnIgPSB3aW5fbmV0bWFwX2ZkX2xpc3RfaGVhZDsgY3VycjsgY3Vy ciA9IGN1cnItPm5leHQpIHsKKwkJaWYgKGZkID09IGN1cnItPndpbl9uZXRtYXBfZmQpIHsKKwkJ CXJldHVybiBjdXJyLT53aW5fbmV0bWFwX2hhbmRsZTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsK K30KKworLyoKKyAqIHdlIG5lZWQgdG8gd3JhcCBpb2N0bCBhbmQgbW1hcCwgYXQgbGVhc3QgZm9y IHRoZSBuZXRtYXAgZmlsZSBkZXNjcmlwdG9ycworICovCisKKy8qCisgKiB1c2UgdGhpcyBmdW5j dGlvbiBvbmx5IGZyb20gbmV0bWFwX3VzZXIuaCBpbnRlcm5hbCBmdW5jdGlvbnMKKyAqIHNhbWUg YXMgaW9jdGwsIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBlcnJvcgorICovCitzdGF0 aWMgaW50Cit3aW5fbm1faW9jdGxfaW50ZXJuYWwoSEFORExFIGgsIGludDMyX3QgY3RsQ29kZSwg dm9pZCAqYXJnKQoreworCURXT1JEIGJSZXR1cm4gPSAwLCBzekluLCBzek91dDsKKwlCT09MIGlv Y3RsUmV0dXJuU3RhdHVzOworCXZvaWQgKmluUGFyYW0gPSBhcmcsICpvdXRQYXJhbSA9IGFyZzsK KworCXN3aXRjaCAoY3RsQ29kZSkgeworCWNhc2UgTkVUTUFQX1BPTEw6CisJCXN6SW4gPSBzaXpl b2YoUE9MTF9SRVFVRVNUX0RBVEEpOworCQlzek91dCA9IHNpemVvZihQT0xMX1JFUVVFU1RfREFU QSk7CisJCWJyZWFrOworCWNhc2UgTkVUTUFQX01NQVA6CisJCXN6SW4gPSAwOworCQlzek91dCA9 IHNpemVvZih2b2lkKik7CisJCWluUGFyYW0gPSBOVUxMOyAvKiBub3RoaW5nIG9uIGlucHV0ICov CisJCWJyZWFrOworCWNhc2UgTklPQ1RYU1lOQzoKKwljYXNlIE5JT0NSWFNZTkM6CisJCXN6SW4g PSAwOworCQlzek91dCA9IDA7CisJCWJyZWFrOworCWNhc2UgTklPQ1JFR0lGOgorCQlzekluID0g c2l6ZW9mKHN0cnVjdCBubXJlcSk7CisJCXN6T3V0ID0gc2l6ZW9mKHN0cnVjdCBubXJlcSk7CisJ CWJyZWFrOworCWNhc2UgTklPQ0NPTkZJRzoKKwkJRCgidW5zdXBwb3J0ZWQgTklPQ0NPTkZJRyEi KTsKKwkJcmV0dXJuIC0xOworCisJZGVmYXVsdDogLyogYSByZWd1bGFyIGlvY3RsICovCisJCUQo ImludmFsaWQgaW9jdGwgJXggb24gbmV0bWFwIGZkIiwgY3RsQ29kZSk7CisJCXJldHVybiAtMTsK Kwl9CisKKwlpb2N0bFJldHVyblN0YXR1cyA9IERldmljZUlvQ29udHJvbChoLAorCQkJCWN0bENv ZGUsIGluUGFyYW0sIHN6SW4sCisJCQkJb3V0UGFyYW0sIHN6T3V0LAorCQkJCSZiUmV0dXJuLCBO VUxMKTsKKwkvLyBYWFggbm90ZSB3aW5kb3dzIHJldHVybnMgMCBvbiBlcnJvciBvciBhc3luYyBj YWxsLCAxIG9uIHN1Y2Nlc3MKKwkvLyB3ZSBjb3VsZCBjYWxsIEdldExhc3RFcnJvcigpIHRvIGZp Z3VyZSBvdXQgd2hhdCBoYXBwZW5lZAorCXJldHVybiBpb2N0bFJldHVyblN0YXR1cyA/IDAgOiAt MTsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgd2hhdCBtdXN0IGJlIGNhbGxlZCBmcm9t IHVzZXItc3BhY2UgcHJvZ3JhbXMKKyAqIHNhbWUgYXMgaW9jdGwsIHJldHVybnMgMCBvbiBzdWNj ZXNzIGFuZCAtMSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50Cit3aW5fbm1faW9jdGwoaW50IGZk LCBpbnQzMl90IGN0bENvZGUsIHZvaWQgKmFyZykKK3sKKwlIQU5ETEUgaCA9IHdpbl9nZXRfbmV0 bWFwX2hhbmRsZShmZCk7CisKKwlpZiAoaCA9PSBOVUxMKSB7CisJCXJldHVybiBpb2N0bChmZCwg Y3RsQ29kZSwgYXJnKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gd2luX25tX2lvY3RsX2ludGVybmFs KGgsIGN0bENvZGUsIGFyZyk7CisJfQorfQorCisjZGVmaW5lIGlvY3RsIHdpbl9ubV9pb2N0bCAv KiBmcm9tIG5vdyBvbiwgd2l0aGluIHRoaXMgZmlsZSAuLi4gKi8KKworLyoKKyAqIFdlIGNhbm5v dCB1c2UgdGhlIG5hdGl2ZSBtbWFwIG9uIHdpbmRvd3MKKyAqIFRoZSBvbmx5IHBhcmFtZXRlciB1 c2VkIGlzICJmZCIsIHRoZSBvdGhlciBvbmVzIGFyZSBqdXN0IGRlY2xhcmVkIHRvCisgKiBtYWtl IHRoaXMgc2lnbmF0dXJlIGNvbXBhcmFibGUgdG8gdGhlIEZyZWVCU0QvTGludXggb25lCisgKi8K K3N0YXRpYyB2b2lkICoKK3dpbjMyX21tYXBfZW11bGF0ZWQodm9pZCAqYWRkciwgc2l6ZV90IGxl bmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBpbnQzMl90IG9mZnNldCkKK3sKKwlI QU5ETEUgaCA9IHdpbl9nZXRfbmV0bWFwX2hhbmRsZShmZCk7CisKKwlpZiAoaCA9PSBOVUxMKSB7 CisJCXJldHVybiBtbWFwKGFkZHIsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOwor CX0gZWxzZSB7CisJCU1FTU9SWV9FTlRSWSByZXQ7CisKKwkJcmV0dXJuIHdpbl9ubV9pb2N0bF9p bnRlcm5hbChoLCBORVRNQVBfTU1BUCwgJnJldCkgPworCQkJTlVMTCA6IHJldC5wVXNlcm1vZGVW aXJ0dWFsQWRkcmVzczsKKwl9Cit9CisKKyNkZWZpbmUgbW1hcCB3aW4zMl9tbWFwX2VtdWxhdGVk CisKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPiAvKiBYWFggbmVlZGVkIHRvIHVzZSB0aGUgc3RydWN0 dXJlIHBvbGxmZCAqLworCitzdGF0aWMgaW50Cit3aW5fbm1fcG9sbChzdHJ1Y3QgcG9sbGZkICpm ZHMsIGludCBuZmRzLCBpbnQgdGltZW91dCkKK3sKKwlIQU5ETEUgaDsKKworCWlmIChuZmRzICE9 IDEgfHwgZmRzID09IE5VTEwgfHwgKGggPSB3aW5fZ2V0X25ldG1hcF9oYW5kbGUoZmRzLT5mZCkp ID09IE5VTEwpIHs7CisJCXJldHVybiBwb2xsKGZkcywgbmZkcywgdGltZW91dCk7CisJfSBlbHNl IHsKKwkJUE9MTF9SRVFVRVNUX0RBVEEgcHJkOworCisJCXByZC50aW1lb3V0ID0gdGltZW91dDsK KwkJcHJkLmV2ZW50cyA9IGZkcy0+ZXZlbnRzOworCisJCXdpbl9ubV9pb2N0bF9pbnRlcm5hbCho LCBORVRNQVBfUE9MTCwgJnByZCk7CisJCWlmICgocHJkLnJldmVudHMgPT0gUE9MTEVSUikgfHwg KHByZC5yZXZlbnRzID09IFNUQVRVU19USU1FT1VUKSkgeworCQkJcmV0dXJuIC0xOworCQl9CisJ CXJldHVybiAxOworCX0KK30KKworI2RlZmluZSBwb2xsIHdpbl9ubV9wb2xsCisKK3N0YXRpYyBp bnQKK3dpbl9ubV9vcGVuKGNoYXIqIHBhdGhuYW1lLCBpbnQgZmxhZ3MpCit7CisKKwlpZiAoc3Ry Y21wKHBhdGhuYW1lLCBORVRNQVBfREVWSUNFX05BTUUpID09IDApIHsKKwkJaW50IGZkID0gb3Bl bihORVRNQVBfREVWSUNFX05BTUUsIE9fUkRXUik7CisJCWlmIChmZCA8IDApIHsKKwkJCXJldHVy biAtMTsKKwkJfQorCisJCXdpbl9pbnNlcnRfZmRfcmVjb3JkKGZkKTsKKwkJcmV0dXJuIGZkOwor CX0gZWxzZSB7CisJCXJldHVybiBvcGVuKHBhdGhuYW1lLCBmbGFncyk7CisJfQorfQorCisjZGVm aW5lIG9wZW4gd2luX25tX29wZW4KKworc3RhdGljIGludAord2luX25tX2Nsb3NlKGludCBmZCkK K3sKKwlpZiAoZmQgIT0gLTEpIHsKKwkJY2xvc2UoZmQpOworCQlpZiAod2luX2dldF9uZXRtYXBf aGFuZGxlKGZkKSAhPSBOVUxMKSB7CisJCQl3aW5fcmVtb3ZlX2ZkX3JlY29yZChmZCk7CisJCX0K Kwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgY2xvc2Ugd2luX25tX2Nsb3NlCisKKyNlbmRp ZiAvKiBfV0lOMzIgKi8KKworc3RhdGljIGludAorbm1faXNfaWRlbnRpZmllcihjb25zdCBjaGFy ICpzLCBjb25zdCBjaGFyICplKQoreworCWZvciAoOyBzICE9IGU7IHMrKykgeworCQlpZiAoIWlz YWxudW0oKnMpICYmICpzICE9ICdfJykgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1 cm4gMTsKK30KIAogLyoKICAqIFRyeSB0byBvcGVuLCByZXR1cm4gZGVzY3JpcHRvciBpZiBzdWNj ZXNzZnVsLCBOVUxMIG90aGVyd2lzZS4KICAqIEFuIGludmFsaWQgbmV0bWFwIG5hbWUgd2lsbCBy ZXR1cm4gZXJybm8gPSAwOwogICogWW91IGNhbiBwYXNzIGEgcG9pbnRlciB0byBhIHByZS1maWxs ZWQgbm1fZGVzYyB0byBhZGQgc3BlY2lhbAogICogcGFyYW1ldGVycy4gRmxhZ3MgaXMgdXNlZCBh cyBmb2xsb3dzCi0gKiBOTV9PUEVOX05PX01NQVAJdXNlIHRoZSBtZW1vcnkgZnJvbSBhcmcsIG9u bHkKKyAqIE5NX09QRU5fTk9fTU1BUAl1c2UgdGhlIG1lbW9yeSBmcm9tIGFyZywgb25seSBYWFgg YXZvaWQgbW1hcAogICoJCQlpZiB0aGUgbnJfYXJnMiAobWVtb3J5IGJsb2NrKSBtYXRjaGVzLgog ICogTk1fT1BFTl9BUkcxCQl1c2UgcmVxLm5yX2FyZzEgZnJvbSBhcmcKICAqIE5NX09QRU5fQVJH MgkJdXNlIHJlcS5ucl9hcmcyIGZyb20gYXJnCkBAIC0zNTksMjAgKzYzMSw0OSBAQAogCXVfaW50 IG5hbWVsZW47CiAJdWludDMyX3QgbnJfcmluZ2lkID0gMCwgbnJfZmxhZ3MsIG5yX3JlZzsKIAlj b25zdCBjaGFyICpwb3J0ID0gTlVMTDsKKwljb25zdCBjaGFyICp2cG5hbWUgPSBOVUxMOwogI2Rl ZmluZSBNQVhFUlJNU0cgODAKIAljaGFyIGVycm1zZ1tNQVhFUlJNU0ddID0gIiI7Ci0JZW51bSB7 IFBfU1RBUlQsIFBfUk5HU0ZYT0ssIFBfR0VUTlVNLCBQX0ZMQUdTLCBQX0ZMQUdTT0sgfSBwX3N0 YXRlOworCWVudW0geyBQX1NUQVJULCBQX1JOR1NGWE9LLCBQX0dFVE5VTSwgUF9GTEFHUywgUF9G TEFHU09LLCBQX01FTUlEIH0gcF9zdGF0ZTsKKwlpbnQgaXNfdmFsZTsKIAlsb25nIG51bTsKKwl1 aW50MTZfdCBucl9hcmcyID0gMDsKIAotCWlmIChzdHJuY21wKGlmbmFtZSwgIm5ldG1hcDoiLCA3 KSAmJiBzdHJuY21wKGlmbmFtZSwgInZhbGUiLCA0KSkgeworCWlmIChzdHJuY21wKGlmbmFtZSwg Im5ldG1hcDoiLCA3KSAmJgorCQkJc3RybmNtcChpZm5hbWUsIE5NX0JER19OQU1FLCBzdHJsZW4o Tk1fQkRHX05BTUUpKSkgewogCQllcnJubyA9IDA7IC8qIG5hbWUgbm90IHJlY29nbmlzZWQsIG5v dCBhbiBlcnJvciAqLwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKGlmbmFtZVswXSA9PSAnbicp CisKKwlpc192YWxlID0gKGlmbmFtZVswXSA9PSAndicpOworCWlmIChpc192YWxlKSB7CisJCXBv cnQgPSBpbmRleChpZm5hbWUsICc6Jyk7CisJCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJCXNucHJp bnRmKGVycm1zZywgTUFYRVJSTVNHLAorCQkJCSAibWlzc2luZyAnOicgaW4gdmFsZSBuYW1lIik7 CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlpZiAoIW5tX2lzX2lkZW50aWZpZXIoaWZuYW1lICsg NCwgcG9ydCkpIHsKKwkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAiaW52YWxpZCBicmlk Z2UgbmFtZSIpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJdnBuYW1lID0gKytwb3J0OworCX0g ZWxzZSB7CiAJCWlmbmFtZSArPSA3OworCQlwb3J0ID0gaWZuYW1lOworCX0KKwogCS8qIHNjYW4g Zm9yIGEgc2VwYXJhdG9yICovCi0JZm9yIChwb3J0ID0gaWZuYW1lOyAqcG9ydCAmJiAhaW5kZXgo Ii0qXnt9LyIsICpwb3J0KTsgcG9ydCsrKQorCWZvciAoOyAqcG9ydCAmJiAhaW5kZXgoIi0qXnt9 L0AiLCAqcG9ydCk7IHBvcnQrKykKIAkJOworCisJaWYgKGlzX3ZhbGUgJiYgIW5tX2lzX2lkZW50 aWZpZXIodnBuYW1lLCBwb3J0KSkgeworCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgImlu dmFsaWQgYnJpZGdlIHBvcnQgbmFtZSIpOworCQlnb3RvIGZhaWw7CisJfQorCiAJbmFtZWxlbiA9 IHBvcnQgLSBpZm5hbWU7CiAJaWYgKG5hbWVsZW4gPj0gc2l6ZW9mKGQtPnJlcS5ucl9uYW1lKSkg ewogCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgIm5hbWUgdG9vIGxvbmciKTsKQEAgLTQw Nyw2ICs3MDgsOSBAQAogCQkJY2FzZSAnLyc6IC8qIHN0YXJ0IG9mIGZsYWdzICovCiAJCQkJcF9z dGF0ZSA9IFBfRkxBR1M7CiAJCQkJYnJlYWs7CisJCQljYXNlICdAJzogLyogc3RhcnQgb2YgbWVt aWQgKi8KKwkJCQlwX3N0YXRlID0gUF9NRU1JRDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJ CQkJc25wcmludGYoZXJybXNnLCBNQVhFUlJNU0csICJ1bmtub3duIG1vZGlmaWVyOiAnJWMnIiwg KnBvcnQpOwogCQkJCWdvdG8gZmFpbDsKQEAgLTQxOCw2ICs3MjIsOSBAQAogCQkJY2FzZSAnLyc6 CiAJCQkJcF9zdGF0ZSA9IFBfRkxBR1M7CiAJCQkJYnJlYWs7CisJCQljYXNlICdAJzoKKwkJCQlw X3N0YXRlID0gUF9NRU1JRDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJc25wcmludGYo ZXJybXNnLCBNQVhFUlJNU0csICJ1bmV4cGVjdGVkIGNoYXJhY3RlcjogJyVjJyIsICpwb3J0KTsK IAkJCQlnb3RvIGZhaWw7CkBAIC00MzYsNiArNzQzLDExIEBACiAJCQlicmVhazsKIAkJY2FzZSBQ X0ZMQUdTOgogCQljYXNlIFBfRkxBR1NPSzoKKwkJCWlmICgqcG9ydCA9PSAnQCcpIHsKKwkJCQlw b3J0Kys7CisJCQkJcF9zdGF0ZSA9IFBfTUVNSUQ7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlzd2l0 Y2ggKCpwb3J0KSB7CiAJCQljYXNlICd4JzoKIAkJCQlucl9mbGFncyB8PSBOUl9FWENMVVNJVkU7 CkBAIC00NDksNiArNzYxLDEyIEBACiAJCQljYXNlICdyJzoKIAkJCQlucl9mbGFncyB8PSBOUl9N T05JVE9SX1JYOwogCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJbnJfZmxhZ3MgfD0gTlJf UlhfUklOR1NfT05MWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCW5yX2ZsYWdzIHw9 IE5SX1RYX1JJTkdTX09OTFk7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXNucHJpbnRm KGVycm1zZywgTUFYRVJSTVNHLCAidW5yZWNvZ25pemVkIGZsYWc6ICclYyciLCAqcG9ydCk7CiAJ CQkJZ290byBmYWlsOwpAQCAtNDU2LDEyICs3NzQsMzAgQEAKIAkJCXBvcnQrKzsKIAkJCXBfc3Rh dGUgPSBQX0ZMQUdTT0s7CiAJCQlicmVhazsKKwkJY2FzZSBQX01FTUlEOgorCQkJaWYgKG5yX2Fy ZzIgIT0gMCkgeworCQkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAiZG91YmxlIHNldHRp bmcgb2YgbWVtaWQiKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQludW0gPSBzdHJ0b2wocG9y dCwgKGNoYXIgKiopJnBvcnQsIDEwKTsKKwkJCWlmIChudW0gPD0gMCkgeworCQkJCXNucHJpbnRm KGVycm1zZywgTUFYRVJSTVNHLCAiaW52YWxpZCBtZW1pZCAlbGQsIG11c3QgYmUgPjAiLCBudW0p OworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCW5yX2FyZzIgPSBudW07CisJCQlwX3N0YXRlID0g UF9STkdTRlhPSzsKKwkJCWJyZWFrOwogCQl9CiAJfQogCWlmIChwX3N0YXRlICE9IFBfU1RBUlQg JiYgcF9zdGF0ZSAhPSBQX1JOR1NGWE9LICYmIHBfc3RhdGUgIT0gUF9GTEFHU09LKSB7CiAJCXNu cHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAidW5leHBlY3RlZCBlbmQgb2YgcG9ydCBuYW1lIik7 CiAJCWdvdG8gZmFpbDsKIAl9CisJaWYgKChucl9mbGFncyAmIE5SX1pDT1BZX01PTikgJiYKKwkg ICAhKG5yX2ZsYWdzICYgKE5SX01PTklUT1JfVFh8TlJfTU9OSVRPUl9SWCkpKSB7CisJCXNucHJp bnRmKGVycm1zZywgTUFYRVJSTVNHLCAiJ3onIHVzZWQgYnV0IG5laXRoZXIgJ3InLCBub3IgJ3Qn IGZvdW5kIik7CisJCWdvdG8gZmFpbDsKKwl9CiAJTkQoImZsYWdzOiAlcyAlcyAlcyAlcyIsCiAJ CQkobnJfZmxhZ3MgJiBOUl9FWENMVVNJVkUpID8gIkVYQ0xVU0lWRSIgOiAiIiwKIAkJCShucl9m bGFncyAmIE5SX1pDT1BZX01PTikgPyAiWkNPUFlfTU9OIiA6ICIiLApAQCAtNDc0LDcgKzgxMCw3 IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlkLT5zZWxmID0gZDsJLyogc2V0IHRoaXMgZWFybHkg c28gbm1fY2xvc2UoKSB3b3JrcyAqLwotCWQtPmZkID0gb3BlbigiL2Rldi9uZXRtYXAiLCBPX1JE V1IpOworCWQtPmZkID0gb3BlbihORVRNQVBfREVWSUNFX05BTUUsIE9fUkRXUik7CiAJaWYgKGQt PmZkIDwgMCkgewogCQlzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgImNhbm5vdCBvcGVuIC9k ZXYvbmV0bWFwOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CiAJCWdvdG8gZmFpbDsKQEAgLTQ4Nyw3 ICs4MjMsOSBAQAogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBvdmVycmlkZGVuIGJ5IGlmbmFtZSBh bmQgZmxhZ3MgcHJvY2Vzc2luZyAqLwogCWQtPnJlcS5ucl9yaW5naWQgfD0gbnJfcmluZ2lkOwot CWQtPnJlcS5ucl9mbGFncyA9IG5yX2ZsYWdzOworCWQtPnJlcS5ucl9mbGFncyB8PSBucl9mbGFn czsKKwlpZiAobnJfYXJnMikKKwkJZC0+cmVxLm5yX2FyZzIgPSBucl9hcmcyOwogCW1lbWNweShk LT5yZXEubnJfbmFtZSwgaWZuYW1lLCBuYW1lbGVuKTsKIAlkLT5yZXEubnJfbmFtZVtuYW1lbGVu XSA9ICdcMCc7CiAJLyogb3B0aW9uYWxseSBpbXBvcnQgaW5mbyBmcm9tIHBhcmVudCAqLwpAQCAt NTI5LDMxICs4NjcsMTAgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWlmIChJU19ORVRNQVBfREVT QyhwYXJlbnQpICYmIHBhcmVudC0+bWVtICYmCi0JICAgIHBhcmVudC0+cmVxLm5yX2FyZzIgPT0g ZC0+cmVxLm5yX2FyZzIpIHsKLQkJLyogZG8gbm90IG1tYXAsIGluaGVyaXQgZnJvbSBwYXJlbnQg Ki8KLQkJZC0+bWVtc2l6ZSA9IHBhcmVudC0+bWVtc2l6ZTsKLQkJZC0+bWVtID0gcGFyZW50LT5t ZW07Ci0JfSBlbHNlIHsKLQkJLyogWFhYIFRPRE86IGNoZWNrIGlmIG1lbXNpemUgaXMgdG9vIGxh cmdlIChvciB0aGVyZSBpcyBvdmVyZmxvdykgKi8KLQkJZC0+bWVtc2l6ZSA9IGQtPnJlcS5ucl9t ZW1zaXplOwotCQlkLT5tZW0gPSBtbWFwKDAsIGQtPm1lbXNpemUsIFBST1RfV1JJVEUgfCBQUk9U X1JFQUQsIE1BUF9TSEFSRUQsCi0JCQkJZC0+ZmQsIDApOwotCQlpZiAoZC0+bWVtID09IE1BUF9G QUlMRUQpIHsKLQkJCXNucHJpbnRmKGVycm1zZywgTUFYRVJSTVNHLCAibW1hcCBmYWlsZWQ6ICVz Iiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCQlkLT5kb25lX21tYXAg PSAxOwotCX0KLQl7Ci0JCXN0cnVjdCBuZXRtYXBfaWYgKm5pZnAgPSBORVRNQVBfSUYoZC0+bWVt LCBkLT5yZXEubnJfb2Zmc2V0KTsKLQkJc3RydWN0IG5ldG1hcF9yaW5nICpyID0gTkVUTUFQX1JY UklORyhuaWZwLCApOwotCi0JCSooc3RydWN0IG5ldG1hcF9pZiAqKikodWludHB0cl90KSYoZC0+ bmlmcCkgPSBuaWZwOwotCQkqKHN0cnVjdCBuZXRtYXBfcmluZyAqKikodWludHB0cl90KSZkLT5z b21lX3JpbmcgPSByOwotCQkqKHZvaWQgKiopKHVpbnRwdHJfdCkmZC0+YnVmX3N0YXJ0ID0gTkVU TUFQX0JVRihyLCAwKTsKLQkJKih2b2lkICoqKSh1aW50cHRyX3QpJmQtPmJ1Zl9lbmQgPQotCQkJ KGNoYXIgKilkLT5tZW0gKyBkLT5tZW1zaXplOworICAgICAgICAvKiBpZiBwYXJlbnQgaXMgZGVm aW5lZCwgZG8gbm1fbW1hcCgpIGV2ZW4gaWYgTk1fT1BFTl9OT19NTUFQIGlzIHNldCAqLworCWlm ICgoIShuZXdfZmxhZ3MgJiBOTV9PUEVOX05PX01NQVApIHx8IHBhcmVudCkgJiYgbm1fbW1hcChk LCBwYXJlbnQpKSB7CisJICAgICAgICBzbnByaW50ZihlcnJtc2csIE1BWEVSUk1TRywgIm1tYXAg ZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gZmFpbDsKIAl9CiAKIAlucl9y ZWcgPSBkLT5yZXEubnJfZmxhZ3MgJiBOUl9SRUdfTUFTSzsKQEAgLTYyNiwxNCArOTQzLDU0IEBA CiAJCXJldHVybiBFSU5WQUw7CiAJaWYgKGQtPmRvbmVfbW1hcCAmJiBkLT5tZW0pCiAJCW11bm1h cChkLT5tZW0sIGQtPm1lbXNpemUpOwotCWlmIChkLT5mZCAhPSAtMSkKKwlpZiAoZC0+ZmQgIT0g LTEpIHsKIAkJY2xvc2UoZC0+ZmQpOworCX0KKwogCWJ6ZXJvKGQsIHNpemVvZigqZCkpOwogCWZy ZWUoZCk7CiAJcmV0dXJuIDA7CiB9CiAKIAorc3RhdGljIGludAorbm1fbW1hcChzdHJ1Y3Qgbm1f ZGVzYyAqZCwgY29uc3Qgc3RydWN0IG5tX2Rlc2MgKnBhcmVudCkKK3sKKwkvL1hYWCBUT0RPOiBj aGVjayBpZiBtbWFwIGlzIGFscmVhZHkgZG9uZQorCisJaWYgKElTX05FVE1BUF9ERVNDKHBhcmVu dCkgJiYgcGFyZW50LT5tZW0gJiYKKwkgICAgcGFyZW50LT5yZXEubnJfYXJnMiA9PSBkLT5yZXEu bnJfYXJnMikgeworCQkvKiBkbyBub3QgbW1hcCwgaW5oZXJpdCBmcm9tIHBhcmVudCAqLworCQlE KCJkbyBub3QgbW1hcCwgaW5oZXJpdCBmcm9tIHBhcmVudCIpOworCQlkLT5tZW1zaXplID0gcGFy ZW50LT5tZW1zaXplOworCQlkLT5tZW0gPSBwYXJlbnQtPm1lbTsKKwl9IGVsc2UgeworCQkvKiBY WFggVE9ETzogY2hlY2sgaWYgbWVtc2l6ZSBpcyB0b28gbGFyZ2UgKG9yIHRoZXJlIGlzIG92ZXJm bG93KSAqLworCQlkLT5tZW1zaXplID0gZC0+cmVxLm5yX21lbXNpemU7CisJCWQtPm1lbSA9IG1t YXAoMCwgZC0+bWVtc2l6ZSwgUFJPVF9XUklURSB8IFBST1RfUkVBRCwgTUFQX1NIQVJFRCwKKwkJ CQlkLT5mZCwgMCk7CisJCWlmIChkLT5tZW0gPT0gTUFQX0ZBSUxFRCkgeworCQkJZ290byBmYWls OworCQl9CisJCWQtPmRvbmVfbW1hcCA9IDE7CisJfQorCXsKKwkJc3RydWN0IG5ldG1hcF9pZiAq bmlmcCA9IE5FVE1BUF9JRihkLT5tZW0sIGQtPnJlcS5ucl9vZmZzZXQpOworCQlzdHJ1Y3QgbmV0 bWFwX3JpbmcgKnIgPSBORVRNQVBfUlhSSU5HKG5pZnAsICk7CisKKwkJKihzdHJ1Y3QgbmV0bWFw X2lmICoqKSh1aW50cHRyX3QpJihkLT5uaWZwKSA9IG5pZnA7CisJCSooc3RydWN0IG5ldG1hcF9y aW5nICoqKSh1aW50cHRyX3QpJmQtPnNvbWVfcmluZyA9IHI7CisJCSoodm9pZCAqKikodWludHB0 cl90KSZkLT5idWZfc3RhcnQgPSBORVRNQVBfQlVGKHIsIDApOworCQkqKHZvaWQgKiopKHVpbnRw dHJfdCkmZC0+YnVmX2VuZCA9CisJCQkoY2hhciAqKWQtPm1lbSArIGQtPm1lbXNpemU7CisJfQor CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcmV0dXJuIEVJTlZBTDsKK30KKwogLyoKICAqIFNhbWUg cHJvdG90eXBlIGFzIHBjYXBfaW5qZWN0KCksIG9ubHkgbmVlZCB0byBjYXN0LgogICovCkBAIC02 NzQsNiArMTAzMSw5IEBACiB7CiAJaW50IG4gPSBkLT5sYXN0X3J4X3JpbmcgLSBkLT5maXJzdF9y eF9yaW5nICsgMTsKIAlpbnQgYywgZ290ID0gMCwgcmkgPSBkLT5jdXJfcnhfcmluZzsKKwlkLT5o ZHIuYnVmID0gTlVMTDsKKwlkLT5oZHIuZmxhZ3MgPSBOTV9NT1JFX1BLVFM7CisJZC0+aGRyLmQg PSBkOwogCiAJaWYgKGNudCA9PSAwKQogCQljbnQgPSAtMTsKQEAgLTY5MCwxNyArMTA1MCwyNCBA QAogCQkJcmkgPSBkLT5maXJzdF9yeF9yaW5nOwogCQlyaW5nID0gTkVUTUFQX1JYUklORyhkLT5u aWZwLCByaSk7CiAJCWZvciAoIDsgIW5tX3JpbmdfZW1wdHkocmluZykgJiYgY250ICE9IGdvdDsg Z290KyspIHsKLQkJCXVfaW50IGkgPSByaW5nLT5jdXI7Ci0JCQl1X2ludCBpZHggPSByaW5nLT5z bG90W2ldLmJ1Zl9pZHg7Ci0JCQl1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKilORVRNQVBfQlVGKHJp bmcsIGlkeCk7Ci0KKwkJCXVfaW50IGlkeCwgaTsKKwkJCWlmIChkLT5oZHIuYnVmKSB7IC8qIGZy b20gcHJldmlvdXMgcm91bmQgKi8KKwkJCQljYihhcmcsICZkLT5oZHIsIGQtPmhkci5idWYpOwor CQkJfQorCQkJaSA9IHJpbmctPmN1cjsKKwkJCWlkeCA9IHJpbmctPnNsb3RbaV0uYnVmX2lkeDsK KwkJCWQtPmhkci5zbG90ID0gJnJpbmctPnNsb3RbaV07CisJCQlkLT5oZHIuYnVmID0gKHVfY2hh ciAqKU5FVE1BUF9CVUYocmluZywgaWR4KTsKIAkJCS8vIF9fYnVpbHRpbl9wcmVmZXRjaChidWYp OwogCQkJZC0+aGRyLmxlbiA9IGQtPmhkci5jYXBsZW4gPSByaW5nLT5zbG90W2ldLmxlbjsKIAkJ CWQtPmhkci50cyA9IHJpbmctPnRzOwotCQkJY2IoYXJnLCAmZC0+aGRyLCBidWYpOwogCQkJcmlu Zy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4dChyaW5nLCBpKTsKIAkJfQogCX0KKwlp ZiAoZC0+aGRyLmJ1ZikgeyAvKiBmcm9tIHByZXZpb3VzIHJvdW5kICovCisJCWQtPmhkci5mbGFn cyA9IDA7CisJCWNiKGFyZywgJmQtPmhkciwgZC0+aGRyLmJ1Zik7CisJfQogCWQtPmN1cl9yeF9y aW5nID0gcmk7CiAJcmV0dXJuIGdvdDsKIH0KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3N5cy9uZXQv bmV0bWFwX3ZpcnQuaCAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcF92aXJ0LmgKLS0tIHVzci9zcmMv c3lzL25ldC9uZXRtYXBfdmlydC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKyAvdXNyL3NyYy9zeXMvbmV0L25ldG1hcF92aXJ0LmgJMjAxNi0xMS0yMyAxNjo1Nzo1Ny44 NTg5MjQwMDAgKzAwMDAKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw MTMtMjAxNiBMdWlnaSBSaXp6bworICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgR2l1c2VwcGUg TGV0dGllcmkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IFZpbmNlbnpvIE1hZmZpb25lCisg KiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhCisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog ICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog U1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBORVRNQVBfVklS VF9ICisjZGVmaW5lIE5FVE1BUF9WSVJUX0gKKworLyoKKyAqIHB0bmV0bWFwX21lbWRldjogZGV2 aWNlIHVzZWQgdG8gZXhwb3NlIG1lbW9yeSBpbnRvIHRoZSBndWVzdCBWTQorICoKKyAqIFRoZXNl IG1hY3JvcyBhcmUgdXNlZCBpbiB0aGUgaHlwZXJ2aXNvciBmcm9udGVuZCAoUUVNVSwgYmh5dmUp IGFuZCBpbiB0aGUKKyAqIGd1ZXN0IGRldmljZSBkcml2ZXIuCisgKi8KKworLyogUENJIGlkZW50 aWZpZXJzIGFuZCBQQ0kgQkFScyBmb3IgdGhlIHB0bmV0bWFwIG1lbWRldgorICogYW5kIHB0bmV0 bWFwIG5ldHdvcmsgaW50ZXJmYWNlLiAqLworI2RlZmluZSBQVE5FVE1BUF9NRU1ERVZfTkFNRSAg ICAgICAgICAgICJwdG5ldG1hcC1tZW1kZXYiCisjZGVmaW5lIFBUTkVUTUFQX1BDSV9WRU5ET1Jf SUQgICAgICAgICAgMHgxYjM2ICAvKiBRRU1VIHZpcnR1YWwgZGV2aWNlcyAqLworI2RlZmluZSBQ VE5FVE1BUF9QQ0lfREVWSUNFX0lEICAgICAgICAgIDB4MDAwYyAgLyogbWVtb3J5IGRldmljZSAq LworI2RlZmluZSBQVE5FVE1BUF9QQ0lfTkVUSUZfSUQgICAgICAgICAgIDB4MDAwZCAgLyogcHRu ZXQgbmV0d29yayBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUFRORVRNQVBfSU9fUENJX0JBUiAgICAg ICAgICAgICAwCisjZGVmaW5lIFBUTkVUTUFQX01FTV9QQ0lfQkFSICAgICAgICAgICAgMQorI2Rl ZmluZSBQVE5FVE1BUF9NU0lYX1BDSV9CQVIgICAgICAgICAgIDIKKworLyogUmVnaXN0ZXJzIGZv ciB0aGUgcHRuZXRtYXAgbWVtZGV2ICovCisjZGVmaW5lIFBUTkVUX01ERVZfSU9fTUVNU0laRV9M TwkwCS8qIG5ldG1hcCBtZW1vcnkgc2l6ZSAobG93KSAqLworI2RlZmluZSBQVE5FVF9NREVWX0lP X01FTVNJWkVfSEkJNAkvKiBuZXRtYXBfbWVtb3J5X3NpemUgKGhpZ2gpICovCisjZGVmaW5lIFBU TkVUX01ERVZfSU9fTUVNSUQJCTgJLyogbWVtb3J5IGFsbG9jYXRvciBJRCBpbiB0aGUgaG9zdCAq LworI2RlZmluZSBQVE5FVF9NREVWX0lPX0lGX1BPT0xfT0ZTCTY0CisjZGVmaW5lIFBUTkVUX01E RVZfSU9fSUZfUE9PTF9PQkpOVU0JNjgKKyNkZWZpbmUgUFRORVRfTURFVl9JT19JRl9QT09MX09C SlNaCTcyCisjZGVmaW5lIFBUTkVUX01ERVZfSU9fUklOR19QT09MX09GUwk3NgorI2RlZmluZSBQ VE5FVF9NREVWX0lPX1JJTkdfUE9PTF9PQkpOVU0JODAKKyNkZWZpbmUgUFRORVRfTURFVl9JT19S SU5HX1BPT0xfT0JKU1oJODQKKyNkZWZpbmUgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PRlMJODgK KyNkZWZpbmUgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PQkpOVU0JOTIKKyNkZWZpbmUgUFRORVRf TURFVl9JT19CVUZfUE9PTF9PQkpTWgk5NgorI2RlZmluZSBQVE5FVF9NREVWX0lPX0VORAkJMTAw CisKKy8qCisgKiBwdG5ldG1hcCBjb25maWd1cmF0aW9uCisgKgorICogVGhlIHB0bmV0IGt0aHJl YWRzIChydW5uaW5nIGluIGhvc3Qga2VybmVsLXNwYWNlKSBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQK KyAqIGluIG9yZGVyIHRvIGtub3cgaG93IHRvIGludGVyY2VwdCBndWVzdCBraWNrcyAoSS9PIHJl Z2lzdGVyIHdyaXRlcykgYW5kCisgKiBob3cgdG8gaW5qZWN0IE1TSS1YIGludGVycnVwdHMgdG8g dGhlIGd1ZXN0LiBUaGUgY29uZmlndXJhdGlvbiBtYXkgdmFyeQorICogZGVwZW5kaW5nIG9uIHRo ZSBoeXBlcnZpc29yLiBDdXJyZW50bHksIHdlIHN1cHBvcnQgUUVNVS9LVk0gb24gTGludXggYW5k CisgKiBhbmQgYmh5dmUgb24gRnJlZUJTRC4KKyAqIFRoZSBjb25maWd1cmF0aW9uIGlzIHBhc3Nl ZCBieSB0aGUgaHlwZXJ2aXNvciB0byB0aGUgaG9zdCBuZXRtYXAgbW9kdWxlCisgKiBieSBtZWFu cyBvZiBhbiBpb2N0bCgpIHdpdGggbnJfY21kPU5FVE1BUF9QVF9IT1NUX0NSRUFURSwgYW5kIGl0 IGlzCisgKiBzcGVjaWZpZWQgYnkgdGhlIHB0bmV0bWFwX2NmZyBzdHJ1Y3QuIFRoaXMgc3RydWN0 IGNvbnRhaW5zIGFuIGhlYWRlcgorICogd2l0aCBnZW5lcmFsIGluZm9ybWF0aW9ucyBhbmQgYW4g YXJyYXkgb2YgZW50cmllcyB3aG9zZSBzaXplIGRlcGVuZHMKKyAqIG9uIHRoZSBoeXBlcnZpc29y LiBUaGUgTkVUTUFQX1BUX0hPU1RfQ1JFQVRFIGNvbW1hbmQgaXMgaXNzdWVkIGV2ZXJ5CisgKiB0 aW1lIHRoZSBrdGhyZWFkcyBhcmUgc3RhcnRlZC4KKyAqLworc3RydWN0IHB0bmV0bWFwX2NmZyB7 CisjZGVmaW5lIFBUTkVUTUFQX0NGR1RZUEVfUUVNVQkJMHgxCisjZGVmaW5lIFBUTkVUTUFQX0NG R1RZUEVfQkhZVkUJCTB4MgorCXVpbnQxNl90IGNmZ3R5cGU7CS8qIGhvdyB0byBpbnRlcnByZXQg dGhlIGNmZyBlbnRyaWVzICovCisJdWludDE2X3QgZW50cnlfc2l6ZTsJLyogc2l6ZSBvZiBhIGNv bmZpZyBlbnRyeSAqLworCXVpbnQzMl90IG51bV9yaW5nczsJLyogbnVtYmVyIG9mIGNvbmZpZyBl bnRyaWVzICovCisJdm9pZCAqcHRyaW5nczsJCS8qIHB0cmluZ3MgaW5zaWRlIENTQiAqLworCS8q IENvbmZpZ3VyYXRpb24gZW50cmllcyBhcmUgYWxsb2NhdGVkIHJpZ2h0IGFmdGVyIHRoZSBzdHJ1 Y3QuICovCit9OworCisvKiBDb25maWd1cmF0aW9uIG9mIGEgcHRuZXRtYXAgcmluZyBmb3IgUUVN VS4gKi8KK3N0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9xZW11IHsKKwl1aW50MzJfdCBpb2V2ZW50 ZmQ7CS8qIHRvIGludGVyY2VwdCBndWVzdCByZWdpc3RlciBhY2Nlc3MgKi8KKwl1aW50MzJfdCBp cnFmZDsJCS8qIHRvIGluamVjdCBndWVzdCBpbnRlcnJ1cHRzICovCit9OworCisvKiBDb25maWd1 cmF0aW9uIG9mIGEgcHRuZXRtYXAgcmluZyBmb3IgYmh5dmUuICovCitzdHJ1Y3QgcHRuZXRtYXBf Y2ZnZW50cnlfYmh5dmUgeworCXVpbnQ2NF90IHdjaGFuOwkJLyogdHNsZWVwKCkgcGFyYW1ldGVy LCB0byB3YWtlIHVwIGt0aHJlYWQgKi8KKwl1aW50MzJfdCBpb2N0bF9mZDsJLyogaW9jdGwgZmQg Ki8KKwkvKiBpb2N0bCBwYXJhbWV0ZXJzIHRvIHNlbmQgaXJxICovCisJdWludDMyX3QgaW9jdGxf Y21kOworCS8qIHZtbS5rbyBNU0lYIHBhcmFtZXRlcnMgZm9yIElPQ1RMICovCisJc3RydWN0IHsK KwkJdWludDY0X3QgICAgICAgIG1zZ19kYXRhOworCQl1aW50NjRfdCAgICAgICAgYWRkcjsKKwl9 IGlvY3RsX2RhdGE7Cit9OworCisvKgorICogU3RydWN0dXJlIGZpbGxlZC1pbiBieSB0aGUga2Vy bmVsIHdoZW4gYXNrZWQgZm9yIGFsbG9jYXRvciBpbmZvCisgKiB0aHJvdWdoIE5FVE1BUF9QT09M U19JTkZPX0dFVC4gVXNlZCBieSBoeXBlcnZpc29ycyBzdXBwb3J0aW5nCisgKiBwdG5ldG1hcC4K KyAqLworc3RydWN0IG5ldG1hcF9wb29sc19pbmZvIHsKKwl1aW50NjRfdCBtZW1zaXplOwkvKiBz YW1lIGFzIG5tci0+bnJfbWVtc2l6ZSAqLworCXVpbnQzMl90IG1lbWlkOwkJLyogc2FtZSBhcyBu bXItPm5yX2FyZzIgKi8KKwl1aW50MzJfdCBpZl9wb29sX29mZnNldDsKKwl1aW50MzJfdCBpZl9w b29sX29ianRvdGFsOworCXVpbnQzMl90IGlmX3Bvb2xfb2Jqc2l6ZTsKKwl1aW50MzJfdCByaW5n X3Bvb2xfb2Zmc2V0OworCXVpbnQzMl90IHJpbmdfcG9vbF9vYmp0b3RhbDsKKwl1aW50MzJfdCBy aW5nX3Bvb2xfb2Jqc2l6ZTsKKwl1aW50MzJfdCBidWZfcG9vbF9vZmZzZXQ7CisJdWludDMyX3Qg YnVmX3Bvb2xfb2JqdG90YWw7CisJdWludDMyX3QgYnVmX3Bvb2xfb2Jqc2l6ZTsKK307CisKKy8q CisgKiBQYXNzIGEgcG9pbnRlciB0byBhIHVzZXJzcGFjZSBidWZmZXIgdG8gYmUgcGFzc2VkIHRv IGtlcm5lbHNwYWNlIGZvciB3cml0ZQorICogb3IgcmVhZC4gVXNlZCBieSBORVRNQVBfUFRfSE9T VF9DUkVBVEUgYW5kIE5FVE1BUF9QT09MU19JTkZPX0dFVC4KKyAqLworc3RhdGljIGlubGluZSB2 b2lkCitubXJlcV9wb2ludGVyX3B1dChzdHJ1Y3Qgbm1yZXEgKm5tciwgdm9pZCAqdXNlcnB0cikK K3sKKwl1aW50cHRyX3QgKnBwID0gKHVpbnRwdHJfdCAqKSZubXItPm5yX2FyZzE7CisJKnBwID0g KHVpbnRwdHJfdCl1c2VycHRyOworfQorCisvKiBwdG5ldG1hcCBmZWF0dXJlcyAqLworI2RlZmlu ZSBQVE5FVE1BUF9GX1ZORVRfSERSICAgICAgICAxCisKKy8qIEkvTyByZWdpc3RlcnMgZm9yIHRo ZSBwdG5ldCBkZXZpY2UuICovCisjZGVmaW5lIFBUTkVUX0lPX1BURkVBVAkJMAorI2RlZmluZSBQ VE5FVF9JT19QVENUTAkJNAorI2RlZmluZSBQVE5FVF9JT19NQUNfTE8JCTgKKyNkZWZpbmUgUFRO RVRfSU9fTUFDX0hJCQkxMgorI2RlZmluZSBQVE5FVF9JT19DU0JCQUgJCTE2CisjZGVmaW5lIFBU TkVUX0lPX0NTQkJBTAkJMjAKKyNkZWZpbmUgUFRORVRfSU9fTklGUF9PRlMJMjQKKyNkZWZpbmUg UFRORVRfSU9fTlVNX1RYX1JJTkdTCTI4CisjZGVmaW5lIFBUTkVUX0lPX05VTV9SWF9SSU5HUwkz MgorI2RlZmluZSBQVE5FVF9JT19OVU1fVFhfU0xPVFMJMzYKKyNkZWZpbmUgUFRORVRfSU9fTlVN X1JYX1NMT1RTCTQwCisjZGVmaW5lIFBUTkVUX0lPX1ZORVRfSERSX0xFTgk0NAorI2RlZmluZSBQ VE5FVF9JT19IT1NUTUVNSUQJNDgKKyNkZWZpbmUgUFRORVRfSU9fRU5ECQk1MgorI2RlZmluZSBQ VE5FVF9JT19LSUNLX0JBU0UJMTI4CisjZGVmaW5lIFBUTkVUX0lPX01BU0sJCTB4ZmYKKworLyog cHRuZXRtYXAgY29udHJvbCBjb21tYW5kcyAodmFsdWVzIGZvciBQVENUTCByZWdpc3RlcikgKi8K KyNkZWZpbmUgUFRORVRNQVBfUFRDVExfQ1JFQVRFCQkxCisjZGVmaW5lIFBUTkVUTUFQX1BUQ1RM X0RFTEVURQkJMgorCisvKiBJZiBkZWZpbmVkLCBDU0IgaXMgYWxsb2NhdGVkIGJ5IHRoZSBndWVz dCwgbm90IGJ5IHRoZSBob3N0LiAqLworI2RlZmluZSBQVE5FVF9DU0JfQUxMT0MKKworLyogcHRu ZXRtYXAgcmluZyBmaWVsZHMgc2hhcmVkIGJldHdlZW4gZ3Vlc3QgYW5kIGhvc3QgKi8KK3N0cnVj dCBwdG5ldF9yaW5nIHsKKwkvKiBYWFggcmV2aXNlIHRoZSBsYXlvdXQgdG8gbWluaW1pemUgY2Fj aGUgYm91bmNlcy4gKi8KKwl1aW50MzJfdCBoZWFkOwkJICAvKiBHVysgSFIrIHRoZSBoZWFkIG9m IHRoZSBndWVzdCBuZXRtYXBfcmluZyAqLworCXVpbnQzMl90IGN1cjsJCSAgLyogR1crIEhSKyB0 aGUgY3VyIG9mIHRoZSBndWVzdCBuZXRtYXBfcmluZyAqLworCXVpbnQzMl90IGd1ZXN0X25lZWRf a2ljazsgLyogR1crIEhSKyBob3N0LS0+Z3Vlc3Qgbm90aWZpY2F0aW9uIGVuYWJsZSAqLworCXVp bnQzMl90IHN5bmNfZmxhZ3M7CSAgLyogR1crIEhSKyB0aGUgZmxhZ3Mgb2YgdGhlIGd1ZXN0IFt0 eHxyeF1zeW5jKCkgKi8KKwl1aW50MzJfdCBod2N1cjsJCSAgLyogR1IrIEhXKyB0aGUgaHdjdXIg b2YgdGhlIGhvc3QgbmV0bWFwX2tyaW5nICovCisJdWludDMyX3QgaHd0YWlsOwkgIC8qIEdSKyBI VysgdGhlIGh3dGFpbCBvZiB0aGUgaG9zdCBuZXRtYXBfa3JpbmcgKi8KKwl1aW50MzJfdCBob3N0 X25lZWRfa2ljazsgIC8qIEdSKyBIVysgZ3Vlc3QtLT5ob3N0IG5vdGlmaWNhdGlvbiBlbmFibGUg Ki8KKwljaGFyIHBhZFs0XTsKK307CisKKy8qIENTQiBmb3IgdGhlIHB0bmV0IGRldmljZS4gKi8K K3N0cnVjdCBwdG5ldF9jc2IgeworI2RlZmluZSBORVRNQVBfVklSVF9DU0JfU0laRSAgIDQwOTYK KwlzdHJ1Y3QgcHRuZXRfcmluZyByaW5nc1tORVRNQVBfVklSVF9DU0JfU0laRS9zaXplb2Yoc3Ry dWN0IHB0bmV0X3JpbmcpXTsKK307CisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0dVRVNUCisKKy8q IHB0bmV0bWFwX21lbWRldiByb3V0aW5lcyB1c2VkIHRvIHRhbGsgd2l0aCBwdG5ldG1hcF9tZW1k ZXYgZGV2aWNlIGRyaXZlciAqLworc3RydWN0IHB0bmV0bWFwX21lbWRldjsKK2ludCBubV9vc19w dF9tZW1kZXZfaW9tYXAoc3RydWN0IHB0bmV0bWFwX21lbWRldiAqLCB2bV9wYWRkcl90ICosIHZv aWQgKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICopOwordm9pZCBubV9v c19wdF9tZW1kZXZfaW91bm1hcChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICopOwordWludDMyX3Qg bm1fb3NfcHRfbWVtZGV2X2lvcmVhZChzdHJ1Y3QgcHRuZXRtYXBfbWVtZGV2ICosIHVuc2lnbmVk IGludCk7CisKKy8qIEd1ZXN0IGRyaXZlcjogV3JpdGUga3JpbmcgcG9pbnRlcnMgKGN1ciwgaGVh ZCkgdG8gdGhlIENTQi4KKyAqIFRoaXMgcm91dGluZSBpcyBjb3VwbGVkIHdpdGggcHRuZXRtYXBf aG9zdF9yZWFkX2tyaW5nX2NzYigpLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwdG5ldG1hcF9n dWVzdF93cml0ZV9rcmluZ19jc2Ioc3RydWN0IHB0bmV0X3JpbmcgKnB0ciwgdWludDMyX3QgY3Vy LAorCQkJICAgICAgIHVpbnQzMl90IGhlYWQpCit7CisgICAgLyoKKyAgICAgKiBXZSBuZWVkIHRv IHdyaXRlIGN1ciBhbmQgaGVhZCB0byB0aGUgQ1NCIGJ1dCB3ZSBjYW5ub3QgZG8gaXQgYXRvbWlj YWxseS4KKyAgICAgKiBUaGVyZSBpcyBubyB3YXkgd2UgY2FuIHByZXZlbnQgdGhlIGhvc3QgZnJv bSByZWFkaW5nIHRoZSB1cGRhdGVkIHZhbHVlCisgICAgICogb2Ygb25lIG9mIHRoZSB0d28gYW5k IHRoZSBvbGQgdmFsdWUgb2YgdGhlIG90aGVyLiBIb3dldmVyLCBpZiB3ZSBtYWtlCisgICAgICog c3VyZSB0aGF0IHRoZSBob3N0IG5ldmVyIHJlYWRzIGEgdmFsdWUgb2YgaGVhZCBtb3JlIHJlY2Vu dCB0aGFuIHRoZQorICAgICAqIHZhbHVlIG9mIGN1ciB3ZSBhcmUgc2FmZS4gV2UgY2FuIGFsbG93 IHRoZSBob3N0IHRvIHJlYWQgYSB2YWx1ZSBvZiBjdXIKKyAgICAgKiBtb3JlIHJlY2VudCB0aGFu IHRoZSB2YWx1ZSBvZiBoZWFkLCBzaW5jZSBpbiB0aGUgbmV0bWFwIHJpbmcgY3VyIGNhbiBiZQor ICAgICAqIGFoZWFkIG9mIGhlYWQgYW5kIGN1ciBjYW5ub3Qgd3JhcCBhcm91bmQgaGVhZCBiZWNh dXNlIGl0IG11c3QgYmUgYmVoaW5kCisgICAgICogdGFpbC4gSW52ZXJ0aW5nIHRoZSBvcmRlciBv ZiB3cml0ZXMgYmVsb3cgY291bGQgaW5zdGVhZCByZXN1bHQgaW50byB0aGUKKyAgICAgKiBob3N0 IHRvIHRoaW5rIGhlYWQgd2VudCBhaGVhZCBvZiBjdXIsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBz eW5jCisgICAgICogcHJvbG9ndWUgdG8gZmFpbC4KKyAgICAgKgorICAgICAqIFRoZSBmb2xsb3dp bmcgbWVtb3J5IGJhcnJpZXIgc2NoZW1lIGlzIHVzZWQgdG8gbWFrZSB0aGlzIGhhcHBlbjoKKyAg ICAgKgorICAgICAqICAgICAgICAgIEd1ZXN0ICAgICAgICAgICAgICBIb3N0CisgICAgICoKKyAg ICAgKiAgICAgICAgICBTVE9SRShjdXIpICAgICAgICAgTE9BRChoZWFkKQorICAgICAqICAgICAg ICAgIG1iKCkgPC0tLS0tLS0tLS0tPiBtYigpCisgICAgICogICAgICAgICAgU1RPUkUoaGVhZCkg ICAgICAgIExPQUQoY3VyKQorICAgICAqLworICAgIHB0ci0+Y3VyID0gY3VyOworICAgIG1iKCk7 CisgICAgcHRyLT5oZWFkID0gaGVhZDsKK30KKworLyogR3Vlc3QgZHJpdmVyOiBSZWFkIGtyaW5n IHBvaW50ZXJzIChod2N1ciwgaHd0YWlsKSBmcm9tIHRoZSBDU0IuCisgKiBUaGlzIHJvdXRpbmUg aXMgY291cGxlZCB3aXRoIHB0bmV0bWFwX2hvc3Rfd3JpdGVfa3JpbmdfY3NiKCkuICovCitzdGF0 aWMgaW5saW5lIHZvaWQKK3B0bmV0bWFwX2d1ZXN0X3JlYWRfa3JpbmdfY3NiKHN0cnVjdCBwdG5l dF9yaW5nICpwdHIsIHN0cnVjdCBuZXRtYXBfa3JpbmcgKmtyaW5nKQoreworICAgIC8qCisgICAg ICogV2UgcGxhY2UgYSBtZW1vcnkgYmFycmllciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdXBkYXRl IG9mIGh3dGFpbCBuZXZlcgorICAgICAqIG92ZXJ0YWtlcyB0aGUgdXBkYXRlIG9mIGh3Y3VyLgor ICAgICAqIChzZWUgZXhwbGFuYXRpb24gaW4gcHRuZXRtYXBfaG9zdF93cml0ZV9rcmluZ19jc2Ip LgorICAgICAqLworICAgIGtyaW5nLT5ucl9od3RhaWwgPSBwdHItPmh3dGFpbDsKKyAgICBtYigp OworICAgIGtyaW5nLT5ucl9od2N1ciA9IHB0ci0+aHdjdXI7Cit9CisKKyNlbmRpZiAvKiBXSVRI X1BUTkVUTUFQX0dVRVNUICovCisKKyNpZmRlZiBXSVRIX1BUTkVUTUFQX0hPU1QKKy8qCisgKiBw dG5ldG1hcCBrZXJuZWwgdGhyZWFkIHJvdXRpbmVzCisgKiAqLworCisvKiBGdW5jdGlvbnMgdG8g cmVhZCBhbmQgd3JpdGUgQ1NCIGZpZWxkcyBpbiB0aGUgaG9zdCAqLworI2lmIGRlZmluZWQgKGxp bnV4KQorI2RlZmluZSBDU0JfUkVBRChjc2IsIGZpZWxkLCByKSAoZ2V0X3VzZXIociwgJmNzYi0+ ZmllbGQpKQorI2RlZmluZSBDU0JfV1JJVEUoY3NiLCBmaWVsZCwgdikgKHB1dF91c2VyKHYsICZj c2ItPmZpZWxkKSkKKyNlbHNlICAvKiAhIGxpbnV4ICovCisjZGVmaW5lIENTQl9SRUFEKGNzYiwg ZmllbGQsIHIpIChyID0gZnV3b3JkMzIoJmNzYi0+ZmllbGQpKQorI2RlZmluZSBDU0JfV1JJVEUo Y3NiLCBmaWVsZCwgdikgKHN1d29yZDMyKCZjc2ItPmZpZWxkLCB2KSkKKyNlbmRpZiAvKiAhIGxp bnV4ICovCisKKy8qIEhvc3QgbmV0bWFwOiBXcml0ZSBrcmluZyBwb2ludGVycyAoaHdjdXIsIGh3 dGFpbCkgdG8gdGhlIENTQi4KKyAqIFRoaXMgcm91dGluZSBpcyBjb3VwbGVkIHdpdGggcHRuZXRt YXBfZ3Vlc3RfcmVhZF9rcmluZ19jc2IoKS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcHRuZXRt YXBfaG9zdF93cml0ZV9rcmluZ19jc2Ioc3RydWN0IHB0bmV0X3JpbmcgX191c2VyICpwdHIsIHVp bnQzMl90IGh3Y3VyLAorICAgICAgICB1aW50MzJfdCBod3RhaWwpCit7CisgICAgLyoKKyAgICAg KiBUaGUgc2FtZSBzY2hlbWUgdXNlZCBpbiBwdG5ldG1hcF9ndWVzdF93cml0ZV9rcmluZ19jc2Io KSBhcHBsaWVzIGhlcmUuCisgICAgICogV2UgYWxsb3cgdGhlIGd1ZXN0IHRvIHJlYWQgYSB2YWx1 ZSBvZiBod2N1ciBtb3JlIHJlY2VudCB0aGFuIHRoZSB2YWx1ZQorICAgICAqIG9mIGh3dGFpbCwg c2luY2UgdGhpcyB3b3VsZCBhbnl3YXkgcmVzdWx0IGluIGEgY29uc2lzdGVudCB2aWV3IG9mIHRo ZQorICAgICAqIHJpbmcgc3RhdGUgKGFuZCBod2N1ciBjYW4gbmV2ZXIgd3JhcGFyb3VuZCBod3Rh aWwsIHNpbmNlIGh3Y3VyIG11c3QgYmUKKyAgICAgKiBiZWhpbmQgaGVhZCkuCisgICAgICoKKyAg ICAgKiBUaGUgZm9sbG93aW5nIG1lbW9yeSBiYXJyaWVyIHNjaGVtZSBpcyB1c2VkIHRvIG1ha2Ug dGhpcyBoYXBwZW46CisgICAgICoKKyAgICAgKiAgICAgICAgICBHdWVzdCAgICAgICAgICAgICAg ICBIb3N0CisgICAgICoKKyAgICAgKiAgICAgICAgICBTVE9SRShod2N1cikgICAgICAgICBMT0FE KGh3dGFpbCkKKyAgICAgKiAgICAgICAgICBtYigpIDwtLS0tLS0tLS0tLS0tPiBtYigpCisgICAg ICogICAgICAgICAgU1RPUkUoaHd0YWlsKSAgICAgICAgTE9BRChod2N1cikKKyAgICAgKi8KKyAg ICBDU0JfV1JJVEUocHRyLCBod2N1ciwgaHdjdXIpOworICAgIG1iKCk7CisgICAgQ1NCX1dSSVRF KHB0ciwgaHd0YWlsLCBod3RhaWwpOworfQorCisvKiBIb3N0IG5ldG1hcDogUmVhZCBrcmluZyBw b2ludGVycyAoaGVhZCwgY3VyLCBzeW5jX2ZsYWdzKSBmcm9tIHRoZSBDU0IuCisgKiBUaGlzIHJv dXRpbmUgaXMgY291cGxlZCB3aXRoIHB0bmV0bWFwX2d1ZXN0X3dyaXRlX2tyaW5nX2NzYigpLiAq Lworc3RhdGljIGlubGluZSB2b2lkCitwdG5ldG1hcF9ob3N0X3JlYWRfa3JpbmdfY3NiKHN0cnVj dCBwdG5ldF9yaW5nIF9fdXNlciAqcHRyLAorCQkJICAgICBzdHJ1Y3QgbmV0bWFwX3JpbmcgKnNo YWRvd19yaW5nLAorCQkJICAgICB1aW50MzJfdCBudW1fc2xvdHMpCit7CisgICAgLyoKKyAgICAg KiBXZSBwbGFjZSBhIG1lbW9yeSBiYXJyaWVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1cGRhdGUg b2YgaGVhZCBuZXZlcgorICAgICAqIG92ZXJ0YWtlcyB0aGUgdXBkYXRlIG9mIGN1ci4KKyAgICAg KiAoc2VlIGV4cGxhbmF0aW9uIGluIHB0bmV0bWFwX2d1ZXN0X3dyaXRlX2tyaW5nX2NzYikuCisg ICAgICovCisgICAgQ1NCX1JFQUQocHRyLCBoZWFkLCBzaGFkb3dfcmluZy0+aGVhZCk7CisgICAg bWIoKTsKKyAgICBDU0JfUkVBRChwdHIsIGN1ciwgc2hhZG93X3JpbmctPmN1cik7CisgICAgQ1NC X1JFQUQocHRyLCBzeW5jX2ZsYWdzLCBzaGFkb3dfcmluZy0+ZmxhZ3MpOworfQorCisjZW5kaWYg LyogV0lUSF9QVE5FVE1BUF9IT1NUICovCisKKyNlbmRpZiAvKiBORVRNQVBfVklSVF9IICovCmRp ZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Ivc3JjLy5hcmNjb25maWcgL3Vzci9zcmMvdXNyL3NyYy8u YXJjY29uZmlnCi0tLSB1c3Ivc3JjL3Vzci9zcmMvLmFyY2NvbmZpZwkxOTcwLTAxLTAxIDAxOjAw OjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvdXNyL3NyYy8uYXJjY29uZmlnCTIwMTYt MDktMjkgMDA6MjY6MzYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNSBAQAoreworCSJyZXBv c2l0b3J5LmNhbGxzaWduIiA6ICJTIiwKKwkicGhhYnJpY2F0b3IudXJpIiA6ICJodHRwczovL3Jl dmlld3MuZnJlZWJzZC5vcmcvIiwKKwkiaGlzdG9yeS5pbW11dGFibGUiIDogdHJ1ZQorfQpkaWZm IC11IC1yIC1OIHVzci9zcmMvdXNyL3NyYy8uYXJjbGludCAvdXNyL3NyYy91c3Ivc3JjLy5hcmNs aW50Ci0tLSB1c3Ivc3JjL3Vzci9zcmMvLmFyY2xpbnQJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci9zcmMvLmFyY2xpbnQJMjAxNi0wOS0yOSAwMDoy NjozNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyNSBAQAoreworICAiZXhjbHVkZSI6ICIo Y29udHJpYnxjcnlwdG8pIiwKKyAgImxpbnRlcnMiOiB7CisgICAgInB5dGhvbiI6IHsKKyAgICAg ICJ0eXBlIjogInBlcDgiLAorICAgICAgImluY2x1ZGUiOiAiKFxcLnB5JCkiCisgICAgfSwKKyAg ICAic3BlbGxpbmciOiB7CisgICAgICAidHlwZSI6ICJzcGVsbGluZyIKKyAgICB9LAorICAgICJj aG1vZCI6IHsKKyAgICAgICJ0eXBlIjogImNobW9kIgorICAgIH0sCisgICAgIm1lcmdlLWNvbmZs aWN0IjogeworICAgICAgInR5cGUiOiAibWVyZ2UtY29uZmxpY3QiCisgICAgfSwKKyAgICAiZmls ZW5hbWUiOiB7CisgICAgICAidHlwZSI6ICJmaWxlbmFtZSIKKyAgICB9LAorICAgICJqc29uIjog eworICAgICAgInR5cGUiOiAianNvbiIsCisgICAgICAiaW5jbHVkZSI6ICIoXFwuYXJjbGludHxc XC5qc29uJCkiCisgICAgfQorICB9Cit9CmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9i aHl2ZS9NYWtlZmlsZSAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZQotLS0gdXNyL3Ny Yy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZQkyMDE2LTA5LTI5IDAwOjI1OjA3LjAwMDAwMDAwMCAr MDEwMAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvTWFrZWZpbGUJMjAxNi0xMS0zMCAxMDo1 NjowNS44MDcyNTAwMDAgKzAwMDAKQEAgLTI3LDYgKzI3LDggQEAKIAltZW0uYwkJCVwKIAltZXZl bnQuYwkJXAogCW1wdGJsLmMJCQlcCisJbmV0X2JhY2tlbmRzLmMJCVwKKwluZXRfdXRpbHMuYwkJ XAogCXBjaV9haGNpLmMJCVwKIAlwY2lfZW11bC5jCQlcCiAJcGNpX2ZidWYuYwkJXApAQCAtMzQs NiArMzYsOCBAQAogCXBjaV9pcnEuYwkJXAogCXBjaV9scGMuYwkJXAogCXBjaV9wYXNzdGhydS5j CQlcCisJcGNpX3B0bmV0bWFwX21lbWRldi5jCVwKKwlwY2lfcHRuZXRtYXBfbmV0aWYuYwlcCiAJ cGNpX3ZpcnRpb19ibG9jay5jCVwKIAlwY2lfdmlydGlvX25ldC5jCVwKIAlwY2lfdmlydGlvX3Ju ZC5jCVwKQEAgLTYyLDYgKzY2LDggQEAKIExJQkFERD0Jdm1tYXBpIG1kIHB0aHJlYWQgegogCiBD RkxBR1MrPSAtSSR7QkhZVkVfU1lTRElSfS9zeXMvZGV2L3VzYi9jb250cm9sbGVyCitDRkxBR1Mr PSAtSSR7QkhZVkVfU1lTRElSfS9zeXMvCitDRkxBR1MrPSAtRFdJVEhfTkVUTUFQCiAKIFdBUk5T Pz0JMgogCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZS5vcmln IC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL01ha2VmaWxlLm9yaWcKLS0tIHVzci9zcmMvdXNyLnNi aW4vYmh5dmUvTWFrZWZpbGUub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvTWFrZWZpbGUub3JpZwkyMDE2LTExLTMwIDEw OjUyOjU5Ljg4MzE2NDAwMCArMDAwMApAQCAtMCwwICsxLDY4IEBACisjCisjICRGcmVlQlNEOiBy ZWxlbmcvMTEuMC91c3Iuc2Jpbi9iaHl2ZS9NYWtlZmlsZSAzMDIzMzIgMjAxNi0wNy0wNCAwMzox OTowNlogZ3JlaGFuICQKKyMKKworUFJPRz0JYmh5dmUKK1BBQ0tBR0U9CWJoeXZlCisKK0RFQlVH X0ZMQUdTPSAtZyAtTzAKKworTUFOPQliaHl2ZS44CisKK0JIWVZFX1NZU0RJUj89JHtTUkNUT1B9 CisKK1NSQ1M9CVwKKwlhdGtiZGMuYwkJXAorCWFjcGkuYwkJCVwKKwliaHl2ZWdjLmMJCVwKKwli aHl2ZXJ1bi5jCQlcCisJYmxvY2tfaWYuYwkJXAorCWJvb3Ryb20uYwkJXAorCWNvbnNvbGUuYwkJ XAorCWNvbnNwb3J0LmMJCVwKKwlkYmdwb3J0LmMJCVwKKwlmd2N0bC5jCQkJXAorCWlub3V0LmMJ CQlcCisJaW9hcGljLmMJCVwKKwltZW0uYwkJCVwKKwltZXZlbnQuYwkJXAorCW1wdGJsLmMJCQlc CisJcGNpX2FoY2kuYwkJXAorCXBjaV9lbXVsLmMJCVwKKwlwY2lfZmJ1Zi5jCQlcCisJcGNpX2hv c3RicmlkZ2UuYwlcCisJcGNpX2lycS5jCQlcCisJcGNpX2xwYy5jCQlcCisJcGNpX3Bhc3N0aHJ1 LmMJCVwKKwlwY2lfdmlydGlvX2Jsb2NrLmMJXAorCXBjaV92aXJ0aW9fbmV0LmMJXAorCXBjaV92 aXJ0aW9fcm5kLmMJXAorCXBjaV91YXJ0LmMJCVwKKwlwY2lfeGhjaS5jCQlcCisJcG0uYwkJCVwK Kwlwb3N0LmMJCQlcCisJcHMya2JkLmMJCVwKKwlwczJtb3VzZS5jCQlcCisJcmZiLmMJCQlcCisJ cnRjLmMJCQlcCisJc21iaW9zdGJsLmMJCVwKKwlzb2Nrc3RyZWFtLmMJCVwKKwl0YXNrX3N3aXRj aC5jCQlcCisJdWFydF9lbXVsLmMJCVwKKwl1c2JfZW11bC5jCQlcCisJdXNiX21vdXNlLmMJCVwK Kwl2aXJ0aW8uYwkJXAorCXZnYS5jCQkJXAorCXhtc3IuYwkJCVwKKwlzcGludXBfYXAuYworCisu UEFUSDogICR7QkhZVkVfU1lTRElSfS9zeXMvYW1kNjQvdm1tCitTUkNTKz0Jdm1tX2luc3RydWN0 aW9uX2VtdWwuYworCitMSUJBREQ9CXZtbWFwaSBtZCBwdGhyZWFkIHoKKworQ0ZMQUdTKz0gLUkk e0JIWVZFX1NZU0RJUn0vc3lzL2Rldi91c2IvY29udHJvbGxlcgorCitXQVJOUz89CTIKKworLmlu Y2x1ZGUgPGJzZC5wcm9nLm1rPgpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUv bmV0X2JhY2tlbmRzLmMgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmMKLS0t IHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmMJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF9iYWNrZW5k cy5jCTIwMTYtMTItMDEgMTE6MTM6NTQuODEyNjc5MDAwICswMDAwCkBAIC0wLDAgKzEsMTA4MiBA QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBWaW5jZW56byBNYWZmaW9uZQorICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFO WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAor ICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIG11bHRp cGxlIG5ldHdvcmsgYmFja2VuZHMgKG51bGwsIHRhcCwgbmV0bWFwLCAuLi4pLAorICogdG8gYmUg dXNlZCBieSBuZXR3b3JrIGZyb250ZW5kcyBzdWNoIGFzIHZpcnRpby1uZXQgYW5kIHB0bmV0Lgor ICogVGhlIEFQSSB0byBhY2Nlc3MgdGhlIGJhY2tlbmQgKGUuZy4gc2VuZC9yZWNlaXZlIHBhY2tl dHMsIG5lZ290aWF0ZQorICogZmVhdHVyZXMpIGlzIGV4cG9ydGVkIGJ5IG5ldF9iYWNrZW5kcy5o LgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+Cisj aW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxz eXMvdHlwZXMuaD4JCS8qIHVfc2hvcnQgZXRjICovCisjaW5jbHVkZSA8bmV0L2lmLmg+CisKKyNp bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJp bmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRl IDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9ucC5oPgorI2luY2x1ZGUgPHBvbGwuaD4K KyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm1ldmVudC5oIgorI2luY2x1ZGUgIm5l dF9iYWNrZW5kcy5oIgorCisjaW5jbHVkZSA8c3lzL2xpbmtlcl9zZXQuaD4KKworLyoKKyAqIEVh Y2ggbmV0d29yayBiYWNrZW5kIHJlZ2lzdGVycyBhIHNldCBvZiBmdW5jdGlvbiBwb2ludGVycyB0 aGF0IGFyZQorICogdXNlZCB0byBpbXBsZW1lbnQgdGhlIG5ldCBiYWNrZW5kcyBBUEkuCisgKiBU aGlzIG1pZ2h0IG5lZWQgdG8gYmUgZXhwb3NlZCBpZiB3ZSBpbXBsZW1lbnQgYmFja2VuZHMgaW4g c2VwYXJhdGUgZmlsZXMuCisgKi8KK3N0cnVjdCBuZXRfYmFja2VuZCB7CisJY29uc3QgY2hhciAq bmFtZTsJLyogbmFtZSBvZiB0aGUgYmFja2VuZCAqLworCS8qCisJICogVGhlIGluaXQgYW5kIGNs ZWFudXAgZnVuY3Rpb25zIGFyZSB1c2VkIGludGVybmFsbHksCisJICogdmlydGlvLW5ldCBzaG91 bGQgbmV2ZXIgdXNlIGl0LgorCSAqLworCWludCAoKmluaXQpKHN0cnVjdCBuZXRfYmFja2VuZCAq YmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAq cGFyYW0pOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCisJ LyoKKwkgKiBDYWxsZWQgdG8gc2VydmUgYSBndWVzdCB0cmFuc21pdCByZXF1ZXN0LiBUaGUgc2Nh dHRlci1nYXRoZXIKKwkgKiB2ZWN0b3IgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBoYXMgJ2lvdmNu dCcgZWxlbWVudHMgYW5kIGNvbnRhaW5zCisJICogdGhlIHBhY2tldCB0byBzZW5kLiAnbGVuJyBp cyB0aGUgbGVuZ3RoIG9mIHdob2xlIHBhY2tldCBpbiBieXRlcy4KKwkgKi8KKwlpbnQgKCpzZW5k KShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCWludCBpb3Zj bnQsIHVpbnQzMl90IGxlbiwgaW50IG1vcmUpOworCisJLyoKKwkgKiBDYWxsZWQgdG8gc2VydmUg Z3Vlc3QgcmVjZWl2ZSByZXF1ZXN0LiBXaGVuIHRoZSBmdW5jdGlvbgorCSAqIHJldHVybnMgYSBw b3NpdGl2ZSB2YWx1ZSwgdGhlIHNjYXR0ZXItZ2F0aGVyIHZlY3RvcgorCSAqIHByb3ZpZGVkIGJ5 IHRoZSBjYWxsZXIgKGhhdmluZyAnaW92Y250JyBlbGVtZW50cyBpbiBpdCkgd2lsbAorCSAqIGNv bnRhaW4gYSBjaHVuayBvZiB0aGUgcmVjZWl2ZWQgcGFja2V0LiBUaGUgJ21vcmUnIGZsYWcgd2ls bAorCSAqIGJlIHNldCBpZiB0aGUgcmV0dXJuZWQgY2h1bmsgd2FzIHRoZSBsYXN0IG9uZSBmb3Ig dGhlIGN1cnJlbnQKKwkgKiBwYWNrZXQsIGFuZCAwIG90aGVyd2lzZS4gVGhlIGZ1bmN0aW9uIHJl dHVybnMgdGhlIGNodW5rIHNpemUKKwkgKiBpbiBieXRlcywgb3IgMCBpZiB0aGUgYmFja2VuZCBk b2Vzbid0IGhhdmUgYSBuZXcgcGFja2V0IHRvCisJICogcmVjZWl2ZS4KKwkgKiBOb3RlIHRoYXQg aXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgY2FsbGJhY2sgbWFueQorCSAqIHRpbWVz IHRvIHJlY2VpdmUgYSBzaW5nbGUgcGFja2V0LCBkZXBlbmRpbmcgb2YgaG93IGJpZyBpcworCSAq IGJ1ZmZlcnMgeW91IHByb3ZpZGUuCisJICovCisJaW50ICgqcmVjdikoc3RydWN0IG5ldF9iYWNr ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpOworCisJLyoKKwkgKiBBc2sg dGhlIGJhY2tlbmQgZm9yIHRoZSB2aXJ0aW8tbmV0IGZlYXR1cmVzIGl0IGlzIGFibGUgdG8KKwkg KiBzdXBwb3J0LiBQb3NzaWJsZSBmZWF0dXJlcyBhcmUgVFNPLCBVRk8gYW5kIGNoZWNrc3VtIG9m ZmxvYWRpbmcKKwkgKiBpbiBib3RoIHJ4IGFuZCB0eCBkaXJlY3Rpb24gYW5kIGZvciBib3RoIElQ djQgYW5kIElQdjYuCisJICovCisJdWludDY0X3QgKCpnZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tl bmQgKmJlKTsKKworCS8qCisJICogVGVsbCB0aGUgYmFja2VuZCB0byBlbmFibGUvZGlzYWJsZSB0 aGUgc3BlY2lmaWVkIHZpcnRpby1uZXQKKwkgKiBmZWF0dXJlcyAoY2FwYWJpbGl0aWVzKS4KKwkg Ki8KKwlpbnQgKCpzZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBmZWF0 dXJlcywKKwkJICAgICAgIHVuc2lnbmVkIGludCB2bmV0X2hkcl9sZW4pOworCisJc3RydWN0IHBj aV92dG5ldF9zb2Z0YyAqc2M7CisJaW50IGZkOworCXVuc2lnbmVkIGludCBiZV92bmV0X2hkcl9s ZW47CisJdW5zaWduZWQgaW50IGZlX3ZuZXRfaGRyX2xlbjsKKwl2b2lkICpwcml2OwkvKiBQb2lu dGVyIHRvIGJhY2tlbmQtc3BlY2lmaWMgZGF0YS4gKi8KK307CisKK1NFVF9ERUNMQVJFKG5ldF9i YWNrZW5kX3MsIHN0cnVjdCBuZXRfYmFja2VuZCk7CisKKyNkZWZpbmUgVk5FVF9IRFJfTEVOCXNp emVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcikKKworI2RlZmluZSBXUFJJTlRGKHBhcmFtcykg cHJpbnRmIHBhcmFtcworCisvKiB0aGUgbnVsbCBiYWNrZW5kICovCitzdGF0aWMgaW50CituZXRi ZV9udWxsX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2bmFtZSwK KwkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCSh2b2lkKWRldm5hbWU7 ICh2b2lkKWNiOyAodm9pZClwYXJhbTsKKwliZS0+ZmQgPSAtMTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQKK25ldGJlX251bGxfY2xlYW51cChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQor eworCSh2b2lkKWJlOworfQorCitzdGF0aWMgdWludDY0X3QKK25ldGJlX251bGxfZ2V0X2NhcChz dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJlOworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50CituZXRiZV9udWxsX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWlu dDY0X3QgZmVhdHVyZXMsCisJCQl1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJKHZvaWQpYmU7 ICh2b2lkKWZlYXR1cmVzOyAodm9pZCl2bmV0X2hkcl9sZW47CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQKK25ldGJlX251bGxfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3Qg aW92ZWMgKmlvdiwKKwlpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sIGludCBtb3JlKQoreworCSh2 b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsgKHZvaWQpbGVuOyAodm9pZCltb3JlOwor CXJldHVybiAwOyAvKiBwcmV0ZW5kIHdlIHNlbmQgKi8KK30KKworc3RhdGljIGludAorbmV0YmVf bnVsbF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQg aW92Y250KQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsKKwlmcHJpbnRm KHN0ZGVyciwgIm5ldGJlX251bGxfcmVjdiBjYWxsZWQgP1xuIik7CisJcmV0dXJuIC0xOyAvKiBu ZXZlciBjYWxsZWQsIGkgYmVsaWV2ZSAqLworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5k IG5fYmUgPSB7CisJLm5hbWUgPSAibnVsbCIsCisJLmluaXQgPSBuZXRiZV9udWxsX2luaXQsCisJ LmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXAsCisJLnNlbmQgPSBuZXRiZV9udWxsX3NlbmQs CisJLnJlY3YgPSBuZXRiZV9udWxsX3JlY3YsCisJLmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9j YXAsCisJLnNldF9jYXAgPSBuZXRiZV9udWxsX3NldF9jYXAsCit9OworCitEQVRBX1NFVChuZXRf YmFja2VuZF9zLCBuX2JlKTsKKworCisvKiB0aGUgdGFwIGJhY2tlbmQgKi8KKworc3RydWN0IHRh cF9wcml2IHsKKwlzdHJ1Y3QgbWV2ZW50ICptZXZwOworfTsKKworc3RhdGljIHZvaWQKK3RhcF9j bGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJc3RydWN0IHRhcF9wcml2ICpwcml2 ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJbWV2ZW50X2RlbGV0ZShwcml2LT5t ZXZwKTsKKwkJZnJlZShiZS0+cHJpdik7CisJCWJlLT5wcml2ID0gTlVMTDsKKwl9CisJaWYgKGJl LT5mZCAhPSAtMSkgeworCQljbG9zZShiZS0+ZmQpOworCQliZS0+ZmQgPSAtMTsKKwl9Cit9CisK K3N0YXRpYyBpbnQKK3RhcF9pbml0KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIg KmRldm5hbWUsCisJIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCWNoYXIg dGJ1Zls4MF07CisJaW50IGZkOworCWludCBvcHQgPSAxOworCXN0cnVjdCB0YXBfcHJpdiAqcHJp djsKKworCWlmIChjYiA9PSBOVUxMKSB7CisJCVdQUklOVEYoKCJUQVAgYmFja2VuZCByZXF1aXJl cyBub24tTlVMTCBjYWxsYmFja1xuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpdiA9IGNh bGxvYygxLCBzaXplb2Yoc3RydWN0IHRhcF9wcml2KSk7CisJaWYgKHByaXYgPT0gTlVMTCkgewor CQlXUFJJTlRGKCgidGFwX3ByaXYgYWxsb2MgZmFpbGVkXG4iKSk7CisJCXJldHVybiAtMTsKKwl9 CisKKwlzdHJjcHkodGJ1ZiwgIi9kZXYvIik7CisJc3RybGNhdCh0YnVmLCBkZXZuYW1lLCBzaXpl b2YodGJ1ZikpOworCisJZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7CisJaWYgKGZkID09IC0xKSB7 CisJCVdQUklOVEYoKCJvcGVuIG9mIHRhcCBkZXZpY2UgJXMgZmFpbGVkXG4iLCB0YnVmKSk7CisJ CWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBTZXQgbm9uLWJsb2NraW5nIGFuZCByZWdpc3Rl ciBmb3IgcmVhZAorCSAqIG5vdGlmaWNhdGlvbnMgd2l0aCB0aGUgZXZlbnQgbG9vcAorCSAqLwor CWlmIChpb2N0bChmZCwgRklPTkJJTywgJm9wdCkgPCAwKSB7CisJCVdQUklOVEYoKCJ0YXAgZGV2 aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcHJpdi0+ bWV2cCA9IG1ldmVudF9hZGQoZmQsIEVWRl9SRUFELCBjYiwgcGFyYW0pOworCWlmIChwcml2LT5t ZXZwID09IE5VTEwpIHsKKwkJV1BSSU5URigoIkNvdWxkIG5vdCByZWdpc3RlciBldmVudFxuIikp OworCQlnb3RvIGVycm9yOworCX0KKworCWJlLT5mZCA9IGZkOworCWJlLT5wcml2ID0gcHJpdjsK KworCXJldHVybiAwOworCitlcnJvcjoKKwl0YXBfY2xlYW51cChiZSk7CisJcmV0dXJuIC0xOwor fQorCisvKgorICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB0YXAg ZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQKK3RhcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJaW50IG1vcmUp Cit7CisJc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHplcm8gYnl0ZXMgKi8KKworCSh2b2lk KW1vcmU7CisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAsIHBhZCBvdXQgdG8gdGhhdCBh bmQgYWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRvIHRoZSBpb3YuIEl0IGlzIGd1 YXJhbnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBleHRyYSBpb3YgYXZhaWxhYmxl IGJ5IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYwKSB7CisJCWlvdltpb3ZjbnRdLmlv dl9iYXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0gKHNpemVfdCkoNjAgLSBsZW4p OworCQlpb3ZjbnQrKzsKKwl9CisKKwlyZXR1cm4gKGludCl3cml0ZXYoYmUtPmZkLCBpb3YsIGlv dmNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQoreworCWludCByZXQ7CisKKwkvKiBTaG91 bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0YXAgZmQgKi8KKwlhc3NlcnQoYmUt PmZkICE9IC0xKTsKKworCXJldCA9IChpbnQpcmVhZHYoYmUtPmZkLCBpb3YsIGlvdmNudCk7CisK KwlpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFV09VTERCTE9DSykgeworCQlyZXR1cm4gMDsKKwl9 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDY0X3QKK3RhcF9nZXRfY2FwKHN0cnVj dCBuZXRfYmFja2VuZCAqYmUpCit7CisJKHZvaWQpYmU7CisJcmV0dXJuIDA7IC8vIG5vdGhpbmcg ZXh0cmEKK30KKworc3RhdGljIGludAordGFwX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpi ZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJKHZv aWQpYmU7CisJcmV0dXJuIChmZWF0dXJlcyB8fCB2bmV0X2hkcl9sZW4pID8gLTEgOiAwOworfQor CitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIHRhcF9iYWNrZW5kID0geworCS5uYW1lID0gInRh cHx2bW1uZXQiLAorCS5pbml0ID0gdGFwX2luaXQsCisJLmNsZWFudXAgPSB0YXBfY2xlYW51cCwK Kwkuc2VuZCA9IHRhcF9zZW5kLAorCS5yZWN2ID0gdGFwX3JlY3YsCisJLmdldF9jYXAgPSB0YXBf Z2V0X2NhcCwKKwkuc2V0X2NhcCA9IHRhcF9zZXRfY2FwLAorfTsKKworREFUQV9TRVQobmV0X2Jh Y2tlbmRfcywgdGFwX2JhY2tlbmQpOworCisjaWZkZWYgV0lUSF9ORVRNQVAKKworLyoKKyAqIFRo ZSBuZXRtYXAgYmFja2VuZAorICovCisKKy8qIFRoZSB2aXJ0aW8tbmV0IGZlYXR1cmVzIHN1cHBv cnRlZCBieSBuZXRtYXAuICovCisjZGVmaW5lIE5FVE1BUF9GRUFUVVJFUyAoVklSVElPX05FVF9G X0NTVU0gfCBWSVJUSU9fTkVUX0ZfSE9TVF9UU080IHwgXAorCQlWSVJUSU9fTkVUX0ZfSE9TVF9U U082IHwgVklSVElPX05FVF9GX0hPU1RfVUZPIHwgXAorCQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NV TSB8IFZJUlRJT19ORVRfRl9HVUVTVF9UU080IHwgXAorCQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNP NiB8IFZJUlRJT19ORVRfRl9HVUVTVF9VRk8pCisKKyNkZWZpbmUgTkVUTUFQX1BPTExNQVNLIChQ T0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCkKKworc3RydWN0IG5ldG1hcF9wcml2IHsK KwljaGFyIGlmbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IG5tX2Rlc2MgKm5tZDsKKwl1aW50MTZf dCBtZW1pZDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJ4OworCXN0cnVjdCBuZXRtYXBfcmluZyAq dHg7CisJcHRocmVhZF90IGV2bG9vcF90aWQ7CisJbmV0X2JhY2tlbmRfY2JfdCBjYjsKKwl2b2lk ICpjYl9wYXJhbTsKKworCXN0cnVjdCBwdG5ldG1hcF9zdGF0ZSBwdG5ldG1hcDsKK307CisKK3N0 YXRpYyB2b2lkICoKK25ldG1hcF9ldmxvb3BfdGhyZWFkKHZvaWQgKnBhcmFtKQoreworCXN0cnVj dCBuZXRfYmFja2VuZCAqYmUgPSBwYXJhbTsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBi ZS0+cHJpdjsKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwlpbnQgcmV0OworCisJZm9yICg7Oykgewor CQlwZmQuZmQgPSBiZS0+ZmQ7CisJCXBmZC5ldmVudHMgPSBORVRNQVBfUE9MTE1BU0s7CisJCXJl dCA9IHBvbGwoJnBmZCwgMSwgSU5GVElNKTsKKwkJaWYgKHJldCA9PSAtMSAmJiBlcnJubyAhPSBF SU5UUikgeworCQkJV1BSSU5URigoIm5ldG1hcCBwb2xsIGZhaWxlZCwgJWRcbiIsIGVycm5vKSk7 CisJCX0gZWxzZSBpZiAocmV0ID09IDEgJiYgKHBmZC5yZXZlbnRzICYgTkVUTUFQX1BPTExNQVNL KSkgeworCQkJcHJpdi0+Y2IocGZkLmZkLCBFVkZfUkVBRCwgcHJpdi0+Y2JfcGFyYW0pOworCQl9 CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitubXJlcV9pbml0KHN0cnVj dCBubXJlcSAqcmVxLCBjaGFyICppZm5hbWUpCit7CisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpy ZXEpKTsKKwlzdHJuY3B5KHJlcS0+bnJfbmFtZSwgaWZuYW1lLCBzaXplb2YocmVxLT5ucl9uYW1l KSk7CisJcmVxLT5ucl92ZXJzaW9uID0gTkVUTUFQX0FQSTsKK30KKworc3RhdGljIGludAorbmV0 bWFwX3NldF92bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgaW50IHZuZXRfaGRy X2xlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBubXJlcSByZXE7CisJc3RydWN0IG5ldG1hcF9w cml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlubXJlcV9pbml0KCZyZXEsIHByaXYtPmlmbmFtZSk7 CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9CREdfVk5FVF9IRFI7CisJcmVxLm5yX2FyZzEgPSB2bmV0 X2hkcl9sZW47CisJZXJyID0gaW9jdGwoYmUtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChl cnIpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBzZXQgdm5ldCBoZWFkZXIgbGVuZ3RoICVkXG4i LAorCQkJCXZuZXRfaGRyX2xlbikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWJlLT5iZV92bmV0 X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor bmV0bWFwX2hhc192bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdW5zaWduZWQg dm5ldF9oZHJfbGVuKQoreworCWludCBwcmV2X2hkcl9sZW4gPSBiZS0+YmVfdm5ldF9oZHJfbGVu OworCWludCByZXQ7CisKKwlpZiAodm5ldF9oZHJfbGVuID09IHByZXZfaGRyX2xlbikgeworCQly ZXR1cm4gMTsKKwl9CisKKwlyZXQgPSBuZXRtYXBfc2V0X3ZuZXRfaGRyX2xlbihiZSwgdm5ldF9o ZHJfbGVuKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiAwOworCX0KKworCW5ldG1hcF9zZXRfdm5l dF9oZHJfbGVuKGJlLCBwcmV2X2hkcl9sZW4pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1 aW50NjRfdAorbmV0bWFwX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlyZXR1 cm4gbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUsIFZORVRfSERSX0xFTikgPworCQkJTkVUTUFQ X0ZFQVRVUkVTIDogMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX3NldF9jYXAoc3RydWN0IG5l dF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJICAgICAgIHVuc2lnbmVkIHZuZXRf aGRyX2xlbikKK3sKKwlyZXR1cm4gbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oYmUsIHZuZXRfaGRy X2xlbik7Cit9CisKKy8qIFN0b3JlIGFuZCByZXR1cm4gdGhlIGZlYXR1cmVzIHdlIGFncmVlZCB1 cG9uLiAqLwordWludDMyX3QKK3B0bmV0bWFwX2Fja19mZWF0dXJlcyhzdHJ1Y3QgcHRuZXRtYXBf c3RhdGUgKnB0biwgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVzKQoreworCXB0bi0+YWNrZWRfZmVh dHVyZXMgPSBwdG4tPmZlYXR1cmVzICYgd2FudGVkX2ZlYXR1cmVzOworCisJcmV0dXJuIHB0bi0+ YWNrZWRfZmVhdHVyZXM7Cit9CisKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqCitnZXRfcHRuZXRt YXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYg PSBiZSA/IGJlLT5wcml2IDogTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gcGk7CisJ c3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJLyogQ2hlY2sgdGhhdCB0aGlzIGlzIGEg cHRuZXRtYXAgYmFja2VuZC4gKi8KKwlpZiAoIWJlIHx8IGJlLT5zZXRfY2FwICE9IG5ldG1hcF9z ZXRfY2FwIHx8CisJCQkhKHByaXYtPm5tZC0+cmVxLm5yX2ZsYWdzICYgTlJfUFRORVRNQVBfSE9T VCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5h bWUpOworCXJlcS5ucl9jbWQgPSBORVRNQVBfUE9PTFNfSU5GT19HRVQ7CisJbm1yZXFfcG9pbnRl cl9wdXQoJnJlcSwgJnBpKTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYs ICZyZXEpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXJyID0gcHRuX21l bWRldl9hdHRhY2gocHJpdi0+bm1kLT5tZW0sICZwaSk7CisJaWYgKGVycikgeworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwlyZXR1cm4gJnByaXYtPnB0bmV0bWFwOworfQorCitpbnQKK3B0bmV0bWFw X2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBuZXRtYXBf aWZfaW5mbyAqbmlmKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFw X3ByaXY7CisKKwltZW1zZXQobmlmLCAwLCBzaXplb2YoKm5pZikpOworCWlmIChwcml2LT5ubWQg PT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCW5pZi0+bmlmcF9vZmZzZXQgPSBw cml2LT5ubWQtPnJlcS5ucl9vZmZzZXQ7CisJbmlmLT5udW1fdHhfcmluZ3MgPSBwcml2LT5ubWQt PnJlcS5ucl90eF9yaW5nczsKKwluaWYtPm51bV9yeF9yaW5ncyA9IHByaXYtPm5tZC0+cmVxLm5y X3J4X3JpbmdzOworCW5pZi0+bnVtX3R4X3Nsb3RzID0gcHJpdi0+bm1kLT5yZXEubnJfdHhfc2xv dHM7CisJbmlmLT5udW1fcnhfc2xvdHMgPSBwcml2LT5ubWQtPnJlcS5ucl9yeF9zbG90czsKKwor CXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2dldF9ob3N0bWVtaWQoc3RydWN0IHB0bmV0 bWFwX3N0YXRlICpwdG4pCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gcHRuLT5uZXRt YXBfcHJpdjsKKworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOwor CX0KKworCXJldHVybiBwcml2LT5tZW1pZDsKK30KKworaW50CitwdG5ldG1hcF9jcmVhdGUoc3Ry dWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNmZykKK3sKKwlz dHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCXN0cnVjdCBubXJl cSByZXE7CisJaW50IGVycjsKKworCWlmIChwdG4tPnJ1bm5pbmcpIHsKKwkJcmV0dXJuIDA7CisJ fQorCisJLyogWFhYIFdlIHNob3VsZCBzdG9wIHRoZSBuZXRtYXAgZXZsb29wIGhlcmUuICovCisK KwkvKiBBc2sgbmV0bWFwIHRvIGNyZWF0ZSBrdGhyZWFkcyBmb3IgdGhpcyBpbnRlcmZhY2UuICov CisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCW5tcmVxX3BvaW50ZXJfcHV0KCZy ZXEsIGNmZyk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9IT1NUX0NSRUFURTsKKwllcnIgPSBp b2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJZnBy aW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBwdG5ldG1hcCBrdGhyZWFkcyBvbiAi CisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2LT5pZm5hbWUsIGVycm5vKTsKKwkJ cmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAxOworCisJcmV0dXJuIDA7Cit9CisK K2ludAorcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKQoreworCXN0 cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisJc3RydWN0IG5tcmVx IHJlcTsKKwlpbnQgZXJyOworCisJaWYgKCFwdG4tPnJ1bm5pbmcpIHsKKwkJcmV0dXJuIDA7CisJ fQorCisJLyogQXNrIG5ldG1hcCB0byBkZWxldGUga3RocmVhZHMgZm9yIHRoaXMgaW50ZXJmYWNl LiAqLworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1lKTsKKwlyZXEubnJfY21kID0gTkVU TUFQX1BUX0hPU1RfREVMRVRFOworCWVyciA9IGlvY3RsKHByaXYtPm5tZC0+ZmQsIE5JT0NSRUdJ RiwgJnJlcSk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVbmFibGUgdG8g Y3JlYXRlIHB0bmV0bWFwIGt0aHJlYWRzIG9uICIKKwkJCSIlcyBbZXJybm89JWRdIiwgX19mdW5j X18sIHByaXYtPmlmbmFtZSwgZXJybm8pOworCQlyZXR1cm4gZXJyOworCX0KKworCXB0bi0+cnVu bmluZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX2luaXQoc3Ry dWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2bmFtZSwKKwkgICAgbmV0X2JhY2tl bmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJY29uc3QgY2hhciAqbmRuYW1lID0gIi9kZXYv bmV0bWFwIjsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBOVUxMOworCXN0cnVjdCBubXJl cSByZXE7CisJaW50IHB0bmV0bWFwID0gKGNiID09IE5VTEwpOworCisJcHJpdiA9IGNhbGxvYygx LCBzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2KSk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlX UFJJTlRGKCgiVW5hYmxlIGFsbG9jIG5ldG1hcCBwcml2YXRlIGRhdGFcbiIpKTsKKwkJcmV0dXJu IC0xOworCX0KKworCXN0cm5jcHkocHJpdi0+aWZuYW1lLCBkZXZuYW1lLCBzaXplb2YocHJpdi0+ aWZuYW1lKSk7CisJcHJpdi0+aWZuYW1lW3NpemVvZihwcml2LT5pZm5hbWUpIC0gMV0gPSAnXDAn OworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEubnJfZmxhZ3MgPSBwdG5l dG1hcCA/IE5SX1BUTkVUTUFQX0hPU1QgOiAwOworCisJcHJpdi0+bm1kID0gbm1fb3Blbihwcml2 LT5pZm5hbWUsICZyZXEsIE5FVE1BUF9OT19UWF9QT0xMLCBOVUxMKTsKKwlpZiAocHJpdi0+bm1k ID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBubV9vcGVuKCk6IGRldmljZSAnJXMn LCAiCisJCQkJImludGVyZmFjZSAnJXMnLCBlcnJubyAoJXMpXG4iLAorCQkJCW5kbmFtZSwgZGV2 bmFtZSwgc3RyZXJyb3IoZXJybm8pKSk7CisJCWZyZWUocHJpdik7CisJCXJldHVybiAtMTsKKwl9 CisKKwlwcml2LT5tZW1pZCA9IHByaXYtPm5tZC0+cmVxLm5yX2FyZzI7CisJcHJpdi0+dHggPSBO RVRNQVBfVFhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+cnggPSBORVRNQVBfUlhS SU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+Y2IgPSBjYjsKKwlwcml2LT5jYl9wYXJh bSA9IHBhcmFtOworCWJlLT5mZCA9IHByaXYtPm5tZC0+ZmQ7CisJYmUtPnByaXYgPSBwcml2Owor CisJcHJpdi0+cHRuZXRtYXAubmV0bWFwX3ByaXYgPSBwcml2OworCXByaXYtPnB0bmV0bWFwLmZl YXR1cmVzID0gMDsKKwlwcml2LT5wdG5ldG1hcC5hY2tlZF9mZWF0dXJlcyA9IDA7CisJcHJpdi0+ cHRuZXRtYXAucnVubmluZyA9IDA7CisJaWYgKHB0bmV0bWFwKSB7CisJCWlmIChuZXRtYXBfaGFz X3ZuZXRfaGRyX2xlbihiZSwgVk5FVF9IRFJfTEVOKSkgeworCQkJcHJpdi0+cHRuZXRtYXAuZmVh dHVyZXMgfD0gUFRORVRNQVBfRl9WTkVUX0hEUjsKKwkJfQorCX0gZWxzZSB7CisJCWNoYXIgdG5h bWVbNDBdOworCisJCS8qIENyZWF0ZSBhIHRocmVhZCBmb3IgbmV0bWFwIHBvbGwuICovCisJCXB0 aHJlYWRfY3JlYXRlKCZwcml2LT5ldmxvb3BfdGlkLCBOVUxMLCBuZXRtYXBfZXZsb29wX3RocmVh ZCwgKHZvaWQgKiliZSk7CisJCXNucHJpbnRmKHRuYW1lLCBzaXplb2YodG5hbWUpLCAibmV0bWFw LWV2bG9vcC0lcCIsIHByaXYpOworCQlwdGhyZWFkX3NldF9uYW1lX25wKHByaXYtPmV2bG9vcF90 aWQsIHRuYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25ldG1hcF9j bGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpw cml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJaWYgKHByaXYtPnB0bmV0bWFw LnJ1bm5pbmcpIHsKKwkJCXB0bmV0bWFwX2RlbGV0ZSgmcHJpdi0+cHRuZXRtYXApOworCQl9CisJ CW5tX2Nsb3NlKHByaXYtPm5tZCk7CisJCWZyZWUoYmUtPnByaXYpOworCQliZS0+cHJpdiA9IE5V TEw7CisJfQorCWJlLT5mZCA9IC0xOworfQorCisvKiBBIGZhc3QgY29weSByb3V0aW5lIG9ubHkg Zm9yIG11bHRpcGxlcyBvZiA2NCBieXRlcywgbm9uIG92ZXJsYXBwZWQuICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK3BrdF9jb3B5KGNvbnN0IHZvaWQgKl9zcmMsIHZvaWQgKl9kc3QsIGludCBsKQor eworICAgIGNvbnN0IHVpbnQ2NF90ICpzcmMgPSBfc3JjOworICAgIHVpbnQ2NF90ICpkc3QgPSBf ZHN0OworICAgIGlmIChsID49IDEwMjQpIHsKKyAgICAgICAgYmNvcHkoc3JjLCBkc3QsIGwpOwor ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoOyBsID4gMDsgbCAtPSA2NCkgeworICAg ICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAg KmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3Qr KyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAq c3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQK K25ldG1hcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LAor CSAgICBpbnQgaW92Y250LCB1aW50MzJfdCBzaXplLCBpbnQgbW9yZSkKK3sKKwlzdHJ1Y3QgbmV0 bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CisJ aW50IG5tX2J1Zl9zaXplOworCWludCBubV9idWZfbGVuOworCXVpbnQzMl90IGhlYWQ7CisJdm9p ZCAqbm1fYnVmOworCWludCBqOworCisJaWYgKGlvdmNudCA8PSAwIHx8IHNpemUgPD0gMCkgewor CQlEKCJXcm9uZyBpb3Y6IGlvdmNudCAlZCBzaXplICVkIiwgaW92Y250LCBzaXplKTsKKwkJcmV0 dXJuIDA7CisJfQorCisJcmluZyA9IHByaXYtPnR4OworCWhlYWQgPSByaW5nLT5oZWFkOworCWlm IChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJUkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVz Iiwgc2l6ZSk7CisJCWdvdG8gdHhzeW5jOworCX0KKwlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcs IHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJbm1fYnVmX3NpemUgPSByaW5nLT5ucl9idWZf c2l6ZTsKKwlubV9idWZfbGVuID0gMDsKKworCWZvciAoaiA9IDA7IGogPCBpb3ZjbnQ7IGorKykg eworCQlpbnQgaW92X2ZyYWdfc2l6ZSA9IGlvdltqXS5pb3ZfbGVuOworCQl2b2lkICppb3ZfZnJh Z19idWYgPSBpb3Zbal0uaW92X2Jhc2U7CisKKwkJLyogU3BsaXQgZWFjaCBpb3ZlYyBmcmFnbWVu dCBvdmVyIG1vcmUgbmV0bWFwIHNsb3RzLCBpZgorCQkgICBuZWNlc3NhcnkuICovCisJCWZvciAo OzspIHsKKwkJCWludCBjb3B5bGVuOworCisJCQljb3B5bGVuID0gaW92X2ZyYWdfc2l6ZSA8IG5t X2J1Zl9zaXplID8gaW92X2ZyYWdfc2l6ZSA6IG5tX2J1Zl9zaXplOworCQkJcGt0X2NvcHkoaW92 X2ZyYWdfYnVmLCBubV9idWYsIGNvcHlsZW4pOworCisJCQlpb3ZfZnJhZ19idWYgKz0gY29weWxl bjsKKwkJCWlvdl9mcmFnX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1ZiArPSBjb3B5bGVuOwor CQkJbm1fYnVmX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1Zl9sZW4gKz0gY29weWxlbjsKKwor CQkJaWYgKGlvdl9mcmFnX3NpemUgPT0gMCkgeworCQkJCWJyZWFrOworCQkJfQorCisJCQlyaW5n LT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJCQlyaW5nLT5zbG90W2hlYWRdLmZsYWdz ID0gTlNfTU9SRUZSQUc7CisJCQloZWFkID0gbm1fcmluZ19uZXh0KHJpbmcsIGhlYWQpOworCQkJ aWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJCS8qIFdlIHJhbiBvdXQgb2YgbmV0bWFwIHNs b3RzIHdoaWxlCisJCQkJICogc3BsaXR0aW5nIHRoZSBpb3ZlYyBmcmFnbWVudHMuICovCisJCQkJ UkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6ZSk7CisJCQkJZ290byB0eHN5bmM7 CisJCQl9CisJCQlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcsIHJpbmctPnNsb3RbaGVhZF0uYnVm X2lkeCk7CisJCQlubV9idWZfc2l6ZSA9IHJpbmctPm5yX2J1Zl9zaXplOworCQkJbm1fYnVmX2xl biA9IDA7CisJCX0KKwl9CisKKwkvKiBDb21wbGV0ZSB0aGUgbGFzdCBzbG90LCB3aGljaCBtdXN0 IG5vdCBoYXZlIE5TX01PUkVGUkFHIHNldC4gKi8KKwlyaW5nLT5zbG90W2hlYWRdLmxlbiA9IG5t X2J1Zl9sZW47CisJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9IDA7CisJaGVhZCA9IG5tX3Jpbmdf bmV4dChyaW5nLCBoZWFkKTsKKworCS8qIE5vdyB1cGRhdGUgcmluZy0+aGVhZCBhbmQgcmluZy0+ Y3VyLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFkOworCisJaWYgKG1vcmUpIHsv LyAmJiBubV9yaW5nX3NwYWNlKHJpbmcpID4gNjQKKwkJcmV0dXJuIDA7CisJfQordHhzeW5jOgor CWlvY3RsKGJlLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludAorbmV0bWFwX3JlY3Yoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVj ICppb3YsIGludCBpb3ZjbnQpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnBy aXY7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0bWFwX3Jp bmcgKnJpbmc7CisJdm9pZCAqaW92X2ZyYWdfYnVmOworCWludCBpb3ZfZnJhZ19zaXplOworCWlu dCB0b3RsZW4gPSAwOworCXVpbnQzMl90IGhlYWQ7CisKKwlhc3NlcnQoaW92Y250KTsKKworCXJp bmcgPSBwcml2LT5yeDsKKwloZWFkID0gcmluZy0+aGVhZDsKKwlpb3ZfZnJhZ19idWYgPSBpb3Yt Pmlvdl9iYXNlOworCWlvdl9mcmFnX3NpemUgPSBpb3YtPmlvdl9sZW47CisKKwlkbyB7CisJCWlu dCBubV9idWZfbGVuOworCQl2b2lkICpubV9idWY7CisKKwkJaWYgKGhlYWQgPT0gcmluZy0+dGFp bCkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzbG90ID0gcmluZy0+c2xvdCArIGhlYWQ7CisJ CW5tX2J1ZiA9IE5FVE1BUF9CVUYocmluZywgc2xvdC0+YnVmX2lkeCk7CisJCW5tX2J1Zl9sZW4g PSBzbG90LT5sZW47CisKKwkJZm9yICg7OykgeworCQkJaW50IGNvcHlsZW4gPSBubV9idWZfbGVu IDwgaW92X2ZyYWdfc2l6ZSA/IG5tX2J1Zl9sZW4gOiBpb3ZfZnJhZ19zaXplOworCisJCQlwa3Rf Y29weShubV9idWYsIGlvdl9mcmFnX2J1ZiwgY29weWxlbik7CisJCQlubV9idWYgKz0gY29weWxl bjsKKwkJCW5tX2J1Zl9sZW4gLT0gY29weWxlbjsKKwkJCWlvdl9mcmFnX2J1ZiArPSBjb3B5bGVu OworCQkJaW92X2ZyYWdfc2l6ZSAtPSBjb3B5bGVuOworCQkJdG90bGVuICs9IGNvcHlsZW47CisK KwkJCWlmIChubV9idWZfbGVuID09IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaW92Kys7 CisJCQlpb3ZjbnQtLTsKKwkJCWlmIChpb3ZjbnQgPT0gMCkgeworCQkJCS8qIE5vIHNwYWNlIHRv IHJlY2VpdmUuICovCisJCQkJRCgiU2hvcnQgaW92LCBkcm9wICVkIGJ5dGVzIiwgdG90bGVuKTsK KwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJCX0KKwkJCWlvdl9mcmFnX2J1ZiA9IGlvdi0+aW92X2Jh c2U7CisJCQlpb3ZfZnJhZ19zaXplID0gaW92LT5pb3ZfbGVuOworCQl9CisKKwkJaGVhZCA9IG5t X3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCX0gd2hpbGUgKHNsb3QtPmZsYWdzICYgTlNfTU9S RUZSQUcpOworCisJLyogUmVsZWFzZSBzbG90cyB0byBuZXRtYXAuICovCisJcmluZy0+aGVhZCA9 IHJpbmctPmN1ciA9IGhlYWQ7CisKKwlyZXR1cm4gdG90bGVuOworfQorCitzdGF0aWMgc3RydWN0 IG5ldF9iYWNrZW5kIG5ldG1hcF9iYWNrZW5kID0geworCS5uYW1lID0gIm5ldG1hcHx2YWxlIiwK KwkuaW5pdCA9IG5ldG1hcF9pbml0LAorCS5jbGVhbnVwID0gbmV0bWFwX2NsZWFudXAsCisJLnNl bmQgPSBuZXRtYXBfc2VuZCwKKwkucmVjdiA9IG5ldG1hcF9yZWN2LAorCS5nZXRfY2FwID0gbmV0 bWFwX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRtYXBfc2V0X2NhcCwKK307CisKK0RBVEFfU0VU KG5ldF9iYWNrZW5kX3MsIG5ldG1hcF9iYWNrZW5kKTsKKworI2VuZGlmIC8qIFdJVEhfTkVUTUFQ ICovCisKKy8qCisgKiBtYWtlIHN1cmUgYSBiYWNrZW5kIGlzIHByb3Blcmx5IGluaXRpYWxpemVk CisgKi8KK3N0YXRpYyB2b2lkCituZXRiZV9maXgoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sK KwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChiZS0+bmFtZSA9PSBOVUxMKSB7CisJ CWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBuYW1lIGZvciAlcFxuIiwgYmUpOworCQliZS0+bmFt ZSA9ICJ1bm5hbWVkIG5ldGJlIjsKKwl9CisJaWYgKGJlLT5pbml0ID09IE5VTEwpIHsKKwkJZnBy aW50ZihzdGRlcnIsICJtaXNzaW5nIGluaXQgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOwor CQliZS0+aW5pdCA9IG5ldGJlX251bGxfaW5pdDsKKwl9CisJaWYgKGJlLT5jbGVhbnVwID09IE5V TEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGNsZWFudXAgZm9yICVwICVzXG4iLCBi ZSwgYmUtPm5hbWUpOworCQliZS0+Y2xlYW51cCA9IG5ldGJlX251bGxfY2xlYW51cDsKKwl9CisJ aWYgKGJlLT5zZW5kID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIHNlbmQg Zm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+c2VuZCA9IG5ldGJlX251bGxfc2Vu ZDsKKwl9CisJaWYgKGJlLT5yZWN2ID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNz aW5nIHJlY3YgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+cmVjdiA9IG5ldGJl X251bGxfcmVjdjsKKwl9CisJaWYgKGJlLT5nZXRfY2FwID09IE5VTEwpIHsKKwkJZnByaW50Zihz dGRlcnIsICJtaXNzaW5nIGdldF9jYXAgZm9yICVwICVzXG4iLAorCQkJYmUsIGJlLT5uYW1lKTsK KwkJYmUtPmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9jYXA7CisJfQorCWlmIChiZS0+c2V0X2Nh cCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBzZXRfY2FwIGZvciAlcCAl c1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5zZXRfY2FwID0gbmV0YmVfbnVsbF9zZXRf Y2FwOworCX0KK30KKworLyoKKyAqIGtleXMgaXMgYSBzZXQgb2YgcHJlZml4ZXMgc2VwYXJhdGVk IGJ5ICd8JywKKyAqIHJldHVybiAxIGlmIHRoZSBsZWZ0bW9zdCBwYXJ0IG9mIG5hbWUgbWF0Y2hl cyBvbmUgcHJlZml4LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCituZXRiZV9uYW1lX21hdGNo KGNvbnN0IGNoYXIgKmtleXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqbiA9 IG5hbWUsICpnb29kID0ga2V5czsKKwljaGFyIGM7CisKKwlpZiAoIWtleXMgfHwgIW5hbWUpCisJ CXJldHVybiBOVUxMOworCXdoaWxlICggKGMgPSAqa2V5cysrKSApIHsKKwkJaWYgKGMgPT0gJ3wn KSB7IC8qIHJlYWNoZWQgdGhlIHNlcGFyYXRvciAqLworCQkJaWYgKGdvb2QpCisJCQkJYnJlYWs7 CisJCQkvKiBwcmVwYXJlIGZvciBuZXcgcm91bmQgKi8KKwkJCW4gPSBuYW1lOworCQkJZ29vZCA9 IGtleXM7CisJCX0gZWxzZSBpZiAoZ29vZCAmJiBjICE9ICpuKyspIHsKKwkJCWdvb2QgPSBOVUxM OyAvKiBkcm9wIHRpbGwgbmV4dCBrZXl3b3JkICovCisJCX0KKwl9CisJcmV0dXJuIGdvb2Q7Cit9 CisKKy8qCisgKiBJbml0aWFsaXplIGEgYmFja2VuZCBhbmQgYXR0YWNoIHRvIHRoZSBmcm9udGVu ZC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBmcm9udGVuZCBpbml0aWFsaXphdGlvbi4KKyAq IGRldm5hbWUgaXMgdGhlIGJhY2tlbmQtbmFtZSBhcyBzdXBwbGllZCBvbiB0aGUgY29tbWFuZCBs aW5lLAorICogCWUuZy4gLXMgMjowLGZyb250ZW5kLW5hbWUsYmFja2VuZC1uYW1lWyxvdGhlci1h cmdzXQorICogY2IgaXMgdGhlIHJlY2VpdmUgY2FsbGJhY2sgc3VwcGxpZWQgYnkgdGhlIGZyb250 ZW5kLAorICoJYW5kIGl0IGlzIGludm9rZWQgaW4gdGhlIGV2ZW50IGxvb3Agd2hlbiBhIHJlY2Vp dmUKKyAqCWV2ZW50IGlzIGdlbmVyYXRlZCBpbiB0aGUgaHlwZXJ2aXNvciwKKyAqIHBhcmFtIGlz IGEgcG9pbnRlciB0byB0aGUgZnJvbnRlbmQsIGFuZCBub3JtYWxseSB1c2VkIGFzCisgKgl0aGUg YXJndW1lbnQgZm9yIHRoZSBjYWxsYmFjay4KKyAqLworc3RydWN0IG5ldF9iYWNrZW5kICoKK25l dGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwgbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAq cGFyYW0pCit7CisJc3RydWN0IG5ldF9iYWNrZW5kICoqcGJlLCAqYmUsICp0YmUgPSBOVUxMOwor CWludCBlcnI7CisKKwkvKgorCSAqIEZpbmQgdGhlIG5ldHdvcmsgYmFja2VuZCBkZXBlbmRpbmcg b24gdGhlIHVzZXItcHJvdmlkZWQKKwkgKiBkZXZpY2UgbmFtZS4gbmV0X2JhY2tlbmRfcyBpcyBi dWlsdCB1c2luZyBhIGxpbmtlciBzZXQuCisJICovCisJU0VUX0ZPUkVBQ0gocGJlLCBuZXRfYmFj a2VuZF9zKSB7CisJCWlmIChuZXRiZV9uYW1lX21hdGNoKCgqcGJlKS0+bmFtZSwgZGV2bmFtZSkp IHsKKwkJCXRiZSA9ICpwYmU7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAodGJlID09IE5VTEwp CisJCXJldHVybiBOVUxMOyAvKiBvciBudWxsIGJhY2tlbmQgPyAqLworCWJlID0gY2FsbG9jKDEs IHNpemVvZigqYmUpKTsKKwkqYmUgPSAqdGJlOwkvKiBjb3B5IHRoZSB0ZW1wbGF0ZSAqLworCW5l dGJlX2ZpeChiZSk7IC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCBmaWVsZHMgKi8KKwliZS0+ZmQg PSAtMTsKKwliZS0+cHJpdiA9IE5VTEw7CisJYmUtPnNjID0gcGFyYW07CisJYmUtPmJlX3ZuZXRf aGRyX2xlbiA9IDA7CisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9IDA7CisKKwkvKiBpbml0aWFsaXpl IHRoZSBiYWNrZW5kICovCisJZXJyID0gYmUtPmluaXQoYmUsIGRldm5hbWUsIGNiLCBwYXJhbSk7 CisJaWYgKGVycikgeworCQlmcmVlKGJlKTsKKwkJYmUgPSBOVUxMOworCX0KKwlyZXR1cm4gYmU7 Cit9CisKK3ZvaWQKK25ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlp ZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWJlLT5jbGVhbnVwKGJlKTsKKwlmcmVlKGJlKTsK K30KKwordWludDY0X3QKK25ldGJlX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sK KwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGJlLT5nZXRfY2FwKGJlKTsK K30KKworaW50CituZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90 IGZlYXR1cmVzLAorCSAgICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sKKwlpbnQgcmV0Owor CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogVGhlcmUgYXJlIG9ubHkgdGhy ZWUgdmFsaWQgbGVuZ3Rocy4gKi8KKwlpZiAodm5ldF9oZHJfbGVuICYmIHZuZXRfaGRyX2xlbiAh PSBWTkVUX0hEUl9MRU4KKwkJJiYgdm5ldF9oZHJfbGVuICE9IChWTkVUX0hEUl9MRU4gLSBzaXpl b2YodWludDE2X3QpKSkKKwkJcmV0dXJuIC0xOworCisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9IHZu ZXRfaGRyX2xlbjsKKworCXJldCA9IGJlLT5zZXRfY2FwKGJlLCBmZWF0dXJlcywgdm5ldF9oZHJf bGVuKTsKKwlhc3NlcnQoYmUtPmJlX3ZuZXRfaGRyX2xlbiA9PSAwIHx8CisJICAgICAgIGJlLT5i ZV92bmV0X2hkcl9sZW4gPT0gYmUtPmZlX3ZuZXRfaGRyX2xlbik7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IGlvdmVjICoKK2lvdl90cmltKHN0cnVjdCBpb3Zl YyAqaW92LCBpbnQgKmlvdmNudCwgdW5zaWduZWQgaW50IHRsZW4pCit7CisJc3RydWN0IGlvdmVj ICpyaW92OworCisJLyogWFhYIHNob3J0LWN1dDogYXNzdW1lIGZpcnN0IHNlZ21lbnQgaXMgPj0g dGxlbiAqLworCWFzc2VydChpb3ZbMF0uaW92X2xlbiA+PSB0bGVuKTsKKworCWlvdlswXS5pb3Zf bGVuIC09IHRsZW47CisJaWYgKGlvdlswXS5pb3ZfbGVuID09IDApIHsKKwkJYXNzZXJ0KCppb3Zj bnQgPiAxKTsKKwkJKmlvdmNudCAtPSAxOworCQlyaW92ID0gJmlvdlsxXTsKKwl9IGVsc2Ugewor CQlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKSgodWludHB0cl90KWlvdlswXS5pb3ZfYmFzZSAr IHRsZW4pOworCQlyaW92ID0gJmlvdlswXTsKKwl9CisKKwlyZXR1cm4gKHJpb3YpOworfQorCit2 b2lkCituZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92 LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJICAgaW50IG1vcmUpCit7CisJaWYgKGJlID09 IE5VTEwpCisJCXJldHVybjsKKyNpZiAwCisJaW50IGk7CisJRCgic2VuZGluZyBpb3ZjbnQgJWQg bGVuICVkIGlvdmVjICVwIiwgaW92Y250LCBsZW4sIGlvdik7CisJZm9yIChpPTA7IGkgPCBpb3Zj bnQ7IGkrKykKKwkJRCgiICAgJTNkOiAlNGQgJXAiLCBpLCAoaW50KWlvdltpXS5pb3ZfbGVuLCBp b3ZbaV0uaW92X2Jhc2UpOworI2VuZGlmCisJaWYgKGJlLT5iZV92bmV0X2hkcl9sZW4gIT0gYmUt PmZlX3ZuZXRfaGRyX2xlbikgeworCQkvKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5iZV92bmV0X2hk cl9sZW4gaXMgMC4gKi8KKwkJaW92ID0gaW92X3RyaW0oaW92LCAmaW92Y250LCBiZS0+ZmVfdm5l dF9oZHJfbGVuKTsKKwl9CisKKwliZS0+c2VuZChiZSwgaW92LCBpb3ZjbnQsIGxlbiwgbW9yZSk7 Cit9CisKKy8qCisgKiBjYW4gcmV0dXJuIC0xIGluIGNhc2Ugb2YgZXJyb3JzCisgKi8KK2ludAor bmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50 IGlvdmNudCkKK3sKKwl1bnNpZ25lZCBpbnQgaGxlbiA9IDA7IC8qIGxlbmd0aCBvZiBwcmVwZW5k ZWQgdmlydGlvLW5ldCBoZWFkZXIgKi8KKwlpbnQgcmV0OworCisJaWYgKGJlID09IE5VTEwpCisJ CXJldHVybiAtMTsKKworCWlmIChiZS0+YmVfdm5ldF9oZHJfbGVuICE9IGJlLT5mZV92bmV0X2hk cl9sZW4pIHsKKwkJc3RydWN0IHZpcnRpb19uZXRfcnhoZHIgKnZoOworCisJCS8qIEhlcmUgd2Ug YXJlIHN1cmUgYmUtPmJlX3ZuZXRfaGRyX2xlbiBpcyAwLiAqLworCQlobGVuID0gYmUtPmZlX3Zu ZXRfaGRyX2xlbjsKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRlciB0byB0aGUgcnggaGVhZGVyLCBh bmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBpdCBmb3IgdGhlIHBh Y2tldCBidWZmZXIuCisJCSAqLworCQl2aCA9IGlvdlswXS5pb3ZfYmFzZTsKKwkJaW92ID0gaW92 X3RyaW0oaW92LCAmaW92Y250LCBobGVuKTsKKworCQkvKgorCQkgKiBIZXJlIHdlIGFyZSBzdXJl IGJlLT5mZV92bmV0X2hkcl9sZW4gaXMgMC4KKwkJICogVGhlIG9ubHkgdmFsaWQgZmllbGQgaW4g dGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBidWZmZXJzIGlmIG1l cmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNldCh2aCwgMCwgaGxl bik7CisKKwkJaWYgKGhsZW4gPT0gVk5FVF9IRFJfTEVOKSB7CisJCQl2aC0+dnJoX2J1ZnMgPSAx OworCQl9CisJfQorCisJcmV0ID0gYmUtPnJlY3YoYmUsIGlvdiwgaW92Y250KTsKKwlpZiAocmV0 ID4gMCkgeworCQlyZXQgKz0gaGxlbjsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog UmVhZCBhIHBhY2tldCBmcm9tIHRoZSBiYWNrZW5kIGFuZCBkaXNjYXJkIGl0LgorICogUmV0dXJu cyB0aGUgc2l6ZSBvZiB0aGUgZGlzY2FyZGVkIHBhY2tldCBvciB6ZXJvIGlmIG5vIHBhY2tldCB3 YXMgYXZhaWxhYmxlLgorICogQSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluIGNh c2Ugb2YgcmVhZCBlcnJvci4KKyAqLworaW50CituZXRiZV9yeF9kaXNjYXJkKHN0cnVjdCBuZXRf YmFja2VuZCAqYmUpCit7CisJLyoKKwkgKiBNUCBub3RlOiB0aGUgZHVtbXlidWYgaXMgb25seSB1 c2VkIHRvIGRpc2NhcmQgZnJhbWVzLAorCSAqIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IHRv IGJlIHBlci12dG5ldCBvciBsb2NrZWQuCisJICogV2Ugb25seSBtYWtlIGl0IGxhcmdlIGVub3Vn aCBmb3IgVFNPLXNpemVkIHNlZ21lbnQuCisJICovCisJc3RhdGljIHVpbnQ4X3QgZHVtbXlidWZb NjU1MzYrNjRdOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisKKwlpb3YuaW92X2Jhc2UgPSBkdW1teWJ1 ZjsKKwlpb3YuaW92X2xlbiA9IHNpemVvZihkdW1teWJ1Zik7CisKKwlyZXR1cm4gbmV0YmVfcmVj dihiZSwgJmlvdiwgMSk7Cit9CisKZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZl L25ldF9iYWNrZW5kcy5jLm9yaWcgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRz LmMub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuYy5vcmlnCTE5 NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9i aHl2ZS9uZXRfYmFja2VuZHMuYy5vcmlnCTIwMTYtMTEtMzAgMTA6NTI6NTkuOTEyNTI2MDAwICsw MDAwCkBAIC0wLDAgKzEsMjE2NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBW aW5jZW56byBNYWZmaW9uZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S U2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVT SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoaXMg ZmlsZSBpbXBsZW1lbnRzIG11bHRpcGxlIG5ldHdvcmsgYmFja2VuZHMgKG51bGwsIHRhcCwgbmV0 bWFwLCAuLi4pLAorICogdG8gYmUgdXNlZCBieSBuZXR3b3JrIGZyb250ZW5kcyBzdWNoIGFzIHZp cnRpby1uZXQgYW5kIHB0bmV0LgorICogVGhlIEFQSSB0byBhY2Nlc3MgdGhlIGJhY2tlbmQgKGUu Zy4gc2VuZC9yZWNlaXZlIHBhY2tldHMsIG5lZ290aWF0ZQorICogZmVhdHVyZXMpIGlzIGV4cG9y dGVkIGJ5IG5ldF9iYWNrZW5kcy5oLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNp bmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lz L21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4JCS8qIHVfc2hvcnQgZXRjICovCisjaW5j bHVkZSA8bmV0L2lmLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRp bnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl IDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9ucC5o PgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm1l dmVudC5oIgorI2luY2x1ZGUgIm5ldF9iYWNrZW5kcy5oIgorCisjaW5jbHVkZSA8c3lzL2xpbmtl cl9zZXQuaD4KKworLyoKKyAqIEVhY2ggbmV0d29yayBiYWNrZW5kIHJlZ2lzdGVycyBhIHNldCBv ZiBmdW5jdGlvbiBwb2ludGVycyB0aGF0IGFyZQorICogdXNlZCB0byBpbXBsZW1lbnQgdGhlIG5l dCBiYWNrZW5kcyBBUEkuCisgKiBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgZXhwb3NlZCBpZiB3ZSBp bXBsZW1lbnQgYmFja2VuZHMgaW4gc2VwYXJhdGUgZmlsZXMuCisgKi8KK3N0cnVjdCBuZXRfYmFj a2VuZCB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogbmFtZSBvZiB0aGUgYmFja2VuZCAqLworCS8q CisJICogVGhlIGluaXQgYW5kIGNsZWFudXAgZnVuY3Rpb25zIGFyZSB1c2VkIGludGVybmFsbHks CisJICogdmlydGlvLW5ldCBzaG91bGQgbmV2ZXIgdXNlIGl0LgorCSAqLworCWludCAoKmluaXQp KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkJbmV0X2Jh Y2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgbmV0 X2JhY2tlbmQgKmJlKTsKKworCisJLyoKKwkgKiBDYWxsZWQgdG8gc2VydmUgYSBndWVzdCB0cmFu c21pdCByZXF1ZXN0LiBUaGUgc2NhdHRlci1nYXRoZXIKKwkgKiB2ZWN0b3IgcHJvdmlkZWQgYnkg dGhlIGNhbGxlciBoYXMgJ2lvdmNudCcgZWxlbWVudHMgYW5kIGNvbnRhaW5zCisJICogdGhlIHBh Y2tldCB0byBzZW5kLiAnbGVuJyBpcyB0aGUgbGVuZ3RoIG9mIHdob2xlIHBhY2tldCBpbiBieXRl cy4KKwkgKi8KKwlpbnQgKCpzZW5kKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92 ZWMgKmlvdiwKKwkJCWludCBpb3ZjbnQsIHVpbnQzMl90IGxlbiwgaW50IG1vcmUpOworCisJLyoK KwkgKiBDYWxsZWQgdG8gc2VydmUgZ3Vlc3QgcmVjZWl2ZSByZXF1ZXN0LiBXaGVuIHRoZSBmdW5j dGlvbgorCSAqIHJldHVybnMgYSBwb3NpdGl2ZSB2YWx1ZSwgdGhlIHNjYXR0ZXItZ2F0aGVyIHZl Y3RvcgorCSAqIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgKGhhdmluZyAnaW92Y250JyBlbGVtZW50 cyBpbiBpdCkgd2lsbAorCSAqIGNvbnRhaW4gYSBjaHVuayBvZiB0aGUgcmVjZWl2ZWQgcGFja2V0 LiBUaGUgJ21vcmUnIGZsYWcgd2lsbAorCSAqIGJlIHNldCBpZiB0aGUgcmV0dXJuZWQgY2h1bmsg d2FzIHRoZSBsYXN0IG9uZSBmb3IgdGhlIGN1cnJlbnQKKwkgKiBwYWNrZXQsIGFuZCAwIG90aGVy d2lzZS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNodW5rIHNpemUKKwkgKiBpbiBieXRlcywg b3IgMCBpZiB0aGUgYmFja2VuZCBkb2Vzbid0IGhhdmUgYSBuZXcgcGFja2V0IHRvCisJICogcmVj ZWl2ZS4KKwkgKiBOb3RlIHRoYXQgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgY2Fs bGJhY2sgbWFueQorCSAqIHRpbWVzIHRvIHJlY2VpdmUgYSBzaW5nbGUgcGFja2V0LCBkZXBlbmRp bmcgb2YgaG93IGJpZyBpcworCSAqIGJ1ZmZlcnMgeW91IHByb3ZpZGUuCisJICovCisJaW50ICgq cmVjdikoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3Zj bnQpOworCisJLyoKKwkgKiBBc2sgdGhlIGJhY2tlbmQgZm9yIHRoZSB2aXJ0aW8tbmV0IGZlYXR1 cmVzIGl0IGlzIGFibGUgdG8KKwkgKiBzdXBwb3J0LiBQb3NzaWJsZSBmZWF0dXJlcyBhcmUgVFNP LCBVRk8gYW5kIGNoZWNrc3VtIG9mZmxvYWRpbmcKKwkgKiBpbiBib3RoIHJ4IGFuZCB0eCBkaXJl Y3Rpb24gYW5kIGZvciBib3RoIElQdjQgYW5kIElQdjYuCisJICovCisJdWludDY0X3QgKCpnZXRf Y2FwKShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCS8qCisJICogVGVsbCB0aGUgYmFja2Vu ZCB0byBlbmFibGUvZGlzYWJsZSB0aGUgc3BlY2lmaWVkIHZpcnRpby1uZXQKKwkgKiBmZWF0dXJl cyAoY2FwYWJpbGl0aWVzKS4KKwkgKi8KKwlpbnQgKCpzZXRfY2FwKShzdHJ1Y3QgbmV0X2JhY2tl bmQgKmJlLCB1aW50NjRfdCBmZWF0dXJlcywKKwkJICAgICAgIHVuc2lnbmVkIGludCB2bmV0X2hk cl9sZW4pOworCisJc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2M7CisJaW50IGZkOworCXVuc2ln bmVkIGludCBiZV92bmV0X2hkcl9sZW47CisJdW5zaWduZWQgaW50IGZlX3ZuZXRfaGRyX2xlbjsK Kwl2b2lkICpwcml2OwkvKiBQb2ludGVyIHRvIGJhY2tlbmQtc3BlY2lmaWMgZGF0YS4gKi8KK307 CisKK1NFVF9ERUNMQVJFKG5ldF9iYWNrZW5kX3MsIHN0cnVjdCBuZXRfYmFja2VuZCk7CisKKyNk ZWZpbmUgVk5FVF9IRFJfTEVOCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcikKKworI2Rl ZmluZSBXUFJJTlRGKHBhcmFtcykgcHJpbnRmIHBhcmFtcworCisvKiB0aGUgbnVsbCBiYWNrZW5k ICovCitzdGF0aWMgaW50CituZXRiZV9udWxsX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwg Y29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFt KQoreworCSh2b2lkKWRldm5hbWU7ICh2b2lkKWNiOyAodm9pZClwYXJhbTsKKwliZS0+ZmQgPSAt MTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25ldGJlX251bGxfY2xlYW51cChzdHJ1 Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJlOworfQorCitzdGF0aWMgdWludDY0X3QK K25ldGJlX251bGxfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQoreworCSh2b2lkKWJl OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRiZV9udWxsX3NldF9jYXAoc3RydWN0 IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCQl1bnNpZ25lZCB2bmV0X2hk cl9sZW4pCit7CisJKHZvaWQpYmU7ICh2b2lkKWZlYXR1cmVzOyAodm9pZCl2bmV0X2hkcl9sZW47 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldGJlX251bGxfc2VuZChzdHJ1Y3QgbmV0 X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwlpbnQgaW92Y250LCB1aW50MzJfdCBs ZW4sIGludCBtb3JlKQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2b2lkKWlvdmNudDsgKHZv aWQpbGVuOyAodm9pZCltb3JlOworCXJldHVybiAwOyAvKiBwcmV0ZW5kIHdlIHNlbmQgKi8KK30K Kworc3RhdGljIGludAorbmV0YmVfbnVsbF9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0 cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQoreworCSh2b2lkKWJlOyAodm9pZClpb3Y7ICh2 b2lkKWlvdmNudDsKKwlmcHJpbnRmKHN0ZGVyciwgIm5ldGJlX251bGxfcmVjdiBjYWxsZWQgP1xu Iik7CisJcmV0dXJuIC0xOyAvKiBuZXZlciBjYWxsZWQsIGkgYmVsaWV2ZSAqLworfQorCitzdGF0 aWMgc3RydWN0IG5ldF9iYWNrZW5kIG5fYmUgPSB7CisJLm5hbWUgPSAibnVsbCIsCisJLmluaXQg PSBuZXRiZV9udWxsX2luaXQsCisJLmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXAsCisJLnNl bmQgPSBuZXRiZV9udWxsX3NlbmQsCisJLnJlY3YgPSBuZXRiZV9udWxsX3JlY3YsCisJLmdldF9j YXAgPSBuZXRiZV9udWxsX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRiZV9udWxsX3NldF9jYXAs Cit9OworCitEQVRBX1NFVChuZXRfYmFja2VuZF9zLCBuX2JlKTsKKworCisvKiB0aGUgdGFwIGJh Y2tlbmQgKi8KKworc3RydWN0IHRhcF9wcml2IHsKKwlzdHJ1Y3QgbWV2ZW50ICptZXZwOworfTsK Kworc3RhdGljIHZvaWQKK3RhcF9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJ c3RydWN0IHRhcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsKKwkJ bWV2ZW50X2RlbGV0ZShwcml2LT5tZXZwKTsKKwkJZnJlZShiZS0+cHJpdik7CisJCWJlLT5wcml2 ID0gTlVMTDsKKwl9CisJaWYgKGJlLT5mZCAhPSAtMSkgeworCQljbG9zZShiZS0+ZmQpOworCQli ZS0+ZmQgPSAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9pbml0KHN0cnVjdCBuZXRfYmFj a2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZv aWQgKnBhcmFtKQoreworCWNoYXIgdGJ1Zls4MF07CisJaW50IGZkOworCWludCBvcHQgPSAxOwor CXN0cnVjdCB0YXBfcHJpdiAqcHJpdjsKKworCWlmIChjYiA9PSBOVUxMKSB7CisJCVdQUklOVEYo KCJUQVAgYmFja2VuZCByZXF1aXJlcyBub24tTlVMTCBjYWxsYmFja1xuIikpOworCQlyZXR1cm4g LTE7CisJfQorCisJcHJpdiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRhcF9wcml2KSk7CisJ aWYgKHByaXYgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgidGFwX3ByaXYgYWxsb2MgZmFpbGVkXG4i KSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdHJjcHkodGJ1ZiwgIi9kZXYvIik7CisJc3RybGNh dCh0YnVmLCBkZXZuYW1lLCBzaXplb2YodGJ1ZikpOworCisJZmQgPSBvcGVuKHRidWYsIE9fUkRX Uik7CisJaWYgKGZkID09IC0xKSB7CisJCVdQUklOVEYoKCJvcGVuIG9mIHRhcCBkZXZpY2UgJXMg ZmFpbGVkXG4iLCB0YnVmKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBTZXQgbm9u LWJsb2NraW5nIGFuZCByZWdpc3RlciBmb3IgcmVhZAorCSAqIG5vdGlmaWNhdGlvbnMgd2l0aCB0 aGUgZXZlbnQgbG9vcAorCSAqLworCWlmIChpb2N0bChmZCwgRklPTkJJTywgJm9wdCkgPCAwKSB7 CisJCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7CisJCWdvdG8g ZXJyb3I7CisJfQorCisJcHJpdi0+bWV2cCA9IG1ldmVudF9hZGQoZmQsIEVWRl9SRUFELCBjYiwg cGFyYW0pOworCWlmIChwcml2LT5tZXZwID09IE5VTEwpIHsKKwkJV1BSSU5URigoIkNvdWxkIG5v dCByZWdpc3RlciBldmVudFxuIikpOworCQlnb3RvIGVycm9yOworCX0KKworCWJlLT5mZCA9IGZk OworCWJlLT5wcml2ID0gcHJpdjsKKworCXJldHVybiAwOworCitlcnJvcjoKKwl0YXBfY2xlYW51 cChiZSk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIg Y2hhaW4gb3V0IHRvIHRoZSB0YXAgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQKK3RhcF9zZW5kKHN0 cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50 MzJfdCBsZW4sCisJaW50IG1vcmUpCit7CisJc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHpl cm8gYnl0ZXMgKi8KKworCSh2b2lkKW1vcmU7CisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwg NjAsIHBhZCBvdXQgdG8gdGhhdCBhbmQgYWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50 IHRvIHRoZSBpb3YuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBh biBleHRyYSBpb3YgYXZhaWxhYmxlIGJ5IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYw KSB7CisJCWlvdltpb3ZjbnRdLmlvdl9iYXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVu ID0gKHNpemVfdCkoNjAgLSBsZW4pOworCQlpb3ZjbnQrKzsKKwl9CisKKwlyZXR1cm4gKGludCl3 cml0ZXYoYmUtPmZkLCBpb3YsIGlvdmNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3RhcF9yZWN2KHN0 cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQorewor CWludCByZXQ7CisKKwkvKiBTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0 YXAgZmQgKi8KKwlhc3NlcnQoYmUtPmZkICE9IC0xKTsKKworCXJldCA9IChpbnQpcmVhZHYoYmUt PmZkLCBpb3YsIGlvdmNudCk7CisKKwlpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFV09VTERCTE9D SykgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDY0 X3QKK3RhcF9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJKHZvaWQpYmU7CisJ cmV0dXJuIDA7IC8vIG5vdGhpbmcgZXh0cmEKK30KKworc3RhdGljIGludAordGFwX3NldF9jYXAo c3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSB1bnNpZ25lZCB2 bmV0X2hkcl9sZW4pCit7CisJKHZvaWQpYmU7CisJcmV0dXJuIChmZWF0dXJlcyB8fCB2bmV0X2hk cl9sZW4pID8gLTEgOiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIHRhcF9iYWNr ZW5kID0geworCS5uYW1lID0gInRhcHx2bW1uZXQiLAorCS5pbml0ID0gdGFwX2luaXQsCisJLmNs ZWFudXAgPSB0YXBfY2xlYW51cCwKKwkuc2VuZCA9IHRhcF9zZW5kLAorCS5yZWN2ID0gdGFwX3Jl Y3YsCisJLmdldF9jYXAgPSB0YXBfZ2V0X2NhcCwKKwkuc2V0X2NhcCA9IHRhcF9zZXRfY2FwLAor fTsKKworREFUQV9TRVQobmV0X2JhY2tlbmRfcywgdGFwX2JhY2tlbmQpOworCisjaWZkZWYgV0lU SF9ORVRNQVAKKworLyoKKyAqIFRoZSBuZXRtYXAgYmFja2VuZAorICovCisKKy8qIFRoZSB2aXJ0 aW8tbmV0IGZlYXR1cmVzIHN1cHBvcnRlZCBieSBuZXRtYXAuICovCisjZGVmaW5lIE5FVE1BUF9G RUFUVVJFUyAoVklSVElPX05FVF9GX0NTVU0gfCBWSVJUSU9fTkVUX0ZfSE9TVF9UU080IHwgXAor CQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082IHwgVklSVElPX05FVF9GX0hPU1RfVUZPIHwgXAorCQlW SVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTSB8IFZJUlRJT19ORVRfRl9HVUVTVF9UU080IHwgXAorCQlW SVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiB8IFZJUlRJT19ORVRfRl9HVUVTVF9VRk8pCisKKyNkZWZp bmUgTkVUTUFQX1BPTExNQVNLIChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCkKKwor c3RydWN0IG5ldG1hcF9wcml2IHsKKwljaGFyIGlmbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IG5t X2Rlc2MgKm5tZDsKKwl1aW50MTZfdCBtZW1pZDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJ4Owor CXN0cnVjdCBuZXRtYXBfcmluZyAqdHg7CisJcHRocmVhZF90IGV2bG9vcF90aWQ7CisJbmV0X2Jh Y2tlbmRfY2JfdCBjYjsKKwl2b2lkICpjYl9wYXJhbTsKKworCXN0cnVjdCBwdG5ldG1hcF9zdGF0 ZSBwdG5ldG1hcDsKK307CisKK3N0YXRpYyB2b2lkICoKK25ldG1hcF9ldmxvb3BfdGhyZWFkKHZv aWQgKnBhcmFtKQoreworCXN0cnVjdCBuZXRfYmFja2VuZCAqYmUgPSBwYXJhbTsKKwlzdHJ1Y3Qg bmV0bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwlpbnQg cmV0OworCisJZm9yICg7OykgeworCQlwZmQuZmQgPSBiZS0+ZmQ7CisJCXBmZC5ldmVudHMgPSBO RVRNQVBfUE9MTE1BU0s7CisJCXJldCA9IHBvbGwoJnBmZCwgMSwgSU5GVElNKTsKKwkJaWYgKHJl dCA9PSAtMSAmJiBlcnJubyAhPSBFSU5UUikgeworCQkJV1BSSU5URigoIm5ldG1hcCBwb2xsIGZh aWxlZCwgJWRcbiIsIGVycm5vKSk7CisJCX0gZWxzZSBpZiAocmV0ID09IDEgJiYgKHBmZC5yZXZl bnRzICYgTkVUTUFQX1BPTExNQVNLKSkgeworCQkJcHJpdi0+Y2IocGZkLmZkLCBFVkZfUkVBRCwg cHJpdi0+Y2JfcGFyYW0pOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2 b2lkCitubXJlcV9pbml0KHN0cnVjdCBubXJlcSAqcmVxLCBjaGFyICppZm5hbWUpCit7CisJbWVt c2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKwlzdHJuY3B5KHJlcS0+bnJfbmFtZSwgaWZuYW1l LCBzaXplb2YocmVxLT5ucl9uYW1lKSk7CisJcmVxLT5ucl92ZXJzaW9uID0gTkVUTUFQX0FQSTsK K30KKworc3RhdGljIGludAorbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9iYWNr ZW5kICpiZSwgaW50IHZuZXRfaGRyX2xlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBubXJlcSBy ZXE7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlubXJlcV9pbml0 KCZyZXEsIHByaXYtPmlmbmFtZSk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9CREdfVk5FVF9IRFI7 CisJcmVxLm5yX2FyZzEgPSB2bmV0X2hkcl9sZW47CisJZXJyID0gaW9jdGwoYmUtPmZkLCBOSU9D UkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBzZXQgdm5l dCBoZWFkZXIgbGVuZ3RoICVkXG4iLAorCQkJCXZuZXRfaGRyX2xlbikpOworCQlyZXR1cm4gZXJy OworCX0KKworCWJlLT5iZV92bmV0X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludAorbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oc3RydWN0IG5ldF9i YWNrZW5kICpiZSwgdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCWludCBwcmV2X2hkcl9sZW4g PSBiZS0+YmVfdm5ldF9oZHJfbGVuOworCWludCByZXQ7CisKKwlpZiAodm5ldF9oZHJfbGVuID09 IHByZXZfaGRyX2xlbikgeworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXQgPSBuZXRtYXBfc2V0X3Zu ZXRfaGRyX2xlbihiZSwgdm5ldF9oZHJfbGVuKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiAwOwor CX0KKworCW5ldG1hcF9zZXRfdm5ldF9oZHJfbGVuKGJlLCBwcmV2X2hkcl9sZW4pOworCisJcmV0 dXJuIDE7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorbmV0bWFwX2dldF9jYXAoc3RydWN0IG5ldF9i YWNrZW5kICpiZSkKK3sKKwlyZXR1cm4gbmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUsIFZORVRf SERSX0xFTikgPworCQkJTkVUTUFQX0ZFQVRVUkVTIDogMDsKK30KKworc3RhdGljIGludAorbmV0 bWFwX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJ ICAgICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sKKwlyZXR1cm4gbmV0bWFwX3NldF92bmV0 X2hkcl9sZW4oYmUsIHZuZXRfaGRyX2xlbik7Cit9CisKKy8qIFN0b3JlIGFuZCByZXR1cm4gdGhl IGZlYXR1cmVzIHdlIGFncmVlZCB1cG9uLiAqLwordWludDMyX3QKK3B0bmV0bWFwX2Fja19mZWF0 dXJlcyhzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVz KQoreworCXB0bi0+YWNrZWRfZmVhdHVyZXMgPSBwdG4tPmZlYXR1cmVzICYgd2FudGVkX2ZlYXR1 cmVzOworCisJcmV0dXJuIHB0bi0+YWNrZWRfZmVhdHVyZXM7Cit9CisKK3N0cnVjdCBwdG5ldG1h cF9zdGF0ZSAqCitnZXRfcHRuZXRtYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlzdHJ1 Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBiZSA/IGJlLT5wcml2IDogTlVMTDsKKwlzdHJ1Y3QgbmV0 bWFwX3Bvb2xzX2luZm8gcGk7CisJc3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJLyog Q2hlY2sgdGhhdCB0aGlzIGlzIGEgcHRuZXRtYXAgYmFja2VuZC4gKi8KKwlpZiAoIWJlIHx8IGJl LT5zZXRfY2FwICE9IG5ldG1hcF9zZXRfY2FwIHx8CisJCQkhKHByaXYtPm5tZC0+cmVxLm5yX2Zs YWdzICYgTlJfUFRORVRNQVBfSE9TVCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm1yZXFf aW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCXJlcS5ucl9jbWQgPSBORVRNQVBfUE9PTFNfSU5G T19HRVQ7CisJbm1yZXFfcG9pbnRlcl9wdXQoJnJlcSwgJnBpKTsKKwllcnIgPSBpb2N0bChwcml2 LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJZXJyID0gcHRuX21lbWRldl9hdHRhY2gocHJpdi0+bm1kLT5tZW0sICZwaSk7CisJ aWYgKGVycikgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gJnByaXYtPnB0bmV0bWFw OworfQorCitpbnQKK3B0bmV0bWFwX2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0bWFwX3N0YXRl ICpwdG4sIHN0cnVjdCBuZXRtYXBfaWZfaW5mbyAqbmlmKQoreworCXN0cnVjdCBuZXRtYXBfcHJp diAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisKKwltZW1zZXQobmlmLCAwLCBzaXplb2YoKm5p ZikpOworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkgeworCQlyZXR1cm4gRUlOVkFMOworCX0KKwor CW5pZi0+bmlmcF9vZmZzZXQgPSBwcml2LT5ubWQtPnJlcS5ucl9vZmZzZXQ7CisJbmlmLT5udW1f dHhfcmluZ3MgPSBwcml2LT5ubWQtPnJlcS5ucl90eF9yaW5nczsKKwluaWYtPm51bV9yeF9yaW5n cyA9IHByaXYtPm5tZC0+cmVxLm5yX3J4X3JpbmdzOworCW5pZi0+bnVtX3R4X3Nsb3RzID0gcHJp di0+bm1kLT5yZXEubnJfdHhfc2xvdHM7CisJbmlmLT5udW1fcnhfc2xvdHMgPSBwcml2LT5ubWQt PnJlcS5ucl9yeF9zbG90czsKKworCXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2dldF9o b3N0bWVtaWQoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pCit7CisJc3RydWN0IG5ldG1hcF9w cml2ICpwcml2ID0gcHRuLT5uZXRtYXBfcHJpdjsKKworCWlmIChwcml2LT5ubWQgPT0gTlVMTCkg eworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCXJldHVybiBwcml2LT5tZW1pZDsKK30KKworaW50 CitwdG5ldG1hcF9jcmVhdGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5l dG1hcF9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1h cF9wcml2OworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IGVycjsKKworCWlmIChwdG4tPnJ1bm5p bmcpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogWFhYIFdlIHNob3VsZCBzdG9wIHRoZSBuZXRt YXAgZXZsb29wIGhlcmUuICovCisKKwkvKiBBc2sgbmV0bWFwIHRvIGNyZWF0ZSBrdGhyZWFkcyBm b3IgdGhpcyBpbnRlcmZhY2UuICovCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOwor CW5tcmVxX3BvaW50ZXJfcHV0KCZyZXEsIGNmZyk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9I T1NUX0NSRUFURTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEp OworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBw dG5ldG1hcCBrdGhyZWFkcyBvbiAiCisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2 LT5pZm5hbWUsIGVycm5vKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAx OworCisJcmV0dXJuIDA7Cit9CisKK2ludAorcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1h cF9zdGF0ZSAqcHRuKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFw X3ByaXY7CisJc3RydWN0IG5tcmVxIHJlcTsKKwlpbnQgZXJyOworCisJaWYgKCFwdG4tPnJ1bm5p bmcpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQXNrIG5ldG1hcCB0byBkZWxldGUga3RocmVh ZHMgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1l KTsKKwlyZXEubnJfY21kID0gTkVUTUFQX1BUX0hPU1RfREVMRVRFOworCWVyciA9IGlvY3RsKHBy aXYtPm5tZC0+ZmQsIE5JT0NSRUdJRiwgJnJlcSk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0 ZGVyciwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIHB0bmV0bWFwIGt0aHJlYWRzIG9uICIKKwkJCSIl cyBbZXJybm89JWRdIiwgX19mdW5jX18sIHByaXYtPmlmbmFtZSwgZXJybm8pOworCQlyZXR1cm4g ZXJyOworCX0KKworCXB0bi0+cnVubmluZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludAorbmV0bWFwX2luaXQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgY29uc3QgY2hhciAqZGV2 bmFtZSwKKwkgICAgbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJY29uc3Qg Y2hhciAqbmRuYW1lID0gIi9kZXYvbmV0bWFwIjsKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYg PSBOVUxMOworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IHB0bmV0bWFwID0gKGNiID09IE5VTEwp OworCisJcHJpdiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG5ldG1hcF9wcml2KSk7CisJaWYg KHByaXYgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgiVW5hYmxlIGFsbG9jIG5ldG1hcCBwcml2YXRl IGRhdGFcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cm5jcHkocHJpdi0+aWZuYW1lLCBk ZXZuYW1lLCBzaXplb2YocHJpdi0+aWZuYW1lKSk7CisJcHJpdi0+aWZuYW1lW3NpemVvZihwcml2 LT5pZm5hbWUpIC0gMV0gPSAnXDAnOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsK KwlyZXEubnJfZmxhZ3MgPSBwdG5ldG1hcCA/IE5SX1BUTkVUTUFQX0hPU1QgOiAwOworCisJcHJp di0+bm1kID0gbm1fb3Blbihwcml2LT5pZm5hbWUsICZyZXEsIE5FVE1BUF9OT19UWF9QT0xMLCBO VUxMKTsKKwlpZiAocHJpdi0+bm1kID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSB0byBu bV9vcGVuKCk6IGRldmljZSAnJXMnLCAiCisJCQkJImludGVyZmFjZSAnJXMnLCBlcnJubyAoJXMp XG4iLAorCQkJCW5kbmFtZSwgZGV2bmFtZSwgc3RyZXJyb3IoZXJybm8pKSk7CisJCWZyZWUocHJp dik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwcml2LT5tZW1pZCA9IHByaXYtPm5tZC0+cmVxLm5y X2FyZzI7CisJcHJpdi0+dHggPSBORVRNQVBfVFhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJ cHJpdi0+cnggPSBORVRNQVBfUlhSSU5HKHByaXYtPm5tZC0+bmlmcCwgMCk7CisJcHJpdi0+Y2Ig PSBjYjsKKwlwcml2LT5jYl9wYXJhbSA9IHBhcmFtOworCWJlLT5mZCA9IHByaXYtPm5tZC0+ZmQ7 CisJYmUtPnByaXYgPSBwcml2OworCisJcHJpdi0+cHRuZXRtYXAubmV0bWFwX3ByaXYgPSBwcml2 OworCXByaXYtPnB0bmV0bWFwLmZlYXR1cmVzID0gMDsKKwlwcml2LT5wdG5ldG1hcC5hY2tlZF9m ZWF0dXJlcyA9IDA7CisJcHJpdi0+cHRuZXRtYXAucnVubmluZyA9IDA7CisJaWYgKHB0bmV0bWFw KSB7CisJCWlmIChuZXRtYXBfaGFzX3ZuZXRfaGRyX2xlbihiZSwgVk5FVF9IRFJfTEVOKSkgewor CQkJcHJpdi0+cHRuZXRtYXAuZmVhdHVyZXMgfD0gUFRORVRNQVBfRl9WTkVUX0hEUjsKKwkJfQor CX0gZWxzZSB7CisJCWNoYXIgdG5hbWVbNDBdOworCisJCS8qIENyZWF0ZSBhIHRocmVhZCBmb3Ig bmV0bWFwIHBvbGwuICovCisJCXB0aHJlYWRfY3JlYXRlKCZwcml2LT5ldmxvb3BfdGlkLCBOVUxM LCBuZXRtYXBfZXZsb29wX3RocmVhZCwgKHZvaWQgKiliZSk7CisJCXNucHJpbnRmKHRuYW1lLCBz aXplb2YodG5hbWUpLCAibmV0bWFwLWV2bG9vcC0lcCIsIHByaXYpOworCQlwdGhyZWFkX3NldF9u YW1lX25wKHByaXYtPmV2bG9vcF90aWQsIHRuYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQKK25ldG1hcF9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJ c3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisKKwlpZiAoYmUtPnByaXYpIHsK KwkJaWYgKHByaXYtPnB0bmV0bWFwLnJ1bm5pbmcpIHsKKwkJCXB0bmV0bWFwX2RlbGV0ZSgmcHJp di0+cHRuZXRtYXApOworCQl9CisJCW5tX2Nsb3NlKHByaXYtPm5tZCk7CisJCWZyZWUoYmUtPnBy aXYpOworCQliZS0+cHJpdiA9IE5VTEw7CisJfQorCWJlLT5mZCA9IC0xOworfQorCisvKiBBIGZh c3QgY29weSByb3V0aW5lIG9ubHkgZm9yIG11bHRpcGxlcyBvZiA2NCBieXRlcywgbm9uIG92ZXJs YXBwZWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3BrdF9jb3B5KGNvbnN0IHZvaWQgKl9zcmMs IHZvaWQgKl9kc3QsIGludCBsKQoreworICAgIGNvbnN0IHVpbnQ2NF90ICpzcmMgPSBfc3JjOwor ICAgIHVpbnQ2NF90ICpkc3QgPSBfZHN0OworICAgIGlmIChsID49IDEwMjQpIHsKKyAgICAgICAg YmNvcHkoc3JjLCBkc3QsIGwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoOyBs ID4gMDsgbCAtPSA2NCkgeworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3Qr KyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAq c3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysr OworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAg ICB9Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUs IHN0cnVjdCBpb3ZlYyAqaW92LAorCSAgICBpbnQgaW92Y250LCB1aW50MzJfdCBzaXplLCBpbnQg bW9yZSkKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBiZS0+cHJpdjsKKwlzdHJ1Y3Qg bmV0bWFwX3JpbmcgKnJpbmc7CisJaW50IG5tX2J1Zl9zaXplOworCWludCBubV9idWZfbGVuOwor CXVpbnQzMl90IGhlYWQ7CisJdm9pZCAqbm1fYnVmOworCWludCBqOworCisJaWYgKGlvdmNudCA8 PSAwIHx8IHNpemUgPD0gMCkgeworCQlEKCJXcm9uZyBpb3Y6IGlvdmNudCAlZCBzaXplICVkIiwg aW92Y250LCBzaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmluZyA9IHByaXYtPnR4OworCWhl YWQgPSByaW5nLT5oZWFkOworCWlmIChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJUkQoMSwgIk5v IHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6ZSk7CisJCWdvdG8gdHhzeW5jOworCX0KKwlubV9i dWYgPSBORVRNQVBfQlVGKHJpbmcsIHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJbm1fYnVm X3NpemUgPSByaW5nLT5ucl9idWZfc2l6ZTsKKwlubV9idWZfbGVuID0gMDsKKworCWZvciAoaiA9 IDA7IGogPCBpb3ZjbnQ7IGorKykgeworCQlpbnQgaW92X2ZyYWdfc2l6ZSA9IGlvdltqXS5pb3Zf bGVuOworCQl2b2lkICppb3ZfZnJhZ19idWYgPSBpb3Zbal0uaW92X2Jhc2U7CisKKwkJLyogU3Bs aXQgZWFjaCBpb3ZlYyBmcmFnbWVudCBvdmVyIG1vcmUgbmV0bWFwIHNsb3RzLCBpZgorCQkgICBu ZWNlc3NhcnkuICovCisJCWZvciAoOzspIHsKKwkJCWludCBjb3B5bGVuOworCisJCQljb3B5bGVu ID0gaW92X2ZyYWdfc2l6ZSA8IG5tX2J1Zl9zaXplID8gaW92X2ZyYWdfc2l6ZSA6IG5tX2J1Zl9z aXplOworCQkJcGt0X2NvcHkoaW92X2ZyYWdfYnVmLCBubV9idWYsIGNvcHlsZW4pOworCisJCQlp b3ZfZnJhZ19idWYgKz0gY29weWxlbjsKKwkJCWlvdl9mcmFnX3NpemUgLT0gY29weWxlbjsKKwkJ CW5tX2J1ZiArPSBjb3B5bGVuOworCQkJbm1fYnVmX3NpemUgLT0gY29weWxlbjsKKwkJCW5tX2J1 Zl9sZW4gKz0gY29weWxlbjsKKworCQkJaWYgKGlvdl9mcmFnX3NpemUgPT0gMCkgeworCQkJCWJy ZWFrOworCQkJfQorCisJCQlyaW5nLT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJCQly aW5nLT5zbG90W2hlYWRdLmZsYWdzID0gTlNfTU9SRUZSQUc7CisJCQloZWFkID0gbm1fcmluZ19u ZXh0KHJpbmcsIGhlYWQpOworCQkJaWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJCS8qIFdl IHJhbiBvdXQgb2YgbmV0bWFwIHNsb3RzIHdoaWxlCisJCQkJICogc3BsaXR0aW5nIHRoZSBpb3Zl YyBmcmFnbWVudHMuICovCisJCQkJUkQoMSwgIk5vIHNwYWNlLCBkcm9wICVkIGJ5dGVzIiwgc2l6 ZSk7CisJCQkJZ290byB0eHN5bmM7CisJCQl9CisJCQlubV9idWYgPSBORVRNQVBfQlVGKHJpbmcs IHJpbmctPnNsb3RbaGVhZF0uYnVmX2lkeCk7CisJCQlubV9idWZfc2l6ZSA9IHJpbmctPm5yX2J1 Zl9zaXplOworCQkJbm1fYnVmX2xlbiA9IDA7CisJCX0KKwl9CisKKwkvKiBDb21wbGV0ZSB0aGUg bGFzdCBzbG90LCB3aGljaCBtdXN0IG5vdCBoYXZlIE5TX01PUkVGUkFHIHNldC4gKi8KKwlyaW5n LT5zbG90W2hlYWRdLmxlbiA9IG5tX2J1Zl9sZW47CisJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9 IDA7CisJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCS8qIE5vdyB1cGRhdGUg cmluZy0+aGVhZCBhbmQgcmluZy0+Y3VyLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBo ZWFkOworCisJaWYgKG1vcmUpIHsvLyAmJiBubV9yaW5nX3NwYWNlKHJpbmcpID4gNjQKKwkJcmV0 dXJuIDA7CisJfQordHhzeW5jOgorCWlvY3RsKGJlLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0bWFwX3JlY3Yoc3RydWN0IG5ldF9iYWNr ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpCit7CisJc3RydWN0IG5ldG1h cF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisJc3RydWN0IG5ldG1hcF9zbG90ICpzbG90ID0gTlVM TDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmc7CisJdm9pZCAqaW92X2ZyYWdfYnVmOworCWlu dCBpb3ZfZnJhZ19zaXplOworCWludCB0b3RsZW4gPSAwOworCXVpbnQzMl90IGhlYWQ7CisKKwlh c3NlcnQoaW92Y250KTsKKworCXJpbmcgPSBwcml2LT5yeDsKKwloZWFkID0gcmluZy0+aGVhZDsK Kwlpb3ZfZnJhZ19idWYgPSBpb3YtPmlvdl9iYXNlOworCWlvdl9mcmFnX3NpemUgPSBpb3YtPmlv dl9sZW47CisKKwlkbyB7CisJCWludCBubV9idWZfbGVuOworCQl2b2lkICpubV9idWY7CisKKwkJ aWYgKGhlYWQgPT0gcmluZy0+dGFpbCkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzbG90ID0g cmluZy0+c2xvdCArIGhlYWQ7CisJCW5tX2J1ZiA9IE5FVE1BUF9CVUYocmluZywgc2xvdC0+YnVm X2lkeCk7CisJCW5tX2J1Zl9sZW4gPSBzbG90LT5sZW47CisKKwkJZm9yICg7OykgeworCQkJaW50 IGNvcHlsZW4gPSBubV9idWZfbGVuIDwgaW92X2ZyYWdfc2l6ZSA/IG5tX2J1Zl9sZW4gOiBpb3Zf ZnJhZ19zaXplOworCisJCQlwa3RfY29weShubV9idWYsIGlvdl9mcmFnX2J1ZiwgY29weWxlbik7 CisJCQlubV9idWYgKz0gY29weWxlbjsKKwkJCW5tX2J1Zl9sZW4gLT0gY29weWxlbjsKKwkJCWlv dl9mcmFnX2J1ZiArPSBjb3B5bGVuOworCQkJaW92X2ZyYWdfc2l6ZSAtPSBjb3B5bGVuOworCQkJ dG90bGVuICs9IGNvcHlsZW47CisKKwkJCWlmIChubV9idWZfbGVuID09IDApIHsKKwkJCQlicmVh azsKKwkJCX0KKworCQkJaW92Kys7CisJCQlpb3ZjbnQtLTsKKwkJCWlmIChpb3ZjbnQgPT0gMCkg eworCQkJCS8qIE5vIHNwYWNlIHRvIHJlY2VpdmUuICovCisJCQkJRCgiU2hvcnQgaW92LCBkcm9w ICVkIGJ5dGVzIiwgdG90bGVuKTsKKwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJCX0KKwkJCWlvdl9m cmFnX2J1ZiA9IGlvdi0+aW92X2Jhc2U7CisJCQlpb3ZfZnJhZ19zaXplID0gaW92LT5pb3ZfbGVu OworCQl9CisKKwkJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKworCX0gd2hpbGUg KHNsb3QtPmZsYWdzICYgTlNfTU9SRUZSQUcpOworCisJLyogUmVsZWFzZSBzbG90cyB0byBuZXRt YXAuICovCisJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IGhlYWQ7CisKKwlyZXR1cm4gdG90bGVu OworfQorCitzdGF0aWMgc3RydWN0IG5ldF9iYWNrZW5kIG5ldG1hcF9iYWNrZW5kID0geworCS5u YW1lID0gIm5ldG1hcHx2YWxlIiwKKwkuaW5pdCA9IG5ldG1hcF9pbml0LAorCS5jbGVhbnVwID0g bmV0bWFwX2NsZWFudXAsCisJLnNlbmQgPSBuZXRtYXBfc2VuZCwKKwkucmVjdiA9IG5ldG1hcF9y ZWN2LAorCS5nZXRfY2FwID0gbmV0bWFwX2dldF9jYXAsCisJLnNldF9jYXAgPSBuZXRtYXBfc2V0 X2NhcCwKK307CisKK0RBVEFfU0VUKG5ldF9iYWNrZW5kX3MsIG5ldG1hcF9iYWNrZW5kKTsKKwor I2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKy8qCisgKiBtYWtlIHN1cmUgYSBiYWNrZW5kIGlz IHByb3Blcmx5IGluaXRpYWxpemVkCisgKi8KK3N0YXRpYyB2b2lkCituZXRiZV9maXgoc3RydWN0 IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChi ZS0+bmFtZSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBuYW1lIGZvciAl cFxuIiwgYmUpOworCQliZS0+bmFtZSA9ICJ1bm5hbWVkIG5ldGJlIjsKKwl9CisJaWYgKGJlLT5p bml0ID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGluaXQgZm9yICVwICVz XG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+aW5pdCA9IG5ldGJlX251bGxfaW5pdDsKKwl9CisJ aWYgKGJlLT5jbGVhbnVwID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGNs ZWFudXAgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+Y2xlYW51cCA9IG5ldGJl X251bGxfY2xlYW51cDsKKwl9CisJaWYgKGJlLT5zZW5kID09IE5VTEwpIHsKKwkJZnByaW50Zihz dGRlcnIsICJtaXNzaW5nIHNlbmQgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUpOworCQliZS0+ c2VuZCA9IG5ldGJlX251bGxfc2VuZDsKKwl9CisJaWYgKGJlLT5yZWN2ID09IE5VTEwpIHsKKwkJ ZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIHJlY3YgZm9yICVwICVzXG4iLCBiZSwgYmUtPm5hbWUp OworCQliZS0+cmVjdiA9IG5ldGJlX251bGxfcmVjdjsKKwl9CisJaWYgKGJlLT5nZXRfY2FwID09 IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtaXNzaW5nIGdldF9jYXAgZm9yICVwICVzXG4i LAorCQkJYmUsIGJlLT5uYW1lKTsKKwkJYmUtPmdldF9jYXAgPSBuZXRiZV9udWxsX2dldF9jYXA7 CisJfQorCWlmIChiZS0+c2V0X2NhcCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlz c2luZyBzZXRfY2FwIGZvciAlcCAlc1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5zZXRf Y2FwID0gbmV0YmVfbnVsbF9zZXRfY2FwOworCX0KK30KKworLyoKKyAqIGtleXMgaXMgYSBzZXQg b2YgcHJlZml4ZXMgc2VwYXJhdGVkIGJ5ICd8JywKKyAqIHJldHVybiAxIGlmIHRoZSBsZWZ0bW9z dCBwYXJ0IG9mIG5hbWUgbWF0Y2hlcyBvbmUgcHJlZml4LgorICovCitzdGF0aWMgY29uc3QgY2hh ciAqCituZXRiZV9uYW1lX21hdGNoKGNvbnN0IGNoYXIgKmtleXMsIGNvbnN0IGNoYXIgKm5hbWUp Cit7CisJY29uc3QgY2hhciAqbiA9IG5hbWUsICpnb29kID0ga2V5czsKKwljaGFyIGM7CisKKwlp ZiAoIWtleXMgfHwgIW5hbWUpCisJCXJldHVybiBOVUxMOworCXdoaWxlICggKGMgPSAqa2V5cysr KSApIHsKKwkJaWYgKGMgPT0gJ3wnKSB7IC8qIHJlYWNoZWQgdGhlIHNlcGFyYXRvciAqLworCQkJ aWYgKGdvb2QpCisJCQkJYnJlYWs7CisJCQkvKiBwcmVwYXJlIGZvciBuZXcgcm91bmQgKi8KKwkJ CW4gPSBuYW1lOworCQkJZ29vZCA9IGtleXM7CisJCX0gZWxzZSBpZiAoZ29vZCAmJiBjICE9ICpu KyspIHsKKwkJCWdvb2QgPSBOVUxMOyAvKiBkcm9wIHRpbGwgbmV4dCBrZXl3b3JkICovCisJCX0K Kwl9CisJcmV0dXJuIGdvb2Q7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgYmFja2VuZCBhbmQg YXR0YWNoIHRvIHRoZSBmcm9udGVuZC4KKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBmcm9udGVu ZCBpbml0aWFsaXphdGlvbi4KKyAqIGRldm5hbWUgaXMgdGhlIGJhY2tlbmQtbmFtZSBhcyBzdXBw bGllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAorICogCWUuZy4gLXMgMjowLGZyb250ZW5kLW5hbWUs YmFja2VuZC1uYW1lWyxvdGhlci1hcmdzXQorICogY2IgaXMgdGhlIHJlY2VpdmUgY2FsbGJhY2sg c3VwcGxpZWQgYnkgdGhlIGZyb250ZW5kLAorICoJYW5kIGl0IGlzIGludm9rZWQgaW4gdGhlIGV2 ZW50IGxvb3Agd2hlbiBhIHJlY2VpdmUKKyAqCWV2ZW50IGlzIGdlbmVyYXRlZCBpbiB0aGUgaHlw ZXJ2aXNvciwKKyAqIHBhcmFtIGlzIGEgcG9pbnRlciB0byB0aGUgZnJvbnRlbmQsIGFuZCBub3Jt YWxseSB1c2VkIGFzCisgKgl0aGUgYXJndW1lbnQgZm9yIHRoZSBjYWxsYmFjay4KKyAqLworc3Ry dWN0IG5ldF9iYWNrZW5kICoKK25ldGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwgbmV0X2Jh Y2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pCit7CisJc3RydWN0IG5ldF9iYWNrZW5kICoqcGJl LCAqYmUsICp0YmUgPSBOVUxMOworCWludCBlcnI7CisKKwkvKgorCSAqIEZpbmQgdGhlIG5ldHdv cmsgYmFja2VuZCBkZXBlbmRpbmcgb24gdGhlIHVzZXItcHJvdmlkZWQKKwkgKiBkZXZpY2UgbmFt ZS4gbmV0X2JhY2tlbmRfcyBpcyBidWlsdCB1c2luZyBhIGxpbmtlciBzZXQuCisJICovCisJU0VU X0ZPUkVBQ0gocGJlLCBuZXRfYmFja2VuZF9zKSB7CisJCWlmIChuZXRiZV9uYW1lX21hdGNoKCgq cGJlKS0+bmFtZSwgZGV2bmFtZSkpIHsKKwkJCXRiZSA9ICpwYmU7CisJCQlicmVhazsKKwkJfQor CX0KKwlpZiAodGJlID09IE5VTEwpCisJCXJldHVybiBOVUxMOyAvKiBvciBudWxsIGJhY2tlbmQg PyAqLworCWJlID0gY2FsbG9jKDEsIHNpemVvZigqYmUpKTsKKwkqYmUgPSAqdGJlOwkvKiBjb3B5 IHRoZSB0ZW1wbGF0ZSAqLworCW5ldGJlX2ZpeChiZSk7IC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGFs bCBmaWVsZHMgKi8KKwliZS0+ZmQgPSAtMTsKKwliZS0+cHJpdiA9IE5VTEw7CisJYmUtPnNjID0g cGFyYW07CisJYmUtPmJlX3ZuZXRfaGRyX2xlbiA9IDA7CisJYmUtPmZlX3ZuZXRfaGRyX2xlbiA9 IDA7CisKKwkvKiBpbml0aWFsaXplIHRoZSBiYWNrZW5kICovCisJZXJyID0gYmUtPmluaXQoYmUs IGRldm5hbWUsIGNiLCBwYXJhbSk7CisJaWYgKGVycikgeworCQlmcmVlKGJlKTsKKwkJYmUgPSBO VUxMOworCX0KKwlyZXR1cm4gYmU7Cit9CisKK3ZvaWQKK25ldGJlX2NsZWFudXAoc3RydWN0IG5l dF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWJlLT5jbGVh bnVwKGJlKTsKKwlmcmVlKGJlKTsKK30KKwordWludDY0X3QKK25ldGJlX2dldF9jYXAoc3RydWN0 IG5ldF9iYWNrZW5kICpiZSkKK3sKKwlpZiAoYmUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0 dXJuIGJlLT5nZXRfY2FwKGJlKTsKK30KKworaW50CituZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRf YmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1cmVzLAorCSAgICAgIHVuc2lnbmVkIHZuZXRfaGRy X2xlbikKK3sKKwlpbnQgcmV0OworCisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAwOworCisJ LyogVGhlcmUgYXJlIG9ubHkgdGhyZWUgdmFsaWQgbGVuZ3Rocy4gKi8KKwlpZiAodm5ldF9oZHJf bGVuICYmIHZuZXRfaGRyX2xlbiAhPSBWTkVUX0hEUl9MRU4KKwkJJiYgdm5ldF9oZHJfbGVuICE9 IChWTkVUX0hEUl9MRU4gLSBzaXplb2YodWludDE2X3QpKSkKKwkJcmV0dXJuIC0xOworCisJYmUt PmZlX3ZuZXRfaGRyX2xlbiA9IHZuZXRfaGRyX2xlbjsKKworCXJldCA9IGJlLT5zZXRfY2FwKGJl LCBmZWF0dXJlcywgdm5ldF9oZHJfbGVuKTsKKwlhc3NlcnQoYmUtPmJlX3ZuZXRfaGRyX2xlbiA9 PSAwIHx8CisJICAgICAgIGJlLT5iZV92bmV0X2hkcl9sZW4gPT0gYmUtPmZlX3ZuZXRfaGRyX2xl bik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbmxpbmUgc3RydWN0IGlvdmVjICoK K2lvdl90cmltKHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgKmlvdmNudCwgdW5zaWduZWQgaW50IHRs ZW4pCit7CisJc3RydWN0IGlvdmVjICpyaW92OworCisJLyogWFhYIHNob3J0LWN1dDogYXNzdW1l IGZpcnN0IHNlZ21lbnQgaXMgPj0gdGxlbiAqLworCWFzc2VydChpb3ZbMF0uaW92X2xlbiA+PSB0 bGVuKTsKKworCWlvdlswXS5pb3ZfbGVuIC09IHRsZW47CisJaWYgKGlvdlswXS5pb3ZfbGVuID09 IDApIHsKKwkJYXNzZXJ0KCppb3ZjbnQgPiAxKTsKKwkJKmlvdmNudCAtPSAxOworCQlyaW92ID0g JmlvdlsxXTsKKwl9IGVsc2UgeworCQlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKSgodWludHB0 cl90KWlvdlswXS5pb3ZfYmFzZSArIHRsZW4pOworCQlyaW92ID0gJmlvdlswXTsKKwl9CisKKwly ZXR1cm4gKHJpb3YpOworfQorCit2b2lkCituZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAq YmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sCisJICAgaW50 IG1vcmUpCit7CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybjsKKyNpZiAwCisJaW50IGk7CisJ RCgic2VuZGluZyBpb3ZjbnQgJWQgbGVuICVkIGlvdmVjICVwIiwgaW92Y250LCBsZW4sIGlvdik7 CisJZm9yIChpPTA7IGkgPCBpb3ZjbnQ7IGkrKykKKwkJRCgiICAgJTNkOiAlNGQgJXAiLCBpLCAo aW50KWlvdltpXS5pb3ZfbGVuLCBpb3ZbaV0uaW92X2Jhc2UpOworI2VuZGlmCisJaWYgKGJlLT5i ZV92bmV0X2hkcl9sZW4gIT0gYmUtPmZlX3ZuZXRfaGRyX2xlbikgeworCQkvKiBIZXJlIHdlIGFy ZSBzdXJlIGJlLT5iZV92bmV0X2hkcl9sZW4gaXMgMC4gKi8KKwkJaW92ID0gaW92X3RyaW0oaW92 LCAmaW92Y250LCBiZS0+ZmVfdm5ldF9oZHJfbGVuKTsKKwl9CisKKwliZS0+c2VuZChiZSwgaW92 LCBpb3ZjbnQsIGxlbiwgbW9yZSk7Cit9CisKKy8qCisgKiBjYW4gcmV0dXJuIC0xIGluIGNhc2Ug b2YgZXJyb3JzCisgKi8KK2ludAorbmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBz dHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKK3sKKwl1bnNpZ25lZCBpbnQgaGxlbiA9IDA7 IC8qIGxlbmd0aCBvZiBwcmVwZW5kZWQgdmlydGlvLW5ldCBoZWFkZXIgKi8KKwlpbnQgcmV0Owor CisJaWYgKGJlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmIChiZS0+YmVfdm5ldF9oZHJf bGVuICE9IGJlLT5mZV92bmV0X2hkcl9sZW4pIHsKKwkJc3RydWN0IHZpcnRpb19uZXRfcnhoZHIg KnZoOworCisJCS8qIEhlcmUgd2UgYXJlIHN1cmUgYmUtPmJlX3ZuZXRfaGRyX2xlbiBpcyAwLiAq LworCQlobGVuID0gYmUtPmZlX3ZuZXRfaGRyX2xlbjsKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRl ciB0byB0aGUgcnggaGVhZGVyLCBhbmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZv bGxvd2luZyBpdCBmb3IgdGhlIHBhY2tldCBidWZmZXIuCisJCSAqLworCQl2aCA9IGlvdlswXS5p b3ZfYmFzZTsKKwkJaW92ID0gaW92X3RyaW0oaW92LCAmaW92Y250LCBobGVuKTsKKworCQkvKgor CQkgKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5mZV92bmV0X2hkcl9sZW4gaXMgMC4KKwkJICogVGhl IG9ubHkgdmFsaWQgZmllbGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51 bWJlciBvZiBidWZmZXJzIGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICov CisJCW1lbXNldCh2aCwgMCwgaGxlbik7CisKKwkJaWYgKGhsZW4gPT0gVk5FVF9IRFJfTEVOKSB7 CisJCQl2aC0+dnJoX2J1ZnMgPSAxOworCQl9CisJfQorCisJcmV0ID0gYmUtPnJlY3YoYmUsIGlv diwgaW92Y250KTsKKwlpZiAocmV0ID4gMCkgeworCQlyZXQgKz0gaGxlbjsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogUmVhZCBhIHBhY2tldCBmcm9tIHRoZSBiYWNrZW5kIGFuZCBk aXNjYXJkIGl0LgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGlzY2FyZGVkIHBhY2tldCBv ciB6ZXJvIGlmIG5vIHBhY2tldCB3YXMgYXZhaWxhYmxlLgorICogQSBuZWdhdGl2ZSBlcnJvciBj b2RlIGlzIHJldHVybmVkIGluIGNhc2Ugb2YgcmVhZCBlcnJvci4KKyAqLworaW50CituZXRiZV9y eF9kaXNjYXJkKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJLyoKKwkgKiBNUCBub3RlOiB0 aGUgZHVtbXlidWYgaXMgb25seSB1c2VkIHRvIGRpc2NhcmQgZnJhbWVzLAorCSAqIHNvIHRoZXJl IGlzIG5vIG5lZWQgZm9yIGl0IHRvIGJlIHBlci12dG5ldCBvciBsb2NrZWQuCisJICogV2Ugb25s eSBtYWtlIGl0IGxhcmdlIGVub3VnaCBmb3IgVFNPLXNpemVkIHNlZ21lbnQuCisJICovCisJc3Rh dGljIHVpbnQ4X3QgZHVtbXlidWZbNjU1MzYrNjRdOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisKKwlp b3YuaW92X2Jhc2UgPSBkdW1teWJ1ZjsKKwlpb3YuaW92X2xlbiA9IHNpemVvZihkdW1teWJ1Zik7 CisKKwlyZXR1cm4gbmV0YmVfcmVjdihiZSwgJmlvdiwgMSk7Cit9CisKKy8qLQorICogQ29weXJp Z2h0IChjKSAyMDE0LTIwMTYgVmluY2Vuem8gTWFmZmlvbmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU SE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisg KiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs CisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor ICovCisKKy8qCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBtdWx0aXBsZSBuZXR3b3JrIGJhY2tl bmRzIChudWxsLCB0YXAsIG5ldG1hcCwgLi4uKSwKKyAqIHRvIGJlIHVzZWQgYnkgbmV0d29yayBm cm9udGVuZHMgc3VjaCBhcyB2aXJ0aW8tbmV0IGFuZCBwdG5ldC4KKyAqIFRoZSBBUEkgdG8gYWNj ZXNzIHRoZSBiYWNrZW5kIChlLmcuIHNlbmQvcmVjZWl2ZSBwYWNrZXRzLCBuZWdvdGlhdGUKKyAq IGZlYXR1cmVzKSBpcyBleHBvcnRlZCBieSBuZXRfYmFja2VuZHMuaC4KKyAqLworCisjaW5jbHVk ZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5cy9pb2N0 bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CQkvKiB1 X3Nob3J0IGV0YyAqLworI2luY2x1ZGUgPG5ldC9pZi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4K KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8 dW5pc3RkLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2lu Y2x1ZGUgPHB0aHJlYWRfbnAuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8YXNzZXJ0 Lmg+CisKKyNpbmNsdWRlICJtZXZlbnQuaCIKKyNpbmNsdWRlICJuZXRfYmFja2VuZHMuaCIKKwor I2luY2x1ZGUgPHN5cy9saW5rZXJfc2V0Lmg+CisKKy8qCisgKiBFYWNoIG5ldHdvcmsgYmFja2Vu ZCByZWdpc3RlcnMgYSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBhcmUKKyAqIHVzZWQg dG8gaW1wbGVtZW50IHRoZSBuZXQgYmFja2VuZHMgQVBJLgorICogVGhpcyBtaWdodCBuZWVkIHRv IGJlIGV4cG9zZWQgaWYgd2UgaW1wbGVtZW50IGJhY2tlbmRzIGluIHNlcGFyYXRlIGZpbGVzLgor ICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG5hbWUgb2Yg dGhlIGJhY2tlbmQgKi8KKwkvKgorCSAqIFRoZSBpbml0IGFuZCBjbGVhbnVwIGZ1bmN0aW9ucyBh cmUgdXNlZCBpbnRlcm5hbGx5LAorCSAqIHZpcnRpby1uZXQgc2hvdWxkIG5ldmVyIHVzZSBpdC4K KwkgKi8KKwlpbnQgKCppbml0KShzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBjb25zdCBjaGFyICpk ZXZuYW1lLAorCQkJCW5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKTsKKwl2b2lkICgq Y2xlYW51cCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKworCS8qCisJICogQ2FsbGVkIHRv IHNlcnZlIGEgZ3Vlc3QgdHJhbnNtaXQgcmVxdWVzdC4gVGhlIHNjYXR0ZXItZ2F0aGVyCisJICog dmVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgaGFzICdpb3ZjbnQnIGVsZW1lbnRzIGFuZCBj b250YWlucworCSAqIHRoZSBwYWNrZXQgdG8gc2VuZC4gJ2xlbicgaXMgdGhlIGxlbmd0aCBvZiB3 aG9sZSBwYWNrZXQgaW4gYnl0ZXMuCisJICovCisJaW50ICgqc2VuZCkoc3RydWN0IG5ldF9iYWNr ZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJCQlpbnQgaW92Y250LCB1aW50MzJfdCBsZW4s IGludCBtb3JlKTsKKworCS8qCisJICogQ2FsbGVkIHRvIHNlcnZlIGd1ZXN0IHJlY2VpdmUgcmVx dWVzdC4gV2hlbiB0aGUgZnVuY3Rpb24KKwkgKiByZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUsIHRo ZSBzY2F0dGVyLWdhdGhlciB2ZWN0b3IKKwkgKiBwcm92aWRlZCBieSB0aGUgY2FsbGVyIChoYXZp bmcgJ2lvdmNudCcgZWxlbWVudHMgaW4gaXQpIHdpbGwKKwkgKiBjb250YWluIGEgY2h1bmsgb2Yg dGhlIHJlY2VpdmVkIHBhY2tldC4gVGhlICdtb3JlJyBmbGFnIHdpbGwKKwkgKiBiZSBzZXQgaWYg dGhlIHJldHVybmVkIGNodW5rIHdhcyB0aGUgbGFzdCBvbmUgZm9yIHRoZSBjdXJyZW50CisJICog cGFja2V0LCBhbmQgMCBvdGhlcndpc2UuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjaHVuayBz aXplCisJICogaW4gYnl0ZXMsIG9yIDAgaWYgdGhlIGJhY2tlbmQgZG9lc24ndCBoYXZlIGEgbmV3 IHBhY2tldCB0bworCSAqIHJlY2VpdmUuCisJICogTm90ZSB0aGF0IGl0IG1heSBiZSBuZWNlc3Nh cnkgdG8gY2FsbCB0aGlzIGNhbGxiYWNrIG1hbnkKKwkgKiB0aW1lcyB0byByZWNlaXZlIGEgc2lu Z2xlIHBhY2tldCwgZGVwZW5kaW5nIG9mIGhvdyBiaWcgaXMKKwkgKiBidWZmZXJzIHlvdSBwcm92 aWRlLgorCSAqLworCWludCAoKnJlY3YpKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBp b3ZlYyAqaW92LCBpbnQgaW92Y250KTsKKworCS8qCisJICogQXNrIHRoZSBiYWNrZW5kIGZvciB0 aGUgdmlydGlvLW5ldCBmZWF0dXJlcyBpdCBpcyBhYmxlIHRvCisJICogc3VwcG9ydC4gUG9zc2li bGUgZmVhdHVyZXMgYXJlIFRTTywgVUZPIGFuZCBjaGVja3N1bSBvZmZsb2FkaW5nCisJICogaW4g Ym90aCByeCBhbmQgdHggZGlyZWN0aW9uIGFuZCBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LgorCSAq LworCXVpbnQ2NF90ICgqZ2V0X2NhcCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKwkvKgor CSAqIFRlbGwgdGhlIGJhY2tlbmQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHNwZWNpZmllZCB2aXJ0 aW8tbmV0CisJICogZmVhdHVyZXMgKGNhcGFiaWxpdGllcykuCisJICovCisJaW50ICgqc2V0X2Nh cCkoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgZmVhdHVyZXMsCisJCSAgICAgICB1 bnNpZ25lZCBpbnQgdm5ldF9oZHJfbGVuKTsKKworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNj OworCWludCBmZDsKKwl1bnNpZ25lZCBpbnQgYmVfdm5ldF9oZHJfbGVuOworCXVuc2lnbmVkIGlu dCBmZV92bmV0X2hkcl9sZW47CisJdm9pZCAqcHJpdjsJLyogUG9pbnRlciB0byBiYWNrZW5kLXNw ZWNpZmljIGRhdGEuICovCit9OworCitTRVRfREVDTEFSRShuZXRfYmFja2VuZF9zLCBzdHJ1Y3Qg bmV0X2JhY2tlbmQpOworCisjZGVmaW5lIFZORVRfSERSX0xFTglzaXplb2Yoc3RydWN0IHZpcnRp b19uZXRfcnhoZHIpCisKKyNkZWZpbmUgV1BSSU5URihwYXJhbXMpIHByaW50ZiBwYXJhbXMKKwor LyogdGhlIG51bGwgYmFja2VuZCAqLworc3RhdGljIGludAorbmV0YmVfbnVsbF9pbml0KHN0cnVj dCBuZXRfYmFja2VuZCAqYmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9j Yl90IGNiLCB2b2lkICpwYXJhbSkKK3sKKwkodm9pZClkZXZuYW1lOyAodm9pZCljYjsgKHZvaWQp cGFyYW07CisJYmUtPmZkID0gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXRi ZV9udWxsX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSkKK3sKKwkodm9pZCliZTsKK30K Kworc3RhdGljIHVpbnQ2NF90CituZXRiZV9udWxsX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5k ICpiZSkKK3sKKwkodm9pZCliZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmV0YmVf bnVsbF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1cmVzLAor CQkJdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCSh2b2lkKWJlOyAodm9pZClmZWF0dXJlczsg KHZvaWQpdm5ldF9oZHJfbGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRiZV9u dWxsX3NlbmQoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJaW50 IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQgbW9yZSkKK3sKKwkodm9pZCliZTsgKHZvaWQpaW92 OyAodm9pZClpb3ZjbnQ7ICh2b2lkKWxlbjsgKHZvaWQpbW9yZTsKKwlyZXR1cm4gMDsgLyogcHJl dGVuZCB3ZSBzZW5kICovCit9CisKK3N0YXRpYyBpbnQKK25ldGJlX251bGxfcmVjdihzdHJ1Y3Qg bmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKK3sKKwkodm9p ZCliZTsgKHZvaWQpaW92OyAodm9pZClpb3ZjbnQ7CisJZnByaW50ZihzdGRlcnIsICJuZXRiZV9u dWxsX3JlY3YgY2FsbGVkID9cbiIpOworCXJldHVybiAtMTsgLyogbmV2ZXIgY2FsbGVkLCBpIGJl bGlldmUgKi8KK30KKworc3RhdGljIHN0cnVjdCBuZXRfYmFja2VuZCBuX2JlID0geworCS5uYW1l ID0gIm51bGwiLAorCS5pbml0ID0gbmV0YmVfbnVsbF9pbml0LAorCS5jbGVhbnVwID0gbmV0YmVf bnVsbF9jbGVhbnVwLAorCS5zZW5kID0gbmV0YmVfbnVsbF9zZW5kLAorCS5yZWN2ID0gbmV0YmVf bnVsbF9yZWN2LAorCS5nZXRfY2FwID0gbmV0YmVfbnVsbF9nZXRfY2FwLAorCS5zZXRfY2FwID0g bmV0YmVfbnVsbF9zZXRfY2FwLAorfTsKKworREFUQV9TRVQobmV0X2JhY2tlbmRfcywgbl9iZSk7 CisKKworLyogdGhlIHRhcCBiYWNrZW5kICovCisKK3N0cnVjdCB0YXBfcHJpdiB7CisJc3RydWN0 IG1ldmVudCAqbWV2cDsKK307CisKK3N0YXRpYyB2b2lkCit0YXBfY2xlYW51cChzdHJ1Y3QgbmV0 X2JhY2tlbmQgKmJlKQoreworCXN0cnVjdCB0YXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2OworCisJ aWYgKGJlLT5wcml2KSB7CisJCW1ldmVudF9kZWxldGUocHJpdi0+bWV2cCk7CisJCWZyZWUoYmUt PnByaXYpOworCQliZS0+cHJpdiA9IE5VTEw7CisJfQorCWlmIChiZS0+ZmQgIT0gLTEpIHsKKwkJ Y2xvc2UoYmUtPmZkKTsKKwkJYmUtPmZkID0gLTE7CisJfQorfQorCitzdGF0aWMgaW50Cit0YXBf aW5pdChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBjb25zdCBjaGFyICpkZXZuYW1lLAorCSBuZXRf YmFja2VuZF9jYl90IGNiLCB2b2lkICpwYXJhbSkKK3sKKwljaGFyIHRidWZbODBdOworCWludCBm ZDsKKwlpbnQgb3B0ID0gMTsKKwlzdHJ1Y3QgdGFwX3ByaXYgKnByaXY7CisKKwlpZiAoY2IgPT0g TlVMTCkgeworCQlXUFJJTlRGKCgiVEFQIGJhY2tlbmQgcmVxdWlyZXMgbm9uLU5VTEwgY2FsbGJh Y2tcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByaXYgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0 cnVjdCB0YXBfcHJpdikpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJV1BSSU5URigoInRhcF9w cml2IGFsbG9jIGZhaWxlZFxuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RyY3B5KHRidWYs ICIvZGV2LyIpOworCXN0cmxjYXQodGJ1ZiwgZGV2bmFtZSwgc2l6ZW9mKHRidWYpKTsKKworCWZk ID0gb3Blbih0YnVmLCBPX1JEV1IpOworCWlmIChmZCA9PSAtMSkgeworCQlXUFJJTlRGKCgib3Bl biBvZiB0YXAgZGV2aWNlICVzIGZhaWxlZFxuIiwgdGJ1ZikpOworCQlnb3RvIGVycm9yOworCX0K KworCS8qCisJICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKKwkgKiBu b3RpZmljYXRpb25zIHdpdGggdGhlIGV2ZW50IGxvb3AKKwkgKi8KKwlpZiAoaW9jdGwoZmQsIEZJ T05CSU8sICZvcHQpIDwgMCkgeworCQlXUFJJTlRGKCgidGFwIGRldmljZSBPX05PTkJMT0NLIGZh aWxlZFxuIikpOworCQlnb3RvIGVycm9yOworCX0KKworCXByaXYtPm1ldnAgPSBtZXZlbnRfYWRk KGZkLCBFVkZfUkVBRCwgY2IsIHBhcmFtKTsKKwlpZiAocHJpdi0+bWV2cCA9PSBOVUxMKSB7CisJ CVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0ZXIgZXZlbnRcbiIpKTsKKwkJZ290byBlcnJvcjsK Kwl9CisKKwliZS0+ZmQgPSBmZDsKKwliZS0+cHJpdiA9IHByaXY7CisKKwlyZXR1cm4gMDsKKwor ZXJyb3I6CisJdGFwX2NsZWFudXAoYmUpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIENhbGxl ZCB0byBzZW5kIGEgYnVmZmVyIGNoYWluIG91dCB0byB0aGUgdGFwIGRldmljZQorICovCitzdGF0 aWMgaW50Cit0YXBfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlv diwgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLAorCWludCBtb3JlKQoreworCXN0YXRpYyBjaGFy IHBhZFs2MF07IC8qIGFsbCB6ZXJvIGJ5dGVzICovCisKKwkodm9pZCltb3JlOworCS8qCisJICog SWYgdGhlIGxlbmd0aCBpcyA8IDYwLCBwYWQgb3V0IHRvIHRoYXQgYW5kIGFkZCB0aGUKKwkgKiBl eHRyYSB6ZXJvJ2Qgc2VnbWVudCB0byB0aGUgaW92LiBJdCBpcyBndWFyYW50ZWVkIHRoYXQKKwkg KiB0aGVyZSBpcyBhbHdheXMgYW4gZXh0cmEgaW92IGF2YWlsYWJsZSBieSB0aGUgY2FsbGVyLgor CSAqLworCWlmIChsZW4gPCA2MCkgeworCQlpb3ZbaW92Y250XS5pb3ZfYmFzZSA9IHBhZDsKKwkJ aW92W2lvdmNudF0uaW92X2xlbiA9IChzaXplX3QpKDYwIC0gbGVuKTsKKwkJaW92Y250Kys7CisJ fQorCisJcmV0dXJuIChpbnQpd3JpdGV2KGJlLT5mZCwgaW92LCBpb3ZjbnQpOworfQorCitzdGF0 aWMgaW50Cit0YXBfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlv diwgaW50IGlvdmNudCkKK3sKKwlpbnQgcmV0OworCisJLyogU2hvdWxkIG5ldmVyIGJlIGNhbGxl ZCB3aXRob3V0IGEgdmFsaWQgdGFwIGZkICovCisJYXNzZXJ0KGJlLT5mZCAhPSAtMSk7CisKKwly ZXQgPSAoaW50KXJlYWR2KGJlLT5mZCwgaW92LCBpb3ZjbnQpOworCisJaWYgKHJldCA8IDAgJiYg ZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHVpbnQ2NF90Cit0YXBfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl KQoreworCSh2b2lkKWJlOworCXJldHVybiAwOyAvLyBub3RoaW5nIGV4dHJhCit9CisKK3N0YXRp YyBpbnQKK3RhcF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGZlYXR1 cmVzLAorCQkgdW5zaWduZWQgdm5ldF9oZHJfbGVuKQoreworCSh2b2lkKWJlOworCXJldHVybiAo ZmVhdHVyZXMgfHwgdm5ldF9oZHJfbGVuKSA/IC0xIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBu ZXRfYmFja2VuZCB0YXBfYmFja2VuZCA9IHsKKwkubmFtZSA9ICJ0YXB8dm1tbmV0IiwKKwkuaW5p dCA9IHRhcF9pbml0LAorCS5jbGVhbnVwID0gdGFwX2NsZWFudXAsCisJLnNlbmQgPSB0YXBfc2Vu ZCwKKwkucmVjdiA9IHRhcF9yZWN2LAorCS5nZXRfY2FwID0gdGFwX2dldF9jYXAsCisJLnNldF9j YXAgPSB0YXBfc2V0X2NhcCwKK307CisKK0RBVEFfU0VUKG5ldF9iYWNrZW5kX3MsIHRhcF9iYWNr ZW5kKTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisKKy8qCisgKiBUaGUgbmV0bWFwIGJhY2tlbmQK KyAqLworCisvKiBUaGUgdmlydGlvLW5ldCBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgbmV0bWFwLiAq LworI2RlZmluZSBORVRNQVBfRkVBVFVSRVMgKFZJUlRJT19ORVRfRl9DU1VNIHwgVklSVElPX05F VF9GX0hPU1RfVFNPNCB8IFwKKwkJVklSVElPX05FVF9GX0hPU1RfVFNPNiB8IFZJUlRJT19ORVRf Rl9IT1NUX1VGTyB8IFwKKwkJVklSVElPX05FVF9GX0dVRVNUX0NTVU0gfCBWSVJUSU9fTkVUX0Zf R1VFU1RfVFNPNCB8IFwKKwkJVklSVElPX05FVF9GX0dVRVNUX1RTTzYgfCBWSVJUSU9fTkVUX0Zf R1VFU1RfVUZPKQorCisjZGVmaW5lIE5FVE1BUF9QT0xMTUFTSyAoUE9MTElOIHwgUE9MTFJETk9S TSB8IFBPTExSREJBTkQpCisKK3N0cnVjdCBuZXRtYXBfcHJpdiB7CisJY2hhciBpZm5hbWVbSUZO QU1TSVpdOworCXN0cnVjdCBubV9kZXNjICpubWQ7CisJdWludDE2X3QgbWVtaWQ7CisJc3RydWN0 IG5ldG1hcF9yaW5nICpyeDsKKwlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnR4OworCXB0aHJlYWRfdCBl dmxvb3BfdGlkOworCW5ldF9iYWNrZW5kX2NiX3QgY2I7CisJdm9pZCAqY2JfcGFyYW07CisKKwlz dHJ1Y3QgcHRuZXRtYXBfc3RhdGUgcHRuZXRtYXA7Cit9OworCitzdGF0aWMgdm9pZCAqCituZXRt YXBfZXZsb29wX3RocmVhZCh2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl ID0gcGFyYW07CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUtPnByaXY7CisJc3RydWN0 IHBvbGxmZCBwZmQ7CisJaW50IHJldDsKKworCWZvciAoOzspIHsKKwkJcGZkLmZkID0gYmUtPmZk OworCQlwZmQuZXZlbnRzID0gTkVUTUFQX1BPTExNQVNLOworCQlyZXQgPSBwb2xsKCZwZmQsIDEs IElORlRJTSk7CisJCWlmIChyZXQgPT0gLTEgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJCVdQUklO VEYoKCJuZXRtYXAgcG9sbCBmYWlsZWQsICVkXG4iLCBlcnJubykpOworCQl9IGVsc2UgaWYgKHJl dCA9PSAxICYmIChwZmQucmV2ZW50cyAmIE5FVE1BUF9QT0xMTUFTSykpIHsKKwkJCXByaXYtPmNi KHBmZC5mZCwgRVZGX1JFQUQsIHByaXYtPmNiX3BhcmFtKTsKKwkJfQorCX0KKworCXJldHVybiBO VUxMOworfQorCitzdGF0aWMgdm9pZAorbm1yZXFfaW5pdChzdHJ1Y3Qgbm1yZXEgKnJlcSwgY2hh ciAqaWZuYW1lKQoreworCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CisJc3RybmNweShy ZXEtPm5yX25hbWUsIGlmbmFtZSwgc2l6ZW9mKHJlcS0+bnJfbmFtZSkpOworCXJlcS0+bnJfdmVy c2lvbiA9IE5FVE1BUF9BUEk7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZXRfdm5ldF9oZHJf bGVuKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIGludCB2bmV0X2hkcl9sZW4pCit7CisJaW50IGVy cjsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5w cml2OworCisJbm1yZXFfaW5pdCgmcmVxLCBwcml2LT5pZm5hbWUpOworCXJlcS5ucl9jbWQgPSBO RVRNQVBfQkRHX1ZORVRfSERSOworCXJlcS5ucl9hcmcxID0gdm5ldF9oZHJfbGVuOworCWVyciA9 IGlvY3RsKGJlLT5mZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJyKSB7CisJCVdQUklOVEYo KCJVbmFibGUgdG8gc2V0IHZuZXQgaGVhZGVyIGxlbmd0aCAlZFxuIiwKKwkJCQl2bmV0X2hkcl9s ZW4pKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwliZS0+YmVfdm5ldF9oZHJfbGVuID0gdm5ldF9o ZHJfbGVuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9oYXNfdm5ldF9o ZHJfbGVuKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVuc2lnbmVkIHZuZXRfaGRyX2xlbikKK3sK KwlpbnQgcHJldl9oZHJfbGVuID0gYmUtPmJlX3ZuZXRfaGRyX2xlbjsKKwlpbnQgcmV0OworCisJ aWYgKHZuZXRfaGRyX2xlbiA9PSBwcmV2X2hkcl9sZW4pIHsKKwkJcmV0dXJuIDE7CisJfQorCisJ cmV0ID0gbmV0bWFwX3NldF92bmV0X2hkcl9sZW4oYmUsIHZuZXRfaGRyX2xlbik7CisJaWYgKHJl dCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwluZXRtYXBfc2V0X3ZuZXRfaGRyX2xlbihiZSwgcHJl dl9oZHJfbGVuKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdWludDY0X3QKK25ldG1hcF9n ZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJcmV0dXJuIG5ldG1hcF9oYXNfdm5l dF9oZHJfbGVuKGJlLCBWTkVUX0hEUl9MRU4pID8KKwkJCU5FVE1BUF9GRUFUVVJFUyA6IDA7Cit9 CisKK3N0YXRpYyBpbnQKK25ldG1hcF9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVp bnQ2NF90IGZlYXR1cmVzLAorCSAgICAgICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJcmV0 dXJuIG5ldG1hcF9zZXRfdm5ldF9oZHJfbGVuKGJlLCB2bmV0X2hkcl9sZW4pOworfQorCisvKiBT dG9yZSBhbmQgcmV0dXJuIHRoZSBmZWF0dXJlcyB3ZSBhZ3JlZWQgdXBvbi4gKi8KK3VpbnQzMl90 CitwdG5ldG1hcF9hY2tfZmVhdHVyZXMoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHVpbnQz Ml90IHdhbnRlZF9mZWF0dXJlcykKK3sKKwlwdG4tPmFja2VkX2ZlYXR1cmVzID0gcHRuLT5mZWF0 dXJlcyAmIHdhbnRlZF9mZWF0dXJlczsKKworCXJldHVybiBwdG4tPmFja2VkX2ZlYXR1cmVzOwor fQorCitzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKgorZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFj a2VuZCAqYmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0gYmUgPyBiZS0+cHJpdiA6 IE5VTEw7CisJc3RydWN0IG5ldG1hcF9wb29sc19pbmZvIHBpOworCXN0cnVjdCBubXJlcSByZXE7 CisJaW50IGVycjsKKworCS8qIENoZWNrIHRoYXQgdGhpcyBpcyBhIHB0bmV0bWFwIGJhY2tlbmQu ICovCisJaWYgKCFiZSB8fCBiZS0+c2V0X2NhcCAhPSBuZXRtYXBfc2V0X2NhcCB8fAorCQkJIShw cml2LT5ubWQtPnJlcS5ucl9mbGFncyAmIE5SX1BUTkVUTUFQX0hPU1QpKSB7CisJCXJldHVybiBO VUxMOworCX0KKworCW5tcmVxX2luaXQoJnJlcSwgcHJpdi0+aWZuYW1lKTsKKwlyZXEubnJfY21k ID0gTkVUTUFQX1BPT0xTX0lORk9fR0VUOworCW5tcmVxX3BvaW50ZXJfcHV0KCZyZXEsICZwaSk7 CisJZXJyID0gaW9jdGwocHJpdi0+bm1kLT5mZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJy KSB7CisJCXJldHVybiBOVUxMOworCX0KKworCWVyciA9IHB0bl9tZW1kZXZfYXR0YWNoKHByaXYt Pm5tZC0+bWVtLCAmcGkpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0 dXJuICZwcml2LT5wdG5ldG1hcDsKK30KKworaW50CitwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0 cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgbmV0bWFwX2lmX2luZm8gKm5pZikKK3sK KwlzdHJ1Y3QgbmV0bWFwX3ByaXYgKnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCisJbWVtc2V0 KG5pZiwgMCwgc2l6ZW9mKCpuaWYpKTsKKwlpZiAocHJpdi0+bm1kID09IE5VTEwpIHsKKwkJcmV0 dXJuIEVJTlZBTDsKKwl9CisKKwluaWYtPm5pZnBfb2Zmc2V0ID0gcHJpdi0+bm1kLT5yZXEubnJf b2Zmc2V0OworCW5pZi0+bnVtX3R4X3JpbmdzID0gcHJpdi0+bm1kLT5yZXEubnJfdHhfcmluZ3M7 CisJbmlmLT5udW1fcnhfcmluZ3MgPSBwcml2LT5ubWQtPnJlcS5ucl9yeF9yaW5nczsKKwluaWYt Pm51bV90eF9zbG90cyA9IHByaXYtPm5tZC0+cmVxLm5yX3R4X3Nsb3RzOworCW5pZi0+bnVtX3J4 X3Nsb3RzID0gcHJpdi0+bm1kLT5yZXEubnJfcnhfc2xvdHM7CisKKwlyZXR1cm4gMDsKK30KKwor aW50CitwdG5ldG1hcF9nZXRfaG9zdG1lbWlkKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKQor eworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IHB0bi0+bmV0bWFwX3ByaXY7CisKKwlpZiAo cHJpdi0+bm1kID09IE5VTEwpIHsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcHJp di0+bWVtaWQ7Cit9CisKK2ludAorcHRuZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0 ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmcpCit7CisJc3RydWN0IG5ldG1hcF9wcml2 ICpwcml2ID0gcHRuLT5uZXRtYXBfcHJpdjsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCWludCBlcnI7 CisKKwlpZiAocHRuLT5ydW5uaW5nKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIFhYWCBXZSBz aG91bGQgc3RvcCB0aGUgbmV0bWFwIGV2bG9vcCBoZXJlLiAqLworCisJLyogQXNrIG5ldG1hcCB0 byBjcmVhdGUga3RocmVhZHMgZm9yIHRoaXMgaW50ZXJmYWNlLiAqLworCW5tcmVxX2luaXQoJnJl cSwgcHJpdi0+aWZuYW1lKTsKKwlubXJlcV9wb2ludGVyX3B1dCgmcmVxLCBjZmcpOworCXJlcS5u cl9jbWQgPSBORVRNQVBfUFRfSE9TVF9DUkVBVEU7CisJZXJyID0gaW9jdGwocHJpdi0+bm1kLT5m ZCwgTklPQ1JFR0lGLCAmcmVxKTsKKwlpZiAoZXJyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6 IFVuYWJsZSB0byBjcmVhdGUgcHRuZXRtYXAga3RocmVhZHMgb24gIgorCQkJIiVzIFtlcnJubz0l ZF0iLCBfX2Z1bmNfXywgcHJpdi0+aWZuYW1lLCBlcnJubyk7CisJCXJldHVybiBlcnI7CisJfQor CisJcHRuLT5ydW5uaW5nID0gMTsKKworCXJldHVybiAwOworfQorCitpbnQKK3B0bmV0bWFwX2Rl bGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bikKK3sKKwlzdHJ1Y3QgbmV0bWFwX3ByaXYg KnByaXYgPSBwdG4tPm5ldG1hcF9wcml2OworCXN0cnVjdCBubXJlcSByZXE7CisJaW50IGVycjsK KworCWlmICghcHRuLT5ydW5uaW5nKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIEFzayBuZXRt YXAgdG8gZGVsZXRlIGt0aHJlYWRzIGZvciB0aGlzIGludGVyZmFjZS4gKi8KKwlubXJlcV9pbml0 KCZyZXEsIHByaXYtPmlmbmFtZSk7CisJcmVxLm5yX2NtZCA9IE5FVE1BUF9QVF9IT1NUX0RFTEVU RTsKKwllcnIgPSBpb2N0bChwcml2LT5ubWQtPmZkLCBOSU9DUkVHSUYsICZyZXEpOworCWlmIChl cnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBwdG5ldG1hcCBr dGhyZWFkcyBvbiAiCisJCQkiJXMgW2Vycm5vPSVkXSIsIF9fZnVuY19fLCBwcml2LT5pZm5hbWUs IGVycm5vKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwdG4tPnJ1bm5pbmcgPSAwOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9pbml0KHN0cnVjdCBuZXRfYmFja2VuZCAq YmUsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJICAgIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQg KnBhcmFtKQoreworCWNvbnN0IGNoYXIgKm5kbmFtZSA9ICIvZGV2L25ldG1hcCI7CisJc3RydWN0 IG5ldG1hcF9wcml2ICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3Qgbm1yZXEgcmVxOworCWludCBwdG5l dG1hcCA9IChjYiA9PSBOVUxMKTsKKworCXByaXYgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBu ZXRtYXBfcHJpdikpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJV1BSSU5URigoIlVuYWJsZSBh bGxvYyBuZXRtYXAgcHJpdmF0ZSBkYXRhXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdHJu Y3B5KHByaXYtPmlmbmFtZSwgZGV2bmFtZSwgc2l6ZW9mKHByaXYtPmlmbmFtZSkpOworCXByaXYt PmlmbmFtZVtzaXplb2YocHJpdi0+aWZuYW1lKSAtIDFdID0gJ1wwJzsKKworCW1lbXNldCgmcmVx LCAwLCBzaXplb2YocmVxKSk7CisJcmVxLm5yX2ZsYWdzID0gcHRuZXRtYXAgPyBOUl9QVE5FVE1B UF9IT1NUIDogMDsKKworCXByaXYtPm5tZCA9IG5tX29wZW4ocHJpdi0+aWZuYW1lLCAmcmVxLCBO RVRNQVBfTk9fVFhfUE9MTCwgTlVMTCk7CisJaWYgKHByaXYtPm5tZCA9PSBOVUxMKSB7CisJCVdQ UklOVEYoKCJVbmFibGUgdG8gbm1fb3BlbigpOiBkZXZpY2UgJyVzJywgIgorCQkJCSJpbnRlcmZh Y2UgJyVzJywgZXJybm8gKCVzKVxuIiwKKwkJCQluZG5hbWUsIGRldm5hbWUsIHN0cmVycm9yKGVy cm5vKSkpOworCQlmcmVlKHByaXYpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpdi0+bWVtaWQg PSBwcml2LT5ubWQtPnJlcS5ucl9hcmcyOworCXByaXYtPnR4ID0gTkVUTUFQX1RYUklORyhwcml2 LT5ubWQtPm5pZnAsIDApOworCXByaXYtPnJ4ID0gTkVUTUFQX1JYUklORyhwcml2LT5ubWQtPm5p ZnAsIDApOworCXByaXYtPmNiID0gY2I7CisJcHJpdi0+Y2JfcGFyYW0gPSBwYXJhbTsKKwliZS0+ ZmQgPSBwcml2LT5ubWQtPmZkOworCWJlLT5wcml2ID0gcHJpdjsKKworCXByaXYtPnB0bmV0bWFw Lm5ldG1hcF9wcml2ID0gcHJpdjsKKwlwcml2LT5wdG5ldG1hcC5mZWF0dXJlcyA9IDA7CisJcHJp di0+cHRuZXRtYXAuYWNrZWRfZmVhdHVyZXMgPSAwOworCXByaXYtPnB0bmV0bWFwLnJ1bm5pbmcg PSAwOworCWlmIChwdG5ldG1hcCkgeworCQlpZiAobmV0bWFwX2hhc192bmV0X2hkcl9sZW4oYmUs IFZORVRfSERSX0xFTikpIHsKKwkJCXByaXYtPnB0bmV0bWFwLmZlYXR1cmVzIHw9IFBUTkVUTUFQ X0ZfVk5FVF9IRFI7CisJCX0KKwl9IGVsc2UgeworCQljaGFyIHRuYW1lWzQwXTsKKworCQkvKiBD cmVhdGUgYSB0aHJlYWQgZm9yIG5ldG1hcCBwb2xsLiAqLworCQlwdGhyZWFkX2NyZWF0ZSgmcHJp di0+ZXZsb29wX3RpZCwgTlVMTCwgbmV0bWFwX2V2bG9vcF90aHJlYWQsICh2b2lkICopYmUpOwor CQlzbnByaW50Zih0bmFtZSwgc2l6ZW9mKHRuYW1lKSwgIm5ldG1hcC1ldmxvb3AtJXAiLCBwcml2 KTsKKwkJcHRocmVhZF9zZXRfbmFtZV9ucChwcml2LT5ldmxvb3BfdGlkLCB0bmFtZSk7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXRtYXBfY2xlYW51cChzdHJ1Y3QgbmV0 X2JhY2tlbmQgKmJlKQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2Owor CisJaWYgKGJlLT5wcml2KSB7CisJCWlmIChwcml2LT5wdG5ldG1hcC5ydW5uaW5nKSB7CisJCQlw dG5ldG1hcF9kZWxldGUoJnByaXYtPnB0bmV0bWFwKTsKKwkJfQorCQlubV9jbG9zZShwcml2LT5u bWQpOworCQlmcmVlKGJlLT5wcml2KTsKKwkJYmUtPnByaXYgPSBOVUxMOworCX0KKwliZS0+ZmQg PSAtMTsKK30KKworLyogQSBmYXN0IGNvcHkgcm91dGluZSBvbmx5IGZvciBtdWx0aXBsZXMgb2Yg NjQgYnl0ZXMsIG5vbiBvdmVybGFwcGVkLiAqLworc3RhdGljIGlubGluZSB2b2lkCitwa3RfY29w eShjb25zdCB2b2lkICpfc3JjLCB2b2lkICpfZHN0LCBpbnQgbCkKK3sKKyAgICBjb25zdCB1aW50 NjRfdCAqc3JjID0gX3NyYzsKKyAgICB1aW50NjRfdCAqZHN0ID0gX2RzdDsKKyAgICBpZiAobCA+ PSAxMDI0KSB7CisgICAgICAgIGJjb3B5KHNyYywgZHN0LCBsKTsKKyAgICAgICAgcmV0dXJuOwor ICAgIH0KKyAgICBmb3IgKDsgbCA+IDA7IGwgLT0gNjQpIHsKKyAgICAgICAgKmRzdCsrID0gKnNy YysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAgICAgICpkc3QrKyA9ICpzcmMrKzsK KyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAqZHN0KysgPSAqc3JjKys7CisgICAg ICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAq ZHN0KysgPSAqc3JjKys7CisgICAgfQorfQorCitzdGF0aWMgaW50CituZXRtYXBfc2VuZChzdHJ1 Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkgICAgaW50IGlvdmNudCwg dWludDMyX3Qgc2l6ZSwgaW50IG1vcmUpCit7CisJc3RydWN0IG5ldG1hcF9wcml2ICpwcml2ID0g YmUtPnByaXY7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCWludCBubV9idWZfc2l6ZTsK KwlpbnQgbm1fYnVmX2xlbjsKKwl1aW50MzJfdCBoZWFkOworCXZvaWQgKm5tX2J1ZjsKKwlpbnQg ajsKKworCWlmIChpb3ZjbnQgPD0gMCB8fCBzaXplIDw9IDApIHsKKwkJRCgiV3JvbmcgaW92OiBp b3ZjbnQgJWQgc2l6ZSAlZCIsIGlvdmNudCwgc2l6ZSk7CisJCXJldHVybiAwOworCX0KKworCXJp bmcgPSBwcml2LT50eDsKKwloZWFkID0gcmluZy0+aGVhZDsKKwlpZiAoaGVhZCA9PSByaW5nLT50 YWlsKSB7CisJCVJEKDEsICJObyBzcGFjZSwgZHJvcCAlZCBieXRlcyIsIHNpemUpOworCQlnb3Rv IHR4c3luYzsKKwl9CisJbm1fYnVmID0gTkVUTUFQX0JVRihyaW5nLCByaW5nLT5zbG90W2hlYWRd LmJ1Zl9pZHgpOworCW5tX2J1Zl9zaXplID0gcmluZy0+bnJfYnVmX3NpemU7CisJbm1fYnVmX2xl biA9IDA7CisKKwlmb3IgKGogPSAwOyBqIDwgaW92Y250OyBqKyspIHsKKwkJaW50IGlvdl9mcmFn X3NpemUgPSBpb3Zbal0uaW92X2xlbjsKKwkJdm9pZCAqaW92X2ZyYWdfYnVmID0gaW92W2pdLmlv dl9iYXNlOworCisJCS8qIFNwbGl0IGVhY2ggaW92ZWMgZnJhZ21lbnQgb3ZlciBtb3JlIG5ldG1h cCBzbG90cywgaWYKKwkJICAgbmVjZXNzYXJ5LiAqLworCQlmb3IgKDs7KSB7CisJCQlpbnQgY29w eWxlbjsKKworCQkJY29weWxlbiA9IGlvdl9mcmFnX3NpemUgPCBubV9idWZfc2l6ZSA/IGlvdl9m cmFnX3NpemUgOiBubV9idWZfc2l6ZTsKKwkJCXBrdF9jb3B5KGlvdl9mcmFnX2J1Ziwgbm1fYnVm LCBjb3B5bGVuKTsKKworCQkJaW92X2ZyYWdfYnVmICs9IGNvcHlsZW47CisJCQlpb3ZfZnJhZ19z aXplIC09IGNvcHlsZW47CisJCQlubV9idWYgKz0gY29weWxlbjsKKwkJCW5tX2J1Zl9zaXplIC09 IGNvcHlsZW47CisJCQlubV9idWZfbGVuICs9IGNvcHlsZW47CisKKwkJCWlmIChpb3ZfZnJhZ19z aXplID09IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcmluZy0+c2xvdFtoZWFkXS5sZW4g PSBubV9idWZfbGVuOworCQkJcmluZy0+c2xvdFtoZWFkXS5mbGFncyA9IE5TX01PUkVGUkFHOwor CQkJaGVhZCA9IG5tX3JpbmdfbmV4dChyaW5nLCBoZWFkKTsKKwkJCWlmIChoZWFkID09IHJpbmct PnRhaWwpIHsKKwkJCQkvKiBXZSByYW4gb3V0IG9mIG5ldG1hcCBzbG90cyB3aGlsZQorCQkJCSAq IHNwbGl0dGluZyB0aGUgaW92ZWMgZnJhZ21lbnRzLiAqLworCQkJCVJEKDEsICJObyBzcGFjZSwg ZHJvcCAlZCBieXRlcyIsIHNpemUpOworCQkJCWdvdG8gdHhzeW5jOworCQkJfQorCQkJbm1fYnVm ID0gTkVUTUFQX0JVRihyaW5nLCByaW5nLT5zbG90W2hlYWRdLmJ1Zl9pZHgpOworCQkJbm1fYnVm X3NpemUgPSByaW5nLT5ucl9idWZfc2l6ZTsKKwkJCW5tX2J1Zl9sZW4gPSAwOworCQl9CisJfQor CisJLyogQ29tcGxldGUgdGhlIGxhc3Qgc2xvdCwgd2hpY2ggbXVzdCBub3QgaGF2ZSBOU19NT1JF RlJBRyBzZXQuICovCisJcmluZy0+c2xvdFtoZWFkXS5sZW4gPSBubV9idWZfbGVuOworCXJpbmct PnNsb3RbaGVhZF0uZmxhZ3MgPSAwOworCWhlYWQgPSBubV9yaW5nX25leHQocmluZywgaGVhZCk7 CisKKwkvKiBOb3cgdXBkYXRlIHJpbmctPmhlYWQgYW5kIHJpbmctPmN1ci4gKi8KKwlyaW5nLT5o ZWFkID0gcmluZy0+Y3VyID0gaGVhZDsKKworCWlmIChtb3JlKSB7Ly8gJiYgbm1fcmluZ19zcGFj ZShyaW5nKSA+IDY0CisJCXJldHVybiAwOworCX0KK3R4c3luYzoKKwlpb2N0bChiZS0+ZmQsIE5J T0NUWFNZTkMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldG1hcF9y ZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250 KQoreworCXN0cnVjdCBuZXRtYXBfcHJpdiAqcHJpdiA9IGJlLT5wcml2OworCXN0cnVjdCBuZXRt YXBfc2xvdCAqc2xvdCA9IE5VTEw7CisJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nOworCXZvaWQg Kmlvdl9mcmFnX2J1ZjsKKwlpbnQgaW92X2ZyYWdfc2l6ZTsKKwlpbnQgdG90bGVuID0gMDsKKwl1 aW50MzJfdCBoZWFkOworCisJYXNzZXJ0KGlvdmNudCk7CisKKwlyaW5nID0gcHJpdi0+cng7CisJ aGVhZCA9IHJpbmctPmhlYWQ7CisJaW92X2ZyYWdfYnVmID0gaW92LT5pb3ZfYmFzZTsKKwlpb3Zf ZnJhZ19zaXplID0gaW92LT5pb3ZfbGVuOworCisJZG8geworCQlpbnQgbm1fYnVmX2xlbjsKKwkJ dm9pZCAqbm1fYnVmOworCisJCWlmIChoZWFkID09IHJpbmctPnRhaWwpIHsKKwkJCXJldHVybiAw OworCQl9CisKKwkJc2xvdCA9IHJpbmctPnNsb3QgKyBoZWFkOworCQlubV9idWYgPSBORVRNQVBf QlVGKHJpbmcsIHNsb3QtPmJ1Zl9pZHgpOworCQlubV9idWZfbGVuID0gc2xvdC0+bGVuOworCisJ CWZvciAoOzspIHsKKwkJCWludCBjb3B5bGVuID0gbm1fYnVmX2xlbiA8IGlvdl9mcmFnX3NpemUg PyBubV9idWZfbGVuIDogaW92X2ZyYWdfc2l6ZTsKKworCQkJcGt0X2NvcHkobm1fYnVmLCBpb3Zf ZnJhZ19idWYsIGNvcHlsZW4pOworCQkJbm1fYnVmICs9IGNvcHlsZW47CisJCQlubV9idWZfbGVu IC09IGNvcHlsZW47CisJCQlpb3ZfZnJhZ19idWYgKz0gY29weWxlbjsKKwkJCWlvdl9mcmFnX3Np emUgLT0gY29weWxlbjsKKwkJCXRvdGxlbiArPSBjb3B5bGVuOworCisJCQlpZiAobm1fYnVmX2xl biA9PSAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlvdisrOworCQkJaW92Y250LS07CisJ CQlpZiAoaW92Y250ID09IDApIHsKKwkJCQkvKiBObyBzcGFjZSB0byByZWNlaXZlLiAqLworCQkJ CUQoIlNob3J0IGlvdiwgZHJvcCAlZCBieXRlcyIsIHRvdGxlbik7CisJCQkJcmV0dXJuIC1FTk9T UEM7CisJCQl9CisJCQlpb3ZfZnJhZ19idWYgPSBpb3YtPmlvdl9iYXNlOworCQkJaW92X2ZyYWdf c2l6ZSA9IGlvdi0+aW92X2xlbjsKKwkJfQorCisJCWhlYWQgPSBubV9yaW5nX25leHQocmluZywg aGVhZCk7CisKKwl9IHdoaWxlIChzbG90LT5mbGFncyAmIE5TX01PUkVGUkFHKTsKKworCS8qIFJl bGVhc2Ugc2xvdHMgdG8gbmV0bWFwLiAqLworCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBoZWFk OworCisJcmV0dXJuIHRvdGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfYmFja2VuZCBuZXRt YXBfYmFja2VuZCA9IHsKKwkubmFtZSA9ICJuZXRtYXB8dmFsZSIsCisJLmluaXQgPSBuZXRtYXBf aW5pdCwKKwkuY2xlYW51cCA9IG5ldG1hcF9jbGVhbnVwLAorCS5zZW5kID0gbmV0bWFwX3NlbmQs CisJLnJlY3YgPSBuZXRtYXBfcmVjdiwKKwkuZ2V0X2NhcCA9IG5ldG1hcF9nZXRfY2FwLAorCS5z ZXRfY2FwID0gbmV0bWFwX3NldF9jYXAsCit9OworCitEQVRBX1NFVChuZXRfYmFja2VuZF9zLCBu ZXRtYXBfYmFja2VuZCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisvKgorICogbWFr ZSBzdXJlIGEgYmFja2VuZCBpcyBwcm9wZXJseSBpbml0aWFsaXplZAorICovCitzdGF0aWMgdm9p ZAorbmV0YmVfZml4KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwp CisJCXJldHVybjsKKwlpZiAoYmUtPm5hbWUgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwg Im1pc3NpbmcgbmFtZSBmb3IgJXBcbiIsIGJlKTsKKwkJYmUtPm5hbWUgPSAidW5uYW1lZCBuZXRi ZSI7CisJfQorCWlmIChiZS0+aW5pdCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlz c2luZyBpbml0IGZvciAlcCAlc1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJYmUtPmluaXQgPSBuZXRi ZV9udWxsX2luaXQ7CisJfQorCWlmIChiZS0+Y2xlYW51cCA9PSBOVUxMKSB7CisJCWZwcmludGYo c3RkZXJyLCAibWlzc2luZyBjbGVhbnVwIGZvciAlcCAlc1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJ YmUtPmNsZWFudXAgPSBuZXRiZV9udWxsX2NsZWFudXA7CisJfQorCWlmIChiZS0+c2VuZCA9PSBO VUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBzZW5kIGZvciAlcCAlc1xuIiwgYmUs IGJlLT5uYW1lKTsKKwkJYmUtPnNlbmQgPSBuZXRiZV9udWxsX3NlbmQ7CisJfQorCWlmIChiZS0+ cmVjdiA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyByZWN2IGZvciAlcCAl c1xuIiwgYmUsIGJlLT5uYW1lKTsKKwkJYmUtPnJlY3YgPSBuZXRiZV9udWxsX3JlY3Y7CisJfQor CWlmIChiZS0+Z2V0X2NhcCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAibWlzc2luZyBn ZXRfY2FwIGZvciAlcCAlc1xuIiwKKwkJCWJlLCBiZS0+bmFtZSk7CisJCWJlLT5nZXRfY2FwID0g bmV0YmVfbnVsbF9nZXRfY2FwOworCX0KKwlpZiAoYmUtPnNldF9jYXAgPT0gTlVMTCkgeworCQlm cHJpbnRmKHN0ZGVyciwgIm1pc3Npbmcgc2V0X2NhcCBmb3IgJXAgJXNcbiIsCisJCQliZSwgYmUt Pm5hbWUpOworCQliZS0+c2V0X2NhcCA9IG5ldGJlX251bGxfc2V0X2NhcDsKKwl9Cit9CisKKy8q CisgKiBrZXlzIGlzIGEgc2V0IG9mIHByZWZpeGVzIHNlcGFyYXRlZCBieSAnfCcsCisgKiByZXR1 cm4gMSBpZiB0aGUgbGVmdG1vc3QgcGFydCBvZiBuYW1lIG1hdGNoZXMgb25lIHByZWZpeC4KKyAq Lworc3RhdGljIGNvbnN0IGNoYXIgKgorbmV0YmVfbmFtZV9tYXRjaChjb25zdCBjaGFyICprZXlz LCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKm4gPSBuYW1lLCAqZ29vZCA9IGtl eXM7CisJY2hhciBjOworCisJaWYgKCFrZXlzIHx8ICFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKwl3 aGlsZSAoIChjID0gKmtleXMrKykgKSB7CisJCWlmIChjID09ICd8JykgeyAvKiByZWFjaGVkIHRo ZSBzZXBhcmF0b3IgKi8KKwkJCWlmIChnb29kKQorCQkJCWJyZWFrOworCQkJLyogcHJlcGFyZSBm b3IgbmV3IHJvdW5kICovCisJCQluID0gbmFtZTsKKwkJCWdvb2QgPSBrZXlzOworCQl9IGVsc2Ug aWYgKGdvb2QgJiYgYyAhPSAqbisrKSB7CisJCQlnb29kID0gTlVMTDsgLyogZHJvcCB0aWxsIG5l eHQga2V5d29yZCAqLworCQl9CisJfQorCXJldHVybiBnb29kOworfQorCisvKgorICogSW5pdGlh bGl6ZSBhIGJhY2tlbmQgYW5kIGF0dGFjaCB0byB0aGUgZnJvbnRlbmQuCisgKiBUaGlzIGlzIGNh bGxlZCBkdXJpbmcgZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24uCisgKiBkZXZuYW1lIGlzIHRoZSBi YWNrZW5kLW5hbWUgYXMgc3VwcGxpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAqIAllLmcuIC1z IDI6MCxmcm9udGVuZC1uYW1lLGJhY2tlbmQtbmFtZVssb3RoZXItYXJnc10KKyAqIGNiIGlzIHRo ZSByZWNlaXZlIGNhbGxiYWNrIHN1cHBsaWVkIGJ5IHRoZSBmcm9udGVuZCwKKyAqCWFuZCBpdCBp cyBpbnZva2VkIGluIHRoZSBldmVudCBsb29wIHdoZW4gYSByZWNlaXZlCisgKglldmVudCBpcyBn ZW5lcmF0ZWQgaW4gdGhlIGh5cGVydmlzb3IsCisgKiBwYXJhbSBpcyBhIHBvaW50ZXIgdG8gdGhl IGZyb250ZW5kLCBhbmQgbm9ybWFsbHkgdXNlZCBhcworICoJdGhlIGFyZ3VtZW50IGZvciB0aGUg Y2FsbGJhY2suCisgKi8KK3N0cnVjdCBuZXRfYmFja2VuZCAqCituZXRiZV9pbml0KGNvbnN0IGNo YXIgKmRldm5hbWUsIG5ldF9iYWNrZW5kX2NiX3QgY2IsIHZvaWQgKnBhcmFtKQoreworCXN0cnVj dCBuZXRfYmFja2VuZCAqKnBiZSwgKmJlLCAqdGJlID0gTlVMTDsKKwlpbnQgZXJyOworCisJLyoK KwkgKiBGaW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQgZGVwZW5kaW5nIG9uIHRoZSB1c2VyLXByb3Zp ZGVkCisJICogZGV2aWNlIG5hbWUuIG5ldF9iYWNrZW5kX3MgaXMgYnVpbHQgdXNpbmcgYSBsaW5r ZXIgc2V0LgorCSAqLworCVNFVF9GT1JFQUNIKHBiZSwgbmV0X2JhY2tlbmRfcykgeworCQlpZiAo bmV0YmVfbmFtZV9tYXRjaCgoKnBiZSktPm5hbWUsIGRldm5hbWUpKSB7CisJCQl0YmUgPSAqcGJl OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHRiZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsg Lyogb3IgbnVsbCBiYWNrZW5kID8gKi8KKwliZSA9IGNhbGxvYygxLCBzaXplb2YoKmJlKSk7CisJ KmJlID0gKnRiZTsJLyogY29weSB0aGUgdGVtcGxhdGUgKi8KKwluZXRiZV9maXgoYmUpOyAvKiBt YWtlIHN1cmUgd2UgaGF2ZSBhbGwgZmllbGRzICovCisJYmUtPmZkID0gLTE7CisJYmUtPnByaXYg PSBOVUxMOworCWJlLT5zYyA9IHBhcmFtOworCWJlLT5iZV92bmV0X2hkcl9sZW4gPSAwOworCWJl LT5mZV92bmV0X2hkcl9sZW4gPSAwOworCisJLyogaW5pdGlhbGl6ZSB0aGUgYmFja2VuZCAqLwor CWVyciA9IGJlLT5pbml0KGJlLCBkZXZuYW1lLCBjYiwgcGFyYW0pOworCWlmIChlcnIpIHsKKwkJ ZnJlZShiZSk7CisJCWJlID0gTlVMTDsKKwl9CisJcmV0dXJuIGJlOworfQorCit2b2lkCituZXRi ZV9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwpCisJ CXJldHVybjsKKwliZS0+Y2xlYW51cChiZSk7CisJZnJlZShiZSk7Cit9CisKK3VpbnQ2NF90Citu ZXRiZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpCit7CisJaWYgKGJlID09IE5VTEwp CisJCXJldHVybiAwOworCXJldHVybiBiZS0+Z2V0X2NhcChiZSk7Cit9CisKK2ludAorbmV0YmVf c2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBmZWF0dXJlcywKKwkgICAg ICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pCit7CisJaW50IHJldDsKKworCWlmIChiZSA9PSBOVUxM KQorCQlyZXR1cm4gMDsKKworCS8qIFRoZXJlIGFyZSBvbmx5IHRocmVlIHZhbGlkIGxlbmd0aHMu ICovCisJaWYgKHZuZXRfaGRyX2xlbiAmJiB2bmV0X2hkcl9sZW4gIT0gVk5FVF9IRFJfTEVOCisJ CSYmIHZuZXRfaGRyX2xlbiAhPSAoVk5FVF9IRFJfTEVOIC0gc2l6ZW9mKHVpbnQxNl90KSkpCisJ CXJldHVybiAtMTsKKworCWJlLT5mZV92bmV0X2hkcl9sZW4gPSB2bmV0X2hkcl9sZW47CisKKwly ZXQgPSBiZS0+c2V0X2NhcChiZSwgZmVhdHVyZXMsIHZuZXRfaGRyX2xlbik7CisJYXNzZXJ0KGJl LT5iZV92bmV0X2hkcl9sZW4gPT0gMCB8fAorCSAgICAgICBiZS0+YmVfdm5ldF9oZHJfbGVuID09 IGJlLT5mZV92bmV0X2hkcl9sZW4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5s aW5lIHN0cnVjdCBpb3ZlYyAqCitpb3ZfdHJpbShzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50ICppb3Zj bnQsIHVuc2lnbmVkIGludCB0bGVuKQoreworCXN0cnVjdCBpb3ZlYyAqcmlvdjsKKworCS8qIFhY WCBzaG9ydC1jdXQ6IGFzc3VtZSBmaXJzdCBzZWdtZW50IGlzID49IHRsZW4gKi8KKwlhc3NlcnQo aW92WzBdLmlvdl9sZW4gPj0gdGxlbik7CisKKwlpb3ZbMF0uaW92X2xlbiAtPSB0bGVuOworCWlm IChpb3ZbMF0uaW92X2xlbiA9PSAwKSB7CisJCWFzc2VydCgqaW92Y250ID4gMSk7CisJCSppb3Zj bnQgLT0gMTsKKwkJcmlvdiA9ICZpb3ZbMV07CisJfSBlbHNlIHsKKwkJaW92WzBdLmlvdl9iYXNl ID0gKHZvaWQgKikoKHVpbnRwdHJfdClpb3ZbMF0uaW92X2Jhc2UgKyB0bGVuKTsKKwkJcmlvdiA9 ICZpb3ZbMF07CisJfQorCisJcmV0dXJuIChyaW92KTsKK30KKwordm9pZAorbmV0YmVfc2VuZChz dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwgdWlu dDMyX3QgbGVuLAorCSAgIGludCBtb3JlKQoreworCWlmIChiZSA9PSBOVUxMKQorCQlyZXR1cm47 CisjaWYgMAorCWludCBpOworCUQoInNlbmRpbmcgaW92Y250ICVkIGxlbiAlZCBpb3ZlYyAlcCIs IGlvdmNudCwgbGVuLCBpb3YpOworCWZvciAoaT0wOyBpIDwgaW92Y250OyBpKyspCisJCUQoIiAg ICUzZDogJTRkICVwIiwgaSwgKGludClpb3ZbaV0uaW92X2xlbiwgaW92W2ldLmlvdl9iYXNlKTsK KyNlbmRpZgorCWlmIChiZS0+YmVfdm5ldF9oZHJfbGVuICE9IGJlLT5mZV92bmV0X2hkcl9sZW4p IHsKKwkJLyogSGVyZSB3ZSBhcmUgc3VyZSBiZS0+YmVfdm5ldF9oZHJfbGVuIGlzIDAuICovCisJ CWlvdiA9IGlvdl90cmltKGlvdiwgJmlvdmNudCwgYmUtPmZlX3ZuZXRfaGRyX2xlbik7CisJfQor CisJYmUtPnNlbmQoYmUsIGlvdiwgaW92Y250LCBsZW4sIG1vcmUpOworfQorCisvKgorICogY2Fu IHJldHVybiAtMSBpbiBjYXNlIG9mIGVycm9ycworICovCitpbnQKK25ldGJlX3JlY3Yoc3RydWN0 IG5ldF9iYWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpCit7CisJdW5z aWduZWQgaW50IGhsZW4gPSAwOyAvKiBsZW5ndGggb2YgcHJlcGVuZGVkIHZpcnRpby1uZXQgaGVh ZGVyICovCisJaW50IHJldDsKKworCWlmIChiZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlp ZiAoYmUtPmJlX3ZuZXRfaGRyX2xlbiAhPSBiZS0+ZmVfdm5ldF9oZHJfbGVuKSB7CisJCXN0cnVj dCB2aXJ0aW9fbmV0X3J4aGRyICp2aDsKKworCQkvKiBIZXJlIHdlIGFyZSBzdXJlIGJlLT5iZV92 bmV0X2hkcl9sZW4gaXMgMC4gKi8KKwkJaGxlbiA9IGJlLT5mZV92bmV0X2hkcl9sZW47CisJCS8q CisJCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIHJ4IGhlYWRlciwgYW5kIHVzZSB0aGUKKwkJICog ZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQgZm9yIHRoZSBwYWNrZXQgYnVmZmVyLgorCQkg Ki8KKwkJdmggPSBpb3ZbMF0uaW92X2Jhc2U7CisJCWlvdiA9IGlvdl90cmltKGlvdiwgJmlvdmNu dCwgaGxlbik7CisKKwkJLyoKKwkJICogSGVyZSB3ZSBhcmUgc3VyZSBiZS0+ZmVfdm5ldF9oZHJf bGVuIGlzIDAuCisJCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRoZSByeCBwYWNrZXQgaGVh ZGVyIGlzIHRoZQorCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJnZWQgcnggYnVmcyB3ZXJl IG5lZ290aWF0ZWQuCisJCSAqLworCQltZW1zZXQodmgsIDAsIGhsZW4pOworCisJCWlmIChobGVu ID09IFZORVRfSERSX0xFTikgeworCQkJdmgtPnZyaF9idWZzID0gMTsKKwkJfQorCX0KKworCXJl dCA9IGJlLT5yZWN2KGJlLCBpb3YsIGlvdmNudCk7CisJaWYgKHJldCA+IDApIHsKKwkJcmV0ICs9 IGhsZW47CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlYWQgYSBwYWNrZXQgZnJv bSB0aGUgYmFja2VuZCBhbmQgZGlzY2FyZCBpdC4KKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhl IGRpc2NhcmRlZCBwYWNrZXQgb3IgemVybyBpZiBubyBwYWNrZXQgd2FzIGF2YWlsYWJsZS4KKyAq IEEgbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbiBjYXNlIG9mIHJlYWQgZXJyb3Iu CisgKi8KK2ludAorbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKQorewor CS8qCisJICogTVAgbm90ZTogdGhlIGR1bW15YnVmIGlzIG9ubHkgdXNlZCB0byBkaXNjYXJkIGZy YW1lcywKKwkgKiBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCB0byBiZSBwZXItdnRuZXQgb3Ig bG9ja2VkLgorCSAqIFdlIG9ubHkgbWFrZSBpdCBsYXJnZSBlbm91Z2ggZm9yIFRTTy1zaXplZCBz ZWdtZW50LgorCSAqLworCXN0YXRpYyB1aW50OF90IGR1bW15YnVmWzY1NTM2KzY0XTsKKwlzdHJ1 Y3QgaW92ZWMgaW92OworCisJaW92Lmlvdl9iYXNlID0gZHVtbXlidWY7CisJaW92Lmlvdl9sZW4g PSBzaXplb2YoZHVtbXlidWYpOworCisJcmV0dXJuIG5ldGJlX3JlY3YoYmUsICZpb3YsIDEpOwor fQorCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaCAv dXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaAotLS0gdXNyL3NyYy91c3Iuc2Jp bi9iaHl2ZS9uZXRfYmFja2VuZHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmgJMjAxNi0xMS0zMCAx MDo1NjowNS44NDE5NTgwMDAgKzAwMDAKQEAgLTAsMCArMSw0MzIgQEAKKy8qLQorICogQ29weXJp Z2h0IChjKSAyMDE0IFZpbmNlbnpvIE1hZmZpb25lIDx2Lm1hZmZpb25lQGdtYWlsLmNvbT4KKyAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBB TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwK KyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19ORVRfQkFDS0VORFNfSF9fCisjZGVm aW5lIF9fTkVUX0JBQ0tFTkRTX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBX SVRIX05FVE1BUAorI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bWFw X3ZpcnQuaD4KKyNkZWZpbmUgTkVUTUFQX1dJVEhfTElCUworI2luY2x1ZGUgPG5ldC9uZXRtYXBf dXNlci5oPgorI2lmIChORVRNQVBfQVBJIDwgMTEpCisjZXJyb3IgIk5ldG1hcCBBUEkgdmVyc2lv biBtdXN0IGJlID49IDExIgorI2VuZGlmCisjZW5kaWYgLyogV0lUSF9ORVRNQVAgKi8KKworI2lu Y2x1ZGUgIm1ldmVudC5oIgorCitleHRlcm4gaW50IG5ldG1hcF9pb2N0bF9jb3VudGVyOworCit0 eXBlZGVmIHZvaWQgKCpuZXRfYmFja2VuZF9jYl90KShpbnQsIGVudW0gZXZfdHlwZSwgdm9pZCAq cGFyYW0pOworCisvKiBJbnRlcmZhY2UgYmV0d2VlbiB2aXJ0aW8tbmV0IGFuZCB0aGUgbmV0d29y ayBiYWNrZW5kLiAqLworc3RydWN0IG5ldF9iYWNrZW5kOworCitzdHJ1Y3QgbmV0X2JhY2tlbmQg Km5ldGJlX2luaXQoY29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCW5ldF9iYWNrZW5kX2NiX3QgY2Is IHZvaWQgKnBhcmFtKTsKK3ZvaWQJbmV0YmVfY2xlYW51cChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl KTsKK3VpbnQ2NF90IG5ldGJlX2dldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7CitpbnQJ IG5ldGJlX3NldF9jYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwgdWludDY0X3QgY2FwLAorCQkJ ICAgIHVuc2lnbmVkIHZuZXRfaGRyX2xlbik7Cit2b2lkCW5ldGJlX3NlbmQoc3RydWN0IG5ldF9i YWNrZW5kICpiZSwgc3RydWN0IGlvdmVjICppb3YsCisJCSAgIGludCBpb3ZjbnQsIHVpbnQzMl90 IGxlbiwgaW50IG1vcmUpOworaW50CW5ldGJlX3JlY3Yoc3RydWN0IG5ldF9iYWNrZW5kICpiZSwg c3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpOworaW50CW5ldGJlX3J4X2Rpc2NhcmQoc3Ry dWN0IG5ldF9iYWNrZW5kICpiZSk7CisKKworLyoKKyAqIE5ldHdvcmsgZGV2aWNlIGNhcGFiaWxp dGllcyB0YWtlbiBmcm9tIFZpcnRJTyBzdGFuZGFyZC4KKyAqIERlc3BpdGUgdGhlIG5hbWUsIHRo ZXNlIGNhcGFiaWxpdGllcyBjYW4gYmUgdXNlZCBieSBkaWZmZXJlbnQgZnJvbnRlbnRzCisgKiAo dmlydGlvLW5ldCwgcHRuZXQpIGFuZCBzdXBwb3J0ZWQgYnkgZGlmZmVyZW50IGJhY2tlbmRzIChu ZXRtYXAsIHRhcCwgLi4uKS4KKyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NVTQkoMSA8PCAg MCkgLyogaG9zdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklSVElPX05FVF9G X0dVRVNUX0NTVU0JKDEgPDwgIDEpIC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLwor I2RlZmluZQlWSVJUSU9fTkVUX0ZfTUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBsaWVzIE1BQyAq LworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyogZGVwcmVjYXRl ZDogaG9zdCBoYW5kbGVzIEdTTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNAko MSA8PCAgNykgLyogZ3Vlc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0Zf R1VFU1RfVFNPNgkoMSA8PCAgOCkgLyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlW SVJUSU9fTkVUX0ZfR1VFU1RfRUNOCSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2IFRTTyB3aXRo IEVDTiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEwKSAvKiBndWVz dCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080CSgxIDw8IDEx KSAvKiBob3N0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNP NgkoMSA8PCAxMikgLyogaG9zdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRf Rl9IT1NUX0VDTgkoMSA8PCAxMykgLyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLworI2Rl ZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2FuIHJjdiBVRk8g Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyogaG9zdCBjYW4g bWVyZ2UgUlggYnVmZmVycyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVTCSgxIDw8IDE2 KSAvKiBjb25maWcgc3RhdHVzIGZpZWxkIGF2YWlsYWJsZSAqLworI2RlZmluZQlWSVJUSU9fTkVU X0ZfQ1RSTF9WUQkoMSA8PCAxNykgLyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJsZSAqLworI2Rl ZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBjaGFubmVsIFJY IG1vZGUgc3VwcG9ydCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCSgxIDw8IDE5 KSAvKiBjb250cm9sIGNoYW5uZWwgVkxBTiBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUJVklSVElPX05F VF9GX0dVRVNUX0FOTk9VTkNFIFwKKwkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2FuIHNlbmQgZ3Jh dHVpdG91cyBwa3RzICovCisKKy8qCisgKiBGaXhlZCBuZXR3b3JrIGhlYWRlciBzaXplCisgKi8K K3N0cnVjdCB2aXJ0aW9fbmV0X3J4aGRyIHsKKwl1aW50OF90CQl2cmhfZmxhZ3M7CisJdWludDhf dAkJdnJoX2dzb190eXBlOworCXVpbnQxNl90CXZyaF9oZHJfbGVuOworCXVpbnQxNl90CXZyaF9n c29fc2l6ZTsKKwl1aW50MTZfdAl2cmhfY3N1bV9zdGFydDsKKwl1aW50MTZfdAl2cmhfY3N1bV9v ZmZzZXQ7CisJdWludDE2X3QJdnJoX2J1ZnM7Cit9IF9fcGFja2VkOworCisvKgorICogcHRuZXRt YXAgZGVmaW5pdGlvbnMKKyAqLworc3RydWN0IHB0bmV0bWFwX3N0YXRlIHsKKwl2b2lkCQkqbmV0 bWFwX3ByaXY7CisKKwkvKiBUcnVlIGlmIHB0bmV0bWFwIGt0aHJlYWRzIGFyZSBydW5uaW5nLiAq LworCWludAkJcnVubmluZzsKKworCS8qIEZlYXR1cmUgYWNrbm93ZWxlZGdlbWVudCBzdXBwb3J0 LiAqLworCXVuc2lnbmVkIGxvbmcJZmVhdHVyZXM7CisJdW5zaWduZWQgbG9uZwlhY2tlZF9mZWF0 dXJlczsKKworCS8qIEluZm8gYWJvdXQgbmV0bWFwIG1lbW9yeS4gKi8KKwl1aW50MzJfdAltZW1z aXplOworCXZvaWQJCSptZW07Cit9OworCisjaWZkZWYgV0lUSF9ORVRNQVAKKy8qIFVzZWQgdG8g Z2V0IHJlYWQtb25seSBpbmZvLiAqLworc3RydWN0IG5ldG1hcF9pZl9pbmZvIHsKKwl1aW50MzJf dCBuaWZwX29mZnNldDsKKwl1aW50MTZfdCBudW1fdHhfcmluZ3M7CisJdWludDE2X3QgbnVtX3J4 X3JpbmdzOworCXVpbnQxNl90IG51bV90eF9zbG90czsKKwl1aW50MTZfdCBudW1fcnhfc2xvdHM7 Cit9OworCitpbnQgcHRuX21lbWRldl9hdHRhY2godm9pZCAqbWVtX3B0ciwgc3RydWN0IG5ldG1h cF9wb29sc19pbmZvICopOworaW50IHB0bmV0bWFwX2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0 bWFwX3N0YXRlICpwdG4sCisJCQkgICBzdHJ1Y3QgbmV0bWFwX2lmX2luZm8gKm5pZik7CitzdHJ1 Y3QgcHRuZXRtYXBfc3RhdGUgKiBnZXRfcHRuZXRtYXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7 Cit1aW50MzJfdCBwdG5ldG1hcF9hY2tfZmVhdHVyZXMoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpw dG4sCisJCQkgICAgICAgdWludDMyX3Qgd2FudGVkX2ZlYXR1cmVzKTsKK2ludCBwdG5ldG1hcF9n ZXRfaG9zdG1lbWlkKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKTsKK2ludCBwdG5ldG1hcF9j cmVhdGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4sIHN0cnVjdCBwdG5ldG1hcF9jZmcgKmNm Zyk7CitpbnQgcHRuZXRtYXBfZGVsZXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuKTsKKyNl bmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAicGNpX2VtdWwuaCIKK2ludCBuZXRf cGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpOwordm9pZCBuZXRfZ2Vu bWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIpOworCisjZW5kaWYg LyogX19ORVRfQkFDS0VORFNfSF9fICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNCBWaW5j ZW56byBNYWZmaW9uZSA8di5tYWZmaW9uZUBnbWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV VEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAor ICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KyAqLworCisjaWZuZGVmIF9fTkVUX0JBQ0tFTkRTX0hfXworI2RlZmluZSBfX05FVF9CQUNLRU5E U19IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgV0lUSF9ORVRNQVAKKyNpbmNs dWRlIDxuZXQvbmV0bWFwLmg+CisjaW5jbHVkZSA8bmV0L25ldG1hcF92aXJ0Lmg+CisjZGVmaW5l IE5FVE1BUF9XSVRIX0xJQlMKKyNpbmNsdWRlIDxuZXQvbmV0bWFwX3VzZXIuaD4KKyNpZiAoTkVU TUFQX0FQSSA8IDExKQorI2Vycm9yICJOZXRtYXAgQVBJIHZlcnNpb24gbXVzdCBiZSA+PSAxMSIK KyNlbmRpZgorI2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKyNpbmNsdWRlICJtZXZlbnQuaCIK KworZXh0ZXJuIGludCBuZXRtYXBfaW9jdGxfY291bnRlcjsKKwordHlwZWRlZiB2b2lkICgqbmV0 X2JhY2tlbmRfY2JfdCkoaW50LCBlbnVtIGV2X3R5cGUsIHZvaWQgKnBhcmFtKTsKKworLyogSW50 ZXJmYWNlIGJldHdlZW4gdmlydGlvLW5ldCBhbmQgdGhlIG5ldHdvcmsgYmFja2VuZC4gKi8KK3N0 cnVjdCBuZXRfYmFja2VuZDsKKworc3RydWN0IG5ldF9iYWNrZW5kICpuZXRiZV9pbml0KGNvbnN0 IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9jYl90IGNiLCB2b2lkICpwYXJhbSk7Cit2 b2lkCW5ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNrZW5kICpiZSk7Cit1aW50NjRfdCBuZXRi ZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOworaW50CSBuZXRiZV9zZXRfY2FwKHN0 cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGNhcCwKKwkJCSAgICB1bnNpZ25lZCB2bmV0 X2hkcl9sZW4pOwordm9pZAluZXRiZV9zZW5kKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVj dCBpb3ZlYyAqaW92LAorCQkgICBpbnQgaW92Y250LCB1aW50MzJfdCBsZW4sIGludCBtb3JlKTsK K2ludAluZXRiZV9yZWN2KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92 LCBpbnQgaW92Y250KTsKK2ludAluZXRiZV9yeF9kaXNjYXJkKHN0cnVjdCBuZXRfYmFja2VuZCAq YmUpOworCisKKy8qCisgKiBOZXR3b3JrIGRldmljZSBjYXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBW aXJ0SU8gc3RhbmRhcmQuCisgKiBEZXNwaXRlIHRoZSBuYW1lLCB0aGVzZSBjYXBhYmlsaXRpZXMg Y2FuIGJlIHVzZWQgYnkgZGlmZmVyZW50IGZyb250ZW50cworICogKHZpcnRpby1uZXQsIHB0bmV0 KSBhbmQgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBiYWNrZW5kcyAobmV0bWFwLCB0YXAsIC4uLiku CisgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NTVU0JKDEgPDwgIDApIC8qIGhvc3QgaGFuZGxl cyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9DU1VNCSgxIDw8 ICAxKSAvKiBndWVzdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklSVElPX05F VF9GX01BQwkoMSA8PCAgNSkgLyogaG9zdCBzdXBwbGllcyBNQUMgKi8KKyNkZWZpbmUJVklSVElP X05FVF9GX0dTT19ERVBSRUMJKDEgPDwgIDYpIC8qIGRlcHJlY2F0ZWQ6IGhvc3QgaGFuZGxlcyBH U08gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1RTTzQJKDEgPDwgIDcpIC8qIGd1ZXN0 IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1RTTzYJKDEgPDwg IDgpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjYgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNU X0VDTgkoMSA8PCAgOSkgLyogZ3Vlc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJ VklSVElPX05FVF9GX0dVRVNUX1VGTwkoMSA8PCAxMCkgLyogZ3Vlc3QgY2FuIHJjdiBVRk8gKi8K KyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNAkoMSA8PCAxMSkgLyogaG9zdCBjYW4gcmN2 IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1RTTzYJKDEgPDwgMTIpIC8qIGhv c3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04JKDEgPDwg MTMpIC8qIGhvc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJVklSVElPX05FVF9G X0hPU1RfVUZPCSgxIDw8IDE0KSAvKiBob3N0IGNhbiByY3YgVUZPICovCisjZGVmaW5lCVZJUlRJ T19ORVRfRl9NUkdfUlhCVUYJKDEgPDwgMTUpIC8qIGhvc3QgY2FuIG1lcmdlIFJYIGJ1ZmZlcnMg Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX1NUQVRVUwkoMSA8PCAxNikgLyogY29uZmlnIHN0YXR1 cyBmaWVsZCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVlEJKDEgPDwg MTcpIC8qIGNvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklSVElPX05FVF9G X0NUUkxfUlgJKDEgPDwgMTgpIC8qIGNvbnRyb2wgY2hhbm5lbCBSWCBtb2RlIHN1cHBvcnQgKi8K KyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVkxBTgkoMSA8PCAxOSkgLyogY29udHJvbCBjaGFu bmVsIFZMQU4gZmlsdGVyaW5nICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9BTk5PVU5D RSBcCisJCQkJKDEgPDwgMjEpIC8qIGd1ZXN0IGNhbiBzZW5kIGdyYXR1aXRvdXMgcGt0cyAqLwor CisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQorICovCitzdHJ1Y3QgdmlydGlvX25l dF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOworCXVpbnQ4X3QJCXZyaF9nc29fdHlwZTsK Kwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZfdAl2cmhfZ3NvX3NpemU7CisJdWludDE2 X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJoX2NzdW1fb2Zmc2V0OworCXVpbnQxNl90 CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIHB0bmV0bWFwIGRlZmluaXRpb25zCisg Ki8KK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisJdm9pZAkJKm5ldG1hcF9wcml2OworCisJLyog VHJ1ZSBpZiBwdG5ldG1hcCBrdGhyZWFkcyBhcmUgcnVubmluZy4gKi8KKwlpbnQJCXJ1bm5pbmc7 CisKKwkvKiBGZWF0dXJlIGFja25vd2VsZWRnZW1lbnQgc3VwcG9ydC4gKi8KKwl1bnNpZ25lZCBs b25nCWZlYXR1cmVzOworCXVuc2lnbmVkIGxvbmcJYWNrZWRfZmVhdHVyZXM7CisKKwkvKiBJbmZv IGFib3V0IG5ldG1hcCBtZW1vcnkuICovCisJdWludDMyX3QJbWVtc2l6ZTsKKwl2b2lkCQkqbWVt OworfTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisvKiBVc2VkIHRvIGdldCByZWFkLW9ubHkgaW5m by4gKi8KK3N0cnVjdCBuZXRtYXBfaWZfaW5mbyB7CisJdWludDMyX3QgbmlmcF9vZmZzZXQ7CisJ dWludDE2X3QgbnVtX3R4X3JpbmdzOworCXVpbnQxNl90IG51bV9yeF9yaW5nczsKKwl1aW50MTZf dCBudW1fdHhfc2xvdHM7CisJdWludDE2X3QgbnVtX3J4X3Nsb3RzOworfTsKKworaW50IHB0bl9t ZW1kZXZfYXR0YWNoKHZvaWQgKm1lbV9wdHIsIHN0cnVjdCBuZXRtYXBfcG9vbHNfaW5mbyAqKTsK K2ludCBwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAor CQkJICAgc3RydWN0IG5ldG1hcF9pZl9pbmZvICpuaWYpOworc3RydWN0IHB0bmV0bWFwX3N0YXRl ICogZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDMyX3QgcHRuZXRt YXBfYWNrX2ZlYXR1cmVzKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAorCQkJICAgICAgIHVp bnQzMl90IHdhbnRlZF9mZWF0dXJlcyk7CitpbnQgcHRuZXRtYXBfZ2V0X2hvc3RtZW1pZChzdHJ1 Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CitpbnQgcHRuZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5l dG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmcpOworaW50IHB0bmV0bWFw X2RlbGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CisjZW5kaWYgLyogV0lUSF9ORVRN QVAgKi8KKworI2luY2x1ZGUgInBjaV9lbXVsLmgiCitpbnQgbmV0X3BhcnNlbWFjKGNoYXIgKm1h Y19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKK3ZvaWQgbmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rl dmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKKworI2VuZGlmIC8qIF9fTkVUX0JBQ0tFTkRT X0hfXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVmluY2Vuem8gTWFmZmlvbmUgPHYu bWFmZmlvbmVAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV VE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICog QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBf X05FVF9CQUNLRU5EU19IX18KKyNkZWZpbmUgX19ORVRfQkFDS0VORFNfSF9fCisKKyNpbmNsdWRl IDxzdGRpbnQuaD4KKworI2lmZGVmIFdJVEhfTkVUTUFQCisjaW5jbHVkZSA8bmV0L25ldG1hcC5o PgorI2luY2x1ZGUgPG5ldC9uZXRtYXBfdmlydC5oPgorI2RlZmluZSBORVRNQVBfV0lUSF9MSUJT CisjaW5jbHVkZSA8bmV0L25ldG1hcF91c2VyLmg+CisjaWYgKE5FVE1BUF9BUEkgPCAxMSkKKyNl cnJvciAiTmV0bWFwIEFQSSB2ZXJzaW9uIG11c3QgYmUgPj0gMTEiCisjZW5kaWYKKyNlbmRpZiAv KiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAibWV2ZW50LmgiCisKK2V4dGVybiBpbnQgbmV0 bWFwX2lvY3RsX2NvdW50ZXI7CisKK3R5cGVkZWYgdm9pZCAoKm5ldF9iYWNrZW5kX2NiX3QpKGlu dCwgZW51bSBldl90eXBlLCB2b2lkICpwYXJhbSk7CisKKy8qIEludGVyZmFjZSBiZXR3ZWVuIHZp cnRpby1uZXQgYW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQuICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQ7 CisKK3N0cnVjdCBuZXRfYmFja2VuZCAqbmV0YmVfaW5pdChjb25zdCBjaGFyICpkZXZuYW1lLAor CQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFyYW0pOwordm9pZAluZXRiZV9jbGVhbnVw KHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDY0X3QgbmV0YmVfZ2V0X2NhcChzdHJ1Y3Qg bmV0X2JhY2tlbmQgKmJlKTsKK2ludAkgbmV0YmVfc2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQg KmJlLCB1aW50NjRfdCBjYXAsCisJCQkgICAgdW5zaWduZWQgdm5ldF9oZHJfbGVuKTsKK3ZvaWQJ bmV0YmVfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJ ICAgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQgbW9yZSk7CitpbnQJbmV0YmVfcmVjdihz dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCk7Citp bnQJbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKKworCisvKgorICog TmV0d29yayBkZXZpY2UgY2FwYWJpbGl0aWVzIHRha2VuIGZyb20gVmlydElPIHN0YW5kYXJkLgor ICogRGVzcGl0ZSB0aGUgbmFtZSwgdGhlc2UgY2FwYWJpbGl0aWVzIGNhbiBiZSB1c2VkIGJ5IGRp ZmZlcmVudCBmcm9udGVudHMKKyAqICh2aXJ0aW8tbmV0LCBwdG5ldCkgYW5kIHN1cHBvcnRlZCBi eSBkaWZmZXJlbnQgYmFja2VuZHMgKG5ldG1hcCwgdGFwLCAuLi4pLgorICovCisjZGVmaW5lCVZJ UlRJT19ORVRfRl9DU1VNCSgxIDw8ICAwKSAvKiBob3N0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAq LworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTQkoMSA8PCAgMSkgLyogZ3Vlc3QgaGFu ZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9NQUMJKDEgPDwgIDUp IC8qIGhvc3Qgc3VwcGxpZXMgTUFDICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HU09fREVQUkVD CSgxIDw8ICA2KSAvKiBkZXByZWNhdGVkOiBob3N0IGhhbmRsZXMgR1NPICovCisjZGVmaW5lCVZJ UlRJT19ORVRfRl9HVUVTVF9UU080CSgxIDw8ICA3KSAvKiBndWVzdCBjYW4gcmN2IFRTT3Y0ICov CisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU082CSgxIDw8ICA4KSAvKiBndWVzdCBjYW4g cmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9FQ04JKDEgPDwgIDkpIC8q IGd1ZXN0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVT VF9VRk8JKDEgPDwgMTApIC8qIGd1ZXN0IGNhbiByY3YgVUZPICovCisjZGVmaW5lCVZJUlRJT19O RVRfRl9IT1NUX1RTTzQJKDEgPDwgMTEpIC8qIGhvc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmlu ZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082CSgxIDw8IDEyKSAvKiBob3N0IGNhbiByY3YgVFNPdjYg Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfRUNOCSgxIDw8IDEzKSAvKiBob3N0IGNhbiBy Y3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1VGTwkoMSA8PCAx NCkgLyogaG9zdCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVG CSgxIDw8IDE1KSAvKiBob3N0IGNhbiBtZXJnZSBSWCBidWZmZXJzICovCisjZGVmaW5lCVZJUlRJ T19ORVRfRl9TVEFUVVMJKDEgPDwgMTYpIC8qIGNvbmZpZyBzdGF0dXMgZmllbGQgYXZhaWxhYmxl ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZRCSgxIDw8IDE3KSAvKiBjb250cm9sIGNo YW5uZWwgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1JYCSgxIDw8IDE4 KSAvKiBjb250cm9sIGNoYW5uZWwgUlggbW9kZSBzdXBwb3J0ICovCisjZGVmaW5lCVZJUlRJT19O RVRfRl9DVFJMX1ZMQU4JKDEgPDwgMTkpIC8qIGNvbnRyb2wgY2hhbm5lbCBWTEFOIGZpbHRlcmlu ZyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQU5OT1VOQ0UgXAorCQkJCSgxIDw8IDIx KSAvKiBndWVzdCBjYW4gc2VuZCBncmF0dWl0b3VzIHBrdHMgKi8KKworLyoKKyAqIEZpeGVkIG5l dHdvcmsgaGVhZGVyIHNpemUKKyAqLworc3RydWN0IHZpcnRpb19uZXRfcnhoZHIgeworCXVpbnQ4 X3QJCXZyaF9mbGFnczsKKwl1aW50OF90CQl2cmhfZ3NvX3R5cGU7CisJdWludDE2X3QJdnJoX2hk cl9sZW47CisJdWludDE2X3QJdnJoX2dzb19zaXplOworCXVpbnQxNl90CXZyaF9jc3VtX3N0YXJ0 OworCXVpbnQxNl90CXZyaF9jc3VtX29mZnNldDsKKwl1aW50MTZfdAl2cmhfYnVmczsKK30gX19w YWNrZWQ7CisKKy8qCisgKiBwdG5ldG1hcCBkZWZpbml0aW9ucworICovCitzdHJ1Y3QgcHRuZXRt YXBfc3RhdGUgeworCXZvaWQJCSpuZXRtYXBfcHJpdjsKKworCS8qIFRydWUgaWYgcHRuZXRtYXAg a3RocmVhZHMgYXJlIHJ1bm5pbmcuICovCisJaW50CQlydW5uaW5nOworCisJLyogRmVhdHVyZSBh Y2tub3dlbGVkZ2VtZW50IHN1cHBvcnQuICovCisJdW5zaWduZWQgbG9uZwlmZWF0dXJlczsKKwl1 bnNpZ25lZCBsb25nCWFja2VkX2ZlYXR1cmVzOworCisJLyogSW5mbyBhYm91dCBuZXRtYXAgbWVt b3J5LiAqLworCXVpbnQzMl90CW1lbXNpemU7CisJdm9pZAkJKm1lbTsKK307CisKKyNpZmRlZiBX SVRIX05FVE1BUAorLyogVXNlZCB0byBnZXQgcmVhZC1vbmx5IGluZm8uICovCitzdHJ1Y3QgbmV0 bWFwX2lmX2luZm8geworCXVpbnQzMl90IG5pZnBfb2Zmc2V0OworCXVpbnQxNl90IG51bV90eF9y aW5nczsKKwl1aW50MTZfdCBudW1fcnhfcmluZ3M7CisJdWludDE2X3QgbnVtX3R4X3Nsb3RzOwor CXVpbnQxNl90IG51bV9yeF9zbG90czsKK307CisKK2ludCBwdG5fbWVtZGV2X2F0dGFjaCh2b2lk ICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2luZm8gKik7CitpbnQgcHRuZXRtYXBfZ2V0 X25ldG1hcF9pZihzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAgIHN0cnVjdCBuZXRt YXBfaWZfaW5mbyAqbmlmKTsKK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqIGdldF9wdG5ldG1hcChz dHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK3VpbnQzMl90IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhz dHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAgICAgICB1aW50MzJfdCB3YW50ZWRfZmVh dHVyZXMpOworaW50IHB0bmV0bWFwX2dldF9ob3N0bWVtaWQoc3RydWN0IHB0bmV0bWFwX3N0YXRl ICpwdG4pOworaW50IHB0bmV0bWFwX2NyZWF0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwg c3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKTsKK2ludCBwdG5ldG1hcF9kZWxldGUoc3RydWN0IHB0 bmV0bWFwX3N0YXRlICpwdG4pOworI2VuZGlmIC8qIFdJVEhfTkVUTUFQICovCisKKyNpbmNsdWRl ICJwY2lfZW11bC5oIgoraW50IG5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3RyLCB1aW50OF90ICpt YWNfYWRkcik7Cit2b2lkIG5ldF9nZW5tYWMoc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwgdWludDhf dCAqbWFjYWRkcik7CisKKyNlbmRpZiAvKiBfX05FVF9CQUNLRU5EU19IX18gKi8KZGlmZiAtdSAt ciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF9iYWNrZW5kcy5oLm9yaWcgL3Vzci9zcmMv dXNyLnNiaW4vYmh5dmUvbmV0X2JhY2tlbmRzLmgub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9i aHl2ZS9uZXRfYmFja2VuZHMuaC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfYmFja2VuZHMuaC5vcmlnCTIwMTYt MTEtMzAgMTA6NTI6NTkuOTE3NDc3MDAwICswMDAwCkBAIC0wLDAgKzEsMjg4IEBACisvKi0KKyAq IENvcHlyaWdodCAoYykgMjAxNCBWaW5jZW56byBNYWZmaW9uZSA8di5tYWZmaW9uZUBnbWFpbC5j b20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFO RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAq IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fTkVUX0JBQ0tFTkRTX0hf XworI2RlZmluZSBfX05FVF9CQUNLRU5EU19IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisj aWZkZWYgV0lUSF9ORVRNQVAKKyNpbmNsdWRlIDxuZXQvbmV0bWFwLmg+CisjaW5jbHVkZSA8bmV0 L25ldG1hcF92aXJ0Lmg+CisjZGVmaW5lIE5FVE1BUF9XSVRIX0xJQlMKKyNpbmNsdWRlIDxuZXQv bmV0bWFwX3VzZXIuaD4KKyNpZiAoTkVUTUFQX0FQSSA8IDExKQorI2Vycm9yICJOZXRtYXAgQVBJ IHZlcnNpb24gbXVzdCBiZSA+PSAxMSIKKyNlbmRpZgorI2VuZGlmIC8qIFdJVEhfTkVUTUFQICov CisKKyNpbmNsdWRlICJtZXZlbnQuaCIKKworZXh0ZXJuIGludCBuZXRtYXBfaW9jdGxfY291bnRl cjsKKwordHlwZWRlZiB2b2lkICgqbmV0X2JhY2tlbmRfY2JfdCkoaW50LCBlbnVtIGV2X3R5cGUs IHZvaWQgKnBhcmFtKTsKKworLyogSW50ZXJmYWNlIGJldHdlZW4gdmlydGlvLW5ldCBhbmQgdGhl IG5ldHdvcmsgYmFja2VuZC4gKi8KK3N0cnVjdCBuZXRfYmFja2VuZDsKKworc3RydWN0IG5ldF9i YWNrZW5kICpuZXRiZV9pbml0KGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQluZXRfYmFja2VuZF9j Yl90IGNiLCB2b2lkICpwYXJhbSk7Cit2b2lkCW5ldGJlX2NsZWFudXAoc3RydWN0IG5ldF9iYWNr ZW5kICpiZSk7Cit1aW50NjRfdCBuZXRiZV9nZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUp OworaW50CSBuZXRiZV9zZXRfY2FwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUsIHVpbnQ2NF90IGNh cCwKKwkJCSAgICB1bnNpZ25lZCB2bmV0X2hkcl9sZW4pOwordm9pZAluZXRiZV9zZW5kKHN0cnVj dCBuZXRfYmFja2VuZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgICBpbnQgaW92Y250LCB1 aW50MzJfdCBsZW4sIGludCBtb3JlKTsKK2ludAluZXRiZV9yZWN2KHN0cnVjdCBuZXRfYmFja2Vu ZCAqYmUsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KTsKK2ludAluZXRiZV9yeF9kaXNj YXJkKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOworCisKKy8qCisgKiBOZXR3b3JrIGRldmljZSBj YXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBWaXJ0SU8gc3RhbmRhcmQuCisgKiBEZXNwaXRlIHRoZSBu YW1lLCB0aGVzZSBjYXBhYmlsaXRpZXMgY2FuIGJlIHVzZWQgYnkgZGlmZmVyZW50IGZyb250ZW50 cworICogKHZpcnRpby1uZXQsIHB0bmV0KSBhbmQgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBiYWNr ZW5kcyAobmV0bWFwLCB0YXAsIC4uLikuCisgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NTVU0J KDEgPDwgIDApIC8qIGhvc3QgaGFuZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJUlRJ T19ORVRfRl9HVUVTVF9DU1VNCSgxIDw8ICAxKSAvKiBndWVzdCBoYW5kbGVzIHBhcnRpYWwgY2tz dW0gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX01BQwkoMSA8PCAgNSkgLyogaG9zdCBzdXBwbGll cyBNQUMgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dTT19ERVBSRUMJKDEgPDwgIDYpIC8qIGRl cHJlY2F0ZWQ6IGhvc3QgaGFuZGxlcyBHU08gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNU X1RTTzQJKDEgPDwgIDcpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElP X05FVF9GX0dVRVNUX1RTTzYJKDEgPDwgIDgpIC8qIGd1ZXN0IGNhbiByY3YgVFNPdjYgKi8KKyNk ZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0VDTgkoMSA8PCAgOSkgLyogZ3Vlc3QgY2FuIHJjdiBU U08gd2l0aCBFQ04gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX1VGTwkoMSA8PCAxMCkg LyogZ3Vlc3QgY2FuIHJjdiBVRk8gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNAko MSA8PCAxMSkgLyogaG9zdCBjYW4gcmN2IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9I T1NUX1RTTzYJKDEgPDwgMTIpIC8qIGhvc3QgY2FuIHJjdiBUU092NiAqLworI2RlZmluZQlWSVJU SU9fTkVUX0ZfSE9TVF9FQ04JKDEgPDwgMTMpIC8qIGhvc3QgY2FuIHJjdiBUU08gd2l0aCBFQ04g Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVUZPCSgxIDw8IDE0KSAvKiBob3N0IGNhbiBy Y3YgVUZPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYJKDEgPDwgMTUpIC8qIGhv c3QgY2FuIG1lcmdlIFJYIGJ1ZmZlcnMgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX1NUQVRVUwko MSA8PCAxNikgLyogY29uZmlnIHN0YXR1cyBmaWVsZCBhdmFpbGFibGUgKi8KKyNkZWZpbmUJVklS VElPX05FVF9GX0NUUkxfVlEJKDEgPDwgMTcpIC8qIGNvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUg Ki8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfUlgJKDEgPDwgMTgpIC8qIGNvbnRyb2wgY2hh bm5lbCBSWCBtb2RlIHN1cHBvcnQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0NUUkxfVkxBTgko MSA8PCAxOSkgLyogY29udHJvbCBjaGFubmVsIFZMQU4gZmlsdGVyaW5nICovCisjZGVmaW5lCVZJ UlRJT19ORVRfRl9HVUVTVF9BTk5PVU5DRSBcCisJCQkJKDEgPDwgMjEpIC8qIGd1ZXN0IGNhbiBz ZW5kIGdyYXR1aXRvdXMgcGt0cyAqLworCisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6 ZQorICovCitzdHJ1Y3QgdmlydGlvX25ldF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOwor CXVpbnQ4X3QJCXZyaF9nc29fdHlwZTsKKwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZf dAl2cmhfZ3NvX3NpemU7CisJdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJo X2NzdW1fb2Zmc2V0OworCXVpbnQxNl90CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAq IHB0bmV0bWFwIGRlZmluaXRpb25zCisgKi8KK3N0cnVjdCBwdG5ldG1hcF9zdGF0ZSB7CisJdm9p ZAkJKm5ldG1hcF9wcml2OworCisJLyogVHJ1ZSBpZiBwdG5ldG1hcCBrdGhyZWFkcyBhcmUgcnVu bmluZy4gKi8KKwlpbnQJCXJ1bm5pbmc7CisKKwkvKiBGZWF0dXJlIGFja25vd2VsZWRnZW1lbnQg c3VwcG9ydC4gKi8KKwl1bnNpZ25lZCBsb25nCWZlYXR1cmVzOworCXVuc2lnbmVkIGxvbmcJYWNr ZWRfZmVhdHVyZXM7CisKKwkvKiBJbmZvIGFib3V0IG5ldG1hcCBtZW1vcnkuICovCisJdWludDMy X3QJbWVtc2l6ZTsKKwl2b2lkCQkqbWVtOworfTsKKworI2lmZGVmIFdJVEhfTkVUTUFQCisvKiBV c2VkIHRvIGdldCByZWFkLW9ubHkgaW5mby4gKi8KK3N0cnVjdCBuZXRtYXBfaWZfaW5mbyB7CisJ dWludDMyX3QgbmlmcF9vZmZzZXQ7CisJdWludDE2X3QgbnVtX3R4X3JpbmdzOworCXVpbnQxNl90 IG51bV9yeF9yaW5nczsKKwl1aW50MTZfdCBudW1fdHhfc2xvdHM7CisJdWludDE2X3QgbnVtX3J4 X3Nsb3RzOworfTsKKworaW50IHB0bl9tZW1kZXZfYXR0YWNoKHZvaWQgKm1lbV9wdHIsIHN0cnVj dCBuZXRtYXBfcG9vbHNfaW5mbyAqKTsKK2ludCBwdG5ldG1hcF9nZXRfbmV0bWFwX2lmKHN0cnVj dCBwdG5ldG1hcF9zdGF0ZSAqcHRuLAorCQkJICAgc3RydWN0IG5ldG1hcF9pZl9pbmZvICpuaWYp Oworc3RydWN0IHB0bmV0bWFwX3N0YXRlICogZ2V0X3B0bmV0bWFwKHN0cnVjdCBuZXRfYmFja2Vu ZCAqYmUpOwordWludDMyX3QgcHRuZXRtYXBfYWNrX2ZlYXR1cmVzKHN0cnVjdCBwdG5ldG1hcF9z dGF0ZSAqcHRuLAorCQkJICAgICAgIHVpbnQzMl90IHdhbnRlZF9mZWF0dXJlcyk7CitpbnQgcHRu ZXRtYXBfZ2V0X2hvc3RtZW1pZChzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0bik7CitpbnQgcHRu ZXRtYXBfY3JlYXRlKHN0cnVjdCBwdG5ldG1hcF9zdGF0ZSAqcHRuLCBzdHJ1Y3QgcHRuZXRtYXBf Y2ZnICpjZmcpOworaW50IHB0bmV0bWFwX2RlbGV0ZShzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0 bik7CisjZW5kaWYgLyogV0lUSF9ORVRNQVAgKi8KKworI2luY2x1ZGUgInBjaV9lbXVsLmgiCitp bnQgbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKK3ZvaWQg bmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKKwor I2VuZGlmIC8qIF9fTkVUX0JBQ0tFTkRTX0hfXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw MTQgVmluY2Vuem8gTWFmZmlvbmUgPHYubWFmZmlvbmVAZ21haWwuY29tPgorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICog T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisgKi8KKworI2lmbmRlZiBfX05FVF9CQUNLRU5EU19IX18KKyNkZWZpbmUgX19ORVRf QkFDS0VORFNfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIFdJVEhfTkVUTUFQ CisjaW5jbHVkZSA8bmV0L25ldG1hcC5oPgorI2luY2x1ZGUgPG5ldC9uZXRtYXBfdmlydC5oPgor I2RlZmluZSBORVRNQVBfV0lUSF9MSUJTCisjaW5jbHVkZSA8bmV0L25ldG1hcF91c2VyLmg+Cisj aWYgKE5FVE1BUF9BUEkgPCAxMSkKKyNlcnJvciAiTmV0bWFwIEFQSSB2ZXJzaW9uIG11c3QgYmUg Pj0gMTEiCisjZW5kaWYKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLworCisjaW5jbHVkZSAibWV2 ZW50LmgiCisKK2V4dGVybiBpbnQgbmV0bWFwX2lvY3RsX2NvdW50ZXI7CisKK3R5cGVkZWYgdm9p ZCAoKm5ldF9iYWNrZW5kX2NiX3QpKGludCwgZW51bSBldl90eXBlLCB2b2lkICpwYXJhbSk7CisK Ky8qIEludGVyZmFjZSBiZXR3ZWVuIHZpcnRpby1uZXQgYW5kIHRoZSBuZXR3b3JrIGJhY2tlbmQu ICovCitzdHJ1Y3QgbmV0X2JhY2tlbmQ7CisKK3N0cnVjdCBuZXRfYmFja2VuZCAqbmV0YmVfaW5p dChjb25zdCBjaGFyICpkZXZuYW1lLAorCQkJbmV0X2JhY2tlbmRfY2JfdCBjYiwgdm9pZCAqcGFy YW0pOwordm9pZAluZXRiZV9jbGVhbnVwKHN0cnVjdCBuZXRfYmFja2VuZCAqYmUpOwordWludDY0 X3QgbmV0YmVfZ2V0X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK2ludAkgbmV0YmVfc2V0 X2NhcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCB1aW50NjRfdCBjYXAsCisJCQkgICAgdW5zaWdu ZWQgdm5ldF9oZHJfbGVuKTsKK3ZvaWQJbmV0YmVfc2VuZChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJl LCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJICAgaW50IGlvdmNudCwgdWludDMyX3QgbGVuLCBpbnQg bW9yZSk7CitpbnQJbmV0YmVfcmVjdihzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlLCBzdHJ1Y3QgaW92 ZWMgKmlvdiwgaW50IGlvdmNudCk7CitpbnQJbmV0YmVfcnhfZGlzY2FyZChzdHJ1Y3QgbmV0X2Jh Y2tlbmQgKmJlKTsKKworCisvKgorICogTmV0d29yayBkZXZpY2UgY2FwYWJpbGl0aWVzIHRha2Vu IGZyb20gVmlydElPIHN0YW5kYXJkLgorICogRGVzcGl0ZSB0aGUgbmFtZSwgdGhlc2UgY2FwYWJp bGl0aWVzIGNhbiBiZSB1c2VkIGJ5IGRpZmZlcmVudCBmcm9udGVudHMKKyAqICh2aXJ0aW8tbmV0 LCBwdG5ldCkgYW5kIHN1cHBvcnRlZCBieSBkaWZmZXJlbnQgYmFja2VuZHMgKG5ldG1hcCwgdGFw LCAuLi4pLgorICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DU1VNCSgxIDw8ICAwKSAvKiBob3N0 IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NV TQkoMSA8PCAgMSkgLyogZ3Vlc3QgaGFuZGxlcyBwYXJ0aWFsIGNrc3VtICovCisjZGVmaW5lCVZJ UlRJT19ORVRfRl9NQUMJKDEgPDwgIDUpIC8qIGhvc3Qgc3VwcGxpZXMgTUFDICovCisjZGVmaW5l CVZJUlRJT19ORVRfRl9HU09fREVQUkVDCSgxIDw8ICA2KSAvKiBkZXByZWNhdGVkOiBob3N0IGhh bmRsZXMgR1NPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU080CSgxIDw8ICA3KSAv KiBndWVzdCBjYW4gcmN2IFRTT3Y0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9UU082 CSgxIDw8ICA4KSAvKiBndWVzdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJUlRJT19ORVRf Rl9HVUVTVF9FQ04JKDEgPDwgIDkpIC8qIGd1ZXN0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisj ZGVmaW5lCVZJUlRJT19ORVRfRl9HVUVTVF9VRk8JKDEgPDwgMTApIC8qIGd1ZXN0IGNhbiByY3Yg VUZPICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQJKDEgPDwgMTEpIC8qIGhvc3Qg Y2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU082CSgxIDw8IDEy KSAvKiBob3N0IGNhbiByY3YgVFNPdjYgKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfRUNO CSgxIDw8IDEzKSAvKiBob3N0IGNhbiByY3YgVFNPIHdpdGggRUNOICovCisjZGVmaW5lCVZJUlRJ T19ORVRfRl9IT1NUX1VGTwkoMSA8PCAxNCkgLyogaG9zdCBjYW4gcmN2IFVGTyAqLworI2RlZmlu ZQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGCSgxIDw8IDE1KSAvKiBob3N0IGNhbiBtZXJnZSBSWCBi dWZmZXJzICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9TVEFUVVMJKDEgPDwgMTYpIC8qIGNvbmZp ZyBzdGF0dXMgZmllbGQgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZR CSgxIDw8IDE3KSAvKiBjb250cm9sIGNoYW5uZWwgYXZhaWxhYmxlICovCisjZGVmaW5lCVZJUlRJ T19ORVRfRl9DVFJMX1JYCSgxIDw8IDE4KSAvKiBjb250cm9sIGNoYW5uZWwgUlggbW9kZSBzdXBw b3J0ICovCisjZGVmaW5lCVZJUlRJT19ORVRfRl9DVFJMX1ZMQU4JKDEgPDwgMTkpIC8qIGNvbnRy b2wgY2hhbm5lbCBWTEFOIGZpbHRlcmluZyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1Rf QU5OT1VOQ0UgXAorCQkJCSgxIDw8IDIxKSAvKiBndWVzdCBjYW4gc2VuZCBncmF0dWl0b3VzIHBr dHMgKi8KKworLyoKKyAqIEZpeGVkIG5ldHdvcmsgaGVhZGVyIHNpemUKKyAqLworc3RydWN0IHZp cnRpb19uZXRfcnhoZHIgeworCXVpbnQ4X3QJCXZyaF9mbGFnczsKKwl1aW50OF90CQl2cmhfZ3Nv X3R5cGU7CisJdWludDE2X3QJdnJoX2hkcl9sZW47CisJdWludDE2X3QJdnJoX2dzb19zaXplOwor CXVpbnQxNl90CXZyaF9jc3VtX3N0YXJ0OworCXVpbnQxNl90CXZyaF9jc3VtX29mZnNldDsKKwl1 aW50MTZfdAl2cmhfYnVmczsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBwdG5ldG1hcCBkZWZpbml0 aW9ucworICovCitzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgeworCXZvaWQJCSpuZXRtYXBfcHJpdjsK KworCS8qIFRydWUgaWYgcHRuZXRtYXAga3RocmVhZHMgYXJlIHJ1bm5pbmcuICovCisJaW50CQly dW5uaW5nOworCisJLyogRmVhdHVyZSBhY2tub3dlbGVkZ2VtZW50IHN1cHBvcnQuICovCisJdW5z aWduZWQgbG9uZwlmZWF0dXJlczsKKwl1bnNpZ25lZCBsb25nCWFja2VkX2ZlYXR1cmVzOworCisJ LyogSW5mbyBhYm91dCBuZXRtYXAgbWVtb3J5LiAqLworCXVpbnQzMl90CW1lbXNpemU7CisJdm9p ZAkJKm1lbTsKK307CisKKyNpZmRlZiBXSVRIX05FVE1BUAorLyogVXNlZCB0byBnZXQgcmVhZC1v bmx5IGluZm8uICovCitzdHJ1Y3QgbmV0bWFwX2lmX2luZm8geworCXVpbnQzMl90IG5pZnBfb2Zm c2V0OworCXVpbnQxNl90IG51bV90eF9yaW5nczsKKwl1aW50MTZfdCBudW1fcnhfcmluZ3M7CisJ dWludDE2X3QgbnVtX3R4X3Nsb3RzOworCXVpbnQxNl90IG51bV9yeF9zbG90czsKK307CisKK2lu dCBwdG5fbWVtZGV2X2F0dGFjaCh2b2lkICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFwX3Bvb2xzX2lu Zm8gKik7CitpbnQgcHRuZXRtYXBfZ2V0X25ldG1hcF9pZihzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUg KnB0biwKKwkJCSAgIHN0cnVjdCBuZXRtYXBfaWZfaW5mbyAqbmlmKTsKK3N0cnVjdCBwdG5ldG1h cF9zdGF0ZSAqIGdldF9wdG5ldG1hcChzdHJ1Y3QgbmV0X2JhY2tlbmQgKmJlKTsKK3VpbnQzMl90 IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhzdHJ1Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwKKwkJCSAg ICAgICB1aW50MzJfdCB3YW50ZWRfZmVhdHVyZXMpOworaW50IHB0bmV0bWFwX2dldF9ob3N0bWVt aWQoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pOworaW50IHB0bmV0bWFwX2NyZWF0ZShzdHJ1 Y3QgcHRuZXRtYXBfc3RhdGUgKnB0biwgc3RydWN0IHB0bmV0bWFwX2NmZyAqY2ZnKTsKK2ludCBw dG5ldG1hcF9kZWxldGUoc3RydWN0IHB0bmV0bWFwX3N0YXRlICpwdG4pOworI2VuZGlmIC8qIFdJ VEhfTkVUTUFQICovCisKKyNpbmNsdWRlICJwY2lfZW11bC5oIgoraW50IG5ldF9wYXJzZW1hYyhj aGFyICptYWNfc3RyLCB1aW50OF90ICptYWNfYWRkcik7Cit2b2lkIG5ldF9nZW5tYWMoc3RydWN0 IHBjaV9kZXZpbnN0ICpwaSwgdWludDhfdCAqbWFjYWRkcik7CisKKyNlbmRpZiAvKiBfX05FVF9C QUNLRU5EU19IX18gKi8KZGlmZiAtdSAtciAtTiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91 dGlscy5jIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5jCi0tLSB1c3Ivc3JjL3Vz ci5zYmluL2JoeXZlL25ldF91dGlscy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfdXRpbHMuYwkyMDE2LTEyLTAxIDEz OjE4OjUxLjcxOTAzNjAwMCArMDAwMApAQCAtMCwwICsxLDg2IEBACisvKi0KKyAqIENvcHlyaWdo dCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U UklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IK KyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVk ZSAibmV0X3V0aWxzLmgiCisjaW5jbHVkZSAiYmh5dmVydW4uaCIKKyNpbmNsdWRlIDxtZDUuaD4K KyNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBTb21lIHV0aWxzIGZ1bmN0 aW9ucywgdXNlZCBieSBuZXQgZnJvbnQtZW5kcy4gT3JpZ2luYWxseSwgdGhleSB3ZXJlCisgKiBp biBwY2lfdmlydGlvX25ldC5jLgorICovCisKK2ludAorbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19z dHIsIHVpbnQ4X3QgKm1hY19hZGRyKQoreworICAgICAgICBzdHJ1Y3QgZXRoZXJfYWRkciAqZWE7 CisgICAgICAgIGNoYXIgKnRtcHN0cjsKKyAgICAgICAgY2hhciB6ZXJvX2FkZHJbRVRIRVJfQURE Ul9MRU5dID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgdG1wc3RyID0gc3Ryc2Vw KCZtYWNfc3RyLCI9Iik7CisKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3Ry Y21wKHRtcHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9uKG1h Y19zdHIpOworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNfTVVM VElDQVNUKGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5vY3Rl dCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRlcnIs ICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg ICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAg ICAgICB9CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwordm9pZAorbmV0X2dlbm1hYyhzdHJ1 Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKQoreworCS8qCisJICogVGhlIGRl ZmF1bHQgTUFDIGFkZHJlc3MgaXMgdGhlIHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgs CisJICogZm9sbG93ZWQgYnkgYW4gTUQ1IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQg ZGV2IG5hbWUKKwkgKi8KKwlNRDVfQ1RYIG1kY3R4OworCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2 XTsKKwljaGFyIG5zdHJbODBdOworCisJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQt JWQtJXMiLCBwaS0+cGlfc2xvdCwKKwkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwlNRDVJ bml0KCZtZGN0eCk7CisJTUQ1VXBkYXRlKCZtZGN0eCwgbnN0ciwgKHVuc2lnbmVkIGludClzdHJs ZW4obnN0cikpOworCU1ENUZpbmFsKGRpZ2VzdCwgJm1kY3R4KTsKKworCW1hY2FkZHJbMF0gPSAw eDAwOworCW1hY2FkZHJbMV0gPSAweGEwOworCW1hY2FkZHJbMl0gPSAweDk4OworCW1hY2FkZHJb M10gPSBkaWdlc3RbMF07CisJbWFjYWRkcls0XSA9IGRpZ2VzdFsxXTsKKwltYWNhZGRyWzVdID0g ZGlnZXN0WzJdOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0 aWxzLmMub3JpZyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9uZXRfdXRpbHMuYy5vcmlnCi0tLSB1 c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5jLm9yaWcJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5j Lm9yaWcJMjAxNi0xMS0zMCAxMDo1Mjo1OS45MjEwMDkwMDAgKzAwMDAKQEAgLTAsMCArMSwxNzIg QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICog T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisgKi8KKyNpbmNsdWRlICJuZXRfdXRpbHMuaCIKKyNpbmNsdWRlICJiaHl2ZXJ1bi5o IgorI2luY2x1ZGUgPG1kNS5oPgorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoK KyAqIFNvbWUgdXRpbHMgZnVuY3Rpb25zLCB1c2VkIGJ5IG5ldCBmcm9udC1lbmRzLiBPcmlnaW5h bGx5LCB0aGV5IHdlcmUKKyAqIGluIHBjaV92aXJ0aW9fbmV0LmMuCisgKi8KKworaW50CituZXRf cGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpCit7CisgICAgICAgIHN0 cnVjdCBldGhlcl9hZGRyICplYTsKKyAgICAgICAgY2hhciAqdG1wc3RyOworICAgICAgICBjaGFy IHplcm9fYWRkcltFVEhFUl9BRERSX0xFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAg ICAgICB0bXBzdHIgPSBzdHJzZXAoJm1hY19zdHIsIj0iKTsKKworICAgICAgICBpZiAoKG1hY19z dHIgIT0gTlVMTCkgJiYgKCFzdHJjbXAodG1wc3RyLCJtYWMiKSkpIHsKKyAgICAgICAgICAgICAg ICBlYSA9IGV0aGVyX2F0b24obWFjX3N0cik7CisKKyAgICAgICAgICAgICAgICBpZiAoZWEgPT0g TlVMTCB8fCBFVEhFUl9JU19NVUxUSUNBU1QoZWEtPm9jdGV0KSB8fAorICAgICAgICAgICAgICAg ICAgICBtZW1jbXAoZWEtPm9jdGV0LCB6ZXJvX2FkZHIsIEVUSEVSX0FERFJfTEVOKSA9PSAwKSB7 CisJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTUFDICVzXG4iLCBtYWNfc3RyKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUlOVkFMKTsKKyAgICAgICAgICAgICAgICB9IGVs c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShtYWNfYWRkciwgZWEtPm9jdGV0LCBF VEhFUl9BRERSX0xFTik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKDApOworfQorCit2 b2lkCituZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIp Cit7CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBNQUMgYWRkcmVzcyBpcyB0aGUgc3RhbmRhcmQgTmV0 QXBwIE9VSSBvZiAwMC1hMC05OCwKKwkgKiBmb2xsb3dlZCBieSBhbiBNRDUgb2YgdGhlIFBDSSBz bG90L2Z1bmMgbnVtYmVyIGFuZCBkZXYgbmFtZQorCSAqLworCU1ENV9DVFggbWRjdHg7CisJdW5z aWduZWQgY2hhciBkaWdlc3RbMTZdOworCWNoYXIgbnN0cls4MF07CisKKwlzbnByaW50Zihuc3Ry LCBzaXplb2YobnN0ciksICIlZC0lZC0lcyIsIHBpLT5waV9zbG90LAorCSAgICBwaS0+cGlfZnVu Yywgdm1uYW1lKTsKKworCU1ENUluaXQoJm1kY3R4KTsKKwlNRDVVcGRhdGUoJm1kY3R4LCBuc3Ry LCAodW5zaWduZWQgaW50KXN0cmxlbihuc3RyKSk7CisJTUQ1RmluYWwoZGlnZXN0LCAmbWRjdHgp OworCisJbWFjYWRkclswXSA9IDB4MDA7CisJbWFjYWRkclsxXSA9IDB4YTA7CisJbWFjYWRkclsy XSA9IDB4OTg7CisJbWFjYWRkclszXSA9IGRpZ2VzdFswXTsKKwltYWNhZGRyWzRdID0gZGlnZXN0 WzFdOworCW1hY2FkZHJbNV0gPSBkaWdlc3RbMl07Cit9CisvKi0KKyAqIENvcHlyaWdodCAoYykg MjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP UlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJV U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAibmV0 X3V0aWxzLmgiCisjaW5jbHVkZSAiYmh5dmVydW4uaCIKKyNpbmNsdWRlIDxtZDUuaD4KKyNpbmNs dWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBTb21lIHV0aWxzIGZ1bmN0aW9ucywg dXNlZCBieSBuZXQgZnJvbnQtZW5kcy4gT3JpZ2luYWxseSwgdGhleSB3ZXJlCisgKiBpbiBwY2lf dmlydGlvX25ldC5jLgorICovCisKK2ludAorbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVp bnQ4X3QgKm1hY19hZGRyKQoreworICAgICAgICBzdHJ1Y3QgZXRoZXJfYWRkciAqZWE7CisgICAg ICAgIGNoYXIgKnRtcHN0cjsKKyAgICAgICAgY2hhciB6ZXJvX2FkZHJbRVRIRVJfQUREUl9MRU5d ID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgdG1wc3RyID0gc3Ryc2VwKCZtYWNf c3RyLCI9Iik7CisKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICghc3RyY21wKHRt cHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9uKG1hY19zdHIp OworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNfTVVMVElDQVNU KGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5vY3RldCwgemVy b19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJJbnZh bGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g KEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg ICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgICAgICB9 CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwordm9pZAorbmV0X2dlbm1hYyhzdHJ1Y3QgcGNp X2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKQoreworCS8qCisJICogVGhlIGRlZmF1bHQg TUFDIGFkZHJlc3MgaXMgdGhlIHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgsCisJICog Zm9sbG93ZWQgYnkgYW4gTUQ1IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQgZGV2IG5h bWUKKwkgKi8KKwlNRDVfQ1RYIG1kY3R4OworCXVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XTsKKwlj aGFyIG5zdHJbODBdOworCisJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQtJWQtJXMi LCBwaS0+cGlfc2xvdCwKKwkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwlNRDVJbml0KCZt ZGN0eCk7CisJTUQ1VXBkYXRlKCZtZGN0eCwgbnN0ciwgKHVuc2lnbmVkIGludClzdHJsZW4obnN0 cikpOworCU1ENUZpbmFsKGRpZ2VzdCwgJm1kY3R4KTsKKworCW1hY2FkZHJbMF0gPSAweDAwOwor CW1hY2FkZHJbMV0gPSAweGEwOworCW1hY2FkZHJbMl0gPSAweDk4OworCW1hY2FkZHJbM10gPSBk aWdlc3RbMF07CisJbWFjYWRkcls0XSA9IGRpZ2VzdFsxXTsKKwltYWNhZGRyWzVdID0gZGlnZXN0 WzJdOworfQpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgg L3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgKLS0tIHVzci9zcmMvdXNyLnNiaW4v Ymh5dmUvbmV0X3V0aWxzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr IC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5oCTIwMTYtMTEtMzAgMTA6NTY6MDUu ODQ3NzIyMDAwICswMDAwCkBAIC0wLDAgKzEsMTAyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg MjAxMSBOZXRBcHAsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP UlNgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJV U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9ORVRf VVRJTFNfSF8KKyNkZWZpbmUgX05FVF9VVElMU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj aW5jbHVkZSAicGNpX2VtdWwuaCIKKwordm9pZAluZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5z dCAqcGksIHVpbnQ4X3QgKm1hY2FkZHIpOworaW50CW5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3Ry LCB1aW50OF90ICptYWNfYWRkcik7CisjZW5kaWYgLyogX05FVF9VVElMU19IXyAqLworLyotCisg KiBDb3B5cmlnaHQgKGMpIDIwMTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP UiBBTkQgQ09OVFJJQlVUT1JTYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB VVRIT1IgT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICog T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAor ICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq LworI2lmbmRlZiBfTkVUX1VUSUxTX0hfCisjZGVmaW5lIF9ORVRfVVRJTFNfSF8KKworI2luY2x1 ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisKK3ZvaWQJbmV0X2dlbm1hYyhz dHJ1Y3QgcGNpX2Rldmluc3QgKnBpLCB1aW50OF90ICptYWNhZGRyKTsKK2ludAluZXRfcGFyc2Vt YWMoY2hhciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpOworI2VuZGlmIC8qIF9ORVRfVVRJ TFNfSF8gKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIE5ldEFwcCwgSW5jLgorICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SU2BgQVMgSVMnJyBBTkQKKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICog T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX05FVF9VVElMU19IXworI2RlZmluZSBfTkVUX1VU SUxTX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJwY2lfZW11bC5oIgorCit2 b2lkCW5ldF9nZW5tYWMoc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwgdWludDhfdCAqbWFjYWRkcik7 CitpbnQJbmV0X3BhcnNlbWFjKGNoYXIgKm1hY19zdHIsIHVpbnQ4X3QgKm1hY19hZGRyKTsKKyNl bmRpZiAvKiBfTkVUX1VUSUxTX0hfICovCmRpZmYgLXUgLXIgLU4gdXNyL3NyYy91c3Iuc2Jpbi9i aHl2ZS9uZXRfdXRpbHMuaC5vcmlnIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL25ldF91dGlscy5o Lm9yaWcKLS0tIHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvbmV0X3V0aWxzLmgub3JpZwkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmh5dmUv bmV0X3V0aWxzLmgub3JpZwkyMDE2LTExLTMwIDEwOjUyOjU5LjkyMzAzMTAwMCArMDAwMApAQCAt MCwwICsxLDY4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBOZXRBcHAsIEluYy4KKyAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5ECisgKiBB TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwK KyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9ORVRfVVRJTFNfSF8KKyNkZWZpbmUgX05F VF9VVElMU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAicGNpX2VtdWwuaCIK Kwordm9pZAluZXRfZ2VubWFjKHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksIHVpbnQ4X3QgKm1hY2Fk ZHIpOworaW50CW5ldF9wYXJzZW1hYyhjaGFyICptYWNfc3RyLCB1aW50OF90ICptYWNfYWRkcik7 CisjZW5kaWYgLyogX05FVF9VVElMU19IXyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEg TmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTYGBB UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorICogRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUX1VUSUxT X0hfCisjZGVmaW5lIF9ORVRfVVRJTFNfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1 ZGUgInBjaV9lbXVsLmgiCisKK3ZvaWQJbmV0X2dlbm1hYyhzdHJ1Y3QgcGNpX2Rldmluc3QgKnBp LCB1aW50OF90ICptYWNhZGRyKTsKK2ludAluZXRfcGFyc2VtYWMoY2hhciAqbWFjX3N0ciwgdWlu dDhfdCAqbWFjX2FkZHIpOworI2VuZGlmIC8qIF9ORVRfVVRJTFNfSF8gKi8KZGlmZiAtdSAtciAt TiB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV9wdG5ldG1hcF9tZW1kZXYuYyAvdXNyL3NyYy91 c3Iuc2Jpbi9iaHl2ZS9wY2lfcHRuZXRtYXBfbWVtZGV2LmMKLS0tIHVzci9zcmMvdXNyLnNiaW4v Ymh5dmUvcGNpX3B0bmV0bWFwX21lbWRldi5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lfcHRuZXRtYXBfbWVtZGV2LmMJ MjAxNi0xMS0zMCAxMDo1NjoxMC40NDQwODUwMDAgKzAwMDAKQEAgLTAsMCArMSwzNDEgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RlZmFubyBHYXJ6YXJlbGxhIChzdGVmYW5vLmdhcnph cmVsbGFAZ21haWwuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBD T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor I2lmZGVmIFdJVEhfTkVUTUFQCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG5ldC9p Zi5oPgkvKiBJRk5BTVNJWiAqLworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxu ZXQvbmV0bWFwX3ZpcnQuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvdm1tLmg+CisjaW5jbHVkZSA8 dm1tYXBpLmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgi CisKKy8qCisgKiBwdG5ldG1hcCBtZW1kZXYgUENJIGRldmljZQorICoKKyAqIFRoaXMgZGV2aWNl IGlzIHVzZWQgdG8gbWFwIGEgbmV0bWFwIG1lbW9yeSBhbGxvY2F0b3Igb24gdGhlIGd1ZXN0IFZN CisgKiB0aHJvdWdoIFBDSV9CQVIuIFRoZSBzYW1lIGFsbG9jYXRvciBjYW4gYmUgc2hhcmVkIGJl dHdlZW4gbXVsdGlwbGUgcHRuZXRtYXAKKyAqIHBvcnRzIGluIHRoZSBndWVzdC4KKyAqCisgKiBF YWNoIG5ldG1hcCBhbGxvY2F0b3IgaGFzIGEgdW5pcXVlIElEIGFzc2lnbmVkIGJ5IHRoZSBuZXRt YXAgaG9zdCBtb2R1bGUuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgaXMgYmFzZWQg b24gdGhlIFFFTVUvS1ZNIG9uZS4KKyAqLworc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgeworCXN0 cnVjdCBwY2lfZGV2aW5zdCAqcGk7CQkvKiBQQ0kgZGV2aWNlIGluc3RhbmNlICovCisKKwl2b2lk ICptZW1fcHRyOwkJCS8qIG5ldG1hcCBzaGFyZWQgbWVtb3J5ICovCisJc3RydWN0IG5ldG1hcF9w b29sc19pbmZvIGluZm87CisKKwlUQUlMUV9FTlRSWShwdG5fbWVtZGV2X3NvZnRjKSBuZXh0Owor fTsKK3N0YXRpYyBUQUlMUV9IRUFEKCwgcHRuX21lbWRldl9zb2Z0YykgcHRuX21lbWRldnMgPSBU QUlMUV9IRUFEX0lOSVRJQUxJWkVSKHB0bl9tZW1kZXZzKTsKKworLyoKKyAqIHB0bl9tZW1kZXZf c29mdGMgY2FuIGJlIGNyZWF0ZWQgYnkgcGVfaW5pdCBvciBwdG5ldG1hcCBiYWNrZW5kLAorICog dGhpcyBkZXBlbmRzIG9uIHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGlj IHN0cnVjdCBwdG5fbWVtZGV2X3NvZnRjICoKK3B0bl9tZW1kZXZfY3JlYXRlKCkKK3sKKwlzdHJ1 Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2M7CisKKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0 IHB0bl9tZW1kZXZfc29mdGMpKTsKKwlpZiAoc2MgIT0gTlVMTCkgeworCQlUQUlMUV9JTlNFUlRf VEFJTCgmcHRuX21lbWRldnMsIHNjLCBuZXh0KTsKKwl9CisKKwlyZXR1cm4gc2M7Cit9CisKK3N0 YXRpYyB2b2lkCitwdG5fbWVtZGV2X2RlbGV0ZShzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2Mp Cit7CisJVEFJTFFfUkVNT1ZFKCZwdG5fbWVtZGV2cywgc2MsIG5leHQpOworCisJZnJlZShzYyk7 Cit9CisKKy8qCisgKiBGaW5kIHB0bl9tZW1kZXYgdGhyb3VnaCBtZW1pZCAobmV0bWFwIG1lbW9y eSBhbGxvY2F0b3IgSUQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqCitw dG5fbWVtZGV2X2ZpbmRfbWVtaWQodWludDMyX3QgbWVtX2lkKQoreworCXN0cnVjdCBwdG5fbWVt ZGV2X3NvZnRjICpzYzsKKworCVRBSUxRX0ZPUkVBQ0goc2MsICZwdG5fbWVtZGV2cywgbmV4dCkg eworCQlpZiAoc2MtPm1lbV9wdHIgIT0gTlVMTCAmJiBtZW1faWQgPT0gc2MtPmluZm8ubWVtaWQp IHsKKwkJCXJldHVybiBzYzsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICog RmluZCBwdG5fbWVtZGV2IHRoYXQgaGFzIG5vdCBuZXRtYXAgbWVtb3J5IChhdHRhY2hlZCBieSBw dG5ldG1hcCBiYWNrZW5kKQorICovCitzdGF0aWMgc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgKgor cHRuX21lbWRldl9maW5kX2VtcHR5X21lbSgpCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29mdGMg KnNjOworCisJVEFJTFFfRk9SRUFDSChzYywgJnB0bl9tZW1kZXZzLCBuZXh0KSB7CisJCWlmIChz Yy0+bWVtX3B0ciA9PSBOVUxMKSB7CisJCQlyZXR1cm4gc2M7CisJCX0KKwl9CisKKwlyZXR1cm4g TlVMTDsKK30KKworLyoKKyAqIEZpbmQgcHRuX21lbWRldiB0aGF0IGhhcyBub3QgUENJIGRldmlj ZSBpc3RhbmNlIChjcmVhdGVkIGJ5IHBlX2luaXQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHRuX21l bWRldl9zb2Z0YyAqCitwdG5fbWVtZGV2X2ZpbmRfZW1wdHlfcGkoKQoreworCXN0cnVjdCBwdG5f bWVtZGV2X3NvZnRjICpzYzsKKworCVRBSUxRX0ZPUkVBQ0goc2MsICZwdG5fbWVtZGV2cywgbmV4 dCkgeworCQlpZiAoc2MtPnBpID09IE5VTEwpIHsKKwkJCXJldHVybiBzYzsKKwkJfQorCX0KKwor CXJldHVybiBOVUxMOworfQorCisvKgorICogSGFuZGxlIHJlYWQgb24gcHRuZXRtYXAtbWVtZGV2 IHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB1aW50NjRfdAorcHRuX3BjaV9yZWFkKHN0cnVjdCB2bWN0 eCAqY3R4LCBpbnQgdmNwdSwgc3RydWN0IHBjaV9kZXZpbnN0ICpwaSwKKwkgICAgIGludCBiYXJp ZHgsIHVpbnQ2NF90IG9mZnNldCwgaW50IHNpemUpCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29m dGMgKnNjID0gcGktPnBpX2FyZzsKKworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwor CWlmIChiYXJpZHggPT0gUFRORVRNQVBfSU9fUENJX0JBUikgeworCQlzd2l0Y2ggKG9mZnNldCkg eworCQljYXNlIFBUTkVUX01ERVZfSU9fTUVNU0laRV9MTzoKKwkJCXJldHVybiBzYy0+aW5mby5t ZW1zaXplICYgMHhmZmZmZmZmZjsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX01FTVNJWkVfSEk6CisJ CQlyZXR1cm4gc2MtPmluZm8ubWVtc2l6ZSA+PiAzMjsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX01F TUlEOgorCQkJcmV0dXJuIHNjLT5pbmZvLm1lbWlkOworCQljYXNlIFBUTkVUX01ERVZfSU9fSUZf UE9PTF9PRlM6CisJCQlyZXR1cm4gc2MtPmluZm8uaWZfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRO RVRfTURFVl9JT19JRl9QT09MX09CSk5VTToKKwkJCXJldHVybiBzYy0+aW5mby5pZl9wb29sX29i anRvdGFsOworCQljYXNlIFBUTkVUX01ERVZfSU9fSUZfUE9PTF9PQkpTWjoKKwkJCXJldHVybiBz Yy0+aW5mby5pZl9wb29sX29ianNpemU7CisJCWNhc2UgUFRORVRfTURFVl9JT19SSU5HX1BPT0xf T0ZTOgorCQkJcmV0dXJuIHNjLT5pbmZvLnJpbmdfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRORVRf TURFVl9JT19SSU5HX1BPT0xfT0JKTlVNOgorCQkJcmV0dXJuIHNjLT5pbmZvLnJpbmdfcG9vbF9v Ymp0b3RhbDsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX1JJTkdfUE9PTF9PQkpTWjoKKwkJCXJldHVy biBzYy0+aW5mby5yaW5nX3Bvb2xfb2Jqc2l6ZTsKKwkJY2FzZSBQVE5FVF9NREVWX0lPX0JVRl9Q T09MX09GUzoKKwkJCXJldHVybiBzYy0+aW5mby5idWZfcG9vbF9vZmZzZXQ7CisJCWNhc2UgUFRO RVRfTURFVl9JT19CVUZfUE9PTF9PQkpOVU06CisJCQlyZXR1cm4gc2MtPmluZm8uYnVmX3Bvb2xf b2JqdG90YWw7CisJCWNhc2UgUFRORVRfTURFVl9JT19CVUZfUE9PTF9PQkpTWjoKKwkJCXJldHVy biBzYy0+aW5mby5idWZfcG9vbF9vYmpzaXplOworCQl9CisJfQorCisJcHJpbnRmKCIlczogVW5l eHBlY3RlZCByZWdpc3RlciByZWFkIFtiYXIgJXUsIG9mZnNldCAlbHggc2l6ZSAlZF1cbiIsCisJ CV9fZnVuY19fLCBiYXJpZHgsIG9mZnNldCwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoK KyAqIEhhbmRsZSB3cml0ZSBvbiBwdG5ldG1hcC1tZW1kZXYgcmVnaXN0ZXIgKHVudXNlZCBmb3Ig bm93KQorICovCitzdGF0aWMgdm9pZAorcHRuX3BjaV93cml0ZShzdHJ1Y3Qgdm1jdHggKmN0eCwg aW50IHZjcHUsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGksCisJICAgICAgaW50IGJhcmlkeCwgdWlu dDY0X3Qgb2Zmc2V0LCBpbnQgc2l6ZSwgdWludDY0X3QgdmFsdWUpCit7CisJc3RydWN0IHB0bl9t ZW1kZXZfc29mdGMgKnNjID0gcGktPnBpX2FyZzsKKworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1 cm47CisKKwlwcmludGYoIiVzOiBVbmV4cGVjdGVkIHJlZ2lzdGVyIHdyaXRlIFtiYXIgJXUsIG9m ZnNldCAlbHggc2l6ZSAlZCAiCisJICAgICAgICJ2YWx1ZSAlbHhdXG4iLCBfX2Z1bmNfXywgYmFy aWR4LCBvZmZzZXQsIHNpemUsIHZhbHVlKTsKK30KKworLyoKKyAqIENvbmZpZ3VyZSB0aGUgcHRu ZXRtYXAtbWVtZGV2IFBDSSBCQVJzLiBQQ0kgQkFScyBjYW4gb25seSBiZSBjcmVhdGVkCisgKiB3 aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIGNyZWF0ZWQgYW5kIHRoZSBuZXRtYXAgbWVtb3J5IGlzIGF0 dGFjaGVkLgorICovCitzdGF0aWMgaW50CitwdG5fbWVtZGV2X2NvbmZpZ3VyZV9iYXJzKHN0cnVj dCBwdG5fbWVtZGV2X3NvZnRjICpzYykKK3sKKwlpbnQgcmV0OworCisJaWYgKHNjLT5waSA9PSBO VUxMIHx8IHNjLT5tZW1fcHRyID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogQWxsb2NhdGUg YSBCQVIgZm9yIGFuIEkvTyByZWdpb24uICovCisJcmV0ID0gcGNpX2VtdWxfYWxsb2NfYmFyKHNj LT5waSwgUFRORVRNQVBfSU9fUENJX0JBUiwgUENJQkFSX0lPLAorCQkJCSBQVE5FVF9NREVWX0lP X0VORCk7CisJaWYgKHJldCkgeworCQlwcmludGYoInB0bmV0bWFwX21lbWRldjogaW9iYXIgYWxs b2NhdGlvbiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBBbGxv Y2F0ZSBhIEJBUiBmb3IgYSBtZW1vcnkgcmVnaW9uLiAqLworCXJldCA9IHBjaV9lbXVsX2FsbG9j X2JhcihzYy0+cGksIFBUTkVUTUFQX01FTV9QQ0lfQkFSLCBQQ0lCQVJfTUVNMzIsCisJCQlzYy0+ aW5mby5tZW1zaXplKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigicHRuZXRtYXBfbWVtZGV2OiBt ZW1iYXIgYWxsb2NhdGlvbiBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwkvKiBNYXAgbmV0bWFwIG1lbW9yeSBvbiB0aGUgbWVtb3J5IEJBUi4gKi8KKwlyZXQgPSB2bV9t YXBfdXNlcl9idWYoc2MtPnBpLT5waV92bWN0eCwKKwkJCSAgICAgIHNjLT5waS0+cGlfYmFyW1BU TkVUTUFQX01FTV9QQ0lfQkFSXS5hZGRyLAorCQkJICAgICAgc2MtPmluZm8ubWVtc2l6ZSwgc2Mt Pm1lbV9wdHIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IG1lbWJh ciBtYXAgZXJyb3IgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKKy8qCisgKiBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uCisgKi8KK3N0YXRpYyBpbnQK K3B0bl9tZW1kZXZfaW5pdChzdHJ1Y3Qgdm1jdHggKmN0eCwgc3RydWN0IHBjaV9kZXZpbnN0ICpw aSwgY2hhciAqb3B0cykKK3sKKwlzdHJ1Y3QgcHRuX21lbWRldl9zb2Z0YyAqc2M7CisJaW50IHJl dDsKKworCXNjID0gcHRuX21lbWRldl9maW5kX2VtcHR5X3BpKCk7CisJaWYgKHNjID09IE5VTEwp IHsKKwkJc2MgPSBwdG5fbWVtZGV2X2NyZWF0ZSgpOworCQlpZiAoc2MgPT0gTlVMTCkgeworCQkJ cHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IGNhbGxvYyBlcnJvclxuIik7CisJCQlyZXR1cm4gKEVO T01FTSk7CisJCX0KKwl9CisKKwkvKiBMaW5rIG91ciBzb2Z0YyBpbiB0aGUgcGNpX2Rldmluc3Qu ICovCisJcGktPnBpX2FyZyA9IHNjOworCXNjLT5waSA9IHBpOworCisJLyogSW5pdGlhbGl6ZSBQ Q0kgY29uZmlndXJhdGlvbiBzcGFjZS4gKi8KKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJUl9W RU5ET1IsIFBUTkVUTUFQX1BDSV9WRU5ET1JfSUQpOworCXBjaV9zZXRfY2ZnZGF0YTE2KHBpLCBQ Q0lSX0RFVklDRSwgUFRORVRNQVBfUENJX0RFVklDRV9JRCk7CisJcGNpX3NldF9jZmdkYXRhOChw aSwgUENJUl9DTEFTUywgUENJQ19ORVRXT1JLKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJ Ul9TVUJERVZfMCwgMSk7CisJcGNpX3NldF9jZmdkYXRhMTYocGksIFBDSVJfU1VCVkVORF8wLCBQ VE5FVE1BUF9QQ0lfVkVORE9SX0lEKTsKKworCS8qIENvbmZpZ3VyZSBQQ0ktQkFScy4gKi8KKwly ZXQgPSBwdG5fbWVtZGV2X2NvbmZpZ3VyZV9iYXJzKHNjKTsKKwlpZiAocmV0KSB7CisJCXByaW50 ZigicHRuZXRtYXBfbWVtZGV2OiBjb25maWd1cmUgZXJyb3JcbiIpOworCQlnb3RvIGVycjsKKwl9 CisKKwlyZXR1cm4gMDsKK2VycjoKKwlwdG5fbWVtZGV2X2RlbGV0ZShzYyk7CisJcGktPnBpX2Fy ZyA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHVzZWQgYnkgcHRuZXRtYXAgYmFj a2VuZCB0byBhdHRhY2ggdGhlIG5ldG1hcCBtZW1vcnkgYWxsb2NhdG9yIHRvIHRoZQorICogcHRu ZXRtYXAtbWVtZGV2LiAoc2hhcmVkIHdpdGggdGhlIGd1ZXN0IFZNIHRocm91Z2ggUENJLUJBUikK KyAqLworaW50CitwdG5fbWVtZGV2X2F0dGFjaCh2b2lkICptZW1fcHRyLCBzdHJ1Y3QgbmV0bWFw X3Bvb2xzX2luZm8gKmluZm8pCit7CisJc3RydWN0IHB0bl9tZW1kZXZfc29mdGMgKnNjOworCWlu dCByZXQ7CisKKwkvKiBpZiBhIGRldmljZSB3aXRoIHRoZSBzYW1lIG1lbV9pZCBpcyBhbHJlYWR5 IGF0dGFjaGVkLCB3ZSBhcmUgZG9uZSAqLworCWlmIChwdG5fbWVtZGV2X2ZpbmRfbWVtaWQoaW5m by0+bWVtaWQpKSB7CisJCXByaW50ZigicHRuZXRtYXBfbWVtZGV2OiBhbHJlYWR5IGF0dGNoZWRc biIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzYyA9IHB0bl9tZW1kZXZfZmluZF9lbXB0eV9tZW0o KTsKKwlpZiAoc2MgPT0gTlVMTCkgeworCQlzYyA9IHB0bl9tZW1kZXZfY3JlYXRlKCk7CisJCWlm IChzYyA9PSBOVUxMKSB7CisJCQlwcmludGYoInB0bmV0bWFwX21lbWRldjogY2FsbG9jIGVycm9y XG4iKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCX0KKworCXNjLT5tZW1fcHRyID0gbWVt X3B0cjsKKwlzYy0+aW5mbyA9ICppbmZvOworCisJLyogY29uZmlndXJlIGRldmljZSBQQ0ktQkFS cyAqLworCXJldCA9IHB0bl9tZW1kZXZfY29uZmlndXJlX2JhcnMoc2MpOworCWlmIChyZXQpIHsK KwkJcHJpbnRmKCJwdG5ldG1hcF9tZW1kZXY6IGNvbmZpZ3VyZSBlcnJvclxuIik7CisJCWdvdG8g ZXJyOworCX0KKworCisJcmV0dXJuIDA7CitlcnI6CisJcHRuX21lbWRldl9kZWxldGUoc2MpOwor CXNjLT5waS0+cGlfYXJnID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcGNpX2Rl dmVtdSBwY2lfZGVfcHRuZXRtYXAgPSB7CisJLnBlX2VtdSA9IAlQVE5FVE1BUF9NRU1ERVZfTkFN RSwKKwkucGVfaW5pdCA9CXB0bl9tZW1kZXZfaW5pdCwKKwkucGVfYmFyd3JpdGUgPQlwdG5fcGNp X3dyaXRlLAorCS5wZV9iYXJyZWFkID0JcHRuX3BjaV9yZWFkCit9OworUENJX0VNVUxfU0VUKHBj aV9kZV9wdG5ldG1hcCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLwpkaWZmIC11IC1yIC1O IHVzci9zcmMvdXNyLnNiaW4vYmh5dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMgL3Vzci9zcmMvdXNy LnNiaW4vYmh5dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMKLS0tIHVzci9zcmMvdXNyLnNiaW4vYmh5 dmUvcGNpX3B0bmV0bWFwX25ldGlmLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV9wdG5ldG1hcF9uZXRpZi5jCTIwMTYt MTEtMzAgMTA6NTY6MTAuNDU1ODI0MDAwICswMDAwCkBAIC0wLDAgKzEsNDExIEBACisvKgorICog Q29weXJpZ2h0IChDKSAyMDE2IFZpbmNlbnpvIE1hZmZpb25lCisgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKKyAqICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT VUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBlbXVsYXRp b24gb2YgdGhlIHB0bmV0IG5ldHdvcmsgZnJvbnRlbmQsIHRvIGJlIHVzZWQKKyAqIHdpdGggbmV0 bWFwIGJhY2tlbmQuCisgKi8KKworI2lmZGVmIFdJVEhfTkVUTUFQCisKKyNpbmNsdWRlIDxzeXMv Y2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGVycm5vLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQu aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgkvKiBJRk5BTVNJ WiAqLworI2luY2x1ZGUgPG5ldC9uZXRtYXAuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bWFwX3ZpcnQu aD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2lu Y2x1ZGUgPHN5cy9fY3B1c2V0Lmg+CisjaW5jbHVkZSA8bWFjaGluZS92bW0uaD4KKyNpbmNsdWRl IDxtYWNoaW5lL3ZtbV9kZXYuaD4JLyogVk1fTEFQSUNfTVNJICovCisjaW5jbHVkZSA8dm1tYXBp Lmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisjaW5j bHVkZSAibmV0X3V0aWxzLmgiCisjaW5jbHVkZSAibmV0X2JhY2tlbmRzLmgiCisKKyNpZm5kZWYg UFRORVRfQ1NCX0FMTE9DCisjZXJyb3IgIkh5cGVydmlzb3ItYWxsb2NhdGVkIENTQiBub3Qgc3Vw cG9ydGVkIgorI2VuZGlmCisKKworc3RydWN0IHB0bmV0X3NvZnRjIHsKKwlzdHJ1Y3QgcGNpX2Rl dmluc3QJKnBpOworCisJc3RydWN0IG5ldF9iYWNrZW5kCSpiZTsKKwlzdHJ1Y3QgcHRuZXRtYXBf c3RhdGUJKnB0YmU7CisKKwl1bnNpZ25lZCBpbnQJCW51bV9yaW5nczsKKwl1aW50MzJfdAkJaW9y ZWdzW1BUTkVUX0lPX0VORCA+PiAyXTsKKwl2b2lkCQkJKmNzYjsKK307CisKK3N0YXRpYyBpbnQK K3B0bmV0X2dldF9uZXRtYXBfaWYoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwl1bnNpZ25l ZCBpbnQgbnVtX3JpbmdzOworCXN0cnVjdCBuZXRtYXBfaWZfaW5mbyBuaWY7CisJaW50IHJldDsK KworCXJldCA9IHB0bmV0bWFwX2dldF9uZXRtYXBfaWYoc2MtPnB0YmUsICZuaWYpOworCWlmIChy ZXQpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX05JRlBfT0ZT ID4+IDJdID0gbmlmLm5pZnBfb2Zmc2V0OworCXNjLT5pb3JlZ3NbUFRORVRfSU9fTlVNX1RYX1JJ TkdTID4+IDJdID0gbmlmLm51bV90eF9yaW5nczsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX05VTV9S WF9SSU5HUyA+PiAyXSA9IG5pZi5udW1fcnhfcmluZ3M7CisJc2MtPmlvcmVnc1tQVE5FVF9JT19O VU1fVFhfU0xPVFMgPj4gMl0gPSBuaWYubnVtX3R4X3Nsb3RzOworCXNjLT5pb3JlZ3NbUFRORVRf SU9fTlVNX1JYX1NMT1RTID4+IDJdID0gbmlmLm51bV9yeF9zbG90czsKKworCW51bV9yaW5ncyA9 IHNjLT5pb3JlZ3NbUFRORVRfSU9fTlVNX1RYX1JJTkdTID4+IDJdICsKKwkJICAgIHNjLT5pb3Jl Z3NbUFRORVRfSU9fTlVNX1JYX1JJTkdTID4+IDJdOworCWlmIChzYy0+bnVtX3JpbmdzICYmIG51 bV9yaW5ncyAmJiBzYy0+bnVtX3JpbmdzICE9IG51bV9yaW5ncykgeworCQlmcHJpbnRmKHN0ZGVy ciwgIk51bWJlciBvZiByaW5ncyBjaGFuZ2VkOiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJu IEVJTlZBTDsKKwl9CisJc2MtPm51bV9yaW5ncyA9IG51bV9yaW5nczsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50CitwdG5ldF9wdGN0bF9jcmVhdGUoc3RydWN0IHB0bmV0X3NvZnRjICpz YykKK3sKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnZW50cnlfYmh5dmUgKmNmZ2VudHJ5OworCXN0cnVj dCBwY2lfZGV2aW5zdCAqcGkgPSBzYy0+cGk7CisJc3RydWN0IHZtY3R4ICp2bWN0eCA9IHBpLT5w aV92bWN0eDsKKwlzdHJ1Y3QgcHRuZXRtYXBfY2ZnICpjZmc7CisJdW5zaWduZWQgaW50IGtpY2tf YWRkcjsKKwlpbnQgcmV0OworCWludCBpOworCisJaWYgKHNjLT5jc2IgPT0gTlVMTCkgeworCQlm cHJpbnRmKHN0ZGVyciwgIiVzOiBVbmV4cGVjdGVkIE5VTEwgQ1NCIiwgX19mdW5jX18pOworCQly ZXR1cm4gLTE7CisJfQorCisJY2ZnID0gY2FsbG9jKDEsIHNpemVvZigqY2ZnKSArIHNjLT5udW1f cmluZ3MgKiBzaXplb2YoKmNmZ2VudHJ5KSk7CisKKwljZmctPmNmZ3R5cGUgPSBQVE5FVE1BUF9D RkdUWVBFX0JIWVZFOworCWNmZy0+ZW50cnlfc2l6ZSA9IHNpemVvZigqY2ZnZW50cnkpOworCWNm Zy0+bnVtX3JpbmdzID0gc2MtPm51bV9yaW5nczsKKwljZmctPnB0cmluZ3MgPSBzYy0+Y3NiOwor CisJa2lja19hZGRyID0gcGktPnBpX2JhcltQVE5FVE1BUF9JT19QQ0lfQkFSXS5hZGRyICsgUFRO RVRfSU9fS0lDS19CQVNFOworCWNmZ2VudHJ5ID0gKHN0cnVjdCBwdG5ldG1hcF9jZmdlbnRyeV9i aHl2ZSAqKShjZmcgKyAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3JpbmdzOyBpKyss IGtpY2tfYWRkciArPSA0LCBjZmdlbnRyeSsrKSB7CisJCXN0cnVjdCBtc2l4X3RhYmxlX2VudHJ5 ICptdGU7CisJCXVpbnQ2NF90IGNvb2tpZSA9IHNjLT5pb3JlZ3NbUFRORVRfSU9fTUFDX0xPID4+ IDJdICsgNCppOworCisJCWNmZ2VudHJ5LT5pb2N0bF9mZCA9IHZtX2dldF9mZCh2bWN0eCk7CisJ CWNmZ2VudHJ5LT5pb2N0bF9jbWQgPSBWTV9MQVBJQ19NU0k7CisJCW10ZSA9ICZwaS0+cGlfbXNp eC50YWJsZVtpXTsKKwkJY2ZnZW50cnktPmlvY3RsX2RhdGEuYWRkciA9IG10ZS0+YWRkcjsKKwkJ Y2ZnZW50cnktPmlvY3RsX2RhdGEubXNnX2RhdGEgPSBtdGUtPm1zZ19kYXRhOworCisJCWZwcmlu dGYoc3RkZXJyLCAiJXM6IHZlY3RvciAldSwgYWRkciAlbHUsIGRhdGEgJXUsICIKKwkJCQkia2lj a19hZGRyICV1LCBjb29raWU6ICVwXG4iLAorCQkJX19mdW5jX18sIGksIG10ZS0+YWRkciwgbXRl LT5tc2dfZGF0YSwga2lja19hZGRyLAorCQkJKHZvaWQqKWNvb2tpZSk7CisKKwkJcmV0ID0gdm1f aW9fcmVnX2hhbmRsZXIodm1jdHgsIGtpY2tfYWRkciAvKiBpb2FkZHIgKi8sCisJCQkJCTAgLyog aW4gKi8sIDAgLyogbWFza19kYXRhICovLAorCQkJCQkwIC8qIGRhdGEgKi8sIFZNX0lPX1JFR0hf S1dFVkVOVFMsCisJCQkJCSh2b2lkKiljb29raWUgLyogY29va2llICovKTsKKwkJaWYgKHJldCkg eworCQkJZnByaW50ZihzdGRlcnIsICIlczogdm1faW9fcmVnX2hhbmRsZXIgJWRcbiIsCisJCQkJ X19mdW5jX18sIHJldCk7CisJCX0KKwkJY2ZnZW50cnktPndjaGFuID0gKHVpbnQ2NF90KSBjb29r aWU7CisJfQorCisJcmV0ID0gcHRuZXRtYXBfY3JlYXRlKHNjLT5wdGJlLCBjZmcpOworCWZyZWUo Y2ZnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3B0bmV0X3B0Y3RsX2RlbGV0 ZShzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBwY2lfZGV2aW5zdCAqcGkgPSBz Yy0+cGk7CisJc3RydWN0IHZtY3R4ICp2bWN0eCA9IHBpLT5waV92bWN0eDsKKwl1bnNpZ25lZCBp bnQga2lja19hZGRyOworCWludCBpOworCisJa2lja19hZGRyID0gcGktPnBpX2JhcltQVE5FVE1B UF9JT19QQ0lfQkFSXS5hZGRyICsgUFRORVRfSU9fS0lDS19CQVNFOworCisJZm9yIChpID0gMDsg aSA8IHNjLT5udW1fcmluZ3M7IGkrKywga2lja19hZGRyICs9IDQpIHsKKwkJdm1faW9fcmVnX2hh bmRsZXIodm1jdHgsIGtpY2tfYWRkciwgMCwgMCwgMCwKKwkJCQkgIFZNX0lPX1JFR0hfREVMRVRF LCAwKTsKKwl9CisKKwlyZXR1cm4gcHRuZXRtYXBfZGVsZXRlKHNjLT5wdGJlKTsKK30KKworc3Rh dGljIHZvaWQKK3B0bmV0X3B0Y3RsKHN0cnVjdCBwdG5ldF9zb2Z0YyAqc2MsIHVpbnQ2NF90IGNt ZCkKK3sKKwlpbnQgcmV0ID0gRUlOVkFMOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBUTkVU TUFQX1BUQ1RMX0NSRUFURToKKwkJLyogUmVhY3QgdG8gYSBSRUdJRiBpbiB0aGUgZ3Vlc3QuICov CisJCXJldCA9IHB0bmV0X3B0Y3RsX2NyZWF0ZShzYyk7CisJCWJyZWFrOworCisJY2FzZSBQVE5F VE1BUF9QVENUTF9ERUxFVEU6CisJCS8qIFJlYWN0IHRvIGFuIFVOUkVHSUYgaW4gdGhlIGd1ZXN0 LiAqLworCQlyZXQgPSBwdG5ldF9wdGN0bF9kZWxldGUoc2MpOworCQlicmVhazsKKwl9CisKKwlz Yy0+aW9yZWdzW1BUTkVUX0lPX1BUQ1RMID4+IDJdID0gcmV0OworfQorCitzdGF0aWMgdm9pZAor cHRuZXRfY3NiX21hcHBpbmcoc3RydWN0IHB0bmV0X3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBi YXNlID0gKCh1aW50NjRfdClzYy0+aW9yZWdzW1BUTkVUX0lPX0NTQkJBSCA+PiAyXSA8PCAzMikg fAorCQkJc2MtPmlvcmVnc1tQVE5FVF9JT19DU0JCQUwgPj4gMl07CisJdWludDY0X3QgbGVuID0g NDA5NjsKKworCXNjLT5jc2IgPSBOVUxMOworCWlmIChiYXNlKSB7CisJCXNjLT5jc2IgPSBwYWRk cl9ndWVzdDJob3N0KHNjLT5waS0+cGlfdm1jdHgsIGJhc2UsIGxlbik7CisJfQorfQorCitzdGF0 aWMgdm9pZAorcHRuZXRfYmFyX3dyaXRlKHN0cnVjdCB2bWN0eCAqY3R4LCBpbnQgdmNwdSwgc3Ry dWN0IHBjaV9kZXZpbnN0ICpwaSwKKwkgICAgICBpbnQgYmFyaWR4LCB1aW50NjRfdCBvZmZzZXQs IGludCBzaXplLCB1aW50NjRfdCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcHRuZXRfc29mdGMgKnNjID0g cGktPnBpX2FyZzsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwkvKiBSZWRpcmVjdCB0byBNU0kt WCBlbXVsYXRpb24gY29kZS4gKi8KKwlpZiAoYmFyaWR4ID09IHBjaV9tc2l4X3RhYmxlX2Jhcihw aSkgfHwKKwkJCWJhcmlkeCA9PSBwY2lfbXNpeF9wYmFfYmFyKHBpKSkgeworCQlwY2lfZW11bF9t c2l4X3R3cml0ZShwaSwgb2Zmc2V0LCBzaXplLCB2YWx1ZSk7CisJCXJldHVybjsKKwl9CisKKwlp ZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJb2Zmc2V0ICY9IFBUTkVUX0lPX01BU0s7CisJ aW5kZXggPSBvZmZzZXQgPj4gMjsKKworCWlmIChiYXJpZHggIT0gUFRORVRNQVBfSU9fUENJX0JB UiB8fCBvZmZzZXQgPj0gUFRORVRfSU9fRU5EKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IFVu ZXhwZWN0ZWQgcmVnaXN0ZXIgd3JpdGUgW2JhciAldSwgIgorCQkJIm9mZnNldCAlbHggc2l6ZSAl ZCB2YWx1ZSAlbHhdXG4iLCBfX2Z1bmNfXywgYmFyaWR4LAorCQkJb2Zmc2V0LCBzaXplLCB2YWx1 ZSk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKG9mZnNldCkgeworCWNhc2UgUFRORVRfSU9f UFRGRUFUOgorCQl2YWx1ZSA9IHB0bmV0bWFwX2Fja19mZWF0dXJlcyhzYy0+cHRiZSwgdmFsdWUp OworCQlzYy0+aW9yZWdzW2luZGV4XSA9IHZhbHVlOworCQlicmVhazsKKworCWNhc2UgUFRORVRf SU9fUFRDVEw6CisJCXB0bmV0X3B0Y3RsKHNjLCB2YWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBQ VE5FVF9JT19DU0JCQUg6CisJCXNjLT5pb3JlZ3NbaW5kZXhdID0gdmFsdWU7CisJCWJyZWFrOwor CisJY2FzZSBQVE5FVF9JT19DU0JCQUw6CisJCXNjLT5pb3JlZ3NbaW5kZXhdID0gdmFsdWU7CisJ CXB0bmV0X2NzYl9tYXBwaW5nKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFBUTkVUX0lPX1ZORVRf SERSX0xFTjoKKwkJaWYgKG5ldGJlX3NldF9jYXAoc2MtPmJlLCBuZXRiZV9nZXRfY2FwKHNjLT5i ZSksCisJCQkJICB2YWx1ZSkgPT0gMCkgeworCQkJc2MtPmlvcmVnc1tpbmRleF0gPSB2YWx1ZTsK KwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1aW50NjRfdAorcHRuZXRfYmFyX3JlYWQo c3RydWN0IHZtY3R4ICpjdHgsIGludCB2Y3B1LCBzdHJ1Y3QgcGNpX2Rldmluc3QgKnBpLAorCSAg ICAgICBpbnQgYmFyaWR4LCB1aW50NjRfdCBvZmZzZXQsIGludCBzaXplKQoreworCXN0cnVjdCBw dG5ldF9zb2Z0YyAqc2MgPSBwaS0+cGlfYXJnOworCXVpbnQ2NF90IGluZGV4ID0gb2Zmc2V0ID4+ IDI7CisKKwlpZiAoYmFyaWR4ID09IHBjaV9tc2l4X3RhYmxlX2JhcihwaSkgfHwKKwkJCWJhcmlk eCA9PSBwY2lfbXNpeF9wYmFfYmFyKHBpKSkgeworCQlyZXR1cm4gcGNpX2VtdWxfbXNpeF90cmVh ZChwaSwgb2Zmc2V0LCBzaXplKTsKKwl9CisKKwlpZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuIDA7 CisKKwlvZmZzZXQgJj0gUFRORVRfSU9fTUFTSzsKKworCWlmIChiYXJpZHggIT0gUFRORVRNQVBf SU9fUENJX0JBUiB8fCBvZmZzZXQgPj0gUFRORVRfSU9fRU5EKSB7CisJCWZwcmludGYoc3RkZXJy LCAiJXM6IFVuZXhwZWN0ZWQgcmVnaXN0ZXIgcmVhZCBbYmFyICV1LCAiCisJCQkib2Zmc2V0ICVs eCBzaXplICVkXVxuIiwgX19mdW5jX18sIGJhcmlkeCwgb2Zmc2V0LAorCQkJc2l6ZSk7CisJCXJl dHVybiAwOworCX0KKworCXN3aXRjaCAob2Zmc2V0KSB7CisJCWNhc2UgUFRORVRfSU9fTklGUF9P RlM6CisJCWNhc2UgUFRORVRfSU9fTlVNX1RYX1JJTkdTOgorCQljYXNlIFBUTkVUX0lPX05VTV9S WF9SSU5HUzoKKwkJY2FzZSBQVE5FVF9JT19OVU1fVFhfU0xPVFM6CisJCWNhc2UgUFRORVRfSU9f TlVNX1JYX1NMT1RTOgorCQkJLyogRmlsbCBpbiBkZXZpY2UgcmVnaXN0ZXJzIHdpdGggaW5mb3Jt YXRpb24gYWJvdXQKKwkJCSAqIG5pZnBfb2Zmc2V0LCBudW1fKnhfcmluZ3MsIGFuZCBudW1fKnhf c2xvdHMuICovCisJCQlwdG5ldF9nZXRfbmV0bWFwX2lmKHNjKTsKKwkJCWJyZWFrOworCisJCWNh c2UgUFRORVRfSU9fSE9TVE1FTUlEOgorCQkJc2MtPmlvcmVnc1tpbmRleF0gPSBwdG5ldG1hcF9n ZXRfaG9zdG1lbWlkKHNjLT5wdGJlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzYy0+aW9y ZWdzW2luZGV4XTsKK30KKworLyogUENJIGRldmljZSBpbml0aWFsaXphdGlvbi4gKi8KK3N0YXRp YyBpbnQKK3B0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAq cGksIGNoYXIgKm9wdHMpCit7CisJc3RydWN0IHB0bmV0X3NvZnRjICpzYzsKKwljaGFyICpwdG9w dHMsICpkZXZuYW1lOworCXVpbnQ4X3QgbWFjYWRkcls2XTsKKwlpbnQgbWFjX3Byb3ZpZGVkID0g MDsKKwlpbnQgcmV0OworCisJc2MgPSBjYWxsb2MoMSwgc2l6ZW9mKCpzYykpOworCWlmIChzYyA9 PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVu Y19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIExpbmsgb3VyIHNvZnRjIGluIHRoZSBwY2lf ZGV2aW5zdC4gKi8KKwlwaS0+cGlfYXJnID0gc2M7CisJc2MtPnBpID0gcGk7CisKKwkvKiBQYXJz ZSBjb21tYW5kIGxpbmUgb3B0aW9ucy4gKi8KKwlpZiAob3B0cyA9PSBOVUxMKSB7CisJCWZwcmlu dGYoc3RkZXJyLCAiJXM6IE5vIGJhY2tlbmQgc3BlY2lmaWVkXG4iLCBfX2Z1bmNfXyk7CisJCXJl dHVybiAtMTsKKwl9CisKKwlkZXZuYW1lID0gcHRvcHRzID0gc3RyZHVwKG9wdHMpOworCSh2b2lk KSBzdHJzZXAoJnB0b3B0cywgIiwiKTsKKworCWlmIChwdG9wdHMgIT0gTlVMTCkgeworCQlyZXQg PSBuZXRfcGFyc2VtYWMocHRvcHRzLCBtYWNhZGRyKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlm cmVlKGRldm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQltYWNfcHJvdmlkZWQgPSAxOwor CX0KKworCWlmICghbWFjX3Byb3ZpZGVkKSB7CisJCW5ldF9nZW5tYWMocGksIG1hY2FkZHIpOwor CX0KKworCS8qIEluaXRpYWxpemUgYmFja2VuZC4gQSBOVUxMIGNhbGxiYWNrIGlzIHVzZWQgaGVy ZSB0byB0ZWxsCisJICogdGhlIGFzayB0aGUgbmV0bWFwIGJhY2tlbmQgdG8gdXNlIHB0bmV0bWFw LiAqLworCXNjLT5iZSA9IG5ldGJlX2luaXQoZGV2bmFtZSwgTlVMTCwgc2MpOworCWlmICghc2Mt PmJlKSB7CisJCWZwcmludGYoc3RkZXJyLCAibmV0IGJhY2tlbmQgaW5pdGlhbGl6YXRpb24gZmFp bGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZyZWUoZGV2bmFtZSk7CisKKwlzYy0+cHRi ZSA9IGdldF9wdG5ldG1hcChzYy0+YmUpOworCWlmICghc2MtPnB0YmUpIHsKKwkJZnByaW50Zihz dGRlcnIsICIlczogZmFpbGVkIHRvIGdldCBwdG5ldG1hcFxuIiwgX19mdW5jX18pOworCQlyZXR1 cm4gLTE7CisJfQorCisJLyogSW5pdGlhbGl6ZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gKi8K KwlwY2lfc2V0X2NmZ2RhdGExNihwaSwgUENJUl9WRU5ET1IsIFBUTkVUTUFQX1BDSV9WRU5ET1Jf SUQpOworCXBjaV9zZXRfY2ZnZGF0YTE2KHBpLCBQQ0lSX0RFVklDRSwgUFRORVRNQVBfUENJX05F VElGX0lEKTsKKwlwY2lfc2V0X2NmZ2RhdGE4KHBpLCBQQ0lSX0NMQVNTLCBQQ0lDX05FVFdPUksp OworCXBjaV9zZXRfY2ZnZGF0YTgocGksIFBDSVJfU1VCQ0xBU1MsIFBDSVNfTkVUV09SS19FVEhF Uk5FVCk7CisJcGNpX3NldF9jZmdkYXRhMTYocGksIFBDSVJfU1VCREVWXzAsIDEpOworCXBjaV9z ZXRfY2ZnZGF0YTE2KHBpLCBQQ0lSX1NVQlZFTkRfMCwgUFRORVRNQVBfUENJX1ZFTkRPUl9JRCk7 CisKKwkvKiBBbGxvY2F0ZSBhIEJBUiBmb3IgYW4gSS9PIHJlZ2lvbi4gKi8KKwlyZXQgPSBwY2lf ZW11bF9hbGxvY19iYXIocGksIFBUTkVUTUFQX0lPX1BDSV9CQVIsIFBDSUJBUl9JTywKKwkJCQkg UFRORVRfSU9fTUFTSyArIDEpOworCWlmIChyZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczog ZmFpbGVkIHRvIGFsbG9jYXRlIEJBUiBbJWRdXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSByZWdpc3RlcnMgYW5kIGRhdGEgc3RydWN0 dXJlcy4gKi8KKwltZW1zZXQoc2MtPmlvcmVncywgMCwgc2l6ZW9mKHNjLT5pb3JlZ3MpKTsKKwlz Yy0+Y3NiID0gTlVMTDsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX01BQ19ISSA+PiAyXSA9IChtYWNh ZGRyWzBdIDw8IDgpIHwgbWFjYWRkclsxXTsKKwlzYy0+aW9yZWdzW1BUTkVUX0lPX01BQ19MTyA+ PiAyXSA9IChtYWNhZGRyWzJdIDw8IDI0KSB8CisJCQkJCSAgIChtYWNhZGRyWzNdIDw8IDE2KSB8 CisJCQkJCSAgIChtYWNhZGRyWzRdIDw8IDgpIHwgbWFjYWRkcls1XTsKKworCXNjLT5udW1fcmlu Z3MgPSAwOworCXB0bmV0X2dldF9uZXRtYXBfaWYoc2MpOworCisJLyogQWxsb2NhdGUgYSBCQVIg Zm9yIE1TSS1YIHZlY3RvcnMuICovCisJcGNpX2VtdWxfYWRkX21zaXhjYXAocGksIHNjLT5udW1f cmluZ3MsIFBUTkVUTUFQX01TSVhfUENJX0JBUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0 IHBjaV9kZXZlbXUgcGNpX2RlX3B0bmV0ID0geworCS5wZV9lbXUgPSAJInB0bmV0IiwKKwkucGVf aW5pdCA9CXB0bmV0X2luaXQsCisJLnBlX2JhcndyaXRlID0JcHRuZXRfYmFyX3dyaXRlLAorCS5w ZV9iYXJyZWFkID0JcHRuZXRfYmFyX3JlYWQsCit9OworUENJX0VNVUxfU0VUKHBjaV9kZV9wdG5l dCk7CisKKyNlbmRpZiAvKiBXSVRIX05FVE1BUCAqLwpkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNy LnNiaW4vYmh5dmUvcGNpX3ZpcnRpb19uZXQuYyAvdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lf dmlydGlvX25ldC5jCi0tLSB1c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMJ MjAxNi0wOS0yOSAwMDoyNTowNy4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vzci5zYmlu L2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMJMjAxNi0xMS0zMCAxMDo1NjoxMC40NTkzNDMwMDAgKzAw MDAKQEAgLTI2LDYgKzI2LDIyIEBACiAgKiAkRnJlZUJTRDogcmVsZW5nLzExLjAvdXNyLnNiaW4v Ymh5dmUvcGNpX3ZpcnRpb19uZXQuYyAyOTY4MjkgMjAxNi0wMy0xNCAwODo0ODoxNlogZ25uICQK ICAqLwogCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBlbXVsYXRpb24gb2YgdGhlIHZp cnRpby1uZXQgbmV0d29yayBmcm9udGVuZC4gTmV0d29yaworICogYmFja2VuZHMgYXJlIGluIG5l dF9iYWNrZW5kcy5jLgorICoKKyAqIFRoZSBmcm9udGVuZCBpcyBzZWxlY3RlZCB1c2luZyB0aGUg cGVfZW11IGZpZWxkIG9mIHRoZSBkZXNjcmlwdG9yLAorICogVXBvbiBhIG1hdGNoLCB0aGUgcGVf aW5pdCBmdW5jdGlvbiBpcyBpbnZva2VkLCB3aGljaCBpbml0aWFsaXplcworICogdGhlIGVtdWxh dGVkIFBDSSBkZXZpY2UsIGF0dGFjaGVzIHRvIHRoZSBiYWNrZW5kLCBhbmQgY2FsbHMgdmlydGlv CisgKiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuCisgKgorICogUENJIHJlZ2lzdGVyIHJlYWQv d3JpdGVzIGFyZSBoYW5kbGVkIHRocm91Z2ggZ2VuZXJpYyBQQ0kgbWV0aG9kcworICoKKyAqIHZp cnRpbyBUWCBpcyBoYW5kbGVkIGJ5IGEgZGVkaWNhdGVkIHRocmVhZCwgcGNpX3Z0bmV0X3R4X3Ro cmVhZCgpCisgKiB2aXJ0aW8gUlggaXMgaGFuZGxlZCBieSB0aGUgYmFja2VuZCAob2Z0ZW4gd2l0 aCBzb21lIGhlbHBlciB0aHJlYWQpLAorICogCXdoaWNoIGluIHR1cm4gY2FsbHMgYSBmcm9udGVu ZCBjYWxsYmFjaywgcGNpX3Z0bmV0X3J4X2NhbGxiYWNrKCkKKyAqLworCiAjaW5jbHVkZSA8c3lz L2NkZWZzLmg+CiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHJlbGVuZy8xMS4wL3Vzci5zYmluL2JoeXZl L3BjaV92aXJ0aW9fbmV0LmMgMjk2ODI5IDIwMTYtMDMtMTQgMDg6NDg6MTZaIGdubiAkIik7CiAK QEAgLTM2LDEwICs1Miw3IEBACiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8bWFj aGluZS9hdG9taWMuaD4KICNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KLSNpZm5kZWYgTkVUTUFQ X1dJVEhfTElCUwotI2RlZmluZSBORVRNQVBfV0lUSF9MSUJTCi0jZW5kaWYKLSNpbmNsdWRlIDxu ZXQvbmV0bWFwX3VzZXIuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4gLyogSUZOQU1TSVogKi8KIAog I2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAgLTUwLDcgKzYzLDYgQEAK ICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNz ZXJ0Lmg+Ci0jaW5jbHVkZSA8bWQ1Lmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUg PHB0aHJlYWRfbnAuaD4KIApAQCAtNTgsMzYgKzcwLDE2IEBACiAjaW5jbHVkZSAicGNpX2VtdWwu aCIKICNpbmNsdWRlICJtZXZlbnQuaCIKICNpbmNsdWRlICJ2aXJ0aW8uaCIKKyNpbmNsdWRlICJu ZXRfdXRpbHMuaCIgICAgLyogTUFDIGFkZHJlc3MgZ2VuZXJhdGlvbiAqLworI2luY2x1ZGUgIm5l dF9iYWNrZW5kcy5oIiAvKiBWaXJ0SU8gY2FwYWJpbGl0aWVzICovCiAKICNkZWZpbmUgVlRORVRf UklOR1NaCTEwMjQKIAogI2RlZmluZSBWVE5FVF9NQVhTRUdTCTI1NgogCi0vKgotICogSG9zdCBj YXBhYmlsaXRpZXMuICBOb3RlIHRoYXQgd2Ugb25seSBvZmZlciBhIGZldyBvZiB0aGVzZS4KLSAq LwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NVTQkoMSA8PCAgMCkgLyogaG9zdCBoYW5kbGVzIHBh cnRpYWwgY2tzdW0gKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0NTVU0JKDEgPDwgIDEp IC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBja3N1bSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0Zf TUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBsaWVzIE1BQyAqLwotI2RlZmluZQlWSVJUSU9fTkVU X0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyogZGVwcmVjYXRlZDogaG9zdCBoYW5kbGVzIEdTTyAq LwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNAkoMSA8PCAgNykgLyogZ3Vlc3QgY2Fu IHJjdiBUU092NCAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNgkoMSA8PCAgOCkg LyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNO CSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLwotI2RlZmluZQlWSVJU SU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEwKSAvKiBndWVzdCBjYW4gcmN2IFVGTyAqLwotI2Rl ZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080CSgxIDw8IDExKSAvKiBob3N0IGNhbiByY3YgVFNP djQgKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0hPU1RfVFNPNgkoMSA8PCAxMikgLyogaG9zdCBj YW4gcmN2IFRTT3Y2ICovCi0jZGVmaW5lCVZJUlRJT19ORVRfRl9IT1NUX0VDTgkoMSA8PCAxMykg LyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVDTiAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9T VF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2FuIHJjdiBVRk8gKi8KLSNkZWZpbmUJVklSVElPX05F VF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyogaG9zdCBjYW4gbWVyZ2UgUlggYnVmZmVycyAqLwot I2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVTCSgxIDw8IDE2KSAvKiBjb25maWcgc3RhdHVzIGZp ZWxkIGF2YWlsYWJsZSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WUQkoMSA8PCAxNykg LyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJsZSAqLwotI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RS TF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBjaGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLwotI2Rl ZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCSgxIDw8IDE5KSAvKiBjb250cm9sIGNoYW5uZWwg VkxBTiBmaWx0ZXJpbmcgKi8KLSNkZWZpbmUJVklSVElPX05FVF9GX0dVRVNUX0FOTk9VTkNFIFwK LQkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2FuIHNlbmQgZ3JhdHVpdG91cyBwa3RzICovCi0KKy8q IE91ciBjYXBhYmlsaXRpZXM6IHdlIGRvbid0IHN1cHBvcnQgVklSVElPX05FVF9GX01SR19SWEJV RiBhdCB0aGUgbW9tZW50LiAqLwogI2RlZmluZSBWVE5FVF9TX0hPU1RDQVBTICAgICAgXAotICAo IFZJUlRJT19ORVRfRl9NQUMgfCBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGIHwgVklSVElPX05FVF9G X1NUQVRVUyB8IFwKKyAgKCBWSVJUSU9fTkVUX0ZfTUFDIHwgVklSVElPX05FVF9GX1NUQVRVUyB8 IFwKICAgICBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkgfCBWSVJUSU9fUklOR19GX0lORElSRUNU X0RFU0MpCiAKIC8qCkBAIC05Niw2ICs4OCw3IEBACiBzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcg ewogCXVpbnQ4X3QgIG1hY1s2XTsKIAl1aW50MTZfdCBzdGF0dXM7CisJdWludDE2X3QgbWF4X3Zp cnRxdWV1ZV9wYWlyczsKIH0gX19wYWNrZWQ7CiAKIC8qCkBAIC0xMDgsMTkgKzEwMSw2IEBACiAj ZGVmaW5lIFZUTkVUX01BWFEJMwogCiAvKgotICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQot ICovCi1zdHJ1Y3QgdmlydGlvX25ldF9yeGhkciB7Ci0JdWludDhfdAkJdnJoX2ZsYWdzOwotCXVp bnQ4X3QJCXZyaF9nc29fdHlwZTsKLQl1aW50MTZfdAl2cmhfaGRyX2xlbjsKLQl1aW50MTZfdAl2 cmhfZ3NvX3NpemU7Ci0JdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7Ci0JdWludDE2X3QJdnJoX2Nz dW1fb2Zmc2V0OwotCXVpbnQxNl90CXZyaF9idWZzOwotfSBfX3BhY2tlZDsKLQotLyoKICAqIERl YnVnIHByaW50ZgogICovCiBzdGF0aWMgaW50IHBjaV92dG5ldF9kZWJ1ZzsKQEAgLTEzNCwzMSAr MTE0LDI0IEBACiAJc3RydWN0IHZpcnRpb19zb2Z0YyB2c2NfdnM7CiAJc3RydWN0IHZxdWV1ZV9p bmZvIHZzY19xdWV1ZXNbVlRORVRfTUFYUSAtIDFdOwogCXB0aHJlYWRfbXV0ZXhfdCB2c2NfbXR4 OwotCXN0cnVjdCBtZXZlbnQJKnZzY19tZXZwOwogCi0JaW50CQl2c2NfdGFwZmQ7Ci0Jc3RydWN0 IG5tX2Rlc2MJKnZzY19ubWQ7CisJc3RydWN0IG5ldF9iYWNrZW5kICp2c2NfYmU7CiAKIAlpbnQJ CXZzY19yeF9yZWFkeTsKIAl2b2xhdGlsZSBpbnQJcmVzZXR0aW5nOwkvKiBzZXQgYW5kIGNoZWNr ZWQgb3V0c2lkZSBsb2NrICovCiAKIAl1aW50NjRfdAl2c2NfZmVhdHVyZXM7CS8qIG5lZ290aWF0 ZWQgZmVhdHVyZXMgKi8KIAkKLQlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsK LQogCXB0aHJlYWRfbXV0ZXhfdAlyeF9tdHg7Ci0JaW50CQlyeF9pbl9wcm9ncmVzczsKLQlpbnQJ CXJ4X3ZoZHJsZW47CisJdW5zaWduZWQgaW50CXJ4X3ZoZHJsZW47CiAJaW50CQlyeF9tZXJnZTsJ LyogbWVyZ2VkIHJ4IGJ1ZnMgaW4gdXNlICovCiAKIAlwdGhyZWFkX3QgCXR4X3RpZDsKIAlwdGhy ZWFkX211dGV4X3QJdHhfbXR4OwogCXB0aHJlYWRfY29uZF90CXR4X2NvbmQ7CiAJaW50CQl0eF9p bl9wcm9ncmVzczsKKwlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsKIAotCXZv aWQgKCpwY2lfdnRuZXRfcngpKHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKTsKLQl2b2lkICgq cGNpX3Z0bmV0X3R4KShzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICpp b3YsCi0JCQkgICAgIGludCBpb3ZjbnQsIGludCBsZW4pOwogfTsKIAogc3RhdGljIHZvaWQgcGNp X3Z0bmV0X3Jlc2V0KHZvaWQgKik7CkBAIC0xODEsNiArMTU0LDcgQEAKIAogLyoKICAqIElmIHRo ZSB0cmFuc21pdCB0aHJlYWQgaXMgYWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4K KyAqIE9ubHkgdXNlZCBvbmNlIGluIHBjaV92dG5ldF9yZXNldCgpCiAgKi8KIHN0YXRpYyB2b2lk CiBwY2lfdnRuZXRfdHh3YWl0KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQpAQCAtMTk3LDIw ICsxNzEsMTggQEAKIAogLyoKICAqIElmIHRoZSByZWNlaXZlIHRocmVhZCBpcyBhY3RpdmUgdGhl biBzdGFsbCB1bnRpbCBpdCBpcyBkb25lLgorICogSXQgaXMgZW5vdWdoIHRvIGxvY2sgYW5kIHVu bG9jayB0aGUgUlggbXV0ZXguCisgKiBPbmx5IHVzZWQgb25jZSBpbiBwY2lfdnRuZXRfcmVzZXQo KQogICovCiBzdGF0aWMgdm9pZAogcGNpX3Z0bmV0X3J4d2FpdChzdHJ1Y3QgcGNpX3Z0bmV0X3Nv ZnRjICpzYykKIHsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnJ4X210eCk7Ci0Jd2hpbGUg KHNjLT5yeF9pbl9wcm9ncmVzcykgewotCQlwdGhyZWFkX211dGV4X3VubG9jaygmc2MtPnJ4X210 eCk7Ci0JCXVzbGVlcCgxMDAwMCk7Ci0JCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnJ4X210eCk7 Ci0JfQogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzYy0+cnhfbXR4KTsKIH0KIAorLyogaGFuZGxl ciBmb3IgdmlydGlvX3Jlc2V0ICovCiBzdGF0aWMgdm9pZAogcGNpX3Z0bmV0X3Jlc2V0KHZvaWQg KnZzYykKIHsKQEAgLTIzNywzNjAgKzIwOSw4MCBAQAogCXNjLT5yZXNldHRpbmcgPSAwOwogfQog Ci0vKgotICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB0YXAgZGV2 aWNlCi0gKi8KLXN0YXRpYyB2b2lkCi1wY2lfdnRuZXRfdGFwX3R4KHN0cnVjdCBwY2lfdnRuZXRf c29mdGMgKnNjLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwKLQkJIGludCBsZW4pCi17 Ci0Jc3RhdGljIGNoYXIgcGFkWzYwXTsgLyogYWxsIHplcm8gYnl0ZXMgKi8KLQotCWlmIChzYy0+ dnNjX3RhcGZkID09IC0xKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIElmIHRoZSBsZW5ndGggaXMg PCA2MCwgcGFkIG91dCB0byB0aGF0IGFuZCBhZGQgdGhlCi0JICogZXh0cmEgemVybydkIHNlZ21l bnQgdG8gdGhlIGlvdi4gSXQgaXMgZ3VhcmFudGVlZCB0aGF0Ci0JICogdGhlcmUgaXMgYWx3YXlz IGFuIGV4dHJhIGlvdiBhdmFpbGFibGUgYnkgdGhlIGNhbGxlci4KLQkgKi8KLQlpZiAobGVuIDwg NjApIHsKLQkJaW92W2lvdmNudF0uaW92X2Jhc2UgPSBwYWQ7Ci0JCWlvdltpb3ZjbnRdLmlvdl9s ZW4gPSA2MCAtIGxlbjsKLQkJaW92Y250Kys7Ci0JfQotCSh2b2lkKSB3cml0ZXYoc2MtPnZzY190 YXBmZCwgaW92LCBpb3ZjbnQpOwotfQotCi0vKgotICogIENhbGxlZCB3aGVuIHRoZXJlIGlzIHJl YWQgYWN0aXZpdHkgb24gdGhlIHRhcCBmaWxlIGRlc2NyaXB0b3IuCi0gKiBFYWNoIGJ1ZmZlciBw b3N0ZWQgYnkgdGhlIGd1ZXN0IGlzIGFzc3VtZWQgdG8gYmUgYWJsZSB0byBjb250YWluCi0gKiBh biBlbnRpcmUgZXRoZXJuZXQgZnJhbWUgKyByeCBoZWFkZXIuCi0gKiAgTVAgbm90ZTogdGhlIGR1 bW15YnVmIGlzIG9ubHkgdXNlZCBmb3IgZGlzY2FyZGluZyBmcmFtZXMsIHNvIHRoZXJlCi0gKiBp cyBubyBuZWVkIGZvciBpdCB0byBiZSBwZXItdnRuZXQgb3IgbG9ja2VkLgotICovCi1zdGF0aWMg dWludDhfdCBkdW1teWJ1ZlsyMDQ4XTsKLQotc3RhdGljIF9faW5saW5lIHN0cnVjdCBpb3ZlYyAq Ci1yeF9pb3ZfdHJpbShzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50ICpuaW92LCBpbnQgdGxlbikKLXsK LQlzdHJ1Y3QgaW92ZWMgKnJpb3Y7Ci0KLQkvKiBYWFggc2hvcnQtY3V0OiBhc3N1bWUgZmlyc3Qg c2VnbWVudCBpcyA+PSB0bGVuICovCi0JYXNzZXJ0KGlvdlswXS5pb3ZfbGVuID49IHRsZW4pOwot Ci0JaW92WzBdLmlvdl9sZW4gLT0gdGxlbjsKLQlpZiAoaW92WzBdLmlvdl9sZW4gPT0gMCkgewot CQlhc3NlcnQoKm5pb3YgPiAxKTsKLQkJKm5pb3YgLT0gMTsKLQkJcmlvdiA9ICZpb3ZbMV07Ci0J fSBlbHNlIHsKLQkJaW92WzBdLmlvdl9iYXNlID0gKHZvaWQgKikoKHVpbnRwdHJfdClpb3ZbMF0u aW92X2Jhc2UgKyB0bGVuKTsKLQkJcmlvdiA9ICZpb3ZbMF07Ci0JfQotCi0JcmV0dXJuIChyaW92 KTsKLX0KLQogc3RhdGljIHZvaWQKLXBjaV92dG5ldF90YXBfcngoc3RydWN0IHBjaV92dG5ldF9z b2Z0YyAqc2MpCitwY2lfdnRuZXRfcngoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCiB7Ci0J c3RydWN0IGlvdmVjIGlvdltWVE5FVF9NQVhTRUdTXSwgKnJpb3Y7CisJc3RydWN0IGlvdmVjIGlv dltWVE5FVF9NQVhTRUdTICsgMV07CiAJc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsKLQl2b2lkICp2 cng7CiAJaW50IGxlbiwgbjsKIAl1aW50MTZfdCBpZHg7CiAKLQkvKgotCSAqIFNob3VsZCBuZXZl ciBiZSBjYWxsZWQgd2l0aG91dCBhIHZhbGlkIHRhcCBmZAotCSAqLwotCWFzc2VydChzYy0+dnNj X3RhcGZkICE9IC0xKTsKLQotCS8qCi0JICogQnV0LCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBy eCByaW5nIGhhc24ndCB5ZXQKLQkgKiBiZWVuIHNldCB1cCBvciB0aGUgZ3Vlc3QgaXMgcmVzZXR0 aW5nIHRoZSBkZXZpY2UuCi0JICovCiAJaWYgKCFzYy0+dnNjX3J4X3JlYWR5IHx8IHNjLT5yZXNl dHRpbmcpIHsKIAkJLyoKLQkJICogRHJvcCB0aGUgcGFja2V0IGFuZCB0cnkgbGF0ZXIuCisJCSAq IFRoZSByeCByaW5nIGhhcyBub3QgeWV0IGJlZW4gc2V0IHVwIG9yIHRoZSBndWVzdCBpcworCQkg KiByZXNldHRpbmcgdGhlIGRldmljZS4gRHJvcCB0aGUgcGFja2V0IGFuZCB0cnkgbGF0ZXIuCiAJ CSAqLwotCQkodm9pZCkgcmVhZChzYy0+dnNjX3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1bW15 YnVmKSk7CisJCW5ldGJlX3J4X2Rpc2NhcmQoc2MtPnZzY19iZSk7CiAJCXJldHVybjsKIAl9CiAK LQkvKgotCSAqIENoZWNrIGZvciBhdmFpbGFibGUgcnggYnVmZmVycwotCSAqLwogCXZxID0gJnNj LT52c2NfcXVldWVzW1ZUTkVUX1JYUV07CiAJaWYgKCF2cV9oYXNfZGVzY3ModnEpKSB7CiAJCS8q Ci0JCSAqIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVyLiAgSW50ZXJydXB0IG9uCi0JCSAq IGVtcHR5LCBpZiB0aGF0J3MgbmVnb3RpYXRlZC4KKwkJICogTm8gYXZhaWxhYmxlIHJ4IGJ1ZmZl cnMuIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVyLgorCQkgKiBJbnRlcnJ1cHQgb24gZW1w dHksIGlmIHRoYXQncyBuZWdvdGlhdGVkLgogCQkgKi8KLQkJKHZvaWQpIHJlYWQoc2MtPnZzY190 YXBmZCwgZHVtbXlidWYsIHNpemVvZihkdW1teWJ1ZikpOworCQluZXRiZV9yeF9kaXNjYXJkKHNj LT52c2NfYmUpOwogCQl2cV9lbmRjaGFpbnModnEsIDEpOwogCQlyZXR1cm47CiAJfQogCiAJZG8g ewotCQkvKgotCQkgKiBHZXQgZGVzY3JpcHRvciBjaGFpbi4KLQkJICovCisJCS8qIEdldCBkZXNj cmlwdG9yIGNoYWluIGludG8gaW92ICovCiAJCW4gPSB2cV9nZXRjaGFpbih2cSwgJmlkeCwgaW92 LCBWVE5FVF9NQVhTRUdTLCBOVUxMKTsKIAkJYXNzZXJ0KG4gPj0gMSAmJiBuIDw9IFZUTkVUX01B WFNFR1MpOwogCi0JCS8qCi0JCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIHJ4IGhlYWRlciwgYW5k IHVzZSB0aGUKLQkJICogZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQgZm9yIHRoZSBwYWNr ZXQgYnVmZmVyLgotCQkgKi8KLQkJdnJ4ID0gaW92WzBdLmlvdl9iYXNlOwotCQlyaW92ID0gcnhf aW92X3RyaW0oaW92LCAmbiwgc2MtPnJ4X3ZoZHJsZW4pOwotCi0JCWxlbiA9IHJlYWR2KHNjLT52 c2NfdGFwZmQsIHJpb3YsIG4pOwotCi0JCWlmIChsZW4gPCAwICYmIGVycm5vID09IEVXT1VMREJM T0NLKSB7Ci0JCQkvKgotCQkJICogTm8gbW9yZSBwYWNrZXRzLCBidXQgc3RpbGwgc29tZSBhdmFp bCByaW5nCi0JCQkgKiBlbnRyaWVzLiAgSW50ZXJydXB0IGlmIG5lZWRlZC9hcHByb3ByaWF0ZS4K LQkJCSAqLwotCQkJdnFfcmV0Y2hhaW4odnEpOwotCQkJdnFfZW5kY2hhaW5zKHZxLCAwKTsKLQkJ CXJldHVybjsKLQkJfQotCi0JCS8qCi0JCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRoZSBy eCBwYWNrZXQgaGVhZGVyIGlzIHRoZQotCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJnZWQg cnggYnVmcyB3ZXJlIG5lZ290aWF0ZWQuCi0JCSAqLwotCQltZW1zZXQodnJ4LCAwLCBzYy0+cnhf dmhkcmxlbik7Ci0KLQkJaWYgKHNjLT5yeF9tZXJnZSkgewotCQkJc3RydWN0IHZpcnRpb19uZXRf cnhoZHIgKnZyeGg7Ci0KLQkJCXZyeGggPSB2cng7Ci0JCQl2cnhoLT52cmhfYnVmcyA9IDE7Ci0J CX0KLQotCQkvKgotCQkgKiBSZWxlYXNlIHRoaXMgY2hhaW4gYW5kIGhhbmRsZSBtb3JlIGNoYWlu cy4KLQkJICovCi0JCXZxX3JlbGNoYWluKHZxLCBpZHgsIGxlbiArIHNjLT5yeF92aGRybGVuKTsK LQl9IHdoaWxlICh2cV9oYXNfZGVzY3ModnEpKTsKLQotCS8qIEludGVycnVwdCBpZiBuZWVkZWQs IGluY2x1ZGluZyBmb3IgTk9USUZZX09OX0VNUFRZLiAqLwotCXZxX2VuZGNoYWlucyh2cSwgMSk7 Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLXBjaV92dG5ldF9uZXRtYXBfd3JpdGV2KHN0cnVj dCBubV9kZXNjICpubWQsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250KQotewotCWludCBy LCBpOwotCWludCBsZW4gPSAwOwotCi0JZm9yIChyID0gbm1kLT5jdXJfdHhfcmluZzsgOyApIHsK LQkJc3RydWN0IG5ldG1hcF9yaW5nICpyaW5nID0gTkVUTUFQX1RYUklORyhubWQtPm5pZnAsIHIp OwotCQl1aW50MzJfdCBjdXIsIGlkeDsKLQkJY2hhciAqYnVmOwotCi0JCWlmIChubV9yaW5nX2Vt cHR5KHJpbmcpKSB7Ci0JCQlyKys7Ci0JCQlpZiAociA+IG5tZC0+bGFzdF90eF9yaW5nKQotCQkJ CXIgPSBubWQtPmZpcnN0X3R4X3Jpbmc7Ci0JCQlpZiAociA9PSBubWQtPmN1cl90eF9yaW5nKQot CQkJCWJyZWFrOwotCQkJY29udGludWU7Ci0JCX0KLQkJY3VyID0gcmluZy0+Y3VyOwotCQlpZHgg PSByaW5nLT5zbG90W2N1cl0uYnVmX2lkeDsKLQkJYnVmID0gTkVUTUFQX0JVRihyaW5nLCBpZHgp OworCQlsZW4gPSBuZXRiZV9yZWN2KHNjLT52c2NfYmUsIGlvdiwgbik7CiAKLQkJZm9yIChpID0g MDsgaSA8IGlvdmNudDsgaSsrKSB7Ci0JCQlpZiAobGVuICsgaW92W2ldLmlvdl9sZW4gPiAyMDQ4 KQotCQkJCWJyZWFrOwotCQkJbWVtY3B5KCZidWZbbGVuXSwgaW92W2ldLmlvdl9iYXNlLCBpb3Zb aV0uaW92X2xlbik7Ci0JCQlsZW4gKz0gaW92W2ldLmlvdl9sZW47Ci0JCX0KLQkJcmluZy0+c2xv dFtjdXJdLmxlbiA9IGxlbjsKLQkJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4 dChyaW5nLCBjdXIpOwotCQlubWQtPmN1cl90eF9yaW5nID0gcjsKLQkJaW9jdGwobm1kLT5mZCwg TklPQ1RYU1lOQywgTlVMTCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAobGVuKTsKLX0KLQot c3RhdGljIF9faW5saW5lIGludAotcGNpX3Z0bmV0X25ldG1hcF9yZWFkdihzdHJ1Y3Qgbm1fZGVz YyAqbm1kLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCkKLXsKLQlpbnQgbGVuID0gMDsK LQlpbnQgaSA9IDA7Ci0JaW50IHI7Ci0KLQlmb3IgKHIgPSBubWQtPmN1cl9yeF9yaW5nOyA7ICkg ewotCQlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBORVRNQVBfUlhSSU5HKG5tZC0+bmlmcCwg cik7Ci0JCXVpbnQzMl90IGN1ciwgaWR4OwotCQljaGFyICpidWY7Ci0JCXNpemVfdCBsZWZ0Owot Ci0JCWlmIChubV9yaW5nX2VtcHR5KHJpbmcpKSB7Ci0JCQlyKys7Ci0JCQlpZiAociA+IG5tZC0+ bGFzdF9yeF9yaW5nKQotCQkJCXIgPSBubWQtPmZpcnN0X3J4X3Jpbmc7Ci0JCQlpZiAociA9PSBu bWQtPmN1cl9yeF9yaW5nKQotCQkJCWJyZWFrOwotCQkJY29udGludWU7CisJCWlmIChsZW4gPCAw KSB7CisJCQlicmVhazsKIAkJfQotCQljdXIgPSByaW5nLT5jdXI7Ci0JCWlkeCA9IHJpbmctPnNs b3RbY3VyXS5idWZfaWR4OwotCQlidWYgPSBORVRNQVBfQlVGKHJpbmcsIGlkeCk7Ci0JCWxlZnQg PSByaW5nLT5zbG90W2N1cl0ubGVuOwotCi0JCWZvciAoaSA9IDA7IGkgPCBpb3ZjbnQgJiYgbGVm dCA+IDA7IGkrKykgewotCQkJaWYgKGlvdltpXS5pb3ZfbGVuID4gbGVmdCkKLQkJCQlpb3ZbaV0u aW92X2xlbiA9IGxlZnQ7Ci0JCQltZW1jcHkoaW92W2ldLmlvdl9iYXNlLCAmYnVmW2xlbl0sIGlv dltpXS5pb3ZfbGVuKTsKLQkJCWxlbiArPSBpb3ZbaV0uaW92X2xlbjsKLQkJCWxlZnQgLT0gaW92 W2ldLmlvdl9sZW47Ci0JCX0KLQkJcmluZy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4 dChyaW5nLCBjdXIpOwotCQlubWQtPmN1cl9yeF9yaW5nID0gcjsKLQkJaW9jdGwobm1kLT5mZCwg TklPQ1JYU1lOQywgTlVMTCk7Ci0JCWJyZWFrOwotCX0KLQlmb3IgKDsgaSA8IGlvdmNudDsgaSsr KQotCQlpb3ZbaV0uaW92X2xlbiA9IDA7Ci0KLQlyZXR1cm4gKGxlbik7Ci19Ci0KLS8qCi0gKiBD YWxsZWQgdG8gc2VuZCBhIGJ1ZmZlciBjaGFpbiBvdXQgdG8gdGhlIHZhbGUgcG9ydAotICovCi1z dGF0aWMgdm9pZAotcGNpX3Z0bmV0X25ldG1hcF90eChzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpz Yywgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsCi0JCSAgICBpbnQgbGVuKQotewotCXN0 YXRpYyBjaGFyIHBhZFs2MF07IC8qIGFsbCB6ZXJvIGJ5dGVzICovCi0KLQlpZiAoc2MtPnZzY19u bWQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAs IHBhZCBvdXQgdG8gdGhhdCBhbmQgYWRkIHRoZQotCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRv IHRoZSBpb3YuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAotCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBl eHRyYSBpb3YgYXZhaWxhYmxlIGJ5IHRoZSBjYWxsZXIuCi0JICovCi0JaWYgKGxlbiA8IDYwKSB7 Ci0JCWlvdltpb3ZjbnRdLmlvdl9iYXNlID0gcGFkOwotCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0g NjAgLSBsZW47Ci0JCWlvdmNudCsrOwotCX0KLQkodm9pZCkgcGNpX3Z0bmV0X25ldG1hcF93cml0 ZXYoc2MtPnZzY19ubWQsIGlvdiwgaW92Y250KTsKLX0KLQotc3RhdGljIHZvaWQKLXBjaV92dG5l dF9uZXRtYXBfcngoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGlvdmVj IGlvdltWVE5FVF9NQVhTRUdTXSwgKnJpb3Y7Ci0Jc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsKLQl2 b2lkICp2cng7Ci0JaW50IGxlbiwgbjsKLQl1aW50MTZfdCBpZHg7Ci0KLQkvKgotCSAqIFNob3Vs ZCBuZXZlciBiZSBjYWxsZWQgd2l0aG91dCBhIHZhbGlkIG5ldG1hcCBkZXNjcmlwdG9yCi0JICov Ci0JYXNzZXJ0KHNjLT52c2Nfbm1kICE9IE5VTEwpOwotCi0JLyoKLQkgKiBCdXQsIHdpbGwgYmUg Y2FsbGVkIHdoZW4gdGhlIHJ4IHJpbmcgaGFzbid0IHlldAotCSAqIGJlZW4gc2V0IHVwIG9yIHRo ZSBndWVzdCBpcyByZXNldHRpbmcgdGhlIGRldmljZS4KLQkgKi8KLQlpZiAoIXNjLT52c2Nfcnhf cmVhZHkgfHwgc2MtPnJlc2V0dGluZykgewotCQkvKgotCQkgKiBEcm9wIHRoZSBwYWNrZXQgYW5k IHRyeSBsYXRlci4KLQkJICovCi0JCSh2b2lkKSBubV9uZXh0cGt0KHNjLT52c2Nfbm1kLCAodm9p ZCAqKWR1bW15YnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQ2hlY2sgZm9yIGF2YWls YWJsZSByeCBidWZmZXJzCi0JICovCi0JdnEgPSAmc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXTsK LQlpZiAoIXZxX2hhc19kZXNjcyh2cSkpIHsKLQkJLyoKLQkJICogRHJvcCB0aGUgcGFja2V0IGFu ZCB0cnkgbGF0ZXIuICBJbnRlcnJ1cHQgb24KLQkJICogZW1wdHksIGlmIHRoYXQncyBuZWdvdGlh dGVkLgotCQkgKi8KLQkJKHZvaWQpIG5tX25leHRwa3Qoc2MtPnZzY19ubWQsICh2b2lkICopZHVt bXlidWYpOwotCQl2cV9lbmRjaGFpbnModnEsIDEpOwotCQlyZXR1cm47Ci0JfQotCi0JZG8gewot CQkvKgotCQkgKiBHZXQgZGVzY3JpcHRvciBjaGFpbi4KLQkJICovCi0JCW4gPSB2cV9nZXRjaGFp bih2cSwgJmlkeCwgaW92LCBWVE5FVF9NQVhTRUdTLCBOVUxMKTsKLQkJYXNzZXJ0KG4gPj0gMSAm JiBuIDw9IFZUTkVUX01BWFNFR1MpOwotCi0JCS8qCi0JCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhl IHJ4IGhlYWRlciwgYW5kIHVzZSB0aGUKLQkJICogZGF0YSBpbW1lZGlhdGVseSBmb2xsb3dpbmcg aXQgZm9yIHRoZSBwYWNrZXQgYnVmZmVyLgotCQkgKi8KLQkJdnJ4ID0gaW92WzBdLmlvdl9iYXNl OwotCQlyaW92ID0gcnhfaW92X3RyaW0oaW92LCAmbiwgc2MtPnJ4X3ZoZHJsZW4pOwotCi0JCWxl biA9IHBjaV92dG5ldF9uZXRtYXBfcmVhZHYoc2MtPnZzY19ubWQsIHJpb3YsIG4pOwogCiAJCWlm IChsZW4gPT0gMCkgewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgcGFja2V0cywgYnV0IHN0aWxsIHNv bWUgYXZhaWwgcmluZwogCQkJICogZW50cmllcy4gIEludGVycnVwdCBpZiBuZWVkZWQvYXBwcm9w cmlhdGUuCiAJCQkgKi8KLQkJCXZxX3JldGNoYWluKHZxKTsKKwkJCXZxX3JldGNoYWluKHZxKTsg LyogcmV0dXJuIHRoZSBzbG90IHRvIHRoZSB2cSAqLwogCQkJdnFfZW5kY2hhaW5zKHZxLCAwKTsK IAkJCXJldHVybjsKIAkJfQogCi0JCS8qCi0JCSAqIFRoZSBvbmx5IHZhbGlkIGZpZWxkIGluIHRo ZSByeCBwYWNrZXQgaGVhZGVyIGlzIHRoZQotCQkgKiBudW1iZXIgb2YgYnVmZmVycyBpZiBtZXJn ZWQgcnggYnVmcyB3ZXJlIG5lZ290aWF0ZWQuCi0JCSAqLwotCQltZW1zZXQodnJ4LCAwLCBzYy0+ cnhfdmhkcmxlbik7Ci0KLQkJaWYgKHNjLT5yeF9tZXJnZSkgewotCQkJc3RydWN0IHZpcnRpb19u ZXRfcnhoZHIgKnZyeGg7Ci0KLQkJCXZyeGggPSB2cng7Ci0JCQl2cnhoLT52cmhfYnVmcyA9IDE7 Ci0JCX0KLQotCQkvKgotCQkgKiBSZWxlYXNlIHRoaXMgY2hhaW4gYW5kIGhhbmRsZSBtb3JlIGNo YWlucy4KLQkJICovCi0JCXZxX3JlbGNoYWluKHZxLCBpZHgsIGxlbiArIHNjLT5yeF92aGRybGVu KTsKKwkJLyogUHVibGlzaCB0aGUgaW5mbyB0byB0aGUgZ3Vlc3QgKi8KKwkJdnFfcmVsY2hhaW4o dnEsIGlkeCwgKHVpbnQzMl90KWxlbik7CiAJfSB3aGlsZSAodnFfaGFzX2Rlc2NzKHZxKSk7CiAK IAkvKiBJbnRlcnJ1cHQgaWYgbmVlZGVkLCBpbmNsdWRpbmcgZm9yIE5PVElGWV9PTl9FTVBUWS4g Ki8KIAl2cV9lbmRjaGFpbnModnEsIDEpOwogfQogCisvKgorICogQ2FsbGVkIHdoZW4gdGhlcmUg aXMgcmVhZCBhY3Rpdml0eSBvbiB0aGUgdGFwIGZpbGUgZGVzY3JpcHRvci4KKyAqIEVhY2ggYnVm ZmVyIHBvc3RlZCBieSB0aGUgZ3Vlc3QgaXMgYXNzdW1lZCB0byBiZSBhYmxlIHRvIGNvbnRhaW4K KyAqIGFuIGVudGlyZSBldGhlcm5ldCBmcmFtZSArIHJ4IGhlYWRlci4KKyAqLwogc3RhdGljIHZv aWQKIHBjaV92dG5ldF9yeF9jYWxsYmFjayhpbnQgZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lk ICpwYXJhbSkKIHsKIAlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHBhcmFtOwogCisJKHZv aWQpZmQ7ICh2b2lkKXR5cGU7CiAJcHRocmVhZF9tdXRleF9sb2NrKCZzYy0+cnhfbXR4KTsKLQlz Yy0+cnhfaW5fcHJvZ3Jlc3MgPSAxOwotCXNjLT5wY2lfdnRuZXRfcngoc2MpOwotCXNjLT5yeF9p bl9wcm9ncmVzcyA9IDA7CisJcGNpX3Z0bmV0X3J4KHNjKTsKIAlwdGhyZWFkX211dGV4X3VubG9j aygmc2MtPnJ4X210eCk7Ci0KIH0KIAorLyogY2FsbGJhY2sgd2hlbiB3cml0aW5nIHRvIHRoZSBQ Q0kgcmVnaXN0ZXIgKi8KIHN0YXRpYyB2b2lkCiBwY2lfdnRuZXRfcGluZ19yeHEodm9pZCAqdnNj LCBzdHJ1Y3QgdnF1ZXVlX2luZm8gKnZxKQogewpAQCAtNjA1LDM1ICsyOTcsMzMgQEAKIAl9CiB9 CiAKKy8qIFRYIHByb2Nlc3NpbmcgKGd1ZXN0IHRvIGhvc3QpLCBjYWxsZWQgaW4gdGhlIHR4IHRo cmVhZCAqLwogc3RhdGljIHZvaWQKIHBjaV92dG5ldF9wcm9jdHgoc3RydWN0IHBjaV92dG5ldF9z b2Z0YyAqc2MsIHN0cnVjdCB2cXVldWVfaW5mbyAqdnEpCiB7CiAJc3RydWN0IGlvdmVjIGlvdltW VE5FVF9NQVhTRUdTICsgMV07CiAJaW50IGksIG47Ci0JaW50IHBsZW4sIHRsZW47CisJdWludDMy X3QgbGVuOwogCXVpbnQxNl90IGlkeDsKIAogCS8qCi0JICogT2J0YWluIGNoYWluIG9mIGRlc2Ny aXB0b3JzLiAgVGhlIGZpcnN0IG9uZSBpcwotCSAqIHJlYWxseSB0aGUgaGVhZGVyIGRlc2NyaXB0 b3IsIHNvIHdlIG5lZWQgdG8gc3VtCi0JICogdXAgdHdvIGxlbmd0aHM6IHBhY2tldCBsZW5ndGgg YW5kIHRyYW5zZmVyIGxlbmd0aC4KKwkgKiBPYnRhaW4gY2hhaW4gb2YgZGVzY3JpcHRvcnMuIFRo ZSBmaXJzdCBkZXNjcmlwdG9yIGFsc28KKwkgKiBjb250YWlucyB0aGUgdmlydGlvLW5ldCBoZWFk ZXIuCiAJICovCiAJbiA9IHZxX2dldGNoYWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01BWFNFR1Ms IE5VTEwpOwogCWFzc2VydChuID49IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKLQlwbGVuID0g MDsKLQl0bGVuID0gaW92WzBdLmlvdl9sZW47Ci0JZm9yIChpID0gMTsgaSA8IG47IGkrKykgewot CQlwbGVuICs9IGlvdltpXS5pb3ZfbGVuOwotCQl0bGVuICs9IGlvdltpXS5pb3ZfbGVuOworCWxl biA9IDA7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlsZW4gKz0gaW92W2ldLmlvdl9s ZW47CiAJfQogCi0JRFBSSU5URigoInZpcnRpbzogcGFja2V0IHNlbmQsICVkIGJ5dGVzLCAlZCBz ZWdzXG5cciIsIHBsZW4sIG4pKTsKLQlzYy0+cGNpX3Z0bmV0X3R4KHNjLCAmaW92WzFdLCBuIC0g MSwgcGxlbik7CisJbmV0YmVfc2VuZChzYy0+dnNjX2JlLCBpb3YsIG4sIGxlbiwgMCAvKiBtb3Jl ICovKTsKIAotCS8qIGNoYWluIGlzIHByb2Nlc3NlZCwgcmVsZWFzZSBpdCBhbmQgc2V0IHRsZW4g Ki8KLQl2cV9yZWxjaGFpbih2cSwgaWR4LCB0bGVuKTsKKwkvKiBjaGFpbiBpcyBwcm9jZXNzZWQs IHJlbGVhc2UgaXQgYW5kIHNldCBsZW4gKi8KKwl2cV9yZWxjaGFpbih2cSwgaWR4LCBsZW4pOwog fQogCisvKiBjYWxsYmFjayB3aGVuIHdyaXRpbmcgdG8gdGhlIFBDSSByZWdpc3RlciAqLwogc3Rh dGljIHZvaWQKIHBjaV92dG5ldF9waW5nX3R4cSh2b2lkICp2c2MsIHN0cnVjdCB2cXVldWVfaW5m byAqdnEpCiB7CkBAIC02NjMsNiArMzUzLDE0IEBACiAJc3RydWN0IHZxdWV1ZV9pbmZvICp2cTsK IAlpbnQgZXJyb3I7CiAKKwl7CisJCXN0cnVjdCBwY2lfZGV2aW5zdCAqcGkgPSBzYy0+dnNjX3Zz LnZzX3BpOworCQljaGFyIHRuYW1lW01BWENPTUxFTiArIDFdOworCQlzbnByaW50Zih0bmFtZSwg c2l6ZW9mKHRuYW1lKSwgInZ0bmV0LSVkOiVkIHR4IiwgcGktPnBpX3Nsb3QsCisJCQkJcGktPnBp X2Z1bmMpOworCQlwdGhyZWFkX3NldF9uYW1lX25wKHB0aHJlYWRfc2VsZigpLCB0bmFtZSk7CisJ fQorCiAJdnEgPSAmc2MtPnZzY19xdWV1ZXNbVlRORVRfVFhRXTsKIAogCS8qCkBAIC03MTcsMTA5 ICs0MTUsMjcgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50Ci1wY2lfdnRuZXRfcGFyc2VtYWMoY2hh ciAqbWFjX3N0ciwgdWludDhfdCAqbWFjX2FkZHIpCi17Ci0gICAgICAgIHN0cnVjdCBldGhlcl9h ZGRyICplYTsKLSAgICAgICAgY2hhciAqdG1wc3RyOwotICAgICAgICBjaGFyIHplcm9fYWRkcltF VEhFUl9BRERSX0xFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKLQotICAgICAgICB0bXBzdHIg PSBzdHJzZXAoJm1hY19zdHIsIj0iKTsKLSAgICAgICAKLSAgICAgICAgaWYgKChtYWNfc3RyICE9 IE5VTEwpICYmICghc3RyY21wKHRtcHN0ciwibWFjIikpKSB7Ci0gICAgICAgICAgICAgICAgZWEg PSBldGhlcl9hdG9uKG1hY19zdHIpOwotCi0gICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwg fHwgRVRIRVJfSVNfTVVMVElDQVNUKGVhLT5vY3RldCkgfHwKLSAgICAgICAgICAgICAgICAgICAg bWVtY21wKGVhLT5vY3RldCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgewotCQkJ ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gKEVJTlZBTCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJf QUREUl9MRU4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICgwKTsKLX0KLQotc3RhdGlj IHZvaWQKLXBjaV92dG5ldF90YXBfc2V0dXAoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MsIGNo YXIgKmRldm5hbWUpCi17Ci0JY2hhciB0YnVmWzgwXTsKLQotCXN0cmNweSh0YnVmLCAiL2Rldi8i KTsKLQlzdHJsY2F0KHRidWYsIGRldm5hbWUsIHNpemVvZih0YnVmKSk7Ci0KLQlzYy0+cGNpX3Z0 bmV0X3J4ID0gcGNpX3Z0bmV0X3RhcF9yeDsKLQlzYy0+cGNpX3Z0bmV0X3R4ID0gcGNpX3Z0bmV0 X3RhcF90eDsKLQotCXNjLT52c2NfdGFwZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7Ci0JaWYgKHNj LT52c2NfdGFwZmQgPT0gLTEpIHsKLQkJV1BSSU5URigoIm9wZW4gb2YgdGFwIGRldmljZSAlcyBm YWlsZWRcbiIsIHRidWYpKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogU2V0IG5vbi1ibG9j a2luZyBhbmQgcmVnaXN0ZXIgZm9yIHJlYWQKLQkgKiBub3RpZmljYXRpb25zIHdpdGggdGhlIGV2 ZW50IGxvb3AKLQkgKi8KLQlpbnQgb3B0ID0gMTsKLQlpZiAoaW9jdGwoc2MtPnZzY190YXBmZCwg RklPTkJJTywgJm9wdCkgPCAwKSB7Ci0JCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sg ZmFpbGVkXG4iKSk7Ci0JCWNsb3NlKHNjLT52c2NfdGFwZmQpOwotCQlzYy0+dnNjX3RhcGZkID0g LTE7Ci0JfQotCi0Jc2MtPnZzY19tZXZwID0gbWV2ZW50X2FkZChzYy0+dnNjX3RhcGZkLAotCQkJ CSAgRVZGX1JFQUQsCi0JCQkJICBwY2lfdnRuZXRfcnhfY2FsbGJhY2ssCi0JCQkJICBzYyk7Ci0J aWYgKHNjLT52c2NfbWV2cCA9PSBOVUxMKSB7Ci0JCVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0 ZXIgZXZlbnRcbiIpKTsKLQkJY2xvc2Uoc2MtPnZzY190YXBmZCk7Ci0JCXNjLT52c2NfdGFwZmQg PSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wY2lfdnRuZXRfbmV0bWFwX3NldHVwKHN0cnVj dCBwY2lfdnRuZXRfc29mdGMgKnNjLCBjaGFyICppZm5hbWUpCi17Ci0Jc2MtPnBjaV92dG5ldF9y eCA9IHBjaV92dG5ldF9uZXRtYXBfcng7Ci0Jc2MtPnBjaV92dG5ldF90eCA9IHBjaV92dG5ldF9u ZXRtYXBfdHg7Ci0KLQlzYy0+dnNjX25tZCA9IG5tX29wZW4oaWZuYW1lLCBOVUxMLCAwLCAwKTsK LQlpZiAoc2MtPnZzY19ubWQgPT0gTlVMTCkgewotCQlXUFJJTlRGKCgib3BlbiBvZiBuZXRtYXAg ZGV2aWNlICVzIGZhaWxlZFxuIiwgaWZuYW1lKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzYy0+dnNj X21ldnAgPSBtZXZlbnRfYWRkKHNjLT52c2Nfbm1kLT5mZCwKLQkJCQkgIEVWRl9SRUFELAotCQkJ CSAgcGNpX3Z0bmV0X3J4X2NhbGxiYWNrLAotCQkJCSAgc2MpOwotCWlmIChzYy0+dnNjX21ldnAg PT0gTlVMTCkgewotCQlXUFJJTlRGKCgiQ291bGQgbm90IHJlZ2lzdGVyIGV2ZW50XG4iKSk7Ci0J CW5tX2Nsb3NlKHNjLT52c2Nfbm1kKTsKLQkJc2MtPnZzY19ubWQgPSBOVUxMOwotCX0KLX0KLQot c3RhdGljIGludAogcGNpX3Z0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lf ZGV2aW5zdCAqcGksIGNoYXIgKm9wdHMpCiB7Ci0JTUQ1X0NUWCBtZGN0eDsKLQl1bnNpZ25lZCBj aGFyIGRpZ2VzdFsxNl07Ci0JY2hhciBuc3RyWzgwXTsKLQljaGFyIHRuYW1lW01BWENPTUxFTiAr IDFdOwogCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjOwogCWNoYXIgKmRldm5hbWU7CiAJY2hh ciAqdnRvcHRzOwogCWludCBtYWNfcHJvdmlkZWQ7CisJc3RydWN0IHZpcnRpb19jb25zdHMgKnZj OwogCi0Jc2MgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwY2lfdnRuZXRfc29mdGMpKTsKKwkv KgorCSAqIEFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgZnVydGhlciB2aXJ0aW8gaW5pdGlh bGl6YXRpb25zLgorCSAqIHNjIGFsc28gY29udGFpbnMgYSBjb3B5IG9mIHRoZSB2dG5ldF92aV9j b25zdHMsCisJICogYmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNoYW5nZSBkZXBlbmRpbmcgb24K KwkgKiB0aGUgYmFja2VuZC4KKwkgKi8KKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBj aV92dG5ldF9zb2Z0YykgKworCQkJc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fY29uc3RzKSk7CisJdmMg PSAoc3RydWN0IHZpcnRpb19jb25zdHMgKikoc2MgKyAxKTsKKwltZW1jcHkodmMsICZ2dG5ldF92 aV9jb25zdHMsIHNpemVvZigqdmMpKTsKIAogCXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2MtPnZzY19t dHgsIE5VTEwpOwogCi0Jdmlfc29mdGNfbGlua3VwKCZzYy0+dnNjX3ZzLCAmdnRuZXRfdmlfY29u c3RzLCBzYywgcGksIHNjLT52c2NfcXVldWVzKTsKLQlzYy0+dnNjX3ZzLnZzX210eCA9ICZzYy0+ dnNjX210eDsKLQogCXNjLT52c2NfcXVldWVzW1ZUTkVUX1JYUV0udnFfcXNpemUgPSBWVE5FVF9S SU5HU1o7CiAJc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXS52cV9ub3RpZnkgPSBwY2lfdnRuZXRf cGluZ19yeHE7CiAJc2MtPnZzY19xdWV1ZXNbVlRORVRfVFhRXS52cV9xc2l6ZSA9IFZUTkVUX1JJ TkdTWjsKQEAgLTgzMCwxMiArNDQ2LDEwIEBACiAjZW5kaWYKICAKIAkvKgotCSAqIEF0dGVtcHQg dG8gb3BlbiB0aGUgdGFwIGRldmljZSBhbmQgcmVhZCB0aGUgTUFDIGFkZHJlc3MKKwkgKiBBdHRl bXB0IHRvIG9wZW4gdGhlIGJhY2tlbmQgZGV2aWNlIGFuZCByZWFkIHRoZSBNQUMgYWRkcmVzcwog CSAqIGlmIHNwZWNpZmllZAogCSAqLwogCW1hY19wcm92aWRlZCA9IDA7Ci0Jc2MtPnZzY190YXBm ZCA9IC0xOwotCXNjLT52c2Nfbm1kID0gTlVMTDsKIAlpZiAob3B0cyAhPSBOVUxMKSB7CiAJCWlu dCBlcnI7CiAKQEAgLTg0Myw3ICs0NTcsNyBAQAogCQkodm9pZCkgc3Ryc2VwKCZ2dG9wdHMsICIs Iik7CiAKIAkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7Ci0JCQllcnIgPSBwY2lfdnRuZXRfcGFyc2Vt YWModnRvcHRzLCBzYy0+dnNjX2NvbmZpZy5tYWMpOworCQkJZXJyID0gbmV0X3BhcnNlbWFjKHZ0 b3B0cywgc2MtPnZzY19jb25maWcubWFjKTsKIAkJCWlmIChlcnIgIT0gMCkgewogCQkJCWZyZWUo ZGV2bmFtZSk7CiAJCQkJcmV0dXJuIChlcnIpOwpAQCAtODUxLDMzICs0NjUsMTggQEAKIAkJCW1h Y19wcm92aWRlZCA9IDE7CiAJCX0KIAotCQlpZiAoc3RybmNtcChkZXZuYW1lLCAidmFsZSIsIDQp ID09IDApCi0JCQlwY2lfdnRuZXRfbmV0bWFwX3NldHVwKHNjLCBkZXZuYW1lKTsKLQkJaWYgKHN0 cm5jbXAoZGV2bmFtZSwgInRhcCIsIDMpID09IDAgfHwKLQkJICAgIHN0cm5jbXAoZGV2bmFtZSwg InZtbmV0IiwgNSkgPT0gMCkKLQkJCXBjaV92dG5ldF90YXBfc2V0dXAoc2MsIGRldm5hbWUpOwor CQlzYy0+dnNjX2JlID0gbmV0YmVfaW5pdChkZXZuYW1lLCBwY2lfdnRuZXRfcnhfY2FsbGJhY2ss IHNjKTsKKwkJaWYgKCFzYy0+dnNjX2JlKSB7CisJCQlXUFJJTlRGKCgibmV0IGJhY2tlbmQgaW5p dGlhbGl6YXRpb24gZmFpbGVkXG4iKSk7CisJCX0gZWxzZSB7CisJCQl2Yy0+dmNfaHZfY2FwcyB8 PSBuZXRiZV9nZXRfY2FwKHNjLT52c2NfYmUpOworCQl9CiAKIAkJZnJlZShkZXZuYW1lKTsKIAl9 CiAKLQkvKgotCSAqIFRoZSBkZWZhdWx0IE1BQyBhZGRyZXNzIGlzIHRoZSBzdGFuZGFyZCBOZXRB cHAgT1VJIG9mIDAwLWEwLTk4LAotCSAqIGZvbGxvd2VkIGJ5IGFuIE1ENSBvZiB0aGUgUENJIHNs b3QvZnVuYyBudW1iZXIgYW5kIGRldiBuYW1lCi0JICovCiAJaWYgKCFtYWNfcHJvdmlkZWQpIHsK LQkJc25wcmludGYobnN0ciwgc2l6ZW9mKG5zdHIpLCAiJWQtJWQtJXMiLCBwaS0+cGlfc2xvdCwK LQkJICAgIHBpLT5waV9mdW5jLCB2bW5hbWUpOwotCi0JCU1ENUluaXQoJm1kY3R4KTsKLQkJTUQ1 VXBkYXRlKCZtZGN0eCwgbnN0ciwgc3RybGVuKG5zdHIpKTsKLQkJTUQ1RmluYWwoZGlnZXN0LCAm bWRjdHgpOwotCi0JCXNjLT52c2NfY29uZmlnLm1hY1swXSA9IDB4MDA7Ci0JCXNjLT52c2NfY29u ZmlnLm1hY1sxXSA9IDB4YTA7Ci0JCXNjLT52c2NfY29uZmlnLm1hY1syXSA9IDB4OTg7Ci0JCXNj LT52c2NfY29uZmlnLm1hY1szXSA9IGRpZ2VzdFswXTsKLQkJc2MtPnZzY19jb25maWcubWFjWzRd ID0gZGlnZXN0WzFdOwotCQlzYy0+dnNjX2NvbmZpZy5tYWNbNV0gPSBkaWdlc3RbMl07CisJCW5l dF9nZW5tYWMocGksIHNjLT52c2NfY29uZmlnLm1hYyk7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSBj b25maWcgc3BhY2UgKi8KQEAgLTg4NywyMiArNDg2LDIzIEBACiAJcGNpX3NldF9jZmdkYXRhMTYo cGksIFBDSVJfU1VCREVWXzAsIFZJUlRJT19UWVBFX05FVCk7CiAJcGNpX3NldF9jZmdkYXRhMTYo cGksIFBDSVJfU1VCVkVORF8wLCBWSVJUSU9fVkVORE9SKTsKIAotCS8qIExpbmsgaXMgdXAgaWYg d2UgbWFuYWdlZCB0byBvcGVuIHRhcCBkZXZpY2Ugb3IgdmFsZSBwb3J0LiAqLwotCXNjLT52c2Nf Y29uZmlnLnN0YXR1cyA9IChvcHRzID09IE5VTEwgfHwgc2MtPnZzY190YXBmZCA+PSAwIHx8Ci0J ICAgIHNjLT52c2Nfbm1kICE9IE5VTEwpOworCS8qIExpbmsgaXMgdXAgaWYgd2UgbWFuYWdlZCB0 byBvcGVuIGJhY2tlbmQgZGV2aWNlLiAqLworCXNjLT52c2NfY29uZmlnLnN0YXR1cyA9IChvcHRz ID09IE5VTEwgfHwgc2MtPnZzY19iZSk7CiAJCisJdmlfc29mdGNfbGlua3VwKCZzYy0+dnNjX3Zz LCB2Yywgc2MsIHBpLCBzYy0+dnNjX3F1ZXVlcyk7CisJc2MtPnZzY192cy52c19tdHggPSAmc2Mt PnZzY19tdHg7CisKIAkvKiB1c2UgQkFSIDEgdG8gbWFwIE1TSS1YIHRhYmxlIGFuZCBQQkEsIGlm IHdlJ3JlIHVzaW5nIE1TSS1YICovCiAJaWYgKHZpX2ludHJfaW5pdCgmc2MtPnZzY192cywgMSwg ZmJzZHJ1bl92aXJ0aW9fbXNpeCgpKSkKIAkJcmV0dXJuICgxKTsKIAogCS8qIHVzZSBCQVIgMCB0 byBtYXAgY29uZmlnIHJlZ3MgaW4gSU8gc3BhY2UgKi8KLQl2aV9zZXRfaW9fYmFyKCZzYy0+dnNj X3ZzLCAwKTsKKwl2aV9zZXRfaW9fYmFyKCZzYy0+dnNjX3ZzLCAwKTsJLyogY2FsbHMgaW50byB2 aXJ0aW8gKi8KIAogCXNjLT5yZXNldHRpbmcgPSAwOwogCiAJc2MtPnJ4X21lcmdlID0gMTsKIAlz Yy0+cnhfdmhkcmxlbiA9IHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9yeGhkcik7Ci0Jc2MtPnJ4 X2luX3Byb2dyZXNzID0gMDsKIAlwdGhyZWFkX211dGV4X2luaXQoJnNjLT5yeF9tdHgsIE5VTEwp OyAKIAogCS8qIApAQCAtOTE0LDkgKzUxNCw2IEBACiAJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+ dHhfbXR4LCBOVUxMKTsKIAlwdGhyZWFkX2NvbmRfaW5pdCgmc2MtPnR4X2NvbmQsIE5VTEwpOwog CXB0aHJlYWRfY3JlYXRlKCZzYy0+dHhfdGlkLCBOVUxMLCBwY2lfdnRuZXRfdHhfdGhyZWFkLCAo dm9pZCAqKXNjKTsKLQlzbnByaW50Zih0bmFtZSwgc2l6ZW9mKHRuYW1lKSwgInZ0bmV0LSVkOiVk IHR4IiwgcGktPnBpX3Nsb3QsCi0JICAgIHBpLT5waV9mdW5jKTsKLSAgICAgICAgcHRocmVhZF9z ZXRfbmFtZV9ucChzYy0+dHhfdGlkLCB0bmFtZSk7CiAKIAlyZXR1cm4gKDApOwogfQpAQCAtOTI3 LDggKzUyNCw4IEBACiAJc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MgPSB2c2M7CiAJdm9pZCAq cHRyOwogCi0JaWYgKG9mZnNldCA8IDYpIHsKLQkJYXNzZXJ0KG9mZnNldCArIHNpemUgPD0gNik7 CisJaWYgKG9mZnNldCA8IChpbnQpc2l6ZW9mKHNjLT52c2NfY29uZmlnLm1hYykpIHsKKwkJYXNz ZXJ0KG9mZnNldCArIHNpemUgPD0gKGludClzaXplb2Yoc2MtPnZzY19jb25maWcubWFjKSk7CiAJ CS8qCiAJCSAqIFRoZSBkcml2ZXIgaXMgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIE1BQyBhZGRyZXNz CiAJCSAqLwpAQCAtOTYwLDE0ICs1NTcsMTcgQEAKIAogCXNjLT52c2NfZmVhdHVyZXMgPSBuZWdv dGlhdGVkX2ZlYXR1cmVzOwogCi0JaWYgKCEoc2MtPnZzY19mZWF0dXJlcyAmIFZJUlRJT19ORVRf Rl9NUkdfUlhCVUYpKSB7CisJaWYgKCEobmVnb3RpYXRlZF9mZWF0dXJlcyAmIFZJUlRJT19ORVRf Rl9NUkdfUlhCVUYpKSB7CiAJCXNjLT5yeF9tZXJnZSA9IDA7CiAJCS8qIG5vbi1tZXJnZSByeCBo ZWFkZXIgaXMgMiBieXRlcyBzaG9ydGVyICovCiAJCXNjLT5yeF92aGRybGVuIC09IDI7CiAJfQor CisJLyogVGVsbCB0aGUgYmFja2VuZCB0byBlbmFibGUgc29tZSBjYXBhYmlsaXRpZXMgaXQgaGFz IGFkdmVydGlzZWQuICovCisJbmV0YmVfc2V0X2NhcChzYy0+dnNjX2JlLCBuZWdvdGlhdGVkX2Zl YXR1cmVzLCBzYy0+cnhfdmhkcmxlbik7CiB9CiAKLXN0cnVjdCBwY2lfZGV2ZW11IHBjaV9kZV92 bmV0ID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2ZW11IHBjaV9kZV92bmV0ID0gewogCS5wZV9l bXUgPSAJInZpcnRpby1uZXQiLAogCS5wZV9pbml0ID0JcGNpX3Z0bmV0X2luaXQsCiAJLnBlX2Jh cndyaXRlID0JdmlfcGNpX3dyaXRlLApkaWZmIC11IC1yIC1OIHVzci9zcmMvdXNyLnNiaW4vYmh5 dmUvcGNpX3ZpcnRpb19uZXQuYy5vcmlnIC91c3Ivc3JjL3Vzci5zYmluL2JoeXZlL3BjaV92aXJ0 aW9fbmV0LmMub3JpZwotLS0gdXNyL3NyYy91c3Iuc2Jpbi9iaHl2ZS9wY2lfdmlydGlvX25ldC5j Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIC91c3Ivc3JjL3Vz ci5zYmluL2JoeXZlL3BjaV92aXJ0aW9fbmV0LmMub3JpZwkyMDE2LTA5LTI5IDAwOjI1OjA3LjAw MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDk3NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIw MTEgTmV0QXBwLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUQVBQLCBJTkMgYGBBUyBJUycnIEFORAor ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBORVRBUFAsIElOQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiByZWxlbmcvMTEuMC91c3Iu c2Jpbi9iaHl2ZS9wY2lfdmlydGlvX25ldC5jIDI5NjgyOSAyMDE2LTAzLTE0IDA4OjQ4OjE2WiBn bm4gJAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDog cmVsZW5nLzExLjAvdXNyLnNiaW4vYmh5dmUvcGNpX3ZpcnRpb19uZXQuYyAyOTY4MjkgMjAxNi0w My0xNCAwODo0ODoxNlogZ25uICQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1 ZGUgPHN5cy9saW5rZXJfc2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUg PHN5cy91aW8uaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2F0 b21pYy5oPgorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2lmbmRlZiBORVRNQVBfV0lUSF9M SUJTCisjZGVmaW5lIE5FVE1BUF9XSVRIX0xJQlMKKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9uZXRt YXBfdXNlci5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2lu Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+ CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPG1kNS5oPgorI2luY2x1ZGUg PHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CisKKyNpbmNsdWRlICJiaHl2ZXJ1 bi5oIgorI2luY2x1ZGUgInBjaV9lbXVsLmgiCisjaW5jbHVkZSAibWV2ZW50LmgiCisjaW5jbHVk ZSAidmlydGlvLmgiCisKKyNkZWZpbmUgVlRORVRfUklOR1NaCTEwMjQKKworI2RlZmluZSBWVE5F VF9NQVhTRUdTCTI1NgorCisvKgorICogSG9zdCBjYXBhYmlsaXRpZXMuICBOb3RlIHRoYXQgd2Ug b25seSBvZmZlciBhIGZldyBvZiB0aGVzZS4KKyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1NV TQkoMSA8PCAgMCkgLyogaG9zdCBoYW5kbGVzIHBhcnRpYWwgY2tzdW0gKi8KKyNkZWZpbmUJVklS VElPX05FVF9GX0dVRVNUX0NTVU0JKDEgPDwgIDEpIC8qIGd1ZXN0IGhhbmRsZXMgcGFydGlhbCBj a3N1bSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfTUFDCSgxIDw8ICA1KSAvKiBob3N0IHN1cHBs aWVzIE1BQyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1NPX0RFUFJFQwkoMSA8PCAgNikgLyog ZGVwcmVjYXRlZDogaG9zdCBoYW5kbGVzIEdTTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VF U1RfVFNPNAkoMSA8PCAgNykgLyogZ3Vlc3QgY2FuIHJjdiBUU092NCAqLworI2RlZmluZQlWSVJU SU9fTkVUX0ZfR1VFU1RfVFNPNgkoMSA8PCAgOCkgLyogZ3Vlc3QgY2FuIHJjdiBUU092NiAqLwor I2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOCSgxIDw8ICA5KSAvKiBndWVzdCBjYW4gcmN2 IFRTTyB3aXRoIEVDTiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPCSgxIDw8IDEw KSAvKiBndWVzdCBjYW4gcmN2IFVGTyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080 CSgxIDw8IDExKSAvKiBob3N0IGNhbiByY3YgVFNPdjQgKi8KKyNkZWZpbmUJVklSVElPX05FVF9G X0hPU1RfVFNPNgkoMSA8PCAxMikgLyogaG9zdCBjYW4gcmN2IFRTT3Y2ICovCisjZGVmaW5lCVZJ UlRJT19ORVRfRl9IT1NUX0VDTgkoMSA8PCAxMykgLyogaG9zdCBjYW4gcmN2IFRTTyB3aXRoIEVD TiAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfSE9TVF9VRk8JKDEgPDwgMTQpIC8qIGhvc3QgY2Fu IHJjdiBVRk8gKi8KKyNkZWZpbmUJVklSVElPX05FVF9GX01SR19SWEJVRgkoMSA8PCAxNSkgLyog aG9zdCBjYW4gbWVyZ2UgUlggYnVmZmVycyAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfU1RBVFVT CSgxIDw8IDE2KSAvKiBjb25maWcgc3RhdHVzIGZpZWxkIGF2YWlsYWJsZSAqLworI2RlZmluZQlW SVJUSU9fTkVUX0ZfQ1RSTF9WUQkoMSA8PCAxNykgLyogY29udHJvbCBjaGFubmVsIGF2YWlsYWJs ZSAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9SWAkoMSA8PCAxOCkgLyogY29udHJvbCBj aGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLworI2RlZmluZQlWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFO CSgxIDw8IDE5KSAvKiBjb250cm9sIGNoYW5uZWwgVkxBTiBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUJ VklSVElPX05FVF9GX0dVRVNUX0FOTk9VTkNFIFwKKwkJCQkoMSA8PCAyMSkgLyogZ3Vlc3QgY2Fu IHNlbmQgZ3JhdHVpdG91cyBwa3RzICovCisKKyNkZWZpbmUgVlRORVRfU19IT1NUQ0FQUyAgICAg IFwKKyAgKCBWSVJUSU9fTkVUX0ZfTUFDIHwgVklSVElPX05FVF9GX01SR19SWEJVRiB8IFZJUlRJ T19ORVRfRl9TVEFUVVMgfCBcCisgICAgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZIHwgVklSVElP X1JJTkdfRl9JTkRJUkVDVF9ERVNDKQorCisvKgorICogUENJIGNvbmZpZy1zcGFjZSAicmVnaXN0 ZXJzIgorICovCitzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgeworCXVpbnQ4X3QgIG1hY1s2XTsK Kwl1aW50MTZfdCBzdGF0dXM7Cit9IF9fcGFja2VkOworCisvKgorICogUXVldWUgZGVmaW5pdGlv bnMuCisgKi8KKyNkZWZpbmUgVlRORVRfUlhRCTAKKyNkZWZpbmUgVlRORVRfVFhRCTEKKyNkZWZp bmUgVlRORVRfQ1RMUQkyCS8qIE5COiBub3QgeWV0IHN1cHBvcnRlZCAqLworCisjZGVmaW5lIFZU TkVUX01BWFEJMworCisvKgorICogRml4ZWQgbmV0d29yayBoZWFkZXIgc2l6ZQorICovCitzdHJ1 Y3QgdmlydGlvX25ldF9yeGhkciB7CisJdWludDhfdAkJdnJoX2ZsYWdzOworCXVpbnQ4X3QJCXZy aF9nc29fdHlwZTsKKwl1aW50MTZfdAl2cmhfaGRyX2xlbjsKKwl1aW50MTZfdAl2cmhfZ3NvX3Np emU7CisJdWludDE2X3QJdnJoX2NzdW1fc3RhcnQ7CisJdWludDE2X3QJdnJoX2NzdW1fb2Zmc2V0 OworCXVpbnQxNl90CXZyaF9idWZzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIERlYnVnIHByaW50 ZgorICovCitzdGF0aWMgaW50IHBjaV92dG5ldF9kZWJ1ZzsKKyNkZWZpbmUgRFBSSU5URihwYXJh bXMpIGlmIChwY2lfdnRuZXRfZGVidWcpIHByaW50ZiBwYXJhbXMKKyNkZWZpbmUgV1BSSU5URihw YXJhbXMpIHByaW50ZiBwYXJhbXMKKworLyoKKyAqIFBlci1kZXZpY2Ugc29mdGMKKyAqLworc3Ry dWN0IHBjaV92dG5ldF9zb2Z0YyB7CisJc3RydWN0IHZpcnRpb19zb2Z0YyB2c2NfdnM7CisJc3Ry dWN0IHZxdWV1ZV9pbmZvIHZzY19xdWV1ZXNbVlRORVRfTUFYUSAtIDFdOworCXB0aHJlYWRfbXV0 ZXhfdCB2c2NfbXR4OworCXN0cnVjdCBtZXZlbnQJKnZzY19tZXZwOworCisJaW50CQl2c2NfdGFw ZmQ7CisJc3RydWN0IG5tX2Rlc2MJKnZzY19ubWQ7CisKKwlpbnQJCXZzY19yeF9yZWFkeTsKKwl2 b2xhdGlsZSBpbnQJcmVzZXR0aW5nOwkvKiBzZXQgYW5kIGNoZWNrZWQgb3V0c2lkZSBsb2NrICov CisKKwl1aW50NjRfdAl2c2NfZmVhdHVyZXM7CS8qIG5lZ290aWF0ZWQgZmVhdHVyZXMgKi8KKwkK KwlzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgdnNjX2NvbmZpZzsKKworCXB0aHJlYWRfbXV0ZXhf dAlyeF9tdHg7CisJaW50CQlyeF9pbl9wcm9ncmVzczsKKwlpbnQJCXJ4X3ZoZHJsZW47CisJaW50 CQlyeF9tZXJnZTsJLyogbWVyZ2VkIHJ4IGJ1ZnMgaW4gdXNlICovCisKKwlwdGhyZWFkX3QgCXR4 X3RpZDsKKwlwdGhyZWFkX211dGV4X3QJdHhfbXR4OworCXB0aHJlYWRfY29uZF90CXR4X2NvbmQ7 CisJaW50CQl0eF9pbl9wcm9ncmVzczsKKworCXZvaWQgKCpwY2lfdnRuZXRfcngpKHN0cnVjdCBw Y2lfdnRuZXRfc29mdGMgKnNjKTsKKwl2b2lkICgqcGNpX3Z0bmV0X3R4KShzdHJ1Y3QgcGNpX3Z0 bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgIGludCBpb3ZjbnQsIGlu dCBsZW4pOworfTsKKworc3RhdGljIHZvaWQgcGNpX3Z0bmV0X3Jlc2V0KHZvaWQgKik7CisvKiBz dGF0aWMgdm9pZCBwY2lfdnRuZXRfbm90aWZ5KHZvaWQgKiwgc3RydWN0IHZxdWV1ZV9pbmZvICop OyAqLworc3RhdGljIGludCBwY2lfdnRuZXRfY2ZncmVhZCh2b2lkICosIGludCwgaW50LCB1aW50 MzJfdCAqKTsKK3N0YXRpYyBpbnQgcGNpX3Z0bmV0X2NmZ3dyaXRlKHZvaWQgKiwgaW50LCBpbnQs IHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkIHBjaV92dG5ldF9uZWdfZmVhdHVyZXModm9pZCAqLCB1 aW50NjRfdCk7CisKK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX2NvbnN0cyB2dG5ldF92aV9jb25zdHMg PSB7CisJInZ0bmV0IiwJCS8qIG91ciBuYW1lICovCisJVlRORVRfTUFYUSAtIDEsCQkvKiB3ZSBj dXJyZW50bHkgc3VwcG9ydCAyIHZpcnRxdWV1ZXMgKi8KKwlzaXplb2Yoc3RydWN0IHZpcnRpb19u ZXRfY29uZmlnKSwgLyogY29uZmlnIHJlZyBzaXplICovCisJcGNpX3Z0bmV0X3Jlc2V0LAkvKiBy ZXNldCAqLworCU5VTEwsCQkJLyogZGV2aWNlLXdpZGUgcW5vdGlmeSAtLSBub3QgdXNlZCAqLwor CXBjaV92dG5ldF9jZmdyZWFkLAkvKiByZWFkIFBDSSBjb25maWcgKi8KKwlwY2lfdnRuZXRfY2Zn d3JpdGUsCS8qIHdyaXRlIFBDSSBjb25maWcgKi8KKwlwY2lfdnRuZXRfbmVnX2ZlYXR1cmVzLAkv KiBhcHBseSBuZWdvdGlhdGVkIGZlYXR1cmVzICovCisJVlRORVRfU19IT1NUQ0FQUywJLyogb3Vy IGNhcGFiaWxpdGllcyAqLworfTsKKworLyoKKyAqIElmIHRoZSB0cmFuc21pdCB0aHJlYWQgaXMg YWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3Bj aV92dG5ldF90eHdhaXQoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCit7CisKKwlwdGhyZWFk X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCXdoaWxlIChzYy0+dHhfaW5fcHJvZ3Jlc3MpIHsK KwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT50eF9tdHgpOworCQl1c2xlZXAoMTAwMDApOwor CQlwdGhyZWFkX211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCX0KKwlwdGhyZWFkX211dGV4X3Vu bG9jaygmc2MtPnR4X210eCk7Cit9CisKKy8qCisgKiBJZiB0aGUgcmVjZWl2ZSB0aHJlYWQgaXMg YWN0aXZlIHRoZW4gc3RhbGwgdW50aWwgaXQgaXMgZG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3Bj aV92dG5ldF9yeHdhaXQoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MpCit7CisKKwlwdGhyZWFk X211dGV4X2xvY2soJnNjLT5yeF9tdHgpOworCXdoaWxlIChzYy0+cnhfaW5fcHJvZ3Jlc3MpIHsK KwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT5yeF9tdHgpOworCQl1c2xlZXAoMTAwMDApOwor CQlwdGhyZWFkX211dGV4X2xvY2soJnNjLT5yeF9tdHgpOworCX0KKwlwdGhyZWFkX211dGV4X3Vu bG9jaygmc2MtPnJ4X210eCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfcmVzZXQodm9p ZCAqdnNjKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOworCisJRFBSSU5U RigoInZ0bmV0OiBkZXZpY2UgcmVzZXQgcmVxdWVzdGVkICFcbiIpKTsKKworCXNjLT5yZXNldHRp bmcgPSAxOworCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgdGhy ZWFkcyB0byBmaW5pc2ggdGhlaXIKKwkgKiBwcm9jZXNzaW5nLgorCSAqLworCXBjaV92dG5ldF90 eHdhaXQoc2MpOworCXBjaV92dG5ldF9yeHdhaXQoc2MpOworCisJc2MtPnZzY19yeF9yZWFkeSA9 IDA7CisJc2MtPnJ4X21lcmdlID0gMTsKKwlzYy0+cnhfdmhkcmxlbiA9IHNpemVvZihzdHJ1Y3Qg dmlydGlvX25ldF9yeGhkcik7CisKKwkvKiBub3cgcmVzZXQgcmluZ3MsIE1TSS1YIHZlY3RvcnMs IGFuZCBuZWdvdGlhdGVkIGNhcGFiaWxpdGllcyAqLworCXZpX3Jlc2V0X2Rldigmc2MtPnZzY192 cyk7CisKKwlzYy0+cmVzZXR0aW5nID0gMDsKK30KKworLyoKKyAqIENhbGxlZCB0byBzZW5kIGEg YnVmZmVyIGNoYWluIG91dCB0byB0aGUgdGFwIGRldmljZQorICovCitzdGF0aWMgdm9pZAorcGNp X3Z0bmV0X3RhcF90eChzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYywgc3RydWN0IGlvdmVjICpp b3YsIGludCBpb3ZjbnQsCisJCSBpbnQgbGVuKQoreworCXN0YXRpYyBjaGFyIHBhZFs2MF07IC8q IGFsbCB6ZXJvIGJ5dGVzICovCisKKwlpZiAoc2MtPnZzY190YXBmZCA9PSAtMSkKKwkJcmV0dXJu OworCisJLyoKKwkgKiBJZiB0aGUgbGVuZ3RoIGlzIDwgNjAsIHBhZCBvdXQgdG8gdGhhdCBhbmQg YWRkIHRoZQorCSAqIGV4dHJhIHplcm8nZCBzZWdtZW50IHRvIHRoZSBpb3YuIEl0IGlzIGd1YXJh bnRlZWQgdGhhdAorCSAqIHRoZXJlIGlzIGFsd2F5cyBhbiBleHRyYSBpb3YgYXZhaWxhYmxlIGJ5 IHRoZSBjYWxsZXIuCisJICovCisJaWYgKGxlbiA8IDYwKSB7CisJCWlvdltpb3ZjbnRdLmlvdl9i YXNlID0gcGFkOworCQlpb3ZbaW92Y250XS5pb3ZfbGVuID0gNjAgLSBsZW47CisJCWlvdmNudCsr OworCX0KKwkodm9pZCkgd3JpdGV2KHNjLT52c2NfdGFwZmQsIGlvdiwgaW92Y250KTsKK30KKwor LyoKKyAqICBDYWxsZWQgd2hlbiB0aGVyZSBpcyByZWFkIGFjdGl2aXR5IG9uIHRoZSB0YXAgZmls ZSBkZXNjcmlwdG9yLgorICogRWFjaCBidWZmZXIgcG9zdGVkIGJ5IHRoZSBndWVzdCBpcyBhc3N1 bWVkIHRvIGJlIGFibGUgdG8gY29udGFpbgorICogYW4gZW50aXJlIGV0aGVybmV0IGZyYW1lICsg cnggaGVhZGVyLgorICogIE1QIG5vdGU6IHRoZSBkdW1teWJ1ZiBpcyBvbmx5IHVzZWQgZm9yIGRp c2NhcmRpbmcgZnJhbWVzLCBzbyB0aGVyZQorICogaXMgbm8gbmVlZCBmb3IgaXQgdG8gYmUgcGVy LXZ0bmV0IG9yIGxvY2tlZC4KKyAqLworc3RhdGljIHVpbnQ4X3QgZHVtbXlidWZbMjA0OF07CisK K3N0YXRpYyBfX2lubGluZSBzdHJ1Y3QgaW92ZWMgKgorcnhfaW92X3RyaW0oc3RydWN0IGlvdmVj ICppb3YsIGludCAqbmlvdiwgaW50IHRsZW4pCit7CisJc3RydWN0IGlvdmVjICpyaW92OworCisJ LyogWFhYIHNob3J0LWN1dDogYXNzdW1lIGZpcnN0IHNlZ21lbnQgaXMgPj0gdGxlbiAqLworCWFz c2VydChpb3ZbMF0uaW92X2xlbiA+PSB0bGVuKTsKKworCWlvdlswXS5pb3ZfbGVuIC09IHRsZW47 CisJaWYgKGlvdlswXS5pb3ZfbGVuID09IDApIHsKKwkJYXNzZXJ0KCpuaW92ID4gMSk7CisJCSpu aW92IC09IDE7CisJCXJpb3YgPSAmaW92WzFdOworCX0gZWxzZSB7CisJCWlvdlswXS5pb3ZfYmFz ZSA9ICh2b2lkICopKCh1aW50cHRyX3QpaW92WzBdLmlvdl9iYXNlICsgdGxlbik7CisJCXJpb3Yg PSAmaW92WzBdOworCX0KKworCXJldHVybiAocmlvdik7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf dnRuZXRfdGFwX3J4KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBpb3Zl YyBpb3ZbVlRORVRfTUFYU0VHU10sICpyaW92OworCXN0cnVjdCB2cXVldWVfaW5mbyAqdnE7CisJ dm9pZCAqdnJ4OworCWludCBsZW4sIG47CisJdWludDE2X3QgaWR4OworCisJLyoKKwkgKiBTaG91 bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCB0YXAgZmQKKwkgKi8KKwlhc3NlcnQo c2MtPnZzY190YXBmZCAhPSAtMSk7CisKKwkvKgorCSAqIEJ1dCwgd2lsbCBiZSBjYWxsZWQgd2hl biB0aGUgcnggcmluZyBoYXNuJ3QgeWV0CisJICogYmVlbiBzZXQgdXAgb3IgdGhlIGd1ZXN0IGlz IHJlc2V0dGluZyB0aGUgZGV2aWNlLgorCSAqLworCWlmICghc2MtPnZzY19yeF9yZWFkeSB8fCBz Yy0+cmVzZXR0aW5nKSB7CisJCS8qCisJCSAqIERyb3AgdGhlIHBhY2tldCBhbmQgdHJ5IGxhdGVy LgorCQkgKi8KKwkJKHZvaWQpIHJlYWQoc2MtPnZzY190YXBmZCwgZHVtbXlidWYsIHNpemVvZihk dW1teWJ1ZikpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgYXZhaWxhYmxl IHJ4IGJ1ZmZlcnMKKwkgKi8KKwl2cSA9ICZzYy0+dnNjX3F1ZXVlc1tWVE5FVF9SWFFdOworCWlm ICghdnFfaGFzX2Rlc2NzKHZxKSkgeworCQkvKgorCQkgKiBEcm9wIHRoZSBwYWNrZXQgYW5kIHRy eSBsYXRlci4gIEludGVycnVwdCBvbgorCQkgKiBlbXB0eSwgaWYgdGhhdCdzIG5lZ290aWF0ZWQu CisJCSAqLworCQkodm9pZCkgcmVhZChzYy0+dnNjX3RhcGZkLCBkdW1teWJ1Ziwgc2l6ZW9mKGR1 bW15YnVmKSk7CisJCXZxX2VuZGNoYWlucyh2cSwgMSk7CisJCXJldHVybjsKKwl9CisKKwlkbyB7 CisJCS8qCisJCSAqIEdldCBkZXNjcmlwdG9yIGNoYWluLgorCQkgKi8KKwkJbiA9IHZxX2dldGNo YWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01BWFNFR1MsIE5VTEwpOworCQlhc3NlcnQobiA+PSAx ICYmIG4gPD0gVlRORVRfTUFYU0VHUyk7CisKKwkJLyoKKwkJICogR2V0IGEgcG9pbnRlciB0byB0 aGUgcnggaGVhZGVyLCBhbmQgdXNlIHRoZQorCQkgKiBkYXRhIGltbWVkaWF0ZWx5IGZvbGxvd2lu ZyBpdCBmb3IgdGhlIHBhY2tldCBidWZmZXIuCisJCSAqLworCQl2cnggPSBpb3ZbMF0uaW92X2Jh c2U7CisJCXJpb3YgPSByeF9pb3ZfdHJpbShpb3YsICZuLCBzYy0+cnhfdmhkcmxlbik7CisKKwkJ bGVuID0gcmVhZHYoc2MtPnZzY190YXBmZCwgcmlvdiwgbik7CisKKwkJaWYgKGxlbiA8IDAgJiYg ZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKKwkJCS8qCisJCQkgKiBObyBtb3JlIHBhY2tldHMsIGJ1 dCBzdGlsbCBzb21lIGF2YWlsIHJpbmcKKwkJCSAqIGVudHJpZXMuICBJbnRlcnJ1cHQgaWYgbmVl ZGVkL2FwcHJvcHJpYXRlLgorCQkJICovCisJCQl2cV9yZXRjaGFpbih2cSk7CisJCQl2cV9lbmRj aGFpbnModnEsIDApOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogVGhlIG9ubHkgdmFs aWQgZmllbGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBi dWZmZXJzIGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNl dCh2cngsIDAsIHNjLT5yeF92aGRybGVuKTsKKworCQlpZiAoc2MtPnJ4X21lcmdlKSB7CisJCQlz dHJ1Y3QgdmlydGlvX25ldF9yeGhkciAqdnJ4aDsKKworCQkJdnJ4aCA9IHZyeDsKKwkJCXZyeGgt PnZyaF9idWZzID0gMTsKKwkJfQorCisJCS8qCisJCSAqIFJlbGVhc2UgdGhpcyBjaGFpbiBhbmQg aGFuZGxlIG1vcmUgY2hhaW5zLgorCQkgKi8KKwkJdnFfcmVsY2hhaW4odnEsIGlkeCwgbGVuICsg c2MtPnJ4X3ZoZHJsZW4pOworCX0gd2hpbGUgKHZxX2hhc19kZXNjcyh2cSkpOworCisJLyogSW50 ZXJydXB0IGlmIG5lZWRlZCwgaW5jbHVkaW5nIGZvciBOT1RJRllfT05fRU1QVFkuICovCisJdnFf ZW5kY2hhaW5zKHZxLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAorcGNpX3Z0bmV0X25l dG1hcF93cml0ZXYoc3RydWN0IG5tX2Rlc2MgKm5tZCwgc3RydWN0IGlvdmVjICppb3YsIGludCBp b3ZjbnQpCit7CisJaW50IHIsIGk7CisJaW50IGxlbiA9IDA7CisKKwlmb3IgKHIgPSBubWQtPmN1 cl90eF9yaW5nOyA7ICkgeworCQlzdHJ1Y3QgbmV0bWFwX3JpbmcgKnJpbmcgPSBORVRNQVBfVFhS SU5HKG5tZC0+bmlmcCwgcik7CisJCXVpbnQzMl90IGN1ciwgaWR4OworCQljaGFyICpidWY7CisK KwkJaWYgKG5tX3JpbmdfZW1wdHkocmluZykpIHsKKwkJCXIrKzsKKwkJCWlmIChyID4gbm1kLT5s YXN0X3R4X3JpbmcpCisJCQkJciA9IG5tZC0+Zmlyc3RfdHhfcmluZzsKKwkJCWlmIChyID09IG5t ZC0+Y3VyX3R4X3JpbmcpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQljdXIgPSBy aW5nLT5jdXI7CisJCWlkeCA9IHJpbmctPnNsb3RbY3VyXS5idWZfaWR4OworCQlidWYgPSBORVRN QVBfQlVGKHJpbmcsIGlkeCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGlvdmNudDsgaSsrKSB7CisJ CQlpZiAobGVuICsgaW92W2ldLmlvdl9sZW4gPiAyMDQ4KQorCQkJCWJyZWFrOworCQkJbWVtY3B5 KCZidWZbbGVuXSwgaW92W2ldLmlvdl9iYXNlLCBpb3ZbaV0uaW92X2xlbik7CisJCQlsZW4gKz0g aW92W2ldLmlvdl9sZW47CisJCX0KKwkJcmluZy0+c2xvdFtjdXJdLmxlbiA9IGxlbjsKKwkJcmlu Zy0+aGVhZCA9IHJpbmctPmN1ciA9IG5tX3JpbmdfbmV4dChyaW5nLCBjdXIpOworCQlubWQtPmN1 cl90eF9yaW5nID0gcjsKKwkJaW9jdGwobm1kLT5mZCwgTklPQ1RYU1lOQywgTlVMTCk7CisJCWJy ZWFrOworCX0KKworCXJldHVybiAobGVuKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAorcGNp X3Z0bmV0X25ldG1hcF9yZWFkdihzdHJ1Y3Qgbm1fZGVzYyAqbm1kLCBzdHJ1Y3QgaW92ZWMgKmlv diwgaW50IGlvdmNudCkKK3sKKwlpbnQgbGVuID0gMDsKKwlpbnQgaSA9IDA7CisJaW50IHI7CisK Kwlmb3IgKHIgPSBubWQtPmN1cl9yeF9yaW5nOyA7ICkgeworCQlzdHJ1Y3QgbmV0bWFwX3Jpbmcg KnJpbmcgPSBORVRNQVBfUlhSSU5HKG5tZC0+bmlmcCwgcik7CisJCXVpbnQzMl90IGN1ciwgaWR4 OworCQljaGFyICpidWY7CisJCXNpemVfdCBsZWZ0OworCisJCWlmIChubV9yaW5nX2VtcHR5KHJp bmcpKSB7CisJCQlyKys7CisJCQlpZiAociA+IG5tZC0+bGFzdF9yeF9yaW5nKQorCQkJCXIgPSBu bWQtPmZpcnN0X3J4X3Jpbmc7CisJCQlpZiAociA9PSBubWQtPmN1cl9yeF9yaW5nKQorCQkJCWJy ZWFrOworCQkJY29udGludWU7CisJCX0KKwkJY3VyID0gcmluZy0+Y3VyOworCQlpZHggPSByaW5n LT5zbG90W2N1cl0uYnVmX2lkeDsKKwkJYnVmID0gTkVUTUFQX0JVRihyaW5nLCBpZHgpOworCQls ZWZ0ID0gcmluZy0+c2xvdFtjdXJdLmxlbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgaW92Y250ICYm IGxlZnQgPiAwOyBpKyspIHsKKwkJCWlmIChpb3ZbaV0uaW92X2xlbiA+IGxlZnQpCisJCQkJaW92 W2ldLmlvdl9sZW4gPSBsZWZ0OworCQkJbWVtY3B5KGlvdltpXS5pb3ZfYmFzZSwgJmJ1ZltsZW5d LCBpb3ZbaV0uaW92X2xlbik7CisJCQlsZW4gKz0gaW92W2ldLmlvdl9sZW47CisJCQlsZWZ0IC09 IGlvdltpXS5pb3ZfbGVuOworCQl9CisJCXJpbmctPmhlYWQgPSByaW5nLT5jdXIgPSBubV9yaW5n X25leHQocmluZywgY3VyKTsKKwkJbm1kLT5jdXJfcnhfcmluZyA9IHI7CisJCWlvY3RsKG5tZC0+ ZmQsIE5JT0NSWFNZTkMsIE5VTEwpOworCQlicmVhazsKKwl9CisJZm9yICg7IGkgPCBpb3ZjbnQ7 IGkrKykKKwkJaW92W2ldLmlvdl9sZW4gPSAwOworCisJcmV0dXJuIChsZW4pOworfQorCisvKgor ICogQ2FsbGVkIHRvIHNlbmQgYSBidWZmZXIgY2hhaW4gb3V0IHRvIHRoZSB2YWxlIHBvcnQKKyAq Lworc3RhdGljIHZvaWQKK3BjaV92dG5ldF9uZXRtYXBfdHgoc3RydWN0IHBjaV92dG5ldF9zb2Z0 YyAqc2MsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW92Y250LAorCQkgICAgaW50IGxlbikKK3sK KwlzdGF0aWMgY2hhciBwYWRbNjBdOyAvKiBhbGwgemVybyBieXRlcyAqLworCisJaWYgKHNjLT52 c2Nfbm1kID09IE5VTEwpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIGxlbmd0aCBpcyA8 IDYwLCBwYWQgb3V0IHRvIHRoYXQgYW5kIGFkZCB0aGUKKwkgKiBleHRyYSB6ZXJvJ2Qgc2VnbWVu dCB0byB0aGUgaW92LiBJdCBpcyBndWFyYW50ZWVkIHRoYXQKKwkgKiB0aGVyZSBpcyBhbHdheXMg YW4gZXh0cmEgaW92IGF2YWlsYWJsZSBieSB0aGUgY2FsbGVyLgorCSAqLworCWlmIChsZW4gPCA2 MCkgeworCQlpb3ZbaW92Y250XS5pb3ZfYmFzZSA9IHBhZDsKKwkJaW92W2lvdmNudF0uaW92X2xl biA9IDYwIC0gbGVuOworCQlpb3ZjbnQrKzsKKwl9CisJKHZvaWQpIHBjaV92dG5ldF9uZXRtYXBf d3JpdGV2KHNjLT52c2Nfbm1kLCBpb3YsIGlvdmNudCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf dnRuZXRfbmV0bWFwX3J4KHN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjKQoreworCXN0cnVjdCBp b3ZlYyBpb3ZbVlRORVRfTUFYU0VHU10sICpyaW92OworCXN0cnVjdCB2cXVldWVfaW5mbyAqdnE7 CisJdm9pZCAqdnJ4OworCWludCBsZW4sIG47CisJdWludDE2X3QgaWR4OworCisJLyoKKwkgKiBT aG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCBuZXRtYXAgZGVzY3JpcHRvcgor CSAqLworCWFzc2VydChzYy0+dnNjX25tZCAhPSBOVUxMKTsKKworCS8qCisJICogQnV0LCB3aWxs IGJlIGNhbGxlZCB3aGVuIHRoZSByeCByaW5nIGhhc24ndCB5ZXQKKwkgKiBiZWVuIHNldCB1cCBv ciB0aGUgZ3Vlc3QgaXMgcmVzZXR0aW5nIHRoZSBkZXZpY2UuCisJICovCisJaWYgKCFzYy0+dnNj X3J4X3JlYWR5IHx8IHNjLT5yZXNldHRpbmcpIHsKKwkJLyoKKwkJICogRHJvcCB0aGUgcGFja2V0 IGFuZCB0cnkgbGF0ZXIuCisJCSAqLworCQkodm9pZCkgbm1fbmV4dHBrdChzYy0+dnNjX25tZCwg KHZvaWQgKilkdW1teWJ1Zik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBh dmFpbGFibGUgcnggYnVmZmVycworCSAqLworCXZxID0gJnNjLT52c2NfcXVldWVzW1ZUTkVUX1JY UV07CisJaWYgKCF2cV9oYXNfZGVzY3ModnEpKSB7CisJCS8qCisJCSAqIERyb3AgdGhlIHBhY2tl dCBhbmQgdHJ5IGxhdGVyLiAgSW50ZXJydXB0IG9uCisJCSAqIGVtcHR5LCBpZiB0aGF0J3MgbmVn b3RpYXRlZC4KKwkJICovCisJCSh2b2lkKSBubV9uZXh0cGt0KHNjLT52c2Nfbm1kLCAodm9pZCAq KWR1bW15YnVmKTsKKwkJdnFfZW5kY2hhaW5zKHZxLCAxKTsKKwkJcmV0dXJuOworCX0KKworCWRv IHsKKwkJLyoKKwkJICogR2V0IGRlc2NyaXB0b3IgY2hhaW4uCisJCSAqLworCQluID0gdnFfZ2V0 Y2hhaW4odnEsICZpZHgsIGlvdiwgVlRORVRfTUFYU0VHUywgTlVMTCk7CisJCWFzc2VydChuID49 IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKKworCQkvKgorCQkgKiBHZXQgYSBwb2ludGVyIHRv IHRoZSByeCBoZWFkZXIsIGFuZCB1c2UgdGhlCisJCSAqIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93 aW5nIGl0IGZvciB0aGUgcGFja2V0IGJ1ZmZlci4KKwkJICovCisJCXZyeCA9IGlvdlswXS5pb3Zf YmFzZTsKKwkJcmlvdiA9IHJ4X2lvdl90cmltKGlvdiwgJm4sIHNjLT5yeF92aGRybGVuKTsKKwor CQlsZW4gPSBwY2lfdnRuZXRfbmV0bWFwX3JlYWR2KHNjLT52c2Nfbm1kLCByaW92LCBuKTsKKwor CQlpZiAobGVuID09IDApIHsKKwkJCS8qCisJCQkgKiBObyBtb3JlIHBhY2tldHMsIGJ1dCBzdGls bCBzb21lIGF2YWlsIHJpbmcKKwkJCSAqIGVudHJpZXMuICBJbnRlcnJ1cHQgaWYgbmVlZGVkL2Fw cHJvcHJpYXRlLgorCQkJICovCisJCQl2cV9yZXRjaGFpbih2cSk7CisJCQl2cV9lbmRjaGFpbnMo dnEsIDApOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogVGhlIG9ubHkgdmFsaWQgZmll bGQgaW4gdGhlIHJ4IHBhY2tldCBoZWFkZXIgaXMgdGhlCisJCSAqIG51bWJlciBvZiBidWZmZXJz IGlmIG1lcmdlZCByeCBidWZzIHdlcmUgbmVnb3RpYXRlZC4KKwkJICovCisJCW1lbXNldCh2cngs IDAsIHNjLT5yeF92aGRybGVuKTsKKworCQlpZiAoc2MtPnJ4X21lcmdlKSB7CisJCQlzdHJ1Y3Qg dmlydGlvX25ldF9yeGhkciAqdnJ4aDsKKworCQkJdnJ4aCA9IHZyeDsKKwkJCXZyeGgtPnZyaF9i dWZzID0gMTsKKwkJfQorCisJCS8qCisJCSAqIFJlbGVhc2UgdGhpcyBjaGFpbiBhbmQgaGFuZGxl IG1vcmUgY2hhaW5zLgorCQkgKi8KKwkJdnFfcmVsY2hhaW4odnEsIGlkeCwgbGVuICsgc2MtPnJ4 X3ZoZHJsZW4pOworCX0gd2hpbGUgKHZxX2hhc19kZXNjcyh2cSkpOworCisJLyogSW50ZXJydXB0 IGlmIG5lZWRlZCwgaW5jbHVkaW5nIGZvciBOT1RJRllfT05fRU1QVFkuICovCisJdnFfZW5kY2hh aW5zKHZxLCAxKTsKK30KKworc3RhdGljIHZvaWQKK3BjaV92dG5ldF9yeF9jYWxsYmFjayhpbnQg ZmQsIGVudW0gZXZfdHlwZSB0eXBlLCB2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0 X3NvZnRjICpzYyA9IHBhcmFtOworCisJcHRocmVhZF9tdXRleF9sb2NrKCZzYy0+cnhfbXR4KTsK KwlzYy0+cnhfaW5fcHJvZ3Jlc3MgPSAxOworCXNjLT5wY2lfdnRuZXRfcngoc2MpOworCXNjLT5y eF9pbl9wcm9ncmVzcyA9IDA7CisJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT5yeF9tdHgpOwor Cit9CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfcGluZ19yeHEodm9pZCAqdnNjLCBzdHJ1Y3Qg dnF1ZXVlX2luZm8gKnZxKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOwor CisJLyoKKwkgKiBBIHFub3RpZnkgbWVhbnMgdGhhdCB0aGUgcnggcHJvY2VzcyBjYW4gbm93IGJl Z2luCisJICovCisJaWYgKHNjLT52c2NfcnhfcmVhZHkgPT0gMCkgeworCQlzYy0+dnNjX3J4X3Jl YWR5ID0gMTsKKwkJdnEtPnZxX3VzZWQtPnZ1X2ZsYWdzIHw9IFZSSU5HX1VTRURfRl9OT19OT1RJ Rlk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcGNpX3Z0bmV0X3Byb2N0eChzdHJ1Y3QgcGNpX3Z0 bmV0X3NvZnRjICpzYywgc3RydWN0IHZxdWV1ZV9pbmZvICp2cSkKK3sKKwlzdHJ1Y3QgaW92ZWMg aW92W1ZUTkVUX01BWFNFR1MgKyAxXTsKKwlpbnQgaSwgbjsKKwlpbnQgcGxlbiwgdGxlbjsKKwl1 aW50MTZfdCBpZHg7CisKKwkvKgorCSAqIE9idGFpbiBjaGFpbiBvZiBkZXNjcmlwdG9ycy4gIFRo ZSBmaXJzdCBvbmUgaXMKKwkgKiByZWFsbHkgdGhlIGhlYWRlciBkZXNjcmlwdG9yLCBzbyB3ZSBu ZWVkIHRvIHN1bQorCSAqIHVwIHR3byBsZW5ndGhzOiBwYWNrZXQgbGVuZ3RoIGFuZCB0cmFuc2Zl ciBsZW5ndGguCisJICovCisJbiA9IHZxX2dldGNoYWluKHZxLCAmaWR4LCBpb3YsIFZUTkVUX01B WFNFR1MsIE5VTEwpOworCWFzc2VydChuID49IDEgJiYgbiA8PSBWVE5FVF9NQVhTRUdTKTsKKwlw bGVuID0gMDsKKwl0bGVuID0gaW92WzBdLmlvdl9sZW47CisJZm9yIChpID0gMTsgaSA8IG47IGkr KykgeworCQlwbGVuICs9IGlvdltpXS5pb3ZfbGVuOworCQl0bGVuICs9IGlvdltpXS5pb3ZfbGVu OworCX0KKworCURQUklOVEYoKCJ2aXJ0aW86IHBhY2tldCBzZW5kLCAlZCBieXRlcywgJWQgc2Vn c1xuXHIiLCBwbGVuLCBuKSk7CisJc2MtPnBjaV92dG5ldF90eChzYywgJmlvdlsxXSwgbiAtIDEs IHBsZW4pOworCisJLyogY2hhaW4gaXMgcHJvY2Vzc2VkLCByZWxlYXNlIGl0IGFuZCBzZXQgdGxl biAqLworCXZxX3JlbGNoYWluKHZxLCBpZHgsIHRsZW4pOworfQorCitzdGF0aWMgdm9pZAorcGNp X3Z0bmV0X3BpbmdfdHhxKHZvaWQgKnZzYywgc3RydWN0IHZxdWV1ZV9pbmZvICp2cSkKK3sKKwlz dHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKworCS8qCisJICogQW55IHJpbmcgZW50 cmllcyB0byBwcm9jZXNzPworCSAqLworCWlmICghdnFfaGFzX2Rlc2NzKHZxKSkKKwkJcmV0dXJu OworCisJLyogU2lnbmFsIHRoZSB0eCB0aHJlYWQgZm9yIHByb2Nlc3NpbmcgKi8KKwlwdGhyZWFk X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCXZxLT52cV91c2VkLT52dV9mbGFncyB8PSBWUklO R19VU0VEX0ZfTk9fTk9USUZZOworCWlmIChzYy0+dHhfaW5fcHJvZ3Jlc3MgPT0gMCkKKwkJcHRo cmVhZF9jb25kX3NpZ25hbCgmc2MtPnR4X2NvbmQpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZz Yy0+dHhfbXR4KTsKK30KKworLyoKKyAqIFRocmVhZCB3aGljaCB3aWxsIGhhbmRsZSBwcm9jZXNz aW5nIG9mIFRYIGRlc2MKKyAqLworc3RhdGljIHZvaWQgKgorcGNpX3Z0bmV0X3R4X3RocmVhZCh2 b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHBhcmFtOworCXN0 cnVjdCB2cXVldWVfaW5mbyAqdnE7CisJaW50IGVycm9yOworCisJdnEgPSAmc2MtPnZzY19xdWV1 ZXNbVlRORVRfVFhRXTsKKworCS8qCisJICogTGV0IHVzIHdhaXQgdGlsbCB0aGUgdHggcXVldWUg cG9pbnRlcnMgZ2V0IGluaXRpYWxpc2VkICYKKwkgKiBmaXJzdCB0eCBzaWduYWxlZAorCSAqLwor CXB0aHJlYWRfbXV0ZXhfbG9jaygmc2MtPnR4X210eCk7CisJZXJyb3IgPSBwdGhyZWFkX2NvbmRf d2FpdCgmc2MtPnR4X2NvbmQsICZzYy0+dHhfbXR4KTsKKwlhc3NlcnQoZXJyb3IgPT0gMCk7CisK Kwlmb3IgKDs7KSB7CisJCS8qIG5vdGUgLSB0eCBtdXRleCBpcyBsb2NrZWQgaGVyZSAqLworCQl3 aGlsZSAoc2MtPnJlc2V0dGluZyB8fCAhdnFfaGFzX2Rlc2NzKHZxKSkgeworCQkJdnEtPnZxX3Vz ZWQtPnZ1X2ZsYWdzICY9IH5WUklOR19VU0VEX0ZfTk9fTk9USUZZOworCQkJbWIoKTsKKwkJCWlm ICghc2MtPnJlc2V0dGluZyAmJiB2cV9oYXNfZGVzY3ModnEpKQorCQkJCWJyZWFrOworCisJCQlz Yy0+dHhfaW5fcHJvZ3Jlc3MgPSAwOworCQkJZXJyb3IgPSBwdGhyZWFkX2NvbmRfd2FpdCgmc2Mt PnR4X2NvbmQsICZzYy0+dHhfbXR4KTsKKwkJCWFzc2VydChlcnJvciA9PSAwKTsKKwkJfQorCQl2 cS0+dnFfdXNlZC0+dnVfZmxhZ3MgfD0gVlJJTkdfVVNFRF9GX05PX05PVElGWTsKKwkJc2MtPnR4 X2luX3Byb2dyZXNzID0gMTsKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNjLT50eF9tdHgpOwor CisJCWRvIHsKKwkJCS8qCisJCQkgKiBSdW4gdGhyb3VnaCBlbnRyaWVzLCBwbGFjaW5nIHRoZW0g aW50bworCQkJICogaW92ZWNzIGFuZCBzZW5kaW5nIHdoZW4gYW4gZW5kLW9mLXBhY2tldAorCQkJ ICogaXMgZm91bmQKKwkJCSAqLworCQkJcGNpX3Z0bmV0X3Byb2N0eChzYywgdnEpOworCQl9IHdo aWxlICh2cV9oYXNfZGVzY3ModnEpKTsKKworCQkvKgorCQkgKiBHZW5lcmF0ZSBhbiBpbnRlcnJ1 cHQgaWYgbmVlZGVkLgorCQkgKi8KKwkJdnFfZW5kY2hhaW5zKHZxLCAxKTsKKworCQlwdGhyZWFk X211dGV4X2xvY2soJnNjLT50eF9tdHgpOworCX0KK30KKworI2lmZGVmIG5vdHlldAorc3RhdGlj IHZvaWQKK3BjaV92dG5ldF9waW5nX2N0bHEodm9pZCAqdnNjLCBzdHJ1Y3QgdnF1ZXVlX2luZm8g KnZxKQoreworCisJRFBSSU5URigoInZ0bmV0OiBjb250cm9sIHFub3RpZnkhXG5cciIpKTsKK30K KyNlbmRpZgorCitzdGF0aWMgaW50CitwY2lfdnRuZXRfcGFyc2VtYWMoY2hhciAqbWFjX3N0ciwg dWludDhfdCAqbWFjX2FkZHIpCit7CisgICAgICAgIHN0cnVjdCBldGhlcl9hZGRyICplYTsKKyAg ICAgICAgY2hhciAqdG1wc3RyOworICAgICAgICBjaGFyIHplcm9fYWRkcltFVEhFUl9BRERSX0xF Tl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAgICAgICB0bXBzdHIgPSBzdHJzZXAoJm1h Y19zdHIsIj0iKTsKKyAgICAgICAKKyAgICAgICAgaWYgKChtYWNfc3RyICE9IE5VTEwpICYmICgh c3RyY21wKHRtcHN0ciwibWFjIikpKSB7CisgICAgICAgICAgICAgICAgZWEgPSBldGhlcl9hdG9u KG1hY19zdHIpOworCisgICAgICAgICAgICAgICAgaWYgKGVhID09IE5VTEwgfHwgRVRIRVJfSVNf TVVMVElDQVNUKGVhLT5vY3RldCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbWVtY21wKGVhLT5v Y3RldCwgemVyb19hZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkgeworCQkJZnByaW50ZihzdGRl cnIsICJJbnZhbGlkIE1BQyAlc1xuIiwgbWFjX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg ICAgICAgICAgICBtZW1jcHkobWFjX2FkZHIsIGVhLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOwor ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3BjaV92 dG5ldF90YXBfc2V0dXAoc3RydWN0IHBjaV92dG5ldF9zb2Z0YyAqc2MsIGNoYXIgKmRldm5hbWUp Cit7CisJY2hhciB0YnVmWzgwXTsKKworCXN0cmNweSh0YnVmLCAiL2Rldi8iKTsKKwlzdHJsY2F0 KHRidWYsIGRldm5hbWUsIHNpemVvZih0YnVmKSk7CisKKwlzYy0+cGNpX3Z0bmV0X3J4ID0gcGNp X3Z0bmV0X3RhcF9yeDsKKwlzYy0+cGNpX3Z0bmV0X3R4ID0gcGNpX3Z0bmV0X3RhcF90eDsKKwor CXNjLT52c2NfdGFwZmQgPSBvcGVuKHRidWYsIE9fUkRXUik7CisJaWYgKHNjLT52c2NfdGFwZmQg PT0gLTEpIHsKKwkJV1BSSU5URigoIm9wZW4gb2YgdGFwIGRldmljZSAlcyBmYWlsZWRcbiIsIHRi dWYpKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2V0IG5vbi1ibG9ja2luZyBhbmQgcmVn aXN0ZXIgZm9yIHJlYWQKKwkgKiBub3RpZmljYXRpb25zIHdpdGggdGhlIGV2ZW50IGxvb3AKKwkg Ki8KKwlpbnQgb3B0ID0gMTsKKwlpZiAoaW9jdGwoc2MtPnZzY190YXBmZCwgRklPTkJJTywgJm9w dCkgPCAwKSB7CisJCVdQUklOVEYoKCJ0YXAgZGV2aWNlIE9fTk9OQkxPQ0sgZmFpbGVkXG4iKSk7 CisJCWNsb3NlKHNjLT52c2NfdGFwZmQpOworCQlzYy0+dnNjX3RhcGZkID0gLTE7CisJfQorCisJ c2MtPnZzY19tZXZwID0gbWV2ZW50X2FkZChzYy0+dnNjX3RhcGZkLAorCQkJCSAgRVZGX1JFQUQs CisJCQkJICBwY2lfdnRuZXRfcnhfY2FsbGJhY2ssCisJCQkJICBzYyk7CisJaWYgKHNjLT52c2Nf bWV2cCA9PSBOVUxMKSB7CisJCVdQUklOVEYoKCJDb3VsZCBub3QgcmVnaXN0ZXIgZXZlbnRcbiIp KTsKKwkJY2xvc2Uoc2MtPnZzY190YXBmZCk7CisJCXNjLT52c2NfdGFwZmQgPSAtMTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkCitwY2lfdnRuZXRfbmV0bWFwX3NldHVwKHN0cnVjdCBwY2lfdnRuZXRf c29mdGMgKnNjLCBjaGFyICppZm5hbWUpCit7CisJc2MtPnBjaV92dG5ldF9yeCA9IHBjaV92dG5l dF9uZXRtYXBfcng7CisJc2MtPnBjaV92dG5ldF90eCA9IHBjaV92dG5ldF9uZXRtYXBfdHg7CisK KwlzYy0+dnNjX25tZCA9IG5tX29wZW4oaWZuYW1lLCBOVUxMLCAwLCAwKTsKKwlpZiAoc2MtPnZz Y19ubWQgPT0gTlVMTCkgeworCQlXUFJJTlRGKCgib3BlbiBvZiBuZXRtYXAgZGV2aWNlICVzIGZh aWxlZFxuIiwgaWZuYW1lKSk7CisJCXJldHVybjsKKwl9CisKKwlzYy0+dnNjX21ldnAgPSBtZXZl bnRfYWRkKHNjLT52c2Nfbm1kLT5mZCwKKwkJCQkgIEVWRl9SRUFELAorCQkJCSAgcGNpX3Z0bmV0 X3J4X2NhbGxiYWNrLAorCQkJCSAgc2MpOworCWlmIChzYy0+dnNjX21ldnAgPT0gTlVMTCkgewor CQlXUFJJTlRGKCgiQ291bGQgbm90IHJlZ2lzdGVyIGV2ZW50XG4iKSk7CisJCW5tX2Nsb3NlKHNj LT52c2Nfbm1kKTsKKwkJc2MtPnZzY19ubWQgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludAor cGNpX3Z0bmV0X2luaXQoc3RydWN0IHZtY3R4ICpjdHgsIHN0cnVjdCBwY2lfZGV2aW5zdCAqcGks IGNoYXIgKm9wdHMpCit7CisJTUQ1X0NUWCBtZGN0eDsKKwl1bnNpZ25lZCBjaGFyIGRpZ2VzdFsx Nl07CisJY2hhciBuc3RyWzgwXTsKKwljaGFyIHRuYW1lW01BWENPTUxFTiArIDFdOworCXN0cnVj dCBwY2lfdnRuZXRfc29mdGMgKnNjOworCWNoYXIgKmRldm5hbWU7CisJY2hhciAqdnRvcHRzOwor CWludCBtYWNfcHJvdmlkZWQ7CisKKwlzYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBjaV92 dG5ldF9zb2Z0YykpOworCisJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+dnNjX210eCwgTlVMTCk7 CisKKwl2aV9zb2Z0Y19saW5rdXAoJnNjLT52c2NfdnMsICZ2dG5ldF92aV9jb25zdHMsIHNjLCBw aSwgc2MtPnZzY19xdWV1ZXMpOworCXNjLT52c2NfdnMudnNfbXR4ID0gJnNjLT52c2NfbXR4Owor CisJc2MtPnZzY19xdWV1ZXNbVlRORVRfUlhRXS52cV9xc2l6ZSA9IFZUTkVUX1JJTkdTWjsKKwlz Yy0+dnNjX3F1ZXVlc1tWVE5FVF9SWFFdLnZxX25vdGlmeSA9IHBjaV92dG5ldF9waW5nX3J4cTsK KwlzYy0+dnNjX3F1ZXVlc1tWVE5FVF9UWFFdLnZxX3FzaXplID0gVlRORVRfUklOR1NaOworCXNj LT52c2NfcXVldWVzW1ZUTkVUX1RYUV0udnFfbm90aWZ5ID0gcGNpX3Z0bmV0X3BpbmdfdHhxOwor I2lmZGVmIG5vdHlldAorCXNjLT52c2NfcXVldWVzW1ZUTkVUX0NUTFFdLnZxX3FzaXplID0gVlRO RVRfUklOR1NaOworICAgICAgICBzYy0+dnNjX3F1ZXVlc1tWVE5FVF9DVExRXS52cV9ub3RpZnkg PSBwY2lfdnRuZXRfcGluZ19jdGxxOworI2VuZGlmCisgCisJLyoKKwkgKiBBdHRlbXB0IHRvIG9w ZW4gdGhlIHRhcCBkZXZpY2UgYW5kIHJlYWQgdGhlIE1BQyBhZGRyZXNzCisJICogaWYgc3BlY2lm aWVkCisJICovCisJbWFjX3Byb3ZpZGVkID0gMDsKKwlzYy0+dnNjX3RhcGZkID0gLTE7CisJc2Mt PnZzY19ubWQgPSBOVUxMOworCWlmIChvcHRzICE9IE5VTEwpIHsKKwkJaW50IGVycjsKKworCQlk ZXZuYW1lID0gdnRvcHRzID0gc3RyZHVwKG9wdHMpOworCQkodm9pZCkgc3Ryc2VwKCZ2dG9wdHMs ICIsIik7CisKKwkJaWYgKHZ0b3B0cyAhPSBOVUxMKSB7CisJCQllcnIgPSBwY2lfdnRuZXRfcGFy c2VtYWModnRvcHRzLCBzYy0+dnNjX2NvbmZpZy5tYWMpOworCQkJaWYgKGVyciAhPSAwKSB7CisJ CQkJZnJlZShkZXZuYW1lKTsKKwkJCQlyZXR1cm4gKGVycik7CisJCQl9CisJCQltYWNfcHJvdmlk ZWQgPSAxOworCQl9CisKKwkJaWYgKHN0cm5jbXAoZGV2bmFtZSwgInZhbGUiLCA0KSA9PSAwKQor CQkJcGNpX3Z0bmV0X25ldG1hcF9zZXR1cChzYywgZGV2bmFtZSk7CisJCWlmIChzdHJuY21wKGRl dm5hbWUsICJ0YXAiLCAzKSA9PSAwIHx8CisJCSAgICBzdHJuY21wKGRldm5hbWUsICJ2bW5ldCIs IDUpID09IDApCisJCQlwY2lfdnRuZXRfdGFwX3NldHVwKHNjLCBkZXZuYW1lKTsKKworCQlmcmVl KGRldm5hbWUpOworCX0KKworCS8qCisJICogVGhlIGRlZmF1bHQgTUFDIGFkZHJlc3MgaXMgdGhl IHN0YW5kYXJkIE5ldEFwcCBPVUkgb2YgMDAtYTAtOTgsCisJICogZm9sbG93ZWQgYnkgYW4gTUQ1 IG9mIHRoZSBQQ0kgc2xvdC9mdW5jIG51bWJlciBhbmQgZGV2IG5hbWUKKwkgKi8KKwlpZiAoIW1h Y19wcm92aWRlZCkgeworCQlzbnByaW50Zihuc3RyLCBzaXplb2YobnN0ciksICIlZC0lZC0lcyIs IHBpLT5waV9zbG90LAorCQkgICAgcGktPnBpX2Z1bmMsIHZtbmFtZSk7CisKKwkJTUQ1SW5pdCgm bWRjdHgpOworCQlNRDVVcGRhdGUoJm1kY3R4LCBuc3RyLCBzdHJsZW4obnN0cikpOworCQlNRDVG aW5hbChkaWdlc3QsICZtZGN0eCk7CisKKwkJc2MtPnZzY19jb25maWcubWFjWzBdID0gMHgwMDsK KwkJc2MtPnZzY19jb25maWcubWFjWzFdID0gMHhhMDsKKwkJc2MtPnZzY19jb25maWcubWFjWzJd ID0gMHg5ODsKKwkJc2MtPnZzY19jb25maWcubWFjWzNdID0gZGlnZXN0WzBdOworCQlzYy0+dnNj X2NvbmZpZy5tYWNbNF0gPSBkaWdlc3RbMV07CisJCXNjLT52c2NfY29uZmlnLm1hY1s1XSA9IGRp Z2VzdFsyXTsKKwl9CisKKwkvKiBpbml0aWFsaXplIGNvbmZpZyBzcGFjZSAqLworCXBjaV9zZXRf Y2ZnZGF0YTE2KHBpLCBQQ0lSX0RFVklDRSwgVklSVElPX0RFVl9ORVQpOworCXBjaV9zZXRfY2Zn ZGF0YTE2KHBpLCBQQ0lSX1ZFTkRPUiwgVklSVElPX1ZFTkRPUik7CisJcGNpX3NldF9jZmdkYXRh OChwaSwgUENJUl9DTEFTUywgUENJQ19ORVRXT1JLKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwg UENJUl9TVUJERVZfMCwgVklSVElPX1RZUEVfTkVUKTsKKwlwY2lfc2V0X2NmZ2RhdGExNihwaSwg UENJUl9TVUJWRU5EXzAsIFZJUlRJT19WRU5ET1IpOworCisJLyogTGluayBpcyB1cCBpZiB3ZSBt YW5hZ2VkIHRvIG9wZW4gdGFwIGRldmljZSBvciB2YWxlIHBvcnQuICovCisJc2MtPnZzY19jb25m aWcuc3RhdHVzID0gKG9wdHMgPT0gTlVMTCB8fCBzYy0+dnNjX3RhcGZkID49IDAgfHwKKwkgICAg c2MtPnZzY19ubWQgIT0gTlVMTCk7CisJCisJLyogdXNlIEJBUiAxIHRvIG1hcCBNU0ktWCB0YWJs ZSBhbmQgUEJBLCBpZiB3ZSdyZSB1c2luZyBNU0ktWCAqLworCWlmICh2aV9pbnRyX2luaXQoJnNj LT52c2NfdnMsIDEsIGZic2RydW5fdmlydGlvX21zaXgoKSkpCisJCXJldHVybiAoMSk7CisKKwkv KiB1c2UgQkFSIDAgdG8gbWFwIGNvbmZpZyByZWdzIGluIElPIHNwYWNlICovCisJdmlfc2V0X2lv X2Jhcigmc2MtPnZzY192cywgMCk7CisKKwlzYy0+cmVzZXR0aW5nID0gMDsKKworCXNjLT5yeF9t ZXJnZSA9IDE7CisJc2MtPnJ4X3ZoZHJsZW4gPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfcnho ZHIpOworCXNjLT5yeF9pbl9wcm9ncmVzcyA9IDA7CisJcHRocmVhZF9tdXRleF9pbml0KCZzYy0+ cnhfbXR4LCBOVUxMKTsgCisKKwkvKiAKKwkgKiBJbml0aWFsaXplIHR4IHNlbWFwaG9yZSAmIHNw YXduIFRYIHByb2Nlc3NpbmcgdGhyZWFkLgorCSAqIEFzIG9mIG5vdywgb25seSBvbmUgdGhyZWFk IGZvciBUWCBkZXNjIHByb2Nlc3NpbmcgaXMKKwkgKiBzcGF3bmVkLiAKKwkgKi8KKwlzYy0+dHhf aW5fcHJvZ3Jlc3MgPSAwOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2MtPnR4X210eCwgTlVMTCk7 CisJcHRocmVhZF9jb25kX2luaXQoJnNjLT50eF9jb25kLCBOVUxMKTsKKwlwdGhyZWFkX2NyZWF0 ZSgmc2MtPnR4X3RpZCwgTlVMTCwgcGNpX3Z0bmV0X3R4X3RocmVhZCwgKHZvaWQgKilzYyk7CisJ c25wcmludGYodG5hbWUsIHNpemVvZih0bmFtZSksICJ2dG5ldC0lZDolZCB0eCIsIHBpLT5waV9z bG90LAorCSAgICBwaS0+cGlfZnVuYyk7CisgICAgICAgIHB0aHJlYWRfc2V0X25hbWVfbnAoc2Mt PnR4X3RpZCwgdG5hbWUpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcGNpX3Z0 bmV0X2NmZ3dyaXRlKHZvaWQgKnZzYywgaW50IG9mZnNldCwgaW50IHNpemUsIHVpbnQzMl90IHZh bHVlKQoreworCXN0cnVjdCBwY2lfdnRuZXRfc29mdGMgKnNjID0gdnNjOworCXZvaWQgKnB0cjsK KworCWlmIChvZmZzZXQgPCA2KSB7CisJCWFzc2VydChvZmZzZXQgKyBzaXplIDw9IDYpOworCQkv KgorCQkgKiBUaGUgZHJpdmVyIGlzIGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBNQUMgYWRkcmVzcwor CQkgKi8KKwkJcHRyID0gJnNjLT52c2NfY29uZmlnLm1hY1tvZmZzZXRdOworCQltZW1jcHkocHRy LCAmdmFsdWUsIHNpemUpOworCX0gZWxzZSB7CisJCS8qIHNpbGVudGx5IGlnbm9yZSBvdGhlciB3 cml0ZXMgKi8KKwkJRFBSSU5URigoInZ0bmV0OiB3cml0ZSB0byByZWFkb25seSByZWcgJWRcblxy Iiwgb2Zmc2V0KSk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorcGNpX3Z0 bmV0X2NmZ3JlYWQodm9pZCAqdnNjLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdWludDMyX3QgKnJl dHZhbCkKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKwl2b2lkICpwdHI7 CisKKwlwdHIgPSAodWludDhfdCAqKSZzYy0+dnNjX2NvbmZpZyArIG9mZnNldDsKKwltZW1jcHko cmV0dmFsLCBwdHIsIHNpemUpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitwY2lf dnRuZXRfbmVnX2ZlYXR1cmVzKHZvaWQgKnZzYywgdWludDY0X3QgbmVnb3RpYXRlZF9mZWF0dXJl cykKK3sKKwlzdHJ1Y3QgcGNpX3Z0bmV0X3NvZnRjICpzYyA9IHZzYzsKKworCXNjLT52c2NfZmVh dHVyZXMgPSBuZWdvdGlhdGVkX2ZlYXR1cmVzOworCisJaWYgKCEoc2MtPnZzY19mZWF0dXJlcyAm IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpKSB7CisJCXNjLT5yeF9tZXJnZSA9IDA7CisJCS8qIG5v bi1tZXJnZSByeCBoZWFkZXIgaXMgMiBieXRlcyBzaG9ydGVyICovCisJCXNjLT5yeF92aGRybGVu IC09IDI7CisJfQorfQorCitzdHJ1Y3QgcGNpX2RldmVtdSBwY2lfZGVfdm5ldCA9IHsKKwkucGVf ZW11ID0gCSJ2aXJ0aW8tbmV0IiwKKwkucGVfaW5pdCA9CXBjaV92dG5ldF9pbml0LAorCS5wZV9i YXJ3cml0ZSA9CXZpX3BjaV93cml0ZSwKKwkucGVfYmFycmVhZCA9CXZpX3BjaV9yZWFkCit9Owor UENJX0VNVUxfU0VUKHBjaV9kZV92bmV0KTsK --_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_ Content-Type: text/plain; name="test_results.txt" Content-Description: test_results.txt Content-Disposition: attachment; filename="test_results.txt"; size=5125; creation-date="Fri, 02 Dec 2016 14:17:58 GMT"; modification-date="Fri, 02 Dec 2016 14:17:58 GMT" Content-Transfer-Encoding: base64 VEFQOgoKMzc1Ljc0ODcxOCBtYWluX3RocmVhZCBbMjMyNV0gNjcuNTIyIEtwcHMgKDY3Ljg1OSBL cGt0cyAzMi41NzIgTWJwcyBpbiAxMDA0OTg2IHVzZWMpIDI1My4yMSBhdmdfYmF0Y2ggOTk5OTkg bWluX3NwYWNlCjM3Ni43NTE3MzYgbWFpbl90aHJlYWQgWzIzMjVdIDY2LjQ4NCBLcHBzICg2Ni42 ODUgS3BrdHMgMzIuMDA5IE1icHMgaW4gMTAwMzAxNyB1c2VjKSAyNDguODIgYXZnX2JhdGNoIDk5 OTk5IG1pbl9zcGFjZQozNzcuNzYxNTMzIG1haW5fdGhyZWFkIFsyMzI1XSA2NS4wNDMgS3BwcyAo NjUuNjgwIEtwa3RzIDMxLjUyNiBNYnBzIGluIDEwMDk3OTcgdXNlYykgMjUyLjYyIGF2Z19iYXRj aCA5OTk5OSBtaW5fc3BhY2UKMzc4Ljc2NjczOCBtYWluX3RocmVhZCBbMjMyNV0gNjUuMzI5IEtw cHMgKDY1LjY2OSBLcGt0cyAzMS41MjEgTWJwcyBpbiAxMDA1MjA2IHVzZWMpIDI1Ny41MyBhdmdf YmF0Y2ggOTk5OTkgbWluX3NwYWNlCjM3OS43ODAzOTggbWFpbl90aHJlYWQgWzIzMjVdIDY4LjAw NiBLcHBzICg2OC45MzUgS3BrdHMgMzMuMDg5IE1icHMgaW4gMTAxMzY2MCB1c2VjKSAyNTMuNDQg YXZnX2JhdGNoIDk5OTk5IG1pbl9zcGFjZQozODAuNzg1NzMzIG1haW5fdGhyZWFkIFsyMzI1XSA2 NC4yNjIgS3BwcyAoNjQuNjA1IEtwa3RzIDMxLjAxMCBNYnBzIGluIDEwMDUzMzUgdXNlYykgMjUx LjM4IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMzgxLjc5MjM2MCBtYWluX3RocmVhZCBbMjMy NV0gNjcuMjkwIEtwcHMgKDY3LjczNiBLcGt0cyAzMi41MTMgTWJwcyBpbgoKCgoKTkVUTUFQIHdp dGggVmFsZSBWTTEgKFRYKTogCjA1Mi4xMjI3NDUgbWFpbl90aHJlYWQgWzIzMjVdIDEyMS42MTcg S3BwcyAoMTIxLjczNSBLcGt0cyA1OC40MzMgTWJwcyBpbiAxMDAwOTczIHVzZWMpIDIwOS44OSBh dmdfYmF0Y2ggMCBtaW5fc3BhY2UKMDUzLjIzNDc4OCBtYWluX3RocmVhZCBbMjMyNV0gMTQ0LjE3 OCBLcHBzICgxNjAuMzMyIEtwa3RzIDc2Ljk1OSBNYnBzIGluIDExMTIwNDMgdXNlYykgMjE0LjYz IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU0LjIzOTc1MSBtYWluX3RocmVhZCBbMjMyNV0g MTM5LjA3MiBLcHBzICgxMzkuNzYyIEtwa3RzIDY3LjA4NiBNYnBzIGluIDEwMDQ5NjIgdXNlYykg MjE1LjY4IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU1LjI0OTc5NCBtYWluX3RocmVhZCBb MjMyNV0gMTUyLjg4OCBLcHBzICgxNTQuNDI0IEtwa3RzIDc0LjEyNCBNYnBzIGluIDEwMTAwNDQg dXNlYykgMjEwLjY3IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU2LjI2MDc5OSBtYWluX3Ro cmVhZCBbMjMyNV0gMTQyLjU2NiBLcHBzICgxNDQuMTM1IEtwa3RzIDY5LjE4NSBNYnBzIGluIDEw MTEwMDUgdXNlYykgMjE0LjgxIGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU3LjI2NTIyNSBt YWluX3RocmVhZCBbMjMyNV0gMTQzLjU3NSBLcHBzICgxNDQuMjEwIEtwa3RzIDY5LjIyMSBNYnBz IGluIDEwMDQ0MjYgdXNlYykgMjE1LjU2IGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UKMDU4LjI3 MzQ2OCBtYWluX3RocmVhZCBbMjMyNV0gMTU0LjkxMiBLcHBzICgxNTYuMTg5IEtwa3RzIDc0Ljk3 MSBNYnBzIGluIDEwMDgyNDIgdXNlYykgMjA5LjkzIGF2Z19iYXRjaCA5OTk5OSBtaW5fc3BhY2UK MDU5LjI3ODc5NSBtYWluX3RocmVhZCBbMjMyNV0gMTQxLjcyMiBLcHBzICgxNDIuNDc3IEtwa3Rz IDY4LjM4OSBNYnBzIGluIDEwMDUzMjggdXNlYykgMjE3Ljg1IGF2Z19iYXRjaCA5OTk5OSBtaW5f c3BhY2UKMDYwLjM0MDY5OSBtYWluX3RocmVhZCBbMjMyNV0gMTQ1Ljg3MSBLcHBzICgxNTQuOTAx IEtwa3RzIDc0LjM1MiBNYnBzIGluIDEwNjE5MDQgdXNlYykgMjE1LjE0IGF2Z19iYXRjaCA5OTk5 OSBtaW5fc3BhY2UKMDYxLjM0NTc0OCBtYWluX3RocmVhZCBbMjMyNV0gMTQ0LjIyMSBLcHBzICgx NDQuOTQ5IEtwa3RzIDY5LjU3NiBNYnBzIGluIDEwMDUwNDggdXNlYykgMjA5LjE2IGF2Z19iYXRj aCA5OTk5OSBtaW5fc3BhY2UKCgpORVRNQVAgd2l0aCBWYWxlIFZNMihSWCk6CjA1NC45Njg1NzQg bWFpbl90aHJlYWQgWzIzMjVdIDQ5Ljk1MiBLcHBzICg1NC4zNjIgS3BrdHMgMjYuMDk0IE1icHMg aW4gMTA4ODI5MCB1c2VjKSA3NC42NyBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDU2LjAxNzQyNiBt YWluX3RocmVhZCBbMjMyNV0gNjQuMjkwIEtwcHMgKDY3LjQzMSBLcGt0cyAzMi4zNjcgTWJwcyBp biAxMDQ4ODUyIHVzZWMpIDEzMi4yMiBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDU3LjAyMTAzNiBt YWluX3RocmVhZCBbMjMyNV0gOTMuNDA1IEtwcHMgKDkzLjc0MiBLcGt0cyA0NC45OTYgTWJwcyBp biAxMDAzNjEwIHVzZWMpIDY4LjYzIGF2Z19iYXRjaCAxIG1pbl9zcGFjZQowNTguMDMyNjUwIG1h aW5fdGhyZWFkIFsyMzI1XSA4MS4wNTggS3BwcyAoODEuOTk5IEtwa3RzIDM5LjM2MCBNYnBzIGlu IDEwMTE2MTQgdXNlYykgODAuMzkgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA1OS4wNTkxNzYgbWFp bl90aHJlYWQgWzIzMjVdIDg1LjgxNiBLcHBzICg4OC4wOTIgS3BrdHMgNDIuMjg0IE1icHMgaW4g MTAyNjUyNiB1c2VjKSA3My44NCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYwLjA3ODU2MyBtYWlu X3RocmVhZCBbMjMyNV0gNjYuOTU5IEtwcHMgKDY4LjA5NiBLcGt0cyAzMi42ODYgTWJwcyBpbiAx MDE2OTg1IHVzZWMpIDUxMi4wMCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYxLjA4ODczOCBtYWlu X3RocmVhZCBbMjMyNV0gNzkuOTExIEtwcHMgKDgwLjkxNiBLcGt0cyAzOC44NDAgTWJwcyBpbiAx MDEyNTc2IHVzZWMpIDEzNy4xNSBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKMDYyLjEwNDUwNSBtYWlu X3RocmVhZCBbMjMyNV0gOTAuODE0IEtwcHMgKDkyLjAwNyBLcGt0cyA0NC4xNjMgTWJwcyBpbiAx MDEzMTM4IHVzZWMpIDczLjIwIGF2Z19iYXRjaCAxIG1pbl9zcGFjZQowNjMuMTE1NDMzIG1haW5f dGhyZWFkIFsyMzI1XSA4Ni4yMzMgS3BwcyAoODcuNDAyIEtwa3RzIDQxLjk1MyBNYnBzIGluIDEw MTM1NTggdXNlYykgOTQuMjggYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2NC4xMzQ0OTcgbWFpbl90 aHJlYWQgWzIzMjVdIDg2LjM1MSBLcHBzICg4Ny45OTcgS3BrdHMgNDIuMjM5IE1icHMgaW4gMTAx OTA2MiB1c2VjKSA0MTMuMTMgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2NS4xNDg5ODMgbWFpbl90 aHJlYWQgWzIzMjVdIDY5LjQ4MyBLcHBzICg3MC4zOTAgS3BrdHMgMzMuNzg3IE1icHMgaW4gMTAx MzA1NyB1c2VjKSAxODYuMjIgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2Ni4xNzI1NTUgbWFpbl90 aHJlYWQgWzIzMjVdIDkxLjM0NyBLcHBzICg5My41NzMgS3BrdHMgNDQuOTE1IE1icHMgaW4gMTAy NDM2NSB1c2VjKSAxMjUuNjAgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2Ny4xOTA2OTkgbWFpbl90 aHJlYWQgWzIzMjVdIDc5LjI4MCBLcHBzICg4MC43NjkgS3BrdHMgMzguNzY5IE1icHMgaW4gMTAx ODc4MiB1c2VjKSAxMTQuNTcgYXZnX2JhdGNoIDEgbWluX3NwYWNlCjA2OC4yMDkwNTggbWFpbl90 aHJlYWQgWzIzMjVdIDEwNy4xMDAgS3BwcyAoMTA5LjA2NiBLcGt0cyA1Mi4zNTIgTWJwcyBpbiAx MDE4MzU4IHVzZWMpIDMzLjI0IGF2Z19iYXRjaCAxIG1pbl9zcGFjZQoKCgpQVE5FVChWTTEgVFgp OgoKOTIwLjcwNzkwMCBtYWluX3RocmVhZCBbMjMyNV0gNy4yMTYgTXBwcyAoNy4yMzggTXBrdHMg NC4xNjkgR2JwcyBpbiAxMDAzMDQzIHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkgbWluX3Nw YWNlCjkyMS43MDk4OTAgbWFpbl90aHJlYWQgWzIzMjVdIDcuMTE0IE1wcHMgKDcuMTI4IE1wa3Rz IDQuMTA2IEdicHMgaW4gMTAwMTk4OSB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5IG1pbl9z cGFjZQo5MjIuNzEyODY1IG1haW5fdGhyZWFkIFsyMzI1XSA3LjI3NyBNcHBzICg3LjI5OSBNcGt0 cyA0LjIwNCBHYnBzIGluIDEwMDI5NzUgdXNlYykgNTExLjUwIGF2Z19iYXRjaCA5OTk5OSBtaW5f c3BhY2UKOTIzLjcxNTc4MyBtYWluX3RocmVhZCBbMjMyNV0gNS45ODAgTXBwcyAoNS45OTcgTXBr dHMgMy40NTQgR2JwcyBpbiAxMDAyOTE4IHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkgbWlu X3NwYWNlCjkyNC43MTc5MjYgbWFpbl90aHJlYWQgWzIzMjVdIDcuMjU3IE1wcHMgKDcuMjczIE1w a3RzIDQuMTg5IEdicHMgaW4gMTAwMjE0MyB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5IG1p bl9zcGFjZQo5MjYuNzM4NTcyIG1haW5fdGhyZWFkIFsyMzI1XSA3LjM2NSBNcHBzICgxNC44ODMg TXBrdHMgOC41NzIgR2JwcyBpbiAyMDIwNjQ2IHVzZWMpIDUxMS41MCBhdmdfYmF0Y2ggOTk5OTkg bWluX3NwYWNlCjkyNy43MzkzMjEgbWFpbl90aHJlYWQgWzIzMjVdIDYuMTk2IE1wcHMgKDYuMjAw IE1wa3RzIDMuNTcxIEdicHMgaW4gMTAwMDc0OSB1c2VjKSA1MTEuNTAgYXZnX2JhdGNoIDk5OTk5 IG1pbl9zcGFjZQoKCgpQVE5FVChWTTIgUlgpOgoKOTI3Ljc2MTA0MiBtYWluX3RocmVhZCBbMjMy NV0gNi4xNjMgTXBwcyAoNi4xOTYgTXBrdHMgMy41NjkgR2JwcyBpbiAxMDA1Mzg4IHVzZWMpIDUx MS40NiBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKOTI4Ljc2MzQxMCBtYWluX3RocmVhZCBbMjMyNV0g Ny4yNDkgTXBwcyAoNy4yNjYgTXBrdHMgNC4xODUgR2JwcyBpbiAxMDAyMzY3IHVzZWMpIDUxMS41 MCBhdmdfYmF0Y2ggMSBtaW5fc3BhY2UKOTMwLjQ0MTI1MSBtYWluX3RocmVhZCBbMjMyNV0gNy40 NTUgTXBwcyAoMTIuNTA4IE1wa3RzIDcuMjA1IEdicHMgaW4gMTY3Nzg0MiB1c2VjKSA1MTEuNTAg YXZnX2JhdGNoIDEgbWluX3NwYWNlCjkzMi4yOTg0NjMgbWFpbl90aHJlYWQgWzIzMjVdIDcuMTUx IE1wcHMgKDEzLjI4MCBNcGt0cyA3LjY0OSBHYnBzIGluIDE4NTcyMTIgdXNlYykgNTExLjUwIGF2 Z19iYXRjaCAxIG1pbl9zcGFjZQo5MzMuMjk5MjE3IG1haW5fdGhyZWFkIFsyMzI1XSA2Ljk1NyBN cHBzICg2Ljk2MyBNcGt0cyA0LjAxMCBHYnBzIGluIDEwMDA3NTQgdXNlYykgNTExLjUwIGF2Z19i YXRjaCAxIG1pbl9zcGFjZQo5MzQuMzAyMjQ0IG1haW5fdGhyZWFkIFsyMzI1XSA3LjQ5NiBNcHBz ICg3LjUxOSBNcGt0cyA0LjMzMSBHYnBzIGluIDEwMDMwMjcgdXNlYykgNTExLjUwIGF2Zw== --_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_ Content-Type: text/plain; name="kernel_dumps.txt" Content-Description: kernel_dumps.txt Content-Disposition: attachment; filename="kernel_dumps.txt"; size=3734; creation-date="Fri, 02 Dec 2016 14:18:14 GMT"; modification-date="Fri, 02 Dec 2016 14:18:14 GMT" Content-Transfer-Encoding: base64 OTU3LjI4NTYyNCBbIDQ0Ml0gZ2VuZXJpY19uZXRtYXBfcmVnaXN0ZXIgICBHZW5lcmljIGFkYXB0 ZXIgMHhmZmZmZjgwMDEyYTVjYzAwIGdvZXMgb24KOTU3LjI4NzI1NyBbIDQ4N10gZ2VuZXJpY19u ZXRtYXBfcmVnaXN0ZXIgICBSWCByaW5nIDAgb2YgZ2VuZXJpYyBhZGFwdGVyIDB4ZmZmZmY4MDAx MmE1Y2MwMCBnb2VzIG9uCjk1Ny4yODg5NzkgWyA0OTRdIGdlbmVyaWNfbmV0bWFwX3JlZ2lzdGVy ICAgVFggcmluZyAwIG9mIGdlbmVyaWMgYWRhcHRlciAweGZmZmZmODAwMTJhNWNjMDAgZ29lcyBv bgo5NTcuNTg0Mjg1IG1haW4gWzI3NzBdIG1hcHBlZCAzMzQ5ODBLQiBhdCAweDgwMTYwMDAwMApT ZW5kaW5nIG9uIG5ldG1hcDp2dG5ldDE6IDEgcXVldWVzLCAxIHRocmVhZHMgYW5kIDEgY3B1cy4K MTAuMC4wLjEgLT4gMTAuMS4wLjEgKDAwOjAwOjAwOjAwOjAwOjAwIC0+IGZmOmZmOmZmOmZmOmZm OmZmKQo5NTcuNjcxMTMyIG1haW4gWzI4NjddIFNlbmRpbmcgNTEyIHBhY2tldHMgZXZlcnkgIDAu MDAwMDAwMDAwIHMKOTU3LjY4NDExMiBzdGFydF90aHJlYWRzIFsyMjM1XSBXYWl0IDIgc2VjcyBm b3IgcGh5IHJlc2V0Cjk1OS43Mzc3MDMgc3RhcnRfdGhyZWFkcyBbMjIzN10gUmVhZHkuLi4KOTU5 LjczODQyNCBtYWluIFsyODgwXSBmYWlsZWQgdG8gaW5zdGFsbCBeQyBoYW5kbGVyOiBJbnZhbGlk IGFyZ3VtZW50Cjk1OS43Mzk0MzUgc2VuZGVyX2JvZHkgWzE0MzZdIHN0YXJ0LCBmZCAzIG1haW5f ZmQgMwoKCkZhdGFsIHRyYXAgMTg6IGludGVnZXIgZGl2aWRlIGZhdWx0IHdoaWxlIGluIGtlcm5l bCBtb2RlCmNwdWlkID0gMDsgYXBpYyBpZCA9IDAwCmluc3RydWN0aW9uIHBvaW50ZXIJPSAweDIw OjB4ZmZmZmZmZmY4MDkwNTZiNQpzdGFjayBwb2ludGVyCSAgICAgICAgPSAweDI4OjB4ZmZmZmZl MDFiZmQ3NzYzMApmcmFtZSBwb2ludGVyCSAgICAgICAgPSAweDI4OjB4ZmZmZmZlMDFiZmQ3NzY4 MApjb2RlIHNlZ21lbnQJCT0gYmFzZSAweDAsIGxpbWl0IDB4ZmZmZmYsIHR5cGUgMHgxYgoJCQk9 IERQTCAwLCBwcmVzIDEsIGxvbmcgMSwgZGVmMzIgMCwgZ3JhbiAxCnByb2Nlc3NvciBlZmxhZ3MJ PSBpbnRlcnJ1cHQgZW5hYmxlZCwgcmVzdW1lLCBJT1BMID0gMApjdXJyZW50IHByb2Nlc3MJCT0g MjQ4MCAocGt0LWdlbikKdHJhcCBudW1iZXIJCT0gMTgKcGFuaWM6IGludGVnZXIgZGl2aWRlIGZh dWx0CmNwdWlkID0gMApLREI6IHN0YWNrIGJhY2t0cmFjZToKIzAgMHhmZmZmZmZmZjgwYjA4OGM3 IGF0IGtkYl9iYWNrdHJhY2UrMHg2NwojMSAweGZmZmZmZmZmODBhYmRjMzIgYXQgdnBhbmljKzB4 MTgyCiMyIDB4ZmZmZmZmZmY4MGFiZGFhMyBhdCBwYW5pYysweDQzCiMzIDB4ZmZmZmZmZmY4MGY4 NGQzMSBhdCB0cmFwX2ZhdGFsKzB4MzUxCiM0IDB4ZmZmZmZmZmY4MGY4NDljOCBhdCB0cmFwKzB4 NzY4CiM1IDB4ZmZmZmZmZmY4MGY2NzdkMSBhdCBjYWxsdHJhcCsweDgKIzYgMHhmZmZmZmZmZjgy NjI5NmI4IGF0IG5tX29zX2dlbmVyaWNfeG1pdF9mcmFtZSsweDQ4CiM3IDB4ZmZmZmZmZmY4MjYy MzNiZiBhdCBnZW5lcmljX25ldG1hcF90eHN5bmMrMHgyOWYKIzggMHhmZmZmZmZmZjgyNjFkNGZm IGF0IG5ldG1hcF9wb2xsKzB4NTBmCiM5IDB4ZmZmZmZmZmY4MjYyYTY3MiBhdCBmcmVlYnNkX25l dG1hcF9wb2xsKzB4MzIKIzEwIDB4ZmZmZmZmZmY4MDk2YWQ5MCBhdCBkZXZmc19wb2xsX2YrMHg3 MAojMTEgMHhmZmZmZmZmZjgwYjI3YzIwIGF0IGtlcm5fcG9sbCsweDY1MAojMTIgMHhmZmZmZmZm ZjgwYjI3NWMxIGF0IHN5c19wb2xsKzB4NjEKIzEzIDB4ZmZmZmZmZmY4MGY4NTY4ZSBhdCBhbWQ2 NF9zeXNjYWxsKzB4NGNlCiMxNCAweGZmZmZmZmZmODBmNjdhYmIgYXQgWGZhc3Rfc3lzY2FsbCsw eGZiClVwdGltZTogMjBtNDBzCgoKCgoKNzg2LjI0MzM1NSBbIDQ0Ml0gZ2VuZXJpY19uZXRtYXBf cmVnaXN0ZXIgICBHZW5lcmljIGFkYXB0ZXIgMHhmZmZmZjgwMDEyYWUyMDAwIGdvZXMgb24KNzg2 LjI0NDg5MSBbIDQ4N10gZ2VuZXJpY19uZXRtYXBfcmVnaXN0ZXIgICBSWCByaW5nIDAgb2YgZ2Vu ZXJpYyBhZGFwdGVyIDB4ZmZmZmY4MDAxMmFlMjAwMCBnb2VzIG9uCjc4Ni4yNDY1MDggWyA0OTRd IGdlbmVyaWNfbmV0bWFwX3JlZ2lzdGVyICAgVFggcmluZyAwIG9mIGdlbmVyaWMgYWRhcHRlciAw eGZmZmZmODAwMTJhZTIwMDAgZ29lcyBvbgo3ODYuMjcwMjA2IG1haW4gWzI3NzBdIG1hcHBlZCAz MzQ5ODBLQiBhdCAweDgwMTYwMDAwMApTZW5kaW5nIG9uIG5ldG1hcDp2dG5ldDE6IDEgcXVldWVz LCAxIHRocmVhZHMgYW5kIDEgY3B1cy4KMTAuMC4wLjEgLT4gMTAuMS4wLjEgKDAwOjAwOjAwOjAw OjAwOjAwIC0+IGZmOmZmOmZmOmZmOmZmOmZmKQo3ODYuMzQ1MTM2IG1haW4gWzI4NjddIFNlbmRp bmcgNTEyIHBhY2tldHMgZXZlcnkgIDAuMDAwMDAwMDAwIHMKNzg2LjM2MzM5NSBzdGFydF90aHJl YWRzIFsyMjM1XSBXYWl0IDIgc2VjcyBmb3IgcGh5IHJlc2V0Cjc4OC40MjY2MTQgc3RhcnRfdGhy ZWFkcyBbMjIzN10gUmVhZHkuLi4KNzg4LjQyNzQ1NCBzZW5kZXJfYm9keSBbMTQzNl0gc3RhcnQs IGZkIDMgbWFpbl9mZCAzCgoKRmF0YWwgdHJhcCAxODogaW50ZWdlciBkaXZpZGUgZmF1bHQgd2hp bGUgaW4ga2VybmVsIG1vZGUKY3B1aWQgPSAwOyBhcGljIGlkID0gMDAKaW5zdHJ1Y3Rpb24gcG9p bnRlcgk9IDB4MjA6MHhmZmZmZmZmZjgwOTA1NmI1CnN0YWNrIHBvaW50ZXIJICAgICAgICA9IDB4 Mjg6MHhmZmZmZmUwMWJmZDU5NjMwCmZyYW1lIHBvaW50ZXIJICAgICAgICA9IDB4Mjg6MHhmZmZm ZmUwMWJmZDU5NjgwCmNvZGUgc2VnbWVudAkJPSBiYXNlIDB4MCwgbGltaXQgMHhmZmZmZiwgdHlw ZSAweDFiCgkJCT0gRFBMIDAsIHByZXMgMSwgbG9uZyAxLCBkZWYzMiAwLCBncmFuIDEKcHJvY2Vz c29yIGVmbGFncwk9IGludGVycnVwdCBlbmFibGVkLCByZXN1bWUsIElPUEwgPSAwCmN1cnJlbnQg cHJvY2VzcwkJPSAxMTQyIChwa3QtZ2VuKQp0cmFwIG51bWJlcgkJPSAxOApwYW5pYzogaW50ZWdl ciBkaXZpZGUgZmF1bHQKY3B1aWQgPSAwCktEQjogc3RhY2sgYmFja3RyYWNlOgojMCAweGZmZmZm ZmZmODBiMDg4YzcgYXQga2RiX2JhY2t0cmFjZSsweDY3CiMxIDB4ZmZmZmZmZmY4MGFiZGMzMiBh dCB2cGFuaWMrMHgxODIKIzIgMHhmZmZmZmZmZjgwYWJkYWEzIGF0IHBhbmljKzB4NDMKIzMgMHhm ZmZmZmZmZjgwZjg0ZDMxIGF0IHRyYXBfZmF0YWwrMHgzNTEKIzQgMHhmZmZmZmZmZjgwZjg0OWM4 IGF0IHRyYXArMHg3NjgKIzUgMHhmZmZmZmZmZjgwZjY3N2QxIGF0IGNhbGx0cmFwKzB4OAojNiAw eGZmZmZmZmZmODI2Mjk2YjggYXQgbm1fb3NfZ2VuZXJpY194bWl0X2ZyYW1lKzB4NDgKIzcgMHhm ZmZmZmZmZjgyNjIzM2JmIGF0IGdlbmVyaWNfbmV0bWFwX3R4c3luYysweDI5ZgojOCAweGZmZmZm ZmZmODI2MWQ0ZmYgYXQgbmV0bWFwX3BvbGwrMHg1MGYKIzkgMHhmZmZmZmZmZjgyNjJhNjcyIGF0 IGZyZWVic2RfbmV0bWFwX3BvbGwrMHgzMgojMTAgMHhmZmZmZmZmZjgwOTZhZDkwIGF0IGRldmZz X3BvbGxfZisweDcwCiMxMSAweGZmZmZmZmZmODBiMjdjMjAgYXQga2Vybl9wb2xsKzB4NjUwCiMx MiAweGZmZmZmZmZmODBiMjc1YzEgYXQgc3lzX3BvbGwrMHg2MQojMTMgMHhmZmZmZmZmZjgwZjg1 NjhlIGF0IGFtZDY0X3N5c2NhbGwrMHg0Y2UKIzE0IDB4ZmZmZmZmZmY4MGY2N2FiYiBhdCBYZmFz dF9zeXNjYWxsKzB4ZmIKVXB0aW1lOiA1bTQ3cwo= --_006_DB5PR07MB16857B8F7A2B4783640074979B8E0DB5PR07MB1685eurp_--