From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32564 invoked by alias); 31 Jul 2009 18:18:04 -0000 Received: (qmail 32499 invoked by uid 22791); 31 Jul 2009 18:18:00 -0000 X-SWARE-Spam-Status: No, hits=0.2 required=5.0 tests=AWL,BAYES_00,HK_OBFDOM,J_CHICKENPOX_13,J_CHICKENPOX_37,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-fx0-f220.google.com (HELO mail-fx0-f220.google.com) (209.85.220.220) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 31 Jul 2009 18:17:50 +0000 Received: by fxm20 with SMTP id 20so1490404fxm.24 for ; Fri, 31 Jul 2009 11:17:45 -0700 (PDT) MIME-Version: 1.0 Received: by 10.239.136.143 with SMTP id h15mr290849hbh.106.1249064265365; Fri, 31 Jul 2009 11:17:45 -0700 (PDT) In-Reply-To: <200907311201.28986.thiago.bauermann@gmail.com> References: <9a9942200907221615o570e749fh5cb186c1600f159c@mail.gmail.com> <200907301501.17812.thiago.bauermann@gmail.com> <200907311201.28986.thiago.bauermann@gmail.com> From: Reid Kleckner Date: Fri, 31 Jul 2009 20:31:00 -0000 Message-ID: <9a9942200907311117r2f5363f8ufde734ce2bbf721a@mail.gmail.com> Subject: Re: [unladen-swallow] Re: [RFA] Add interface for registering JITed code To: unladen-swallow@googlegroups.com Cc: gdb-patches@sourceware.org, Tom Tromey Content-Type: multipart/mixed; boundary=0016363b9c5ed6bb6b0470046f16 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00766.txt.bz2 --0016363b9c5ed6bb6b0470046f16 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2486 On Fri, Jul 31, 2009 at 8:01 AM, Thiago Jung Bauermann wrote: > > Ok, I had one night's sleep over this, and just re-read the thread. :-) > > Em Quinta-feira 30 Julho 2009 15:01:17 Thiago Jung Bauermann escreveu: >> Em Quinta-feira 30 Julho 2009 12:12:50 Tom Tromey escreveu: >> > >>>>> "Reid" =3D=3D Reid Kleckner writes: >> > >> > Tom> Yeah. =A0This would work if you had two JITs in a process, say lo= aded >> > Tom> dynamically, and the various __jit symbols had hidden visibility. >> > >> > Reid> I think if someone has that use case, then they can write a clie= nt >> > Reid> side library that wraps the __jit symbols and make the two JITs >> > call Reid> that. >> > >> > Yeah, I changed my mind, let's not worry about it. =A0If it ever comes= up, >> > we can deal with it then without breaking compatibility. >> >> If/when someone wants to add another scripting language to GDB, we will = be >> bitten by this issue. I can see that happening already. :-) > > I still think this will happen soon enough ... > >> You're saying that the current patch is extensible to deal with that? > > ... but I agree with Reid in that the inferior (or client) can deal with = that > case internally (also it seems fair, since it is the client who wanted to= have > two JITs in the first place. :-) ). It is nice that the GDB-facing interf= ace is > as simple as possible. > > Also the protocol is versioned. That is awesome. I don't have worries > regarding this issue. Great, I really didn't want to tackle that issue from the GDB side. :) >> Also, changing subjects: it is important that this feature works on core >> files, or at least is forward-compatible with such a feature. I think th= is >> needs to be thought through before the patch goes in. > > I still think that the patch needs to be tested with a core file scenario > before it is checked in. Since said scenario is similar to attaching to a > running process, it will likely magically work, though. Well, it didn't magically work because the jit_inferior_create_hook was getting called twice for core files instead of once. What would happen is that the binary would get loaded, the hook called, there would be no debug info, the memory would get loaded, it would get called again, and it would think that it already read the descriptor. So I made it look for new code every time just in case, and now it works. Here's an updated patch. What else needs to be dealt with? Reid --0016363b9c5ed6bb6b0470046f16 Content-Type: text/plain; charset=US-ASCII; name="jit-patch.txt" Content-Disposition: attachment; filename="jit-patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxt8lfp40 Content-length: 48975 MjAwOS0wNy0yOCAgUmVpZCBLbGVja25lciAgPHJlaWRAa2xlY2tuZXIubmV0 PgoKCUFkZCBpbnRlcmZhY2UgZm9yIEpJVCBjb2RlIGdlbmVyYXRpb24uCgkq IE5FV1M6IEFubm91bmNlIEpJVCBpbnRlcmZhY2UuCgkqIGRvYy9nZGIudGV4 aW5mbzogQWRkIGNoYXB0ZXIgb24gSklUIGludGVyZmFjZS4KCSogTWFrZWZp bGUuaW4gKFNGSUxFUyk6IEFkZCBqaXQuYy4KCShIRklMRVNfTk9fU1JDRElS KTogQWRkIGppdC5oLgoJKENPTU1PTl9PQlMpOiBBZGQgaml0Lm8uCgkqIGpp dC5jOiBOZXcgZmlsZS4KCSogaml0Lmg6IE5ldyBmaWxlLgoJKiBicmVha3Bv aW50Lmg6CgkoZW51bSBicHR5cGUpOiBBZGQgYnBfaml0X2V2ZW50IHRvIGVu dW0uCgkqIGJyZWFrcG9pbnQuYzoKCSh1cGRhdGVfYnJlYWtwb2ludHNfYWZ0 ZXJfZXhlYyk6IERlbGV0ZSBqaXQgYnJlYWtwb2ludHMgYWZ0ZXIgZXhlYy4K CShicHN0YXRfd2hhdCk6IFVwZGF0ZSBldmVudCB0YWJsZSBmb3IgYnBfaml0 X2V2ZW50LgoJKHByaW50X2l0X3R5cGljYWwpOiBBZGRlZCBjYXNlIGZvciBi cF9qaXRfZXZlbnQuCgkocHJpbnRfb25lX2JyZWFrcG9pbnRfbG9jYXRpb24p OiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgkoYWxsb2NhdGVfYnBf bG9jYXRpb24pOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgkobWVu dGlvbik6IEFkZGVkIGNhc2UgZm9yIGJwX2ppdF9ldmVudC4KCShkZWxldGVf Y29tbWFuZCk6IEFkZGVkIGNhc2UgZm9yIGJwX2ppdF9ldmVudC4KCShicmVh a3BvaW50X3JlX3NldF9vbmUpOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZl bnQuCgkoYnJlYWtwb2ludF9yZV9zZXQpOiBBZGRlZCBjYWxsIHRvIGppdF9p bmZlcmlvcl9jcmVhdGVkX2hvb2suCgkoY3JlYXRlX2ppdF9ldmVudF9icmVh a3BvaW50KTogTmV3LgoJKiBpbmZydW4uYyAoaGFuZGxlX2luZmVyaW9yX2V2 ZW50KTogQWRkIGhhbmRsZXIgZm9yIGppdCBldmVudC4KCShmb2xsb3dfZXhl Yyk6IEFkZCBjYWxsIHRvIGppdF9pbmZlcmlvcl9jcmVhdGVkX2hvb2suCgkq IG9iamZpbGVzLmMgKGZyZWVfb2JqZmlsZSk6IEZpeGVkIGEgbWVtb3J5IGxl YWsuCgpJbmRleDogZ2RiL01ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvTWFrZWZpbGUuaW4s dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA5MQpkaWZmIC11IC1wIC11IC1y MS4xMDkxIE1ha2VmaWxlLmluCi0tLSBnZGIvTWFrZWZpbGUuaW4JMyBKdWwg MjAwOSAxMjowNjozNSAtMDAwMAkxLjEwOTEKKysrIGdkYi9NYWtlZmlsZS5p bgkzMSBKdWwgMjAwOSAxODowMzozNSAtMDAwMApAQCAtNjc3LDcgKzY3Nyw4 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAl3cmFwcGVyLmMgXAogCXhtbC10ZGVzYy5jIHhtbC1zdXBwb3J0LmMgXAog CWluZmVyaW9yLmMgZ2RiX3VzbGVlcC5jIFwKLQlyZWNvcmQuYworCXJlY29y ZC5jIFwKKwlqaXQuYwogCiBMSU5URklMRVMgPSAkKFNGSUxFUykgJChZWUZJ TEVTKSAkKENPTkZJR19TUkNTKSBpbml0LmMKIApAQCAtNzQ2LDcgKzc0Nyw3 IEBAIGNvbmZpZy9yczYwMDAvbm0tcnM2MDAwLmggdG9wLmggYnNkLWt2bS4K IGFubm90YXRlLmggc2ltLXJlZ25vLmggZGljdGlvbmFyeS5oIGRmcC5oIG1h aW4uaCBmcmFtZS11bndpbmQuaAlcCiByZW1vdGUtZmlsZWlvLmggaTM4Ni1s aW51eC10ZGVwLmggdmF4LXRkZXAuaCBvYmpjLWxhbmcuaCBcCiBzZW50aW5l bC1mcmFtZS5oIGJjYWNoZS5oIHN5bWZpbGUuaCB3aW5kb3dzLXRkZXAuaCBs aW51eC10ZGVwLmggXAotZ2RiX3VzbGVlcC5oCitnZGJfdXNsZWVwLmggaml0 LmgKIAogIyBIZWFkZXIgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGly IGluIHRoZW0sIG9yIHdoaWNoIGFyZSBpbiBvYmpkaXIuCiAKQEAgLTgyOCw3 ICs4MjksOCBAQCBDT01NT05fT0JTID0gJChERVBGSUxFUykgJChDT05GSUdf T0JTKSAkCiAJc29saWIubyBzb2xpYi1udWxsLm8gXAogCXByb2xvZ3VlLXZh bHVlLm8gbWVtb3J5LW1hcC5vIHhtbC1zdXBwb3J0Lm8gXAogCXRhcmdldC1k ZXNjcmlwdGlvbnMubyB0YXJnZXQtbWVtb3J5Lm8geG1sLXRkZXNjLm8geG1s LWJ1aWx0aW4ubyBcCi0JaW5mZXJpb3IubyBvc2RhdGEubyBnZGJfdXNsZWVw Lm8gcmVjb3JkLm8KKwlpbmZlcmlvci5vIG9zZGF0YS5vIGdkYl91c2xlZXAu byByZWNvcmQubyBcCisJaml0Lm8KIAogVFNPQlMgPSBpbmZsb3cubwogCklu ZGV4OiBnZGIvTkVXUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL05FV1MsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMzE5CmRpZmYgLXUgLXAgLXUgLXIxLjMxOSBORVdTCi0tLSBnZGIvTkVX UwkyMCBKdWwgMjAwOSAxODo1MTo0MSAtMDAwMAkxLjMxOQorKysgZ2RiL05F V1MJMzEgSnVsIDIwMDkgMTg6MDM6MzUgLTAwMDAKQEAgLTMsNiArMywxMiBA QAogCiAqKiogQ2hhbmdlcyBzaW5jZSBHREIgNi44CiAKKyogR0RCIG5vdyBo YXMgYW4gaW50ZXJmYWNlIGZvciBKSVQgY29tcGlsYXRpb24uICBBcHBsaWNh dGlvbnMgdGhhdAorZHluYW1pY2FsbHkgZ2VuZXJhdGUgY29kZSBjYW4gY3Jl YXRlIHN5bWJvbCBmaWxlcyBpbiBtZW1vcnkgYW5kIHJlZ2lzdGVyCit0aGVt IHdpdGggR0RCLiAgRm9yIHVzZXJzLCB0aGUgZmVhdHVyZSBzaG91bGQgd29y ayB0cmFuc3BhcmVudGx5LCBhbmQKK2ZvciBKSVQgZGV2ZWxvcGVycywgdGhl IGludGVyZmFjZSBpcyBkb2N1bWVudGVkIGluIHRoZSBHREIgbWFudWFsIGlu IHRoZQorIkpJVCBDb21waWxhdGlvbiBJbnRlcmZhY2UiIGNoYXB0ZXIuCisK ICogVHJhY2Vwb2ludHMgbWF5IG5vdyBiZSBjb25kaXRpb25hbC4gIFRoZSBz eW50YXggaXMgYXMgZm9yCiBicmVha3BvaW50czsgZWl0aGVyIGFuICJpZiIg Y2xhdXNlIGFwcGVuZGVkIHRvIHRoZSAidHJhY2UiIGNvbW1hbmQsCiBvciB0 aGUgImNvbmRpdGlvbiIgY29tbWFuZCBpcyBhdmFpbGFibGUuICBHREIgc2Vu ZHMgdGhlIGNvbmRpdGlvbiB0bwpJbmRleDogZ2RiL2JyZWFrcG9pbnQuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z2RiL2JyZWFrcG9pbnQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MTMK ZGlmZiAtdSAtcCAtdSAtcjEuNDEzIGJyZWFrcG9pbnQuYwotLS0gZ2RiL2Jy ZWFrcG9pbnQuYwk3IEp1bCAyMDA5IDIyOjIxOjA5IC0wMDAwCTEuNDEzCisr KyBnZGIvYnJlYWtwb2ludC5jCTMxIEp1bCAyMDA5IDE4OjAzOjM1IC0wMDAw CkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAidG9wLmgiCiAjaW5jbHVk ZSAid3JhcHBlci5oIgogI2luY2x1ZGUgInZhbHByaW50LmgiCisjaW5jbHVk ZSAiaml0LmgiCiAKIC8qIHJlYWRsaW5lIGluY2x1ZGUgZmlsZXMgKi8KICNp bmNsdWRlICJyZWFkbGluZS9yZWFkbGluZS5oIgpAQCAtMTU3NSw2ICsxNTc2 LDEzIEBAIHVwZGF0ZV9icmVha3BvaW50c19hZnRlcl9leGVjICh2b2lkKQog CWNvbnRpbnVlOwogICAgICAgfQogCisgICAgLyogSklUIGJyZWFrcG9pbnRz IG11c3QgYmUgZXhwbGljaXRseSByZXNldCBhZnRlciBhbiBleGVjKCkuICov CisgICAgaWYgKGItPnR5cGUgPT0gYnBfaml0X2V2ZW50KQorICAgICAgewor CWRlbGV0ZV9icmVha3BvaW50IChiKTsKKwljb250aW51ZTsKKyAgICAgIH0K KwogICAgIC8qIFRocmVhZCBldmVudCBicmVha3BvaW50cyBtdXN0IGJlIHNl dCBhbmV3IGFmdGVyIGFuIGV4ZWMoKSwKICAgICAgICBhcyBtdXN0IG92ZXJs YXkgZXZlbnQgYW5kIGxvbmdqbXAgbWFzdGVyIGJyZWFrcG9pbnRzLiAgKi8K ICAgICBpZiAoYi0+dHlwZSA9PSBicF90aHJlYWRfZXZlbnQgfHwgYi0+dHlw ZSA9PSBicF9vdmVybGF5X2V2ZW50CkBAIC0yNTczLDYgKzI1ODEsNyBAQCBw cmludF9pdF90eXBpY2FsIChicHN0YXQgYnMpCiAgICAgY2FzZSBicF93YXRj aHBvaW50X3Njb3BlOgogICAgIGNhc2UgYnBfY2FsbF9kdW1teToKICAgICBj YXNlIGJwX3RyYWNlcG9pbnQ6CisgICAgY2FzZSBicF9qaXRfZXZlbnQ6CiAg ICAgZGVmYXVsdDoKICAgICAgIHJlc3VsdCA9IFBSSU5UX1VOS05PV047CiAg ICAgICBicmVhazsKQEAgLTMyOTgsNiArMzMwNyw5IEBAIGJwc3RhdF93aGF0 IChicHN0YXQgYnMpCiAgICAgICAvKiBXZSBoaXQgdGhlIHNoYXJlZCBsaWJy YXJ5IGV2ZW50IGJyZWFrcG9pbnQuICAqLwogICAgICAgc2hsaWJfZXZlbnQs CiAKKyAgICAgIC8qIFdlIGhpdCB0aGUgaml0IGV2ZW50IGJyZWFrcG9pbnQu ICAqLworICAgICAgaml0X2V2ZW50LAorCiAgICAgICAvKiBUaGlzIGlzIGp1 c3QgdXNlZCB0byBjb3VudCBob3cgbWFueSBlbnVtcyB0aGVyZSBhcmUuICAq LwogICAgICAgY2xhc3NfbGFzdAogICAgIH07CkBAIC0zMzEzLDYgKzMzMjUs NyBAQCBicHN0YXRfd2hhdCAoYnBzdGF0IGJzKQogI2RlZmluZSBjbHIgQlBT VEFUX1dIQVRfQ0xFQVJfTE9OR0pNUF9SRVNVTUUKICNkZWZpbmUgc3IgQlBT VEFUX1dIQVRfU1RFUF9SRVNVTUUKICNkZWZpbmUgc2hsIEJQU1RBVF9XSEFU X0NIRUNLX1NITElCUworI2RlZmluZSBqaXQgQlBTVEFUX1dIQVRfQ0hFQ0tf SklUCiAKIC8qICJDYW4ndCBoYXBwZW4uIiAgTWlnaHQgd2FudCB0byBwcmlu dCBhbiBlcnJvciBtZXNzYWdlLgogICAgYWJvcnQoKSBpcyBub3Qgb3V0IG9m IHRoZSBxdWVzdGlvbiwgYnV0IGNoYW5jZXMgYXJlIEdEQiBpcyBqdXN0CkBA IC0zMzMzLDEyICszMzQ2LDEzIEBAIGJwc3RhdF93aGF0IChicHN0YXQgYnMp CiAgICAgIGJhY2sgYW5kIGRlY2lkZSBzb21ldGhpbmcgb2YgYSBsb3dlciBw cmlvcml0eSBpcyBiZXR0ZXIuICBUaGUKICAgICAgb3JkZXJpbmcgaXM6CiAK LSAgICAga2MgICA8IGNsciBzZ2wgc2hsIHNsciBzbiBzciBzcwotICAgICBz Z2wgIDwgc2hsIHNsciBzbiBzciBzcwotICAgICBzbHIgIDwgZXJyIHNobCBz biBzciBzcwotICAgICBjbHIgIDwgZXJyIHNobCBzbiBzciBzcwotICAgICBz cyAgIDwgc2hsIHNuIHNyCi0gICAgIHNuICAgPCBzaGwgc3IKKyAgICAga2Mg ICA8IGppdCBjbHIgc2dsIHNobCBzbHIgc24gc3Igc3MKKyAgICAgc2dsICA8 IGppdCBzaGwgc2xyIHNuIHNyIHNzCisgICAgIHNsciAgPCBqaXQgZXJyIHNo bCBzbiBzciBzcworICAgICBjbHIgIDwgaml0IGVyciBzaGwgc24gc3Igc3MK KyAgICAgc3MgICA8IGppdCBzaGwgc24gc3IKKyAgICAgc24gICA8IGppdCBz aGwgc3IKKyAgICAgaml0ICA8IHNobCBzcgogICAgICBzaGwgIDwgc3IKICAg ICAgc3IgICA8CiAKQEAgLTMzNTYsMjggKzMzNzAsMTggQEAgYnBzdGF0X3do YXQgKGJwc3RhdCBicykKICAgICB0YWJsZVsoaW50KSBjbGFzc19sYXN0XVso aW50KSBCUFNUQVRfV0hBVF9MQVNUXSA9CiAgIHsKICAgLyogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvbGQgYWN0aW9uICovCi0gIC8qICAgICAg IGtjICAgIHNzICAgIHNuICAgIHNnbCAgICBzbHIgICBjbHIgICBzciAgIHNo bAotICAgKi8KLS8qbm9fZWZmZWN0ICovCi0gICAge2tjLCBzcywgc24sIHNn bCwgc2xyLCBjbHIsIHNyLCBzaGx9LAotLyp3cF9zaWxlbnQgKi8KLSAgICB7 c3MsIHNzLCBzbiwgc3MsIHNzLCBzcywgc3IsIHNobH0sCi0vKndwX25vaXN5 ICovCi0gICAge3NuLCBzbiwgc24sIHNuLCBzbiwgc24sIHNyLCBzaGx9LAot LypicF9ub3N0b3AgKi8KLSAgICB7c2dsLCBzcywgc24sIHNnbCwgc2xyLCBz bHIsIHNyLCBzaGx9LAotLypicF9zaWxlbnQgKi8KLSAgICB7c3MsIHNzLCBz biwgc3MsIHNzLCBzcywgc3IsIHNobH0sCi0vKmJwX25vaXN5ICovCi0gICAg e3NuLCBzbiwgc24sIHNuLCBzbiwgc24sIHNyLCBzaGx9LAotLypsb25nX2p1 bXAgKi8KLSAgICB7c2xyLCBzcywgc24sIHNsciwgc2xyLCBlcnIsIHNyLCBz aGx9LAotLypsb25nX3Jlc3VtZSAqLwotICAgIHtjbHIsIHNzLCBzbiwgZXJy LCBlcnIsIGVyciwgc3IsIHNobH0sCi0vKnN0ZXBfcmVzdW1lICovCi0gICAg e3NyLCBzciwgc3IsIHNyLCBzciwgc3IsIHNyLCBzcn0sCi0vKnNobGliICov Ci0gICAge3NobCwgc2hsLCBzaGwsIHNobCwgc2hsLCBzaGwsIHNyLCBzaGx9 CisgIC8qICAgICAgICAgICAgICAga2MgICBzcyAgIHNuICAgc2dsICBzbHIg IGNsciAgc3IgIHNobCAgaml0ICovCisvKiBub19lZmZlY3QgKi8gICB7a2Ms ICBzcywgIHNuLCAgc2dsLCBzbHIsIGNsciwgc3IsIHNobCwgaml0fSwKKy8q IHdwX3NpbGVudCAqLyAgIHtzcywgIHNzLCAgc24sICBzcywgIHNzLCAgc3Ms ICBzciwgc2hsLCBqaXR9LAorLyogd3Bfbm9pc3kgKi8gICAge3NuLCAgc24s ICBzbiwgIHNuLCAgc24sICBzbiwgIHNyLCBzaGwsIGppdH0sCisvKiBicF9u b3N0b3AgKi8gICB7c2dsLCBzcywgIHNuLCAgc2dsLCBzbHIsIHNsciwgc3Is IHNobCwgaml0fSwKKy8qIGJwX3NpbGVudCAqLyAgIHtzcywgIHNzLCAgc24s ICBzcywgIHNzLCAgc3MsICBzciwgc2hsLCBqaXR9LAorLyogYnBfbm9pc3kg Ki8gICAge3NuLCAgc24sICBzbiwgIHNuLCAgc24sICBzbiwgIHNyLCBzaGws IGppdH0sCisvKiBsb25nX2p1bXAgKi8gICB7c2xyLCBzcywgIHNuLCAgc2xy LCBzbHIsIGVyciwgc3IsIHNobCwgaml0fSwKKy8qIGxvbmdfcmVzdW1lICov IHtjbHIsIHNzLCAgc24sICBlcnIsIGVyciwgZXJyLCBzciwgc2hsLCBqaXR9 LAorLyogc3RlcF9yZXN1bWUgKi8ge3NyLCAgc3IsICBzciwgIHNyLCAgc3Is ICBzciwgIHNyLCBzciwgIHNyIH0sCisvKiBzaGxpYiAqLyAgICAgICB7c2hs LCBzaGwsIHNobCwgc2hsLCBzaGwsIHNobCwgc3IsIHNobCwgc2hsfSwKKy8q IGppdF9ldmVudCAqLyAgIHtqaXQsIGppdCwgaml0LCBqaXQsIGppdCwgaml0 LCBzciwgaml0LCBqaXR9CiAgIH07CiAKICN1bmRlZiBrYwpAQCAtMzM5MCw2 ICszMzk0LDcgQEAgYnBzdGF0X3doYXQgKGJwc3RhdCBicykKICN1bmRlZiBz cgogI3VuZGVmIHRzCiAjdW5kZWYgc2hsCisjdW5kZWYgaml0CiAgIGVudW0g YnBzdGF0X3doYXRfbWFpbl9hY3Rpb24gY3VycmVudF9hY3Rpb24gPSBCUFNU QVRfV0hBVF9LRUVQX0NIRUNLSU5HOwogICBzdHJ1Y3QgYnBzdGF0X3doYXQg cmV0dmFsOwogCkBAIC0zNDYwLDYgKzM0NjUsOSBAQCBicHN0YXRfd2hhdCAo YnBzdGF0IGJzKQogCWNhc2UgYnBfc2hsaWJfZXZlbnQ6CiAJICBic19jbGFz cyA9IHNobGliX2V2ZW50OwogCSAgYnJlYWs7CisJY2FzZSBicF9qaXRfZXZl bnQ6CisJICBic19jbGFzcyA9IGppdF9ldmVudDsKKwkgIGJyZWFrOwogCWNh c2UgYnBfdGhyZWFkX2V2ZW50OgogCWNhc2UgYnBfb3ZlcmxheV9ldmVudDoK IAljYXNlIGJwX2xvbmdqbXBfbWFzdGVyOgpAQCAtMzU5Myw2ICszNjAxLDcg QEAgcHJpbnRfb25lX2JyZWFrcG9pbnRfbG9jYXRpb24gKHN0cnVjdCBicgog ICAgIHticF9sb25nam1wX21hc3RlciwgImxvbmdqbXAgbWFzdGVyIn0sCiAg ICAge2JwX2NhdGNocG9pbnQsICJjYXRjaHBvaW50In0sCiAgICAge2JwX3Ry YWNlcG9pbnQsICJ0cmFjZXBvaW50In0sCisgICAge2JwX2ppdF9ldmVudCwg ImppdCBldmVudHMifSwKICAgfTsKICAgCiAgIHN0YXRpYyBjaGFyIGJwZW5h Ymxlc1tdID0gIm55bm55IjsKQEAgLTM3MjEsNiArMzczMCw3IEBAIHByaW50 X29uZV9icmVha3BvaW50X2xvY2F0aW9uIChzdHJ1Y3QgYnIKICAgICAgIGNh c2UgYnBfb3ZlcmxheV9ldmVudDoKICAgICAgIGNhc2UgYnBfbG9uZ2ptcF9t YXN0ZXI6CiAgICAgICBjYXNlIGJwX3RyYWNlcG9pbnQ6CisgICAgICBjYXNl IGJwX2ppdF9ldmVudDoKIAlpZiAob3B0cy5hZGRyZXNzcHJpbnQpCiAJICB7 CiAJICAgIGFubm90YXRlX2ZpZWxkICg0KTsKQEAgLTQzNjIsNiArNDM3Miw3 IEBAIGFsbG9jYXRlX2JwX2xvY2F0aW9uIChzdHJ1Y3QgYnJlYWtwb2ludCAK ICAgICBjYXNlIGJwX3NobGliX2V2ZW50OgogICAgIGNhc2UgYnBfdGhyZWFk X2V2ZW50OgogICAgIGNhc2UgYnBfb3ZlcmxheV9ldmVudDoKKyAgICBjYXNl IGJwX2ppdF9ldmVudDoKICAgICBjYXNlIGJwX2xvbmdqbXBfbWFzdGVyOgog ICAgICAgbG9jLT5sb2NfdHlwZSA9IGJwX2xvY19zb2Z0d2FyZV9icmVha3Bv aW50OwogICAgICAgYnJlYWs7CkBAIC00NjQ0LDYgKzQ2NTUsMTcgQEAgc3Ry dWN0IGxhbmdfYW5kX3JhZGl4CiAgICAgaW50IHJhZGl4OwogICB9OwogCisv KiBDcmVhdGUgYSBicmVha3BvaW50IGZvciBKSVQgY29kZSByZWdpc3RyYXRp b24gYW5kIHVucmVnaXN0cmF0aW9uLiAgKi8KKworc3RydWN0IGJyZWFrcG9p bnQgKgorY3JlYXRlX2ppdF9ldmVudF9icmVha3BvaW50IChzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIGFkZHJlc3MpCit7CisgIHN0cnVj dCBicmVha3BvaW50ICpiOworCisgIGIgPSBjcmVhdGVfaW50ZXJuYWxfYnJl YWtwb2ludCAoZ2RiYXJjaCwgYWRkcmVzcywgYnBfaml0X2V2ZW50KTsKKyAg dXBkYXRlX2dsb2JhbF9sb2NhdGlvbl9saXN0X25vdGhyb3cgKDEpOworICBy ZXR1cm4gYjsKK30KIAogdm9pZAogcmVtb3ZlX3NvbGliX2V2ZW50X2JyZWFr cG9pbnRzICh2b2lkKQpAQCAtNTI3OSw2ICs1MzAxLDcgQEAgbWVudGlvbiAo c3RydWN0IGJyZWFrcG9pbnQgKmIpCiAgICAgICBjYXNlIGJwX3NobGliX2V2 ZW50OgogICAgICAgY2FzZSBicF90aHJlYWRfZXZlbnQ6CiAgICAgICBjYXNl IGJwX292ZXJsYXlfZXZlbnQ6CisgICAgICBjYXNlIGJwX2ppdF9ldmVudDoK ICAgICAgIGNhc2UgYnBfbG9uZ2ptcF9tYXN0ZXI6CiAJYnJlYWs7CiAgICAg ICB9CkBAIC03NTg1LDYgKzc2MDgsNyBAQCBkZWxldGVfY29tbWFuZCAoY2hh ciAqYXJnLCBpbnQgZnJvbV90dHkpCiAgICAgICB7CiAJaWYgKGItPnR5cGUg IT0gYnBfY2FsbF9kdW1teQogCSAgICAmJiBiLT50eXBlICE9IGJwX3NobGli X2V2ZW50CisJICAgICYmIGItPnR5cGUgIT0gYnBfaml0X2V2ZW50CiAJICAg ICYmIGItPnR5cGUgIT0gYnBfdGhyZWFkX2V2ZW50CiAJICAgICYmIGItPnR5 cGUgIT0gYnBfb3ZlcmxheV9ldmVudAogCSAgICAmJiBiLT50eXBlICE9IGJw X2xvbmdqbXBfbWFzdGVyCkBAIC03NjA0LDYgKzc2MjgsNyBAQCBkZWxldGVf Y29tbWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpCiAJICAgIGlmIChi LT50eXBlICE9IGJwX2NhbGxfZHVtbXkKIAkJJiYgYi0+dHlwZSAhPSBicF9z aGxpYl9ldmVudAogCQkmJiBiLT50eXBlICE9IGJwX3RocmVhZF9ldmVudAor CQkmJiBiLT50eXBlICE9IGJwX2ppdF9ldmVudAogCQkmJiBiLT50eXBlICE9 IGJwX292ZXJsYXlfZXZlbnQKIAkJJiYgYi0+dHlwZSAhPSBicF9sb25nam1w X21hc3RlcgogCQkmJiBiLT5udW1iZXIgPj0gMCkKQEAgLTc5MjYsNiArNzk1 MSw3IEBAIGJyZWFrcG9pbnRfcmVfc2V0X29uZSAodm9pZCAqYmludCkKICAg ICBjYXNlIGJwX3N0ZXBfcmVzdW1lOgogICAgIGNhc2UgYnBfbG9uZ2ptcDoK ICAgICBjYXNlIGJwX2xvbmdqbXBfcmVzdW1lOgorICAgIGNhc2UgYnBfaml0 X2V2ZW50OgogICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC03OTU0LDYgKzc5 ODAsOCBAQCBicmVha3BvaW50X3JlX3NldCAodm9pZCkKICAgc2V0X2xhbmd1 YWdlIChzYXZlX2xhbmd1YWdlKTsKICAgaW5wdXRfcmFkaXggPSBzYXZlX2lu cHV0X3JhZGl4OwogCisgIGppdF9pbmZlcmlvcl9jcmVhdGVkX2hvb2sgKCk7 CisKICAgY3JlYXRlX292ZXJsYXlfZXZlbnRfYnJlYWtwb2ludCAoIl9vdmx5 X2RlYnVnX2V2ZW50Iik7CiAgIGNyZWF0ZV9sb25nam1wX21hc3Rlcl9icmVh a3BvaW50ICgibG9uZ2ptcCIpOwogICBjcmVhdGVfbG9uZ2ptcF9tYXN0ZXJf YnJlYWtwb2ludCAoIl9sb25nam1wIik7CkluZGV4OiBnZGIvYnJlYWtwb2lu dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvYnJlYWtwb2ludC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx Ljk1CmRpZmYgLXUgLXAgLXUgLXIxLjk1IGJyZWFrcG9pbnQuaAotLS0gZ2Ri L2JyZWFrcG9pbnQuaAkyIEp1bCAyMDA5IDE3OjEyOjI0IC0wMDAwCTEuOTUK KysrIGdkYi9icmVha3BvaW50LmgJMzEgSnVsIDIwMDkgMTg6MDM6MzUgLTAw MDAKQEAgLTEyMCw2ICsxMjAsOSBAQCBlbnVtIGJwdHlwZQogICAgIGJwX2Nh dGNocG9pbnQsCiAKICAgICBicF90cmFjZXBvaW50LAorCisgICAgLyogRXZl bnQgZm9yIEpJVCBjb21waWxlZCBjb2RlIGdlbmVyYXRpb24gb3IgZGVsZXRp b24uICAqLworICAgIGJwX2ppdF9ldmVudCwKICAgfTsKIAogLyogU3RhdGVz IG9mIGVuYWJsZW1lbnQgb2YgYnJlYWtwb2ludC4gKi8KQEAgLTU0OCw2ICs1 NTEsOSBAQCBlbnVtIGJwc3RhdF93aGF0X21haW5fYWN0aW9uCiAgICAgICAg a2VlcCBjaGVja2luZy4gICovCiAgICAgQlBTVEFUX1dIQVRfQ0hFQ0tfU0hM SUJTLAogCisgICAgLyogQ2hlY2sgZm9yIG5ldyBKSVRlZCBjb2RlLiAgKi8K KyAgICBCUFNUQVRfV0hBVF9DSEVDS19KSVQsCisKICAgICAvKiBUaGlzIGlz IGp1c3QgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IGVudW1zIHRo ZXJlIGFyZS4gICovCiAgICAgQlBTVEFUX1dIQVRfTEFTVAogICB9OwpAQCAt ODQxLDYgKzg0Nyw5IEBAIGV4dGVybiB2b2lkIG1hcmtfYnJlYWtwb2ludHNf b3V0ICh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgbWFrZV9icmVha3BvaW50X3Bl cm1hbmVudCAoc3RydWN0IGJyZWFrcG9pbnQgKik7CiAKK2V4dGVybiBzdHJ1 Y3QgYnJlYWtwb2ludCAqY3JlYXRlX2ppdF9ldmVudF9icmVha3BvaW50IChz dHJ1Y3QgZ2RiYXJjaCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkVfQUREUik7CisKIGV4 dGVybiBzdHJ1Y3QgYnJlYWtwb2ludCAqY3JlYXRlX3NvbGliX2V2ZW50X2Jy ZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICosCiAJCQkJCQkJIENPUkVfQURE Uik7CiAKSW5kZXg6IGdkYi9pbmZydW4uYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2luZnJ1bi5jLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjQwMgpkaWZmIC11IC1wIC11IC1yMS40MDIg aW5mcnVuLmMKLS0tIGdkYi9pbmZydW4uYwkyMCBKdWwgMjAwOSAxNTowNTox MiAtMDAwMAkxLjQwMgorKysgZ2RiL2luZnJ1bi5jCTMxIEp1bCAyMDA5IDE4 OjAzOjM2IC0wMDAwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiZXZl bnQtdG9wLmgiCiAjaW5jbHVkZSAicmVjb3JkLmgiCiAjaW5jbHVkZSAiaW5s aW5lLWZyYW1lLmgiCisjaW5jbHVkZSAiaml0LmgiCiAKIC8qIFByb3RvdHlw ZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucyAqLwogCkBAIC01NDQsNiArNTQ1LDgg QEAgZm9sbG93X2V4ZWMgKHB0aWRfdCBwaWQsIGNoYXIgKmV4ZWNkX3BhdAog ICBzb2xpYl9jcmVhdGVfaW5mZXJpb3JfaG9vayAoKTsKICNlbmRpZgogCisg IGppdF9pbmZlcmlvcl9jcmVhdGVkX2hvb2sgKCk7CisKICAgLyogUmVpbnNl cnQgYWxsIGJyZWFrcG9pbnRzLiAgKFRob3NlIHdoaWNoIHdlcmUgc3ltYm9s aWMgaGF2ZQogICAgICBiZWVuIHJlc2V0IHRvIHRoZSBwcm9wZXIgYWRkcmVz cyBpbiB0aGUgbmV3IGEub3V0LCB0aGFua3MKICAgICAgdG8gc3ltYm9sX2Zp bGVfY29tbWFuZC4uLikgKi8KQEAgLTM1MjksNiArMzUzMiwyMiBAQCBpbmZy dW46IEJQU1RBVF9XSEFUX1NFVF9MT05HSk1QX1JFU1VNRSAoCiAJfQogCWJy ZWFrOwogCisgICAgICBjYXNlIEJQU1RBVF9XSEFUX0NIRUNLX0pJVDoKKyAg ICAgICAgaWYgKGRlYnVnX2luZnJ1bikKKyAgICAgICAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJpbmZydW46IEJQU1RBVF9XSEFUX0NI RUNLX0pJVFxuIik7CisKKyAgICAgICAgLyogU3dpdGNoIHRlcm1pbmFsIGZv ciBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgYnJlYWtwb2ludF9yZV9zZXQu ICAqLworICAgICAgICB0YXJnZXRfdGVybWluYWxfb3Vyc19mb3Jfb3V0cHV0 ICgpOworCisgICAgICAgIGppdF9ldmVudF9oYW5kbGVyICgpOworCisgICAg ICAgIHRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKworICAgICAgICAv KiBXZSB3YW50IHRvIHN0ZXAgb3ZlciB0aGlzIGJyZWFrcG9pbnQsIHRoZW4g a2VlcCBnb2luZy4gICovCisgICAgICAgIGVjcy0+ZXZlbnRfdGhyZWFkLT5z dGVwcGluZ19vdmVyX2JyZWFrcG9pbnQgPSAxOworCisgICAgICAgIGJyZWFr OworCiAgICAgICBjYXNlIEJQU1RBVF9XSEFUX0xBU1Q6CiAJLyogTm90IGEg cmVhbCBjb2RlLCBidXQgbGlzdGVkIGhlcmUgdG8gc2h1dCB1cCBnY2MgLVdh bGwuICAqLwogCkluZGV4OiBnZGIvaml0LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogZ2RiL2ppdC5jCmRpZmYgLU4gZ2RiL2ppdC5jCi0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgZ2Ri L2ppdC5jCTMxIEp1bCAyMDA5IDE4OjAzOjM2IC0wMDAwCkBAIC0wLDAgKzEs NDMwIEBACisvKiBIYW5kbGUgSklUIGNvZGUgZ2VuZXJhdGlvbiBpbiB0aGUg aW5mZXJpb3IgZm9yIEdEQiwgdGhlIEdOVSBEZWJ1Z2dlci4KKworICAgQ29w eXJpZ2h0IChDKSAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiZGVmcy5oIgor CisjaW5jbHVkZSAiaml0LmgiCisjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgor I2luY2x1ZGUgImdkYmNvcmUuaCIKKyNpbmNsdWRlICJvYnNlcnZlci5oIgor I2luY2x1ZGUgIm9iamZpbGVzLmgiCisjaW5jbHVkZSAic3ltZmlsZS5oIgor I2luY2x1ZGUgInN5bXRhYi5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2lu Y2x1ZGUgImdkYl9zdGF0LmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Jq ZmlsZV9kYXRhICpqaXRfb2JqZmlsZV9kYXRhOworCitzdGF0aWMgY29uc3Qg Y2hhciAqY29uc3Qgaml0X2JyZWFrX25hbWUgPSAiX19qaXRfZGVidWdfcmVn aXN0ZXJfY29kZSI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBqaXRf ZGVzY3JpcHRvcl9uYW1lID0gIl9faml0X2RlYnVnX2Rlc2NyaXB0b3IiOwor CisvKiBUaGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBKSVQgZGVzY3JpcHRv ciBpbiB0aGUgaW5mZXJpb3IuICAqLworCitzdGF0aWMgQ09SRV9BRERSIGpp dF9kZXNjcmlwdG9yX2FkZHIgPSAwOworCitzdHJ1Y3QgdGFyZ2V0X2J1ZmZl cgoreworICBDT1JFX0FERFIgYmFzZTsKKyAgc2l6ZV90IHNpemU7Cit9Owor CisvKiBPcGVubmluZyB0aGUgZmlsZSBpcyBhIG5vLW9wLiAgKi8KKworc3Rh dGljIHZvaWQgKgorbWVtX2JmZF9pb3ZlY19vcGVuIChzdHJ1Y3QgYmZkICph YmZkLCB2b2lkICpvcGVuX2Nsb3N1cmUpCit7CisgIHJldHVybiBvcGVuX2Ns b3N1cmU7Cit9CisKKy8qIENsb3NpbmcgdGhlIGZpbGUgaXMganVzdCBmcmVl aW5nIHRoZSBiYXNlL3NpemUgcGFpciBvbiBvdXIgc2lkZS4gICovCisKK3N0 YXRpYyBpbnQKK21lbV9iZmRfaW92ZWNfY2xvc2UgKHN0cnVjdCBiZmQgKmFi ZmQsIHZvaWQgKnN0cmVhbSkKK3sKKyAgeGZyZWUgKHN0cmVhbSk7CisgIHJl dHVybiAxOworfQorCisvKiBGb3IgcmVhZGluZyB0aGUgZmlsZSwgd2UganVz dCBuZWVkIHRvIHBhc3MgdGhyb3VnaCB0byB0YXJnZXRfcmVhZF9tZW1vcnkg YW5kCisgICBmaXggdXAgdGhlIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVl cy4gICovCisKK3N0YXRpYyBmaWxlX3B0cgorbWVtX2JmZF9pb3ZlY19wcmVh ZCAoc3RydWN0IGJmZCAqYWJmZCwgdm9pZCAqc3RyZWFtLCB2b2lkICpidWYs CisgICAgICAgICAgICAgICAgICAgICBmaWxlX3B0ciBuYnl0ZXMsIGZpbGVf cHRyIG9mZnNldCkKK3sKKyAgaW50IGVycjsKKyAgc3RydWN0IHRhcmdldF9i dWZmZXIgKmJ1ZmZlciA9IChzdHJ1Y3QgdGFyZ2V0X2J1ZmZlciAqKSBzdHJl YW07CisKKyAgLyogSWYgdGhpcyByZWFkIHdpbGwgcmVhZCBhbGwgb2YgdGhl IGZpbGUsIGxpbWl0IGl0IHRvIGp1c3QgdGhlIHJlc3QuICAqLworICBpZiAo b2Zmc2V0ICsgbmJ5dGVzID4gYnVmZmVyLT5zaXplKQorICAgIG5ieXRlcyA9 IGJ1ZmZlci0+c2l6ZSAtIG9mZnNldDsKKworICAvKiBJZiB0aGVyZSBhcmUg bm8gbW9yZSBieXRlcyBsZWZ0LCB3ZSd2ZSByZWFjaGVkIEVPRi4gICovCisg IGlmIChuYnl0ZXMgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBlcnIgPSB0 YXJnZXRfcmVhZF9tZW1vcnkgKGJ1ZmZlci0+YmFzZSArIG9mZnNldCwgKGdk Yl9ieXRlICopIGJ1ZiwgbmJ5dGVzKTsKKyAgaWYgKGVycikKKyAgICByZXR1 cm4gLTE7CisKKyAgcmV0dXJuIG5ieXRlczsKK30KKworLyogRm9yIHN0YXR0 aW5nIHRoZSBmaWxlLCB3ZSBvbmx5IHN1cHBvcnQgdGhlIHN0X3NpemUgYXR0 cmlidXRlLiAgKi8gCisKK3N0YXRpYyBpbnQKK21lbV9iZmRfaW92ZWNfc3Rh dCAoc3RydWN0IGJmZCAqYWJmZCwgdm9pZCAqc3RyZWFtLCBzdHJ1Y3Qgc3Rh dCAqc2IpCit7CisgIHN0cnVjdCB0YXJnZXRfYnVmZmVyICpidWZmZXIgPSAo c3RydWN0IHRhcmdldF9idWZmZXIqKSBzdHJlYW07CisKKyAgc2ItPnN0X3Np emUgPSBidWZmZXItPnNpemU7CisgIHJldHVybiAwOworfQorCisvKiBPcGVu IGEgQkZEIGZyb20gdGhlIHRhcmdldCdzIG1lbW9yeS4gICovCisKK3N0YXRp YyBzdHJ1Y3QgYmZkICoKK2JmZF9vcGVuX2Zyb21fdGFyZ2V0X21lbW9yeSAo Q09SRV9BRERSIGFkZHIsIHNpemVfdCBzaXplLCBjaGFyICp0YXJnZXQpCit7 CisgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0geHN0cmR1cCAoIjxpbi1tZW1v cnk+Iik7CisgIHN0cnVjdCB0YXJnZXRfYnVmZmVyICpidWZmZXIgPSB4bWFs bG9jIChzaXplb2YgKHN0cnVjdCB0YXJnZXRfYnVmZmVyKSk7CisKKyAgYnVm ZmVyLT5iYXNlID0gYWRkcjsKKyAgYnVmZmVyLT5zaXplID0gc2l6ZTsKKyAg cmV0dXJuIGJmZF9vcGVucl9pb3ZlYyAoZmlsZW5hbWUsIHRhcmdldCwKKwkJ CSAgbWVtX2JmZF9pb3ZlY19vcGVuLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBidWZmZXIsCisJCQkgIG1lbV9iZmRfaW92ZWNfcHJlYWQsCisJCQkg IG1lbV9iZmRfaW92ZWNfY2xvc2UsCisJCQkgIG1lbV9iZmRfaW92ZWNfc3Rh dCk7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUg Z2xvYmFsIEpJVCBkZXNjcmlwdG9yIGZyb20gcmVtb3RlIG1lbW9yeS4gICov CisKK3N0YXRpYyB2b2lkCitqaXRfcmVhZF9kZXNjcmlwdG9yIChzdHJ1Y3Qg aml0X2Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IpCit7CisgIGludCBlcnI7Cisg IHN0cnVjdCB0eXBlICpwdHJfdHlwZTsKKyAgaW50IHB0cl9zaXplOworICBp bnQgZGVzY19zaXplOworICBnZGJfYnl0ZSAqZGVzY19idWY7CisgIGVudW0g YmZkX2VuZGlhbiBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyICh0 YXJnZXRfZ2RiYXJjaCk7CisKKyAgLyogRmlndXJlIG91dCBob3cgYmlnIHRo ZSBkZXNjcmlwdG9yIGlzIG9uIHRoZSByZW1vdGUgYW5kIGhvdyB0byByZWFk IGl0LiAgKi8KKyAgcHRyX3R5cGUgPSBidWlsdGluX3R5cGUgKHRhcmdldF9n ZGJhcmNoKS0+YnVpbHRpbl9kYXRhX3B0cjsKKyAgcHRyX3NpemUgPSBUWVBF X0xFTkdUSCAocHRyX3R5cGUpOworICBkZXNjX3NpemUgPSA4ICsgMiAqIHB0 cl9zaXplOyAgLyogVHdvIDMyLWJpdCBpbnRzIGFuZCB0d28gcG9pbnRlcnMu ICAqLworICBkZXNjX2J1ZiA9IGFsbG9jYSAoZGVzY19zaXplKTsKKworICAv KiBSZWFkIHRoZSBkZXNjcmlwdG9yLiAgKi8KKyAgZXJyID0gdGFyZ2V0X3Jl YWRfbWVtb3J5IChqaXRfZGVzY3JpcHRvcl9hZGRyLCBkZXNjX2J1ZiwgZGVz Y19zaXplKTsKKyAgaWYgKGVycikKKyAgICBlcnJvciAoXygiVW5hYmxlIHRv IHJlYWQgSklUIGRlc2NyaXB0b3IgZnJvbSByZW1vdGUgbWVtb3J5ISIpKTsK KworICAvKiBGaXggdGhlIGVuZGlhbm5lc3MgdG8gbWF0Y2ggdGhlIGhvc3Qu ICAqLworICBkZXNjcmlwdG9yLT52ZXJzaW9uID0gZXh0cmFjdF91bnNpZ25l ZF9pbnRlZ2VyICgmZGVzY19idWZbMF0sIDQsIGJ5dGVfb3JkZXIpOworICBk ZXNjcmlwdG9yLT5hY3Rpb25fZmxhZyA9CisgICAgICBleHRyYWN0X3Vuc2ln bmVkX2ludGVnZXIgKCZkZXNjX2J1Zls0XSwgNCwgYnl0ZV9vcmRlcik7Cisg IGRlc2NyaXB0b3ItPnJlbGV2YW50X2VudHJ5ID0gZXh0cmFjdF90eXBlZF9h ZGRyZXNzICgmZGVzY19idWZbOF0sIHB0cl90eXBlKTsKKyAgZGVzY3JpcHRv ci0+Zmlyc3RfZW50cnkgPQorICAgICAgZXh0cmFjdF90eXBlZF9hZGRyZXNz ICgmZGVzY19idWZbOCArIHB0cl9zaXplXSwgcHRyX3R5cGUpOworfQorCisv KiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlYWRpbmcgYSBKSVRlZCBjb2RlIGVu dHJ5IGZyb20gcmVtb3RlIG1lbW9yeS4gICovCisKK3N0YXRpYyB2b2lkCitq aXRfcmVhZF9jb2RlX2VudHJ5IChDT1JFX0FERFIgY29kZV9hZGRyLCBzdHJ1 Y3Qgaml0X2NvZGVfZW50cnkgKmNvZGVfZW50cnkpCit7CisgIGludCBlcnI7 CisgIHN0cnVjdCB0eXBlICpwdHJfdHlwZTsKKyAgaW50IHB0cl9zaXplOwor ICBpbnQgZW50cnlfc2l6ZTsKKyAgZ2RiX2J5dGUgKmVudHJ5X2J1ZjsKKyAg ZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3Jk ZXIgKHRhcmdldF9nZGJhcmNoKTsKKworICAvKiBGaWd1cmUgb3V0IGhvdyBi aWcgdGhlIGVudHJ5IGlzIG9uIHRoZSByZW1vdGUgYW5kIGhvdyB0byByZWFk IGl0LiAgKi8KKyAgcHRyX3R5cGUgPSBidWlsdGluX3R5cGUgKHRhcmdldF9n ZGJhcmNoKS0+YnVpbHRpbl9kYXRhX3B0cjsKKyAgcHRyX3NpemUgPSBUWVBF X0xFTkdUSCAocHRyX3R5cGUpOworICBlbnRyeV9zaXplID0gMyAqIHB0cl9z aXplICsgODsgIC8qIFRocmVlIHBvaW50ZXJzIGFuZCBvbmUgNjQtYml0IGlu dC4gICovCisgIGVudHJ5X2J1ZiA9IGFsbG9jYSAoZW50cnlfc2l6ZSk7CisK KyAgLyogUmVhZCB0aGUgZW50cnkuICAqLworICBlcnIgPSB0YXJnZXRfcmVh ZF9tZW1vcnkgKGNvZGVfYWRkciwgZW50cnlfYnVmLCBlbnRyeV9zaXplKTsK KyAgaWYgKGVycikKKyAgICBlcnJvciAoXygiVW5hYmxlIHRvIHJlYWQgSklU IGNvZGUgZW50cnkgZnJvbSByZW1vdGUgbWVtb3J5ISIpKTsKKworICAvKiBG aXggdGhlIGVuZGlhbm5lc3MgdG8gbWF0Y2ggdGhlIGhvc3QuICAqLworICBw dHJfdHlwZSA9IGJ1aWx0aW5fdHlwZSAodGFyZ2V0X2dkYmFyY2gpLT5idWls dGluX2RhdGFfcHRyOworICBjb2RlX2VudHJ5LT5uZXh0X2VudHJ5ID0gZXh0 cmFjdF90eXBlZF9hZGRyZXNzICgmZW50cnlfYnVmWzBdLCBwdHJfdHlwZSk7 CisgIGNvZGVfZW50cnktPnByZXZfZW50cnkgPQorICAgICAgZXh0cmFjdF90 eXBlZF9hZGRyZXNzICgmZW50cnlfYnVmW3B0cl9zaXplXSwgcHRyX3R5cGUp OworICBjb2RlX2VudHJ5LT5zeW1maWxlX2FkZHIgPQorICAgICAgZXh0cmFj dF90eXBlZF9hZGRyZXNzICgmZW50cnlfYnVmWzIgKiBwdHJfc2l6ZV0sIHB0 cl90eXBlKTsKKyAgY29kZV9lbnRyeS0+c3ltZmlsZV9zaXplID0KKyAgICAg IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoJmVudHJ5X2J1ZlszICogcHRy X3NpemVdLCA4LCBieXRlX29yZGVyKTsKK30KKworLyogVGhpcyBmdW5jdGlv biByZWdpc3RlcnMgY29kZSBhc3NvY2lhdGVkIHdpdGggYSBKSVQgY29kZSBl bnRyeS4gIEl0IHVzZXMgdGhlCisgICBwb2ludGVyIGFuZCBzaXplIHBhaXIg aW4gdGhlIGVudHJ5IHRvIHJlYWQgdGhlIHN5bWJvbCBmaWxlIGZyb20gdGhl IHJlbW90ZQorICAgYW5kIHRoZW4gY2FsbHMgc3ltYm9sX2ZpbGVfYWRkX2Zy b21fbG9jYWxfbWVtb3J5IHRvIGFkZCBpdCBhcyB0aG91Z2ggaXQgd2VyZQor ICAgYSBzeW1ib2wgZmlsZSBhZGRlZCBieSB0aGUgdXNlci4gICovCisKK3N0 YXRpYyB2b2lkCitqaXRfcmVnaXN0ZXJfY29kZSAoQ09SRV9BRERSIGVudHJ5 X2FkZHIsIHN0cnVjdCBqaXRfY29kZV9lbnRyeSAqY29kZV9lbnRyeSkKK3sK KyAgYmZkICpuYmZkOworICBzdHJ1Y3Qgc2VjdGlvbl9hZGRyX2luZm8gKnNh aTsKKyAgc3RydWN0IGJmZF9zZWN0aW9uICpzZWM7CisgIHN0cnVjdCBvYmpm aWxlICpvYmpmaWxlOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBz OworICBpbnQgaTsKKyAgY29uc3Qgc3RydWN0IGJmZF9hcmNoX2luZm8gKmI7 CisgIENPUkVfQUREUiAqZW50cnlfYWRkcl9wdHI7CisKKyAgbmJmZCA9IGJm ZF9vcGVuX2Zyb21fdGFyZ2V0X21lbW9yeSAoY29kZV9lbnRyeS0+c3ltZmls ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb2RlX2VudHJ5LT5zeW1maWxlX3NpemUsIGdudXRhcmdldCk7CisgIG9s ZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cF9iZmRfY2xvc2UgKG5iZmQpOwor CisgIC8qIENoZWNrIHRoZSBmb3JtYXQuICBOT1RFOiBUaGlzIGluaXRpYWxp emVzIGltcG9ydGFudCBkYXRhIHRoYXQgR0RCIHVzZXMhCisgICAgIFdlIHdv dWxkIHNlZ2ZhdWx0IGxhdGVyIHdpdGhvdXQgdGhpcyBsaW5lLiAgKi8KKyAg aWYgKCFiZmRfY2hlY2tfZm9ybWF0IChuYmZkLCBiZmRfb2JqZWN0KSkKKyAg ICB7CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiXAorSklUZWQgc3lt Ym9sIGZpbGUgaXMgbm90IGFuIG9iamVjdCBmaWxlLCBpZ25vcmluZyBpdC5c biIpKTsKKyAgICAgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworICAg ICAgcmV0dXJuOworICAgIH0KKworICAvKiBDaGVjayBiZmQgYXJjaC4gICov CisgIGIgPSBnZGJhcmNoX2JmZF9hcmNoX2luZm8gKHRhcmdldF9nZGJhcmNo KTsKKyAgaWYgKGItPmNvbXBhdGlibGUgKGIsIGJmZF9nZXRfYXJjaF9pbmZv IChuYmZkKSkgIT0gYikKKyAgICB3YXJuaW5nIChfKCJKSVRlZCBvYmplY3Qg ZmlsZSBhcmNoaXRlY3R1cmUgJXMgaXMgbm90IGNvbXBhdGlibGUgIgorICAg ICAgICAgICAgICAgIndpdGggdGFyZ2V0IGFyY2hpdGVjdHVyZSAlcy4iKSwg YmZkX2dldF9hcmNoX2luZm8KKyAgICAgICAgICAgICAobmJmZCktPnByaW50 YWJsZV9uYW1lLCBiLT5wcmludGFibGVfbmFtZSk7CisKKyAgLyogUmVhZCB0 aGUgc2VjdGlvbiBhZGRyZXNzIGluZm9ybWF0aW9uIG91dCBvZiB0aGUgc3lt Ym9sIGZpbGUuICBTaW5jZSB0aGUKKyAgICAgZmlsZSBpcyBnZW5lcmF0ZWQg YnkgdGhlIEpJVCBhdCBydW50aW1lLCBpdCBzaG91bGQgYWxsIG9mIHRoZSBh YnNvbHV0ZQorICAgICBhZGRyZXNzZXMgdGhhdCB3ZSBjYXJlIGFib3V0LiAg Ki8KKyAgc2FpID0gYWxsb2Nfc2VjdGlvbl9hZGRyX2luZm8gKGJmZF9jb3Vu dF9zZWN0aW9ucyAobmJmZCkpOworICBtYWtlX2NsZWFudXBfZnJlZV9zZWN0 aW9uX2FkZHJfaW5mbyAoc2FpKTsKKyAgaSA9IDA7CisgIGZvciAoc2VjID0g bmJmZC0+c2VjdGlvbnM7IHNlYyAhPSBOVUxMOyBzZWMgPSBzZWMtPm5leHQp CisgICAgaWYgKChiZmRfZ2V0X3NlY3Rpb25fZmxhZ3MgKG5iZmQsIHNlYykg JiAoU0VDX0FMTE9DfFNFQ19MT0FEKSkgIT0gMCkKKyAgICAgIHsKKyAgICAg ICAgLyogV2UgYXNzdW1lIHRoYXQgdGhlc2UgdmlydHVhbCBhZGRyZXNzZXMg YXJlIGFic29sdXRlLCBhbmQgZG8gbm90CisgICAgICAgICAgIHRyZWF0IHRo ZW0gYXMgb2Zmc2V0cy4gICovCisJc2FpLT5vdGhlcltpXS5hZGRyID0gYmZk X2dldF9zZWN0aW9uX3ZtYSAobmJmZCwgc2VjKTsKKwlzYWktPm90aGVyW2ld Lm5hbWUgPSAoY2hhciAqKSBiZmRfZ2V0X3NlY3Rpb25fbmFtZSAobmJmZCwg c2VjKTsKKwlzYWktPm90aGVyW2ldLnNlY3RpbmRleCA9IHNlYy0+aW5kZXg7 CisJKytpOworICAgICAgfQorCisgIC8qIFRoaXMgY2FsbCB0YWtlcyBvd25l cnNoaXAgb2Ygc2FpLiAgKi8KKyAgb2JqZmlsZSA9IHN5bWJvbF9maWxlX2Fk ZF9mcm9tX2JmZCAobmJmZCwgMCwgc2FpLCBPQkpGX1NIQVJFRCk7CisKKyAg LyogUmVtZW1iZXIgYSBtYXBwaW5nIGZyb20gZW50cnlfYWRkciB0byBvYmpm aWxlLiAgKi8KKyAgZW50cnlfYWRkcl9wdHIgPSB4bWFsbG9jIChzaXplb2Yg KENPUkVfQUREUikpOworICAqZW50cnlfYWRkcl9wdHIgPSBlbnRyeV9hZGRy OworICBzZXRfb2JqZmlsZV9kYXRhIChvYmpmaWxlLCBqaXRfb2JqZmlsZV9k YXRhLCBlbnRyeV9hZGRyX3B0cik7CisKKyAgZGlzY2FyZF9jbGVhbnVwcyAo b2xkX2NsZWFudXBzKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB1bnJlZ2lz dGVycyBKSVRlZCBjb2RlIGFuZCBmcmVlcyB0aGUgY29ycmVzcG9uZGluZyBv YmpmaWxlLiAgKi8KKworc3RhdGljIHZvaWQKK2ppdF91bnJlZ2lzdGVyX2Nv ZGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQoreworICBmcmVlX29iamZp bGUgKG9iamZpbGUpOworfQorCisvKiBIZWxwZXIgY2xlYW51cCBmdW5jdGlv biB0byBjbGVhciBhbiBpbnRlZ2VyIGZsYWcuICAqLworCit2b2lkCitjbGVh cl9pbnQgKHZvaWQgKmludF9hZGRyKQoreworICAqKChpbnQgKikgaW50X2Fk ZHIpID0gMDsKK30KKworLyogTG9vayB1cCB0aGUgb2JqZmlsZSB3aXRoIHRo aXMgY29kZSBlbnRyeSBhZGRyZXNzLiAgKi8KKworc3RhdGljIHN0cnVjdCBv YmpmaWxlICoKK2ppdF9maW5kX29iamZfd2l0aF9lbnRyeV9hZGRyIChDT1JF X0FERFIgZW50cnlfYWRkcikKK3sKKyAgc3RydWN0IG9iamZpbGUgKm9iamY7 CisgIHN0cnVjdCBvYmpmaWxlICp0ZW1wOworICBDT1JFX0FERFIgKm9iamZf ZW50cnlfYWRkcjsKKworICBBTExfT0JKRklMRVNfU0FGRSAob2JqZiwgdGVt cCkKKyAgICB7CisgICAgICBvYmpmX2VudHJ5X2FkZHIgPSAoQ09SRV9BRERS ICopIG9iamZpbGVfZGF0YSAob2JqZiwgaml0X29iamZpbGVfZGF0YSk7Cisg ICAgICBpZiAob2JqZl9lbnRyeV9hZGRyICE9IE5VTEwgJiYgKm9iamZfZW50 cnlfYWRkciA9PSBlbnRyeV9hZGRyKQorICAgICAgICByZXR1cm4gb2JqZjsK KyAgICB9CisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitqaXRfaW5mZXJp b3JfY3JlYXRlZF9ob29rICh2b2lkKQoreworICBzdHJ1Y3QgbWluaW1hbF9z eW1ib2wgKnJlZ19zeW1ib2w7CisgIHN0cnVjdCBtaW5pbWFsX3N5bWJvbCAq ZGVzY19zeW1ib2w7CisgIENPUkVfQUREUiByZWdfYWRkcjsKKyAgc3RydWN0 IGppdF9kZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgIHN0cnVjdCBqaXRfY29k ZV9lbnRyeSBjdXJfZW50cnk7CisgIENPUkVfQUREUiBjdXJfZW50cnlfYWRk cjsKKyAgc3RhdGljIGludCBhbHJlYWR5X2VudGVyZWQ7CisgIHN0cnVjdCBj bGVhbnVwICpvbGRfY2xlYW51cHM7CisKKyAgLyogV2hlbiB3ZSByZWdpc3Rl ciBjb2RlIGRvd24gdGhlcmUsIEdEQiByZXNldHMgaXRzIGJyZWFrcG9pbnRz IGluIGNhc2UKKyAgICAgc3ltYm9scyBoYXZlIGNoYW5nZWQuICBUaGF0IGlu IHR1cm4gY2FsbHMgdGhpcyBoYW5kbGVyLCB3aGljaCBtYWtlcyB1cyBsb29r CisgICAgIGZvciBuZXcgY29kZSBhZ2Fpbi4gIFRoZXJlJ3Mgbm90aGluZyB3 cm9uZyB3aXRoIHRoYXQgYmVjYXVzZSB3ZSB3b24ndCBmaW5kCisgICAgIGFu eSBuZXcgY29kZSwgYnV0IGl0IG1ha2VzIGFuIE8obl40KSBsb29wLiAgVGhl cmVmb3JlIHdlIGRvIG5vdGhpbmcgaWYKKyAgICAgd2UncmUgcmUtZW50ZXJl ZC4gICovCisgIGlmIChhbHJlYWR5X2VudGVyZWQpCisgICAgcmV0dXJuOwor ICBhbHJlYWR5X2VudGVyZWQgPSAxOworICBvbGRfY2xlYW51cHMgPSBtYWtl X2NsZWFudXAgKGNsZWFyX2ludCwgJmFscmVhZHlfZW50ZXJlZCk7CisKKyAg LyogTG9va3VwIHRoZSByZWdpc3RyYXRpb24gc3ltYm9sLiAgSWYgaXQgaXMg bWlzc2luZywgdGhlbiB3ZSBhc3N1bWUgd2UgYXJlCisgICAgIG5vdCBhdHRh Y2hlZCB0byBhIEpJVC4gICovCisgIHJlZ19zeW1ib2wgPSBsb29rdXBfbWlu aW1hbF9zeW1ib2wgKGppdF9icmVha19uYW1lLCBOVUxMLCBOVUxMKTsKKyAg aWYgKHJlZ19zeW1ib2wgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIHJlZ19h ZGRyID0gU1lNQk9MX1ZBTFVFX0FERFJFU1MgKHJlZ19zeW1ib2wpOworICBp ZiAocmVnX2FkZHIgPT0gMCkKKyAgICByZXR1cm47CisKKyAgLyogTG9va3Vw IHRoZSBkZXNjcmlwdG9yIHN5bWJvbCBhbmQgY2FjaGUgdGhlIGFkZHIuICBJ ZiBpdCBpcyBtaXNzaW5nLCB3ZQorICAgICBhc3N1bWUgd2UgYXJlIG5vdCBh dHRhY2hlZCB0byBhIEpJVCBhbmQgcmV0dXJuIGVhcmx5LiAgKi8KKyAgZGVz Y19zeW1ib2wgPSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKGppdF9kZXNjcmlw dG9yX25hbWUsIE5VTEwsIE5VTEwpOworICBpZiAoZGVzY19zeW1ib2wgPT0g TlVMTCkKKyAgICByZXR1cm47CisgIGppdF9kZXNjcmlwdG9yX2FkZHIgPSBT WU1CT0xfVkFMVUVfQUREUkVTUyAoZGVzY19zeW1ib2wpOworICBpZiAoaml0 X2Rlc2NyaXB0b3JfYWRkciA9PSAwKQorICAgIHJldHVybjsKKworICAvKiBS ZWFkIHRoZSBkZXNjcmlwdG9yIHNvIHdlIGNhbiBjaGVjayB0aGUgdmVyc2lv biBudW1iZXIgYW5kIGxvYWQgYW55IGFscmVhZHkKKyAgICAgSklUZWQgZnVu Y3Rpb25zLiAgKi8KKyAgaml0X3JlYWRfZGVzY3JpcHRvciAoJmRlc2NyaXB0 b3IpOworCisgIC8qIENoZWNrIHRoYXQgdGhlIHZlcnNpb24gbnVtYmVyIGFn cmVlcyB3aXRoIHRoYXQgd2Ugc3VwcG9ydC4gICovCisgIGlmIChkZXNjcmlw dG9yLnZlcnNpb24gIT0gMSkKKyAgICBlcnJvciAoXygiVW5zdXBwb3J0ZWQg SklUIHByb3RvY29sIHZlcnNpb24gaW4gZGVzY3JpcHRvciEiKSk7CisKKyAg LyogUHV0IGEgYnJlYWtwb2ludCBpbiB0aGUgcmVnaXN0cmF0aW9uIHN5bWJv bC4gICovCisgIGNyZWF0ZV9qaXRfZXZlbnRfYnJlYWtwb2ludCAodGFyZ2V0 X2dkYmFyY2gsIHJlZ19hZGRyKTsKKworICAvKiBJZiB3ZSd2ZSBhdHRhY2hl ZCB0byBhIHJ1bm5pbmcgcHJvZ3JhbSwgd2UgbmVlZCB0byBjaGVjayB0aGUg ZGVzY3JpcHRvciB0bworICAgICByZWdpc3RlciBhbnkgZnVuY3Rpb25zIHRo YXQgd2VyZSBhbHJlYWR5IGdlbmVyYXRlZC4gICovCisgIGZvciAoY3VyX2Vu dHJ5X2FkZHIgPSBkZXNjcmlwdG9yLmZpcnN0X2VudHJ5OworICAgICAgIGN1 cl9lbnRyeV9hZGRyICE9IDA7CisgICAgICAgY3VyX2VudHJ5X2FkZHIgPSBj dXJfZW50cnkubmV4dF9lbnRyeSkKKyAgICB7CisgICAgICBqaXRfcmVhZF9j b2RlX2VudHJ5IChjdXJfZW50cnlfYWRkciwgJmN1cl9lbnRyeSk7CisKKyAg ICAgIC8qIFRoaXMgaG9vayBtYXkgYmUgY2FsbGVkIG1hbnkgdGltZXMgZHVy aW5nIHNldHVwLCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3QKKyAgICAgICAgIGFk ZCB0aGUgc2FtZSBzeW1ib2wgZmlsZSB0d2ljZS4gICovCisgICAgICBpZiAo aml0X2ZpbmRfb2JqZl93aXRoX2VudHJ5X2FkZHIgKGN1cl9lbnRyeV9hZGRy KSAhPSBOVUxMKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgaml0X3Jl Z2lzdGVyX2NvZGUgKGN1cl9lbnRyeV9hZGRyLCAmY3VyX2VudHJ5KTsKKyAg ICB9CisKKyAgLyogQ2xlYXIgdGhlIGFscmVhZHlfZW50ZXJlZCBmbGFnLiAg Ki8KKyAgZG9fY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7Cit9CisKKy8qIFdy YXBwZXIgdG8gbWF0Y2ggdGhlIG9ic2VydmVyIGZ1bmN0aW9uIHBvaW50ZXIg cHJvdG90eXBlLiAgKi8KKworc3RhdGljIHZvaWQKK2ppdF9pbmZlcmlvcl9j cmVhdGVkX2hvb2sxIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb2JqZmlsZSwgaW50 IGZyb21fdHR5KQoreworICBqaXRfaW5mZXJpb3JfY3JlYXRlZF9ob29rICgp OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhbnkgY29kZSBl bnRyaWVzIGxlZnQgb3ZlciB3aGVuIHRoZSBpbmZlcmlvciBleGl0cy4KKyAg IFdlIGdldCBsZWZ0IG92ZXIgY29kZSB3aGVuIHRoZSBpbmZlcmlvciBleGl0 cyB3aXRob3V0IHVucmVnaXN0ZXJpbmcgaXRzIGNvZGUsCisgICBmb3IgZXhh bXBsZSB3aGVuIGl0IGNyYXNoZXMuICAqLworCitzdGF0aWMgdm9pZAoraml0 X2luZmVyaW9yX2V4aXRfaG9vayAoaW50IHBpZCkKK3sKKyAgc3RydWN0IG9i amZpbGUgKm9iamY7CisgIHN0cnVjdCBvYmpmaWxlICp0ZW1wOworCisgIC8q IFdlIG5lZWQgdG8gcmVzZXQgdGhlIGRlc2NyaXB0b3IgYWRkciBzbyB0aGF0 IG5leHQgdGltZSB3ZSBsb2FkIHVwIHRoZQorICAgICBpbmZlcmlvciB3ZSBs b29rIGZvciBpdCBhZ2Fpbi4gICovCisgIGppdF9kZXNjcmlwdG9yX2FkZHIg PSAwOworCisgIEFMTF9PQkpGSUxFU19TQUZFIChvYmpmLCB0ZW1wKQorICAg IGlmIChvYmpmaWxlX2RhdGEgKG9iamYsIGppdF9vYmpmaWxlX2RhdGEpICE9 IE5VTEwpCisgICAgICBqaXRfdW5yZWdpc3Rlcl9jb2RlIChvYmpmKTsKK30K Kwordm9pZAoraml0X2V2ZW50X2hhbmRsZXIgKHZvaWQpCit7CisgIHN0cnVj dCBqaXRfZGVzY3JpcHRvciBkZXNjcmlwdG9yOworICBzdHJ1Y3Qgaml0X2Nv ZGVfZW50cnkgY29kZV9lbnRyeTsKKyAgQ09SRV9BRERSIGVudHJ5X2FkZHI7 CisgIHN0cnVjdCBvYmpmaWxlICpvYmpmOworCisgIC8qIFJlYWQgdGhlIGRl c2NyaXB0b3IgZnJvbSByZW1vdGUgbWVtb3J5LiAgKi8KKyAgaml0X3JlYWRf ZGVzY3JpcHRvciAoJmRlc2NyaXB0b3IpOworICBlbnRyeV9hZGRyID0gZGVz Y3JpcHRvci5yZWxldmFudF9lbnRyeTsKKworICAvKiBEbyB0aGUgY29ycmVz cG9uZGluZyBhY3Rpb24uICovCisgIHN3aXRjaCAoZGVzY3JpcHRvci5hY3Rp b25fZmxhZykKKyAgICB7CisgICAgY2FzZSBKSVRfTk9BQ1RJT046CisgICAg ICBicmVhazsKKyAgICBjYXNlIEpJVF9SRUdJU1RFUjoKKyAgICAgIGppdF9y ZWFkX2NvZGVfZW50cnkgKGVudHJ5X2FkZHIsICZjb2RlX2VudHJ5KTsKKyAg ICAgIGppdF9yZWdpc3Rlcl9jb2RlIChlbnRyeV9hZGRyLCAmY29kZV9lbnRy eSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpJVF9VTlJFR0lTVEVSOgor ICAgICAgb2JqZiA9IGppdF9maW5kX29iamZfd2l0aF9lbnRyeV9hZGRyIChl bnRyeV9hZGRyKTsKKyAgICAgIGlmIChvYmpmID09IE5VTEwpCisgICAgICAg IHByaW50Zl91bmZpbHRlcmVkICgiVW5hYmxlIHRvIGZpbmQgSklUZWQgY29k ZSBlbnRyeSBhdCBhZGRyZXNzOiAlcFxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICh2b2lkICopIGVudHJ5X2FkZHIpOworICAgICAgZWxzZQor ICAgICAgICBqaXRfdW5yZWdpc3Rlcl9jb2RlIChvYmpmKTsKKworICAgICAg YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVycm9yIChfKCJVbmtub3du IGFjdGlvbl9mbGFnIHZhbHVlIGluIEpJVCBkZXNjcmlwdG9yISIpKTsKKyAg ICAgIGJyZWFrOworICAgIH0KK30KKworLyogUHJvdmlkZSBhIHByb3RvdHlw ZSB0byBzaWxlbmNlIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKworZXh0 ZXJuIHZvaWQgX2luaXRpYWxpemVfaml0ICh2b2lkKTsKKwordm9pZAorX2lu aXRpYWxpemVfaml0ICh2b2lkKQoreworICBvYnNlcnZlcl9hdHRhY2hfaW5m ZXJpb3JfY3JlYXRlZCAoaml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vazEpOwor ICBvYnNlcnZlcl9hdHRhY2hfaW5mZXJpb3JfZXhpdCAoaml0X2luZmVyaW9y X2V4aXRfaG9vayk7CisgIGppdF9vYmpmaWxlX2RhdGEgPSByZWdpc3Rlcl9v YmpmaWxlX2RhdGEgKCk7Cit9CkluZGV4OiBnZGIvaml0LmgKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogZ2RiL2ppdC5oCmRpZmYgLU4gZ2Ri L2ppdC5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw MAorKysgZ2RiL2ppdC5oCTMxIEp1bCAyMDA5IDE4OjAzOjM2IC0wMDAwCkBA IC0wLDAgKzEsNzcgQEAKKy8qIEpJVCBkZWNsYXJhdGlvbnMgZm9yIEdEQiwg dGhlIEdOVSBEZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IChDKSAyMDA5Cisg ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworCisjaWZuZGVmIEpJVF9ICisjZGVmaW5lIEpJVF9ICisKKy8qIFdo ZW4gdGhlIEpJVCBicmVha3BvaW50IGZpcmVzLCB0aGUgaW5mZXJpb3Igd2Fu dHMgdXMgdG8gdGFrZSBvbmUgb2YgdGhlc2UKKyAgIGFjdGlvbnMuICBUaGVz ZSB2YWx1ZXMgYXJlIHVzZWQgYnkgdGhlIGluZmVyaW9yLCBzbyB0aGUgdmFs dWVzIG9mIHRoZXNlIGVudW1zCisgICBjYW5ub3QgYmUgY2hhbmdlZC4gICov CisKK3R5cGVkZWYgZW51bQoreworICBKSVRfTk9BQ1RJT04gPSAwLAorICBK SVRfUkVHSVNURVIsCisgIEpJVF9VTlJFR0lTVEVSCit9IGppdF9hY3Rpb25z X3Q7CisKKy8qIFRoaXMgc3RydWN0IGRlc2NyaWJlcyBhIHNpbmdsZSBzeW1i b2wgZmlsZSBpbiBhIGxpbmtlZCBsaXN0IG9mIHN5bWJvbCBmaWxlcworICAg ZGVzY3JpYmluZyBnZW5lcmF0ZWQgY29kZS4gIEFzIHRoZSBpbmZlcmlvciBn ZW5lcmF0ZXMgY29kZSwgaXQgYWRkcyB0aGVzZQorICAgZW50cmllcyB0byB0 aGUgbGlzdCwgYW5kIHdoZW4gd2UgYXR0YWNoIHRvIHRoZSBpbmZlcmlvciwg d2UgcmVhZCB0aGVtIGFsbC4KKyAgIEZvciB0aGUgZmlyc3QgZWxlbWVudCBw cmV2X2VudHJ5IHNob3VsZCBiZSBOVUxMLCBhbmQgZm9yIHRoZSBsYXN0IGVs ZW1lbnQKKyAgIG5leHRfZW50cnkgc2hvdWxkIGJlIE5VTEwuICAqLworCitz dHJ1Y3Qgaml0X2NvZGVfZW50cnkKK3sKKyAgQ09SRV9BRERSIG5leHRfZW50 cnk7CisgIENPUkVfQUREUiBwcmV2X2VudHJ5OworICBDT1JFX0FERFIgc3lt ZmlsZV9hZGRyOworICB1aW50NjRfdCBzeW1maWxlX3NpemU7Cit9OworCisv KiBUaGlzIGlzIHRoZSBnbG9iYWwgZGVzY3JpcHRvciB0aGF0IHRoZSBpbmZl cmlvciB1c2VzIHRvIGNvbW11bmljYXRlCisgICBpbmZvcm1hdGlvbiB0byB0 aGUgZGVidWdnZXIuICBUbyBhbGVydCB0aGUgZGVidWdnZXIgdG8gdGFrZSBh biBhY3Rpb24sIHRoZQorICAgaW5mZXJpb3Igc2V0cyB0aGUgYWN0aW9uX2Zs YWcgdG8gdGhlIGFwcHJvcHJpYXRlIGVudW0gdmFsdWUsIHVwZGF0ZXMKKyAg IHJlbGV2YW50X2VudHJ5IHRvIHBvaW50IHRvIHRoZSByZWxldmFudCBjb2Rl IGVudHJ5LCBhbmQgY2FsbHMgdGhlIGZ1bmN0aW9uIGF0CisgICB0aGUgd2Vs bC1rbm93biBzeW1ib2wgd2l0aCBvdXIgYnJlYWtwb2ludC4gIFdlIHRoZW4g cmVhZCB0aGlzIGRlc2NyaXB0b3IgZnJvbQorICAgYW5vdGhlciBnbG9iYWwg d2VsbC1rbm93biBzeW1ib2wuICAqLworCitzdHJ1Y3Qgaml0X2Rlc2NyaXB0 b3IKK3sKKyAgdWludDMyX3QgdmVyc2lvbjsKKyAgLyogVGhpcyBzaG91bGQg YmUgaml0X2FjdGlvbnNfdCwgYnV0IHdlIHdhbnQgdG8gYmUgc3BlY2lmaWMg YWJvdXQgdGhlCisgICAgIGJpdC13aWR0aC4gICovCisgIHVpbnQzMl90IGFj dGlvbl9mbGFnOworICBDT1JFX0FERFIgcmVsZXZhbnRfZW50cnk7CisgIENP UkVfQUREUiBmaXJzdF9lbnRyeTsKK307CisKKy8qIExvb2tzIGZvciB0aGUg ZGVzY3JpcHRvciBhbmQgcmVnaXN0cmF0aW9uIHN5bWJvbHMgYW5kIGJyZWFr cG9pbnRzIHRoZQorICAgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiAgSWYgaXQg ZmluZHMgYm90aCwgaXQgcmVnaXN0ZXJzIGFsbCB0aGUgYWxyZWFkeSBKSVRl ZAorICAgY29kZS4gIElmIGl0IGhhcyBhbHJlYWR5IGZvdW5kIHRoZSBzeW1i b2xzLCB0aGVuIGl0IGRvZXNuJ3QgdHJ5IGFnYWluLiAgKi8KKworZXh0ZXJu IHZvaWQgaml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vayAodm9pZCk7CisKKy8q IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGhhbmRsZV9pbmZlcmlvcl9l dmVudCB3aGVuIGl0IGRlY2lkZXMgdGhhdCB0aGUgSklUCisgICBldmVudCBi cmVha3BvaW50IGhhcyBmaXJlZC4gICovCisKK2V4dGVybiB2b2lkIGppdF9l dmVudF9oYW5kbGVyICh2b2lkKTsKKworI2VuZGlmIC8qIEpJVF9IICovCklu ZGV4OiBnZGIvb2JqZmlsZXMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL29iamZpbGVzLmMsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuODcKZGlmZiAtdSAtcCAtdSAtcjEuODcgb2JqZmls ZXMuYwotLS0gZ2RiL29iamZpbGVzLmMJMjIgSnVsIDIwMDkgMTk6MjE6MzEg LTAwMDAJMS44NworKysgZ2RiL29iamZpbGVzLmMJMzEgSnVsIDIwMDkgMTg6 MDM6MzYgLTAwMDAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImRl ZnMuaCIKICNpbmNsdWRlICJiZmQuaCIJCS8qIEJpbmFyeSBGaWxlIERlc2Ny aXB0aW9uICovCisjaW5jbHVkZSAibGliYmZkLmgiCiAjaW5jbHVkZSAic3lt dGFiLmgiCiAjaW5jbHVkZSAic3ltZmlsZS5oIgogI2luY2x1ZGUgIm9iamZp bGVzLmgiCkBAIC00MzgsOSArNDM5LDE5IEBAIGZyZWVfb2JqZmlsZSAoc3Ry dWN0IG9iamZpbGUgKm9iamZpbGUpCiAgIGlmIChvYmpmaWxlLT5vYmZkICE9 IE5VTEwgJiYgIShvYmpmaWxlLT5mbGFncyAmIE9CSkZfS0VFUEJGRCkpCiAg ICAgewogICAgICAgY2hhciAqbmFtZSA9IGJmZF9nZXRfZmlsZW5hbWUgKG9i amZpbGUtPm9iZmQpOworICAgICAgc3RydWN0IGJmZF9pbl9tZW1vcnkgKmJp bSA9IE5VTEw7CisgICAgICAvKiBIYWNrIHRvIHdvcmsgYXJvdW5kIHRoZSBm YWN0IHRoYXQgQkZEIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZQor ICAgICAgICAgbWVtb3J5IGZvciBmaWxlcyBhbGxvY2F0ZWQgaW4gbWVtb3J5 LiAgKi8KKyAgICAgIGlmIChvYmpmaWxlLT5vYmZkLT5mbGFncyAmIEJGRF9J Tl9NRU1PUlkpCisgICAgICAgIGJpbSA9IChzdHJ1Y3QgYmZkX2luX21lbW9y eSAqKSBvYmpmaWxlLT5vYmZkLT5pb3N0cmVhbTsKICAgICAgIGlmICghYmZk X2Nsb3NlIChvYmpmaWxlLT5vYmZkKSkKIAl3YXJuaW5nIChfKCJjYW5ub3Qg Y2xvc2UgXCIlc1wiOiAlcyIpLAogCQkgbmFtZSwgYmZkX2Vycm1zZyAoYmZk X2dldF9lcnJvciAoKSkpOworICAgICAgaWYgKGJpbSAhPSBOVUxMKQorICAg ICAgICB7CisgICAgICAgICAgeGZyZWUgKGJpbS0+YnVmZmVyKTsKKyAgICAg ICAgICB4ZnJlZSAoYmltKTsKKyAgICAgICAgfQogICAgICAgeGZyZWUgKG5h bWUpOwogICAgIH0KIApJbmRleDogZ2RiL2RvYy9nZGIudGV4aW5mbwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2Ri L2RvYy9nZGIudGV4aW5mbyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MDgK ZGlmZiAtdSAtcCAtdSAtcjEuNjA4IGdkYi50ZXhpbmZvCi0tLSBnZGIvZG9j L2dkYi50ZXhpbmZvCTIwIEp1bCAyMDA5IDE4OjUxOjQxIC0wMDAwCTEuNjA4 CisrKyBnZGIvZG9jL2dkYi50ZXhpbmZvCTMxIEp1bCAyMDA5IDE4OjAzOjM4 IC0wMDAwCkBAIC0xNTksNiArMTU5LDcgQEAgc29mdHdhcmUgaW4gZ2VuZXJh bC4gIFdlIHdpbGwgbWlzcyBoaW0uCiAqIEVtYWNzOjogICAgICAgICAgICAg ICAgICAgICAgIFVzaW5nIEB2YWx1ZXtHREJOfSB1bmRlciBAc2N7Z251fSBF bWFjcwogKiBHREIvTUk6OiAgICAgICAgICAgICAgICAgICAgICBAdmFsdWV7 R0RCTn0ncyBNYWNoaW5lIEludGVyZmFjZS4KICogQW5ub3RhdGlvbnM6OiAg ICAgICAgICAgICAgICAgQHZhbHVle0dEQk59J3MgYW5ub3RhdGlvbiBpbnRl cmZhY2UuCisqIEpJVCBJbnRlcmZhY2U6OiAgICAgICAgICAgICAgIFVzaW5n IHRoZSBKSVQgZGVidWdnaW5nIGludGVyZmFjZS4KIAogKiBHREIgQnVnczo6 ICAgICAgICAgICAgICAgICAgICBSZXBvcnRpbmcgYnVncyBpbiBAdmFsdWV7 R0RCTn0KIApAQCAtMjU4MjIsNiArMjU4MjMsMTM2IEBAIHNvdXJjZSB3aGlj aCBpcyBiZWluZyBkaXNwbGF5ZWQuICBAdmFye2EKIGZvbGxvd2VkIGJ5IG9u ZSBvciBtb3JlIGxvd2VyY2FzZSBoZXggZGlnaXRzIChub3RlIHRoYXQgdGhp cyBkb2VzIG5vdAogZGVwZW5kIG9uIHRoZSBsYW5ndWFnZSkuCiAKK0Bub2Rl IEpJVCBJbnRlcmZhY2UKK0BjaGFwdGVyIEpJVCBDb21waWxhdGlvbiBJbnRl cmZhY2UKK0BjaW5kZXgganVzdC1pbi10aW1lIGNvbXBpbGF0aW9uCitAY2lu ZGV4IEpJVCBjb21waWxhdGlvbiBpbnRlcmZhY2UKKworVGhpcyBjaGFwdGVy IGRvY3VtZW50cyBAdmFsdWV7R0RCTn0ncyBAZGZue2p1c3QtaW4tdGltZX0g KEpJVCkgY29tcGlsYXRpb24KK2ludGVyZmFjZS4gIEEgSklUIGNvbXBpbGVy IGlzIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQgZ2VuZXJhdGVzIG5hdGl2 ZQorZXhlY3V0YWJsZSBjb2RlIGF0IHJ1bnRpbWUgYW5kIGV4ZWN1dGVzIGl0 LCB1c3VhbGx5IGluIG9yZGVyIHRvIGFjaGlldmUgZ29vZAorcGVyZm9ybWFu Y2Ugd2hpbGUgbWFpbnRhaW5pbmcgcGxhdGZvcm0gaW5kZXBlbmRlbmNlLiAK KworUHJvZ3JhbXMgdGhhdCB1c2UgSklUIGNvbXBpbGF0aW9uIGFyZSBub3Jt YWxseSBkaWZmaWN1bHQgdG8gZGVidWcgYmVjYXVzZQorcG9ydGlvbnMgb2Yg dGhlaXIgY29kZSBhcmUgZ2VuZXJhdGVkIGF0IHJ1bnRpbWUsIGluc3RlYWQg b2YgYmVpbmcgbG9hZGVkIGZyb20KK29iamVjdCBmaWxlcywgd2hpY2ggaXMg d2hlcmUgQHZhbHVle0dEQk59IG5vcm1hbGx5IGZpbmRzIHRoZSBwcm9ncmFt J3Mgc3ltYm9scworYW5kIGRlYnVnIGluZm9ybWF0aW9uLiAgSW4gb3JkZXIg dG8gZGVidWcgcHJvZ3JhbXMgdGhhdCB1c2UgSklUIGNvbXBpbGF0aW9uLAor QHZhbHVle0dEQk59IGhhcyBhbiBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgdGhl IHByb2dyYW0gdG8gcmVnaXN0ZXIgaW4tbWVtb3J5CitzeW1ib2wgZmlsZXMg d2l0aCBAdmFsdWV7R0RCTn0gYXQgcnVudGltZS4KKworSWYgeW91IGFyZSB1 c2luZyBAdmFsdWV7R0RCTn0gdG8gZGVidWcgYSBwcm9ncmFtIHRoYXQgdXNl cyB0aGlzIGludGVyZmFjZSwgdGhlbgoraXQgc2hvdWxkIHdvcmsgdHJhbnNw YXJlbnRseSBzbyBsb25nIGFzIHlvdSBoYXZlIG5vdCBzdHJpcHBlZCB0aGUg YmluYXJ5LiAgSWYKK3lvdSBhcmUgZGV2ZWxvcGluZyBhIEpJVCBjb21waWxl ciwgdGhlbiB0aGUgaW50ZXJmYWNlIGlzIGRvY3VtZW50ZWQgaW4gdGhlIHJl c3QKK29mIHRoaXMgY2hhcHRlci4gIEF0IHRoaXMgdGltZSwgdGhlIG9ubHkg a25vd24gY2xpZW50IG9mIHRoaXMgaW50ZXJmYWNlIGlzIHRoZQorTExWTSBK SVQuCisKK0Jyb2FkbHkgc3BlYWtpbmcsIHRoZSBKSVQgaW50ZXJmYWNlIG1p cnJvcnMgdGhlIGR5bmFtaWMgbG9hZGVyIGludGVyZmFjZS4gIFRoZQorSklU IGNvbXBpbGVyIGNvbW11bmljYXRlcyB3aXRoIEB2YWx1ZXtHREJOfSBieSB3 cml0aW5nIGRhdGEgaW50byBhIGdsb2JhbAordmFyaWFibGUgYW5kIGNhbGxp bmcgYSBmdWN0aW9uIGF0IGEgd2VsbC1rbm93biBzeW1ib2wuICBXaGVuIEB2 YWx1ZXtHREJOfQorYXR0YWNoZXMsIGl0IHJlYWRzIGEgbGlua2VkIGxpc3Qg b2Ygc3ltYm9sIGZpbGVzIGZyb20gdGhlIGdsb2JhbCB2YXJpYWJsZSB0bwor ZmluZCBleGlzdGluZyBjb2RlLCBhbmQgcHV0cyBhIGJyZWFrcG9pbnQgaW4g dGhlIGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuIGZpbmQKK291dCBhYm91dCBh ZGRpdGlvbmFsIGNvZGUuCisKK0BtZW51CisqIERlY2xhcmF0aW9uczo6ICAg ICAgICAgICAgICAgIFJlbGV2YW50IEMgc3RydWN0IGRlY2xhcmF0aW9ucwor KiBSZWdpc3RlcmluZyBDb2RlOjogICAgICAgICAgICBTdGVwcyB0byByZWdp c3RlciBjb2RlCisqIFVucmVnaXN0ZXJpbmcgQ29kZTo6ICAgICAgICAgIFN0 ZXBzIHRvIHVucmVnaXN0ZXIgY29kZQorQGVuZCBtZW51CisKK0Bub2RlIERl Y2xhcmF0aW9ucworQHNlY3Rpb24gSklUIERlY2xhcmF0aW9ucworCitUaGVz ZSBhcmUgdGhlIHJlbGV2YW50IHN0cnVjdCBkZWNsYXJhdGlvbnMgdGhhdCBh IEMgcHJvZ3JhbSBzaG91bGQgaW5jbHVkZSB0bworaW1wbGVtZW50IHRoZSBp bnRlcmZhY2U6CisKK0BzbWFsbGV4YW1wbGUKK3R5cGVkZWYgZW51bQorQHsK KyAgSklUX05PQUNUSU9OID0gMCwKKyAgSklUX1JFR0lTVEVSX0ZOLAorICBK SVRfVU5SRUdJU1RFUl9GTgorQH0gaml0X2FjdGlvbnNfdDsKKworc3RydWN0 IGppdF9jb2RlX2VudHJ5CitAeworICBzdHJ1Y3Qgaml0X2NvZGVfZW50cnkg Km5leHRfZW50cnk7CisgIHN0cnVjdCBqaXRfY29kZV9lbnRyeSAqcHJldl9l bnRyeTsKKyAgY29uc3QgY2hhciAqc3ltZmlsZV9hZGRyOworICB1aW50NjRf dCBzeW1maWxlX3NpemU7CitAfTsKKworc3RydWN0IGppdF9kZXNjcmlwdG9y CitAeworICB1aW50MzJfdCB2ZXJzaW9uOworICAvKiBUaGlzIHR5cGUgc2hv dWxkIGJlIGppdF9hY3Rpb25zX3QsIGJ1dCB3ZSB1c2UgdWludDMyX3QKKyAg ICAgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlIGJpdHdpZHRoLiAgKi8KKyAg dWludDMyX3QgYWN0aW9uX2ZsYWc7CisgIHN0cnVjdCBqaXRfY29kZV9lbnRy eSAqcmVsZXZhbnRfZW50cnk7CisgIHN0cnVjdCBqaXRfY29kZV9lbnRyeSAq Zmlyc3RfZW50cnk7CitAfTsKKworLyogR0RCIHB1dHMgYSBicmVha3BvaW50 IGluIHRoaXMgZnVuY3Rpb24uICAqLwordm9pZCBfX2F0dHJpYnV0ZV9fKChu b2lubGluZSkpIF9faml0X2RlYnVnX3JlZ2lzdGVyX2NvZGUoKSBAeyBAfTsK KworLyogTWFrZSBzdXJlIHRvIHNwZWNpZnkgdGhlIHZlcnNpb24gc3RhdGlj YWxseSwgYmVjYXVzZSB0aGUKKyAgIGRlYnVnZ2VyIG1heSBjaGVjayB0aGUg dmVyc2lvbiBiZWZvcmUgd2UgY2FuIHNldCBpdC4gICovCitzdHJ1Y3Qgaml0 X2Rlc2NyaXB0b3IgX19qaXRfZGVidWdfZGVzY3JpcHRvciA9IEB7IDEsIDAs IDAsIDAgQH07CitAZW5kIHNtYWxsZXhhbXBsZQorCitJZiB0aGUgSklUIGlz IG11bHRpLXRocmVhZGVkLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0aGF0IHRo ZSBKSVQgc3luY2hyb25pemUgYW55Cittb2RpZmljYXRpb25zIHRvIHRoaXMg Z2xvYmFsIGRhdGEgcHJvcGVybHksIHdoaWNoIGNhbiBlYXNpbHkgYmUgZG9u ZSBieSBwdXR0aW5nCithIGdsb2JhbCBtdXRleCBhcm91bmQgbW9kaWZpY2F0 aW9ucyB0byB0aGVzZSBzdHJ1Y3R1cmVzLgorCitAbm9kZSBSZWdpc3Rlcmlu ZyBDb2RlCitAc2VjdGlvbiBSZWdpc3RlcmluZyBDb2RlCisKK1RvIHJlZ2lz dGVyIGNvZGUgd2l0aCBAdmFsdWV7R0RCTn0sIHRoZSBKSVQgc2hvdWxkIGZv bGxvdyB0aGlzIHByb3RvY29sOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRl bQorR2VuZXJhdGUgYW4gb2JqZWN0IGZpbGUgaW4gbWVtb3J5IHdpdGggc3lt Ym9scyBhbmQgb3RoZXIgZGVzaXJlZCBkZWJ1ZworaW5mb3JtYXRpb24uICBU aGUgZmlsZSBtdXN0IGluY2x1ZGUgdGhlIHZpcnR1YWwgYWRkcmVzc2VzIG9m IHRoZSBzZWN0aW9ucy4KKworQGl0ZW0KK0NyZWF0ZSBhIGNvZGUgZW50cnkg Zm9yIHRoZSBmaWxlLCB3aGljaCBnaXZlcyB0aGUgc3RhcnQgYW5kIHNpemUg b2YgdGhlIHN5bWJvbAorZmlsZS4KKworQGl0ZW0KK0FkZCBpdCB0byB0aGUg bGlua2VkIGxpc3QgaW4gdGhlIEpJVCBkZXNjcmlwdG9yLgorCitAaXRlbQor UG9pbnQgdGhlIHJlbGV2YW50X2VudHJ5IGZpZWxkIG9mIHRoZSBkZXNjcmlw dG9yIGF0IHRoZSBlbnRyeS4KKworQGl0ZW0KK1NldCBAY29kZXthY3Rpb25f ZmxhZ30gdG8gQGNvZGV7SklUX1JFR0lTVEVSfSBhbmQgY2FsbAorQGNvZGV7 X19qaXRfZGVidWdfcmVnaXN0ZXJfY29kZX0uCitAZW5kIGl0ZW1pemUKKwor V2hlbiBAdmFsdWV7R0RCTn0gaXMgYXR0YWNoZWQgYW5kIHRoZSBicmVha3Bv aW50IGZpcmVzLCBAdmFsdWV7R0RCTn0gdXNlcyB0aGUKK0Bjb2Rle3JlbGV2 YW50X2VudHJ5fSBwb2ludGVyIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byB3YWxr IHRoZSBsaXN0IGxvb2tpbmcgZm9yCituZXcgY29kZS4gIEhvd2V2ZXIsIHRo ZSBsaW5rZWQgbGlzdCBtdXN0IHN0aWxsIGJlIG1haW50YWluZWQgaW4gb3Jk ZXIgdG8gYWxsb3cKK0B2YWx1ZXtHREJOfSB0byBhdHRhY2ggdG8gYSBydW5u aW5nIHByb2Nlc3MgYW5kIHN0aWxsIGZpbmQgdGhlIHN5bWJvbCBmaWxlcy4K KworQG5vZGUgVW5yZWdpc3RlcmluZyBDb2RlCitAc2VjdGlvbiBVbnJlZ2lz dGVyaW5nIENvZGUKKworSWYgY29kZSBpcyBmcmVlZCwgdGhlbiB0aGUgSklU IHNob3VsZCB1c2UgdGhlIGZvbGxvd2luZyBwcm90b2NvbDoKKworQGl0ZW1p emUgQGJ1bGxldAorQGl0ZW0KK1JlbW92ZSB0aGUgY29kZSBlbnRyeSBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBjb2RlIGZyb20gdGhlIGxpbmtlZCBsaXN0Lgor CitAaXRlbQorUG9pbnQgdGhlIEBjb2Rle3JlbGV2YW50X2VudHJ5fSBmaWVs ZCBvZiB0aGUgZGVzY3JpcHRvciBhdCB0aGUgY29kZSBlbnRyeS4KKworQGl0 ZW0KK1NldCBAY29kZXthY3Rpb25fZmxhZ30gdG8gQGNvZGV7SklUX1VOUkVH SVNURVJ9IGFuZCBjYWxsCitAY29kZXtfX2ppdF9kZWJ1Z19yZWdpc3Rlcl9j b2RlfS4KK0BlbmQgaXRlbWl6ZQorCitJZiB0aGUgSklUIGZyZWVzIG9yIHJl Y29tcGlsZXMgY29kZSB3aXRob3V0IHVucmVnaXN0ZXJpbmcgaXQsIHRoZW4g QHZhbHVle0dEQk59CithbmQgdGhlIEpJVCB3aWxsIGxlYWsgdGhlIG1lbW9y eSB1c2VkIGZvciB0aGUgYXNzb2NpYXRlZCBzeW1ib2wgZmlsZXMuCisKIEBu b2RlIEdEQiBCdWdzCiBAY2hhcHRlciBSZXBvcnRpbmcgQnVncyBpbiBAdmFs dWV7R0RCTn0KIEBjaW5kZXggYnVncyBpbiBAdmFsdWV7R0RCTn0K --0016363b9c5ed6bb6b0470046f16--