From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14830 invoked by alias); 16 Aug 2007 11:07:26 -0000 Received: (qmail 11295 invoked by uid 22791); 16 Aug 2007 11:07:15 -0000 X-Spam-Check-By: sourceware.org Received: from fencepost.gnu.org (HELO fencepost.gnu.org) (140.186.70.10) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 16 Aug 2007 11:07:01 +0000 Received: from monty-python.gnu.org ([199.232.76.173]) by fencepost.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1ILdFO-0003Dq-Gw for gcc-patches@gnu.org; Thu, 16 Aug 2007 07:10:39 -0400 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1ILdBl-00071F-3F for gcc-patches@gnu.org; Thu, 16 Aug 2007 07:06:58 -0400 Received: from mtagate5.de.ibm.com ([195.212.29.154]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1ILdBj-0006zr-Fu for gcc-patches@gnu.org; Thu, 16 Aug 2007 07:06:52 -0400 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate5.de.ibm.com (8.13.8/8.13.8) with ESMTP id l7GB6iq9118226 for ; Thu, 16 Aug 2007 11:06:44 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.4) with ESMTP id l7GB6iom2269228 for ; Thu, 16 Aug 2007 13:06:44 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id l7GB6iWq018043 for ; Thu, 16 Aug 2007 13:06:44 +0200 Received: from d12mc102.megacenter.de.ibm.com (d12mc102.megacenter.de.ibm.com [9.149.167.114]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id l7GB6iOL018039; Thu, 16 Aug 2007 13:06:44 +0200 In-Reply-To: Subject: Re: [PATCH] [4.3 projects] Verctorizer - versioning for alias To: gcc-patches@gnu.org Cc: rakdver@kam.mff.cuni.cz X-Mailer: Lotus Notes Release 7.0 HF144 February 01, 2006 Message-ID: From: Victor Kaplansky Date: Thu, 16 Aug 2007 11:07:00 -0000 MIME-Version: 1.0 Content-type: multipart/mixed; Boundary="0__=4DBBF9AADFA9DE0C8f9e8a93df938690918c4DBBF9AADFA9DE0C" Content-Disposition: inline X-Detected-Kernel: Linux 2.0.3x (2) X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2007-08/txt/msg00999.txt.bz2 --0__=4DBBF9AADFA9DE0C8f9e8a93df938690918c4DBBF9AADFA9DE0C Content-type: text/plain; charset=US-ASCII Content-length: 3296 Please find below updated patch after implementation of comments from Dorit and Zdenek. Here is the list of changes from previous patch: - A new testcase when IN and OUT overlap in such a way that the vectorized copy of the loop would produce wrong results if it were used added(vect-vfa-04.c). - Fixed the size of segment accessed by data reference in cases when realignment loads are used. - POINTER_PLUS_EXPR used insted of PLUS_EXPR for pointer arithmentics. - Parameters "vect-max-version-for-alignment-checks" and "vect-max-version-for-alias-checks" documented in invoke.texi. - Fixed typos and unclear comments. Bootstrapped with vectorization enabled on x86_64, regtested on x86_64. Okay for mainline after boostrap and regression testing on PPC? 2007-08-14 Victor Kaplansky ChangeLog: * tree-vectorizer.c (new_loop_vec_info): Initialize new field. (destroy_loop_vec_info): Add call to VEC_free. * tree-vectorizer.h (may_alias_ddrs): Define. (LOOP_VINFO_MAY_ALIAS_DDRS): Define. * tree-vect-analyze.c (vect_analyze_data_ref_dependence): Change reporting to dump. (vect_is_duplicate_ddr): New. (vect_mark_for_runtime_alias_test): New. (vect_analyze_data_ref_dependences) Add call to vect_mark_for_runtime_alias_test. (vect_enhance_data_refs_alignment): Define local variable vect_versioning_for_alias_required, don't perform versioning for alignment if versioning for alias is required. (vect_enhance_data_refs_alignment): Use PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS instead of PARAM_VECT_MAX_VERSION_CHECKS. * tree-vect-transform.c (vect_create_cond_for_alias_checks): New. (vect_transform_loop): Add call to vect_create_cond_for_alias_checks. (vect_vfa_segment_size): New. * params.def (PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS): Rename. (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS): Define. * gcc/doc/invoke.texi (vect-max-version-for-alignment-checks): Document. (vect-max-version-for-alias-checks): Document. (vect-max-version-checks): Remove. testsuite/ChangeLog: * gcc.dg/vect/vect-vfa-01.c: New. * gcc.dg/vect/vect-vfa-02.c: New. * gcc.dg/vect/vect-vfa-03.c: New. * gcc.dg/vect/vect-vfa-04.c: New. * gcc.dg/vect/vect-102a.c, gcc.dg/vect/vect-51.c, gcc.dg/vect/pr29145.c, gcc.dg/vect/vect-43.c, gcc.dg/vect/vect-61.c, gcc.dg/vect/vect-53.c, gcc.dg/vect/vect-45.c, gcc.dg/vect/vect-101.c, gcc.dg/vect/vect-37.c, gcc.dg/vect/vect-79.c, gcc.dg/vect/vect-102.c, gcc.dg/vect/vect-dv-2.c, gcc.dg/vect/vect-57.c, gcc.dg/vect/vect-49.c, gfortran.dg/vect/pr19049.f90: Rename to start with prefix no-vfa-. * gcc.dg/vect/vect.exp: Disable versioning for alias when test starts with no-vfa-. * gfortran.dg/vect/vect.exp: Likewise. (See attached file: vfa-n.txt) --0__=4DBBF9AADFA9DE0C8f9e8a93df938690918c4DBBF9AADFA9DE0C Content-type: text/plain; name="vfa-n.txt" Content-Disposition: attachment; filename="vfa-n.txt" Content-transfer-encoding: base64 Content-length: 97462 SW5kZXg6IGdjYy9wYXJhbXMuZGVmDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gZ2NjL3BhcmFtcy5kZWYJKHJldmlzaW9uIDEyNzQ3NykNCisrKyBn Y2MvcGFyYW1zLmRlZgkod29ya2luZyBjb3B5KQ0KQEAgLTQ4NSwxMSArNDg1 LDE2IEBADQogCSAiV2hlbiBzZXQgdG8gMSwgdXNlIGV4cGVuc2l2ZSBtZXRo b2RzIHRvIGVsaW1pbmF0ZSBhbGwgcmVkdW5kYW50IGNvbnN0cmFpbnRzIiwN CiAJIDAsIDAsIDEpDQogDQotREVGUEFSQU0oUEFSQU1fVkVDVF9NQVhfVkVS U0lPTl9DSEVDS1MsDQotICAgICAgICAgInZlY3QtbWF4LXZlcnNpb24tY2hl Y2tzIiwNCi0gICAgICAgICAiQm91bmQgb24gbnVtYmVyIG9mIHJ1bnRpbWUg Y2hlY2tzIGluc2VydGVkIGJ5IHRoZSB2ZWN0b3JpemVyJ3MgbG9vcCB2ZXJz aW9uaW5nIiwNCitERUZQQVJBTShQQVJBTV9WRUNUX01BWF9WRVJTSU9OX0ZP Ul9BTElHTk1FTlRfQ0hFQ0tTLA0KKyAgICAgICAgICJ2ZWN0LW1heC12ZXJz aW9uLWZvci1hbGlnbm1lbnQtY2hlY2tzIiwNCisgICAgICAgICAiQm91bmQg b24gbnVtYmVyIG9mIHJ1bnRpbWUgY2hlY2tzIGluc2VydGVkIGJ5IHRoZSB2 ZWN0b3JpemVyJ3MgbG9vcCB2ZXJzaW9uaW5nIGZvciBhbGlnbm1lbnQgY2hl Y2siLA0KICAgICAgICAgIDYsIDAsIDApDQogDQorREVGUEFSQU0oUEFSQU1f VkVDVF9NQVhfVkVSU0lPTl9GT1JfQUxJQVNfQ0hFQ0tTLA0KKyAgICAgICAg ICJ2ZWN0LW1heC12ZXJzaW9uLWZvci1hbGlhcy1jaGVja3MiLA0KKyAgICAg ICAgICJCb3VuZCBvbiBudW1iZXIgb2YgcnVudGltZSBjaGVja3MgaW5zZXJ0 ZWQgYnkgdGhlIHZlY3Rvcml6ZXIncyBsb29wIHZlcnNpb25pbmcgZm9yIGFs aWFzIGNoZWNrIiwNCisgICAgICAgICAxMCwgMCwgMCkNCisNCiBERUZQQVJB TShQQVJBTV9NQVhfQ1NFTElCX01FTU9SWV9MT0NBVElPTlMsDQogCSAibWF4 LWNzZWxpYi1tZW1vcnktbG9jYXRpb25zIiwNCiAJICJUaGUgbWF4aW11bSBt ZW1vcnkgbG9jYXRpb25zIHJlY29yZGVkIGJ5IGNzZWxpYiIsDQpJbmRleDog Z2NjL3RyZWUtdmVjdC10cmFuc2Zvcm0uYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy90cmVlLXZlY3QtdHJhbnNmb3JtLmMJKHJldmlzaW9u IDEyNzQ3NykNCisrKyBnY2MvdHJlZS12ZWN0LXRyYW5zZm9ybS5jCSh3b3Jr aW5nIGNvcHkpDQpAQCAtNTgwNSw3ICs1ODA1LDE0NyBAQA0KICAgICAgICAg ICAgICAgICAgYW5kX3RtcF9uYW1lLCBwdHJzaXplX3plcm8pOw0KIH0NCiAN CisvKiBGdW5jdGlvbiB2ZWN0X3ZmYV9zZWdtZW50X3NpemUuDQogDQorICAg Q3JlYXRlIGFuIGV4cHJlc3Npb24gdGhhdCBjb21wdXRlcyB0aGUgc2l6ZSBv ZiBzZWdtZW50DQorICAgdGhhdCB3aWxsIGJlIGFjY2Vzc2VkIGZvciBhIGRh dGEgcmVmZXJlbmNlLiAgVGhlIGZ1bmN0aW9ucyB0YWtlcyBpbnRvDQorICAg YWNjb3VudCB0aGF0IHJlYWxpZ25tZW50IGxvYWRzIG1heSBhY2Nlc3Mgb25l IG1vcmUgdmVjdG9yLg0KKw0KKyAgIElucHV0Og0KKyAgICAgRFI6IFRoZSBk YXRhIHJlZmVyZW5jZS4NCisgICAgIFZFQ1RfRkFDVE9SOiB2ZWN0b3JpemF0 aW9uIGZhY3Rvci4NCisNCisgICBSZXR1cm4gYW4gZXhycGVzc2lvbiB3aG9z ZSB2YWx1ZSBpcyB0aGUgc2l6ZSBvZiBzZWdtZW50IHdoaWNoIHdpbGwgYmUN CisgICBhY2Nlc3NlZCBieSBEUi4gICovDQorDQorc3RhdGljIHRyZWUNCit2 ZWN0X3ZmYV9zZWdtZW50X3NpemUgKHN0cnVjdCBkYXRhX3JlZmVyZW5jZSAq ZHIsIHRyZWUgdmVjdF9mYWN0b3IpDQorew0KKyAgdHJlZSBzZWdtZW50X2xl bmd0aDsNCisNCisgIGlmICh2ZWN0X3N1cHBvcnRhYmxlX2RyX2FsaWdubWVu dCAoZHIpID09IGRyX3VuYWxpZ25lZF9zb2Z0d2FyZV9waXBlbGluZSkNCisg ICAgew0KKyAgICAgIHRyZWUgdmVjdG9yX3NpemUgPQ0KKyAgICAgICAgYnVp bGRfaW50X2NzdCAoaW50ZWdlcl90eXBlX25vZGUsDQorICAgICAgICAgIEdF VF9NT0RFX1NJWkUgKFRZUEVfTU9ERSAoU1RNVF9WSU5GT19WRUNUWVBFDQor CSAgICAodmluZm9fZm9yX3N0bXQgKERSX1NUTVQgKGRyKSkpKSkpOw0KKw0K KyAgICAgIHNlZ21lbnRfbGVuZ3RoID0NCisJZm9sZF9jb252ZXJ0IChzaXpl dHlwZSwNCisJICBmb2xkX2J1aWxkMiAoUExVU19FWFBSLCBpbnRlZ2VyX3R5 cGVfbm9kZSwNCisJICAgIGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIGludGVn ZXJfdHlwZV9ub2RlLCBEUl9TVEVQIChkciksDQorCQkJIHZlY3RfZmFjdG9y KSwNCisJICAgIHZlY3Rvcl9zaXplKSk7DQorDQorDQorICAgIH0NCisgIGVs c2UNCisgICAgew0KKyAgICAgIHNlZ21lbnRfbGVuZ3RoID0NCisJZm9sZF9j b252ZXJ0IChzaXpldHlwZSwNCisJICBmb2xkX2J1aWxkMiAoTVVMVF9FWFBS LCBpbnRlZ2VyX3R5cGVfbm9kZSwgRFJfU1RFUCAoZHIpLA0KKwkJICAgICAg IHZlY3RfZmFjdG9yKSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHNlZ21l bnRfbGVuZ3RoOw0KK30NCisNCisvKiBGdW5jdGlvbiB2ZWN0X2NyZWF0ZV9j b25kX2Zvcl9hbGlhc19jaGVja3MuDQorDQorICAgQ3JlYXRlIGEgY29uZGl0 aW9uYWwgZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgdGhlIHJ1bi10aW1l IGNoZWNrcyBmb3INCisgICBvdmVybGFwcGluZyBvZiBhZGRyZXNzIHJhbmdl cyByZXByZXNlbnRlZCBieSBhIGxpc3Qgb2YgZGF0YSByZWZlcmVuY2VzDQor ICAgcmVsYXRpb25zIHBhc3NlZCBhcyBpbnB1dC4NCisNCisgICBJbnB1dDoN CisgICBDT05EX0VYUFIgIC0gaW5wdXQgY29uZGl0aW9uYWwgZXhwcmVzc2lv bi4gIE5ldyBjb25kaXRpb25zIHdpbGwgYmUgY2hhaW5lZA0KKyAgICAgICAg ICAgICAgICB3aXRoIGxvZ2ljYWwgYW5kIG9wZXJhdGlvbi4NCisgICBMT09Q X1ZJTkZPIC0gZmllbGQgTE9PUF9WSU5GT19NQVlfQUxJQVNfU1RNVFMgY29u dGFpbnMgdGhlIGxpc3Qgb2YgZGRycw0KKwkgICAgICAgIHRvIGJlIGNoZWNr ZWQuDQorDQorICAgT3V0cHV0Og0KKyAgIENPTkRfRVhQUiAtIGNvbmRpdGlv bmFsIGV4cHJlc3Npb24uDQorICAgQ09ORF9FWFBSX1NUTVRfTElTVCAtIHN0 YXRlbWVudHMgbmVlZGVkIHRvIGNvbnN0cnVjdCB0aGUgY29uZGl0aW9uYWwN CisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi4NCisgICBU aGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Np b24gdG8gYmUgdXNlZCBpbiB0aGUgaWYNCisgICBzdGF0ZW1lbnQgdGhhdCBj b250cm9scyB3aGljaCB2ZXJzaW9uIG9mIHRoZSBsb29wIGdldHMgZXhlY3V0 ZWQgYXQgcnVudGltZS4NCisqLw0KKw0KK3N0YXRpYyB2b2lkDQordmVjdF9j cmVhdGVfY29uZF9mb3JfYWxpYXNfY2hlY2tzIChsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8sDQorCQkJCSAgIHRyZWUgKiBjb25kX2V4cHIsDQorCQkJCSAg IHRyZWUgKiBjb25kX2V4cHJfc3RtdF9saXN0KQ0KK3sNCisgIFZFQyAoZGRy X3AsIGhlYXApICogbWF5X2FsaWFzX2RkcnMgPQ0KKyAgICBMT09QX1ZJTkZP X01BWV9BTElBU19ERFJTIChsb29wX3ZpbmZvKTsNCisgIHRyZWUgdmVjdF9m YWN0b3IgPQ0KKyAgICBidWlsZF9pbnRfY3N0IChpbnRlZ2VyX3R5cGVfbm9k ZSwgTE9PUF9WSU5GT19WRUNUX0ZBQ1RPUiAobG9vcF92aW5mbykpOw0KKw0K KyAgZGRyX3AgZGRyOw0KKyAgdW5zaWduZWQgaW50IGk7DQorICB0cmVlIHBh cnRfY29uZF9leHByOw0KKw0KKyAgLyogQ3JlYXRlIGV4cHJlc3Npb24NCisg ICAgICgoc3RvcmVfcHRyXzAgKyBzdG9yZV9zZWdtZW50X2xlbmd0aF8wKSA8 IGxvYWRfcHRyXzApDQorICAgICB8fCAobG9hZF9wdHJfMCArIGxvYWRfc2Vn bWVudF9sZW5ndGhfMCkgPCBzdG9yZV9wdHJfMCkpDQorICAgICAmJiAgICAg ICAgIA0KKyAgICAgLi4uDQorICAgICAmJg0KKyAgICAgKChzdG9yZV9wdHJf biArIHN0b3JlX3NlZ21lbnRfbGVuZ3RoX24pIDwgbG9hZF9wdHJfbikNCisg ICAgIHx8IChsb2FkX3B0cl9uICsgbG9hZF9zZWdtZW50X2xlbmd0aF9uKSA8 IHN0b3JlX3B0cl9uKSkgICovDQorDQorICBpZiAoVkVDX2VtcHR5IChkZHJf cCwgbWF5X2FsaWFzX2RkcnMpKQ0KKyAgICByZXR1cm47DQorDQorICBmb3Ig KGkgPSAwOyBWRUNfaXRlcmF0ZSAoZGRyX3AsIG1heV9hbGlhc19kZHJzLCBp LCBkZHIpOyBpKyspDQorICAgIHsNCisgICAgICB0cmVlIHN0bXRfYSA9IERS X1NUTVQgKEREUl9BIChkZHIpKTsNCisgICAgICB0cmVlIHN0bXRfYiA9IERS X1NUTVQgKEREUl9CIChkZHIpKTsNCisNCisgICAgICB0cmVlIGFkZHJfYmFz ZV9hID0NCisgICAgICAgIHZlY3RfY3JlYXRlX2FkZHJfYmFzZV9mb3JfdmVj dG9yX3JlZiAoc3RtdF9hLCBjb25kX2V4cHJfc3RtdF9saXN0LA0KKwkJCQkJ ICAgICAgTlVMTF9UUkVFKTsNCisgICAgICB0cmVlIGFkZHJfYmFzZV9iID0N CisgICAgICAgIHZlY3RfY3JlYXRlX2FkZHJfYmFzZV9mb3JfdmVjdG9yX3Jl ZiAoc3RtdF9iLCBjb25kX2V4cHJfc3RtdF9saXN0LA0KKwkJCQkJICAgICAg TlVMTF9UUkVFKTsNCisNCisgICAgICB0cmVlIHNlZ21lbnRfbGVuZ3RoX2Eg PSB2ZWN0X3ZmYV9zZWdtZW50X3NpemUgKEREUl9BIChkZHIpLCB2ZWN0X2Zh Y3Rvcik7DQorICAgICAgdHJlZSBzZWdtZW50X2xlbmd0aF9iID0gdmVjdF92 ZmFfc2VnbWVudF9zaXplIChERFJfQiAoZGRyKSwgdmVjdF9mYWN0b3IpOw0K Kw0KKyAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JUX0RS X0RFVEFJTFMpKQ0KKwl7DQorCSAgZnByaW50ZiAodmVjdF9kdW1wLA0KKwkJ ICAgImNyZWF0ZSBydW50aW1lIGNoZWNrIGZvciBkYXRhIHJlZmVyZW5jZXMg Iik7DQorCSAgcHJpbnRfZ2VuZXJpY19leHByICh2ZWN0X2R1bXAsIERSX1JF RiAoRERSX0EgKGRkcikpLCBUREZfU0xJTSk7DQorCSAgZnByaW50ZiAodmVj dF9kdW1wLCAiIGFuZCAiKTsNCisJICBwcmludF9nZW5lcmljX2V4cHIgKHZl Y3RfZHVtcCwgRFJfUkVGIChERFJfQiAoZGRyKSksIFRERl9TTElNKTsNCisJ fQ0KKw0KKw0KKyAgICAgIHBhcnRfY29uZF9leHByID0gDQorICAgICAgCWZv bGRfYnVpbGQyIChUUlVUSF9PUl9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwN CisJICBmb2xkX2J1aWxkMiAoTFRfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUs DQorCSAgICBmb2xkX2J1aWxkMiAoUE9JTlRFUl9QTFVTX0VYUFIsIFRSRUVf VFlQRSAoYWRkcl9iYXNlX2EpLA0KKwkgICAgICBhZGRyX2Jhc2VfYSwNCisJ ICAgICAgc2VnbWVudF9sZW5ndGhfYSksDQorCSAgICBhZGRyX2Jhc2VfYiks DQorCSAgZm9sZF9idWlsZDIgKExUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2Rl LA0KKwkgICAgZm9sZF9idWlsZDIgKFBPSU5URVJfUExVU19FWFBSLCBUUkVF X1RZUEUgKGFkZHJfYmFzZV9iKSwNCisJICAgICAgYWRkcl9iYXNlX2IsDQor CSAgICAgIHNlZ21lbnRfbGVuZ3RoX2IpLA0KKwkgICAgYWRkcl9iYXNlX2Ep KTsNCisgICAgICANCisgICAgICBpZiAoKmNvbmRfZXhwcikNCisJKmNvbmRf ZXhwciA9IGZvbGRfYnVpbGQyIChUUlVUSF9BTkRfRVhQUiwgYm9vbGVhbl90 eXBlX25vZGUsDQorCQkJICAgICAgICAgICpjb25kX2V4cHIsIHBhcnRfY29u ZF9leHByKTsNCisgICAgICBlbHNlDQorCSpjb25kX2V4cHIgPSBwYXJ0X2Nv bmRfZXhwcjsNCisgICAgfQ0KKyAgICBpZiAodmVjdF9wcmludF9kdW1wX2lu Zm8gKFJFUE9SVF9WRUNUT1JJWkVEX0xPT1BTKSkNCisgICAgICBmcHJpbnRm ICh2ZWN0X2R1bXAsICJjcmVhdGVkICV1IHZlcnNpb25pbmcgZm9yIGFsaWFz IGNoZWNrcy5cbiIsDQorICAgICAgICAgICAgICAgVkVDX2xlbmd0aCAoZGRy X3AsIG1heV9hbGlhc19kZHJzKSk7DQorDQorfQ0KKw0KIC8qIEZ1bmN0aW9u IHZlY3RfdHJhbnNmb3JtX2xvb3AuDQogDQogICAgVGhlIGFuYWx5c2lzIHBo YXNlIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhlIGxvb3AgaXMgdmVjdG9yaXph YmxlLg0KQEAgLTU4MjcsMTYgKzU5NjcsMjEgQEANCiAgIGlmICh2ZWN0X3By aW50X2R1bXBfaW5mbyAoUkVQT1JUX0RFVEFJTFMpKQ0KICAgICBmcHJpbnRm ICh2ZWN0X2R1bXAsICI9PT0gdmVjX3RyYW5zZm9ybV9sb29wID09PSIpOw0K IA0KLSAgLyogSWYgdGhlIGxvb3AgaGFzIGRhdGEgcmVmZXJlbmNlcyB0aGF0 IG1heSBvciBtYXkgbm90IGJlIGFsaWduZWQgdGhlbg0KKyAgLyogSWYgdGhl IGxvb3AgaGFzIGRhdGEgcmVmZXJlbmNlcyB0aGF0IG1heSBvciBtYXkgbm90 IGJlIGFsaWduZWQgb3IvYW5kDQorICAgICBoYXMgZGF0YSByZWZlcmVuY2Ug cmVsYXRpb25zIHdob3NlIGluZGVwZW5kZW5jZSB3YXMgbm90IHByb3ZlbiB0 aGVuDQogICAgICB0d28gdmVyc2lvbnMgb2YgdGhlIGxvb3AgbmVlZCB0byBi ZSBnZW5lcmF0ZWQsIG9uZSB3aGljaCBpcyB2ZWN0b3JpemVkDQogICAgICBh bmQgb25lIHdoaWNoIGlzbid0LiAgQSB0ZXN0IGlzIHRoZW4gZ2VuZXJhdGVk IHRvIGNvbnRyb2wgd2hpY2ggb2YgdGhlDQogICAgICBsb29wcyBpcyBleGVj dXRlZC4gIFRoZSB0ZXN0IGNoZWNrcyBmb3IgdGhlIGFsaWdubWVudCBvZiBh bGwgb2YgdGhlDQotICAgICBkYXRhIHJlZmVyZW5jZXMgdGhhdCBtYXkgb3Ig bWF5IG5vdCBiZSBhbGlnbmVkLiAqLw0KKyAgICAgZGF0YSByZWZlcmVuY2Vz IHRoYXQgbWF5IG9yIG1heSBub3QgYmUgYWxpZ25lZC4gIEFuIGFkZGl0aW9u YWwNCisgICAgIHNlcXVlbmNlIG9mIHJ1bnRpbWUgdGVzdHMgaXMgZ2VuZXJh dGVkIGZvciBlYWNoIHBhaXJzIG9mIEREUnMgd2hvc2UNCisgICAgIGluZGVw ZW5kZW5jZSB3YXMgbm90IHByb3Zlbi4gIFRoZSB2ZWN0b3JpemVkIHZlcnNp b24gb2YgbG9vcCBpcyANCisgICAgIGV4ZWN1dGVkIG9ubHkgaWYgYm90aCBh bGlhcyBhbmQgYWxpZ25tZW50IHRlc3RzIGFyZSBwYXNzZWQuICAqLw0KIA0K LSAgaWYgKFZFQ19sZW5ndGggKHRyZWUsIExPT1BfVklORk9fTUFZX01JU0FM SUdOX1NUTVRTIChsb29wX3ZpbmZvKSkpDQorICBpZiAoVkVDX2xlbmd0aCAo dHJlZSwgTE9PUF9WSU5GT19NQVlfTUlTQUxJR05fU1RNVFMgKGxvb3Bfdmlu Zm8pKQ0KKyAgICAgIHx8IFZFQ19sZW5ndGggKGRkcl9wLCBMT09QX1ZJTkZP X01BWV9BTElBU19ERFJTIChsb29wX3ZpbmZvKSkpDQogICAgIHsNCiAgICAg ICBzdHJ1Y3QgbG9vcCAqbmxvb3A7DQotICAgICAgdHJlZSBjb25kX2V4cHI7 DQorICAgICAgdHJlZSBjb25kX2V4cHIgPSBOVUxMX1RSRUU7DQogICAgICAg dHJlZSBjb25kX2V4cHJfc3RtdF9saXN0ID0gTlVMTF9UUkVFOw0KICAgICAg IGJhc2ljX2Jsb2NrIGNvbmRpdGlvbl9iYjsNCiAgICAgICBibG9ja19zdG10 X2l0ZXJhdG9yIGNvbmRfZXhwX2JzaTsNCkBAIC01ODQ1LDkgKzU5OTAsMjMg QEANCiAgICAgICBlZGdlIG5ld19leGl0X2UsIGU7DQogICAgICAgdHJlZSBv cmlnX3BoaSwgbmV3X3BoaSwgYXJnOw0KICAgICAgIHVuc2lnbmVkIHByb2Ig PSA0ICogUkVHX0JSX1BST0JfQkFTRSAvIDU7DQorICAgICAgdHJlZSBnaW1w bGlmeV9zdG10X2xpc3Q7DQogDQotICAgICAgY29uZF9leHByID0gdmVjdF9j cmVhdGVfY29uZF9mb3JfYWxpZ25fY2hlY2tzIChsb29wX3ZpbmZvLA0KKyAg ICAgIGlmIChWRUNfbGVuZ3RoICh0cmVlLCBMT09QX1ZJTkZPX01BWV9NSVNB TElHTl9TVE1UUyAobG9vcF92aW5mbykpKQ0KKwljb25kX2V4cHIgPQ0KKwkg IHZlY3RfY3JlYXRlX2NvbmRfZm9yX2FsaWduX2NoZWNrcyAobG9vcF92aW5m bywgJmNvbmRfZXhwcl9zdG10X2xpc3QpOw0KKw0KKyAgICAgIGlmIChWRUNf bGVuZ3RoIChkZHJfcCwgTE9PUF9WSU5GT19NQVlfQUxJQVNfRERSUyAobG9v cF92aW5mbykpKQ0KKwl2ZWN0X2NyZWF0ZV9jb25kX2Zvcl9hbGlhc19jaGVj a3MgKGxvb3BfdmluZm8sICZjb25kX2V4cHIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZF9l eHByX3N0bXRfbGlzdCk7DQorDQorICAgICAgY29uZF9leHByID0NCisgICAg ICAgIGZvbGRfYnVpbGQyIChORV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwg Y29uZF9leHByLCBpbnRlZ2VyX3plcm9fbm9kZSk7DQorICAgICAgY29uZF9l eHByID0NCisgICAgICAgIGZvcmNlX2dpbXBsZV9vcGVyYW5kIChjb25kX2V4 cHIsICZnaW1wbGlmeV9zdG10X2xpc3QsIHRydWUsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTF9UUkVFKTsNCisgICAgICBhcHBlbmRf dG9fc3RhdGVtZW50X2xpc3QgKGdpbXBsaWZ5X3N0bXRfbGlzdCwgJmNvbmRf ZXhwcl9zdG10X2xpc3QpOw0KKw0KICAgICAgIGluaXRpYWxpemVfb3JpZ2lu YWxfY29weV90YWJsZXMgKCk7DQogICAgICAgbmxvb3AgPSBsb29wX3ZlcnNp b24gKGxvb3AsIGNvbmRfZXhwciwgJmNvbmRpdGlvbl9iYiwNCiAJCQkgICAg cHJvYiwgcHJvYiwgUkVHX0JSX1BST0JfQkFTRSAtIHByb2IsIHRydWUpOw0K SW5kZXg6IGdjYy90cmVlLXZlY3QtYW5hbHl6ZS5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjL3RyZWUtdmVjdC1hbmFseXplLmMJKHJldmlz aW9uIDEyNzQ3NykNCisrKyBnY2MvdHJlZS12ZWN0LWFuYWx5emUuYwkod29y a2luZyBjb3B5KQ0KQEAgLTEwMzksMTAgKzEwMzksMTAgQEANCiAgIA0KICAg aWYgKEREUl9BUkVfREVQRU5ERU5UIChkZHIpID09IGNocmVjX2RvbnRfa25v dykNCiAgICAgew0KLSAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAo UkVQT1JUX1VOVkVDVE9SSVpFRF9MT09QUykpDQorICAgICAgaWYgKHZlY3Rf cHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfRFJfREVUQUlMUykpDQogICAgICAg ICB7DQogICAgICAgICAgIGZwcmludGYgKHZlY3RfZHVtcCwNCi0gICAgICAg ICAgICAgICAgICAgIm5vdCB2ZWN0b3JpemVkOiBjYW4ndCBkZXRlcm1pbmUg ZGVwZW5kZW5jZSBiZXR3ZWVuICIpOw0KKyAgICAgICAgICAgICAgICAgICAi dmVyc2lvbmluZyBmb3IgYWxpYXMgcmVxdWlyZWQ6IGNhbid0IGRldGVybWlu ZSBkZXBlbmRlbmNlIGJldHdlZW4gIik7DQogICAgICAgICAgIHByaW50X2dl bmVyaWNfZXhwciAodmVjdF9kdW1wLCBEUl9SRUYgKGRyYSksIFRERl9TTElN KTsNCiAgICAgICAgICAgZnByaW50ZiAodmVjdF9kdW1wLCAiIGFuZCAiKTsN CiAgICAgICAgICAgcHJpbnRfZ2VuZXJpY19leHByICh2ZWN0X2R1bXAsIERS X1JFRiAoZHJiKSwgVERGX1NMSU0pOw0KQEAgLTEwNTIsOSArMTA1Miw5IEBA DQogDQogICBpZiAoRERSX05VTV9ESVNUX1ZFQ1RTIChkZHIpID09IDApDQog ICAgIHsNCi0gICAgICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9S VF9VTlZFQ1RPUklaRURfTE9PUFMpKQ0KKyAgICAgIGlmICh2ZWN0X3ByaW50 X2R1bXBfaW5mbyAoUkVQT1JUX0RSX0RFVEFJTFMpKQ0KICAgICAgICAgew0K LSAgICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJub3QgdmVjdG9yaXpl ZDogYmFkIGRpc3QgdmVjdG9yIGZvciAiKTsNCisgICAgICAgICAgZnByaW50 ZiAodmVjdF9kdW1wLCAidmVyc2lvbmluZyBmb3IgYWxpYXMgcmVxdWlyZWQ6 IGJhZCBkaXN0IHZlY3RvciBmb3IgIik7DQogICAgICAgICAgIHByaW50X2dl bmVyaWNfZXhwciAodmVjdF9kdW1wLCBEUl9SRUYgKGRyYSksIFRERl9TTElN KTsNCiAgICAgICAgICAgZnByaW50ZiAodmVjdF9kdW1wLCAiIGFuZCAiKTsN CiAgICAgICAgICAgcHJpbnRfZ2VuZXJpY19leHByICh2ZWN0X2R1bXAsIERS X1JFRiAoZHJiKSwgVERGX1NMSU0pOw0KQEAgLTExMDgsMTAgKzExMDgsMTEg QEANCiAJICBjb250aW51ZTsNCiAJfQ0KIA0KLSAgICAgIGlmICh2ZWN0X3By aW50X2R1bXBfaW5mbyAoUkVQT1JUX1VOVkVDVE9SSVpFRF9MT09QUykpDQor ICAgICAgaWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfRFJfREVU QUlMUykpDQogCXsNCiAJICBmcHJpbnRmICh2ZWN0X2R1bXAsDQotCQkgICAi bm90IHZlY3Rvcml6ZWQ6IHBvc3NpYmxlIGRlcGVuZGVuY2UgYmV0d2VlbiBk YXRhLXJlZnMgIik7DQorCQkgICAidmVyc2lvbmluZyBmb3IgYWxpYXMgcmVx dWlyZWQ6IHBvc3NpYmxlIGRlcGVuZGVuY2UgIg0KKwkJICAgImJldHdlZW4g ZGF0YS1yZWZzICIpOw0KIAkgIHByaW50X2dlbmVyaWNfZXhwciAodmVjdF9k dW1wLCBEUl9SRUYgKGRyYSksIFRERl9TTElNKTsNCiAJICBmcHJpbnRmICh2 ZWN0X2R1bXAsICIgYW5kICIpOw0KIAkgIHByaW50X2dlbmVyaWNfZXhwciAo dmVjdF9kdW1wLCBEUl9SRUYgKGRyYiksIFRERl9TTElNKTsNCkBAIC0xMTIz LDcgKzExMjQsNzggQEANCiAgIHJldHVybiBmYWxzZTsNCiB9DQogDQorLyog UmV0dXJuIFRSVUUgaWYgRERSX05FVyBpcyBhbHJlYWR5IGZvdW5kIGluIE1B WV9BTElBU19ERFJTIGxpc3QuICAqLw0KIA0KK3N0YXRpYyBib29sDQordmVj dF9pc19kdXBsaWNhdGVfZGRyIChWRUMgKGRkcl9wLCBoZWFwKSAqIG1heV9h bGlhc19kZHJzLCBkZHJfcCBkZHJfbmV3KQ0KK3sNCisgIHVuc2lnbmVkIGk7 DQorICBkZHJfcCBkZHI7DQorDQorICBmb3IgKGkgPSAwOyBWRUNfaXRlcmF0 ZSAoZGRyX3AsIG1heV9hbGlhc19kZHJzLCBpLCBkZHIpOyBpKyspDQorICAg IHsNCisgICAgICB0cmVlIGRyZWZfQV9pLCBkcmVmX0JfaSwgZHJlZl9BX2os IGRyZWZfQl9qOw0KKw0KKyAgICAgIGRyZWZfQV9pID0gRFJfUkVGIChERFJf QSAoZGRyKSk7DQorICAgICAgZHJlZl9CX2kgPSBEUl9SRUYgKEREUl9CIChk ZHIpKTsNCisgICAgICBkcmVmX0FfaiA9IERSX1JFRiAoRERSX0EgKGRkcl9u ZXcpKTsNCisgICAgICBkcmVmX0JfaiA9IERSX1JFRiAoRERSX0IgKGRkcl9u ZXcpKTsNCisNCisgICAgICBpZiAoKG9wZXJhbmRfZXF1YWxfcCAoZHJlZl9B X2ksIGRyZWZfQV9qLCAwKQ0KKwkgICAmJiBvcGVyYW5kX2VxdWFsX3AgKGRy ZWZfQl9pLCBkcmVmX0JfaiwgMCkpDQorCSAgfHwgKG9wZXJhbmRfZXF1YWxf cCAoZHJlZl9BX2ksIGRyZWZfQl9qLCAwKQ0KKwkgICAgICAmJiBvcGVyYW5k X2VxdWFsX3AgKGRyZWZfQl9pLCBkcmVmX0FfaiwgMCkpKQ0KKwl7DQorCSAg aWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfRFJfREVUQUlMUykp DQorCSAgICB7DQorCSAgICAgIGZwcmludGYgKHZlY3RfZHVtcCwgImZvdW5k IHNhbWUgcGFpciBvZiBkYXRhIHJlZmVyZW5jZXMgIik7DQorCSAgICAgIHBy aW50X2dlbmVyaWNfZXhwciAodmVjdF9kdW1wLCBkcmVmX0FfaSwgVERGX1NM SU0pOw0KKwkgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICIgYW5kICIpOw0K KwkgICAgICBwcmludF9nZW5lcmljX2V4cHIgKHZlY3RfZHVtcCwgZHJlZl9C X2ksIFRERl9TTElNKTsNCisJICAgIH0NCisJICByZXR1cm4gdHJ1ZTsNCisJ fQ0KKyAgICB9DQorICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qIFNhdmUg RERSIGluIExPT1BfVklORk8gbGlzdCBvZiBkZHJzIHRoYXQgbWF5IGFsaWFz IGFuZCBuZWVkIHRvIGJlDQorICAgdGVzdGVkIGF0IHJ1bi10aW1lLiAgUmV0 dXJucyBmYWxzZSBpZiBudW1iZXIgb2YgcnVuLXRpbWUgY2hlY2tzDQorICAg aW5zZXJ0ZWQgYnkgdmVjdG9yaXplciBpcyBncmVhdGVyIHRoYW4gbWF4aW11 bSBkZWZpbmVkIGJ5DQorICAgUEFSQU1fVkVDVF9NQVhfVkVSU0lPTl9GT1Jf QUxJQVNfQ0hFQ0tTLiAgKi8NCitzdGF0aWMgYm9vbA0KK3ZlY3RfbWFya19m b3JfcnVudGltZV9hbGlhc190ZXN0IChkZHJfcCBkZHIsIGxvb3BfdmVjX2lu Zm8gbG9vcF92aW5mbykNCit7DQorICBpZiAodmVjdF9wcmludF9kdW1wX2lu Zm8gKFJFUE9SVF9EUl9ERVRBSUxTKSkNCisgICAgew0KKyAgICAgIGZwcmlu dGYgKHZlY3RfZHVtcCwgIm1hcmsgZm9yIHJ1bi10aW1lIGFsaWFzaW5nIHRl c3QgYmV0d2VlbiAiKTsNCisgICAgICBwcmludF9nZW5lcmljX2V4cHIgKHZl Y3RfZHVtcCwgRFJfUkVGIChERFJfQSAoZGRyKSksIFRERl9TTElNKTsNCisg ICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICIgYW5kICIpOw0KKyAgICAgIHBy aW50X2dlbmVyaWNfZXhwciAodmVjdF9kdW1wLCBEUl9SRUYgKEREUl9CIChk ZHIpKSwgVERGX1NMSU0pOw0KKyAgICB9DQorDQorICAvKiBEbyBub3QgYWRk IHRvIHRoZSBsaXN0IGR1cGxpY2F0ZSBkZHJzLiAgKi8NCisgIGlmICh2ZWN0 X2lzX2R1cGxpY2F0ZV9kZHIgKExPT1BfVklORk9fTUFZX0FMSUFTX0REUlMg KGxvb3BfdmluZm8pLCBkZHIpKQ0KKyAgICByZXR1cm4gdHJ1ZTsNCisNCisg IGlmIChWRUNfbGVuZ3RoIChkZHJfcCwgTE9PUF9WSU5GT19NQVlfQUxJQVNf RERSUyAobG9vcF92aW5mbykpDQorICAgICAgPj0gKHVuc2lnbmVkKSBQQVJB TV9WQUxVRSAoUEFSQU1fVkVDVF9NQVhfVkVSU0lPTl9GT1JfQUxJQVNfQ0hF Q0tTKSkNCisgICAgew0KKyAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5m byAoUkVQT1JUX0RSX0RFVEFJTFMpKQ0KKwl7DQorCSAgZnByaW50ZiAodmVj dF9kdW1wLA0KKwkJICAgImRpc2FibGUgdmVyc2lvbmluZyBmb3IgYWxpYXMg LSBtYXggbnVtYmVyIG9mIGdlbmVyYXRlZCAiDQorCQkgICAiY2hlY2tzIGV4 Y2VlZGVkLiIpOw0KKwl9DQorDQorICAgICAgVkVDX3RydW5jYXRlIChkZHJf cCwgTE9PUF9WSU5GT19NQVlfQUxJQVNfRERSUyAobG9vcF92aW5mbyksIDAp Ow0KKw0KKyAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKyAgVkVDX3Nh ZmVfcHVzaCAoZGRyX3AsIGhlYXAsIExPT1BfVklORk9fTUFZX0FMSUFTX0RE UlMgKGxvb3BfdmluZm8pLCBkZHIpOw0KKyAgcmV0dXJuIHRydWU7DQorfQ0K Kw0KIC8qIEZ1bmN0aW9uIHZlY3RfYW5hbHl6ZV9kYXRhX3JlZl9kZXBlbmRl bmNlcy4NCiAgICAgICAgICAgDQogICAgRXhhbWluZSBhbGwgdGhlIGRhdGEg cmVmZXJlbmNlcyBpbiB0aGUgbG9vcCwgYW5kIG1ha2Ugc3VyZSB0aGVyZSBk byBub3QNCkBAIC0xMTMzLDcgKzEyMDUsNyBAQA0KIHZlY3RfYW5hbHl6ZV9k YXRhX3JlZl9kZXBlbmRlbmNlcyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv KQ0KIHsNCiAgIHVuc2lnbmVkIGludCBpOw0KLSAgVkVDIChkZHJfcCwgaGVh cCkgKmRkcnMgPSBMT09QX1ZJTkZPX0REUlMgKGxvb3BfdmluZm8pOw0KKyAg VkVDIChkZHJfcCwgaGVhcCkgKiBkZHJzID0gTE9PUF9WSU5GT19ERFJTIChs b29wX3ZpbmZvKTsNCiAgIHN0cnVjdCBkYXRhX2RlcGVuZGVuY2VfcmVsYXRp b24gKmRkcjsNCiANCiAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQ T1JUX0RFVEFJTFMpKSANCkBAIC0xMTQxLDcgKzEyMTMsMTEgQEANCiAgICAg IA0KICAgZm9yIChpID0gMDsgVkVDX2l0ZXJhdGUgKGRkcl9wLCBkZHJzLCBp LCBkZHIpOyBpKyspDQogICAgIGlmICh2ZWN0X2FuYWx5emVfZGF0YV9yZWZf ZGVwZW5kZW5jZSAoZGRyLCBsb29wX3ZpbmZvKSkNCisgICAgICB7DQorCS8q IEFkZCB0byBsaXN0IG9mIGRkcnMgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCBh dCBydW4tdGltZS4gICovDQorCWlmICghdmVjdF9tYXJrX2Zvcl9ydW50aW1l X2FsaWFzX3Rlc3QgKGRkciwgbG9vcF92aW5mbykpDQogICAgICAgcmV0dXJu IGZhbHNlOw0KKyAgICAgIH0NCiANCiAgIHJldHVybiB0cnVlOw0KIH0NCkBA IC0xNTU0LDYgKzE2MzAsNyBAQA0KICAgYm9vbCBzdGF0Ow0KICAgdHJlZSBz dG10Ow0KICAgc3RtdF92ZWNfaW5mbyBzdG10X2luZm87DQorICBpbnQgdmVj dF92ZXJzaW9uaW5nX2Zvcl9hbGlhc19yZXF1aXJlZDsNCiANCiAgIGlmICh2 ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JUX0RFVEFJTFMpKQ0KICAgICBm cHJpbnRmICh2ZWN0X2R1bXAsICI9PT0gdmVjdF9lbmhhbmNlX2RhdGFfcmVm c19hbGlnbm1lbnQgPT09Iik7DQpAQCAtMTYxOSw5ICsxNjk2LDE1IEBADQog CX0NCiAgICAgfQ0KIA0KLSAgLyogT2Z0ZW4gcGVlbGluZyBmb3IgYWxpZ25t ZW50IHdpbGwgcmVxdWlyZSBwZWVsaW5nIGZvciBsb29wLWJvdW5kLCB3aGlj aCBpbiANCi0gICAgIHR1cm4gcmVxdWlyZXMgdGhhdCB3ZSBrbm93IGhvdyB0 byBhZGp1c3QgdGhlIGxvb3AgaXZzIGFmdGVyIHRoZSBsb29wLiAgKi8NCi0g IGlmICghdmVjdF9jYW5fYWR2YW5jZV9pdnNfcCAobG9vcF92aW5mbykNCisg IHZlY3RfdmVyc2lvbmluZ19mb3JfYWxpYXNfcmVxdWlyZWQgPQ0KKyAgICAo VkVDX2xlbmd0aCAoZGRyX3AsIExPT1BfVklORk9fTUFZX0FMSUFTX0REUlMg KGxvb3BfdmluZm8pKSA+IDApOw0KKw0KKyAgLyogVGVtcG9yYXJpbHksIGlm IHZlcnNpb25pbmcgZm9yIGFsaWFzIGlzIHJlcXVpcmVkLCB3ZSBkaXNhYmxl IHBlZWxpbmcNCisgICAgIHVudGlsIHdlIHN1cHBvcnQgcGVlbGluZyBhbmQg dmVyc2lvbmluZy4gIE9mdGVuIHBlZWxpbmcgZm9yIGFsaWdubWVudA0KKyAg ICAgd2lsbCByZXF1aXJlIHBlZWxpbmcgZm9yIGxvb3AtYm91bmQsIHdoaWNo IGluIHR1cm4gcmVxdWlyZXMgdGhhdCB3ZQ0KKyAgICAga25vdyBob3cgdG8g YWRqdXN0IHRoZSBsb29wIGl2cyBhZnRlciB0aGUgbG9vcC4gICovDQorICBp ZiAodmVjdF92ZXJzaW9uaW5nX2Zvcl9hbGlhc19yZXF1aXJlZA0KKyAgICAg ICB8fCAhdmVjdF9jYW5fYWR2YW5jZV9pdnNfcCAobG9vcF92aW5mbykNCiAg ICAgICB8fCAhc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChsb29wLCBz aW5nbGVfZXhpdCAobG9vcCkpKQ0KICAgICBkb19wZWVsaW5nID0gZmFsc2U7 DQogDQpAQCAtMTc0OSw3ICsxODMyLDcgQEANCiAgICAgICAgICAgICAgIGlm IChrbm93bl9hbGlnbm1lbnRfZm9yX2FjY2Vzc19wIChkcikNCiAgICAgICAg ICAgICAgICAgICB8fCBWRUNfbGVuZ3RoICh0cmVlLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExPT1BfVklORk9fTUFZX01JU0FMSUdO X1NUTVRTIChsb29wX3ZpbmZvKSkNCi0gICAgICAgICAgICAgICAgICAgICA+ PSAodW5zaWduZWQpIFBBUkFNX1ZBTFVFIChQQVJBTV9WRUNUX01BWF9WRVJT SU9OX0NIRUNLUykpDQorICAgICAgICAgICAgICAgICAgICAgPj0gKHVuc2ln bmVkKSBQQVJBTV9WQUxVRSAoUEFSQU1fVkVDVF9NQVhfVkVSU0lPTl9GT1Jf QUxJR05NRU5UX0NIRUNLUykpDQogICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgICBkb192ZXJzaW9uaW5nID0gZmFsc2U7DQogICAgICAg ICAgICAgICAgICAgYnJlYWs7DQpJbmRleDogZ2NjL3RyZWUtdmVjdG9yaXpl ci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3RyZWUtdmVj dG9yaXplci5oCShyZXZpc2lvbiAxMjc0NzcpDQorKysgZ2NjL3RyZWUtdmVj dG9yaXplci5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMTMzLDYgKzEzMywxMCBA QA0KICAgLyogQWxsIGRhdGEgZGVwZW5kZW5jZXMgaW4gdGhlIGxvb3AuICAq Lw0KICAgVkVDIChkZHJfcCwgaGVhcCkgKmRkcnM7DQogDQorICAvKiBEYXRh IERlcGVuZGVuY2UgUmVsYXRpb25zIGRlZmluaW5nIGFkZHJlc3MgcmFuZ2Vz IHRoYXQgYXJlIGNhbmRpZGF0ZXMNCisgICAgIGZvciBhIHJ1bi10aW1lIGFs aWFzaW5nIGNoZWNrLiAgKi8NCisgIFZFQyAoZGRyX3AsIGhlYXApICptYXlf YWxpYXNfZGRyczsNCisNCiAgIC8qIFN0YXRlbWVudHMgaW4gdGhlIGxvb3Ag dGhhdCBoYXZlIGRhdGEgcmVmZXJlbmNlcyB0aGF0IGFyZSBjYW5kaWRhdGVz IGZvciBhDQogICAgICBydW50aW1lIChsb29wIHZlcnNpb25pbmcpIG1pc2Fs aWdubWVudCBjaGVjay4gICovDQogICBWRUModHJlZSxoZWFwKSAqbWF5X21p c2FsaWduX3N0bXRzOw0KQEAgLTE1Nyw2ICsxNjEsNyBAQA0KICNkZWZpbmUg TE9PUF9WSU5GT19VTkFMSUdORURfRFIoTCkgICAgKEwpLT51bmFsaWduZWRf ZHINCiAjZGVmaW5lIExPT1BfVklORk9fTUFZX01JU0FMSUdOX1NUTVRTKEwp IChMKS0+bWF5X21pc2FsaWduX3N0bXRzDQogI2RlZmluZSBMT09QX1ZJTkZP X0xPQyhMKSAgICAgICAgICAgICAoTCktPmxvb3BfbGluZV9udW1iZXINCisj ZGVmaW5lIExPT1BfVklORk9fTUFZX0FMSUFTX0REUlMoTCkgIChMKS0+bWF5 X2FsaWFzX2RkcnMNCiANCiAjZGVmaW5lIE5JVEVSU19LTk9XTl9QKG4pICAg ICAgICAgICAgICAgICAgICAgXA0KIChob3N0X2ludGVnZXJwICgobiksMCkg ICAgICAgICAgICAgICAgICAgICAgICBcDQpJbmRleDogZ2NjL3RyZWUtdmVj dG9yaXplci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Ry ZWUtdmVjdG9yaXplci5jCShyZXZpc2lvbiAxMjc0NzcpDQorKysgZ2NjL3Ry ZWUtdmVjdG9yaXplci5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMTQxNCw5ICsx NDE0LDEyIEBADQogICBMT09QX1ZJTkZPX0RBVEFSRUZTIChyZXMpID0gVkVD X2FsbG9jIChkYXRhX3JlZmVyZW5jZV9wLCBoZWFwLCAxMCk7DQogICBMT09Q X1ZJTkZPX0REUlMgKHJlcykgPSBWRUNfYWxsb2MgKGRkcl9wLCBoZWFwLCAx MCAqIDEwKTsNCiAgIExPT1BfVklORk9fVU5BTElHTkVEX0RSIChyZXMpID0g TlVMTDsNCi0gIExPT1BfVklORk9fTUFZX01JU0FMSUdOX1NUTVRTIChyZXMp DQotICAgID0gVkVDX2FsbG9jICh0cmVlLCBoZWFwLCBQQVJBTV9WQUxVRSAo UEFSQU1fVkVDVF9NQVhfVkVSU0lPTl9DSEVDS1MpKTsNCisgIExPT1BfVklO Rk9fTUFZX01JU0FMSUdOX1NUTVRTIChyZXMpID0NCisgICAgVkVDX2FsbG9j ICh0cmVlLCBoZWFwLCBQQVJBTV9WQUxVRSAoUEFSQU1fVkVDVF9NQVhfVkVS U0lPTl9GT1JfQUxJR05NRU5UX0NIRUNLUykpOw0KKyAgTE9PUF9WSU5GT19N QVlfQUxJQVNfRERSUyAocmVzKSA9DQorICAgIFZFQ19hbGxvYyAoZGRyX3As IGhlYXAsIFBBUkFNX1ZBTFVFIChQQVJBTV9WRUNUX01BWF9WRVJTSU9OX0ZP Ul9BTElBU19DSEVDS1MpKTsNCiANCisNCiAgIHJldHVybiByZXM7DQogfQ0K IA0KQEAgLTE0OTUsNiArMTQ5OCw3IEBADQogICBmcmVlX2RhdGFfcmVmcyAo TE9PUF9WSU5GT19EQVRBUkVGUyAobG9vcF92aW5mbykpOw0KICAgZnJlZV9k ZXBlbmRlbmNlX3JlbGF0aW9ucyAoTE9PUF9WSU5GT19ERFJTIChsb29wX3Zp bmZvKSk7DQogICBWRUNfZnJlZSAodHJlZSwgaGVhcCwgTE9PUF9WSU5GT19N QVlfTUlTQUxJR05fU1RNVFMgKGxvb3BfdmluZm8pKTsNCisgIFZFQ19mcmVl IChkZHJfcCwgaGVhcCwgTE9PUF9WSU5GT19NQVlfQUxJQVNfRERSUyAobG9v cF92aW5mbykpOw0KIA0KICAgZnJlZSAobG9vcF92aW5mbyk7DQogICBsb29w LT5hdXggPSBOVUxMOw0KSW5kZXg6IGdjYy9kb2MvaW52b2tlLnRleGkNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvZG9jL2ludm9rZS50ZXhp CShyZXZpc2lvbiAxMjc0NzcpDQorKysgZ2NjL2RvYy9pbnZva2UudGV4aQko d29ya2luZyBjb3B5KQ0KQEAgLTY3NDEsMTEgKzY3NDEsMTYgQEANCiBXaGVu IHNldCB0byAxLCB1c2UgZXhwZW5zaXZlIG1ldGhvZHMgdG8gZWxpbWluYXRl IGFsbCByZWR1bmRhbnQNCiBjb25zdHJhaW50cy4gIFRoZSBkZWZhdWx0IHZh bHVlIGlzIDAuDQogDQotQGl0ZW0gdmVjdC1tYXgtdmVyc2lvbi1jaGVja3MN Ci1UaGUgbWF4aW11bSBudW1iZXIgb2YgcnVudGltZSBjaGVja3MgdGhhdCBj YW4gYmUgcGVyZm9ybWVkIHdoZW4gZG9pbmcNCi1sb29wIHZlcnNpb25pbmcg aW4gdGhlIHZlY3Rvcml6ZXIuICBTZWUgb3B0aW9uIGZ0cmVlLXZlY3QtbG9v cC12ZXJzaW9uDQotZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorQGl0ZW0gdmVj dC1tYXgtdmVyc2lvbi1mb3ItYWxpZ25tZW50LWNoZWNrcw0KK1RoZSBtYXhp bXVtIG51bWJlciBvZiBydW50aW1lIGNoZWNrcyB0aGF0IGNhbiBiZSBwZXJm b3JtZWQgd2hlbg0KK2RvaW5nIGxvb3AgdmVyc2lvbmluZyBmb3IgYWxpZ25t ZW50IGluIHRoZSB2ZWN0b3JpemVyLiAgU2VlIG9wdGlvbg0KK2Z0cmVlLXZl Y3QtbG9vcC12ZXJzaW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KIA0KK0Bp dGVtIHZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWFzLWNoZWNrcw0KK1RoZSBt YXhpbXVtIG51bWJlciBvZiBydW50aW1lIGNoZWNrcyB0aGF0IGNhbiBiZSBw ZXJmb3JtZWQgd2hlbg0KK2RvaW5nIGxvb3AgdmVyc2lvbmluZyBmb3IgYWxp YXMgaW4gdGhlIHZlY3Rvcml6ZXIuICBTZWUgb3B0aW9uDQorZnRyZWUtdmVj dC1sb29wLXZlcnNpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorDQogQGl0 ZW0gbWF4LWl0ZXJhdGlvbnMtdG8tdHJhY2sNCiANCiBUaGUgbWF4aW11bSBu dW1iZXIgb2YgaXRlcmF0aW9ucyBvZiBhIGxvb3AgdGhlIGJydXRlIGZvcmNl IGFsZ29yaXRobQ0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv dmVjdC92ZWN0LmV4cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvdmVjdC92ZWN0LmV4cAkocmV2aXNp b24gMTI3NDc3KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvdmVj dC92ZWN0LmV4cAkod29ya2luZyBjb3B5KQ0KQEAgLTkwLDggKzkwLDE5IEBA DQogZGctaW5pdA0KIA0KICMgTWFpbiBsb29wLg0KLWdmb3J0cmFuLWRnLXJ1 bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRp ci8qLlxbZkZcXXssOTAsOTUsMDN9IF1dICRERUZBVUxUX1ZFQ1RDRkxBR1MN CitnZm9ydHJhbi1kZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFp biAkc3JjZGlyLyRzdWJkaXIvdmVjdC0qLlxbZkZcXXssOTAsOTUsMDN9IF1d ICRERUZBVUxUX1ZFQ1RDRkxBR1MNCitnZm9ydHJhbi1kZy1ydW50ZXN0IFts c29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvcHItKi5c W2ZGXF17LDkwLDk1LDAzfSBdXSAkREVGQVVMVF9WRUNUQ0ZMQUdTDQogDQor IyMjIyBUZXN0cyB3aXRoIHNwZWNpYWwgb3B0aW9ucw0KK2dsb2JhbCBTQVZF RF9ERUZBVUxUX1ZFQ1RDRkxBR1MNCitzZXQgU0FWRURfREVGQVVMVF9WRUNU Q0ZMQUdTICRERUZBVUxUX1ZFQ1RDRkxBR1MNCisNCisjIC0tcGFyYW0gdmVj dC1tYXgtdmVyc2lvbi1mb3ItYWxpYXMtY2hlY2tzPTAgdGVzdHMNCitzZXQg REVGQVVMVF9WRUNUQ0ZMQUdTICRTQVZFRF9ERUZBVUxUX1ZFQ1RDRkxBR1MN CitsYXBwZW5kIERFRkFVTFRfVkVDVENGTEFHUyAiLS1wYXJhbSIgInZlY3Qt bWF4LXZlcnNpb24tZm9yLWFsaWFzLWNoZWNrcz0wIg0KK2RnLXJ1bnRlc3Qg W2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci9uby12 ZmEtKi5cW2ZGXF17LDkwLDk1LDAzfSBdXSAgXA0KKyAgICAgICAgIiIgJERF RkFVTFRfVkVDVENGTEFHUw0KKw0KICMgQ2xlYW4gdXAuDQogc2V0IGRnLWRv LXdoYXQtZGVmYXVsdCAke3NhdmUtZGctZG8td2hhdC1kZWZhdWx0fQ0KIA0K SW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC5leHANCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QuZXhwCShyZXZpc2lvbiAxMjc0NzcpDQorKysgZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LmV4cAkod29ya2luZyBjb3B5KQ0K QEAgLTExMyw2ICsxMTMsMTIgQEANCiBnbG9iYWwgU0FWRURfREVGQVVMVF9W RUNUQ0ZMQUdTDQogc2V0IFNBVkVEX0RFRkFVTFRfVkVDVENGTEFHUyAkREVG QVVMVF9WRUNUQ0ZMQUdTDQogDQorIyAtLXBhcmFtIHZlY3QtbWF4LXZlcnNp b24tZm9yLWFsaWFzLWNoZWNrcz0wIHRlc3RzDQorc2V0IERFRkFVTFRfVkVD VENGTEFHUyAkU0FWRURfREVGQVVMVF9WRUNUQ0ZMQUdTDQorbGFwcGVuZCBE RUZBVUxUX1ZFQ1RDRkxBR1MgIi0tcGFyYW0iICJ2ZWN0LW1heC12ZXJzaW9u LWZvci1hbGlhcy1jaGVja3M9MCINCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xv YiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvbm8tdmZhLSouXFtjU1xd XV0gIFwNCisJIiIgJERFRkFVTFRfVkVDVENGTEFHUw0KKw0KICMgLWZmYXN0 LW1hdGggdGVzdHMNCiBzZXQgREVGQVVMVF9WRUNUQ0ZMQUdTICRTQVZFRF9E RUZBVUxUX1ZFQ1RDRkxBR1MNCiBsYXBwZW5kIERFRkFVTFRfVkVDVENGTEFH UyAiLWZmYXN0LW1hdGgiDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LXZmYS0wMS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXZmYS0wMS5jCShy ZXZpc2lvbiAwKQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC12ZmEtMDEuYwkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMzkgQEANCisv KiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICov DQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVlLXZl Y3QuaCINCisNCisjZGVmaW5lIE4gMTYNCitpbnQgcmVzdWx0W05dID0gezEy LCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMs IDI0LCAyNSwgMjYsIDI3fTsNCitpbnQgWFtOXSA9IHsxMCwgMTEsIDEyLCAx MywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0 LCAyNX07DQoraW50IFlbTl0gPSB7fTsNCisgDQordm9pZA0KK2ZvbyAoaW50 ICppbiwgaW50ICpvdXQpDQoreyAgDQorICBpbnQgaTsNCisgIA0KKyAgZm9y IChpID0gMDsgaSA8IE47IGkrKykNCisgICAgb3V0W2ldID0gaW5baV0gKyAy Ow0KK30NCisNCitpbnQNCittYWluICh2b2lkKQ0KK3sgDQorICBpbnQgaTsN CisNCisgIGNoZWNrX3ZlY3QgKCk7DQorDQorICBmb28gKFgsIFkpOw0KKyAg DQorICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkg PCBOOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoWVtpXSAhPSByZXN1bHRb aV0pDQorCWFib3J0ICgpOw0KKyAgICB9DQorICByZXR1cm4gMDsNCit9IA0K Kw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVj dG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB9IH0gKi8NCisvKiB7IGRnLWZp bmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KSW5kZXg6 IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC12ZmEtMDIuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC12ZmEtMDIuYwkocmV2aXNpb24gMCkNCisrKyBnY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtdmZhLTAyLmMJKHJldmlzaW9uIDAp DQpAQCAtMCwwICsxLDQ3IEBADQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2 ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcu aD4NCisjaW5jbHVkZSAidHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDE2 DQoraW50IHJlc3VsdFlbTl0gPSB7MTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg MTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjd9Ow0KK2lu dCByZXN1bHRaW05dID0gezEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAy MCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4fTsNCitpbnQgWFtO XSA9IHsxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwg MjAsIDIxLCAyMiwgMjMsIDI0LCAyNX07DQoraW50IFlbTl0gPSB7fTsNCitp bnQgWltOXSA9IHt9Ow0KKyANCit2b2lkDQorZm9vIChpbnQgKmluLCBpbnQg Km91dDEsIGludCAqb3V0MikNCit7DQorICBpbnQgaTsNCisNCisgIGZvciAo aSA9IDA7IGkgPCBOOyBpKyspDQorICAgIHsNCisgICAgICBvdXQxW2ldID0g aW5baV0gKyAyOw0KKyAgICAgIG91dDJbaV0gPSBpbltpXSArIDM7DQorICAg IH0NCit9DQorDQoraW50DQorbWFpbiAodm9pZCkNCit7IA0KKyAgaW50IGk7 DQorDQorICBjaGVja192ZWN0ICgpOw0KKw0KKyAgZm9vIChYLCBZLCBaKTsN CisgIA0KKyAgLyogY2hlY2sgcmVzdWx0czogICovDQorICBmb3IgKGkgPSAw OyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgaWYgKFlbaV0gIT0gcmVz dWx0WVtpXSkNCisJYWJvcnQgKCk7DQorDQorICAgICAgaWYgKFpbaV0gIT0g cmVzdWx0WltpXSkNCisJYWJvcnQgKCk7DQorICAgIH0NCisgIHJldHVybiAw Ow0KK30gDQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLw0KKy8q IHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICov DQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXZmYS0w My5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LXZmYS0wMy5jCShyZXZpc2lvbiAwKQ0KKysr IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC12ZmEtMDMuYwkocmV2 aXNpb24gMCkNCkBAIC0wLDAgKzEsNTggQEANCisvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQorDQorI2luY2x1ZGUg PHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCisNCisjZGVm aW5lIE4gMTYNCitzdHJ1Y3QgUw0KK3sNCisgIHVuc2lnbmVkIHNob3J0IGE7 DQorICB1bnNpZ25lZCBzaG9ydCBiOw0KK307DQorDQorc3RydWN0IFMgcmVz dWx0W05dID0gezEyLCAxMywgMTMsIDE0LCAxNCwgMTUsIDE1LCAxNiwgMTYs IDE3LCAxNywgMTgsDQorICAgICAgICAgICAgICAgICAgICAgIDE4LCAxOSwg MTksIDIwLCAyMCwgMjEsIDIxLCAyMiwgMjIsIDIzLCAyMywgMjQsDQorCQkg ICAgICAyNCwgMjUsIDI1LCAyNiwgMjYsIDI3LCAyNywgMjh9Ow0KK3N0cnVj dCBTIFhbTl0gPSB7MTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTMsIDEzLCAx NCwgMTQsIDE1LCAxNSwgMTYsDQorICAgICAgICAgICAgICAgICAxNiwgMTcs IDE3LCAxOCwgMTgsIDE5LCAxOSwgMjAsIDIwLCAyMSwgMjEsIDIyLCAyMiwN CisJCSAyMywgMjMsIDI0LCAyNCwgMjUsIDI1fTsNCitzdHJ1Y3QgUyBZW05d ID0ge307DQorIA0KK3ZvaWQNCitmb28gKHN0cnVjdCBTICogaW4sIHN0cnVj dCBTICogb3V0KQ0KK3sNCisgIGludCBpOw0KKw0KKyAgZm9yIChpID0gMDsg aSA8IE47IGkrKykNCisgICAgew0KKyAgICAgIG91dFtpXS5hID0gaW5baV0u YSArIDI7DQorICAgICAgb3V0W2ldLmIgPSBpbltpXS5iICsgMzsNCisgICAg fQ0KK30NCisNCitpbnQNCittYWluICh2b2lkKQ0KK3sgDQorICBpbnQgaTsN CisNCisgIGNoZWNrX3ZlY3QgKCk7DQorDQorICBmb28gKFgsIFkpOw0KKyAg DQorICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkg PCBOOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoWVtpXS5hICE9IHJlc3Vs dFtpXS5hKQ0KKwlhYm9ydCAoKTsNCisNCisgICAgICBpZiAoWVtpXS5iICE9 IHJlc3VsdFtpXS5iKQ0KKwlhYm9ydCAoKTsNCisNCisgICAgfQ0KKyAgcmV0 dXJuIDA7DQorfSANCisNCisvKiBOZWVkcyBpbnRlcmxlYXZpbmcgc3VwcG9y dC4gICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIHsgdGFyZ2V0IHsgdmVj dF9pbnRlcmxlYXZlICYmIHZlY3RfZXh0cmFjdF9ldmVuX29kZCB9IH0gfSB9 ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2 ZWN0b3JpemVkIDEgbG9vcHMiIDAgInZlY3QiIHsgeGZhaWwgIHsgdmVjdF9p bnRlcmxlYXZlICYmIHZlY3RfZXh0cmFjdF9ldmVuX29kZCB9IH0gfSB9ICov DQorLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9 IH0gKi8NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qt dmZhLTA0LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtdmZhLTA0LmMJKHJldmlzaW9uIDAp DQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXZmYS0wNC5j CShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwzOCBAQA0KKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisjaW5j bHVkZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0K KyNkZWZpbmUgTiAxNg0KK2ludCByZXN1bHRbXSA9IHsxMCwgMTEsIDE1LCAx NiwgMjAsIDIxLCAyNSwgMjYsIDMwLCAzMSwgMzUsIDM2LCA0MCwgNDEsIDQ1 LCA0NiwgNTAsIDUxfTsNCitpbnQgWFtdID0gICAgICB7MTAsIDExLCAxMiwg MTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAy NCwgMjUsIDAsIDB9Ow0KKyANCit2b2lkDQorZm9vIChpbnQgKmluLCBpbnQg Km91dCkNCit7ICANCisgIGludCBpOw0KKyAgDQorICBmb3IgKGkgPSAwOyBp IDwgTjsgaSsrKQ0KKyAgICBvdXRbaV0gPSBpbltpXSArIDU7DQorfQ0KKw0K K2ludA0KK21haW4gKHZvaWQpDQoreyANCisgIGludCBpOw0KKw0KKyAgY2hl Y2tfdmVjdCAoKTsNCisNCisgIGZvbyAoWCwgJlhbMl0pOw0KKyAgDQorICAv KiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCBOKzI7 IGkrKykNCisgICAgew0KKyAgICAgIGlmIChYW2ldICE9IHJlc3VsdFtpXSkN CisJYWJvcnQgKCk7DQorICAgIH0NCisgIHJldHVybiAwOw0KK30gDQorDQor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3Jp emVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLw0KKy8qIHsgZGctZmluYWwg eyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICovDQpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVjdC01My5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC9uby12ZmEtdmVjdC01My5jCShyZXZpc2lvbiAwKQ0KKysrIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNTMuYwkocmV2aXNp b24gMCkNCkBAIC0wLDAgKzEsNjIgQEANCisvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCisNCisjaW5jbHVkZSA8 c3RkYXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0KKyNkZWZp bmUgTiAyNTYNCisNCit2b2lkIGJhciAoY29uc3QgZmxvYXQgKnBhLCBjb25z dCBmbG9hdCAqcGIsIGNvbnN0IGZsb2F0ICpwYykgDQorew0KKyAgaW50IGk7 DQorDQorICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7 IGkgPCBOOyBpKyspDQorICAgIHsNCisgICAgICBpZiAocGFbaV0gIT0gKHBi W2ldICogcGNbaV0pKQ0KKwlhYm9ydCAoKTsNCisgICAgfQ0KKw0KKyAgcmV0 dXJuOw0KK30NCisNCisvKiBVbmFsaWduZWQgcG9pbnRlciByZWFkIGFjY2Vz c2VzLCBhbGlnbmVkIHBvaW50ZXIgd3JpdGUgYWNjZXNzLg0KKyAgIFRoZSBs b29wIGJvdW5kIGlzIHVua25vd24uDQorICAgQ2FuJ3QgcHJvdmUgdGhhdCB0 aGUgcG9pbnRlcnMgZG9uJ3QgYWxpYXMuDQorICAgdmVjdC00OS5jIGlzIHNp bWlsYXIgdG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCisgICAg ICAgIHRoZSBsb29wIGJvdW5kIGlzIGtub3duLg0KKyAgIHZlY3QtNTIuYyBp cyBzaW1pbGFyIHRvIHRoaXMgb25lIHdpdGggb25lIGRpZmZlcmVuY2U6DQor ICAgICAgICBhbGlhc2luZyBpcyBub3QgYSBwcm9ibGVtLiAgKi8NCisNCitp bnQNCittYWluMSAoaW50IG4sIGZsb2F0ICpwYiwgZmxvYXQgKnBjKQ0KK3sN CisgIGZsb2F0IHBhW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygx NikpKTsNCisgIGludCBpOw0KKw0KKyAgZm9yIChpID0gMDsgaSA8IG47IGkr KykNCisgICAgew0KKyAgICAgIHBhW2ldID0gcGJbaV0gKiBwY1tpXTsNCisg ICAgfQ0KKw0KKyAgYmFyIChwYSxwYixwYyk7DQorDQorICByZXR1cm4gMDsN Cit9DQorDQoraW50IG1haW4gKHZvaWQpDQorew0KKyAgaW50IGk7DQorICBm bG9hdCBhW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKTsN CisgIGZsb2F0IGJbTisxXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18o MTYpKSkgPSB7MCwzLDYsOSwxMiwxNSwxOCwyMSwyNCwyNywzMCwzMywzNiwz OSw0Miw0NSw0OCw1MSw1NCw1Nyw2MH07DQorICBmbG9hdCBjW04rMV0gX19h dHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpID0gezAsMSwyLDMsNCw1 LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjB9Ow0K Kw0KKyAgY2hlY2tfdmVjdCAoKTsNCisNCisgIG1haW4xIChOLCZiWzFdLGMp Ow0KKyAgbWFpbjEgKE4sJmJbMV0sJmNbMV0pOw0KKw0KKyAgcmV0dXJuIDA7 DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB7IHhmYWlsICotKi0q IH0gfSB9ICovDQorLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1w ICJ2ZWN0IiB9IH0gKi8NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtMTAyYS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTEwMmEuYwkocmV2aXNp b24gMTI3MzE2KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC0xMDJhLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDU3ICswLDAgQEANCi0v KiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICov DQotDQotI2luY2x1ZGUgPHN0ZGxpYi5oPg0KLSNpbmNsdWRlIDxzdGRhcmcu aD4NCi0jaW5jbHVkZSAidHJlZS12ZWN0LmgiDQotDQotI2RlZmluZSBOIDkN Ci0NCi1zdHJ1Y3QgZXh0cmFjdGlvbg0KLXsNCi0gIGludCBhW05dOw0KLSAg aW50IGJbTl07DQotfTsNCi0NCi1zdGF0aWMgaW50IGFbTl0gPSB7MSwyLDMs NCw1LDYsNyw4LDl9Ow0KLXN0YXRpYyBpbnQgYltOXSA9IHsyLDMsNCw1LDYs Nyw4LDksOX07DQotdm9sYXRpbGUgaW50IGZvbzsNCi0NCi1pbnQgbWFpbjEg KGludCB4LCBpbnQgeSkgew0KLSAgaW50IGk7DQotICBzdHJ1Y3QgZXh0cmFj dGlvbiAqcDsNCi0gIHAgPSAoc3RydWN0IGV4dHJhY3Rpb24gKikgbWFsbG9j IChzaXplb2YgKHN0cnVjdCBleHRyYWN0aW9uKSk7DQotDQotICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQ0KLSAgICB7DQotICAgICAgIHAtPmFbaV0gPSBh W2ldOw0KLSAgICAgICBpZiAoZm9vID09IDEzNSkNCi0JIGFib3J0ICgpOyAv KiB0byBhdm9pZCB2ZWN0b3JpemF0aW9uICAqLw0KLSAgICB9DQotDQotICAv KiBOb3QgdmVjdG9yaXphYmxlOiBkaXN0YW5jZSAxLiAgKi8NCi0gIGZvciAo aSA9IDA7IGkgPCBOIC0gMTsgaSsrKQ0KLSAgICB7DQotICAgICAgIHAtPmFb eCArIGldID0gcC0+YVt4ICsgaSArIDFdOw0KLSAgICB9DQotDQotICAvKiBj aGVjayByZXN1bHRzOiAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkrKykN Ci0gICAgew0KLSAgICAgICBpZiAocC0+YVtpXSAhPSBiW2ldKQ0KLSAgICAg ICAgIGFib3J0KCk7DQotICAgIH0NCi0gIHJldHVybiAwOw0KLX0NCi0NCi1p bnQgbWFpbiAodm9pZCkNCi17IA0KLSAgY2hlY2tfdmVjdCAoKTsNCi0NCi0g IGZvbyA9IDA7DQotICByZXR1cm4gbWFpbjEgKDAsIE4pOw0KLX0NCi0NCi0v KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6 ZWQgMSBsb29wcyIgMCAidmVjdCIgfSB9ICovDQotLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJwb3NzaWJsZSBkZXBlbmRlbmNlIGJl dHdlZW4gZGF0YS1yZWZzIiAxICJ2ZWN0IiB9IH0gKi8NCi0vKiB7IGRnLWZp bmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KLQ0KSW5k ZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNDUu Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNDUuYwkocmV2aXNpb24gMCkNCisr KyBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12ZWN0LTQ1LmMJ KHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDU5IEBADQorLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovDQorDQorI2lu Y2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCisN CisjZGVmaW5lIE4gMjU2DQorDQordm9pZCBiYXIgKGNvbnN0IGZsb2F0ICpw YSwgY29uc3QgZmxvYXQgKnBiLCBjb25zdCBmbG9hdCAqcGMpIA0KK3sNCisg IGludCBpOw0KKw0KKyAgLyogY2hlY2sgcmVzdWx0czogICovDQorICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgaWYgKHBhW2ld ICE9IChwYltpXSAqIHBjW2ldKSkNCisJYWJvcnQgKCk7DQorICAgIH0NCisN CisgIHJldHVybjsNCit9DQorDQorLyogVW5hbGlnbmVkIHBvaW50ZXIgYWNj ZXNzZXMsIHdpdGggdW5rbm93biBhbGlnbm1lbnQuDQorICAgVGhlIGxvb3Ag Ym91bmQgaXMga25vd24gYW5kIGRpdmlzaWJsZSBieSB0aGUgdmVjdG9yaXph dGlvbiBmYWN0b3IuDQorICAgQ2FuJ3QgcHJvdmUgdGhhdCB0aGUgcG9pbnRl cnMgZG9uJ3QgYWxpYXMuDQorICAgdmVjdC01MS5jIGlzIHNpbWlsYXIgdG8g dGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCisgICAgICAgIHRoZSBs b29wIGJvdW5kIGlzIHVua25vd24uDQorICAgdmVjdC00NC5jIGlzIHNpbWls YXIgdG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCisgICAgICAg IEFsaWFzaW5nIGlzIG5vdCBhIHByb2JsZW0uICAqLw0KKw0KK2ludA0KK21h aW4xIChmbG9hdCAqcGEsIGZsb2F0ICpwYiwgZmxvYXQgKnBjKQ0KK3sNCisg IGludCBpOw0KKw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCisgICAg ew0KKyAgICAgIHBhW2ldID0gcGJbaV0gKiBwY1tpXTsNCisgICAgfQ0KKw0K KyAgYmFyIChwYSxwYixwYyk7DQorDQorICByZXR1cm4gMDsNCit9DQorDQor aW50IG1haW4gKHZvaWQpDQorew0KKyAgaW50IGk7DQorICBmbG9hdCBhW05d Ow0KKyAgZmxvYXQgYltOXSA9IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0LDI3 LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3fTsNCisgIGZsb2F0IGNb Tl0gPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwx NiwxNywxOCwxOX07DQorDQorICBjaGVja192ZWN0ICgpOw0KKw0KKyAgbWFp bjEgKGEsYixjKTsNCisgIHJldHVybiAwOw0KK30NCisNCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29w cyIgMSAidmVjdCIgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLw0KKy8qIHsgZGct ZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICovDQpJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVjdC0zNy5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC9uby12ZmEtdmVjdC0zNy5jCShyZXZpc2lvbiAwKQ0KKysr IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtMzcuYwko cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNjEgQEANCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQorDQorI2luY2x1 ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCisNCisj ZGVmaW5lIE4gMTYNCitjaGFyIHhbTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxp Z25lZF9fKDE2KSkpOw0KKyANCitpbnQgbWFpbjEgKGNoYXIgKnkpDQoreyAg DQorICBzdHJ1Y3Qgew0KKyAgICBjaGFyICpwOw0KKyAgICBjaGFyICpxOw0K KyAgfSBzOw0KKyAgY2hhciBjYltOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGln bmVkX18oMTYpKSkgPSB7MCwzLDYsOSwxMiwxNSwxOCwyMSwyNCwyNywzMCwz MywzNiwzOSw0Miw0NX07DQorICBpbnQgaTsNCisNCisgIC8qIE5vdCB2ZWN0 b3JpemVkIC0gY2FuJ3QgYW50aWFsaWFzIHRoZSBwb2ludGVyIHMucCBmcm9t IHRoZSBhcnJheSBjYi4gICovDQorICBzLnAgPSB5Ow0KKyAgZm9yIChpID0g MDsgaSA8IE47IGkrKykNCisgICAgew0KKyAgICAgIHMucFtpXSA9IGNiW2ld Ow0KKyAgICB9DQorDQorICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZv ciAoaSA9IDA7IGkgPCBOOyBpKyspDQorICAgIHsNCisgICAgICBpZiAocy5w W2ldICE9IGNiW2ldKQ0KKyAgICAgICAgYWJvcnQgKCk7DQorICAgIH0NCisN CisgIC8qIE5vdCB2ZWN0b3JpemVkIC0gY2FuJ3QgYW50aWFsaWFzIHRoZSBw b2ludGVyIHMucCBmcm9tIHRoZSBwb2ludGVyIHMucS4gICovDQorICBzLnEg PSBjYjsNCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQorICAgIHsNCisg ICAgICBzLnBbaV0gPSBzLnFbaV07DQorICAgIH0NCisNCisgIC8qIGNoZWNr IHJlc3VsdHM6ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCisg ICAgew0KKyAgICAgIGlmIChzLnBbaV0gIT0gcy5xW2ldKQ0KKyAgICAgICAg YWJvcnQgKCk7DQorICAgIH0NCisNCisgIHJldHVybiAwOw0KK30NCisNCitp bnQgbWFpbiAodm9pZCkNCit7IA0KKyAgY2hlY2tfdmVjdCAoKTsNCisgIA0K KyAgcmV0dXJuIG1haW4xICh4KTsNCit9IA0KKw0KKy8qIEN1cnJlbnRseSB0 aGUgbG9vcHMgZmFpbCB0byB2ZWN0b3JpemUgZHVlIHRvIGFsaWFzaW5nIHBy b2JsZW1zLg0KKyAgIElmL3doZW4gdGhlIGFsaWFzaW5nIHByb2JsZW1zIGFy ZSByZXNvbHZlZCwgdW5hbGlnbm1lbnQgbWF5DQorICAgcHJldmVudCB2ZWN0 b3JpemF0aW9uIG9uIHNvbWUgdGFyZ2V0cy4gICovDQorLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDIgbG9vcHMi IDEgInZlY3QiIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8NCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImNhbid0IGRldGVybWluZSBk ZXBlbmRlbmNlIGJldHdlZW4iIDIgInZlY3QiIH0gfSAqLw0KKy8qIHsgZGct ZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICovDQpJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVjdC03OS5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC9uby12ZmEtdmVjdC03OS5jCShyZXZpc2lvbiAwKQ0KKysr IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNzkuYwko cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNTAgQEANCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCisNCisjaW5j bHVkZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0K KyNkZWZpbmUgTiAxNg0KKw0KK2Zsb2F0IGZhW05dIF9fYXR0cmlidXRlX18g KChfX2FsaWduZWRfXygxNikpKTsNCitmbG9hdCBmYltOKzRdIF9fYXR0cmli dXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLjAsIDEuMCwgMi4wLCAz LjAsIDQuMCwgNS4wLCA3LjAsIDkuMCwgMTAuMCwgMTEuMCwgMTIuMCwgMTMu MCwgMTQuMCwgMTUuMCwgMTYuMCwgMTcuMCwgMTguMCwgMTkuMH07DQorZmxv YXQgZmNbTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpID0g ezAuNSwgMS41LCAyLjUsIDMuNSwgNC41LCA1LjUsIDcuNSwgOS41LCAxMC41 LCAxMS41LCAxMi41LCAxMy41LCAxNC41LCAxNS41fTsNCisNCisvKiBMaWtl IHZlY3QtODAuYyBidXQgdGhlIHBvaW50ZXJzIGFyZSBub3QgYW5ub3RhdGVk IGFzIHJlc3RyaWN0ZWQsDQorICAgYW5kIHRoZXJlZm9yZSBjYW4ndCBiZSBh bnRpYWxpYXNlZC4gICovDQorDQoraW50DQorbWFpbjEgKGZsb2F0ICpwYSwg ZmxvYXQgKnBiLCBmbG9hdCAqcGMpDQorew0KKyAgaW50IGk7DQorICBmbG9h dCAqcSA9IHBiICsgNDsNCisNCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKysp DQorICAgIHsNCisgICAgICBwYVtpXSA9IHFbaV0gKiBwY1tpXTsNCisgICAg fQ0KKw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCisgICAgew0KKyAg ICAgIGlmIChwYVtpXSAhPSBxW2ldICogcGNbaV0pDQorCWFib3J0KCk7DQor ICAgIH0NCisgIA0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KKw0KK2ludCBtYWlu ICh2b2lkKQ0KK3sgDQorICBjaGVja192ZWN0ICgpOw0KKw0KKyAgbWFpbjEg KGZhLCBmYiwgZmMpOw0KKw0KKyAgcmV0dXJuIDA7CQ0KK30NCisNCisvKiBD dXJyZW50bHkgdGhlIGxvb3BzIGZhaWwgdG8gdmVjdG9yaXplIGR1ZSB0byBh bGlhc2luZyBwcm9ibGVtcy4NCisgIElmL3doZW4gdGhlIGFsaWFzaW5nIHBy b2JsZW1zIGFyZSByZXNvbHZlZCwgdW5hbGlnbm1lbnQgbWF5DQorICBwcmV2 ZW50IHZlY3Rvcml6YXRpb24gb24gc29tZSB0YXJnZXRzLiAgKi8NCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQg MSBsb29wcyIgMSAidmVjdCIgIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8NCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImNhbid0IGRl dGVybWluZSBkZXBlbmRlbmNlIGJldHdlZW4iIDEgInZlY3QiIH0gfSAqLw0K Ky8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9 ICovDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTUx LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtNTEuYwkocmV2aXNpb24gMTI3MzE2KQ0KKysr IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC01MS5jCSh3b3JraW5n IGNvcHkpDQpAQCAtMSw1OSArMCwwIEBADQotLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovDQotDQotI2luY2x1ZGUg PHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCi0NCi0jZGVm aW5lIE4gMjU2DQotDQotdm9pZCBiYXIgKGNvbnN0IGZsb2F0ICpwYSwgY29u c3QgZmxvYXQgKnBiLCBjb25zdCBmbG9hdCAqcGMpIA0KLXsNCi0gIGludCBp Ow0KLQ0KLSAgLyogY2hlY2sgcmVzdWx0czogICovDQotICBmb3IgKGkgPSAw OyBpIDwgTjsgaSsrKQ0KLSAgICB7DQotICAgICAgaWYgKHBhW2ldICE9IChw YltpXSAqIHBjW2ldKSkNCi0JYWJvcnQgKCk7DQotICAgIH0NCi0NCi0gIHJl dHVybjsNCi19DQotDQotLyogVW5hbGlnbmVkIHBvaW50ZXIgYWNjZXNzZXMs IHdpdGggdW5rbm93biBhbGlnbm1lbnQuDQotICAgVGhlIGxvb3AgYm91bmQg aXMgdW5rbm93bi4NCi0gICBDYW4ndCBwcm92ZSB0aGF0IHRoZSBwb2ludGVy cyBkb24ndCBhbGlhcy4NCi0gICB2ZWN0LTQ1LmMgaXMgc2ltaWxhciB0byB0 aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KLSAgICAgICAgdGhlIGxv b3AgYm91bmQgaXMga25vd24uDQotICAgdmVjdC01MC5jIGlzIHNpbWlsYXIg dG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCi0gICAgICAgIEFs aWFzaW5nIGlzIG5vdCBhIHByb2JsZW0uICAqLw0KLQ0KLWludA0KLW1haW4x IChpbnQgbiwgZmxvYXQgKnBhLCBmbG9hdCAqcGIsIGZsb2F0ICpwYykNCi17 DQotICBpbnQgaTsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspDQot ICAgIHsNCi0gICAgICBwYVtpXSA9IHBiW2ldICogcGNbaV07DQotICAgIH0N Ci0NCi0gIGJhciAocGEscGIscGMpOw0KLQ0KLSAgcmV0dXJuIDA7DQotfQ0K LQ0KLWludCBtYWluICh2b2lkKQ0KLXsNCi0gIGludCBpOw0KLSAgZmxvYXQg YVtOXTsNCi0gIGZsb2F0IGJbTl0gPSB7MCwzLDYsOSwxMiwxNSwxOCwyMSwy NCwyNywzMCwzMywzNiwzOSw0Miw0NSw0OCw1MSw1NCw1N307DQotICBmbG9h dCBjW05dID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQs MTUsMTYsMTcsMTgsMTl9Ow0KLQ0KLSAgY2hlY2tfdmVjdCAoKTsNCi0NCi0g IG1haW4xIChOLGEsYixjKTsNCi0gIHJldHVybiAwOw0KLX0NCi0NCi0vKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQg MSBsb29wcyIgMSAidmVjdCIgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLw0KLS8q IHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICov DQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9wcjI5MTQ1LmMN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ByMjkxNDUuYwkocmV2aXNpb24gMTI3MzE2KQ0KKysrIGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvcHIyOTE0NS5jCSh3b3JraW5nIGNv cHkpDQpAQCAtMSw0OCArMCwwIEBADQotLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KLQ0KLSNpbmNsdWRlIDxzdGRh cmcuaD4NCi0jaW5jbHVkZSAidHJlZS12ZWN0LmgiDQotDQotdm9pZCB3aXRo X3Jlc3RyaWN0KGludCAqIF9fcmVzdHJpY3QgcCkNCi17DQotICBpbnQgaTsN Ci0gIGludCAqcSA9IHAgLSAyOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IDEw MDA7ICsraSkgew0KLSAgICBwW2ldID0gcVtpXTsNCi0gIH0NCi19DQotDQot dm9pZCB3aXRob3V0X3Jlc3RyaWN0KGludCAqIHApDQotew0KLSAgaW50IGk7 DQotICBpbnQgKnEgPSBwIC0gMjsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCAx MDAwOyArK2kpIHsNCi0gICAgcFtpXSA9IHFbaV07DQotICB9DQotfQ0KLQ0K LWludCBtYWluKHZvaWQpDQotew0KLSAgaW50IGk7DQotICBpbnQgYVsxMDAy XTsNCi0gIGludCBiWzEwMDJdOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IDEw MDI7ICsraSkgew0KLSAgICBhW2ldID0gYltpXSA9IGk7DQotICB9DQotDQot ICB3aXRoX3Jlc3RyaWN0KGEgKyAyKTsNCi0gIHdpdGhvdXRfcmVzdHJpY3Qo YiArIDIpOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IDEwMDI7ICsraSkgew0K LSAgICBpZiAoYVtpXSAhPSBiW2ldKQ0KLSAgICAgIGFib3J0KCk7DQotICB9 DQotICByZXR1cm4gMDsNCi19DQotDQotLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDAgbG9vcHMiIDIgInZlY3Qi ICB9IH0gKi8NCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgIH0gfSAqLw0KLS8q IHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICov DQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVj dC0xMDJhLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12ZWN0LTEwMmEuYwkocmV2aXNp b24gMCkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12 ZWN0LTEwMmEuYwkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNTcgQEANCisv KiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICov DQorDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxzdGRhcmcu aD4NCisjaW5jbHVkZSAidHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDkN CisNCitzdHJ1Y3QgZXh0cmFjdGlvbg0KK3sNCisgIGludCBhW05dOw0KKyAg aW50IGJbTl07DQorfTsNCisNCitzdGF0aWMgaW50IGFbTl0gPSB7MSwyLDMs NCw1LDYsNyw4LDl9Ow0KK3N0YXRpYyBpbnQgYltOXSA9IHsyLDMsNCw1LDYs Nyw4LDksOX07DQordm9sYXRpbGUgaW50IGZvbzsNCisNCitpbnQgbWFpbjEg KGludCB4LCBpbnQgeSkgew0KKyAgaW50IGk7DQorICBzdHJ1Y3QgZXh0cmFj dGlvbiAqcDsNCisgIHAgPSAoc3RydWN0IGV4dHJhY3Rpb24gKikgbWFsbG9j IChzaXplb2YgKHN0cnVjdCBleHRyYWN0aW9uKSk7DQorDQorICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgIHAtPmFbaV0gPSBh W2ldOw0KKyAgICAgICBpZiAoZm9vID09IDEzNSkNCisJIGFib3J0ICgpOyAv KiB0byBhdm9pZCB2ZWN0b3JpemF0aW9uICAqLw0KKyAgICB9DQorDQorICAv KiBOb3QgdmVjdG9yaXphYmxlOiBkaXN0YW5jZSAxLiAgKi8NCisgIGZvciAo aSA9IDA7IGkgPCBOIC0gMTsgaSsrKQ0KKyAgICB7DQorICAgICAgIHAtPmFb eCArIGldID0gcC0+YVt4ICsgaSArIDFdOw0KKyAgICB9DQorDQorICAvKiBj aGVjayByZXN1bHRzOiAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykN CisgICAgew0KKyAgICAgICBpZiAocC0+YVtpXSAhPSBiW2ldKQ0KKyAgICAg ICAgIGFib3J0KCk7DQorICAgIH0NCisgIHJldHVybiAwOw0KK30NCisNCitp bnQgbWFpbiAodm9pZCkNCit7IA0KKyAgY2hlY2tfdmVjdCAoKTsNCisNCisg IGZvbyA9IDA7DQorICByZXR1cm4gbWFpbjEgKDAsIE4pOw0KK30NCisNCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6 ZWQgMSBsb29wcyIgMCAidmVjdCIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJwb3NzaWJsZSBkZXBlbmRlbmNlIGJl dHdlZW4gZGF0YS1yZWZzIiAxICJ2ZWN0IiB9IH0gKi8NCisvKiB7IGRnLWZp bmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KKw0KSW5k ZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC00My5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LTQzLmMJKHJldmlzaW9uIDEyNzMxNikNCisrKyBnY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtNDMuYwkod29ya2luZyBjb3B5KQ0K QEAgLTEsNzggKzAsMCBAQA0KLS8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfZmxvYXQgfSAqLw0KLQ0KLSNpbmNsdWRlIDxzdGRhcmcu aD4NCi0jaW5jbHVkZSAidHJlZS12ZWN0LmgiDQotDQotI2RlZmluZSBOIDI1 Ng0KLQ0KLXZvaWQgYmFyIChmbG9hdCAqcGEsIGZsb2F0ICpwYiwgZmxvYXQg KnBjKSANCi17DQotICBpbnQgaTsNCi0NCi0gIC8qIGNoZWNrIHJlc3VsdHM6 ICAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCi0gICAgew0KLSAg ICAgIGlmIChwYVtpXSAhPSAocGJbaV0gKiBwY1tpXSkpDQotCWFib3J0ICgp Ow0KLSAgICB9DQotDQotICByZXR1cm47DQotfQ0KLQ0KLQ0KLWludA0KLW1h aW4xIChmbG9hdCAqcGEpDQotew0KLSAgaW50IGk7DQotICBmbG9hdCBwYltO XSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSkgPSB7MCwzLDYs OSwxMiwxNSwxOCwyMSwyNCwyNywzMCwzMywzNiwzOSw0Miw0NSw0OCw1MSw1 NCw1N307DQotICBmbG9hdCBwY1tOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGln bmVkX18oMTYpKSkgPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwx MywxNCwxNSwxNiwxNywxOCwxOX07DQotDQotIC8qIE5vdCB2ZWN0b3JpemFi bGU6IHBhIG1heSBhbGlhcyBwYiBhbmQvb3IgcGMsIHNpbmNlIHRoZWlyIGFk ZHJlc3NlcyBlc2NhcGUuICAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkr KykNCi0gICAgew0KLSAgICAgIHBhW2ldID0gcGJbaV0gKiBwY1tpXTsNCi0g ICAgfQ0KLQ0KLSAgYmFyIChwYSxwYixwYyk7DQotDQotICByZXR1cm4gMDsN Ci19DQotDQotaW50DQotbWFpbjIgKGZsb2F0ICogcGEpDQotew0KLSAgaW50 IGk7DQotICBmbG9hdCBwYltOXSA9IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0 LDI3LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3fTsNCi0gIGZsb2F0 IHBjW05dID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQs MTUsMTYsMTcsMTgsMTl9Ow0KLQ0KLSAgLyogVmVjdG9yaXphYmxlOiBwYiBh bmQgcGMgYWRkcmVzc2VzIGRvIG5vdCBlc2NhcGUuICAqLw0KLSAgZm9yIChp ID0gMDsgaSA8IE47IGkrKykNCi0gICAgew0KLSAgICAgIHBhW2ldID0gcGJb aV0gKiBwY1tpXTsNCi0gICAgfSAgIA0KLSAgDQotICAvKiBjaGVjayByZXN1 bHRzOiAgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQotICAgIHsN Ci0gICAgICBpZiAocGFbaV0gIT0gKHBiW2ldICogcGNbaV0pKQ0KLSAgICAg ICAgYWJvcnQgKCk7DQotICAgIH0NCi0gIA0KLSAgcmV0dXJuIDA7DQotfQ0K LQ0KLWludCBtYWluICh2b2lkKQ0KLXsNCi0gIGludCBpOw0KLSAgZmxvYXQg YVtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSk7DQotDQot ICBjaGVja192ZWN0ICgpOw0KLQ0KLSAgbWFpbjEgKGEpOw0KLSAgbWFpbjIg KGEpOw0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KLS8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2 ZWN0IiB9IH0gKi8NCi0vKiAgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJBbGlnbm1lbnQgb2YgYWNjZXNzIGZvcmNlZCB1c2luZyB2ZXJz aW9uaW5nIiAxICJ2ZWN0IiB7IHRhcmdldCB2ZWN0X25vX2FsaWduIH0gfSB9 ICovDQotLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0 IiB9IH0gKi8NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L25v LXZmYS12ZWN0LTEwMS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVjdC0xMDEuYwko cmV2aXNpb24gMCkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L25v LXZmYS12ZWN0LTEwMS5jCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw0OSBA QA0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50 IH0gKi8NCisNCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0 ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCisNCisjZGVmaW5l IE4gOQ0KKw0KK3N0cnVjdCBleHRyYWN0aW9uDQorew0KKyAgaW50IGFbTl07 DQorICBpbnQgYltOXTsNCit9Ow0KKw0KK3N0YXRpYyBpbnQgYVtOXSA9IHsx LDIsMyw0LDUsNiw3LDgsOX07DQorc3RhdGljIGludCBiW05dID0gezIsMyw0 LDUsNiw3LDgsOSwwfTsNCisNCitpbnQgbWFpbjEgKGludCB4LCBpbnQgeSkg ew0KKyAgaW50IGk7DQorICBzdHJ1Y3QgZXh0cmFjdGlvbiAqcDsNCisgIHAg PSAoc3RydWN0IGV4dHJhY3Rpb24gKikgbWFsbG9jIChzaXplb2YgKHN0cnVj dCBleHRyYWN0aW9uKSk7DQorDQorICAvKiBOb3QgdmVjdG9yaXphYmxlOiBk aWZmZXJlbnQgdW5rbm93biBvZmZzZXQuICAqLw0KKyAgZm9yIChpID0gMDsg aSA8IE47IGkrKykNCisgICAgew0KKyAgICAgICooKGludCAqKXAgKyB4ICsg aSkgPSBhW2ldOw0KKyAgICAgICooKGludCAqKXAgKyB5ICsgaSkgPSBiW2ld Ow0KKyAgICB9DQorDQorICAvKiBjaGVjayByZXN1bHRzOiAqLw0KKyAgZm9y IChpID0gMDsgaSA8IE47IGkrKykNCisgICAgew0KKyAgICAgICBpZiAocC0+ YVtpXSAhPSBhW2ldIHx8IHAtPmJbaV0gIT0gYltpXSkNCisgICAgICAgICBh Ym9ydCgpOw0KKyAgICB9DQorICByZXR1cm4gMDsNCit9DQorDQoraW50IG1h aW4gKHZvaWQpDQoreyANCisgIGNoZWNrX3ZlY3QgKCk7DQorDQorICByZXR1 cm4gbWFpbjEgKDAsIE4pOw0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMCAidmVj dCIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJjYW4ndCBkZXRlcm1pbmUgZGVwZW5kZW5jZSIgMSAidmVjdCIgfSB9 ICovDQorLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0 IiB9IH0gKi8NCisNCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtNjEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC02MS5jCShyZXZpc2lvbiAxMjcz MTYpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTYxLmMJ KHdvcmtpbmcgY29weSkNCkBAIC0xLDY0ICswLDAgQEANCi0vKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQotLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovDQot DQotI2luY2x1ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0cmVlLXZlY3Qu aCINCi0NCi0jZGVmaW5lIE4gMjU2DQotDQotdm9pZCBiYXIgKGZsb2F0ICpw YSwgZmxvYXQgKnBiLCBmbG9hdCAqcGMpDQotew0KLSAgaW50IGk7DQotDQot ICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCBO LzI7IGkrKykNCi0gICAgew0KLSAgICAgIGlmIChwYVtpXSAhPSAocGJbaSsx XSAqIHBjW2krMV0pKQ0KLQlhYm9ydCAoKTsNCi0gICAgfQ0KLQ0KLSAgcmV0 dXJuOw0KLX0NCi0NCi0vKiBVbmFsaWduZWQgcG9pbnRlciByZWFkIGFjY2Vz c2VzIHdpdGgga25vd24gYWxpZ25tZW50LA0KLSAgIGFuZCBhbiB1bmFsaWdu ZWQgd3JpdGUgYWNjZXNzIHdpdGggdW5rbm93biBhbGlnbm1lbnQuDQotICAg VGhlIGxvb3AgYm91bmQgaXMgaXVua25vd24uDQotICAgQ2FuJ3QgcHJvdmUg dGhhdCB0aGUgcG9pbnRlcnMgZG9uJ3QgYWxpYXMuDQotICAgdmVjdC01Ny5j IGlzIHNpbWlsYXIgdG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToN Ci0gICAgICAgIHRoZSBsb29wIGJvdW5kIGlzIGtub3duLg0KLSAgIHZlY3Qt NjAuYyBpcyBzaW1pbGFyIHRvIHRoaXMgb25lIHdpdGggdHdvIGRpZmZlcmVu Y2VzOg0KLSAgICAgICAgYWxpYXNpbmcgaXMgbm90IGEgcHJvYmxlbSwgYW5k IHRoZSB3cml0ZSBhY2Nlc3MgaXMgdW5hbGlnbmVkLiAgKi8NCi0NCi1pbnQN Ci1tYWluMSAoaW50IG4gLCBmbG9hdCAqcGEpDQotew0KLSAgaW50IGk7DQot ICBmbG9hdCBiW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikp KSA9IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQy LDQ1LDQ4LDUxLDU0LDU3fTsNCi0gIGZsb2F0IGNbTl0gX19hdHRyaWJ1dGVf XyAoKF9fYWxpZ25lZF9fKDE2KSkpID0gezAsMSwyLDMsNCw1LDYsNyw4LDks MTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTl9Ow0KLSAgZmxvYXQgKnBi ID0gYjsNCi0gIGZsb2F0ICpwYyA9IGM7DQotDQotICBmb3IgKGkgPSAwOyBp IDwgbi8yOyBpKyspDQotICAgIHsNCi0gICAgICBwYVtpXSA9IHBiW2krMV0g KiBwY1tpKzFdOw0KLSAgICB9DQotDQotICBiYXIgKHBhLHBiLHBjKTsNCi0N Ci0gIHJldHVybiAwOw0KLX0NCi0NCi1pbnQgbWFpbiAodm9pZCkNCi17DQot ICBpbnQgaTsNCi0gIGludCBuPU47DQotICBmbG9hdCBhW05dIF9fYXR0cmli dXRlX18gKChfX2FsaWduZWRfXygxNikpKTsNCi0NCi0gIGNoZWNrX3ZlY3Qg KCk7DQotICBtYWluMSAobixhKTsNCi0NCi0gIHJldHVybiAwOw0KLX0NCi0N Ci0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rv cml6ZWQgMSBsb29wcyIgMSAidmVjdCIgeyB4ZmFpbCAqLSotKiB9IH0gfSAq Lw0KLS8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIg fSB9ICovDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LTUzLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtNTMuYwkocmV2aXNpb24gMTI3MzE2KQ0K KysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC01My5jCSh3b3Jr aW5nIGNvcHkpDQpAQCAtMSw2MiArMCwwIEBADQotLyogeyBkZy1yZXF1aXJl LWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovDQotDQotI2luY2x1 ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCi0NCi0j ZGVmaW5lIE4gMjU2DQotDQotdm9pZCBiYXIgKGNvbnN0IGZsb2F0ICpwYSwg Y29uc3QgZmxvYXQgKnBiLCBjb25zdCBmbG9hdCAqcGMpIA0KLXsNCi0gIGlu dCBpOw0KLQ0KLSAgLyogY2hlY2sgcmVzdWx0czogICovDQotICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQ0KLSAgICB7DQotICAgICAgaWYgKHBhW2ldICE9 IChwYltpXSAqIHBjW2ldKSkNCi0JYWJvcnQgKCk7DQotICAgIH0NCi0NCi0g IHJldHVybjsNCi19DQotDQotLyogVW5hbGlnbmVkIHBvaW50ZXIgcmVhZCBh Y2Nlc3NlcywgYWxpZ25lZCBwb2ludGVyIHdyaXRlIGFjY2Vzcy4NCi0gICBU aGUgbG9vcCBib3VuZCBpcyB1bmtub3duLg0KLSAgIENhbid0IHByb3ZlIHRo YXQgdGhlIHBvaW50ZXJzIGRvbid0IGFsaWFzLg0KLSAgIHZlY3QtNDkuYyBp cyBzaW1pbGFyIHRvIHRoaXMgb25lIHdpdGggb25lIGRpZmZlcmVuY2U6DQot ICAgICAgICB0aGUgbG9vcCBib3VuZCBpcyBrbm93bi4NCi0gICB2ZWN0LTUy LmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNl Og0KLSAgICAgICAgYWxpYXNpbmcgaXMgbm90IGEgcHJvYmxlbS4gICovDQot DQotaW50DQotbWFpbjEgKGludCBuLCBmbG9hdCAqcGIsIGZsb2F0ICpwYykN Ci17DQotICBmbG9hdCBwYVtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVk X18oMTYpKSk7DQotICBpbnQgaTsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBu OyBpKyspDQotICAgIHsNCi0gICAgICBwYVtpXSA9IHBiW2ldICogcGNbaV07 DQotICAgIH0NCi0NCi0gIGJhciAocGEscGIscGMpOw0KLQ0KLSAgcmV0dXJu IDA7DQotfQ0KLQ0KLWludCBtYWluICh2b2lkKQ0KLXsNCi0gIGludCBpOw0K LSAgZmxvYXQgYVtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYp KSk7DQotICBmbG9hdCBiW04rMV0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25l ZF9fKDE2KSkpID0gezAsMyw2LDksMTIsMTUsMTgsMjEsMjQsMjcsMzAsMzMs MzYsMzksNDIsNDUsNDgsNTEsNTQsNTcsNjB9Ow0KLSAgZmxvYXQgY1tOKzFd IF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLDEsMiwz LDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIw fTsNCi0NCi0gIGNoZWNrX3ZlY3QgKCk7DQotDQotICBtYWluMSAoTiwmYlsx XSxjKTsNCi0gIG1haW4xIChOLCZiWzFdLCZjWzFdKTsNCi0NCi0gIHJldHVy biAwOw0KLX0NCi0NCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgeyB4ZmFpbCAq LSotKiB9IH0gfSAqLw0KLS8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUt ZHVtcCAidmVjdCIgfSB9ICovDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC9uby12ZmEtdmVjdC0xMDIuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZl Y3QtMTAyLmMJKHJldmlzaW9uIDApDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC9uby12ZmEtdmVjdC0xMDIuYwkocmV2aXNpb24gMCkNCkBAIC0w LDAgKzEsNTcgQEANCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2ludCB9ICovDQorDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNp bmNsdWRlIDxzdGRhcmcuaD4NCisjaW5jbHVkZSAidHJlZS12ZWN0LmgiDQor DQorI2RlZmluZSBOIDkNCisNCitzdHJ1Y3QgZXh0cmFjdGlvbg0KK3sNCisg IGludCBhW05dOw0KKyAgaW50IGJbTl07DQorfTsNCisNCitzdGF0aWMgaW50 IGFbTl0gPSB7MSwyLDMsNCw1LDYsNyw4LDl9Ow0KK3N0YXRpYyBpbnQgYltO XSA9IHsyLDMsNCw1LDYsNyw4LDksOX07DQordm9sYXRpbGUgaW50IGZvbzsN CisNCitpbnQgbWFpbjEgKGludCB4LCBpbnQgeSkgew0KKyAgaW50IGk7DQor ICBzdHJ1Y3QgZXh0cmFjdGlvbiAqcDsNCisgIHAgPSAoc3RydWN0IGV4dHJh Y3Rpb24gKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBleHRyYWN0aW9uKSk7 DQorDQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAg ICAgIHAtPmFbaV0gPSBhW2ldOw0KKyAgICAgICBpZiAoZm9vID09IDEzNSkN CisJIGFib3J0ICgpOyAvKiB0byBhdm9pZCB2ZWN0b3JpemF0aW9uICAqLw0K KyAgICB9DQorDQorICAvKiBOb3QgdmVjdG9yaXphYmxlOiBkaXN0YW5jZSAx LiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCBOIC0gMTsgaSsrKQ0KKyAgICB7 DQorICAgICAgICooKGludCAqKXAgKyB4ICsgaSkgPSAqKChpbnQgKilwICsg eCArIGkgKyAxKTsNCisgICAgfQ0KKw0KKyAgLyogY2hlY2sgcmVzdWx0czog Ki8NCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQorICAgIHsNCisgICAg ICAgaWYgKHAtPmFbaV0gIT0gYltpXSkNCisgICAgICAgICBhYm9ydCgpOw0K KyAgICB9DQorICByZXR1cm4gMDsNCit9DQorDQoraW50IG1haW4gKHZvaWQp DQoreyANCisgIGNoZWNrX3ZlY3QgKCk7DQorDQorICBmb28gPSAwOw0KKyAg cmV0dXJuIG1haW4xICgwLCBOKTsNCit9DQorDQorLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDAg InZlY3QiIH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAicG9zc2libGUgZGVwZW5kZW5jZSBiZXR3ZWVuIGRhdGEtcmVm cyIgMSAidmVjdCIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IGNsZWFudXAt dHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCisNCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtNDUuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC00NS5j CShyZXZpc2lvbiAxMjczMTYpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LTQ1LmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDU5ICswLDAg QEANCi0vKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zs b2F0IH0gKi8NCi0NCi0jaW5jbHVkZSA8c3RkYXJnLmg+DQotI2luY2x1ZGUg InRyZWUtdmVjdC5oIg0KLQ0KLSNkZWZpbmUgTiAyNTYNCi0NCi12b2lkIGJh ciAoY29uc3QgZmxvYXQgKnBhLCBjb25zdCBmbG9hdCAqcGIsIGNvbnN0IGZs b2F0ICpwYykgDQotew0KLSAgaW50IGk7DQotDQotICAvKiBjaGVjayByZXN1 bHRzOiAgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQotICAgIHsN Ci0gICAgICBpZiAocGFbaV0gIT0gKHBiW2ldICogcGNbaV0pKQ0KLQlhYm9y dCAoKTsNCi0gICAgfQ0KLQ0KLSAgcmV0dXJuOw0KLX0NCi0NCi0vKiBVbmFs aWduZWQgcG9pbnRlciBhY2Nlc3Nlcywgd2l0aCB1bmtub3duIGFsaWdubWVu dC4NCi0gICBUaGUgbG9vcCBib3VuZCBpcyBrbm93biBhbmQgZGl2aXNpYmxl IGJ5IHRoZSB2ZWN0b3JpemF0aW9uIGZhY3Rvci4NCi0gICBDYW4ndCBwcm92 ZSB0aGF0IHRoZSBwb2ludGVycyBkb24ndCBhbGlhcy4NCi0gICB2ZWN0LTUx LmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNl Og0KLSAgICAgICAgdGhlIGxvb3AgYm91bmQgaXMgdW5rbm93bi4NCi0gICB2 ZWN0LTQ0LmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZm ZXJlbmNlOg0KLSAgICAgICAgQWxpYXNpbmcgaXMgbm90IGEgcHJvYmxlbS4g ICovDQotDQotaW50DQotbWFpbjEgKGZsb2F0ICpwYSwgZmxvYXQgKnBiLCBm bG9hdCAqcGMpDQotew0KLSAgaW50IGk7DQotDQotICBmb3IgKGkgPSAwOyBp IDwgTjsgaSsrKQ0KLSAgICB7DQotICAgICAgcGFbaV0gPSBwYltpXSAqIHBj W2ldOw0KLSAgICB9DQotDQotICBiYXIgKHBhLHBiLHBjKTsNCi0NCi0gIHJl dHVybiAwOw0KLX0NCi0NCi1pbnQgbWFpbiAodm9pZCkNCi17DQotICBpbnQg aTsNCi0gIGZsb2F0IGFbTl07DQotICBmbG9hdCBiW05dID0gezAsMyw2LDks MTIsMTUsMTgsMjEsMjQsMjcsMzAsMzMsMzYsMzksNDIsNDUsNDgsNTEsNTQs NTd9Ow0KLSAgZmxvYXQgY1tOXSA9IHswLDEsMiwzLDQsNSw2LDcsOCw5LDEw LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5fTsNCi0NCi0gIGNoZWNrX3Zl Y3QgKCk7DQotDQotICBtYWluMSAoYSxiLGMpOw0KLSAgcmV0dXJuIDA7DQot fQ0KLQ0KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi dmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB7IHhmYWlsICotKi0qIH0g fSB9ICovDQotLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2 ZWN0IiB9IH0gKi8NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtMTAxLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtMTAxLmMJKHJldmlzaW9uIDEy NzMxNikNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtMTAx LmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDQ5ICswLDAgQEANCi0vKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQotDQot I2luY2x1ZGUgPHN0ZGxpYi5oPg0KLSNpbmNsdWRlIDxzdGRhcmcuaD4NCi0j aW5jbHVkZSAidHJlZS12ZWN0LmgiDQotDQotI2RlZmluZSBOIDkNCi0NCi1z dHJ1Y3QgZXh0cmFjdGlvbg0KLXsNCi0gIGludCBhW05dOw0KLSAgaW50IGJb Tl07DQotfTsNCi0NCi1zdGF0aWMgaW50IGFbTl0gPSB7MSwyLDMsNCw1LDYs Nyw4LDl9Ow0KLXN0YXRpYyBpbnQgYltOXSA9IHsyLDMsNCw1LDYsNyw4LDks MH07DQotDQotaW50IG1haW4xIChpbnQgeCwgaW50IHkpIHsNCi0gIGludCBp Ow0KLSAgc3RydWN0IGV4dHJhY3Rpb24gKnA7DQotICBwID0gKHN0cnVjdCBl eHRyYWN0aW9uICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZXh0cmFjdGlv bikpOw0KLQ0KLSAgLyogTm90IHZlY3Rvcml6YWJsZTogZGlmZmVyZW50IHVu a25vd24gb2Zmc2V0LiAgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKysp DQotICAgIHsNCi0gICAgICAqKChpbnQgKilwICsgeCArIGkpID0gYVtpXTsN Ci0gICAgICAqKChpbnQgKilwICsgeSArIGkpID0gYltpXTsNCi0gICAgfQ0K LQ0KLSAgLyogY2hlY2sgcmVzdWx0czogKi8NCi0gIGZvciAoaSA9IDA7IGkg PCBOOyBpKyspDQotICAgIHsNCi0gICAgICAgaWYgKHAtPmFbaV0gIT0gYVtp XSB8fCBwLT5iW2ldICE9IGJbaV0pDQotICAgICAgICAgYWJvcnQoKTsNCi0g ICAgfQ0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBtYWluICh2b2lkKQ0K LXsgDQotICBjaGVja192ZWN0ICgpOw0KLQ0KLSAgcmV0dXJuIG1haW4xICgw LCBOKTsNCi19DQotDQotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDAgInZlY3QiIH0gfSAqLw0K LS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiY2FuJ3Qg ZGV0ZXJtaW5lIGRlcGVuZGVuY2UiIDEgInZlY3QiIH0gfSAqLw0KLS8qIHsg ZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICovDQot DQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVj dC01Ny5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVjdC01Ny5jCShyZXZpc2lvbiAw KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3Qt NTcuYwkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNjIgQEANCisvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCisN CisjaW5jbHVkZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5o Ig0KKw0KKyNkZWZpbmUgTiAyNTYNCisNCit2b2lkIGJhciAoZmxvYXQgKnBh LCBmbG9hdCAqcGIsIGZsb2F0ICpwYykNCit7DQorICBpbnQgaTsNCisNCisg IC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE4v MjsgaSsrKQ0KKyAgICB7DQorICAgICAgaWYgKHBhW2ldICE9IChwYltpKzFd ICogcGNbaSsxXSkpDQorICAgICAgICBhYm9ydCAoKTsNCisgICAgfQ0KKw0K KyAgcmV0dXJuOw0KK30NCisNCisvKiBVbmFsaWduZWQgcG9pbnRlciByZWFk IGFjY2Vzc2VzIHdpdGgga25vd24gYWxpZ25tZW50LA0KKyAgIGFuZCBhbiB1 bmFsaWduZWQgd3JpdGUgYWNjZXNzIHdpdGggdW5rbm93biBhbGlnbm1lbnQu DQorICAgVGhlIGxvb3AgYm91bmQgaXMga25vd24gYW5kIGRpdmlzaWJsZSBi eSB0aGUgdmVjdG9yaXphdGlvbiBmYWN0b3IuDQorICAgQ2FuJ3QgcHJvdmUg dGhhdCB0aGUgcG9pbnRlcnMgZG9uJ3QgYWxpYXMuDQorICAgdmVjdC02MS5j IGlzIHNpbWlsYXIgdG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToN CisgICAgICAgIHRoZSBsb29wIGJvdW5kIGlzIHVua25vd24uDQorICAgdmVj dC01Ni5jIGlzIHNpbWlsYXIgdG8gdGhpcyBvbmUgd2l0aCB0d28gZGlmZmVy ZW5jZXM6DQorICAgICAgICBhbGlhc2luZyBpcyBhIHByb2JsZW0sIGFuZCB0 aGUgd3JpdGUgYWNjZXNzIGlzIGFsaWduZWQuICAqLw0KKw0KK2ludA0KK21h aW4xIChmbG9hdCAqcGEpDQorew0KKyAgaW50IGk7DQorICBmbG9hdCBiW05d IF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLDMsNiw5 LDEyLDE1LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUxLDU0 LDU3fTsNCisgIGZsb2F0IGNbTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25l ZF9fKDE2KSkpID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMs MTQsMTUsMTYsMTcsMTgsMTl9Ow0KKyAgZmxvYXQgKnBiID0gYjsNCisgIGZs b2F0ICpwYyA9IGM7DQorDQorICBmb3IgKGkgPSAwOyBpIDwgTi8yOyBpKysp DQorICAgIHsNCisgICAgICBwYVtpXSA9IHBiW2krMV0gKiBwY1tpKzFdOw0K KyAgICB9DQorDQorICBiYXIgKHBhLCBwYiwgcGMpOw0KKw0KKyAgcmV0dXJu IDA7DQorfQ0KKw0KK2ludCBtYWluICh2b2lkKQ0KK3sNCisgIGludCBpOw0K KyAgZmxvYXQgYVtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYp KSk7DQorDQorICBjaGVja192ZWN0ICgpOw0KKyAgbWFpbjEgKGEpOw0KKw0K KyAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB7 IHhmYWlsICotKi0qIH0gfSB9ICovDQorLyogeyBkZy1maW5hbCB7IGNsZWFu dXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtMzcuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC0zNy5j CShyZXZpc2lvbiAxMjczMTYpDQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LTM3LmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDYxICswLDAg QEANCi0vKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2lu dCB9ICovDQotDQotI2luY2x1ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0 cmVlLXZlY3QuaCINCi0NCi0jZGVmaW5lIE4gMTYNCi1jaGFyIHhbTl0gX19h dHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpOw0KLSANCi1pbnQgbWFp bjEgKGNoYXIgKnkpDQoteyAgDQotICBzdHJ1Y3Qgew0KLSAgICBjaGFyICpw Ow0KLSAgICBjaGFyICpxOw0KLSAgfSBzOw0KLSAgY2hhciBjYltOXSBfX2F0 dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSkgPSB7MCwzLDYsOSwxMiwx NSwxOCwyMSwyNCwyNywzMCwzMywzNiwzOSw0Miw0NX07DQotICBpbnQgaTsN Ci0NCi0gIC8qIE5vdCB2ZWN0b3JpemVkIC0gY2FuJ3QgYW50aWFsaWFzIHRo ZSBwb2ludGVyIHMucCBmcm9tIHRoZSBhcnJheSBjYi4gICovDQotICBzLnAg PSB5Ow0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCi0gICAgew0KLSAg ICAgIHMucFtpXSA9IGNiW2ldOw0KLSAgICB9DQotDQotICAvKiBjaGVjayBy ZXN1bHRzOiAgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQotICAg IHsNCi0gICAgICBpZiAocy5wW2ldICE9IGNiW2ldKQ0KLSAgICAgICAgYWJv cnQgKCk7DQotICAgIH0NCi0NCi0gIC8qIE5vdCB2ZWN0b3JpemVkIC0gY2Fu J3QgYW50aWFsaWFzIHRoZSBwb2ludGVyIHMucCBmcm9tIHRoZSBwb2ludGVy IHMucS4gICovDQotICBzLnEgPSBjYjsNCi0gIGZvciAoaSA9IDA7IGkgPCBO OyBpKyspDQotICAgIHsNCi0gICAgICBzLnBbaV0gPSBzLnFbaV07DQotICAg IH0NCi0NCi0gIC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KLSAgZm9yIChpID0g MDsgaSA8IE47IGkrKykNCi0gICAgew0KLSAgICAgIGlmIChzLnBbaV0gIT0g cy5xW2ldKQ0KLSAgICAgICAgYWJvcnQgKCk7DQotICAgIH0NCi0NCi0gIHJl dHVybiAwOw0KLX0NCi0NCi1pbnQgbWFpbiAodm9pZCkNCi17IA0KLSAgY2hl Y2tfdmVjdCAoKTsNCi0gIA0KLSAgcmV0dXJuIG1haW4xICh4KTsNCi19IA0K LQ0KLS8qIEN1cnJlbnRseSB0aGUgbG9vcHMgZmFpbCB0byB2ZWN0b3JpemUg ZHVlIHRvIGFsaWFzaW5nIHByb2JsZW1zLg0KLSAgIElmL3doZW4gdGhlIGFs aWFzaW5nIHByb2JsZW1zIGFyZSByZXNvbHZlZCwgdW5hbGlnbm1lbnQgbWF5 DQotICAgcHJldmVudCB2ZWN0b3JpemF0aW9uIG9uIHNvbWUgdGFyZ2V0cy4g ICovDQotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2 ZWN0b3JpemVkIDIgbG9vcHMiIDEgInZlY3QiIHsgeGZhaWwgKi0qLSogfSB9 IH0gKi8NCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg ImNhbid0IGRldGVybWluZSBkZXBlbmRlbmNlIGJldHdlZW4iIDIgInZlY3Qi IH0gfSAqLw0KLS8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAi dmVjdCIgfSB9ICovDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LTc5LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtNzkuYwkocmV2aXNpb24gMTI3 MzE2KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC03OS5j CSh3b3JraW5nIGNvcHkpDQpAQCAtMSw1MCArMCwwIEBADQotLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovDQotDQot I2luY2x1ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0cmVlLXZlY3QuaCIN Ci0NCi0jZGVmaW5lIE4gMTYNCi0NCi1mbG9hdCBmYVtOXSBfX2F0dHJpYnV0 ZV9fICgoX19hbGlnbmVkX18oMTYpKSk7DQotZmxvYXQgZmJbTis0XSBfX2F0 dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSkgPSB7MC4wLCAxLjAsIDIu MCwgMy4wLCA0LjAsIDUuMCwgNy4wLCA5LjAsIDEwLjAsIDExLjAsIDEyLjAs IDEzLjAsIDE0LjAsIDE1LjAsIDE2LjAsIDE3LjAsIDE4LjAsIDE5LjB9Ow0K LWZsb2F0IGZjW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikp KSA9IHswLjUsIDEuNSwgMi41LCAzLjUsIDQuNSwgNS41LCA3LjUsIDkuNSwg MTAuNSwgMTEuNSwgMTIuNSwgMTMuNSwgMTQuNSwgMTUuNX07DQotDQotLyog TGlrZSB2ZWN0LTgwLmMgYnV0IHRoZSBwb2ludGVycyBhcmUgbm90IGFubm90 YXRlZCBhcyByZXN0cmljdGVkLA0KLSAgIGFuZCB0aGVyZWZvcmUgY2FuJ3Qg YmUgYW50aWFsaWFzZWQuICAqLw0KLQ0KLWludA0KLW1haW4xIChmbG9hdCAq cGEsIGZsb2F0ICpwYiwgZmxvYXQgKnBjKQ0KLXsNCi0gIGludCBpOw0KLSAg ZmxvYXQgKnEgPSBwYiArIDQ7DQotDQotICBmb3IgKGkgPSAwOyBpIDwgTjsg aSsrKQ0KLSAgICB7DQotICAgICAgcGFbaV0gPSBxW2ldICogcGNbaV07DQot ICAgIH0NCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQotICAgIHsN Ci0gICAgICBpZiAocGFbaV0gIT0gcVtpXSAqIHBjW2ldKQ0KLQlhYm9ydCgp Ow0KLSAgICB9DQotICANCi0gIHJldHVybiAwOw0KLX0NCi0NCi0NCi1pbnQg bWFpbiAodm9pZCkNCi17IA0KLSAgY2hlY2tfdmVjdCAoKTsNCi0NCi0gIG1h aW4xIChmYSwgZmIsIGZjKTsNCi0NCi0gIHJldHVybiAwOwkNCi19DQotDQot LyogQ3VycmVudGx5IHRoZSBsb29wcyBmYWlsIHRvIHZlY3Rvcml6ZSBkdWUg dG8gYWxpYXNpbmcgcHJvYmxlbXMuDQotICBJZi93aGVuIHRoZSBhbGlhc2lu ZyBwcm9ibGVtcyBhcmUgcmVzb2x2ZWQsIHVuYWxpZ25tZW50IG1heQ0KLSAg cHJldmVudCB2ZWN0b3JpemF0aW9uIG9uIHNvbWUgdGFyZ2V0cy4gICovDQot LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3Jp emVkIDEgbG9vcHMiIDEgInZlY3QiICB7IHhmYWlsICotKi0qIH0gfSB9ICov DQotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJjYW4n dCBkZXRlcm1pbmUgZGVwZW5kZW5jZSBiZXR3ZWVuIiAxICJ2ZWN0IiB9IH0g Ki8NCi0vKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3Qi IH0gfSAqLw0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8t dmZhLXZlY3QtNDkuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNDkuYwkocmV2 aXNpb24gMCkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZm YS12ZWN0LTQ5LmMJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDYxIEBADQor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9 ICovDQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVl LXZlY3QuaCINCisNCisjZGVmaW5lIE4gMjU2DQorDQordm9pZCBiYXIgKGZs b2F0ICpwYSwgZmxvYXQgKnBiLCBmbG9hdCAqcGMpIA0KK3sNCisgIGludCBp Ow0KKw0KKyAgLyogY2hlY2sgcmVzdWx0czogICovDQorICBmb3IgKGkgPSAw OyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgaWYgKHBhW2ldICE9IChw YltpXSAqIHBjW2ldKSkNCisJYWJvcnQgKCk7DQorICAgIH0NCisNCisgIHJl dHVybjsNCit9DQorDQorLyogVW5hbGlnbmVkIHBvaW50ZXIgcmVhZCBhY2Nl c3NlcywgYWxpZ25lZCBwb2ludGVyIHdyaXRlIGFjY2Vzcy4NCisgICBUaGUg bG9vcCBib3VuZCBpcyBrbm93biBhbmQgZGl2aXNpYmxlIGJ5IHRoZSB2ZWN0 b3JpemF0aW9uIGZhY3Rvci4NCisgICBDYW4ndCBwcm92ZSB0aGF0IHRoZSBw b2ludGVycyBkb24ndCBhbGlhcy4NCisgICB2ZWN0LTUzLmMgaXMgc2ltaWxh ciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KKyAgICAgICAg dGhlIGxvb3AgYm91bmQgaXMgdW5rbm93bi4NCisgICB2ZWN0LTQ4LmMgaXMg c2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KKyAg ICAgICAgYWxpYXNpbmcgaXMgbm90IGEgcHJvYmxlbS4gICovDQorDQoraW50 DQorbWFpbjEgKGZsb2F0ICpwYiwgZmxvYXQgKnBjKQ0KK3sNCisgIGZsb2F0 IHBhW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKTsNCisg IGludCBpOw0KKw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCisgICAg ew0KKyAgICAgIHBhW2ldID0gcGJbaV0gKiBwY1tpXTsNCisgICAgfQ0KKw0K KyAgYmFyIChwYSxwYixwYyk7DQorDQorICByZXR1cm4gMDsNCit9DQorDQor aW50IG1haW4gKHZvaWQpDQorew0KKyAgaW50IGk7DQorICBmbG9hdCBiW04r MV0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpID0gezAsMyw2 LDksMTIsMTUsMTgsMjEsMjQsMjcsMzAsMzMsMzYsMzksNDIsNDUsNDgsNTEs NTQsNTcsNjB9Ow0KKyAgZmxvYXQgY1tOXSBfX2F0dHJpYnV0ZV9fICgoX19h bGlnbmVkX18oMTYpKSkgPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwx MiwxMywxNCwxNSwxNiwxNywxOCwxOX07DQorDQorICBjaGVja192ZWN0ICgp Ow0KKw0KKyAgbWFpbjEgKGIsYyk7DQorICBtYWluMSAoJmJbMV0sYyk7DQor DQorICByZXR1cm4gMDsNCit9DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3Qi IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgY2xl YW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KSW5kZXg6IGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC0xMDIuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC0x MDIuYwkocmV2aXNpb24gMTI3MzE2KQ0KKysrIGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC0xMDIuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsNTcg KzAsMCBAQA0KLS8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZl Y3RfaW50IH0gKi8NCi0NCi0jaW5jbHVkZSA8c3RkbGliLmg+DQotI2luY2x1 ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCi0NCi0j ZGVmaW5lIE4gOQ0KLQ0KLXN0cnVjdCBleHRyYWN0aW9uDQotew0KLSAgaW50 IGFbTl07DQotICBpbnQgYltOXTsNCi19Ow0KLQ0KLXN0YXRpYyBpbnQgYVtO XSA9IHsxLDIsMyw0LDUsNiw3LDgsOX07DQotc3RhdGljIGludCBiW05dID0g ezIsMyw0LDUsNiw3LDgsOSw5fTsNCi12b2xhdGlsZSBpbnQgZm9vOw0KLQ0K LWludCBtYWluMSAoaW50IHgsIGludCB5KSB7DQotICBpbnQgaTsNCi0gIHN0 cnVjdCBleHRyYWN0aW9uICpwOw0KLSAgcCA9IChzdHJ1Y3QgZXh0cmFjdGlv biAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGV4dHJhY3Rpb24pKTsNCi0N Ci0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQotICAgIHsNCi0gICAgICAg cC0+YVtpXSA9IGFbaV07DQotICAgICAgIGlmIChmb28gPT0gMTM1KQ0KLQkg YWJvcnQgKCk7IC8qIHRvIGF2b2lkIHZlY3Rvcml6YXRpb24gICovDQotICAg IH0NCi0NCi0gIC8qIE5vdCB2ZWN0b3JpemFibGU6IGRpc3RhbmNlIDEuICAq Lw0KLSAgZm9yIChpID0gMDsgaSA8IE4gLSAxOyBpKyspDQotICAgIHsNCi0g ICAgICAgKigoaW50ICopcCArIHggKyBpKSA9ICooKGludCAqKXAgKyB4ICsg aSArIDEpOw0KLSAgICB9DQotDQotICAvKiBjaGVjayByZXN1bHRzOiAqLw0K LSAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCi0gICAgew0KLSAgICAgICBp ZiAocC0+YVtpXSAhPSBiW2ldKQ0KLSAgICAgICAgIGFib3J0KCk7DQotICAg IH0NCi0gIHJldHVybiAwOw0KLX0NCi0NCi1pbnQgbWFpbiAodm9pZCkNCi17 IA0KLSAgY2hlY2tfdmVjdCAoKTsNCi0NCi0gIGZvbyA9IDA7DQotICByZXR1 cm4gbWFpbjEgKDAsIE4pOw0KLX0NCi0NCi0vKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMCAidmVj dCIgfSB9ICovDQotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJwb3NzaWJsZSBkZXBlbmRlbmNlIGJldHdlZW4gZGF0YS1yZWZzIiAx ICJ2ZWN0IiB9IH0gKi8NCi0vKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVl LWR1bXAgInZlY3QiIH0gfSAqLw0KLQ0KSW5kZXg6IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNTEuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZh LXZlY3QtNTEuYwkocmV2aXNpb24gMCkNCisrKyBnY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L25vLXZmYS12ZWN0LTUxLmMJKHJldmlzaW9uIDApDQpAQCAt MCwwICsxLDU5IEBADQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9mbG9hdCB9ICovDQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0K KyNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCisNCisjZGVmaW5lIE4gMjU2DQor DQordm9pZCBiYXIgKGNvbnN0IGZsb2F0ICpwYSwgY29uc3QgZmxvYXQgKnBi LCBjb25zdCBmbG9hdCAqcGMpIA0KK3sNCisgIGludCBpOw0KKw0KKyAgLyog Y2hlY2sgcmVzdWx0czogICovDQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsr KQ0KKyAgICB7DQorICAgICAgaWYgKHBhW2ldICE9IChwYltpXSAqIHBjW2ld KSkNCisJYWJvcnQgKCk7DQorICAgIH0NCisNCisgIHJldHVybjsNCit9DQor DQorLyogVW5hbGlnbmVkIHBvaW50ZXIgYWNjZXNzZXMsIHdpdGggdW5rbm93 biBhbGlnbm1lbnQuDQorICAgVGhlIGxvb3AgYm91bmQgaXMgdW5rbm93bi4N CisgICBDYW4ndCBwcm92ZSB0aGF0IHRoZSBwb2ludGVycyBkb24ndCBhbGlh cy4NCisgICB2ZWN0LTQ1LmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRo IG9uZSBkaWZmZXJlbmNlOg0KKyAgICAgICAgdGhlIGxvb3AgYm91bmQgaXMg a25vd24uDQorICAgdmVjdC01MC5jIGlzIHNpbWlsYXIgdG8gdGhpcyBvbmUg d2l0aCBvbmUgZGlmZmVyZW5jZToNCisgICAgICAgIEFsaWFzaW5nIGlzIG5v dCBhIHByb2JsZW0uICAqLw0KKw0KK2ludA0KK21haW4xIChpbnQgbiwgZmxv YXQgKnBhLCBmbG9hdCAqcGIsIGZsb2F0ICpwYykNCit7DQorICBpbnQgaTsN CisNCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspDQorICAgIHsNCisgICAg ICBwYVtpXSA9IHBiW2ldICogcGNbaV07DQorICAgIH0NCisNCisgIGJhciAo cGEscGIscGMpOw0KKw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtYWlu ICh2b2lkKQ0KK3sNCisgIGludCBpOw0KKyAgZmxvYXQgYVtOXTsNCisgIGZs b2F0IGJbTl0gPSB7MCwzLDYsOSwxMiwxNSwxOCwyMSwyNCwyNywzMCwzMywz NiwzOSw0Miw0NSw0OCw1MSw1NCw1N307DQorICBmbG9hdCBjW05dID0gezAs MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgs MTl9Ow0KKw0KKyAgY2hlY2tfdmVjdCAoKTsNCisNCisgIG1haW4xIChOLGEs YixjKTsNCisgIHJldHVybiAwOw0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAi dmVjdCIgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLw0KKy8qIHsgZGctZmluYWwg eyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICovDQpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtcHIyOTE0NS5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC9uby12ZmEtcHIyOTE0NS5jCShyZXZpc2lvbiAwKQ0KKysrIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXByMjkxNDUuYwkocmV2aXNp b24gMCkNCkBAIC0wLDAgKzEsNDggQEANCisvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQorDQorI2luY2x1ZGUgPHN0 ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCisNCit2b2lkIHdp dGhfcmVzdHJpY3QoaW50ICogX19yZXN0cmljdCBwKQ0KK3sNCisgIGludCBp Ow0KKyAgaW50ICpxID0gcCAtIDI7DQorDQorICBmb3IgKGkgPSAwOyBpIDwg MTAwMDsgKytpKSB7DQorICAgIHBbaV0gPSBxW2ldOw0KKyAgfQ0KK30NCisN Cit2b2lkIHdpdGhvdXRfcmVzdHJpY3QoaW50ICogcCkNCit7DQorICBpbnQg aTsNCisgIGludCAqcSA9IHAgLSAyOw0KKw0KKyAgZm9yIChpID0gMDsgaSA8 IDEwMDA7ICsraSkgew0KKyAgICBwW2ldID0gcVtpXTsNCisgIH0NCit9DQor DQoraW50IG1haW4odm9pZCkNCit7DQorICBpbnQgaTsNCisgIGludCBhWzEw MDJdOw0KKyAgaW50IGJbMTAwMl07DQorDQorICBmb3IgKGkgPSAwOyBpIDwg MTAwMjsgKytpKSB7DQorICAgIGFbaV0gPSBiW2ldID0gaTsNCisgIH0NCisN CisgIHdpdGhfcmVzdHJpY3QoYSArIDIpOw0KKyAgd2l0aG91dF9yZXN0cmlj dChiICsgMik7DQorDQorICBmb3IgKGkgPSAwOyBpIDwgMTAwMjsgKytpKSB7 DQorICAgIGlmIChhW2ldICE9IGJbaV0pDQorICAgICAgYWJvcnQoKTsNCisg IH0NCisgIHJldHVybiAwOw0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMCBsb29wcyIgMiAidmVj dCIgIH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiAgfSB9ICovDQor LyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0g Ki8NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZHYt Mi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWR2LTIuYwkocmV2aXNpb24gMTI3MzE2KQ0K KysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1kdi0yLmMJKHdv cmtpbmcgY29weSkNCkBAIC0xLDc3ICswLDAgQEANCi0vKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQotDQotI2luY2x1 ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlIDxzaWduYWwuaD4NCi0jaW5jbHVk ZSAidHJlZS12ZWN0LmgiDQotDQotI2RlZmluZSBOIDY0DQotI2RlZmluZSBN QVggNDINCi0NCi1leHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsgDQotDQotaW50 IG1haW4gKCkNCi17ICANCi0gIGludCBBW05dOw0KLSAgaW50IEJbTl07DQot ICBpbnQgQ1tOXTsNCi0gIGludCBEW05dOw0KLQ0KLSAgaW50IGksIGo7DQot DQotICBjaGVja192ZWN0ICgpOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IE47 IGkrKykNCi0gICAgew0KLSAgICAgIEFbaV0gPSBpOw0KLSAgICAgIEJbaV0g PSBpOw0KLSAgICAgIENbaV0gPSBpOw0KLSAgICAgIERbaV0gPSBpOw0KLSAg ICB9DQotDQotICAvKiBWZWN0b3JpemFibGUgKi8NCi0gIGZvciAoaSA9IDA7 IGkgPCBOLTIwOyBpKyspDQotICAgIHsNCi0gICAgICBBW2ldID0gQVtpKzIw XTsNCi0gICAgfQ0KLQ0KLSAgLyogY2hlY2sgcmVzdWx0czogICovDQotICBm b3IgKGkgPSAwOyBpIDwgTi0yMDsgaSsrKQ0KLSAgICB7DQotICAgICAgaWYg KEFbaV0gIT0gRFtpKzIwXSkNCi0JYWJvcnQgKCk7DQotICAgIH0NCi0NCi0g IC8qIFZlY3Rvcml6YWJsZSAqLw0KLSAgZm9yIChpID0gMDsgaSA8IDE2OyBp KyspDQotICAgIHsNCi0gICAgICBCW2ldID0gQltpXSArIDU7DQotICAgIH0N Ci0NCi0gIC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KLSAgZm9yIChpID0gMDsg aSA8IDE2OyBpKyspDQotICAgIHsNCi0gICAgICBpZiAoQltpXSAhPSBDW2ld ICsgNSkNCi0JYWJvcnQgKCk7DQotICAgIH0NCi0NCi0gIC8qIE5vdCB2ZWN0 b3JpemFibGUgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspDQotICAg IHsNCi0gICAgICBDW2ldID0gQ1tpKzNdOw0KLSAgICB9DQotDQotICAvKiBj aGVjayByZXN1bHRzOiAgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKysp DQotICAgIHsNCi0gICAgICBpZiAoQ1tpXSAhPSBEW2krM10pDQotCWFib3J0 ICgpOw0KLSAgICB9DQotDQotICByZXR1cm4gMDsNCi19DQotDQotDQotLyog VGhlIGluaXRpYWxpemF0aW9uIGluZHVjdGlvbiBsb29wICh3aXRoIGFsaWdu ZWQgYWNjZXNzKSBpcyBhbHNvIHZlY3Rvcml6ZWQuICAqLw0KLS8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAzIGxv b3BzIiAxICJ2ZWN0IiB9IH0gKi8NCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgImFjY2Vzc2VzIGhhdmUgdGhlIHNhbWUgYWxpZ25t ZW50LiIgMiAidmVjdCIgfSB9ICovDQotLyogeyBkZy1maW5hbCB7IGNsZWFu dXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L25vLXZmYS12ZWN0LTQzLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L25v LXZmYS12ZWN0LTQzLmMJKHJldmlzaW9uIDApDQorKysgZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVjdC00My5jCShyZXZpc2lvbiAwKQ0K QEAgLTAsMCArMSw3OCBAQA0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfZmxvYXQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcu aD4NCisjaW5jbHVkZSAidHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDI1 Ng0KKw0KK3ZvaWQgYmFyIChmbG9hdCAqcGEsIGZsb2F0ICpwYiwgZmxvYXQg KnBjKSANCit7DQorICBpbnQgaTsNCisNCisgIC8qIGNoZWNrIHJlc3VsdHM6 ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCisgICAgew0KKyAg ICAgIGlmIChwYVtpXSAhPSAocGJbaV0gKiBwY1tpXSkpDQorCWFib3J0ICgp Ow0KKyAgICB9DQorDQorICByZXR1cm47DQorfQ0KKw0KKw0KK2ludA0KK21h aW4xIChmbG9hdCAqcGEpDQorew0KKyAgaW50IGk7DQorICBmbG9hdCBwYltO XSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSkgPSB7MCwzLDYs OSwxMiwxNSwxOCwyMSwyNCwyNywzMCwzMywzNiwzOSw0Miw0NSw0OCw1MSw1 NCw1N307DQorICBmbG9hdCBwY1tOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGln bmVkX18oMTYpKSkgPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwx MywxNCwxNSwxNiwxNywxOCwxOX07DQorDQorIC8qIE5vdCB2ZWN0b3JpemFi bGU6IHBhIG1heSBhbGlhcyBwYiBhbmQvb3IgcGMsIHNpbmNlIHRoZWlyIGFk ZHJlc3NlcyBlc2NhcGUuICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkr KykNCisgICAgew0KKyAgICAgIHBhW2ldID0gcGJbaV0gKiBwY1tpXTsNCisg ICAgfQ0KKw0KKyAgYmFyIChwYSxwYixwYyk7DQorDQorICByZXR1cm4gMDsN Cit9DQorDQoraW50DQorbWFpbjIgKGZsb2F0ICogcGEpDQorew0KKyAgaW50 IGk7DQorICBmbG9hdCBwYltOXSA9IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0 LDI3LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3fTsNCisgIGZsb2F0 IHBjW05dID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQs MTUsMTYsMTcsMTgsMTl9Ow0KKw0KKyAgLyogVmVjdG9yaXphYmxlOiBwYiBh bmQgcGMgYWRkcmVzc2VzIGRvIG5vdCBlc2NhcGUuICAqLw0KKyAgZm9yIChp ID0gMDsgaSA8IE47IGkrKykNCisgICAgew0KKyAgICAgIHBhW2ldID0gcGJb aV0gKiBwY1tpXTsNCisgICAgfSAgIA0KKyAgDQorICAvKiBjaGVjayByZXN1 bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQorICAgIHsN CisgICAgICBpZiAocGFbaV0gIT0gKHBiW2ldICogcGNbaV0pKQ0KKyAgICAg ICAgYWJvcnQgKCk7DQorICAgIH0NCisgIA0KKyAgcmV0dXJuIDA7DQorfQ0K Kw0KK2ludCBtYWluICh2b2lkKQ0KK3sNCisgIGludCBpOw0KKyAgZmxvYXQg YVtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSk7DQorDQor ICBjaGVja192ZWN0ICgpOw0KKw0KKyAgbWFpbjEgKGEpOw0KKyAgbWFpbjIg KGEpOw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2 ZWN0IiB9IH0gKi8NCisvKiAgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJBbGlnbm1lbnQgb2YgYWNjZXNzIGZvcmNlZCB1c2luZyB2ZXJz aW9uaW5nIiAxICJ2ZWN0IiB7IHRhcmdldCB2ZWN0X25vX2FsaWduIH0gfSB9 ICovDQorLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0 IiB9IH0gKi8NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QtNTcuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC01Ny5jCShyZXZpc2lvbiAxMjczMTYp DQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTU3LmMJKHdv cmtpbmcgY29weSkNCkBAIC0xLDYyICswLDAgQEANCi0vKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCi0NCi0jaW5j bHVkZSA8c3RkYXJnLmg+DQotI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KLQ0K LSNkZWZpbmUgTiAyNTYNCi0NCi12b2lkIGJhciAoZmxvYXQgKnBhLCBmbG9h dCAqcGIsIGZsb2F0ICpwYykNCi17DQotICBpbnQgaTsNCi0NCi0gIC8qIGNo ZWNrIHJlc3VsdHM6ICAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE4vMjsgaSsr KQ0KLSAgICB7DQotICAgICAgaWYgKHBhW2ldICE9IChwYltpKzFdICogcGNb aSsxXSkpDQotICAgICAgICBhYm9ydCAoKTsNCi0gICAgfQ0KLQ0KLSAgcmV0 dXJuOw0KLX0NCi0NCi0vKiBVbmFsaWduZWQgcG9pbnRlciByZWFkIGFjY2Vz c2VzIHdpdGgga25vd24gYWxpZ25tZW50LA0KLSAgIGFuZCBhbiB1bmFsaWdu ZWQgd3JpdGUgYWNjZXNzIHdpdGggdW5rbm93biBhbGlnbm1lbnQuDQotICAg VGhlIGxvb3AgYm91bmQgaXMga25vd24gYW5kIGRpdmlzaWJsZSBieSB0aGUg dmVjdG9yaXphdGlvbiBmYWN0b3IuDQotICAgQ2FuJ3QgcHJvdmUgdGhhdCB0 aGUgcG9pbnRlcnMgZG9uJ3QgYWxpYXMuDQotICAgdmVjdC02MS5jIGlzIHNp bWlsYXIgdG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCi0gICAg ICAgIHRoZSBsb29wIGJvdW5kIGlzIHVua25vd24uDQotICAgdmVjdC01Ni5j IGlzIHNpbWlsYXIgdG8gdGhpcyBvbmUgd2l0aCB0d28gZGlmZmVyZW5jZXM6 DQotICAgICAgICBhbGlhc2luZyBpcyBhIHByb2JsZW0sIGFuZCB0aGUgd3Jp dGUgYWNjZXNzIGlzIGFsaWduZWQuICAqLw0KLQ0KLWludA0KLW1haW4xIChm bG9hdCAqcGEpDQotew0KLSAgaW50IGk7DQotICBmbG9hdCBiW05dIF9fYXR0 cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLDMsNiw5LDEyLDE1 LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3fTsN Ci0gIGZsb2F0IGNbTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2 KSkpID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUs MTYsMTcsMTgsMTl9Ow0KLSAgZmxvYXQgKnBiID0gYjsNCi0gIGZsb2F0ICpw YyA9IGM7DQotDQotICBmb3IgKGkgPSAwOyBpIDwgTi8yOyBpKyspDQotICAg IHsNCi0gICAgICBwYVtpXSA9IHBiW2krMV0gKiBwY1tpKzFdOw0KLSAgICB9 DQotDQotICBiYXIgKHBhLCBwYiwgcGMpOw0KLQ0KLSAgcmV0dXJuIDA7DQot fQ0KLQ0KLWludCBtYWluICh2b2lkKQ0KLXsNCi0gIGludCBpOw0KLSAgZmxv YXQgYVtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSk7DQot DQotICBjaGVja192ZWN0ICgpOw0KLSAgbWFpbjEgKGEpOw0KLQ0KLSAgcmV0 dXJuIDA7DQotfQ0KLQ0KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB7IHhmYWls ICotKi0qIH0gfSB9ICovDQotLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJl ZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCkluZGV4OiBnY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L25vLXZmYS12ZWN0LWR2LTIuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZh LXZlY3QtZHYtMi5jCShyZXZpc2lvbiAwKQ0KKysrIGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtZHYtMi5jCShyZXZpc2lvbiAwKQ0K QEAgLTAsMCArMSw3NyBAQA0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisjaW5jbHVkZSA8c3RkYXJnLmg+ DQorI2luY2x1ZGUgPHNpZ25hbC5oPg0KKyNpbmNsdWRlICJ0cmVlLXZlY3Qu aCINCisNCisjZGVmaW5lIE4gNjQNCisjZGVmaW5lIE1BWCA0Mg0KKw0KK2V4 dGVybiB2b2lkIGFib3J0KHZvaWQpOyANCisNCitpbnQgbWFpbiAoKQ0KK3sg IA0KKyAgaW50IEFbTl07DQorICBpbnQgQltOXTsNCisgIGludCBDW05dOw0K KyAgaW50IERbTl07DQorDQorICBpbnQgaSwgajsNCisNCisgIGNoZWNrX3Zl Y3QgKCk7DQorDQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7 DQorICAgICAgQVtpXSA9IGk7DQorICAgICAgQltpXSA9IGk7DQorICAgICAg Q1tpXSA9IGk7DQorICAgICAgRFtpXSA9IGk7DQorICAgIH0NCisNCisgIC8q IFZlY3Rvcml6YWJsZSAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE4tMjA7IGkr KykNCisgICAgew0KKyAgICAgIEFbaV0gPSBBW2krMjBdOw0KKyAgICB9DQor DQorICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkg PCBOLTIwOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoQVtpXSAhPSBEW2kr MjBdKQ0KKwlhYm9ydCAoKTsNCisgICAgfQ0KKw0KKyAgLyogVmVjdG9yaXph YmxlICovDQorICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykNCisgICAgew0K KyAgICAgIEJbaV0gPSBCW2ldICsgNTsNCisgICAgfQ0KKw0KKyAgLyogY2hl Y2sgcmVzdWx0czogICovDQorICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykN CisgICAgew0KKyAgICAgIGlmIChCW2ldICE9IENbaV0gKyA1KQ0KKwlhYm9y dCAoKTsNCisgICAgfQ0KKw0KKyAgLyogTm90IHZlY3Rvcml6YWJsZSAqLw0K KyAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykNCisgICAgew0KKyAgICAgIENb aV0gPSBDW2krM107DQorICAgIH0NCisNCisgIC8qIGNoZWNrIHJlc3VsdHM6 ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykNCisgICAgew0KKyAg ICAgIGlmIChDW2ldICE9IERbaSszXSkNCisJYWJvcnQgKCk7DQorICAgIH0N CisNCisgIHJldHVybiAwOw0KK30NCisNCisNCisvKiBUaGUgaW5pdGlhbGl6 YXRpb24gaW5kdWN0aW9uIGxvb3AgKHdpdGggYWxpZ25lZCBhY2Nlc3MpIGlz IGFsc28gdmVjdG9yaXplZC4gICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDMgbG9vcHMiIDEgInZlY3Qi IH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAiYWNjZXNzZXMgaGF2ZSB0aGUgc2FtZSBhbGlnbm1lbnQuIiAyICJ2ZWN0 IiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAg InZlY3QiIH0gfSAqLw0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3Qvbm8tdmZhLXZlY3QtNjEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNjEu YwkocmV2aXNpb24gMCkNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L25vLXZmYS12ZWN0LTYxLmMJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDY0 IEBADQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9p bnQgfSAqLw0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZl Y3RfZmxvYXQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisjaW5j bHVkZSAidHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDI1Ng0KKw0KK3Zv aWQgYmFyIChmbG9hdCAqcGEsIGZsb2F0ICpwYiwgZmxvYXQgKnBjKQ0KK3sN CisgIGludCBpOw0KKw0KKyAgLyogY2hlY2sgcmVzdWx0czogICovDQorICBm b3IgKGkgPSAwOyBpIDwgTi8yOyBpKyspDQorICAgIHsNCisgICAgICBpZiAo cGFbaV0gIT0gKHBiW2krMV0gKiBwY1tpKzFdKSkNCisJYWJvcnQgKCk7DQor ICAgIH0NCisNCisgIHJldHVybjsNCit9DQorDQorLyogVW5hbGlnbmVkIHBv aW50ZXIgcmVhZCBhY2Nlc3NlcyB3aXRoIGtub3duIGFsaWdubWVudCwNCisg ICBhbmQgYW4gdW5hbGlnbmVkIHdyaXRlIGFjY2VzcyB3aXRoIHVua25vd24g YWxpZ25tZW50Lg0KKyAgIFRoZSBsb29wIGJvdW5kIGlzIGl1bmtub3duLg0K KyAgIENhbid0IHByb3ZlIHRoYXQgdGhlIHBvaW50ZXJzIGRvbid0IGFsaWFz Lg0KKyAgIHZlY3QtNTcuYyBpcyBzaW1pbGFyIHRvIHRoaXMgb25lIHdpdGgg b25lIGRpZmZlcmVuY2U6DQorICAgICAgICB0aGUgbG9vcCBib3VuZCBpcyBr bm93bi4NCisgICB2ZWN0LTYwLmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3 aXRoIHR3byBkaWZmZXJlbmNlczoNCisgICAgICAgIGFsaWFzaW5nIGlzIG5v dCBhIHByb2JsZW0sIGFuZCB0aGUgd3JpdGUgYWNjZXNzIGlzIHVuYWxpZ25l ZC4gICovDQorDQoraW50DQorbWFpbjEgKGludCBuICwgZmxvYXQgKnBhKQ0K K3sNCisgIGludCBpOw0KKyAgZmxvYXQgYltOXSBfX2F0dHJpYnV0ZV9fICgo X19hbGlnbmVkX18oMTYpKSkgPSB7MCwzLDYsOSwxMiwxNSwxOCwyMSwyNCwy NywzMCwzMywzNiwzOSw0Miw0NSw0OCw1MSw1NCw1N307DQorICBmbG9hdCBj W05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLDEs MiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5 fTsNCisgIGZsb2F0ICpwYiA9IGI7DQorICBmbG9hdCAqcGMgPSBjOw0KKw0K KyAgZm9yIChpID0gMDsgaSA8IG4vMjsgaSsrKQ0KKyAgICB7DQorICAgICAg cGFbaV0gPSBwYltpKzFdICogcGNbaSsxXTsNCisgICAgfQ0KKw0KKyAgYmFy IChwYSxwYixwYyk7DQorDQorICByZXR1cm4gMDsNCit9DQorDQoraW50IG1h aW4gKHZvaWQpDQorew0KKyAgaW50IGk7DQorICBpbnQgbj1OOw0KKyAgZmxv YXQgYVtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSk7DQor DQorICBjaGVja192ZWN0ICgpOw0KKyAgbWFpbjEgKG4sYSk7DQorDQorICBy ZXR1cm4gMDsNCit9DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIHsgeGZh aWwgKi0qLSogfSB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10 cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KSW5kZXg6IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3QvdmVjdC00OS5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTQ5LmMJKHJl dmlzaW9uIDEyNzMxNikNCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtNDkuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsNjEgKzAsMCBAQA0K LS8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZmxvYXQg fSAqLw0KLQ0KLSNpbmNsdWRlIDxzdGRhcmcuaD4NCi0jaW5jbHVkZSAidHJl ZS12ZWN0LmgiDQotDQotI2RlZmluZSBOIDI1Ng0KLQ0KLXZvaWQgYmFyIChm bG9hdCAqcGEsIGZsb2F0ICpwYiwgZmxvYXQgKnBjKSANCi17DQotICBpbnQg aTsNCi0NCi0gIC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KLSAgZm9yIChpID0g MDsgaSA8IE47IGkrKykNCi0gICAgew0KLSAgICAgIGlmIChwYVtpXSAhPSAo cGJbaV0gKiBwY1tpXSkpDQotCWFib3J0ICgpOw0KLSAgICB9DQotDQotICBy ZXR1cm47DQotfQ0KLQ0KLS8qIFVuYWxpZ25lZCBwb2ludGVyIHJlYWQgYWNj ZXNzZXMsIGFsaWduZWQgcG9pbnRlciB3cml0ZSBhY2Nlc3MuDQotICAgVGhl IGxvb3AgYm91bmQgaXMga25vd24gYW5kIGRpdmlzaWJsZSBieSB0aGUgdmVj dG9yaXphdGlvbiBmYWN0b3IuDQotICAgQ2FuJ3QgcHJvdmUgdGhhdCB0aGUg cG9pbnRlcnMgZG9uJ3QgYWxpYXMuDQotICAgdmVjdC01My5jIGlzIHNpbWls YXIgdG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCi0gICAgICAg IHRoZSBsb29wIGJvdW5kIGlzIHVua25vd24uDQotICAgdmVjdC00OC5jIGlz IHNpbWlsYXIgdG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCi0g ICAgICAgIGFsaWFzaW5nIGlzIG5vdCBhIHByb2JsZW0uICAqLw0KLQ0KLWlu dA0KLW1haW4xIChmbG9hdCAqcGIsIGZsb2F0ICpwYykNCi17DQotICBmbG9h dCBwYVtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSk7DQot ICBpbnQgaTsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQotICAg IHsNCi0gICAgICBwYVtpXSA9IHBiW2ldICogcGNbaV07DQotICAgIH0NCi0N Ci0gIGJhciAocGEscGIscGMpOw0KLQ0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0K LWludCBtYWluICh2b2lkKQ0KLXsNCi0gIGludCBpOw0KLSAgZmxvYXQgYltO KzFdIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLDMs Niw5LDEyLDE1LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUx LDU0LDU3LDYwfTsNCi0gIGZsb2F0IGNbTl0gX19hdHRyaWJ1dGVfXyAoKF9f YWxpZ25lZF9fKDE2KSkpID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEs MTIsMTMsMTQsMTUsMTYsMTcsMTgsMTl9Ow0KLQ0KLSAgY2hlY2tfdmVjdCAo KTsNCi0NCi0gIG1haW4xIChiLGMpOw0KLSAgbWFpbjEgKCZiWzFdLGMpOw0K LQ0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KLS8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0 IiB7IHhmYWlsICotKi0qIH0gfSB9ICovDQotLyogeyBkZy1maW5hbCB7IGNs ZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCkluZGV4OiBnY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL3ZlY3QvcHIxOTA0OS5mOTANCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRn L3ZlY3QvcHIxOTA0OS5mOTAJKHJldmlzaW9uIDEyNzMxNikNCisrKyBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ZlY3QvcHIxOTA0OS5mOTAJKHdvcmtp bmcgY29weSkNCkBAIC0xLDI0ICswLDAgQEANCi0hIHsgZGctZG8gY29tcGls ZSB9DQotISB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zs b2F0IH0NCi0NCi1zdWJyb3V0aW5lIHMxMTEgKG50aW1lcyxsZCxuLGN0aW1l LGR0aW1lLGEsYixjLGQsZSxhYSxiYixjYykgDQotISAgICAgbGluZWFyIGRl cGVuZGVuY2UgdGVzdGluZw0KLSEgICAgIG5vIGRlcGVuZGVuY2UgLSB2ZWN0 b3JpemFibGUNCi0hICAgICBidXQgbm90IGNvbnNlY3V0aXZlIGFjY2Vzcw0K LQ0KLSAgICAgIGludGVnZXIgbnRpbWVzLCBsZCwgbiwgaSwgbmwNCi0gICAg ICByZWFsIGEobiksIGIobiksIGMobiksIGQobiksIGUobiksIGFhKGxkLG4p LCBiYihsZCxuKSwgY2MobGQsbikNCi0gICAgICByZWFsIHQxLCB0Miwgc2Vj b25kLCBjaGtzdW0sIGN0aW1lLCBkdGltZSwgY3MxZA0KLSAgICAgIGRvIDEg bmwgPSAxLDIqbnRpbWVzDQotICAgICAgZG8gMTAgaSA9IDIsbiwyDQotICAg ICAgICAgYShpKSA9IGEoaS0xKSArIGIoaSkNCi0gIDEwICBjb250aW51ZQ0K LSAgICAgIGNhbGwgZHVtbXkobGQsbixhLGIsYyxkLGUsYWEsYmIsY2MsMS4p DQotICAxICAgY29udGludWUNCi0gICAgICByZXR1cm4NCi0gICAgICBlbmQN Ci0NCi0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVj dG9yaXplZCAxIGxvb3BzIiAwICJ2ZWN0IiB9IH0NCi0hIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiY29tcGxpY2F0ZWQgYWNjZXNzIHBh dHRlcm4iIDEgInZlY3QiIH0gfQ0KLSEgeyBkZy1maW5hbCB7IGNsZWFudXAt dHJlZS1kdW1wICJ2ZWN0IiB9IH0NCi0NCkluZGV4OiBnY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL3ZlY3Qvbm8tdmZhLXByMTkwNDkuZjkwDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy92ZWN0L25vLXZmYS1wcjE5MDQ5LmY5MAkocmV2aXNpb24gMCkNCisrKyBn Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ZlY3Qvbm8tdmZhLXByMTkwNDku ZjkwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwyNCBAQA0KKyEgeyBkZy1k byBjb21waWxlIH0NCishIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfZmxvYXQgfQ0KKw0KK3N1YnJvdXRpbmUgczExMSAobnRpbWVzLGxk LG4sY3RpbWUsZHRpbWUsYSxiLGMsZCxlLGFhLGJiLGNjKSANCishICAgICBs aW5lYXIgZGVwZW5kZW5jZSB0ZXN0aW5nDQorISAgICAgbm8gZGVwZW5kZW5j ZSAtIHZlY3Rvcml6YWJsZQ0KKyEgICAgIGJ1dCBub3QgY29uc2VjdXRpdmUg YWNjZXNzDQorDQorICAgICAgaW50ZWdlciBudGltZXMsIGxkLCBuLCBpLCBu bA0KKyAgICAgIHJlYWwgYShuKSwgYihuKSwgYyhuKSwgZChuKSwgZShuKSwg YWEobGQsbiksIGJiKGxkLG4pLCBjYyhsZCxuKQ0KKyAgICAgIHJlYWwgdDEs IHQyLCBzZWNvbmQsIGNoa3N1bSwgY3RpbWUsIGR0aW1lLCBjczFkDQorICAg ICAgZG8gMSBubCA9IDEsMipudGltZXMNCisgICAgICBkbyAxMCBpID0gMixu LDINCisgICAgICAgICBhKGkpID0gYShpLTEpICsgYihpKQ0KKyAgMTAgIGNv bnRpbnVlDQorICAgICAgY2FsbCBkdW1teShsZCxuLGEsYixjLGQsZSxhYSxi YixjYywxLikNCisgIDEgICBjb250aW51ZQ0KKyAgICAgIHJldHVybg0KKyAg ICAgIGVuZA0KKw0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDAgInZlY3QiIH0gfQ0KKyEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJjb21wbGljYXRlZCBh Y2Nlc3MgcGF0dGVybiIgMSAidmVjdCIgfSB9DQorISB7IGRnLWZpbmFsIHsg Y2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfQ0KKw0K --0__=4DBBF9AADFA9DE0C8f9e8a93df938690918c4DBBF9AADFA9DE0C--