From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41106) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WJInw-0007G3-VG for Qemu-devel@nongnu.org; Fri, 28 Feb 2014 03:28:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WJInp-0001wH-Gm for Qemu-devel@nongnu.org; Fri, 28 Feb 2014 03:28:24 -0500 Received: from rcdn-iport-8.cisco.com ([173.37.86.79]:21299) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WJIno-0001vu-Rm for Qemu-devel@nongnu.org; Fri, 28 Feb 2014 03:28:17 -0500 Received: from xhc-aln-x02.cisco.com (xhc-aln-x02.cisco.com [173.36.12.76]) by rcdn-core-2.cisco.com (8.14.5/8.14.5) with ESMTP id s1S8SD3a012344 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL) for ; Fri, 28 Feb 2014 08:28:13 GMT From: "Anton Ivanov (antivano)" Date: Fri, 28 Feb 2014 08:28:11 +0000 Message-ID: <5310489A.4060501@cisco.com> Content-Language: en-US Content-Type: multipart/mixed; boundary="_002_5310489A4060501ciscocom_" MIME-Version: 1.0 Subject: [Qemu-devel] Contribution - L2TPv3 transport List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Qemu-devel@nongnu.org" --_002_5310489A4060501ciscocom_ Content-Type: text/plain; charset="iso-8859-1" Content-ID: <5ED97BAC9F04554A8E8C78B352778FFC@emea.cisco.com> Content-Transfer-Encoding: quoted-printable Hi all, On behalf of Cisco Systems I am authorized to contribute a new transport to the network subsystem in qemu. Specifically, we would like to contribute a new transport: L2TPv3 static tunnel network transport. Earlier versions of this (we have patchsets going back to qemu-1.0) have been used extensively as a testing tool in our group and will be shipped in product at a later date. We also use its counterpart designed for UML in a soon to ship product. The idea is quite simple - instead of inventing "yet another weird and wonderful" encapsulation of the day for virtual transports, we use a well established industry standard. Specifically we use L2TPv3 static tunnels. This is very similar to what qemu has been doing in the storage area for a long time (the iSCSI storage driver). This allows: 1. Qemu to communicate with any other qemu, UML, router, firewall or network device directly with no mediation by a virtual switch. Local and remote. 2. Qemu to communicate with any modern linux distribution directly (including communicating with containers). Local and remote. 3. Qemu to communicate with the local host, remote vms, network devices, etc at speeds which for a number of use cases exceed the speed of the legacy tap driver. Our suggestion would be that this over time obsoletes the UDP variety of the "socket" driver. It has a number of advantages over that driver: * Standard compliant - RFC 3931 updated recently by RFC 5641 * Supported on most network equipment * Allows to move virtual switching off-host to a high performance physical switch if needed * Allows 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. This transport uses a linux specific call to get several GBit RX rate. This call can be wrapped (at some cost) in a compatibility loop using posix compliant recvmsg instead for other systems. As I am not familiar with the fine details on how to add linux specific, windows specific, etc bits to qemu I have decided to leave that bit out for the time being and submit it "as we use it". Patch attached. Best Regards, Anton --_002_5310489A4060501ciscocom_ Content-Type: text/x-patch; name="l2tpv3.diff" Content-Description: l2tpv3.diff Content-Disposition: attachment; filename="l2tpv3.diff"; size=34468; creation-date="Fri, 28 Feb 2014 08:28:11 GMT"; modification-date="Fri, 28 Feb 2014 08:28:11 GMT" Content-ID: <5E11DA98112DBE4BABED2331B0B4C206@emea.cisco.com> Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2luY2x1ZGUvcWVtdS9zb2NrZXRzLmggYi9pbmNsdWRlL3FlbXUvc29ja2V0 cy5oDQppbmRleCA0NTU4OGQ3Li44NjVmMWMyIDEwMDY0NA0KLS0tIGEvaW5jbHVkZS9xZW11L3Nv Y2tldHMuaA0KKysrIGIvaW5jbHVkZS9xZW11L3NvY2tldHMuaA0KQEAgLTc5LDYgKzc5LDcgQEAg aW50IHNvY2tldF9kZ3JhbShTb2NrZXRBZGRyZXNzICpyZW1vdGUsIFNvY2tldEFkZHJlc3MgKmxv Y2FsLCBFcnJvciAqKmVycnApOw0KIA0KIC8qIE9sZCwgaXB2NCBvbmx5IGJpdHMuICBEb24ndCB1 c2UgZm9yIG5ldyBjb2RlLiAqLw0KIGludCBwYXJzZV9ob3N0X3BvcnQoc3RydWN0IHNvY2thZGRy X2luICpzYWRkciwgY29uc3QgY2hhciAqc3RyKTsNCitpbnQgcGFyc2VfaG9zdF9wb3J0NihzdHJ1 Y3Qgc29ja2FkZHJfaW42ICpzYWRkciwgY29uc3QgY2hhciAqc3RyKTsNCiBpbnQgc29ja2V0X2lu aXQodm9pZCk7DQogDQogI2VuZGlmIC8qIFFFTVVfU09DS0VUX0ggKi8NCmRpZmYgLS1naXQgYS9u ZXQvTWFrZWZpbGUub2JqcyBiL25ldC9NYWtlZmlsZS5vYmpzDQppbmRleCA0ODU0YTE0Li4zNjRj Nzg1IDEwMDY0NA0KLS0tIGEvbmV0L01ha2VmaWxlLm9ianMNCisrKyBiL25ldC9NYWtlZmlsZS5v YmpzDQpAQCAtMiw2ICsyLDcgQEAgY29tbW9uLW9iai15ID0gbmV0Lm8gcXVldWUubyBjaGVja3N1 bS5vIHV0aWwubyBodWIubw0KIGNvbW1vbi1vYmoteSArPSBzb2NrZXQubw0KIGNvbW1vbi1vYmot eSArPSBkdW1wLm8NCiBjb21tb24tb2JqLXkgKz0gZXRoLm8NCitjb21tb24tb2JqLXkgKz0gbDJ0 cHYzLm8NCiBjb21tb24tb2JqLSQoQ09ORklHX1BPU0lYKSArPSB0YXAubw0KIGNvbW1vbi1vYmot JChDT05GSUdfTElOVVgpICs9IHRhcC1saW51eC5vDQogY29tbW9uLW9iai0kKENPTkZJR19XSU4z MikgKz0gdGFwLXdpbjMyLm8NCmRpZmYgLS1naXQgYS9uZXQvY2xpZW50cy5oIGIvbmV0L2NsaWVu dHMuaA0KaW5kZXggNzc5MzI5NC4uZWEyYTgzMSAxMDA2NDQNCi0tLSBhL25ldC9jbGllbnRzLmgN CisrKyBiL25ldC9jbGllbnRzLmgNCkBAIC00Nyw2ICs0NywxMSBAQCBpbnQgbmV0X2luaXRfdGFw KGNvbnN0IE5ldENsaWVudE9wdGlvbnMgKm9wdHMsIGNvbnN0IGNoYXIgKm5hbWUsDQogaW50IG5l dF9pbml0X2JyaWRnZShjb25zdCBOZXRDbGllbnRPcHRpb25zICpvcHRzLCBjb25zdCBjaGFyICpu YW1lLA0KICAgICAgICAgICAgICAgICAgICAgTmV0Q2xpZW50U3RhdGUgKnBlZXIpOw0KIA0KK2lu dCBuZXRfaW5pdF9yYXcoY29uc3QgTmV0Q2xpZW50T3B0aW9ucyAqb3B0cywgY29uc3QgY2hhciAq bmFtZSwNCisgICAgICAgICAgICAgICAgICAgIE5ldENsaWVudFN0YXRlICpwZWVyKTsNCisNCitp bnQgbmV0X2luaXRfbDJ0cHYzKGNvbnN0IE5ldENsaWVudE9wdGlvbnMgKm9wdHMsIGNvbnN0IGNo YXIgKm5hbWUsDQorICAgICAgICAgICAgICAgICAgICBOZXRDbGllbnRTdGF0ZSAqcGVlcik7DQog I2lmZGVmIENPTkZJR19WREUNCiBpbnQgbmV0X2luaXRfdmRlKGNvbnN0IE5ldENsaWVudE9wdGlv bnMgKm9wdHMsIGNvbnN0IGNoYXIgKm5hbWUsDQogICAgICAgICAgICAgICAgICBOZXRDbGllbnRT dGF0ZSAqcGVlcik7DQpkaWZmIC0tZ2l0IGEvbmV0L2wydHB2My5jIGIvbmV0L2wydHB2My5jDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNGI1ZDhlZQ0KLS0tIC9kZXYvbnVs bA0KKysrIGIvbmV0L2wydHB2My5jDQpAQCAtMCwwICsxLDYzMCBAQA0KKy8qDQorICogUUVNVSBT eXN0ZW0gRW11bGF0b3INCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IEZhYnJpY2Ug QmVsbGFyZA0KKyAqIENvcHlyaWdodCAoYykgMjAxMiBDaXNjbyBTeXN0ZW1zDQorICoNCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYSBjb3B5DQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCisgKiBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv biB0aGUgcmlnaHRzDQorICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbA0KKyAqIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KKyAq IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 DQorICoNCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbg0KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KKyAqDQorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IN CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwNCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTA0KKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSDQorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwNCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElODQor ICogVEhFIFNPRlRXQVJFLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXQvbDJ0cHYzLmgiDQorI2lu Y2x1ZGUgImNvbmZpZy1ob3N0LmgiDQorI2luY2x1ZGUgImNvbmZpZy1ob3N0LmgiDQorI2luY2x1 ZGUgIm5ldC9uZXQuaCINCisjaW5jbHVkZSAiY2xpZW50cy5oIg0KKyNpbmNsdWRlICJtb25pdG9y L21vbml0b3IuaCINCisjaW5jbHVkZSAicWVtdS1jb21tb24uaCINCisjaW5jbHVkZSAicWVtdS9l cnJvci1yZXBvcnQuaCINCisjaW5jbHVkZSAicWVtdS9vcHRpb24uaCINCisjaW5jbHVkZSAicWVt dS9zb2NrZXRzLmgiDQorI2luY2x1ZGUgInFlbXUvaW92LmgiDQorI2luY2x1ZGUgInFlbXUvbWFp bi1sb29wLmgiDQorI2luY2x1ZGUgPGxpbnV4L2lwLmg+DQorDQorDQorDQorDQorI2RlZmluZSBQ QUdFX1NJWkUgNDA5Ng0KKyNkZWZpbmUgTUFYX0wyVFBWM19JT1ZDTlQgNjQNCisNCit0eXBlZGVm IHN0cnVjdCBOZXRMMlRQVjNTdGF0ZSB7DQorICAgIE5ldENsaWVudFN0YXRlIG5jOw0KKyAgICBp bnQgZmQ7DQorICAgIGludCBzdGF0ZTsgLyogMCA9IGdldHRpbmcgbGVuZ3RoLCAxID0gZ2V0dGlu ZyBkYXRhICovDQorICAgIHVuc2lnbmVkIGludCBpbmRleDsNCisgICAgdW5zaWduZWQgaW50IHBh Y2tldF9sZW47DQorICAgIC8qIA0KKwl0aGVzZSBhcmUgdXNlZCBmb3IgeG1pdCAtIHRoYXQgaGFw cGVucyBwYWNrZXQgYSB0aW1lDQorCWFuZCBmb3IgZmlyc3Qgc2lnbiBvZiBsaWZlIHBhY2tldCAo ZWFzaWVyIHRvIHBhcnNlIHRoYXQgb25jZSkNCisNCisgICAgKi8gDQorICAgIHVpbnQ4X3QgKiBo ZWFkZXJfYnVmOw0KKyAgICB1aW50OF90ICogYnVmOw0KKyAgICBzdHJ1Y3QgaW92ZWMgKiB2ZWM7 DQorICAgIC8qIA0KKwl0aGVzZSBhcmUgdXNlZCBmb3IgcmVjZWl2ZSAtIHRyeSB0byAiZWF0IiB1 cCB0byAzMiBwYWNrZXRzIGF0IGEgdGltZQ0KKyAgICAqLw0KKyAgICBzdHJ1Y3QgbW1zZ2hkciAq IG1zZ3ZlYzsNCisgICAgLyoNCisgICAgICBjb250YWlucyBpbmV0IGhvc3QgYW5kIHBvcnQgZGVz dGluYXRpb24gaWYgDQorICAgICAgY29ubmVjdGlvbmxlc3MgKFNPQ0tfREdSQU0pLiBXaWxsIGJl IE5VTEwgaWYgDQorICAgICAgaW4gbGlzdGVuIG1vZGUgd2FpdGluZyBmb3IgZmlyc3QgY29ubmVj dA0KKw0KKyAgICAqLw0KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqIGRncmFtX2RzdDsg DQorICAgIHVpbnQ2NF90IHJ4X2Nvb2tpZTsNCisgICAgdWludDY0X3QgdHhfY29va2llOw0KKyAg ICB1aW50MzJfdCByeF9zZXNzaW9uOw0KKyAgICB1aW50MzJfdCB0eF9zZXNzaW9uOw0KKyAgICB1 aW50MzJfdCBoZWFkZXJfc2l6ZTsNCisgICAgdWludDMyX3QgY291bnRlcjsNCisgICAgdWludDMy X3QgZHN0X3NpemU7DQorICAgIHVpbnQzMl90IG5ld19tb2RlOw0KKyAgIA0KKyAgICAvKiBvZmZz ZXRzICovIA0KKw0KKyAgICB1aW50MzJfdCBvZmZzZXQ7ICAgLyogbWFpbiBvZmZzZXQgPT0gaGVh ZGVyIG9mZnNldCAqLw0KKyAgICB1aW50MzJfdCBjb29raWVfb2Zmc2V0Ow0KKyAgICB1aW50MzJf dCBjb3VudGVyX29mZnNldDsNCisgICAgdWludDMyX3Qgc2Vzc2lvbl9vZmZzZXQ7DQorDQorfSBO ZXRMMlRQVjNTdGF0ZTsNCisNCit0eXBlZGVmIHN0cnVjdCBOZXRMMlRQVjNMaXN0ZW5TdGF0ZSB7 DQorICAgIE5ldENsaWVudFN0YXRlIG5jOw0KKyAgICBjaGFyICptb2RlbDsNCisgICAgY2hhciAq bmFtZTsNCisgICAgaW50IGZkOw0KK30gTmV0TDJUUFYzTGlzdGVuU3RhdGU7DQorDQorc3RhdGlj IGludCBsMnRwdjNfcGFyc2VfY29va2llMzIoY29uc3QgY2hhciAqc3JjICwgdm9pZCAqIGRzdCkg ew0KKw0KKyAgaWYgKA0KKwkgKHNyYyA9PSBOVUxMKSB8fCANCisJIChzc2NhbmYoc3JjLCAiJXgi LCAodW5zaWduZWQgaW50ICopIGRzdCkgIT0gMSkNCisgICAgICApIHsgDQorCSBmcHJpbnRmKHN0 ZGVyciwgImNhbm5vdCBwYXJzZSBjb29raWUhISE6ICVzXG4iLCBzcmMpOw0KKwkgcmV0dXJuIC0x Ow0KKyAgIH0gDQorDQorICAgcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbDJ0cHYzX3Bh cnNlX2Nvb2tpZTY0KGNvbnN0IGNoYXIgKnNyYyAsIHZvaWQgKiBkc3QpIHsNCisNCisgICBzdHJ1 Y3QgdGVtcGh0b25sIHRlbXBoOw0KKyAgIHVpbnQzMl90IHRlbXA7DQorICAgY29uc3QgaW50IG51 bSA9IDQyOw0KKyAgICBpZiAoDQorCSAoc3JjID09IE5VTEwpIHx8IA0KKwkgKHNzY2FuZihzcmMs ICIlbHgiLCAobG9uZyB1bnNpZ25lZCBpbnQgKikgJnRlbXBoKSAhPSAxKQ0KKyAgICAgICkgeyAN CisJIGZwcmludGYoc3RkZXJyLCAiY2Fubm90IHBhcnNlIGNvb2tpZSEhITogJXNcbiIsIHNyYyk7 DQorCSByZXR1cm4gLTE7DQorICAgfSANCisNCisgICBpZigqKGNoYXIgKikmbnVtID09IDQyKSB7 DQorICAgICAgLy8gd2h5IG9oIHdoeSB0aGVyZSBpcyBubyBodG9ubGwNCisgICAgICB0ZW1wID0g aHRvbmwodGVtcGguaGlnaCk7DQorICAgICAgdGVtcGguaGlnaCA9IGh0b25sKHRlbXBoLmxvdyk7 DQorICAgICAgdGVtcGgubG93ID0gdGVtcDsNCisgICB9IGVsc2Ugew0KKyAgICAgIHRlbXBoLmxv dyA9IGh0b25sKHRlbXBoLmxvdyk7IA0KKyAgICAgIHRlbXBoLmhpZ2ggPSBodG9ubCh0ZW1waC5o aWdoKTsNCisgICB9CQ0KKw0KKyAgIG1lbWNweShkc3QsICZ0ZW1waCwgc2l6ZW9mICh1aW50NjRf dCkpOw0KKyAgIHJldHVybiAwOw0KK30NCisNCisNCitzdGF0aWMgaW50IGwydHB2M19mb3JtX2hl YWRlcihOZXRMMlRQVjNTdGF0ZSAqcykgew0KKyAgIA0KKyAgIHVpbnQzMl90ICpoZWFkZXI7DQor ICAgdWludDMyX3QgKnNlc3Npb247DQorICAgdWludDY0X3QgKmNvb2tpZTY0Ow0KKyAgIHVpbnQz Ml90ICpjb29raWUzMjsNCisgICB1aW50MzJfdCAqY291bnRlcjsNCisNCisgICBpZiAocy0+bmV3 X21vZGUgJiBORVdfTU9ERV9VRFApIHsNCisgICAgIGhlYWRlciA9ICh1aW50MzJfdCAqKSBzLT5o ZWFkZXJfYnVmOw0KKyAgICAgKiBoZWFkZXIgPSBodG9ubCgweDMwMDAwKTsNCisgICB9DQorICAg c2Vzc2lvbiA9ICh1aW50MzJfdCAqKSAocy0+aGVhZGVyX2J1ZiArIHMtPnNlc3Npb25fb2Zmc2V0 KTsNCisgICAqIHNlc3Npb24gPSBzLT50eF9zZXNzaW9uOwkNCisNCisgICBpZiAocy0+bmV3X21v ZGUgJiBORVdfTU9ERV9DT09LSUUpIHsNCisgICAgICBpZiAocy0+bmV3X21vZGUgJiBORVdfTU9E RV9DT09LSUVfU0laRSkgew0KKwkgY29va2llNjQgPSAodWludDY0X3QgKikocy0+aGVhZGVyX2J1 ZiArIHMtPmNvb2tpZV9vZmZzZXQpOw0KKwkgKiBjb29raWU2NCA9IHMtPnR4X2Nvb2tpZTsNCisg ICAgICB9IGVsc2Ugew0KKwkgY29va2llMzIgPSAodWludDMyX3QgKikgKHMtPmhlYWRlcl9idWYg KyBzLT5jb29raWVfb2Zmc2V0KTsNCisJICogY29va2llMzIgPSAqICgodWludDMyX3QgKikgcy0+ dHhfY29va2llKTsNCisgICAgICB9DQorICAgfQ0KKyAgIA0KKyAgIGlmICghKHMtPm5ld19tb2Rl ICYgTkVXX01PREVfTk9fQ09VTlRFUikpIHsNCisgICAgICBjb3VudGVyID0gKHVpbnQzMl90ICop KHMtPmhlYWRlcl9idWYgKyBzLT5jb3VudGVyX29mZnNldCk7DQorICAgICAgKiBjb3VudGVyID0g aHRvbmwoKysgcy0+Y291bnRlcik7DQorICAgfQ0KKw0KKyAgIHJldHVybiAwOw0KK30NCisNCisN CitzdGF0aWMgc3NpemVfdCBuZXRfbDJ0cHYzX3JlY2VpdmVfZGdyYW1faW92KE5ldENsaWVudFN0 YXRlICpuYywgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQpDQorew0KKyAgICBO ZXRMMlRQVjNTdGF0ZSAqcyA9IERPX1VQQ0FTVChOZXRMMlRQVjNTdGF0ZSwgbmMsIG5jKTsNCisN CisNCisgICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOw0KKyAgICBpbnQgcmV0Ow0KKyAgICBpZiAo aW92Y250ID4gTUFYX0wyVFBWM19JT1ZDTlQgLSAxKSB7DQorCWZwcmludGYoc3RkZXJyLCAiaW92 ZWMgdG9vIGxvbmcgJWQgPiAlZCwgY2hhbmdlIGwydHB2My5oXG4iLCBpb3ZjbnQsIE1BWF9MMlRQ VjNfSU9WQ05UKTsNCisJcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIGwydHB2M19mb3JtX2hlYWRl cihzKTsNCisgICAgbWVtY3B5KHMtPnZlYyArIDEsIGlvdiwgaW92Y250ICogc2l6ZW9mKHN0cnVj dCBpb3ZlYykpOw0KKyAgICBzLT52ZWMtPmlvdl9iYXNlID0gcy0+aGVhZGVyX2J1ZjsNCisgICAg cy0+dmVjLT5pb3ZfbGVuID0gcy0+b2Zmc2V0Ow0KKyAgICBpZiAocy0+ZGdyYW1fZHN0KSB7DQor ICAgICAgIG1lc3NhZ2UubXNnX25hbWUgPSBzLT5kZ3JhbV9kc3Q7DQorICAgICAgIG1lc3NhZ2Uu bXNnX25hbWVsZW4gPSBzLT5kc3Rfc2l6ZTsNCisgICAgICAgbWVzc2FnZS5tc2dfaW92ID0gKHN0 cnVjdCBpb3ZlYyAqKSBzLT52ZWM7DQorICAgICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IGlvdmNu dCArIDE7IA0KKyAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gTlVMTDsNCisgICAgICAgbWVz c2FnZS5tc2dfY29udHJvbGxlbiA9IDA7DQorICAgICAgIG1lc3NhZ2UubXNnX2ZsYWdzID0gMDsN CisgICAgICAgcmV0ID0gc2VuZG1zZyhzLT5mZCwgJm1lc3NhZ2UsIE1TR19ET05UV0FJVCkgLSBz LT5vZmZzZXQ7DQorICAgICAgIGlmIChyZXQgPT0gMCkgew0KKwkgICAgcmV0ID0gaW92X3NpemUg KGlvdiwgaW92Y250KTsNCisgICAgICAgfQ0KKyAgIH0gZWxzZSB7DQorICAgICAgZnByaW50Zihz dGRlcnIsICJubyBkc3QgeWV0XG4iKTsNCisgICAgICByZXQgPSBpb3Zfc2l6ZSAoaW92LCBpb3Zj bnQpOyAvKiBzaWxlbnRseSBkcm9wLCBvdGhlcndpc2UgaXQgaXMgYmVpbmcgc3R1cGlkICovDQor ICAgfQ0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCisNCitzdGF0aWMgc3NpemVfdCBuZXRfbDJ0 cHYzX3JlY2VpdmVfZGdyYW0oTmV0Q2xpZW50U3RhdGUgKm5jLCBjb25zdCB1aW50OF90ICpidWYs IHNpemVfdCBzaXplKQ0KK3sNCisgICAgTmV0TDJUUFYzU3RhdGUgKnMgPSBET19VUENBU1QoTmV0 TDJUUFYzU3RhdGUsIG5jLCBuYyk7DQorDQorICAgIHN0cnVjdCBpb3ZlYyAqIHZlYzsNCisNCisg ICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOw0KKyAgICBsMnRwdjNfZm9ybV9oZWFkZXIocyk7DQor ICAgIHZlYyA9IHMtPnZlYzsNCisgICAgdmVjLT5pb3ZfYmFzZSA9IHMtPmhlYWRlcl9idWY7DQor ICAgIHZlYy0+aW92X2xlbiA9IHMtPm9mZnNldDsNCisgICAgdmVjKys7DQorICAgIHZlYy0+aW92 X2Jhc2UgPSAodm9pZCAqKSBidWY7DQorICAgIHZlYy0+aW92X2xlbiA9IHNpemU7DQorDQorICAg IGlmIChzLT5kZ3JhbV9kc3QpIHsNCisgICAgICAgbWVzc2FnZS5tc2dfbmFtZSA9IHMtPmRncmFt X2RzdDsNCisgICAgICAgbWVzc2FnZS5tc2dfbmFtZWxlbiA9IHMtPmRzdF9zaXplOw0KKyAgICAg ICBtZXNzYWdlLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopIHMtPnZlYzsNCisgICAgICAgbWVz c2FnZS5tc2dfaW92bGVuID0gMjsNCisgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IE5VTEw7 DQorICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSAwOw0KKyAgICAgICBtZXNzYWdlLm1z Z19mbGFncyA9IDA7DQorICAgICAgIHNpemUgPSBzZW5kbXNnKHMtPmZkLCAmbWVzc2FnZSwgMCkg LSBzLT5vZmZzZXQ7DQorICAgfSBlbHNlIHsNCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIGRz dCB5ZXRcbiIpOw0KKyAgIH0NCisgICByZXR1cm4gc2l6ZTsgLyogc2lsZW50bHkgZHJvcCwgb3Ro ZXJ3aXNlIGl0IGlzIGJlaW5nIHN0dXBpZCAqLw0KK30NCisNCitzdGF0aWMgaW50IGwydHB2M192 ZXJpZnlfaGVhZGVyKE5ldEwyVFBWM1N0YXRlICpzLCB1aW50OF90ICpidWYpIHsNCisgICB1aW50 NjRfdCAqY29va2llNjQ7DQorICAgdWludDMyX3QgKmNvb2tpZTMyOw0KKyAgIHVpbnQzMl90ICpz ZXNzaW9uOw0KKw0KKw0KKyAgICBpZiAoKCEocy0+bmV3X21vZGUgJiBORVdfTU9ERV9JUF9WRVJT SU9OKSkgJiYgKCEocy0+bmV3X21vZGUgJiBORVdfTU9ERV9VRFApKSl7DQorCWJ1ZiArPSBzaXpl b2Yoc3RydWN0IGlwaGRyKSAvKiBmaXggZm9yIGlwdjQgcmF3ICovOw0KKyAgICB9IA0KKw0KKw0K KyAgIGlmIChzLT5uZXdfbW9kZSAmIE5FV19NT0RFX0NPT0tJRSkgew0KKyAgICAgIGlmIChzLT5u ZXdfbW9kZSAmIE5FV19NT0RFX0NPT0tJRV9TSVpFKSB7DQorCSAvKiA2NCBiaXQgY29va2llICov DQorCSBjb29raWU2NCA9ICh1aW50NjRfdCAqKShidWYgKyBzLT5jb29raWVfb2Zmc2V0KTsNCisJ IGlmICgqY29va2llNjQgIT0gcy0+cnhfY29va2llKSB7DQorCSAgICBmcHJpbnRmKHN0ZGVyciwg InVua25vd24gY29va2llIGlkXG4iKTsNCisJICAgIHJldHVybiAtMTsgLyogd2UgbmVlZCB0byBy ZXR1cm4gMCwgb3RoZXJ3aXNlIGJhcmZ1cyAqLw0KKwkgfQ0KKyAgICAgIH0gZWxzZSB7DQorCSBj b29raWUzMiA9ICh1aW50MzJfdCAqKShidWYgKyBzLT5jb29raWVfb2Zmc2V0KTsNCisJIGlmICgq Y29va2llMzIgIT0gKiAodWludDMyX3QgKikgJnMtPnJ4X2Nvb2tpZSkgew0KKwkgICAgZnByaW50 ZihzdGRlcnIsInVua25vd24gY29va2llIGlkXG4iKTsNCisJICAgIHJldHVybiAtMSA7IC8qIHdl IG5lZWQgdG8gcmV0dXJuIDAsIG90aGVyd2lzZSBiYXJmdXMgKi8NCisJIH0NCisgICAgICB9DQor ICAgfQ0KKyAgIHNlc3Npb24gPSAodWludDMyX3QgKikgKGJ1ZiArIHMtPnNlc3Npb25fb2Zmc2V0 KTsNCisgICBpZiAoKiBzZXNzaW9uICE9IHMtPnJ4X3Nlc3Npb24pIHsNCisgICAgICBmcHJpbnRm KHN0ZGVyciwic2Vzc2lvbiBtaXNtYXRjaFxuIik7DQorICAgICAgcmV0dXJuIC0xOw0KKyAgIH0J DQorICAgcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG5ldF9sMnRwdjNfc2VuZCh2b2lk ICpvcGFxdWUpDQorew0KKyAgICBOZXRMMlRQVjNTdGF0ZSAqcyA9IG9wYXF1ZTsNCisgICAgDQor ICAgIGludCBpLCBjb3VudCwgb2Zmc2V0Ow0KKyAgICANCisgICAgc3RydWN0IG1tc2doZHIgKiBt c2d2ZWM7DQorICAgIHN0cnVjdCBpb3ZlYyAqIHZlYzsNCisgICAgDQorICAgIA0KKyAgICBtc2d2 ZWMgPSBzLT5tc2d2ZWM7DQorICAgIG9mZnNldCA9IHMtPm9mZnNldDsNCisgICAgaWYgKCghKHMt Pm5ld19tb2RlICYgTkVXX01PREVfSVBfVkVSU0lPTikpICYmICghKHMtPm5ld19tb2RlICYgTkVX X01PREVfVURQKSkpew0KKwlvZmZzZXQgKz0gICBzaXplb2Yoc3RydWN0IGlwaGRyKTsNCisgICAg fSAgDQorICAgIGNvdW50ID0gcmVjdm1tc2cocy0+ZmQsIG1zZ3ZlYywgTUFYX0wyVFBWM19JT1ZD TlQvMiwgTVNHX0RPTlRXQUlULCBOVUxMKTsNCisgICAgZm9yIChpPTA7aTxjb3VudDtpKyspIHsN CisJaWYgKG1zZ3ZlYy0+bXNnX2xlbiA+IDApIHsNCisJICAgIHZlYyA9IG1zZ3ZlYy0+bXNnX2hk ci5tc2dfaW92Ow0KKwkgICAgaWYgKGwydHB2M192ZXJpZnlfaGVhZGVyKHMsIHZlYy0+aW92X2Jh c2UpID09IDApIHsNCisJCS8vdmVjLT5pb3ZfbGVuID0gb2Zmc2V0OyAvKiByZXNldCBzaXplIGp1 c3QgaW4gY2FzZSovDQorCQl2ZWMrKzsNCisJCXFlbXVfc2VuZF9wYWNrZXQoJnMtPm5jLCB2ZWMt Pmlvdl9iYXNlLCBtc2d2ZWMtPm1zZ19sZW4gLSBvZmZzZXQpOw0KKwkgICAgfSBlbHNlIHsNCisJ CWZwcmludGYoc3RkZXJyLCAibDJ0cHYzIGhlYWRlciB2ZXJpZmljYXRpb24gZmFpbGVkXG4iKTsN CisJCXZlYy0+aW92X2xlbiA9IG9mZnNldDsNCisJCXZlYysrOw0KKwkgICAgfQ0KKwkgICAgLy92 ZWMtPmlvdl9sZW4gPSBQQUdFX1NJWkU7IC8qIHJlc2V0IGZvciBuZXh0IHJlYWQgKi8NCisJfSAN CisJbXNndmVjKys7DQorICAgIH0NCit9DQorDQorc3RhdGljIHZvaWQgbmV0X2wydHB2M19jbGVh bnVwKE5ldENsaWVudFN0YXRlICpuYykgDQorew0KKyAgICBOZXRMMlRQVjNTdGF0ZSAqcyA9IERP X1VQQ0FTVChOZXRMMlRQVjNTdGF0ZSwgbmMsIG5jKTsNCisgICAgcWVtdV9zZXRfZmRfaGFuZGxl cihzLT5mZCwgTlVMTCwgTlVMTCwgTlVMTCk7DQorICAgIGNsb3NlKHMtPmZkKTsNCit9DQorDQor c3RhdGljIE5ldENsaWVudEluZm8gbmV0X2wydHB2M19pbmZvID0gew0KKyAgICAudHlwZSA9IE5F VF9DTElFTlRfT1BUSU9OU19LSU5EX0wyVFBWMywNCisgICAgLnNpemUgPSBzaXplb2YoTmV0TDJU UFYzU3RhdGUpLA0KKyAgICAucmVjZWl2ZSA9IG5ldF9sMnRwdjNfcmVjZWl2ZV9kZ3JhbSwNCisg ICAgLnJlY2VpdmVfaW92ID0gbmV0X2wydHB2M19yZWNlaXZlX2RncmFtX2lvdiwNCisgICAgLmNs ZWFudXAgPSBuZXRfbDJ0cHYzX2NsZWFudXAsDQorfTsNCisNCitzdGF0aWMgaW50IG5ldF9sMnRw djNfaW5pdChOZXRDbGllbnRTdGF0ZSAqcGVlciwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpuYW1lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnNyYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpkc3QsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqbmV3X21vZGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqdHhfY29va2llLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnJ4X2Nvb2tpZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICp0eF9zZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKnJ4X3Nlc3Npb24NCispDQorew0KKyAgIE5ldEwyVFBWM1N0YXRlICpzOw0KKyAg IE5ldENsaWVudFN0YXRlICpuYzsNCisNCisgICBpbnQgZmQsIGk7DQorDQorICAgaW50IHNvY2tf ZmFtaWx5LCBzb2NrX3R5cGUsIHNvY2tfcHJvdG87DQorICAgdW5zaWduZWQgaW50IHRlbXA7DQor ICAgDQorICAgc3RydWN0IG1tc2doZHIgKiBtc2d2ZWM7DQorICAgc3RydWN0IGlvdmVjICogaW92 Ow0KKw0KKw0KKyAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIExvY2FsU29jazsNCisNCisgICAg ICAgDQorICAgZnByaW50ZihzdGRlcnIsICJsMnRwdjMgdXNlciBpbml0IG1vZGUgJXNcbiIsIG5l d19tb2RlKTsNCisgICBtZW1zZXQoJkxvY2FsU29jaywgMCAsIHNpemVvZihMb2NhbFNvY2spKTsN CisNCisgICBuYyA9IHFlbXVfbmV3X25ldF9jbGllbnQoJm5ldF9sMnRwdjNfaW5mbywgcGVlciwg ImwydHB2MyIsIG5hbWUpOw0KKw0KKyAgIHMgPSBET19VUENBU1QoTmV0TDJUUFYzU3RhdGUsIG5j LCBuYyk7DQorDQorICAgcy0+aGVhZGVyX2J1ZiA9IGdfbWFsbG9jKDI1Nik7ICAgIA0KKw0KKyAg IGlmIChzLT5oZWFkZXJfYnVmID09IE5VTEwpIHsNCisJZnByaW50ZihzdGRlcnIsICJGYWlsZWQg dG8gYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlciBcbiIpOw0KKwlyZXR1cm4gLTE7DQorICAgfSANCisg ICBzLT5idWYgPSBnX21hbGxvYyhQQUdFX1NJWkUpOyAgICANCisNCisgICBpZiAocy0+YnVmID09 IE5VTEwpIHsNCisJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgcGFja2V0IGJ1 ZmZlciBcbiIpOw0KKwlyZXR1cm4gLTE7DQorICAgfSANCisgICBzLT52ZWMgPSBnX21hbGxvYyhz aXplb2Yoc3RydWN0IGlvdmVjKSAqIE1BWF9MMlRQVjNfSU9WQ05UKTs7ICAgIA0KKyAgIGlmIChz LT52ZWMgPT0gTlVMTCkgew0KKwlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBw YWNrZXQgdmVjIFxuIik7DQorCXJldHVybiAtMTsNCisgICB9IA0KKw0KKyAgIA0KKyAgIHMtPm9m ZnNldCA9IDQ7DQorICAgcy0+c2Vzc2lvbl9vZmZzZXQgPSAwOw0KKyAgIHMtPmNvb2tpZV9vZmZz ZXQgPSA0Ow0KKyAgIHMtPmNvdW50ZXJfb2Zmc2V0ID0gNDsNCisgICBzLT5kc3Rfc2l6ZSA9IHNp emVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSk7DQorDQorICAgc3NjYW5mKG5ld19tb2RlLCAi JXgiLCAmcy0+bmV3X21vZGUpOw0KKw0KKw0KKyAgIGZwcmludGYoc3RkZXJyLCAidHlwZSBpczog JXMgLT4gJXhcbiIsIG5ld19tb2RlLCBzLT5uZXdfbW9kZSk7DQorDQorICAgLyogQ29va2llcyAq LyANCisNCisgIGlmICgNCisJICh0eF9zZXNzaW9uID09IE5VTEwpIHx8IA0KKwkgKHNzY2FuZih0 eF9zZXNzaW9uLCAiJXgiLCAmdGVtcCkgIT0gMSkNCisgICAgICApIHsgDQorCSBmcHJpbnRmKHN0 ZGVyciwgImNhbm5vdCBwYXJzZSB0eF9zZXNzaW9uISEhOiAlc1xuIiwgdHhfc2Vzc2lvbik7DQor CSByZXR1cm4gLTE7DQorICAgfSBlbHNlIHsNCisgICAgICBzLT50eF9zZXNzaW9uID0gaHRvbmwo dGVtcCk7DQorICAgICAgZnByaW50ZihzdGRlcnIsICJsMnRwdjNfb3BlbiA6ICBwYXJzZWQgdHgg c2Vzc2lvbiAzMiwgJTB4XG4iLCBzLT50eF9zZXNzaW9uKTsNCisgICB9DQorDQorICBpZiAoDQor CSAodHhfc2Vzc2lvbiA9PSBOVUxMKSB8fCANCisJIChzc2NhbmYocnhfc2Vzc2lvbiwgIiV4Iiwg JnRlbXApICE9IDEpDQorICAgICAgKSB7IA0KKwkgZnByaW50ZihzdGRlcnIsICJjYW5ub3QgcGFy c2Ugcnhfc2Vzc2lvbiEhITogJXNcbiIsIHJ4X3Nlc3Npb24pOw0KKwkgcmV0dXJuIC0xOw0KKyAg IH0gIGVsc2Ugew0KKyAgICAgIHMtPnJ4X3Nlc3Npb24gPSBodG9ubCh0ZW1wKTsNCisgICAgICBm cHJpbnRmKHN0ZGVyciwgImwydHB2M19vcGVuIDogIHBhcnNlZCByeCBzZXNzaW9uIDMyLCAlMHhc biIsIHMtPnJ4X3Nlc3Npb24pOw0KKyAgIH0NCisgICBpZiAocy0+bmV3X21vZGUgJiBORVdfTU9E RV9DT09LSUUpIHsNCisgICAgICBpZiAocy0+bmV3X21vZGUgJiBORVdfTU9ERV9DT09LSUVfU0la RSkgew0KKwkgLyogNjQgYml0IGNvb2tpZSAqLw0KKwkgcy0+b2Zmc2V0ICs9IDg7DQorCSBzLT5j b3VudGVyX29mZnNldCArPSA4Ow0KKwkgaWYgKGwydHB2M19wYXJzZV9jb29raWU2NCh0eF9jb29r aWUsJnMtPnR4X2Nvb2tpZSkgIT0wKSB7DQorCSAgICBmcHJpbnRmKHN0ZGVyciwgImwydHB2M19v cGVuIDogIGZhaWxlZCB0byBwYXJzZSB0eCBjb29raWUgNjRcbiIpOw0KKwkgICAgcmV0dXJuIC0x Ow0KKwkgfSBlbHNlIHsNCisJICAgIGZwcmludGYoc3RkZXJyLCAibDJ0cHYzX29wZW4gOiAgcGFy c2VkIHR4IGNvb2tpZSA2NCwgJTBseFxuIiwgcy0+dHhfY29va2llKTsNCisJIH0NCisJIGlmIChs MnRwdjNfcGFyc2VfY29va2llNjQocnhfY29va2llLCZzLT5yeF9jb29raWUpICE9MCkgew0KKwkg ICAgZnByaW50ZihzdGRlcnIsICJsMnRwdjNfb3BlbiA6ICBmYWlsZWQgdG8gcGFyc2UgcnggY29v a2llIDY0XG4iKTsNCisJICAgIHJldHVybiAtMTsNCisJIH0gZWxzZSB7DQorCSAgICBmcHJpbnRm KHN0ZGVyciwgImwydHB2M19vcGVuIDogIHBhcnNlZCByeCBjb29raWUgNjQsICUwbHhcbiIsIHMt PnJ4X2Nvb2tpZSk7DQorCSB9DQorICAgICAgfSBlbHNlIHsNCisJIC8qIDMyIGJpdCBjb29raWUg Ki8NCisJIHMtPm9mZnNldCArPSA0Ow0KKwkgcy0+Y291bnRlcl9vZmZzZXQgKz00Ow0KKwkgcy0+ dHhfY29va2llID0gMDsNCisJIGlmIChsMnRwdjNfcGFyc2VfY29va2llMzIodHhfY29va2llLCZz LT50eF9jb29raWUpICE9MCkgew0KKwkgICAgZnByaW50ZihzdGRlcnIsICJsMnRwdjNfb3BlbiA6 ICBmYWlsZWQgdG8gcGFyc2UgdHggY29va2llIDMyXG4iKTsNCisJICAgIHJldHVybiAtMTsNCisJ IH0NCisJIHMtPnJ4X2Nvb2tpZSA9IDA7DQorCSBpZiAobDJ0cHYzX3BhcnNlX2Nvb2tpZTMyKHJ4 X2Nvb2tpZSwmcy0+cnhfY29va2llKSAhPTApIHsNCisJICAgIGZwcmludGYoc3RkZXJyLCAibDJ0 cHYzX29wZW4gOiAgZmFpbGVkIHRvIHBhcnNlIHJ4IGNvb2tpZSAzMlxuIik7DQorCSAgICByZXR1 cm4gLTE7DQorCSB9DQorICAgICAgfQ0KKyAgIH0NCisNCisgICAgICAgICANCisgICAgIA0KKyAg IGlmIChkc3QgJiYgKHN0cmxlbihkc3QpID4gMCApKSB7ICAgICAgICAgDQorICAgICAgLyogd2Ug bm93IGFsbG9jYXRlIGl0IG9ubHkgaWYgaXQgd2UgYXJlIG5vdCAibGlzdGVuaW5nIiAqLw0KKyAg ICAgIHMtPmRncmFtX2RzdCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Up KTsNCisgICAgICBtZW1zZXQocy0+ZGdyYW1fZHN0LCAwICwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk cl9zdG9yYWdlKSk7DQorICAgICAgZnByaW50ZihzdGRlcnIsICJsMnRwdjNfb3BlbiA6IHNldHRp bmcgZHN0IGF0IGluaXRcbiIpOw0KKyAgIH0gZWxzZSB7DQorICAgICAgcy0+ZGdyYW1fZHN0ID0g TlVMTDsNCisgICB9DQorDQorICAgaWYgKHMtPm5ld19tb2RlICYgTkVXX01PREVfSVBfVkVSU0lP Tikgew0KKyAgICAgIC8qIElQdjYgKi8NCisgICAgICBzb2NrX2ZhbWlseSA9IEFGX0lORVQ2Ow0K KyAgICAgIGlmIChwYXJzZV9ob3N0X3BvcnQ2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZMb2Nh bFNvY2ssIHNyYykgIT0wKSB7DQorCSBmcHJpbnRmKHN0ZGVyciwgImwydHB2M19vcGVuIDogIGZh aWxlZCB0byBwYXJzZSB2NiBkc3RcbiIpOw0KKwkgcmV0dXJuIC0xOw0KKyAgICAgIH07DQorICAg fSBlbHNlIHsNCisgICAgICAvKiBJUHY0ICovDQorICAgICAgc29ja19mYW1pbHkgPSBBRl9JTkVU Ow0KKyAgICAgIGlmIChwYXJzZV9ob3N0X3BvcnQoKHN0cnVjdCBzb2NrYWRkcl9pbiopICZMb2Nh bFNvY2ssIHNyYykgIT0gMCkgew0KKwkgZnByaW50ZihzdGRlcnIsICJsMnRwdjNfb3BlbiA6ICBm YWlsZWQgdG8gcGFyc2UgdjQgc3JjXG4iKTsNCisJIHJldHVybiAtMTsNCisgICAgICB9Ow0KKyAg IH0NCisgICBpZiAocy0+bmV3X21vZGUgJiBORVdfTU9ERV9VRFApIHsNCisgICAgICBzb2NrX3R5 cGUgPSBTT0NLX0RHUkFNOw0KKyAgICAgIHNvY2tfcHJvdG8gPSAwOw0KKyAgICAgIC8qIHNwYWNl IGZvciBoZWFkZXIgKi8NCisNCisgICAgICBzLT5vZmZzZXQgKz0gNDsNCisgICAgICBzLT5jb3Vu dGVyX29mZnNldCArPSA0Ow0KKyAgICAgIHMtPnNlc3Npb25fb2Zmc2V0ICs9IDQ7DQorICAgICAg cy0+Y29va2llX29mZnNldCArPSA0Ow0KKyAgICB9IGVsc2Ugew0KKyAgICAgIHNvY2tfdHlwZSA9 IFNPQ0tfUkFXOw0KKyAgICAgIHNvY2tfcHJvdG8gPSAweDczOw0KKyAgICAgIGlmIChzLT5uZXdf bW9kZSAmIE5FV19NT0RFX0lQX1ZFUlNJT04pIHsNCisJIC8qIElQdjYgKi8NCisJICgoc3RydWN0 IHNvY2thZGRyX2luNiAqKSAmTG9jYWxTb2NrKS0+c2luNl9wb3J0ID0gaHRvbnMoMHg3Myk7DQor ICAgICAgfSBlbHNlIHsNCisJIC8qIElQdjQgKi8NCisJICgoc3RydWN0IHNvY2thZGRyX2luICop ICZMb2NhbFNvY2spLT5zaW5fcG9ydCA9IGh0b25zKDB4NzMpOw0KKyAgICAgIH0NCisgICB9DQor DQorICAgaWYgKCEocy0+bmV3X21vZGUgJiBORVdfTU9ERV9OT19DT1VOVEVSKSkgew0KKyAgICAg IHMtPm9mZnNldCArPSA0Ow0KKyAgIH0NCisgICBpZiAoKGZkID0gc29ja2V0KHNvY2tfZmFtaWx5 LCBzb2NrX3R5cGUsIHNvY2tfcHJvdG8pKSA9PSAtMSkgew0KKyAgICAgIGZkID0gLWVycm5vOw0K KyAgICAgIGZwcmludGYoc3RkZXJyLCAibDJ0cHYzX29wZW4gOiBzb2NrZXQgY3JlYXRpb24gZmFp bGVkLCAiDQorCSAgICAgICAiZXJybm8gPSAlZFxuIiwgLWZkKTsNCisgICAgICByZXR1cm4gZmQ7 DQorICAgfSANCisNCisNCisgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmTG9j YWxTb2NrLCBzaXplb2YoTG9jYWxTb2NrKSkpIHsNCisgICAgICBmcHJpbnRmKHN0ZGVyciwgImwy dHB2M19vcGVuIDogIGNvdWxkIG5vdCBiaW5kIHNvY2tldCBlcnI9JWlcbiIsIGVycm5vKTsNCisg ICAgICBjbG9zZShmZCk7DQorICAgICAgcmV0dXJuIC0xOw0KKyAgIH0gZWxzZSB7DQorICAgICAg ZnByaW50ZihzdGRlcnIsICJsMnRwdjNfb3BlbiA6IHNvY2tldCBib3VuZCBzdWNjZXNzZnVsbHlc biIpOw0KKyAgIH0NCisgICBpZiAocy0+ZGdyYW1fZHN0KSB7DQorICAgICAgaWYgKHMtPm5ld19t b2RlICYgTkVXX01PREVfSVBfVkVSU0lPTikgew0KKwkgLyogSVB2NiAqLw0KKwkgaWYgKHBhcnNl X2hvc3RfcG9ydDYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgcy0+ZGdyYW1fZHN0LCBkc3QpICE9 MCkgew0KKwkgICAgZnByaW50ZihzdGRlcnIsICJsMnRwdjNfb3BlbiA6ICBmYWlsZWQgdG8gcGFy c2UgdjYgZHN0XG4iKTsNCisJICAgIHJldHVybiAtMTsNCisJIH07DQorCSBzLT5kc3Rfc2l6ZSA9 IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsNCisgICAgICB9IGVsc2Ugew0KKwkgLyogSVB2 NCAqLw0KKwkgaWYgKHBhcnNlX2hvc3RfcG9ydCgoc3RydWN0IHNvY2thZGRyX2luICopIHMtPmRn cmFtX2RzdCwgZHN0KSAhPSAwKSB7DQorCSAgICBmcHJpbnRmKHN0ZGVyciwgImwydHB2M19vcGVu IDogIGZhaWxlZCB0byBwYXJzZSB2NCBkc3RcbiIpOw0KKwkgICAgcmV0dXJuIC0xOw0KKwkgfTsN CisJIHMtPmRzdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7DQorICAgICAgfQ0K KyAgIH0NCisNCisgICBzLT5tc2d2ZWMgPSBnX21hbGxvYyhzaXplb2Yoc3RydWN0IG1tc2doZHIp ICogKE1BWF9MMlRQVjNfSU9WQ05ULzIpKTsNCisgICBpZiAocy0+bXNndmVjID09IE5VTEwpIHsN CisJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVjZWl2ZSBwYWNrZXQgdmVj IFxuIik7DQorCXJldHVybiAtMTsNCisgICB9DQorICAgbXNndmVjID0gcy0+bXNndmVjOw0KKyAg ICANCisgICBmb3IgKGk9MDtpPE1BWF9MMlRQVjNfSU9WQ05ULzI7aSsrKSB7DQorCS8qIHdlIG5l ZWQgdG8gYWxsb2NhdGUgdGhlc2Ugb25seSBmb3IgdGhlIGZpcnN0IHRpbWUgYW5kIGZpcnN0IGJ1 ZmZlciAqLw0KKwltc2d2ZWMtPm1zZ19oZHIubXNnX25hbWUgPSBOVUxMOw0KKwltc2d2ZWMtPm1z Z19oZHIubXNnX25hbWVsZW4gPSAwOw0KKwlpb3YgPSAgZ19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBp b3ZlYykgKiAyKTsNCisJaWYgKGlvdiA9PSBOVUxMKSB7DQorCSAgICBmcHJpbnRmKHN0ZGVyciwg IkZhaWxlZCB0byBhbGxvY2F0ZSByZWNlaXZlIHBhY2tldCB2ZWMgXG4iKTsNCisJICAgIHJldHVy biAtMTsNCisJfQ0KKwltc2d2ZWMtPm1zZ19oZHIubXNnX2lvdiA9IGlvdjsNCisJaWYgKCghKHMt Pm5ld19tb2RlICYgTkVXX01PREVfSVBfVkVSU0lPTikpICYmICghKHMtPm5ld19tb2RlICYgTkVX X01PREVfVURQKSkpew0KKwkgICAgaW92LT5pb3ZfYmFzZSA9IGdfbWFsbG9jKHMtPm9mZnNldCAr IHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsgLyogZml4IGZvciBpcHY0IHJhdyAqLzsNCisJfSBlbHNl IHsNCisJICAgIGlvdi0+aW92X2Jhc2UgPSBnX21hbGxvYyhzLT5vZmZzZXQpOw0KKwl9DQorCQ0K KwlpZiAoaW92LT5pb3ZfYmFzZSA9PSBOVUxMKSB7DQorCSAgICBmcHJpbnRmKHN0ZGVyciwgIkZh aWxlZCB0byBhbGxvY2F0ZSByZWNlaXZlIHBhY2tldCB2ZWMgXG4iKTsNCisJICAgIHJldHVybiAt MTsNCisJfQ0KKwlpZiAoKCEocy0+bmV3X21vZGUgJiBORVdfTU9ERV9JUF9WRVJTSU9OKSkgJiYg KCEocy0+bmV3X21vZGUgJiBORVdfTU9ERV9VRFApKSl7DQorCSAgICBpb3YtPmlvdl9sZW4gPSBz LT5vZmZzZXQgKyBzaXplb2YgKHN0cnVjdCBpcGhkcik7DQorCX0gZWxzZSB7DQorCSAgICBpb3Yt Pmlvdl9sZW4gPSBzLT5vZmZzZXQ7DQorCX0NCisJaW92KysgOw0KKwlpb3YtPmlvdl9iYXNlID0g cWVtdV9tZW1hbGlnbihQQUdFX1NJWkUsIFBBR0VfU0laRSk7DQorCWlmIChpb3YtPmlvdl9iYXNl ID09IE5VTEwpIHsNCisJICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJl Y2VpdmUgcGFja2V0IHZlYyBcbiIpOw0KKwkgICAgcmV0dXJuIC0xOw0KKwl9DQorCWlvdi0+aW92 X2xlbiA9IFBBR0VfU0laRTsNCisJbXNndmVjLT5tc2dfaGRyLm1zZ19pb3ZsZW4gPSAyOw0KKwlt c2d2ZWMtPm1zZ19oZHIubXNnX2NvbnRyb2wgPSBOVUxMOw0KKwltc2d2ZWMtPm1zZ19oZHIubXNn X2NvbnRyb2xsZW4gPSAwOw0KKwltc2d2ZWMtPm1zZ19oZHIubXNnX2ZsYWdzID0gMDsNCisJbXNn dmVjKys7DQorICAgfQ0KKyANCisvLyAgIHNlbmRidWZmID0gOTAwMDA7DQorLy8NCisvLyAgcHJp bnRmKCJzZXRzIHRoZSBzZW5kIGJ1ZmZlciB0byAlZFxuIiwgc2VuZGJ1ZmYpOw0KKy8vIHNldHNv Y2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgJnNlbmRidWZmLCBzaXplb2Yoc2VuZGJ1 ZmYpKTsNCisNCisgICBxZW11X3NldF9ub25ibG9jayhmZCk7DQorDQorICAgaWYgKGZkIDwgMCkN CisJcmV0dXJuIC0xOw0KKw0KKyAgIHMtPmZkID0gZmQ7DQorICAgcy0+Y291bnRlciA9IDA7DQor DQorICAgcWVtdV9zZXRfZmRfaGFuZGxlcihzLT5mZCwgbmV0X2wydHB2M19zZW5kLCBOVUxMLCBz KTsNCisNCisgICBpZiAoIXMpIHsNCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJsMnRwdjNfb3Bl biA6IGZhaWxlZCB0byBzZXQgZmQgaGFuZGxlclxuIik7DQorICAgICAgcmV0dXJuIC0xOw0KKyAg IH0NCisNCisgICAvKiB0aGlzIG5lZWRzIGZpeGluZyB0b28gKi8NCisNCisgICBzbnByaW50Zihz LT5uYy5pbmZvX3N0ciwgc2l6ZW9mKHMtPm5jLmluZm9fc3RyKSwNCisgICAgICAgICAgICAgImwy dHB2MzogY29ubmVjdGVkIik7DQorICAgcmV0dXJuIDA7DQorDQorfQ0KKw0KK2ludCBuZXRfaW5p dF9sMnRwdjMoY29uc3QgTmV0Q2xpZW50T3B0aW9ucyAqb3B0cywNCisgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm5hbWUsDQorICAgICAgICAgICAgICAgICAgICBOZXRDbGllbnRTdGF0 ZSAqcGVlcikgew0KKw0KKw0KKyAgICBjb25zdCBOZXRkZXZMMlRQdjNPcHRpb25zICogbDJ0cHYz Ow0KKyAgICBhc3NlcnQob3B0cy0+a2luZCA9PSBORVRfQ0xJRU5UX09QVElPTlNfS0lORF9MMlRQ VjMpOw0KKyAgICBsMnRwdjMgPSBvcHRzLT5sMnRwdjM7DQorDQorDQorICBpZiAoIShsMnRwdjMt Pmhhc19zcmMgJiYgbDJ0cHYzLT5oYXNfbW9kZSAmJiBsMnRwdjMtPmhhc190eHNlc3Npb24gJiYg bDJ0cHYzLT5oYXNfcnhzZXNzaW9uKSkgew0KKyAgICAgIGVycm9yX3JlcG9ydCgic3JjPSwgZHN0 PSwgdHhzZXNzaW9uPSwgcnhzZXNzaW9uPSBhbmQgbW9kZT0gYXJlIHJlcXVpcmVkIGZvciBsMnRw djMiKTsNCisgICAgICByZXR1cm4gLTE7DQorICB9DQorDQorDQorICAvKiB0aGlzIG5lZWRzIGNs ZWFuaW5nIHVwIGZvciBuZXcgQVBJICovDQorDQorICBpZiAobmV0X2wydHB2M19pbml0KA0KKwkg cGVlciwgDQorICAgICAgICAgbmFtZSwNCisJIGwydHB2My0+c3JjLCANCisJIGwydHB2My0+ZHN0 LCANCisJIGwydHB2My0+bW9kZSwgDQorCSBsMnRwdjMtPnR4Y29va2llLA0KKwkgbDJ0cHYzLT5y eGNvb2tpZSwNCisJIGwydHB2My0+dHhzZXNzaW9uLA0KKwkgbDJ0cHYzLT5yeHNlc3Npb24NCisg ICAgICANCisgICApID09IC0xKSB7DQorICAgICAgcmV0dXJuIC0xOw0KKyAgfQ0KKyAgcmV0dXJu IDA7DQorfQ0KZGlmZiAtLWdpdCBhL25ldC9sMnRwdjMuaCBiL25ldC9sMnRwdjMuaA0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjgyMmUwYjANCi0tLSAvZGV2L251bGwNCisr KyBiL25ldC9sMnRwdjMuaA0KQEAgLTAsMCArMSw2NSBAQA0KKy8qDQorICogUUVNVSBTeXN0ZW0g RW11bGF0b3INCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IEZhYnJpY2UgQmVsbGFy ZA0KKyAqIENvcHlyaWdodCAoYykgMjAxMiBDaXNjbyBTeXN0ZW1zDQorICoNCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYSBjb3B5DQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCisgKiBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg cmlnaHRzDQorICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbA0KKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KKyAqIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorICoN CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbg0KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KKyAqDQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwNCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTA0KKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS DQorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwNCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElODQorICogVEhF IFNPRlRXQVJFLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJxZW11LWNvbW1vbi5oIg0KKw0KKyNpZm5k ZWYgUUVNVV9ORVRfTDJUUFYzX0gNCisjZGVmaW5lIFFFTVVfTkVUX0wyVFBWM19IDQorDQorI2Rl ZmluZSBMMlRQVjNfQlVGU0laRSAyMDQ4DQorDQorI2RlZmluZSBORVdfTU9ERV9JUF9WRVJTSU9O ICAgMQkJICAvKiBvbiBmb3IgdjYsIG9mZiBmb3IgdjQgKi8NCisjZGVmaW5lIE5FV19NT0RFX1VE UAkgICAgICAyCQkgIC8qIG9uIGZvciB1ZHAsIG9mZiBmb3IgcmF3IGlwICovDQorI2RlZmluZSBO RVdfTU9ERV9DT09LSUUJICAgICAgNAkJICAvKiBjb29raWUgcHJlc2VudCAqLw0KKyNkZWZpbmUg TkVXX01PREVfQ09PS0lFX1NJWkUgIDgJCSAgLyogb24gZm9yIDY0IGJpdCAqLw0KKyNkZWZpbmUg TkVXX01PREVfTk9fQ09VTlRFUiAgIDE2CSAgLyogRFQgLSBubyBjb3VudGVyICovDQorDQorLyog bGVnYWN5IG1vZGVzICovDQorDQorLyogbW9kZSAwICovDQorDQorI2RlZmluZSBMRUdBQ1lfVURQ Nl82NF9OT19DT1VOVEVSIChORVdfTU9ERV9JUF9WRVJTSU9OICsgTkVXX01PREVfVURQICsgTkVX X01PREVfQ09PS0lFICsgTkVXX01PREVfQ09PS0lFX1NJWkUgKyBORVdfTU9ERV9OT19DT1VOVEVS KQ0KKw0KKyNkZWZpbmUgTEVHQUNZX01PREUwIExFR0FDWV9VRFA2XzY0X05PX0NPVU5URVINCisN CisvKiBtb2RlIDEgKi8NCisNCisjZGVmaW5lIExFR0FDWV9JUDZfNjRfTk9fQ09VTlRFUiAoTkVX X01PREVfSVBfVkVSU0lPTiArIE5FV19NT0RFX0NPT0tJRSArIE5FV19NT0RFX0NPT0tJRV9TSVpF ICsgTkVXX01PREVfTk9fQ09VTlRFUikNCisNCisjZGVmaW5lIExFR0FDWV9NT0RFMSBMRUdBQ1lf SVA2XzY0X05PX0NPVU5URVINCisNCisvKiBtb2RlIDIgKi8NCisNCisjZGVmaW5lIExFR0FDWV9V RFA0XzY0X0NPVU5URVIgKE5FV19NT0RFX0NPT0tJRSArIE5FV19NT0RFX1VEUCArIE5FV19NT0RF X0NPT0tJRV9TSVpFICkNCisNCisjZGVmaW5lIExFR0FDWV9NT0RFMiBMRUdBQ1lfVURQNF82NF9D T1VOVEVSDQorDQorc3RydWN0IHRlbXBodG9ubCB7DQorICAgdWludDMyX3QgbG93OyANCisgICB1 aW50MzJfdCBoaWdoOw0KK307DQorDQorDQorI2VuZGlmIC8qIFFFTVVfTkVUX1NPQ0tFVF9IICov DQpkaWZmIC0tZ2l0IGEvbmV0L25ldC5jIGIvbmV0L25ldC5jDQppbmRleCAwYTg4ZTY4Li5iYTVm NTFiIDEwMDY0NA0KLS0tIGEvbmV0L25ldC5jDQorKysgYi9uZXQvbmV0LmMNCkBAIC0xMzIsNiAr MTMyLDQzIEBAIGludCBwYXJzZV9ob3N0X3BvcnQoc3RydWN0IHNvY2thZGRyX2luICpzYWRkciwg Y29uc3QgY2hhciAqc3RyKQ0KICAgICByZXR1cm4gMDsNCiB9DQogDQoraW50IHBhcnNlX2hvc3Rf cG9ydDYoc3RydWN0IHNvY2thZGRyX2luNiAqc2FkZHIsIGNvbnN0IGNoYXIgKnN0cikNCit7DQor ICAgIGNoYXIgYnVmWzUxMl07DQorICAgIGNoYXIgKnAsICppcCwgKnBvcnQ7DQorDQorICAgIHN0 cm5jcHkoKGNoYXIgKikgJmJ1Ziwgc3RyLCA1MTEpOw0KKyAgICBpcCA9IChjaGFyICopICZidWY7 DQorICAgIHBvcnQgPSBOVUxMOw0KKyAgICBpbnQgcG9ydGludDsNCisNCisNCisgICAgZm9yIChw ID0gKGNoYXIgKikgJmJ1ZjsgKHAgPCAoY2hhciAqKSAmYnVmICsgc3RybGVuKHN0cikpIHx8IChw IDwgKGNoYXIgKikgJmJ1ZiArIDUxMik7IHArKyl7DQorICAgICAgaWYgKCpwID09ICdbJykgew0K KwkgaXAgPSBwICsgMTsNCisgICAgICB9DQorICAgICAgaWYgKCpwID09ICddJykgew0KKwkgKnAg PSAnXDAnOw0KKyAgICAgICAgaWYgKCoocCArIDEpID09ICc6Jykgew0KKwkgICAgcG9ydCA9IHAg KyAyOw0KKwl9DQorCWJyZWFrOw0KKyAgICAgIH0NCisgICAgfSANCisNCisgICAgc2FkZHItPnNp bjZfZmFtaWx5ID0gQUZfSU5FVDY7DQorICAgIGlmICghaW5ldF9wdG9uKEFGX0lORVQ2LCBpcCwg JnNhZGRyLT5zaW42X2FkZHIpKSB7DQorICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9IA0KKyAg ICBpZiAocG9ydCkgew0KKyAgICAgIHNzY2FuZihwb3J0LCAiJWkiLCAmcG9ydGludCk7DQorICAg ICAgc2FkZHItPnNpbjZfcG9ydCA9IGh0b25zKHBvcnRpbnQpOw0KKyAgICB9DQorICAgIHJldHVy biAwOw0KK30NCisNCisNCisNCiB2b2lkIHFlbXVfZm9ybWF0X25pY19pbmZvX3N0cihOZXRDbGll bnRTdGF0ZSAqbmMsIHVpbnQ4X3QgbWFjYWRkcls2XSkNCiB7DQogICAgIHNucHJpbnRmKG5jLT5p bmZvX3N0ciwgc2l6ZW9mKG5jLT5pbmZvX3N0ciksDQpAQCAtNzMxLDYgKzc2OCw3IEBAIHN0YXRp YyBpbnQgKCogY29uc3QgbmV0X2NsaWVudF9pbml0X2Z1bltORVRfQ0xJRU5UX09QVElPTlNfS0lO RF9NQVhdKSgNCiAgICAgICAgIFtORVRfQ0xJRU5UX09QVElPTlNfS0lORF9CUklER0VdICAgID0g bmV0X2luaXRfYnJpZGdlLA0KICNlbmRpZg0KICAgICAgICAgW05FVF9DTElFTlRfT1BUSU9OU19L SU5EX0hVQlBPUlRdICAgPSBuZXRfaW5pdF9odWJwb3J0LA0KKyAgICAgICAgW05FVF9DTElFTlRf T1BUSU9OU19LSU5EX0wyVFBWM10gICAgICAgPSBuZXRfaW5pdF9sMnRwdjMsDQogfTsNCiANCiAN CmRpZmYgLS1naXQgYS9uZXQvcmF3LmMgYi9uZXQvcmF3LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwLi4wNGQyNDRmDQotLS0gL2Rldi9udWxsDQorKysgYi9uZXQvcmF3LmMN CkBAIC0wLDAgKzEsMjQ0IEBADQorLyoNCisgKiBRRU1VIFN5c3RlbSBFbXVsYXRvcg0KKyAqDQor ICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggRmFicmljZSBCZWxsYXJkDQorICogQ29weXJpZ2h0 IChjKSAyMDE0IENpc2NvIFN5c3RlbXMNCisgKg0KKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkNCisg KiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwgdG8gZGVhbA0KKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMNCisgKiB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us IGFuZC9vciBzZWxsDQorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorICogZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCisgKg0KKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkIGluDQorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuDQorICoNCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0K KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu IElOIE5PIEVWRU5UIFNIQUxMDQorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCisgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORyBGUk9NLA0KKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4NCisgKiBUSEUgU09GVFdBUkUuDQorICov DQorI2luY2x1ZGUgPG5ldGluZXQvZXRoZXIuaD4NCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIu aD4NCisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+DQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+ DQorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KKyNpbmNsdWRlIDxuZXQvaWYuaD4NCisNCisjaW5j bHVkZSAibmV0L3Jhdy5oIg0KKw0KKyNpbmNsdWRlICJjb25maWctaG9zdC5oIg0KKyNpbmNsdWRl ICJuZXQvbmV0LmgiDQorI2luY2x1ZGUgImNsaWVudHMuaCINCisjaW5jbHVkZSAibW9uaXRvci9t b25pdG9yLmgiDQorI2luY2x1ZGUgInFlbXUtY29tbW9uLmgiDQorI2luY2x1ZGUgInFlbXUvZXJy b3ItcmVwb3J0LmgiDQorI2luY2x1ZGUgInFlbXUvb3B0aW9uLmgiDQorI2luY2x1ZGUgInFlbXUv c29ja2V0cy5oIg0KKyNpbmNsdWRlICJxZW11L2lvdi5oIg0KKyNpbmNsdWRlICJxZW11L21haW4t bG9vcC5oIg0KKw0KKw0KKyNkZWZpbmUgUkFXX0JVRlNJWkUgMjA0OA0KKw0KKw0KK3R5cGVkZWYg c3RydWN0IE5ldFJBV1N0YXRlIHsNCisgICAgTmV0Q2xpZW50U3RhdGUgbmM7DQorICAgIGludCBm ZDsNCisgICAgaW50IHN0YXRlOyAvKiAwID0gZ2V0dGluZyBsZW5ndGgsIDEgPSBnZXR0aW5nIGRh dGEgKi8NCisgICAgdW5zaWduZWQgaW50IHJpbmdfaW5kZXg7DQorICAgIHVuc2lnbmVkIGludCBw YWNrZXRfbGVuOw0KKyAgICB1aW50OF90ICogbXVsdGlyZWFkX2J1ZmZlcjsNCit9IE5ldFJBV1N0 YXRlOw0KKw0KKw0KK3N0YXRpYyBzc2l6ZV90IG5ldF9yYXdfcmVjZWl2ZV9kZ3JhbShOZXRDbGll bnRTdGF0ZSAqbmMsIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHNpemUpDQorew0KKyAgICBO ZXRSQVdTdGF0ZSAqcyA9IERPX1VQQ0FTVChOZXRSQVdTdGF0ZSwgbmMsIG5jKTsNCisgICAgcmV0 dXJuIHdyaXRlKHMtPmZkLCBidWYsIHNpemUpOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCBuZXRf cmF3X3JlY2VpdmVfZGdyYW1faW92KE5ldENsaWVudFN0YXRlICpuYywgY29uc3Qgc3RydWN0IGlv dmVjICppb3YsIGludCBpb3ZjbnQpDQorew0KKyAgICBOZXRSQVdTdGF0ZSAqcyA9IERPX1VQQ0FT VChOZXRSQVdTdGF0ZSwgbmMsIG5jKTsNCisgICAgcmV0dXJuIHdyaXRldihzLT5mZCwgaW92LCBp b3ZjbnQpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0cGFja2V0X2hkciAqIGN1cnJl bnRfaGVhZGVyIChOZXRSQVdTdGF0ZSAqcykgew0KKyAgICB1aW50OF90ICogYnVmZmVyOw0KKyAg ICBidWZmZXIgPSBzLT5tdWx0aXJlYWRfYnVmZmVyICsgKHMtPnJpbmdfaW5kZXggKiBSQVdfVFBf RlJBTUVfU0laRSk7DQorICAgIHJldHVybiAoc3RydWN0IHRwYWNrZXRfaGRyICopIGJ1ZmZlcjsN Cit9DQorDQorDQorc3RhdGljIHN0cnVjdCB0cGFja2V0X2hkciAqIHJhd19hZHZhbmNlX3Jpbmco TmV0UkFXU3RhdGUgKnMpIHsNCisNCisgICAgc3RydWN0IHRwYWNrZXRfaGRyICogaGVhZGVyID0g Y3VycmVudF9oZWFkZXIocyk7DQorICAgIGhlYWRlci0+dHBfc3RhdHVzID0gVFBfU1RBVFVTX0tF Uk5FTDsgLyogbWFyayBhcyBmcmVlICovDQorICAgIHMtPnJpbmdfaW5kZXggPSAocy0+cmluZ19p bmRleCArIDEpICUgUkFXX1RQX0ZSQU1FX05SOw0KKyAgICByZXR1cm4gY3VycmVudF9oZWFkZXIo cyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG5ldF9yYXdfc2VuZCh2b2lkICpvcGFxdWUpDQorew0K KyAgICBOZXRSQVdTdGF0ZSAqcyA9IG9wYXF1ZTsNCisgICAgc3RydWN0IHRwYWNrZXRfaGRyICog aGVhZGVyOw0KKyAgICANCisgICAgaGVhZGVyID0gY3VycmVudF9oZWFkZXIocyk7CQ0KKyAgICB3 aGlsZSAoKGhlYWRlci0+dHBfc3RhdHVzICYgVFBfU1RBVFVTX1VTRVIpID4gMCkgew0KKwlxZW11 X3NlbmRfcGFja2V0KCZzLT5uYywgKCh1aW50OF90ICopIGhlYWRlcikgKyBoZWFkZXItPnRwX21h YywgaGVhZGVyLT50cF9zbmFwbGVuKTsNCisJaGVhZGVyID0gcmF3X2FkdmFuY2VfcmluZyhzKTsN CisgICAgfQ0KK30NCisNCisNCitzdGF0aWMgdm9pZCBuZXRfcmF3X2NsZWFudXAoTmV0Q2xpZW50 U3RhdGUgKm5jKQ0KK3sNCisgICAgTmV0UkFXU3RhdGUgKnMgPSBET19VUENBU1QoTmV0UkFXU3Rh dGUsIG5jLCBuYyk7DQorICAgIHFlbXVfc2V0X2ZkX2hhbmRsZXIocy0+ZmQsIE5VTEwsIE5VTEws IE5VTEwpOw0KKyAgICBjbG9zZShzLT5mZCk7DQorfQ0KKw0KK3N0YXRpYyBOZXRDbGllbnRJbmZv IG5ldF9yYXdfaW5mbyA9IHsNCisgICAgLnR5cGUgPSBORVRfQ0xJRU5UX09QVElPTlNfS0lORF9S QVcsDQorICAgIC5zaXplID0gc2l6ZW9mKE5ldFJBV1N0YXRlKSwNCisgICAgLnJlY2VpdmUgPSBu ZXRfcmF3X3JlY2VpdmVfZGdyYW0sDQorICAgIC5yZWNlaXZlX2lvdiA9IG5ldF9yYXdfcmVjZWl2 ZV9kZ3JhbV9pb3YsDQorICAgIC5jbGVhbnVwID0gbmV0X3Jhd19jbGVhbnVwLA0KK307DQorDQor c3RhdGljIGludCBuZXRfcmF3X2luaXQoTmV0Q2xpZW50U3RhdGUgKnBlZXIsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0X2ludGVyZmFjZQ0KKyAgICAgICAg ICAgICAgICAgKQ0KK3sNCisgICAgTmV0UkFXU3RhdGUgKnM7DQorICAgIE5ldENsaWVudFN0YXRl ICpuYzsNCisNCisgICAgaW50IGZkOw0KKw0KKw0KKw0KKyAgICBzdHJ1Y3QgaWZyZXEgaWZyOw0K KyAgICBzdHJ1Y3Qgc29ja2FkZHJfbGwgc29jazsNCisNCisgICAgaW50IGVycjsNCisgICAgc3Ry dWN0IHRwYWNrZXRfcmVxIHRwYWNrZXQ7DQorDQorDQorICAgIG5jID0gcWVtdV9uZXdfbmV0X2Ns aWVudCgmbmV0X3Jhd19pbmZvLCBwZWVyLCAicmF3IiwgbmFtZSk7DQorDQorICAgIHMgPSBET19V UENBU1QoTmV0UkFXU3RhdGUsIG5jLCBuYyk7DQorDQorICAgIHMtPnJpbmdfaW5kZXggPSAwOw0K KwkgDQorDQorICAgIGlmICgoZmQgPSBzb2NrZXQoQUZfUEFDS0VULCBTT0NLX1JBVywgaHRvbnMo RVRIX1BfQUxMKSkpID09IC0xKSB7DQorCWVyciA9IC1lcnJubzsNCisJZnByaW50ZihzdGRlcnIs ICJyYXdfb3BlbiA6IHJhdyBzb2NrZXQgY3JlYXRpb24gZmFpbGVkLCBlcnJubyA9ICVkXG4iLCAt ZXJyKTsNCisJcmV0dXJuIGVycjsNCisgICAgfQ0KKw0KKyAgICB0cGFja2V0LnRwX2Jsb2NrX3Np emUgPSBSQVdfVFBfQkxPQ0tfU0laRTsgDQorICAgIHRwYWNrZXQudHBfZnJhbWVfc2l6ZSA9IFJB V19UUF9GUkFNRV9TSVpFOyANCisgICAgdHBhY2tldC50cF9ibG9ja19uciA9IFJBV19UUF9CTE9D S19OUiA7IA0KKyAgICB0cGFja2V0LnRwX2ZyYW1lX25yID0gUkFXX1RQX0ZSQU1FX05SOw0KKw0K KyAgICBpZiAoc2V0c29ja29wdChmZCwgU09MX1BBQ0tFVCwgUEFDS0VUX1JYX1JJTkcsICh2b2lk ICopICZ0cGFja2V0LCBzaXplb2Yoc3RydWN0IHRwYWNrZXRfcmVxKSkpIHsNCisJZnByaW50Zihz dGRlcnIsICJ1bWxfcmF3OiBmYWlsZWQgdG8gcmVxdWVzdCBwYWNrZXQgbW1hcCIpOw0KKwlyZXR1 cm4gLWVycm5vOw0KKyAgICB9IGVsc2Ugew0KKwlmcHJpbnRmKHN0ZGVyciwgInVtbF9yYXc6IHJl cXVlc3RlZCBwYWNrZXQgbW1hcFxuIik7DQorICAgIH0NCisNCisgICAgcy0+bXVsdGlyZWFkX2J1 ZmZlciA9ICh1aW50OF90ICopIG1tYXAoDQorCSAgICBOVUxMLCANCisJICAgIFJBV19UUF9GUkFN RV9TSVpFICogUkFXX1RQX0ZSQU1FX05SLCANCisJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUs IE1BUF9TSEFSRUQsIA0KKwkgICAgZmQsIA0KKwkgICAgMA0KKyAgICApOw0KKw0KKyAgICBpZiAo IShzLT5tdWx0aXJlYWRfYnVmZmVyKSkgew0KKwlmcHJpbnRmKHN0ZGVyciwgInJhdzogZmFpbGVk IHRvIG1hcCBidWZmZXIiKTsNCisJcmV0dXJuIC0xOw0KKyAgICB9IGVsc2Ugew0KKwlmcHJpbnRm KHN0ZGVyciwgInJhdzogbW1tYXAtZWQgYnVmZmVyIGF0ICVwXG4iLCBzLT5tdWx0aXJlYWRfYnVm ZmVyKTsNCisgICAgfQ0KKw0KKw0KKyAgICANCisNCisgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVv ZihzdHJ1Y3QgaWZyZXEpKTsNCisgICAgc3RybmNweSgoY2hhciAqKSAmaWZyLmlmcl9uYW1lLCBo b3N0X2ludGVyZmFjZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkgLSAxKTsNCisgICAgaWYoaW9jdGwo ZmQsIFNJT0NHSUZJTkRFWCwgKHZvaWQgKikgJmlmcikgPCAwKSB7DQorCWVyciA9IC1lcnJubzsN CisJZnByaW50ZihzdGRlcnIsICJTSU9DR0lGSU5ERVgsIGZhaWxlZCB0byBnZXQgcmF3IGludGVy ZmFjZSBpbmRleCBmb3IgJXMiLCBob3N0X2ludGVyZmFjZSk7DQorCWNsb3NlKGZkKTsNCisJcmV0 dXJuKC0xKTsNCisgICAgfSBlbHNlIHsNCisgICAgfQ0KKw0KKyAgICBzb2NrLnNsbF9mYW1pbHkg PSBBRl9QQUNLRVQ7DQorICAgIHNvY2suc2xsX3Byb3RvY29sID0gaHRvbnMoRVRIX1BfQUxMKTsN CisgICAgc29jay5zbGxfaWZpbmRleCA9IGlmci5pZnJfaWZpbmRleDsNCisNCisgICAgZnByaW50 ZihzdGRlcnIsICJyYXc6IGJpbmRpbmcgcmF3IG9uIGludGVyZmFjZSBpbmRleDogJWlcbiIsIGlm ci5pZnJfaWZpbmRleCk7DQorICAgIGlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopICZz b2NrLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSkgPCAwKSB7DQorCWZwcmludGYoc3RkZXJy LCAicmF3OiBmYWlsZWQgdG8gYmluZCByYXcgc29ja2V0Iik7DQorCWNsb3NlKGZkKTsNCisJcmV0 dXJuKC0xKTsNCisgICAgfQ0KKw0KKw0KKyAgICBxZW11X3NldF9ub25ibG9jayhmZCk7DQorDQor ICAgIGlmIChmZCA8IDApDQorCXJldHVybiAtMTsNCisNCisgICAgcy0+cmluZ19pbmRleCA9IDA7 DQorDQorICAgIHMtPmZkID0gZmQ7DQorDQorICAgIHFlbXVfc2V0X2ZkX2hhbmRsZXIocy0+ZmQs IG5ldF9yYXdfc2VuZCwgTlVMTCwgcyk7DQorDQorICAgIGlmICghcykgew0KKyAgICAgIGZwcmlu dGYgKHN0ZGVyciwgInJhd19vcGVuIDogZmFpbGVkIHRvIHNldCBmZCBoYW5kbGVyXG4iKTsNCisg ICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisvKiB0aGlzIG5lZWRzIGZpeGluZyB0b28gKi8N CisNCisgICAgc25wcmludGYocy0+bmMuaW5mb19zdHIsIHNpemVvZihzLT5uYy5pbmZvX3N0ciks ICJyYXc6IGNvbm5lY3RlZCIpOw0KKyAgICByZXR1cm4gMDsNCisNCit9DQorDQoraW50IG5ldF9p bml0X3Jhdyhjb25zdCBOZXRDbGllbnRPcHRpb25zICpvcHRzLA0KKyAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqbmFtZSwNCisgICAgICAgICAgICAgICAgICAgIE5ldENsaWVudFN0YXRl ICpwZWVyKSB7DQorDQorDQorICAgIGNvbnN0IE5ldGRldlJhd09wdGlvbnMgKiByYXc7DQorICAg IGFzc2VydChvcHRzLT5raW5kID09IE5FVF9DTElFTlRfT1BUSU9OU19LSU5EX1JBVyk7DQorICAg IHJhdyA9IG9wdHMtPnJhdzsNCisNCisgICAgaWYgKHJhdy0+aGFzX2ZkKSB7DQorCWVycm9yX3Jl cG9ydCgicGFzc2luZyBzb2NrZXQgZmQgbm90IHlldCBzdXBwb3J0ZWQiKTsNCisJcmV0dXJuIC0x IDsNCisgICAgfQ0KKyAgICANCisgICAgaWYgKCEocmF3LT5oYXNfaWZuYW1lKSkgew0KKyAgICAg IGVycm9yX3JlcG9ydCgiaWZhY2UgcmVxdWlyZWQgZm9yIHJhdyIpOw0KKyAgICAgIHJldHVybiAt MTsNCisgICAgfQ0KKw0KKyAgICBpZiAobmV0X3Jhd19pbml0KCBwZWVyLCBuYW1lLCByYXctPmlm bmFtZSkgPT0gLTEpIHsNCisgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0dXJuIDA7 DQorfQ0KZGlmZiAtLWdpdCBhL25ldC9yYXcuaCBiL25ldC9yYXcuaA0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAuLjgwYWI0M2UNCi0tLSAvZGV2L251bGwNCisrKyBiL25ldC9y YXcuaA0KQEAgLTAsMCArMSwzMyBAQA0KKy8qDQorICogUUVNVSBTeXN0ZW0gRW11bGF0b3INCisg Kg0KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IEZhYnJpY2UgQmVsbGFyZA0KKyAqIENvcHly aWdodCAoYykgMjAxNCBDaXNjbyBTeXN0ZW1zDQorICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5 DQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzDQorICog dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLCBhbmQvb3Igc2VsbA0KKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KKyAqIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorICoNCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbg0KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLg0KKyAqDQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwNCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiBJTiBOTyBFVkVOVCBTSEFMTA0KKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcgRlJPTSwNCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElODQorICogVEhFIFNPRlRXQVJFLg0K KyAqLw0KKyNpZm5kZWYgUUVNVV9ORVRfUkFXX0gNCisjZGVmaW5lIFFFTVVfTkVUX1JBV19IDQor DQorI2RlZmluZSBSQVdfVFBfQkxPQ0tfU0laRSA0MDk2DQorI2RlZmluZSBSQVdfVFBfRlJBTUVf U0laRSAyMDQ4DQorI2RlZmluZSBSQVdfVFBfQkxPQ0tfTlIgMzINCisjZGVmaW5lIFJBV19UUF9G UkFNRV9OUiA2NA0KKw0KKyNlbmRpZiAvKiBRRU1VX05FVF9SQVdfSCAqLw0KZGlmZiAtLWdpdCBh L3FhcGktc2NoZW1hLmpzb24gYi9xYXBpLXNjaGVtYS5qc29uDQppbmRleCA4M2ZhNDg1Li4xOTJk MTljIDEwMDY0NA0KLS0tIGEvcWFwaS1zY2hlbWEuanNvbg0KKysrIGIvcWFwaS1zY2hlbWEuanNv bg0KQEAgLTI5NDEsNiArMjk0MSw0NSBAQA0KICAgICAnKnVkcCc6ICAgICAgICdzdHInIH0gfQ0K IA0KICMjDQorIyBATmV0ZGV2TDJUUHYzT3B0aW9ucw0KKyMNCisjIENvbm5lY3QgdGhlIFZMQU4g dG8gRXRoZXJuZXQgb3ZlciBMMlRQdjMgU3RhdGljIHR1bm5lbA0KKyMNCisjIEBmZDogI29wdGlv bmFsIGZpbGUgZGVzY3JpcHRvciBvZiBhbiBhbHJlYWR5IG9wZW5lZCBzb2NrZXQNCisjDQorIyBA c3JjOiBzb3VyY2UgYWRkcmVzcw0KKyMNCisjIEBkc3Q6ICNvcHRpb25hbCBkZXN0aW5hdGlvbiBh ZGRyZXNzDQorIw0KKyMgQG1vZGU6IGJpdG1hc2sgbW9kZSBmb3IgdGhlIHR1bm5lbCAoc2VlIGwy dHB2My5oIGZvciBhY3R1YWwgZGVmaW5pdGlvbikNCisjDQorIyBAdHhjb29raWU6I29wdGlvbmFs IDMyIG9yIDY0IGJpdCB0eCBjb29raWUgZm9yIHRoZSB0dW5uZWwgKHNldCBtb2RlIGZvciBhY3R1 YWwgdHlwZSBzZWxlY3Rpb24pDQorIw0KKyMgQHJ4Y29va2llOiNvcHRpb25hbCAzMiBvciA2NCBi aXQgcnggY29va2llIGZvciB0aGUgdHVubmVsIChzZXQgbW9kZSBmb3IgYWN0dWFsIHR5cGUgc2Vs ZWN0aW9uKQ0KKyMNCisjIEB0eHNlc3Npb246IHR4IDMyIGJpdCBzZXNzaW9uDQorIw0KKyMgQHJ4 c2Vzc2lvbjogcnggMzIgYml0IHNlc3Npb24NCisjDQorIw0KKyMgU2luY2UgMS4wDQorIyMNCisj Iw0KK3sgJ3R5cGUnOiAnTmV0ZGV2TDJUUHYzT3B0aW9ucycsDQorICAnZGF0YSc6IHsNCisgICAg JypmZCc6ICAgICAgICAnc3RyJywNCisgICAgJypzcmMnOgkgICdzdHInLCANCisgICAgJypkc3Qn OgkgICdzdHInLCANCisgICAgJyptb2RlJzoJICAnc3RyJywgDQorICAgICcqdHhjb29raWUnOiAg J3N0cicsDQorICAgICcqcnhjb29raWUnOiAgJ3N0cicsDQorICAgICcqdHhzZXNzaW9uJzogJ3N0 cicsDQorICAgICcqcnhzZXNzaW9uJzogJ3N0cicNCisNCit9IH0NCisNCisjIw0KKyMjDQogIyBA TmV0ZGV2VmRlT3B0aW9ucw0KICMNCiAjIENvbm5lY3QgdGhlIFZMQU4gdG8gYSB2ZGUgc3dpdGNo IHJ1bm5pbmcgb24gdGhlIGhvc3QuDQpAQCAtMzAyMSw2ICszMDYwLDcgQEANCiAgICAgJ25pYyc6 ICAgICAgJ05ldExlZ2FjeU5pY09wdGlvbnMnLA0KICAgICAndXNlcic6ICAgICAnTmV0ZGV2VXNl ck9wdGlvbnMnLA0KICAgICAndGFwJzogICAgICAnTmV0ZGV2VGFwT3B0aW9ucycsDQorICAgICds MnRwdjMnOiAgICdOZXRkZXZMMlRQdjNPcHRpb25zJywNCiAgICAgJ3NvY2tldCc6ICAgJ05ldGRl dlNvY2tldE9wdGlvbnMnLA0KICAgICAndmRlJzogICAgICAnTmV0ZGV2VmRlT3B0aW9ucycsDQog ICAgICdkdW1wJzogICAgICdOZXRkZXZEdW1wT3B0aW9ucycsDQoNCg== --_002_5310489A4060501ciscocom_--