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 8E83145971 for ; Thu, 30 Mar 2023 23:26:58 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 30F2E68C2F6; Fri, 31 Mar 2023 02:26:56 +0300 (EEST) Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6C11C68C25A for ; Fri, 31 Mar 2023 02:26:50 +0300 (EEST) Received: by mail-pl1-f179.google.com with SMTP id o2so19632610plg.4 for ; Thu, 30 Mar 2023 16:26:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sandflow-com.20210112.gappssmtp.com; s=20210112; t=1680218808; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=//jyCFHiHs00JHNu59oQhCXpsGgtzXypsIR6GB4UzOg=; b=H4mhBgp3BRffERfmuAAVAkhtXxcBgpJUle51BIkoKf/PvUEMLeSpDRb3Fb64faTMgD xHxVceIOjYWNg/fywRdQLgXwGoW5nYpLjxiKiRz0qyDQW23q/etF7R152fSAqzzUs4RU Xj1y2NakfHtaCtcm50uuHksPKcq0Ko2gdnQYu0DrMeenm5fasxscNprvrzs+0O+rirWA 9UrHp1Xcs7btjbqdMVrYanYd+eg1AByzZtrNVFSrCr/AVfRrfrUbXWmx7d9xwSyJYupy rUfY7fZqjnZw/d00HRMtnRQQ5MIjUdFMhHwXTas5qKAA0FxRV39x86WSHbDtSeP87OO2 TWNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680218808; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=//jyCFHiHs00JHNu59oQhCXpsGgtzXypsIR6GB4UzOg=; b=q/HTofmheEWRrsnuU9jHzkEQW2jnvvkTVoonRxj8HbdS/d9fFMwX7dPCeaYzkiqEpB v8CzoeRaOAyRph18Gt7l5w1/eKdNZnAbaouNH1tqJuuflokBPozpSHS69bsYf4EFPqBR RjMw0uLI/62aGK0rYuI0J2kjg6b3pY6Dr52Ef2fI6qQ0pCHklakUYLrSa+ixGKQzapMA tSBaK3whH27Pz4siaGUnBl7uozEizgZn2Brf/FFnZSGETmODiCBOR/idIL/6xvwbQnQO aKRMKvbKRWg/I8IhP70j+Yl4PSANpSa2TZqvQYKdj3JD5E2Ret4uzC7eUGk+Mols+SJp OMxA== X-Gm-Message-State: AAQBX9fekVaicsPTBHsUDopsBEmmXlKPD3Uzp/FXkXgtvnz83Zgoliq6 3lqfI+FIYyLxIVsMynxTHfVFGhKJ8xmcEJKEAIU= X-Google-Smtp-Source: AKy350aqcv3RLb3qly4rYKsy8UAiV0FPqqosZxTjN4wptwzaLDNWszTYtS3yjrtIsapwF4shmCh9AQ== X-Received: by 2002:a17:90a:18e:b0:237:24eb:99d8 with SMTP id 14-20020a17090a018e00b0023724eb99d8mr27658217pjc.19.1680218807580; Thu, 30 Mar 2023 16:26:47 -0700 (PDT) Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com. [209.85.216.46]) by smtp.gmail.com with ESMTPSA id f12-20020a17090a4a8c00b0023b3d80c76csm212425pjh.4.2023.03.30.16.26.47 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 30 Mar 2023 16:26:47 -0700 (PDT) Received: by mail-pj1-f46.google.com with SMTP id qe8-20020a17090b4f8800b0023f07253a2cso21467481pjb.3 for ; Thu, 30 Mar 2023 16:26:47 -0700 (PDT) X-Received: by 2002:a17:90a:6b0c:b0:240:d544:93c with SMTP id v12-20020a17090a6b0c00b00240d544093cmr796538pjj.1.1680218806264; Thu, 30 Mar 2023 16:26:46 -0700 (PDT) MIME-Version: 1.0 References: <20230330231441.8868-1-michael@niedermayer.cc> <20230330231441.8868-3-michael@niedermayer.cc> In-Reply-To: <20230330231441.8868-3-michael@niedermayer.cc> From: Pierre-Anthony Lemieux Date: Thu, 30 Mar 2023 16:26:34 -0700 X-Gmail-Original-Message-ID: Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc 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: T24gVGh1LCBNYXIgMzAsIDIwMjMgYXQgNDoxNeKAr1BNIE1pY2hhZWwgTmllZGVybWF5ZXIKPG1p Y2hhZWxAbmllZGVybWF5ZXIuY2M+IHdyb3RlOgo+Cj4gRkZtcGVnIGhhcyBpdHMgb3duIGpwZWcy MDAwIGVuY29kZXIKPiBUaGlzIGF2b2lkcyBhIGRlcGVuZGVuY3kKPgo+IFRoaXMgaXMgbm90IHJl YWR5IHlldCBhcyB3ZSBzdGlsbCBtaXNzIHh5eiAvIHlhIHBpeGVsIGZvcm1hdHMsIGFuZCBzb21l IGNpbmFtYSBzdHVmZiwgYnV0Cj4gaXQgc2VlbXMgdGhpcyBzaG91bGQgYmUgdGhlIGRpcmVjdGlv biB0byBhaW0gYXQuIEFuZCBpdCBzZWVtcyB0aGVyZSBpcyBub3QgbXVjaCBtaXNzaW5nCgpTdXBw b3J0IGZvciBQYXJ0IDE1IGlzIG1pc3NpbmcuCgpJIHBsYW4gdG8gY2xlYW4tdXAgdGhlIG91dHN0 YW5kaW5nIHBhdGNoc2V0cyBhcyBkZXRhaWxlZCBhdCBbMV0gYW5kCnN1Ym1pdCBmb3IgcmV2aWV3 IG5vIGxhdGVyIHRoYW4gU3VuZGF5LgoKWzFdIGh0dHA6Ly9mZm1wZWcub3JnL3BpcGVybWFpbC9m Zm1wZWctZGV2ZWwvMjAyMy1NYXJjaC8zMDc2MTQuaHRtbAoKPgo+IFNpZ25lZC1vZmYtYnk6IE1p Y2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxAbmllZGVybWF5ZXIuY2M+Cj4gLS0tCj4gIGNvbmZp Z3VyZSAgICAgICAgICAgICAgICAgICB8ICAgNSAtCj4gIGRvYy9nZW5lcmFsX2NvbnRlbnRzLnRl eGkgICB8ICAgNyAtCj4gIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAgICAgICB8ICAgMSAtCj4gIGxp YmF2Y29kZWMvYWxsY29kZWNzLmMgICAgICB8ICAgMSAtCj4gIGxpYmF2Y29kZWMvbGlib3Blbmpw ZWdlbmMuYyB8IDc5MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgNSBm aWxlcyBjaGFuZ2VkLCA4MDQgZGVsZXRpb25zKC0pCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJh dmNvZGVjL2xpYm9wZW5qcGVnZW5jLmMKPgo+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25m aWd1cmUKPiBpbmRleCBhYTcyYWFlZjZiMC4uMmYwMWVlOGEyMTQgMTAwNzU1Cj4gLS0tIGEvY29u ZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTI1Miw3ICsyNTIsNiBAQCBFeHRlcm5hbCBs aWJyYXJ5IHN1cHBvcnQ6Cj4gICAgLS1lbmFibGUtbGlib3BlbmNvcmUtYW1yd2IgZW5hYmxlIEFN Ui1XQiBkZWNvZGluZyB2aWEgbGlib3BlbmNvcmUtYW1yd2IgW25vXQo+ICAgIC0tZW5hYmxlLWxp Ym9wZW5jdiAgICAgICBlbmFibGUgdmlkZW8gZmlsdGVyaW5nIHZpYSBsaWJvcGVuY3YgW25vXQo+ ICAgIC0tZW5hYmxlLWxpYm9wZW5oMjY0ICAgICBlbmFibGUgSC4yNjQgZW5jb2RpbmcgdmlhIE9w ZW5IMjY0IFtub10KPiAtICAtLWVuYWJsZS1saWJvcGVuanBlZyAgICAgZW5hYmxlIEpQRUcgMjAw MCBkZS9lbmNvZGluZyB2aWEgT3BlbkpQRUcgW25vXQo+ICAgIC0tZW5hYmxlLWxpYm9wZW5tcHQg ICAgICBlbmFibGUgZGVjb2RpbmcgdHJhY2tlZCBmaWxlcyB2aWEgbGlib3Blbm1wdCBbbm9dCj4g ICAgLS1lbmFibGUtbGlib3BlbnZpbm8gICAgIGVuYWJsZSBPcGVuVklOTyBhcyBhIEROTiBtb2R1 bGUgYmFja2VuZAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgRE5OIGJhc2VkIGZp bHRlcnMgbGlrZSBkbm5fcHJvY2Vzc2luZyBbbm9dCj4gQEAgLTE4MzQsNyArMTgzMyw2IEBAIEVY VEVSTkFMX0xJQlJBUllfTElTVD0iCj4gICAgICBsaWJteXNvZmEKPiAgICAgIGxpYm9wZW5jdgo+ ICAgICAgbGlib3BlbmgyNjQKPiAtICAgIGxpYm9wZW5qcGVnCj4gICAgICBsaWJvcGVubXB0Cj4g ICAgICBsaWJvcGVudmlubwo+ICAgICAgbGlib3B1cwo+IEBAIC0zMzY0LDcgKzMzNjIsNiBAQCBs aWJvcGVuY29yZV9hbXJ3Yl9kZWNvZGVyX2RlcHM9ImxpYm9wZW5jb3JlX2FtcndiIgo+ICBsaWJv cGVuaDI2NF9kZWNvZGVyX2RlcHM9ImxpYm9wZW5oMjY0Igo+ICBsaWJvcGVuaDI2NF9kZWNvZGVy X3NlbGVjdD0iaDI2NF9tcDR0b2FubmV4Yl9ic2YiCj4gIGxpYm9wZW5oMjY0X2VuY29kZXJfZGVw cz0ibGlib3BlbmgyNjQiCj4gLWxpYm9wZW5qcGVnX2VuY29kZXJfZGVwcz0ibGlib3BlbmpwZWci Cj4gIGxpYm9wZW5tcHRfZGVtdXhlcl9kZXBzPSJsaWJvcGVubXB0Igo+ICBsaWJvcHVzX2RlY29k ZXJfZGVwcz0ibGlib3B1cyIKPiAgbGlib3B1c19lbmNvZGVyX2RlcHM9ImxpYm9wdXMiCj4gQEAg LTY2NTksOCArNjY1Niw2IEBAIGVuYWJsZWQgbGlib3BlbmN2ICAgICAgICAgJiYgeyBjaGVja19o ZWFkZXJzIG9wZW5jdjIvY29yZS9jb3JlX2MuaCAmJgo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXF1aXJlIGxpYm9wZW5jdiBvcGVuY3YyL2NvcmUvY29yZV9jLmggY3ZDcmVh dGVJbWFnZUhlYWRlciAtbG9wZW5jdl9jb3JlIC1sb3BlbmN2X2ltZ3Byb2M7IH0gfHwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJvcGVuY3Yg b3BlbmN2IG9wZW5jdi9jeGNvcmUuaCBjdkNyZWF0ZUltYWdlSGVhZGVyOyB9Cj4gIGVuYWJsZWQg bGlib3BlbmgyNjQgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYm9wZW5oMjY0IG9wZW5o MjY0IHdlbHMvY29kZWNfYXBpLmggV2Vsc0dldENvZGVjVmVyc2lvbgo+IC1lbmFibGVkIGxpYm9w ZW5qcGVnICAgICAgICYmIHsgY2hlY2tfcGtnX2NvbmZpZyBsaWJvcGVuanBlZyAibGlib3Blbmpw MiA+PSAyLjEuMCIgb3BlbmpwZWcuaCBvcGpfdmVyc2lvbiB8fAo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeyByZXF1aXJlX3BrZ19jb25maWcgbGlib3BlbmpwZWcgImxpYm9wZW5q cDIgPj0gMi4xLjAiIG9wZW5qcGVnLmggb3BqX3ZlcnNpb24gLURPUEpfU1RBVElDICYmIGFkZF9j cHBmbGFncyAtRE9QSl9TVEFUSUM7IH0gfQo+ICBlbmFibGVkIGxpYm9wZW5tcHQgICAgICAgICYm IHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJvcGVubXB0ICJsaWJvcGVubXB0ID49IDAuMi42NTU3IiBs aWJvcGVubXB0L2xpYm9wZW5tcHQuaCBvcGVubXB0X21vZHVsZV9jcmVhdGUgLWxzdGRjKysgJiYg YXBwZW5kIGxpYm9wZW5tcHRfZXh0cmFsaWJzICItbHN0ZGMrKyIKPiAgZW5hYmxlZCBsaWJvcGVu dmlubyAgICAgICAmJiByZXF1aXJlIGxpYm9wZW52aW5vIGNfYXBpL2llX2NfYXBpLmggaWVfY19h cGlfdmVyc2lvbiAtbGluZmVyZW5jZV9lbmdpbmVfY19hcGkKPiAgZW5hYmxlZCBsaWJvcHVzICAg ICAgICAgICAmJiB7Cj4gZGlmZiAtLWdpdCBhL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkgYi9k b2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpCj4gaW5kZXggMmVlZWJkODQ3ZGEuLjBkMjk1ZDdiZjkx IDEwMDY0NAo+IC0tLSBhL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkKPiArKysgYi9kb2MvZ2Vu ZXJhbF9jb250ZW50cy50ZXhpCj4gQEAgLTI1MiwxMyArMjUyLDYgQEAgY29uc3RyYWluZWQgYmFz ZWxpbmUgcHJvZmlsZSBhbmQgQ0FCQUMuKSBVc2luZyBpdCBpcyBtb3N0bHkgdXNlZnVsIGZvcgo+ ICB0ZXN0aW5nIGFuZCBmb3IgdGFraW5nIGFkdmFudGFnZSBvZiBDaXNjbydzIHBhdGVudCBwb3J0 Zm9saW8gbGljZW5zZQo+ICAoQHVybHtodHRwOi8vd3d3Lm9wZW5oMjY0Lm9yZy9CSU5BUllfTElD RU5TRS50eHR9KS4KPgo+IC1Ac2VjdGlvbiBPcGVuSlBFRwo+IC0KPiAtRkZtcGVnIGNhbiB1c2Ug dGhlIE9wZW5KUEVHIGxpYnJhcmllcyBmb3IgZGVjb2RpbmcvZW5jb2RpbmcgSjJLIHZpZGVvcy4g IEdvIHRvCj4gLUB1cmx7aHR0cDovL3d3dy5vcGVuanBlZy5vcmcvfSB0byBnZXQgdGhlIGxpYnJh cmllcyBhbmQgZm9sbG93IHRoZSBpbnN0YWxsYXRpb24KPiAtaW5zdHJ1Y3Rpb25zLiAgVG8gZW5h YmxlIHVzaW5nIE9wZW5KUEVHIGluIEZGbXBlZywgcGFzcyBAY29kZXstLWVuYWJsZS1saWJvcGVu anBlZ30gdG8KPiAtQGZpbGV7Li9jb25maWd1cmV9Lgo+IC0KPiAgQHNlY3Rpb24gcmF2MWUKPgo+ ICBGRm1wZWcgY2FuIG1ha2UgdXNlIG9mIHJhdjFlIChSdXN0IEFWMSBFbmNvZGVyKSB2aWEgaXRz IEMgYmluZGluZ3MgdG8gZW5jb2RlIHZpZGVvcy4KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9N YWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiBpbmRleCBiMzA3NDdmZGI5OS4uMjZjNjk1 Yjc3ZTYgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2Y29k ZWMvTWFrZWZpbGUKPiBAQCAtMTEwMiw3ICsxMTAyLDYgQEAgT0JKUy0kKENPTkZJR19MSUJPUEVO Q09SRV9BTVJOQl9FTkNPREVSKSAgKz0gbGlib3BlbmNvcmUtYW1yLm8KPiAgT0JKUy0kKENPTkZJ R19MSUJPUEVOQ09SRV9BTVJXQl9ERUNPREVSKSAgKz0gbGlib3BlbmNvcmUtYW1yLm8KPiAgT0JK Uy0kKENPTkZJR19MSUJPUEVOSDI2NF9ERUNPREVSKSAgICAgICAgKz0gbGlib3BlbmgyNjRkZWMu byBsaWJvcGVuaDI2NC5vCj4gIE9CSlMtJChDT05GSUdfTElCT1BFTkgyNjRfRU5DT0RFUikgICAg ICAgICs9IGxpYm9wZW5oMjY0ZW5jLm8gbGlib3BlbmgyNjQubwo+IC1PQkpTLSQoQ09ORklHX0xJ Qk9QRU5KUEVHX0VOQ09ERVIpICAgICAgICArPSBsaWJvcGVuanBlZ2VuYy5vCj4gIE9CSlMtJChD T05GSUdfTElCT1BVU19ERUNPREVSKSAgICAgICAgICAgICs9IGxpYm9wdXNkZWMubyBsaWJvcHVz Lm8gICAgIFwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9yYmlzX2RhdGEubwo+ICBPQkpTLSQoQ09ORklHX0xJQk9QVVNfRU5DT0RFUikgICAgICAgICAg ICArPSBsaWJvcHVzZW5jLm8gbGlib3B1cy5vICAgICBcCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29k ZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gaW5kZXggYWFiZmE5YmU1 MGYuLmUxMzYxNGY3ODZmIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiAr KysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gQEAgLTc4MSw3ICs3ODEsNiBAQCBleHRlcm4g Y29uc3QgRkZDb2RlYyBmZl9saWJtcDNsYW1lX2VuY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNv ZGVjIGZmX2xpYm9wZW5jb3JlX2Ftcm5iX2VuY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVj IGZmX2xpYm9wZW5jb3JlX2Ftcm5iX2RlY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZm X2xpYm9wZW5jb3JlX2FtcndiX2RlY29kZXI7Cj4gLWV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xp Ym9wZW5qcGVnX2VuY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYm9wdXNfZW5j b2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlib3B1c19kZWNvZGVyOwo+ICBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9saWJyYXYxZV9lbmNvZGVyOwo+IGRpZmYgLS1naXQgYS9saWJh dmNvZGVjL2xpYm9wZW5qcGVnZW5jLmMgYi9saWJhdmNvZGVjL2xpYm9wZW5qcGVnZW5jLmMKPiBk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDljN2E0Mzc3NC4uMDAwMDAwMDAwMDAK PiAtLS0gYS9saWJhdmNvZGVjL2xpYm9wZW5qcGVnZW5jLmMKPiArKysgL2Rldi9udWxsCj4gQEAg LTEsNzkwICswLDAgQEAKPiAtLyoKPiAtICogSlBFRyAyMDAwIGVuY29kaW5nIHN1cHBvcnQgdmlh IE9wZW5KUEVHCj4gLSAqIENvcHlyaWdodCAoYykgMjAxMSBNaWNoYWVsIEJyYWRzaGF3IDxtamJz aGF3IGdtYWlsIGNvbT4KPiAtICoKPiAtICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ IC0gKgo+IC0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCj4gLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKPiAtICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+IC0gKgo+IC0gKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK PiAtICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKPiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiAtICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAtICoKPiAtICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+IC0gKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4g LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiAtICovCj4gLQo+IC0vKioKPiAtICogQGZpbGUKPiAt ICogSlBFRyAyMDAwIGVuY29kZXIgdXNpbmcgbGlib3BlbmpwZWcKPiAtICovCj4gLQo+IC0jaW5j bHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgo+IC0jaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxz LmgiCj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCj4gLSNpbmNsdWRlICJs aWJhdnV0aWwvb3B0LmgiCj4gLSNpbmNsdWRlICJhdmNvZGVjLmgiCj4gLSNpbmNsdWRlICJjb2Rl Y19pbnRlcm5hbC5oIgo+IC0jaW5jbHVkZSAiZW5jb2RlLmgiCj4gLSNpbmNsdWRlIDxvcGVuanBl Zy5oPgo+IC0KPiAtdHlwZWRlZiBzdHJ1Y3QgTGliT3BlbkpQRUdDb250ZXh0IHsKPiAtICAgIEFW Q2xhc3MgKmF2Y2xhc3M7Cj4gLSAgICBvcGpfY3BhcmFtZXRlcnNfdCBlbmNfcGFyYW1zOwo+IC0g ICAgaW50IGZvcm1hdDsKPiAtICAgIGludCBwcm9maWxlOwo+IC0gICAgaW50IHByb2dfb3JkZXI7 Cj4gLSAgICBpbnQgY2luZW1hX21vZGU7Cj4gLSAgICBpbnQgbnVtcmVzb2x1dGlvbjsKPiAtICAg IGludCBpcnJldmVyc2libGU7Cj4gLSAgICBpbnQgZGlzdG9fYWxsb2M7Cj4gLSAgICBpbnQgZml4 ZWRfcXVhbGl0eTsKPiAtfSBMaWJPcGVuSlBFR0NvbnRleHQ7Cj4gLQo+IC1zdGF0aWMgdm9pZCBl cnJvcl9jYWxsYmFjayhjb25zdCBjaGFyICptc2csIHZvaWQgKmRhdGEpCj4gLXsKPiAtICAgIGF2 X2xvZyhkYXRhLCBBVl9MT0dfRVJST1IsICIlc1xuIiwgbXNnKTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgd2FybmluZ19jYWxsYmFjayhjb25zdCBjaGFyICptc2csIHZvaWQgKmRhdGEpCj4gLXsK PiAtICAgIGF2X2xvZyhkYXRhLCBBVl9MT0dfV0FSTklORywgIiVzXG4iLCBtc2cpOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBpbmZvX2NhbGxiYWNrKGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqZGF0 YSkKPiAtewo+IC0gICAgYXZfbG9nKGRhdGEsIEFWX0xPR19ERUJVRywgIiVzXG4iLCBtc2cpOwo+ IC19Cj4gLQo+IC10eXBlZGVmIHN0cnVjdCBQYWNrZXRXcml0ZXIgewo+IC0gICAgaW50IHBvczsK PiAtICAgIEFWUGFja2V0ICpwYWNrZXQ7Cj4gLX0gUGFja2V0V3JpdGVyOwo+IC0KPiAtc3RhdGlj IE9QSl9TSVpFX1Qgc3RyZWFtX3dyaXRlKHZvaWQgKm91dF9idWZmZXIsIE9QSl9TSVpFX1QgbmJf Ynl0ZXMsIHZvaWQgKnVzZXJfZGF0YSkKPiAtewo+IC0gICAgUGFja2V0V3JpdGVyICp3cml0ZXIg PSB1c2VyX2RhdGE7Cj4gLSAgICBBVlBhY2tldCAqcGFja2V0ID0gd3JpdGVyLT5wYWNrZXQ7Cj4g LSAgICBpbnQgcmVtYWluaW5nID0gcGFja2V0LT5zaXplIC0gd3JpdGVyLT5wb3M7Cj4gLSAgICBp ZiAobmJfYnl0ZXMgPiByZW1haW5pbmcpIHsKPiAtICAgICAgICBPUEpfU0laRV9UIG5lZWRlZCA9 IG5iX2J5dGVzIC0gcmVtYWluaW5nOwo+IC0gICAgICAgIGludCBtYXhfZ3Jvd3RoID0gSU5UX01B WCAtIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUgLSBwYWNrZXQtPnNpemU7Cj4gLSAgICAg ICAgaWYgKG5lZWRlZCA+IG1heF9ncm93dGgpIHsKPiAtICAgICAgICAgICAgcmV0dXJuIChPUEpf U0laRV9UKS0xOwo+IC0gICAgICAgIH0KPiAtICAgICAgICBpZiAoYXZfZ3Jvd19wYWNrZXQocGFj a2V0LCAoaW50KW5lZWRlZCkpIHsKPiAtICAgICAgICAgICAgcmV0dXJuIChPUEpfU0laRV9UKS0x Owo+IC0gICAgICAgIH0KPiAtICAgIH0KPiAtICAgIG1lbWNweShwYWNrZXQtPmRhdGEgKyB3cml0 ZXItPnBvcywgb3V0X2J1ZmZlciwgbmJfYnl0ZXMpOwo+IC0gICAgd3JpdGVyLT5wb3MgKz0gKGlu dCluYl9ieXRlczsKPiAtICAgIHJldHVybiBuYl9ieXRlczsKPiAtfQo+IC0KPiAtc3RhdGljIE9Q Sl9PRkZfVCBzdHJlYW1fc2tpcChPUEpfT0ZGX1QgbmJfYnl0ZXMsIHZvaWQgKnVzZXJfZGF0YSkK PiAtewo+IC0gICAgUGFja2V0V3JpdGVyICp3cml0ZXIgPSB1c2VyX2RhdGE7Cj4gLSAgICBBVlBh Y2tldCAqcGFja2V0ID0gd3JpdGVyLT5wYWNrZXQ7Cj4gLSAgICBpZiAobmJfYnl0ZXMgPCAwKSB7 Cj4gLSAgICAgICAgaWYgKHdyaXRlci0+cG9zID09IDApIHsKPiAtICAgICAgICAgICAgcmV0dXJu IChPUEpfU0laRV9UKS0xOwo+IC0gICAgICAgIH0KPiAtICAgICAgICBpZiAobmJfYnl0ZXMgKyB3 cml0ZXItPnBvcyA8IDApIHsKPiAtICAgICAgICAgICAgbmJfYnl0ZXMgPSAtd3JpdGVyLT5wb3M7 Cj4gLSAgICAgICAgfQo+IC0gICAgfSBlbHNlIHsKPiAtICAgICAgICBpbnQgcmVtYWluaW5nID0g cGFja2V0LT5zaXplIC0gd3JpdGVyLT5wb3M7Cj4gLSAgICAgICAgaWYgKG5iX2J5dGVzID4gcmVt YWluaW5nKSB7Cj4gLSAgICAgICAgICAgIE9QSl9TSVpFX1QgbmVlZGVkID0gbmJfYnl0ZXMgLSBy ZW1haW5pbmc7Cj4gLSAgICAgICAgICAgIGludCBtYXhfZ3Jvd3RoID0gSU5UX01BWCAtIEFWX0lO UFVUX0JVRkZFUl9QQURESU5HX1NJWkUgLSBwYWNrZXQtPnNpemU7Cj4gLSAgICAgICAgICAgIGlm IChuZWVkZWQgPiBtYXhfZ3Jvd3RoKSB7Cj4gLSAgICAgICAgICAgICAgICByZXR1cm4gKE9QSl9T SVpFX1QpLTE7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgaWYgKGF2X2dyb3dfcGFj a2V0KHBhY2tldCwgKGludCluZWVkZWQpKSB7Cj4gLSAgICAgICAgICAgICAgICByZXR1cm4gKE9Q Sl9TSVpFX1QpLTE7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICB9Cj4gLSAgICB9Cj4gLSAg ICB3cml0ZXItPnBvcyArPSAoaW50KW5iX2J5dGVzOwo+IC0gICAgcmV0dXJuIG5iX2J5dGVzOwo+ IC19Cj4gLQo+IC1zdGF0aWMgT1BKX0JPT0wgc3RyZWFtX3NlZWsoT1BKX09GRl9UIG5iX2J5dGVz LCB2b2lkICp1c2VyX2RhdGEpCj4gLXsKPiAtICAgIFBhY2tldFdyaXRlciAqd3JpdGVyID0gdXNl cl9kYXRhOwo+IC0gICAgQVZQYWNrZXQgKnBhY2tldCA9IHdyaXRlci0+cGFja2V0Owo+IC0gICAg aWYgKG5iX2J5dGVzIDwgMCkgewo+IC0gICAgICAgIHJldHVybiBPUEpfRkFMU0U7Cj4gLSAgICB9 Cj4gLSAgICBpZiAobmJfYnl0ZXMgPiBwYWNrZXQtPnNpemUpIHsKPiAtICAgICAgICBpZiAobmJf Ynl0ZXMgPiBJTlRfTUFYIC0gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSB8fAo+IC0gICAg ICAgICAgICBhdl9ncm93X3BhY2tldChwYWNrZXQsIChpbnQpbmJfYnl0ZXMgLSBwYWNrZXQtPnNp emUpKSB7Cj4gLSAgICAgICAgICAgIHJldHVybiBPUEpfRkFMU0U7Cj4gLSAgICAgICAgfQo+IC0g ICAgfQo+IC0gICAgd3JpdGVyLT5wb3MgPSAoaW50KW5iX2J5dGVzOwo+IC0gICAgcmV0dXJuIE9Q Sl9UUlVFOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjaW5lbWFfcGFyYW1ldGVycyhvcGpfY3Bh cmFtZXRlcnNfdCAqcCkKPiAtewo+IC0gICAgcC0+dGlsZV9zaXplX29uID0gMDsKPiAtICAgIHAt PmNwX3RkeCA9IDE7Cj4gLSAgICBwLT5jcF90ZHkgPSAxOwo+IC0KPiAtICAgIC8qIFRpbGUgcGFy dCAqLwo+IC0gICAgcC0+dHBfZmxhZyA9ICdDJzsKPiAtICAgIHAtPnRwX29uID0gMTsKPiAtCj4g LSAgICAvKiBUaWxlIGFuZCBJbWFnZSBzaGFsbCBiZSBhdCAoMCwgMCkgKi8KPiAtICAgIHAtPmNw X3R4MCA9IDA7Cj4gLSAgICBwLT5jcF90eTAgPSAwOwo+IC0gICAgcC0+aW1hZ2Vfb2Zmc2V0X3gw ID0gMDsKPiAtICAgIHAtPmltYWdlX29mZnNldF95MCA9IDA7Cj4gLQo+IC0gICAgLyogQ29kZWJs b2NrIHNpemU9IDMyICogMzIgKi8KPiAtICAgIHAtPmNibG9ja3dfaW5pdCA9IDMyOwo+IC0gICAg cC0+Y2Jsb2NraF9pbml0ID0gMzI7Cj4gLSAgICBwLT5jc3R5IHw9IDB4MDE7Cj4gLQo+IC0gICAg LyogVGhlIHByb2dyZXNzaW9uIG9yZGVyIHNoYWxsIGJlIENQUkwgKi8KPiAtICAgIHAtPnByb2df b3JkZXIgPSBPUEpfQ1BSTDsKPiAtCj4gLSAgICAvKiBObyBST0kgKi8KPiAtICAgIHAtPnJvaV9j b21wbm8gPSAtMTsKPiAtCj4gLSAgICAvKiBObyBzdWJzYW1wbGluZyAqLwo+IC0gICAgcC0+c3Vi c2FtcGxpbmdfZHggPSAxOwo+IC0gICAgcC0+c3Vic2FtcGxpbmdfZHkgPSAxOwo+IC0KPiAtICAg IC8qIDktNyB0cmFuc2Zvcm0gKi8KPiAtICAgIHAtPmlycmV2ZXJzaWJsZSA9IDE7Cj4gLQo+IC0g ICAgcC0+dGNwX21jdCA9IDE7Cj4gLX0KPiAtCj4gLXN0YXRpYyBvcGpfaW1hZ2VfdCAqbWoyX2Ny ZWF0ZV9pbWFnZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIG9wal9jcGFyYW1ldGVyc190ICpwYXJh bWV0ZXJzKQo+IC17Cj4gLSAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MgPSBhdl9w aXhfZm10X2Rlc2NfZ2V0KGF2Y3R4LT5waXhfZm10KTsKPiAtICAgIG9wal9pbWFnZV9jbXB0cGFy bV90IGNtcHRwYXJtWzRdID0ge3swfX07Cj4gLSAgICBvcGpfaW1hZ2VfdCAqaW1nOwo+IC0gICAg aW50IGk7Cj4gLSAgICBpbnQgc3ViX2R4WzRdOwo+IC0gICAgaW50IHN1Yl9keVs0XTsKPiAtICAg IGludCBudW1jb21wczsKPiAtICAgIE9QSl9DT0xPUl9TUEFDRSBjb2xvcl9zcGFjZSA9IE9QSl9D TFJTUENfVU5LTk9XTjsKPiAtCj4gLSAgICBzdWJfZHhbMF0gPSBzdWJfZHhbM10gPSAxOwo+IC0g ICAgc3ViX2R5WzBdID0gc3ViX2R5WzNdID0gMTsKPiAtICAgIHN1Yl9keFsxXSA9IHN1Yl9keFsy XSA9IDEgPDwgZGVzYy0+bG9nMl9jaHJvbWFfdzsKPiAtICAgIHN1Yl9keVsxXSA9IHN1Yl9keVsy XSA9IDEgPDwgZGVzYy0+bG9nMl9jaHJvbWFfaDsKPiAtCj4gLSAgICBudW1jb21wcyA9IGRlc2Mt Pm5iX2NvbXBvbmVudHM7Cj4gLQo+IC0gICAgc3dpdGNoIChhdmN0eC0+cGl4X2ZtdCkgewo+IC0g ICAgY2FzZSBBVl9QSVhfRk1UX0dSQVk4Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lBODoKPiAt ICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZMTA6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWTEy Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX0dSQVkxNDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9H UkFZMTY6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWUExNjoKPiAtICAgICAgICBjb2xvcl9zcGFj ZSA9IE9QSl9DTFJTUENfR1JBWTsKPiAtICAgICAgICBicmVhazsKPiAtICAgIGNhc2UgQVZfUElY X0ZNVF9SR0IyNDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9SR0JBOgo+IC0gICAgY2FzZSBBVl9Q SVhfRk1UX1JHQjQ4Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1JHQkE2NDoKPiAtICAgIGNhc2Ug QVZfUElYX0ZNVF9HQlIyNFA6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDk6Cj4gLSAgICBj YXNlIEFWX1BJWF9GTVRfR0JSUDEwOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX0dCUlAxMjoKPiAt ICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQMTQ6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDE2 Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1hZWjEyOgo+IC0gICAgICAgIGNvbG9yX3NwYWNlID0g T1BKX0NMUlNQQ19TUkdCOwo+IC0gICAgICAgIGJyZWFrOwo+IC0gICAgY2FzZSBBVl9QSVhfRk1U X1lVVjQxMFA6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDExUDoKPiAtICAgIGNhc2UgQVZf UElYX0ZNVF9ZVVY0MjBQOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6Cj4gLSAgICBj YXNlIEFWX1BJWF9GTVRfWVVWNDQwUDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQOgo+ IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0MjBQOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lV VkE0MjJQOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0NDRQOgo+IC0gICAgY2FzZSBBVl9Q SVhfRk1UX1lVVjQyMFA5Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA5Ogo+IC0gICAg Y2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA5Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0MjBQ OToKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDIyUDk6Cj4gLSAgICBjYXNlIEFWX1BJWF9G TVRfWVVWQTQ0NFA5Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMDoKPiAtICAgIGNh c2UgQVZfUElYX0ZNVF9ZVVY0MjJQMTA6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDEw Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0MjBQMTA6Cj4gLSAgICBjYXNlIEFWX1BJWF9G TVRfWVVWQTQyMlAxMDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDEwOgo+IC0gICAg Y2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMjoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQ MTI6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDEyOgo+IC0gICAgY2FzZSBBVl9QSVhf Rk1UX1lVVjQyMFAxNDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQMTQ6Cj4gLSAgICBj YXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDE0Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAx NjoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQMTY6Cj4gLSAgICBjYXNlIEFWX1BJWF9G TVRfWVVWNDQ0UDE2Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0MjBQMTY6Cj4gLSAgICBj YXNlIEFWX1BJWF9GTVRfWVVWQTQyMlAxNjoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0 UDE2Ogo+IC0gICAgICAgIGNvbG9yX3NwYWNlID0gT1BKX0NMUlNQQ19TWUNDOwo+IC0gICAgICAg IGJyZWFrOwo+IC0gICAgZGVmYXVsdDoKPiAtICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwKPiAtICAgICAgICAgICAgICAgIlRoZSByZXF1ZXN0ZWQgcGl4ZWwgZm9ybWF0ICclcycg aXMgbm90IHN1cHBvcnRlZFxuIiwKPiAtICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFt ZShhdmN0eC0+cGl4X2ZtdCkpOwo+IC0gICAgICAgIHJldHVybiBOVUxMOwo+IC0gICAgfQo+IC0K PiAtICAgIGZvciAoaSA9IDA7IGkgPCBudW1jb21wczsgaSsrKSB7Cj4gLSAgICAgICAgY21wdHBh cm1baV0ucHJlYyA9IGRlc2MtPmNvbXBbaV0uZGVwdGg7Cj4gLSAgICAgICAgY21wdHBhcm1baV0u YnBwICA9IGRlc2MtPmNvbXBbaV0uZGVwdGg7Cj4gLSAgICAgICAgY21wdHBhcm1baV0uc2duZCA9 IDA7Cj4gLSAgICAgICAgY21wdHBhcm1baV0uZHggPSBzdWJfZHhbaV07Cj4gLSAgICAgICAgY21w dHBhcm1baV0uZHkgPSBzdWJfZHlbaV07Cj4gLSAgICAgICAgY21wdHBhcm1baV0udyA9IChhdmN0 eC0+d2lkdGggKyBzdWJfZHhbaV0gLSAxKSAvIHN1Yl9keFtpXTsKPiAtICAgICAgICBjbXB0cGFy bVtpXS5oID0gKGF2Y3R4LT5oZWlnaHQgKyBzdWJfZHlbaV0gLSAxKSAvIHN1Yl9keVtpXTsKPiAt ICAgIH0KPiAtCj4gLSAgICBpbWcgPSBvcGpfaW1hZ2VfY3JlYXRlKG51bWNvbXBzLCBjbXB0cGFy bSwgY29sb3Jfc3BhY2UpOwo+IC0KPiAtICAgIGlmICghaW1nKQo+IC0gICAgICAgIHJldHVybiBO VUxMOwo+IC0KPiAtICAgIC8vIHgwLCB5MCBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBp bWFnZQo+IC0gICAgLy8geDEsIHkxIGlzIHRoZSB3aWR0aCwgaGVpZ2h0IG9mIHRoZSByZWZlcmVu Y2UgZ3JpZAo+IC0gICAgaW1nLT54MCA9IDA7Cj4gLSAgICBpbWctPnkwID0gMDsKPiAtICAgIGlt Zy0+eDEgPSAoYXZjdHgtPndpZHRoICAtIDEpICogcGFyYW1ldGVycy0+c3Vic2FtcGxpbmdfZHgg KyAxOwo+IC0gICAgaW1nLT55MSA9IChhdmN0eC0+aGVpZ2h0IC0gMSkgKiBwYXJhbWV0ZXJzLT5z dWJzYW1wbGluZ19keSArIDE7Cj4gLQo+IC0gICAgcmV0dXJuIGltZzsKPiAtfQo+IC0KPiAtc3Rh dGljIGF2X2NvbGQgaW50IGxpYm9wZW5qcGVnX2VuY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICph dmN0eCkKPiAtewo+IC0gICAgTGliT3BlbkpQRUdDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9k YXRhOwo+IC0gICAgaW50IGVyciA9IDA7Cj4gLQo+IC0gICAgb3BqX3NldF9kZWZhdWx0X2VuY29k ZXJfcGFyYW1ldGVycygmY3R4LT5lbmNfcGFyYW1zKTsKPiAtCj4gLSAgICBzd2l0Y2ggKGN0eC0+ Y2luZW1hX21vZGUpIHsKPiAtICAgIGNhc2UgT1BKX0NJTkVNQTJLXzI0Ogo+IC0gICAgICAgIGN0 eC0+ZW5jX3BhcmFtcy5yc2l6ID0gT1BKX1BST0ZJTEVfQ0lORU1BXzJLOwo+IC0gICAgICAgIGN0 eC0+ZW5jX3BhcmFtcy5tYXhfY3Nfc2l6ZSA9IE9QSl9DSU5FTUFfMjRfQ1M7Cj4gLSAgICAgICAg Y3R4LT5lbmNfcGFyYW1zLm1heF9jb21wX3NpemUgPSBPUEpfQ0lORU1BXzI0X0NPTVA7Cj4gLSAg ICAgICAgYnJlYWs7Cj4gLSAgICBjYXNlIE9QSl9DSU5FTUEyS180ODoKPiAtICAgICAgICBjdHgt PmVuY19wYXJhbXMucnNpeiA9IE9QSl9QUk9GSUxFX0NJTkVNQV8ySzsKPiAtICAgICAgICBjdHgt PmVuY19wYXJhbXMubWF4X2NzX3NpemUgPSBPUEpfQ0lORU1BXzQ4X0NTOwo+IC0gICAgICAgIGN0 eC0+ZW5jX3BhcmFtcy5tYXhfY29tcF9zaXplID0gT1BKX0NJTkVNQV80OF9DT01QOwo+IC0gICAg ICAgIGJyZWFrOwo+IC0gICAgY2FzZSBPUEpfQ0lORU1BNEtfMjQ6Cj4gLSAgICAgICAgY3R4LT5l bmNfcGFyYW1zLnJzaXogPSBPUEpfUFJPRklMRV9DSU5FTUFfNEs7Cj4gLSAgICAgICAgY3R4LT5l bmNfcGFyYW1zLm1heF9jc19zaXplID0gT1BKX0NJTkVNQV8yNF9DUzsKPiAtICAgICAgICBjdHgt PmVuY19wYXJhbXMubWF4X2NvbXBfc2l6ZSA9IE9QSl9DSU5FTUFfMjRfQ09NUDsKPiAtICAgICAg ICBicmVhazsKPiAtICAgIH0KPiAtCj4gLSAgICBzd2l0Y2ggKGN0eC0+cHJvZmlsZSkgewo+IC0g ICAgY2FzZSBPUEpfQ0lORU1BMks6Cj4gLSAgICAgICAgaWYgKGN0eC0+ZW5jX3BhcmFtcy5yc2l6 ID09IE9QSl9QUk9GSUxFX0NJTkVNQV80Sykgewo+IC0gICAgICAgICAgICBlcnIgPSBBVkVSUk9S KEVJTlZBTCk7Cj4gLSAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgIH0KPiAtICAgICAgICBj dHgtPmVuY19wYXJhbXMucnNpeiA9IE9QSl9QUk9GSUxFX0NJTkVNQV8ySzsKPiAtICAgICAgICBi cmVhazsKPiAtICAgIGNhc2UgT1BKX0NJTkVNQTRLOgo+IC0gICAgICAgIGlmIChjdHgtPmVuY19w YXJhbXMucnNpeiA9PSBPUEpfUFJPRklMRV9DSU5FTUFfMkspIHsKPiAtICAgICAgICAgICAgZXJy ID0gQVZFUlJPUihFSU5WQUwpOwo+IC0gICAgICAgICAgICBicmVhazsKPiAtICAgICAgICB9Cj4g LSAgICAgICAgY3R4LT5lbmNfcGFyYW1zLnJzaXogPSBPUEpfUFJPRklMRV9DSU5FTUFfNEs7Cj4g LSAgICAgICAgYnJlYWs7Cj4gLSAgICB9Cj4gLQo+IC0gICAgaWYgKGVycikgewo+IC0gICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+IC0gICAgICAgICAgICAgICAiSW52YWxpZCBw YXJhbWV0ZXIgcGFpcmluZzogY2luZW1hX21vZGUgYW5kIHByb2ZpbGUgY29uZmxpY3QuXG4iKTsK PiAtICAgICAgICByZXR1cm4gZXJyOwo+IC0gICAgfQo+IC0KPiAtICAgIGlmICghY3R4LT5udW1y ZXNvbHV0aW9uKSB7Cj4gLSAgICAgICAgY3R4LT5udW1yZXNvbHV0aW9uID0gNjsKPiAtICAgICAg ICB3aGlsZSAoRkZNSU4oYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0KSA+PiBjdHgtPm51bXJl c29sdXRpb24gPCAxKQo+IC0gICAgICAgICAgICBjdHgtPm51bXJlc29sdXRpb24gLS07Cj4gLSAg ICB9Cj4gLQo+IC0gICAgY3R4LT5lbmNfcGFyYW1zLnByb2dfb3JkZXIgPSBjdHgtPnByb2dfb3Jk ZXI7Cj4gLSAgICBjdHgtPmVuY19wYXJhbXMubnVtcmVzb2x1dGlvbiA9IGN0eC0+bnVtcmVzb2x1 dGlvbjsKPiAtICAgIGN0eC0+ZW5jX3BhcmFtcy5pcnJldmVyc2libGUgPSBjdHgtPmlycmV2ZXJz aWJsZTsKPiAtICAgIGN0eC0+ZW5jX3BhcmFtcy5jcF9kaXN0b19hbGxvYyA9IGN0eC0+ZGlzdG9f YWxsb2M7Cj4gLSAgICBjdHgtPmVuY19wYXJhbXMuY3BfZml4ZWRfcXVhbGl0eSA9IGN0eC0+Zml4 ZWRfcXVhbGl0eTsKPiAtICAgIGN0eC0+ZW5jX3BhcmFtcy50Y3BfbnVtbGF5ZXJzID0gMTsKPiAt ICAgIGN0eC0+ZW5jX3BhcmFtcy50Y3BfcmF0ZXNbMF0gPSBGRk1BWChhdmN0eC0+Y29tcHJlc3Np b25fbGV2ZWwsIDApICogMjsKPiAtCj4gLSAgICBpZiAoY3R4LT5jaW5lbWFfbW9kZSA+IDApIHsK PiAtICAgICAgICBjaW5lbWFfcGFyYW1ldGVycygmY3R4LT5lbmNfcGFyYW1zKTsKPiAtICAgIH0K PiAtCj4gLSAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBsaWJvcGVuanBlZ19j b3B5X3BhY2tlZDgoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCB1aW50OF90ICpzcmNbNF0s Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsaW5lc2l6 ZVs0XSwgb3BqX2ltYWdlX3QgKmltYWdlKQo+IC17Cj4gLSAgICBpbnQgY29tcG5vOwo+IC0gICAg aW50IHg7Cj4gLSAgICBpbnQgeTsKPiAtICAgIGludCAqaW1hZ2VfbGluZTsKPiAtICAgIGludCBm cmFtZV9pbmRleDsKPiAtICAgIGNvbnN0IGludCBudW1jb21wcyA9IGltYWdlLT5udW1jb21wczsK PiAtCj4gLSAgICBmb3IgKGNvbXBubyA9IDA7IGNvbXBubyA8IG51bWNvbXBzOyArK2NvbXBubykg ewo+IC0gICAgICAgIGlmIChpbWFnZS0+Y29tcHNbY29tcG5vXS53ID4gbGluZXNpemVbMF0gLyBu dW1jb21wcykgewo+IC0gICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVy cm9yOiBmcmFtZSdzIGxpbmVzaXplIGlzIHRvbyBzbWFsbCBmb3IgdGhlIGltYWdlXG4iKTsKPiAt ICAgICAgICAgICAgcmV0dXJuIDA7Cj4gLSAgICAgICAgfQo+IC0gICAgfQo+IC0KPiAtICAgIGZv ciAoY29tcG5vID0gMDsgY29tcG5vIDwgbnVtY29tcHM7ICsrY29tcG5vKSB7Cj4gLSAgICAgICAg Zm9yICh5ID0gMDsgeSA8IGF2Y3R4LT5oZWlnaHQ7ICsreSkgewo+IC0gICAgICAgICAgICBpbWFn ZV9saW5lID0gaW1hZ2UtPmNvbXBzW2NvbXBub10uZGF0YSArIHkgKiBpbWFnZS0+Y29tcHNbY29t cG5vXS53Owo+IC0gICAgICAgICAgICBmcmFtZV9pbmRleCA9IHkgKiBsaW5lc2l6ZVswXSArIGNv bXBubzsKPiAtICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGF2Y3R4LT53aWR0aDsgKyt4KSB7 Cj4gLSAgICAgICAgICAgICAgICBpbWFnZV9saW5lW3hdID0gc3JjWzBdW2ZyYW1lX2luZGV4XTsK PiAtICAgICAgICAgICAgICAgIGZyYW1lX2luZGV4ICs9IG51bWNvbXBzOwo+IC0gICAgICAgICAg ICB9Cj4gLSAgICAgICAgICAgIGZvciAoOyB4IDwgaW1hZ2UtPmNvbXBzW2NvbXBub10udzsgKyt4 KSB7Cj4gLSAgICAgICAgICAgICAgICBpbWFnZV9saW5lW3hdID0gaW1hZ2VfbGluZVt4IC0gMV07 Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICB9Cj4gLSAgICAgICAgZm9yICg7IHkgPCBpbWFn ZS0+Y29tcHNbY29tcG5vXS5oOyArK3kpIHsKPiAtICAgICAgICAgICAgaW1hZ2VfbGluZSA9IGlt YWdlLT5jb21wc1tjb21wbm9dLmRhdGEgKyB5ICogaW1hZ2UtPmNvbXBzW2NvbXBub10udzsKPiAt ICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGltYWdlLT5jb21wc1tjb21wbm9dLnc7ICsreCkg ewo+IC0gICAgICAgICAgICAgICAgaW1hZ2VfbGluZVt4XSA9IGltYWdlX2xpbmVbeCAtIChpbnQp aW1hZ2UtPmNvbXBzW2NvbXBub10ud107Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICB9Cj4g LSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIDE7Cj4gLX0KPiAtCj4gLS8vIGZvciBYWVogMTIgYml0 Cj4gLXN0YXRpYyBpbnQgbGlib3BlbmpwZWdfY29weV9wYWNrZWQxMihBVkNvZGVjQ29udGV4dCAq YXZjdHgsIGNvbnN0IHVpbnQ4X3QgKnNyY1s0XSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgaW50IGxpbmVzaXplWzRdLCBvcGpfaW1hZ2VfdCAqaW1hZ2UpCj4g LXsKPiAtICAgIGludCBjb21wbm87Cj4gLSAgICBpbnQgeCwgeTsKPiAtICAgIGludCAqaW1hZ2Vf bGluZTsKPiAtICAgIGludCBmcmFtZV9pbmRleDsKPiAtICAgIGNvbnN0IGludCBudW1jb21wcyAg PSBpbWFnZS0+bnVtY29tcHM7Cj4gLSAgICBjb25zdCB1aW50MTZfdCAqZnJhbWVfcHRyID0gKGNv bnN0IHVpbnQxNl90ICopc3JjWzBdOwo+IC0KPiAtICAgIGZvciAoY29tcG5vID0gMDsgY29tcG5v IDwgbnVtY29tcHM7ICsrY29tcG5vKSB7Cj4gLSAgICAgICAgaWYgKGltYWdlLT5jb21wc1tjb21w bm9dLncgPiBsaW5lc2l6ZVswXSAvIG51bWNvbXBzKSB7Cj4gLSAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3I6IGZyYW1lJ3MgbGluZXNpemUgaXMgdG9vIHNtYWxs IGZvciB0aGUgaW1hZ2VcbiIpOwo+IC0gICAgICAgICAgICByZXR1cm4gMDsKPiAtICAgICAgICB9 Cj4gLSAgICB9Cj4gLQo+IC0gICAgZm9yIChjb21wbm8gPSAwOyBjb21wbm8gPCBudW1jb21wczsg Kytjb21wbm8pIHsKPiAtICAgICAgICBmb3IgKHkgPSAwOyB5IDwgYXZjdHgtPmhlaWdodDsgKyt5 KSB7Cj4gLSAgICAgICAgICAgIGltYWdlX2xpbmUgPSBpbWFnZS0+Y29tcHNbY29tcG5vXS5kYXRh ICsgeSAqIGltYWdlLT5jb21wc1tjb21wbm9dLnc7Cj4gLSAgICAgICAgICAgIGZyYW1lX2luZGV4 ID0geSAqIChsaW5lc2l6ZVswXSAvIDIpICsgY29tcG5vOwo+IC0gICAgICAgICAgICBmb3IgKHgg PSAwOyB4IDwgYXZjdHgtPndpZHRoOyArK3gpIHsKPiAtICAgICAgICAgICAgICAgIGltYWdlX2xp bmVbeF0gPSBmcmFtZV9wdHJbZnJhbWVfaW5kZXhdID4+IDQ7Cj4gLSAgICAgICAgICAgICAgICBm cmFtZV9pbmRleCArPSBudW1jb21wczsKPiAtICAgICAgICAgICAgfQo+IC0gICAgICAgICAgICBm b3IgKDsgeCA8IGltYWdlLT5jb21wc1tjb21wbm9dLnc7ICsreCkgewo+IC0gICAgICAgICAgICAg ICAgaW1hZ2VfbGluZVt4XSA9IGltYWdlX2xpbmVbeCAtIDFdOwo+IC0gICAgICAgICAgICB9Cj4g LSAgICAgICAgfQo+IC0gICAgICAgIGZvciAoOyB5IDwgaW1hZ2UtPmNvbXBzW2NvbXBub10uaDsg Kyt5KSB7Cj4gLSAgICAgICAgICAgIGltYWdlX2xpbmUgPSBpbWFnZS0+Y29tcHNbY29tcG5vXS5k YXRhICsgeSAqIGltYWdlLT5jb21wc1tjb21wbm9dLnc7Cj4gLSAgICAgICAgICAgIGZvciAoeCA9 IDA7IHggPCBpbWFnZS0+Y29tcHNbY29tcG5vXS53OyArK3gpIHsKPiAtICAgICAgICAgICAgICAg IGltYWdlX2xpbmVbeF0gPSBpbWFnZV9saW5lW3ggLSAoaW50KWltYWdlLT5jb21wc1tjb21wbm9d LnddOwo+IC0gICAgICAgICAgICB9Cj4gLSAgICAgICAgfQo+IC0gICAgfQo+IC0KPiAtICAgIHJl dHVybiAxOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGxpYm9wZW5qcGVnX2NvcHlfcGFja2VkMTYo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCB1aW50OF90ICpzcmNbNF0sCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsaW5lc2l6ZVs0XSwgb3BqX2lt YWdlX3QgKmltYWdlKQo+IC17Cj4gLSAgICBpbnQgY29tcG5vOwo+IC0gICAgaW50IHg7Cj4gLSAg ICBpbnQgeTsKPiAtICAgIGludCAqaW1hZ2VfbGluZTsKPiAtICAgIGludCBmcmFtZV9pbmRleDsK PiAtICAgIGNvbnN0IGludCBudW1jb21wcyA9IGltYWdlLT5udW1jb21wczsKPiAtICAgIGNvbnN0 IHVpbnQxNl90ICpmcmFtZV9wdHIgPSAoY29uc3QgdWludDE2X3QqKXNyY1swXTsKPiAtCj4gLSAg ICBmb3IgKGNvbXBubyA9IDA7IGNvbXBubyA8IG51bWNvbXBzOyArK2NvbXBubykgewo+IC0gICAg ICAgIGlmIChpbWFnZS0+Y29tcHNbY29tcG5vXS53ID4gbGluZXNpemVbMF0gLyBudW1jb21wcykg ewo+IC0gICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yOiBmcmFt ZSdzIGxpbmVzaXplIGlzIHRvbyBzbWFsbCBmb3IgdGhlIGltYWdlXG4iKTsKPiAtICAgICAgICAg ICAgcmV0dXJuIDA7Cj4gLSAgICAgICAgfQo+IC0gICAgfQo+IC0KPiAtICAgIGZvciAoY29tcG5v ID0gMDsgY29tcG5vIDwgbnVtY29tcHM7ICsrY29tcG5vKSB7Cj4gLSAgICAgICAgZm9yICh5ID0g MDsgeSA8IGF2Y3R4LT5oZWlnaHQ7ICsreSkgewo+IC0gICAgICAgICAgICBpbWFnZV9saW5lID0g aW1hZ2UtPmNvbXBzW2NvbXBub10uZGF0YSArIHkgKiBpbWFnZS0+Y29tcHNbY29tcG5vXS53Owo+ IC0gICAgICAgICAgICBmcmFtZV9pbmRleCA9IHkgKiAobGluZXNpemVbMF0gLyAyKSArIGNvbXBu bzsKPiAtICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGF2Y3R4LT53aWR0aDsgKyt4KSB7Cj4g LSAgICAgICAgICAgICAgICBpbWFnZV9saW5lW3hdID0gZnJhbWVfcHRyW2ZyYW1lX2luZGV4XTsK PiAtICAgICAgICAgICAgICAgIGZyYW1lX2luZGV4ICs9IG51bWNvbXBzOwo+IC0gICAgICAgICAg ICB9Cj4gLSAgICAgICAgICAgIGZvciAoOyB4IDwgaW1hZ2UtPmNvbXBzW2NvbXBub10udzsgKyt4 KSB7Cj4gLSAgICAgICAgICAgICAgICBpbWFnZV9saW5lW3hdID0gaW1hZ2VfbGluZVt4IC0gMV07 Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICB9Cj4gLSAgICAgICAgZm9yICg7IHkgPCBpbWFn ZS0+Y29tcHNbY29tcG5vXS5oOyArK3kpIHsKPiAtICAgICAgICAgICAgaW1hZ2VfbGluZSA9IGlt YWdlLT5jb21wc1tjb21wbm9dLmRhdGEgKyB5ICogaW1hZ2UtPmNvbXBzW2NvbXBub10udzsKPiAt ICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGltYWdlLT5jb21wc1tjb21wbm9dLnc7ICsreCkg ewo+IC0gICAgICAgICAgICAgICAgaW1hZ2VfbGluZVt4XSA9IGltYWdlX2xpbmVbeCAtIChpbnQp aW1hZ2UtPmNvbXBzW2NvbXBub10ud107Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICB9Cj4g LSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIDE7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgbGlib3Bl bmpwZWdfY29weV91bnBhY2tlZDgoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCB1aW50OF90 ICpzcmNbNF0sCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu dCBsaW5lc2l6ZVs0XSwgb3BqX2ltYWdlX3QgKmltYWdlKQo+IC17Cj4gLSAgICBpbnQgY29tcG5v Owo+IC0gICAgaW50IHg7Cj4gLSAgICBpbnQgeTsKPiAtICAgIGludCB3aWR0aDsKPiAtICAgIGlu dCBoZWlnaHQ7Cj4gLSAgICBpbnQgKmltYWdlX2xpbmU7Cj4gLSAgICBpbnQgZnJhbWVfaW5kZXg7 Cj4gLSAgICBjb25zdCBpbnQgbnVtY29tcHMgPSBpbWFnZS0+bnVtY29tcHM7Cj4gLQo+IC0gICAg Zm9yIChjb21wbm8gPSAwOyBjb21wbm8gPCBudW1jb21wczsgKytjb21wbm8pIHsKPiAtICAgICAg ICBpZiAoaW1hZ2UtPmNvbXBzW2NvbXBub10udyA+IGxpbmVzaXplW2NvbXBub10pIHsKPiAtICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvcjogZnJhbWUncyBsaW5l c2l6ZSBpcyB0b28gc21hbGwgZm9yIHRoZSBpbWFnZVxuIik7Cj4gLSAgICAgICAgICAgIHJldHVy biAwOwo+IC0gICAgICAgIH0KPiAtICAgIH0KPiAtCj4gLSAgICBmb3IgKGNvbXBubyA9IDA7IGNv bXBubyA8IG51bWNvbXBzOyArK2NvbXBubykgewo+IC0gICAgICAgIHdpZHRoICA9IChhdmN0eC0+ d2lkdGggKyBpbWFnZS0+Y29tcHNbY29tcG5vXS5keCAtIDEpIC8gaW1hZ2UtPmNvbXBzW2NvbXBu b10uZHg7Cj4gLSAgICAgICAgaGVpZ2h0ID0gKGF2Y3R4LT5oZWlnaHQgKyBpbWFnZS0+Y29tcHNb Y29tcG5vXS5keSAtIDEpIC8gaW1hZ2UtPmNvbXBzW2NvbXBub10uZHk7Cj4gLSAgICAgICAgZm9y ICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Cj4gLSAgICAgICAgICAgIGltYWdlX2xpbmUgPSBp bWFnZS0+Y29tcHNbY29tcG5vXS5kYXRhICsgeSAqIGltYWdlLT5jb21wc1tjb21wbm9dLnc7Cj4g LSAgICAgICAgICAgIGZyYW1lX2luZGV4ID0geSAqIGxpbmVzaXplW2NvbXBub107Cj4gLSAgICAg ICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KQo+IC0gICAgICAgICAgICAgICAgaW1h Z2VfbGluZVt4XSA9IHNyY1tjb21wbm9dW2ZyYW1lX2luZGV4KytdOwo+IC0gICAgICAgICAgICBm b3IgKDsgeCA8IGltYWdlLT5jb21wc1tjb21wbm9dLnc7ICsreCkgewo+IC0gICAgICAgICAgICAg ICAgaW1hZ2VfbGluZVt4XSA9IGltYWdlX2xpbmVbeCAtIDFdOwo+IC0gICAgICAgICAgICB9Cj4g LSAgICAgICAgfQo+IC0gICAgICAgIGZvciAoOyB5IDwgaW1hZ2UtPmNvbXBzW2NvbXBub10uaDsg Kyt5KSB7Cj4gLSAgICAgICAgICAgIGltYWdlX2xpbmUgPSBpbWFnZS0+Y29tcHNbY29tcG5vXS5k YXRhICsgeSAqIGltYWdlLT5jb21wc1tjb21wbm9dLnc7Cj4gLSAgICAgICAgICAgIGZvciAoeCA9 IDA7IHggPCBpbWFnZS0+Y29tcHNbY29tcG5vXS53OyArK3gpIHsKPiAtICAgICAgICAgICAgICAg IGltYWdlX2xpbmVbeF0gPSBpbWFnZV9saW5lW3ggLSAoaW50KWltYWdlLT5jb21wc1tjb21wbm9d LnddOwo+IC0gICAgICAgICAgICB9Cj4gLSAgICAgICAgfQo+IC0gICAgfQo+IC0KPiAtICAgIHJl dHVybiAxOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGxpYm9wZW5qcGVnX2NvcHlfdW5wYWNrZWQx NihBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0IHVpbnQ4X3QgKnNyY1s0XSwKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxpbmVzaXplWzRdLCBvcGpf aW1hZ2VfdCAqaW1hZ2UpCj4gLXsKPiAtICAgIGludCBjb21wbm87Cj4gLSAgICBpbnQgeDsKPiAt ICAgIGludCB5Owo+IC0gICAgaW50IHdpZHRoOwo+IC0gICAgaW50IGhlaWdodDsKPiAtICAgIGlu dCAqaW1hZ2VfbGluZTsKPiAtICAgIGludCBmcmFtZV9pbmRleDsKPiAtICAgIGNvbnN0IGludCBu dW1jb21wcyA9IGltYWdlLT5udW1jb21wczsKPiAtCj4gLSAgICBmb3IgKGNvbXBubyA9IDA7IGNv bXBubyA8IG51bWNvbXBzOyArK2NvbXBubykgewo+IC0gICAgICAgIGlmIChpbWFnZS0+Y29tcHNb Y29tcG5vXS53ID4gbGluZXNpemVbY29tcG5vXSkgewo+IC0gICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkVycm9yOiBmcmFtZSdzIGxpbmVzaXplIGlzIHRvbyBzbWFsbCBm b3IgdGhlIGltYWdlXG4iKTsKPiAtICAgICAgICAgICAgcmV0dXJuIDA7Cj4gLSAgICAgICAgfQo+ IC0gICAgfQo+IC0KPiAtICAgIGZvciAoY29tcG5vID0gMDsgY29tcG5vIDwgbnVtY29tcHM7ICsr Y29tcG5vKSB7Cj4gLSAgICAgICAgY29uc3QgdWludDE2X3QgKmZyYW1lX3B0ciA9IChjb25zdCB1 aW50MTZfdCAqKXNyY1tjb21wbm9dOwo+IC0gICAgICAgIHdpZHRoICAgICA9IChhdmN0eC0+d2lk dGggKyBpbWFnZS0+Y29tcHNbY29tcG5vXS5keCAtIDEpIC8gaW1hZ2UtPmNvbXBzW2NvbXBub10u ZHg7Cj4gLSAgICAgICAgaGVpZ2h0ICAgID0gKGF2Y3R4LT5oZWlnaHQgKyBpbWFnZS0+Y29tcHNb Y29tcG5vXS5keSAtIDEpIC8gaW1hZ2UtPmNvbXBzW2NvbXBub10uZHk7Cj4gLSAgICAgICAgZm9y ICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Cj4gLSAgICAgICAgICAgIGltYWdlX2xpbmUgPSBp bWFnZS0+Y29tcHNbY29tcG5vXS5kYXRhICsgeSAqIGltYWdlLT5jb21wc1tjb21wbm9dLnc7Cj4g LSAgICAgICAgICAgIGZyYW1lX2luZGV4ID0geSAqIChsaW5lc2l6ZVtjb21wbm9dIC8gMik7Cj4g LSAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KQo+IC0gICAgICAgICAgICAg ICAgaW1hZ2VfbGluZVt4XSA9IGZyYW1lX3B0cltmcmFtZV9pbmRleCsrXTsKPiAtICAgICAgICAg ICAgZm9yICg7IHggPCBpbWFnZS0+Y29tcHNbY29tcG5vXS53OyArK3gpIHsKPiAtICAgICAgICAg ICAgICAgIGltYWdlX2xpbmVbeF0gPSBpbWFnZV9saW5lW3ggLSAxXTsKPiAtICAgICAgICAgICAg fQo+IC0gICAgICAgIH0KPiAtICAgICAgICBmb3IgKDsgeSA8IGltYWdlLT5jb21wc1tjb21wbm9d Lmg7ICsreSkgewo+IC0gICAgICAgICAgICBpbWFnZV9saW5lID0gaW1hZ2UtPmNvbXBzW2NvbXBu b10uZGF0YSArIHkgKiBpbWFnZS0+Y29tcHNbY29tcG5vXS53Owo+IC0gICAgICAgICAgICBmb3Ig KHggPSAwOyB4IDwgaW1hZ2UtPmNvbXBzW2NvbXBub10udzsgKyt4KSB7Cj4gLSAgICAgICAgICAg ICAgICBpbWFnZV9saW5lW3hdID0gaW1hZ2VfbGluZVt4IC0gKGludClpbWFnZS0+Y29tcHNbY29t cG5vXS53XTsKPiAtICAgICAgICAgICAgfQo+IC0gICAgICAgIH0KPiAtICAgIH0KPiAtCj4gLSAg ICByZXR1cm4gMTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBsaWJvcGVuanBlZ19lbmNvZGVfZnJh bWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVlBhY2tldCAqcGt0LAo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpmcmFtZSwgaW50ICpnb3RfcGFj a2V0KQo+IC17Cj4gLSAgICBMaWJPcGVuSlBFR0NvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2Rh dGE7Cj4gLSAgICBpbnQgcmV0Owo+IC0gICAgaW50IGNweXJlc3VsdCA9IDA7Cj4gLSAgICBQYWNr ZXRXcml0ZXIgd3JpdGVyICAgICA9IHsgMCB9Owo+IC0gICAgb3BqX2NvZGVjX3QgKmNvbXByZXNz ICAgPSBOVUxMOwo+IC0gICAgb3BqX3N0cmVhbV90ICpzdHJlYW0gICAgPSBOVUxMOwo+IC0gICAg b3BqX2ltYWdlX3QgKmltYWdlICAgICAgPSBtajJfY3JlYXRlX2ltYWdlKGF2Y3R4LCAmY3R4LT5l bmNfcGFyYW1zKTsKPiAtICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGFbNF0gPSB7IGZyYW1lLT5kYXRh WzBdLCBmcmFtZS0+ZGF0YVsxXSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy YW1lLT5kYXRhWzJdLCBmcmFtZS0+ZGF0YVszXSB9Owo+IC0gICAgaW50IGxpbmVzaXplWzRdICAg ICAgICA9IHsgZnJhbWUtPmxpbmVzaXplWzBdLCBmcmFtZS0+bGluZXNpemVbMV0sCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+bGluZXNpemVbMl0sIGZyYW1lLT5saW5l c2l6ZVszXSB9Owo+IC0gICAgaWYgKCFpbWFnZSkgewo+IC0gICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiRXJyb3IgY3JlYXRpbmcgdGhlIG1qMiBpbWFnZVxuIik7Cj4gLSAgICAg ICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+IC0gICAgICAgIGdvdG8gZG9uZTsKPiAtICAgIH0K PiAtCj4gLSAgICBzd2l0Y2ggKGF2Y3R4LT5waXhfZm10KSB7Cj4gLSAgICBjYXNlIEFWX1BJWF9G TVRfUkdCMjQ6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfUkdCQToKPiAtICAgIGNhc2UgQVZfUElY X0ZNVF9ZQTg6Cj4gLSAgICAgICAgY3B5cmVzdWx0ID0gbGlib3BlbmpwZWdfY29weV9wYWNrZWQ4 KGF2Y3R4LCBkYXRhLCBsaW5lc2l6ZSwgaW1hZ2UpOwo+IC0gICAgICAgIGJyZWFrOwo+IC0gICAg Y2FzZSBBVl9QSVhfRk1UX1hZWjEyOgo+IC0gICAgICAgIGNweXJlc3VsdCA9IGxpYm9wZW5qcGVn X2NvcHlfcGFja2VkMTIoYXZjdHgsIGRhdGEsIGxpbmVzaXplLCBpbWFnZSk7Cj4gLSAgICAgICAg YnJlYWs7Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfUkdCNDg6Cj4gLSAgICBjYXNlIEFWX1BJWF9G TVRfUkdCQTY0Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lBMTY6Cj4gLSAgICAgICAgY3B5cmVz dWx0ID0gbGlib3BlbmpwZWdfY29weV9wYWNrZWQxNihhdmN0eCwgZGF0YSwgbGluZXNpemUsIGlt YWdlKTsKPiAtICAgICAgICBicmVhazsKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9HQlIyNFA6Cj4g LSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDk6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDEw Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX0dCUlAxMjoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9H QlJQMTQ6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDE2Ogo+IC0gICAgICAgIGRhdGFbMF0g PSBmcmFtZS0+ZGF0YVsyXTsgLy8gc3dhcCB0byBiZSByZ2IKPiAtICAgICAgICBkYXRhWzFdID0g ZnJhbWUtPmRhdGFbMF07Cj4gLSAgICAgICAgZGF0YVsyXSA9IGZyYW1lLT5kYXRhWzFdOwo+IC0g ICAgICAgIGxpbmVzaXplWzBdID0gZnJhbWUtPmxpbmVzaXplWzJdOwo+IC0gICAgICAgIGxpbmVz aXplWzFdID0gZnJhbWUtPmxpbmVzaXplWzBdOwo+IC0gICAgICAgIGxpbmVzaXplWzJdID0gZnJh bWUtPmxpbmVzaXplWzFdOwo+IC0gICAgICAgIGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBBVl9QSVhf Rk1UX0dCUjI0UCkgewo+IC0gICAgICAgICAgICBjcHlyZXN1bHQgPSBsaWJvcGVuanBlZ19jb3B5 X3VucGFja2VkOChhdmN0eCwgZGF0YSwgbGluZXNpemUsIGltYWdlKTsKPiAtICAgICAgICB9IGVs c2Ugewo+IC0gICAgICAgICAgICBjcHlyZXN1bHQgPSBsaWJvcGVuanBlZ19jb3B5X3VucGFja2Vk MTYoYXZjdHgsIGRhdGEsIGxpbmVzaXplLCBpbWFnZSk7Cj4gLSAgICAgICAgfQo+IC0gICAgICAg IGJyZWFrOwo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX0dSQVk4Ogo+IC0gICAgY2FzZSBBVl9QSVhf Rk1UX1lVVjQxMFA6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDExUDoKPiAtICAgIGNhc2Ug QVZfUElYX0ZNVF9ZVVY0MjBQOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6Cj4gLSAg ICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQwUDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQ Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0MjBQOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1U X1lVVkE0MjJQOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0NDRQOgo+IC0gICAgICAgIGNw eXJlc3VsdCA9IGxpYm9wZW5qcGVnX2NvcHlfdW5wYWNrZWQ4KGF2Y3R4LCBkYXRhLCBsaW5lc2l6 ZSwgaW1hZ2UpOwo+IC0gICAgICAgIGJyZWFrOwo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX0dSQVkx MDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZMTI6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRf R1JBWTE0Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX0dSQVkxNjoKPiAtICAgIGNhc2UgQVZfUElY X0ZNVF9ZVVY0MjBQOToKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQOToKPiAtICAgIGNh c2UgQVZfUElYX0ZNVF9ZVVY0NDRQOToKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDIwUDk6 Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWQTQyMlA5Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1U X1lVVkE0NDRQOToKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQMTA6Cj4gLSAgICBjYXNl IEFWX1BJWF9GTVRfWVVWNDIyUDEwOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMDoK PiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDEwOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1U X1lVVkE0MjJQMTA6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWQTQyMFAxMDoKPiAtICAgIGNh c2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTI6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDEy Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMjoKPiAtICAgIGNhc2UgQVZfUElYX0ZN VF9ZVVY0MjBQMTQ6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDE0Ogo+IC0gICAgY2Fz ZSBBVl9QSVhfRk1UX1lVVjQ0NFAxNDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQMTY6 Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDE2Ogo+IC0gICAgY2FzZSBBVl9QSVhfRk1U X1lVVjQyMFAxNjoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDE2Ogo+IC0gICAgY2Fz ZSBBVl9QSVhfRk1UX1lVVkE0MjJQMTY6Cj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWQTQyMFAx NjoKPiAtICAgICAgICBjcHlyZXN1bHQgPSBsaWJvcGVuanBlZ19jb3B5X3VucGFja2VkMTYoYXZj dHgsIGRhdGEsIGxpbmVzaXplLCBpbWFnZSk7Cj4gLSAgICAgICAgYnJlYWs7Cj4gLSAgICBkZWZh dWx0Ogo+IC0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+IC0gICAgICAgICAg ICAgICAiVGhlIGZyYW1lJ3MgcGl4ZWwgZm9ybWF0ICclcycgaXMgbm90IHN1cHBvcnRlZFxuIiwK PiAtICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShhdmN0eC0+cGl4X2ZtdCkpOwo+ IC0gICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiAtICAgICAgICBnb3RvIGRvbmU7Cj4g LSAgICAgICAgYnJlYWs7Cj4gLSAgICB9Cj4gLQo+IC0gICAgaWYgKCFjcHlyZXN1bHQpIHsKPiAt ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPiAtICAgICAgICAgICAgICAgIkNv dWxkIG5vdCBjb3B5IHRoZSBmcmFtZSBkYXRhIHRvIHRoZSBpbnRlcm5hbCBpbWFnZSBidWZmZXJc biIpOwo+IC0gICAgICAgIHJldCA9IC0xOwo+IC0gICAgICAgIGdvdG8gZG9uZTsKPiAtICAgIH0K PiAtCj4gLSAgICBpZiAoKHJldCA9IGZmX2FsbG9jX3BhY2tldChhdmN0eCwgcGt0LCAxMDI0KSkg PCAwKQo+IC0gICAgICAgIGdvdG8gZG9uZTsKPiAtCj4gLSAgICBjb21wcmVzcyA9IG9wal9jcmVh dGVfY29tcHJlc3MoY3R4LT5mb3JtYXQpOwo+IC0gICAgaWYgKCFjb21wcmVzcykgewo+IC0gICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3IgY3JlYXRpbmcgdGhlIGNvbXBy ZXNzb3JcbiIpOwo+IC0gICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiAtICAgICAgICBn b3RvIGRvbmU7Cj4gLSAgICB9Cj4gLQo+IC0gICAgaWYgKCFvcGpfc2V0X2Vycm9yX2hhbmRsZXIo Y29tcHJlc3MsIGVycm9yX2NhbGxiYWNrLCBhdmN0eCkgfHwKPiAtICAgICAgICAhb3BqX3NldF93 YXJuaW5nX2hhbmRsZXIoY29tcHJlc3MsIHdhcm5pbmdfY2FsbGJhY2ssIGF2Y3R4KSB8fAo+IC0g ICAgICAgICFvcGpfc2V0X2luZm9faGFuZGxlcihjb21wcmVzcywgaW5mb19jYWxsYmFjaywgYXZj dHgpKSB7Cj4gLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBzZXR0 aW5nIHRoZSBjb21wcmVzc29yIGhhbmRsZXJzXG4iKTsKPiAtICAgICAgICByZXQgPSBBVkVSUk9S X0VYVEVSTkFMOwo+IC0gICAgICAgIGdvdG8gZG9uZTsKPiAtICAgIH0KPiAtCj4gLSAgICBpZiAo IW9wal9zZXR1cF9lbmNvZGVyKGNvbXByZXNzLCAmY3R4LT5lbmNfcGFyYW1zLCBpbWFnZSkpIHsK PiAtICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIHNldHRpbmcgdXAg dGhlIGNvbXByZXNzb3JcbiIpOwo+IC0gICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7Cj4g LSAgICAgICAgZ290byBkb25lOwo+IC0gICAgfQo+IC0gICAgc3RyZWFtID0gb3BqX3N0cmVhbV9k ZWZhdWx0X2NyZWF0ZShPUEpfU1RSRUFNX1dSSVRFKTsKPiAtCj4gLSAgICBpZiAoIXN0cmVhbSkg ewo+IC0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3IgY3JlYXRpbmcg dGhlIGNpbyBzdHJlYW1cbiIpOwo+IC0gICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiAt ICAgICAgICBnb3RvIGRvbmU7Cj4gLSAgICB9Cj4gLQo+IC0gICAgd3JpdGVyLnBhY2tldCA9IHBr dDsKPiAtICAgIG9wal9zdHJlYW1fc2V0X3dyaXRlX2Z1bmN0aW9uKHN0cmVhbSwgc3RyZWFtX3dy aXRlKTsKPiAtICAgIG9wal9zdHJlYW1fc2V0X3NraXBfZnVuY3Rpb24oc3RyZWFtLCBzdHJlYW1f c2tpcCk7Cj4gLSAgICBvcGpfc3RyZWFtX3NldF9zZWVrX2Z1bmN0aW9uKHN0cmVhbSwgc3RyZWFt X3NlZWspOwo+IC0gICAgb3BqX3N0cmVhbV9zZXRfdXNlcl9kYXRhKHN0cmVhbSwgJndyaXRlciwg TlVMTCk7Cj4gLQo+IC0gICAgaWYgKCFvcGpfc3RhcnRfY29tcHJlc3MoY29tcHJlc3MsIGltYWdl LCBzdHJlYW0pIHx8Cj4gLSAgICAgICAgIW9wal9lbmNvZGUoY29tcHJlc3MsIHN0cmVhbSkgfHwK PiAtICAgICAgICAhb3BqX2VuZF9jb21wcmVzcyhjb21wcmVzcywgc3RyZWFtKSkgewo+IC0gICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3IgZHVyaW5nIHRoZSBvcGogZW5j b2RlXG4iKTsKPiAtICAgICAgICByZXQgPSBBVkVSUk9SX0VYVEVSTkFMOwo+IC0gICAgICAgIGdv dG8gZG9uZTsKPiAtICAgIH0KPiAtCj4gLSAgICBhdl9zaHJpbmtfcGFja2V0KHBrdCwgd3JpdGVy LnBvcyk7Cj4gLQo+IC0gICAgKmdvdF9wYWNrZXQgPSAxOwo+IC0gICAgcmV0ID0gMDsKPiAtCj4g LWRvbmU6Cj4gLSAgICBvcGpfc3RyZWFtX2Rlc3Ryb3koc3RyZWFtKTsKPiAtICAgIG9wal9kZXN0 cm95X2NvZGVjKGNvbXByZXNzKTsKPiAtICAgIG9wal9pbWFnZV9kZXN0cm95KGltYWdlKTsKPiAt ICAgIHJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLSNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKExp Yk9wZW5KUEVHQ29udGV4dCwgeCkKPiAtI2RlZmluZSBWRSBBVl9PUFRfRkxBR19WSURFT19QQVJB TSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNCj4gLXN0YXRpYyBjb25zdCBBVk9wdGlvbiBv cHRpb25zW10gPSB7Cj4gLSAgICB7ICJmb3JtYXQiLCAgICAgICAgIkNvZGVjIEZvcm1hdCIsICAg ICAgT0ZGU0VUKGZvcm1hdCksICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgeyAuaTY0ID0gT1BK X0NPREVDX0pQMiAgIH0sIE9QSl9DT0RFQ19KMkssIE9QSl9DT0RFQ19KUDIsICAgVkUsICJmb3Jt YXQiICAgICAgfSwKPiAtICAgIHsgImoyayIsICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBPUEpf Q09ERUNfSjJLICAgfSwgMCwgICAgICAgICAwLCAgICAgICAgICAgVkUsICJmb3JtYXQiICAgICAg fSwKPiAtICAgIHsgImpwMiIsICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBPUEpfQ09ERUNfSlAy ICAgfSwgMCwgICAgICAgICAwLCAgICAgICAgICAgVkUsICJmb3JtYXQiICAgICAgfSwKPiAtICAg IHsgInByb2ZpbGUiLCAgICAgICBOVUxMLCAgICAgICAgICAgICAgICBPRkZTRVQocHJvZmlsZSks ICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICB7IC5pNjQgPSBPUEpfU1REX1JTSVogICAgfSwgT1BK X1NURF9SU0laLCAgT1BKX0NJTkVNQTRLLCAgICBWRSwgInByb2ZpbGUiICAgICB9LAo+IC0gICAg eyAianBlZzIwMDAiLCAgICAgIE5VTEwsICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IE9QSl9TVERfUlNJWiAgICB9LCAwLCAg ICAgICAgIDAsICAgICAgICAgICBWRSwgInByb2ZpbGUiICAgICB9LAo+IC0gICAgeyAiY2luZW1h MmsiLCAgICAgIE5VTEwsICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgQVZf T1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IE9QSl9DSU5FTUEySyAgICB9LCAwLCAgICAgICAgIDAs ICAgICAgICAgICBWRSwgInByb2ZpbGUiICAgICB9LAo+IC0gICAgeyAiY2luZW1hNGsiLCAgICAg IE5VTEwsICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVf Q09OU1QsIHsgLmk2NCA9IE9QSl9DSU5FTUE0SyAgICB9LCAwLCAgICAgICAgIDAsICAgICAgICAg ICBWRSwgInByb2ZpbGUiICAgICB9LAo+IC0gICAgeyAiY2luZW1hX21vZGUiLCAgICJEaWdpdGFs IENpbmVtYSIsICAgIE9GRlNFVChjaW5lbWFfbW9kZSksICAgQVZfT1BUX1RZUEVfSU5ULCAgIHsg Lmk2NCA9IE9QSl9PRkYgICAgICAgICB9LCBPUEpfT0ZGLCAgICAgICBPUEpfQ0lORU1BNEtfMjQs IFZFLCAiY2luZW1hX21vZGUiIH0sCj4gLSAgICB7ICJvZmYiLCAgICAgICAgICAgTlVMTCwgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgeyAu aTY0ID0gT1BKX09GRiAgICAgICAgIH0sIDAsICAgICAgICAgMCwgICAgICAgICAgIFZFLCAiY2lu ZW1hX21vZGUiIH0sCj4gLSAgICB7ICIya18yNCIsICAgICAgICAgTlVMTCwgICAgICAgICAgICAg ICAgMCwgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gT1BK X0NJTkVNQTJLXzI0IH0sIDAsICAgICAgICAgMCwgICAgICAgICAgIFZFLCAiY2luZW1hX21vZGUi IH0sCj4gLSAgICB7ICIya180OCIsICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgMCwgICAg ICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gT1BKX0NJTkVNQTJL XzQ4IH0sIDAsICAgICAgICAgMCwgICAgICAgICAgIFZFLCAiY2luZW1hX21vZGUiIH0sCj4gLSAg ICB7ICI0a18yNCIsICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAg ICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gT1BKX0NJTkVNQTRLXzI0IH0sIDAs ICAgICAgICAgMCwgICAgICAgICAgIFZFLCAiY2luZW1hX21vZGUiIH0sCj4gLSAgICB7ICJwcm9n X29yZGVyIiwgICAgIlByb2dyZXNzaW9uIE9yZGVyIiwgT0ZGU0VUKHByb2dfb3JkZXIpLCAgICBB Vl9PUFRfVFlQRV9JTlQsICAgeyAuaTY0ID0gT1BKX0xSQ1AgICAgfSwgT1BKX0xSQ1AsICBPUEpf Q1BSTCwgICAgVkUsICJwcm9nX29yZGVyIiAgfSwKPiAtICAgIHsgImxyY3AiLCAgICAgICAgICBO VUxMLCAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NP TlNULCB7IC5pNjQgPSBPUEpfTFJDUCAgICB9LCAwLCAgICAgICAgIDAsICAgICAgICAgICBWRSwg InByb2dfb3JkZXIiICB9LAo+IC0gICAgeyAicmxjcCIsICAgICAgICAgIE5VTEwsICAgICAgICAg ICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9 IE9QSl9STENQICAgIH0sIDAsICAgICAgICAgMCwgICAgICAgICAgIFZFLCAicHJvZ19vcmRlciIg IH0sCj4gLSAgICB7ICJycGNsIiwgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgMCwgICAg ICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gT1BKX1JQQ0wgICAg fSwgMCwgICAgICAgICAwLCAgICAgICAgICAgVkUsICJwcm9nX29yZGVyIiAgfSwKPiAtICAgIHsg InBjcmwiLCAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAg ICAgIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBPUEpfUENSTCAgICB9LCAwLCAgICAgICAg IDAsICAgICAgICAgICBWRSwgInByb2dfb3JkZXIiICB9LAo+IC0gICAgeyAiY3BybCIsICAgICAg ICAgIE5VTEwsICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZ UEVfQ09OU1QsIHsgLmk2NCA9IE9QSl9DUFJMICAgIH0sIDAsICAgICAgICAgMCwgICAgICAgICAg IFZFLCAicHJvZ19vcmRlciIgIH0sCj4gLSAgICB7ICJudW1yZXNvbHV0aW9uIiwgTlVMTCwgICAg ICAgICAgICAgICAgT0ZGU0VUKG51bXJlc29sdXRpb24pLCBBVl9PUFRfVFlQRV9JTlQsICAgeyAu aTY0ID0gNiAgICAgICAgICAgIH0sIDAsICAgICAgICAgMzMsICAgICAgICAgIFZFICAgICAgICAg ICAgICAgIH0sCj4gLSAgICB7ICJpcnJldmVyc2libGUiLCAgTlVMTCwgICAgICAgICAgICAgICAg T0ZGU0VUKGlycmV2ZXJzaWJsZSksICBBVl9PUFRfVFlQRV9JTlQsICAgeyAuaTY0ID0gMCAgICAg ICAgICAgIH0sIDAsICAgICAgICAgMSwgICAgICAgICAgIFZFICAgICAgICAgICAgICAgIH0sCj4g LSAgICB7ICJkaXN0b19hbGxvYyIsICAgTlVMTCwgICAgICAgICAgICAgICAgT0ZGU0VUKGRpc3Rv X2FsbG9jKSwgICBBVl9PUFRfVFlQRV9JTlQsICAgeyAuaTY0ID0gMSAgICAgICAgICAgIH0sIDAs ICAgICAgICAgMSwgICAgICAgICAgIFZFICAgICAgICAgICAgICAgIH0sCj4gLSAgICB7ICJmaXhl ZF9xdWFsaXR5IiwgTlVMTCwgICAgICAgICAgICAgICAgT0ZGU0VUKGZpeGVkX3F1YWxpdHkpLCBB Vl9PUFRfVFlQRV9JTlQsICAgeyAuaTY0ID0gMCAgICAgICAgICAgIH0sIDAsICAgICAgICAgMSwg ICAgICAgICAgIFZFICAgICAgICAgICAgICAgIH0sCj4gLSAgICB7IE5VTEwgfSwKPiAtfTsKPiAt Cj4gLXN0YXRpYyBjb25zdCBBVkNsYXNzIG9wZW5qcGVnX2NsYXNzID0gewo+IC0gICAgLmNsYXNz X25hbWUgPSAibGlib3BlbmpwZWciLAo+IC0gICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0 ZW1fbmFtZSwKPiAtICAgIC5vcHRpb24gICAgID0gb3B0aW9ucywKPiAtICAgIC52ZXJzaW9uICAg ID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+IC19Owo+IC0KPiAtY29uc3QgRkZDb2RlYyBmZl9s aWJvcGVuanBlZ19lbmNvZGVyID0gewo+IC0gICAgLnAubmFtZSAgICAgICAgID0gImxpYm9wZW5q cGVnIiwKPiAtICAgIENPREVDX0xPTkdfTkFNRSgiT3BlbkpQRUcgSlBFRyAyMDAwIiksCj4gLSAg ICAucC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4gLSAgICAucC5pZCAgICAg ICAgICAgPSBBVl9DT0RFQ19JRF9KUEVHMjAwMCwKPiAtICAgIC5jYXBzX2ludGVybmFsICA9IEZG X0NPREVDX0NBUF9OT1RfSU5JVF9USFJFQURTQUZFLAo+IC0gICAgLnByaXZfZGF0YV9zaXplID0g c2l6ZW9mKExpYk9wZW5KUEVHQ29udGV4dCksCj4gLSAgICAuaW5pdCAgICAgICAgICAgPSBsaWJv cGVuanBlZ19lbmNvZGVfaW5pdCwKPiAtICAgIEZGX0NPREVDX0VOQ09ERV9DQihsaWJvcGVuanBl Z19lbmNvZGVfZnJhbWUpLAo+IC0gICAgLnAuY2FwYWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0ZS QU1FX1RIUkVBRFMgfAo+IC0gICAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfQ0FQX0VOQ09E RVJfUkVPUkRFUkVEX09QQVFVRSwKPiAtICAgIC5wLnBpeF9mbXRzICAgICA9IChjb25zdCBlbnVt IEFWUGl4ZWxGb3JtYXRbXSkgewo+IC0gICAgICAgIEFWX1BJWF9GTVRfUkdCMjQsIEFWX1BJWF9G TVRfUkdCQSwgQVZfUElYX0ZNVF9SR0I0OCwKPiAtICAgICAgICBBVl9QSVhfRk1UX1JHQkE2NCwg QVZfUElYX0ZNVF9HQlIyNFAsCj4gLSAgICAgICAgQVZfUElYX0ZNVF9HQlJQOSwgQVZfUElYX0ZN VF9HQlJQMTAsIEFWX1BJWF9GTVRfR0JSUDEyLCBBVl9QSVhfRk1UX0dCUlAxNCwgQVZfUElYX0ZN VF9HQlJQMTYsCj4gLSAgICAgICAgQVZfUElYX0ZNVF9HUkFZOCwgQVZfUElYX0ZNVF9ZQTgsIEFW X1BJWF9GTVRfR1JBWTE2LCBBVl9QSVhfRk1UX1lBMTYsCj4gLSAgICAgICAgQVZfUElYX0ZNVF9H UkFZMTAsIEFWX1BJWF9GTVRfR1JBWTEyLCBBVl9QSVhfRk1UX0dSQVkxNCwKPiAtICAgICAgICBB Vl9QSVhfRk1UX1lVVjQyMFAsIEFWX1BJWF9GTVRfWVVWNDIyUCwgQVZfUElYX0ZNVF9ZVVZBNDIw UCwKPiAtICAgICAgICBBVl9QSVhfRk1UX1lVVjQ0MFAsIEFWX1BJWF9GTVRfWVVWNDQ0UCwgQVZf UElYX0ZNVF9ZVVZBNDIyUCwKPiAtICAgICAgICBBVl9QSVhfRk1UX1lVVjQxMVAsIEFWX1BJWF9G TVRfWVVWNDEwUCwgQVZfUElYX0ZNVF9ZVVZBNDQ0UCwKPiAtICAgICAgICBBVl9QSVhfRk1UX1lV VjQyMFA5LCBBVl9QSVhfRk1UX1lVVjQyMlA5LCBBVl9QSVhfRk1UX1lVVjQ0NFA5LAo+IC0gICAg ICAgIEFWX1BJWF9GTVRfWVVWQTQyMFA5LCBBVl9QSVhfRk1UX1lVVkE0MjJQOSwgQVZfUElYX0ZN VF9ZVVZBNDQ0UDksCj4gLSAgICAgICAgQVZfUElYX0ZNVF9ZVVY0MjBQMTAsIEFWX1BJWF9GTVRf WVVWNDIyUDEwLCBBVl9QSVhfRk1UX1lVVjQ0NFAxMCwKPiAtICAgICAgICBBVl9QSVhfRk1UX1lV VkE0MjBQMTAsIEFWX1BJWF9GTVRfWVVWQTQyMlAxMCwgQVZfUElYX0ZNVF9ZVVZBNDQ0UDEwLAo+ IC0gICAgICAgIEFWX1BJWF9GTVRfWVVWNDIwUDEyLCBBVl9QSVhfRk1UX1lVVjQyMlAxMiwgQVZf UElYX0ZNVF9ZVVY0NDRQMTIsCj4gLSAgICAgICAgQVZfUElYX0ZNVF9ZVVY0MjBQMTQsIEFWX1BJ WF9GTVRfWVVWNDIyUDE0LCBBVl9QSVhfRk1UX1lVVjQ0NFAxNCwKPiAtICAgICAgICBBVl9QSVhf Rk1UX1lVVjQyMFAxNiwgQVZfUElYX0ZNVF9ZVVY0MjJQMTYsIEFWX1BJWF9GTVRfWVVWNDQ0UDE2 LAo+IC0gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAxNiwgQVZfUElYX0ZNVF9ZVVZBNDIyUDE2 LCBBVl9QSVhfRk1UX1lVVkE0NDRQMTYsCj4gLSAgICAgICAgQVZfUElYX0ZNVF9YWVoxMiwKPiAt ICAgICAgICBBVl9QSVhfRk1UX05PTkUKPiAtICAgIH0sCj4gLSAgICAucC5wcml2X2NsYXNzICAg PSAmb3BlbmpwZWdfY2xhc3MsCj4gLSAgICAucC53cmFwcGVyX25hbWUgPSAibGlib3BlbmpwZWci LAo+IC19Owo+IC0tCj4gMi4xNy4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2 ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBl Zy1kZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4g ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl Ii4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVn LWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBl Zy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNp dCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdp dGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=