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 1uuUew-00Awtc-OP for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Sep 2025 11:31:16 +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 1uuUev-006vOG-Ib for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Sep 2025 11:31:14 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uuUeu-006vO7-Vv for pgsql-hackers@lists.postgresql.org; Fri, 05 Sep 2025 11:31:13 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uuUen-000hg1-1t for pgsql-hackers@lists.postgresql.org; Fri, 05 Sep 2025 11:31:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1757071865; bh=w5oHp0I7C1gCFp4gSujtL5DGBbhaWNjvObu1IUw4kyE=; h=Message-ID:Date:User-Agent:Subject:From:To:Cc:References: In-Reply-To:From; b=Lm8RiUG3zQ0V+bgqOsNTxyeLY05u76jRU2yzopbDSema+rwxTPut3M+13h3onUQGH +pzwFy2bzm8frwMGkNzjACiG2CslJb60CzsvBr5ySaF4fnzkJ4KJwqHMKRjbENMtiY WLq7GaRaN8OgvOy8truYvMbUbVk15xLZOfhsDXaxKzG0vCicfgtYc1/mPoG06tUods HBILy4upgt8WAw2ipzKwTP/6VaNotdwiPnXCxCVcQiQ0iRpPv8qN151r8BaJlZ+1+7 l1Wwa2fO/jJCa2V/FA7JC7gBfjcDDlZvP9U9I++W1z1uXKk964uwcFAwNYsYvXIK/7 99pjoVjU/lNwA== Received: from [10.4.12.74] (unknown [93.174.131.141]) (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/465) with ESMTPSA id C388D60DBB; Fri, 5 Sep 2025 14:31:04 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------EtZbfN6X2bYyQbKIaA2Fs3yI" Message-ID: Date: Fri, 5 Sep 2025 14:31:04 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: pull-up subquery if JOIN-ON contains refs to upper-query From: Alena Rybakina To: Ilia Evdokimov , David Rowley Cc: Ranier Vilela , PostgreSQL Hackers , Peter Petrov References: <0b1f670d-b39d-4966-bf32-f0d502ebc564@postgrespro.ru> <46bc4eaf-58c5-42ab-8041-d3380a0768de@postgrespro.ru> <9b041978-06e3-4a50-8a5d-dacbb054f23e@tantorlabs.com> <8d7cbbf6-ddc0-4696-8af2-a68d740e14f2@postgrespro.ru> <6078f7e1-4b29-4b31-bd28-b84149e404e4@postgrespro.ru> <975a3736-a8b5-49b3-8009-4d4e86867aa1@postgrespro.ru> <0adbf75a-2059-4bb7-b878-c33892dbc1f0@tantorlabs.com> <300d7bb0-345c-4c0b-a0ef-4de573fcc94b@postgrespro.ru> <32446f52-1b18-499a-a77b-d6b66ad0f4cf@tantorlabs.com> <87a6fcbf-929a-408a-9471-28be3080254a@postgrespro.ru> <4e9d279c-83c1-42d3-b74d-7366ecd7f085@tantorlabs.com> <386165c3-3c01-4a85-b618-7919e64a52de@postgrespro.ru> Content-Language: en-US In-Reply-To: <386165c3-3c01-4a85-b618-7919e64a52de@postgrespro.ru> X-KSMG-AntiPhishing: NotDetected 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: 2025/09/05 07:49:00 #27769578 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. --------------EtZbfN6X2bYyQbKIaA2Fs3yI Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I rebased the patch and fixed earlier problem. On 03.09.2025 00:20, Alena Rybakina wrote: > > I'll look at this. I need some time to consider it. > > I'm working on this approach right now. I introduced mutator and made > the transformation if it is possible there but I need to fix some bugs. > --------------EtZbfN6X2bYyQbKIaA2Fs3yI Content-Type: text/x-patch; charset=UTF-8; name="v5-0001-Enables-pull-up-of-EXISTS-subqueries-tha.patch" Content-Disposition: attachment; filename="v5-0001-Enables-pull-up-of-EXISTS-subqueries-tha.patch" Content-Transfer-Encoding: base64 RnJvbSBiZWEwY2Y4MTVlMmFjMjgzYTk3M2RlYjMxYjJjYTY3YmQ2NmQ3ZjhhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogRnJpLCA1IFNlcCAyMDI1IDE0OjAxOjM1ICswMzAwClN1Ympl Y3Q6IFtQQVRDSF0gRW5hYmxlcyBwdWxsLXVwIG9mIEVYSVNUUyBzdWJxdWVyaWVzIHRoYXQK IGNvbnRhaW4gSU5ORVIgam9pbnMsIHVubG9ja2luZyBqb2luIHJlb3JkZXJpbmcgYW5kIGVh cmxpZXIgZmlsdGVyaW5nLiBPVVRFUgogam9pbnMgd2l0aCBvdXRlciByZWZlcmVuY2VzIGFy ZSBzYWZlbHkgZXhjbHVkZWQgdG8gcHJlc2VydmUgbnVsbC1wcmVzZXJ2aW5nCiBzZW1hbnRp Y3MuCgpUbyBhY2hpZXZlIHRoaXMsIGludHJvZHVjZSBhIG11dGF0b3IgdGhhdCBwZXJmb3Jt cyBhIHNpbmdsZSBjb25zZXJ2YXRpdmUKcGFzcyBvdmVyIHRoZSBzdWJxdWVyeSBqb2ludHJl ZSBhbmQgc3RvcHMgdHJhbnNmb3JtYXRpb24gaWYgc3VicXVlcnkKY29udGFpbnMgdm9sYXRp bGUgcXVhbHMsIG9yIE9VVEVSIGpvaW5zIHdpdGggb3V0ZXIgcmVmZXJlbmNlcywgc2luY2UK aG9pc3Rpbmcgd291bGQgYnJlYWsgbnVsbC1wcmVzZXJ2aW5nIGJlaGF2aW9yLgoKT24gdGhl IG90aGVyIGhhbmQsIE9VVEVSIGpvaW5zIHdpdGhvdXQgc3VjaCByZWZlcmVuY2VzIHJlbWFp biBpbnRhY3QuCkFkZCBJUyBOT1QgTlVMTCBndWFyZHMgb24gaG9pc3RlZCBvdXRlciBWYXJz IHRvIGF2b2lkIHJlZHVuZGFudCBudWxsIGVsZW1lbnRzCnRoYXQgb2J2aW91c2x5IHdvbid0 IHJlc3VsdCBhZnRlciBqb2luIG9wZXJhdGlvbi4KUmVwbGFjZSBhZmZlY3RlZCBzdWJxdWVy eSBxdWFscyB3aXRoIHRydWUuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vi c2VsZWN0LmMgICAgICAgIHwgNjExICsrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgMTEgKwogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL29w dGltaXplci9vcHRpbWl6ZXIuaCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQgICAgICAgfCA3OTEgKysrKysrKysrKysrKysr KysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQgfCAg MTAgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwgICAgICAgICAgICB8 IDQ0MyArKysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDE3MzYgaW5zZXJ0aW9ucygrKSwg MTMyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3N1YnNlbGVjdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0 LmMKaW5kZXggZDcxZWQ5NThlMzEuLjMzZmMxOWY3YWJjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zdWJzZWxlY3QuYwpAQCAtMTQzOSw2ICsxNDM5LDIzOSBAQCBjb252ZXJ0 X0FOWV9zdWJsaW5rX3RvX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1Ymxp bmssCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAordHlwZWRlZiBzdHJ1Y3QgSG9pc3RKb2luUXVh bHNDb250ZXh0Cit7CisJTGlzdCAqb3V0ZXJfY2xhdXNlczsgICAvKiBjb2xsZWN0IGhvaXN0 ZWQgY2xhdXNlcyAqLworCVJlbGlkcyBvYnNlcnZlZF9udWxsdGVzdF92YXJzOworfSBIb2lz dEpvaW5RdWFsc0NvbnRleHQ7CisKK3N0YXRpYyBOb2RlICoKK3ByZXByb2Nlc3NfcXVhbHMo Tm9kZSAqbm9kZSkKK3sKKwkvKgorCSAqIFJ1biBjb25zdC1mb2xkaW5nIHdpdGhvdXQgcGxh bm5lciBjb250ZXh0LgorCSAqCisJICogSU1QT1JUQU5UOiBQYXNzIE5VTEwgYXMgUGxhbm5l ckluZm8gaGVyZSBiZWNhdXNlIHdl4oCZcmUgc2ltcGxpZnlpbmcKKwkgKiBhICpzdWJxdWVy eeKAmXMqIHF1YWxzIGJlZm9yZSBpdHMgcnRhYmxlIGhhcyBiZWVuIG1lcmdlZCB3aXRoIHRo ZQorCSAqIHBhcmVudC4gSWYgd2UgcGFzc2VkIGEgbm9uLU5VTEwgcm9vdCwgZXZhbF9jb25z dF9leHByZXNzaW9ucygpCisJICogY291bGQgcGVyZm9ybSByb290LWRlcGVuZGVudCB0cmFu c2Zvcm1zIChlLmcuLCBmb2xkIE51bGxUZXN0IG9uIFZhcgorCSAqIHVzaW5nIHZhcl9pc19u b25udWxsYWJsZSkgYWdhaW5zdCB0aGUgKndyb25nKiByYW5nZXRhYmxlLCByaXNraW5nCisJ ICogb3V0LW9mLWJvdW5kcyBSVEUgYWNjZXNzLiBTZWUgZXZhbF9jb25zdF9leHByZXNzaW9u cygp4oCZcyBjb250cmFjdDoKKwkgKiDigJxyb290IGNhbiBiZSBwYXNzZWQgYXMgTlVMTCDi gKbigJ0gZm9yIGV4YWN0bHkgdGhpcyB1c2UtY2FzZS4KKwkgKi8KKwlub2RlID0gZXZhbF9j b25zdF9leHByZXNzaW9ucyhOVUxMLCBub2RlKTsKKwlub2RlID0gKE5vZGUgKikgY2Fub25p Y2FsaXplX3F1YWwoKEV4cHIgKikgbm9kZSwgZmFsc2UpOworCisJbm9kZSA9IChOb2RlICop IG1ha2VfYW5kc19pbXBsaWNpdCgoRXhwciAqKSBub2RlKTsKKworCXJldHVybiBub2RlOwor fQorCitzdGF0aWMgTnVsbFRlc3QgKgorbWFrZV9udWxsdGVzdChWYXIgKnZhciwgTnVsbFRl c3RUeXBlIHR5cGUpCit7CisJTnVsbFRlc3QgKm51bGx0ZXN0ID0gbWFrZU5vZGUoTnVsbFRl c3QpOworCW51bGx0ZXN0LT5hcmcgPSAoRXhwciAqKSB2YXI7CisJbnVsbHRlc3QtPm51bGx0 ZXN0dHlwZSA9IHR5cGU7CisJbnVsbHRlc3QtPmFyZ2lzcm93ID0gZmFsc2U7CisJbnVsbHRl c3QtPmxvY2F0aW9uID0gLTE7CisKKwlyZXR1cm4gbnVsbHRlc3Q7Cit9CisKK3N0YXRpYyBi b29sCitzaW1wbGljaXR5X2NoZWNrX3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjdHgpCit7 CisJaWYgKG5vZGUgPT0gTlVMTCkKKwl7CisJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZSBp ZihJc0Eobm9kZSwgVmFyKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZihJc0Eobm9kZSwg UXVlcnkpKQorCQlyZXR1cm4gcXVlcnlfdHJlZV93YWxrZXIoKFF1ZXJ5ICopIG5vZGUsCisJ CQkJCQkJCSBzaW1wbGljaXR5X2NoZWNrX3dhbGtlciwKKwkJCQkJCQkJICh2b2lkKikgY3R4 LAorCQkJCQkJCQkgUVRXX0VYQU1JTkVfUlRFU19CRUZPUkUpOworCisJcmV0dXJuIGV4cHJl c3Npb25fdHJlZV93YWxrZXIobm9kZSwgc2ltcGxpY2l0eV9jaGVja193YWxrZXIsCisJCQkJ CQkJCSAgKHZvaWQgKikgY3R4KTsKK30KKworc3RhdGljIExpc3QgKgorZ2VuZXJhdGVfbm90 X251bGxfZXhwcnMoTGlzdCAqbGlzdF9leHByLCBSZWxpZHMgKm9ic2VydmVkX3ZhcnMpCit7 CisJTGlzdENlbGwgKmxjOworCUxpc3QgKnJlc3VsdCA9IE5JTDsKKworCWZvcmVhY2gobGMs IGxpc3RfZXhwcikKKwl7CisJCU5vZGUgKm5vZGUgPSAoTm9kZSAqKSBsZmlyc3QobGMpOwor CisJCWlmIChJc0Eobm9kZSwgT3BFeHByKSkKKwkJeworCQkJTm9kZSAqbGFyZyA9IGdldF9s ZWZ0b3Aobm9kZSk7CisJCQlOb2RlICpyYXJnID0gZ2V0X3JpZ2h0b3Aobm9kZSk7CisKKwkJ CWlmIChJc0EobGFyZywgUmVsYWJlbFR5cGUpKQorCQkJCWxhcmcgPSAoTm9kZSAqKSAoKFJl bGFiZWxUeXBlICopIGxhcmcpLT5hcmc7CisKKwkJCWlmIChJc0EocmFyZywgUmVsYWJlbFR5 cGUpKQorCQkJCXJhcmcgPSAoTm9kZSAqKSAoKFJlbGFiZWxUeXBlICopIHJhcmcpLT5hcmc7 CisKKwkJCWlmKElzQShsYXJnLCBWYXIpKQorCQkJeworCQkJCVZhciAqdmFyID0gKFZhciAq KSBsYXJnOworCQkJCWlmICghYm1zX2lzX21lbWJlcih2YXItPnZhcm5vLCAqb2JzZXJ2ZWRf dmFycykgJiYgdmFyLT52YXJsZXZlbHN1cCA9PSAxKQorCQkJCXsKKwkJCQkJTnVsbFRlc3Qg Km51bGx0ZXN0ID0gbWFrZV9udWxsdGVzdCh2YXIsIElTX05PVF9OVUxMKTsKKwkJCQkJcmVz dWx0ID0gbGFwcGVuZChyZXN1bHQsIG51bGx0ZXN0KTsKKwkJCQkJKm9ic2VydmVkX3ZhcnMg PSBibXNfYWRkX21lbWJlcigqb2JzZXJ2ZWRfdmFycywgdmFyLT52YXJubyk7CisJCQkJCWNv bnRpbnVlOworCQkJCX0KKwkJCX0KKworCQkJaWYoSXNBKHJhcmcsIFZhcikpCisJCQl7CisJ CQkJVmFyICp2YXIgPSAoVmFyICopIHJhcmc7CisJCQkJaWYgKCFibXNfaXNfbWVtYmVyKHZh ci0+dmFybm8sICpvYnNlcnZlZF92YXJzKSAmJiB2YXItPnZhcmxldmVsc3VwID09IDEpCisJ CQkJeworCQkJCQlOdWxsVGVzdCAqbnVsbHRlc3QgPSBtYWtlX251bGx0ZXN0KHZhciwgSVNf Tk9UX05VTEwpOworCQkJCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwgbnVsbHRlc3QpOwor CQkJCQkqb2JzZXJ2ZWRfdmFycyA9IGJtc19hZGRfbWVtYmVyKCpvYnNlcnZlZF92YXJzLCB2 YXItPnZhcm5vKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJ cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE5vZGUgKgoraG9pc3RfcGFyZW50X3F1YWxz X2pvaW50cmVlX211dGF0b3IoTm9kZSAqanRub2RlLCBIb2lzdEpvaW5RdWFsc0NvbnRleHQg KmNvbnRleHQpCit7CisJaWYgKGp0bm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwor CWlmIChJc0EoanRub2RlLCBSYW5nZVRibFJlZikpCisJCXJldHVybiBqdG5vZGU7ICAvKiBu b3RoaW5nIHRvIGNoYW5nZSAqLworCisJaWYgKElzQShqdG5vZGUsIEpvaW5FeHByKSkKKwl7 CisJCUpvaW5FeHByICpqID0gKEpvaW5FeHByICopIGp0bm9kZTsKKwkJSm9pbkV4cHIgKm5l d2ogPSBtYWtlTm9kZShKb2luRXhwcik7CisJCUxpc3RDZWxsICpsYzsKKwkJTGlzdCAqam9p bl9jbGF1c2VzID0gTklMOworCQlOb2RlICpxdWFsOworCQltZW1jcHkobmV3aiwgaiwgc2l6 ZW9mKEpvaW5FeHByKSk7CisKKwkJLyogUmVjdXJzZSBpbnRvIGpvaW4gaW5wdXRzICovCisJ CW5ld2otPmxhcmcgPSAoTm9kZSAqKSBob2lzdF9wYXJlbnRfcXVhbHNfam9pbnRyZWVfbXV0 YXRvcihqLT5sYXJnLCBjb250ZXh0KTsKKwkJbmV3ai0+cmFyZyA9IChOb2RlICopIGhvaXN0 X3BhcmVudF9xdWFsc19qb2ludHJlZV9tdXRhdG9yKGotPnJhcmcsIGNvbnRleHQpOworCisJ CWlmKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKG5ld2otPnF1YWxzKSB8fAorCQkJCQkJ CQluZXdqLT5sYXJnID09IE5VTEwgfHwKKwkJCQkJCQkJbmV3ai0+cmFyZyA9PSBOVUxMKQor CQkJcmV0dXJuIE5VTEw7CisKKwkJcXVhbCA9IG5ld2otPnF1YWxzOworCQlxdWFsID0gcHJl cHJvY2Vzc19xdWFscyhxdWFsKTsKKworCQlmb3JlYWNoKGxjLCAoTGlzdCAqKSBxdWFsKQor CQl7CisJCQlOb2RlICpub2RlID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKworCQkJaWYgKElz QShub2RlLCBPcEV4cHIpKQorCQkJeworCQkJCWlmKHNpbXBsaWNpdHlfY2hlY2tfd2Fsa2Vy KGdldF9sZWZ0b3Aobm9kZSksIE5VTEwpICYmCisJCQkJCQlzaW1wbGljaXR5X2NoZWNrX3dh bGtlcihnZXRfcmlnaHRvcChub2RlKSwgTlVMTCkpCisJCQkJeworCQkJCQlqb2luX2NsYXVz ZXMgPSBsYXBwZW5kKGpvaW5fY2xhdXNlcywgbm9kZSk7CisJCQkJCWNvbnRpbnVlOworCQkJ CX0KKwkJCX0KKwkJCWNvbnRleHQtPm91dGVyX2NsYXVzZXMgPSBsYXBwZW5kKGNvbnRleHQt Pm91dGVyX2NsYXVzZXMsIG5vZGUpOworCQl9CisKKwkJLyogT25seSB0b3VjaCBJTk5FUiBK T0lOcyAqLworCQlpZiAoKGotPmpvaW50eXBlICE9IEpPSU5fTEVGVCAmJgorCQkJIGotPmpv aW50eXBlICE9IEpPSU5fUklHSFQgJiYKKwkJCSBqLT5qb2ludHlwZSAhPSBKT0lOX0ZVTEwp KSAgLyogc3VicXVlcnkgdmFycyAqLworCQl7CisJCQlMaXN0ICpudWxsX3Rlc3RzOworCisJ CQlpZiAoam9pbl9jbGF1c2VzID09IE5JTCkgIC8qIHN1YnF1ZXJ5IHZhcnMgKi8KKwkJCXsK KwkJCQluZXdqLT5xdWFscyA9IChOb2RlICopIG1ha2VCb29sQ29uc3QodHJ1ZSwgZmFsc2Up OworCQkJfQorCQkJZWxzZSBpZihqb2luX2NsYXVzZXMgIT0gTklMICYmIGNvbnRhaW5fdmFy c19vZl9sZXZlbCgoTm9kZSAqKSBqb2luX2NsYXVzZXMsIDEpKQorCQkJeworCQkJCW51bGxf dGVzdHMgPSBnZW5lcmF0ZV9ub3RfbnVsbF9leHBycyhqb2luX2NsYXVzZXMsICZjb250ZXh0 LT5vYnNlcnZlZF9udWxsdGVzdF92YXJzKTsKKwkJCQljb250ZXh0LT5vdXRlcl9jbGF1c2Vz ID0gbGlzdF9jb25jYXQoY29udGV4dC0+b3V0ZXJfY2xhdXNlcywgbnVsbF90ZXN0cyk7CisJ CQkJY29udGV4dC0+b3V0ZXJfY2xhdXNlcyA9IGxpc3RfY29uY2F0KGNvbnRleHQtPm91dGVy X2NsYXVzZXMsIGpvaW5fY2xhdXNlcyk7CisJCQkJbmV3ai0+cXVhbHMgPSAoTm9kZSAqKSBt YWtlQm9vbENvbnN0KHRydWUsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlu ZXdqLT5xdWFscyA9IChOb2RlICopIG1ha2VfYW5kc19leHBsaWNpdChqb2luX2NsYXVzZXMp OworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGNvbnRhaW5fdmFyc19vZl9sZXZl bChqLT5xdWFscywgMSkpCisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlyZXR1cm4gKE5v ZGUgKikgbmV3ajsKKwl9CisKKwlpZiAoSXNBKGp0bm9kZSwgRnJvbUV4cHIpKQorCXsKKwkJ RnJvbUV4cHIgKmYgPSAoRnJvbUV4cHIgKikganRub2RlOworCQlGcm9tRXhwciAqbmV3ZiA9 IG1ha2VOb2RlKEZyb21FeHByKTsKKwkJTGlzdENlbGwgKmxjOworCQlMaXN0ICpmcm9tbGlz dCA9IE5JTDsKKworCQkvKiBSZWN1cnNlIGludG8gZnJvbWxpc3QgKi8KKwkJbWVtY3B5KG5l d2YsIGYsIHNpemVvZihGcm9tRXhwcikpOworCisJCS8qCisJCSAqIFByb2Nlc3MgY2hpbGRy ZW4sIGlmIGFueSBvZiB0aGVpciBqb2ludHJlZSBjb250YWlucyBWYXJzIG9mIHRoZQorCQkg KiBwYXJlbnQgcXVlcnkgb3IgcXVhbHMgb2YgdGhlaXIgSm9pbkV4cHIgY29udGFpbnMgdm9s YXRpbGUgZnVuY3Rpb25zCisJCSAqIHRoZW4gZXhpdAorCQkgKi8KKwkJZm9yZWFjaChsYywg bmV3Zi0+ZnJvbWxpc3QpCisJCXsKKwkJCU5vZGUgKmZub2RlID0gaG9pc3RfcGFyZW50X3F1 YWxzX2pvaW50cmVlX211dGF0b3IobGZpcnN0KGxjKSwgY29udGV4dCk7CisKKwkJCWlmIChm bm9kZSA9PSBOVUxMKQorCQkJCXJldHVybiBOVUxMOworCQkJZnJvbWxpc3QgPSBsYXBwZW5k KGZyb21saXN0LCBmbm9kZSk7CisJCX0KKworCQluZXdmLT5mcm9tbGlzdCA9IGZyb21saXN0 OworCisJCWlmKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKG5ld2YtPnF1YWxzKSkKKwkJ CXJldHVybiBOVUxMOworCisJCWlmKG5ld2YtPnF1YWxzKQorCQl7CisJCQlOb2RlICpxdWFs ID0gbmV3Zi0+cXVhbHM7CisJCQkvKiBRdWFscyAoV0hFUkUgY2xhdXNlKSBtYXkgc3RpbGwg Y29udGFpbiBzdWJsaW5rcyBldGMgKi8KKwkJCXF1YWwgPSBwcmVwcm9jZXNzX3F1YWxzKHF1 YWwpOworCQkJY29udGV4dC0+b3V0ZXJfY2xhdXNlcyA9IGxpc3RfY29uY2F0KGNvbnRleHQt Pm91dGVyX2NsYXVzZXMsIChMaXN0ICopIHF1YWwpOworCQkJbmV3Zi0+cXVhbHMgPSBOVUxM OworCQl9CisKKwkJcmV0dXJuIChOb2RlICopIG5ld2Y7CisJfQorCisJcmV0dXJuIGp0bm9k ZTsgIC8qIHF1aWV0IGNvbXBpbGVyICovCit9CisKK2Jvb2wgcHVsbF91cF93aXRoX2pvaW5z ID0gdHJ1ZTsKKwogLyoKICAqIGNvbnZlcnRfRVhJU1RTX3N1YmxpbmtfdG9fam9pbjogdHJ5 IHRvIGNvbnZlcnQgYW4gRVhJU1RTIFN1YkxpbmsgdG8gYSBqb2luCiAgKgpAQCAtMTQ1Mywx MiArMTY4NiwxMyBAQCBjb252ZXJ0X0VYSVNUU19zdWJsaW5rX3RvX2pvaW4oUGxhbm5lcklu Zm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCiAJSm9pbkV4cHIgICAqcmVzdWx0OwogCVF1 ZXJ5CSAgICpwYXJzZSA9IHJvb3QtPnBhcnNlOwogCVF1ZXJ5CSAgICpzdWJzZWxlY3QgPSAo UXVlcnkgKikgc3VibGluay0+c3Vic2VsZWN0OwotCU5vZGUJICAgKndoZXJlQ2xhdXNlOwor CU5vZGUJICAgKndoZXJlQ2xhdXNlID0gTlVMTDsKIAlQbGFubmVySW5mbyBzdWJyb290Owog CWludAkJCXJ0b2Zmc2V0OwogCWludAkJCXZhcm5vOwogCVJlbGlkcwkJY2xhdXNlX3Zhcm5v czsKIAlSZWxpZHMJCXVwcGVyX3Zhcm5vczsKKwlMaXN0IAkgICAqbmV3V2hlcmUgPSBOSUw7 CiAKIAlBc3NlcnQoc3VibGluay0+c3ViTGlua1R5cGUgPT0gRVhJU1RTX1NVQkxJTkspOwog CkBAIC0xNDg4LDE0NSArMTcyMiwyNzAgQEAgY29udmVydF9FWElTVFNfc3VibGlua190b19q b2luKFBsYW5uZXJJbmZvICpyb290LCBTdWJMaW5rICpzdWJsaW5rLAogCWlmICghc2ltcGxp ZnlfRVhJU1RTX3F1ZXJ5KHJvb3QsIHN1YnNlbGVjdCkpCiAJCXJldHVybiBOVUxMOwogCi0J LyoKLQkgKiBTZXBhcmF0ZSBvdXQgdGhlIFdIRVJFIGNsYXVzZS4gIChXZSBjb3VsZCB0aGVv cmV0aWNhbGx5IGFsc28gcmVtb3ZlCi0JICogdG9wLWxldmVsIHBsYWluIEpPSU4vT04gY2xh dXNlcywgYnV0IGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZQotCSAqIHRyb3VibGUuKQot CSAqLwotCXdoZXJlQ2xhdXNlID0gc3Vic2VsZWN0LT5qb2ludHJlZS0+cXVhbHM7Ci0Jc3Vi c2VsZWN0LT5qb2ludHJlZS0+cXVhbHMgPSBOVUxMOwogCi0JLyoKLQkgKiBUaGUgcmVzdCBv ZiB0aGUgc3ViLXNlbGVjdCBtdXN0IG5vdCByZWZlciB0byBhbnkgVmFycyBvZiB0aGUgcGFy ZW50Ci0JICogcXVlcnkuICAoVmFycyBvZiBoaWdoZXIgbGV2ZWxzIHNob3VsZCBiZSBva2F5 LCB0aG91Z2guKQotCSAqLwotCWlmIChjb250YWluX3ZhcnNfb2ZfbGV2ZWwoKE5vZGUgKikg c3Vic2VsZWN0LCAxKSkKLQkJcmV0dXJuIE5VTEw7CisJaWYocHVsbF91cF93aXRoX2pvaW5z KQorCXsKKwkJSG9pc3RKb2luUXVhbHNDb250ZXh0IGhqcV9jb250ZXh0ID0ge05JTCwgTlVM TH07CiAKLQkvKgotCSAqIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgV0hFUkUgY2xhdXNlIG11 c3QgY29udGFpbiBzb21lIFZhcnMgb2YgdGhlCi0JICogcGFyZW50IHF1ZXJ5LCBlbHNlIGl0 J3Mgbm90IGdvbm5hIGJlIGEgam9pbi4KLQkgKi8KLQlpZiAoIWNvbnRhaW5fdmFyc19vZl9s ZXZlbCh3aGVyZUNsYXVzZSwgMSkpCi0JCXJldHVybiBOVUxMOwogCi0JLyoKLQkgKiBXZSBk b24ndCByaXNrIG9wdGltaXppbmcgaWYgdGhlIFdIRVJFIGNsYXVzZSBpcyB2b2xhdGlsZSwg ZWl0aGVyLgotCSAqLwotCWlmIChjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucyh3aGVyZUNs YXVzZSkpCi0JCXJldHVybiBOVUxMOworCQkvKgorCQkqIFNjYW4gdGhlIHJhbmdldGFibGUg Zm9yIHJlbGF0aW9uIFJURXMgYW5kIHJldHJpZXZlIHRoZSBuZWNlc3NhcnkKKwkJKiBjYXRh bG9nIGluZm9ybWF0aW9uIGZvciBlYWNoIHJlbGF0aW9uLiAgVXNpbmcgdGhpcyBpbmZvcm1h dGlvbiwgY2xlYXIKKwkJKiB0aGUgaW5oIGZsYWcgZm9yIGFueSByZWxhdGlvbiB0aGF0IGhh cyBubyBjaGlsZHJlbiwgY29sbGVjdCBub3QtbnVsbAorCQkqIGF0dHJpYnV0ZSBudW1iZXJz IGZvciBhbnkgcmVsYXRpb24gdGhhdCBoYXMgY29sdW1uIG5vdC1udWxsCisJCSogY29uc3Ry YWludHMsIGFuZCBleHBhbmQgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBmb3IgYW55IHJl bGF0aW9uIHRoYXQKKwkJKiBjb250YWlucyB0aGVtLgorCQkqCisJCSogTm90ZTogd2UgY29u c3RydWN0IHVwIGFuIGVudGlyZWx5IGR1bW15IFBsYW5uZXJJbmZvIGZvciB1c2UgaGVyZS4g IFRoaXMKKwkJKiBpcyBmaW5lIGJlY2F1c2Ugb25seSB0aGUgImdsb2IiIGFuZCAicGFyc2Ui IGxpbmtzIHdpbGwgYmUgdXNlZCBpbiB0aGlzCisJCSogY2FzZS4KKwkJKgorCQkqIE5vdGU6 IHdlIHRlbXBvcmFyaWx5IGFzc2lnbiBiYWNrIHRoZSBXSEVSRSBjbGF1c2Ugc28gdGhhdCBh bnkgdmlydHVhbAorCQkqIGdlbmVyYXRlZCBjb2x1bW4gcmVmZXJlbmNlcyB3aXRoaW4gaXQg Y2FuIGJlIGV4cGFuZGVkLiAgSXQgc2hvdWxkIGJlCisJCSogc2VwYXJhdGVkIG91dCBhZ2Fp biBhZnRlcndhcmQuCisJCSovCisJCU1lbVNldCgmc3Vicm9vdCwgMCwgc2l6ZW9mKHN1YnJv b3QpKTsKKwkJc3Vicm9vdC50eXBlID0gVF9QbGFubmVySW5mbzsKKwkJc3Vicm9vdC5nbG9i ID0gcm9vdC0+Z2xvYjsKKwkJc3Vicm9vdC5wYXJzZSA9IHN1YnNlbGVjdDsKKwkJc3Vic2Vs ZWN0ID0gcHJlcHJvY2Vzc19yZWxhdGlvbl9ydGVzKCZzdWJyb290KTsKKworCQlzdWJzZWxl Y3QtPmpvaW50cmVlID0gKEZyb21FeHByICogKSBob2lzdF9wYXJlbnRfcXVhbHNfam9pbnRy ZWVfbXV0YXRvcigoTm9kZSAqKSBzdWJzZWxlY3QtPmpvaW50cmVlLCAmaGpxX2NvbnRleHQp OworCisJCWlmKHN1YnNlbGVjdC0+am9pbnRyZWUgPT0gTlVMTCB8fCBoanFfY29udGV4dC5v dXRlcl9jbGF1c2VzID09IE5JTCkKKwkJCXJldHVybiBOVUxMOwogCi0JLyoKLQkgKiBTY2Fu IHRoZSByYW5nZXRhYmxlIGZvciByZWxhdGlvbiBSVEVzIGFuZCByZXRyaWV2ZSB0aGUgbmVj ZXNzYXJ5Ci0JICogY2F0YWxvZyBpbmZvcm1hdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4gIFVz aW5nIHRoaXMgaW5mb3JtYXRpb24sIGNsZWFyCi0JICogdGhlIGluaCBmbGFnIGZvciBhbnkg cmVsYXRpb24gdGhhdCBoYXMgbm8gY2hpbGRyZW4sIGNvbGxlY3Qgbm90LW51bGwKLQkgKiBh dHRyaWJ1dGUgbnVtYmVycyBmb3IgYW55IHJlbGF0aW9uIHRoYXQgaGFzIGNvbHVtbiBub3Qt bnVsbAotCSAqIGNvbnN0cmFpbnRzLCBhbmQgZXhwYW5kIHZpcnR1YWwgZ2VuZXJhdGVkIGNv bHVtbnMgZm9yIGFueSByZWxhdGlvbiB0aGF0Ci0JICogY29udGFpbnMgdGhlbS4KLQkgKgot CSAqIE5vdGU6IHdlIGNvbnN0cnVjdCB1cCBhbiBlbnRpcmVseSBkdW1teSBQbGFubmVySW5m byBmb3IgdXNlIGhlcmUuICBUaGlzCi0JICogaXMgZmluZSBiZWNhdXNlIG9ubHkgdGhlICJn bG9iIiBhbmQgInBhcnNlIiBsaW5rcyB3aWxsIGJlIHVzZWQgaW4gdGhpcwotCSAqIGNhc2Uu Ci0JICoKLQkgKiBOb3RlOiB3ZSB0ZW1wb3JhcmlseSBhc3NpZ24gYmFjayB0aGUgV0hFUkUg Y2xhdXNlIHNvIHRoYXQgYW55IHZpcnR1YWwKLQkgKiBnZW5lcmF0ZWQgY29sdW1uIHJlZmVy ZW5jZXMgd2l0aGluIGl0IGNhbiBiZSBleHBhbmRlZC4gIEl0IHNob3VsZCBiZQotCSAqIHNl cGFyYXRlZCBvdXQgYWdhaW4gYWZ0ZXJ3YXJkLgotCSAqLwotCU1lbVNldCgmc3Vicm9vdCwg MCwgc2l6ZW9mKHN1YnJvb3QpKTsKLQlzdWJyb290LnR5cGUgPSBUX1BsYW5uZXJJbmZvOwot CXN1YnJvb3QuZ2xvYiA9IHJvb3QtPmdsb2I7Ci0Jc3Vicm9vdC5wYXJzZSA9IHN1YnNlbGVj dDsKLQlzdWJzZWxlY3QtPmpvaW50cmVlLT5xdWFscyA9IHdoZXJlQ2xhdXNlOwotCXN1YnNl bGVjdCA9IHByZXByb2Nlc3NfcmVsYXRpb25fcnRlcygmc3Vicm9vdCk7CisJCW5ld1doZXJl ID0gaGpxX2NvbnRleHQub3V0ZXJfY2xhdXNlczsKIAotCS8qCi0JICogTm93IHNlcGFyYXRl IG91dCB0aGUgV0hFUkUgY2xhdXNlIGFnYWluLgotCSAqLwotCXdoZXJlQ2xhdXNlID0gc3Vi c2VsZWN0LT5qb2ludHJlZS0+cXVhbHM7Ci0Jc3Vic2VsZWN0LT5qb2ludHJlZS0+cXVhbHMg PSBOVUxMOworCQlibXNfZnJlZShoanFfY29udGV4dC5vYnNlcnZlZF9udWxsdGVzdF92YXJz KTsKIAotCS8qCi0JICogVGhlIHN1YnF1ZXJ5IG11c3QgaGF2ZSBhIG5vbmVtcHR5IGpvaW50 cmVlLCBidXQgd2UgY2FuIG1ha2UgaXQgc28uCi0JICovCi0JcmVwbGFjZV9lbXB0eV9qb2lu dHJlZShzdWJzZWxlY3QpOworCQlzdWJzZWxlY3QtPmpvaW50cmVlLT5xdWFscyA9IE5VTEw7 CiAKLQkvKgotCSAqIFByZXBhcmUgdG8gcHVsbCB1cCB0aGUgc3ViLXNlbGVjdCBpbnRvIHRv cCByYW5nZSB0YWJsZS4KLQkgKgotCSAqIFdlIHJlbHkgaGVyZSBvbiB0aGUgYXNzdW1wdGlv biB0aGF0IHRoZSBvdXRlciBxdWVyeSBoYXMgbm8gcmVmZXJlbmNlcwotCSAqIHRvIHRoZSBp bm5lciAobmVjZXNzYXJpbHkgdHJ1ZSkuIFRoZXJlZm9yZSB0aGlzIGlzIGEgbG90IGVhc2ll ciB0aGFuCi0JICogd2hhdCBwdWxsX3VwX3N1YnF1ZXJpZXMgaGFzIHRvIGdvIHRocm91Z2gu Ci0JICoKLQkgKiBJbiBmYWN0LCBpdCdzIGV2ZW4gZWFzaWVyIHRoYW4gd2hhdCBjb252ZXJ0 X0FOWV9zdWJsaW5rX3RvX2pvaW4gaGFzIHRvCi0JICogZG8uICBUaGUgbWFjaGluYXRpb25z IG9mIHNpbXBsaWZ5X0VYSVNUU19xdWVyeSBlbnN1cmVkIHRoYXQgdGhlcmUgaXMKLQkgKiBu b3RoaW5nIGludGVyZXN0aW5nIGluIHRoZSBzdWJxdWVyeSBleGNlcHQgYW4gcnRhYmxlIGFu ZCBqb2ludHJlZSwgYW5kCi0JICogZXZlbiB0aGUgam9pbnRyZWUgRnJvbUV4cHIgbm8gbG9u Z2VyIGhhcyBxdWFscy4gIFNvIHdlIGNhbiBqdXN0IGFwcGVuZAotCSAqIHRoZSBydGFibGUg dG8gb3VyIG93biBhbmQgdXNlIHRoZSBGcm9tRXhwciBpbiBvdXIgam9pbnRyZWUuIEJ1dCBm aXJzdCwKLQkgKiBhZGp1c3QgYWxsIGxldmVsLXplcm8gdmFybm9zIGluIHRoZSBzdWJxdWVy eSB0byBhY2NvdW50IGZvciB0aGUgcnRhYmxlCi0JICogbWVyZ2VyLgotCSAqLwotCXJ0b2Zm c2V0ID0gbGlzdF9sZW5ndGgocGFyc2UtPnJ0YWJsZSk7Ci0JT2Zmc2V0VmFyTm9kZXMoKE5v ZGUgKikgc3Vic2VsZWN0LCBydG9mZnNldCwgMCk7Ci0JT2Zmc2V0VmFyTm9kZXMod2hlcmVD bGF1c2UsIHJ0b2Zmc2V0LCAwKTsKKwkJLyoKKwkJKiBUaGUgc3VicXVlcnkgbXVzdCBoYXZl IGEgbm9uZW1wdHkgam9pbnRyZWUsIGJ1dCB3ZSBjYW4gbWFrZSBpdCBzby4KKwkJKi8KKwkJ cmVwbGFjZV9lbXB0eV9qb2ludHJlZShzdWJzZWxlY3QpOwogCi0JLyoKLQkgKiBVcHBlci1s ZXZlbCB2YXJzIGluIHN1YnF1ZXJ5IHdpbGwgbm93IGJlIG9uZSBsZXZlbCBjbG9zZXIgdG8g dGhlaXIKLQkgKiBwYXJlbnQgdGhhbiBiZWZvcmU7IGluIHBhcnRpY3VsYXIsIGFueXRoaW5n IHRoYXQgaGFkIGJlZW4gbGV2ZWwgMQotCSAqIGJlY29tZXMgbGV2ZWwgemVyby4KLQkgKi8K LQlJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcCgoTm9kZSAqKSBzdWJzZWxlY3QsIC0xLCAxKTsK LQlJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcCh3aGVyZUNsYXVzZSwgLTEsIDEpOworCQkvKgor CQkqIFByZXBhcmUgdG8gcHVsbCB1cCB0aGUgc3ViLXNlbGVjdCBpbnRvIHRvcCByYW5nZSB0 YWJsZS4KKwkJKgorCQkqIFdlIHJlbHkgaGVyZSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRo ZSBvdXRlciBxdWVyeSBoYXMgbm8gcmVmZXJlbmNlcworCQkqIHRvIHRoZSBpbm5lciAobmVj ZXNzYXJpbHkgdHJ1ZSkuIFRoZXJlZm9yZSB0aGlzIGlzIGEgbG90IGVhc2llciB0aGFuCisJ CSogd2hhdCBwdWxsX3VwX3N1YnF1ZXJpZXMgaGFzIHRvIGdvIHRocm91Z2guCisJCSoKKwkJ KiBJbiBmYWN0LCBpdCdzIGV2ZW4gZWFzaWVyIHRoYW4gd2hhdCBjb252ZXJ0X0FOWV9zdWJs aW5rX3RvX2pvaW4gaGFzIHRvCisJCSogZG8uICBUaGUgbWFjaGluYXRpb25zIG9mIHNpbXBs aWZ5X0VYSVNUU19xdWVyeSBlbnN1cmVkIHRoYXQgdGhlcmUgaXMKKwkJKiBub3RoaW5nIGlu dGVyZXN0aW5nIGluIHRoZSBzdWJxdWVyeSBleGNlcHQgYW4gcnRhYmxlIGFuZCBqb2ludHJl ZSwgYW5kCisJCSogZXZlbiB0aGUgam9pbnRyZWUgRnJvbUV4cHIgbm8gbG9uZ2VyIGhhcyBx dWFscy4gIFNvIHdlIGNhbiBqdXN0IGFwcGVuZAorCQkqIHRoZSBydGFibGUgdG8gb3VyIG93 biBhbmQgdXNlIHRoZSBGcm9tRXhwciBpbiBvdXIgam9pbnRyZWUuIEJ1dCBmaXJzdCwKKwkJ KiBhZGp1c3QgYWxsIGxldmVsLXplcm8gdmFybm9zIGluIHRoZSBzdWJxdWVyeSB0byBhY2Nv dW50IGZvciB0aGUgcnRhYmxlCisJCSogbWVyZ2VyLgorCQkqLworCQlydG9mZnNldCA9IGxp c3RfbGVuZ3RoKHBhcnNlLT5ydGFibGUpOworCQlPZmZzZXRWYXJOb2RlcygoTm9kZSAqKSBz dWJzZWxlY3QsIHJ0b2Zmc2V0LCAwKTsKIAotCS8qCi0JICogTm93IHRoYXQgdGhlIFdIRVJF IGNsYXVzZSBpcyBhZGp1c3RlZCB0byBtYXRjaCB0aGUgcGFyZW50IHF1ZXJ5Ci0JICogZW52 aXJvbm1lbnQsIHdlIGNhbiBlYXNpbHkgaWRlbnRpZnkgYWxsIHRoZSBsZXZlbC16ZXJvIHJl bHMgaXQgdXNlcy4KLQkgKiBUaGUgb25lcyA8PSBydG9mZnNldCBiZWxvbmcgdG8gdGhlIHVw cGVyIHF1ZXJ5OyB0aGUgb25lcyA+IHJ0b2Zmc2V0IGRvCi0JICogbm90LgotCSAqLwotCWNs YXVzZV92YXJub3MgPSBwdWxsX3Zhcm5vcyhyb290LCB3aGVyZUNsYXVzZSk7Ci0JdXBwZXJf dmFybm9zID0gTlVMTDsKLQl2YXJubyA9IC0xOwotCXdoaWxlICgodmFybm8gPSBibXNfbmV4 dF9tZW1iZXIoY2xhdXNlX3Zhcm5vcywgdmFybm8pKSA+PSAwKQotCXsKLQkJaWYgKHZhcm5v IDw9IHJ0b2Zmc2V0KQotCQkJdXBwZXJfdmFybm9zID0gYm1zX2FkZF9tZW1iZXIodXBwZXJf dmFybm9zLCB2YXJubyk7Ci0JfQotCWJtc19mcmVlKGNsYXVzZV92YXJub3MpOwotCUFzc2Vy dCghYm1zX2lzX2VtcHR5KHVwcGVyX3Zhcm5vcykpOworCQkvKgorCQkqIFVwcGVyLWxldmVs IHZhcnMgaW4gc3VicXVlcnkgd2lsbCBub3cgYmUgb25lIGxldmVsIGNsb3NlciB0byB0aGVp cgorCQkqIHBhcmVudCB0aGFuIGJlZm9yZTsgaW4gcGFydGljdWxhciwgYW55dGhpbmcgdGhh dCBoYWQgYmVlbiBsZXZlbCAxCisJCSogYmVjb21lcyBsZXZlbCB6ZXJvLgorCQkqLworCQlJ bmNyZW1lbnRWYXJTdWJsZXZlbHNVcCgoTm9kZSAqKSBzdWJzZWxlY3QsIC0xLCAxKTsKIAot CS8qCi0JICogTm93IHRoYXQgd2UndmUgZ290IHRoZSBzZXQgb2YgdXBwZXItbGV2ZWwgdmFy bm9zLCB3ZSBjYW4gbWFrZSB0aGUgbGFzdAotCSAqIGNoZWNrOiBvbmx5IGF2YWlsYWJsZV9y ZWxzIGNhbiBiZSByZWZlcmVuY2VkLgotCSAqLwotCWlmICghYm1zX2lzX3N1YnNldCh1cHBl cl92YXJub3MsIGF2YWlsYWJsZV9yZWxzKSkKLQkJcmV0dXJuIE5VTEw7CisJCU9mZnNldFZh ck5vZGVzKChOb2RlICopIG5ld1doZXJlLCBydG9mZnNldCwgMCk7CisJCUluY3JlbWVudFZh clN1YmxldmVsc1VwKChOb2RlICopIG5ld1doZXJlLCAtMSwgMSk7CiAKLQkvKgotCSAqIE5v dyB3ZSBjYW4gYXR0YWNoIHRoZSBtb2RpZmllZCBzdWJxdWVyeSBydGFibGUgdG8gdGhlIHBh cmVudC4gVGhpcyBhbHNvCi0JICogYWRkcyBzdWJxdWVyeSdzIFJURVBlcm1pc3Npb25JbmZv cyBpbnRvIHRoZSB1cHBlciBxdWVyeS4KLQkgKi8KLQlDb21iaW5lUmFuZ2VUYWJsZXMoJnBh cnNlLT5ydGFibGUsICZwYXJzZS0+cnRlcGVybWluZm9zLAotCQkJCQkgICBzdWJzZWxlY3Qt PnJ0YWJsZSwgc3Vic2VsZWN0LT5ydGVwZXJtaW5mb3MpOworCQkvKgorCQkqIE5vdyB0aGF0 IHRoZSBXSEVSRSBjbGF1c2UgaXMgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIHBhcmVudCBxdWVy eQorCQkqIGVudmlyb25tZW50LCB3ZSBjYW4gZWFzaWx5IGlkZW50aWZ5IGFsbCB0aGUgbGV2 ZWwtemVybyByZWxzIGl0IHVzZXMuCisJCSogVGhlIG9uZXMgPD0gcnRvZmZzZXQgYmVsb25n IHRvIHRoZSB1cHBlciBxdWVyeTsgdGhlIG9uZXMgPiBydG9mZnNldCBkbworCQkqIG5vdC4K KwkJKi8KKwkJY2xhdXNlX3Zhcm5vcyA9IHB1bGxfdmFybm9zKHJvb3QsIChOb2RlICopIG5l d1doZXJlKTsKKwkJdXBwZXJfdmFybm9zID0gTlVMTDsKKwkJdmFybm8gPSAtMTsKKwkJd2hp bGUgKCh2YXJubyA9IGJtc19uZXh0X21lbWJlcihjbGF1c2VfdmFybm9zLCB2YXJubykpID49 IDApCisJCXsKKwkJCWlmICh2YXJubyA8PSBydG9mZnNldCkKKwkJCQl1cHBlcl92YXJub3Mg PSBibXNfYWRkX21lbWJlcih1cHBlcl92YXJub3MsIHZhcm5vKTsKKwkJfQorCQlibXNfZnJl ZShjbGF1c2VfdmFybm9zKTsKIAotCS8qCi0JICogQW5kIGZpbmFsbHksIGJ1aWxkIHRoZSBK b2luRXhwciBub2RlLgotCSAqLwotCXJlc3VsdCA9IG1ha2VOb2RlKEpvaW5FeHByKTsKLQly ZXN1bHQtPmpvaW50eXBlID0gdW5kZXJfbm90ID8gSk9JTl9BTlRJIDogSk9JTl9TRU1JOwot CXJlc3VsdC0+aXNOYXR1cmFsID0gZmFsc2U7Ci0JcmVzdWx0LT5sYXJnID0gTlVMTDsJCS8q IGNhbGxlciBtdXN0IGZpbGwgdGhpcyBpbiAqLwotCS8qIGZsYXR0ZW4gb3V0IHRoZSBGcm9t RXhwciBub2RlIGlmIGl0J3MgdXNlbGVzcyAqLwotCWlmIChsaXN0X2xlbmd0aChzdWJzZWxl Y3QtPmpvaW50cmVlLT5mcm9tbGlzdCkgPT0gMSkKLQkJcmVzdWx0LT5yYXJnID0gKE5vZGUg KikgbGluaXRpYWwoc3Vic2VsZWN0LT5qb2ludHJlZS0+ZnJvbWxpc3QpOworCQkvKgorCQkq IE5vdyB0aGF0IHdlJ3ZlIGdvdCB0aGUgc2V0IG9mIHVwcGVyLWxldmVsIHZhcm5vcywgd2Ug Y2FuIG1ha2UgdGhlIGxhc3QKKwkJKiBjaGVjazogb25seSBhdmFpbGFibGVfcmVscyBjYW4g YmUgcmVmZXJlbmNlZC4KKwkJKi8KKwkJaWYgKCFibXNfaXNfZW1wdHkodXBwZXJfdmFybm9z KSAmJiAhYm1zX2lzX3N1YnNldCh1cHBlcl92YXJub3MsIGF2YWlsYWJsZV9yZWxzKSkKKwkJ CXJldHVybiBOVUxMOworCisJCS8qCisJCSogTm93IHdlIGNhbiBhdHRhY2ggdGhlIG1vZGlm aWVkIHN1YnF1ZXJ5IHJ0YWJsZSB0byB0aGUgcGFyZW50LiBUaGlzIGFsc28KKwkJKiBhZGRz IHN1YnF1ZXJ5J3MgUlRFUGVybWlzc2lvbkluZm9zIGludG8gdGhlIHVwcGVyIHF1ZXJ5Lgor CQkqLworCQlDb21iaW5lUmFuZ2VUYWJsZXMoJnBhcnNlLT5ydGFibGUsICZwYXJzZS0+cnRl cGVybWluZm9zLAorCQkJCQkJc3Vic2VsZWN0LT5ydGFibGUsIHN1YnNlbGVjdC0+cnRlcGVy bWluZm9zKTsKKworCQkvKgorCQkqIEFuZCBmaW5hbGx5LCBidWlsZCB0aGUgSm9pbkV4cHIg bm9kZS4KKwkJKi8KKwkJcmVzdWx0ID0gbWFrZU5vZGUoSm9pbkV4cHIpOworCQlyZXN1bHQt PmpvaW50eXBlID0gdW5kZXJfbm90ID8gSk9JTl9BTlRJIDogSk9JTl9TRU1JOworCQlyZXN1 bHQtPmlzTmF0dXJhbCA9IGZhbHNlOworCQlyZXN1bHQtPmxhcmcgPSBOVUxMOwkJLyogY2Fs bGVyIG11c3QgZmlsbCB0aGlzIGluICovCisJCS8qIGZsYXR0ZW4gb3V0IHRoZSBGcm9tRXhw ciBub2RlIGlmIGl0J3MgdXNlbGVzcyAqLworCQlpZiAobGlzdF9sZW5ndGgoc3Vic2VsZWN0 LT5qb2ludHJlZS0+ZnJvbWxpc3QpID09IDEpCisJCQlyZXN1bHQtPnJhcmcgPSAoTm9kZSAq KSBsaW5pdGlhbChzdWJzZWxlY3QtPmpvaW50cmVlLT5mcm9tbGlzdCk7CisJCWVsc2UKKwkJ CXJlc3VsdC0+cmFyZyA9IChOb2RlICopIHN1YnNlbGVjdC0+am9pbnRyZWU7CisJCXJlc3Vs dC0+dXNpbmdDbGF1c2UgPSBOSUw7CisJCXJlc3VsdC0+am9pbl91c2luZ19hbGlhcyA9IE5V TEw7CisJCXJlc3VsdC0+YWxpYXMgPSBOVUxMOworCQlyZXN1bHQtPnJ0aW5kZXggPSAwOwkJ Lyogd2UgZG9uJ3QgbmVlZCBhbiBSVEUgZm9yIGl0ICovCisJCXJlc3VsdC0+cXVhbHMgPSAo Tm9kZSAqKSBtYWtlX2FuZHNfZXhwbGljaXQobmV3V2hlcmUpOworCisJCXJldHVybiByZXN1 bHQ7CisJfQogCWVsc2UKLQkJcmVzdWx0LT5yYXJnID0gKE5vZGUgKikgc3Vic2VsZWN0LT5q b2ludHJlZTsKLQlyZXN1bHQtPnVzaW5nQ2xhdXNlID0gTklMOwotCXJlc3VsdC0+am9pbl91 c2luZ19hbGlhcyA9IE5VTEw7Ci0JcmVzdWx0LT5xdWFscyA9IHdoZXJlQ2xhdXNlOwotCXJl c3VsdC0+YWxpYXMgPSBOVUxMOwotCXJlc3VsdC0+cnRpbmRleCA9IDA7CQkvKiB3ZSBkb24n dCBuZWVkIGFuIFJURSBmb3IgaXQgKi8KKwl7CisJCS8qCisJCSogU2VwYXJhdGUgb3V0IHRo ZSBXSEVSRSBjbGF1c2UuICAoV2UgY291bGQgdGhlb3JldGljYWxseSBhbHNvIHJlbW92ZQor CQkqIHRvcC1sZXZlbCBwbGFpbiBKT0lOL09OIGNsYXVzZXMsIGJ1dCBpdCdzIHByb2JhYmx5 IG5vdCB3b3J0aCB0aGUKKwkJKiB0cm91YmxlLikKKwkJKi8KKwkJd2hlcmVDbGF1c2UgPSBz dWJzZWxlY3QtPmpvaW50cmVlLT5xdWFsczsKKwkJc3Vic2VsZWN0LT5qb2ludHJlZS0+cXVh bHMgPSBOVUxMOwogCi0JcmV0dXJuIHJlc3VsdDsKKwkJLyoKKwkJKiBUaGUgcmVzdCBvZiB0 aGUgc3ViLXNlbGVjdCBtdXN0IG5vdCByZWZlciB0byBhbnkgVmFycyBvZiB0aGUgcGFyZW50 CisJCSogcXVlcnkuICAoVmFycyBvZiBoaWdoZXIgbGV2ZWxzIHNob3VsZCBiZSBva2F5LCB0 aG91Z2guKQorCQkqLworCQlpZiAoY29udGFpbl92YXJzX29mX2xldmVsKChOb2RlICopIHN1 YnNlbGVjdCwgMSkpCisJCQlyZXR1cm4gTlVMTDsKKworCQkvKgorCQkqIE9uIHRoZSBvdGhl ciBoYW5kLCB0aGUgV0hFUkUgY2xhdXNlIG11c3QgY29udGFpbiBzb21lIFZhcnMgb2YgdGhl CisJCSogcGFyZW50IHF1ZXJ5LCBlbHNlIGl0J3Mgbm90IGdvbm5hIGJlIGEgam9pbi4KKwkJ Ki8KKwkJaWYgKCFjb250YWluX3ZhcnNfb2ZfbGV2ZWwod2hlcmVDbGF1c2UsIDEpKQorCQkJ cmV0dXJuIE5VTEw7CisKKwkJLyoKKwkJKiBXZSBkb24ndCByaXNrIG9wdGltaXppbmcgaWYg dGhlIFdIRVJFIGNsYXVzZSBpcyB2b2xhdGlsZSwgZWl0aGVyLgorCQkqLworCQlpZiAoY29u dGFpbl92b2xhdGlsZV9mdW5jdGlvbnMod2hlcmVDbGF1c2UpKQorCQkJcmV0dXJuIE5VTEw7 CisKKwkJLyoKKwkJKiBTY2FuIHRoZSByYW5nZXRhYmxlIGZvciByZWxhdGlvbiBSVEVzIGFu ZCByZXRyaWV2ZSB0aGUgbmVjZXNzYXJ5CisJCSogY2F0YWxvZyBpbmZvcm1hdGlvbiBmb3Ig ZWFjaCByZWxhdGlvbi4gIFVzaW5nIHRoaXMgaW5mb3JtYXRpb24sIGNsZWFyCisJCSogdGhl IGluaCBmbGFnIGZvciBhbnkgcmVsYXRpb24gdGhhdCBoYXMgbm8gY2hpbGRyZW4sIGNvbGxl Y3Qgbm90LW51bGwKKwkJKiBhdHRyaWJ1dGUgbnVtYmVycyBmb3IgYW55IHJlbGF0aW9uIHRo YXQgaGFzIGNvbHVtbiBub3QtbnVsbAorCQkqIGNvbnN0cmFpbnRzLCBhbmQgZXhwYW5kIHZp cnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgZm9yIGFueSByZWxhdGlvbiB0aGF0CisJCSogY29u dGFpbnMgdGhlbS4KKwkJKgorCQkqIE5vdGU6IHdlIGNvbnN0cnVjdCB1cCBhbiBlbnRpcmVs eSBkdW1teSBQbGFubmVySW5mbyBmb3IgdXNlIGhlcmUuICBUaGlzCisJCSogaXMgZmluZSBi ZWNhdXNlIG9ubHkgdGhlICJnbG9iIiBhbmQgInBhcnNlIiBsaW5rcyB3aWxsIGJlIHVzZWQg aW4gdGhpcworCQkqIGNhc2UuCisJCSoKKwkJKiBOb3RlOiB3ZSB0ZW1wb3JhcmlseSBhc3Np Z24gYmFjayB0aGUgV0hFUkUgY2xhdXNlIHNvIHRoYXQgYW55IHZpcnR1YWwKKwkJKiBnZW5l cmF0ZWQgY29sdW1uIHJlZmVyZW5jZXMgd2l0aGluIGl0IGNhbiBiZSBleHBhbmRlZC4gIEl0 IHNob3VsZCBiZQorCQkqIHNlcGFyYXRlZCBvdXQgYWdhaW4gYWZ0ZXJ3YXJkLgorCQkqLwor CQlNZW1TZXQoJnN1YnJvb3QsIDAsIHNpemVvZihzdWJyb290KSk7CisJCXN1YnJvb3QudHlw ZSA9IFRfUGxhbm5lckluZm87CisJCXN1YnJvb3QuZ2xvYiA9IHJvb3QtPmdsb2I7CisJCXN1 YnJvb3QucGFyc2UgPSBzdWJzZWxlY3Q7CisJCXN1YnNlbGVjdC0+am9pbnRyZWUtPnF1YWxz ID0gd2hlcmVDbGF1c2U7CisJCXN1YnNlbGVjdCA9IHByZXByb2Nlc3NfcmVsYXRpb25fcnRl cygmc3Vicm9vdCk7CisKKwkJLyoKKwkJKiBOb3cgc2VwYXJhdGUgb3V0IHRoZSBXSEVSRSBj bGF1c2UgYWdhaW4uCisJCSovCisJCXdoZXJlQ2xhdXNlID0gc3Vic2VsZWN0LT5qb2ludHJl ZS0+cXVhbHM7CisJCXN1YnNlbGVjdC0+am9pbnRyZWUtPnF1YWxzID0gTlVMTDsKKworCQkv KgorCQkqIFRoZSBzdWJxdWVyeSBtdXN0IGhhdmUgYSBub25lbXB0eSBqb2ludHJlZSwgYnV0 IHdlIGNhbiBtYWtlIGl0IHNvLgorCQkqLworCQlyZXBsYWNlX2VtcHR5X2pvaW50cmVlKHN1 YnNlbGVjdCk7CisKKwkJLyoKKwkJKiBQcmVwYXJlIHRvIHB1bGwgdXAgdGhlIHN1Yi1zZWxl Y3QgaW50byB0b3AgcmFuZ2UgdGFibGUuCisJCSoKKwkJKiBXZSByZWx5IGhlcmUgb24gdGhl IGFzc3VtcHRpb24gdGhhdCB0aGUgb3V0ZXIgcXVlcnkgaGFzIG5vIHJlZmVyZW5jZXMKKwkJ KiB0byB0aGUgaW5uZXIgKG5lY2Vzc2FyaWx5IHRydWUpLiBUaGVyZWZvcmUgdGhpcyBpcyBh IGxvdCBlYXNpZXIgdGhhbgorCQkqIHdoYXQgcHVsbF91cF9zdWJxdWVyaWVzIGhhcyB0byBn byB0aHJvdWdoLgorCQkqCisJCSogSW4gZmFjdCwgaXQncyBldmVuIGVhc2llciB0aGFuIHdo YXQgY29udmVydF9BTllfc3VibGlua190b19qb2luIGhhcyB0bworCQkqIGRvLiAgVGhlIG1h Y2hpbmF0aW9ucyBvZiBzaW1wbGlmeV9FWElTVFNfcXVlcnkgZW5zdXJlZCB0aGF0IHRoZXJl IGlzCisJCSogbm90aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgc3VicXVlcnkgZXhjZXB0IGFu IHJ0YWJsZSBhbmQgam9pbnRyZWUsIGFuZAorCQkqIGV2ZW4gdGhlIGpvaW50cmVlIEZyb21F eHByIG5vIGxvbmdlciBoYXMgcXVhbHMuICBTbyB3ZSBjYW4ganVzdCBhcHBlbmQKKwkJKiB0 aGUgcnRhYmxlIHRvIG91ciBvd24gYW5kIHVzZSB0aGUgRnJvbUV4cHIgaW4gb3VyIGpvaW50 cmVlLiBCdXQgZmlyc3QsCisJCSogYWRqdXN0IGFsbCBsZXZlbC16ZXJvIHZhcm5vcyBpbiB0 aGUgc3VicXVlcnkgdG8gYWNjb3VudCBmb3IgdGhlIHJ0YWJsZQorCQkqIG1lcmdlci4KKwkJ Ki8KKwkJcnRvZmZzZXQgPSBsaXN0X2xlbmd0aChwYXJzZS0+cnRhYmxlKTsKKwkJT2Zmc2V0 VmFyTm9kZXMoKE5vZGUgKikgc3Vic2VsZWN0LCBydG9mZnNldCwgMCk7CisJCU9mZnNldFZh ck5vZGVzKHdoZXJlQ2xhdXNlLCBydG9mZnNldCwgMCk7CisKKwkJLyoKKwkJKiBVcHBlci1s ZXZlbCB2YXJzIGluIHN1YnF1ZXJ5IHdpbGwgbm93IGJlIG9uZSBsZXZlbCBjbG9zZXIgdG8g dGhlaXIKKwkJKiBwYXJlbnQgdGhhbiBiZWZvcmU7IGluIHBhcnRpY3VsYXIsIGFueXRoaW5n IHRoYXQgaGFkIGJlZW4gbGV2ZWwgMQorCQkqIGJlY29tZXMgbGV2ZWwgemVyby4KKwkJKi8K KwkJSW5jcmVtZW50VmFyU3VibGV2ZWxzVXAoKE5vZGUgKikgc3Vic2VsZWN0LCAtMSwgMSk7 CisJCUluY3JlbWVudFZhclN1YmxldmVsc1VwKHdoZXJlQ2xhdXNlLCAtMSwgMSk7CisKKwkJ LyoKKwkJKiBOb3cgdGhhdCB0aGUgV0hFUkUgY2xhdXNlIGlzIGFkanVzdGVkIHRvIG1hdGNo IHRoZSBwYXJlbnQgcXVlcnkKKwkJKiBlbnZpcm9ubWVudCwgd2UgY2FuIGVhc2lseSBpZGVu dGlmeSBhbGwgdGhlIGxldmVsLXplcm8gcmVscyBpdCB1c2VzLgorCQkqIFRoZSBvbmVzIDw9 IHJ0b2Zmc2V0IGJlbG9uZyB0byB0aGUgdXBwZXIgcXVlcnk7IHRoZSBvbmVzID4gcnRvZmZz ZXQgZG8KKwkJKiBub3QuCisJCSovCisJCWNsYXVzZV92YXJub3MgPSBwdWxsX3Zhcm5vcyhy b290LCB3aGVyZUNsYXVzZSk7CisJCXVwcGVyX3Zhcm5vcyA9IE5VTEw7CisJCXZhcm5vID0g LTE7CisJCXdoaWxlICgodmFybm8gPSBibXNfbmV4dF9tZW1iZXIoY2xhdXNlX3Zhcm5vcywg dmFybm8pKSA+PSAwKQorCQl7CisJCQlpZiAodmFybm8gPD0gcnRvZmZzZXQpCisJCQkJdXBw ZXJfdmFybm9zID0gYm1zX2FkZF9tZW1iZXIodXBwZXJfdmFybm9zLCB2YXJubyk7CisJCX0K KwkJYm1zX2ZyZWUoY2xhdXNlX3Zhcm5vcyk7CisJCUFzc2VydCghYm1zX2lzX2VtcHR5KHVw cGVyX3Zhcm5vcykpOworCisJCS8qCisJCSogTm93IHRoYXQgd2UndmUgZ290IHRoZSBzZXQg b2YgdXBwZXItbGV2ZWwgdmFybm9zLCB3ZSBjYW4gbWFrZSB0aGUgbGFzdAorCQkqIGNoZWNr OiBvbmx5IGF2YWlsYWJsZV9yZWxzIGNhbiBiZSByZWZlcmVuY2VkLgorCQkqLworCQlpZiAo IWJtc19pc19zdWJzZXQodXBwZXJfdmFybm9zLCBhdmFpbGFibGVfcmVscykpCisJCQlyZXR1 cm4gTlVMTDsKKworCQkvKgorCQkqIE5vdyB3ZSBjYW4gYXR0YWNoIHRoZSBtb2RpZmllZCBz dWJxdWVyeSBydGFibGUgdG8gdGhlIHBhcmVudC4gVGhpcyBhbHNvCisJCSogYWRkcyBzdWJx dWVyeSdzIFJURVBlcm1pc3Npb25JbmZvcyBpbnRvIHRoZSB1cHBlciBxdWVyeS4KKwkJKi8K KwkJQ29tYmluZVJhbmdlVGFibGVzKCZwYXJzZS0+cnRhYmxlLCAmcGFyc2UtPnJ0ZXBlcm1p bmZvcywKKwkJCQkJCXN1YnNlbGVjdC0+cnRhYmxlLCBzdWJzZWxlY3QtPnJ0ZXBlcm1pbmZv cyk7CisKKwkJLyoKKwkJKiBBbmQgZmluYWxseSwgYnVpbGQgdGhlIEpvaW5FeHByIG5vZGUu CisJCSovCisJCXJlc3VsdCA9IG1ha2VOb2RlKEpvaW5FeHByKTsKKwkJcmVzdWx0LT5qb2lu dHlwZSA9IHVuZGVyX25vdCA/IEpPSU5fQU5USSA6IEpPSU5fU0VNSTsKKwkJcmVzdWx0LT5p c05hdHVyYWwgPSBmYWxzZTsKKwkJcmVzdWx0LT5sYXJnID0gTlVMTDsJCS8qIGNhbGxlciBt dXN0IGZpbGwgdGhpcyBpbiAqLworCQkvKiBmbGF0dGVuIG91dCB0aGUgRnJvbUV4cHIgbm9k ZSBpZiBpdCdzIHVzZWxlc3MgKi8KKwkJaWYgKGxpc3RfbGVuZ3RoKHN1YnNlbGVjdC0+am9p bnRyZWUtPmZyb21saXN0KSA9PSAxKQorCQkJcmVzdWx0LT5yYXJnID0gKE5vZGUgKikgbGlu aXRpYWwoc3Vic2VsZWN0LT5qb2ludHJlZS0+ZnJvbWxpc3QpOworCQllbHNlCisJCQlyZXN1 bHQtPnJhcmcgPSAoTm9kZSAqKSBzdWJzZWxlY3QtPmpvaW50cmVlOworCQlyZXN1bHQtPnVz aW5nQ2xhdXNlID0gTklMOworCQlyZXN1bHQtPmpvaW5fdXNpbmdfYWxpYXMgPSBOVUxMOwor CQlyZXN1bHQtPnF1YWxzID0gd2hlcmVDbGF1c2U7CisJCXJlc3VsdC0+YWxpYXMgPSBOVUxM OworCQlyZXN1bHQtPnJ0aW5kZXggPSAwOwkJLyogd2UgZG9uJ3QgbmVlZCBhbiBSVEUgZm9y IGl0ICovCisKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IGYxMzcxMjkyMDlmLi4wYTZlYTk0YzMyMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTEwNjAsNiArMTA2MCwxNyBA QCBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlOVUxMLCBO VUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJwdWxsX3VwX3dpdGhfam9pbnMiLCBQR0NfVVNF UlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyB0 aGUgcGxhbm5lcidzIHVzZSBvZiBleGlzdHMgcHVsbC11cCB3aXRoIGpvaW4gZXhwcmVzc2lv bnMuIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4KKwkJfSwKKwkJJnB1bGxfdXBfd2l0 aF9qb2lucywKKwkJdHJ1ZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsi Z2VxbyIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfR0VRTywKIAkJCWdldHRleHRfbm9v cCgiRW5hYmxlcyBnZW5ldGljIHF1ZXJ5IG9wdGltaXphdGlvbi4iKSwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBhOWQ4Mjkz NDc0YS4uYzQzZjJhMWEyZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQyNyw2ICs0MjcsNyBAQAogI2VuYWJsZV90aWRz Y2FuID0gb24KICNlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyA9IG9uCiAjZW5hYmxlX2Rp c3RpbmN0X3Jlb3JkZXJpbmcgPSBvbgorI3B1bGxfdXBfd2l0aF9qb2lucyA9IG9uCiAjZW5h YmxlX3NlbGZfam9pbl9lbGltaW5hdGlvbiA9IG9uCiAKICMgLSBQbGFubmVyIENvc3QgQ29u c3RhbnRzIC0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIu aCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAppbmRleCAzN2JjMTNjMmNi ZC4uZmE4ZGIxMzYyYzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRp bWl6ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKQEAgLTEx Miw2ICsxMTIsNyBAQCB0eXBlZGVmIGVudW0KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgZGVi dWdfcGFyYWxsZWxfcXVlcnk7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBwYXJhbGxlbF9s ZWFkZXJfcGFydGljaXBhdGlvbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9k aXN0aW5jdF9yZW9yZGVyaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgcHVsbF91cF93 aXRoX2pvaW5zOwogCiBleHRlcm4gc3RydWN0IFBsYW5uZWRTdG10ICpwbGFubmVyKFF1ZXJ5 ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCQkgICBpbnQgY3Vy c29yT3B0aW9ucywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vi c2VsZWN0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dApp bmRleCAwNTYzZDBjZDVhMS4uMjM2YTZiYmQwODYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTEwMTksNiArMTAxOSw3OTcgQEAgd2hlcmUgZXhp c3RzICgKICAgd2hlcmUgcm9hZC5uYW1lID0gc3MuZjEgKTsKIHJvbGxiYWNrOwogLS0KKy0t IFRlc3QgY2FzZSBmb3IgZXhpc3Qgc3VibGluayB3aGVyZSB3ZSBjYW4gY29uc2lkZXIgc29t ZSB1bmRlcGVuZGVudCBleHByZXNzaW9uCistLSB3aXRoIG91dGVyIGxpbmsKKy0tCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAg U0VMRUNUIDEKKyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0gdGIuaWQKKyk7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AgU2VtaSBKb2luCisgICAtPiAgU2VxIFNjYW4gb24gdGEKKyAgIC0+ICBOZXN0ZWQg TG9vcAorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyB0Yl9wa2V5IG9uIHRi CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSB0YS5pZCkKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiB0YworKDYgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIK KyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRjLmlkCispOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAg LT4gIFNlcSBTY2FuIG9uIHRhCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBJ bmRleCBPbmx5IFNjYW4gdXNpbmcgdGNfcGtleSBvbiB0YworICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gdGEuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGIKKyg2 IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVS RSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gMSA9IDEK KyAgV0hFUkUgdGEuaWQgPSB0Yy5pZAorKTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBTZW1pIEpvaW4KKyAgIC0+ICBT ZXEgU2NhbiBvbiB0YQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXgg T25seSBTY2FuIHVzaW5nIHRjX3BrZXkgb24gdGMKKyAgICAgICAgICAgICAgIEluZGV4IENv bmQ6IChpZCA9IHRhLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRiCisoNiByb3dz KQorCistLSBKb2luIGNvbXBvdW5kIGV4cHJlc3Npb24KK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9N IHRiCisgIEpPSU4gdGMgT04gdGEuaWQgPSB0Yy5pZAorICAgICAgICAgICBBTkQgdGEuaWQg PSB0Yi5pZAorKTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBSaWdodCBTZW1pIEpv aW4KKyAgIEhhc2ggQ29uZDogKHRjLmlkID0gdGEuaWQpCisgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICBIYXNoIENvbmQ6ICh0Yi5pZCA9IHRjLmlkKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHRiCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHRjCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCiso OSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YSB0YTEK K1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0 Yi5hdmFsID0gdGMuYWlkCisgICAgICAgICAgIEFORCB0Yi5hdmFsID0gdGExLmlkCispOwor ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAodGExLmlkID0gdGIuYXZhbCkKKyAgIC0+ICBT ZXEgU2NhbiBvbiB0YSB0YTEKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgVW5pcXVlCisg ICAgICAgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgICAgICAgTWVy Z2UgQ29uZDogKHRiLmF2YWwgPSB0Yy5haWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHRiLmF2YWwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorICAgICAgICAg ICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQg S2V5OiB0Yy5haWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biB0YworKDEzIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9N IHRhCitKT0lOIHRiIE9OIHRydWUKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZS T00gdGIgdGIxCisgIEpPSU4gdGMgT04gdGEuaWQgPSB0Yi5pZAorKTsKKyAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTmVzdGVkIExvb3AgU2VtaSBKb2luCisgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICBIYXNoIENvbmQ6ICh0YS5pZCA9IHRiLmlkKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHRhCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHRiCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biB0YiB0YjEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHRjCisoMTAgcm93cykKKworLS0gQ29tcG91bmQgZXhwcmVzc2lvbiB3 aXRoIGNvbnN0IHR5cGUgb3Igb3RoZXIgdHlwZSBvZiBleHByZXNzaW9ucworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVD VCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRjLmlkCisgICAgICAgICAg IEFORCB0YS5pZCA9IDEKKyk7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgU2VtaSBKb2luCisgICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIHRhX3BrZXkgb24gdGEKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9 IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4g dXNpbmcgdGNfcGtleSBvbiB0YworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0g MSkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorKDcgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVD VCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRjLmlkCisgICAgICAgICAg IEFORCB0Yi5pZCA9IDEKKyk7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSGFzaCBSaWdodCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKHRj LmlkID0gdGEuaWQpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBJbmRleCBP bmx5IFNjYW4gdXNpbmcgdGJfcGtleSBvbiB0YgorICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGlkID0gMSkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YworICAgLT4gIEhhc2gK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YQorKDggcm93cykKKworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAx CisgIEZST00gdGIKKyAgUklHSFQgSk9JTiB0YyBPTiB0YS5pZCA9IHRjLmlkCisgIFdIRVJF IHRhLnZhbCA9IDEKKyk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gdGEKKyAgIEZpbHRlcjogRVhJU1RTKFN1YlBsYW4gMSkKKyAg IFN1YlBsYW4gMQorICAgICAtPiAgUmVzdWx0CisgICAgICAgICAgIE9uZS1UaW1lIEZpbHRl cjogKHRhLnZhbCA9IDEpCisgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4K KyAgICAgICAgICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0YS5pZCA9IHRjLmlkKQorICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKyAgICAgICAgICAgICAgICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0Ygor KDEwIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitX SEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gdGEu aWQgPSB0Yi5pZAorICAgICAgICAgICBBTkQgdGIuYXZhbCA9IEFOWSAoJ3sxfSc6OmludFtd KQorKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNo IEpvaW4KKyAgIEhhc2ggQ29uZDogKHRhLmlkID0gdGIuaWQpCisgICAtPiAgU2VxIFNjYW4g b24gdGEKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgR3JvdXAgS2V5OiB0Yi5pZAorICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBM b29wCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHRiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6IChhdmFsID0gQU5ZICgnezF9Jzo6aW50ZWdlcltdKSkKKygxMSByb3dzKQor CistLSBFeGlzdHMgU3ViTGluayBleHByZXNzaW9uIHdpdGhpbiBleHByZXNzaW9uCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YSB0YTEKK1dIRVJFIEVYSVNUUyAo CisgIFNFTEVDVCAxCisgIEZST00gdGEKKyAgSk9JTiB0YiBPTiB0YS5pZCA9IHRhMS5pZAor ICAgICAgICAgICBBTkQgdGExLnZhbCA9IDEKKyAgV0hFUkUgRVhJU1RTICgKKyAgICBTRUxF Q1QgMQorICAgIEZST00gdGEgdGEyCisgICAgV0hFUkUgdGEyLmlkID0gdGExLmlkCisgICkK Kyk7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AgU2VtaSBKb2luCisgICAtPiAgU2VxIFNjYW4gb24gdGEgdGEyCisgICAg ICAgICBGaWx0ZXI6ICh2YWwgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAt PiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHRhX3BrZXkgb24gdGEKKyAgICAgICAgICAgICAg IEluZGV4IENvbmQ6IChpZCA9IHRhMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 YgorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEg dGExCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRhCisgIEpPSU4gdGIg T04gdGEudmFsID0gdGExLmlkCisgICAgICAgICAgIEFORCB0YTEuaWQgPSAxCisgIFdIRVJF IEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICBGUk9NIHRhIHRhMgorICAgIFdIRVJFIHRh Mi5pZCA9IHRhLmlkCisgICkKKyk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBTZW1pIEpvaW4KKyAgIC0+ICBJbmRleCBPbmx5 IFNjYW4gdXNpbmcgdGFfcGtleSBvbiB0YSB0YTEKKyAgICAgICAgIEluZGV4IENvbmQ6IChp ZCA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 YgorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdGEgdGEyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwgPSAxKQor KDggcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dI RVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgV0hFUkUgdGEuaWQgPSB0 Yi5pZAorICAgIEFORCBFWElTVFMgKAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGMK KyAgICAgIFdIRVJFIHRjLmlkID0gdGIuaWQKKyAgICAgICAgQU5EIHRjLmFpZCArIHRiLmF2 YWwgPiAwCisgICAgKQorKTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICh0 YS5pZCA9IHRjLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIHRhCisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodGIuaWQg PSB0Yy5pZCkKKyAgICAgICAgICAgICAgIEpvaW4gRmlsdGVyOiAoKHRjLmFpZCArIHRiLmF2 YWwpID4gMCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 YworKDEwIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRh CitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIFdIRVJFIHRhLmlk ID0gdGIuaWQKKyAgICBBTkQgRVhJU1RTICgKKyAgICAgIFNFTEVDVCAxCisgICAgICBGUk9N IHRjCisgICAgICBXSEVSRSB0Yy5pZCA9IHRiLmlkCisgICAgICAgIEFORCB0Yy5haWQgKyB0 YS52YWwgPiAwCisgICAgKQorKTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHRhLmlkID0gdGIuaWQpCisgICBKb2luIEZpbHRl cjogRVhJU1RTKFN1YlBsYW4gMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiB0YQorICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorICAgU3ViUGxhbiAxCisgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIHRjX3BrZXkgb24gdGMKKyAgICAgICAgICAgSW5kZXggQ29u ZDogKGlkID0gdGIuaWQpCisgICAgICAgICAgIEZpbHRlcjogKChhaWQgKyB0YS52YWwpID4g MCkKKygxMCByb3dzKQorCistLSBDaGVjayB3aXRoIE5VTEwgYW5kIE5PVCBOVUxMIGV4cHJl c3Npb25zCitBTFRFUiBUQUJMRSB0YSBBREQgQ09MVU1OIGlzX2FjdGl2ZSBib29sOworVVBE QVRFIHRhIFNFVCBpc19hY3RpdmUgPSB0cnVlOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIK KyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgQ09BTEVTQ0UodGEu aXNfYWN0aXZlLCB0cnVlKQorKTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBTZW1pIEpvaW4KKyAgIC0+ICBTZXEgU2Nh biBvbiB0YQorICAgICAgICAgRmlsdGVyOiBDT0FMRVNDRShpc19hY3RpdmUsIHRydWUpCisg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcg dGJfcGtleSBvbiB0YgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gdGEuaWQp CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKyg3IHJvd3MpCisKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRiCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1Qg MQorICBGUk9NIHRhCisgIEpPSU4gdGMgT04gdGEuaWQgPSB0Yi5pZAorICAgICAgICAgQU5E IENPQUxFU0NFKHRhLmlzX2FjdGl2ZSwgdHJ1ZSkKKyk7CisgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgor ICAgTWVyZ2UgQ29uZDogKHRiLmlkID0gdGEuaWQpCisgICAtPiAgSW5kZXggT25seSBTY2Fu IHVzaW5nIHRiX3BrZXkgb24gdGIKKyAgIC0+ICBVbmlxdWUKKyAgICAgICAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGFfcGtleSBv biB0YQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiBDT0FMRVNDRShpc19hY3RpdmUs IHRydWUpCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YworKDkgcm93cykKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisg IEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgQ0FT RQorICAgICAgICAgICAgICAgV0hFTiB0YS5pc19hY3RpdmUgVEhFTiB0cnVlCisgICAgICAg ICAgICAgICBFTFNFIGZhbHNlCisgICAgICAgICAgICAgRU5EID0gdHJ1ZQorKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgLT4gIFNlcSBTY2Fu IG9uIHRhCisgICAgICAgICBGaWx0ZXI6IENBU0UgV0hFTiBpc19hY3RpdmUgVEhFTiB0cnVl IEVMU0UgZmFsc2UgRU5ECisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBJbmRl eCBPbmx5IFNjYW4gdXNpbmcgdGJfcGtleSBvbiB0YgorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKGlkID0gdGEuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKyg3IHJv d3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRiCitXSEVSRSBF WElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRhCisgIEpPSU4gdGMgT04gdGEuaWQgPSB0 Yi5pZAorICAgICAgICAgQU5EIENBU0UKKyAgICAgICAgICAgICAgIFdIRU4gdGEuaXNfYWN0 aXZlIFRIRU4gdHJ1ZQorICAgICAgICAgICAgICAgRUxTRSBmYWxzZQorICAgICAgICAgICAg IEVORCA9IHRydWUKKyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAodGIuaWQgPSB0YS5pZCkKKyAg IC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGJfcGtleSBvbiB0YgorICAgLT4gIFVuaXF1 ZQorICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyB0YV9wa2V5IG9uIHRhCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 IENBU0UgV0hFTiBpc19hY3RpdmUgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5ECisgICAgICAg ICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiB0YworKDkgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEK K0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9J TiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgdGEuaXNfYWN0aXZlCispOwor ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wIFNlbWkgSm9pbgorICAgLT4gIFNlcSBTY2FuIG9uIHRhCisgICAgICAgICBGaWx0 ZXI6IGlzX2FjdGl2ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXgg T25seSBTY2FuIHVzaW5nIHRiX3BrZXkgb24gdGIKKyAgICAgICAgICAgICAgIEluZGV4IENv bmQ6IChpZCA9IHRhLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRjCisoNyByb3dz KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUgRVhJ U1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0gdGIu aWQKKyAgICAgICAgIEFORCB0YS5pc19hY3RpdmUgSVMgTk9UIE5VTEwKKyk7CisgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3Ag U2VtaSBKb2luCisgICAtPiAgU2VxIFNjYW4gb24gdGEKKyAgICAgICAgIEZpbHRlcjogKGlz X2FjdGl2ZSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4g IEluZGV4IE9ubHkgU2NhbiB1c2luZyB0Yl9wa2V5IG9uIHRiCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaWQgPSB0YS5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0Ywor KDcgcm93cykKKworLS0gRGlzYWJsZWQgcHVsbCB1cCBiZWNhdXNlIGl0IGlzIGFwcGxjYXBh YmxlIGZvciBJTk5FUiBKT0lOIGNvbm5lY3Rpb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRi CisgIFJJR0hUIEpPSU4gdGMgT04gdGEuaWQgPSB0Yy5pZAorKTsKKyAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0YQorICAgRmlsdGVyOiBFWElTVFMoU3Vi UGxhbiAxKQorICAgU3ViUGxhbiAxCisgICAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4K KyAgICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0YS5pZCA9IHRjLmlkKQorICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gdGMKKyAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorKDggcm93cykKKworLS0gRGlzYWJsZSBw dWxsLXVwIGR1ZSB0byBsYWNrIG9mIHRoZSBvdXRlciB2YXIKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBG Uk9NIHRiCisgIEpPSU4gdGMgT04gdGMuaWQgPSB0Yi5pZAorKTsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPbmUt VGltZSBGaWx0ZXI6IChJbml0UGxhbiAxKS5jb2wxCisgICBJbml0UGxhbiAxCisgICAgIC0+ ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGIKKyAgICAgICAg ICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyB0Y19wa2V5IG9uIHRjCisgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHRiLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIHRh CisoOCByb3dzKQorCitDUkVBVEUgVEFCTEUgdGQgKGlkIGludCwgdGNfaWQgYnl0ZWEsIHZh bCBpbnQpOworSU5TRVJUIElOVE8gdGQKK1NFTEVDVCBnLmlkLCAnVGVzdDEnOjpieXRlYSBB UyB0Y19pZCwgNiBBUyB2YWwKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDI1KSBBUyBnKGlk KQorVU5JT04gQUxMCitTRUxFQ1QgZy5pZCwgJ1Rlc3QyJzo6Ynl0ZWEgQVMgdGNfaWQsIDcg QVMgdmFsCitGUk9NIGdlbmVyYXRlX3NlcmllcygyNiwgNTApIEFTIGcoaWQpCitVTklPTiBB TEwKK1NFTEVDVCBnLmlkLCAnVGVzdDQnOjpieXRlYSBBUyB0Y19pZCwgNiBBUyB2YWwKK0ZS T00gZ2VuZXJhdGVfc2VyaWVzKDUxLCA3NSkgQVMgZyhpZCkKK1VOSU9OIEFMTAorU0VMRUNU IGcuaWQsICdUZXN0NSc6OmJ5dGVhIEFTIHRjX2lkLCA3IEFTIHZhbAorRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNzYsIDEwMCkgQVMgZyhpZCk7CitFWFBMQUlOIChDT1NUUyBPRkYpCisgU0VM RUNUIHRhLmlkCisgICBGUk9NIHRhCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEK KyAgICAgIEZST00gdGIKKyAgICAgV0hFUkUgdGIuaWQgPSB0YS5pZCBBTkQKKyAgICAgICAg ICAgRVhJU1RTCisgICAgICAgIChTRUxFQ1QgMQorICAgICAgICAgICBGUk9NIHRjCisgICAg ICAgICAgV0hFUkUgdGMuaWQgPSB0Yi5pZCkKKyAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEhhc2ggUmlnaHQgU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICh0 Yy5pZCA9IHRhLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAo dGIuaWQgPSB0Yy5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YgorICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YworICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YQorKDkgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorIFNFTEVDVCB0YS5pZAorICAgRlJPTSB0YQorICBXSEVSRSBFWElTVFMg KAorICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRiCisgICAgIFdIRVJFIHRiLmlkID0gdGEu aWQgQU5ECisgICAgICAgICAgIEVYSVNUUworICAgICAgICAoU0VMRUNUIDEKKyAgICAgICAg ICAgRlJPTSB0YworICAgICAgICAgIFdIRVJFIHRjLmlkID0gdGEuaWQpCisgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29u ZDogKHRjLmlkID0gdGIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENv bmQ6ICh0Yy5pZCA9IHRhLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRjCisgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCisgICAt PiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRiCisoOSByb3dzKQorCitFWFBM QUlOIChDT1NUUyBPRkYpCisgU0VMRUNUIHRhLmlkCisgICBGUk9NIHRhCisgIFdIRVJFIEVY SVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGIKKyAgICAgV0hFUkUgdGIuaWQg PSB0YS5pZAorICAgICAgIEFORCBFWElTVFMKKyAgICAgICAgICAgICAgKFNFTEVDVCAxCisg ICAgICAgICAgICAgICAgIEZST00gdGMKKyAgICAgICAgICAgICAgIFdIRVJFIHRiLmlkID0g dGEuaWQpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAodGIuaWQgPSB0YS5pZCkK KyAgIEpvaW4gRmlsdGVyOiBFWElTVFMoU3ViUGxhbiAxKQorICAgLT4gIFNlcSBTY2FuIG9u IHRiCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCisgICBTdWJQ bGFuIDEKKyAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6ICh0 Yi5pZCA9IHRhLmlkKQorICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGMKKygxMCByb3dz KQorCitleHBsYWluIChDT1NUUyBPRkYpCisgU0VMRUNUIHRhLmlkCisgICBGUk9NIHRhCisg IFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGIKKyAgICAgICAg am9pbiB0YyBvbiB0Yy5pZCA9IHRhLmlkCisgICAgICAgICAgQU5EIEVYSVNUUyAoCisgICAg ICAgICAgICAgICAgU0VMRUNUIDEKKyAgICAgICAgICAgICAgICAgIEZST00gdGQKKyAgICAg ICAgICAgICAgICBXSEVSRSB0ZC5pZCA9IHRhLmlkKQorICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6ICh0YS5pZCA9IHRkLmlkKQorICAgLT4g IE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhCisg ICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5 IFNjYW4gdXNpbmcgdGNfcGtleSBvbiB0YworICAgICAgICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKGlkID0gdGEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGIK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgR3JvdXAgS2V5OiB0ZC5pZAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRk CisoMTIgcm93cykKKworZXhwbGFpbiAoQ09TVFMgT0ZGKQorIFNFTEVDVCB0YS5pZAorICAg RlJPTSB0YQorICBXSEVSRSBFWElTVFMgKAorICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRi CisgICAgICAgIGpvaW4gdGMgb24gdGMuaWQgPSB0YS5pZAorICAgICAgICAgIEFORCBFWElT VFMgKAorICAgICAgICAgICAgICAgIFNFTEVDVCAxCisgICAgICAgICAgICAgICAgICBGUk9N IHRkCisgICAgICAgICAgICAgICAgV0hFUkUgdGIuaWQgPSB0YS5pZCkKKyAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AgU2VtaSBKb2luCisgICAtPiAgU2VxIFNjYW4gb24gdGEKKyAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgSm9pbiBGaWx0ZXI6IEVYSVNUUyhTdWJQbGFu IDEpCisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHRjX3BrZXkgb24gdGMK KyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHRhLmlkKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHRiCisgICAgICAgICBTdWJQbGFuIDEKKyAgICAgICAgICAgLT4gIFJl c3VsdAorICAgICAgICAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6ICh0Yi5pZCA9IHRhLmlk KQorICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGQKKygxMSByb3dzKQorCitD UkVBVEUgVEFCTEUgdGUgKGlkIGludCwgdGNfaWQgYnl0ZWEsIHZhbCBpbnQpOworSU5TRVJU IElOVE8gdGUgU0VMRUNUICogRlJPTSB0ZDsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCB0MS4qCitGUk9NIHRhIHQxCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9N IChTRUxFQ1QgMSBBUyBTREJMX0RVTU1ZKSBTREJMX0RVQUwKKyAgSk9JTiB0YiB0MiBPTiB0 Mi5pZCA9IHQxLmlkCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICBGUk9N IChTRUxFQ1QgMSBBUyBTREJMX0RVTU1ZKSBTREJMX0RVQUwKKyAgICBKT0lOIHRkIHQzIE9O IHQzLnRjX2lkIElOICgnVGVzdDEnOjpieXRlYSwgJ1Rlc3QyJzo6Ynl0ZWEpCisgICAgV0hF UkUgRVhJU1RTICgKKyAgICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRlIHQ0CisgICAgICBX SEVSRSB0NC50Y19pZCA9IHQzLnRjX2lkCisgICAgICAgIEFORCB0NC52YWwgPSB0Mi5hdmFs CisgICAgKSA9IEVYSVNUUyAoCisgICAgICBTRUxFQ1QgMQorICAgICAgRlJPTSB0YyB0NQor ICAgICAgV0hFUkUgdDUuaWQgPSB0My5pZAorICAgICkKKyAgKQorKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBTZW1pIEpvaW4KKyAgIE1lcmdlIENv bmQ6ICh0MS5pZCA9IHQyLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdGFfcGtleSBv biB0YSB0MQorICAgLT4gIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgICAgICAgSm9pbiBG aWx0ZXI6ICgoQU5ZICgodDMudGNfaWQgPSAoaGFzaGVkIFN1YlBsYW4gMikuY29sMSkgQU5E ICh0Mi5hdmFsID0gKGhhc2hlZCBTdWJQbGFuIDIpLmNvbDIpKSkgPSAoQU5ZICh0My5pZCA9 IChoYXNoZWQgU3ViUGxhbiA0KS5jb2wxKSkpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyB0Yl9wa2V5IG9uIHRiIHQyCisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZCB0MworICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodGNfaWQgPSBBTlkgKCd7IlxceDU0NjU3Mzc0MzEiLCJcXHg1NDY1NzM3NDMy In0nOjpieXRlYVtdKSkKKyAgICAgICAgIFN1YlBsYW4gMgorICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gdGUgdDQKKyAgICAgICAgIFN1YlBsYW4gNAorICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gdGMgdDUKKygxMyByb3dzKQorCitFWFBMQUlOCitTRUxFQ1QgdGEuKgorRlJP TSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YgorICBKT0lOIHRj IE9OIHRjLmlkID0gdGIuaWQKKyAgICAgICAgIEFORCB0Yi5pZCA9IHRhLmlkCisgIEpPSU4g dGQgT04gdGQuaWQgPSB0Yy5pZAorKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBSaWdodCBTZW1pIEpvaW4gIChjb3N0PTE4 MS4yMC4uMjE5LjM1IHJvd3M9MTEwMCB3aWR0aD05KQorICAgSGFzaCBDb25kOiAodGQuaWQg PSB0YS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4gIChjb3N0PTEyMS43MC4uMTUwLjAyIHJvd3M9 MTIwMCB3aWR0aD0xMikKKyAgICAgICAgIEhhc2ggQ29uZDogKHRkLmlkID0gdGMuaWQpCisg ICAgICAgICAtPiAgSGFzaCBKb2luICAoY29zdD02MC44NS4uODYuMDEgcm93cz0xMjAwIHdp ZHRoPTgpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0ZC5pZCA9IHRiLmlkKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRkICAoY29zdD0wLjAwLi4yMi4wMCByb3dz PTEyMDAgd2lkdGg9NCkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoICAoY29zdD0zMi42MC4u MzIuNjAgcm93cz0yMjYwIHdpZHRoPTQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gdGIgIChjb3N0PTAuMDAuLjMyLjYwIHJvd3M9MjI2MCB3aWR0aD00KQorICAg ICAgICAgLT4gIEhhc2ggIChjb3N0PTMyLjYwLi4zMi42MCByb3dzPTIyNjAgd2lkdGg9NCkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YyAgKGNvc3Q9MC4wMC4uMzIuNjAg cm93cz0yMjYwIHdpZHRoPTQpCisgICAtPiAgSGFzaCAgKGNvc3Q9MzIuMDAuLjMyLjAwIHJv d3M9MjIwMCB3aWR0aD05KQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRhICAoY29zdD0w LjAwLi4zMi4wMCByb3dzPTIyMDAgd2lkdGg9OSkKKygxMyByb3dzKQorCitEUk9QIFRBQkxF IHRkLCB0ZTsKK0NSRUFURSBUQUJMRSB0c3QxIChpZCBpbnQsIG1lcyB2YXJjaGFyKDIwKSk7 CitDUkVBVEUgVEFCTEUgdHN0MiAoaWQgaW50LCB0c3QxX2lkIGludCwgdHlwZV9pZCBpbnQp OworQ1JFQVRFIFRBQkxFIHRzdDMgKGlkIGJ5dGVhKTsKK0NSRUFURSBUQUJMRSB0c3Q0IChp ZCBpbnQsIHRzdDNfaWQgYnl0ZWEsIHR5cGVfaWQgaW50KTsKK0NSRUFURSBUQUJMRSB0c3Q1 IChpZCBpbnQsIHRzdDNfaWQgYnl0ZWEsIHR5cGVfaWQgaW50KTsKK0lOU0VSVCBJTlRPIHRz dDEgVkFMVUVTICgxLCAndGVzdDEnKTsKK0lOU0VSVCBJTlRPIHRzdDEgVkFMVUVTICgyLCAn dGVzdDInKTsKK0lOU0VSVCBJTlRPIHRzdDEgVkFMVUVTICgzLCAndGVzdDMnKTsKK0lOU0VS VCBJTlRPIHRzdDIgVkFMVUVTICgxLCAyLCA3KTsKK0lOU0VSVCBJTlRPIHRzdDIgVkFMVUVT ICgxLCAyLCA2KTsKK0lOU0VSVCBJTlRPIHRzdDIgVkFMVUVTICgyLCAzLCA3KTsKK0lOU0VS VCBJTlRPIHRzdDMKK1NFTEVDVCAoJ1Rlc3QnIHx8IGcuaWQpOjpieXRlYSBBUyBpZAorICAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgQVMgZyhpZCk7CitJTlNFUlQgSU5UTyB0c3Q0 CisoU0VMRUNUIGcuaWQsICdUZXN0MSc6OmJ5dGVhIEFTIHRzdDNfaWQsIDYgQVMgdHlwZV9p ZAorICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjUpIEFTIGcoaWQpKQorVU5JT04gQUxM CisoU0VMRUNUIGcuaWQsICdUZXN0Mic6OmJ5dGVhIEFTIHRzdDNfaWQsIDcgQVMgdHlwZV9p ZAorICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjYsIDUwKSBBUyBnKGlkKSkKK1VOSU9OIEFM TAorKFNFTEVDVCBnLmlkLCAnVGVzdDQnOjpieXRlYSBBUyB0c3QzX2lkLCA2IEFTIHR5cGVf aWQKKyAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUxLCA3NSkgQVMgZyhpZCkpCitVTklPTiBB TEwKKyhTRUxFQ1QgZy5pZCwgJ1Rlc3Q1Jzo6Ynl0ZWEgQVMgdHN0M19pZCwgNyBBUyB0eXBl X2lkCisgICBGUk9NIGdlbmVyYXRlX3Nlcmllcyg3NiwgMTAwKSBBUyBnKGlkKSk7CitJTlNF UlQgSU5UTyB0c3Q1IFNFTEVDVCAqIEZST00gdHN0NDsKK1ZBQ1VVTSAoQU5BTFlaRSkgdHN0 MSwgdHN0MiwgdHN0MywgdHN0NCwgdHN0NTsKKy0tIENhc2Ugd2l0aCB0d28gZXhpc3RzIGlu IE9wRXhwciwgaW4gdGhlIGZpcnN0IG9uZSB0My5pZCBpcyB0aGUgcmVmZXJlbmNlIHRvIHRo ZSBwYXJlbnQgcXVlcnkKKy0tIGFuZCB0Mi50eXBlLWlkIGlzIHRoZSByZWZlcmVuY2UgdG8g Z3JhbmRwYXJlbnQgcXVlcnkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB0MS4qCitG Uk9NIHRzdDEgdDEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gKFNFTEVD VCAxIEFTIFNEQkxfRFVNTVkpIFNEQkxfRFVBTAorICBKT0lOIHRzdDIgdDIgT04gdDIudHN0 MV9pZCA9IHQxLmlkCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICBGUk9N IChTRUxFQ1QgMSBBUyBTREJMX0RVTU1ZKSBTREJMX0RVQUwKKyAgICBKT0lOIHRzdDMgdDMg T04gdDMuaWQgSU4gKCdUZXN0MSc6OmJ5dGVhLCAnVGVzdDInOjpieXRlYSkKKyAgICBXSEVS RSBFWElTVFMgKAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdHN0NCB0NAorICAgICAg V0hFUkUgdDQudHN0M19pZCA9IHQzLmlkCisgICAgICAgIEFORCB0NC50eXBlX2lkID0gdDIu dHlwZV9pZAorICAgICkgPSBFWElTVFMgKAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00g dHN0NSB0NQorICAgICAgV0hFUkUgdDUudHN0M19pZCA9IHQzLmlkCisgICAgKQorICApCisp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFJpZ2h0IFNlbWkgSm9pbgorICAgSGFzaCBDb25k OiAodDIudHN0MV9pZCA9IHQxLmlkKQorICAgLT4gIE5lc3RlZCBMb29wIFNlbWkgSm9pbgor ICAgICAgICAgSm9pbiBGaWx0ZXI6IChFWElTVFMoU3ViUGxhbiAxKSA9IEVYSVNUUyhTdWJQ bGFuIDMpKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRzdDIgdDIKKyAgICAgICAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRzdDMgdDMK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGlkID0gQU5ZICgneyJcXHg1NDY1NzM3 NDMxIiwiXFx4NTQ2NTczNzQzMiJ9Jzo6Ynl0ZWFbXSkpCisgICAgICAgICBTdWJQbGFuIDEK KyAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRzdDQgdDQKKyAgICAgICAgICAgICAgICAg RmlsdGVyOiAoKHRzdDNfaWQgPSB0My5pZCkgQU5EICh0eXBlX2lkID0gdDIudHlwZV9pZCkp CisgICAgICAgICBTdWJQbGFuIDMKKyAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRzdDUg dDUKKyAgICAgICAgICAgICAgICAgRmlsdGVyOiAodHN0M19pZCA9IHQzLmlkKQorICAgLT4g IEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0c3QxIHQxCisgICAgICAgICAgICAg ICBGaWx0ZXI6IChpZCBJUyBOT1QgTlVMTCkKKygxNyByb3dzKQorCitEUk9QIFRBQkxFIHRz dDEsIHRzdDIsIHRzdDMsIHRzdDQsIHRzdDU7CiAtLSBUZXN0IGNhc2UgZm9yIHN1Ymxpbmtz IHB1c2hlZCBkb3duIGludG8gc3Vic2VsZWN0cyB2aWEgam9pbiBhbGlhcyBleHBhbnNpb24K IC0tCiBzZWxlY3QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBk YXRhYmxlX3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxl X3ZpZXdzLm91dAppbmRleCAwOTVkZjBhNjcwYy4uZDA3NjJjMTI5OWUgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQKQEAgLTMxNzcs MTQgKzMxNzcsMTIgQEAgRVhQTEFJTiAoY29zdHMgb2ZmKSBJTlNFUlQgSU5UTyByd192aWV3 MSBWQUxVRVMgKDIsICdOZXcgcm93IDInKTsKICAgICAgICAgIE9uZS1UaW1lIEZpbHRlcjog KChJbml0UGxhbiAxKS5jb2wxIElTIE5PVCBUUlVFKQogIAogIFVwZGF0ZSBvbiBiYXNlX3Ri bAotICAgSW5pdFBsYW4gMQotICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGJhc2Vf dGJsX3BrZXkgb24gYmFzZV90YmwgdAotICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSAy KQotICAgLT4gIFJlc3VsdAotICAgICAgICAgT25lLVRpbWUgRmlsdGVyOiAoSW5pdFBsYW4g MSkuY29sMQorICAgLT4gIE5lc3RlZCBMb29wIFNlbWkgSm9pbgogICAgICAgICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgYmFzZV90YmxfcGtleSBvbiBiYXNlX3RibAogICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gMikKLSgxNSByb3dzKQorICAgICAgICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgYmFzZV90YmxfcGtleSBvbiBiYXNlX3RibCB0CisgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoaWQgPSAyKQorKDEzIHJvd3MpCiAKIElOU0VSVCBJTlRPIHJ3X3Zp ZXcxIFZBTFVFUyAoMiwgJ05ldyByb3cgMicpOwogU0VMRUNUICogRlJPTSBiYXNlX3RibDsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsCmluZGV4IGE2ZDI3NmExMTViLi5jYTMx ZTQ3Yzk3MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2VsZWN0LnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsCkBAIC01MDcsNiAr NTA3LDQ0OSBAQCB3aGVyZSBleGlzdHMgKAogcm9sbGJhY2s7CiAKIC0tCistLSBUZXN0IGNh c2UgZm9yIGV4aXN0IHN1Ymxpbmsgd2hlcmUgd2UgY2FuIGNvbnNpZGVyIHNvbWUgdW5kZXBl bmRlbnQgZXhwcmVzc2lvbgorLS0gd2l0aCBvdXRlciBsaW5rCistLQorCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNU IDEKKyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0gdGIuaWQKKyk7CisKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBT RUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gdGEuaWQgPSB0Yy5pZAorKTsKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAo CisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiAxID0gMQorICBXSEVSRSB0 YS5pZCA9IHRjLmlkCispOworCistLSBKb2luIGNvbXBvdW5kIGV4cHJlc3Npb24KK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBT RUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gdGEuaWQgPSB0Yy5pZAorICAgICAg ICAgICBBTkQgdGEuaWQgPSB0Yi5pZAorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIDEKK0ZST00gdGEgdGExCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9N IHRiCisgIEpPSU4gdGMgT04gdGIuYXZhbCA9IHRjLmFpZAorICAgICAgICAgICBBTkQgdGIu YXZhbCA9IHRhMS5pZAorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZS T00gdGEKK0pPSU4gdGIgT04gdHJ1ZQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAg RlJPTSB0YiB0YjEKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCispOworCistLSBDb21w b3VuZCBleHByZXNzaW9uIHdpdGggY29uc3QgdHlwZSBvciBvdGhlciB0eXBlIG9mIGV4cHJl c3Npb25zCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUg RVhJU1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0g dGMuaWQKKyAgICAgICAgICAgQU5EIHRhLmlkID0gMQorKTsKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisg IEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRjLmlkCisgICAgICAgICAgIEFORCB0 Yi5pZCA9IDEKKyk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRh CitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIFJJR0hUIEpPSU4g dGMgT04gdGEuaWQgPSB0Yy5pZAorICBXSEVSRSB0YS52YWwgPSAxCispOworCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgMQorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VM RUNUIDEKKyAgRlJPTSB0YgorICBKT0lOIHRjIE9OIHRhLmlkID0gdGIuaWQKKyAgICAgICAg ICAgQU5EIHRiLmF2YWwgPSBBTlkgKCd7MX0nOjppbnRbXSkKKyk7CisKKy0tIEV4aXN0cyBT dWJMaW5rIGV4cHJlc3Npb24gd2l0aGluIGV4cHJlc3Npb24KK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAxCitGUk9NIHRhIHRhMQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEK KyAgRlJPTSB0YQorICBKT0lOIHRiIE9OIHRhLmlkID0gdGExLmlkCisgICAgICAgICAgIEFO RCB0YTEudmFsID0gMQorICBXSEVSRSBFWElTVFMgKAorICAgIFNFTEVDVCAxCisgICAgRlJP TSB0YSB0YTIKKyAgICBXSEVSRSB0YTIuaWQgPSB0YTEuaWQKKyAgKQorKTsKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEgdGExCitXSEVSRSBFWElTVFMgKAor ICBTRUxFQ1QgMQorICBGUk9NIHRhCisgIEpPSU4gdGIgT04gdGEudmFsID0gdGExLmlkCisg ICAgICAgICAgIEFORCB0YTEuaWQgPSAxCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNU IDEKKyAgICBGUk9NIHRhIHRhMgorICAgIFdIRVJFIHRhMi5pZCA9IHRhLmlkCisgICkKKyk7 CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElT VFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIFdIRVJFIHRhLmlkID0gdGIuaWQKKyAg ICBBTkQgRVhJU1RTICgKKyAgICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRjCisgICAgICBX SEVSRSB0Yy5pZCA9IHRiLmlkCisgICAgICAgIEFORCB0Yy5haWQgKyB0Yi5hdmFsID4gMAor ICAgICkKKyk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitX SEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIFdIRVJFIHRhLmlkID0g dGIuaWQKKyAgICBBTkQgRVhJU1RTICgKKyAgICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRj CisgICAgICBXSEVSRSB0Yy5pZCA9IHRiLmlkCisgICAgICAgIEFORCB0Yy5haWQgKyB0YS52 YWwgPiAwCisgICAgKQorKTsKKworLS0gQ2hlY2sgd2l0aCBOVUxMIGFuZCBOT1QgTlVMTCBl eHByZXNzaW9ucworQUxURVIgVEFCTEUgdGEgQUREIENPTFVNTiBpc19hY3RpdmUgYm9vbDsK K1VQREFURSB0YSBTRVQgaXNfYWN0aXZlID0gdHJ1ZTsKKworRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZS T00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgQ09BTEVT Q0UodGEuaXNfYWN0aXZlLCB0cnVlKQorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIDEKK0ZST00gdGIKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGEK KyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgQ09BTEVTQ0UodGEu aXNfYWN0aXZlLCB0cnVlKQorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEK K0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gdGIKKyAgSk9J TiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgQ0FTRQorICAgICAgICAgICAg ICAgV0hFTiB0YS5pc19hY3RpdmUgVEhFTiB0cnVlCisgICAgICAgICAgICAgICBFTFNFIGZh bHNlCisgICAgICAgICAgICAgRU5EID0gdHJ1ZQorKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUIDEKK0ZST00gdGIKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZS T00gdGEKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAgICBBTkQgQ0FTRQor ICAgICAgICAgICAgICAgV0hFTiB0YS5pc19hY3RpdmUgVEhFTiB0cnVlCisgICAgICAgICAg ICAgICBFTFNFIGZhbHNlCisgICAgICAgICAgICAgRU5EID0gdHJ1ZQorKTsKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEKK0ZST00gdGEKK1dIRVJFIEVYSVNUUyAoCisgIFNF TEVDVCAxCisgIEZST00gdGIKKyAgSk9JTiB0YyBPTiB0YS5pZCA9IHRiLmlkCisgICAgICAg ICBBTkQgdGEuaXNfYWN0aXZlCispOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg MQorRlJPTSB0YQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSB0YgorICBK T0lOIHRjIE9OIHRhLmlkID0gdGIuaWQKKyAgICAgICAgIEFORCB0YS5pc19hY3RpdmUgSVMg Tk9UIE5VTEwKKyk7CisKKworLS0gRGlzYWJsZWQgcHVsbCB1cCBiZWNhdXNlIGl0IGlzIGFw cGxjYXBhYmxlIGZvciBJTk5FUiBKT0lOIGNvbm5lY3Rpb24KK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBG Uk9NIHRiCisgIFJJR0hUIEpPSU4gdGMgT04gdGEuaWQgPSB0Yy5pZAorKTsKKworLS0gRGlz YWJsZSBwdWxsLXVwIGR1ZSB0byBsYWNrIG9mIHRoZSBvdXRlciB2YXIKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAxCitGUk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1Qg MQorICBGUk9NIHRiCisgIEpPSU4gdGMgT04gdGMuaWQgPSB0Yi5pZAorKTsKKworQ1JFQVRF IFRBQkxFIHRkIChpZCBpbnQsIHRjX2lkIGJ5dGVhLCB2YWwgaW50KTsKKworSU5TRVJUIElO VE8gdGQKK1NFTEVDVCBnLmlkLCAnVGVzdDEnOjpieXRlYSBBUyB0Y19pZCwgNiBBUyB2YWwK K0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDI1KSBBUyBnKGlkKQorCitVTklPTiBBTEwKKwor U0VMRUNUIGcuaWQsICdUZXN0Mic6OmJ5dGVhIEFTIHRjX2lkLCA3IEFTIHZhbAorRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMjYsIDUwKSBBUyBnKGlkKQorCitVTklPTiBBTEwKKworU0VMRUNU IGcuaWQsICdUZXN0NCc6OmJ5dGVhIEFTIHRjX2lkLCA2IEFTIHZhbAorRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTEsIDc1KSBBUyBnKGlkKQorCitVTklPTiBBTEwKKworU0VMRUNUIGcuaWQs ICdUZXN0NSc6OmJ5dGVhIEFTIHRjX2lkLCA3IEFTIHZhbAorRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNzYsIDEwMCkgQVMgZyhpZCk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKKyBTRUxFQ1Qg dGEuaWQKKyAgIEZST00gdGEKKyAgV0hFUkUgRVhJU1RTICgKKyAgICBTRUxFQ1QgMQorICAg ICAgRlJPTSB0YgorICAgICBXSEVSRSB0Yi5pZCA9IHRhLmlkIEFORAorICAgICAgICAgICBF WElTVFMKKyAgICAgICAgKFNFTEVDVCAxCisgICAgICAgICAgIEZST00gdGMKKyAgICAgICAg ICBXSEVSRSB0Yy5pZCA9IHRiLmlkKQorICAgICAgICAgICAgICAgKTsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorIFNFTEVDVCB0YS5pZAorICAgRlJPTSB0YQorICBXSEVSRSBFWElTVFMg KAorICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRiCisgICAgIFdIRVJFIHRiLmlkID0gdGEu aWQgQU5ECisgICAgICAgICAgIEVYSVNUUworICAgICAgICAoU0VMRUNUIDEKKyAgICAgICAg ICAgRlJPTSB0YworICAgICAgICAgIFdIRVJFIHRjLmlkID0gdGEuaWQpCisgICAgICAgICAg ICAgICApOworCitFWFBMQUlOIChDT1NUUyBPRkYpCisgU0VMRUNUIHRhLmlkCisgICBGUk9N IHRhCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGIKKyAg ICAgV0hFUkUgdGIuaWQgPSB0YS5pZAorICAgICAgIEFORCBFWElTVFMKKyAgICAgICAgICAg ICAgKFNFTEVDVCAxCisgICAgICAgICAgICAgICAgIEZST00gdGMKKyAgICAgICAgICAgICAg IFdIRVJFIHRiLmlkID0gdGEuaWQpCisgICAgICAgICAgICAgICAgKTsKKworZXhwbGFpbiAo Q09TVFMgT0ZGKQorIFNFTEVDVCB0YS5pZAorICAgRlJPTSB0YQorICBXSEVSRSBFWElTVFMg KAorICAgIFNFTEVDVCAxCisgICAgICBGUk9NIHRiCisgICAgICAgIGpvaW4gdGMgb24gdGMu aWQgPSB0YS5pZAorICAgICAgICAgIEFORCBFWElTVFMgKAorICAgICAgICAgICAgICAgIFNF TEVDVCAxCisgICAgICAgICAgICAgICAgICBGUk9NIHRkCisgICAgICAgICAgICAgICAgV0hF UkUgdGQuaWQgPSB0YS5pZCkKKyAgICAgICAgICAgICAgICApOworCitleHBsYWluIChDT1NU UyBPRkYpCisgU0VMRUNUIHRhLmlkCisgICBGUk9NIHRhCisgIFdIRVJFIEVYSVNUUyAoCisg ICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGIKKyAgICAgICAgam9pbiB0YyBvbiB0Yy5pZCA9 IHRhLmlkCisgICAgICAgICAgQU5EIEVYSVNUUyAoCisgICAgICAgICAgICAgICAgU0VMRUNU IDEKKyAgICAgICAgICAgICAgICAgIEZST00gdGQKKyAgICAgICAgICAgICAgICBXSEVSRSB0 Yi5pZCA9IHRhLmlkKQorICAgICAgICAgICAgICAgICk7CisKK0NSRUFURSBUQUJMRSB0ZSAo aWQgaW50LCB0Y19pZCBieXRlYSwgdmFsIGludCk7CitJTlNFUlQgSU5UTyB0ZSBTRUxFQ1Qg KiBGUk9NIHRkOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdDEuKgorRlJPTSB0 YSB0MQorV0hFUkUgRVhJU1RTICgKKyAgU0VMRUNUIDEKKyAgRlJPTSAoU0VMRUNUIDEgQVMg U0RCTF9EVU1NWSkgU0RCTF9EVUFMCisgIEpPSU4gdGIgdDIgT04gdDIuaWQgPSB0MS5pZAor ICBXSEVSRSBFWElTVFMgKAorICAgIFNFTEVDVCAxCisgICAgRlJPTSAoU0VMRUNUIDEgQVMg U0RCTF9EVU1NWSkgU0RCTF9EVUFMCisgICAgSk9JTiB0ZCB0MyBPTiB0My50Y19pZCBJTiAo J1Rlc3QxJzo6Ynl0ZWEsICdUZXN0Mic6OmJ5dGVhKQorICAgIFdIRVJFIEVYSVNUUyAoCisg ICAgICBTRUxFQ1QgMQorICAgICAgRlJPTSB0ZSB0NAorICAgICAgV0hFUkUgdDQudGNfaWQg PSB0My50Y19pZAorICAgICAgICBBTkQgdDQudmFsID0gdDIuYXZhbAorICAgICkgPSBFWElT VFMgKAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdGMgdDUKKyAgICAgIFdIRVJFIHQ1 LmlkID0gdDMuaWQKKyAgICApCisgICkKKyk7CisKK0VYUExBSU4KK1NFTEVDVCB0YS4qCitG Uk9NIHRhCitXSEVSRSBFWElTVFMgKAorICBTRUxFQ1QgMQorICBGUk9NIHRiCisgIEpPSU4g dGMgT04gdGMuaWQgPSB0Yi5pZAorICAgICAgICAgQU5EIHRiLmlkID0gdGEuaWQKKyAgSk9J TiB0ZCBPTiB0ZC5pZCA9IHRjLmlkCispOworCitEUk9QIFRBQkxFIHRkLCB0ZTsKKworQ1JF QVRFIFRBQkxFIHRzdDEgKGlkIGludCwgbWVzIHZhcmNoYXIoMjApKTsKK0NSRUFURSBUQUJM RSB0c3QyIChpZCBpbnQsIHRzdDFfaWQgaW50LCB0eXBlX2lkIGludCk7CitDUkVBVEUgVEFC TEUgdHN0MyAoaWQgYnl0ZWEpOworQ1JFQVRFIFRBQkxFIHRzdDQgKGlkIGludCwgdHN0M19p ZCBieXRlYSwgdHlwZV9pZCBpbnQpOworQ1JFQVRFIFRBQkxFIHRzdDUgKGlkIGludCwgdHN0 M19pZCBieXRlYSwgdHlwZV9pZCBpbnQpOworCitJTlNFUlQgSU5UTyB0c3QxIFZBTFVFUyAo MSwgJ3Rlc3QxJyk7CitJTlNFUlQgSU5UTyB0c3QxIFZBTFVFUyAoMiwgJ3Rlc3QyJyk7CitJ TlNFUlQgSU5UTyB0c3QxIFZBTFVFUyAoMywgJ3Rlc3QzJyk7CitJTlNFUlQgSU5UTyB0c3Qy IFZBTFVFUyAoMSwgMiwgNyk7CitJTlNFUlQgSU5UTyB0c3QyIFZBTFVFUyAoMSwgMiwgNik7 CitJTlNFUlQgSU5UTyB0c3QyIFZBTFVFUyAoMiwgMywgNyk7CisKK0lOU0VSVCBJTlRPIHRz dDMKK1NFTEVDVCAoJ1Rlc3QnIHx8IGcuaWQpOjpieXRlYSBBUyBpZAorICAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgNSkgQVMgZyhpZCk7CisKK0lOU0VSVCBJTlRPIHRzdDQKKyhTRUxF Q1QgZy5pZCwgJ1Rlc3QxJzo6Ynl0ZWEgQVMgdHN0M19pZCwgNiBBUyB0eXBlX2lkCisgICBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAyNSkgQVMgZyhpZCkpCitVTklPTiBBTEwKKyhTRUxF Q1QgZy5pZCwgJ1Rlc3QyJzo6Ynl0ZWEgQVMgdHN0M19pZCwgNyBBUyB0eXBlX2lkCisgICBG Uk9NIGdlbmVyYXRlX3NlcmllcygyNiwgNTApIEFTIGcoaWQpKQorVU5JT04gQUxMCisoU0VM RUNUIGcuaWQsICdUZXN0NCc6OmJ5dGVhIEFTIHRzdDNfaWQsIDYgQVMgdHlwZV9pZAorICAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTEsIDc1KSBBUyBnKGlkKSkKK1VOSU9OIEFMTAorKFNF TEVDVCBnLmlkLCAnVGVzdDUnOjpieXRlYSBBUyB0c3QzX2lkLCA3IEFTIHR5cGVfaWQKKyAg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDc2LCAxMDApIEFTIGcoaWQpKTsKK0lOU0VSVCBJTlRP IHRzdDUgU0VMRUNUICogRlJPTSB0c3Q0OworCitWQUNVVU0gKEFOQUxZWkUpIHRzdDEsIHRz dDIsIHRzdDMsIHRzdDQsIHRzdDU7CisKKy0tIENhc2Ugd2l0aCB0d28gZXhpc3RzIGluIE9w RXhwciwgaW4gdGhlIGZpcnN0IG9uZSB0My5pZCBpcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBw YXJlbnQgcXVlcnkKKy0tIGFuZCB0Mi50eXBlLWlkIGlzIHRoZSByZWZlcmVuY2UgdG8gZ3Jh bmRwYXJlbnQgcXVlcnkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB0MS4qCitGUk9N IHRzdDEgdDEKK1dIRVJFIEVYSVNUUyAoCisgIFNFTEVDVCAxCisgIEZST00gKFNFTEVDVCAx IEFTIFNEQkxfRFVNTVkpIFNEQkxfRFVBTAorICBKT0lOIHRzdDIgdDIgT04gdDIudHN0MV9p ZCA9IHQxLmlkCisgIFdIRVJFIEVYSVNUUyAoCisgICAgU0VMRUNUIDEKKyAgICBGUk9NIChT RUxFQ1QgMSBBUyBTREJMX0RVTU1ZKSBTREJMX0RVQUwKKyAgICBKT0lOIHRzdDMgdDMgT04g dDMuaWQgSU4gKCdUZXN0MSc6OmJ5dGVhLCAnVGVzdDInOjpieXRlYSkKKyAgICBXSEVSRSBF WElTVFMgKAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdHN0NCB0NAorICAgICAgV0hF UkUgdDQudHN0M19pZCA9IHQzLmlkCisgICAgICAgIEFORCB0NC50eXBlX2lkID0gdDIudHlw ZV9pZAorICAgICkgPSBFWElTVFMgKAorICAgICAgU0VMRUNUIDEKKyAgICAgIEZST00gdHN0 NSB0NQorICAgICAgV0hFUkUgdDUudHN0M19pZCA9IHQzLmlkCisgICAgKQorICApCispOwor CitEUk9QIFRBQkxFIHRzdDEsIHRzdDIsIHRzdDMsIHRzdDQsIHRzdDU7CisKIC0tIFRlc3Qg Y2FzZSBmb3Igc3VibGlua3MgcHVzaGVkIGRvd24gaW50byBzdWJzZWxlY3RzIHZpYSBqb2lu IGFsaWFzIGV4cGFuc2lvbgogLS0KIAotLSAKMi4zNC4xCgo= --------------EtZbfN6X2bYyQbKIaA2Fs3yI--