From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 83260 invoked by alias); 8 Jul 2019 08:07:18 -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 83252 invoked by uid 89); 8 Jul 2019 08:07:18 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.1 spammy=filter, Filter, rank, H*UA:Intel X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0a-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.156.1) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 08 Jul 2019 08:07:14 +0000 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x6881YSR113499 for ; Mon, 8 Jul 2019 04:07:13 -0400 Received: from e06smtp07.uk.ibm.com (e06smtp07.uk.ibm.com [195.75.94.103]) by mx0a-001b2d01.pphosted.com with ESMTP id 2tm00h4883-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 08 Jul 2019 04:07:12 -0400 Received: from localhost by e06smtp07.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 8 Jul 2019 09:07:10 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp07.uk.ibm.com (192.168.101.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Mon, 8 Jul 2019 09:07:06 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x688750g15859866 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 8 Jul 2019 08:07:05 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A24C54C040; Mon, 8 Jul 2019 08:07:05 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3B1F54C04A; Mon, 8 Jul 2019 08:07:03 +0000 (GMT) Received: from kewenlins-mbp.cn.ibm.com (unknown [9.200.146.20]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Mon, 8 Jul 2019 08:07:02 +0000 (GMT) Subject: [PATCH V4] PR88497 - Extend reassoc for vector bit_field_ref To: Richard Biener Cc: GCC Patches , Bill Schmidt , Segher Boessenkool References: <8d92a6c9-e338-e662-9eec-ef3059faba71@linux.ibm.com> From: "Kewen.Lin" Date: Mon, 08 Jul 2019 08:14:00 -0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------3A71B6AEAFE7D07FCF9951CD" x-cbid: 19070808-0028-0000-0000-00000381DF44 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19070808-0029-0000-0000-00002441E673 Message-Id: <23b4209c-2c15-a9c3-1322-023f75a67e0c@linux.ibm.com> X-IsSubscribed: yes X-SW-Source: 2019-07/txt/msg00529.txt.bz2 This is a multi-part message in MIME format. --------------3A71B6AEAFE7D07FCF9951CD Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 1313 Hi Richard, Thanks a lot for your review and reply, I've updated the patch accordingly. Main changes compared to previous one: - Consider SVE (poly_int) on bit_field_ref size/offset. - Filter valid candidates with sbitmap first. - Support multiple modes (TODO 1). - Test cases: add SSE2 support for 1..5, update run result check for 1, add two more cases (5,6)to verify multiple mode support (x86). Bootstrapped and regression test passed on powerpc64le-unknown-linux-gnu and x86_64-linux-gnu. Could you help to review it again? Thanks in advance! Kewen ---- gcc/ChangeLog 2019-07-08 Kewen Lin PR tree-optimization/88497 * tree-ssa-reassoc.c (reassociate_bb): Swap the positions of GIMPLE_BINARY_RHS check and gimple_visited_p check, call new function undistribute_bitref_for_vector. (undistribute_bitref_for_vector): New function. (cleanup_vinfo_map): Likewise. (sort_by_mach_mode): Likewise. gcc/testsuite/ChangeLog 2019-07-08 Kewen Lin * gcc.dg/tree-ssa/pr88497-1.c: New test. * gcc.dg/tree-ssa/pr88497-2.c: Likewise. * gcc.dg/tree-ssa/pr88497-3.c: Likewise. * gcc.dg/tree-ssa/pr88497-4.c: Likewise. * gcc.dg/tree-ssa/pr88497-5.c: Likewise. * gcc.dg/tree-ssa/pr88497-6.c: Likewise. * gcc.dg/tree-ssa/pr88497-7.c: Likewise. --------------3A71B6AEAFE7D07FCF9951CD Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="reassoc_v4.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="reassoc_v4.patch" Content-length: 35393 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3By ODg0OTctMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI4 ODQ5Ny0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZDE3ZGU0MgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3RyZWUtc3NhL3ByODg0OTctMS5jCkBAIC0wLDAgKzEsNjAgQEAKKy8q IHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfZG91YmxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHBvd2VycGNfdnN4X29rIHsgdGFyZ2V0IHsgcG93ZXJw YyotKi0qIH0gfSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRh cmdldCBzc2UyX3J1bnRpbWUgeyB0YXJnZXQgeyBpPzg2LSotKiB4ODZfNjQt Ki0qIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmZhc3QtbWF0 aCAtZmR1bXAtdHJlZS1yZWFzc29jMSIgfSAqLworLyogeyBkZy1hZGRpdGlv bmFsLW9wdGlvbnMgIi1tdnN4IiB7IHRhcmdldCB7IHBvd2VycGMqLSotKiB9 IH0gfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1tc3NlMiIg eyB0YXJnZXQgeyBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCisKKy8q IFRvIHRlc3QgcmVhc3NvYyBjYW4gdW5kaXN0cmlidXRlIHZlY3RvciBiaXRf ZmllbGRfcmVmIHN1bW1hdGlvbi4KKworICAgYXJnMSBhbmQgYXJnMiBhcmUg dHdvIGFycmF5cyB3aG9zZSBlbGVtZW50cyBvZiB0eXBlIHZlY3RvciBkb3Vi bGUuCisgICBBc3N1bWluZzoKKyAgICAgQTAgPSBhcmcxWzBdLCBBMSA9IGFy ZzFbMV0sIEEyID0gYXJnMVsyXSwgQTMgPSBhcmcxWzNdLAorICAgICBCMCA9 IGFyZzJbMF0sIEIxID0gYXJnMlsxXSwgQjIgPSBhcmcyWzJdLCBCMyA9IGFy ZzJbM10sCisKKyAgIFRoZW46CisgICAgIFYwID0gQTAgKiBCMCwgVjEgPSBB MSAqIEIxLCBWMiA9IEEyICogQjIsIFYzID0gQTMgKiBCMywKKworICAgcmVh c3NvYyB0cmFuc2Zvcm1zCisKKyAgICAgYWNjdW11bGF0b3IgKz0gVjBbMF0g KyBWMFsxXSArIFYxWzBdICsgVjFbMV0gKyBWMlswXSArIFYyWzFdCisgICAg ICAgICAgKyBWM1swXSArIFYzWzFdOworCisgICBpbnRvOgorCisgICAgIFQg PSBWMCArIFYxICsgVjIgKyBWMworICAgICBhY2N1bXVsYXRvciArPSBUWzBd ICsgVFsxXTsKKworICAgRmV3ZXIgYml0X2ZpZWxkX3JlZnMsIG9ubHkgdHdv IGZvciAxMjggb3IgbW9yZSBiaXRzIHZlY3Rvci4gICovCisKK3R5cGVkZWYg ZG91YmxlIHYyZGYgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikp KTsKK19fYXR0cmlidXRlX18gKChub2lubGluZSkpIGRvdWJsZQordGVzdCAo ZG91YmxlIGFjY3VtdWxhdG9yLCB2MmRmIGFyZzFbXSwgdjJkZiBhcmcyW10p Cit7CisgIHYyZGYgdGVtcDsKKyAgdGVtcCA9IGFyZzFbMF0gKiBhcmcyWzBd OworICBhY2N1bXVsYXRvciArPSB0ZW1wWzBdICsgdGVtcFsxXTsKKyAgdGVt cCA9IGFyZzFbMV0gKiBhcmcyWzFdOworICBhY2N1bXVsYXRvciArPSB0ZW1w WzBdICsgdGVtcFsxXTsKKyAgdGVtcCA9IGFyZzFbMl0gKiBhcmcyWzJdOwor ICBhY2N1bXVsYXRvciArPSB0ZW1wWzBdICsgdGVtcFsxXTsKKyAgdGVtcCA9 IGFyZzFbM10gKiBhcmcyWzNdOworICBhY2N1bXVsYXRvciArPSB0ZW1wWzBd ICsgdGVtcFsxXTsKKyAgcmV0dXJuIGFjY3VtdWxhdG9yOworfQorCitleHRl cm4gdm9pZCBhYm9ydCAodm9pZCk7CisKK2ludAorbWFpbiAoKQoreworICB2 MmRmIHYyWzRdID0ge3sxLjAsIDIuMH0sIHs0LjAsIDguMH0sIHsxLjAsIDMu MH0sIHs5LjAsIDI3LjB9fTsKKyAgdjJkZiB2M1s0XSA9IHt7MS4wLCA0LjB9 LCB7MTYuMCwgNjQuMH0sIHsxLjAsIDIuMH0sIHszLjAsIDQuMH19OworICBk b3VibGUgYWNjID0gMTAwLjA7CisgIGRvdWJsZSByZXMgPSB0ZXN0IChhY2Ms IHYyLCB2Myk7CisgIGlmIChyZXMgIT0gODI3LjApCisgICAgYWJvcnQgKCk7 CisgIHJldHVybiAwOworfQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICJCSVRfRklFTERfUkVGIiAyICJyZWFzc29jMSIgeyB0YXJn ZXQgeyBwb3dlcnBjKi0qLSogaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS9wcjg4NDk3LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3ByODg0OTctMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmNlMzRjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9wcjg4NDk3LTIuYwpAQCAtMCwwICsxLDM3IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCBwb3dlcnBjX2FsdGl2ZWNfb2sgeyB0YXJn ZXQgeyBwb3dlcnBjKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHNzZTJfcnVudGltZSB7IHRhcmdldCB7IGk/ODYt Ki0qIHg4Nl82NC0qLSogfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8y IC1mZmFzdC1tYXRoIC1mZHVtcC10cmVlLXJlYXNzb2MxIiB9ICovCisvKiB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1hbHRpdmVjIiB7IHRhcmdldCB7 IHBvd2VycGMqLSotKiB9IH0gfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9w dGlvbnMgIi1tc3NlMiIgeyB0YXJnZXQgeyBpPzg2LSotKiB4ODZfNjQtKi0q IH0gfSB9ICovCisKKy8qIFRvIHRlc3QgcmVhc3NvYyBjYW4gdW5kaXN0cmli dXRlIHZlY3RvciBiaXRfZmllbGRfcmVmIG9uIG11bHRpcGxpY2F0aW9uLgor CisgICB2MSwgdjIsIHYzLCB2NCBvZiB0eXBlIHZlY3RvciBmbG9hdC4KKwor ICAgcmVhc3NvYyB0cmFuc2Zvcm1zCisKKyAgICAgYWNjdW11bGF0b3IgKj0g djFbMF0gKiB2MVsxXSAqIHYxWzJdICogdjFbM10gKgorICAgICAgICAgICAg ICAgICAgICB2MlswXSAqIHYyWzFdICogdjJbMl0gKiB2MlszXSAqCisgICAg ICAgICAgICAgICAgICAgIHYzWzBdICogdjNbMV0gKiB2M1syXSAqIHYzWzNd ICoKKyAgICAgICAgICAgICAgICAgICAgdjRbMF0gKiB2NFsxXSAqIHY0WzJd ICogdjRbM10gOworCisgICBpbnRvOgorCisgICAgIFQgPSB2MSAqIHYyICog djMgKiB2NDsKKyAgICAgYWNjdW11bGF0b3IgKj0gVFswXSAqIFRbMV0gKiBU WzJdICogVFszXTsKKworICAgRmV3ZXIgYml0X2ZpZWxkX3JlZnMsIG9ubHkg Zm91ciBmb3IgMTI4IG9yIG1vcmUgYml0cyB2ZWN0b3IuICAqLworCit0eXBl ZGVmIGZsb2F0IHY0c2YgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgx NikpKTsKK2Zsb2F0Cit0ZXN0IChmbG9hdCBhY2N1bXVsYXRvciwgdjRzZiB2 MSwgdjRzZiB2MiwgdjRzZiB2MywgdjRzZiB2NCkKK3sKKyAgYWNjdW11bGF0 b3IgKj0gdjFbMF0gKiB2MVsxXSAqIHYxWzJdICogdjFbM107CisgIGFjY3Vt dWxhdG9yICo9IHYyWzBdICogdjJbMV0gKiB2MlsyXSAqIHYyWzNdOworICBh Y2N1bXVsYXRvciAqPSB2M1swXSAqIHYzWzFdICogdjNbMl0gKiB2M1szXTsK KyAgYWNjdW11bGF0b3IgKj0gdjRbMF0gKiB2NFsxXSAqIHY0WzJdICogdjRb M107CisgIHJldHVybiBhY2N1bXVsYXRvcjsKK30KKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiQklUX0ZJRUxEX1JFRiIgNCAicmVh c3NvYzEiIHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qIGk/ODYtKi0qIHg4Nl82 NC0qLSogfSB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2EvcHI4ODQ5Ny0zLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9wcjg4NDk3LTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4zNjI3YWE2Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI4ODQ5Ny0zLmMKQEAg LTAsMCArMSwzNyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHBvd2VycGNfYWx0aXZl Y19vayB7IHRhcmdldCB7IHBvd2VycGMqLSotKiB9IH0gfSAqLworLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgc3NlMl9ydW50aW1lIHsgdGFy Z2V0IHsgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAqLworLyogeyBkZy1v cHRpb25zICItTzIgLWZmYXN0LW1hdGggLWZkdW1wLXRyZWUtcmVhc3NvYzEi IH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbWFsdGl2ZWMi IHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qIH0gfSB9ICovCisvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLW1zc2UyIiB7IHRhcmdldCB7IGk/ODYtKi0q IHg4Nl82NC0qLSogfSB9IH0gKi8KKworLyogVG8gdGVzdCByZWFzc29jIGNh biB1bmRpc3RyaWJ1dGUgdmVjdG9yIGJpdF9maWVsZF9yZWYgb24gYml0d2lz ZSBBTkQuCisKKyAgIHYxLCB2MiwgdjMsIHY0IG9mIHR5cGUgdmVjdG9yIGlu dC4KKworICAgcmVhc3NvYyB0cmFuc2Zvcm1zCisKKyAgICAgYWNjdW11bGF0 b3IgJj0gdjFbMF0gJiB2MVsxXSAmIHYxWzJdICYgdjFbM10gJgorICAgICAg ICAgICAgICAgICAgICB2MlswXSAmIHYyWzFdICYgdjJbMl0gJiB2MlszXSAm CisgICAgICAgICAgICAgICAgICAgIHYzWzBdICYgdjNbMV0gJiB2M1syXSAm IHYzWzNdICYKKyAgICAgICAgICAgICAgICAgICAgdjRbMF0gJiB2NFsxXSAm IHY0WzJdICYgdjRbM10gOworCisgICBpbnRvOgorCisgICAgIFQgPSB2MSAm IHYyICYgdjMgJiB2NDsKKyAgICAgYWNjdW11bGF0b3IgJj0gVFswXSAmIFRb MV0gJiBUWzJdICYgVFszXTsKKworICAgRmV3ZXIgYml0X2ZpZWxkX3JlZnMs IG9ubHkgZm91ciBmb3IgMTI4IG9yIG1vcmUgYml0cyB2ZWN0b3IuICAqLwor Cit0eXBlZGVmIGludCB2NHNpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6 ZSAoMTYpKSk7CitpbnQKK3Rlc3QgKGludCBhY2N1bXVsYXRvciwgdjRzaSB2 MSwgdjRzaSB2MiwgdjRzaSB2MywgdjRzaSB2NCkKK3sKKyAgYWNjdW11bGF0 b3IgJj0gdjFbMF0gJiB2MVsxXSAmIHYxWzJdICYgdjFbM107CisgIGFjY3Vt dWxhdG9yICY9IHYyWzBdICYgdjJbMV0gJiB2MlsyXSAmIHYyWzNdOworICBh Y2N1bXVsYXRvciAmPSB2M1swXSAmIHYzWzFdICYgdjNbMl0gJiB2M1szXTsK KyAgYWNjdW11bGF0b3IgJj0gdjRbMF0gJiB2NFsxXSAmIHY0WzJdICYgdjRb M107CisgIHJldHVybiBhY2N1bXVsYXRvcjsKK30KKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiQklUX0ZJRUxEX1JFRiIgNCAicmVh c3NvYzEiIHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qIGk/ODYtKi0qIHg4Nl82 NC0qLSogfSB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2EvcHI4ODQ5Ny00LmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9wcjg4NDk3LTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42YWNmYjYwCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI4ODQ5Ny00LmMKQEAg LTAsMCArMSwzNyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHBvd2VycGNfYWx0aXZl Y19vayB7IHRhcmdldCB7IHBvd2VycGMqLSotKiB9IH0gfSAqLworLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgc3NlMl9ydW50aW1lIHsgdGFy Z2V0IHsgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAqLworLyogeyBkZy1v cHRpb25zICItTzIgLWZmYXN0LW1hdGggLWZkdW1wLXRyZWUtcmVhc3NvYzEi IH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbWFsdGl2ZWMi IHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qIH0gfSB9ICovCisvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLW1zc2UyIiB7IHRhcmdldCB7IGk/ODYtKi0q IHg4Nl82NC0qLSogfSB9IH0gKi8KKworLyogVG8gdGVzdCByZWFzc29jIGNh biB1bmRpc3RyaWJ1dGUgdmVjdG9yIGJpdF9maWVsZF9yZWYgb24gYml0d2lz ZSBJT1IuCisKKyAgIHYxLCB2MiwgdjMsIHY0IG9mIHR5cGUgdmVjdG9yIGlu dC4KKworICAgcmVhc3NvYyB0cmFuc2Zvcm1zCisKKyAgICAgYWNjdW11bGF0 b3IgfD0gdjFbMF0gfCB2MVsxXSB8IHYxWzJdIHwgdjFbM10gfAorICAgICAg ICAgICAgICAgICAgICB2MlswXSB8IHYyWzFdIHwgdjJbMl0gfCB2MlszXSB8 CisgICAgICAgICAgICAgICAgICAgIHYzWzBdIHwgdjNbMV0gfCB2M1syXSB8 IHYzWzNdIHwKKyAgICAgICAgICAgICAgICAgICAgdjRbMF0gfCB2NFsxXSB8 IHY0WzJdIHwgdjRbM10gOworCisgICBpbnRvOgorCisgICAgIFQgPSB2MSB8 IHYyIHwgdjMgfCB2NDsKKyAgICAgYWNjdW11bGF0b3IgfD0gVFswXSB8IFRb MV0gfCBUWzJdIHwgVFszXTsKKworICAgRmV3ZXIgYml0X2ZpZWxkX3JlZnMs IG9ubHkgZm91ciBmb3IgMTI4IG9yIG1vcmUgYml0cyB2ZWN0b3IuICAqLwor Cit0eXBlZGVmIGludCB2NHNpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6 ZSAoMTYpKSk7CitpbnQKK3Rlc3QgKGludCBhY2N1bXVsYXRvciwgdjRzaSB2 MSwgdjRzaSB2MiwgdjRzaSB2MywgdjRzaSB2NCkKK3sKKyAgYWNjdW11bGF0 b3IgfD0gdjFbMF0gfCB2MVsxXSB8IHYxWzJdIHwgdjFbM107CisgIGFjY3Vt dWxhdG9yIHw9IHYyWzBdIHwgdjJbMV0gfCB2MlsyXSB8IHYyWzNdOworICBh Y2N1bXVsYXRvciB8PSB2M1swXSB8IHYzWzFdIHwgdjNbMl0gfCB2M1szXTsK KyAgYWNjdW11bGF0b3IgfD0gdjRbMF0gfCB2NFsxXSB8IHY0WzJdIHwgdjRb M107CisgIHJldHVybiBhY2N1bXVsYXRvcjsKK30KKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiQklUX0ZJRUxEX1JFRiIgNCAicmVh c3NvYzEiIHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qIGk/ODYtKi0qIHg4Nl82 NC0qLSogfSB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2EvcHI4ODQ5Ny01LmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9wcjg4NDk3LTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5lZTMwNDFmCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI4ODQ5Ny01LmMKQEAg LTAsMCArMSwzNyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHBvd2VycGNfYWx0aXZl Y19vayB7IHRhcmdldCB7IHBvd2VycGMqLSotKiB9IH0gfSAqLworLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgc3NlMl9ydW50aW1lIHsgdGFy Z2V0IHsgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAqLworLyogeyBkZy1v cHRpb25zICItTzIgLWZmYXN0LW1hdGggLWZkdW1wLXRyZWUtcmVhc3NvYzEi IH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbWFsdGl2ZWMi IHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qIH0gfSB9ICovCisvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLW1zc2UyIiB7IHRhcmdldCB7IGk/ODYtKi0q IHg4Nl82NC0qLSogfSB9IH0gKi8KKworLyogVG8gdGVzdCByZWFzc29jIGNh biB1bmRpc3RyaWJ1dGUgdmVjdG9yIGJpdF9maWVsZF9yZWYgb24gYml0d2lz ZSBYT1IuCisKKyAgIHYxLCB2MiwgdjMsIHY0IG9mIHR5cGUgdmVjdG9yIGlu dC4KKworICAgcmVhc3NvYyB0cmFuc2Zvcm1zCisKKyAgICAgYWNjdW11bGF0 b3IgXj0gdjFbMF0gXiB2MVsxXSBeIHYxWzJdIF4gdjFbM10gXgorICAgICAg ICAgICAgICAgICAgICB2MlswXSBeIHYyWzFdIF4gdjJbMl0gXiB2MlszXSBe CisgICAgICAgICAgICAgICAgICAgIHYzWzBdIF4gdjNbMV0gXiB2M1syXSBe IHYzWzNdIF4KKyAgICAgICAgICAgICAgICAgICAgdjRbMF0gXiB2NFsxXSBe IHY0WzJdIF4gdjRbM10gOworCisgICBpbnRvOgorCisgICAgIFQgPSB2MSBe IHYyIF4gdjMgXiB2NDsKKyAgICAgYWNjdW11bGF0b3IgXj0gVFswXSBeIFRb MV0gXiBUWzJdIF4gVFszXTsKKworICAgRmV3ZXIgYml0X2ZpZWxkX3JlZnMs IG9ubHkgZm91ciBmb3IgMTI4IG9yIG1vcmUgYml0cyB2ZWN0b3IuICAqLwor Cit0eXBlZGVmIGludCB2NHNpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6 ZSAoMTYpKSk7CitpbnQKK3Rlc3QgKGludCBhY2N1bXVsYXRvciwgdjRzaSB2 MSwgdjRzaSB2MiwgdjRzaSB2MywgdjRzaSB2NCkKK3sKKyAgYWNjdW11bGF0 b3IgXj0gdjFbMF0gXiB2MVsxXSBeIHYxWzJdIF4gdjFbM107CisgIGFjY3Vt dWxhdG9yIF49IHYyWzBdIF4gdjJbMV0gXiB2MlsyXSBeIHYyWzNdOworICBh Y2N1bXVsYXRvciBePSB2M1swXSBeIHYzWzFdIF4gdjNbMl0gXiB2M1szXTsK KyAgYWNjdW11bGF0b3IgXj0gdjRbMF0gXiB2NFsxXSBeIHY0WzJdIF4gdjRb M107CisgIHJldHVybiBhY2N1bXVsYXRvcjsKK30KKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiQklUX0ZJRUxEX1JFRiIgNCAicmVh c3NvYzEiIHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qIGk/ODYtKi0qIHg4Nl82 NC0qLSogfSB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2EvcHI4ODQ5Ny02LmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9wcjg4NDk3LTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4wMTQ2NTE4Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI4ODQ5Ny02LmMKQEAg LTAsMCArMSw2NSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGF2eDUxMmYgfSAqLworLyog eyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJmIC1mZmFzdC1tYXRoIC1mZHVt cC10cmVlLXJlYXNzb2MxIiB9ICovCisKKy8qIFRvIHRlc3QgcmVhc3NvYyBj YW4gdW5kaXN0cmlidXRlIHZlY3RvciBiaXRfZmllbGRfcmVmIG9uIG11bHRp cGxlCisgICB2ZWN0b3IgbWFjaGluZSBtb2Rlcy4KKworICAgdjEsIHYyIG9m IHR5cGUgdmVjdG9yIDQgeCBmbG9hdAorICAgdjMsIHY0IG9mIHR5cGUgdmVj dG9yIDggeCBmbG9hdAorICAgdjUsIHY2IG9mIHR5cGUgdmVjdG9yIDE2IHgg ZmxvYXQKKworICAgcmVhc3NvYyB0cmFuc2Zvcm1zCisKKyAgICAgYWNjdW11 bGF0b3IgICs9ICB2MVswXSAgKyB2MVsxXSAgKyB2MVsyXSAgKyB2MVszXSAg KworICAgICAgICAgICAgICAgICAgICAgIHYyWzBdICArIHYyWzFdICArIHYy WzJdICArIHYyWzNdICArCisgICAgICAgICAgICAgICAgICAgICAgdjNbMF0g ICsgdjNbMV0gICsgdjNbMl0gICsgdjNbM10gICsKKyAgICAgICAgICAgICAg ICAgICAgICB2M1s0XSAgKyB2M1s1XSAgKyB2M1s2XSAgKyB2M1s3XSAgKwor ICAgICAgICAgICAgICAgICAgICAgIHY0WzBdICArIHY0WzFdICArIHY0WzJd ICArIHY0WzNdICArCisgICAgICAgICAgICAgICAgICAgICAgdjRbNF0gICsg djRbNV0gICsgdjRbNl0gICsgdjRbN10gICsKKyAgICAgICAgICAgICAgICAg ICAgICB2NVswXSAgKyB2NVsxXSAgKyB2NVsyXSAgKyB2NVszXSAgKworICAg ICAgICAgICAgICAgICAgICAgIHY1WzRdICArIHY1WzVdICArIHY1WzZdICAr IHY1WzddICArCisgICAgICAgICAgICAgICAgICAgICAgdjVbOF0gICsgdjVb OV0gICsgdjVbMTBdICsgdjVbMTFdICsKKyAgICAgICAgICAgICAgICAgICAg ICB2NVsxMl0gKyB2NVsxM10gKyB2NVsxNF0gKyB2NVsxNV0gKworICAgICAg ICAgICAgICAgICAgICAgIHY2WzBdICArIHY2WzFdICArIHY2WzJdICArIHY2 WzNdICArCisgICAgICAgICAgICAgICAgICAgICAgdjZbNF0gICsgdjZbNV0g ICsgdjZbNl0gICsgdjZbN10gICsKKyAgICAgICAgICAgICAgICAgICAgICB2 Nls4XSAgKyB2Nls5XSAgKyB2NlsxMF0gKyB2NlsxMV0gKworICAgICAgICAg ICAgICAgICAgICAgIHY2WzEyXSArIHY2WzEzXSArIHY2WzE0XSArIHY2WzE1 XSA7CisKKyAgIGludG86CisKKyAgICAgVDEyID0gdjEgKyB2MjsKKyAgICAg VDM0ID0gdjMgKyB2NDsKKyAgICAgVDU2ID0gdjUgKyB2NjsKKyAgICAgYWNj dW11bGF0b3IgKz0gVDEyWzBdICArIFQxMlsxXSAgKyBUMTJbMl0gICsgVDEy WzNdICArCisgICAgIGFjY3VtdWxhdG9yICs9IFQzNFswXSAgKyBUMzRbMV0g ICsgVDM0WzJdICArIFQzNFszXSAgKworICAgICBhY2N1bXVsYXRvciArPSBU MzRbNF0gICsgVDM0WzVdICArIFQzNFs2XSAgKyBUMzRbN10gICsKKyAgICAg YWNjdW11bGF0b3IgKz0gVDU2WzBdICArIFQ1NlsxXSAgKyBUNTZbMl0gICsg VDU2WzNdICArCisgICAgIGFjY3VtdWxhdG9yICs9IFQ1Nls0XSAgKyBUNTZb NV0gICsgVDU2WzZdICArIFQ1Nls3XSAgKworICAgICBhY2N1bXVsYXRvciAr PSBUNTZbOF0gICsgVDU2WzldICArIFQ1NlsxMF0gKyBUNTZbMTFdICsKKyAg ICAgYWNjdW11bGF0b3IgKz0gVDU2WzEyXSArIFQ1NlsxM10gKyBUNTZbMTRd ICsgVDU2WzE1XSA7ICAqLworCit0eXBlZGVmIGZsb2F0IHY0c2YgX19hdHRy aWJ1dGVfXygodmVjdG9yX3NpemUoMTYpKSk7Cit0eXBlZGVmIGZsb2F0IHY4 c2YgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMzIpKSk7Cit0eXBlZGVm IGZsb2F0IHYxNnNmIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDY0KSkp OworCitmbG9hdAordGVzdCAoZmxvYXQgYWNjdW11bGF0b3IsIHY0c2YgdjEs IHY0c2YgdjIsIHY4c2YgdjMsIHY4c2YgdjQsIHYxNnNmIHY1LCB2MTZzZiB2 NikKK3sKKyAgYWNjdW11bGF0b3IgKz0gdjFbMF0gKyB2MVsxXSArIHYxWzJd ICsgdjFbM107CisgIGFjY3VtdWxhdG9yICs9IHYyWzBdICsgdjJbMV0gKyB2 MlsyXSArIHYyWzNdOworICBhY2N1bXVsYXRvciArPSB2M1swXSArIHYzWzFd ICsgdjNbMl0gKyB2M1szXTsKKyAgYWNjdW11bGF0b3IgKz0gdjNbNF0gKyB2 M1s1XSArIHYzWzZdICsgdjNbN107CisgIGFjY3VtdWxhdG9yICs9IHY0WzBd ICsgdjRbMV0gKyB2NFsyXSArIHY0WzNdOworICBhY2N1bXVsYXRvciArPSB2 NFs0XSArIHY0WzVdICsgdjRbNl0gKyB2NFs3XTsKKyAgYWNjdW11bGF0b3Ig Kz0gdjVbMF0gKyB2NVsxXSArIHY1WzJdICsgdjVbM107CisgIGFjY3VtdWxh dG9yICs9IHY1WzRdICsgdjVbNV0gKyB2NVs2XSArIHY1WzddOworICBhY2N1 bXVsYXRvciArPSB2NVs4XSArIHY1WzldICsgdjVbMTBdICsgdjVbMTFdOwor ICBhY2N1bXVsYXRvciArPSB2NVsxMl0gKyB2NVsxM10gKyB2NVsxNF0gKyB2 NVsxNV07CisgIGFjY3VtdWxhdG9yICs9IHY2WzBdICsgdjZbMV0gKyB2Nlsy XSArIHY2WzNdOworICBhY2N1bXVsYXRvciArPSB2Nls0XSArIHY2WzVdICsg djZbNl0gKyB2Nls3XTsKKyAgYWNjdW11bGF0b3IgKz0gdjZbOF0gKyB2Nls5 XSArIHY2WzEwXSArIHY2WzExXTsKKyAgYWNjdW11bGF0b3IgKz0gdjZbMTJd ICsgdjZbMTNdICsgdjZbMTRdICsgdjZbMTVdOworICByZXR1cm4gYWNjdW11 bGF0b3I7Cit9CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIkJJVF9GSUVMRF9SRUYiIDI4ICJyZWFzc29jMSIgfSB9ICovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjg4NDk3 LTcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByODg0OTct Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDU4 NzgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90 cmVlLXNzYS9wcjg4NDk3LTcuYwpAQCAtMCwwICsxLDc3IEBACisvKiB7IGRn LWRvIHJ1biB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCBhdng1MTJmX3J1bnRpbWUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIg LW1hdng1MTJmIC1mZmFzdC1tYXRoIC1mZHVtcC10cmVlLXJlYXNzb2MxIiB9 ICovCisKKy8qIFRvIHRlc3QgcmVhc3NvYyBjYW4gdW5kaXN0cmlidXRlIHZl Y3RvciBiaXRfZmllbGRfcmVmIG9uIG11bHRpcGxlCisgICB2ZWN0b3IgbWFj aGluZSBtb2RlcywgYnlwYXNzIHRob3NlIG1vZGVzIHdpdGggb25seSBvbmUg Y2FuZGlkYXRlLgorCisgICB2MSwgdjIgb2YgdHlwZSB2ZWN0b3IgNCB4IGZs b2F0CisgICB2MyAgICAgb2YgdHlwZSB2ZWN0b3IgOCB4IGZsb2F0CisgICB2 NSwgdjYgb2YgdHlwZSB2ZWN0b3IgMTYgeCBmbG9hdAorCisgICByZWFzc29j IHRyYW5zZm9ybXMKKworICAgICBhY2N1bXVsYXRvciAgKz0gIHYxWzBdICAr IHYxWzFdICArIHYxWzJdICArIHYxWzNdICArCisgICAgICAgICAgICAgICAg ICAgICAgdjJbMF0gICsgdjJbMV0gICsgdjJbMl0gICsgdjJbM10gICsKKyAg ICAgICAgICAgICAgICAgICAgICB2M1swXSAgKyB2M1sxXSAgKyB2M1syXSAg KyB2M1szXSAgKworICAgICAgICAgICAgICAgICAgICAgIHYzWzRdICArIHYz WzVdICArIHYzWzZdICArIHYzWzddICArCisgICAgICAgICAgICAgICAgICAg ICAgdjVbMF0gICsgdjVbMV0gICsgdjVbMl0gICsgdjVbM10gICsKKyAgICAg ICAgICAgICAgICAgICAgICB2NVs0XSAgKyB2NVs1XSAgKyB2NVs2XSAgKyB2 NVs3XSAgKworICAgICAgICAgICAgICAgICAgICAgIHY1WzhdICArIHY1Wzld ICArIHY1WzEwXSArIHY1WzExXSArCisgICAgICAgICAgICAgICAgICAgICAg djVbMTJdICsgdjVbMTNdICsgdjVbMTRdICsgdjVbMTVdICsKKyAgICAgICAg ICAgICAgICAgICAgICB2NlswXSAgKyB2NlsxXSAgKyB2NlsyXSAgKyB2Nlsz XSAgKworICAgICAgICAgICAgICAgICAgICAgIHY2WzRdICArIHY2WzVdICAr IHY2WzZdICArIHY2WzddICArCisgICAgICAgICAgICAgICAgICAgICAgdjZb OF0gICsgdjZbOV0gICsgdjZbMTBdICsgdjZbMTFdICsKKyAgICAgICAgICAg ICAgICAgICAgICB2NlsxMl0gKyB2NlsxM10gKyB2NlsxNF0gKyB2NlsxNV0g OworCisgICBpbnRvOgorCisgICAgIFQxMiA9IHYxICsgdjI7CisgICAgIFQ1 NiA9IHY1ICsgdjY7CisgICAgIGFjY3VtdWxhdG9yICs9IFQxMlswXSAgKyBU MTJbMV0gICsgVDEyWzJdICArIFQxMlszXSAgKworICAgICBhY2N1bXVsYXRv ciArPSB2M1swXSAgICsgdjNbMV0gICArIHYzWzJdICAgKyB2M1szXSAgICsK KyAgICAgYWNjdW11bGF0b3IgKz0gdjNbNF0gICArIHYzWzVdICAgKyB2M1s2 XSAgICsgdjNbN10gICArCisgICAgIGFjY3VtdWxhdG9yICs9IFQ1NlswXSAg KyBUNTZbMV0gICsgVDU2WzJdICArIFQ1NlszXSAgKworICAgICBhY2N1bXVs YXRvciArPSBUNTZbNF0gICsgVDU2WzVdICArIFQ1Nls2XSAgKyBUNTZbN10g ICsKKyAgICAgYWNjdW11bGF0b3IgKz0gVDU2WzhdICArIFQ1Nls5XSAgKyBU NTZbMTBdICsgVDU2WzExXSArCisgICAgIGFjY3VtdWxhdG9yICs9IFQ1Nlsx Ml0gKyBUNTZbMTNdICsgVDU2WzE0XSArIFQ1NlsxNV0gOyAgKi8KKwordHlw ZWRlZiBmbG9hdCB2NHNmIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2 KSkpOwordHlwZWRlZiBmbG9hdCB2OHNmIF9fYXR0cmlidXRlX18oKHZlY3Rv cl9zaXplKDMyKSkpOwordHlwZWRlZiBmbG9hdCB2MTZzZiBfX2F0dHJpYnV0 ZV9fKCh2ZWN0b3Jfc2l6ZSg2NCkpKTsKKworX19hdHRyaWJ1dGVfXyAoKG5v aW5saW5lKSkKK2Zsb2F0IHRlc3QoZmxvYXQgYWNjdW11bGF0b3IsIHY0c2Yg djEsIHY0c2YgdjIsIHY4c2YgdjMsIHYxNnNmIHY1LCB2MTZzZiB2Nikgewor ICBhY2N1bXVsYXRvciArPSB2MVswXSArIHYxWzFdICsgdjFbMl0gKyB2MVsz XTsKKyAgYWNjdW11bGF0b3IgKz0gdjJbMF0gKyB2MlsxXSArIHYyWzJdICsg djJbM107CisgIGFjY3VtdWxhdG9yICs9IHYzWzBdICsgdjNbMV0gKyB2M1sy XSArIHYzWzNdOworICBhY2N1bXVsYXRvciArPSB2M1s0XSArIHYzWzVdICsg djNbNl0gKyB2M1s3XTsKKyAgYWNjdW11bGF0b3IgKz0gdjVbMF0gKyB2NVsx XSArIHY1WzJdICsgdjVbM107CisgIGFjY3VtdWxhdG9yICs9IHY1WzRdICsg djVbNV0gKyB2NVs2XSArIHY1WzddOworICBhY2N1bXVsYXRvciArPSB2NVs4 XSArIHY1WzldICsgdjVbMTBdICsgdjVbMTFdOworICBhY2N1bXVsYXRvciAr PSB2NVsxMl0gKyB2NVsxM10gKyB2NVsxNF0gKyB2NVsxNV07CisgIGFjY3Vt dWxhdG9yICs9IHY2WzBdICsgdjZbMV0gKyB2NlsyXSArIHY2WzNdOworICBh Y2N1bXVsYXRvciArPSB2Nls0XSArIHY2WzVdICsgdjZbNl0gKyB2Nls3XTsK KyAgYWNjdW11bGF0b3IgKz0gdjZbOF0gKyB2Nls5XSArIHY2WzEwXSArIHY2 WzExXTsKKyAgYWNjdW11bGF0b3IgKz0gdjZbMTJdICsgdjZbMTNdICsgdjZb MTRdICsgdjZbMTVdOworICByZXR1cm4gYWNjdW11bGF0b3I7Cit9CisKK2V4 dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKKworaW50CittYWluICgpCit7Cisg IHY0c2YgdjEgPSB7MS4wLCAyLjAsIDMuMCwgNC4wIH07CisgIHY0c2YgdjIg PSB7NS4wLCA2LjAsIDcuMCwgOC4wIH07CisgIHY4c2YgdjMgPSB7OS4wLCAx MC4wLCAxMS4wLCAxMi4wLCAxMy4wLCAxNC4wLCAxNS4wLCAxNi4wIH07Cisg IHYxNnNmIHY1ID0gezE3LjAsIDE4LjAsIDE5LjAsIDIwLjAsIDIxLjAsIDIy LjAsIDIzLjAsIDI0LjAsIDI1LjAsIDI2LjAsIDI3LjAsIDI4LjAsIDI5LjAs IDMwLjAsIDMxLjAsIDMyLjB9OworICB2MTZzZiB2NiA9IHszMy4wLCAzNC4w LCAzNS4wLCAzNi4wLCAzNy4wLCAzOC4wLCAzOS4wLCA0MC4wLCA0MS4wLCA0 Mi4wLCA0My4wLCA0NC4wLCA0NS4wLCA0Ni4wLCA0Ny4wLCA0OC4wfTsKKyAg ZmxvYXQgYWNjID0gMjQuMDsKKyAgZG91YmxlIHJlcyA9IHRlc3QgKGFjYywg djEsIHYyLCB2MywgdjUsIHY2KTsKKyAgaWYgKHJlcyAhPSAxMjAwLjApCisg ICAgYWJvcnQoKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiQklUX0ZJRUxEX1JFRiIgMjggInJl YXNzb2MxIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1yZWFz c29jLmMgYi9nY2MvdHJlZS1zc2EtcmVhc3NvYy5jCmluZGV4IDMyYmZmOTcu LmUzYzUyNjQgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1yZWFzc29jLmMK KysrIGIvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuYwpAQCAtMTc3Miw2ICsxNzcy LDI4MiBAQCB1bmRpc3RyaWJ1dGVfb3BzX2xpc3QgKGVudW0gdHJlZV9jb2Rl IG9wY29kZSwKICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKKy8qIFBhaXIgdG8g aG9sZCB0aGUgaW5mb3JtYXRpb24gb2Ygb25lIHNwZWNpZmljIFZFQ1RPUl9U WVBFIFNTQV9OQU1FOgorICAgZmlyc3Q6IGVsZW1lbnQgaW5kZXggZm9yIGVh Y2ggcmVsZXZhbnQgQklUX0ZJRUxEX1JFRi4KKyAgIHNlY29uZDogdGhlIGlu ZGV4IG9mIHZlYyBvcHMqIGZvciBlYWNoIHJlbGV2YW50IEJJVF9GSUVMRF9S RUYuICAqLwordHlwZWRlZiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVk PiB2X2luZm9fZWxlbTsKK3R5cGVkZWYgYXV0b192ZWM8dl9pbmZvX2VsZW0s IDMyPiB2X2luZm87Cit0eXBlZGVmIHZfaW5mbyAqdl9pbmZvX3B0cjsKKwor LyogQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgcXNvcnQgb24gVkVDVE9SIFNT QV9OQU1FIHRyZWVzIGJ5IG1hY2hpbmUgbW9kZS4gICovCitzdGF0aWMgaW50 Citzb3J0X2J5X21hY2hfbW9kZSAoY29uc3Qgdm9pZCAqcF9pLCBjb25zdCB2 b2lkICpwX2opCit7CisgIGNvbnN0IHRyZWUgdHIxID0gKigoY29uc3QgdHJl ZSAqKSBwX2kpOworICBjb25zdCB0cmVlIHRyMiA9ICooKGNvbnN0IHRyZWUg KikgcF9qKTsKKyAgdW5zaWduZWQgaW50IG1vZGUxID0gVFlQRV9NT0RFIChU UkVFX1RZUEUgKHRyMSkpOworICB1bnNpZ25lZCBpbnQgbW9kZTIgPSBUWVBF X01PREUgKFRSRUVfVFlQRSAodHIyKSk7CisgIGlmIChtb2RlMSA+IG1vZGUy KQorICAgIHJldHVybiAxOworICBlbHNlIGlmIChtb2RlMSA8IG1vZGUyKQor ICAgIHJldHVybiAtMTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisv KiBDbGVhbnVwIGhhc2ggbWFwIGZvciBWRUNUT1IgaW5mb3JtYXRpb24uICAq Lworc3RhdGljIHZvaWQKK2NsZWFudXBfdmluZm9fbWFwIChoYXNoX21hcDx0 cmVlLCB2X2luZm9fcHRyPiAmaW5mb19tYXApCit7CisgIGZvciAoaGFzaF9t YXA8dHJlZSwgdl9pbmZvX3B0cj46Oml0ZXJhdG9yIGl0ID0gaW5mb19tYXAu YmVnaW4gKCk7CisgICAgICAgaXQgIT0gaW5mb19tYXAuZW5kICgpOyArK2l0 KQorICAgIHsKKyAgICAgIHZfaW5mb19wdHIgaW5mbyA9ICgqaXQpLnNlY29u ZDsKKyAgICAgIGRlbGV0ZSBpbmZvOworICAgICAgKCppdCkuc2Vjb25kID0g TlVMTDsKKyAgICB9Cit9CisKKy8qIFBlcmZvcm0gdW4tZGlzdHJpYnV0aW9u IG9mIEJJVF9GSUVMRF9SRUYgb24gVkVDVE9SX1RZUEUuCisgICAgIFYxWzBd ICsgVjFbMV0gKyAuLi4gKyBWMVtrXSArIFYyWzBdICsgVjJbMV0gKyAuLi4g KyBWMltrXSArIC4uLiBWbltrXQorICAgaXMgdHJhbnNmb3JtZWQgdG8KKyAg ICAgVnMgPSAoVjEgKyBWMiArIC4uLiArIFZuKQorICAgICBWc1swXSArIFZz WzFdICsgLi4uICsgVnNba10KKworICAgVGhlIGJhc2ljIHN0ZXBzIGFyZSBs aXN0ZWQgYmVsb3c6CisKKyAgICAxKSBDaGVjayB0aGUgYWRkaXRpb24gY2hh aW4gKk9QUyBieSBsb29raW5nIHRob3NlIHN1bW1hbmRzIGNvbWluZyBmcm9t CisgICAgICAgVkVDVE9SIGJpdF9maWVsZF9yZWYgb24gVkVDVE9SIHR5cGUu ICBQdXQgdGhlIGluZm9ybWF0aW9uIGludG8KKyAgICAgICB2X2luZm9fbWFw IGZvciBlYWNoIHNhdGlzZmllZCBzdW1tYW5kLCB1c2luZyBWRUNUT1IgU1NB X05BTUUgYXMga2V5LgorCisgICAgMikgRm9yIGVhY2gga2V5IChWRUNUT1Ig U1NBX05BTUUpLCB2YWxpZGF0ZSBhbGwgaXRzIEJJVF9GSUVMRF9SRUZzIGFy ZQorICAgICAgIGNvbnRpbnVvdXMsIHRoZXkgY2FuIGNvdmVyIHRoZSB3aG9s ZSBWRUNUT1IgcGVyZmVjdGx5IHdpdGhvdXQgYW55IGhvbGVzLgorICAgICAg IE9idGFpbiBvbmUgVkVDVE9SIGxpc3Qgd2hpY2ggY29udGFpbiBjYW5kaWRh dGVzIHRvIGJlIHRyYW5zZm9ybWVkLgorCisgICAgMykgU29ydCB0aGUgVkVD VE9SIGxpc3QgYnkgbWFjaGluZSBtb2RlIG9mIFZFQ1RPUiB0eXBlLCBmb3Ig ZWFjaCBncm91cCBvZgorICAgICAgIGNhbmRpZGF0ZXMgd2l0aCBzYW1lIG1v ZGUsIGJ1aWxkIHRoZSBhZGRpdGlvbiBzdGF0ZW1lbnRzIGZvciB0aGVtIGFu ZAorICAgICAgIGdlbmVyYXRlIEJJVF9GSUVMRF9SRUZzIGFjY29yZGluZ2x5 LgorCisgICBUT0RPOgorICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0 aW9uIHJlcXVpcmVzIHRoZSB3aG9sZSBWRUNUT1JzIHNob3VsZCBiZSBmdWxs eQorICAgICAgIGNvdmVyZWQsIGJ1dCBpdCBjYW4gYmUgZXh0ZW5kZWQgdG8g c3VwcG9ydCBwYXJ0aWFsLCBjaGVja2luZyBhZGphY2VudAorICAgICAgIGJ1 dCBub3QgZmlsbCB0aGUgd2hvbGUsIGl0IG1heSBuZWVkIHNvbWUgY29zdCBt b2RlbCB0byBkZWZpbmUgdGhlCisgICAgICAgYm91bmRhcnkgdG8gZG8gb3Ig bm90LgorKi8KK3N0YXRpYyBib29sCit1bmRpc3RyaWJ1dGVfYml0cmVmX2Zv cl92ZWN0b3IgKGVudW0gdHJlZV9jb2RlIG9wY29kZSwKKwkJCQl2ZWM8b3Bl cmFuZF9lbnRyeSAqPiAqb3BzLCBzdHJ1Y3QgbG9vcCAqbG9vcCkKK3sKKyAg aWYgKG9wcy0+bGVuZ3RoICgpIDw9IDEpCisgICAgcmV0dXJuIGZhbHNlOwor CisgIGlmIChvcGNvZGUgIT0gUExVU19FWFBSICYmIG9wY29kZSAhPSBNVUxU X0VYUFIgJiYgb3Bjb2RlICE9IEJJVF9YT1JfRVhQUgorICAgICAgJiYgb3Bj b2RlICE9IEJJVF9JT1JfRVhQUiAmJiBvcGNvZGUgIT0gQklUX0FORF9FWFBS KQorICAgIHJldHVybiBmYWxzZTsKKworICBoYXNoX21hcDx0cmVlLCB2X2lu Zm9fcHRyPiB2X2luZm9fbWFwOworICBvcGVyYW5kX2VudHJ5ICpvZTE7Cisg IHVuc2lnbmVkIGk7CisKKyAgLyogRmluZCB0aG9zZSBzdW1tYW5kcyBmcm9t IFZFQ1RPUiBCSVRfRklFTERfUkVGIGluIGFkZGl0aW9uIGNoYWluLCBwdXQg dGhlCisgICAgIGluZm9ybWF0aW9uIGludG8gbWFwLiAgKi8KKyAgRk9SX0VB Q0hfVkVDX0VMVCAoKm9wcywgaSwgb2UxKQorICAgIHsKKyAgICAgIGVudW0g dHJlZV9jb2RlIGRjb2RlOworICAgICAgZ2ltcGxlICpvZTFkZWY7CisKKyAg ICAgIGlmIChUUkVFX0NPREUgKG9lMS0+b3ApICE9IFNTQV9OQU1FKQorCWNv bnRpbnVlOworICAgICAgb2UxZGVmID0gU1NBX05BTUVfREVGX1NUTVQgKG9l MS0+b3ApOworICAgICAgaWYgKCFpc19naW1wbGVfYXNzaWduIChvZTFkZWYp KQorCWNvbnRpbnVlOworICAgICAgZGNvZGUgPSBnaW1wbGVfYXNzaWduX3Jo c19jb2RlIChvZTFkZWYpOworICAgICAgaWYgKGRjb2RlICE9IEJJVF9GSUVM RF9SRUYgfHwgIWlzX3JlYXNzb2NpYWJsZV9vcCAob2UxZGVmLCBkY29kZSwg bG9vcCkpCisJY29udGludWU7CisKKyAgICAgIHRyZWUgcmhzID0gZ2ltcGxl X2Fzc2lnbl9yaHMxIChvZTFkZWYpOworICAgICAgdHJlZSB2ZWMgPSBUUkVF X09QRVJBTkQgKHJocywgMCk7CisgICAgICB0cmVlIHZlY190eXBlID0gVFJF RV9UWVBFICh2ZWMpOworCisgICAgICBpZiAoVFJFRV9DT0RFICh2ZWMpICE9 IFNTQV9OQU1FIHx8ICFWRUNUT1JfVFlQRV9QICh2ZWNfdHlwZSkpCisJY29u dGludWU7CisKKyAgICAgIC8qIENoZWNrIGNvbnN0IHZlY3RvciB0eXBlLCBj b25zdHJhaW4gQklUX0ZJRUxEX1JFRiBvZmZzZXQgYW5kIHNpemUuICAqLwor ICAgICAgaWYgKCFUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAodmVjX3R5cGUpLmlz X2NvbnN0YW50ICgpKQorCWNvbnRpbnVlOworCisgICAgICB0cmVlIGVsZW1f dHlwZSA9IFRSRUVfVFlQRSAodmVjX3R5cGUpOworICAgICAgdW5zaWduZWQg SE9TVF9XSURFX0lOVCBlbGVtX3NpemUKKwk9IFRSRUVfSU5UX0NTVF9MT1cg KFRZUEVfU0laRSAoZWxlbV90eXBlKSk7CisgICAgICBpZiAobWF5YmVfbmUg KGJpdF9maWVsZF9zaXplIChyaHMpLCBlbGVtX3NpemUpKQorCWNvbnRpbnVl OworCisgICAgICB1bnNpZ25lZCBpZHg7CisgICAgICBpZiAoIWNvbnN0YW50 X211bHRpcGxlX3AgKGJpdF9maWVsZF9vZmZzZXQgKHJocyksIGVsZW1fc2l6 ZSwgJmlkeCkpCisJY29udGludWU7CisKKyAgICAgIC8qIElnbm9yZSBpdCBp ZiB0YXJnZXQgbWFjaGluZSBjYW4ndCBzdXBwb3J0IHRoaXMgVkVDVE9SIHR5 cGUuICAqLworICAgICAgaWYgKCFWRUNUT1JfTU9ERV9QIChUWVBFX01PREUg KHZlY190eXBlKSkpCisJY29udGludWU7CisKKyAgICAgIC8qIElnbm9yZSBp dCBpZiB0YXJnZXQgbWFjaGluZSBjYW4ndCBzdXBwb3J0IHRoaXMgdHlwZSBv ZiBWRUNUT1IKKwkgb3BlcmF0aW9uLiAgKi8KKyAgICAgIG9wdGFiIG9wX3Rh YiA9IG9wdGFiX2Zvcl90cmVlX2NvZGUgKG9wY29kZSwgdmVjX3R5cGUsIG9w dGFiX3ZlY3Rvcik7CisgICAgICBpZiAob3B0YWJfaGFuZGxlciAob3BfdGFi LCBUWVBFX01PREUgKHZlY190eXBlKSkgPT0gQ09ERV9GT1Jfbm90aGluZykK Kwljb250aW51ZTsKKworICAgICAgdl9pbmZvX3B0ciAqaW5mb19wdHIgPSB2 X2luZm9fbWFwLmdldCAodmVjKTsKKyAgICAgIGlmIChpbmZvX3B0cikKKwl7 CisJICB2X2luZm9fcHRyIGluZm8gPSAqaW5mb19wdHI7CisJICBpbmZvLT5z YWZlX3B1c2ggKHN0ZDo6bWFrZV9wYWlyIChpZHgsIGkpKTsKKwl9CisgICAg ICBlbHNlCisJeworCSAgdl9pbmZvX3B0ciBpbmZvID0gbmV3IHZfaW5mbzsK KwkgIGluZm8tPnNhZmVfcHVzaCAoc3RkOjptYWtlX3BhaXIgKGlkeCwgaSkp OworCSAgdl9pbmZvX21hcC5wdXQgKHZlYywgaW5mbyk7CisJfQorICAgIH0K KworICAvKiBBdCBsZWFzdCB0d28gVkVDVE9SIHRvIGNvbWJpbmUuICAqLwor ICBpZiAodl9pbmZvX21hcC5lbGVtZW50cyAoKSA8PSAxKQorICAgIHsKKyAg ICAgIGNsZWFudXBfdmluZm9fbWFwICh2X2luZm9fbWFwKTsKKyAgICAgIHJl dHVybiBmYWxzZTsKKyAgICB9CisKKyAgLyogVmVyaWZ5IGFsbCBWRUNUT1Ig Y2FuZGlkYXRlcyBieSBjaGVja2luZyB0d28gY29uZGl0aW9uczoKKyAgICAg ICAxKSBzb3J0ZWQgb2Zmc2V0cyBhcmUgYWRqYWNlbnQsIG5vIGhvbGVzLgor ICAgICAgIDIpIGNhbiBmaWxsIHRoZSB3aG9sZSBWRUNUT1IgcGVyZmVjdGx5 LgorICAgICBBbmQgYWRkIHRoZSB2YWxpZCBjYW5kaWRhdGVzIHRvIGEgdmVj dG9yIGZvciBmdXJ0aGVyIGhhbmRsaW5nLiAgKi8KKyAgYXV0b192ZWM8dHJl ZT4gdmFsaWRfdmVjcyAodl9pbmZvX21hcC5lbGVtZW50cyAoKSk7CisgIHVu c2lnbmVkIG1vZGVfdG9fdG90YWxbTlVNX01BQ0hJTkVfTU9ERVNdOworICBt ZW1zZXQgKG1vZGVfdG9fdG90YWwsICdcMCcsIHNpemVvZiAobW9kZV90b190 b3RhbCkpOworICBmb3IgKGhhc2hfbWFwPHRyZWUsIHZfaW5mb19wdHI+Ojpp dGVyYXRvciBpdCA9IHZfaW5mb19tYXAuYmVnaW4gKCk7CisgICAgICAgaXQg IT0gdl9pbmZvX21hcC5lbmQgKCk7ICsraXQpCisgICAgeworICAgICAgdHJl ZSBjYW5kX3ZlYyA9ICgqaXQpLmZpcnN0OworICAgICAgdl9pbmZvX3B0ciBj YW5kX2luZm8gPSAoKml0KS5zZWNvbmQ7CisgICAgICB1bnNpZ25lZCBpbnQg bnVtX2VsZW1zID0gVkVDVE9SX0NTVF9ORUxUUyAoY2FuZF92ZWMpLnRvX2Nv bnN0YW50ICgpOworICAgICAgc2JpdG1hcCBob2xlcyA9IHNiaXRtYXBfYWxs b2MgKG51bV9lbGVtcyk7CisgICAgICBiaXRtYXBfb25lcyAoaG9sZXMpOwor ICAgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgICB2X2luZm9fZWxlbSAq Y3VycjsKKyAgICAgIEZPUl9FQUNIX1ZFQ19FTFQgKCpjYW5kX2luZm8sIGks IGN1cnIpCisJeworCSAgaWYgKCFiaXRtYXBfYml0X3AgKGhvbGVzLCBjdXJy LT5maXJzdCkpCisJICAgIHsKKwkgICAgICB2YWxpZCA9IGZhbHNlOworCSAg ICAgIGJyZWFrOworCSAgICB9CisJICBlbHNlCisJICAgIGJpdG1hcF9jbGVh cl9iaXQgKGhvbGVzLCBjdXJyLT5maXJzdCk7CisJfQorICAgICAgaWYgKHZh bGlkICYmIGJpdG1hcF9lbXB0eV9wIChob2xlcykpCisJeworCSAgdmFsaWRf dmVjcy5xdWlja19wdXNoIChjYW5kX3ZlYyk7CisJICAvKiBVcGRhdGUgdGhl IHRvdGFsIG51bWJlciBvZiB2YWxpZCBjYW5kaWRhdGVzIHdpdGggc2FtZSBt b2RlLiAgKi8KKwkgIG1vZGVfdG9fdG90YWxbKGludCkgVFlQRV9NT0RFIChU UkVFX1RZUEUgKGNhbmRfdmVjKSldKys7CisJfQorICAgICAgc2JpdG1hcF9m cmVlIChob2xlcyk7CisgICAgfQorCisgIHZhbGlkX3ZlY3MucXNvcnQgKHNv cnRfYnlfbWFjaF9tb2RlKTsKKyAgLyogR28gdGhyb3VnaCBhbGwgY2FuZGlk YXRlcyBieSBtYWNoaW5lIG1vZGUgb3JkZXIsIHF1ZXJ5IHRoZSBtb2RlX3Rv X3RvdGFsCisgICAgIHRvIGdldCB0aGUgdG90YWwgbnVtYmVyIGZvciBlYWNo IG1vZGUgYW5kIHNraXAgdGhlIHNpbmdsZSBvbmUuICAqLworICB0cmVlIHR2 ZWM7CisgIEZPUl9FQUNIX1ZFQ19FTFQgKHZhbGlkX3ZlY3MsIGksIHR2ZWMp CisgICAgeworICAgICAgdW5zaWduZWQgaW50IG1vZGUgPSBUWVBFX01PREUg KFRSRUVfVFlQRSAodHZlYykpOworICAgICAgdW5zaWduZWQgaW50IGNvdW50 ID0gbW9kZV90b190b3RhbFttb2RlXTsKKworICAgICAgLyogQnVpbGQgdGhl IHN1bSBmb3IgYWxsIGNhbmRpZGF0ZXMgd2l0aCBzYW1lIG1vZGUuICAqLwor ICAgICAgaWYgKGNvdW50ID49IDIpCisJeworCSAgdW5zaWduZWQgaW50IGxp bWl0ID0gaSArIGNvdW50OworCSAgZ2NjX2Fzc2VydCAobGltaXQgPD0gdmFs aWRfdmVjcy5sZW5ndGggKCkpOworCSAgdW5zaWduZWQgaW50IGlkeCwgaiwg azsKKwkgIGdpbXBsZSAqc3VtID0gTlVMTDsKKwkgIHZfaW5mb19wdHIgaW5m b19wdHI7CisJICB0cmVlIGlfdmVjID0gdmFsaWRfdmVjc1tpXTsKKwkgIHRy ZWUgc3VtX3ZlYyA9IGlfdmVjOworCSAgdl9pbmZvX2VsZW0gKmVsZW07CisJ ICBmb3IgKGogPSBpICsgMTsgaiA8IGxpbWl0OyBqKyspCisJICAgIHsKKwkg ICAgICBzdW0gPSBidWlsZF9hbmRfYWRkX3N1bSAoVFJFRV9UWVBFIChzdW1f dmVjKSwgc3VtX3ZlYywKKwkJCQkgICAgICAgdmFsaWRfdmVjc1tqXSwgb3Bj b2RlKTsKKwkgICAgICBzdW1fdmVjID0gZ2ltcGxlX2dldF9saHMgKHN1bSk7 CisJICAgICAgaW5mb19wdHIgPSAqKHZfaW5mb19tYXAuZ2V0ICh2YWxpZF92 ZWNzW2pdKSk7CisJICAgICAgLyogVXBkYXRlIHRob3NlIHJlbGF0ZWQgb3Bz IG9mIGN1cnJlbnQgY2FuZGlkYXRlIFZFQ1RPUi4gICovCisJICAgICAgRk9S X0VBQ0hfVkVDX0VMVCAoKmluZm9fcHRyLCBrLCBlbGVtKQorCQl7CisJCSAg aWR4ID0gZWxlbS0+c2Vjb25kOworCQkgIGdpbXBsZSAqZGVmID0gU1NBX05B TUVfREVGX1NUTVQgKCgqb3BzKVtpZHhdLT5vcCk7CisJCSAgLyogU2V0IHRo aXMgdGhlbiBvcCBkZWZpbml0aW9uIHdpbGwgZ2V0IERDRWQgbGF0ZXIuICAq LworCQkgIGdpbXBsZV9zZXRfdmlzaXRlZCAoZGVmLCB0cnVlKTsKKwkJICBp ZiAob3Bjb2RlID09IFBMVVNfRVhQUiB8fCBvcGNvZGUgPT0gQklUX1hPUl9F WFBSCisJCSAgICAgIHx8IG9wY29kZSA9PSBCSVRfSU9SX0VYUFIpCisJCSAg ICAoKm9wcylbaWR4XS0+b3AKKwkJICAgICAgPSBidWlsZF96ZXJvX2NzdCAo VFJFRV9UWVBFICgoKm9wcylbaWR4XS0+b3ApKTsKKwkJICBlbHNlIGlmIChv cGNvZGUgPT0gTVVMVF9FWFBSKQorCQkgICAgKCpvcHMpW2lkeF0tPm9wCisJ CSAgICAgID0gYnVpbGRfb25lX2NzdCAoVFJFRV9UWVBFICgoKm9wcylbaWR4 XS0+b3ApKTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGdjY19hc3Nl cnQgKG9wY29kZSA9PSBCSVRfQU5EX0VYUFIpOworCQkgICAgICAoKm9wcylb aWR4XS0+b3AKKwkJCT0gYnVpbGRfYWxsX29uZXNfY3N0IChUUkVFX1RZUEUg KCgqb3BzKVtpZHhdLT5vcCkpOworCQkgICAgfQorCQkgICgqb3BzKVtpZHhd LT5yYW5rID0gMDsKKwkJfQorCSAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1 bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJCXsKKwkJICBmcHJpbnRmIChk dW1wX2ZpbGUsICJHZW5lcmF0aW5nIGFkZGl0aW9uIC0+ICIpOworCQkgIHBy aW50X2dpbXBsZV9zdG10IChkdW1wX2ZpbGUsIHN1bSwgMCk7CisJCX0KKwkg ICAgfQorCSAgLyogUmVmZXJyaW5nIHRvIGFueSBnb29kIHNoYXBlIFZFQ1RP UiAoaGVyZSB1c2luZyBpX3ZlYyksIGdlbmVyYXRlCisJICAgICB0aGUgQklU X0ZJRUxEX1JFRiBzdGF0ZW1lbnRzIGFjY29yZGluZ2x5LiAgKi8KKwkgIGlu Zm9fcHRyID0gKih2X2luZm9fbWFwLmdldCAoaV92ZWMpKTsKKwkgIGdjY19h c3NlcnQgKHN1bSk7CisJICB0cmVlIGVsZW1fdHlwZSA9IFRSRUVfVFlQRSAo VFJFRV9UWVBFIChpX3ZlYykpOworCSAgRk9SX0VBQ0hfVkVDX0VMVCAoKmlu Zm9fcHRyLCBrLCBlbGVtKQorCSAgICB7CisJICAgICAgaWR4ID0gZWxlbS0+ c2Vjb25kOworCSAgICAgIHRyZWUgZHN0ID0gbWFrZV9zc2FfbmFtZSAoZWxl bV90eXBlKTsKKwkgICAgICBnaW1wbGUgKmdzID0gZ2ltcGxlX2J1aWxkX2Fz c2lnbiAoCisJCWRzdCwgQklUX0ZJRUxEX1JFRiwKKwkJYnVpbGQzIChCSVRf RklFTERfUkVGLCBlbGVtX3R5cGUsIHN1bV92ZWMsCisJCQlUWVBFX1NJWkUg KGVsZW1fdHlwZSksCisJCQliaXRzaXplX2ludCAoZWxlbS0+Zmlyc3QKKwkJ CQkgICAgICogdHJlZV90b191aHdpIChUWVBFX1NJWkUgKGVsZW1fdHlwZSkp KSkpOworCSAgICAgIGluc2VydF9zdG10X2FmdGVyIChncywgc3VtKTsKKwkg ICAgICBnaW1wbGUgKmRlZiA9IFNTQV9OQU1FX0RFRl9TVE1UICgoKm9wcylb aWR4XS0+b3ApOworCSAgICAgIC8qIFNldCB0aGlzIHRoZW4gb3AgZGVmaW5p dGlvbiB3aWxsIGdldCBEQ0VkIGxhdGVyLiAgKi8KKwkgICAgICBnaW1wbGVf c2V0X3Zpc2l0ZWQgKGRlZiwgdHJ1ZSk7CisJICAgICAgKCpvcHMpW2lkeF0t Pm9wID0gZ2ltcGxlX2Fzc2lnbl9saHMgKGdzKTsKKwkgICAgICAoKm9wcylb aWR4XS0+cmFuayA9IGdldF9yYW5rICgoKm9wcylbaWR4XS0+b3ApOworCSAg ICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlM UykpCisJCXsKKwkJICBmcHJpbnRmIChkdW1wX2ZpbGUsICJHZW5lcmF0aW5n IGJpdF9maWVsZF9yZWYgLT4gIik7CisJCSAgcHJpbnRfZ2ltcGxlX3N0bXQg KGR1bXBfZmlsZSwgZ3MsIDApOworCQl9CisJICAgIH0KKwkgIGkgPSBsaW1p dCAtIDE7CisJfQorICAgIH0KKworICBpZiAoZHVtcF9maWxlICYmIChkdW1w X2ZsYWdzICYgVERGX0RFVEFJTFMpKQorICAgIHsKKyAgICAgIGZwcmludGYg KGR1bXBfZmlsZSwgInVuZGlzdHJpYnV0aW9uZyBiaXRfZmllbGRfcmVmIGZv ciB2ZWN0b3IgZG9uZS5cbiIpOworICAgIH0KKworICBjbGVhbnVwX3ZpbmZv X21hcCAodl9pbmZvX21hcCk7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKIC8q IElmIE9QQ09ERSBpcyBCSVRfSU9SX0VYUFIgb3IgQklUX0FORF9FWFBSIGFu ZCBDVVJSIGlzIGEgY29tcGFyaXNvbgogICAgZXhwcmVzc2lvbiwgZXhhbWlu ZSB0aGUgb3RoZXIgT1BTIHRvIHNlZSBpZiBhbnkgb2YgdGhlbSBhcmUgY29t cGFyaXNvbnMKICAgIG9mIHRoZSBzYW1lIHZhbHVlcywgd2hpY2ggd2UgbWF5 IGJlIGFibGUgdG8gY29tYmluZSBvciBlbGltaW5hdGUuCkBAIC01ODgxLDEx ICs2MTU3LDYgQEAgcmVhc3NvY2lhdGVfYmIgKGJhc2ljX2Jsb2NrIGJiKQog CSAgdHJlZSBsaHMsIHJoczEsIHJoczI7CiAJICBlbnVtIHRyZWVfY29kZSBy aHNfY29kZSA9IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQpOwogCi0J ICAvKiBJZiB0aGlzIGlzIG5vdCBhIGdpbXBsZSBiaW5hcnkgZXhwcmVzc2lv biwgdGhlcmUgaXMKLQkgICAgIG5vdGhpbmcgZm9yIHVzIHRvIGRvIHdpdGgg aXQuICAqLwotCSAgaWYgKGdldF9naW1wbGVfcmhzX2NsYXNzIChyaHNfY29k ZSkgIT0gR0lNUExFX0JJTkFSWV9SSFMpCi0JICAgIGNvbnRpbnVlOwotCiAJ ICAvKiBJZiB0aGlzIHdhcyBwYXJ0IG9mIGFuIGFscmVhZHkgcHJvY2Vzc2Vk IHN0YXRlbWVudCwKIAkgICAgIHdlIGRvbid0IG5lZWQgdG8gdG91Y2ggaXQg YWdhaW4uICovCiAJICBpZiAoZ2ltcGxlX3Zpc2l0ZWRfcCAoc3RtdCkpCkBA IC01OTEyLDYgKzYxODMsMTEgQEAgcmVhc3NvY2lhdGVfYmIgKGJhc2ljX2Js b2NrIGJiKQogCSAgICAgIGNvbnRpbnVlOwogCSAgICB9CiAKKwkgIC8qIElm IHRoaXMgaXMgbm90IGEgZ2ltcGxlIGJpbmFyeSBleHByZXNzaW9uLCB0aGVy ZSBpcworCSAgICAgbm90aGluZyBmb3IgdXMgdG8gZG8gd2l0aCBpdC4gICov CisJICBpZiAoZ2V0X2dpbXBsZV9yaHNfY2xhc3MgKHJoc19jb2RlKSAhPSBH SU1QTEVfQklOQVJZX1JIUykKKwkgICAgY29udGludWU7CisKIAkgIGxocyA9 IGdpbXBsZV9hc3NpZ25fbGhzIChzdG10KTsKIAkgIHJoczEgPSBnaW1wbGVf YXNzaWduX3JoczEgKHN0bXQpOwogCSAgcmhzMiA9IGdpbXBsZV9hc3NpZ25f cmhzMiAoc3RtdCk7CkBAIC01OTUwLDcgKzYyMjYsMTIgQEAgcmVhc3NvY2lh dGVfYmIgKGJhc2ljX2Jsb2NrIGJiKQogCQkgIG9wcy5xc29ydCAoc29ydF9i eV9vcGVyYW5kX3JhbmspOwogCQkgIG9wdGltaXplX29wc19saXN0IChyaHNf Y29kZSwgJm9wcyk7CiAJCX0KLQorCSAgICAgIGlmICh1bmRpc3RyaWJ1dGVf Yml0cmVmX2Zvcl92ZWN0b3IgKHJoc19jb2RlLCAmb3BzLAorCQkJCQkJICBs b29wX2NvbnRhaW5pbmdfc3RtdCAoc3RtdCkpKQorCQl7CisJCSAgb3BzLnFz b3J0IChzb3J0X2J5X29wZXJhbmRfcmFuayk7CisJCSAgb3B0aW1pemVfb3Bz X2xpc3QgKHJoc19jb2RlLCAmb3BzKTsKKwkJfQogCSAgICAgIGlmIChyaHNf Y29kZSA9PSBQTFVTX0VYUFIKIAkJICAmJiB0cmFuc2Zvcm1fYWRkX3RvX211 bHRpcGx5ICgmb3BzKSkKIAkJb3BzLnFzb3J0IChzb3J0X2J5X29wZXJhbmRf cmFuayk7Cgo= --------------3A71B6AEAFE7D07FCF9951CD--