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 ESMTPS id 64B284C255 for ; Sat, 8 Mar 2025 13:52:41 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5C65468F3C2; Sat, 8 Mar 2025 15:52:37 +0200 (EET) Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F41CB68DCE9 for ; Sat, 8 Mar 2025 15:52:30 +0200 (EET) Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2fee4d9c2efso4858738a91.3 for ; Sat, 08 Mar 2025 05:52:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741441949; x=1742046749; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=3/P/2BO2L8Y7muyu2B/cBKCZ1xOiMZjU0r3aTDLOSK8=; b=mDpa528ibPWbM3MHH5+TY1grJWIYmN69/dxlzFF9znb35QAd5P2kScZItYruGJZBCT Tf4bLg2uokQ5X2dF2Raukgazh2kVv3roOqy6bqBOM20TrZrz54DbO089o6/ijaPgxb6y 9KFAg+6cbu2I4YR8nbSsTed7pBrbJu8K27jLKYa6+DF7eWXWjL/n7x0ezLCi6y62u5Rk fKnTqyJ9PoNk4z+BlXHfN2htDsB//4NMgM1DTfYGxrNPnYTFCbn2mKhWavWCmhtXQhcI bDqkTM/xg0vb5T5n3cNawehFca5ycIpPQav/28Gg6W8vxqM+Mb4rbiy8ZpAuc+nb/vj3 ENbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741441949; x=1742046749; 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=3/P/2BO2L8Y7muyu2B/cBKCZ1xOiMZjU0r3aTDLOSK8=; b=qed71zhbcPPkN3HtKpuYoopYRuQJpDJ7fHft9WNYZQ6ghtGDB09xUZfg87P8kTCU3N a7zWV3L6FDD2/bE79AZii5pMzbj2ZnRM2jPUElF2lbrIaBSsG3MYSsVz4G1v6fBowmVx K6abj/Y8L/OigwatBT40Yex6n5I4m2Mc1EnuPTabntPjKPBVN1eGm9k7EtGn3aKKlkNz bS4XyWLhSqMedhX3UZN1ifng7HDsJ5cQQV1XuHHJVXBMxsMr/D8ECFDSj3/4dH1bdeBV XM9Qgq73YBin8edzbZoOZ2zz1sbGEcJInVLsNtALu+0BX4KaeikTPc4P1dU88KZiEkd+ f5BA== X-Gm-Message-State: AOJu0YyKTqkjav1A0VpaZLG8zJHcXxs7MdPRCAzwh9KXGTUinSXnGxta twavW2YTvV+u8/Q3Z3Fu+ib42vqY9NYZ4SlKZNHA9873x0iXXwrRRSYFpghMPe/XHlqR2uHEAtO ZTNxCp7hwdD18qa1n9Vd88/toJhNN9g== X-Gm-Gg: ASbGnct9Ruge+dSsBtd8adhh/FkX3/GdviLD+kJxEaxQ2L5wCRNvxQES/7g34brQAQ1 8h396GY7lTv8RgfY6fzD79To0Iws0ZWU/wL/trj0INk/l43i8eXubfi8qkv+wByR35th7Xzhb9e HLNSNta7T8EUZ2I9C9bHAQBPcY83y3XSnSoOi+Rj/u8XdKUwI9HUdT5/N+JMc= X-Google-Smtp-Source: AGHT+IFx3ye8vZr4yvfX7wFwmSP3G8swINuDJPCSwBvsC4f2icaQr8/rclWZxMUeQHEczRowyyuSH5ZcpUecJfVxzfw= X-Received: by 2002:a17:90b:2e51:b0:2ff:7331:18bc with SMTP id 98e67ed59e1d1-2ff7ceee7ebmr9743714a91.26.1741441948405; Sat, 08 Mar 2025 05:52:28 -0800 (PST) MIME-Version: 1.0 References: <20250308122140.59850-2-47210458+raphaelthegreat@users.noreply.github.com> In-Reply-To: From: IndecisiveTurtle Date: Sat, 8 Mar 2025 15:52:16 +0200 X-Gm-Features: AQ5f1JreBW4JcJ4ZuPj9IYaomSSWf9RSYJaIzGOAllGX7DQPyOp3JfCf99mvFj4 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH 1/4] libavcodec/vc2enc: Split out common functions between software and hardware encoders 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: SGVsbG8gQW5kcmVhcwoKVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLiBJIHdpbGwgcmVzdWJt aXQgdGhlIHBhdGNoIHdpdGggdGhlIHByb3BlcgppbXBsZW1lbnRhdGlvbiB5b3UgZGVzY3JpYmVk LgpDb3VsZCB5b3UgZWxhYm9yYXRlIG9uIHRoZSBhcnJheSBkdXBsaWNhdGlvbiBjb21tZW50PyBJ IGRvbid0IHNlZSBhbnkgb3RoZXIKcGxhY2UgaXQncyBkZWZpbmVkCgrOo8+EzrnPgiDOo86szrIg OCDOnM6xz4EgMjAyNSDPg8+EzrnPgiAzOjE04oCvzrwuzrwuLCDOvy/OtyBBbmRyZWFzIFJoZWlu aGFyZHQgPAphbmRyZWFzLnJoZWluaGFyZHRAb3V0bG9vay5jb20+IM6tzrPPgc6xz4jOtToKCj4g SW5kZWNpc2l2ZVR1cnRsZToKPiA+IEZyb206IEluZGVjaXNpdmVUdXJ0bGUgPGdlb3N0ZXIzZEBn bWFpbC5jb20+Cj4gPgo+ID4gLS0tCj4gPiAgbGliYXZjb2RlYy9NYWtlZmlsZSAgICAgICAgfCAg IDIgKy0KPiA+ICBsaWJhdmNvZGVjL3ZjMmVuYy5jICAgICAgICB8IDUxNSArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgbGliYXZjb2RlYy92YzJlbmNfY29tbW9uLmMg fCAzMjEgKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICBsaWJhdmNvZGVjL3ZjMmVuY19jb21t b24uaCB8IDMyMyArKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDQgZmlsZXMgY2hhbmdlZCwg NjUzIGluc2VydGlvbnMoKyksIDUwOCBkZWxldGlvbnMoLSkKPiA+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliYXZjb2RlYy92YzJlbmNfY29tbW9uLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZjb2RlYy92YzJlbmNfY29tbW9uLmgKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9N YWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiA+IGluZGV4IDQ5OWY4MjY2MzUuLmE5NmM3 MDA3NDUgMTAwNjQ0Cj4gPiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4gPiArKysgYi9saWJh dmNvZGVjL01ha2VmaWxlCj4gPiBAQCAtNzY4LDcgKzc2OCw3IEBAIE9CSlMtJChDT05GSUdfVkMx X0NVVklEX0RFQ09ERVIpICAgICAgICs9IGN1dmlkZGVjLm8KPiA+ICBPQkpTLSQoQ09ORklHX1ZD MV9NTUFMX0RFQ09ERVIpICAgICAgICArPSBtbWFsZGVjLm8KPiA+ICBPQkpTLSQoQ09ORklHX1ZD MV9RU1ZfREVDT0RFUikgICAgICAgICArPSBxc3ZkZWMubwo+ID4gIE9CSlMtJChDT05GSUdfVkMx X1Y0TDJNMk1fREVDT0RFUikgICAgICs9IHY0bDJfbTJtX2RlYy5vCj4gPiAtT0JKUy0kKENPTkZJ R19WQzJfRU5DT0RFUikgICAgICAgICAgICAgKz0gdmMyZW5jLm8gdmMyZW5jX2R3dC5vCj4gZGly YWN0YWIubwo+ID4gK09CSlMtJChDT05GSUdfVkMyX0VOQ09ERVIpICAgICAgICAgICAgICs9IHZj MmVuYy5vIHZjMmVuY19kd3Qubwo+IHZjMmVuY19jb21tb24ubyBkaXJhY3RhYi5vCj4gPiAgT0JK Uy0kKENPTkZJR19WQ1IxX0RFQ09ERVIpICAgICAgICAgICAgKz0gdmNyMS5vCj4gPiAgT0JKUy0k KENPTkZJR19WTURBVURJT19ERUNPREVSKSAgICAgICAgKz0gdm1kYXVkaW8ubwo+ID4gIE9CSlMt JChDT05GSUdfVk1EVklERU9fREVDT0RFUikgICAgICAgICs9IHZtZHZpZGVvLm8KPiA+IGRpZmYg LS1naXQgYS9saWJhdmNvZGVjL3ZjMmVuYy5jIGIvbGliYXZjb2RlYy92YzJlbmMuYwo+ID4gaW5k ZXggYjgyMzcwYTc1My4uNzEyZDBjZjY4YSAxMDA2NDQKPiA+IC0tLSBhL2xpYmF2Y29kZWMvdmMy ZW5jLmMKPiA+ICsrKyBiL2xpYmF2Y29kZWMvdmMyZW5jLmMKPiA+IEBAIC0yOSw1MDYgKzI5LDcg QEAKPiA+ICAjaW5jbHVkZSAicHV0X2JpdHMuaCIKPiA+ICAjaW5jbHVkZSAidmVyc2lvbi5oIgo+ ID4KPiA+IC0jaW5jbHVkZSAidmMyZW5jX2R3dC5oIgo+ID4gLSNpbmNsdWRlICJkaXJhY3RhYi5o Igo+ID4gLQo+ID4gLS8qIFRoZSBsaW1pdGVkIHNpemUgcmVzb2x1dGlvbiBvZiBlYWNoIHNsaWNl IGZvcmNlcyB1cyB0byBkbyB0aGlzICovCj4gPiAtI2RlZmluZSBTU0laRV9ST1VORChiKSAoRkZB TElHTigoYiksIHMtPnNpemVfc2NhbGVyKSArIDQgKwo+IHMtPnByZWZpeF9ieXRlcykKPiA+IC0K PiA+IC0vKiBEZWNpZGVzIHRoZSBjdXRvZmYgcG9pbnQgaW4gIyBvZiBzbGljZXMgdG8gZGlzdHJp YnV0ZSB0aGUgbGVmdG92ZXIKPiBieXRlcyAqLwo+ID4gLSNkZWZpbmUgU0xJQ0VfUkVESVNUX1RP VEFMIDE1MAo+ID4gLQo+ID4gLXR5cGVkZWYgc3RydWN0IFZDMkJhc2VWaWRlb0Zvcm1hdCB7Cj4g PiAtICAgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10Owo+ID4gLSAgICBBVlJhdGlvbmFsIHRp bWVfYmFzZTsKPiA+IC0gICAgaW50IHdpZHRoLCBoZWlnaHQ7Cj4gPiAtICAgIHVpbnQ4X3QgaW50 ZXJsYWNlZCwgbGV2ZWw7Cj4gPiAtICAgIGNoYXIgbmFtZVsxM107Cj4gPiAtfSBWQzJCYXNlVmlk ZW9Gb3JtYXQ7Cj4gPiAtCj4gPiAtc3RhdGljIGNvbnN0IFZDMkJhc2VWaWRlb0Zvcm1hdCBiYXNl X3ZpZGVvX2ZtdHNbXSA9IHsKPiA+IC0gICAgeyAwIH0sIC8qIEN1c3RvbSBmb3JtYXQsIGhlcmUg anVzdCB0byBtYWtlIGluZGV4aW5nIGVxdWFsIHRvCj4gYmFzZV92ZiAqLwo+ID4gLSAgICB7IEFW X1BJWF9GTVRfWVVWNDIwUCwgICB7IDEwMDEsIDE1MDAwIH0sICAxNzYsICAxMjAsIDAsIDEsCj4g ICJRU0lGNTI1IiB9LAo+ID4gLSAgICB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgICB7ICAgIDIsICAg IDI1IH0sICAxNzYsICAxNDQsIDAsIDEsCj4gICJRQ0lGIiAgICB9LAo+ID4gLSAgICB7IEFWX1BJ WF9GTVRfWVVWNDIwUCwgICB7IDEwMDEsIDE1MDAwIH0sICAzNTIsICAyNDAsIDAsIDEsCj4gICJT SUY1MjUiICB9LAo+ID4gLSAgICB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgICB7ICAgIDIsICAgIDI1 IH0sICAzNTIsICAyODgsIDAsIDEsCj4gICJDSUYiICAgICB9LAo+ID4gLSAgICB7IEFWX1BJWF9G TVRfWVVWNDIwUCwgICB7IDEwMDEsIDE1MDAwIH0sICA3MDQsICA0ODAsIDAsIDEsCj4gICI0U0lG NTI1IiB9LAo+ID4gLSAgICB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgICB7ICAgIDIsICAgIDI1IH0s ICA3MDQsICA1NzYsIDAsIDEsCj4gICI0Q0lGIiAgICB9LAo+ID4gLQo+ID4gLSAgICB7IEFWX1BJ WF9GTVRfWVVWNDIyUDEwLCB7IDEwMDEsIDMwMDAwIH0sICA3MjAsICA0ODAsIDEsIDIsCj4gICJT RDQ4MEktNjAiIH0sCj4gPiAtICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgICAgMSwgICAg MjUgfSwgIDcyMCwgIDU3NiwgMSwgMiwKPiAgIlNENTc2SS01MCIgfSwKPiA+IC0KPiA+IC0gICAg eyBBVl9QSVhfRk1UX1lVVjQyMlAxMCwgeyAxMDAxLCA2MDAwMCB9LCAxMjgwLCAgNzIwLCAwLCAz LAo+ICJIRDcyMFAtNjAiICB9LAo+ID4gLSAgICB7IEFWX1BJWF9GTVRfWVVWNDIyUDEwLCB7ICAg IDEsICAgIDUwIH0sIDEyODAsICA3MjAsIDAsIDMsCj4gIkhENzIwUC01MCIgIH0sCj4gPiAtICAg IHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgMTAwMSwgMzAwMDAgfSwgMTkyMCwgMTA4MCwgMSwg MywKPiAiSEQxMDgwSS02MCIgfSwKPiA+IC0gICAgeyBBVl9QSVhfRk1UX1lVVjQyMlAxMCwgeyAg ICAxLCAgICAyNSB9LCAxOTIwLCAxMDgwLCAxLCAzLAo+ICJIRDEwODBJLTUwIiB9LAo+ID4gLSAg ICB7IEFWX1BJWF9GTVRfWVVWNDIyUDEwLCB7IDEwMDEsIDYwMDAwIH0sIDE5MjAsIDEwODAsIDAs IDMsCj4gIkhEMTA4MFAtNjAiIH0sCj4gPiAtICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsg ICAgMSwgICAgNTAgfSwgMTkyMCwgMTA4MCwgMCwgMywKPiAiSEQxMDgwUC01MCIgfSwKPiA+IC0K PiA+IC0gICAgeyBBVl9QSVhfRk1UX1lVVjQ0NFAxMiwgeyAgICAxLCAgICAyNCB9LCAyMDQ4LCAx MDgwLCAwLCA0LAo+ICJEQzJLIiB9LAo+ID4gLSAgICB7IEFWX1BJWF9GTVRfWVVWNDQ0UDEyLCB7 ICAgIDEsICAgIDI0IH0sIDQwOTYsIDIxNjAsIDAsIDUsCj4gIkRDNEsiIH0sCj4gPiAtCj4gPiAt ICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgMTAwMSwgNjAwMDAgfSwgMzg0MCwgMjE2MCwg MCwgNiwgIlVIRFRWCj4gNEstNjAiIH0sCj4gPiAtICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAs IHsgICAgMSwgICAgNTAgfSwgMzg0MCwgMjE2MCwgMCwgNiwgIlVIRFRWCj4gNEstNTAiIH0sCj4g PiAtCj4gPiAtICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgMTAwMSwgNjAwMDAgfSwgNzY4 MCwgNDMyMCwgMCwgNywgIlVIRFRWCj4gOEstNjAiIH0sCj4gPiAtICAgIHsgQVZfUElYX0ZNVF9Z VVY0MjJQMTAsIHsgICAgMSwgICAgNTAgfSwgNzY4MCwgNDMyMCwgMCwgNywgIlVIRFRWCj4gOEst NTAiIH0sCj4gPiAtCj4gPiAtICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgMTAwMSwgMjQw MDAgfSwgMTkyMCwgMTA4MCwgMCwgMywKPiAiSEQxMDgwUC0yNCIgfSwKPiA+IC0gICAgeyBBVl9Q SVhfRk1UX1lVVjQyMlAxMCwgeyAxMDAxLCAzMDAwMCB9LCAgNzIwLCAgNDg2LCAxLCAyLCAgIlNE Cj4gUHJvNDg2IiAgfSwKPiA+IC19Owo+ID4gLXN0YXRpYyBjb25zdCBpbnQgYmFzZV92aWRlb19m bXRzX2xlbiA9IEZGX0FSUkFZX0VMRU1TKGJhc2VfdmlkZW9fZm10cyk7Cj4gPiAtCj4gPiAtZW51 bSBWQzJfUU0gewo+ID4gLSAgICBWQzJfUU1fREVGID0gMCwKPiA+IC0gICAgVkMyX1FNX0NPTCwK PiA+IC0gICAgVkMyX1FNX0ZMQVQsCj4gPiAtCj4gPiAtICAgIFZDMl9RTV9OQgo+ID4gLX07Cj4g PiAtCj4gPiAtdHlwZWRlZiBzdHJ1Y3QgU3ViQmFuZCB7Cj4gPiAtICAgIGR3dGNvZWYgKmJ1ZjsK PiA+IC0gICAgcHRyZGlmZl90IHN0cmlkZTsKPiA+IC0gICAgaW50IHdpZHRoOwo+ID4gLSAgICBp bnQgaGVpZ2h0Owo+ID4gLX0gU3ViQmFuZDsKPiA+IC0KPiA+IC10eXBlZGVmIHN0cnVjdCBQbGFu ZSB7Cj4gPiAtICAgIFN1YkJhbmQgYmFuZFtNQVhfRFdUX0xFVkVMU11bNF07Cj4gPiAtICAgIGR3 dGNvZWYgKmNvZWZfYnVmOwo+ID4gLSAgICBpbnQgd2lkdGg7Cj4gPiAtICAgIGludCBoZWlnaHQ7 Cj4gPiAtICAgIGludCBkd3Rfd2lkdGg7Cj4gPiAtICAgIGludCBkd3RfaGVpZ2h0Owo+ID4gLSAg ICBwdHJkaWZmX3QgY29lZl9zdHJpZGU7Cj4gPiAtfSBQbGFuZTsKPiA+IC0KPiA+IC10eXBlZGVm IHN0cnVjdCBTbGljZUFyZ3Mgewo+ID4gLSAgICBjb25zdCBzdHJ1Y3QgVkMyRW5jQ29udGV4dCAq Y3R4Owo+ID4gLSAgICB1bmlvbiB7Cj4gPiAtICAgICAgICBpbnQgY2FjaGVbRElSQUNfTUFYX1FV QU5UX0lOREVYXTsKPiA+IC0gICAgICAgIHVpbnQ4X3QgKmJ1ZjsKPiA+IC0gICAgfTsKPiA+IC0g ICAgaW50IHg7Cj4gPiAtICAgIGludCB5Owo+ID4gLSAgICBpbnQgcXVhbnRfaWR4Owo+ID4gLSAg ICBpbnQgYml0c19jZWlsOwo+ID4gLSAgICBpbnQgYml0c19mbG9vcjsKPiA+IC0gICAgaW50IGJ5 dGVzOwo+ID4gLX0gU2xpY2VBcmdzOwo+ID4gLQo+ID4gLXR5cGVkZWYgc3RydWN0IFRyYW5zZm9y bUFyZ3Mgewo+ID4gLSAgICBjb25zdCBzdHJ1Y3QgVkMyRW5jQ29udGV4dCAqY3R4Owo+ID4gLSAg ICBQbGFuZSAqcGxhbmU7Cj4gPiAtICAgIGNvbnN0IHZvaWQgKmlkYXRhOwo+ID4gLSAgICBwdHJk aWZmX3QgaXN0cmlkZTsKPiA+IC0gICAgaW50IGZpZWxkOwo+ID4gLSAgICBWQzJUcmFuc2Zvcm1D b250ZXh0IHQ7Cj4gPiAtfSBUcmFuc2Zvcm1BcmdzOwo+ID4gLQo+ID4gLXR5cGVkZWYgc3RydWN0 IFZDMkVuY0NvbnRleHQgewo+ID4gLSAgICBBVkNsYXNzICphdl9jbGFzczsKPiA+IC0gICAgUHV0 Qml0Q29udGV4dCBwYjsKPiA+IC0gICAgUGxhbmUgcGxhbmVbM107Cj4gPiAtICAgIEFWQ29kZWND b250ZXh0ICphdmN0eDsKPiA+IC0gICAgRGlyYWNWZXJzaW9uSW5mbyB2ZXI7Cj4gPiAtCj4gPiAt ICAgIFNsaWNlQXJncyAqc2xpY2VfYXJnczsKPiA+IC0gICAgVHJhbnNmb3JtQXJncyB0cmFuc2Zv cm1fYXJnc1szXTsKPiA+IC0KPiA+IC0gICAgLyogRm9yIGNvbnZlcnNpb24gZnJvbSB1bnNpZ25l ZCBwaXhlbCB2YWx1ZXMgdG8gc2lnbmVkICovCj4gPiAtICAgIGludCBkaWZmX29mZnNldDsKPiA+ IC0gICAgaW50IGJwcDsKPiA+IC0gICAgaW50IGJwcF9pZHg7Cj4gPiAtCj4gPiAtICAgIC8qIFBp Y3R1cmUgbnVtYmVyICovCj4gPiAtICAgIHVpbnQzMl90IHBpY3R1cmVfbnVtYmVyOwo+ID4gLQo+ ID4gLSAgICAvKiBCYXNlIHZpZGVvIGZvcm1hdCAqLwo+ID4gLSAgICBpbnQgYmFzZV92ZjsKPiA+ IC0gICAgaW50IGxldmVsOwo+ID4gLSAgICBpbnQgcHJvZmlsZTsKPiA+IC0KPiA+IC0gICAgLyog UXVhbnRpemF0aW9uIG1hdHJpeCAqLwo+ID4gLSAgICB1aW50OF90IHF1YW50W01BWF9EV1RfTEVW RUxTXVs0XTsKPiA+IC0gICAgaW50IGN1c3RvbV9xdWFudF9tYXRyaXg7Cj4gPiAtCj4gPiAtICAg IC8qIERpdmlzaW9uIExVVCAqLwo+ID4gLSAgICB1aW50MzJfdCBxbWFnaWNfbHV0WzExNl1bMl07 Cj4gPiAtCj4gPiAtICAgIGludCBudW1feDsgLyogI3NsaWNlcyBob3Jpem9udGFsbHkgKi8KPiA+ IC0gICAgaW50IG51bV95OyAvKiAjc2xpY2VzIHZlcnRpY2FsbHkgKi8KPiA+IC0gICAgaW50IHBy ZWZpeF9ieXRlczsKPiA+IC0gICAgaW50IHNpemVfc2NhbGVyOwo+ID4gLSAgICBpbnQgY2hyb21h X3hfc2hpZnQ7Cj4gPiAtICAgIGludCBjaHJvbWFfeV9zaGlmdDsKPiA+IC0KPiA+IC0gICAgLyog UmF0ZSBjb250cm9sIHN0dWZmICovCj4gPiAtICAgIGludCBmcmFtZV9tYXhfYnl0ZXM7Cj4gPiAt ICAgIGludCBzbGljZV9tYXhfYnl0ZXM7Cj4gPiAtICAgIGludCBzbGljZV9taW5fYnl0ZXM7Cj4g PiAtICAgIGludCBxX2NlaWw7Cj4gPiAtICAgIGludCBxX2F2ZzsKPiA+IC0KPiA+IC0gICAgLyog T3B0aW9ucyAqLwo+ID4gLSAgICBkb3VibGUgdG9sZXJhbmNlOwo+ID4gLSAgICBpbnQgd2F2ZWxl dF9pZHg7Cj4gPiAtICAgIGludCB3YXZlbGV0X2RlcHRoOwo+ID4gLSAgICBpbnQgc3RyaWN0X2Nv bXBsaWFuY2U7Cj4gPiAtICAgIGludCBzbGljZV9oZWlnaHQ7Cj4gPiAtICAgIGludCBzbGljZV93 aWR0aDsKPiA+IC0gICAgaW50IGludGVybGFjZWQ7Cj4gPiAtICAgIGVudW0gVkMyX1FNIHF1YW50 X21hdHJpeDsKPiA+IC0KPiA+IC0gICAgLyogUGFyc2UgY29kZSBzdGF0ZSAqLwo+ID4gLSAgICB1 aW50MzJfdCBuZXh0X3BhcnNlX29mZnNldDsKPiA+IC0gICAgZW51bSBEaXJhY1BhcnNlQ29kZXMg bGFzdF9wYXJzZV9jb2RlOwo+ID4gLX0gVkMyRW5jQ29udGV4dDsKPiA+IC0KPiA+IC1zdGF0aWMg YXZfYWx3YXlzX2lubGluZSB2b2lkIHB1dF92YzJfdWVfdWludChQdXRCaXRDb250ZXh0ICpwYiwK PiB1aW50MzJfdCB2YWwpCj4gPiAtewo+ID4gLSAgICBpbnQgaTsKPiA+IC0gICAgaW50IGJpdHMg PSAwOwo+ID4gLSAgICB1bnNpZ25lZCB0b3BiaXQgPSAxLCBtYXh2YWwgPSAxOwo+ID4gLSAgICB1 aW50NjRfdCBwYml0cyA9IDA7Cj4gPiAtCj4gPiAtICAgIGlmICghdmFsKyspIHsKPiA+IC0gICAg ICAgIHB1dF9iaXRzKHBiLCAxLCAxKTsKPiA+IC0gICAgICAgIHJldHVybjsKPiA+IC0gICAgfQo+ ID4gLQo+ID4gLSAgICB3aGlsZSAodmFsID4gbWF4dmFsKSB7Cj4gPiAtICAgICAgICB0b3BiaXQg PDw9IDE7Cj4gPiAtICAgICAgICBtYXh2YWwgPDw9IDE7Cj4gPiAtICAgICAgICBtYXh2YWwgfD0g IDE7Cj4gPiAtICAgIH0KPiA+IC0KPiA+IC0gICAgYml0cyA9IGZmX2xvZzIodG9wYml0KTsKPiA+ IC0KPiA+IC0gICAgZm9yIChpID0gMDsgaSA8IGJpdHM7IGkrKykgewo+ID4gLSAgICAgICAgdG9w Yml0ID4+PSAxOwo+ID4gLSAgICAgICAgYXZfYXNzZXJ0MihwYml0cyA8PSBVSU5UNjRfTUFYPj4z KTsKPiA+IC0gICAgICAgIHBiaXRzIDw8PSAyOwo+ID4gLSAgICAgICAgaWYgKHZhbCAmIHRvcGJp dCkKPiA+IC0gICAgICAgICAgICBwYml0cyB8PSAweDE7Cj4gPiAtICAgIH0KPiA+IC0KPiA+IC0g ICAgcHV0X2JpdHM2NChwYiwgYml0cyoyICsgMSwgKHBiaXRzIDw8IDEpIHwgMSk7Cj4gPiAtfQo+ ID4gLQo+ID4gLXN0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBjb3VudF92YzJfdWVfdWludCh1 aW50MzJfdCB2YWwpCj4gPiAtewo+ID4gLSAgICBpbnQgdG9wYml0ID0gMSwgbWF4dmFsID0gMTsK PiA+IC0KPiA+IC0gICAgaWYgKCF2YWwrKykKPiA+IC0gICAgICAgIHJldHVybiAxOwo+ID4gLQo+ ID4gLSAgICB3aGlsZSAodmFsID4gbWF4dmFsKSB7Cj4gPiAtICAgICAgICB0b3BiaXQgPDw9IDE7 Cj4gPiAtICAgICAgICBtYXh2YWwgPDw9IDE7Cj4gPiAtICAgICAgICBtYXh2YWwgfD0gIDE7Cj4g PiAtICAgIH0KPiA+IC0KPiA+IC0gICAgcmV0dXJuIGZmX2xvZzIodG9wYml0KSoyICsgMTsKPiA+ IC19Cj4gPiAtCj4gPiAtLyogVkMtMiAxMC40IC0gcGFyc2VfaW5mbygpICovCj4gPiAtc3RhdGlj IHZvaWQgZW5jb2RlX3BhcnNlX2luZm8oVkMyRW5jQ29udGV4dCAqcywgZW51bSBEaXJhY1BhcnNl Q29kZXMKPiBwY29kZSkKPiA+IC17Cj4gPiAtICAgIHVpbnQzMl90IGN1cl9wb3MsIGRpc3Q7Cj4g PiAtCj4gPiAtICAgIGFsaWduX3B1dF9iaXRzKCZzLT5wYik7Cj4gPiAtCj4gPiAtICAgIGN1cl9w b3MgPSBwdXRfYnl0ZXNfY291bnQoJnMtPnBiLCAwKTsKPiA+IC0KPiA+IC0gICAgLyogTWFnaWMg c3RyaW5nICovCj4gPiAtICAgIGZmX3B1dF9zdHJpbmcoJnMtPnBiLCAiQkJDRCIsIDApOwo+ID4g LQo+ID4gLSAgICAvKiBQYXJzZSBjb2RlICovCj4gPiAtICAgIHB1dF9iaXRzKCZzLT5wYiwgOCwg cGNvZGUpOwo+ID4gLQo+ID4gLSAgICAvKiBOZXh0IHBhcnNlIG9mZnNldCAqLwo+ID4gLSAgICBk aXN0ID0gY3VyX3BvcyAtIHMtPm5leHRfcGFyc2Vfb2Zmc2V0Owo+ID4gLSAgICBBVl9XQjMyKHMt PnBiLmJ1ZiArIHMtPm5leHRfcGFyc2Vfb2Zmc2V0ICsgNSwgZGlzdCk7Cj4gPiAtICAgIHMtPm5l eHRfcGFyc2Vfb2Zmc2V0ID0gY3VyX3BvczsKPiA+IC0gICAgcHV0X2JpdHMzMigmcy0+cGIsIHBj b2RlID09IERJUkFDX1BDT0RFX0VORF9TRVEgPyAxMyA6IDApOwo+ID4gLQo+ID4gLSAgICAvKiBM YXN0IHBhcnNlIG9mZnNldCAqLwo+ID4gLSAgICBwdXRfYml0czMyKCZzLT5wYiwgcy0+bGFzdF9w YXJzZV9jb2RlID09IERJUkFDX1BDT0RFX0VORF9TRVEgPyAxMyA6Cj4gZGlzdCk7Cj4gPiAtCj4g PiAtICAgIHMtPmxhc3RfcGFyc2VfY29kZSA9IHBjb2RlOwo+ID4gLX0KPiA+IC0KPiA+IC0vKiBW Qy0yIDExLjEgLSBwYXJzZV9wYXJhbWV0ZXJzKCkKPiA+IC0gKiBUaGUgbGV2ZWwgZGljdGF0ZXMg d2hhdCB0aGUgZGVjb2RlciBzaG91bGQgZXhwZWN0IGluIHRlcm1zIG9mCj4gcmVzb2x1dGlvbgo+ ID4gLSAqIGFuZCBhbGxvd3MgaXQgdG8gcXVpY2tseSByZWplY3Qgd2hhdGV2ZXIgaXQgY2FuJ3Qg c3VwcG9ydC4gUmVtZW1iZXIsCj4gPiAtICogdGhpcyBjb2RlYyBraW5kYSB0YXJnZXRzIGNoZWFw byBGUEdBcyB3aXRob3V0IG11Y2ggbWVtb3J5Lgo+IFVuZm9ydHVuYXRlbHkKPiA+IC0gKiBpdCBh bHNvIGxpbWl0cyB1cyBncmVhdGx5IGluIG91ciBjaG9pY2Ugb2YgZm9ybWF0cywgaGVuY2UgdGhl IGZsYWcKPiB0byBkaXNhYmxlCj4gPiAtICogc3RyaWN0X2NvbXBsaWFuY2UgKi8KPiA+IC1zdGF0 aWMgdm9pZCBlbmNvZGVfcGFyc2VfcGFyYW1zKFZDMkVuY0NvbnRleHQgKnMpCj4gPiAtewo+ID4g LSAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBzLT52ZXIubWFqb3IpOyAvKiBWQy0yIGRlbWFu ZHMgdGhpcyB0byBiZSAyCj4gKi8KPiA+IC0gICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+ dmVyLm1pbm9yKTsgLyogXl4gYW5kIHRoaXMgdG8gYmUgMAo+ICAqLwo+ID4gLSAgICBwdXRfdmMy X3VlX3VpbnQoJnMtPnBiLCBzLT5wcm9maWxlKTsgICAvKiAzIHRvIHNpZ25hbCBIUSBwcm9maWxl Cj4gKi8KPiA+IC0gICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+bGV2ZWwpOyAgICAgLyog MyAtIDEwODAvNzIwLCA2IC0gNEsKPiAqLwo+ID4gLX0KPiA+IC0KPiA+IC0vKiBWQy0yIDExLjMg LSBmcmFtZV9zaXplKCkgKi8KPiA+IC1zdGF0aWMgdm9pZCBlbmNvZGVfZnJhbWVfc2l6ZShWQzJF bmNDb250ZXh0ICpzKQo+ID4gLXsKPiA+IC0gICAgcHV0X2JpdHMoJnMtPnBiLCAxLCAhcy0+c3Ry aWN0X2NvbXBsaWFuY2UpOwo+ID4gLSAgICBpZiAoIXMtPnN0cmljdF9jb21wbGlhbmNlKSB7Cj4g PiAtICAgICAgICBBVkNvZGVjQ29udGV4dCAqYXZjdHggPSBzLT5hdmN0eDsKPiA+IC0gICAgICAg IHB1dF92YzJfdWVfdWludCgmcy0+cGIsIGF2Y3R4LT53aWR0aCk7Cj4gPiAtICAgICAgICBwdXRf dmMyX3VlX3VpbnQoJnMtPnBiLCBhdmN0eC0+aGVpZ2h0KTsKPiA+IC0gICAgfQo+ID4gLX0KPiA+ IC0KPiA+IC0vKiBWQy0yIDExLjMuMyAtIGNvbG9yX2RpZmZfc2FtcGxpbmdfZm9ybWF0KCkgKi8K PiA+IC1zdGF0aWMgdm9pZCBlbmNvZGVfc2FtcGxlX2ZtdChWQzJFbmNDb250ZXh0ICpzKQo+ID4g LXsKPiA+IC0gICAgcHV0X2JpdHMoJnMtPnBiLCAxLCAhcy0+c3RyaWN0X2NvbXBsaWFuY2UpOwo+ ID4gLSAgICBpZiAoIXMtPnN0cmljdF9jb21wbGlhbmNlKSB7Cj4gPiAtICAgICAgICBpbnQgaWR4 Owo+ID4gLSAgICAgICAgaWYgKHMtPmNocm9tYV94X3NoaWZ0ID09IDEgJiYgcy0+Y2hyb21hX3lf c2hpZnQgPT0gMCkKPiA+IC0gICAgICAgICAgICBpZHggPSAxOyAvKiA0MjIgKi8KPiA+IC0gICAg ICAgIGVsc2UgaWYgKHMtPmNocm9tYV94X3NoaWZ0ID09IDEgJiYgcy0+Y2hyb21hX3lfc2hpZnQg PT0gMSkKPiA+IC0gICAgICAgICAgICBpZHggPSAyOyAvKiA0MjAgKi8KPiA+IC0gICAgICAgIGVs c2UKPiA+IC0gICAgICAgICAgICBpZHggPSAwOyAvKiA0NDQgKi8KPiA+IC0gICAgICAgIHB1dF92 YzJfdWVfdWludCgmcy0+cGIsIGlkeCk7Cj4gPiAtICAgIH0KPiA+IC19Cj4gPiAtCj4gPiAtLyog VkMtMiAxMS4zLjQgLSBzY2FuX2Zvcm1hdCgpICovCj4gPiAtc3RhdGljIHZvaWQgZW5jb2RlX3Nj YW5fZm9ybWF0KFZDMkVuY0NvbnRleHQgKnMpCj4gPiAtewo+ID4gLSAgICBwdXRfYml0cygmcy0+ cGIsIDEsICFzLT5zdHJpY3RfY29tcGxpYW5jZSk7Cj4gPiAtICAgIGlmICghcy0+c3RyaWN0X2Nv bXBsaWFuY2UpCj4gPiAtICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBzLT5pbnRlcmxh Y2VkKTsKPiA+IC19Cj4gPiAtCj4gPiAtLyogVkMtMiAxMS4zLjUgLSBmcmFtZV9yYXRlKCkgKi8K PiA+IC1zdGF0aWMgdm9pZCBlbmNvZGVfZnJhbWVfcmF0ZShWQzJFbmNDb250ZXh0ICpzKQo+ID4g LXsKPiA+IC0gICAgcHV0X2JpdHMoJnMtPnBiLCAxLCAhcy0+c3RyaWN0X2NvbXBsaWFuY2UpOwo+ ID4gLSAgICBpZiAoIXMtPnN0cmljdF9jb21wbGlhbmNlKSB7Cj4gPiAtICAgICAgICBBVkNvZGVj Q29udGV4dCAqYXZjdHggPSBzLT5hdmN0eDsKPiA+IC0gICAgICAgIHB1dF92YzJfdWVfdWludCgm cy0+cGIsIDApOwo+ID4gLSAgICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgYXZjdHgtPnRp bWVfYmFzZS5kZW4pOwo+ID4gLSAgICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgYXZjdHgt PnRpbWVfYmFzZS5udW0pOwo+ID4gLSAgICB9Cj4gPiAtfQo+ID4gLQo+ID4gLS8qIFZDLTIgMTEu My42IC0gYXNwZWN0X3JhdGlvKCkgKi8KPiA+IC1zdGF0aWMgdm9pZCBlbmNvZGVfYXNwZWN0X3Jh dGlvKFZDMkVuY0NvbnRleHQgKnMpCj4gPiAtewo+ID4gLSAgICBwdXRfYml0cygmcy0+cGIsIDEs ICFzLT5zdHJpY3RfY29tcGxpYW5jZSk7Cj4gPiAtICAgIGlmICghcy0+c3RyaWN0X2NvbXBsaWFu Y2UpIHsKPiA+IC0gICAgICAgIEFWQ29kZWNDb250ZXh0ICphdmN0eCA9IHMtPmF2Y3R4Owo+ID4g LSAgICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgMCk7Cj4gPiAtICAgICAgICBwdXRfdmMy X3VlX3VpbnQoJnMtPnBiLCBhdmN0eC0+c2FtcGxlX2FzcGVjdF9yYXRpby5udW0pOwo+ID4gLSAg ICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgYXZjdHgtPnNhbXBsZV9hc3BlY3RfcmF0aW8u ZGVuKTsKPiA+IC0gICAgfQo+ID4gLX0KPiA+IC0KPiA+IC0vKiBWQy0yIDExLjMuNyAtIGNsZWFu X2FyZWEoKSAqLwo+ID4gLXN0YXRpYyB2b2lkIGVuY29kZV9jbGVhbl9hcmVhKFZDMkVuY0NvbnRl eHQgKnMpCj4gPiAtewo+ID4gLSAgICBwdXRfYml0cygmcy0+cGIsIDEsIDApOwo+ID4gLX0KPiA+ IC0KPiA+IC0vKiBWQy0yIDExLjMuOCAtIHNpZ25hbF9yYW5nZSgpICovCj4gPiAtc3RhdGljIHZv aWQgZW5jb2RlX3NpZ25hbF9yYW5nZShWQzJFbmNDb250ZXh0ICpzKQo+ID4gLXsKPiA+IC0gICAg cHV0X2JpdHMoJnMtPnBiLCAxLCAhcy0+c3RyaWN0X2NvbXBsaWFuY2UpOwo+ID4gLSAgICBpZiAo IXMtPnN0cmljdF9jb21wbGlhbmNlKQo+ID4gLSAgICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5w Yiwgcy0+YnBwX2lkeCk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qIFZDLTIgMTEuMy45IC0gY29sb3Jf c3BlYygpICovCj4gPiAtc3RhdGljIHZvaWQgZW5jb2RlX2NvbG9yX3NwZWMoVkMyRW5jQ29udGV4 dCAqcykKPiA+IC17Cj4gPiAtICAgIEFWQ29kZWNDb250ZXh0ICphdmN0eCA9IHMtPmF2Y3R4Owo+ ID4gLSAgICBwdXRfYml0cygmcy0+cGIsIDEsICFzLT5zdHJpY3RfY29tcGxpYW5jZSk7Cj4gPiAt ICAgIGlmICghcy0+c3RyaWN0X2NvbXBsaWFuY2UpIHsKPiA+IC0gICAgICAgIGludCB2YWw7Cj4g PiAtICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCAwKTsKPiA+IC0KPiA+IC0gICAgICAg IC8qIHByaW1hcmllcyAqLwo+ID4gLSAgICAgICAgcHV0X2JpdHMoJnMtPnBiLCAxLCAxKTsKPiA+ IC0gICAgICAgIGlmIChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzID09IEFWQ09MX1BSSV9CVDQ3MEJH KQo+ID4gLSAgICAgICAgICAgIHZhbCA9IDI7Cj4gPiAtICAgICAgICBlbHNlIGlmIChhdmN0eC0+ Y29sb3JfcHJpbWFyaWVzID09IEFWQ09MX1BSSV9TTVBURTE3ME0pCj4gPiAtICAgICAgICAgICAg dmFsID0gMTsKPiA+IC0gICAgICAgIGVsc2UgaWYgKGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPT0g QVZDT0xfUFJJX1NNUFRFMjQwTSkKPiA+IC0gICAgICAgICAgICB2YWwgPSAxOwo+ID4gLSAgICAg ICAgZWxzZQo+ID4gLSAgICAgICAgICAgIHZhbCA9IDA7Cj4gPiAtICAgICAgICBwdXRfdmMyX3Vl X3VpbnQoJnMtPnBiLCB2YWwpOwo+ID4gLQo+ID4gLSAgICAgICAgLyogY29sb3IgbWF0cml4ICov Cj4gPiAtICAgICAgICBwdXRfYml0cygmcy0+cGIsIDEsIDEpOwo+ID4gLSAgICAgICAgaWYgKGF2 Y3R4LT5jb2xvcnNwYWNlID09IEFWQ09MX1NQQ19SR0IpCj4gPiAtICAgICAgICAgICAgdmFsID0g MzsKPiA+IC0gICAgICAgIGVsc2UgaWYgKGF2Y3R4LT5jb2xvcnNwYWNlID09IEFWQ09MX1NQQ19Z Q09DRykKPiA+IC0gICAgICAgICAgICB2YWwgPSAyOwo+ID4gLSAgICAgICAgZWxzZSBpZiAoYXZj dHgtPmNvbG9yc3BhY2UgPT0gQVZDT0xfU1BDX0JUNDcwQkcpCj4gPiAtICAgICAgICAgICAgdmFs ID0gMTsKPiA+IC0gICAgICAgIGVsc2UKPiA+IC0gICAgICAgICAgICB2YWwgPSAwOwo+ID4gLSAg ICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgdmFsKTsKPiA+IC0KPiA+IC0gICAgICAgIC8q IHRyYW5zZmVyIGZ1bmN0aW9uICovCj4gPiAtICAgICAgICBwdXRfYml0cygmcy0+cGIsIDEsIDEp Owo+ID4gLSAgICAgICAgaWYgKGF2Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xfVFJDX0xJTkVBUikK PiA+IC0gICAgICAgICAgICB2YWwgPSAyOwo+ID4gLSAgICAgICAgZWxzZSBpZiAoYXZjdHgtPmNv bG9yX3RyYyA9PSBBVkNPTF9UUkNfQlQxMzYxX0VDRykKPiA+IC0gICAgICAgICAgICB2YWwgPSAx Owo+ID4gLSAgICAgICAgZWxzZQo+ID4gLSAgICAgICAgICAgIHZhbCA9IDA7Cj4gPiAtICAgICAg ICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCB2YWwpOwo+ID4gLSAgICB9Cj4gPiAtfQo+ID4gLQo+ ID4gLS8qIFZDLTIgMTEuMyAtIHNvdXJjZV9wYXJhbWV0ZXJzKCkgKi8KPiA+IC1zdGF0aWMgdm9p ZCBlbmNvZGVfc291cmNlX3BhcmFtcyhWQzJFbmNDb250ZXh0ICpzKQo+ID4gLXsKPiA+IC0gICAg ZW5jb2RlX2ZyYW1lX3NpemUocyk7Cj4gPiAtICAgIGVuY29kZV9zYW1wbGVfZm10KHMpOwo+ID4g LSAgICBlbmNvZGVfc2Nhbl9mb3JtYXQocyk7Cj4gPiAtICAgIGVuY29kZV9mcmFtZV9yYXRlKHMp Owo+ID4gLSAgICBlbmNvZGVfYXNwZWN0X3JhdGlvKHMpOwo+ID4gLSAgICBlbmNvZGVfY2xlYW5f YXJlYShzKTsKPiA+IC0gICAgZW5jb2RlX3NpZ25hbF9yYW5nZShzKTsKPiA+IC0gICAgZW5jb2Rl X2NvbG9yX3NwZWMocyk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qIFZDLTIgMTEgLSBzZXF1ZW5jZV9o ZWFkZXIoKSAqLwo+ID4gLXN0YXRpYyB2b2lkIGVuY29kZV9zZXFfaGVhZGVyKFZDMkVuY0NvbnRl eHQgKnMpCj4gPiAtewo+ID4gLSAgICBhbGlnbl9wdXRfYml0cygmcy0+cGIpOwo+ID4gLSAgICBl bmNvZGVfcGFyc2VfcGFyYW1zKHMpOwo+ID4gLSAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBz LT5iYXNlX3ZmKTsKPiA+IC0gICAgZW5jb2RlX3NvdXJjZV9wYXJhbXMocyk7Cj4gPiAtICAgIHB1 dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPmludGVybGFjZWQpOyAvKiBGcmFtZXMgb3IgZmllbGRz IGNvZGluZwo+ICovCj4gPiAtfQo+ID4gLQo+ID4gLS8qIFZDLTIgMTIuMSAtIHBpY3R1cmVfaGVh ZGVyKCkgKi8KPiA+IC1zdGF0aWMgdm9pZCBlbmNvZGVfcGljdHVyZV9oZWFkZXIoVkMyRW5jQ29u dGV4dCAqcykKPiA+IC17Cj4gPiAtICAgIGFsaWduX3B1dF9iaXRzKCZzLT5wYik7Cj4gPiAtICAg IHB1dF9iaXRzMzIoJnMtPnBiLCBzLT5waWN0dXJlX251bWJlcisrKTsKPiA+IC19Cj4gPiAtCj4g PiAtLyogVkMtMiAxMi4zLjQuMSAtIHNsaWNlX3BhcmFtZXRlcnMoKSAqLwo+ID4gLXN0YXRpYyB2 b2lkIGVuY29kZV9zbGljZV9wYXJhbXMoVkMyRW5jQ29udGV4dCAqcykKPiA+IC17Cj4gPiAtICAg IHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPm51bV94KTsKPiA+IC0gICAgcHV0X3ZjMl91ZV91 aW50KCZzLT5wYiwgcy0+bnVtX3kpOwo+ID4gLSAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBz LT5wcmVmaXhfYnl0ZXMpOwo+ID4gLSAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBzLT5zaXpl X3NjYWxlcik7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qIDFzdCBpZHggPSBMTCwgc2Vjb25kIC0gdmVy dGljYWwsIHRoaXJkIC0gaG9yaXpvbnRhbCwgZm91cnRoIC0gdG90YWwKPiAqLwo+ID4gLXN0YXRp YyBjb25zdCB1aW50OF90IHZjMl9xbV9jb2xfdGFiW11bNF0gPSB7Cj4gPiAtICAgIHsyMCwgIDks IDE1LCAgNH0sCj4gPiAtICAgIHsgMCwgIDYsICA2LCAgNH0sCj4gPiAtICAgIHsgMCwgIDMsICAz LCAgNX0sCj4gPiAtICAgIHsgMCwgIDMsICA1LCAgMX0sCj4gPiAtICAgIHsgMCwgMTEsIDEwLCAx MX0KPiA+IC19Owo+ID4gLQo+ID4gLXN0YXRpYyBjb25zdCB1aW50OF90IHZjMl9xbV9mbGF0X3Rh YltdWzRdID0gewo+ID4gLSAgICB7IDAsICAwLCAgMCwgIDB9LAo+ID4gLSAgICB7IDAsICAwLCAg MCwgIDB9LAo+ID4gLSAgICB7IDAsICAwLCAgMCwgIDB9LAo+ID4gLSAgICB7IDAsICAwLCAgMCwg IDB9LAo+ID4gLSAgICB7IDAsICAwLCAgMCwgIDB9Cj4gPiAtfTsKPiA+IC0KPiA+IC1zdGF0aWMg dm9pZCBpbml0X3F1YW50X21hdHJpeChWQzJFbmNDb250ZXh0ICpzKQo+ID4gLXsKPiA+IC0gICAg aW50IGxldmVsLCBvcmllbnRhdGlvbjsKPiA+IC0KPiA+IC0gICAgaWYgKHMtPndhdmVsZXRfZGVw dGggPD0gNCAmJiBzLT5xdWFudF9tYXRyaXggPT0gVkMyX1FNX0RFRikgewo+ID4gLSAgICAgICAg cy0+Y3VzdG9tX3F1YW50X21hdHJpeCA9IDA7Cj4gPiAtICAgICAgICBmb3IgKGxldmVsID0gMDsg bGV2ZWwgPCBzLT53YXZlbGV0X2RlcHRoOyBsZXZlbCsrKSB7Cj4gPiAtICAgICAgICAgICAgcy0+ cXVhbnRbbGV2ZWxdWzBdID0KPiBmZl9kaXJhY19kZWZhdWx0X3FtYXRbcy0+d2F2ZWxldF9pZHhd W2xldmVsXVswXTsKPiA+IC0gICAgICAgICAgICBzLT5xdWFudFtsZXZlbF1bMV0gPQo+IGZmX2Rp cmFjX2RlZmF1bHRfcW1hdFtzLT53YXZlbGV0X2lkeF1bbGV2ZWxdWzFdOwo+ID4gLSAgICAgICAg ICAgIHMtPnF1YW50W2xldmVsXVsyXSA9Cj4gZmZfZGlyYWNfZGVmYXVsdF9xbWF0W3MtPndhdmVs ZXRfaWR4XVtsZXZlbF1bMl07Cj4gPiAtICAgICAgICAgICAgcy0+cXVhbnRbbGV2ZWxdWzNdID0K PiBmZl9kaXJhY19kZWZhdWx0X3FtYXRbcy0+d2F2ZWxldF9pZHhdW2xldmVsXVszXTsKPiA+IC0g ICAgICAgIH0KPiA+IC0gICAgICAgIHJldHVybjsKPiA+IC0gICAgfQo+ID4gLQo+ID4gLSAgICBz LT5jdXN0b21fcXVhbnRfbWF0cml4ID0gMTsKPiA+IC0KPiA+IC0gICAgaWYgKHMtPnF1YW50X21h dHJpeCA9PSBWQzJfUU1fREVGKSB7Cj4gPiAtICAgICAgICBmb3IgKGxldmVsID0gMDsgbGV2ZWwg PCBzLT53YXZlbGV0X2RlcHRoOyBsZXZlbCsrKSB7Cj4gPiAtICAgICAgICAgICAgZm9yIChvcmll bnRhdGlvbiA9IDA7IG9yaWVudGF0aW9uIDwgNDsgb3JpZW50YXRpb24rKykgewo+ID4gLSAgICAg ICAgICAgICAgICBpZiAobGV2ZWwgPD0gMykKPiA+IC0gICAgICAgICAgICAgICAgICAgIHMtPnF1 YW50W2xldmVsXVtvcmllbnRhdGlvbl0gPQo+IGZmX2RpcmFjX2RlZmF1bHRfcW1hdFtzLT53YXZl bGV0X2lkeF1bbGV2ZWxdW29yaWVudGF0aW9uXTsKPiA+IC0gICAgICAgICAgICAgICAgZWxzZQo+ ID4gLSAgICAgICAgICAgICAgICAgICAgcy0+cXVhbnRbbGV2ZWxdW29yaWVudGF0aW9uXSA9Cj4g dmMyX3FtX2NvbF90YWJbbGV2ZWxdW29yaWVudGF0aW9uXTsKPiA+IC0gICAgICAgICAgICB9Cj4g PiAtICAgICAgICB9Cj4gPiAtICAgIH0gZWxzZSBpZiAocy0+cXVhbnRfbWF0cml4ID09IFZDMl9R TV9DT0wpIHsKPiA+IC0gICAgICAgIGZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IHMtPndhdmVsZXRf ZGVwdGg7IGxldmVsKyspIHsKPiA+IC0gICAgICAgICAgICBmb3IgKG9yaWVudGF0aW9uID0gMDsg b3JpZW50YXRpb24gPCA0OyBvcmllbnRhdGlvbisrKSB7Cj4gPiAtICAgICAgICAgICAgICAgIHMt PnF1YW50W2xldmVsXVtvcmllbnRhdGlvbl0gPQo+IHZjMl9xbV9jb2xfdGFiW2xldmVsXVtvcmll bnRhdGlvbl07Cj4gPiAtICAgICAgICAgICAgfQo+ID4gLSAgICAgICAgfQo+ID4gLSAgICB9IGVs c2Ugewo+ID4gLSAgICAgICAgZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgcy0+d2F2ZWxldF9kZXB0 aDsgbGV2ZWwrKykgewo+ID4gLSAgICAgICAgICAgIGZvciAob3JpZW50YXRpb24gPSAwOyBvcmll bnRhdGlvbiA8IDQ7IG9yaWVudGF0aW9uKyspIHsKPiA+IC0gICAgICAgICAgICAgICAgcy0+cXVh bnRbbGV2ZWxdW29yaWVudGF0aW9uXSA9Cj4gdmMyX3FtX2ZsYXRfdGFiW2xldmVsXVtvcmllbnRh dGlvbl07Cj4gPiAtICAgICAgICAgICAgfQo+ID4gLSAgICAgICAgfQo+ID4gLSAgICB9Cj4gPiAt fQo+ID4gLQo+ID4gLS8qIFZDLTIgMTIuMy40LjIgLSBxdWFudF9tYXRyaXgoKSAqLwo+ID4gLXN0 YXRpYyB2b2lkIGVuY29kZV9xdWFudF9tYXRyaXgoVkMyRW5jQ29udGV4dCAqcykKPiA+IC17Cj4g PiAtICAgIGludCBsZXZlbDsKPiA+IC0gICAgcHV0X2JpdHMoJnMtPnBiLCAxLCBzLT5jdXN0b21f cXVhbnRfbWF0cml4KTsKPiA+IC0gICAgaWYgKHMtPmN1c3RvbV9xdWFudF9tYXRyaXgpIHsKPiA+ IC0gICAgICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPnF1YW50WzBdWzBdKTsKPiA+IC0g ICAgICAgIGZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IHMtPndhdmVsZXRfZGVwdGg7IGxldmVsKysp IHsKPiA+IC0gICAgICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBzLT5xdWFudFtsZXZl bF1bMV0pOwo+ID4gLSAgICAgICAgICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPnF1YW50 W2xldmVsXVsyXSk7Cj4gPiAtICAgICAgICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+ cXVhbnRbbGV2ZWxdWzNdKTsKPiA+IC0gICAgICAgIH0KPiA+IC0gICAgfQo+ID4gLX0KPiA+IC0K PiA+IC0vKiBWQy0yIDEyLjMgLSB0cmFuc2Zvcm1fcGFyYW1ldGVycygpICovCj4gPiAtc3RhdGlj IHZvaWQgZW5jb2RlX3RyYW5zZm9ybV9wYXJhbXMoVkMyRW5jQ29udGV4dCAqcykKPiA+IC17Cj4g PiAtICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPndhdmVsZXRfaWR4KTsKPiA+IC0gICAg cHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+d2F2ZWxldF9kZXB0aCk7Cj4gPiAtCj4gPiAtICAg IGVuY29kZV9zbGljZV9wYXJhbXMocyk7Cj4gPiAtICAgIGVuY29kZV9xdWFudF9tYXRyaXgocyk7 Cj4gPiAtfQo+ID4gLQo+ID4gLS8qIFZDLTIgMTIuMiAtIHdhdmVsZXRfdHJhbnNmb3JtKCkgKi8K PiA+IC1zdGF0aWMgdm9pZCBlbmNvZGVfd2F2ZWxldF90cmFuc2Zvcm0oVkMyRW5jQ29udGV4dCAq cykKPiA+IC17Cj4gPiAtICAgIGVuY29kZV90cmFuc2Zvcm1fcGFyYW1zKHMpOwo+ID4gLSAgICBh bGlnbl9wdXRfYml0cygmcy0+cGIpOwo+ID4gLX0KPiA+IC0KPiA+IC0vKiBWQy0yIDEyIC0gcGlj dHVyZV9wYXJzZSgpICovCj4gPiAtc3RhdGljIHZvaWQgZW5jb2RlX3BpY3R1cmVfc3RhcnQoVkMy RW5jQ29udGV4dCAqcykKPiA+IC17Cj4gPiAtICAgIGFsaWduX3B1dF9iaXRzKCZzLT5wYik7Cj4g PiAtICAgIGVuY29kZV9waWN0dXJlX2hlYWRlcihzKTsKPiA+IC0gICAgYWxpZ25fcHV0X2JpdHMo JnMtPnBiKTsKPiA+IC0gICAgZW5jb2RlX3dhdmVsZXRfdHJhbnNmb3JtKHMpOwo+ID4gLX0KPiA+ ICsjaW5jbHVkZSAidmMyZW5jX2NvbW1vbi5oIgo+ID4KPiA+ICAjZGVmaW5lIFFVQU5UKGMsIG11 bCwgYWRkLCBzaGlmdCkgKCgobXVsKSAqIChjKSArIChhZGQpKSA+PiAoc2hpZnQpKQo+ID4KPiA+ IEBAIC02NTgsNyArMTU5LDcgQEAgc3RhdGljIGludCBjYWxjX3NsaWNlX3NpemVzKFZDMkVuY0Nv bnRleHQgKnMpCj4gPiAgICAgIFNsaWNlQXJncyAqZW5jX2FyZ3MgPSBzLT5zbGljZV9hcmdzOwo+ ID4gICAgICBTbGljZUFyZ3MgKnRvcF9sb2NbU0xJQ0VfUkVESVNUX1RPVEFMXSA9IHtOVUxMfTsK PiA+Cj4gPiAtICAgIGluaXRfcXVhbnRfbWF0cml4KHMpOwo+ID4gKyAgICBmZl92YzJfaW5pdF9x dWFudF9tYXRyaXgocyk7Cj4gPgo+ID4gICAgICBmb3IgKHNsaWNlX3kgPSAwOyBzbGljZV95IDwg cy0+bnVtX3k7IHNsaWNlX3krKykgewo+ID4gICAgICAgICAgZm9yIChzbGljZV94ID0gMDsgc2xp Y2VfeCA8IHMtPm51bV94OyBzbGljZV94KyspIHsKPiA+IEBAIC05MzEsMjQgKzQzMiwyNCBAQCBz dGF0aWMgaW50IGVuY29kZV9mcmFtZShWQzJFbmNDb250ZXh0ICpzLCBBVlBhY2tldAo+ICphdnBr dCwgY29uc3QgQVZGcmFtZSAqZnJhbWUsCj4gPiAgICAgIH0KPiA+Cj4gPiAgICAgIC8qIFNlcXVl bmNlIGhlYWRlciAqLwo+ID4gLSAgICBlbmNvZGVfcGFyc2VfaW5mbyhzLCBESVJBQ19QQ09ERV9T RVFfSEVBREVSKTsKPiA+IC0gICAgZW5jb2RlX3NlcV9oZWFkZXIocyk7Cj4gPiArICAgIGZmX3Zj Ml9lbmNvZGVfcGFyc2VfaW5mbyhzLCBESVJBQ19QQ09ERV9TRVFfSEVBREVSKTsKPiA+ICsgICAg ZmZfdmMyX2VuY29kZV9zZXFfaGVhZGVyKHMpOwo+ID4KPiA+ICAgICAgLyogRW5jb2RlciB2ZXJz aW9uICovCj4gPiAgICAgIGlmIChhdXhfZGF0YSkgewo+ID4gLSAgICAgICAgZW5jb2RlX3BhcnNl X2luZm8ocywgRElSQUNfUENPREVfQVVYKTsKPiA+ICsgICAgICAgIGZmX3ZjMl9lbmNvZGVfcGFy c2VfaW5mbyhzLCBESVJBQ19QQ09ERV9BVVgpOwo+ID4gICAgICAgICAgZmZfcHV0X3N0cmluZygm cy0+cGIsIGF1eF9kYXRhLCAxKTsKPiA+ICAgICAgfQo+ID4KPiA+ICAgICAgLyogUGljdHVyZSBo ZWFkZXIgKi8KPiA+IC0gICAgZW5jb2RlX3BhcnNlX2luZm8ocywgRElSQUNfUENPREVfUElDVFVS RV9IUSk7Cj4gPiAtICAgIGVuY29kZV9waWN0dXJlX3N0YXJ0KHMpOwo+ID4gKyAgICBmZl92YzJf ZW5jb2RlX3BhcnNlX2luZm8ocywgRElSQUNfUENPREVfUElDVFVSRV9IUSk7Cj4gPiArICAgIGZm X3ZjMl9lbmNvZGVfcGljdHVyZV9zdGFydChzKTsKPiA+Cj4gPiAgICAgIC8qIEVuY29kZSBzbGlj ZXMgKi8KPiA+ICAgICAgZW5jb2RlX3NsaWNlcyhzKTsKPiA+Cj4gPiAgICAgIC8qIEVuZCBzZXF1 ZW5jZSAqLwo+ID4gLSAgICBlbmNvZGVfcGFyc2VfaW5mbyhzLCBESVJBQ19QQ09ERV9FTkRfU0VR KTsKPiA+ICsgICAgZmZfdmMyX2VuY29kZV9wYXJzZV9pbmZvKHMsIERJUkFDX1BDT0RFX0VORF9T RVEpOwo+ID4KPiA+ICAgICAgcmV0dXJuIDA7Cj4gPiAgfQo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvdmMyZW5jX2NvbW1vbi5jIGIvbGliYXZjb2RlYy92YzJlbmNfY29tbW9uLmMKPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi4yZjQwODE0ZjVhCj4gPiAt LS0gL2Rldi9udWxsCj4gPiArKysgYi9saWJhdmNvZGVjL3ZjMmVuY19jb21tb24uYwo+ID4gQEAg LTAsMCArMSwzMjEgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNiBPcGVuIEJy b2FkY2FzdCBTeXN0ZW1zIEx0ZC4KPiA+ICsgKiBBdXRob3IgICAgICAgIDIwMTYgUm9zdGlzbGF2 IFBlaGxpdmFub3YgPGF0b21udWtlckBnbWFpbC5jb20+Cj4gPiArICoKPiA+ICsgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gPiArICoKPiA+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gPiArICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgo+ID4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgo+ID4gKyAqCj4gPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQo+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCj4gPiArICoKPiA+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEKPiAwMjExMC0xMzAxIFVTQQo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlICJ2YzJlbmNf Y29tbW9uLmgiCj4gPiArCj4gPiArLyogVkMtMiAxMC40IC0gcGFyc2VfaW5mbygpICovCj4gPiAr dm9pZCBmZl92YzJfZW5jb2RlX3BhcnNlX2luZm8oVkMyRW5jQ29udGV4dCAqcywgZW51bSBEaXJh Y1BhcnNlQ29kZXMKPiBwY29kZSkKPiA+ICt7Cj4gPiArICAgIHVpbnQzMl90IGN1cl9wb3MsIGRp c3Q7Cj4gPiArCj4gPiArICAgIGFsaWduX3B1dF9iaXRzKCZzLT5wYik7Cj4gPiArCj4gPiArICAg IGN1cl9wb3MgPSBwdXRfYnl0ZXNfY291bnQoJnMtPnBiLCAwKTsKPiA+ICsKPiA+ICsgICAgLyog TWFnaWMgc3RyaW5nICovCj4gPiArICAgIGZmX3B1dF9zdHJpbmcoJnMtPnBiLCAiQkJDRCIsIDAp Owo+ID4gKwo+ID4gKyAgICAvKiBQYXJzZSBjb2RlICovCj4gPiArICAgIHB1dF9iaXRzKCZzLT5w YiwgOCwgcGNvZGUpOwo+ID4gKwo+ID4gKyAgICAvKiBOZXh0IHBhcnNlIG9mZnNldCAqLwo+ID4g KyAgICBkaXN0ID0gY3VyX3BvcyAtIHMtPm5leHRfcGFyc2Vfb2Zmc2V0Owo+ID4gKyAgICBBVl9X QjMyKHMtPnBiLmJ1ZiArIHMtPm5leHRfcGFyc2Vfb2Zmc2V0ICsgNSwgZGlzdCk7Cj4gPiArICAg IHMtPm5leHRfcGFyc2Vfb2Zmc2V0ID0gY3VyX3BvczsKPiA+ICsgICAgcHV0X2JpdHMzMigmcy0+ cGIsIHBjb2RlID09IERJUkFDX1BDT0RFX0VORF9TRVEgPyAxMyA6IDApOwo+ID4gKwo+ID4gKyAg ICBjdXJfcG9zID0gcHV0X2J5dGVzX2NvdW50KCZzLT5wYiwgMCk7Cj4gPiArCj4gPiArICAgIC8q IExhc3QgcGFyc2Ugb2Zmc2V0ICovCj4gPiArICAgIHB1dF9iaXRzMzIoJnMtPnBiLCBzLT5sYXN0 X3BhcnNlX2NvZGUgPT0gRElSQUNfUENPREVfRU5EX1NFUSA/IDEzIDoKPiBkaXN0KTsKPiA+ICsK PiA+ICsgICAgcy0+bGFzdF9wYXJzZV9jb2RlID0gcGNvZGU7Cj4gPiArfQo+ID4gKwo+ID4gKy8q IFZDLTIgMTEuMSAtIHBhcnNlX3BhcmFtZXRlcnMoKQo+ID4gKyAqIFRoZSBsZXZlbCBkaWN0YXRl cyB3aGF0IHRoZSBkZWNvZGVyIHNob3VsZCBleHBlY3QgaW4gdGVybXMgb2YKPiByZXNvbHV0aW9u Cj4gPiArICogYW5kIGFsbG93cyBpdCB0byBxdWlja2x5IHJlamVjdCB3aGF0ZXZlciBpdCBjYW4n dCBzdXBwb3J0LiBSZW1lbWJlciwKPiA+ICsgKiB0aGlzIGNvZGVjIGtpbmRhIHRhcmdldHMgY2hl YXBvIEZQR0FzIHdpdGhvdXQgbXVjaCBtZW1vcnkuCj4gVW5mb3J0dW5hdGVseQo+ID4gKyAqIGl0 IGFsc28gbGltaXRzIHVzIGdyZWF0bHkgaW4gb3VyIGNob2ljZSBvZiBmb3JtYXRzLCBoZW5jZSB0 aGUgZmxhZwo+IHRvIGRpc2FibGUKPiA+ICsgKiBzdHJpY3RfY29tcGxpYW5jZSAqLwo+ID4gK3N0 YXRpYyB2b2lkIGVuY29kZV9wYXJzZV9wYXJhbXMoVkMyRW5jQ29udGV4dCAqcykKPiA+ICt7Cj4g PiArICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPnZlci5tYWpvcik7IC8qIFZDLTIgZGVt YW5kcyB0aGlzIHRvIGJlIDIKPiAqLwo+ID4gKyAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBz LT52ZXIubWlub3IpOyAvKiBeXiBhbmQgdGhpcyB0byBiZSAwCj4gICovCj4gPiArICAgIHB1dF92 YzJfdWVfdWludCgmcy0+cGIsIHMtPnByb2ZpbGUpOyAgIC8qIDMgdG8gc2lnbmFsIEhRIHByb2Zp bGUKPiAqLwo+ID4gKyAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBzLT5sZXZlbCk7ICAgICAv KiAzIC0gMTA4MC83MjAsIDYgLSA0Swo+ICovCj4gPiArfQo+ID4gKwo+ID4gKy8qIFZDLTIgMTEu MyAtIGZyYW1lX3NpemUoKSAqLwo+ID4gK3N0YXRpYyB2b2lkIGVuY29kZV9mcmFtZV9zaXplKFZD MkVuY0NvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBwdXRfYml0cygmcy0+cGIsIDEsICFzLT5z dHJpY3RfY29tcGxpYW5jZSk7Cj4gPiArICAgIGlmICghcy0+c3RyaWN0X2NvbXBsaWFuY2UpIHsK PiA+ICsgICAgICAgIEFWQ29kZWNDb250ZXh0ICphdmN0eCA9IHMtPmF2Y3R4Owo+ID4gKyAgICAg ICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgYXZjdHgtPndpZHRoKTsKPiA+ICsgICAgICAgIHB1 dF92YzJfdWVfdWludCgmcy0+cGIsIGF2Y3R4LT5oZWlnaHQpOwo+ID4gKyAgICB9Cj4gPiArfQo+ ID4gKwo+ID4gKy8qIFZDLTIgMTEuMy4zIC0gY29sb3JfZGlmZl9zYW1wbGluZ19mb3JtYXQoKSAq Lwo+ID4gK3N0YXRpYyB2b2lkIGVuY29kZV9zYW1wbGVfZm10KFZDMkVuY0NvbnRleHQgKnMpCj4g PiArewo+ID4gKyAgICBwdXRfYml0cygmcy0+cGIsIDEsICFzLT5zdHJpY3RfY29tcGxpYW5jZSk7 Cj4gPiArICAgIGlmICghcy0+c3RyaWN0X2NvbXBsaWFuY2UpIHsKPiA+ICsgICAgICAgIGludCBp ZHg7Cj4gPiArICAgICAgICBpZiAocy0+Y2hyb21hX3hfc2hpZnQgPT0gMSAmJiBzLT5jaHJvbWFf eV9zaGlmdCA9PSAwKQo+ID4gKyAgICAgICAgICAgIGlkeCA9IDE7IC8qIDQyMiAqLwo+ID4gKyAg ICAgICAgZWxzZSBpZiAocy0+Y2hyb21hX3hfc2hpZnQgPT0gMSAmJiBzLT5jaHJvbWFfeV9zaGlm dCA9PSAxKQo+ID4gKyAgICAgICAgICAgIGlkeCA9IDI7IC8qIDQyMCAqLwo+ID4gKyAgICAgICAg ZWxzZQo+ID4gKyAgICAgICAgICAgIGlkeCA9IDA7IC8qIDQ0NCAqLwo+ID4gKyAgICAgICAgcHV0 X3ZjMl91ZV91aW50KCZzLT5wYiwgaWR4KTsKPiA+ICsgICAgfQo+ID4gK30KPiA+ICsKPiA+ICsv KiBWQy0yIDExLjMuNCAtIHNjYW5fZm9ybWF0KCkgKi8KPiA+ICtzdGF0aWMgdm9pZCBlbmNvZGVf c2Nhbl9mb3JtYXQoVkMyRW5jQ29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIHB1dF9iaXRzKCZz LT5wYiwgMSwgIXMtPnN0cmljdF9jb21wbGlhbmNlKTsKPiA+ICsgICAgaWYgKCFzLT5zdHJpY3Rf Y29tcGxpYW5jZSkKPiA+ICsgICAgICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPmludGVy bGFjZWQpOwo+ID4gK30KPiA+ICsKPiA+ICsvKiBWQy0yIDExLjMuNSAtIGZyYW1lX3JhdGUoKSAq Lwo+ID4gK3N0YXRpYyB2b2lkIGVuY29kZV9mcmFtZV9yYXRlKFZDMkVuY0NvbnRleHQgKnMpCj4g PiArewo+ID4gKyAgICBwdXRfYml0cygmcy0+cGIsIDEsICFzLT5zdHJpY3RfY29tcGxpYW5jZSk7 Cj4gPiArICAgIGlmICghcy0+c3RyaWN0X2NvbXBsaWFuY2UpIHsKPiA+ICsgICAgICAgIEFWQ29k ZWNDb250ZXh0ICphdmN0eCA9IHMtPmF2Y3R4Owo+ID4gKyAgICAgICAgcHV0X3ZjMl91ZV91aW50 KCZzLT5wYiwgMCk7Cj4gPiArICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBhdmN0eC0+ dGltZV9iYXNlLmRlbik7Cj4gPiArICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBhdmN0 eC0+dGltZV9iYXNlLm51bSk7Cj4gPiArICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArLyogVkMtMiAx MS4zLjYgLSBhc3BlY3RfcmF0aW8oKSAqLwo+ID4gK3N0YXRpYyB2b2lkIGVuY29kZV9hc3BlY3Rf cmF0aW8oVkMyRW5jQ29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIHB1dF9iaXRzKCZzLT5wYiwg MSwgIXMtPnN0cmljdF9jb21wbGlhbmNlKTsKPiA+ICsgICAgaWYgKCFzLT5zdHJpY3RfY29tcGxp YW5jZSkgewo+ID4gKyAgICAgICAgQVZDb2RlY0NvbnRleHQgKmF2Y3R4ID0gcy0+YXZjdHg7Cj4g PiArICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCAwKTsKPiA+ICsgICAgICAgIHB1dF92 YzJfdWVfdWludCgmcy0+cGIsIGF2Y3R4LT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bSk7Cj4gPiAr ICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBhdmN0eC0+c2FtcGxlX2FzcGVjdF9yYXRp by5kZW4pOwo+ID4gKyAgICB9Cj4gPiArfQo+ID4gKwo+ID4gKy8qIFZDLTIgMTEuMy43IC0gY2xl YW5fYXJlYSgpICovCj4gPiArc3RhdGljIHZvaWQgZW5jb2RlX2NsZWFuX2FyZWEoVkMyRW5jQ29u dGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIHB1dF9iaXRzKCZzLT5wYiwgMSwgMCk7Cj4gPiArfQo+ ID4gKwo+ID4gKy8qIFZDLTIgMTEuMy44IC0gc2lnbmFsX3JhbmdlKCkgKi8KPiA+ICtzdGF0aWMg dm9pZCBlbmNvZGVfc2lnbmFsX3JhbmdlKFZDMkVuY0NvbnRleHQgKnMpCj4gPiArewo+ID4gKyAg ICBwdXRfYml0cygmcy0+cGIsIDEsICFzLT5zdHJpY3RfY29tcGxpYW5jZSk7Cj4gPiArICAgIGlm ICghcy0+c3RyaWN0X2NvbXBsaWFuY2UpCj4gPiArICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMt PnBiLCBzLT5icHBfaWR4KTsKPiA+ICt9Cj4gPiArCj4gPiArLyogVkMtMiAxMS4zLjkgLSBjb2xv cl9zcGVjKCkgKi8KPiA+ICtzdGF0aWMgdm9pZCBlbmNvZGVfY29sb3Jfc3BlYyhWQzJFbmNDb250 ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgQVZDb2RlY0NvbnRleHQgKmF2Y3R4ID0gcy0+YXZjdHg7 Cj4gPiArICAgIHB1dF9iaXRzKCZzLT5wYiwgMSwgIXMtPnN0cmljdF9jb21wbGlhbmNlKTsKPiA+ ICsgICAgaWYgKCFzLT5zdHJpY3RfY29tcGxpYW5jZSkgewo+ID4gKyAgICAgICAgaW50IHZhbDsK PiA+ICsgICAgICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIDApOwo+ID4gKwo+ID4gKyAgICAg ICAgLyogcHJpbWFyaWVzICovCj4gPiArICAgICAgICBwdXRfYml0cygmcy0+cGIsIDEsIDEpOwo+ ID4gKyAgICAgICAgaWYgKGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPT0gQVZDT0xfUFJJX0JUNDcw QkcpCj4gPiArICAgICAgICAgICAgdmFsID0gMjsKPiA+ICsgICAgICAgIGVsc2UgaWYgKGF2Y3R4 LT5jb2xvcl9wcmltYXJpZXMgPT0gQVZDT0xfUFJJX1NNUFRFMTcwTSkKPiA+ICsgICAgICAgICAg ICB2YWwgPSAxOwo+ID4gKyAgICAgICAgZWxzZSBpZiAoYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9 PSBBVkNPTF9QUklfU01QVEUyNDBNKQo+ID4gKyAgICAgICAgICAgIHZhbCA9IDE7Cj4gPiArICAg ICAgICBlbHNlCj4gPiArICAgICAgICAgICAgdmFsID0gMDsKPiA+ICsgICAgICAgIHB1dF92YzJf dWVfdWludCgmcy0+cGIsIHZhbCk7Cj4gPiArCj4gPiArICAgICAgICAvKiBjb2xvciBtYXRyaXgg Ki8KPiA+ICsgICAgICAgIHB1dF9iaXRzKCZzLT5wYiwgMSwgMSk7Cj4gPiArICAgICAgICBpZiAo YXZjdHgtPmNvbG9yc3BhY2UgPT0gQVZDT0xfU1BDX1JHQikKPiA+ICsgICAgICAgICAgICB2YWwg PSAzOwo+ID4gKyAgICAgICAgZWxzZSBpZiAoYXZjdHgtPmNvbG9yc3BhY2UgPT0gQVZDT0xfU1BD X1lDT0NHKQo+ID4gKyAgICAgICAgICAgIHZhbCA9IDI7Cj4gPiArICAgICAgICBlbHNlIGlmIChh dmN0eC0+Y29sb3JzcGFjZSA9PSBBVkNPTF9TUENfQlQ0NzBCRykKPiA+ICsgICAgICAgICAgICB2 YWwgPSAxOwo+ID4gKyAgICAgICAgZWxzZQo+ID4gKyAgICAgICAgICAgIHZhbCA9IDA7Cj4gPiAr ICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCB2YWwpOwo+ID4gKwo+ID4gKyAgICAgICAg LyogdHJhbnNmZXIgZnVuY3Rpb24gKi8KPiA+ICsgICAgICAgIHB1dF9iaXRzKCZzLT5wYiwgMSwg MSk7Cj4gPiArICAgICAgICBpZiAoYXZjdHgtPmNvbG9yX3RyYyA9PSBBVkNPTF9UUkNfTElORUFS KQo+ID4gKyAgICAgICAgICAgIHZhbCA9IDI7Cj4gPiArICAgICAgICBlbHNlIGlmIChhdmN0eC0+ Y29sb3JfdHJjID09IEFWQ09MX1RSQ19CVDEzNjFfRUNHKQo+ID4gKyAgICAgICAgICAgIHZhbCA9 IDE7Cj4gPiArICAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAgdmFsID0gMDsKPiA+ICsgICAg ICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHZhbCk7Cj4gPiArICAgIH0KPiA+ICt9Cj4gPiAr Cj4gPiArLyogVkMtMiAxMS4zIC0gc291cmNlX3BhcmFtZXRlcnMoKSAqLwo+ID4gK3N0YXRpYyB2 b2lkIGVuY29kZV9zb3VyY2VfcGFyYW1zKFZDMkVuY0NvbnRleHQgKnMpCj4gPiArewo+ID4gKyAg ICBlbmNvZGVfZnJhbWVfc2l6ZShzKTsKPiA+ICsgICAgZW5jb2RlX3NhbXBsZV9mbXQocyk7Cj4g PiArICAgIGVuY29kZV9zY2FuX2Zvcm1hdChzKTsKPiA+ICsgICAgZW5jb2RlX2ZyYW1lX3JhdGUo cyk7Cj4gPiArICAgIGVuY29kZV9hc3BlY3RfcmF0aW8ocyk7Cj4gPiArICAgIGVuY29kZV9jbGVh bl9hcmVhKHMpOwo+ID4gKyAgICBlbmNvZGVfc2lnbmFsX3JhbmdlKHMpOwo+ID4gKyAgICBlbmNv ZGVfY29sb3Jfc3BlYyhzKTsKPiA+ICt9Cj4gPiArCj4gPiArLyogVkMtMiAxMSAtIHNlcXVlbmNl X2hlYWRlcigpICovCj4gPiArdm9pZCBmZl92YzJfZW5jb2RlX3NlcV9oZWFkZXIoVkMyRW5jQ29u dGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIGFsaWduX3B1dF9iaXRzKCZzLT5wYik7Cj4gPiArICAg IGVuY29kZV9wYXJzZV9wYXJhbXMocyk7Cj4gPiArICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIs IHMtPmJhc2VfdmYpOwo+ID4gKyAgICBlbmNvZGVfc291cmNlX3BhcmFtcyhzKTsKPiA+ICsgICAg cHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+aW50ZXJsYWNlZCk7IC8qIEZyYW1lcyBvciBmaWVs ZHMgY29kaW5nCj4gKi8KPiA+ICt9Cj4gPiArCj4gPiArLyogVkMtMiAxMi4xIC0gcGljdHVyZV9o ZWFkZXIoKSAqLwo+ID4gK3N0YXRpYyB2b2lkIGVuY29kZV9waWN0dXJlX2hlYWRlcihWQzJFbmND b250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgYWxpZ25fcHV0X2JpdHMoJnMtPnBiKTsKPiA+ICsg ICAgcHV0X2JpdHMzMigmcy0+cGIsIHMtPnBpY3R1cmVfbnVtYmVyKyspOwo+ID4gK30KPiA+ICsK PiA+ICsvKiBWQy0yIDEyLjMuNC4xIC0gc2xpY2VfcGFyYW1ldGVycygpICovCj4gPiArc3RhdGlj IHZvaWQgZW5jb2RlX3NsaWNlX3BhcmFtcyhWQzJFbmNDb250ZXh0ICpzKQo+ID4gK3sKPiA+ICsg ICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+bnVtX3gpOwo+ID4gKyAgICBwdXRfdmMyX3Vl X3VpbnQoJnMtPnBiLCBzLT5udW1feSk7Cj4gPiArICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIs IHMtPnByZWZpeF9ieXRlcyk7Cj4gPiArICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPnNp emVfc2NhbGVyKTsKPiA+ICt9Cj4gPiArCj4gPiArLyogMXN0IGlkeCA9IExMLCBzZWNvbmQgLSB2 ZXJ0aWNhbCwgdGhpcmQgLSBob3Jpem9udGFsLCBmb3VydGggLSB0b3RhbAo+ICovCj4gPiArc3Rh dGljIGNvbnN0IHVpbnQ4X3QgdmMyX3FtX2NvbF90YWJbXVs0XSA9IHsKPiA+ICsgICAgezIwLCAg OSwgMTUsICA0fSwKPiA+ICsgICAgeyAwLCAgNiwgIDYsICA0fSwKPiA+ICsgICAgeyAwLCAgMywg IDMsICA1fSwKPiA+ICsgICAgeyAwLCAgMywgIDUsICAxfSwKPiA+ICsgICAgeyAwLCAxMSwgMTAs IDExfQo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHVpbnQ4X3QgdmMyX3FtX2ZsYXRf dGFiW11bNF0gPSB7Cj4gPiArICAgIHsgMCwgIDAsICAwLCAgMH0sCj4gPiArICAgIHsgMCwgIDAs ICAwLCAgMH0sCj4gPiArICAgIHsgMCwgIDAsICAwLCAgMH0sCj4gPiArICAgIHsgMCwgIDAsICAw LCAgMH0sCj4gPiArICAgIHsgMCwgIDAsICAwLCAgMH0KPiA+ICt9Owo+ID4gKwo+ID4gK3ZvaWQg ZmZfdmMyX2luaXRfcXVhbnRfbWF0cml4KFZDMkVuY0NvbnRleHQgKnMpCj4gPiArewo+ID4gKyAg ICBpbnQgbGV2ZWwsIG9yaWVudGF0aW9uOwo+ID4gKwo+ID4gKyAgICBpZiAocy0+d2F2ZWxldF9k ZXB0aCA8PSA0ICYmIHMtPnF1YW50X21hdHJpeCA9PSBWQzJfUU1fREVGKSB7Cj4gPiArICAgICAg ICBzLT5jdXN0b21fcXVhbnRfbWF0cml4ID0gMDsKPiA+ICsgICAgICAgIGZvciAobGV2ZWwgPSAw OyBsZXZlbCA8IHMtPndhdmVsZXRfZGVwdGg7IGxldmVsKyspIHsKPiA+ICsgICAgICAgICAgICBz LT5xdWFudFtsZXZlbF1bMF0gPQo+IGZmX2RpcmFjX2RlZmF1bHRfcW1hdFtzLT53YXZlbGV0X2lk eF1bbGV2ZWxdWzBdOwo+ID4gKyAgICAgICAgICAgIHMtPnF1YW50W2xldmVsXVsxXSA9Cj4gZmZf ZGlyYWNfZGVmYXVsdF9xbWF0W3MtPndhdmVsZXRfaWR4XVtsZXZlbF1bMV07Cj4gPiArICAgICAg ICAgICAgcy0+cXVhbnRbbGV2ZWxdWzJdID0KPiBmZl9kaXJhY19kZWZhdWx0X3FtYXRbcy0+d2F2 ZWxldF9pZHhdW2xldmVsXVsyXTsKPiA+ICsgICAgICAgICAgICBzLT5xdWFudFtsZXZlbF1bM10g PQo+IGZmX2RpcmFjX2RlZmF1bHRfcW1hdFtzLT53YXZlbGV0X2lkeF1bbGV2ZWxdWzNdOwo+ID4g KyAgICAgICAgfQo+ID4gKyAgICAgICAgcmV0dXJuOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAg IHMtPmN1c3RvbV9xdWFudF9tYXRyaXggPSAxOwo+ID4gKwo+ID4gKyAgICBpZiAocy0+cXVhbnRf bWF0cml4ID09IFZDMl9RTV9ERUYpIHsKPiA+ICsgICAgICAgIGZvciAobGV2ZWwgPSAwOyBsZXZl bCA8IHMtPndhdmVsZXRfZGVwdGg7IGxldmVsKyspIHsKPiA+ICsgICAgICAgICAgICBmb3IgKG9y aWVudGF0aW9uID0gMDsgb3JpZW50YXRpb24gPCA0OyBvcmllbnRhdGlvbisrKSB7Cj4gPiArICAg ICAgICAgICAgICAgIGlmIChsZXZlbCA8PSAzKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgcy0+ cXVhbnRbbGV2ZWxdW29yaWVudGF0aW9uXSA9Cj4gZmZfZGlyYWNfZGVmYXVsdF9xbWF0W3MtPndh dmVsZXRfaWR4XVtsZXZlbF1bb3JpZW50YXRpb25dOwo+ID4gKyAgICAgICAgICAgICAgICBlbHNl Cj4gPiArICAgICAgICAgICAgICAgICAgICBzLT5xdWFudFtsZXZlbF1bb3JpZW50YXRpb25dID0K PiB2YzJfcW1fY29sX3RhYltsZXZlbF1bb3JpZW50YXRpb25dOwo+ID4gKyAgICAgICAgICAgIH0K PiA+ICsgICAgICAgIH0KPiA+ICsgICAgfSBlbHNlIGlmIChzLT5xdWFudF9tYXRyaXggPT0gVkMy X1FNX0NPTCkgewo+ID4gKyAgICAgICAgZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgcy0+d2F2ZWxl dF9kZXB0aDsgbGV2ZWwrKykgewo+ID4gKyAgICAgICAgICAgIGZvciAob3JpZW50YXRpb24gPSAw OyBvcmllbnRhdGlvbiA8IDQ7IG9yaWVudGF0aW9uKyspIHsKPiA+ICsgICAgICAgICAgICAgICAg cy0+cXVhbnRbbGV2ZWxdW29yaWVudGF0aW9uXSA9Cj4gdmMyX3FtX2NvbF90YWJbbGV2ZWxdW29y aWVudGF0aW9uXTsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0g ZWxzZSB7Cj4gPiArICAgICAgICBmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBzLT53YXZlbGV0X2Rl cHRoOyBsZXZlbCsrKSB7Cj4gPiArICAgICAgICAgICAgZm9yIChvcmllbnRhdGlvbiA9IDA7IG9y aWVudGF0aW9uIDwgNDsgb3JpZW50YXRpb24rKykgewo+ID4gKyAgICAgICAgICAgICAgICBzLT5x dWFudFtsZXZlbF1bb3JpZW50YXRpb25dID0KPiB2YzJfcW1fZmxhdF90YWJbbGV2ZWxdW29yaWVu dGF0aW9uXTsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ ICt9Cj4gPiArCj4gPiArLyogVkMtMiAxMi4zLjQuMiAtIHF1YW50X21hdHJpeCgpICovCj4gPiAr c3RhdGljIHZvaWQgZW5jb2RlX3F1YW50X21hdHJpeChWQzJFbmNDb250ZXh0ICpzKQo+ID4gK3sK PiA+ICsgICAgaW50IGxldmVsOwo+ID4gKyAgICBwdXRfYml0cygmcy0+cGIsIDEsIHMtPmN1c3Rv bV9xdWFudF9tYXRyaXgpOwo+ID4gKyAgICBpZiAocy0+Y3VzdG9tX3F1YW50X21hdHJpeCkgewo+ ID4gKyAgICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+cXVhbnRbMF1bMF0pOwo+ID4g KyAgICAgICAgZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgcy0+d2F2ZWxldF9kZXB0aDsgbGV2ZWwr Kykgewo+ID4gKyAgICAgICAgICAgIHB1dF92YzJfdWVfdWludCgmcy0+cGIsIHMtPnF1YW50W2xl dmVsXVsxXSk7Cj4gPiArICAgICAgICAgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+cXVh bnRbbGV2ZWxdWzJdKTsKPiA+ICsgICAgICAgICAgICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBz LT5xdWFudFtsZXZlbF1bM10pOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArfQo+ID4g Kwo+ID4gKy8qIFZDLTIgMTIuMyAtIHRyYW5zZm9ybV9wYXJhbWV0ZXJzKCkgKi8KPiA+ICtzdGF0 aWMgdm9pZCBlbmNvZGVfdHJhbnNmb3JtX3BhcmFtcyhWQzJFbmNDb250ZXh0ICpzKQo+ID4gK3sK PiA+ICsgICAgcHV0X3ZjMl91ZV91aW50KCZzLT5wYiwgcy0+d2F2ZWxldF9pZHgpOwo+ID4gKyAg ICBwdXRfdmMyX3VlX3VpbnQoJnMtPnBiLCBzLT53YXZlbGV0X2RlcHRoKTsKPiA+ICsKPiA+ICsg ICAgZW5jb2RlX3NsaWNlX3BhcmFtcyhzKTsKPiA+ICsgICAgZW5jb2RlX3F1YW50X21hdHJpeChz KTsKPiA+ICt9Cj4gPiArCj4gPiArLyogVkMtMiAxMi4yIC0gd2F2ZWxldF90cmFuc2Zvcm0oKSAq Lwo+ID4gK3N0YXRpYyB2b2lkIGVuY29kZV93YXZlbGV0X3RyYW5zZm9ybShWQzJFbmNDb250ZXh0 ICpzKQo+ID4gK3sKPiA+ICsgICAgZW5jb2RlX3RyYW5zZm9ybV9wYXJhbXMocyk7Cj4gPiArICAg IGFsaWduX3B1dF9iaXRzKCZzLT5wYik7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIFZDLTIgMTIgLSBw aWN0dXJlX3BhcnNlKCkgKi8KPiA+ICt2b2lkIGZmX3ZjMl9lbmNvZGVfcGljdHVyZV9zdGFydChW QzJFbmNDb250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgYWxpZ25fcHV0X2JpdHMoJnMtPnBiKTsK PiA+ICsgICAgZW5jb2RlX3BpY3R1cmVfaGVhZGVyKHMpOwo+ID4gKyAgICBhbGlnbl9wdXRfYml0 cygmcy0+cGIpOwo+ID4gKyAgICBlbmNvZGVfd2F2ZWxldF90cmFuc2Zvcm0ocyk7Cj4gPiArfQo+ ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmMyZW5jX2NvbW1vbi5oIGIvbGliYXZjb2RlYy92 YzJlbmNfY29tbW9uLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAw MDAwLi43MmU5NDRjOGU2Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9saWJhdmNvZGVjL3Zj MmVuY19jb21tb24uaAo+ID4gQEAgLTAsMCArMSwzMjMgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHly aWdodCAoQykgMjAxNiBPcGVuIEJyb2FkY2FzdCBTeXN0ZW1zIEx0ZC4KPiA+ICsgKiBBdXRob3Ig ICAgICAgIDIwMTYgUm9zdGlzbGF2IFBlaGxpdmFub3YgPGF0b21udWtlckBnbWFpbC5jb20+Cj4g PiArICoKPiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gPiArICoKPiA+ICsg KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y Cj4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ID4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ID4gKyAqCj4gPiArICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Cj4gPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICoKPiA+ICsgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4g PiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ID4gKyAqLwo+ID4gKwo+ ID4gKyNpZm5kZWYgQVZDT0RFQ19WQzJFTkNfQ09NTU9OX0gKPiA+ICsjZGVmaW5lIEFWQ09ERUNf VkMyRU5DX0NPTU1PTl9ICj4gPiArCj4gPiArI2luY2x1ZGUgImF2Y29kZWMuaCIKPiA+ICsjaW5j bHVkZSAiZGlyYWMuaCIKPiA+ICsjaW5jbHVkZSAicHV0X2JpdHMuaCIKPiA+ICsKPiA+ICsjaW5j bHVkZSAidmMyZW5jX2R3dC5oIgo+ID4gKyNpbmNsdWRlICJkaXJhY3RhYi5oIgo+ID4gKyNpbmNs dWRlICJsaWJhdnV0aWwvdnVsa2FuLmgiCj4KPiBUaGlzIGhlYWRlciByZWxpZXMgb24gdnVsa2Fu IGhlYWRlcnMgYmVpbmcgcHJlc2VudCBhbmQgbXVzdCB0aGVyZWZvcmUKPiBub3QgYmUgaW5jbHVk ZWQgYnkgYW55IG5vbi12dWxrYW4gY29kZS4KPgo+ID4gKwo+ID4gKy8qIFRoZSBsaW1pdGVkIHNp emUgcmVzb2x1dGlvbiBvZiBlYWNoIHNsaWNlIGZvcmNlcyB1cyB0byBkbyB0aGlzICovCj4gPiAr I2RlZmluZSBTU0laRV9ST1VORChiKSAoRkZBTElHTigoYiksIHMtPnNpemVfc2NhbGVyKSArIDQg Kwo+IHMtPnByZWZpeF9ieXRlcykKPiA+ICsKPiA+ICsvKiBEZWNpZGVzIHRoZSBjdXRvZmYgcG9p bnQgaW4gIyBvZiBzbGljZXMgdG8gZGlzdHJpYnV0ZSB0aGUgbGVmdG92ZXIKPiBieXRlcyAqLwo+ ID4gKyNkZWZpbmUgU0xJQ0VfUkVESVNUX1RPVEFMIDE1MAo+ID4gKwo+ID4gK3R5cGVkZWYgc3Ry dWN0IFZDMkJhc2VWaWRlb0Zvcm1hdCB7Cj4gPiArICAgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhf Zm10Owo+ID4gKyAgICBBVlJhdGlvbmFsIHRpbWVfYmFzZTsKPiA+ICsgICAgaW50IHdpZHRoLCBo ZWlnaHQ7Cj4gPiArICAgIHVpbnQ4X3QgaW50ZXJsYWNlZCwgbGV2ZWw7Cj4gPiArICAgIGNoYXIg bmFtZVsxM107Cj4gPiArfSBWQzJCYXNlVmlkZW9Gb3JtYXQ7Cj4gPiArCj4gPiArc3RhdGljIGNv bnN0IFZDMkJhc2VWaWRlb0Zvcm1hdCBiYXNlX3ZpZGVvX2ZtdHNbXSA9IHsKPiA+ICsgICAgeyAw IH0sIC8qIEN1c3RvbSBmb3JtYXQsIGhlcmUganVzdCB0byBtYWtlIGluZGV4aW5nIGVxdWFsIHRv Cj4gYmFzZV92ZiAqLwo+ID4gKyAgICB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgICB7IDEwMDEsIDE1 MDAwIH0sICAxNzYsICAxMjAsIDAsIDEsCj4gICJRU0lGNTI1IiB9LAo+ID4gKyAgICB7IEFWX1BJ WF9GTVRfWVVWNDIwUCwgICB7ICAgIDIsICAgIDI1IH0sICAxNzYsICAxNDQsIDAsIDEsCj4gICJR Q0lGIiAgICB9LAo+ID4gKyAgICB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgICB7IDEwMDEsIDE1MDAw IH0sICAzNTIsICAyNDAsIDAsIDEsCj4gICJTSUY1MjUiICB9LAo+ID4gKyAgICB7IEFWX1BJWF9G TVRfWVVWNDIwUCwgICB7ICAgIDIsICAgIDI1IH0sICAzNTIsICAyODgsIDAsIDEsCj4gICJDSUYi ICAgICB9LAo+ID4gKyAgICB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgICB7IDEwMDEsIDE1MDAwIH0s ICA3MDQsICA0ODAsIDAsIDEsCj4gICI0U0lGNTI1IiB9LAo+ID4gKyAgICB7IEFWX1BJWF9GTVRf WVVWNDIwUCwgICB7ICAgIDIsICAgIDI1IH0sICA3MDQsICA1NzYsIDAsIDEsCj4gICI0Q0lGIiAg ICB9LAo+ID4gKwo+ID4gKyAgICB7IEFWX1BJWF9GTVRfWVVWNDIyUDEwLCB7IDEwMDEsIDMwMDAw IH0sICA3MjAsICA0ODAsIDEsIDIsCj4gICJTRDQ4MEktNjAiIH0sCj4gPiArICAgIHsgQVZfUElY X0ZNVF9ZVVY0MjJQMTAsIHsgICAgMSwgICAgMjUgfSwgIDcyMCwgIDU3NiwgMSwgMiwKPiAgIlNE NTc2SS01MCIgfSwKPiA+ICsKPiA+ICsgICAgeyBBVl9QSVhfRk1UX1lVVjQyMlAxMCwgeyAxMDAx LCA2MDAwMCB9LCAxMjgwLCAgNzIwLCAwLCAzLAo+ICJIRDcyMFAtNjAiICB9LAo+ID4gKyAgICB7 IEFWX1BJWF9GTVRfWVVWNDIyUDEwLCB7ICAgIDEsICAgIDUwIH0sIDEyODAsICA3MjAsIDAsIDMs Cj4gIkhENzIwUC01MCIgIH0sCj4gPiArICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgMTAw MSwgMzAwMDAgfSwgMTkyMCwgMTA4MCwgMSwgMywKPiAiSEQxMDgwSS02MCIgfSwKPiA+ICsgICAg eyBBVl9QSVhfRk1UX1lVVjQyMlAxMCwgeyAgICAxLCAgICAyNSB9LCAxOTIwLCAxMDgwLCAxLCAz LAo+ICJIRDEwODBJLTUwIiB9LAo+ID4gKyAgICB7IEFWX1BJWF9GTVRfWVVWNDIyUDEwLCB7IDEw MDEsIDYwMDAwIH0sIDE5MjAsIDEwODAsIDAsIDMsCj4gIkhEMTA4MFAtNjAiIH0sCj4gPiArICAg IHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgICAgMSwgICAgNTAgfSwgMTkyMCwgMTA4MCwgMCwg MywKPiAiSEQxMDgwUC01MCIgfSwKPiA+ICsKPiA+ICsgICAgeyBBVl9QSVhfRk1UX1lVVjQ0NFAx MiwgeyAgICAxLCAgICAyNCB9LCAyMDQ4LCAxMDgwLCAwLCA0LAo+ICJEQzJLIiB9LAo+ID4gKyAg ICB7IEFWX1BJWF9GTVRfWVVWNDQ0UDEyLCB7ICAgIDEsICAgIDI0IH0sIDQwOTYsIDIxNjAsIDAs IDUsCj4gIkRDNEsiIH0sCj4gPiArCj4gPiArICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsg MTAwMSwgNjAwMDAgfSwgMzg0MCwgMjE2MCwgMCwgNiwgIlVIRFRWCj4gNEstNjAiIH0sCj4gPiAr ICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgICAgMSwgICAgNTAgfSwgMzg0MCwgMjE2MCwg MCwgNiwgIlVIRFRWCj4gNEstNTAiIH0sCj4gPiArCj4gPiArICAgIHsgQVZfUElYX0ZNVF9ZVVY0 MjJQMTAsIHsgMTAwMSwgNjAwMDAgfSwgNzY4MCwgNDMyMCwgMCwgNywgIlVIRFRWCj4gOEstNjAi IH0sCj4gPiArICAgIHsgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIHsgICAgMSwgICAgNTAgfSwgNzY4 MCwgNDMyMCwgMCwgNywgIlVIRFRWCj4gOEstNTAiIH0sCj4gPiArCj4gPiArICAgIHsgQVZfUElY X0ZNVF9ZVVY0MjJQMTAsIHsgMTAwMSwgMjQwMDAgfSwgMTkyMCwgMTA4MCwgMCwgMywKPiAiSEQx MDgwUC0yNCIgfSwKPiA+ICsgICAgeyBBVl9QSVhfRk1UX1lVVjQyMlAxMCwgeyAxMDAxLCAzMDAw MCB9LCAgNzIwLCAgNDg2LCAxLCAyLCAgIlNECj4gUHJvNDg2IiAgfSwKPiA+ICt9Owo+ID4gK3N0 YXRpYyBjb25zdCBpbnQgYmFzZV92aWRlb19mbXRzX2xlbiA9IEZGX0FSUkFZX0VMRU1TKGJhc2Vf dmlkZW9fZm10cyk7Cj4KPiBEb24ndCBkdXBsaWNhdGUgdGhpcyBhcnJheS4KPgo+ID4gKwo+ID4g K2VudW0gVkMyX1FNIHsKPiA+ICsgICAgVkMyX1FNX0RFRiA9IDAsCj4gPiArICAgIFZDMl9RTV9D T0wsCj4gPiArICAgIFZDMl9RTV9GTEFULAo+ID4gKwo+ID4gKyAgICBWQzJfUU1fTkIKPiA+ICt9 Owo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IFN1YkJhbmQgewo+ID4gKyAgICBkd3Rjb2VmICpi dWY7Cj4gPiArICAgIHB0cmRpZmZfdCBzdHJpZGU7Cj4gPiArICAgIGludCB3aWR0aDsKPiA+ICsg ICAgaW50IGhlaWdodDsKPiA+ICsgICAgaW50IHNoaWZ0Owo+ID4gK30gU3ViQmFuZDsKPiA+ICsK PiA+ICt0eXBlZGVmIHN0cnVjdCBQbGFuZSB7Cj4gPiArICAgIFN1YkJhbmQgYmFuZFtNQVhfRFdU X0xFVkVMU11bNF07Cj4gPiArICAgIGR3dGNvZWYgKmNvZWZfYnVmOwo+ID4gKyAgICBpbnQgd2lk dGg7Cj4gPiArICAgIGludCBoZWlnaHQ7Cj4gPiArICAgIGludCBkd3Rfd2lkdGg7Cj4gPiArICAg IGludCBkd3RfaGVpZ2h0Owo+ID4gKyAgICBwdHJkaWZmX3QgY29lZl9zdHJpZGU7Cj4gPiArfSBQ bGFuZTsKPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCBTbGljZUFyZ3Mgewo+ID4gKyAgICBjb25z dCBzdHJ1Y3QgVkMyRW5jQ29udGV4dCAqY3R4Owo+ID4gKyAgICB1bmlvbiB7Cj4gPiArICAgICAg ICBpbnQgY2FjaGVbRElSQUNfTUFYX1FVQU5UX0lOREVYXTsKPiA+ICsgICAgICAgIHVpbnQ4X3Qg KmJ1ZjsKPiA+ICsgICAgfTsKPiA+ICsgICAgaW50IHg7Cj4gPiArICAgIGludCB5Owo+ID4gKyAg ICBpbnQgcXVhbnRfaWR4Owo+ID4gKyAgICBpbnQgYml0c19jZWlsOwo+ID4gKyAgICBpbnQgYml0 c19mbG9vcjsKPiA+ICsgICAgaW50IGJ5dGVzOwo+ID4gK30gU2xpY2VBcmdzOwo+ID4gKwo+ID4g K3R5cGVkZWYgc3RydWN0IFRyYW5zZm9ybUFyZ3Mgewo+ID4gKyAgICBzdHJ1Y3QgVkMyRW5jQ29u dGV4dCAqY3R4Owo+ID4gKyAgICBQbGFuZSAqcGxhbmU7Cj4gPiArICAgIGNvbnN0IHZvaWQgKmlk YXRhOwo+ID4gKyAgICBwdHJkaWZmX3QgaXN0cmlkZTsKPiA+ICsgICAgaW50IGZpZWxkOwo+ID4g KyAgICBWQzJUcmFuc2Zvcm1Db250ZXh0IHQ7Cj4gPiArfSBUcmFuc2Zvcm1BcmdzOwo+ID4gKwo+ ID4gK3R5cGVkZWYgc3RydWN0IFZDMkR3dFBsYW5lIHsKPiA+ICsgICAgaW50IHdpZHRoOwo+ID4g KyAgICBpbnQgaGVpZ2h0Owo+ID4gKyAgICBpbnQgZHd0X3dpZHRoOwo+ID4gKyAgICBpbnQgZHd0 X2hlaWdodDsKPiA+ICt9IFZDMkR3dFBsYW5lOwo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IFZD MkR3dFB1c2hEYXRhIHsKPiA+ICsgICAgaW50IHM7Cj4gPiArICAgIHVuaW9uIHsKPiA+ICsgICAg ICAgIGludCBkaWZmX29mZnNldDsKPiA+ICsgICAgICAgIGludCBwbGFuZV9pZHg7Cj4gPiArICAg IH07Cj4gPiArICAgIGludCBsZXZlbDsKPiA+ICsgICAgVkMyRHd0UGxhbmUgcGxhbmVzWzNdOwo+ ID4gK30gVkMyRHd0UHVzaERhdGE7Cj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1Y3QgVkMyRW5jQXV4 RGF0YSB7Cj4gPiArICAgIHVpbnQzMl90IHF1YW50W01BWF9EV1RfTEVWRUxTXVs0XTsKPiA+ICsg ICAgaW50IGZmX2RpcmFjX3FzY2FsZV90YWJbMTE2XTsKPiA+ICt9IFZDMkVuY0F1eERhdGE7Cj4g PiArCj4gPiArdHlwZWRlZiBzdHJ1Y3QgVkMyRW5jUHVzaERhdGEgewo+ID4gKyAgICBWa0Rldmlj ZUFkZHJlc3MgcGI7Cj4gPiArICAgIFZrRGV2aWNlQWRkcmVzcyBsdXRzOwo+ID4gKyAgICBWa0Rl dmljZUFkZHJlc3Mgc2xpY2U7Cj4gPiArICAgIGludCBudW1feDsKPiA+ICsgICAgaW50IG51bV95 Owo+ID4gKyAgICBWQzJEd3RQbGFuZSBwbGFuZXNbM107Cj4gPiArICAgIGludCB3YXZlbGV0X2Rl cHRoOwo+ID4gKyAgICBpbnQgc2l6ZV9zY2FsZXI7Cj4gPiArICAgIGludCBwcmVmaXhfYnl0ZXM7 Cj4gPiArfSBWQzJFbmNQdXNoRGF0YTsKPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCBWQzJFbmNT bGljZUFyZ3Mgewo+ID4gKyAgICBpbnQgcXVhbnRfaWR4Owo+ID4gKyAgICBpbnQgYnl0ZXM7Cj4g PiArICAgIGludCBwYl9zdGFydDsKPiA+ICsgICAgaW50IHBhZDsKPiA+ICt9IFZDMkVuY1NsaWNl QXJnczsKPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCBWQzJFbmNTbGljZUNhbGNQdXNoRGF0YSB7 Cj4gPiArICAgIFZrRGV2aWNlQWRkcmVzcyBsdXRzOwo+ID4gKyAgICBWa0RldmljZUFkZHJlc3Mg c2xpY2U7Cj4gPiArICAgIGludCBudW1feDsKPiA+ICsgICAgaW50IG51bV95Owo+ID4gKyAgICBW QzJEd3RQbGFuZSBwbGFuZXNbM107Cj4gPiArICAgIGludCB3YXZlbGV0X2RlcHRoOwo+ID4gKyAg ICBpbnQgc2l6ZV9zY2FsZXI7Cj4gPiArICAgIGludCBwcmVmaXhfYnl0ZXM7Cj4gPiArICAgIGlu dCBiaXRzX2NlaWw7Cj4gPiArICAgIGludCBiaXRzX2Zsb29yOwo+ID4gK30gVkMyRW5jU2xpY2VD YWxjUHVzaERhdGE7Cj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1Y3QgVkMyRW5jQ29udGV4dCB7Cj4g PiArICAgIEFWQ2xhc3MgKmF2X2NsYXNzOwo+ID4gKyAgICBQdXRCaXRDb250ZXh0IHBiOwo+ID4g KyAgICBQbGFuZSBwbGFuZVszXTsKPiA+ICsgICAgQVZDb2RlY0NvbnRleHQgKmF2Y3R4Owo+ID4g KyAgICBEaXJhY1ZlcnNpb25JbmZvIHZlcjsKPiA+ICsKPiA+ICsgICAgU2xpY2VBcmdzICpzbGlj ZV9hcmdzOwo+ID4gKyAgICBWQzJFbmNTbGljZUFyZ3MqIHZrX3NsaWNlX2FyZ3M7Cj4gPiArICAg IFRyYW5zZm9ybUFyZ3MgdHJhbnNmb3JtX2FyZ3NbM107Cj4gPiArCj4gPiArICAgIC8qIEZvciBj b252ZXJzaW9uIGZyb20gdW5zaWduZWQgcGl4ZWwgdmFsdWVzIHRvIHNpZ25lZCAqLwo+ID4gKyAg ICBpbnQgZGlmZl9vZmZzZXQ7Cj4gPiArICAgIGludCBicHA7Cj4gPiArICAgIGludCBicHBfaWR4 Owo+ID4gKwo+ID4gKyAgICAvKiBQaWN0dXJlIG51bWJlciAqLwo+ID4gKyAgICB1aW50MzJfdCBw aWN0dXJlX251bWJlcjsKPiA+ICsKPiA+ICsgICAgLyogQmFzZSB2aWRlbyBmb3JtYXQgKi8KPiA+ ICsgICAgaW50IGJhc2VfdmY7Cj4gPiArICAgIGludCBsZXZlbDsKPiA+ICsgICAgaW50IHByb2Zp bGU7Cj4gPiArCj4gPiArICAgIC8qIFF1YW50aXphdGlvbiBtYXRyaXggKi8KPiA+ICsgICAgdWlu dDhfdCBxdWFudFtNQVhfRFdUX0xFVkVMU11bNF07Cj4gPiArICAgIGludCBjdXN0b21fcXVhbnRf bWF0cml4Owo+ID4gKwo+ID4gKyAgICAvKiBEaXZpc2lvbiBMVVQgKi8KPiA+ICsgICAgdWludDMy X3QgcW1hZ2ljX2x1dFsxMTZdWzJdOwo+ID4gKwo+ID4gKyAgICBpbnQgbnVtX3g7IC8qICNzbGlj ZXMgaG9yaXpvbnRhbGx5ICovCj4gPiArICAgIGludCBudW1feTsgLyogI3NsaWNlcyB2ZXJ0aWNh bGx5ICovCj4gPiArICAgIGludCBncm91cF94Owo+ID4gKyAgICBpbnQgZ3JvdXBfeTsKPiA+ICsg ICAgaW50IHByZWZpeF9ieXRlczsKPiA+ICsgICAgaW50IHNpemVfc2NhbGVyOwo+ID4gKyAgICBp bnQgY2hyb21hX3hfc2hpZnQ7Cj4gPiArICAgIGludCBjaHJvbWFfeV9zaGlmdDsKPiA+ICsKPiA+ ICsgICAgLyogUmF0ZSBjb250cm9sIHN0dWZmICovCj4gPiArICAgIGludCBmcmFtZV9tYXhfYnl0 ZXM7Cj4gPiArICAgIGludCBzbGljZV9tYXhfYnl0ZXM7Cj4gPiArICAgIGludCBzbGljZV9taW5f Ynl0ZXM7Cj4gPiArICAgIGludCBxX2NlaWw7Cj4gPiArICAgIGludCBxX2F2ZzsKPiA+ICsKPiA+ ICsgICAgLyogT3B0aW9ucyAqLwo+ID4gKyAgICBkb3VibGUgdG9sZXJhbmNlOwo+ID4gKyAgICBp bnQgd2F2ZWxldF9pZHg7Cj4gPiArICAgIGludCB3YXZlbGV0X2RlcHRoOwo+ID4gKyAgICBpbnQg c3RyaWN0X2NvbXBsaWFuY2U7Cj4gPiArICAgIGludCBzbGljZV9oZWlnaHQ7Cj4gPiArICAgIGlu dCBzbGljZV93aWR0aDsKPiA+ICsgICAgaW50IGludGVybGFjZWQ7Cj4gPiArICAgIGVudW0gVkMy X1FNIHF1YW50X21hdHJpeDsKPiA+ICsKPiA+ICsgICAgLyogUGFyc2UgY29kZSBzdGF0ZSAqLwo+ ID4gKyAgICB1aW50MzJfdCBuZXh0X3BhcnNlX29mZnNldDsKPiA+ICsgICAgZW51bSBEaXJhY1Bh cnNlQ29kZXMgbGFzdF9wYXJzZV9jb2RlOwo+ID4gKwo+ID4gKyAgICAvKiBWdWxrYW4gc3RhdGUg Ki8KPiA+ICsgICAgRkZWdWxrYW5Db250ZXh0IHZrY3R4Owo+ID4gKyAgICBBVlZ1bGthbkRldmlj ZVF1ZXVlRmFtaWx5ICpxZjsKPiA+ICsgICAgRkZWa0V4ZWNQb29sIGU7Cj4gPiArCj4gPiArICAg IEZGVnVsa2FuU2hhZGVyIGR3dF9oYWFyX3NoZDsKPiA+ICsgICAgRkZWdWxrYW5TaGFkZXIgZHd0 X3VwbG9hZF9zaGQ7Cj4gPiArICAgIEZGVnVsa2FuU2hhZGVyIGR3dF9ob3Jfc2hkLCBkd3RfdmVy X3NoZDsKPiA+ICsgICAgRkZWdWxrYW5TaGFkZXIgc2xpY2Vfc2hkOwo+ID4gKyAgICBGRlZ1bGth blNoYWRlciBlbmNfc2hkOwo+Cj4gWW91IGFyZSBhZGRpbmcgeW91ciB2dWxrYW4gc3R1ZmYgdG8g dGhlIGNvbW1vbiBoZWFkZXIuIFRoaXMgbWVhbnMgdGhhdAo+IHRoZSBzb2Z0d2FyZSBlbmNvZGVy J3MgcHJpdmF0ZSBjb250ZXh0IHdpbGwgYmUgYmxvYXRlZCB3aXRoIHN0dWZmIGl0Cj4gZG9lcyBu b3QgdXNlIGF0IGFsbCB3aGljaCBpcyBub3QgaG93IGl0IHNob3VsZCBiZSBkb25lIGV2ZW4gaWYg aXQgY291bGQKPiBiZSBkb25lLiBCdXQgaXQgY2FuJ3QgZ2l2ZW4gdGhhdCB0aGUgdnVsa2FuIGhl YWRlciBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZS4KPgo+IEl0IGFsc28gbWVhbnMgdGhhdCB5b3Vy IGNvbW1pdCBtZXNzYWdlIGlzIGFic29sdXRlbHkgd3Jvbmc6IFlvdSBhcmUgbm90Cj4gb25seSBz cGxpdHRpbmcgb3V0LCB5b3UgYXJlIGFkZGluZyBuZXcgc3R1ZmYuCj4KPiBJbnN0ZWFkIHlvdSBz aG91bGQgdXNlIGEgY29tbW9uIGJhc2Ugc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHN0dWZmIHRo YXQKPiB0aGUgY29tbW9uIGZ1bmN0aW9ucyBuZWVkIHRvIGFjY2VzcyBhbmQgdXNlIGV4dGVuZGVk IHN0cnVjdHVyZXMgKG9uZSBmb3IKPiBlYWNoIGVuY29kZXIpIGFzIHByaXZhdGUgY29udGV4dHMg Zm9yIHRoZSBlbmNvZGVycy4KPgo+ID4gKyAgICBBVkJ1ZmZlclBvb2wqIGR3dF9idWZfcG9vbDsK PiA+ICsgICAgaW50IGhhYXJfc3ViZ3JvdXA7Cj4gPiArCj4gPiArICAgIFZrQnVmZmVyIHBsYW5l X2J1Ziwgc2xpY2VfYnVmOwo+ID4gKyAgICBWQzJFbmNQdXNoRGF0YSBlbmNfY29uc3RzOwo+ID4g KyAgICBWQzJEd3RQdXNoRGF0YSBkd3RfY29uc3RzOwo+ID4gKyAgICBWQzJFbmNTbGljZUNhbGNQ dXNoRGF0YSBjYWxjX2NvbnN0czsKPiA+ICsKPiA+ICsgICAgLyogSW50ZXJtZWRpYXRlIGZyYW1l IHBvb2wgKi8KPiA+ICsgICAgQVZCdWZmZXJSZWYgKmludGVybWVkaWF0ZV9mcmFtZXNfcmVmWzNd Owo+ID4gKyAgICBBVkZyYW1lICppbnRlcm1lZGlhdGVfZnJhbWVbQVZfTlVNX0RBVEFfUE9JTlRF UlNdOwo+ID4gKyAgICBWa0ltYWdlVmlldyBpbnRlcm1lZGlhdGVfdmlld3NbQVZfTlVNX0RBVEFf UE9JTlRFUlNdOwo+ID4gK30gVkMyRW5jQ29udGV4dDsKPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5l IHZvaWQgcHV0X3ZjMl91ZV91aW50KFB1dEJpdENvbnRleHQgKnBiLCB1aW50MzJfdCB2YWwpCj4g PiArewo+ID4gKyAgICBpbnQgaTsKPiA+ICsgICAgaW50IGJpdHMgPSAwOwo+ID4gKyAgICB1bnNp Z25lZCB0b3BiaXQgPSAxLCBtYXh2YWwgPSAxOwo+ID4gKyAgICB1aW50NjRfdCBwYml0cyA9IDA7 Cj4gPiArCj4gPiArICAgIGlmICghdmFsKyspIHsKPiA+ICsgICAgICAgIHB1dF9iaXRzKHBiLCAx LCAxKTsKPiA+ICsgICAgICAgIHJldHVybjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICB3aGls ZSAodmFsID4gbWF4dmFsKSB7Cj4gPiArICAgICAgICB0b3BiaXQgPDw9IDE7Cj4gPiArICAgICAg ICBtYXh2YWwgPDw9IDE7Cj4gPiArICAgICAgICBtYXh2YWwgfD0gIDE7Cj4gPiArICAgIH0KPiA+ ICsKPiA+ICsgICAgYml0cyA9IGZmX2xvZzIodG9wYml0KTsKPiA+ICsKPiA+ICsgICAgZm9yIChp ID0gMDsgaSA8IGJpdHM7IGkrKykgewo+ID4gKyAgICAgICAgdG9wYml0ID4+PSAxOwo+ID4gKyAg ICAgICAgYXZfYXNzZXJ0MihwYml0cyA8PSBVSU5UNjRfTUFYPj4zKTsKPiA+ICsgICAgICAgIHBi aXRzIDw8PSAyOwo+ID4gKyAgICAgICAgaWYgKHZhbCAmIHRvcGJpdCkKPiA+ICsgICAgICAgICAg ICBwYml0cyB8PSAweDE7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcHV0X2JpdHM2NChwYiwg Yml0cyoyICsgMSwgKHBiaXRzIDw8IDEpIHwgMSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bmxpbmUgaW50IGNvdW50X3ZjMl91ZV91aW50KHVpbnQzMl90IHZhbCkKPiA+ICt7Cj4gPiArICAg IGludCB0b3BiaXQgPSAxLCBtYXh2YWwgPSAxOwo+ID4gKwo+ID4gKyAgICBpZiAoIXZhbCsrKQo+ ID4gKyAgICAgICAgcmV0dXJuIDE7Cj4gPiArCj4gPiArICAgIHdoaWxlICh2YWwgPiBtYXh2YWwp IHsKPiA+ICsgICAgICAgIHRvcGJpdCA8PD0gMTsKPiA+ICsgICAgICAgIG1heHZhbCA8PD0gMTsK PiA+ICsgICAgICAgIG1heHZhbCB8PSAgMTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1 cm4gZmZfbG9nMih0b3BiaXQpKjIgKyAxOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGZmX3ZjMl9p bml0X3F1YW50X21hdHJpeChWQzJFbmNDb250ZXh0ICpzKTsKPiA+ICsKPiA+ICt2b2lkIGZmX3Zj Ml9lbmNvZGVfcGFyc2VfaW5mbyhWQzJFbmNDb250ZXh0ICpzLCBlbnVtIERpcmFjUGFyc2VDb2Rl cwo+IHBjb2RlKTsKPiA+ICsKPiA+ICt2b2lkIGZmX3ZjMl9lbmNvZGVfc2VxX2hlYWRlcihWQzJF bmNDb250ZXh0ICpzKTsKPiA+ICsKPiA+ICt2b2lkIGZmX3ZjMl9lbmNvZGVfcGljdHVyZV9zdGFy dChWQzJFbmNDb250ZXh0ICpzKTsKPiA+ICsKPiA+ICsjZW5kaWYKPgo+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxt YW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh Ym92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBl Zy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpU byB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K