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 D172F40316 for ; Sun, 21 Aug 2022 04:11:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EE88068B9AA; Sun, 21 Aug 2022 07:11:00 +0300 (EEST) Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9FEEC68B44B for ; Sun, 21 Aug 2022 07:10:54 +0300 (EEST) Received: by mail-oi1-f173.google.com with SMTP id w196so8805275oiw.10 for ; Sat, 20 Aug 2022 21:10:54 -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=QdLxZrjSttBslwaj4s+EFTEZYuHjJe8633l8IzHpml0=; b=CXH3mBHVjMQ05GZ/s9bvzWxeQbI3rUnNoHUe3pR4B5Y9IPuD53ztiZfMdUBgLwSF0L D9VuiTVfclNtvCglSgjE11MX6i+PdtW5TPc0ZGp0F9CTo4TdnLKI07sIpt+UtYEFyCXN NYBLbsrL/0q1bxMNMvdTBr+8pbr2gZCbY9MoD+MsYgHTsd8qFDCfMVb6M+fcxeaaRh1s 4x7UTvOWQ6qq5i7DHNgVMEPdb31hv1WYXS1mDPY8YyjWtlw4xKi4qJgQaZyHJyGvtodn oRYHBby5Rp6nqRvVGadiQQ1Rmwlif4nnvEw3clQ86jbnIGtIj5XQ5m9nDWbw1boAhfdC G/mA== 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=QdLxZrjSttBslwaj4s+EFTEZYuHjJe8633l8IzHpml0=; b=6FzZrnBvip9ZQskdReny6ArJVSb+dhUSQ2kk1MNJpXoDyGE61rLIPbF4p8mxEgTZ45 H32qlKv4RSmDw/POHY45xRVL11duz/6cOtKcRjqgfxRNcDqPZ2vnvYNQLL40RwLq06EH /oEgwCoQFgKyGYCCNM7ykRAFGWs9MvORZSLdfkV1mKy5QUNZONbWv3aP2XWrOM0LyYvX mytnsR3yr9U3peihNqvMkwFxRHR1fcV7P8OZY6amWh8n53ePCQM2RSy90j0pUf/IR2da FcvpnYaQHmajerAA0GCbQ1j+yVKs42Xo/vgO8wmSx2rHGu0drofTjEKs4JBbuKOQxJ5W 10OA== X-Gm-Message-State: ACgBeo2ayngEMqPdT2CQAggvoPYzbQ0AfacM6Uvu3+0INQks5uWubm8N xnyoe3cXR0HxUA02RAUdJbqEc+lyCN7xILtw1hUJAKq+Vgo4YA== X-Google-Smtp-Source: AA6agR63Z9EgXaOrPyWJ3Jycg2IDdO0y3QR+n0GV5ISgJR5dduSteI8g9o00HaaMM4MhtGQCbbqGXpgvlaVM0v8NJY8= X-Received: by 2002:a05:6808:1641:b0:345:4f32:b30a with SMTP id az1-20020a056808164100b003454f32b30amr1101293oib.189.1661055052412; Sat, 20 Aug 2022 21:10:52 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Steven Liu Date: Sun, 21 Aug 2022 12:10:18 +0800 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH 1/1] 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: THVrYXMgRmVsbGVjaG5lciA8THVrYXMuRmVsbGVjaG5lckBnbXgubmV0PiDkuo4yMDIy5bm0OOac iDIx5pel5ZGo5pelIDA1OjU05YaZ6YGT77yaCj4KPiBUcnlpbmcgd2l0aCBpbmxpbmUgUEFUQ0gg c2luY2UgYXR0YWNoZWQgZmlsZSB3YXMgbm90IHNob3dpbmcgdXAuLi4KPgo+IC0tLQo+Cj4gRnJv bTogTHVrYXMgRmVsbGVjaG5lciA8bHVrYXMuZmVsbGVjaG5lckBnbXgubmV0Pgo+IFN1YmplY3Q6 IFtQQVRDSCAxLzFdIGxhdmYvZGFzaGRlYzogTXVsdGl0aHJlYWRlZCBEQVNIIGluaXRpYWxpemF0 aW9uCj4KPiBJbml0aWFsaXppbmcgREFTSCBzdHJlYW1zIGlzIGN1cnJlbnRseSBzbG93LCBiZWNh dXNlIGVhY2ggaW5kaXZpZHVhbCBzdHJlYW0gaXMgb3BlbmVkIGFuZCBwcm9iZWQgc2VxdWVudGlh bGx5LiBXaXRoIERBU0ggc3RyZWFtcyBvZnRlbiBoYXZpbmcgc29tZXdoZXJlIGJldHdlZW4gMTAt MjAgc3RyZWFtcywgdGhpcyBjYW4gZWFzaWx5IHRha2UgdXAgdG8gaGFsZiBhIG1pbnV0ZS4gVGhp cyBwYXRjaCBhZGRzIGFuICJpbml0LXRocmVhZHMiIG9wdGlvbiwgc3BlY2lmeWluZyB0aGUgbWF4 IG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZS4gTXVsdGlwbGUgd29ya2VyIHRocmVhZHMgYXJlIHNw dW4gdXAgdG8gbWFzc2l2ZWx5IGJyaW5nIGRvd24gaW5pdCB0aW1lcy4KPiAtLS0KPiAgbGliYXZm b3JtYXQvZGFzaGRlYy5jIHwgNDIxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMzc1IGluc2VydGlvbnMoKyksIDQ2IGRlbGV0aW9u cygtKQo+Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2Rhc2hkZWMuYyBiL2xpYmF2Zm9ybWF0 L2Rhc2hkZWMuYwo+IGluZGV4IDYzYmY3ZTk2YTUuLjY5YTZjMmJhNzkgMTAwNjQ0Cj4gLS0tIGEv bGliYXZmb3JtYXQvZGFzaGRlYy5jCj4gKysrIGIvbGliYXZmb3JtYXQvZGFzaGRlYy5jCj4gQEAg LTI0LDYgKzI0LDcgQEAKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiAgI2luY2x1ZGUg ImxpYmF2dXRpbC90aW1lLmgiCj4gICNpbmNsdWRlICJsaWJhdnV0aWwvcGFyc2V1dGlscy5oIgo+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL3RocmVhZC5oIgo+ICAjaW5jbHVkZSAiaW50ZXJuYWwuaCIK PiAgI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKPiAgI2luY2x1ZGUgImRhc2guaCIKPiBAQCAt MTUyLDYgKzE1Myw4IEBAIHR5cGVkZWYgc3RydWN0IERBU0hDb250ZXh0IHsKPiAgICAgIGludCBt YXhfdXJsX3NpemU7Cj4gICAgICBjaGFyICpjZW5jX2RlY3J5cHRpb25fa2V5Owo+Cj4gKyAgICBp bnQgaW5pdF90aHJlYWRzOwo+ICsKPiAgICAgIC8qIEZsYWdzIGZvciBpbml0IHNlY3Rpb24qLwo+ ICAgICAgaW50IGlzX2luaXRfc2VjdGlvbl9jb21tb25fdmlkZW87Cj4gICAgICBpbnQgaXNfaW5p dF9zZWN0aW9uX2NvbW1vbl9hdWRpbzsKPiBAQCAtMTkxOCwyMiArMTkyMSw0MCBAQCBmYWlsOgo+ ICAgICAgcmV0dXJuIHJldDsKPiAgfQo+Cj4gLXN0YXRpYyBpbnQgb3Blbl9kZW11eF9mb3JfY29t cG9uZW50KEFWRm9ybWF0Q29udGV4dCAqcywgc3RydWN0IHJlcHJlc2VudGF0aW9uICpwbHMpCj4g K3N0YXRpYyBpbnQgb3Blbl9kZW11eF9mb3JfY29tcG9uZW50KEFWRm9ybWF0Q29udGV4dCogcywg c3RydWN0IHJlcHJlc2VudGF0aW9uKiBwbHMpCj4gK3sKPiArICAgIGludCByZXQgPSAwOwo+ICsK PiArICAgIHJldCA9IGJlZ2luX29wZW5fZGVtdXhfZm9yX2NvbXBvbmVudChzLCBwbHMpOwo+ICsg ICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXQgPSBl bmRfb3Blbl9kZW11eF9mb3JfY29tcG9uZW50KHMsIHBscyk7Cj4gKwo+ICsgICAgcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBiZWdpbl9vcGVuX2RlbXV4X2Zvcl9jb21wb25lbnQo QVZGb3JtYXRDb250ZXh0KiBzLCBzdHJ1Y3QgcmVwcmVzZW50YXRpb24qIHBscykKPiAgewo+ICAg ICAgaW50IHJldCA9IDA7Cj4gLSAgICBpbnQgaTsKPgo+ICAgICAgcGxzLT5wYXJlbnQgPSBzOwo+ IC0gICAgcGxzLT5jdXJfc2VxX25vICA9IGNhbGNfY3VyX3NlZ19ubyhzLCBwbHMpOwo+ICsgICAg cGxzLT5jdXJfc2VxX25vID0gY2FsY19jdXJfc2VnX25vKHMsIHBscyk7Cj4KPiAgICAgIGlmICgh cGxzLT5sYXN0X3NlcV9ubykgewo+ICAgICAgICAgIHBscy0+bGFzdF9zZXFfbm8gPSBjYWxjX21h eF9zZWdfbm8ocGxzLCBzLT5wcml2X2RhdGEpOwo+ICAgICAgfQo+Cj4gICAgICByZXQgPSByZW9w ZW5fZGVtdXhfZm9yX2NvbXBvbmVudChzLCBwbHMpOwo+IC0gICAgaWYgKHJldCA8IDApIHsKPiAt ICAgICAgICBnb3RvIGZhaWw7Cj4gLSAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBlbmRfb3Blbl9kZW11eF9mb3JfY29tcG9uZW50KEFWRm9ybWF0Q29u dGV4dCogcywgc3RydWN0IHJlcHJlc2VudGF0aW9uKiBwbHMpCj4gK3sKPiArICAgIGludCByZXQg PSAwOwo+ICsgICAgaW50IGk7Cj4gKwo+ICAgICAgZm9yIChpID0gMDsgaSA8IHBscy0+Y3R4LT5u Yl9zdHJlYW1zOyBpKyspIHsKPiAgICAgICAgICBBVlN0cmVhbSAqc3QgPSBhdmZvcm1hdF9uZXdf c3RyZWFtKHMsIE5VTEwpOwo+ICAgICAgICAgIEFWU3RyZWFtICppc3QgPSBwbHMtPmN0eC0+c3Ry ZWFtc1tpXTsKPiBAQCAtMjAxNSw2ICsyMDM2LDEzMSBAQCBzdGF0aWMgdm9pZCBtb3ZlX21ldGFk YXRhKEFWU3RyZWFtICpzdCwgY29uc3QgY2hhciAqa2V5LCBjaGFyICoqdmFsdWUpCj4gICAgICB9 Cj4gIH0KPgo+ICtzdHJ1Y3Qgd29ya19wb29sX2RhdGEKPiArewo+ICsgICAgQVZGb3JtYXRDb250 ZXh0KiBjdHg7Cj4gKyAgICBzdHJ1Y3QgcmVwcmVzZW50YXRpb24qIHBsczsKPiArICAgIHN0cnVj dCByZXByZXNlbnRhdGlvbiogY29tbW9uX3BsczsKPiArICAgIHB0aHJlYWRfbXV0ZXhfdCogY29t bW9uX211dGV4Owo+ICsgICAgcHRocmVhZF9jb25kX3QqIGNvbW1vbl9jb25kaXRpb247ClNob3Vs ZCBhZGQgI2lmIEhBVkVfVEhSRUFEUyB0byBjaGVjayBpZiB0aGUgcHRocmVhZCBzdXBwb3J0ZWQu Cj4gKyAgICBpbnQgaXNfY29tbW9uOwo+ICsgICAgaW50IGlzX3N0YXJ0ZWQ7Cj4gKyAgICBpbnQg cmVzdWx0Owo+ICt9Owo+ICsKPiArc3RydWN0IHRocmVhZF9kYXRhCj4gK3sKPiArICAgIHB0aHJl YWRfdCB0aHJlYWQ7Cj4gKyAgICBwdGhyZWFkX211dGV4X3QqIG11dGV4Owo+ICsgICAgc3RydWN0 IHdvcmtfcG9vbF9kYXRhKiB3b3JrX3Bvb2w7Cj4gKyAgICBpbnQgd29ya19wb29sX3NpemU7Cj4g KyAgICBpbnQgaXNfc3RhcnRlZDsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkICp3b3JrZXJfdGhy ZWFkKHZvaWQgKnB0cikKPiArewo+ICsgICAgaW50IHJldCA9IDA7Cj4gKyAgICBpbnQgaTsKPiAr ICAgIHN0cnVjdCB0aHJlYWRfZGF0YSogdGhyZWFkX2RhdGEgPSAoc3RydWN0IHRocmVhZF9kYXRh KilwdHI7Cj4gKyAgICBzdHJ1Y3Qgd29ya19wb29sX2RhdGEqIHdvcmtfcG9vbCA9IE5VTEw7Cj4g KyAgICBzdHJ1Y3Qgd29ya19wb29sX2RhdGEqIGRhdGEgPSBOVUxMOwo+ICsgICAgZm9yICg7Oykg ewo+ICsKPiArICAgICAgICAvLyBnZXQgbmV4dCB3b3JrIGl0ZW0KPiArICAgICAgICBwdGhyZWFk X211dGV4X2xvY2sodGhyZWFkX2RhdGEtPm11dGV4KTsKPiArICAgICAgICBkYXRhID0gTlVMTDsK PiArICAgICAgICB3b3JrX3Bvb2wgPSB0aHJlYWRfZGF0YS0+d29ya19wb29sOwo+ICsgICAgICAg IGZvciAoaSA9IDA7IGkgPCB0aHJlYWRfZGF0YS0+d29ya19wb29sX3NpemU7IGkrKykgewo+ICsg ICAgICAgICAgICBpZiAoIXdvcmtfcG9vbC0+aXNfc3RhcnRlZCkgewo+ICsgICAgICAgICAgICAg ICAgZGF0YSA9IHdvcmtfcG9vbDsKPiArICAgICAgICAgICAgICAgIGRhdGEtPmlzX3N0YXJ0ZWQg PSAxOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgd29ya19wb29sKys7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHB0aHJlYWRfbXV0ZXhf dW5sb2NrKHRocmVhZF9kYXRhLT5tdXRleCk7Cj4gKwo+ICsgICAgICAgIGlmICghZGF0YSkgewo+ ICsgICAgICAgICAgICAvLyBubyBtb3JlIHdvcmsgdG8gZG8KPiArICAgICAgICAgICAgcmV0dXJu IE5VTEw7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvLyBpZiB3ZSBhcmUgY29tbW9uIHNl Y3Rpb24gcHJvdmlkZXIsIGluaXQgYW5kIHNpZ25hbAo+ICsgICAgICAgIGlmIChkYXRhLT5pc19j b21tb24pIHsKPiArICAgICAgICAgICAgZGF0YS0+cGxzLT5wYXJlbnQgPSBkYXRhLT5jdHg7Cj4g KyAgICAgICAgICAgIHJldCA9IHVwZGF0ZV9pbml0X3NlY3Rpb24oZGF0YS0+cGxzKTsKPiArICAg ICAgICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9z aWduYWwoZGF0YS0+Y29tbW9uX2NvbmRpdGlvbik7Cj4gKyAgICAgICAgICAgICAgICBnb3RvIGVu ZDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAg ICByZXQgPSBBVkVSUk9SKHB0aHJlYWRfY29uZF9zaWduYWwoZGF0YS0+Y29tbW9uX2NvbmRpdGlv bikpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gaWYgd2UgZGVwZW5kIG9uIGNvbW1v biBzZWN0aW9uIHByb3ZpZGVyLCB3YWl0IGZvciBzaWduYWwgYW5kIGNvcHkKPiArICAgICAgICBp ZiAoZGF0YS0+Y29tbW9uX3Bscykgewo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKHB0aHJl YWRfY29uZF93YWl0KGRhdGEtPmNvbW1vbl9jb25kaXRpb24sIGRhdGEtPmNvbW1vbl9tdXRleCkp Owo+ICsgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgICAgIGdvdG8gZW5k Owo+ICsKPiArICAgICAgICAgICAgaWYgKCFkYXRhLT5jb21tb25fcGxzLT5pbml0X3NlY19idWYp IHsKPiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAgICAgICAgICAgcmV0ID0g QVZFUlJPUihFRkFVTFQpOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICByZXQg PSBjb3B5X2luaXRfc2VjdGlvbihkYXRhLT5wbHMsIGRhdGEtPmNvbW1vbl9wbHMpOwo+ICsgICAg ICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgcmV0ID0gYmVnaW5fb3Blbl9kZW11eF9mb3JfY29tcG9uZW50 KGRhdGEtPmN0eCwgZGF0YS0+cGxzKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAg ICAgICAgZ290byBlbmQ7Cj4gKwo+ICsgICAgZW5kOgo+ICsgICAgICAgIGRhdGEtPnJlc3VsdCA9 IHJldDsKPiArICAgIH0KPiArCj4gKwo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGNyZWF0ZV93b3JrX3Bvb2xfZGF0YShBVkZvcm1hdENvbnRleHQqIGN0eCwgaW50 IHN0cmVhbV9pbmRleCwKPiArICAgIHN0cnVjdCByZXByZXNlbnRhdGlvbiogcGxzLCBzdHJ1Y3Qg cmVwcmVzZW50YXRpb24qIGNvbW1vbl9wbHMsCj4gKyAgICBzdHJ1Y3Qgd29ya19wb29sX2RhdGEq IGluaXRfZGF0YSwgcHRocmVhZF9tdXRleF90KiBjb21tb25fbXV0ZXgsCj4gKyAgICBwdGhyZWFk X2NvbmRfdCogY29tbW9uX2NvbmRpdGlvbikKPiArewo+ICsgICAgaW5pdF9kYXRhLT5jdHggPSBj dHg7Cj4gKyAgICBpbml0X2RhdGEtPnBscyA9IHBsczsKPiArICAgIGluaXRfZGF0YS0+cGxzLT5z dHJlYW1faW5kZXggPSBzdHJlYW1faW5kZXg7Cj4gKyAgICBpbml0X2RhdGEtPmNvbW1vbl9jb25k aXRpb24gPSBjb21tb25fY29uZGl0aW9uOwo+ICsgICAgaW5pdF9kYXRhLT5jb21tb25fbXV0ZXgg PSBjb21tb25fbXV0ZXg7Cj4gKyAgICBpbml0X2RhdGEtPnJlc3VsdCA9IC0xOwo+ICsKPiArICAg IGlmIChwbHMgPT0gY29tbW9uX3Bscykgewo+ICsgICAgICAgIGluaXRfZGF0YS0+aXNfY29tbW9u ID0gMTsKPiArICAgIH0KPiArICAgIGVsc2UgaWYgKGNvbW1vbl9wbHMpIHsKPiArICAgICAgICBp bml0X2RhdGEtPmNvbW1vbl9wbHMgPSBjb21tb25fcGxzOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHN0YXJ0X3RocmVhZChzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRocmVhZF9kYXRhLAo+ ICsgICAgc3RydWN0IHdvcmtfcG9vbF9kYXRhICp3b3JrX3Bvb2wsIGludCB3b3JrX3Bvb2xfc2l6 ZSwgcHRocmVhZF9tdXRleF90ICptdXRleCkKPiArewo+ICsgICAgaW50IHJldDsKPiArCj4gKyAg ICB0aHJlYWRfZGF0YS0+bXV0ZXggPSBtdXRleDsKPiArICAgIHRocmVhZF9kYXRhLT53b3JrX3Bv b2wgPSB3b3JrX3Bvb2w7Cj4gKyAgICB0aHJlYWRfZGF0YS0+d29ya19wb29sX3NpemUgPSB3b3Jr X3Bvb2xfc2l6ZTsKPiArCj4gKyAgICByZXQgPSBBVkVSUk9SKHB0aHJlYWRfY3JlYXRlKCZ0aHJl YWRfZGF0YS0+dGhyZWFkLCBOVUxMLCB3b3JrZXJfdGhyZWFkLCAodm9pZCopdGhyZWFkX2RhdGEp KTsKPiArICAgIGlmIChyZXQgPT0gMCkKPiArICAgICAgICB0aHJlYWRfZGF0YS0+aXNfc3RhcnRl ZCA9IDE7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgc3RhdGljIGludCBkYXNo X3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKPiAgewo+ICAgICAgREFTSENvbnRleHQg KmMgPSBzLT5wcml2X2RhdGE7Cj4gQEAgLTIwNDAsNjMgKzIxODYsMjQ1IEBAIHN0YXRpYyBpbnQg ZGFzaF9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCj4gICAgICAgICAgYXZfZGljdF9z ZXQoJmMtPmF2aW9fb3B0cywgInNlZWthYmxlIiwgIjAiLCAwKTsKPiAgICAgIH0KPgo+IC0gICAg aWYoYy0+bl92aWRlb3MpCj4gKyAgICBpZiAoYy0+bl92aWRlb3MpCj4gICAgICAgICAgYy0+aXNf aW5pdF9zZWN0aW9uX2NvbW1vbl92aWRlbyA9IGlzX2NvbW1vbl9pbml0X3NlY3Rpb25fZXhpc3Qo Yy0+dmlkZW9zLCBjLT5uX3ZpZGVvcyk7Cj4KPiAtICAgIC8qIE9wZW4gdGhlIGRlbXV4ZXIgZm9y IHZpZGVvIGFuZCBhdWRpbyBjb21wb25lbnRzIGlmIGF2YWlsYWJsZSAqLwo+IC0gICAgZm9yIChp ID0gMDsgaSA8IGMtPm5fdmlkZW9zOyBpKyspIHsKPiAtICAgICAgICByZXAgPSBjLT52aWRlb3Nb aV07Cj4gLSAgICAgICAgaWYgKGkgPiAwICYmIGMtPmlzX2luaXRfc2VjdGlvbl9jb21tb25fdmlk ZW8pIHsKPiAtICAgICAgICAgICAgcmV0ID0gY29weV9pbml0X3NlY3Rpb24ocmVwLCBjLT52aWRl b3NbMF0pOwo+ICsgICAgaWYgKGMtPm5fYXVkaW9zKQo+ICsgICAgICAgIGMtPmlzX2luaXRfc2Vj dGlvbl9jb21tb25fYXVkaW8gPSBpc19jb21tb25faW5pdF9zZWN0aW9uX2V4aXN0KGMtPmF1ZGlv cywgYy0+bl9hdWRpb3MpOwo+ICsKPiArICAgIGlmIChjLT5uX3N1YnRpdGxlcykKPiArICAgICAg ICBjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX3N1YnRpdGxlID0gaXNfY29tbW9uX2luaXRfc2Vj dGlvbl9leGlzdChjLT5zdWJ0aXRsZXMsIGMtPm5fc3VidGl0bGVzKTsKPiArCj4gKyAgICBpbnQg bnN0cmVhbXMgPSBjLT5uX3ZpZGVvcyArIGMtPm5fYXVkaW9zICsgYy0+bl9zdWJ0aXRsZXM7Cj4g KyAgICBpbnQgdGhyZWFkcyA9IEZGTUlOKG5zdHJlYW1zLCBjLT5pbml0X3RocmVhZHMpOwo+ICsK PiArICAgIGlmICh0aHJlYWRzID4gMSkKPiArICAgIHsKPiArICAgICAgICAvLyBhbGxvYyBkYXRh Cj4gKyAgICAgICAgc3RydWN0IHdvcmtfcG9vbF9kYXRhKiBpbml0X2RhdGEgPSAoc3RydWN0IHdv cmtfcG9vbF9kYXRhKilhdl9tYWxsb2N6KHNpemVvZihzdHJ1Y3Qgd29ya19wb29sX2RhdGEpICog bnN0cmVhbXMpOwo+ICsgICAgICAgIGlmICghaW5pdF9kYXRhKQo+ICsgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgICAgICBzdHJ1Y3QgdGhyZWFkX2RhdGEqIHRo cmVhZF9kYXRhID0gKHN0cnVjdCB0aHJlYWRfZGF0YSopYXZfbWFsbG9jeihzaXplb2Yoc3RydWN0 IHRocmVhZF9kYXRhKSAqIHRocmVhZHMpOwo+ICsgICAgICAgIGlmICghdGhyZWFkX2RhdGEpCj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgICAgIC8vIGFs bG9jIG11dGV4IGFuZCBjb25kaXRpb25zCj4gKyAgICAgICAgcHRocmVhZF9tdXRleF90IHdvcmtf cG9vbF9tdXRleDsKPiArCj4gKyAgICAgICAgcHRocmVhZF9tdXRleF90IGNvbW1vbl92aWRlb19t dXRleDsKPiArICAgICAgICBwdGhyZWFkX2NvbmRfdCBjb21tb25fdmlkZW9fY29uZDsKPiArCj4g KyAgICAgICAgcHRocmVhZF9tdXRleF90IGNvbW1vbl9hdWRpb19tdXRleDsKPiArICAgICAgICBw dGhyZWFkX2NvbmRfdCBjb21tb25fYXVkaW9fY29uZDsKPiArCj4gKyAgICAgICAgcHRocmVhZF9t dXRleF90IGNvbW1vbl9zdWJ0aXRsZV9tdXRleDsKPiArICAgICAgICBwdGhyZWFkX2NvbmRfdCBj b21tb25fc3VidGl0bGVfY29uZDsKPiArCj4gKyAgICAgICAgLy8gaW5pdCBtdXRleCBhbmQgY29u ZGl0aW9ucwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9tdXRleF9pbml0KCZ3b3Jr X3Bvb2xfbXV0ZXgsIE5VTEwpKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAg ICAgZ290byBjbGVhbnVwOwo+ICsKPiArICAgICAgICBpZiAoYy0+aXNfaW5pdF9zZWN0aW9uX2Nv bW1vbl92aWRlbykgewo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKHB0aHJlYWRfbXV0ZXhf aW5pdCgmY29tbW9uX3ZpZGVvX211dGV4LCBOVUxMKSk7Cj4gICAgICAgICAgICAgIGlmIChyZXQg PCAwKQo+IC0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgICAgIGdv dG8gY2xlYW51cDsKPiArCj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9jb25k X2luaXQoJmNvbW1vbl92aWRlb19jb25kLCBOVUxMKSk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQg PCAwKQo+ICsgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwo+ICAgICAgICAgIH0KPiAtICAg ICAgICByZXQgPSBvcGVuX2RlbXV4X2Zvcl9jb21wb25lbnQocywgcmVwKTsKPgo+IC0gICAgICAg IGlmIChyZXQpCj4gLSAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLSAgICAgICAgcmVwLT5zdHJl YW1faW5kZXggPSBzdHJlYW1faW5kZXg7Cj4gLSAgICAgICAgKytzdHJlYW1faW5kZXg7Cj4gLSAg ICB9Cj4gKyAgICAgICAgaWYgKGMtPmlzX2luaXRfc2VjdGlvbl9jb21tb25fYXVkaW8pIHsKPiAr ICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihwdGhyZWFkX211dGV4X2luaXQoJmNvbW1vbl9hdWRp b19tdXRleCwgTlVMTCkpOwo+ICsgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAg ICAgICAgIGdvdG8gY2xlYW51cDsKPgo+IC0gICAgaWYoYy0+bl9hdWRpb3MpCj4gLSAgICAgICAg Yy0+aXNfaW5pdF9zZWN0aW9uX2NvbW1vbl9hdWRpbyA9IGlzX2NvbW1vbl9pbml0X3NlY3Rpb25f ZXhpc3QoYy0+YXVkaW9zLCBjLT5uX2F1ZGlvcyk7Cj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJS T1IocHRocmVhZF9jb25kX2luaXQoJmNvbW1vbl9hdWRpb19jb25kLCBOVUxMKSk7Cj4gKyAgICAg ICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwo+ICsg ICAgICAgIH0KPgo+IC0gICAgZm9yIChpID0gMDsgaSA8IGMtPm5fYXVkaW9zOyBpKyspIHsKPiAt ICAgICAgICByZXAgPSBjLT5hdWRpb3NbaV07Cj4gLSAgICAgICAgaWYgKGkgPiAwICYmIGMtPmlz X2luaXRfc2VjdGlvbl9jb21tb25fYXVkaW8pIHsKPiAtICAgICAgICAgICAgcmV0ID0gY29weV9p bml0X3NlY3Rpb24ocmVwLCBjLT5hdWRpb3NbMF0pOwo+ICsgICAgICAgIGlmIChjLT5pc19pbml0 X3NlY3Rpb25fY29tbW9uX3N1YnRpdGxlKSB7Cj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1Io cHRocmVhZF9tdXRleF9pbml0KCZjb21tb25fc3VidGl0bGVfbXV0ZXgsIE5VTEwpKTsKPiAgICAg ICAgICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsg ICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwo+ICsKPiArICAgICAgICAgICAgcmV0ID0gQVZF UlJPUihwdGhyZWFkX2NvbmRfaW5pdCgmY29tbW9uX3N1YnRpdGxlX2NvbmQsIE5VTEwpKTsKPiAr ICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7 Cj4gICAgICAgICAgfQo+IC0gICAgICAgIHJldCA9IG9wZW5fZGVtdXhfZm9yX2NvbXBvbmVudChz LCByZXApOwo+Cj4gLSAgICAgICAgaWYgKHJldCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsK PiAtICAgICAgICByZXAtPnN0cmVhbV9pbmRleCA9IHN0cmVhbV9pbmRleDsKPiAtICAgICAgICAr K3N0cmVhbV9pbmRleDsKPiAtICAgIH0KPiArICAgICAgICAvLyBpbml0IHdvcmsgcG9vbCBkYXRh Cj4gKyAgICAgICAgc3RydWN0IHdvcmtfcG9vbF9kYXRhKiBjdXJyZW50X2RhdGEgPSBpbml0X2Rh dGE7Cj4KPiAtICAgIGlmIChjLT5uX3N1YnRpdGxlcykKPiAtICAgICAgICBjLT5pc19pbml0X3Nl Y3Rpb25fY29tbW9uX3N1YnRpdGxlID0gaXNfY29tbW9uX2luaXRfc2VjdGlvbl9leGlzdChjLT5z dWJ0aXRsZXMsIGMtPm5fc3VidGl0bGVzKTsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYy0+ bl92aWRlb3M7IGkrKykgewo+ICsgICAgICAgICAgICBjcmVhdGVfd29ya19wb29sX2RhdGEocywg c3RyZWFtX2luZGV4LCBjLT52aWRlb3NbaV0sCj4gKyAgICAgICAgICAgICAgICBjLT5pc19pbml0 X3NlY3Rpb25fY29tbW9uX3ZpZGVvID8gYy0+dmlkZW9zWzBdIDogTlVMTCwKPiArICAgICAgICAg ICAgICAgIGN1cnJlbnRfZGF0YSwgJmNvbW1vbl92aWRlb19tdXRleCwgJmNvbW1vbl92aWRlb19j b25kKTsKPgo+IC0gICAgZm9yIChpID0gMDsgaSA8IGMtPm5fc3VidGl0bGVzOyBpKyspIHsKPiAt ICAgICAgICByZXAgPSBjLT5zdWJ0aXRsZXNbaV07Cj4gLSAgICAgICAgaWYgKGkgPiAwICYmIGMt PmlzX2luaXRfc2VjdGlvbl9jb21tb25fc3VidGl0bGUpIHsKPiAtICAgICAgICAgICAgcmV0ID0g Y29weV9pbml0X3NlY3Rpb24ocmVwLCBjLT5zdWJ0aXRsZXNbMF0pOwo+ICsgICAgICAgICAgICBz dHJlYW1faW5kZXgrKzsKPiArICAgICAgICAgICAgY3VycmVudF9kYXRhKys7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYy0+bl9hdWRpb3M7IGkrKykgewo+ICsg ICAgICAgICAgICBjcmVhdGVfd29ya19wb29sX2RhdGEocywgc3RyZWFtX2luZGV4LCBjLT5hdWRp b3NbaV0sCj4gKyAgICAgICAgICAgICAgICBjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX2F1ZGlv ID8gYy0+YXVkaW9zWzBdIDogTlVMTCwKPiArICAgICAgICAgICAgICAgIGN1cnJlbnRfZGF0YSwg JmNvbW1vbl9hdWRpb19tdXRleCwgJmNvbW1vbl9hdWRpb19jb25kKTsKPiArCj4gKyAgICAgICAg ICAgIHN0cmVhbV9pbmRleCsrOwo+ICsgICAgICAgICAgICBjdXJyZW50X2RhdGErKzsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjLT5uX3N1YnRpdGxlczsgaSsr KSB7Cj4gKyAgICAgICAgICAgIGNyZWF0ZV93b3JrX3Bvb2xfZGF0YShzLCBzdHJlYW1faW5kZXgs IGMtPnN1YnRpdGxlc1tpXSwKPiArICAgICAgICAgICAgICAgIGMtPmlzX2luaXRfc2VjdGlvbl9j b21tb25fc3VidGl0bGUgPyBjLT5zdWJ0aXRsZXNbMF0gOiBOVUxMLAo+ICsgICAgICAgICAgICAg ICAgY3VycmVudF9kYXRhLCAmY29tbW9uX3N1YnRpdGxlX211dGV4LCAmY29tbW9uX3N1YnRpdGxl X2NvbmQpOwo+ICsKPiArICAgICAgICAgICAgc3RyZWFtX2luZGV4Kys7Cj4gKyAgICAgICAgICAg IGN1cnJlbnRfZGF0YSsrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gc3RhcnQgdGhy ZWFkcwo+ICsgICAgICAgIHN0cnVjdCB0aHJlYWRfZGF0YSogY3VycmVudF90aHJlYWQgPSB0aHJl YWRfZGF0YTsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhyZWFkczsgaSsrKSB7Cj4gKyAg ICAgICAgICAgIHJldCA9IHN0YXJ0X3RocmVhZChjdXJyZW50X3RocmVhZCwgaW5pdF9kYXRhLCBu c3RyZWFtcywgJndvcmtfcG9vbF9tdXRleCk7Cj4gICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ IC0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgICAgIGdvdG8gY2xl YW51cDsKPiArCj4gKyAgICAgICAgICAgIGN1cnJlbnRfdGhyZWFkKys7Cj4gICAgICAgICAgfQo+ IC0gICAgICAgIHJldCA9IG9wZW5fZGVtdXhfZm9yX2NvbXBvbmVudChzLCByZXApOwo+Cj4gLSAg ICAgICAgaWYgKHJldCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgICAgICByZXAt PnN0cmVhbV9pbmRleCA9IHN0cmVhbV9pbmRleDsKPiAtICAgICAgICArK3N0cmVhbV9pbmRleDsK PiArICAgIGNsZWFudXA6Cj4gKyAgICAgICAgLy8gd2UgbmVlZCB0byBjbGVhbnVwIGV2ZW4gaW4g Y2FzZSBvZiBlcnJvcnMsIHNvIHdlIG5lZWQgdG8gc3RvcmUgcmVzdWx0cyBvZiBpbml0LCBydW4g YW5kIGNsZWFudXAKPiArICAgICAgICBpbnQgaW5pdFJlc3VsdCA9IHJldDsKPiArICAgICAgICBp bnQgcnVuUmVzdWx0ID0gMDsKPiArICAgICAgICBpbnQgY2xlYW51cFJlc3VsdCA9IDA7Cj4gKwo+ ICsgICAgICAgIC8vIGpvaW4gdGhyZWFkcwo+ICsgICAgICAgIGN1cnJlbnRfdGhyZWFkID0gdGhy ZWFkX2RhdGE7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRocmVhZHM7IGkrKykgewo+ICsg ICAgICAgICAgICBpZiAoY3VycmVudF90aHJlYWQtPmlzX3N0YXJ0ZWQpIHsKPiArICAgICAgICAg ICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9qb2luKGN1cnJlbnRfdGhyZWFkLT50aHJlYWQs IE5VTEwpKTsKPiArICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAg ICAgICAgIGNsZWFudXBSZXN1bHQgPSByZXQ7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAg ICAgY3VycmVudF90aHJlYWQrKzsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8vIGZpbmFs aXplIHN0cmVhbXMgYW5kIGNvbGxlY3QgcmVzdWx0cwo+ICsgICAgICAgIGN1cnJlbnRfZGF0YSA9 IGluaXRfZGF0YTsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnN0cmVhbXM7IGkrKykgewo+ ICsgICAgICAgICAgICBpZiAoY3VycmVudF9kYXRhLT5yZXN1bHQgPCAwKSB7Cj4gKyAgICAgICAg ICAgICAgICAvLyB0aHJlYWQgcmFuIGludG8gZXJyb3I6IGNvbGxlY3QgcmVzdWx0Cj4gKyAgICAg ICAgICAgICAgICBydW5SZXN1bHQgPSBjdXJyZW50X2RhdGEtPnJlc3VsdDsKPiArICAgICAgICAg ICAgfQo+ICsgICAgICAgICAgICBlbHNlIHsKPiArICAgICAgICAgICAgICAgIC8vIHRocmVhZCBz dWNjZXNzOiBjcmVhdGUgc3RyZWFtcyBvbiBBVkZvcm1hdENvbnRleHQKPiArICAgICAgICAgICAg ICAgIHJldCA9IGVuZF9vcGVuX2RlbXV4X2Zvcl9jb21wb25lbnQocywgY3VycmVudF9kYXRhLT5w bHMpOwo+ICsgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgICAgICAg ICAgcnVuUmVzdWx0ID0gcmV0Owo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGN1cnJl bnRfZGF0YSsrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gY2xlYW51cCBtdXRleCBh bmQgY29uZGl0aW9ucwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9tdXRleF9kZXN0 cm95KCZ3b3JrX3Bvb2xfbXV0ZXgpKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAg ICAgICAgY2xlYW51cFJlc3VsdCA9IHJldDsKPiArCj4gKyAgICAgICAgaWYgKGMtPmlzX2luaXRf c2VjdGlvbl9jb21tb25fdmlkZW8pIHsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihwdGhy ZWFkX211dGV4X2Rlc3Ryb3koJmNvbW1vbl92aWRlb19tdXRleCkpOwo+ICsgICAgICAgICAgICBp ZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgICAgIGNsZWFudXBSZXN1bHQgPSByZXQ7Cj4gKwo+ ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKHB0aHJlYWRfY29uZF9kZXN0cm95KCZjb21tb25f dmlkZW9fY29uZCkpOwo+ICsgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAg ICAgIGNsZWFudXBSZXN1bHQgPSByZXQ7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAo Yy0+aXNfaW5pdF9zZWN0aW9uX2NvbW1vbl9hdWRpbykgewo+ICsgICAgICAgICAgICByZXQgPSBB VkVSUk9SKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmY29tbW9uX2F1ZGlvX211dGV4KSk7Cj4gKyAg ICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgY2xlYW51cFJlc3VsdCA9 IHJldDsKPiArCj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9jb25kX2Rlc3Ry b3koJmNvbW1vbl9hdWRpb19jb25kKSk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsg ICAgICAgICAgICAgICAgY2xlYW51cFJlc3VsdCA9IHJldDsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIGlmIChjLT5pc19pbml0X3NlY3Rpb25fY29tbW9uX3N1YnRpdGxlKSB7Cj4gKyAgICAg ICAgICAgIHJldCA9IEFWRVJST1IocHRocmVhZF9tdXRleF9kZXN0cm95KCZjb21tb25fc3VidGl0 bGVfbXV0ZXgpKTsKPiArICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgICAg ICBjbGVhbnVwUmVzdWx0ID0gcmV0Owo+ICsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihw dGhyZWFkX2NvbmRfZGVzdHJveSgmY29tbW9uX3N1YnRpdGxlX2NvbmQpKTsKPiArICAgICAgICAg ICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgICAgICBjbGVhbnVwUmVzdWx0ID0gcmV0Owo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gcmV0dXJuIHJlc3VsdHMgaWYgZXJyb3JzIGhh dmUgb2NjdXJlZCBpbiBvbmUgb2YgdGhlIHBoYXNlcwo+ICsgICAgICAgIGlmIChpbml0UmVzdWx0 IDwgMCkKPiArICAgICAgICAgICAgcmV0dXJuIGluaXRSZXN1bHQ7Cj4gKwo+ICsgICAgICAgIGlm IChydW5SZXN1bHQgPCAwKQo+ICsgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0Owo+ICsKPiAr ICAgICAgICBpZiAoY2xlYW51cFJlc3VsdCA8IDApCj4gKyAgICAgICAgICAgIHJldHVybiBjbGVh bnVwUmVzdWx0Owo+ICAgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICAgIC8qIE9w ZW4gdGhlIGRlbXV4ZXIgZm9yIHZpZGVvIGFuZCBhdWRpbyBjb21wb25lbnRzIGlmIGF2YWlsYWJs ZSAqLwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjLT5uX3ZpZGVvczsgaSsrKSB7Cj4gKyAg ICAgICAgICAgIHJlcCA9IGMtPnZpZGVvc1tpXTsKPiArICAgICAgICAgICAgaWYgKGkgPiAwICYm IGMtPmlzX2luaXRfc2VjdGlvbl9jb21tb25fdmlkZW8pIHsKPiArICAgICAgICAgICAgICAgIHJl dCA9IGNvcHlfaW5pdF9zZWN0aW9uKHJlcCwgYy0+dmlkZW9zWzBdKTsKPiArICAgICAgICAgICAg ICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAg ICAgICAgICAgIH0KPiArICAgICAgICAgICAgcmV0ID0gb3Blbl9kZW11eF9mb3JfY29tcG9uZW50 KHMsIHJlcCk7Cj4KPiAtICAgIGlmICghc3RyZWFtX2luZGV4KQo+IC0gICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICBpZiAocmV0KQo+ICsgICAgICAgICAg ICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgcmVwLT5zdHJlYW1faW5kZXggPSBzdHJl YW1faW5kZXg7Cj4gKyAgICAgICAgICAgICsrc3RyZWFtX2luZGV4Owo+ICsgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGMtPm5fYXVkaW9zOyBpKyspIHsKPiArICAgICAg ICAgICAgcmVwID0gYy0+YXVkaW9zW2ldOwo+ICsgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYy0+ aXNfaW5pdF9zZWN0aW9uX2NvbW1vbl9hdWRpbykgewo+ICsgICAgICAgICAgICAgICAgcmV0ID0g Y29weV9pbml0X3NlY3Rpb24ocmVwLCBjLT5hdWRpb3NbMF0pOwo+ICsgICAgICAgICAgICAgICAg aWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAg ICAgICAgfQo+ICsgICAgICAgICAgICByZXQgPSBvcGVuX2RlbXV4X2Zvcl9jb21wb25lbnQocywg cmVwKTsKPiArCj4gKyAgICAgICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ICsgICAgICAgICAgICByZXAtPnN0cmVhbV9pbmRleCA9IHN0cmVhbV9pbmRleDsK PiArICAgICAgICAgICAgKytzdHJlYW1faW5kZXg7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgYy0+bl9zdWJ0aXRsZXM7IGkrKykgewo+ICsgICAgICAgICAgICBy ZXAgPSBjLT5zdWJ0aXRsZXNbaV07Cj4gKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBjLT5pc19p bml0X3NlY3Rpb25fY29tbW9uX3N1YnRpdGxlKSB7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBj b3B5X2luaXRfc2VjdGlvbihyZXAsIGMtPnN1YnRpdGxlc1swXSk7Cj4gKyAgICAgICAgICAgICAg ICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAg ICAgICAgICB9Cj4gKyAgICAgICAgICAgIHJldCA9IG9wZW5fZGVtdXhfZm9yX2NvbXBvbmVudChz LCByZXApOwo+ICsKPiArICAgICAgICAgICAgaWYgKHJldCkKPiArICAgICAgICAgICAgICAgIHJl dHVybiByZXQ7Cj4gKyAgICAgICAgICAgIHJlcC0+c3RyZWFtX2luZGV4ID0gc3RyZWFtX2luZGV4 Owo+ICsgICAgICAgICAgICArK3N0cmVhbV9pbmRleDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAg ICAgIGlmICghc3RyZWFtX2luZGV4KQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKPiArICAgIH0KPgo+ICAgICAgLyogQ3JlYXRlIGEgcHJvZ3JhbSAqLwo+ICAgICAg cHJvZ3JhbSA9IGF2X25ld19wcm9ncmFtKHMsIDApOwo+IEBAIC0yMzQ5LDYgKzI2NzcsNyBAQCBz dGF0aWMgY29uc3QgQVZPcHRpb24gZGFzaF9vcHRpb25zW10gPSB7Cj4gICAgICAgICAgey5zdHIg PSAiYWFjLG00YSxtNHMsbTR2LG1vdixtcDQsd2VibSx0cyJ9LAo+ICAgICAgICAgIElOVF9NSU4s IElOVF9NQVgsIEZMQUdTfSwKPiAgICAgIHsgImNlbmNfZGVjcnlwdGlvbl9rZXkiLCAiTWVkaWEg ZGVjcnlwdGlvbiBrZXkgKGhleCkiLCBPRkZTRVQoY2VuY19kZWNyeXB0aW9uX2tleSksIEFWX09Q VF9UWVBFX1NUUklORywgey5zdHIgPSBOVUxMfSwgSU5UX01JTiwgSU5UX01BWCwgLmZsYWdzID0g RkxBR1MgfSwKPiArICAgIHsgImluaXRfdGhyZWFkcyIsICJOdW1iZXIgb2YgdGhyZWFkcyB0byB1 c2UgZm9yIGluaXRpYWxpemluZyB0aGUgREFTSCBzdHJlYW0iLCBPRkZTRVQoaW5pdF90aHJlYWRz KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDB9LCAwLCA2NCwgRkxBR1MgfSwKPiAgICAgIHtO VUxMfQo+ICB9Owo+Cj4gLS0KPiAyLjMxLjEud2luZG93cy4xCj4KPgo+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxt YW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh Ym92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==