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 040524B304 for ; Thu, 4 Jul 2024 15:50:47 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2305A68DA43; Thu, 4 Jul 2024 18:50:45 +0300 (EEST) Received: from mail.hhi.fraunhofer.de (mail.HHI.FRAUNHOFER.DE [193.174.67.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F1DC468DA38 for ; Thu, 4 Jul 2024 18:50:37 +0300 (EEST) Received: from 172.16.0.107 by mail.hhi.fraunhofer.de (Tls12, Aes256, Sha384, DiffieHellmanEllipticKey384); Thu, 04 Jul 2024 15:50:36 GMT Received: from mxsrv2.fe.hhi.de (172.16.0.105) by mxsrv4.fe.hhi.de (172.16.0.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.1544.11; Thu, 4 Jul 2024 17:50:34 +0200 Received: from mxsrv2.fe.hhi.de ([fe80::a6ac:c6a3:8cbe:4317]) by mxsrv2.fe.hhi.de ([fe80::a6ac:c6a3:8cbe:4317%6]) with mapi id 15.02.1544.011; Thu, 4 Jul 2024 17:50:34 +0200 From: "Helmrich, Christian" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH v3] avfilter: add XPSNR filter Thread-Index: AQHazii+EV4Tk/syIkKRaVnlPolveQ== Date: Thu, 4 Jul 2024 15:50:34 +0000 Message-ID: <9aab9416fa7c4aec9b49cc6a9461280b@hhi.fraunhofer.de> Accept-Language: de-DE, en-US Content-Language: de-DE X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.22.100] Content-Type: multipart/mixed; boundary="_004_9aab9416fa7c4aec9b49cc6a9461280bhhifraunhoferde_" MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH v3] avfilter: add XPSNR filter 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --_004_9aab9416fa7c4aec9b49cc6a9461280bhhifraunhoferde_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This is a continuation of last year's version of this filter patch, see als= o https://ffmpeg.org/pipermail/ffmpeg-devel/2023-January/305517.html It includes a fix in one of the stride variables and some cleanup in order to adhere even more to the FFmpeg coding guidelines. Christian Helmrich Fraunhofer HHI --_004_9aab9416fa7c4aec9b49cc6a9461280bhhifraunhoferde_ Content-Type: text/plain; name="v3-0001-avfilter-add-XPSNR-filter.patch" Content-Description: v3-0001-avfilter-add-XPSNR-filter.patch Content-Disposition: attachment; filename="v3-0001-avfilter-add-XPSNR-filter.patch"; size=43717; creation-date="Thu, 04 Jul 2024 15:50:20 GMT"; modification-date="Thu, 04 Jul 2024 15:50:20 GMT" Content-Transfer-Encoding: base64 RnJvbSA2YTAyMGZjOTI3OWFiMmZkNjZlNmRkODU5NmY1NjZlZTY1NzhjYjM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gSGVsbXJpY2ggPGNocmlzdGlhbi5oZWxtcmlj aEBoaGkuZnJhdW5ob2Zlci5kZT4KRGF0ZTogVGh1LCA0IEp1bCAyMDI0IDE3OjEwOjI5ICswMjAw ClN1YmplY3Q6IFtQQVRDSCB2M10gYXZmaWx0ZXI6IGFkZCBYUFNOUiBmaWx0ZXIKCkFkZCBYUFNO UiB2aWRlbyBmaWx0ZXIKUmVnaXN0ZXIgbmV3IGZpbHRlciB4cHNuci4KClNpZ25lZC1vZmYtYnk6 IENocmlzdGlhbiBIZWxtcmljaCA8Y2hyaXN0aWFuLmhlbG1yaWNoQGhoaS5mcmF1bmhvZmVyLmRl PgotLS0KIGRvYy9maWx0ZXJzLnRleGkgICAgICAgICAgICAgICAgfCAgNjggKysrCiBsaWJhdmZp bHRlci9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKIGxpYmF2ZmlsdGVyL2FsbGZpbHRlcnMu YyAgICAgICAgfCAgIDEgKwogbGliYXZmaWx0ZXIvdmZfeHBzbnIuYyAgICAgICAgICB8IDczOSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZmaWx0ZXIveDg2L01ha2VmaWxl ICAgICAgICB8ICAgMSArCiBsaWJhdmZpbHRlci94ODYvdmZfeHBzbnJfaW5pdC5jIHwgIDQzICsr CiBsaWJhdmZpbHRlci94cHNuci5oICAgICAgICAgICAgIHwgIDQ4ICsrKwogNyBmaWxlcyBjaGFu Z2VkLCA5MDEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3Zm X3hwc25yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci94ODYvdmZfeHBzbnJfaW5p dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIveHBzbnIuaAoKZGlmZiAtLWdpdCBh L2RvYy9maWx0ZXJzLnRleGkgYi9kb2MvZmlsdGVycy50ZXhpCmluZGV4IGM5YzRmN2NmNmIuLmM5 ZDEyNTQzNTIgMTAwNjQ0Ci0tLSBhL2RvYy9maWx0ZXJzLnRleGkKKysrIGIvZG9jL2ZpbHRlcnMu dGV4aQpAQCAtMTk5NDQsNiArMTk5NDQsNyBAQCBwc2V1ZG9jb2xvcj0iJ2lmKGJldHdlZW4odmFs LHltYXgsYW1heCksbGVycCh5bWluLHltYXgsKHZhbC15bWF4KS8oYW1heC15bWF4KSksLQogQGVu ZCBleGFtcGxlCiBAZW5kIGl0ZW1pemUKCitAYW5jaG9ye3BzbnJ9CiBAc2VjdGlvbiBwc25yCgog T2J0YWluIHRoZSBhdmVyYWdlLCBtYXhpbXVtIGFuZCBtaW5pbXVtIFBTTlIgKFBlYWsgU2lnbmFs IHRvIE5vaXNlCkBAIC0yNjAzMiw2ICsyNjAzMyw3MyBAQCBtaW5pbXVtIHZhbHVlcywgYW5kIEBj b2RlezF9IG1heGltdW0gdmFsdWVzLgoKIFRoaXMgZmlsdGVyIHN1cHBvcnRzIGFsbCBhYm92ZSBv cHRpb25zIGFzIEByZWZ7Y29tbWFuZHN9LCBleGNsdWRpbmcgb3B0aW9uIEBjb2Rle2lucHV0c30u CgorQGFuY2hvcnt4cHNucn0KK0BzZWN0aW9uIHhwc25yCisKK09idGFpbiB0aGUgYXZlcmFnZSAo YWNyb3NzIGFsbCBpbnB1dCBmcmFtZXMpIGFuZCBtaW5pbXVtIChhY3Jvc3MgYWxsIGNvbG9yIHBs YW5lIGF2ZXJhZ2VzKQorZVh0ZW5kZWQgUGVyY2VwdHVhbGx5IHdlaWdodGVkIHBlYWsgU2lnbmFs LXRvLU5vaXNlIFJhdGlvIChYUFNOUikgYmV0d2VlbiB0d28gaW5wdXQgdmlkZW9zLgorCitUaGUg WFBTTlIgaXMgYSBsb3ctY29tcGxleGl0eSBwc3ljaG92aXN1YWxseSBtb3RpdmF0ZWQgZGlzdG9y dGlvbiBtZWFzdXJlbWVudCBhbGdvcml0aG0gZm9yCithc3Nlc3NpbmcgdGhlIGRpZmZlcmVuY2Ug YmV0d2VlbiB0d28gdmlkZW8gc3RyZWFtcyBvciBpbWFnZXMuIFRoaXMgaXMgZXNwZWNpYWxseSB1 c2VmdWwgZm9yCitvYmplY3RpdmVseSBxdWFudGlmeWluZyB0aGUgZGlzdG9ydGlvbnMgY2F1c2Vk IGJ5IHZpZGVvIGFuZCBpbWFnZSBjb2RlY3MsIGFzIGFuIGFsdGVybmF0aXZlCit0byBhIGZvcm1h bCBzdWJqZWN0aXZlIHRlc3QuIFRoZSBsb2dhcml0aG1pYyBYUFNOUiBvdXRwdXQgdmFsdWVzIGFy ZSBpbiBhIHNpbWlsYXIgcmFuZ2UgYXMKK3Rob3NlIG9mIHRyYWRpdGlvbmFsIEByZWZ7cHNucn0g YXNzZXNzbWVudHMgYnV0IGJldHRlciByZWZsZWN0IGh1bWFuIGltcHJlc3Npb25zIG9mIHZpc3Vh bAorY29kaW5nIHF1YWxpdHkuIE1vcmUgZGV0YWlscyBvbiB0aGUgWFBTTlIgbWVhc3VyZSwgd2hp Y2ggZXNzZW50aWFsbHkgcmVwcmVzZW50cyBhIGJsb2Nrd2lzZQord2VpZ2h0ZWQgdmFyaWFudCBv ZiB0aGUgUFNOUiBtZWFzdXJlLCBjYW4gYmUgZm91bmQgaW4gdGhlIGZvbGxvd2luZyBmcmVlbHkg YXZhaWxhYmxlIHBhcGVyczoKKworQGl0ZW1pemUKK0BpdGVtCitDLiBSLiBIZWxtcmljaCwgTS4g U2lla21hbm4sIFMuIEJlY2tlciwgUy4gQm9zc2UsIEQuIE1hcnBlLCBhbmQgVC4gV2llZ2FuZCwg IlhQU05SOiBBCitMb3ctQ29tcGxleGl0eSBFeHRlbnNpb24gb2YgdGhlIFBlcmNlcHR1YWxseSBX ZWlnaHRlZCBQZWFrIFNpZ25hbC10by1Ob2lzZSBSYXRpbyBmb3IKK0hpZ2gtUmVzb2x1dGlvbiBW aWRlbyBRdWFsaXR5IEFzc2Vzc21lbnQsIiBpbiBQcm9jLiBJRUVFIEludC4gQ29uZi4gQWNvdXN0 aWNzLCBTcGVlY2gsCitTaWcuIFByb2Nlc3MuIChJQ0FTU1ApLCB2aXJ0Li9vbmxpbmUsIE1heSAy MDIwLiBAdXJse3d3dy5lY29kaXMuZGUveHBzbnIuaHRtfQorCitAaXRlbQorQy4gUi4gSGVsbXJp Y2gsIFMuIEJvc3NlLCBILiBTY2h3YXJ6LCBELiBNYXJwZSwgYW5kIFQuIFdpZWdhbmQsICJBIFN0 dWR5IG9mIHRoZQorRXh0ZW5kZWQgUGVyY2VwdHVhbGx5IFdlaWdodGVkIFBlYWsgU2lnbmFsLXRv LU5vaXNlIFJhdGlvIChYUFNOUikgZm9yIFZpZGVvIENvbXByZXNzaW9uCit3aXRoIERpZmZlcmVu dCBSZXNvbHV0aW9ucyBhbmQgQml0IERlcHRocywiIElUVSBKb3VybmFsOiBJQ1QgRGlzY292ZXJp ZXMsIHZvbC4gMywgbm8uCisxLCBwcC4gNjUgLSA3MiwgTWF5IDIwMjAuIEB1cmx7aHR0cDovL2hh bmRsZS5pdHUuaW50LzExLjEwMDIvcHViLzgxNTNkNzhiLWVufQorQGVuZCBpdGVtaXplCisKK1do ZW4gcHVibGlzaGluZyB0aGUgcmVzdWx0cyBvZiBYUFNOUiBhc3Nlc3NtZW50cyBvYnRhaW5lZCB1 c2luZywgZS5nLiwgdGhpcyBGRm1wZWcgZmlsdGVyLCBhCityZWZlcmVuY2UgdG8gdGhlIGFib3Zl IHBhcGVycyBhcyBhIG1lYW5zIG9mIGRvY3VtZW50YXRpb24gaXMgc3Ryb25nbHkgZW5jb3VyYWdl ZC4gVGhlIGZpbHRlcgorcmVxdWlyZXMgdHdvIGlucHV0IHZpZGVvcy4gVGhlIGZpcnN0IGlucHV0 IGlzIGNvbnNpZGVyZWQgYSAodXN1YWxseSBub3QgZGlzdG9ydGVkKSByZWZlcmVuY2UKK3NvdXJj ZSBhbmQgaXMgcGFzc2VkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LCB3aGVyZWFzIHRoZSBzZWNv bmQgaW5wdXQgaXMgYSAoZGlzdG9ydGVkKSB0ZXN0CitzaWduYWwuIEV4Y2VwdCBmb3IgdGhlIGJp dCBkZXB0aCwgdGhlc2UgdHdvIHZpZGVvIGlucHV0cyBtdXN0IGhhdmUgdGhlIHNhbWUgcGl4ZWwg Zm9ybWF0LiBJbgorYWRkaXRpb24sIGZvciBiZXN0IHBlcmZvcm1hbmNlLCBib3RoIGNvbXBhcmVk IGlucHV0IHZpZGVvcyBzaG91bGQgYmUgaW4gWUNiQ3IgY29sb3IgZm9ybWF0LgorCitUaGUgb2J0 YWluZWQgb3ZlcmFsbCBYUFNOUiB2YWx1ZXMgbWVudGlvbmVkIGFib3ZlIGFyZSBwcmludGVkIHRo cm91Z2ggdGhlIGxvZ2dpbmcgc3lzdGVtLiBJbgorY2FzZSBvZiBpbnB1dCB3aXRoIG11bHRpcGxl IGNvbG9yIHBsYW5lcywgd2Ugc3VnZ2VzdCByZXBvcnRpbmcgb2YgdGhlIG1pbmltdW0gWFBTTlIg YXZlcmFnZS4KKworVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIsIHdoaWNoIGJlaGF2ZXMgbGlrZSB0 aGUgb25lIGZvciB0aGUgQHJlZntwc25yfSBmaWx0ZXIsIGlzIGFjY2VwdGVkOgorCitAdGFibGUg QG9wdGlvbgorQGl0ZW0gc3RhdHNfZmlsZSwgZgorSWYgc3BlY2lmaWVkLCB0aGUgZmlsdGVyIHdp bGwgdXNlIHRoZSBuYW1lZCBmaWxlIHRvIHNhdmUgdGhlIFhQU05SIHZhbHVlIG9mIGVhY2ggaW5k aXZpZHVhbAorZnJhbWUgYW5kIGNvbG9yIHBsYW5lLiBXaGVuIHRoZSBmaWxlIG5hbWUgZXF1YWxz ICItIiwgdGhhdCBkYXRhIGlzIHNlbnQgdG8gc3RhbmRhcmQgb3V0cHV0LgorQGVuZCB0YWJsZQor CitUaGlzIGZpbHRlciBhbHNvIHN1cHBvcnRzIHRoZSBAcmVme2ZyYW1lc3luY30gb3B0aW9ucy4K KworQHN1YnNlY3Rpb24gRXhhbXBsZXMKK0BpdGVtaXplCitAaXRlbQorWFBTTlIgYW5hbHlzaXMg b2YgdHdvIDEwODBwIEhEIHZpZGVvcywgcmVmX3NvdXJjZS55dXYgYW5kIHRlc3RfdmlkZW8ueXV2 LCBib3RoIGF0IDI0IGZyYW1lcworcGVyIHNlY29uZCwgd2l0aCBjb2xvciBmb3JtYXQgNDoyOjAs IGJpdCBkZXB0aCA4LCBhbmQgb3V0cHV0IG9mIGEgbG9nZmlsZSBuYW1lZCAieHBzbnIubG9nIjoK K0BleGFtcGxlCitmZm1wZWcgLXMgMTkyMHgxMDgwIC1mcmFtZXJhdGUgMjQgLXBpeF9mbXQgeXV2 NDIwcCAtaSByZWZfc291cmNlLnl1diAtcyAxOTIweDEwODAgLWZyYW1lcmF0ZQorMjQgLXBpeF9m bXQgeXV2NDIwcCAtaSB0ZXN0X3ZpZGVvLnl1diAtbGF2ZmkgeHBzbnI9InN0YXRzX2ZpbGU9eHBz bnIubG9nIiAtZiBudWxsIC0KK0BlbmQgZXhhbXBsZQorCitAaXRlbQorWFBTTlIgYW5hbHlzaXMg b2YgdHdvIDIxNjBwIFVIRCB2aWRlb3MsIHJlZl9zb3VyY2UueXV2IHdpdGggYml0IGRlcHRoIDgg YW5kIHRlc3RfdmlkZW8ueXV2Cit3aXRoIGJpdCBkZXB0aCAxMCwgYm90aCBhdCA2MCBmcmFtZXMg cGVyIHNlY29uZCB3aXRoIGNvbG9yIGZvcm1hdCA0OjI6MCwgbm8gbG9nZmlsZSBvdXRwdXQ6CitA ZXhhbXBsZQorZmZtcGVnIC1zIDM4NDB4MjE2MCAtZnJhbWVyYXRlIDYwIC1waXhfZm10IHl1djQy MHAgLWkgcmVmX3NvdXJjZS55dXYgLXMgMzg0MHgyMTYwIC1mcmFtZXJhdGUKKzYwIC1waXhfZm10 IHl1djQyMHAxMGxlIC1pIHRlc3RfdmlkZW8ueXV2IC1sYXZmaSB4cHNucj0ic3RhdHNfZmlsZT0t IiAtZiBudWxsIC0KK0BlbmQgZXhhbXBsZQorQGVuZCBpdGVtaXplCisKIEBhbmNob3J7eHN0YWNr fQogQHNlY3Rpb24geHN0YWNrCiBTdGFjayB2aWRlbyBpbnB1dHMgaW50byBjdXN0b20gbGF5b3V0 LgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9NYWtlZmls ZQppbmRleCA2MzA4OGU5Mjg2Li5hYzZhOGQ1NzgzIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9N YWtlZmlsZQorKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQpAQCAtNTY0LDYgKzU2NCw3IEBAIE9C SlMtJChDT05GSUdfWEZBREVfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHZmX3hmYWRlLm8K IE9CSlMtJChDT05GSUdfWEZBREVfT1BFTkNMX0ZJTFRFUikgICAgICAgICAgICs9IHZmX3hmYWRl X29wZW5jbC5vIG9wZW5jbC5vIG9wZW5jbC94ZmFkZS5vCiBPQkpTLSQoQ09ORklHX1hGQURFX1ZV TEtBTl9GSUxURVIpICAgICAgICAgICArPSB2Zl94ZmFkZV92dWxrYW4ubyB2dWxrYW4ubyB2dWxr YW5fZmlsdGVyLm8KIE9CSlMtJChDT05GSUdfWE1FRElBTl9GSUxURVIpICAgICAgICAgICAgICAg ICs9IHZmX3htZWRpYW4ubyBmcmFtZXN5bmMubworT0JKUy0kKENPTkZJR19YUFNOUl9GSUxURVIp ICAgICAgICAgICAgICAgICAgKz0gdmZfeHBzbnIubyBmcmFtZXN5bmMubwogT0JKUy0kKENPTkZJ R19YU1RBQ0tfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0gdmZfc3RhY2subyBmcmFtZXN5bmMu bwogT0JKUy0kKENPTkZJR19ZQURJRl9GSUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfeWFk aWYubyB5YWRpZl9jb21tb24ubwogT0JKUy0kKENPTkZJR19ZQURJRl9DVURBX0ZJTFRFUikgICAg ICAgICAgICAgKz0gdmZfeWFkaWZfY3VkYS5vIHZmX3lhZGlmX2N1ZGEucHR4Lm8gXApkaWZmIC0t Z2l0IGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5j CmluZGV4IDYzNjAwZTliNTguLjhlN2Q5MTJjOWYgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL2Fs bGZpbHRlcnMuYworKysgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKQEAgLTUzMiw2ICs1MzIs NyBAQCBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdmZfeGZhZGU7CiBleHRlcm4gY29uc3QgQVZG aWx0ZXIgZmZfdmZfeGZhZGVfb3BlbmNsOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3ZmX3hm YWRlX3Z1bGthbjsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl92Zl94bWVkaWFuOworZXh0ZXJu IGNvbnN0IEFWRmlsdGVyIGZmX3ZmX3hwc25yOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3Zm X3hzdGFjazsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl92Zl95YWRpZjsKIGV4dGVybiBjb25z dCBBVkZpbHRlciBmZl92Zl95YWRpZl9jdWRhOwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmZf eHBzbnIuYyBiL2xpYmF2ZmlsdGVyL3ZmX3hwc25yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uZmZmMWNiMjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVy L3ZmX3hwc25yLmMKQEAgLTAsMCArMSw3MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQg Q2hyaXN0aWFuIFIuIEhlbG1yaWNoCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgQ2hyaXN0aWFuIExl aG1hbm4KKyAqIENvcHlyaWdodCAoYykgMjAyNCBDaHJpc3RpYW4gU3RvZmZlcnMKKyAqCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQ2FsY3Vs YXRlIHRoZSBleHRlbmRlZCBwZXJjZXB0dWFsbHkgd2VpZ2h0ZWQgUFNOUiAoWFBTTlIpIGJldHdl ZW4gdHdvIGlucHV0IHZpZGVvcy4KKyAqCisgKiBBdXRob3JzOiBDaHJpc3RpYW4gSGVsbXJpY2gs IExlaG1hbm4sIGFuZCBTdG9mZmVycywgRnJhdW5ob2ZlciBISEksIEJlcmxpbiwgR2VybWFueQor ICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKKyNpbmNsdWRlICJsaWJhdnV0 aWwvZmlsZV9vcGVuLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgImxp YmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgorI2luY2x1ZGUg ImF2ZmlsdGVyLmgiCisjaW5jbHVkZSAiZHJhd3V0aWxzLmgiCisjaW5jbHVkZSAiZnJhbWVzeW5j LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ4cHNuci5oIgorCisvKiBYUFNO UiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAqLworCit0eXBlZGVmIHN0cnVjdCBYUFNOUkNvbnRleHQg eworICAgIC8qIHJlcXVpcmVkIGJhc2ljIHZhcmlhYmxlcyAqLworICAgIGNvbnN0IEFWQ2xhc3Mg ICAqY2xhc3M7CisgICAgaW50ICAgICAgICAgICAgIGJwcDsgLyogdW5wYWNrZWQgKi8KKyAgICBp bnQgICAgICAgICAgICAgZGVwdGg7IC8qIHBhY2tlZCAqLworICAgIGNoYXIgICAgICAgICAgICBj b21wc1s0XTsKKyAgICBpbnQgICAgICAgICAgICAgbnVtX2NvbXBzOworICAgIHVpbnQ2NF90ICAg ICAgICBudW1fZnJhbWVzXzY0OworICAgIHVuc2lnbmVkICAgICAgICBmcmFtZV9yYXRlOworICAg IEZGRnJhbWVTeW5jICAgICBmczsKKyAgICBpbnQgICAgICAgICAgICAgbGluZV9zaXplc1s0XTsK KyAgICBpbnQgICAgICAgICAgICAgcGxhbmVfaGVpZ2h0WzRdOworICAgIGludCAgICAgICAgICAg ICBwbGFuZV93aWR0aFs0XTsKKyAgICB1aW50OF90ICAgICAgICAgcmdiYV9tYXBbNF07CisgICAg RklMRSAgICAgICAgICAgICpzdGF0c19maWxlOworICAgIGNoYXIgICAgICAgICAgICAqc3RhdHNf ZmlsZV9zdHI7CisgICAgLyogWFBTTlIgc3BlY2lmaWMgdmFyaWFibGVzICovCisgICAgZG91Ymxl ICAgICAgICAgICpzc2VfbHVtYTsKKyAgICBkb3VibGUgICAgICAgICAgKndlaWdodHM7CisgICAg QVZCdWZmZXJSZWYgICAgICpidWZfb3JnICAgWzNdOworICAgIEFWQnVmZmVyUmVmICAgICAqYnVm X29yZ19tMVszXTsKKyAgICBBVkJ1ZmZlclJlZiAgICAgKmJ1Zl9vcmdfbTJbM107CisgICAgQVZC dWZmZXJSZWYgICAgICpidWZfcmVjICAgWzNdOworICAgIHVpbnQ2NF90ICAgICAgICBtYXhfZXJy b3JfNjQ7CisgICAgZG91YmxlICAgICAgICAgIHN1bV93ZGlzdCBbM107CisgICAgZG91YmxlICAg ICAgICAgIHN1bV94cHNuciBbM107CisgICAgaW50ICAgICAgICAgICAgIGFuZF9pc19pbmZbM107 CisgICAgaW50ICAgICAgICAgICAgIGlzX3JnYjsKKyAgICBQU05SRFNQQ29udGV4dCAgZHNwOwor fSBYUFNOUkNvbnRleHQ7CisKKy8qIHJlcXVpcmVkIG1hY3JvIGRlZmluaXRpb25zICovCisKKyNk ZWZpbmUgRkxBR1MgICAgIEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8IEFWX09QVF9GTEFH X1ZJREVPX1BBUkFNCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihYUFNOUkNvbnRleHQsIHgp CisjZGVmaW5lIFhQU05SX0dBTU1BIDIKKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIHhwc25yX29w dGlvbnNbXSA9IHsKKyAgICB7InN0YXRzX2ZpbGUiLCAiU2V0IGZpbGUgd2hlcmUgdG8gc3RvcmUg cGVyLWZyYW1lIFhQU05SIGluZm9ybWF0aW9uIiwgT0ZGU0VUKHN0YXRzX2ZpbGVfc3RyKSwgQVZf T1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAwLCAwLCBGTEFHU30sCisgICAgeyJmIiwg ICAgICAgICAgIlNldCBmaWxlIHdoZXJlIHRvIHN0b3JlIHBlci1mcmFtZSBYUFNOUiBpbmZvcm1h dGlvbiIsIE9GRlNFVChzdGF0c19maWxlX3N0ciksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIg PSBOVUxMfSwgMCwgMCwgRkxBR1N9LAorICAgIHsgTlVMTCB9Cit9OworCitGUkFNRVNZTkNfREVG SU5FX0NMQVNTKHhwc25yLCBYUFNOUkNvbnRleHQsIGZzKTsKKworLyogWFBTTlIgZnVuY3Rpb24g ZGVmaW5pdGlvbnMgKi8KKworc3RhdGljIHVpbnQ2NF90IGhpZ2hkcyhjb25zdCBpbnQgeF9hY3Qs IGNvbnN0IGludCB5X2FjdCwgY29uc3QgaW50IHdfYWN0LCBjb25zdCBpbnQgaF9hY3QsIGNvbnN0 IGludDE2X3QgKm9fbTAsIGNvbnN0IGludCBvKQoreworICAgIHVpbnQ2NF90IHNhX2FjdCA9IDA7 CisKKyAgICBmb3IgKGludCB5ID0geV9hY3Q7IHkgPCBoX2FjdDsgeSArPSAyKSB7CisgICAgICAg IGZvciAoaW50IHggPSB4X2FjdDsgeCA8IHdfYWN0OyB4ICs9IDIpIHsKKyAgICAgICAgICAgIGNv bnN0IGludCBmID0gMTIgKiAoKGludClvX20wWyB5ICAgKm8gKyB4ICBdICsgKGludClvX20wWyB5 ICAgKm8gKyB4KzFdICsgKGludClvX20wWyh5KzEpKm8gKyB4ICBdICsgKGludClvX20wWyh5KzEp Km8gKyB4KzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgIC0gMyAqICgoaW50KW9fbTBbKHkt MSkqbyArIHggIF0gKyAoaW50KW9fbTBbKHktMSkqbyArIHgrMV0gKyAoaW50KW9fbTBbKHkrMikq byArIHggIF0gKyAoaW50KW9fbTBbKHkrMikqbyArIHgrMV0pCisgICAgICAgICAgICAgICAgICAg ICAgICAgLSAzICogKChpbnQpb19tMFsgeSAgICpvICsgeC0xXSArIChpbnQpb19tMFsgeSAgICpv ICsgeCsyXSArIChpbnQpb19tMFsoeSsxKSpvICsgeC0xXSArIChpbnQpb19tMFsoeSsxKSpvICsg eCsyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAtIDIgKiAoKGludClvX20wWyh5LTEpKm8g KyB4LTFdICsgKGludClvX20wWyh5LTEpKm8gKyB4KzJdICsgKGludClvX20wWyh5KzIpKm8gKyB4 LTFdICsgKGludClvX20wWyh5KzIpKm8gKyB4KzJdKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtICgoaW50KW9fbTBbKHktMikqbyArIHgtMV0gKyAoaW50KW9fbTBbKHktMikqbyArIHgg IF0gKyAoaW50KW9fbTBbKHktMikqbyArIHgrMV0gKyAoaW50KW9fbTBbKHktMikqbyArIHgrMl0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGludClvX20wWyh5KzMpKm8gKyB4LTFd ICsgKGludClvX20wWyh5KzMpKm8gKyB4ICBdICsgKGludClvX20wWyh5KzMpKm8gKyB4KzFdICsg KGludClvX20wWyh5KzMpKm8gKyB4KzJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr IChpbnQpb19tMFsoeS0xKSpvICsgeC0yXSArIChpbnQpb19tMFsgeSAgICpvICsgeC0yXSArIChp bnQpb19tMFsoeSsxKSpvICsgeC0yXSArIChpbnQpb19tMFsoeSsyKSpvICsgeC0yXQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKyAoaW50KW9fbTBbKHktMSkqbyArIHgrM10gKyAoaW50 KW9fbTBbIHkgICAqbyArIHgrM10gKyAoaW50KW9fbTBbKHkrMSkqbyArIHgrM10gKyAoaW50KW9f bTBbKHkrMikqbyArIHgrM10pOworICAgICAgICAgICAgc2FfYWN0ICs9ICh1aW50NjRfdCkgYWJz KGYpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzYV9hY3Q7Cit9CisKK3N0YXRpYyB1 aW50NjRfdCBkaWZmMXN0KGNvbnN0IHVpbnQzMl90IHdfYWN0LCBjb25zdCB1aW50MzJfdCBoX2Fj dCwgY29uc3QgaW50MTZfdCAqb19tMCwgaW50MTZfdCAqb19tMSwgY29uc3QgaW50IG8pCit7Cisg ICAgdWludDY0X3QgdGFfYWN0ID0gMDsKKworICAgIGZvciAodWludDMyX3QgeSA9IDA7IHkgPCBo X2FjdDsgeSArPSAyKSB7CisgICAgICAgIGZvciAodWludDMyX3QgeCA9IDA7IHggPCB3X2FjdDsg eCArPSAyKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgdCA9IChpbnQpb19tMFt5Km8gKyB4XSAr IChpbnQpb19tMFt5Km8gKyB4KzFdICsgKGludClvX20wWyh5KzEpKm8gKyB4XSArIChpbnQpb19t MFsoeSsxKSpvICsgeCsxXQorICAgICAgICAgICAgICAgICAgICAgICAtICgoaW50KW9fbTFbeSpv ICsgeF0gKyAoaW50KW9fbTFbeSpvICsgeCsxXSArIChpbnQpb19tMVsoeSsxKSpvICsgeF0gKyAo aW50KW9fbTFbKHkrMSkqbyArIHgrMV0pOworICAgICAgICAgICAgdGFfYWN0ICs9ICh1aW50NjRf dCkgYWJzKHQpOworICAgICAgICAgICAgb19tMVt5Km8gKyB4ICBdID0gb19tMFt5Km8gKyB4ICBd OyAgb19tMVsoeSsxKSpvICsgeCAgXSA9IG9fbTBbKHkrMSkqbyArIHggIF07CisgICAgICAgICAg ICBvX20xW3kqbyArIHgrMV0gPSBvX20wW3kqbyArIHgrMV07ICBvX20xWyh5KzEpKm8gKyB4KzFd ID0gb19tMFsoeSsxKSpvICsgeCsxXTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKHRh X2FjdCAqIFhQU05SX0dBTU1BKTsKK30KKworc3RhdGljIHVpbnQ2NF90IGRpZmYybmQoY29uc3Qg dWludDMyX3Qgd19hY3QsIGNvbnN0IHVpbnQzMl90IGhfYWN0LCBjb25zdCBpbnQxNl90ICpvX20w LCBpbnQxNl90ICpvX20xLCBpbnQxNl90ICpvX20yLCBjb25zdCBpbnQgbykKK3sKKyAgICB1aW50 NjRfdCB0YV9hY3QgPSAwOworCisgICAgZm9yICh1aW50MzJfdCB5ID0gMDsgeSA8IGhfYWN0OyB5 ICs9IDIpIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCB4ID0gMDsgeCA8IHdfYWN0OyB4ICs9IDIp IHsKKyAgICAgICAgICAgIGNvbnN0IGludCB0ID0gKGludClvX20wW3kqbyArIHhdICsgKGludClv X20wW3kqbyArIHgrMV0gKyAoaW50KW9fbTBbKHkrMSkqbyArIHhdICsgKGludClvX20wWyh5KzEp Km8gKyB4KzFdCisgICAgICAgICAgICAgICAgICAgLSAyICogKChpbnQpb19tMVt5Km8gKyB4XSAr IChpbnQpb19tMVt5Km8gKyB4KzFdICsgKGludClvX20xWyh5KzEpKm8gKyB4XSArIChpbnQpb19t MVsoeSsxKSpvICsgeCsxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICsgKGludClvX20yW3kq byArIHhdICsgKGludClvX20yW3kqbyArIHgrMV0gKyAoaW50KW9fbTJbKHkrMSkqbyArIHhdICsg KGludClvX20yWyh5KzEpKm8gKyB4KzFdOworICAgICAgICAgICAgdGFfYWN0ICs9ICh1aW50NjRf dCkgYWJzKHQpOworICAgICAgICAgICAgb19tMlt5Km8gKyB4ICBdID0gb19tMVt5Km8gKyB4ICBd OyAgb19tMlsoeSsxKSpvICsgeCAgXSA9IG9fbTFbKHkrMSkqbyArIHggIF07CisgICAgICAgICAg ICBvX20yW3kqbyArIHgrMV0gPSBvX20xW3kqbyArIHgrMV07ICBvX20yWyh5KzEpKm8gKyB4KzFd ID0gb19tMVsoeSsxKSpvICsgeCsxXTsKKyAgICAgICAgICAgIG9fbTFbeSpvICsgeCAgXSA9IG9f bTBbeSpvICsgeCAgXTsgIG9fbTFbKHkrMSkqbyArIHggIF0gPSBvX20wWyh5KzEpKm8gKyB4ICBd OworICAgICAgICAgICAgb19tMVt5Km8gKyB4KzFdID0gb19tMFt5Km8gKyB4KzFdOyAgb19tMVso eSsxKSpvICsgeCsxXSA9IG9fbTBbKHkrMSkqbyArIHgrMV07CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuICh0YV9hY3QgKiBYUFNOUl9HQU1NQSk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBz c2VfbGluZV8xNmJpdChjb25zdCB1aW50OF90ICpibGtfb3JnOCwgY29uc3QgdWludDhfdCAqYmxr X3JlYzgsIGludCBibG9ja193aWR0aCkKK3sKKyAgICBjb25zdCB1aW50MTZfdCAqYmxrX29yZyA9 IChjb25zdCB1aW50MTZfdCAqKSBibGtfb3JnODsKKyAgICBjb25zdCB1aW50MTZfdCAqYmxrX3Jl YyA9IChjb25zdCB1aW50MTZfdCAqKSBibGtfcmVjODsKKyAgICB1aW50NjRfdCBzc2UgPSAwOyAv KiBzdW0gZm9yIG9uZSBwaXhlbCBsaW5lICovCisKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IGJs b2NrX3dpZHRoOyB4KyspIHsKKyAgICAgICAgY29uc3QgaW50NjRfdCBlcnJvciA9IChpbnQ2NF90 KSBibGtfb3JnW3hdIC0gKGludDY0X3QpIGJsa19yZWNbeF07CisKKyAgICAgICAgc3NlICs9IGVy cm9yICogZXJyb3I7CisgICAgfQorCisgICAgLyogc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGZvciB0 aGUgcGl4ZWwgbGluZSAqLworICAgIHJldHVybiBzc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWlu dDY0X3QgY2FsY19zcXVhcmVkX2Vycm9yKFhQU05SQ29udGV4dCBjb25zdCAqcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QgKmJsa19vcmcs ICAgICBjb25zdCB1aW50MzJfdCBzdHJpZGVfb3JnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCAqYmxrX3JlYywgICAgIGNvbnN0IHVpbnQz Ml90IHN0cmlkZV9yZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1aW50MzJfdCBibG9ja193aWR0aCwgY29uc3QgdWludDMyX3QgYmxvY2tfaGVpZ2h0 KQoreworICAgIHVpbnQ2NF90IHNzZSA9IDA7ICAvKiBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgKi8K KworICAgIGZvciAodWludDMyX3QgeSA9IDA7IHkgPCBibG9ja19oZWlnaHQ7IHkrKykgeworICAg ICAgICBzc2UgKz0gcy0+ZHNwLnNzZV9saW5lKChjb25zdCB1aW50OF90ICopIGJsa19vcmcsIChj b25zdCB1aW50OF90ICopIGJsa19yZWMsIChpbnQpIGJsb2NrX3dpZHRoKTsKKyAgICAgICAgYmxr X29yZyArPSBzdHJpZGVfb3JnOworICAgICAgICBibGtfcmVjICs9IHN0cmlkZV9yZWM7CisgICAg fQorCisgICAgLyogcmV0dXJuIG5vbndlaWdodGVkIHN1bSBvZiBzcXVhcmVkIGVycm9ycyAqLwor ICAgIHJldHVybiBzc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGNhbGNfc3F1YXJlZF9l cnJvcl9hbmRfd2VpZ2h0IChYUFNOUkNvbnRleHQgY29uc3QgKnMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCAqcGljX29y ZywgICAgIGNvbnN0IHVpbnQzMl90IHN0cmlkZV9vcmcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAgICAgICAqcGljX29yZ19tMSwg IGludDE2X3QgICAgICAgKnBpY19vcmdfbTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCAqcGljX3JlYywgICAgIGNvbnN0 IHVpbnQzMl90IHN0cmlkZV9yZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qgb2Zmc2V0X3gsICAgIGNvbnN0IHVpbnQz Ml90IG9mZnNldF95LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGJsb2NrX3dpZHRoLCBjb25zdCB1aW50MzJfdCBibG9j a19oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDMyX3QgYml0X2RlcHRoLCAgIGNvbnN0IHVpbnQzMl90IGludF9mcmFt ZV9yYXRlLCBkb3VibGUgKm1zX2FjdCkKK3sKKyAgICBjb25zdCBpbnQgICAgICAgICBvID0gKGlu dCkgc3RyaWRlX29yZzsKKyAgICBjb25zdCBpbnQgICAgICAgICByID0gKGludCkgc3RyaWRlX3Jl YzsKKyAgICBjb25zdCBpbnQxNl90ICpvX20wID0gcGljX29yZyAgICArIG9mZnNldF95ICogbyAr IG9mZnNldF94OworICAgIGludDE2X3QgICAgICAgKm9fbTEgPSBwaWNfb3JnX20xICsgb2Zmc2V0 X3kgKiBvICsgb2Zmc2V0X3g7CisgICAgaW50MTZfdCAgICAgICAqb19tMiA9IHBpY19vcmdfbTIg KyBvZmZzZXRfeSAqIG8gKyBvZmZzZXRfeDsKKyAgICBjb25zdCBpbnQxNl90ICpyX20wID0gcGlj X3JlYyAgICArIG9mZnNldF95ICogciArIG9mZnNldF94OworICAgIGNvbnN0IGludCAgICAgYl92 YWwgPSAocy0+cGxhbmVfd2lkdGhbMF0gKiBzLT5wbGFuZV9oZWlnaHRbMF0gPiAyMDQ4ICogMTE1 MiA/IDIgOiAxKTsgLyogdGhyZXNob2xkIGlzIGEgYml0IG1vcmUgdGhhbiBIRCByZXNvbHV0aW9u ICovCisgICAgY29uc3QgaW50ICAgICB4X2FjdCA9IChvZmZzZXRfeCA+IDAgPyAwIDogYl92YWwp OworICAgIGNvbnN0IGludCAgICAgeV9hY3QgPSAob2Zmc2V0X3kgPiAwID8gMCA6IGJfdmFsKTsK KyAgICBjb25zdCBpbnQgICAgIHdfYWN0ID0gKG9mZnNldF94ICsgYmxvY2tfd2lkdGggIDwgKHVp bnQzMl90KSBzLT5wbGFuZV93aWR0aCBbMF0gPyAoaW50KSBibG9ja193aWR0aCAgOiAoaW50KSBi bG9ja193aWR0aCAgLSBiX3ZhbCk7CisgICAgY29uc3QgaW50ICAgICBoX2FjdCA9IChvZmZzZXRf eSArIGJsb2NrX2hlaWdodCA8ICh1aW50MzJfdCkgcy0+cGxhbmVfaGVpZ2h0WzBdID8gKGludCkg YmxvY2tfaGVpZ2h0IDogKGludCkgYmxvY2tfaGVpZ2h0IC0gYl92YWwpOworCisgICAgY29uc3Qg ZG91YmxlIHNzZSA9IChkb3VibGUpIGNhbGNfc3F1YXJlZF9lcnJvciAocywgb19tMCwgc3RyaWRl X29yZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByX20wLCBzdHJpZGVfcmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJsb2NrX3dpZHRoLCBibG9ja19oZWlnaHQpOworICAgIHVpbnQ2NF90 IHNhX2FjdCA9IDA7ICAvKiBzcGF0aWFsIGFicy4gYWN0aXZpdHkgKi8KKyAgICB1aW50NjRfdCB0 YV9hY3QgPSAwOyAvKiB0ZW1wb3JhbCBhYnMuIGFjdGl2aXR5ICovCisKKyAgICBpZiAod19hY3Qg PD0geF9hY3QgfHwgaF9hY3QgPD0geV9hY3QpIC8qIHNtYWxsICovCisgICAgICAgIHJldHVybiBz c2U7CisKKyAgICBpZiAoYl92YWwgPiAxKSB7IC8qIGhpZ2hwYXNzIHdpdGggZG93bnNhbXBsaW5n ICovCisgICAgICAgIGlmICh3X2FjdCA+IDEyKQorICAgICAgICAgICAgc2FfYWN0ID0gcy0+ZHNw LmhpZ2hkc19mdW5jKHhfYWN0LCB5X2FjdCwgd19hY3QsIGhfYWN0LCBvX20wLCBvKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgaGlnaGRzKHhfYWN0LCB5X2FjdCwgd19hY3QsIGhfYWN0LCBv X20wLCBvKTsKKyAgICB9IGVsc2UgeyAvKiA8PUhEIGhpZ2hwYXNzIHdpdGhvdXQgZG93bnNhbXBs aW5nICovCisgICAgICAgIGZvciAoaW50IHkgPSB5X2FjdDsgeSA8IGhfYWN0OyB5KyspIHsKKyAg ICAgICAgICAgIGZvciAoaW50IHggPSB4X2FjdDsgeCA8IHdfYWN0OyB4KyspIHsKKyAgICAgICAg ICAgICAgICBjb25zdCBpbnQgZiA9IDEyICogKGludClvX20wW3kqbyArIHhdIC0gMiAqICgoaW50 KW9fbTBbeSpvICsgeC0xXSArIChpbnQpb19tMFt5Km8gKyB4KzFdICsgKGludClvX20wWyh5LTEp Km8gKyB4XSArIChpbnQpb19tMFsoeSsxKSpvICsgeF0pCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtICgoaW50KW9fbTBbKHktMSkqbyArIHgtMV0gKyAoaW50KW9fbTBbKHktMSkq byArIHgrMV0gKyAoaW50KW9fbTBbKHkrMSkqbyArIHgtMV0gKyAoaW50KW9fbTBbKHkrMSkqbyAr IHgrMV0pOworICAgICAgICAgICAgICAgIHNhX2FjdCArPSAodWludDY0X3QpIGFicyhmKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGNhbGN1bGF0ZSB3ZWlnaHQg KGF2ZXJhZ2Ugc3F1YXJlZCBhY3Rpdml0eSkgKi8KKyAgICAqbXNfYWN0ID0gKGRvdWJsZSkgc2Ff YWN0IC8gKChkb3VibGUpICh3X2FjdCAtIHhfYWN0KSAqIChkb3VibGUpIChoX2FjdCAtIHlfYWN0 KSk7CisKKyAgICBpZiAoYl92YWwgPiAxKSB7IC8qIGhpZ2hwYXNzIHdpdGggZG93bnNhbXBsaW5n ICovCisgICAgICAgIGlmIChpbnRfZnJhbWVfcmF0ZSA8IDMyKSAvKiAxc3Qtb3JkZXIgZGlmZiAq LworICAgICAgICAgICAgdGFfYWN0ID0gcy0+ZHNwLmRpZmYxc3RfZnVuYyhibG9ja193aWR0aCwg YmxvY2tfaGVpZ2h0LCBvX20wLCBvX20xLCBvKTsKKyAgICAgICAgZWxzZSAvKiAybmQtb3JkZXIg ZGlmZiAoZGlmZiBvZiB0d28gZGlmZnMpICovCisgICAgICAgICAgICB0YV9hY3QgPSBzLT5kc3Au ZGlmZjJuZF9mdW5jKGJsb2NrX3dpZHRoLCBibG9ja19oZWlnaHQsIG9fbTAsIG9fbTEsIG9fbTIs IG8pOworICAgIH0gZWxzZSB7IC8qIDw9SEQgaGlnaHBhc3Mgd2l0aG91dCBkb3duc2FtcGxpbmcg Ki8KKyAgICAgICAgaWYgKGludF9mcmFtZV9yYXRlIDwgMzIpIHsgLyogMXN0LW9yZGVyIGRpZmYg Ki8KKyAgICAgICAgICAgIGZvciAodWludDMyX3QgeSA9IDA7IHkgPCBibG9ja19oZWlnaHQ7IHkr KykgeworICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgeCA9IDA7IHggPCBibG9ja193aWR0 aDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB0ID0gKGludClvX20wW3kg KiBvICsgeF0gLSAoaW50KW9fbTFbeSAqIG8gKyB4XTsKKworICAgICAgICAgICAgICAgICAgICB0 YV9hY3QgKz0gWFBTTlJfR0FNTUEgKiAodWludDY0X3QpIGFicyh0KTsKKyAgICAgICAgICAgICAg ICAgICAgb19tMVt5ICogbyArIHhdID0gb19tMFt5ICogbyArIHhdOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgLyogMm5kLW9yZGVyIGRpZmYgKGRp ZmYgb2YgMiBkaWZmcykgKi8KKyAgICAgICAgICAgIGZvciAodWludDMyX3QgeSA9IDA7IHkgPCBi bG9ja19oZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgeCA9IDA7 IHggPCBibG9ja193aWR0aDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB0 ID0gKGludClvX20wW3kgKiBvICsgeF0gLSAyICogKGludClvX20xW3kgKiBvICsgeF0gKyAoaW50 KW9fbTJbeSAqIG8gKyB4XTsKKworICAgICAgICAgICAgICAgICAgICB0YV9hY3QgKz0gWFBTTlJf R0FNTUEgKiAodWludDY0X3QpIGFicyh0KTsKKyAgICAgICAgICAgICAgICAgICAgb19tMlt5ICog byArIHhdID0gb19tMVt5ICogbyArIHhdOworICAgICAgICAgICAgICAgICAgICBvX20xW3kgKiBv ICsgeF0gPSBvX20wW3kgKiBvICsgeF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorCisgICAgLyogd2VpZ2h0ICs9IG1lYW4gc3F1YXJlZCB0ZW1w b3JhbCBhY3Rpdml0eSAqLworICAgICptc19hY3QgKz0gKGRvdWJsZSkgdGFfYWN0IC8gKChkb3Vi bGUpIGJsb2NrX3dpZHRoICogKGRvdWJsZSkgYmxvY2tfaGVpZ2h0KTsKKworICAgIC8qIGxvd2Vy IGxpbWl0LCBhY2NvdW50cyBmb3IgaGlnaC1wYXNzIGdhaW4gKi8KKyAgICBpZiAoKm1zX2FjdCA8 IChkb3VibGUpICgxIDw8IChiaXRfZGVwdGggLSA2KSkpCisgICAgICAgICptc19hY3QgPSAoZG91 YmxlKSAoMSA8PCAoYml0X2RlcHRoIC0gNikpOworCisgICAgKm1zX2FjdCAqPSAqbXNfYWN0OyAv KiBzaW5jZSBTU0UgaXMgc3F1YXJlZCAqLworCisgICAgLyogcmV0dXJuIG5vbndlaWdodGVkIHN1 bSBvZiBzcXVhcmVkIGVycm9ycyAqLworICAgIHJldHVybiBzc2U7Cit9CisKK3N0YXRpYyBpbmxp bmUgZG91YmxlIGdldF9hdmdfeHBzbnIgKGNvbnN0IGRvdWJsZSBzcXJ0X3dzc2VfdmFsLCAgY29u c3QgZG91YmxlIHN1bV94cHNucl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1aW50MzJfdCBpbWFnZV93aWR0aCwgIGNvbnN0IHVpbnQzMl90IGltYWdlX2hl aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ2NF90 IG1heF9lcnJvcl82NCwgY29uc3QgdWludDY0X3QgbnVtX2ZyYW1lc182NCkKK3sKKyAgICBpZiAo bnVtX2ZyYW1lc182NCA9PSAwKQorICAgICAgICByZXR1cm4gSU5GSU5JVFk7CisKKyAgICBpZiAo c3FydF93c3NlX3ZhbCA+PSAoZG91YmxlKSBudW1fZnJhbWVzXzY0KSB7IC8qIHNxdWFyZS1tZWFu LXJvb3QgYXZlcmFnZSAqLworICAgICAgICBjb25zdCBkb3VibGUgYXZnX2Rpc3QgPSBzcXJ0X3dz c2VfdmFsIC8gKGRvdWJsZSkgbnVtX2ZyYW1lc182NDsKKyAgICAgICAgY29uc3QgdWludDY0X3Qg IG51bTY0ID0gKHVpbnQ2NF90KSBpbWFnZV93aWR0aCAqICh1aW50NjRfdCkgaW1hZ2VfaGVpZ2h0 ICogbWF4X2Vycm9yXzY0OworCisgICAgICAgIHJldHVybiAxMC4wICogbG9nMTAoKGRvdWJsZSkg bnVtNjQgLyAoKGRvdWJsZSkgYXZnX2Rpc3QgKiAoZG91YmxlKSBhdmdfZGlzdCkpOworICAgIH0K KworICAgIHJldHVybiBzdW1feHBzbnJfdmFsIC8gKGRvdWJsZSkgbnVtX2ZyYW1lc182NDsgLyog b2xkZXIgbG9nLWRvbWFpbiBhdmVyYWdlICovCit9CisKK3N0YXRpYyBpbnQgZ2V0X3dzc2UoQVZG aWx0ZXJDb250ZXh0ICpjdHgsIGludDE2X3QgKipvcmcsIGludDE2X3QgKipvcmdfbTEsIGludDE2 X3QgKipvcmdfbTIsIGludDE2X3QgKipyZWMsCisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90 ICpjb25zdCB3c3NlNjQpCit7CisgICAgWFBTTlJDb250ZXh0ICpjb25zdCAgcyA9IGN0eC0+cHJp djsKKyAgICBjb25zdCB1aW50MzJfdCAgICAgICB3ID0gcy0+cGxhbmVfd2lkdGggWzBdOyAvKiBs dW1hIGltYWdlIHdpZHRoIGluIHBpeGVscyAqLworICAgIGNvbnN0IHVpbnQzMl90ICAgICAgIGgg PSBzLT5wbGFuZV9oZWlnaHRbMF07LyogbHVtYSBpbWFnZSBoZWlnaHQgaW4gcGl4ZWxzICovCisg ICAgY29uc3QgZG91YmxlICAgICAgICAgciA9IChkb3VibGUpKHcgKiBoKSAvICgzODQwLjAgKiAy MTYwLjApOyAvKiBVSEQgcmF0aW8gKi8KKyAgICBjb25zdCB1aW50MzJfdCAgICAgICBiID0gRkZN QVgoMCwgNCAqIChpbnQzMl90KSAoMzIuMCAqIHNxcnQocikgKworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKTsgLyogYmxvY2sgc2l6ZSwg aW50ZWdlciBtdWx0aXBsZSBvZiA0IGZvciBTSU1EICovCisgICAgY29uc3QgdWludDMyX3QgICB3 X2JsayA9ICh3ICsgYiAtIDEpIC8gYjsgLyogbHVtYSB3aWR0aCBpbiB1bml0cyBvZiBibG9ja3Mg Ki8KKyAgICBjb25zdCBkb3VibGUgICBhdmdfYWN0ID0gc3FydCgxNi4wICogKGRvdWJsZSkgKDEg PDwgKDIgKiBzLT5kZXB0aCAtIDkpKSAvIHNxcnQoRkZNQVgoMC4wMDAwMSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcikpKTsgLyogdGhlIHNxcnQoYV9waWMpICovCisgICAgY29uc3QgaW50 ICAqc3RyaWRlX29yZyA9IChzLT5icHAgPT0gMSA/IHMtPnBsYW5lX3dpZHRoIDogcy0+bGluZV9z aXplcyk7CisgICAgdWludDMyX3QgeCwgeSwgaWR4X2JsayA9IDA7IC8qIHRoZSAiMTYuMCIgYWJv dmUgaXMgZHVlIHRvIGZpeGVkLXBvaW50IGNvZGUgKi8KKyAgICBkb3VibGUgKmNvbnN0IHNzZV9s dW1hID0gcy0+c3NlX2x1bWE7CisgICAgZG91YmxlICpjb25zdCAgd2VpZ2h0cyA9IHMtPndlaWdo dHM7CisgICAgaW50IGM7CisKKyAgICBpZiAoKHdzc2U2NCA9PSBOVUxMKSB8fCAocy0+ZGVwdGgg PCA2KSB8fCAocy0+ZGVwdGggPiAxNikgfHwgKHMtPm51bV9jb21wcyA8PSAwKSB8fAorICAgICAg ICAocy0+bnVtX2NvbXBzID4gMykgfHwgKHcgPT0gMCkgfHwgKGggPT0gMCkpIHsKKyAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3IgaW4gWFBTTlIgcm91dGluZTogaW52YWxp ZCBhcmd1bWVudChzKS5cbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAg IH0KKyAgICBpZiAoKHdlaWdodHMgPT0gTlVMTCkgfHwgKGIgPj0gNCAmJiBzc2VfbHVtYSA9PSBO VUxMKSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gYWxs b2NhdGUgdGVtcG9yYXJ5IGJsb2NrIG1lbW9yeS5cbiIpOworICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworICAgIH0KKworICAgIGlmIChiID49IDQpIHsKKyAgICAgICAgY29uc3QgaW50 MTZfdCAqcF9vcmcgPSBvcmdbMF07CisgICAgICAgIGNvbnN0IHVpbnQzMl90IHNfb3JnID0gc3Ry aWRlX29yZ1swXSAvIHMtPmJwcDsKKyAgICAgICAgY29uc3QgaW50MTZfdCAqcF9yZWMgPSByZWNb MF07CisgICAgICAgIGNvbnN0IHVpbnQzMl90IHNfcmVjID0gcy0+cGxhbmVfd2lkdGhbMF07Cisg ICAgICAgIGludDE2X3QgICAgKnBfb3JnX20xID0gb3JnX20xWzBdOyAvKiBwaXhlbCAgKi8KKyAg ICAgICAgaW50MTZfdCAgICAqcF9vcmdfbTIgPSBvcmdfbTJbMF07IC8qIG1lbW9yeSAqLworICAg ICAgICBkb3VibGUgICAgIHdzc2VfbHVtYSA9IDAuMDsKKworICAgICAgICBmb3IgKHkgPSAwOyB5 IDwgaDsgeSArPSBiKSB7IC8qIGNhbGN1bGF0ZSBibG9jayBTU0UgYW5kIHBlcmNlcHR1YWwgd2Vp Z2h0cyAqLworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgYmxvY2tfaGVpZ2h0ID0gKHkgKyBi ID4gaCA/IGggLSB5IDogYik7CisKKyAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB3OyB4ICs9 IGIsIGlkeF9ibGsrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGJsb2NrX3dp ZHRoID0gKHggKyBiID4gdyA/IHcgLSB4IDogYik7CisgICAgICAgICAgICAgICAgZG91YmxlIG1z X2FjdCA9IDEuMCwgbXNfYWN0X3ByZXYgPSAwLjA7CisKKyAgICAgICAgICAgICAgICBzc2VfbHVt YVtpZHhfYmxrXSA9IGNhbGNfc3F1YXJlZF9lcnJvcl9hbmRfd2VpZ2h0KHMsIHBfb3JnLCBzX29y ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBfb3JnX20xLCBwX29yZ19tMiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfcmVjLCBzX3JlYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHgsIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja193aWR0aCwgYmxvY2tfaGVpZ2h0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcy0+ZGVwdGgsIHMtPmZyYW1lX3JhdGUsICZtc19hY3QpOworICAgICAgICAgICAgICAg IHdlaWdodHNbaWR4X2Jsa10gPSAxLjAgLyBzcXJ0KG1zX2FjdCk7CisKKyAgICAgICAgICAgICAg ICBpZiAodyAqIGggPD0gNjQwICogNDgwKSB7IC8qIGluLWxpbmUgIm1pbi1zbW9vdGhpbmciIGFz IGluIHBhcGVyICovCisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IDApIC8qIGZpcnN0IGNv bHVtbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgbXNfYWN0X3ByZXYgPSAoaWR4X2JsayA+ IDEgPyB3ZWlnaHRzW2lkeF9ibGsgLSAyXSA6IDApOworICAgICAgICAgICAgICAgICAgICBlbHNl ICAvKiBhZnRlciBmaXJzdCBjb2x1bW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1zX2Fj dF9wcmV2ID0gKHggPiBiID8gRkZNQVgod2VpZ2h0c1tpZHhfYmxrIC0gMl0sIHdlaWdodHNbaWR4 X2Jsa10pIDogd2VpZ2h0c1tpZHhfYmxrXSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlk eF9ibGsgPiB3X2JsaykgLyogYWZ0ZXIgdGhlIGZpcnN0IHJvdyBhbmQgZmlyc3QgY29sdW1uICov CisgICAgICAgICAgICAgICAgICAgICAgICBtc19hY3RfcHJldiA9IEZGTUFYKG1zX2FjdF9wcmV2 LCB3ZWlnaHRzW2lkeF9ibGsgLSAxIC0gd19ibGtdKTsgLyogbWluIChMLCBUKSAqLworICAgICAg ICAgICAgICAgICAgICBpZiAoKGlkeF9ibGsgPiAwKSAmJiAod2VpZ2h0c1tpZHhfYmxrIC0gMV0g PiBtc19hY3RfcHJldikpCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzW2lkeF9ibGsg LSAxXSA9IG1zX2FjdF9wcmV2OworCisgICAgICAgICAgICAgICAgICAgIGlmICgoeCArIGIgPj0g dykgJiYgKHkgKyBiID49IGgpICYmIChpZHhfYmxrID4gd19ibGspKSB7IC8qIGxhc3QgYmxvY2sg aW4gcGljdHVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgbXNfYWN0X3ByZXYgPSBGRk1B WCh3ZWlnaHRzW2lkeF9ibGsgLSAxXSwgd2VpZ2h0c1tpZHhfYmxrIC0gd19ibGtdKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmICh3ZWlnaHRzW2lkeF9ibGtdID4gbXNfYWN0X3ByZXYpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0c1tpZHhfYmxrXSA9IG1zX2FjdF9wcmV2 OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSAvKiBmb3IgeCAqLworICAgICAgICB9IC8qIGZvciB5ICovCisKKyAgICAgICAgZm9yICh5ID0g aWR4X2JsayA9IDA7IHkgPCBoOyB5ICs9IGIpIHsgLyogY2FsY3VsYXRlIHN1bSBmb3IgbHVtYSAo WSkgWFBTTlIgKi8KKyAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB3OyB4ICs9IGIsIGlkeF9i bGsrKykgeworICAgICAgICAgICAgICAgIHdzc2VfbHVtYSArPSBzc2VfbHVtYVtpZHhfYmxrXSAq IHdlaWdodHNbaWR4X2Jsa107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd3Nz ZTY0WzBdID0gKHdzc2VfbHVtYSA8PSAwLjAgPyAwIDogKHVpbnQ2NF90KSAod3NzZV9sdW1hICog YXZnX2FjdCArIDAuNSkpOworICAgIH0gLyogYiA+PSA0ICovCisKKyAgICBmb3IgKGMgPSAwOyBj IDwgcy0+bnVtX2NvbXBzOyBjKyspIHsgLyogZmluYWxpemUgV1NTRSB2YWx1ZSBmb3IgZWFjaCBj b21wb25lbnQgKi8KKyAgICAgICAgY29uc3QgaW50MTZfdCAqcF9vcmcgPSBvcmdbY107CisgICAg ICAgIGNvbnN0IHVpbnQzMl90IHNfb3JnID0gc3RyaWRlX29yZ1tjXSAvIHMtPmJwcDsKKyAgICAg ICAgY29uc3QgaW50MTZfdCAqcF9yZWMgPSByZWNbY107CisgICAgICAgIGNvbnN0IHVpbnQzMl90 IHNfcmVjID0gcy0+cGxhbmVfd2lkdGhbY107CisgICAgICAgIGNvbnN0IHVpbnQzMl90IHdfcGxu ID0gcy0+cGxhbmVfd2lkdGhbY107CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGhfcGxuID0gcy0+ cGxhbmVfaGVpZ2h0W2NdOworCisgICAgICAgIGlmIChiIDwgNCkgLyogcGljdHVyZSBpcyB0b28g c21hbGwgZm9yIFhQU05SLCBjYWxjdWxhdGUgbm9ud2VpZ2h0ZWQgUFNOUiAqLworICAgICAgICAg ICAgd3NzZTY0W2NdID0gY2FsY19zcXVhcmVkX2Vycm9yIChzLCBwX29yZywgc19vcmcsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfcmVjLCBzX3JlYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd19wbG4sIGhfcGxuKTsK KyAgICAgICAgZWxzZSBpZiAoYyA+IDApIHsgLyogYiA+PSA0IHNvIFkgWFBTTlIgaGFzIGFscmVh ZHkgYmVlbiBjYWxjdWxhdGVkIGFib3ZlICovCisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAg YnggPSAoYiAqIHdfcGxuKSAvIHc7CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAgYnkgPSAo YiAqIGhfcGxuKSAvIGg7ICAvKiB1cCB0byBjaHJvbWEgZG93bnNhbXBsaW5nIGJ5IDQgKi8KKyAg ICAgICAgICAgIGRvdWJsZSB3c3NlX2Nocm9tYSA9IDAuMDsKKworICAgICAgICAgICAgZm9yICh5 ID0gaWR4X2JsayA9IDA7IHkgPCBoX3BsbjsgeSArPSBieSkgeyAvKiBjYWxjIGNocm9tYSAoQ2Iv Q3IpIFhQU05SICovCisgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgYmxvY2tfaGVpZ2h0 ID0gKHkgKyBieSA+IGhfcGxuID8gaF9wbG4gLSB5IDogYnkpOworCisgICAgICAgICAgICAgICAg Zm9yICh4ID0gMDsgeCA8IHdfcGxuOyB4ICs9IGJ4LCBpZHhfYmxrKyspIHsKKyAgICAgICAgICAg ICAgICAgICAgY29uc3QgdWludDMyX3QgYmxvY2tfd2lkdGggPSAoeCArIGJ4ID4gd19wbG4gPyB3 X3BsbiAtIHggOiBieCk7CisKKyAgICAgICAgICAgICAgICAgICAgd3NzZV9jaHJvbWEgKz0gKGRv dWJsZSkgY2FsY19zcXVhcmVkX2Vycm9yIChzLCBwX29yZyArIHkgKiBzX29yZyArIHgsIHNfb3Jn LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBfcmVjICsgeSAqIHNfcmVjICsgeCwgc19yZWMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfd2lk dGgsIGJsb2NrX2hlaWdodCkgKiB3ZWlnaHRzW2lkeF9ibGtdOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdzc2U2NFtjXSA9ICh3c3NlX2Nocm9tYSA8PSAw LjAgPyAwIDogKHVpbnQ2NF90KSAod3NzZV9jaHJvbWEgKiBhdmdfYWN0ICsgMC41KSk7CisgICAg ICAgIH0KKyAgICB9IC8qIGZvciBjICovCisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBkb194cHNucihGRkZyYW1lU3luYyAqZnMpCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICAqY3R4 ID0gZnMtPnBhcmVudDsKKyAgICBYUFNOUkNvbnRleHQgKmNvbnN0IHMgPSBjdHgtPnByaXY7Cisg ICAgY29uc3QgdWludDMyX3QgICAgICB3ID0gcy0+cGxhbmVfd2lkdGggWzBdOyAgLyogbHVtYSBp bWFnZSB3aWR0aCBpbiBwaXhlbHMgKi8KKyAgICBjb25zdCB1aW50MzJfdCAgICAgIGggPSBzLT5w bGFuZV9oZWlnaHRbMF07IC8qIGx1bWEgaW1hZ2UgaGVpZ2h0IGluIHBpeGVscyAqLworICAgIGNv bnN0IHVpbnQzMl90ICAgICAgYiA9IEZGTUFYKDAsIDQgKiAoaW50MzJfdCkgKDMyLjAgKiBzcXJ0 KChkb3VibGUpICh3ICogaCkgLyAoMzg0MC4wICogMjE2MC4wKSkgKyAwLjUpKTsgLyogYmxvY2sg c2l6ZSAqLworICAgIGNvbnN0IHVpbnQzMl90ICB3X2JsayA9ICh3ICsgYiAtIDEpIC8gYjsgIC8q IGx1bWEgd2lkdGggaW4gdW5pdHMgb2YgYmxvY2tzICovCisgICAgY29uc3QgdWludDMyX3QgIGhf YmxrID0gKGggKyBiIC0gMSkgLyBiOyAvKiBsdW1hIGhlaWdodCBpbiB1bml0cyBvZiBibG9ja3Mg Ki8KKyAgICBBVkZyYW1lICptYXN0ZXIsICpyZWYgPSBOVUxMOworICAgIGludDE2X3QgKnBvcmcg ICBbM107CisgICAgaW50MTZfdCAqcG9yZ19tMVszXTsKKyAgICBpbnQxNl90ICpwb3JnX20yWzNd OworICAgIGludDE2X3QgKnByZWMgICBbM107CisgICAgdWludDY0X3Qgd3NzZTY0IFszXSA9IHsw LCAwLCAwfTsKKyAgICBkb3VibGUgY3VyX3hwc25yWzNdID0ge0lORklOSVRZLCBJTkZJTklUWSwg SU5GSU5JVFl9OworICAgIGludCBjLCByZXRfdmFsdWU7CisKKyAgICBpZiAoKHJldF92YWx1ZSA9 IGZmX2ZyYW1lc3luY19kdWFsaW5wdXRfZ2V0KGZzLCAmbWFzdGVyLCAmcmVmKSkgPCAwKQorICAg ICAgICByZXR1cm4gcmV0X3ZhbHVlOworICAgIGlmIChyZWYgPT0gTlVMTCkKKyAgICAgICAgcmV0 dXJuIGZmX2ZpbHRlcl9mcmFtZShjdHgtPm91dHB1dHNbMF0sIG1hc3Rlcik7CisKKyAgICAvKiBw cmVwYXJlIFhQU05SIGNhbGN1bGF0aW9uczogYWxsb2NhdGUgdGVtcG9yYXJ5IHBpY3R1cmUgYW5k IGJsb2NrIG1lbW9yeSAqLworICAgIGlmIChzLT5zc2VfbHVtYSA9PSBOVUxMKQorICAgICAgICBz LT5zc2VfbHVtYSA9IChkb3VibGUgKikgYXZfbWFsbG9jX2FycmF5KHdfYmxrICogaF9ibGssIHNp emVvZihkb3VibGUpKTsKKyAgICBpZiAocy0+d2VpZ2h0cyAgPT0gTlVMTCkKKyAgICAgICAgcy0+ d2VpZ2h0cyAgPSAoZG91YmxlICopIGF2X21hbGxvY19hcnJheSh3X2JsayAqIGhfYmxrLCBzaXpl b2YoZG91YmxlKSk7CisKKyAgICBmb3IgKGMgPSAwOyBjIDwgcy0+bnVtX2NvbXBzOyBjKyspIHsg IC8qIGNyZWF0ZSB0ZW1wb3JhbCBvcmcgYnVmZmVyIG1lbW9yeSAqLworICAgICAgICBzLT5saW5l X3NpemVzW2NdID0gbWFzdGVyLT5saW5lc2l6ZVtjXTsKKworICAgICAgICBpZiAoYyA9PSAwKSB7 IC8qIGx1bWEgY2guICovCisgICAgICAgICAgICBjb25zdCBpbnQgc3RyaWRlX29yZ19icHAgPSAo cy0+YnBwID09IDEgPyBzLT5wbGFuZV93aWR0aFtjXSA6IHMtPmxpbmVfc2l6ZXNbY10gLyBzLT5i cHApOworCisgICAgICAgICAgICBpZiAoIXMtPmJ1Zl9vcmdfbTFbY10pCisgICAgICAgICAgICAg ICAgcy0+YnVmX29yZ19tMVtjXSA9IGF2X2J1ZmZlcl9hbGxvY3ooc3RyaWRlX29yZ19icHAgKiBz LT5wbGFuZV9oZWlnaHRbY10gKiBzaXplb2YoaW50MTZfdCkpOworICAgICAgICAgICAgaWYgKCFz LT5idWZfb3JnX20yW2NdKQorICAgICAgICAgICAgICAgIHMtPmJ1Zl9vcmdfbTJbY10gPSBhdl9i dWZmZXJfYWxsb2N6KHN0cmlkZV9vcmdfYnBwICogcy0+cGxhbmVfaGVpZ2h0W2NdICogc2l6ZW9m KGludDE2X3QpKTsKKworICAgICAgICAgICAgcG9yZ19tMVtjXSA9IChpbnQxNl90ICopIHMtPmJ1 Zl9vcmdfbTFbY10tPmRhdGE7CisgICAgICAgICAgICBwb3JnX20yW2NdID0gKGludDE2X3QgKikg cy0+YnVmX29yZ19tMltjXS0+ZGF0YTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzLT5i cHAgPT0gMSkgeyAvKiA4IGJpdCAqLworICAgICAgICBmb3IgKGMgPSAwOyBjIDwgcy0+bnVtX2Nv bXBzOyBjKyspIHsgLyogYWxsb2NhdGUgb3JnL3JlYyBidWZmZXIgbWVtb3J5ICovCisgICAgICAg ICAgICBjb25zdCBpbnQgbSA9IHMtPmxpbmVfc2l6ZXNbY107ICAvKiBtYXN0ZXIgc3RyaWRlICov CisgICAgICAgICAgICBjb25zdCBpbnQgciA9IHJlZi0+bGluZXNpemVbY107ICAvKiByZWYvYyBz dHJpZGUgKi8KKyAgICAgICAgICAgIGNvbnN0IGludCBvID0gcy0+cGxhbmVfd2lkdGhbY107IC8q IFhQU05SIHN0cmlkZSAqLworCisgICAgICAgICAgICBpZiAoIXMtPmJ1Zl9vcmdbY10pCisgICAg ICAgICAgICAgICAgcy0+YnVmX29yZ1tjXSA9IGF2X2J1ZmZlcl9hbGxvY3oocy0+cGxhbmVfd2lk dGhbY10gKiBzLT5wbGFuZV9oZWlnaHRbY10gKiBzaXplb2YoaW50MTZfdCkpOworICAgICAgICAg ICAgaWYgKCFzLT5idWZfcmVjW2NdKQorICAgICAgICAgICAgICAgIHMtPmJ1Zl9yZWNbY10gPSBh dl9idWZmZXJfYWxsb2N6KHMtPnBsYW5lX3dpZHRoW2NdICogcy0+cGxhbmVfaGVpZ2h0W2NdICog c2l6ZW9mKGludDE2X3QpKTsKKworICAgICAgICAgICAgcG9yZ1tjXSA9IChpbnQxNl90ICopIHMt PmJ1Zl9vcmdbY10tPmRhdGE7CisgICAgICAgICAgICBwcmVjW2NdID0gKGludDE2X3QgKikgcy0+ YnVmX3JlY1tjXS0+ZGF0YTsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzLT5w bGFuZV9oZWlnaHRbY107IHkrKykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4 IDwgcy0+cGxhbmVfd2lkdGhbY107IHgrKykgeworICAgICAgICAgICAgICAgICAgICBwb3JnW2Nd W3kgKiBvICsgeF0gPSAoaW50MTZfdCkgbWFzdGVyLT5kYXRhW2NdW3kgKiBtICsgeF07CisgICAg ICAgICAgICAgICAgICAgIHByZWNbY11beSAqIG8gKyB4XSA9IChpbnQxNl90KSAgICByZWYtPmRh dGFbY11beSAqIHIgKyB4XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9IGVsc2UgeyAgLyogMTAsIDEyLCAxNCBiaXQgKi8KKyAgICAgICAgZm9yIChj ID0gMDsgYyA8IHMtPm51bV9jb21wczsgYysrKSB7CisgICAgICAgICAgICBwb3JnW2NdID0gKGlu dDE2X3QgKikgbWFzdGVyLT5kYXRhW2NdOworICAgICAgICAgICAgcHJlY1tjXSA9IChpbnQxNl90 ICopICAgIHJlZi0+ZGF0YVtjXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGV4dGVuZGVk IHBlcmNlcHR1YWxseSB3ZWlnaHRlZCBwZWFrIHNpZ25hbC10by1ub2lzZSByYXRpbyAoWFBTTlIp IHZhbHVlICovCisgICAgcmV0X3ZhbHVlID0gZ2V0X3dzc2UoY3R4LCAoaW50MTZfdCAqKikgJnBv cmcsIChpbnQxNl90ICoqKSAmcG9yZ19tMSwgKGludDE2X3QgKiopICZwb3JnX20yLAorICAgICAg ICAgICAgICAgICAgICAgICAgIChpbnQxNl90ICoqKSAmcHJlYywgd3NzZTY0KTsKKyAgICBpZiAo IHJldF92YWx1ZSA8IDAgKQorICAgICAgICByZXR1cm4gcmV0X3ZhbHVlOyAvKiBhbiBlcnJvciBo ZXJlIG1lYW5zIHNvbWV0aGluZyB3ZW50IHdyb25nIGVhcmxpZXIhICovCisKKyAgICBmb3IgKGMg PSAwOyBjIDwgcy0+bnVtX2NvbXBzOyBjKyspIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHNxcnRf d3NzZSA9IHNxcnQoKGRvdWJsZSkgd3NzZTY0W2NdKTsKKworICAgICAgICBjdXJfeHBzbnJbY10g PSBnZXRfYXZnX3hwc25yIChzcXJ0X3dzc2UsIElORklOSVRZLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzLT5wbGFuZV93aWR0aFtjXSwgcy0+cGxhbmVfaGVpZ2h0W2Nd LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5tYXhfZXJyb3JfNjQs IDEgLyogc2luZ2xlIGZyYW1lICovKTsKKyAgICAgICAgcy0+c3VtX3dkaXN0W2NdICs9IHNxcnRf d3NzZTsKKyAgICAgICAgcy0+c3VtX3hwc25yW2NdICs9IGN1cl94cHNucltjXTsKKyAgICAgICAg cy0+YW5kX2lzX2luZltjXSAmPSBpc2luZihjdXJfeHBzbnJbY10pOworICAgIH0KKyAgICBzLT5u dW1fZnJhbWVzXzY0Kys7CisKKyAgICBpZiAocy0+c3RhdHNfZmlsZSkgeyAvKiBwcmludCBvdXQg ZnJhbWUtIGFuZCBjb21wb25lbnQtd2lzZSBYUFNOUiBhdmVyYWdlcyAqLworICAgICAgICBmcHJp bnRmKHMtPnN0YXRzX2ZpbGUsICJuOiAlNCJQUklkNjQiIiwgcy0+bnVtX2ZyYW1lc182NCk7CisK KyAgICAgICAgZm9yIChjID0gMDsgYyA8IHMtPm51bV9jb21wczsgYysrKQorICAgICAgICAgICAg ZnByaW50ZihzLT5zdGF0c19maWxlLCAiICBYUFNOUiAlYzogJTMuNGYiLCBzLT5jb21wc1tjXSwg Y3VyX3hwc25yW2NdKTsKKyAgICAgICAgZnByaW50ZihzLT5zdGF0c19maWxlLCAiXG4iKTsKKyAg ICB9CisKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKGN0eC0+b3V0cHV0c1swXSwgbWFzdGVy KTsKK30KKworc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7 CisgICAgWFBTTlJDb250ZXh0ICpjb25zdCBzID0gY3R4LT5wcml2OworICAgIGludCBjOworCisg ICAgaWYgKHMtPnN0YXRzX2ZpbGVfc3RyKSB7CisgICAgICAgIGlmICghc3RyY21wKHMtPnN0YXRz X2ZpbGVfc3RyLCAiLSIpKSAvKiBubyBzdGF0cyBmaWxlLCBzbyB1c2Ugc3Rkb3V0ICovCisgICAg ICAgICAgICBzLT5zdGF0c19maWxlID0gc3Rkb3V0OworICAgICAgICBlbHNlIHsKKyAgICAgICAg ICAgIHMtPnN0YXRzX2ZpbGUgPSBhdnByaXZfZm9wZW5fdXRmOChzLT5zdGF0c19maWxlX3N0ciwg InciKTsKKworICAgICAgICAgICAgaWYgKHMtPnN0YXRzX2ZpbGUgPT0gTlVMTCkgeworICAgICAg ICAgICAgICAgIGNvbnN0IGludCBlcnIgPSBBVkVSUk9SKGVycm5vKTsKKyAgICAgICAgICAgICAg ICBjaGFyIGJ1ZlsxMjhdOworCisgICAgICAgICAgICAgICAgYXZfc3RyZXJyb3IoZXJyLCBidWYs IHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJDb3VsZCBub3Qgb3BlbiBzdGF0aXN0aWNzIGZpbGUgJXM6ICVzXG4iLCBzLT5zdGF0c19maWxl X3N0ciwgYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorCisgICAgcy0+c3NlX2x1bWEgPSBOVUxMOworICAgIHMtPndlaWdo dHMgID0gTlVMTDsKKworICAgIGZvciAoYyA9IDA7IGMgPCAzOyBjKyspIHsgLyogaW5pdGlhbGl6 ZSBYUFNOUiBkYXRhIG9mIGVhY2ggY29sb3IgY29tcG9uZW50ICovCisgICAgICAgIHMtPmJ1Zl9v cmcgICBbY10gPSBOVUxMOworICAgICAgICBzLT5idWZfb3JnX20xW2NdID0gTlVMTDsKKyAgICAg ICAgcy0+YnVmX29yZ19tMltjXSA9IE5VTEw7CisgICAgICAgIHMtPmJ1Zl9yZWMgICBbY10gPSBO VUxMOworICAgICAgICBzLT5zdW1fd2Rpc3QgW2NdID0gMC4wOworICAgICAgICBzLT5zdW1feHBz bnIgW2NdID0gMC4wOworICAgICAgICBzLT5hbmRfaXNfaW5mW2NdID0gMTsKKyAgICB9CisKKyAg ICBzLT5mcy5vbl9ldmVudCA9IGRvX3hwc25yOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgeHBzbnJfZm9ybWF0c1tdID0geworICAgIEFWX1BJ WF9GTVRfR1JBWTgsIEFWX1BJWF9GTVRfR1JBWTksIEFWX1BJWF9GTVRfR1JBWTEwLCBBVl9QSVhf Rk1UX0dSQVkxMiwgQVZfUElYX0ZNVF9HUkFZMTQsIEFWX1BJWF9GTVRfR1JBWTE2LAorI2RlZmlu ZSBQRl9OT0FMUEhBKHN1ZikgQVZfUElYX0ZNVF9ZVVY0MjAjI3N1ZiwgIEFWX1BJWF9GTVRfWVVW NDIyIyNzdWYsICBBVl9QSVhfRk1UX1lVVjQ0NCMjc3VmCisjZGVmaW5lIFBGX0FMUEhBKHN1Zikg ICBBVl9QSVhfRk1UX1lVVkE0MjAjI3N1ZiwgQVZfUElYX0ZNVF9ZVVZBNDIyIyNzdWYsIEFWX1BJ WF9GTVRfWVVWQTQ0NCMjc3VmCisjZGVmaW5lIFBGKHN1ZikgICAgICAgICBQRl9OT0FMUEhBKHN1 ZiksIFBGX0FMUEhBKHN1ZikKKyAgICBQRihQKSwgUEYoUDkpLCBQRihQMTApLCBQRl9OT0FMUEhB KFAxMiksIFBGX05PQUxQSEEoUDE0KSwgUEYoUDE2KSwKKyAgICBBVl9QSVhfRk1UX1lVVjQ0MFAs IEFWX1BJWF9GTVRfWVVWNDExUCwgQVZfUElYX0ZNVF9ZVVY0MTBQLAorICAgIEFWX1BJWF9GTVRf WVVWSjQxMVAsIEFWX1BJWF9GTVRfWVVWSjQyMFAsIEFWX1BJWF9GTVRfWVVWSjQyMlAsCisgICAg QVZfUElYX0ZNVF9ZVVZKNDQwUCwgQVZfUElYX0ZNVF9ZVVZKNDQ0UCwKKyAgICBBVl9QSVhfRk1U X0dCUlAsIEFWX1BJWF9GTVRfR0JSUDksIEFWX1BJWF9GTVRfR0JSUDEwLAorICAgIEFWX1BJWF9G TVRfR0JSUDEyLCBBVl9QSVhfRk1UX0dCUlAxNCwgQVZfUElYX0ZNVF9HQlJQMTYsCisgICAgQVZf UElYX0ZNVF9HQlJBUCwgQVZfUElYX0ZNVF9HQlJBUDEwLCBBVl9QSVhfRk1UX0dCUkFQMTIsIEFW X1BJWF9GTVRfR0JSQVAxNiwKKyAgICBBVl9QSVhfRk1UX05PTkUKK307CisKK3N0YXRpYyBpbnQg Y29uZmlnX2lucHV0X3JlZihBVkZpbHRlckxpbmsgKmlubGluaykKK3sKKyAgICBjb25zdCBBVlBp eEZtdERlc2NyaXB0b3IgKmRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KGlubGluay0+Zm9ybWF0 KTsKKyAgICBBVkZpbHRlckNvbnRleHQgICpjdHggPSBpbmxpbmstPmRzdDsKKyAgICBYUFNOUkNv bnRleHQgKmNvbnN0IHMgPSBjdHgtPnByaXY7CisKKyAgICBpZiAoKGN0eC0+aW5wdXRzWzBdLT53 ICE9IGN0eC0+aW5wdXRzWzFdLT53KSB8fAorICAgICAgICAoY3R4LT5pbnB1dHNbMF0tPmggIT0g Y3R4LT5pbnB1dHNbMV0tPmgpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IldpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGlucHV0IHZpZGVvcyBtdXN0IG1hdGNoLlxuIik7Cisg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorICAgIGlmIChjdHgtPmlucHV0 c1swXS0+Zm9ybWF0ICE9IGN0eC0+aW5wdXRzWzFdLT5mb3JtYXQpIHsKKyAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiVGhlIGlucHV0IHZpZGVvcyBtdXN0IGJlIG9mIHRoZSBzYW1l IHBpeGVsIGZvcm1hdC5cbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAg IH0KKworICAgIHMtPmJwcCA9ICAoZGVzYy0+Y29tcFswXS5kZXB0aCA8PSA4ID8gMSA6IDIpOwor ICAgIHMtPmRlcHRoID0gZGVzYy0+Y29tcFswXS5kZXB0aDsKKyAgICBzLT5tYXhfZXJyb3JfNjQg PSAoMSA8PCBzLT5kZXB0aCkgLSAxOyAvKiBjb252ZW50aW9uYWwgbGltaXQgKi8KKyAgICBzLT5t YXhfZXJyb3JfNjQgKj0gcy0+bWF4X2Vycm9yXzY0OworCisgICAgcy0+ZnJhbWVfcmF0ZSA9IGlu bGluay0+ZnJhbWVfcmF0ZS5udW0gLyBpbmxpbmstPmZyYW1lX3JhdGUuZGVuOworCisgICAgcy0+ bnVtX2NvbXBzID0gKGRlc2MtPm5iX2NvbXBvbmVudHMgPiAzID8gMyA6IGRlc2MtPm5iX2NvbXBv bmVudHMpOworCisgICAgcy0+aXNfcmdiID0gKGZmX2ZpbGxfcmdiYV9tYXAocy0+cmdiYV9tYXAs IGlubGluay0+Zm9ybWF0KSA+PSAwKTsKKyAgICBzLT5jb21wc1swXSA9IChzLT5pc19yZ2IgPyAn UicgOiAnWScpOworICAgIHMtPmNvbXBzWzFdID0gKHMtPmlzX3JnYiA/ICdHJyA6ICdVJyk7Cisg ICAgcy0+Y29tcHNbMl0gPSAocy0+aXNfcmdiID8gJ0InIDogJ1YnKTsKKyAgICBzLT5jb21wc1sz XSA9ICdBJzsKKworICAgIHMtPnBsYW5lX3dpZHRoIFsxXSA9IHMtPnBsYW5lX3dpZHRoIFsyXSA9 IEFWX0NFSUxfUlNISUZUKGlubGluay0+dywgZGVzYy0+bG9nMl9jaHJvbWFfdyk7CisgICAgcy0+ cGxhbmVfd2lkdGggWzBdID0gcy0+cGxhbmVfd2lkdGggWzNdID0gaW5saW5rLT53OworICAgIHMt PnBsYW5lX2hlaWdodFsxXSA9IHMtPnBsYW5lX2hlaWdodFsyXSA9IEFWX0NFSUxfUlNISUZUKGlu bGluay0+aCwgZGVzYy0+bG9nMl9jaHJvbWFfaCk7CisgICAgcy0+cGxhbmVfaGVpZ2h0WzBdID0g cy0+cGxhbmVfaGVpZ2h0WzNdID0gaW5saW5rLT5oOworCisgICAgcy0+ZHNwLnNzZV9saW5lID0g c3NlX2xpbmVfMTZiaXQ7CisgICAgcy0+ZHNwLmhpZ2hkc19mdW5jID0gaGlnaGRzOyAvKiBpbml0 aWFsaXplIGZpbHRlcmluZyBtZXRob2RzICovCisgICAgcy0+ZHNwLmRpZmYxc3RfZnVuYyA9IGRp ZmYxc3Q7CisgICAgcy0+ZHNwLmRpZmYybmRfZnVuYyA9IGRpZmYybmQ7CisjaWYgQVJDSF9YODYK KyAgICBmZl94cHNucl9pbml0X3g4Nigmcy0+ZHNwLCAxNSk7IC8qIGluaXRpYWxpemUgeDg2IFNT RSBtZXRob2QgKi8KKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29u ZmlnX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0 ICpjdHggPSBvdXRsaW5rLT5zcmM7CisgICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlu cHV0c1swXTsKKyAgICBYUFNOUkNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgaW50IHJldF92 YWx1ZTsKKworICAgIGlmICgocmV0X3ZhbHVlID0gZmZfZnJhbWVzeW5jX2luaXRfZHVhbGlucHV0 KCZzLT5mcywgY3R4KSkgPCAwKQorICAgICAgICByZXR1cm4gcmV0X3ZhbHVlOworCisgICAgb3V0 bGluay0+dyA9IGlubGluay0+dzsKKyAgICBvdXRsaW5rLT5oID0gaW5saW5rLT5oOworICAgIG91 dGxpbmstPmZyYW1lX3JhdGUgPSBpbmxpbmstPmZyYW1lX3JhdGU7CisgICAgb3V0bGluay0+c2Ft cGxlX2FzcGVjdF9yYXRpbyA9IGlubGluay0+c2FtcGxlX2FzcGVjdF9yYXRpbzsKKyAgICBvdXRs aW5rLT50aW1lX2Jhc2UgPSBpbmxpbmstPnRpbWVfYmFzZTsKKworICAgIGlmICgocmV0X3ZhbHVl ID0gZmZfZnJhbWVzeW5jX2NvbmZpZ3VyZSgmcy0+ZnMpKSA8IDApCisgICAgICAgIHJldHVybiBy ZXRfdmFsdWU7CisKKyAgICBvdXRsaW5rLT50aW1lX2Jhc2UgPSBzLT5mcy50aW1lX2Jhc2U7CisK KyAgICBpZiAoYXZfY21wX3EoaW5saW5rLT50aW1lX2Jhc2UsIG91dGxpbmstPnRpbWVfYmFzZSkg fHwKKyAgICAgICAgYXZfY21wX3EoY3R4LT5pbnB1dHNbMV0tPnRpbWVfYmFzZSwgb3V0bGluay0+ dGltZV9iYXNlKSkKKyAgICAgICAgYXZfbG9nIChjdHgsIEFWX0xPR19XQVJOSU5HLCAiTm90IG1h dGNoaW5nIHRpbWViYXNlcyBmb3VuZCBiZXR3ZWVuIGZpcnN0IgorICAgICAgICAgICAgICAgICIg aW5wdXQ6ICVkLyVkIGFuZCBzZWNvbmQgaW5wdXQgJWQvJWQsIHJlc3VsdHMgbWF5IGJlIGluY29y cmVjdCFcbiIsCisgICAgICAgICAgICAgICAgaW5saW5rLT50aW1lX2Jhc2UubnVtLCBpbmxpbmst PnRpbWVfYmFzZS5kZW4sCisgICAgICAgICAgICAgICAgY3R4LT5pbnB1dHNbMV0tPnRpbWVfYmFz ZS5udW0sIGN0eC0+aW5wdXRzWzFdLT50aW1lX2Jhc2UuZGVuKTsKKworICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGFjdGl2YXRlKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIFhQ U05SQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKworICAgIHJldHVybiBmZl9mcmFtZXN5bmNfYWN0 aXZhdGUoJnMtPmZzKTsKK30KKworc3RhdGljIGF2X2NvbGQgdm9pZCB1bmluaXQoQVZGaWx0ZXJD b250ZXh0ICpjdHgpCit7CisgICAgWFBTTlJDb250ZXh0ICpjb25zdCBzID0gY3R4LT5wcml2Owor ICAgIGludCBjOworCisgICAgaWYgKHMtPm51bV9mcmFtZXNfNjQgPiAwKSB7IC8qIHByaW50IG91 dCBvdmVyYWxsIGNvbXBvbmVudC13aXNlIG1lYW4gWFBTTlIgKi8KKyAgICAgICAgY29uc3QgZG91 YmxlIHhwc25yX2x1bWEgPSBnZXRfYXZnX3hwc25yKHMtPnN1bV93ZGlzdFswXSwgICBzLT5zdW1f eHBzbnJbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLT5wbGFuZV93aWR0aFswXSwgcy0+cGxhbmVfaGVpZ2h0WzBdLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bWF4X2Vycm9yXzY0LCAgIHMtPm51 bV9mcmFtZXNfNjQpOworICAgICAgICBkb3VibGUgeHBzbnJfbWluID0geHBzbnJfbHVtYTsKKwor ICAgICAgICAvKiBsdW1hICovCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiWFBT TlIgICVjOiAlMy40ZiIsIHMtPmNvbXBzWzBdLCB4cHNucl9sdW1hKTsKKyAgICAgICAgaWYgKHMt PnN0YXRzX2ZpbGUpIHsKKyAgICAgICAgICAgIGZwcmludGYocy0+c3RhdHNfZmlsZSwgIlxuWFBT TlIgYXZlcmFnZSwgJSJQUklkNjQiIGZyYW1lcyIsIHMtPm51bV9mcmFtZXNfNjQpOworICAgICAg ICAgICAgZnByaW50ZihzLT5zdGF0c19maWxlLCAiICAlYzogJTMuNGYiLCBzLT5jb21wc1swXSwg eHBzbnJfbHVtYSk7CisgICAgICAgIH0KKyAgICAgICAgLyogY2hyb21hICovCisgICAgICAgIGZv ciAoYyA9IDE7IGMgPCBzLT5udW1fY29tcHM7IGMrKykgeworICAgICAgICAgICAgY29uc3QgZG91 YmxlIHhwc25yX2Nocm9tYSA9IGdldF9hdmdfeHBzbnIocy0+c3VtX3dkaXN0W2NdLCAgIHMtPnN1 bV94cHNucltjXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMtPnBsYW5lX3dpZHRoW2NdLCBzLT5wbGFuZV9oZWlnaHRbY10sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5tYXhfZXJy b3JfNjQsICAgcy0+bnVtX2ZyYW1lc182NCk7CisgICAgICAgICAgICBpZiAoeHBzbnJfbWluID4g eHBzbnJfY2hyb21hKQorICAgICAgICAgICAgICAgIHhwc25yX21pbiA9IHhwc25yX2Nocm9tYTsK KworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICIgICVjOiAlMy40ZiIsIHMt PmNvbXBzW2NdLCB4cHNucl9jaHJvbWEpOworICAgICAgICAgICAgaWYgKHMtPnN0YXRzX2ZpbGUg JiYgcy0+c3RhdHNfZmlsZSAhPSBzdGRvdXQpCisgICAgICAgICAgICAgICAgZnByaW50ZihzLT5z dGF0c19maWxlLCAiICAlYzogJTMuNGYiLCBzLT5jb21wc1tjXSwgeHBzbnJfY2hyb21hKTsKKyAg ICAgICAgfQorICAgICAgICAvKiBwcmludCBvdXQgbGluZSBicmVhaywgYW5kIG1pbmltdW0gWFBT TlIgYWNyb3NzIHRoZSBjb2xvciBjb21wb25lbnRzICovCisgICAgICAgIGlmIChzLT5udW1fY29t cHMgPiAxKSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIiAgKG1pbmlt dW06ICUzLjRmKVxuIiwgeHBzbnJfbWluKTsKKyAgICAgICAgICAgIGlmIChzLT5zdGF0c19maWxl ICYmIHMtPnN0YXRzX2ZpbGUgIT0gc3Rkb3V0KQorICAgICAgICAgICAgICAgIGZwcmludGYocy0+ c3RhdHNfZmlsZSwgIiAgKG1pbmltdW06ICUzLjRmKVxuIiwgeHBzbnJfbWluKTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiXG4iKTsKKyAg ICAgICAgICAgIGlmIChzLT5zdGF0c19maWxlICYmIHMtPnN0YXRzX2ZpbGUgIT0gc3Rkb3V0KQor ICAgICAgICAgICAgICAgIGZwcmludGYocy0+c3RhdHNfZmlsZSwgIlxuIik7CisgICAgICAgIH0K KyAgICB9CisKKyAgICBmZl9mcmFtZXN5bmNfdW5pbml0KCZzLT5mcyk7IC8qIGZyZWUgdGVtcG9y YXJ5IHBpY3R1cmUgb3IgYmxvY2sgYnVmIG1lbW9yeSAqLworCisgICAgaWYgKHMtPnN0YXRzX2Zp bGUgJiYgcy0+c3RhdHNfZmlsZSAhPSBzdGRvdXQpCisgICAgICAgIGZjbG9zZShzLT5zdGF0c19m aWxlKTsKKworICAgIGlmIChzLT5zc2VfbHVtYSkKKyAgICAgICAgYXZfZnJlZXAoJnMtPnNzZV9s dW1hKTsKKyAgICBpZiAocy0+d2VpZ2h0cyApCisgICAgICAgIGF2X2ZyZWVwKCZzLT53ZWlnaHRz ICk7CisKKyAgICBmb3IgKGMgPSAwOyBjIDwgcy0+bnVtX2NvbXBzOyBjKyspIHsgLyogZnJlZSBl eHRyYSB0ZW1wb3JhbCBvcmcgYnVmIG1lbW9yeSAqLworICAgICAgICBpZiAocy0+YnVmX29yZ19t MVtjXSkKKyAgICAgICAgICAgIGF2X2ZyZWVwKHMtPmJ1Zl9vcmdfbTFbY10pOworICAgICAgICBp ZiAocy0+YnVmX29yZ19tMltjXSkKKyAgICAgICAgICAgIGF2X2ZyZWVwKHMtPmJ1Zl9vcmdfbTJb Y10pOworICAgIH0KKyAgICBpZiAocy0+YnBwID09IDEpIHsgLyogOCBiaXQgKi8KKyAgICAgICAg Zm9yIChjID0gMDsgYyA8IHMtPm51bV9jb21wczsgYysrKSB7IC8qIGFuZCBvcmcvcmVjIHBpY3R1 cmUgYnVmIG1lbW9yeSAqLworICAgICAgICAgICAgaWYgKHMtPmJ1Zl9vcmdbY10pCisgICAgICAg ICAgICAgICAgYXZfZnJlZXAocy0+YnVmX29yZ1tjXSk7CisgICAgICAgICAgICBpZiAocy0+YnVm X3JlY1tjXSkKKyAgICAgICAgICAgICAgICBhdl9mcmVlcChzLT5idWZfcmVjW2NdKTsKKyAgICAg ICAgfQorICAgIH0KK30KKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIHhwc25yX2lucHV0c1td ID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJtYWluIiwKKyAgICAgICAgLnR5 cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICB9LCB7CisgICAgICAgIC5uYW1l ICAgICAgICAgPSAicmVmZXJlbmNlIiwKKyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFf VFlQRV9WSURFTywKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9IGNvbmZpZ19pbnB1dF9yZWYsCisg ICAgfQorfTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIHhwc25yX291dHB1dHNbXSA9IHsK KyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBl ICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5jb25maWdfcHJvcHMgPSBj b25maWdfb3V0cHV0LAorICAgIH0KK307CisKK2NvbnN0IEFWRmlsdGVyIGZmX3ZmX3hwc25yID0g eworICAgIC5uYW1lICAgICAgICAgPSAieHBzbnIiLAorICAgIC5kZXNjcmlwdGlvbiAgPSBOVUxM X0lGX0NPTkZJR19TTUFMTCgiQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBwZXJjZXB0dWFsbHkgd2Vp Z2h0ZWQgcGVhayBzaWduYWwtdG8tbm9pc2UgcmF0aW8gKFhQU05SKSBiZXR3ZWVuIHR3byB2aWRl byBzdHJlYW1zLiIpLAorICAgIC5wcmVpbml0ICAgICAgPSB4cHNucl9mcmFtZXN5bmNfcHJlaW5p dCwKKyAgICAuaW5pdCAgICAgICAgID0gaW5pdCwKKyAgICAudW5pbml0ICAgICAgID0gdW5pbml0 LAorICAgIC5hY3RpdmF0ZSAgICAgPSBhY3RpdmF0ZSwKKyAgICAucHJpdl9zaXplICAgID0gc2l6 ZW9mKFhQU05SQ29udGV4dCksCisgICAgLnByaXZfY2xhc3MgICA9ICZ4cHNucl9jbGFzcywKKyAg ICBGSUxURVJfSU5QVVRTICh4cHNucl9pbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKHhwc25y X291dHB1dHMpLAorICAgIEZJTFRFUl9QSVhGTVRTX0FSUkFZKHhwc25yX2Zvcm1hdHMpLAorICAg IC5mbGFncyAgICAgICAgPSBBVkZJTFRFUl9GTEFHX1NVUFBPUlRfVElNRUxJTkVfSU5URVJOQUwg fCBBVkZJTFRFUl9GTEFHX01FVEFEQVRBX09OTFkKK307CmRpZmYgLS1naXQgYS9saWJhdmZpbHRl ci94ODYvTWFrZWZpbGUgYi9saWJhdmZpbHRlci94ODYvTWFrZWZpbGUKaW5kZXggYzA1MDAwZDdm ZC4uNDBkNWI3OTBhYyAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIveDg2L01ha2VmaWxlCisrKyBi L2xpYmF2ZmlsdGVyL3g4Ni9NYWtlZmlsZQpAQCAtNDAsNiArNDAsNyBAQCBPQkpTLSQoQ09ORklH X1RSQU5TUE9TRV9GSUxURVIpICAgICAgICAgICAgICArPSB4ODYvdmZfdHJhbnNwb3NlX2luaXQu bwogT0JKUy0kKENPTkZJR19WT0xVTUVfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0geDg2L2Fm X3ZvbHVtZV9pbml0Lm8KIE9CSlMtJChDT05GSUdfVjM2MF9GSUxURVIpICAgICAgICAgICAgICAg ICAgICs9IHg4Ni92Zl92MzYwX2luaXQubwogT0JKUy0kKENPTkZJR19XM0ZESUZfRklMVEVSKSAg ICAgICAgICAgICAgICAgKz0geDg2L3ZmX3czZmRpZl9pbml0Lm8KK09CSlMtJChDT05GSUdfWFBT TlJfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHg4Ni92Zl94cHNucl9pbml0Lm8KIE9CSlMt JChDT05GSUdfWUFESUZfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHg4Ni92Zl95YWRpZl9p bml0Lm8KCiBYODZBU00tT0JKUy0kKENPTkZJR19TQ0VORV9TQUQpICAgICAgICAgICAgICArPSB4 ODYvc2NlbmVfc2FkLm8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3g4Ni92Zl94cHNucl9pbml0 LmMgYi9saWJhdmZpbHRlci94ODYvdmZfeHBzbnJfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmQzMzY1N2RjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZp bHRlci94ODYvdmZfeHBzbnJfaW5pdC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIDIwMjQgQ2hyaXN0aWFuIFIuIEhlbG1yaWNoCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQg Q2hyaXN0aWFuIExlaG1hbm4KKyAqIENvcHlyaWdodCAoYykgMjAyNCBDaHJpc3RpYW4gU3RvZmZl cnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmls ZQorICogU0lNRCBpbml0aWFsaXphdGlvbiBmb3IgY2FsY3VsYXRpb24gb2YgZXh0ZW5kZWQgcGVy Y2VwdHVhbGx5IHdlaWdodGVkIFBTTlIgKFhQU05SKS4KKyAqCisgKiBBdXRob3JzOiBDaHJpc3Rp YW4gSGVsbXJpY2gsIExlaG1hbm4sIGFuZCBTdG9mZmVycywgRnJhdW5ob2ZlciBISEksIEJlcmxp biwgR2VybWFueQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwveDg2L2NwdS5oIgorI2luY2x1 ZGUgImxpYmF2ZmlsdGVyL3hwc25yLmgiCisKK3VpbnQ2NF90IGZmX3NzZV9saW5lXzE2Yml0X3Nz ZTIoY29uc3QgdWludDhfdCAqYnVmLCBjb25zdCB1aW50OF90ICpyZWYsIGNvbnN0IGludCB3KTsK Kwordm9pZCBmZl94cHNucl9pbml0X3g4NihQU05SRFNQQ29udGV4dCAqZHNwLCBjb25zdCBpbnQg YnBwKQoreworICAgIGlmIChicHAgPD0gMTUpIHsgLyogWFBTTlIgYWx3YXlzIG9wZXJhdGVzIHdp dGggMTYtYml0IGludGVybmFsIHByZWNpc2lvbiAqLworICAgICAgICBjb25zdCBpbnQgY3B1X2Zs YWdzID0gYXZfZ2V0X2NwdV9mbGFncygpOworCisgICAgICAgIGlmIChFWFRFUk5BTF9TU0UyKGNw dV9mbGFncykpCisgICAgICAgICAgICBkc3AtPnNzZV9saW5lID0gZmZfc3NlX2xpbmVfMTZiaXRf c3NlMjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci94cHNuci5oIGIvbGliYXZm aWx0ZXIveHBzbnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lYjE0 ZTE2MDYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIveHBzbnIuaApAQCAtMCwwICsx LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDI0IENocmlzdGlhbiBSLiBIZWxtcmljaAor ICogQ29weXJpZ2h0IChjKSAyMDI0IENocmlzdGlhbiBMZWhtYW5uCisgKiBDb3B5cmlnaHQgKGMp IDIwMjQgQ2hyaXN0aWFuIFN0b2ZmZXJzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QQorICovCisKKy8qKgorICogQGZpbGUKKyAqIFB1YmxpYyBkZWNsYXJhdGlvbiBvZiBEU1AgY29u dGV4dCBzdHJ1Y3R1cmUgb2YgWFBTTlIgbWVhc3VyZW1lbnQgZmlsdGVyIGZvciBGRm1wZWcuCisg KgorICogQXV0aG9yczogQ2hyaXN0aWFuIEhlbG1yaWNoLCBMZWhtYW5uLCBhbmQgU3RvZmZlcnMs IEZyYXVuaG9mZXIgSEhJLCBCZXJsaW4sIEdlcm1hbnkKKyAqLworCisjaWZuZGVmIEFWRklMVEVS X1hQU05SX0gKKyNkZWZpbmUgQVZGSUxURVJfWFBTTlJfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+ CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAibGliYXZ1dGlsL3g4Ni9jcHUuaCIKKwor LyogcHVibGljIFhQU05SIERTUCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAqLworCit0eXBlZGVmIHN0 cnVjdCBYUFNOUkRTUENvbnRleHQgeworICAgIHVpbnQ2NF90ICgqc3NlX2xpbmUpIChjb25zdCB1 aW50OF90ICpidWYsIGNvbnN0IHVpbnQ4X3QgKnJlZiwgY29uc3QgaW50IHcpOworICAgIHVpbnQ2 NF90ICgqaGlnaGRzX2Z1bmMpIChjb25zdCBpbnQgeF9hY3QsIGNvbnN0IGludCB5X2FjdCwgY29u c3QgaW50IHdfYWN0LCBjb25zdCBpbnQgaF9hY3QsIGNvbnN0IGludDE2X3QgKm9fbTAsIGNvbnN0 IGludCBvKTsKKyAgICB1aW50NjRfdCAoKmRpZmYxc3RfZnVuYykoY29uc3QgdWludDMyX3Qgd19h Y3QsIGNvbnN0IHVpbnQzMl90IGhfYWN0LCBjb25zdCBpbnQxNl90ICpvX20wLCBpbnQxNl90ICpv X20xLCBjb25zdCBpbnQgbyk7CisgICAgdWludDY0X3QgKCpkaWZmMm5kX2Z1bmMpKGNvbnN0IHVp bnQzMl90IHdfYWN0LCBjb25zdCB1aW50MzJfdCBoX2FjdCwgY29uc3QgaW50MTZfdCAqb19tMCwg aW50MTZfdCAqb19tMSwgaW50MTZfdCAqb19tMiwgY29uc3QgaW50IG8pOworfSBQU05SRFNQQ29u dGV4dDsKKwordm9pZCBmZl94cHNucl9pbml0X3g4NihQU05SRFNQQ29udGV4dCAqZHNwLCBjb25z dCBpbnQgYnBwKTsKKworI2VuZGlmIC8qIEFWRklMVEVSX1hQU05SX0ggKi8KLS0KMi40My4wCg== --_004_9aab9416fa7c4aec9b49cc6a9461280bhhifraunhoferde_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --_004_9aab9416fa7c4aec9b49cc6a9461280bhhifraunhoferde_--