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 509884AF8E for ; Sat, 25 May 2024 11:00:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F172168D4E9; Sat, 25 May 2024 14:00:24 +0300 (EEST) Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5119768D29F for ; Sat, 25 May 2024 14:00:18 +0300 (EEST) Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-42102c51524so14979335e9.1 for ; Sat, 25 May 2024 04:00:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716634817; x=1717239617; darn=ffmpeg.org; h=user-agent:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:mail-followup-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=Ksb+9TYe4TGXLHr4VYigdIoELXPgp2nxLf3rAPAcr1A=; b=R6a3mKq/aBQQrlSbM06jGaOoKGQP7Blb18ZTtVXGjZLL5JQP7qkPhyANtY7jLNH2VX BugGKD8YIxIguV4UlMxjU2jC6aqoW5OKBz+EuKMYDZmf8j5A3P2ghI2DFAE+jp4bjHUO viR4Sa3SSfWyA0A2uqmAinQBRNbLDipIOms6gfaOu4HB6Yeppm0gCy4HtzxZoJuMDE6d uGkRKMYe81Hpxgd6FZHp0sVVa082fCcdcpwmK8PlATmRX2GkBauTNVWFWCxyoEzXd3kJ po9coWfCvbNlEKACqvcztzUn21Ee2ZnTMFOGKv4q059ndWg/dc7FoGhosTwWS3q49qIa 84Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716634817; x=1717239617; h=user-agent:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:mail-followup-to :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ksb+9TYe4TGXLHr4VYigdIoELXPgp2nxLf3rAPAcr1A=; b=t7LNfuvAaYLgRTMU/HhT9l02vVkhcGuTpEuW5e/PgkO7HUZgAH6W1KpXomvtSA2mSN pUcfNh9BwVsYqTQ6QPXV2Fn4iUK/Fx83UilEafkQOxHCcwPreWLn20Otq3Q40mQJVbZ1 m8ycRtzOYSZS+OOSfSdWNsLMpjWjsMoLhcEQQstz0ulkDPCy42OO5TBJBVUgeJ8UC3x/ +fUKv+lQksWT294ZsP2OPbvJOjsRIro6oRn0uz4wQlakL0S0aNAzHPDxpjm36ZEGieaF T9mamKFhOFSD6Q3F2k4VNtHJyzdEAZWpiPWpttFs7o4lvbXyaCBafRFobiKkzkigPj4i YuVw== X-Gm-Message-State: AOJu0YwK9CrmIqs1BWNDUO//XTg7Ek17ZIuGIbFTQeroIjeRoEG/F0Qk 92fm9w3ZL9yzSvY+IfnwtZvfq3p2iE5qsgo7eF9S2It498AbI5A3R9Xzvg== X-Google-Smtp-Source: AGHT+IHiOfP4u1ByAVwyNjA8ZM80HP3bHnDKFwaJjqVkE8rZGu+k19Up8+09AiyM3hJyVTQs6arGBQ== X-Received: by 2002:a05:600c:287:b0:41b:4caa:554c with SMTP id 5b1f17b1804b1-421081a4b29mr46703925e9.2.1716634816171; Sat, 25 May 2024 04:00:16 -0700 (PDT) Received: from mariano (dynamic-adsl-84-220-189-10.clienti.tiscali.it. [84.220.189.10]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3557a08a88esm3735941f8f.41.2024.05.25.04.00.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 May 2024 04:00:15 -0700 (PDT) Received: by mariano (Postfix, from userid 1000) id 87A63BFCE8; Sat, 25 May 2024 13:00:14 +0200 (CEST) Date: Sat, 25 May 2024 13:00:14 +0200 From: Stefano Sabatini To: FFmpeg development discussions and patches Message-ID: Mail-Followup-To: FFmpeg development discussions and patches , Andrew Sayers References: <20240523200116.740461-1-ffmpeg-devel@pileofstuff.org> <20240523200116.740461-2-ffmpeg-devel@pileofstuff.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240523200116.740461-2-ffmpeg-devel@pileofstuff.org> User-Agent: Mutt/2.1.4 (2021-12-11) Subject: Re: [FFmpeg-devel] [PATCH v5 1/4] doc: Explain what "context" means 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 Cc: Andrew Sayers 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: T24gZGF0ZSBUaHVyc2RheSAyMDI0LTA1LTIzIDIxOjAwOjQwICswMTAwLCBBbmRyZXcgU2F5ZXJz IHdyb3RlOgo+IERlcml2ZWQgZnJvbSBleHBsYW5hdGlvbnMga2luZGx5IHByb3ZpZGVkIGJ5IFN0 ZWZhbm8gU2FiYXRpbmkgYW5kIG90aGVyczoKPiBodHRwczovL2ZmbXBlZy5vcmcvcGlwZXJtYWls L2ZmbXBlZy1kZXZlbC8yMDI0LUFwcmlsLzMyNTkwMy5odG1sCj4gLS0tCj4gIGRvYy9jb250ZXh0 Lm1kIHwgNDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiAgMSBmaWxlIGNoYW5nZWQsIDQzOSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkb2MvY29udGV4dC5tZAo+IAo+IGRpZmYgLS1naXQgYS9kb2MvY29udGV4dC5tZCBiL2Rv Yy9jb250ZXh0Lm1kCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi4y MTQ2OWE2ZTU4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RvYy9jb250ZXh0Lm1kCj4gQEAgLTAs MCArMSw0MzkgQEAKPiArQHBhZ2UgQ29udGV4dCBJbnRyb2R1Y3Rpb24gdG8gY29udGV4dHMKPiAr Cj4gK0B0YWJsZW9mY29udGVudHMKPiArCgo+ICvigJxDb250ZXh04oCdIGlzIGEgbmFtZSBmb3Ig YSB3aWRlbHktdXNlZCBwcm9ncmFtbWluZyBpZGlvbS4KCm5pdCsrOiBiZXR0ZXIgdG8gdXNlIHNp bXBsZSAiIiBxdW90aW5nIHRvIGhlbHAgcGVvcGxlIHdpdGggc2ltcGxlCmFzY2lpIGtleWJvYXJk IGxheW91dHMuCgpuaXQrKzogIkNvbnRleHQiIGlzIGEgbmFtZSBlbXBsb3llZCBmb3IgYSB3aWRl bHktdXNlZCBwcm9ncmFtbWluZyBpZGlvbS4KCnNpbmNlICJjb250ZXh0IiBpcyBub3QgdGhlIGlk aW9tIGl0c2VsZi4KCj4gK1RoaXMgZG9jdW1lbnQgZXhwbGFpbnMgdGhlIGdlbmVyYWwgaWRpb20g YW5kIHNvbWUgY29udmVudGlvbnMgdXNlZCBieSBGRm1wZWcuCj4gKwo+ICtUaGlzIGRvY3VtZW50 IHVzZXMgb2JqZWN0LW9yaWVudGVkIGFuYWxvZ2llcyBmb3IgcmVhZGVycyBmYW1pbGlhciB3aXRo Cj4gK1tvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmddKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9y Zy93aWtpL09iamVjdC1vcmllbnRlZF9wcm9ncmFtbWluZykuCj4gK0J1dCBjb250ZXh0cyBjYW4g YWxzbyBiZSB1c2VkIG91dHNpZGUgb2YgT09QLCBhbmQgZXZlbiBpbiBzaXR1YXRpb25zIHdoZXJl IE9PUAo+ICtpc24ndCBoZWxwZnVsLiAgU28gdGhlc2UgYW5hbG9naWVzIHNob3VsZCBvbmx5IGJl IHVzZWQgYXMgYSByb3VnaCBndWlkZS4KPiArCj4gK0BzZWN0aW9uIENvbnRleHRfZ2VuZXJhbCDi gJxDb250ZXh04oCdIGFzIGEgZ2VuZXJhbCBjb25jZXB0Cj4gKwo+ICtNYW55IHByb2plY3RzIHVz ZSBzb21lIGtpbmQgb2Yg4oCcY29udGV4dOKAnSBpZGlvbS4gIFlvdSBjYW4gc2FmZWx5IHNraXAg dGhpcwo+ICtzZWN0aW9uIGlmIHlvdSBoYXZlIHVzZWQgY29udGV4dHMgaW4gYW5vdGhlciBwcm9q ZWN0LiAgWW91IG1pZ2h0IGFsc28gcHJlZmVyIHRvCj4gK3JlYWQgQHJlZiBDb250ZXh0X2NvbXBh cmlzb24gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnQuCj4g Kwo+ICtAc3Vic2VjdGlvbiBDb250ZXh0X3RoaW5rIOKAnENvbnRleHTigJ0gYXMgYSB3YXkgdG8g dGhpbmsgYWJvdXQgY29kZQo+ICsKPiArQSBjb250ZXh0IGlzIGFueSBkYXRhIHN0cnVjdHVyZSB0 aGF0IGlzIHBhc3NlZCB0byBzZXZlcmFsIGZ1bmN0aW9ucwo+ICsob3Igc2V2ZXJhbCBpbnN0YW5j ZXMgb2YgdGhlIHNhbWUgZnVuY3Rpb24pIHRoYXQgYWxsIG9wZXJhdGUgb24gdGhlIHNhbWUgZW50 aXR5Lgo+ICtGb3IgZXhhbXBsZSwgW29iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZ10oaHR0cHM6 Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT2JqZWN0LW9yaWVudGVkX3Byb2dyYW1taW5nKQo+ICts YW5ndWFnZXMgdXN1YWxseSBwcm92aWRlIG1lbWJlciBmdW5jdGlvbnMgd2l0aCBhIGB0aGlzYCBv ciBgc2VsZmAgdmFsdWU6Cj4gKwoKPiArYGBgcHl0aG9uCj4gKyMgUHl0aG9uIG1ldGhvZHMgKGZ1 bmN0aW9ucyB3aXRoaW4gY2xhc3NlcykgbXVzdCBzdGFydCB3aXRoIGFuIG9iamVjdCBhcmd1bWVu dCwKPiArIyB3aGljaCBkb2VzIGEgc2ltaWxhciBqb2IgdG8gYSBjb250ZXh0Ogo+ICtjbGFzcyBN eUNsYXNzOgo+ICsgICAgZGVmIG15X2Z1bmMoc2VsZik6Cj4gKyAgICAgICAgLi4uCj4gK2BgYAoK bml0OiBhcyBub3RlZCwgSSdkIHNraXAgdGhpcyBleGFtcGxlIGFsdG9nZXRoZXIKCj4gK0NvbnRl eHRzIGNhbiBhbHNvIGJlIHVzZWQgaW4gQy1zdHlsZSBwcm9jZWR1cmFsIGNvZGUuICBJZiB5b3Ug aGF2ZSBldmVyIHdyaXR0ZW4KPiArYSBjYWxsYmFjayBmdW5jdGlvbiwgeW91IGhhdmUgcHJvYmFi bHkgdXNlZCBhIGNvbnRleHQ6Cj4gKwo+ICtgYGBjCj4gK3N0cnVjdCBGaWxlUmVhZGVyIHsKPiAr ICAgIEZJTEUqIGZpbGU7Cj4gK307Cj4gKwo+ICtpbnQgbXlfY2FsbGJhY2sodm9pZCAqbXlfdmFy XywgdWludDhfdCogYnVmLCBpbnQgYnVmX3NpemUpIHsKPiArCj4gKyAgICAvLyBteV92YXIgcHJv dmlkZXMgY29udGV4dCBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uOgo+ICsgICAgc3RydWN0IEZp bGVSZWFkZXIgKm15X3ZhciA9IChzdHJ1Y3QgRmlsZVJlYWRlciAqKW15X3Zhcl87Cj4gKwo+ICsg ICAgcmV0dXJuIHJlYWQobXlfdmFyLT5maWxlLCBzaXplb2YoKmJ1ZiksIGJ1Zl9zaXplKTsKPiAr fQo+ICsKPiArdm9pZCBpbml0KCkgewo+ICsKPiArICAgIHN0cnVjdCBGaWxlUmVhZGVyIG15X3Zh cjsKPiArICAgIG15X3Zhci0+ZmlsZSA9IGZvcGVuKCJteS1maWxlIiwgInJiIik7Cj4gKwo+ICsg ICAgcmVnaXN0ZXJfY2FsbGJhY2sobXlfY2FsbGJhY2ssICZteV92YXIpOwo+ICsKPiArICAgIC4u Lgo+ICsKPiArICAgIGZjbG9zZSggbXlfdmFyLT5maWxlICk7Cj4gKwo+ICt9Cj4gK2BgYAoKTm90 IGNvbnZpbmNlZCB0aGlzIGlzIGEgZ29vZCBleGFtcGxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQg YSBzdHJ1Y3QKd2l0aCBhIHNpbmdsZSBmaWVsZCBtaWdodCBiZSB1c2VkIGRpcmVjdGx5IHNvIHRo aXMgbG9va3MgYSBiaXQgbGlrZQpvYmZ1c2NhdGlvbi4KClJhdGhlciB0aGFuIHRoaXMsIG1heWJl IHNvbWV0aGluZyBhczoKCnN0cnVjdCBBVkJpa2VTaGVkQ29udGV4dCB7CiAgICB1aW50OF90IGNv bG9yX3I7CiAgICB1aW50OF90IGNvbG9yX2c7CiAgICB1aW50OF90IGNvbG9yX2I7CiAgICBjaGFy ICpjb2xvcjsKICAgIGludCAoKiBzZXRfZGVmYXVsdF9jb2xvcikoY29uc3QgY2hhciAqY29sb3Ip Owp9CgpBVkJpa2VTaGVkQ29udGV4dCAqYXZfYmlrZXNoZWRfY29udGV4dF9hbGxvYygpOwppbnQg ICAgICAgICAgICAgICAgYXZfYmlrZXNoZWRfY29udGV4dF9zZXRfY29sb3IoQVZCaWtlU2hlZENv bnRleHQgKmJpa2VzaGVkLCBjb25zdCBjaGFyICpjb2xvcik7CmNvbnN0IGNoYXIgICAgICAgICph dl9iaWtlc2hlZF9jb250ZXh0X2dldF9jb2xvcihBVkJpa2VTaGVkQ29udGV4dCAqYmlrZXNoZWQp Owp2b2lkICAgICAgICAgICAgICAgYXZfYmlrZXNoZWRfY29udGV4dF9nZXRfcmdiX2NvbG9yKEFW QmlrZVNoZWRDb250ZXh0ICpiaWtlc2hlZCwgdWludDhfdCAqY29sb3JfciwgdWludDhfdCAqY29s b3JfZywgdWludDhfdCAqY29sb3JfYik7CgpUaGVuIHlvdSBjYW4gdXNlOgppbnQgc2V0X2Jpa2Vz aGVkX3BpbmtfY29sb3IoQVZCaWtlU2hlZENvbnRleHQgKmJpa2VzaGVkLCBjb25zdCBjaGFyICpj b2xvcikgewogICAgcmV0dXJuIGF2X2Jpa2VzaGVkX2NvbnRleHRfc2V0X2NvbG9yKGJpa2VzaGVk LCAicGluayIpOwp9CgpiaWtlc2hlZC0+c2V0X2RlZmF1bHRfY29sb3IgPSBzZXRfYmlrZXNoZWRf cGlua19jb2xvcjsKCnRvIHByb3ZpZGUgYSBjYWxsYmFjayBleGFtcGxlCgo+ICtJbiB0aGUgYnJv YWRlc3Qgc2Vuc2UsIGEgY29udGV4dCBpcyBqdXN0IGEgd2F5IHRvIHRoaW5rIGFib3V0IHNvbWUg Y29kZS4KPiArWW91IGNhbiBldmVuIHVzZSBpdCB0byB0aGluayBhYm91dCBjb2RlIHdyaXR0ZW4g YnkgcGVvcGxlIHdobyBoYXZlIG5ldmVyCj4gK2hlYXJkIHRoZSB0ZXJtLCBvciB3aG8gd291bGQg ZGlzYWdyZWUgd2l0aCB5b3UgYWJvdXQgd2hhdCBpdCBtZWFucy4KPiArQnV0IHdoZW4gRkZtcGVn IGRldmVsb3BlcnMgc2F5IOKAnGNvbnRleHTigJ0sIHRoZXkncmUgdXN1YWxseSB0YWxraW5nIGFi b3V0Cj4gK2EgbW9yZSBzcGVjaWZpYyBzZXQgb2YgY29udmVudGlvbnMuCj4gKwo+ICtAc3Vic2Vj dGlvbiBDb250ZXh0X2NvbW11bmljYXRpb24g4oCcQ29udGV4dOKAnSBhcyBhIHRvb2wgb2YgY29t bXVuaWNhdGlvbgo+ICsKPiAr4oCcQ29udGV4dOKAnCBjYW4ganVzdCBiZSBhIHdvcmQgdG8gdW5k ZXJzdGFuZCBjb2RlIGluIHlvdXIgb3duIGhlYWQsCj4gK2J1dCBpdCBjYW4gYWxzbyBiZSBhIHRl cm0geW91IHVzZSB0byBleHBsYWluIHlvdXIgaW50ZXJmYWNlcy4KPiArSGVyZSBpcyBhIHZlcnNp b24gb2YgdGhlIGNhbGxiYWNrIGV4YW1wbGUgdGhhdCBtYWtlcyB0aGUgY29udGV4dCBleHBsaWNp dDoKPiArCj4gK2BgYGMKPiArc3RydWN0IEZpbGVSZWFkZXJDb250ZXh0IHsKPiArICAgIEZJTEUg KmZpbGU7Cj4gK307Cj4gKwo+ICtpbnQgbXlfY2FsbGJhY2sodm9pZCAqY3R4XywgdWludDhfdCAq YnVmLCBpbnQgYnVmX3NpemUpIHsKPiArCj4gKyAgICAvLyBjdHggcHJvdmlkZXMgY29udGV4dCBm b3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uOgo+ICsgICAgc3RydWN0IEZpbGVSZWFkZXJDb250ZXh0 ICpjdHggPSAoc3RydWN0IEZpbGVSZWFkZXJDb250ZXh0ICopY3R4XzsKPiArCj4gKyAgICByZXR1 cm4gcmVhZChjdHgtPmZpbGUsIHNpemVvZigqYnVmKSwgYnVmX3NpemUpOwo+ICt9Cj4gKwo+ICt2 b2lkIGluaXQoKSB7Cj4gKwo+ICsgICAgc3RydWN0IEZpbGVSZWFkZXIgY3R4OwoKPiArICAgIGN0 eC0+ZmlsZSA9IGZvcGVuKCJteS1maWxlIiwgInJiIik7Cgp0aGlzIHNob3VsZCBiZSBjdHguZmls ZQoKPiArCj4gKyAgICByZWdpc3Rlcl9jYWxsYmFjayhteV9jYWxsYmFjaywgJmN0eCk7CgpJIGRv bid0IHVuZGVyc3RhbmQgd2hhdCdzIHRoaXMgZm9yCgo+ICsKPiArICAgIC4uLgo+ICsKPiArICAg IGZjbG9zZSggY3R4LT5maWxlICk7Cj4gKwo+ICt9Cj4gK2BgYAo+ICsKPiArVGhlIGRpZmZlcmVu Y2UgaGVyZSBpcyBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQuICBJZiBhIHBpZWNlIG9mIGNvZGUKPiAr KmFwcGVhcnMgY29tcGF0aWJsZSB3aXRoIGNvbnRleHRzKiwgdGhlbiB5b3UgYXJlICphbGxvd2Vk IHRvIHRoaW5rCj4gK3RoYXQgd2F5KiwgYnV0IGlmIGEgcGllY2Ugb2YgY29kZSAqZXhwbGljaXRs eSBzdGF0ZXMgaXQgdXNlcwo+ICtjb250ZXh0cyosIHRoZW4geW91IGFyZSAqcmVxdWlyZWQgdG8g Zm9sbG93IHRoYXQgYXBwcm9hY2gqLgo+ICsKPiArRm9yIGV4YW1wbGUsIHRha2UgYSBsb29rIGF0 IGF2aW9fYWxsb2NfY29udGV4dCgpLgo+ICtUaGUgZnVuY3Rpb24gbmFtZSBhbmQgcmV0dXJuIHZh bHVlIGJvdGggc3RhdGUgaXQgdXNlcyBjb250ZXh0cywKCj4gK3NvIGZhaWxpbmcgdG8gZm9sbG93 IHRoYXQgYXBwcm9hY2ggaXMgYSBidWcgeW91IGNhbiByZXBvcnQuCgoiZmFpbGluZyB0byBmb2xs b3cgdGhhdCBhcHByb2FjaCIgaXMgbWVhbnQgYXQgdGhlIEFQSSBsZXZlbD8KCj4gK0J1dCBpdHMg YXJndW1lbnRzIGFyZSBhIHNldCBvZiBjYWxsYmFja3MgdGhhdCBtZXJlbHkgYXBwZWFyIGNvbXBh dGlibGUgd2l0aAo+ICtjb250ZXh0cywgc28gaXQncyBmaW5lIHRvIHdyaXRlIGEgYHJlYWRfcGFj a2V0YCBmdW5jdGlvbiB0aGF0IGp1c3QgcmVhZHMKPiArZnJvbSBzdGFuZGFyZCBpbnB1dC4KPiAr Cj4gK1doZW4gYSBwcm9ncmFtbWVyIHNheXMgdGhlaXIgY29kZSBpcyAiYSBjb250ZXh0IiwgdGhl eSdyZSBndWFyYW50ZWVpbmcKPiArdG8gZm9sbG93IGEgc2V0IG9mIGNvbnZlbnRpb25zIGVuZm9y Y2VkIGJ5IHRoZWlyIGNvbW11bml0eSAtIGZvciBleGFtcGxlLAo+ICt0aGUgRkZtcGVnIGNvbW11 bml0eSBlbmZvcmNlcyB0aGF0IGNvbnRleHRzIGhhdmUgc2VwYXJhdGUgYWxsb2NhdGlvbiwKPiAr Y29uZmlndXJhdGlvbiwgYW5kIGluaXRpYWxpemF0aW9uIHN0ZXBzLiAgVGhhdCdzIGRpZmZlcmVu dCBmcm9tIHNheWluZwo+ICt0aGVpciBjb2RlIGlzICJhbiBvYmplY3QiLCB3aGljaCBub3JtYWxs eSBndWFyYW50ZWVzIHRvIGZvbGxvdyBjb252ZW50aW9ucwo+ICtlbmZvcmNlZCBieSB0aGVpciBw cm9ncmFtbWluZyBsYW5ndWFnZSAoZS5nLiB1c2luZyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uKS4K PiArCj4gK0BzZWN0aW9uIENvbnRleHRfZmZtcGVnIEZGbXBlZyBjb250ZXh0cwo+ICsKPiArVGhp cyBzZWN0aW9uIGRpc2N1c3NlcyBzcGVjaWZpYyBjb250ZXh0LXJlbGF0ZWQgY29udmVudGlvbnMg dXNlZCBpbiBGRm1wZWcuCj4gK1NvbWUgb2YgdGhlc2UgYXJlIHVzZWQgaW4gb3RoZXIgcHJvamVj dHMsIG90aGVycyBhcmUgdW5pcXVlIHRvIHRoaXMgcHJvamVjdC4KPiArCj4gK0BzdWJzZWN0aW9u IENvbnRleHRfbmFtaW5nIE5hbWluZzog4oCcQ29udGV4dOKAnSBhbmQg4oCcY3R44oCdCj4gKwo+ ICtgYGBjCj4gKy8vIENvbnRleHQgc3RydWN0IG5hbWVzIHVzdWFsbHkgZW5kIHdpdGggYENvbnRl eHRgOgo+ICtzdHJ1Y3QgQVZTb21lQ29udGV4dCB7Cj4gKyAgLi4uCj4gK307Cj4gKwo+ICsvLyBG dW5jdGlvbnMgYXJlIHVzdWFsbHkgbmFtZWQgYWZ0ZXIgdGhlaXIgY29udGV4dCwKPiArLy8gY29u dGV4dCBwYXJhbWV0ZXJzIHVzdWFsbHkgY29tZSBmaXJzdCBhbmQgYXJlIG9mdGVuIGNhbGxlZCBg Y3R4YDoKPiArdm9pZCBhdl9zb21lX2Z1bmN0aW9uKEFWU29tZUNvbnRleHQgKmN0eCwgLi4uKTsK PiArYGBgCj4gKwo+ICtJZiBhbiBGRm1wZWcgc3RydWN0IGlzIGludGVuZGVkIGZvciB1c2UgYXMg YSBjb250ZXh0LCBpdHMgbmFtZSB1c3VhbGx5Cj4gK21ha2VzIHRoYXQgY2xlYXIuICBFeGNlcHRp b25zIHRvIHRoaXMgcnVsZSBpbmNsdWRlIEFWTUQ1LCB3aGljaCBpcyBvbmx5Cj4gK2lkZW50aWZp ZWQgYXMgYSBjb250ZXh0IGJ5IEByZWYgbGliYXZ1dGlsL21kNS5jICJ0aGUgZnVuY3Rpb25zIHRo YXQgY2FsbCBpdCIuCj4gKwo+ICtJZiBhIGZ1bmN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGNv bnRleHQsIGl0cyBuYW1lIHVzdWFsbHkKPiArYmVnaW5zIHdpdGggc29tZSB2YXJpYW50IG9mIHRo ZSBjb250ZXh0IG5hbWUgKGUuZy4gYXZfbWQ1X2FsbG9jKCkKPiArb3IgYXZjb2RlY19hbGxvY19j b250ZXh0MygpKS4gIEV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlIGluY2x1ZGUKPiArQHJlZiBhdmZv cm1hdC5oICJBVkZvcm1hdENvbnRleHQncyBmdW5jdGlvbnMiLCBtYW55IG9mIHdoaWNoCj4gK2Jl Z2luIHdpdGgganVzdCBgYXZfYC4KPiArCj4gK0lmIGEgZnVuY3Rpb24gaGFzIGEgY29udGV4dCBw YXJhbWV0ZXIsIGl0IHVzdWFsbHkgY29tZXMgZmlyc3QgYW5kIGl0cyBuYW1lCj4gK29mdGVuIGNv bnRhaW5zIGBjdHhgLiAgRXhjZXB0aW9ucyBpbmNsdWRlIGF2X2JzZl9hbGxvYygpLCB3aGljaCBw dXRzIHRoZQo+ICtjb250ZXh0IGFyZ3VtZW50IHNlY29uZCB0byBlbXBoYXNpc2UgaXQncyBhbiBv dXQgdmFyaWFibGUuCj4gKwoKPiArU29tZSBmdW5jdGlvbnMgZml0IGF3a3dhcmRseSB3aXRoaW4g RkZtcGVnJ3MgY29udGV4dCBpZGlvbS4gIEZvciBleGFtcGxlLAo+ICthdl9hbWJpZW50X3ZpZXdp bmdfZW52aXJvbm1lbnRfY3JlYXRlX3NpZGVfZGF0YSgpIGNyZWF0ZXMgYW4KPiArQVZBbWJpZW50 Vmlld2luZ0Vudmlyb25tZW50IGNvbnRleHQsIHRoZW4gYWRkcyBpdCB0byB0aGUgc2lkZS1kYXRh IG9mIGFuCj4gK0FWRnJhbWUgY29udGV4dC4KClRvIGdvIGJhY2sgdG8gdGhpcyB1bmZpdHRpbmcg ZXhhbXBsZSwgY2FuIHlvdSBzdGF0ZSB3aGF0IHdvdWxkIGJlCmZpdHRpbmcgaW4gdGhpcyBjYXNl PwoKPiBJZiB5b3UgZmluZCBjb250ZXh0cyBhIHVzZWZ1bCBtZXRhcGhvciBpbiB0aGVzZSBjYXNl cywKPiAreW91IG1pZ2h0IHByZWZlciB0byB0aGluayBvZiB0aGVzZSBmdW5jdGlvbnMgYXMgInJl Y2VpdmluZyIgYW5kICJwcm9kdWNpbmciCj4gK2NvbnRleHRzLgo+ICsKPiArQHN1YnNlY3Rpb24g Q29udGV4dF9kYXRhX2hpZGluZyBEYXRhIGhpZGluZzogcHJpdmF0ZSBjb250ZXh0cwo+ICsKPiAr YGBgYwo+ICsvLyBDb250ZXh0IHN0cnVjdHMgb2Z0ZW4gaGlkZSBwcml2YXRlIGNvbnRleHQ6Cj4g K3N0cnVjdCBBVlNvbWVDb250ZXh0IHsKPiArICB2b2lkICpwcml2X2RhdGE7IC8vIHNvbWV0aW1l cyBqdXN0IGNhbGxlZCAiaW50ZXJuYWwiCj4gK307Cj4gK2BgYAo+ICsKPiArQ29udGV4dHMgcHJl c2VudCBhIHB1YmxpYyBpbnRlcmZhY2UsIHNvIGNoYW5naW5nIGEgY29udGV4dCdzIG1lbWJlcnMg Zm9yY2VzCj4gK2V2ZXJ5b25lIHRoYXQgdXNlcyB0aGUgbGlicmFyeSB0byBhdCBsZWFzdCByZWNv bXBpbGUgdGhlaXIgcHJvZ3JhbSwKPiAraWYgbm90IHJld3JpdGUgaXQgdG8gcmVtYWluIGNvbXBh dGlibGUuICBNYW55IGNvbnRleHRzIHJlZHVjZSB0aGlzIHByb2JsZW0KPiArYnkgaW5jbHVkaW5n IGEgcHJpdmF0ZSBjb250ZXh0IHdpdGggYSB0eXBlIHRoYXQgaXMgbm90IGV4cG9zZWQgaW4gdGhl IHB1YmxpYwo+ICtpbnRlcmZhY2UuICBIaWRpbmcgaW5mb3JtYXRpb24gdGhpcyB3YXkgZW5zdXJl cyBpdCBjYW4gYmUgbW9kaWZpZWQgd2l0aG91dAo+ICthZmZlY3RpbmcgZG93bnN0cmVhbSBzb2Z0 d2FyZS4KPiArCj4gK1ByaXZhdGUgY29udGV4dHMgb2Z0ZW4gc3RvcmUgdmFyaWFibGVzIHVzZXJz IGFyZW4ndCBzdXBwb3NlZCB0byBzZWUKPiArKHNpbWlsYXIgdG8gYW4gT09QIHByaXZhdGUgYmxv Y2spLCBidXQgY2FuIGFsc28gc3RvcmUgaW5mb3JtYXRpb24gc2hhcmVkIGJldHdlZW4KPiArc29t ZSBidXQgbm90IGFsbCBpbnN0YW5jZXMgb2YgYSBjb250ZXh0IChlLmcuIGNvZGVjLXNwZWNpZmlj IGZ1bmN0aW9uYWxpdHkpLAo+ICthbmQgQHJlZiBDb250ZXh0X2F2b3B0aW9ucyAiQVZPcHRpb25z LWVuYWJsZWQgc3RydWN0cyIgY2FuIGluY2x1ZGUgb3B0aW9ucwo+ICt0aGF0IGFyZSBhY2Nlc3Np YmxlIHRocm91Z2ggdGhlIEByZWYgYXZvcHRpb25zICJBVk9wdGlvbnMgQVBJIi4KPiArT2JqZWN0 LW9yaWVudGVkIHByb2dyYW1tZXJzIHRoaW5raW5nIGFib3V0IHByaXZhdGUgY29udGV4dHMgc2hv dWxkIHJlbWVtYmVyCj4gK3RoYXQgRkZtcGVnIGlzbid0ICpsYXJnZSBlbm91Z2gqIHRvIG5lZWQg c29tZSBjb21tb24gb2JqZWN0LW9yaWVudGVkIHRlY2huaXF1ZXMsCj4gK2V2ZW4gdGhvdWdoIGl0 J3Mgc29sdmluZyBhIHByb2JsZW0gKmNvbXBsZXggZW5vdWdoKiB0byBiZW5lZml0IGZyb20KPiAr c29tZSByYXJlciB0ZWNobmlxdWVzLgo+ICsKPiArQHN1YnNlY3Rpb24gQ29udGV4dF9saWZldGlt ZSBNYW5hZ2UgbGlmZXRpbWU6IGFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCBmcmVlCj4gKwo+ICtg YGBjCj4gK3ZvaWQgbXlfZnVuY3Rpb24oIC4uLiApIHsKPiArCj4gKyAgICAvLyBDb250ZXh0IHN0 cnVjdHMgYXJlIGFsbG9jYXRlZCB0aGVuIGluaXRpYWxpemVkIHdpdGggYXNzb2NpYXRlZCBmdW5j dGlvbnM6Cj4gKwo+ICsgICAgQVZTb21lQ29udGV4dCAqY3R4ID0gYXZfc29tZV9jb250ZXh0X2Fs bG9jKC4uLik7Cj4gKwo+ICsgICAgLy8gLi4uIGNvbmZpZ3VyZSBjdHggLi4uCj4gKwo+ICsgICAg YXZfc29tZV9jb250ZXh0X2luaXQoY3R4LCAuLi4pOwo+ICsKPiArICAgIC8vIC4uLiB1c2UgY3R4 IC4uLgo+ICsKPiArICAgIC8vIENvbnRleHQgc3RydWN0cyBhcmUgZnJlZWQgd2l0aCBhc3NvY2lh dGVkIGZ1bmN0aW9uczoKPiArCj4gKyAgICBhdl9zb21lX2NvbnRleHRfY2xvc2UoY3R4KTsKPiAr ICAgIGF2X3NvbWVfY29udGV4dF9mcmVlKGN0eCk7Cj4gKwo+ICt9Cj4gK2BgYAo+ICsKPiArRkZt cGVnIGNvbnRleHRzIGdvIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGFnZXMgb2YgbGlmZToKPiAr Cj4gKzEuIGFsbG9jYXRpb24gKG9mdGVuIGEgZnVuY3Rpb24gdGhhdCBlbmRzIHdpdGggYF9hbGxv Y2ApCj4gKyAgICogYSByYW5nZSBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB1c2UgYnkgdGhl IHN0cnVjdHVyZQo+ICsgICAqIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb24gYm91bmRhcmllcyB0aGF0 IGltcHJvdmUgY2FjaGluZwo+ICsgICAqIG1lbW9yeSBpcyByZXNldCB0byB6ZXJvZXMsIHNvbWUg aW50ZXJuYWwgc3RydWN0dXJlcyBtYXkgYmUgaW5pdGlhbGl6ZWQKPiArMi4gY29uZmlndXJhdGlv biAoaW1wbGVtZW50ZWQgYnkgc2V0dGluZyB2YWx1ZXMgZGlyZWN0bHkgb24gdGhlIGNvbnRleHQp Cj4gKyAgICogbm8gZnVuY3Rpb24gZm9yIHRoaXMgLSBjYWxsaW5nIGNvZGUgcG9wdWxhdGVzIHRo ZSBzdHJ1Y3R1cmUgZGlyZWN0bHkKPiArICAgKiBtZW1vcnkgaXMgcG9wdWxhdGVkIHdpdGggdXNl ZnVsIHZhbHVlcwo+ICsgICAqIHNpbXBsZSBjb250ZXh0cyBjYW4gc2tpcCB0aGlzIHN0YWdlCj4g KzMuIGluaXRpYWxpemF0aW9uIChvZnRlbiBhIGZ1bmN0aW9uIHRoYXQgZW5kcyB3aXRoIGBfaW5p dGApCj4gKyAgICogc2V0dXAgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIGJhc2VkIG9uIHRoZSBjb25m aWd1cmF0aW9uIChlLmcuIG9wZW5pbmcgZmlsZXMpCj4gKzUuIG5vcm1hbCB1c2FnZQo+ICsgICAq IG1vc3QgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gdGhpcyBzdGFnZQo+ICsgICAqIGRvY3VtZW50 YXRpb24gaW1wbGllcyBzb21lIG1lbWJlcnMgYXJlIG5vdyByZWFkLW9ubHkgKG9yIG5vdCB1c2Vk IGF0IGFsbCkKPiArICAgKiBzb21lIGNvbnRleHRzIGFsbG93IHJlLWluaXRpYWxpemF0aW9uCj4g KzYuIGNsb3NpbmcgKG9mdGVuIGEgZnVuY3Rpb24gdGhhdCBlbmRzIHdpdGggYF9jbG9zZSgpYCkK PiArICAgKiB0ZWFyZG93biBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgKGUuZy4gY2xvc2luZyBmaWxl cykKPiArNy4gZGVhbGxvY2F0aW9uIChvZnRlbiBhIGZ1bmN0aW9uIHRoYXQgZW5kcyB3aXRoIGBf ZnJlZSgpYCkKPiArICAgKiBtZW1vcnkgaXMgcmV0dXJuZWQgdG8gdGhlIHBvb2wgb2YgYXZhaWxh YmxlIG1lbW9yeQo+ICsKPiArVGhpcyBjYW4gbWlzbGVhZCBvYmplY3Qtb3JpZW50ZWQgcHJvZ3Jh bW1lcnMsIHdobyBleHBlY3Qgc29tZXRoaW5nIG1vcmUgbGlrZToKPiArCj4gKzEuIGFsbG9jYXRp b24gKHVzdWFsbHkgYSBgbmV3YCBrZXl3b3JkKQo+ICsgICAqIGEgcmFuZ2Ugb2YgbWVtb3J5IGlz IGFsbG9jYXRlZCBmb3IgdXNlIGJ5IHRoZSBzdHJ1Y3R1cmUKPiArICAgKiBtZW1vcnkgKm1heSog YmUgcmVzZXQgKGUuZy4gZm9yIHNlY3VyaXR5IHJlYXNvbnMpCj4gKzIuIGluaXRpYWxpemF0aW9u ICh1c3VhbGx5IGEgY29uc3RydWN0b3IpCj4gKyAgICogbWVtb3J5IGlzIHBvcHVsYXRlZCB3aXRo IHVzZWZ1bCB2YWx1ZXMKPiArICAgKiByZWxhdGVkIHNldHVwIGFjdGlvbnMgYXJlIHBlcmZvcm1l ZCBiYXNlZCBvbiBhcmd1bWVudHMgKGUuZy4gb3BlbmluZyBmaWxlcykKPiArMy4gbm9ybWFsIHVz YWdlCj4gKyAgICogbW9zdCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGlzIHN0YWdlCj4gKyAg ICogY29tcGlsZXIgZW5mb3JjZXMgdGhhdCBzb21lIG1lbWJlcnMgYXJlIHJlYWQtb25seSAob3Ig cHJpdmF0ZSkKPiArICAgKiBubyBnb2luZyBiYWNrIHRvIHRoZSBwcmV2aW91cyBzdGFnZQo+ICs0 LiBmaW5hbGl6YXRpb24gKHVzdWFsbHkgYSBkZXN0cnVjdG9yKQo+ICsgICAqIHRlYXJkb3duIGFj dGlvbnMgYXJlIHBlcmZvcm1lZCAoZS5nLiBjbG9zaW5nIGZpbGVzKQo+ICs1LiBkZWFsbG9jYXRp b24gKHVzdWFsbHkgYSBgZGVsZXRlYCBrZXl3b3JkKQo+ICsgICAqIG1lbW9yeSBpcyByZXR1cm5l ZCB0byB0aGUgcG9vbCBvZiBhdmFpbGFibGUgbWVtb3J5Cj4gKwo+ICtGRm1wZWcncyBhbGxvY2F0 aW9uIHN0YWdlIGlzIGJyb2FkbHkgc2ltaWxhciB0byB0aGUgT09QIHN0YWdlIG9mIHRoZSBzYW1l IG5hbWUuCj4gK0JvdGggc2V0IGFzaWRlIHNvbWUgbWVtb3J5IGZvciB1c2UgYnkgYSBuZXcgZW50 aXR5LCBidXQgRkZtcGVnJ3Mgc3RhZ2UgY2FuIGFsc28KPiArZG8gc29tZSBoaWdoZXItbGV2ZWwg b3BlcmF0aW9ucy4gIEZvciBleGFtcGxlLCBAcmVmIENvbnRleHRfYXZvcHRpb25zCj4gKyJBVk9w dGlvbnMtZW5hYmxlZCBzdHJ1Y3RzIiBzZXQgdGhlaXIgQVZDbGFzcyBtZW1iZXIgZHVyaW5nIGFs bG9jYXRpb24uCj4gKwo+ICtGRm1wZWcncyBjb25maWd1cmF0aW9uIHN0YWdlIGludm9sdmVzIHNl dHRpbmcgYW55IHZhcmlhYmxlcyB5b3Ugd2FudCB0byBiZWZvcmUKPiAreW91IHN0YXJ0IHVzaW5n IHRoZSBjb250ZXh0LiAgQ29tcGxpY2F0ZWQgRkZtcGVnIHN0cnVjdHVyZXMgbGlrZSBBVkNvZGVj Q29udGV4dAo+ICt0ZW5kIHRvIGhhdmUgbWFueSBtZW1iZXJzIHlvdSAqY291bGQqIHNldCwgYnV0 IGluIHByYWN0aWNlIG1vc3QgcHJvZ3JhbXMgc2V0Cj4gK2ZldyBpZiBhbnkgb2YgdGhlbS4gIFRo ZSBmcmVlZm9ybSBjb25maWd1cmF0aW9uIHN0YWdlIHdvcmtzIGJldHRlciB0aGFuIGJ1bmRsaW5n Cj4gK3RoZXNlIGludG8gdGhlIGluaXRpbGl6YXRpb24gc3RhZ2UsIHdoaWNoIHdvdWxkIGxlYWQg dG8gZnVuY3Rpb25zIHdpdGgKPiAraW1wcmFjdGljYWxseSBtYW55IHBhcmFtZXRlcnMsIGFuZCB3 b3VsZCBtZWFuIGVhY2ggbmV3IG9wdGlvbiB3YXMgYW4KPiAraW5jb21wYXRpYmxlIGNoYW5nZSB0 byB0aGUgQVBJLgo+ICsKPiArRkZtcGVnJ3MgaW5pdGlhbGl6YXRpb24gc3RhZ2UgaW52b2x2ZXMg Y2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgc2V0cyB0aGUgY29udGV4dAo+ICt1cCBiYXNlZCBvbiB5 b3VyIGNvbmZpZ3VyYXRpb24uCj4gKwo+ICtGRm1wZWcncyBmaXJzdCB0aHJlZSBzdGFnZXMgZG8g dGhlIHNhbWUgam9iIGFzIE9PUCdzIGZpcnN0IHR3byBzdGFnZXMuCj4gK1RoaXMgY2FuIG1pc2xl YWQgb2JqZWN0LW9yaWVudGVkIGRldmVsb3BlcnMsIHdobyBleHBlY3QgdG8gZG8gbGVzcyB3b3Jr IGluIHRoZQo+ICthbGxvY2F0aW9uIHN0YWdlLCBhbmQgbW9yZSB3b3JrIGluIHRoZSBpbml0aWFs aXphdGlvbiBzdGFnZS4gIFRvIHNpbXBsaWZ5IHRoaXMsCj4gK21vc3QgRkZtcGVnIGNvbnRleHRz IHByb3ZpZGUgYSBjb21iaW5lZCBhbGxvY2F0b3IgYW5kIGluaXRpYWxpemVyIGZ1bmN0aW9uLgo+ ICtGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdWZmaXhlcyBsaWtlIGBfYWxsb2NgLCBgX2luaXRg LCBgX2FsbG9jX2NvbnRleHRgIGFuZAo+ICtldmVuIGBfb3BlbmAgY2FuIGluZGljYXRlIHRoZSBm dW5jdGlvbiBkb2VzIGFueSBjb21iaW5hdGlvbiBvZiBhbGxvY2F0aW9uIGFuZAo+ICtpbml0aWFs aXphdGlvbi4KPiArCj4gK0ZGbXBlZydzICJjbG9zaW5nIiBzdGFnZSBpcyBicm9hZGx5IHNpbWls YXIgdG8gT09QJ3MgImZpbmFsaXphdGlvbiIgc3RhZ2UsCj4gK2J1dCBzb21lIGNvbnRleHRzIGFs bG93IHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGZpbmFsaXphdGlvbi4gIEZvciBleGFtcGxlLAo+ ICtTd3JDb250ZXh0IGxldHMgeW91IGNhbGwgc3dyX2Nsb3NlKCkgdGhlbiBzd3JfaW5pdCgpIHRv IHJldXNlIGEgY29udGV4dC4KPiArQmUgYXdhcmUgdGhhdCBzb21lIEZGbXBlZyBmdW5jdGlvbnMg aGFwcGVuIHRvIHVzZSB0aGUgd29yZCAiZmluYWxpemUiIGluIGEgd2F5Cj4gK3RoYXQgaGFzIG5v dGhpbmcgdG8gZG8gd2l0aCB0aGUgT09QIHN0YWdlIChlLmcuIGF2X2JzZl9saXN0X2ZpbmFsaXpl KCkpLgo+ICsKPiArRkZtcGVnJ3MgImRlYWxsb2NhdGlvbiIgc3RhZ2UgaXMgYnJvYWRseSBzaW1p bGFyIHRvIE9PUCwgYnV0IGNhbiBwZXJmb3JtIHNvbWUKPiAraGlnaGVyLWxldmVsIGZ1bmN0aW9u cyAoc2ltaWxhciB0byB0aGUgYWxsb2NhdGlvbiBzdGFnZSkuCj4gKwo+ICtDbG9zaW5nIGZ1bmN0 aW9ucyB1c3VhbGx5IGVuZCB3aXRoICJfY2xvc2UiLCB3aGlsZSBkZWFsbG9jYXRpb24KPiArZnVu Y3Rpb25zIHVzdWFsbHkgZW5kIHdpdGggIl9mcmVlIi4gIFZlcnkgZmV3IGNvbnRleHRzIG5lZWQg dGhlIGZsZXhpYmlsaXR5IG9mCj4gK3NlcGFyYXRlICJjbG9zaW5nIiBhbmQgImRlYWxsb2NhdGlv biIgc3RhZ2VzLCBzbyBtYW55ICJfZnJlZSIgZnVuY3Rpb25zCj4gK2ltcGxpY2l0bHkgY2xvc2Ug dGhlIGNvbnRleHQgZmlyc3QuCj4gKwoKPiArQHN1YnNlY3Rpb24gQ29udGV4dF9hdm9wdGlvbnMg UmVmbGVjdGlvbjogQVZPcHRpb25zLWVuYWJsZWQgc3RydWN0cwoKVG8gY2xhcmlmeSB0aGlzLCB3 ZSBzaG91bGQgbm90IHRyZWF0IHJlZmxlY3Rpb24gYW5kIEFWT3B0aW9ucyBhcwpzeW5vbnltcy4K CkNsZWFybHkgdGhlIEFWT3B0aW9ucyBzeXN0ZW0gZW5hYmxlcyB0aGUgb3B0aW9ucyBpbnRyb3Nw ZWN0aW9uICh5b3UKY2FuIHF1ZXJ5IHRoZSBzcGVjaWZpZWQgb3B0aW9ucywgYW5kIGdldCB0aGUg ZGVmYXVsdCB2YWx1ZXMgb3IgdGhlIHNldAp2YWx1ZXMgYW5kIGhlbHAgZXRjLikgYnV0IGl0J3Mg bm90IG9ubHkgYWJvdXQgaW50cm9zcGVjdGlvbiwgYnV0IGFsc28KYWJvdXQgc2V0dGluZyB0aGUg dmFsdWVzIHVzaW5nIGEgaGlnaC1sZXZlbCBBUEkuCgo+ICsKPiArT2JqZWN0LW9yaWVudGVkIHBy b2dyYW1taW5nIHB1dHMgbW9yZSBmb2N1cyBvbiBkYXRhIGhpZGluZyB0aGFuIEZGbXBlZyBuZWVk cywKPiArYnV0IGl0IGFsc28gcHV0cyBsZXNzIGZvY3VzIG9uCj4gK1tyZWZsZWN0aW9uXShodHRw czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWZsZWN0aW9uXyhjb21wdXRlcl9wcm9ncmFtbWlu ZykpLgo+ICsKCj4gK1RvIHVuZGVyc3RhbmQgRkZtcGVnJ3MgcmVmbGVjdGlvbiByZXF1aXJlbWVu dHMsIHJ1biBgZmZtcGVnIC1oIGZ1bGxgIG9uIHRoZQo+ICtjb21tYW5kLWxpbmUsIHRoZW4gYXNr IHlvdXJzZWxmIGhvdyB5b3Ugd291bGQgaW1wbGVtZW50IGFsbCB0aG9zZSBvcHRpb25zCj4gK3dp dGggdGhlIEMgc3RhbmRhcmQgW2BnZXRvcHRgIGZ1bmN0aW9uXShodHRwczovL2VuLndpa2lwZWRp YS5vcmcvd2lraS9HZXRvcHQpLgo+ICtZb3UgY2FuIGFsc28gYXNrIHRoZSBzYW1lIHF1ZXN0aW9u IGZvciBhbnkgb3RoZXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHlvdSBrbm93Lgo+ICtbUHl0aG9u J3MgYXJncGFyc2UgbW9kdWxlXShodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJn cGFyc2UuaHRtbCkKPiAraXMgYSBnb29kIGV4YW1wbGUgLSBpdHMgYXBwcm9hY2ggd29ya3Mgd2Vs bCB3aXRoIGZhciBtb3JlIGNvbXBsZXggcHJvZ3JhbXMKPiArdGhhbiBgZ2V0b3B0YCwgYnV0IHdv dWxkIHlvdSBsaWtlIHRvIG1haW50YWluIGFuIGFyZ3BhcnNlIGltcGxlbWVudGF0aW9uCj4gK3dp dGggMTUsMDAwIG9wdGlvbnMgYW5kIGdyb3dpbmc/CgpUbyBjbGFyaWZ5IHRoaXM6IHRoZSBhcHBy b2FjaCBpbiB0aGlzIGNhc2UgaXMgdG8gdXNlIHRoZSBpbnRyb3NwZWN0aW9uCkFQSSB0byBleHBv c2UgdGhlIG9wdGlvbnMgcHJvZ3JhbW1hdGljYWxseSwgZXZlbiBpZiBpbiBmYWN0IG9uZSBtaWdo dAp1c2UgZ2V0b3B0IHRvIGJ1aWxkIHRoZSBDTEkgKG9yIGFub3RoZXIgdG9vbGtpdCB0byBidWls ZCBhIEdVSSkuCgpJbiB0aGUgY2FzZSBvZiBmZm1wZWcsIGdldG9wdCBjYW5ub3QgYmUgdXNlZCBz aW5jZSB0aGUgb3B0aW9ucyBhcmUKcG9zaXRpb25hbCAoZGVwZW5kaW5nIG9uIHRoZSBwbGFjZSBp dCBtaWdodCB0YWtlIGVuY29kZXIvZm9ybWF0L3VybApvcHRpb25zKS4gRm9yIGEgc2ltcGxlciBD TEkgKGUuZy4gYW4gaGFzaCBBUEkgd3JhcHBlcikgaXQgbWlnaHQgd29yay4KCj4gKwo+ICtNb3N0 IHNvbHV0aW9ucyBhc3N1bWUgeW91IGNhbiBqdXN0IHB1dCBhbGwgb3B0aW9ucyBpbiBhIHNpbmds ZSBibG9jaywKPiArd2hpY2ggaXMgdW53b3JrYWJsZSBhdCBGRm1wZWcncyBzY2FsZS4gIEluc3Rl YWQsIHdlIHNwbGl0IGNvbmZpZ3VyYXRpb24KPiArYWNyb3NzIG1hbnkgKkFWT3B0aW9ucy1lbmFi bGVkIHN0cnVjdHMqLCB3aGljaCB1c2UgdGhlIEByZWYgYXZvcHRpb25zCj4gKyJBVk9wdGlvbnMg QVBJIiB0byByZWZsZWN0IGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIHVzZXItY29uZmlndXJhYmxl IG1lbWJlcnMsCj4gK2luY2x1ZGluZyBtZW1iZXJzIGluIHByaXZhdGUgY29udGV4dHMuCj4gKwo+ ICtBVk9wdGlvbnMtYWNjZXNzaWJsZSBtZW1iZXJzIG9mIGEgY29udGV4dCBzaG91bGQgYmUgYWNj ZXNzZWQgdGhyb3VnaCB0aGUKPiArQHJlZiBhdm9wdGlvbnMgIkFWT3B0aW9ucyBBUEkiIHdoZW5l dmVyIHBvc3NpYmxlLCBldmVuIGlmIHRoZXkncmUgbm90IGhpZGRlbgo+ICtpbiBhIHByaXZhdGUg Y29udGV4dC4gIFRoYXQgZW5zdXJlcyB2YWx1ZXMgYXJlIHZhbGlkYXRlZCBhcyB0aGV5J3JlIHNl dCwgYW5kCj4gK21lYW5zIHlvdSB3b24ndCBoYXZlIHRvIGRvIGFzIG11Y2ggd29yayBpZiBhIGZ1 dHVyZSB2ZXJzaW9uIG9mIEZGbXBlZyBjaGFuZ2VzCj4gK3RoZSBhbGxvd2VkIHZhbHVlcy4gIFRo aXMgaXMgYnJvYWRseSBzaW1pbGFyIHRvIHRoZSB3YXkgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1z Cj4gK3JlY29tbWVuZCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIG92ZXIgZGlyZWN0IGFjY2Vzcy4KPiAr Cj4gK09iamVjdC1vcmllbnRlZCBwcm9ncmFtbWVycyBtYXkgYmUgdGVtcHRlZCB0byBjb21wYXJl IEFWT3B0aW9ucy1hY2Nlc3NpYmxlCj4gK21lbWJlcnMgb2YgYSBwdWJsaWMgY29udGV4dCB0byBw cm90ZWN0ZWQgbWVtYmVycyBvZiBhIGNsYXNzLiAgQm90aCBwcm92aWRlCj4gK2dsb2JhbCBhY2Nl c3MgdGhyb3VnaCBhbiBBUEksIGFuZCB1bnJlc3RyaWN0ZWQgYWNjZXNzIGZvciB0cnVzdGVkIGZy aWVuZHMuCj4gK0J1dCB0aGlzIGlzIGp1c3QgYSBoYXBweSBhY2NpZGVudCwgbm90IGEgZ3VhcmFu dGVlLgo+ICsKPiArQHN1YnNlY3Rpb24gQ29udGV4dF9sb2dnaW5nIExvZ2dpbmc6IEFWQ2xhc3Mg Y29udGV4dCBzdHJ1Y3R1cmVzCj4gKwo+ICtGRm1wZWcncyBAcmVmIGxhdnVfbG9nICJsb2dnaW5n IGZhY2lsaXR5IiBuZWVkcyB0byBiZSBzaW1wbGUgdG8gdXNlLAo+ICtidXQgZmxleGlibGUgZW5v dWdoIHRvIGxldCBwZW9wbGUgZGVidWcgcHJvYmxlbXMuICBBbmQgbXVjaCBsaWtlIHJlZmxlY3Rp b24sCj4gK2l0IG5lZWRzIHRvIHdvcmsgdGhlIHNhbWUgYWNyb3NzIGEgd2lkZSB2YXJpZXR5IG9m IHVucmVsYXRlZCBzdHJ1Y3RzLgo+ICsKCj4gK0ZGbXBlZyBzdHJ1Y3RzIHRoYXQgc3VwcG9ydCB0 aGUgbG9nZ2luZyBmcmFtZXdvcmsgYXJlIGNhbGxlZCAqQHJlZiBBVkNsYXNzCj4gK2NvbnRleHQg c3RydWN0dXJlcyouICBUaGUgbmFtZSBAcmVmIEFWQ2xhc3Mgd2FzIGNob3NlbiBlYXJseSBpbiBG Rm1wZWcncwo+ICtkZXZlbG9wbWVudCwgYnV0IGluIHByYWN0aWNlIGl0IG9ubHkgY2FtZSB0byBz dG9yZSBpbmZvcm1hdGlvbiBhYm91dAo+ICtsb2dnaW5nLCBhbmQgYWJvdXQgaW50cm9zcGVjdGlv bi4KCm5pdDogaW50cm9zcGVjdGlvbiA9PiBvcHRpb25zCgpUbyBmdXJ0aGVyIGNsYXJpZnkgdGhp cywgSSB0aGluayBBVkNsYXNzIHdhcyBjaG9zZW4gYmVjYXVzZSB0aGUgaWRlYQppcyB0byBzdXBw b3J0IGEgImNsYXNzIiBvZiBzdHJ1Y3R1cmVzLiBZb3UgZGVmaW5lIGxvZ2dpbmcgYW5kIG9wdGlv bnMKaW4gYSBzaW5nbGUgcGxhY2UgZm9yIGFsbCB0aGUgZW5jb2RlcnMsIGRlY29kZXJzLCBmaWx0 ZXJzIGV0YyAoY2hlY2sKZm9yIGV4YW1wbGUgbGliYXZmaWx0ZXIvYXZmaWx0ZXIuYzo6YXZmaWx0 ZXJfY2xhc3MpLgoKPiArCj4gK0BzZWN0aW9uIENvbnRleHRfZnVydGhlciBGdXJ0aGVyIGluZm9y bWF0aW9uIGFib3V0IGNvbnRleHRzCj4gKwo+ICtTbyBmYXIsIHRoaXMgZG9jdW1lbnQgaGFzIHBy b3ZpZGVkIGEgdGhlb3JldGljYWwgZ3VpZGUgdG8gRkZtcGVnIGNvbnRleHRzLgo+ICtUaGlzIGZp bmFsIHNlY3Rpb24gcHJvdmlkZXMgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzIHRvIHRoZSB0 b3BpYywKPiArd2hpY2ggbWF5IGhlbHAgcm91bmQgb3V0IHlvdXIgdW5kZXJzdGFuZGluZy4KPiAr Cj4gK0BzdWJzZWN0aW9uIENvbnRleHRfZXhhbXBsZSBMZWFybmluZyBieSBleGFtcGxlOiBjb250 ZXh0IGZvciBhIGNvZGVjCj4gKwo+ICtJdCBjYW4gaGVscCB0byBsZWFybiBjb250ZXh0cyBieSBk b2luZyBhIGRlZXAgZGl2ZSBpbnRvIGEgc3BlY2lmaWMgc3RydWN0Lgo+ICtUaGlzIHNlY3Rpb24g d2lsbCBkaXNjdXNzIEFWQ29kZWNDb250ZXh0IC0gYW4gQVZPcHRpb25zLWVuYWJsZWQgc3RydWN0 Cj4gK3RoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgZW5jb2Rpbmcgb3IgZGVjb2Rpbmcg b25lIHN0cmVhbSBvZiBkYXRhCj4gKyhlLmcuIHRoZSB2aWRlbyBpbiBhIG1vdmllKS4KPiArCj4g K1RoZSBuYW1lICJBVkNvZGVjQ29udGV4dCIgdGVsbHMgdXMgdGhpcyBpcyBhIGNvbnRleHQuICBN YW55IG9mCj4gK0ByZWYgbGliYXZjb2RlYy9hdmNvZGVjLmggIml0cyBmdW5jdGlvbnMiIHN0YXJ0 IHdpdGggYW4gYGF2Y3R4YCBwYXJhbWV0ZXIsCj4gK2luZGljYXRpbmcgdGhpcyBwYXJhbWV0ZXIg cHJvdmlkZXMgY29udGV4dCBmb3IgdGhhdCBmdW5jdGlvbi4KPiArCj4gK0FWQ29kZWNDb250ZXh0 OjppbnRlcm5hbCBjb250YWlucyB0aGUgcHJpdmF0ZSBjb250ZXh0LiAgRm9yIGV4YW1wbGUsCj4g K2NvZGVjLXNwZWNpZmljIGluZm9ybWF0aW9uIG1pZ2h0IGJlIHN0b3JlZCBoZXJlLgo+ICsKPiAr QVZDb2RlY0NvbnRleHQgaXMgYWxsb2NhdGVkIHdpdGggYXZjb2RlY19hbGxvY19jb250ZXh0Mygp LCBpbml0aWFsaXplZCB3aXRoCj4gK2F2Y29kZWNfb3BlbjIoKSwgYW5kIGZyZWVkIHdpdGggYXZj b2RlY19mcmVlX2NvbnRleHQoKS4gIE1vc3Qgb2YgaXRzIG1lbWJlcnMKPiArYXJlIGNvbmZpZ3Vy ZWQgd2l0aCB0aGUgQHJlZiBhdm9wdGlvbnMgIkFWT3B0aW9ucyBBUEkiLCBidXQgZm9yIGV4YW1w bGUgeW91Cj4gK2NhbiBzZXQgQVZDb2RlY0NvbnRleHQ6Om9wYXF1ZSBvciBBVkNvZGVjQ29udGV4 dDo6ZHJhd19ob3Jpel9iYW5kKCkgaWYgeW91cgo+ICtwcm9ncmFtIGhhcHBlbnMgdG8gbmVlZCB0 aGVtLgo+ICsKPiArQVZDb2RlY0NvbnRleHQgcHJvdmlkZXMgYW4gYWJzdHJhY3QgaW50ZXJmYWNl IHRvIG1hbnkgZGlmZmVyZW50ICpjb2RlY3MqLgo+ICtPcHRpb25zIHN1cHBvcnRlZCBieSBtYW55 IGNvZGVjcyAoZS5nLiAiYml0cmF0ZSIpIGFyZSBrZXB0IGluIEFWQ29kZWNDb250ZXh0Cj4gK2Fu ZCByZWZsZWN0ZWQgYXMgQVZPcHRpb25zLiAgT3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byBv bmUgY29kZWMgYXJlCj4gK3N0b3JlZCBpbiB0aGUgcHJpdmF0ZSBjb250ZXh0LCBhbmQgcmVmbGVj dGVkIGZyb20gdGhlcmUuCj4gKwo+ICtBVkNvZGVjQ29udGV4dDo6YXZfY2xhc3MgY29udGFpbnMg bG9nZ2luZyBtZXRhZGF0YSB0byBlbnN1cmUgYWxsIGNvZGVjLXJlbGF0ZWQKPiArZXJyb3IgbWVz c2FnZXMgbG9vayB0aGUgc2FtZSwgcGx1cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFib3V0IG9w dGlvbnMuCj4gKwo+ICtUbyBzdXBwb3J0IGEgc3BlY2lmaWMgY29kZWMsIEFWQ29kZWNDb250ZXh0 J3MgcHJpdmF0ZSBjb250ZXh0IGlzIHNldCB0bwo+ICthbiBlbmNvZGVyLXNwZWNpZmljIGRhdGEg dHlwZS4gIEZvciBleGFtcGxlLCB0aGUgdmlkZW8gY29kZWMKPiArW0guMjY0XShodHRwczovL2Vu Lndpa2lwZWRpYS5vcmcvd2lraS9BZHZhbmNlZF9WaWRlb19Db2RpbmcpIGlzIHN1cHBvcnRlZCB2 aWEKPiArW3RoZSB4MjY0IGxpYnJhcnldKGh0dHBzOi8vd3d3LnZpZGVvbGFuLm9yZy9kZXZlbG9w ZXJzL3gyNjQuaHRtbCksIGFuZAo+ICtpbXBsZW1lbnRlZCBpbiBYMjY0Q29udGV4dC4gIEFsdGhv dWdoIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLCBYMjY0Q29udGV4dAo+ICtpcyBub3Qg cGFydCBvZiB0aGUgcHVibGljIEFQSS4gIFRoYXQgbWVhbnMgRkZtcGVnJ3MgQHJlZiBmZm1wZWdf dmVyc2lvbmluZwo+ICsic3RyaWN0IHJ1bGVzIGFib3V0IGNoYW5naW5nIHB1YmxpYyBzdHJ1Y3Rz IiBhcmVuJ3QgYXMgaW1wb3J0YW50IGhlcmUsIHNvIGEKPiArdmVyc2lvbiBvZiBGRm1wZWcgY291 bGQgbW9kaWZ5IFgyNjRDb250ZXh0IG9yIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIHR5cGUKPiAr YWx0b2dldGhlci4gIEFuIGFkdmVyc2UgbGVnYWwgcnVsaW5nIG9yIHNlY3VyaXR5IHByb2JsZW0g Y291bGQgZXZlbiBmb3JjZSB1cyB0bwo+ICtzd2l0Y2ggdG8gYSBjb21wbGV0ZWx5IGRpZmZlcmVu dCBsaWJyYXJ5IHdpdGhvdXQgYSBtYWpvciB2ZXJzaW9uIGJ1bXAuCj4gKwo+ICtUaGUgZGVzaWdu IG9mIEFWQ29kZWNDb250ZXh0IHByb3ZpZGVzIHNldmVyYWwgaW1wb3J0YW50IGd1YXJhbnRlZXM6 Cj4gKwo+ICstIGxldHMgeW91IHVzZSB0aGUgc2FtZSBpbnRlcmZhY2UgZm9yIGFueSBjb2RlYwo+ ICstIHN1cHBvcnRzIGNvbW1vbiBlbmNvZGVyIG9wdGlvbnMgbGlrZSAiYml0cmF0ZSIgd2l0aG91 dCBkdXBsaWNhdGluZyBjb2RlCj4gKy0gc3VwcG9ydHMgZW5jb2Rlci1zcGVjaWZpYyBvcHRpb25z IGxpa2UgInByb2ZpbGUiIHdpdGhvdXQgYnVsa2luZyBvdXQgdGhlIHB1YmxpYyBpbnRlcmZhY2UK PiArLSByZWZsZWN0cyBib3RoIHR5cGVzIG9mIG9wdGlvbnMgdG8gdXNlcnMsIHdpdGggaGVscCB0 ZXh0IGFuZCBkZXRlY3Rpb24gb2YgbWlzc2luZyBvcHRpb25zCj4gKy0gcHJvdmlkZXMgdW5pZm9y bSBsb2dnaW5nIG91dHB1dAo+ICstIGhpZGVzIGltcGxlbWVudGF0aW9uIGRldGFpbHMgKGUuZy4g aXRzIGVuY29kaW5nIGJ1ZmZlcikKPiArCj4gK0BzdWJzZWN0aW9uIENvbnRleHRfY29tcGFyaXNv biBMZWFybmluZyBieSBjb21wYXJpc29uOiBGRm1wZWcgdnMuIEN1cmwgY29udGV4dHMKPiArCj4g K0l0IGNhbiBoZWxwIHRvIGxlYXJuIGNvbnRleHRzIGJ5IGNvbXBhcmluZyBob3cgZGlmZmVyZW50 IHByb2plY3RzIHRhY2tsZQo+ICtzaW1pbGFyIHByb2JsZW1zLiAgVGhpcyBzZWN0aW9uIHdpbGwg Y29tcGFyZSBAcmVmIEFWTUQ1ICJGRm1wZWcncyBNRDUgY29udGV4dCIKPiArd2l0aCBbY3VybCA4 LjguMCdzIGVxdWl2YWxlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvYmxvYi9jdXJs LThfOF8wL2xpYi9tZDUuYyNMNDgpLgo+ICsKPiArVGhlIFtNRDUgYWxnb3JpdGhtXShodHRwczov L2VuLndpa2lwZWRpYS5vcmcvd2lraS9NRDUpIHByb2R1Y2VzCj4gK2EgZml4ZWQtbGVuZ3RoIGRp Z2VzdCBmcm9tIGFyYml0cmFyeS1sZW5ndGggZGF0YS4gIEl0IGRvZXMgdGhpcyBieSBjYWxjdWxh dGluZwo+ICt0aGUgZGlnZXN0IGZvciBhIHByZWZpeCBvZiB0aGUgZGF0YSwgdGhlbiBsb2FkaW5n IHRoZSBuZXh0IHBhcnQgYW5kIGFkZGluZyBpdAo+ICt0byB0aGUgcHJldmlvdXMgZGlnZXN0LCBh bmQgc28gb24uCj4gKwo+ICtgYGBjCj4gKy8vIEZGbXBlZydzIE1ENSBjb250ZXh0IGxvb2tzIGxp a2UgdGhpczoKPiArdHlwZWRlZiBzdHJ1Y3QgQVZNRDUgewo+ICsgICAgdWludDY0X3QgbGVuOwo+ ICsgICAgdWludDhfdCAgYmxvY2tbNjRdOwo+ICsgICAgdWludDMyX3QgQUJDRFs0XTsKPiArfSBB Vk1ENTsKPiArCj4gKy8vIEN1cmwgOC44LjAncyBNRDUgY29udGV4dCBsb29rcyBsaWtlIHRoaXM6 Cj4gK3N0cnVjdCBNRDVfY29udGV4dCB7Cj4gKyAgY29uc3Qgc3RydWN0IE1ENV9wYXJhbXMgKm1k NV9oYXNoOyAgICAvKiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KPiArICB2b2lkICAgICAg ICAgICAgICAgICAgKm1kNV9oYXNoY3R4OyAgIC8qIEhhc2ggZnVuY3Rpb24gY29udGV4dCAqLwo+ ICt9Owo+ICtgYGAKPiArCj4gK0N1cmwncyBzdHJ1Y3QgbmFtZSBlbmRzIHdpdGggYF9jb250ZXh0 YCwgZ3VhcmFudGVlaW5nIGNvbnRleHRzIGFyZSB0aGUgY29ycmVjdAo+ICtpbnRlcnByZXRhdGlv bi4gIEZGbXBlZydzIHN0cnVjdCBkb2VzIG5vdCBleHBsaWNpdGx5IHNheSBpdCdzIGEgY29udGV4 dCwgYnV0Cj4gK0ByZWYgbGliYXZ1dGlsL21kNS5jICJpdHMgZnVuY3Rpb25zIGRvIiBzbyB3ZSBj YW4gcmVhc29uYWJseSBhc3N1bWUKPiAraXQncyB0aGUgaW50ZW5kZWQgaW50ZXJwcmV0YXRpb24u Cj4gKwo+ICtDdXJsJ3Mgc3RydWN0IHVzZXMgYHZvaWQgKm1kNV9oYXNoY3R4YCB0byBhdm9pZCBn dWFyYW50ZWVpbmcKPiAraW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiB0aGUgcHVibGljIGludGVy ZmFjZSwgd2hlcmVhcyBGRm1wZWcgbWFrZXMKPiArZXZlcnl0aGluZyBhY2Nlc3NpYmxlLiAgVGhp cyBkaXNhZ3JlZW1lbnQgYWJvdXQgZGF0YSBoaWRpbmcgaXMgYSBnb29kIGV4YW1wbGUKPiArb2Yg aG93IGNvbnRleHRzIGNhbiBiZSB1c2VkIGRpZmZlcmVudGx5LiAgSGlkaW5nIHRoZSBkYXRhIG1l YW5zIGNoYW5naW5nIHRoZQo+ICtsYXlvdXQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBjdXJsIHdv bid0IGJyZWFrIGRvd25zdHJlYW0gcHJvZ3JhbXMgdGhhdCB1c2VkCj4gK3RoYXQgZGF0YS4gIEJ1 dCB0aGUgTUQ1IGFsZ29yaXRobSBoYXMgYmVlbiBzdGFibGUgZm9yIDMwIHllYXJzLCBhbmQgbWFr aW5nIHRoZQo+ICtkYXRhIHB1YmxpYyBtYWtlcyBpdCBlYXNpZXIgZm9yIHBlb3BsZSB0byBmb2xs b3cgYSBidWcgaW4gdGhlaXIgb3duIGNvZGUuCj4gKwo+ICtDdXJsJ3Mgc3RydWN0IGlzIGRlY2xh cmVkIGFzIGBzdHJ1Y3QgPHR5cGU+IHsgLi4uIH1gLCB3aGVyZWFzIEZGbXBlZyB1c2VzCj4gK2B0 eXBlZGVmIHN0cnVjdCA8dHlwZT4geyAuLi4gfSA8dHlwZT5gLiAgVGhlc2UgY29udmVudGlvbnMg YXJlIHVzZWQgd2l0aCBib3RoCj4gK2NvbnRleHQgYW5kIG5vbi1jb250ZXh0IHN0cnVjdHMsIHNv IGRvbid0IHNheSBhbnl0aGluZyBhYm91dCBjb250ZXh0cyBhcyBzdWNoLgo+ICtTcGVjaWZpY2Fs bHksIEZGbXBlZydzIGNvbnZlbnRpb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSB3aXRo IEMgZ3JhbW1hcjoKPiArCj4gK2BgYGMKPiArdm9pZCBteV9mdW5jdGlvbiggLi4uICkgewo+ICsg IGludCAgICAgICAgICAgICAgICBteV92YXI7ICAgICAgICAvLyBnb29kCj4gKyAgTUQ1X2NvbnRl eHQgICAgICAgIG15X2N1cmxfY3R4OyAgIC8vIGVycm9yOiBDIG5lZWRzIHlvdSB0byBleHBsaWNp dGx5IHNheSAic3RydWN0Igo+ICsgIHN0cnVjdCBNRDVfY29udGV4dCBteV9jdXJsX2N0eDsgICAv LyBnb29kOiBhZGRlZCAic3RydWN0Igo+ICsgIEFWTUQ1ICAgICAgICAgICAgICBteV9mZm1wZWdf Y3R4OyAvLyBnb29kOiB0eXBlZGVmJ3MgYXZvaWQgdGhlIG5lZWQgZm9yICJzdHJ1Y3QiCj4gK30K PiArYGBgCj4gKwoKPiArQm90aCBNRDUgaW1wbGVtZW50YXRpb25zIGFyZSBsb25nLXRlc3RlZCwg d2lkZWx5LXVzZWQgZXhhbXBsZXMgb2YgY29udGV4dHMKPiAraW4gdGhlIHJlYWwgd29ybGQuICBU aGV5IHNob3cgaG93IGNvbnRleHRzIGNhbiBzb2x2ZSB0aGUgc2FtZSBwcm9ibGVtCj4gK2luIGRp ZmZlcmVudCB3YXlzLgoKSSdtIGZpbmUgd2l0aCBrZWVwaW5nIHRoaXMgc2VjdGlvbiBhdCB0aGUg ZW5kIG9mIHRoZSBkb2N1bWVudC4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVn Lm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRv IHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVx dWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=