From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FUZZY_XPILL,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6AC0FC31E5E for ; Tue, 18 Jun 2019 19:35:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 23F23214AF for ; Tue, 18 Jun 2019 19:35:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="mSiDgXI9" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730446AbfFRTfW (ORCPT ); Tue, 18 Jun 2019 15:35:22 -0400 Received: from userp2130.oracle.com ([156.151.31.86]:53900 "EHLO userp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730189AbfFRTfV (ORCPT ); Tue, 18 Jun 2019 15:35:21 -0400 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x5IJYS0J163773; Tue, 18 Jun 2019 19:34:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc : references : from : message-id : date : mime-version : in-reply-to : content-type; s=corp-2018-07-02; bh=bG/harquG0JxDG3X76hE3z/lJpsZLksfmtdkJpB1sA4=; b=mSiDgXI9tBUYBmdgbZXjA1FD+b6e6kVtOCp8OI6ibkUV1iBe0sBNiG1Kzi0xY7adJxQB ExOnkEMiEAdblmfzse2vcwBhYd8ycoFfixfPr5gbFtTsaWCy4OcBjdzrjxLyM2cS6X+f t8izIz9GiCWzwD/rB+WATuyGYU5AcFndrcPuPbcKr0I4lyrexDr4Jea0PqivQ/DlZcqG 6acEQOPsrkcnvGluZGb2Udb7m3FMHDX5PbOUdz+k7IoAN/a0lBPAGO9A+j1624CwS326 K/3z+9wFPe3cw+d2fRYB6ebvsLCnZOcPwMbo6frQf6O0jWmohspjhV5BPcGUSQ5Kr3pI /Q== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2130.oracle.com with ESMTP id 2t4r3tpgms-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 18 Jun 2019 19:34:35 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x5IJXAFQ124391; Tue, 18 Jun 2019 19:34:35 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3020.oracle.com with ESMTP id 2t5h5txknn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 18 Jun 2019 19:34:35 +0000 Received: from abhmp0001.oracle.com (abhmp0001.oracle.com [141.146.116.7]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id x5IJYO1a009289; Tue, 18 Jun 2019 19:34:24 GMT Received: from [10.152.35.77] (/10.152.35.77) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 18 Jun 2019 12:34:24 -0700 Subject: Re: kernel BUG at arch/x86/kvm/x86.c:361! on AMD CPU To: Borislav Petkov , Dmitry Vyukov Cc: Sean Christopherson , Joerg Roedel , Paolo Bonzini , Ingo Molnar , "H. Peter Anvin" , KVM list , syzkaller , Boris Ostrovsky References: <37952f51-7687-672c-45d9-92ba418c9133@oracle.com> <20190612161255.GN32652@zn.tnic> <20190612195152.GQ32652@zn.tnic> <20190612205430.GA26320@linux.intel.com> <20190613071805.GA11598@zn.tnic> <20190618175153.GC26346@zn.tnic> <20190618182733.GD26346@zn.tnic> From: George Kennedy Organization: Oracle Corporation Message-ID: Date: Tue, 18 Jun 2019 15:34:21 -0400 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <20190618182733.GD26346@zn.tnic> Content-Type: multipart/mixed; boundary="------------00D67D11D7F555F037DA12B0" Content-Language: en-US X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9292 signatures=668687 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1906180154 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9292 signatures=668687 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1906180154 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org This is a multi-part message in MIME format. --------------00D67D11D7F555F037DA12B0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit The guest crash can be reproduced with only the Syzkaller reproducer C program (see attached) run from the guest. Syzkaller is not running. George On 6/18/2019 2:27 PM, Borislav Petkov wrote: > On Tue, Jun 18, 2019 at 08:01:06PM +0200, Dmitry Vyukov wrote: >> I am not a KVM folk either, but FWIW syzkaller is capable of creating >> a double-nested VM. > Aaaha, there it is. :) > >> The code is somewhat VMX-specific, but it should >> be capable at least executing some SVM instructions inside of guest. >> This code setups VM to run a given instruction sequences (should be generic): >> https://github.com/google/syzkaller/blob/34bf9440bd06034f86b5d9ac8afbf078129cbdae/executor/common_kvm_amd64.h >> The instruction generator is based on Intel XED so it may be somewhat >> Intel-biased, but at least I see some mentions of SVM there: >> https://raw.githubusercontent.com/google/syzkaller/34bf9440bd06034f86b5d9ac8afbf078129cbdae/pkg/ifuzz/gen/all-enc-instructions.txt > Right, and that right there looks wrong: > > ICLASS : VMLOAD > CPL : 3 > CATEGORY : SYSTEM > EXTENSION : SVM > ATTRIBUTES: PROTECTED_MODE > PATTERN : 0x0F 0x01 MOD[0b11] MOD=3 REG[0b011] RM[0b010] > OPERANDS : REG0=OrAX():r:IMPL > > That is, *if* "CPL: 3" above means in XED context that VMLOAD is > supposed to be run in CPL3, then this is wrong because VMLOAD #GPs if > CPL was not 0. Ditto for VMRUN and a couple of others. > > Perhaps that support was added at some point but not really run on AMD > hw yet... > --------------00D67D11D7F555F037DA12B0 Content-Type: text/plain; charset=UTF-8; name="amd_kvm_repro.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="amd_kvm_repro.c" Ly8gYXV0b2dlbmVyYXRlZCBieSBzeXprYWxsZXIgKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29n bGUvc3l6a2FsbGVyKQoKI2RlZmluZSBfR05VX1NPVVJDRSAKCiNpbmNsdWRlIDxkaXJlbnQu aD4KI2luY2x1ZGUgPGVuZGlhbi5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPGZj bnRsLmg+CiNpbmNsdWRlIDxzZXRqbXAuaD4KI2luY2x1ZGUgPHNpZ25hbC5oPgojaW5jbHVk ZSA8c3RkYXJnLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxzdGRkZWYuaD4K I2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxp Yi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KI2luY2x1 ZGUgPHN5cy9wcmN0bC5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPHN5cy9z eXNjYWxsLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+ CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KCiNpbmNsdWRlIDxsaW51 eC9rdm0uaD4KCnVuc2lnbmVkIGxvbmcgbG9uZyBwcm9jaWQ7CgpzdGF0aWMgX190aHJlYWQg aW50IHNraXBfc2VndjsKc3RhdGljIF9fdGhyZWFkIGptcF9idWYgc2Vndl9lbnY7CgpzdGF0 aWMgdm9pZCBzZWd2X2hhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBj dHgpCnsKCXVpbnRwdHJfdCBhZGRyID0gKHVpbnRwdHJfdClpbmZvLT5zaV9hZGRyOwoJY29u c3QgdWludHB0cl90IHByb2dfc3RhcnQgPSAxIDw8IDIwOwoJY29uc3QgdWludHB0cl90IHBy b2dfZW5kID0gMTAwIDw8IDIwOwoJaWYgKF9fYXRvbWljX2xvYWRfbigmc2tpcF9zZWd2LCBf X0FUT01JQ19SRUxBWEVEKSAmJiAoYWRkciA8IHByb2dfc3RhcnQgfHwgYWRkciA+IHByb2df ZW5kKSkgewoJCV9sb25nam1wKHNlZ3ZfZW52LCAxKTsKCX0KCWV4aXQoc2lnKTsKfQoKc3Rh dGljIHZvaWQgaW5zdGFsbF9zZWd2X2hhbmRsZXIodm9pZCkKewoJc3RydWN0IHNpZ2FjdGlv biBzYTsKCW1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOwoJc2Euc2FfaGFuZGxlciA9IFNJ R19JR047CglzeXNjYWxsKFNZU19ydF9zaWdhY3Rpb24sIDB4MjAsICZzYSwgTlVMTCwgOCk7 CglzeXNjYWxsKFNZU19ydF9zaWdhY3Rpb24sIDB4MjEsICZzYSwgTlVMTCwgOCk7CgltZW1z ZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKCXNhLnNhX3NpZ2FjdGlvbiA9IHNlZ3ZfaGFuZGxl cjsKCXNhLnNhX2ZsYWdzID0gU0FfTk9ERUZFUiB8IFNBX1NJR0lORk87CglzaWdhY3Rpb24o U0lHU0VHViwgJnNhLCBOVUxMKTsKCXNpZ2FjdGlvbihTSUdCVVMsICZzYSwgTlVMTCk7Cn0K CiNkZWZpbmUgTk9ORkFJTElORyguLi4pIHsgX19hdG9taWNfZmV0Y2hfYWRkKCZza2lwX3Nl Z3YsIDEsIF9fQVRPTUlDX1NFUV9DU1QpOyBpZiAoX3NldGptcChzZWd2X2VudikgPT0gMCkg eyBfX1ZBX0FSR1NfXzsgfSBfX2F0b21pY19mZXRjaF9zdWIoJnNraXBfc2VndiwgMSwgX19B VE9NSUNfU0VRX0NTVCk7IH0KCnN0YXRpYyB2b2lkIHNsZWVwX21zKHVpbnQ2NF90IG1zKQp7 Cgl1c2xlZXAobXMgKiAxMDAwKTsKfQoKc3RhdGljIHVpbnQ2NF90IGN1cnJlbnRfdGltZV9t cyh2b2lkKQp7CglzdHJ1Y3QgdGltZXNwZWMgdHM7CglpZiAoY2xvY2tfZ2V0dGltZShDTE9D S19NT05PVE9OSUMsICZ0cykpCglleGl0KDEpOwoJcmV0dXJuICh1aW50NjRfdCl0cy50dl9z ZWMgKiAxMDAwICsgKHVpbnQ2NF90KXRzLnR2X25zZWMgLyAxMDAwMDAwOwp9CgpzdGF0aWMg Ym9vbCB3cml0ZV9maWxlKGNvbnN0IGNoYXIqIGZpbGUsIGNvbnN0IGNoYXIqIHdoYXQsIC4u LikKewoJY2hhciBidWZbMTAyNF07Cgl2YV9saXN0IGFyZ3M7Cgl2YV9zdGFydChhcmdzLCB3 aGF0KTsKCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCB3aGF0LCBhcmdzKTsKCXZhX2Vu ZChhcmdzKTsKCWJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKCWludCBsZW4gPSBzdHJsZW4o YnVmKTsKCWludCBmZCA9IG9wZW4oZmlsZSwgT19XUk9OTFkgfCBPX0NMT0VYRUMpOwoJaWYg KGZkID09IC0xKQoJCXJldHVybiBmYWxzZTsKCWlmICh3cml0ZShmZCwgYnVmLCBsZW4pICE9 IGxlbikgewoJCWludCBlcnIgPSBlcnJubzsKCQljbG9zZShmZCk7CgkJZXJybm8gPSBlcnI7 CgkJcmV0dXJuIGZhbHNlOwoJfQoJY2xvc2UoZmQpOwoJcmV0dXJuIHRydWU7Cn0KCmNvbnN0 IGNoYXIga3ZtX2FzbTE2X2NwbDNbXSA9ICJceDBmXHgyMFx4YzBceDY2XHg4M1x4YzhceDAx XHgwZlx4MjJceGMwXHhiOFx4YTBceDAwXHgwZlx4MDBceGQ4XHhiOFx4MmJceDAwXHg4ZVx4 ZDhceDhlXHhjMFx4OGVceGUwXHg4ZVx4ZThceGJjXHgwMFx4MDFceGM3XHgwNlx4MDBceDAx XHgxZFx4YmFceGM3XHgwNlx4MDJceDAxXHgyM1x4MDBceGM3XHgwNlx4MDRceDAxXHgwMFx4 MDFceGM3XHgwNlx4MDZceDAxXHgyYlx4MDBceGNiIjsKY29uc3QgY2hhciBrdm1fYXNtMzJf cGFnZWRbXSA9ICJceDBmXHgyMFx4YzBceDBkXHgwMFx4MDBceDAwXHg4MFx4MGZceDIyXHhj MCI7CmNvbnN0IGNoYXIga3ZtX2FzbTMyX3ZtODZbXSA9ICJceDY2XHhiOFx4YjhceDAwXHgw Zlx4MDBceGQ4XHhlYVx4MDBceDAwXHgwMFx4MDBceGQwXHgwMCI7CmNvbnN0IGNoYXIga3Zt X2FzbTMyX3BhZ2VkX3ZtODZbXSA9ICJceDBmXHgyMFx4YzBceDBkXHgwMFx4MDBceDAwXHg4 MFx4MGZceDIyXHhjMFx4NjZceGI4XHhiOFx4MDBceDBmXHgwMFx4ZDhceGVhXHgwMFx4MDBc eDAwXHgwMFx4ZDBceDAwIjsKY29uc3QgY2hhciBrdm1fYXNtNjRfZW5hYmxlX2xvbmdbXSA9 ICJceDBmXHgyMFx4YzBceDBkXHgwMFx4MDBceDAwXHg4MFx4MGZceDIyXHhjMFx4ZWFceGRl XHhjMFx4YWRceDBiXHg1MFx4MDBceDQ4XHhjN1x4YzBceGQ4XHgwMFx4MDBceDAwXHgwZlx4 MDBceGQ4IjsKY29uc3QgY2hhciBrdm1fYXNtNjRfaW5pdF92bVtdID0gIlx4MGZceDIwXHhj MFx4MGRceDAwXHgwMFx4MDBceDgwXHgwZlx4MjJceGMwXHhlYVx4ZGVceGMwXHhhZFx4MGJc eDUwXHgwMFx4NDhceGM3XHhjMFx4ZDhceDAwXHgwMFx4MDBceDBmXHgwMFx4ZDhceDQ4XHhj N1x4YzFceDNhXHgwMFx4MDBceDAwXHgwZlx4MzJceDQ4XHg4M1x4YzhceDA1XHgwZlx4MzBc eDBmXHgyMFx4ZTBceDQ4XHgwZFx4MDBceDIwXHgwMFx4MDBceDBmXHgyMlx4ZTBceDQ4XHhj N1x4YzFceDgwXHgwNFx4MDBceDAwXHgwZlx4MzJceDQ4XHhjN1x4YzJceDAwXHg2MFx4MDBc eDAwXHg4OVx4MDJceDQ4XHhjN1x4YzJceDAwXHg3MFx4MDBceDAwXHg4OVx4MDJceDQ4XHhj N1x4YzBceDAwXHg1Zlx4MDBceDAwXHhmM1x4MGZceGM3XHgzMFx4NDhceGM3XHhjMFx4MDhc eDVmXHgwMFx4MDBceDY2XHgwZlx4YzdceDMwXHgwZlx4YzdceDMwXHg0OFx4YzdceGMxXHg4 MVx4MDRceDAwXHgwMFx4MGZceDMyXHg0OFx4ODNceGM4XHgzZlx4NDhceDIxXHhkMFx4NDhc eGM3XHhjMlx4MDBceDQwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDAyXHg0 MFx4MDBceDAwXHg0OFx4YjhceDg0XHg5ZVx4OTlceGYzXHgwMFx4MDBceDAwXHgwMFx4MGZc eDc5XHhkMFx4NDhceGM3XHhjMlx4MWVceDQwXHgwMFx4MDBceDQ4XHhjN1x4YzBceDgxXHgw MFx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMxXHg4M1x4MDRceDAwXHgwMFx4MGZc eDMyXHg0OFx4MGRceGZmXHg2Zlx4MDNceDAwXHg0OFx4MjFceGQwXHg0OFx4YzdceGMyXHgw Y1x4NDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMVx4ODRceDA0XHgwMFx4MDBc eDBmXHgzMlx4NDhceDBkXHhmZlx4MTdceDAwXHgwMFx4NDhceDIxXHhkMFx4NDhceGM3XHhj Mlx4MTJceDQwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDA0XHgyY1x4MDBc eDAwXHg0OFx4YzdceGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhj Mlx4MDBceDI4XHgwMFx4MDBceDQ4XHhjN1x4YzBceGZmXHhmZlx4ZmZceGZmXHgwZlx4Nzlc eGQwXHg0OFx4YzdceGMyXHgwMlx4MGNceDAwXHgwMFx4NDhceGM3XHhjMFx4NTBceDAwXHgw MFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzBceDU4XHgwMFx4MDBceDAwXHg0OFx4Yzdc eGMyXHgwMFx4MGNceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MDRceDBjXHgw MFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDA2XHgwY1x4MDBceDAwXHgwZlx4Nzlc eGQwXHg0OFx4YzdceGMyXHgwOFx4MGNceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhj Mlx4MGFceDBjXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzBceGQ4XHgwMFx4MDBc eDAwXHg0OFx4YzdceGMyXHgwY1x4MGNceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhj Mlx4MDJceDJjXHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwNVx4MDBceDAwXHgwZlx4Nzlc eGQwXHg0OFx4YzdceGMyXHgwMFx4NGNceDAwXHgwMFx4NDhceGM3XHhjMFx4NTBceDAwXHgw MFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDEwXHg2Y1x4MDBceDAwXHg0OFx4Yzdc eGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MTJceDZjXHgw MFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwMFx4MDBceDAwXHgwZlx4NzlceGQwXHgwZlx4MjBc eGMwXHg0OFx4YzdceGMyXHgwMFx4NmNceDAwXHgwMFx4NDhceDg5XHhjMFx4MGZceDc5XHhk MFx4MGZceDIwXHhkOFx4NDhceGM3XHhjMlx4MDJceDZjXHgwMFx4MDBceDQ4XHg4OVx4YzBc eDBmXHg3OVx4ZDBceDBmXHgyMFx4ZTBceDQ4XHhjN1x4YzJceDA0XHg2Y1x4MDBceDAwXHg0 OFx4ODlceGMwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgwNlx4NmNceDAwXHgwMFx4NDhc eGM3XHhjMFx4MDBceDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDA4XHg2 Y1x4MDBceDAwXHg0OFx4YzdceGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhc eGM3XHhjMlx4MGFceDZjXHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHgzYVx4MDBceDAwXHgw Zlx4NzlceGQwXHg0OFx4YzdceGMyXHgwY1x4NmNceDAwXHgwMFx4NDhceGM3XHhjMFx4MDBc eDEwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDBlXHg2Y1x4MDBceDAwXHg0 OFx4YzdceGMwXHgwMFx4MzhceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MTRc eDZjXHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwMFx4MDBceDAwXHgwZlx4NzlceGQwXHg0 OFx4YzdceGMyXHgxNlx4NmNceDAwXHgwMFx4NDhceDhiXHgwNFx4MjVceDEwXHg1Zlx4MDBc eDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgwMFx4MDBceDAwXHgwMFx4NDhceGM3XHhj MFx4MDFceDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDAyXHgwMFx4MDBc eDAwXHg0OFx4YzdceGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhj Mlx4MDBceDIwXHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwMFx4MDBceDAwXHgwZlx4Nzlc eGQwXHg0OFx4YzdceGMyXHgwMlx4MjBceDAwXHgwMFx4NDhceGM3XHhjMFx4MDBceDAwXHgw MFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDA0XHgyMFx4MDBceDAwXHg0OFx4Yzdc eGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MDZceDIwXHgw MFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwMFx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4Yzdc eGMxXHg3N1x4MDJceDAwXHgwMFx4MGZceDMyXHg0OFx4YzFceGUyXHgyMFx4NDhceDA5XHhk MFx4NDhceGM3XHhjMlx4MDBceDJjXHgwMFx4MDBceDQ4XHg4OVx4YzBceDBmXHg3OVx4ZDBc eDQ4XHhjN1x4YzJceDA0XHg0MFx4MDBceDAwXHg0OFx4YzdceGMwXHgwMFx4MDBceDAwXHgw MFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MGFceDQwXHgwMFx4MDBceDQ4XHhjN1x4YzBc eDAwXHgwMFx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgwZVx4NDBceDAwXHgw MFx4NDhceGM3XHhjMFx4MDBceDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJc eDEwXHg0MFx4MDBceDAwXHg0OFx4YzdceGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhk MFx4NDhceGM3XHhjMlx4MTZceDQwXHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwMFx4MDBc eDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgxNFx4NDBceDAwXHgwMFx4NDhceGM3XHhj MFx4MDBceDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDAwXHg2MFx4MDBc eDAwXHg0OFx4YzdceGMwXHhmZlx4ZmZceGZmXHhmZlx4MGZceDc5XHhkMFx4NDhceGM3XHhj Mlx4MDJceDYwXHgwMFx4MDBceDQ4XHhjN1x4YzBceGZmXHhmZlx4ZmZceGZmXHgwZlx4Nzlc eGQwXHg0OFx4YzdceGMyXHgxY1x4MjBceDAwXHgwMFx4NDhceGM3XHhjMFx4MDBceDAwXHgw MFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDFlXHgyMFx4MDBceDAwXHg0OFx4Yzdc eGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MjBceDIwXHgw MFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwMFx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4Yzdc eGMyXHgyMlx4MjBceDAwXHgwMFx4NDhceGM3XHhjMFx4MDBceDAwXHgwMFx4MDBceDBmXHg3 OVx4ZDBceDQ4XHhjN1x4YzJceDAwXHgwOFx4MDBceDAwXHg0OFx4YzdceGMwXHg1OFx4MDBc eDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MDJceDA4XHgwMFx4MDBceDQ4XHhj N1x4YzBceDUwXHgwMFx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgwNFx4MDhc eDAwXHgwMFx4NDhceGM3XHhjMFx4NThceDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhj N1x4YzJceDA2XHgwOFx4MDBceDAwXHg0OFx4YzdceGMwXHg1OFx4MDBceDAwXHgwMFx4MGZc eDc5XHhkMFx4NDhceGM3XHhjMlx4MDhceDA4XHgwMFx4MDBceDQ4XHhjN1x4YzBceDU4XHgw MFx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgwYVx4MDhceDAwXHgwMFx4NDhc eGM3XHhjMFx4NThceDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDBjXHgw OFx4MDBceDAwXHg0OFx4YzdceGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhc eGM3XHhjMlx4MGVceDA4XHgwMFx4MDBceDQ4XHhjN1x4YzBceGQ4XHgwMFx4MDBceDAwXHgw Zlx4NzlceGQwXHg0OFx4YzdceGMyXHgxMlx4NjhceDAwXHgwMFx4NDhceGM3XHhjMFx4MDBc eDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDE0XHg2OFx4MDBceDAwXHg0 OFx4YzdceGMwXHgwMFx4M2FceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MTZc eDY4XHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHgxMFx4MDBceDAwXHgwZlx4NzlceGQwXHg0 OFx4YzdceGMyXHgxOFx4NjhceDAwXHgwMFx4NDhceGM3XHhjMFx4MDBceDM4XHgwMFx4MDBc eDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDAwXHg0OFx4MDBceDAwXHg0OFx4YzdceGMwXHhm Zlx4ZmZceDBmXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MDJceDQ4XHgwMFx4MDBc eDQ4XHhjN1x4YzBceGZmXHhmZlx4MGZceDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgw NFx4NDhceDAwXHgwMFx4NDhceGM3XHhjMFx4ZmZceGZmXHgwZlx4MDBceDBmXHg3OVx4ZDBc eDQ4XHhjN1x4YzJceDA2XHg0OFx4MDBceDAwXHg0OFx4YzdceGMwXHhmZlx4ZmZceDBmXHgw MFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MDhceDQ4XHgwMFx4MDBceDQ4XHhjN1x4YzBc eGZmXHhmZlx4MGZceDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgwYVx4NDhceDAwXHgw MFx4NDhceGM3XHhjMFx4ZmZceGZmXHgwZlx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJc eDBjXHg0OFx4MDBceDAwXHg0OFx4YzdceGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhk MFx4NDhceGM3XHhjMlx4MGVceDQ4XHgwMFx4MDBceDQ4XHhjN1x4YzBceGZmXHgxZlx4MDBc eDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgxMFx4NDhceDAwXHgwMFx4NDhceGM3XHhj MFx4ZmZceDFmXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDEyXHg0OFx4MDBc eDAwXHg0OFx4YzdceGMwXHhmZlx4MWZceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhj Mlx4MTRceDQ4XHgwMFx4MDBceDQ4XHhjN1x4YzBceDkzXHg0MFx4MDBceDAwXHgwZlx4Nzlc eGQwXHg0OFx4YzdceGMyXHgxNlx4NDhceDAwXHgwMFx4NDhceGM3XHhjMFx4OWJceDIwXHgw MFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDE4XHg0OFx4MDBceDAwXHg0OFx4Yzdc eGMwXHg5M1x4NDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MWFceDQ4XHgw MFx4MDBceDQ4XHhjN1x4YzBceDkzXHg0MFx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4Yzdc eGMyXHgxY1x4NDhceDAwXHgwMFx4NDhceGM3XHhjMFx4OTNceDQwXHgwMFx4MDBceDBmXHg3 OVx4ZDBceDQ4XHhjN1x4YzJceDFlXHg0OFx4MDBceDAwXHg0OFx4YzdceGMwXHg5M1x4NDBc eDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MjBceDQ4XHgwMFx4MDBceDQ4XHhj N1x4YzBceDgyXHgwMFx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgyMlx4NDhc eDAwXHgwMFx4NDhceGM3XHhjMFx4OGJceDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhj N1x4YzJceDFjXHg2OFx4MDBceDAwXHg0OFx4YzdceGMwXHgwMFx4MDBceDAwXHgwMFx4MGZc eDc5XHhkMFx4NDhceGM3XHhjMlx4MWVceDY4XHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHg5 MVx4MDBceDAwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMyXHgyMFx4NjhceDAwXHgwMFx4NDhc eGM3XHhjMFx4MDJceDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDA2XHgy OFx4MDBceDAwXHg0OFx4YzdceGMwXHgwMFx4MDVceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhc eGM3XHhjMlx4MGFceDI4XHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwMFx4MDBceDAwXHgw Zlx4NzlceGQwXHg0OFx4YzdceGMyXHgwY1x4MjhceDAwXHgwMFx4NDhceGM3XHhjMFx4MDBc eDAwXHgwMFx4MDBceDBmXHg3OVx4ZDBceDQ4XHhjN1x4YzJceDBlXHgyOFx4MDBceDAwXHg0 OFx4YzdceGMwXHgwMFx4MDBceDAwXHgwMFx4MGZceDc5XHhkMFx4NDhceGM3XHhjMlx4MTBc eDI4XHgwMFx4MDBceDQ4XHhjN1x4YzBceDAwXHgwMFx4MDBceDAwXHgwZlx4NzlceGQwXHgw Zlx4MjBceGMwXHg0OFx4YzdceGMyXHgwMFx4NjhceDAwXHgwMFx4NDhceDg5XHhjMFx4MGZc eDc5XHhkMFx4MGZceDIwXHhkOFx4NDhceGM3XHhjMlx4MDJceDY4XHgwMFx4MDBceDQ4XHg4 OVx4YzBceDBmXHg3OVx4ZDBceDBmXHgyMFx4ZTBceDQ4XHhjN1x4YzJceDA0XHg2OFx4MDBc eDAwXHg0OFx4ODlceGMwXHgwZlx4NzlceGQwXHg0OFx4YzdceGMwXHgxOFx4NWZceDAwXHgw MFx4NDhceDhiXHgxMFx4NDhceGM3XHhjMFx4MjBceDVmXHgwMFx4MDBceDQ4XHg4Ylx4MDhc eDQ4XHgzMVx4YzBceDBmXHg3OFx4ZDBceDQ4XHgzMVx4YzhceDBmXHg3OVx4ZDBceDBmXHgw MVx4YzJceDQ4XHhjN1x4YzJceDAwXHg0NFx4MDBceDAwXHgwZlx4NzhceGQwXHhmNCI7CmNv bnN0IGNoYXIga3ZtX2FzbTY0X3ZtX2V4aXRbXSA9ICJceDQ4XHhjN1x4YzNceDAwXHg0NFx4 MDBceDAwXHgwZlx4NzhceGRhXHg0OFx4YzdceGMzXHgwMlx4NDRceDAwXHgwMFx4MGZceDc4 XHhkOVx4NDhceGM3XHhjMFx4MDBceDY0XHgwMFx4MDBceDBmXHg3OFx4YzBceDQ4XHhjN1x4 YzNceDFlXHg2OFx4MDBceDAwXHgwZlx4NzhceGRiXHhmNCI7CmNvbnN0IGNoYXIga3ZtX2Fz bTY0X2NwbDNbXSA9ICJceDBmXHgyMFx4YzBceDBkXHgwMFx4MDBceDAwXHg4MFx4MGZceDIy XHhjMFx4ZWFceGRlXHhjMFx4YWRceDBiXHg1MFx4MDBceDQ4XHhjN1x4YzBceGQ4XHgwMFx4 MDBceDAwXHgwZlx4MDBceGQ4XHg0OFx4YzdceGMwXHg2Ylx4MDBceDAwXHgwMFx4OGVceGQ4 XHg4ZVx4YzBceDhlXHhlMFx4OGVceGU4XHg0OFx4YzdceGM0XHg4MFx4MGZceDAwXHgwMFx4 NDhceGM3XHgwNFx4MjRceDFkXHhiYVx4MDBceDAwXHg0OFx4YzdceDQ0XHgyNFx4MDRceDYz XHgwMFx4MDBceDAwXHg0OFx4YzdceDQ0XHgyNFx4MDhceDgwXHgwZlx4MDBceDAwXHg0OFx4 YzdceDQ0XHgyNFx4MGNceDZiXHgwMFx4MDBceDAwXHhjYiI7CgojZGVmaW5lIEFERFJfVEVY VCAweDAwMDAKI2RlZmluZSBBRERSX0dEVCAweDEwMDAKI2RlZmluZSBBRERSX0xEVCAweDE4 MDAKI2RlZmluZSBBRERSX1BNTDQgMHgyMDAwCiNkZWZpbmUgQUREUl9QRFAgMHgzMDAwCiNk ZWZpbmUgQUREUl9QRCAweDQwMDAKI2RlZmluZSBBRERSX1NUQUNLMCAweDBmODAKI2RlZmlu ZSBBRERSX1ZBUl9ITFQgMHgyODAwCiNkZWZpbmUgQUREUl9WQVJfU1lTUkVUIDB4MjgwOAoj ZGVmaW5lIEFERFJfVkFSX1NZU0VYSVQgMHgyODEwCiNkZWZpbmUgQUREUl9WQVJfSURUIDB4 MzgwMAojZGVmaW5lIEFERFJfVkFSX1RTUzY0IDB4M2EwMAojZGVmaW5lIEFERFJfVkFSX1RT UzY0X0NQTDMgMHgzYzAwCiNkZWZpbmUgQUREUl9WQVJfVFNTMTYgMHgzZDAwCiNkZWZpbmUg QUREUl9WQVJfVFNTMTZfMiAweDNlMDAKI2RlZmluZSBBRERSX1ZBUl9UU1MxNl9DUEwzIDB4 M2YwMAojZGVmaW5lIEFERFJfVkFSX1RTUzMyIDB4NDgwMAojZGVmaW5lIEFERFJfVkFSX1RT UzMyXzIgMHg0YTAwCiNkZWZpbmUgQUREUl9WQVJfVFNTMzJfQ1BMMyAweDRjMDAKI2RlZmlu ZSBBRERSX1ZBUl9UU1MzMl9WTTg2IDB4NGUwMAojZGVmaW5lIEFERFJfVkFSX1ZNWE9OX1BU UiAweDVmMDAKI2RlZmluZSBBRERSX1ZBUl9WTUNTX1BUUiAweDVmMDgKI2RlZmluZSBBRERS X1ZBUl9WTUVYSVRfUFRSIDB4NWYxMAojZGVmaW5lIEFERFJfVkFSX1ZNV1JJVEVfRkxEIDB4 NWYxOAojZGVmaW5lIEFERFJfVkFSX1ZNV1JJVEVfVkFMIDB4NWYyMAojZGVmaW5lIEFERFJf VkFSX1ZNWE9OIDB4NjAwMAojZGVmaW5lIEFERFJfVkFSX1ZNQ1MgMHg3MDAwCiNkZWZpbmUg QUREUl9WQVJfVk1FWElUX0NPREUgMHg5MDAwCiNkZWZpbmUgQUREUl9WQVJfVVNFUl9DT0RF IDB4OTEwMAojZGVmaW5lIEFERFJfVkFSX1VTRVJfQ09ERTIgMHg5MTIwCgojZGVmaW5lIFNF TF9MRFQgKDEgPDwgMykKI2RlZmluZSBTRUxfQ1MxNiAoMiA8PCAzKQojZGVmaW5lIFNFTF9E UzE2ICgzIDw8IDMpCiNkZWZpbmUgU0VMX0NTMTZfQ1BMMyAoKDQgPDwgMykgKyAzKQojZGVm aW5lIFNFTF9EUzE2X0NQTDMgKCg1IDw8IDMpICsgMykKI2RlZmluZSBTRUxfQ1MzMiAoNiA8 PCAzKQojZGVmaW5lIFNFTF9EUzMyICg3IDw8IDMpCiNkZWZpbmUgU0VMX0NTMzJfQ1BMMyAo KDggPDwgMykgKyAzKQojZGVmaW5lIFNFTF9EUzMyX0NQTDMgKCg5IDw8IDMpICsgMykKI2Rl ZmluZSBTRUxfQ1M2NCAoMTAgPDwgMykKI2RlZmluZSBTRUxfRFM2NCAoMTEgPDwgMykKI2Rl ZmluZSBTRUxfQ1M2NF9DUEwzICgoMTIgPDwgMykgKyAzKQojZGVmaW5lIFNFTF9EUzY0X0NQ TDMgKCgxMyA8PCAzKSArIDMpCiNkZWZpbmUgU0VMX0NHQVRFMTYgKDE0IDw8IDMpCiNkZWZp bmUgU0VMX1RHQVRFMTYgKDE1IDw8IDMpCiNkZWZpbmUgU0VMX0NHQVRFMzIgKDE2IDw8IDMp CiNkZWZpbmUgU0VMX1RHQVRFMzIgKDE3IDw8IDMpCiNkZWZpbmUgU0VMX0NHQVRFNjQgKDE4 IDw8IDMpCiNkZWZpbmUgU0VMX0NHQVRFNjRfSEkgKDE5IDw8IDMpCiNkZWZpbmUgU0VMX1RT UzE2ICgyMCA8PCAzKQojZGVmaW5lIFNFTF9UU1MxNl8yICgyMSA8PCAzKQojZGVmaW5lIFNF TF9UU1MxNl9DUEwzICgoMjIgPDwgMykgKyAzKQojZGVmaW5lIFNFTF9UU1MzMiAoMjMgPDwg MykKI2RlZmluZSBTRUxfVFNTMzJfMiAoMjQgPDwgMykKI2RlZmluZSBTRUxfVFNTMzJfQ1BM MyAoKDI1IDw8IDMpICsgMykKI2RlZmluZSBTRUxfVFNTMzJfVk04NiAoMjYgPDwgMykKI2Rl ZmluZSBTRUxfVFNTNjQgKDI3IDw8IDMpCiNkZWZpbmUgU0VMX1RTUzY0X0hJICgyOCA8PCAz KQojZGVmaW5lIFNFTF9UU1M2NF9DUEwzICgoMjkgPDwgMykgKyAzKQojZGVmaW5lIFNFTF9U U1M2NF9DUEwzX0hJICgzMCA8PCAzKQoKI2RlZmluZSBNU1JfSUEzMl9GRUFUVVJFX0NPTlRS T0wgMHgzYQojZGVmaW5lIE1TUl9JQTMyX1ZNWF9CQVNJQyAweDQ4MAojZGVmaW5lIE1TUl9J QTMyX1NNQkFTRSAweDllCiNkZWZpbmUgTVNSX0lBMzJfU1lTRU5URVJfQ1MgMHgxNzQKI2Rl ZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9FU1AgMHgxNzUKI2RlZmluZSBNU1JfSUEzMl9TWVNF TlRFUl9FSVAgMHgxNzYKI2RlZmluZSBNU1JfSUEzMl9TVEFSIDB4QzAwMDAwODEKI2RlZmlu ZSBNU1JfSUEzMl9MU1RBUiAweEMwMDAwMDgyCiNkZWZpbmUgTVNSX0lBMzJfVk1YX1BST0NC QVNFRF9DVExTMiAweDQ4QgoKI2RlZmluZSBORVhUX0lOU04gJDB4YmFkYzBkZQojZGVmaW5l IFBSRUZJWF9TSVpFIDB4YmExZAoKI2RlZmluZSBLVk1fU01JIF9JTyhLVk1JTywgMHhiNykK CiNkZWZpbmUgQ1IwX1BFIDEKI2RlZmluZSBDUjBfTVAgKDEgPDwgMSkKI2RlZmluZSBDUjBf RU0gKDEgPDwgMikKI2RlZmluZSBDUjBfVFMgKDEgPDwgMykKI2RlZmluZSBDUjBfRVQgKDEg PDwgNCkKI2RlZmluZSBDUjBfTkUgKDEgPDwgNSkKI2RlZmluZSBDUjBfV1AgKDEgPDwgMTYp CiNkZWZpbmUgQ1IwX0FNICgxIDw8IDE4KQojZGVmaW5lIENSMF9OVyAoMSA8PCAyOSkKI2Rl ZmluZSBDUjBfQ0QgKDEgPDwgMzApCiNkZWZpbmUgQ1IwX1BHICgxIDw8IDMxKQoKI2RlZmlu ZSBDUjRfVk1FIDEKI2RlZmluZSBDUjRfUFZJICgxIDw8IDEpCiNkZWZpbmUgQ1I0X1RTRCAo MSA8PCAyKQojZGVmaW5lIENSNF9ERSAoMSA8PCAzKQojZGVmaW5lIENSNF9QU0UgKDEgPDwg NCkKI2RlZmluZSBDUjRfUEFFICgxIDw8IDUpCiNkZWZpbmUgQ1I0X01DRSAoMSA8PCA2KQoj ZGVmaW5lIENSNF9QR0UgKDEgPDwgNykKI2RlZmluZSBDUjRfUENFICgxIDw8IDgpCiNkZWZp bmUgQ1I0X09TRlhTUiAoMSA8PCA4KQojZGVmaW5lIENSNF9PU1hNTUVYQ1BUICgxIDw8IDEw KQojZGVmaW5lIENSNF9VTUlQICgxIDw8IDExKQojZGVmaW5lIENSNF9WTVhFICgxIDw8IDEz KQojZGVmaW5lIENSNF9TTVhFICgxIDw8IDE0KQojZGVmaW5lIENSNF9GU0dTQkFTRSAoMSA8 PCAxNikKI2RlZmluZSBDUjRfUENJREUgKDEgPDwgMTcpCiNkZWZpbmUgQ1I0X09TWFNBVkUg KDEgPDwgMTgpCiNkZWZpbmUgQ1I0X1NNRVAgKDEgPDwgMjApCiNkZWZpbmUgQ1I0X1NNQVAg KDEgPDwgMjEpCiNkZWZpbmUgQ1I0X1BLRSAoMSA8PCAyMikKCiNkZWZpbmUgRUZFUl9TQ0Ug MQojZGVmaW5lIEVGRVJfTE1FICgxIDw8IDgpCiNkZWZpbmUgRUZFUl9MTUEgKDEgPDwgMTAp CiNkZWZpbmUgRUZFUl9OWEUgKDEgPDwgMTEpCiNkZWZpbmUgRUZFUl9TVk1FICgxIDw8IDEy KQojZGVmaW5lIEVGRVJfTE1TTEUgKDEgPDwgMTMpCiNkZWZpbmUgRUZFUl9GRlhTUiAoMSA8 PCAxNCkKI2RlZmluZSBFRkVSX1RDRSAoMSA8PCAxNSkKI2RlZmluZSBQREUzMl9QUkVTRU5U IDEKI2RlZmluZSBQREUzMl9SVyAoMSA8PCAxKQojZGVmaW5lIFBERTMyX1VTRVIgKDEgPDwg MikKI2RlZmluZSBQREUzMl9QUyAoMSA8PCA3KQojZGVmaW5lIFBERTY0X1BSRVNFTlQgMQoj ZGVmaW5lIFBERTY0X1JXICgxIDw8IDEpCiNkZWZpbmUgUERFNjRfVVNFUiAoMSA8PCAyKQoj ZGVmaW5lIFBERTY0X0FDQ0VTU0VEICgxIDw8IDUpCiNkZWZpbmUgUERFNjRfRElSVFkgKDEg PDwgNikKI2RlZmluZSBQREU2NF9QUyAoMSA8PCA3KQojZGVmaW5lIFBERTY0X0cgKDEgPDwg OCkKCnN0cnVjdCB0c3MxNiB7Cgl1aW50MTZfdCBwcmV2OwoJdWludDE2X3Qgc3AwOwoJdWlu dDE2X3Qgc3MwOwoJdWludDE2X3Qgc3AxOwoJdWludDE2X3Qgc3MxOwoJdWludDE2X3Qgc3Ay OwoJdWludDE2X3Qgc3MyOwoJdWludDE2X3QgaXA7Cgl1aW50MTZfdCBmbGFnczsKCXVpbnQx Nl90IGF4OwoJdWludDE2X3QgY3g7Cgl1aW50MTZfdCBkeDsKCXVpbnQxNl90IGJ4OwoJdWlu dDE2X3Qgc3A7Cgl1aW50MTZfdCBicDsKCXVpbnQxNl90IHNpOwoJdWludDE2X3QgZGk7Cgl1 aW50MTZfdCBlczsKCXVpbnQxNl90IGNzOwoJdWludDE2X3Qgc3M7Cgl1aW50MTZfdCBkczsK CXVpbnQxNl90IGxkdDsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCnN0cnVjdCB0c3Mz MiB7Cgl1aW50MTZfdCBwcmV2LCBwcmV2aDsKCXVpbnQzMl90IHNwMDsKCXVpbnQxNl90IHNz MCwgc3MwaDsKCXVpbnQzMl90IHNwMTsKCXVpbnQxNl90IHNzMSwgc3MxaDsKCXVpbnQzMl90 IHNwMjsKCXVpbnQxNl90IHNzMiwgc3MyaDsKCXVpbnQzMl90IGNyMzsKCXVpbnQzMl90IGlw OwoJdWludDMyX3QgZmxhZ3M7Cgl1aW50MzJfdCBheDsKCXVpbnQzMl90IGN4OwoJdWludDMy X3QgZHg7Cgl1aW50MzJfdCBieDsKCXVpbnQzMl90IHNwOwoJdWludDMyX3QgYnA7Cgl1aW50 MzJfdCBzaTsKCXVpbnQzMl90IGRpOwoJdWludDE2X3QgZXMsIGVzaDsKCXVpbnQxNl90IGNz LCBjc2g7Cgl1aW50MTZfdCBzcywgc3NoOwoJdWludDE2X3QgZHMsIGRzaDsKCXVpbnQxNl90 IGZzLCBmc2g7Cgl1aW50MTZfdCBncywgZ3NoOwoJdWludDE2X3QgbGR0LCBsZHRoOwoJdWlu dDE2X3QgdHJhY2U7Cgl1aW50MTZfdCBpb19iaXRtYXA7Cn0gX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CgpzdHJ1Y3QgdHNzNjQgewoJdWludDMyX3QgcmVzZXJ2ZWQwOwoJdWludDY0X3Qg cnNwWzNdOwoJdWludDY0X3QgcmVzZXJ2ZWQxOwoJdWludDY0X3QgaXN0WzddOwoJdWludDY0 X3QgcmVzZXJ2ZWQyOwoJdWludDMyX3QgcmVzZXJ2ZWQzOwoJdWludDMyX3QgaW9fYml0bWFw Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKc3RhdGljIHZvaWQgZmlsbF9zZWdtZW50 X2Rlc2NyaXB0b3IodWludDY0X3QqIGR0LCB1aW50NjRfdCogbHQsIHN0cnVjdCBrdm1fc2Vn bWVudCogc2VnKQp7Cgl1aW50MTZfdCBpbmRleCA9IHNlZy0+c2VsZWN0b3IgPj4gMzsKCXVp bnQ2NF90IGxpbWl0ID0gc2VnLT5nID8gc2VnLT5saW1pdCA+PiAxMiA6IHNlZy0+bGltaXQ7 Cgl1aW50NjRfdCBzZCA9IChsaW1pdCAmIDB4ZmZmZikgfCAoc2VnLT5iYXNlICYgMHhmZmZm ZmYpIDw8IDE2IHwgKHVpbnQ2NF90KXNlZy0+dHlwZSA8PCA0MCB8ICh1aW50NjRfdClzZWct PnMgPDwgNDQgfCAodWludDY0X3Qpc2VnLT5kcGwgPDwgNDUgfCAodWludDY0X3Qpc2VnLT5w cmVzZW50IDw8IDQ3IHwgKGxpbWl0ICYgMHhmMDAwMFVMTCkgPDwgNDggfCAodWludDY0X3Qp c2VnLT5hdmwgPDwgNTIgfCAodWludDY0X3Qpc2VnLT5sIDw8IDUzIHwgKHVpbnQ2NF90KXNl Zy0+ZGIgPDwgNTQgfCAodWludDY0X3Qpc2VnLT5nIDw8IDU1IHwgKHNlZy0+YmFzZSAmIDB4 ZmYwMDAwMDBVTEwpIDw8IDU2OwoJTk9ORkFJTElORyhkdFtpbmRleF0gPSBzZCk7CglOT05G QUlMSU5HKGx0W2luZGV4XSA9IHNkKTsKfQoKc3RhdGljIHZvaWQgZmlsbF9zZWdtZW50X2Rl c2NyaXB0b3JfZHdvcmQodWludDY0X3QqIGR0LCB1aW50NjRfdCogbHQsIHN0cnVjdCBrdm1f c2VnbWVudCogc2VnKQp7CglmaWxsX3NlZ21lbnRfZGVzY3JpcHRvcihkdCwgbHQsIHNlZyk7 Cgl1aW50MTZfdCBpbmRleCA9IHNlZy0+c2VsZWN0b3IgPj4gMzsKCU5PTkZBSUxJTkcoZHRb aW5kZXggKyAxXSA9IDApOwoJTk9ORkFJTElORyhsdFtpbmRleCArIDFdID0gMCk7Cn0KCnN0 YXRpYyB2b2lkIHNldHVwX3N5c2NhbGxfbXNycyhpbnQgY3B1ZmQsIHVpbnQxNl90IHNlbF9j cywgdWludDE2X3Qgc2VsX2NzX2NwbDMpCnsKCWNoYXIgYnVmW3NpemVvZihzdHJ1Y3Qga3Zt X21zcnMpICsgNSAqIHNpemVvZihzdHJ1Y3Qga3ZtX21zcl9lbnRyeSldOwoJbWVtc2V0KGJ1 ZiwgMCwgc2l6ZW9mKGJ1ZikpOwoJc3RydWN0IGt2bV9tc3JzKiBtc3JzID0gKHN0cnVjdCBr dm1fbXNycyopYnVmOwoJc3RydWN0IGt2bV9tc3JfZW50cnkqIGVudHJpZXMgPSBtc3JzLT5l bnRyaWVzOwoJbXNycy0+bm1zcnMgPSA1OwoJZW50cmllc1swXS5pbmRleCA9IE1TUl9JQTMy X1NZU0VOVEVSX0NTOwoJZW50cmllc1swXS5kYXRhID0gc2VsX2NzOwoJZW50cmllc1sxXS5p bmRleCA9IE1TUl9JQTMyX1NZU0VOVEVSX0VTUDsKCWVudHJpZXNbMV0uZGF0YSA9IEFERFJf U1RBQ0swOwoJZW50cmllc1syXS5pbmRleCA9IE1TUl9JQTMyX1NZU0VOVEVSX0VJUDsKCWVu dHJpZXNbMl0uZGF0YSA9IEFERFJfVkFSX1NZU0VYSVQ7CgllbnRyaWVzWzNdLmluZGV4ID0g TVNSX0lBMzJfU1RBUjsKCWVudHJpZXNbM10uZGF0YSA9ICgodWludDY0X3Qpc2VsX2NzIDw8 IDMyKSB8ICgodWludDY0X3Qpc2VsX2NzX2NwbDMgPDwgNDgpOwoJZW50cmllc1s0XS5pbmRl eCA9IE1TUl9JQTMyX0xTVEFSOwoJZW50cmllc1s0XS5kYXRhID0gQUREUl9WQVJfU1lTUkVU OwoJaW9jdGwoY3B1ZmQsIEtWTV9TRVRfTVNSUywgbXNycyk7Cn0KCnN0YXRpYyB2b2lkIHNl dHVwXzMyYml0X2lkdChzdHJ1Y3Qga3ZtX3NyZWdzKiBzcmVncywgY2hhciogaG9zdF9tZW0s IHVpbnRwdHJfdCBndWVzdF9tZW0pCnsKCXNyZWdzLT5pZHQuYmFzZSA9IGd1ZXN0X21lbSAr IEFERFJfVkFSX0lEVDsKCXNyZWdzLT5pZHQubGltaXQgPSAweDFmZjsKCXVpbnQ2NF90KiBp ZHQgPSAodWludDY0X3QqKShob3N0X21lbSArIHNyZWdzLT5pZHQuYmFzZSk7CglpbnQgaTsK CWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CgkJc3RydWN0IGt2bV9zZWdtZW50IGdhdGU7 CgkJZ2F0ZS5zZWxlY3RvciA9IGkgPDwgMzsKCQlzd2l0Y2ggKGkgJSA2KSB7CgkJY2FzZSAw OgoJCQlnYXRlLnR5cGUgPSA2OwoJCQlnYXRlLmJhc2UgPSBTRUxfQ1MxNjsKCQkJYnJlYWs7 CgkJY2FzZSAxOgoJCQlnYXRlLnR5cGUgPSA3OwoJCQlnYXRlLmJhc2UgPSBTRUxfQ1MxNjsK CQkJYnJlYWs7CgkJY2FzZSAyOgoJCQlnYXRlLnR5cGUgPSAzOwoJCQlnYXRlLmJhc2UgPSBT RUxfVEdBVEUxNjsKCQkJYnJlYWs7CgkJY2FzZSAzOgoJCQlnYXRlLnR5cGUgPSAxNDsKCQkJ Z2F0ZS5iYXNlID0gU0VMX0NTMzI7CgkJCWJyZWFrOwoJCWNhc2UgNDoKCQkJZ2F0ZS50eXBl ID0gMTU7CgkJCWdhdGUuYmFzZSA9IFNFTF9DUzMyOwoJCQlicmVhazsKCQljYXNlIDY6CgkJ CWdhdGUudHlwZSA9IDExOwoJCQlnYXRlLmJhc2UgPSBTRUxfVEdBVEUzMjsKCQkJYnJlYWs7 CgkJfQoJCWdhdGUubGltaXQgPSBndWVzdF9tZW0gKyBBRERSX1ZBUl9VU0VSX0NPREUyOwoJ CWdhdGUucHJlc2VudCA9IDE7CgkJZ2F0ZS5kcGwgPSAwOwoJCWdhdGUucyA9IDA7CgkJZ2F0 ZS5nID0gMDsKCQlnYXRlLmRiID0gMDsKCQlnYXRlLmwgPSAwOwoJCWdhdGUuYXZsID0gMDsK CQlmaWxsX3NlZ21lbnRfZGVzY3JpcHRvcihpZHQsIGlkdCwgJmdhdGUpOwoJfQp9CgpzdGF0 aWMgdm9pZCBzZXR1cF82NGJpdF9pZHQoc3RydWN0IGt2bV9zcmVncyogc3JlZ3MsIGNoYXIq IGhvc3RfbWVtLCB1aW50cHRyX3QgZ3Vlc3RfbWVtKQp7CglzcmVncy0+aWR0LmJhc2UgPSBn dWVzdF9tZW0gKyBBRERSX1ZBUl9JRFQ7CglzcmVncy0+aWR0LmxpbWl0ID0gMHgxZmY7Cgl1 aW50NjRfdCogaWR0ID0gKHVpbnQ2NF90KikoaG9zdF9tZW0gKyBzcmVncy0+aWR0LmJhc2Up OwoJaW50IGk7Cglmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewoJCXN0cnVjdCBrdm1fc2Vn bWVudCBnYXRlOwoJCWdhdGUuc2VsZWN0b3IgPSAoaSAqIDIpIDw8IDM7CgkJZ2F0ZS50eXBl ID0gKGkgJiAxKSA/IDE0IDogMTU7CgkJZ2F0ZS5iYXNlID0gU0VMX0NTNjQ7CgkJZ2F0ZS5s aW1pdCA9IGd1ZXN0X21lbSArIEFERFJfVkFSX1VTRVJfQ09ERTI7CgkJZ2F0ZS5wcmVzZW50 ID0gMTsKCQlnYXRlLmRwbCA9IDA7CgkJZ2F0ZS5zID0gMDsKCQlnYXRlLmcgPSAwOwoJCWdh dGUuZGIgPSAwOwoJCWdhdGUubCA9IDA7CgkJZ2F0ZS5hdmwgPSAwOwoJCWZpbGxfc2VnbWVu dF9kZXNjcmlwdG9yX2R3b3JkKGlkdCwgaWR0LCAmZ2F0ZSk7Cgl9Cn0KCnN0cnVjdCBrdm1f dGV4dCB7Cgl1aW50cHRyX3QgdHlwOwoJY29uc3Qgdm9pZCogdGV4dDsKCXVpbnRwdHJfdCBz aXplOwp9OwoKc3RydWN0IGt2bV9vcHQgewoJdWludDY0X3QgdHlwOwoJdWludDY0X3QgdmFs Owp9OwoKI2RlZmluZSBLVk1fU0VUVVBfUEFHSU5HICgxIDw8IDApCiNkZWZpbmUgS1ZNX1NF VFVQX1BBRSAoMSA8PCAxKQojZGVmaW5lIEtWTV9TRVRVUF9QUk9URUNURUQgKDEgPDwgMikK I2RlZmluZSBLVk1fU0VUVVBfQ1BMMyAoMSA8PCAzKQojZGVmaW5lIEtWTV9TRVRVUF9WSVJU ODYgKDEgPDwgNCkKI2RlZmluZSBLVk1fU0VUVVBfU01NICgxIDw8IDUpCiNkZWZpbmUgS1ZN X1NFVFVQX1ZNICgxIDw8IDYpCnN0YXRpYyBsb25nIHN5el9rdm1fc2V0dXBfY3B1KHZvbGF0 aWxlIGxvbmcgYTAsIHZvbGF0aWxlIGxvbmcgYTEsIHZvbGF0aWxlIGxvbmcgYTIsIHZvbGF0 aWxlIGxvbmcgYTMsIHZvbGF0aWxlIGxvbmcgYTQsIHZvbGF0aWxlIGxvbmcgYTUsIHZvbGF0 aWxlIGxvbmcgYTYsIHZvbGF0aWxlIGxvbmcgYTcpCnsKCWNvbnN0IGludCB2bWZkID0gYTA7 Cgljb25zdCBpbnQgY3B1ZmQgPSBhMTsKCWNoYXIqIGNvbnN0IGhvc3RfbWVtID0gKGNoYXIq KWEyOwoJY29uc3Qgc3RydWN0IGt2bV90ZXh0KiBjb25zdCB0ZXh0X2FycmF5X3B0ciA9IChz dHJ1Y3Qga3ZtX3RleHQqKWEzOwoJY29uc3QgdWludHB0cl90IHRleHRfY291bnQgPSBhNDsK CWNvbnN0IHVpbnRwdHJfdCBmbGFncyA9IGE1OwoJY29uc3Qgc3RydWN0IGt2bV9vcHQqIGNv bnN0IG9wdF9hcnJheV9wdHIgPSAoc3RydWN0IGt2bV9vcHQqKWE2OwoJdWludHB0cl90IG9w dF9jb3VudCA9IGE3OwoJY29uc3QgdWludHB0cl90IHBhZ2Vfc2l6ZSA9IDQgPDwgMTA7Cglj b25zdCB1aW50cHRyX3QgaW9hcGljX3BhZ2UgPSAxMDsKCWNvbnN0IHVpbnRwdHJfdCBndWVz dF9tZW1fc2l6ZSA9IDI0ICogcGFnZV9zaXplOwoJY29uc3QgdWludHB0cl90IGd1ZXN0X21l bSA9IDA7Cgkodm9pZCl0ZXh0X2NvdW50OwoJaW50IHRleHRfdHlwZSA9IDA7Cgljb25zdCB2 b2lkKiB0ZXh0ID0gMDsKCXVpbnRwdHJfdCB0ZXh0X3NpemUgPSAwOwoJTk9ORkFJTElORyh0 ZXh0X3R5cGUgPSB0ZXh0X2FycmF5X3B0clswXS50eXApOwoJTk9ORkFJTElORyh0ZXh0ID0g dGV4dF9hcnJheV9wdHJbMF0udGV4dCk7CglOT05GQUlMSU5HKHRleHRfc2l6ZSA9IHRleHRf YXJyYXlfcHRyWzBdLnNpemUpOwoJdWludHB0cl90IGk7Cglmb3IgKGkgPSAwOyBpIDwgZ3Vl c3RfbWVtX3NpemUgLyBwYWdlX3NpemU7IGkrKykgewoJCXN0cnVjdCBrdm1fdXNlcnNwYWNl X21lbW9yeV9yZWdpb24gbWVtcmVnOwoJCW1lbXJlZy5zbG90ID0gaTsKCQltZW1yZWcuZmxh Z3MgPSAwOwoJCW1lbXJlZy5ndWVzdF9waHlzX2FkZHIgPSBndWVzdF9tZW0gKyBpICogcGFn ZV9zaXplOwoJCWlmIChpID09IGlvYXBpY19wYWdlKQoJCQltZW1yZWcuZ3Vlc3RfcGh5c19h ZGRyID0gMHhmZWMwMDAwMDsKCQltZW1yZWcubWVtb3J5X3NpemUgPSBwYWdlX3NpemU7CgkJ bWVtcmVnLnVzZXJzcGFjZV9hZGRyID0gKHVpbnRwdHJfdClob3N0X21lbSArIGkgKiBwYWdl X3NpemU7CgkJaW9jdGwodm1mZCwgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04sICZtZW1y ZWcpOwoJfQoJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiBtZW1yZWc7Cglt ZW1yZWcuc2xvdCA9IDEgKyAoMSA8PCAxNik7CgltZW1yZWcuZmxhZ3MgPSAwOwoJbWVtcmVn Lmd1ZXN0X3BoeXNfYWRkciA9IDB4MzAwMDA7CgltZW1yZWcubWVtb3J5X3NpemUgPSA2NCA8 PCAxMDsKCW1lbXJlZy51c2Vyc3BhY2VfYWRkciA9ICh1aW50cHRyX3QpaG9zdF9tZW07Cglp b2N0bCh2bWZkLCBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiwgJm1lbXJlZyk7CglzdHJ1 Y3Qga3ZtX3NyZWdzIHNyZWdzOwoJaWYgKGlvY3RsKGNwdWZkLCBLVk1fR0VUX1NSRUdTLCAm c3JlZ3MpKQoJCXJldHVybiAtMTsKCXN0cnVjdCBrdm1fcmVncyByZWdzOwoJbWVtc2V0KCZy ZWdzLCAwLCBzaXplb2YocmVncykpOwoJcmVncy5yaXAgPSBndWVzdF9tZW0gKyBBRERSX1RF WFQ7CglyZWdzLnJzcCA9IEFERFJfU1RBQ0swOwoJc3JlZ3MuZ2R0LmJhc2UgPSBndWVzdF9t ZW0gKyBBRERSX0dEVDsKCXNyZWdzLmdkdC5saW1pdCA9IDI1NiAqIHNpemVvZih1aW50NjRf dCkgLSAxOwoJdWludDY0X3QqIGdkdCA9ICh1aW50NjRfdCopKGhvc3RfbWVtICsgc3JlZ3Mu Z2R0LmJhc2UpOwoJc3RydWN0IGt2bV9zZWdtZW50IHNlZ19sZHQ7CglzZWdfbGR0LnNlbGVj dG9yID0gU0VMX0xEVDsKCXNlZ19sZHQudHlwZSA9IDI7CglzZWdfbGR0LmJhc2UgPSBndWVz dF9tZW0gKyBBRERSX0xEVDsKCXNlZ19sZHQubGltaXQgPSAyNTYgKiBzaXplb2YodWludDY0 X3QpIC0gMTsKCXNlZ19sZHQucHJlc2VudCA9IDE7CglzZWdfbGR0LmRwbCA9IDA7CglzZWdf bGR0LnMgPSAwOwoJc2VnX2xkdC5nID0gMDsKCXNlZ19sZHQuZGIgPSAxOwoJc2VnX2xkdC5s ID0gMDsKCXNyZWdzLmxkdCA9IHNlZ19sZHQ7Cgl1aW50NjRfdCogbGR0ID0gKHVpbnQ2NF90 KikoaG9zdF9tZW0gKyBzcmVncy5sZHQuYmFzZSk7CglzdHJ1Y3Qga3ZtX3NlZ21lbnQgc2Vn X2NzMTY7CglzZWdfY3MxNi5zZWxlY3RvciA9IFNFTF9DUzE2OwoJc2VnX2NzMTYudHlwZSA9 IDExOwoJc2VnX2NzMTYuYmFzZSA9IDA7CglzZWdfY3MxNi5saW1pdCA9IDB4ZmZmZmY7Cglz ZWdfY3MxNi5wcmVzZW50ID0gMTsKCXNlZ19jczE2LmRwbCA9IDA7CglzZWdfY3MxNi5zID0g MTsKCXNlZ19jczE2LmcgPSAwOwoJc2VnX2NzMTYuZGIgPSAwOwoJc2VnX2NzMTYubCA9IDA7 CglzdHJ1Y3Qga3ZtX3NlZ21lbnQgc2VnX2RzMTYgPSBzZWdfY3MxNjsKCXNlZ19kczE2LnNl bGVjdG9yID0gU0VMX0RTMTY7CglzZWdfZHMxNi50eXBlID0gMzsKCXN0cnVjdCBrdm1fc2Vn bWVudCBzZWdfY3MxNl9jcGwzID0gc2VnX2NzMTY7CglzZWdfY3MxNl9jcGwzLnNlbGVjdG9y ID0gU0VMX0NTMTZfQ1BMMzsKCXNlZ19jczE2X2NwbDMuZHBsID0gMzsKCXN0cnVjdCBrdm1f c2VnbWVudCBzZWdfZHMxNl9jcGwzID0gc2VnX2RzMTY7CglzZWdfZHMxNl9jcGwzLnNlbGVj dG9yID0gU0VMX0RTMTZfQ1BMMzsKCXNlZ19kczE2X2NwbDMuZHBsID0gMzsKCXN0cnVjdCBr dm1fc2VnbWVudCBzZWdfY3MzMiA9IHNlZ19jczE2OwoJc2VnX2NzMzIuc2VsZWN0b3IgPSBT RUxfQ1MzMjsKCXNlZ19jczMyLmRiID0gMTsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfZHMz MiA9IHNlZ19kczE2OwoJc2VnX2RzMzIuc2VsZWN0b3IgPSBTRUxfRFMzMjsKCXNlZ19kczMy LmRiID0gMTsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfY3MzMl9jcGwzID0gc2VnX2NzMzI7 CglzZWdfY3MzMl9jcGwzLnNlbGVjdG9yID0gU0VMX0NTMzJfQ1BMMzsKCXNlZ19jczMyX2Nw bDMuZHBsID0gMzsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfZHMzMl9jcGwzID0gc2VnX2Rz MzI7CglzZWdfZHMzMl9jcGwzLnNlbGVjdG9yID0gU0VMX0RTMzJfQ1BMMzsKCXNlZ19kczMy X2NwbDMuZHBsID0gMzsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfY3M2NCA9IHNlZ19jczE2 OwoJc2VnX2NzNjQuc2VsZWN0b3IgPSBTRUxfQ1M2NDsKCXNlZ19jczY0LmwgPSAxOwoJc3Ry dWN0IGt2bV9zZWdtZW50IHNlZ19kczY0ID0gc2VnX2RzMzI7CglzZWdfZHM2NC5zZWxlY3Rv ciA9IFNFTF9EUzY0OwoJc3RydWN0IGt2bV9zZWdtZW50IHNlZ19jczY0X2NwbDMgPSBzZWdf Y3M2NDsKCXNlZ19jczY0X2NwbDMuc2VsZWN0b3IgPSBTRUxfQ1M2NF9DUEwzOwoJc2VnX2Nz NjRfY3BsMy5kcGwgPSAzOwoJc3RydWN0IGt2bV9zZWdtZW50IHNlZ19kczY0X2NwbDMgPSBz ZWdfZHM2NDsKCXNlZ19kczY0X2NwbDMuc2VsZWN0b3IgPSBTRUxfRFM2NF9DUEwzOwoJc2Vn X2RzNjRfY3BsMy5kcGwgPSAzOwoJc3RydWN0IGt2bV9zZWdtZW50IHNlZ190c3MzMjsKCXNl Z190c3MzMi5zZWxlY3RvciA9IFNFTF9UU1MzMjsKCXNlZ190c3MzMi50eXBlID0gOTsKCXNl Z190c3MzMi5iYXNlID0gQUREUl9WQVJfVFNTMzI7CglzZWdfdHNzMzIubGltaXQgPSAweDFm ZjsKCXNlZ190c3MzMi5wcmVzZW50ID0gMTsKCXNlZ190c3MzMi5kcGwgPSAwOwoJc2VnX3Rz czMyLnMgPSAwOwoJc2VnX3RzczMyLmcgPSAwOwoJc2VnX3RzczMyLmRiID0gMDsKCXNlZ190 c3MzMi5sID0gMDsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfdHNzMzJfMiA9IHNlZ190c3Mz MjsKCXNlZ190c3MzMl8yLnNlbGVjdG9yID0gU0VMX1RTUzMyXzI7CglzZWdfdHNzMzJfMi5i YXNlID0gQUREUl9WQVJfVFNTMzJfMjsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfdHNzMzJf Y3BsMyA9IHNlZ190c3MzMjsKCXNlZ190c3MzMl9jcGwzLnNlbGVjdG9yID0gU0VMX1RTUzMy X0NQTDM7CglzZWdfdHNzMzJfY3BsMy5iYXNlID0gQUREUl9WQVJfVFNTMzJfQ1BMMzsKCXN0 cnVjdCBrdm1fc2VnbWVudCBzZWdfdHNzMzJfdm04NiA9IHNlZ190c3MzMjsKCXNlZ190c3Mz Ml92bTg2LnNlbGVjdG9yID0gU0VMX1RTUzMyX1ZNODY7CglzZWdfdHNzMzJfdm04Ni5iYXNl ID0gQUREUl9WQVJfVFNTMzJfVk04NjsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfdHNzMTYg PSBzZWdfdHNzMzI7CglzZWdfdHNzMTYuc2VsZWN0b3IgPSBTRUxfVFNTMTY7CglzZWdfdHNz MTYuYmFzZSA9IEFERFJfVkFSX1RTUzE2OwoJc2VnX3RzczE2LmxpbWl0ID0gMHhmZjsKCXNl Z190c3MxNi50eXBlID0gMTsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfdHNzMTZfMiA9IHNl Z190c3MxNjsKCXNlZ190c3MxNl8yLnNlbGVjdG9yID0gU0VMX1RTUzE2XzI7CglzZWdfdHNz MTZfMi5iYXNlID0gQUREUl9WQVJfVFNTMTZfMjsKCXNlZ190c3MxNl8yLmRwbCA9IDA7Cglz dHJ1Y3Qga3ZtX3NlZ21lbnQgc2VnX3RzczE2X2NwbDMgPSBzZWdfdHNzMTY7CglzZWdfdHNz MTZfY3BsMy5zZWxlY3RvciA9IFNFTF9UU1MxNl9DUEwzOwoJc2VnX3RzczE2X2NwbDMuYmFz ZSA9IEFERFJfVkFSX1RTUzE2X0NQTDM7CglzZWdfdHNzMTZfY3BsMy5kcGwgPSAzOwoJc3Ry dWN0IGt2bV9zZWdtZW50IHNlZ190c3M2NCA9IHNlZ190c3MzMjsKCXNlZ190c3M2NC5zZWxl Y3RvciA9IFNFTF9UU1M2NDsKCXNlZ190c3M2NC5iYXNlID0gQUREUl9WQVJfVFNTNjQ7Cglz ZWdfdHNzNjQubGltaXQgPSAweDFmZjsKCXN0cnVjdCBrdm1fc2VnbWVudCBzZWdfdHNzNjRf Y3BsMyA9IHNlZ190c3M2NDsKCXNlZ190c3M2NF9jcGwzLnNlbGVjdG9yID0gU0VMX1RTUzY0 X0NQTDM7CglzZWdfdHNzNjRfY3BsMy5iYXNlID0gQUREUl9WQVJfVFNTNjRfQ1BMMzsKCXNl Z190c3M2NF9jcGwzLmRwbCA9IDM7CglzdHJ1Y3Qga3ZtX3NlZ21lbnQgc2VnX2NnYXRlMTY7 CglzZWdfY2dhdGUxNi5zZWxlY3RvciA9IFNFTF9DR0FURTE2OwoJc2VnX2NnYXRlMTYudHlw ZSA9IDQ7CglzZWdfY2dhdGUxNi5iYXNlID0gU0VMX0NTMTYgfCAoMiA8PCAxNik7CglzZWdf Y2dhdGUxNi5saW1pdCA9IEFERFJfVkFSX1VTRVJfQ09ERTI7CglzZWdfY2dhdGUxNi5wcmVz ZW50ID0gMTsKCXNlZ19jZ2F0ZTE2LmRwbCA9IDA7CglzZWdfY2dhdGUxNi5zID0gMDsKCXNl Z19jZ2F0ZTE2LmcgPSAwOwoJc2VnX2NnYXRlMTYuZGIgPSAwOwoJc2VnX2NnYXRlMTYubCA9 IDA7CglzZWdfY2dhdGUxNi5hdmwgPSAwOwoJc3RydWN0IGt2bV9zZWdtZW50IHNlZ190Z2F0 ZTE2ID0gc2VnX2NnYXRlMTY7CglzZWdfdGdhdGUxNi5zZWxlY3RvciA9IFNFTF9UR0FURTE2 OwoJc2VnX3RnYXRlMTYudHlwZSA9IDM7CglzZWdfY2dhdGUxNi5iYXNlID0gU0VMX1RTUzE2 XzI7CglzZWdfdGdhdGUxNi5saW1pdCA9IDA7CglzdHJ1Y3Qga3ZtX3NlZ21lbnQgc2VnX2Nn YXRlMzIgPSBzZWdfY2dhdGUxNjsKCXNlZ19jZ2F0ZTMyLnNlbGVjdG9yID0gU0VMX0NHQVRF MzI7CglzZWdfY2dhdGUzMi50eXBlID0gMTI7CglzZWdfY2dhdGUzMi5iYXNlID0gU0VMX0NT MzIgfCAoMiA8PCAxNik7CglzdHJ1Y3Qga3ZtX3NlZ21lbnQgc2VnX3RnYXRlMzIgPSBzZWdf Y2dhdGUzMjsKCXNlZ190Z2F0ZTMyLnNlbGVjdG9yID0gU0VMX1RHQVRFMzI7CglzZWdfdGdh dGUzMi50eXBlID0gMTE7CglzZWdfdGdhdGUzMi5iYXNlID0gU0VMX1RTUzMyXzI7CglzZWdf dGdhdGUzMi5saW1pdCA9IDA7CglzdHJ1Y3Qga3ZtX3NlZ21lbnQgc2VnX2NnYXRlNjQgPSBz ZWdfY2dhdGUxNjsKCXNlZ19jZ2F0ZTY0LnNlbGVjdG9yID0gU0VMX0NHQVRFNjQ7CglzZWdf Y2dhdGU2NC50eXBlID0gMTI7CglzZWdfY2dhdGU2NC5iYXNlID0gU0VMX0NTNjQ7CglpbnQg a3ZtZmQgPSBvcGVuKCIvZGV2L2t2bSIsIE9fUkRXUik7CgljaGFyIGJ1ZltzaXplb2Yoc3Ry dWN0IGt2bV9jcHVpZDIpICsgMTI4ICogc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnky KV07CgltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CglzdHJ1Y3Qga3ZtX2NwdWlkMiog Y3B1aWQgPSAoc3RydWN0IGt2bV9jcHVpZDIqKWJ1ZjsKCWNwdWlkLT5uZW50ID0gMTI4OwoJ aW9jdGwoa3ZtZmQsIEtWTV9HRVRfU1VQUE9SVEVEX0NQVUlELCBjcHVpZCk7Cglpb2N0bChj cHVmZCwgS1ZNX1NFVF9DUFVJRDIsIGNwdWlkKTsKCWNsb3NlKGt2bWZkKTsKCWNvbnN0IGNo YXIqIHRleHRfcHJlZml4ID0gMDsKCWludCB0ZXh0X3ByZWZpeF9zaXplID0gMDsKCWNoYXIq IGhvc3RfdGV4dCA9IGhvc3RfbWVtICsgQUREUl9URVhUOwoJaWYgKHRleHRfdHlwZSA9PSA4 KSB7CgkJaWYgKGZsYWdzICYgS1ZNX1NFVFVQX1NNTSkgewoJCQlpZiAoZmxhZ3MgJiBLVk1f U0VUVVBfUFJPVEVDVEVEKSB7CgkJCQlzcmVncy5jcyA9IHNlZ19jczE2OwoJCQkJc3JlZ3Mu ZHMgPSBzcmVncy5lcyA9IHNyZWdzLmZzID0gc3JlZ3MuZ3MgPSBzcmVncy5zcyA9IHNlZ19k czE2OwoJCQkJc3JlZ3MuY3IwIHw9IENSMF9QRTsKCQkJfSBlbHNlIHsKCQkJCXNyZWdzLmNz LnNlbGVjdG9yID0gMDsKCQkJCXNyZWdzLmNzLmJhc2UgPSAwOwoJCQl9CgkJCU5PTkZBSUxJ TkcoKihob3N0X21lbSArIEFERFJfVEVYVCkgPSAweGY0KTsKCQkJaG9zdF90ZXh0ID0gaG9z dF9tZW0gKyAweDgwMDA7CgkJCWlvY3RsKGNwdWZkLCBLVk1fU01JLCAwKTsKCQl9IGVsc2Ug aWYgKGZsYWdzICYgS1ZNX1NFVFVQX1ZJUlQ4NikgewoJCQlzcmVncy5jcyA9IHNlZ19jczMy OwoJCQlzcmVncy5kcyA9IHNyZWdzLmVzID0gc3JlZ3MuZnMgPSBzcmVncy5ncyA9IHNyZWdz LnNzID0gc2VnX2RzMzI7CgkJCXNyZWdzLmNyMCB8PSBDUjBfUEU7CgkJCXNyZWdzLmVmZXIg fD0gRUZFUl9TQ0U7CgkJCXNldHVwX3N5c2NhbGxfbXNycyhjcHVmZCwgU0VMX0NTMzIsIFNF TF9DUzMyX0NQTDMpOwoJCQlzZXR1cF8zMmJpdF9pZHQoJnNyZWdzLCBob3N0X21lbSwgZ3Vl c3RfbWVtKTsKCQkJaWYgKGZsYWdzICYgS1ZNX1NFVFVQX1BBR0lORykgewoJCQkJdWludDY0 X3QgcGRfYWRkciA9IGd1ZXN0X21lbSArIEFERFJfUEQ7CgkJCQl1aW50NjRfdCogcGQgPSAo dWludDY0X3QqKShob3N0X21lbSArIEFERFJfUEQpOwoJCQkJTk9ORkFJTElORyhwZFswXSA9 IFBERTMyX1BSRVNFTlQgfCBQREUzMl9SVyB8IFBERTMyX1VTRVIgfCBQREUzMl9QUyk7CgkJ CQlzcmVncy5jcjMgPSBwZF9hZGRyOwoJCQkJc3JlZ3MuY3I0IHw9IENSNF9QU0U7CgkJCQl0 ZXh0X3ByZWZpeCA9IGt2bV9hc20zMl9wYWdlZF92bTg2OwoJCQkJdGV4dF9wcmVmaXhfc2l6 ZSA9IHNpemVvZihrdm1fYXNtMzJfcGFnZWRfdm04NikgLSAxOwoJCQl9IGVsc2UgewoJCQkJ dGV4dF9wcmVmaXggPSBrdm1fYXNtMzJfdm04NjsKCQkJCXRleHRfcHJlZml4X3NpemUgPSBz aXplb2Yoa3ZtX2FzbTMyX3ZtODYpIC0gMTsKCQkJfQoJCX0gZWxzZSB7CgkJCXNyZWdzLmNz LnNlbGVjdG9yID0gMDsKCQkJc3JlZ3MuY3MuYmFzZSA9IDA7CgkJfQoJfSBlbHNlIGlmICh0 ZXh0X3R5cGUgPT0gMTYpIHsKCQlpZiAoZmxhZ3MgJiBLVk1fU0VUVVBfQ1BMMykgewoJCQlz cmVncy5jcyA9IHNlZ19jczE2OwoJCQlzcmVncy5kcyA9IHNyZWdzLmVzID0gc3JlZ3MuZnMg PSBzcmVncy5ncyA9IHNyZWdzLnNzID0gc2VnX2RzMTY7CgkJCXRleHRfcHJlZml4ID0ga3Zt X2FzbTE2X2NwbDM7CgkJCXRleHRfcHJlZml4X3NpemUgPSBzaXplb2Yoa3ZtX2FzbTE2X2Nw bDMpIC0gMTsKCQl9IGVsc2UgewoJCQlzcmVncy5jcjAgfD0gQ1IwX1BFOwoJCQlzcmVncy5j cyA9IHNlZ19jczE2OwoJCQlzcmVncy5kcyA9IHNyZWdzLmVzID0gc3JlZ3MuZnMgPSBzcmVn cy5ncyA9IHNyZWdzLnNzID0gc2VnX2RzMTY7CgkJfQoJfSBlbHNlIGlmICh0ZXh0X3R5cGUg PT0gMzIpIHsKCQlzcmVncy5jcjAgfD0gQ1IwX1BFOwoJCXNyZWdzLmVmZXIgfD0gRUZFUl9T Q0U7CgkJc2V0dXBfc3lzY2FsbF9tc3JzKGNwdWZkLCBTRUxfQ1MzMiwgU0VMX0NTMzJfQ1BM Myk7CgkJc2V0dXBfMzJiaXRfaWR0KCZzcmVncywgaG9zdF9tZW0sIGd1ZXN0X21lbSk7CgkJ aWYgKGZsYWdzICYgS1ZNX1NFVFVQX1NNTSkgewoJCQlzcmVncy5jcyA9IHNlZ19jczMyOwoJ CQlzcmVncy5kcyA9IHNyZWdzLmVzID0gc3JlZ3MuZnMgPSBzcmVncy5ncyA9IHNyZWdzLnNz ID0gc2VnX2RzMzI7CgkJCU5PTkZBSUxJTkcoKihob3N0X21lbSArIEFERFJfVEVYVCkgPSAw eGY0KTsKCQkJaG9zdF90ZXh0ID0gaG9zdF9tZW0gKyAweDgwMDA7CgkJCWlvY3RsKGNwdWZk LCBLVk1fU01JLCAwKTsKCQl9IGVsc2UgaWYgKGZsYWdzICYgS1ZNX1NFVFVQX1BBR0lORykg ewoJCQlzcmVncy5jcyA9IHNlZ19jczMyOwoJCQlzcmVncy5kcyA9IHNyZWdzLmVzID0gc3Jl Z3MuZnMgPSBzcmVncy5ncyA9IHNyZWdzLnNzID0gc2VnX2RzMzI7CgkJCXVpbnQ2NF90IHBk X2FkZHIgPSBndWVzdF9tZW0gKyBBRERSX1BEOwoJCQl1aW50NjRfdCogcGQgPSAodWludDY0 X3QqKShob3N0X21lbSArIEFERFJfUEQpOwoJCQlOT05GQUlMSU5HKHBkWzBdID0gUERFMzJf UFJFU0VOVCB8IFBERTMyX1JXIHwgUERFMzJfVVNFUiB8IFBERTMyX1BTKTsKCQkJc3JlZ3Mu Y3IzID0gcGRfYWRkcjsKCQkJc3JlZ3MuY3I0IHw9IENSNF9QU0U7CgkJCXRleHRfcHJlZml4 ID0ga3ZtX2FzbTMyX3BhZ2VkOwoJCQl0ZXh0X3ByZWZpeF9zaXplID0gc2l6ZW9mKGt2bV9h c20zMl9wYWdlZCkgLSAxOwoJCX0gZWxzZSBpZiAoZmxhZ3MgJiBLVk1fU0VUVVBfQ1BMMykg ewoJCQlzcmVncy5jcyA9IHNlZ19jczMyX2NwbDM7CgkJCXNyZWdzLmRzID0gc3JlZ3MuZXMg PSBzcmVncy5mcyA9IHNyZWdzLmdzID0gc3JlZ3Muc3MgPSBzZWdfZHMzMl9jcGwzOwoJCX0g ZWxzZSB7CgkJCXNyZWdzLmNzID0gc2VnX2NzMzI7CgkJCXNyZWdzLmRzID0gc3JlZ3MuZXMg PSBzcmVncy5mcyA9IHNyZWdzLmdzID0gc3JlZ3Muc3MgPSBzZWdfZHMzMjsKCQl9Cgl9IGVs c2UgewoJCXNyZWdzLmVmZXIgfD0gRUZFUl9MTUUgfCBFRkVSX1NDRTsKCQlzcmVncy5jcjAg fD0gQ1IwX1BFOwoJCXNldHVwX3N5c2NhbGxfbXNycyhjcHVmZCwgU0VMX0NTNjQsIFNFTF9D UzY0X0NQTDMpOwoJCXNldHVwXzY0Yml0X2lkdCgmc3JlZ3MsIGhvc3RfbWVtLCBndWVzdF9t ZW0pOwoJCXNyZWdzLmNzID0gc2VnX2NzMzI7CgkJc3JlZ3MuZHMgPSBzcmVncy5lcyA9IHNy ZWdzLmZzID0gc3JlZ3MuZ3MgPSBzcmVncy5zcyA9IHNlZ19kczMyOwoJCXVpbnQ2NF90IHBt bDRfYWRkciA9IGd1ZXN0X21lbSArIEFERFJfUE1MNDsKCQl1aW50NjRfdCogcG1sNCA9ICh1 aW50NjRfdCopKGhvc3RfbWVtICsgQUREUl9QTUw0KTsKCQl1aW50NjRfdCBwZHB0X2FkZHIg PSBndWVzdF9tZW0gKyBBRERSX1BEUDsKCQl1aW50NjRfdCogcGRwdCA9ICh1aW50NjRfdCop KGhvc3RfbWVtICsgQUREUl9QRFApOwoJCXVpbnQ2NF90IHBkX2FkZHIgPSBndWVzdF9tZW0g KyBBRERSX1BEOwoJCXVpbnQ2NF90KiBwZCA9ICh1aW50NjRfdCopKGhvc3RfbWVtICsgQURE Ul9QRCk7CgkJTk9ORkFJTElORyhwbWw0WzBdID0gUERFNjRfUFJFU0VOVCB8IFBERTY0X1JX IHwgUERFNjRfVVNFUiB8IHBkcHRfYWRkcik7CgkJTk9ORkFJTElORyhwZHB0WzBdID0gUERF NjRfUFJFU0VOVCB8IFBERTY0X1JXIHwgUERFNjRfVVNFUiB8IHBkX2FkZHIpOwoJCU5PTkZB SUxJTkcocGRbMF0gPSBQREU2NF9QUkVTRU5UIHwgUERFNjRfUlcgfCBQREU2NF9VU0VSIHwg UERFNjRfUFMpOwoJCXNyZWdzLmNyMyA9IHBtbDRfYWRkcjsKCQlzcmVncy5jcjQgfD0gQ1I0 X1BBRTsKCQlpZiAoZmxhZ3MgJiBLVk1fU0VUVVBfVk0pIHsKCQkJc3JlZ3MuY3IwIHw9IENS MF9ORTsKCQkJTk9ORkFJTElORygqKCh1aW50NjRfdCopKGhvc3RfbWVtICsgQUREUl9WQVJf Vk1YT05fUFRSKSkgPSBBRERSX1ZBUl9WTVhPTik7CgkJCU5PTkZBSUxJTkcoKigodWludDY0 X3QqKShob3N0X21lbSArIEFERFJfVkFSX1ZNQ1NfUFRSKSkgPSBBRERSX1ZBUl9WTUNTKTsK CQkJTk9ORkFJTElORyhtZW1jcHkoaG9zdF9tZW0gKyBBRERSX1ZBUl9WTUVYSVRfQ09ERSwg a3ZtX2FzbTY0X3ZtX2V4aXQsIHNpemVvZihrdm1fYXNtNjRfdm1fZXhpdCkgLSAxKSk7CgkJ CU5PTkZBSUxJTkcoKigodWludDY0X3QqKShob3N0X21lbSArIEFERFJfVkFSX1ZNRVhJVF9Q VFIpKSA9IEFERFJfVkFSX1ZNRVhJVF9DT0RFKTsKCQkJdGV4dF9wcmVmaXggPSBrdm1fYXNt NjRfaW5pdF92bTsKCQkJdGV4dF9wcmVmaXhfc2l6ZSA9IHNpemVvZihrdm1fYXNtNjRfaW5p dF92bSkgLSAxOwoJCX0gZWxzZSBpZiAoZmxhZ3MgJiBLVk1fU0VUVVBfQ1BMMykgewoJCQl0 ZXh0X3ByZWZpeCA9IGt2bV9hc202NF9jcGwzOwoJCQl0ZXh0X3ByZWZpeF9zaXplID0gc2l6 ZW9mKGt2bV9hc202NF9jcGwzKSAtIDE7CgkJfSBlbHNlIHsKCQkJdGV4dF9wcmVmaXggPSBr dm1fYXNtNjRfZW5hYmxlX2xvbmc7CgkJCXRleHRfcHJlZml4X3NpemUgPSBzaXplb2Yoa3Zt X2FzbTY0X2VuYWJsZV9sb25nKSAtIDE7CgkJfQoJfQoJc3RydWN0IHRzczE2IHRzczE2OwoJ bWVtc2V0KCZ0c3MxNiwgMCwgc2l6ZW9mKHRzczE2KSk7Cgl0c3MxNi5zczAgPSB0c3MxNi5z czEgPSB0c3MxNi5zczIgPSBTRUxfRFMxNjsKCXRzczE2LnNwMCA9IHRzczE2LnNwMSA9IHRz czE2LnNwMiA9IEFERFJfU1RBQ0swOwoJdHNzMTYuaXAgPSBBRERSX1ZBUl9VU0VSX0NPREUy OwoJdHNzMTYuZmxhZ3MgPSAoMSA8PCAxKTsKCXRzczE2LmNzID0gU0VMX0NTMTY7Cgl0c3Mx Ni5lcyA9IHRzczE2LmRzID0gdHNzMTYuc3MgPSBTRUxfRFMxNjsKCXRzczE2LmxkdCA9IFNF TF9MRFQ7CglzdHJ1Y3QgdHNzMTYqIHRzczE2X2FkZHIgPSAoc3RydWN0IHRzczE2KikoaG9z dF9tZW0gKyBzZWdfdHNzMTZfMi5iYXNlKTsKCU5PTkZBSUxJTkcobWVtY3B5KHRzczE2X2Fk ZHIsICZ0c3MxNiwgc2l6ZW9mKHRzczE2KSkpOwoJbWVtc2V0KCZ0c3MxNiwgMCwgc2l6ZW9m KHRzczE2KSk7Cgl0c3MxNi5zczAgPSB0c3MxNi5zczEgPSB0c3MxNi5zczIgPSBTRUxfRFMx NjsKCXRzczE2LnNwMCA9IHRzczE2LnNwMSA9IHRzczE2LnNwMiA9IEFERFJfU1RBQ0swOwoJ dHNzMTYuaXAgPSBBRERSX1ZBUl9VU0VSX0NPREUyOwoJdHNzMTYuZmxhZ3MgPSAoMSA8PCAx KTsKCXRzczE2LmNzID0gU0VMX0NTMTZfQ1BMMzsKCXRzczE2LmVzID0gdHNzMTYuZHMgPSB0 c3MxNi5zcyA9IFNFTF9EUzE2X0NQTDM7Cgl0c3MxNi5sZHQgPSBTRUxfTERUOwoJc3RydWN0 IHRzczE2KiB0c3MxNl9jcGwzX2FkZHIgPSAoc3RydWN0IHRzczE2KikoaG9zdF9tZW0gKyBz ZWdfdHNzMTZfY3BsMy5iYXNlKTsKCU5PTkZBSUxJTkcobWVtY3B5KHRzczE2X2NwbDNfYWRk ciwgJnRzczE2LCBzaXplb2YodHNzMTYpKSk7CglzdHJ1Y3QgdHNzMzIgdHNzMzI7CgltZW1z ZXQoJnRzczMyLCAwLCBzaXplb2YodHNzMzIpKTsKCXRzczMyLnNzMCA9IHRzczMyLnNzMSA9 IHRzczMyLnNzMiA9IFNFTF9EUzMyOwoJdHNzMzIuc3AwID0gdHNzMzIuc3AxID0gdHNzMzIu c3AyID0gQUREUl9TVEFDSzA7Cgl0c3MzMi5pcCA9IEFERFJfVkFSX1VTRVJfQ09ERTsKCXRz czMyLmZsYWdzID0gKDEgPDwgMSkgfCAoMSA8PCAxNyk7Cgl0c3MzMi5sZHQgPSBTRUxfTERU OwoJdHNzMzIuY3IzID0gc3JlZ3MuY3IzOwoJdHNzMzIuaW9fYml0bWFwID0gb2Zmc2V0b2Yo c3RydWN0IHRzczMyLCBpb19iaXRtYXApOwoJc3RydWN0IHRzczMyKiB0c3MzMl9hZGRyID0g KHN0cnVjdCB0c3MzMiopKGhvc3RfbWVtICsgc2VnX3RzczMyX3ZtODYuYmFzZSk7CglOT05G QUlMSU5HKG1lbWNweSh0c3MzMl9hZGRyLCAmdHNzMzIsIHNpemVvZih0c3MzMikpKTsKCW1l bXNldCgmdHNzMzIsIDAsIHNpemVvZih0c3MzMikpOwoJdHNzMzIuc3MwID0gdHNzMzIuc3Mx ID0gdHNzMzIuc3MyID0gU0VMX0RTMzI7Cgl0c3MzMi5zcDAgPSB0c3MzMi5zcDEgPSB0c3Mz Mi5zcDIgPSBBRERSX1NUQUNLMDsKCXRzczMyLmlwID0gQUREUl9WQVJfVVNFUl9DT0RFOwoJ dHNzMzIuZmxhZ3MgPSAoMSA8PCAxKTsKCXRzczMyLmNyMyA9IHNyZWdzLmNyMzsKCXRzczMy LmVzID0gdHNzMzIuZHMgPSB0c3MzMi5zcyA9IHRzczMyLmdzID0gdHNzMzIuZnMgPSBTRUxf RFMzMjsKCXRzczMyLmNzID0gU0VMX0NTMzI7Cgl0c3MzMi5sZHQgPSBTRUxfTERUOwoJdHNz MzIuY3IzID0gc3JlZ3MuY3IzOwoJdHNzMzIuaW9fYml0bWFwID0gb2Zmc2V0b2Yoc3RydWN0 IHRzczMyLCBpb19iaXRtYXApOwoJc3RydWN0IHRzczMyKiB0c3MzMl9jcGwzX2FkZHIgPSAo c3RydWN0IHRzczMyKikoaG9zdF9tZW0gKyBzZWdfdHNzMzJfMi5iYXNlKTsKCU5PTkZBSUxJ TkcobWVtY3B5KHRzczMyX2NwbDNfYWRkciwgJnRzczMyLCBzaXplb2YodHNzMzIpKSk7Cglz dHJ1Y3QgdHNzNjQgdHNzNjQ7CgltZW1zZXQoJnRzczY0LCAwLCBzaXplb2YodHNzNjQpKTsK CXRzczY0LnJzcFswXSA9IEFERFJfU1RBQ0swOwoJdHNzNjQucnNwWzFdID0gQUREUl9TVEFD SzA7Cgl0c3M2NC5yc3BbMl0gPSBBRERSX1NUQUNLMDsKCXRzczY0LmlvX2JpdG1hcCA9IG9m ZnNldG9mKHN0cnVjdCB0c3M2NCwgaW9fYml0bWFwKTsKCXN0cnVjdCB0c3M2NCogdHNzNjRf YWRkciA9IChzdHJ1Y3QgdHNzNjQqKShob3N0X21lbSArIHNlZ190c3M2NC5iYXNlKTsKCU5P TkZBSUxJTkcobWVtY3B5KHRzczY0X2FkZHIsICZ0c3M2NCwgc2l6ZW9mKHRzczY0KSkpOwoJ bWVtc2V0KCZ0c3M2NCwgMCwgc2l6ZW9mKHRzczY0KSk7Cgl0c3M2NC5yc3BbMF0gPSBBRERS X1NUQUNLMDsKCXRzczY0LnJzcFsxXSA9IEFERFJfU1RBQ0swOwoJdHNzNjQucnNwWzJdID0g QUREUl9TVEFDSzA7Cgl0c3M2NC5pb19iaXRtYXAgPSBvZmZzZXRvZihzdHJ1Y3QgdHNzNjQs IGlvX2JpdG1hcCk7CglzdHJ1Y3QgdHNzNjQqIHRzczY0X2NwbDNfYWRkciA9IChzdHJ1Y3Qg dHNzNjQqKShob3N0X21lbSArIHNlZ190c3M2NF9jcGwzLmJhc2UpOwoJTk9ORkFJTElORyht ZW1jcHkodHNzNjRfY3BsM19hZGRyLCAmdHNzNjQsIHNpemVvZih0c3M2NCkpKTsKCWlmICh0 ZXh0X3NpemUgPiAxMDAwKQoJCXRleHRfc2l6ZSA9IDEwMDA7CglpZiAodGV4dF9wcmVmaXgp IHsKCQlOT05GQUlMSU5HKG1lbWNweShob3N0X3RleHQsIHRleHRfcHJlZml4LCB0ZXh0X3By ZWZpeF9zaXplKSk7CgkJdm9pZCogcGF0Y2ggPSAwOwoJCU5PTkZBSUxJTkcocGF0Y2ggPSBt ZW1tZW0oaG9zdF90ZXh0LCB0ZXh0X3ByZWZpeF9zaXplLCAiXHhkZVx4YzBceGFkXHgwYiIs IDQpKTsKCQlpZiAocGF0Y2gpCgkJCU5PTkZBSUxJTkcoKigodWludDMyX3QqKXBhdGNoKSA9 IGd1ZXN0X21lbSArIEFERFJfVEVYVCArICgoY2hhciopcGF0Y2ggLSBob3N0X3RleHQpICsg Nik7CgkJdWludDE2X3QgbWFnaWMgPSBQUkVGSVhfU0laRTsKCQlwYXRjaCA9IDA7CgkJTk9O RkFJTElORyhwYXRjaCA9IG1lbW1lbShob3N0X3RleHQsIHRleHRfcHJlZml4X3NpemUsICZt YWdpYywgc2l6ZW9mKG1hZ2ljKSkpOwoJCWlmIChwYXRjaCkKCQkJTk9ORkFJTElORygqKCh1 aW50MTZfdCopcGF0Y2gpID0gZ3Vlc3RfbWVtICsgQUREUl9URVhUICsgdGV4dF9wcmVmaXhf c2l6ZSk7Cgl9CglOT05GQUlMSU5HKG1lbWNweSgodm9pZCopKGhvc3RfdGV4dCArIHRleHRf cHJlZml4X3NpemUpLCB0ZXh0LCB0ZXh0X3NpemUpKTsKCU5PTkZBSUxJTkcoKihob3N0X3Rl eHQgKyB0ZXh0X3ByZWZpeF9zaXplICsgdGV4dF9zaXplKSA9IDB4ZjQpOwoJTk9ORkFJTElO RyhtZW1jcHkoaG9zdF9tZW0gKyBBRERSX1ZBUl9VU0VSX0NPREUsIHRleHQsIHRleHRfc2l6 ZSkpOwoJTk9ORkFJTElORygqKGhvc3RfbWVtICsgQUREUl9WQVJfVVNFUl9DT0RFICsgdGV4 dF9zaXplKSA9IDB4ZjQpOwoJTk9ORkFJTElORygqKGhvc3RfbWVtICsgQUREUl9WQVJfSExU KSA9IDB4ZjQpOwoJTk9ORkFJTElORyhtZW1jcHkoaG9zdF9tZW0gKyBBRERSX1ZBUl9TWVNS RVQsICJceDBmXHgwN1x4ZjQiLCAzKSk7CglOT05GQUlMSU5HKG1lbWNweShob3N0X21lbSAr IEFERFJfVkFSX1NZU0VYSVQsICJceDBmXHgzNVx4ZjQiLCAzKSk7CglOT05GQUlMSU5HKCoo dWludDY0X3QqKShob3N0X21lbSArIEFERFJfVkFSX1ZNV1JJVEVfRkxEKSA9IDApOwoJTk9O RkFJTElORygqKHVpbnQ2NF90KikoaG9zdF9tZW0gKyBBRERSX1ZBUl9WTVdSSVRFX1ZBTCkg PSAwKTsKCWlmIChvcHRfY291bnQgPiAyKQoJCW9wdF9jb3VudCA9IDI7Cglmb3IgKGkgPSAw OyBpIDwgb3B0X2NvdW50OyBpKyspIHsKCQl1aW50NjRfdCB0eXAgPSAwOwoJCXVpbnQ2NF90 IHZhbCA9IDA7CgkJTk9ORkFJTElORyh0eXAgPSBvcHRfYXJyYXlfcHRyW2ldLnR5cCk7CgkJ Tk9ORkFJTElORyh2YWwgPSBvcHRfYXJyYXlfcHRyW2ldLnZhbCk7CgkJc3dpdGNoICh0eXAg JSA5KSB7CgkJY2FzZSAwOgoJCQlzcmVncy5jcjAgXj0gdmFsICYgKENSMF9NUCB8IENSMF9F TSB8IENSMF9FVCB8IENSMF9ORSB8IENSMF9XUCB8IENSMF9BTSB8IENSMF9OVyB8IENSMF9D RCk7CgkJCWJyZWFrOwoJCWNhc2UgMToKCQkJc3JlZ3MuY3I0IF49IHZhbCAmIChDUjRfVk1F IHwgQ1I0X1BWSSB8IENSNF9UU0QgfCBDUjRfREUgfCBDUjRfTUNFIHwgQ1I0X1BHRSB8IENS NF9QQ0UgfAoJCQkJCSAgICBDUjRfT1NGWFNSIHwgQ1I0X09TWE1NRVhDUFQgfCBDUjRfVU1J UCB8IENSNF9WTVhFIHwgQ1I0X1NNWEUgfCBDUjRfRlNHU0JBU0UgfCBDUjRfUENJREUgfAoJ CQkJCSAgICBDUjRfT1NYU0FWRSB8IENSNF9TTUVQIHwgQ1I0X1NNQVAgfCBDUjRfUEtFKTsK CQkJYnJlYWs7CgkJY2FzZSAyOgoJCQlzcmVncy5lZmVyIF49IHZhbCAmIChFRkVSX1NDRSB8 IEVGRVJfTlhFIHwgRUZFUl9TVk1FIHwgRUZFUl9MTVNMRSB8IEVGRVJfRkZYU1IgfCBFRkVS X1RDRSk7CgkJCWJyZWFrOwoJCWNhc2UgMzoKCQkJdmFsICY9ICgoMSA8PCA4KSB8ICgxIDw8 IDkpIHwgKDEgPDwgMTApIHwgKDEgPDwgMTIpIHwgKDEgPDwgMTMpIHwgKDEgPDwgMTQpIHwK CQkJCSgxIDw8IDE1KSB8ICgxIDw8IDE4KSB8ICgxIDw8IDE5KSB8ICgxIDw8IDIwKSB8ICgx IDw8IDIxKSk7CgkJCXJlZ3MucmZsYWdzIF49IHZhbDsKCQkJTk9ORkFJTElORyh0c3MxNl9h ZGRyLT5mbGFncyBePSB2YWwpOwoJCQlOT05GQUlMSU5HKHRzczE2X2NwbDNfYWRkci0+Zmxh Z3MgXj0gdmFsKTsKCQkJTk9ORkFJTElORyh0c3MzMl9hZGRyLT5mbGFncyBePSB2YWwpOwoJ CQlOT05GQUlMSU5HKHRzczMyX2NwbDNfYWRkci0+ZmxhZ3MgXj0gdmFsKTsKCQkJYnJlYWs7 CgkJY2FzZSA0OgoJCQlzZWdfY3MxNi50eXBlID0gdmFsICYgMHhmOwoJCQlzZWdfY3MzMi50 eXBlID0gdmFsICYgMHhmOwoJCQlzZWdfY3M2NC50eXBlID0gdmFsICYgMHhmOwoJCQlicmVh azsKCQljYXNlIDU6CgkJCXNlZ19jczE2X2NwbDMudHlwZSA9IHZhbCAmIDB4ZjsKCQkJc2Vn X2NzMzJfY3BsMy50eXBlID0gdmFsICYgMHhmOwoJCQlzZWdfY3M2NF9jcGwzLnR5cGUgPSB2 YWwgJiAweGY7CgkJCWJyZWFrOwoJCWNhc2UgNjoKCQkJc2VnX2RzMTYudHlwZSA9IHZhbCAm IDB4ZjsKCQkJc2VnX2RzMzIudHlwZSA9IHZhbCAmIDB4ZjsKCQkJc2VnX2RzNjQudHlwZSA9 IHZhbCAmIDB4ZjsKCQkJYnJlYWs7CgkJY2FzZSA3OgoJCQlzZWdfZHMxNl9jcGwzLnR5cGUg PSB2YWwgJiAweGY7CgkJCXNlZ19kczMyX2NwbDMudHlwZSA9IHZhbCAmIDB4ZjsKCQkJc2Vn X2RzNjRfY3BsMy50eXBlID0gdmFsICYgMHhmOwoJCQlicmVhazsKCQljYXNlIDg6CgkJCU5P TkZBSUxJTkcoKih1aW50NjRfdCopKGhvc3RfbWVtICsgQUREUl9WQVJfVk1XUklURV9GTEQp ID0gKHZhbCAmIDB4ZmZmZikpOwoJCQlOT05GQUlMSU5HKCoodWludDY0X3QqKShob3N0X21l bSArIEFERFJfVkFSX1ZNV1JJVEVfVkFMKSA9ICh2YWwgPj4gMTYpKTsKCQkJYnJlYWs7CgkJ ZGVmYXVsdDoKCWV4aXQoMSk7CgkJfQoJfQoJcmVncy5yZmxhZ3MgfD0gMjsKCWZpbGxfc2Vn bWVudF9kZXNjcmlwdG9yKGdkdCwgbGR0LCAmc2VnX2xkdCk7CglmaWxsX3NlZ21lbnRfZGVz Y3JpcHRvcihnZHQsIGxkdCwgJnNlZ19jczE2KTsKCWZpbGxfc2VnbWVudF9kZXNjcmlwdG9y KGdkdCwgbGR0LCAmc2VnX2RzMTYpOwoJZmlsbF9zZWdtZW50X2Rlc2NyaXB0b3IoZ2R0LCBs ZHQsICZzZWdfY3MxNl9jcGwzKTsKCWZpbGxfc2VnbWVudF9kZXNjcmlwdG9yKGdkdCwgbGR0 LCAmc2VnX2RzMTZfY3BsMyk7CglmaWxsX3NlZ21lbnRfZGVzY3JpcHRvcihnZHQsIGxkdCwg JnNlZ19jczMyKTsKCWZpbGxfc2VnbWVudF9kZXNjcmlwdG9yKGdkdCwgbGR0LCAmc2VnX2Rz MzIpOwoJZmlsbF9zZWdtZW50X2Rlc2NyaXB0b3IoZ2R0LCBsZHQsICZzZWdfY3MzMl9jcGwz KTsKCWZpbGxfc2VnbWVudF9kZXNjcmlwdG9yKGdkdCwgbGR0LCAmc2VnX2RzMzJfY3BsMyk7 CglmaWxsX3NlZ21lbnRfZGVzY3JpcHRvcihnZHQsIGxkdCwgJnNlZ19jczY0KTsKCWZpbGxf c2VnbWVudF9kZXNjcmlwdG9yKGdkdCwgbGR0LCAmc2VnX2RzNjQpOwoJZmlsbF9zZWdtZW50 X2Rlc2NyaXB0b3IoZ2R0LCBsZHQsICZzZWdfY3M2NF9jcGwzKTsKCWZpbGxfc2VnbWVudF9k ZXNjcmlwdG9yKGdkdCwgbGR0LCAmc2VnX2RzNjRfY3BsMyk7CglmaWxsX3NlZ21lbnRfZGVz Y3JpcHRvcihnZHQsIGxkdCwgJnNlZ190c3MzMik7CglmaWxsX3NlZ21lbnRfZGVzY3JpcHRv cihnZHQsIGxkdCwgJnNlZ190c3MzMl8yKTsKCWZpbGxfc2VnbWVudF9kZXNjcmlwdG9yKGdk dCwgbGR0LCAmc2VnX3RzczMyX2NwbDMpOwoJZmlsbF9zZWdtZW50X2Rlc2NyaXB0b3IoZ2R0 LCBsZHQsICZzZWdfdHNzMzJfdm04Nik7CglmaWxsX3NlZ21lbnRfZGVzY3JpcHRvcihnZHQs IGxkdCwgJnNlZ190c3MxNik7CglmaWxsX3NlZ21lbnRfZGVzY3JpcHRvcihnZHQsIGxkdCwg JnNlZ190c3MxNl8yKTsKCWZpbGxfc2VnbWVudF9kZXNjcmlwdG9yKGdkdCwgbGR0LCAmc2Vn X3RzczE2X2NwbDMpOwoJZmlsbF9zZWdtZW50X2Rlc2NyaXB0b3JfZHdvcmQoZ2R0LCBsZHQs ICZzZWdfdHNzNjQpOwoJZmlsbF9zZWdtZW50X2Rlc2NyaXB0b3JfZHdvcmQoZ2R0LCBsZHQs ICZzZWdfdHNzNjRfY3BsMyk7CglmaWxsX3NlZ21lbnRfZGVzY3JpcHRvcihnZHQsIGxkdCwg JnNlZ19jZ2F0ZTE2KTsKCWZpbGxfc2VnbWVudF9kZXNjcmlwdG9yKGdkdCwgbGR0LCAmc2Vn X3RnYXRlMTYpOwoJZmlsbF9zZWdtZW50X2Rlc2NyaXB0b3IoZ2R0LCBsZHQsICZzZWdfY2dh dGUzMik7CglmaWxsX3NlZ21lbnRfZGVzY3JpcHRvcihnZHQsIGxkdCwgJnNlZ190Z2F0ZTMy KTsKCWZpbGxfc2VnbWVudF9kZXNjcmlwdG9yX2R3b3JkKGdkdCwgbGR0LCAmc2VnX2NnYXRl NjQpOwoJaWYgKGlvY3RsKGNwdWZkLCBLVk1fU0VUX1NSRUdTLCAmc3JlZ3MpKQoJCXJldHVy biAtMTsKCWlmIChpb2N0bChjcHVmZCwgS1ZNX1NFVF9SRUdTLCAmcmVncykpCgkJcmV0dXJu IC0xOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIGtpbGxfYW5kX3dhaXQoaW50IHBpZCwg aW50KiBzdGF0dXMpCnsKCWtpbGwoLXBpZCwgU0lHS0lMTCk7CglraWxsKHBpZCwgU0lHS0lM TCk7CglpbnQgaTsKCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewoJCWlmICh3YWl0cGlk KC0xLCBzdGF0dXMsIFdOT0hBTkcgfCBfX1dBTEwpID09IHBpZCkKCQkJcmV0dXJuOwoJCXVz bGVlcCgxMDAwKTsKCX0KCURJUiogZGlyID0gb3BlbmRpcigiL3N5cy9mcy9mdXNlL2Nvbm5l Y3Rpb25zIik7CglpZiAoZGlyKSB7CgkJZm9yICg7OykgewoJCQlzdHJ1Y3QgZGlyZW50KiBl bnQgPSByZWFkZGlyKGRpcik7CgkJCWlmICghZW50KQoJCQkJYnJlYWs7CgkJCWlmIChzdHJj bXAoZW50LT5kX25hbWUsICIuIikgPT0gMCB8fCBzdHJjbXAoZW50LT5kX25hbWUsICIuLiIp ID09IDApCgkJCQljb250aW51ZTsKCQkJY2hhciBhYm9ydFszMDBdOwoJCQlzbnByaW50Zihh Ym9ydCwgc2l6ZW9mKGFib3J0KSwgIi9zeXMvZnMvZnVzZS9jb25uZWN0aW9ucy8lcy9hYm9y dCIsIGVudC0+ZF9uYW1lKTsKCQkJaW50IGZkID0gb3BlbihhYm9ydCwgT19XUk9OTFkpOwoJ CQlpZiAoZmQgPT0gLTEpIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWlmICh3cml0ZShmZCwg YWJvcnQsIDEpIDwgMCkgewoJCQl9CgkJCWNsb3NlKGZkKTsKCQl9CgkJY2xvc2VkaXIoZGly KTsKCX0gZWxzZSB7Cgl9Cgl3aGlsZSAod2FpdHBpZCgtMSwgc3RhdHVzLCBfX1dBTEwpICE9 IHBpZCkgewoJfQp9CgojZGVmaW5lIFNZWl9IQVZFX1NFVFVQX1RFU1QgMQpzdGF0aWMgdm9p ZCBzZXR1cF90ZXN0KCkKewoJcHJjdGwoUFJfU0VUX1BERUFUSFNJRywgU0lHS0lMTCwgMCwg MCwgMCk7CglzZXRwZ3JwKCk7Cgl3cml0ZV9maWxlKCIvcHJvYy9zZWxmL29vbV9zY29yZV9h ZGoiLCAiMTAwMCIpOwp9CgpzdGF0aWMgdm9pZCBleGVjdXRlX29uZSh2b2lkKTsKCiNkZWZp bmUgV0FJVF9GTEFHUyBfX1dBTEwKCnN0YXRpYyB2b2lkIGxvb3Aodm9pZCkKewoJaW50IGl0 ZXI7Cglmb3IgKGl0ZXIgPSAwOzsgaXRlcisrKSB7CgkJaW50IHBpZCA9IGZvcmsoKTsKCQlp ZiAocGlkIDwgMCkKCWV4aXQoMSk7CgkJaWYgKHBpZCA9PSAwKSB7CgkJCXNldHVwX3Rlc3Qo KTsKCQkJZXhlY3V0ZV9vbmUoKTsKCQkJZXhpdCgwKTsKCQl9CgkJaW50IHN0YXR1cyA9IDA7 CgkJdWludDY0X3Qgc3RhcnQgPSBjdXJyZW50X3RpbWVfbXMoKTsKCQlmb3IgKDs7KSB7CgkJ CWlmICh3YWl0cGlkKC0xLCAmc3RhdHVzLCBXTk9IQU5HIHwgV0FJVF9GTEFHUykgPT0gcGlk KQoJCQkJYnJlYWs7CgkJCXNsZWVwX21zKDEpOwoJCQlpZiAoY3VycmVudF90aW1lX21zKCkg LSBzdGFydCA8IDUgKiAxMDAwKQoJCQkJY29udGludWU7CgkJCWtpbGxfYW5kX3dhaXQocGlk LCAmc3RhdHVzKTsKCQkJYnJlYWs7CgkJfQoJfQp9Cgp1aW50NjRfdCByWzNdID0gezB4ZmZm ZmZmZmZmZmZmZmZmZiwgMHhmZmZmZmZmZmZmZmZmZmZmLCAweGZmZmZmZmZmZmZmZmZmZmZ9 OwoKdm9pZCBleGVjdXRlX29uZSh2b2lkKQp7CgkJbG9uZyByZXMgPSAwOwoJTk9ORkFJTElO RyhtZW1jcHkoKHZvaWQqKTB4MjAwMDExYzAsICIvZGV2L2t2bVwwMDAiLCA5KSk7CglyZXMg PSBzeXNjYWxsKF9fTlJfb3BlbmF0LCAweGZmZmZmZmZmZmZmZmZmOWMsIDB4MjAwMDExYzAs IDB4MjAwMCwgMCk7CglpZiAocmVzICE9IC0xKQoJCXJbMF0gPSByZXM7CglyZXMgPSBzeXNj YWxsKF9fTlJfaW9jdGwsIHJbMF0sIDB4YWUwMSwgMCk7CglpZiAocmVzICE9IC0xKQoJCXJb MV0gPSByZXM7CglyZXMgPSBzeXNjYWxsKF9fTlJfaW9jdGwsIHJbMV0sIDB4YWU0MSwgMCk7 CglpZiAocmVzICE9IC0xKQoJCXJbMl0gPSByZXM7CglzeXpfa3ZtX3NldHVwX2NwdShyWzFd LCByWzJdLCAweDIwZmU1MDAwLCAwLCAwLCAwLCAwLCAwKTsKCXN5c2NhbGwoX19OUl9pb2N0 bCwgclsyXSwgMHhhZTgwLCAwKTsKCn0KaW50IG1haW4odm9pZCkKewoJCXN5c2NhbGwoX19O Ul9tbWFwLCAweDIwMDAwMDAwLCAweDEwMDAwMDAsIDMsIDB4MzIsIC0xLCAwKTsKCWluc3Rh bGxfc2Vndl9oYW5kbGVyKCk7Cglmb3IgKHByb2NpZCA9IDA7IHByb2NpZCA8IDg7IHByb2Np ZCsrKSB7CgkJaWYgKGZvcmsoKSA9PSAwKSB7CgkJCWxvb3AoKTsKCQl9Cgl9CglzbGVlcCgx MDAwMDAwKTsKCXJldHVybiAwOwp9CgoKCg== --------------00D67D11D7F555F037DA12B0--