From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 123565 invoked by alias); 20 Aug 2019 11:36:53 -0000 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 Received: (qmail 123548 invoked by uid 89); 20 Aug 2019 11:36:52 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-8.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,KAM_SHORT autolearn=ham version=3.3.1 spammy=proceeds, Point, adjustment X-HELO: esa1.mentor.iphmx.com Received: from esa1.mentor.iphmx.com (HELO esa1.mentor.iphmx.com) (68.232.129.153) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 20 Aug 2019 11:36:48 +0000 IronPort-SDR: 10GpNUsYSsr/wkSIhfs6n9kdl1ZZGJW9uyfoofeccfd8uZN1Q6dc5ytHYnRMCnbjJVOoI1BbdE AxRymkYbNOlSqVyYRyuwRMN7Zkx9jFTN0fdOUdLU88UTIzcV0dY7c+JeJyQhP/sAeGM9DukxDH 93VX9nInORLSFFfgIzKAInxZmt0dYIsix6ydrl4sp6bixTybpeAFdhvKfjoj/OJXiA/rYIozv+ NnqbU5a50G2/eQK0O4VDBaI8JCiG/91BdzLXNWrEXYJ1QG/VMbzH3NJRb2e1eukbtWwfKgSmRG TK0= Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 20 Aug 2019 03:36:46 -0800 IronPort-SDR: /WRztD17MxLHr8XDxYR+lG5C8OrrecLyePGRnAa8BlBnt7AOqKBgvjNPXgX79KzaI6F0pTYMpO c0uZs3cFRmrp4ewDt865YSOZmhQMA0vGKLl1+Nk7q4tNNgMQauEQFAny/lYIUDr7QMp+y8iTcO ygxV0N2SbGIT71I7A8PhBb/b2zBholT2idwOC3RvBc79ELpKPmMpw6YH7pf2l+USVfvW+UqaRm 7k7wg7V+XMyNQHnunsKVJZfwjUG/KwJ6R0qbcilKNRznieQvm/924tZTRHSOKNUE60c4+ieWj1 VWI= Reply-To: From: Chung-Lin Tang Subject: [PATCH, OpenACC, 2/3] Non-contiguous array support for OpenACC data clauses (re-submission), compiler patches To: gcc-patches , Jakub Jelinek , Thomas Schwinge Message-ID: <43a11910-525e-13da-757e-a3f5046d5a10@mentor.com> Date: Tue, 20 Aug 2019 12:01:00 -0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------8C1B540C7693FA3E09F87E85" Return-Path: chunglin_tang@mentor.com X-SW-Source: 2019-08/txt/msg01411.txt.bz2 --------------8C1B540C7693FA3E09F87E85 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Content-length: 2227 These are the patches for gimplify, omp-low, and include/gomp-constants.h On issue that Jakub raised in the last review email on omp-low changes [1], was the use of DECL_IGNORED_P. Because the descriptor variables are created was create_tmp_var_raw(), they already have DECL_IGNORED_P set, so this shouldn't be of issue here. The use of '$' in identifier names have also been removed. [1] https://gcc.gnu.org/ml/gcc-patches/2018-12/msg01297.html Thanks, Chung-Lin gcc/ * gimplify.c (gimplify_scan_omp_clauses): For non-contiguous array map kinds, make sure bias in each dimension are put into firstprivate variables. * omp-low.c (struct omp_context): Add 'hash_map *non_contiguous_arrays' field, also added include of "tree-hash-traits.h". (append_field_to_record_type): New function. (create_noncontig_array_descr_type): Likewise. (create_noncontig_array_descr_init_code): Likewise. (new_omp_context): Add initialize of non_contiguous_arrays field. (delete_omp_context): Add delete of non_contiguous_arrays field. (scan_sharing_clauses): For non-contiguous array map kinds, check for supported dimension structure, and install non-contiguous array variable into current omp_context. (lower_omp_target): Add handling for non-contiguous array map kinds. (noncontig_array_lookup): New function. (noncontig_array_reference_start): Likewise. (scan_for_op): Likewise. (scan_for_reference): Likewise. (ncarray_create_bias): Likewise. (ncarray_dimension_peel): Likewise. (lower_omp_1): Add case to look for start of non-contiguous array reference, and handle bias adjustments for the code sequence. * tree-pretty-print.c (dump_omp_clauses): Add cases for printing GOMP_MAP_NONCONTIG_ARRAY map kinds. include/ * gomp-constants.h (GOMP_MAP_FLAG_SPECIAL_3): Define. (enum gomp_map_kind): Add GOMP_MAP_NONCONTIG_ARRAY, GOMP_MAP_NONCONTIG_ARRAY_TO, GOMP_MAP_NONCONTIG_ARRAY_FROM, GOMP_MAP_NONCONTIG_ARRAY_TOFROM, GOMP_MAP_NONCONTIG_ARRAY_FORCE_TO, GOMP_MAP_NONCONTIG_ARRAY_FORCE_FROM, GOMP_MAP_NONCONTIG_ARRAY_FORCE_TOFROM, GOMP_MAP_NONCONTIG_ARRAY_ALLOC, GOMP_MAP_NONCONTIG_ARRAY_FORCE_ALLOC, GOMP_MAP_NONCONTIG_ARRAY_FORCE_PRESENT. (GOMP_MAP_NONCONTIG_ARRAY_P): Define. --------------8C1B540C7693FA3E09F87E85 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="02.openacc-noncontig_arrays.gcc.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="02.openacc-noncontig_arrays.gcc.patch" Content-length: 34461 SW5kZXg6IGdjYy9naW1wbGlmeS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy9naW1wbGlmeS5jCShyZXZpc2lvbiAyNzQ2MTgpCisrKyBnY2Mv Z2ltcGxpZnkuYwkod29ya2luZyBjb3B5KQpAQCAtODU2Myw5ICs4NTYzLDI5 IEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwg Z2ltcGxlX3NlCiAJICBpZiAoT01QX0NMQVVTRV9TSVpFIChjKSA9PSBOVUxM X1RSRUUpCiAJICAgIE9NUF9DTEFVU0VfU0laRSAoYykgPSBERUNMX1AgKGRl Y2wpID8gREVDTF9TSVpFX1VOSVQgKGRlY2wpCiAJCQkJICA6IFRZUEVfU0la RV9VTklUIChUUkVFX1RZUEUgKGRlY2wpKTsKLQkgIGlmIChnaW1wbGlmeV9l eHByICgmT01QX0NMQVVTRV9TSVpFIChjKSwgcHJlX3AsCi0JCQkgICAgIE5V TEwsIGlzX2dpbXBsZV92YWwsIGZiX3J2YWx1ZSkgPT0gR1NfRVJST1IpCisJ ICBpZiAoT01QX0NMQVVTRV9TSVpFIChjKQorCSAgICAgICYmIFRSRUVfQ09E RSAoT01QX0NMQVVTRV9TSVpFIChjKSkgPT0gVFJFRV9MSVNUCisJICAgICAg JiYgR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZX1AgKE9NUF9DTEFVU0VfTUFQ X0tJTkQgKGMpKSkKIAkgICAgeworCSAgICAgIHRyZWUgZGltcyA9IE9NUF9D TEFVU0VfU0laRSAoYyk7CisJICAgICAgZm9yICh0cmVlIHQgPSBkaW1zOyB0 OyB0ID0gVFJFRV9DSEFJTiAodCkpCisJCXsKKwkJICAvKiBJZiBhIGRpbWVu c2lvbiBiaWFzIGlzbid0IGEgY29uc3RhbnQsIHdlIGhhdmUgdG8gZW5zdXJl CisJCSAgICAgdGhhdCB0aGUgdmFsdWUgZ2V0cyB0cmFuc2ZlcnJlZCB0byB0 aGUgb2ZmbG9hZCB0YXJnZXQuICAqLworCQkgIHRyZWUgbG93X2JvdW5kID0g VFJFRV9QVVJQT1NFICh0KTsKKwkJICBpZiAoVFJFRV9DT0RFIChsb3dfYm91 bmQpICE9IElOVEVHRVJfQ1NUKQorCQkgICAgeworCQkgICAgICBsb3dfYm91 bmQgPSBnZXRfaW5pdGlhbGl6ZWRfdG1wX3ZhciAobG93X2JvdW5kLCBwcmVf cCwKKwkJCQkJCQkgICBOVUxMLCBmYWxzZSk7CisJCSAgICAgIG9tcF9hZGRf dmFyaWFibGUgKGN0eCwgbG93X2JvdW5kLAorCQkJCQlHT1ZEX0ZJUlNUUFJJ VkFURSB8IEdPVkRfU0VFTik7CisJCSAgICAgIFRSRUVfUFVSUE9TRSAodCkg PSBsb3dfYm91bmQ7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgZWxzZSBp ZiAoZ2ltcGxpZnlfZXhwciAoJk9NUF9DTEFVU0VfU0laRSAoYyksIHByZV9w LAorCQkJCSAgTlVMTCwgaXNfZ2ltcGxlX3ZhbCwgZmJfcnZhbHVlKSA9PSBH U19FUlJPUikKKwkgICAgewogCSAgICAgIHJlbW92ZSA9IHRydWU7CiAJICAg ICAgYnJlYWs7CiAJICAgIH0KSW5kZXg6IGdjYy9vbXAtbG93LmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL29tcC1sb3cuYwkocmV2aXNpb24g Mjc0NjE4KQorKysgZ2NjL29tcC1sb3cuYwkod29ya2luZyBjb3B5KQpAQCAt NjAsNiArNjAsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENP UFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImhzYS1jb21tb24uaCIK ICNpbmNsdWRlICJzdHJpbmdwb29sLmgiCiAjaW5jbHVkZSAiYXR0cmlicy5o IgorI2luY2x1ZGUgInRyZWUtaGFzaC10cmFpdHMuaCIKIAogLyogTG93ZXJp bmcgb2YgT01QIHBhcmFsbGVsIGFuZCB3b3Jrc2hhcmUgY29uc3RydWN0cyBw cm9jZWVkcyBpbiB0d28KICAgIHBoYXNlcy4gIFRoZSBmaXJzdCBwaGFzZSBz Y2FucyB0aGUgZnVuY3Rpb24gbG9va2luZyBmb3IgT01QIHN0YXRlbWVudHMK QEAgLTEyNyw2ICsxMjgsOSBAQCBzdHJ1Y3Qgb21wX2NvbnRleHQKICAgICAg Y29ycmVzcG9uZGluZyB0cmFja2luZyBsb29wIGl0ZXJhdGlvbiB2YXJpYWJs ZXMuICAqLwogICBoYXNoX21hcDx0cmVlLCB0cmVlPiAqbGFzdHByaXZhdGVf Y29uZGl0aW9uYWxfbWFwOwogCisgIC8qIEhhc2ggbWFwIG9mIG5vbi1jb250 aWd1b3VzIGFycmF5cyBpbiB0aGlzIGNvbnRleHQuICAqLworICBoYXNoX21h cDx0cmVlX29wZXJhbmRfaGFzaCwgdHJlZT4gKm5vbl9jb250aWd1b3VzX2Fy cmF5czsKKwogICAvKiBOZXN0aW5nIGRlcHRoIG9mIHRoaXMgY29udGV4dC4g IFVzZWQgdG8gYmVhdXRpZnkgZXJyb3IgbWVzc2FnZXMgcmUKICAgICAgaW52 YWxpZCBnb3Rvcy4gIFRoZSBvdXRlcm1vc3QgY3R4IGlzIGRlcHRoIDEsIHdp dGggZGVwdGggMCBiZWluZwogICAgICByZXNlcnZlZCBmb3IgdGhlIG1haW4g Ym9keSBvZiB0aGUgZnVuY3Rpb24uICAqLwpAQCAtODg1LDYgKzg4OSwxMzcg QEAgb21wX2NvcHlfZGVjbCAodHJlZSB2YXIsIGNvcHlfYm9keV9kYXRhICpj YikKICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIH0KIAorLyogSGVscGVy IGZ1bmN0aW9uIGZvciBjcmVhdGVfbm9uY29udGlnX2FycmF5X2Rlc2NyX3R5 cGUoKSwgdG8gYXBwZW5kIGEgbmV3IGZpZWxkCisgICB0byBhIHJlY29yZCB0 eXBlLiAgKi8KKworc3RhdGljIHZvaWQKK2FwcGVuZF9maWVsZF90b19yZWNv cmRfdHlwZSAodHJlZSByZWNvcmRfdHlwZSwgdHJlZSBmbGRfaWRlbnQsIHRy ZWUgZmxkX3R5cGUpCit7CisgIHRyZWUgKnAsIGZsZCA9IGJ1aWxkX2RlY2wg KFVOS05PV05fTE9DQVRJT04sIEZJRUxEX0RFQ0wsIGZsZF9pZGVudCwgZmxk X3R5cGUpOworICBERUNMX0NPTlRFWFQgKGZsZCkgPSByZWNvcmRfdHlwZTsK KworICBmb3IgKHAgPSAmVFlQRV9GSUVMRFMgKHJlY29yZF90eXBlKTsgKnA7 IHAgPSAmREVDTF9DSEFJTiAoKnApKQorICAgIDsKKyAgKnAgPSBmbGQ7Cit9 CisKKy8qIENyZWF0ZSB0eXBlIGZvciBub24tY29udGlndW91cyBhcnJheSBk ZXNjcmlwdG9yLiBSZXR1cm5zIGNyZWF0ZWQgdHlwZSwgYW5kCisgICByZXR1 cm5zIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucyBpbiAqRElNX05VTS4gICov CisKK3N0YXRpYyB0cmVlCitjcmVhdGVfbm9uY29udGlnX2FycmF5X2Rlc2Ny X3R5cGUgKHRyZWUgZGVjbCwgdHJlZSBkaW1zLCBpbnQgKmRpbV9udW0pCit7 CisgIGludCBuID0gMDsKKyAgdHJlZSBhcnJheV9kZXNjcl90eXBlLCBuYW1l LCB4OworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGRpbXMpID09IFRSRUVf TElTVCk7CisKKyAgYXJyYXlfZGVzY3JfdHlwZSA9IGxhbmdfaG9va3MudHlw ZXMubWFrZV90eXBlIChSRUNPUkRfVFlQRSk7CisgIG5hbWUgPSBjcmVhdGVf dG1wX3Zhcl9uYW1lICgiLm9tcF9ub25jb250aWdfYXJyYXlfZGVzY3JfdHlw ZSIpOworICBuYW1lID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwg VFlQRV9ERUNMLCBuYW1lLCBhcnJheV9kZXNjcl90eXBlKTsKKyAgREVDTF9B UlRJRklDSUFMIChuYW1lKSA9IDE7CisgIERFQ0xfTkFNRUxFU1MgKG5hbWUp ID0gMTsKKyAgVFlQRV9OQU1FIChhcnJheV9kZXNjcl90eXBlKSA9IG5hbWU7 CisgIFRZUEVfQVJUSUZJQ0lBTCAoYXJyYXlfZGVzY3JfdHlwZSkgPSAxOwor CisgIC8qIE1haW4gc3RhcnRpbmcgcG9pbnRlci9hcnJheS4gICovCisgIHRy ZWUgbWFpbl92YXJfdHlwZSA9IFRSRUVfVFlQRSAoZGVjbCk7CisgIGlmIChU UkVFX0NPREUgKG1haW5fdmFyX3R5cGUpID09IFJFRkVSRU5DRV9UWVBFKQor ICAgIG1haW5fdmFyX3R5cGUgPSBUUkVFX1RZUEUgKG1haW5fdmFyX3R5cGUp OworICBhcHBlbmRfZmllbGRfdG9fcmVjb3JkX3R5cGUgKGFycmF5X2Rlc2Ny X3R5cGUsIERFQ0xfTkFNRSAoZGVjbCksCisJCQkgICAgICAgKFRSRUVfQ09E RSAoVFJFRV9UWVBFIChkZWNsKSkgPT0gUE9JTlRFUl9UWVBFCisJCQkJPyBt YWluX3Zhcl90eXBlCisJCQkJOiBidWlsZF9wb2ludGVyX3R5cGUgKG1haW5f dmFyX3R5cGUpKSk7CisgIC8qIE51bWJlciBvZiBkaW1lbnNpb25zLiAgKi8K KyAgYXBwZW5kX2ZpZWxkX3RvX3JlY29yZF90eXBlIChhcnJheV9kZXNjcl90 eXBlLCBnZXRfaWRlbnRpZmllciAoIl9fZGltX251bSIpLAorCQkJICAgICAg IHNpemV0eXBlKTsKKworICBmb3IgKHggPSBkaW1zOyB4OyB4ID0gVFJFRV9D SEFJTiAoeCksIG4rKykKKyAgICB7CisgICAgICBjaGFyICpmbGRuYW1lOwor ICAgICAgLyogT25lIGZvciB0aGUgc3RhcnQgaW5kZXguICAqLworICAgICAg QVNNX0ZPUk1BVF9QUklWQVRFX05BTUUgKGZsZG5hbWUsICJfX2RpbV9iYXNl Iiwgbik7CisgICAgICBhcHBlbmRfZmllbGRfdG9fcmVjb3JkX3R5cGUgKGFy cmF5X2Rlc2NyX3R5cGUsIGdldF9pZGVudGlmaWVyIChmbGRuYW1lKSwKKwkJ CQkgICBzaXpldHlwZSk7CisgICAgICAvKiBPbmUgZm9yIHRoZSBsZW5ndGgu ICAqLworICAgICAgQVNNX0ZPUk1BVF9QUklWQVRFX05BTUUgKGZsZG5hbWUs ICJfX2RpbV9sZW5ndGgiLCBuKTsKKyAgICAgIGFwcGVuZF9maWVsZF90b19y ZWNvcmRfdHlwZSAoYXJyYXlfZGVzY3JfdHlwZSwgZ2V0X2lkZW50aWZpZXIg KGZsZG5hbWUpLAorCQkJCSAgIHNpemV0eXBlKTsKKyAgICAgIC8qIE9uZSBm b3IgdGhlIGVsZW1lbnQgc2l6ZS4gICovCisgICAgICBBU01fRk9STUFUX1BS SVZBVEVfTkFNRSAoZmxkbmFtZSwgIl9fZGltX2VsZW1fc2l6ZSIsIG4pOwor ICAgICAgYXBwZW5kX2ZpZWxkX3RvX3JlY29yZF90eXBlIChhcnJheV9kZXNj cl90eXBlLCBnZXRfaWRlbnRpZmllciAoZmxkbmFtZSksCisJCQkJICAgc2l6 ZXR5cGUpOworICAgICAgLyogT25lIGZvciBpc19hcnJheSBmbGFnLiAgKi8K KyAgICAgIEFTTV9GT1JNQVRfUFJJVkFURV9OQU1FIChmbGRuYW1lLCAiX19k aW1faXNfYXJyYXkiLCBuKTsKKyAgICAgIGFwcGVuZF9maWVsZF90b19yZWNv cmRfdHlwZSAoYXJyYXlfZGVzY3JfdHlwZSwgZ2V0X2lkZW50aWZpZXIgKGZs ZG5hbWUpLAorCQkJCSAgIHNpemV0eXBlKTsKKyAgICB9CisKKyAgbGF5b3V0 X3R5cGUgKGFycmF5X2Rlc2NyX3R5cGUpOworICAqZGltX251bSA9IG47Cisg IHJldHVybiBhcnJheV9kZXNjcl90eXBlOworfQorCisvKiBHZW5lcmF0ZSBj b2RlIHNlcXVlbmNlIGZvciBpbml0aWFsaXppbmcgbm9uLWNvbnRpZ3VvdXMg YXJyYXkgZGVzY3JpcHRvci4gICovCisKK3N0YXRpYyB2b2lkCitjcmVhdGVf bm9uY29udGlnX2FycmF5X2Rlc2NyX2luaXRfY29kZSAodHJlZSBhcnJheV9k ZXNjciwgdHJlZSBhcnJheV92YXIsCisJCQkJCXRyZWUgZGltZW5zaW9ucywg aW50IGRpbV9udW0sCisJCQkJCWdpbXBsZV9zZXEgKmlsaXN0KQoreworICB0 cmVlIGZsZCwgZmxkcmVmOworICB0cmVlIGFycmF5X2Rlc2NyX3R5cGUgPSBU UkVFX1RZUEUgKGFycmF5X2Rlc2NyKTsKKyAgdHJlZSBkaW1fdHlwZSA9IFRS RUVfVFlQRSAoYXJyYXlfdmFyKTsKKworICBmbGQgPSBUWVBFX0ZJRUxEUyAo YXJyYXlfZGVzY3JfdHlwZSk7CisgIGZsZHJlZiA9IG9tcF9idWlsZF9jb21w b25lbnRfcmVmIChhcnJheV9kZXNjciwgZmxkKTsKKyAgZ2ltcGxpZnlfYXNz aWduIChmbGRyZWYsIChUUkVFX0NPREUgKGRpbV90eXBlKSA9PSBBUlJBWV9U WVBFCisJCQkgICAgPyBidWlsZF9mb2xkX2FkZHJfZXhwciAoYXJyYXlfdmFy KSA6IGFycmF5X3ZhciksCisJCSAgIGlsaXN0KTsKKworICBpZiAoVFJFRV9D T0RFIChkaW1fdHlwZSkgPT0gUkVGRVJFTkNFX1RZUEUpCisgICAgZGltX3R5 cGUgPSBUUkVFX1RZUEUgKGRpbV90eXBlKTsKKworICBmbGQgPSBUUkVFX0NI QUlOIChmbGQpOworICBmbGRyZWYgPSBvbXBfYnVpbGRfY29tcG9uZW50X3Jl ZiAoYXJyYXlfZGVzY3IsIGZsZCk7CisgIGdpbXBsaWZ5X2Fzc2lnbiAoZmxk cmVmLCBidWlsZF9pbnRfY3N0IChzaXpldHlwZSwgZGltX251bSksIGlsaXN0 KTsKKworICB3aGlsZSAoZGltZW5zaW9ucykKKyAgICB7CisgICAgICB0cmVl IGRpbV9iYXNlID0gZm9sZF9jb252ZXJ0IChzaXpldHlwZSwgVFJFRV9QVVJQ T1NFIChkaW1lbnNpb25zKSk7CisgICAgICB0cmVlIGRpbV9sZW5ndGggPSBm b2xkX2NvbnZlcnQgKHNpemV0eXBlLCBUUkVFX1ZBTFVFIChkaW1lbnNpb25z KSk7CisgICAgICB0cmVlIGRpbV9lbGVtX3NpemUgPSBUWVBFX1NJWkVfVU5J VCAoVFJFRV9UWVBFIChkaW1fdHlwZSkpOworICAgICAgdHJlZSBkaW1faXNf YXJyYXkgPSAoVFJFRV9DT0RFIChkaW1fdHlwZSkgPT0gQVJSQVlfVFlQRQor CQkJICAgPyBpbnRlZ2VyX29uZV9ub2RlIDogaW50ZWdlcl96ZXJvX25vZGUp OworICAgICAgLyogU2V0IGJhc2UuICAqLworICAgICAgZmxkID0gVFJFRV9D SEFJTiAoZmxkKTsKKyAgICAgIGZsZHJlZiA9IG9tcF9idWlsZF9jb21wb25l bnRfcmVmIChhcnJheV9kZXNjciwgZmxkKTsKKyAgICAgIGRpbV9iYXNlID0g Zm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgc2l6ZXR5cGUsIGRpbV9iYXNlLCBk aW1fZWxlbV9zaXplKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAoZmxkcmVm LCBkaW1fYmFzZSwgaWxpc3QpOworCisgICAgICAvKiBTZXQgbGVuZ3RoLiAg Ki8KKyAgICAgIGZsZCA9IFRSRUVfQ0hBSU4gKGZsZCk7CisgICAgICBmbGRy ZWYgPSBvbXBfYnVpbGRfY29tcG9uZW50X3JlZiAoYXJyYXlfZGVzY3IsIGZs ZCk7CisgICAgICBkaW1fbGVuZ3RoID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQ Uiwgc2l6ZXR5cGUsIGRpbV9sZW5ndGgsIGRpbV9lbGVtX3NpemUpOworICAg ICAgZ2ltcGxpZnlfYXNzaWduIChmbGRyZWYsIGRpbV9sZW5ndGgsIGlsaXN0 KTsKKworICAgICAgLyogU2V0IGVsZW1fc2l6ZS4gICovCisgICAgICBmbGQg PSBUUkVFX0NIQUlOIChmbGQpOworICAgICAgZmxkcmVmID0gb21wX2J1aWxk X2NvbXBvbmVudF9yZWYgKGFycmF5X2Rlc2NyLCBmbGQpOworICAgICAgZGlt X2VsZW1fc2l6ZSA9IGZvbGRfY29udmVydCAoc2l6ZXR5cGUsIGRpbV9lbGVt X3NpemUpOworICAgICAgZ2ltcGxpZnlfYXNzaWduIChmbGRyZWYsIGRpbV9l bGVtX3NpemUsIGlsaXN0KTsKKworICAgICAgLyogU2V0IGlzX2FycmF5IGZs YWcuICAqLworICAgICAgZmxkID0gVFJFRV9DSEFJTiAoZmxkKTsKKyAgICAg IGZsZHJlZiA9IG9tcF9idWlsZF9jb21wb25lbnRfcmVmIChhcnJheV9kZXNj ciwgZmxkKTsKKyAgICAgIGRpbV9pc19hcnJheSA9IGZvbGRfY29udmVydCAo c2l6ZXR5cGUsIGRpbV9pc19hcnJheSk7CisgICAgICBnaW1wbGlmeV9hc3Np Z24gKGZsZHJlZiwgZGltX2lzX2FycmF5LCBpbGlzdCk7CisKKyAgICAgIGRp bWVuc2lvbnMgPSBUUkVFX0NIQUlOIChkaW1lbnNpb25zKTsKKyAgICAgIGRp bV90eXBlID0gVFJFRV9UWVBFIChkaW1fdHlwZSk7CisgICAgfQorICBnY2Nf YXNzZXJ0IChUUkVFX0NIQUlOIChmbGQpID09IE5VTExfVFJFRSk7Cit9CisK IC8qIENyZWF0ZSBhIG5ldyBjb250ZXh0LCB3aXRoIE9VVEVSX0NUWCBiZWlu ZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gICovCiAKIHN0YXRpYyBvbXBf Y29udGV4dCAqCkBAIC05MjEsNiArMTA1Niw4IEBAIG5ld19vbXBfY29udGV4 dCAoZ2ltcGxlICpzdG10LCBvbXBfY29udGV4dCAqb3V0ZXJfCiAKICAgY3R4 LT5jYi5kZWNsX21hcCA9IG5ldyBoYXNoX21hcDx0cmVlLCB0cmVlPjsKIAor ICBjdHgtPm5vbl9jb250aWd1b3VzX2FycmF5cyA9IG5ldyBoYXNoX21hcDx0 cmVlX29wZXJhbmRfaGFzaCwgdHJlZT47CisKICAgcmV0dXJuIGN0eDsKIH0K IApAQCAtMTAwMyw2ICsxMTQwLDggQEAgZGVsZXRlX29tcF9jb250ZXh0IChz cGxheV90cmVlX3ZhbHVlIHZhbHVlKQogCiAgIGRlbGV0ZSBjdHgtPmxhc3Rw cml2YXRlX2NvbmRpdGlvbmFsX21hcDsKIAorICBkZWxldGUgY3R4LT5ub25f Y29udGlndW91c19hcnJheXM7CisKICAgWERFTEVURSAoY3R4KTsKIH0KIApA QCAtMTM1Myw2ICsxNDkyLDQyIEBAIHNjYW5fc2hhcmluZ19jbGF1c2VzICh0 cmVlIGNsYXVzZXMsIG9tcF9jb250ZXh0ICpjCiAJICAgICAgaW5zdGFsbF92 YXJfbG9jYWwgKGRlY2wsIGN0eCk7CiAJICAgICAgYnJlYWs7CiAJICAgIH0K KworCSAgaWYgKE9NUF9DTEFVU0VfQ09ERSAoYykgPT0gT01QX0NMQVVTRV9N QVAKKwkgICAgICAmJiBHT01QX01BUF9OT05DT05USUdfQVJSQVlfUCAoT01Q X0NMQVVTRV9NQVBfS0lORCAoYykpKQorCSAgICB7CisJICAgICAgdHJlZSBh cnJheV9kZWNsID0gT01QX0NMQVVTRV9ERUNMIChjKTsKKwkgICAgICB0cmVl IGFycmF5X2RpbWVuc2lvbnMgPSBPTVBfQ0xBVVNFX1NJWkUgKGMpOworCSAg ICAgIHRyZWUgYXJyYXlfdHlwZSA9IFRSRUVfVFlQRSAoYXJyYXlfZGVjbCk7 CisJICAgICAgYm9vbCBieV9yZWYgPSAoVFJFRV9DT0RFIChhcnJheV90eXBl KSA9PSBBUlJBWV9UWVBFCisJCQkgICAgID8gdHJ1ZSA6IGZhbHNlKTsKKwor CSAgICAgIC8qIENoZWNraW5nIGNvZGUgdG8gZW5zdXJlIHdlIG9ubHkgaGF2 ZSBhcnJheXMgYXQgdG9wIGRpbWVuc2lvbi4KKwkJIFRoaXMgbGltaXRhdGlv biBtaWdodCBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4gICovCisJICAgICAg aWYgKFRSRUVfQ09ERSAoYXJyYXlfdHlwZSkgPT0gUkVGRVJFTkNFX1RZUEUp CisJCWFycmF5X3R5cGUgPSBUUkVFX1RZUEUgKGFycmF5X3R5cGUpOworCSAg ICAgIHRyZWUgdCA9IGFycmF5X3R5cGUsIHByZXZfdCA9IE5VTExfVFJFRTsK KwkgICAgICB3aGlsZSAodCkKKwkJeworCQkgIGlmIChUUkVFX0NPREUgKHQp ID09IEFSUkFZX1RZUEUgJiYgcHJldl90KQorCQkgICAgeworCQkgICAgICBl cnJvcl9hdCAoZ2ltcGxlX2xvY2F0aW9uIChjdHgtPnN0bXQpLCAiYXJyYXkg dHlwZXMgYXJlIgorCQkJCSIgb25seSBhbGxvd2VkIGF0IG91dGVybW9zdCBk aW1lbnNpb24gb2YiCisJCQkJIiBub24tY29udGlndW91cyBhcnJheSIpOwor CQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJICBwcmV2X3QgPSB0OworCQkg IHQgPSBUUkVFX1RZUEUgKHQpOworCQl9CisKKwkgICAgICBpbnN0YWxsX3Zh cl9maWVsZCAoYXJyYXlfZGVjbCwgYnlfcmVmLCAzLCBjdHgpOworCSAgICAg IHRyZWUgbmV3X3ZhciA9IGluc3RhbGxfdmFyX2xvY2FsIChhcnJheV9kZWNs LCBjdHgpOworCisJICAgICAgYm9vbCBleGlzdGVkID0gY3R4LT5ub25fY29u dGlndW91c19hcnJheXMtPnB1dCAobmV3X3ZhciwgYXJyYXlfZGltZW5zaW9u cyk7CisJICAgICAgZ2NjX2Fzc2VydCAoIWV4aXN0ZWQpOworCSAgICAgIGJy ZWFrOworCSAgICB9CisKIAkgIGlmIChERUNMX1AgKGRlY2wpKQogCSAgICB7 CiAJICAgICAgaWYgKERFQ0xfU0laRSAoZGVjbCkKQEAgLTI1ODMsNiArMjc1 OCw1MCBAQCBzY2FuX29tcF9zaW5nbGUgKGdvbXBfc2luZ2xlICpzdG10LCBv bXBfY29udGV4dCAqbwogICAgIGxheW91dF90eXBlIChjdHgtPnJlY29yZF90 eXBlKTsKIH0KIAorLyogUmVvcmRlciBjbGF1c2VzIHNvIHRoYXQgbm9uLWNv bnRpZ3VvdXMgYXJyYXkgbWFwIGNsYXVzZXMgYXJlIHBsYWNlZCBhdCB0aGUg dmVyeQorICAgZnJvbnQgb2YgdGhlIGNoYWluLiAgKi8KKworc3RhdGljIHZv aWQKK3Jlb3JkZXJfbm9uY29udGlnX2FycmF5X2NsYXVzZXMgKHRyZWUgKmNs YXVzZXNfcHRyKQoreworICB0cmVlIGMsIGNsYXVzZXMgPSAqY2xhdXNlc19w dHI7CisgIHRyZWUgcHJldl9jbGF1c2UgPSBOVUxMX1RSRUUsIG5leHRfY2xh dXNlOworICB0cmVlIGFycmF5X2NsYXVzZXMgPSBOVUxMX1RSRUUsIGFycmF5 X2NsYXVzZXNfdGFpbCA9IE5VTExfVFJFRTsKKworICBmb3IgKGMgPSBjbGF1 c2VzOyBjOyBjID0gbmV4dF9jbGF1c2UpCisgICAgeworICAgICAgbmV4dF9j bGF1c2UgPSBPTVBfQ0xBVVNFX0NIQUlOIChjKTsKKworICAgICAgaWYgKE9N UF9DTEFVU0VfQ09ERSAoYykgPT0gT01QX0NMQVVTRV9NQVAKKwkgICYmIEdP TVBfTUFQX05PTkNPTlRJR19BUlJBWV9QIChPTVBfQ0xBVVNFX01BUF9LSU5E IChjKSkpCisJeworCSAgLyogVW5jaGFpbiBjIGZyb20gY2xhdXNlcy4gICov CisJICBpZiAoYyA9PSBjbGF1c2VzKQorCSAgICBjbGF1c2VzID0gbmV4dF9j bGF1c2U7CisKKwkgIC8qIExpbmsgb24gdG8gYXJyYXlfY2xhdXNlcy4gICov CisJICBpZiAoYXJyYXlfY2xhdXNlc190YWlsKQorCSAgICBPTVBfQ0xBVVNF X0NIQUlOIChhcnJheV9jbGF1c2VzX3RhaWwpID0gYzsKKwkgIGVsc2UKKwkg ICAgYXJyYXlfY2xhdXNlcyA9IGM7CisJICBhcnJheV9jbGF1c2VzX3RhaWwg PSBjOworCisJICBpZiAocHJldl9jbGF1c2UpCisJICAgIE9NUF9DTEFVU0Vf Q0hBSU4gKHByZXZfY2xhdXNlKSA9IG5leHRfY2xhdXNlOworCSAgY29udGlu dWU7CisJfQorCisgICAgICBwcmV2X2NsYXVzZSA9IGM7CisgICAgfSAgCisK KyAgLyogUGxhY2Ugbm9uLWNvbnRpZ3VvdXMgYXJyYXkgY2xhdXNlcyBhdCB0 aGUgc3RhcnQgb2YgdGhlIGNsYXVzZSBsaXN0LiAgKi8KKyAgaWYgKGFycmF5 X2NsYXVzZXMpCisgICAgeworICAgICAgT01QX0NMQVVTRV9DSEFJTiAoYXJy YXlfY2xhdXNlc190YWlsKSA9IGNsYXVzZXM7CisgICAgICAqY2xhdXNlc19w dHIgPSBhcnJheV9jbGF1c2VzOworICAgIH0KK30KKwogLyogU2NhbiBhIEdJ TVBMRV9PTVBfVEFSR0VULiAgKi8KIAogc3RhdGljIHZvaWQKQEAgLTI1OTEs NyArMjgxMCw2IEBAIHNjYW5fb21wX3RhcmdldCAoZ29tcF90YXJnZXQgKnN0 bXQsIG9tcF9jb250ZXh0ICpvCiAgIG9tcF9jb250ZXh0ICpjdHg7CiAgIHRy ZWUgbmFtZTsKICAgYm9vbCBvZmZsb2FkZWQgPSBpc19naW1wbGVfb21wX29m ZmxvYWRlZCAoc3RtdCk7Ci0gIHRyZWUgY2xhdXNlcyA9IGdpbXBsZV9vbXBf dGFyZ2V0X2NsYXVzZXMgKHN0bXQpOwogCiAgIGN0eCA9IG5ld19vbXBfY29u dGV4dCAoc3RtdCwgb3V0ZXJfY3R4KTsKICAgY3R4LT5maWVsZF9tYXAgPSBz cGxheV90cmVlX25ldyAoc3BsYXlfdHJlZV9jb21wYXJlX3BvaW50ZXJzLCAw LCAwKTsKQEAgLTI2MTAsNiArMjgyOCwxNCBAQCBzY2FuX29tcF90YXJnZXQg KGdvbXBfdGFyZ2V0ICpzdG10LCBvbXBfY29udGV4dCAqbwogICAgICAgZ2lt cGxlX29tcF90YXJnZXRfc2V0X2NoaWxkX2ZuIChzdG10LCBjdHgtPmNiLmRz dF9mbik7CiAgICAgfQogCisgIC8qIElmIGlzIE9wZW5BQ0MgY29uc3RydWN0 LCBwdXQgbm9uLWNvbnRpZ3VvdXMgYXJyYXkgY2xhdXNlcyAoaWYgYW55KQor ICAgICBpbiBmcm9udCBvZiBjbGF1c2UgY2hhaW4uIFRoZSBydW50aW1lIGNh biB0aGVuIHRlc3QgdGhlIGZpcnN0IHRvIHNlZQorICAgICBpZiB0aGUgYWRk aXRpb25hbCBtYXAgcHJvY2Vzc2luZyBmb3IgdGhlbSBpcyByZXF1aXJlZC4g ICovCisgIGlmIChpc19naW1wbGVfb21wX29hY2MgKHN0bXQpKQorICAgIHJl b3JkZXJfbm9uY29udGlnX2FycmF5X2NsYXVzZXMgKGdpbXBsZV9vbXBfdGFy Z2V0X2NsYXVzZXNfcHRyIChzdG10KSk7CisKKyAgdHJlZSBjbGF1c2VzID0g Z2ltcGxlX29tcF90YXJnZXRfY2xhdXNlcyAoc3RtdCk7CisgIAogICBzY2Fu X3NoYXJpbmdfY2xhdXNlcyAoY2xhdXNlcywgY3R4KTsKICAgc2Nhbl9vbXAg KGdpbXBsZV9vbXBfYm9keV9wdHIgKHN0bXQpLCBjdHgpOwogCkBAIC0xMTMy Niw2ICsxMTU1MiwxNSBAQCBsb3dlcl9vbXBfdGFyZ2V0IChnaW1wbGVfc3Rt dF9pdGVyYXRvciAqZ3NpX3AsIG9tcAogCSAgY2FzZSBHT01QX01BUF9GT1JD RV9QUkVTRU5UOgogCSAgY2FzZSBHT01QX01BUF9GT1JDRV9ERVZJQ0VQVFI6 CiAJICBjYXNlIEdPTVBfTUFQX0RFVklDRV9SRVNJREVOVDoKKwkgIGNhc2Ug R09NUF9NQVBfTk9OQ09OVElHX0FSUkFZX1RPOgorCSAgY2FzZSBHT01QX01B UF9OT05DT05USUdfQVJSQVlfRlJPTToKKwkgIGNhc2UgR09NUF9NQVBfTk9O Q09OVElHX0FSUkFZX1RPRlJPTToKKwkgIGNhc2UgR09NUF9NQVBfTk9OQ09O VElHX0FSUkFZX0ZPUkNFX1RPOgorCSAgY2FzZSBHT01QX01BUF9OT05DT05U SUdfQVJSQVlfRk9SQ0VfRlJPTToKKwkgIGNhc2UgR09NUF9NQVBfTk9OQ09O VElHX0FSUkFZX0ZPUkNFX1RPRlJPTToKKwkgIGNhc2UgR09NUF9NQVBfTk9O Q09OVElHX0FSUkFZX0FMTE9DOgorCSAgY2FzZSBHT01QX01BUF9OT05DT05U SUdfQVJSQVlfRk9SQ0VfQUxMT0M6CisJICBjYXNlIEdPTVBfTUFQX05PTkNP TlRJR19BUlJBWV9GT1JDRV9QUkVTRU5UOgogCSAgY2FzZSBHT01QX01BUF9M SU5LOgogCSAgICBnY2NfYXNzZXJ0IChpc19naW1wbGVfb21wX29hY2MgKHN0 bXQpKTsKIAkgICAgYnJlYWs7CkBAIC0xMTM4OCw3ICsxMTYyMywxNCBAQCBs b3dlcl9vbXBfdGFyZ2V0IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpX3As IG9tcAogCWlmIChvZmZsb2FkZWQgJiYgIShPTVBfQ0xBVVNFX0NPREUgKGMp ID09IE9NUF9DTEFVU0VfTUFQCiAJCQkgICAmJiBPTVBfQ0xBVVNFX01BUF9J Tl9SRURVQ1RJT04gKGMpKSkKIAkgIHsKLQkgICAgeCA9IGJ1aWxkX3JlY2Vp dmVyX3JlZiAodmFyLCB0cnVlLCBjdHgpOworCSAgICB0cmVlIHZhcl90eXBl ID0gVFJFRV9UWVBFICh2YXIpOworCSAgICBib29sIHJjdl9ieV9yZWYgPQor CSAgICAgIChPTVBfQ0xBVVNFX0NPREUgKGMpID09IE9NUF9DTEFVU0VfTUFQ CisJICAgICAgICYmIEdPTVBfTUFQX05PTkNPTlRJR19BUlJBWV9QIChPTVBf Q0xBVVNFX01BUF9LSU5EIChjKSkKKwkgICAgICAgJiYgVFJFRV9DT0RFICh2 YXJfdHlwZSkgIT0gQVJSQVlfVFlQRQorCSAgICAgICA/IGZhbHNlIDogdHJ1 ZSk7CisKKwkgICAgeCA9IGJ1aWxkX3JlY2VpdmVyX3JlZiAodmFyLCByY3Zf YnlfcmVmLCBjdHgpOwogCSAgICB0cmVlIG5ld192YXIgPSBsb29rdXBfZGVj bCAodmFyLCBjdHgpOwogCiAJICAgIGlmIChPTVBfQ0xBVVNFX0NPREUgKGMp ID09IE9NUF9DTEFVU0VfTUFQCkBAIC0xMTYzNSw2ICsxMTg3NywyNCBAQCBs b3dlcl9vbXBfdGFyZ2V0IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpX3As IG9tcAogCQkgICAgYXZhciA9IGJ1aWxkX2ZvbGRfYWRkcl9leHByIChhdmFy KTsKIAkJICAgIGdpbXBsaWZ5X2Fzc2lnbiAoeCwgYXZhciwgJmlsaXN0KTsK IAkJICB9CisJCWVsc2UgaWYgKE9NUF9DTEFVU0VfQ09ERSAoYykgPT0gT01Q X0NMQVVTRV9NQVAKKwkJCSAmJiBHT01QX01BUF9OT05DT05USUdfQVJSQVlf UCAoT01QX0NMQVVTRV9NQVBfS0lORCAoYykpKQorCQkgIHsKKwkJICAgIGlu dCBkaW1fbnVtOworCQkgICAgdHJlZSBkaW1lbnNpb25zID0gT01QX0NMQVVT RV9TSVpFIChjKTsKKworCQkgICAgdHJlZSBhcnJheV9kZXNjcl90eXBlID0K KwkJICAgICAgY3JlYXRlX25vbmNvbnRpZ19hcnJheV9kZXNjcl90eXBlIChP TVBfQ0xBVVNFX0RFQ0wgKGMpLAorCQkJCQkJCSBkaW1lbnNpb25zLCAmZGlt X251bSk7CisJCSAgICB0cmVlIGFycmF5X2Rlc2NyID0KKwkJICAgICAgY3Jl YXRlX3RtcF92YXJfcmF3IChhcnJheV9kZXNjcl90eXBlLCAiLm9tcF9ub25j b250aWdfYXJyYXlfZGVzY3IiKTsKKwkJICAgIGdpbXBsZV9hZGRfdG1wX3Zh ciAoYXJyYXlfZGVzY3IpOworCisJCSAgICBjcmVhdGVfbm9uY29udGlnX2Fy cmF5X2Rlc2NyX2luaXRfY29kZQorCQkgICAgICAoYXJyYXlfZGVzY3IsIG92 YXIsIGRpbWVuc2lvbnMsIGRpbV9udW0sICZpbGlzdCk7CisKKwkJICAgIGdp bXBsaWZ5X2Fzc2lnbiAoeCwgYnVpbGRfZm9sZF9hZGRyX2V4cHIgKGFycmF5 X2Rlc2NyKSwgJmlsaXN0KTsKKwkJICB9CiAJCWVsc2UgaWYgKE9NUF9DTEFV U0VfQ09ERSAoYykgPT0gT01QX0NMQVVTRV9GSVJTVFBSSVZBVEUpCiAJCSAg ewogCQkgICAgZ2NjX2Fzc2VydCAoaXNfZ2ltcGxlX29tcF9vYWNjIChjdHgt PnN0bXQpKTsKQEAgLTExNjk1LDYgKzExOTU1LDkgQEAgbG93ZXJfb21wX3Rh cmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXAKIAkJICBz ID0gVFJFRV9UWVBFIChzKTsKIAkJcyA9IFRZUEVfU0laRV9VTklUIChzKTsK IAkgICAgICB9CisJICAgIGVsc2UgaWYgKE9NUF9DTEFVU0VfQ09ERSAoYykg PT0gT01QX0NMQVVTRV9NQVAKKwkJICAgICAmJiBHT01QX01BUF9OT05DT05U SUdfQVJSQVlfUCAoT01QX0NMQVVTRV9NQVBfS0lORCAoYykpKQorCSAgICAg IHMgPSBOVUxMX1RSRUU7CiAJICAgIGVsc2UKIAkgICAgICBzID0gT01QX0NM QVVTRV9TSVpFIChjKTsKIAkgICAgaWYgKHMgPT0gTlVMTF9UUkVFKQpAQCAt MTIzODQsNyArMTI2NDcsMjAyIEBAIGxvd2VyX29tcF9ncmlkX2JvZHkgKGdp bXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwKIAkJICAgICAgIGdpbXBsZV9i dWlsZF9vbXBfcmV0dXJuIChmYWxzZSkpOwogfQogCisvKiBIZWxwZXIgdG8g bG9va3VwIG5vbi1jb250aWd1b3VzIGFycmF5cyB0aHJvdWdoIG5lc3RlZCBv bXAgY29udGV4dHMuIFJldHVybnMKKyAgIFRSRUVfTElTVCBvZiBkaW1lbnNp b25zLCBhbmQgdGhlIENUWCB3aGVyZSBpdCB3YXMgZm91bmQgaW4gKkNUWF9Q LiAgKi8KIAorc3RhdGljIHRyZWUKK25vbmNvbnRpZ19hcnJheV9sb29rdXAg KHRyZWUgdCwgb21wX2NvbnRleHQgKipjdHhfcCkKK3sKKyAgb21wX2NvbnRl eHQgKmMgPSAqY3R4X3A7CisgIHdoaWxlIChjKQorICAgIHsKKyAgICAgIHRy ZWUgKmRpbXMgPSBjLT5ub25fY29udGlndW91c19hcnJheXMtPmdldCAodCk7 CisgICAgICBpZiAoZGltcykKKwl7CisJICAqY3R4X3AgPSBjOworCSAgcmV0 dXJuICpkaW1zOworCX0KKyAgICAgIGMgPSBjLT5vdXRlcjsKKyAgICB9Cisg IHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIFRlc3RzIGlmIHRoaXMgZ2lt cGxlIFNUTVQgaXMgdGhlIHN0YXJ0IG9mIGEgbm9uLWNvbnRpZ3VvdXMgYXJy YXkgYWNjZXNzCisgICBzZXF1ZW5jZS4gUmV0dXJucyB0cnVlIGlmIGZvdW5k LCBhbmQgYWxzbyByZXR1cm5zIHRoZSBnaW1wbGUgb3BlcmFuZCBwdHIKKyAg IGFuZCBkaW1lbnNpb25zIHRyZWUgbGlzdCB0aHJvdWdoICpPVVRfUkVGIGFu ZCAqT1VUX0RJTVMgcmVzcGVjdGl2ZWx5LiAgKi8KKworc3RhdGljIGJvb2wK K25vbmNvbnRpZ19hcnJheV9yZWZlcmVuY2Vfc3RhcnQgKGdpbXBsZSAqc3Rt dCwgb21wX2NvbnRleHQgKipjdHhfcCwKKwkJCQkgdHJlZSAqKm91dF9yZWYs IHRyZWUgKm91dF9kaW1zKQoreworICBpZiAoZ2ltcGxlX2NvZGUgKHN0bXQp ID09IEdJTVBMRV9BU1NJR04pCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg aSA8IGdpbXBsZV9udW1fb3BzIChzdG10KTsgaSsrKQorICAgICAgeworCXRy ZWUgKm9wID0gZ2ltcGxlX29wX3B0ciAoc3RtdCwgaSksIGRpbXM7CisJaWYg KFRSRUVfQ09ERSAoKm9wKSA9PSBBUlJBWV9SRUYpCisJICBvcCA9ICZUUkVF X09QRVJBTkQgKCpvcCwgMCk7CisJaWYgKFRSRUVfQ09ERSAoKm9wKSA9PSBN RU1fUkVGKQorCSAgb3AgPSAmVFJFRV9PUEVSQU5EICgqb3AsIDApOworCWlm ICgoZGltcyA9IG5vbmNvbnRpZ19hcnJheV9sb29rdXAgKCpvcCwgY3R4X3Ap KSAhPSBOVUxMX1RSRUUpCisJICB7CisJICAgICpvdXRfcmVmID0gb3A7CisJ ICAgICpvdXRfZGltcyA9IGRpbXM7CisJICAgIHJldHVybiB0cnVlOworCSAg fQorICAgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB0cmVl CitzY2FuX2Zvcl9vcCAodHJlZSAqdHAsIGludCAqd2Fsa19zdWJ0cmVlcywg dm9pZCAqZGF0YSkKK3sKKyAgc3RydWN0IHdhbGtfc3RtdF9pbmZvICp3aSA9 IChzdHJ1Y3Qgd2Fsa19zdG10X2luZm8gKikgZGF0YTsKKyAgdHJlZSB0ID0g KnRwOworICB0cmVlIG9wID0gKHRyZWUpIHdpLT5pbmZvOworICAqd2Fsa19z dWJ0cmVlcyA9IDE7CisgIGlmIChvcGVyYW5kX2VxdWFsX3AgKHQsIG9wLCAw KSkKKyAgICB7CisgICAgICB3aS0+aW5mbyA9IHRwOworICAgICAgcmV0dXJu IHQ7CisgICAgfQorICByZXR1cm4gTlVMTF9UUkVFOworfQorCitzdGF0aWMg dHJlZSAqCitzY2FuX2Zvcl9yZWZlcmVuY2UgKGdpbXBsZSAqc3RtdCwgdHJl ZSBvcCkKK3sKKyAgc3RydWN0IHdhbGtfc3RtdF9pbmZvIHdpOworICBtZW1z ZXQgKCZ3aSwgMCwgc2l6ZW9mICh3aSkpOworICB3aS5pbmZvID0gb3A7Cisg IGlmICh3YWxrX2dpbXBsZV9vcCAoc3RtdCwgc2Nhbl9mb3Jfb3AsICZ3aSkp CisgICAgcmV0dXJuICh0cmVlICopIHdpLmluZm87CisgIHJldHVybiBOVUxM OworfQorCitzdGF0aWMgdHJlZQorbmNhcnJheV9jcmVhdGVfYmlhcyAodHJl ZSBvcmlnX2JpYXMsIHRyZWUgdW5pdF90eXBlKQoreworICByZXR1cm4gYnVp bGQyIChNVUxUX0VYUFIsIHNpemV0eXBlLCBmb2xkX2NvbnZlcnQgKHNpemV0 eXBlLCBvcmlnX2JpYXMpLAorCQkgVFlQRV9TSVpFX1VOSVQgKHVuaXRfdHlw ZSkpOworfQorCisvKiBNYWluIHdvcmtlciBmb3IgYWRqdXN0aW5nIG5vbi1j b250aWd1b3VzIGFycmF5IGFjY2Vzc2VzLCBoYW5kbGVzIHRoZQorICAgYWRq dXN0bWVudCBvZiBtYW55IGNhc2VzIG9mIHN0YXRlbWVudCBmb3JtcywgYW5k IGNhbGxlZCBtdWx0aXBsZSB0aW1lcworICAgdG8gJ3BlZWwnIGF3YXkgZWFj aCBkaW1lbnNpb24uICAqLworCitzdGF0aWMgZ2ltcGxlX3N0bXRfaXRlcmF0 b3IKK25jYXJyYXlfZGltZW5zaW9uX3BlZWwgKG9tcF9jb250ZXh0ICpjdHgs CisJCQlnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2ksIHRyZWUgb3JpZ19kYSwK KwkJCXRyZWUgKm9wX3B0ciwgdHJlZSAqdHlwZV9wdHIsIHRyZWUgKmRpbXNf cHRyKQoreworICBnaW1wbGUgKnN0bXQgPSBnc2lfc3RtdCAoZ3NpKTsKKyAg dHJlZSBsaHMgPSBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCk7CisgIHRyZWUg cmhzID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10KTsKKworICBpZiAoZ2lt cGxlX251bV9vcHMgKHN0bXQpID09IDIKKyAgICAgICYmIFRSRUVfQ09ERSAo cmhzKSA9PSBNRU1fUkVGCisgICAgICAmJiBvcGVyYW5kX2VxdWFsX3AgKCpv cF9wdHIsIFRSRUVfT1BFUkFORCAocmhzLCAwKSwgMCkKKyAgICAgICYmICFv cGVyYW5kX2VxdWFsX3AgKG9yaWdfZGEsIFRSRUVfT1BFUkFORCAocmhzLCAw KSwgMCkKKyAgICAgICYmIChUUkVFX09QRVJBTkQgKHJocywgMSkgPT0gTlVM TF9UUkVFCisJICB8fCBpbnRlZ2VyX3plcm9wIChUUkVFX09QRVJBTkQgKHJo cywgMSkpKSkKKyAgICB7CisgICAgICBnY2NfYXNzZXJ0IChUUkVFX0NPREUg KFRSRUVfVFlQRSAoKnR5cGVfcHRyKSkgPT0gUE9JTlRFUl9UWVBFKTsKKyAg ICAgICp0eXBlX3B0ciA9IFRSRUVfVFlQRSAoKnR5cGVfcHRyKTsKKyAgICB9 CisgIGVsc2UgCisgICAgeworICAgICAgZ2ltcGxlICpnOworICAgICAgZ2lt cGxlX3NlcSBpbGlzdCA9IE5VTEw7CisgICAgICB0cmVlIGJpYXMsIHQ7Cisg ICAgICB0cmVlIG9wID0gKm9wX3B0cjsKKyAgICAgIHRyZWUgb3JpZ190eXBl ID0gKnR5cGVfcHRyOworICAgICAgdHJlZSBvcmlnX2JpYXMgPSBUUkVFX1BV UlBPU0UgKCpkaW1zX3B0cik7CisgICAgICBib29sIGJ5X3JlZiA9IGZhbHNl OworCisgICAgICBpZiAoVFJFRV9DT0RFIChvcmlnX2JpYXMpICE9IElOVEVH RVJfQ1NUKQorCW9yaWdfYmlhcyA9IGxvb2t1cF9kZWNsIChvcmlnX2JpYXMs IGN0eCk7CisKKyAgICAgIGlmIChnaW1wbGVfbnVtX29wcyAoc3RtdCkgPT0g MikKKwl7CisJICBpZiAoVFJFRV9DT0RFIChyaHMpID09IEFERFJfRVhQUikK KwkgICAgeworCSAgICAgIHJocyA9IFRSRUVfT1BFUkFORCAocmhzLCAwKTsK KwkgICAgICAqZGltc19wdHIgPSBOVUxMX1RSRUU7CisJICAgIH0KKworCSAg aWYgKFRSRUVfQ09ERSAocmhzKSA9PSBBUlJBWV9SRUYKKwkgICAgICAmJiBU UkVFX0NPREUgKFRSRUVfT1BFUkFORCAocmhzLCAwKSkgPT0gTUVNX1JFRgor CSAgICAgICYmIG9wZXJhbmRfZXF1YWxfcCAoVFJFRV9PUEVSQU5EIChUUkVF X09QRVJBTkQgKHJocywgMCksIDApLAorCQkJCSAgKm9wX3B0ciwgMCkpCisJ ICAgIHsKKwkgICAgICBiaWFzID0gbmNhcnJheV9jcmVhdGVfYmlhcyAob3Jp Z19iaWFzLAorCQkJCQkgIFRSRUVfVFlQRSAoVFJFRV9UWVBFIChvcmlnX3R5 cGUpKSk7CisJICAgICAgKnR5cGVfcHRyID0gVFJFRV9UWVBFIChUUkVFX1RZ UEUgKG9yaWdfdHlwZSkpOworCSAgICB9CisJICBlbHNlIGlmIChUUkVFX0NP REUgKHJocykgPT0gQVJSQVlfUkVGCisJCSAgICYmIFRSRUVfQ09ERSAoVFJF RV9PUEVSQU5EIChyaHMsIDApKSA9PSBWQVJfREVDTAorCQkgICAmJiBvcGVy YW5kX2VxdWFsX3AgKFRSRUVfT1BFUkFORCAocmhzLCAwKSwgKm9wX3B0ciwg MCkpCisJICAgIHsKKwkgICAgICB0cmVlIHB0cl90eXBlID0gYnVpbGRfcG9p bnRlcl90eXBlIChvcmlnX3R5cGUpOworCSAgICAgIG9wID0gY3JlYXRlX3Rt cF92YXIgKHB0cl90eXBlKTsKKwkgICAgICBnaW1wbGlmeV9hc3NpZ24gKG9w LCBidWlsZF9mb2xkX2FkZHJfZXhwciAoVFJFRV9PUEVSQU5EIChyaHMsIDAp KSwKKwkJCSAgICAgICAmaWxpc3QpOworCSAgICAgIGJpYXMgPSBuY2FycmF5 X2NyZWF0ZV9iaWFzIChvcmlnX2JpYXMsIFRSRUVfVFlQRSAob3JpZ190eXBl KSk7CisJICAgICAgKnR5cGVfcHRyID0gVFJFRV9UWVBFIChvcmlnX3R5cGUp OworCSAgICAgIG9yaWdfdHlwZSA9IHB0cl90eXBlOworCSAgICAgIGJ5X3Jl ZiA9IHRydWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKFRSRUVfQ09ERSAocmhz KSA9PSBNRU1fUkVGCisJCSAgICYmIG9wZXJhbmRfZXF1YWxfcCAoKm9wX3B0 ciwgVFJFRV9PUEVSQU5EIChyaHMsIDApLCAwKQorCQkgICAmJiBUUkVFX09Q RVJBTkQgKHJocywgMSkgIT0gTlVMTF9UUkVFKQorCSAgICB7CisJICAgICAg YmlhcyA9IG5jYXJyYXlfY3JlYXRlX2JpYXMgKG9yaWdfYmlhcywgVFJFRV9U WVBFIChvcmlnX3R5cGUpKTsKKwkgICAgICAqdHlwZV9wdHIgPSBUUkVFX1RZ UEUgKG9yaWdfdHlwZSk7CisJICAgIH0KKwkgIGVsc2UgaWYgKFRSRUVfQ09E RSAobGhzKSA9PSBNRU1fUkVGCisJCSAgICYmIG9wZXJhbmRfZXF1YWxfcCAo Km9wX3B0ciwgVFJFRV9PUEVSQU5EIChsaHMsIDApLCAwKSkKKwkgICAgewor CSAgICAgIGlmICgqZGltc19wdHIgIT0gTlVMTF9UUkVFKQorCQl7CisJCSAg Z2NjX2Fzc2VydCAoVFJFRV9DSEFJTiAoKmRpbXNfcHRyKSA9PSBOVUxMX1RS RUUpOworCQkgIGJpYXMgPSBuY2FycmF5X2NyZWF0ZV9iaWFzIChvcmlnX2Jp YXMsIFRSRUVfVFlQRSAob3JpZ190eXBlKSk7CisJCSAgKnR5cGVfcHRyID0g VFJFRV9UWVBFIChvcmlnX3R5cGUpOworCQl9CisJICAgICAgZWxzZQorCQkv KiBUaGlzIHNob3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBub24tY29udGlndW91 cyBhcnJheSBhY2Nlc3MKKwkJICAgc2VxdWVuY2UuICAqLworCQlyZXR1cm4g Z3NpOworCSAgICB9CisJICBlbHNlCisJICAgIGdjY191bnJlYWNoYWJsZSAo KTsKKwl9CisgICAgICBlbHNlIGlmIChnaW1wbGVfbnVtX29wcyAoc3RtdCkg PT0gMworCSAgICAgICAmJiBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChzdG10 KSA9PSBQT0lOVEVSX1BMVVNfRVhQUgorCSAgICAgICAmJiBvcGVyYW5kX2Vx dWFsX3AgKCpvcF9wdHIsIHJocywgMCkpCisJeworCSAgYmlhcyA9IG5jYXJy YXlfY3JlYXRlX2JpYXMgKG9yaWdfYmlhcywgVFJFRV9UWVBFIChvcmlnX3R5 cGUpKTsKKwl9CisgICAgICBlbHNlCisJZ2NjX3VucmVhY2hhYmxlICgpOwor CisgICAgICBiaWFzID0gZm9sZF9idWlsZDEgKE5FR0FURV9FWFBSLCBzaXpl dHlwZSwgYmlhcyk7CisgICAgICBiaWFzID0gZm9sZF9idWlsZDIgKFBPSU5U RVJfUExVU19FWFBSLCBvcmlnX3R5cGUsIG9wLCBiaWFzKTsKKworICAgICAg dCA9IGNyZWF0ZV90bXBfdmFyIChieV9yZWYgPyBidWlsZF9wb2ludGVyX3R5 cGUgKG9yaWdfdHlwZSkgOiBvcmlnX3R5cGUpOworCisgICAgICBnID0gZ2lt cGxpZnlfYXNzaWduICh0LCBiaWFzLCAmaWxpc3QpOworICAgICAgZ3NpX2lu c2VydF9zZXFfYmVmb3JlICgmZ3NpLCBpbGlzdCwgR1NJX05FV19TVE1UKTsK KyAgICAgICpvcF9wdHIgPSBnaW1wbGVfYXNzaWduX2xocyAoZyk7CisKKyAg ICAgIGlmIChieV9yZWYpCisJKm9wX3B0ciA9IGJ1aWxkMiAoTUVNX1JFRiwg VFJFRV9UWVBFIChvcmlnX3R5cGUpLCAqb3BfcHRyLAorCQkJICBidWlsZF9p bnRfY3N0IChvcmlnX3R5cGUsIDApKTsKKyAgICAgICpkaW1zX3B0ciA9IFRS RUVfQ0hBSU4gKCpkaW1zX3B0cik7CisgICAgfQorCisgIHJldHVybiBnc2k7 Cit9CisKIC8qIENhbGxiYWNrIGZvciBsb3dlcl9vbXBfMS4gIFJldHVybiBu b24tTlVMTCBpZiAqdHAgbmVlZHMgdG8gYmUKICAgIHJlZ2ltcGxpZmllZC4g IElmIERBVEEgaXMgbm9uLU5VTEwsIGxvd2VyX29tcF8xIGlzIG91dHNpZGUK ICAgIG9mIE9NUCBjb250ZXh0LCBidXQgd2l0aCB0YXNrX3NoYXJlZF92YXJz IHNldC4gICovCkBAIC0xMjcwOSw2ICsxMzE2Nyw0OCBAQCBsb3dlcl9vbXBf MSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udAogCiAg ICAgZGVmYXVsdDoKICAgICByZWdpbXBsaWZ5OgorICAgICAgLyogSWYgd2Ug ZGV0ZWN0IHRoZSBzdGFydCBvZiBhIG5vbi1jb250aWd1b3VzIGFycmF5IHJl ZmVyZW5jZSBzZXF1ZW5jZSwKKwkgc2NhbiBhbmQgZG8gdGhlIG5lZWRlZCBh ZGp1c3RtZW50cy4gICovCisgICAgICB0cmVlIGRpbXMsICpvcF9wdHI7Cisg ICAgICBvbXBfY29udGV4dCAqbmNhcnJheV9jdHggPSBjdHg7CisgICAgICBp ZiAobmNhcnJheV9jdHgKKwkgICYmIG5vbmNvbnRpZ19hcnJheV9yZWZlcmVu Y2Vfc3RhcnQgKHN0bXQsICZuY2FycmF5X2N0eCwgJm9wX3B0ciwgJmRpbXMp KQorCXsKKwkgIGJvb2wgc3RhcnRlZCA9IGZhbHNlOworCSAgdHJlZSBvcmln X2FycmF5X3ZhciA9ICpvcF9wdHI7CisJICB0cmVlIGN1cnJfdHlwZSA9IFRS RUVfVFlQRSAob3JpZ19hcnJheV92YXIpOworCisJICBnaW1wbGVfc3RtdF9p dGVyYXRvciBnc2kgPSAqZ3NpX3AsIG5ld19nc2k7CisJICB3aGlsZSAob3Bf cHRyKQorCSAgICB7CisJICAgICAgaWYgKCFpc19naW1wbGVfYXNzaWduIChn c2lfc3RtdCAoZ3NpKSkKKwkJICB8fCAoKGdpbXBsZV9hc3NpZ25fc2luZ2xl X3AgKGdzaV9zdG10IChnc2kpKQorCQkgICAgICAgfHwgZ2ltcGxlX2Fzc2ln bl9jYXN0X3AgKGdzaV9zdG10IChnc2kpKSkKKwkJICAgICAgJiYgKm9wX3B0 ciA9PSBnaW1wbGVfYXNzaWduX3JoczEgKGdzaV9zdG10IChnc2kpKSkpCisJ CWJyZWFrOworCisJICAgICAgbmV3X2dzaSA9IG5jYXJyYXlfZGltZW5zaW9u X3BlZWwgKG5jYXJyYXlfY3R4LCBnc2ksIG9yaWdfYXJyYXlfdmFyLAorCQkJ CQkJb3BfcHRyLCAmY3Vycl90eXBlLCAmZGltcyk7CisJICAgICAgaWYgKCFz dGFydGVkKQorCQl7CisJCSAgLyogUG9pbnQgJ3N0bXQnIHRvIHRoZSBzdGFy dCBvZiB0aGUgbmV3bHkgYWRkZWQKKwkJICAgICBzZXF1ZW5jZS4gICovCisJ CSAgc3RhcnRlZCA9IHRydWU7CisJCSAgKmdzaV9wID0gbmV3X2dzaTsKKwkJ ICBzdG10ID0gZ3NpX3N0bXQgKCpnc2lfcCk7CisJCX0KKwkgICAgICBpZiAo ZGltcyA9PSBOVUxMX1RSRUUpCisJCWJyZWFrOworCSAgICAgIAorCSAgICAg IHRyZWUgbmV4dF9vcCA9IGdpbXBsZV9hc3NpZ25fbGhzIChnc2lfc3RtdCAo Z3NpKSk7CisJICAgICAgZG8geworCQlnc2lfbmV4dCAoJmdzaSk7CisJCW9w X3B0ciA9IHNjYW5fZm9yX3JlZmVyZW5jZSAoZ3NpX3N0bXQgKGdzaSksIG5l eHRfb3ApOworCSAgICAgIH0KKwkgICAgICB3aGlsZSAoIW9wX3B0cik7CisJ ICAgIH0KKwl9CisKICAgICAgIGlmICgoY3R4IHx8IHRhc2tfc2hhcmVkX3Zh cnMpCiAJICAmJiB3YWxrX2dpbXBsZV9vcCAoc3RtdCwgbG93ZXJfb21wX3Jl Z2ltcGxpZnlfcCwKIAkJCSAgICAgY3R4ID8gTlVMTCA6ICZ3aSkpCkluZGV4 OiBnY2MvdHJlZS1wcmV0dHktcHJpbnQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvdHJlZS1wcmV0dHktcHJpbnQuYwkocmV2aXNpb24gMjc0 NjE4KQorKysgZ2NjL3RyZWUtcHJldHR5LXByaW50LmMJKHdvcmtpbmcgY29w eSkKQEAgLTg0OSw2ICs4NDksMzMgQEAgZHVtcF9vbXBfY2xhdXNlIChwcmV0 dHlfcHJpbnRlciAqcHAsIHRyZWUgY2xhdXNlLAogCWNhc2UgR09NUF9NQVBf TElOSzoKIAkgIHBwX3N0cmluZyAocHAsICJsaW5rIik7CiAJICBicmVhazsK KwljYXNlIEdPTVBfTUFQX05PTkNPTlRJR19BUlJBWV9UTzoKKwkgIHBwX3N0 cmluZyAocHAsICJ0byxub25jb250aWdfYXJyYXkiKTsKKwkgIGJyZWFrOwor CWNhc2UgR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZX0ZST006CisJICBwcF9z dHJpbmcgKHBwLCAiZnJvbSxub25jb250aWdfYXJyYXkiKTsKKwkgIGJyZWFr OworCWNhc2UgR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZX1RPRlJPTToKKwkg IHBwX3N0cmluZyAocHAsICJ0b2Zyb20sbm9uY29udGlnX2FycmF5Iik7CisJ ICBicmVhazsKKwljYXNlIEdPTVBfTUFQX05PTkNPTlRJR19BUlJBWV9GT1JD RV9UTzoKKwkgIHBwX3N0cmluZyAocHAsICJmb3JjZV90byxub25jb250aWdf YXJyYXkiKTsKKwkgIGJyZWFrOworCWNhc2UgR09NUF9NQVBfTk9OQ09OVElH X0FSUkFZX0ZPUkNFX0ZST006CisJICBwcF9zdHJpbmcgKHBwLCAiZm9yY2Vf ZnJvbSxub25jb250aWdfYXJyYXkiKTsKKwkgIGJyZWFrOworCWNhc2UgR09N UF9NQVBfTk9OQ09OVElHX0FSUkFZX0ZPUkNFX1RPRlJPTToKKwkgIHBwX3N0 cmluZyAocHAsICJmb3JjZV90b2Zyb20sbm9uY29udGlnX2FycmF5Iik7CisJ ICBicmVhazsKKwljYXNlIEdPTVBfTUFQX05PTkNPTlRJR19BUlJBWV9BTExP QzoKKwkgIHBwX3N0cmluZyAocHAsICJhbGxvYyxub25jb250aWdfYXJyYXki KTsKKwkgIGJyZWFrOworCWNhc2UgR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZ X0ZPUkNFX0FMTE9DOgorCSAgcHBfc3RyaW5nIChwcCwgImZvcmNlX2FsbG9j LG5vbmNvbnRpZ19hcnJheSIpOworCSAgYnJlYWs7CisJY2FzZSBHT01QX01B UF9OT05DT05USUdfQVJSQVlfRk9SQ0VfUFJFU0VOVDoKKwkgIHBwX3N0cmlu ZyAocHAsICJmb3JjZV9wcmVzZW50LG5vbmNvbnRpZ19hcnJheSIpOworCSAg YnJlYWs7CiAJZGVmYXVsdDoKIAkgIGdjY191bnJlYWNoYWJsZSAoKTsKIAl9 CkBAIC04NzAsNiArODk3LDEwIEBAIGR1bXBfb21wX2NsYXVzZSAocHJldHR5 X3ByaW50ZXIgKnBwLCB0cmVlIGNsYXVzZSwKIAkgICAgY2FzZSBHT01QX01B UF9UT19QU0VUOgogCSAgICAgIHBwX3N0cmluZyAocHAsICIgW3BvaW50ZXIg c2V0LCBsZW46ICIpOwogCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEdPTVBf TUFQX05PTkNPTlRJR19BUlJBWToKKwkgICAgICBnY2NfYXNzZXJ0IChUUkVF X0NPREUgKE9NUF9DTEFVU0VfU0laRSAoY2xhdXNlKSkgPT0gVFJFRV9MSVNU KTsKKwkgICAgICBwcF9zdHJpbmcgKHBwLCAiIFtkaW1lbnNpb25zOiAiKTsK KwkgICAgICBicmVhazsKIAkgICAgZGVmYXVsdDoKIAkgICAgICBwcF9zdHJp bmcgKHBwLCAiIFtsZW46ICIpOwogCSAgICAgIGJyZWFrOwpJbmRleDogaW5j bHVkZS9nb21wLWNvbnN0YW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGluY2x1ZGUvZ29tcC1jb25zdGFudHMuaAkocmV2aXNpb24gMjc0NjE4 KQorKysgaW5jbHVkZS9nb21wLWNvbnN0YW50cy5oCSh3b3JraW5nIGNvcHkp CkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIEdPTVBfTUFQX0ZMQUdfU1BF Q0lBTF8wCQkoMSA8PCAyKQogI2RlZmluZSBHT01QX01BUF9GTEFHX1NQRUNJ QUxfMQkJKDEgPDwgMykKICNkZWZpbmUgR09NUF9NQVBfRkxBR19TUEVDSUFM XzIJCSgxIDw8IDQpCisjZGVmaW5lIEdPTVBfTUFQX0ZMQUdfU1BFQ0lBTF8z CQkoMSA8PCA1KQogI2RlZmluZSBHT01QX01BUF9GTEFHX1NQRUNJQUwJCShH T01QX01BUF9GTEFHX1NQRUNJQUxfMSBcCiAJCQkJCSB8IEdPTVBfTUFQX0ZM QUdfU1BFQ0lBTF8wKQogLyogRmxhZyB0byBmb3JjZSBhIHNwZWNpZmljIGJl aGF2aW9yIChvciBlbHNlLCB0cmlnZ2VyIGEgcnVuLXRpbWUgZXJyb3IpLiAg Ki8KQEAgLTEyNyw2ICsxMjgsMjYgQEAgZW51bSBnb21wX21hcF9raW5kCiAg ICAgLyogRGVjcmVtZW50IHVzYWdlIGNvdW50IGFuZCBkZWFsbG9jYXRlIGlm IHplcm8uICAqLwogICAgIEdPTVBfTUFQX1JFTEVBU0UgPQkJCShHT01QX01B UF9GTEFHX1NQRUNJQUxfMgogCQkJCQkgfCBHT01QX01BUF9ERUxFVEUpLAor ICAgIC8qIE1hcHBpbmcga2luZHMgZm9yIG5vbi1jb250aWd1b3VzIGFycmF5 cy4gICovCisgICAgR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZID0JCShHT01Q X01BUF9GTEFHX1NQRUNJQUxfMyksCisgICAgR09NUF9NQVBfTk9OQ09OVElH X0FSUkFZX1RPID0JKEdPTVBfTUFQX05PTkNPTlRJR19BUlJBWQorCQkJCQkg fCBHT01QX01BUF9UTyksCisgICAgR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZ X0ZST00gPQkoR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZCisJCQkJCSB8IEdP TVBfTUFQX0ZST00pLAorICAgIEdPTVBfTUFQX05PTkNPTlRJR19BUlJBWV9U T0ZST00gPQkoR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZCisJCQkJCSB8IEdP TVBfTUFQX1RPRlJPTSksCisgICAgR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZ X0ZPUkNFX1RPID0JKEdPTVBfTUFQX05PTkNPTlRJR19BUlJBWV9UTworCQkJ CQkgfCBHT01QX01BUF9GTEFHX0ZPUkNFKSwKKyAgICBHT01QX01BUF9OT05D T05USUdfQVJSQVlfRk9SQ0VfRlJPTSA9CShHT01QX01BUF9OT05DT05USUdf QVJSQVlfRlJPTQorCQkJCQkJIHwgR09NUF9NQVBfRkxBR19GT1JDRSksCisg ICAgR09NUF9NQVBfTk9OQ09OVElHX0FSUkFZX0ZPUkNFX1RPRlJPTSA9CShH T01QX01BUF9OT05DT05USUdfQVJSQVlfVE9GUk9NCisJCQkJCQkgfCBHT01Q X01BUF9GTEFHX0ZPUkNFKSwKKyAgICBHT01QX01BUF9OT05DT05USUdfQVJS QVlfQUxMT0MgPQkJKEdPTVBfTUFQX05PTkNPTlRJR19BUlJBWQorCQkJCQkJ IHwgR09NUF9NQVBfQUxMT0MpLAorICAgIEdPTVBfTUFQX05PTkNPTlRJR19B UlJBWV9GT1JDRV9BTExPQyA9CShHT01QX01BUF9OT05DT05USUdfQVJSQVkK KwkJCQkJCSB8IEdPTVBfTUFQX0ZPUkNFX0FMTE9DKSwKKyAgICBHT01QX01B UF9OT05DT05USUdfQVJSQVlfRk9SQ0VfUFJFU0VOVCA9CShHT01QX01BUF9O T05DT05USUdfQVJSQVkKKwkJCQkJCSB8IEdPTVBfTUFQX0ZPUkNFX1BSRVNF TlQpLAogCiAgICAgLyogSW50ZXJuYWwgdG8gR0NDLCBub3QgdXNlZCBpbiBs aWJnb21wLiAgKi8KICAgICAvKiBEbyBub3QgbWFwLCBidXQgcG9pbnRlciBh c3NpZ24gYSBwb2ludGVyIGluc3RlYWQuICAqLwpAQCAtMTU1LDYgKzE3Niw4 IEBAIGVudW0gZ29tcF9tYXBfa2luZAogI2RlZmluZSBHT01QX01BUF9BTFdB WVNfUChYKSBcCiAgIChHT01QX01BUF9BTFdBWVNfVE9fUCAoWCkgfHwgKChY KSA9PSBHT01QX01BUF9BTFdBWVNfRlJPTSkpCiAKKyNkZWZpbmUgR09NUF9N QVBfTk9OQ09OVElHX0FSUkFZX1AoWCkgXAorICAoKFgpICYgR09NUF9NQVBf Tk9OQ09OVElHX0FSUkFZKQogCiAvKiBBc3luY2hyb25vdXMgYmVoYXZpb3Iu ICBLZWVwIGluIHN5bmMgd2l0aAogICAgbGliZ29tcC97b3BlbmFjYy5oLG9w ZW5hY2MuZjkwLG9wZW5hY2NfbGliLmh9OmFjY19hc3luY190LiAgKi8K --------------8C1B540C7693FA3E09F87E85--