From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.groups.io with SMTP id smtpd.web11.10830.1624984437663965585 for ; Tue, 29 Jun 2021 09:33:57 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=BTPkMKhu; spf=pass (domain: redhat.com, ip: 216.205.24.124, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1624984436; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jrbLRK/NwF8HC6I+jYfUoMalXyYMu63TG/GTXBoZlqY=; b=BTPkMKhuOM6f3T7U0o8ArEFftqX0Y6afvI3PgdsZCD+sc70qWl+F1cPQrF4d+ZHvvvDe+T P+yHwrCPEvB73y6zbbAiyX3z4DHV9ZrZ71srB+o5uWsmhilvOX+nismMBipjC/O1Y2cXjJ PKD2G6/Ak4E/rThl2Rkt7lrRH25QJ7c= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-533-DxhliEBlOySqxB6-A4YV1A-1; Tue, 29 Jun 2021 12:33:53 -0400 X-MC-Unique: DxhliEBlOySqxB6-A4YV1A-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 46E9210C1ADC; Tue, 29 Jun 2021 16:33:52 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-114-158.ams2.redhat.com [10.36.114.158]) by smtp.corp.redhat.com (Postfix) with ESMTP id D231960875; Tue, 29 Jun 2021 16:33:50 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Jiaxin Wu , Maciej Rabeda , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Siyuan Fu Subject: [PATCH v2 4/6] NetworkPkg/IScsiDxe: support multiple hash algorithms for CHAP Date: Tue, 29 Jun 2021 18:33:35 +0200 Message-Id: <20210629163337.14120-5-lersek@redhat.com> In-Reply-To: <20210629163337.14120-1-lersek@redhat.com> References: <20210629163337.14120-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=lersek@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 SW50cm9kdWNlIHRoZSAibUNoYXBIYXNoIiB0YWJsZSwgY29udGFpbmluZyB0aGUgaGFzaCBhbGdv cml0aG1zIHN1cHBvcnRlZApmb3IgQ0hBUC4gSGFzaCBhbGdvcyBsaXN0ZWQgYXQgdGhlIGJlZ2lu bmluZyBvZiB0aGUgdGFibGUgYXJlIHByZWZlcnJlZCBieQp0aGUgaW5pdGlhdG9yLgoKSW4gSVND U0lfQ0hBUF9TVEVQX09ORSwgc2VuZCBzdWNoIGEgQ0hBUF9BIHZhbHVlIHRoYXQgaXMgdGhlCmNv bW1hLXNlcGFyYXRlZCwgb3JkZXJlZCBsaXN0IG9mIGFsZ29yaXRobSBpZGVudGlmaWVycyBmcm9t ICJtQ2hhcEhhc2giLgpQcmUtZm9ybWF0IHRoaXMgdmFsdWUgc3RyaW5nIGF0IGRyaXZlciBzdGFy dHVwLCBpbiB0aGUgbmV3IGZ1bmN0aW9uCklTY3NpQ0hBUEluaXRIYXNoTGlzdCgpLgoKKEluIElT Y3NpQ0hBUEluaXRIYXNoTGlzdCgpLCBhbHNvIGVuZm9yY2UgdGhhdCBldmVyeSBoYXNoIGFsZ28n cyBkaWdlc3QKc2l6ZSBmaXQgaW50byBJU0NTSV9DSEFQX01BWF9ESUdFU1RfU0laRSwgYXMgdGhl IGxhdHRlciBjb250cm9scyB0aGUKZGlnZXN0LCBvdXRnb2luZyBjaGFsbGVuZ2UsIGFuZCBoZXgg KmFsbG9jYXRpb25zKi4pCgpJbiBJU0NTSV9DSEFQX1NURVBfVFdPLCBhbGxvdyB0aGUgdGFyZ2V0 IHRvIHNlbGVjdCBvbmUgb2YgdGhlIG9mZmVyZWQgaGFzaAphbGdvcml0aG1zLCBhbmQgcmVtZW1i ZXIgdGhlIHNlbGVjdGlvbiBmb3IgdGhlIGxhdGVyIHN0ZXBzLiBGb3IKSVNDU0lfQ0hBUF9TVEVQ X1RIUkVFLCBoYXNoIHRoZSBjaGFsbGVuZ2UgZnJvbSB0aGUgdGFyZ2V0IHdpdGggdGhlCnNlbGVj dGVkIGhhc2ggYWxnby4KCkluIElTQ1NJX0NIQVBfU1RFUF9USFJFRSwgc2VuZCB0aGUgY29ycmVj dGx5IHNpemVkIGRpZ2VzdCB0byB0aGUgdGFyZ2V0LgpJZiB0aGUgaW5pdGlhdG9yIHdhbnRzIG11 dHVhbCBhdXRoZW50aWNhdGlvbiwgdGhlbiBnZW5lcmF0ZSBhIGNoYWxsZW5nZQp3aXRoIGFzIG1h bnkgYnl0ZXMgYXMgdGhlIHRhcmdldCdzIGRpZ2VzdCB3aWxsIGhhdmUsIGluCklTQ1NJX0NIQVBf U1RFUF9GT1VSLgoKSW4gSVNDU0lfQ0hBUF9TVEVQX0ZPVVIgKGkuZS4sIHdoZW4gbXV0dWFsIGF1 dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkIGJ5CnRoZSBpbml0aWF0b3IpLCB2ZXJpZnkgdGhlIHRh cmdldCdzIHJlc3BvbnNlIChkaWdlc3QpIHdpdGggdGhlIHNlbGVjdGVkCmFsZ29yaXRobS4KCkNs ZWFyIHRoZSBzZWxlY3RlZCBoYXNoIGFsZ29yaXRobSBiZWZvcmUgZXZlcnkgbG9naW4gKHJlbWVt YmVyIHRoYXQgaW4KSVNjc2lEeGUsIGV2ZXJ5IGxvZ2luIGlzIGEgbGVhZGluZyBsb2dpbikuCgpU aGVyZSBpcyBubyBwZWVyLW9ic2VydmFibGUgY2hhbmdlIGZyb20gdGhpcyBwYXRjaCwgYXMgaXQg b25seSByZXdvcmtzIHRoZQpjdXJyZW50IE1ENSBzdXBwb3J0IGludG8gdGhlIG5ldyBpbnRlcm5h bCByZXByZXNlbnRhdGlvbi4KCkNjOiBKaWF4aW4gV3UgPGppYXhpbi53dUBpbnRlbC5jb20+CkNj OiBNYWNpZWogUmFiZWRhIDxtYWNpZWoucmFiZWRhQGxpbnV4LmludGVsLmNvbT4KQ2M6IFBoaWxp cHBlIE1hdGhpZXUtRGF1ZMOpIDxwaGlsbWRAcmVkaGF0LmNvbT4KQ2M6IFNpeXVhbiBGdSA8c2l5 dWFuLmZ1QGludGVsLmNvbT4KUmVmOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hv d19idWcuY2dpP2lkPTMzNTUKU2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVk aGF0LmNvbT4KLS0tCgpOb3RlczoKICAgIHYyOgogICAgCiAgICAtIFN0cmljdGx5IHN0aWNrIHdp dGggdGhlIGVkazIgY29kaW5nIHN0eWxlLCBpbiB0aGUgbXVsdGktbGluZSBjYWxscyB0bwogICAg ICB0aGUgQ29tcGFyZU1lbSgpLCBJU2NzaUdlblJhbmRvbSgpLCBhbmQgQXNjaWlTUHJpbnQoKSBm dW5jdGlvbnMuCiAgICAgIFtNYWNpZWpdCiAgICAKICAgIC0gVXNlIGEgaGVscGVyIHZhcmlhYmxl IGluIHRoZSBDb21wYXJlTWVtKCkgY2FzZSwgdG8gYXZvaWQgYSBsaW5lIGJyZWFrCiAgICAgIGlu IHRoZSBjb250cm9sbGluZyBleHByZXNzaW9uIG9mIHRoZSAiaWYiIHN0YXRlbWVudC4gW0xhc3ps b10KCiBOZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpQ0hBUC5oICAgfCAgNTUgKysrKysrKwogTmV0 d29ya1BrZy9JU2NzaUR4ZS9JU2NzaUNIQVAuYyAgIHwgMTcwICsrKysrKysrKysrKysrKysrLS0t CiBOZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpRHJpdmVyLmMgfCAgIDIgKwogTmV0d29ya1BrZy9J U2NzaUR4ZS9JU2NzaVByb3RvLmMgIHwgICAzICsKIDQgZmlsZXMgY2hhbmdlZCwgMjA3IGluc2Vy dGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvSVNjc2lE eGUvSVNjc2lDSEFQLmggYi9OZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpQ0hBUC5oCmluZGV4IGI4 ODExYjc1ODBmMC4uMWU1Y2MwYjI4N2VkIDEwMDY0NAotLS0gYS9OZXR3b3JrUGtnL0lTY3NpRHhl L0lTY3NpQ0hBUC5oCisrKyBiL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lDSEFQLmgKQEAgLTMx LDQ3ICszMSw5MSBAQCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dAogDQogI2RlZmluZSBJU0NTSV9DSEFQX1NURVBfT05FICAgICAgICAgICAgICAgICAgICAgICAx DQogI2RlZmluZSBJU0NTSV9DSEFQX1NURVBfVFdPICAgICAgICAgICAgICAgICAgICAgICAyDQog I2RlZmluZSBJU0NTSV9DSEFQX1NURVBfVEhSRUUgICAgICAgICAgICAgICAgICAgICAzDQogI2Rl ZmluZSBJU0NTSV9DSEFQX1NURVBfRk9VUiAgICAgICAgICAgICAgICAgICAgICA0DQogDQogDQog I3ByYWdtYSBwYWNrKDEpDQogDQogdHlwZWRlZiBzdHJ1Y3QgX0lTQ1NJX0NIQVBfQVVUSF9DT05G SUdfTlZEQVRBIHsNCiAgIFVJTlQ4IENIQVBUeXBlOw0KICAgQ0hBUjggQ0hBUE5hbWVbSVNDU0lf Q0hBUF9OQU1FX1NUT1JBR0VdOw0KICAgQ0hBUjggQ0hBUFNlY3JldFtJU0NTSV9DSEFQX1NFQ1JF VF9TVE9SQUdFXTsNCiAgIENIQVI4IFJldmVyc2VDSEFQTmFtZVtJU0NTSV9DSEFQX05BTUVfU1RP UkFHRV07DQogICBDSEFSOCBSZXZlcnNlQ0hBUFNlY3JldFtJU0NTSV9DSEFQX1NFQ1JFVF9TVE9S QUdFXTsNCiB9IElTQ1NJX0NIQVBfQVVUSF9DT05GSUdfTlZEQVRBOw0KIA0KICNwcmFnbWEgcGFj aygpDQogDQorLy8NCisvLyBUeXBlZGVmcyBmb3IgY29sbGVjdGluZyBzZXRzIG9mIGhhc2ggQVBJ cyBmcm9tIEJhc2VDcnlwdExpYi4NCisvLw0KK3R5cGVkZWYNCitVSU5UTg0KKyhFRklBUEkgKkNI QVBfSEFTSF9HRVRfQ09OVEVYVF9TSVpFKSAoDQorICBWT0lEDQorICApOw0KKw0KK3R5cGVkZWYN CitCT09MRUFODQorKEVGSUFQSSAqQ0hBUF9IQVNIX0lOSVQpICgNCisgIE9VVCBWT0lEICpDb250 ZXh0DQorICApOw0KKw0KK3R5cGVkZWYNCitCT09MRUFODQorKEVGSUFQSSAqQ0hBUF9IQVNIX1VQ REFURSkgKA0KKyAgSU4gT1VUIFZPSUQgICAgICAgKkNvbnRleHQsDQorICBJTiAgICAgQ09OU1Qg Vk9JRCAqRGF0YSwNCisgIElOICAgICBVSU5UTiAgICAgIERhdGFTaXplDQorICApOw0KKw0KK3R5 cGVkZWYNCitCT09MRUFODQorKEVGSUFQSSAqQ0hBUF9IQVNIX0ZJTkFMKSAoDQorICBJTiBPVVQg Vk9JRCAgKkNvbnRleHQsDQorICBPVVQgICAgVUlOVDggKkhhc2hWYWx1ZQ0KKyAgKTsNCisNCit0 eXBlZGVmIHN0cnVjdCB7DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBBbGdvcml0aG07 ICAgICAgLy8gSVNDU0lfQ0hBUF9BTEdPUklUSE1fKiwgQ0hBUF9BDQorICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICBEaWdlc3RTaXplOw0KKyAgQ0hBUF9IQVNIX0dFVF9DT05URVhUX1NJWkUg R2V0Q29udGV4dFNpemU7DQorICBDSEFQX0hBU0hfSU5JVCAgICAgICAgICAgICBJbml0Ow0KKyAg Q0hBUF9IQVNIX1VQREFURSAgICAgICAgICAgVXBkYXRlOw0KKyAgQ0hBUF9IQVNIX0ZJTkFMICAg ICAgICAgICAgRmluYWw7DQorfSBDSEFQX0hBU0g7DQorDQogLy8vDQogLy8vIElTQ1NJIENIQVAg QXV0aGVudGljYXRpb24gRGF0YQ0KIC8vLw0KIHR5cGVkZWYgc3RydWN0IF9JU0NTSV9DSEFQX0FV VEhfREFUQSB7DQogICBJU0NTSV9DSEFQX0FVVEhfQ09ORklHX05WREFUQSAqQXV0aENvbmZpZzsN CiAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIEluSWRlbnRpZmllcjsNCiAgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgIEluQ2hhbGxlbmdlWzEwMjRdOw0KICAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgSW5DaGFsbGVuZ2VMZW5ndGg7DQogICAvLw0KKyAgLy8gVGhl IGhhc2ggYWxnb3JpdGhtIChDSEFQX0EpIHRoYXQgdGhlIHRhcmdldCBzZWxlY3RzIGluDQorICAv LyBJU0NTSV9DSEFQX1NURVBfVFdPLg0KKyAgLy8NCisgIENPTlNUIENIQVBfSEFTSCAgICAgICAg ICAgICAgICpIYXNoOw0KKyAgLy8NCiAgIC8vIENhbGN1bGF0ZWQgQ0hBUCBSZXNwb25zZSAoQ0hB UF9SKSB2YWx1ZS4NCiAgIC8vDQogICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICBDSEFQ UmVzcG9uc2VbSVNDU0lfQ0hBUF9NQVhfRElHRVNUX1NJWkVdOw0KIA0KICAgLy8NCiAgIC8vIEF1 dGgtZGF0YSB0byBiZSBzZW50IG91dCBmb3IgbXV0dWFsIGF1dGhlbnRpY2F0aW9uLg0KICAgLy8N CiAgIC8vIFdoaWxlIHRoZSBjaGFsbGVuZ2Ugc2l6ZSBpcyB0ZWNobmljYWxseSBpbmRlcGVuZGVu dCBvZiB0aGUgaGFzaGluZw0KICAgLy8gYWxnb3JpdGhtLCBpdCBpcyBnb29kIHByYWN0aWNlIHRv IGF2b2lkIGhhc2hpbmcgKmZld2VyIGJ5dGVzKiB0aGFuIHRoZQ0KICAgLy8gZGlnZXN0IHNpemUu IEluIG90aGVyIHdvcmRzLCBpdCdzIGdvb2QgcHJhY3RpY2UgdG8gZmVlZCAqYXQgbGVhc3QgYXMg bWFueQ0KICAgLy8gYnl0ZXMqIHRvIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBhcyB0aGUgaGFzaGlu ZyBhbGdvcml0aG0gd2lsbCBvdXRwdXQuDQogICAvLw0KICAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgT3V0SWRlbnRpZmllcjsNCiAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg IE91dENoYWxsZW5nZVtJU0NTSV9DSEFQX01BWF9ESUdFU1RfU0laRV07DQogfSBJU0NTSV9DSEFQ X0FVVEhfREFUQTsNCiANCiAvKioNCiAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSByZWNlaXZl ZCBpU0NTSSBMb2dpbiBSZXNwb25zZSBkdXJpbmcgdGhlIHNlY3VyaXR5DQogICBuZWdvdGlhdGlv biBzdGFnZS4NCkBAIC05MiwyMCArMTM2LDMxIEBAIElTY3NpQ0hBUE9uUnNwUmVjZWl2ZWQgKAog ICBUaGlzIGZ1bmN0aW9uIGZpbGxzIHRoZSBDSEFQIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9u IGludG8gdGhlIGxvZ2luIFBEVQ0KICAgZHVyaW5nIHRoZSBzZWN1cml0eSBuZWdvdGlhdGlvbiBz dGFnZSBpbiB0aGUgaVNDU0kgY29ubmVjdGlvbiBsb2dpbi4NCiANCiAgIEBwYXJhbVtpbl0gICAg ICAgQ29ubiAgICAgICAgVGhlIGlTQ1NJIGNvbm5lY3Rpb24uDQogICBAcGFyYW1baW4sIG91dF0g IFBkdSAgICAgICAgIFRoZSBQRFUgdG8gc2VuZCBvdXQuDQogDQogICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBBbGwgY2hlY2sgcGFzc2VkIGFuZCB0aGUgcGhhc2UtcmVsYXRlZCBDSEFQ DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBpbmZvIGlz IGZpbGxlZCBpbnRvIHRoZSBpU0NTSQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UERVLg0KICAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgRmFpbGVkIHRvIGFsbG9jYXRl IG1lbW9yeS4NCiAgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgIFNvbWUga2luZCBvZiBw cm90b2NvbCBlcnJvciBvY2N1cnJlZC4NCiANCiAqKi8NCiBFRklfU1RBVFVTDQogSVNjc2lDSEFQ VG9TZW5kUmVxICgNCiAgIElOICAgICAgSVNDU0lfQ09OTkVDVElPTiAgKkNvbm4sDQogICBJTiBP VVQgIE5FVF9CVUYgICAgICAgICAgICpQZHUNCiAgICk7DQogDQorLyoqDQorICBJbml0aWFsaXpl IHRoZSBDSEFQX0E9PEExLEEyLi4uPiAqdmFsdWUqIHN0cmluZyBmb3IgdGhlIGVudGlyZSBkcml2 ZXIsIHRvIGJlDQorICBzZW50IGJ5IHRoZSBpbml0aWF0b3IgaW4gSVNDU0lfQ0hBUF9TVEVQX09O RS4NCisNCisgIFRoaXMgZnVuY3Rpb24gc2FuaXR5LWNoZWNrcyB0aGUgaW50ZXJuYWwgdGFibGUg b2Ygc3VwcG9ydGVkIENIQVAgaGFzaGluZw0KKyAgYWxnb3JpdGhtcywgYXMgd2VsbC4NCisqKi8N CitWT0lEDQorSVNjc2lDSEFQSW5pdEhhc2hMaXN0ICgNCisgIFZPSUQNCisgICk7DQogI2VuZGlm DQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaUNIQVAuYyBiL05ldHdvcmtQ a2cvSVNjc2lEeGUvSVNjc2lDSEFQLmMKaW5kZXggNzQ0ODI0ZTYzZDIzLi4zNTFiZjMyOWI3Mzkg MTAwNjQ0Ci0tLSBhL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lDSEFQLmMKKysrIGIvTmV0d29y a1BrZy9JU2NzaUR4ZS9JU2NzaUNIQVAuYwpAQCAtMSwxNDggKzEsMTk5IEBACiAvKiogQGZpbGUN CiAgIFRoaXMgZmlsZSBpcyBmb3IgQ2hhbGxlbmdlLUhhbmRzaGFrZSBBdXRoZW50aWNhdGlvbiBQ cm90b2NvbCAoQ0hBUCkNCiAgIENvbmZpZ3VyYXRpb24uDQogDQogQ29weXJpZ2h0IChjKSAyMDA0 IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogDQogKiovDQogDQog I2luY2x1ZGUgIklTY3NpSW1wbC5oIg0KIA0KKy8vDQorLy8gU3VwcG9ydGVkIENIQVAgaGFzaCBh bGdvcml0aG1zLCBtYXBwZWQgdG8gc2V0cyBvZiBCYXNlQ3J5cHRMaWIgQVBJcyBhbmQNCisvLyBt YWNyb3MuIENIQVBfSEFTSCBzdHJ1Y3R1cmVzIGF0IGxvd2VyIHN1YnNjcmlwdHMgaW4gdGhlIGFy cmF5IGFyZSBwcmVmZXJyZWQNCisvLyBieSB0aGUgaW5pdGlhdG9yLg0KKy8vDQorU1RBVElDIENP TlNUIENIQVBfSEFTSCBtQ2hhcEhhc2hbXSA9IHsNCisgIHsNCisgICAgSVNDU0lfQ0hBUF9BTEdP UklUSE1fTUQ1LA0KKyAgICBNRDVfRElHRVNUX1NJWkUsDQorICAgIE1kNUdldENvbnRleHRTaXpl LA0KKyAgICBNZDVJbml0LA0KKyAgICBNZDVVcGRhdGUsDQorICAgIE1kNUZpbmFsDQorICB9LA0K K307DQorDQorLy8NCisvLyBPcmRlcmVkIGxpc3Qgb2YgbUNoYXBIYXNoWypdLkFsZ29yaXRobSB2 YWx1ZXMuIEl0IGlzIGZvcm1hdHRlZCBmb3IgdGhlDQorLy8gQ0hBUF9BPTxBMSxBMi4uLj4gdmFs dWUgc3RyaW5nLCBieSB0aGUgSVNjc2lDSEFQSW5pdEhhc2hMaXN0KCkgZnVuY3Rpb24uIEl0DQor Ly8gaXMgc2VudCBieSB0aGUgaW5pdGlhdG9yIGluIElTQ1NJX0NIQVBfU1RFUF9PTkUuDQorLy8N CitTVEFUSUMgQ0hBUjggbUNoYXBIYXNoTGlzdFN0cmluZ1sNCisgICAgICAgICAgICAgICAzICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVJTlQ4IGlkZW50aWZpZXIg aW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vICAgZGVjaW1hbA0KKyAgICAgICAgICAgICAgICgxICsgMykgKiAoQVJSQVlfU0laRSAo bUNoYXBIYXNoKSAtIDEpICsgLy8gY29tbWEgcHJlcGVuZGVkIGZvcg0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBlbnRyaWVzIGFm dGVyIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gICBmaXJzdA0KKyAgICAgICAgICAgICAgIDEgKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gZXh0cmEgY2hhcmFjdGVyIGZvcg0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBBc2NpaVNQ cmludCgpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyAgIHRydW5jYXRpb24gY2hlY2sNCisgICAgICAgICAgICAgICAxICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm1pbmF0aW5nIE5VTA0KKyAgICAg ICAgICAgICAgIF07DQorDQogLyoqDQogICBJbml0aWF0b3IgY2FsY3VsYXRlcyBpdHMgb3duIGV4 cGVjdGVkIGhhc2ggdmFsdWUuDQogDQogICBAcGFyYW1baW5dICAgQ2hhcElkZW50aWZpZXIgICAg IGlTQ1NJIENIQVAgaWRlbnRpZmllciBzZW50IGJ5IGF1dGhlbnRpY2F0b3IuDQogICBAcGFyYW1b aW5dICAgQ2hhcFNlY3JldCAgICAgICAgIGlTQ1NJIENIQVAgc2VjcmV0IG9mIHRoZSBhdXRoZW50 aWNhdG9yLg0KICAgQHBhcmFtW2luXSAgIFNlY3JldExlbmd0aCAgICAgICBUaGUgbGVuZ3RoIG9m IGlTQ1NJIENIQVAgc2VjcmV0Lg0KICAgQHBhcmFtW2luXSAgIENoYXBDaGFsbGVuZ2UgICAgICBU aGUgY2hhbGxlbmdlIG1lc3NhZ2Ugc2VudCBieSBhdXRoZW50aWNhdG9yLg0KICAgQHBhcmFtW2lu XSAgIENoYWxsZW5nZUxlbmd0aCAgICBUaGUgbGVuZ3RoIG9mIGlTQ1NJIENIQVAgY2hhbGxlbmdl IG1lc3NhZ2UuDQorICBAcGFyYW1baW5dICAgSGFzaCAgICAgICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIENIQVBfSEFTSCBzdHJ1Y3R1cmUgdGhhdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZXRlcm1pbmVzIHRoZSBoYXNoaW5nIGFsZ29yaXRobSB0byB1c2UuIFRoZQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9y IG1ha2luZyBIYXNoIHBvaW50DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv IGFuICJtQ2hhcEhhc2giIGVsZW1lbnQuDQogICBAcGFyYW1bb3V0XSAgQ2hhcFJlc3BvbnNlICAg ICAgIFRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgaGFzaCB2YWx1ZS4NCiANCiAgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIGV4cGVjdGVkIGhhc2ggdmFsdWUgd2Fz IGNhbGN1bGF0ZWRseQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNz ZnVsbHkuDQogICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgICAgIFRoZSBsZW5ndGggb2Yg dGhlIHNlY3JldCBzaG91bGQgYmUgYXQgbGVhc3QNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZSBmb3IgdGhlIGhhc2hpbmcNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnb3JpdGhtIGNob3Nlbi4NCi0gIEBy ZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgICAgTUQ1IGhhc2ggb3BlcmF0aW9uIGZhaWwuDQot ICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIEZhaWwgdG8gYWxsb2NhdGUgcmVzb3Vy Y2UgdG8gY29tcGxldGUgTUQ1Lg0KKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICAgICBI YXNoIG9wZXJhdGlvbiBmYWlscy4NCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAg RmFpbHVyZSB0byBhbGxvY2F0ZSByZXNvdXJjZSB0byBjb21wbGV0ZQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoYXNoaW5nLg0KIA0KICoqLw0KIEVGSV9TVEFUVVMNCiBJU2Nz aUNIQVBDYWxjdWxhdGVSZXNwb25zZSAoDQogICBJTiAgVUlOVDMyICAgICAgICAgIENoYXBJZGVu dGlmaWVyLA0KICAgSU4gIENIQVI4ICAgICAgICAgICAqQ2hhcFNlY3JldCwNCiAgIElOICBVSU5U MzIgICAgICAgICAgU2VjcmV0TGVuZ3RoLA0KICAgSU4gIFVJTlQ4ICAgICAgICAgICAqQ2hhcENo YWxsZW5nZSwNCiAgIElOICBVSU5UMzIgICAgICAgICAgQ2hhbGxlbmdlTGVuZ3RoLA0KKyAgSU4g IENPTlNUIENIQVBfSEFTSCAqSGFzaCwNCiAgIE9VVCBVSU5UOCAgICAgICAgICAgKkNoYXBSZXNw b25zZQ0KICAgKQ0KIHsNCi0gIFVJTlROICAgICAgIE1kNUNvbnRleHRTaXplOw0KLSAgVk9JRCAg ICAgICAgKk1kNUN0eDsNCisgIFVJTlROICAgICAgIENvbnRleHRTaXplOw0KKyAgVk9JRCAgICAg ICAgKkN0eDsNCiAgIENIQVI4ICAgICAgIElkQnl0ZVsxXTsNCiAgIEVGSV9TVEFUVVMgIFN0YXR1 czsNCiANCiAgIGlmIChTZWNyZXRMZW5ndGggPCBJU0NTSV9DSEFQX1NFQ1JFVF9NSU5fTEVOKSB7 DQogICAgIHJldHVybiBFRklfUFJPVE9DT0xfRVJST1I7DQogICB9DQogDQotICBNZDVDb250ZXh0 U2l6ZSA9IE1kNUdldENvbnRleHRTaXplICgpOw0KLSAgTWQ1Q3R4ID0gQWxsb2NhdGVQb29sIChN ZDVDb250ZXh0U2l6ZSk7DQotICBpZiAoTWQ1Q3R4ID09IE5VTEwpIHsNCisgIEFTU0VSVCAoSGFz aCAhPSBOVUxMKTsNCisNCisgIENvbnRleHRTaXplID0gSGFzaC0+R2V0Q29udGV4dFNpemUgKCk7 DQorICBDdHggPSBBbGxvY2F0ZVBvb2wgKENvbnRleHRTaXplKTsNCisgIGlmIChDdHggPT0gTlVM TCkgew0KICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICB9DQogDQogICBTdGF0 dXMgPSBFRklfUFJPVE9DT0xfRVJST1I7DQogDQotICBpZiAoIU1kNUluaXQgKE1kNUN0eCkpIHsN CisgIGlmICghSGFzaC0+SW5pdCAoQ3R4KSkgew0KICAgICBnb3RvIEV4aXQ7DQogICB9DQogDQog ICAvLw0KICAgLy8gSGFzaCBJZGVudGlmaWVyIC0gT25seSBjYWxjdWxhdGUgMSBieXRlIGRhdGEg KFJGQzE5OTQpDQogICAvLw0KICAgSWRCeXRlWzBdID0gKENIQVI4KSBDaGFwSWRlbnRpZmllcjsN Ci0gIGlmICghTWQ1VXBkYXRlIChNZDVDdHgsIElkQnl0ZSwgMSkpIHsNCisgIGlmICghSGFzaC0+ VXBkYXRlIChDdHgsIElkQnl0ZSwgMSkpIHsNCiAgICAgZ290byBFeGl0Ow0KICAgfQ0KIA0KICAg Ly8NCiAgIC8vIEhhc2ggU2VjcmV0DQogICAvLw0KLSAgaWYgKCFNZDVVcGRhdGUgKE1kNUN0eCwg Q2hhcFNlY3JldCwgU2VjcmV0TGVuZ3RoKSkgew0KKyAgaWYgKCFIYXNoLT5VcGRhdGUgKEN0eCwg Q2hhcFNlY3JldCwgU2VjcmV0TGVuZ3RoKSkgew0KICAgICBnb3RvIEV4aXQ7DQogICB9DQogDQog ICAvLw0KICAgLy8gSGFzaCBDaGFsbGVuZ2UgcmVjZWl2ZWQgZnJvbSBUYXJnZXQNCiAgIC8vDQot ICBpZiAoIU1kNVVwZGF0ZSAoTWQ1Q3R4LCBDaGFwQ2hhbGxlbmdlLCBDaGFsbGVuZ2VMZW5ndGgp KSB7DQorICBpZiAoIUhhc2gtPlVwZGF0ZSAoQ3R4LCBDaGFwQ2hhbGxlbmdlLCBDaGFsbGVuZ2VM ZW5ndGgpKSB7DQogICAgIGdvdG8gRXhpdDsNCiAgIH0NCiANCi0gIGlmIChNZDVGaW5hbCAoTWQ1 Q3R4LCBDaGFwUmVzcG9uc2UpKSB7DQorICBpZiAoSGFzaC0+RmluYWwgKEN0eCwgQ2hhcFJlc3Bv bnNlKSkgew0KICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCiAgIH0NCiANCiBFeGl0Og0KLSAg RnJlZVBvb2wgKE1kNUN0eCk7DQorICBGcmVlUG9vbCAoQ3R4KTsNCiAgIHJldHVybiBTdGF0dXM7 DQogfQ0KIA0KIC8qKg0KICAgVGhlIGluaXRpYXRvciBjaGVja3MgdGhlIENIQVAgcmVzcG9uc2Ug cmVwbGllZCBieSB0YXJnZXQgYWdhaW5zdCBpdHMgb3duDQogICBjYWxjdWxhdGlvbiBvZiB0aGUg ZXhwZWN0ZWQgaGFzaCB2YWx1ZS4NCiANCiAgIEBwYXJhbVtpbl0gICBBdXRoRGF0YSAgICAgICAg ICAgICBpU0NTSSBDSEFQIGF1dGhlbnRpY2F0aW9uIGRhdGEuDQogICBAcGFyYW1baW5dICAgVGFy Z2V0UmVzcG9uc2UgICAgICAgVGhlIHJlc3BvbnNlIGZyb20gdGFyZ2V0Lg0KIA0KICAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoZSByZXNwb25zZSBmcm9tIHRhcmdldCBwYXNz ZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi4N CiAgIEByZXR2YWwgRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTiAgICBUaGUgcmVzcG9uc2UgZnJvbSB0 YXJnZXQgd2FzIG5vdCBleHBlY3RlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZhbHVlLg0KICAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICAgIE90aGVyIGVy cm9ycyBhcyBpbmRpY2F0ZWQuDQogDQogKiovDQogRUZJX1NUQVRVUw0KIElTY3NpQ0hBUEF1dGhU YXJnZXQgKA0KICAgSU4gIElTQ1NJX0NIQVBfQVVUSF9EQVRBICAqQXV0aERhdGEsDQogICBJTiAg VUlOVDggICAgICAgICAgICAgICAgICpUYXJnZXRSZXNwb25zZQ0KICAgKQ0KIHsNCiAgIEVGSV9T VEFUVVMgIFN0YXR1czsNCiAgIFVJTlQzMiAgICAgIFNlY3JldFNpemU7DQogICBVSU5UOCAgICAg ICBWZXJpZnlSc3BbSVNDU0lfQ0hBUF9NQVhfRElHRVNUX1NJWkVdOw0KKyAgSU5UTiAgICAgICAg TWlzbWF0Y2g7DQogDQogICBTdGF0dXMgICAgICA9IEVGSV9TVUNDRVNTOw0KIA0KICAgU2VjcmV0 U2l6ZSAgPSAoVUlOVDMyKSBBc2NpaVN0ckxlbiAoQXV0aERhdGEtPkF1dGhDb25maWctPlJldmVy c2VDSEFQU2VjcmV0KTsNCisNCisgIEFTU0VSVCAoQXV0aERhdGEtPkhhc2ggIT0gTlVMTCk7DQor DQogICBTdGF0dXMgPSBJU2NzaUNIQVBDYWxjdWxhdGVSZXNwb25zZSAoDQogICAgICAgICAgICAg IEF1dGhEYXRhLT5PdXRJZGVudGlmaWVyLA0KICAgICAgICAgICAgICBBdXRoRGF0YS0+QXV0aENv bmZpZy0+UmV2ZXJzZUNIQVBTZWNyZXQsDQogICAgICAgICAgICAgIFNlY3JldFNpemUsDQogICAg ICAgICAgICAgIEF1dGhEYXRhLT5PdXRDaGFsbGVuZ2UsDQotICAgICAgICAgICAgIE1ENV9ESUdF U1RfU0laRSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbGxlbmdlTGVuZ3RoDQorICAg ICAgICAgICAgIEF1dGhEYXRhLT5IYXNoLT5EaWdlc3RTaXplLCAgICAgICAgICAgICAgLy8gQ2hh bGxlbmdlTGVuZ3RoDQorICAgICAgICAgICAgIEF1dGhEYXRhLT5IYXNoLA0KICAgICAgICAgICAg ICBWZXJpZnlSc3ANCiAgICAgICAgICAgICAgKTsNCiANCi0gIGlmIChDb21wYXJlTWVtIChWZXJp ZnlSc3AsIFRhcmdldFJlc3BvbnNlLCBNRDVfRElHRVNUX1NJWkUpICE9IDApIHsNCisgIE1pc21h dGNoID0gQ29tcGFyZU1lbSAoDQorICAgICAgICAgICAgICAgVmVyaWZ5UnNwLA0KKyAgICAgICAg ICAgICAgIFRhcmdldFJlc3BvbnNlLA0KKyAgICAgICAgICAgICAgIEF1dGhEYXRhLT5IYXNoLT5E aWdlc3RTaXplDQorICAgICAgICAgICAgICAgKTsNCisgIGlmIChNaXNtYXRjaCAhPSAwKSB7DQog ICAgIFN0YXR1cyA9IEVGSV9TRUNVUklUWV9WSU9MQVRJT047DQogICB9DQogDQogICByZXR1cm4g U3RhdHVzOw0KIH0NCiANCiANCiAvKioNCiAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSByZWNl aXZlZCBpU0NTSSBMb2dpbiBSZXNwb25zZSBkdXJpbmcgdGhlIHNlY3VyaXR5DQogICBuZWdvdGlh dGlvbiBzdGFnZS4NCiANCiAgIEBwYXJhbVtpbl0gQ29ubiAgICAgICAgICAgICBUaGUgaVNDU0kg Y29ubmVjdGlvbi4NCiANCiAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhlIExvZ2lu IFJlc3BvbnNlIHBhc3NlZCB0aGUgQ0hBUCB2YWxpZGF0aW9uLg0KICAgQHJldHZhbCBFRklfT1VU X09GX1JFU09VUkNFUyBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Lg0KICAgQHJldHZhbCBFRklf UFJPVE9DT0xfRVJST1IgICBTb21lIGtpbmQgb2YgcHJvdG9jb2wgZXJyb3Igb2NjdXJyZWQuDQog ICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQu DQogDQogKiovDQpAQCAtMTUwLDM4ICsyMDEsMzkgQEAgRUZJX1NUQVRVUwogSVNjc2lDSEFQT25S c3BSZWNlaXZlZCAoDQogICBJTiBJU0NTSV9DT05ORUNUSU9OICAqQ29ubg0KICAgKQ0KIHsNCiAg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQogICBJU0NTSV9TRVNTSU9OICAg ICAgICAgICAgICAgKlNlc3Npb247DQogICBJU0NTSV9DSEFQX0FVVEhfREFUQSAgICAgICAgKkF1 dGhEYXRhOw0KICAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpWYWx1ZTsNCiAgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAqRGF0YTsNCiAgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICBMZW47DQogICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgKktleVZhbHVlTGlzdDsN CiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBBbGdvcml0aG07DQogICBDSEFSOCAgICAg ICAgICAgICAgICAgICAgICAgKklkZW50aWZpZXI7DQogICBDSEFSOCAgICAgICAgICAgICAgICAg ICAgICAgKkNoYWxsZW5nZTsNCiAgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAqTmFtZTsN CiAgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAqUmVzcG9uc2U7DQogICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgICAgVGFyZ2V0UnNwW0lTQ1NJX0NIQVBfTUFYX0RJR0VTVF9TSVpFXTsN CiAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBSc3BMZW47DQogICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgUmVzdWx0Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIEhh c2hJbmRleDsNCiANCiAgIEFTU0VSVCAoQ29ubi0+Q3VycmVudFN0YWdlID09IElTQ1NJX1NFQ1VS SVRZX05FR09USUFUSU9OKTsNCiAgIEFTU0VSVCAoQ29ubi0+UnNwUXVlLkJ1Zk51bSAhPSAwKTsN CiANCiAgIFNlc3Npb24gICAgID0gQ29ubi0+U2Vzc2lvbjsNCiAgIEF1dGhEYXRhICAgID0gJlNl c3Npb24tPkF1dGhEYXRhLkNIQVA7DQogICBMZW4gICAgICAgICA9IENvbm4tPlJzcFF1ZS5CdWZT aXplOw0KICAgRGF0YSAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChMZW4pOw0KICAgaWYgKERh dGEgPT0gTlVMTCkgew0KICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICB9DQog ICAvLw0KICAgLy8gQ29weSB0aGUgZGF0YSBpbiBjYXNlIHRoZSBkYXRhIHNwYW5zIG92ZXIgbXVs dGlwbGUgUERVcy4NCiAgIC8vDQogICBOZXRidWZRdWVDb3B5ICgmQ29ubi0+UnNwUXVlLCAwLCBM ZW4sIERhdGEpOw0KIA0KICAgLy8NCiAgIC8vIEJ1aWxkIHRoZSBrZXktdmFsdWUgbGlzdCBmcm9t IHRoZSBkYXRhIHNlZ21lbnQgb2YgdGhlIExvZ2luIFJlc3BvbnNlLg0KICAgLy8NCkBAIC0yNDEs NDQgKzI5Myw1NCBAQCBJU2NzaUNIQVBPblJzcFJlY2VpdmVkICgKICAgICAvLyBUcmFuc2l0IHRv IENIQVAgc3RlcCBvbmUuDQogICAgIC8vDQogICAgIENvbm4tPkF1dGhTdGVwICA9IElTQ1NJX0NI QVBfU1RFUF9PTkU7DQogICAgIFN0YXR1cyAgICAgICAgICA9IEVGSV9TVUNDRVNTOw0KICAgICBi cmVhazsNCiANCiAgIGNhc2UgSVNDU0lfQ0hBUF9TVEVQX1RXTzoNCiAgICAgLy8NCiAgICAgLy8g VGhlIFRhcmdldCByZXBsaWVzIHdpdGggQ0hBUF9BPTxBPiBDSEFQX0k9PEk+IENIQVBfQz08Qz4N CiAgICAgLy8NCiAgICAgVmFsdWUgPSBJU2NzaUdldFZhbHVlQnlLZXlGcm9tTGlzdCAoDQogICAg ICAgICAgICAgICBLZXlWYWx1ZUxpc3QsDQogICAgICAgICAgICAgICBJU0NTSV9LRVlfQ0hBUF9B TEdPUklUSE0NCiAgICAgICAgICAgICAgICk7DQogICAgIGlmIChWYWx1ZSA9PSBOVUxMKSB7DQog ICAgICAgZ290byBPTl9FWElUOw0KICAgICB9DQogDQogICAgIEFsZ29yaXRobSA9IElTY3NpTmV0 TnRvaSAoVmFsdWUpOw0KLSAgICBpZiAoQWxnb3JpdGhtICE9IElTQ1NJX0NIQVBfQUxHT1JJVEhN X01ENSkgew0KKyAgICBmb3IgKEhhc2hJbmRleCA9IDA7IEhhc2hJbmRleCA8IEFSUkFZX1NJWkUg KG1DaGFwSGFzaCk7IEhhc2hJbmRleCsrKSB7DQorICAgICAgaWYgKEFsZ29yaXRobSA9PSBtQ2hh cEhhc2hbSGFzaEluZGV4XS5BbGdvcml0aG0pIHsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0N CisgICAgfQ0KKyAgICBpZiAoSGFzaEluZGV4ID09IEFSUkFZX1NJWkUgKG1DaGFwSGFzaCkpIHsN CiAgICAgICAvLw0KICAgICAgIC8vIFVuc3VwcG9ydGVkIGFsZ29yaXRobSBpcyBjaG9zZW4gYnkg dGFyZ2V0Lg0KICAgICAgIC8vDQogICAgICAgZ290byBPTl9FWElUOw0KICAgICB9DQorICAgIC8v DQorICAgIC8vIFJlbWVtYmVyIHRoZSB0YXJnZXQncyBjaG9zZW4gaGFzaCBhbGdvcml0aG0uDQor ICAgIC8vDQorICAgIEFTU0VSVCAoQXV0aERhdGEtPkhhc2ggPT0gTlVMTCk7DQorICAgIEF1dGhE YXRhLT5IYXNoID0gJm1DaGFwSGFzaFtIYXNoSW5kZXhdOw0KIA0KICAgICBJZGVudGlmaWVyID0g SVNjc2lHZXRWYWx1ZUJ5S2V5RnJvbUxpc3QgKA0KICAgICAgICAgICAgICAgICAgICBLZXlWYWx1 ZUxpc3QsDQogICAgICAgICAgICAgICAgICAgIElTQ1NJX0tFWV9DSEFQX0lERU5USUZJRVINCiAg ICAgICAgICAgICAgICAgICAgKTsNCiAgICAgaWYgKElkZW50aWZpZXIgPT0gTlVMTCkgew0KICAg ICAgIGdvdG8gT05fRVhJVDsNCiAgICAgfQ0KIA0KICAgICBDaGFsbGVuZ2UgPSBJU2NzaUdldFZh bHVlQnlLZXlGcm9tTGlzdCAoDQogICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LA0KICAg ICAgICAgICAgICAgICAgIElTQ1NJX0tFWV9DSEFQX0NIQUxMRU5HRQ0KICAgICAgICAgICAgICAg ICAgICk7DQogICAgIGlmIChDaGFsbGVuZ2UgPT0gTlVMTCkgew0KICAgICAgIGdvdG8gT05fRVhJ VDsNCiAgICAgfQ0KICAgICAvLw0KICAgICAvLyBQcm9jZXNzIHRoZSBDSEFQIGlkZW50aWZpZXIg YW5kIENIQVAgQ2hhbGxlbmdlIGZyb20gVGFyZ2V0Lg0KICAgICAvLyBDYWxjdWxhdGUgUmVzcG9u c2UgdmFsdWUuDQpAQCAtMjg5LDc2ICszNTEsNzggQEAgSVNjc2lDSEFQT25Sc3BSZWNlaXZlZCAo CiAgICAgfQ0KIA0KICAgICBBdXRoRGF0YS0+SW5JZGVudGlmaWVyICAgICAgPSAoVUlOVDMyKSBS ZXN1bHQ7DQogICAgIEF1dGhEYXRhLT5JbkNoYWxsZW5nZUxlbmd0aCA9IChVSU5UMzIpIHNpemVv ZiAoQXV0aERhdGEtPkluQ2hhbGxlbmdlKTsNCiAgICAgU3RhdHVzID0gSVNjc2lIZXhUb0JpbiAo DQogICAgICAgICAgICAgICAgKFVJTlQ4ICopIEF1dGhEYXRhLT5JbkNoYWxsZW5nZSwNCiAgICAg ICAgICAgICAgICAmQXV0aERhdGEtPkluQ2hhbGxlbmdlTGVuZ3RoLA0KICAgICAgICAgICAgICAg IENoYWxsZW5nZQ0KICAgICAgICAgICAgICAgICk7DQogICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCiAgICAgICBTdGF0dXMgPSBFRklfUFJPVE9DT0xfRVJST1I7DQogICAgICAgZ290byBP Tl9FWElUOw0KICAgICB9DQogICAgIFN0YXR1cyA9IElTY3NpQ0hBUENhbGN1bGF0ZVJlc3BvbnNl ICgNCiAgICAgICAgICAgICAgICBBdXRoRGF0YS0+SW5JZGVudGlmaWVyLA0KICAgICAgICAgICAg ICAgIEF1dGhEYXRhLT5BdXRoQ29uZmlnLT5DSEFQU2VjcmV0LA0KICAgICAgICAgICAgICAgIChV SU5UMzIpIEFzY2lpU3RyTGVuIChBdXRoRGF0YS0+QXV0aENvbmZpZy0+Q0hBUFNlY3JldCksDQog ICAgICAgICAgICAgICAgQXV0aERhdGEtPkluQ2hhbGxlbmdlLA0KICAgICAgICAgICAgICAgIEF1 dGhEYXRhLT5JbkNoYWxsZW5nZUxlbmd0aCwNCisgICAgICAgICAgICAgICBBdXRoRGF0YS0+SGFz aCwNCiAgICAgICAgICAgICAgICBBdXRoRGF0YS0+Q0hBUFJlc3BvbnNlDQogICAgICAgICAgICAg ICAgKTsNCiANCiAgICAgLy8NCiAgICAgLy8gVHJhbnNpdCB0byBuZXh0IHN0ZXAuDQogICAgIC8v DQogICAgIENvbm4tPkF1dGhTdGVwID0gSVNDU0lfQ0hBUF9TVEVQX1RIUkVFOw0KICAgICBicmVh azsNCiANCiAgIGNhc2UgSVNDU0lfQ0hBUF9TVEVQX1RIUkVFOg0KICAgICAvLw0KICAgICAvLyBP bmUgd2F5IENIQVAgYXV0aGVudGljYXRpb24gYW5kIHRoZSB0YXJnZXQgd291bGQgbGlrZSB0bw0K ICAgICAvLyBhdXRoZW50aWNhdGUgdXMuDQogICAgIC8vDQogICAgIFN0YXR1cyA9IEVGSV9TVUND RVNTOw0KICAgICBicmVhazsNCiANCiAgIGNhc2UgSVNDU0lfQ0hBUF9TVEVQX0ZPVVI6DQogICAg IEFTU0VSVCAoQXV0aERhdGEtPkF1dGhDb25maWctPkNIQVBUeXBlID09IElTQ1NJX0NIQVBfTVVU VUFMKTsNCiAgICAgLy8NCiAgICAgLy8gVGhlIGZvcnRoIHN0ZXAsIENIQVBfTj08Tj4gQ0hBUF9S PTxSPiBpcyByZWNlaXZlZCBmcm9tIFRhcmdldC4NCiAgICAgLy8NCiAgICAgTmFtZSA9IElTY3Np R2V0VmFsdWVCeUtleUZyb21MaXN0IChLZXlWYWx1ZUxpc3QsIElTQ1NJX0tFWV9DSEFQX05BTUUp Ow0KICAgICBpZiAoTmFtZSA9PSBOVUxMKSB7DQogICAgICAgZ290byBPTl9FWElUOw0KICAgICB9 DQogDQogICAgIFJlc3BvbnNlID0gSVNjc2lHZXRWYWx1ZUJ5S2V5RnJvbUxpc3QgKA0KICAgICAg ICAgICAgICAgICAgS2V5VmFsdWVMaXN0LA0KICAgICAgICAgICAgICAgICAgSVNDU0lfS0VZX0NI QVBfUkVTUE9OU0UNCiAgICAgICAgICAgICAgICAgICk7DQogICAgIGlmIChSZXNwb25zZSA9PSBO VUxMKSB7DQogICAgICAgZ290byBPTl9FWElUOw0KICAgICB9DQogDQotICAgIFJzcExlbiA9IE1E NV9ESUdFU1RfU0laRTsNCisgICAgQVNTRVJUIChBdXRoRGF0YS0+SGFzaCAhPSBOVUxMKTsNCisg ICAgUnNwTGVuID0gQXV0aERhdGEtPkhhc2gtPkRpZ2VzdFNpemU7DQogICAgIFN0YXR1cyA9IElT Y3NpSGV4VG9CaW4gKFRhcmdldFJzcCwgJlJzcExlbiwgUmVzcG9uc2UpOw0KLSAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpIHx8IFJzcExlbiAhPSBNRDVfRElHRVNUX1NJWkUpIHsNCisgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSB8fCBSc3BMZW4gIT0gQXV0aERhdGEtPkhhc2gtPkRpZ2VzdFNp emUpIHsNCiAgICAgICBTdGF0dXMgPSBFRklfUFJPVE9DT0xfRVJST1I7DQogICAgICAgZ290byBP Tl9FWElUOw0KICAgICB9DQogDQogICAgIC8vDQogICAgIC8vIENoZWNrIHRoZSBDSEFQIE5hbWUg YW5kIFJlc3BvbnNlIHJlcGxpZWQgYnkgVGFyZ2V0Lg0KICAgICAvLw0KICAgICBTdGF0dXMgPSBJ U2NzaUNIQVBBdXRoVGFyZ2V0IChBdXRoRGF0YSwgVGFyZ2V0UnNwKTsNCiAgICAgYnJlYWs7DQog DQogICBkZWZhdWx0Og0KICAgICBicmVhazsNCiAgIH0NCiANCiBPTl9FWElUOg0KIA0KICAgaWYg KEtleVZhbHVlTGlzdCAhPSBOVUxMKSB7DQogICAgIElTY3NpRnJlZUtleVZhbHVlTGlzdCAoS2V5 VmFsdWVMaXN0KTsNCiAgIH0NCkBAIC00NDIsODggKzUwNiwxNDggQEAgSVNjc2lDSEFQVG9TZW5k UmVxICgKICAgICAgIFNlc3Npb24tPkNvbmZpZ0RhdGEtPlNlc3Npb25Db25maWdEYXRhLlRhcmdl dE5hbWUNCiAgICAgICApOw0KIA0KICAgICBpZiAoU2Vzc2lvbi0+QXV0aFR5cGUgPT0gSVNDU0lf QVVUSF9UWVBFX05PTkUpIHsNCiAgICAgICBWYWx1ZSA9IElTQ1NJX0tFWV9WQUxVRV9OT05FOw0K ICAgICAgIElTQ1NJX1NFVF9GTEFHIChMb2dpblJlcSwgSVNDU0lfTE9HSU5fUkVRX1BEVV9GTEFH X1RSQU5TSVQpOw0KICAgICB9IGVsc2Ugew0KICAgICAgIFZhbHVlID0gSVNDU0lfQVVUSF9NRVRI T0RfQ0hBUDsNCiAgICAgfQ0KIA0KICAgICBJU2NzaUFkZEtleVZhbHVlUGFpciAoUGR1LCBJU0NT SV9LRVlfQVVUSF9NRVRIT0QsIFZhbHVlKTsNCiANCiAgICAgYnJlYWs7DQogDQogICBjYXNlIElT Q1NJX0NIQVBfU1RFUF9PTkU6DQogICAgIC8vDQogICAgIC8vIEZpcnN0IHN0ZXAsIHNlbmQgdGhl IExvZ2luIFJlcXVlc3Qgd2l0aCBDSEFQX0E9PEExLEEyLi4uPiBrZXktdmFsdWUNCiAgICAgLy8g cGFpci4NCiAgICAgLy8NCi0gICAgQXNjaWlTUHJpbnQgKFZhbHVlU3RyLCBzaXplb2YgKFZhbHVl U3RyKSwgIiVkIiwgSVNDU0lfQ0hBUF9BTEdPUklUSE1fTUQ1KTsNCi0gICAgSVNjc2lBZGRLZXlW YWx1ZVBhaXIgKFBkdSwgSVNDU0lfS0VZX0NIQVBfQUxHT1JJVEhNLCBWYWx1ZVN0cik7DQorICAg IElTY3NpQWRkS2V5VmFsdWVQYWlyIChQZHUsIElTQ1NJX0tFWV9DSEFQX0FMR09SSVRITSwgbUNo YXBIYXNoTGlzdFN0cmluZyk7DQogDQogICAgIENvbm4tPkF1dGhTdGVwID0gSVNDU0lfQ0hBUF9T VEVQX1RXTzsNCiAgICAgYnJlYWs7DQogDQogICBjYXNlIElTQ1NJX0NIQVBfU1RFUF9USFJFRToN CiAgICAgLy8NCiAgICAgLy8gVGhpcmQgc3RlcCwgc2VuZCB0aGUgTG9naW4gUmVxdWVzdCB3aXRo IENIQVBfTj08Tj4gQ0hBUF9SPTxSPiBvcg0KICAgICAvLyBDSEFQX049PE4+IENIQVBfUj08Uj4g Q0hBUF9JPTxJPiBDSEFQX0M9PEM+IGlmIHRhcmdldCBhdXRoZW50aWNhdGlvbiBpcw0KICAgICAv LyByZXF1aXJlZCB0b28uDQogICAgIC8vDQogICAgIC8vIENIQVBfTj08Tj4NCiAgICAgLy8NCiAg ICAgSVNjc2lBZGRLZXlWYWx1ZVBhaXIgKA0KICAgICAgIFBkdSwNCiAgICAgICBJU0NTSV9LRVlf Q0hBUF9OQU1FLA0KICAgICAgIChDSEFSOCAqKSAmQXV0aERhdGEtPkF1dGhDb25maWctPkNIQVBO YW1lDQogICAgICAgKTsNCiAgICAgLy8NCiAgICAgLy8gQ0hBUF9SPTxSPg0KICAgICAvLw0KKyAg ICBBU1NFUlQgKEF1dGhEYXRhLT5IYXNoICE9IE5VTEwpOw0KICAgICBCaW5Ub0hleFN0YXR1cyA9 IElTY3NpQmluVG9IZXggKA0KICAgICAgICAgICAgICAgICAgICAgICAgKFVJTlQ4ICopIEF1dGhE YXRhLT5DSEFQUmVzcG9uc2UsDQotICAgICAgICAgICAgICAgICAgICAgICBNRDVfRElHRVNUX1NJ WkUsDQorICAgICAgICAgICAgICAgICAgICAgICBBdXRoRGF0YS0+SGFzaC0+RGlnZXN0U2l6ZSwN CiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlLA0KICAgICAgICAgICAgICAgICAgICAg ICAgJlJzcExlbg0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgQVNTRVJUX0VGSV9F UlJPUiAoQmluVG9IZXhTdGF0dXMpOw0KICAgICBJU2NzaUFkZEtleVZhbHVlUGFpciAoUGR1LCBJ U0NTSV9LRVlfQ0hBUF9SRVNQT05TRSwgUmVzcG9uc2UpOw0KIA0KICAgICBpZiAoQXV0aERhdGEt PkF1dGhDb25maWctPkNIQVBUeXBlID09IElTQ1NJX0NIQVBfTVVUVUFMKSB7DQogICAgICAgLy8N CiAgICAgICAvLyBDSEFQX0k9PEk+DQogICAgICAgLy8NCiAgICAgICBJU2NzaUdlblJhbmRvbSAo KFVJTlQ4ICopICZBdXRoRGF0YS0+T3V0SWRlbnRpZmllciwgMSk7DQogICAgICAgQXNjaWlTUHJp bnQgKFZhbHVlU3RyLCBzaXplb2YgKFZhbHVlU3RyKSwgIiVkIiwgQXV0aERhdGEtPk91dElkZW50 aWZpZXIpOw0KICAgICAgIElTY3NpQWRkS2V5VmFsdWVQYWlyIChQZHUsIElTQ1NJX0tFWV9DSEFQ X0lERU5USUZJRVIsIFZhbHVlU3RyKTsNCiAgICAgICAvLw0KICAgICAgIC8vIENIQVBfQz08Qz4N CiAgICAgICAvLw0KLSAgICAgIElTY3NpR2VuUmFuZG9tICgoVUlOVDggKikgQXV0aERhdGEtPk91 dENoYWxsZW5nZSwgTUQ1X0RJR0VTVF9TSVpFKTsNCisgICAgICBJU2NzaUdlblJhbmRvbSAoDQor ICAgICAgICAoVUlOVDggKikgQXV0aERhdGEtPk91dENoYWxsZW5nZSwNCisgICAgICAgIEF1dGhE YXRhLT5IYXNoLT5EaWdlc3RTaXplDQorICAgICAgICApOw0KICAgICAgIEJpblRvSGV4U3RhdHVz ID0gSVNjc2lCaW5Ub0hleCAoDQogICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UOCAqKSBB dXRoRGF0YS0+T3V0Q2hhbGxlbmdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBNRDVfRElH RVNUX1NJWkUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhEYXRhLT5IYXNoLT5EaWdl c3RTaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFsbGVuZ2UsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICZDaGFsbGVuZ2VMZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCiAgICAgICBBU1NFUlRfRUZJX0VSUk9SIChCaW5Ub0hleFN0YXR1cyk7DQogICAgICAgSVNj c2lBZGRLZXlWYWx1ZVBhaXIgKFBkdSwgSVNDU0lfS0VZX0NIQVBfQ0hBTExFTkdFLCBDaGFsbGVu Z2UpOw0KIA0KICAgICAgIENvbm4tPkF1dGhTdGVwID0gSVNDU0lfQ0hBUF9TVEVQX0ZPVVI7DQog ICAgIH0NCiAgICAgLy8NCiAgICAgLy8gU2V0IHRoZSBzdGFnZSB0cmFuc2l0aW9uIGZsYWcuDQog ICAgIC8vDQogICAgIElTQ1NJX1NFVF9GTEFHIChMb2dpblJlcSwgSVNDU0lfTE9HSU5fUkVRX1BE VV9GTEFHX1RSQU5TSVQpOw0KICAgICBicmVhazsNCiANCiAgIGRlZmF1bHQ6DQogICAgIFN0YXR1 cyA9IEVGSV9QUk9UT0NPTF9FUlJPUjsNCiAgICAgYnJlYWs7DQogICB9DQogDQogICBGcmVlUG9v bCAoUmVzcG9uc2UpOw0KICAgRnJlZVBvb2wgKENoYWxsZW5nZSk7DQogDQogICByZXR1cm4gU3Rh dHVzOw0KIH0NCisNCisvKioNCisgIEluaXRpYWxpemUgdGhlIENIQVBfQT08QTEsQTIuLi4+ICp2 YWx1ZSogc3RyaW5nIGZvciB0aGUgZW50aXJlIGRyaXZlciwgdG8gYmUNCisgIHNlbnQgYnkgdGhl IGluaXRpYXRvciBpbiBJU0NTSV9DSEFQX1NURVBfT05FLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBz YW5pdHktY2hlY2tzIHRoZSBpbnRlcm5hbCB0YWJsZSBvZiBzdXBwb3J0ZWQgQ0hBUCBoYXNoaW5n DQorICBhbGdvcml0aG1zLCBhcyB3ZWxsLg0KKyoqLw0KK1ZPSUQNCitJU2NzaUNIQVBJbml0SGFz aExpc3QgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIENIQVI4ICAgICAgICAgICAqUG9zaXRpb247 DQorICBVSU5UTiAgICAgICAgICAgTGVmdDsNCisgIFVJTlROICAgICAgICAgICBIYXNoSW5kZXg7 DQorICBDT05TVCBDSEFQX0hBU0ggKkhhc2g7DQorICBVSU5UTiAgICAgICAgICAgUHJpbnRlZDsN CisNCisgIFBvc2l0aW9uID0gbUNoYXBIYXNoTGlzdFN0cmluZzsNCisgIExlZnQgPSBzaXplb2Yg KG1DaGFwSGFzaExpc3RTdHJpbmcpOw0KKyAgZm9yIChIYXNoSW5kZXggPSAwOyBIYXNoSW5kZXgg PCBBUlJBWV9TSVpFIChtQ2hhcEhhc2gpOyBIYXNoSW5kZXgrKykgew0KKyAgICBIYXNoID0gJm1D aGFwSGFzaFtIYXNoSW5kZXhdOw0KKw0KKyAgICAvLw0KKyAgICAvLyBGb3JtYXQgdGhlIG5leHQg aGFzaCBpZGVudGlmaWVyLg0KKyAgICAvLw0KKyAgICAvLyBBc3NlcnQgdGhhdCB3ZSBjYW4gZm9y bWF0IGF0IGxlYXN0IG9uZSBub24tTlVMIGNoYXJhY3RlciwgaS5lLiB0aGF0IHdlDQorICAgIC8v IGNhbiBwcm9ncmVzcy4gVHJ1bmNhdGlvbiBpcyBjaGVja2VkIGFmdGVyIHByaW50aW5nLg0KKyAg ICAvLw0KKyAgICBBU1NFUlQgKExlZnQgPj0gMik7DQorICAgIFByaW50ZWQgPSBBc2NpaVNQcmlu dCAoDQorICAgICAgICAgICAgICAgIFBvc2l0aW9uLA0KKyAgICAgICAgICAgICAgICBMZWZ0LA0K KyAgICAgICAgICAgICAgICAiJWElZCIsDQorICAgICAgICAgICAgICAgIChIYXNoSW5kZXggPT0g MCkgPyAiIiA6ICIsIiwNCisgICAgICAgICAgICAgICAgSGFzaC0+QWxnb3JpdGhtDQorICAgICAg ICAgICAgICAgICk7DQorICAgIC8vDQorICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGRpZmZlcmVu dGlhdGUgYmV0d2VlbiB0aGUgImJ1ZmZlciBmaWxsZWQgdG8gdGhlIGJyaW0sDQorICAgIC8vIGJ1 dCBub3QgdHJ1bmNhdGVkIiByZXN1bHQgYW5kIHRoZSAidHJ1bmNhdGVkIiByZXN1bHQgb2YgQXNj aWlTUHJpbnQoKS4NCisgICAgLy8gVGhpcyBpcyB3aHkgIm1DaGFwSGFzaExpc3RTdHJpbmciIGhh cyBhbiBleHRyYSBieXRlIGFsbG9jYXRlZCwgYW5kIHRoZQ0KKyAgICAvLyByZWFzb24gd2h5IHdl IHVzZSB0aGUgbGVzcy10aGFuIChyYXRoZXIgdGhhbiB0aGUgbGVzcy10aGFuLW9yLWVxdWFsLXRv KQ0KKyAgICAvLyByZWxhdGlvbmFsIG9wZXJhdG9yIGluIHRoZSBhc3NlcnRpb24gYmVsb3cgLS0g d2UgZW5mb3JjZSAibm8gdHJ1bmNhdGlvbiINCisgICAgLy8gYnkgZXhjbHVkaW5nIHRoZSAiY29t cGxldGVseSB1c2VkIHVwIiBjYXNlIHRvby4NCisgICAgLy8NCisgICAgQVNTRVJUIChQcmludGVk ICsgMSA8IExlZnQpOw0KKw0KKyAgICBQb3NpdGlvbiArPSBQcmludGVkOw0KKyAgICBMZWZ0IC09 IFByaW50ZWQ7DQorDQorICAgIC8vDQorICAgIC8vIFNhbml0eS1jaGVjayB0aGUgZGlnZXN0IHNp emUgZm9yIEhhc2guDQorICAgIC8vDQorICAgIEFTU0VSVCAoSGFzaC0+RGlnZXN0U2l6ZSA8PSBJ U0NTSV9DSEFQX01BWF9ESUdFU1RfU0laRSk7DQorICB9DQorfQ0KZGlmZiAtLWdpdCBhL05ldHdv cmtQa2cvSVNjc2lEeGUvSVNjc2lEcml2ZXIuYyBiL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lE cml2ZXIuYwppbmRleCA5OGI3MzMwOGMxMTguLjQ4NWM5Mjk3MjExMyAxMDA2NDQKLS0tIGEvTmV0 d29ya1BrZy9JU2NzaUR4ZS9JU2NzaURyaXZlci5jCisrKyBiL05ldHdvcmtQa2cvSVNjc2lEeGUv SVNjc2lEcml2ZXIuYwpAQCAtMTc2MywzOCArMTc2Myw0MCBAQCBJU2NzaURyaXZlckVudHJ5UG9p bnQgKAogICAgIGdvdG8gRXJyb3IxOw0KICAgfQ0KIA0KICAgLy8NCiAgIC8vIEluc3RhbGwgdGhl IGlTQ1NJIEluaXRpYXRvciBOYW1lIFByb3RvY29sLg0KICAgLy8NCiAgIFN0YXR1cyA9IGdCUy0+ SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCiAgICAgICAgICAgICAgICAgICAmSW1hZ2VIYW5k bGUsDQogICAgICAgICAgICAgICAgICAgJmdFZmlJU2NzaUluaXRpYXRvck5hbWVQcm90b2NvbEd1 aWQsDQogICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZBQ0UsDQogICAgICAgICAg ICAgICAgICAgJmdJU2NzaUluaXRpYXRvck5hbWUNCiAgICAgICAgICAgICAgICAgICApOw0KICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICBnb3RvIEVycm9yMjsNCiAgIH0NCiANCiAg IC8vDQogICAvLyBDcmVhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzLg0KICAgLy8NCisg IElTY3NpQ0hBUEluaXRIYXNoTGlzdCAoKTsNCisNCiAgIG1Qcml2YXRlID0gQWxsb2NhdGVaZXJv UG9vbCAoc2l6ZW9mIChJU0NTSV9QUklWQVRFX0RBVEEpKTsNCiAgIGlmIChtUHJpdmF0ZSA9PSBO VUxMKSB7DQogICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KICAgICBnb3RvIEVy cm9yMzsNCiAgIH0NCiANCiAgIEluaXRpYWxpemVMaXN0SGVhZCAoJm1Qcml2YXRlLT5OaWNJbmZv TGlzdCk7DQogICBJbml0aWFsaXplTGlzdEhlYWQgKCZtUHJpdmF0ZS0+QXR0ZW1wdENvbmZpZ3Mp Ow0KIA0KICAgLy8NCiAgIC8vIEluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gZm9ybSBvZiBp U0NTSS4NCiAgIC8vDQogICBTdGF0dXMgPSBJU2NzaUNvbmZpZ0Zvcm1Jbml0IChnSVNjc2lJcDRE cml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdIYW5kbGUpOw0KICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KICAgICBnb3RvIEVycm9yNDsNCiAgIH0NCiANCiAgIC8vDQogICAvLyBDcmVhdGUg dGhlIE1heGltdW0gQXR0ZW1wdHMuDQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9JU2NzaUR4ZS9J U2NzaVByb3RvLmMgYi9OZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpUHJvdG8uYwppbmRleCA2OWQx YjM5ZGJiMWYuLmU2MjczNmJjMDQxZiAxMDA2NDQKLS0tIGEvTmV0d29ya1BrZy9JU2NzaUR4ZS9J U2NzaVByb3RvLmMKKysrIGIvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaVByb3RvLmMKQEAgLTQx NiwzOCArNDE2LDQxIEBAIElTY3NpR2V0SXA2TmljSW5mbyAoCiANCiAgIHJldHVybiBTdGF0dXM7 DQogfQ0KIA0KIC8qKg0KICAgUmUtc2V0IGFueSBzdGF0ZWZ1bCBzZXNzaW9uLWxldmVsIGF1dGhl bnRpY2F0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMgdXNlZCBieQ0KICAgdGhlIGxlYWRpbmcgbG9n aW4gLyBsZWFkaW5nIGNvbm5lY3Rpb24uDQogDQogICAoTm90ZSB0aGF0IHRoaXMgZHJpdmVyIG9u bHkgc3VwcG9ydHMgYSBzaW5nbGUgY29ubmVjdGlvbiBwZXIgc2Vzc2lvbiAtLSBzZWUNCiAgIElT Q1NJX01BWF9DT05OU19QRVJfU0VTU0lPTi4pDQogDQogICBAcGFyYW1baW4sb3V0XSBTZXNzaW9u ICBUaGUgaVNDU0kgc2Vzc2lvbi4NCiAqKi8NCiBTVEFUSUMNCiBWT0lEDQogSVNjc2lTZXNzaW9u UmVzZXRBdXRoRGF0YSAoDQogICBJTiBPVVQgSVNDU0lfU0VTU0lPTiAqU2Vzc2lvbg0KICAgKQ0K IHsNCisgIGlmIChTZXNzaW9uLT5BdXRoVHlwZSA9PSBJU0NTSV9BVVRIX1RZUEVfQ0hBUCkgew0K KyAgICBTZXNzaW9uLT5BdXRoRGF0YS5DSEFQLkhhc2ggPSBOVUxMOw0KKyAgfQ0KIH0NCiANCiAv KioNCiAgIExvZ2luIHRoZSBpU0NTSSBzZXNzaW9uLg0KIA0KICAgQHBhcmFtW2luXSAgU2Vzc2lv biAgICAgICAgICAgVGhlIGlTQ1NJIHNlc3Npb24uDQogDQogICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgaVNDU0kgc2Vzc2lvbiBsb2dpbiBwcm9jZWR1cmUgZmluaXNoZWQuDQog ICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5 Lg0KICAgQHJldHZhbCBFRklfTk9fTUVESUEgICAgICAgICAgVGhlcmUgd2FzIGEgbWVkaWEgZXJy b3IuDQogICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5k aWNhdGVkLg0KIA0KICoqLw0KIEVGSV9TVEFUVVMNCiBJU2NzaVNlc3Npb25Mb2dpbiAoDQogICBJ TiBJU0NTSV9TRVNTSU9OICAqU2Vzc2lvbg0KICAgKQ0KIHsNCiAgIEVGSV9TVEFUVVMgICAgICAg IFN0YXR1czsNCi0tIAoyLjE5LjEuMy5nMzAyNDdhYTVkMjAxCgoK