From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31551 invoked by alias); 21 Jul 2014 12:35: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 31256 invoked by uid 89); 21 Jul 2014 12:35:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qa0-f43.google.com Received: from mail-qa0-f43.google.com (HELO mail-qa0-f43.google.com) (209.85.216.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 21 Jul 2014 12:35:02 +0000 Received: by mail-qa0-f43.google.com with SMTP id w8so5090772qac.30 for ; Mon, 21 Jul 2014 05:34:59 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.140.88.243 with SMTP id t106mr36561206qgd.12.1405946099771; Mon, 21 Jul 2014 05:34:59 -0700 (PDT) Received: by 10.140.49.111 with HTTP; Mon, 21 Jul 2014 05:34:59 -0700 (PDT) In-Reply-To: References: <003301cf641f$36733f40$a359bdc0$@arm.com> <5363A4CF.9050904@arm.com> <003f01cf6832$9cf921a0$d6eb64e0$@arm.com> <004401cf68e7$fff1bb40$ffd531c0$@arm.com> <000301cf9781$fd11c7d0$f7355770$@arm.com> <53BBB241.4040200@arm.com> Date: Mon, 21 Jul 2014 12:45:00 -0000 Message-ID: Subject: Re: [PATCH ARM] Improve ARM memset inlining From: "Bin.Cheng" To: Ramana Radhakrishnan Cc: Bin Cheng , Richard Earnshaw , gcc-patches Content-Type: multipart/mixed; boundary=001a11c12cf0d9deed04feb355e8 X-IsSubscribed: yes X-SW-Source: 2014-07/txt/msg01399.txt.bz2 --001a11c12cf0d9deed04feb355e8 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1963 On Tue, Jul 8, 2014 at 10:57 AM, Bin.Cheng wrote: > On Tue, Jul 8, 2014 at 9:56 AM, Ramana Radhakrishnan > wrote: > > 2014-07-08 Bin Cheng > > PR target/55701 > * config/arm/arm.md (setmem): New pattern. > * config/arm/arm-protos.h (struct tune_params): New fields. > (arm_gen_setmem): New prototype. > * config/arm/arm.c (arm_slowmul_tune): Initialize new fields. > (arm_fastmul_tune, arm_strongarm_tune, arm_xscale_tune): Ditto. > (arm_9e_tune, arm_v6t2_tune, arm_cortex_tune): Ditto. > (arm_cortex_a8_tune, arm_cortex_a7_tune): Ditto. > (arm_cortex_a15_tune, arm_cortex_a53_tune): Ditto. > (arm_cortex_a57_tune, arm_cortex_a5_tune): Ditto. > (arm_cortex_a9_tune, arm_cortex_a12_tune): Ditto. > (arm_v7m_tune, arm_v6m_tune, arm_fa726te_tune): Ditto. > (arm_const_inline_cost): New function. > (arm_block_set_max_insns): New function. > (arm_block_set_non_vect_profit_p): New function. > (arm_block_set_vect_profit_p): New function. > (arm_block_set_unaligned_vect): New function. > (arm_block_set_aligned_vect): New function. > (arm_block_set_unaligned_non_vect): New function. > (arm_block_set_aligned_non_vect): New function. > (arm_block_set_vect, arm_gen_setmem): New functions. > > gcc/testsuite/ChangeLog > 2014-07-08 Bin Cheng > > PR target/55701 > * gcc.target/arm/memset-inline-1.c: New test. > * gcc.target/arm/memset-inline-2.c: New test. > * gcc.target/arm/memset-inline-3.c: New test. > * gcc.target/arm/memset-inline-4.c: New test. > * gcc.target/arm/memset-inline-5.c: New test. > * gcc.target/arm/memset-inline-6.c: New test. > * gcc.target/arm/memset-inline-7.c: New test. > * gcc.target/arm/memset-inline-8.c: New test. > * gcc.target/arm/memset-inline-9.c: New test. Committed attached patch as r212893. Thanks, bin --001a11c12cf0d9deed04feb355e8 Content-Type: text/plain; charset=US-ASCII; name="j1328-20140718.txt" Content-Disposition: attachment; filename="j1328-20140718.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hxvrzwlr1 Content-length: 60171 SW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbWVtc2V0LWlu bGluZS01LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FybS9tZW1zZXQtaW5saW5lLTUuYwkocmV2aXNp b24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbWVtc2V0 LWlubGluZS01LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8q IHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctc2tpcC1pZiAiRG9uJ3QgaW5s aW5lIG1lbXNldCB1c2luZyBuZW9uIGluc3RydWN0aW9ucyBvbiBjb3J0ZXgt YTkiIHsgKi0qLSogfSB7ICItbWNwdT1jb3J0ZXgtYTkiIH0geyAiIiB9IH0g Ki8KKy8qIHsgZGctc2tpcC1pZiAiRG9uJ3QgaW5saW5lIG1lbXNldCB1c2lu ZyBuZW9uIGluc3RydWN0aW9ucyBvbiBjb3J0ZXgtYTkiIHsgKi0qLSogfSB7 ICItbXR1bmU9Y29ydGV4LWE5IiB9IHsgIiIgfSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1zYXZlLXRlbXBzIC1PMiAtZm5vLWlubGluZSIgfSAqLworLyog eyBkZy1hZGQtb3B0aW9ucyAiYXJtX25lb24iIH0gKi8KKworI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIExF TiAoMTAwKQoraW50IGFbTEVOXTsKK2ludCBiW0xFTl07CitpbnQgY1tMRU5d OworaW50IGRbTEVOXTsKK3ZvaWQKK2ZvbzEgKHZvaWQpCit7CisgICAgbWVt c2V0IChhLCAtMSwgMTYpOworICAgIHJldHVybjsKK30KKwordm9pZAorZm9v MiAodm9pZCkKK3sKKyAgbWVtc2V0IChiLCAxLCAyNSk7CisgIHJldHVybjsK K30KKwordm9pZAorZm9vMyAodm9pZCkKK3sKKyAgbWVtc2V0IChjLCAtMSwg MTkpOworICByZXR1cm47Cit9CisKK3ZvaWQKK2ZvbzQgKHZvaWQpCit7Cisg IG1lbXNldCAoZCwgMSwgMjMpOworICByZXR1cm47Cit9CisKK3ZvaWQKK2No ZWNrIChzaWduZWQgY2hhciAqYXJyLCBpbnQgaWR4LCBpbnQgbGVuLCBpbnQg dikKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykK KyAgICBpZiAoYXJyW2ldICE9IHYpCisgICAgICBhYm9ydCAoKTsKKworICBm b3IgKGkgPSBpZHg7IGkgPCBsZW47IGkrKykKKyAgICBpZiAoYXJyW2ldICE9 IDApCisgICAgICBhYm9ydCAoKTsKK30KKworaW50CittYWluKHZvaWQpCit7 CisgIGZvbzEgKCk7CisgIGNoZWNrICgoc2lnbmVkIGNoYXIgKilhLCAxNiwg c2l6ZW9mIChhKSwgLTEpOworCisgIGZvbzIgKCk7CisgIGNoZWNrICgoc2ln bmVkIGNoYXIgKiliLCAyNSwgc2l6ZW9mIChiKSwgMSk7CisKKyAgZm9vMyAo KTsKKyAgY2hlY2sgKChzaWduZWQgY2hhciAqKWMsIDE5LCBzaXplb2YgKGMp LCAtMSk7CisKKyAgZm9vNCAoKTsKKyAgY2hlY2sgKChzaWduZWQgY2hhciAq KWQsIDIzLCBzaXplb2YgKGQpLCAxKTsKKworICByZXR1cm4gMDsKK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiYmw/XFsgXHRc XSttZW1zZXQiIHsgdGFyZ2V0IHsgYXJtX2xpdHRsZV9lbmRpYW4gJiYgYXJt X25lb24gfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJ2c3QxIiB7IHRhcmdldCB7IGFybV9saXR0bGVfZW5kaWFuICYmIGFy bV9uZW9uIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci1ub3QgInZzdHIiICB7IHRhcmdldCB7IGFybV9saXR0bGVfZW5kaWFu ICYmIGFybV9uZW9uIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBjbGVh bnVwLXNhdmVkLXRlbXBzIH0gfSAqLworCkluZGV4OiBnY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYXJtL21lbXNldC1pbmxpbmUtNi5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0v bWVtc2V0LWlubGluZS02LmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL21lbXNldC1pbmxpbmUtNi5jCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDY4IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisv KiB7IGRnLXNraXAtaWYgIkRvbid0IGlubGluZSBtZW1zZXQgdXNpbmcgbmVv biBpbnN0cnVjdGlvbnMgb24gY29ydGV4LWE5IiB7ICotKi0qIH0geyAiLW1j cHU9Y29ydGV4LWE5IiB9IHsgIiIgfSB9ICovCisvKiB7IGRnLXNraXAtaWYg IkRvbid0IGlubGluZSBtZW1zZXQgdXNpbmcgbmVvbiBpbnN0cnVjdGlvbnMg b24gY29ydGV4LWE5IiB7ICotKi0qIH0geyAiLW10dW5lPWNvcnRleC1hOSIg fSB7ICIiIH0gfSAqLworLyogeyBkZy1vcHRpb25zICItc2F2ZS10ZW1wcyAt TzIgLWZuby1pbmxpbmUiIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgImFy bV9uZW9uIiB9ICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKworI2RlZmluZSBMRU4gKDEwMCkKK2ludCBhW0xFTl07 CitpbnQgYltMRU5dOworaW50IGNbTEVOXTsKK3ZvaWQKK2ZvbzEgKHZvaWQp Cit7CisgICAgbWVtc2V0IChhLCAtMSwgMjApOworICAgIHJldHVybjsKK30K Kwordm9pZAorZm9vMiAodm9pZCkKK3sKKyAgbWVtc2V0IChiLCAxLCAyNCk7 CisgIHJldHVybjsKK30KKwordm9pZAorZm9vMyAodm9pZCkKK3sKKyAgbWVt c2V0IChjLCAtMSwgMzIpOworICByZXR1cm47Cit9CisKK3ZvaWQKK2NoZWNr IChzaWduZWQgY2hhciAqYXJyLCBpbnQgaWR4LCBpbnQgbGVuLCBpbnQgdikK K3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykKKyAg ICBpZiAoYXJyW2ldICE9IHYpCisgICAgICBhYm9ydCAoKTsKKworICBmb3Ig KGkgPSBpZHg7IGkgPCBsZW47IGkrKykKKyAgICBpZiAoYXJyW2ldICE9IDAp CisgICAgICBhYm9ydCAoKTsKK30KKworaW50CittYWluKHZvaWQpCit7Cisg IGZvbzEgKCk7CisgIGNoZWNrICgoc2lnbmVkIGNoYXIgKilhLCAyMCwgc2l6 ZW9mIChhKSwgLTEpOworCisgIGZvbzIgKCk7CisgIGNoZWNrICgoc2lnbmVk IGNoYXIgKiliLCAyNCwgc2l6ZW9mIChiKSwgMSk7CisKKyAgZm9vMyAoKTsK KyAgY2hlY2sgKChzaWduZWQgY2hhciAqKWMsIDMyLCBzaXplb2YgKGMpLCAt MSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3QgImJsP1xbIFx0XF0rbWVtc2V0IiB7IHRhcmdldCB7 IGFybV9saXR0bGVfZW5kaWFuICYmIGFybV9uZW9uIH0gfSB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnN0MSIgMyB7 IHRhcmdldCB7IGFybV9saXR0bGVfZW5kaWFuICYmIGFybV9uZW9uIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi dnN0ciIgNCB7IHRhcmdldCB7IGFybV9saXR0bGVfZW5kaWFuICYmIGFybV9u ZW9uIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXNhdmVk LXRlbXBzIH0gfSAqLworCisKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hcm0vbWVtc2V0LWlubGluZS03LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tZW1zZXQt aW5saW5lLTcuYwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hcm0vbWVtc2V0LWlubGluZS03LmMJKHJldmlzaW9uIDApCkBA IC0wLDAgKzEsMTcxIEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiIgfSAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTEVOICgxMDApCitzaG9y dCBhW0xFTl07CitpbnQgYltMRU5dOworCit2b2lkCitpbml0IChzaWduZWQg Y2hhciAqYXJyLCBpbnQgbGVuKQoreworICBpbnQgaTsKKyAgZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQorICAgIGFycltpXSA9IDA7Cit9CisKK3ZvaWQK K2NoZWNrIChzaWduZWQgY2hhciAqYXJyLCBpbnQgaWR4LCBpbnQgbGVuLCBp bnQgdikKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBpZHg7IGkr KykKKyAgICBpZiAoYXJyW2ldICE9IHYpCisgICAgICBhYm9ydCAoKTsKKwor ICBmb3IgKGkgPSBpZHg7IGkgPCBsZW47IGkrKykKKyAgICBpZiAoYXJyW2ld ICE9IDApCisgICAgICBhYm9ydCAoKTsKK30KKworI2RlZmluZSBURVNUKGEs bCx2KQkJCVwKKwlpbml0ICgoc2lnbmVkIGNoYXIqKShhKSwgc2l6ZW9mIChh KSk7CQlcCisJbWVtc2V0ICgoYSksICh2KSwgKGwpKTsJCQkJXAorCWNoZWNr ICgoc2lnbmVkIGNoYXIgKikoYSksIChsKSwgc2l6ZW9mIChhKSwgKHYpKTsK K2ludAorbWFpbih2b2lkKQoreworICBURVNUIChhLCAxLCAtMSk7CisgIFRF U1QgKGEsIDIsIC0xKTsKKyAgVEVTVCAoYSwgMywgLTEpOworICBURVNUIChh LCA0LCAtMSk7CisgIFRFU1QgKGEsIDUsIC0xKTsKKyAgVEVTVCAoYSwgNiwg LTEpOworICBURVNUIChhLCA3LCAtMSk7CisgIFRFU1QgKGEsIDgsIC0xKTsK KyAgVEVTVCAoYSwgOSwgMSk7CisgIFRFU1QgKGEsIDEwLCAtMSk7CisgIFRF U1QgKGEsIDExLCAxKTsKKyAgVEVTVCAoYSwgMTIsIC0xKTsKKyAgVEVTVCAo YSwgMTMsIDEpOworICBURVNUIChhLCAxNCwgLTEpOworICBURVNUIChhLCAx NSwgMSk7CisgIFRFU1QgKGEsIDE2LCAtMSk7CisgIFRFU1QgKGEsIDE3LCAx KTsKKyAgVEVTVCAoYSwgMTgsIC0xKTsKKyAgVEVTVCAoYSwgMTksIDEpOwor ICBURVNUIChhLCAyMCwgLTEpOworICBURVNUIChhLCAyMSwgMSk7CisgIFRF U1QgKGEsIDIyLCAtMSk7CisgIFRFU1QgKGEsIDIzLCAxKTsKKyAgVEVTVCAo YSwgMjQsIC0xKTsKKyAgVEVTVCAoYSwgMjUsIDEpOworICBURVNUIChhLCAy NiwgLTEpOworICBURVNUIChhLCAyNywgMSk7CisgIFRFU1QgKGEsIDI4LCAt MSk7CisgIFRFU1QgKGEsIDI5LCAxKTsKKyAgVEVTVCAoYSwgMzAsIC0xKTsK KyAgVEVTVCAoYSwgMzEsIDEpOworICBURVNUIChhLCAzMiwgLTEpOworICBU RVNUIChhLCAzMywgMSk7CisgIFRFU1QgKGEsIDM0LCAtMSk7CisgIFRFU1Qg KGEsIDM1LCAxKTsKKyAgVEVTVCAoYSwgMzYsIC0xKTsKKyAgVEVTVCAoYSwg MzcsIDEpOworICBURVNUIChhLCAzOCwgLTEpOworICBURVNUIChhLCAzOSwg MSk7CisgIFRFU1QgKGEsIDQwLCAtMSk7CisgIFRFU1QgKGEsIDQxLCAxKTsK KyAgVEVTVCAoYSwgNDIsIC0xKTsKKyAgVEVTVCAoYSwgNDMsIDEpOworICBU RVNUIChhLCA0NCwgLTEpOworICBURVNUIChhLCA0NSwgMSk7CisgIFRFU1Qg KGEsIDQ2LCAtMSk7CisgIFRFU1QgKGEsIDQ3LCAxKTsKKyAgVEVTVCAoYSwg NDgsIC0xKTsKKyAgVEVTVCAoYSwgNDksIDEpOworICBURVNUIChhLCA1MCwg LTEpOworICBURVNUIChhLCA1MSwgMSk7CisgIFRFU1QgKGEsIDUyLCAtMSk7 CisgIFRFU1QgKGEsIDUzLCAxKTsKKyAgVEVTVCAoYSwgNTQsIC0xKTsKKyAg VEVTVCAoYSwgNTUsIDEpOworICBURVNUIChhLCA1NiwgLTEpOworICBURVNU IChhLCA1NywgMSk7CisgIFRFU1QgKGEsIDU4LCAtMSk7CisgIFRFU1QgKGEs IDU5LCAxKTsKKyAgVEVTVCAoYSwgNjAsIC0xKTsKKyAgVEVTVCAoYSwgNjEs IDEpOworICBURVNUIChhLCA2MiwgLTEpOworICBURVNUIChhLCA2MywgMSk7 CisgIFRFU1QgKGEsIDY0LCAtMSk7CisKKyAgVEVTVCAoYiwgMSwgLTEpOwor ICBURVNUIChiLCAyLCAtMSk7CisgIFRFU1QgKGIsIDMsIC0xKTsKKyAgVEVT VCAoYiwgNCwgLTEpOworICBURVNUIChiLCA1LCAtMSk7CisgIFRFU1QgKGIs IDYsIC0xKTsKKyAgVEVTVCAoYiwgNywgLTEpOworICBURVNUIChiLCA4LCAt MSk7CisgIFRFU1QgKGIsIDksIDEpOworICBURVNUIChiLCAxMCwgLTEpOwor ICBURVNUIChiLCAxMSwgMSk7CisgIFRFU1QgKGIsIDEyLCAtMSk7CisgIFRF U1QgKGIsIDEzLCAxKTsKKyAgVEVTVCAoYiwgMTQsIC0xKTsKKyAgVEVTVCAo YiwgMTUsIDEpOworICBURVNUIChiLCAxNiwgLTEpOworICBURVNUIChiLCAx NywgMSk7CisgIFRFU1QgKGIsIDE4LCAtMSk7CisgIFRFU1QgKGIsIDE5LCAx KTsKKyAgVEVTVCAoYiwgMjAsIC0xKTsKKyAgVEVTVCAoYiwgMjEsIDEpOwor ICBURVNUIChiLCAyMiwgLTEpOworICBURVNUIChiLCAyMywgMSk7CisgIFRF U1QgKGIsIDI0LCAtMSk7CisgIFRFU1QgKGIsIDI1LCAxKTsKKyAgVEVTVCAo YiwgMjYsIC0xKTsKKyAgVEVTVCAoYiwgMjcsIDEpOworICBURVNUIChiLCAy OCwgLTEpOworICBURVNUIChiLCAyOSwgMSk7CisgIFRFU1QgKGIsIDMwLCAt MSk7CisgIFRFU1QgKGIsIDMxLCAxKTsKKyAgVEVTVCAoYiwgMzIsIC0xKTsK KyAgVEVTVCAoYiwgMzMsIDEpOworICBURVNUIChiLCAzNCwgLTEpOworICBU RVNUIChiLCAzNSwgMSk7CisgIFRFU1QgKGIsIDM2LCAtMSk7CisgIFRFU1Qg KGIsIDM3LCAxKTsKKyAgVEVTVCAoYiwgMzgsIC0xKTsKKyAgVEVTVCAoYiwg MzksIDEpOworICBURVNUIChiLCA0MCwgLTEpOworICBURVNUIChiLCA0MSwg MSk7CisgIFRFU1QgKGIsIDQyLCAtMSk7CisgIFRFU1QgKGIsIDQzLCAxKTsK KyAgVEVTVCAoYiwgNDQsIC0xKTsKKyAgVEVTVCAoYiwgNDUsIDEpOworICBU RVNUIChiLCA0NiwgLTEpOworICBURVNUIChiLCA0NywgMSk7CisgIFRFU1Qg KGIsIDQ4LCAtMSk7CisgIFRFU1QgKGIsIDQ5LCAxKTsKKyAgVEVTVCAoYiwg NTAsIC0xKTsKKyAgVEVTVCAoYiwgNTEsIDEpOworICBURVNUIChiLCA1Miwg LTEpOworICBURVNUIChiLCA1MywgMSk7CisgIFRFU1QgKGIsIDU0LCAtMSk7 CisgIFRFU1QgKGIsIDU1LCAxKTsKKyAgVEVTVCAoYiwgNTYsIC0xKTsKKyAg VEVTVCAoYiwgNTcsIDEpOworICBURVNUIChiLCA1OCwgLTEpOworICBURVNU IChiLCA1OSwgMSk7CisgIFRFU1QgKGIsIDYwLCAtMSk7CisgIFRFU1QgKGIs IDYxLCAxKTsKKyAgVEVTVCAoYiwgNjIsIC0xKTsKKyAgVEVTVCAoYiwgNjMs IDEpOworICBURVNUIChiLCA2NCwgLTEpOworCisgIHJldHVybiAwOworfQor CkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL21lbXNldC1p bmxpbmUtOC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hcm0vbWVtc2V0LWlubGluZS04LmMJKHJldmlz aW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL21lbXNl dC1pbmxpbmUtOC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisv KiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXNraXAtaWYgIkRvbid0IGlu bGluZSBtZW1zZXQgdXNpbmcgbmVvbiBpbnN0cnVjdGlvbnMgb24gY29ydGV4 LWE5IiB7ICotKi0qIH0geyAiLW1jcHU9Y29ydGV4LWE5IiB9IHsgIiIgfSB9 ICovCisvKiB7IGRnLXNraXAtaWYgIkRvbid0IGlubGluZSBtZW1zZXQgdXNp bmcgbmVvbiBpbnN0cnVjdGlvbnMgb24gY29ydGV4LWE5IiB7ICotKi0qIH0g eyAiLW10dW5lPWNvcnRleC1hOSIgfSB7ICIiIH0gfSAqLworLyogeyBkZy1v cHRpb25zICItc2F2ZS10ZW1wcyAtTzIgLWZuby1pbmxpbmUiICB9ICovCisv KiB7IGRnLWFkZC1vcHRpb25zICJhcm1fbmVvbiIgfSAqLworCisjaW5jbHVk ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUg TEVOICgxMDApCitzaG9ydCBhW0xFTl07Cit2b2lkCitmb28gKHZvaWQpCit7 CisgICAgbWVtc2V0IChhLCAtMSwgMTQpOworICAgIHJldHVybjsKK30KKwor dm9pZAorY2hlY2sgKHNpZ25lZCBjaGFyICphcnIsIGludCBpZHgsIGludCBs ZW4sIGludCB2KQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IGlk eDsgaSsrKQorICAgIGlmIChhcnJbaV0gIT0gdikKKyAgICAgIGFib3J0ICgp OworCisgIGZvciAoaSA9IGlkeDsgaSA8IGxlbjsgaSsrKQorICAgIGlmIChh cnJbaV0gIT0gMCkKKyAgICAgIGFib3J0ICgpOworfQorCitpbnQKK21haW4o dm9pZCkKK3sKKyAgZm9vICgpOworICBjaGVjayAoKHNpZ25lZCBjaGFyICop YSwgMTQsIHNpemVvZiAoYSksIC0xKTsKKworICByZXR1cm4gMDsKK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiYmw/XFsgXHRc XSptZW1zZXQiIHsgdGFyZ2V0IHsgISBhcm1fdGh1bWIxX29rIH0gfSB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidnN0MSIgeyB0 YXJnZXQgeyBhcm1fbGl0dGxlX2VuZGlhbiAmJiBhcm1fbmVvbiB9IH0gfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2c3Ry IiB7IHRhcmdldCB7IGFybV9saXR0bGVfZW5kaWFuICYmIGFybV9uZW9uIH0g fSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXNhdmVkLXRlbXBz IH0gfSAqLwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9t ZW1zZXQtaW5saW5lLTEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL21lbXNldC1pbmxpbmUtMS5j CShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fy bS9tZW1zZXQtaW5saW5lLTEuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz OSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICIt c2F2ZS10ZW1wcyAtTzIgLWZuby1pbmxpbmUiICB9ICovCisKKyNpbmNsdWRl IDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBM RU4gKDEwMCkKK3Nob3J0IGFbTEVOXTsKK3ZvaWQKK2ZvbyAodm9pZCkKK3sK KyAgICBtZW1zZXQgKGEsIC0xLCAxNCk7CisgICAgcmV0dXJuOworfQorCit2 b2lkCitjaGVjayAoc2lnbmVkIGNoYXIgKmFyciwgaW50IGlkeCwgaW50IGxl biwgaW50IHYpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgaWR4 OyBpKyspCisgICAgaWYgKGFycltpXSAhPSB2KQorICAgICAgYWJvcnQgKCk7 CisKKyAgZm9yIChpID0gaWR4OyBpIDwgbGVuOyBpKyspCisgICAgaWYgKGFy cltpXSAhPSAwKQorICAgICAgYWJvcnQgKCk7Cit9CisKK2ludAorbWFpbih2 b2lkKQoreworICBmb28gKCk7CisgIGNoZWNrICgoc2lnbmVkIGNoYXIgKilh LCAxNCwgc2l6ZW9mIChhKSwgLTEpOworCisgIHJldHVybiAwOworfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJibD9cWyBcdFxd Km1lbXNldCIgeyB0YXJnZXQgeyAhIGFybV90aHVtYjFfb2sgfSB9IH0gfSAq LworLyogeyBkZy1maW5hbCB7IGNsZWFudXAtc2F2ZWQtdGVtcHMgfSB9ICov CkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL21lbXNldC1p bmxpbmUtOS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hcm0vbWVtc2V0LWlubGluZS05LmMJKHJldmlz aW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL21lbXNl dC1pbmxpbmUtOS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisv KiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXNraXAtaWYgIkRvbid0IGlu bGluZSBtZW1zZXQgdXNpbmcgbmVvbiBpbnN0cnVjdGlvbnMgb24gY29ydGV4 LWE5IiB7ICotKi0qIH0geyAiLW1jcHU9Y29ydGV4LWE5IiB9IHsgIiIgfSB9 ICovCisvKiB7IGRnLXNraXAtaWYgIkRvbid0IGlubGluZSBtZW1zZXQgdXNp bmcgbmVvbiBpbnN0cnVjdGlvbnMgb24gY29ydGV4LWE5IiB7ICotKi0qIH0g eyAiLW10dW5lPWNvcnRleC1hOSIgfSB7ICIiIH0gfSAqLworLyogeyBkZy1v cHRpb25zICItc2F2ZS10ZW1wcyAtT3MgLWZuby1pbmxpbmUiIH0gKi8KKy8q IHsgZGctYWRkLW9wdGlvbnMgImFybV9uZW9uIiB9ICovCisKKyNpbmNsdWRl IDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBM RU4gKDEwMCkKK3Nob3J0IGFbTEVOXTsKK3ZvaWQKK2ZvbyAodm9pZCkKK3sK KyAgbWVtc2V0IChhLCAtMSwgMTQpOworICByZXR1cm47Cit9CisKK3ZvaWQK K2NoZWNrIChzaWduZWQgY2hhciAqYXJyLCBpbnQgaWR4LCBpbnQgbGVuLCBp bnQgdikKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBpZHg7IGkr KykKKyAgICBpZiAoYXJyW2ldICE9IHYpCisgICAgICBhYm9ydCAoKTsKKwor ICBmb3IgKGkgPSBpZHg7IGkgPCBsZW47IGkrKykKKyAgICBpZiAoYXJyW2ld ICE9IDApCisgICAgICBhYm9ydCAoKTsKK30KKworaW50CittYWluKHZvaWQp Cit7CisgIGZvbyAoKTsKKyAgY2hlY2sgKChzaWduZWQgY2hhciAqKWEsIDE0 LCBzaXplb2YgKGEpLCAtMSk7CisKKyAgcmV0dXJuIDA7Cit9CisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJibD9cWyBcdFxdKm1lbXNl dCIgeyB0YXJnZXQgeyBhcm1fbGl0dGxlX2VuZGlhbiAmJiBhcm1fbmVvbiB9 IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZz dDEiIHsgdGFyZ2V0IHsgYXJtX2xpdHRsZV9lbmRpYW4gJiYgYXJtX25lb24g fSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IGNsZWFudXAtc2F2ZWQtdGVt cHMgfSB9ICovCkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJt L21lbXNldC1pbmxpbmUtMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbWVtc2V0LWlubGluZS0y LmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YXJtL21lbXNldC1pbmxpbmUtMi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDM4IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1zYXZlLXRlbXBzIC1PcyAtZm5vLWlubGluZSIgfSAqLworCisjaW5jbHVk ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUg TEVOICgxMDApCitzaG9ydCBhW0xFTl07Cit2b2lkCitmb28gKHZvaWQpCit7 CisgIG1lbXNldCAoYSwgLTEsIDE0KTsKKyAgcmV0dXJuOworfQorCit2b2lk CitjaGVjayAoc2lnbmVkIGNoYXIgKmFyciwgaW50IGlkeCwgaW50IGxlbiwg aW50IHYpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgaWR4OyBp KyspCisgICAgaWYgKGFycltpXSAhPSB2KQorICAgICAgYWJvcnQgKCk7CisK KyAgZm9yIChpID0gaWR4OyBpIDwgbGVuOyBpKyspCisgICAgaWYgKGFycltp XSAhPSAwKQorICAgICAgYWJvcnQgKCk7Cit9CisKK2ludAorbWFpbih2b2lk KQoreworICBmb28gKCk7CisgIGNoZWNrICgoc2lnbmVkIGNoYXIgKilhLCAx NCwgc2l6ZW9mIChhKSwgLTEpOworCisgIHJldHVybiAwOworfQorLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJibD9cWyBcdFxdKm1lbXNldCIg eyB0YXJnZXQgeyAhIGFybV9uZW9uIH0gfSB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBjbGVhbnVwLXNhdmVkLXRlbXBzIH0gfSAqLwpJbmRleDogZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tZW1zZXQtaW5saW5lLTMuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL21lbXNldC1pbmxpbmUtMy5jCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tZW1zZXQtaW5saW5lLTMuYwko cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyogeyBkZy1kbyBydW4g fSAqLworLyogeyBkZy1vcHRpb25zICItc2F2ZS10ZW1wcyAtTzIgLWZuby1p bmxpbmUiIH0gKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg PHN0ZGxpYi5oPgorCisjZGVmaW5lIExFTiAoMTAwKQorc2hvcnQgYVtMRU5d Owordm9pZAorZm9vICh2b2lkKQoreworICAgIG1lbXNldCAoYSwgLTEsIDcp OworICAgIHJldHVybjsKK30KKwordm9pZAorY2hlY2sgKHNpZ25lZCBjaGFy ICphcnIsIGludCBpZHgsIGludCBsZW4sIGludCB2KQoreworICBpbnQgaTsK KyAgZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQorICAgIGlmIChhcnJbaV0g IT0gdikKKyAgICAgIGFib3J0ICgpOworCisgIGZvciAoaSA9IGlkeDsgaSA8 IGxlbjsgaSsrKQorICAgIGlmIChhcnJbaV0gIT0gMCkKKyAgICAgIGFib3J0 ICgpOworfQorCitpbnQKK21haW4odm9pZCkKK3sKKyAgZm9vICgpOworICBj aGVjayAoKHNpZ25lZCBjaGFyICopYSwgNywgc2l6ZW9mIChhKSwgLTEpOwor CisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItbm90ICJibD9cWyBcdFxdKm1lbXNldCIgeyB0YXJnZXQgeyAhIGFy bV90aHVtYjFfb2sgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLW5vdCAic3RyaCIgeyB0YXJnZXQgeyAhIGFybV90aHVtYjEg fSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5v dCAic3RyYiIgeyB0YXJnZXQgeyAhIGFybV90aHVtYjEgfSB9IH0gfSAqLwpJ bmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tZW1zZXQtaW5s aW5lLTQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL21lbXNldC1pbmxpbmUtNC5jCShyZXZpc2lv biAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tZW1zZXQt aW5saW5lLTQuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyog eyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1za2lwLWlmICJEb24ndCBpbmxp bmUgbWVtc2V0IHVzaW5nIG5lb24gaW5zdHJ1Y3Rpb25zIG9uIGNvcnRleC1h OSIgeyAqLSotKiB9IHsgIi1tY3B1PWNvcnRleC1hOSIgfSB7ICIiIH0gfSAq LworLyogeyBkZy1za2lwLWlmICJEb24ndCBpbmxpbmUgbWVtc2V0IHVzaW5n IG5lb24gaW5zdHJ1Y3Rpb25zIG9uIGNvcnRleC1hOSIgeyAqLSotKiB9IHsg Ii1tdHVuZT1jb3J0ZXgtYTkiIH0geyAiIiB9IH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLXNhdmUtdGVtcHMgLU8yIC1mbm8taW5saW5lIiB9ICovCisvKiB7 IGRnLWFkZC1vcHRpb25zICJhcm1fbmVvbiIgfSAqLworCisjaW5jbHVkZSA8 c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTEVO ICgxMDApCitpbnQgYVtMRU5dOworaW50IGJbTEVOXTsKK2ludCBjW0xFTl07 Cit2b2lkCitmb28xICh2b2lkKQoreworICAgIG1lbXNldCAoYSwgLTEsIDgp OworICAgIHJldHVybjsKK30KKwordm9pZAorZm9vMiAodm9pZCkKK3sKKyAg bWVtc2V0IChiLCAxLCAxMik7CisgIHJldHVybjsKK30KKwordm9pZAorZm9v MyAodm9pZCkKK3sKKyAgbWVtc2V0IChjLCAxLCAxMyk7CisgIHJldHVybjsK K30KKwordm9pZAorY2hlY2sgKHNpZ25lZCBjaGFyICphcnIsIGludCBpZHgs IGludCBsZW4sIGludCB2KQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsg aSA8IGlkeDsgaSsrKQorICAgIGlmIChhcnJbaV0gIT0gdikKKyAgICAgIGFi b3J0ICgpOworCisgIGZvciAoaSA9IGlkeDsgaSA8IGxlbjsgaSsrKQorICAg IGlmIChhcnJbaV0gIT0gMCkKKyAgICAgIGFib3J0ICgpOworfQorCitpbnQK K21haW4odm9pZCkKK3sKKyAgaW50IGk7CisKKyAgZm9vMSAoKTsKKyAgY2hl Y2sgKChzaWduZWQgY2hhciAqKWEsIDgsIHNpemVvZiAoYSksIC0xKTsKKwor ICBmb28yICgpOworICBjaGVjayAoKHNpZ25lZCBjaGFyICopYiwgMTIsIHNp emVvZiAoYiksIDEpOworCisgIGZvbzMgKCk7CisgIGNoZWNrICgoc2lnbmVk IGNoYXIgKiljLCAxMywgc2l6ZW9mIChjKSwgMSk7CisKKyAgcmV0dXJuIDA7 Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImJs P1xbIFx0XF0rbWVtc2V0IiB7IHRhcmdldCB7ICEgYXJtX3RodW1iMV9vayB9 IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInZzdDFcLjgiIDEgeyB0YXJnZXQgeyBhcm1fbGl0dGxlX2VuZGlhbiAm JiBhcm1fbmVvbiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgInZzdHIiIHsgdGFyZ2V0IHsgYXJtX2xpdHRsZV9lbmRpYW4g JiYgYXJtX25lb24gfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IGNsZWFu dXAtc2F2ZWQtdGVtcHMgfSB9ICovCkluZGV4OiBnY2MvY29uZmlnL2FybS9h cm0uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY29uZmlnL2Fy bS9hcm0uYwkocmV2aXNpb24gMjEyNzUwKQorKysgZ2NjL2NvbmZpZy9hcm0v YXJtLmMJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsNyArMTY5OCw5IEBAIGNv bnN0IHN0cnVjdCB0dW5lX3BhcmFtcyBhcm1fc2xvd211bF90dW5lID0KICAg e3RydWUsIHRydWV9LAkJCQkJLyogUHJlZmVyIG5vbiBzaG9ydCBjaXJjdWl0 LiAgKi8KICAgJmFybV9kZWZhdWx0X3ZlY19jb3N0LCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFZlY3Rvcml6ZXIgY29zdHMuICAqLwogICBmYWxzZSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJl ZmVyIE5lb24gZm9yIDY0LWJpdHMgYml0b3BzLiAgKi8KLSAgZmFsc2UsIGZh bHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWZl ciAzMi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsIGZhbHNlLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWZlciAzMi1iaXQg ZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsCQkJCQkvKiBQcmVmZXIgTmVvbiBm b3Igc3RyaW5nb3BzLiAgKi8KKyAgOAkJCQkJCS8qIE1heGltdW0gaW5zbnMg dG8gaW5saW5lIG1lbXNldC4gICovCiB9OwogCiBjb25zdCBzdHJ1Y3QgdHVu ZV9wYXJhbXMgYXJtX2Zhc3RtdWxfdHVuZSA9CkBAIC0xNzE1LDcgKzE3MTcs OSBAQCBjb25zdCBzdHJ1Y3QgdHVuZV9wYXJhbXMgYXJtX2Zhc3RtdWxfdHVu ZSA9CiAgIHt0cnVlLCB0cnVlfSwJCQkJCS8qIFByZWZlciBub24gc2hvcnQg Y2lyY3VpdC4gICovCiAgICZhcm1fZGVmYXVsdF92ZWNfY29zdCwgICAgICAg ICAgICAgICAgICAgICAgICAvKiBWZWN0b3JpemVyIGNvc3RzLiAgKi8KICAg ZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFByZWZlciBOZW9uIGZvciA2NC1iaXRzIGJpdG9wcy4gICovCi0gIGZh bHNlLCBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmVmZXIgMzItYml0IGVuY29kaW5ncy4gICovCisgIGZhbHNlLCBmYWxz ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVmZXIg MzItYml0IGVuY29kaW5ncy4gICovCisgIGZhbHNlLAkJCQkJLyogUHJlZmVy IE5lb24gZm9yIHN0cmluZ29wcy4gICovCisgIDgJCQkJCQkvKiBNYXhpbXVt IGluc25zIHRvIGlubGluZSBtZW1zZXQuICAqLwogfTsKIAogLyogU3Ryb25n QVJNIGhhcyBlYXJseSBleGVjdXRpb24gb2YgYnJhbmNoZXMsIHNvIGEgc2Vx dWVuY2UgdGhhdCBpcyB3b3J0aApAQCAtMTczNSw3ICsxNzM5LDkgQEAgY29u c3Qgc3RydWN0IHR1bmVfcGFyYW1zIGFybV9zdHJvbmdhcm1fdHVuZSA9CiAg IHt0cnVlLCB0cnVlfSwJCQkJCS8qIFByZWZlciBub24gc2hvcnQgY2lyY3Vp dC4gICovCiAgICZhcm1fZGVmYXVsdF92ZWNfY29zdCwgICAgICAgICAgICAg ICAgICAgICAgICAvKiBWZWN0b3JpemVyIGNvc3RzLiAgKi8KICAgZmFsc2Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBy ZWZlciBOZW9uIGZvciA2NC1iaXRzIGJpdG9wcy4gICovCi0gIGZhbHNlLCBm YWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVm ZXIgMzItYml0IGVuY29kaW5ncy4gICovCisgIGZhbHNlLCBmYWxzZSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVmZXIgMzItYml0 IGVuY29kaW5ncy4gICovCisgIGZhbHNlLAkJCQkJLyogUHJlZmVyIE5lb24g Zm9yIHN0cmluZ29wcy4gICovCisgIDgJCQkJCQkvKiBNYXhpbXVtIGluc25z IHRvIGlubGluZSBtZW1zZXQuICAqLwogfTsKIAogY29uc3Qgc3RydWN0IHR1 bmVfcGFyYW1zIGFybV94c2NhbGVfdHVuZSA9CkBAIC0xNzUyLDcgKzE3NTgs OSBAQCBjb25zdCBzdHJ1Y3QgdHVuZV9wYXJhbXMgYXJtX3hzY2FsZV90dW5l ID0KICAge3RydWUsIHRydWV9LAkJCQkJLyogUHJlZmVyIG5vbiBzaG9ydCBj aXJjdWl0LiAgKi8KICAgJmFybV9kZWZhdWx0X3ZlY19jb3N0LCAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFZlY3Rvcml6ZXIgY29zdHMuICAqLwogICBm YWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUHJlZmVyIE5lb24gZm9yIDY0LWJpdHMgYml0b3BzLiAgKi8KLSAgZmFs c2UsIGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFByZWZlciAzMi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsIGZhbHNl LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWZlciAz Mi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsCQkJCQkvKiBQcmVmZXIg TmVvbiBmb3Igc3RyaW5nb3BzLiAgKi8KKyAgOAkJCQkJCS8qIE1heGltdW0g aW5zbnMgdG8gaW5saW5lIG1lbXNldC4gICovCiB9OwogCiBjb25zdCBzdHJ1 Y3QgdHVuZV9wYXJhbXMgYXJtXzllX3R1bmUgPQpAQCAtMTc2OSw3ICsxNzc3 LDkgQEAgY29uc3Qgc3RydWN0IHR1bmVfcGFyYW1zIGFybV85ZV90dW5lID0K ICAge3RydWUsIHRydWV9LAkJCQkJLyogUHJlZmVyIG5vbiBzaG9ydCBjaXJj dWl0LiAgKi8KICAgJmFybV9kZWZhdWx0X3ZlY19jb3N0LCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFZlY3Rvcml6ZXIgY29zdHMuICAqLwogICBmYWxz ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHJlZmVyIE5lb24gZm9yIDY0LWJpdHMgYml0b3BzLiAgKi8KLSAgZmFsc2Us IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBy ZWZlciAzMi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsIGZhbHNlLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWZlciAzMi1i aXQgZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsCQkJCQkvKiBQcmVmZXIgTmVv biBmb3Igc3RyaW5nb3BzLiAgKi8KKyAgOAkJCQkJCS8qIE1heGltdW0gaW5z bnMgdG8gaW5saW5lIG1lbXNldC4gICovCiB9OwogCiBjb25zdCBzdHJ1Y3Qg dHVuZV9wYXJhbXMgYXJtX3Y2dDJfdHVuZSA9CkBAIC0xNzg2LDcgKzE3OTYs OSBAQCBjb25zdCBzdHJ1Y3QgdHVuZV9wYXJhbXMgYXJtX3Y2dDJfdHVuZSA9 CiAgIHt0cnVlLCB0cnVlfSwJCQkJCS8qIFByZWZlciBub24gc2hvcnQgY2ly Y3VpdC4gICovCiAgICZhcm1fZGVmYXVsdF92ZWNfY29zdCwgICAgICAgICAg ICAgICAgICAgICAgICAvKiBWZWN0b3JpemVyIGNvc3RzLiAgKi8KICAgZmFs c2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFByZWZlciBOZW9uIGZvciA2NC1iaXRzIGJpdG9wcy4gICovCi0gIGZhbHNl LCBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmVmZXIgMzItYml0IGVuY29kaW5ncy4gICovCisgIGZhbHNlLCBmYWxzZSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVmZXIgMzIt Yml0IGVuY29kaW5ncy4gICovCisgIGZhbHNlLAkJCQkJLyogUHJlZmVyIE5l b24gZm9yIHN0cmluZ29wcy4gICovCisgIDgJCQkJCQkvKiBNYXhpbXVtIGlu c25zIHRvIGlubGluZSBtZW1zZXQuICAqLwogfTsKIAogLyogR2VuZXJpYyBD b3J0ZXggdHVuaW5nLiAgVXNlIG1vcmUgc3BlY2lmaWMgdHVuaW5ncyBpZiBh cHByb3ByaWF0ZS4gICovCkBAIC0xODA0LDcgKzE4MTYsOSBAQCBjb25zdCBz dHJ1Y3QgdHVuZV9wYXJhbXMgYXJtX2NvcnRleF90dW5lID0KICAge3RydWUs IHRydWV9LAkJCQkJLyogUHJlZmVyIG5vbiBzaG9ydCBjaXJjdWl0LiAgKi8K ICAgJmFybV9kZWZhdWx0X3ZlY19jb3N0LCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFZlY3Rvcml6ZXIgY29zdHMuICAqLwogICBmYWxzZSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZmVyIE5l b24gZm9yIDY0LWJpdHMgYml0b3BzLiAgKi8KLSAgZmFsc2UsIGZhbHNlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWZlciAzMi1i aXQgZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsIGZhbHNlLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWZlciAzMi1iaXQgZW5jb2Rp bmdzLiAgKi8KKyAgZmFsc2UsCQkJCQkvKiBQcmVmZXIgTmVvbiBmb3Igc3Ry aW5nb3BzLiAgKi8KKyAgOAkJCQkJCS8qIE1heGltdW0gaW5zbnMgdG8gaW5s aW5lIG1lbXNldC4gICovCiB9OwogCiBjb25zdCBzdHJ1Y3QgdHVuZV9wYXJh bXMgYXJtX2NvcnRleF9hOF90dW5lID0KQEAgLTE4MjEsNyArMTgzNSw5IEBA IGNvbnN0IHN0cnVjdCB0dW5lX3BhcmFtcyBhcm1fY29ydGV4X2E4X3R1bmUg PQogICB7dHJ1ZSwgdHJ1ZX0sCQkJCQkvKiBQcmVmZXIgbm9uIHNob3J0IGNp cmN1aXQuICAqLwogICAmYXJtX2RlZmF1bHRfdmVjX2Nvc3QsICAgICAgICAg ICAgICAgICAgICAgICAgLyogVmVjdG9yaXplciBjb3N0cy4gICovCiAgIGZh bHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmVmZXIgTmVvbiBmb3IgNjQtYml0cyBiaXRvcHMuICAqLwotICBmYWxz ZSwgZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHJlZmVyIDMyLWJpdCBlbmNvZGluZ3MuICAqLworICBmYWxzZSwgZmFsc2Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZmVyIDMy LWJpdCBlbmNvZGluZ3MuICAqLworICB0cnVlLAkJCQkJCS8qIFByZWZlciBO ZW9uIGZvciBzdHJpbmdvcHMuICAqLworICA4CQkJCQkJLyogTWF4aW11bSBp bnNucyB0byBpbmxpbmUgbWVtc2V0LiAgKi8KIH07CiAKIGNvbnN0IHN0cnVj dCB0dW5lX3BhcmFtcyBhcm1fY29ydGV4X2E3X3R1bmUgPQpAQCAtMTgzOCw3 ICsxODU0LDkgQEAgY29uc3Qgc3RydWN0IHR1bmVfcGFyYW1zIGFybV9jb3J0 ZXhfYTdfdHVuZSA9CiAgIHt0cnVlLCB0cnVlfSwJCQkJCS8qIFByZWZlciBu b24gc2hvcnQgY2lyY3VpdC4gICovCiAgICZhcm1fZGVmYXVsdF92ZWNfY29z dCwJCQkvKiBWZWN0b3JpemVyIGNvc3RzLiAgKi8KICAgZmFsc2UsCQkJCQkv KiBQcmVmZXIgTmVvbiBmb3IgNjQtYml0cyBiaXRvcHMuICAqLwotICBmYWxz ZSwgZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHJlZmVyIDMyLWJpdCBlbmNvZGluZ3MuICAqLworICBmYWxzZSwgZmFsc2Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZmVyIDMy LWJpdCBlbmNvZGluZ3MuICAqLworICB0cnVlLAkJCQkJCS8qIFByZWZlciBO ZW9uIGZvciBzdHJpbmdvcHMuICAqLworICA4CQkJCQkJLyogTWF4aW11bSBp bnNucyB0byBpbmxpbmUgbWVtc2V0LiAgKi8KIH07CiAKIGNvbnN0IHN0cnVj dCB0dW5lX3BhcmFtcyBhcm1fY29ydGV4X2ExNV90dW5lID0KQEAgLTE4NTUs NyArMTg3Myw5IEBAIGNvbnN0IHN0cnVjdCB0dW5lX3BhcmFtcyBhcm1fY29y dGV4X2ExNV90dW5lID0KICAge3RydWUsIHRydWV9LAkJCQkJLyogUHJlZmVy IG5vbiBzaG9ydCBjaXJjdWl0LiAgKi8KICAgJmFybV9kZWZhdWx0X3ZlY19j b3N0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZlY3Rvcml6ZXIgY29z dHMuICAqLwogICBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUHJlZmVyIE5lb24gZm9yIDY0LWJpdHMgYml0b3Bz LiAgKi8KLSAgdHJ1ZSwgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFByZWZlciAzMi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAg dHJ1ZSwgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFByZWZlciAzMi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAgdHJ1ZSwJCQkJ CQkvKiBQcmVmZXIgTmVvbiBmb3Igc3RyaW5nb3BzLiAgKi8KKyAgOAkJCQkJ CS8qIE1heGltdW0gaW5zbnMgdG8gaW5saW5lIG1lbXNldC4gICovCiB9Owog CiBjb25zdCBzdHJ1Y3QgdHVuZV9wYXJhbXMgYXJtX2NvcnRleF9hNTNfdHVu ZSA9CkBAIC0xODcyLDcgKzE4OTIsOSBAQCBjb25zdCBzdHJ1Y3QgdHVuZV9w YXJhbXMgYXJtX2NvcnRleF9hNTNfdHVuZSA9CiAgIHt0cnVlLCB0cnVlfSwJ CQkJCS8qIFByZWZlciBub24gc2hvcnQgY2lyY3VpdC4gICovCiAgICZhcm1f ZGVmYXVsdF92ZWNfY29zdCwJCQkvKiBWZWN0b3JpemVyIGNvc3RzLiAgKi8K ICAgZmFsc2UsCQkJCQkvKiBQcmVmZXIgTmVvbiBmb3IgNjQtYml0cyBiaXRv cHMuICAqLwotICBmYWxzZSwgZmFsc2UgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUHJlZmVyIDMyLWJpdCBlbmNvZGluZ3MuICAqLwor ICBmYWxzZSwgZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUHJlZmVyIDMyLWJpdCBlbmNvZGluZ3MuICAqLworICBmYWxzZSwJ CQkJCS8qIFByZWZlciBOZW9uIGZvciBzdHJpbmdvcHMuICAqLworICA4CQkJ CQkJLyogTWF4aW11bSBpbnNucyB0byBpbmxpbmUgbWVtc2V0LiAgKi8KIH07 CiAKIGNvbnN0IHN0cnVjdCB0dW5lX3BhcmFtcyBhcm1fY29ydGV4X2E1N190 dW5lID0KQEAgLTE4ODksNyArMTkxMSw5IEBAIGNvbnN0IHN0cnVjdCB0dW5l X3BhcmFtcyBhcm1fY29ydGV4X2E1N190dW5lID0KICAge3RydWUsIHRydWV9 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZmVyIG5v biBzaG9ydCBjaXJjdWl0LiAgKi8KICAgJmFybV9kZWZhdWx0X3ZlY19jb3N0 LCAgICAgICAgICAgICAgICAgICAgICAgLyogVmVjdG9yaXplciBjb3N0cy4g ICovCiAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFByZWZlciBOZW9uIGZvciA2NC1iaXRzIGJpdG9wcy4gICov Ci0gIHRydWUsIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFByZWZlciAzMi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAgdHJ1ZSwg dHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJl ZmVyIDMyLWJpdCBlbmNvZGluZ3MuICAqLworICBmYWxzZSwJCQkJCS8qIFBy ZWZlciBOZW9uIGZvciBzdHJpbmdvcHMuICAqLworICA4CQkJCQkJLyogTWF4 aW11bSBpbnNucyB0byBpbmxpbmUgbWVtc2V0LiAgKi8KIH07CiAKIC8qIEJy YW5jaGVzIGNhbiBiZSBkdWFsLWlzc3VlZCBvbiBDb3J0ZXgtQTUsIHNvIGNv bmRpdGlvbmFsIGV4ZWN1dGlvbiBpcwpAQCAtMTkwOSw3ICsxOTMzLDkgQEAg Y29uc3Qgc3RydWN0IHR1bmVfcGFyYW1zIGFybV9jb3J0ZXhfYTVfdHVuZSA9 CiAgIHtmYWxzZSwgZmFsc2V9LAkJCQkvKiBQcmVmZXIgbm9uIHNob3J0IGNp cmN1aXQuICAqLwogICAmYXJtX2RlZmF1bHRfdmVjX2Nvc3QsICAgICAgICAg ICAgICAgICAgICAgICAgLyogVmVjdG9yaXplciBjb3N0cy4gICovCiAgIGZh bHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmVmZXIgTmVvbiBmb3IgNjQtYml0cyBiaXRvcHMuICAqLwotICBmYWxz ZSwgZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHJlZmVyIDMyLWJpdCBlbmNvZGluZ3MuICAqLworICBmYWxzZSwgZmFsc2Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZmVyIDMy LWJpdCBlbmNvZGluZ3MuICAqLworICB0cnVlLAkJCQkJCS8qIFByZWZlciBO ZW9uIGZvciBzdHJpbmdvcHMuICAqLworICA4CQkJCQkJLyogTWF4aW11bSBp bnNucyB0byBpbmxpbmUgbWVtc2V0LiAgKi8KIH07CiAKIGNvbnN0IHN0cnVj dCB0dW5lX3BhcmFtcyBhcm1fY29ydGV4X2E5X3R1bmUgPQpAQCAtMTkyNiw3 ICsxOTUyLDkgQEAgY29uc3Qgc3RydWN0IHR1bmVfcGFyYW1zIGFybV9jb3J0 ZXhfYTlfdHVuZSA9CiAgIHt0cnVlLCB0cnVlfSwJCQkJCS8qIFByZWZlciBu b24gc2hvcnQgY2lyY3VpdC4gICovCiAgICZhcm1fZGVmYXVsdF92ZWNfY29z dCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBWZWN0b3JpemVyIGNvc3Rz LiAgKi8KICAgZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFByZWZlciBOZW9uIGZvciA2NC1iaXRzIGJpdG9wcy4g ICovCi0gIGZhbHNlLCBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQcmVmZXIgMzItYml0IGVuY29kaW5ncy4gICovCisgIGZh bHNlLCBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmVmZXIgMzItYml0IGVuY29kaW5ncy4gICovCisgIGZhbHNlLAkJCQkJ LyogUHJlZmVyIE5lb24gZm9yIHN0cmluZ29wcy4gICovCisgIDgJCQkJCQkv KiBNYXhpbXVtIGluc25zIHRvIGlubGluZSBtZW1zZXQuICAqLwogfTsKIAog Y29uc3Qgc3RydWN0IHR1bmVfcGFyYW1zIGFybV9jb3J0ZXhfYTEyX3R1bmUg PQpAQCAtMTk0Myw3ICsxOTcxLDkgQEAgY29uc3Qgc3RydWN0IHR1bmVfcGFy YW1zIGFybV9jb3J0ZXhfYTEyX3R1bmUgPQogICB7dHJ1ZSwgdHJ1ZX0sCQkJ CQkvKiBQcmVmZXIgbm9uIHNob3J0IGNpcmN1aXQuICAqLwogICAmYXJtX2Rl ZmF1bHRfdmVjX2Nvc3QsICAgICAgICAgICAgICAgICAgICAgICAgLyogVmVj dG9yaXplciBjb3N0cy4gICovCiAgIGZhbHNlLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVmZXIgTmVvbiBmb3IgNjQt Yml0cyBiaXRvcHMuICAqLwotICBmYWxzZSwgZmFsc2UgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUHJlZmVyIDMyLWJpdCBlbmNvZGlu Z3MuICAqLworICBmYWxzZSwgZmFsc2UsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUHJlZmVyIDMyLWJpdCBlbmNvZGluZ3MuICAqLwor ICB0cnVlLAkJCQkJCS8qIFByZWZlciBOZW9uIGZvciBzdHJpbmdvcHMuICAq LworICA4CQkJCQkJLyogTWF4aW11bSBpbnNucyB0byBpbmxpbmUgbWVtc2V0 LiAgKi8KIH07CiAKIC8qIGFybXY3bSB0dW5pbmcuICBPbiBDb3J0ZXgtTTQg Y29yZXMgZm9yIGV4YW1wbGUsIE1PVlcvTU9WVCB0YWtlIGEgc2luZ2xlCkBA IC0xOTY3LDcgKzE5OTcsOSBAQCBjb25zdCBzdHJ1Y3QgdHVuZV9wYXJhbXMg YXJtX3Y3bV90dW5lID0KICAge2ZhbHNlLCBmYWxzZX0sCQkJCS8qIFByZWZl ciBub24gc2hvcnQgY2lyY3VpdC4gICovCiAgICZhcm1fZGVmYXVsdF92ZWNf Y29zdCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBWZWN0b3JpemVyIGNv c3RzLiAgKi8KICAgZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFByZWZlciBOZW9uIGZvciA2NC1iaXRzIGJpdG9w cy4gICovCi0gIGZhbHNlLCBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQcmVmZXIgMzItYml0IGVuY29kaW5ncy4gICovCisg IGZhbHNlLCBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQcmVmZXIgMzItYml0IGVuY29kaW5ncy4gICovCisgIGZhbHNlLAkJ CQkJLyogUHJlZmVyIE5lb24gZm9yIHN0cmluZ29wcy4gICovCisgIDgJCQkJ CQkvKiBNYXhpbXVtIGluc25zIHRvIGlubGluZSBtZW1zZXQuICAqLwogfTsK IAogLyogVGhlIGFybV92Nm1fdHVuZSBpcyBkdXBsaWNhdGVkIGZyb20gYXJt X2NvcnRleF90dW5lLCByYXRoZXIgdGhhbgpAQCAtMTk4Niw3ICsyMDE4LDkg QEAgY29uc3Qgc3RydWN0IHR1bmVfcGFyYW1zIGFybV92Nm1fdHVuZSA9CiAg IHtmYWxzZSwgZmFsc2V9LAkJCQkvKiBQcmVmZXIgbm9uIHNob3J0IGNpcmN1 aXQuICAqLwogICAmYXJtX2RlZmF1bHRfdmVjX2Nvc3QsICAgICAgICAgICAg ICAgICAgICAgICAgLyogVmVjdG9yaXplciBjb3N0cy4gICovCiAgIGZhbHNl LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmVmZXIgTmVvbiBmb3IgNjQtYml0cyBiaXRvcHMuICAqLwotICBmYWxzZSwg ZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJl ZmVyIDMyLWJpdCBlbmNvZGluZ3MuICAqLworICBmYWxzZSwgZmFsc2UsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZmVyIDMyLWJp dCBlbmNvZGluZ3MuICAqLworICBmYWxzZSwJCQkJCS8qIFByZWZlciBOZW9u IGZvciBzdHJpbmdvcHMuICAqLworICA4CQkJCQkJLyogTWF4aW11bSBpbnNu cyB0byBpbmxpbmUgbWVtc2V0LiAgKi8KIH07CiAKIGNvbnN0IHN0cnVjdCB0 dW5lX3BhcmFtcyBhcm1fZmE3MjZ0ZV90dW5lID0KQEAgLTIwMDMsNyArMjAz Nyw5IEBAIGNvbnN0IHN0cnVjdCB0dW5lX3BhcmFtcyBhcm1fZmE3MjZ0ZV90 dW5lID0KICAge3RydWUsIHRydWV9LAkJCQkJLyogUHJlZmVyIG5vbiBzaG9y dCBjaXJjdWl0LiAgKi8KICAgJmFybV9kZWZhdWx0X3ZlY19jb3N0LCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFZlY3Rvcml6ZXIgY29zdHMuICAqLwog ICBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUHJlZmVyIE5lb24gZm9yIDY0LWJpdHMgYml0b3BzLiAgKi8KLSAg ZmFsc2UsIGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFByZWZlciAzMi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsIGZh bHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWZl ciAzMi1iaXQgZW5jb2RpbmdzLiAgKi8KKyAgZmFsc2UsCQkJCQkvKiBQcmVm ZXIgTmVvbiBmb3Igc3RyaW5nb3BzLiAgKi8KKyAgOAkJCQkJCS8qIE1heGlt dW0gaW5zbnMgdG8gaW5saW5lIG1lbXNldC4gICovCiB9OwogCiAKQEAgLTE2 ODk5LDYgKzE2OTM1LDE0IEBAIGFybV9jb25zdF9kb3VibGVfaW5saW5lX2Nv c3QgKHJ0eCB2YWwpCiAJCQkgICAgICBOVUxMX1JUWCwgTlVMTF9SVFgsIDAs IDApKTsKIH0KIAorLyogQ29zdCBvZiBsb2FkaW5nIGEgU0ltb2RlIGNvbnN0 YW50LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cithcm1fY29uc3RfaW5saW5l X2Nvc3QgKGVudW0gcnR4X2NvZGUgY29kZSwgcnR4IHZhbCkKK3sKKyAgcmV0 dXJuIGFybV9nZW5fY29uc3RhbnQgKGNvZGUsIFNJbW9kZSwgTlVMTF9SVFgs IElOVFZBTCAodmFsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TExfUlRYLCBOVUxMX1JUWCwgMSwgMCk7Cit9CisKIC8qIFJldHVybiB0cnVl IGlmIGl0IGlzIHdvcnRod2hpbGUgdG8gc3BsaXQgYSA2NC1iaXQgY29uc3Rh bnQgaW50byB0d28KICAgIDMyLWJpdCBvcGVyYXRpb25zLiAgVGhpcyBpcyB0 aGUgY2FzZSBpZiBvcHRpbWl6aW5nIGZvciBzaXplLCBvcgogICAgaWYgd2Ug aGF2ZSBsb2FkIGRlbGF5IHNsb3RzLCBvciBpZiBvbmUgMzItYml0IHBhcnQg Y2FuIGJlIGRvbmUgd2l0aApAQCAtMzE1MTQsNiArMzE1NjUsNTE5IEBAIGFy bV92YWxpZGl6ZV9jb21wYXJpc29uIChydHggKmNvbXBhcmlzb24sIHJ0eCAq IG9wCiAKIH0KIAorLyogTWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25z IHRvIHNldCBibG9jayBvZiBtZW1vcnkuICAqLworc3RhdGljIGludAorYXJt X2Jsb2NrX3NldF9tYXhfaW5zbnMgKHZvaWQpCit7CisgIGlmIChvcHRpbWl6 ZV9mdW5jdGlvbl9mb3Jfc2l6ZV9wIChjZnVuKSkKKyAgICByZXR1cm4gNDsK KyAgZWxzZQorICAgIHJldHVybiBjdXJyZW50X3R1bmUtPm1heF9pbnNuc19p bmxpbmVfbWVtc2V0OworfQorCisvKiBSZXR1cm4gVFJVRSBpZiBpdCdzIHBy b2ZpdGFibGUgdG8gc2V0IGJsb2NrIG9mIG1lbW9yeSBmb3IKKyAgIG5vbi12 ZWN0b3JpemVkIGNhc2UuICBWQUwgaXMgdGhlIHZhbHVlIHRvIHNldCB0aGUg bWVtb3J5CisgICB3aXRoLiAgTEVOR1RIIGlzIHRoZSBudW1iZXIgb2YgYnl0 ZXMgdG8gc2V0LiAgQUxJR04gaXMgdGhlCisgICBhbGlnbm1lbnQgb2YgdGhl IGRlc3RpbmF0aW9uIG1lbW9yeSBpbiBieXRlcy4gIFVOQUxJR05FRF9QCisg ICBpcyBUUlVFIGlmIHdlIGNhbiBvbmx5IHNldCB0aGUgbWVtb3J5IHdpdGgg aW5zdHJ1Y3Rpb25zCisgICBtZWV0aW5nIGFsaWdubWVudCByZXF1aXJlbWVu dHMuICBVU0VfU1RSRF9QIGlzIFRSVUUgaWYgd2UKKyAgIGNhbiB1c2Ugc3Ry ZCB0byBzZXQgdGhlIG1lbW9yeS4gICovCitzdGF0aWMgYm9vbAorYXJtX2Js b2NrX3NldF9ub25fdmVjdF9wcm9maXRfcCAocnR4IHZhbCwKKwkJCQkgdW5z aWduZWQgSE9TVF9XSURFX0lOVCBsZW5ndGgsCisJCQkJIHVuc2lnbmVkIEhP U1RfV0lERV9JTlQgYWxpZ24sCisJCQkJIGJvb2wgdW5hbGlnbmVkX3AsIGJv b2wgdXNlX3N0cmRfcCkKK3sKKyAgaW50IG51bSA9IDA7CisgIC8qIEZvciBs ZWZ0b3ZlcnMgaW4gYnl0ZXMgb2YgMC03LCB3ZSBjYW4gc2V0IHRoZSBtZW1v cnkgYmxvY2sgdXNpbmcKKyAgICAgc3RyYi9zdHJoL3N0ciB3aXRoIG1pbmlt dW0gaW5zdHJ1Y3Rpb24gbnVtYmVyLiAgKi8KKyAgY29uc3QgaW50IGxlZnRv dmVyWzhdID0gezAsIDEsIDEsIDIsIDEsIDIsIDIsIDN9OworCisgIGlmICh1 bmFsaWduZWRfcCkKKyAgICB7CisgICAgICBudW0gPSBhcm1fY29uc3RfaW5s aW5lX2Nvc3QgKFNFVCwgdmFsKTsKKyAgICAgIG51bSArPSBsZW5ndGggLyBh bGlnbiArIGxlbmd0aCAlIGFsaWduOworICAgIH0KKyAgZWxzZSBpZiAodXNl X3N0cmRfcCkKKyAgICB7CisgICAgICBudW0gPSBhcm1fY29uc3RfZG91Ymxl X2lubGluZV9jb3N0ICh2YWwpOworICAgICAgbnVtICs9IChsZW5ndGggPj4g MykgKyBsZWZ0b3ZlcltsZW5ndGggJiA3XTsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICBudW0gPSBhcm1fY29uc3RfaW5saW5lX2Nvc3QgKFNFVCwg dmFsKTsKKyAgICAgIG51bSArPSAobGVuZ3RoID4+IDIpICsgbGVmdG92ZXJb bGVuZ3RoICYgM107CisgICAgfQorCisgIC8qIFdlIG1heSBiZSBhYmxlIHRv IGNvbWJpbmUgbGFzdCBwYWlyIFNUUkgvU1RSQiBpbnRvIGEgc2luZ2xlIFNU UgorICAgICBieSBzaGlmdGluZyBvbmUgYnl0ZSBiYWNrLiAgKi8KKyAgaWYg KHVuYWxpZ25lZF9hY2Nlc3MgJiYgbGVuZ3RoID4gMyAmJiAobGVuZ3RoICYg MykgPT0gMykKKyAgICBudW0tLTsKKworICByZXR1cm4gKG51bSA8PSBhcm1f YmxvY2tfc2V0X21heF9pbnNucyAoKSk7Cit9CisKKy8qIFJldHVybiBUUlVF IGlmIGl0J3MgcHJvZml0YWJsZSB0byBzZXQgYmxvY2sgb2YgbWVtb3J5IGZv cgorICAgdmVjdG9yaXplZCBjYXNlLiAgTEVOR1RIIGlzIHRoZSBudW1iZXIg b2YgYnl0ZXMgdG8gc2V0LgorICAgQUxJR04gaXMgdGhlIGFsaWdubWVudCBv ZiBkZXN0aW5hdGlvbiBtZW1vcnkgaW4gYnl0ZXMuCisgICBNT0RFIGlzIHRo ZSB2ZWN0b3IgbW9kZSB1c2VkIHRvIHNldCB0aGUgbWVtb3J5LiAgKi8KK3N0 YXRpYyBib29sCithcm1fYmxvY2tfc2V0X3ZlY3RfcHJvZml0X3AgKHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgbGVuZ3RoLAorCQkJICAgICB1bnNpZ25lZCBI T1NUX1dJREVfSU5UIGFsaWduLAorCQkJICAgICBlbnVtIG1hY2hpbmVfbW9k ZSBtb2RlKQoreworICBpbnQgbnVtOworICBib29sIHVuYWxpZ25lZF9wID0g KChhbGlnbiAmIDMpICE9IDApOworICB1bnNpZ25lZCBpbnQgbmVsdCA9IEdF VF9NT0RFX05VTklUUyAobW9kZSk7CisKKyAgLyogSW5zdHJ1Y3Rpb24gbG9h ZGluZyBjb25zdGFudCB2YWx1ZS4gICovCisgIG51bSA9IDE7CisgIC8qIElu c3RydWN0aW9ucyBzdG9yaW5nIHRoZSBtZW1vcnkuICAqLworICBudW0gKz0g KGxlbmd0aCArIG5lbHQgLSAxKSAvIG5lbHQ7CisgIC8qIEluc3RydWN0aW9u cyBhZGp1c3RpbmcgdGhlIGFkZHJlc3MgZXhwcmVzc2lvbi4gIE9ubHkgbmVl ZCB0bworICAgICBhZGp1c3QgYWRkcmVzcyBleHByZXNzaW9uIGlmIGl0J3Mg NCBieXRlcyBhbGlnbmVkIGFuZCBieXRlcworICAgICBsZWZ0b3ZlciBjYW4g b25seSBiZSBzdG9yZWQgYnkgbWlzLWFsaWduZWQgc3RvcmUgaW5zdHJ1Y3Rp b24uICAqLworICBpZiAoIXVuYWxpZ25lZF9wICYmIChsZW5ndGggJiAzKSAh PSAwKQorICAgIG51bSsrOworCisgIC8qIFN0b3JlIHRoZSBmaXJzdCAxNiBi eXRlcyB1c2luZyB2c3QxOnYxNnFpIGZvciB0aGUgYWxpZ25lZCBjYXNlLiAg Ki8KKyAgaWYgKCF1bmFsaWduZWRfcCAmJiBtb2RlID09IFYxNlFJbW9kZSkK KyAgICBudW0tLTsKKworICByZXR1cm4gKG51bSA8PSBhcm1fYmxvY2tfc2V0 X21heF9pbnNucyAoKSk7Cit9CisKKy8qIFNldCBhIGJsb2NrIG9mIG1lbW9y eSB1c2luZyB2ZWN0b3JpemF0aW9uIGluc3RydWN0aW9ucyBmb3IgdGhlCisg ICB1bmFsaWduZWQgY2FzZS4gIFdlIGZpbGwgdGhlIGZpcnN0IExFTkdUSCBi eXRlcyBvZiB0aGUgbWVtb3J5CisgICBhcmVhIHN0YXJ0aW5nIGZyb20gRFNU QkFTRSB3aXRoIGJ5dGUgY29uc3RhbnQgVkFMVUUuICBBTElHTiBpcworICAg dGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiBtZW1vcnkuICBSZXR1cm4g VFJVRSBpZiBzdWNjZWVkZWQuICAqLworc3RhdGljIGJvb2wKK2FybV9ibG9j a19zZXRfdW5hbGlnbmVkX3ZlY3QgKHJ0eCBkc3RiYXNlLAorCQkJICAgICAg dW5zaWduZWQgSE9TVF9XSURFX0lOVCBsZW5ndGgsCisJCQkgICAgICB1bnNp Z25lZCBIT1NUX1dJREVfSU5UIHZhbHVlLAorCQkJICAgICAgdW5zaWduZWQg SE9TVF9XSURFX0lOVCBhbGlnbikKK3sKKyAgdW5zaWduZWQgaW50IGksIGos IG5lbHRfdjE2LCBuZWx0X3Y4LCBuZWx0X21vZGU7CisgIHJ0eCBkc3QsIG1l bTsKKyAgcnR4IHZhbF9lbHQsIHZhbF92ZWMsIHJlZzsKKyAgcnR4IHJ2YWxb TUFYX1ZFQ1RfTEVOXTsKKyAgcnR4ICgqZ2VuX2Z1bmMpIChydHgsIHJ0eCk7 CisgIGVudW0gbWFjaGluZV9tb2RlIG1vZGU7CisgIHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQgdiA9IHZhbHVlOworCisgIGdjY19hc3NlcnQgKChhbGlnbiAm IDB4MykgIT0gMCk7CisgIG5lbHRfdjggPSBHRVRfTU9ERV9OVU5JVFMgKFY4 UUltb2RlKTsKKyAgbmVsdF92MTYgPSBHRVRfTU9ERV9OVU5JVFMgKFYxNlFJ bW9kZSk7CisgIGlmIChsZW5ndGggPj0gbmVsdF92MTYpCisgICAgeworICAg ICAgbW9kZSA9IFYxNlFJbW9kZTsKKyAgICAgIGdlbl9mdW5jID0gZ2VuX21v dm1pc2FsaWdudjE2cWk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg bW9kZSA9IFY4UUltb2RlOworICAgICAgZ2VuX2Z1bmMgPSBnZW5fbW92bWlz YWxpZ252OHFpOworICAgIH0KKyAgbmVsdF9tb2RlID0gR0VUX01PREVfTlVO SVRTIChtb2RlKTsKKyAgZ2NjX2Fzc2VydCAobGVuZ3RoID49IG5lbHRfbW9k ZSk7CisgIC8qIFNraXAgaWYgaXQgaXNuJ3QgcHJvZml0YWJsZS4gICovCisg IGlmICghYXJtX2Jsb2NrX3NldF92ZWN0X3Byb2ZpdF9wIChsZW5ndGgsIGFs aWduLCBtb2RlKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgZHN0ID0gY29w eV9hZGRyX3RvX3JlZyAoWEVYUCAoZHN0YmFzZSwgMCkpOworICBtZW0gPSBh ZGp1c3RfYXV0b21vZGlmeV9hZGRyZXNzIChkc3RiYXNlLCBtb2RlLCBkc3Qs IDApOworCisgIHYgPSBzZXh0X2h3aSAodiwgQklUU19QRVJfV09SRCk7Cisg IHZhbF9lbHQgPSBHRU5fSU5UICh2KTsKKyAgZm9yIChqID0gMDsgaiA8IG5l bHRfbW9kZTsgaisrKQorICAgIHJ2YWxbal0gPSB2YWxfZWx0OworCisgIHJl ZyA9IGdlbl9yZWdfcnR4IChtb2RlKTsKKyAgdmFsX3ZlYyA9IGdlbl9ydHhf Q09OU1RfVkVDVE9SIChtb2RlLCBnZW5fcnR2ZWNfdiAobmVsdF9tb2RlLCBy dmFsKSk7CisgIC8qIEVtaXQgaW5zdHJ1Y3Rpb24gbG9hZGluZyB0aGUgY29u c3RhbnQgdmFsdWUuICAqLworICBlbWl0X21vdmVfaW5zbiAocmVnLCB2YWxf dmVjKTsKKworICAvKiBIYW5kbGUgbmVsdF9tb2RlIGJ5dGVzIGluIGEgdmVj dG9yLiAgKi8KKyAgZm9yIChpID0gMDsgKGkgKyBuZWx0X21vZGUgPD0gbGVu Z3RoKTsgaSArPSBuZWx0X21vZGUpCisgICAgeworICAgICAgZW1pdF9pbnNu ICgoKmdlbl9mdW5jKSAobWVtLCByZWcpKTsKKyAgICAgIGlmIChpICsgMiAq IG5lbHRfbW9kZSA8PSBsZW5ndGgpCisJZW1pdF9pbnNuIChnZW5fYWRkMl9p bnNuIChkc3QsIEdFTl9JTlQgKG5lbHRfbW9kZSkpKTsKKyAgICB9CisKKyAg LyogSWYgdGhlcmUgYXJlIG5vdCBsZXNzIHRoYW4gbmVsdF92OCBieXRlcyBs ZWZ0b3Zlciwgd2UgbXVzdCBiZSBpbgorICAgICBWMTZRSSBtb2RlLiAgKi8K KyAgZ2NjX2Fzc2VydCAoKGkgKyBuZWx0X3Y4KSA+IGxlbmd0aCB8fCBtb2Rl ID09IFYxNlFJbW9kZSk7CisKKyAgLyogSGFuZGxlICg4LCAxNikgYnl0ZXMg bGVmdG92ZXIuICAqLworICBpZiAoaSArIG5lbHRfdjggPCBsZW5ndGgpCisg ICAgeworICAgICAgZW1pdF9pbnNuIChnZW5fYWRkMl9pbnNuIChkc3QsIEdF Tl9JTlQgKGxlbmd0aCAtIGkpKSk7CisgICAgICAvKiBXZSBhcmUgc2hpZnRp bmcgYnl0ZXMgYmFjaywgc2V0IHRoZSBhbGlnbm1lbnQgYWNjb3JkaW5nbHku ICAqLworICAgICAgaWYgKChsZW5ndGggJiAxKSAhPSAwICYmIGFsaWduID49 IDIpCisJc2V0X21lbV9hbGlnbiAobWVtLCBCSVRTX1BFUl9VTklUKTsKKwor ICAgICAgZW1pdF9pbnNuIChnZW5fbW92bWlzYWxpZ252MTZxaSAobWVtLCBy ZWcpKTsKKyAgICB9CisgIC8qIEhhbmRsZSAoMCwgOF0gYnl0ZXMgbGVmdG92 ZXIuICAqLworICBlbHNlIGlmIChpIDwgbGVuZ3RoICYmIGkgKyBuZWx0X3Y4 ID49IGxlbmd0aCkKKyAgICB7CisgICAgICBpZiAobW9kZSA9PSBWMTZRSW1v ZGUpCisJeworCSAgcmVnID0gZ2VuX2xvd3BhcnQgKFY4UUltb2RlLCByZWcp OworCSAgbWVtID0gYWRqdXN0X2F1dG9tb2RpZnlfYWRkcmVzcyAoZHN0YmFz ZSwgVjhRSW1vZGUsIGRzdCwgMCk7CisJfQorICAgICAgZW1pdF9pbnNuIChn ZW5fYWRkMl9pbnNuIChkc3QsIEdFTl9JTlQgKChsZW5ndGggLSBpKQorCQkJ CQkgICAgICArIChuZWx0X21vZGUgLSBuZWx0X3Y4KSkpKTsKKyAgICAgIC8q IFdlIGFyZSBzaGlmdGluZyBieXRlcyBiYWNrLCBzZXQgdGhlIGFsaWdubWVu dCBhY2NvcmRpbmdseS4gICovCisgICAgICBpZiAoKGxlbmd0aCAmIDEpICE9 IDAgJiYgYWxpZ24gPj0gMikKKwlzZXRfbWVtX2FsaWduIChtZW0sIEJJVFNf UEVSX1VOSVQpOworCisgICAgICBlbWl0X2luc24gKGdlbl9tb3ZtaXNhbGln bnY4cWkgKG1lbSwgcmVnKSk7CisgICAgfQorCisgIHJldHVybiB0cnVlOwor fQorCisvKiBTZXQgYSBibG9jayBvZiBtZW1vcnkgdXNpbmcgdmVjdG9yaXph dGlvbiBpbnN0cnVjdGlvbnMgZm9yIHRoZQorICAgYWxpZ25lZCBjYXNlLiAg V2UgZmlsbCB0aGUgZmlyc3QgTEVOR1RIIGJ5dGVzIG9mIHRoZSBtZW1vcnkg YXJlYQorICAgc3RhcnRpbmcgZnJvbSBEU1RCQVNFIHdpdGggYnl0ZSBjb25z dGFudCBWQUxVRS4gIEFMSUdOIGlzIHRoZQorICAgYWxpZ25tZW50IHJlcXVp cmVtZW50IG9mIG1lbW9yeS4gIFJldHVybiBUUlVFIGlmIHN1Y2NlZWRlZC4g ICovCitzdGF0aWMgYm9vbAorYXJtX2Jsb2NrX3NldF9hbGlnbmVkX3ZlY3Qg KHJ0eCBkc3RiYXNlLAorCQkJICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg bGVuZ3RoLAorCQkJICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdmFsdWUs CisJCQkgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBhbGlnbikKK3sKKyAg dW5zaWduZWQgaW50IGksIGosIG5lbHRfdjgsIG5lbHRfdjE2LCBuZWx0X21v ZGU7CisgIHJ0eCBkc3QsIGFkZHIsIG1lbTsKKyAgcnR4IHZhbF9lbHQsIHZh bF92ZWMsIHJlZzsKKyAgcnR4IHJ2YWxbTUFYX1ZFQ1RfTEVOXTsKKyAgZW51 bSBtYWNoaW5lX21vZGUgbW9kZTsKKyAgdW5zaWduZWQgSE9TVF9XSURFX0lO VCB2ID0gdmFsdWU7CisKKyAgZ2NjX2Fzc2VydCAoKGFsaWduICYgMHgzKSA9 PSAwKTsKKyAgbmVsdF92OCA9IEdFVF9NT0RFX05VTklUUyAoVjhRSW1vZGUp OworICBuZWx0X3YxNiA9IEdFVF9NT0RFX05VTklUUyAoVjE2UUltb2RlKTsK KyAgaWYgKGxlbmd0aCA+PSBuZWx0X3YxNiAmJiB1bmFsaWduZWRfYWNjZXNz ICYmICFCWVRFU19CSUdfRU5ESUFOKQorICAgIG1vZGUgPSBWMTZRSW1vZGU7 CisgIGVsc2UKKyAgICBtb2RlID0gVjhRSW1vZGU7CisKKyAgbmVsdF9tb2Rl ID0gR0VUX01PREVfTlVOSVRTIChtb2RlKTsKKyAgZ2NjX2Fzc2VydCAobGVu Z3RoID49IG5lbHRfbW9kZSk7CisgIC8qIFNraXAgaWYgaXQgaXNuJ3QgcHJv Zml0YWJsZS4gICovCisgIGlmICghYXJtX2Jsb2NrX3NldF92ZWN0X3Byb2Zp dF9wIChsZW5ndGgsIGFsaWduLCBtb2RlKSkKKyAgICByZXR1cm4gZmFsc2U7 CisKKyAgZHN0ID0gY29weV9hZGRyX3RvX3JlZyAoWEVYUCAoZHN0YmFzZSwg MCkpOworCisgIHYgPSBzZXh0X2h3aSAodiwgQklUU19QRVJfV09SRCk7Cisg IHZhbF9lbHQgPSBHRU5fSU5UICh2KTsKKyAgZm9yIChqID0gMDsgaiA8IG5l bHRfbW9kZTsgaisrKQorICAgIHJ2YWxbal0gPSB2YWxfZWx0OworCisgIHJl ZyA9IGdlbl9yZWdfcnR4IChtb2RlKTsKKyAgdmFsX3ZlYyA9IGdlbl9ydHhf Q09OU1RfVkVDVE9SIChtb2RlLCBnZW5fcnR2ZWNfdiAobmVsdF9tb2RlLCBy dmFsKSk7CisgIC8qIEVtaXQgaW5zdHJ1Y3Rpb24gbG9hZGluZyB0aGUgY29u c3RhbnQgdmFsdWUuICAqLworICBlbWl0X21vdmVfaW5zbiAocmVnLCB2YWxf dmVjKTsKKworICBpID0gMDsKKyAgLyogSGFuZGxlIGZpcnN0IDE2IGJ5dGVz IHNwZWNpYWxseSB1c2luZyB2c3QxOnYxNnFpIGluc3RydWN0aW9uLiAgKi8K KyAgaWYgKG1vZGUgPT0gVjE2UUltb2RlKQorICAgIHsKKyAgICAgIG1lbSA9 IGFkanVzdF9hdXRvbW9kaWZ5X2FkZHJlc3MgKGRzdGJhc2UsIG1vZGUsIGRz dCwgMCk7CisgICAgICBlbWl0X2luc24gKGdlbl9tb3ZtaXNhbGlnbnYxNnFp IChtZW0sIHJlZykpOworICAgICAgaSArPSBuZWx0X21vZGU7CisgICAgICAv KiBIYW5kbGUgKDgsIDE2KSBieXRlcyBsZWZ0b3ZlciB1c2luZyB2c3QxOnYx NnFpIGFnYWluLiAgKi8KKyAgICAgIGlmIChpICsgbmVsdF92OCA8IGxlbmd0 aCAmJiBpICsgbmVsdF92MTYgPiBsZW5ndGgpCisJeworCSAgZW1pdF9pbnNu IChnZW5fYWRkMl9pbnNuIChkc3QsIEdFTl9JTlQgKGxlbmd0aCAtIG5lbHRf bW9kZSkpKTsKKwkgIG1lbSA9IGFkanVzdF9hdXRvbW9kaWZ5X2FkZHJlc3Mg KGRzdGJhc2UsIG1vZGUsIGRzdCwgMCk7CisJICAvKiBXZSBhcmUgc2hpZnRp bmcgYnl0ZXMgYmFjaywgc2V0IHRoZSBhbGlnbm1lbnQgYWNjb3JkaW5nbHku ICAqLworCSAgaWYgKChsZW5ndGggJiAweDMpID09IDApCisJICAgIHNldF9t ZW1fYWxpZ24gKG1lbSwgQklUU19QRVJfVU5JVCAqIDQpOworCSAgZWxzZSBp ZiAoKGxlbmd0aCAmIDB4MSkgPT0gMCkKKwkgICAgc2V0X21lbV9hbGlnbiAo bWVtLCBCSVRTX1BFUl9VTklUICogMik7CisJICBlbHNlCisJICAgIHNldF9t ZW1fYWxpZ24gKG1lbSwgQklUU19QRVJfVU5JVCk7CisKKwkgIGVtaXRfaW5z biAoZ2VuX21vdm1pc2FsaWdudjE2cWkgKG1lbSwgcmVnKSk7CisJICByZXR1 cm4gdHJ1ZTsKKwl9CisgICAgICAvKiBGYWxsIHRocm91Z2ggZm9yIGJ5dGVz IGxlZnRvdmVyLiAgKi8KKyAgICAgIG1vZGUgPSBWOFFJbW9kZTsKKyAgICAg IG5lbHRfbW9kZSA9IEdFVF9NT0RFX05VTklUUyAobW9kZSk7CisgICAgICBy ZWcgPSBnZW5fbG93cGFydCAoVjhRSW1vZGUsIHJlZyk7CisgICAgfQorCisg IC8qIEhhbmRsZSA4IGJ5dGVzIGluIGEgdmVjdG9yLiAgKi8KKyAgZm9yICg7 IChpICsgbmVsdF9tb2RlIDw9IGxlbmd0aCk7IGkgKz0gbmVsdF9tb2RlKQor ICAgIHsKKyAgICAgIGFkZHIgPSBwbHVzX2NvbnN0YW50IChQbW9kZSwgZHN0 LCBpKTsKKyAgICAgIG1lbSA9IGFkanVzdF9hdXRvbW9kaWZ5X2FkZHJlc3Mg KGRzdGJhc2UsIG1vZGUsIGFkZHIsIGkpOworICAgICAgZW1pdF9tb3ZlX2lu c24gKG1lbSwgcmVnKTsKKyAgICB9CisKKyAgLyogSGFuZGxlIHNpbmdsZSB3 b3JkIGxlZnRvdmVyIGJ5IHNoaWZ0aW5nIDQgYnl0ZXMgYmFjay4gIFdlIGNh bgorICAgICB1c2UgYWxpZ25lZCBhY2Nlc3MgZm9yIHRoaXMgY2FzZS4gICov CisgIGlmIChpICsgVU5JVFNfUEVSX1dPUkQgPT0gbGVuZ3RoKQorICAgIHsK KyAgICAgIGFkZHIgPSBwbHVzX2NvbnN0YW50IChQbW9kZSwgZHN0LCBpIC0g VU5JVFNfUEVSX1dPUkQpOworICAgICAgbWVtID0gYWRqdXN0X2F1dG9tb2Rp ZnlfYWRkcmVzcyAoZHN0YmFzZSwgbW9kZSwKKwkJCQkgICAgICAgYWRkciwg aSAtIFVOSVRTX1BFUl9XT1JEKTsKKyAgICAgIC8qIFdlIGFyZSBzaGlmdGlu ZyA0IGJ5dGVzIGJhY2ssIHNldCB0aGUgYWxpZ25tZW50IGFjY29yZGluZ2x5 LiAgKi8KKyAgICAgIGlmIChhbGlnbiA+IFVOSVRTX1BFUl9XT1JEKQorCXNl dF9tZW1fYWxpZ24gKG1lbSwgQklUU19QRVJfVU5JVCAqIFVOSVRTX1BFUl9X T1JEKTsKKworICAgICAgZW1pdF9tb3ZlX2luc24gKG1lbSwgcmVnKTsKKyAg ICB9CisgIC8qIEhhbmRsZSAoMCwgNCksICg0LCA4KSBieXRlcyBsZWZ0b3Zl ciBieSBzaGlmdGluZyBieXRlcyBiYWNrLgorICAgICBXZSBoYXZlIHRvIHVz ZSB1bmFsaWduZWQgYWNjZXNzIGZvciB0aGlzIGNhc2UuICAqLworICBlbHNl IGlmIChpIDwgbGVuZ3RoKQorICAgIHsKKyAgICAgIGVtaXRfaW5zbiAoZ2Vu X2FkZDJfaW5zbiAoZHN0LCBHRU5fSU5UIChsZW5ndGggLSBuZWx0X21vZGUp KSk7CisgICAgICBtZW0gPSBhZGp1c3RfYXV0b21vZGlmeV9hZGRyZXNzIChk c3RiYXNlLCBtb2RlLCBkc3QsIDApOworICAgICAgLyogV2UgYXJlIHNoaWZ0 aW5nIGJ5dGVzIGJhY2ssIHNldCB0aGUgYWxpZ25tZW50IGFjY29yZGluZ2x5 LiAgKi8KKyAgICAgIGlmICgobGVuZ3RoICYgMSkgPT0gMCkKKwlzZXRfbWVt X2FsaWduIChtZW0sIEJJVFNfUEVSX1VOSVQgKiAyKTsKKyAgICAgIGVsc2UK KwlzZXRfbWVtX2FsaWduIChtZW0sIEJJVFNfUEVSX1VOSVQpOworCisgICAg ICBlbWl0X2luc24gKGdlbl9tb3ZtaXNhbGlnbnY4cWkgKG1lbSwgcmVnKSk7 CisgICAgfQorCisgIHJldHVybiB0cnVlOworfQorCisvKiBTZXQgYSBibG9j ayBvZiBtZW1vcnkgdXNpbmcgcGxhaW4gc3RyaC9zdHJiIGluc3RydWN0aW9u cywgb25seQorICAgdXNpbmcgaW5zdHJ1Y3Rpb25zIGFsbG93ZWQgYnkgQUxJ R04gb24gcHJvY2Vzc29yLiAgV2UgZmlsbCB0aGUKKyAgIGZpcnN0IExFTkdU SCBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWEgc3RhcnRpbmcgZnJvbSBEU1RC QVNFCisgICB3aXRoIGJ5dGUgY29uc3RhbnQgVkFMVUUuICBBTElHTiBpcyB0 aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50CisgICBvZiBtZW1vcnkuICAqLwor c3RhdGljIGJvb2wKK2FybV9ibG9ja19zZXRfdW5hbGlnbmVkX25vbl92ZWN0 IChydHggZHN0YmFzZSwKKwkJCQkgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg bGVuZ3RoLAorCQkJCSAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCB2YWx1ZSwK KwkJCQkgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYWxpZ24pCit7CisgIHVu c2lnbmVkIGludCBpOworICBydHggZHN0LCBhZGRyLCBtZW07CisgIHJ0eCB2 YWxfZXhwLCB2YWxfcmVnLCByZWc7CisgIGVudW0gbWFjaGluZV9tb2RlIG1v ZGU7CisgIEhPU1RfV0lERV9JTlQgdiA9IHZhbHVlOworCisgIGdjY19hc3Nl cnQgKGFsaWduID09IDEgfHwgYWxpZ24gPT0gMik7CisKKyAgaWYgKGFsaWdu ID09IDIpCisgICAgdiB8PSAodmFsdWUgPDwgQklUU19QRVJfVU5JVCk7CisK KyAgdiA9IHNleHRfaHdpICh2LCBCSVRTX1BFUl9XT1JEKTsKKyAgdmFsX2V4 cCA9IEdFTl9JTlQgKHYpOworICAvKiBTa2lwIGlmIGl0IGlzbid0IHByb2Zp dGFibGUuICAqLworICBpZiAoIWFybV9ibG9ja19zZXRfbm9uX3ZlY3RfcHJv Zml0X3AgKHZhbF9leHAsIGxlbmd0aCwKKwkJCQkJYWxpZ24sIHRydWUsIGZh bHNlKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgZHN0ID0gY29weV9hZGRy X3RvX3JlZyAoWEVYUCAoZHN0YmFzZSwgMCkpOworICBtb2RlID0gKGFsaWdu ID09IDIgPyBISW1vZGUgOiBRSW1vZGUpOworICB2YWxfcmVnID0gZm9yY2Vf cmVnIChTSW1vZGUsIHZhbF9leHApOworICByZWcgPSBnZW5fbG93cGFydCAo bW9kZSwgdmFsX3JlZyk7CisKKyAgZm9yIChpID0gMDsgKGkgKyBHRVRfTU9E RV9TSVpFIChtb2RlKSA8PSBsZW5ndGgpOyBpICs9IEdFVF9NT0RFX1NJWkUg KG1vZGUpKQorICAgIHsKKyAgICAgIGFkZHIgPSBwbHVzX2NvbnN0YW50IChQ bW9kZSwgZHN0LCBpKTsKKyAgICAgIG1lbSA9IGFkanVzdF9hdXRvbW9kaWZ5 X2FkZHJlc3MgKGRzdGJhc2UsIG1vZGUsIGFkZHIsIGkpOworICAgICAgZW1p dF9tb3ZlX2luc24gKG1lbSwgcmVnKTsKKyAgICB9CisKKyAgLyogSGFuZGxl IHNpbmdsZSBieXRlIGxlZnRvdmVyLiAgKi8KKyAgaWYgKGkgKyAxID09IGxl bmd0aCkKKyAgICB7CisgICAgICByZWcgPSBnZW5fbG93cGFydCAoUUltb2Rl LCB2YWxfcmVnKTsKKyAgICAgIGFkZHIgPSBwbHVzX2NvbnN0YW50IChQbW9k ZSwgZHN0LCBpKTsKKyAgICAgIG1lbSA9IGFkanVzdF9hdXRvbW9kaWZ5X2Fk ZHJlc3MgKGRzdGJhc2UsIFFJbW9kZSwgYWRkciwgaSk7CisgICAgICBlbWl0 X21vdmVfaW5zbiAobWVtLCByZWcpOworICAgICAgaSsrOworICAgIH0KKwor ICBnY2NfYXNzZXJ0IChpID09IGxlbmd0aCk7CisgIHJldHVybiB0cnVlOwor fQorCisvKiBTZXQgYSBibG9jayBvZiBtZW1vcnkgdXNpbmcgcGxhaW4gc3Ry ZC9zdHIvc3RyaC9zdHJiIGluc3RydWN0aW9ucywKKyAgIHRvIHBlcm1pdCB1 bmFsaWduZWQgY29waWVzIG9uIHByb2Nlc3NvcnMgd2hpY2ggc3VwcG9ydCB1 bmFsaWduZWQKKyAgIHNlbWFudGljcyBmb3IgdGhvc2UgaW5zdHJ1Y3Rpb25z LiAgV2UgZmlsbCB0aGUgZmlyc3QgTEVOR1RIIGJ5dGVzCisgICBvZiB0aGUg bWVtb3J5IGFyZWEgc3RhcnRpbmcgZnJvbSBEU1RCQVNFIHdpdGggYnl0ZSBj b25zdGFudCBWQUxVRS4KKyAgIEFMSUdOIGlzIHRoZSBhbGlnbm1lbnQgcmVx dWlyZW1lbnQgb2YgbWVtb3J5LiAgKi8KK3N0YXRpYyBib29sCithcm1fYmxv Y2tfc2V0X2FsaWduZWRfbm9uX3ZlY3QgKHJ0eCBkc3RiYXNlLAorCQkJCXVu c2lnbmVkIEhPU1RfV0lERV9JTlQgbGVuZ3RoLAorCQkJCXVuc2lnbmVkIEhP U1RfV0lERV9JTlQgdmFsdWUsCisJCQkJdW5zaWduZWQgSE9TVF9XSURFX0lO VCBhbGlnbikKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIHJ0eCBkc3QsIGFk ZHIsIG1lbTsKKyAgcnR4IHZhbF9leHAsIHZhbF9yZWcsIHJlZzsKKyAgdW5z aWduZWQgSE9TVF9XSURFX0lOVCB2OworICBib29sIHVzZV9zdHJkX3A7CisK KyAgdXNlX3N0cmRfcCA9IChsZW5ndGggPj0gMiAqIFVOSVRTX1BFUl9XT1JE ICYmIChhbGlnbiAmIDMpID09IDAKKwkJJiYgVEFSR0VUX0xEUkQgJiYgY3Vy cmVudF90dW5lLT5wcmVmZXJfbGRyZF9zdHJkKTsKKworICB2ID0gKHZhbHVl IHwgKHZhbHVlIDw8IDgpIHwgKHZhbHVlIDw8IDE2KSB8ICh2YWx1ZSA8PCAy NCkpOworICBpZiAobGVuZ3RoIDwgVU5JVFNfUEVSX1dPUkQpCisgICAgdiAm PSAoMHhGRkZGRkZGRiA+PiAoVU5JVFNfUEVSX1dPUkQgLSBsZW5ndGgpICog QklUU19QRVJfVU5JVCk7CisKKyAgaWYgKHVzZV9zdHJkX3ApCisgICAgdiB8 PSAodiA8PCBCSVRTX1BFUl9XT1JEKTsKKyAgZWxzZQorICAgIHYgPSBzZXh0 X2h3aSAodiwgQklUU19QRVJfV09SRCk7CisKKyAgdmFsX2V4cCA9IEdFTl9J TlQgKHYpOworICAvKiBTa2lwIGlmIGl0IGlzbid0IHByb2ZpdGFibGUuICAq LworICBpZiAoIWFybV9ibG9ja19zZXRfbm9uX3ZlY3RfcHJvZml0X3AgKHZh bF9leHAsIGxlbmd0aCwKKwkJCQkJYWxpZ24sIGZhbHNlLCB1c2Vfc3RyZF9w KSkKKyAgICB7CisgICAgICBpZiAoIXVzZV9zdHJkX3ApCisJcmV0dXJuIGZh bHNlOworCisgICAgICAvKiBUcnkgd2l0aG91dCBzdHJkLiAgKi8KKyAgICAg IHYgPSAodiA+PiBCSVRTX1BFUl9XT1JEKTsKKyAgICAgIHYgPSBzZXh0X2h3 aSAodiwgQklUU19QRVJfV09SRCk7CisgICAgICB2YWxfZXhwID0gR0VOX0lO VCAodik7CisgICAgICB1c2Vfc3RyZF9wID0gZmFsc2U7CisgICAgICBpZiAo IWFybV9ibG9ja19zZXRfbm9uX3ZlY3RfcHJvZml0X3AgKHZhbF9leHAsIGxl bmd0aCwKKwkJCQkJICAgIGFsaWduLCBmYWxzZSwgdXNlX3N0cmRfcCkpCisJ cmV0dXJuIGZhbHNlOworICAgIH0KKworICBpID0gMDsKKyAgZHN0ID0gY29w eV9hZGRyX3RvX3JlZyAoWEVYUCAoZHN0YmFzZSwgMCkpOworICAvKiBIYW5k bGUgZG91YmxlIHdvcmRzIHVzaW5nIHN0cmQgaWYgcG9zc2libGUuICAqLwor ICBpZiAodXNlX3N0cmRfcCkKKyAgICB7CisgICAgICB2YWxfcmVnID0gZm9y Y2VfcmVnIChESW1vZGUsIHZhbF9leHApOworICAgICAgcmVnID0gdmFsX3Jl ZzsKKyAgICAgIGZvciAoOyAoaSArIDggPD0gbGVuZ3RoKTsgaSArPSA4KQor CXsKKwkgIGFkZHIgPSBwbHVzX2NvbnN0YW50IChQbW9kZSwgZHN0LCBpKTsK KwkgIG1lbSA9IGFkanVzdF9hdXRvbW9kaWZ5X2FkZHJlc3MgKGRzdGJhc2Us IERJbW9kZSwgYWRkciwgaSk7CisJICBlbWl0X21vdmVfaW5zbiAobWVtLCBy ZWcpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB2YWxfcmVnID0gZm9yY2Vf cmVnIChTSW1vZGUsIHZhbF9leHApOworCisgIC8qIEhhbmRsZSB3b3Jkcy4g ICovCisgIHJlZyA9ICh1c2Vfc3RyZF9wID8gZ2VuX2xvd3BhcnQgKFNJbW9k ZSwgdmFsX3JlZykgOiB2YWxfcmVnKTsKKyAgZm9yICg7IChpICsgNCA8PSBs ZW5ndGgpOyBpICs9IDQpCisgICAgeworICAgICAgYWRkciA9IHBsdXNfY29u c3RhbnQgKFBtb2RlLCBkc3QsIGkpOworICAgICAgbWVtID0gYWRqdXN0X2F1 dG9tb2RpZnlfYWRkcmVzcyAoZHN0YmFzZSwgU0ltb2RlLCBhZGRyLCBpKTsK KyAgICAgIGlmICgoYWxpZ24gJiAzKSA9PSAwKQorCWVtaXRfbW92ZV9pbnNu IChtZW0sIHJlZyk7CisgICAgICBlbHNlCisJZW1pdF9pbnNuIChnZW5fdW5h bGlnbmVkX3N0b3Jlc2kgKG1lbSwgcmVnKSk7CisgICAgfQorCisgIC8qIE1l cmdlIGxhc3QgcGFpciBvZiBTVFJIIGFuZCBTVFJCIGludG8gYSBTVFIgaWYg cG9zc2libGUuICAqLworICBpZiAodW5hbGlnbmVkX2FjY2VzcyAmJiBpID4g MCAmJiAoaSArIDMpID09IGxlbmd0aCkKKyAgICB7CisgICAgICBhZGRyID0g cGx1c19jb25zdGFudCAoUG1vZGUsIGRzdCwgaSAtIDEpOworICAgICAgbWVt ID0gYWRqdXN0X2F1dG9tb2RpZnlfYWRkcmVzcyAoZHN0YmFzZSwgU0ltb2Rl LCBhZGRyLCBpIC0gMSk7CisgICAgICAvKiBXZSBhcmUgc2hpZnRpbmcgb25l IGJ5dGUgYmFjaywgc2V0IHRoZSBhbGlnbm1lbnQgYWNjb3JkaW5nbHkuICAq LworICAgICAgaWYgKChhbGlnbiAmIDEpID09IDApCisJc2V0X21lbV9hbGln biAobWVtLCBCSVRTX1BFUl9VTklUKTsKKworICAgICAgLyogTW9zdCBsaWtl bHkgdGhpcyBpcyBhbiB1bmFsaWduZWQgYWNjZXNzLCBhbmQgd2UgY2FuJ3Qg dGVsbCBhdAorCSBjb21waWxhdGlvbiB0aW1lLiAgKi8KKyAgICAgIGVtaXRf aW5zbiAoZ2VuX3VuYWxpZ25lZF9zdG9yZXNpIChtZW0sIHJlZykpOworICAg ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIC8qIEhhbmRsZSBoYWxmIHdv cmQgbGVmdG92ZXIuICAqLworICBpZiAoaSArIDIgPD0gbGVuZ3RoKQorICAg IHsKKyAgICAgIHJlZyA9IGdlbl9sb3dwYXJ0IChISW1vZGUsIHZhbF9yZWcp OworICAgICAgYWRkciA9IHBsdXNfY29uc3RhbnQgKFBtb2RlLCBkc3QsIGkp OworICAgICAgbWVtID0gYWRqdXN0X2F1dG9tb2RpZnlfYWRkcmVzcyAoZHN0 YmFzZSwgSEltb2RlLCBhZGRyLCBpKTsKKyAgICAgIGlmICgoYWxpZ24gJiAx KSA9PSAwKQorCWVtaXRfbW92ZV9pbnNuIChtZW0sIHJlZyk7CisgICAgICBl bHNlCisJZW1pdF9pbnNuIChnZW5fdW5hbGlnbmVkX3N0b3JlaGkgKG1lbSwg cmVnKSk7CisKKyAgICAgIGkgKz0gMjsKKyAgICB9CisKKyAgLyogSGFuZGxl IHNpbmdsZSBieXRlIGxlZnRvdmVyLiAgKi8KKyAgaWYgKGkgKyAxID09IGxl bmd0aCkKKyAgICB7CisgICAgICByZWcgPSBnZW5fbG93cGFydCAoUUltb2Rl LCB2YWxfcmVnKTsKKyAgICAgIGFkZHIgPSBwbHVzX2NvbnN0YW50IChQbW9k ZSwgZHN0LCBpKTsKKyAgICAgIG1lbSA9IGFkanVzdF9hdXRvbW9kaWZ5X2Fk ZHJlc3MgKGRzdGJhc2UsIFFJbW9kZSwgYWRkciwgaSk7CisgICAgICBlbWl0 X21vdmVfaW5zbiAobWVtLCByZWcpOworICAgIH0KKworICByZXR1cm4gdHJ1 ZTsKK30KKworLyogU2V0IGEgYmxvY2sgb2YgbWVtb3J5IHVzaW5nIHZlY3Rv cml6YXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBib3RoCisgICBhbGlnbmVkIGFu ZCB1bmFsaWduZWQgY2FzZXMuICBXZSBmaWxsIHRoZSBmaXJzdCBMRU5HVEgg Ynl0ZXMgb2YKKyAgIHRoZSBtZW1vcnkgYXJlYSBzdGFydGluZyBmcm9tIERT VEJBU0Ugd2l0aCBieXRlIGNvbnN0YW50IFZBTFVFLgorICAgQUxJR04gaXMg dGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiBtZW1vcnkuICAqLworc3Rh dGljIGJvb2wKK2FybV9ibG9ja19zZXRfdmVjdCAocnR4IGRzdGJhc2UsCisJ CSAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGxlbmd0aCwKKwkJICAgIHVu c2lnbmVkIEhPU1RfV0lERV9JTlQgdmFsdWUsCisJCSAgICB1bnNpZ25lZCBI T1NUX1dJREVfSU5UIGFsaWduKQoreworICAvKiBDaGVjayB3aGV0aGVyIHdl IG5lZWQgdG8gdXNlIHVuYWxpZ25lZCBzdG9yZSBpbnN0cnVjdGlvbi4gICov CisgIGlmICgoKGFsaWduICYgMykgIT0gMCB8fCAobGVuZ3RoICYgMykgIT0g MCkKKyAgICAgIC8qIENoZWNrIHdoZXRoZXIgdW5hbGlnbmVkIHN0b3JlIGlu c3RydWN0aW9uIGlzIGF2YWlsYWJsZS4gICovCisgICAgICAmJiAoIXVuYWxp Z25lZF9hY2Nlc3MgfHwgQllURVNfQklHX0VORElBTikpCisgICAgcmV0dXJu IGZhbHNlOworCisgIGlmICgoYWxpZ24gJiAzKSA9PSAwKQorICAgIHJldHVy biBhcm1fYmxvY2tfc2V0X2FsaWduZWRfdmVjdCAoZHN0YmFzZSwgbGVuZ3Ro LCB2YWx1ZSwgYWxpZ24pOworICBlbHNlCisgICAgcmV0dXJuIGFybV9ibG9j a19zZXRfdW5hbGlnbmVkX3ZlY3QgKGRzdGJhc2UsIGxlbmd0aCwgdmFsdWUs IGFsaWduKTsKK30KKworLyogRXhwYW5kIHN0cmluZyBzdG9yZSBvcGVyYXRp b24uICBGaXJzdGx5IHdlIHRyeSB0byBkbyB0aGF0IGJ5IHVzaW5nCisgICB2 ZWN0b3JpemF0aW9uIGluc3RydWN0aW9ucywgdGhlbiB0cnkgd2l0aCBBUk0g dW5hbGlnbmVkIGFjY2VzcyBhbmQKKyAgIGRvdWJsZS13b3JkIHN0b3JlIGlm IHByb2ZpdGFibGUuICBPUEVSQU5EU1swXSBpcyB0aGUgZGVzdGluYXRpb24s CisgICBPUEVSQU5EU1sxXSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBvcGVy YW5kc1syXSBpcyB0aGUgdmFsdWUgdG8KKyAgIGluaXRpYWxpemUgdGhlIG1l bW9yeSwgT1BFUkFORFNbM10gaXMgdGhlIGtub3duIGFsaWdubWVudCBvZiB0 aGUKKyAgIGRlc3RpbmF0aW9uLiAgKi8KK2Jvb2wKK2FybV9nZW5fc2V0bWVt IChydHggKm9wZXJhbmRzKQoreworICBydHggZHN0YmFzZSA9IG9wZXJhbmRz WzBdOworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGxlbmd0aDsKKyAgdW5z aWduZWQgSE9TVF9XSURFX0lOVCB2YWx1ZTsKKyAgdW5zaWduZWQgSE9TVF9X SURFX0lOVCBhbGlnbjsKKworICBpZiAoIUNPTlNUX0lOVF9QIChvcGVyYW5k c1syXSkgfHwgIUNPTlNUX0lOVF9QIChvcGVyYW5kc1sxXSkpCisgICAgcmV0 dXJuIGZhbHNlOworCisgIGxlbmd0aCA9IFVJTlRWQUwgKG9wZXJhbmRzWzFd KTsKKyAgaWYgKGxlbmd0aCA+IDY0KQorICAgIHJldHVybiBmYWxzZTsKKwor ICB2YWx1ZSA9IChVSU5UVkFMIChvcGVyYW5kc1syXSkgJiAweEZGKTsKKyAg YWxpZ24gPSBVSU5UVkFMIChvcGVyYW5kc1szXSk7CisgIGlmIChUQVJHRVRf TkVPTiAmJiBsZW5ndGggPj0gOAorICAgICAgJiYgY3VycmVudF90dW5lLT5z dHJpbmdfb3BzX3ByZWZlcl9uZW9uCisgICAgICAmJiBhcm1fYmxvY2tfc2V0 X3ZlY3QgKGRzdGJhc2UsIGxlbmd0aCwgdmFsdWUsIGFsaWduKSkKKyAgICBy ZXR1cm4gdHJ1ZTsKKworICBpZiAoIXVuYWxpZ25lZF9hY2Nlc3MgJiYgKGFs aWduICYgMykgIT0gMCkKKyAgICByZXR1cm4gYXJtX2Jsb2NrX3NldF91bmFs aWduZWRfbm9uX3ZlY3QgKGRzdGJhc2UsIGxlbmd0aCwgdmFsdWUsIGFsaWdu KTsKKworICByZXR1cm4gYXJtX2Jsb2NrX3NldF9hbGlnbmVkX25vbl92ZWN0 IChkc3RiYXNlLCBsZW5ndGgsIHZhbHVlLCBhbGlnbik7Cit9CisKIC8qIElt cGxlbWVudCB0aGUgVEFSR0VUX0FTQU5fU0hBRE9XX09GRlNFVCBob29rLiAg Ki8KIAogc3RhdGljIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQKSW5kZXg6IGdj Yy9jb25maWcvYXJtL2FybS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvY29uZmlnL2FybS9hcm0ubWQJKHJldmlzaW9uIDIxMjc1MCkKKysr IGdjYy9jb25maWcvYXJtL2FybS5tZAkod29ya2luZyBjb3B5KQpAQCAtNjcx Niw2ICs2NzE2LDIwIEBACiB9KQogCiAKKyhkZWZpbmVfZXhwYW5kICJzZXRt ZW1zaSIKKyAgWyhtYXRjaF9vcGVyYW5kOkJMSyAwICJnZW5lcmFsX29wZXJh bmQiICIiKQorICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAiY29uc3RfaW50X29w ZXJhbmQiICIiKQorICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiY29uc3RfaW50 X29wZXJhbmQiICIiKQorICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3Rf aW50X29wZXJhbmQiICIiKV0KKyAgIlRBUkdFVF8zMkJJVCIKK3sKKyAgaWYg KGFybV9nZW5fc2V0bWVtIChvcGVyYW5kcykpCisgICAgRE9ORTsKKworICBG QUlMOworfSkKKworCiA7OyBNb3ZlIGEgYmxvY2sgb2YgbWVtb3J5IGlmIGl0 IGlzIHdvcmQgYWxpZ25lZCBhbmQgTU9SRSB0aGFuIDIgd29yZHMgbG9uZy4K IDs7IFdlIGNvdWxkIGxldCB0aGlzIGFwcGx5IGZvciBibG9ja3Mgb2YgbGVz cyB0aGFuIHRoaXMsIGJ1dCBpdCBjbG9iYmVycyBzbwogOzsgbWFueSByZWdp c3RlcnMgdGhhdCB0aGVyZSBpcyB0aGVuIHByb2JhYmx5IGEgYmV0dGVyIHdh eS4KSW5kZXg6IGdjYy9jb25maWcvYXJtL2FybS1wcm90b3MuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvY29uZmlnL2FybS9hcm0tcHJvdG9z LmgJKHJldmlzaW9uIDIxMjc1MCkKKysrIGdjYy9jb25maWcvYXJtL2FybS1w cm90b3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDYgKzI3OCwxMCBAQCBz dHJ1Y3QgdHVuZV9wYXJhbXMKICAgLyogUHJlZmVyIDMyLWJpdCBlbmNvZGlu ZyBpbnN0ZWFkIG9mIDE2LWJpdCBlbmNvZGluZyB3aGVyZSBzdWJzZXQgb2Yg ZmxhZ3MKICAgICAgd291bGQgYmUgc2V0LiAgKi8KICAgYm9vbCBkaXNwYXJh Z2VfcGFydGlhbF9mbGFnX3NldHRpbmdfdDE2X2VuY29kaW5nczsKKyAgLyog UHJlZmVyIHRvIGlubGluZSBzdHJpbmcgb3BlcmF0aW9ucyBsaWtlIG1lbXNl dCBieSB1c2luZyBOZW9uLiAgKi8KKyAgYm9vbCBzdHJpbmdfb3BzX3ByZWZl cl9uZW9uOworICAvKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMg dG8gaW5saW5lIGNhbGxzIHRvIG1lbXNldC4gICovCisgIGludCBtYXhfaW5z bnNfaW5saW5lX21lbXNldDsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qg dHVuZV9wYXJhbXMgKmN1cnJlbnRfdHVuZTsKQEAgLTI5MCw2ICsyOTQsNyBA QCBleHRlcm4gdm9pZCBhcm1fZW1pdF9jb3JlcmVnc182NGJpdF9zaGlmdCAo ZW51bSBydAogZXh0ZXJuIGJvb2wgYXJtX3ZhbGlkaXplX2NvbXBhcmlzb24g KHJ0eCAqLCBydHggKiwgcnR4ICopOwogI2VuZGlmIC8qIFJUWF9DT0RFICov CiAKK2V4dGVybiBib29sIGFybV9nZW5fc2V0bWVtIChydHggKik7CiBleHRl cm4gdm9pZCBhcm1fZXhwYW5kX3ZlY19wZXJtIChydHggdGFyZ2V0LCBydHgg b3AwLCBydHggb3AxLCBydHggc2VsKTsKIGV4dGVybiBib29sIGFybV9leHBh bmRfdmVjX3Blcm1fY29uc3QgKHJ0eCB0YXJnZXQsIHJ0eCBvcDAsIHJ0eCBv cDEsIHJ0eCBzZWwpOwogCg== --001a11c12cf0d9deed04feb355e8--