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 54EF2480BD for ; Fri, 9 Feb 2024 07:25:03 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3141468D02A; Fri, 9 Feb 2024 09:25:01 +0200 (EET) Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 934336800C1 for ; Fri, 9 Feb 2024 09:24:53 +0200 (EET) Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-5d862e8b163so199658a12.1 for ; Thu, 08 Feb 2024 23:24:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707463491; x=1708068291; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Pj/fNeRMAPChmleAjelAFd7s6eMSt9gxultFkpF1EYU=; b=aOmRLoVMQzzsGsVQPw0RMfioLktBwEG+bZhWUgB4ftNlQY2Cov924Kf0OddSe4sSPq +A8AwZ0+whg8H45D2LzfxOKu6Wukjg0KyrF91UdcTYSxowZuvd5H/zpjvuB1cw/Z3arY X4/xCrBlvG8OiMljPFqOlRa+Imh5Sz9rbGByC1MrdVjPNUUk11kWftJ6ISIiZ400msaU n8SrzsaymplmB+B6LYXe8E53E+yxv5XBrwP1aviAVwGF7e6FSwz0RZP7vlk/kHirntZ/ CRDhrdyJlu82P8JZVQCXG/7RBexhxlv/Ul4ACUi8Z9nNx8FLrK9Vk3tHJyQjwlSXX/jM 5zRQ== X-Gm-Message-State: AOJu0YyfgQuuMrrAT4W9rH+0lqBG9aY0BaJ67bduxS0/xkrMtIU5KAQQ WLVsTF2Hv15MViBB0PZTXDIihF85KICikndH/mnC402oELTdOUTpVK3KbLXKn3R2GQZYcaqSwtB /t+EimNfFQjtbC81YkliGCZmz0B55uAuEW69gSdRz79kX8f6u X-Google-Smtp-Source: AGHT+IFTJGN5bQx9MiaKewD4ODBZ0Znzy/issor5oU7lUWwVpwpiY9jXuyqVoDkJ0jqLzPAFL6Kff8qoOa4F/s3dSq8= X-Received: by 2002:a05:6a20:da9c:b0:19e:886c:9035 with SMTP id iy28-20020a056a20da9c00b0019e886c9035mr977241pzb.5.1707463491000; Thu, 08 Feb 2024 23:24:51 -0800 (PST) MIME-Version: 1.0 References: <20240209071721.1512857-1-marth64@proxyid.net> In-Reply-To: <20240209071721.1512857-1-marth64@proxyid.net> From: Marth64 Date: Fri, 9 Feb 2024 01:24:40 -0600 Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v9 1/2] libavformat: add dvdvideo demuxer, powered by libdvdnav and libdvdread X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: UGxlYXNlIGlnbm9yZSwgc2VlIHYxMC4KCk9uIEZyaSwgRmViIDksIDIwMjQgYXQgMToxN+KAr0FN IE1hcnRoNjQgPG1hcnRoNjRAcHJveHlpZC5uZXQ+IHdyb3RlOgoKPiBUaGFuayB5b3UgdG8gYWxs IHRoZSByZXZpZXdlcnMgZm9yIHlvdXIgdGltZS4KPgo+IFtSZW1haW5pbmcgUXVlc3Rpb25zXQo+ Cj4gQW5kcmVhcyBSOgo+ID4gVGhpcyBtYWtlcyB0aGlzIGNvZGUgYWRkIGFuIEFWU3RyZWFtIHRv IHRoZSBjaGlsZCBBVkZvcm1hdENvbnRleHQuIFRoaXMKPiA+IGlzIG5vdCBob3cgaXQgaXMgc3Vw cG9zZWQgdG8gYmUuIFlvdSBtYXkgbm90IGFkZCBBVlN0cmVhbXMgYmVoaW5kIGFuCj4gPiBpbnB1 dCBBVkZvcm1hdENvbnRleHQncyBiYWNrLgo+IFRoZSBpbnRlbnQgaGVyZSBpcyB0aGF0IEkgbmVl ZCB0byB0ZWxsIHRoZSBzdWJkZW11eGVyIHdoaWNoIHN0cmVhbXMgdG8KPiBleHBlY3QsCj4gaGVu Y2Ugd2h5IEkgZG9uJ3QgY2FsbCBmaW5kX3N0cmVhbV9pbmZvKCkgb24gaXQgb3IgbGV0IGl0IHBy b2JlIG9uIGl0J3MKPiBvd24uCj4gVGhlIERWRCBJRk8gaGVhZGVycyBnaXZlIG1lIGFsbCBvZiB0 aGUgaW5mb3JtYXRpb24gaW4gYWR2YW5jZS4KPiBUaGlzIGlzIHJlcXVpcmVkIEFGQUlLIGJlY2F1 c2UgdGhlcmUgbWlnaHQgYmUgZm9yY2VkIHN1YnRpdGxlIHRyYWNrcyB0aGF0Cj4gZG8gbm90Cj4g c3RhcnQgdW50aWwgbWlkLXBsYXliYWNrLiBBZnRlciBmdXJ0aGVyIGRpc2N1c3Npb24gd2l0aCBy ZXZpZXdlciwKPiBpdCBhcHBlYXJzIHRoZSBjb25jZXJuIGlzIG1vcmUgYWJvdXQgbG9uZyB0ZXJt IG1haW50YWluYWJpbGl0eToKPiA+IFNvbWUgKGRlKW11eGVycyAoaS5lLiB0aGUgYXZpIGRlbXV4 ZXIpIHVzZSBBVlN0cmVhbS5wcml2X2RhdGEgdG8gc3RvcmUKPiBzb21lIHBlci1zdHJlYW0gZGF0 YS4KPiA+IFRoZXkgYWxsb2NhdGUgdGhpcyBpbW1lZGlhdGVseSBhZnRlciBoYXZpbmcgYWRkZWQg dGhlIHN0cmVhbS4KPiA+IEltYWdpbmUgc29tZW9uZSBjaGFuZ2luZyB0aGUgbXBlZ3BzIGRlbXV4 ZXIgaW4gdGhpcyB3YXkuCj4gPiBUaGVuIGl0IHdvdWxkIGNyYXNoIHdoZW4gaXQgdHJpZWQgdG8g YWNjZXNzIHRoZSBzdHJlYW0ncyBwcml2YXRlIGRhdGEKPiA+IGluIGNhc2UgdGhlIHN0cmVhbSBo YXMgYmVlbiBhZGRlZCBieSBhbiBvdXRzaWRlIGRlbXV4ZXIuIgo+IEkgcmVzcGVjdCB0aGlzIGZl ZWRiYWNrLCBtYWtlcyBzZW5zZS4gSSdtIG5vdCBzdXJlIGlmIHRoaXMgaXMgYSBzaG93Cj4gc3Rv cHBlciBvciBub3QKPiBidXQgdGhvdWdodCB0byB0YWtlIHRoZSBjb21tdW5pdHkncyBvdmVyYWxs IG9waW5pb24gb24gYSBzb2x1dGlvbiAoaWYgYW55KT8KPgo+ID4gR2l2ZW4gdGhhdCB0aGlzIGNv ZGUgaGVyZSBpcyBhYnNvbHV0ZWx5IG5vdCBzcGVlZCByZWxldmFudCwgdGhlIExVVAo+ID4gY2Fu IGJlIGF2b2lkZWQgYnkgdXNpbmcgYXZfY2xpcF91aW50OCh2YWx1ZSAtIDEwMjQpLiBbQW5kcmVh cyBSLl0KPiBJIGhhZCBhIGhhcmQgdGltZSB0cnlpbmcgdG8gbWFrZSB0aGlzIHdvcmsgd2l0aCBZ VVZfVE9fUkdCMl9DQ0lSKCkgd2hpY2gKPiBzZWVtcyB0byBleHBlY3QgdGhlIExVVC4gSGFwcHkg dG8gcmVtb3ZlIGl0IGlmIHBvc3NpYmxlLCBqdXN0IGEgbGl0dGxlCj4gc3R1Y2sgb24gdGhpcy4K PiBUaGFuayB5b3UuCj4KPiBbQWRkcmVzc2VkXQo+Cj4gLSBEb2N1bWVudGF0aW9uIGZpeGVzCj4g LSBSb2J1c3QgbG9nZ2luZyBtZXNzYWdlcyAoYWxzbyBwcmludGluZyBleHBsaWNpdCBlcnJvciBy ZWFzb24gZnJvbSBkdmRuYXYpCj4gLSBTdHJ1Y3R1cmUgZml4ZXMgKHVzaW5nIGNvbnN0LCBldGMu KQo+IC0gQ29uZGVuc2VkIGxpYmR2ZG5hdi9saWJkdmRyZWFkIGxvZ2dpbmcgY2FsbGJhY2tzCj4g LSBNb3ZlZCBzb21lIHZhcmlhYmxlcyB0byB0aGUgc3RhY2sgKGFuZCByZW1vdmVkIHVuY2hlY2tl ZCBhbGxvY2F0aW9ucywKPiB0aXJlZCBleWVzLCB0aHgpCj4gLSBGb3JtYXR0aW5nIGNvbXBsaWFu Y2UgKGJlc3QgZWZmb3J0LCBwbGVhc2UgbGV0IG1lIGtub3cgaWYgZnVydGhlciBuZWVkZWQKPiAt IHRoeCkKPgo+IFtBZGRyZXNzZWQsIHdpdGggcmVzcG9uc2VdCj4KPiBTdGVmYW5vIFM6Cj4gPiB1 bnJlbGF0ZWQsIGJ1dCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gaGF2ZSBhIC1saXN0LXRpdGxlcyBv cHRpb24KPiBBZ3JlZWQgOi0pIFRoaXMgZmVhdHVyZSBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jl c3MgYXMgaXQgaXMgbm90IGEKPiBzdHJhaWdodGZvcndhcmQgam9iCj4gYW5kIHRoZXJlIGFyZSBn b29kIGFsdGVybmF0aXZlIHRvb2xzLCBzbyBJIGhhZCB0byBkZXByaW9yaXRpemUgKGN1cnJlbnRs eQo+IGluIHRpbmtlcmluZyBwaGFzZSkuCj4gSG9wZWZ1bGx5IHRoaXMgaXMgZmFpciwgdGhhbmtz Lgo+Cj4gQW5kcmVhcyBSOgo+ID4gV2hhdCBpcyB0aGlzIGhlYWRlciB1c2VkIGZvcj8KPiBhdmNv ZGVjLmMgLSB1c2VkIHRvIGFjY2VzcyBhdmN0eCBhbmQgc2V0IEZGX0NPREVDX1BST1BFUlRZX0NM T1NFRF9DQVBUSU9OUwo+IEludGVudCB3YXMgdG8gZGVjbGFyZSBhdmFpbGFiaWxpdHkgb2YgRUlB NjA4IENDLCBhcyB0aGlzIGlzIGtub3duIGF0IHRoZQo+IGNvbnRhaW5lciBsZXZlbC4KPgo+IHVy bC5oIC0gdXNlZCBmb3IgZmZfY2hlY2tfaW50ZXJydXB0KCkgLSBUaGlzIGlzIGluIG15IGFzc3Vt cHRpb24gdG8gZW5zdXJlCj4gYQo+IHNhZmUgY2FuY2VsbGF0aW9uIHBhdGggd2hpbGUgdXNpbmcg dGhlICJwcmVpbmRleCIgb3B0aW9uLCB3aGljaCByZXF1aXJlcwo+IGEgZnVsbCByZWFkIG9mIHRo ZSBkaXNjIHRvIGRldGVybWluZSBjb3JyZWN0IGNoYXB0ZXIgbWFya2Vycy4KPgo+ID4gIFdoeSBu b3Q/IFdlIGhhdmUgQVZfRElTUE9TSVRJT05fS0FSQU9LRS4KPiBUaGFua3MgLSBhZGRlZCB0aGUg ZGlzcG9zaXRpb24gYW5kIGFsc28gY2xlYXJlZCB1cCB0aGUgcG9pbnQgb2YgdGhlCj4gbWVzc2Fn ZSwKPiB3aGljaCBpcyB0byBzYXkgdGhhdCBrYXJhb2tlIHRyYWNrcyBoYXZlIGFkZGl0aW9uYWwg ZXh0ZW5zaW9uIG1ldGFkYXRhCj4gbG9jYXRlZCBpbiB0aGUgSUZPIGhlYWRlcnMuIEkgaGF2ZSBu b3Qgc3R1ZGllZCBob3cgdG8gcGFyc2UgaXQgYXQgdGhpcwo+IHRpbWUuCj4KPiBTaWduZWQtb2Zm LWJ5OiBNYXJ0aDY0IDxtYXJ0aDY0QHByb3h5aWQubmV0Pgo+IC0tLQo+ICBDaGFuZ2Vsb2cgICAg ICAgICAgICAgICAgIHwgICAgMiArCj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCAgICA4 ICsKPiAgZG9jL2RlbXV4ZXJzLnRleGkgICAgICAgICB8ICAxMzAgKysrKwo+ICBsaWJhdmZvcm1h dC9NYWtlZmlsZSAgICAgIHwgICAgMSArCj4gIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyAgfCAg ICAxICsKPiAgbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYyB8IDE0MTkgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICA2IGZpbGVzIGNoYW5nZWQsIDE1NjEgaW5zZXJ0aW9u cygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYwo+Cj4g ZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+IGluZGV4IGM1ZmIyMWQxOTguLjg4 NjUzYmM2ZDMgMTAwNjQ0Cj4gLS0tIGEvQ2hhbmdlbG9nCj4gKysrIGIvQ2hhbmdlbG9nCj4gQEAg LTI0LDYgKzI0LDggQEAgdmVyc2lvbiA8bmV4dD46Cj4gIC0gZmZtcGVnIENMSSBvcHRpb25zIG1h eSBub3cgYmUgdXNlZCBhcyAtL29wdCA8cGF0aD4sIHdoaWNoIGlzIGVxdWl2YWxlbnQKPiAgICB0 byAtb3B0IDxjb250ZW50cyBvZiBmaWxlIDxwYXRoPj4KPiAgLSBzaG93aW5mbyBiaXRzdHJlYW0g ZmlsdGVyCj4gKy0gRFZELVZpZGVvIGRlbXV4ZXIsIHBvd2VyZWQgYnkgbGliZHZkbmF2IGFuZCBs aWJkdmRyZWFkCj4gKwo+Cj4gIHZlcnNpb24gNi4xOgo+ICAtIGxpYmFyaWJjYXB0aW9uIGRlY29k ZXIKPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5kZXggZjcyNTMzYjdk Mi4uODMxYjlmNmNiNiAxMDA3NTUKPiAtLS0gYS9jb25maWd1cmUKPiArKysgYi9jb25maWd1cmUK PiBAQCAtMjI3LDYgKzIyNyw4IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9ydDoKPiAgICAtLWVu YWJsZS1saWJkYXZzMiAgICAgICAgZW5hYmxlIEFWUzIgZGVjb2RpbmcgdmlhIGxpYmRhdnMyIFtu b10KPiAgICAtLWVuYWJsZS1saWJkYzEzOTQgICAgICAgZW5hYmxlIElJREMtMTM5NCBncmFiYmlu ZyB1c2luZyBsaWJkYzEzOTQKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxpYnJh dzEzOTQgW25vXQo+ICsgIC0tZW5hYmxlLWxpYmR2ZG5hdiAgICAgICBlbmFibGUgbGliZHZkbmF2 LCBuZWVkZWQgZm9yIERWRCBkZW11eGluZyBbbm9dCj4gKyAgLS1lbmFibGUtbGliZHZkcmVhZCAg ICAgIGVuYWJsZSBsaWJkdmRyZWFkLCBuZWVkZWQgZm9yIERWRCBkZW11eGluZyBbbm9dCj4gICAg LS1lbmFibGUtbGliZmRrLWFhYyAgICAgIGVuYWJsZSBBQUMgZGUvZW5jb2RpbmcgdmlhIGxpYmZk ay1hYWMgW25vXQo+ICAgIC0tZW5hYmxlLWxpYmZsaXRlICAgICAgICBlbmFibGUgZmxpdGUgKHZv aWNlIHN5bnRoZXNpcykgc3VwcG9ydCB2aWEKPiBsaWJmbGl0ZSBbbm9dCj4gICAgLS1lbmFibGUt bGliZm9udGNvbmZpZyAgIGVuYWJsZSBsaWJmb250Y29uZmlnLCB1c2VmdWwgZm9yIGRyYXd0ZXh0 Cj4gZmlsdGVyIFtub10KPiBAQCAtMTgwNiw2ICsxODA4LDggQEAgRVhURVJOQUxfTElCUkFSWV9H UExfTElTVD0iCj4gICAgICBmcmVpMHIKPiAgICAgIGxpYmNkaW8KPiAgICAgIGxpYmRhdnMyCj4g KyAgICBsaWJkdmRuYXYKPiArICAgIGxpYmR2ZHJlYWQKPiAgICAgIGxpYnJ1YmJlcmJhbmQKPiAg ICAgIGxpYnZpZHN0YWIKPiAgICAgIGxpYngyNjQKPiBAQCAtMzUyMyw2ICszNTI3LDggQEAgZHRz X2RlbXV4ZXJfc2VsZWN0PSJkY2FfcGFyc2VyIgo+ICBkdHNoZF9kZW11eGVyX3NlbGVjdD0iZGNh X3BhcnNlciIKPiAgZHZfZGVtdXhlcl9zZWxlY3Q9ImR2cHJvZmlsZSIKPiAgZHZfbXV4ZXJfc2Vs ZWN0PSJkdnByb2ZpbGUiCj4gK2R2ZHZpZGVvX2RlbXV4ZXJfc2VsZWN0PSJtcGVncHNfZGVtdXhl ciIKPiArZHZkdmlkZW9fZGVtdXhlcl9kZXBzPSJsaWJkdmRuYXYgbGliZHZkcmVhZCIKPiAgZHhh X2RlbXV4ZXJfc2VsZWN0PSJyaWZmZGVjIgo+ICBlYWMzX2RlbXV4ZXJfc2VsZWN0PSJhYzNfcGFy c2VyIgo+ICBldmNfZGVtdXhlcl9zZWxlY3Q9ImV2Y19mcmFtZV9tZXJnZV9ic2YgZXZjX3BhcnNl ciIKPiBAQCAtNjc3MSw2ICs2Nzc3LDggQEAgZW5hYmxlZCBsaWJkYXYxZCAgICAgICAgICAmJiBy ZXF1aXJlX3BrZ19jb25maWcKPiBsaWJkYXYxZCAiZGF2MWQgPj0gMC41LjAiICJkYXYxZAo+ICBl bmFibGVkIGxpYmRhdnMyICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJkYXZzMiAi ZGF2czIgPj0gMS42LjAiCj4gZGF2czIuaCBkYXZzMl9kZWNvZGVyX29wZW4KPiAgZW5hYmxlZCBs aWJkYzEzOTQgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZGMxMzk0IGxpYmRjMTM5 NC0yCj4gZGMxMzk0L2RjMTM5NC5oIGRjMTM5NF9uZXcKPiAgZW5hYmxlZCBsaWJkcm0gICAgICAg ICAgICAmJiBjaGVja19wa2dfY29uZmlnIGxpYmRybSBsaWJkcm0geGY4NmRybS5oCj4gZHJtR2V0 VmVyc2lvbgo+ICtlbmFibGVkIGxpYmR2ZG5hdiAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZp ZyBsaWJkdmRuYXYgImR2ZG5hdiA+PQo+IDYuMS4xIiBkdmRuYXYvZHZkbmF2LmggZHZkbmF2X29w ZW4yCj4gK2VuYWJsZWQgbGliZHZkcmVhZCAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxp YmR2ZHJlYWQgImR2ZHJlYWQgPj0KPiA2LjEuMiIgZHZkcmVhZC9kdmRfcmVhZGVyLmggRFZET3Bl bjIgLWxkdmRyZWFkCj4gIGVuYWJsZWQgbGliZmRrX2FhYyAgICAgICAgJiYgeyBjaGVja19wa2df Y29uZmlnIGxpYmZka19hYWMgZmRrLWFhYwo+ICJmZGstYWFjL2FhY2VuY19saWIuaCIgYWFjRW5j T3BlbiB8fAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXF1aXJlIGxpYmZk a19hYWMgZmRrLWFhYy9hYWNlbmNfbGliLmgKPiBhYWNFbmNPcGVuIC1sZmRrLWFhYyAmJgo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuICJ1c2luZyBsaWJmZGsgd2l0aG91 dCBwa2ctY29uZmlnIjsKPiB9IH0KPiBkaWZmIC0tZ2l0IGEvZG9jL2RlbXV4ZXJzLnRleGkgYi9k b2MvZGVtdXhlcnMudGV4aQo+IGluZGV4IGU0YzViNTYwYTYuLjA2MmVhMmVhNDIgMTAwNjQ0Cj4g LS0tIGEvZG9jL2RlbXV4ZXJzLnRleGkKPiArKysgYi9kb2MvZGVtdXhlcnMudGV4aQo+IEBAIC0y ODUsNiArMjg1LDEzNiBAQCBUaGlzIGRlbXV4ZXIgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlv bjoKPgo+ICBAZW5kIHRhYmxlCj4KPiArQHNlY3Rpb24gZHZkdmlkZW8KPiArCj4gK0RWRC1WaWRl byBkZW11eGVyLCBwb3dlcmVkIGJ5IGxpYmR2ZG5hdiBhbmQgbGliZHZkcmVhZC4KPiArCj4gK0Nh biBkaXJlY3RseSBpbmdlc3QgRFZEIHRpdGxlcywgc3BlY2lmaWNhbGx5IHNlcXVlbnRpYWwgUEdD cywKPiAraW50byBhIGNvbnZlcnNpb24gcGlwZWxpbmUuIE1lbnVzIGFuZCBzZWVraW5nIGFyZSBu b3Qgc3VwcG9ydGVkIGF0IHRoaXMKPiB0aW1lLgo+ICsKPiArQmxvY2sgZGV2aWNlcyAoRFZEIGRy aXZlcyksIElTTyBmaWxlcywgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzIGFyZQo+IGFjY2VwdGVk Lgo+ICtBY3RpdmF0ZSB3aXRoIEBjb2Rley1mIGR2ZHZpZGVvfSBpbiBmcm9udCBvZiBvbmUgb2Yg dGhlc2UgaW5wdXRzLgo+ICsKPiArVW5kZXJseWluZyBwbGF5YmFjayBpcyBoYW5kbGVkIGJ5IGxp YmR2ZG5hdiwgYW5kIHN0cnVjdHVyZSBwYXJzaW5nIGJ5Cj4gbGliZHZkcmVhZC4KPiArRkZtcGVn IG11c3QgYmUgYnVpbHQgd2l0aCBHUEwgbGlicmFyeSBzdXBwb3J0IGF2YWlsYWJsZSBhcyB3ZWxs IGFzIHRoZQo+ICtjb25maWd1cmUgc3dpdGNoZXMgQGNvZGV7LS1lbmFibGUtbGliZHZkbmF2fSBh bmQKPiBAY29kZXstLWVuYWJsZS1saWJkdmRyZWFkfS4KPiArCj4gK1lvdSB3aWxsIG5lZWQgdG8g cHJvdmlkZSBlaXRoZXIgdGhlIGRlc2lyZWQgInRpdGxlIG51bWJlciIgb3IgZXhhY3QKPiBQR0Mv UEcgY29vcmRpbmF0ZXMuCj4gK01hbnkgb3Blbi1zb3VyY2UgRFZEIHBsYXllcnMgYW5kIHRvb2xz IGNhbiBhaWQgaW4gcHJvdmlkaW5nIHRoaXMKPiBpbmZvcm1hdGlvbi4KPiArSWYgbm90IHNwZWNp ZmllZCwgdGhlIGRlbXV4ZXIgd2lsbCBkZWZhdWx0IHRvIHRpdGxlIDEgd2hpY2ggd29ya3MgZm9y Cj4gbWFueSBkaXNjcy4KPiArSG93ZXZlciwgZHVlIHRvIHRoZSBmbGV4aWJpbGl0eSBvZiB0aGUg Zm9ybWF0LCBpdCBpcyByZWNvbW1lbmRlZCB0byBjaGVjawo+IG1hbnVhbGx5Lgo+ICtUaGVyZSBh cmUgbWFueSBkaXNjcyB0aGF0IGFyZSBhdXRob3JlZCBzdHJhbmdlbHkgb3Igd2l0aCBpbnZhbGlk IGhlYWRlcnMuCj4gKwo+ICtJZiB0aGUgaW5wdXQgaXMgYSByZWFsIERWRCBkcml2ZSwgcGxlYXNl IG5vdGUgdGhhdCB0aGVyZSBhcmUgc29tZSBkcml2ZXMKPiB3aGljaCBtYXkKPiArc2lsZW50bHkg ZmFpbCBvbiByZWFkaW5nIGJhZCBzZWN0b3JzIGZyb20gdGhlIGRpc2MsIHJldHVybmluZyByYW5k b20gYml0cwo+IGluc3RlYWQKPiArd2hpY2ggaXMgZWZmZWN0aXZlbHkgY29ycnVwdCBkYXRhLiBU aGlzIGlzIGVzcGVjaWFsbHkgcHJvbWluZW50IG9uIGFnaW5nCj4gb3Igcm90dGluZyBkaXNjcy4K PiArQSBzZWNvbmQgcGFzcyBhbmQgaW50ZWdyaXR5IGNoZWNrcyB3b3VsZCBiZSBuZWVkZWQgdG8g ZGV0ZWN0IHRoZQo+IGNvcnJ1cHRpb24uCj4gK1RoaXMgaXMgbm90IGFuIEZGbXBlZyBpc3N1ZS4K PiArCj4gK0BzdWJzZWN0aW9uIEJhY2tncm91bmQKPiArCj4gK0RWRC1WaWRlbyBpcyBub3QgYSBk aXJlY3RseSBhY2Nlc3NpYmxlLCBsaW5lYXIgY29udGFpbmVyIGZvcm1hdCBpbiB0aGUKPiArdHJh ZGl0aW9uYWwgc2Vuc2UuIEluc3RlYWQsIGl0IGFsbG93cyBmb3IgY29tcGxleCBhbmQgcHJvZ3Jh bW1hdGljCj4gcGxheWJhY2sgb2YKPiArY2FyZWZ1bGx5IG11eGVkIE1QRUctUFMgc3RyZWFtcyB0 aGF0IGFyZSBzdG9yZWQgaW4gaGVhZGVybGVzcyBWT0IgZmlsZXMuCj4gK1RvIHRoZSBlbmQtdXNl ciwgdGhlc2Ugc3RyZWFtcyBhcmUga25vd24gc2ltcGx5IGFzICJ0aXRsZXMiLCBidXQgdGhlCj4g YWN0dWFsCj4gK2xvZ2ljYWwgcGxheWJhY2sgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSBvbmUgb3Ig bW9yZSAiUEdDcyIsIG9yIFByb2dyYW0KPiBHcm91cCBDaGFpbnMsCj4gK3dpdGhpbiB0aGUgdGl0 bGUuIFRoZSBQR0MgaXMgaW4gdHVybiBjb21wcmlzZWQgb2YgbXVsdGlwbGUgIlBHcyIsIG9yCj4g UHJvZ3JhbXMiLAo+ICt3aGljaCBhcmUgdGhlIGFjdHVhbCB2aWRlbyBzZWdtZW50cyAoYW5kIGZv ciBhIHR5cGljYWwgdmlkZW8gZmVhdHVyZSwKPiBzZXF1ZW50aWFsbHkKPiArb3JkZXJlZCkuIFRo ZSBQR0Mgc3RydWN0dXJlLCBhbG9uZyB3aXRoIHN0cmVhbSBsYXlvdXQgYW5kIG1ldGFkYXRhLCBh cmUKPiBzdG9yZWQgaW4KPiArSUZPIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBwYXJzZWQuIFBHQ3Mg Y2FuIGJlIHRob3VnaHQgb2YgYXMgcGxheWxpc3RzIGluCj4gZWFzaWVyIHRlcm1zLgo+ICsKPiAr QW4gYWN0dWFsIERWRCBwbGF5ZXIgcmVsaWVzIG9uIHVzZXIgR1VJIGludGVyYWN0aW9uIHZpYSBt ZW51cyBhbmQgYW4KPiBpbnRlcm5hbCBWTQo+ICt0byBkcml2ZSB0aGUgZGlyZWN0aW9uIG9mIGRl bXV4aW5nLiBHZW5lcmFsbHksIHRoZSB1c2VyIHdvdWxkIGVpdGhlcgo+IG5hdmlnYXRlICh2aWEg bWVudXMpCj4gK29yIGF1dG9tYXRpY2FsbHkgYmUgcmVkaXJlY3RlZCB0byB0aGUgUEdDIG9mIHRo ZWlyIGNob2ljZS4gRHVyaW5nIHRoaXMKPiBwcm9jZXNzIGFuZAo+ICt0aGUgc3Vic2VxdWVudCBw bGF5YmFjaywgdGhlIERWRCBwbGF5ZXIncyBpbnRlcm5hbCBWTSBhbHNvIG1haW50YWlucyBhCj4g c3RhdGUgYW5kCj4gK2V4ZWN1dGVzIGluc3RydWN0aW9ucyB0aGF0IGNhbiBjcmVhdGUganVtcHMg dG8gZGlmZmVyZW50IHNlY3RvcnMgZHVyaW5nCj4gcGxheWJhY2suCj4gK1RoaXMgaXMgd2h5IGxp YmR2ZG5hdiBpcyBpbnZvbHZlZCwgYXMgYSBsaW5lYXIgcmVhZCBvZiB0aGUgTVBFRy1QUyBibG9i cwo+IG9uIHRoZQo+ICtkaXNjIChWT0JzKSBpcyBub3QgZW5vdWdoIHRvIHByb2R1Y2UgdGhlIHJp Z2h0IHNlcXVlbmNlIGluIG1hbnkgY2FzZXMuCj4gKwo+ICtUaGVyZSBhcmUgbWFueSBvdGhlciBE VkQgc3RydWN0dXJlcyAoYSBsb25nIHN1YmplY3QpIHRoYXQgd2lsbCBub3QgYmUKPiBkaXNjdXNz ZWQgaGVyZS4KPiArTkFWIHBhY2tldHMsIGluIHBhcnRpY3VsYXIsIGFyZSBoYW5kbGVkIGJ5IHRo aXMgZGVtdXhlciB0byBidWlsZCBhY2N1cmF0ZQo+IHRpbWluZwo+ICtidXQgbm90IGVtaXR0ZWQg YXMgYSBzdHJlYW0uIEZvciBhIGdvb2QgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nLCByZWZlcgo+ IHRvOgo+ICtAdXJsewo+IGh0dHBzOi8vY29kZS52aWRlb2xhbi5vcmcvdmlkZW9sYW4vbGliZHZk bmF2Ly0vYmxvYi9tYXN0ZXIvZG9jL2R2ZF9zdHJ1Y3R1cmVzCj4gfQo+ICsKPiArQHN1YnNlY3Rp b24gT3B0aW9ucwo+ICsKPiArVGhpcyBkZW11eGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRp b25zOgo+ICsKPiArQHRhYmxlIEBvcHRpb24KPiArCj4gK0BpdGVtIHRpdGxlIEB2YXJ7aW50fQo+ ICtUaGUgdGl0bGUgbnVtYmVyIHRvIHBsYXkuIE11c3QgYmUgc2V0IGlmIEBvcHRpb257cGdjfSBh bmQgQG9wdGlvbntwZ30gYXJlCj4gbm90IHNldC4KPiArRGVmYXVsdCBpcyAwIChhdXRvKSwgd2hp Y2ggY3VycmVudGx5IG9ubHkgc2VsZWN0cyB0aGUgZmlyc3QgYXZhaWxhYmxlCj4gdGl0bGUgKHRp dGxlIDEpCj4gK2FuZCBub3RpZmllcyB0aGUgdXNlciBhYm91dCB0aGUgaW1wbGljYXRpb25zLgo+ ICsKPiArQGl0ZW0gY2hhcHRlcl9zdGFydCBAdmFye2ludH0KPiArVGhlIGNoYXB0ZXIsIG9yIFBU VCAocGFydC1vZi10aXRsZSksIG51bWJlciB0byBzdGFydCBhdC4gRGVmYXVsdCBpcyAxLgo+ICsK PiArQGl0ZW0gY2hhcHRlcl9lbmQgQHZhcntpbnR9Cj4gK1RoZSBjaGFwdGVyLCBvciBQVFQgKHBh cnQtb2YtdGl0bGUpLCBudW1iZXIgdG8gZW5kIGF0LiBEZWZhdWx0IGlzIDAsCj4gK3doaWNoIGlz IGEgc3BlY2lhbCB2YWx1ZSB0byBzaWduYWwgZW5kIGF0IHRoZSBsYXN0IHBvc3NpYmxlIGNoYXB0 ZXIuCj4gKwo+ICtAaXRlbSBhbmdsZSBAdmFye2ludH0KPiArVGhlIHZpZGVvIGFuZ2xlIG51bWJl ciwgcmVmZXJyaW5nIHRvIHdoYXQgaXMgZXNzZW50aWFsbHkgYW4gYWRkaXRpb25hbAo+ICt2aWRl byBzdHJlYW0gdGhhdCBpcyBjb21wb3NlZCBmcm9tIGFsdGVybmF0ZSBmcmFtZXMgaW50ZXJsZWF2 ZWQgaW4gdGhlCj4gVk9Ccy4KPiArRGVmYXVsdCBpcyAxLgo+ICsKPiArQGl0ZW0gcmVnaW9uIEB2 YXJ7aW50fQo+ICtUaGUgcmVnaW9uIGNvZGUgdG8gdXNlIGZvciBwbGF5YmFjay4gU29tZSBkaXNj cyBtYXkgdXNlIHRoaXMgdG8gZGVmYXVsdAo+IHBsYXliYWNrCj4gK2F0IGEgcGFydGljdWxhciBh bmdsZSBpbiBkaWZmZXJlbnQgcmVnaW9ucy4gVGhpcyBvcHRpb24gd2lsbCBub3QgYWZmZWN0Cj4g dGhlIHJlZ2lvbiBjb2RlCj4gK29mIGEgcmVhbCBEVkQgZHJpdmUsIGlmIHVzZWQgYXMgYW4gaW5w dXQuIERlZmF1bHQgaXMgMCwgIndvcmxkIi4KPiArCj4gK0BpdGVtIHBnYyBAdmFye2ludH0KPiAr VGhlIGVudHJ5IFBHQyB0byBzdGFydCBwbGF5YmFjaywgaW4gY29uanVuY3Rpb24gd2l0aCBAb3B0 aW9ue3BnfS4KPiArQWx0ZXJuYXRpdmUgdG8gc2V0dGluZyBAb3B0aW9ue3RpdGxlfS4KPiArQ2hh cHRlciBtYXJrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KPiArRGVmYXVsdCBp cyAwLCBhdXRvbWF0aWNhbGx5IHJlc29sdmUgZnJvbSB2YWx1ZSBvZiBAb3B0aW9ue3RpdGxlfS4K PiArCj4gK0BpdGVtIHBnIEB2YXJ7aW50fQo+ICtUaGUgZW50cnkgUEcgdG8gc3RhcnQgcGxheWJh Y2ssIGluIGNvbmp1bmN0aW9uIHdpdGggQG9wdGlvbntwZ2N9Lgo+ICtBbHRlcm5hdGl2ZSB0byBz ZXR0aW5nIEBvcHRpb257dGl0bGV9Lgo+ICtDaGFwdGVyIG1hcmtlcnMgYXJlIG5vdCBzdXBwb3J0 ZWQgYXQgdGhpcyB0aW1lLgo+ICtEZWZhdWx0IGlzIDAsIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZSBm cm9tIHZhbHVlIG9mIEBvcHRpb257dGl0bGV9Lgo+ICsKPiArQGl0ZW0gcHJlaW5kZXggQHZhcnti b29sfQo+ICtFbmFibGUgdGhpcyB0byBoYXZlIGFjY3VyYXRlIGNoYXB0ZXIgKFBUVCkgbWFya2Vy cyBhbmQgZHVyYXRpb24KPiBtZWFzdXJlbWVudCwKPiArd2hpY2ggcmVxdWlyZXMgYSBzbG93IHNl Y29uZCBwYXNzIHJlYWQgaW4gb3JkZXIgdG8gaW5kZXggdGhlIGNoYXB0ZXIKPiBtYXJrZXIKPiAr dGltZXN0YW1wcyBmcm9tIE5BViBwYWNrZXRzLiBUaGlzIGlzIG5vbi1pZGVhbCBleHRyYSB3b3Jr IGZvciByZWFsCj4gb3B0aWNhbCBkcml2ZXMuCj4gK0l0IGlzIHJlY29tbWVuZGVkIGFuZCBmYXN0 ZXIgdG8gdXNlIHRoaXMgb3B0aW9uIHdpdGggYSBiYWNrdXAgb2YgdGhlIERWRAo+IHN0cnVjdHVy ZQo+ICtzdG9yZWQgb24gYSBoYXJkIGRyaXZlLiBOb3QgY29tcGF0aWJsZSB3aXRoIEBvcHRpb257 cGdjfSBhbmQgQG9wdGlvbntwZ30uCj4gK0RlZmF1bHQgaXMgMCwgZmFsc2UuCj4gKwo+ICtAaXRl bSB0cmltIEB2YXJ7Ym9vbH0KPiArU2tpcCBwYWRkaW5nIGNlbGxzIChpLmUuIGNlbGxzIHNob3J0 ZXIgdGhhbiAxIHNlY29uZCkgZnJvbSB0aGUgYmVnaW5uaW5nLgo+ICtUaGVyZSBleGlzdCBtYW55 IGRpc2NzIHdpdGggZmlsbGVyIHNlZ21lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFBHQywK PiArb2Z0ZW4gd2l0aCBqdW5rIGRhdGEgaW50ZW5kZWQgZm9yIGNvbnRyb2xsaW5nIGEgcmVhbCBE VkQgcGxheWVyJ3MKPiArYnVmZmVyaW5nIHNwZWVkIGFuZCB3aXRoIG5vIG90aGVyIG1hdGVyaWFs IGRhdGEgdmFsdWUuCj4gK0RlZmF1bHQgaXMgMSwgdHJ1ZS4KPiArCj4gK0BlbmQgdGFibGUKPiAr Cj4gK0BzdWJzZWN0aW9uIEV4YW1wbGVzCj4gKwo+ICtAaXRlbWl6ZQo+ICtAaXRlbQo+ICtPcGVu IHRpdGxlIDMgZnJvbSBhIGdpdmVuIERWRCBzdHJ1Y3R1cmU6Cj4gK0BleGFtcGxlCj4gK2ZmbXBl ZyAtZiBkdmR2aWRlbyAtdGl0bGUgMyAtaSA8cGF0aCB0byBEVkQ+IC4uLgo+ICtAZW5kIGV4YW1w bGUKPiArCj4gK0BpdGVtCj4gK09wZW4gY2hhcHRlcnMgMy02IGZyb20gdGl0bGUgMSBmcm9tIGEg Z2l2ZW4gRFZEIHN0cnVjdHVyZToKPiArQGV4YW1wbGUKPiArZmZtcGVnIC1mIGR2ZHZpZGVvIC1j aGFwdGVyX3N0YXJ0IDMgLWNoYXB0ZXJfZW5kIDYgLXRpdGxlIDEgLWkgPHBhdGggdG8KPiBEVkQ+ IC4uLgo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BpdGVtCj4gK09wZW4gb25seSBjaGFwdGVyIDUg ZnJvbSB0aXRsZSAxIGZyb20gYSBnaXZlbiBEVkQgc3RydWN0dXJlOgo+ICtAZXhhbXBsZQo+ICtm Zm1wZWcgLWYgZHZkdmlkZW8gLWNoYXB0ZXJfc3RhcnQgNSAtY2hhcHRlcl9lbmQgNSAtdGl0bGUg MSAtaSA8cGF0aCB0bwo+IERWRD4gLi4uCj4gK0BlbmQgZXhhbXBsZQo+ICtAZW5kIGl0ZW1pemUK PiArCj4gIEBzZWN0aW9uIGVhCj4KPiAgRWxlY3Ryb25pYyBBcnRzIE11bHRpbWVkaWEgZm9ybWF0 IGRlbXV4ZXIuCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3Jt YXQvTWFrZWZpbGUKPiBpbmRleCAwNWI5YjhhMTE1Li5kZjY5NzM0ODc3IDEwMDY0NAo+IC0tLSBh L2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gKysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBAQCAt MTkyLDYgKzE5Miw3IEBAIE9CSlMtJChDT05GSUdfRFRTX01VWEVSKSAgICAgICAgICAgICAgICAg Kz0gcmF3ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19EVl9NVVhFUikgICAgICAgICAgICAgICAgICAr PSBkdmVuYy5vCj4gIE9CSlMtJChDT05GSUdfRFZCU1VCX0RFTVVYRVIpICAgICAgICAgICAgKz0g ZHZic3ViLm8gcmF3ZGVjLm8KPiAgT0JKUy0kKENPTkZJR19EVkJUWFRfREVNVVhFUikgICAgICAg ICAgICArPSBkdmJ0eHQubyByYXdkZWMubwo+ICtPQkpTLSQoQ09ORklHX0RWRFZJREVPX0RFTVVY RVIpICAgICAgICAgICs9IGR2ZHZpZGVvZGVjLm8KPiAgT0JKUy0kKENPTkZJR19EWEFfREVNVVhF UikgICAgICAgICAgICAgICArPSBkeGEubwo+ICBPQkpTLSQoQ09ORklHX0VBX0NEQVRBX0RFTVVY RVIpICAgICAgICAgICs9IGVhY2RhdGEubwo+ICBPQkpTLSQoQ09ORklHX0VBX0RFTVVYRVIpICAg ICAgICAgICAgICAgICs9IGVsZWN0cm9uaWNhcnRzLm8KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3Jt YXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4gaW5kZXggYjA0YjQz Y2FiMy4uM2U5MDVjMjNmOCAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMK PiArKysgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiBAQCAtMTUwLDYgKzE1MCw3IEBAIGV4 dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9kdl9kZW11eGVyOwo+ICBleHRlcm4gY29uc3Qg RkZPdXRwdXRGb3JtYXQgZmZfZHZfbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0 ICBmZl9kdmJzdWJfZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R2 YnR4dF9kZW11eGVyOwo+ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHZkdmlkZW9f ZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R4YV9kZW11eGVyOwo+ ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZWFfZGVtdXhlcjsKPiAgZXh0ZXJuIGNv bnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7Cj4gZGlmZiAtLWdpdCBhL2xp YmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMgYi9saWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5jODYyODYwOWM5Cj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMKPiBAQCAtMCwwICsxLDE0 MTkgQEAKPiArLyoKPiArICogRFZELVZpZGVvIGRlbXV4ZXIsIHBvd2VyZWQgYnkgbGliZHZkbmF2 IGFuZCBsaWJkdmRyZWFkCj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4K PiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Cj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5z ZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BCj4gMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsvKgo+ICsgKiBTZWUgZG9j L2RlbXV4ZXJzLnRleGkgZm9yIGEgaGlnaC1sZXZlbCBvdmVydmlldy4KPiArICoKPiArICogVGhl IHRhY3RpY2FsIGFwcHJvYWNoIGlzIGFzIGZvbGxvd3M6Cj4gKyAqIDEpIE9wZW4gdGhlIHZvbHVt ZSB3aXRoIGR2ZHJlYWQKPiArICogMikgQW5hbHl6ZSB0aGUgdXNlci1yZXF1ZXN0ZWQgdGl0bGUg YW5kIFBHQyBjb29yZGluYXRlcyBpbiB0aGUgSUZPCj4gc3RydWN0dXJlcwo+ICsgKiAzKSBSZXF1 ZXN0IHBsYXliYWNrIGF0IHRoZSBjb29yZGluYXRlcyBhbmQgY2hvc2VuIGFuZ2xlIHdpdGggZHZk bmF2Cj4gKyAqIDUpIEJlZ2luIHRoZSBwbGF5YmFjayAocmVhZGluZyBhbmQgZGVtdXhpbmcpIG9m IE1QRUctUFMgYmxvY2tzCj4gKyAqIDYpIEVuZCBwbGF5YmFjayBpZiBuYXZpZ2F0aW9uIGdvZXMg YmFja3dhcmRzLCB0byBhIG1lbnUsIG9yIGEKPiBkaWZmZXJlbnQgUEdDIG9yIGFuZ2xlCj4gKyAq IDcpIENsb3NlIHRoZSBkdmRuYXYgVk0sIGFuZCBmcmVlIGR2ZHJlYWQncyBJRk8gc3RydWN0dXJl cwo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkdmRuYXYvZHZkbmF2Lmg+Cj4gKyNpbmNsdWRlIDxk dmRyZWFkL2R2ZF9yZWFkZXIuaD4KPiArI2luY2x1ZGUgPGR2ZHJlYWQvaWZvX3JlYWQuaD4KPiAr I2luY2x1ZGUgPGR2ZHJlYWQvaWZvX3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxkdmRyZWFkL25hdl9y ZWFkLmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9hdmNvZGVjLmgiCj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnV0aWwuaCIK PiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKPiArI2luY2x1ZGUgImxpYmF2 dXRpbC9tZW0uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiArI2luY2x1ZGUgImxp YmF2dXRpbC9zYW1wbGVmbXQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lLmgiCj4gKyNp bmNsdWRlICJsaWJhdnV0aWwvdGltZXN0YW1wLmgiCj4gKwo+ICsjaW5jbHVkZSAiYXZmb3JtYXQu aCIKPiArI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImF2bGFuZ3VhZ2Uu aCIKPiArI2luY2x1ZGUgImRlbXV4LmgiCj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ICsjaW5j bHVkZSAidXJsLmgiCj4gKwo+ICsjZGVmaW5lIERWRFZJREVPX01BWF9QU19TRUFSQ0hfQkxPQ0tT ICAgICAgICAgICAgICAgICAgIDEyOAo+ICsjZGVmaW5lIERWRFZJREVPX0JMT0NLX1NJWkUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDgKPiArI2RlZmluZSBEVkRWSURFT19USU1FX0JB U0VfUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCkgeyAxLAo+IDkwMDAw IH0KPiArI2RlZmluZSBEVkRWSURFT19QVFNfV1JBUF9CSVRTICAgICAgICAgICAgICAgICAgICAg ICAgICA2NCAvKiBWT0JVcyB1c2UKPiAzMiAoUEVTIGFsbG93cyAzMykgKi8KPiArCj4gKyNkZWZp bmUgRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgMTAyNAo+ ICsKPiArZW51bSBEVkRWaWRlb1N1YnBpY3R1cmVWaWV3cG9ydCB7Cj4gKyAgICBEVkRWSURFT19T VUJQX1ZJRVdQT1JUX0ZVTExTQ1JFRU4sCj4gKyAgICBEVkRWSURFT19TVUJQX1ZJRVdQT1JUX1dJ REVTQ1JFRU4sCj4gKyAgICBEVkRWSURFT19TVUJQX1ZJRVdQT1JUX0xFVFRFUkJPWCwKPiArICAg IERWRFZJREVPX1NVQlBfVklFV1BPUlRfUEFOU0NBTgo+ICt9Owo+ICtzdGF0aWMgY29uc3QgY2hh ciBkdmR2aWRlb19zdWJwX3ZpZXdwb3J0X2xhYmVsc1s0XVsxM10gPSB7Cj4gKyAgICAiRnVsbHNj cmVlbiIsICJXaWRlc2NyZWVuIiwgIkxldHRlcmJveCIsICJQYW4gYW5kIFNjYW4iCj4gK307Cj4g Kwo+ICt0eXBlZGVmIHN0cnVjdCBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkgewo+ICsgICAg aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRjb2RlOwo+ICsgICAgZW51 bSBBVkNvZGVjSUQgICAgICAgICAgICAgICAgICAgICAgY29kZWNfaWQ7Cj4gKyAgICBpbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDsKPiArICAgIGludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDsKPiArICAgIEFWUmF0aW9uYWwgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhcjsKPiArICAgIEFWUmF0aW9uYWwgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyYW1lcmF0ZTsKPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhhc19jYzsKPiArfSBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnk7Cj4gKwo+ICt0eXBl ZGVmIHN0cnVjdCBEVkRWaWRlb1BHQ0F1ZGlvU3RyZWFtRW50cnkgewo+ICsgICAgaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRjb2RlOwo+ICsgICAgZW51bSBBVkNvZGVj SUQgICAgICAgICAgICAgICAgICAgICAgY29kZWNfaWQ7Cj4gKyAgICBpbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzYW1wbGVfZm10Owo+ICsgICAgaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Cj4gKyAgICBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiaXRfZGVwdGg7Cj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuYl9jaGFubmVsczsKPiArICAgIEFWQ2hhbm5lbExheW91dCAgICAgICAg ICAgICAgICAgICAgIGNoX2xheW91dDsKPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpc3Bvc2l0aW9uOwo+ICsgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAg ICAgICAgICAgKmxhbmdfaXNvOwo+ICt9IERWRFZpZGVvUEdDQXVkaW9TdHJlYW1FbnRyeTsKPiAr Cj4gK3R5cGVkZWYgc3RydWN0IERWRFZpZGVvUEdDU3VidGl0bGVTdHJlYW1FbnRyeSB7Cj4gKyAg ICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGNvZGU7Cj4gKyAgICBl bnVtIERWRFZpZGVvU3VicGljdHVyZVZpZXdwb3J0ICAgICB2aWV3cG9ydDsKPiArICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uOwo+ICsgICAgY29uc3Qg Y2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgKmxhbmdfaXNvOwo+ICt9IERWRFZpZGVvUEdD U3VidGl0bGVTdHJlYW1FbnRyeTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IERWRFZpZGVvUGxheWJh Y2tTdGF0ZSB7Cj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbG47ICAgICAg ICAgICAgICAvKiBJRCBvZiB0aGUgYWN0aXZlCj4gY2VsbCAqLwo+ICsgICAgaW50ICAgICAgICAg ICAgICAgICAgICAgICAgIGVudHJ5X3BnbjsgICAgICAgICAgLyogSUQgb2YgdGhlIFBHIHdlCj4g YXJlIHN0YXJ0aW5nIGluICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgaW5f cGdjOyAgICAgICAgICAgICAvKiBpZiBvdXIgbmF2aWdhdG9yCj4gaXMgaW4gdGhlIFBHQyAqLwo+ ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGluX3BzOyAgICAgICAgICAgICAgLyog aWYgb3VyIG5hdmlnYXRvcgo+IGlzIGluIHRoZSBwcm9ncmFtIHN0cmVhbSAqLwo+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Z0czsgICAgICAgICAgICAgLyogaWYgb3VyIG5h dmlnYXRvcgo+IGlzIGluIHRoZSBWVFMgKi8KPiArICAgIGludDY0X3QgICAgICAgICAgICAgICAg ICAgICBuYXZfcHRzOyAgICAgICAgICAgIC8qIFBUUyBhY2NvcmRpbmcgdG8KPiBJRk8sIG5vdCBm cmFtZS1hY2N1cmF0ZSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2Nl bGxzX3BsYXllZDsgICAgLyogbnVtYmVyIG9mIGNlbGxzCj4gcGxheWVkIGJhY2sgc28gZmFyICov Cj4gKyAgICB1aW50NjRfdCAgICAgICAgICAgICAgICAgICAgcGdjX2R1cmF0aW9uX2VzdDsgICAv KiBlc3RpbWF0ZWQgZHVyYXRpb24KPiBhcyByZXBvcnRlZCBieSBJRk8gKi8KPiArICAgIHVpbnQ2 NF90ICAgICAgICAgICAgICAgICAgICBwZ2NfZWxhcHNlZDsgICAgICAgIC8qIHRoZSBlbGFwc2Vk IHRpbWUKPiBvZiB0aGUgUEdDLCBjZWxsLXJlbGF0aXZlICovCj4gKyAgICBpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgcGdjX25iX3BnX2VzdDsgICAgICAvKiBudW1iZXIgb2YgUEdzIGFzCj4g cmVwb3J0ZWQgYnkgSUZPcyAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHBn Y247ICAgICAgICAgICAgICAgLyogSUQgb2YgdGhlIFBHQyB3ZQo+IGFyZSBwbGF5aW5nICovCj4g KyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGduOyAgICAgICAgICAgICAgICAvKiBJ RCBvZiB0aGUgUEcgd2UKPiBhcmUgaW4gbm93ICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgcHR0OyAgICAgICAgICAgICAgICAvKiBJRCBvZiB0aGUgY2hhcHRlcgo+IHdlIGFy ZSBpbiBub3cgKi8KPiArICAgIGludDY0X3QgICAgICAgICAgICAgICAgICAgICB0c19vZmZzZXQ7 ICAgICAgICAgIC8qIFBUUyBkaXNjb250aW51aXR5Cj4gb2Zmc2V0IChleC4gVk9CIGNoYW5nZSkg Ki8KPiArICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICB2b2J1X2R1cmF0aW9uOyAgICAg IC8qIGR1cmF0aW9uIG9mIHRoZQo+IGN1cnJlbnQgVk9CVSAqLwo+ICsgICAgdWludDMyX3QgICAg ICAgICAgICAgICAgICAgIHZvYnVfZV9wdG07ICAgICAgICAgLyogZW5kIFBUUyBvZiB0aGUKPiBj dXJyZW50IFZPQlUgKi8KPiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICB2dHNuOyAg ICAgICAgICAgICAgIC8qIElEIG9mIHRoZSBhY3RpdmUKPiBWVFMgKHZpZGVvIHRpdGxlIHNldCkg Ki8KPiArICAgIHVpbnQ2NF90ICAgICAgICAgICAgICAgICAgICAqcGdjX3BnX3RpbWVzX2VzdDsg IC8qIFBHIHN0YXJ0IHRpbWVzIGFzCj4gcmVwb3J0ZWQgYnkgSUZPICovCj4gKyAgICBwZ2NfdCAg ICAgICAgICAgICAgICAgICAgICAgKnBnYzsgICAgICAgICAgICAgICAvKiBoYW5kbGUgdG8gdGhl Cj4gYWN0aXZlIFBHQyAqLwo+ICsgICAgZHZkbmF2X3QgICAgICAgICAgICAgICAgICAgICpkdmRu YXY7ICAgICAgICAgICAgLyogaGFuZGxlIHRvCj4gbGliZHZkbmF2ICovCj4gK30gRFZEVmlkZW9Q bGF5YmFja1N0YXRlOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9EZW11eENvbnRleHQg ewo+ICsgICAgY29uc3QgQVZDbGFzcyAgICAgICAgICAgICAgICpjbGFzczsKPiArCj4gKyAgICAv KiBvcHRpb25zICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2FuZ2xl OyAgICAgICAgICAvKiB0aGUgdXNlci1wcm92aWRlZAo+IGFuZ2xlIG51bWJlciAoMS1pbmRleGVk KSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9jaGFwdGVyX2VuZDsg ICAgLyogdGhlIHVzZXItcHJvdmlkZWQKPiBleGl0IFBUVCAoMCBmb3IgbGFzdCkgKi8KPiArICAg IGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfY2hhcHRlcl9zdGFydDsgIC8qIHRoZSB1 c2VyLXByb3ZpZGVkCj4gZW50cnkgUFRUICgxLWluZGV4ZWQpICovCj4gKyAgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgb3B0X3BnOyAgICAgICAgICAgICAvKiB0aGUgdXNlci1wcm92aWRl ZAo+IFBHIG51bWJlciAoMS1pbmRleGVkKSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAg ICAgICAgIG9wdF9wZ2M7ICAgICAgICAgICAgLyogdGhlIHVzZXItcHJvdmlkZWQKPiBQR0MgbnVt YmVyICgxLWluZGV4ZWQpICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0 X3ByZWluZGV4OyAgICAgICAvKiBwcmUtaW5kZXhpbmcgbW9kZQo+ICgyLXBhc3MgcmVhZCkgKi8K PiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcmVnaW9uOyAgICAgICAgIC8q IHRoZSB1c2VyLXByb3ZpZGVkCj4gcmVnaW9uIGRpZ2l0ICovCj4gKyAgICBpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgb3B0X3RpdGxlOyAgICAgICAgICAvKiB0aGUgdXNlci1wcm92aWRlZAo+ IHRpdGxlIG51bWJlciAoMS1pbmRleGVkKSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAg ICAgICAgIG9wdF90cmltOyAgICAgICAgICAgLyogdHJpbSBwYWRkaW5nIGNlbGxzCj4gYXQgYmVn aW5uaW5nICovCj4gKwo+ICsgICAgLyogc3ViZGVtdXggKi8KPiArICAgIGNvbnN0IEFWSW5wdXRG b3JtYXQgICAgICAgICAqbXBlZ19mbXQ7ICAgICAgICAgIC8qIGlubmVyIE1QRUctUFMKPiAoVk9C KSBkZW11eGVyICovCj4gKyAgICBBVkZvcm1hdENvbnRleHQgICAgICAgICAgICAgKm1wZWdfY3R4 OyAgICAgICAgICAvKiBjb250ZXh0IGZvciBpbm5lcgo+IGRlbXV4ZXIgKi8KPiArICAgIHVpbnQ4 X3QgICAgICAgICAgICAgICAgICAgICAqbXBlZ19idWY7ICAgICAgICAgIC8qIGJ1ZmZlciBmb3Ig aW5uZXIKPiBkZW11eGVyICovCj4gKyAgICBGRklPQ29udGV4dCAgICAgICAgICAgICAgICAgbXBl Z19wYjsgICAgICAgICAgICAvKiBidWZmZXIgY29udGV4dCBmb3IKPiBpbm5lciBkZW11eGVyICov Cj4gKwo+ICsgICAgLyogdm9sdW1lICovCj4gKyAgICBkdmRfcmVhZGVyX3QgICAgICAgICAgICAg ICAgKmR2ZHJlYWQ7ICAgICAgICAgICAvKiBoYW5kbGUgdG8KPiBsaWJkdmRyZWFkICovCj4gKyAg ICBpZm9faGFuZGxlX3QgICAgICAgICAgICAgICAgKnZtZ19pZm87ICAgICAgICAgICAvKiBoYW5k bGUgdG8gdGhlIFZNRwo+IChWSURFT19UUy5JRk8pICovCj4gKyAgICBpZm9faGFuZGxlX3QgICAg ICAgICAgICAgICAgKnZ0c19pZm87ICAgICAgICAgICAvKiBoYW5kbGUgdG8gdGhlCj4gYWN0aXZl IFZUUyAoVlRTX25uX24uSUZPKSAqLwo+ICsKPiArICAgIC8qIHBsYXliYWNrIGNvbnRyb2wgKi8K PiArICAgIGludDY0X3QgICAgICAgICAgICAgICAgICAgICBmaXJzdF9wdHM7ICAgICAgICAgIC8q IHRoZSBzdGFydGluZyBQVFMKPiBvZmZzZXQgb2YgdGhlIFBHQyAqLwo+ICsgICAgdWludDY0X3Qg ICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX3B0bTsgICAgICAgLyogdG90YWwgZHVyYXRpb24g aW4KPiBEVkQgTVBFRyB0aW1lYmFzZSAqLwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAg ICAgIHBsYXlfZW5kOyAgICAgICAgICAgLyogc2lnbmFsIEVPRiB0byB0aGUKPiBwYXJlbnQgZGVt dXhlciAqLwo+ICsgICAgRFZEVmlkZW9QbGF5YmFja1N0YXRlICAgICAgIHBsYXlfc3RhdGU7ICAg ICAgICAgLyogdGhlIGFjdGl2ZQo+IHBsYXliYWNrIHN0YXRlICovCj4gKyAgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgcGxheV9zdGFydGVkOyAgICAgICAvKiBzaWduYWwgdGhhdAo+IHBs YXliYWNrIGhhcyBzdGFydGVkICovCj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg c2VnbWVudF9zdGFydGVkOyAgICAvKiBzaWduYWwgdGhhdAo+IHN1YmRlbXV4ZXIgaXMgb24gYSBz ZWdtZW50ICovCj4gK30gRFZEVmlkZW9EZW11eENvbnRleHQ7Cj4gKwo+ICtzdGF0aWMgdm9pZCBk dmR2aWRlb19saWJkdmRyZWFkX2xvZyh2b2lkICpvcGFxdWUsIGR2ZF9sb2dnZXJfbGV2ZWxfdAo+ IGxldmVsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICptc2csIHZhX2xpc3QgbXNnX3ZhKQo+ICt7Cj4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBv cGFxdWU7Cj4gKyAgICBjaGFyIG1zZ19idWZbRFZEVklERU9fTElCRFZEWF9MT0dfQlVGRkVSX1NJ WkVdOwo+ICsgICAgaW50IGxhdnVfbGV2ZWwgPSBBVl9MT0dfREVCVUc7Cj4gKwo+ICsgICAgdnNu cHJpbnRmKG1zZ19idWYsIHNpemVvZihtc2dfYnVmKSwgbXNnLCBtc2dfdmEpOwo+ICsKPiArICAg IGlmIChsZXZlbCA9PSBEVkRfTE9HR0VSX0xFVkVMX0VSUk9SKQo+ICsgICAgICAgIGxhdnVfbGV2 ZWwgPSBBVl9MT0dfRVJST1I7Cj4gKyAgICBlbHNlIGlmIChsZXZlbCA9PSBEVkRfTE9HR0VSX0xF VkVMX1dBUk4pCj4gKyAgICAgICAgbGF2dV9sZXZlbCA9IEFWX0xPR19XQVJOSU5HOwo+ICsKPiAr ICAgIGF2X2xvZyhzLCBsYXZ1X2xldmVsLCAibGliZHZkcmVhZDogJXNcbiIsIG1zZ19idWYpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkdmR2aWRlb19saWJkdmRuYXZfbG9nKHZvaWQgKm9wYXF1 ZSwgZHZkbmF2X2xvZ2dlcl9sZXZlbF90Cj4gbGV2ZWwsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLCB2YV9saXN0IG1zZ192YSkKPiArewo+ICsg ICAgQVZGb3JtYXRDb250ZXh0ICpzID0gb3BhcXVlOwo+ICsgICAgY2hhciBtc2dfYnVmW0RWRFZJ REVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpFXTsKPiArICAgIGludCBsYXZ1X2xldmVsID0gQVZf TE9HX0RFQlVHOwo+ICsKPiArICAgIHZzbnByaW50Zihtc2dfYnVmLCBzaXplb2YobXNnX2J1Ziks IG1zZywgbXNnX3ZhKTsKPiArCj4gKyAgICBpZiAobGV2ZWwgPT0gRFZETkFWX0xPR0dFUl9MRVZF TF9FUlJPUikKPiArICAgICAgICBsYXZ1X2xldmVsID0gQVZfTE9HX0VSUk9SOwo+ICsgICAgLyog c29tZSBkaXNjcyBoYXZlIGludmFsaWQgbGFuZ3VhZ2UgY29kZXMgc2V0IGZvciBtZW51cywgd2hp Y2ggdGhyb3dzCj4gbm9pc3kgd2FybmluZ3MgKi8KPiArICAgIGVsc2UgaWYgKGxldmVsID09IERW RE5BVl9MT0dHRVJfTEVWRUxfV0FSTiAmJiAhYXZfc3Ryc3RhcnQobXNnLAo+ICJMYW5ndWFnZSIs IE5VTEwpKQo+ICsgICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0dfV0FSTklORzsKPiArCj4gKyAg ICBhdl9sb2cocywgbGF2dV9sZXZlbCwgImxpYmR2ZG5hdjogJXNcbiIsIG1zZ19idWYpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBkdmR2aWRlb19pZm9fY2xvc2UoQVZGb3JtYXRDb250ZXh0ICpz KQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiAr Cj4gKyAgICBpZiAoYy0+dnRzX2lmbykKPiArICAgICAgICBpZm9DbG9zZShjLT52dHNfaWZvKTsK PiArCj4gKyAgICBpZiAoYy0+dm1nX2lmbykKPiArICAgICAgICBpZm9DbG9zZShjLT52bWdfaWZv KTsKPiArCj4gKyAgICBpZiAoYy0+ZHZkcmVhZCkKPiArICAgICAgICBEVkRDbG9zZShjLT5kdmRy ZWFkKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19pZm9fb3BlbihBVkZvcm1hdENv bnRleHQgKnMpCj4gK3sKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9k YXRhOwo+ICsKPiArICAgIGR2ZF9sb2dnZXJfY2IgZHZkcmVhZF9sb2dfY2I7Cj4gKyAgICB0aXRs ZV9pbmZvX3QgdGl0bGVfaW5mbzsKPiArCj4gKyAgICBkdmRyZWFkX2xvZ19jYiA9IChkdmRfbG9n Z2VyX2NiKSB7IC5wZl9sb2cgPSBkdmR2aWRlb19saWJkdmRyZWFkX2xvZwo+IH07Cj4gKyAgICBj LT5kdmRyZWFkID0gRFZET3BlbjIocywgJmR2ZHJlYWRfbG9nX2NiLCBzLT51cmwpOwo+ICsKPiAr ICAgIGlmICghYy0+ZHZkcmVhZCkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gb3BlbiB0aGUgRFZELVZpZGVvCj4gc3RydWN0dXJlXG4iKTsKPiArCj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCEo Yy0+dm1nX2lmbyA9IGlmb09wZW4oYy0+ZHZkcmVhZCwgMCkpKSB7Cj4gKyAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBvcGVuIHRoZSBWTUcKPiAoVklERU9fVFMuSUZP KVxuIik7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ ICsKPiArICAgIGlmIChjLT5vcHRfdGl0bGUgPiBjLT52bWdfaWZvLT50dF9zcnB0LT5ucl9vZl9z cnB0cykgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJUaXRsZSAlZCBub3Qg Zm91bmRcbiIsIGMtPm9wdF90aXRsZSk7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX1NU UkVBTV9OT1RfRk9VTkQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgdGl0bGVfaW5mbyA9IGMtPnZtZ19p Zm8tPnR0X3NycHQtPnRpdGxlW2MtPm9wdF90aXRsZSAtIDFdOwo+ICsgICAgaWYgKGMtPm9wdF9h bmdsZSA+IHRpdGxlX2luZm8ubnJfb2ZfYW5nbGVzKSB7Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIkFuZ2xlICVkIG5vdCBmb3VuZFxuIiwgYy0+b3B0X2FuZ2xlKTsKPiArCj4g KyAgICAgICAgcmV0dXJuIEFWRVJST1JfU1RSRUFNX05PVF9GT1VORDsKPiArICAgIH0KPiArCj4g KyAgICBpZiAodGl0bGVfaW5mby5ucl9vZl9wdHRzIDwgMSkgewo+ICsgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJUaXRsZSAlZCBoYXMgaW52YWxpZCBoZWFkZXJzIChubyBQVFRzCj4g Zm91bmQpXG4iLCBjLT5vcHRfdGl0bGUpOwo+ICsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoYy0+b3B0X2NoYXB0ZXJfc3RhcnQg PiB0aXRsZV9pbmZvLm5yX29mX3B0dHMgfHwKPiArICAgICAgIChjLT5vcHRfY2hhcHRlcl9lbmQg PiAwICYmIGMtPm9wdF9jaGFwdGVyX2VuZCA+Cj4gdGl0bGVfaW5mby5ucl9vZl9wdHRzKSkgewo+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDaGFwdGVyIChQVFQpIHJhbmdlIFsl ZCwgJWRdIGlzCj4gaW52YWxpZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjLT5vcHRfY2hhcHRlcl9zdGFydCwgYy0+b3B0X2NoYXB0ZXJfZW5kKTsKPiArCj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCEo Yy0+dnRzX2lmbyA9IGlmb09wZW4oYy0+ZHZkcmVhZCwgdGl0bGVfaW5mby50aXRsZV9zZXRfbnIp KSkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcHJvY2Vz cyBJRk8gc3RydWN0dXJlIGZvciBWVFMKPiAlZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aXRsZV9pbmZvLnRpdGxlX3NldF9ucik7Cj4gKwo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICh0aXRsZV9pbmZvLnZ0 c190dG4gPCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAo+ICsgICAg ICAgIHRpdGxlX2luZm8udnRzX3R0biA+IDk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHx8Cj4gKyAgICAgICAgdGl0bGVfaW5mby52dHNfdHRuID4gYy0+dnRzX2lmby0+dnRz X3B0dF9zcnB0LT5ucl9vZl9zcnB0cyAgfHwKPiArICAgICAgICBjLT52dHNfaWZvLT52dHNpX21h dC0+bnJfb2ZfdnRzX2F1ZGlvX3N0cmVhbXMgPiA4ICAgICAgICAgICB8fAo+ICsgICAgICAgIGMt PnZ0c19pZm8tPnZ0c2lfbWF0LT5ucl9vZl92dHNfc3VicF9zdHJlYW1zID4gMzIpIHsKPiArCj4g KyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlRpdGxlICVkIGhhcyBpbnZhbGlkIGhl YWRlcnMgaW4gVlRTXG4iLAo+IGMtPm9wdF90aXRsZSk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZHZkdmlkZW9faXNfY2VsbF9wcm9taXNpbmcoQVZGb3JtYXRDb250ZXh0ICpz LCBwZ2NfdCAqcGdjLCBpbnQKPiBjZWxsbikKPiArewo+ICsgICAgZHZkX3RpbWVfdCBjZWxsX2R1 cmF0aW9uID0gcGdjLT5jZWxsX3BsYXliYWNrW2NlbGxuIC0KPiAxXS5wbGF5YmFja190aW1lOwo+ ICsKPiArICAgIHJldHVybiBjZWxsX2R1cmF0aW9uLnNlY29uZCA+PSAxIHx8IGNlbGxfZHVyYXRp b24ubWludXRlID49IDEgfHwKPiBjZWxsX2R1cmF0aW9uLmhvdXIgPj0gMTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkdmR2aWRlb19pc19wZ2NfcHJvbWlzaW5nKEFWRm9ybWF0Q29udGV4dCAqcywg cGdjX3QgKnBnYykKPiArewo+ICsgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gcGdjLT5ucl9vZl9j ZWxsczsgaSsrKQo+ICsgICAgICAgIGlmIChkdmR2aWRlb19pc19jZWxsX3Byb21pc2luZyhzLCBw Z2MsIGkpKQo+ICsgICAgICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fcGxheV9jbG9zZShBVkZvcm1hdENvbnRleHQg KnMsIERWRFZpZGVvUGxheWJhY2tTdGF0ZQo+ICpzdGF0ZSkKPiArewo+ICsgICAgaWYgKCFzdGF0 ZS0+ZHZkbmF2KQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAvKiBub3QgYWxsb2NhdGVk IGJ5IGF2X21hbGxvYygpICovCj4gKyAgICBpZiAoc3RhdGUtPnBnY19wZ190aW1lc19lc3QpCj4g KyAgICAgICAgZnJlZShzdGF0ZS0+cGdjX3BnX3RpbWVzX2VzdCk7Cj4gKwo+ICsgICAgaWYgKGR2 ZG5hdl9jbG9zZShzdGF0ZS0+ZHZkbmF2KSAhPSBEVkROQVZfU1RBVFVTX09LKQo+ICsgICAgICAg IGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gY2xvc2UgZHZkbmF2IHN1Y2Nlc3Nm dWxseSwKPiBkdmRuYXYgZXJyb3I6ICVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGR2ZG5hdl9lcnJfdG9fc3RyaW5nKHN0YXRlLT5kdmRuYXYpKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkdmR2aWRlb19wbGF5X29wZW4oQVZGb3JtYXRDb250ZXh0ICpzLCBEVkRWaWRl b1BsYXliYWNrU3RhdGUKPiAqc3RhdGUpCj4gK3sKPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0 ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGR2ZG5hdl9sb2dnZXJfY2IgZHZkbmF2X2xv Z19jYjsKPiArICAgIGR2ZG5hdl9zdGF0dXNfdCBkdmRuYXZfb3Blbl9zdGF0dXM7Cj4gKyAgICBp bnQzMl90IGRpc2NfcmVnaW9uX21hc2s7Cj4gKyAgICBpbnQzMl90IHBsYXllcl9yZWdpb25fbWFz azsKPiArICAgIGludCBjdXJfdGl0bGUsIGN1cl9wZ2NuLCBjdXJfcGduOwo+ICsgICAgcGdjX3Qg KnBnYzsKPiArCj4gKyAgICBkdmRuYXZfbG9nX2NiID0gKGR2ZG5hdl9sb2dnZXJfY2IpIHsgLnBm X2xvZyA9IGR2ZHZpZGVvX2xpYmR2ZG5hdl9sb2cKPiB9Owo+ICsgICAgZHZkbmF2X29wZW5fc3Rh dHVzID0gZHZkbmF2X29wZW4yKCZzdGF0ZS0+ZHZkbmF2LCBzLCAmZHZkbmF2X2xvZ19jYiwKPiBz LT51cmwpOwo+ICsKPiArICAgIGlmICghc3RhdGUtPmR2ZG5hdgo+ICAgICAgIHx8Cj4gKyAgICAg ICAgZHZkbmF2X29wZW5fc3RhdHVzICE9IERWRE5BVl9TVEFUVVNfT0sKPiAgICAgICB8fAo+ICsg ICAgICAgIGR2ZG5hdl9zZXRfcmVhZGFoZWFkX2ZsYWcoc3RhdGUtPmR2ZG5hdiwgMCkgIT0gRFZE TkFWX1NUQVRVU19PSwo+ICAgICAgICB8fAo+ICsgICAgICAgIGR2ZG5hdl9zZXRfUEdDX3Bvc2l0 aW9uaW5nX2ZsYWcoc3RhdGUtPmR2ZG5hdiwgMSkgIT0KPiBEVkROQVZfU1RBVFVTX09LICAgfHwK PiArICAgICAgICBkdmRuYXZfZ2V0X3JlZ2lvbl9tYXNrKHN0YXRlLT5kdmRuYXYsICZkaXNjX3Jl Z2lvbl9tYXNrKSAhPQo+IERWRE5BVl9TVEFUVVNfT0spIHsKPiArICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIG9wZW4gdGhlIERWRCBmb3IgcGxheWJhY2tcbiIpOwo+ ICsKPiArICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7Cj4gKyAgICB9Cj4gKwo+ICsgICAg cGxheWVyX3JlZ2lvbl9tYXNrID0gYy0+b3B0X3JlZ2lvbiA+IDAgPyAoMSA8PCAoYy0+b3B0X3Jl Z2lvbiAtIDEpKSA6Cj4gZGlzY19yZWdpb25fbWFzazsKPiArICAgIGlmIChkdmRuYXZfc2V0X3Jl Z2lvbl9tYXNrKHN0YXRlLT5kdmRuYXYsIHBsYXllcl9yZWdpb25fbWFzaykgIT0KPiBEVkROQVZf U1RBVFVTX09LKSB7Cj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0 byBzZXQgdGhlIHBsYXliYWNrIHJlZ2lvbiBjb2RlCj4gJWRcbiIsIGMtPm9wdF9yZWdpb24pOwo+ ICsKPiArICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7Cj4gKyAgICB9Cj4gKwo+ICsgICAg aWYgKGMtPm9wdF9wZ2MgPiAwICYmIGMtPm9wdF9wZyA+IDApIHsKPiArICAgICAgICBpZiAoZHZk bmF2X3Byb2dyYW1fcGxheShzdGF0ZS0+ZHZkbmF2LCBjLT5vcHRfdGl0bGUsIGMtPm9wdF9wZ2Ms Cj4gYy0+b3B0X3BnKSAhPSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gKyAgICAgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gc3RhcnQgcGxheWJhY2sgYXQgdGl0bGUKPiAl ZCwgUEdDICVkLCBQRyAlZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYy0+b3B0X3RpdGxlLCBjLT5vcHRfcGdjLCBjLT5vcHRfcGcpOwo+ICsKPiArICAgICAgICAg ICAgZ290byBlbmRfZHZkbmF2X2Vycm9yOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgc3Rh dGUtPnBnY24gPSBjLT5vcHRfcGdjOwo+ICsgICAgICAgIHN0YXRlLT5lbnRyeV9wZ24gPSBjLT5v cHRfcGc7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGlmIChkdmRuYXZfcGFydF9wbGF5KHN0 YXRlLT5kdmRuYXYsIGMtPm9wdF90aXRsZSwKPiBjLT5vcHRfY2hhcHRlcl9zdGFydCkgIT0gRFZE TkFWX1NUQVRVU19PSyB8fAo+ICsgICAgICAgICAgICBkdmRuYXZfY3VycmVudF90aXRsZV9wcm9n cmFtKHN0YXRlLT5kdmRuYXYsICZjdXJfdGl0bGUsCj4gJmN1cl9wZ2NuLCAmY3VyX3BnbikgIT0g RFZETkFWX1NUQVRVU19PSykgewo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIHN0YXJ0IHBsYXliYWNrIGF0IHRpdGxlCj4gJWQsIGNoYXB0ZXIgKFBUVCkg JWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9wdF90aXRs ZSwgYy0+b3B0X2NoYXB0ZXJfc3RhcnQpOwo+ICsKPiArICAgICAgICAgICAgZ290byBlbmRfZHZk bmF2X2Vycm9yOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgc3RhdGUtPnBnY24gPSBjdXJf cGdjbjsKPiArICAgICAgICBzdGF0ZS0+ZW50cnlfcGduID0gY3VyX3BnbjsKPiArICAgIH0KPiAr Cj4gKyAgICBwZ2MgPSBjLT52dHNfaWZvLT52dHNfcGdjaXQtPnBnY2lfc3JwW3N0YXRlLT5wZ2Nu IC0gMV0ucGdjOwo+ICsKPiArICAgIGlmIChwZ2MtPnBnX3BsYXliYWNrX21vZGUgIT0gMCkgewo+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJOb24tc2VxdWVudGlhbCBQR0NzLCBz dWNoIGFzIHNodWZmbGVzLAo+IGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKPiArCj4gKyAgICAgICAg cmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChjLT5v cHRfdHJpbSAmJiAhZHZkdmlkZW9faXNfcGdjX3Byb21pc2luZyhzLCBwZ2MpKSB7Cj4gKyAgICAg ICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlRpdGxlICVkLCBQR0MgJWQgbG9va3MgZW1wdHkg KG1heQo+IGNvbnNpc3Qgb2YgcGFkZGluZyBjZWxscyksICIKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiaWYgeW91IHdhbnQgdG8gdHJ5IGFueXdheSwgZGlzYWJsZSB0aGUKPiAt dHJpbSBvcHRpb25cbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+b3B0 X3RpdGxlLCBzdGF0ZS0+cGdjbik7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChkdmRuYXZfYW5nbGVfY2hhbmdlKHN0YXRl LT5kdmRuYXYsIGMtPm9wdF9hbmdsZSkgIT0KPiBEVkROQVZfU1RBVFVTX09LKSB7Cj4gKyAgICAg ICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBzdGFydCBwbGF5YmFjayBhdCBh bmdsZSAlZFxuIiwKPiBjLT5vcHRfYW5nbGUpOwo+ICsKPiArICAgICAgICBnb3RvIGVuZF9kdmRu YXZfZXJyb3I7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogZHZkbmF2X2Rlc2NyaWJlX3RpdGxlX2No YXB0ZXJzKCkgcGVyZm9ybXMgc2V2ZXJhbCB2YWxpZGF0aW9ucyBvbgo+IHRoZSB0aXRsZSBzdHJ1 Y3R1cmUgKi8KPiArICAgIC8qIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgc2lkZSBlZmZlY3QgdG8g aW5jcmVhc2UgY2hhbmNlcyBvZiBhIHNhZmUKPiBuYXZpZ2F0aW9uIHBhdGggKi8KPiArICAgIHN0 YXRlLT5wZ2NfbmJfcGdfZXN0ID0gZHZkbmF2X2Rlc2NyaWJlX3RpdGxlX2NoYXB0ZXJzKHN0YXRl LT5kdmRuYXYsCj4gYy0+b3B0X3RpdGxlLAo+ICsKPiAmc3RhdGUtPnBnY19wZ190aW1lc19lc3Qs Cj4gKwo+ICZzdGF0ZS0+cGdjX2R1cmF0aW9uX2VzdCk7Cj4gKwo+ICsgICAgLyogZHZkbmF2IHJl dHVybmluZyAwIFBHcyBpcyBkb2N1bWVudGVkIGFzIGFuIGVycm9yIGNvbmRpdGlvbiAqLwo+ICsg ICAgaWYgKCFzdGF0ZS0+cGdjX25iX3BnX2VzdCkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9M T0dfRVJST1IsICJVbmFibGUgdG8gcmVhZCBjaGFwdGVyIGluZm9ybWF0aW9uIGZvcgo+IHRpdGxl ICVkXG4iLCBjLT5vcHRfdGl0bGUpOwo+ICsKPiArICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJy b3I7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3RhdGUtPm5hdl9wdHMgPSBkdmRuYXZfZ2V0X2N1cnJl bnRfdGltZShzdGF0ZS0+ZHZkbmF2KTsKPiArICAgIHN0YXRlLT52dHNuID0gYy0+dm1nX2lmby0+ dHRfc3JwdC0+dGl0bGVbYy0+b3B0X3RpdGxlIC0KPiAxXS50aXRsZV9zZXRfbnI7Cj4gKyAgICBz dGF0ZS0+cGdjID0gcGdjOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICsKPiArZW5kX2R2ZG5hdl9l cnJvcjoKPiArICAgIGlmIChzdGF0ZS0+ZHZkbmF2KQo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9M T0dfRVJST1IsICJkdmRuYXYgZXJyb3I6ICVzXG4iLAo+IGR2ZG5hdl9lcnJfdG9fc3RyaW5nKHN0 YXRlLT5kdmRuYXYpKTsKPiArICAgIGVsc2UKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VS Uk9SLCAiZHZkbmF2IGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZFxuIik7Cj4gKwo+ICsgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcGxh eV9uZXh0X3BzX2Jsb2NrKEFWRm9ybWF0Q29udGV4dCAqcywKPiBEVkRWaWRlb1BsYXliYWNrU3Rh dGUgKnN0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 OF90ICpidWYsIGludCBidWZfc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpwX25hdl9ldmVudCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAoKmZsdXNoX2NiKShBVkZvcm1hdENvbnRleHQKPiAqcykpCj4gK3sK PiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAg IHVpbnQ4X3QgbmF2X2J1ZltEVkRWSURFT19CTE9DS19TSVpFXSA9IHswfTsKPiArICAgIGludCBu YXZfZXZlbnQ7Cj4gKyAgICBpbnQgbmF2X2xlbjsKPiArCj4gKyAgICBkdmRuYXZfdnRzX2NoYW5n ZV9ldmVudF90ICplX3Z0czsKPiArICAgIGR2ZG5hdl9jZWxsX2NoYW5nZV9ldmVudF90ICplX2Nl bGw7Cj4gKyAgICBpbnQgY3VyX3RpdGxlLCBjdXJfcGdjbiwgY3VyX3BnbiwgY3VyX2FuZ2xlLCBj dXJfdGl0bGVfdW51c2VkLAo+IGN1cl9wdHQsIGN1cl9uYl9hbmdsZXM7Cj4gKyAgICBpbnQgaXNf Y2VsbF9wcm9taXNpbmcgPSAwOwo+ICsgICAgcGNpX3QgKmVfcGNpOwo+ICsgICAgZHNpX3QgKmVf ZHNpOwo+ICsKPiArICAgIGlmIChidWZfc2l6ZSAhPSBEVkRWSURFT19CTE9DS19TSVpFKSB7Cj4g KyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYnVmZmVyIHNpemUgKGV4 cGVjdGVkPSVkCj4gYWN0dWFsPSVkKVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVkRWSURFT19CTE9DS19TSVpFLCBidWZfc2l6ZSk7Cj4gKwo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBEVkRWSURFT19NQVhfUFNfU0VBUkNIX0JMT0NLUzsgaSsrKSB7Cj4gKyAgICAgICAgaWYgKGZm X2NoZWNrX2ludGVycnVwdCgmcy0+aW50ZXJydXB0X2NhbGxiYWNrKSkKPiArICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhJVDsKPiArCj4gKyAgICAgICAgaWYgKGR2ZG5hdl9nZXRfbmV4dF9i bG9jayhzdGF0ZS0+ZHZkbmF2LCBuYXZfYnVmLCAmbmF2X2V2ZW50LAo+ICZuYXZfbGVuKSAhPSBE VkROQVZfU1RBVFVTX09LKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gcmVhZCBuZXh0IGJsb2NrIG9mIFBHQ1xuIik7Cj4gKwo+ICsgICAgICAgICAg ICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKiBz b21lIGRpc2NzIGZvbGxvdyBOT1BzIHdpdGggYSBwcmVtYXR1cmUgc3RvcCBldmVudCAqLwo+ICsg ICAgICAgIGlmIChuYXZfZXZlbnQgPT0gRFZETkFWX1NUT1ApCj4gKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0VPRjsKPiArCj4gKyAgICAgICAgaWYgKG5hdl9sZW4gPiBEVkRWSURFT19CTE9D S19TSVpFKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IGJsb2NrIHNpemUgKGV4cGVjdGVkPD0lZAo+IGFjdHVhbD0lZClcbiIsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERWRFZJREVPX0JMT0NLX1NJWkUsIG5hdl9sZW4pOwo+ ICsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICBpZiAoZHZkbmF2X2N1cnJlbnRfdGl0bGVfaW5mbyhzdGF0ZS0+ZHZk bmF2LCAmY3VyX3RpdGxlLAo+ICZjdXJfcHR0KSAhPSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gKyAg ICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZGV0ZXJtaW5lIGN1 cnJlbnQgdGl0bGUKPiBjb29yZGluYXRlc1xuIik7Cj4gKwo+ICsgICAgICAgICAgICBnb3RvIGVu ZF9kdmRuYXZfZXJyb3I7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKiB3ZSBzb21laG93 IG5hdmlnYXRlZCB0byBhIG1lbnUgKi8KPiArICAgICAgICBpZiAoY3VyX3RpdGxlID09IDAgfHwg IWR2ZG5hdl9pc19kb21haW5fdnRzKHN0YXRlLT5kdmRuYXYpKQo+ICsgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9FT0Y7Cj4gKwo+ICsgICAgICAgIGlmIChkdmRuYXZfY3VycmVudF90aXRsZV9w cm9ncmFtKHN0YXRlLT5kdmRuYXYsCj4gJmN1cl90aXRsZV91bnVzZWQsICZjdXJfcGdjbiwgJmN1 cl9wZ24pICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIlVuYWJsZSB0byBkZXRlcm1pbmUgY3VycmVudCBQR0MKPiBjb29yZGluYXRl c1xuIik7Cj4gKwo+ICsgICAgICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICAvKiB3ZSBzb21laG93IGxlZnQgdGhlIFBHQyAqLwo+ICsgICAg ICAgIGlmIChzdGF0ZS0+aW5fcGdjICYmIGN1cl9wZ2NuICE9IHN0YXRlLT5wZ2NuKQo+ICsgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gKwo+ICsgICAgICAgIGlmIChkdmRuYXZfZ2V0 X2FuZ2xlX2luZm8oc3RhdGUtPmR2ZG5hdiwgJmN1cl9hbmdsZSwKPiAmY3VyX25iX2FuZ2xlcykg IT0gRFZETkFWX1NUQVRVU19PSykgewo+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VS Uk9SLCAiVW5hYmxlIHRvIGRldGVybWluZSBjdXJyZW50IHZpZGVvCj4gYW5nbGVcbiIpOwo+ICsK PiArICAgICAgICAgICAgZ290byBlbmRfZHZkbmF2X2Vycm9yOwo+ICsgICAgICAgIH0KPiArCj4g KyAgICAgICAgYXZfbG9nKHMsIG5hdl9ldmVudCA9PSBEVkROQVZfQkxPQ0tfT0sgPyBBVl9MT0df VFJBQ0UgOgo+IEFWX0xPR19ERUJVRywKPiArICAgICAgICAgICAgICAgIm5ldyBibG9jazogaT0l ZCBuYXZfZXZlbnQ9JWQgbmF2X2xlbj0lZCBjdXJfdGl0bGU9JWQgIgo+ICsgICAgICAgICAgICAg ICAiY3VyX3B0dD0lZCBjdXJfYW5nbGU9JWQgY3VyX2NlbGxuPSVkIGN1cl9wZ2NuPSVkCj4gY3Vy X3Bnbj0lZCAiCj4gKyAgICAgICAgICAgICAgICJwbGF5X2luX3Z0cz0lZCBwbGF5X2luX3BnYz0l ZCBwbGF5X2luX3BzPSVkXG4iLAo+ICsgICAgICAgICAgICAgICBpLCBuYXZfZXZlbnQsIG5hdl9s ZW4sIGN1cl90aXRsZSwKPiArICAgICAgICAgICAgICAgY3VyX3B0dCwgY3VyX2FuZ2xlLCBzdGF0 ZS0+Y2VsbG4sIGN1cl9wZ2NuLCBjdXJfcGduLAo+ICsgICAgICAgICAgICAgICBzdGF0ZS0+aW5f dnRzLCBzdGF0ZS0+aW5fcGdjLCBzdGF0ZS0+aW5fcHMpOwo+ICsKPiArICAgICAgICBzd2l0Y2gg KG5hdl9ldmVudCkgewo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9WVFNfQ0hBTkdFOgo+ICsg ICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5pbl92dHMpCj4gKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfRU9GOwo+ICsKPiArICAgICAgICAgICAgICAgIGVfdnRzID0gKGR2ZG5h dl92dHNfY2hhbmdlX2V2ZW50X3QgKikgbmF2X2J1ZjsKPiArCj4gKyAgICAgICAgICAgICAgICBp ZiAoZV92dHMtPm5ld192dHNOID09IHN0YXRlLT52dHNuICYmIGVfdnRzLT5uZXdfZG9tYWluCj4g PT0gRFZEX0RPTUFJTl9WVFNUaXRsZSkKPiArICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aW5f dnRzID0gMTsKPiArCj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAg Y2FzZSBEVkROQVZfQ0VMTF9DSEFOR0U6Cj4gKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLT5p bl92dHMpCj4gKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgICAg ICAgICAgZV9jZWxsID0gKGR2ZG5hdl9jZWxsX2NoYW5nZV9ldmVudF90ICopIG5hdl9idWY7Cj4g KyAgICAgICAgICAgICAgICBpc19jZWxsX3Byb21pc2luZyA9ICFjLT5vcHRfdHJpbSB8fAo+IGR2 ZHZpZGVvX2lzX2NlbGxfcHJvbWlzaW5nKHMsIHN0YXRlLT5wZ2MsIGVfY2VsbC0+Y2VsbE4pOwo+ ICsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJuZXcgY2VsbDog cHJldj0lZCBuZXc9JWQKPiBwcm9taXNpbmc9JWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Y2VsbG4sIGVfY2VsbC0+Y2VsbE4sCj4gaXNfY2Vs bF9wcm9taXNpbmcpOwo+ICsKPiArICAgICAgICAgICAgICAgIGlmICghc3RhdGUtPmluX3BzICYm ICFzdGF0ZS0+aW5fcGdjKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cl90aXRsZSA9 PSBjLT5vcHRfdGl0bGUgICAgICAgJiYKPiArICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3B0 dCA9PSBjLT5vcHRfY2hhcHRlcl9zdGFydCAmJgo+ICsgICAgICAgICAgICAgICAgICAgICAgICBj dXJfcGdjbiA9PSBzdGF0ZS0+cGdjbiAgICAgICAgICYmCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIGN1cl9wZ24gPT0gc3RhdGUtPmVudHJ5X3BnbiAgICAgJiYKPiArICAgICAgICAgICAgICAg ICAgICAgICAgaXNfY2VsbF9wcm9taXNpbmcpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAg c3RhdGUtPmluX3BnYyA9IDE7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAg ICAgICAgICAgICAgICBpZiAoYy0+b3B0X3RyaW0gJiYgIWlzX2NlbGxfcHJvbWlzaW5nKQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0lORk8sICJTa2lwcGluZyBw YWRkaW5nIGNlbGwKPiAjJWRcbiIsIGVfY2VsbC0+Y2VsbE4pOwo+ICsgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChzdGF0ZS0+Y2VsbG4gPj0gZV9jZWxsLT5jZWxsTiB8fCBzdGF0ZS0+cGduID4K PiBjdXJfcGduKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIHN0YXRlLT5jZWxsbiA9 IGVfY2VsbC0+Y2VsbE47Cj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHR0ID0gY3VyX3B0dDsK PiArICAgICAgICAgICAgICAgIHN0YXRlLT5wZ24gPSBjdXJfcGduOwo+ICsgICAgICAgICAgICAg ICAgc3RhdGUtPm5iX2NlbGxzX3BsYXllZCsrOwo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnRp bnVlOwo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9OQVZfUEFDS0VUOgo+ICsgICAgICAgICAg ICAgICAgaWYgKCFzdGF0ZS0+aW5fcGdjKQo+ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Owo+ICsKPiArICAgICAgICAgICAgICAgIGlmICgoc3RhdGUtPnB0dCA+IDAgJiYgc3RhdGUtPnB0 dCA+IGN1cl9wdHQpIHx8Cj4gKyAgICAgICAgICAgICAgICAgICAgKGMtPm9wdF9jaGFwdGVyX2Vu ZCA+IDAgJiYgY3VyX3B0dCA+Cj4gYy0+b3B0X2NoYXB0ZXJfZW5kKSkgewo+ICsgICAgICAgICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiArICAgICAgICAgICAgICAgIH0KPiArCj4g KyAgICAgICAgICAgICAgICBlX3BjaSA9IGR2ZG5hdl9nZXRfY3VycmVudF9uYXZfcGNpKHN0YXRl LT5kdmRuYXYpOwo+ICsgICAgICAgICAgICAgICAgZV9kc2kgPSBkdmRuYXZfZ2V0X2N1cnJlbnRf bmF2X2RzaShzdGF0ZS0+ZHZkbmF2KTsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoZV9wY2kg PT0gTlVMTCB8fCBlX2RzaSA9PSBOVUxMIHx8Cj4gKyAgICAgICAgICAgICAgICAgICAgZV9wY2kt PnBjaV9naS52b2J1X3NfcHRtID4gZV9wY2ktPnBjaV9naS52b2J1X2VfcHRtKSB7Cj4gKwo+ICsg ICAgICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIE5BViBw YWNrZXRcbiIpOwo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIHN0YXRlLT52 b2J1X2R1cmF0aW9uID0gZV9wY2ktPnBjaV9naS52b2J1X2VfcHRtIC0KPiBlX3BjaS0+cGNpX2dp LnZvYnVfc19wdG07Cj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cGdjX2VsYXBzZWQgKz0gc3Rh dGUtPnZvYnVfZHVyYXRpb247Cj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+bmF2X3B0cyA9IGR2 ZG5hdl9nZXRfY3VycmVudF90aW1lKHN0YXRlLT5kdmRuYXYpOwo+ICsgICAgICAgICAgICAgICAg c3RhdGUtPnB0dCA9IGN1cl9wdHQ7Cj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cGduID0gY3Vy X3BnbjsKPiArCj4gKyAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICJOQVYgcGFjazogc19wdG09JWQgZV9wdG09JWQgIgo+ICsg ICAgICAgICAgICAgICAgICAgICAgICJzY3I9JWQgbGJuPSVkIHZvYnVfZHVyYXRpb249JWQgbmF2 X3B0cz0lbGRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZV9wY2ktPnBjaV9naS52b2J1 X3NfcHRtLCBlX3BjaS0+cGNpX2dpLnZvYnVfZV9wdG0sCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZV9kc2ktPmRzaV9naS5udl9wY2tfc2NyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGVf cGNpLT5wY2lfZ2kubnZfcGNrX2xibiwgc3RhdGUtPnZvYnVfZHVyYXRpb24sCj4gc3RhdGUtPm5h dl9wdHMpOwo+ICsKPiArICAgICAgICAgICAgICAgIGlmICghc3RhdGUtPmluX3BzKSB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19ERUJVRywgIm5hdmlnYXRpb246IGxv Y2tlZCB0bwo+IHByb2dyYW0gc3RyZWFtXG4iKTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAg c3RhdGUtPmluX3BzID0gMTsKPiArICAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAg ICAgICAgICAgICAgaWYgKHN0YXRlLT52b2J1X2VfcHRtICE9IGVfcGNpLT5wY2lfZ2kudm9idV9z X3B0bSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2hfY2IpCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF9jYihzKTsKPiArCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXRlLT50c19vZmZzZXQgKz0gc3RhdGUtPnZvYnVfZV9wdG0gLQo+IGVfcGNp LT5wY2lfZ2kudm9idV9zX3B0bTsKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAg ICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgc3RhdGUtPnZvYnVfZV9wdG0gPSBlX3Bj aS0+cGNpX2dpLnZvYnVfZV9wdG07Cj4gKwo+ICsgICAgICAgICAgICAgICAgKCpwX25hdl9ldmVu dCkgPSBuYXZfZXZlbnQ7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIG5hdl9sZW47Cj4g KyAgICAgICAgICAgIGNhc2UgRFZETkFWX0JMT0NLX09LOgo+ICsgICAgICAgICAgICAgICAgaWYg KCFzdGF0ZS0+aW5fcHMpIHsKPiArICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmluX3Bn YykKPiArICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7IC8qIG5lY2Vzc2FyeSBpbiBjYXNl IHdlIGFyZSBza2lwcGluZyBqdW5rCj4gY2VsbHMgYXQgdGhlIGJlZ2lubmluZyAqLwo+ICsgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAg ICAgICAgICAgICAgIGlmIChuYXZfbGVuICE9IERWRFZJREVPX0JMT0NLX1NJWkUpIHsKPiArICAg ICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBNUEVHIGJs b2NrIHNpemUKPiAoZXhwZWN0ZWQ9JWQgYWN0dWFsPSVkKVxuIiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19CTE9DS19TSVpFLCBuYXZfbGVu KTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgKGN1cl9hbmds ZSAhPSBjLT5vcHRfYW5nbGUpIHsKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZf TE9HX0VSUk9SLCAiVW5leHBlY3RlZCBhbmdsZSBjaGFuZ2UKPiAoZXhwZWN0ZWQ9JWQgbmV3PSVk KVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5v cHRfYW5nbGUsIGN1cl9hbmdsZSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SX0lOUFVUX0NIQU5HRUQ7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAg ICAgICAgICAgbWVtY3B5KGJ1ZiwgJm5hdl9idWYsIG5hdl9sZW4pOwo+ICsKPiArICAgICAgICAg ICAgICAgIC8qIGluIGNhc2UgTkFWIHBhY2tldCBpcyBtaXNzZWQgKi8KPiArICAgICAgICAgICAg ICAgIHN0YXRlLT5wdHQgPSBjdXJfcHR0Owo+ICsgICAgICAgICAgICAgICAgc3RhdGUtPnBnbiA9 IGN1cl9wZ247Cj4gKwo+ICsgICAgICAgICAgICAgICAgKCpwX25hdl9ldmVudCkgPSBuYXZfZXZl bnQ7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIG5hdl9sZW47Cj4gKyAgICAgICAgICAg IGNhc2UgRFZETkFWX1NUSUxMX0ZSQU1FOgo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9XQUlU Ogo+ICsgICAgICAgICAgICBjYXNlIERWRE5BVl9IT1BfQ0hBTk5FTDoKPiArICAgICAgICAgICAg Y2FzZSBEVkROQVZfSElHSExJR0hUOgo+ICsgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5pbl9w cykKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gKwo+ICsgICAg ICAgICAgICAgICAgaWYgKG5hdl9ldmVudCA9PSBEVkROQVZfU1RJTExfRlJBTUUpIHsKPiArICAg ICAgICAgICAgICAgICAgICBpZiAoZHZkbmF2X3N0aWxsX3NraXAoc3RhdGUtPmR2ZG5hdikgIT0K PiBEVkROQVZfU1RBVFVTX09LKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gc2tpcCBzdGlsbAo+IGltYWdlXG4iKTsKPiArCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiArICAgICAg ICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAg ICAgaWYgKG5hdl9ldmVudCA9PSBEVkROQVZfV0FJVCkgewo+ICsgICAgICAgICAgICAgICAgICAg IGlmIChkdmRuYXZfd2FpdF9za2lwKHN0YXRlLT5kdmRuYXYpICE9Cj4gRFZETkFWX1NUQVRVU19P Sykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAi VW5hYmxlIHRvIHNraXAgV0FJVAo+IGV2ZW50XG4iKTsKPiArCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiArICAgICAgICAgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAg ICAgICAgICAgIGNhc2UgRFZETkFWX1NUT1A6Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9FT0Y7Cj4gKyAgICAgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgICAgICBjb250 aW51ZTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19F UlJPUiwgIlVuYWJsZSB0byBmaW5kIG5leHQgcHJvZ3JhbSBzdHJlYW0gYmxvY2tcbiIpOwo+ICsK PiArICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsKPiArZW5kX2R2ZG5hdl9lcnJv cjoKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJkdmRuYXYgZXJyb3IgKHRpdGxlPSVk IHBnYz0lZCBwZz0lZAo+IGNlbGw9JWQpOiAlc1xuIiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGN1cl90aXRsZSwgY3VyX3BnY24sIGN1cl9wZ24sIHN0YXRlLT5jZWxsbiwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR2ZG5hdl9lcnJfdG9fc3RyaW5nKHN0YXRlLT5kdmRu YXYpKTsKPiArCj4gKyAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBkdmR2aWRlb19wZ2NfcHJlaW5kZXgoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4g KyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBp bnQgcmV0ID0gMCwgaW50ZXJydXB0ID0gMDsKPiArICAgIGludCBuYl9jaGFwdGVycyA9IDAsIGxh c3RfcHR0ID0gYy0+b3B0X2NoYXB0ZXJfc3RhcnQ7Cj4gKyAgICB1aW50NjRfdCBjdXJfY2hhcHRl cl9vZmZzZXQgPSAwLCBjdXJfY2hhcHRlcl9kdXJhdGlvbiA9IDA7Cj4gKyAgICBEVkRWaWRlb1Bs YXliYWNrU3RhdGUgc3RhdGUgPSB7MH07Cj4gKwo+ICsgICAgdWludDhfdCBuYXZfYnVmW0RWRFZJ REVPX0JMT0NLX1NJWkVdOwo+ICsgICAgaW50IG5hdl9ldmVudDsKPiArCj4gKyAgICBpZiAoYy0+ b3B0X2NoYXB0ZXJfc3RhcnQgPT0gYy0+b3B0X2NoYXB0ZXJfZW5kKQo+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gKwo+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19JTkZPLAo+ICsgICAgICAgICAgICJJ bmRleGluZyBjaGFwdGVyIG1hcmtlcnMsIHRoaXMgd2lsbCB0YWtlIGEgbG9uZyB0aW1lLiBQbGVh c2UKPiB3YWl0Li4uXG4iKTsKPiArCj4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3BsYXlfb3Bl bihzLCAmc3RhdGUpKSA8IDAgfHwKPiBzdGF0ZS5wZ2MtPm5yX29mX3Byb2dyYW1zID09IDEpCj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICB3aGlsZSAoIShpbnRlcnJ1cHQgPSBmZl9j aGVja19pbnRlcnJ1cHQoJnMtPmludGVycnVwdF9jYWxsYmFjaykpKSB7Cj4gKyAgICAgICAgcmV0 ID0gZHZkdmlkZW9fcGxheV9uZXh0X3BzX2Jsb2NrKHMsICZzdGF0ZSwgbmF2X2J1ZiwKPiBEVkRW SURFT19CTE9DS19TSVpFLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmbmF2X2V2ZW50LCBOVUxMKTsKPiArICAgICAgICBpZiAocmV0IDwgMCAmJiByZXQgIT0g QVZFUlJPUl9FT0YpCj4gKyAgICAgICAgICAgIGdvdG8gZW5kX2Nsb3NlOwo+ICsKPiArICAgICAg ICBpZiAobmF2X2V2ZW50ICE9IERWRE5BVl9OQVZfUEFDS0VUICYmIHJldCAhPSBBVkVSUk9SX0VP RikKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIGlmIChzdGF0ZS5wdHQg PT0gbGFzdF9wdHQpIHsKPiArICAgICAgICAgICAgY3VyX2NoYXB0ZXJfZHVyYXRpb24gKz0gc3Rh dGUudm9idV9kdXJhdGlvbjsKPiArICAgICAgICAgICAgLyogZW5zdXJlIHdlIGFkZCB0aGUgbGFz dCBjaGFwdGVyICovCj4gKyAgICAgICAgICAgIGlmIChyZXQgIT0gQVZFUlJPUl9FT0YpCj4gKyAg ICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICgh YXZwcml2X25ld19jaGFwdGVyKHMsIG5iX2NoYXB0ZXJzLCBEVkRWSURFT19USU1FX0JBU0VfUSwK PiBjdXJfY2hhcHRlcl9vZmZzZXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3VyX2NoYXB0ZXJfb2Zmc2V0ICsKPiBjdXJfY2hhcHRlcl9kdXJhdGlvbiwgTlVMTCkpIHsKPiAr ICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICBnb3RvIGVu ZF9jbG9zZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIG5iX2NoYXB0ZXJzKys7Cj4gKyAg ICAgICAgY3VyX2NoYXB0ZXJfb2Zmc2V0ICs9IGN1cl9jaGFwdGVyX2R1cmF0aW9uOwo+ICsgICAg ICAgIGN1cl9jaGFwdGVyX2R1cmF0aW9uID0gc3RhdGUudm9idV9kdXJhdGlvbjsKPiArICAgICAg ICBsYXN0X3B0dCA9IHN0YXRlLnB0dDsKPiArCj4gKyAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9S X0VPRikKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGludGVy cnVwdCkgewo+ICsgICAgICAgIHJldCA9IEFWRVJST1JfRVhJVDsKPiArICAgICAgICBnb3RvIGVu ZF9jbG9zZTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAocmV0IDwgMCAmJiByZXQgIT0gQVZFUlJP Ul9FT0YpCj4gKyAgICAgICAgZ290byBlbmRfY2xvc2U7Cj4gKwo+ICsgICAgcy0+ZHVyYXRpb24g PSBhdl9yZXNjYWxlX3Eoc3RhdGUucGdjX2VsYXBzZWQsIERWRFZJREVPX1RJTUVfQkFTRV9RLAo+ IEFWX1RJTUVfQkFTRV9RKTsKPiArICAgIGMtPmR1cmF0aW9uX3B0bSA9IHN0YXRlLnBnY19lbGFw c2VkOwo+ICsKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfSU5GTywgIkNoYXB0ZXIgbWFya2VyIGlu ZGV4aW5nIGNvbXBsZXRlXG4iKTsKPiArICAgIHJldCA9IDA7Cj4gKwo+ICtlbmRfY2xvc2U6Cj4g KyAgICBkdmR2aWRlb19wbGF5X2Nsb3NlKHMsICZzdGF0ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19wZ2NfY2hhcHRlcnNfc2V0dXAoQVZG b3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMt PnByaXZfZGF0YTsKPiArCj4gKyAgICB1aW50NjRfdCB0aW1lX3ByZXYgPSAwOwo+ICsgICAgaW50 NjRfdCB0b3RhbF9kdXJhdGlvbiA9IDA7Cj4gKwo+ICsgICAgaW50IGNoYXB0ZXJfc3RhcnQgPSBj LT5vcHRfY2hhcHRlcl9zdGFydCAtIDE7Cj4gKyAgICBpbnQgY2hhcHRlcl9lbmQgPSBjLT5vcHRf Y2hhcHRlcl9lbmQgPiAwID8gYy0+b3B0X2NoYXB0ZXJfZW5kIDoKPiBjLT5wbGF5X3N0YXRlLnBn Y19uYl9wZ19lc3QgLSAxOwo+ICsKPiArICAgIGlmIChjaGFwdGVyX3N0YXJ0ID09IGNoYXB0ZXJf ZW5kIHx8IGMtPnBsYXlfc3RhdGUucGdjX25iX3BnX2VzdCA9PSAxKQo+IHsKPiArICAgICAgICBz LT5kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcShjLT5wbGF5X3N0YXRlLnBnY19kdXJhdGlvbl9lc3Qs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFZEVklERU9fVElNRV9CQVNF X1EsIEFWX1RJTUVfQkFTRV9RKTsKPiArICAgICAgICByZXR1cm4gMDsKPiArICAgIH0KPiArCj4g KyAgICBmb3IgKGludCBpID0gY2hhcHRlcl9zdGFydDsgaSA8IGNoYXB0ZXJfZW5kOyBpKyspIHsK PiArICAgICAgICB1aW50NjRfdCB0aW1lX2VmZmVjdGl2ZSA9IGMtPnBsYXlfc3RhdGUucGdjX3Bn X3RpbWVzX2VzdFtpXSAtCj4gYy0+cGxheV9zdGF0ZS5uYXZfcHRzOwo+ICsKPiArICAgICAgICBp ZiAoIWF2cHJpdl9uZXdfY2hhcHRlcihzLCBpLCBEVkRWSURFT19USU1FX0JBU0VfUSwgdGltZV9w cmV2LAo+IHRpbWVfZWZmZWN0aXZlLCBOVUxMKSkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKPiArCj4gKyAgICAgICAgdGltZV9wcmV2ID0gdGltZV9lZmZlY3RpdmU7Cj4g KyAgICAgICAgdG90YWxfZHVyYXRpb24gPSB0aW1lX2VmZmVjdGl2ZTsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoYy0+b3B0X2NoYXB0ZXJfc3RhcnQgPT0gMSAmJiBjLT5vcHRfY2hhcHRlcl9lbmQg PT0gMCkKPiArICAgICAgICBzLT5kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcShjLT5wbGF5X3N0YXRl LnBnY19kdXJhdGlvbl9lc3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFZEVklERU9fVElNRV9CQVNFX1EsIEFWX1RJTUVfQkFTRV9RKTsKPiArICAgIGVsc2UKPiArICAg ICAgICBzLT5kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcSh0b3RhbF9kdXJhdGlvbiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0VfUSwgQVZfVElN RV9CQVNFX1EpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2 ZHZpZGVvX3ZpZGVvX3N0cmVhbV9hbmFseXplKEFWRm9ybWF0Q29udGV4dCAqcywgdmlkZW9fYXR0 cl90Cj4gdmlkZW9fYXR0ciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnkKPiAqZW50cnkpCj4gK3sKPiArICAgIEFW UmF0aW9uYWwgZnJhbWVyYXRlOwo+ICsgICAgaW50IGhlaWdodCA9IDA7Cj4gKyAgICBpbnQgd2lk dGggPSAwOwo+ICsgICAgaW50IGlzX3BhbCA9IHZpZGVvX2F0dHIudmlkZW9fZm9ybWF0ID09IDE7 Cj4gKwo+ICsgICAgZnJhbWVyYXRlID0gaXNfcGFsID8gKEFWUmF0aW9uYWwpIHsgMjUsIDEgfSA6 IChBVlJhdGlvbmFsKSB7IDMwMDAwLAo+IDEwMDEgfTsKPiArICAgIGhlaWdodCA9IGlzX3BhbCA/ IDU3NiA6IDQ4MDsKPiArCj4gKyAgICBpZiAoaGVpZ2h0ID4gMCkgewo+ICsgICAgICAgIHN3aXRj aCAodmlkZW9fYXR0ci5waWN0dXJlX3NpemUpIHsKPiArICAgICAgICAgICAgY2FzZSAwOiAvKiBE MSAqLwo+ICsgICAgICAgICAgICAgICAgd2lkdGggPSA3MjA7Cj4gKyAgICAgICAgICAgICAgICBi cmVhazsKPiArICAgICAgICAgICAgY2FzZSAxOiAvKiA0Q0lGICovCj4gKyAgICAgICAgICAgICAg ICB3aWR0aCA9IDcwNDsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBj YXNlIDI6IC8qIEhhbGYgRDEgKi8KPiArICAgICAgICAgICAgICAgIHdpZHRoID0gMzUyOwo+ICsg ICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgMzogLyogQ0lGICovCj4g KyAgICAgICAgICAgICAgICB3aWR0aCA9IDM1MjsKPiArICAgICAgICAgICAgICAgIGhlaWdodCAv PSAyOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsK PiArICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkgewo+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9M T0dfRVJST1IsICJJbnZhbGlkIHZpZGVvIHN0cmVhbSBwYXJhbWV0ZXJzIGluIHRoZQo+IElGTyBo ZWFkZXJzLCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgY291bGQg YmUgYW4gYXV0aG9yaW5nIGVycm9yIG9yCj4gZW1wdHkgdGl0bGUgIgo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIodmlkZW9fZm9ybWF0PSVkIHBpY3R1cmVfc2l6ZT0lZClcbiIs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fYXR0ci52aWRlb19mb3Jt YXQsCj4gdmlkZW9fYXR0ci5waWN0dXJlX3NpemUpOwo+ICsKPiArICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICBlbnRyeS0+c3RhcnRjb2RlID0g MHgxRTA7Cj4gKyAgICBlbnRyeS0+Y29kZWNfaWQgPSAhdmlkZW9fYXR0ci5tcGVnX3ZlcnNpb24g PyBBVl9DT0RFQ19JRF9NUEVHMVZJREVPIDoKPiBBVl9DT0RFQ19JRF9NUEVHMlZJREVPOwo+ICsg ICAgZW50cnktPndpZHRoID0gd2lkdGg7Cj4gKyAgICBlbnRyeS0+aGVpZ2h0ID0gaGVpZ2h0Owo+ ICsgICAgZW50cnktPmRhciA9IHZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3RfcmF0aW8gPyAoQVZS YXRpb25hbCkgeyAxNiwgOSB9Cj4gOiAoQVZSYXRpb25hbCkgeyA0LCAzIH07Cj4gKyAgICBlbnRy eS0+ZnJhbWVyYXRlID0gZnJhbWVyYXRlOwo+ICsgICAgZW50cnktPmhhc19jYyA9ICFpc19wYWwg JiYgKHZpZGVvX2F0dHIubGluZTIxX2NjXzEgfHwKPiB2aWRlb19hdHRyLmxpbmUyMV9jY18yKTsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb192aWRl b19zdHJlYW1fYWRkKEFWRm9ybWF0Q29udGV4dCAqcywKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRyeSAqZW50cnksCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWU3RyZWFtUGFyc2VUeXBl IG5lZWRfcGFyc2luZykKPiArewo+ICsgICAgQVZTdHJlYW0gKnN0Owo+ICsgICAgRkZTdHJlYW0g KnN0aTsKPiArCj4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0ocywgTlVMTCk7Cj4gKyAg ICBpZiAoIXN0KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAg c3QtPmlkID0gZW50cnktPnN0YXJ0Y29kZTsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlw ZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBl bnRyeS0+Y29kZWNfaWQ7Cj4gKyAgICBzdC0+Y29kZWNwYXItPndpZHRoID0gZW50cnktPndpZHRo Owo+ICsgICAgc3QtPmNvZGVjcGFyLT5oZWlnaHQgPSBlbnRyeS0+aGVpZ2h0Owo+ICsgICAgc3Qt PmNvZGVjcGFyLT5mb3JtYXQgPSBBVl9QSVhfRk1UX1lVVjQyMFA7Cj4gKyAgICBzdC0+Y29kZWNw YXItPmNvbG9yX3JhbmdlID0gQVZDT0xfUkFOR0VfTVBFRzsKPiArCj4gKyAgICBzdC0+Y29kZWNw YXItPmZyYW1lcmF0ZSA9IGVudHJ5LT5mcmFtZXJhdGU7Cj4gKyNpZiBGRl9BUElfUl9GUkFNRV9S QVRFCj4gKyAgICBzdC0+cl9mcmFtZV9yYXRlID0gZW50cnktPmZyYW1lcmF0ZTsKPiArI2VuZGlm Cj4gKyAgICBzdC0+YXZnX2ZyYW1lX3JhdGUgPSBlbnRyeS0+ZnJhbWVyYXRlOwo+ICsKPiArICAg IHN0aSA9IGZmc3RyZWFtKHN0KTsKPiArICAgIHN0aS0+cmVxdWVzdF9wcm9iZSA9IDA7Cj4gKyAg ICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFyc2luZzsKPiArICAgIHN0aS0+ZGlzcGxheV9h c3BlY3RfcmF0aW8gPSBlbnRyeS0+ZGFyOwo+ICsgICAgc3RpLT5hdmN0eC0+ZnJhbWVyYXRlID0g ZW50cnktPmZyYW1lcmF0ZTsKPiArCj4gKyAgICBpZiAoZW50cnktPmhhc19jYykKPiArICAgICAg ICBzdGktPmF2Y3R4LT5wcm9wZXJ0aWVzIHw9IEZGX0NPREVDX1BST1BFUlRZX0NMT1NFRF9DQVBU SU9OUzsKPiArCj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNfV1JB UF9CSVRTLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0VfUS5u dW0sCj4gRFZEVklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb192aWRlb19zdHJlYW1fc2V0dXAoQVZGb3JtYXRD b250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZf ZGF0YTsKPiArCj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIERWRFZpZGVvVlRTVmlkZW9TdHJl YW1FbnRyeSBlbnRyeSA9IHswfTsKPiArCj4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3ZpZGVv X3N0cmVhbV9hbmFseXplKHMsCj4gYy0+dnRzX2lmby0+dnRzaV9tYXQtPnZ0c192aWRlb19hdHRy LCAmZW50cnkpKSA8IDAgfHwKPiArICAgICAgICAocmV0ID0gZHZkdmlkZW9fdmlkZW9fc3RyZWFt X2FkZChjLT5tcGVnX2N0eCwgJmVudHJ5LAo+IEFWU1RSRUFNX1BBUlNFX0ZVTEwpKSA8IDAgfHwK PiArICAgICAgICAocmV0ID0gZHZkdmlkZW9fdmlkZW9fc3RyZWFtX2FkZChzLCAmZW50cnksCj4g QVZTVFJFQU1fUEFSU0VfSEVBREVSUykpIDwgMCkgewo+ICsKPiArICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFkZCB2aWRlbyBzdHJlYW1cbiIpOwo+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkdmR2aWRlb19hdWRpb19zdHJlYW1fYW5hbHl6ZShBVkZvcm1hdENvbnRleHQg KnMsIGF1ZGlvX2F0dHJfdAo+IGF1ZGlvX2F0dHIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDE2X3QgYXVkaW9fY29udHJvbCwKPiBEVkRWaWRlb1BHQ0F1 ZGlvU3RyZWFtRW50cnkgKmVudHJ5KQo+ICt7Cj4gKyAgICBpbnQgc3RhcnRjb2RlID0gMDsKPiAr ICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfTk9ORTsKPiArICAgIGlu dCBzYW1wbGVfZm10ID0gQVZfU0FNUExFX0ZNVF9OT05FOwo+ICsgICAgaW50IHNhbXBsZV9yYXRl ID0gMDsKPiArICAgIGludCBiaXRfZGVwdGggPSAwOwo+ICsgICAgaW50IG5iX2NoYW5uZWxzID0g MDsKPiArICAgIEFWQ2hhbm5lbExheW91dCBjaF9sYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KSB7 MH07Cj4gKyAgICBjaGFyIGxhbmdfZHZkWzNdID0gezB9Owo+ICsKPiArICAgIGludCBwb3NpdGlv biA9IChhdWRpb19jb250cm9sICYgMHg3RjAwKSA+PiA4Owo+ICsKPiArICAgIC8qIFhYWChQQVRD SFdFTENPTUUpOiBTRERTIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGxhY2sgb2Ygc2FtcGxlCj4g bWF0ZXJpYWwgKi8KPiArICAgIHN3aXRjaCAoYXVkaW9fYXR0ci5hdWRpb19mb3JtYXQpIHsKPiAr ICAgICAgICBjYXNlIDA6IC8qIEFDMyAqLwo+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NP REVDX0lEX0FDMzsKPiArICAgICAgICAgICAgc2FtcGxlX2ZtdCA9IEFWX1NBTVBMRV9GTVRfRkxU UDsKPiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsKPiArICAgICAgICAgICAgc3Rh cnRjb2RlID0gMHg4MCArIHBvc2l0aW9uOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAg ICBjYXNlIDI6IC8qIE1QMSAqLwo+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lE X01QMTsKPiArICAgICAgICAgICAgc2FtcGxlX2ZtdCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9u ID8gQVZfU0FNUExFX0ZNVF9TMzIgOgo+IEFWX1NBTVBMRV9GTVRfUzE2Owo+ICsgICAgICAgICAg ICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ICsgICAgICAgICAgICBiaXRfZGVwdGggPSBhdWRpb19h dHRyLnF1YW50aXphdGlvbiA/IDIwIDogMTY7Cj4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9IDB4 MUMwICsgcG9zaXRpb247Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgMzog LyogTVAyICovCj4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfTVAyOwo+ICsg ICAgICAgICAgICBzYW1wbGVfZm10ID0gYXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPyBBVl9TQU1Q TEVfRk1UX1MzMiA6Cj4gQVZfU0FNUExFX0ZNVF9TMTY7Cj4gKyAgICAgICAgICAgIHNhbXBsZV9y YXRlID0gNDgwMDA7Cj4gKyAgICAgICAgICAgIGJpdF9kZXB0aCA9IGF1ZGlvX2F0dHIucXVhbnRp emF0aW9uID8gMjAgOiAxNjsKPiArICAgICAgICAgICAgc3RhcnRjb2RlID0gMHgxQzAgKyBwb3Np dGlvbjsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSA0OiAvKiBEVkQgUENN ICovCj4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09ERUNfSURfUENNX0RWRDsKPiArICAg ICAgICAgICAgc2FtcGxlX2ZtdCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gQVZfU0FNUExF X0ZNVF9TMzIgOgo+IEFWX1NBTVBMRV9GTVRfUzE2Owo+ICsgICAgICAgICAgICBzYW1wbGVfcmF0 ZSA9IGF1ZGlvX2F0dHIuc2FtcGxlX2ZyZXF1ZW5jeSA/IDk2MDAwIDogNDgwMDA7Cj4gKyAgICAg ICAgICAgIGJpdF9kZXB0aCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID09IDIgPyAyNCA6Cj4g KGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gMjAgOiAxNik7Cj4gKyAgICAgICAgICAgIHN0YXJ0 Y29kZSA9IDB4QTAgKyBwb3NpdGlvbjsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAg Y2FzZSA2OiAvKiBEQ0EgKi8KPiArICAgICAgICAgICAgY29kZWNfaWQgPSBBVl9DT0RFQ19JRF9E VFM7Cj4gKyAgICAgICAgICAgIHNhbXBsZV9mbXQgPSBBVl9TQU1QTEVfRk1UX0ZMVFA7Cj4gKyAg ICAgICAgICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gKyAgICAgICAgICAgIGJpdF9kZXB0aCA9 IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID09IDIgPyAyNCA6Cj4gKGF1ZGlvX2F0dHIucXVhbnRp emF0aW9uID8gMjAgOiAxNik7Cj4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9IDB4ODggKyBwb3Np dGlvbjsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbmJfY2hhbm5l bHMgPSBhdWRpb19hdHRyLmNoYW5uZWxzICsgMTsKPiArCj4gKyAgICBpZiAoY29kZWNfaWQgPT0g QVZfQ09ERUNfSURfTk9ORSAgICAgICAgIHx8Cj4gKyAgICAgICAgICAgIHN0YXJ0Y29kZSA9PSAw ICAgICAgICAgICAgICAgICAgIHx8Cj4gKyAgICAgICAgICAgIHNhbXBsZV9mbXQgPT0gQVZfU0FN UExFX0ZNVF9OT05FIHx8Cj4gKyAgICAgICAgICAgIHNhbXBsZV9yYXRlID09IDAgICAgICAgICAg ICAgICAgIHx8Cj4gKyAgICAgICAgICAgIG5iX2NoYW5uZWxzID09IDApIHsKPiArCj4gKyAgICAg ICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYXVkaW8gc3RyZWFtIHBhcmFtZXRl cnMgaW4gdGhlCj4gSUZPIGhlYWRlcnMsICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAidGhpcyBjb3VsZCBiZSBhbiBhdXRob3JpbmcgZXJyb3Igb3IKPiBkdW1teSB0aXRsZSAi Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzdHJlYW0gcG9zaXRpb24gJWQg aW4gSUZPKVxuIiwKPiBwb3NpdGlvbik7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKG5iX2NoYW5uZWxzID09IDIpCj4gKyAgICAg ICAgY2hfbGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dCkgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVP Owo+ICsgICAgZWxzZSBpZiAobmJfY2hhbm5lbHMgPT0gNikKPiArICAgICAgICBjaF9sYXlvdXQg PSAoQVZDaGFubmVsTGF5b3V0KSBBVl9DSEFOTkVMX0xBWU9VVF81UE9JTlQxOwo+ICsgICAgZWxz ZSBpZiAobmJfY2hhbm5lbHMgPT0gNykKPiArICAgICAgICBjaF9sYXlvdXQgPSAoQVZDaGFubmVs TGF5b3V0KSBBVl9DSEFOTkVMX0xBWU9VVF82UE9JTlQxOwo+ICsgICAgZWxzZSBpZiAobmJfY2hh bm5lbHMgPT0gOCkKPiArICAgICAgICBjaF9sYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KSBBVl9D SEFOTkVMX0xBWU9VVF83UE9JTlQxOwo+ICsKPiArCj4gKyAgICBpZiAoYXVkaW9fYXR0ci5hcHBs aWNhdGlvbl9tb2RlID09IDEpIHsKPiArICAgICAgICBlbnRyeS0+ZGlzcG9zaXRpb24gfD0gQVZf RElTUE9TSVRJT05fS0FSQU9LRTsKPiArCj4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19XQVJO SU5HLCAiRXh0ZW5kZWQga2FyYW9rZSBtZXRhZGF0YSBpcyBub3QKPiBzdXBwb3J0ZWQgYXQgdGhp cyB0aW1lICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc3RyZWFtIGlk PSVkKVxuIiwgc3RhcnRjb2RlKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoYXVkaW9fYXR0ci5j b2RlX2V4dGVuc2lvbiA9PSAyKQo+ICsgICAgICAgIGVudHJ5LT5kaXNwb3NpdGlvbiB8PSBBVl9E SVNQT1NJVElPTl9WSVNVQUxfSU1QQUlSRUQ7Cj4gKyAgICBpZiAoYXVkaW9fYXR0ci5jb2RlX2V4 dGVuc2lvbiA9PSAzIHx8IGF1ZGlvX2F0dHIuY29kZV9leHRlbnNpb24gPT0gNCkKPiArICAgICAg ICBlbnRyeS0+ZGlzcG9zaXRpb24gfD0gQVZfRElTUE9TSVRJT05fQ09NTUVOVDsKPiArCj4gKyAg ICBBVl9XQjE2KGxhbmdfZHZkLCBhdWRpb19hdHRyLmxhbmdfY29kZSk7Cj4gKwo+ICsgICAgZW50 cnktPnN0YXJ0Y29kZSA9IHN0YXJ0Y29kZTsKPiArICAgIGVudHJ5LT5jb2RlY19pZCA9IGNvZGVj X2lkOwo+ICsgICAgZW50cnktPnNhbXBsZV9yYXRlID0gc2FtcGxlX3JhdGU7Cj4gKyAgICBlbnRy eS0+Yml0X2RlcHRoID0gYml0X2RlcHRoOwo+ICsgICAgZW50cnktPm5iX2NoYW5uZWxzID0gbmJf Y2hhbm5lbHM7Cj4gKyAgICBlbnRyeS0+Y2hfbGF5b3V0ID0gY2hfbGF5b3V0Owo+ICsgICAgZW50 cnktPmxhbmdfaXNvID0gZmZfY29udmVydF9sYW5nX3RvKGxhbmdfZHZkLCBBVl9MQU5HX0lTTzYz OV8yX0JJQkwpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2 ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGQoQVZGb3JtYXRDb250ZXh0ICpzLAo+IERWRFZpZGVvUEdD QXVkaW9TdHJlYW1FbnRyeSAqZW50cnksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIEFWU3RyZWFtUGFyc2VUeXBlIG5lZWRfcGFyc2luZykKPiArewo+ICsgICAg QVZTdHJlYW0gKnN0Owo+ICsgICAgRkZTdHJlYW0gKnN0aTsKPiArCj4gKyAgICBzdCA9IGF2Zm9y bWF0X25ld19zdHJlYW0ocywgTlVMTCk7Cj4gKyAgICBpZiAoIXN0KQo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgc3QtPmlkID0gZW50cnktPnN0YXJ0Y29kZTsK PiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9BVURJTzsKPiAr ICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBlbnRyeS0+Y29kZWNfaWQ7Cj4gKyAgICBzdC0+ Y29kZWNwYXItPmZvcm1hdCA9IGVudHJ5LT5zYW1wbGVfZm10Owo+ICsgICAgc3QtPmNvZGVjcGFy LT5zYW1wbGVfcmF0ZSA9IGVudHJ5LT5zYW1wbGVfcmF0ZTsKPiArICAgIHN0LT5jb2RlY3Bhci0+ Yml0c19wZXJfY29kZWRfc2FtcGxlID0gZW50cnktPmJpdF9kZXB0aDsKPiArICAgIHN0LT5jb2Rl Y3Bhci0+Yml0c19wZXJfcmF3X3NhbXBsZSA9IGVudHJ5LT5iaXRfZGVwdGg7Cj4gKyAgICBzdC0+ Y29kZWNwYXItPmNoX2xheW91dCA9IGVudHJ5LT5jaF9sYXlvdXQ7Cj4gKyAgICBzdC0+Y29kZWNw YXItPmNoX2xheW91dC5uYl9jaGFubmVscyA9IGVudHJ5LT5uYl9jaGFubmVsczsKPiArICAgIHN0 LT5kaXNwb3NpdGlvbiA9IGVudHJ5LT5kaXNwb3NpdGlvbjsKPiArCj4gKyAgICBpZiAoZW50cnkt PmxhbmdfaXNvKQo+ICsgICAgICAgIGF2X2RpY3Rfc2V0KCZzdC0+bWV0YWRhdGEsICJsYW5ndWFn ZSIsIGVudHJ5LT5sYW5nX2lzbywgMCk7Cj4gKwo+ICsgICAgc3RpID0gZmZzdHJlYW0oc3QpOwo+ ICsgICAgc3RpLT5yZXF1ZXN0X3Byb2JlID0gMDsKPiArICAgIHN0aS0+bmVlZF9wYXJzaW5nID0g bmVlZF9wYXJzaW5nOwo+ICsKPiArICAgIGF2cHJpdl9zZXRfcHRzX2luZm8oc3QsIERWRFZJREVP X1BUU19XUkFQX0JJVFMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIERWRFZJREVPX1RJTUVf QkFTRV9RLm51bSwKPiBEVkRWSURFT19USU1FX0JBU0VfUS5kZW4pOwo+ICsKPiArICAgIHJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGRfYWxs KEFWRm9ybWF0Q29udGV4dCAqcykKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMg PSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBjLT52dHNfaWZvLT52dHNpX21hdC0+bnJfb2ZfdnRzX2F1ZGlvX3N0cmVh bXM7Cj4gaSsrKSB7Cj4gKyAgICAgICAgRFZEVmlkZW9QR0NBdWRpb1N0cmVhbUVudHJ5IGVudHJ5 ID0gezB9Owo+ICsKPiArICAgICAgICBpZiAoIShjLT5wbGF5X3N0YXRlLnBnYy0+YXVkaW9fY29u dHJvbFtpXSAmIDB4ODAwMCkpCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAg ICBpZiAoKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hbmFseXplKHMsCj4gYy0+dnRzX2lm by0+dnRzaV9tYXQtPnZ0c19hdWRpb19hdHRyW2ldLAo+ICsKPiAgYy0+cGxheV9zdGF0ZS5wZ2Mt PmF1ZGlvX2NvbnRyb2xbaV0sICZlbnRyeSkpIDwgMCkKPiArICAgICAgICAgICAgZ290byBicmVh a19lcnJvcjsKPiArCj4gKyAgICAgICAgLyogSUZPIHN0cnVjdHVyZXMgY2FuIGRlY2xhcmUgZHVw bGljYXRlIGVudHJpZXMgZm9yIHRoZSBzYW1lCj4gc3RhcnRjb2RlICovCj4gKyAgICAgICAgZm9y IChpbnQgaiA9IDA7IGogPCBzLT5uYl9zdHJlYW1zOyBqKyspCj4gKyAgICAgICAgICAgIGlmIChz LT5zdHJlYW1zW2pdLT5pZCA9PSBlbnRyeS5zdGFydGNvZGUpCj4gKyAgICAgICAgICAgICAgICBj b250aW51ZTsKPiArCj4gKyAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19hdWRpb19zdHJlYW1f YWRkKGMtPm1wZWdfY3R4LCAmZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfRlVMTCkpIDwgMCB8fAo+ ICsgICAgICAgICAgICAocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FkZChzLCAmZW50cnks Cj4gQVZTVFJFQU1fUEFSU0VfSEVBREVSUykpIDwgMCkKPiArICAgICAgICAgICAgZ290byBicmVh a19lcnJvcjsKPiArCj4gKyAgICAgICAgY29udGludWU7Cj4gKwo+ICticmVha19lcnJvcjoKPiAr ICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFkZCBhdWRpbyBzdHJl YW0gYXQgcG9zaXRpb24KPiAlZFxuIiwgaSk7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAg IH0KPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVv X3N1YnBfc3RyZWFtX2FuYWx5emUoQVZGb3JtYXRDb250ZXh0ICpzLCB1aW50MzJfdAo+IG9mZnNl dCwgc3VicF9hdHRyX3Qgc3VicF9hdHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFZEVmlkZW9QR0NTdWJ0aXRsZVN0cmVhbUVudHJ5Cj4gKmVudHJ5KQo+ICt7 Cj4gKyAgICBjaGFyIGxhbmdfZHZkWzNdID0gezB9Owo+ICsKPiArICAgIGVudHJ5LT5zdGFydGNv ZGUgPSAweDIwICsgKG9mZnNldCAmIDB4MUYpOwo+ICsKPiArICAgIGlmIChzdWJwX2F0dHIubGFu Z19leHRlbnNpb24gPT0gOSkKPiArICAgICAgICBlbnRyeS0+ZGlzcG9zaXRpb24gfD0gQVZfRElT UE9TSVRJT05fRk9SQ0VEOwo+ICsKPiArICAgIEFWX1dCMTYobGFuZ19kdmQsIHN1YnBfYXR0ci5s YW5nX2NvZGUpOwo+ICsgICAgZW50cnktPmxhbmdfaXNvID0gZmZfY29udmVydF9sYW5nX3RvKGxh bmdfZHZkLCBBVl9MQU5HX0lTTzYzOV8yX0JJQkwpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZChBVkZvcm1hdENvbnRl eHQgKnMsCj4gRFZEVmlkZW9QR0NTdWJ0aXRsZVN0cmVhbUVudHJ5ICplbnRyeSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVlN0cmVhbVBhcnNlVHlwZSBuZWVk X3BhcnNpbmcpCj4gK3sKPiArICAgIEFWU3RyZWFtICpzdDsKPiArICAgIEZGU3RyZWFtICpzdGk7 Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArCj4gKyAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0o cywgTlVMTCk7Cj4gKyAgICBpZiAoIXN0KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7Cj4gKwo+ICsgICAgc3QtPmlkID0gZW50cnktPnN0YXJ0Y29kZTsKPiArICAgIHN0LT5jb2Rl Y3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9TVUJUSVRMRTsKPiArICAgIHN0LT5jb2Rl Y3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9EVkRfU1VCVElUTEU7Cj4gKwo+ICsgICAgaWYg KGVudHJ5LT5sYW5nX2lzbykKPiArICAgICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAi bGFuZ3VhZ2UiLCBlbnRyeS0+bGFuZ19pc28sIDApOwo+ICsKPiArICAgIGF2X2RpY3Rfc2V0KCZz dC0+bWV0YWRhdGEsICJWSUVXUE9SVCIsCj4gZHZkdmlkZW9fc3VicF92aWV3cG9ydF9sYWJlbHNb ZW50cnktPnZpZXdwb3J0XSwgMCk7Cj4gKwo+ICsgICAgc3QtPmRpc3Bvc2l0aW9uID0gZW50cnkt PmRpc3Bvc2l0aW9uOwo+ICsKPiArICAgIHN0aSA9IGZmc3RyZWFtKHN0KTsKPiArICAgIHN0aS0+ cmVxdWVzdF9wcm9iZSA9IDA7Cj4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFyc2lu ZzsKPiArCj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNfV1JBUF9C SVRTLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0VfUS5udW0s Cj4gRFZEVklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9pbnRlcm5hbChBVkZv cm1hdENvbnRleHQgKnMsIHVpbnQzMl90Cj4gb2Zmc2V0LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwX2F0dHJfdCBzdWJwX2F0dHIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0KPiBEVkRWaWRlb1N1 YnBpY3R1cmVWaWV3cG9ydCB2aWV3cG9ydCkKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRl eHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaW50IHJldCA9IDA7Cj4gKyAgICBEVkRW aWRlb1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgZW50cnkgPSB7MH07Cj4gKwo+ICsgICAgZW50cnku dmlld3BvcnQgPSB2aWV3cG9ydDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnBf c3RyZWFtX2FuYWx5emUocywgb2Zmc2V0LCBzdWJwX2F0dHIsCj4gJmVudHJ5KSkgPCAwKQo+ICsg ICAgICAgIGdvdG8gZW5kX2Vycm9yOwo+ICsKPiArICAgIC8qIElGTyBzdHJ1Y3R1cmVzIGNhbiBk ZWNsYXJlIGR1cGxpY2F0ZSBlbnRyaWVzIGZvciB0aGUgc2FtZQo+IHN0YXJ0Y29kZSAqLwo+ICsg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1zOyBpKyspCj4gKyAgICAgICAgaWYg KHMtPnN0cmVhbXNbaV0tPmlkID09IGVudHJ5LnN0YXJ0Y29kZSkKPiArICAgICAgICAgICAgZ290 byBlbmQ7Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGQoYy0+ bXBlZ19jdHgsICZlbnRyeSwKPiBBVlNUUkVBTV9QQVJTRV9GVUxMKSkgPCAwIHx8Cj4gKyAgICAg ICAgKHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZChzLCAmZW50cnksCj4gQVZTVFJFQU1f UEFSU0VfSEVBREVSUykpIDwgMCkKPiArICAgICAgICBnb3RvIGVuZF9lcnJvcjsKPiArCj4gKyAg ICBnb3RvIGVuZDsKPiArCj4gK2VuZF9lcnJvcjoKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gYWRkIHN1YnRpdGxlIHN0cmVhbVxuIik7Cj4gKwo+ICtlbmQ6Cj4gKyAg ICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnBfc3RyZWFt X2FkZF9hbGwoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29u dGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpZiAoIWMtPnZ0c19pZm8tPnZ0c2lf bWF0LT5ucl9vZl92dHNfc3VicF9zdHJlYW1zKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiAr ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYy0+dnRzX2lmby0+dnRzaV9tYXQtPm5yX29mX3Z0c19z dWJwX3N0cmVhbXM7Cj4gaSsrKSB7Cj4gKyAgICAgICAgaW50IHJldCA9IDA7Cj4gKyAgICAgICAg dWludDMyX3Qgc3VicF9jb250cm9sOwo+ICsgICAgICAgIHN1YnBfYXR0cl90IHN1YnBfYXR0cjsK PiArICAgICAgICB2aWRlb19hdHRyX3QgdmlkZW9fYXR0cjsKPiArCj4gKyAgICAgICAgc3VicF9j b250cm9sID0gYy0+cGxheV9zdGF0ZS5wZ2MtPnN1YnBfY29udHJvbFtpXTsKPiArICAgICAgICBp ZiAoIShzdWJwX2NvbnRyb2wgJiAweDgwMDAwMDAwKSkKPiArICAgICAgICAgICAgY29udGludWU7 Cj4gKwo+ICsgICAgICAgIC8qIHRoZXJlIGNhbiBiZSBzZXZlcmFsIHByZXNlbnRhdGlvbnMgZm9y IG9uZSBTUFUgKi8KPiArICAgICAgICAvKiB0aGUgREFSIGNoZWNrIGlzIGZsZXhpYmxlIGluIG9y ZGVyIHRvIHN1cHBvcnQgd2VpcmQgYXV0aG9yaW5nCj4gKi8KPiArICAgICAgICB2aWRlb19hdHRy ID0gYy0+dnRzX2lmby0+dnRzaV9tYXQtPnZ0c192aWRlb19hdHRyOwo+ICsgICAgICAgIHN1YnBf YXR0ciA9IGMtPnZ0c19pZm8tPnZ0c2lfbWF0LT52dHNfc3VicF9hdHRyW2ldOwo+ICsKPiArICAg ICAgICAvKiA0OjMgKi8KPiArICAgICAgICBpZiAoIXZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3Rf cmF0aW8pIHsKPiArICAgICAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVhbV9h ZGRfaW50ZXJuYWwocywgc3VicF9jb250cm9sCj4gPj4gMjQsIHN1YnBfYXR0ciwKPiArCj4gIERW RFZJREVPX1NVQlBfVklFV1BPUlRfRlVMTFNDUkVFTikpIDwgMCkKPiArICAgICAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9Cj4g Kwo+ICsgICAgICAgIC8qIDE2OjkgKi8KPiArICAgICAgICBpZiAoKCAgICByZXQgPSBkdmR2aWRl b19zdWJwX3N0cmVhbV9hZGRfaW50ZXJuYWwocywgc3VicF9jb250cm9sCj4gPj4gMTYsIHN1YnBf YXR0ciwKPiArCj4gIERWRFZJREVPX1NVQlBfVklFV1BPUlRfV0lERVNDUkVFTikpIDwgMCkKPiAr ICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAgICAgLyogMTY6OSBsZXR0ZXJib3gg Ki8KPiArICAgICAgICBpZiAodmlkZW9fYXR0ci5wZXJtaXR0ZWRfZGYgPT0gMiB8fCB2aWRlb19h dHRyLnBlcm1pdHRlZF9kZiA9PSAwKQo+ICsgICAgICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVv X3N1YnBfc3RyZWFtX2FkZF9pbnRlcm5hbChzLCBzdWJwX2NvbnRyb2wKPiA+PiA4LCBzdWJwX2F0 dHIsCj4gKwo+ICBEVkRWSURFT19TVUJQX1ZJRVdQT1JUX0xFVFRFUkJPWCkpIDwgMCkKPiArICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgIC8qIDE2OjkgcGFuLWFuZC1z Y2FuICovCj4gKyAgICAgICAgaWYgKHZpZGVvX2F0dHIucGVybWl0dGVkX2RmID09IDEgfHwgdmlk ZW9fYXR0ci5wZXJtaXR0ZWRfZGYgPT0gMCkKPiArICAgICAgICAgICAgaWYgKChyZXQgPSBkdmR2 aWRlb19zdWJwX3N0cmVhbV9hZGRfaW50ZXJuYWwocywgc3VicF9jb250cm9sLAo+IHN1YnBfYXR0 ciwKPiArCj4gIERWRFZJREVPX1NVQlBfVklFV1BPUlRfUEFOU0NBTikpIDwgMCkKPiArICAgICAg ICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGR2ZHZpZGVvX3N1YmRlbXV4X2ZsdXNoKEFWRm9ybWF0Q29udGV4 dCAqcykKPiArewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7 Cj4gKwo+ICsgICAgaWYgKCFjLT5zZWdtZW50X3N0YXJ0ZWQpCj4gKyAgICAgICAgcmV0dXJuOwo+ ICsKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJmbHVzaGluZyBzdWItZGVtdXhlclxu Iik7Cj4gKyAgICBhdmlvX2ZsdXNoKCZjLT5tcGVnX3BiLnB1Yik7Cj4gKyAgICBmZl9yZWFkX2Zy YW1lX2ZsdXNoKGMtPm1wZWdfY3R4KTsKPiArICAgIGMtPnNlZ21lbnRfc3RhcnRlZCA9IDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fc3ViZGVtdXhfcmVhZF9kYXRhKHZvaWQgKm9w YXF1ZSwgdWludDhfdCAqYnVmLCBpbnQKPiBidWZfc2l6ZSkKPiArewo+ICsgICAgQVZGb3JtYXRD b250ZXh0ICpzID0gb3BhcXVlOwo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5w cml2X2RhdGE7Cj4gKwo+ICsgICAgaW50IHJldCA9IDA7Cj4gKyAgICBpbnQgbmF2X2V2ZW50Owo+ ICsKPiArICAgIGlmIChjLT5wbGF5X2VuZCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7 Cj4gKwo+ICsgICAgcmV0ID0gZHZkdmlkZW9fcGxheV9uZXh0X3BzX2Jsb2NrKG9wYXF1ZSwgJmMt PnBsYXlfc3RhdGUsIGJ1ZiwKPiBidWZfc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmbmF2X2V2ZW50LAo+IGR2ZHZpZGVvX3N1YmRlbXV4X2ZsdXNoKTsKPiAr Cj4gKyAgICBpZiAocmV0ID09IEFWRVJST1JfRU9GKSB7Cj4gKyAgICAgICAgYy0+bXBlZ19wYi5w dWIuZW9mX3JlYWNoZWQgPSAxOwo+ICsgICAgICAgIGMtPnBsYXlfZW5kID0gMTsKPiArCj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChyZXQgPj0g MCAmJiBuYXZfZXZlbnQgPT0gRFZETkFWX05BVl9QQUNLRVQpCj4gKyAgICAgICAgcmV0dXJuIEZG RVJST1JfUkVETzsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkdmR2aWRlb19zdWJkZW11eF9jbG9zZShBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAg IERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGF2X2Zy ZWVwKCZjLT5tcGVnX3BiLnB1Yi5idWZmZXIpOwo+ICsgICAgYXZfZnJlZXAoJmMtPm1wZWdfcGIp Owo+ICsgICAgYXZmb3JtYXRfY2xvc2VfaW5wdXQoJmMtPm1wZWdfY3R4KTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkdmR2aWRlb19zdWJkZW11eF9vcGVuKEFWRm9ybWF0Q29udGV4dCAqcykKPiAr ewo+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsg ICAgaW50IHJldCA9IDA7Cj4gKwo+ICsgICAgaWYgKCEoYy0+bXBlZ19mbXQgPSBhdl9maW5kX2lu cHV0X2Zvcm1hdCgibXBlZyIpKSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9ERU1VWEVSX05P VF9GT1VORDsKPiArCj4gKyAgICBpZiAoIShjLT5tcGVnX2N0eCA9IGF2Zm9ybWF0X2FsbG9jX2Nv bnRleHQoKSkpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyAgICBp ZiAoIShjLT5tcGVnX2J1ZiA9IGF2X21hbGxvY3ooRFZEVklERU9fQkxPQ0tfU0laRSkpKSB7Cj4g KyAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KGMtPm1wZWdfY3R4KTsKPiArICAgICAgICBj LT5tcGVnX2N0eCA9IE5VTEw7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgZmZpb19pbml0X2NvbnRleHQoJmMtPm1wZWdfcGIsIGMtPm1w ZWdfYnVmLCBEVkRWSURFT19CTE9DS19TSVpFLCAwLCBzLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgZHZkdmlkZW9fc3ViZGVtdXhfcmVhZF9kYXRhLCBOVUxMLCBOVUxMKTsKPiArICAgIGMtPm1w ZWdfcGIucHViLnNlZWthYmxlID0gMDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGZmX2NvcHlfd2hp dGVibGFja2xpc3RzKGMtPm1wZWdfY3R4LCBzKSkgPCAwKSB7Cj4gKyAgICAgICAgYXZmb3JtYXRf ZnJlZV9jb250ZXh0KGMtPm1wZWdfY3R4KTsKPiArICAgICAgICBjLT5tcGVnX2N0eCA9IE5VTEw7 Cj4gKwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYy0+bXBlZ19j dHgtPmZsYWdzID0gQVZGTVRfRkxBR19DVVNUT01fSU8gfCBBVkZNVF9GTEFHX0dFTlBUUzsKPiAr ICAgIGMtPm1wZWdfY3R4LT5jdHhfZmxhZ3MgfD0gQVZGTVRDVFhfVU5TRUVLQUJMRTsKPiArICAg IGMtPm1wZWdfY3R4LT5wcm9iZXNpemUgPSAwOwo+ICsgICAgYy0+bXBlZ19jdHgtPm1heF9hbmFs eXplX2R1cmF0aW9uID0gMDsKPiArICAgIGMtPm1wZWdfY3R4LT5pbnRlcnJ1cHRfY2FsbGJhY2sg PSBzLT5pbnRlcnJ1cHRfY2FsbGJhY2s7Cj4gKyAgICBjLT5tcGVnX2N0eC0+cGIgPSAmYy0+bXBl Z19wYi5wdWI7Cj4gKyAgICBjLT5tcGVnX2N0eC0+aW9fb3BlbiA9IE5VTEw7Cj4gKwo+ICsgICAg aWYgKChyZXQgPSBhdmZvcm1hdF9vcGVuX2lucHV0KCZjLT5tcGVnX2N0eCwgIiIsIGMtPm1wZWdf Zm10LCBOVUxMKSkKPiA8IDApCj4gKyAgICAgICAgYy0+bXBlZ19jdHggPSBOVUxMOwo+ICsKPiAr ICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcmVhZF9oZWFk ZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAq YyA9IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBpbnQgcmV0ID0gMDsKPiArCj4gKyAgICBpZiAo Yy0+b3B0X3RpdGxlID09IDApIHsKPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0lORk8sICJE ZWZhdWx0aW5nIHRvIHRpdGxlICMxLiAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVGhpcyBpcyBub3QgYWx3YXlzIHRoZSBtYWluIGZlYXR1cmUsCj4gdmFsaWRhdGlvbiBzdWdn ZXN0ZWQuXG4iKTsKPiArCj4gKyAgICAgICAgYy0+b3B0X3RpdGxlID0gMTsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoYy0+b3B0X3BnYykgewo+ICsgICAgICAgIGlmIChjLT5vcHRfcGcgPT0gMCkK PiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgY29vcmRpbmF0 ZXMuIElmIC1wZ2MgaXMgc2V0LAo+IC1wZyBtdXN0IGJlIHNldCB0b28uXG4iKTsKPiArICAgICAg ICBlbHNlIGlmIChjLT5vcHRfY2hhcHRlcl9zdGFydCA+IDEgfHwgYy0+b3B0X2NoYXB0ZXJfZW5k ID4gMCB8fAo+IGMtPm9wdF9wcmVpbmRleCkKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xP R19FUlJPUiwgIi1wZ2MgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUKPiAtcHJlaW5kZXggb3Ig Igo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWNoYXB0ZXJfc3RhcnQv LWNoYXB0ZXJfZW5kCj4gb3B0aW9uc1xuIik7Cj4gKwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb19pZm9fb3Bl bihzKSkgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKGMtPm9wdF9w cmVpbmRleCAmJiAocmV0ID0gZHZkdmlkZW9fcGdjX3ByZWluZGV4KHMpKSA8IDApCj4gKyAgICAg ICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3BsYXlfb3Blbihz LCAmYy0+cGxheV9zdGF0ZSkpIDwgMCAgIHx8Cj4gKyAgICAgICAgKHJldCA9IGR2ZHZpZGVvX3N1 YmRlbXV4X29wZW4ocykpIDwgMCAgICAgICAgICAgICAgIHx8Cj4gKyAgICAgICAgKHJldCA9IGR2 ZHZpZGVvX3ZpZGVvX3N0cmVhbV9zZXR1cChzKSkgPCAwICAgICAgICAgIHx8Cj4gKyAgICAgICAg KHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGRfYWxsKHMpKSA8IDAgICAgICAgIHx8Cj4g KyAgICAgICAgKHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZF9hbGwocykpIDwgMCkKPiAr ICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIGlmICghYy0+b3B0X3ByZWluZGV4KQo+ICsg ICAgICAgIHJldHVybiBkdmR2aWRlb19wZ2NfY2hhcHRlcnNfc2V0dXAocyk7Cj4gKwo+ICsgICAg cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdmR2aWRlb19yZWFkX3BhY2tldChB VkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCj4gK3sKPiArICAgIERWRFZpZGVvRGVt dXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGludCByZXQ7Cj4gKyAgICBl bnVtIEFWTWVkaWFUeXBlIHN0X3R5cGU7Cj4gKyAgICBpbnQ2NF90IGN1cl9kZWx0YSA9IDA7Cj4g Kwo+ICsgICAgaWYgKGMtPnBsYXlfZW5kKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsK PiArCj4gKyAgICByZXQgPSBhdl9yZWFkX2ZyYW1lKGMtPm1wZWdfY3R4LCBwa3QpOwo+ICsKPiAr ICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKCFj LT5zZWdtZW50X3N0YXJ0ZWQpCj4gKyAgICAgICAgYy0+c2VnbWVudF9zdGFydGVkID0gMTsKPiAr Cj4gKyAgICBpZiAocGt0LT5zdHJlYW1faW5kZXggPj0gcy0+bmJfc3RyZWFtcykgewo+ICsgICAg ICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJkaXNjYXJkaW5nIGZyYW1lIHdpdGggc3RyZWFt IHRoYXQgd2FzCj4gbm90IGluIElGTyBoZWFkZXJzICIKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiKGluZGV4PSVkKVxuIiwgcGt0LT5zdHJlYW1faW5kZXgpOwo+ICsKPiArICAg ICAgICByZXR1cm4gRkZFUlJPUl9SRURPOwo+ICsgICAgfQo+ICsKPiArICAgIHN0X3R5cGUgPQo+ IGMtPm1wZWdfY3R4LT5zdHJlYW1zW3BrdC0+c3RyZWFtX2luZGV4XS0+Y29kZWNwYXItPmNvZGVj X3R5cGU7Cj4gKwo+ICsgICAgaWYgKCFjLT5wbGF5X3N0YXJ0ZWQpIHsKPiArICAgICAgICBpZiAo c3RfdHlwZSAhPSBBVk1FRElBX1RZUEVfVklERU8gfHwgcGt0LT5wdHMgPT0gQVZfTk9QVFNfVkFM VUUgfHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0 LT5kdHMgPT0gQVZfTk9QVFNfVkFMVUUgfHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIShwa3QtPmZsYWdzICYKPiBBVl9QS1RfRkxBR19LRVkpKSB7Cj4g KyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfVkVSQk9TRSwgImRpc2NhcmRpbmcgcGFja2V0 IHdoaWNoIGlzIG5vdCBhCj4gdmlkZW8ga2V5ZnJhbWUgb3IgIgo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIHVuc2V0IFBUUy9EVFMgYXQgc3RhcnRcbiIpOwo+ ICsgICAgICAgICAgICByZXR1cm4gRkZFUlJPUl9SRURPOwo+ICsgICAgICAgIH0KPiArCj4gKyAg ICAgICAgYy0+Zmlyc3RfcHRzID0gcGt0LT5wdHM7Cj4gKyAgICAgICAgYy0+cGxheV9zdGFydGVk ID0gMTsKPiArCj4gKyAgICAgICAgcGt0LT5wdHMgPSAwOwo+ICsgICAgICAgIHBrdC0+ZHRzID0g Yy0+cGxheV9zdGF0ZS50c19vZmZzZXQgLSBwa3QtPnB0czsKPiArICAgIH0gZWxzZSB7Cj4gKyAg ICAgICAgY3VyX2RlbHRhID0gYy0+cGxheV9zdGF0ZS50c19vZmZzZXQgLSBjLT5maXJzdF9wdHM7 Cj4gKwo+ICsgICAgICAgIGlmIChjLT5wbGF5X3N0YXRlLm5iX2NlbGxzX3BsYXllZCA9PSAxICYm IChwa3QtPnB0cyA9PQo+IEFWX05PUFRTX1ZBTFVFIHx8Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdC0+ZHRzID09Cj4gQVZfTk9QVFNfVkFM VUUgfHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHBrdC0+cHRzICsgY3VyX2RlbHRhKQo+IDwgMCkpIHsKPiArICAgICAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19WRVJCT1NFLCAiZGlzY2FyZGluZyBwYWNrZXQgd2l0aCBuZWdhdGl2ZQo+IFBU UyBvciB1bnNldCBQVFMvRFRTICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiKHRoaXMgaXMgT0sgYXQgdGhlIHN0YXJ0IG9mIHRoZQo+IGZpcnN0IHBsYXliYWNrIGNl bGwpXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIEZGRVJST1JfUkVETzsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIGlmIChwa3QtPnB0cyAhPSBBVl9OT1BUU19WQUxVRSkKPiArICAgICAg ICAgICAgcGt0LT5wdHMgKz0gY3VyX2RlbHRhOwo+ICsgICAgICAgIGlmIChwa3QtPmR0cyAhPSBB Vl9OT1BUU19WQUxVRSkKPiArICAgICAgICAgICAgcGt0LT5kdHMgKz0gY3VyX2RlbHRhOwo+ICsg ICAgfQo+ICsKPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsICJzdD0lZCBwdHM9JWxkIGR0 cz0lbGQgdHNfb2Zmc2V0PSVsZAo+IGZpcnN0X3B0cz0lbGRcbiIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwa3QtPnN0cmVhbV9pbmRleCwgcGt0LT5wdHMsIHBrdC0+ZHRzLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+cGxheV9zdGF0ZS50c19vZmZzZXQsIGMtPmZp cnN0X3B0cyk7Cj4gKyAgICBpZiAocGt0LT5wdHMgPCAwKQo+ICsgICAgICAgIGF2X2xvZyhzLCBB Vl9MT0dfV0FSTklORywgIkludmFsaWQgZnJhbWUgUFRTIEAgc3Q9JWQgcHRzPSVsZAo+IGR0cz0l bGRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3QtPnN0cmVhbV9p bmRleCwgcGt0LT5wdHMsIHBrdC0+ZHRzKTsKPiArCj4gKyAgICByZXR1cm4gYy0+cGxheV9lbmQg PyBBVkVSUk9SX0VPRiA6IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fY2xvc2Uo QVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9 IHMtPnByaXZfZGF0YTsKPiArCj4gKyAgICBkdmR2aWRlb19zdWJkZW11eF9jbG9zZShzKTsKPiAr ICAgIGR2ZHZpZGVvX3BsYXlfY2xvc2UocywgJmMtPnBsYXlfc3RhdGUpOwo+ICsgICAgZHZkdmlk ZW9faWZvX2Nsb3NlKHMpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZGVmaW5l IE9GRlNFVCh4KSBvZmZzZXRvZihEVkRWaWRlb0RlbXV4Q29udGV4dCwgeCkKPiArc3RhdGljIGNv bnN0IEFWT3B0aW9uIGR2ZHZpZGVvX29wdGlvbnNbXSA9IHsKPiArICAgIHsiYW5nbGUiLCAgICAg ICAgICAgInBsYXliYWNrIGFuZ2xlIG51bWJlciIsCj4gICAgICAgICAgIE9GRlNFVChvcHRfYW5n bGUpLCAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0xIH0sCj4gIDEsICAgICAg ICAgIDksICAgICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAgIHsiY2hh cHRlcl9lbmQiLCAgICAgImV4aXQgY2hhcHRlciAoUFRUKSBudW1iZXIgKDA9ZW5kKSIsCj4gICAg ICAgICAgIE9GRlNFVChvcHRfY2hhcHRlcl9lbmQpLCAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsg Lmk2ND0wIH0sCj4gIDAsICAgICAgICAgIDk5LCAgICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdf UEFSQU0gfSwKPiArICAgIHsiY2hhcHRlcl9zdGFydCIsICAgImVudHJ5IGNoYXB0ZXIgKFBUVCkg bnVtYmVyIiwKPiAgICAgICAgICAgIE9GRlNFVChvcHRfY2hhcHRlcl9zdGFydCksICBBVl9PUFRf VFlQRV9JTlQsICAgIHsgLmk2ND0xIH0sCj4gIDEsICAgICAgICAgIDk5LCAgICAgICAgQVZfT1BU X0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAgIHsicGciLCAgICAgICAgICAgICAgImVudHJ5 IFBHIG51bWJlciAoMD1hdXRvKSIsCj4gICAgICAgICAgICBPRkZTRVQob3B0X3BnKSwgICAgICAg ICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LAo+ICAwLCAgICAgICAgICAyNTUs ICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7InBnYyIsICAgICAg ICAgICAgICJlbnRyeSBQR0MgbnVtYmVyICgwPWF1dG8pIiwKPiAgICAgICAgICAgT0ZGU0VUKG9w dF9wZ2MpLCAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTAgfSwKPiAgMCwg ICAgICAgICAgOTk5LCAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ICsgICAg eyJwcmVpbmRleCIsICAgICAgICAiZW5hYmxlIGZvciBhY2N1cmF0ZSBjaGFwdGVyIG1hcmtlcnMs IHNsb3cKPiAoMi1wYXNzIHJlYWQpIiwgIE9GRlNFVChvcHRfcHJlaW5kZXgpLCAgICAgICBBVl9P UFRfVFlQRV9CT09MLCAgIHsgLmk2ND0wCj4gfSwgICAgIDAsICAgICAgICAgIDEsICAgICAgICAg QVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiArICAgIHsicmVnaW9uIiwgICAgICAgICAg InBsYXliYWNrIHJlZ2lvbiBudW1iZXIgKDA9ZnJlZSkiLAo+ICAgICAgICAgICBPRkZTRVQob3B0 X3JlZ2lvbiksICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LAo+ICAwLCAg ICAgICAgICA4LCAgICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gKyAgICB7 InRpdGxlIiwgICAgICAgICAgICJ0aXRsZSBudW1iZXIgKDA9YXV0bykiLAo+ICAgICAgICAgICBP RkZTRVQob3B0X3RpdGxlKSwgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9 LAo+ICAwLCAgICAgICAgICA5OSwgICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0s Cj4gKyAgICB7InRyaW0iLCAgICAgICAgICAgICJ0cmltIHBhZGRpbmcgY2VsbHMgZnJvbSBzdGFy dCIsCj4gICAgICAgICAgIE9GRlNFVChvcHRfdHJpbSksICAgICAgICAgICBBVl9PUFRfVFlQRV9C T09MLCAgIHsgLmk2ND0xIH0sCj4gIDAsICAgICAgICAgIDEsICAgICAgICAgQVZfT1BUX0ZMQUdf REVDT0RJTkdfUEFSQU0gfSwKPiArICAgIHtOVUxMfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IEFWQ2xhc3MgZHZkdmlkZW9fY2xhc3MgPSB7Cj4gKyAgICAuY2xhc3NfbmFtZSA9ICJEVkQtVmlk ZW8gZGVtdXhlciIsCj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAo+ ICsgICAgLm9wdGlvbiAgICAgPSBkdmR2aWRlb19vcHRpb25zLAo+ICsgICAgLnZlcnNpb24gICAg PSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQKPiArfTsKPiArCj4gK2NvbnN0IEFWSW5wdXRGb3JtYXQg ZmZfZHZkdmlkZW9fZGVtdXhlciA9IHsKPiArICAgIC5uYW1lICAgICAgICAgICA9ICJkdmR2aWRl byIsCj4gKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiRFZELVZp ZGVvIiksCj4gKyAgICAucHJpdl9jbGFzcyAgICAgPSAmZHZkdmlkZW9fY2xhc3MsCj4gKyAgICAu cHJpdl9kYXRhX3NpemUgPSBzaXplb2YoRFZEVmlkZW9EZW11eENvbnRleHQpLAo+ICsgICAgLmZs YWdzICAgICAgICAgID0gQVZGTVRfTk9GSUxFIHwgQVZGTVRfU0hPV19JRFMgfCBBVkZNVF9UU19E SVNDT05UIHwKPiBBVkZNVF9OT19CWVRFX1NFRUsgfCBBVkZNVF9OT0dFTlNFQVJDSCB8IEFWRk1U X05PQklOU0VBUkNILAo+ICsgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRk1UX0lOSVRfQ0xFQU5V UCwKPiArICAgIC5yZWFkX2Nsb3NlICAgICA9IGR2ZHZpZGVvX2Nsb3NlLAo+ICsgICAgLnJlYWRf aGVhZGVyICAgID0gZHZkdmlkZW9fcmVhZF9oZWFkZXIsCj4gKyAgICAucmVhZF9wYWNrZXQgICAg PSBkdmR2aWRlb19yZWFkX3BhY2tldAo+ICt9Owo+IC0tCj4gMi4zNC4xCj4KPgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGlu ZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUs IG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1 bnN1YnNjcmliZSIuCg==