Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ijAIQ-0006M0-Vx for pgsql-hackers@arkaria.postgresql.org; Sun, 22 Dec 2019 23:05:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1ijAIP-0003Mg-OF for pgsql-hackers@arkaria.postgresql.org; Sun, 22 Dec 2019 23:05:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ijAIO-0003MY-Of for pgsql-hackers@lists.postgresql.org; Sun, 22 Dec 2019 23:05:57 +0000 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ijAIJ-0002tX-9R for pgsql-hackers@postgresql.org; Sun, 22 Dec 2019 23:05:55 +0000 Received: by mail-pj1-x102b.google.com with SMTP id t101so6667840pjb.4 for ; Sun, 22 Dec 2019 15:05:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=0fk40l92pyBrzrFWlNWAQuiKA4PluSFxuFPHV/sabaM=; b=FA7dDIDkNHzJrVR5wrqFo8+Q6rL9dMszNVgtHbk8NwU/soXPxb5xNc3OE2zvghlCM1 SzfSwunb33COUkOEK4RoDnqKfTQbBvyoiz56+huDsUByX4N/gViFz3nGJmngFnNPNOmL s92AQI9Z1rjqbdI6DmXwMFEr1OlC7K69xxTg6QJQ6AILZcG/rj13MFsCKyxY39/teusx 1qpZQ5uFwD9gyKNbuJbbb6k9u1gfrKK0D4qm/gXY+2nwyr3gReCQfe10+JKI7KlxiKFn PL0PYOyixhVbfpL7pCcL8bDj6ak4r9K56Q6bPgDwM6daOTZdZTQ60grS+Z5b6kl/4Lxh e+UQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=0fk40l92pyBrzrFWlNWAQuiKA4PluSFxuFPHV/sabaM=; b=C8o8ZQnJ82EgkqTWRjBx0wsgCGIC3EDwQh6jXkXrKUuxIghH3+wn/Zh5qrF5lshy7t o+1KsLbCsC7rKpLgK4pBFdyVIaMtbXWEBNVLi8rs9jmZu26QDzzaFwj255BasHz1JVrH 31TRmmk0C9eTfyGzsgJIB8YavRWXpLb7GzIIxMpSFGceLqaGfZoqd27OpbEGx9iLSHcD tzeuJ8pZNygYseCDEN+rlUhfYXQSuBdWYOLuIeuXIM2g8SV6s1fILTgvvrX6esbxAVoy yskMRJoBsZ+eqm6FLbc1oh9fJSb9AMLQn/JeL/VmBoC0yfoOWjew892URUIg2BsJ0XPc qogw== X-Gm-Message-State: APjAAAWO5XkOJD5ED/yUsY9PrAXZi0x/GwSKJdPwW01RYrrkpYfNB02y ZC6dMAYYvjp4cpbccAc1SwgZDw== X-Google-Smtp-Source: APXvYqzGAawnC2J9JCtsCJ0uD2ijSwmI5Z//eHE4DXk/r/XUzPHxdVzGxzXkAwyUxNsK093uNfdDRg== X-Received: by 2002:a17:90a:f0c5:: with SMTP id fa5mr29242450pjb.141.1577055950110; Sun, 22 Dec 2019 15:05:50 -0800 (PST) Received: from jdavis.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id b8sm21979530pfr.64.2019.12.22.15.05.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Dec 2019 15:05:48 -0800 (PST) Message-ID: <2370ca86d4c3b46befc031d8421de02a58df20f1.camel@j-davis.com> Subject: Re: Memory-Bounded Hash Aggregation From: Jeff Davis To: Adam Lee Cc: Tomas Vondra , Taylor Vesely , Melanie Plageman , pgsql-hackers@postgresql.org Date: Sun, 22 Dec 2019 15:05:46 -0800 In-Reply-To: <20191210213422.GD1345@mars.local> References: <9be86fc1adc315f69b8af4b379087ab451008d8a.camel@j-davis.com> <20190802064405.GA94036@mars.local> <617fea8258ba3df7bc8b21cd7f3afc219f2383d9.camel@j-davis.com> <20190802152123.ichmacgx3y3x7dc3@development> <20191128174644.snpuqldt5rndjru7@development> <2c8dc5c9178c391493dfbf6c2f595dc298dd477e.camel@j-davis.com> <20191205035013.GB1345@mars.local> <1b5c79a14f85e20899b100381c1e8d41e3148c5b.camel@j-davis.com> <20191210213422.GD1345@mars.local> Content-Type: multipart/mixed; boundary="=-/DUA8mWVhbIRfvs0Q8zD" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-/DUA8mWVhbIRfvs0Q8zD Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Tue, 2019-12-10 at 13:34 -0800, Adam Lee wrote: > Melanie and I tried this, had a installcheck passed patch. The way > how > we verify it is composing a wide table with long unnecessary text > columns, then check the size it writes on every iteration. > > Please check out the attachment, it's based on your 1204 version. Thank you. Attached a new patch that incorporates your projection work. A few comments: * You are only nulling out up to tts_nvalid, which means that you can still end up storing more on disk if the wide column comes at the end of the table and hasn't been deserialized yet. I fixed this by copying needed attributes to the hash_spill_slot and making it virtual. * aggregated_columns does not need to be a member of AggState; nor does it need to be computed inside of the perhash loop. Aside: if adding a field to AggState is necessary, you need to bump the field numbers of later fields that are labeled for JIT use, otherwise it will break JIT. * I used an array rather than a bitmapset. It makes it easier to find the highest column (to do a slot_getsomeattrs), and it might be a little more efficient for wide tables with mostly useless columns. * Style nitpick: don't mix code and declarations The updated patch also saves the transitionSpace calculation in the Agg node for better hash table size estimating. This is a good way to choose an initial number of buckets for the hash table, and also to cap the number of groups we permit in the hash table when we expect the groups to grow. Regards, Jeff Davis --=-/DUA8mWVhbIRfvs0Q8zD Content-Disposition: attachment; filename="hashagg-20191220.patch" Content-Type: text/x-patch; name="hashagg-20191220.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAppbmRleCA1ZDFjOTAyODJmOS4uODljZWQzY2Q5NzggMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTE3 NTEsNiArMTc1MSwyMyBAQCBpbmNsdWRlX2RpciAnY29uZi5kJwogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWhhc2hh Z2ctbWVtLW92ZXJmbG93IiB4cmVmbGFiZWw9Imhhc2hhZ2dfbWVtX292ZXJmbG93Ij4KKyAgICAg IDx0ZXJtPjx2YXJuYW1lPmhhc2hhZ2dfbWVtX292ZXJmbG93PC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l Pmhhc2hhZ2dfbWVtX292ZXJmbG93PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3Rp dGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICAgSWYgaGFzaCBhZ2dyZWdhdGlvbiBleGNlZWRz IDx2YXJuYW1lPndvcmtfbWVtPC92YXJuYW1lPiBhdCBxdWVyeQorICAgICAgICAgZXhlY3V0aW9u IHRpbWUsIGFuZCA8dmFybmFtZT5oYXNoYWdnX21lbV9vdmVyZmxvdzwvdmFybmFtZT4gaXMgc2V0 CisgICAgICAgICB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIGNvbnRpbnVlIGNvbnN1bWluZyBt b3JlIG1lbW9yeSByYXRoZXIgdGhhbgorICAgICAgICAgcGVyZm9ybWluZyBkaXNrLWJhc2VkIGhh c2ggYWdncmVnYXRpb24uIFRoZSBkZWZhdWx0CisgICAgICAgICBpcyA8bGl0ZXJhbD5vZmY8L2xp dGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtc3RhY2stZGVwdGgiIHhy ZWZsYWJlbD0ibWF4X3N0YWNrX2RlcHRoIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPm1heF9zdGFj a19kZXB0aDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVy bT4KQEAgLTQ0NTEsNiArNDQ2OCwyNCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAg PC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBp ZD0iZ3VjLWVuYWJsZS1oYXNoYWdnLXNwaWxsIiB4cmVmbGFiZWw9ImVuYWJsZV9oYXNoYWdnX3Nw aWxsIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9oYXNoYWdnX3NwaWxsPC92YXJuYW1l PiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmlt YXJ5Pjx2YXJuYW1lPmVuYWJsZV9oYXNoYWdnX3NwaWxsPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgor ICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2Fi bGVzIHRoZSBxdWVyeSBwbGFubmVyJ3MgdXNlIG9mIGhhc2hlZCBhZ2dyZWdhdGlvbiBwbGFuCisg ICAgICAgIHR5cGVzIHdoZW4gdGhlIG1lbW9yeSB1c2FnZSBpcyBleHBlY3RlZCB0bworICAgICAg ICBleGNlZWQgPHZhcm5hbWU+d29ya19tZW08L3Zhcm5hbWU+LiBUaGlzIG9ubHkgYWZmZWN0cyB0 aGUgcGxhbm5lcgorICAgICAgICBjaG9pY2U7IGFjdHVhbCBiZWhhdmlvciBhdCBleGVjdXRpb24g dGltZSBpcyBkaWN0YXRlZCBieQorICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtaGFzaGFnZy1t ZW0tb3ZlcmZsb3ciLz4uIFRoZSBkZWZhdWx0CisgICAgICAgIGlzIDxsaXRlcmFsPm9uPC9saXRl cmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLWhhc2hqb2luIiB4cmVm bGFiZWw9ImVuYWJsZV9oYXNoam9pbiI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaGFz aGpvaW48L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggOTQ5ZmVmYTIzYWUuLmMyZmI3YTA4OGEyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMDIsNiArMTAyLDcgQEAgc3RhdGljIHZvaWQgc2hvd190 YWJsZXNhbXBsZShUYWJsZVNhbXBsZUNsYXVzZSAqdHNjLCBQbGFuU3RhdGUgKnBsYW5zdGF0ZSwK IAkJCQkJCQkgTGlzdCAqYW5jZXN0b3JzLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lk IHNob3dfc29ydF9pbmZvKFNvcnRTdGF0ZSAqc29ydHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsK IHN0YXRpYyB2b2lkIHNob3dfaGFzaF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICpoYXNo c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5m byhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAq ZXMpOwogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAq cWxhYmVsLCBpbnQgd2hpY2gsCkBAIC0xODQ0LDYgKzE4NDUsOCBAQCBFeHBsYWluTm9kZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQljYXNlIFRfQWdnOgogCQkJc2hv d19hZ2dfa2V5cyhjYXN0Tm9kZShBZ2dTdGF0ZSwgcGxhbnN0YXRlKSwgYW5jZXN0b3JzLCBlcyk7 CiAJCQlzaG93X3VwcGVyX3F1YWwocGxhbi0+cXVhbCwgIkZpbHRlciIsIHBsYW5zdGF0ZSwgYW5j ZXN0b3JzLCBlcyk7CisJCQlpZiAoZXMtPmFuYWx5emUpCisJCQkJc2hvd19oYXNoYWdnX2luZm8o KEFnZ1N0YXRlICopIHBsYW5zdGF0ZSwgZXMpOwogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hv d19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJ CQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwpAQCAtMjc0Miw2ICsyNzQ1LDU2IEBAIHNob3dfaGFz aF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCX0KIH0KIAor LyoKKyAqIElmIEVYUExBSU4gQU5BTFlaRSwgc2hvdyBpbmZvcm1hdGlvbiBvbiBoYXNoIGFnZ3Jl Z2F0ZSBtZW1vcnkgdXNhZ2UgYW5kCisgKiBiYXRjaGVzLgorICovCitzdGF0aWMgdm9pZAorc2hv d19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQorewor CUFnZwkJKmFnZwkgICA9IChBZ2cgKilhZ2dzdGF0ZS0+c3MucHMucGxhbjsKKwlsb25nCSBtZW1Q ZWFrS2IgPSAoYWdnc3RhdGUtPmhhc2hfbWVtX3BlYWsgKyAxMDIzKSAvIDEwMjQ7CisJbG9uZwkg ZGlza0tiICAgID0gKGFnZ3N0YXRlLT5oYXNoX2Rpc2tfdXNlZCArIDEwMjMpIC8gMTAyNDsKKwor CisJQXNzZXJ0KElzQShhZ2dzdGF0ZSwgQWdnU3RhdGUpKTsKKworCWlmIChhZ2ctPmFnZ3N0cmF0 ZWd5ICE9IEFHR19IQVNIRUQgJiYKKwkJYWdnLT5hZ2dzdHJhdGVneSAhPSBBR0dfTUlYRUQpCisJ CXJldHVybjsKKworCWlmIChlcy0+Zm9ybWF0ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvU3BhY2VzKGVzLT5zdHIsIGVzLT5pbmRlbnQgKiAyKTsKKwkJYXBw ZW5kU3RyaW5nSW5mbygKKwkJCWVzLT5zdHIsCisJCQkiTWVtb3J5IFVzYWdlOiAlbGRrQiIsCisJ CQltZW1QZWFrS2IpOworCisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3VzZWQgPiAwKQor CQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKAorCQkJCWVzLT5zdHIsCisJCQkJIiAgQmF0Y2hlczog JWQgIERpc2s6ICVsZGtCIiwKKwkJCQlhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3VzZWQsIGRpc2tL Yik7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKAorCQkJZXMtPnN0ciwKKwkJCSJcbiIpOwor CX0KKwllbHNlCisJeworCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJQZWFrIE1lbW9yeSBVc2Fn ZSIsICJrQiIsIG1lbVBlYWtLYiwgZXMpOworCQlpZiAoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlc191 c2VkID4gMCkKKwkJeworCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiSGFzaEFnZyBCYXRjaGVz IiwgTlVMTCwKKwkJCQkJCQkJICAgYWdnc3RhdGUtPmhhc2hfYmF0Y2hlc191c2VkLCBlcyk7CisJ CQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJEaXNrIFVzYWdlIiwgImtCIiwgZGlza0tiLCBlcyk7 CisJCX0KKwl9Cit9CisKIC8qCiAgKiBJZiBpdCdzIEVYUExBSU4gQU5BTFlaRSwgc2hvdyBleGFj dC9sb3NzeSBwYWdlcyBmb3IgYSBCaXRtYXBIZWFwU2NhbiBub2RlCiAgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwci5jCmluZGV4IDhkYTJlMmRjYmJhLi5mYjNlODE3NjRhZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwci5jCkBAIC03OSw3ICs3OSw4IEBAIHN0YXRpYyB2b2lkIEV4ZWNJbml0Q29lcmNlVG9E b21haW4oRXhwckV2YWxTdGVwICpzY3JhdGNoLCBDb2VyY2VUb0RvbWFpbiAqY3Rlc3QsCiBzdGF0 aWMgdm9pZCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUg KmFnZ3N0YXRlLAogCQkJCQkJCQkgIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwKIAkJCQkJCQkJICBG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKLQkJCQkJ CQkJICBpbnQgdHJhbnNubywgaW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCk7CisJ CQkJCQkJCSAgaW50IHRyYW5zbm8sIGludCBzZXRubywgaW50IHNldG9mZiwgYm9vbCBpc2hhc2gs CisJCQkJCQkJCSAgYm9vbCBzcGlsbGVkKTsKIAogCiAvKgpAQCAtMjkyNyw3ICsyOTI4LDcgQEAg RXhlY0luaXRDb2VyY2VUb0RvbWFpbihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIENvZXJjZVRvRG9t YWluICpjdGVzdCwKICAqLwogRXhwclN0YXRlICoKIEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRl ICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJQaGFzZSBwaGFzZSwKLQkJCQkgIGJvb2wgZG9Tb3J0LCBi b29sIGRvSGFzaCkKKwkJCQkgIGJvb2wgZG9Tb3J0LCBib29sIGRvSGFzaCwgYm9vbCBzcGlsbGVk KQogewogCUV4cHJTdGF0ZSAgKnN0YXRlID0gbWFrZU5vZGUoRXhwclN0YXRlKTsKIAlQbGFuU3Rh dGUgICpwYXJlbnQgPSAmYWdnc3RhdGUtPnNzLnBzOwpAQCAtMzE2MCw3ICszMTYxLDggQEAgRXhl Y0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNl LAogCQkJZm9yIChzZXRubyA9IDA7IHNldG5vIDwgcHJvY2Vzc0dyb3VwaW5nU2V0czsgc2V0bm8r KykKIAkJCXsKIAkJCQlFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoc3RhdGUsIGFnZ3N0YXRlLCAmc2Ny YXRjaCwgdHJhbnNfZmNpbmZvLAotCQkJCQkJCQkJICBwZXJ0cmFucywgdHJhbnNubywgc2V0bm8s IHNldG9mZiwgZmFsc2UpOworCQkJCQkJCQkJICBwZXJ0cmFucywgdHJhbnNubywgc2V0bm8sIHNl dG9mZiwgZmFsc2UsCisJCQkJCQkJCQkgIHNwaWxsZWQpOwogCQkJCXNldG9mZisrOwogCQkJfQog CQl9CkBAIC0zMTc4LDcgKzMxODAsOCBAQCBFeGVjQnVpbGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdn c3RhdGUsIEFnZ1N0YXRlUGVyUGhhc2UgcGhhc2UsCiAJCQlmb3IgKHNldG5vID0gMDsgc2V0bm8g PCBudW1IYXNoZXM7IHNldG5vKyspCiAJCQl7CiAJCQkJRXhlY0J1aWxkQWdnVHJhbnNDYWxsKHN0 YXRlLCBhZ2dzdGF0ZSwgJnNjcmF0Y2gsIHRyYW5zX2ZjaW5mbywKLQkJCQkJCQkJCSAgcGVydHJh bnMsIHRyYW5zbm8sIHNldG5vLCBzZXRvZmYsIHRydWUpOworCQkJCQkJCQkJICBwZXJ0cmFucywg dHJhbnNubywgc2V0bm8sIHNldG9mZiwgdHJ1ZSwKKwkJCQkJCQkJCSAgc3BpbGxlZCk7CiAJCQkJ c2V0b2ZmKys7CiAJCQl9CiAJCX0KQEAgLTMyMjYsNyArMzIyOSw4IEBAIHN0YXRpYyB2b2lkCiBF eGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUgKmFnZ3N0YXRl LAogCQkJCQkgIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwKIAkJCQkJICBGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbywgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKLQkJCQkJICBpbnQgdHJhbnNubywg aW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCkKKwkJCQkJICBpbnQgdHJhbnNubywg aW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCwKKwkJCQkJICBib29sIHNwaWxsZWQp CiB7CiAJaW50CQkJYWRqdXN0X2luaXRfanVtcG51bGwgPSAtMTsKIAlpbnQJCQlhZGp1c3Rfc3Ry aWN0X2p1bXBudWxsID0gLTE7CkBAIC0zMjQ4LDcgKzMyNTIsOCBAQCBFeGVjQnVpbGRBZ2dUcmFu c0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUgKmFnZ3N0YXRlLAogCQlmY2luZm8tPmZs aW5mby0+Zm5fc3RyaWN0ICYmCiAJCXBlcnRyYW5zLT5pbml0VmFsdWVJc051bGwpCiAJewotCQlz Y3JhdGNoLT5vcGNvZGUgPSBFRU9QX0FHR19JTklUX1RSQU5TOworCQlzY3JhdGNoLT5vcGNvZGUg PSBzcGlsbGVkID8KKwkJCUVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJTExFRCA6IEVFT1BfQUdHX0lO SVRfVFJBTlM7CiAJCXNjcmF0Y2gtPmQuYWdnX2luaXRfdHJhbnMuYWdnc3RhdGUgPSBhZ2dzdGF0 ZTsKIAkJc2NyYXRjaC0+ZC5hZ2dfaW5pdF90cmFucy5wZXJ0cmFucyA9IHBlcnRyYW5zOwogCQlz Y3JhdGNoLT5kLmFnZ19pbml0X3RyYW5zLnNldG5vID0gc2V0bm87CkBAIC0zMjY1LDcgKzMyNzAs OCBAQCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUgKmFn Z3N0YXRlLAogCWlmIChwZXJ0cmFucy0+bnVtU29ydENvbHMgPT0gMCAmJgogCQlmY2luZm8tPmZs aW5mby0+Zm5fc3RyaWN0KQogCXsKLQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9BR0dfU1RSSUNU X1RSQU5TX0NIRUNLOworCQlzY3JhdGNoLT5vcGNvZGUgPSBzcGlsbGVkID8KKwkJCUVFT1BfQUdH X1NUUklDVF9UUkFOU19DSEVDS19TUElMTEVEIDogRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNL OwogCQlzY3JhdGNoLT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suYWdnc3RhdGUgPSBhZ2dzdGF0 ZTsKIAkJc2NyYXRjaC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLnNldG5vID0gc2V0bm87CiAJ CXNjcmF0Y2gtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5zZXRvZmYgPSBzZXRvZmY7CkBAIC0z MjgzLDkgKzMyODksMTEgQEAgRXhlY0J1aWxkQWdnVHJhbnNDYWxsKEV4cHJTdGF0ZSAqc3RhdGUs IEFnZ1N0YXRlICphZ2dzdGF0ZSwKIAogCS8qIGludm9rZSBhcHByb3ByaWF0ZSB0cmFuc2l0aW9u IGltcGxlbWVudGF0aW9uICovCiAJaWYgKHBlcnRyYW5zLT5udW1Tb3J0Q29scyA9PSAwICYmIHBl cnRyYW5zLT50cmFuc3R5cGVCeVZhbCkKLQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9BR0dfUExB SU5fVFJBTlNfQllWQUw7CisJCXNjcmF0Y2gtPm9wY29kZSA9IHNwaWxsZWQgPworCQkJRUVPUF9B R0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRCA6IEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFM OwogCWVsc2UgaWYgKHBlcnRyYW5zLT5udW1Tb3J0Q29scyA9PSAwKQotCQlzY3JhdGNoLT5vcGNv ZGUgPSBFRU9QX0FHR19QTEFJTl9UUkFOUzsKKwkJc2NyYXRjaC0+b3Bjb2RlID0gc3BpbGxlZCA/ CisJCQlFRU9QX0FHR19QTEFJTl9UUkFOU19TUElMTEVEIDogRUVPUF9BR0dfUExBSU5fVFJBTlM7 CiAJZWxzZSBpZiAocGVydHJhbnMtPm51bUlucHV0cyA9PSAxKQogCQlzY3JhdGNoLT5vcGNvZGUg PSBFRU9QX0FHR19PUkRFUkVEX1RSQU5TX0RBVFVNOwogCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwckludGVycC5jCmluZGV4IGRiZWQ1OTc4MTYyLi40OWZiZjhlNGE0MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC00MzAsOSArNDMwLDEzIEBAIEV4ZWNJbnRl cnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNu dWxsKQogCQkmJkNBU0VfRUVPUF9BR0dfU1RSSUNUX0lOUFVUX0NIRUNLX0FSR1MsCiAJCSYmQ0FT RV9FRU9QX0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tfTlVMTFMsCiAJCSYmQ0FTRV9FRU9QX0FHR19J TklUX1RSQU5TLAorCQkmJkNBU0VfRUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVELAogCQkmJkNB U0VfRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNLLAorCQkmJkNBU0VfRUVPUF9BR0dfU1RSSUNU X1RSQU5TX0NIRUNLX1NQSUxMRUQsCiAJCSYmQ0FTRV9FRU9QX0FHR19QTEFJTl9UUkFOU19CWVZB TCwKKwkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMX1NQSUxMRUQsCiAJCSYmQ0FT RV9FRU9QX0FHR19QTEFJTl9UUkFOUywKKwkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5TX1NQ SUxMRUQsCiAJCSYmQ0FTRV9FRU9QX0FHR19PUkRFUkVEX1RSQU5TX0RBVFVNLAogCQkmJkNBU0Vf RUVPUF9BR0dfT1JERVJFRF9UUkFOU19UVVBMRSwKIAkJJiZDQVNFX0VFT1BfTEFTVApAQCAtMTYy NSw2ICsxNjI5LDM2IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250 ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCiAJCQlFRU9fTkVYVCgpOwogCQl9CisJCUVF T19DQVNFKEVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJTExFRCkKKwkJeworCQkJQWdnU3RhdGUgICAq YWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwOworCQkJQWdnU3RhdGVQZXJH cm91cCBwZXJncm91cF9hbGxhZ2dzOworCisJCQlhZ2dzdGF0ZSA9IG9wLT5kLmFnZ19pbml0X3Ry YW5zLmFnZ3N0YXRlOworCQkJcGVyZ3JvdXBfYWxsYWdncyA9IGFnZ3N0YXRlLT5hbGxfcGVyZ3Jv dXBzW29wLT5kLmFnZ19pbml0X3RyYW5zLnNldG9mZl07CisKKwkJCWlmIChwZXJncm91cF9hbGxh Z2dzID09IE5VTEwpCisJCQkJRUVPX05FWFQoKTsKKworCQkJcGVyZ3JvdXAgPSAmcGVyZ3JvdXBf YWxsYWdnc1tvcC0+ZC5hZ2dfaW5pdF90cmFucy50cmFuc25vXTsKKworCQkJLyogSWYgdHJhbnNW YWx1ZSBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLCBkbyBzbyBub3cuICovCisJCQlpZiAo cGVyZ3JvdXAtPm5vVHJhbnNWYWx1ZSkKKwkJCXsKKwkJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRy YW5zID0gb3AtPmQuYWdnX2luaXRfdHJhbnMucGVydHJhbnM7CisKKwkJCQlhZ2dzdGF0ZS0+Y3Vy YWdnY29udGV4dCA9IG9wLT5kLmFnZ19pbml0X3RyYW5zLmFnZ2NvbnRleHQ7CisJCQkJYWdnc3Rh dGUtPmN1cnJlbnRfc2V0ID0gb3AtPmQuYWdnX2luaXRfdHJhbnMuc2V0bm87CisKKwkJCQlFeGVj QWdnSW5pdEdyb3VwKGFnZ3N0YXRlLCBwZXJ0cmFucywgcGVyZ3JvdXApOworCisJCQkJLyogY29w aWVkIHRyYW5zIHZhbHVlIGZyb20gaW5wdXQsIGRvbmUgdGhpcyByb3VuZCAqLworCQkJCUVFT19K VU1QKG9wLT5kLmFnZ19pbml0X3RyYW5zLmp1bXBudWxsKTsKKwkJCX0KKworCQkJRUVPX05FWFQo KTsKKwkJfQogCiAJCS8qIGNoZWNrIHRoYXQgYSBzdHJpY3QgYWdncmVnYXRlJ3MgaW5wdXQgaXNu J3QgTlVMTCAqLwogCQlFRU9fQ0FTRShFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0spCkBAIC0x NjQyLDYgKzE2NzYsMjUgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNv bnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAKIAkJCUVFT19ORVhUKCk7CiAJCX0KKwkJ RUVPX0NBU0UoRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNLX1NQSUxMRUQpCisJCXsKKwkJCUFn Z1N0YXRlICAgKmFnZ3N0YXRlOworCQkJQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cDsKKwkJCUFn Z1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXBfYWxsYWdnczsKKworCQkJYWdnc3RhdGUgPSBvcC0+ZC5h Z2dfc3RyaWN0X3RyYW5zX2NoZWNrLmFnZ3N0YXRlOworCQkJcGVyZ3JvdXBfYWxsYWdncyA9IGFn Z3N0YXRlLT5hbGxfcGVyZ3JvdXBzW29wLT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suc2V0b2Zm XTsKKworCQkJaWYgKHBlcmdyb3VwX2FsbGFnZ3MgPT0gTlVMTCkKKwkJCQlFRU9fTkVYVCgpOwor CisJCQlwZXJncm91cCA9ICZwZXJncm91cF9hbGxhZ2dzW29wLT5kLmFnZ19zdHJpY3RfdHJhbnNf Y2hlY2sudHJhbnNub107CisKKwkJCWlmICh1bmxpa2VseShwZXJncm91cC0+dHJhbnNWYWx1ZUlz TnVsbCkpCisJCQkJRUVPX0pVTVAob3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5qdW1wbnVs bCk7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KIAogCQkvKgogCQkgKiBFdmFsdWF0ZSBhZ2dyZWdh dGUgdHJhbnNpdGlvbiAvIGNvbWJpbmUgZnVuY3Rpb24gdGhhdCBoYXMgYQpAQCAtMTY5MSw2ICsx NzQ0LDUyIEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICpl Y29udGV4dCwgYm9vbCAqaXNudWxsKQogCiAJCQlFRU9fTkVYVCgpOwogCQl9CisJCUVFT19DQVNF KEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMX1NQSUxMRUQpCisJCXsKKwkJCUFnZ1N0YXRlICAg KmFnZ3N0YXRlOworCQkJQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFuczsKKwkJCUFnZ1N0YXRlUGVy R3JvdXAgcGVyZ3JvdXA7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwX2FsbGFnZ3M7CisJ CQlGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbzsKKwkJCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsK KwkJCURhdHVtCQluZXdWYWw7CisKKwkJCWFnZ3N0YXRlID0gb3AtPmQuYWdnX3RyYW5zLmFnZ3N0 YXRlOworCQkJcGVydHJhbnMgPSBvcC0+ZC5hZ2dfdHJhbnMucGVydHJhbnM7CisKKwkJCXBlcmdy b3VwX2FsbGFnZ3MgPSBhZ2dzdGF0ZS0+YWxsX3Blcmdyb3Vwc1tvcC0+ZC5hZ2dfdHJhbnMuc2V0 b2ZmXTsKKwkJCXBlcmdyb3VwID0gJnBlcmdyb3VwX2FsbGFnZ3Nbb3AtPmQuYWdnX3RyYW5zLnRy YW5zbm9dOworCisJCQlpZiAocGVyZ3JvdXBfYWxsYWdncyA9PSBOVUxMKQorCQkJCUVFT19ORVhU KCk7CisKKwkJCUFzc2VydChwZXJ0cmFucy0+dHJhbnN0eXBlQnlWYWwpOworCisJCQlmY2luZm8g PSBwZXJ0cmFucy0+dHJhbnNmbl9mY2luZm87CisKKwkJCS8qIGNmLiBzZWxlY3RfY3VycmVudF9z ZXQoKSAqLworCQkJYWdnc3RhdGUtPmN1cmFnZ2NvbnRleHQgPSBvcC0+ZC5hZ2dfdHJhbnMuYWdn Y29udGV4dDsKKwkJCWFnZ3N0YXRlLT5jdXJyZW50X3NldCA9IG9wLT5kLmFnZ190cmFucy5zZXRu bzsKKworCQkJLyogc2V0IHVwIGFnZ3N0YXRlLT5jdXJwZXJ0cmFucyBmb3IgQWdnR2V0QWdncmVm KCkgKi8KKwkJCWFnZ3N0YXRlLT5jdXJwZXJ0cmFucyA9IHBlcnRyYW5zOworCisJCQkvKiBpbnZv a2UgdHJhbnNpdGlvbiBmdW5jdGlvbiBpbiBwZXItdHVwbGUgY29udGV4dCAqLworCQkJb2xkQ29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9w ZXJfdHVwbGVfbWVtb3J5KTsKKworCQkJZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gcGVyZ3JvdXAt PnRyYW5zVmFsdWU7CisJCQlmY2luZm8tPmFyZ3NbMF0uaXNudWxsID0gcGVyZ3JvdXAtPnRyYW5z VmFsdWVJc051bGw7CisJCQlmY2luZm8tPmlzbnVsbCA9IGZhbHNlOyAvKiBqdXN0IGluIGNhc2Ug dHJhbnNmbiBkb2Vzbid0IHNldCBpdCAqLworCisJCQluZXdWYWwgPSBGdW5jdGlvbkNhbGxJbnZv a2UoZmNpbmZvKTsKKworCQkJcGVyZ3JvdXAtPnRyYW5zVmFsdWUgPSBuZXdWYWw7CisJCQlwZXJn cm91cC0+dHJhbnNWYWx1ZUlzTnVsbCA9IGZjaW5mby0+aXNudWxsOworCisJCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KIAogCQkvKgog CQkgKiBFdmFsdWF0ZSBhZ2dyZWdhdGUgdHJhbnNpdGlvbiAvIGNvbWJpbmUgZnVuY3Rpb24gdGhh dCBoYXMgYQpAQCAtMTc1Niw2ICsxODU1LDY3IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAq c3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCiAJCQlFRU9fTkVY VCgpOwogCQl9CisJCUVFT19DQVNFKEVFT1BfQUdHX1BMQUlOX1RSQU5TX1NQSUxMRUQpCisJCXsK KwkJCUFnZ1N0YXRlICAgKmFnZ3N0YXRlOworCQkJQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFuczsK KwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXA7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdy b3VwX2FsbGFnZ3M7CisJCQlGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbzsKKwkJCU1lbW9yeUNvbnRl eHQgb2xkQ29udGV4dDsKKwkJCURhdHVtCQluZXdWYWw7CisKKwkJCWFnZ3N0YXRlID0gb3AtPmQu YWdnX3RyYW5zLmFnZ3N0YXRlOworCQkJcGVydHJhbnMgPSBvcC0+ZC5hZ2dfdHJhbnMucGVydHJh bnM7CisKKwkJCXBlcmdyb3VwX2FsbGFnZ3MgPSBhZ2dzdGF0ZS0+YWxsX3Blcmdyb3Vwc1tvcC0+ ZC5hZ2dfdHJhbnMuc2V0b2ZmXTsKKworCQkJaWYgKHBlcmdyb3VwX2FsbGFnZ3MgPT0gTlVMTCkK KwkJCQlFRU9fTkVYVCgpOworCisJCQlwZXJncm91cCA9ICZwZXJncm91cF9hbGxhZ2dzW29wLT5k LmFnZ190cmFucy50cmFuc25vXTsKKworCQkJQXNzZXJ0KCFwZXJ0cmFucy0+dHJhbnN0eXBlQnlW YWwpOworCisJCQlmY2luZm8gPSBwZXJ0cmFucy0+dHJhbnNmbl9mY2luZm87CisKKwkJCS8qIGNm LiBzZWxlY3RfY3VycmVudF9zZXQoKSAqLworCQkJYWdnc3RhdGUtPmN1cmFnZ2NvbnRleHQgPSBv cC0+ZC5hZ2dfdHJhbnMuYWdnY29udGV4dDsKKwkJCWFnZ3N0YXRlLT5jdXJyZW50X3NldCA9IG9w LT5kLmFnZ190cmFucy5zZXRubzsKKworCQkJLyogc2V0IHVwIGFnZ3N0YXRlLT5jdXJwZXJ0cmFu cyBmb3IgQWdnR2V0QWdncmVmKCkgKi8KKwkJCWFnZ3N0YXRlLT5jdXJwZXJ0cmFucyA9IHBlcnRy YW5zOworCisJCQkvKiBpbnZva2UgdHJhbnNpdGlvbiBmdW5jdGlvbiBpbiBwZXItdHVwbGUgY29u dGV4dCAqLworCQkJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhhZ2dzdGF0ZS0+ dG1wY29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5KTsKKworCQkJZmNpbmZvLT5hcmdzWzBd LnZhbHVlID0gcGVyZ3JvdXAtPnRyYW5zVmFsdWU7CisJCQlmY2luZm8tPmFyZ3NbMF0uaXNudWxs ID0gcGVyZ3JvdXAtPnRyYW5zVmFsdWVJc051bGw7CisJCQlmY2luZm8tPmlzbnVsbCA9IGZhbHNl OyAvKiBqdXN0IGluIGNhc2UgdHJhbnNmbiBkb2Vzbid0IHNldCBpdCAqLworCisJCQluZXdWYWwg PSBGdW5jdGlvbkNhbGxJbnZva2UoZmNpbmZvKTsKKworCQkJLyoKKwkJCSAqIEZvciBwYXNzLWJ5 LXJlZiBkYXRhdHlwZSwgbXVzdCBjb3B5IHRoZSBuZXcgdmFsdWUgaW50bworCQkJICogYWdnY29u dGV4dCBhbmQgZnJlZSB0aGUgcHJpb3IgdHJhbnNWYWx1ZS4gIEJ1dCBpZiB0cmFuc2ZuCisJCQkg KiByZXR1cm5lZCBhIHBvaW50ZXIgdG8gaXRzIGZpcnN0IGlucHV0LCB3ZSBkb24ndCBuZWVkIHRv IGRvCisJCQkgKiBhbnl0aGluZy4gIEFsc28sIGlmIHRyYW5zZm4gcmV0dXJuZWQgYSBwb2ludGVy IHRvIGEgUi9XCisJCQkgKiBleHBhbmRlZCBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGEgY2hpbGQg b2YgdGhlIGFnZ2NvbnRleHQsCisJCQkgKiBhc3N1bWUgd2UgY2FuIGFkb3B0IHRoYXQgdmFsdWUg d2l0aG91dCBjb3B5aW5nIGl0LgorCQkJICovCisJCQlpZiAoRGF0dW1HZXRQb2ludGVyKG5ld1Zh bCkgIT0gRGF0dW1HZXRQb2ludGVyKHBlcmdyb3VwLT50cmFuc1ZhbHVlKSkKKwkJCQluZXdWYWwg PSBFeGVjQWdnVHJhbnNSZXBhcmVudChhZ2dzdGF0ZSwgcGVydHJhbnMsCisJCQkJCQkJCQkJCSAg bmV3VmFsLCBmY2luZm8tPmlzbnVsbCwKKwkJCQkJCQkJCQkJICBwZXJncm91cC0+dHJhbnNWYWx1 ZSwKKwkJCQkJCQkJCQkJICBwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbCk7CisKKwkJCXBlcmdy b3VwLT50cmFuc1ZhbHVlID0gbmV3VmFsOworCQkJcGVyZ3JvdXAtPnRyYW5zVmFsdWVJc051bGwg PSBmY2luZm8tPmlzbnVsbDsKKworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQp OworCisJCQlFRU9fTkVYVCgpOworCQl9CiAKIAkJLyogcHJvY2VzcyBzaW5nbGUtY29sdW1uIG9y ZGVyZWQgYWdncmVnYXRlIGRhdHVtICovCiAJCUVFT19DQVNFKEVFT1BfQUdHX09SREVSRURfVFJB TlNfREFUVU0pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjR3JvdXBpbmcu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91cGluZy5jCmluZGV4IGUzNjExNDMwOTRj Li4wMmRiYTNlYWMxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0dyb3Vw aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0dyb3VwaW5nLmMKQEAgLTI1LDgg KzI1LDkgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9t ZW11dGlscy5oIgogCi1zdGF0aWMgdWludDMyIFR1cGxlSGFzaFRhYmxlSGFzaChzdHJ1Y3QgdHVw bGVoYXNoX2hhc2ggKnRiLCBjb25zdCBNaW5pbWFsVHVwbGUgdHVwbGUpOwogc3RhdGljIGludAlU dXBsZUhhc2hUYWJsZU1hdGNoKHN0cnVjdCB0dXBsZWhhc2hfaGFzaCAqdGIsIGNvbnN0IE1pbmlt YWxUdXBsZSB0dXBsZTEsIGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZTIpOworc3RhdGljIFR1cGxl SGFzaEVudHJ5IExvb2t1cFR1cGxlSGFzaEVudHJ5X2ludGVybmFsKAorCVR1cGxlSGFzaFRhYmxl IGhhc2h0YWJsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmlzbmV3LCB1aW50MzIgaGFz aCk7CiAKIC8qCiAgKiBEZWZpbmUgcGFyYW1ldGVycyBmb3IgdHVwbGUgaGFzaCB0YWJsZSBjb2Rl IGdlbmVyYXRpb24uIFRoZSBpbnRlcmZhY2UgaXMKQEAgLTI4NCw2ICsyODUsMTcgQEAgUmVzZXRU dXBsZUhhc2hUYWJsZShUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUpCiAJdHVwbGVoYXNoX3Jlc2V0 KGhhc2h0YWJsZS0+aGFzaHRhYik7CiB9CiAKKy8qCisgKiBEZXN0cm95IHRoZSBoYXNoIHRhYmxl LiBOb3RlIHRoYXQgdGhlIHRhYmxlY3h0IHBhc3NlZCB0bworICogQnVpbGRUdXBsZUhhc2hUYWJs ZUV4dCgpIHNob3VsZCBhbHNvIGJlIHJlc2V0LCBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZQorICog bGVha3MuCisgKi8KK3ZvaWQKK0Rlc3Ryb3lUdXBsZUhhc2hUYWJsZShUdXBsZUhhc2hUYWJsZSBo YXNodGFibGUpCit7CisJdHVwbGVoYXNoX2Rlc3Ryb3koaGFzaHRhYmxlLT5oYXNodGFiKTsKK30K KwogLyoKICAqIEZpbmQgb3IgY3JlYXRlIGEgaGFzaHRhYmxlIGVudHJ5IGZvciB0aGUgdHVwbGUg Z3JvdXAgY29udGFpbmluZyB0aGUKICAqIGdpdmVuIHR1cGxlLiAgVGhlIHR1cGxlIG11c3QgYmUg dGhlIHNhbWUgdHlwZSBhcyB0aGUgaGFzaHRhYmxlIGVudHJpZXMuCkBAIC0zMDAsMTAgKzMxMiw5 IEBAIFR1cGxlSGFzaEVudHJ5CiBMb29rdXBUdXBsZUhhc2hFbnRyeShUdXBsZUhhc2hUYWJsZSBo YXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkgYm9vbCAqaXNuZXcpCiB7Ci0J VHVwbGVIYXNoRW50cnlEYXRhICplbnRyeTsKLQlNZW1vcnlDb250ZXh0IG9sZENvbnRleHQ7Ci0J Ym9vbAkJZm91bmQ7Ci0JTWluaW1hbFR1cGxlIGtleTsKKwlUdXBsZUhhc2hFbnRyeQllbnRyeTsK KwlNZW1vcnlDb250ZXh0CW9sZENvbnRleHQ7CisJdWludDMyCQkJaGFzaDsKIAogCS8qIE5lZWQg dG8gcnVuIHRoZSBoYXNoIGZ1bmN0aW9ucyBpbiBzaG9ydC1saXZlZCBjb250ZXh0ICovCiAJb2xk Q29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhoYXNodGFibGUtPnRlbXBjeHQpOwpAQCAt MzEzLDMyICszMjQsMjkgQEAgTG9va3VwVHVwbGVIYXNoRW50cnkoVHVwbGVIYXNoVGFibGUgaGFz aHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAloYXNodGFibGUtPmluX2hhc2hfZnVuY3Mg PSBoYXNodGFibGUtPnRhYl9oYXNoX2Z1bmNzOwogCWhhc2h0YWJsZS0+Y3VyX2VxX2Z1bmMgPSBo YXNodGFibGUtPnRhYl9lcV9mdW5jOwogCi0Ja2V5ID0gTlVMTDsJCQkJCS8qIGZsYWcgdG8gcmVm ZXJlbmNlIGlucHV0c2xvdCAqLworCWhhc2ggPSBUdXBsZUhhc2hUYWJsZUhhc2goaGFzaHRhYmxl LT5oYXNodGFiLCBOVUxMKTsKKwllbnRyeSA9IExvb2t1cFR1cGxlSGFzaEVudHJ5X2ludGVybmFs KGhhc2h0YWJsZSwgc2xvdCwgaXNuZXcsIGhhc2gpOwogCi0JaWYgKGlzbmV3KQotCXsKLQkJZW50 cnkgPSB0dXBsZWhhc2hfaW5zZXJ0KGhhc2h0YWJsZS0+aGFzaHRhYiwga2V5LCAmZm91bmQpOwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDb250ZXh0KTsKIAotCQlpZiAoZm91bmQpCi0JCXsK LQkJCS8qIGZvdW5kIHByZS1leGlzdGluZyBlbnRyeSAqLwotCQkJKmlzbmV3ID0gZmFsc2U7Ci0J CX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBjcmVhdGVkIG5ldyBlbnRyeSAqLwotCQkJKmlzbmV3ID0g dHJ1ZTsKLQkJCS8qIHplcm8gY2FsbGVyIGRhdGEgKi8KLQkJCWVudHJ5LT5hZGRpdGlvbmFsID0g TlVMTDsKLQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhoYXNodGFibGUtPnRhYmxlY3h0KTsKLQkJ CS8qIENvcHkgdGhlIGZpcnN0IHR1cGxlIGludG8gdGhlIHRhYmxlIGNvbnRleHQgKi8KLQkJCWVu dHJ5LT5maXJzdFR1cGxlID0gRXhlY0NvcHlTbG90TWluaW1hbFR1cGxlKHNsb3QpOwotCQl9Ci0J fQotCWVsc2UKLQl7Ci0JCWVudHJ5ID0gdHVwbGVoYXNoX2xvb2t1cChoYXNodGFibGUtPmhhc2h0 YWIsIGtleSk7Ci0JfQorCXJldHVybiBlbnRyeTsKK30KKworLyoKKyAqIEEgdmFyaWFudCBvZiBM b29rdXBUdXBsZUhhc2hFbnRyeSBmb3IgY2FsbGVycyB0aGF0IGhhdmUgYWxyZWFkeSBjb21wdXRl ZAorICogdGhlIGhhc2ggdmFsdWUuCisgKi8KK1R1cGxlSGFzaEVudHJ5CitMb29rdXBUdXBsZUhh c2hFbnRyeUhhc2goVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKKwkJCQkJCSBib29sICppc25ldywgdWludDMyIGhhc2gpCit7CisJVHVwbGVIYXNoRW50cnkJ ZW50cnk7CisJTWVtb3J5Q29udGV4dAlvbGRDb250ZXh0OworCisJLyogTmVlZCB0byBydW4gdGhl IGhhc2ggZnVuY3Rpb25zIGluIHNob3J0LWxpdmVkIGNvbnRleHQgKi8KKwlvbGRDb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0YWJsZS0+dGVtcGN4dCk7CisKKwllbnRyeSA9IExv b2t1cFR1cGxlSGFzaEVudHJ5X2ludGVybmFsKGhhc2h0YWJsZSwgc2xvdCwgaXNuZXcsIGhhc2gp OwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwogCkBAIC0zODksNyArMzk3 LDcgQEAgRmluZFR1cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCiAgKiBBbHNvLCB0aGUgY2FsbGVyIG11c3Qgc2VsZWN0IGFuIGFwcHJv cHJpYXRlIG1lbW9yeSBjb250ZXh0IGZvciBydW5uaW5nCiAgKiB0aGUgaGFzaCBmdW5jdGlvbnMu IChkeW5haGFzaC5jIGRvZXNuJ3QgY2hhbmdlIEN1cnJlbnRNZW1vcnlDb250ZXh0LikKICAqLwot c3RhdGljIHVpbnQzMgordWludDMyCiBUdXBsZUhhc2hUYWJsZUhhc2goc3RydWN0IHR1cGxlaGFz aF9oYXNoICp0YiwgY29uc3QgTWluaW1hbFR1cGxlIHR1cGxlKQogewogCVR1cGxlSGFzaFRhYmxl IGhhc2h0YWJsZSA9IChUdXBsZUhhc2hUYWJsZSkgdGItPnByaXZhdGVfZGF0YTsKQEAgLTQ1MCw2 ICs0NTgsNTQgQEAgVHVwbGVIYXNoVGFibGVIYXNoKHN0cnVjdCB0dXBsZWhhc2hfaGFzaCAqdGIs IGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZSkKIAlyZXR1cm4gbXVybXVyaGFzaDMyKGhhc2hrZXkp OwogfQogCisvKgorICogRG9lcyB0aGUgd29yayBvZiBMb29rdXBUdXBsZUhhc2hFbnRyeSBhbmQg TG9va3VwVHVwbGVIYXNoRW50cnlIYXNoLiBVc2VmdWwKKyAqIHNvIHRoYXQgd2UgY2FuIGF2b2lk IHN3aXRjaGluZyB0aGUgbWVtb3J5IGNvbnRleHQgbXVsdGlwbGUgdGltZXMgZm9yCisgKiBMb29r dXBUdXBsZUhhc2hFbnRyeS4KKyAqLworc3RhdGljIFR1cGxlSGFzaEVudHJ5CitMb29rdXBUdXBs ZUhhc2hFbnRyeV9pbnRlcm5hbChUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsIFR1cGxlVGFibGVT bG90ICpzbG90LAorCQkJCQkJCSAgYm9vbCAqaXNuZXcsIHVpbnQzMiBoYXNoKQoreworCVR1cGxl SGFzaEVudHJ5RGF0YSAqZW50cnk7CisJYm9vbAkJZm91bmQ7CisJTWluaW1hbFR1cGxlIGtleTsK KworCS8qIHNldCB1cCBkYXRhIG5lZWRlZCBieSBoYXNoIGFuZCBtYXRjaCBmdW5jdGlvbnMgKi8K KwloYXNodGFibGUtPmlucHV0c2xvdCA9IHNsb3Q7CisJaGFzaHRhYmxlLT5pbl9oYXNoX2Z1bmNz ID0gaGFzaHRhYmxlLT50YWJfaGFzaF9mdW5jczsKKwloYXNodGFibGUtPmN1cl9lcV9mdW5jID0g aGFzaHRhYmxlLT50YWJfZXFfZnVuYzsKKworCWtleSA9IE5VTEw7CQkJCQkvKiBmbGFnIHRvIHJl ZmVyZW5jZSBpbnB1dHNsb3QgKi8KKworCWlmIChpc25ldykKKwl7CisJCWVudHJ5ID0gdHVwbGVo YXNoX2luc2VydF9oYXNoKGhhc2h0YWJsZS0+aGFzaHRhYiwga2V5LCBoYXNoLCAmZm91bmQpOwor CisJCWlmIChmb3VuZCkKKwkJeworCQkJLyogZm91bmQgcHJlLWV4aXN0aW5nIGVudHJ5ICovCisJ CQkqaXNuZXcgPSBmYWxzZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGNyZWF0ZWQgbmV3IGVu dHJ5ICovCisJCQkqaXNuZXcgPSB0cnVlOworCQkJLyogemVybyBjYWxsZXIgZGF0YSAqLworCQkJ ZW50cnktPmFkZGl0aW9uYWwgPSBOVUxMOworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0 YWJsZS0+dGFibGVjeHQpOworCQkJLyogQ29weSB0aGUgZmlyc3QgdHVwbGUgaW50byB0aGUgdGFi bGUgY29udGV4dCAqLworCQkJZW50cnktPmZpcnN0VHVwbGUgPSBFeGVjQ29weVNsb3RNaW5pbWFs VHVwbGUoc2xvdCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJZW50cnkgPSB0dXBsZWhhc2hfbG9v a3VwX2hhc2goaGFzaHRhYmxlLT5oYXNodGFiLCBrZXksIGhhc2gpOworCX0KKworCXJldHVybiBl bnRyeTsKK30KKwogLyoKICAqIFNlZSB3aGV0aGVyIHR3byB0dXBsZXMgKHByZXN1bWFibHkgb2Yg dGhlIHNhbWUgaGFzaCB2YWx1ZSkgbWF0Y2gKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUFnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jCmluZGV4 IDZlZTI0ZWFiM2QyLi5mMTk4OWIxMGVhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUFnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwpAQCAtMTk0 LDYgKzE5NCwxOCBAQAogICoJICB0cmFuc2l0aW9uIHZhbHVlcy4gIGhhc2hjb250ZXh0IGlzIHRo ZSBzaW5nbGUgY29udGV4dCBjcmVhdGVkIHRvIHN1cHBvcnQKICAqCSAgYWxsIGhhc2ggdGFibGVz LgogICoKKyAqCSAgV2hlbiB0aGUgaGFzaCB0YWJsZSBtZW1vcnkgZXhjZWVkcyB3b3JrX21lbSwg d2UgYWR2YW5jZSB0aGUgdHJhbnNpdGlvbgorICoJICBzdGF0ZXMgb25seSBmb3IgZ3JvdXBzIGFs cmVhZHkgaW4gdGhlIGhhc2ggdGFibGUuIEZvciB0dXBsZXMgdGhhdCB3b3VsZAorICoJICBuZWVk IHRvIGNyZWF0ZSBhIG5ldyBoYXNoIHRhYmxlIGVudHJpZXMgKGFuZCBpbml0aWFsaXplIG5ldyB0 cmFuc2l0aW9uCisgKgkgIHN0YXRlcyksIHdlIHNwaWxsIHRoZW0gdG8gZGlzayB0byBiZSBwcm9j ZXNzZWQgbGF0ZXIuIFRoZSB0dXBsZXMgYXJlCisgKgkgIHNwaWxsZWQgaW4gYSBwYXJ0aXRpb25l ZCBtYW5uZXIsIHNvIHRoYXQgc3Vic2VxdWVudCBiYXRjaGVzIGFyZSBzbWFsbGVyCisgKgkgIGFu ZCBsZXNzIGxpa2VseSB0byBleGNlZWQgd29ya19tZW0gKGlmIGEgYmF0Y2ggZG9lcyBleGNlZWQg d29ya19tZW0sIGl0CisgKgkgIG11c3QgYmUgc3BpbGxlZCByZWN1cnNpdmVseSkuCisgKgorICoJ ICBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdHJhbnNpdGlvbiBzdGF0ZXMgdG8gc3RhcnQg c21hbGwgYnV0IHRoZW4KKyAqCSAgZ3JvdyB2ZXJ5IGxhcmdlOyBmb3IgaW5zdGFuY2UgaW4gdGhl IGNhc2Ugb2YgQVJSQVlfQUdHLiBJbiBzdWNoIGNhc2VzLAorICoJICBpdCdzIHN0aWxsIHBvc3Np YmxlIHRvIHNpZ25pZmljYW50bHkgZXhjZWVkIHdvcmtfbWVtLgorICoKICAqICAgIFRyYW5zaXRp b24gLyBDb21iaW5lIGZ1bmN0aW9uIGludm9jYXRpb246CiAgKgogICogICAgRm9yIHBlcmZvcm1h bmNlIHJlYXNvbnMgdHJhbnNpdGlvbiBmdW5jdGlvbnMsIGluY2x1ZGluZyBjb21iaW5lCkBAIC0y MjksMTUgKzI0MSw3MCBAQAogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfYWdnLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvZXJjZS5o IgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmZmlsZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKKyNp bmNsdWRlICJ1dGlscy9keW5haGFzaC5oIgogI2luY2x1ZGUgInV0aWxzL2V4cGFuZGVkZGF0dW0u aCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVz b3J0LmgiCiAKKy8qCisgKiBDb250cm9sIGhvdyBtYW55IHBhcnRpdGlvbnMgYXJlIGNyZWF0ZWQg d2hlbiBzcGlsbGluZyBIYXNoQWdnIHRvCisgKiBkaXNrLgorICoKKyAqIEhBU0hfUEFSVElUSU9O X0ZBQ1RPUiBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIHBhcnRpdGlv bnMKKyAqIG5lZWRlZCBzdWNoIHRoYXQgZWFjaCBwYXJ0aXRpb24gd2lsbCBmaXQgaW4gbWVtb3J5 LiBUaGUgZmFjdG9yIGlzIHNldAorICogaGlnaGVyIHRoYW4gb25lIGJlY2F1c2UgdGhlcmUncyBu b3QgYSBoaWdoIGNvc3QgdG8gaGF2aW5nIGEgZmV3IHRvbyBtYW55CisgKiBwYXJ0aXRpb25zLCBh bmQgaXQgbWFrZXMgaXQgbGVzcyBsaWtlbHkgdGhhdCBhIHBhcnRpdGlvbiB3aWxsIG5lZWQgdG8g YmUKKyAqIHNwaWxsZWQgcmVjdXJzaXZlbHkuIEFub3RoZXIgYmVuZWZpdCBvZiBoYXZpbmcgbW9y ZSwgc21hbGxlciBwYXJ0aXRpb25zIGlzCisgKiB0aGF0IHNtYWxsIGhhc2ggdGFibGVzIG1heSBw ZXJmb3JtIGJldHRlciB0aGFuIGxhcmdlIG9uZXMgZHVlIHRvIG1lbW9yeQorICogY2FjaGluZyBl ZmZlY3RzLgorICoKKyAqIEhBU0hfUEFSVElUSU9OX01FTSBpcyB0aGUgYXBwcm94aW1hdGUgYW1v dW50IG9mIHdvcmtfbWVtIHdlIHNob3VsZCByZXNlcnZlCisgKiBmb3IgdGhlIHBhcnRpdGlvbnMg dGhlbXNlbHZlcyAoaS5lLiBidWZmZXJpbmcgb2YgdGhlIGZpbGVzIGJhY2tpbmcgdGhlCisgKiBw YXJ0aXRpb25zKS4gVGhpcyBpcyBzbG9wcHksIGJlY2F1c2Ugd2UgbXVzdCByZXNlcnZlIHRoZSBt ZW1vcnkgYmVmb3JlCisgKiBmaWxsaW5nIHRoZSBoYXNoIHRhYmxlOyBidXQgd2UgY2hvb3NlIHRo ZSBudW1iZXIgb2YgcGFydGl0aW9ucyBhdCB0aGUgdGltZQorICogd2UgbmVlZCB0byBzcGlsbC4K KyAqCisgKiBXZSBhbHNvIHNwZWNpZnkgYSBtaW4gYW5kIG1heCBudW1iZXIgb2YgcGFydGl0aW9u cyBwZXIgc3BpbGwuIFRvbyBmZXcgbWlnaHQKKyAqIG1lYW4gYSBsb3Qgb2Ygd2FzdGVkIEkvTyBm cm9tIHJlcGVhdGVkIHNwaWxsaW5nIG9mIHRoZSBzYW1lIHR1cGxlcy4gVG9vCisgKiBtYW55IHdp bGwgcmVzdWx0IGluIGxvdHMgb2YgbWVtb3J5IHdhc3RlZCBidWZmZXJpbmcgdGhlIHNwaWxsIGZp bGVzIChhbmQKKyAqIHBvc3NpYmx5IHB1c2hpbmcgaGlkZGVuIGNvc3RzIHRvIHRoZSBPUyBmb3Ig bWFuYWdpbmcgbW9yZSBmaWxlcykuCisgKi8KKyNkZWZpbmUgSEFTSF9QQVJUSVRJT05fRkFDVE9S IDEuNTAKKyNkZWZpbmUgSEFTSF9NSU5fUEFSVElUSU9OUyA0CisjZGVmaW5lIEhBU0hfTUFYX1BB UlRJVElPTlMgMjU2CisjZGVmaW5lIEhBU0hfUEFSVElUSU9OX01FTSAoSEFTSF9NSU5fUEFSVElU SU9OUyAqIEJMQ0tTWikKKworLyoKKyAqIFJlcHJlc2VudHMgcGFydGl0aW9uZWQgc3BpbGwgZGF0 YSBmb3IgYSBzaW5nbGUgaGFzaHRhYmxlLgorICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQWdnU3Bp bGwKK3sKKwlpbnQgICAgICAgbl9wYXJ0aXRpb25zOwkJLyogbnVtYmVyIG9mIG91dHB1dCBwYXJ0 aXRpb25zICovCisJaW50ICAgICAgIHBhcnRpdGlvbl9iaXRzOwkvKiBudW1iZXIgb2YgYml0cyBm b3IgcGFydGl0aW9uIG1hc2sKKwkJCQkJCQkJICAgbG9nMihuX3BhcnRpdGlvbnMpIHBhcmVudCBw YXJ0aXRpb24gYml0cyAqLworCUJ1ZkZpbGUgKipwYXJ0aXRpb25zOwkJLyogb3V0cHV0IHBhcnRp dGlvbiBmaWxlcyAqLworCWludDY0ICAgICpudHVwbGVzOwkJCS8qIG51bWJlciBvZiB0dXBsZXMg aW4gZWFjaCBwYXJ0aXRpb24gKi8KK30gSGFzaEFnZ1NwaWxsOworCisvKgorICogUmVwcmVzZW50 cyB3b3JrIHRvIGJlIGRvbmUgZm9yIG9uZSBwYXNzIG9mIGhhc2ggYWdncmVnYXRpb24uIEluaXRp YWxseSwKKyAqIG9ubHkgdGhlIGlucHV0IGZpZWxkcyBhcmUgc2V0LiBJZiBzcGlsbGVkIHRvIGRp c2ssIGFsc28gc2V0IHRoZSBzcGlsbCBkYXRhLgorICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQWdn QmF0Y2gKK3sKKwlCdWZGaWxlICppbnB1dF9maWxlOwkJLyogaW5wdXQgcGFydGl0aW9uICovCisJ aW50ICAgICAgaW5wdXRfYml0czsJCS8qIG51bWJlciBvZiBiaXRzIGZvciBpbnB1dCBwYXJ0aXRp b24gbWFzayAqLworCWludDY0ICAgIGlucHV0X3R1cGxlczsJCS8qIG51bWJlciBvZiB0dXBsZXMg aW4gdGhpcyBiYXRjaCAqLworCWludAkJIHNldG5vOwkJCQkvKiBncm91cGluZyBzZXQgKi8KKwlI YXNoQWdnU3BpbGwgc3BpbGw7CQkJLyogc3BpbGwgb3V0cHV0ICovCit9IEhhc2hBZ2dCYXRjaDsK Kwogc3RhdGljIHZvaWQgc2VsZWN0X2N1cnJlbnRfc2V0KEFnZ1N0YXRlICphZ2dzdGF0ZSwgaW50 IHNldG5vLCBib29sIGlzX2hhc2gpOwogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZV9waGFzZShBZ2dT dGF0ZSAqYWdnc3RhdGUsIGludCBuZXdwaGFzZSk7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKmZl dGNoX2lucHV0X3R1cGxlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7CkBAIC0yNzEsMTIgKzMzOCwzNSBA QCBzdGF0aWMgdm9pZCBmaW5hbGl6ZV9hZ2dyZWdhdGVzKEFnZ1N0YXRlICphZ2dzdGF0ZSwKIHN0 YXRpYyBUdXBsZVRhYmxlU2xvdCAqcHJvamVjdF9hZ2dyZWdhdGVzKEFnZ1N0YXRlICphZ2dzdGF0 ZSk7CiBzdGF0aWMgQml0bWFwc2V0ICpmaW5kX3VuYWdncmVnYXRlZF9jb2xzKEFnZ1N0YXRlICph Z2dzdGF0ZSk7CiBzdGF0aWMgYm9vbCBmaW5kX3VuYWdncmVnYXRlZF9jb2xzX3dhbGtlcihOb2Rl ICpub2RlLCBCaXRtYXBzZXQgKipjb2xub3MpOwotc3RhdGljIHZvaWQgYnVpbGRfaGFzaF90YWJs ZShBZ2dTdGF0ZSAqYWdnc3RhdGUpOwotc3RhdGljIFR1cGxlSGFzaEVudHJ5RGF0YSAqbG9va3Vw X2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyB2b2lkIGJ1aWxkX2hhc2hf dGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlLCBpbnQgc2V0bm8sCisJCQkJCQkJIGludDY0IG5ncm91 cHNfZXN0aW1hdGUpOworc3RhdGljIHZvaWQgcHJlcGFyZV9oYXNoX3Nsb3QoQWdnU3RhdGUgKmFn Z3N0YXRlKTsKK3N0YXRpYyB2b2lkIGhhc2hfcmVjb21waWxlX2V4cHJlc3Npb25zKEFnZ1N0YXRl ICphZ2dzdGF0ZSk7CitzdGF0aWMgdWludDMyIGNhbGN1bGF0ZV9oYXNoKEFnZ1N0YXRlICphZ2dz dGF0ZSk7CitzdGF0aWMgbG9uZyBoYXNoX2Nob29zZV9udW1fYnVja2V0cyhBZ2dTdGF0ZSAqYWdn c3RhdGUsCisJCQkJCQkJCQlsb25nIGVzdGltYXRlZF9uYnVja2V0cywKKwkJCQkJCQkJCVNpemUg bWVtb3J5KTsKK3N0YXRpYyBpbnQgaGFzaF9jaG9vc2VfbnVtX3NwaWxsX3BhcnRpdGlvbnModWlu dDY0IGlucHV0X2dyb3VwcywKKwkJCQkJCQkJCQkJZG91YmxlIGhhc2hlbnRyeXNpemUpOworc3Rh dGljIEFnZ1N0YXRlUGVyR3JvdXAgbG9va3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRl LCB1aW50MzIgaGFzaCk7CiBzdGF0aWMgdm9pZCBsb29rdXBfaGFzaF9lbnRyaWVzKEFnZ1N0YXRl ICphZ2dzdGF0ZSk7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRyaWV2ZV9kaXJlY3Qo QWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyB2b2lkIGFnZ19maWxsX2hhc2hfdGFibGUoQWdn U3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyBib29sIGFnZ19yZWZpbGxfaGFzaF90YWJsZShBZ2dT dGF0ZSAqYWdnc3RhdGUpOwogc3RhdGljIFR1cGxlVGFibGVTbG90ICphZ2dfcmV0cmlldmVfaGFz aF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIFR1cGxlVGFibGVTbG90ICphZ2df cmV0cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnkoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRp YyB2b2lkIGhhc2hfc3BpbGxfaW5pdChIYXNoQWdnU3BpbGwgKnNwaWxsLCBpbnQgaW5wdXRfYml0 cywKKwkJCQkJCQl1aW50NjQgaW5wdXRfdHVwbGVzLCBkb3VibGUgaGFzaGVudHJ5c2l6ZSk7Citz dGF0aWMgU2l6ZSBoYXNoX3NwaWxsX3R1cGxlKEhhc2hBZ2dTcGlsbCAqc3BpbGwsIGludCBpbnB1 dF9iaXRzLAorCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgdWludDMyIGhhc2gpOworc3Rh dGljIE1pbmltYWxUdXBsZSBoYXNoX3JlYWRfc3BpbGxlZChCdWZGaWxlICpmaWxlLCB1aW50MzIg Kmhhc2hwKTsKK3N0YXRpYyBIYXNoQWdnQmF0Y2ggKmhhc2hfYmF0Y2hfbmV3KEJ1ZkZpbGUgKmlu cHV0X2ZpbGUsIGludCBzZXRubywKKwkJCQkJCQkJCWludDY0IGlucHV0X3R1cGxlcywgaW50IGlu cHV0X2JpdHMpOworc3RhdGljIHZvaWQgaGFzaF9maW5pc2hfaW5pdGlhbF9zcGlsbHMoQWdnU3Rh dGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyB2b2lkIGhhc2hfc3BpbGxfZmluaXNoKEFnZ1N0YXRlICph Z2dzdGF0ZSwgSGFzaEFnZ1NwaWxsICpzcGlsbCwKKwkJCQkJCQkgIGludCBzZXRubywgaW50IGlu cHV0X2JpdHMpOworc3RhdGljIHZvaWQgaGFzaF9yZXNldF9zcGlsbChIYXNoQWdnU3BpbGwgKnNw aWxsKTsKK3N0YXRpYyB2b2lkIGhhc2hfcmVzZXRfc3BpbGxzKEFnZ1N0YXRlICphZ2dzdGF0ZSk7 CiBzdGF0aWMgRGF0dW0gR2V0QWdnSW5pdFZhbChEYXR1bSB0ZXh0SW5pdFZhbCwgT2lkIHRyYW5z dHlwZSk7CiBzdGF0aWMgdm9pZCBidWlsZF9wZXJ0cmFuc19mb3JfYWdncmVmKEFnZ1N0YXRlUGVy VHJhbnMgcGVydHJhbnMsCiAJCQkJCQkJCQkgIEFnZ1N0YXRlICphZ2dzdGF0ZSwgRVN0YXRlICpl c3RhdGUsCkBAIC0xMjAxLDYgKzEyOTEsNjggQEAgcHJvamVjdF9hZ2dyZWdhdGVzKEFnZ1N0YXRl ICphZ2dzdGF0ZSkKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGJvb2wKK2ZpbmRfYWdncmVn YXRlZF9jb2xzX3dhbGtlcihOb2RlICpub2RlLCBCaXRtYXBzZXQgKipjb2xub3MpCit7CisJaWYg KG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElzQShub2RlLCBWYXIpKQor CXsKKwkJVmFyCQkgICAqdmFyID0gKFZhciAqKSBub2RlOworCisJCSpjb2xub3MgPSBibXNfYWRk X21lbWJlcigqY29sbm9zLCB2YXItPnZhcmF0dG5vKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQor CXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5vZGUsIGZpbmRfYWdncmVnYXRlZF9jb2xz X3dhbGtlciwKKwkJCQkJCQkJICAodm9pZCAqKSBjb2xub3MpOworfQorCisvKgorICogZmluZF9h Z2dyZWdhdGVkX2NvbHMKKyAqCSAgQ29uc3RydWN0IGEgYml0bWFwc2V0IG9mIHRoZSBjb2x1bW4g bnVtYmVycyBvZiBhZ2dyZWdhdGVkIFZhcnMKKyAqCSAgYXBwZWFyaW5nIGluIG91ciB0YXJnZXRs aXN0IGFuZCBxdWFsIChIQVZJTkcgY2xhdXNlKQorICovCitzdGF0aWMgQml0bWFwc2V0ICoKK2Zp bmRfYWdncmVnYXRlZF9jb2xzKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlBZ2cJCSAgICpub2Rl ID0gKEFnZyAqKSBhZ2dzdGF0ZS0+c3MucHMucGxhbjsKKwlCaXRtYXBzZXQgICpjb2xub3MgPSBO VUxMOworCUxpc3RDZWxsICAgKnRlbXA7CisKKwkvKgorCSAqIFdlIG9ubHkgd2FudCB0aGUgY29s dW1ucyB1c2VkIGJ5IGFnZ3JlZ2F0aW9ucyBpbiB0aGUgdGFyZ2V0bGlzdCBvciBxdWFsCisJICov CisJaWYgKG5vZGUtPnBsYW4udGFyZ2V0bGlzdCAhPSBOVUxMKQorCXsKKwkJZm9yZWFjaCh0ZW1w LCAoTGlzdCAqKSBub2RlLT5wbGFuLnRhcmdldGxpc3QpCisJCXsKKwkJCWlmIChJc0EobGZpcnN0 KHRlbXApLCBUYXJnZXRFbnRyeSkpCisJCQl7CisJCQkJTm9kZSAqbm9kZSA9IChOb2RlICopKChU YXJnZXRFbnRyeSAqKWxmaXJzdCh0ZW1wKSktPmV4cHI7CisJCQkJaWYgKElzQShub2RlLCBBZ2dy ZWYpIHx8IElzQShub2RlLCBHcm91cGluZ0Z1bmMpKQorCQkJCQlmaW5kX2FnZ3JlZ2F0ZWRfY29s c193YWxrZXIobm9kZSwgJmNvbG5vcyk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobm9kZS0+cGxh bi5xdWFsICE9IE5VTEwpCisJeworCQlmb3JlYWNoKHRlbXAsIChMaXN0ICopIG5vZGUtPnBsYW4u cXVhbCkKKwkJeworCQkJaWYgKElzQShsZmlyc3QodGVtcCksIFRhcmdldEVudHJ5KSkKKwkJCXsK KwkJCQlOb2RlICpub2RlID0gKE5vZGUgKikoKFRhcmdldEVudHJ5ICopbGZpcnN0KHRlbXApKS0+ ZXhwcjsKKwkJCQlpZiAoSXNBKG5vZGUsIEFnZ3JlZikgfHwgSXNBKG5vZGUsIEdyb3VwaW5nRnVu YykpCisJCQkJCWZpbmRfYWdncmVnYXRlZF9jb2xzX3dhbGtlcihub2RlLCAmY29sbm9zKTsKKwkJ CX0KKwkJfQorCX0KKworCXJldHVybiBjb2xub3M7Cit9CisKIC8qCiAgKiBmaW5kX3VuYWdncmVn YXRlZF9jb2xzCiAgKgkgIENvbnN0cnVjdCBhIGJpdG1hcHNldCBvZiB0aGUgY29sdW1uIG51bWJl cnMgb2YgdW4tYWdncmVnYXRlZCBWYXJzCkBAIC0xMjU0LDQ2ICsxNDA2LDgwIEBAIGZpbmRfdW5h Z2dyZWdhdGVkX2NvbHNfd2Fsa2VyKE5vZGUgKm5vZGUsIEJpdG1hcHNldCAqKmNvbG5vcykKICAq IGZvciBlYWNoIGVudHJ5LgogICoKICAqIFdlIGhhdmUgYSBzZXBhcmF0ZSBoYXNodGFibGUgYW5k IGFzc29jaWF0ZWQgcGVyaGFzaCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaAotICogZ3JvdXBpbmcg c2V0IGZvciB3aGljaCB3ZSdyZSBkb2luZyBoYXNoaW5nLgorICogZ3JvdXBpbmcgc2V0IGZvciB3 aGljaCB3ZSdyZSBkb2luZyBoYXNoaW5nLiBJZiBzZXRubyBpcyAtMSwgYnVpbGQgaGFzaAorICog dGFibGVzIGZvciBhbGwgZ3JvdXBpbmcgc2V0cy4gT3RoZXJ3aXNlLCBidWlsZCBvbmx5IGZvciB0 aGUgc3BlY2lmaWVkCisgKiBncm91cGluZyBzZXQuCiAgKgogICogVGhlIGNvbnRlbnRzIG9mIHRo ZSBoYXNoIHRhYmxlcyBhbHdheXMgbGl2ZSBpbiB0aGUgaGFzaGNvbnRleHQncyBwZXItdHVwbGUK ICAqIG1lbW9yeSBjb250ZXh0ICh0aGVyZSBpcyBvbmx5IG9uZSBvZiB0aGVzZSBmb3IgYWxsIHRh YmxlcyB0b2dldGhlciwgc2luY2UKICAqIHRoZXkgYXJlIGFsbCByZXNldCBhdCB0aGUgc2FtZSB0 aW1lKS4KICAqLwogc3RhdGljIHZvaWQKLWJ1aWxkX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0 YXRlKQorYnVpbGRfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUsIGludCBzZXRubywgbG9u ZyBuZ3JvdXBzX2VzdGltYXRlKQogewotCU1lbW9yeUNvbnRleHQgdG1wbWVtID0gYWdnc3RhdGUt PnRtcGNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21lbW9yeTsKLQlTaXplCQlhZGRpdGlvbmFsc2l6 ZTsKLQlpbnQJCQlpOworCUFnZwkJCSAgICphZ2cgPSAoQWdnICopYWdnc3RhdGUtPnNzLnBzLnBs YW47CisJTWVtb3J5Q29udGV4dAl0bXBtZW0gPSBhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9w ZXJfdHVwbGVfbWVtb3J5OworCVNpemUgICAgICAgICAgICBhZGRpdGlvbmFsc2l6ZTsKKwlpbnQJ CQkJaTsKIAogCUFzc2VydChhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX0hBU0hFRCB8fCBh Z2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX01JWEVEKTsKIAotCWFkZGl0aW9uYWxzaXplID0g YWdnc3RhdGUtPm51bXRyYW5zICogc2l6ZW9mKEFnZ1N0YXRlUGVyR3JvdXBEYXRhKTsKKwlhZGRp dGlvbmFsc2l6ZSA9IGFnZ3N0YXRlLT5udW10cmFucyAqIHNpemVvZihBZ2dTdGF0ZVBlckdyb3Vw RGF0YSkgKworCQlhZ2ctPnRyYW5zU3BhY2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWdnc3RhdGUt Pm51bV9oYXNoZXM7ICsraSkKIAl7CiAJCUFnZ1N0YXRlUGVySGFzaCBwZXJoYXNoID0gJmFnZ3N0 YXRlLT5wZXJoYXNoW2ldOworCQlpbnQ2NAkJCW5ncm91cHM7CisJCWxvbmcJCQluYnVja2V0czsK KwkJU2l6ZQkJCW1lbW9yeTsKIAogCQlBc3NlcnQocGVyaGFzaC0+YWdnbm9kZS0+bnVtR3JvdXBz ID4gMCk7CiAKIAkJaWYgKHBlcmhhc2gtPmhhc2h0YWJsZSkKLQkJCVJlc2V0VHVwbGVIYXNoVGFi bGUocGVyaGFzaC0+aGFzaHRhYmxlKTsKLQkJZWxzZQotCQkJcGVyaGFzaC0+aGFzaHRhYmxlID0g QnVpbGRUdXBsZUhhc2hUYWJsZUV4dCgmYWdnc3RhdGUtPnNzLnBzLAotCQkJCQkJCQkJCQkJCQlw ZXJoYXNoLT5oYXNoc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvciwKLQkJCQkJCQkJCQkJCQkJcGVy aGFzaC0+bnVtQ29scywKLQkJCQkJCQkJCQkJCQkJcGVyaGFzaC0+aGFzaEdycENvbElkeEhhc2gs Ci0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmVxZnVuY29pZHMsCi0JCQkJCQkJCQkJCQkJCXBlcmhh c2gtPmhhc2hmdW5jdGlvbnMsCi0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmFnZ25vZGUtPmdycENv bGxhdGlvbnMsCi0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmFnZ25vZGUtPm51bUdyb3VwcywKLQkJ CQkJCQkJCQkJCQkJYWRkaXRpb25hbHNpemUsCi0JCQkJCQkJCQkJCQkJCWFnZ3N0YXRlLT5zcy5w cy5zdGF0ZS0+ZXNfcXVlcnlfY3h0LAotCQkJCQkJCQkJCQkJCQlhZ2dzdGF0ZS0+aGFzaGNvbnRl eHQtPmVjeHRfcGVyX3R1cGxlX21lbW9yeSwKLQkJCQkJCQkJCQkJCQkJdG1wbWVtLAotCQkJCQkJ CQkJCQkJCQlET19BR0dTUExJVF9TS0lQRklOQUwoYWdnc3RhdGUtPmFnZ3NwbGl0KSk7CisJCQlE ZXN0cm95VHVwbGVIYXNoVGFibGUocGVyaGFzaC0+aGFzaHRhYmxlKTsKKwkJcGVyaGFzaC0+aGFz aHRhYmxlID0gTlVMTDsKKworCQkvKgorCQkgKiBJZiB3ZSBhcmUgYnVpbGRpbmcgYSBoYXNoIHRh YmxlIGZvciBvbmx5IGEgc2luZ2xlIGdyb3VwaW5nIHNldCwKKwkJICogc2tpcCB0aGUgb3RoZXJz LgorCQkgKi8KKwkJaWYgKHNldG5vID49IDAgJiYgc2V0bm8gIT0gaSkKKwkJCWNvbnRpbnVlOwor CisJCS8qCisJCSAqIFVzZSBhbiBlc3RpbWF0ZSBmcm9tIGV4ZWN1dGlvbiB0aW1lIGlmIHdlIGhh dmUgaXQ7IG90aGVyd2lzZSBmYWxsCisJCSAqIGJhY2sgdG8gdGhlIHBsYW5uZXIgZXN0aW1hdGUu CisJCSAqLworCQluZ3JvdXBzID0gbmdyb3Vwc19lc3RpbWF0ZSA+IDAgPworCQkJbmdyb3Vwc19l c3RpbWF0ZSA6IHBlcmhhc2gtPmFnZ25vZGUtPm51bUdyb3VwczsKKworCQkvKiBkaXZpZGUgbWVt b3J5IGJ5IHRoZSBudW1iZXIgb2YgaGFzaCB0YWJsZXMgd2UgYXJlIGluaXRpYWxpemluZyAqLwor CQltZW1vcnkgPSAobG9uZyl3b3JrX21lbSAqIDEwMjRMIC8KKwkJCShzZXRubyA+PSAwID8gMSA6 IGFnZ3N0YXRlLT5udW1faGFzaGVzKTsKKworCQkvKiBjaG9vc2UgcmVhc29uYWJsZSBudW1iZXIg b2YgYnVja2V0cyBwZXIgaGFzaHRhYmxlICovCisJCW5idWNrZXRzID0gaGFzaF9jaG9vc2VfbnVt X2J1Y2tldHMoYWdnc3RhdGUsIG5ncm91cHMsIG1lbW9yeSk7CisKKwkJcGVyaGFzaC0+aGFzaHRh YmxlID0gQnVpbGRUdXBsZUhhc2hUYWJsZUV4dCgmYWdnc3RhdGUtPnNzLnBzLAorCQkJCQkJCQkJ CQkJCXBlcmhhc2gtPmhhc2hzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLAorCQkJCQkJCQkJCQkJ CXBlcmhhc2gtPm51bUNvbHMsCisJCQkJCQkJCQkJCQkJcGVyaGFzaC0+aGFzaEdycENvbElkeEhh c2gsCisJCQkJCQkJCQkJCQkJcGVyaGFzaC0+ZXFmdW5jb2lkcywKKwkJCQkJCQkJCQkJCQlwZXJo YXNoLT5oYXNoZnVuY3Rpb25zLAorCQkJCQkJCQkJCQkJCXBlcmhhc2gtPmFnZ25vZGUtPmdycENv bGxhdGlvbnMsCisJCQkJCQkJCQkJCQkJbmJ1Y2tldHMsCisJCQkJCQkJCQkJCQkJYWRkaXRpb25h bHNpemUsCisJCQkJCQkJCQkJCQkJYWdnc3RhdGUtPnNzLnBzLnN0YXRlLT5lc19xdWVyeV9jeHQs CisJCQkJCQkJCQkJCQkJYWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1v cnksCisJCQkJCQkJCQkJCQkJdG1wbWVtLAorCQkJCQkJCQkJCQkJCURPX0FHR1NQTElUX1NLSVBG SU5BTChhZ2dzdGF0ZS0+YWdnc3BsaXQpKTsKIAl9CisKKwlhZ2dzdGF0ZS0+aGFzaF9tZW1fY3Vy cmVudCA9IE1lbW9yeUNvbnRleHRNZW1BbGxvY2F0ZWQoCisJCWFnZ3N0YXRlLT5oYXNoY29udGV4 dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5LCB0cnVlKTsKKwlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBz X2N1cnJlbnQgPSAwOworCWFnZ3N0YXRlLT5oYXNoX25vX25ld19ncm91cHMgPSBmYWxzZTsKIH0K IAogLyoKQEAgLTEzMjUsNiArMTUxMSw3IEBAIHN0YXRpYyB2b2lkCiBmaW5kX2hhc2hfY29sdW1u cyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiB7CiAJQml0bWFwc2V0ICAqYmFzZV9jb2xub3M7CisJQml0 bWFwc2V0ICAqYWdncmVnYXRlZF9jb2xub3M7CiAJTGlzdAkgICAqb3V0ZXJUbGlzdCA9IG91dGVy UGxhblN0YXRlKGFnZ3N0YXRlKS0+cGxhbi0+dGFyZ2V0bGlzdDsKIAlpbnQJCQludW1IYXNoZXMg PSBhZ2dzdGF0ZS0+bnVtX2hhc2hlczsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IGFnZ3N0YXRlLT5z cy5wcy5zdGF0ZTsKQEAgLTEzMzIsMTEgKzE1MTksMTMgQEAgZmluZF9oYXNoX2NvbHVtbnMoQWdn U3RhdGUgKmFnZ3N0YXRlKQogCiAJLyogRmluZCBWYXJzIHRoYXQgd2lsbCBiZSBuZWVkZWQgaW4g dGxpc3QgYW5kIHF1YWwgKi8KIAliYXNlX2NvbG5vcyA9IGZpbmRfdW5hZ2dyZWdhdGVkX2NvbHMo YWdnc3RhdGUpOworCWFnZ3JlZ2F0ZWRfY29sbm9zID0gZmluZF9hZ2dyZWdhdGVkX2NvbHMoYWdn c3RhdGUpOwogCiAJZm9yIChqID0gMDsgaiA8IG51bUhhc2hlczsgKytqKQogCXsKIAkJQWdnU3Rh dGVQZXJIYXNoIHBlcmhhc2ggPSAmYWdnc3RhdGUtPnBlcmhhc2hbal07CiAJCUJpdG1hcHNldCAg KmNvbG5vcyA9IGJtc19jb3B5KGJhc2VfY29sbm9zKTsKKwkJQml0bWFwc2V0ICAqYWxsTmVlZGVk Q29sc0lucHV0OwogCQlBdHRyTnVtYmVyICpncnBDb2xJZHggPSBwZXJoYXNoLT5hZ2dub2RlLT5n cnBDb2xJZHg7CiAJCUxpc3QJICAgKmhhc2hUbGlzdCA9IE5JTDsKIAkJVHVwbGVEZXNjCWhhc2hE ZXNjOwpAQCAtMTM4Myw2ICsxNTcyLDE5IEBAIGZpbmRfaGFzaF9jb2x1bW5zKEFnZ1N0YXRlICph Z2dzdGF0ZSkKIAkJZm9yIChpID0gMDsgaSA8IHBlcmhhc2gtPm51bUNvbHM7IGkrKykKIAkJCWNv bG5vcyA9IGJtc19hZGRfbWVtYmVyKGNvbG5vcywgZ3JwQ29sSWR4W2ldKTsKIAorCQkvKgorCQkg KiBUcmFjayB0aGUgbmVjZXNzYXJ5IGNvbHVtbnMgZnJvbSB0aGUgaW5wdXQuIFRoaXMgaXMgaW1w b3J0YW50IGZvcgorCQkgKiBzcGlsbGluZyB0dXBsZXMgc28gdGhhdCB3ZSBkb24ndCB3YXN0ZSBk aXNrIHNwYWNlIHdpdGggdW5uZWVkZWQKKwkJICogY29sdW1ucy4KKwkJICovCisJCWFsbE5lZWRl ZENvbHNJbnB1dCA9IGJtc191bmlvbihjb2xub3MsIGFnZ3JlZ2F0ZWRfY29sbm9zKTsKKwkJcGVy aGFzaC0+bnVtTmVlZGVkQ29sc0lucHV0ID0gMDsKKwkJcGVyaGFzaC0+YWxsTmVlZGVkQ29sc0lu cHV0ID0gcGFsbG9jKAorCQkJYm1zX251bV9tZW1iZXJzKGFsbE5lZWRlZENvbHNJbnB1dCkgKiBz aXplb2YoQXR0ck51bWJlcikpOworCisJCXdoaWxlICgoaSA9IGJtc19maXJzdF9tZW1iZXIoYWxs TmVlZGVkQ29sc0lucHV0KSkgPj0gMCkKKwkJCXBlcmhhc2gtPmFsbE5lZWRlZENvbHNJbnB1dFtw ZXJoYXNoLT5udW1OZWVkZWRDb2xzSW5wdXQrK10gPSBpOworCiAJCS8qCiAJCSAqIEZpcnN0IGJ1 aWxkIG1hcHBpbmcgZm9yIGNvbHVtbnMgZGlyZWN0bHkgaGFzaGVkLiBUaGVzZSBhcmUgdGhlCiAJ CSAqIGZpcnN0LCBiZWNhdXNlIHRoZXknbGwgYmUgYWNjZXNzZWQgd2hlbiBjb21wdXRpbmcgaGFz aCB2YWx1ZXMgYW5kCkBAIC0xNDU1LDIyICsxNjU3LDE2IEBAIGhhc2hfYWdnX2VudHJ5X3NpemUo aW50IG51bUFnZ3MpCiB9CiAKIC8qCi0gKiBGaW5kIG9yIGNyZWF0ZSBhIGhhc2h0YWJsZSBlbnRy eSBmb3IgdGhlIHR1cGxlIGdyb3VwIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQKLSAqIHR1cGxlIChh bHJlYWR5IHNldCBpbiB0bXBjb250ZXh0J3Mgb3V0ZXJ0dXBsZSBzbG90KSwgaW4gdGhlIGN1cnJl bnQgZ3JvdXBpbmcKLSAqIHNldCAod2hpY2ggdGhlIGNhbGxlciBtdXN0IGhhdmUgc2VsZWN0ZWQg LSBub3RlIHRoYXQgaW5pdGlhbGl6ZV9hZ2dyZWdhdGUKLSAqIGRlcGVuZHMgb24gdGhpcykuCi0g KgotICogV2hlbiBjYWxsZWQsIEN1cnJlbnRNZW1vcnlDb250ZXh0IHNob3VsZCBiZSB0aGUgcGVy LXF1ZXJ5IGNvbnRleHQuCisgKiBFeHRyYWN0IHRoZSBhdHRyaWJ1dGVzIHRoYXQgbWFrZSB1cCB0 aGUgZ3JvdXBpbmcga2V5IGludG8gdGhlCisgKiBoYXNoc2xvdC4gVGhpcyBpcyBuZWNlc3Nhcnkg dG8gY29tcHV0ZSB0aGUgaGFzaCBvZiB0aGUgZ3JvdXBpbmcga2V5LgogICovCi1zdGF0aWMgVHVw bGVIYXNoRW50cnlEYXRhICoKLWxvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0YXRlICphZ2dzdGF0ZSkK K3N0YXRpYyB2b2lkCitwcmVwYXJlX2hhc2hfc2xvdChBZ2dTdGF0ZSAqYWdnc3RhdGUpCiB7Ci0J VHVwbGVUYWJsZVNsb3QgKmlucHV0c2xvdCA9IGFnZ3N0YXRlLT50bXBjb250ZXh0LT5lY3h0X291 dGVydHVwbGU7Ci0JQWdnU3RhdGVQZXJIYXNoIHBlcmhhc2ggPSAmYWdnc3RhdGUtPnBlcmhhc2hb YWdnc3RhdGUtPmN1cnJlbnRfc2V0XTsKLQlUdXBsZVRhYmxlU2xvdCAqaGFzaHNsb3QgPSBwZXJo YXNoLT5oYXNoc2xvdDsKLQlUdXBsZUhhc2hFbnRyeURhdGEgKmVudHJ5OwotCWJvb2wJCWlzbmV3 OwotCWludAkJCWk7CisJVHVwbGVUYWJsZVNsb3QJKmlucHV0c2xvdCA9IGFnZ3N0YXRlLT50bXBj b250ZXh0LT5lY3h0X291dGVydHVwbGU7CisJQWdnU3RhdGVQZXJIYXNoCSBwZXJoYXNoICAgPSAm YWdnc3RhdGUtPnBlcmhhc2hbYWdnc3RhdGUtPmN1cnJlbnRfc2V0XTsKKwlUdXBsZVRhYmxlU2xv dAkqaGFzaHNsb3QgID0gcGVyaGFzaC0+aGFzaHNsb3Q7CisJaW50CQkJCSBpOwogCiAJLyogdHJh bnNmZXIganVzdCB0aGUgbmVlZGVkIGNvbHVtbnMgaW50byBoYXNoc2xvdCAqLwogCXNsb3RfZ2V0 c29tZWF0dHJzKGlucHV0c2xvdCwgcGVyaGFzaC0+bGFyZ2VzdEdycENvbElkeCk7CkBAIC0xNDg0 LDE0ICsxNjgwLDE4NSBAQCBsb29rdXBfaGFzaF9lbnRyeShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJ CWhhc2hzbG90LT50dHNfaXNudWxsW2ldID0gaW5wdXRzbG90LT50dHNfaXNudWxsW3Zhck51bWJl cl07CiAJfQogCUV4ZWNTdG9yZVZpcnR1YWxUdXBsZShoYXNoc2xvdCk7Cit9CisKKy8qCisgKiBS ZWNvbXBpbGUgdGhlIGV4cHJlc3Npb25zIGZvciBhZHZhbmNpbmcgYWdncmVnYXRlcyB3aGlsZSBo YXNoaW5nLiBUaGlzIGlzCisgKiBuZWNlc3NhcnkgZm9yIGNlcnRhaW4ga2luZHMgb2Ygc3RhdGUg Y2hhbmdlcyB0aGF0IGFmZmVjdCB0aGUgcmVzdWx0aW5nCisgKiBleHByZXNzaW9uLiBGb3IgaW5z dGFuY2UsIGNoYW5naW5nIGFnZ3N0YXRlLT5oYXNoX3NwaWxsZWQgb3IKKyAqIGFnZ3N0YXRlLT5z cy5wcy5vdXRlcm9wcyByZXF1aXJlIHJlY29tcGlsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCito YXNoX3JlY29tcGlsZV9leHByZXNzaW9ucyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJQWdnU3Rh dGVQZXJQaGFzZSBwaGFzZTsKKworCUFzc2VydChhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdH X0hBU0hFRCB8fAorCQkgICBhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX01JWEVEKTsKKwor CWlmIChhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX0hBU0hFRCkKKwkJcGhhc2UgPSAmYWdn c3RhdGUtPnBoYXNlc1swXTsKKwllbHNlIC8qIEFHR19NSVhFRCAqLworCQlwaGFzZSA9ICZhZ2dz dGF0ZS0+cGhhc2VzWzFdOworCisJcGhhc2UtPmV2YWx0cmFucyA9IEV4ZWNCdWlsZEFnZ1RyYW5z KAorCQlhZ2dzdGF0ZSwgcGhhc2UsCisJCWFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9PSBBR0dfTUlY RUQgPyB0cnVlIDogZmFsc2UsIC8qIGRvc29ydCAqLworCQl0cnVlLCAvKiBkb2hhc2ggKi8KKwkJ YWdnc3RhdGUtPmhhc2hfc3BpbGxlZCAvKiBzcGlsbGVkICovKTsKK30KKworLyoKKyAqIENhbGN1 bGF0ZSB0aGUgaGFzaCB2YWx1ZSBmb3IgYSB0dXBsZS4gSXQncyB1c2VmdWwgdG8gZG8gdGhpcyBv dXRzaWRlIG9mIHRoZQorICogaGFzaCB0YWJsZSBzbyB0aGF0IHdlIGNhbiByZXVzZSBzYXZlZCBo YXNoIHZhbHVlcyByYXRoZXIgdGhhbiByZWNvbXB1dGluZy4KKyAqLworc3RhdGljIHVpbnQzMgor Y2FsY3VsYXRlX2hhc2goQWdnU3RhdGUgKmFnZ3N0YXRlKQoreworCUFnZ1N0YXRlUGVySGFzaAkg cGVyaGFzaCAgID0gJmFnZ3N0YXRlLT5wZXJoYXNoW2FnZ3N0YXRlLT5jdXJyZW50X3NldF07CisJ VHVwbGVIYXNoVGFibGUJIGhhc2h0YWJsZSA9IHBlcmhhc2gtPmhhc2h0YWJsZTsKKwlNZW1vcnlD b250ZXh0CSBvbGRDb250ZXh0OworCXVpbnQzMgkJCSBoYXNoOworCisJLyogc2V0IHVwIGRhdGEg bmVlZGVkIGJ5IGhhc2ggYW5kIG1hdGNoIGZ1bmN0aW9ucyAqLworCWhhc2h0YWJsZS0+aW5wdXRz bG90ID0gcGVyaGFzaC0+aGFzaHNsb3Q7CisJaGFzaHRhYmxlLT5pbl9oYXNoX2Z1bmNzID0gaGFz aHRhYmxlLT50YWJfaGFzaF9mdW5jczsKKwloYXNodGFibGUtPmN1cl9lcV9mdW5jID0gaGFzaHRh YmxlLT50YWJfZXFfZnVuYzsKKworCS8qIE5lZWQgdG8gcnVuIHRoZSBoYXNoIGZ1bmN0aW9ucyBp biBzaG9ydC1saXZlZCBjb250ZXh0ICovCisJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhoYXNodGFibGUtPnRlbXBjeHQpOworCisJaGFzaCA9IFR1cGxlSGFzaFRhYmxlSGFzaCho YXNodGFibGUtPmhhc2h0YWIsIE5VTEwpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENv bnRleHQpOworCisJcmV0dXJuIGhhc2g7Cit9CisKKy8qCisgKiBDaG9vc2UgYSByZWFzb25hYmxl IG51bWJlciBvZiBidWNrZXRzIGZvciB0aGUgaW5pdGlhbCBoYXNoIHRhYmxlIHNpemUuCisgKi8K K3N0YXRpYyBsb25nCitoYXNoX2Nob29zZV9udW1fYnVja2V0cyhBZ2dTdGF0ZSAqYWdnc3RhdGUs IGxvbmcgbmdyb3VwcywgU2l6ZSBtZW1vcnkpCit7CisJbG9uZwltYXhfbmJ1Y2tldHM7CisJaW50 CQlsb2cyX25ncm91cHM7CisJbG9uZwluYnVja2V0czsKKworCW1heF9uYnVja2V0cyA9IG1lbW9y eSAvIGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplOworCisJLyoKKwkgKiBMb3dlc3QgcG93ZXIgb2Yg dHdvIGdyZWF0ZXIgdGhhbiBuZ3JvdXBzLCB3aXRob3V0IGV4Y2VlZGluZworCSAqIG1heF9uYnVj a2V0cy4KKwkgKi8KKwlmb3IgKGxvZzJfbmdyb3VwcyA9IDEsIG5idWNrZXRzID0gMjsKKwkJIG5i dWNrZXRzIDwgbmdyb3VwcyAmJiBuYnVja2V0cyA8IG1heF9uYnVja2V0czsKKwkJIGxvZzJfbmdy b3VwcysrLCBuYnVja2V0cyA8PD0gMSk7CisKKwlpZiAobmJ1Y2tldHMgPiBtYXhfbmJ1Y2tldHMg JiYgbmJ1Y2tldHMgPiAyKQorCQluYnVja2V0cyA+Pj0gMTsKKworCXJldHVybiBuYnVja2V0czsK K30KKworLyoKKyAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgdG8gY3JlYXRl IHdoZW4gc3BpbGxpbmcuCisgKi8KK3N0YXRpYyBpbnQKK2hhc2hfY2hvb3NlX251bV9zcGlsbF9w YXJ0aXRpb25zKHVpbnQ2NCBpbnB1dF9ncm91cHMsIGRvdWJsZSBoYXNoZW50cnlzaXplKQorewor CVNpemUJbWVtX25lZWRlZDsKKwlpbnQJCXBhcnRpdGlvbl9saW1pdDsKKwlpbnQJCW5wYXJ0aXRp b25zOworCisJLyoKKwkgKiBBdm9pZCBjcmVhdGluZyBzbyBtYW55IHBhcnRpdGlvbnMgdGhhdCB0 aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBvZiB0aGUKKwkgKiBvcGVuIHBhcnRpdGlvbiBmaWxlcyAo ZXN0aW1hdGVkIGF0IEJMQ0tTWiBmb3IgYnVmZmVyaW5nKSBhcmUgZ3JlYXRlcgorCSAqIHRoYW4g MS80IG9mIHdvcmtfbWVtLgorCSAqLworCXBhcnRpdGlvbl9saW1pdCA9ICh3b3JrX21lbSAqIDEw MjRMICogMC4yNSkgLyBCTENLU1o7CisKKwkvKiBwZXNzaW1pc3RpY2FsbHkgZXN0aW1hdGUgdGhh dCBlYWNoIGlucHV0IHR1cGxlIGNyZWF0ZXMgYSBuZXcgZ3JvdXAgKi8KKwltZW1fbmVlZGVkID0g SEFTSF9QQVJUSVRJT05fRkFDVE9SICogaW5wdXRfZ3JvdXBzICogaGFzaGVudHJ5c2l6ZTsKKwor CS8qIG1ha2UgZW5vdWdoIHBhcnRpdGlvbnMgc28gdGhhdCBlYWNoIG9uZSBpcyBsaWtlbHkgdG8g Zml0IGluIG1lbW9yeSAqLworCW5wYXJ0aXRpb25zID0gMSArIChtZW1fbmVlZGVkIC8gKHdvcmtf bWVtICogMTAyNEwpKTsKKworCWlmIChucGFydGl0aW9ucyA+IHBhcnRpdGlvbl9saW1pdCkKKwkJ bnBhcnRpdGlvbnMgPSBwYXJ0aXRpb25fbGltaXQ7CisKKwlpZiAobnBhcnRpdGlvbnMgPCBIQVNI X01JTl9QQVJUSVRJT05TKQorCQlucGFydGl0aW9ucyA9IEhBU0hfTUlOX1BBUlRJVElPTlM7CisJ aWYgKG5wYXJ0aXRpb25zID4gSEFTSF9NQVhfUEFSVElUSU9OUykKKwkJbnBhcnRpdGlvbnMgPSBI QVNIX01BWF9QQVJUSVRJT05TOworCisJcmV0dXJuIG5wYXJ0aXRpb25zOworfQorCisvKgorICog RmluZCBvciBjcmVhdGUgYSBoYXNodGFibGUgZW50cnkgZm9yIHRoZSB0dXBsZSBncm91cCBjb250 YWluaW5nIHRoZSBjdXJyZW50CisgKiB0dXBsZSAoYWxyZWFkeSBzZXQgaW4gdG1wY29udGV4dCdz IG91dGVydHVwbGUgc2xvdCksIGluIHRoZSBjdXJyZW50IGdyb3VwaW5nCisgKiBzZXQgKHdoaWNo IHRoZSBjYWxsZXIgbXVzdCBoYXZlIHNlbGVjdGVkIC0gbm90ZSB0aGF0IGluaXRpYWxpemVfYWdn cmVnYXRlCisgKiBkZXBlbmRzIG9uIHRoaXMpLgorICoKKyAqIFdoZW4gY2FsbGVkLCBDdXJyZW50 TWVtb3J5Q29udGV4dCBzaG91bGQgYmUgdGhlIHBlci1xdWVyeSBjb250ZXh0LgorICoKKyAqIElm IHRoZSBoYXNoIHRhYmxlIGlzIGF0IHRoZSBtZW1vcnkgbGltaXQsIHRoZW4gb25seSBmaW5kIGV4 aXN0aW5nIGhhc2h0YWJsZQorICogZW50cmllczsgZG9uJ3QgY3JlYXRlIG5ldyBvbmVzLiBJZiBh IHR1cGxlJ3MgZ3JvdXAgaXMgbm90IGFscmVhZHkgcHJlc2VudAorICogaW4gdGhlIGhhc2ggdGFi bGUgZm9yIHRoZSBjdXJyZW50IGdyb3VwaW5nIHNldCwgcmV0dXJuIE5VTEwgYW5kIHRoZSBjYWxs ZXIKKyAqIHdpbGwgc3BpbGwgaXQgdG8gZGlzay4KKyAqLworc3RhdGljIEFnZ1N0YXRlUGVyR3Jv dXAKK2xvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0YXRlICphZ2dzdGF0ZSwgdWludDMyIGhhc2gpCit7 CisJQWdnU3RhdGVQZXJIYXNoIHBlcmhhc2ggPSAmYWdnc3RhdGUtPnBlcmhhc2hbYWdnc3RhdGUt PmN1cnJlbnRfc2V0XTsKKwlUdXBsZVRhYmxlU2xvdCAqaGFzaHNsb3QgPSBwZXJoYXNoLT5oYXNo c2xvdDsKKwlUdXBsZUhhc2hFbnRyeURhdGEgKmVudHJ5OworCWJvb2wJCWlzbmV3ID0gZmFsc2U7 CisJYm9vbAkgICAqcF9pc25ldzsKKworCS8qIGlmIGhhc2ggdGFibGUgYWxyZWFkeSBzcGlsbGVk LCBkb24ndCBjcmVhdGUgbmV3IGVudHJpZXMgKi8KKwlwX2lzbmV3ID0gYWdnc3RhdGUtPmhhc2hf bm9fbmV3X2dyb3VwcyA/IE5VTEwgOiAmaXNuZXc7CiAKIAkvKiBmaW5kIG9yIGNyZWF0ZSB0aGUg aGFzaHRhYmxlIGVudHJ5IHVzaW5nIHRoZSBmaWx0ZXJlZCB0dXBsZSAqLwotCWVudHJ5ID0gTG9v a3VwVHVwbGVIYXNoRW50cnkocGVyaGFzaC0+aGFzaHRhYmxlLCBoYXNoc2xvdCwgJmlzbmV3KTsK KwllbnRyeSA9IExvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaChwZXJoYXNoLT5oYXNodGFibGUsIGhh c2hzbG90LCBwX2lzbmV3LAorCQkJCQkJCQkJIGhhc2gpOworCisJaWYgKGVudHJ5ID09IE5VTEwp CisJCXJldHVybiBOVUxMOwogCiAJaWYgKGlzbmV3KQogCXsKLQkJQWdnU3RhdGVQZXJHcm91cCBw ZXJncm91cDsKLQkJaW50CQkJdHJhbnNubzsKKwkJQWdnU3RhdGVQZXJHcm91cAlwZXJncm91cDsK KwkJaW50CQkJCQl0cmFuc25vOworCisJCWFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCsr OworCisJCWFnZ3N0YXRlLT5oYXNoX21lbV9jdXJyZW50ID0gTWVtb3J5Q29udGV4dE1lbUFsbG9j YXRlZCgKKwkJCWFnZ3N0YXRlLT5oYXNoY29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5LCB0 cnVlKTsKKworCQlpZiAoYWdnc3RhdGUtPmhhc2hfbWVtX2N1cnJlbnQgPiBhZ2dzdGF0ZS0+aGFz aF9tZW1fcGVhaykKKwkJCWFnZ3N0YXRlLT5oYXNoX21lbV9wZWFrID0gYWdnc3RhdGUtPmhhc2hf bWVtX2N1cnJlbnQ7CisKKwkJLyoKKwkJICogQ2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIHNwaWxs LiBGb3Igc21hbGwgdmFsdWVzIG9mIHdvcmtfbWVtLCB0aGUKKwkJICogZW1wdHkgaGFzaCB0YWJs ZXMgbWlnaHQgZXhjZWVkIGl0OyBzbyBkb24ndCBzcGlsbCB1bmxlc3MgdGhlcmUncyBhdAorCQkg KiBsZWFzdCBvbmUgZ3JvdXAgaW4gdGhlIGhhc2ggdGFibGUuCisJCSAqLworCQlpZiAoYWdnc3Rh dGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50ID4gMCAmJgorCQkJKGFnZ3N0YXRlLT5oYXNoX21lbV9j dXJyZW50ICAgICA+IGFnZ3N0YXRlLT5oYXNoX21lbV9saW1pdCB8fAorCQkJIGFnZ3N0YXRlLT5o YXNoX25ncm91cHNfY3VycmVudCA+IGFnZ3N0YXRlLT5oYXNoX25ncm91cHNfbGltaXQpKQorCQl7 CisJCQlhZ2dzdGF0ZS0+aGFzaF9ub19uZXdfZ3JvdXBzID0gdHJ1ZTsKKwkJCWlmICghYWdnc3Rh dGUtPmhhc2hfc3BpbGxlZCkKKwkJCXsKKwkJCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbGVkID0gdHJ1 ZTsKKwkJCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgPSBwYWxsb2MwKAorCQkJCQlzaXplb2YoSGFz aEFnZ1NwaWxsKSAqIGFnZ3N0YXRlLT5udW1faGFzaGVzKTsKKworCQkJCWhhc2hfcmVjb21waWxl X2V4cHJlc3Npb25zKGFnZ3N0YXRlKTsKKwkJCX0KKwkJfQogCiAJCXBlcmdyb3VwID0gKEFnZ1N0 YXRlUGVyR3JvdXApCiAJCQlNZW1vcnlDb250ZXh0QWxsb2MocGVyaGFzaC0+aGFzaHRhYmxlLT50 YWJsZWN4dCwKQEAgLTE1MTEsNyArMTg3OCw3IEBAIGxvb2t1cF9oYXNoX2VudHJ5KEFnZ1N0YXRl ICphZ2dzdGF0ZSkKIAkJfQogCX0KIAotCXJldHVybiBlbnRyeTsKKwlyZXR1cm4gZW50cnktPmFk ZGl0aW9uYWw7CiB9CiAKIC8qCkBAIC0xNTE5LDE4ICsxODg2LDc0IEBAIGxvb2t1cF9oYXNoX2Vu dHJ5KEFnZ1N0YXRlICphZ2dzdGF0ZSkKICAqIHJldHVybmluZyBhbiBhcnJheSBvZiBwZXJncm91 cCBwb2ludGVycyBzdWl0YWJsZSBmb3IgYWR2YW5jZV9hZ2dyZWdhdGVzLgogICoKICAqIEJlIGF3 YXJlIHRoYXQgbG9va3VwX2hhc2hfZW50cnkgY2FuIHJlc2V0IHRoZSB0bXBjb250ZXh0LgorICoK KyAqIFNvbWUgZW50cmllcyBtYXkgYmUgbGVmdCBOVUxMIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUg bGltaXQgYW5kIGhhdmUgYmVndW4KKyAqIHRvIHNwaWxsLiBUaGUgc2FtZSB0dXBsZSB3aWxsIGJl bG9uZyB0byBkaWZmZXJlbnQgZ3JvdXBzIGZvciBlYWNoIHNldCwgc28KKyAqIG1heSBtYXRjaCBh IGdyb3VwIGFscmVhZHkgaW4gbWVtb3J5IGZvciBvbmUgc2V0IGFuZCBtYXRjaCBhIGdyb3VwIG5v dCBpbgorICogbWVtb3J5IGZvciBhbm90aGVyIHNldC4gSWYgd2UgaGF2ZSBiZWd1biB0byBzcGls bCBhbmQgYSB0dXBsZSBkb2Vzbid0IG1hdGNoCisgKiBhIGdyb3VwIGluIG1lbW9yeSBmb3IgYSBw YXJ0aWN1bGFyIHNldCwgaXQgd2lsbCBiZSBzcGlsbGVkLgorICoKKyAqIE5COiBJdCdzIHBvc3Np YmxlIHRvIHNwaWxsIHRoZSBzYW1lIHR1cGxlIGZvciBzZXZlcmFsIGRpZmZlcmVudCBncm91cGlu ZworICogc2V0cy4gVGhpcyBtYXkgc2VlbSB3YXN0ZWZ1bCwgYnV0IGl0J3MgYWN0dWFsbHkgYSB0 cmFkZS1vZmY6IGlmIHdlIHNwaWxsCisgKiB0aGUgdHVwbGUgbXVsdGlwbGUgdGltZXMgZm9yIG11 bHRpcGxlIGdyb3VwaW5nIHNldHMsIGl0IGNhbiBiZSBwYXJ0aXRpb25lZAorICogZm9yIGVhY2gg Z3JvdXBpbmcgc2V0LCBtYWtpbmcgdGhlIHJlZmlsbGluZyBvZiB0aGUgaGFzaCB0YWJsZSB2ZXJ5 CisgKiBlZmZpY2llbnQuCiAgKi8KIHN0YXRpYyB2b2lkCiBsb29rdXBfaGFzaF9lbnRyaWVzKEFn Z1N0YXRlICphZ2dzdGF0ZSkKIHsKLQlpbnQJCQludW1IYXNoZXMgPSBhZ2dzdGF0ZS0+bnVtX2hh c2hlczsKIAlBZ2dTdGF0ZVBlckdyb3VwICpwZXJncm91cCA9IGFnZ3N0YXRlLT5oYXNoX3Blcmdy b3VwOwogCWludAkJCXNldG5vOwogCi0JZm9yIChzZXRubyA9IDA7IHNldG5vIDwgbnVtSGFzaGVz OyBzZXRubysrKQorCWZvciAoc2V0bm8gPSAwOyBzZXRubyA8IGFnZ3N0YXRlLT5udW1faGFzaGVz OyBzZXRubysrKQogCXsKKwkJdWludDMyCQkJaGFzaDsKKwogCQlzZWxlY3RfY3VycmVudF9zZXQo YWdnc3RhdGUsIHNldG5vLCB0cnVlKTsKLQkJcGVyZ3JvdXBbc2V0bm9dID0gbG9va3VwX2hhc2hf ZW50cnkoYWdnc3RhdGUpLT5hZGRpdGlvbmFsOworCQlwcmVwYXJlX2hhc2hfc2xvdChhZ2dzdGF0 ZSk7CisJCWhhc2ggPSBjYWxjdWxhdGVfaGFzaChhZ2dzdGF0ZSk7CisJCXBlcmdyb3VwW3NldG5v XSA9IGxvb2t1cF9oYXNoX2VudHJ5KGFnZ3N0YXRlLCBoYXNoKTsKKworCQkvKiBjaGVjayB0byBz ZWUgaWYgd2UgbmVlZCB0byBzcGlsbCB0aGUgdHVwbGUgZm9yIHRoaXMgZ3JvdXBpbmcgc2V0ICov CisJCWlmIChwZXJncm91cFtzZXRub10gPT0gTlVMTCkKKwkJeworCQkJQWdnU3RhdGVQZXJIYXNo IHBlcmhhc2ggPSAmYWdnc3RhdGUtPnBlcmhhc2hbc2V0bm9dOworCQkJVHVwbGVUYWJsZVNsb3Qg KmlucHV0c2xvdCA9IGFnZ3N0YXRlLT50bXBjb250ZXh0LT5lY3h0X291dGVydHVwbGU7CisJCQlU dXBsZVRhYmxlU2xvdCAqc3BpbGxzbG90ID0gYWdnc3RhdGUtPmhhc2hfc3BpbGxfc2xvdDsKKwkJ CUhhc2hBZ2dTcGlsbCAgICpzcGlsbCA9ICZhZ2dzdGF0ZS0+aGFzaF9zcGlsbHNbc2V0bm9dOwor CQkJaW50CQkJCWlkeDsKKworCQkJaWYgKHNwaWxsLT5wYXJ0aXRpb25zID09IE5VTEwpCisJCQkJ aGFzaF9zcGlsbF9pbml0KHNwaWxsLCAwLCBwZXJoYXNoLT5hZ2dub2RlLT5udW1Hcm91cHMsCisJ CQkJCQkJCWFnZ3N0YXRlLT5oYXNoZW50cnlzaXplKTsKKworCQkJLyoKKwkJCSAqIENvcHkgb25s eSBuZWNlc3NhcnkgYXR0cmlidXRlcyB0byBzcGlsbCBzbG90IGJlZm9yZSB3cml0aW5nIHRvCisJ CQkgKiBkaXNrLgorCQkJICovCisJCQlFeGVjQ2xlYXJUdXBsZShzcGlsbHNsb3QpOworCQkJbWVt c2V0KHNwaWxsc2xvdC0+dHRzX2lzbnVsbCwgdHJ1ZSwKKwkJCQkgICBzcGlsbHNsb3QtPnR0c190 dXBsZURlc2NyaXB0b3ItPm5hdHRzKTsKKworCQkJLyogZGVzZXJpYWxpemUgbmVlZGVkIGF0dHJp YnV0ZXMgKi8KKwkJCWlmIChwZXJoYXNoLT5udW1OZWVkZWRDb2xzSW5wdXQgPiAwKQorCQkJewor CQkJCWludCBtYXhOZWVkZWRBdHRySWR4ID0gcGVyaGFzaC0+bnVtTmVlZGVkQ29sc0lucHV0IC0g MTsKKwkJCQlBdHRyTnVtYmVyIG1heE5lZWRlZEF0dHIgPQorCQkJCQlwZXJoYXNoLT5hbGxOZWVk ZWRDb2xzSW5wdXRbbWF4TmVlZGVkQXR0cklkeF07CisJCQkJc2xvdF9nZXRzb21lYXR0cnMoaW5w dXRzbG90LCBtYXhOZWVkZWRBdHRyKTsKKwkJCX0KKworCQkJZm9yIChpZHggPSAwOyBpZHggPCBw ZXJoYXNoLT5udW1OZWVkZWRDb2xzSW5wdXQ7IGlkeCsrKQorCQkJeworCQkJCUF0dHJOdW1iZXIg YXR0ID0gcGVyaGFzaC0+YWxsTmVlZGVkQ29sc0lucHV0W2lkeF07CisJCQkJc3BpbGxzbG90LT50 dHNfdmFsdWVzW2F0dC0xXSA9IGlucHV0c2xvdC0+dHRzX3ZhbHVlc1thdHQtMV07CisJCQkJc3Bp bGxzbG90LT50dHNfaXNudWxsW2F0dC0xXSA9IGlucHV0c2xvdC0+dHRzX2lzbnVsbFthdHQtMV07 CisJCQl9CisKKwkJCUV4ZWNTdG9yZVZpcnR1YWxUdXBsZShzcGlsbHNsb3QpOworCQkJYWdnc3Rh dGUtPmhhc2hfZGlza191c2VkICs9IGhhc2hfc3BpbGxfdHVwbGUoc3BpbGwsIDAsIHNwaWxsc2xv dCwgaGFzaCk7CisJCX0KIAl9CiB9CiAKQEAgLTE4NTMsNiArMjI3NiwxMiBAQCBhZ2dfcmV0cmll dmVfZGlyZWN0KEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJCQkJaWYgKFR1cElzTnVsbChvdXRlcnNs b3QpKQogCQkJCQl7CiAJCQkJCQkvKiBubyBtb3JlIG91dGVyLXBsYW4gdHVwbGVzIGF2YWlsYWJs ZSAqLworCisJCQkJCQkvKiBpZiB3ZSBidWlsdCBoYXNoIHRhYmxlcywgZmluYWxpemUgYW55IHNw aWxscyAqLworCQkJCQkJaWYgKGFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9PSBBR0dfTUlYRUQgJiYK KwkJCQkJCQlhZ2dzdGF0ZS0+Y3VycmVudF9waGFzZSA9PSAxKQorCQkJCQkJCWhhc2hfZmluaXNo X2luaXRpYWxfc3BpbGxzKGFnZ3N0YXRlKTsKKwogCQkJCQkJaWYgKGhhc0dyb3VwaW5nU2V0cykK IAkJCQkJCXsKIAkJCQkJCQlhZ2dzdGF0ZS0+aW5wdXRfZG9uZSA9IHRydWU7CkBAIC0xOTU1LDYg KzIzODQsOSBAQCBhZ2dfZmlsbF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJUmVz ZXRFeHByQ29udGV4dChhZ2dzdGF0ZS0+dG1wY29udGV4dCk7CiAJfQogCisJLyogZmluYWxpemUg c3BpbGxzLCBpZiBhbnkgKi8KKwloYXNoX2ZpbmlzaF9pbml0aWFsX3NwaWxscyhhZ2dzdGF0ZSk7 CisKIAlhZ2dzdGF0ZS0+dGFibGVfZmlsbGVkID0gdHJ1ZTsKIAkvKiBJbml0aWFsaXplIHRvIHdh bGsgdGhlIGZpcnN0IGhhc2ggdGFibGUgKi8KIAlzZWxlY3RfY3VycmVudF9zZXQoYWdnc3RhdGUs IDAsIHRydWUpOwpAQCAtMTk2MiwxMSArMjM5NCwxNzUgQEAgYWdnX2ZpbGxfaGFzaF90YWJsZShB Z2dTdGF0ZSAqYWdnc3RhdGUpCiAJCQkJCQkgICAmYWdnc3RhdGUtPnBlcmhhc2hbMF0uaGFzaGl0 ZXIpOwogfQogCisvKgorICogSWYgYW55IGRhdGEgd2FzIHNwaWxsZWQgZHVyaW5nIGhhc2ggYWdn cmVnYXRpb24sIHJlc2V0IHRoZSBoYXNoIHRhYmxlIGFuZAorICogcmVwcm9jZXNzIG9uZSBiYXRj aCBvZiBzcGlsbGVkIGRhdGEuIEFmdGVyIHJlcHJvY2Vzc2luZyBhIGJhdGNoLCB0aGUgaGFzaAor ICogdGFibGUgd2lsbCBhZ2FpbiBjb250YWluIGRhdGEsIHJlYWR5IHRvIGJlIGNvbnN1bWVkIGJ5 CisgKiBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnkoKS4KKyAqCisgKiBTaG91bGQg b25seSBiZSBjYWxsZWQgYWZ0ZXIgYWxsIGluIG1lbW9yeSBoYXNoIHRhYmxlIGVudHJpZXMgaGF2 ZSBiZWVuCisgKiBjb25zdW1lZC4KKyAqCisgKiBSZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBl eGhhdXN0ZWQgYW5kIHRoZXJlJ3Mgbm8gbW9yZSB3b3JrIHRvIGJlIGRvbmU7CisgKiBvdGhlcndp c2UgcmV0dXJuIHRydWUuCisgKi8KK3N0YXRpYyBib29sCithZ2dfcmVmaWxsX2hhc2hfdGFibGUo QWdnU3RhdGUgKmFnZ3N0YXRlKQoreworCUhhc2hBZ2dCYXRjaAkqYmF0Y2g7CisKKwlpZiAoYWdn c3RhdGUtPmhhc2hfYmF0Y2hlcyA9PSBOSUwpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICog RWFjaCBzcGlsbCBmaWxlIGNvbnRhaW5zIHNwaWxsZWQgZGF0YSBmb3Igb25seSBhIHNpbmdsZSBn cm91cGluZworCSAqIHNldC4gV2Ugd2FudCB0byBpZ25vcmUgYWxsIG90aGVycywgd2hpY2ggaXMg ZG9uZSBieSBzZXR0aW5nIHRoZSBvdGhlcgorCSAqIHBlcmdyb3VwcyB0byBOVUxMLgorCSAqLwor CW1lbXNldChhZ2dzdGF0ZS0+YWxsX3Blcmdyb3VwcywgMCwKKwkJICAgc2l6ZW9mKEFnZ1N0YXRl UGVyR3JvdXApICoKKwkJICAgKGFnZ3N0YXRlLT5tYXhzZXRzICsgYWdnc3RhdGUtPm51bV9oYXNo ZXMpKTsKKworCWJhdGNoID0gbGluaXRpYWwoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisJYWdn c3RhdGUtPmhhc2hfYmF0Y2hlcyA9IGxpc3RfZGVsZXRlX2ZpcnN0KGFnZ3N0YXRlLT5oYXNoX2Jh dGNoZXMpOworCisJLyoKKwkgKiBGcmVlIG1lbW9yeSBhbmQgcmVidWlsZCBhIHNpbmdsZSBoYXNo IHRhYmxlIGZvciB0aGlzIGJhdGNoJ3MgZ3JvdXBpbmcKKwkgKiBzZXQuCisJICovCisJUmVTY2Fu RXhwckNvbnRleHQoYWdnc3RhdGUtPmhhc2hjb250ZXh0KTsKKworCS8qIGVzdGltYXRlIHRoZSBu dW1iZXIgb2YgZ3JvdXBzIHRvIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgdHVwbGVzICovCisJYnVp bGRfaGFzaF90YWJsZShhZ2dzdGF0ZSwgYmF0Y2gtPnNldG5vLCBiYXRjaC0+aW5wdXRfdHVwbGVz KTsKKworCUFzc2VydChhZ2dzdGF0ZS0+Y3VycmVudF9waGFzZSA9PSAwKTsKKworCWlmIChhZ2dz dGF0ZS0+cGhhc2UtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCkKKwl7CisJCWFnZ3N0YXRlLT5j dXJyZW50X3BoYXNlID0gMTsKKwkJYWdnc3RhdGUtPnBoYXNlID0gJmFnZ3N0YXRlLT5waGFzZXNb YWdnc3RhdGUtPmN1cnJlbnRfcGhhc2VdOworCX0KKworCS8qCisJICogVGhlIGZpcnN0IHBhc3Mg KGFnZ19maWxsX2hhc2hfdGFibGUpIHJlYWRzIHdoYXRldmVyIGtpbmQgb2Ygc2xvdCBjb21lcwor CSAqIGZyb20gdGhlIG91dGVyIHBsYW4sIGFuZCBjb25zaWRlcnMgdGhlIHNsb3QgZml4ZWQuIEJ1 dCBzcGlsbGVkIHR1cGxlcworCSAqIGFyZSBhbHdheXMgTWluaW1hbFR1cGxlcywgc28gaWYgdGhh dCdzIGRpZmZlcmVudCBmcm9tIHRoZSBvdXRlciBwbGFuIHdlCisJICogbmVlZCB0byBjaGFuZ2Ug aXQgYW5kIHJlY29tcGlsZSB0aGUgYWdncmVnYXRlIGV4cHJlc3Npb25zLgorCSAqLworCWlmIChh Z2dzdGF0ZS0+c3MucHMub3V0ZXJvcHMgIT0gJlRUU09wc01pbmltYWxUdXBsZSkKKwl7CisJCWFn Z3N0YXRlLT5zcy5wcy5vdXRlcm9wcyA9ICZUVFNPcHNNaW5pbWFsVHVwbGU7CisJCWhhc2hfcmVj b21waWxlX2V4cHJlc3Npb25zKGFnZ3N0YXRlKTsKKwl9CisKKwlmb3IgKDs7KSB7CisJCVR1cGxl VGFibGVTbG90CSpzbG90ID0gYWdnc3RhdGUtPmhhc2hfc3BpbGxfc2xvdDsKKwkJTWluaW1hbFR1 cGxlCSB0dXBsZTsKKwkJdWludDMyCQkJIGhhc2g7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKworCQl0dXBsZSA9IGhhc2hfcmVhZF9zcGlsbGVkKGJhdGNoLT5pbnB1dF9maWxlLCAmaGFz aCk7CisJCWlmICh0dXBsZSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJRXhlY1N0b3JlTWluaW1h bFR1cGxlKHR1cGxlLCBzbG90LCB0cnVlKTsKKwkJYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRf b3V0ZXJ0dXBsZSA9IHNsb3Q7CisKKwkJc2VsZWN0X2N1cnJlbnRfc2V0KGFnZ3N0YXRlLCBiYXRj aC0+c2V0bm8sIHRydWUpOworCQlwcmVwYXJlX2hhc2hfc2xvdChhZ2dzdGF0ZSk7CisJCWFnZ3N0 YXRlLT5oYXNoX3Blcmdyb3VwW2JhdGNoLT5zZXRub10gPSBsb29rdXBfaGFzaF9lbnRyeShhZ2dz dGF0ZSwgaGFzaCk7CisKKwkJLyogaWYgdGhlcmUncyBubyBtZW1vcnkgZm9yIGEgbmV3IGdyb3Vw LCBzcGlsbCAqLworCQlpZiAoYWdnc3RhdGUtPmhhc2hfcGVyZ3JvdXBbYmF0Y2gtPnNldG5vXSA9 PSBOVUxMKQorCQl7CisJCQlpZiAoYmF0Y2gtPnNwaWxsLnBhcnRpdGlvbnMgPT0gTlVMTCkKKwkJ CXsKKwkJCQkvKgorCQkJCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZ3JvdXBzIGZvciB0aGlz IGJhdGNoIGFzIHRoZSB0b3RhbAorCQkJCSAqIG51bWJlciBvZiB0dXBsZXMgaW4gaXRzIGlucHV0 IGZpbGUuIEFsdGhvdWdoIHRoYXQncyBhIHdvcnN0CisJCQkJICogY2FzZSwgaXQncyBub3QgYmFk IGhlcmUgZm9yIHR3byByZWFzb25zOiAoMSkgb3ZlcmVzdGltYXRpbmcKKwkJCQkgKiBpcyBiZXR0 ZXIgdGhhbiB1bmRlcmVzdGltYXRpbmc7IGFuZCAoMikgd2UndmUgYWxyZWFkeQorCQkJCSAqIHNj YW5uZWQgdGhlIHJlbGF0aW9uIG9uY2UsIHNvIGl0J3MgbGlrZWx5IHRoYXQgd2UndmUKKwkJCQkg KiBhbHJlYWR5IGZpbmFsaXplZCBtYW55IG9mIHRoZSBjb21tb24gdmFsdWVzLgorCQkJCSAqLwor CQkJCWhhc2hfc3BpbGxfaW5pdCgmYmF0Y2gtPnNwaWxsLCBiYXRjaC0+aW5wdXRfYml0cywKKwkJ CQkJCQkJYmF0Y2gtPmlucHV0X3R1cGxlcywgYWdnc3RhdGUtPmhhc2hlbnRyeXNpemUpOworCQkJ fQorCisJCQlhZ2dzdGF0ZS0+aGFzaF9kaXNrX3VzZWQgKz0gaGFzaF9zcGlsbF90dXBsZSgKKwkJ CQkmYmF0Y2gtPnNwaWxsLCBiYXRjaC0+aW5wdXRfYml0cywgc2xvdCwgaGFzaCk7CisJCX0KKwor CQkvKiBBZHZhbmNlIHRoZSBhZ2dyZWdhdGVzIChvciBjb21iaW5lIGZ1bmN0aW9ucykgKi8KKwkJ YWR2YW5jZV9hZ2dyZWdhdGVzKGFnZ3N0YXRlKTsKKworCQkvKgorCQkgKiBSZXNldCBwZXItaW5w dXQtdHVwbGUgY29udGV4dCBhZnRlciBlYWNoIHR1cGxlLCBidXQgbm90ZSB0aGF0IHRoZQorCQkg KiBoYXNoIGxvb2t1cHMgZG8gdGhpcyB0b28KKwkJICovCisJCVJlc2V0RXhwckNvbnRleHQoYWdn c3RhdGUtPnRtcGNvbnRleHQpOworCX0KKworCUJ1ZkZpbGVDbG9zZShiYXRjaC0+aW5wdXRfZmls ZSk7CisKKwlhZ2dzdGF0ZS0+Y3VycmVudF9waGFzZSA9IDA7CisJYWdnc3RhdGUtPnBoYXNlID0g JmFnZ3N0YXRlLT5waGFzZXNbYWdnc3RhdGUtPmN1cnJlbnRfcGhhc2VdOworCisJLyogdXBkYXRl IGhhc2hlbnRyeXNpemUgZXN0aW1hdGUgYmFzZWQgb24gY29udGVudHMgKi8KKwlpZiAoYWdnc3Rh dGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50ID4gMCkKKwl7CisJCWFnZ3N0YXRlLT5oYXNoZW50cnlz aXplID0gKGRvdWJsZSlhZ2dzdGF0ZS0+aGFzaF9tZW1fY3VycmVudCAvCisJCQkoZG91YmxlKWFn Z3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudDsKKwl9CisKKwloYXNoX3NwaWxsX2ZpbmlzaChh Z2dzdGF0ZSwgJmJhdGNoLT5zcGlsbCwgYmF0Y2gtPnNldG5vLAorCQkJCQkgIGJhdGNoLT5pbnB1 dF9iaXRzKTsKKworCXBmcmVlKGJhdGNoKTsKKworCS8qIEluaXRpYWxpemUgdG8gd2FsayB0aGUg Zmlyc3QgaGFzaCB0YWJsZSAqLworCXNlbGVjdF9jdXJyZW50X3NldChhZ2dzdGF0ZSwgMCwgdHJ1 ZSk7CisJUmVzZXRUdXBsZUhhc2hJdGVyYXRvcihhZ2dzdGF0ZS0+cGVyaGFzaFswXS5oYXNodGFi bGUsCisJCQkJCQkgICAmYWdnc3RhdGUtPnBlcmhhc2hbMF0uaGFzaGl0ZXIpOworCisJcmV0dXJu IHRydWU7Cit9CisKIC8qCiAgKiBFeGVjQWdnIGZvciBoYXNoZWQgY2FzZTogcmV0cmlldmluZyBn cm91cHMgZnJvbSBoYXNoIHRhYmxlCisgKgorICogQWZ0ZXIgZXhoYXVzdGluZyBpbi1tZW1vcnkg dHVwbGVzLCBhbHNvIHRyeSByZWZpbGxpbmcgdGhlIGhhc2ggdGFibGUgdXNpbmcKKyAqIHByZXZp b3VzbHktc3BpbGxlZCB0dXBsZXMuIE9ubHkgcmV0dXJucyBOVUxMIGFmdGVyIGFsbCBpbi1tZW1v cnkgYW5kCisgKiBzcGlsbGVkIHR1cGxlcyBhcmUgZXhoYXVzdGVkLgogICovCiBzdGF0aWMgVHVw bGVUYWJsZVNsb3QgKgogYWdnX3JldHJpZXZlX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRl KQoreworCVR1cGxlVGFibGVTbG90ICpyZXN1bHQgPSBOVUxMOworCisJd2hpbGUgKHJlc3VsdCA9 PSBOVUxMKQorCXsKKwkJcmVzdWx0ID0gYWdnX3JldHJpZXZlX2hhc2hfdGFibGVfaW5fbWVtb3J5 KGFnZ3N0YXRlKTsKKwkJaWYgKHJlc3VsdCA9PSBOVUxMKQorCQl7CisJCQlpZiAoIWFnZ19yZWZp bGxfaGFzaF90YWJsZShhZ2dzdGF0ZSkpCisJCQl7CisJCQkJYWdnc3RhdGUtPmFnZ19kb25lID0g dHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisK Ky8qCisgKiBSZXRyaWV2ZSB0aGUgZ3JvdXBzIGZyb20gdGhlIGluLW1lbW9yeSBoYXNoIHRhYmxl cyB3aXRob3V0IGNvbnNpZGVyaW5nIGFueQorICogc3BpbGxlZCB0dXBsZXMuCisgKi8KK3N0YXRp YyBUdXBsZVRhYmxlU2xvdCAqCithZ2dfcmV0cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnkoQWdn U3RhdGUgKmFnZ3N0YXRlKQogewogCUV4cHJDb250ZXh0ICplY29udGV4dDsKIAlBZ2dTdGF0ZVBl ckFnZyBwZXJhZ2c7CkBAIC0xOTk1LDcgKzI1OTEsNyBAQCBhZ2dfcmV0cmlldmVfaGFzaF90YWJs ZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJICogV2UgbG9vcCByZXRyaWV2aW5nIGdyb3VwcyB1bnRp bCB3ZSBmaW5kIG9uZSBzYXRpc2Z5aW5nCiAJICogYWdnc3RhdGUtPnNzLnBzLnF1YWwKIAkgKi8K LQl3aGlsZSAoIWFnZ3N0YXRlLT5hZ2dfZG9uZSkKKwlmb3IgKDs7KQogCXsKIAkJVHVwbGVUYWJs ZVNsb3QgKmhhc2hzbG90ID0gcGVyaGFzaC0+aGFzaHNsb3Q7CiAJCWludAkJCWk7CkBAIC0yMDI2 LDggKzI2MjIsNiBAQCBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUp CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogTm8gbW9yZSBoYXNodGFibGVzLCBzbyBkb25l ICovCi0JCQkJYWdnc3RhdGUtPmFnZ19kb25lID0gdHJ1ZTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJ CX0KIAkJfQpAQCAtMjA4NCw2ICsyNjc4LDI4MSBAQCBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZShB Z2dTdGF0ZSAqYWdnc3RhdGUpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBoYXNoX3NwaWxs X2luaXQKKyAqCisgKiBDYWxsZWQgYWZ0ZXIgd2UgZGV0ZXJtaW5lZCB0aGF0IHNwaWxsaW5nIGlz IG5lY2Vzc2FyeS4gQ2hvb3NlcyB0aGUgbnVtYmVyCisgKiBvZiBwYXJ0aXRpb25zIHRvIGNyZWF0 ZSwgYW5kIGluaXRpYWxpemVzIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoX3NwaWxsX2lu aXQoSGFzaEFnZ1NwaWxsICpzcGlsbCwgaW50IGlucHV0X2JpdHMsIHVpbnQ2NCBpbnB1dF9ncm91 cHMsCisJCQkJZG91YmxlIGhhc2hlbnRyeXNpemUpCit7CisJaW50ICAgICBucGFydGl0aW9uczsK KwlpbnQgICAgIHBhcnRpdGlvbl9iaXRzOworCisJbnBhcnRpdGlvbnMgPSBoYXNoX2Nob29zZV9u dW1fc3BpbGxfcGFydGl0aW9ucyhpbnB1dF9ncm91cHMsCisJCQkJCQkJCQkJCQkgICBoYXNoZW50 cnlzaXplKTsKKwlwYXJ0aXRpb25fYml0cyA9IG15X2xvZzIobnBhcnRpdGlvbnMpOworCisJLyog bWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgZXhoYXVzdCB0aGUgaGFzaCBiaXRzICovCisJaWYgKHBh cnRpdGlvbl9iaXRzICsgaW5wdXRfYml0cyA+PSAzMikKKwkJcGFydGl0aW9uX2JpdHMgPSAzMiAt IGlucHV0X2JpdHM7CisKKwkvKiBudW1iZXIgb2YgcGFydGl0aW9ucyB3aWxsIGJlIGEgcG93ZXIg b2YgdHdvICovCisJbnBhcnRpdGlvbnMgPSAxTCA8PCBwYXJ0aXRpb25fYml0czsKKworCXNwaWxs LT5wYXJ0aXRpb25fYml0cyA9IHBhcnRpdGlvbl9iaXRzOworCXNwaWxsLT5uX3BhcnRpdGlvbnMg PSBucGFydGl0aW9uczsKKwlzcGlsbC0+cGFydGl0aW9ucyA9IHBhbGxvYzAoc2l6ZW9mKEJ1ZkZp bGUgKikgKiBucGFydGl0aW9ucyk7CisJc3BpbGwtPm50dXBsZXMgPSBwYWxsb2MwKHNpemVvZihp bnQ2NCkgKiBucGFydGl0aW9ucyk7Cit9CisKKy8qCisgKiBoYXNoX3NwaWxsX3R1cGxlCisgKgor ICogTm8gcm9vbSBmb3IgbmV3IGdyb3VwcyBpbiB0aGUgaGFzaCB0YWJsZS4gU2F2ZSBmb3IgbGF0 ZXIgaW4gdGhlIGFwcHJvcHJpYXRlCisgKiBwYXJ0aXRpb24gc3BpbGwgZmlsZS4KKyAqLworc3Rh dGljIFNpemUKK2hhc2hfc3BpbGxfdHVwbGUoSGFzaEFnZ1NwaWxsICpzcGlsbCwgaW50IGlucHV0 X2JpdHMsIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCSB1aW50MzIgaGFzaCkKK3sKKwlpbnQJ CQkJCSBwYXJ0aXRpb247CisJTWluaW1hbFR1cGxlCQkgdHVwbGU7CisJQnVmRmlsZQkJCQkqZmls ZTsKKwlpbnQJCQkJCSB3cml0dGVuOworCWludAkJCQkJIHRvdGFsX3dyaXR0ZW4gPSAwOworCWJv b2wJCQkJIHNob3VsZEZyZWU7CisKKwlBc3NlcnQoc3BpbGwtPnBhcnRpdGlvbnMgIT0gTlVMTCk7 CisKKwkvKgorCSAqIFdoZW4gc3BpbGxpbmcgdHVwbGVzIGZyb20gdGhlIGlucHV0LCB0aGUgc2xv dCB3aWxsIGJlIHZpcnR1YWwKKwkgKiAoY29udGFpbmluZyBvbmx5IHRoZSBuZWVkZWQgYXR0cmli dXRlcyBhbmQgdGhlIHJlc3QgYXMgTlVMTCksIGFuZCB3ZQorCSAqIG5lZWQgdG8gbWF0ZXJpYWxp emUgdGhlIG1pbmltYWwgdHVwbGUuIFdoZW4gc3BpbGxpbmcgdHVwbGVzCisJICogcmVjdXJzaXZl bHksIHRoZSBzbG90IHdpbGwgaG9sZCBhIG1pbmltYWwgdHVwbGUgYWxyZWFkeS4KKwkgKi8KKwl0 dXBsZSA9IEV4ZWNGZXRjaFNsb3RNaW5pbWFsVHVwbGUoc2xvdCwgJnNob3VsZEZyZWUpOworCisJ aWYgKHNwaWxsLT5wYXJ0aXRpb25fYml0cyA9PSAwKQorCQlwYXJ0aXRpb24gPSAwOworCWVsc2UK KwkJcGFydGl0aW9uID0gKGhhc2ggPDwgaW5wdXRfYml0cykgPj4KKwkJCSgzMiAtIHNwaWxsLT5w YXJ0aXRpb25fYml0cyk7CisKKwlzcGlsbC0+bnR1cGxlc1twYXJ0aXRpb25dKys7CisKKwlpZiAo c3BpbGwtPnBhcnRpdGlvbnNbcGFydGl0aW9uXSA9PSBOVUxMKQorCQlzcGlsbC0+cGFydGl0aW9u c1twYXJ0aXRpb25dID0gQnVmRmlsZUNyZWF0ZVRlbXAoZmFsc2UpOworCWZpbGUgPSBzcGlsbC0+ cGFydGl0aW9uc1twYXJ0aXRpb25dOworCisJd3JpdHRlbiA9IEJ1ZkZpbGVXcml0ZShmaWxlLCAo dm9pZCAqKSAmaGFzaCwgc2l6ZW9mKHVpbnQzMikpOworCWlmICh3cml0dGVuICE9IHNpemVvZih1 aW50MzIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBIYXNoQWdnIHRlbXBvcmFyeSBmaWxl OiAlbSIpKSk7CisJdG90YWxfd3JpdHRlbiArPSB3cml0dGVuOworCisJd3JpdHRlbiA9IEJ1ZkZp bGVXcml0ZShmaWxlLCAodm9pZCAqKSB0dXBsZSwgdHVwbGUtPnRfbGVuKTsKKwlpZiAod3JpdHRl biAhPSB0dXBsZS0+dF9sZW4pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHRvIEhhc2hBZ2cgdGVt cG9yYXJ5IGZpbGU6ICVtIikpKTsKKwl0b3RhbF93cml0dGVuICs9IHdyaXR0ZW47CisKKwlpZiAo c2hvdWxkRnJlZSkKKwkJcGZyZWUodHVwbGUpOworCisJcmV0dXJuIHRvdGFsX3dyaXR0ZW47Cit9 CisKKy8qCisgKiByZWFkX3NwaWxsZWRfdHVwbGUKKyAqIAkJcmVhZCB0aGUgbmV4dCB0dXBsZSBm cm9tIGEgYmF0Y2ggZmlsZS4gIFJldHVybiBOVUxMIGlmIG5vIG1vcmUuCisgKi8KK3N0YXRpYyBN aW5pbWFsVHVwbGUKK2hhc2hfcmVhZF9zcGlsbGVkKEJ1ZkZpbGUgKmZpbGUsIHVpbnQzMiAqaGFz aHApCit7CisJTWluaW1hbFR1cGxlCXR1cGxlOworCXVpbnQzMgkJCXRfbGVuOworCXNpemVfdAkJ CW5yZWFkOworCXVpbnQzMgkJCWhhc2g7CisKKwlucmVhZCA9IEJ1ZkZpbGVSZWFkKGZpbGUsICZo YXNoLCBzaXplb2YodWludDMyKSk7CisJaWYgKG5yZWFkID09IDApCisJCXJldHVybiBOVUxMOwor CWlmIChucmVhZCAhPSBzaXplb2YodWludDMyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmcm9t IEhhc2hBZ2cgdGVtcG9yYXJ5IGZpbGU6ICVtIikpKTsKKwlpZiAoaGFzaHAgIT0gTlVMTCkKKwkJ Kmhhc2hwID0gaGFzaDsKKworCW5yZWFkID0gQnVmRmlsZVJlYWQoZmlsZSwgJnRfbGVuLCBzaXpl b2YodF9sZW4pKTsKKwlpZiAobnJlYWQgIT0gc2l6ZW9mKHVpbnQzMikpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQg bm90IHJlYWQgZnJvbSBIYXNoQWdnIHRlbXBvcmFyeSBmaWxlOiAlbSIpKSk7CisKKwl0dXBsZSA9 IChNaW5pbWFsVHVwbGUpIHBhbGxvYyh0X2xlbik7CisJdHVwbGUtPnRfbGVuID0gdF9sZW47CisK KwlucmVhZCA9IEJ1ZkZpbGVSZWFkKGZpbGUsICh2b2lkICopKChjaGFyICopdHVwbGUgKyBzaXpl b2YodWludDMyKSksCisJCQkJCQl0X2xlbiAtIHNpemVvZih1aW50MzIpKTsKKwlpZiAobnJlYWQg IT0gdF9sZW4gLSBzaXplb2YodWludDMyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmcm9tIEhh c2hBZ2cgdGVtcG9yYXJ5IGZpbGU6ICVtIikpKTsKKworCXJldHVybiB0dXBsZTsKK30KKworLyoK KyAqIG5ld19oYXNoYWdnX2JhdGNoCisgKgorICogQ29uc3RydWN0IGEgSGFzaEFnZ0JhdGNoIGl0 ZW0sIHdoaWNoIHJlcHJlc2VudHMgb25lIGl0ZXJhdGlvbiBvZiBIYXNoQWdnIHRvCisgKiBiZSBk b25lLiBTaG91bGQgYmUgY2FsbGVkIGluIHRoZSBhZ2dyZWdhdGUncyBtZW1vcnkgY29udGV4dC4K KyAqLworc3RhdGljIEhhc2hBZ2dCYXRjaCAqCitoYXNoX2JhdGNoX25ldyhCdWZGaWxlICppbnB1 dF9maWxlLCBpbnQgc2V0bm8sIGludDY0IGlucHV0X3R1cGxlcywKKwkJCSAgIGludCBpbnB1dF9i aXRzKQoreworCUhhc2hBZ2dCYXRjaCAqYmF0Y2ggPSBwYWxsb2MwKHNpemVvZihIYXNoQWdnQmF0 Y2gpKTsKKworCWJhdGNoLT5pbnB1dF9maWxlID0gaW5wdXRfZmlsZTsKKwliYXRjaC0+aW5wdXRf Yml0cyA9IGlucHV0X2JpdHM7CisJYmF0Y2gtPmlucHV0X3R1cGxlcyA9IGlucHV0X3R1cGxlczsK KwliYXRjaC0+c2V0bm8gPSBzZXRubzsKKworCS8qIGJhdGNoLT5zcGlsbCB3aWxsIGJlIHNldCBv bmx5IGFmdGVyIHNwaWxsaW5nIHRoaXMgYmF0Y2ggKi8KKworCXJldHVybiBiYXRjaDsKK30KKwor LyoKKyAqIGhhc2hfZmluaXNoX2luaXRpYWxfc3BpbGxzCisgKgorICogQWZ0ZXIgYSBIYXNoQWdn QmF0Y2ggaGFzIGJlZW4gcHJvY2Vzc2VkLCBpdCBtYXkgaGF2ZSBzcGlsbGVkIHR1cGxlcyB0bwor ICogZGlzay4gSWYgc28sIHR1cm4gdGhlIHNwaWxsZWQgcGFydGl0aW9ucyBpbnRvIG5ldyBiYXRj aGVzIHRoYXQgbXVzdCBsYXRlcgorICogYmUgZXhlY3V0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCito YXNoX2ZpbmlzaF9pbml0aWFsX3NwaWxscyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJaW50IHNl dG5vOworCisJaWYgKGFnZ3N0YXRlLT5oYXNoX3NwaWxscyA9PSBOVUxMKQorCQlyZXR1cm47CisK KwkvKiB1cGRhdGUgaGFzaGVudHJ5c2l6ZSBlc3RpbWF0ZSBiYXNlZCBvbiBjb250ZW50cyAqLwor CUFzc2VydChhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQgPiAwKTsKKwlhZ2dzdGF0ZS0+ aGFzaGVudHJ5c2l6ZSA9IChkb3VibGUpYWdnc3RhdGUtPmhhc2hfbWVtX2N1cnJlbnQgLworCQko ZG91YmxlKWFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudDsKKworCWZvciAoc2V0bm8gPSAw OyBzZXRubyA8IGFnZ3N0YXRlLT5udW1faGFzaGVzOyBzZXRubysrKQorCQloYXNoX3NwaWxsX2Zp bmlzaChhZ2dzdGF0ZSwgJmFnZ3N0YXRlLT5oYXNoX3NwaWxsc1tzZXRub10sIHNldG5vLCAwKTsK KworCXBmcmVlKGFnZ3N0YXRlLT5oYXNoX3NwaWxscyk7CisJYWdnc3RhdGUtPmhhc2hfc3BpbGxz ID0gTlVMTDsKK30KKworLyoKKyAqIGhhc2hfc3BpbGxfZmluaXNoCisgKgorICogVHJhbnNmb3Jt IHNwaWxsIGZpbGVzIGludG8gbmV3IGJhdGNoZXMuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoX3Nw aWxsX2ZpbmlzaChBZ2dTdGF0ZSAqYWdnc3RhdGUsIEhhc2hBZ2dTcGlsbCAqc3BpbGwsIGludCBz ZXRubywgaW50IGlucHV0X2JpdHMpCit7CisJaW50IGk7CisKKwlpZiAoc3BpbGwtPm5fcGFydGl0 aW9ucyA9PSAwKQorCQlyZXR1cm47CS8qIGRpZG4ndCBzcGlsbCAqLworCisJZm9yIChpID0gMDsg aSA8IHNwaWxsLT5uX3BhcnRpdGlvbnM7IGkrKykKKwl7CisJCUJ1ZkZpbGUgICAgICAgICAqZmls ZSA9IHNwaWxsLT5wYXJ0aXRpb25zW2ldOworCQlNZW1vcnlDb250ZXh0ICAgIG9sZENvbnRleHQ7 CisJCUhhc2hBZ2dCYXRjaCAgICAqbmV3X2JhdGNoOworCisJCS8qIHBhcnRpdGlvbiBpcyBlbXB0 eSAqLworCQlpZiAoZmlsZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogcmV3aW5kIGZp bGUgZm9yIHJlYWRpbmcgKi8KKwkJaWYgKEJ1ZkZpbGVTZWVrKGZpbGUsIDAsIDBMLCBTRUVLX1NF VCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK KwkJCQkJIGVycm1zZygiY291bGQgbm90IHJld2luZCBIYXNoQWdnIHRlbXBvcmFyeSBmaWxlOiAl bSIpKSk7CisKKwkJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhhZ2dzdGF0ZS0+ c3MucHMuc3RhdGUtPmVzX3F1ZXJ5X2N4dCk7CisJCW5ld19iYXRjaCA9IGhhc2hfYmF0Y2hfbmV3 KGZpbGUsIHNldG5vLCBzcGlsbC0+bnR1cGxlc1tpXSwKKwkJCQkJCQkJICAgc3BpbGwtPnBhcnRp dGlvbl9iaXRzICsgaW5wdXRfYml0cyk7CisJCWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMgPSBsYXBw ZW5kKGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMsIG5ld19iYXRjaCk7CisJCWFnZ3N0YXRlLT5oYXNo X2JhdGNoZXNfdXNlZCsrOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisJ fQorCisJcGZyZWUoc3BpbGwtPm50dXBsZXMpOworCXBmcmVlKHNwaWxsLT5wYXJ0aXRpb25zKTsK K30KKworLyoKKyAqIENsZWFyIGEgSGFzaEFnZ1NwaWxsLCBmcmVlIGl0cyBtZW1vcnksIGFuZCBj bG9zZSBpdHMgZmlsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitoYXNoX3Jlc2V0X3NwaWxsKEhhc2hB Z2dTcGlsbCAqc3BpbGwpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHNwaWxsLT5uX3Bh cnRpdGlvbnM7IGkrKykKKwl7CisJCUJ1ZkZpbGUgICAgICAgICAqZmlsZSA9IHNwaWxsLT5wYXJ0 aXRpb25zW2ldOworCisJCWlmIChmaWxlICE9IE5VTEwpCisJCQlCdWZGaWxlQ2xvc2UoZmlsZSk7 CisJfQorCWlmIChzcGlsbC0+bnR1cGxlcyAhPSBOVUxMKQorCQlwZnJlZShzcGlsbC0+bnR1cGxl cyk7CisJaWYgKHNwaWxsLT5wYXJ0aXRpb25zICE9IE5VTEwpCisJCXBmcmVlKHNwaWxsLT5wYXJ0 aXRpb25zKTsKK30KKworLyoKKyAqIEZpbmQgYW5kIHJlc2V0IGFsbCBhY3RpdmUgSGFzaEFnZ1Nw aWxscy4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hfcmVzZXRfc3BpbGxzKEFnZ1N0YXRlICphZ2dz dGF0ZSkKK3sKKwlMaXN0Q2VsbCAqbGM7CisKKwlpZiAoYWdnc3RhdGUtPmhhc2hfc3BpbGxzICE9 IE5VTEwpCisJeworCQlpbnQgc2V0bm87CisKKwkJZm9yIChzZXRubyA9IDA7IHNldG5vIDwgYWdn c3RhdGUtPm51bV9oYXNoZXM7IHNldG5vKyspCisJCQloYXNoX3Jlc2V0X3NwaWxsKCZhZ2dzdGF0 ZS0+aGFzaF9zcGlsbHNbc2V0bm9dKTsKKworCQlwZnJlZShhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMp OworCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgPSBOVUxMOworCX0KKworCWZvcmVhY2gobGMsIGFn Z3N0YXRlLT5oYXNoX2JhdGNoZXMpCisJeworCQlIYXNoQWdnQmF0Y2ggKmJhdGNoID0gKEhhc2hB Z2dCYXRjaCopIGxmaXJzdChsYyk7CisJCWlmIChiYXRjaC0+aW5wdXRfZmlsZSAhPSBOVUxMKQor CQl7CisJCQlCdWZGaWxlQ2xvc2UoYmF0Y2gtPmlucHV0X2ZpbGUpOworCQkJYmF0Y2gtPmlucHV0 X2ZpbGUgPSBOVUxMOworCQl9CisJCWhhc2hfcmVzZXRfc3BpbGwoJmJhdGNoLT5zcGlsbCk7CisJ CXBmcmVlKGJhdGNoKTsKKwl9CisJbGlzdF9mcmVlKGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMpOwor CWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXMgPSBOSUw7Cit9CisKKwogLyogLS0tLS0tLS0tLS0tLS0t LS0KICAqIEV4ZWNJbml0QWdnCiAgKgpAQCAtMjI2OCw2ICszMTM3LDEwIEBAIEV4ZWNJbml0QWdn KEFnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQlhZ2dzdGF0ZS0+c3Mu cHMub3V0ZXJvcHNmaXhlZCA9IGZhbHNlOwogCX0KIAorCWlmICh1c2VfaGFzaGluZykKKwkJYWdn c3RhdGUtPmhhc2hfc3BpbGxfc2xvdCA9IEV4ZWNJbml0RXh0cmFUdXBsZVNsb3QoZXN0YXRlLCBz Y2FuRGVzYywKKwkJCQkJCQkJCQkJCQkJICAgJlRUU09wc01pbmltYWxUdXBsZSk7CisKIAkvKgog CSAqIEluaXRpYWxpemUgcmVzdWx0IHR5cGUsIHNsb3QgYW5kIHByb2plY3Rpb24uCiAJICovCkBA IC0yNDk2LDggKzMzNjksMzYgQEAgRXhlY0luaXRBZ2coQWdnICpub2RlLCBFU3RhdGUgKmVzdGF0 ZSwgaW50IGVmbGFncykKIAkJLyogdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludGVycywgbm90IHN0 cnVjdHVyZXMgKi8KIAkJYWdnc3RhdGUtPmhhc2hfcGVyZ3JvdXAgPSBwZXJncm91cHM7CiAKKwkJ YWdnc3RhdGUtPmhhc2hlbnRyeXNpemUgPQorCQkJaGFzaF9hZ2dfZW50cnlfc2l6ZShhZ2dzdGF0 ZS0+bnVtdHJhbnMpICsKKwkJCW5vZGUtPnRyYW5zU3BhY2U7CisKKwkJLyoKKwkJICogSW5pdGlh bGl6ZSB0aGUgdGhyZXNob2xkcyBhdCB3aGljaCB3ZSBzdG9wIGNyZWF0aW5nIG5ldyBoYXNoIGVu dHJpZXMKKwkJICogYW5kIHN0YXJ0IHNwaWxsaW5nLgorCQkgKi8KKwkJaWYgKGhhc2hhZ2dfbWVt X292ZXJmbG93KQorCQkJYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0ID0gU0laRV9NQVg7CisJCWVs c2UgaWYgKHdvcmtfbWVtICogMTAyNEwgPiBIQVNIX1BBUlRJVElPTl9NRU0gKiAyKQorCQkJYWdn c3RhdGUtPmhhc2hfbWVtX2xpbWl0ID0gd29ya19tZW0gKiAxMDI0TCAtIEhBU0hfUEFSVElUSU9O X01FTTsKKwkJZWxzZQorCQkJYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0ID0gd29ya19tZW0gKiAx MDI0TDsKKworCQkvKgorCQkgKiBTZXQgYSBzZXBhcmF0ZSBsaW1pdCBvbiB0aGUgbWF4aW11bSBu dW1iZXIgb2YgZ3JvdXBzIHRvCisJCSAqIGNyZWF0ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGFn Z3JlZ2F0ZXMgd2hlcmUgdGhlIGluaXRpYWwgc3RhdGUKKwkJICogc2l6ZSBpcyBzbWFsbCwgYnV0 IGFnZ3RyYW5zc3BhY2UgaXMgbGFyZ2UuCisJCSAqLworCQlpZiAoaGFzaGFnZ19tZW1fb3ZlcmZs b3cpCisJCQlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2xpbWl0ID0gTE9OR19NQVg7CisJCWVsc2Ug aWYgKGFnZ3N0YXRlLT5oYXNoX21lbV9saW1pdCA+IGFnZ3N0YXRlLT5oYXNoZW50cnlzaXplKQor CQkJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19saW1pdCA9CisJCQkJYWdnc3RhdGUtPmhhc2hfbWVt X2xpbWl0IC8gYWdnc3RhdGUtPmhhc2hlbnRyeXNpemU7CisJCWVsc2UKKwkJCWFnZ3N0YXRlLT5o YXNoX25ncm91cHNfbGltaXQgPSAxOworCiAJCWZpbmRfaGFzaF9jb2x1bW5zKGFnZ3N0YXRlKTsK LQkJYnVpbGRfaGFzaF90YWJsZShhZ2dzdGF0ZSk7CisJCWJ1aWxkX2hhc2hfdGFibGUoYWdnc3Rh dGUsIC0xLCAwKTsKIAkJYWdnc3RhdGUtPnRhYmxlX2ZpbGxlZCA9IGZhbHNlOwogCX0KIApAQCAt MjkwMyw3ICszODA0LDcgQEAgRXhlY0luaXRBZ2coQWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwg aW50IGVmbGFncykKIAkJZWxzZQogCQkJQXNzZXJ0KGZhbHNlKTsKIAotCQlwaGFzZS0+ZXZhbHRy YW5zID0gRXhlY0J1aWxkQWdnVHJhbnMoYWdnc3RhdGUsIHBoYXNlLCBkb3NvcnQsIGRvaGFzaCk7 CisJCXBoYXNlLT5ldmFsdHJhbnMgPSBFeGVjQnVpbGRBZ2dUcmFucyhhZ2dzdGF0ZSwgcGhhc2Us IGRvc29ydCwgZG9oYXNoLCBmYWxzZSk7CiAKIAl9CiAKQEAgLTMzOTgsNiArNDI5OSw4IEBAIEV4 ZWNFbmRBZ2coQWdnU3RhdGUgKm5vZGUpCiAJaWYgKG5vZGUtPnNvcnRfb3V0KQogCQl0dXBsZXNv cnRfZW5kKG5vZGUtPnNvcnRfb3V0KTsKIAorCWhhc2hfcmVzZXRfc3BpbGxzKG5vZGUpOworCiAJ Zm9yICh0cmFuc25vID0gMDsgdHJhbnNubyA8IG5vZGUtPm51bXRyYW5zOyB0cmFuc25vKyspCiAJ ewogCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zID0gJm5vZGUtPnBlcnRyYW5zW3RyYW5zbm9d OwpAQCAtMzQ1MywxMiArNDM1NiwxMyBAQCBFeGVjUmVTY2FuQWdnKEFnZ1N0YXRlICpub2RlKQog CQkJcmV0dXJuOwogCiAJCS8qCi0JCSAqIElmIHdlIGRvIGhhdmUgdGhlIGhhc2ggdGFibGUsIGFu ZCB0aGUgc3VicGxhbiBkb2VzIG5vdCBoYXZlIGFueQotCQkgKiBwYXJhbWV0ZXIgY2hhbmdlcywg YW5kIG5vbmUgb2Ygb3VyIG93biBwYXJhbWV0ZXIgY2hhbmdlcyBhZmZlY3QKLQkJICogaW5wdXQg ZXhwcmVzc2lvbnMgb2YgdGhlIGFnZ3JlZ2F0ZWQgZnVuY3Rpb25zLCB0aGVuIHdlIGNhbiBqdXN0 Ci0JCSAqIHJlc2NhbiB0aGUgZXhpc3RpbmcgaGFzaCB0YWJsZTsgbm8gbmVlZCB0byBidWlsZCBp dCBhZ2Fpbi4KKwkJICogSWYgd2UgZG8gaGF2ZSB0aGUgaGFzaCB0YWJsZSwgYW5kIGl0IG5ldmVy IHNwaWxsZWQsIGFuZCB0aGUgc3VicGxhbgorCQkgKiBkb2VzIG5vdCBoYXZlIGFueSBwYXJhbWV0 ZXIgY2hhbmdlcywgYW5kIG5vbmUgb2Ygb3VyIG93biBwYXJhbWV0ZXIKKwkJICogY2hhbmdlcyBh ZmZlY3QgaW5wdXQgZXhwcmVzc2lvbnMgb2YgdGhlIGFnZ3JlZ2F0ZWQgZnVuY3Rpb25zLCB0aGVu CisJCSAqIHdlIGNhbiBqdXN0IHJlc2NhbiB0aGUgZXhpc3RpbmcgaGFzaCB0YWJsZTsgbm8gbmVl ZCB0byBidWlsZCBpdAorCQkgKiBhZ2Fpbi4KIAkJICovCi0JCWlmIChvdXRlclBsYW4tPmNoZ1Bh cmFtID09IE5VTEwgJiYKKwkJaWYgKG91dGVyUGxhbi0+Y2hnUGFyYW0gPT0gTlVMTCAmJiAhbm9k ZS0+aGFzaF9zcGlsbGVkICYmCiAJCQkhYm1zX292ZXJsYXAobm9kZS0+c3MucHMuY2hnUGFyYW0s IGFnZ25vZGUtPmFnZ1BhcmFtcykpCiAJCXsKIAkJCVJlc2V0VHVwbGVIYXNoSXRlcmF0b3Iobm9k ZS0+cGVyaGFzaFswXS5oYXNodGFibGUsCkBAIC0zNTE1LDkgKzQ0MTksMjEgQEAgRXhlY1JlU2Nh bkFnZyhBZ2dTdGF0ZSAqbm9kZSkKIAkgKi8KIAlpZiAobm9kZS0+YWdnc3RyYXRlZ3kgPT0gQUdH X0hBU0hFRCB8fCBub2RlLT5hZ2dzdHJhdGVneSA9PSBBR0dfTUlYRUQpCiAJeworCQloYXNoX3Jl c2V0X3NwaWxscyhub2RlKTsKKworCQlub2RlLT5oYXNoX3NwaWxsZWQgPSBmYWxzZTsKKwkJbm9k ZS0+aGFzaF9ub19uZXdfZ3JvdXBzID0gZmFsc2U7CisJCW5vZGUtPmhhc2hfbWVtX2N1cnJlbnQg PSAwOworCQlub2RlLT5oYXNoX25ncm91cHNfY3VycmVudCA9IDA7CisKKwkJLyogcmVzZXQgc3Rh dHMgKi8KKwkJbm9kZS0+aGFzaF9tZW1fcGVhayA9IDA7CisJCW5vZGUtPmhhc2hfZGlza191c2Vk ID0gMDsKKwkJbm9kZS0+aGFzaF9iYXRjaGVzX3VzZWQgPSAwOworCiAJCVJlU2NhbkV4cHJDb250 ZXh0KG5vZGUtPmhhc2hjb250ZXh0KTsKIAkJLyogUmVidWlsZCBhbiBlbXB0eSBoYXNoIHRhYmxl ICovCi0JCWJ1aWxkX2hhc2hfdGFibGUobm9kZSk7CisJCWJ1aWxkX2hhc2hfdGFibGUobm9kZSwg LTEsIDApOwogCQlub2RlLT50YWJsZV9maWxsZWQgPSBmYWxzZTsKIAkJLyogaXRlcmF0b3Igd2ls bCBiZSByZXNldCB3aGVuIHRoZSB0YWJsZSBpcyBmaWxsZWQgKi8KIAl9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jCmluZGV4IGZmZDg4N2M3MWFhLi45MzUxN2QwMzgxOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTIwODIsNiArMjA4Miw3IEBAIGxsdm1fY29tcGls ZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJfQogCiAJCQljYXNlIEVFT1BfQUdHX0lOSVRf VFJBTlM6CisJCQljYXNlIEVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJTExFRDoKIAkJCQl7CiAJCQkJ CUFnZ1N0YXRlICAgKmFnZ3N0YXRlOwogCQkJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zOwpA QCAtMjA5Miw2ICsyMDkzLDcgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkK IAkJCQkJTExWTVZhbHVlUmVmIHZfYWxscGVyZ3JvdXBzcDsKIAogCQkJCQlMTFZNVmFsdWVSZWYg dl9wZXJncm91cHA7CisJCQkJCUxMVk1WYWx1ZVJlZiB2X3Blcmdyb3VwX2FsbGFnZ3M7CiAKIAkJ CQkJTExWTVZhbHVlUmVmIHZfc2V0b2ZmLAogCQkJCQkJCQl2X3RyYW5zbm87CkBAIC0yMTE5LDEx ICsyMTIxLDMyIEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJCQkJ CQkJICAiYWdnc3RhdGUuYWxsX3Blcmdyb3VwcyIpOwogCQkJCQl2X3NldG9mZiA9IGxfaW50MzJf Y29uc3Qob3AtPmQuYWdnX2luaXRfdHJhbnMuc2V0b2ZmKTsKIAkJCQkJdl90cmFuc25vID0gbF9p bnQzMl9jb25zdChvcC0+ZC5hZ2dfaW5pdF90cmFucy50cmFuc25vKTsKLQkJCQkJdl9wZXJncm91 cHAgPQotCQkJCQkJTExWTUJ1aWxkR0VQKGIsCi0JCQkJCQkJCQkgbF9sb2FkX2dlcDEoYiwgdl9h bGxwZXJncm91cHNwLCB2X3NldG9mZiwgIiIpLAotCQkJCQkJCQkJICZ2X3RyYW5zbm8sIDEsICIi KTsKKwkJCQkJdl9wZXJncm91cF9hbGxhZ2dzID0gbF9sb2FkX2dlcDEoYiwgdl9hbGxwZXJncm91 cHNwLCB2X3NldG9mZiwgIiIpOwogCisJCQkJCS8qCisJCQkJCSAqIFdoZW4gbm8gdHVwbGVzIGF0 IGFsbCBoYXZlIHNwaWxsZWQsIHdlIGF2b2lkIGFkZGluZyB0aGlzCisJCQkJCSAqIGV4dHJhIGJy YW5jaC4gQnV0IGFmdGVyIHNvbWUgdHVwbGVzIGhhdmUgc3BpbGxlZCwgdGhpcworCQkJCQkgKiBi cmFuY2ggaXMgbmVjZXNzYXJ5LCBzbyB3ZSByZWNvbXBpbGUgdGhlIGV4cHJlc3Npb24KKwkJCQkJ ICogdXNpbmcgYSBuZXcgb3Bjb2RlLgorCQkJCQkgKi8KKwkJCQkJaWYgKG9wY29kZSA9PSBFRU9Q X0FHR19JTklUX1RSQU5TX1NQSUxMRUQpCisJCQkJCXsKKwkJCQkJCUxMVk1CYXNpY0Jsb2NrUmVm IGJfY2hlY2tfbm90cmFuc3ZhbHVlID0gbF9iYl9iZWZvcmVfdigKKwkJCQkJCQlvcGJsb2Nrc1tp ICsgMV0sICJvcC4lZC5jaGVja19ub3RyYW5zdmFsdWUiLCBpKTsKKworCQkJCQkJTExWTUJ1aWxk Q29uZEJyKAorCQkJCQkJCWIsCisJCQkJCQkJTExWTUJ1aWxkSUNtcChiLCBMTFZNSW50RVEsCisJ CQkJCQkJCQkJICBMTFZNQnVpbGRQdHJUb0ludCgKKwkJCQkJCQkJCQkJICBiLCB2X3Blcmdyb3Vw X2FsbGFnZ3MsIFR5cGVTaXplVCwgIiIpLAorCQkJCQkJCQkJCSAgbF9zaXpldF9jb25zdCgwKSwg IiIpLAorCQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwKKwkJCQkJCQliX2NoZWNrX25vdHJhbnN2YWx1 ZSk7CisKKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2NoZWNrX25vdHJhbnN2 YWx1ZSk7CisJCQkJCX0KKworCQkJCQl2X3Blcmdyb3VwcCA9IExMVk1CdWlsZEdFUChiLCB2X3Bl cmdyb3VwX2FsbGFnZ3MsICZ2X3RyYW5zbm8sIDEsICIiKTsKIAkJCQkJdl9ub3RyYW5zdmFsdWUg PQogCQkJCQkJbF9sb2FkX3N0cnVjdF9nZXAoYiwgdl9wZXJncm91cHAsCiAJCQkJCQkJCQkJICBG SUVMRE5PX0FHR1NUQVRFUEVSR1JPVVBEQVRBX05PVFJBTlNWQUxVRSwKQEAgLTIxODAsNiArMjIw Myw3IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJfQogCiAJCQlj YXNlIEVFT1BfQUdHX1NUUklDVF9UUkFOU19DSEVDSzoKKwkJCWNhc2UgRUVPUF9BR0dfU1RSSUNU X1RSQU5TX0NIRUNLX1NQSUxMRUQ6CiAJCQkJewogCQkJCQlBZ2dTdGF0ZSAgICphZ2dzdGF0ZTsK IAkJCQkJTExWTVZhbHVlUmVmIHZfc2V0b2ZmLApAQCAtMjE5MCw2ICsyMjE0LDcgQEAgbGx2bV9j b21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAogCQkJCQlMTFZNVmFsdWVSZWYgdl90cmFu c251bGw7CiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3Blcmdyb3VwcDsKKwkJCQkJTExWTVZhbHVlUmVm IHZfcGVyZ3JvdXBfYWxsYWdnczsKIAogCQkJCQlpbnQJCQlqdW1wbnVsbCA9IG9wLT5kLmFnZ19z dHJpY3RfdHJhbnNfY2hlY2suanVtcG51bGw7CiAKQEAgLTIyMDksMTEgKzIyMzQsMzIgQEAgbGx2 bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQkJCWxfaW50MzJfY29uc3Qob3At PmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5zZXRvZmYpOwogCQkJCQl2X3RyYW5zbm8gPQogCQkJ CQkJbF9pbnQzMl9jb25zdChvcC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLnRyYW5zbm8pOwot CQkJCQl2X3Blcmdyb3VwcCA9Ci0JCQkJCQlMTFZNQnVpbGRHRVAoYiwKLQkJCQkJCQkJCSBsX2xv YWRfZ2VwMShiLCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAiIiksCi0JCQkJCQkJCQkgJnZf dHJhbnNubywgMSwgIiIpOworCQkJCQl2X3Blcmdyb3VwX2FsbGFnZ3MgPSBsX2xvYWRfZ2VwMShi LCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAiIik7CisKKwkJCQkJLyoKKwkJCQkJICogV2hl biBubyB0dXBsZXMgYXQgYWxsIGhhdmUgc3BpbGxlZCwgd2UgYXZvaWQgYWRkaW5nIHRoaXMKKwkJ CQkJICogZXh0cmEgYnJhbmNoLiBCdXQgYWZ0ZXIgc29tZSB0dXBsZXMgaGF2ZSBzcGlsbGVkLCB0 aGlzCisJCQkJCSAqIGJyYW5jaCBpcyBuZWNlc3NhcnksIHNvIHdlIHJlY29tcGlsZSB0aGUgZXhw cmVzc2lvbgorCQkJCQkgKiB1c2luZyBhIG5ldyBvcGNvZGUuCisJCQkJCSAqLworCQkJCQlpZiAo b3Bjb2RlID09IEVFT1BfQUdHX1NUUklDVF9UUkFOU19DSEVDS19TUElMTEVEKQorCQkJCQl7CisJ CQkJCQlMTFZNQmFzaWNCbG9ja1JlZiBiX2NoZWNrX3RyYW5zbnVsbCA9IGxfYmJfYmVmb3JlX3Yo CisJCQkJCQkJb3BibG9ja3NbaSArIDFdLCAib3AuJWQuY2hlY2tfdHJhbnNudWxsIiwgaSk7CisK KwkJCQkJCUxMVk1CdWlsZENvbmRCcigKKwkJCQkJCQliLAorCQkJCQkJCUxMVk1CdWlsZElDbXAo YiwgTExWTUludEVRLAorCQkJCQkJCQkJCSAgTExWTUJ1aWxkUHRyVG9JbnQoYiwgdl9wZXJncm91 cF9hbGxhZ2dzLAorCQkJCQkJCQkJCQkJCQkJVHlwZVNpemVULCAiIiksCisJCQkJCQkJCQkJICBs X3NpemV0X2NvbnN0KDApLCAiIiksCisJCQkJCQkJb3BibG9ja3NbanVtcG51bGxdLAorCQkJCQkJ CWJfY2hlY2tfdHJhbnNudWxsKTsKKworCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIs IGJfY2hlY2tfdHJhbnNudWxsKTsKKwkJCQkJfQogCisJCQkJCXZfcGVyZ3JvdXBwID0gTExWTUJ1 aWxkR0VQKGIsIHZfcGVyZ3JvdXBfYWxsYWdncywgJnZfdHJhbnNubywgMSwgIiIpOwogCQkJCQl2 X3RyYW5zbnVsbCA9CiAJCQkJCQlsX2xvYWRfc3RydWN0X2dlcChiLCB2X3Blcmdyb3VwcCwKIAkJ CQkJCQkJCQkgIEZJRUxETk9fQUdHU1RBVEVQRVJHUk9VUERBVEFfVFJBTlNWQUxVRUlTTlVMTCwK QEAgLTIyMjksNyArMjI3NSw5IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUp CiAJCQkJfQogCiAJCQljYXNlIEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMOgorCQkJY2FzZSBF RU9QX0FHR19QTEFJTl9UUkFOU19CWVZBTF9TUElMTEVEOgogCQkJY2FzZSBFRU9QX0FHR19QTEFJ Tl9UUkFOUzoKKwkJCWNhc2UgRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJTExFRDoKIAkJCQl7CiAJ CQkJCUFnZ1N0YXRlICAgKmFnZ3N0YXRlOwogCQkJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5z OwpAQCAtMjI1NSw2ICsyMzAzLDcgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0 ZSkKIAkJCQkJTExWTVZhbHVlUmVmIHZfcGVydHJhbnNwOwogCiAJCQkJCUxMVk1WYWx1ZVJlZiB2 X3Blcmdyb3VwcDsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcGVyZ3JvdXBfYWxsYWdnczsKIAogCQkJ CQlMTFZNVmFsdWVSZWYgdl9yZXR2YWw7CiAKQEAgLTIyODIsMTAgKzIzMzEsMzMgQEAgbGx2bV9j b21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQkJCQkJCQkgICJhZ2dzdGF0ZS5hbGxf cGVyZ3JvdXBzIik7CiAJCQkJCXZfc2V0b2ZmID0gbF9pbnQzMl9jb25zdChvcC0+ZC5hZ2dfdHJh bnMuc2V0b2ZmKTsKIAkJCQkJdl90cmFuc25vID0gbF9pbnQzMl9jb25zdChvcC0+ZC5hZ2dfdHJh bnMudHJhbnNubyk7Ci0JCQkJCXZfcGVyZ3JvdXBwID0KLQkJCQkJCUxMVk1CdWlsZEdFUChiLAot CQkJCQkJCQkJIGxfbG9hZF9nZXAxKGIsIHZfYWxscGVyZ3JvdXBzcCwgdl9zZXRvZmYsICIiKSwK LQkJCQkJCQkJCSAmdl90cmFuc25vLCAxLCAiIik7CisJCQkJCXZfcGVyZ3JvdXBfYWxsYWdncyA9 IGxfbG9hZF9nZXAxKGIsIHZfYWxscGVyZ3JvdXBzcCwgdl9zZXRvZmYsICIiKTsKKworCQkJCQkv KgorCQkJCQkgKiBXaGVuIG5vIHR1cGxlcyBhdCBhbGwgaGF2ZSBzcGlsbGVkLCB3ZSBhdm9pZCBh ZGRpbmcgdGhpcworCQkJCQkgKiBleHRyYSBicmFuY2guIEJ1dCBhZnRlciBzb21lIHR1cGxlcyBo YXZlIHNwaWxsZWQsIHRoaXMKKwkJCQkJICogYnJhbmNoIGlzIG5lY2Vzc2FyeSwgc28gd2UgcmVj b21waWxlIHRoZSBleHByZXNzaW9uCisJCQkJCSAqIHVzaW5nIGEgbmV3IG9wY29kZS4KKwkJCQkJ ICovCisJCQkJCWlmIChvcGNvZGUgPT0gRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExF RCB8fAorCQkJCQkJb3Bjb2RlID09IEVFT1BfQUdHX1BMQUlOX1RSQU5TX1NQSUxMRUQpCisJCQkJ CXsKKwkJCQkJCUxMVk1CYXNpY0Jsb2NrUmVmIGJfYWR2YW5jZV90cmFuc3ZhbCA9IGxfYmJfYmVm b3JlX3YoCisJCQkJCQkJb3BibG9ja3NbaSArIDFdLCAib3AuJWQuYWR2YW5jZV90cmFuc3ZhbCIs IGkpOworCisJCQkJCQlMTFZNQnVpbGRDb25kQnIoCisJCQkJCQkJYiwKKwkJCQkJCQlMTFZNQnVp bGRJQ21wKGIsIExMVk1JbnRFUSwKKwkJCQkJCQkJCQkgIExMVk1CdWlsZFB0clRvSW50KGIsIHZf cGVyZ3JvdXBfYWxsYWdncywKKwkJCQkJCQkJCQkJCQkJCVR5cGVTaXplVCwgIiIpLAorCQkJCQkJ CQkJCSAgbF9zaXpldF9jb25zdCgwKSwgIiIpLAorCQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwKKwkJ CQkJCQliX2FkdmFuY2VfdHJhbnN2YWwpOworCisJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRF bmQoYiwgYl9hZHZhbmNlX3RyYW5zdmFsKTsKKwkJCQkJfQorCisJCQkJCXZfcGVyZ3JvdXBwID0g TExWTUJ1aWxkR0VQKGIsIHZfcGVyZ3JvdXBfYWxsYWdncywgJnZfdHJhbnNubywgMSwgIiIpOwog CiAJCQkJCXZfZmNpbmZvID0gbF9wdHJfY29uc3QoZmNpbmZvLAogCQkJCQkJCQkJCSAgIGxfcHRy KFN0cnVjdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29z dHNpemUuYwppbmRleCBjNWY2NTkzNDg1OS4uM2YwZDI4OTk2MzUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTI4LDYgKzEyOCw3IEBAIGJvb2wJCWVuYWJsZV9iaXRt YXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJs ZV9zb3J0ID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK2Jvb2wJCWVuYWJs ZV9oYXNoYWdnX3NwaWxsID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9uZXN0bG9vcCA9IHRydWU7CiBi b29sCQllbmFibGVfbWF0ZXJpYWwgPSB0cnVlOwogYm9vbAkJZW5hYmxlX21lcmdlam9pbiA9IHRy dWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggOGM4YjRmOGVk NjkuLmY5MzE1MGQ0MTk5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9j cmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5j CkBAIC0xNjQ0LDYgKzE2NDQsNyBAQCBjcmVhdGVfdW5pcXVlX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIFVuaXF1ZVBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCQkJCQkJCQkgTklMLAogCQkJ CQkJCQkgTklMLAogCQkJCQkJCQkgYmVzdF9wYXRoLT5wYXRoLnJvd3MsCisJCQkJCQkJCSAwLAog CQkJCQkJCQkgc3VicGxhbik7CiAJfQogCWVsc2UKQEAgLTIwOTYsNiArMjA5Nyw3IEBAIGNyZWF0 ZV9hZ2dfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQWdnUGF0aCAqYmVzdF9wYXRoKQogCQkJCQlO SUwsCiAJCQkJCU5JTCwKIAkJCQkJYmVzdF9wYXRoLT5udW1Hcm91cHMsCisJCQkJCWJlc3RfcGF0 aC0+dHJhbnNTcGFjZSwKIAkJCQkJc3VicGxhbik7CiAKIAljb3B5X2dlbmVyaWNfcGF0aF9pbmZv KCZwbGFuLT5wbGFuLCAoUGF0aCAqKSBiZXN0X3BhdGgpOwpAQCAtMjI1Nyw2ICsyMjU5LDcgQEAg Y3JlYXRlX2dyb3VwaW5nc2V0c19wbGFuKFBsYW5uZXJJbmZvICpyb290LCBHcm91cGluZ1NldHNQ YXRoICpiZXN0X3BhdGgpCiAJCQkJCQkJCQkJIHJvbGx1cC0+Z3NldHMsCiAJCQkJCQkJCQkJIE5J TCwKIAkJCQkJCQkJCQkgcm9sbHVwLT5udW1Hcm91cHMsCisJCQkJCQkJCQkJIGJlc3RfcGF0aC0+ dHJhbnNTcGFjZSwKIAkJCQkJCQkJCQkgc29ydF9wbGFuKTsKIAogCQkJLyoKQEAgLTIyOTUsNiAr MjI5OCw3IEBAIGNyZWF0ZV9ncm91cGluZ3NldHNfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgR3Jv dXBpbmdTZXRzUGF0aCAqYmVzdF9wYXRoKQogCQkJCQkJcm9sbHVwLT5nc2V0cywKIAkJCQkJCWNo YWluLAogCQkJCQkJcm9sbHVwLT5udW1Hcm91cHMsCisJCQkJCQliZXN0X3BhdGgtPnRyYW5zU3Bh Y2UsCiAJCQkJCQlzdWJwbGFuKTsKIAogCQkvKiBDb3B5IGNvc3QgZGF0YSBmcm9tIFBhdGggdG8g UGxhbiAqLwpAQCAtNjE5NSw3ICs2MTk5LDcgQEAgbWFrZV9hZ2coTGlzdCAqdGxpc3QsIExpc3Qg KnF1YWwsCiAJCSBBZ2dTdHJhdGVneSBhZ2dzdHJhdGVneSwgQWdnU3BsaXQgYWdnc3BsaXQsCiAJ CSBpbnQgbnVtR3JvdXBDb2xzLCBBdHRyTnVtYmVyICpncnBDb2xJZHgsIE9pZCAqZ3JwT3BlcmF0 b3JzLCBPaWQgKmdycENvbGxhdGlvbnMsCiAJCSBMaXN0ICpncm91cGluZ1NldHMsIExpc3QgKmNo YWluLAotCQkgZG91YmxlIGROdW1Hcm91cHMsIFBsYW4gKmxlZnR0cmVlKQorCQkgZG91YmxlIGRO dW1Hcm91cHMsIGludDMyIHRyYW5zU3BhY2UsIFBsYW4gKmxlZnR0cmVlKQogewogCUFnZwkJICAg Km5vZGUgPSBtYWtlTm9kZShBZ2cpOwogCVBsYW4JICAgKnBsYW4gPSAmbm9kZS0+cGxhbjsKQEAg LTYyMTEsNiArNjIxNSw3IEBAIG1ha2VfYWdnKExpc3QgKnRsaXN0LCBMaXN0ICpxdWFsLAogCW5v ZGUtPmdycE9wZXJhdG9ycyA9IGdycE9wZXJhdG9yczsKIAlub2RlLT5ncnBDb2xsYXRpb25zID0g Z3JwQ29sbGF0aW9uczsKIAlub2RlLT5udW1Hcm91cHMgPSBudW1Hcm91cHM7CisJbm9kZS0+dHJh bnNTcGFjZSA9IHRyYW5zU3BhY2U7CiAJbm9kZS0+YWdnUGFyYW1zID0gTlVMTDsJCS8qIFNTX2Zp bmFsaXplX3BsYW4oKSB3aWxsIGZpbGwgdGhpcyAqLwogCW5vZGUtPmdyb3VwaW5nU2V0cyA9IGdy b3VwaW5nU2V0czsKIAlub2RlLT5jaGFpbiA9IGNoYWluOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCmluZGV4IGNiNTRiMTU1MDdiLi5iNjE3MmZiNDI2YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDI2MSw2ICs0MjYxLDkgQEAgY29uc2lkZXJfZ3JvdXBp bmdzZXRzX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkgKiBnZC0+cm9sbHVwcyBpcyBlbXB0 eSBpZiB3ZSBoYXZlIG9ubHkgdW5zb3J0YWJsZSBjb2x1bW5zIHRvIHdvcmsKIAkJICogd2l0aC4g IE92ZXJyaWRlIHdvcmtfbWVtIGluIHRoYXQgY2FzZTsgb3RoZXJ3aXNlLCB3ZSdsbCByZWx5IG9u IHRoZQogCQkgKiBzb3J0ZWQtaW5wdXQgY2FzZSB0byBnZW5lcmF0ZSB1c2FibGUgbWl4ZWQgcGF0 aHMuCisJCSAqCisJCSAqIFRPRE86IHRoaW5rIG1vcmUgYWJvdXQgaG93IHRvIHBsYW4gZ3JvdXBp bmcgc2V0cyB3aGVuIHNwaWxsaW5nIGhhc2gKKwkJICogdGFibGVzIGlzIGFuIG9wdGlvbgogCQkg Ki8KIAkJaWYgKGhhc2hzaXplID4gd29ya19tZW0gKiAxMDI0TCAmJiBnZC0+cm9sbHVwcykKIAkJ CXJldHVybjsJCQkJLyogbm9wZSwgd29uJ3QgZml0ICovCkBAIC02NTMzLDcgKzY1MzYsOCBAQCBh ZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpp bnB1dF9yZWwsCiAJCQkgKiB3ZXJlIHVuYWJsZSB0byBzb3J0IGFib3ZlLCB0aGVuIHdlJ2QgYmV0 dGVyIGdlbmVyYXRlIGEgUGF0aCwgc28KIAkJCSAqIHRoYXQgd2UgYXQgbGVhc3QgaGF2ZSBvbmUu CiAJCQkgKi8KLQkJCWlmIChoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0TCB8fAor CQkJaWYgKGVuYWJsZV9oYXNoYWdnX3NwaWxsIHx8CisJCQkJaGFzaGFnZ3RhYmxlc2l6ZSA8IHdv cmtfbWVtICogMTAyNEwgfHwKIAkJCQlncm91cGVkX3JlbC0+cGF0aGxpc3QgPT0gTklMKQogCQkJ ewogCQkJCS8qCkBAIC02NTY2LDcgKzY1NzAsOCBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVs KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCQkJCQkJ CSAgYWdnX2ZpbmFsX2Nvc3RzLAogCQkJCQkJCQkJCQkJCQkgIGROdW1Hcm91cHMpOwogCi0JCQlp ZiAoaGFzaGFnZ3RhYmxlc2l6ZSA8IHdvcmtfbWVtICogMTAyNEwpCisJCQlpZiAoZW5hYmxlX2hh c2hhZ2dfc3BpbGwgfHwKKwkJCQloYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0gKiAxMDI0TCkK IAkJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGggKikKIAkJCQkJCSBjcmVhdGVfYWdnX3Bh dGgocm9vdCwKIAkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCkBAIC02ODM1LDcgKzY4NDAsNyBAQCBj cmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJICogVGVu dGF0aXZlbHkgcHJvZHVjZSBhIHBhcnRpYWwgSGFzaEFnZyBQYXRoLCBkZXBlbmRpbmcgb24gaWYg aXQKIAkJICogbG9va3MgYXMgaWYgdGhlIGhhc2ggdGFibGUgd2lsbCBmaXQgaW4gd29ya19tZW0u CiAJCSAqLwotCQlpZiAoaGFzaGFnZ3RhYmxlc2l6ZSA8IHdvcmtfbWVtICogMTAyNEwgJiYKKwkJ aWYgKChlbmFibGVfaGFzaGFnZ19zcGlsbCB8fCBoYXNoYWdndGFibGVzaXplIDwgd29ya19tZW0g KiAxMDI0TCkgJiYKIAkJCWNoZWFwZXN0X3RvdGFsX3BhdGggIT0gTlVMTCkKIAkJewogCQkJYWRk X3BhdGgocGFydGlhbGx5X2dyb3VwZWRfcmVsLCAoUGF0aCAqKQpAQCAtNjg2Miw3ICs2ODY3LDcg QEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCQkgICBkTnVtUGFydGlhbFBhcnRpYWxHcm91cHMpOwogCiAJCS8qIERvIHRoZSBzYW1lIGZv ciBwYXJ0aWFsIHBhdGhzLiAqLwotCQlpZiAoaGFzaGFnZ3RhYmxlc2l6ZSA8IHdvcmtfbWVtICog MTAyNEwgJiYKKwkJaWYgKChlbmFibGVfaGFzaGFnZ19zcGlsbCB8fCBoYXNoYWdndGFibGVzaXpl IDwgd29ya19tZW0gKiAxMDI0TCkgJiYKIAkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxM KQogCQl7CiAJCQlhZGRfcGFydGlhbF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwgKFBhdGgg KikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDYwYzkzZWU3YzU5Li43 ZjVmYzZlYmI1MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5v ZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC0yOTQ5 LDYgKzI5NDksNyBAQCBjcmVhdGVfYWdnX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJcGF0aG5v ZGUtPmFnZ3N0cmF0ZWd5ID0gYWdnc3RyYXRlZ3k7CiAJcGF0aG5vZGUtPmFnZ3NwbGl0ID0gYWdn c3BsaXQ7CiAJcGF0aG5vZGUtPm51bUdyb3VwcyA9IG51bUdyb3VwczsKKwlwYXRobm9kZS0+dHJh bnNTcGFjZSA9IGFnZ2Nvc3RzID8gYWdnY29zdHMtPnRyYW5zaXRpb25TcGFjZSA6IDA7CiAJcGF0 aG5vZGUtPmdyb3VwQ2xhdXNlID0gZ3JvdXBDbGF1c2U7CiAJcGF0aG5vZGUtPnF1YWwgPSBxdWFs OwogCkBAIC0zMDM2LDYgKzMwMzcsNyBAQCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsCiAJcGF0aG5vZGUtPmFnZ3N0cmF0ZWd5ID0gYWdnc3RyYXRlZ3k7CiAJcGF0 aG5vZGUtPnJvbGx1cHMgPSByb2xsdXBzOwogCXBhdGhub2RlLT5xdWFsID0gaGF2aW5nX3F1YWw7 CisJcGF0aG5vZGUtPnRyYW5zU3BhY2UgPSBhZ2dfY29zdHMgPyBhZ2dfY29zdHMtPnRyYW5zaXRp b25TcGFjZSA6IDA7CiAKIAlBc3NlcnQocm9sbHVwcyAhPSBOSUwpOwogCUFzc2VydChhZ2dzdHJh dGVneSAhPSBBR0dfUExBSU4gfHwgbGlzdF9sZW5ndGgocm9sbHVwcykgPT0gMSk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCmluZGV4IDNhMDkxMDIyZTI0Li43NTJmMDllM2EzNSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMKQEAgLTEyMCw2ICsxMjAsNyBAQCBib29sCQllbmFibGVGc3luYyA9 IHRydWU7CiBib29sCQlhbGxvd1N5c3RlbVRhYmxlTW9kcyA9IGZhbHNlOwogaW50CQkJd29ya19t ZW0gPSAxMDI0OwogaW50CQkJbWFpbnRlbmFuY2Vfd29ya19tZW0gPSAxNjM4NDsKK2Jvb2wJCWhh c2hhZ2dfbWVtX292ZXJmbG93ID0gZmFsc2U7CiBpbnQJCQltYXhfcGFyYWxsZWxfbWFpbnRlbmFu Y2Vfd29ya2VycyA9IDI7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA4ZDk1MWNlNDA0Yy4u NDY3ZjQyOTQ0ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtOTU4LDYgKzk1OCwyNiBAQCBzdGF0 aWMgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJdHJ1ZSwKIAkJ TlVMTCwgTlVMTCwgTlVMTAogCX0sCisJeworCQl7ImVuYWJsZV9oYXNoYWdnX3NwaWxsIiwgUEdD X1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMg dGhlIHBsYW5uZXIncyB1c2Ugb2YgaGFzaGVkIGFnZ3JlZ2F0aW9uIHBsYW5zIHRoYXQgYXJlIGV4 cGVjdGVkIHRvIGV4Y2VlZCB3b3JrX21lbS4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgor CQl9LAorCQkmZW5hYmxlX2hhc2hhZ2dfc3BpbGwsCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5V TEwKKwl9LAorCXsKKwkJeyJoYXNoYWdnX21lbV9vdmVyZmxvdyIsIFBHQ19VU0VSU0VULCBRVUVS WV9UVU5JTkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGhhc2hlZCBhZ2dyZWdh dGlvbiB0byBvdmVyZmxvdyB3b3JrX21lbSBhdCBleGVjdXRpb24gdGltZS4iKSwKKwkJCU5VTEws CisJCQlHVUNfRVhQTEFJTgorCQl9LAorCQkmaGFzaGFnZ19tZW1fb3ZlcmZsb3csCisJCWZhbHNl LAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKIAl7CiAJCXsiZW5hYmxlX21hdGVyaWFsIiwgUEdD X1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMg dGhlIHBsYW5uZXIncyB1c2Ugb2YgbWF0ZXJpYWxpemF0aW9uLiIpLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNF eHByLmgKaW5kZXggZDIxZGJlYWQwYTIuLmU1MGE3YWQ2NzEyIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjRXhwci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNF eHByLmgKQEAgLTIyNiw5ICsyMjYsMTMgQEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9Q X0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tfQVJHUywKIAlFRU9QX0FHR19TVFJJQ1RfSU5QVVRfQ0hF Q0tfTlVMTFMsCiAJRUVPUF9BR0dfSU5JVF9UUkFOUywKKwlFRU9QX0FHR19JTklUX1RSQU5TX1NQ SUxMRUQsCiAJRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNLLAorCUVFT1BfQUdHX1NUUklDVF9U UkFOU19DSEVDS19TUElMTEVELAogCUVFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFMLAorCUVFT1Bf QUdHX1BMQUlOX1RSQU5TX0JZVkFMX1NQSUxMRUQsCiAJRUVPUF9BR0dfUExBSU5fVFJBTlMsCisJ RUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJTExFRCwKIAlFRU9QX0FHR19PUkRFUkVEX1RSQU5TX0RB VFVNLAogCUVFT1BfQUdHX09SREVSRURfVFJBTlNfVFVQTEUsCiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRv ci5oCmluZGV4IDYyOThjN2M4Y2FkLi5lOGQ4OGYyY2UyNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRv ci5oCkBAIC0xNDAsMTEgKzE0MCwxNyBAQCBleHRlcm4gVHVwbGVIYXNoVGFibGUgQnVpbGRUdXBs ZUhhc2hUYWJsZUV4dChQbGFuU3RhdGUgKnBhcmVudCwKIGV4dGVybiBUdXBsZUhhc2hFbnRyeSBM b29rdXBUdXBsZUhhc2hFbnRyeShUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsCiAJCQkJCQkJCQkJ ICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJICAgYm9vbCAqaXNuZXcpOworZXh0 ZXJuIFR1cGxlSGFzaEVudHJ5IExvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaChUdXBsZUhhc2hUYWJs ZSBoYXNodGFibGUsCisJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJ CQkJCQkgICBib29sICppc25ldywgdWludDMyIGhhc2gpOwogZXh0ZXJuIFR1cGxlSGFzaEVudHJ5 IEZpbmRUdXBsZUhhc2hFbnRyeShUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsCiAJCQkJCQkJCQkJ IFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCQkJCSBFeHByU3RhdGUgKmVxY29tcCwKIAkJ CQkJCQkJCQkgRm1nckluZm8gKmhhc2hmdW5jdGlvbnMpOworZXh0ZXJuIHVpbnQzMiBUdXBsZUhh c2hUYWJsZUhhc2goc3RydWN0IHR1cGxlaGFzaF9oYXNoICp0YiwKKwkJCQkJCQkJIGNvbnN0IE1p bmltYWxUdXBsZSB0dXBsZSk7CiBleHRlcm4gdm9pZCBSZXNldFR1cGxlSGFzaFRhYmxlKFR1cGxl SGFzaFRhYmxlIGhhc2h0YWJsZSk7CitleHRlcm4gdm9pZCBEZXN0cm95VHVwbGVIYXNoVGFibGUo VHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlKTsKIAogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5j dGlvbnMgaW4gZXhlY0p1bmsuYwpAQCAtMjUwLDcgKzI1Niw3IEBAIGV4dGVybiBFeHByU3RhdGUg KkV4ZWNJbml0UXVhbChMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBhcmVudCk7CiBleHRlcm4gRXhw clN0YXRlICpFeGVjSW5pdENoZWNrKExpc3QgKnF1YWwsIFBsYW5TdGF0ZSAqcGFyZW50KTsKIGV4 dGVybiBMaXN0ICpFeGVjSW5pdEV4cHJMaXN0KExpc3QgKm5vZGVzLCBQbGFuU3RhdGUgKnBhcmVu dCk7CiBleHRlcm4gRXhwclN0YXRlICpFeGVjQnVpbGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdnc3Rh dGUsIHN0cnVjdCBBZ2dTdGF0ZVBlclBoYXNlRGF0YSAqcGhhc2UsCi0JCQkJCQkJCQlib29sIGRv U29ydCwgYm9vbCBkb0hhc2gpOworCQkJCQkJCQkJYm9vbCBkb1NvcnQsIGJvb2wgZG9IYXNoLCBi b29sIHNwaWxsZWQpOwogZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0J1aWxkR3JvdXBpbmdFcXVhbChU dXBsZURlc2MgbGRlc2MsIFR1cGxlRGVzYyByZGVzYywKIAkJCQkJCQkJCQkgY29uc3QgVHVwbGVU YWJsZVNsb3RPcHMgKmxvcHMsIGNvbnN0IFR1cGxlVGFibGVTbG90T3BzICpyb3BzLAogCQkJCQkJ CQkJCSBpbnQgbnVtQ29scywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVB Z2cuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBZ2cuaAppbmRleCA2OGM5ZTVmNTQwMC4u ZTU4MTgwZTkzN2EgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBZ2cuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQWdnLmgKQEAgLTMwMiw2ICszMDIsOCBAQCB0 eXBlZGVmIHN0cnVjdCBBZ2dTdGF0ZVBlckhhc2hEYXRhCiAJQXR0ck51bWJlciAqaGFzaEdycENv bElkeElucHV0OyAvKiBoYXNoIGNvbCBpbmRpY2VzIGluIGlucHV0IHNsb3QgKi8KIAlBdHRyTnVt YmVyICpoYXNoR3JwQ29sSWR4SGFzaDsJLyogaW5kaWNlcyBpbiBoYXNoIHRhYmxlIHR1cGxlcyAq LwogCUFnZwkJICAgKmFnZ25vZGU7CQkvKiBvcmlnaW5hbCBBZ2cgbm9kZSwgZm9yIG51bUdyb3Vw cyBldGMuICovCisJaW50CQkJbnVtTmVlZGVkQ29sc0lucHV0OyAvKiBudW1iZXIgb2YgY29sdW1u cyBuZWVkZWQgZnJvbSBpbnB1dCAqLworCUF0dHJOdW1iZXIgKmFsbE5lZWRlZENvbHNJbnB1dDsg LyogYWxsIGNvbHVtbnMgbmVlZGVkIGZyb20gaW5wdXQgKi8KIH0JCQlBZ2dTdGF0ZVBlckhhc2hE YXRhOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1 ZGUvbWlzY2FkbWluLmgKaW5kZXggZWQ4MGYxZDY2ODEuLjc3YTg3Y2RlZDQ0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApA QCAtMjQ0LDYgKzI0NCw3IEBAIGV4dGVybiBib29sIGVuYWJsZUZzeW5jOwogZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgYWxsb3dTeXN0ZW1UYWJsZU1vZHM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50 IHdvcmtfbWVtOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYWludGVuYW5jZV93b3JrX21lbTsK K2V4dGVybiBQR0RMTElNUE9SVCBib29sIGhhc2hhZ2dfbWVtX292ZXJmbG93OwogZXh0ZXJuIFBH RExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2VyczsKIAogZXh0ZXJu IGludAlWYWN1dW1Db3N0UGFnZUhpdDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMGMyYTc3YWFm OGQuLjhkNGEzNmEzNTM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMjA2NiwxMyArMjA2Niwz MCBAQCB0eXBlZGVmIHN0cnVjdCBBZ2dTdGF0ZQogCUhlYXBUdXBsZQlncnBfZmlyc3RUdXBsZTsg LyogY29weSBvZiBmaXJzdCB0dXBsZSBvZiBjdXJyZW50IGdyb3VwICovCiAJLyogdGhlc2UgZmll bGRzIGFyZSB1c2VkIGluIEFHR19IQVNIRUQgYW5kIEFHR19NSVhFRCBtb2RlczogKi8KIAlib29s CQl0YWJsZV9maWxsZWQ7CS8qIGhhc2ggdGFibGUgZmlsbGVkIHlldD8gKi8KLQlpbnQJCQludW1f aGFzaGVzOworCWludAkJCW51bV9oYXNoZXM7CQkvKiBudW1iZXIgb2YgaGFzaCB0YWJsZXMgYWN0 aXZlIGF0IG9uY2UgKi8KKwlib29sCQloYXNoX3NwaWxsZWQ7CS8qIGFueSBoYXNoIHRhYmxlIGV2 ZXIgc3BpbGxlZD8gKi8KKwlkb3VibGUJCWhhc2hlbnRyeXNpemU7CS8qIGVzdGltYXRlIHJldmlz ZWQgZHVyaW5nIGV4ZWN1dGlvbiAqLworCXN0cnVjdCBIYXNoQWdnU3BpbGwgKmhhc2hfc3BpbGxz OyAvKiBIYXNoQWdnU3BpbGwgZm9yIGVhY2ggaGFzaCB0YWJsZSwKKwkJCQkJCQkJCQkgZXhpc3Rz IG9ubHkgZHVyaW5nIGZpcnN0IHBhc3MgaWYgc3BpbGxlZCAqLworCVR1cGxlVGFibGVTbG90ICpo YXNoX3NwaWxsX3Nsb3Q7IC8qIHNsb3QgZm9yIHJlYWRpbmcgZnJvbSBzcGlsbCBmaWxlcyAqLwor CWJvb2wJCWhhc2hfbm9fbmV3X2dyb3VwczsJLyogd2UgaGl0IGEgbGltaXQgZHVyaW5nIHRoZSBj dXJyZW50IGJhdGNoCisJCQkJCQkJCQkgICBhbmQgd2UgbXVzdCBub3QgY3JlYXRlIG5ldyBncm91 cHMgKi8KKwlTaXplCQloYXNoX21lbV9jdXJyZW50OyAvKiBjdXJyZW50IGhhc2ggdGFibGUgbWVt b3J5IHVzYWdlICovCisJU2l6ZQkJaGFzaF9tZW1fbGltaXQ7CS8qIGxpbWl0IGJlZm9yZSBzcGls bGluZyBoYXNoIHRhYmxlICovCisJU2l6ZQkJaGFzaF9tZW1fcGVhazsJLyogcGVhayBoYXNoIHRh YmxlIG1lbW9yeSB1c2FnZSAqLworCWxvbmcJCWhhc2hfbmdyb3Vwc19jdXJyZW50OwkvKiBudW1i ZXIgb2YgZ3JvdXBzIGN1cnJlbnRseSBpbgorCQkJCQkJCQkJCSAgIG1lbW9yeSBpbiBhbGwgaGFz aCB0YWJsZXMgKi8KKwlsb25nCQloYXNoX25ncm91cHNfbGltaXQ7CS8qIGxpbWl0IGJlZm9yZSBz cGlsbGluZyBoYXNoIHRhYmxlICovCisJdWludDY0CQloYXNoX2Rpc2tfdXNlZDsgLyogYnl0ZXMg b2YgZGlzayBzcGFjZSB1c2VkICovCisJaW50CQkJaGFzaF9iYXRjaGVzX3VzZWQ7CS8qIGJhdGNo ZXMgdXNlZCBkdXJpbmcgZW50aXJlIGV4ZWN1dGlvbiAqLworCUxpc3QJICAgKmhhc2hfYmF0Y2hl czsJLyogaGFzaCBiYXRjaGVzIHJlbWFpbmluZyB0byBiZSBwcm9jZXNzZWQgKi8KKwogCUFnZ1N0 YXRlUGVySGFzaCBwZXJoYXNoOwkvKiBhcnJheSBvZiBwZXItaGFzaHRhYmxlIGRhdGEgKi8KIAlB Z2dTdGF0ZVBlckdyb3VwICpoYXNoX3Blcmdyb3VwOwkvKiBncm91cGluZyBzZXQgaW5kZXhlZCBh cnJheSBvZgogCQkJCQkJCQkJCSAqIHBlci1ncm91cCBwb2ludGVycyAqLwogCiAJLyogc3VwcG9y dCBmb3IgZXZhbHVhdGlvbiBvZiBhZ2cgaW5wdXQgZXhwcmVzc2lvbnM6ICovCi0jZGVmaW5lIEZJ RUxETk9fQUdHU1RBVEVfQUxMX1BFUkdST1VQUyAzNAorI2RlZmluZSBGSUVMRE5PX0FHR1NUQVRF X0FMTF9QRVJHUk9VUFMgNDcKIAlBZ2dTdGF0ZVBlckdyb3VwICphbGxfcGVyZ3JvdXBzOwkvKiBh cnJheSBvZiBmaXJzdCAtPnBlcmdyb3VwcywgdGhhbgogCQkJCQkJCQkJCSAqIC0+aGFzaF9wZXJn cm91cCAqLwogCVByb2plY3Rpb25JbmZvICpjb21iaW5lZHByb2o7CS8qIHByb2plY3Rpb24gbWFj aGluZXJ5ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDMxYjYzMWNmZTBmLi5mODU1NzQwNDcw MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE2NjMsNiArMTY2Myw3IEBAIHR5cGVkZWYgc3Ry dWN0IEFnZ1BhdGgKIAlBZ2dTdHJhdGVneSBhZ2dzdHJhdGVneTsJLyogYmFzaWMgc3RyYXRlZ3ks IHNlZSBub2Rlcy5oICovCiAJQWdnU3BsaXQJYWdnc3BsaXQ7CQkvKiBhZ2ctc3BsaXR0aW5nIG1v ZGUsIHNlZSBub2Rlcy5oICovCiAJZG91YmxlCQludW1Hcm91cHM7CQkvKiBlc3RpbWF0ZWQgbnVt YmVyIG9mIGdyb3VwcyBpbiBpbnB1dCAqLworCWludDMyCQl0cmFuc1NwYWNlOwkJLyogZXN0aW1h dGVkIHRyYW5zaXRpb24gc3RhdGUgc2l6ZSAqLwogCUxpc3QJICAgKmdyb3VwQ2xhdXNlOwkvKiBh IGxpc3Qgb2YgU29ydEdyb3VwQ2xhdXNlJ3MgKi8KIAlMaXN0CSAgICpxdWFsOwkJCS8qIHF1YWxz IChIQVZJTkcgcXVhbHMpLCBpZiBhbnkgKi8KIH0gQWdnUGF0aDsKQEAgLTE3MDAsNiArMTcwMSw3 IEBAIHR5cGVkZWYgc3RydWN0IEdyb3VwaW5nU2V0c1BhdGgKIAlBZ2dTdHJhdGVneSBhZ2dzdHJh dGVneTsJLyogYmFzaWMgc3RyYXRlZ3kgKi8KIAlMaXN0CSAgICpyb2xsdXBzOwkJLyogbGlzdCBv ZiBSb2xsdXBEYXRhICovCiAJTGlzdAkgICAqcXVhbDsJCQkvKiBxdWFscyAoSEFWSU5HIHF1YWxz KSwgaWYgYW55ICovCisJaW50MzIJCXRyYW5zU3BhY2U7CQkvKiBlc3RpbWF0ZWQgdHJhbnNpdGlv biBzdGF0ZSBzaXplICovCiB9IEdyb3VwaW5nU2V0c1BhdGg7CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rl cy5oCmluZGV4IDQ3N2I0ZGExOTJjLi4zNjBhNDgwMWY1OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK QEAgLTgxMyw2ICs4MTMsNyBAQCB0eXBlZGVmIHN0cnVjdCBBZ2cKIAlPaWQJCSAgICpncnBPcGVy YXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KIAlPaWQJCSAg ICpncnBDb2xsYXRpb25zOwogCWxvbmcJCW51bUdyb3VwczsJCS8qIGVzdGltYXRlZCBudW1iZXIg b2YgZ3JvdXBzIGluIGlucHV0ICovCisJaW50MzIJCXRyYW5zU3BhY2U7CQkvKiBlc3RpbWF0ZWQg dHJhbnNpdGlvbiBzdGF0ZSBzaXplICovCiAJQml0bWFwc2V0ICAqYWdnUGFyYW1zOwkJLyogSURz IG9mIFBhcmFtcyB1c2VkIGluIEFnZ3JlZiBpbnB1dHMgKi8KIAkvKiBOb3RlOiBwbGFubmVyIHBy b3ZpZGVzIG51bUdyb3VwcyAmIGFnZ1BhcmFtcyBvbmx5IGluIEhBU0hFRC9NSVhFRCBjYXNlICov CiAJTGlzdAkgICAqZ3JvdXBpbmdTZXRzOwkvKiBncm91cGluZyBzZXRzIHRvIHVzZSAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmgKaW5kZXggYjNkMGI0ZjZmYmMuLmI3MmUyZDA4MjkwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9j b3N0LmgKQEAgLTU0LDYgKzU0LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2Jp dG1hcHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVy biBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zb3J0OwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX2hhc2hhZ2c7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaGFzaGFnZ19z cGlsbDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9uZXN0bG9vcDsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV9tYXRlcmlhbDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9tZXJnZWpvaW47CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxh bm1haW4uaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oCmluZGV4IGU3YWFkZGQ1 MGQ2Li40MWU0YjRhMzM2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5t YWluLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKQEAgLTU1LDcgKzU1 LDcgQEAgZXh0ZXJuIEFnZyAqbWFrZV9hZ2coTGlzdCAqdGxpc3QsIExpc3QgKnF1YWwsCiAJCQkJ CSBBZ2dTdHJhdGVneSBhZ2dzdHJhdGVneSwgQWdnU3BsaXQgYWdnc3BsaXQsCiAJCQkJCSBpbnQg bnVtR3JvdXBDb2xzLCBBdHRyTnVtYmVyICpncnBDb2xJZHgsIE9pZCAqZ3JwT3BlcmF0b3JzLCBP aWQgKmdycENvbGxhdGlvbnMsCiAJCQkJCSBMaXN0ICpncm91cGluZ1NldHMsIExpc3QgKmNoYWlu LAotCQkJCQkgZG91YmxlIGROdW1Hcm91cHMsIFBsYW4gKmxlZnR0cmVlKTsKKwkJCQkJIGRvdWJs ZSBkTnVtR3JvdXBzLCBpbnQzMiB0cmFuc1NwYWNlLCBQbGFuICpsZWZ0dHJlZSk7CiBleHRlcm4g TGltaXQgKm1ha2VfbGltaXQoUGxhbiAqbGVmdHRyZWUsIE5vZGUgKmxpbWl0T2Zmc2V0LCBOb2Rl ICpsaW1pdENvdW50KTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvYWdncmVnYXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMu b3V0CmluZGV4IGQwOTFhZTRjNmU0Li45MmU1ZGJhZDc3ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CkBAIC0yMzMxLDMgKzIzMzEsOTUgQEAgZXhwbGFpbiAoY29z dHMgb2ZmKQogICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG9uZWsKICg4IHJvd3MpCiAK Ky0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBw bGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBj YXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0tCitzZXQgd29ya19tZW09JzY0a0InOwor LS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZy4KK3NldCBlbmFibGVfaGFzaGFnZyA9IGZh bHNlOworc2V0IGppdF9hYm92ZV9jb3N0ID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVj dCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMwor ICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7 CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVn YXRlCisgICBHcm91cCBLZXk6ICgoZyAlIDEwMDAwMCkpCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6ICgoZyAlIDEwMDAwMCkpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBn ZW5lcmF0ZV9zZXJpZXMgZworKDUgcm93cykKKworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF8xIGFz CitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikg YXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGcl MTAwMDAwOworc2V0IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7CitjcmVhdGUgdGFibGUgYWdn X2dyb3VwXzIgYXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgc3VtKDc6OmludDQpIGFz IGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisg IGdyb3VwIGJ5IGcvMjsKK2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMyBhcworc2VsZWN0IChnLzIp OjpudW1lcmljIGFzIGMxLCBhcnJheV9hZ2coZzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFz IGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOwor LS0gUHJvZHVjZSByZXN1bHRzIHdpdGggaGFzaCBhZ2dyZWdhdGlvbgorc2V0IGVuYWJsZV9oYXNo YWdnID0gdHJ1ZTsKK3NldCBlbmFibGVfc29ydCA9IGZhbHNlOworc2V0IGppdF9hYm92ZV9jb3N0 ID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6 Om51bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3Nlcmllcygw LCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7CisgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogKGcgJSAxMDAwMDApCisgICAt PiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworKDMgcm93cykKKworY3JlYXRl IHRhYmxlIGFnZ19oYXNoXzEgYXMKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51bWVy aWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5 OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7CitzZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVs dDsKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8yIGFzCitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMg YzEsIHN1bSg3OjppbnQ0KSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBnLzI7CitjcmVhdGUgdGFibGUgYWdnX2hhc2hf MyBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBhcnJheV9hZ2coZzo6bnVtZXJpYykg YXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTkpIGcK KyAgZ3JvdXAgYnkgZy8yOworc2V0IGVuYWJsZV9zb3J0ID0gdHJ1ZTsKK3NldCB3b3JrX21lbSB0 byBkZWZhdWx0OworLS0gQ29tcGFyZSBncm91cCBhZ2dyZWdhdGlvbiByZXN1bHRzIHRvIGhhc2gg YWdncmVnYXRpb24gcmVzdWx0cworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMSBleGNlcHQgc2Vs ZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMSkKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBhZ2df Z3JvdXBfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8xKTsKKyBjMSB8IGMyIHwgYzMg CistLS0tKy0tLS0rLS0tLQorKDAgcm93cykKKworKHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMiBl eGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMikKKyAgdW5pb24gYWxsCisoc2VsZWN0ICog ZnJvbSBhZ2dfZ3JvdXBfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8yKTsKKyBjMSB8 IGMyIHwgYzMgCistLS0tKy0tLS0rLS0tLQorKDAgcm93cykKKworKHNlbGVjdCAqIGZyb20gYWdn X2hhc2hfMyBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMykKKyAgdW5pb24gYWxsCiso c2VsZWN0ICogZnJvbSBhZ2dfZ3JvdXBfMyBleGNlcHQgc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8z KTsKKyBjMSB8IGMyIHwgYzMgCistLS0tKy0tLS0rLS0tLQorKDAgcm93cykKKworZHJvcCB0YWJs ZSBhZ2dfZ3JvdXBfMTsKK2Ryb3AgdGFibGUgYWdnX2dyb3VwXzI7Citkcm9wIHRhYmxlIGFnZ19n cm91cF8zOworZHJvcCB0YWJsZSBhZ2dfaGFzaF8xOworZHJvcCB0YWJsZSBhZ2dfaGFzaF8yOwor ZHJvcCB0YWJsZSBhZ2dfaGFzaF8zOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9ncm91cGluZ3NldHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ncm91cGlu Z3NldHMub3V0CmluZGV4IGMxZjgwMmM4OGE3Li43NjdmNjBhOTZjNyAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ncm91cGluZ3NldHMub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvZ3JvdXBpbmdzZXRzLm91dApAQCAtMTYzMyw0ICsxNjMzLDEyNyBAQCBz ZWxlY3Qgdnx8J2EnLCBjYXNlIHdoZW4gZ3JvdXBpbmcodnx8J2EnKSA9IDEgdGhlbiAxIGVsc2Ug MCBlbmQsIGNvdW50KCopCiAgICAgICAgICAgfCAgICAxIHwgICAgIDIKICg0IHJvd3MpCiAKKy0t CistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFu cyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNl cyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0tCitTRVQgd29ya19tZW09JzY0a0InOworLS0g UHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZy4KK3NldCBlbmFibGVfaGFzaGFnZyA9IGZhbHNl Oworc2V0IGppdF9hYm92ZV9jb3N0ID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBn MTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkg ZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBn MTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBj dWJlIChnMTAwMCxnMTAwLGcxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisg ICBHcm91cCBLZXk6ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkK KyAgIEdyb3VwIEtleTogKChnLmcgJSAxMDAwKSksICgoZy5nICUgMTAwKSkKKyAgIEdyb3VwIEtl eTogKChnLmcgJSAxMDAwKSkKKyAgIEdyb3VwIEtleTogKCkKKyAgIFNvcnQgS2V5OiAoKGcuZyAl IDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMCkpLCAoKGcu ZyAlIDEwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMCkpCisgICBTb3J0IEtleTogKChn LmcgJSAxMCkpLCAoKGcuZyAlIDEwMDApKQorICAgICBHcm91cCBLZXk6ICgoZy5nICUgMTApKSwg KChnLmcgJSAxMDAwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwKSkKKyAgIC0+ICBTb3J0 CisgICAgICAgICBTb3J0IEtleTogKChnLmcgJSAxMDAwKSksICgoZy5nICUgMTAwKSksICgoZy5n ICUgMTApKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcK KygxNCByb3dzKQorCitjcmVhdGUgdGFibGUgZ3NfZ3JvdXBfMSBhcworc2VsZWN0IGcxMDAwLCBn MTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisg IChzZWxlY3QgZyUxMDAwIGFzIGcxMDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZwor ICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcx MDAwLGcxMDAsZzEwKTsKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworY3JlYXRlIHRh YmxlIGdzX2dyb3VwXzIgYXMKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJp YyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGcvMjAgYXMgZzEwMDAs IGcvMjAwIGFzIGcxMDAsIGcvMjAwMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDAsMTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKK2NyZWF0ZSB0 YWJsZSBnc19ncm91cF8zIGFzCitzZWxlY3QgZzEwMCwgZzEwLCBhcnJheV9hZ2coZykgYXMgYSwg Y291bnQoKikgYXMgYywgbWF4KGc6OnRleHQpIGFzIG0gZnJvbQorICAoc2VsZWN0IGcvMjAwIGFz IGcxMDAsIGcvMjAwMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTkp IGcpIHMKK2dyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGcxMDAsZzEwKTsKKy0tIFByb2R1Y2UgcmVz dWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24uCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSB0cnVlOwor c2V0IGVuYWJsZV9zb3J0ID0gZmFsc2U7CitzZXQgd29ya19tZW09JzY0a0InOworc2V0IGppdF9h Ym92ZV9jb3N0ID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnMTAwMCwgZzEwMCwg ZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2Vs ZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZy b20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxn MTAwLGcxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6 ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgIEdyb3VwIEtl eTogKChnLmcgJSAxMDAwKSksICgoZy5nICUgMTAwKSkKKyAgIEdyb3VwIEtleTogKChnLmcgJSAx MDAwKSkKKyAgIEdyb3VwIEtleTogKCkKKyAgIFNvcnQgS2V5OiAoKGcuZyAlIDEwMCkpLCAoKGcu ZyAlIDEwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAg ICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwMCkpCisgICBTb3J0IEtleTogKChnLmcgJSAxMCkpLCAo KGcuZyAlIDEwMDApKQorICAgICBHcm91cCBLZXk6ICgoZy5nICUgMTApKSwgKChnLmcgJSAxMDAw KSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwKSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBT b3J0IEtleTogKChnLmcgJSAxMDAwKSksICgoZy5nICUgMTAwKSksICgoZy5nICUgMTApKQorICAg ICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKygxNCByb3dzKQor CitjcmVhdGUgdGFibGUgZ3NfaGFzaF8xIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3Vt KGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnJTEw MDAgYXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVy YXRlX3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTAp Oworc2V0IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7CitjcmVhdGUgdGFibGUgZ3NfaGFzaF8y IGFzCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwg bWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnLzIwIGFzIGcxMDAwLCBnLzIwMCBhcyBnMTAw LCBnLzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBz Citncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CitjcmVhdGUgdGFibGUgZ3NfaGFzaF8z IGFzCitzZWxlY3QgZzEwMCwgZzEwLCBhcnJheV9hZ2coZykgYXMgYSwgY291bnQoKikgYXMgYywg bWF4KGc6OnRleHQpIGFzIG0gZnJvbQorICAoc2VsZWN0IGcvMjAwIGFzIGcxMDAsIGcvMjAwMCBh cyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTkpIGcpIHMKK2dyb3VwIGJ5 IGdyb3VwaW5nIHNldHMgKGcxMDAsZzEwKTsKK3NldCBlbmFibGVfc29ydCA9IHRydWU7CitzZXQg d29ya19tZW0gdG8gZGVmYXVsdDsKKy0tIENvbXBhcmUgcmVzdWx0cworKHNlbGVjdCAqIGZyb20g Z3NfaGFzaF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzEpCisgIHVuaW9uIGFsbAor KHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMSBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19oYXNoXzEp OworIGcxMDAwIHwgZzEwMCB8IGcxMCB8IHN1bSB8IGNvdW50IHwgbWF4IAorLS0tLS0tLSstLS0t LS0rLS0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLQorKDAgcm93cykKKworKHNlbGVjdCAqIGZyb20g Z3NfaGFzaF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzIpCisgIHVuaW9uIGFsbAor KHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19oYXNoXzIp OworIGcxMDAwIHwgZzEwMCB8IGcxMCB8IHN1bSB8IGNvdW50IHwgbWF4IAorLS0tLS0tLSstLS0t LS0rLS0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLQorKDAgcm93cykKKworKHNlbGVjdCBnMTAwLGcx MCx1bm5lc3QoYSksYyxtIGZyb20gZ3NfaGFzaF8zIGV4Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAs dW5uZXN0KGEpLGMsbSBmcm9tIGdzX2dyb3VwXzMpCisgICAgdW5pb24gYWxsCisoc2VsZWN0IGcx MDAsZzEwLHVubmVzdChhKSxjLG0gZnJvbSBnc19ncm91cF8zIGV4Y2VwdAorICBzZWxlY3QgZzEw MCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2hhc2hfMyk7CisgZzEwMCB8IGcxMCB8IHVubmVz dCB8IGMgfCBtIAorLS0tLS0tKy0tLS0tKy0tLS0tLS0tKy0tLSstLS0KKygwIHJvd3MpCisKK2Ry b3AgdGFibGUgZ3NfZ3JvdXBfMTsKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMjsKK2Ryb3AgdGFibGUg Z3NfZ3JvdXBfMzsKK2Ryb3AgdGFibGUgZ3NfaGFzaF8xOworZHJvcCB0YWJsZSBnc19oYXNoXzI7 Citkcm9wIHRhYmxlIGdzX2hhc2hfMzsKIC0tIGVuZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0CmluZGV4IGYzNjk2YzZkMWRlLi4xMWM2ZjUwZmJmYSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3RfZGlzdGluY3Qub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dApAQCAt MTQ4LDYgKzE0OCw2OCBAQCBTRUxFQ1QgY291bnQoKikgRlJPTQogICAgICA0CiAoMSByb3cpCiAK Ky0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBw bGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBj YXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0tCitTRVQgd29ya19tZW09JzY0a0InOwor LS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZy4KK1NFVCBlbmFibGVfaGFzaGFnZz1GQUxT RTsKK1NFVCBqaXRfYWJvdmVfY29zdD0wOworRVhQTEFJTiAoY29zdHMgb2ZmKQorU0VMRUNUIERJ U1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVuaXF1ZQorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiAoKGcgJSAxMDAwKSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2Fu IG9uIGdlbmVyYXRlX3NlcmllcyBnCisoNCByb3dzKQorCitDUkVBVEUgVEFCTEUgZGlzdGluY3Rf Z3JvdXBfMSBBUworU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3Nlcmllcygw LDk5OTkpIGc7CitTRVQgaml0X2Fib3ZlX2Nvc3QgVE8gREVGQVVMVDsKK0NSRUFURSBUQUJMRSBk aXN0aW5jdF9ncm91cF8yIEFTCitTRUxFQ1QgRElTVElOQ1QgKGclMTAwMCk6OnRleHQgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworU0VUIGVuYWJsZV9oYXNoYWdnPVRSVUU7CistLSBQ cm9kdWNlIHJlc3VsdHMgd2l0aCBoYXNoIGFnZ3JlZ2F0aW9uLgorU0VUIGVuYWJsZV9zb3J0PUZB TFNFOworU0VUIGppdF9hYm92ZV9jb3N0PTA7CitFWFBMQUlOIChjb3N0cyBvZmYpCitTRUxFQ1Qg RElTVElOQ1QgZyUxMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKyAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAoZyAl IDEwMDApCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworKDMgcm93 cykKKworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2hhc2hfMSBBUworU0VMRUNUIERJU1RJTkNUIGcl MTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CitTRVQgaml0X2Fib3ZlX2Nvc3Qg VE8gREVGQVVMVDsKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9oYXNoXzIgQVMKK1NFTEVDVCBESVNU SU5DVCAoZyUxMDAwKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CitTRVQg ZW5hYmxlX3NvcnQ9VFJVRTsKK1NFVCB3b3JrX21lbSBUTyBERUZBVUxUOworLS0gQ29tcGFyZSBy ZXN1bHRzCisoU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEgRVhDRVBUIFNFTEVDVCAqIEZS T00gZGlzdGluY3RfZ3JvdXBfMSkKKyAgVU5JT04gQUxMCisoU0VMRUNUICogRlJPTSBkaXN0aW5j dF9ncm91cF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2hhc2hfMSk7CisgP2NvbHVt bj8gCistLS0tLS0tLS0tCisoMCByb3dzKQorCisoU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNo XzEgRVhDRVBUIFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3JvdXBfMSkKKyAgVU5JT04gQUxMCiso U0VMRUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3Rp bmN0X2hhc2hfMSk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisoMCByb3dzKQorCitEUk9QIFRB QkxFIGRpc3RpbmN0X2hhc2hfMTsKK0RST1AgVEFCTEUgZGlzdGluY3RfaGFzaF8yOworRFJPUCBU QUJMRSBkaXN0aW5jdF9ncm91cF8xOworRFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91cF8yOwogLS0K IC0tIEFsc28sIHNvbWUgdGVzdHMgb2YgSVMgRElTVElOQ1QgRlJPTSwgd2hpY2ggZG9lc24ndCBx dWl0ZSBkZXNlcnZlIGl0cwogLS0gdmVyeSBvd24gcmVncmVzc2lvbiBmaWxlLgpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCBhMWM5MGViOTA1Ny4uYzQwYmY2YzE2ZWIg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC03NSw2ICs3NSw3IEBA IHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdl bmFibGUlJzsKICBlbmFibGVfYml0bWFwc2NhbiAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9n YXRoZXJtZXJnZSAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2hhc2hhZ2cgICAgICAgICAgICAg ICAgIHwgb24KKyBlbmFibGVfaGFzaGFnZ19zcGlsbCAgICAgICAgICAgfCBvbgogIGVuYWJsZV9o YXNoam9pbiAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAgICAg ICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAgfCBvbgpAQCAtODksNyAr OTAsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUg bGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBl bmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAg ICAgICAgICAgICB8IG9uCi0oMTcgcm93cykKKygxOCByb3dzKQogCiAtLSBUZXN0IHRoYXQgdGhl IHBnX3RpbWV6b25lX25hbWVzIGFuZCBwZ190aW1lem9uZV9hYmJyZXZzIHZpZXdzIGFyZQogLS0g bW9yZS1vci1sZXNzIHdvcmtpbmcuICBXZSBjYW4ndCB0ZXN0IHRoZWlyIGNvbnRlbnRzIGluIGFu eSBncmVhdCBkZXRhaWwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0 ZXMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKaW5kZXggMTdmYjI1 NmFlYzUuLmJjZDMzNmM1ODEyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dy ZWdhdGVzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbApAQCAt MTAxNywzICsxMDE3LDkxIEBAIHNlbGVjdCB2fHwnYScsIGNhc2Ugd2hlbiB2fHwnYScgPSAnYWEn IHRoZW4gMSBlbHNlIDAgZW5kLCBjb3VudCgqKQogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxl Y3QgMSBmcm9tIHRlbmsxCiAgICB3aGVyZSAoaHVuZHJlZCwgdGhvdXNhbmQpIGluIChzZWxlY3Qg dHdvdGhvdXNhbmQsIHR3b3Rob3VzYW5kIGZyb20gb25layk7CisKKy0tCistLSBDb21wYXJlIHJl c3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCist LSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdv cmtfbWVtIGxvdy4KKy0tCisKK3NldCB3b3JrX21lbT0nNjRrQic7CisKKy0tIFByb2R1Y2UgcmVz dWx0cyB3aXRoIHNvcnRpbmcuCisKK3NldCBlbmFibGVfaGFzaGFnZyA9IGZhbHNlOworCitzZXQg aml0X2Fib3ZlX2Nvc3QgPSAwOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAw MDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworCitjcmVh dGUgdGFibGUgYWdnX2dyb3VwXzEgYXMKK3NlbGVjdCBnJTEwMDAwMCBhcyBjMSwgc3VtKGc6Om51 bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAx OTk5OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBk ZWZhdWx0OworCitjcmVhdGUgdGFibGUgYWdnX2dyb3VwXzIgYXMKK3NlbGVjdCAoZy8yKTo6bnVt ZXJpYyBhcyBjMSwgc3VtKDc6OmludDQpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9tIGdl bmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdyb3VwIGJ5IGcvMjsKKworY3JlYXRlIHRhYmxl IGFnZ19ncm91cF8zIGFzCitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIGFycmF5X2FnZyhn OjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MCwgMTk5OSkgZworICBncm91cCBieSBnLzI7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhh c2ggYWdncmVnYXRpb24KKworc2V0IGVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK3NldCBlbmFibGVf c29ydCA9IGZhbHNlOworCitzZXQgaml0X2Fib3ZlX2Nvc3QgPSAwOworCitleHBsYWluIChjb3N0 cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291 bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3Vw IGJ5IGclMTAwMDAwOworCitjcmVhdGUgdGFibGUgYWdnX2hhc2hfMSBhcworc2VsZWN0IGclMTAw MDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20g Z2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5OSkgZworICBncm91cCBieSBnJTEwMDAwMDsKKworc2V0 IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7CisKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8yIGFz CitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIHN1bSg3OjppbnQ0KSBhcyBjMiwgY291bnQo KikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBn LzI7CisKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8zIGFzCitzZWxlY3QgKGcvMik6Om51bWVyaWMg YXMgYzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBnLzI7CisKK3NldCBlbmFi bGVfc29ydCA9IHRydWU7CitzZXQgd29ya19tZW0gdG8gZGVmYXVsdDsKKworLS0gQ29tcGFyZSBn cm91cCBhZ2dyZWdhdGlvbiByZXN1bHRzIHRvIGhhc2ggYWdncmVnYXRpb24gcmVzdWx0cworCiso c2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8x KQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8xIGV4Y2VwdCBzZWxlY3Qg KiBmcm9tIGFnZ19oYXNoXzEpOworCisoc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8yIGV4Y2VwdCBz ZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8yKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGFn Z19ncm91cF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzIpOworCisoc2VsZWN0ICog ZnJvbSBhZ2dfaGFzaF8zIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8zKQorICB1bmlv biBhbGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8zIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFn Z19oYXNoXzMpOworCitkcm9wIHRhYmxlIGFnZ19ncm91cF8xOworZHJvcCB0YWJsZSBhZ2dfZ3Jv dXBfMjsKK2Ryb3AgdGFibGUgYWdnX2dyb3VwXzM7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzE7Citk cm9wIHRhYmxlIGFnZ19oYXNoXzI7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzM7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncm91cGluZ3NldHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ3JvdXBpbmdzZXRzLnNxbAppbmRleCA5NWFjM2ZiNTJmNi4uYmY4YmNlNmVkMzEgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyb3VwaW5nc2V0cy5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZ3JvdXBpbmdzZXRzLnNxbApAQCAtNDQxLDQgKzQ0MSwxMDMgQEAg c2VsZWN0IHZ8fCdhJywgY2FzZSB3aGVuIGdyb3VwaW5nKHZ8fCdhJykgPSAxIHRoZW4gMSBlbHNl IDAgZW5kLCBjb3VudCgqKQogICBmcm9tIHVubmVzdChhcnJheVsxLDFdLCBhcnJheVsnYScsJ2In XSkgdShpLHYpCiAgZ3JvdXAgYnkgcm9sbHVwKGksIHZ8fCdhJykgb3JkZXIgYnkgMSwzOwogCist LQorLS0gQ29tcGFyZSByZXN1bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBhbmQgcGxh bnMgdXNpbmcgaGFzaAorLS0gYWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJvdGggY2Fz ZXMgYnkgc2V0dGluZyB3b3JrX21lbSBsb3cuCistLQorCitTRVQgd29ya19tZW09JzY0a0InOwor CistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBzb3J0aW5nLgorCitzZXQgZW5hYmxlX2hhc2hhZ2cg PSBmYWxzZTsKKworc2V0IGppdF9hYm92ZV9jb3N0ID0gMDsKKworZXhwbGFpbiAoY29zdHMgb2Zm KQorc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1h eChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFzIGcxMDAwLCBnJTEwMCBhcyBnMTAw LCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OTkpIGcpIHMK K2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKKworY3JlYXRlIHRhYmxlIGdzX2dyb3Vw XzEgYXMKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCop LCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMg ZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBn KSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK3NldCBqaXRfYWJvdmVfY29z dCB0byBkZWZhdWx0OworCitjcmVhdGUgdGFibGUgZ3NfZ3JvdXBfMiBhcworc2VsZWN0IGcxMDAw LCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9t CisgIChzZWxlY3QgZy8yMCBhcyBnMTAwMCwgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwg ZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAo ZzEwMDAsZzEwMCxnMTApOworCitjcmVhdGUgdGFibGUgZ3NfZ3JvdXBfMyBhcworc2VsZWN0IGcx MDAsIGcxMCwgYXJyYXlfYWdnKGcpIGFzIGEsIGNvdW50KCopIGFzIGMsIG1heChnOjp0ZXh0KSBh cyBtIGZyb20KKyAgKHNlbGVjdCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBm cm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBncm91cGluZyBzZXRz IChnMTAwLGcxMCk7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24u CisKK3NldCBlbmFibGVfaGFzaGFnZyA9IHRydWU7CitzZXQgZW5hYmxlX3NvcnQgPSBmYWxzZTsK K3NldCB3b3JrX21lbT0nNjRrQic7CisKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CisKK2V4cGxh aW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJpYyks IGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAwMCwg ZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAs MTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK2NyZWF0ZSB0 YWJsZSBnc19oYXNoXzEgYXMKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0oZzo6bnVtZXJp YyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAwMCBhcyBnMTAw MCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK3NldCBq aXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworCitjcmVhdGUgdGFibGUgZ3NfaGFzaF8yIGFzCitz ZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6 OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnLzIwIGFzIGcxMDAwLCBnLzIwMCBhcyBnMTAwLCBnLzIw MDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91 cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzMgYXMK K3NlbGVjdCBnMTAwLCBnMTAsIGFycmF5X2FnZyhnKSBhcyBhLCBjb3VudCgqKSBhcyBjLCBtYXgo Zzo6dGV4dCkgYXMgbSBmcm9tCisgIChzZWxlY3QgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFzIGcx MCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkgZ3Jv dXBpbmcgc2V0cyAoZzEwMCxnMTApOworCitzZXQgZW5hYmxlX3NvcnQgPSB0cnVlOworc2V0IHdv cmtfbWVtIHRvIGRlZmF1bHQ7CisKKy0tIENvbXBhcmUgcmVzdWx0cworCisoc2VsZWN0ICogZnJv bSBnc19oYXNoXzEgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfZ3JvdXBfMSkKKyAgdW5pb24gYWxs Cisoc2VsZWN0ICogZnJvbSBnc19ncm91cF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGdzX2hhc2hf MSk7CisKKyhzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMiBleGNlcHQgc2VsZWN0ICogZnJvbSBnc19n cm91cF8yKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGdzX2dyb3VwXzIgZXhjZXB0IHNl bGVjdCAqIGZyb20gZ3NfaGFzaF8yKTsKKworKHNlbGVjdCBnMTAwLGcxMCx1bm5lc3QoYSksYyxt IGZyb20gZ3NfaGFzaF8zIGV4Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBm cm9tIGdzX2dyb3VwXzMpCisgICAgdW5pb24gYWxsCisoc2VsZWN0IGcxMDAsZzEwLHVubmVzdChh KSxjLG0gZnJvbSBnc19ncm91cF8zIGV4Y2VwdAorICBzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEp LGMsbSBmcm9tIGdzX2hhc2hfMyk7CisKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMTsKK2Ryb3AgdGFi bGUgZ3NfZ3JvdXBfMjsKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMzsKK2Ryb3AgdGFibGUgZ3NfaGFz aF8xOworZHJvcCB0YWJsZSBnc19oYXNoXzI7Citkcm9wIHRhYmxlIGdzX2hhc2hfMzsKKwogLS0g ZW5kCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zZWxlY3RfZGlzdGluY3Quc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbAppbmRleCBhNjA1ZTg2 NDQ5ZS4uMzMxMDI3NDRlYmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVj dF9kaXN0aW5jdC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0X2Rpc3RpbmN0 LnNxbApAQCAtNDUsNiArNDUsNjggQEAgU0VMRUNUIGNvdW50KCopIEZST00KIFNFTEVDVCBjb3Vu dCgqKSBGUk9NCiAgIChTRUxFQ1QgRElTVElOQ1QgdHdvLCBmb3VyLCB0d28gRlJPTSB0ZW5rMSkg c3M7CiAKKy0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5n IGFuZCBwbGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4g Ym90aCBjYXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0tCisKK1NFVCB3b3JrX21lbT0n NjRrQic7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCisKK1NFVCBlbmFibGVf aGFzaGFnZz1GQUxTRTsKKworU0VUIGppdF9hYm92ZV9jb3N0PTA7CisKK0VYUExBSU4gKGNvc3Rz IG9mZikKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5 KSBnOworCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMSBBUworU0VMRUNUIERJU1RJTkNU IGclMTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisKK1NFVCBqaXRfYWJvdmVf Y29zdCBUTyBERUZBVUxUOworCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMiBBUworU0VM RUNUIERJU1RJTkNUIChnJTEwMDApOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkg ZzsKKworU0VUIGVuYWJsZV9oYXNoYWdnPVRSVUU7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRo IGhhc2ggYWdncmVnYXRpb24uCisKK1NFVCBlbmFibGVfc29ydD1GQUxTRTsKKworU0VUIGppdF9h Ym92ZV9jb3N0PTA7CisKK0VYUExBSU4gKGNvc3RzIG9mZikKK1NFTEVDVCBESVNUSU5DVCBnJTEw MDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworCitDUkVBVEUgVEFCTEUgZGlzdGlu Y3RfaGFzaF8xIEFTCitTRUxFQ1QgRElTVElOQ1QgZyUxMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVz KDAsOTk5OSkgZzsKKworU0VUIGppdF9hYm92ZV9jb3N0IFRPIERFRkFVTFQ7CisKK0NSRUFURSBU QUJMRSBkaXN0aW5jdF9oYXNoXzIgQVMKK1NFTEVDVCBESVNUSU5DVCAoZyUxMDAwKTo6dGV4dCBG Uk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisKK1NFVCBlbmFibGVfc29ydD1UUlVFOwor CitTRVQgd29ya19tZW0gVE8gREVGQVVMVDsKKworLS0gQ29tcGFyZSByZXN1bHRzCisKKyhTRUxF Q1QgKiBGUk9NIGRpc3RpbmN0X2hhc2hfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9n cm91cF8xKQorICBVTklPTiBBTEwKKyhTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEgRVhD RVBUIFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xKTsKKworKFNFTEVDVCAqIEZST00gZGlz dGluY3RfaGFzaF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEpCisgIFVO SU9OIEFMTAorKFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3JvdXBfMSBFWENFUFQgU0VMRUNUICog RlJPTSBkaXN0aW5jdF9oYXNoXzEpOworCitEUk9QIFRBQkxFIGRpc3RpbmN0X2hhc2hfMTsKK0RS T1AgVEFCTEUgZGlzdGluY3RfaGFzaF8yOworRFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91cF8xOwor RFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91cF8yOworCiAtLQogLS0gQWxzbywgc29tZSB0ZXN0cyBv ZiBJUyBESVNUSU5DVCBGUk9NLCB3aGljaCBkb2Vzbid0IHF1aXRlIGRlc2VydmUgaXRzCiAtLSB2 ZXJ5IG93biByZWdyZXNzaW9uIGZpbGUuCg== --=-/DUA8mWVhbIRfvs0Q8zD--