From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25268 invoked by alias); 5 Jul 2014 07:06: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 25245 invoked by uid 89); 5 Jul 2014 07:06:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pd0-f170.google.com Received: from mail-pd0-f170.google.com (HELO mail-pd0-f170.google.com) (209.85.192.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Sat, 05 Jul 2014 07:06:06 +0000 Received: by mail-pd0-f170.google.com with SMTP id z10so2822487pdj.1 for ; Sat, 05 Jul 2014 00:06:04 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.70.92.9 with SMTP id ci9mr14625221pdb.24.1404543964500; Sat, 05 Jul 2014 00:06:04 -0700 (PDT) Received: by 10.70.128.74 with HTTP; Sat, 5 Jul 2014 00:06:04 -0700 (PDT) Date: Sat, 05 Jul 2014 07:06:00 -0000 Message-ID: Subject: [GSoC] generation of Gimple loops with empty bodies From: Roman Gareev To: Tobias Grosser Cc: gcc-patches@gcc.gnu.org, Mircea Namolaru Content-Type: multipart/mixed; boundary=001a11c20cf413753204fd6ce000 X-SW-Source: 2014-07/txt/msg00339.txt.bz2 --001a11c20cf413753204fd6ce000 Content-Type: text/plain; charset=UTF-8 Content-length: 1025 > Sorry, I may have missed it. What kind of error was arising? Symbol lookup error. The full error message: /home/roman/compiled/build/graphite_sec/libexec/gcc/x86_64-unknown-linux-gnu/4.10.0/cc1: symbol lookup error: /home/roman/compiled/build/graphite_sec/libexec/gcc/x86_64-unknown-linux-gnu/4.10.0/cc1: undefined symbol: isl_ast_expr_get_val I've attached the version, which uses isl_val instead of isl_int. > I see. The way you generate loops seems to be exactly right (at least for > now). I only was asking you to add comments explaining why this was done > this way. It seems you just went the way of least resistance, but maybe you > can use my previous comments to motivate this a little bit more in the > source code (I will then go through the comments and add the missing pieces > of motivation). Possible motivation was added to comments of graphite_create_new_loop_guard and get_upper_bound. I am ready to add something or totally rewrite them. -- Cheers, Roman Gareev --001a11c20cf413753204fd6ce000 Content-Type: text/plain; charset=US-ASCII; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hx8l5qd90 Content-length: 32030 SW5kZXg6IGdjYy9ncmFwaGl0ZS1pc2wtYXN0LXRvLWdpbXBsZS5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9ncmFwaGl0ZS1pc2wtYXN0LXRv LWdpbXBsZS5jCShyZXZpc2lvbiAyMTIyOTQpCisrKyBnY2MvZ3JhcGhpdGUt aXNsLWFzdC10by1naW1wbGUuYwkod29ya2luZyBjb3B5KQpAQCAtNDIsMTYg KzQyLDY0MCBAQAogI2luY2x1ZGUgImNmZ2xvb3AuaCIKICNpbmNsdWRlICJ0 cmVlLWRhdGEtcmVmLmgiCiAjaW5jbHVkZSAic2VzZS5oIgorI2luY2x1ZGUg InRyZWUtc3NhLWxvb3AtbWFuaXAuaCIKKyNpbmNsdWRlICJ0cmVlLXNjYWxh ci1ldm9sdXRpb24uaCIKIAogI2lmZGVmIEhBVkVfY2xvb2cKICNpbmNsdWRl ICJncmFwaGl0ZS1wb2x5LmgiCiAjaW5jbHVkZSAiZ3JhcGhpdGUtaXNsLWFz dC10by1naW1wbGUuaCIKKyNpbmNsdWRlICJncmFwaGl0ZS1odGFiLmgiCiAK IC8qIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiBhbiBlcnJvciBvY2N1cnJlZCBk dXJpbmcgdGhlIHRyYW5zbGF0aW9uIG9mCiAgICBJU0wgQVNUIHRvIEdpbXBs ZS4gICovCiAKIHN0YXRpYyBib29sIGdyYXBoaXRlX3JlZ2VuZXJhdGVfZXJy b3I7CiAKKy8qIFdlIGFsd2F5cyB1c2Ugc2lnbmVkIDEyOCwgdW50aWwgaXNs IGlzIGFibGUgdG8gZ2l2ZSBpbmZvcm1hdGlvbiBhYm91dAordHlwZXMgICov CisKK3N0YXRpYyB0cmVlICpncmFwaGl0ZV9leHByZXNzaW9uX3NpemVfdHlw ZSA9ICZpbnQxMjhfaW50ZWdlcl90eXBlX25vZGU7CisKKy8qIENvbnZlcnRz IGEgR01QIGNvbnN0YW50IFZBTCB0byBhIHRyZWUgYW5kIHJldHVybnMgaXQu ICAqLworCitzdGF0aWMgdHJlZQorZ21wX2NzdF90b190cmVlICh0cmVlIHR5 cGUsIG1wel90IHZhbCkKK3sKKyAgdHJlZSB0ID0gdHlwZSA/IHR5cGUgOiBp bnRlZ2VyX3R5cGVfbm9kZTsKKyAgbXB6X3QgdG1wOworCisgIG1wel9pbml0 ICh0bXApOworICBtcHpfc2V0ICh0bXAsIHZhbCk7CisgIHdpZGVfaW50IHdp ID0gd2k6OmZyb21fbXB6ICh0LCB0bXAsIHRydWUpOworICBtcHpfY2xlYXIg KHRtcCk7CisKKyAgcmV0dXJuIHdpZGVfaW50X3RvX3RyZWUgKHQsIHdpKTsK K30KKworLyogVmVyaWZpZXMgcHJvcGVydGllcyB0aGF0IEdSQVBISVRFIHNo b3VsZCBtYWludGFpbiBkdXJpbmcgdHJhbnNsYXRpb24uICAqLworCitzdGF0 aWMgaW5saW5lIHZvaWQKK2dyYXBoaXRlX3ZlcmlmeSAodm9pZCkKK3sKKyNp ZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKKyAgdmVyaWZ5X2xvb3Bfc3RydWN0dXJl ICgpOworICB2ZXJpZnlfbG9vcF9jbG9zZWRfc3NhICh0cnVlKTsKKyNlbmRp ZgorfQorCisvKiBTdG9yZXMgdGhlIElOREVYIGluIGEgdmVjdG9yIGZvciBh IGdpdmVuIGlzbF9pZCBOQU1FLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgYXN0 X2lzbF9uYW1lX2luZGV4IHsKKyAgaW50IGluZGV4OworICBjb25zdCBjaGFy ICpuYW1lOworICAvKiBJZiBmcmVlX25hbWUgaXMgc2V0LCB0aGUgY29udGVu dCBvZiBuYW1lIHdhcyBhbGxvY2F0ZWQgYnkgdXMgYW5kIG5lZWRzCisgICAg IHRvIGJlIGZyZWVkLiAgKi8KKyAgY2hhciAqZnJlZV9uYW1lOworfSAqYXN0 X2lzbF9uYW1lX2luZGV4X3A7CisKKy8qIEhlbHBlciBmb3IgaGFzaGluZyBh c3RfaXNsX25hbWVfaW5kZXguICAqLworCitzdHJ1Y3QgYXN0X2lzbF9pbmRl eF9oYXNoZXIKK3sKKyAgdHlwZWRlZiBhc3RfaXNsX25hbWVfaW5kZXggdmFs dWVfdHlwZTsKKyAgdHlwZWRlZiBhc3RfaXNsX25hbWVfaW5kZXggY29tcGFy ZV90eXBlOworICBzdGF0aWMgaW5saW5lIGhhc2h2YWxfdCBoYXNoIChjb25z dCB2YWx1ZV90eXBlICopOworICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwg KGNvbnN0IHZhbHVlX3R5cGUgKiwgY29uc3QgY29tcGFyZV90eXBlICopOwor ICBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlICh2YWx1ZV90eXBlICopOwor fTsKKworLyogQ29tcHV0ZXMgYSBoYXNoIGZ1bmN0aW9uIGZvciBkYXRhYmFz ZSBlbGVtZW50IEUuICAqLworCitpbmxpbmUgaGFzaHZhbF90Cithc3RfaXNs X2luZGV4X2hhc2hlcjo6aGFzaCAoY29uc3QgdmFsdWVfdHlwZSAqZSkKK3sK KyAgaGFzaHZhbF90IGhhc2ggPSAwOworCisgIGludCBsZW5ndGggPSBzdHJs ZW4gKGUtPm5hbWUpOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwg bGVuZ3RoOyArK2kpCisgICAgaGFzaCA9IGhhc2ggfCAoZS0+bmFtZVtpXSA8 PCAoaSAlIDQpKTsKKworICByZXR1cm4gaGFzaDsKK30KKworLyogQ29tcGFy ZXMgZGF0YWJhc2UgZWxlbWVudHMgRUxUMSBhbmQgRUxUMi4gICovCisKK2lu bGluZSBib29sCithc3RfaXNsX2luZGV4X2hhc2hlcjo6ZXF1YWwgKGNvbnN0 IHZhbHVlX3R5cGUgKmVsdDEsIGNvbnN0IGNvbXBhcmVfdHlwZSAqZWx0MikK K3sKKyAgcmV0dXJuIHN0cmNtcCAoZWx0MS0+bmFtZSwgZWx0Mi0+bmFtZSkg PT0gMDsKK30KKworLyogRnJlZSB0aGUgbWVtb3J5IHRha2VuIGJ5IGEgYXN0 X2lzbF9uYW1lX2luZGV4IHN0cnVjdC4gICovCisKK2lubGluZSB2b2lkCith c3RfaXNsX2luZGV4X2hhc2hlcjo6cmVtb3ZlICh2YWx1ZV90eXBlICpjKQor eworICBpZiAoYy0+ZnJlZV9uYW1lKQorICAgIGZyZWUgKGMtPmZyZWVfbmFt ZSk7CisgIGZyZWUgKGMpOworfQorCit0eXBlZGVmIGhhc2hfdGFibGU8YXN0 X2lzbF9pbmRleF9oYXNoZXI+IGFzdF9pc2xfaW5kZXhfaHRhYl90eXBlOwor CisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldyBlbGVtZW50IG9mIHR5 cGUgYXN0X2lzbF9uYW1lX2luZGV4X3AgYnVpbHQKKyAgIGZyb20gTkFNRSwg SU5ERVguICAqLworCitzdGF0aWMgaW5saW5lIGFzdF9pc2xfbmFtZV9pbmRl eF9wCituZXdfYXN0X2lzbF9uYW1lX2luZGV4IChjb25zdCBjaGFyICpuYW1l LCBpbnQgaW5kZXgpCit7CisgIGFzdF9pc2xfbmFtZV9pbmRleF9wIHJlcyA9 IFhORVcgKHN0cnVjdCBhc3RfaXNsX25hbWVfaW5kZXgpOworICBjaGFyICpu ZXdfbmFtZSA9IFhORVdWRUMgKGNoYXIsIHN0cmxlbiAobmFtZSkgKyAxKTsK KyAgc3RyY3B5IChuZXdfbmFtZSwgbmFtZSk7CisKKyAgcmVzLT5uYW1lID0g bmV3X25hbWU7CisgIHJlcy0+ZnJlZV9uYW1lID0gbmV3X25hbWU7CisgIHJl cy0+aW5kZXggPSBpbmRleDsKKyAgcmV0dXJuIHJlczsKK30KKworLyogRm9y IGEgZ2l2ZW4gbmFtZSBvZiB0aGUgaXNsX2lkLCB3aGljaCBpcyBzdG9yZWQg aW4gdGhlIGlzbF9hc3RfZXhwciBFWFBSX0lELAorICAgcmV0dXJucyAtMSBp ZiBpdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBwYXJhbWV0ZXIsIG9y IG90aGVyd2lzZSwgcmV0dXJucworICAgdGhlIGluZGV4IGluIHRoZSBQQVJB TVMgb3IgU0NBVFRFUklOR19ESU1FTlNJT05TIHZlY3Rvci4gICovCisKK3N0 YXRpYyBpbmxpbmUgaW50Cithc3RfZXhwcl9pZF90b19pbmRleCAoX19pc2xf a2VlcCBpc2xfYXN0X2V4cHIgKmV4cHJfaWQsCisJCSAgICAgIGFzdF9pc2xf aW5kZXhfaHRhYl90eXBlICppbmRleF90YWJsZSkKK3sKKyAgc3RydWN0IGFz dF9pc2xfbmFtZV9pbmRleCB0bXA7CisgIGFzdF9pc2xfbmFtZV9pbmRleCAq KnNsb3Q7CisKKyAgaXNsX2lkICp0bXBfaXNsX2lkID0gaXNsX2FzdF9leHBy X2dldF9pZCAoZXhwcl9pZCk7CisgIHRtcC5uYW1lID0gaXNsX2lkX2dldF9u YW1lICh0bXBfaXNsX2lkKTsKKyAgdG1wLmZyZWVfbmFtZSA9IE5VTEw7CisK KyAgc2xvdCA9IGluZGV4X3RhYmxlLT5maW5kX3Nsb3QgKCZ0bXAsIE5PX0lO U0VSVCk7CisKKyAgaXNsX2lkX2ZyZWUgKHRtcF9pc2xfaWQpOworICBpZiAo c2xvdCAmJiAqc2xvdCkKKyAgICByZXR1cm4gKCpzbG90KS0+aW5kZXg7CisK KyAgcmV0dXJuIC0xOworfQorCisvKiBSZWNvcmRzIGluIElOREVYX1RBQkxF IHRoZSBJTkRFWCBhbmQgZm9yIE5BTUUuICAqLworCitzdGF0aWMgaW5saW5l IHZvaWQKK3NhdmVfaXNsX2lkX25hbWVfaW5kZXggKGFzdF9pc2xfaW5kZXhf aHRhYl90eXBlICppbmRleF90YWJsZSwKKwkJCWNvbnN0IGNoYXIgKm5hbWUs IGludCBpbmRleCkKK3sKKyAgc3RydWN0IGFzdF9pc2xfbmFtZV9pbmRleCB0 bXA7CisgIGFzdF9pc2xfbmFtZV9pbmRleCAqKnNsb3Q7CisKKyAgdG1wLm5h bWUgPSBuYW1lOworICB0bXAuZnJlZV9uYW1lID0gTlVMTDsKKyAgc2xvdCA9 IGluZGV4X3RhYmxlLT5maW5kX3Nsb3QgKCZ0bXAsIElOU0VSVCk7CisKKyAg aWYgKHNsb3QpCisgICAgeworICAgICAgZnJlZSAoKnNsb3QpOworICAgICAg KnNsb3QgPSBuZXdfYXN0X2lzbF9uYW1lX2luZGV4IChuYW1lLCBpbmRleCk7 CisgICAgfQorfQorCisvKiBJTkRFWCBiaW5kcyBJU0wncyBzY2F0dGVyaW5n IGFuZCBwYXJhbWV0ZXIgbmFtZSB0byB0aGUgaW5kZXggb2YgdGhlIHRyZWUK KyAgIGluZHVjdGlvbiB2YXJpYWJsZSBhbmQgcGFyYW1hdGVyZSBpbiBJVlNf UEFSQU1TX1ZFQy4KKworICAgUEFSQU1TX0lOREVYIGJpbmRzIElTTCdzIHBh cmFtZXRlciBuYW1lIHRvIHRoZSBpbmRleCBvZiB0aGUgdHJlZQorICAgcGFy YW1ldGVyIGluIFBBUkFNUy4gICovCisKK3R5cGVkZWYgc3RydWN0IGl2c19w YXJhbXMgeworICB2ZWM8dHJlZT4gaXZzX3BhcmFtc192ZWM7CisgIGFzdF9p c2xfaW5kZXhfaHRhYl90eXBlICppdnNfcGFyYW1zX2luZGV4OworICBzZXNl IHJlZ2lvbjsKK30gKml2c19wYXJhbXNfcDsKKworc3RhdGljIHRyZWUKK2dj Y19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJlc3Npb24gKHRyZWUgdHlwZSwg X19pc2xfa2VlcCBpc2xfYXN0X2V4cHIgKiwKKwkJCQkgICAgaXZzX3BhcmFt c19wIGlwKTsKKworLyogUmV0dXJucyB0aGUgdHJlZSB2YXJpYWJsZSBmcm9t IHRoZSBuYW1lIG9mIGlzbF9pZCwgd2hpY2ggaXMgc3RvcmVkCisgICBpbiB0 aGUgaXNsX2FzdF9leHByIEVYUFJfSUQgdGhhdCB3YXMgZ2l2ZW4gaW4gSVNM IHJlcHJlc2VudGF0aW9uLiAgKi8KKworc3RhdGljIHRyZWUKK2djY19leHBy ZXNzaW9uX2Zyb21faXNsX2FzdF9leHByX2lkIChfX2lzbF9rZWVwIGlzbF9h c3RfZXhwciAqZXhwcl9pZCwKKwkJCQkgICAgIGl2c19wYXJhbXNfcCBpcCkK K3sKKyAgZ2NjX2Fzc2VydCAoaXNsX2FzdF9leHByX2dldF90eXBlIChleHBy X2lkKSA9PSBpc2xfYXN0X2V4cHJfaWQpOworICBpbnQgaW5kZXg7CisgIGdj Y19hc3NlcnQgKGlwLT5pdnNfcGFyYW1zX3ZlYy5leGlzdHMgKCkgJiYgaXAt Pml2c19wYXJhbXNfaW5kZXgpOworICBpbmRleCA9IGFzdF9leHByX2lkX3Rv X2luZGV4IChleHByX2lkLCBpcC0+aXZzX3BhcmFtc19pbmRleCk7CisgIGdj Y19hc3NlcnQgKGluZGV4ID49IDApOworICByZXR1cm4gKGlwLT5pdnNfcGFy YW1zX3ZlYylbaW5kZXhdOworfQorCisvKiBDb252ZXJ0cyBhIGlzbF9hc3Rf ZXhwcl9pbnQgZXhwcmVzc2lvbiBFIHRvIGEgR0NDIGV4cHJlc3Npb24gdHJl ZSBvZgorICAgdHlwZSBUWVBFLiAgKi8KKworc3RhdGljIHRyZWUKK2djY19l eHByZXNzaW9uX2Zyb21faXNsX2V4cHJfaW50ICh0cmVlIHR5cGUsIF9faXNs X2tlZXAgaXNsX2FzdF9leHByICpleHByKQoreworICBnY2NfYXNzZXJ0IChp c2xfYXN0X2V4cHJfZ2V0X3R5cGUgKGV4cHIpID09IGlzbF9hc3RfZXhwcl9p bnQpOworICBpc2xfaW50IHZhbDsKKyAgaXNsX2ludF9pbml0ICh2YWwpOwor ICBpZiAoaXNsX2FzdF9leHByX2dldF9pbnQgKGV4cHIsICZ2YWwpID09IC0x KQorICAgIHsKKyAgICAgIGlzbF9pbnRfY2xlYXIgKHZhbCk7CisgICAgICBy ZXR1cm4gTlVMTF9UUkVFOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBn bXBfY3N0X3RvX3RyZWUgKHR5cGUsIHZhbCk7Cit9CisKKy8qIENvbnZlcnRz IGEgYmluYXJ5IGlzbF9hc3RfZXhwcl9vcCBleHByZXNzaW9uIEUgdG8gYSBH Q0MgZXhwcmVzc2lvbiB0cmVlIG9mCisgICB0eXBlIFRZUEUuICAqLworCitz dGF0aWMgdHJlZQorYmluYXJ5X29wX3RvX3RyZWUgKHRyZWUgdHlwZSwgX19p c2xfa2VlcCBpc2xfYXN0X2V4cHIgKmV4cHIsIGl2c19wYXJhbXNfcCBpcCkK K3sKKyAgaXNsX2FzdF9leHByICphcmdfZXhwciA9IGlzbF9hc3RfZXhwcl9n ZXRfb3BfYXJnIChleHByLCAwKTsKKyAgdHJlZSB0cmVlX2xoc19leHByID0g Z2NjX2V4cHJlc3Npb25fZnJvbV9pc2xfZXhwcmVzc2lvbiAodHlwZSwgYXJn X2V4cHIsIGlwKTsKKyAgaXNsX2FzdF9leHByX2ZyZWUgKGFyZ19leHByKTsK KyAgYXJnX2V4cHIgPSBpc2xfYXN0X2V4cHJfZ2V0X29wX2FyZyAoZXhwciwg MSk7CisgIHRyZWUgdHJlZV9yaHNfZXhwciA9IGdjY19leHByZXNzaW9uX2Zy b21faXNsX2V4cHJlc3Npb24gKHR5cGUsIGFyZ19leHByLCBpcCk7CisgIGlz bF9hc3RfZXhwcl9mcmVlIChhcmdfZXhwcik7CisgIHN3aXRjaCAoaXNsX2Fz dF9leHByX2dldF9vcF90eXBlIChleHByKSkKKyAgICB7CisgICAgY2FzZSBp c2xfYXN0X29wX2FkZDoKKyAgICAgIHJldHVybiBmb2xkX2J1aWxkMiAoUExV U19FWFBSLCB0eXBlLCB0cmVlX2xoc19leHByLCB0cmVlX3Joc19leHByKTsK KworICAgIGNhc2UgaXNsX2FzdF9vcF9zdWI6CisgICAgICByZXR1cm4gZm9s ZF9idWlsZDIgKE1JTlVTX0VYUFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIsIHRy ZWVfcmhzX2V4cHIpOworCisgICAgY2FzZSBpc2xfYXN0X29wX211bDoKKyAg ICAgIHJldHVybiBmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCB0eXBlLCB0cmVl X2xoc19leHByLCB0cmVlX3Joc19leHByKTsKKworICAgIGNhc2UgaXNsX2Fz dF9vcF9kaXY6CisgICAgICByZXR1cm4gZm9sZF9idWlsZDIgKEVYQUNUX0RJ Vl9FWFBSLCB0eXBlLCB0cmVlX2xoc19leHByLCB0cmVlX3Joc19leHByKTsK KworICAgIGNhc2UgaXNsX2FzdF9vcF9mZGl2X3E6CisgICAgICByZXR1cm4g Zm9sZF9idWlsZDIgKEZMT09SX0RJVl9FWFBSLCB0eXBlLCB0cmVlX2xoc19l eHByLCB0cmVlX3Joc19leHByKTsKKworICAgIGNhc2UgaXNsX2FzdF9vcF9h bmQ6CisgICAgICByZXR1cm4gZm9sZF9idWlsZDIgKFRSVVRIX0FORElGX0VY UFIsIHR5cGUsCisJCQkgIHRyZWVfbGhzX2V4cHIsIHRyZWVfcmhzX2V4cHIp OworCisgICAgY2FzZSBpc2xfYXN0X29wX29yOgorICAgICAgcmV0dXJuIGZv bGRfYnVpbGQyIChUUlVUSF9PUklGX0VYUFIsIHR5cGUsIHRyZWVfbGhzX2V4 cHIsIHRyZWVfcmhzX2V4cHIpOworCisgICAgY2FzZSBpc2xfYXN0X29wX2Vx OgorICAgICAgcmV0dXJuIGZvbGRfYnVpbGQyIChFUV9FWFBSLCB0eXBlLCB0 cmVlX2xoc19leHByLCB0cmVlX3Joc19leHByKTsKKworICAgIGNhc2UgaXNs X2FzdF9vcF9sZToKKyAgICAgIHJldHVybiBmb2xkX2J1aWxkMiAoTEVfRVhQ UiwgdHlwZSwgdHJlZV9saHNfZXhwciwgdHJlZV9yaHNfZXhwcik7CisKKyAg ICBjYXNlIGlzbF9hc3Rfb3BfbHQ6CisgICAgICByZXR1cm4gZm9sZF9idWls ZDIgKExUX0VYUFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIsIHRyZWVfcmhzX2V4 cHIpOworCisgICAgY2FzZSBpc2xfYXN0X29wX2dlOgorICAgICAgcmV0dXJu IGZvbGRfYnVpbGQyIChHRV9FWFBSLCB0eXBlLCB0cmVlX2xoc19leHByLCB0 cmVlX3Joc19leHByKTsKKworICAgIGNhc2UgaXNsX2FzdF9vcF9ndDoKKyAg ICAgIHJldHVybiBmb2xkX2J1aWxkMiAoR1RfRVhQUiwgdHlwZSwgdHJlZV9s aHNfZXhwciwgdHJlZV9yaHNfZXhwcik7CisKKyAgICBkZWZhdWx0OgorICAg ICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KK30KKworLyogQ29udmVy dHMgYSB0ZXJuYXJ5IGlzbF9hc3RfZXhwcl9vcCBleHByZXNzaW9uIEUgdG8g YSBHQ0MgZXhwcmVzc2lvbiB0cmVlIG9mCisgICB0eXBlIFRZUEUuICAqLwor CitzdGF0aWMgdHJlZQordGVybmFyeV9vcF90b190cmVlICh0cmVlIHR5cGUs IF9faXNsX2tlZXAgaXNsX2FzdF9leHByICpleHByLCBpdnNfcGFyYW1zX3Ag aXApCit7CisgIGdjY19hc3NlcnQgKGlzbF9hc3RfZXhwcl9nZXRfb3BfdHlw ZSAoZXhwcikgPT0gaXNsX2FzdF9vcF9taW51cyk7CisgIGlzbF9hc3RfZXhw ciAqYXJnX2V4cHIgPSBpc2xfYXN0X2V4cHJfZ2V0X29wX2FyZyAoZXhwciwg MCk7CisgIHRyZWUgdHJlZV9maXJzdF9leHByCisgICAgPSBnY2NfZXhwcmVz c2lvbl9mcm9tX2lzbF9leHByZXNzaW9uICh0eXBlLCBhcmdfZXhwciwgaXAp OworICBpc2xfYXN0X2V4cHJfZnJlZSAoYXJnX2V4cHIpOworICBhcmdfZXhw ciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAxKTsKKyAgdHJl ZSB0cmVlX3NlY29uZF9leHByCisgICAgPSBnY2NfZXhwcmVzc2lvbl9mcm9t X2lzbF9leHByZXNzaW9uICh0eXBlLCBhcmdfZXhwciwgaXApOworICBpc2xf YXN0X2V4cHJfZnJlZSAoYXJnX2V4cHIpOworICBhcmdfZXhwciA9IGlzbF9h c3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAyKTsKKyAgdHJlZSB0cmVlX3Ro aXJkX2V4cHIKKyAgICA9IGdjY19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJl c3Npb24gKHR5cGUsIGFyZ19leHByLCBpcCk7CisgIGlzbF9hc3RfZXhwcl9m cmVlIChhcmdfZXhwcik7CisgIHJldHVybiBmb2xkX2J1aWxkMyAoQ09ORF9F WFBSLCB0eXBlLCB0cmVlX2ZpcnN0X2V4cHIsCisJCSAgICAgIHRyZWVfc2Vj b25kX2V4cHIsIHRyZWVfdGhpcmRfZXhwcik7Cit9CisKKy8qIENvbnZlcnRz IGEgdW5hcnkgaXNsX2FzdF9leHByX29wIGV4cHJlc3Npb24gRSB0byBhIEdD QyBleHByZXNzaW9uIHRyZWUgb2YKKyAgIHR5cGUgVFlQRS4gICovCisKK3N0 YXRpYyB0cmVlCit1bmFyeV9vcF90b190cmVlICh0cmVlIHR5cGUsIF9faXNs X2tlZXAgaXNsX2FzdF9leHByICpleHByLCBpdnNfcGFyYW1zX3AgaXApCit7 CisgIGdjY19hc3NlcnQgKGlzbF9hc3RfZXhwcl9nZXRfb3BfdHlwZSAoZXhw cikgPT0gaXNsX2FzdF9vcF9taW51cyk7CisgIGlzbF9hc3RfZXhwciAqYXJn X2V4cHIgPSBpc2xfYXN0X2V4cHJfZ2V0X29wX2FyZyAoZXhwciwgMCk7Cisg IHRyZWUgdHJlZV9leHByID0gZ2NjX2V4cHJlc3Npb25fZnJvbV9pc2xfZXhw cmVzc2lvbiAodHlwZSwgYXJnX2V4cHIsIGlwKTsKKyAgaXNsX2FzdF9leHBy X2ZyZWUgKGFyZ19leHByKTsKKyAgcmV0dXJuIGZvbGRfYnVpbGQxIChORUdB VEVfRVhQUiwgdHlwZSwgdHJlZV9leHByKTsKK30KKworLyogQ29udmVydHMg YSBpc2xfYXN0X2V4cHJfb3AgZXhwcmVzc2lvbiBFIHdpdGggdW5rbm93biBu dW1iZXIgb2YgYXJndW1lbnRzCisgICB0byBhIEdDQyBleHByZXNzaW9uIHRy ZWUgb2YgdHlwZSBUWVBFLiAgKi8KKworc3RhdGljIHRyZWUKK25hcnlfb3Bf dG9fdHJlZSAodHJlZSB0eXBlLCBfX2lzbF9rZWVwIGlzbF9hc3RfZXhwciAq ZXhwciwgaXZzX3BhcmFtc19wIGlwKQoreworICBlbnVtIHRyZWVfY29kZSBv cF9jb2RlOworICBzd2l0Y2ggKGlzbF9hc3RfZXhwcl9nZXRfb3BfdHlwZSAo ZXhwcikpCisgICAgeworICAgIGNhc2UgaXNsX2FzdF9vcF9tYXg6CisgICAg ICBvcF9jb2RlID0gTUFYX0VYUFI7CisgICAgICBicmVhazsKKworICAgIGNh c2UgaXNsX2FzdF9vcF9taW46CisgICAgICBvcF9jb2RlID0gTUlOX0VYUFI7 CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5y ZWFjaGFibGUgKCk7ICAgIAorICAgIH0KKyAgaXNsX2FzdF9leHByICphcmdf ZXhwciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAwKTsKKyAg dHJlZSByZXMgPSBnY2NfZXhwcmVzc2lvbl9mcm9tX2lzbF9leHByZXNzaW9u ICh0eXBlLCBhcmdfZXhwciwgaXApOworICBpc2xfYXN0X2V4cHJfZnJlZSAo YXJnX2V4cHIpOworICBpbnQgaTsKKyAgZm9yIChpID0gMTsgaSA8IGlzbF9h c3RfZXhwcl9nZXRfb3Bfbl9hcmcgKGV4cHIpOyBpKyspCisgICAgeworICAg ICAgYXJnX2V4cHIgPSBpc2xfYXN0X2V4cHJfZ2V0X29wX2FyZyAoZXhwciwg aSk7CisgICAgICB0cmVlIHQgPSBnY2NfZXhwcmVzc2lvbl9mcm9tX2lzbF9l eHByZXNzaW9uICh0eXBlLCBhcmdfZXhwciwgaXApOworICAgICAgcmVzID0g Zm9sZF9idWlsZDIgKG9wX2NvZGUsIHR5cGUsIHJlcywgdCk7CisgICAgICBp c2xfYXN0X2V4cHJfZnJlZSAoYXJnX2V4cHIpOworICAgIH0KKyAgcmV0dXJu IHJlczsKK30KKworCisvKiBDb252ZXJ0cyBhbiBpc2xfYXN0X2V4cHJfb3Ag ZXhwcmVzc2lvbiBFIHRvIGEgR0NDIGV4cHJlc3Npb24gdHJlZSBvZgorICAg dHlwZSBUWVBFLiAgKi8KKworc3RhdGljIHRyZWUKK2djY19leHByZXNzaW9u X2Zyb21faXNsX2V4cHJfb3AgKHRyZWUgdHlwZSwgX19pc2xfa2VlcCBpc2xf YXN0X2V4cHIgKmV4cHIsCisJCQkJIGl2c19wYXJhbXNfcCBpcCkKK3sKKyAg Z2NjX2Fzc2VydCAoaXNsX2FzdF9leHByX2dldF90eXBlIChleHByKSA9PSBp c2xfYXN0X2V4cHJfb3ApOworICBzd2l0Y2ggKGlzbF9hc3RfZXhwcl9nZXRf b3BfdHlwZSAoZXhwcikpCisgICAgeworICAgIC8qIFRoZXNlIGlzbCBhc3Qg ZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiAgKi8KKyAgICBj YXNlIGlzbF9hc3Rfb3BfZXJyb3I6CisgICAgY2FzZSBpc2xfYXN0X29wX2Nh bGw6CisgICAgY2FzZSBpc2xfYXN0X29wX2FuZF90aGVuOgorICAgIGNhc2Ug aXNsX2FzdF9vcF9vcl9lbHNlOgorICAgIGNhc2UgaXNsX2FzdF9vcF9wZGl2 X3E6CisgICAgY2FzZSBpc2xfYXN0X29wX3BkaXZfcjoKKyAgICBjYXNlIGlz bF9hc3Rfb3Bfc2VsZWN0OgorICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOwor CisgICAgY2FzZSBpc2xfYXN0X29wX21heDoKKyAgICBjYXNlIGlzbF9hc3Rf b3BfbWluOgorICAgICAgcmV0dXJuIG5hcnlfb3BfdG9fdHJlZSAodHlwZSwg ZXhwciwgaXApOworCisgICAgY2FzZSBpc2xfYXN0X29wX2FkZDoKKyAgICBj YXNlIGlzbF9hc3Rfb3Bfc3ViOgorICAgIGNhc2UgaXNsX2FzdF9vcF9tdWw6 CisgICAgY2FzZSBpc2xfYXN0X29wX2RpdjoKKyAgICBjYXNlIGlzbF9hc3Rf b3BfZmRpdl9xOgorICAgIGNhc2UgaXNsX2FzdF9vcF9hbmQ6CisgICAgY2Fz ZSBpc2xfYXN0X29wX29yOgorICAgIGNhc2UgaXNsX2FzdF9vcF9lcToKKyAg ICBjYXNlIGlzbF9hc3Rfb3BfbGU6CisgICAgY2FzZSBpc2xfYXN0X29wX2x0 OgorICAgIGNhc2UgaXNsX2FzdF9vcF9nZToKKyAgICBjYXNlIGlzbF9hc3Rf b3BfZ3Q6CisgICAgICByZXR1cm4gYmluYXJ5X29wX3RvX3RyZWUgKHR5cGUs IGV4cHIsIGlwKTsKKworICAgIGNhc2UgaXNsX2FzdF9vcF9taW51czoKKyAg ICAgIHJldHVybiB1bmFyeV9vcF90b190cmVlICh0eXBlLCBleHByLCBpcCk7 CisKKyAgICBjYXNlIGlzbF9hc3Rfb3BfY29uZDoKKyAgICAgIHJldHVybiB0 ZXJuYXJ5X29wX3RvX3RyZWUgKHR5cGUsIGV4cHIsIGlwKTsKKworICAgIGRl ZmF1bHQ6CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorCisg IHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIENvbnZlcnRzIGEgSVNMIEFT VCBleHByZXNzaW9uIEUgYmFjayB0byBhIEdDQyBleHByZXNzaW9uIHRyZWUg b2YKKyAgIHR5cGUgVFlQRS4gICovCisKK3N0YXRpYyB0cmVlCitnY2NfZXhw cmVzc2lvbl9mcm9tX2lzbF9leHByZXNzaW9uICh0cmVlIHR5cGUsIF9faXNs X2tlZXAgaXNsX2FzdF9leHByICpleHByLAorCQkJCSAgICBpdnNfcGFyYW1z X3AgaXApCit7CisgIHN3aXRjaCAoaXNsX2FzdF9leHByX2dldF90eXBlIChl eHByKSkKKyAgICB7CisgICAgY2FzZSBpc2xfYXN0X2V4cHJfaWQ6CisgICAg ICByZXR1cm4gZ2NjX2V4cHJlc3Npb25fZnJvbV9pc2xfYXN0X2V4cHJfaWQg KGV4cHIsIGlwKTsKKworICAgIGNhc2UgaXNsX2FzdF9leHByX2ludDoKKyAg ICAgIHJldHVybiBnY2NfZXhwcmVzc2lvbl9mcm9tX2lzbF9leHByX2ludCAo dHlwZSwgZXhwcik7CisKKyAgICBjYXNlIGlzbF9hc3RfZXhwcl9vcDoKKyAg ICAgIHJldHVybiBnY2NfZXhwcmVzc2lvbl9mcm9tX2lzbF9leHByX29wICh0 eXBlLCBleHByLCBpcCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3Vu cmVhY2hhYmxlICgpOworICAgIH0KKworICByZXR1cm4gTlVMTF9UUkVFOwor fQorCisvKiBDcmVhdGVzIGEgbmV3IExPT1AgY29ycmVzcG9uZGluZyB0byBp c2xfYXN0X25vZGVfZm9yLiAgSW5zZXJ0cyBhbgorICAgaW5kdWN0aW9uIHZh cmlhYmxlIGZvciB0aGUgbmV3IExPT1AuICBOZXcgTE9PUCBpcyBhdHRhY2hl ZCB0byBDRkcKKyAgIHN0YXJ0aW5nIGF0IEVOVFJZX0VER0UuICBMT09QIGlz IGluc2VydGVkIGludG8gdGhlIGxvb3AgdHJlZSBhbmQKKyAgIGJlY29tZXMg dGhlIGNoaWxkIGxvb3Agb2YgdGhlIE9VVEVSX0xPT1AuICBORVdJVlNfSU5E RVggYmluZHMKKyAgIElTTCdzIHNjYXR0ZXJpbmcgbmFtZSB0byB0aGUgaW5k dWN0aW9uIHZhcmlhYmxlIGNyZWF0ZWQgZm9yIHRoZQorICAgbG9vcCBvZiBT VE1ULiAgVGhlIG5ldyBpbmR1Y3Rpb24gdmFyaWFibGUgaXMgaW5zZXJ0ZWQg aW4gdGhlIE5FV0lWUworICAgdmVjdG9yIGFuZCBpcyBvZiB0eXBlIFRZUEUu ICAqLworCitzdGF0aWMgc3RydWN0IGxvb3AgKgorZ3JhcGhpdGVfY3JlYXRl X25ld19sb29wIChlZGdlIGVudHJ5X2VkZ2UsIF9faXNsX2tlZXAgaXNsX2Fz dF9ub2RlICpub2RlX2ZvciwKKwkJCSAgbG9vcF9wIG91dGVyLCB0cmVlIHR5 cGUsIHRyZWUgbGIsIHRyZWUgdWIsCisJCQkgIGl2c19wYXJhbXNfcCBpcCkK K3sKKyAgaXNsX2FzdF9leHByICpmb3JfaW5jID0gaXNsX2FzdF9ub2RlX2Zv cl9nZXRfaW5jIChub2RlX2Zvcik7CisgIHRyZWUgc3RyaWRlID0gZ2NjX2V4 cHJlc3Npb25fZnJvbV9pc2xfZXhwcmVzc2lvbiAodHlwZSwgZm9yX2luYywg aXApOworICBpc2xfYXN0X2V4cHJfZnJlZSAoZm9yX2luYyk7CisgIHRyZWUg aXZ2YXIgPSBjcmVhdGVfdG1wX3ZhciAodHlwZSwgImdyYXBoaXRlX0lWIik7 CisgIHRyZWUgaXYsIGl2X2FmdGVyX2luY3JlbWVudDsKKyAgbG9vcF9wIGxv b3AgPSBjcmVhdGVfZW1wdHlfbG9vcF9vbl9lZGdlCisgICAgKGVudHJ5X2Vk Z2UsIGxiLCBzdHJpZGUsIHViLCBpdnZhciwgJml2LCAmaXZfYWZ0ZXJfaW5j cmVtZW50LAorICAgICBvdXRlciA/IG91dGVyIDogZW50cnlfZWRnZS0+c3Jj LT5sb29wX2ZhdGhlcik7CisKKyAgaXNsX2FzdF9leHByICpmb3JfaXRlcmF0 b3IgPSBpc2xfYXN0X25vZGVfZm9yX2dldF9pdGVyYXRvciAobm9kZV9mb3Ip OworICBpc2xfaWQgKmlkID0gaXNsX2FzdF9leHByX2dldF9pZCAoZm9yX2l0 ZXJhdG9yKTsKKyAgc2F2ZV9pc2xfaWRfbmFtZV9pbmRleCAoaXAtPml2c19w YXJhbXNfaW5kZXgsIGlzbF9pZF9nZXRfbmFtZSAoaWQpLAorCQkJICAoaXAt Pml2c19wYXJhbXNfdmVjKS5sZW5ndGggKCkpOworICBpc2xfaWRfZnJlZSAo aWQpOworICBpc2xfYXN0X2V4cHJfZnJlZSAoZm9yX2l0ZXJhdG9yKTsKKyAg KGlwLT5pdnNfcGFyYW1zX3ZlYykuc2FmZV9wdXNoIChpdik7CisgIHJldHVy biBsb29wOworfQorCitzdGF0aWMgZWRnZQordHJhbnNsYXRlX2lzbF9hc3Qg KGxvb3BfcCBjb250ZXh0X2xvb3AsIF9faXNsX2tlZXAgaXNsX2FzdF9ub2Rl ICpub2RlLAorCQkgICBlZGdlIG5leHRfZSwgaXZzX3BhcmFtc19wIGlwKTsK KworLyogQ3JlYXRlIHRoZSBsb29wIGZvciBhIGlzbF9hc3Rfbm9kZV9mb3Iu CisKKyAgIC0gTkVYVF9FIGlzIHRoZSBlZGdlIHdoZXJlIG5ldyBnZW5lcmF0 ZWQgY29kZSBzaG91bGQgYmUgYXR0YWNoZWQuICAqLworCitzdGF0aWMgZWRn ZQordHJhbnNsYXRlX2lzbF9hc3RfZm9yX2xvb3AgKGxvb3BfcCBjb250ZXh0 X2xvb3AsCisJCQkgICAgX19pc2xfa2VlcCBpc2xfYXN0X25vZGUgKm5vZGVf Zm9yLCBlZGdlIG5leHRfZSwKKwkJCSAgICB0cmVlIHR5cGUsIHRyZWUgbGIs IHRyZWUgdWIsCisJCQkgICAgaXZzX3BhcmFtc19wIGlwKQoreworICBnY2Nf YXNzZXJ0IChpc2xfYXN0X25vZGVfZ2V0X3R5cGUgKG5vZGVfZm9yKSA9PSBp c2xfYXN0X25vZGVfZm9yKTsKKyAgc3RydWN0IGxvb3AgKmxvb3AgPSBncmFw aGl0ZV9jcmVhdGVfbmV3X2xvb3AgKG5leHRfZSwgbm9kZV9mb3IsIGNvbnRl eHRfbG9vcCwKKwkJCQkJCXR5cGUsIGxiLCB1YiwgaXApOworICBlZGdlIGxh c3RfZSA9IHNpbmdsZV9leGl0IChsb29wKTsKKyAgZWRnZSB0b19ib2R5ID0g c2luZ2xlX3N1Y2NfZWRnZSAobG9vcC0+aGVhZGVyKTsKKyAgYmFzaWNfYmxv Y2sgYWZ0ZXIgPSB0b19ib2R5LT5kZXN0OworCisgIC8qIENyZWF0ZSBhIGJh c2ljIGJsb2NrIGZvciBsb29wIGNsb3NlIHBoaSBub2Rlcy4gICovCisgIGxh c3RfZSA9IHNpbmdsZV9zdWNjX2VkZ2UgKHNwbGl0X2VkZ2UgKGxhc3RfZSkp OworCisgIC8qIFRyYW5zbGF0ZSB0aGUgYm9keSBvZiB0aGUgbG9vcC4gICov CisgIGlzbF9hc3Rfbm9kZSAqZm9yX2JvZHkgPSBpc2xfYXN0X25vZGVfZm9y X2dldF9ib2R5IChub2RlX2Zvcik7CisgIG5leHRfZSA9IHRyYW5zbGF0ZV9p c2xfYXN0IChsb29wLCBmb3JfYm9keSwgdG9fYm9keSwgaXApOworICBpc2xf YXN0X25vZGVfZnJlZSAoZm9yX2JvZHkpOworICByZWRpcmVjdF9lZGdlX3N1 Y2Nfbm9kdXAgKG5leHRfZSwgYWZ0ZXIpOworICBzZXRfaW1tZWRpYXRlX2Rv bWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIG5leHRfZS0+ZGVzdCwgbmV4dF9l LT5zcmMpOworCisgIC8qIFRPRE86IEFkZCBjaGVja2luZyBmb3IgdGhlIGxv b3AgcGFyYWxsZWxpc20uICAqLworCisgIHJldHVybiBsYXN0X2U7Cit9CisK Ky8qIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgdXBwZXIgYm91 bmQgYmVjYXVzZSBvZiB0aGUgZm9ybSwKKyAgIHdoaWNoIGlzIHVzZWQgYnkg aXNsIHRvIHJlcHJlc2VudCBsb29wczoKKworICAgZm9yIChpdGVyYXRvciA9 IGluaXQ7IGNvbmQ7IGl0ZXJhdG9yICs9IGluYykKKworICAgeworCisgICAg IC4uLgorCisgICB9CisKKyAgIFRoZSBsb29wIGNvbmRpdGlvbiBpcyBhbiBh cmJpdHJhcnkgZXhwcmVzc2lvbiwgd2hpY2ggY29udGFpbnMgdGhlCisgICBj dXJyZW50IGxvb3AgaXRlcmF0b3IuCisKKyAgIFdlIGhhdmUgdG8ga25vdyB0 aGUgdXBwZXIgYm91bmQgb2YgdGhlIGl0ZXJhdG9yIHRvIGdlbmVyYXRlIGEg bG9vcAorICAgaW4gR2ltcGxlIGZvcm0uIEl0IGNhbiBiZSBvYnRhaW5lZCBm cm9tIHRoZSBzcGVjaWFsIHJlcHJlc2VudGF0aW9uCisgICBvZiB0aGUgbG9v cCBjb25kaXRpb24sIHdoaWNoIGlzIGdlbmVyYXRlZCBieSBpc2wsCisgICBp ZiB0aGUgYXN0X2J1aWxkX2F0b21pY191cHBlcl9ib3VuZCBvcHRpb24gaXMg c2V0LiBJbiB0aGlzIGNhc2UsCisgICBpc2wgZ2VuZXJhdGVzIGEgbG9vcCBj b25kaXRpb24gdGhhdCBjb25zaXN0cyBvZiB0aGUgY3VycmVudCBsb29wCisg ICBpdGVyYXRvciwgKyBhbiBvcGVyYXRvciAoPCBvciA8PSkgYW5kIGFuIGV4 cHJlc3Npb24gbm90IGludm9sdmluZworICAgdGhlIGl0ZXJhdG9yLCB3aGlj aCBpcyBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24u ICAqLworCitzdGF0aWMgX19pc2xfZ2l2ZSBpc2xfYXN0X2V4cHIgKgorZ2V0 X3VwcGVyX2JvdW5kIChfX2lzbF9rZWVwIGlzbF9hc3Rfbm9kZSAqbm9kZV9m b3IpCit7CisgIGdjY19hc3NlcnQgKGlzbF9hc3Rfbm9kZV9nZXRfdHlwZSAo bm9kZV9mb3IpID09IGlzbF9hc3Rfbm9kZV9mb3IpOworICBpc2xfYXN0X2V4 cHIgKmZvcl9jb25kID0gaXNsX2FzdF9ub2RlX2Zvcl9nZXRfY29uZCAobm9k ZV9mb3IpOworICBnY2NfYXNzZXJ0IChpc2xfYXN0X2V4cHJfZ2V0X3R5cGUg KGZvcl9jb25kKSA9PSBpc2xfYXN0X2V4cHJfb3ApOworICBpc2xfYXN0X2V4 cHIgKnJlczsKKyAgc3dpdGNoIChpc2xfYXN0X2V4cHJfZ2V0X29wX3R5cGUg KGZvcl9jb25kKSkKKyAgICB7CisgICAgY2FzZSBpc2xfYXN0X29wX2xlOgor ICAgICAgcmVzID0gaXNsX2FzdF9leHByX2dldF9vcF9hcmcgKGZvcl9jb25k LCAxKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBpc2xfYXN0X29wX2x0 OgorICAgICAgeworICAgICAgICAvLyAoaXRlcmFvdHIgPCB1YikgPT4gKGl0 ZXJhdG9yIDw9IHViIC0gMSkKKyAgICAgICAgaXNsX3ZhbCAqb25lID0gaXNs X3ZhbF9pbnRfZnJvbV9zaSAoaXNsX2FzdF9leHByX2dldF9jdHggKGZvcl9j b25kKSwgMSk7CisgICAgICAgIGlzbF9hc3RfZXhwciAqdWIgPSBpc2xfYXN0 X2V4cHJfZ2V0X29wX2FyZyAoZm9yX2NvbmQsIDEpOworICAgICAgICByZXMg PSBpc2xfYXN0X2V4cHJfc3ViICh1YiwgaXNsX2FzdF9leHByX2Zyb21fdmFs IChvbmUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBkZWZh dWx0OgorICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KKyAgaXNs X2FzdF9leHByX2ZyZWUgKGZvcl9jb25kKTsKKyAgcmV0dXJuIHJlczsKK30K KworLyogQWxsIGxvb3BzIGdlbmVyYXRlZCBieSBjcmVhdGVfZW1wdHlfbG9v cF9vbl9lZGdlIGhhdmUgdGhlIGZvcm0gb2YKKyAgIGEgcG9zdC10ZXN0IGxv b3A6CisKKyAgIGRvCisKKyAgIHsKKyAgICAgYm9keSBvZiB0aGUgbG9vcDsK KyAgIH0gd2hpbGUgKGxvd2VyIGJvdW5kIDwgdXBwZXIgYm91bmQpOworCisg ICBXZSBjcmVhdGUgYSBuZXcgaWYgcmVnaW9uIHByb3RlY3RpbmcgdGhlIGxv b3AgdG8gYmUgZXhlY3V0ZWQsIGlmCisgICB0aGUgZXhlY3V0aW9uIGNvdW50 IGlzIHplcm8gKGxvd2VyIGJvdW5kID4gdXBwZXIgYm91bmQpLiBJbiB0aGlz IGNhc2UsCisgICBpdCBpcyBzdWJzZXF1ZW50bHkgcmVtb3ZlZCBieSBkZWFk IGNvZGUgZWxpbWluYXRpb24uICAqLworCitzdGF0aWMgZWRnZQorZ3JhcGhp dGVfY3JlYXRlX25ld19sb29wX2d1YXJkIChlZGdlIGVudHJ5X2VkZ2UsCisJ CQkJX19pc2xfa2VlcCBpc2xfYXN0X25vZGUgKm5vZGVfZm9yLCB0cmVlICp0 eXBlLAorCQkJCXRyZWUgKmxiLCB0cmVlICp1YiwgaXZzX3BhcmFtc19wIGlw KQoreworICBnY2NfYXNzZXJ0IChpc2xfYXN0X25vZGVfZ2V0X3R5cGUgKG5v ZGVfZm9yKSA9PSBpc2xfYXN0X25vZGVfZm9yKTsKKyAgdHJlZSBjb25kX2V4 cHI7CisgIGVkZ2UgZXhpdF9lZGdlOworCisgICp0eXBlID0gKmdyYXBoaXRl X2V4cHJlc3Npb25fc2l6ZV90eXBlOworICBpc2xfYXN0X2V4cHIgKmZvcl9p bml0ID0gaXNsX2FzdF9ub2RlX2Zvcl9nZXRfaW5pdCAobm9kZV9mb3IpOwor ICAqbGIgPSBnY2NfZXhwcmVzc2lvbl9mcm9tX2lzbF9leHByZXNzaW9uICgq dHlwZSwgZm9yX2luaXQsIGlwKTsKKyAgaXNsX2FzdF9leHByX2ZyZWUgKGZv cl9pbml0KTsKKyAgaXNsX2FzdF9leHByICp1cHBlcl9ib3VuZCA9IGdldF91 cHBlcl9ib3VuZCAobm9kZV9mb3IpOworICAqdWIgPSBnY2NfZXhwcmVzc2lv bl9mcm9tX2lzbF9leHByZXNzaW9uICgqdHlwZSwgdXBwZXJfYm91bmQsIGlw KTsKKyAgaXNsX2FzdF9leHByX2ZyZWUgKHVwcGVyX2JvdW5kKTsKKyAgCisg IC8qIFdoZW4gdWIgaXMgc2ltcGx5IGEgY29uc3RhbnQgb3IgYSBwYXJhbWV0 ZXIsIHVzZSBsYiA8PSB1Yi4gICovCisgIGlmIChUUkVFX0NPREUgKCp1Yikg PT0gSU5URUdFUl9DU1QgfHwgVFJFRV9DT0RFICgqdWIpID09IFNTQV9OQU1F KQorICAgIGNvbmRfZXhwciA9IGZvbGRfYnVpbGQyIChMRV9FWFBSLCBib29s ZWFuX3R5cGVfbm9kZSwgKmxiLCAqdWIpOworICBlbHNlCisgICAgeworICAg ICAgdHJlZSBvbmUgPSAoUE9JTlRFUl9UWVBFX1AgKCp0eXBlKQorCQkgID8g Y29udmVydF90b19wdHJvZmZ0eXBlIChpbnRlZ2VyX29uZV9ub2RlKQorCQkg IDogZm9sZF9jb252ZXJ0ICgqdHlwZSwgaW50ZWdlcl9vbmVfbm9kZSkpOwor ICAgICAgLyogQWRkaW5nICsxIGFuZCB1c2luZyBMVF9FWFBSIGhlbHBzIHdp dGggbG9vcCBsYXRjaGVzIHRoYXQgaGF2ZSBhCisJIGxvb3AgaXRlcmF0aW9u IGNvdW50IG9mICJQQVJBTUVURVIgLSAxIi4gIEZvciBQQVJBTUVURVIgPT0g MCB0aGlzCisJIGJlY29tZXMgMl5rLTEgZHVlIHRvIGludGVnZXIgb3ZlcmZs b3csIGFuZCB0aGUgY29uZGl0aW9uIGxiIDw9IHViCisJIGlzIHRydWUsIGV2 ZW4gaWYgd2UgZG8gbm90IHdhbnQgdGhpcy4gIEhvd2V2ZXIgbGIgPCB1YiAr IDEgaXMgZmFsc2UsCisJIGFzIGV4cGVjdGVkLiAgKi8KKyAgICAgIHRyZWUg dWJfb25lID0gZm9sZF9idWlsZDIgKFBPSU5URVJfVFlQRV9QICgqdHlwZSkg PyBQT0lOVEVSX1BMVVNfRVhQUgorCQkJCSA6IFBMVVNfRVhQUiwgKnR5cGUs ICp1Yiwgb25lKTsKKworICAgICAgY29uZF9leHByID0gZm9sZF9idWlsZDIg KExUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCAqbGIsIHViX29uZSk7Cisg ICAgfQorCisgIGV4aXRfZWRnZSA9IGNyZWF0ZV9lbXB0eV9pZl9yZWdpb25f b25fZWRnZSAoZW50cnlfZWRnZSwgY29uZF9leHByKTsKKworICByZXR1cm4g ZXhpdF9lZGdlOworfQorCisvKiBUcmFuc2xhdGVzIGFuIGlzbF9hc3Rfbm9k ZV9mb3IgdG8gR2ltcGxlLiAqLworCitzdGF0aWMgZWRnZQordHJhbnNsYXRl X2lzbF9hc3Rfbm9kZV9mb3IgKGxvb3BfcCBjb250ZXh0X2xvb3AsIF9faXNs X2tlZXAgaXNsX2FzdF9ub2RlICpub2RlLAorCQkJICAgIGVkZ2UgbmV4dF9l LCBpdnNfcGFyYW1zX3AgaXApCit7CisgIGdjY19hc3NlcnQgKGlzbF9hc3Rf bm9kZV9nZXRfdHlwZSAobm9kZSkgPT0gaXNsX2FzdF9ub2RlX2Zvcik7Cisg IHRyZWUgdHlwZSwgbGIsIHViOworICBlZGdlIGxhc3RfZSA9IGdyYXBoaXRl X2NyZWF0ZV9uZXdfbG9vcF9ndWFyZCAobmV4dF9lLCBub2RlLCAmdHlwZSwK KwkJCQkJCSZsYiwgJnViLCBpcCk7CisgIGVkZ2UgdHJ1ZV9lID0gZ2V0X3Ry dWVfZWRnZV9mcm9tX2d1YXJkX2JiIChuZXh0X2UtPmRlc3QpOworCisgIHRy YW5zbGF0ZV9pc2xfYXN0X2Zvcl9sb29wIChjb250ZXh0X2xvb3AsIG5vZGUs IHRydWVfZSwKKwkJCSAgICAgIHR5cGUsIGxiLCB1YiwgaXApOworICByZXR1 cm4gbGFzdF9lOworfQorCisvKiBUcmFuc2xhdGVzIGFuIElTTCBBU1Qgbm9k ZSBOT0RFIHRvIEdDQyByZXByZXNlbnRhdGlvbiBpbiB0aGUKKyAgIGNvbnRl eHQgb2YgYSBTRVNFLiAgKi8KKworc3RhdGljIGVkZ2UKK3RyYW5zbGF0ZV9p c2xfYXN0IChsb29wX3AgY29udGV4dF9sb29wLCBfX2lzbF9rZWVwIGlzbF9h c3Rfbm9kZSAqbm9kZSwKKwkJICAgZWRnZSBuZXh0X2UsIGl2c19wYXJhbXNf cCBpcCkKK3sKKyAgc3dpdGNoIChpc2xfYXN0X25vZGVfZ2V0X3R5cGUgKG5v ZGUpKQorICAgIHsKKyAgICBjYXNlIGlzbF9hc3Rfbm9kZV9lcnJvcjoKKyAg ICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKworICAgIGNhc2UgaXNsX2FzdF9u b2RlX2ZvcjoKKyAgICAgIHJldHVybiB0cmFuc2xhdGVfaXNsX2FzdF9ub2Rl X2ZvciAoY29udGV4dF9sb29wLCBub2RlLAorCQkJCQkgbmV4dF9lLCBpcCk7 CisKKyAgICBjYXNlIGlzbF9hc3Rfbm9kZV9pZjoKKyAgICAgIHJldHVybiBu ZXh0X2U7CisKKyAgICBjYXNlIGlzbF9hc3Rfbm9kZV91c2VyOgorICAgICAg cmV0dXJuIG5leHRfZTsKKworICAgIGNhc2UgaXNsX2FzdF9ub2RlX2Jsb2Nr OgorICAgICAgcmV0dXJuIG5leHRfZTsKKworICAgIGRlZmF1bHQ6CisgICAg ICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorfQorCiAvKiBQcmludHMg Tk9ERSB0byBGSUxFLiAgKi8KIAogdm9pZApAQCAtNjUsOSArNjg5LDMzIEBA CiAgIGlzbF9wcmludGVyX2ZyZWUgKHBybik7CiB9CiAKKy8qIEFkZCB0cmVl IHJlcHJlc2VudGF0aW9ucyBhbmQgbmFtZXMgb2YgcGFyYW1ldGVycyB0byBp dnNfcGFyYW1zICAqLworCitzdGF0aWMgdm9pZAorYWRkX3BhcmFtZXRlcnNf dG9faXZzX3BhcmFtcyAoc2NvcF9wIHNjb3AsIGl2c19wYXJhbXNfcCBpcCkK K3sKKyAgc2VzZSByZWdpb24gPSBTQ09QX1JFR0lPTiAoc2NvcCk7CisgIGlu dCBpOworICBpbnQgbmJfcGFyYW1ldGVycyA9IFNFU0VfUEFSQU1TIChyZWdp b24pLmxlbmd0aCAoKTsKKyAgZ2NjX2Fzc2VydCAobmJfcGFyYW1ldGVycyA9 PSAoc2hvcnQpIGlzbF9zZXRfZGltIChzY29wLT5jb250ZXh0LAorCQkJCQkJ ICAgIGlzbF9kaW1fcGFyYW0pKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbmJf cGFyYW1ldGVyczsgaSsrKQorICAgIHsKKyAgICAgIHRyZWUgcGFyYW0gPSBT RVNFX1BBUkFNUyAocmVnaW9uKVtpXTsKKyAgICAgIGNvbnN0IGNoYXIgKm5h bWUgPSBnZXRfbmFtZSAocGFyYW0pOworCisgICAgICBpZiAoIW5hbWUpCisJ bmFtZSA9ICJUIjsKKyAgICAgIHNhdmVfaXNsX2lkX25hbWVfaW5kZXggKGlw LT5pdnNfcGFyYW1zX2luZGV4LCBuYW1lLCBpKTsKKyAgICAgIChpcC0+aXZz X3BhcmFtc192ZWMpLnNhZmVfcHVzaCAocGFyYW0pOworICAgIH0KK30KKwor CiAvKiBHZW5lcmF0ZXMgYSBidWlsZCwgd2hpY2ggc3BlY2lmaWVzIHRoZSBj b25zdHJhaW50cyBvbiB0aGUgcGFyYW1ldGVycy4gICovCiAKLXN0YXRpYyBp c2xfYXN0X2J1aWxkICoKK3N0YXRpYyBfX2lzbF9naXZlIGlzbF9hc3RfYnVp bGQgKgogZ2VuZXJhdGVfaXNsX2NvbnRleHQgKHNjb3BfcCBzY29wKQogewog ICBpc2xfc2V0ICpjb250ZXh0X2lzbCA9IGlzbF9zZXRfcGFyYW1zIChpc2xf c2V0X2NvcHkgKHNjb3AtPmNvbnRleHQpKTsKQEAgLTc3LDcgKzcyNSw3IEBA CiAvKiBHZW5lcmF0ZXMgYSBzY2hlZHVsZSwgd2hpY2ggc3BlY2lmaWVzIGFu IG9yZGVyIHVzZWQgdG8KICAgIHZpc2l0IGVsZW1lbnRzIGluIGEgZG9tYWlu LiAgKi8KIAotc3RhdGljIGlzbF91bmlvbl9tYXAgKgorc3RhdGljIF9faXNs X2dpdmUgaXNsX3VuaW9uX21hcCAqCiBnZW5lcmF0ZV9pc2xfc2NoZWR1bGUg KHNjb3BfcCBzY29wKQogewogICBpbnQgaTsKQEAgLTEwMiw5ICs3NTAsMTYg QEAKICAgcmV0dXJuIHNjaGVkdWxlX2lzbDsKIH0KIAotc3RhdGljIGlzbF9h c3Rfbm9kZSAqCi1zY29wX3RvX2lzbF9hc3QgKHNjb3BfcCBzY29wKQorc3Rh dGljIF9faXNsX2dpdmUgaXNsX2FzdF9ub2RlICoKK3Njb3BfdG9faXNsX2Fz dCAoc2NvcF9wIHNjb3AsIGl2c19wYXJhbXNfcCBpcCkKIHsKKyAgLyogR2Vu ZXJhdGUgbG9vcCB1cHBlciBib3VuZHMgdGhhdCBjb25zaXN0IG9mIHRoZSBj dXJyZW50IGxvb3AgaXRlcmF0b3IsCisgIGFuIG9wZXJhdG9yICg8IG9yIDw9 KSBhbmQgYW4gZXhwcmVzc2lvbiBub3QgaW52b2x2aW5nIHRoZSBpdGVyYXRv ci4KKyAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCwgdGhlbiB0aGUgY3Vy cmVudCBsb29wIGl0ZXJhdG9yIG1heSBhcHBlYXIgc2V2ZXJhbAorICB0aW1l cyBpbiB0aGUgdXBwZXIgYm91bmQuIFNlZSB0aGUgaXNsIG1hbnVhbCBmb3Ig bW9yZSBkZXRhaWxzLiAgKi8KKyAgaXNsX29wdGlvbnNfc2V0X2FzdF9idWls ZF9hdG9taWNfdXBwZXJfYm91bmQgKHNjb3AtPmN0eCwgdHJ1ZSk7CisKKyAg YWRkX3BhcmFtZXRlcnNfdG9faXZzX3BhcmFtcyAoc2NvcCwgaXApOwogICBp c2xfdW5pb25fbWFwICpzY2hlZHVsZV9pc2wgPSBnZW5lcmF0ZV9pc2xfc2No ZWR1bGUgKHNjb3ApOwogICBpc2xfYXN0X2J1aWxkICpjb250ZXh0X2lzbCA9 IGdlbmVyYXRlX2lzbF9jb250ZXh0IChzY29wKTsKICAgaXNsX2FzdF9ub2Rl ICphc3RfaXNsID0gaXNsX2FzdF9idWlsZF9hc3RfZnJvbV9zY2hlZHVsZSAo Y29udGV4dF9pc2wsCkBAIC0xMTcsMjEgKzc3Miw2OCBAQAogICAgdGhlIGdp dmVuIFNDT1AuICBSZXR1cm4gdHJ1ZSBpZiBjb2RlIGdlbmVyYXRpb24gc3Vj Y2VlZGVkLgogCiAgICBGSVhNRTogVGhpcyBpcyBub3QgeWV0IGEgZnVsbCBp bXBsZW1lbnRhdGlvbiBvZiB0aGUgY29kZSBnZW5lcmF0b3IKLSAgICAgICAg ICB3aXRoIElTTCBBU1RzLiBHZW5lcmF0aW9uIG9mIEdJTVBMRSBjb2RlIGlz IGhhdmUgdG8gYmUgYWRkZWQuICAqLworICAgICAgICAgIHdpdGggSVNMIEFT VHMuIEdlbmVyYXRpb24gb2YgR0lNUExFIGNvZGUgaGFzIHRvIGJlIGNvbXBs ZXRlZC4gICovCiAKIGJvb2wKIGdyYXBoaXRlX3JlZ2VuZXJhdGVfYXN0X2lz bCAoc2NvcF9wIHNjb3ApCiB7CisgIGxvb3BfcCBjb250ZXh0X2xvb3A7Cisg IHNlc2UgcmVnaW9uID0gU0NPUF9SRUdJT04gKHNjb3ApOworICBpZnNlc2Ug aWZfcmVnaW9uID0gTlVMTDsKKyAgYXN0X2lzbF9pbmRleF9odGFiX3R5cGUg Kml2c19wYXJhbXNfaW5kZXg7CisgIGlzbF9hc3Rfbm9kZSAqcm9vdF9ub2Rl OworICBzdHJ1Y3QgaXZzX3BhcmFtcyBpcDsKKwogICB0aW1ldmFyX3B1c2gg KFRWX0dSQVBISVRFX0NPREVfR0VOKTsKICAgZ3JhcGhpdGVfcmVnZW5lcmF0 ZV9lcnJvciA9IGZhbHNlOwotICBpc2xfYXN0X25vZGUgKnJvb3Rfbm9kZSA9 IHNjb3BfdG9faXNsX2FzdCAoc2NvcCk7CisKKyAgYXV0b192ZWM8dHJlZSwg MTA+IGl2c19wYXJhbXNfdmVjOworICBpdnNfcGFyYW1zX2luZGV4ID0gbmV3 IGFzdF9pc2xfaW5kZXhfaHRhYl90eXBlICgxMCk7CisgIGlwLml2c19wYXJh bXNfdmVjID0gaXZzX3BhcmFtc192ZWM7CisgIGlwLml2c19wYXJhbXNfaW5k ZXggPSBpdnNfcGFyYW1zX2luZGV4OworICBpcC5yZWdpb24gPSByZWdpb247 CisKKyAgcm9vdF9ub2RlID0gc2NvcF90b19pc2xfYXN0IChzY29wLCAmaXAp OworCiAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVU QUlMUykpCiAgICAgewogICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG5J U0wgQVNUIGdlbmVyYXRlZCBieSBJU0w6IFxuIik7CiAgICAgICBwcmludF9p c2xfYXN0X25vZGUgKGR1bXBfZmlsZSwgcm9vdF9ub2RlLCBzY29wLT5jdHgp OworICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG4iKTsKICAgICB9CisK KyAgcmVjb21wdXRlX2FsbF9kb21pbmF0b3JzICgpOworICBncmFwaGl0ZV92 ZXJpZnkgKCk7CisKKyAgaWZfcmVnaW9uID0gbW92ZV9zZXNlX2luX2NvbmRp dGlvbiAocmVnaW9uKTsKKyAgc2VzZV9pbnNlcnRfcGhpc19mb3JfbGl2ZW91 dHMgKHJlZ2lvbiwKKwkJCQkgaWZfcmVnaW9uLT5yZWdpb24tPmV4aXQtPnNy YywKKwkJCQkgaWZfcmVnaW9uLT5mYWxzZV9yZWdpb24tPmV4aXQsCisJCQkJ IGlmX3JlZ2lvbi0+dHJ1ZV9yZWdpb24tPmV4aXQpOworICByZWNvbXB1dGVf YWxsX2RvbWluYXRvcnMgKCk7CisgIGdyYXBoaXRlX3ZlcmlmeSAoKTsKKwor ICBjb250ZXh0X2xvb3AgPSBTRVNFX0VOVFJZIChyZWdpb24pLT5zcmMtPmxv b3BfZmF0aGVyOworCisgIHRyYW5zbGF0ZV9pc2xfYXN0IChjb250ZXh0X2xv b3AsIHJvb3Rfbm9kZSwgaWZfcmVnaW9uLT50cnVlX3JlZ2lvbi0+ZW50cnks CisJCSAgICAgJmlwKTsKKyAgZ3JhcGhpdGVfdmVyaWZ5ICgpOworICBzY2V2 X3Jlc2V0ICgpOworICByZWNvbXB1dGVfYWxsX2RvbWluYXRvcnMgKCk7Cisg IGdyYXBoaXRlX3ZlcmlmeSAoKTsKKworICBpZiAoZ3JhcGhpdGVfcmVnZW5l cmF0ZV9lcnJvcikKKyAgICBzZXRfaWZzZXNlX2NvbmRpdGlvbiAoaWZfcmVn aW9uLCBpbnRlZ2VyX3plcm9fbm9kZSk7CisKKyAgZnJlZSAoaWZfcmVnaW9u LT50cnVlX3JlZ2lvbik7CisgIGZyZWUgKGlmX3JlZ2lvbi0+cmVnaW9uKTsK KyAgZnJlZSAoaWZfcmVnaW9uKTsKKworICBkZWxldGUgaXZzX3BhcmFtc19p bmRleDsKKyAgaXZzX3BhcmFtc19pbmRleCA9IE5VTEw7CiAgIGlzbF9hc3Rf bm9kZV9mcmVlIChyb290X25vZGUpOwogICB0aW1ldmFyX3BvcCAoVFZfR1JB UEhJVEVfQ09ERV9HRU4pOworICAvKiBUT0RPOiBBZGQgZHVtcCAgKi8KICAg cmV0dXJuICFncmFwaGl0ZV9yZWdlbmVyYXRlX2Vycm9yOwogfQogI2VuZGlm Cg== --001a11c20cf413753204fd6ce000 Content-Type: text/plain; charset=US-ASCII; name="patch_with_isl_val.txt" Content-Disposition: attachment; filename="patch_with_isl_val.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hx8l5wnx1 Content-length: 32509 SW5kZXg6IGdjYy9ncmFwaGl0ZS1pc2wtYXN0LXRvLWdpbXBsZS5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9ncmFwaGl0ZS1pc2wtYXN0LXRv LWdpbXBsZS5jCShyZXZpc2lvbiAyMTIyOTQpCisrKyBnY2MvZ3JhcGhpdGUt aXNsLWFzdC10by1naW1wbGUuYwkod29ya2luZyBjb3B5KQpAQCAtMjUsNyAr MjUsMTQgQEAKICNpbmNsdWRlIDxpc2wvbWFwLmg+CiAjaW5jbHVkZSA8aXNs L3VuaW9uX21hcC5oPgogI2luY2x1ZGUgPGlzbC9hc3RfYnVpbGQuaD4KKyNp ZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CiAjZW5kaWYK KyNpbmNsdWRlIDxpc2wvdmFsX2dtcC5oPgorI2lmIGRlZmluZWQoX19jcGx1 c3BsdXMpCit9CisjZW5kaWYKKyNlbmRpZgogCiAjaW5jbHVkZSAic3lzdGVt LmgiCiAjaW5jbHVkZSAiY29yZXR5cGVzLmgiCkBAIC00MiwxNiArNDksNjQy IEBACiAjaW5jbHVkZSAiY2ZnbG9vcC5oIgogI2luY2x1ZGUgInRyZWUtZGF0 YS1yZWYuaCIKICNpbmNsdWRlICJzZXNlLmgiCisjaW5jbHVkZSAidHJlZS1z c2EtbG9vcC1tYW5pcC5oIgorI2luY2x1ZGUgInRyZWUtc2NhbGFyLWV2b2x1 dGlvbi5oIgogCiAjaWZkZWYgSEFWRV9jbG9vZwogI2luY2x1ZGUgImdyYXBo aXRlLXBvbHkuaCIKICNpbmNsdWRlICJncmFwaGl0ZS1pc2wtYXN0LXRvLWdp bXBsZS5oIgorI2luY2x1ZGUgImdyYXBoaXRlLWh0YWIuaCIKIAogLyogVGhp cyBmbGFnIGlzIHNldCB3aGVuIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0 aGUgdHJhbnNsYXRpb24gb2YKICAgIElTTCBBU1QgdG8gR2ltcGxlLiAgKi8K IAogc3RhdGljIGJvb2wgZ3JhcGhpdGVfcmVnZW5lcmF0ZV9lcnJvcjsKIAor LyogV2UgYWx3YXlzIHVzZSBzaWduZWQgMTI4LCB1bnRpbCBpc2wgaXMgYWJs ZSB0byBnaXZlIGluZm9ybWF0aW9uIGFib3V0Cit0eXBlcyAgKi8KKworc3Rh dGljIHRyZWUgKmdyYXBoaXRlX2V4cHJlc3Npb25fc2l6ZV90eXBlID0gJmlu dDEyOF9pbnRlZ2VyX3R5cGVfbm9kZTsKKworLyogQ29udmVydHMgYSBHTVAg Y29uc3RhbnQgVkFMIHRvIGEgdHJlZSBhbmQgcmV0dXJucyBpdC4gICovCisK K3N0YXRpYyB0cmVlCitnbXBfY3N0X3RvX3RyZWUgKHRyZWUgdHlwZSwgbXB6 X3QgdmFsKQoreworICB0cmVlIHQgPSB0eXBlID8gdHlwZSA6IGludGVnZXJf dHlwZV9ub2RlOworICBtcHpfdCB0bXA7CisKKyAgbXB6X2luaXQgKHRtcCk7 CisgIG1wel9zZXQgKHRtcCwgdmFsKTsKKyAgd2lkZV9pbnQgd2kgPSB3aTo6 ZnJvbV9tcHogKHQsIHRtcCwgdHJ1ZSk7CisgIG1wel9jbGVhciAodG1wKTsK KworICByZXR1cm4gd2lkZV9pbnRfdG9fdHJlZSAodCwgd2kpOworfQorCisv KiBWZXJpZmllcyBwcm9wZXJ0aWVzIHRoYXQgR1JBUEhJVEUgc2hvdWxkIG1h aW50YWluIGR1cmluZyB0cmFuc2xhdGlvbi4gICovCisKK3N0YXRpYyBpbmxp bmUgdm9pZAorZ3JhcGhpdGVfdmVyaWZ5ICh2b2lkKQoreworI2lmZGVmIEVO QUJMRV9DSEVDS0lORworICB2ZXJpZnlfbG9vcF9zdHJ1Y3R1cmUgKCk7Cisg IHZlcmlmeV9sb29wX2Nsb3NlZF9zc2EgKHRydWUpOworI2VuZGlmCit9CisK Ky8qIFN0b3JlcyB0aGUgSU5ERVggaW4gYSB2ZWN0b3IgZm9yIGEgZ2l2ZW4g aXNsX2lkIE5BTUUuICAqLworCit0eXBlZGVmIHN0cnVjdCBhc3RfaXNsX25h bWVfaW5kZXggeworICBpbnQgaW5kZXg7CisgIGNvbnN0IGNoYXIgKm5hbWU7 CisgIC8qIElmIGZyZWVfbmFtZSBpcyBzZXQsIHRoZSBjb250ZW50IG9mIG5h bWUgd2FzIGFsbG9jYXRlZCBieSB1cyBhbmQgbmVlZHMKKyAgICAgdG8gYmUg ZnJlZWQuICAqLworICBjaGFyICpmcmVlX25hbWU7Cit9ICphc3RfaXNsX25h bWVfaW5kZXhfcDsKKworLyogSGVscGVyIGZvciBoYXNoaW5nIGFzdF9pc2xf bmFtZV9pbmRleC4gICovCisKK3N0cnVjdCBhc3RfaXNsX2luZGV4X2hhc2hl cgoreworICB0eXBlZGVmIGFzdF9pc2xfbmFtZV9pbmRleCB2YWx1ZV90eXBl OworICB0eXBlZGVmIGFzdF9pc2xfbmFtZV9pbmRleCBjb21wYXJlX3R5cGU7 CisgIHN0YXRpYyBpbmxpbmUgaGFzaHZhbF90IGhhc2ggKGNvbnN0IHZhbHVl X3R5cGUgKik7CisgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbCAoY29uc3Qg dmFsdWVfdHlwZSAqLCBjb25zdCBjb21wYXJlX3R5cGUgKik7CisgIHN0YXRp YyBpbmxpbmUgdm9pZCByZW1vdmUgKHZhbHVlX3R5cGUgKik7Cit9OworCisv KiBDb21wdXRlcyBhIGhhc2ggZnVuY3Rpb24gZm9yIGRhdGFiYXNlIGVsZW1l bnQgRS4gICovCisKK2lubGluZSBoYXNodmFsX3QKK2FzdF9pc2xfaW5kZXhf aGFzaGVyOjpoYXNoIChjb25zdCB2YWx1ZV90eXBlICplKQoreworICBoYXNo dmFsX3QgaGFzaCA9IDA7CisKKyAgaW50IGxlbmd0aCA9IHN0cmxlbiAoZS0+ bmFtZSk7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7 ICsraSkKKyAgICBoYXNoID0gaGFzaCB8IChlLT5uYW1lW2ldIDw8IChpICUg NCkpOworCisgIHJldHVybiBoYXNoOworfQorCisvKiBDb21wYXJlcyBkYXRh YmFzZSBlbGVtZW50cyBFTFQxIGFuZCBFTFQyLiAgKi8KKworaW5saW5lIGJv b2wKK2FzdF9pc2xfaW5kZXhfaGFzaGVyOjplcXVhbCAoY29uc3QgdmFsdWVf dHlwZSAqZWx0MSwgY29uc3QgY29tcGFyZV90eXBlICplbHQyKQoreworICBy ZXR1cm4gc3RyY21wIChlbHQxLT5uYW1lLCBlbHQyLT5uYW1lKSA9PSAwOwor fQorCisvKiBGcmVlIHRoZSBtZW1vcnkgdGFrZW4gYnkgYSBhc3RfaXNsX25h bWVfaW5kZXggc3RydWN0LiAgKi8KKworaW5saW5lIHZvaWQKK2FzdF9pc2xf aW5kZXhfaGFzaGVyOjpyZW1vdmUgKHZhbHVlX3R5cGUgKmMpCit7CisgIGlm IChjLT5mcmVlX25hbWUpCisgICAgZnJlZSAoYy0+ZnJlZV9uYW1lKTsKKyAg ZnJlZSAoYyk7Cit9CisKK3R5cGVkZWYgaGFzaF90YWJsZTxhc3RfaXNsX2lu ZGV4X2hhc2hlcj4gYXN0X2lzbF9pbmRleF9odGFiX3R5cGU7CisKKy8qIFJl dHVybnMgYSBwb2ludGVyIHRvIGEgbmV3IGVsZW1lbnQgb2YgdHlwZSBhc3Rf aXNsX25hbWVfaW5kZXhfcCBidWlsdAorICAgZnJvbSBOQU1FLCBJTkRFWC4g ICovCisKK3N0YXRpYyBpbmxpbmUgYXN0X2lzbF9uYW1lX2luZGV4X3AKK25l d19hc3RfaXNsX25hbWVfaW5kZXggKGNvbnN0IGNoYXIgKm5hbWUsIGludCBp bmRleCkKK3sKKyAgYXN0X2lzbF9uYW1lX2luZGV4X3AgcmVzID0gWE5FVyAo c3RydWN0IGFzdF9pc2xfbmFtZV9pbmRleCk7CisgIGNoYXIgKm5ld19uYW1l ID0gWE5FV1ZFQyAoY2hhciwgc3RybGVuIChuYW1lKSArIDEpOworICBzdHJj cHkgKG5ld19uYW1lLCBuYW1lKTsKKworICByZXMtPm5hbWUgPSBuZXdfbmFt ZTsKKyAgcmVzLT5mcmVlX25hbWUgPSBuZXdfbmFtZTsKKyAgcmVzLT5pbmRl eCA9IGluZGV4OworICByZXR1cm4gcmVzOworfQorCisvKiBGb3IgYSBnaXZl biBuYW1lIG9mIHRoZSBpc2xfaWQsIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUg aXNsX2FzdF9leHByIEVYUFJfSUQsCisgICByZXR1cm5zIC0xIGlmIGl0IGRv ZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IHBhcmFtZXRlciwgb3Igb3RoZXJ3 aXNlLCByZXR1cm5zCisgICB0aGUgaW5kZXggaW4gdGhlIFBBUkFNUyBvciBT Q0FUVEVSSU5HX0RJTUVOU0lPTlMgdmVjdG9yLiAgKi8KKworc3RhdGljIGlu bGluZSBpbnQKK2FzdF9leHByX2lkX3RvX2luZGV4IChfX2lzbF9rZWVwIGlz bF9hc3RfZXhwciAqZXhwcl9pZCwKKwkJICAgICAgYXN0X2lzbF9pbmRleF9o dGFiX3R5cGUgKmluZGV4X3RhYmxlKQoreworICBzdHJ1Y3QgYXN0X2lzbF9u YW1lX2luZGV4IHRtcDsKKyAgYXN0X2lzbF9uYW1lX2luZGV4ICoqc2xvdDsK KworICBpc2xfaWQgKnRtcF9pc2xfaWQgPSBpc2xfYXN0X2V4cHJfZ2V0X2lk IChleHByX2lkKTsKKyAgdG1wLm5hbWUgPSBpc2xfaWRfZ2V0X25hbWUgKHRt cF9pc2xfaWQpOworICB0bXAuZnJlZV9uYW1lID0gTlVMTDsKKworICBzbG90 ID0gaW5kZXhfdGFibGUtPmZpbmRfc2xvdCAoJnRtcCwgTk9fSU5TRVJUKTsK KworICBpc2xfaWRfZnJlZSAodG1wX2lzbF9pZCk7CisgIGlmIChzbG90ICYm ICpzbG90KQorICAgIHJldHVybiAoKnNsb3QpLT5pbmRleDsKKworICByZXR1 cm4gLTE7Cit9CisKKy8qIFJlY29yZHMgaW4gSU5ERVhfVEFCTEUgdGhlIElO REVYIGFuZCBmb3IgTkFNRS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAor c2F2ZV9pc2xfaWRfbmFtZV9pbmRleCAoYXN0X2lzbF9pbmRleF9odGFiX3R5 cGUgKmluZGV4X3RhYmxlLAorCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGlu ZGV4KQoreworICBzdHJ1Y3QgYXN0X2lzbF9uYW1lX2luZGV4IHRtcDsKKyAg YXN0X2lzbF9uYW1lX2luZGV4ICoqc2xvdDsKKworICB0bXAubmFtZSA9IG5h bWU7CisgIHRtcC5mcmVlX25hbWUgPSBOVUxMOworICBzbG90ID0gaW5kZXhf dGFibGUtPmZpbmRfc2xvdCAoJnRtcCwgSU5TRVJUKTsKKworICBpZiAoc2xv dCkKKyAgICB7CisgICAgICBmcmVlICgqc2xvdCk7CisgICAgICAqc2xvdCA9 IG5ld19hc3RfaXNsX25hbWVfaW5kZXggKG5hbWUsIGluZGV4KTsKKyAgICB9 Cit9CisKKy8qIElOREVYIGJpbmRzIElTTCdzIHNjYXR0ZXJpbmcgYW5kIHBh cmFtZXRlciBuYW1lIHRvIHRoZSBpbmRleCBvZiB0aGUgdHJlZQorICAgaW5k dWN0aW9uIHZhcmlhYmxlIGFuZCBwYXJhbWF0ZXJlIGluIElWU19QQVJBTVNf VkVDLgorCisgICBQQVJBTVNfSU5ERVggYmluZHMgSVNMJ3MgcGFyYW1ldGVy IG5hbWUgdG8gdGhlIGluZGV4IG9mIHRoZSB0cmVlCisgICBwYXJhbWV0ZXIg aW4gUEFSQU1TLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgaXZzX3BhcmFtcyB7 CisgIHZlYzx0cmVlPiBpdnNfcGFyYW1zX3ZlYzsKKyAgYXN0X2lzbF9pbmRl eF9odGFiX3R5cGUgKml2c19wYXJhbXNfaW5kZXg7CisgIHNlc2UgcmVnaW9u OworfSAqaXZzX3BhcmFtc19wOworCitzdGF0aWMgdHJlZQorZ2NjX2V4cHJl c3Npb25fZnJvbV9pc2xfZXhwcmVzc2lvbiAodHJlZSB0eXBlLCBfX2lzbF9r ZWVwIGlzbF9hc3RfZXhwciAqLAorCQkJCSAgICBpdnNfcGFyYW1zX3AgaXAp OworCisvKiBSZXR1cm5zIHRoZSB0cmVlIHZhcmlhYmxlIGZyb20gdGhlIG5h bWUgb2YgaXNsX2lkLCB3aGljaCBpcyBzdG9yZWQKKyAgIGluIHRoZSBpc2xf YXN0X2V4cHIgRVhQUl9JRCB0aGF0IHdhcyBnaXZlbiBpbiBJU0wgcmVwcmVz ZW50YXRpb24uICAqLworCitzdGF0aWMgdHJlZQorZ2NjX2V4cHJlc3Npb25f ZnJvbV9pc2xfYXN0X2V4cHJfaWQgKF9faXNsX2tlZXAgaXNsX2FzdF9leHBy ICpleHByX2lkLAorCQkJCSAgICAgaXZzX3BhcmFtc19wIGlwKQoreworICBn Y2NfYXNzZXJ0IChpc2xfYXN0X2V4cHJfZ2V0X3R5cGUgKGV4cHJfaWQpID09 IGlzbF9hc3RfZXhwcl9pZCk7CisgIGludCBpbmRleDsKKyAgZ2NjX2Fzc2Vy dCAoaXAtPml2c19wYXJhbXNfdmVjLmV4aXN0cyAoKSAmJiBpcC0+aXZzX3Bh cmFtc19pbmRleCk7CisgIGluZGV4ID0gYXN0X2V4cHJfaWRfdG9faW5kZXgg KGV4cHJfaWQsIGlwLT5pdnNfcGFyYW1zX2luZGV4KTsKKyAgZ2NjX2Fzc2Vy dCAoaW5kZXggPj0gMCk7CisgIHJldHVybiAoaXAtPml2c19wYXJhbXNfdmVj KVtpbmRleF07Cit9CisKKy8qIENvbnZlcnRzIGEgaXNsX2FzdF9leHByX2lu dCBleHByZXNzaW9uIEUgdG8gYSBHQ0MgZXhwcmVzc2lvbiB0cmVlIG9mCisg ICB0eXBlIFRZUEUuICAqLworCitzdGF0aWMgdHJlZQorZ2NjX2V4cHJlc3Np b25fZnJvbV9pc2xfZXhwcl9pbnQgKHRyZWUgdHlwZSwgX19pc2xfa2VlcCBp c2xfYXN0X2V4cHIgKmV4cHIpCit7CisgIGdjY19hc3NlcnQgKGlzbF9hc3Rf ZXhwcl9nZXRfdHlwZSAoZXhwcikgPT0gaXNsX2FzdF9leHByX2ludCk7Cisg IGlzbF92YWwgKnZhbCA9IGlzbF9hc3RfZXhwcl9nZXRfdmFsIChleHByKTsK KyAgbXB6X3QgdmFsX21wel90OworICBtcHpfaW5pdCAodmFsX21wel90KTsK KyAgdHJlZSByZXM7CisgIGlmIChpc2xfdmFsX2dldF9udW1fZ21wICh2YWws IHZhbF9tcHpfdCkgPT0gLTEpCisgICAgcmVzID0gTlVMTF9UUkVFOworICBl bHNlCisgICAgcmVzID0gZ21wX2NzdF90b190cmVlICh0eXBlLCB2YWxfbXB6 X3QpOworICBpc2xfdmFsX2ZyZWUgKHZhbCk7CisgIG1wel9jbGVhciAodmFs X21wel90KTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogQ29udmVydHMgYSBi aW5hcnkgaXNsX2FzdF9leHByX29wIGV4cHJlc3Npb24gRSB0byBhIEdDQyBl eHByZXNzaW9uIHRyZWUgb2YKKyAgIHR5cGUgVFlQRS4gICovCisKK3N0YXRp YyB0cmVlCitiaW5hcnlfb3BfdG9fdHJlZSAodHJlZSB0eXBlLCBfX2lzbF9r ZWVwIGlzbF9hc3RfZXhwciAqZXhwciwgaXZzX3BhcmFtc19wIGlwKQorewor ICBpc2xfYXN0X2V4cHIgKmFyZ19leHByID0gaXNsX2FzdF9leHByX2dldF9v cF9hcmcgKGV4cHIsIDApOworICB0cmVlIHRyZWVfbGhzX2V4cHIgPSBnY2Nf ZXhwcmVzc2lvbl9mcm9tX2lzbF9leHByZXNzaW9uICh0eXBlLCBhcmdfZXhw ciwgaXApOworICBpc2xfYXN0X2V4cHJfZnJlZSAoYXJnX2V4cHIpOworICBh cmdfZXhwciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAxKTsK KyAgdHJlZSB0cmVlX3Joc19leHByID0gZ2NjX2V4cHJlc3Npb25fZnJvbV9p c2xfZXhwcmVzc2lvbiAodHlwZSwgYXJnX2V4cHIsIGlwKTsKKyAgaXNsX2Fz dF9leHByX2ZyZWUgKGFyZ19leHByKTsKKyAgc3dpdGNoIChpc2xfYXN0X2V4 cHJfZ2V0X29wX3R5cGUgKGV4cHIpKQorICAgIHsKKyAgICBjYXNlIGlzbF9h c3Rfb3BfYWRkOgorICAgICAgcmV0dXJuIGZvbGRfYnVpbGQyIChQTFVTX0VY UFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIsIHRyZWVfcmhzX2V4cHIpOworCisg ICAgY2FzZSBpc2xfYXN0X29wX3N1YjoKKyAgICAgIHJldHVybiBmb2xkX2J1 aWxkMiAoTUlOVVNfRVhQUiwgdHlwZSwgdHJlZV9saHNfZXhwciwgdHJlZV9y aHNfZXhwcik7CisKKyAgICBjYXNlIGlzbF9hc3Rfb3BfbXVsOgorICAgICAg cmV0dXJuIGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIHR5cGUsIHRyZWVfbGhz X2V4cHIsIHRyZWVfcmhzX2V4cHIpOworCisgICAgY2FzZSBpc2xfYXN0X29w X2RpdjoKKyAgICAgIHJldHVybiBmb2xkX2J1aWxkMiAoRVhBQ1RfRElWX0VY UFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIsIHRyZWVfcmhzX2V4cHIpOworCisg ICAgY2FzZSBpc2xfYXN0X29wX2ZkaXZfcToKKyAgICAgIHJldHVybiBmb2xk X2J1aWxkMiAoRkxPT1JfRElWX0VYUFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIs IHRyZWVfcmhzX2V4cHIpOworCisgICAgY2FzZSBpc2xfYXN0X29wX2FuZDoK KyAgICAgIHJldHVybiBmb2xkX2J1aWxkMiAoVFJVVEhfQU5ESUZfRVhQUiwg dHlwZSwKKwkJCSAgdHJlZV9saHNfZXhwciwgdHJlZV9yaHNfZXhwcik7CisK KyAgICBjYXNlIGlzbF9hc3Rfb3Bfb3I6CisgICAgICByZXR1cm4gZm9sZF9i dWlsZDIgKFRSVVRIX09SSUZfRVhQUiwgdHlwZSwgdHJlZV9saHNfZXhwciwg dHJlZV9yaHNfZXhwcik7CisKKyAgICBjYXNlIGlzbF9hc3Rfb3BfZXE6Cisg ICAgICByZXR1cm4gZm9sZF9idWlsZDIgKEVRX0VYUFIsIHR5cGUsIHRyZWVf bGhzX2V4cHIsIHRyZWVfcmhzX2V4cHIpOworCisgICAgY2FzZSBpc2xfYXN0 X29wX2xlOgorICAgICAgcmV0dXJuIGZvbGRfYnVpbGQyIChMRV9FWFBSLCB0 eXBlLCB0cmVlX2xoc19leHByLCB0cmVlX3Joc19leHByKTsKKworICAgIGNh c2UgaXNsX2FzdF9vcF9sdDoKKyAgICAgIHJldHVybiBmb2xkX2J1aWxkMiAo TFRfRVhQUiwgdHlwZSwgdHJlZV9saHNfZXhwciwgdHJlZV9yaHNfZXhwcik7 CisKKyAgICBjYXNlIGlzbF9hc3Rfb3BfZ2U6CisgICAgICByZXR1cm4gZm9s ZF9idWlsZDIgKEdFX0VYUFIsIHR5cGUsIHRyZWVfbGhzX2V4cHIsIHRyZWVf cmhzX2V4cHIpOworCisgICAgY2FzZSBpc2xfYXN0X29wX2d0OgorICAgICAg cmV0dXJuIGZvbGRfYnVpbGQyIChHVF9FWFBSLCB0eXBlLCB0cmVlX2xoc19l eHByLCB0cmVlX3Joc19leHByKTsKKworICAgIGRlZmF1bHQ6CisgICAgICBn Y2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorfQorCisvKiBDb252ZXJ0cyBh IHRlcm5hcnkgaXNsX2FzdF9leHByX29wIGV4cHJlc3Npb24gRSB0byBhIEdD QyBleHByZXNzaW9uIHRyZWUgb2YKKyAgIHR5cGUgVFlQRS4gICovCisKK3N0 YXRpYyB0cmVlCit0ZXJuYXJ5X29wX3RvX3RyZWUgKHRyZWUgdHlwZSwgX19p c2xfa2VlcCBpc2xfYXN0X2V4cHIgKmV4cHIsIGl2c19wYXJhbXNfcCBpcCkK K3sKKyAgZ2NjX2Fzc2VydCAoaXNsX2FzdF9leHByX2dldF9vcF90eXBlIChl eHByKSA9PSBpc2xfYXN0X29wX21pbnVzKTsKKyAgaXNsX2FzdF9leHByICph cmdfZXhwciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAwKTsK KyAgdHJlZSB0cmVlX2ZpcnN0X2V4cHIKKyAgICA9IGdjY19leHByZXNzaW9u X2Zyb21faXNsX2V4cHJlc3Npb24gKHR5cGUsIGFyZ19leHByLCBpcCk7Cisg IGlzbF9hc3RfZXhwcl9mcmVlIChhcmdfZXhwcik7CisgIGFyZ19leHByID0g aXNsX2FzdF9leHByX2dldF9vcF9hcmcgKGV4cHIsIDEpOworICB0cmVlIHRy ZWVfc2Vjb25kX2V4cHIKKyAgICA9IGdjY19leHByZXNzaW9uX2Zyb21faXNs X2V4cHJlc3Npb24gKHR5cGUsIGFyZ19leHByLCBpcCk7CisgIGlzbF9hc3Rf ZXhwcl9mcmVlIChhcmdfZXhwcik7CisgIGFyZ19leHByID0gaXNsX2FzdF9l eHByX2dldF9vcF9hcmcgKGV4cHIsIDIpOworICB0cmVlIHRyZWVfdGhpcmRf ZXhwcgorICAgID0gZ2NjX2V4cHJlc3Npb25fZnJvbV9pc2xfZXhwcmVzc2lv biAodHlwZSwgYXJnX2V4cHIsIGlwKTsKKyAgaXNsX2FzdF9leHByX2ZyZWUg KGFyZ19leHByKTsKKyAgcmV0dXJuIGZvbGRfYnVpbGQzIChDT05EX0VYUFIs IHR5cGUsIHRyZWVfZmlyc3RfZXhwciwKKwkJICAgICAgdHJlZV9zZWNvbmRf ZXhwciwgdHJlZV90aGlyZF9leHByKTsKK30KKworLyogQ29udmVydHMgYSB1 bmFyeSBpc2xfYXN0X2V4cHJfb3AgZXhwcmVzc2lvbiBFIHRvIGEgR0NDIGV4 cHJlc3Npb24gdHJlZSBvZgorICAgdHlwZSBUWVBFLiAgKi8KKworc3RhdGlj IHRyZWUKK3VuYXJ5X29wX3RvX3RyZWUgKHRyZWUgdHlwZSwgX19pc2xfa2Vl cCBpc2xfYXN0X2V4cHIgKmV4cHIsIGl2c19wYXJhbXNfcCBpcCkKK3sKKyAg Z2NjX2Fzc2VydCAoaXNsX2FzdF9leHByX2dldF9vcF90eXBlIChleHByKSA9 PSBpc2xfYXN0X29wX21pbnVzKTsKKyAgaXNsX2FzdF9leHByICphcmdfZXhw ciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCAwKTsKKyAgdHJl ZSB0cmVlX2V4cHIgPSBnY2NfZXhwcmVzc2lvbl9mcm9tX2lzbF9leHByZXNz aW9uICh0eXBlLCBhcmdfZXhwciwgaXApOworICBpc2xfYXN0X2V4cHJfZnJl ZSAoYXJnX2V4cHIpOworICByZXR1cm4gZm9sZF9idWlsZDEgKE5FR0FURV9F WFBSLCB0eXBlLCB0cmVlX2V4cHIpOworfQorCisvKiBDb252ZXJ0cyBhIGlz bF9hc3RfZXhwcl9vcCBleHByZXNzaW9uIEUgd2l0aCB1bmtub3duIG51bWJl ciBvZiBhcmd1bWVudHMKKyAgIHRvIGEgR0NDIGV4cHJlc3Npb24gdHJlZSBv ZiB0eXBlIFRZUEUuICAqLworCitzdGF0aWMgdHJlZQorbmFyeV9vcF90b190 cmVlICh0cmVlIHR5cGUsIF9faXNsX2tlZXAgaXNsX2FzdF9leHByICpleHBy LCBpdnNfcGFyYW1zX3AgaXApCit7CisgIGVudW0gdHJlZV9jb2RlIG9wX2Nv ZGU7CisgIHN3aXRjaCAoaXNsX2FzdF9leHByX2dldF9vcF90eXBlIChleHBy KSkKKyAgICB7CisgICAgY2FzZSBpc2xfYXN0X29wX21heDoKKyAgICAgIG9w X2NvZGUgPSBNQVhfRVhQUjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBp c2xfYXN0X29wX21pbjoKKyAgICAgIG9wX2NvZGUgPSBNSU5fRVhQUjsKKyAg ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNo YWJsZSAoKTsgICAgCisgICAgfQorICBpc2xfYXN0X2V4cHIgKmFyZ19leHBy ID0gaXNsX2FzdF9leHByX2dldF9vcF9hcmcgKGV4cHIsIDApOworICB0cmVl IHJlcyA9IGdjY19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJlc3Npb24gKHR5 cGUsIGFyZ19leHByLCBpcCk7CisgIGlzbF9hc3RfZXhwcl9mcmVlIChhcmdf ZXhwcik7CisgIGludCBpOworICBmb3IgKGkgPSAxOyBpIDwgaXNsX2FzdF9l eHByX2dldF9vcF9uX2FyZyAoZXhwcik7IGkrKykKKyAgICB7CisgICAgICBh cmdfZXhwciA9IGlzbF9hc3RfZXhwcl9nZXRfb3BfYXJnIChleHByLCBpKTsK KyAgICAgIHRyZWUgdCA9IGdjY19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJl c3Npb24gKHR5cGUsIGFyZ19leHByLCBpcCk7CisgICAgICByZXMgPSBmb2xk X2J1aWxkMiAob3BfY29kZSwgdHlwZSwgcmVzLCB0KTsKKyAgICAgIGlzbF9h c3RfZXhwcl9mcmVlIChhcmdfZXhwcik7CisgICAgfQorICByZXR1cm4gcmVz OworfQorCisKKy8qIENvbnZlcnRzIGFuIGlzbF9hc3RfZXhwcl9vcCBleHBy ZXNzaW9uIEUgdG8gYSBHQ0MgZXhwcmVzc2lvbiB0cmVlIG9mCisgICB0eXBl IFRZUEUuICAqLworCitzdGF0aWMgdHJlZQorZ2NjX2V4cHJlc3Npb25fZnJv bV9pc2xfZXhwcl9vcCAodHJlZSB0eXBlLCBfX2lzbF9rZWVwIGlzbF9hc3Rf ZXhwciAqZXhwciwKKwkJCQkgaXZzX3BhcmFtc19wIGlwKQoreworICBnY2Nf YXNzZXJ0IChpc2xfYXN0X2V4cHJfZ2V0X3R5cGUgKGV4cHIpID09IGlzbF9h c3RfZXhwcl9vcCk7CisgIHN3aXRjaCAoaXNsX2FzdF9leHByX2dldF9vcF90 eXBlIChleHByKSkKKyAgICB7CisgICAgLyogVGhlc2UgaXNsIGFzdCBleHBy ZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuICAqLworICAgIGNhc2Ug aXNsX2FzdF9vcF9lcnJvcjoKKyAgICBjYXNlIGlzbF9hc3Rfb3BfY2FsbDoK KyAgICBjYXNlIGlzbF9hc3Rfb3BfYW5kX3RoZW46CisgICAgY2FzZSBpc2xf YXN0X29wX29yX2Vsc2U6CisgICAgY2FzZSBpc2xfYXN0X29wX3BkaXZfcToK KyAgICBjYXNlIGlzbF9hc3Rfb3BfcGRpdl9yOgorICAgIGNhc2UgaXNsX2Fz dF9vcF9zZWxlY3Q6CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisKKyAg ICBjYXNlIGlzbF9hc3Rfb3BfbWF4OgorICAgIGNhc2UgaXNsX2FzdF9vcF9t aW46CisgICAgICByZXR1cm4gbmFyeV9vcF90b190cmVlICh0eXBlLCBleHBy LCBpcCk7CisKKyAgICBjYXNlIGlzbF9hc3Rfb3BfYWRkOgorICAgIGNhc2Ug aXNsX2FzdF9vcF9zdWI6CisgICAgY2FzZSBpc2xfYXN0X29wX211bDoKKyAg ICBjYXNlIGlzbF9hc3Rfb3BfZGl2OgorICAgIGNhc2UgaXNsX2FzdF9vcF9m ZGl2X3E6CisgICAgY2FzZSBpc2xfYXN0X29wX2FuZDoKKyAgICBjYXNlIGlz bF9hc3Rfb3Bfb3I6CisgICAgY2FzZSBpc2xfYXN0X29wX2VxOgorICAgIGNh c2UgaXNsX2FzdF9vcF9sZToKKyAgICBjYXNlIGlzbF9hc3Rfb3BfbHQ6Cisg ICAgY2FzZSBpc2xfYXN0X29wX2dlOgorICAgIGNhc2UgaXNsX2FzdF9vcF9n dDoKKyAgICAgIHJldHVybiBiaW5hcnlfb3BfdG9fdHJlZSAodHlwZSwgZXhw ciwgaXApOworCisgICAgY2FzZSBpc2xfYXN0X29wX21pbnVzOgorICAgICAg cmV0dXJuIHVuYXJ5X29wX3RvX3RyZWUgKHR5cGUsIGV4cHIsIGlwKTsKKwor ICAgIGNhc2UgaXNsX2FzdF9vcF9jb25kOgorICAgICAgcmV0dXJuIHRlcm5h cnlfb3BfdG9fdHJlZSAodHlwZSwgZXhwciwgaXApOworCisgICAgZGVmYXVs dDoKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9CisKKyAgcmV0 dXJuIE5VTExfVFJFRTsKK30KKworLyogQ29udmVydHMgYSBJU0wgQVNUIGV4 cHJlc3Npb24gRSBiYWNrIHRvIGEgR0NDIGV4cHJlc3Npb24gdHJlZSBvZgor ICAgdHlwZSBUWVBFLiAgKi8KKworc3RhdGljIHRyZWUKK2djY19leHByZXNz aW9uX2Zyb21faXNsX2V4cHJlc3Npb24gKHRyZWUgdHlwZSwgX19pc2xfa2Vl cCBpc2xfYXN0X2V4cHIgKmV4cHIsCisJCQkJICAgIGl2c19wYXJhbXNfcCBp cCkKK3sKKyAgc3dpdGNoIChpc2xfYXN0X2V4cHJfZ2V0X3R5cGUgKGV4cHIp KQorICAgIHsKKyAgICBjYXNlIGlzbF9hc3RfZXhwcl9pZDoKKyAgICAgIHJl dHVybiBnY2NfZXhwcmVzc2lvbl9mcm9tX2lzbF9hc3RfZXhwcl9pZCAoZXhw ciwgaXApOworCisgICAgY2FzZSBpc2xfYXN0X2V4cHJfaW50OgorICAgICAg cmV0dXJuIGdjY19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJfaW50ICh0eXBl LCBleHByKTsKKworICAgIGNhc2UgaXNsX2FzdF9leHByX29wOgorICAgICAg cmV0dXJuIGdjY19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJfb3AgKHR5cGUs IGV4cHIsIGlwKTsKKworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5yZWFj aGFibGUgKCk7CisgICAgfQorCisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisK Ky8qIENyZWF0ZXMgYSBuZXcgTE9PUCBjb3JyZXNwb25kaW5nIHRvIGlzbF9h c3Rfbm9kZV9mb3IuICBJbnNlcnRzIGFuCisgICBpbmR1Y3Rpb24gdmFyaWFi bGUgZm9yIHRoZSBuZXcgTE9PUC4gIE5ldyBMT09QIGlzIGF0dGFjaGVkIHRv IENGRworICAgc3RhcnRpbmcgYXQgRU5UUllfRURHRS4gIExPT1AgaXMgaW5z ZXJ0ZWQgaW50byB0aGUgbG9vcCB0cmVlIGFuZAorICAgYmVjb21lcyB0aGUg Y2hpbGQgbG9vcCBvZiB0aGUgT1VURVJfTE9PUC4gIE5FV0lWU19JTkRFWCBi aW5kcworICAgSVNMJ3Mgc2NhdHRlcmluZyBuYW1lIHRvIHRoZSBpbmR1Y3Rp b24gdmFyaWFibGUgY3JlYXRlZCBmb3IgdGhlCisgICBsb29wIG9mIFNUTVQu ICBUaGUgbmV3IGluZHVjdGlvbiB2YXJpYWJsZSBpcyBpbnNlcnRlZCBpbiB0 aGUgTkVXSVZTCisgICB2ZWN0b3IgYW5kIGlzIG9mIHR5cGUgVFlQRS4gICov CisKK3N0YXRpYyBzdHJ1Y3QgbG9vcCAqCitncmFwaGl0ZV9jcmVhdGVfbmV3 X2xvb3AgKGVkZ2UgZW50cnlfZWRnZSwgX19pc2xfa2VlcCBpc2xfYXN0X25v ZGUgKm5vZGVfZm9yLAorCQkJICBsb29wX3Agb3V0ZXIsIHRyZWUgdHlwZSwg dHJlZSBsYiwgdHJlZSB1YiwKKwkJCSAgaXZzX3BhcmFtc19wIGlwKQorewor ICBpc2xfYXN0X2V4cHIgKmZvcl9pbmMgPSBpc2xfYXN0X25vZGVfZm9yX2dl dF9pbmMgKG5vZGVfZm9yKTsKKyAgdHJlZSBzdHJpZGUgPSBnY2NfZXhwcmVz c2lvbl9mcm9tX2lzbF9leHByZXNzaW9uICh0eXBlLCBmb3JfaW5jLCBpcCk7 CisgIGlzbF9hc3RfZXhwcl9mcmVlIChmb3JfaW5jKTsKKyAgdHJlZSBpdnZh ciA9IGNyZWF0ZV90bXBfdmFyICh0eXBlLCAiZ3JhcGhpdGVfSVYiKTsKKyAg dHJlZSBpdiwgaXZfYWZ0ZXJfaW5jcmVtZW50OworICBsb29wX3AgbG9vcCA9 IGNyZWF0ZV9lbXB0eV9sb29wX29uX2VkZ2UKKyAgICAoZW50cnlfZWRnZSwg bGIsIHN0cmlkZSwgdWIsIGl2dmFyLCAmaXYsICZpdl9hZnRlcl9pbmNyZW1l bnQsCisgICAgIG91dGVyID8gb3V0ZXIgOiBlbnRyeV9lZGdlLT5zcmMtPmxv b3BfZmF0aGVyKTsKKworICBpc2xfYXN0X2V4cHIgKmZvcl9pdGVyYXRvciA9 IGlzbF9hc3Rfbm9kZV9mb3JfZ2V0X2l0ZXJhdG9yIChub2RlX2Zvcik7Cisg IGlzbF9pZCAqaWQgPSBpc2xfYXN0X2V4cHJfZ2V0X2lkIChmb3JfaXRlcmF0 b3IpOworICBzYXZlX2lzbF9pZF9uYW1lX2luZGV4IChpcC0+aXZzX3BhcmFt c19pbmRleCwgaXNsX2lkX2dldF9uYW1lIChpZCksCisJCQkgIChpcC0+aXZz X3BhcmFtc192ZWMpLmxlbmd0aCAoKSk7CisgIGlzbF9pZF9mcmVlIChpZCk7 CisgIGlzbF9hc3RfZXhwcl9mcmVlIChmb3JfaXRlcmF0b3IpOworICAoaXAt Pml2c19wYXJhbXNfdmVjKS5zYWZlX3B1c2ggKGl2KTsKKyAgcmV0dXJuIGxv b3A7Cit9CisKK3N0YXRpYyBlZGdlCit0cmFuc2xhdGVfaXNsX2FzdCAobG9v cF9wIGNvbnRleHRfbG9vcCwgX19pc2xfa2VlcCBpc2xfYXN0X25vZGUgKm5v ZGUsCisJCSAgIGVkZ2UgbmV4dF9lLCBpdnNfcGFyYW1zX3AgaXApOworCisv KiBDcmVhdGUgdGhlIGxvb3AgZm9yIGEgaXNsX2FzdF9ub2RlX2Zvci4KKwor ICAgLSBORVhUX0UgaXMgdGhlIGVkZ2Ugd2hlcmUgbmV3IGdlbmVyYXRlZCBj b2RlIHNob3VsZCBiZSBhdHRhY2hlZC4gICovCisKK3N0YXRpYyBlZGdlCit0 cmFuc2xhdGVfaXNsX2FzdF9mb3JfbG9vcCAobG9vcF9wIGNvbnRleHRfbG9v cCwKKwkJCSAgICBfX2lzbF9rZWVwIGlzbF9hc3Rfbm9kZSAqbm9kZV9mb3Is IGVkZ2UgbmV4dF9lLAorCQkJICAgIHRyZWUgdHlwZSwgdHJlZSBsYiwgdHJl ZSB1YiwKKwkJCSAgICBpdnNfcGFyYW1zX3AgaXApCit7CisgIGdjY19hc3Nl cnQgKGlzbF9hc3Rfbm9kZV9nZXRfdHlwZSAobm9kZV9mb3IpID09IGlzbF9h c3Rfbm9kZV9mb3IpOworICBzdHJ1Y3QgbG9vcCAqbG9vcCA9IGdyYXBoaXRl X2NyZWF0ZV9uZXdfbG9vcCAobmV4dF9lLCBub2RlX2ZvciwgY29udGV4dF9s b29wLAorCQkJCQkJdHlwZSwgbGIsIHViLCBpcCk7CisgIGVkZ2UgbGFzdF9l ID0gc2luZ2xlX2V4aXQgKGxvb3ApOworICBlZGdlIHRvX2JvZHkgPSBzaW5n bGVfc3VjY19lZGdlIChsb29wLT5oZWFkZXIpOworICBiYXNpY19ibG9jayBh ZnRlciA9IHRvX2JvZHktPmRlc3Q7CisKKyAgLyogQ3JlYXRlIGEgYmFzaWMg YmxvY2sgZm9yIGxvb3AgY2xvc2UgcGhpIG5vZGVzLiAgKi8KKyAgbGFzdF9l ID0gc2luZ2xlX3N1Y2NfZWRnZSAoc3BsaXRfZWRnZSAobGFzdF9lKSk7CisK KyAgLyogVHJhbnNsYXRlIHRoZSBib2R5IG9mIHRoZSBsb29wLiAgKi8KKyAg aXNsX2FzdF9ub2RlICpmb3JfYm9keSA9IGlzbF9hc3Rfbm9kZV9mb3JfZ2V0 X2JvZHkgKG5vZGVfZm9yKTsKKyAgbmV4dF9lID0gdHJhbnNsYXRlX2lzbF9h c3QgKGxvb3AsIGZvcl9ib2R5LCB0b19ib2R5LCBpcCk7CisgIGlzbF9hc3Rf bm9kZV9mcmVlIChmb3JfYm9keSk7CisgIHJlZGlyZWN0X2VkZ2Vfc3VjY19u b2R1cCAobmV4dF9lLCBhZnRlcik7CisgIHNldF9pbW1lZGlhdGVfZG9taW5h dG9yIChDRElfRE9NSU5BVE9SUywgbmV4dF9lLT5kZXN0LCBuZXh0X2UtPnNy Yyk7CisKKyAgLyogVE9ETzogQWRkIGNoZWNraW5nIGZvciB0aGUgbG9vcCBw YXJhbGxlbGlzbS4gICovCisKKyAgcmV0dXJuIGxhc3RfZTsKK30KKworLyog V2UgdXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSB1cHBlciBib3VuZCBi ZWNhdXNlIG9mIHRoZSBmb3JtLAorICAgd2hpY2ggaXMgdXNlZCBieSBpc2wg dG8gcmVwcmVzZW50IGxvb3BzOgorCisgICBmb3IgKGl0ZXJhdG9yID0gaW5p dDsgY29uZDsgaXRlcmF0b3IgKz0gaW5jKQorCisgICB7CisKKyAgICAgLi4u CisKKyAgIH0KKworICAgVGhlIGxvb3AgY29uZGl0aW9uIGlzIGFuIGFyYml0 cmFyeSBleHByZXNzaW9uLCB3aGljaCBjb250YWlucyB0aGUKKyAgIGN1cnJl bnQgbG9vcCBpdGVyYXRvci4KKworICAgV2UgaGF2ZSB0byBrbm93IHRoZSB1 cHBlciBib3VuZCBvZiB0aGUgaXRlcmF0b3IgdG8gZ2VuZXJhdGUgYSBsb29w CisgICBpbiBHaW1wbGUgZm9ybS4gSXQgY2FuIGJlIG9idGFpbmVkIGZyb20g dGhlIHNwZWNpYWwgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBsb29wIGNv bmRpdGlvbiwgd2hpY2ggaXMgZ2VuZXJhdGVkIGJ5IGlzbCwKKyAgIGlmIHRo ZSBhc3RfYnVpbGRfYXRvbWljX3VwcGVyX2JvdW5kIG9wdGlvbiBpcyBzZXQu IEluIHRoaXMgY2FzZSwKKyAgIGlzbCBnZW5lcmF0ZXMgYSBsb29wIGNvbmRp dGlvbiB0aGF0IGNvbnNpc3RzIG9mIHRoZSBjdXJyZW50IGxvb3AKKyAgIGl0 ZXJhdG9yLCArIGFuIG9wZXJhdG9yICg8IG9yIDw9KSBhbmQgYW4gZXhwcmVz c2lvbiBub3QgaW52b2x2aW5nCisgICB0aGUgaXRlcmF0b3IsIHdoaWNoIGlz IHByb2Nlc3NlZCBhbmQgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4gICov CisKK3N0YXRpYyBfX2lzbF9naXZlIGlzbF9hc3RfZXhwciAqCitnZXRfdXBw ZXJfYm91bmQgKF9faXNsX2tlZXAgaXNsX2FzdF9ub2RlICpub2RlX2ZvcikK K3sKKyAgZ2NjX2Fzc2VydCAoaXNsX2FzdF9ub2RlX2dldF90eXBlIChub2Rl X2ZvcikgPT0gaXNsX2FzdF9ub2RlX2Zvcik7CisgIGlzbF9hc3RfZXhwciAq Zm9yX2NvbmQgPSBpc2xfYXN0X25vZGVfZm9yX2dldF9jb25kIChub2RlX2Zv cik7CisgIGdjY19hc3NlcnQgKGlzbF9hc3RfZXhwcl9nZXRfdHlwZSAoZm9y X2NvbmQpID09IGlzbF9hc3RfZXhwcl9vcCk7CisgIGlzbF9hc3RfZXhwciAq cmVzOworICBzd2l0Y2ggKGlzbF9hc3RfZXhwcl9nZXRfb3BfdHlwZSAoZm9y X2NvbmQpKQorICAgIHsKKyAgICBjYXNlIGlzbF9hc3Rfb3BfbGU6CisgICAg ICByZXMgPSBpc2xfYXN0X2V4cHJfZ2V0X29wX2FyZyAoZm9yX2NvbmQsIDEp OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGlzbF9hc3Rfb3BfbHQ6Cisg ICAgICB7CisgICAgICAgIC8vIChpdGVyYW90ciA8IHViKSA9PiAoaXRlcmF0 b3IgPD0gdWIgLSAxKQorICAgICAgICBpc2xfdmFsICpvbmUgPSBpc2xfdmFs X2ludF9mcm9tX3NpIChpc2xfYXN0X2V4cHJfZ2V0X2N0eCAoZm9yX2NvbmQp LCAxKTsKKyAgICAgICAgaXNsX2FzdF9leHByICp1YiA9IGlzbF9hc3RfZXhw cl9nZXRfb3BfYXJnIChmb3JfY29uZCwgMSk7CisgICAgICAgIHJlcyA9IGlz bF9hc3RfZXhwcl9zdWIgKHViLCBpc2xfYXN0X2V4cHJfZnJvbV92YWwgKG9u ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIGRlZmF1bHQ6 CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorICBpc2xfYXN0 X2V4cHJfZnJlZSAoZm9yX2NvbmQpOworICByZXR1cm4gcmVzOworfQorCisv KiBBbGwgbG9vcHMgZ2VuZXJhdGVkIGJ5IGNyZWF0ZV9lbXB0eV9sb29wX29u X2VkZ2UgaGF2ZSB0aGUgZm9ybSBvZgorICAgYSBwb3N0LXRlc3QgbG9vcDoK KworICAgZG8KKworICAgeworICAgICBib2R5IG9mIHRoZSBsb29wOworICAg fSB3aGlsZSAobG93ZXIgYm91bmQgPCB1cHBlciBib3VuZCk7CisKKyAgIFdl IGNyZWF0ZSBhIG5ldyBpZiByZWdpb24gcHJvdGVjdGluZyB0aGUgbG9vcCB0 byBiZSBleGVjdXRlZCwgaWYKKyAgIHRoZSBleGVjdXRpb24gY291bnQgaXMg emVybyAobG93ZXIgYm91bmQgPiB1cHBlciBib3VuZCkuIEluIHRoaXMgY2Fz ZSwKKyAgIGl0IGlzIHN1YnNlcXVlbnRseSByZW1vdmVkIGJ5IGRlYWQgY29k ZSBlbGltaW5hdGlvbi4gICovCisKK3N0YXRpYyBlZGdlCitncmFwaGl0ZV9j cmVhdGVfbmV3X2xvb3BfZ3VhcmQgKGVkZ2UgZW50cnlfZWRnZSwKKwkJCQlf X2lzbF9rZWVwIGlzbF9hc3Rfbm9kZSAqbm9kZV9mb3IsIHRyZWUgKnR5cGUs CisJCQkJdHJlZSAqbGIsIHRyZWUgKnViLCBpdnNfcGFyYW1zX3AgaXApCit7 CisgIGdjY19hc3NlcnQgKGlzbF9hc3Rfbm9kZV9nZXRfdHlwZSAobm9kZV9m b3IpID09IGlzbF9hc3Rfbm9kZV9mb3IpOworICB0cmVlIGNvbmRfZXhwcjsK KyAgZWRnZSBleGl0X2VkZ2U7CisKKyAgKnR5cGUgPSAqZ3JhcGhpdGVfZXhw cmVzc2lvbl9zaXplX3R5cGU7CisgIGlzbF9hc3RfZXhwciAqZm9yX2luaXQg PSBpc2xfYXN0X25vZGVfZm9yX2dldF9pbml0IChub2RlX2Zvcik7CisgICps YiA9IGdjY19leHByZXNzaW9uX2Zyb21faXNsX2V4cHJlc3Npb24gKCp0eXBl LCBmb3JfaW5pdCwgaXApOworICBpc2xfYXN0X2V4cHJfZnJlZSAoZm9yX2lu aXQpOworICBpc2xfYXN0X2V4cHIgKnVwcGVyX2JvdW5kID0gZ2V0X3VwcGVy X2JvdW5kIChub2RlX2Zvcik7CisgICp1YiA9IGdjY19leHByZXNzaW9uX2Zy b21faXNsX2V4cHJlc3Npb24gKCp0eXBlLCB1cHBlcl9ib3VuZCwgaXApOwor ICBpc2xfYXN0X2V4cHJfZnJlZSAodXBwZXJfYm91bmQpOworICAKKyAgLyog V2hlbiB1YiBpcyBzaW1wbHkgYSBjb25zdGFudCBvciBhIHBhcmFtZXRlciwg dXNlIGxiIDw9IHViLiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAoKnViKSA9PSBJ TlRFR0VSX0NTVCB8fCBUUkVFX0NPREUgKCp1YikgPT0gU1NBX05BTUUpCisg ICAgY29uZF9leHByID0gZm9sZF9idWlsZDIgKExFX0VYUFIsIGJvb2xlYW5f dHlwZV9ub2RlLCAqbGIsICp1Yik7CisgIGVsc2UKKyAgICB7CisgICAgICB0 cmVlIG9uZSA9IChQT0lOVEVSX1RZUEVfUCAoKnR5cGUpCisJCSAgPyBjb252 ZXJ0X3RvX3B0cm9mZnR5cGUgKGludGVnZXJfb25lX25vZGUpCisJCSAgOiBm b2xkX2NvbnZlcnQgKCp0eXBlLCBpbnRlZ2VyX29uZV9ub2RlKSk7CisgICAg ICAvKiBBZGRpbmcgKzEgYW5kIHVzaW5nIExUX0VYUFIgaGVscHMgd2l0aCBs b29wIGxhdGNoZXMgdGhhdCBoYXZlIGEKKwkgbG9vcCBpdGVyYXRpb24gY291 bnQgb2YgIlBBUkFNRVRFUiAtIDEiLiAgRm9yIFBBUkFNRVRFUiA9PSAwIHRo aXMKKwkgYmVjb21lcyAyXmstMSBkdWUgdG8gaW50ZWdlciBvdmVyZmxvdywg YW5kIHRoZSBjb25kaXRpb24gbGIgPD0gdWIKKwkgaXMgdHJ1ZSwgZXZlbiBp ZiB3ZSBkbyBub3Qgd2FudCB0aGlzLiAgSG93ZXZlciBsYiA8IHViICsgMSBp cyBmYWxzZSwKKwkgYXMgZXhwZWN0ZWQuICAqLworICAgICAgdHJlZSB1Yl9v bmUgPSBmb2xkX2J1aWxkMiAoUE9JTlRFUl9UWVBFX1AgKCp0eXBlKSA/IFBP SU5URVJfUExVU19FWFBSCisJCQkJIDogUExVU19FWFBSLCAqdHlwZSwgKnVi LCBvbmUpOworCisgICAgICBjb25kX2V4cHIgPSBmb2xkX2J1aWxkMiAoTFRf RVhQUiwgYm9vbGVhbl90eXBlX25vZGUsICpsYiwgdWJfb25lKTsKKyAgICB9 CisKKyAgZXhpdF9lZGdlID0gY3JlYXRlX2VtcHR5X2lmX3JlZ2lvbl9vbl9l ZGdlIChlbnRyeV9lZGdlLCBjb25kX2V4cHIpOworCisgIHJldHVybiBleGl0 X2VkZ2U7Cit9CisKKy8qIFRyYW5zbGF0ZXMgYW4gaXNsX2FzdF9ub2RlX2Zv ciB0byBHaW1wbGUuICovCisKK3N0YXRpYyBlZGdlCit0cmFuc2xhdGVfaXNs X2FzdF9ub2RlX2ZvciAobG9vcF9wIGNvbnRleHRfbG9vcCwgX19pc2xfa2Vl cCBpc2xfYXN0X25vZGUgKm5vZGUsCisJCQkgICAgZWRnZSBuZXh0X2UsIGl2 c19wYXJhbXNfcCBpcCkKK3sKKyAgZ2NjX2Fzc2VydCAoaXNsX2FzdF9ub2Rl X2dldF90eXBlIChub2RlKSA9PSBpc2xfYXN0X25vZGVfZm9yKTsKKyAgdHJl ZSB0eXBlLCBsYiwgdWI7CisgIGVkZ2UgbGFzdF9lID0gZ3JhcGhpdGVfY3Jl YXRlX25ld19sb29wX2d1YXJkIChuZXh0X2UsIG5vZGUsICZ0eXBlLAorCQkJ CQkJJmxiLCAmdWIsIGlwKTsKKyAgZWRnZSB0cnVlX2UgPSBnZXRfdHJ1ZV9l ZGdlX2Zyb21fZ3VhcmRfYmIgKG5leHRfZS0+ZGVzdCk7CisKKyAgdHJhbnNs YXRlX2lzbF9hc3RfZm9yX2xvb3AgKGNvbnRleHRfbG9vcCwgbm9kZSwgdHJ1 ZV9lLAorCQkJICAgICAgdHlwZSwgbGIsIHViLCBpcCk7CisgIHJldHVybiBs YXN0X2U7Cit9CisKKy8qIFRyYW5zbGF0ZXMgYW4gSVNMIEFTVCBub2RlIE5P REUgdG8gR0NDIHJlcHJlc2VudGF0aW9uIGluIHRoZQorICAgY29udGV4dCBv ZiBhIFNFU0UuICAqLworCitzdGF0aWMgZWRnZQordHJhbnNsYXRlX2lzbF9h c3QgKGxvb3BfcCBjb250ZXh0X2xvb3AsIF9faXNsX2tlZXAgaXNsX2FzdF9u b2RlICpub2RlLAorCQkgICBlZGdlIG5leHRfZSwgaXZzX3BhcmFtc19wIGlw KQoreworICBzd2l0Y2ggKGlzbF9hc3Rfbm9kZV9nZXRfdHlwZSAobm9kZSkp CisgICAgeworICAgIGNhc2UgaXNsX2FzdF9ub2RlX2Vycm9yOgorICAgICAg Z2NjX3VucmVhY2hhYmxlICgpOworCisgICAgY2FzZSBpc2xfYXN0X25vZGVf Zm9yOgorICAgICAgcmV0dXJuIHRyYW5zbGF0ZV9pc2xfYXN0X25vZGVfZm9y IChjb250ZXh0X2xvb3AsIG5vZGUsCisJCQkJCSBuZXh0X2UsIGlwKTsKKwor ICAgIGNhc2UgaXNsX2FzdF9ub2RlX2lmOgorICAgICAgcmV0dXJuIG5leHRf ZTsKKworICAgIGNhc2UgaXNsX2FzdF9ub2RlX3VzZXI6CisgICAgICByZXR1 cm4gbmV4dF9lOworCisgICAgY2FzZSBpc2xfYXN0X25vZGVfYmxvY2s6Cisg ICAgICByZXR1cm4gbmV4dF9lOworCisgICAgZGVmYXVsdDoKKyAgICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKKyAgICB9Cit9CisKIC8qIFByaW50cyBOT0RF IHRvIEZJTEUuICAqLwogCiB2b2lkCkBAIC02NSw5ICs2OTgsMzMgQEAKICAg aXNsX3ByaW50ZXJfZnJlZSAocHJuKTsKIH0KIAorLyogQWRkIHRyZWUgcmVw cmVzZW50YXRpb25zIGFuZCBuYW1lcyBvZiBwYXJhbWV0ZXJzIHRvIGl2c19w YXJhbXMgICovCisKK3N0YXRpYyB2b2lkCithZGRfcGFyYW1ldGVyc190b19p dnNfcGFyYW1zIChzY29wX3Agc2NvcCwgaXZzX3BhcmFtc19wIGlwKQorewor ICBzZXNlIHJlZ2lvbiA9IFNDT1BfUkVHSU9OIChzY29wKTsKKyAgaW50IGk7 CisgIGludCBuYl9wYXJhbWV0ZXJzID0gU0VTRV9QQVJBTVMgKHJlZ2lvbiku bGVuZ3RoICgpOworICBnY2NfYXNzZXJ0IChuYl9wYXJhbWV0ZXJzID09IChz aG9ydCkgaXNsX3NldF9kaW0gKHNjb3AtPmNvbnRleHQsCisJCQkJCQkgICAg aXNsX2RpbV9wYXJhbSkpOworCisgIGZvciAoaSA9IDA7IGkgPCBuYl9wYXJh bWV0ZXJzOyBpKyspCisgICAgeworICAgICAgdHJlZSBwYXJhbSA9IFNFU0Vf UEFSQU1TIChyZWdpb24pW2ldOworICAgICAgY29uc3QgY2hhciAqbmFtZSA9 IGdldF9uYW1lIChwYXJhbSk7CisKKyAgICAgIGlmICghbmFtZSkKKwluYW1l ID0gIlQiOworICAgICAgc2F2ZV9pc2xfaWRfbmFtZV9pbmRleCAoaXAtPml2 c19wYXJhbXNfaW5kZXgsIG5hbWUsIGkpOworICAgICAgKGlwLT5pdnNfcGFy YW1zX3ZlYykuc2FmZV9wdXNoIChwYXJhbSk7CisgICAgfQorfQorCisKIC8q IEdlbmVyYXRlcyBhIGJ1aWxkLCB3aGljaCBzcGVjaWZpZXMgdGhlIGNvbnN0 cmFpbnRzIG9uIHRoZSBwYXJhbWV0ZXJzLiAgKi8KIAotc3RhdGljIGlzbF9h c3RfYnVpbGQgKgorc3RhdGljIF9faXNsX2dpdmUgaXNsX2FzdF9idWlsZCAq CiBnZW5lcmF0ZV9pc2xfY29udGV4dCAoc2NvcF9wIHNjb3ApCiB7CiAgIGlz bF9zZXQgKmNvbnRleHRfaXNsID0gaXNsX3NldF9wYXJhbXMgKGlzbF9zZXRf Y29weSAoc2NvcC0+Y29udGV4dCkpOwpAQCAtNzcsNyArNzM0LDcgQEAKIC8q IEdlbmVyYXRlcyBhIHNjaGVkdWxlLCB3aGljaCBzcGVjaWZpZXMgYW4gb3Jk ZXIgdXNlZCB0bwogICAgdmlzaXQgZWxlbWVudHMgaW4gYSBkb21haW4uICAq LwogCi1zdGF0aWMgaXNsX3VuaW9uX21hcCAqCitzdGF0aWMgX19pc2xfZ2l2 ZSBpc2xfdW5pb25fbWFwICoKIGdlbmVyYXRlX2lzbF9zY2hlZHVsZSAoc2Nv cF9wIHNjb3ApCiB7CiAgIGludCBpOwpAQCAtMTAyLDkgKzc1OSwxNiBAQAog ICByZXR1cm4gc2NoZWR1bGVfaXNsOwogfQogCi1zdGF0aWMgaXNsX2FzdF9u b2RlICoKLXNjb3BfdG9faXNsX2FzdCAoc2NvcF9wIHNjb3ApCitzdGF0aWMg X19pc2xfZ2l2ZSBpc2xfYXN0X25vZGUgKgorc2NvcF90b19pc2xfYXN0IChz Y29wX3Agc2NvcCwgaXZzX3BhcmFtc19wIGlwKQogeworICAvKiBHZW5lcmF0 ZSBsb29wIHVwcGVyIGJvdW5kcyB0aGF0IGNvbnNpc3Qgb2YgdGhlIGN1cnJl bnQgbG9vcCBpdGVyYXRvciwKKyAgYW4gb3BlcmF0b3IgKDwgb3IgPD0pIGFu ZCBhbiBleHByZXNzaW9uIG5vdCBpbnZvbHZpbmcgdGhlIGl0ZXJhdG9yLgor ICBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGVuIHRoZSBjdXJyZW50 IGxvb3AgaXRlcmF0b3IgbWF5IGFwcGVhciBzZXZlcmFsCisgIHRpbWVzIGlu IHRoZSB1cHBlciBib3VuZC4gU2VlIHRoZSBpc2wgbWFudWFsIGZvciBtb3Jl IGRldGFpbHMuICAqLworICBpc2xfb3B0aW9uc19zZXRfYXN0X2J1aWxkX2F0 b21pY191cHBlcl9ib3VuZCAoc2NvcC0+Y3R4LCB0cnVlKTsKKworICBhZGRf cGFyYW1ldGVyc190b19pdnNfcGFyYW1zIChzY29wLCBpcCk7CiAgIGlzbF91 bmlvbl9tYXAgKnNjaGVkdWxlX2lzbCA9IGdlbmVyYXRlX2lzbF9zY2hlZHVs ZSAoc2NvcCk7CiAgIGlzbF9hc3RfYnVpbGQgKmNvbnRleHRfaXNsID0gZ2Vu ZXJhdGVfaXNsX2NvbnRleHQgKHNjb3ApOwogICBpc2xfYXN0X25vZGUgKmFz dF9pc2wgPSBpc2xfYXN0X2J1aWxkX2FzdF9mcm9tX3NjaGVkdWxlIChjb250 ZXh0X2lzbCwKQEAgLTExNywyMSArNzgxLDY4IEBACiAgICB0aGUgZ2l2ZW4g U0NPUC4gIFJldHVybiB0cnVlIGlmIGNvZGUgZ2VuZXJhdGlvbiBzdWNjZWVk ZWQuCiAKICAgIEZJWE1FOiBUaGlzIGlzIG5vdCB5ZXQgYSBmdWxsIGltcGxl bWVudGF0aW9uIG9mIHRoZSBjb2RlIGdlbmVyYXRvcgotICAgICAgICAgIHdp dGggSVNMIEFTVHMuIEdlbmVyYXRpb24gb2YgR0lNUExFIGNvZGUgaXMgaGF2 ZSB0byBiZSBhZGRlZC4gICovCisgICAgICAgICAgd2l0aCBJU0wgQVNUcy4g R2VuZXJhdGlvbiBvZiBHSU1QTEUgY29kZSBoYXMgdG8gYmUgY29tcGxldGVk LiAgKi8KIAogYm9vbAogZ3JhcGhpdGVfcmVnZW5lcmF0ZV9hc3RfaXNsIChz Y29wX3Agc2NvcCkKIHsKKyAgbG9vcF9wIGNvbnRleHRfbG9vcDsKKyAgc2Vz ZSByZWdpb24gPSBTQ09QX1JFR0lPTiAoc2NvcCk7CisgIGlmc2VzZSBpZl9y ZWdpb24gPSBOVUxMOworICBhc3RfaXNsX2luZGV4X2h0YWJfdHlwZSAqaXZz X3BhcmFtc19pbmRleDsKKyAgaXNsX2FzdF9ub2RlICpyb290X25vZGU7Cisg IHN0cnVjdCBpdnNfcGFyYW1zIGlwOworCiAgIHRpbWV2YXJfcHVzaCAoVFZf R1JBUEhJVEVfQ09ERV9HRU4pOwogICBncmFwaGl0ZV9yZWdlbmVyYXRlX2Vy cm9yID0gZmFsc2U7Ci0gIGlzbF9hc3Rfbm9kZSAqcm9vdF9ub2RlID0gc2Nv cF90b19pc2xfYXN0IChzY29wKTsKKworICBhdXRvX3ZlYzx0cmVlLCAxMD4g aXZzX3BhcmFtc192ZWM7CisgIGl2c19wYXJhbXNfaW5kZXggPSBuZXcgYXN0 X2lzbF9pbmRleF9odGFiX3R5cGUgKDEwKTsKKyAgaXAuaXZzX3BhcmFtc192 ZWMgPSBpdnNfcGFyYW1zX3ZlYzsKKyAgaXAuaXZzX3BhcmFtc19pbmRleCA9 IGl2c19wYXJhbXNfaW5kZXg7CisgIGlwLnJlZ2lvbiA9IHJlZ2lvbjsKKwor ICByb290X25vZGUgPSBzY29wX3RvX2lzbF9hc3QgKHNjb3AsICZpcCk7CisK ICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxT KSkKICAgICB7CiAgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcbklTTCBB U1QgZ2VuZXJhdGVkIGJ5IElTTDogXG4iKTsKICAgICAgIHByaW50X2lzbF9h c3Rfbm9kZSAoZHVtcF9maWxlLCByb290X25vZGUsIHNjb3AtPmN0eCk7Cisg ICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcbiIpOwogICAgIH0KKworICBy ZWNvbXB1dGVfYWxsX2RvbWluYXRvcnMgKCk7CisgIGdyYXBoaXRlX3Zlcmlm eSAoKTsKKworICBpZl9yZWdpb24gPSBtb3ZlX3Nlc2VfaW5fY29uZGl0aW9u IChyZWdpb24pOworICBzZXNlX2luc2VydF9waGlzX2Zvcl9saXZlb3V0cyAo cmVnaW9uLAorCQkJCSBpZl9yZWdpb24tPnJlZ2lvbi0+ZXhpdC0+c3JjLAor CQkJCSBpZl9yZWdpb24tPmZhbHNlX3JlZ2lvbi0+ZXhpdCwKKwkJCQkgaWZf cmVnaW9uLT50cnVlX3JlZ2lvbi0+ZXhpdCk7CisgIHJlY29tcHV0ZV9hbGxf ZG9taW5hdG9ycyAoKTsKKyAgZ3JhcGhpdGVfdmVyaWZ5ICgpOworCisgIGNv bnRleHRfbG9vcCA9IFNFU0VfRU5UUlkgKHJlZ2lvbiktPnNyYy0+bG9vcF9m YXRoZXI7CisKKyAgdHJhbnNsYXRlX2lzbF9hc3QgKGNvbnRleHRfbG9vcCwg cm9vdF9ub2RlLCBpZl9yZWdpb24tPnRydWVfcmVnaW9uLT5lbnRyeSwKKwkJ ICAgICAmaXApOworICBncmFwaGl0ZV92ZXJpZnkgKCk7CisgIHNjZXZfcmVz ZXQgKCk7CisgIHJlY29tcHV0ZV9hbGxfZG9taW5hdG9ycyAoKTsKKyAgZ3Jh cGhpdGVfdmVyaWZ5ICgpOworCisgIGlmIChncmFwaGl0ZV9yZWdlbmVyYXRl X2Vycm9yKQorICAgIHNldF9pZnNlc2VfY29uZGl0aW9uIChpZl9yZWdpb24s IGludGVnZXJfemVyb19ub2RlKTsKKworICBmcmVlIChpZl9yZWdpb24tPnRy dWVfcmVnaW9uKTsKKyAgZnJlZSAoaWZfcmVnaW9uLT5yZWdpb24pOworICBm cmVlIChpZl9yZWdpb24pOworCisgIGRlbGV0ZSBpdnNfcGFyYW1zX2luZGV4 OworICBpdnNfcGFyYW1zX2luZGV4ID0gTlVMTDsKICAgaXNsX2FzdF9ub2Rl X2ZyZWUgKHJvb3Rfbm9kZSk7CiAgIHRpbWV2YXJfcG9wIChUVl9HUkFQSElU RV9DT0RFX0dFTik7CisgIC8qIFRPRE86IEFkZCBkdW1wICAqLwogICByZXR1 cm4gIWdyYXBoaXRlX3JlZ2VuZXJhdGVfZXJyb3I7CiB9CiAjZW5kaWYK --001a11c20cf413753204fd6ce000--