From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurence Oberman Subject: Re: Issue with fc_exch_alloc failing initiated by fc_queuecommand on NUMA or large configurations with Intel ixgbe running FCOE Date: Tue, 11 Oct 2016 09:39:30 -0400 (EDT) Message-ID: <740157254.1242271.1476193170138.JavaMail.zimbra@redhat.com> References: <209207528.804499.1475931430678.JavaMail.zimbra@redhat.com> <2d30ad34-7a5e-b2ba-05f4-b0d831944f4c@suse.de> <1360350390.815966.1475949181371.JavaMail.zimbra@redhat.com> <1271455655.818631.1475955856691.JavaMail.zimbra@redhat.com> <141863610.848432.1476028364025.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <141863610.848432.1476028364025.JavaMail.zimbra-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: fcoe-devel-bounces-s9riP+hp16TNLxjTenLetw@public.gmane.org Sender: "fcoe-devel" To: Hannes Reinecke , Ewan Milne Cc: fcoe-devel-s9riP+hp16TNLxjTenLetw@public.gmane.org, "Curtis Taylor (cjt-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org)" , Bud Brown , Linux SCSI Mailinglist List-Id: linux-scsi@vger.kernel.org CgotLS0tLSBPcmlnaW5hbCBNZXNzYWdlIC0tLS0tCj4gRnJvbTogIkxhdXJlbmNlIE9iZXJtYW4i IDxsb2Jlcm1hbkByZWRoYXQuY29tPgo+IFRvOiAiSGFubmVzIFJlaW5lY2tlIiA8aGFyZUBzdXNl LmRlPgo+IENjOiAiTGludXggU0NTSSBNYWlsaW5nbGlzdCIgPGxpbnV4LXNjc2lAdmdlci5rZXJu ZWwub3JnPiwgZmNvZS1kZXZlbEBvcGVuLWZjb2Uub3JnLCAiQ3VydGlzIFRheWxvciAoY2p0QHVz LmlibS5jb20pIgo+IDxjanRAdXMuaWJtLmNvbT4sICJCdWQgQnJvd24iIDxidWJyb3duQHJlZGhh dC5jb20+Cj4gU2VudDogU3VuZGF5LCBPY3RvYmVyIDksIDIwMTYgMTE6NTI6NDQgQU0KPiBTdWJq ZWN0OiBSZTogW09wZW4tRkNvRV0gSXNzdWUgd2l0aCBmY19leGNoX2FsbG9jIGZhaWxpbmcgaW5p dGlhdGVkIGJ5IGZjX3F1ZXVlY29tbWFuZCBvbiBOVU1BIG9yIGxhcmdlCj4gY29uZmlndXJhdGlv bnMgd2l0aCBJbnRlbCBpeGdiZSBydW5uaW5nIEZDT0UKPiAKPiAKPiAKPiAtLS0tLSBPcmlnaW5h bCBNZXNzYWdlIC0tLS0tCj4gPiBGcm9tOiAiTGF1cmVuY2UgT2Jlcm1hbiIgPGxvYmVybWFuQHJl ZGhhdC5jb20+Cj4gPiBUbzogIkhhbm5lcyBSZWluZWNrZSIgPGhhcmVAc3VzZS5kZT4KPiA+IENj OiAiTGludXggU0NTSSBNYWlsaW5nbGlzdCIgPGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnPiwK PiA+IGZjb2UtZGV2ZWxAb3Blbi1mY29lLm9yZywgIkN1cnRpcyBUYXlsb3IgKGNqdEB1cy5pYm0u Y29tKSIKPiA+IDxjanRAdXMuaWJtLmNvbT4sICJCdWQgQnJvd24iIDxidWJyb3duQHJlZGhhdC5j b20+Cj4gPiBTZW50OiBTYXR1cmRheSwgT2N0b2JlciA4LCAyMDE2IDM6NDQ6MTYgUE0KPiA+IFN1 YmplY3Q6IFJlOiBbT3Blbi1GQ29FXSBJc3N1ZSB3aXRoIGZjX2V4Y2hfYWxsb2MgZmFpbGluZyBp bml0aWF0ZWQgYnkKPiA+IGZjX3F1ZXVlY29tbWFuZCBvbiBOVU1BIG9yIGxhcmdlCj4gPiBjb25m aWd1cmF0aW9ucyB3aXRoIEludGVsIGl4Z2JlIHJ1bm5pbmcgRkNPRQo+ID4gCj4gPiAKPiA+IAo+ ID4gLS0tLS0gT3JpZ2luYWwgTWVzc2FnZSAtLS0tLQo+ID4gPiBGcm9tOiAiTGF1cmVuY2UgT2Jl cm1hbiIgPGxvYmVybWFuQHJlZGhhdC5jb20+Cj4gPiA+IFRvOiAiSGFubmVzIFJlaW5lY2tlIiA8 aGFyZUBzdXNlLmRlPgo+ID4gPiBDYzogIkxpbnV4IFNDU0kgTWFpbGluZ2xpc3QiIDxsaW51eC1z Y3NpQHZnZXIua2VybmVsLm9yZz4sCj4gPiA+IGZjb2UtZGV2ZWxAb3Blbi1mY29lLm9yZywgIkN1 cnRpcyBUYXlsb3IgKGNqdEB1cy5pYm0uY29tKSIKPiA+ID4gPGNqdEB1cy5pYm0uY29tPiwgIkJ1 ZCBCcm93biIgPGJ1YnJvd25AcmVkaGF0LmNvbT4KPiA+ID4gU2VudDogU2F0dXJkYXksIE9jdG9i ZXIgOCwgMjAxNiAxOjUzOjAxIFBNCj4gPiA+IFN1YmplY3Q6IFJlOiBbT3Blbi1GQ29FXSBJc3N1 ZSB3aXRoIGZjX2V4Y2hfYWxsb2MgZmFpbGluZyBpbml0aWF0ZWQgYnkKPiA+ID4gZmNfcXVldWVj b21tYW5kIG9uIE5VTUEgb3IgbGFyZ2UKPiA+ID4gY29uZmlndXJhdGlvbnMgd2l0aCBJbnRlbCBp eGdiZSBydW5uaW5nIEZDT0UKPiA+ID4gCj4gPiA+IAo+ID4gPiAKPiA+ID4gLS0tLS0gT3JpZ2lu YWwgTWVzc2FnZSAtLS0tLQo+ID4gPiA+IEZyb206ICJIYW5uZXMgUmVpbmVja2UiIDxoYXJlQHN1 c2UuZGU+Cj4gPiA+ID4gVG86ICJMYXVyZW5jZSBPYmVybWFuIiA8bG9iZXJtYW5AcmVkaGF0LmNv bT4sICJMaW51eCBTQ1NJIE1haWxpbmdsaXN0Igo+ID4gPiA+IDxsaW51eC1zY3NpQHZnZXIua2Vy bmVsLm9yZz4sCj4gPiA+ID4gZmNvZS1kZXZlbEBvcGVuLWZjb2Uub3JnCj4gPiA+ID4gQ2M6ICJD dXJ0aXMgVGF5bG9yIChjanRAdXMuaWJtLmNvbSkiIDxjanRAdXMuaWJtLmNvbT4sICJCdWQgQnJv d24iCj4gPiA+ID4gPGJ1YnJvd25AcmVkaGF0LmNvbT4KPiA+ID4gPiBTZW50OiBTYXR1cmRheSwg T2N0b2JlciA4LCAyMDE2IDE6MzU6MTkgUE0KPiA+ID4gPiBTdWJqZWN0OiBSZTogW09wZW4tRkNv RV0gSXNzdWUgd2l0aCBmY19leGNoX2FsbG9jIGZhaWxpbmcgaW5pdGlhdGVkIGJ5Cj4gPiA+ID4g ZmNfcXVldWVjb21tYW5kIG9uIE5VTUEgb3IgbGFyZ2UKPiA+ID4gPiBjb25maWd1cmF0aW9ucyB3 aXRoIEludGVsIGl4Z2JlIHJ1bm5pbmcgRkNPRQo+ID4gPiA+IAo+ID4gPiA+IE9uIDEwLzA4LzIw MTYgMDI6NTcgUE0sIExhdXJlbmNlIE9iZXJtYW4gd3JvdGU6Cj4gPiA+ID4gPiBIZWxsbwo+ID4g PiA+ID4KPiA+ID4gPiA+IFRoaXMgaGFzIGJlZW4gYSB0b3VnaCBwcm9ibGVtIHRvIGNoYXNlIGRv d24gYnV0IHdhcyBmaW5hbGx5Cj4gPiA+ID4gPiByZXByb2R1Y2VkLgo+ID4gPiA+ID4gVGhpcyBp c3N1ZSBpcyBhcHBhcmVudCBvbiBSSEVMIGtlcm5lbHMgYW5kIHVwc3RyZWFtIHNvIGp1c3RpZmll ZAo+ID4gPiA+ID4gcmVwb3J0aW5nCj4gPiA+ID4gPiBoZXJlLgo+ID4gPiA+ID4KPiA+ID4gPiA+ IEl0cyBvdXQgdGhlcmUgYW5kIHNvbWUgbWF5IG5vdCBiZSBhd2FyZSBpdHMgZXZlbiBoYXBwZW5p bmcgb3RoZXIgdGhhbgo+ID4gPiA+ID4gdmVyeQo+ID4gPiA+ID4gc2xvdwo+ID4gPiA+ICA+IHBl cmZvcm1hbmNlIHVzaW5nIGl4Z2JlIGFuZCBzb2Z0d2FyZSBGQ09FIG9uIGxhcmdlIGNvbmZpZ3Vy YXRpb25zLgo+ID4gPiA+ID4KPiA+ID4gPiA+IFVwc3RyZWFtIEtlcm5lbCB1c2VkIGZvciByZXBy b2R1Y2luZyBpcyA0LjguMAo+ID4gPiA+ID4KPiA+ID4gPiA+IEkvTyBwZXJmb3JtYW5jZSB3YXMg bm90ZWQgdG8gYmUgdmVyeSBpbXBhY3RlZCBvbiBhIGxhcmdlIE5VTUEgdGVzdAo+ID4gPiA+ID4g c3lzdGVtCj4gPiA+ID4gPiAoNjQgQ1BVUyA0IE5VTUEgbm9kZXMpIHJ1bm5pbmcgdGhlIHNvZnR3 YXJlIGZjb2Ugc3RhY2sgd2l0aCBJbnRlbAo+ID4gPiA+ID4gaXhnYmUKPiA+ID4gPiA+IGludGVy ZmFjZXMuCj4gPiA+ID4gPiBBZnRlciBjYXB0dXJpbmcgYmxrdHJhY2VzIHdlIHNhdyBmb3IgZXZl cnkgSS9PIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUKPiA+ID4gPiA+IGJsa19yZXF1ZXVlX3JlcXVl c3QgYW5kIHNvbWV0aW1lcyBodW5kcmVkcyBvciBtb3JlLgo+ID4gPiA+ID4gVGhpcyByZXN1bHRl ZCBpbiBJT1BTIHJhdGVzIGJlaW5nIG1hcmdpbmFsIGF0IGJlc3Qgd2l0aCBxdWV1aW5nIGFuZAo+ ID4gPiA+ID4gaGlnaAo+ID4gPiA+ID4gd2FpdCB0aW1lcy4KPiA+ID4gPiA+IEFmdGVyIG5hcnJv d2luZyB0aGlzIGRvd24gd2l0aCBzeXN0ZW10YXAgYW5kIHRyYWNlLWNtZCB3ZSBhZGRlZAo+ID4g PiA+ID4gZnVydGhlcgo+ID4gPiA+ID4gZGVidWcgYW5kIGl0IHdhcyBhcHBhcmVudCB0aGlzIHdh cyBkdWVzIHRvIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kKPiA+ID4gPiA+IGJlaW5nCj4gPiA+ID4g PiByZXR1cm5lZC4KPiA+ID4gPiA+IFNvIEkvTyBwYXNzZXMgYnV0IHZlcnkgc2xvd2x5IGFzIGl0 IGNvbnN0YW50bHkgaGF2aW5nIHRvIGJlIHJlcXVldWVkLgo+ID4gPiA+ID4KPiA+ID4gPiA+IFRo ZSBpZGVudGljYWwgY29uZmlndXJhdGlvbiBpbiBvdXIgbGFiIHdpdGggYSBzaW5nbGUgTlVNQSBu b2RlIGFuZCA0Cj4gPiA+ID4gPiBDUFVTCj4gPiA+ID4gPiBkb2VzIG5vdCBzZWUgdGhpcyBpc3N1 ZSBhdCBhbGwuCj4gPiA+ID4gPiBUaGUgc2FtZSBsYXJnZSBzeXN0ZW0gdGhhdCByZXByb2R1Y2Vz IHRoaXMgd2FzIGJvb3RlZCB3aXRoIG51bWE9b2ZmCj4gPiA+ID4gPiBhbmQKPiA+ID4gPiA+IHN0 aWxsIHNlZXMgdGhlIGlzc3VlLgo+ID4gPiA+ID4KPiA+ID4gPiBIYXZlIHlvdSB0ZXN0ZWQgd2l0 aCBteSBGQ29FIGZpeGVzPwo+ID4gPiA+IEkndmUgZG9uZSBxdWl0ZSBzb21lIGZpeGVzIGZvciBs aWJmYy9mY29lLCBhbmQgaXQgd291bGQgYmUgbmljZSB0byBzZWUKPiA+ID4gPiBob3cgdGhlIHBh dGNoZXMgYmVoYXZlIHdpdGggdGhpcyBzZXR1cC4KPiA+ID4gPiAKPiA+ID4gPiA+IFRoZSBmbG93 IGlzIGFzIGZvbGxvd3M6Cj4gPiA+ID4gPgo+ID4gPiA+ID4gRnJvbSB3aXRoIGZjX3F1ZXVlY29t bWFuZAo+ID4gPiA+ID4gICAgICAgICAgIGZjX2ZjcF9wa3Rfc2VuZCgpIGNhbGxzIGZjX2ZjcF9j bWRfc2VuZCgpIGNhbGxzCj4gPiA+ID4gPiAgICAgICAgICAgdHQuZXhjaF9zZXFfc2VuZCgpIHdo aWNoIGNhbGxzIGZjX2V4Y2hfc2VxX3NlbmQKPiA+ID4gPiA+Cj4gPiA+ID4gPiB0aGlzIGZhaWxz IGFuZCByZXR1cm5zIE5VTEwgaW4gZmNfZXhjaF9hbGxvYygpIGFzIHRoZSBsaXN0IHRyYXZlcmFs Cj4gPiA+ID4gPiBuZXZlcgo+ID4gPiA+ID4gY3JlYXRlcyBhIG1hdGNoLgo+ID4gPiA+ID4KPiA+ ID4gPiA+IHN0YXRpYyBzdHJ1Y3QgZmNfc2VxICpmY19leGNoX3NlcV9zZW5kKHN0cnVjdCBmY19s cG9ydCAqbHBvcnQsCj4gPiA+ID4gPiAJCQkJICAgICAgIHN0cnVjdCBmY19mcmFtZSAqZnAsCj4g PiA+ID4gPiAJCQkJICAgICAgIHZvaWQgKCpyZXNwKShzdHJ1Y3QgZmNfc2VxICosCj4gPiA+ID4g PiAJCQkJCQkgICAgc3RydWN0IGZjX2ZyYW1lICpmcCwKPiA+ID4gPiA+IAkJCQkJCSAgICB2b2lk ICphcmcpLAo+ID4gPiA+ID4gCQkJCSAgICAgICB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IGZj X3NlcSAqLAo+ID4gPiA+ID4gCQkJCQkJCSAgdm9pZCAqKSwKPiA+ID4gPiA+IAkJCQkgICAgICAg dm9pZCAqYXJnLCB1MzIgdGltZXJfbXNlYykKPiA+ID4gPiA+IHsKPiA+ID4gPiA+IAlzdHJ1Y3Qg ZmNfZXhjaCAqZXA7Cj4gPiA+ID4gPiAJc3RydWN0IGZjX3NlcSAqc3AgPSBOVUxMOwo+ID4gPiA+ ID4gCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwo+ID4gPiA+ID4gCXN0cnVjdCBmY19mY3Bf cGt0ICpmc3AgPSBOVUxMOwo+ID4gPiA+ID4gCWludCByYyA9IDE7Cj4gPiA+ID4gPgo+ID4gPiA+ ID4gCWVwID0gZmNfZXhjaF9hbGxvYyhscG9ydCwgZnApOyAgICAgKioqKiogQ2FsbGVkIEhlcmUg YW5kIGZhaWxzCj4gPiA+ID4gPiAJaWYgKCFlcCkgewo+ID4gPiA+ID4gCQlmY19mcmFtZV9mcmVl KGZwKTsKPiA+ID4gPiA+IAkJcHJpbnRrKCJSSERFQlVHOiBJbiBmY19leGNoX3NlcV9zZW5kIHJl dHVybmVkIE5VTEwgYmVjYXVzZSAhZXAgd2l0aAo+ID4gPiA+ID4gCQllcAo+ID4gPiA+ID4gCQk9 Cj4gPiA+ID4gPiAJCSVwXG4iLGVwKTsKPiA+ID4gPiA+IAkJcmV0dXJuIE5VTEw7Cj4gPiA+ID4g PiAJfQo+ID4gPiA+ID4gLi4KPiA+ID4gPiA+IC4uCj4gPiA+ID4gPiBdCj4gPiA+ID4gPgo+ID4g PiA+ID4KPiA+ID4gPiA+ICBmY19leGNoX2FsbG9jKCkgLSBBbGxvY2F0ZSBhbiBleGNoYW5nZSBm cm9tIGFuIEVNIG9uIGEKPiA+ID4gPiA+ICAqCS8qKgo+ID4gPiA+ID4gICoJICAgICBsb2NhbCBw b3J0J3MgbGlzdCBvZiBFTXMuCj4gPiA+ID4gPiAgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHRo YXQgd2lsbCBvd24gdGhlIGV4Y2hhbmdlCj4gPiA+ID4gPiAgKiBAZnA6CSAgIFRoZSBGQyBmcmFt ZSB0aGF0IHRoZSBleGNoYW5nZSB3aWxsIGJlIGZvcgo+ID4gPiA+ID4gICoKPiA+ID4gPiA+ICAq IFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIGxpc3Qgb2YgZXhjaGFuZ2UgbWFuYWdlcihFTSkKPiA+ ID4gPiA+ICAqIGFuY2hvcnMgdG8gc2VsZWN0IGFuIEVNIGZvciBhIG5ldyBleGNoYW5nZSBhbGxv Y2F0aW9uLiBUaGUKPiA+ID4gPiA+ICAqIEVNIGlzIHNlbGVjdGVkIHdoZW4gYSBOVUxMIG1hdGNo IGZ1bmN0aW9uIHBvaW50ZXIgaXMgZW5jb3VudGVyZWQKPiA+ID4gPiA+ICAqIG9yIHdoZW4gYSBj YWxsIHRvIGEgbWF0Y2ggZnVuY3Rpb24gcmV0dXJucyB0cnVlLgo+ID4gPiA+ID4gICovCj4gPiA+ ID4gPiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmY19leGNoICpmY19leGNoX2FsbG9jKHN0cnVjdCBm Y19scG9ydCAqbHBvcnQsCj4gPiA+ID4gPiAJCQkJCSAgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQo+ ID4gPiA+ID4gewo+ID4gPiA+ID4gCXN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYTsKPiA+ ID4gPiA+Cj4gPiA+ID4gPiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbWEsICZscG9ydC0+ZW1hX2xp c3QsIGVtYV9saXN0KQo+ID4gPiA+ID4gCQlpZiAoIWVtYS0+bWF0Y2ggfHwgZW1hLT5tYXRjaChm cCkpCj4gPiA+ID4gPiAJCQlyZXR1cm4gZmNfZXhjaF9lbV9hbGxvYyhscG9ydCwgZW1hLT5tcCk7 Cj4gPiA+ID4gPiAJcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KioqKiogTmV2ZXIgbWF0Y2hlcyBzbwo+ID4gPiA+ID4gCXJldHVybnMgTlVMTAo+ID4gPiA+ID4g fQo+ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBSSERFQlVHOiBJbiBmY19leGNoX3NlcV9z ZW5kIHJldHVybmVkIE5VTEwgYmVjYXVzZSAhZXAgd2l0aCBlcCA9Cj4gPiA+ID4gPiAobnVsbCkK PiA+ID4gPiA+IFJIREVCVUc6IHJjIC0xIHdpdGggIXNlcSA9IChudWxsKSBhZnRlciBjYWxsaW5n IHR0LmV4Y2hfc2VxX3NlbmQKPiA+ID4gPiA+IHdpdGhpbgo+ID4gPiA+ID4gZmNfZmNwX2NtZF9z ZW5kCj4gPiA+ID4gPiBSSERFQlVHOiByYyBub24gemVybyBpbiA6dW5sb2NrIHdpdGhpbiBmY19m Y3BfY21kX3NlbmQgPSAtMQo+ID4gPiA+ID4gUkhERUJVRzogSW4gZmNfZmNwX3BrdF9zZW5kLCB3 ZSByZXR1cm5lZCBmcm9tICByYyA9Cj4gPiA+ID4gPiBscG9ydC0+dHQuZmNwX2NtZF9zZW5kCj4g PiA+ID4gPiB3aXRoIHJjID0gLTEKPiA+ID4gPiA+Cj4gPiA+ID4gPiBSSERFQlVHOiBXZSBoaXQg U0NTSV9NTFFVRVVFX0hPU1RfQlVTWSBpbiBmY19xdWV1ZWNvbW1hbmQgd2l0aCBydmFsCj4gPiA+ ID4gPiBpbgo+ID4gPiA+ID4gZmNfZmNwX3BrdF9zZW5kPS0xCj4gPiA+ID4gPgo+ID4gPiA+ID4g SSBhbSB0cnlpbmcgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHdoeSBhIGxhcmdlIG11bHRpLW5vZGUg c3lzdGVtIHNlZXMKPiA+ID4gPiA+IHRoaXMKPiA+ID4gPiA+IGlzc3VlIGV2ZW4gd2l0aCBOVU1B IGRpc2FibGVkLgo+ID4gPiA+ID4gSGFzIGFueWJvZHkgc2VlbiB0aGlzIG9yIGlzIGF3YXJlIG9m IHRoaXMgd2l0aCBjb25maWd1cmF0aW9ucyAodXNpbmcKPiA+ID4gPiA+IGZjX3F1ZXVlY29tbWFu ZCkKPiA+ID4gPiA+Cj4gPiA+ID4gPiBJIGFtIGNvbnRpbnVpbmcgdG8gYWRkIGRlYnVnIHRvIG5h cnJvdyB0aGlzIGRvd24uCj4gPiA+ID4gPgo+ID4gPiA+IFlvdSBtaWdodCBhY3R1YWxseSBiZSBo aXR0aW5nIGEgbGltaXRhdGlvbiBpbiB0aGUgZXhjaGFuZ2UgbWFuYWdlcgo+ID4gPiA+IGNvZGUu Cj4gPiA+ID4gVGhlIGxpYmZjIGV4Y2hhbmdlIG1hbmFnZXIgdHJpZXMgdG8gYmUgcmVhbGx5IGNs ZXZlciBhbmQgd2lsbCBhc3NpZ24gYQo+ID4gPiA+IHBlci1jcHUgZXhjaGFuZ2UgbWFuYWdlciAo cHJvYmFibHkgdG8gaW5jcmVhc2UgbG9jYWxpdHkpLiBIb3dldmVyLCB3ZQo+ID4gPiA+IG9ubHkg aGF2ZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIGV4Y2hhbmdlcywgc28gb24gbGFyZ2Ugc3lzdGVtcyB3 ZSBtaWdodAo+ID4gPiA+IGFjdHVhbGx5IHJ1biBpbnRvIGEgZXhjaGFuZ2Ugc3RhcnZhdGlvbiBw cm9ibGVtLCB3aGVyZSB3ZSBoYXZlIGluCj4gPiA+ID4gdGhlb3J5Cj4gPiA+ID4gZW5vdWdoIGZy ZWUgZXhjaGFuZ2VzLCBidXQgbm9uZSBmb3IgdGhlIHN1Ym1pdHRpbmcgY3B1Lgo+ID4gPiA+IAo+ ID4gPiA+IChQZXJzb25hbGx5LCB0aGUgZXhjaGFuZ2UgbWFuYWdlciBjb2RlIGlzIGluIHVyZ2Vu dCBuZWVkIG9mIHJld29ya2luZy4KPiA+ID4gPiBJdCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgdGhl IHNiaXRtYXAgY29kZSBmcm9tIE9tYXIpLgo+ID4gPiA+IAo+ID4gPiA+IERvIGNoZWNrIGhvdyBt YW55IGZyZWUgZXhjaGFuZ2VzIGFyZSBhY3R1YWxseSBwcmVzZW50IGZvciB0aGUgc3RhbGxpbmcK PiA+ID4gPiBDUFU7IGl0IG1pZ2h0IGJlIHRoYXQgeW91IHJ1biBpbnRvIGEgc3RhcnZhdGlvbiBp c3N1ZS4KPiA+ID4gPiAKPiA+ID4gPiBDaGVlcnMsCj4gPiA+ID4gCj4gPiA+ID4gSGFubmVzCj4g PiA+ID4gLS0KPiA+ID4gPiBEci4gSGFubmVzIFJlaW5lY2tlCQkgICAgICB6U2VyaWVzICYgU3Rv cmFnZQo+ID4gPiA+IGhhcmVAc3VzZS5kZQkJCSAgICAgICs0OSA5MTEgNzQwNTMgNjg4Cj4gPiA+ ID4gU1VTRSBMSU5VWCBQcm9kdWN0cyBHbWJILCBNYXhmZWxkc3RyLiA1LCA5MDQwOSBOw7xybmJl cmcKPiA+ID4gPiBHRjogSi4gSGF3biwgSi4gR3VpbGQsIEYuIEltZW5kw7ZyZmZlciwgSFJCIDE2 NzQ2IChBRyBOw7xybmJlcmcpCj4gPiA+ID4gCj4gPiA+IEhpIEhhbm5lcywKPiA+ID4gVGhhbmtz IGZvciByZXNwb25kaW5nCj4gPiA+IAo+ID4gPiBJIGFtIGFkZGluZyBhZGRpdGlvbmFsIGRlYnVn IGFzIEkgdHlwZSB0aGlzLgo+ID4gPiAKPiA+ID4gSSBhbSB1c2luZyBsYXRlc3QgbGludXgtbmV4 dCwgSSBhc3N1bWUgeW91ciBsYXRlc3QgRkNPRSBhcmUgbm90IGluIHRoZXJlCj4gPiA+IHlldC4K PiA+ID4gV2hhdCBpcyBwdXp6bGluZyBoZXJlIGlzIGEgaWRlbnRpY2FsIGtlcm5lbCB3aXRoIDEg bnVtYSBub2RlIGFuZCBvbmx5IDhHQgo+ID4gPiBtZW1vcnkgZG9lcyBub3Qgc2VlIHRoaXMuCj4g PiA+IFN1cmVseSBpZiBJIHdhcyBydW5uaW5nIG91dCBvZiBleGNoYW5nZXMgdGhhdCB3b3VsZCBz aG93IHVwIG9uIHRoZQo+ID4gPiBzbWFsbGVyCj4gPiA+IHN5c3RlbSBhcyB3ZWxsLgo+ID4gPiBJ IGFtIGFibGUgdG8gZ2V0IHRvIDE1MDAgSU9QUy9zZWMgd2l0aCB0aGUgc2FtZSBJL08gZXhlcmNp c2VyIG9uIHRoZQo+ID4gPiBzbWFsbGVyCj4gPiA+IHN5c3RlbSB3aXRoIFpFUk8gYmxrX3JlcXVl dWVfcmVxdWVzdCgpIGNhbGxzLgo+ID4gPiBBZ2Fpbiwgc2FtZSBrZXJuZWwsIHNhbWUgaXhnYmUg c2FtZSBGQ09FIHN3aXRjaCBldGMuCj4gPiA+IAo+ID4gPiBJIHRyYWNlZCBzcGVjaWZpY2FsbHkg dGhvc2UgaW5pdGlhbGx5IGJlY2F1c2Ugd2Ugc2F3IGl0IGluIHRoZSBibGt0cmFjZS4KPiA+ID4g Cj4gPiA+IEkgZG9udCB1bmRlcnN0YW5kIHRoZSBtYXRjaCBzdHVmZiBnb2luZyBvbiBpbiB0aGUg bGlzdCByZXZlcnNhbCBzdHVmZgo+ID4gPiBoZXJlCj4gPiA+IHZlcnkgd2VsbCwgc3RpbGwgdHJ5 aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUgZmxvdy4KPiA+ID4gdGhlIGJvb2wgbWF0Y2goKSBJ IGFsc28gY2Fubm90IGZpZ3VyZSBvdXQgZnJvbSB0aGUgY29kZS4KPiA+ID4gSXQgcnVucyB0aGUg ZmNfZXhjaF9lbV9hbGxvYygpIGlmIGV0aGVyIGJvb2wgKm1hdGNoIGlzIGZhbHNlIG9yCj4gPiA+ ICptYXRjaChmcCkKPiA+ID4gSSBjYW4ndCBmaW5kIHRoZSBhY3R1YWwgY29kZSBmb3IgdGhlIG1h dGNoLCB3aWxsIGhhdmUgdG8gZ2V0IGEgdm1jb3JlIHRvCj4gPiA+IGZpbmQKPiA+ID4gaXQuCj4g PiA+IAo+ID4gPiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZmNfZXhjaCAqZmNfZXhjaF9hbGxvYyhz dHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAo+ID4gPiAgCQkJCQkgICAgc3RydWN0IGZjX2ZyYW1lICpm cCkKPiA+ID4gIHsKPiA+ID4gCXN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYTsKPiA+ID4g Cj4gPiA+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbWEsICZscG9ydC0+ZW1hX2xpc3QsIGVtYV9s aXN0KQo+ID4gPiAgCQlpZiAoIWVtYS0+bWF0Y2ggfHwgZW1hLT5tYXRjaChmcCkpCj4gPiA+ICAJ CQlyZXR1cm4gZmNfZXhjaF9lbV9hbGxvYyhscG9ydCwgZW1hLT5tcCk7Cj4gPiA+ICAJcmV0dXJu IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiogTmV2ZXIgbWF0Y2hl cyBzbwo+ID4gPiAJcmV0dXJucyBOVUxMCj4gPiA+ICB9Cj4gPiA+IAo+ID4gPiBXaWxsIHJlcGxh eSBhZnRlciBzb21lIGZpbmVyIGRlYnVnIGhhcyBiZWVuIGFkZGVkCj4gPiA+IAo+ID4gPiBBZ2Fp biBzcGVjaWZpYyB0byBmY19xdWV1ZWNvbW1hbmQgYW5kIFMvVyBGQ09FLCBub3QgYW4gaXNzdWUg d2l0aCB0aGUgRi9DCj4gPiA+IHF1ZXVlY29tbWFuZCBpbiB0aGUgSEJBIHRlbXBsYXRlcyBmcm8g ZXhhbXBsZSBscGZjIG9yIHFsYTJ4eHggYW5kIGFsb3MKPiA+ID4gbm90Cj4gPiA+IGFwcGxpY2Fi bGUgdG8gZnVsbCBvZmZsb2FkIEZDT0UgbGlrZSB0aGUgRW11bGV4IGNhcmRzLgo+ID4gPiBUaGFu a3MKPiA+ID4gTGF1cmVuY2UKPiA+ID4gLS0KPiA+ID4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlz IGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXNjc2kiIGluCj4gPiA+IHRo ZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCj4gPiA+IE1v cmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWlu Zm8uaHRtbAo+ID4gPiAKPiA+IEhpIEhhbm5lcwo+ID4gCj4gPiBSZXBseWluZyB0byBteSBvd24g cHJpb3IgbWVzc2FnZS4KPiA+IEFkZGVkIHRoZSBhZGRpdGlvbmFsIGRlYnVnCj4gPiAKPiA+IFJI REVCVUc6IGluIGZjX2V4Y2hfZW1fYWxsb2M6IHJldHVybmluZyBOVUxMIGluIGVycjogcGF0aCBq dW1wZWQgZnJvbQo+ID4gYWxsb2NhdGUgbmV3IGV4Y2ggZnJvbSBwb29sIGJlY2F1c2UgaW5kZXgg PT0gcG9vbC0+bmV4dF9pbmRleAo+ID4gUkhERUJVRzogSW4gZmNfZXhjaF9zZXFfc2VuZCByZXR1 cm5lZCBOVUxMIGJlY2F1c2UgIWVwIHdpdGggZXAgPQo+ID4gKG51bGwpCj4gPiBSSERFQlVHOiBy YyAtMSB3aXRoICFzZXEgPSAgICAgICAgICAgKG51bGwpIGFmdGVyIGNhbGxpbmcgdHQuZXhjaF9z ZXFfc2VuZAo+ID4gd2l0aGluIGZjX2ZjcF9jbWRfc2VuZAo+ID4gUkhERUJVRzogcmMgbm9uIHpl cm8gaW4gOnVubG9jayB3aXRoaW4gZmNfZmNwX2NtZF9zZW5kID0gLTEKPiA+IFJIREVCVUc6IElu IGZjX2ZjcF9wa3Rfc2VuZCwgd2UgcmV0dXJuZWQgZnJvbSAgcmMgPSBscG9ydC0+dHQuZmNwX2Nt ZF9zZW5kCj4gPiB3aXRoIHJjID0gLTEKPiA+IFJIREVCVUc6IFdlIGhpdCBTQ1NJX01MUVVFVUVf SE9TVF9CVVNZIGluIGZjX3F1ZXVlY29tbWFuZCB3aXRoIHJ2YWwgaW4KPiA+IGZjX2ZjcF9wa3Rf c2VuZD0tMQo+ID4gCj4gPiBTbyB3ZSBhcmUgYWN0dWFsbHkgZmFpbGluZyBpbiBmY19leGNoX2Vt X2FsbG9jIHdpdGggaW5kZXggPT0KPiA+IHBvb2wtPm5leHRfaW5kZXgsIG5vdCBpbiB0aGUgbGlz dCB0cmF2ZXJzYWwgYXMgSSBvcmlnaW5hbGx5IHRob3VnaHQuCj4gPiAKPiA+IFRoaXMgc2VlbXMg dG8gdGhlbiBtYXRjaCB3aGF0IHlvdXIgc2FpZCwgd2UgYXJlIHJ1bm5pbmcgb3V0IG9mIGV4Y2hh bmdlcy4KPiA+IAo+ID4gRHVyaW5nIG15IHRlc3RpbmcsIGlmIEkgc3RhcnQgbXVsdGlwbGUgZGQn cyBhbmQgcmFtcCB0aGVtIHVwLCBmb3IgZXhhbXBsZQo+ID4gMTAwCj4gPiBwYXJhbGxlbCBkZCdz IHdpdGggNjQgQ1BVUyBJIHNlZSB0aGlzLgo+ID4gT24gdGhlIDQgQ1BVIHN5c3RlbSBpdCBkb2Vz IG5vdCBoYXBwZW4uCj4gPiAKPiA+IC8qKgo+ID4gICogZmNfZXhjaF9lbV9hbGxvYygpIC0gQWxs b2NhdGUgYW4gZXhjaGFuZ2UgZnJvbSBhIHNwZWNpZmllZCBFTS4KPiA+ICAqIEBscG9ydDogVGhl IGxvY2FsIHBvcnQgdGhhdCB0aGUgZXhjaGFuZ2UgaXMgZm9yCj4gPiAgKiBAbXA6ICAgIFRoZSBl eGNoYW5nZSBtYW5hZ2VyIHRoYXQgd2lsbCBhbGxvY2F0ZSB0aGUgZXhjaGFuZ2UKPiA+ICAqCj4g PiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIGZjX2V4Y2ggd2l0aCBleGNoIGxvY2sg aGVsZC4KPiA+ICAqLwo+ID4gc3RhdGljIHN0cnVjdCBmY19leGNoICpmY19leGNoX2VtX2FsbG9j KHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGZjX2V4Y2hfbWdyICptcCkKPiA+IHsKPiA+ICAgICAgICAgc3Ry dWN0IGZjX2V4Y2ggKmVwOwo+ID4gICAgICAgICB1bnNpZ25lZCBpbnQgY3B1Owo+ID4gICAgICAg ICB1MTYgaW5kZXg7Cj4gPiAgICAgICAgIHN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2w7Cj4gPiAK PiA+ICAgICAgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBleGNoYW5nZSAqLwo+ID4gICAgICAg ICBlcCA9IG1lbXBvb2xfYWxsb2MobXAtPmVwX3Bvb2wsIEdGUF9BVE9NSUMpOwo+ID4gICAgICAg ICBpZiAoIWVwKSB7Cj4gPiAgICAgICAgICAgICAgICAgYXRvbWljX2luYygmbXAtPnN0YXRzLm5v X2ZyZWVfZXhjaCk7Cj4gPiAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiAgICAgICAgIH0K PiA+ICAgICAgICAgbWVtc2V0KGVwLCAwLCBzaXplb2YoKmVwKSk7Cj4gPiAKPiA+ICAgICAgICAg Y3B1ID0gZ2V0X2NwdSgpOwo+ID4gICAgICAgICBwb29sID0gcGVyX2NwdV9wdHIobXAtPnBvb2ws IGNwdSk7Cj4gPiAgICAgICAgIHNwaW5fbG9ja19iaCgmcG9vbC0+bG9jayk7Cj4gPiAgICAgICAg IHB1dF9jcHUoKTsKPiA+IAo+ID4gICAgICAgICAvKiBwZWVrIGNhY2hlIG9mIGZyZWUgc2xvdCAq Lwo+ID4gICAgICAgICBpZiAocG9vbC0+bGVmdCAhPSBGQ19YSURfVU5LTk9XTikgewo+ID4gICAg ICAgICAgICAgICAgIGluZGV4ID0gcG9vbC0+bGVmdDsKPiA+ICAgICAgICAgICAgICAgICBwb29s LT5sZWZ0ID0gRkNfWElEX1VOS05PV047Cj4gPiAgICAgICAgICAgICAgICAgZ290byBoaXQ7Cj4g PiAgICAgICAgIH0KPiA+ICAgICAgICAgaWYgKHBvb2wtPnJpZ2h0ICE9IEZDX1hJRF9VTktOT1dO KSB7Cj4gPiAgICAgICAgICAgICAgICAgaW5kZXggPSBwb29sLT5yaWdodDsKPiA+ICAgICAgICAg ICAgICAgICBwb29sLT5yaWdodCA9IEZDX1hJRF9VTktOT1dOOwo+ID4gICAgICAgICAgICAgICAg IGdvdG8gaGl0Owo+ID4gICAgICAgICB9Cj4gPiAKPiA+ICAgICAgICAgaW5kZXggPSBwb29sLT5u ZXh0X2luZGV4Owo+ID4gICAgICAgICAvKiBhbGxvY2F0ZSBuZXcgZXhjaCBmcm9tIHBvb2wgKi8K PiA+ICAgICAgICAgd2hpbGUgKGZjX2V4Y2hfcHRyX2dldChwb29sLCBpbmRleCkpIHsKPiA+ICAg ICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ID09IG1wLT5wb29sX21heF9pbmRleCA/IDAgOiBp bmRleCArIDE7Cj4gPiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IHBvb2wtPm5leHRfaW5k ZXgpCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKPiA+IAo+ID4gSSB3aWxs IGFwcGx5IHlvdXIgbGF0ZXN0IEZDT0UgcGF0Y2hlcywgY2FuIHlvdSBwcm92aWRlIGEgbGluayB0 byB5b3VyIHRyZWUuCj4gPiAKPiA+IFRoYW5rcwo+ID4gTGF1cmVuY2UKPiA+IAo+IFJlcGx5aW5n IHRvIG15IG93biBtZXNzYWdlLgo+IAo+IFdlIGZhaWwgd2hlbiBpbmRleD0wIGFuZCBwb29sLT5u ZXh0X2luZGV4PTAKPiAKPiBSSERFQlVHOiBpbiBmY19leGNoX2VtX2FsbG9jOiBpbmRleD0wIHBv b2wtPm5leHRfaW5kZXgpID0gMAo+IFJIREVCVUc6IGluIGZjX2V4Y2hfZW1fYWxsb2M6IHJldHVy bmluZyBOVUxMIGluIGVycjogcGF0aCBqdW1wZWQgZnJvbQo+IGFsbG9jYXRlIG5ldyBleGNoIGZy b20gcG9vbCBiZWNhdXNlIGluZGV4ID09IHBvb2wtPm5leHRfaW5kZXgKPiBSSERFQlVHOiBJbiBm Y19leGNoX3NlcV9zZW5kIHJldHVybmVkIE5VTEwgYmVjYXVzZSAhZXAgd2l0aCBlcCA9Cj4gKG51 bGwpCj4gUkhERUJVRzogcmMgLTEgd2l0aCAhc2VxID0gICAgICAgICAgIChudWxsKSBhZnRlciBj YWxsaW5nIHR0LmV4Y2hfc2VxX3NlbmQKPiB3aXRoaW4gZmNfZmNwX2NtZF9zZW5kCj4gUkhERUJV RzogcmMgbm9uIHplcm8gaW4gOnVubG9jayB3aXRoaW4gZmNfZmNwX2NtZF9zZW5kID0gLTEKPiBS SERFQlVHOiBJbiBmY19mY3BfcGt0X3NlbmQsIHdlIHJldHVybmVkIGZyb20gIHJjID0gbHBvcnQt PnR0LmZjcF9jbWRfc2VuZAo+IHdpdGggcmMgPSAtMQo+IAo+IFNvbWUgYWRkaXRpb25hbCBpbmZv cm1hdGlvbi4KPiAKPiBEb2VzIG5vdCBoYXBwZW4gd2l0aCBGL0MgYWRhcHRlcnMgd2l0aCBzYW1l IGxvYWQgdG8gc2FtZSBhcnJheSwganVzdCB2aWEgbHBmYwo+IGFuZCBxbGEyeHh4Lgo+IEhvd2V2 ZXIgd2Uga25vdyB0aGF0IHRob3NlIGhhdmUgdGhlaXIgb3duIHF1ZXVlY29tbWFuZCBpbiB0aGVp ciBzY3NpX3RlbXBsYXRlCj4gCj4gSSBjYXBwZWQgdGhlIG51bWJlciBvZiBDUFVTIHRvIDQgYW5k IHJ1bm5pbmcgZW5vdWdoIHBhcmFsbGVsIGRkJ3MgSSBjYW4gc3RpbGwKPiB0cmlnZ2VyIHRoaXMu Cj4gCj4gW3Jvb3RAZmNvZS10ZXN0LXJoZWw2IH5dIyBudW1hY3RsIC0taGFyZHdhcmUKPiBhdmFp bGFibGU6IDEgbm9kZXMgKDApCj4gbm9kZSAwIGNwdXM6IDAgMSAyIDMKPiBub2RlIDAgc2l6ZTog MTQ3NDQ1IE1CCj4gbm9kZSAwIGZyZWU6IDE0MzY3NiBNQgo+IG5vZGUgZGlzdGFuY2VzOgo+IG5v ZGUgICAwCj4gICAwOiAgMTAKPiAgICAgCj4gSXRzIHN0aWxsIGEgcHV6emxlIHdoeSB0aGUgc21h bGxlciBzeXN0ZW0gaW4gbXkgbGFiIG5ldmVyIHNlZXMgdGhpcyB3aXRoIHNhbWUKPiBpZGVudGlj YWwgY29uZmlndXJhdGlvbi4KPiAKPiBSdW5uaW5nCj4gZm9yIGkgaW4gYHNlcSAxIDMwYDsgZG8g ZGQgaWY9L2Rldi9zZHQgb2Y9L2Rldi9udWxsIGJzPTUxMmsgaWZsYWc9ZGlyZWN0Cj4gY291bnQ9 MTAgJiBkb25lICAgKioqIERvZXMgbm90IHRyaWdnZXIKPiAKPiBJbmNyZW1lbnQgdG8gNDAKPiBm b3IgaSBpbiBgc2VxIDEgNDBgOyBkbyBkZCBpZj0vZGV2L3NkdCBvZj0vZGV2L251bGwgYnM9NTEy ayBpZmxhZz1kaXJlY3QKPiBjb3VudD0xMCAmIGRvbmUgICAqKiogVHJpZ2dlcnMgdGhlIGNvbmRp dGlvbgo+IAo+IEkgc3VzcGVjdCB3ZSBoYXZlIG1hbnkgY29uZmlndXJhdGlvbnMgb3V0IHRoZXJl IHJ1bm5pbmcgdGhlIGl4Z2JlIGFuZAo+IHNvZnR3YXJlIGRlZmluZSBGQ09FIHN0YWNrcyB0aGF0 IGFyZSBub3QgZXZlbiBhd2FyZSB0aGV5IGFyZSBzZWVpbmcgdGhpcwo+IGlzc3VlLgo+IAo+IC0t Cj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2Ny aWJlIGxpbnV4LXNjc2kiIGluCj4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2 Z2VyLmtlcm5lbC5vcmcKPiBNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJu ZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwKPiAKUmVwbHlpbmcgdG8gbXkgb3duIG1lc3NhZ2UK Ckp1c3QgYW4gdXBkYXRlIGhlcmUuCkkgaGF2ZSBiZWVuIHdvcmtpbmcgd2l0aCBDdXJ0aXMgYW5k IEV3YW4sIGFuZCB3ZSBoYXZlIGJlZW4gZnVydGhlciBkZWJ1Z2dpbmcgdGhpcyBJbnRlbCBFRSBp c3N1ZS4KV2hhdCBpcyBhcHBhcmVudCBoZXJlIGlzIHRoYXQgd2UgYXJlIGluZGVlZCBzdWZmZXJp bmcgZnJvbSBhIGhpZ2ggQ1BVIGNvdW50IGlzc3VlIGhlcmUgdGhhdCBpcyBleGhhdXN0aW5nIHJl c291cmNlcy4KSW4gbXkgb3BpbmlvbiwgdGhpcyBjYXJkIHdhcyBuZXZlciByZWFsbHkgdGVzdGVk IG9uIHN5c3RlbXMgd2l0aCBoaWdoIG51bWJlcnMgb2YgQ1BVUyB0byBzZWUgaG93IHRoZSBleGNo YW5nZSByZXNvdXJjZXMgYXJlIG1hcHBlZC4KQnkgZGVjcmVhc2luZyB0aGUgQ1BVIGNvdW50IHdl IGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UgYXMgd2Ugc2VlIGxlc3Mgb2YgdGhlIE1MUVVFVUVfSE9T VF9CVVNZIHJldHVybmVkLgoKVGhpcyBoYXMgdG8gYmUgYWZmZWN0aW5nIGFueSBpbnN0YWxsYXRp b25zIHRoYXQgaGF2ZSBoaWdoIENQVSBjb3VudCBzeXN0ZW1zIHVzaW5nIHRoaXMgSW50ZWwgRUUg Y2FyZC4KTGlrZWx5LCBhcyBhbHJlYWR5IHNhaWQsIHRoYXkgYXJlIHVuYXdhcmUgb2YgdGhpcy4K CkZvciBjb21wYXJpc29uIEkgdGVzdGVkIGEgUWxvZ2ljIEJDTTU3ODEwIGNhcmQgdGhhdCBpcyBw YXJ0aWFsIG9mZmxvYWQgYW5kIEkgc2VlIHplcm8gYmxrX3JlcXVldWVfcmVxdWVzdCgpIGNhbGxz IGZvciB0aGUgaWRlbnRpY2FsIHRlc3QuCgpRbG9naWMgQkNNNTc4MTAKRXRoZXJuZXQgY29udHJv bGxlcjogQnJvYWRjb20gQ29ycG9yYXRpb24gTmV0WHRyZW1lIElJIEJDTTU3ODEwIDEwIEdpZ2Fi aXQgRXRoZXJuZXQgKHJldiAxMCkKClRoZSBCQ001NzgxMCBpcyBhIHBhcnRpYWwgb2ZmbG9hZCBp biB0aGF0IGl0IG5lZWRzIHNvbWUgb2YgdGhlIHNvZnR3YXJlIGZjb2Ugc3VwcG9ydCBidXQgbWFu YWdlcyB0aGUgcmVzdCBvbiB0aGUgY2FyZC4KCk5vdGUgd2UgZG8gbm90IHVzZSB0aGUgRENCIHNl cnZpY2UgcHJvdmlkZWQgaW4gc29mdHdhcmUsIHNvIHdlIGRpc2FibGUgaXQuCiMgSW5kaWNhdGUg aWYgRENCIHNlcnZpY2UgaXMgcmVxdWlyZWQgYXQgdGhlIEV0aGVybmV0IHBvcnQKIyBOb3JtYWxs eSBzZXQgdG8gInllcyIKRENCX1JFUVVJUkVEPSJubyIKCkFnYWluIFpFUk8gYmxrX3JlcXVldWVf cmVxdWVzdCgpIGNhbGxzCgpXaGF0IHdhcyBhcHBhcmVudCBpbiB0aGUgREVCVUcgd2FzIHRoZSB4 aWRfbWluIGFuZCB4aWRfbWF4IHN0YXJ0IGhpZ2hlci4KCldlIHN0YXJ0IHdpdGggYSBtaW4gb2Yg NDA5NiBhbmQgc2VlIGEgbWF4IG9mIDEyMjg2CgpSSERFQlVHOiBJbiBmY19leGNoX21ncl9hbGxv Yywgd2Ugd2VyZSBjYWxsZWQgd2l0aCBtaW5feGlkPTQwOTYgYW5kIG1heF94aWQ9MTIyODYKUkhE RUJVRzogSW4gZmNfZXhjaF9tZ3JfYWxsb2MsIHdlIGFyZSByZXR1cm5pbmcgbXAgd2l0aCBtaW5f eGlkPTQwOTYgYW5kIG1heF94aWQ9MTIyODYKUkhERUJVRzogSW4gZmNfZXhjaF9tZ3JfYWxsb2Ms IHdlIHdlcmUgY2FsbGVkIHdpdGggbWluX3hpZD00MDk2IGFuZCBtYXhfeGlkPTEyMjg2ClJIREVC VUc6IEluIGZjX2V4Y2hfbWdyX2FsbG9jLCB3ZSBhcmUgcmV0dXJuaW5nIG1wIHdpdGggbWluX3hp ZD00MDk2IGFuZCBtYXhfeGlkPTEyMjg2CgpXaGVyZWFzIHRoZSBJbnRlbCBFRSBjYXJkIHdpdGgg YWxsIEZDT0UgaW4gc29mdHdhcmUgc2VlczoKClJIREVCVUc6IEluIGZjX2V4Y2hfbWdyX2FsbG9j LCB3ZSB3ZXJlIGNhbGxlZCB3aXRoIG1pbl94aWQ9MCBhbmQgbWF4X3hpZD01MTEKUkhERUJVRzog SW4gZmNfZXhjaF9tZ3JfYWxsb2MsIHdlIHdlcmUgY2FsbGVkIHdpdGggbWluX3hpZD01MTIgYW5k IG1heF94aWQ9NDA5NQpSSERFQlVHOiBJbiBmY19leGNoX21ncl9hbGxvYywgd2Ugd2VyZSBjYWxs ZWQgd2l0aCBtaW5feGlkPTAgYW5kIG1heF94aWQ9NTExClJIREVCVUc6IEluIGZjX2V4Y2hfbWdy X2FsbG9jLCB3ZSB3ZXJlIGNhbGxlZCB3aXRoIG1pbl94aWQ9NTEyIGFuZCBtYXhfeGlkPTQwOTUK CldlIGFyZSBzdGlsbCB0cmFjaW5nIHRoaXMgYW5kIEkgd2lsbCByZXBvcnQgYmFjayB3aGVuIEkg aGF2ZSBhbiB1cGRhdGUuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmZjb2UtZGV2ZWwgbWFpbGluZyBsaXN0CmZjb2UtZGV2ZWxAb3Blbi1mY29lLm9yZwpo dHRwOi8vbGlzdHMub3Blbi1mY29lLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Zjb2UtZGV2ZWwK