From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id D7F7343C35 for ; Tue, 23 Aug 2022 03:20:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B4D3168B9E7; Tue, 23 Aug 2022 06:20:03 +0300 (EEST) Received: from mail-oa1-f45.google.com (mail-oa1-f45.google.com [209.85.160.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AF0FA68B7FC for ; Tue, 23 Aug 2022 06:19:57 +0300 (EEST) Received: by mail-oa1-f45.google.com with SMTP id 586e51a60fabf-11c5505dba2so15300621fac.13 for ; Mon, 22 Aug 2022 20:19:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc; bh=GYltkJ1EZtA8O4k6BRCmbewccPNGkBTqUHctOq3kj60=; b=KQm3S3Zn3sAphBpEMTI4pNd+ocXoJP9SxYopUkvymogGgx9E+hw8xOIRdRYPuqNkty IGOznyu07Ys5o4Ya/G/TxAH4rIflXPt3pjIOZiT/52yT5T7iD5MlDuZJgDH542sT3/gs QkfO6u35TyQTvKL50kpyBi4xLI2vLuwoqBV2WDwEUZ20O/YIN0tq3qnF39+BhMgh44Oy GdO6ON13xQT6mmEd6C8jOBLwAwrBD4rw87vBLI1/4wFg4t18LUrYndoHcY7KY7ZPQcIh waiOHN1k2YeLLs4qe0bsMslqbbUgZx1jIYnsHq2osyzVz/97Cul014De7yFgtP3rR5UF DWVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc; bh=GYltkJ1EZtA8O4k6BRCmbewccPNGkBTqUHctOq3kj60=; b=Dpzf1GADydqBiMxIAw3ICzrZNrmAgxIRx6vUmPV1Jac+rTlv8KkXFtF4DYgeQDjPNF MowRyFhrQ7EeBTlxVRuAHrrmVf3gY+/vCcnsYcLEe5V9LDmQybxIgcRKP/qoLkRCfAx2 wsDk5SiFu/P7XykSrAt16UBFAQsUyCq8/G+K6L8/KkLJ1rbssF21PCqSR483+CAz8k14 uGs1Jtdxmyg1ACPPyYRxM6FU3OfZ5KYIndOcLmM4QANOfAEisP2h9XaFGRvELxXBjqzN 8pPR+NayLX8z+9FR2urVl5gquClPemMLfzDosnKnZh6LXFTWtH8o3Bc3EK3Ads8SKF7r vGrg== X-Gm-Message-State: ACgBeo10E7cbY0aqqTNyA05CKT/Ojj1A88XB+Y0vI3cI64W8Byz+SCNi 4kG/YTKCAjSodzcgLnVS2/V6jLUZ9jQIvPLoj7TOoU0jQ8EAMEeb X-Google-Smtp-Source: AA6agR5zR3sRXYHUN+k2u5fe0DuyPL1HDaKbXstxaqXgP4GzaOvUzuPFPFPZvvHJrb15HjQJIGH7OAW2LKq+KPzQKRA= X-Received: by 2002:a05:6870:f114:b0:11c:c774:445d with SMTP id k20-20020a056870f11400b0011cc774445dmr584153oac.189.1661224795772; Mon, 22 Aug 2022 20:19:55 -0700 (PDT) MIME-Version: 1.0 References: <20220821192636.734-1-lukas.fellechner@gmx.net> In-Reply-To: <20220821192636.734-1-lukas.fellechner@gmx.net> From: Steven Liu Date: Tue, 23 Aug 2022 11:19:43 +0800 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v2] lavf/dashdec: Multithreaded DASH initialization X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: THVrYXMgRmVsbGVjaG5lciA8bHVrYXMuZmVsbGVjaG5lckBnbXgubmV0PiDkuo4yMDIy5bm0OOac iDIy5pel5ZGo5LiAIDAzOjI35YaZ6YGT77yaCj4KPiBJbml0aWFsaXppbmcgREFTSCBzdHJlYW1z IGlzIGN1cnJlbnRseSBzbG93LCBiZWNhdXNlIGVhY2ggaW5kaXZpZHVhbCBzdHJlYW0gaXMgb3Bl bmVkIGFuZCBwcm9iZWQgc2VxdWVudGlhbGx5LiBXaXRoIERBU0ggc3RyZWFtcyBvZnRlbiBoYXZp bmcgc29tZXdoZXJlIGJldHdlZW4gMTAtMjAgc3RyZWFtcywgdGhpcyBjYW4gZWFzaWx5IHRha2Ug dXAgdG8gaGFsZiBhIG1pbnV0ZS4gVGhpcyBwYXRjaCBhZGRzIGFuICJpbml0LXRocmVhZHMiIG9w dGlvbiwgc3BlY2lmeWluZyB0aGUgbWF4IG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZS4gTXVsdGlw bGUgd29ya2VyIHRocmVhZHMgYXJlIHNwdW4gdXAgdG8gbWFzc2l2ZWx5IGJyaW5nIGRvd24gaW5p dCB0aW1lcy4KPiAtLS0KPiAgbGliYXZmb3JtYXQvZGFzaGRlYy5jIHwgNDMyICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMzg2IGlu c2VydGlvbnMoKyksIDQ2IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L2Rhc2hkZWMuYyBiL2xpYmF2Zm9ybWF0L2Rhc2hkZWMuYwo+IGluZGV4IDYzYmY3ZTk2YTUuLjdl Y2EzZTM0MTUgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvZGFzaGRlYy5jCj4gKysrIGIvbGli YXZmb3JtYXQvZGFzaGRlYy5jCj4gQEAgLTI0LDYgKzI0LDcgQEAKPiAgI2luY2x1ZGUgImxpYmF2 dXRpbC9vcHQuaCIKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lLmgiCj4gICNpbmNsdWRlICJs aWJhdnV0aWwvcGFyc2V1dGlscy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3RocmVhZC5oIgo+ ICAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiAgI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKPiAg I2luY2x1ZGUgImRhc2guaCIKPiBAQCAtMTUyLDYgKzE1Myw4IEBAIHR5cGVkZWYgc3RydWN0IERB U0hDb250ZXh0IHsKPiAgICAgIGludCBtYXhfdXJsX3NpemU7Cj4gICAgICBjaGFyICpjZW5jX2Rl Y3J5cHRpb25fa2V5Owo+Cj4gKyAgICBpbnQgaW5pdF90aHJlYWRzOwo+ICsKPiAgICAgIC8qIEZs YWdzIGZvciBpbml0IHNlY3Rpb24qLwo+ICAgICAgaW50IGlzX2luaXRfc2VjdGlvbl9jb21tb25f dmlkZW87Cj4gICAgICBpbnQgaXNfaW5pdF9zZWN0aW9uX2NvbW1vbl9hdWRpbzsKPiBAQCAtMTkx OCwyMiArMTkyMSw0MCBAQCBmYWlsOgo+ICAgICAgcmV0dXJuIHJldDsKPiAgfQo+Cj4gLXN0YXRp YyBpbnQgb3Blbl9kZW11eF9mb3JfY29tcG9uZW50KEFWRm9ybWF0Q29udGV4dCAqcywgc3RydWN0 IHJlcHJlc2VudGF0aW9uICpwbHMpCj4gK3N0YXRpYyBpbnQgb3Blbl9kZW11eF9mb3JfY29tcG9u ZW50KEFWRm9ybWF0Q29udGV4dCogcywgc3RydWN0IHJlcHJlc2VudGF0aW9uKiBwbHMpCj4gK3sK PiArICAgIGludCByZXQgPSAwOwo+ICsKPiArICAgIHJldCA9IGJlZ2luX29wZW5fZGVtdXhfZm9y X2NvbXBvbmVudChzLCBwbHMpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJu IHJldDsKPiArCj4gKyAgICByZXQgPSBlbmRfb3Blbl9kZW11eF9mb3JfY29tcG9uZW50KHMsIHBs cyk7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBiZWdpbl9v cGVuX2RlbXV4X2Zvcl9jb21wb25lbnQoQVZGb3JtYXRDb250ZXh0KiBzLCBzdHJ1Y3QgcmVwcmVz ZW50YXRpb24qIHBscykKPiAgewo+ICAgICAgaW50IHJldCA9IDA7Cj4gLSAgICBpbnQgaTsKPgo+ ICAgICAgcGxzLT5wYXJlbnQgPSBzOwo+IC0gICAgcGxzLT5jdXJfc2VxX25vICA9IGNhbGNfY3Vy X3NlZ19ubyhzLCBwbHMpOwo+ICsgICAgcGxzLT5jdXJfc2VxX25vID0gY2FsY19jdXJfc2VnX25v KHMsIHBscyk7Cj4KPiAgICAgIGlmICghcGxzLT5sYXN0X3NlcV9ubykgewo+ICAgICAgICAgIHBs cy0+bGFzdF9zZXFfbm8gPSBjYWxjX21heF9zZWdfbm8ocGxzLCBzLT5wcml2X2RhdGEpOwo+ICAg ICAgfQo+Cj4gICAgICByZXQgPSByZW9wZW5fZGVtdXhfZm9yX2NvbXBvbmVudChzLCBwbHMpOwo+ IC0gICAgaWYgKHJldCA8IDApIHsKPiAtICAgICAgICBnb3RvIGZhaWw7Cj4gLSAgICB9Cj4gKwo+ ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBlbmRfb3Blbl9kZW11eF9m b3JfY29tcG9uZW50KEFWRm9ybWF0Q29udGV4dCogcywgc3RydWN0IHJlcHJlc2VudGF0aW9uKiBw bHMpCj4gK3sKPiArICAgIGludCByZXQgPSAwOwo+ICsgICAgaW50IGk7Cj4gKwo+ICAgICAgZm9y IChpID0gMDsgaSA8IHBscy0+Y3R4LT5uYl9zdHJlYW1zOyBpKyspIHsKPiAgICAgICAgICBBVlN0 cmVhbSAqc3QgPSBhdmZvcm1hdF9uZXdfc3RyZWFtKHMsIE5VTEwpOwo+ICAgICAgICAgIEFWU3Ry ZWFtICppc3QgPSBwbHMtPmN0eC0+c3RyZWFtc1tpXTsKPiBAQCAtMjAxNSw2ICsyMDM2LDEzNSBA QCBzdGF0aWMgdm9pZCBtb3ZlX21ldGFkYXRhKEFWU3RyZWFtICpzdCwgY29uc3QgY2hhciAqa2V5 LCBjaGFyICoqdmFsdWUpCj4gICAgICB9Cj4gIH0KSSBsb29rIGF0IHRoZSBuZXcgZnVuY3Rpb25z IGxpa2VzIGJlZ2luX29wZW5fZGVtdXhfZm9yX2NvbXBvbmVudCBhbmQKZW5kX29wZW5fZGVtdXhf Zm9yX2NvbXBvbmVudCBtYXliZSBjYW4gc2VwYXJhdGUgcGF0Y2guCm1heWJlIHlvdSBjYW4gc3Vi bWl0IHR3byBwYXRjaCwgb25lIGlzIG1ha2UgY29kZSBjbGFyaWZ5LCB0aGUgb3RoZXIKb25lIHN1 cHBvcnQgbXVsdGl0aHJlYWRzLAoKQlRXLCBpIHNhdyB0aGVyZSBoYXZlIHR3byB3YXJuaW5nIG1l c3NhZ2UgYWJvdXQgcGF0Y2ggY29tbWl0IGNvb21lbnRzCmluIHBhdGNod29yazogaHR0cHM6Ly9w YXRjaHdvcmsuZmZtcGVnLm9yZy9wcm9qZWN0L2ZmbXBlZy9wYXRjaC8yMDIyMDgyMTE5MjYzNi43 MzQtMS1sdWthcy5mZWxsZWNobmVyQGdteC5uZXQvCgo+Cj4gKyNpZiBIQVZFX1RIUkVBRFMKPiAr Cj4gK3N0cnVjdCB3b3JrX3Bvb2xfZGF0YQo+ICt7Cj4gKyAgICBBVkZvcm1hdENvbnRleHQqIGN0 eDsKPiArICAgIHN0cnVjdCByZXByZXNlbnRhdGlvbiogcGxzOwo+ICsgICAgc3RydWN0IHJlcHJl c2VudGF0aW9uKiBjb21tb25fcGxzOwo+ICsgICAgcHRocmVhZF9tdXRleF90KiBjb21tb25fbXV0 ZXg7Cj4gKyAgICBwdGhyZWFkX2NvbmRfdCogY29tbW9uX2NvbmRpdGlvbjsKPiArICAgIGludCBp c19jb21tb247Cj4gKyAgICBpbnQgaXNfc3RhcnRlZDsKPiArICAgIGludCByZXN1bHQ7Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgdGhyZWFkX2RhdGEKPiArewo+ICsgICAgcHRocmVhZF90IHRocmVhZDsK PiArICAgIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXg7Cj4gKyAgICBzdHJ1Y3Qgd29ya19wb29sX2Rh dGEqIHdvcmtfcG9vbDsKPiArICAgIGludCB3b3JrX3Bvb2xfc2l6ZTsKPiArICAgIGludCBpc19z dGFydGVkOwo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgKndvcmtlcl90aHJlYWQodm9pZCAqcHRy KQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIGludCBpOwo+ICsgICAgc3RydWN0IHRo cmVhZF9kYXRhKiB0aHJlYWRfZGF0YSA9IChzdHJ1Y3QgdGhyZWFkX2RhdGEqKXB0cjsKPiArICAg IHN0cnVjdCB3b3JrX3Bvb2xfZGF0YSogd29ya19wb29sID0gTlVMTDsKPiArICAgIHN0cnVjdCB3 b3JrX3Bvb2xfZGF0YSogZGF0YSA9IE5VTEw7Cj4gKyAgICBmb3IgKDs7KSB7Cj4gKwo+ICsgICAg ICAgIC8vIGdldCBuZXh0IHdvcmsgaXRlbQo+ICsgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayh0 aHJlYWRfZGF0YS0+bXV0ZXgpOwo+ICsgICAgICAgIGRhdGEgPSBOVUxMOwo+ICsgICAgICAgIHdv cmtfcG9vbCA9IHRocmVhZF9kYXRhLT53b3JrX3Bvb2w7Cj4gKyAgICAgICAgZm9yIChpID0gMDsg aSA8IHRocmVhZF9kYXRhLT53b3JrX3Bvb2xfc2l6ZTsgaSsrKSB7Cj4gKyAgICAgICAgICAgIGlm ICghd29ya19wb29sLT5pc19zdGFydGVkKSB7Cj4gKyAgICAgICAgICAgICAgICBkYXRhID0gd29y a19wb29sOwo+ICsgICAgICAgICAgICAgICAgZGF0YS0+aXNfc3RhcnRlZCA9IDE7Cj4gKyAgICAg ICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB3b3JrX3Bv b2wrKzsKPiArICAgICAgICB9Cj4gKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sodGhyZWFk X2RhdGEtPm11dGV4KTsKPiArCj4gKyAgICAgICAgaWYgKCFkYXRhKSB7Cj4gKyAgICAgICAgICAg IC8vIG5vIG1vcmUgd29yayB0byBkbwo+ICsgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIC8vIGlmIHdlIGFyZSBjb21tb24gc2VjdGlvbiBwcm92aWRl ciwgaW5pdCBhbmQgc2lnbmFsCj4gKyAgICAgICAgaWYgKGRhdGEtPmlzX2NvbW1vbikgewo+ICsg ICAgICAgICAgICBkYXRhLT5wbHMtPnBhcmVudCA9IGRhdGEtPmN0eDsKPiArICAgICAgICAgICAg cmV0ID0gdXBkYXRlX2luaXRfc2VjdGlvbihkYXRhLT5wbHMpOwo+ICsgICAgICAgICAgICBpZiAo cmV0IDwgMCkgewo+ICsgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX3NpZ25hbChkYXRhLT5j b21tb25fY29uZGl0aW9uKTsKPiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAg ICAgICB9Cj4gKyAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgIHJldCA9IEFWRVJS T1IocHRocmVhZF9jb25kX3NpZ25hbChkYXRhLT5jb21tb25fY29uZGl0aW9uKSk7Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICAvLyBpZiB3ZSBkZXBlbmQgb24gY29tbW9uIHNlY3Rpb24gcHJv dmlkZXIsIHdhaXQgZm9yIHNpZ25hbCBhbmQgY29weQo+ICsgICAgICAgIGlmIChkYXRhLT5jb21t b25fcGxzKSB7Cj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9jb25kX3dhaXQo ZGF0YS0+Y29tbW9uX2NvbmRpdGlvbiwgZGF0YS0+Y29tbW9uX211dGV4KSk7Cj4gKyAgICAgICAg ICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICsgICAg ICAgICAgICBpZiAoIWRhdGEtPmNvbW1vbl9wbHMtPmluaXRfc2VjX2J1Zikgewo+ICsgICAgICAg ICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVGQVVM VCk7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIHJldCA9IGNvcHlfaW5pdF9z ZWN0aW9uKGRhdGEtPnBscywgZGF0YS0+Y29tbW9uX3Bscyk7Cj4gKyAgICAgICAgICAgIGlmIChy ZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAgfQo+ICsKPiAr ICAgICAgICByZXQgPSBiZWdpbl9vcGVuX2RlbXV4X2Zvcl9jb21wb25lbnQoZGF0YS0+Y3R4LCBk YXRhLT5wbHMpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICBnb3RvIGVu ZDsKPiArCj4gKyAgICBlbmQ6Cj4gKyAgICAgICAgZGF0YS0+cmVzdWx0ID0gcmV0Owo+ICsgICAg fQo+ICsKPiArCj4gKyAgICByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY3Jl YXRlX3dvcmtfcG9vbF9kYXRhKEFWRm9ybWF0Q29udGV4dCogY3R4LCBpbnQgc3RyZWFtX2luZGV4 LAo+ICsgICAgc3RydWN0IHJlcHJlc2VudGF0aW9uKiBwbHMsIHN0cnVjdCByZXByZXNlbnRhdGlv biogY29tbW9uX3BscywKPiArICAgIHN0cnVjdCB3b3JrX3Bvb2xfZGF0YSogaW5pdF9kYXRhLCBw dGhyZWFkX211dGV4X3QqIGNvbW1vbl9tdXRleCwKPiArICAgIHB0aHJlYWRfY29uZF90KiBjb21t b25fY29uZGl0aW9uKQo+ICt7Cj4gKyAgICBpbml0X2RhdGEtPmN0eCA9IGN0eDsKPiArICAgIGlu aXRfZGF0YS0+cGxzID0gcGxzOwo+ICsgICAgaW5pdF9kYXRhLT5wbHMtPnN0cmVhbV9pbmRleCA9 IHN0cmVhbV9pbmRleDsKPiArICAgIGluaXRfZGF0YS0+Y29tbW9uX2NvbmRpdGlvbiA9IGNvbW1v bl9jb25kaXRpb247Cj4gKyAgICBpbml0X2RhdGEtPmNvbW1vbl9tdXRleCA9IGNvbW1vbl9tdXRl eDsKPiArICAgIGluaXRfZGF0YS0+cmVzdWx0ID0gLTE7Cj4gKwo+ICsgICAgaWYgKHBscyA9PSBj b21tb25fcGxzKSB7Cj4gKyAgICAgICAgaW5pdF9kYXRhLT5pc19jb21tb24gPSAxOwo+ICsgICAg fQo+ICsgICAgZWxzZSBpZiAoY29tbW9uX3Bscykgewo+ICsgICAgICAgIGluaXRfZGF0YS0+Y29t bW9uX3BscyA9IGNvbW1vbl9wbHM7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc3Rh cnRfdGhyZWFkKHN0cnVjdCB0aHJlYWRfZGF0YSAqdGhyZWFkX2RhdGEsCj4gKyAgICBzdHJ1Y3Qg d29ya19wb29sX2RhdGEgKndvcmtfcG9vbCwgaW50IHdvcmtfcG9vbF9zaXplLCBwdGhyZWFkX211 dGV4X3QgKm11dGV4KQo+ICt7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIHRocmVhZF9kYXRh LT5tdXRleCA9IG11dGV4Owo+ICsgICAgdGhyZWFkX2RhdGEtPndvcmtfcG9vbCA9IHdvcmtfcG9v bDsKPiArICAgIHRocmVhZF9kYXRhLT53b3JrX3Bvb2xfc2l6ZSA9IHdvcmtfcG9vbF9zaXplOwo+ ICsKPiArICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9jcmVhdGUoJnRocmVhZF9kYXRhLT50aHJl YWQsIE5VTEwsIHdvcmtlcl90aHJlYWQsICh2b2lkKil0aHJlYWRfZGF0YSkpOwo+ICsgICAgaWYg KHJldCA9PSAwKQo+ICsgICAgICAgIHRocmVhZF9kYXRhLT5pc19zdGFydGVkID0gMTsKPiArCj4g KyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsjZW5kaWYKPiArCj4gIHN0YXRpYyBpbnQgZGFz aF9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCj4gIHsKPiAgICAgIERBU0hDb250ZXh0 ICpjID0gcy0+cHJpdl9kYXRhOwo+IEBAIC0yMDQwLDYzICsyMTkwLDI1MiBAQCBzdGF0aWMgaW50 IGRhc2hfcmVhZF9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICAgICAgICAgIGF2X2RpY3Rf c2V0KCZjLT5hdmlvX29wdHMsICJzZWVrYWJsZSIsICIwIiwgMCk7Cj4gICAgICB9Cj4KPiAtICAg IGlmKGMtPm5fdmlkZW9zKQo+ICsgICAgaWYgKGMtPm5fdmlkZW9zKQo+ICAgICAgICAgIGMtPmlz X2luaXRfc2VjdGlvbl9jb21tb25fdmlkZW8gPSBpc19jb21tb25faW5pdF9zZWN0aW9uX2V4aXN0 KGMtPnZpZGVvcywgYy0+bl92aWRlb3MpOwo+Cj4gLSAgICAvKiBPcGVuIHRoZSBkZW11eGVyIGZv ciB2aWRlbyBhbmQgYXVkaW8gY29tcG9uZW50cyBpZiBhdmFpbGFibGUgKi8KPiAtICAgIGZvciAo aSA9IDA7IGkgPCBjLT5uX3ZpZGVvczsgaSsrKSB7Cj4gLSAgICAgICAgcmVwID0gYy0+dmlkZW9z W2ldOwo+IC0gICAgICAgIGlmIChpID4gMCAmJiBjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX3Zp ZGVvKSB7Cj4gLSAgICAgICAgICAgIHJldCA9IGNvcHlfaW5pdF9zZWN0aW9uKHJlcCwgYy0+dmlk ZW9zWzBdKTsKPiArICAgIGlmIChjLT5uX2F1ZGlvcykKPiArICAgICAgICBjLT5pc19pbml0X3Nl Y3Rpb25fY29tbW9uX2F1ZGlvID0gaXNfY29tbW9uX2luaXRfc2VjdGlvbl9leGlzdChjLT5hdWRp b3MsIGMtPm5fYXVkaW9zKTsKPiArCj4gKyAgICBpZiAoYy0+bl9zdWJ0aXRsZXMpCj4gKyAgICAg ICAgYy0+aXNfaW5pdF9zZWN0aW9uX2NvbW1vbl9zdWJ0aXRsZSA9IGlzX2NvbW1vbl9pbml0X3Nl Y3Rpb25fZXhpc3QoYy0+c3VidGl0bGVzLCBjLT5uX3N1YnRpdGxlcyk7Cj4gKwo+ICsgICAgaW50 IHRocmVhZHMgPSAwOwo+ICsgICAgaW50IG5zdHJlYW1zID0gYy0+bl92aWRlb3MgKyBjLT5uX2F1 ZGlvcyArIGMtPm5fc3VidGl0bGVzOwo+ICsKPiArI2lmIEhBVkVfVEhSRUFEUwo+ICsgICAgdGhy ZWFkcyA9IEZGTUlOKG5zdHJlYW1zLCBjLT5pbml0X3RocmVhZHMpOwo+ICsjZW5kaWYKPiArCj4g KyAgICBpZiAodGhyZWFkcyA+IDEpCj4gKyAgICB7Cj4gKyNpZiBIQVZFX1RIUkVBRFMKPiArICAg ICAgICAvLyBhbGxvYyBkYXRhCj4gKyAgICAgICAgc3RydWN0IHdvcmtfcG9vbF9kYXRhKiBpbml0 X2RhdGEgPSAoc3RydWN0IHdvcmtfcG9vbF9kYXRhKilhdl9tYWxsb2N6KHNpemVvZihzdHJ1Y3Qg d29ya19wb29sX2RhdGEpICogbnN0cmVhbXMpOwo+ICsgICAgICAgIGlmICghaW5pdF9kYXRhKQo+ ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgICAgICBzdHJ1 Y3QgdGhyZWFkX2RhdGEqIHRocmVhZF9kYXRhID0gKHN0cnVjdCB0aHJlYWRfZGF0YSopYXZfbWFs bG9jeihzaXplb2Yoc3RydWN0IHRocmVhZF9kYXRhKSAqIHRocmVhZHMpOwo+ICsgICAgICAgIGlm ICghdGhyZWFkX2RhdGEpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4g Kwo+ICsgICAgICAgIC8vIGFsbG9jIG11dGV4IGFuZCBjb25kaXRpb25zCj4gKyAgICAgICAgcHRo cmVhZF9tdXRleF90IHdvcmtfcG9vbF9tdXRleDsKPiArCj4gKyAgICAgICAgcHRocmVhZF9tdXRl eF90IGNvbW1vbl92aWRlb19tdXRleDsKPiArICAgICAgICBwdGhyZWFkX2NvbmRfdCBjb21tb25f dmlkZW9fY29uZDsKPiArCj4gKyAgICAgICAgcHRocmVhZF9tdXRleF90IGNvbW1vbl9hdWRpb19t dXRleDsKPiArICAgICAgICBwdGhyZWFkX2NvbmRfdCBjb21tb25fYXVkaW9fY29uZDsKPiArCj4g KyAgICAgICAgcHRocmVhZF9tdXRleF90IGNvbW1vbl9zdWJ0aXRsZV9tdXRleDsKPiArICAgICAg ICBwdGhyZWFkX2NvbmRfdCBjb21tb25fc3VidGl0bGVfY29uZDsKPiArCj4gKyAgICAgICAgLy8g aW5pdCBtdXRleCBhbmQgY29uZGl0aW9ucwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IocHRocmVh ZF9tdXRleF9pbml0KCZ3b3JrX3Bvb2xfbXV0ZXgsIE5VTEwpKTsKPiArICAgICAgICBpZiAocmV0 IDwgMCkKPiArICAgICAgICAgICAgZ290byBjbGVhbnVwOwo+ICsKPiArICAgICAgICBpZiAoYy0+ aXNfaW5pdF9zZWN0aW9uX2NvbW1vbl92aWRlbykgewo+ICsgICAgICAgICAgICByZXQgPSBBVkVS Uk9SKHB0aHJlYWRfbXV0ZXhfaW5pdCgmY29tbW9uX3ZpZGVvX211dGV4LCBOVUxMKSk7Cj4gICAg ICAgICAgICAgIGlmIChyZXQgPCAwKQo+IC0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAr ICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKPiArCj4gKyAgICAgICAgICAgIHJldCA9IEFW RVJST1IocHRocmVhZF9jb25kX2luaXQoJmNvbW1vbl92aWRlb19jb25kLCBOVUxMKSk7Cj4gKyAg ICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwo+ ICAgICAgICAgIH0KPiAtICAgICAgICByZXQgPSBvcGVuX2RlbXV4X2Zvcl9jb21wb25lbnQocywg cmVwKTsKPgo+IC0gICAgICAgIGlmIChyZXQpCj4gLSAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g LSAgICAgICAgcmVwLT5zdHJlYW1faW5kZXggPSBzdHJlYW1faW5kZXg7Cj4gLSAgICAgICAgKytz dHJlYW1faW5kZXg7Cj4gLSAgICB9Cj4gKyAgICAgICAgaWYgKGMtPmlzX2luaXRfc2VjdGlvbl9j b21tb25fYXVkaW8pIHsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihwdGhyZWFkX211dGV4 X2luaXQoJmNvbW1vbl9hdWRpb19tdXRleCwgTlVMTCkpOwo+ICsgICAgICAgICAgICBpZiAocmV0 IDwgMCkKPiArICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKPgo+IC0gICAgaWYoYy0+bl9h dWRpb3MpCj4gLSAgICAgICAgYy0+aXNfaW5pdF9zZWN0aW9uX2NvbW1vbl9hdWRpbyA9IGlzX2Nv bW1vbl9pbml0X3NlY3Rpb25fZXhpc3QoYy0+YXVkaW9zLCBjLT5uX2F1ZGlvcyk7Cj4gKyAgICAg ICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9jb25kX2luaXQoJmNvbW1vbl9hdWRpb19jb25k LCBOVUxMKSk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAg Z290byBjbGVhbnVwOwo+ICsgICAgICAgIH0KPgo+IC0gICAgZm9yIChpID0gMDsgaSA8IGMtPm5f YXVkaW9zOyBpKyspIHsKPiAtICAgICAgICByZXAgPSBjLT5hdWRpb3NbaV07Cj4gLSAgICAgICAg aWYgKGkgPiAwICYmIGMtPmlzX2luaXRfc2VjdGlvbl9jb21tb25fYXVkaW8pIHsKPiAtICAgICAg ICAgICAgcmV0ID0gY29weV9pbml0X3NlY3Rpb24ocmVwLCBjLT5hdWRpb3NbMF0pOwo+ICsgICAg ICAgIGlmIChjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX3N1YnRpdGxlKSB7Cj4gKyAgICAgICAg ICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9tdXRleF9pbml0KCZjb21tb25fc3VidGl0bGVfbXV0 ZXgsIE5VTEwpKTsKPiAgICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgICAgICAg ICByZXR1cm4gcmV0Owo+ICsgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwo+ICsKPiArICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUihwdGhyZWFkX2NvbmRfaW5pdCgmY29tbW9uX3N1YnRpdGxl X2NvbmQsIE5VTEwpKTsKPiArICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAg ICAgICBnb3RvIGNsZWFudXA7Cj4gICAgICAgICAgfQo+IC0gICAgICAgIHJldCA9IG9wZW5fZGVt dXhfZm9yX2NvbXBvbmVudChzLCByZXApOwo+Cj4gLSAgICAgICAgaWYgKHJldCkKPiAtICAgICAg ICAgICAgcmV0dXJuIHJldDsKPiAtICAgICAgICByZXAtPnN0cmVhbV9pbmRleCA9IHN0cmVhbV9p bmRleDsKPiAtICAgICAgICArK3N0cmVhbV9pbmRleDsKPiAtICAgIH0KPiArICAgICAgICAvLyBp bml0IHdvcmsgcG9vbCBkYXRhCj4gKyAgICAgICAgc3RydWN0IHdvcmtfcG9vbF9kYXRhKiBjdXJy ZW50X2RhdGEgPSBpbml0X2RhdGE7Cj4KPiAtICAgIGlmIChjLT5uX3N1YnRpdGxlcykKPiAtICAg ICAgICBjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX3N1YnRpdGxlID0gaXNfY29tbW9uX2luaXRf c2VjdGlvbl9leGlzdChjLT5zdWJ0aXRsZXMsIGMtPm5fc3VidGl0bGVzKTsKPiArICAgICAgICBm b3IgKGkgPSAwOyBpIDwgYy0+bl92aWRlb3M7IGkrKykgewo+ICsgICAgICAgICAgICBjcmVhdGVf d29ya19wb29sX2RhdGEocywgc3RyZWFtX2luZGV4LCBjLT52aWRlb3NbaV0sCj4gKyAgICAgICAg ICAgICAgICBjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX3ZpZGVvID8gYy0+dmlkZW9zWzBdIDog TlVMTCwKPiArICAgICAgICAgICAgICAgIGN1cnJlbnRfZGF0YSwgJmNvbW1vbl92aWRlb19tdXRl eCwgJmNvbW1vbl92aWRlb19jb25kKTsKPgo+IC0gICAgZm9yIChpID0gMDsgaSA8IGMtPm5fc3Vi dGl0bGVzOyBpKyspIHsKPiAtICAgICAgICByZXAgPSBjLT5zdWJ0aXRsZXNbaV07Cj4gLSAgICAg ICAgaWYgKGkgPiAwICYmIGMtPmlzX2luaXRfc2VjdGlvbl9jb21tb25fc3VidGl0bGUpIHsKPiAt ICAgICAgICAgICAgcmV0ID0gY29weV9pbml0X3NlY3Rpb24ocmVwLCBjLT5zdWJ0aXRsZXNbMF0p Owo+ICsgICAgICAgICAgICBzdHJlYW1faW5kZXgrKzsKPiArICAgICAgICAgICAgY3VycmVudF9k YXRhKys7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYy0+bl9h dWRpb3M7IGkrKykgewo+ICsgICAgICAgICAgICBjcmVhdGVfd29ya19wb29sX2RhdGEocywgc3Ry ZWFtX2luZGV4LCBjLT5hdWRpb3NbaV0sCj4gKyAgICAgICAgICAgICAgICBjLT5pc19pbml0X3Nl Y3Rpb25fY29tbW9uX2F1ZGlvID8gYy0+YXVkaW9zWzBdIDogTlVMTCwKPiArICAgICAgICAgICAg ICAgIGN1cnJlbnRfZGF0YSwgJmNvbW1vbl9hdWRpb19tdXRleCwgJmNvbW1vbl9hdWRpb19jb25k KTsKPiArCj4gKyAgICAgICAgICAgIHN0cmVhbV9pbmRleCsrOwo+ICsgICAgICAgICAgICBjdXJy ZW50X2RhdGErKzsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBj LT5uX3N1YnRpdGxlczsgaSsrKSB7Cj4gKyAgICAgICAgICAgIGNyZWF0ZV93b3JrX3Bvb2xfZGF0 YShzLCBzdHJlYW1faW5kZXgsIGMtPnN1YnRpdGxlc1tpXSwKPiArICAgICAgICAgICAgICAgIGMt PmlzX2luaXRfc2VjdGlvbl9jb21tb25fc3VidGl0bGUgPyBjLT5zdWJ0aXRsZXNbMF0gOiBOVUxM LAo+ICsgICAgICAgICAgICAgICAgY3VycmVudF9kYXRhLCAmY29tbW9uX3N1YnRpdGxlX211dGV4 LCAmY29tbW9uX3N1YnRpdGxlX2NvbmQpOwo+ICsKPiArICAgICAgICAgICAgc3RyZWFtX2luZGV4 Kys7Cj4gKyAgICAgICAgICAgIGN1cnJlbnRfZGF0YSsrOwo+ICsgICAgICAgIH0KPiArCj4gKyAg ICAgICAgLy8gc3RhcnQgdGhyZWFkcwo+ICsgICAgICAgIHN0cnVjdCB0aHJlYWRfZGF0YSogY3Vy cmVudF90aHJlYWQgPSB0aHJlYWRfZGF0YTsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhy ZWFkczsgaSsrKSB7Cj4gKyAgICAgICAgICAgIHJldCA9IHN0YXJ0X3RocmVhZChjdXJyZW50X3Ro cmVhZCwgaW5pdF9kYXRhLCBuc3RyZWFtcywgJndvcmtfcG9vbF9tdXRleCk7Cj4gICAgICAgICAg ICAgIGlmIChyZXQgPCAwKQo+IC0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAg ICAgICAgICAgIGdvdG8gY2xlYW51cDsKPiArCj4gKyAgICAgICAgICAgIGN1cnJlbnRfdGhyZWFk Kys7Cj4gICAgICAgICAgfQo+IC0gICAgICAgIHJldCA9IG9wZW5fZGVtdXhfZm9yX2NvbXBvbmVu dChzLCByZXApOwo+Cj4gLSAgICAgICAgaWYgKHJldCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiAtICAgICAgICByZXAtPnN0cmVhbV9pbmRleCA9IHN0cmVhbV9pbmRleDsKPiAtICAgICAg ICArK3N0cmVhbV9pbmRleDsKPiArICAgIGNsZWFudXA6Cj4gKyAgICAgICAgLy8gd2UgbmVlZCB0 byBjbGVhbnVwIGV2ZW4gaW4gY2FzZSBvZiBlcnJvcnMsIHNvIHdlIG5lZWQgdG8gc3RvcmUgcmVz dWx0cyBvZiBpbml0LCBydW4gYW5kIGNsZWFudXAKPiArICAgICAgICBpbnQgaW5pdFJlc3VsdCA9 IHJldDsKPiArICAgICAgICBpbnQgcnVuUmVzdWx0ID0gMDsKPiArICAgICAgICBpbnQgY2xlYW51 cFJlc3VsdCA9IDA7Cj4gKwo+ICsgICAgICAgIC8vIGpvaW4gdGhyZWFkcwo+ICsgICAgICAgIGN1 cnJlbnRfdGhyZWFkID0gdGhyZWFkX2RhdGE7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRo cmVhZHM7IGkrKykgewo+ICsgICAgICAgICAgICBpZiAoY3VycmVudF90aHJlYWQtPmlzX3N0YXJ0 ZWQpIHsKPiArICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9qb2luKGN1cnJl bnRfdGhyZWFkLT50aHJlYWQsIE5VTEwpKTsKPiArICAgICAgICAgICAgICAgIGlmIChyZXQgPCAw KQo+ICsgICAgICAgICAgICAgICAgICAgIGNsZWFudXBSZXN1bHQgPSByZXQ7Cj4gKyAgICAgICAg ICAgIH0KPiArICAgICAgICAgICAgY3VycmVudF90aHJlYWQrKzsKPiArICAgICAgICB9Cj4gKwo+ ICsgICAgICAgIC8vIGZpbmFsaXplIHN0cmVhbXMgYW5kIGNvbGxlY3QgcmVzdWx0cwo+ICsgICAg ICAgIGN1cnJlbnRfZGF0YSA9IGluaXRfZGF0YTsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bnN0cmVhbXM7IGkrKykgewo+ICsgICAgICAgICAgICBpZiAoY3VycmVudF9kYXRhLT5yZXN1bHQg PCAwKSB7Cj4gKyAgICAgICAgICAgICAgICAvLyB0aHJlYWQgcmFuIGludG8gZXJyb3I6IGNvbGxl Y3QgcmVzdWx0Cj4gKyAgICAgICAgICAgICAgICBydW5SZXN1bHQgPSBjdXJyZW50X2RhdGEtPnJl c3VsdDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBlbHNlIHsKPiArICAgICAgICAg ICAgICAgIC8vIHRocmVhZCBzdWNjZXNzOiBjcmVhdGUgc3RyZWFtcyBvbiBBVkZvcm1hdENvbnRl eHQKPiArICAgICAgICAgICAgICAgIHJldCA9IGVuZF9vcGVuX2RlbXV4X2Zvcl9jb21wb25lbnQo cywgY3VycmVudF9kYXRhLT5wbHMpOwo+ICsgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApCj4g KyAgICAgICAgICAgICAgICAgICAgcnVuUmVzdWx0ID0gcmV0Owo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgIGN1cnJlbnRfZGF0YSsrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAg Ly8gY2xlYW51cCBtdXRleCBhbmQgY29uZGl0aW9ucwo+ICsgICAgICAgIHJldCA9IEFWRVJST1Io cHRocmVhZF9tdXRleF9kZXN0cm95KCZ3b3JrX3Bvb2xfbXV0ZXgpKTsKPiArICAgICAgICBpZiAo cmV0IDwgMCkKPiArICAgICAgICAgICAgY2xlYW51cFJlc3VsdCA9IHJldDsKPiArCj4gKyAgICAg ICAgaWYgKGMtPmlzX2luaXRfc2VjdGlvbl9jb21tb25fdmlkZW8pIHsKPiArICAgICAgICAgICAg cmV0ID0gQVZFUlJPUihwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmNvbW1vbl92aWRlb19tdXRleCkp Owo+ICsgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgICAgIGNsZWFudXBS ZXN1bHQgPSByZXQ7Cj4gKwo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKHB0aHJlYWRfY29u ZF9kZXN0cm95KCZjb21tb25fdmlkZW9fY29uZCkpOwo+ICsgICAgICAgICAgICBpZiAocmV0IDwg MCkKPiArICAgICAgICAgICAgICAgIGNsZWFudXBSZXN1bHQgPSByZXQ7Cj4gKyAgICAgICAgfQo+ ICsKPiArICAgICAgICBpZiAoYy0+aXNfaW5pdF9zZWN0aW9uX2NvbW1vbl9hdWRpbykgewo+ICsg ICAgICAgICAgICByZXQgPSBBVkVSUk9SKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmY29tbW9uX2F1 ZGlvX211dGV4KSk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAg ICAgY2xlYW51cFJlc3VsdCA9IHJldDsKPiArCj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1Io cHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbW1vbl9hdWRpb19jb25kKSk7Cj4gKyAgICAgICAgICAg IGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgY2xlYW51cFJlc3VsdCA9IHJldDsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX3N1 YnRpdGxlKSB7Cj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9tdXRleF9kZXN0 cm95KCZjb21tb25fc3VidGl0bGVfbXV0ZXgpKTsKPiArICAgICAgICAgICAgaWYgKHJldCA8IDAp Cj4gKyAgICAgICAgICAgICAgICBjbGVhbnVwUmVzdWx0ID0gcmV0Owo+ICsKPiArICAgICAgICAg ICAgcmV0ID0gQVZFUlJPUihwdGhyZWFkX2NvbmRfZGVzdHJveSgmY29tbW9uX3N1YnRpdGxlX2Nv bmQpKTsKPiArICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgICAgICBjbGVh bnVwUmVzdWx0ID0gcmV0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gcmV0dXJuIHJl c3VsdHMgaWYgZXJyb3JzIGhhdmUgb2NjdXJlZCBpbiBvbmUgb2YgdGhlIHBoYXNlcwo+ICsgICAg ICAgIGlmIChpbml0UmVzdWx0IDwgMCkKPiArICAgICAgICAgICAgcmV0dXJuIGluaXRSZXN1bHQ7 Cj4gKwo+ICsgICAgICAgIGlmIChydW5SZXN1bHQgPCAwKQo+ICsgICAgICAgICAgICByZXR1cm4g cnVuUmVzdWx0Owo+ICsKPiArICAgICAgICBpZiAoY2xlYW51cFJlc3VsdCA8IDApCj4gKyAgICAg ICAgICAgIHJldHVybiBjbGVhbnVwUmVzdWx0Owo+ICsKPiArI2VuZGlmCj4gICAgICB9Cj4gKyAg ICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgICAgLyogT3BlbiB0aGUgZGVtdXhlciBmb3IgdmlkZW8g YW5kIGF1ZGlvIGNvbXBvbmVudHMgaWYgYXZhaWxhYmxlICovCj4gKyAgICAgICAgZm9yIChpID0g MDsgaSA8IGMtPm5fdmlkZW9zOyBpKyspIHsKPiArICAgICAgICAgICAgcmVwID0gYy0+dmlkZW9z W2ldOwo+ICsgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYy0+aXNfaW5pdF9zZWN0aW9uX2NvbW1v bl92aWRlbykgewo+ICsgICAgICAgICAgICAgICAgcmV0ID0gY29weV9pbml0X3NlY3Rpb24ocmVw LCBjLT52aWRlb3NbMF0pOwo+ICsgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAg ICByZXQgPSBvcGVuX2RlbXV4X2Zvcl9jb21wb25lbnQocywgcmVwKTsKPgo+IC0gICAgaWYgKCFz dHJlYW1faW5kZXgpCj4gLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAg ICAgICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAg ICAgICAgICByZXAtPnN0cmVhbV9pbmRleCA9IHN0cmVhbV9pbmRleDsKPiArICAgICAgICAgICAg KytzdHJlYW1faW5kZXg7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBmb3IgKGkgPSAwOyBp IDwgYy0+bl9hdWRpb3M7IGkrKykgewo+ICsgICAgICAgICAgICByZXAgPSBjLT5hdWRpb3NbaV07 Cj4gKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX2F1 ZGlvKSB7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBjb3B5X2luaXRfc2VjdGlvbihyZXAsIGMt PmF1ZGlvc1swXSk7Cj4gKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIHJl dCA9IG9wZW5fZGVtdXhfZm9yX2NvbXBvbmVudChzLCByZXApOwo+ICsKPiArICAgICAgICAgICAg aWYgKHJldCkKPiArICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgICAgIHJl cC0+c3RyZWFtX2luZGV4ID0gc3RyZWFtX2luZGV4Owo+ICsgICAgICAgICAgICArK3N0cmVhbV9p bmRleDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjLT5uX3N1 YnRpdGxlczsgaSsrKSB7Cj4gKyAgICAgICAgICAgIHJlcCA9IGMtPnN1YnRpdGxlc1tpXTsKPiAr ICAgICAgICAgICAgaWYgKGkgPiAwICYmIGMtPmlzX2luaXRfc2VjdGlvbl9jb21tb25fc3VidGl0 bGUpIHsKPiArICAgICAgICAgICAgICAgIHJldCA9IGNvcHlfaW5pdF9zZWN0aW9uKHJlcCwgYy0+ c3VidGl0bGVzWzBdKTsKPiArICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAg cmV0ID0gb3Blbl9kZW11eF9mb3JfY29tcG9uZW50KHMsIHJlcCk7Cj4gKwo+ICsgICAgICAgICAg ICBpZiAocmV0KQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAg cmVwLT5zdHJlYW1faW5kZXggPSBzdHJlYW1faW5kZXg7Cj4gKyAgICAgICAgICAgICsrc3RyZWFt X2luZGV4Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKCFzdHJlYW1faW5kZXgpCj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgfQo+Cj4gICAg ICAvKiBDcmVhdGUgYSBwcm9ncmFtICovCj4gICAgICBwcm9ncmFtID0gYXZfbmV3X3Byb2dyYW0o cywgMCk7Cj4gQEAgLTIzNDksNiArMjY4OCw3IEBAIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBkYXNo X29wdGlvbnNbXSA9IHsKPiAgICAgICAgICB7LnN0ciA9ICJhYWMsbTRhLG00cyxtNHYsbW92LG1w NCx3ZWJtLHRzIn0sCj4gICAgICAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxBR1N9LAo+ICAgICAg eyAiY2VuY19kZWNyeXB0aW9uX2tleSIsICJNZWRpYSBkZWNyeXB0aW9uIGtleSAoaGV4KSIsIE9G RlNFVChjZW5jX2RlY3J5cHRpb25fa2V5KSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5V TEx9LCBJTlRfTUlOLCBJTlRfTUFYLCAuZmxhZ3MgPSBGTEFHUyB9LAo+ICsgICAgeyAiaW5pdF90 aHJlYWRzIiwgIk51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBE QVNIIHN0cmVhbSIsIE9GRlNFVChpbml0X3RocmVhZHMpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0 ID0gMH0sIDAsIDY0LCBGTEFHUyB9LAo+ICAgICAge05VTEx9Cj4gIH07Cj4KPiAtLQo+IDIuMzEu MS53aW5kb3dzLjEKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4K PiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2 ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFp bGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJv dmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0 ICJ1bnN1YnNjcmliZSIuCg==