From fcbe357d757a9c625b319c560dad3df2650f66d5 Mon Sep 17 00:00:00 2001 From: Jeremy Singher Date: Sat, 16 May 2020 15:45:17 -0700 Subject: [PATCH] Re: [libre-riscv-dev] Scoreboard vs Tomasulo --- f8/06eb869f7507c95310c3965d2388e87650a4da | 363 ++++++++++++++++++++++ 1 file changed, 363 insertions(+) create mode 100644 f8/06eb869f7507c95310c3965d2388e87650a4da diff --git a/f8/06eb869f7507c95310c3965d2388e87650a4da b/f8/06eb869f7507c95310c3965d2388e87650a4da new file mode 100644 index 0000000..c2b99bb --- /dev/null +++ b/f8/06eb869f7507c95310c3965d2388e87650a4da @@ -0,0 +1,363 @@ +Return-path: +Envelope-to: publicinbox@libre-riscv.org +Delivery-date: Sat, 16 May 2020 23:45:32 +0100 +Received: from localhost ([::1] helo=libre-riscv.org) + by libre-soc.org with esmtp (Exim 4.89) + (envelope-from ) + id 1ja5Yh-0001ZK-UW; Sat, 16 May 2020 23:45:31 +0100 +Received: from mail-lf1-f44.google.com ([209.85.167.44]) + by libre-soc.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) + (Exim 4.89) (envelope-from ) + id 1ja5Yg-0001ZD-4v + for libre-riscv-dev@lists.libre-riscv.org; Sat, 16 May 2020 23:45:30 +0100 +Received: by mail-lf1-f44.google.com with SMTP id x22so1905890lfd.4 + for ; + Sat, 16 May 2020 15:45:30 -0700 (PDT) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; + h=mime-version:references:in-reply-to:from:date:message-id:subject:to; + bh=dKhclSNnFd90609ov61VmWCX1YBIWbNA/l2E1mOwmqM=; + b=B1K4wIXC/HfPWRjNQxN1DnWk1kJjWAn5cHPkM6vL0xJjK0J6rSHSea6RPFDwa4V5jU + 5IZdaY9lsVfFhwGJdpMcPLURDJSW9at9y3V931Mgs0Kn4r1AUtwyVCpDOvETLC/oQ9O6 + 9vQJDUHe7hM0X+0WDBedT9m2McrCoJsQZVBMnisLeKNZ/B9My6PKZei6yo337nFuo85R + VsAwkkM1UlFEGjdzFhRZD47cOiLjmHtNWf5G4dH2+rQfNy9IrNOxbtkm4n9GPYi+2/q4 + Vi5lAR5Zne30sSJKm/BHdPsAUJRywFnSW2dC55drnP3Pctq6qPGawC1OqJZQuKM0V98l + mLig== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20161025; + h=x-gm-message-state:mime-version:references:in-reply-to:from:date + :message-id:subject:to; + bh=dKhclSNnFd90609ov61VmWCX1YBIWbNA/l2E1mOwmqM=; + b=sng8jaEqGPMwZvy3xn5k9f7D+fPxGTTJ4vkSc6o7hV0spUvwGDLBcZ03pPQ19JqyC7 + bTRukISduzWu1mvQZAacPTWQkMn23R33zbwxWJr2SIvQaVpNyatiB2wixchFCVKXUzMo + 0F7onMuSECy0gR23uqRB/C/8Qwc6SU2LlcdrqzVMh09VOqS/KVkSS9aP+fHe/Zc7Sguh + jAmjFaipyDBbLIQNLEpDlhXEqC2ns16DJ8GFj5uYpUXWujZDo53vjqCLDK2UbxwptHGq + 77y2P+v+Gh6drgadSu3bkPJj0bCwEYIzr+1XuWJsnaayC6y4zzk3kIDVSoQy2YQVlDMF + DOFA== +X-Gm-Message-State: AOAM531PppTRz6OzxgK1d57Tcz16pWWkEE5AjaEEmqm9oUA/yuQrU+sa + dasVTkm2lHkYxnBN/68tATH85LKFMQxbOx0Q4euIR0Qq +X-Google-Smtp-Source: ABdhPJz6MCJkdGfPlvMLJoYStSQitkzqTNPsNf35mLcYJQIARXNxYUaz+N2iwEfQMqB8WPy2gFW9AhENsjgzwxpBtgc= +X-Received: by 2002:a05:6512:31c5:: with SMTP id + j5mr6707612lfe.26.1589669128854; + Sat, 16 May 2020 15:45:28 -0700 (PDT) +MIME-Version: 1.0 +References: <13EDF987-9A19-4C96-89C2-6DB784CF2C96@gatech.edu> + + + + <25AC8A2E-D48F-439F-AF9D-0EB3DC08D7CC@gatech.edu> + + + +In-Reply-To: +From: Jeremy Singher +Date: Sat, 16 May 2020 15:45:17 -0700 +Message-ID: +To: Libre-RISCV General Development +Subject: Re: [libre-riscv-dev] Scoreboard vs Tomasulo +X-BeenThere: libre-riscv-dev@lists.libre-riscv.org +X-Mailman-Version: 2.1.23 +Precedence: list +List-Id: Libre-RISCV General Development + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Reply-To: Libre-RISCV General Development + +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: base64 +Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org +Sender: "libre-riscv-dev" + +SSBoYXZlIGZpbmFsbHkgZmluaXNoZWQgcGFyc2luZyBNaXRjaCdzIGNoYXB0ZXJzLCBhbmQgbm93 +IEkgc2VlIHdoYXQKdGhlIHByaW1hcnkgY29uZnVzaW9uIGlzIGZyb20uIFRoZSBzY29yZWJvYXJk +IGJlaW5nIGRldmVsb3BlZCBoZXJlIGhhcwpiZWVuIHJlZmVycmVkIHRvIGluIHRoZSBtYWlsaW5n +IGxpc3RzIGFzIGEgIkNEQyA2NjAwLWxpa2UiIHNjb3JlYm9hcmQsCndoaWxlIGluIHJlYWxpdHks +IHRoZSBmaW5hbCBkZXNpZ24gaXMgZmFyIGV4dGVuZGVkIGZhciBiZXlvbmQgdGhlCm9yaWdpbmFs +IENEQyA2NjAwIGltcGxlbWVudGF0aW9uLiBJIHdvdWxkIHN1Z2dlc3Qgbm90IGNhbGxpbmcgaXQg +YQoiQ0RDIDY2MDAtbGlrZSBzY29yZWJvYXJkIiBpbiB0aGUgZnV0dXJlLCBpbnN0ZWFkIGEgImV4 +dGVuZGVkCnNjb3JlYm9hcmQiIGlzIG1vcmUgYWNjdXJhdGUuCgpMZXQgbWUgdHJ5IHRvIGNvbXBv +c2UgbXkgdGhvdWdodHMuCkluIG9yZGVyIGZvciBPT08gZXhlY3V0aW9uIHRvIGJlIHBvc3NpYmxl +LCB3cml0ZSBkYXRhIGZyb20Kc3BlY3VsYXRpdmVseSBleGVjdXRlZCBpbnN0cnVjdGlvbnMgbXVz +dCBiZSBidWZmZXJlZCwgZm9yIGluIHRoZSBjYXNlCm9mIG1pc3NwZWN1bGF0aW9uLCB0aGV5IG11 +c3Qgbm90IGJlIGFsbG93ZWQgdG8gY29tbWl0IGludG8gdGhlCmFyY2hpdGVjdHVyYWwgcmVnaXN0 +ZXIgZmlsZS4KCkluIFRvbWFzdWxvJ3MsIHNwZWN1bGF0aXZlIHdyaXRlIGRhdGEgYXJlIGhlbGQg +aW4gcGh5c2ljYWxseSByZW5hbWVkIHJlZ2lzdGVycy4KSW4gdGhlIGV4dGVuZGVkIHNjb3JlYm9h +cmQgc2NoZW1lLCBzcGVjdWxhdGl2ZSB3cml0ZSBkYXRhIGFyZSBoZWxkIGluCmNvbXB1dGUgdW5p +dCBsYXRjaGVzLgpJbiBUb21hc3VsbydzLCBicmFuY2ggZGVwZW5kZW5jeSBtYXNrcyBhcmUgdXNl +ZCB0byBkcmFpbiBtaXNzcGVjdWxhdGVkCmluc3RydWN0aW9ucy4KSW4gZXh0ZW5kZWQgc2NvcmVi +b2FyZCwgdGhlIG1pc3NwZWN1bGF0ZWQgaW5zdHJ1Y3Rpb25zIGRyYWluCnRoZW1zZWx2ZXMgZnJv +bSB0aGUgc3lzdGVtLgpCb3RoIHNjaGVtZXMgY2FuIGJlIGRlc2lnbmVkIHRvIGFjaGlldmUgc2lt +aWxhciBPT08gYmVoYXZpb3JzLgpUaHVzLCBvbmUgY2Fubm90IGRyYXcgYSBwZXJmb3JtYW5jZSBj +b25jbHVzaW9uIGp1c3QgYnkgc2VlaW5nIHdoaWNoCnNjaGVtZSBpcyBiZWluZyB1c2VkLgoKSWRl +YWxseSB0aGUgYWJvdmUgdGV4dCBzaG91bGQgYmUgdW5jb250cm92ZXJzaWFsLCBwbGVhc2UgbGV0 +IG1lIGtub3cKaWYgdGhlcmUgaXMgYSBsYXJnZSBtaXN1bmRlcnN0YW5kaW5nIGhlcmUuCgpNeSBv +cGluaW9uIGlzIHRoYXQgVG9tYXN1bG8ncyBpcyBhIG1vcmUgZWxlZ2FudCBhbmQgd2VsbC1wcm92 +ZW4gc2NoZW1lCmZvciBhY2hpZXZpbmcgT09PIGV4ZWN1dGlvbiwgY29tcGFyZWQgdG8gYW4gZXh0 +ZW5kZWQgc2NvcmVib2FyZC4gSQphbHNvIGFyZ3VlIHRoYXQgdGhlIGV4dGVuZGVkIHNjb3JlYm9h +cmQgc2NoZW1lIGRvZXMgbm90IHByZXNlbnQKc2lnbmlmaWNhbnQgcG93ZXIvYXJlYSBhZHZhbnRh +Z2VzIGNvbXBhcmVkIHRvIFRvbWFzdWxvJ3MuIEdpdmVuIHRoYXQKZXN0aW1hdGVzIG9uIHBvd2Vy +L2FyZWEgdGVuZCB0byBiZSB3aWxkbHkgaW5hY2N1cmF0ZSwgSSB0aGluayB3ZSB3aWxsCmhhdmUg +dG8gd2FpdCBmb3IgcG93ZXIgYW5hbHlzaXMgb2YgTGlicmVTb0MgdG8gZ2V0IGEgZGVmaW5pdGl2 +ZSBhbnN3ZXIKdG8gdGhpcyBkZWJhdGUgOikuCgpJIGRlZXBseSBhcG9sb2dpemUgaWYgYW55IG9m +IG15IHRob3VnaHRzIGNvdWxkIGJlIGludGVycHJldGVkIGFzCmNyaXRpY2lzbS4gSSBmdWxseSBz +dXBwb3J0IHRoaXMga2luZCBvZiBleHBsb3JhdGlvbiBpbiBPT08gZGVzaWduLiBJCmFsc28gYXBv +bG9naXplIGlmIEkgc2VlbSB0byBzdWdnZXN0IGEgY2hhbmdlIGluIGRlc2lnbiwgYXMgSQp1bmRl +cnN0YW5kIHRoYXQgaGFyZHdhcmUgZGVzaWduIGlzIG5vdCBuZWFybHkgYXMgZmxleGlibGUgYXMg +c29mdHdhcmUKZGVzaWduLgoKCgpPbiBTYXQsIE1heSAxNiwgMjAyMCBhdCAyOjM4IFBNIEx1a2Ug +S2VubmV0aCBDYXNzb24gTGVpZ2h0b24KPGxrY2xAbGtjbC5uZXQ+IHdyb3RlOgo+Cj4gT24gU2F0 +LCBNYXkgMTYsIDIwMjAgYXQgOToxNiBQTSBKZXJlbXkgU2luZ2hlciA8dGhlanNpbmdoZXJAZ21h +aWwuY29tPiB3cm90ZToKPgo+ID4gPiBIb3dldmVyLCB0aGUgc2NvcmVib2FyZCBpcyBsaW1pdGVk +IGluIHRoYXQgaXQgZG9lcyBub3QgaGFuZGxlIFdBUiBhbmQgV0FXCj4gPiA+IGhhemFyZHMgdmVy +eSB3ZWxsLgo+ID4KPiA+ID4gdGhlIG9yaWdpbmFsIDY2MDAgaGFuZGxlcyBXQVIgZXh0cmVtZWx5 +IHdlbGwsIG9ubHkgc3RhbGxpbmcgb24gV2FXCj4gPiA+IGNvbmRpdGlvbiwgZGV0ZWN0aW9uIHdo +aWNoIGRpZCBub3QgbWF0dGVyIGdyZWF0bHkgYmVjYXVzZSB0aGUgcGlwZWxpbmVzCj4gPiA+IHdl +cmUgb25seSBhdCBtb3N0IDIgc3RhZ2VzIGxvbmcgYW55d2F5IChNaXRjaCBvbmx5IG5vdGljZWQg +YWZ0ZXIgcmVyZWFkaW5nCj4gPiA+IGxhc3QgeWVhciB0aGF0IHRoZSBGUCBBREQgb2YgdGhlIDY2 +MDAgd2FzIDIgc3RhZ2UgcGlwZWxpbmVkLiAgbm8gYWNhZGVtaWMKPiA+ID4gbGl0ZXJhdHVyZSBo +YXMgYWNrbm93bGVkZ2VkIG9yIG5vdGljZWQgdGhpcykuCj4gPgo+ID4gSSB3b3VsZCBhcmd1ZSB0 +aGF0IHRoZSBDREM2NjAwIGhhbmRsZXMgV0FSIGJldHRlciB0aGFuIGFuIGluLW9yZGVyCj4gPiBt +YWNoaW5lLCBidXQgbm90IGJldHRlciB0aGFuIGEgbWFjaGluZSB3aXRoIGZ1bGwgcmVuYW1pbmcu +Cj4KPiBKZXJlbXk6IDY2MDAgZGVzaWducyAqZG8qIGhhdmUgcmVnaXN0ZXIgInJlbmFtaW5nIi4g +IGkgc2FpZCBhbHJlYWR5LAo+IGEgbnVtYmVyIG9mIHRpbWVzLiAgYW5kIGlmIHlvdSBoYXZlIHN0 +dWRpZWQgYW5kIGxpc3RlbmVkIHRvIHRoZSBBY2FkZW1pYwo+IGxpdGVyYXR1cmUgLSBhbmQgYmVs +aWV2ZSBpdCAtIHlvdSBhcmUgbWlzaW5mb3JtZWQgYnkgdGhhdCBsaXRlcmF0dXJlLCBhbmQgd2ls +bAo+IGNvbnRpbnVlIHRvIGJlIG1pc2luZm9ybWVkIGJ5IHRoYXQgbGl0ZXJhdHVyZS4KPgo+IHBs +ZWFzZSB1bmRlcnN0YW5kOiBpIGhhdmUgc3BlbnQgb3ZlciBuaW5lIG1vbnRocyBzdHVkeWluZyB0 +aGlzLCBsZWFybmluZwo+IGZyb20gTWl0Y2ggQWxzdXAsIG9uZSBvZiB0aGUgd29ybGQncyBsZWFk +aW5nIGhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nCj4gYXJjaGl0ZWN0cywgaW1wbGVtZW50aW5n +IHRoaXMgYW5kIGl0J3Mgbm90IGdvaW5nIHRvIGdldCBjaHVja2VkIG91dCB0bwo+IGltcGxlbWVu +dCBzb21ldGhpbmcgdGhhdCB0YWtlcyBzaXggTU9OVEhTIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXMg +YQo+IGJldHRlciBkZXNpZ24sIHRvIGJlIHJlcGxhY2VkIGJ5IHNvbWV0aGluZyB0aGF0IHdvdWxk +IHRha2UgYW5vdGhlciBzaXgKPiBtb250aHMgdG8gaW1wbGVtZW50ICphbmQgd2UgdGhlbiBjb3Vs +ZCBub3QgZG8gbXVsdGktaXNzdWUgb24gdG9wIG9mIGl0Ki4KPgo+IHBsZWFzZSB0aGVyZWZvcmUg +dGFrZSB0aGUgdGltZSB0byB1bmRlcnN0YW5kIHRoaXMgZGVzaWduLCBwYXJ0aWN1bGFybHkgd2hl +bgo+IHdlIGFyZSByaWdodCBpbiB0aGUgbWlkZGxlIG9mIGEgdGltZS1jcml0aWNhbCBkZWFkbGlu +ZS4KPgo+ID4gSW4gdGhlCj4gPiBDREM2NjAwLCB0aGUgc2NvcmVib2FyZCB3b3VsZCBibG9jayB0 +aGUgY29tcGxldGlvbiBvZiB0aGUgVyBpbnN0IHVudGlsCj4gPiB0aGUgUiBpbnN0IGhhcyByZWFk +IGl0cyBvcGVyYW5kcy4gSW4gVG9tYXN1bG8sIHRoZSBXIGluc3QgY2FuIHByb2NlZWQKPiA+IGlt +bWVkaWF0ZWx5IGJlZm9yZSB0aGUgUiBpbnN0IGlzIHJlYWR5LCBzaW5jZSB0aGUgZGVzdGluYXRp +b24gcmVnaXN0ZXIKPiA+IGlzIHBoeXNpY2FsbHkgcmVuYW1lZC4KPgo+IEplcmVteTogdGhlICJy +ZW5hbWluZyIgY2FycmllZCBvdXQgYnkgdGhlIDY2MDAgZG9lcyBleGFjdGx5IHRoaXMgc2FtZQo+ +IGpvYi4KPgo+IEFjYWRlbWljcyB1bmZvcnR1bmF0ZWx5IGhhdmUgKm9ubHkqIHN0dWRpZWQgdGhl +ICpwYXRlbnQqIC0gbm90IFRob3JudG9uJ3MKPiBib29rIG5vciByZWFkIE1pdGNoIEFsc3VwJ3Mg +Ym9vayBjaGFwdGVycyB3aGljaCBoZSB3cm90ZSBiYXNlZCBvbiAzMCsKPiB5ZWFycyBleHBlcmll +bmNlIG9mIGltcGxlbWVudGluZyA2NjAwLXN0eWxlIGV4ZWN1dGlvbiBpbiB0aGUgODgxMDAsCj4g +QU1EIEs5IGFuZCBBTUQgT3B0ZXJvbiBTZXJpZXMgb2YgQ1BVcy4KPgo+IHRoZSA2NjAwIHBhdGVu +dCAqT05MWSogY292ZXJzIHRoZSBRLVRhYmxlcy4KPgo+IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUg +US1UYWJsZXMgZG9lcyAqTk9UKiBpbmNsdWRlIHRoZSBDb21wdXRhdGlvbiBVbml0cwo+IHdoZXJl +IHRoZSBvcGVyYW5kIGxhdGNoZXMgYXJlLgo+Cj4gdGhlc2UgbGF0Y2hlcyAqQVJFKiB0aGUgInJl +bmFtZWQgcmVnaXN0ZXJzIiAoYWN0dWFsbHksIG5hbWVsZXNzIHJlZ2lzdGVycykuCj4KPiA+ID4g +IFJPQiBpcyBhIENBTSwKPiA+Cj4gPiBXaGF0PyBUaGlzIGlzIG5vdCB0cnVlLiBJbnN0cnVjdGlv +bnMgaW4gZmxpZ2h0IHRyYWNrIHRoZWlyIGluZGV4IGluCj4gPiB0aGUgUk9CLCBhdCBjb21wbGV0 +aW9uLCB0aGV5IHdyaXRlIHN1Y2Nlc3MgYml0IGFjY29yZGluZyB0byB0aGUgaW5kZXgKPiA+IHRo +ZXkgaGF2ZS4gTm90IGEgQ0FNLiBTaW1wbGUgYWRkcmVzc2VkIHdyaXRlLgo+Cj4gYWggYXBwcmVj +aWF0ZWQgdGhlIGNvcnJlY3Rpb24uICBpIGtuZXcgdGhlcmUgd2VyZSBDQU1zIHNvbWV3aGVyZS4K +PiB3aGVuIGkgZGlzY292ZXJlZCB0aGF0LCBpIGRyb3BwZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9u +Lgo+Cj4gaSBhbSBob3dldmVyIGF3YXJlIHRoYXQgaWYgeW91IHdpc2ggdG8gZG8gbXVsdGktaXNz +dWUsIHRoZSBST0Igd2lsbCBuZWVkCj4gdG8gYmUgbXVsdGktcG9ydGVkIFNSQU0uICB3aXRob3V0 +IG11bHRpLXBvcnRpbmcgdGhlIFNSQU0sIHlvdSBzaW1wbHkKPiBjYW5ub3Qgd3JpdGUgbXVsdGlw +bGUgZW50cmllcy4KPgo+IHRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW1zIChyZWFkOiBuaWdodG1h +cmVzKSBmb3IgVG9tYXN1bG8gc3RhcnQgdG8gbWFuaWZlc3QsCj4gYW5kIHByb2dyZXNzIGZyb20g +dGhlcmUgdGhyb3VnaCBtdWx0aXBsZSBDb21tb24gRGF0YSBCdXMgY2hhbm5lbHMgaW50bwo+IG11 +bHRpLXBvcnRlZCAoTnhSLCBOeFcpIENBTXMgYXQgdGhlIFJlc2VydmF0aW9uIFN0YXRpb24gbGV2 +ZWwuCj4KPiBpJ3ZlIGJlZW4gdGhyb3VnaCB0aGlzLCBvaywgb3ZlciAxOCBtb250aHMgYWdvLgo+ +Cj4gYnkgY29udHJhc3QsIHdoZW4gY29udmVydGVkIHRvIHNpbmdsZS1iaXQgdW5hcnkgdmVjdG9y +cywgZWFjaCBlbnRyeSBpbiB0aGUKPiBNYXRyaWNlcyAoY292ZXJlZCBieSBhIHNpbmdsZSBTUiBO +QU5EIGxhdGNoKSBpcyAqaW5kZXBlbmRlbnQqLiAgbXVsdGlwbGUKPiBvZiB0aG9zZSBtYXkgYmUg +c2V0IGluIGEgc2luZ2xlIGN5Y2xlLgo+Cj4gdGhlcmUgaGFzIGJlZW4gYSAqbWFzc2l2ZSogYW1v +dW50IG9mIHRob3VnaHQgZ29uZSBpbnRvIHRoaXMsIG9rPwo+Cj4KPiA+ID4gZ2l2ZW4gdGhhdCBJ +bnRlbCBwcm9jZXNzb3JzIHVzZSBUb21hc3Vsbywgd2Ugc3RhcnQgdG8gc2VlIHdoeSBJbnRlbAo+ +ID4gPiBwcm9jZXNzb3JzIHN1Y2sgc28gbXVjaCBwb3dlci4KPiA+Cj4gPiBQb3dlciBjb25zdW1w +dGlvbiBvbiBhIHByb2Nlc3NvciBpcyBwcmltYXJpbHkgZnJvbSBoaWdoIHN3aXRjaGluZwo+ID4g +cmF0ZXMgb24gbGFyZ2UgcmVnaXN0ZXIgZmlsZXMsIGFuZCBTUkFNIGxlYWthZ2UuCj4KPiBnaXZl +biB0aGF0IHdlJ3JlIHBsYW5uaW5nIGFyb3VuZCAyOCBGdW5jdGlvbiBVbml0cyBhbmQgaGF2ZSBh +IDEyOC1lbnRyeQo+IHJlZ2lzdGVyIGZpbGUsIHRoZSBjYWxjdWxhdGlvbnMgdGhhdCBpIGRpZCBm +b3IgdGhhdCB3b3VsZCBwdXQgdGhlIERlcGVuZGVuY3kKPiBNYXRyaWNlcyBhcm91bmQgYSB3aG9w +cGluZyA1MCwwMDAgZ2F0ZXMsIHVzaW5nIFNSIE5BTkQgTGF0Y2hlcy4KPgo+IChpZiB3ZSBkaWQg +aXQgYXMgREZGcyBpdCB3b3VsZCBiZSBhbiB1bmFjY2VwdGFibGUgMjUwLDAwMCBnYXRlcykKPgo+ +ID4gVGhlIHNjaGVkdWxpbmcgbG9naWMgaXMgYSBtaW5pc2N1bGUgcG9ydGlvbi4KPgo+IG5vdCBm +b3IgdGhlIGxhcmdlLXNjYWxlIG91dC1vZi1vcmRlciBzeXN0ZW1zIHRoYXQgd2UgYXJlIHBsYW5u +aW5nIHRvCj4gZG8sIGl0J3Mgbm90LAo+IGR1ZSB0byB0aGUgbGFyZ2Ugc2l6ZWQgR1BVIHJlZ2lz +dGVyIGZpbGUgKDEyOCBlbnRyaWVzLiAgYWN0dWFsbHkgMngKPiAxMjggLSAxMjggRlAsCj4gMTI4 +IElOVCkuCj4KPiB3ZSBtYXkgaGF2ZSB0byAqZG93biotc2NhbGUgdmlhIGEgcmVnZmlsZSBjYWNo +ZSB0byBjb3BlIHdpdGggdGhhdC4KPiBkaXNjdXNzaW9uIGZvciBhbm90aGVyIHRpbWUuCj4KPgo+ +ID4gSW50ZWwgY29yZXMgYXJlIHBvd2VyLWh1bmdyeSBiZWNhdXNlCj4gPiBoaXN0b3JpY2FsbHkg +dGhleSBoYXZlIHRhcmdldGVkIHRoZSBkZXNrdG9wL3dvcmtzdGF0aW9uIG1hcmtldCwgYW5kIGRv +Cj4gPiBub3QgaGF2ZSBhcyBtYW55IGRlY2FkZXMgb2YgZXhwZXJpZW5jZSBhcyBvdGhlciBmaXJt +cyBvcHRpbWl6aW5nIGZvcgo+ID4gcG93ZXItY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLgo+Cj4g +YXBwcmVjaWF0ZWQgdGhlIGluc2lnaHQuCj4KPiA+IEFsc28gYWxtb3N0IGFsbCBtb2Rlcm4gT09P +IGNvcmVzIHVzZSBUb21hc3VsbyBiZWNhdXNlIFRvbWFzdWxvIGlzCj4gPiBiZXR0ZXIgYXQgYXZv +aWRpbmcgZmFsc2UgaGF6YXJkcyBjb21wYXJlZCB0byBzY29yZWJvYXJkaW5nLgo+Cj4gaW4gdGhl +IHZlcnNpb25zIG9mIHNjb3JlYm9hcmRzIGltcGxlbWVudGVkIGJ5IGFjYWRlbWljcyAtIGJlY2F1 +c2UgdGhleQo+IGZhaWwgdG8gY29tcHJlaGVuZCB0aGVtIHByb3Blcmx5IC0gYmVjYXVzZSB0aGV5 +IG9ubHkgcmVhZCB0aGUgcGF0ZW50Cj4gb24gUS1UYWJsZXMgLSB5ZXMuCj4KPiBpbiB0aGUgdmVy +c2lvbiB0aGF0IE1pdGNoIEFsc3VwIC0gYSB3b3JsZCBsZWFkaW5nIGV4cGVydCBvbiBTY29yZWJv +YXJkCj4gTWVjaGFuaWNzIC0gdGF1Z2h0IG1lOgo+Cj4gbm8uCj4KPiBhbHNvLCB0aGUgSUlUIE1h +ZHJhcyBSSVNFIEdyb3VwIFNoYWt0aSBFLUNsYXNzIHByb2Nlc3NvciBpcyAqYWxzbyogYQo+IHNj +b3JlYm9hcmQgZGVzaWduLiAgdGhpcyB3YXMgZGVzaWduZWQgImZyb20gZmlyc3QgcHJpbmNpcGxl +cyIgYnkgUHJvZmVzc29yCj4gS2FtYXRvdGksIGFuZCBpdCB3YXMgb25seSB0aHJvdWdoIGxlYXJu +aW5nIGZyb20gTWl0Y2ggdGhhdCBpIHdhcyBhYmxlCj4gdG8gcmVjb2duaXNlIHdoYXQgaGUgaGFk +IGRvbmUgYXMgYmVpbmcgaWRlbnRpY2FsIHRvIGEgNjYwMCBzY29yZWJvYXJkLgo+Cj4gPiBUb21h +c3Vsbwo+ID4gYWxzbyBtYWtlcyBpdCBlYXNpZXIgdG8gaW1wbGVtZW50IHByZWNpc2UgdHJhcHMs +IHNvbWV0aGluZyB3aGljaCBpcwo+ID4gbm90b3Jpb3VzbHkgY2hhbGxlbmdpbmcgIHdpdGgganVz +dCBhIHNjb3JlYm9hcmQuCj4KPiBubyBpdCBpcyBub3QuICB0aGlzIGlzICp5ZXQgYWdhaW4qIGNv +bXBsZXRlIGZhY3R1YWwgbWlzaW5mb3JtYXRpb24gYW5kIGlnbm9yYW5jZQo+IGZyb20gQWNhZGVt +aWMgbGl0ZXJhdHVyZS4KPgo+IGNhbiBpIGFzazogaGF2ZSB5b3UgcmVhZCBQYXR0ZXJzb24ncyBi +b29rPyAgdGhpcyBpcyB0aGUgdXN1YWwgcGxhY2Ugd2hlcmUKPiBtb3N0IHBlb3BsZSBnZXQgdGhl +aXIgbWlzaW5mb3JtYXRpb24gZnJvbS4gIHRoZSByZWxlYXNlIG9mIHRoaXMgbWlzaW5mb3JtYXRp +b24KPiB3YXMgd2h5IE1pdGNoIEFsc3VwIC0gYSB2ZXJ5IHBpc3NlZC1vZmYgYW5kIGV4YXNwZXJh +dGVkIE1pdGNoIC0gd3JvdGUgdGhvc2UKPiB0d28gY2hhcHRlcnMsIGJhY2sgYXJvdW5kLi4uIDIw +MDggKGkgdGhpbmspLgo+Cj4gcHJlY2lzZSBleGNlcHRpb25zLCB0cmFwcywgaW50ZXJydXB0cywg +YnJhbmNoIHNwZWN1bGF0aW9uIGFuZCBwcmVkaWNhdGlvbiBtYXkKPiBhbGwgYmUgYWNoaWV2ZWQg +dGhyb3VnaCAic2hhZG93aW5nIi4gIHNlZSB0aGUgbGF0dGVyIHBhcnQgb2YgdGhlIDJuZCBjaGFw +dGVyIG9mCj4gTWl0Y2gncyBib29rLgo+Cj4gc2VlIHRoZSBzZWN0aW9uICJTaGFkb3dpbmciIGlu +IHRoaXMgcGFnZToKPiBodHRwczovL2xpYnJlLXNvYy5vcmcvM2RfZ3B1L2FyY2hpdGVjdHVyZS82 +NjAwc2NvcmVib2FyZC8KPgo+IGl0J3MgdmVyeSBzaW1wbGU6IHlvdSBob2xkIHdyaXRlIHVudGls +IHN1Y2ggdGltZSBhcyB0aGUgb3Bwb3J0dW5pdHkgZm9yICJkYW1hZ2UiCj4gaXMgY2xlYXJlZC4g +IE9wZXJhbmQgRm9yd2FyZGluZyBhbGxvd3MgaW5zdHJ1Y3Rpb25zIHRvIHJ1biBhaGVhZCwgdXNp +bmcgcmVzdWx0cwo+IHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgdG8gYmUgcmVjZWl2ZWQgb25s +eSBmaXJzdCBieSBnb2luZyB0aHJvdWdoCj4gdGhlIFJlZ2ZpbGUuCj4KPiAqdGhpcyBpcyBhbHJl +YWR5IGltcGxlbWVudGVkKiBhbmQgdGhlIHVuaXQgdGVzdHMgZGVtb25zdHJhdGVkIGl0IGFzCj4g +KmZ1bGx5IGZ1bmN0aW9uYWwqCj4KPgo+ID4gTGV0cyBiZSBjbGVhciBoZXJlLiBUaGUgQ0RDNjYw +MCBBVk9JRFMgV0FSIGFuZCBXQVcgaGF6YXJkcyBieSBCTE9DS0lORwo+ID4geW91bmdlciBpbnN0 +cnVjdGlvbnMgKFNlZSBwZzMgaW4gTWl0Y2ggQWxzdXAncyB0ZXh0KS4gVG9tYXN1bG8ncwo+ID4g +c3VwcG9ydHMgT09PIGV4ZWN1dGlvbiBQQVNUIFdBUiBhbmQgV0FXIGhhemFyZHMsIGVuYWJsaW5n +IHRoZSBjb3JlIHRvCj4gPiBleHBsb2l0IG1vcmUgSUxQIGFjcm9zcyBpdHMgZnVuY3Rpb25hbCB1 +bml0cy4KPgo+IHRoaXMgaXMgb25seSBiZWNhdXNlIHRoZSAxOTY1IENEQzY2MDAgZGlkIG5vdCBo +YXZlIGFuIE9wZXJhbmQgRm9yd2FyZGluZyBCdXMKPiAoaW5zdGVhZCBpdCB1c2VkIHRoZSByZWdm +aWxlIGFzIGEgc2FtZS1jbG9jayBmb3J3YXJkaW5nIGJ1cywgYnkgcmVhZGluZyBvbiBvbmUKPiBl +ZGdlIGFuZCB3cml0aW5nIG9uIHRoZSBvdGhlci4gIHRoaXMgdW5mb3J0dW5hdGVseSBtZWFudCB0 +aGF0IHdpdGhvdXQgYW4gT3BGd2QKPiBCdXMsIHN0YWxsIGhhZCB0byBvY2N1cikuCj4KPiB0aGlz +IERPRVMgTk9UIElOSEVSRU5UTFkgTUVBTiB0aGF0ICoqQUxMKiogU2NvcmVib2FyZHMgYXJlIHJ1 +YmJpc2guCj4KPiBpZiB5b3UgYWRkIGFuIE9wZXJhbmQgRm9yd2FyZGluZyBCdXMgKGVxdWl2YWxl +bnQgdG8gdGhlIENEQiBpbiBUb21hc3VsbykKPiB0aGUgZXhhY3Qgc2FtZSBwYXJpdHkgZnVuY3Rp +b25hbGl0eSBpcyBhY2hpZXZlZCAod2l0aG91dCB0aGUgc2V2ZXJlIGRvd25zaWRlcykuCj4KPgo+ +ID4gTHVrZSwgSSBhZ3JlZSB3aXRoIHlvdSB0aGF0IHRoZSByZXNlcnZhdGlvbiBzdGF0aW9uIHJv +d3MgaW4gVG9tYXN1bG8ncwo+ID4gY2FuIGJlIGVxdWl2YWxlbnQgdG8gdGhlIG9wZXJhbmQgbGF0 +Y2hlcyBpbiBTY29yZWJvYXJkaW5nLiBIb3dldmVyLAo+ID4gYWRkaW5nIG1hbnkgb3BlcmFuZC1s +YXRjaGVzIChieSBoYXZpbmcgbWFueSBmdW5jdGlvbmFsIHVuaXRzKSBkb2VzIG5vdAo+ID4gc2Nh +bGUgYXMgbmljZWx5IGFzIGp1c3QgYWRkaW5nIGEgZmV3IG1vcmUgcm93cyB0byBUb21hc3Vsbydz +Cj4gPiByZXNlcnZhdGlvbiBzdGF0aW9ucy4KPgo+IHRoaXMgaXMgaW5jb3JyZWN0LiAgeW91IG1h +eSBiZSB1bmRlciB0aGUgbWlzdGFrZW4gaW1wcmVzc2lvbiB0aGF0IHRoZSBwaXBlbGluZXMKPiBk +dXBsaWNhdGVkIGFzIHdlbGwuICB0aGlzIGNsZWFybHkgd291bGQgYmUgaW5hZHZpc2VhYmxlIGJl +Y2F1c2UgdGhlIEZVJ3Mgam9iCj4gaXMgdG8gc2VydmUgb25lIGFuZCBvbmx5IG9uZSByZXN1bHQu +ICB0aGVyZWZvcmUgeW91IGtub3cgdGhhdCB0aGlzIGlzIGEgbWlzdGFrZW4KPiB1bmRlcnN0YW5k +aW5nLCBhbmQgdGhhdCBjb25zZXF1ZW50bHkgeW91IGhhdmUgbXVsdGlwbGUgRlVzIGZvciB0aGUg +c2FtZQo+IHBpcGVsaW5lLiAgKHRlcm1lZCAiQ29uY3VycmVudCBDb21wdXRhdGlvbiBVbml0Iiku +Cj4KPiB0aGVyZWZvcmUgaXQncyBtaW5pbWFsLiAgZXhjbHVkaW5nIHRoZSBsYXRjaGVzIHRoZW1z +ZWx2ZXMgKHRoZSByb3dzCj4gaGF2ZSBsYXRjaGVzLCB0aGUKPiBDb21wVW5pdHMgLSBha2EgRnVu +Y3Rpb25Vbml0cyBoYXZlIGxhdGNoZXMsIHRoZSB0b3RhbCBudW1iZXIgb2YgbGF0Y2hlcyBhZnRl +cgo+IGZsYXR0ZW5pbmcgaXMgdGhlIHNhbWUpLCB0aGUgbnVtYmVyIG9mIGdhdGVzIGFkZGVkIGJ5 +IGVhY2ggQ29tcFVuaXQgaXMKPiBtaW5pbWFsOiBhcm91bmQuLi4gODAsIG1heGltdW0uCj4KPiB0 +aGF0J3MgcGVhbnV0cy4KPgo+ID4gRXNwZWNpYWxseSBzaW5jZSBkZXNpZ25pbmcgdGhlIENBTXMg +Zm9yCj4gPiBUb21hc3VsbydzIGlzIGEgd2VsbCBzdHVkaWVkLCBhbmQgd2VsbC11bmRlcnN0b29k +IHByb2JsZW0KPgo+IHRoZSBrZXkgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIHRob3NlIHR3bzoKPgo+ +IEEpIHdlbGwtdW5kZXJzdG9vZC4uLiAqYW5kKgo+IEIpIGEgcHJvYmxlbS4KPgo+IGhhdmUgYSBs +b29rIGF0IGhvdyBtdWx0aS1pc3N1ZSBpcyBkb25lIHVzaW5nIFRvbWFzdWxvLiAgaXQncyBzaG9j +a2luZ2x5IGJhZC4KPgo+Cj4gPiA+IDMuIEV4cGFuZCB0aGUgbnVtYmVyIG9mIFJTZXMgc28gdGhh +dCBpZiB5b3Ugd2VyZSB0byBjb3VudCB0aGUgdG90YWwgbnVtYmVyCj4gPiA+IG9mIHBsYWNlcyBv +cGVyYW5kcyBhcmUgc3RvcmVkLCB0aGV5IGFyZSB0aGUgc2FtZS4KPiA+Cj4gPiA+IChhbm90aGVy +IHdheSB0byBwdXQgdGhpcyBpcywgImZsYXR0ZW4gYWxsIDJEIFJTZXMgaW50byAxRCIpCj4gPgo+ +ID4gVGhpcyBkb2VzIG5vdCBzY2FsZSB3ZWxsLiBBIDJEIENBTSBpcyBmYXIgbW9yZSBhcmVhIGVm +ZmljaWVudCB0aGFuIGEKPiA+IDFEIGZsYXR0ZW5lZCB2ZWN0b3IuCj4KPiBhIDFEIGJpdHZlY3Rv +ci4gIGEgc2luZ2xlLCAxRCBiaXR2ZWN0b3IuICBvZiAzMiBiaXRzIGluIGxlbmd0aC4KPgo+IGNv +bXBhcmVkIHRvIDMyIDUtYml0IGJpbmFyeSBhZGRyZXNzZXMuCj4KPiBqdXN0IHRoZSBsYXRjaGVz +IGFsb25lLCB0aGF0IG1hdGggZG9lcyBub3Qgc3RhY2sgdXAuCj4KPiBub3cgbGV0J3MgdGFrZSBp +dCB0byAyRC4KPgo+IGxldCdzIHNheSB0aGF0IHdlIGhhdmUgMTAgRlVzIGFuZCAzMiAgUmVncy4K +Pgo+IGluIFRvbWFzdWxvIHRoYXQgaXMgYSA1LWJpdCBhZGRyZXNzLiAgMTB4NSA9IDUwIERGRiBs +YXRjaGVzLiAgREZGCj4gbGF0Y2hlcyBhcmUgMTAgZ2F0ZXMgc28gdGhhdCdzIDUwMCBnYXRlcy4K +Pgo+IGluIDY2MDAgdGhhdCBpcyAxMHgzMiA9IDMyMCBTUiBOQU5EIExhdGNoZXMuICBTUiBOQU5E +IGxhdGNoZXMgYXJlIDIKPiBnYXRlcy4gIDMyMHgyIGlzIDY0MCBnYXRlcy4KPgo+IG5vdCB2ZXJ5 +IGRpZmZlcmVudCBpbiB0ZXJtcyBvZiBsYXRjaCBjb3VudCwgaXMgaXQ/Cj4KPgo+IG5vdyBsZXQn +cyBkbyB0aGUgYWRkcmVzcy1jaGVja2luZy4KPgo+IHRvIGNoZWNrIGEgcmVnaXN0ZXIgYXMgImFj +dGl2ZSIgLSBiZWFyIGluIG1pbmQgdGhhdCB0aGlzIGlzIHBlcgo+IHJlZ2lzdGVyIGFuZCBjb25z +ZXF1ZW50bHkKPiBpZiBkb2luZyBtdWx0aS1pc3N1ZSB0aGF0J3MgYSBiYXRjaCBvZiBhZGRyZXNz +LWNoZWNraW5nIGdhdGVzICpwZXIgcmVnaXN0ZXIqLgo+Cj4gZm9yIFRvbWFzdWx1LCB0aGlzIHJl +cXVpcmVzIDEweDUgPSA1MDAgWE9SIGdhdGVzIChwbHVzIHNvbWUKPiBtdWx0aS1pbnB1dCBBTkQg +Z2F0ZXMgb24gZWFjaCByb3cpICAgWE9SIGlzIDQgZ2F0ZXMsIHNvIHRoYXQncyAyLDAwMAo+IGdh +dGVzICpQRVIgTVVMVEktSVNTVUUgTEFORSouCj4KPiBmb3IgdGhlIDY2MDAsIHRoYXQncyAxMHgz +MiAqKkFORCoqIGdhdGVzLiAgMzIwIEFORCBnYXRlcy4KPgo+IGFuZCBvZiB0aG9zZSAzMjAgQU5E +IGdhdGVzLCB0aGV5IGFyZSByZS11c2VhYmxlIGZvciBtdWx0aS1pc3N1ZQo+IFdJVEhPVVQgUkVR +VUlSSU5HIEFERElUSU9OQUwgR0FURVMuCj4KPiBzbyB0aGF0IGlzIDMyMCBBTkQgZ2F0ZXMgZm9y +IHNpbmdsZS1pc3N1ZQo+IHRoYXQgaXMgemVybyBleHRyYSBnYXRlcyBmb3IgZHVhbC1pc3N1ZQo+ +IHRoYXQgaXMgemVybyBleHRyYSBnYXRlcyBmb3IgcXVhZC1pc3N1ZQo+IHplcm8gZXh0cmEgZ2F0 +ZXMgZm9yIG9jdGFsLWlzc3VlLgo+Cj4gc3RhcnQgdG8gbWFrZSBzZW5zZSBub3csIHdoeSB1bmFy +eSBlbmNvZGluZyBhcyAxRCB2ZWN0b3JzIGlzIGxlc3MKPiBnYXRlcyBhbmQgbGVzcyBwb3dlciB0 +aGFuIGJpbmFyeSBDQU1zPwo+Cj4gaWYgeW91IHdhbnQgdG8gY2hlY2sgbXVsdGlwbGUgdW5hcnkg +Yml0cyAoYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUgZm9yCj4gbXVsdGktaXNzdWUpLCBhbGwgeW91 +IGRvIGlzLi4uIHNldC4uLiBtdWx0aXBsZS4uLiBiaXRzLgo+Cj4gd2hhdCBoYXBwZW5zPyAgbXVs +dGlwbGUgQU5EIGdhdGVzIGZpcmUuICBpbiB0aGUgc2FtZSBjbG9jay4gICBhbmQKPiB0aGF0J3Mg +ZXhhY3RseSB3aGF0IHdlIHdhbnQuCj4KPgo+ID4gPiA3LiByZW5hbWUgUlNlcyB0byAiRnVuY3Rp +b24gVW5pdHMiIChhY3R1YWxseSBpbiBUaG9ybnRvbidzIGJvb2sgdGhlIHBocmFzZQo+ID4gPiAi +Q29tcHV0YXRpb24gVW5pdHMiIGlzIHVzZWQpCj4gPgo+ID4gU28gYSBUb21hc3VsbydzIGRlc2ln +biB3aXRoIDQgcm93cyBub3cgYmVjb21lcyBhICJmbGF0dGVuZWQiIGRlc2lnbgo+ID4gd2l0aCA0 +IGZ1bmN0aW9uYWwgdW5pdHM/IFRoZSBhZGRpdGlvbmFsIGNvc3Qgb2YgdGhlIGZ1bmN0aW9uYWwg +dW5pdHMKPiA+IGlzIGVub3Jtb3VzLgo+Cj4gbm8sIGl0J3MgNCB4IDgwIGdhdGVzIChhcHByb3gp +LiAgdGhhdCdzIG5vdCA0eCBkdXBsaWNhdGlvbiBvZiBBTFUKPiBwaXBlbGluZXMgKmJlaGluZCog +dGhvc2UgNCBGdW5jdGlvbiBVbml0cy4gIHNlZSBNaXRjaCdzIDJuZCBDaGFwdGVyLAo+ICJDb25j +dXJyZW50IENvbXB1dGF0aW9uIFVuaXQiCj4KPiBodHRwczovL2xpYnJlLXNvYy5vcmcvM2RfZ3B1 +L2FyY2hpdGVjdHVyZS82NjAwc2NvcmVib2FyZC82MDB4LWNvbmN1cnJlbnRfY29tcF91bml0LnBu +Zwo+Cj4gSmVyZW15OiBpdCdzIHJhdGhlciB1bmZvcnR1bmF0ZSB0aW1pbmcuICBzaXggdG8gdHdl +bHZlIG1vbnRocyBhZ28sIHdlCj4gY291bGQgaGF2ZSBoYWQgdGhpcyBkZWJhdGUgYW5kIGl0IHdv +dWxkIGhhdmUgYmVlbiBmdW4sIGluZm9ybWF0aXZlLAo+IHVzZWZ1bCBhbmQgcHJvZHVjdGl2ZS4g +IGl0IHdvdWxkIGFsc28gaGF2ZSBiZWVuIHBvc3NpYmxlIHRvIGJyaW5nIHlvdQo+IGluIHRvIHRo +ZSBkaXNjdXNzaW9ucyB0aGF0IHRvb2sgcGxhY2UgKE5vdiAyMDE4IHRvIGFyb3VuZCBBcHItTWF5 +Cj4gMjAxOSkgYmV0d2VlbiBteXNlbGYsIFNhbXVlbCBGYWx2bywgTWl0Y2ggQWxzdXAgYW5kIHRo +ZSB0ZWFtIGVpdGhlcgo+IGhlcmUgb24gdGhpcyBsaXN0LCBvciBvbiBjb21wLmFyY2guCj4KPiBo +b3dldmVyIHdpdGggdGhlIHVwY29taW5nIGRlYWRsaW5lLCB0aGlzIGtpbmQgb2Ygb3RoZXJ3aXNl +IHJlYWxseQo+IHZhbHVhYmxlIGRpc2N1c3Npb24gaXMsIHNhZGx5LCBzb21ldGhpbmcgdGhhdCB3 +ZSAqZG8gbm90IGhhdmUgdGltZQo+IGZvciouCj4KPiByZXRyb3NwZWN0aXZlIHJlY29tbWVuZGF0 +aW9uIHRoYXQgd2UgcmVjb25zaWRlciBhbmQgdXNlIFRvbWFzdWxvIHdvdWxkCj4gbm90IG9ubHkg +cmVzdWx0IGluIHVzIGNvbXBsZXRlbHkgbWlzc2luZyB0aGUgdXBjb21pbmcgT2N0IDIwMjAKPiBk +ZWFkbGluZSwgd2Ugd291bGQgZW5kIHVwIHdpdGggYW4gZXhjZXB0aW9uYWxseSBwb29ybHktcGVy +Zm9ybWluZywKPiBsaW1pdGVkIGFuZCBzZXJpb3VzbHkgcHJvYmxlbWF0aWMgcHJvY2Vzc29yIGFz +IHdlbGwuICB3b3JzZSB0aGFuIHRoYXQsCj4gc2FkbHkgaSBoYXZlIHRvIHNheSB0aGF0IGkgYW0g +Y29uY2VybmVkIHRoYXQgYW55IHJldHJvc3BlY3RpdmUKPiBkaXNjdXNzaW9uIHdvdWxkIGl0c2Vs +ZiAoYXNpZGUgZnJvbSB2YWx1YWJsZSBjb3JyZWN0aW9ucyBhbmQKPiBhc3Npc3RhbmNlIGluIGNy +ZWF0aW5nIGEgY29tcGFyYXRpdmUgYW5hbHlzaXMpIGJlY29tZSBhIHNlcmlvdXMKPiBkaXN0cmFj +dGlvbi4KPgo+IGl0J3MgbGlpdHRlcmFsbGx5IHRha2VuIDE4IE1PTlRIcyB0byBnZXQgdG8gdGhl +IHBvaW50IHdoZXJlIHdlIGFyZSBub3cKPiB3aXRoIHRoZSBjb2RlIGFuZCB0aGUgZGVzaWduLiAg +d2UgbmVlZCB0byBmaW5pc2ggdGhlIGRlc2lnbiBpbiBhIHZlcnkKPiBzaG9ydCB0aW1lZnJhbWUg +KDE0IHdlZWtzKSwgYW5kIGFzIFllaG93c2h1YSBwb2ludHMgb3V0LCBkdWUgdG8gdGhlCj4gY29t +cGxleGl0eSBvZiB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiBDb21wdXRlciBTY2llbmNlLCB0aGF0 +IGluIHR1cm4KPiBpbXBsaWVzIHRoYXQgeW91J2xsIG5lZWQgdG8gdHJ1c3QgbWUgb24gdGhlIGFy +Y2hpdGVjdHVyYWwgYW5hbHlzaXMKPiAod2hpY2ggdG9vayA1IG1vbnRocyB0byBjb21wbGV0ZSwg +dW5kZXIgTWl0Y2gncyBndWlkYW5jZSkuCj4KPiBzbywgbXkgYXBvbG9naWVzIGZvciBuZWVkaW5n +IHRvIGJlIGZpcm0gb24gdGhpczogdGhlIG9wcG9ydHVuaXR5IHRvCj4gaGVscCBleGlzdHMgd2l0 +aGluIHRoZSB0aW1lLWZyYW1lIGFuZCBmaW5hbmNpYWwgY29uc3RyYWludHMgdGhhdCB3ZXJlCj4g +ZGV0ZXJtaW5lZCBhbmQgc2V0LCBvdmVyIDE4IG1vbnRocyBhZ28sIGJlZm9yZSB5b3Ugam9pbmVk +Lgo+Cj4gdGhlcmVmb3JlLCBpZiB5b3UnZCBsaWtlIHRvIGhlbHAsIHRoZW4gYXNraW5nIHF1ZXN0 +aW9ucyB3aGljaCBhcmUKPiByZWxhdGVkIHRvICp1bmRlcnN0YW5kaW5nKiBvZiB0aGUgcHJlY2lz +ZS1hdWdtZW50ZWQgU2NvcmVib2FyZCBzeXN0ZW0sCj4gdGFyZ2V0dGVkIHZlcnkgc3BlY2lmaWNh +bGx5IGF0IGFsbG93aW5nIHlvdSB0byBlbmdhZ2UgYW5kIGFzc2lzdCB1cyBpbgo+IG1lZXRpbmcg +dGhhdCBkZWFkbGluZSwgYXJlIHZlcnkgd2VsY29tZS4KPgo+IGFueXRoaW5nIG90aGVyIHRoYW4g +dGhhdCB2ZXJ5IHNwZWNpZmljIGdvYWwtb3JpZW50YXRlZCBmb2N1cywgaSBhbQo+IHJlYWxseSBz +b3JyeSwgd2UgcmVhbGx5IG5lZWQgdG8gbW92ZSBpdCB0byBvbmUgc2lkZSwgYW5kIGZvciB0aGF0 +LCBpCj4gcmVjb21tZW5kIGNvbXAuYXJjaC4KPgo+IHRoZXJlZm9yZSwgaWYgeW91IHdvdWxkIGxp +a2UgdG8gZGlzY3VzcyB0aGUgbWVyaXRzIG9mIFRvbWFzdWxvIHZzCj4gU2NvcmVib2FyZCAocGFy +dGljdWxhcmx5IHRob3NlIHRoYXQgcHVyc3VlIHJlY29tbWVuZGluZyBUb21hc3Vsbwo+ICpvdmVy +KiBTY29yZWJvYXJkKSBmdXJ0aGVyLCBpIHJlY29tbWVuZCBkb2luZyBzbyBvbiBjb21wLmFyY2gs +IHdoaWNoCj4gaXMgd2hlcmUgTWl0Y2ggQWxzdXAgbW9zdCByZWd1bGFybHkgbWF5IGJlIGZvdW5k +LiAgd2l0aCB0aGUgcmlnaHQKPiBpbnRlcmVzdGluZyBxdWVzdGlvbiwgYm90aCBoZSBhbmQgbWFu +eSBvdGhlcnMgd2lsbCBwaXRjaCBpbi4KPgo+IHRoZSBvbmUgdGhpbmcgdGhhdCB5b3UgbmVlZCB0 +byBiZSBhd2FyZSBvZiBpcyB0aGF0IE1pdGNoIGlzIGJvdGgKPiBoeXBlci1pbnRlbGxpZ2VudCwg +YW5kIHNlY29uZCB0aGF0IGhlIGRvZXMgbm90IHRvbGVyYXRlIHBlb3BsZSB3aG8KPiBjYW5ub3Qg +a2VlcCB1cCB3aXRoIGhpbSwgZXNwZWNpYWxseSBpZiB0aGV5IHRyeSB0byBjb252aW5jZSBoaW0g +b2YKPiBzb21ldGhpbmcgd2l0aG91dCBoYXZpbmcgZmlyc3QgZGVtb25zdHJhdGVkIHRoYXQgdGhl +eSd2ZSB1bmRlcnN0b29kCj4gKmhpbSouICBoZSdzIHdlbGwgb3ZlciA3MCwgaGUncyByZXRpcmVk +LCBoZSBtYWRlIGVub3VnaCAieHh4eC15b3UiCj4gbW9uZXkgb24gc2VsbGluZyBHUFUgcGF0ZW50 +cyB0byBTYW1zdW5nLCBzbyBoZSBkb2Vzbid0IGhhdmUgdG8gcHV0IHVwCj4gd2l0aCBhbnl0aGlu +ZyB0aGF0IGhlIGRvZXNuJ3Qgd2FudCB0byA6KQo+Cj4gbC4KPgo+IF9fX19fX19fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gbGlicmUtcmlzY3YtZGV2IG1haWxpbmcg +bGlzdAo+IGxpYnJlLXJpc2N2LWRldkBsaXN0cy5saWJyZS1yaXNjdi5vcmcKPiBodHRwOi8vbGlz +dHMubGlicmUtcmlzY3Yub3JnL21haWxtYW4vbGlzdGluZm8vbGlicmUtcmlzY3YtZGV2CgpfX19f +X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaWJyZS1yaXNjdi1k +ZXYgbWFpbGluZyBsaXN0CmxpYnJlLXJpc2N2LWRldkBsaXN0cy5saWJyZS1yaXNjdi5vcmcKaHR0 +cDovL2xpc3RzLmxpYnJlLXJpc2N2Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpYnJlLXJpc2N2LWRl +dgo= + -- 2.30.2