From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sog-mx-2.v43.ch3.sourceforge.com ([172.29.43.192] helo=mx.sourceforge.net) by sfs-ml-4.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1WJL4m-0002ph-93 for user-mode-linux-devel@lists.sourceforge.net; Fri, 28 Feb 2014 10:53:56 +0000 Received: from rcdn-iport-8.cisco.com ([173.37.86.79]) by sog-mx-2.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128) (Exim 4.76) id 1WJL4h-0000zo-Rz for user-mode-linux-devel@lists.sourceforge.net; Fri, 28 Feb 2014 10:53:56 +0000 Received: from xhc-rcd-x04.cisco.com (xhc-rcd-x04.cisco.com [173.37.183.78]) by rcdn-core2-5.cisco.com (8.14.5/8.14.5) with ESMTP id s1SAri6I015477 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL) for ; Fri, 28 Feb 2014 10:53:44 GMT From: "Anton Ivanov (antivano)" Date: Fri, 28 Feb 2014 10:53:43 +0000 Message-ID: <53106A8E.7090706@cisco.com> References: <53104888.8040404@cisco.com> <531049CD.7050502@nod.at> In-Reply-To: <531049CD.7050502@nod.at> Content-Language: en-US Content-Type: multipart/mixed; boundary="_002_53106A8E7090706ciscocom_" MIME-Version: 1.0 List-Id: The user-mode Linux development list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: user-mode-linux-devel-bounces@lists.sourceforge.net Subject: Re: [uml-devel] Contribution - Bug fixes and contributions to UML To: "user-mode-linux-devel@lists.sourceforge.net" --_002_53106A8E7090706ciscocom_ Content-Type: text/plain; charset="iso-8859-1" Content-ID: <51C52E78CDBB1D47A4E74D472A2B82CA@emea.cisco.com> Content-Transfer-Encoding: quoted-printable Hi all, First of all, if this does not apply cleanly somewhere, accept my apologies. The patchsets have grown organically for the last 1.5 years and I am having trouble disentangling some of them into distinct features. Feel free to bounce, I will be happy to fix it. This is taken vs 3.3.8. The choice of kernel is because this is the production Openwrt AA kernel which what we use for development. It applies with minimal fuss from 3.2 to 3.8 (I have not tested it further). Attached are the l2tpv3 and the raw transports. Principles of operation: UML original network infrastructure allocates a SKB at a time, reads into it using a driver read function and if the read is successful passes the skb to if_rx. I This will not work for multi-packet receive unless you copy. Without multipacket receive it is difficult to go beyond 1.5Gbit for L2TPv3 and 1Gbit for raw. With multipacket you are looking at double that (at least). As an alternative to multipacket rx raw can also use packet mmap. While this incurs an extra copy the savings from fewer syscalls allow it to get fairly reasonable performance. Multipacket tx is not used for now. To avoid the copy we pre-allocate a vector of skbs, a matching vector of supporting messages for recvmsg/sendmsg and matching iovs. If the encapsulation has a distinct header (l2tpv3, gre, etc) we use readmsg (or readmmsg) to split that header from the packet payload on rx. If there is no header (raw) - we read directly. Same on xmit. So the structures for the former and the latter differ somewhat - the former uses a pointer to a two buffer iov (one fo header, one for payload), the latter a pointer to a single buffer iov in the msg_hdr structures. Otherwise, they are similar. In order to avoid invoking kernel side functions directly the 3 kernel side bits we need to build these vectors are isolated in net_extra_kern.c The userspace bits including wrappers around recvmsg, sendmsg and recvmmsg are in net_extra_user.c The same file contains all the infra to build the vectors. When using vector io we no longer need drop_skb too. If there is no skb alloced (buffer length set to zero or buffer is NULL), recvmsg and recvmmsg will drop the packet for us. >>>From there on, the transports use this common infra. The arguments for l2tpv3 are: eth1=3Dl2tpv3,,src,srcport,dst,dstport,rxcookie,txcookie,rxsession,txsessio= n,unused,mode mode is a bitmask (described in the uml_l2tpv3.h include file). 1 /* on for v6, off for v4 */ 2 /* on for udp, off for raw ip */ 4 /* cookie present */ 8 /* on for 64 bit cookie */ 16 /* draft keyed ip - no counter */ src, srcport - source, format according to the above dst, dstport - destination (optional, if null will listen for first packet) txcookie, rxcookie, txsession, rxsession - same as for ip l2tpv3 arguments unused - older mode spec, not used now mode - current (bitmask) mode spec Examples: eth1=3Dl2tpv3,,192.168.64.1,,192.168.128.1,,0xdeadbeefdeadbeef,0xbeefdeadbe= efdead,0xffffffff,0xffffffff,,c This will configure raw ip v4 EoGRE tunnel from 64.1 to 128.1. The config is not very user friendly, but it is a bit difficult to make it so using current option parsing routines. Raw is much simpler: eth1=3Draw,,ifname ifname is the name of the interface to bind to. Note - the driver does not bring up the interface or set its mode. For most use cases you have to do an ifconfig ethX up promisc before binding to it for this to work. A. On 28/02/14 08:33, Richard Weinberger wrote: > Am 28.02.2014 09:27, schrieb Anton Ivanov (antivano): >> Hi Richard, Hi Jeff, hi list, >> >> On behalf of Cisco systems, I am authorized to make a offer a set bug >> fixes as well as contribute several additional features and performance >> improvements to UML. All of these have been used internally for a couple >> of years and will ship as parts of product(s) in the near future. Some >> of these improve performance by up to 8 times on use cases which are of >> interest to us and are likely to be of interest to the community. >> >> As the full patchset is now in the 100k+ zone, so I am going to do only >> the announcement now and submit the patches one by one after that over >> the next 1-2 weeks. >> >> We will submit separately bug fixes for: >> >> 1. Critical memory corruption on startup observed on heavily loaded >> machines (especially when multiple UMLs run simultaneously). >> 2. Fix(es) for incorrect handling of error conditions when UML is run >> under expect and conX=3Dfd: is used to communicate with another process. >> The same error may be observed on internal UML IPCs too leading to >> immediate crash. >> >> I will also file bugs for both vs Debian UML package so that patches for >> both can go in ASAP. >> >> In addition to the bug fixes, the new features include: >> >> 1. Several transports. All can do up to multi-gigabit throughput on some >> scenarios. We are contributing their counterparts to qemu/kvm as well. >> >> 1.1. Direct connection of UML to overlay networks/L2 VPNs using L2TPv3. >> >> This has a number of advantages compared to the existing UML "multicast" >> and qemu "socket" transports. >> >> * Standard compliant - RFC 3931 updated recently by RFC 5641 >> * Supported on most network equipment >> * Allowing to move virtual switching off-host to an NPU or high >> performance physical switch >> * Allowing to mix virtual and physical switching (well supported on >> modern Linuxes and other OSes) >> * Well researched security profile as well as established >> interactions with IPSEC allowing to extend virtual networks outside the >> datacenter to remote physical devices and/or VMs. >> >> 1.2. Raw transport which allows both bi-directional communication with >> any network device which looks like Ethernet as well as in-span >> listening at speeds in the multi-gigabit range. >> >> 1.3. We intend to contribute other key overlay transports like GRE, etc >> as well. The ones we are contributing at this point are the ones which >> we have used most extensively and have had the most testing (~ 1.5-2 yea= rs). >> >> 2. New high res timer subsystem >> >> Adding these new network transports to UML revealed a key issue - it >> cannot meter or shape any traffic correctly as its internal timer system >> is way off. Personally, I consider it a bug, however there is no "easy" >> fix here. The only way to fix it is a new timer driver. Unfortunately, >> it does not fix uml userspace - timers there remain off. It does fix all >> kernel timer functionality - traffic shaping (both qdisc and iptables >> traffic limits). >> >> As a side effect, this provides performance improvements for tcp and >> other protocols which rely on kernel high res timers for their state >> machines. >> >> We have further scalability contributions lined up which improve network >> and IO performance between 1.5 and 8 times (depending on use case), >> allow hundreds of virtual interfaces per UML without performance >> penalties, allow to run several hundreds (if not thousands) of UMLs per >> machine, etc. All in all, it can no go where no virtualization and no >> virtual networking has gone before. >> >> However, I would prefer to take it one step at a time and get through >> these first (even these are quite a lot for one "sitting"). > Sounds awesome! > > Please send the patches as soon as possible. > I'm eager to test and merge them. > > Thanks, > //richard > > -------------------------------------------------------------------------= ----- > Flow-based real-time traffic analytics software. Cisco certified tool. > Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer > Customize your own dashboards, set traffic alerts and generate reports. > Network behavioral analysis & security monitoring. All-in-one tool. > http://pubads.g.doubleclick.net/gampad/clk?id=3D126839071&iu=3D/4140/ostg= .clktrk > _______________________________________________ > User-mode-linux-devel mailing list > User-mode-linux-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel > --_002_53106A8E7090706ciscocom_ Content-Type: text/x-patch; name="linux.diff" Content-Description: linux.diff Content-Disposition: attachment; filename="linux.diff"; size=60462; creation-date="Fri, 28 Feb 2014 10:53:43 GMT"; modification-date="Fri, 28 Feb 2014 10:53:43 GMT" Content-ID: Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy5uZXQgYi9hcmNoL3VtL0tjb25maWcubmV0DQpp bmRleCAzMTYwYjFhLi4zODZkYzEyIDEwMDY0NA0KLS0tIGEvYXJjaC91bS9LY29uZmlnLm5ldA0K KysrIGIvYXJjaC91bS9LY29uZmlnLm5ldA0KQEAgLTEwOCw2ICsxMDgsMjIgQEAgY29uZmlnIFVN TF9ORVRfREFFTU9ODQogICAgICAgICBtb3JlIHRoYW4gb25lIHdpdGhvdXQgY29uZmxpY3QuICBJ ZiB5b3UgZG9uJ3QgbmVlZCBVTUwgbmV0d29ya2luZywNCiAgICAgICAgIHNheSBOLg0KIA0KK2Nv bmZpZyBVTUxfTkVUX1JBVw0KKwlib29sICJSYXcgdHJhbnNwb3J0Ig0KKwlkZXBlbmRzIG9uIFVN TF9ORVQNCisJaGVscA0KKwlUaGlzIFVzZXItTW9kZSBMaW51eCBuZXR3b3JrIHRyYW5zcG9ydCBi aW5kcyBhIFZNIGV0aFggaW50ZXJmYWNlDQorCXRvIGEgaG9zdCBpbnRlcmZhY2UgdXNpbmcgcmF3 IHNvY2tldHMuIFRoZSBob3N0IGludGVyZmFjZSBpcyANCisJZXhwZWN0ZWQgdG8gaGF2ZSBFdGhl cm5ldCBmcmFtaW5nDQorDQorY29uZmlnIFVNTF9ORVRfTDJUUFYzDQorCWJvb2wgIkwyVFB2MyB0 cmFuc3BvcnQiDQorCWRlcGVuZHMgb24gVU1MX05FVA0KKwloZWxwDQorCVRoaXMgVXNlci1Nb2Rl IExpbnV4IG5ldHdvcmsgdHJhbnNwb3J0IGJpbmRzIGFuIElQIGFkZHJlc3MgKHY0IG9yIHY2KQ0K KwlhbmQgbGlzdGVucyBmb3IgaW5jb21pbmcgTDJUUFYzIGZyYW1lcy4gRnJhbWVzIGFyZSBkZWNh cHN1bGF0ZWQNCisJYW5kIHByZXNlbnRlZCB0byB0aGUgVk0uIA0KKw0KIGNvbmZpZyBVTUxfTkVU X1ZERQ0KIAlib29sICJWREUgdHJhbnNwb3J0Ig0KIAlkZXBlbmRzIG9uIFVNTF9ORVQNCmRpZmYg LS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvTWFrZWZpbGUgYi9hcmNoL3VtL2RyaXZlcnMvTWFrZWZp bGUNCmluZGV4IGU3NTgyZTEuLmFlMzBiODMgMTAwNjQ0DQotLS0gYS9hcmNoL3VtL2RyaXZlcnMv TWFrZWZpbGUNCisrKyBiL2FyY2gvdW0vZHJpdmVycy9NYWtlZmlsZQ0KQEAgLTEsNiArMSw3IEBA DQogIyANCiAjIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiwgMjAwMyBKZWZmIERpa2UgKGpkaWtl QGthcmF5YS5jb20pDQogIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMDQorIyBDb3B5cmlnaHQgKEMp IDIwMTIgLSAyMDE0IENpc2NvIFN5c3RlbXMNCiAjDQogDQogIyBwY2FwIGlzIGJyb2tlbiBpbiAy LjUgYmVjYXVzZSBrYnVpbGQgZG9lc24ndCBhbGxvdyBwY2FwLmEgdG8gYmUgbGlua2VkDQpAQCAt OSw4ICsxMCwxMCBAQA0KIHNsaXAtb2JqcyA6PSBzbGlwX2tlcm4ubyBzbGlwX3VzZXIubw0KIHNs aXJwLW9ianMgOj0gc2xpcnBfa2Vybi5vIHNsaXJwX3VzZXIubw0KIGRhZW1vbi1vYmpzIDo9IGRh ZW1vbl9rZXJuLm8gZGFlbW9uX3VzZXIubw0KK3VtbF9yYXctb2JqcyA6PSB1bWxfcmF3X2tlcm4u byB1bWxfcmF3X3VzZXIubw0KK3VtbF9sMnRwdjMtb2JqcyA6PSB1bWxfbDJ0cHYzX2tlcm4ubyB1 bWxfbDJ0cHYzX3VzZXIubw0KIHVtY2FzdC1vYmpzIDo9IHVtY2FzdF9rZXJuLm8gdW1jYXN0X3Vz ZXIubw0KLW5ldC1vYmpzIDo9IG5ldF9rZXJuLm8gbmV0X3VzZXIubw0KK25ldC1vYmpzIDo9IG5l dF9rZXJuLm8gbmV0X3VzZXIubyBuZXRfZXh0cmFfdXNlci5vIG5ldF9leHRyYV9rZXJuLm8NCiBt Y29uc29sZS1vYmpzIDo9IG1jb25zb2xlX2tlcm4ubyBtY29uc29sZV91c2VyLm8NCiBob3N0YXVk aW8tb2JqcyA6PSBob3N0YXVkaW9fa2Vybi5vDQogdWJkLW9ianMgOj0gdWJkX2tlcm4ubyB1YmRf dXNlci5vDQpAQCAtNDMsNiArNDYsOCBAQCBvYmotJChDT05GSUdfU1RERVJSX0NPTlNPTEUpICs9 IHN0ZGVycl9jb25zb2xlLm8NCiBvYmotJChDT05GSUdfVU1MX05FVF9TTElQKSArPSBzbGlwLm8g c2xpcF9jb21tb24ubw0KIG9iai0kKENPTkZJR19VTUxfTkVUX1NMSVJQKSArPSBzbGlycC5vIHNs aXBfY29tbW9uLm8NCiBvYmotJChDT05GSUdfVU1MX05FVF9EQUVNT04pICs9IGRhZW1vbi5vIA0K K29iai0kKENPTkZJR19VTUxfTkVUX1JBVykgKz0gdW1sX3Jhdy5vIA0KK29iai0kKENPTkZJR19V TUxfTkVUX0wyVFBWMykgKz0gdW1sX2wydHB2My5vIA0KIG9iai0kKENPTkZJR19VTUxfTkVUX1ZE RSkgKz0gdmRlLm8NCiBvYmotJChDT05GSUdfVU1MX05FVF9NQ0FTVCkgKz0gdW1jYXN0Lm8NCiBv YmotJChDT05GSUdfVU1MX05FVF9QQ0FQKSArPSBwY2FwLm8NCkBAIC01NiwxMiArNjEsMTMgQEAg b2JqLSQoQ09ORklHX1BPUlRfQ0hBTikgKz0gcG9ydC5vDQogb2JqLSQoQ09ORklHX1BUWV9DSEFO KSArPSBwdHkubw0KIG9iai0kKENPTkZJR19UVFlfQ0hBTikgKz0gdHR5Lm8gDQogb2JqLSQoQ09O RklHX1hURVJNX0NIQU4pICs9IHh0ZXJtLm8geHRlcm1fa2Vybi5vDQorb2JqLSQoQ09ORklHX1VO SVhfQ0hBTikgKz0gY2hhbl91bml4Lm8NCiBvYmotJChDT05GSUdfVU1MX1dBVENIRE9HKSArPSBo YXJkZG9nLm8NCiBvYmotJChDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OKSArPSBjb3dfdXNlci5v DQogb2JqLSQoQ09ORklHX1VNTF9SQU5ET00pICs9IHJhbmRvbS5vDQogDQogIyBwY2FwX3VzZXIu byBtdXN0IGJlIGFkZGVkIGV4cGxpY2l0bHkuDQotVVNFUl9PQkpTIDo9IGZkLm8gbnVsbC5vIHB0 eS5vIHR0eS5vIHh0ZXJtLm8gc2xpcF9jb21tb24ubyBwY2FwX3VzZXIubyB2ZGVfdXNlci5vDQor VVNFUl9PQkpTIDo9IGZkLm8gbnVsbC5vIHB0eS5vIHR0eS5vIHh0ZXJtLm8gc2xpcF9jb21tb24u byBwY2FwX3VzZXIubyB2ZGVfdXNlci5vIGNoYW5fdW5peC5vDQogQ0ZMQUdTX251bGwubyA9IC1E REVWX05VTEw9JChERVZfTlVMTF9QQVRIKQ0KIA0KIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01h a2VmaWxlLnJ1bGVzDQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9leHRyYV9rZXJu LmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2V4dHJhX2tlcm4uYw0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAuLjQwYjI5NGMNCi0tLSAvZGV2L251bGwNCisrKyBiL2FyY2gvdW0v ZHJpdmVycy9uZXRfZXh0cmFfa2Vybi5jDQpAQCAtMCwwICsxLDYyIEBADQorLyoNCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTIgLSAyMDE0IENpc2NvIFN5c3RlbXMNCisgKiBDb3B5cmlnaHQgKEMpIDIw MDEgLSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkNCisg KiBDb3B5cmlnaHQgKEMpIDIwMDEgTGVubmVydCBCdXl0ZW5oZWsgKGJ1eXRlbmhAZ251Lm9yZykg YW5kDQorICogSmFtZXMgTGV1IChqbGV1QG1pbmRzcHJpbmcubmV0KS4NCisgKiBDb3B5cmlnaHQg KEMpIDIwMDEgYnkgdmFyaW91cyBvdGhlciBwZW9wbGUgd2hvIGRpZG4ndCBwdXQgdGhlaXIgbmFt ZSBoZXJlLg0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuDQorICovDQorDQorI2luY2x1ZGUg PGxpbnV4L2Jvb3RtZW0uaD4NCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4NCisjaW5j bHVkZSA8bGludXgvZXRodG9vbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+DQor I2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNs dWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNl Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPg0KKyNpbmNsdWRlIDxsaW51eC9za2J1 ZmYuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9j ay5oPg0KKyNpbmNsdWRlICJpbml0LmgiDQorI2luY2x1ZGUgImlycV9rZXJuLmgiDQorI2luY2x1 ZGUgImlycV91c2VyLmgiDQorI2luY2x1ZGUgIm1jb25zb2xlX2tlcm4uaCINCisjaW5jbHVkZSAi bmV0X2tlcm4uaCINCisjaW5jbHVkZSAibmV0X3VzZXIuaCINCisNCisjZGVmaW5lIERSSVZFUl9O QU1FICJ1bWwtbmV0ZGV2Ig0KKw0KKy8qIA0KKyAgICBUaGVzZSBhcmUgd3JhcHBlcnMgYXJvdW5k IGtleSBrZXJuZWwgc2lkZSBmdW5jdGlvbnMgc28gd2UgY2FuDQorICAgIGludm9rZSB0aGVtIGZy b20gdGhlIHVzZXIgc2lkZSBvZiBvdXIgU2NoaXpvZnJlbmlhYyBzZWxmDQorDQorKi8NCisNCit2 b2lkIHVtbF9uZXRfZGVzdHJveV9za2Iodm9pZCAqIHNrYikgew0KKyAgICBpZiAoc2tiKSB7DQor CWtmcmVlX3NrYigoc3RydWN0IHNrX2J1ZmYgKikgc2tiKTsNCisgICAgfQ0KK30NCisNCit2b2lk ICogdW1sX25ldF9idWlsZF9za2IgKHZvaWQgKiBkZXYpIHsNCisgICAgc3RydWN0IHVtbF9uZXRf cHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdigoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2KTsNCisg ICAgc3RydWN0IHNrX2J1ZmYgKiBza2I7DQorDQorICAgIHNrYiA9ICBkZXZfYWxsb2Nfc2tiKGxw LT5tYXhfcGFja2V0ICsgMzIpOw0KKyAgICBpZiAoc2tiKSB7DQorCS8qIGFkZCBzb21lIHR1bm5l bGluZyBzcGFjZSBqdXN0IGluIGNhc2UsIHdlIHVzdWFsbHkgZG8gbm90IG5lZWQgaXQgYXMgd2Ug dXNlIHZlY3RvciBJTyAqLw0KKwlza2JfcmVzZXJ2ZShza2IsMzIpOwkNCisJc2tiLT5kZXYgPSBk ZXY7DQorCXNrYl9wdXQoc2tiLCBscC0+bWF4X3BhY2tldCk7DQorCXNrYl9yZXNldF9tYWNfaGVh ZGVyKHNrYik7DQorICAgIH0NCisgICAgcmV0dXJuIHNrYjsNCit9DQorDQordm9pZCAqIHVtbF9u ZXRfc2tiX2RhdGEgKHZvaWQgKiBza2IpIHsNCisgICAgcmV0dXJuICgoc3RydWN0IHNrX2J1ZmYg Kikgc2tiKS0+ZGF0YTsNCit9DQorDQorDQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25l dF9leHRyYV91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2V4dHJhX3VzZXIuYw0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmViZGU4YTQNCi0tLSAvZGV2L251bGwNCisr KyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfZXh0cmFfdXNlci5jDQpAQCAtMCwwICsxLDI5MSBAQA0K Ky8qDQorICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNCBDaXNjbyBTeXN0ZW1zDQorICogQ29w eXJpZ2h0IChDKSAyMDAxIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4Lmlu dGVsfS5jb20pDQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTA0KKyAqLw0KKw0KKyNpbmNsdWRl IDxzdGRpby5oPg0KKyNpbmNsdWRlIDx1bmlzdGQuaD4NCisjaW5jbHVkZSA8c3RkYXJnLmg+DQor I2luY2x1ZGUgPGVycm5vLmg+DQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxzdHJp bmcuaD4NCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPg0K KyNpbmNsdWRlICJuZXRfdXNlci5oIg0KKyNpbmNsdWRlICJvcy5oIg0KKyNpbmNsdWRlICJ1bV9t YWxsb2MuaCINCisNCisvKiANCisgICAgUHJpbmNpcGxlcyBvZiBvcGVyYXRpb246DQorDQorICAg IEVWRVJZVEhJTkcgaGVyZSBpcyBidWlsdCB0byB0b2xlcmF0ZSBhIGZhaWxlZCBtZW1vcnkgYWxs b2NhdGlvbi4gSWYgZWl0aGVyIGEgaGVhZGVyIGJ1ZmZlcg0KKyAgICBvciBhIGRhdGEgYnVmZmVy ICh0YWtlbiBmcm9tIHNrYi0+ZGF0YSkgaXMgTlVMTCB0aGUgcmVhZCB3aWxsIGZhaWwgYW5kIHRo ZSBwYWNrZXQgd2lsbCBiZQ0KKyAgICBkcm9wcGVkLiBUaGlzIGlzIHRoZSBub3JtYWwgYmVoYXZp b3VyIG9mIHJlY3Ztc2cgYW5kIHJlY3ZtbXNnIGZ1bmN0aW9ucyAtIGlmIGEgcGFydGljdWxhcg0K KyAgICBpb3ZfYmFzZSA9PSBOVUxMIGFuZCBpdHMgY29ycmVzcG9uZGluZyBpb3ZfYmFzZWxlbiBp cyAwIHdlIHRydW5jYXRlIGFuZC9vciBkcm9wIHRoZSBwYWNrZXQNCisgICAgYWx0b2dldGhlci4N CisgICAgDQorICAgIE9uIHRoZSBuZWdhdGl2ZSBzaWRlIHRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZl IHRvIGRvIGEgZmV3IG1vcmUgY2hlY2tzIGZvciBOVUxMIGhlcmUgYW5kIHRoZXJlLg0KKyAgICBP biB0aGUgcG9zaXRpdmUgc2lkZSB0aGlzIG1lYW5zIHRoYXQgdGhlIHdob2xlIHRoaW5nIGlzIG1v cmUgcm9idXN0IGluY2x1ZGluZyB1bmRlciBsb3cNCisgICAgbWVtb3J5IGNvbmRpdGlvbnMuDQor DQorICAgIFRoZXJlIGlzIG9uZSBzcGVjaWFsIGNhc2Ugd2hpY2ggd2UgbmVlZCB0byBoYW5kbGUg YXMgYSByZXN1bHQgb2YgdGhpcyAtIGFueSBoZWFkZXIgdmVyaWZpY2F0aW9uDQorICAgIGZ1bmN0 aW9ucyBzaG91bGQgcmV0dXJuICJicm9rZW4gaGVhZGVyIiBvbiBoaXR0aW5nIGEgTlVMTC4gVGhp cyB3aWxsIGluIHR1cm4gaW52b2tlIHRoZSBhcHBsaWNhYmxlDQorICAgIHBhY2tldCBkcm9wIGxv Z2ljLg0KKw0KKyAgICBBbnkgY2hhbmdlcyBzaG91bGQgZm9sbG93IHRoaXMgb3ZlcmFsbCBkZXNp Z24uDQorDQorICAgIFNpZGUgZWZmZWN0IC0gbm9uZSBvZiB0aGVzZSBuZWVkIHRvIHVzZSB0aGUg c2hhcmVkIChhbmQgbXV0ZXhlZCkgZHJvcCBza2IuIFRoaXMgaXMgc3VycGx1cyB0byByZXFzLA0K KyAgICB0aGUgbm9ybWFsIHJlY3ZtKG0pbXNnIGRyb3AgbWVjaGFuaWNzIHdpbGwgZHJvcCBpdC4N CisgICAgDQorKi8NCisNCitpbnQgbmV0X3JlYWR2KGludCBmZCwgdm9pZCAqaW92LCBpbnQgaW92 Y250KQ0KK3sNCisJaW50IG47DQorDQorCW4gPSByZWFkdihmZCwgIGlvdiwgIGlvdmNudCk7DQor DQorCWlmICgobiA8IDApICYmIChlcnJubyA9PSBFQUdBSU4pKQ0KKwkJcmV0dXJuIDA7DQorCWVs c2UgaWYgKG4gPT0gMCkNCisJCXJldHVybiAtRU5PVENPTk47DQorCXJldHVybiBuOw0KK30NCisN CitpbnQgbmV0X3JlY3Zmcm9tMihpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdm9pZCAqc3Jj X2FkZHIsIGludCAqYWRkcmxlbikNCit7DQorCWludCBuOw0KKw0KKwlDQVRDSF9FSU5UUihuID0g cmVjdmZyb20oZmQsICBidWYsICBsZW4sIDAsIHNyY19hZGRyLCBhZGRybGVuKSk7DQorCWlmIChu IDwgMCkgew0KKwkJaWYgKGVycm5vID09IEVBR0FJTikNCisJCQlyZXR1cm4gMDsNCisJCXJldHVy biAtZXJybm87DQorCX0NCisJZWxzZSBpZiAobiA9PSAwKQ0KKwkJcmV0dXJuIC1FTk9UQ09OTjsN CisJcmV0dXJuIG47DQorfQ0KKw0KKw0KKw0KKw0KKw0KK2ludCBuZXRfd3JpdGV2KGludCBmZCwg dm9pZCAqaW92LCBpbnQgaW92Y250KQ0KK3sNCisJaW50IG47DQorDQorCW4gPSB3cml0ZXYoZmQs IGlvdiwgaW92Y250KTsNCisNCisJaWYgKChuIDwgMCkgJiYgKGVycm5vID09IEVBR0FJTikpDQor CQlyZXR1cm4gMDsNCisJZWxzZSBpZiAobiA9PSAwKQ0KKwkJcmV0dXJuIC1FTk9UQ09OTjsNCisJ cmV0dXJuIG47DQorfQ0KKw0KK2ludCBuZXRfc2VuZG1lc3NhZ2UoaW50IGZkLCB2b2lkICptc2cs IGludCBmbGFncykNCit7DQorCWludCBuOw0KKw0KKwlDQVRDSF9FSU5UUihuID0gc2VuZG1zZyhm ZCwgbXNnLCBmbGFncykpOw0KKwlpZiAobiA8IDApIHsNCisJCWlmIChlcnJubyA9PSBFQUdBSU4p DQorCQkJcmV0dXJuIDA7DQorCQlyZXR1cm4gLWVycm5vOw0KKwl9DQorCWVsc2UgaWYgKG4gPT0g MCkNCisJCXJldHVybiAtRU5PVENPTk47DQorCXJldHVybiBuOw0KK30NCitpbnQgbmV0X3JlY3Zt ZXNzYWdlKGludCBmZCwgdm9pZCAqbXNnLCBpbnQgZmxhZ3MpDQorew0KKwlpbnQgbjsNCisNCisJ Q0FUQ0hfRUlOVFIobiA9IHJlY3Ztc2coZmQsIG1zZywgZmxhZ3MpKTsNCisJaWYgKG4gPCAwKSB7 DQorCQlpZiAoZXJybm8gPT0gRUFHQUlOKQ0KKwkJCXJldHVybiAwOw0KKwkJcmV0dXJuIC1lcnJu bzsNCisJfQ0KKwllbHNlIGlmIChuID09IDApDQorCQlyZXR1cm4gLUVOT1RDT05OOw0KKwlyZXR1 cm4gbjsNCit9DQorDQoraW50IG5ldF9yZWN2bW1zZyhpbnQgZmQsIHZvaWQgKm1zZ3ZlYywgdW5z aWduZWQgaW50IHZsZW4sDQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3Ms IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCkNCit7DQorCWludCBuOw0KKw0KKwlDQVRDSF9FSU5U UihuID0gcmVjdm1tc2coZmQsIG1zZ3ZlYywgdmxlbiwgZmxhZ3MsIHRpbWVvdXQpKTsNCisJaWYg KG4gPCAwKSB7DQorCQlpZiAoZXJybm8gPT0gRUFHQUlOKQ0KKwkJCXJldHVybiAwOw0KKwkJcmV0 dXJuIC1lcnJubzsNCisJfQ0KKwllbHNlIGlmIChuID09IDApDQorCQlyZXR1cm4gLUVOT1RDT05O Ow0KKwlyZXR1cm4gbjsNCit9DQorLy9pbnQgbmV0X3NlbmRtbXNnKGludCBmZCwgdm9pZCAqbXNn dmVjLCB1bnNpZ25lZCBpbnQgdmxlbiwNCisvLyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IGZsYWdzLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpIA0KKy8vew0KKy8vCWludCBuOw0K Ky8vDQorLy8JQ0FUQ0hfRUlOVFIobiA9IHNlbmRtbXNnKGZkLCBtc2d2ZWMsIHZsZW4sIGZsYWdz KSk7DQorLy8JaWYgKG4gPCAwKSB7DQorLy8JCWlmIChlcnJubyA9PSBFQUdBSU4pDQorLy8JCQly ZXR1cm4gMDsNCisvLwkJcmV0dXJuIC1lcnJubzsNCisvLwl9DQorLy8JZWxzZSBpZiAobiA9PSAw KQ0KKy8vCQlyZXR1cm4gLUVOT1RDT05OOw0KKy8vCXJldHVybiBuOw0KKy8vfQ0KKw0KK3ZvaWQg ZGVzdHJveV9za2JfdmVjdG9yKHZvaWQgKiogdmVjdG9yLCBpbnQgc2l6ZSkgew0KKyAgICBpbnQg aTsNCisgICAgZm9yIChpPTA7aTxzaXplO2krKykgew0KKwlpZiAoICogdmVjdG9yKSB7DQorCSAg ICB1bWxfbmV0X2Rlc3Ryb3lfc2tiKCogdmVjdG9yKTsNCisJfQ0KKwl2ZWN0b3IgKys7DQorICAg IH0NCisgICAga2ZyZWUodmVjdG9yKTsNCit9DQorDQordm9pZCBkZXN0cm95X21tc2dfdmVjdG9y KHZvaWQgKiBtbXNndmVjdG9yLCBpbnQgc2l6ZSwgaW50IGZyZWVfaW92X2Jhc2UpIHsNCisgICAg c3RydWN0IG1tc2doZHIgKiB2ZWN0b3IgPSAoc3RydWN0IG1tc2doZHIgKikgbW1zZ3ZlY3RvcjsN CisgICAgc3RydWN0IGlvdmVjICogaW92Ow0KKyAgICBpbnQgaTsNCisgICAgZm9yIChpPTA7aTxz aXplO2krKykgew0KKwlpb3YgPSB2ZWN0b3ItPm1zZ19oZHIubXNnX2lvdjsNCisJaWYgKGlvdikg ew0KKwkgICAgaWYgKGZyZWVfaW92X2Jhc2UpIHsNCisJCWtmcmVlKGlvdi0+aW92X2Jhc2UpOw0K KwkgICAgfQ0KKwkgICAga2ZyZWUoaW92KTsNCisJfQ0KKwl2ZWN0b3IgKys7DQorICAgIH0NCisg ICAga2ZyZWUodmVjdG9yKTsNCit9DQorDQordm9pZCAqIGJ1aWxkX3NrYnVmX3ZlY3RvcihpbnQg c2l6ZSwgdm9pZCAqIGRldil7DQorICAgIGludCBpOw0KKyAgICB2b2lkICoqcmVzdWx0LCAqKnZl Y3RvcjsNCisgICAgcmVzdWx0ID0gdW1sX2ttYWxsb2Moc2l6ZSAqIHNpemVvZih2b2lkICopLCBV TV9HRlBfS0VSTkVMKTsNCisgICAgdmVjdG9yID0gcmVzdWx0Ow0KKyAgICBpZiAodmVjdG9yKSB7 DQorCWZvciAoaT0wO2k8c2l6ZTtpKyspIHsNCisJICAgKiB2ZWN0b3IgPSB1bWxfbmV0X2J1aWxk X3NrYihkZXYpOw0KKwkgICB2ZWN0b3IrKzsNCisJfQ0KKyAgICB9DQorICAgIHJldHVybiByZXN1 bHQ7DQorfSAgDQorDQordm9pZCByZWJ1aWxkX3NrYnVmX3ZlY3Rvcih2b2lkICoqIHNrYnZlYywg aW50IHNpemUsIHZvaWQgKiBkZXYpew0KKyAgICBpbnQgaTsNCisgICAgaWYgKHNrYnZlYykgew0K Kwlmb3IgKGk9MDtpPHNpemU7aSsrKSB7DQorCSAgICogc2tidmVjID0gdW1sX25ldF9idWlsZF9z a2IoZGV2KTsNCisJICAgc2tidmVjKys7DQorCX0NCisgICAgfQ0KK30gIA0KKw0KK3ZvaWQgcmVw YWlyX21tc2cgKHZvaWQgKnZlYywgaW50IGlvdnNpemUsIGludCBoZWFkZXJfc2l6ZSkgew0KKyAg ICBzdHJ1Y3QgbW1zZ2hkciAqIG1zZ3ZlYyA9IChzdHJ1Y3QgbW1zZ2hkciAqKSB2ZWM7DQorICAg IHN0cnVjdCBpb3ZlYyAqIGlvdjsNCisgICAgaWYgKCEgbXNndmVjLT5tc2dfaGRyLm1zZ19pb3Yp IHsNCisJbXNndmVjLT5tc2dfaGRyLm1zZ19pb3YgPSB1bWxfa21hbGxvYyhzaXplb2Yoc3RydWN0 IGlvdmVjKSAqIGlvdnNpemUsIFVNX0dGUF9LRVJORUwpOw0KKyAgICB9DQorICAgIGlvdiA9IG1z Z3ZlYy0+bXNnX2hkci5tc2dfaW92Ow0KKyAgICBpZiAoaW92KSB7DQorCWlmICghIGlvdi0+aW92 X2Jhc2UpIHsNCisJICAgIGlvdi0+aW92X2Jhc2U9dW1sX2ttYWxsb2MoaGVhZGVyX3NpemUsIFVN X0dGUF9LRVJORUwpOw0KKwl9DQorCWlmIChpb3YtPmlvdl9iYXNlKSB7DQorCSAgICAvKiBwdXQg Y29ycmVjdCBoZWFkZXIgc2l6ZSBqdXN0IGluIGNhc2UgLSB3ZSBtYXkgaGF2ZSBoYWQgYSBzaG9y dCBmcmFtZSAqLw0KKwkgICAgaW92LT5pb3ZfbGVuID0gaGVhZGVyX3NpemU7IA0KKwl9IGVsc2Ug ew0KKwkgICAgcHJpbnRrKCJmYWlsZWQgdG8gYWxsb2NhdGUgYSBoZWFkZXIgYnVmZmVyLCB3aWxs IGNhdXNlIGEgcGFja2V0IGRyb3AgbGF0ZXJcbiIpOw0KKwkgICAgaW92LT5pb3ZfbGVuID0gMDsN CisJfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgKiBidWlsZF9tbXNnX3ZlY3RvcihpbnQgc2l6ZSwg aW50IGlvdnNpemUpIHsNCisgICAgaW50IGk7DQorICAgIHN0cnVjdCBtbXNnaGRyICptc2d2ZWMs ICpyZXN1bHQ7DQorICAgIHN0cnVjdCBpb3ZlYyAqIGlvdjsNCisgICAgcmVzdWx0ID0gdW1sX2tt YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbXNnaGRyKSAqIHNpemUsIFVNX0dGUF9LRVJORUwpOw0KKyAg ICBtc2d2ZWMgPSByZXN1bHQ7DQorICAgIGlmIChtc2d2ZWMpIHsNCisJbWVtc2V0KG1zZ3ZlYywg J1wwJywgc2l6ZW9mKHN0cnVjdCBtbXNnaGRyKSAqIHNpemUpOyANCisJZm9yIChpPTA7aTxzaXpl O2krKykgew0KKwkgICAgaW92ID0gdW1sX2ttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb3ZlYykgKiBp b3ZzaXplLCBVTV9HRlBfS0VSTkVMKTsNCisJICAgIG1zZ3ZlYy0+bXNnX2hkci5tc2dfaW92PWlv djsNCisJICAgIGlmIChpb3YpIHsNCisJCW1lbXNldChpb3YsICdcMCcsIHNpemVvZihzdHJ1Y3Qg aW92ZWMpICogaW92c2l6ZSk7IA0KKwkJbXNndmVjLT5tc2dfaGRyLm1zZ19pb3ZsZW49aW92c2l6 ZTsNCisJICAgIH0gZWxzZSB7DQorCQltc2d2ZWMtPm1zZ19oZHIubXNnX2lvdmxlbj0wOyAvKiBz aWxlbnQgZHJvcCBvbiByZWNlaXZlLCBubyB4bWl0ICovDQorCSAgICB9DQorCSAgICBtc2d2ZWMr KzsNCisJfQ0KKyAgICB9DQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3ZvaWQgYWRkX2hl YWRlcl9idWZmZXJzKHZvaWQgKiBtc2d2ZWMsIGludCBzaXplLCBpbnQgaGVhZGVyX3NpemUpIHsN CisgICAgaW50IGk7DQorICAgIHN0cnVjdCBpb3ZlYyAqIGlvdjsNCisgICAgc3RydWN0IG1tc2do ZHIgKiBtbXNndmVjID0gKHN0cnVjdCBtbXNnaGRyICopIG1zZ3ZlYzsNCisgICAgZm9yIChpPTA7 aTxzaXplO2krKykgew0KKwlpb3YgPSBtbXNndmVjLT5tc2dfaGRyLm1zZ19pb3Y7DQorCWlmIChp b3YpIHsNCisJICAgIGlvdi0+aW92X2Jhc2U9dW1sX2ttYWxsb2MoaGVhZGVyX3NpemUsIFVNX0dG UF9LRVJORUwpOw0KKwkgICAgaWYgKGlvdi0+aW92X2Jhc2UpIHsNCisJCWlvdi0+aW92X2xlbiA9 IGhlYWRlcl9zaXplOw0KKwkgICAgfSBlbHNlIHsNCisJCXByaW50aygiZmFpbGVkIHRvIGFsbG9j YXRlIGEgaGVhZGVyIGJ1ZmZlciwgd2lsbCBjYXVzZSBhIHBhY2tldCBkcm9wIGxhdGVyXG4iKTsN CisJCWlvdi0+aW92X2xlbiA9IDA7DQorCSAgICB9DQorCX0gDQorCW1tc2d2ZWMrKzsNCisgICAg fQ0KK30NCisNCisvKiBOT1RFIC0gdGhpcyBpcyBvbmx5IGZvciBvZmZzZXQgPSAwIG9yIDEsIG90 aGVyIGNhc2VzIGFyZSB1bmhhbmRsZWQhISEgKi8NCisNCit2b2lkIGFkZF9za2J1ZmZzKHZvaWQg KiBtc2d2ZWMsIHZvaWQgKiogc2tidmVjLCBpbnQgc2l6ZSwgaW50IHNrYl9zaXplLCBpbnQgb2Zm c2V0KSB7DQorICAgIGludCBpOw0KKyAgICBzdHJ1Y3QgaW92ZWMgKiBpb3Y7DQorICAgIHN0cnVj dCBtbXNnaGRyICogbW1zZ3ZlYyA9IChzdHJ1Y3QgbW1zZ2hkciAqKSBtc2d2ZWM7DQorICAgIGZv ciAoaT0wO2k8c2l6ZTtpKyspIHsNCisJLyogDQorCSAgICBUaGlzIGhlYXZpbHkgcmVsaWVzIG9u IGFsbCBJT1ZzIGJlaW5nIHByZXNlbnQsIGlmIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gDQorCSAg ICBmYWlscyBpdCBtdXN0IGNsZWFuIHVwIGFuZCBzd2l0Y2ggdG8gIm5vcm1hbCIgcGVyLXBhY2tl dCByZWNlaXZlIGluc3RlYWQNCisJICAgIExhdGVyIGFsbG9jYXRpb25zIG9mIHNrYnVmcyBjYW4g ZmFpbCAtIHRoaXMgd2lsbCByZXN1bHQgaW4gc2hvcnQgcmVhZHMNCisJICAgIGFuZCBza2lwcw0K Kw0KKwkgKi8NCisJaW92ID0gbW1zZ3ZlYy0+bXNnX2hkci5tc2dfaW92Ow0KKwlpZiAoaW92KSB7 DQorCSAgICBpb3YgKz0gb2Zmc2V0OyANCisJICAgIGlvdi0+aW92X2Jhc2U9dW1sX25ldF9za2Jf ZGF0YSgqIHNrYnZlYyk7DQorCSAgICBpZiAoaW92LT5pb3ZfYmFzZSkgew0KKwkJaW92LT5pb3Zf bGVuID0gc2tiX3NpemU7DQorCSAgICB9IGVsc2Ugew0KKwkJaW92LT5pb3ZfbGVuID0gMDsNCisJ ICAgIH0NCisJfSANCisJbW1zZ3ZlYysrOw0KKwlza2J2ZWMrKzsNCisgICAgfQ0KK30NCisNCmRp ZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9u ZXRfa2Vybi5jDQppbmRleCBhNDkyZTU5Li5hZmU2MDg2IDEwMDY0NA0KLS0tIGEvYXJjaC91bS9k cml2ZXJzL25ldF9rZXJuLmMNCisrKyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jDQpAQCAt MSw0ICsxLDUgQEANCiAvKg0KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTQgQ2lzY28gU3lz dGVtcw0KICAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRk dG9pdCxsaW51eC5pbnRlbH0uY29tKQ0KICAqIENvcHlyaWdodCAoQykgMjAwMSBMZW5uZXJ0IEJ1 eXRlbmhlayAoYnV5dGVuaEBnbnUub3JnKSBhbmQNCiAgKiBKYW1lcyBMZXUgKGpsZXVAbWluZHNw cmluZy5uZXQpLg0KQEAgLTQyLDYgKzQzLDcgQEAgc3RhdGljIERFRklORV9TUElOTE9DSyhkcm9w X2xvY2spOw0KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZHJvcF9za2I7DQogc3RhdGljIGludCBk cm9wX21heDsNCiANCisNCiBzdGF0aWMgaW50IHVwZGF0ZV9kcm9wX3NrYihpbnQgbWF4KQ0KIHsN CiAJc3RydWN0IHNrX2J1ZmYgKm5ldzsNCkBAIC03NywyNCArNzksMzkgQEAgc3RhdGljIGludCB1 bWxfbmV0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQogCXN0cnVjdCBza19idWZmICpza2I7 DQogDQogCS8qIElmIHdlIGNhbid0IGFsbG9jYXRlIG1lbW9yeSwgdHJ5IGFnYWluIG5leHQgcm91 bmQuICovDQotCXNrYiA9IGRldl9hbGxvY19za2IobHAtPm1heF9wYWNrZXQpOw0KLQlpZiAoc2ti ID09IE5VTEwpIHsNCi0JCWRyb3Bfc2tiLT5kZXYgPSBkZXY7DQotCQkvKiBSZWFkIGEgcGFja2V0 IGludG8gZHJvcF9za2IgYW5kIGRvbid0IGRvIGFueXRoaW5nIHdpdGggaXQuICovDQotCQkoKmxw LT5yZWFkKShscC0+ZmQsIGRyb3Bfc2tiLCBscCk7DQotCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQr KzsNCisJaWYgKGxwLT5vcHRpb25zICYgVU1MX05FVF9VU0VfU0tCX1JFQUQpIHsNCisJICAgIC8q IHdlIGV4cGVjdCBhIGZ1bGwgZm9ybWVkLCB3ZWxsIGJlaGF2ZWQgc2tiIGZyb20gemVybyBjb3B5 IGRyaXZlcnMgaGVyZSAqLw0KKwkgICAgc2tiID0gKCpscC0+c2tiX3JlYWQpKGxwKTsNCisJICAg IGlmIChza2IgPT0gTlVMTCkgew0KIAkJcmV0dXJuIDA7DQotCX0NCi0NCi0Jc2tiLT5kZXYgPSBk ZXY7DQotCXNrYl9wdXQoc2tiLCBscC0+bWF4X3BhY2tldCk7DQotCXNrYl9yZXNldF9tYWNfaGVh ZGVyKHNrYik7DQotCXBrdF9sZW4gPSAoKmxwLT5yZWFkKShscC0+ZmQsIHNrYiwgbHApOw0KLQ0K LQlpZiAocGt0X2xlbiA+IDApIHsNCisJICAgIH0NCisJICAgIHBrdF9sZW4gPSBza2ItPmxlbjsN CisJICAgIHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsNCisJfSBlbHNlIHsNCisJICAg IHNrYiA9IGRldl9hbGxvY19za2IobHAtPm1heF9wYWNrZXQgKyAzMik7DQorCSAgICBpZiAoc2ti ID09IE5VTEwpIHsNCisJCSAgICBkcm9wX3NrYi0+ZGV2ID0gZGV2Ow0KKwkJICAgIC8qIFJlYWQg YSBwYWNrZXQgaW50byBkcm9wX3NrYiBhbmQgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBpdC4gKi8N CisJCSAgICAoKmxwLT5yZWFkKShscC0+ZmQsIGRyb3Bfc2tiLCBscCk7DQorCQkgICAgZGV2LT5z dGF0cy5yeF9kcm9wcGVkKys7DQorCQkgICAgcmV0dXJuIDA7DQorCSAgICB9DQorDQorCSAgICBz a2JfcmVzZXJ2ZShza2IsMzIpOw0KKwkgICAgc2tiLT5kZXYgPSBkZXY7DQorCSAgICBza2JfcHV0 KHNrYiwgbHAtPm1heF9wYWNrZXQpOw0KKwkgICAgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsN CisNCisJICAgIC8vIE1hcmsgdGhhdCB2aXJ0dWFsIGRldmljZXMgY2Fubm90IHByb3ZpZGUgcmVx dWlyZWQgY2hlY2tzdW0uDQorCSAgICBza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7DQor CSAgICBwa3RfbGVuID0gKCpscC0+cmVhZCkobHAtPmZkLCBza2IsIGxwKTsNCisJICAgIGlmIChw a3RfbGVuID4gMCkgew0KIAkJc2tiX3RyaW0oc2tiLCBwa3RfbGVuKTsNCiAJCXNrYi0+cHJvdG9j b2wgPSAoKmxwLT5wcm90b2NvbCkoc2tiKTsNCisJICAgIH0NCisJfQ0KIA0KKwlpZiAocGt0X2xl biA+IDApIHsNCiAJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47DQogCQlkZXYtPnN0 YXRzLnJ4X3BhY2tldHMrKzsNCiAJCW5ldGlmX3J4KHNrYik7DQpAQCAtMTM3LDcgKzE1NCw3IEBA IHN0YXRpYyBpcnFyZXR1cm5fdCB1bWxfbmV0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZf aWQpDQogCQlzY2hlZHVsZV93b3JrKCZscC0+d29yayk7DQogCQlnb3RvIG91dDsNCiAJfQ0KLQly ZWFjdGl2YXRlX2ZkKGxwLT5mZCwgVU1fRVRIX0lSUSk7DQorCXJlYWN0aXZhdGVfZmQobHAtPmZk LCBkZXYtPmlycSk7DQogDQogb3V0Og0KIAlzcGluX3VubG9jaygmbHAtPmxvY2spOw0KQEAgLTE2 MSw3ICsxNzgsNyBAQCBzdGF0aWMgaW50IHVtbF9uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KQ0KIAl9DQogDQogCWVyciA9IHVtX3JlcXVlc3RfaXJxKGRldi0+aXJxLCBscC0+ZmQsIElS UV9SRUFELCB1bWxfbmV0X2ludGVycnVwdCwNCi0JCQkgICAgIElSUUZfRElTQUJMRUQgfCBJUlFG X1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOw0KKwkJCSAgICAgSVJRRl9TSEFSRUQsIGRldi0+bmFt ZSwgZGV2KTsNCiAJaWYgKGVyciAhPSAwKSB7DQogCQlwcmludGsoS0VSTl9FUlIgInVtbF9uZXRf b3BlbjogZmFpbGVkIHRvIGdldCBpcnEoJWQpXG4iLCBlcnIpOw0KIAkJZXJyID0gLUVORVRVTlJF QUNIOw0KQEAgLTQ0Niw2ICs0NjMsNyBAQCBzdGF0aWMgdm9pZCBldGhfY29uZmlndXJlKGludCBu LCB2b2lkICppbml0LCBjaGFyICptYWMsDQogCSAqIFRoZXNlIGp1c3QgZmlsbCBpbiBhIGRhdGEg c3RydWN0dXJlLCBzbyB0aGVyZSdzIG5vIGZhaWx1cmUNCiAJICogdG8gYmUgd29ycmllZCBhYm91 dC4NCiAJICovDQorCWRldi0+ZXRodG9vbF9vcHMgPSAmdW1sX25ldF9ldGh0b29sX29wczsNCiAJ KCp0cmFuc3BvcnQtPmtlcm4tPmluaXQpKGRldiwgaW5pdCk7DQogDQogCSpscCA9ICgoc3RydWN0 IHVtbF9uZXRfcHJpdmF0ZSkNCkBAIC00NTgsNyArNDc2LDkgQEAgc3RhdGljIHZvaWQgZXRoX2Nv bmZpZ3VyZShpbnQgbiwgdm9pZCAqaW5pdCwgY2hhciAqbWFjLA0KIAkJICAub3BlbiAJCT0gdHJh bnNwb3J0LT51c2VyLT5vcGVuLA0KIAkJICAuY2xvc2UgCQk9IHRyYW5zcG9ydC0+dXNlci0+Y2xv c2UsDQogCQkgIC5yZW1vdmUgCQk9IHRyYW5zcG9ydC0+dXNlci0+cmVtb3ZlLA0KKwkJICAub3B0 aW9ucyAJCT0gdHJhbnNwb3J0LT5rZXJuLT5vcHRpb25zLA0KIAkJICAucmVhZCAJCT0gdHJhbnNw b3J0LT5rZXJuLT5yZWFkLA0KKwkJICAuc2tiX3JlYWQgCQk9IHRyYW5zcG9ydC0+a2Vybi0+c2ti X3JlYWQsDQogCQkgIC53cml0ZSAJCT0gdHJhbnNwb3J0LT5rZXJuLT53cml0ZSwNCiAJCSAgLmFk ZF9hZGRyZXNzIAkJPSB0cmFuc3BvcnQtPnVzZXItPmFkZF9hZGRyZXNzLA0KIAkJICAuZGVsZXRl X2FkZHJlc3MgIAk9IHRyYW5zcG9ydC0+dXNlci0+ZGVsZXRlX2FkZHJlc3MgfSk7DQpAQCAtNDc2 LDcgKzQ5Niw2IEBAIHN0YXRpYyB2b2lkIGV0aF9jb25maWd1cmUoaW50IG4sIHZvaWQgKmluaXQs IGNoYXIgKm1hYywNCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRldmljZS0+bWFjLCBFVEhfQUxF Tik7DQogCWRldi0+bXR1ID0gdHJhbnNwb3J0LT51c2VyLT5tdHU7DQogCWRldi0+bmV0ZGV2X29w cyA9ICZ1bWxfbmV0ZGV2X29wczsNCi0JZGV2LT5ldGh0b29sX29wcyA9ICZ1bWxfbmV0X2V0aHRv b2xfb3BzOw0KIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKEhaID4+IDEpOw0KIAlkZXYtPmlycSA9 IFVNX0VUSF9JUlE7DQogDQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMg Yi9hcmNoL3VtL2RyaXZlcnMvbmV0X3VzZXIuYw0KaW5kZXggMDUwOTBjMy4uYmJmYWY0NyAxMDA2 NDQNCi0tLSBhL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jDQorKysgYi9hcmNoL3VtL2RyaXZl cnMvbmV0X3VzZXIuYw0KQEAgLTEsNCArMSw1IEBADQogLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIw MTIgLSAyMDE0IENpc2NvIFN5c3RlbXMNCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA3IEpl ZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkNCiAgKiBMaWNlbnNlZCB1 bmRlciB0aGUgR1BMDQogICovDQpAQCAtMTIwLDYgKzEyMSw3IEBAIGludCBuZXRfcmVjdmZyb20o aW50IGZkLCB2b2lkICpidWYsIGludCBsZW4pDQogCXJldHVybiBuOw0KIH0NCiANCisNCiBpbnQg bmV0X3dyaXRlKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuKQ0KIHsNCiAJaW50IG47DQpAQCAt MTY0LDYgKzE2Niw3IEBAIGludCBuZXRfc2VuZHRvKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVu LCB2b2lkICp0bywgaW50IHNvY2tfbGVuKQ0KIAlyZXR1cm4gbjsNCiB9DQogDQorDQogc3RydWN0 IGNoYW5nZV9wcmVfZXhlY19kYXRhIHsNCiAJaW50IGNsb3NlX21lOw0KIAlpbnQgc3Rkb3V0Ow0K ZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91bWxfbDJ0cHYzLmggYi9hcmNoL3VtL2RyaXZl cnMvdW1sX2wydHB2My5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYmQ4 MzY5Yw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvYXJjaC91bS9kcml2ZXJzL3VtbF9sMnRwdjMuaA0K QEAgLTAsMCArMSwxMDkgQEANCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTQgQ2lz Y28gU3lzdGVtcw0KKyAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDcgSmVmZiBEaWtlIChqZGlr ZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQ0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwN CisgKi8NCisNCisjaWZuZGVmIF9fVU1MX0wyVFBWM19IX18NCisjZGVmaW5lIF9fVU1MX0wyVFBW M19IX18NCisNCisjaW5jbHVkZSAibmV0X3VzZXIuaCINCisNCisNCisjZGVmaW5lIE5FV19NT0RF X0lQX1ZFUlNJT04gICAxCQkgIC8qIG9uIGZvciB2Niwgb2ZmIGZvciB2NCAqLw0KKyNkZWZpbmUg TkVXX01PREVfVURQCSAgICAgIDIJCSAgLyogb24gZm9yIHVkcCwgb2ZmIGZvciByYXcgaXAgKi8N CisjZGVmaW5lIE5FV19NT0RFX0NPT0tJRQkgICAgICA0CQkgIC8qIGNvb2tpZSBwcmVzZW50ICov DQorI2RlZmluZSBORVdfTU9ERV9DT09LSUVfU0laRSAgOAkJICAvKiBvbiBmb3IgNjQgYml0ICov DQorI2RlZmluZSBORVdfTU9ERV9OT19DT1VOVEVSICAgMTYJICAvKiBEVCAtIG5vIGNvdW50ZXIg Ki8NCisNCisvKiBsZWdhY3kgbW9kZXMgKi8NCisNCisvKiBtb2RlIDAgKi8NCisNCisjZGVmaW5l IExFR0FDWV9VRFA2XzY0X05PX0NPVU5URVIgKE5FV19NT0RFX0lQX1ZFUlNJT04gKyBORVdfTU9E RV9VRFAgKyBORVdfTU9ERV9DT09LSUUgKyBORVdfTU9ERV9DT09LSUVfU0laRSArIE5FV19NT0RF X05PX0NPVU5URVIpDQorDQorI2RlZmluZSBMRUdBQ1lfTU9ERTAgTEVHQUNZX1VEUDZfNjRfTk9f Q09VTlRFUg0KKw0KKy8qIG1vZGUgMSAqLw0KKw0KKyNkZWZpbmUgTEVHQUNZX0lQNl82NF9OT19D T1VOVEVSIChORVdfTU9ERV9JUF9WRVJTSU9OICsgTkVXX01PREVfQ09PS0lFICsgTkVXX01PREVf Q09PS0lFX1NJWkUgKyBORVdfTU9ERV9OT19DT1VOVEVSKQ0KKw0KKyNkZWZpbmUgTEVHQUNZX01P REUxIExFR0FDWV9JUDZfNjRfTk9fQ09VTlRFUg0KKw0KKy8qIG1vZGUgMiAqLw0KKw0KKyNkZWZp bmUgTEVHQUNZX1VEUDRfNjRfQ09VTlRFUiAoTkVXX01PREVfQ09PS0lFICsgTkVXX01PREVfVURQ ICsgTkVXX01PREVfQ09PS0lFX1NJWkUgKQ0KKw0KKyNkZWZpbmUgTEVHQUNZX01PREUyIExFR0FD WV9VRFA0XzY0X0NPVU5URVINCisNCisvKiBtb2RlIDMgKi8NCisNCisjZGVmaW5lIExFR0FDWV9J UDRfNjRfQ09VTlRFUiAoTkVXX01PREVfQ09PS0lFICsgTkVXX01PREVfQ09PS0lFX1NJWkUpDQor DQorI2RlZmluZSBMRUdBQ1lfTU9ERTMgTEVHQUNZX0lQNF82NF9DT1VOVEVSDQorDQorDQorI2Rl ZmluZSBMMlRQVjNfSEVBREVSIDE2DQorDQorDQorc3RydWN0IHRlbXBodG9ubCB7DQorICAgdWlu dDMyX3QgbG93OyANCisgICB1aW50MzJfdCBoaWdoOw0KK307DQorDQorDQorc3RydWN0IHVtbF9s MnRwdjNfZGF0YSB7DQorICAgICAgICB2b2lkICpyZW1vdGVfYWRkcjsNCisgICAgICAgIGludCAg cmVtb3RlX2FkZHJfc2l6ZTsNCisgICAgICAgIGNoYXIgKnJlbW90ZV9hZGRyX3N0cmluZzsNCisg ICAgICAgIGNoYXIgKmxvY2FsX2FkZHJfc3RyaW5nOw0KKyAgICAgICAgY2hhciAqbG9jYWxfc2Vy dmljZTsNCisgICAgICAgIGNoYXIgKnJlbW90ZV9zZXJ2aWNlOw0KKwljaGFyICpsb2NhbF9zZXNz aW9uX3N0cmluZzsNCisJY2hhciAqcmVtb3RlX3Nlc3Npb25fc3RyaW5nOw0KKwl1aW50MzJfdCBs b2NhbF9zZXNzaW9uOw0KKwl1aW50MzJfdCByZW1vdGVfc2Vzc2lvbjsNCisgICAgICAgIGNoYXIg KnJ4X2Nvb2tpZV9zdHJpbmc7DQorICAgICAgICBjaGFyICp0eF9jb29raWVfc3RyaW5nOw0KKyAg ICAgICAgdWludDY0X3QgcnhfY29va2llOw0KKyAgICAgICAgdWludDY0X3QgdHhfY29va2llOw0K KyAgICAgICAgdWludDhfdCAqbmV0d29ya19idWZmZXI7DQorCWludCBmZDsNCisJdm9pZCAqZGV2 Ow0KKyAgICAgICAgdWludDMyX3QgdW1sX2wydHB2M19mbGFnczsNCisgICAgICAgIHVpbnQzMl90 IG1vZGU7DQorICAgICAgICB1aW50MzJfdCBuZXdfbW9kZTsgLyogbGlzdGVuaW5nLCBzZW5kaW5n LCBldGMgKi8NCisgICAgICAgIHVpbnQzMl90IGNvdW50ZXI7DQorICAgDQorCS8qICBQcmVjb21w dXRlZCBvZmZzZXRzICovDQorCSANCisgICAgICAgIHVpbnQzMl90IG9mZnNldDsgICAvKiBtYWlu IG9mZnNldCA9PSBoZWFkZXIgb2Zmc2V0ICovDQorICAgICAgICB1aW50MzJfdCBjb29raWVfb2Zm c2V0Ow0KKyAgICAgICAgdWludDMyX3QgY291bnRlcl9vZmZzZXQ7DQorICAgICAgICB1aW50MzJf dCBzZXNzaW9uX29mZnNldDsNCisNCisJLyogaGlnaCBzcGVlZCB2ZWN0b3IgaW8gZGF0YSAqLw0K KyAgICANCisJdm9pZCAqKiBza2JfdmVjdG9yOw0KKwl2b2lkICogbW1zZ192ZWN0b3I7DQorCXVp bnQzMl90IHZlY3Rvcl9sZW47DQorCXVpbnQzMl90IHJlY3ZfaW5kZXg7DQorCXVpbnQzMl90IHJl Y3ZfZW5xdWV1ZWQ7DQorCS8qIG5vcm1hbGx5IHNhbWUgYXMgb2Zmc2V0LCBhZGQgc2l6ZSBvZiBz dHJ1Y3QgaXB2NCBoZWFkZXIgaW4gaXB2NCByYXcgLSBBUEkgc3R1cGlkaXRpdGllcyAqLw0KKwl1 aW50MzJfdCBoZWFkZXJfc2l6ZTsgDQorDQorfTsgIA0KKw0KKw0KK2V4dGVybiBjb25zdCBzdHJ1 Y3QgbmV0X3VzZXJfaW5mbyB1bWxfbDJ0cHYzX3VzZXJfaW5mbzsNCisNCitleHRlcm4gaW50IHVt bF9sMnRwdjNfdXNlcl9zZW5kbXNnKGludCBmZCwgdm9pZCAqaGVhZGVyLCBpbnQgaGVhZGVybGVu LCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbiwgc3RydWN0IHVtbF9sMnRwdjNfZGF0YSAqcHJpKTsN CisNCitleHRlcm4gaW50IHVtbF9sMnRwdjNfdXNlcl9yZWN2bXNnKGludCBmZCwgdm9pZCAqaGVh ZGVyLCBpbnQgaGVhZGVybGVuLCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbiwgc3RydWN0IHVtbF9s MnRwdjNfZGF0YSAqcHJpKTsNCisNCisNCisNCisjZGVmaW5lIFVNTF9MMlRQVjNfRkxBR19UWF9D SEVDS1NVTVMgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQ0KKyNkZWZpbmUgVU1MX0wyVFBWM19G TEFHX1JYX0NIRUNLU1VNUyAgICAgICAgICAgICAgICAweDAwMDAwMDAyDQorDQorI2VuZGlmDQpk aWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3VtbF9sMnRwdjNfa2Vybi5jIGIvYXJjaC91bS9k cml2ZXJzL3VtbF9sMnRwdjNfa2Vybi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMC4uYWFlOTU1NA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvYXJjaC91bS9kcml2ZXJzL3VtbF9s MnRwdjNfa2Vybi5jDQpAQCAtMCwwICsxLDM1NCBAQA0KKy8qDQorICogQ29weXJpZ2h0IChDKSAy MDEyIC0gMjAxNCBDaXNjbyBTeXN0ZW1zDQorICogQ29weXJpZ2h0IChDKSAyMDAxIExlbm5lcnQg QnV5dGVuaGVrIChidXl0ZW5oQGdudS5vcmcpIGFuZA0KKyAqIEphbWVzIExldSAoamxldUBtaW5k c3ByaW5nLm5ldCkuDQorICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwNyBKZWZmIERpa2UgKGpk aWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pDQorICogQ29weXJpZ2h0IChDKSAyMDAxIGJ5 IHZhcmlvdXMgb3RoZXIgcGVvcGxlIHdobyBkaWRuJ3QgcHV0IHRoZWlyIG5hbWUgaGVyZS4NCisg KiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJsaW51eC9pbml0 LmgiDQorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9ldGh0 b29sLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lwLmg+DQorI2luY2x1ZGUgIm5ldF9rZXJuLmgiDQor I2luY2x1ZGUgInVtbF9sMnRwdjMuaCINCisjaW5jbHVkZSAidW1fbWFsbG9jLmgiDQorDQorI2Rl ZmluZSBEUklWRVJfTkFNRSAidW1sLWwydHB2MyINCisNCisvKiANCisgICB3ZSB3aWxsIHN0aWxs IHVzZSB0aGlzIGlmIHNrYnVmZiBjYW5ub3QgYmUgYWRqdXN0ZWQgdG8gaW5jbHVkZSANCisgICBu ZXR3b3JrIGhlYWRlciANCisqLw0KKw0KK3N0cnVjdCB1bWxfbDJ0cHYzX2luaXQgew0KKwljaGFy ICpsb2NhbF9hZGRyX3N0cmluZzsNCisJY2hhciAqcmVtb3RlX2FkZHJfc3RyaW5nOw0KKwljaGFy ICpsb2NhbF9zZXJ2aWNlOw0KKwljaGFyICpyZW1vdGVfc2VydmljZTsNCisJY2hhciAqcnhfY29v a2llX3N0cmluZzsNCisJY2hhciAqdHhfY29va2llX3N0cmluZzsNCisJY2hhciAqbG9jYWxfc2Vz c2lvbl9zdHJpbmc7DQorCWNoYXIgKnJlbW90ZV9zZXNzaW9uX3N0cmluZzsNCisJY2hhciAqbW9k ZV9zdHJpbmc7DQorCWNoYXIgKm5ld19tb2RlX3N0cmluZzsNCit9Ow0KKw0KK3N0YXRpYyB2b2lk IHVtbF9sMnRwdjNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCisJCQkJc3Ry dWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykNCit7DQorCXN0cmNweShpbmZvLT5kcml2ZXIsIERS SVZFUl9OQU1FKTsNCisJc3RyY3B5KGluZm8tPnZlcnNpb24sICI0MiIpOw0KK30NCisNCisNCisN CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHVtbF9sMnRwdjNfZXRodG9vbF9vcHMg PSB7DQorCS5nZXRfZHJ2aW5mbwkgICAgICAgID0gdW1sX2wydHB2M19nZXRfZHJ2aW5mbywNCisJ LmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssDQorfTsNCisNCisNCisNCitzdGF0aWMg dm9pZCB1bWxfbDJ0cHYzX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkN Cit7DQorCXN0cnVjdCB1bWxfbmV0X3ByaXZhdGUgKnByaTsNCisJc3RydWN0IHVtbF9sMnRwdjNf ZGF0YSAqZHByaTsNCisJc3RydWN0IHVtbF9sMnRwdjNfaW5pdCAqaW5pdCA9IGRhdGE7DQorDQor CXByaSA9IG5ldGRldl9wcml2KGRldik7DQorCWRwcmkgPSAoc3RydWN0IHVtbF9sMnRwdjNfZGF0 YSAqKSBwcmktPnVzZXI7DQorDQorICAgICAgICAvKiANCisJICAgIHRoZXNlIGFyZSBhcyBpcywg d2Uga2VlcCB0aGVtIGZvciBmdXR1cmUgcmVmZXJlbmNlDQorCSAgICBhbmQgcGFyc2UgdGhlbSBp biB1c2Vyc3BhY2UNCisNCisJKi8NCisNCisJZHByaS0+bG9jYWxfYWRkcl9zdHJpbmcgPSBpbml0 LT5sb2NhbF9hZGRyX3N0cmluZzsNCisJZHByaS0+cmVtb3RlX2FkZHJfc3RyaW5nID0gaW5pdC0+ cmVtb3RlX2FkZHJfc3RyaW5nOw0KKwlkcHJpLT5sb2NhbF9zZXJ2aWNlID0gaW5pdC0+bG9jYWxf c2VydmljZTsNCisJZHByaS0+cmVtb3RlX3NlcnZpY2UgPSBpbml0LT5yZW1vdGVfc2VydmljZTsN CisJZHByaS0+cnhfY29va2llX3N0cmluZyA9IGluaXQtPnJ4X2Nvb2tpZV9zdHJpbmc7DQorCWRw cmktPnR4X2Nvb2tpZV9zdHJpbmcgPSBpbml0LT50eF9jb29raWVfc3RyaW5nOw0KKwlkcHJpLT5s b2NhbF9zZXNzaW9uX3N0cmluZyA9IGluaXQtPmxvY2FsX3Nlc3Npb25fc3RyaW5nOw0KKyAgICAg ICAgZHByaS0+cmVtb3RlX3Nlc3Npb25fc3RyaW5nID0gaW5pdC0+cmVtb3RlX3Nlc3Npb25fc3Ry aW5nOw0KKw0KKyAgICAgICAgLyogdGhlIG9ubHkgb25lcyB3ZSBwcmUtcGFyc2UgKi8NCisNCisg ICAgICAgIGlmIChpbml0LT5uZXdfbW9kZV9zdHJpbmcgIT0gTlVMTCkgew0KKwkgICBzc2NhbmYo aW5pdC0+bmV3X21vZGVfc3RyaW5nLCAiJXgiLCAmZHByaS0+bmV3X21vZGUpOw0KKwkgICBwcmlu dGsoIm5ldyBtb2RlICV4XG4iLCBkcHJpLT5uZXdfbW9kZSk7DQorICAgICAgICB9IGVsc2Ugew0K KwkgICBpZiAoaW5pdC0+bW9kZV9zdHJpbmcgIT0gTlVMTCkgew0KKwkgICAgICBzc2NhbmYoaW5p dC0+bW9kZV9zdHJpbmcsICIlaSIsICZkcHJpLT5tb2RlKTsNCisJICAgfSBlbHNlIHsNCisJICAg ICAgZHByaS0+bW9kZT0xOw0KKwkgICB9DQorCSAgIC8qIGxlZ2FjeSBtb2RlcyAqLw0KKwkgICBz d2l0Y2ggKGRwcmktPm1vZGUpIHsNCisJICAgICBjYXNlIDAgOiAgZHByaS0+bmV3X21vZGUgPSBM RUdBQ1lfTU9ERTA7IGJyZWFrIDsNCisJICAgICBjYXNlIDEgOiAgZHByaS0+bmV3X21vZGUgPSBM RUdBQ1lfTU9ERTE7IGJyZWFrIDsNCisJICAgICBjYXNlIDIgOiAgZHByaS0+bmV3X21vZGUgPSBM RUdBQ1lfTU9ERTI7IGJyZWFrIDsNCisgICAgICAgICBjYXNlIDMgOiAgZHByaS0+bmV3X21vZGUg PSBMRUdBQ1lfTU9ERTM7IGJyZWFrIDsNCisJICAgfQ0KKwkgICBwcmludGsoImJhY2t3YXJkcyBj b21wYXRpYmxlIG1vZGUgJWkgbWFwcyB0byBuZXcgbW9kZSAleFxuIiwgZHByaS0+bW9kZSwgZHBy aS0+bmV3X21vZGUpOw0KKyAgICAgICAgfQ0KKw0KKwlkcHJpLT5mZCA9IC0xOw0KKwlkcHJpLT5k ZXYgPSBkZXY7DQorCXByaW50aygibDJ0cHYzIGJhY2tlbmQgLSAlczolczwtPiVzOiVzLCByeGNv b2tpZTogJXMsIHR4Y29va2llOiVzLCBsb2NhbF9zZXNzaW9uOiAlcywgcGVlcl9zZXNzaW9uOiAl c1xuIiwgIGRwcmktPmxvY2FsX2FkZHJfc3RyaW5nLCBkcHJpLT5sb2NhbF9zZXJ2aWNlLCBkcHJp LT5yZW1vdGVfYWRkcl9zdHJpbmcsIGRwcmktPnJlbW90ZV9zZXJ2aWNlLCBkcHJpLT5yeF9jb29r aWVfc3RyaW5nLCBkcHJpLT50eF9jb29raWVfc3RyaW5nLCBkcHJpLT5sb2NhbF9zZXNzaW9uX3N0 cmluZywgZHByaS0+cmVtb3RlX3Nlc3Npb25fc3RyaW5nKTsNCisgICAgICAgIGRwcmktPnVtbF9s MnRwdjNfZmxhZ3MgPSAwOyAvKiB3ZSBoYXZlIGV2ZXJ5dGhpbmcgdHVybmVkIG9mZiBpbml0aWFs bHkgKi8NCisgICAgICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZ1bWxfbDJ0cHYzX2V0aHRvb2xf b3BzKTsNCit9DQorDQorc3RhdGljIGludCB1bWxfbDJ0cHYzX3ZlcmlmeV9oZWFkZXIodWludDhf dCAqIGJ1ZmZlciwgc3RydWN0IHVtbF9sMnRwdjNfZGF0YSAqZHByaSApIHsNCisgICAgdWludDY0 X3QgKmNvb2tpZTY0Ow0KKyAgICB1aW50MzJfdCAqY29va2llMzI7DQorICAgIHVpbnQzMl90ICpz ZXNzaW9uX2lkOw0KKyAgICANCisNCisgICAgaWYgKCghKGRwcmktPm5ld19tb2RlICYgTkVXX01P REVfSVBfVkVSU0lPTikpICYmICghKGRwcmktPm5ld19tb2RlICYgTkVXX01PREVfVURQKSkpew0K KwlidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgLyogZml4IGZvciBpcHY0IHJhdyAqLzsN CisgICAgfSANCisgICAgDQorICAgIHNlc3Npb25faWQgPSAodWludDMyX3QgKikoYnVmZmVyICsg ZHByaS0+c2Vzc2lvbl9vZmZzZXQpOw0KKyAgICBpZiAoKnNlc3Npb25faWQgIT0gZHByaS0+cmVt b3RlX3Nlc3Npb24pIHsNCisJcHJpbnRrKCJVbmtub3duIFNlc2lvbiBpZFxuIik7DQorCXJldHVy biAwOyANCisgICAgfQ0KKw0KKyAgICBpZiAoZHByaS0+bmV3X21vZGUgJiBORVdfTU9ERV9DT09L SUUpIHsNCisgICAgICAgaWYgKGRwcmktPm5ld19tb2RlICYgTkVXX01PREVfQ09PS0lFX1NJWkUp IHsNCisJICAvKiA2NCBiaXQgY29va2llICovDQorCSAgY29va2llNjQgPSAodWludDY0X3QgKiko YnVmZmVyICsgZHByaS0+Y29va2llX29mZnNldCk7DQorCSAgaWYgKCpjb29raWU2NCAhPSBkcHJp LT5yeF9jb29raWUpIHsNCisJICAgICBwcmludGsoInVua25vd24gY29va2llIGlkXG4iKTsNCisJ ICAgICByZXR1cm4gMDsgLyogd2UgbmVlZCB0byByZXR1cm4gMCwgb3RoZXJ3aXNlIGJhcmZ1cyAq Lw0KKwkgIH0NCisgICAgICAgfSBlbHNlIHsNCisJICBjb29raWUzMiA9ICh1aW50MzJfdCAqKShi dWZmZXIgKyBkcHJpLT5jb29raWVfb2Zmc2V0KTsNCisJICBpZiAoKmNvb2tpZTMyICE9ICogKHVp bnQzMl90ICopICZkcHJpLT5yeF9jb29raWUpIHsNCisJICAgICBwcmludGsoInVua25vd24gY29v a2llIGlkXG4iKTsNCisJICAgICByZXR1cm4gMDsgLyogd2UgbmVlZCB0byByZXR1cm4gMCwgb3Ro ZXJ3aXNlIGJhcmZ1cyAqLw0KKwkgIH0NCisgICAgICAgfQ0KKyAgICB9DQorICAgIHJldHVybiAx Ow0KK30NCisNCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKiB1bWxfbDJ0cHYzX211bHRpcmVhZCAo c3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqIGxwKSB7DQorICAgIHN0cnVjdCB1bWxfbDJ0cHYzX2Rh dGEgKmRwcmkgPSAoc3RydWN0IHVtbF9sMnRwdjNfZGF0YSAqKSAmbHAtPnVzZXI7DQorICAgIHZv aWQgKiogc2tiX3ZlY3RvciA9IGRwcmktPnNrYl92ZWN0b3I7DQorICAgIHN0cnVjdCBtbXNnaGRy ICogbW1zZ192ZWN0b3IgPSAoc3RydWN0IG1tc2doZHIgKikgZHByaS0+bW1zZ192ZWN0b3I7DQor ICAgIHN0cnVjdCBza19idWZmICogcmVzdWx0Ow0KKyAgICBzdHJ1Y3QgaW92ZWMgKiBpb3Y7DQor ICAgIGludCByZXQ7DQorICAgIA0KKyAgICANCisgICAgLyogQXJlIHdlIGRvbmUgcHJvY2Vzc2lu ZyB0aGUgZW5xdWV1ZWQgYnVmZmVycyAqLw0KKw0KKw0KKyAgICBpZiAoZHByaS0+cmVjdl9pbmRl eCA+PSBkcHJpLT5yZWN2X2VucXVldWVkKSB7DQorCS8qIERvIHdlIG5lZWQgdG8gcmVmcmVzaCB0 aGUgYnVmZmVyIGxpc3QgKi8NCisJaWYgKGRwcmktPnJlY3ZfZW5xdWV1ZWQpIHsNCisJICAgIC8q IFJlcGxhY2UgZHByaS0+cmVjdl9lbnF1ZXVlZCBza2J1ZmZzICovDQorCSAgICByZWJ1aWxkX3Nr YnVmX3ZlY3Rvcihza2JfdmVjdG9yLCBkcHJpLT5yZWN2X2VucXVldWVkLCBscC0+ZGV2KTsNCisJ ICAgIC8qIFJlYnVpbGQgbWVzc2FnZSB2ZWN0b3IgKi8NCisJICAgIGFkZF9za2J1ZmZzKGRwcmkt Pm1tc2dfdmVjdG9yLCBza2JfdmVjdG9yLCBkcHJpLT5yZWN2X2VucXVldWVkLCBscC0+bWF4X3Bh Y2tldCwgMSk7DQorCX0NCisJcmV0ID0gbmV0X3JlY3ZtbXNnKA0KKwkgICAgZHByaS0+ZmQsIGRw cmktPm1tc2dfdmVjdG9yLCBkcHJpLT52ZWN0b3JfbGVuLCAwLE5VTEwpOw0KKwlpZiAocmV0ID49 IDApIHsNCisJICAgIGRwcmktPnJlY3ZfZW5xdWV1ZWQgPSByZXQ7DQorCX0gZWxzZSB7DQorCSAg ICBwcmludGsoIkVycm9yIGluIG11bHRpLXBhY2tldCByZWNlaXZlICVkXG4iLCByZXQpOw0KKwkg ICAgcmV0dXJuIE5VTEw7DQorCX0NCisJZHByaS0+cmVjdl9pbmRleCA9IDA7DQorICAgIH0NCisg ICAgLyogY2hlY2sgaWYgd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyB0aGUgZW5xdWV1ZWQgYnVmZmVy cyAqLw0KKyAgICBpZiAoZHByaS0+cmVjdl9pbmRleCA8IGRwcmktPnJlY3ZfZW5xdWV1ZWQpIHsN CisJc2tiX3ZlY3RvciArPSBkcHJpLT5yZWN2X2luZGV4Ow0KKwltbXNnX3ZlY3RvciArPSBkcHJp LT5yZWN2X2luZGV4Ow0KKwlkcHJpLT5yZWN2X2luZGV4ICsrOw0KKwlpb3YgPSBtbXNnX3ZlY3Rv ci0+bXNnX2hkci5tc2dfaW92Ow0KKwlpZiAoDQorCSAgICAoaW92KSAmJg0KKwkgICAgKG1tc2df dmVjdG9yLT5tc2dfbGVuID4gZHByaS0+aGVhZGVyX3NpemUpICYmIA0KKwkgICAgKHVtbF9sMnRw djNfdmVyaWZ5X2hlYWRlcihpb3YtPmlvdl9iYXNlLCBkcHJpKSkNCisJKSB7DQorCSAgICBpZiAo KCFkcHJpLT5yZW1vdGVfYWRkcikgJiYgKG1tc2dfdmVjdG9yLT5tc2dfaGRyLm1zZ19uYW1lKSkg ew0KKwkJZHByaS0+cmVtb3RlX2FkZHIgPSBtbXNnX3ZlY3Rvci0+bXNnX2hkci5tc2dfbmFtZTsN CisJCWRwcmktPnJlbW90ZV9hZGRyX3NpemUgPSBtbXNnX3ZlY3Rvci0+bXNnX2hkci5tc2dfbmFt ZWxlbjsNCisJCW1tc2dfdmVjdG9yLT5tc2dfaGRyLm1zZ19uYW1lID0gTlVMTDsNCisJCW1tc2df dmVjdG9yLT5tc2dfaGRyLm1zZ19uYW1lbGVuID0gMDsNCisJICAgIH0NCisgICAgDQorCSAgICBy ZXN1bHQgPSAoc3RydWN0IHNrX2J1ZmYgKikoKiBza2JfdmVjdG9yKTsNCisJICAgIGlmIChyZXN1 bHQpIHsNCisJCXNrYl90cmltKHJlc3VsdCwgbW1zZ192ZWN0b3ItPm1zZ19sZW4gLSBkcHJpLT5o ZWFkZXJfc2l6ZSk7DQorCQlyZXN1bHQtPnByb3RvY29sID0gKCpscC0+cHJvdG9jb2wpKHJlc3Vs dCk7DQorCSAgICB9DQorCX0gZWxzZSB7DQorCSAgICB1bWxfbmV0X2Rlc3Ryb3lfc2tiKCogc2ti X3ZlY3RvciApIDsgLyogb3RoZXJ3aXNlIHdlIGxlYWsgaXQgKi8NCisJICAgIHJlc3VsdCA9IE5V TEw7DQorCX0NCisgICAgfSBlbHNlIHsNCisJcmVzdWx0ID0gTlVMTDsNCisgICAgfQ0KKyAgICBy ZXR1cm4gcmVzdWx0Ow0KK30NCisNCitzdGF0aWMgaW50IHVtbF9sMnRwdjNfcmVhZChpbnQgZmQs IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1bWxfbmV0X3ByaXZhdGUgKmxwKQ0KK3sNCisg ICAgaW50IHJlc3VsdDsNCisgICAgc3RydWN0IHVtbF9sMnRwdjNfZGF0YSAqZHByaSA9IChzdHJ1 Y3QgdW1sX2wydHB2M19kYXRhICopICZscC0+dXNlcjsNCisgICAgdWludDhfdCAgKmJ1ZmZlciA7 DQorDQorDQorICAgIGludCBvZmZzZXQgPSBkcHJpLT5vZmZzZXQ7DQorICAgIA0KKyAgICBidWZm ZXIgPSBkcHJpLT5uZXR3b3JrX2J1ZmZlcjsNCisNCisgICAgaWYgKCEoZHByaS0+bmV3X21vZGUg JiBORVdfTU9ERV9VRFApICYmICEoZHByaS0+bmV3X21vZGUgJiBORVdfTU9ERV9JUF9WRVJTSU9O KSkNCisgICAgew0KKwkvKiBJUHY0IFJBVyBtb2RlOiBBY2NvdW50IGZvciB0aGUgSVAgaGVhZGVy IHRoYXQgd2lsbCBiZSByZWNlaXZlZCAqLw0KKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBpcGhk cik7DQorICAgIH0NCisgICAgIA0KKw0KKyAgICAgICAgcmVzdWx0ID0gdW1sX2wydHB2M191c2Vy X3JlY3Ztc2coDQorCSAgICBmZCwgDQorCSAgICBidWZmZXIsIG9mZnNldCwNCisJICAgIHNrYi0+ ZGF0YSwgc2tiLT5kZXYtPm10dSArIEVUSF9IRUFERVJfT1RIRVIsDQorCSAgICBkcHJpDQorICAg ICk7DQorICAgIGlmIChyZXN1bHQgPD0gMCkgew0KKwlyZXR1cm4gcmVzdWx0Ow0KKyAgICB9IA0K KyAgICBpZiAoDQorCSEoZHByaS0+bmV3X21vZGUgJiBORVdfTU9ERV9VRFApICYmIA0KKwkhKGRw cmktPm5ld19tb2RlICYgTkVXX01PREVfSVBfVkVSU0lPTikNCisgICAgKSB7DQorCS8qIElQdjQg UkFXIG1vZGU6IElnbm9yZSB0aGUgSVAgaGVhZGVyICovDQorCWJ1ZmZlciArPSBzaXplb2Yoc3Ry dWN0IGlwaGRyKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoKHJlc3VsdCA+IG9mZnNldCkgJiYgKHVt bF9sMnRwdjNfdmVyaWZ5X2hlYWRlcihidWZmZXIsIGRwcmkpKSkgew0KKwlpZiAoKGRwcmktPnVt bF9sMnRwdjNfZmxhZ3MgJiBVTUxfTDJUUFYzX0ZMQUdfUlhfQ0hFQ0tTVU1TKSAhPSAwKSB7DQor CSAgIHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7DQorCX0NCisJcmV0dXJu IHJlc3VsdCAtIG9mZnNldDsNCisgICAgfSBlbHNlIHsNCisJcmV0dXJuIDA7DQorICAgIH0NCit9 DQorDQorc3RhdGljIHZvaWQgdW1sX2wydHB2M19mb3JtX2hlYWRlcih1aW50OF90ICogYnVmZmVy LCBzdHJ1Y3QgdW1sX2wydHB2M19kYXRhICpwcmkpIHsNCisgICAgICAgIHVpbnQzMl90ICpoZWFk ZXI7DQorICAgICAgICB1aW50MzJfdCAqc2Vzc2lvbjsNCisgICAgICAgIHVpbnQ2NF90ICpjb29r aWU2NDsNCisgICAgICAgIHVpbnQzMl90ICpjb29raWUzMjsNCisgICAgICAgIHVpbnQzMl90ICpj b3VudGVyOw0KKwlpZiAocHJpLT5uZXdfbW9kZSAmIE5FV19NT0RFX1VEUCkgew0KKwkgICBoZWFk ZXIgPSAodWludDMyX3QgKikgYnVmZmVyOw0KKwkgICAqIGhlYWRlciA9IGh0b25sKDB4MzAwMDAp Ow0KKyAgICAgICAgfQ0KKwlzZXNzaW9uID0gKHVpbnQzMl90ICopIChidWZmZXIgKyBwcmktPnNl c3Npb25fb2Zmc2V0KTsNCisJKnNlc3Npb24gPSBwcmktPmxvY2FsX3Nlc3Npb247DQorDQorICAg ICAgICBpZiAocHJpLT5uZXdfbW9kZSAmIE5FV19NT0RFX0NPT0tJRSkgew0KKwkgICAgaWYgKHBy aS0+bmV3X21vZGUgJiBORVdfTU9ERV9DT09LSUVfU0laRSkgew0KKwkgICAgICAgY29va2llNjQg PSAodWludDY0X3QgKikoYnVmZmVyICsgcHJpLT5jb29raWVfb2Zmc2V0KTsNCisJICAgICAgICog Y29va2llNjQgPSBwcmktPnR4X2Nvb2tpZTsNCisJICAgIH0gZWxzZSB7DQorCSAgICAgICBjb29r aWUzMiA9ICh1aW50MzJfdCAqKSAoYnVmZmVyICsgcHJpLT5jb29raWVfb2Zmc2V0KTsNCisJICAg ICAgICogY29va2llMzIgPSAqICgodWludDMyX3QgKikgJnByaS0+dHhfY29va2llKTsNCisJICAg IH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICghKHByaS0+bmV3X21vZGUgJiBORVdfTU9E RV9OT19DT1VOVEVSKSkgew0KKwkgICAgY291bnRlciA9ICh1aW50MzJfdCAqKShidWZmZXIgKyBw cmktPmNvdW50ZXJfb2Zmc2V0KTsNCisJICAgICogY291bnRlciA9IGh0b25sKCsrcHJpLT5jb3Vu dGVyKTsNCisgICAgICAgIH0NCit9DQorDQorc3RhdGljIGludCB1bWxfbDJ0cHYzX3dyaXRlKGlu dCBmZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqbHApDQor ew0KKyAgICAgICAgc3RydWN0IHVtbF9sMnRwdjNfZGF0YSAqcHJpID0gKHN0cnVjdCB1bWxfbDJ0 cHYzX2RhdGEgKikgJmxwLT51c2VyOw0KKyAgICAgICAgdWludDhfdCAqYnVmZmVyID0gcHJpLT5u ZXR3b3JrX2J1ZmZlcjsNCisgICAgICAgIGludCByZXN1bHQ7DQorDQorIA0KKwlidWZmZXIgPSAo dWludDhfdCAqKSAgcHJpLT5uZXR3b3JrX2J1ZmZlcjsNCisNCisJdW1sX2wydHB2M19mb3JtX2hl YWRlcihidWZmZXIsIHByaSk7DQorDQorCXJlc3VsdCA9IHVtbF9sMnRwdjNfdXNlcl9zZW5kbXNn KA0KKwkgICAgZmQsIA0KKwkgICAgYnVmZmVyLCBwcmktPm9mZnNldCwNCisJICAgIHNrYi0+ZGF0 YSwgc2tiLT5sZW4sDQorCSAgICBwcmkNCisJKTsgICANCisgICAgDQorICAgICAgICBpZiAocmVz dWx0ID4gcHJpLT5vZmZzZXQpIHsNCisJICAgIHJldHVybiByZXN1bHQgLSBwcmktPm9mZnNldDsN CisgICAgICAgIH0gZWxzZSB7DQorCSAgICByZXR1cm4gcmVzdWx0OyAvKiBub3QgcGFydGljdWxh cmx5IGNvcnJlY3QgKi8NCisgICAgICAgIH0NCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBu ZXRfa2Vybl9pbmZvIHVtbF9sMnRwdjNfa2Vybl9pbmZvID0gew0KKwkub3B0aW9ucwkJPSBVTUxf TkVUX1VTRV9TS0JfUkVBRCwNCisJLmluaXQJCQk9IHVtbF9sMnRwdjNfaW5pdCwNCisJLnByb3Rv Y29sCQk9IGV0aF9wcm90b2NvbCwNCisJLnJlYWQJCQk9IHVtbF9sMnRwdjNfcmVhZCwNCisJLnNr Yl9yZWFkCQk9IHVtbF9sMnRwdjNfbXVsdGlyZWFkLA0KKwkud3JpdGUJCQk9IHVtbF9sMnRwdjNf d3JpdGUsDQorfTsNCisNCitzdGF0aWMgaW50IHVtbF9sMnRwdjNfc2V0dXAoY2hhciAqc3RyLCBj aGFyICoqbWFjX291dCwgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCB1bWxfbDJ0cHYzX2luaXQg KmluaXQgPSBkYXRhOw0KKwljaGFyICpyZW1haW47DQorDQorCSppbml0ID0gKA0KKwkJKHN0cnVj dCB1bWxfbDJ0cHYzX2luaXQpDQorCQkgICB7IA0KKwkJICAgICAubG9jYWxfYWRkcl9zdHJpbmcg PSAiOjoxIiwNCisJCSAgICAgLmxvY2FsX3NlcnZpY2UgPSAiMTcwMSIsDQorCQkgICAgIC5yZW1v dGVfc2VydmljZSA9ICIxNzAyIiwNCisJCSAgICAgLnJ4X2Nvb2tpZV9zdHJpbmcgPSAiMHhkZWFk YmVlZmRlYWRiZWVmIiwNCisJCSAgICAgLnR4X2Nvb2tpZV9zdHJpbmcgPSAiMHhkZWFkYmVlZmRl YWRiZWVmIiwNCisJCSAgICAgLmxvY2FsX3Nlc3Npb25fc3RyaW5nID0gIjB4RkZGRkZGRkYiLA0K KwkJICAgICAucmVtb3RlX3Nlc3Npb25fc3RyaW5nID0gIjB4RkZGRkZGRkYiLA0KKwkJICAgICAu bW9kZV9zdHJpbmcgPSAiMCIsDQorCQkgICB9DQorCSAgICAgICAgKTsNCisNCisJcmVtYWluID0g c3BsaXRfaWZfc3BlYyhzdHIsIG1hY19vdXQsICZpbml0LT5sb2NhbF9hZGRyX3N0cmluZywgJmlu aXQtPmxvY2FsX3NlcnZpY2UsICZpbml0LT5yZW1vdGVfYWRkcl9zdHJpbmcsICZpbml0LT5yZW1v dGVfc2VydmljZSwgJmluaXQtPnJ4X2Nvb2tpZV9zdHJpbmcsICZpbml0LT50eF9jb29raWVfc3Ry aW5nLCAmaW5pdC0+bG9jYWxfc2Vzc2lvbl9zdHJpbmcsICZpbml0LT5yZW1vdGVfc2Vzc2lvbl9z dHJpbmcsICZpbml0LT5tb2RlX3N0cmluZywgJmluaXQtPm5ld19tb2RlX3N0cmluZywgTlVMTCk7 DQorCWlmIChyZW1haW4gIT0gTlVMTCkNCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiBTdHJhbmdl IGludGVyZmFjZSBzcGVjIFxuIik7DQorDQorCXJldHVybiAxOw0KK30NCisNCitzdGF0aWMgc3Ry dWN0IHRyYW5zcG9ydCB1bWxfbDJ0cHYzX3RyYW5zcG9ydCA9IHsNCisJLmxpc3QgCQk9IExJU1Rf SEVBRF9JTklUKHVtbF9sMnRwdjNfdHJhbnNwb3J0Lmxpc3QpLA0KKwkubmFtZSAJCT0gImwydHB2 MyIsDQorCS5zZXR1cCAgCT0gdW1sX2wydHB2M19zZXR1cCwNCisJLnVzZXIgCQk9ICZ1bWxfbDJ0 cHYzX3VzZXJfaW5mbywNCisJLmtlcm4gCQk9ICZ1bWxfbDJ0cHYzX2tlcm5faW5mbywNCisJLnBy aXZhdGVfc2l6ZSAJPSBzaXplb2Yoc3RydWN0IHVtbF9sMnRwdjNfZGF0YSksDQorCS5zZXR1cF9z aXplIAk9IHNpemVvZihzdHJ1Y3QgdW1sX2wydHB2M19pbml0KSwNCit9Ow0KKw0KK3N0YXRpYyBp bnQgcmVnaXN0ZXJfdW1sX2wydHB2Myh2b2lkKQ0KK3sNCisJcmVnaXN0ZXJfdHJhbnNwb3J0KCZ1 bWxfbDJ0cHYzX3RyYW5zcG9ydCk7DQorCXJldHVybiAwOw0KK30NCisNCitsYXRlX2luaXRjYWxs KHJlZ2lzdGVyX3VtbF9sMnRwdjMpOw0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91bWxf bDJ0cHYzX3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy91bWxfbDJ0cHYzX3VzZXIuYw0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjljOTg1OGUNCi0tLSAvZGV2L251bGwNCisr KyBiL2FyY2gvdW0vZHJpdmVycy91bWxfbDJ0cHYzX3VzZXIuYw0KQEAgLTAsMCArMSwzOTEgQEAN CisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IENpc2NvIFN5c3RlbXMNCisgKiBDb3B5 cmlnaHQgKEMpIDIwMDEgLSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50 ZWx9LmNvbSkNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTGVubmVydCBCdXl0ZW5oZWsgKGJ1eXRl bmhAZ251Lm9yZykgYW5kDQorICogSmFtZXMgTGV1IChqbGV1QG1pbmRzcHJpbmcubmV0KS4NCisg KiBDb3B5cmlnaHQgKEMpIDIwMDEgYnkgdmFyaW91cyBvdGhlciBwZW9wbGUgd2hvIGRpZG4ndCBw dXQgdGhlaXIgbmFtZSBoZXJlLg0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuDQorICovDQor DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxz dGRpbnQuaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPGVycm5vLmg+DQorI2lu Y2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCisjaW5jbHVkZSA8bmV0 L2lmLmg+DQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+ DQorI2luY2x1ZGUgPG5ldGRiLmg+DQorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPg0KKyNpbmNs dWRlIDxuZXRpbmV0L2lwLmg+DQorI2luY2x1ZGUgPG5ldGluZXQvZXRoZXIuaD4NCisjaW5jbHVk ZSA8bGludXgvaWZfZXRoZXIuaD4NCisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+DQorI2lu Y2x1ZGUgPGFycGEvaW5ldC5oPg0KKw0KKyNpbmNsdWRlICJ1bWxfbDJ0cHYzLmgiDQorI2luY2x1 ZGUgIm5ldF91c2VyLmgiDQorI2luY2x1ZGUgIm9zLmgiDQorI2luY2x1ZGUgInVtX21hbGxvYy5o Ig0KKyNpbmNsdWRlICJ1c2VyLmgiDQorDQorI2RlZmluZSBWRUNUT1JfU0laRSAzMg0KKw0KK2lu dCBsMnRwdjNfcGFyc2VfY29va2llMzIoY2hhciAqc3JjICwgdm9pZCAqIGRzdCkgew0KKw0KKyAg aWYgKA0KKwkgKHNyYyA9PSBOVUxMKSB8fCANCisJIChzc2NhbmYoc3JjLCAiJXgiLCAodW5zaWdu ZWQgaW50ICopIGRzdCkgIT0gMSkNCisgICAgICApIHsgDQorCSBwcmludGsoVU1fS0VSTl9FUlIg ImNhbm5vdCBwYXJzZSBjb29raWUhISE6ICVzXG4iLCBzcmMpOw0KKwkgcmV0dXJuIC0xOw0KKyAg IH0gDQorICAgDQorICAgKiAoKCB1aW50MzJfdCAqKSBkc3QpID0gaHRvbmwoKiAoKHVpbnQzMl90 KiApZHN0KSk7DQorDQorICAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBsMnRwdjNfcGFyc2VfY29v a2llNjQoY2hhciAqc3JjICwgdm9pZCAqIGRzdCkgew0KKw0KKyAgIHN0cnVjdCB0ZW1waHRvbmwg dGVtcGg7DQorICAgdWludDMyX3QgdGVtcDsNCisgICBjb25zdCBpbnQgbnVtID0gNDI7DQorICAg aWYgKA0KKwkgKHNyYyA9PSBOVUxMKSB8fCANCisJIChzc2NhbmYoc3JjLCAiJWxseCIsIChsb25n IHVuc2lnbmVkIGludCAqKSAmdGVtcGgpICE9IDEpDQorICAgICAgKSB7IA0KKwkgcHJpbnRrKFVN X0tFUk5fRVJSICJjYW5ub3QgcGFyc2UgY29va2llISEhOiAlc1xuIiwgc3JjKTsNCisJIHJldHVy biAtMTsNCisgICB9IA0KKyAgIGlmKCooY2hhciAqKSZudW0gPT0gNDIpIHsNCisgICAgICAvLyB3 aHkgb2ggd2h5IHRoZXJlIGlzIG5vIGh0b25sbA0KKyAgICAgIHRlbXAgPSBodG9ubCh0ZW1waC5o aWdoKTsNCisgICAgICB0ZW1waC5oaWdoID0gaHRvbmwodGVtcGgubG93KTsNCisgICAgICB0ZW1w aC5sb3cgPSB0ZW1wOw0KKyAgIH0gZWxzZSB7DQorICAgICAgdGVtcGgubG93ID0gaHRvbmwodGVt cGgubG93KTsgDQorICAgICAgdGVtcGguaGlnaCA9IGh0b25sKHRlbXBoLmhpZ2gpOw0KKyAgIH0J DQorDQorICAgbWVtY3B5KGRzdCwgJnRlbXBoLCBzaXplb2YgKHVpbnQ2NF90KSk7DQorICAgcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdW1sX2wydHB2M191c2VyX2luaXQodm9pZCAqZGF0 YSwgdm9pZCAqZGV2KQ0KK3sNCisJc3RydWN0IHVtbF9sMnRwdjNfZGF0YSAqcHJpID0gZGF0YTsN CisJaW50IGZkOw0KKyAgICAgICAgaW50IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0Ow0KKw0KKyAg ICAgICAgaW50IHNvY2tfZmFtaWx5LCBzb2NrX3R5cGUsIHNvY2tfcHJvdG87DQorICAgICAgICAN CisgICAgICAgIA0KKwkvKiANCisJIA0KKwlUaGlzIG1heSBsb29rIHVnbHksIGJ1dCB0aGVyZSBp cyBubyB3YXkgYWJvdXQgaXQNCisgICAgICAgIFVNTCBESVkgdGhyZWFkaW5nIGlzIGluY29tcGF0 aWJsZSB3aXRoIGdldGFkZHJpbmZvDQorICAgICAgICBzbyBhbGwgcmVzb2x1dGlvbiBoYXMgdG8g YmUgZG9uZSB1c2luZyBsZWdhY3kgZnVuY3Rpb25zDQorICAgDQorICAgICAgICAqLw0KKyAgICAg IA0KKyAgICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgTG9jYWxTb2NrOw0KKyAgIA0KKyAg ICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqTG9jYWxTb2NrdjY7DQorICAgICAgICBzdHJ1Y3Qg c29ja2FkZHJfaW42ICpSZW1vdGVTb2NrdjY7DQorDQorICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJf aW4gKkxvY2FsU29ja3Y0OyANCisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqUmVtb3RlU29j a3Y0OyANCisNCisJc3RydWN0IG1tc2doZHIgKiBtbXNnaGRyOw0KKw0KKwlwcmktPm9mZnNldCA9 IDQ7DQorICAgICAgICBwcmktPnNlc3Npb25fb2Zmc2V0ID0gMDsNCisgICAgICAgIHByaS0+Y29v a2llX29mZnNldCA9IDQ7DQorICAgICAgICBwcmktPmNvdW50ZXJfb2Zmc2V0ID0gNDsNCisgDQor ICAgICAgICBMb2NhbFNvY2t2NCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJkxvY2FsU29jazsN CisgICAgICAgIExvY2FsU29ja3Y2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJkxvY2FsU29j azsNCisgICAgICAgIA0KKyAgICAgICAgcHJpbnRrKFVNX0tFUk5fSU5GTyAibDJ0cHYzIHVzZXIg aW5pdCBtb2RlICVpXG4iLCBwcmktPm1vZGUpOw0KKw0KKw0KKyAgICAgICAgLyogYmFzaWMgdmFy aWFibGUgcGFyc2luZyAqLw0KKwkgDQorCXByaS0+bG9jYWxfc2Vzc2lvbiA9IDA7DQorICAgICAg ICBpZiAobDJ0cHYzX3BhcnNlX2Nvb2tpZTMyKHByaS0+bG9jYWxfc2Vzc2lvbl9zdHJpbmcsJnBy aS0+bG9jYWxfc2Vzc2lvbikgIT0wKSB7DQorICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAg ICB9DQorICAgICAgICBwcmktPnJlbW90ZV9zZXNzaW9uID0gMDsNCisgICAgICAgIGlmIChsMnRw djNfcGFyc2VfY29va2llMzIocHJpLT5yZW1vdGVfc2Vzc2lvbl9zdHJpbmcsJnByaS0+cmVtb3Rl X3Nlc3Npb24pICE9MCkgew0KKyAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0K KyAgICAgICAgaWYgKHByaS0+bmV3X21vZGUgJiBORVdfTU9ERV9DT09LSUUpIHsNCisJICAgaWYg KHByaS0+bmV3X21vZGUgJiBORVdfTU9ERV9DT09LSUVfU0laRSkgew0KKwkgICAgICAvKiA2NCBi aXQgY29va2llICovDQorCSAgICAgIHByaS0+b2Zmc2V0ICs9IDg7DQorCSAgICAgIHByaS0+Y291 bnRlcl9vZmZzZXQgKz0gODsNCisJICAgICAgaWYgKGwydHB2M19wYXJzZV9jb29raWU2NChwcmkt PnR4X2Nvb2tpZV9zdHJpbmcsJnByaS0+dHhfY29va2llKSAhPTApIHsNCisJCSAgcmV0dXJuIC0x Ow0KKwkgICAgICB9DQorCSAgICAgIGlmIChsMnRwdjNfcGFyc2VfY29va2llNjQocHJpLT5yeF9j b29raWVfc3RyaW5nLCZwcmktPnJ4X2Nvb2tpZSkgIT0wKSB7DQorCQkgIHJldHVybiAtMTsNCisJ ICAgICAgfQ0KKwkgICB9IGVsc2Ugew0KKwkgICAgICAvKiAzMiBiaXQgY29va2llICovDQorCSAg ICAgIHByaS0+b2Zmc2V0ICs9IDQ7DQorCSAgICAgIHByaS0+Y291bnRlcl9vZmZzZXQgKz00Ow0K KwkgICAgICBwcmktPnR4X2Nvb2tpZSA9IDA7DQorCSAgICAgIGlmIChsMnRwdjNfcGFyc2VfY29v a2llMzIocHJpLT50eF9jb29raWVfc3RyaW5nLCZwcmktPnR4X2Nvb2tpZSkgIT0wKSB7DQorCQkg IHJldHVybiAtMTsNCisJICAgICAgfQ0KKwkgICAgICBwcmktPnJ4X2Nvb2tpZSA9IDA7DQorCSAg ICAgIGlmIChsMnRwdjNfcGFyc2VfY29va2llMzIocHJpLT5yeF9jb29raWVfc3RyaW5nLCZwcmkt PnJ4X2Nvb2tpZSkgIT0wKSB7DQorCQkgIHJldHVybiAtMTsNCisJICAgICAgfQ0KKwkgICB9DQor ICAgICAgICB9DQorCSANCisgICAgICAgIGlmIChwcmktPmxvY2FsX3NlcnZpY2UpIHsNCisJICAg c3NjYW5mKHByaS0+bG9jYWxfc2VydmljZSwgIiVpIiwgJmxvY2FsX3BvcnQpOw0KKyAgICAgICAg fQ0KKyAgICAgIA0KKyAgICAgICAgaWYgKHByaS0+cmVtb3RlX3NlcnZpY2UpIHsNCisJICAgc3Nj YW5mKHByaS0+cmVtb3RlX3NlcnZpY2UsICIlaSIsICZyZW1vdGVfcG9ydCk7DQorICAgICAgICB9 DQorICANCisgICAgICAgIGlmIChwcmktPnJlbW90ZV9hZGRyX3N0cmluZykgeyAgICAgICAgIA0K Kw0KKwkgICAvKiB3ZSBub3cgYWxsb2NhdGUgaXQgb25seSBpZiBpdCB3ZSBhcmUgbm90ICJsaXN0 ZW5pbmciICovDQorDQorCSAgIHByaS0+cmVtb3RlX2FkZHIgPSB1bWxfa21hbGxvYyhzaXplb2Yo c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpLCBVTV9HRlBfS0VSTkVMKTsNCisgICAgICAgIH0gZWxz ZSB7DQorCSAgIHByaS0+cmVtb3RlX2FkZHIgPSBOVUxMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg ICAgaWYgKHByaS0+bmV3X21vZGUgJiBORVdfTU9ERV9JUF9WRVJTSU9OKSB7DQorCSAgICAvKiBJ UHY2ICovDQorCSAgICBzb2NrX2ZhbWlseSA9IEFGX0lORVQ2Ow0KKyAgICAgICAgfSBlbHNlIHsN CisJICAgIC8qIElQdjQgKi8NCisJICAgIHNvY2tfZmFtaWx5ID0gQUZfSU5FVDsNCisgICAgICAg IH0NCisJaWYgKHByaS0+bmV3X21vZGUgJiBORVdfTU9ERV9VRFApIHsNCisJICAgIHByaW50ayhV TV9LRVJOX0VSUiAidW1sX2wydHB2M19vcGVuIDogcHJlcGFyaW5nIHVkcCBzb2NrZXQgZm9yIG1v ZGUgJXhcbiAiLCBwcmktPm5ld19tb2RlKTsNCisJICAgIHNvY2tfdHlwZSA9IFNPQ0tfREdSQU07 DQorCSAgICBzb2NrX3Byb3RvID0gMDsNCisgICANCisJICAgIC8qIHNwYWNlIGZvciBoZWFkZXIu IEluIFVEUCBtb2RlLCB0aGUgDQorICAgICAgICAgKiBlZ3Jlc3MgcGFja2V0IGFsc28gaW5jbHVk ZXMgdGhlIA0KKyAgICAgICAgICogJ1ZlcicgYW5kICdSZXNlcnZlZCcgZmllbGRzLg0KKyAgICAg ICAgICovDQorDQorCSAgICBwcmktPm9mZnNldCArPSA0Ow0KKwkgICAgcHJpLT5jb3VudGVyX29m ZnNldCArPSA0Ow0KKwkgICAgcHJpLT5zZXNzaW9uX29mZnNldCArPSA0Ow0KKwkgICAgcHJpLT5j b29raWVfb2Zmc2V0ICs9IDQ7DQorICAgICAgICB9IGVsc2Ugew0KKwkgICAgcHJpbnRrKFVNX0tF Uk5fRVJSICJ1bWxfbDJ0cHYzX29wZW4gOiBwcmVwYXJpbmcgcmF3IHNvY2tldCBmb3IgbW9kZSAl eFxuICIsIHByaS0+bmV3X21vZGUpOw0KKwkgICAgc29ja190eXBlID0gU09DS19SQVc7DQorCSAg ICBzb2NrX3Byb3RvID0gMHg3MzsNCisJICAgIGxvY2FsX3BvcnQgPSAweDczOw0KKwkgICAgcmVt b3RlX3BvcnQgPSAweDczOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKCEocHJpLT5uZXdf bW9kZSAmIE5FV19NT0RFX05PX0NPVU5URVIpKSB7DQorCSAgICBwcmktPm9mZnNldCArPSA0Ow0K KyAgICAgICAgfQ0KKw0KKw0KKwlpZiAoKGZkID0gc29ja2V0KHNvY2tfZmFtaWx5LCBzb2NrX3R5 cGUsIHNvY2tfcHJvdG8pKSA9PSAtMSkgew0KKwkgICAgZmQgPSAtZXJybm87DQorCSAgICBwcmlu dGsoVU1fS0VSTl9FUlIgInVtbF9sMnRwdjNfb3BlbiA6IHNvY2tldCBjcmVhdGlvbiBmYWlsZWQs ICINCisJICAgICAgICJlcnJubyA9ICVkXG4iLCAtZmQpOw0KKwkgICAgICByZXR1cm4gZmQ7DQor CX0NCisNCisgICAgICAgIGlmIChwcmktPm5ld19tb2RlICYgTkVXX01PREVfSVBfVkVSU0lPTikg ew0KKwkgICAgTG9jYWxTb2NrdjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7DQorCSAgICBMb2Nh bFNvY2t2Ni0+c2luNl9wb3J0ID0gaHRvbnMobG9jYWxfcG9ydCk7DQorCSAgICBpZiAoaW5ldF9w dG9uKEFGX0lORVQ2LHByaS0+bG9jYWxfYWRkcl9zdHJpbmcsICZMb2NhbFNvY2t2Ni0+c2luNl9h ZGRyKSA8ICAxKSB7DQorCSAgICAgICBwcmludGsoVU1fS0VSTl9FUlIgInVtbF9sMnRwdjNfb3Bl biA6IGxvY2FsIGFkZHJlc3MgY29udmVyc2lvbiBmYWlsZWQgIik7DQorCSAgICAgICByZXR1cm4g LTE7ICAgIA0KKwkgICAgfQ0KKyAgICAgICAgfSBlbHNlIHsNCisJICAgIExvY2FsU29ja3Y0LT5z aW5fZmFtaWx5ID0gQUZfSU5FVDsNCisJICAgIExvY2FsU29ja3Y0LT5zaW5fcG9ydCA9IGh0b25z KGxvY2FsX3BvcnQpOw0KKwkgICAgaWYgKGluZXRfcHRvbihBRl9JTkVULHByaS0+bG9jYWxfYWRk cl9zdHJpbmcsICZMb2NhbFNvY2t2NC0+c2luX2FkZHIpIDwgIDEpIHsNCisJICAgICAgIHByaW50 ayhVTV9LRVJOX0VSUiAidW1sX2wydHB2M19vcGVuIDogbG9jYWwgYWRkcmVzcyBjb252ZXJzaW9u IGZhaWxlZCAiKTsNCisJICAgICAgIHJldHVybiAtMTsgICAgDQorCSAgICB9DQorICAgICAgICB9 DQorICAgICAgICBpZiAocHJpLT5yZW1vdGVfYWRkcikgew0KKwkgICBpZiAocHJpLT5uZXdfbW9k ZSAmIE5FV19NT0RFX0lQX1ZFUlNJT04pIHsNCisJICAgICAgIFJlbW90ZVNvY2t2NiA9IChzdHJ1 Y3Qgc29ja2FkZHJfaW42ICopIHByaS0+cmVtb3RlX2FkZHI7DQorCSAgICAgICBSZW1vdGVTb2Nr djYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7DQorCSAgICAgICBSZW1vdGVTb2NrdjYtPnNpbjZf cG9ydCA9IGh0b25zKHJlbW90ZV9wb3J0KTsNCisJICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5F VDYscHJpLT5yZW1vdGVfYWRkcl9zdHJpbmcsICZSZW1vdGVTb2NrdjYtPnNpbjZfYWRkcikgPCAg MSkgew0KKwkJICBwcmludGsoVU1fS0VSTl9FUlIgInVtbF9sMnRwdjNfb3BlbiA6IHJlbW90ZSBh ZGRyZXNzIGNvbnZlcnNpb24gZmFpbGVkICIpOw0KKwkJICByZXR1cm4gLTE7ICAgIA0KKwkgICAg ICAgfQ0KKwkgICAgICAgcHJpLT5yZW1vdGVfYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBzb2Nr YWRkcl9pbjYpOw0KKwkgICB9IGVsc2Ugew0KKwkgICAgICAgUmVtb3RlU29ja3Y0ID0gKHN0cnVj dCBzb2NrYWRkcl9pbiAqKSBwcmktPnJlbW90ZV9hZGRyOw0KKwkgICAgICAgUmVtb3RlU29ja3Y0 LT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCisJICAgICAgIFJlbW90ZVNvY2t2NC0+c2luX3BvcnQg PSBodG9ucyhyZW1vdGVfcG9ydCk7DQorCSAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQscHJp LT5yZW1vdGVfYWRkcl9zdHJpbmcsICZSZW1vdGVTb2NrdjQtPnNpbl9hZGRyKSA8ICAxKSB7DQor CQkgIHByaW50ayhVTV9LRVJOX0VSUiAidW1sX2wydHB2M19vcGVuIDogcmVtb3RlIGFkZHJlc3Mg Y29udmVyc2lvbiBmYWlsZWQgIik7DQorCQkgIHJldHVybiAtMTsgICAgDQorCSAgICAgICB9DQor CSAgICAgICBwcmktPnJlbW90ZV9hZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu KTsNCisJICAgfQ0KKyAgICAgICAgfQ0KKyANCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2Fk ZHIgKikgJkxvY2FsU29jaywgc2l6ZW9mKExvY2FsU29jaykpKSB7DQorCSAgICBwcmludGsoInVt bF9sMnRwdjNfb3BlbiA6ICBjb3VsZCBub3QgYmluZCBzb2NrZXRcbiIpOw0KKwkgICAgY2xvc2Uo ZmQpOw0KKwkgICAgcmV0dXJuIC0xOw0KKwl9IGVsc2Ugew0KKwkgICAgcHJpbnRrKCJ1bWxfbDJ0 cHYzX29wZW4gOiBzb2NrZXQgYm91bmRcbiIpOw0KKwl9DQorDQorDQorLyogdmVjdG9yIElPIGlu aXQgKi8NCisNCisNCisgICAgICAgIHByaS0+dmVjdG9yX2xlbiA9IFZFQ1RPUl9TSVpFOw0KKyAg ICAgICAgcHJpLT5yZWN2X2luZGV4ID0gMDsNCisgICAgICAgIHByaS0+cmVjdl9lbnF1ZXVlZCA9 IDA7DQorICAgICAgICBwcmktPmhlYWRlcl9zaXplID0gcHJpLT5vZmZzZXQgLyogZml4IGZvciBp cHY0IHJhdyAqLzsNCisJaWYgKCghKHByaS0+bmV3X21vZGUgJiBORVdfTU9ERV9JUF9WRVJTSU9O KSkgJiYgKCEocHJpLT5uZXdfbW9kZSAmIE5FV19NT0RFX1VEUCkpKXsNCisJICAgIHByaS0+aGVh ZGVyX3NpemUgKz0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgLyogZml4IGZvciBpcHY0IHJhdyAqLzsN CisJfQ0KKwlwcmktPnNrYl92ZWN0b3IgPSBidWlsZF9za2J1Zl92ZWN0b3IoVkVDVE9SX1NJWkUs IGRldik7DQorCXByaS0+bW1zZ192ZWN0b3IgPSBidWlsZF9tbXNnX3ZlY3RvcihWRUNUT1JfU0la RSwgMik7DQorCWFkZF9oZWFkZXJfYnVmZmVycyhwcmktPm1tc2dfdmVjdG9yLCBWRUNUT1JfU0la RSwgcHJpLT5oZWFkZXJfc2l6ZSk7IA0KKwlhZGRfc2tidWZmcygNCisJICAgIHByaS0+bW1zZ192 ZWN0b3IsIA0KKwkgICAgcHJpLT5za2JfdmVjdG9yLCANCisJICAgIFZFQ1RPUl9TSVpFLCBFVEhf TUFYX1BBQ0tFVCArIEVUSF9IRUFERVJfT1RIRVIsIA0KKwkgICAgMQ0KKwkpOw0KKw0KKwlwcmkt Pm5ldHdvcmtfYnVmZmVyID0gdW1sX2ttYWxsb2MocHJpLT5oZWFkZXJfc2l6ZSwgVU1fR0ZQX0tF Uk5FTCk7IC8qIGVub3VnaCBmb3IgYW55IGhlYWRlciwgcmVnYXJkbGVzcyBob3cgc3R1cGlkICov DQorDQorCWlmICghcHJpLT5uZXR3b3JrX2J1ZmZlcikgew0KKwkgICAgcHJpbnRrKCJ1bWxfbDJ0 cHYzX29wZW4gOiBjb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsNCisJICAgIHJldHVybiAt MTsNCisJfQ0KKw0KKwkJaWYgKCFwcmktPnJlbW90ZV9hZGRyKSB7DQorCSAgICBtbXNnaGRyID0g KHN0cnVjdCBtbXNnaGRyICopIHByaS0+bW1zZ192ZWN0b3I7DQorCSAgICBtbXNnaGRyLT5tc2df aGRyLm1zZ19uYW1lID0gdW1sX2ttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdl KSwgVU1fR0ZQX0tFUk5FTCk7DQorCSAgICBpZiAobW1zZ2hkci0+bXNnX2hkci5tc2dfbmFtZSkg ew0KKwkJbW1zZ2hkci0+bXNnX2hkci5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk ZHJfc3RvcmFnZSk7DQorCSAgICB9IGVsc2Ugew0KKwkJcHJpbnRrKCJGYWlsZWQgdG8gYWxsb2Nh dGUgcmVtb3RlIGFkZHJlc3MgbmFtZVxuIik7DQorCSAgICB9DQorCX0NCisgICAgICAgDQorCXBy aS0+ZGV2ID0gZGV2Ow0KKwlwcmktPmZkID0gZmQ7DQorCWlmIChwcmktPmZkIDwgMCkgew0KKwkJ cmV0dXJuIHByaS0+ZmQ7DQorCX0NCisNCisJcHJpbnRrKCJ1bWxfbDJ0cHYzX29wZW4gOiBpbml0 IGNvbXBsZXRlLCBmZCAlaVxuIiwgZmQpOw0KKyANCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyBpbnQgdW1sX2wydHB2M19vcGVuKHZvaWQgKmRhdGEpDQorew0KKwlzdHJ1Y3QgdW1sX2wydHB2 M19kYXRhICpwcmkgPSBkYXRhOw0KKwlyZXR1cm4gcHJpLT5mZDsNCit9DQorDQorc3RhdGljIHZv aWQgdW1sX2wydHB2M19yZW1vdmUodm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCB1bWxfbDJ0cHYz X2RhdGEgKnByaSA9IGRhdGE7DQorDQorCWNsb3NlKHByaS0+ZmQpOw0KKwlpZiAocHJpLT5za2Jf dmVjdG9yKSB7DQorCSAgICBkZXN0cm95X3NrYl92ZWN0b3IocHJpLT5za2JfdmVjdG9yLCBWRUNU T1JfU0laRSk7DQorCX0NCisJaWYgKHByaS0+bW1zZ192ZWN0b3IpIHsNCisJICAgIGRlc3Ryb3lf bW1zZ192ZWN0b3IocHJpLT5tbXNnX3ZlY3RvciwgVkVDVE9SX1NJWkUsIDEpOw0KKwl9DQorCXBy aS0+ZmQgPSAtMTsNCit9DQorDQorDQoraW50IHVtbF9sMnRwdjNfdXNlcl9zZW5kbXNnKGludCBm ZCwgdm9pZCAqaGVhZGVyLCBpbnQgaGVhZGVybGVuLCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbiwg c3RydWN0IHVtbF9sMnRwdjNfZGF0YSAqcHJpKQ0KK3sNCisgICAgICAgIHN0cnVjdCBtc2doZHIg bWVzc2FnZTsNCisgICAgICAgIHN0cnVjdCBpb3ZlYyB2ZWNbMl07DQorICAgICAgICB2ZWNbMF0u aW92X2Jhc2UgPSBoZWFkZXI7DQorICAgICAgICB2ZWNbMF0uaW92X2xlbiA9IGhlYWRlcmxlbjsN CisgICAgICAgIHZlY1sxXS5pb3ZfYmFzZSA9IGRhdGE7DQorCXZlY1sxXS5pb3ZfbGVuID0gZGF0 YWxlbjsNCisNCisNCisgICAgICAgIG1lc3NhZ2UubXNnX25hbWUgPSBwcmktPnJlbW90ZV9hZGRy Ow0KKyAgICAgICAgbWVzc2FnZS5tc2dfbmFtZWxlbiA9IHByaS0+cmVtb3RlX2FkZHJfc2l6ZTsN CisgICAgICAgIG1lc3NhZ2UubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikgJnZlYzsNCisgICAg ICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IDI7DQorICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9s ID0gTlVMTDsNCisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSAwOw0KKyAgICAgICAg bWVzc2FnZS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQ7DQorDQorDQorICAgICAgICBpZiAocHJp LT5yZW1vdGVfYWRkciAhPSBOVUxMKSB7DQorCSAgIHJldHVybiBuZXRfc2VuZG1lc3NhZ2UoZmQs ICZtZXNzYWdlLCBNU0dfRE9OVFdBSVQpOw0KKyAgICAgICAgfSBlbHNlIHsNCisJICAgcmV0dXJu IC0xOw0KKwl9DQorfQ0KK2ludCB1bWxfbDJ0cHYzX3VzZXJfcmVjdm1zZyhpbnQgZmQsIHZvaWQg KmhlYWRlciwgaW50IGhlYWRlcmxlbiwgdm9pZCAqZGF0YSwgaW50IGRhdGFsZW4sIHN0cnVjdCB1 bWxfbDJ0cHYzX2RhdGEgKnByaSkNCit7DQorICAgICAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7 DQorICAgICAgICBzdHJ1Y3QgaW92ZWMgdmVjWzJdOw0KKyAgICAgICAgdmVjWzBdLmlvdl9iYXNl ID0gaGVhZGVyOw0KKyAgICAgICAgdmVjWzBdLmlvdl9sZW4gPSBoZWFkZXJsZW47DQorICAgICAg ICB2ZWNbMV0uaW92X2Jhc2UgPSBkYXRhOw0KKwl2ZWNbMV0uaW92X2xlbiA9IGRhdGFsZW47DQor DQorCWlmICghcHJpLT5yZW1vdGVfYWRkcikgew0KKwkgICAgcHJpLT5yZW1vdGVfYWRkciA9IHVt bF9rbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSksIFVNX0dGUF9LRVJORUwp Ow0KKwkgICAgaWYgKHByaS0+cmVtb3RlX2FkZHIpIHsNCisJCW1lc3NhZ2UubXNnX25hbWUgPSBw cmktPnJlbW90ZV9hZGRyOw0KKwkJbWVzc2FnZS5tc2dfbmFtZWxlbiA9IHByaS0+cmVtb3RlX2Fk ZHJfc2l6ZTsNCisJICAgIH0gZWxzZSB7DQorCQltZXNzYWdlLm1zZ19uYW1lID0gTlVMTDsNCisJ CW1lc3NhZ2UubXNnX25hbWVsZW4gPSAwOw0KKwkgICAgfQ0KKwl9IGVsc2Ugew0KKwkgICAgbWVz c2FnZS5tc2dfbmFtZSA9IE5VTEw7DQorCSAgICBtZXNzYWdlLm1zZ19uYW1lbGVuID0gMDsNCisJ fQ0KKyAgICANCisgICAgICAgIG1lc3NhZ2UubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikgJnZl YzsNCisgICAgICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IDI7DQorICAgICAgICBtZXNzYWdlLm1z Z19jb250cm9sID0gTlVMTDsNCisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSAwOw0K KyAgICAgICAgbWVzc2FnZS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQ7DQorDQorDQorCXJldHVy biBuZXRfcmVjdm1lc3NhZ2UoZmQsICZtZXNzYWdlLCBNU0dfRE9OVFdBSVQpOw0KK30NCitjb25z dCBzdHJ1Y3QgbmV0X3VzZXJfaW5mbyB1bWxfbDJ0cHYzX3VzZXJfaW5mbyA9IHsNCisJLmluaXQJ CT0gdW1sX2wydHB2M191c2VyX2luaXQsDQorCS5vcGVuCQk9IHVtbF9sMnRwdjNfb3BlbiwNCisJ LmNsb3NlCSAJPSBOVUxMLA0KKwkucmVtb3ZlCSAJPSB1bWxfbDJ0cHYzX3JlbW92ZSwNCisJLmFk ZF9hZGRyZXNzCT0gTlVMTCwNCisJLmRlbGV0ZV9hZGRyZXNzID0gTlVMTCwNCisJLm10dQkJPSBF VEhfTUFYX1BBQ0tFVCwNCisJLm1heF9wYWNrZXQJPSBFVEhfTUFYX1BBQ0tFVCArIEVUSF9IRUFE RVJfT1RIRVIgKyBMMlRQVjNfSEVBREVSLA0KK307DQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2 ZXJzL3VtbF9yYXcuaCBiL2FyY2gvdW0vZHJpdmVycy91bWxfcmF3LmgNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwLi41YTA4NjA0DQotLS0gL2Rldi9udWxsDQorKysgYi9hcmNo L3VtL2RyaXZlcnMvdW1sX3Jhdy5oDQpAQCAtMCwwICsxLDQ5IEBADQorLyoNCisgKiBDb3B5cmln aHQgKEMpIDIwMTIgLSAyMDE0IENpc2NvIFN5c3RlbXMNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEg LSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkNCisgKiBM aWNlbnNlZCB1bmRlciB0aGUgR1BMDQorICovDQorDQorI2lmbmRlZiBfX1VNTF9SQVdfSF9fDQor I2RlZmluZSBfX1VNTF9SQVdfSF9fDQorDQorI2luY2x1ZGUgIm5ldF91c2VyLmgiDQorDQorc3Ry dWN0IHVtbF9yYXdfZGF0YSB7DQorCWNoYXIgKmhvc3RfaWZhY2U7DQorCWludCBmZDsNCisJdm9p ZCAqZGV2Ow0KKyAgICAgICAgdWludDMyX3QgdW1sX3Jhd19mbGFnczsNCisNCisJLyogcGFja2V0 IG1tYXAgcmVhZCAqLw0KKw0KKwl1aW50OF90ICpzY3JhdGNoX2J1ZmZlcjsgIC8qIGZvciBkdW1t eSByZWFkcyovDQorCXVpbnQ4X3QgKm11bHRpcmVhZF9idWZmZXI7DQorCWludCByaW5nX2luZGV4 Ow0KKw0KKwkvKiBtdWx0aS1yeCByZWFkICovDQorDQorCXZvaWQgKiogc2tiX3ZlY3RvcjsNCisJ dm9pZCAqIG1tc2dfdmVjdG9yOw0KKwl1aW50MzJfdCB2ZWN0b3JfbGVuOw0KKwl1aW50MzJfdCBy ZWN2X2luZGV4Ow0KKwl1aW50MzJfdCByZWN2X2VucXVldWVkOw0KKw0KK307DQorDQorZXh0ZXJu IGNvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIHVtbF9yYXdfdXNlcl9pbmZvOw0KKw0KK2V4dGVy biBpbnQgdW1sX3Jhd191c2VyX3dyaXRlKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuLA0KKwkJ CSAgICAgc3RydWN0IHVtbF9yYXdfZGF0YSAqcHJpKTsNCisNCisjZGVmaW5lIFVNTF9SQVdfRkxB R19UWF9DSEVDS1NVTVMgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQ0KKyNkZWZpbmUgVU1MX1JB V19GTEFHX1JYX0NIRUNLU1VNUyAgICAgICAgICAgICAgICAweDAwMDAwMDAyDQorDQorDQorI2Rl ZmluZSBVTUxfUkFXX1RQX0JMT0NLX1NJWkUgNDA5Ng0KKyNkZWZpbmUgVU1MX1JBV19UUF9GUkFN RV9TSVpFIDIwNDgNCisjZGVmaW5lIFVNTF9SQVdfVFBfQkxPQ0tfTlIgMzINCisjZGVmaW5lIFVN TF9SQVdfVFBfRlJBTUVfTlIgNjQNCisNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hcmNoL3Vt L2RyaXZlcnMvdW1sX3Jhd19rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvdW1sX3Jhd19rZXJuLmMN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi44ZTcxMDUxDQotLS0gL2Rldi9u dWxsDQorKysgYi9hcmNoL3VtL2RyaXZlcnMvdW1sX3Jhd19rZXJuLmMNCkBAIC0wLDAgKzEsMjEz IEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE0IENpc2NvIFN5c3RlbXMNCisg KiBDb3B5cmlnaHQgKEMpIDIwMDEgTGVubmVydCBCdXl0ZW5oZWsgKGJ1eXRlbmhAZ251Lm9yZykg YW5kDQorICogSmFtZXMgTGV1IChqbGV1QG1pbmRzcHJpbmcubmV0KS4NCisgKiBDb3B5cmlnaHQg KEMpIDIwMDEgLSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNv bSkNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgYnkgdmFyaW91cyBvdGhlciBwZW9wbGUgd2hvIGRp ZG4ndCBwdXQgdGhlaXIgbmFtZSBoZXJlLg0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuDQor ICovDQorDQorI2luY2x1ZGUgImxpbnV4L2luaXQuaCINCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2 aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4NCisjaW5jbHVkZSA8bGludXgvaWZf cGFja2V0Lmg+DQorI2luY2x1ZGUgIm5ldF9rZXJuLmgiDQorI2luY2x1ZGUgInVtbF9yYXcuaCIN CisjaW5jbHVkZSAibGludXgvbXV0ZXguaCINCisjaW5jbHVkZSAidW1fbWFsbG9jLmgiDQorDQor I2RlZmluZSBEUklWRVJfTkFNRSAidW1sLXJhdyINCisNCisNCitzdHJ1Y3QgdW1sX3Jhd19pbml0 IHsNCisJY2hhciAqaG9zdF9pZmFjZTsNCit9Ow0KKw0KK3N0YXRpYyB2b2lkIHVtbF9yYXdfZ2V0 X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCisJCQkJc3RydWN0IGV0aHRvb2xfZHJ2 aW5mbyAqaW5mbykNCit7DQorCXN0cmNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsNCisJ c3RyY3B5KGluZm8tPnZlcnNpb24sICI0MiIpOw0KK30NCisNCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGV0aHRvb2xfb3BzIHVtbF9yYXdfZXRodG9vbF9vcHMgPSB7DQorCS5nZXRfZHJ2aW5mbwkg ICAgICAgID0gdW1sX3Jhd19nZXRfZHJ2aW5mbywNCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3Bf Z2V0X2xpbmssDQorfTsNCisNCisNCitzdGF0aWMgdm9pZCB1bWxfcmF3X2luaXQoc3RydWN0IG5l dF9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCB1bWxfbmV0X3ByaXZhdGUg KnByaTsNCisJc3RydWN0IHVtbF9yYXdfZGF0YSAqZHByaTsNCisJc3RydWN0IHVtbF9yYXdfaW5p dCAqaW5pdCA9IGRhdGE7DQorDQorCXByaSA9IG5ldGRldl9wcml2KGRldik7DQorCWRwcmkgPSAo c3RydWN0IHVtbF9yYXdfZGF0YSAqKSBwcmktPnVzZXI7DQorCWRwcmktPmhvc3RfaWZhY2UgPSBp bml0LT5ob3N0X2lmYWNlOw0KKwlkcHJpLT5mZCA9IC0xOw0KKwlkcHJpLT5kZXYgPSBkZXY7DQor ICAgIA0KKwkvKiBXZSB3aWxsIGZyZWUgdGhpcyBwb2ludGVyLiBJZiBpdCBjb250YWlucyBjcmFw IHdlJ3JlIGJ1cm5lZC4gKi8NCisNCisJcHJpbnRrKCJyYXcgYmFja2VuZCAtIGhvc3QgaWZhY2U6 ICVzIiwgIGRwcmktPmhvc3RfaWZhY2UpOw0KKwlwcmludGsoIlxuIik7DQorICAgICAgICBwcmlu dGsoImVuYWJsaW5nIGV0aHRvb2wgc3VwcG9ydFxuIik7DQorICAgICAgICBkcHJpLT51bWxfcmF3 X2ZsYWdzID0gMDsgLyogd2UgaGF2ZSBldmVyeXRoaW5nIHR1cm5lZCBvZmYgaW5pdGlhbGx5ICov DQorICAgICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmdW1sX3Jhd19ldGh0b29sX29wcyk7DQor DQorfQ0KKw0KKyNpZmRlZiBQQUNLRVRNTUFQX1JYDQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3Qg dHBhY2tldF9oZHIgKiBjdXJyZW50X2hlYWRlciAoc3RydWN0IHVtbF9yYXdfZGF0YSAqZHByaSkg ew0KKyAgICB1aW50OF90ICogYnVmZmVyOw0KKyAgICBidWZmZXIgPSBkcHJpLT5tdWx0aXJlYWRf YnVmZmVyICsgKGRwcmktPnJpbmdfaW5kZXggKiBVTUxfUkFXX1RQX0ZSQU1FX1NJWkUpOw0KKyAg ICByZXR1cm4gKHN0cnVjdCB0cGFja2V0X2hkciAqKSBidWZmZXI7DQorfQ0KKw0KK3N0YXRpYyBz dHJ1Y3QgdHBhY2tldF9oZHIgKiB1bWxfcmF3X2FkdmFuY2VfcmluZyhzdHJ1Y3QgdW1sX3Jhd19k YXRhICpkcHJpICkgew0KKw0KKyAgICBzdHJ1Y3QgdHBhY2tldF9oZHIgKiBoZWFkZXIgPSBjdXJy ZW50X2hlYWRlcihkcHJpKTsNCisgICAgaGVhZGVyLT50cF9zdGF0dXMgPSBUUF9TVEFUVVNfS0VS TkVMOyAvKiBtYXJrIGFzIGZyZWUgKi8NCisgICAgZHByaS0+cmluZ19pbmRleCA9IChkcHJpLT5y aW5nX2luZGV4ICsgMSkgJSBVTUxfUkFXX1RQX0ZSQU1FX05SOw0KKyAgICByZXR1cm4gY3VycmVu dF9oZWFkZXIoZHByaSk7DQorfQ0KKw0KKyNlbHNlIA0KKw0KK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVm ZiAqIHVtbF9yYXdfbXVsdGlyZWFkIChzdHJ1Y3QgdW1sX25ldF9wcml2YXRlICogbHApIHsNCisg ICAgc3RydWN0IHVtbF9yYXdfZGF0YSAqZHByaSA9IChzdHJ1Y3QgdW1sX3Jhd19kYXRhICopICZs cC0+dXNlcjsNCisgICAgdm9pZCAqKiBza2JfdmVjdG9yID0gZHByaS0+c2tiX3ZlY3RvcjsNCisg ICAgc3RydWN0IG1tc2doZHIgKiBtbXNnX3ZlY3RvciA9IChzdHJ1Y3QgbW1zZ2hkciAqKSBkcHJp LT5tbXNnX3ZlY3RvcjsNCisgICAgc3RydWN0IHNrX2J1ZmYgKiByZXN1bHQgPSBOVUxMOw0KKyAg ICBzdHJ1Y3QgaW92ZWMgKiBpb3Y7DQorICAgIGludCByZXQ7DQorICAgIA0KKyAgICBpZiAoZHBy aS0+cmVjdl9pbmRleCA+PSBkcHJpLT5yZWN2X2VucXVldWVkKSB7DQorCWRwcmktPnJlY3ZfaW5k ZXggPSAwOw0KKwlpZiAoZHByaS0+cmVjdl9lbnF1ZXVlZCkgew0KKwkgICAgcmVidWlsZF9za2J1 Zl92ZWN0b3Ioc2tiX3ZlY3RvciwgZHByaS0+cmVjdl9lbnF1ZXVlZCwgbHAtPmRldik7DQorCSAg ICBhZGRfc2tidWZmcyhkcHJpLT5tbXNnX3ZlY3Rvciwgc2tiX3ZlY3RvciwgZHByaS0+cmVjdl9l bnF1ZXVlZCwgbHAtPm1heF9wYWNrZXQsIDApOw0KKwl9DQorCXJldCA9IG5ldF9yZWN2bW1zZygN CisJICAgIGRwcmktPmZkLCBkcHJpLT5tbXNnX3ZlY3RvciwgZHByaS0+dmVjdG9yX2xlbiwgMCwg TlVMTCk7DQorCWlmIChyZXQgPj0gMCkgew0KKwkgICAgZHByaS0+cmVjdl9lbnF1ZXVlZCA9IHJl dDsNCisJfSBlbHNlIHsNCisJICAgIGRwcmktPnJlY3ZfZW5xdWV1ZWQgPSAwOw0KKwkgICAgcmV0 dXJuIE5VTEw7DQorCX0NCisgICAgfQ0KKyAgICBpZiAoZHByaS0+cmVjdl9pbmRleCA8IGRwcmkt PnJlY3ZfZW5xdWV1ZWQpIHsNCisJc2tiX3ZlY3RvciArPSBkcHJpLT5yZWN2X2luZGV4Ow0KKwlt bXNnX3ZlY3RvciArPSBkcHJpLT5yZWN2X2luZGV4Ow0KKwlkcHJpLT5yZWN2X2luZGV4ICsrOw0K Kwlpb3YgPSBtbXNnX3ZlY3Rvci0+bXNnX2hkci5tc2dfaW92Ow0KKwlpZiAoKG1tc2dfdmVjdG9y LT5tc2dfbGVuKSAmJiAoaW92KSkgew0KKwkgICAgcmVzdWx0ID0gKHN0cnVjdCBza19idWZmICop KCogc2tiX3ZlY3Rvcik7DQorCSAgICBpZiAocmVzdWx0KSB7DQorCQlza2JfdHJpbShyZXN1bHQs IG1tc2dfdmVjdG9yLT5tc2dfbGVuKTsNCisJCXJlc3VsdC0+cHJvdG9jb2wgPSAoKmxwLT5wcm90 b2NvbCkocmVzdWx0KTsNCisJICAgIH0NCisJfSBlbHNlIHsNCisJICAgIHVtbF9uZXRfZGVzdHJv eV9za2IoKiBza2JfdmVjdG9yICkgOyAvKiBvdGhlcndpc2Ugd2UgbGVhayBpdCAqLw0KKwkgICAg cmVzdWx0ID0gTlVMTDsNCisJfQ0KKwkvL3JlcGFpcl9tbXNnKG1tc2dfdmVjdG9yLCAyLCBkcHJp LT5oZWFkZXJfc2l6ZSk7DQorICAgIH0gZWxzZSB7DQorCXJlc3VsdCA9IE5VTEw7DQorICAgIH0N CisgICAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQorI2VuZGlmDQorDQorDQorc3RhdGljIGludCB1 bWxfcmF3X3JlYWQoaW50IGZkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdW1sX25ldF9w cml2YXRlICpscCkNCit7DQorICAgICAgICBpbnQgcmVzdWx0Ow0KKyAgICAgICAgc3RydWN0IHVt bF9yYXdfZGF0YSAqZHByaTsNCisJZHByaSA9IChzdHJ1Y3QgdW1sX3Jhd19kYXRhICopIGxwLT51 c2VyOw0KKyNpZmRlZiBQQUNLRVRNTUFQX1JYDQorCXN0cnVjdCB0cGFja2V0X2hkciAqIGhlYWRl cjsNCisNCisJaGVhZGVyID0gY3VycmVudF9oZWFkZXIoZHByaSk7CSANCisNCisNCisJaWYgKCho ZWFkZXItPnRwX3N0YXR1cyAmIFRQX1NUQVRVU19VU0VSKSA+IDApIHsgDQorCSAgICByZXN1bHQg PSBoZWFkZXItPnRwX3NuYXBsZW47DQorCSAgICBtZW1jcHkoc2tiX21hY19oZWFkZXIoc2tiKSwg KCh1aW50OF90ICopIGhlYWRlcikgKyBoZWFkZXItPnRwX21hYywgcmVzdWx0KTsNCisJICAgIGlm ICgoZHByaS0+dW1sX3Jhd19mbGFncyAmIFVNTF9SQVdfRkxBR19SWF9DSEVDS1NVTVMpICE9IDAp IHsNCisJICAgICAgIHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7DQorCSAg ICB9DQorCSAgICB1bWxfcmF3X2FkdmFuY2VfcmluZyhkcHJpKTsNCisJfSBlbHNlIHsNCisJICAg IHJlc3VsdCA9IDA7DQorCX0gDQorDQorI2Vsc2UNCisJcmVzdWx0ID0gbmV0X3JlYWQoZmQsIHNr Yl9tYWNfaGVhZGVyKHNrYiksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYi0+ZGV2 LT5tdHUgKyBFVEhfSEVBREVSX09USEVSKTsNCisJDQorI2VuZGlmDQorDQorICAgICAgICByZXR1 cm4gcmVzdWx0Ow0KK30NCisNCitzdGF0aWMgaW50IHVtbF9yYXdfd3JpdGUoaW50IGZkLCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdW1sX25ldF9wcml2YXRlICpscCkNCit7DQorCXJldHVy biB1bWxfcmF3X3VzZXJfd3JpdGUoZmQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sDQorCQkJCSAoc3Ry dWN0IHVtbF9yYXdfZGF0YSAqKSAmbHAtPnVzZXIpOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG5ldF9rZXJuX2luZm8gdW1sX3Jhd19rZXJuX2luZm8gPSB7DQorI2lmZGVmIFBBQ0tFVE1N QVBfUlggDQorCS5vcHRpb25zCQk9IDAsDQorI2Vsc2UNCisJLm9wdGlvbnMJCT0gVU1MX05FVF9V U0VfU0tCX1JFQUQsDQorI2VuZGlmDQorCS5pbml0CQkJPSB1bWxfcmF3X2luaXQsDQorCS5wcm90 b2NvbAkJPSBldGhfcHJvdG9jb2wsDQorCS5yZWFkCQkJPSB1bWxfcmF3X3JlYWQsDQorI2lmbmRl ZiBQQUNLRVRNTUFQX1JYIA0KKwkuc2tiX3JlYWQJCT0gdW1sX3Jhd19tdWx0aXJlYWQsDQorI2Vu ZGlmDQorCS53cml0ZQkJCT0gdW1sX3Jhd193cml0ZQ0KK307DQorDQorc3RhdGljIGludCB1bWxf cmF3X3NldHVwKGNoYXIgKnN0ciwgY2hhciAqKm1hY19vdXQsIHZvaWQgKmRhdGEpDQorew0KKwlz dHJ1Y3QgdW1sX3Jhd19pbml0ICppbml0ID0gZGF0YTsNCisJY2hhciAqcmVtYWluOw0KKw0KKwkq aW5pdCA9ICgNCisJCShzdHJ1Y3QgdW1sX3Jhd19pbml0KQ0KKwkJICAgeyAuaG9zdF9pZmFjZSA9 ICJldGgwIn0NCisJICAgICAgICApOw0KKw0KKwlyZW1haW4gPSBzcGxpdF9pZl9zcGVjKHN0ciwg bWFjX291dCwgJmluaXQtPmhvc3RfaWZhY2UsIE5VTEwpOw0KKwlpZiAocmVtYWluICE9IE5VTEwp DQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIgU3RyYW5nZSBpbnRlcmZhY2Ugc3BlYyBcbiIpOw0K Kw0KKwlyZXR1cm4gMTsNCit9DQorDQorc3RhdGljIHN0cnVjdCB0cmFuc3BvcnQgdW1sX3Jhd190 cmFuc3BvcnQgPSB7DQorCS5saXN0IAkJPSBMSVNUX0hFQURfSU5JVCh1bWxfcmF3X3RyYW5zcG9y dC5saXN0KSwNCisJLm5hbWUgCQk9ICJyYXciLA0KKwkuc2V0dXAgIAk9IHVtbF9yYXdfc2V0dXAs DQorCS51c2VyIAkJPSAmdW1sX3Jhd191c2VyX2luZm8sDQorCS5rZXJuIAkJPSAmdW1sX3Jhd19r ZXJuX2luZm8sDQorCS5wcml2YXRlX3NpemUgCT0gc2l6ZW9mKHN0cnVjdCB1bWxfcmF3X2RhdGEp LA0KKwkuc2V0dXBfc2l6ZSAJPSBzaXplb2Yoc3RydWN0IHVtbF9yYXdfaW5pdCksDQorfTsNCisN CitzdGF0aWMgaW50IHJlZ2lzdGVyX3VtbF9yYXcodm9pZCkNCit7DQorCXJlZ2lzdGVyX3RyYW5z cG9ydCgmdW1sX3Jhd190cmFuc3BvcnQpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorbGF0ZV9pbml0 Y2FsbChyZWdpc3Rlcl91bWxfcmF3KTsNCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdW1s X3Jhd191c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvdW1sX3Jhd191c2VyLmMNCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4yNDE5NGRjDQotLS0gL2Rldi9udWxsDQorKysgYi9h cmNoL3VtL2RyaXZlcnMvdW1sX3Jhd191c2VyLmMNCkBAIC0wLDAgKzEsMTUxIEBADQorLyoNCisg KiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE0IENpc2NvIFN5c3RlbXMNCisgKiBDb3B5cmlnaHQg KEMpIDIwMDEgLSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNv bSkNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTGVubmVydCBCdXl0ZW5oZWsgKGJ1eXRlbmhAZ251 Lm9yZykgYW5kDQorICogSmFtZXMgTGV1IChqbGV1QG1pbmRzcHJpbmcubmV0KS4NCisgKiBDb3B5 cmlnaHQgKEMpIDIwMDEgYnkgdmFyaW91cyBvdGhlciBwZW9wbGUgd2hvIGRpZG4ndCBwdXQgdGhl aXIgbmFtZSBoZXJlLg0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuDQorICovDQorDQorI2lu Y2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxzdGRpbnQu aD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPGVycm5vLmg+DQorI2luY2x1ZGUg PHN5cy9pb2N0bC5oPg0KKyNpbmNsdWRlIDxuZXQvaWYuaD4NCisjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+DQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCisjaW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+ DQorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4NCisjaW5jbHVkZSA8bmV0aW5ldC9ldGhlci5oPg0K KyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQu aD4NCisjaW5jbHVkZSA8c3lzL21tYW4uaD4NCisNCisNCisjaW5jbHVkZSAidW1sX3Jhdy5oIg0K KyNpbmNsdWRlICJuZXRfdXNlci5oIg0KKyNpbmNsdWRlICJvcy5oIg0KKyNpbmNsdWRlICJ1bV9t YWxsb2MuaCINCisjaW5jbHVkZSAidXNlci5oIg0KKw0KKyNkZWZpbmUgVkVDVE9SX1NJWkUgMzIN CisNCitzdGF0aWMgaW50IHVtbF9yYXdfdXNlcl9pbml0KHZvaWQgKmRhdGEsIHZvaWQgKmRldikN Cit7DQorCXN0cnVjdCB1bWxfcmF3X2RhdGEgKnByaSA9IGRhdGE7DQorICAgICAgICBzdHJ1Y3Qg aWZyZXEgaWZyOw0KKwlpbnQgZmQ7DQorICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfbGwgc29jazsN CisgICAgICAgIGludCBlcnI7DQorCXN0cnVjdCB0cGFja2V0X3JlcSB0cGFja2V0Ow0KKyAgICAN CisJcHJpLT5yaW5nX2luZGV4ID0gMDsNCisJIA0KKyAgICAgICAgaWYgKChmZCA9IHNvY2tldChB Rl9QQUNLRVQsIFNPQ0tfUkFXLCBodG9ucyhFVEhfUF9BTEwpKSkgPT0gLTEpIHsNCisJICAgIGVy ciA9IC1lcnJubzsNCisJICAgIHByaW50ayhVTV9LRVJOX0VSUiAidW1sX3Jhd19vcGVuIDogcmF3 IHNvY2tldCBjcmVhdGlvbiBmYWlsZWQsICINCisJCSAgICAgICAiZXJybm8gPSAlZFxuIiwgLWVy cik7DQorCSAgICByZXR1cm4gZXJyOw0KKyAgICAgICAgfQ0KKw0KKyNpZmRlZiBQQUNLRVRNTUFQ X1JYCQ0KKw0KKyAgICAgICAJdHBhY2tldC50cF9ibG9ja19zaXplID0gVU1MX1JBV19UUF9CTE9D S19TSVpFOyANCisJdHBhY2tldC50cF9mcmFtZV9zaXplID0gVU1MX1JBV19UUF9GUkFNRV9TSVpF OyANCisJdHBhY2tldC50cF9ibG9ja19uciA9IFVNTF9SQVdfVFBfQkxPQ0tfTlIgOyANCisJdHBh Y2tldC50cF9mcmFtZV9uciA9IFVNTF9SQVdfVFBfRlJBTUVfTlI7DQorDQorCWlmIChzZXRzb2Nr b3B0KGZkLCBTT0xfUEFDS0VULCBQQUNLRVRfUlhfUklORywgKHZvaWQgKikgJnRwYWNrZXQsIHNp emVvZihzdHJ1Y3QgdHBhY2tldF9yZXEpKSkgew0KKwkgICAgcHJpbnRrKFVNX0tFUk5fRVJSICJ1 bWxfcmF3OiBmYWlsZWQgdG8gcmVxdWVzdCBwYWNrZXQgbW1hcCIpOw0KKwkgICAgcmV0dXJuIC1l cnJubzsNCisJfSBlbHNlIHsNCisJICAgIHByaW50ayhVTV9LRVJOX0VSUiAidW1sX3JhdzogcmVx dWVzdGVkIHBhY2tldCBtbWFwXG4iKTsNCisJfQ0KKw0KKwlwcmktPm11bHRpcmVhZF9idWZmZXIg PSAodWludDhfdCAqKSBtbWFwKE5VTEwsIFVNTF9SQVdfVFBfRlJBTUVfU0laRSAqIFVNTF9SQVdf VFBfRlJBTUVfTlIsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsN CisNCisJaWYgKCEocHJpLT5tdWx0aXJlYWRfYnVmZmVyKSkgew0KKwkgICAgcHJpbnRrKFVNX0tF Uk5fRVJSICJ1bWxfcmF3OiBmYWlsZWQgdG8gbWFwIGJ1ZmZlciIpOw0KKwkgICAgcmV0dXJuIC0x Ow0KKwl9IGVsc2Ugew0KKwkgICAgcHJpbnRrKFVNX0tFUk5fRVJSICJ1bWxfcmF3OiBtbW1hcC1l ZCBidWZmZXIgYXQgJXBcbiIsIHByaS0+bXVsdGlyZWFkX2J1ZmZlcik7DQorCX0NCisNCisjZWxz ZQ0KKw0KKwlwcmktPnZlY3Rvcl9sZW4gPSBWRUNUT1JfU0laRTsNCisgICAgICAgIHByaS0+cmVj dl9pbmRleCA9IDA7DQorICAgICAgICBwcmktPnJlY3ZfZW5xdWV1ZWQgPSAwOw0KKwlwcmktPnNr Yl92ZWN0b3IgPSBidWlsZF9za2J1Zl92ZWN0b3IoVkVDVE9SX1NJWkUsIGRldik7DQorCXByaS0+ bW1zZ192ZWN0b3IgPSBidWlsZF9tbXNnX3ZlY3RvcihWRUNUT1JfU0laRSwgMSk7DQorCWFkZF9z a2J1ZmZzKA0KKwkgICAgcHJpLT5tbXNnX3ZlY3RvciwgDQorCSAgICBwcmktPnNrYl92ZWN0b3Is IA0KKwkgICAgVkVDVE9SX1NJWkUsIEVUSF9NQVhfUEFDS0VUICsgRVRIX0hFQURFUl9PVEhFUiwg DQorCSAgICAwDQorCSk7DQorDQorI2VuZGlmDQorDQorCW1lbXNldCgmaWZyLCAwLCBzaXplb2Yo aWZyKSk7DQorICAgICAgICBzdHJuY3B5KCZpZnIuaWZyX25hbWUsIHByaS0+aG9zdF9pZmFjZSwg c2l6ZW9mKGlmci5pZnJfbmFtZSkgLSAxKTsNCisgICAgICAgIGlmKGlvY3RsKGZkLCBTSU9DR0lG SU5ERVgsICh2b2lkICopICZpZnIpIDwgMCkgew0KKwkgICAgZXJyID0gLWVycm5vOw0KKwkgICAg cHJpbnRrKFVNX0tFUk5fRVJSICJTSU9DR0lGSU5ERVgsIGZhaWxlZCB0byBnZXQgcmF3IGludGVy ZmFjZSBpbmRleCBmb3IgJXMiLCBwcmktPmhvc3RfaWZhY2UpOw0KKwkgICAgY2xvc2UoZmQpOw0K KwkgICAgcmV0dXJuKC0xKTsNCisJfQ0KKw0KKyAgICAgICAgc29jay5zbGxfZmFtaWx5ID0gQUZf UEFDS0VUOw0KKyAgICAgICAgc29jay5zbGxfcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9BTEwpOw0K Kwlzb2NrLnNsbF9pZmluZGV4ID0gaWZyLmlmcl9pZmluZGV4Ow0KKw0KKwlwcmludGsoVU1fS0VS Tl9JTkZPICJ1bWxfcmF3OiBiaW5kaW5nIHJhdyBvbiBpbnRlcmZhY2UgaW5kZXg6ICVpXG4iLCBp ZnIuaWZyX2lmaW5kZXgpOw0KKyAgICAgICAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIg KikgJnNvY2ssIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKSA8IDApIHsNCisJICAgIHByaW50 ayhVTV9LRVJOX0VSUiAidW1sX3JhdzogZmFpbGVkIHRvIGJpbmQgcmF3IHNvY2tldCIpOw0KKwkg ICAgY2xvc2UoZmQpOw0KKyAgICAJICAgIHJldHVybigtMSk7DQorCX0NCisNCisJcHJpLT5kZXYg PSBkZXY7DQorCXByaS0+ZmQgPSBmZDsNCisJaWYgKHByaS0+ZmQgPCAwKSB7DQorCQlyZXR1cm4g cHJpLT5mZDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCB1bWxfcmF3 X29wZW4odm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCB1bWxfcmF3X2RhdGEgKnByaSA9IGRhdGE7 DQorCXJldHVybiBwcmktPmZkOw0KK30NCisNCitzdGF0aWMgdm9pZCB1bWxfcmF3X3JlbW92ZSh2 b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IHVtbF9yYXdfZGF0YSAqcHJpID0gZGF0YTsNCisNCisJ Y2xvc2UocHJpLT5mZCk7DQorCXByaS0+ZmQgPSAtMTsNCisvLwlrZnJlZShwcmktPmhvc3RfaWZh Y2UpOw0KKy8vCXByaS0+aG9zdF9pZmFjZSA9IE5VTEw7DQorfQ0KKw0KK2ludCB1bWxfcmF3X3Vz ZXJfd3JpdGUoaW50IGZkLCB2b2lkICpidWYsIGludCBsZW4sIHN0cnVjdCB1bWxfcmF3X2RhdGEg KnByaSkNCit7DQorCXJldHVybiBuZXRfd3JpdGUoZmQsIGJ1ZiwgbGVuKTsNCit9DQorDQorY29u c3Qgc3RydWN0IG5ldF91c2VyX2luZm8gdW1sX3Jhd191c2VyX2luZm8gPSB7DQorCS5pbml0CQk9 IHVtbF9yYXdfdXNlcl9pbml0LA0KKwkub3BlbgkJPSB1bWxfcmF3X29wZW4sDQorCS5jbG9zZQkg CT0gTlVMTCwNCisJLnJlbW92ZQkgCT0gdW1sX3Jhd19yZW1vdmUsDQorCS5hZGRfYWRkcmVzcwk9 IE5VTEwsDQorCS5kZWxldGVfYWRkcmVzcyA9IE5VTEwsDQorCS5tdHUJCT0gRVRIX01BWF9QQUNL RVQsDQorCS5tYXhfcGFja2V0CT0gRVRIX01BWF9QQUNLRVQgKyBFVEhfSEVBREVSX09USEVSLA0K K307DQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9uZXRfa2Vybi5oIGIvYXJj aC91bS9pbmNsdWRlL3NoYXJlZC9uZXRfa2Vybi5oDQppbmRleCA1YzM2N2YyLi42ZjRkZDhlIDEw MDY0NA0KLS0tIGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9uZXRfa2Vybi5oDQorKysgYi9hcmNo L3VtL2luY2x1ZGUvc2hhcmVkL25ldF9rZXJuLmgNCkBAIC0xLDQgKzEsNSBAQA0KIC8qDQorICog Q29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNCBDaXNjbyBTeXN0ZW1zDQogICogQ29weXJpZ2h0IChD KSAyMDAyIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQ0K ICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwNCiAgKi8NCkBAIC0yMSw2ICsyMiw4IEBAIHN0cnVj dCB1bWxfbmV0IHsNCiAJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOw0KIH07DQogDQorI2Rl ZmluZSBVTUxfTkVUX1VTRV9TS0JfUkVBRCAxDQorDQogc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSB7 DQogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCiAJc3BpbmxvY2tfdCBsb2NrOw0KQEAgLTI5LDYg KzMyLDcgQEAgc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSB7DQogDQogCXN0cnVjdCB3b3JrX3N0cnVj dCB3b3JrOw0KIAlpbnQgZmQ7DQorCXVuc2lnbmVkIGludCBvcHRpb25zOw0KIAl1bnNpZ25lZCBj aGFyIG1hY1tFVEhfQUxFTl07DQogCWludCBtYXhfcGFja2V0Ow0KIAl1bnNpZ25lZCBzaG9ydCAo KnByb3RvY29sKShzdHJ1Y3Qgc2tfYnVmZiAqKTsNCkBAIC0zNiw2ICs0MCw3IEBAIHN0cnVjdCB1 bWxfbmV0X3ByaXZhdGUgew0KIAl2b2lkICgqY2xvc2UpKGludCwgdm9pZCAqKTsNCiAJdm9pZCAo KnJlbW92ZSkodm9pZCAqKTsNCiAJaW50ICgqcmVhZCkoaW50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBzdHJ1Y3QgdW1sX25ldF9wcml2YXRlICopOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqICgqc2tiX3Jl YWQpKHN0cnVjdCB1bWxfbmV0X3ByaXZhdGUgKik7DQogCWludCAoKndyaXRlKShpbnQsIHN0cnVj dCBza19idWZmICpza2IsIHN0cnVjdCB1bWxfbmV0X3ByaXZhdGUgKik7DQogDQogCXZvaWQgKCph ZGRfYWRkcmVzcykodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHZvaWQgKik7DQpA QCAtNDYsNyArNTEsOSBAQCBzdHJ1Y3QgdW1sX25ldF9wcml2YXRlIHsNCiBzdHJ1Y3QgbmV0X2tl cm5faW5mbyB7DQogCXZvaWQgKCppbml0KShzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICopOw0K IAl1bnNpZ25lZCBzaG9ydCAoKnByb3RvY29sKShzdHJ1Y3Qgc2tfYnVmZiAqKTsNCisJdW5zaWdu ZWQgaW50IG9wdGlvbnM7DQogCWludCAoKnJlYWQpKGludCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwg c3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqKTsNCisJc3RydWN0IHNrX2J1ZmYgKiAoKnNrYl9yZWFk KShzdHJ1Y3QgdW1sX25ldF9wcml2YXRlICopOw0KIAlpbnQgKCp3cml0ZSkoaW50LCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdW1sX25ldF9wcml2YXRlICopOw0KIH07DQogDQpAQCAtNjYs NSArNzMsNiBAQCBleHRlcm4gaW50IHRhcF9zZXR1cF9jb21tb24oY2hhciAqc3RyLCBjaGFyICp0 eXBlLCBjaGFyICoqZGV2X25hbWUsDQogCQkJICAgIGNoYXIgKiptYWNfb3V0LCBjaGFyICoqZ2F0 ZV9hZGRyKTsNCiBleHRlcm4gdm9pZCByZWdpc3Rlcl90cmFuc3BvcnQoc3RydWN0IHRyYW5zcG9y dCAqbmV3KTsNCiBleHRlcm4gdW5zaWduZWQgc2hvcnQgZXRoX3Byb3RvY29sKHN0cnVjdCBza19i dWZmICpza2IpOw0KK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqbXlfYnVpbGRfc2tiKHZvaWQgKiBo ZWFkLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKTsNCiANCiAjZW5kaWYNCmRp ZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL25ldF91c2VyLmggYi9hcmNoL3VtL2lu Y2x1ZGUvc2hhcmVkL25ldF91c2VyLmgNCmluZGV4IDNkYWJiZTEuLjUyZjA4N2EgMTAwNjQ0DQot LS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL25ldF91c2VyLmgNCisrKyBiL2FyY2gvdW0vaW5j bHVkZS9zaGFyZWQvbmV0X3VzZXIuaA0KQEAgLTEsNCArMSw1IEBADQogLyoNCisgKiBDb3B5cmln aHQgKEMpIDIwMTIgLSAyMDE0IENpc2NvIFN5c3RlbXMNCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIg LSAyMDA3IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkNCiAgKiBM aWNlbnNlZCB1bmRlciB0aGUgR1BMDQogICovDQpAQCAtMzgsMTAgKzM5LDE1IEBAIGV4dGVybiB2 b2lkIHRhcF9jaGVja19pcHMoY2hhciAqZ2F0ZV9hZGRyLCB1bnNpZ25lZCBjaGFyICpldGhfYWRk cik7DQogZXh0ZXJuIHZvaWQgcmVhZF9vdXRwdXQoaW50IGZkLCBjaGFyICpvdXRwdXRfb3V0LCBp bnQgbGVuKTsNCiANCiBleHRlcm4gaW50IG5ldF9yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBpbnQg bGVuKTsNCitleHRlcm4gaW50IG5ldF9yZWFkdihpbnQgZmQsIHZvaWQgKmlvdiwgaW50IGlvdmNu dCk7DQogZXh0ZXJuIGludCBuZXRfcmVjdmZyb20oaW50IGZkLCB2b2lkICpidWYsIGludCBsZW4p Ow0KK2V4dGVybiBpbnQgbmV0X3JlY3Zmcm9tMihpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGxlbiwg dm9pZCAqc3JjX2FkZHIsIGludCAqYWRkcmxlbik7DQogZXh0ZXJuIGludCBuZXRfd3JpdGUoaW50 IGZkLCB2b2lkICpidWYsIGludCBsZW4pOw0KK2V4dGVybiBpbnQgbmV0X3dyaXRldihpbnQgZmQs IHZvaWQgKmlvdiwgaW50IGlvdmNudCk7DQogZXh0ZXJuIGludCBuZXRfc2VuZChpbnQgZmQsIHZv aWQgKmJ1ZiwgaW50IGxlbik7DQogZXh0ZXJuIGludCBuZXRfc2VuZHRvKGludCBmZCwgdm9pZCAq YnVmLCBpbnQgbGVuLCB2b2lkICp0bywgaW50IHNvY2tfbGVuKTsNCitleHRlcm4gaW50IG5ldF9z ZW5kbWVzc2FnZShpbnQgZmQsIHZvaWQgKm1zZywgaW50IGZsYWdzKTsNCitleHRlcm4gaW50IG5l dF9yZWN2bWVzc2FnZShpbnQgZmQsIHZvaWQgKm1zZywgaW50IGZsYWdzKTsNCiANCiBleHRlcm4g dm9pZCBvcGVuX2FkZHIodW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgY2hhciAqbmV0bWFz aywgdm9pZCAqYXJnKTsNCiBleHRlcm4gdm9pZCBjbG9zZV9hZGRyKHVuc2lnbmVkIGNoYXIgKmFk ZHIsIHVuc2lnbmVkIGNoYXIgKm5ldG1hc2ssIHZvaWQgKmFyZyk7DQpAQCAtNTAsNCArNTYsMjMg QEAgZXh0ZXJuIGNoYXIgKnNwbGl0X2lmX3NwZWMoY2hhciAqc3RyLCAuLi4pOw0KIA0KIGV4dGVy biBpbnQgZGV2X25ldG1hc2sodm9pZCAqZCwgdm9pZCAqbSk7DQogDQorDQorLyogbmV0IGtlcm4g ZXh0cmEgKi8NCitleHRlcm4gdm9pZCB1bWxfbmV0X2Rlc3Ryb3lfc2tiKHZvaWQgKiBza2IpOw0K K2V4dGVybiB2b2lkICogdW1sX25ldF9idWlsZF9za2IgKHZvaWQgKiBkZXYpOw0KK2V4dGVybiB2 b2lkICogdW1sX25ldF9za2JfZGF0YSAodm9pZCAqIHNrYik7DQorDQorZXh0ZXJuIHZvaWQgYWRk X3NrYnVmZnModm9pZCAqIG1zZ3ZlYywgdm9pZCAqKiBza2J2ZWMsIGludCBzaXplLCBpbnQgc2ti X3NpemUsIGludCBvZmZzZXQpOw0KK2V4dGVybiB2b2lkIGFkZF9oZWFkZXJfYnVmZmVycyh2b2lk ICogbXNndmVjLCBpbnQgc2l6ZSwgaW50IGhlYWRlcl9zaXplKTsNCitleHRlcm4gdm9pZCAqIGJ1 aWxkX21tc2dfdmVjdG9yKGludCBzaXplLCBpbnQgaW92c2l6ZSk7DQorZXh0ZXJuIHZvaWQgcmVi dWlsZF9za2J1Zl92ZWN0b3Iodm9pZCAqKiBza2J2ZWMsIGludCBzaXplLCB2b2lkICogZGV2KTsN CitleHRlcm4gdm9pZCAqIGJ1aWxkX3NrYnVmX3ZlY3RvcihpbnQgc2l6ZSwgdm9pZCAqIGRldik7 DQorZXh0ZXJuIGludCBuZXRfcmVjdm1tc2coaW50IGZkLCB2b2lkICptc2d2ZWMsIHVuc2lnbmVk IGludCB2bGVuLA0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1 Y3QgdGltZXNwZWMgKnRpbWVvdXQpOw0KK2V4dGVybiBpbnQgbmV0X3NlbmRtbXNnKGludCBmZCwg dm9pZCAqbXNndmVjLCB1bnNpZ25lZCBpbnQgdmxlbiwNCisgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBmbGFncyk7DQorZXh0ZXJuIHZvaWQgcmVwYWlyX21tc2cgKHZvaWQgKm1zZ3Zl YywgaW50IGlvdnNpemUsIGludCBoZWFkZXJfc2l6ZSk7DQorZXh0ZXJuIHZvaWQgZGVzdHJveV9z a2JfdmVjdG9yKHZvaWQgKiogdmVjdG9yLCBpbnQgc2l6ZSk7DQorZXh0ZXJuIHZvaWQgZGVzdHJv eV9tbXNnX3ZlY3Rvcih2b2lkICogbW1zZ3ZlY3RvciwgaW50IHNpemUsIGludCBmcmVlX2lvdl9i YXNlKTsNCisNCiAjZW5kaWYNCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29z LmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmgNCmluZGV4IDg5YjY4NmMxLi5kMmE0ZjRi IDEwMDY0NA0KLS0tIGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oDQorKysgYi9hcmNoL3Vt L2luY2x1ZGUvc2hhcmVkL29zLmgNCkBAIC0xLDQgKzEsNSBAQA0KIC8qDQorICogQ29weXJpZ2h0 IChDKSAyMDEyIC0gMjAxNCBDaXNjbyBTeXN0ZW1zDQogICogQ29weXJpZ2h0IChDKSAyMDAyIC0g MjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pDQogICogTGlj ZW5zZWQgdW5kZXIgdGhlIEdQTA0KICAqLw0KQEAgLTI3NCw2ICsyNzUsNyBAQCBleHRlcm4gdm9p ZCBoYWx0X3NrYXModm9pZCk7DQogZXh0ZXJuIHZvaWQgcmVib290X3NrYXModm9pZCk7DQogDQog LyogaXJxLmMgKi8NCisNCiBleHRlcm4gaW50IG9zX3dhaXRpbmdfZm9yX2V2ZW50cyhzdHJ1Y3Qg aXJxX2ZkICphY3RpdmVfZmRzKTsNCiBleHRlcm4gaW50IG9zX2NyZWF0ZV9wb2xsZmQoaW50IGZk LCBpbnQgZXZlbnRzLCB2b2lkICp0bXBfcGZkLCBpbnQgc2l6ZV90bXBmZHMpOw0KIGV4dGVybiB2 b2lkIG9zX2ZyZWVfaXJxX2J5X2NiKGludCAoKnRlc3QpKHN0cnVjdCBpcnFfZmQgKiwgdm9pZCAq KSwgdm9pZCAqYXJnLA0KQEAgLTI5OSw0ICszMDEsNSBAQCBleHRlcm4gaW50IGdldF9wdHkodm9p ZCk7DQogLyogc3lzLSRBUkNIL3Rhc2tfc2l6ZS5jICovDQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcg b3NfZ2V0X3RvcF9hZGRyZXNzKHZvaWQpOw0KIA0KKw0KICNlbmRpZg0K --_002_53106A8E7090706ciscocom_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------------ Flow-based real-time traffic analytics software. Cisco certified tool. Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer Customize your own dashboards, set traffic alerts and generate reports. Network behavioral analysis & security monitoring. All-in-one tool. http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk --_002_53106A8E7090706ciscocom_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel --_002_53106A8E7090706ciscocom_--