From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4A4C8A04BC; Fri, 9 Oct 2020 11:51:57 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 164911C125; Fri, 9 Oct 2020 11:51:56 +0200 (CEST) Received: from m13134.mail.163.com (m13134.mail.163.com [220.181.13.134]) by dpdk.org (Postfix) with ESMTP id A9C611BFD6 for ; Fri, 9 Oct 2020 11:51:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:MIME-Version:Message-ID; bh=LW5mV 0lQLYu2WsgCuTy7TrxKllrgsO8+Tawpj/6XedI=; b=Uz71x6dSfbyQAchw/HfPg S97IHli971Y9W5QrP8aom9s4VA4k7Im9ZSpRSRpr+eVlW9loTOMGwfIRXQNTXxDm f4SGx7r/F5v47mQ4l1/kRF7h65B8jvkuikTs8F7L0ySx+wdg3oUyJOevkD3rMrXp 5ei6OmpcI1C7lmdOJZatF0= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr134 (Coremail) ; Fri, 9 Oct 2020 17:51:23 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Fri, 9 Oct 2020 17:51:23 +0800 (CST) From: yang_y_yi To: "Olivier Matz" Cc: dev@dpdk.org, jiayu.hu@intel.com, thomas@monjalon.net, yangyi01@inspur.com X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.10 build 20190724(ac680a23) Copyright (c) 2002-2020 www.mailtech.cn 163com In-Reply-To: <20201007094821.GP21395@platinum> References: <20200730120900.108232-3-yang_y_yi@163.com> <20200731151543.GH5869@platinum> <2a50e80c.44f.173ac4c6d20.Coremail.yang_y_yi@163.com> <20200802202907.GJ5869@platinum> <3cf82e61.145c.173b1ed87ce.Coremail.yang_y_yi@163.com> <20200803081139.GK5869@platinum> <7584d005.5305.173b3b3389f.Coremail.yang_y_yi@163.com> <20200803123425.GM5869@platinum> <7e80eaff.148a.173b71824b0.Coremail.yang_y_yi@163.com> <76308d9c.2b0b.174ce214814.Coremail.yang_y_yi@163.com> <20201007094821.GP21395@platinum> X-CM-CTRLDATA: +Gxt5WZvb3Rlcl9odG09MjY2MTc6NTY= MIME-Version: 1.0 Message-ID: <95e7dd5.68f2.1750cc5aee0.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: hsGowACnW8CbMoBfzZWDAA--.9508W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiFhu4i144NiIhkwACs8 X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH V1 2/3] mbuf: change free_cb interface to adapt to GSO case X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" T2xpdmllciwgdGhhbmsgeW91IHNvIG11Y2ggZm9yIHlvdXIgcmVwbHksIHlvdXIgcGF0Y2ggcG9z dCBmb3Igdmhvc3QgaGVscCBtZSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybiBiZXR0ZXIsIEkgdG90 YWxseSBhZ3JlZS4gRm9yIEdTTyBjYXNlLCBsZXQgbWUgc2hvdyB5b3UgYSBzaW1wbGUgY29kZSB0 byBleHBsYWluIG15IGlzc3VlLgoKCgoKCnN0cnVjdCBydGVfbWJ1ZiAqcGt0ID0gcnRlX3BrdG1i dWZfYWxsb2MobXApOwp2aXJ0aW9fZGV2X2V4dGJ1Zl9hbGxvYyhwa3QsIGRhdGFfbGVuKQpzdHJ1 Y3QgcnRlX21idWYgKiBwa3Rfc2VnMSA9IHJ0ZV9wa3RtYnVmX2FsbG9jKGluZGlyZWN0X3Bvb2wp OwoKCnJ0ZV9wa3RtYnVmX2F0dGFjaChwa3Rfc2VnMSwgcGt0KTsKcnRlX21idWZfZXh0X3JlZmNu dF91cGRhdGUocGt0LCAtMSk7CgpzdHJ1Y3QgcnRlX21idWYgKiBwa3Rfc2VnMiA9IHJ0ZV9wa3Rt YnVmX2FsbG9jKGluZGlyZWN0X3Bvb2wpOwpydGVfcGt0bWJ1Zl9hdHRhY2gocGt0X3NlZzIsIHBr dCk7CnJ0ZV9tYnVmX2V4dF9yZWZjbnRfdXBkYXRlKHBrdCwgLTEpOwpzdHJ1Y3QgcnRlX21idWYg KnBrdF9zZWdzWzJdID0ge3BrdF9zZWcxLCBwa3Rfc2VnMn07CgpydGVfZXRoX3R4X2J1cnN0KGRl di0+cG9ydF9pZCwgcWlkLCBwa3Rfc2VncywgMik7CgoKSXMgaXQgYSBzaW1wbGUgdGVzdCB5b3Ug ZXhwZWN0PyBUaGUgaXNzdWUgaGVyZSBpcyBub2JvZHkgZXhwbGljaXRseSBjYWxscyBydGVfcGt0 bWJ1Zl9mcmVlKHBrdCksIHJ0ZV9wa3RtYnVmX2ZyZWUocGt0X3NlZ1gpIGluIFBNRCBkcml2ZXIg d29uJ3QgZnJlZSAicGt0IiwgSXMgaXQgY2xlYXIgdG8geW91IG5vdz8KCgoKCgoKCgoKCgoKQXQg MjAyMC0xMC0wNyAxNzo0ODoyMSwgIk9saXZpZXIgTWF0eiIgPG9saXZpZXIubWF0ekA2d2luZC5j b20+IHdyb3RlOgo+SGksCj4KPk9uIFN1biwgU2VwIDI3LCAyMDIwIGF0IDAxOjU1OjIxUE0gKzA4 MDAsIHlhbmdfeV95aSB3cm90ZToKPj4gUGVyIEdTTyByZXF1aXJlbWVudCwgdGhpcyBpcyBhIG11 c3QtaGF2ZSBjaGFuZ2UsIEppYXl1LCBjYW4geW91IGhlbHAgcmV2aWV3Cj4+IHRoaXMgc2VyaWVz Pwo+Cj5JIGNhbid0IGFjayB0aGlzIHBhdGNoIHVudGlsIEkgaGF2ZSBhIHNpbXBsZSBhbmQgY2xl YXIgdGVzdCBjYXNlIChvbmx5Cj53aXRoIG1idWYgZnVuY3Rpb25zLCB3aXRob3V0IEdTTyBvciB2 aG9zdCkgc2hvd2luZyB0aGUgaXNzdWUgd2UgaGF2ZQo+dG9kYXkgd2l0aCBjdXJyZW50Lgo+Cj4+ IE9saXZpZXIsIGlmIHlvdSB1c2VkIHRoZSBvbGQgaW50ZXJmYWNlLCBtYXliZSB5b3UgbmVlZCB0 byBjaGFuZ2UgeW91ciBjb2RlIHRvCj4+IGFkYXB0IHRoaXMsIEkgZG9uJ3QgdGhpbmsgd2UgY2Fu IGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSBHU08gY2FzZS4KPgo+U29ycnksIEkgZG9uJ3Qg Z2V0IHlvdXIgcG9pbnQuIFdoYXQgZG8gSSBuZWVkIHRvIGNoYW5nZSBpbiB3aGljaCBjb2RlPwo+ Cj4oc29tZSBtb3JlIGNvbW1lbnRzIGJlbG93KQo+Cj4+IEF0IDIwMjAtMDgtMDQgMDk6MzE6MTks ICJ5YW5nX3lfeWkiIDx5YW5nX3lfeWlAMTYzLmNvbT4gd3JvdGU6Cj4+IAo+PiBBdCAyMDIwLTA4 LTAzIDIwOjM0OjI1LCAiT2xpdmllciBNYXR6IiA8b2xpdmllci5tYXR6QDZ3aW5kLmNvbT4gd3Jv dGU6Cj4+ID5PbiBNb24sIEF1ZyAwMywgMjAyMCBhdCAwNTo0MjoxM1BNICswODAwLCB5YW5nX3lf eWkgd3JvdGU6Cj4+ID4+IEF0IDIwMjAtMDgtMDMgMTY6MTE6MzksICJPbGl2aWVyIE1hdHoiIDxv bGl2aWVyLm1hdHpANndpbmQuY29tPiB3cm90ZToKPj4gPj4gPk9uIE1vbiwgQXVnIDAzLCAyMDIw IGF0IDA5OjI2OjQwQU0gKzA4MDAsIHlhbmdfeV95aSB3cm90ZToKPj4gPj4gPj4gQXQgMjAyMC0w OC0wMyAwNDoyOTowNywgIk9saXZpZXIgTWF0eiIgPG9saXZpZXIubWF0ekA2d2luZC5jb20+IHdy b3RlOgo+PiA+PiA+PiA+SGksCj4+ID4+ID4+ID4KPj4gPj4gPj4gPk9uIFN1biwgQXVnIDAyLCAy MDIwIGF0IDA3OjEyOjM2QU0gKzA4MDAsIHlhbmdfeV95aSB3cm90ZToKPj4gPj4gPj4gPj4gCj4+ ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBBdCAyMDIwLTA3LTMxIDIzOjE1OjQzLCAiT2xpdmllciBN YXR6IiA8b2xpdmllci5tYXR6QDZ3aW5kLmNvbT4gd3JvdGU6Cj4+ID4+ID4+ID4+ID5IaSwKPj4g Pj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+T24gVGh1LCBKdWwgMzAsIDIwMjAgYXQgMDg6MDg6NTlQ TSArMDgwMCwgeWFuZ195X3lpQDE2My5jb20gd3JvdGU6Cj4+ID4+ID4+ID4+ID4+IEZyb206IFlp IFlhbmcgPHlhbmd5aTAxQGluc3B1ci5jb20+Cj4+ID4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiA+ PiBJbiBHU08gY2FzZSwgc2VnbWVudGVkIG1idWZzIGFyZSBhdHRhY2hlZCB0byBvcmlnaW5hbAo+ PiA+PiA+PiA+PiA+PiBtYnVmIHdoaWNoIGNhbid0IGJlIGZyZWVkIHdoZW4gaXQgaXMgZXh0ZXJu YWwuIFRoZSBpc3N1ZQo+PiA+PiA+PiA+PiA+PiBpcyBmcmVlX2NiIGRvZXNuJ3Qga25vdyBvcmln aW5hbCBtYnVmIGFuZCBkb2Vzbid0IGZyZWUKPj4gPj4gPj4gPj4gPj4gaXQgd2hlbiByZWZjbnQg b2Ygc2hpbmZvIGlzIDAuCj4+ID4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiA+PiBPcmlnaW5hbCBt YnVmIGNhbiBiZSBmcmVlZCBieSBydGVfcGt0bWJ1Zl9mcmVlIHNlZ21lbnRlZAo+PiA+PiA+PiA+ PiA+PiBtYnVmcyBvciBieSBydGVfcGt0bWJ1Zl9mcmVlIG9yaWdpbmFsIG1idWYuIFR3byBraW5k IG9mCj4+ID4+ID4+ID4+ID4+IGNhc2VzIHNob3VsZCBoYXZlIGRpZmZlcmVudCBiZWhhdmlvcnMu IGZyZWVfY2Igd29uJ3QKPj4gPj4gPj4gPj4gPj4gZXhwbGljaXRseSBjYWxsIHJ0ZV9wa3RtYnVm X2ZyZWUgdG8gZnJlZSBvcmlnaW5hbCBtYnVmCj4+ID4+ID4+ID4+ID4+IGlmIGl0IGlzIGZyZWVk IGJ5IHJ0ZV9wa3RtYnVmX2ZyZWUgb3JpZ2luYWwgbWJ1ZiwgYnV0IGl0Cj4+ID4+ID4+ID4+ID4+ IGhhcyB0byBjYWxsIHJ0ZV9wa3RtYnVmX2ZyZWUgdG8gZnJlZSBvcmlnaW5hbCBtYnVmIGlmIGl0 Cj4+ID4+ID4+ID4+ID4+IGlzIGZyZWVkIGJ5IHJ0ZV9wa3RtYnVmX2ZyZWUgc2VnbWVudGVkIG1i dWZzLgo+PiA+PiA+PiA+PiA+PiAKPj4gPj4gPj4gPj4gPj4gSW4gb3JkZXIgdG8gZml4IHRoaXMg aXNzdWUsIGZyZWVfY2IgaW50ZXJmYWNlIGhhcyB0byBiZWVuCj4+ID4+ID4+ID4+ID4+IGNoYW5n ZWQsIF9fcnRlX3BrdG1idWZfZnJlZV9leHRidWYgbXVzdCBkZWxpdmVyIGNhbGxlZAo+PiA+PiA+ PiA+PiA+PiBtYnVmIHBvaW50ZXIgdG8gZnJlZV9jYiwgYXJndW1lbnQgb3BhcXVlIGNhbiBiZSBk ZWZpbmVkCj4+ID4+ID4+ID4+ID4+IGFzIGEgY3VzdG9tIHN0cnVjdCBieSB1c2VyLCBpdCBjYW4g aW5jbHVkZXMgb3JpZ2luYWwgbWJ1Zgo+PiA+PiA+PiA+PiA+PiBwb2ludGVyLCB1c2VyLWRlZmlu ZWQgZnJlZV9jYiBjYW4gY29tcGFyZSBjYWxsZXIgbWJ1ZiB3aXRoCj4+ID4+ID4+ID4+ID4+IG1i dWYgaW4gb3BhcXVlIHN0cnVjdCwgZnJlZV9jYiBzaG91bGQgZnJlZSBvcmlnaW5hbCBtYnVmCj4+ ID4+ID4+ID4+ID4+IGlmIHRoZXkgYXJlIG5vdCBzYW1lLCB0aGlzIGNvcnJlc3BvbmRzIHRvIHJ0 ZV9wa3RtYnVmX2ZyZWUKPj4gPj4gPj4gPj4gPj4gc2VnbWVudGVkIG1idWZzIGNhc2UsIG90aGVy d2lzZSwgZnJlZV9jYiB3b24ndCBmcmVlIG9yaWdpbmFsCj4+ID4+ID4+ID4+ID4+IG1idWYgYmVj YXVzZSB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgY2FsbGVkIHJ0ZV9wa3RtYnVmX2ZyZWUKPj4gPj4g Pj4gPj4gPj4gdG8gZnJlZSBpdC4KPj4gPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+ID4+IEhlcmUg aXMgcHNlZHVvIGNvZGUgdG8gc2hvdyB0d28ga2luZCBvZiBjYXNlcy4KPj4gPj4gPj4gPj4gPj4g Cj4+ID4+ID4+ID4+ID4+IGNhc2UgMS4gcnRlX3BrdG1idWZfZnJlZSBzZWdtZW50ZWQgbWJ1ZnMK Pj4gPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+ID4+IG5iX3R4ID0gcnRlX2dzb19zZWdtZW50KG9y aWdpbmFsX21idWYsIC8qIG9yaWdpbmFsIG1idWYgKi8KPj4gPj4gPj4gPj4gPj4gICAgICAgICAg ICAgICAgICAgICAgICZnc29fY3R4LAo+PiA+PiA+PiA+PiA+PiAgICAgICAgICAgICAgICAgICAg ICAgLyogc2VnbWVudGVkIG1idWYgKi8KPj4gPj4gPj4gPj4gPj4gICAgICAgICAgICAgICAgICAg ICAgIChzdHJ1Y3QgcnRlX21idWYgKiopJmdzb19tYnVmcywKPj4gPj4gPj4gPj4gPj4gICAgICAg ICAgICAgICAgICAgICAgIE1BWF9HU09fTUJVRlMpOwo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ ID5JJ20gc29ycnkgYnV0IGl0IGlzIG5vdCB2ZXJ5IGNsZWFyIHRvIG1lIHdoYXQgb3BlcmF0aW9u cyBhcmUgZG9uZSBieQo+PiA+PiA+PiA+PiA+cnRlX2dzb19zZWdtZW50KCkuCj4+ID4+ID4+ID4+ ID4KPj4gPj4gPj4gPj4gPkluIHRoZSBjdXJyZW50IGNvZGUsIEkgb25seSBzZWUgY2FsbHMgdG8g cnRlX3BrdG1idWZfYXR0YWNoKCksCj4+ID4+ID4+ID4+ID53aGljaCBkbyBub3QgZGVhbCB3aXRo IGV4dGVybmFsIGJ1ZmZlcnMuIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/Cj4+ID4+ID4+ID4+ID4K Pj4gPj4gPj4gPj4gPkFyZSB5b3UgYWJsZSB0byBzaG93IHRoZSBpc3N1ZSBvbmx5IHdpdGggbWJ1 ZiBmdW5jdGlvbnM/IEl0IHdvdWxkCj4+ID4+ID4+ID4+ID5iZSBoZWxwZnVsIHRvIHVuZGVyc3Rh bmQgd2hhdCBkb2VzIG5vdCB3b3JrLgo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4KPj4gPj4g Pj4gPj4gPlRoYW5rcywKPj4gPj4gPj4gPj4gPk9saXZpZXIKPj4gPj4gPj4gPj4gPgo+PiA+PiA+ PiA+PiBPbGl2ZXIsIHRoYW5rIHlvdSBmb3IgY29tbWVudCwgbGV0IG1lIHNob3cgeW91IHdoeSBp dCBkb2Vzbid0IHdvcmsgZm9yIG15IHVzZSBjYXNlLiAgSW4gT1ZTIERQREssIFZNIHVzZXMgdmhv c3R1c2VyY2xpZW50IHRvIHNlbmQgbGFyZ2UgcGFja2V0cyB3aG9zZSBzaXplIGlzIGFib3V0IDY0 SyBiZWNhdXNlIHdlIGVuYWJsZWQgVFNPICYgVUZPLCB0aGVzZSBsYXJnZSBwYWNrZXRzIHVzZSBy dGVfbWJ1ZnMgYWxsb2NhdGVkIGJ5IERQREsgdmlydGlvX25ldCBmdW5jdGlvbiAKPj4gPj4gPj4g Pj4gdmlydGlvX2Rldl9wa3RtYnVmX2FsbG9jKCkgKGluIGZpbGUgbGliL2xpYnJ0ZV92aG9zdC92 aXJ0aW9fbmV0LmMuIFBsZWFzZSByZWZlciB0byBbUEFUQ0ggVjEgMy8zXSwgSSBjaGFuZ2VkIGZy ZWVfY2IgYXMgYmVsb3csIHRoZXNlIHBhY2tldHMgdXNlIHRoZSBzYW1lIGFsbG9jYXRlIGZ1bmN0 aW9uIGFuZCB0aGUgc2FtZSBmcmVlX2NiIG5vIG1hdHRlciB0aGV5IGFyZSBUQ1AgcGFja2V0IG9y IFVEUCBwYWNrZXRzLCBpbiBjYXNlIG9mIFZYTEFOIFRTTywgbW9zdCBOSUNzIGNhbid0IHN1cHBv cnQgaW5uZXIgVURQIGZyYWdtZW50IG9mZmxvYWQsIHNvIE9WUyBEUERLIGhhcyB0byBkbyBpdCBi eSBzb2Z0d2FyZSwgZm9yIFVEUCBjYXNlLCB0aGUgb3JpZ2luYWwgcnRlX21idWYgb25seSBjYW4g YmUgZnJlZWQgYnkgc2VnbWVudGVkIHJ0ZV9tYnVmcyB3aGljaCBhcmUgb3V0cHV0IHBhY2tldHMg b2YgcnRlX2dzb19zZWdtZW50LCBpLmUuIHRoZSBvcmlnaW5hbCBydGVfbWJ1ZiBvbmx5IGNhbiBm cmVlZCBieSBmcmVlX2NiLCB5b3UgY2FuIHNlZSwgaXQgZXhwbGljaXRseSBjYWxsZWQgcnRlX3Br dG1idWZfZnJlZShhcmctPm1idWYpLCB0aGUgY29uZGl0aW9uIHN0YXRlbWVudCAiaWYgKGNhbGxl cl9tICE9IGFyZy0+bWJ1ZikiIGlzIHRydWUgZm9yIHRoaXMgY2FzZSwgdGhpcyBoYXMgbm8gcHJv YmxlbSwgYnV0IGZvciBUQ1AgY2FzZSwgdGhlIG9yaWdpbmFsIG1idWYgaXMgZGVsaXZlcmVkIHRv IHJ0ZV9ldGhfdHhfYnVyc3QoKSBidXQgbm90IHNlZ21lbnRlZCBydGVfbWJ1ZnMgb3V0cHV0IGJ5 IHJ0ZV9nc29fc2VnbWVudCwgUE1EIGRyaXZlciB3aWxsIGNhbGwgcnRlX3BrdG1idWZfZnJlZShv cmlnaW5hbF9ydGVfbWJ1ZikgYnV0IG5vdCBydGVfcGt0bWJ1Zl9mcmVlKHNlZ21lbnRlZF9ydGVf bWJ1ZnMpLCB0aGUgc2FtZSBmcmVlX2NiIHdpbGwgYmUgY2FsbGVkLCB0aGF0IG1lYW5zIG9yaWdp bmFsX3J0ZV9tYnVmIHdpbGwgYmUgZnJlZWQgdHdpY2UsIHlvdSBrbm93IHdoYXQgd2lsbCBoYXBw ZW4sIHRoaXMgaXMganVzdCB0aGUgaXNzdWUgSSdtIGZpeGluZy4gSSBicmluZyBpbiBjYWxsZXJf bSBhcmd1bWVudCwgaXQgY2FuIGhlbHAgd29yayBhcm91bmQgdGhpcyBiZWNhdXNlIGNhbGxlcl9t IGlzIGFyZy0+bWJ1ZiBhbmQgdGhlIGNvbmRpdGlvbiBzdGF0ZW1lbnQgImlmIChjYWxsZXJfbSAh PSBhcmctPm1idWYpIiBpcyBmYWxzZSwgeW91IGNhbid0IGZpeCBpdCB3aXRob3V0IHRoZSBjaGFu Z2UgdGhpcyBwYXRjaCBzZXJpZXMgZGlkLgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5JJ20gc2lsbCBu b3Qgc3VyZSB0byBnZXQgeW91ciBpc3N1ZS4gUGxlYXNlLCBpZiB5b3UgaGF2ZSBhIHNpbXBsZSB0 ZXN0Cj4+ID4+ID4+ID5jYXNlIHVzaW5nIG9ubHkgbWJ1ZnMgZnVuY3Rpb25zICh3aXRob3V0IHZp cnRpbywgZ3NvLCAuLi4pLCBpdCB3b3VsZCBiZQo+PiA+PiA+PiA+dmVyeSBoZWxwZnVsIGJlY2F1 c2Ugd2Ugd2lsbCBiZSBzdXJlIHRoYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIHNhbWUKPj4g Pj4gPj4gPnRoaW5nLiBJbiBjYXNlIHRoZXJlIGlzIGFuIGlzc3VlLCBpdCBjYW4gZWFzaWx5IGJl Y29tZSBhIHVuaXQgdGVzdC4KPj4gPj4gPj4gCj4+ID4+ID4+IE9saXZlciwgSSB0aGluayB5b3Ug ZG9uJ3QgZ2V0IHRoZSBwb2ludCwgZnJlZSBvcGVyYXRpb24gY2FuJ3QgYmUgY29udHJvbGxlZCBi eSB0aGUgYXBwbGljYXRpb24gaXRzZWxmLCAKPj4gPj4gPj4gaXQgaXMgZG9uZSBieSBQTUQgZHJp dmVyIGFuZCB0cmlnZ2VyZWQgYnkgcnRlX2V0aF90eF9idXJzdCwgSSBoYXZlIHNob3duIHBzZXVk byBjb2RlLAo+PiA+PiA+PiBydGVfZ3NvX3NlZ21lbnQganVzdCBzZWdtZW50cyBhIGxhcmdlIG1i dWYgdG8gbXVsdGlwbGUgbWJ1ZnMsIGl0IHdvbid0IHNlbmQgdGhlbSwgdGhlIGFwcGxpY2F0aW9u Cj4+ID4+ID4+IHdpbGwgY2FsbCBydGVfZXRoX3R4X2J1cnN0IHRvIHNlbmQgdGhlbSBmaW5hbGx5 Lgo+PiA+PiA+Pgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5UaGF0IHNhaWQsIEkgbG9va2VkIGF0IHZo b3N0IG1idWYgYWxsb2NhdGlvbiBhbmQgZ3NvIHNlZ21lbnRhdGlvbiwgYW5kCj4+ID4+ID4+ID5J IGZvdW5kIHNvbWUgc3RyYW5nZSB0aGluZ3M6Cj4+ID4+ID4+ID4KPj4gPj4gPj4gPjEvIEluIHZp cnRpb19kZXZfZXh0YnVmX2FsbG9jKCksIGFuZCBJIHRoZXJlIGFyZSAyIHBhdGhzIHRvIGNyZWF0 ZSB0aGUKPj4gPj4gPj4gPiAgIGV4dCBtYnVmLgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4gICBhLyBU aGUgZmlyc3Qgb25lIHN0b3JlcyB0aGUgc2hpbmZvIHN0cnVjdCBpbiB0aGUgbWJ1ZiwgYmFzaWNh bGx5Cj4+ID4+ID4+ID4gICAgICBsaWtlIHRoaXM6Cj4+ID4+ID4+ID4KPj4gPj4gPj4gPglwa3Qg PSBydGVfcGt0bWJ1Zl9hbGxvYyhtcCk7Cj4+ID4+ID4+ID4Jc2hpbmZvID0gcnRlX3BrdG1idWZf bXRvZChwa3QsIHN0cnVjdCBydGVfbWJ1Zl9leHRfc2hhcmVkX2luZm8gKik7Cj4+ID4+ID4+ID4J YnVmID0gcnRlX21hbGxvYyhOVUxMLCBidWZfbGVuLCBSVEVfQ0FDSEVfTElORV9TSVpFKTsKPj4g Pj4gPj4gPglzaGluZm8tPmZyZWVfY2IgPSB2aXJ0aW9fZGV2X2V4dGJ1Zl9mcmVlOwo+PiA+PiA+ PiA+CXNoaW5mby0+ZmNiX29wYXF1ZSA9IGJ1ZjsKPj4gPj4gPj4gPglydGVfbWJ1Zl9leHRfcmVm Y250X3NldChzaGluZm8sIDEpOwo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4gICAgICBJIGRvbid0IHRo aW5rIGl0IGlzIGEgZ29vZCBpZGVhLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0 Cj4+ID4+ID4+ID4gICAgICB0aGUgbWJ1ZiB3b24ndCBiZSBmcmVlZCBiZWZvcmUgdGhlIGJ1ZmZl ci4gRm9yIGluc3RhbmNlLCBkb2luZwo+PiA+PiA+PiA+ICAgICAgdGhpcyB3aWxsIHByb2JhYmx5 IGZhaWw6Cj4+ID4+ID4+ID4KPj4gPj4gPj4gPglwa3QyID0gcnRlX3BrdG1idWZfYWxsb2MobXAp Owo+PiA+PiA+PiA+CXJ0ZV9wa3RtYnVmX2F0dGFjaChwa3QyLCBwa3QpOwo+PiA+PiA+PiA+CXJ0 ZV9wa3RtYnVmX2ZyZWUocGt0KTsgIC8qIHBrdCBpcyBmcmVlZCwgYnV0IGl0IGNvbnRhaW5zIHNo aW5mbyAhICovCj4+ID4+ID4+IAo+PiA+PiA+PiBwa3QgaXMgY3JlYXRlZCBieSB0aGUgYXBwbGlj YXRpb24gSSBjYW4gY29udHJvbCwgc28gSSBjYW4gY29udHJvbCBpdCB3aGVyZSBpdCB3aWxsIGJl IGZyZWVkLCByaWdodD8KPj4gPj4gPgo+PiA+PiA+VGhpcyBleGFtcGxlIHNob3dzIHRoYXQgbWJ1 ZnMgYWxsb2NhdGVkIGxpa2UgdGhpcyBieSB0aGUgdmhvc3QKPj4gPj4gPmRyaXZlciBhcmUgbm90 IGNvbnN0cnVjdGVkIGNvcnJlY3RseS4gSWYgYW4gYXBwbGljYXRpb24gYXR0YWNoIGEgbmV3Cj4+ ID4+ID5wYWNrZXQgKHBrdDIpIHRvIGl0IGFuZCBmcmVlcyB0aGUgb3JpZ2luYWwgb25lIChwa3Qp LCBpdCBtYXkgcmVzdWx0IGluIGEKPj4gPj4gPm1lbW9yeSBjb3JydXB0aW9uLgo+PiA+PiA+Cj4+ ID4+ID5PZiBjb3Vyc2UsIHRvIGJlIHRlc3RlZCBhbmQgY29uZmlybWVkLgo+PiA+PiAKPj4gPj4g Tm8sIGF0dGFjaCB3aWxsIGluY3JlYXNlIHJlZmNudCBvZiBzaGluZm8sIGZyZWVfY2Igb25seSBp cyBjYWxsZWQgd2hlbiAgcmVmY250IG9mIHNoaW5mbyBpcyBkZWNyZWFzZWQgdG8KPj4gPj4gMCwg aXNuJ3QgaXQ/Cj4+ID4KPj4gPldoZW4gcGt0IHdpbGwgYmUgZnJlZWQsIGl0IHdpbGwgZGVjcmVt ZW50IHRoZSBzaGluZm8gcmVmY250LCBhbmQKPj4gPmFmdGVyIGl0IHdpbGwgYmUgMS4gU28gdGhl IGJ1ZmZlciB3b24ndCBiZSBmcmVlZC4gQWZ0ZXIgdGhhdCwgdGhlCj4+ID5tYnVmIHBrdCB3aWxs IGJlIGRldGFjaGVkLCBhbmQgd2lsbCByZXR1cm4gdG8gdGhlIG1idWYgcG9vbC4gSXQgbWVhbnMK Pj4gPml0IGNhbiBiZSByZWFsbG9jYXRlZCwgYW5kIHRoZSBuZXh0IHVzZXIgY2FuIG92ZXJ3cml0 ZSBzaGluZm8gd2hpY2gKPj4gPmlzIHN0aWxsIHN0b3JlZCBpbiB0aGUgbWJ1ZiBkYXRhLgo+PiAK Pj4gSSB0aGluayB0aGlzIGlzIGFuIGlzc3VlIG9mIERQREsgaXRzZWxmLCBpZiBleHRlcm5hbCBi dWZmZXIgaW4gc2hpbmZvIGlzIGZyZWVkLCBzaGluZm8gc2hvdWxkIGJlIHNldCB0byBOVUxMLCBp ZiB1c2VyIHdpbGwKPj4gb3ZlcndyaXRlIGl0LCBoZS9zaGUgc2hvdWxkIHVzZSB0aGUgc2FtZSB3 YXkgYXMgYSBuZXcgZXh0ZXJuYWwgYnVmZmVyIGlzIGF0dGFjaGVkLiAKPgo+Tm8sIHRoZXJlIGlz IG5vIGlzc3VlIGluIERQREsuIFRoZSBsaWZldGltZSBvZiBzaGluZm8gc2hvdWxkIGJlIGF0IGxl YXN0Cj50aGUgc2FtZSB0aGUgbGlmZXRpbWUgb2YgdGhlIGJ1ZmZlci4gSWYgc2hpbmZvIGlzIHN0 b3JlZCBpbiBpbml0aWFsIG1idWYKPihjYWxsZWQgInBrdCIgaW4gdGhlIGV4YW1wbGUgYWJvdmUp LCB0aGUgbWJ1ZiBhbmQgc2hpbmZvIGNhbiBiZSBmcmVlZCB3aGlsZQo+dGhlIGJ1ZmZlciBpcyBz dGlsbCBpbiB1c2UgYnkgYW5vdGhlciBwYWNrZXQuCj4KPj4gPkkgZGlkIGEgdGVzdCB0byBzaG93 IGl0LCBzZWU6Cj4+ID5odHRwOi8vZ2l0LmRyb2lkcy1jb3JwLm9yZy8/cD1kcGRrLmdpdDthPWNv bW1pdGRpZmY7aD1hNjE3NDk0ZWViMDFmZgo+PiA+Cj4+ID5JZiB5b3UgcnVuIHRoZSBtYnVmIGF1 dG90ZXN0LCBpdCBzZWdmYXVsdHMuCj4+IAo+PiBJIHRoaW5rIHlvdXIgdGVzdCBpcyB3cm9uZywg eW91J3JlIGNoYW5naW5nIHNoaW5mbyAod2hpY2ggaXMgYmVpbmcgdXNlZCkgaW4gd3Jvbmcgd2F5 LCBpZiBmcmVlX2JjIGlzIE5VTEwsIGl0IHdpbGwgYmUgaW52YWxpZC4KPgo+SSdtIGNoYW5naW5n IHRoZSBkYXRhIG9mIGEgbmV3bHkgYWxsb2NhdGVkIG1idWYsIGl0IGlzIHBlcmZlY3RseSBsZWdh bC4KPkkgaGFwcGVucyB0aGF0IGl0IHBvaW50cyB0aGUgdGhlIHNoaW5mbyB0aGF0IGlzIHN0aWxs IGluIHVzZS4KPgo+Cj4+IAo+PiBzdGF0aWMgaW5saW5lIHZvaWQKPj4gcnRlX3BrdG1idWZfYXR0 YWNoX2V4dGJ1ZihzdHJ1Y3QgcnRlX21idWYgKm0sIHZvaWQgKmJ1Zl9hZGRyLAo+PiAgICAgICAg IHJ0ZV9pb3ZhX3QgYnVmX2lvdmEsIHVpbnQxNl90IGJ1Zl9sZW4sCj4+ICAgICAgICAgc3RydWN0 IHJ0ZV9tYnVmX2V4dF9zaGFyZWRfaW5mbyAqc2hpbmZvKQo+PiB7Cj4+ICAgICAgICAgLyogbWJ1 ZiBzaG91bGQgbm90IGJlIHJlYWQtb25seSAqLwo+PiAgICAgICAgIFJURV9BU1NFUlQoUlRFX01C VUZfRElSRUNUKG0pICYmIHJ0ZV9tYnVmX3JlZmNudF9yZWFkKG0pID09IDEpOwo+PiAgICAgICAg IFJURV9BU1NFUlQoc2hpbmZvLT5mcmVlX2NiICE9IE5VTEwpOwo+PiAKPj4gRm9yIGFueSBzaGlu Zm8gb3BlcmF0aW9uLCB5b3Ugc2hvdWxkIGRvIGl0IGJ5IHJ0ZV9wa3RtYnVmX2F0dGFjaF9leHRi dWYsIHlvdSBjYW4ndCBjaGFuZ2UgaXQgYXQgd2lsbCBhZnRlciB0aGF0Lgo+PiAKPj4gPgo+PiA+ Cj4+ID4+IAo+PiA+PiA+Cj4+ID4+ID4+IAo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4gICAgICBUbyBk byB0aGlzIHByb3Blcmx5LCB0aGUgbWJ1ZiByZWZjbnQgc2hvdWxkIGJlIGluY3JlYXNlZCwgYW5k Cj4+ID4+ID4+ID4gICAgICB0aGUgbWJ1ZiBzaG91bGQgYmUgZnJlZWQgaW4gdGhlIGNhbGxiYWNr LiBCdXQgSSBkb24ndCB0aGluayBpdCdzCj4+ID4+ID4+ID4gICAgICB3b3J0aCBkb2luZyBpdCwg Z2l2ZW4gdGhlIHNlY29uZCBwYXRoIChiLykgbG9va3MgZ29vZCB0byBtZS4KPj4gPj4gPj4gPgo+ PiA+PiA+PiA+ICAgYi8gVGhlIHNlY29uZCBwYXRoIHN0b3JlcyB0aGUgc2hpbmZvIHN0cnVjdCBh dCB0aGUgZW5kIG9mIHRoZQo+PiA+PiA+PiA+ICAgICAgYWxsb2NhdGVkIGJ1ZmZlciwgbGlrZSB0 aGlzOgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4JcGt0ID0gcnRlX3BrdG1idWZfYWxsb2MobXApOwo+ PiA+PiA+PiA+CWJ1Zl9sZW4gKz0gc2l6ZW9mKCpzaGluZm8pICsgc2l6ZW9mKHVpbnRwdHJfdCk7 Cj4+ID4+ID4+ID4JYnVmX2xlbiA9IFJURV9BTElHTl9DRUlMKHRvdGFsX2xlbiwgc2l6ZW9mKHVp bnRwdHJfdCkpOwo+PiA+PiA+PiA+CWJ1ZiA9IHJ0ZV9tYWxsb2MoTlVMTCwgYnVmX2xlbiwgUlRF X0NBQ0hFX0xJTkVfU0laRSk7Cj4+ID4+ID4+ID4Jc2hpbmZvID0gcnRlX3BrdG1idWZfZXh0X3No aW5mb19pbml0X2hlbHBlcihidWYsICZidWZfbGVuLAo+PiA+PiA+PiA+CQkJCQkgICAgICB2aXJ0 aW9fZGV2X2V4dGJ1Zl9mcmVlLCBidWYpOwo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4gICAgICBJIHRo aW5rIHRoaXMgaXMgY29ycmVjdCwgYmVjYXVzZSB3ZSBoYXZlIHRoZSBndWFyYW50ZWUgdGhhdCBz aGluZm8KPj4gPj4gPj4gPiAgICAgIGV4aXN0cyBhcyBsb25nIGFzIHRoZSBidWZmZXIgZXhpc3Rz Lgo+PiA+PiA+PiAKPj4gPj4gPj4gV2hhdCBidWZmZXIgZG9lcyB0aGUgYWxsb2NhdGVkIGJ1ZmZl ciB5b3UncmUgc2F5aW5nIGhlcmU/IFRoZSBpc3N1ZSB3ZSdyZSBkaXNjdXNzaW5nIGhvdyB3ZSBj YW4KPj4gPj4gPj4gZnJlZSBvcmlnaW5hbCBtYnVmIHdoaWNoIG93bnMgc2hpbmZvIGJ1ZmZlci4K Pj4gPj4gPgo+PiA+PiA+SSBkb24ndCBnZXQgeW91ciBxdWVzdGlvbi4KPj4gPj4gPgo+PiA+PiA+ SSdtIGp1c3Qgc2F5aW5nIHRoYXQgdGhpcyBjb2RlIHBhdGggbG9va3MgY29ycmVjdCwgY29tcGFy ZWQgdG8KPj4gPj4gPnRoZSBwcmV2aW91cyBvbmUuCj4+ID4+IAo+PiA+PiBJIHRoaW5rIHlvdSdy ZSBjaGFsbGVuZ2luZyBwcmluY2lwbGUgb2YgZXh0ZXJuYWwgbWJ1ZiwgdGhhdCBpc24ndCB0aGUg dGhpbmcgSSBhZGRyZXNzLgo+PiA+Cj4+ID5JJ20gbm90IGNoYWxsZW5naW5nIGFueXRoaW5nLCBJ J20gc2F5aW5nIHRoZXJlIGlzIGEgYnVnIGluIHRoaXMgY29kZSwKPj4gPmFuZCB0aGUgdW5pdCB0 ZXN0IGFib3ZlIHRlbmRzIHRvIGNvbmZpcm0gaXQuCj4+IAo+PiBJZiBpdCBpcyBidWcsIHlvdSBj YW4gcG9zdCBhIHBhdGNoIHRvIGZpeCBpdCwgIGl0IGlzbid0IHJlbGF0ZWQgd2l0aCBteSBwYXRj aGVzLiBCdXQgaW4gbXkgb3BpbmlvbiwgeW91IGRvbid0Cj4+IHVzZSBpdCBpbiBjb3JyZWN0IHdh eSwgSSBkb24ndCB0aGluayBpdCBpcyBhIGJ1Zy4KPgo+SSdsbCBzdWJtaXQgYSBwYXRjaCBmb3Ig dGhpcy4KPgo+VGhlIHBvaW50IGlzIHlvdSBhcmUgdGVzdGluZyBHU08gb24gdG9wIG9mIHdyb25n bHktY29uc3RydWN0ZWQgbWJ1ZnMsIHNvCj5pdCB3b3VsZCBiZSBzYWZlciBmb3IgeW91IHRvIGZp eCB0aGlzIGJlZm9yZSBkb2luZyBtb3JlIHRlc3RzLgo+Cj4KPj4gPj4gPj4gPjIvIGluIHJ0ZV9n c29fc2VnbWVudCgpLCB0aGVyZSBpcyBhIGxvb3AgbGlrZSB0aGlzOgo+PiA+PiA+PiA+Cj4+ID4+ ID4+ID4Jd2hpbGUgKHBrdF9zZWcpIHsKPj4gPj4gPj4gPgkJcnRlX21idWZfcmVmY250X3VwZGF0 ZShwa3Rfc2VnLCAtMSk7Cj4+ID4+ID4+ID4JCXBrdF9zZWcgPSBwa3Rfc2VnLT5uZXh0Owo+PiA+ PiA+PiA+CX0KPj4gPj4gPj4gPgo+PiA+PiA+PiA+ICAgWW91IGNoYW5nZSBpdCB0byB0YWtlIGlu IGFjY291bnQgdGhlIHJlZmNudCBmb3IgZXh0IG1idWZzLgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4g ICBJIG1heSBoYXZlIG1pc3NlZCBzb21ldGhpbmcgYnV0IEkgd29uZGVyIHdoeSBpdCBpcyBub3Qg c2ltcGx5Ogo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4JcnRlX3BrdG1idWZfZnJlZShwa3Rfc2VnKTsK Pj4gPj4gPj4gPgo+PiA+PiA+PiA+ICAgSXQgd2lsbCBkZWNyZWFzZSB0aGUgcHJvcGVyIHJlZmNu dCwgYW5kIGZyZWUgdGhlIG1idWZzIGlmIHRoZXkKPj4gPj4gPj4gPiAgIGFyZSBub3QgdXNlZC4K Pj4gPj4gPj4gCj4+ID4+ID4+IEFnYWluLCBydGVfZ3NvX3NlZ21lbnQganVzdCBkZWNyZWFzZXMg cmVmY250IGJ5IG9uZSwgdGhpcyB3aWxsIGVuc3VyZSB0aGUgbGFzdCBzZWdtZW50ZWQgCj4+ID4+ ID4+IG1idWYgZnJlZSB3aWxsIHRyaWdnZXIgZnJlZWluZyBvcmlnaW5hbCBtYnVmIChvbmx5IGZy ZWVfY2IgY2FuIGRvIHRoaXMpLgo+PiA+PiA+Cj4+ID4+ID5ydGVfcGt0bWJ1Zl9mcmVlKCkgd2ls bCBhbHNvIGRlY2VyYXNlIHRoZSByZWZjbnQsIGFuZCBmcmVlIHRoZSByZXNvdXJjZXMKPj4gPj4g PndoZW4gdGhlIHJlZmNudCByZWFjaGVzIDAuCj4+ID4+ID4KPj4gPj4gPkl0IGhhcyBzb21lIGFk dmFudGFnZXMgY29tcGFyZWQgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudGVyIG9mIGFs bAo+PiA+PiA+c2VnbWVudHM6Cj4+ID4+ID4KPj4gPj4gPi0gbm8gbmVlZCB0byBpdGVyYXRlIHRo ZSBzZWdtZW50cywgdGhlcmUgaXMgb25seSBvbmUgZnVuY3Rpb24gY2FsbAo+PiA+PiA+LSBubyBu ZWVkIHRvIGhhdmUgYSBzcGVjaWFsIGNhc2UgZm9yIGV4dCBtYnVmcyBsaWtlIHlvdSBkaWQgaW4g eW91ciBwYXRjaAo+PiA+PiA+LSBpdCBtYXkgYmUgc2FmZXIsIGluIGNhc2Ugc29tZSBzZWdtZW50 cyBoYXZlIGEgcmVmY250ID09IDEsIGJlY2F1c2UKPj4gPj4gPiAgcmVzb3VyY2VzIHdpbGwgYmUg ZnJlZWQuCj4+ID4+IAo+PiA+PiBGb3IgZXh0ZXJuYWwgbWJ1ZiwgYXR0YWNoIG9ubHkgaW5jcmVh c2VzIHJlZmNudCBvZiBzaGluZm8sIHJlZmNudCBvZiBtYnVmIHdvbid0IGJlIHRvdWNoZWQuIEZv ciBub3JtYWwKPj4gPj4gbWJ1ZiwgYXR0YWNoIG9ubHkgaW5jcmVhc2UgcmVmY250IG9mIG1idWYs IG5vIHNoaW5mbyB0aGVyZSwgbm8gcmVmY250IG9mIHNoaW5mbyBpbmNyZWFzZWQuCj4+ID4KPj4g Pkkgc3VwcG9zZSBydGVfZ3NvX3NlZ21lbnQoKSBjYW4gdGFrZSBhbnkgbWJ1ZiB0eXBlIGFzIGlu cHV0OiBzdGFuZGFyZAo+PiA+bWJ1ZiwgaW5kaXJlY3QgbWJ1ZiwgZXh0IG1idWYsIG9yIGV2ZW4g YSBtYnVmIGNoYWluZyBjb250YWluaW5nIHNlZ21lbnRzIG9mCj4+ID5kaWZmZXJlbnQgdHlwZXMu Cj4+ID4KPj4gPkZvciBpbnN0YW5jZSwgaWYgeW91IHBhc3MgYSBjaGFpbiBvZiAyIG1idWZzOgo+ PiA+LSB0aGUgZmlyc3Qgb25lIGlzIGEgZGlyZWN0IG1idWYgY29udGFpbmluZyB0aGUgSVAvVENQ IGhlYWRlcnMgKG9yaWdfaGRyKQo+PiA+LSB0aGUgc2Vjb25kIG9uIGlzIGEgbWJ1ZiBwb2ludGlu ZyB0byBhbiBleHQgYnVmZmVyIChvcmlnX3BheWxvYWQpCj4+ID4KPj4gPkkgZXhwZWN0IHRoYXQg dGhlIHJlc3VsdGluZyBtYnVmIGFmdGVyIGNhbGxpbmcgZ3NvIGNvbnRhaW5zIGEgbGlzdCBvZiBt YnVmcwo+PiA+bGlrZSB0aGlzOgo+PiA+LSBhIGZpcnN0IHNlZ21lbnQgY29udGFpbmluZyB0aGUg SVAvVENQIGhlYWRlcnMgKG5ld19oZHIpCj4+ID4tIGEgcGF5bG9hZCBzZWdtZW50IHBvaW50aW5n IG9uIHRoZSBzYW1lIGV4dCBidWZmZXIKPj4gPgo+PiA+SW4gdGhlb3J5LCB0aGVyZSBpcyBubyBy ZWFzb24gdGhhdCBvcmlnX2hkciBzaG91bGQgYmUgcmVmZXJlbmNlZCBieQo+PiA+YW5vdGhlciBu ZXcgbWJ1ZiwgYmVjYXVzZSBpdCBvbmx5IGNvbnRhaW5zIGhlYWRlcnMgKG5vIGRhdGEpLiBJZiB0 aGF0J3MKPj4gPnRoZSBjYXNlLCBpdHMgcmVmY250IGlzIDEsIGFuZCBkZWNyZWFzaW5nIGl0IHRv IDAgd2l0aG91dCBmcmVlaW5nIGl0Cj4+ID5pcyBhIGJ1Zy4KPj4gCj4+IEZvciB0aGlzIHVzZXIg c2NlbmFyaW8sIG9yaWdfbSBpcyBvd25lciBvZiBleHRlcm5hbCBidWZmZXIsIHNtYWxsIHNlZ21l bnRlZCBtYnVmcyByZWZlcmVuY2UKPj4gaXQsIHlvdSBzaG91bGRuJ3QgZnJlZSBvcmlnX20gYmVm b3JlIGFsbCBhdHRhY2hlZCBzZWdtZW50ZWQgbWJ1ZnMgYXJlIGZyZWVkLCBpc24ndCBpdD8KPgo+ SW4gdGhpcyBjYXNlLCBvcmlnX2hkciBoYXMgdG8gYmUgZnJlZWQgYmVjYXVzZSBpdCBpcyBhIGRp cmVjdCBtYnVmIChub3QKPnNoYXJlZCkuCj5UaGUgYnVmZmVyIHBvaW50ZWQgYnkgb3JpZ19wYXls b2FkIHdpbGwgYmUgZnJlZWQgd2hlbiBhbGwgbmV3bHkgY3JlYXRlZAo+c2VnbWVudHMgYXJlIGZy ZWVkLgo+Cj4KPj4gPgo+PiA+QW55d2F5LCB0aGVyZSBpcyBtYXliZSBubyBpc3N1ZSBpbiB0aGF0 IGNhc2UsIGJ1dCBJIHdhcyBqdXN0IHN1Z2dlc3RpbmcKPj4gPnRoYXQgdXNpbmcgcnRlX3BrdG1i dWZfZnJlZSgpIGlzIGVhc2llciB0byByZWFkLCBhbmQgc2FmZXIgdGhhbiBtYW51YWxseQo+PiA+ ZGVjcmVhc2luZyB0aGUgcmVmY250IG9mIGVhY2ggc2VnbWVudC4KPj4gPgo+PiA+Cj4+ID4+ID4+ ID5BZ2Fpbiwgc29ycnkgaWYgdGhpcyBpcyBub3QgdGhlIGlzc3VlIHlvdXIgYXJlIHJlZmVycmlu ZyB0bywgYnV0Cj4+ID4+ID4+ID5pbiB0aGlzIGNhc2UgSSByZWFsbHkgdGhpbmsgdGhhdCBoYXZp bmcgYSBzaW1wbGUgZXhhbXBsZSBjb2RlIHRoYXQKPj4gPj4gPj4gPnNob3dzIHRoZSBpc3N1ZSB3 b3VsZCBoZWxwLgo+PiA+PiA+PiAKPj4gPj4gPj4gT2xpdmVyLCBteSBzdGF0ZW1lbnQgaW4gdGhl IHBhdGNoIEkgc2VudCBvdXQgaGFzIHBzZXVkbyBjb2RlIHRvIHNob3cgdGhpcy4gIEkgZG9uJ3Qg dGhpbmsgYSBzaW1wbGUKPj4gPj4gPj4gdW5pdCB0ZXN0IGNhbiBzaG93IGl0Lgo+PiA+PiA+Cj4+ ID4+ID5JIGRvbid0IHNlZSB3aHkuIFRoZSBQTURzIGFuZCB0aGUgbGlicmFyaWVzIHVzZSB0aGUg bWJ1ZiBmdW5jdGlvbnMsIHdoeQo+PiA+PiA+YSB1bml0IHRlc3QgY291bGRuJ3QgY2FsbCB0aGUg c2FtZSBmdW5jdGlvbnM/Cj4+ID4+ID4KPj4gPj4gPj4gTGV0IG1lIHN1bW1hcml6ZSBpdCBoZXJl IGFnYWluLiBGb3Igb3JpZ2luYWwgbWJ1ZiwgdGhlcmUgYXJlIHR3byBjYXNlcyBmcmVlaW5nCj4+ ID4+ID4+IGl0LCBjYXNlIG9uZSBpcyBQTUQgZHJpdmVyIGNhbGxzIGZyZWUgYWdhaW5zdCBzZWdt ZW50ZWQgbWJ1ZnMsIGxhc3Qgc2VnbWVudGVkIG1idWYgZnJlZSB3aWxsIHRyaWdnZXIKPj4gPj4g Pj4gZnJlZV9jYiBjYWxsIHdoaWNoIHdpbGwgZnJlZSBvcmlnaW5hbCBsYXJnZSAmIGV4dGVuZGVk IG1idWYuCj4+ID4+ID4KPj4gPj4gPk9LCj4+ID4+ID4KPj4gPj4gPj4gQ2FzZSB0d28gaXMgUE1E IGRyaXZlciB3aWxsIGNhbGwgZnJlZSBhZ2FpbnN0Cj4+ID4+ID4+IG9yaWdpbmFsIG1idWYsIHRo YXQgYWxzbyB3aWxsIGNhbGwgZnJlZV9jYiB0byBmcmVlIGF0dGFjaGVkIGV4dGVuZGVkIGJ1ZmZl ci4KPj4gPj4gPgo+PiA+PiA+T0sKPj4gPj4gPgo+PiA+PiA+QW5kIHdoYXQgbWFrZXMgdGhhdCBj YXNlIDEgb3IgY2FzZSAyIGlzIGV4ZWN1dGVkPwo+PiA+PiA+Cj4+ID4+ID4+IEluIGNhc2Ugb25l IGZyZWVfY2IgbXVzdCBjYWxsCj4+ID4+ID4+IHJ0ZV9wa3RtYnVmX2ZyZWUgb3RoZXJ3aXNlIG5v Ym9keSB3aWxsIGZyZWUgb3JpZ2luYWwgbGFyZ2UgJiBleHRlbmRlZCBtYnVmLCBpbiBjYXNlIHR3 byBmcmVlX2NiIGNhbid0IAo+PiA+PiA+PiBjYWxsIHJ0ZV9wa3RtYnVmX2ZyZWUgYmVjYXVzZSB0 aGUgY2FsbGVyIGNhbGxpbmcgaXQgaXMganVzdCBydGVfcGt0bWJ1Zl9mcmVlIHdlIG5lZWQuIFRo YXQgaXMgdG8gc2F5LCB5b3UKPj4gPj4gPj4gbXVzdCB1c2UgdGhlIHNhbWUgZnJlZV9jYiB0byBo YW5kbGUgdGhlc2UgdHdvIGNhc2VzLCB0aGlzIGlzIG15IGlzc3VlIGFuZCB0aGUgcG9pbnQgeW91 IGRvbid0IGdldC4KPj4gPj4gPgo+PiA+PiA+SSB0aGluayB0aGVyZSBpcyBubyBuZWVkIHRvIGNo YW5nZSB0aGUgZnJlZV9jYiBBUEkuIEl0IHNob3VsZCB3b3JrIGxpa2UKPj4gPj4gPnRoaXM6Cj4+ ID4+ID4KPj4gPj4gPi0gdmlydGlvIGNyZWF0ZXMgdGhlIG9yaWdpbmFsIGV4dGVybmFsIG1idWYg KG9yaWdfbSkKPj4gPj4gPi0gZ3NvIHdpbGwgY3JlYXRlIGEgbmV3IG1idWYgcmVmZXJlbmNpbmcg dGhlIGV4dGVybmFsIGJ1ZmZlciAobmV3X20pCj4+ID4+ID4KPj4gPj4gPkF0IHRoaXMgcG9pbnQs IHRoZSBzaGluZm8gaGFzIGEgcmVmY250IG9mIDIuIFRoZSBsYXJnZSBidWZmZXIgd2lsbCBiZQo+ PiA+PiA+ZnJlZWQgYXMgc29vbiBhcyBydGVfcGt0bWJ1Zl9mcmVlKCkgaXMgY2FsbGVkIG9uIG9y aWdfbSBhbmQgbmV3X20sCj4+ID4+ID53aGF0ZXZlciB0aGUgb3JkZXIuCj4+ID4+ID4KPj4gPj4g PlJlZ2FyZHMsCj4+ID4+ID5PbGl2aWVyCj4+ID4+IAo+PiA+PiBPbGl2ZXIsIHRoZSByZWFzb24g aXQgd29ya3MgaXMgSSBjaGFuZ2VkIGZyZWVfY2IgQVBJLCBjYXNlIDEgZG9lc24ndCBrbm93IG9y aWdfbSwgaG93IHlvdSBtYWtlIGl0IGZyZWUgb3JpZ19tIGluIGZyZWVfY2IuCj4+ID4+IFRoZSBp bnRlbnRpb24gSSBjaGFuZ2UgZnJlZV9jYiBpcyB0byBsZXQgaXQga25vdyBvcmlnX20sIEkgc2F3 IE9WUyBEUERLIHJhbiBvdXQgb3V0IGJ1ZmZlcnMgYW5kIG9yaWdfbSBpc24ndCBmcmVlZCwgdGhh dCBpcyB3aHkKPj4gPj4gSSB3YW50IHRvIGJyaW5nIGluIHRoaXMgdG8gZml4IHRoZSBpc3N1ZS4g QWdhaW4sIGluIGNhc2UgMSwgbm9ib2R5IGV4cGxpY2l0bHkgY2FsbHMgcmV0X3BrdG1idWZfZnJl ZShvcmlnX20pIGV4Y2VwdCBmcmVlX2NiIEkgY2hhbmdlZC4KPj4gPgo+PiA+SWYgbm9ib2R5IGNh bGxzIHJldF9wa3RtYnVmX2ZyZWUob3JpZ19tKSwgaXQgaXMgYSBwcm9ibGVtLgo+PiA+VGhlIGZy ZWVfY2IgaXMgdG8gZnJlZSB0aGUgYnVmZmVyLCBub3QgdGhlIG1idWYuCj4+ID4KPj4gPlRvIG1l LCBpdCBzaG91bGQgd29yayBsaWtlIHRoaXM6Cj4+ID4KPj4gPjEtIHZpcnRpbyBjcmVhdGVzIGEg bWJ1ZiBhdHRhY2hlZCB0byB0aGUgZXh0IGJ1ZmZlciAodGhlIHNoaW5mbyBwbGFjZW1lbnQKPj4g PiAgIGJ1ZyBzaG91bGQgYmUgZml4ZWQpCj4+ID4yLSBnc28gY3JlYXRlIG1idWZzIHRoYXQgcmVm ZXJlbmNlIHRoZSB0aGUgc2FtZSBleHQgYnVmIChieSBhdHRhY2hpbmcgdGhlCj4+ID4gICBuZXcg bWJ1ZikKPj4gPjMtIGdzbyBtdXN0IGZyZWUgdGhlIG9yaWdpbmFsIG1idWYKPj4gCj4+IFRoaXMg aXMgaW1wb3NzaWJsZSwgc2VnbWVudGVkIG1idWZzIGFyZSByZWZlcmVuY2luZyBleHRlcm5hbCBi dWZmZXIgaW4gb3JpZ2luYWwgbWJ1ZiwKPj4gaG93IGRvIHlvdSBmcmVlIGl0PyBBcyBJIHNhaWQg cnRlX2dzb19zZWdtZW50IGhhcyBubyB3YXkgdG8gZnJlZSBpdCwgcGxlYXNlIHRlbGwgbWUgYSB3 YXkgaWYKPj4geW91IGtub3cgaG93IHRvIGRvIHRoaXMuCj4KPkFzIEkgc2FpZCBhYm92ZSwgY2Fs bGluZyBydGVfbWJ1Zl9mcmVlKG9yaWdfbSkgd2lsbCBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZQo+ Y291bnRlcnMgb24gYWxsIHNlZ21lbnRzLiBUaGUgc2VnbWVudHMgd2lsbCBiZSByZXR1cm5lZCB0 byB0aGUgcG9vbCBpZiB0aGUKPnJlZmNudCByZWFjaGVzIDAuCj4KPj4gCj4+ID40LSB0aGUgUE1E IHRyYW5zbWl0cyB0aGUgbmV3IG1idWZzLCBhbmQgZnJlZXMgdGhlbQo+PiA+Cj4+ID5XaGF0ZXZl ciAzLSBvciA0LSBpcyBleGVjdXRlZCBmaXJzdCwgYXQgdGhlIGVuZCB3ZSBhcmUgc3VyZSB0aGF0 Ogo+PiA+LSBhbGwgbWJ1ZnMgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgcG9vbAo+PiA+LSB0aGUg bGluZWFyIGJ1ZmZlciB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlIHJlZmNudCByZWFjaGVzIDAuCj4+ ID4KPj4gPklmIHRoaXMgaXMgc3RpbGwgdW5jbGVhciwgcGxlYXNlLCB3cml0ZSBhIHVuaXQgdGVz dCBsaWtlIEkgZGlkCj4+ID5hYm92ZSB0byBzaG93IHlvdXIgaXNzdWUuCj4+ID4KPj4gPlJlZ2Fy ZHMsCj4+ID5PbGl2aWVyCj4+ID4KPj4gCj4+IFRoZSBpc3N1ZSBpcyBpbiAiMy0gZ3NvIG11c3Qg ZnJlZSB0aGUgb3JpZ2luYWwgbWJ1ZiIsIHJ0ZV9wa3RtYnVmX2ZyZWUoc2VnbWVudGVkX21idXMp IGNhbid0IGRvIGl0LAo+PiBydGVfZ3NvX3NlZ21lbnQgaXMgaW1wb3NzaWJsZSB0byBkbyBpdCwg b25seSBmZWFzaWJsZSBwb2ludCBpcyBmcmVlX2NiLCBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91 IGhhdmUKPj4gYSBiZXR0ZXIgd2F5IHRvIGZyZWUgb3JpZ2luYWwgbWJ1ZiBhbmQgZG9uJ3QgaW1w YWN0IG9uIHNlZ21lbnRlZCBtYnVmcyBpbiBQTUQuIE15IHBvaW50IGlzIHlvdSBtdXN0Cj4+IGhh dmUgYSBwbGFjZSB0byBjYWxsIHJ0ZV9wa3RtYnVmX2ZyZWUocm9naW5fbSkgZXhwbGljaXRseSwg b3RoZXJ3aXNlIGl0IGlzIGltcG9zc2libGUgIHRvIHJldHVybiBpdCB0byBtZW1vcnkKPj4gcG9v bCwgcGxlYXNlIHBvaW50IG91dCAgd2hlcmUgaXQgY2FuIGJlIGNhbGxlZCBpbiBteSB1c2VyIHNj ZW5hcmlvLiBJIGRvbid0IGNhcmUgaG93IGl0IGlzIGRvbmUsIEkganVzdCBjYXJlIGl0IGNhbgo+ PiBmaXggbXkgaXNzdWUsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSBhbmQgc2VuZCBtZSBhIHBhdGNo IGlmIHlvdSBjYW4sIHRoYW5rcyBhIGxvdC4KPgo+U29ycnksIGJ1dCBJIGRvbid0IHNlZSBob3cg SSBjYW4gYmUgY2xlYXJlciB0byB3aGF0IEkgZXhwbGFpbmVkCj5pbiBteSBwcmV2aW91cyBhbnN3 ZXIuCj4KPlBsZWFzZSwgKnByb3ZpZGUgYSBzaW1wbGUgdGVzdCBleGFtcGxlKiB3aXRob3V0IGdz by92aG9zdCwgYW5kIEkgY2FuIGhlbHAKPnRvIG1ha2UgaXQgd29yay4KPgo+Cj5SZWdhcmRzLAo+ T2xpdmllcgo+Cj4KPj4gPgo+PiA+Cj4+ID4+IGZyZWVfY2IgbXVzdCBoYW5kbGUgY2FzZSAxIGFu ZCBjYXNlIDIgaW4gdGhlIHNhbWUgY29kZSwgZm9yIGNhc2UgMSwgY2FsbGVyX20gaXMgc2VnbWVu dGVkIG5ld19tLCBmb3IgY2FzZSAyLCBjYWxsZXJfbSBpcyBvcmlnX20uCj4+ID4+IAo+PiA+PiBs b29wIGluIHJ0ZV9nc29fc2VnZW1lbnQgaXMgaGFuZGxpbmcgb3JpZ2luYWwgbWJ1ZiAodGhpcyBt YnVmIGlzIG11bHRpLW1idWYgYW5kIGluY2x1ZGVzIG11bHRpcGxlIG1idWZzIHdoaWNoIGFyZSBs aW5rZWQgYnkgbmV4dAo+PiA+PiBwb2ludGVyKSwgaXQgaXNuJ3QgYSBwcm9ibGVtIGF0IGFsbC4K Pj4gPj4gCj4+ID4+IFBsZWFzZSBzaG93IG1lIGNvZGUgaG93IHlvdSBjYW4gZml4IG15IGlzc3Vl IGlmIHlvdSBkb24ndCBjaGFuZ2UgZnJlZV9jYiwgdGhhbmsgeW91Lgo+PiA+PiAKPj4gPj4gc3Ry dWN0IHNoaW5mb19hcmcgewo+PiA+PiAgICAgICAgdm9pZCAqYnVmOwo+PiA+PiAgICAgICAgc3Ry dWN0IHJ0ZV9tYnVmICptYnVmOwo+PiA+PiB9Owo+PiA+PiAKPj4gPj4gdmlydGlvX2Rldl9leHRi dWZfZnJlZShzdHJ1Y3QgcnRlX21idWYgKmNhbGxlcl9tLCB2b2lkICpvcGFxdWUpCj4+ID4+IHsK Pj4gPj4gICAgICAgIHN0cnVjdCBzaGluZm9fYXJnICphcmcgPSAoc3RydWN0IHNoaW5mb19hcmcg KilvcGFxdWU7Cj4+ID4+IAo+PiA+PiAgICAgICAgcnRlX2ZyZWUoYXJnLT5idWYpOwo+PiA+PiAg ICAgICAgaWYgKGNhbGxlcl9tICE9IGFyZy0+bWJ1ZikKPj4gPj4gICAgICAgICAgICAgICAgcnRl X3BrdG1idWZfZnJlZShhcmctPm1idWYpOwo+PiA+PiAgICAgICAgcnRlX2ZyZWUoYXJnKTsKPj4g Pj4gfQo=