Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sb4GN-00Dcjo-Qx for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Aug 2024 20:25:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sb4GL-00FLpv-0t for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Aug 2024 20:25:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sb4GK-00FLpi-4o for pgsql-hackers@lists.postgresql.org; Mon, 05 Aug 2024 20:25:00 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sb4GC-003GoM-MF for pgsql-hackers@postgresql.org; Mon, 05 Aug 2024 20:24:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1722889489; bh=9Vd31HPTD9M+S+hR5byqPpWBP9oP1yDo9x/4csStTbE=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=FwoZ04sMF+cUavoo3WkQJs+YacdUXRvOEF0334HWJVjlWAkwy7Y44y934jnI0HWLQ peaS7WULzOLgHYB8sW4eOiMTVV0rL5B+/mMNT6zTIscE7qpof/bZvZg2AincCA+9Bs znkSM8CcXV3Gw3TN/fJy2pXVRXV8TgvjssmYUOPeoYLt1sHpuogovli7uY3uDzoDYT ZxQGAU+77y8mFRAlIZKJ2XhpeOP8zbN05nTjd/2TQAfxOhMW0C0716W1554kxfXQXO oqtld4VpEQO0VXAbPj54vN3B8v9OyEVWLN8LZ/F5z4IKsdFo6lQMAmEOxZm8eVEpVm HnrMmyhXHySeA== Received: from [172.28.0.22] (unknown [213.171.56.10]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.rybakina@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 124B96092D; Mon, 5 Aug 2024 23:24:48 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------UoXxVFJOhFiptSECoKzWcnaL" Message-ID: Date: Mon, 5 Aug 2024 23:24:47 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes To: Alexander Korotkov Cc: Nikolay Shaplov , pgsql-hackers@lists.postgresql.org, Andrei Lepikhov , jian he , Robert Haas , pgsql-hackers@postgresql.org, Peter Geoghegan , Marcos Pegoraro , teodor@sigaev.ru, Tomas Vondra , Peter Eisentraut , Ranier Vilela References: <567ED6CA.2040504@sigaev.ru> <8969055.VV5PYv0bhD@thinkpad-pgpro> <38289f6c-b8c0-4713-8fb5-703fe771872a@postgrespro.ru> <759292d5-cb51-4b12-89fa-576c1d9b374d@postgrespro.ru> <531fc0ab-371e-4235-97e3-dd2d077b6995@postgrespro.ru> Content-Language: en-US From: Alena Rybakina In-Reply-To: X-KSMG-AntiPhishing: NotDetected, bases: 2024/08/05 18:57:00 X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2024/08/05 17:58:00 #26254693 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------UoXxVFJOhFiptSECoKzWcnaL Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Ok, thank you for your work) I think we can leave only the two added libraries in the first patch, others are superfluous. On 05.08.2024 22:48, Alexander Korotkov wrote: > On Mon, Jul 29, 2024 at 5:36 AM Alexander Korotkov wrote: >> On Sun, Jul 28, 2024 at 12:59 PM Alena Rybakina >>> Because of these reasons, I tried to save this and that transformation >>> together for each column and try to analyze for each expr separately >>> which method would be optimal. >> Yes, with v27 of the patch, optimization wouldn't work in these cases. >> However, you are using quite small table. If you will use larger >> table or disable sequential scans, there would be bitmap plans to >> handle these queries. So, v27 doesn't make the situation worse. It >> just doesn't optimize all that it could potentially optimize and >> that's OK. >> >> I've written a separate 0002 patch to address this. Now, before >> generation of paths for bitmap OR, similar OR entries are grouped >> together. When considering a group of similar entries, they are >> considered both together and one-by-one. Ideally we could consider >> more sophisticated grouping, but that seems fine for now. You can >> check how this patch handles the cases of above. >> >> Also, 0002 address issue of duplicated bitmap scan conditions in >> different forms. During generate_bitmap_or_paths() we need to exclude >> considered condition for other clauses. It couldn't be as normal >> filtered out in the latter stage, because could reach the index in >> another form. >> >>> I agree with you that there is an overhead and your patch fixes this >>> problem, but optimizer needs to have a good ordering of expressions for >>> application. >>> >>> I think we can try to move the transformation to another place where >>> there is already a loop pass, and also save two options "OR" expr and >>> "ANY" expr in one place (through BoolExpr) (like find_duplicate_ors >>> function) and teach the optimizer to determine which option is better, >>> for example, like now in match_orclause_to_indexcol() function. >>> >>> What do you thing about it? >> find_duplicate_ors() and similar places were already tried before. >> Please, check upthread. This approach receives severe critics. AFAIU, >> the problem is that find_duplicate_ors() during preprocessing, a >> cost-blind stage. >> >> This is why I'd like to continue developing ideas of v27, because it >> fits the existing framework. > The revised patchset is attached. There is no material changes in the > logic, I found no issues here yet. But it comes with refactoring, > cleanup, more comments and better commit messages. I think now this > patchset is understandable and ready for review. > > ------ > Regards, > Alexander Korotkov > Supabase -- Regards, Alena Rybakina Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --------------UoXxVFJOhFiptSECoKzWcnaL Content-Type: text/x-patch; charset=UTF-8; name="v31-0001-Transform-OR-clauses-to-SAOP-s-during-index-matching.patch" Content-Disposition: attachment; filename*0="v31-0001-Transform-OR-clauses-to-SAOP-s-during-index-matchin"; filename*1="g.patch" Content-Transfer-Encoding: base64 RnJvbSA4NGU0YzcxZGNjZDc3ODEwYTc3MDAzOGJlN2Q5MTA0MDA0NzI2ZTFjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogTW9uLCA1IEF1ZyAyMDI0IDIzOjIxOjE2ICswMzAwClN1Ympl Y3Q6IFtQQVRDSCAxLzJdIFRyYW5zZm9ybSBPUi1jbGF1c2VzIHRvIFNBT1AncyBkdXJpbmcg aW5kZXggbWF0Y2hpbmcKClJlcGxhY2UgIihpbmRleGtleSBvcCBDMSkgT1IgKGluZGV4a2V5 IG9wIEMyKSAuLi4gKGluZGV4a2V5IG9wIENOKSIgd2l0aAoiaW5kZXhrZXkgb3AgQU5ZKEFS UkFZW0MxLCBDMiwgLi4uXSkiIChTY2FsYXJBcnJheU9wRXhwciBub2RlKSBkdXJpbmcgbWF0 Y2hpbmcKYSBjbGF1c2UgdG8gaW5kZXguCgpIZXJlIENpIGlzIGEgaS10aCBjb25zdGFudCBv ciBwYXJhbWV0ZXJzIGV4cHJlc3Npb24sICdleHByJyBpcyBub24tY29uc3RhbnQKZXhwcmVz c2lvbiwgJ29wJyBpcyBhbiBvcGVyYXRvciB3aGljaCByZXR1cm5zIGJvb2xlYW4gcmVzdWx0 IGFuZCBoYXMgYSBjb21tdXRlcgooZm9yIHRoZSBjYXNlIG9mIHJldmVyc2Ugb3JkZXIgb2Yg Y29uc3RhbnQgYW5kIG5vbi1jb25zdGFudCBwYXJ0cyBvZiB0aGUKZXhwcmVzc2lvbiwgbGlr ZSAnQ24gb3AgZXhwcicpLgoKVGhpcyB0cmFuc2Zvcm1hdGlvbiBhbGxvd3MgdG8gaGFuZGxl IGxvbmcgT1ItY2xhdXNlcyB3aXRoIHNpbmdsZSBJbmRleFNjYW4KYXZvaWRpbmcgc2xvd2Vy IGJpdG1hcCBzY2Fucy4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vNTY3RUQ2 Q0EuMjA0MDUwNCU0MHNpZ2Fldi5ydQpBdXRob3I6IEFsZW5hIFJ5YmFraW5hIDxsZW5hLnJp YmFja2luYUB5YW5kZXgucnU+CkF1dGhvcjogQW5kcmV5IExlcGlraG92IDxhLmxlcGlraG92 QHBvc3RncmVzcHJvLnJ1PgpSZXZpZXdlZC1ieTogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0 LmllPgpSZXZpZXdlZC1ieTogUmFuaWVyIFZpbGVsYSA8cmFuaWVyLnZmQGdtYWlsLmNvbT4K UmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiBSb2JlcnQgSGFhcyA8cm9iZXJ0bWhhYXNAZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogSmlhbiBIZSA8amlhbi51bml2ZXJzYWxpdHlAZ21haWwuY29tPgpSZXZpZXdl ZC1ieTogVG9tIExhbmUgPHRnbEBzc3MucGdoLnBhLnVzPgpSZXZpZXdlZC1ieTogTmlrb2xh eSBTaGFwbG92IDxkaHlhbkBuYXRhcmFqLnN1PgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2luZHhwYXRoLmMgICAgICB8IDI1MyArKysrKysrKysrKysrKysrKysrKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCB8IDE4MyArKysrKysr KysrKysrLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgICAgICAgICB8 ICA1NyArKysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCAgICAg IHwgIDQyICsrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsICAgICAgICAgICAg ICB8ICAgOSArCiA1IGZpbGVzIGNoYW5nZWQsIDUyMiBpbnNlcnRpb25zKCspLCAyMiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4 cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCBj MGZjYzdkNzhkZi4uY2I4NzEyNmU3NTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYwpAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIm9wdGltaXplci9wYXRo cy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3Jlc3RyaWN0aW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy9zZWxmdW5jcy5oIgogCiAKQEAgLTE3Nyw2ICsxNzksMTAgQEAgc3RhdGlj IEluZGV4Q2xhdXNlICptYXRjaF9yb3djb21wYXJlX3RvX2luZGV4Y29sKFBsYW5uZXJJbmZv ICpyb290LAogCQkJCQkJCQkJCQkJIFJlc3RyaWN0SW5mbyAqcmluZm8sCiAJCQkJCQkJCQkJ CQkgaW50IGluZGV4Y29sLAogCQkJCQkJCQkJCQkJIEluZGV4T3B0SW5mbyAqaW5kZXgpOwor c3RhdGljIEluZGV4Q2xhdXNlICptYXRjaF9vcmNsYXVzZV90b19pbmRleGNvbChQbGFubmVy SW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICAgUmVzdHJpY3RJbmZvICpyaW5mbywKKwkJCQkJ CQkJCQkJICAgaW50IGluZGV4Y29sLAorCQkJCQkJCQkJCQkgICBJbmRleE9wdEluZm8gKmlu ZGV4KTsKIHN0YXRpYyBJbmRleENsYXVzZSAqZXhwYW5kX2luZGV4cXVhbF9yb3djb21wYXJl KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJUmVzdHJpY3RJbmZvICpyaW5mbywK IAkJCQkJCQkJCQkJCWludCBpbmRleGNvbCwKQEAgLTIyNDgsNiArMjI1NCwxMCBAQCBtYXRj aF9jbGF1c2VfdG9faW5kZXhjb2woUGxhbm5lckluZm8gKnJvb3QsCiAJewogCQlyZXR1cm4g bWF0Y2hfcm93Y29tcGFyZV90b19pbmRleGNvbChyb290LCByaW5mbywgaW5kZXhjb2wsIGlu ZGV4KTsKIAl9CisJZWxzZSBpZiAocmVzdHJpY3Rpb25faXNfb3JfY2xhdXNlKHJpbmZvKSkK Kwl7CisJCXJldHVybiBtYXRjaF9vcmNsYXVzZV90b19pbmRleGNvbChyb290LCByaW5mbywg aW5kZXhjb2wsIGluZGV4KTsKKwl9CiAJZWxzZSBpZiAoaW5kZXgtPmFtc2VhcmNobnVsbHMg JiYgSXNBKGNsYXVzZSwgTnVsbFRlc3QpKQogCXsKIAkJTnVsbFRlc3QgICAqbnQgPSAoTnVs bFRlc3QgKikgY2xhdXNlOwpAQCAtMjc3MSw2ICsyNzgxLDI0OSBAQCBtYXRjaF9yb3djb21w YXJlX3RvX2luZGV4Y29sKFBsYW5uZXJJbmZvICpyb290LAogCXJldHVybiBOVUxMOwogfQog CisvKgorICogbWF0Y2hfb3JjbGF1c2VfdG9faW5kZXhjb2woKQorICoJICBIYW5kbGVzIHRo ZSBPUi1leHByIGNhc2UgZm9yIG1hdGNoX2NsYXVzZV90b19pbmRleGNvbCgpIGluIHRoZSBj YXNlCisgKgkgIHdoZW4gaXQgY291bGQgYmUgdHJhbnNmb3JtZWQgdG8gU2NhbGFyQXJyYXlP cEV4cHIuCisgKi8KK3N0YXRpYyBJbmRleENsYXVzZSAqCittYXRjaF9vcmNsYXVzZV90b19p bmRleGNvbChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCSAgIFJlc3RyaWN0SW5mbyAqcmlu Zm8sCisJCQkJCQkgICBpbnQgaW5kZXhjb2wsCisJCQkJCQkgICBJbmRleE9wdEluZm8gKmlu ZGV4KQoreworCUxpc3RDZWxsICAgKmxjOworCUJvb2xFeHByICAgKm9yY2xhdXNlID0gKEJv b2xFeHByICopIHJpbmZvLT5vcmNsYXVzZTsKKwlOb2RlCSAgICppbmRleEV4cHIgPSBOVUxM OworCUxpc3QJICAgKmNvbnN0cyA9IE5JTDsKKwlOb2RlCSAgICphcnJheU5vZGUgPSBOVUxM OworCVNjYWxhckFycmF5T3BFeHByICpzYW9wZXhwciA9IE5VTEw7CisJSGVhcFR1cGxlCW9w ZXJ0dXA7CisJRm9ybV9wZ19vcGVyYXRvciBvcGVyZm9ybTsKKwlPaWQJCQltYXRjaE9wbm8g PSBJbnZhbGlkT2lkOworCUluZGV4Q2xhdXNlICppY2xhdXNlOworCU9pZAkJCWNvbnN0dHlw ZSA9IEludmFsaWRPaWQ7CisJT2lkCQkJYXJyYXl0eXBlID0gSW52YWxpZE9pZDsKKwlPaWQJ CQlpbnB1dGNvbGxpZCA9IEludmFsaWRPaWQ7CisJYm9vbAkJZmlyc3RUaW1lID0gdHJ1ZTsK Kwlib29sCQloYXZlX3BhcmFtID0gZmFsc2U7CisKKwlBc3NlcnQoSXNBKG9yY2xhdXNlLCBC b29sRXhwcikpOworCUFzc2VydChvcmNsYXVzZS0+Ym9vbG9wID09IE9SX0VYUFIpOworCisJ LyoKKwkgKiBJdGVyYXRlIG92ZXIgT1IgZW50cmllcy4gIENoZWNrIHRoYXQgZWFjaCBPUiBl bnRyeSBpcyBvZiB0aGUgZm9ybToKKwkgKiAoaW5kZXhrZXkgb3BlcmF0b3IgY29uc3RhbnQp IG9yIChjb25zdGFudCBvcGVyYXRvciBpbmRleGtleSkuIE9wZXJhdG9ycworCSAqIG9mIGFs bCB0aGUgZW50cmllcyBtdXN0IG1hdGNoLiAgQ29uc3RhbnQgbWlnaHQgYmUgZWl0aGVyIENv bnN0IG9yCisJICogUGFyYW0uICBFeGl0IHdpdGggTlVMTCBvbiBmaXJzdCBub24tbWF0Y2hp bmcgZW50cnkuCisJICovCisJZm9yZWFjaChsYywgb3JjbGF1c2UtPmFyZ3MpCisJeworCQlS ZXN0cmljdEluZm8gKnN1YlJpbmZvOworCQlPcEV4cHIJICAgKnN1YkNsYXVzZTsKKwkJT2lk CQkJb3BubzsKKwkJTm9kZQkgICAqbGVmdG9wLAorCQkJCSAgICpyaWdodG9wOworCQlOb2Rl CSAgICpjb25zdEV4cHI7CisKKwkJaWYgKCFJc0EobGZpcnN0KGxjKSwgUmVzdHJpY3RJbmZv KSkKKwkJCXJldHVybiBOVUxMOworCisJCXN1YlJpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBs Zmlyc3QobGMpOworCisJCS8qIE9ubHkgb3BlcmF0b3IgY2xhdXNlcyBzY2FuIG1hdGNoICAq LworCQlpZiAoIUlzQShzdWJSaW5mby0+Y2xhdXNlLCBPcEV4cHIpKQorCQkJcmV0dXJuIE5V TEw7CisKKwkJc3ViQ2xhdXNlID0gKE9wRXhwciAqKSBzdWJSaW5mby0+Y2xhdXNlOworCQlv cG5vID0gc3ViQ2xhdXNlLT5vcG5vOworCisJCS8qIE9ubHkgYmluYXJ5IG9wZXJhdG9ycyBj YW4gbWF0Y2ggICovCisJCWlmIChsaXN0X2xlbmd0aChzdWJDbGF1c2UtPmFyZ3MpICE9IDIp CisJCQlyZXR1cm4gTlVMTDsKKworCQkvKiBSZXN0cmljdEluZm8gcGFyYW1ldGVycyBkbXVz dCBtYXRjaCBwYXJlbnQgKi8KKwkJaWYgKHN1YlJpbmZvLT5pc19wdXNoZWRfZG93biAhPSBy aW5mby0+aXNfcHVzaGVkX2Rvd24gfHwKKwkJCXN1YlJpbmZvLT5pc19jbG9uZSAhPSByaW5m by0+aXNfY2xvbmUgfHwKKwkJCXN1YlJpbmZvLT5zZWN1cml0eV9sZXZlbCAhPSByaW5mby0+ c2VjdXJpdHlfbGV2ZWwgfHwKKwkJCSFibXNfZXF1YWwoc3ViUmluZm8tPnJlcXVpcmVkX3Jl bGlkcywgcmluZm8tPnJlcXVpcmVkX3JlbGlkcykgfHwKKwkJCSFibXNfZXF1YWwoc3ViUmlu Zm8tPmluY29tcGF0aWJsZV9yZWxpZHMsIHJpbmZvLT5pbmNvbXBhdGlibGVfcmVsaWRzKSB8 fAorCQkJIWJtc19lcXVhbChzdWJSaW5mby0+b3V0ZXJfcmVsaWRzLCByaW5mby0+b3V0ZXJf cmVsaWRzKSkKKwkJCXJldHVybiBOVUxMOworCisJCS8qIE9ubHkgb3BlcmF0b3IgcmV0dXJu aW5nIGJvb2xlYW4gc3VpdHMgdGhlIHRyYW5zZm9ybWF0aW9uICovCisJCWlmIChnZXRfb3Bf cmV0dHlwZShvcG5vKSAhPSBCT09MT0lEKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJLyoKKwkJ ICogQ2hlY2sgZm9yIGNsYXVzZXMgb2YgdGhlIGZvcm06IChpbmRleGtleSBvcGVyYXRvciBj b25zdGFudCkgb3IKKwkJICogKGNvbnN0YW50IG9wZXJhdG9yIGluZGV4a2V5KS4gIERldGVy bWluZSBpbmRleGtleSBzaWRlIGZpcnN0LCBjaGVjaworCQkgKiB0aGUgY29uc3RhbnQgbGF0 ZXIuCisJCSAqLworCQlsZWZ0b3AgPSAoTm9kZSAqKSBsaW5pdGlhbChzdWJDbGF1c2UtPmFy Z3MpOworCQlyaWdodG9wID0gKE5vZGUgKikgbHNlY29uZChzdWJDbGF1c2UtPmFyZ3MpOwor CQlpZiAobWF0Y2hfaW5kZXhfdG9fb3BlcmFuZChsZWZ0b3AsIGluZGV4Y29sLCBpbmRleCkp CisJCXsKKwkJCWluZGV4RXhwciA9IGxlZnRvcDsKKwkJCWNvbnN0RXhwciA9IHJpZ2h0b3A7 CisJCX0KKwkJZWxzZSBpZiAobWF0Y2hfaW5kZXhfdG9fb3BlcmFuZChyaWdodG9wLCBpbmRl eGNvbCwgaW5kZXgpKQorCQl7CisJCQlvcG5vID0gZ2V0X2NvbW11dGF0b3Iob3Bubyk7CisJ CQlpZiAoIU9pZElzVmFsaWQob3BubykpCisJCQl7CisJCQkJLyogY29tbXV0YXRvciBkb2Vz bid0IGV4aXN0LCB3ZSBjYW4ndCByZXZlcnNlIHRoZSBvcmRlciAqLworCQkJCXJldHVybiBO VUxMOworCQkJfQorCQkJaW5kZXhFeHByID0gcmlnaHRvcDsKKwkJCWNvbnN0RXhwciA9IGxl ZnRvcDsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJLyoK KwkJICogSWdub3JlIGFueSBSZWxhYmVsVHlwZSBub2RlIGFib3ZlIHRoZSBvcGVyYW5kcy4g IFRoaXMgaXMgbmVlZGVkIHRvCisJCSAqIGJlIGFibGUgdG8gYXBwbHkgaW5kZXhzY2Fubmlu ZyBpbiBiaW5hcnktY29tcGF0aWJsZS1vcGVyYXRvciBjYXNlcy4KKwkJICogTm90ZTogd2Ug Y2FuIGFzc3VtZSB0aGVyZSBpcyBhdCBtb3N0IG9uZSBSZWxhYmVsVHlwZSBub2RlOworCQkg KiBldmFsX2NvbnN0X2V4cHJlc3Npb25zKCkgd2lsbCBoYXZlIHNpbXBsaWZpZWQgaWYgbW9y ZSB0aGFuIG9uZS4KKwkJICovCisJCWlmIChJc0EoY29uc3RFeHByLCBSZWxhYmVsVHlwZSkp CisJCQljb25zdEV4cHIgPSAoTm9kZSAqKSAoKFJlbGFiZWxUeXBlICopIGNvbnN0RXhwcikt PmFyZzsKKwkJaWYgKElzQShpbmRleEV4cHIsIFJlbGFiZWxUeXBlKSkKKwkJCWluZGV4RXhw ciA9IChOb2RlICopICgoUmVsYWJlbFR5cGUgKikgaW5kZXhFeHByKS0+YXJnOworCisJCS8q IFdlIGFsbG93IGNvbnN0YW50IHRvIGJlIENvbnN0IG9yIFBhcmFtICovCisJCWlmICghSXNB KGNvbnN0RXhwciwgQ29uc3QpICYmICFJc0EoY29uc3RFeHByLCBQYXJhbSkpCisJCQlyZXR1 cm4gTlVMTDsKKworCQkvKiBGb3JiaWQgdHJhbnNmb3JtYXRpb24gZm9yIGNvbXBvc2l0ZSB0 eXBlcywgcmVjb3Jkcy4gKi8KKwkJaWYgKHR5cGVfaXNfcm93dHlwZShleHByVHlwZShjb25z dEV4cHIpKSB8fAorCQkJdHlwZV9pc19yb3d0eXBlKGV4cHJUeXBlKGluZGV4RXhwcikpKQor CQkJcmV0dXJuIE5VTEw7CisKKwkJLyoKKwkJICogRm9yIHRoZSBmaXJzdCBtYXRjaGluZyBx dWFsLCBzYXZlIGluZm9ybWF0aW9uIGFib3V0IG9wZXJhdG9yLCB0eXBlCisJCSAqIGFuZCBj b2xsYXRpb24uICBGb3IgdGhlIG90aGVyIHF1YWxzIGp1c3QgY2hlY2sgdGhlIG1hdGNoIHdp dGggdGhlCisJCSAqIGZpcnN0LgorCQkgKi8KKwkJaWYgKGZpcnN0VGltZSkKKwkJeworCQkJ bWF0Y2hPcG5vID0gb3BubzsKKwkJCWNvbnN0dHlwZSA9IGV4cHJUeXBlKGNvbnN0RXhwcik7 CisJCQlhcnJheXR5cGUgPSBnZXRfYXJyYXlfdHlwZShjb25zdHR5cGUpOworCQkJaW5wdXRj b2xsaWQgPSBzdWJDbGF1c2UtPmlucHV0Y29sbGlkOworCisJCQkvKgorCQkJICogVGhlcmUg bXVzdCBiZSBhbiBhcnJheSB0eXBlIGluIG9yZGVyIHRvIGNvbnN0cnVjdCBhbiBhcnJheQor CQkJICogbGF0ZXIKKwkJCSAqLworCQkJaWYgKCFPaWRJc1ZhbGlkKGFycmF5dHlwZSkpCisJ CQkJcmV0dXJuIE5VTEw7CisJCQlmaXJzdFRpbWUgPSBmYWxzZTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCWlmIChvcG5vICE9IG1hdGNoT3BubyB8fAorCQkJCWlucHV0Y29sbGlkICE9IHN1 YkNsYXVzZS0+aW5wdXRjb2xsaWQgfHwKKwkJCQljb25zdHR5cGUgIT0gZXhwclR5cGUoY29u c3RFeHByKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChJc0EoY29uc3RFeHBy LCBQYXJhbSkpCisJCQloYXZlX3BhcmFtID0gdHJ1ZTsKKwkJY29uc3RzID0gbGFwcGVuZChj b25zdHMsIGNvbnN0RXhwcik7CisJfQorCisJaWYgKGhhdmVfcGFyYW0pCisJeworCQkvKgor CQkgKiBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhbiBBcnJheUV4cHIgZ2l2ZW4gd2UgaGF2ZSBQ YXJhbSdzIG5vdCBqdXN0CisJCSAqIENvbnN0J3MuCisJCSAqLworCQlBcnJheUV4cHIgICph cnJheUV4cHIgPSBtYWtlTm9kZShBcnJheUV4cHIpOworCisJCS8qIGFycmF5X2NvbGxpZCB3 aWxsIGJlIHNldCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KKwkJYXJyYXlFeHByLT5lbGVtZW50 X3R5cGVpZCA9IGNvbnN0dHlwZTsKKwkJYXJyYXlFeHByLT5hcnJheV90eXBlaWQgPSBhcnJh eXR5cGU7CisJCWFycmF5RXhwci0+bXVsdGlkaW1zID0gZmFsc2U7CisJCWFycmF5RXhwci0+ ZWxlbWVudHMgPSBjb25zdHM7CisJCWFycmF5RXhwci0+bG9jYXRpb24gPSAtMTsKKworCQlh cnJheU5vZGUgPSAoTm9kZSAqKSBhcnJheUV4cHI7CisJfQorCWVsc2UKKwl7CisJCS8qCisJ CSAqIFdlIGhhdmUgb25seSBDb3N0cydzLiAgSW4gdGhpcyBjYXNlIHdlIGNhbiBjb250cnVj dCBhbiBhcnJheQorCQkgKiBkaXJlY3RseS4KKwkJICovCisJCWludDE2CQl0eXBsZW47CisJ CWJvb2wJCXR5cGJ5dmFsOworCQljaGFyCQl0eXBhbGlnbjsKKwkJRGF0dW0JICAgKmVsZW1z OworCQlpbnQJCQlpID0gMDsKKwkJQXJyYXlUeXBlICAqYXJyYXlDb25zdDsKKworCQlnZXRf dHlwbGVuYnl2YWxhbGlnbihjb25zdHR5cGUsICZ0eXBsZW4sICZ0eXBieXZhbCwgJnR5cGFs aWduKTsKKworCQllbGVtcyA9IChEYXR1bSAqKSBwYWxsb2Moc2l6ZW9mKERhdHVtKSAqIGxp c3RfbGVuZ3RoKGNvbnN0cykpOworCQlmb3JlYWNoKGxjLCBjb25zdHMpCisJCQllbGVtc1tp KytdID0gKChDb25zdCAqKSBsZmlyc3QobGMpKS0+Y29uc3R2YWx1ZTsKKworCQlhcnJheUNv bnN0ID0gY29uc3RydWN0X2FycmF5KGVsZW1zLCBpLCBjb25zdHR5cGUsCisJCQkJCQkJCQkg dHlwbGVuLCB0eXBieXZhbCwgdHlwYWxpZ24pOworCQlhcnJheU5vZGUgPSAoTm9kZSAqKSBt YWtlQ29uc3QoYXJyYXl0eXBlLCAtMSwgaW5wdXRjb2xsaWQsCisJCQkJCQkJCQkgICAtMSwg UG9pbnRlckdldERhdHVtKGFycmF5Q29uc3QpLAorCQkJCQkJCQkJICAgZmFsc2UsIGZhbHNl KTsKKworCQlwZnJlZShlbGVtcyk7CisJCWxpc3RfZnJlZShjb25zdHMpOworCX0KKworCS8q IExvb2t1cCBmb3Igb3BlcmF0b3IgdG8gZmV0Y2ggbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZv ciB0aGUgU0FPUCBub2RlICovCisJb3BlcnR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lE LAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShtYXRjaE9wbm8pKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQob3BlcnR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBvcGVyYXRvciAldSIsIG1hdGNoT3Bubyk7CisKKwlvcGVyZm9ybSA9IChGb3Jt X3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3BlcnR1cCk7CisKKwkvKiBCdWlsZCB0aGUgU0FP UCBleHByZXNzaW9uIG5vZGUgKi8KKwlzYW9wZXhwciA9IG1ha2VOb2RlKFNjYWxhckFycmF5 T3BFeHByKTsKKwlzYW9wZXhwci0+b3BubyA9IG1hdGNoT3BubzsKKwlzYW9wZXhwci0+b3Bm dW5jaWQgPSBvcGVyZm9ybS0+b3ByY29kZTsKKwlzYW9wZXhwci0+aGFzaGZ1bmNpZCA9IElu dmFsaWRPaWQ7CisJc2FvcGV4cHItPm5lZ2Z1bmNpZCA9IEludmFsaWRPaWQ7CisJc2FvcGV4 cHItPnVzZU9yID0gdHJ1ZTsKKwlzYW9wZXhwci0+aW5wdXRjb2xsaWQgPSBpbnB1dGNvbGxp ZDsKKwlzYW9wZXhwci0+YXJncyA9IGxpc3RfbWFrZTIoaW5kZXhFeHByLCBhcnJheU5vZGUp OworCXNhb3BleHByLT5sb2NhdGlvbiA9IC0xOworCisJUmVsZWFzZVN5c0NhY2hlKG9wZXJ0 dXApOworCisJLyoKKwkgKiBGaW5hbGx5IGJ1aWxkIGFuIEluZGV4Q2xhdXNlIGJhc2VkIG9u IHRoZSBTQU9QIG5vZGUuCisJICovCisJaWNsYXVzZSA9IG1ha2VOb2RlKEluZGV4Q2xhdXNl KTsKKwlpY2xhdXNlLT5yaW5mbyA9IG1ha2VfcmVzdHJpY3RpbmZvKHJvb3QsCisJCQkJCQkJ CQkgICAmc2FvcGV4cHItPnhwciwKKwkJCQkJCQkJCSAgIHJpbmZvLT5pc19wdXNoZWRfZG93 biwKKwkJCQkJCQkJCSAgIHJpbmZvLT5oYXNfY2xvbmUsCisJCQkJCQkJCQkgICByaW5mby0+ aXNfY2xvbmUsCisJCQkJCQkJCQkgICByaW5mby0+cHNldWRvY29uc3RhbnQsCisJCQkJCQkJ CQkgICByaW5mby0+c2VjdXJpdHlfbGV2ZWwsCisJCQkJCQkJCQkgICByaW5mby0+cmVxdWly ZWRfcmVsaWRzLAorCQkJCQkJCQkJICAgcmluZm8tPmluY29tcGF0aWJsZV9yZWxpZHMsCisJ CQkJCQkJCQkgICByaW5mby0+b3V0ZXJfcmVsaWRzKTsKKwlpY2xhdXNlLT5pbmRleHF1YWxz ID0gbGlzdF9tYWtlMShpY2xhdXNlLT5yaW5mbyk7CisJaWNsYXVzZS0+bG9zc3kgPSBmYWxz ZTsKKwlpY2xhdXNlLT5pbmRleGNvbCA9IGluZGV4Y29sOworCWljbGF1c2UtPmluZGV4Y29s cyA9IE5JTDsKKwlyZXR1cm4gaWNsYXVzZTsKK30KKwogLyoKICAqIGV4cGFuZF9pbmRleHF1 YWxfcm93Y29tcGFyZSAtLS0gZXhwYW5kIGEgc2luZ2xlIGluZGV4cXVhbCBjb25kaXRpb24K ICAqCQl0aGF0IGlzIGEgUm93Q29tcGFyZUV4cHIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAppbmRleCBjZjZlYWM1NzM0OS4uYzJiMjU5MzZjOGMg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKQEAg LTE4NDQsMTggKzE4NDQsMTEgQEAgRFJPUCBUQUJMRSBvbmVrX3dpdGhfbnVsbDsKIEVYUExB SU4gKENPU1RTIE9GRikKIFNFTEVDVCAqIEZST00gdGVuazEKICAgV0hFUkUgdGhvdXNhbmQg PSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0 Mik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCi0gICBSZWNoZWNrIENv bmQ6ICgoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSAxKSkgT1IgKCh0aG91c2Fu ZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMykpIE9SICgodGhvdXNhbmQgPSA0MikgQU5EICh0 ZW50aG91cyA9IDQyKSkpCi0gICAtPiAgQml0bWFwT3IKLSAgICAgICAgIC0+ICBCaXRtYXAg SW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cwotICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMSkpCi0gICAgICAg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKLSAgICAg ICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9 IDMpKQotICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3Rl bnRob3VzCi0gICAgICAgICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gNDIpIEFO RCAodGVudGhvdXMgPSA0MikpCi0oOSByb3dzKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHRlbmsxX3Ro b3VzX3RlbnRob3VzIG9uIHRlbmsxCisgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gNDIp IEFORCAodGVudGhvdXMgPSBBTlkgKCd7MSwzLDQyfSc6OmludGVnZXJbXSkpKQorKDIgcm93 cykKIAogU0VMRUNUICogRlJPTSB0ZW5rMQogICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAo dGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKQEAgLTE4 NjQsMTQgKzE4NTcsMTY2IEBAIFNFTEVDVCAqIEZST00gdGVuazEKICAgICAgIDQyIHwgICAg NTUzMCB8ICAgMCB8ICAgIDIgfCAgIDIgfCAgICAgIDIgfCAgICAgIDQyIHwgICAgICAgNDIg fCAgICAgICAgICA0MiB8ICAgICAgICA0MiB8ICAgICAgIDQyIHwgIDg0IHwgICA4NSB8IFFC QUFBQSAgIHwgU0VJQUFBICAgfCBPT09PeHgKICgxIHJvdykKIAorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAo dGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gKFNFTEVDVCAxICsgMikgT1IgdGVudGhvdXMg PSA0Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0ZW5rMV90aG91 c190ZW50aG91cyBvbiB0ZW5rMQorICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBB TkQgKHRlbnRob3VzID0gQU5ZIChBUlJBWVsxLCAoSW5pdFBsYW4gMSkuY29sMSwgNDJdKSkp CisgICBJbml0UGxhbiAxCisgICAgIC0+ICBSZXN1bHQKKyg0IHJvd3MpCisKK1NFTEVDVCAq IEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBP UiB0ZW50aG91cyA9IChTRUxFQ1QgMSArIDIpIE9SIHRlbnRob3VzID0gNDIpOworIHVuaXF1 ZTEgfCB1bmlxdWUyIHwgdHdvIHwgZm91ciB8IHRlbiB8IHR3ZW50eSB8IGh1bmRyZWQgfCB0 aG91c2FuZCB8IHR3b3Rob3VzYW5kIHwgZml2ZXRob3VzIHwgdGVudGhvdXMgfCBvZGQgfCBl dmVuIHwgc3RyaW5ndTEgfCBzdHJpbmd1MiB8IHN0cmluZzQgCistLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tKy0tLS0tLSstLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyAgICAgIDQyIHwgICAgNTUzMCB8ICAgMCB8 ICAgIDIgfCAgIDIgfCAgICAgIDIgfCAgICAgIDQyIHwgICAgICAgNDIgfCAgICAgICAgICA0 MiB8ICAgICAgICA0MiB8ICAgICAgIDQyIHwgIDg0IHwgICA4NSB8IFFCQUFBQSAgIHwgU0VJ QUFBICAgfCBPT09PeHgKKygxIHJvdykKKwogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNU IGNvdW50KCopIEZST00gdGVuazEKICAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNh bmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEFnZ3JlZ2F0ZQog ICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKLSAgICAgICAgIFJlY2hlY2sgQ29u ZDogKChodW5kcmVkID0gNDIpIEFORCAoKHRob3VzYW5kID0gNDIpIE9SICh0aG91c2FuZCA9 IDk5KSkpCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQyKSBBTkQgKHRo b3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJbXSkpKQorICAgICAgICAgLT4gIEJp dG1hcEFuZAorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsx X2h1bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0g NDIpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhv dXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2Fu ZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKQorKDggcm93cykKKworU0VMRUNUIGNv dW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQg PSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxMAorKDEg cm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdI RVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9S IHRlbnRob3VzID0gNDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHRlbmsxX3Rob3VzX3RlbnRob3Vz IG9uIHRlbmsxCisgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhv dXMgPSBBTlkgKCd7MSwzLDQyfSc6OmludGVnZXJbXSkpKQorKDIgcm93cykKKworU0VMRUNU ICogRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAx IE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKKyB1bmlxdWUxIHwgdW5pcXVl MiB8IHR3byB8IGZvdXIgfCB0ZW4gfCB0d2VudHkgfCBodW5kcmVkIHwgdGhvdXNhbmQgfCB0 d290aG91c2FuZCB8IGZpdmV0aG91cyB8IHRlbnRob3VzIHwgb2RkIHwgZXZlbiB8IHN0cmlu Z3UxIHwgc3RyaW5ndTIgfCBzdHJpbmc0IAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLSst LS0tLS0rLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tCisgICAgICA0MiB8ICAgIDU1MzAgfCAgIDAgfCAgICAyIHwgICAy IHwgICAgICAyIHwgICAgICA0MiB8ICAgICAgIDQyIHwgICAgICAgICAgNDIgfCAgICAgICAg NDIgfCAgICAgICA0MiB8ICA4NCB8ICAgODUgfCBRQkFBQUEgICB8IFNFSUFBQSAgIHwgT09P T3h4CisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1Ig dGhvdXNhbmQgPSA5OSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBI ZWFwIFNjYW4gb24gdGVuazEKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0g NDIpIEFORCAodGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkpCisgICAg ICAgICAtPiAgQml0bWFwQW5kCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNj YW4gb24gdGVuazFfaHVuZHJlZAorICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGh1bmRyZWQgPSA0MikKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHRob3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJbXSkpCisoOCByb3dzKQor CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5E ICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworIGNvdW50IAorLS0tLS0tLQor ICAgIDEwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgq KSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kIDwgNDIg T1IgdGhvdXNhbmQgPCA5OSBPUiA0MyA+IHRob3VzYW5kIE9SIDQyID4gdGhvdXNhbmQpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBT Y2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQyKSBB TkQgKHRob3VzYW5kIDwgQU5ZICgnezQyLDk5LDQzLDQyfSc6OmludGVnZXJbXSkpKQorICAg ICAgICAgLT4gIEJpdG1hcEFuZAorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBT Y2FuIG9uIHRlbmsxX2h1bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 IChodW5kcmVkID0gNDIpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh0aG91c2FuZCA8IEFOWSAoJ3s0Miw5OSw0Myw0Mn0nOjppbnRlZ2VyW10pKQorKDgg cm93cykKKworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9 IDQyIEFORCAodGhvdXNhbmQgPCA0MiBPUiB0aG91c2FuZCA8IDk5IE9SIDQzID4gdGhvdXNh bmQgT1IgNDIgPiB0aG91c2FuZCk7CisgY291bnQgCistLS0tLS0tCisgICAgMTAKKygxIHJv dykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEK KyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9 IDMpIE9SIHRob3VzYW5kID0gNDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2Fu IG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKHRob3VzYW5kID0gNDIpIEFO RCAodGVudGhvdXMgPSBBTlkgKCd7MSwzfSc6OmludGVnZXJbXSkpKSBPUiAodGhvdXNhbmQg PSA0MSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gQU5Z ICgnezEsM30nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5k ZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKHRob3VzYW5kID0gNDEpCisoOCByb3dzKQorCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAx IE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAxMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQy IE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2FuZCA9IDQxOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAg SGVhcCBTY2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKGh1bmRyZWQg PSA0MikgQU5EICgodGhvdXNhbmQgPSA0MikgT1IgKHRob3VzYW5kID0gOTkpIE9SICh0ZW50 aG91cyA8IDIpKSkgT1IgKHRob3VzYW5kID0gNDEpKQorICAgICAgICAgLT4gIEJpdG1hcE9y CisgICAgICAgICAgICAgICAtPiAgQml0bWFwQW5kCisgICAgICAgICAgICAgICAgICAgICAt PiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA0MikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90 aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKHRob3VzYW5kID0gOTkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0ZW50aG91cyA8IDIpCisgICAg ICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhv dXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IDQxKQor KDE2IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRy ZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSBPUiB0ZW50aG91 cyA8IDIpIE9SIHRob3VzYW5kID0gNDE7CisgY291bnQgCistLS0tLS0tCisgICAgMjAKKygx IHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVu azEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2Fu ZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3VzID0gMik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhlYXAgU2Nh biBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25kOiAoKGh1bmRyZWQgPSA0MikgQU5E ICgodGhvdXNhbmQgPSA0MikgT1IgKHRob3VzYW5kID0gNDEpIE9SICgodGhvdXNhbmQgPSA5 OSkgQU5EICh0ZW50aG91cyA9IDIpKSkpCiAgICAgICAgICAtPiAgQml0bWFwQW5kCiAgICAg ICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAogICAg ICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikKQEAgLTE4Nzks MTEgKzIwMjQsMTMgQEAgU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKICAgICAgICAgICAg ICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91 cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0g NDIpCiAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVu azFfdGhvdXNfdGVudGhvdXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh0aG91c2FuZCA9IDk5KQotKDExIHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA0MSkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDk5KSBBTkQg KHRlbnRob3VzID0gMikpCisoMTMgcm93cykKIAogU0VMRUNUIGNvdW50KCopIEZST00gdGVu azEKLSAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2Fu ZCA9IDk5KTsKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0 aG91c2FuZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3VzID0gMik7CiAgY291 bnQgCiAtLS0tLS0tCiAgICAgMTAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvam9pbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0Cmlu ZGV4IDUzZjcwZDcyZWQ2Li5hYmU5OGZmM2M1MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2pvaW4ub3V0CkBAIC00Mjc4LDE1ICs0Mjc4LDY0IEBAIHNlbGVjdCAqIGZyb20gdGVuazEg YSBqb2luIHRlbmsxIGIgb24KICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICho dW5kcmVkID0gNCkKICAgIC0+ICBNYXRlcmlhbGl6ZQogICAgICAgICAgLT4gIEJpdG1hcCBI ZWFwIFNjYW4gb24gdGVuazEgYQotICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVu aXF1ZTEgPSAxKSBPUiAodW5pcXVlMiA9IDMpIE9SICh1bmlxdWUyID0gNykpCisgICAgICAg ICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA9IDEpIE9SICh1bmlxdWUyID0gQU5Z ICgnezMsN30nOjppbnRlZ2VyW10pKSkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKCh1bmlx dWUxID0gMSkgT1IgKHVuaXF1ZTIgPSAzKSBPUiAodW5pcXVlMiA9IDcpKQogICAgICAgICAg ICAgICAgLT4gIEJpdG1hcE9yCiAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQogICAgICAgICAgICAgICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKHVuaXF1ZTEgPSAxKQogICAgICAgICAgICAgICAgICAgICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUyID0gMykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUyID0gQU5ZICgnezMsN30nOjppbnRlZ2VyW10p KQorKDE4IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVu azEgYSBqb2luIHRlbmsxIGIgb24KKyAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9 IDIpIG9yCisgICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5k cmVkID0gNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpv aW4gRmlsdGVyOiAoKChhLnVuaXF1ZTEgPSAxKSBBTkQgKGIudW5pcXVlMSA9IDIpKSBPUiAo KChhLnVuaXF1ZTIgPSAzKSBPUiAoYS51bmlxdWUyID0gNykpIEFORCAoYi5odW5kcmVkID0g NCkpKQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYgorICAgICAgICAgUmVj aGVjayBDb25kOiAoKHVuaXF1ZTEgPSAyKSBPUiAoaHVuZHJlZCA9IDQpKQorICAgICAgICAg LT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g dGVuazFfdW5pcXVlMQorICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1 ZTEgPSAyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsx X2h1bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0g NCkKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4g b24gdGVuazEgYQorICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPSAx KSBPUiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICgodW5pcXVlMSA9IDEpIE9SICh1bmlxdWUyID0gMykgT1IgKHVuaXF1 ZTIgPSA3KSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMSkKICAgICAgICAg ICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IDcpCi0o MTkgcm93cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlx dWUyID0gQU5ZICgnezMsN30nOjppbnRlZ2VyW10pKQorKDE4IHJvd3MpCisKK2V4cGxhaW4g KGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAg KGEudW5pcXVlMSA8IDIwIG9yIGEudW5pcXVlMSA9IDMgb3IgYS51bmlxdWUxID0gMSBhbmQg Yi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcp IGFuZCBiLmh1bmRyZWQgPSA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoYS51bmlx dWUxIDwgMjApIE9SIChhLnVuaXF1ZTEgPSAzKSBPUiAoKGEudW5pcXVlMSA9IDEpIEFORCAo Yi51bmlxdWUxID0gMikpIE9SICgoKGEudW5pcXVlMiA9IDMpIE9SIChhLnVuaXF1ZTIgPSA3 KSkgQU5EIChiLmh1bmRyZWQgPSA0KSkpCisgICAtPiAgU2VxIFNjYW4gb24gdGVuazEgYgor ICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0 ZW5rMSBhCisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA8IDIwKSBP UiAodW5pcXVlMSA9IDMpIE9SICh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSBBTlkgKCd7 Myw3fSc6OmludGVnZXJbXSkpKQorICAgICAgICAgICAgICAgRmlsdGVyOiAoKHVuaXF1ZTEg PCAyMCkgT1IgKHVuaXF1ZTEgPSAzKSBPUiAodW5pcXVlMSA9IDEpIE9SICh1bmlxdWUyID0g MykgT1IgKHVuaXF1ZTIgPSA3KSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgorICAg ICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1 ZTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxIDwg MjApCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVu azFfdW5pcXVlMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVu aXF1ZTEgPSAzKQorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2Fu IG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh1bmlxdWUxID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5k ZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkKKygxNiBy b3dzKQogCiAtLQogLS0gdGVzdCBwbGFjZW1lbnQgb2YgbW92YWJsZSBxdWFscyBpbiBhIHBh cmFtZXRlcml6ZWQgam9pbiB0cmVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9jcmVhdGVfaW5kZXguc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4 LnNxbAppbmRleCBlMjk2ODkxY2FiOC4uZjc0YWQ0MTVmYmYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvY3JlYXRlX2luZGV4LnNxbApAQCAtNzI2LDYgKzcyNiwyNCBAQCBEUk9QIFRBQkxF IG9uZWtfd2l0aF9udWxsOwogLS0gQ2hlY2sgYml0bWFwIGluZGV4IHBhdGggcGxhbm5pbmcK IC0tCiAKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hF UkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1Ig dGVudGhvdXMgPSA0Mik7CitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5k ID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0g NDIpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdI RVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAoU0VM RUNUIDEgKyAyKSBPUiB0ZW50aG91cyA9IDQyKTsKK1NFTEVDVCAqIEZST00gdGVuazEKKyAg V0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IChT RUxFQ1QgMSArIDIpIE9SIHRlbnRob3VzID0gNDIpOworCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5E ICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworU0VMRUNUIGNvdW50KCopIEZS T00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0 aG91c2FuZCA9IDk5KTsKKwogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSB0 ZW5rMQogICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRo b3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKQEAgLTczOCw2ICs3NTYsMzAgQEAgU0VMRUNU IGNvdW50KCopIEZST00gdGVuazEKIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiAgIFdI RVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7 CiAKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisg IFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kIDwgNDIgT1IgdGhvdXNhbmQgPCA5 OSBPUiA0MyA+IHRob3VzYW5kIE9SIDQyID4gdGhvdXNhbmQpOworU0VMRUNUIGNvdW50KCop IEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPCA0MiBP UiB0aG91c2FuZCA8IDk5IE9SIDQzID4gdGhvdXNhbmQgT1IgNDIgPiB0aG91c2FuZCk7CisK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdI RVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzKSBP UiB0aG91c2FuZCA9IDQxOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUg dGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMpIE9SIHRo b3VzYW5kID0gNDE7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1Ig dGhvdXNhbmQgPSA5OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3VzYW5kID0gNDE7CitTRUxF Q1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91 c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2Fu ZCA9IDQxOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0 ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3Vz YW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsKK1NFTEVDVCBj b3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5k ID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0ZW50aG91cyA9 IDIpOworCiAtLQogLS0gQ2hlY2sgYmVoYXZpb3Igd2l0aCBkdXBsaWNhdGUgaW5kZXggY29s dW1uIGNvbnRlbnRzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9p bi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAppbmRleCBkODFmZjYzYmU1 My4uNDQ3M2I4ZjA0ZDUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4u c3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCkBAIC0xNDMzLDYgKzE0 MzMsMTUgQEAgc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgogICAoYS51 bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKICAgKChhLnVuaXF1ZTIgPSAzIG9y IGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKIAorZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgorICAoYS51bmlx dWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEu dW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAgKGEudW5pcXVlMSA8 IDIwIG9yIGEudW5pcXVlMSA9IDMgb3IgYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0g Mikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRy ZWQgPSA0KTsKKwogLS0KIC0tIHRlc3QgcGxhY2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4g YSBwYXJhbWV0ZXJpemVkIGpvaW4gdHJlZQogLS0KLS0gCjIuMzQuMQoK --------------UoXxVFJOhFiptSECoKzWcnaL--