Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wUubO-001X9h-2B for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Jun 2026 23:02:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wUubM-003lYX-0W for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Jun 2026 23:02:20 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wUubL-003lYO-20 for pgsql-hackers@lists.postgresql.org; Wed, 03 Jun 2026 23:02:19 +0000 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wUubI-000000018JK-0koL for pgsql-hackers@postgresql.org; Wed, 03 Jun 2026 23:02:18 +0000 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-43d3427401fso110370fac.0 for ; Wed, 03 Jun 2026 16:02:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20251104.gappssmtp.com; s=20251104; t=1780527734; x=1781132534; darn=postgresql.org; h=in-reply-to:autocrypt:content-language:from:references:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=0YiI9Ls/DKF+xgxou5melsShzBYncT1Ao3ZsOr3ml+Q=; b=Z153mCfOZ2hH+6xR1WyH4EYsGxr3xVc0y5VWBeBRHczSWVOOITBcd7lGSgDfSctws7 yhYq05LTh4wBCSjy0iKvh0x+0Zk6h0dIMn13mcaXI1BWvjggkct+qSl/fOTKbvx+IUaj KiQVm9gSVMQrl2spuBPzdF+DxI7+Yby0KLhfstdt9k2K+xcq6ZD3pbBOqImBsh63MWlr viPWZbP6a2wyj47juFmHjahzYcbyDr81kSm+YwMBD4dVD8ZVNtzlRwPjITpUt7Qzlsod W0sLPcHTvY98g3vObYFyrNXm/JKTQhDIAk8Qd3CF5lSpSzzYBQdDFS+T47DriW7Jvf4x /Ybw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780527734; x=1781132534; h=in-reply-to:autocrypt:content-language:from:references:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=0YiI9Ls/DKF+xgxou5melsShzBYncT1Ao3ZsOr3ml+Q=; b=Wv57vUuABalvitgzgD0lGueH1Q4TnTILMJZeIBpUixQQAzR+No+QvwdHxBJzjVStCJ WbQ+aUuqJy5M64R5i/ZgL6s8tqe9MMJAPeMuCvEyXDcuiKmCHfmbKp4Dct5C5pldab7b ZANC+yXBtUmf4Qf4/Lt7iKxCi9m8YNz+mhzcwxSRcfbwVb6PG+uaAuowJPgXNwY8FDlw UscBzMsgn3EgcU9jTPUuX3UPBPDH8N0DfwAQtnIwhYpsZVHHg8Y3XrrzIezoOO2UdUi9 qbmU2sCJ04BEx7955ZdyuxeTqCmoyPut5A3z82vt+5n2dajPwBOKnb8NhF7tFRYWTZGc PN2Q== X-Forwarded-Encrypted: i=1; AFNElJ8oqwKod4TlfuGAhteY77/zRc/iF+Bpm7Rt/n+Lguk9YVpkEQhfeH3tLm4NEf/AtYRKD7dtssn3J2ROJek3@postgresql.org X-Gm-Message-State: AOJu0YwXRZNVZfoWP/TqkX9jsgOivwdQhJpvuE257goLeOLJyVsVeWf4 8E/u2uVRfY3FJF7mMypXrRCNUwVWkJh697X/TfUe+P2xFBJF4wth6UbsQCzduXvuIL4kOUOLyq6 AiDl0 X-Gm-Gg: Acq92OHjB9jBNJcLtsBfKqLHA2uxHR937p8Yegxtgi2b1B+CPthfP/MYOnmuiqP6q/R p7JofFzziZYULl8AhWAZnduXjVxVlRvFsYyOmNRRgJbKVYwLNtbzb9Nq506SF+Q0XkzTMTg13xh yox4Eq9DEiQZ3TMkP7GBRf5dfWGlNWY5b0cVwXWnytiEbPRALHYEZ+zHRBV3RLp4uXxXUO8Y9f4 mA+YKDfhAwb2GVWpIXCka15RiaCTR1v8cZspdu08lVzt9lWijVXEoZL7ShX0Jv6JH8WkJmW+uUs f7WMBiSW/Wl1BPSCf/HNtqbfygm056dfm6VWxGEYx02ZghMGXhctdXms4Ey2gV7MwQFMvAWR03F W+YkYeZ/KVmTEGF+GXW2e5/H1/iQN3wfnUAQhYA7p5vN7P7U7P1j8pA8AAPBwrwtpbeqsQ5UBBG kk4PBVwpsvww9U7q9DNBK7hihKbRVeqQiiNYvv0jkC X-Received: by 2002:a05:6871:6915:b0:43d:3095:a023 with SMTP id 586e51a60fabf-440dbb24d77mr3635515fac.35.1780527733809; Wed, 03 Jun 2026 16:02:13 -0700 (PDT) Received: from ?IPV6:2605:a601:a6b0:500::1cb? ([2605:a601:a6b0:500::1cb]) by smtp.googlemail.com with ESMTPSA id af79cd13be357-9158a3bf5dasm384377985a.36.2026.06.03.16.02.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Jun 2026 16:02:12 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------7QeX0lSEw15zLTDwEHIRMREc" Message-ID: Date: Wed, 3 Jun 2026 19:02:11 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Allow table AMs to define their own reloptions To: Julien Tachoires , pgsql-hackers References: <20250302085641.hmjom5ru3w554t2n@poseidon.home.virt> <20250302132354.ffbfokeq36dp2kss@poseidon.home.virt> <20250329074601.3zgrsozvycthucir@poseidon.home.virt> <20250526110619.oepaf5dbzq3hjuij@poseidon.home.virt> From: Andrew Dunstan Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAlwQTAQgAQQIbAwIX gAIZAQULCQgHAwUVCgkICwUWAgMBAAIeBRYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNGd BQkdEO8nAAoJEJn6f8tZ/DuBq74H/jkTR4Zi3stbw+xC7v2u3QozssK7MYPL2AsVfh7OealS h182fiWXpfvmmAB7WUHbhk9GC2RAOnHI/2d2jgKaMLAHsGYOT0YopTVIwRY43fCw/mK67yxc wmDcX+zyKfLaivNbf5A7QPLNwda98bEAMSJ8Sn652Uc6cA8t3uKGsVzbRBQOoYzjgvBCfSrE 9ql3PDNg0l4BfAqabd2f70ZUm9VAMEPrgv/v2xI7M2XiL4g5BVmqLCOwxLM8RMCotCuoweUr VO43DeBCIDwLxotMJKvGWDjBzQYlU1NPUAtNcz/gN9ITUe1VUGjyvGj4u1lxBOcQQUw7l1+T 5moZ4iZxXzvOwE0ETspYWQEIANGc4zQULOxhbqO2dyD51YhqCNRmm9oKWaqf+wmW4tpDe/VV cxAnNizd4LWCHfzpb5cHAtGkOPePMfzWVf6nvdF7d3eglbtf59+zG7O7llV0xSSoFiieQBsr GvqDInXYX/4mRRXMtyhM353/tixC9RWLs1oofyYmCPPXXY7h9R7en3B8BoVrRFcdzlIY/NFN hFGW/9dkEiGjgna2Rk6e15kln4ZvFBWUg23p93w/pqXcxY6+k/8TEk+C4R+M6w7o2PLGOjdZ +kPiUcw5H85zf/yZJwQXzisXaNduwWB6Vads9YC9dj6kPR1c4VGRqAaYL++LAEOqrlvm2Tvq QqZRtnEAEQEAAcLAfAQYAQgAJgIbDBYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNI2BQkd EODdAAoJEJn6f8tZ/DuBfw0IAKTsfD40teP/pp+bsLLMSxPXUYrrprTj7WFB5v61p6dkpSr/ qXmMlyahdxQFaPmfVgVirB1Vk/kHiWNnnGjfUV9nB2Zg9LI0Xb9/ts3LsUiRWXzG3tkMY6XL vsVOxW4XFRND9l2q+WW93aZ1DZl+fqWfYgMvsusFRhmGFOKTRfKPta2Pkv+AhA24N4+PrR5p bU4k2MO8PAGiK8eaYKGFG1bHKuAvoDoF7WXJ3FHxuWqLnKEt4dfOLm5pAe3zq1Lt6q8azT9i QWGpSAK5vQUWQHBHpiDjdPeqKZ6HiAXIIKfSmb+jrvXBqoP+D6/K7rUjG2aXiRtTIAXms9sm VRu7cmw= In-Reply-To: <20250526110619.oepaf5dbzq3hjuij@poseidon.home.virt> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------7QeX0lSEw15zLTDwEHIRMREc Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2025-05-26 Mo 7:06 AM, Julien Tachoires wrote: > On Sat, Mar 29, 2025 at 08:46:01AM +0100, Julien Tachoires wrote: >> On Sun, Mar 02, 2025 at 02:23:54PM +0100, Julien Tachoires wrote: >>> On Sun, Mar 02, 2025 at 09:56:41AM +0100, Julien Tachoires wrote: >>>> With the help of the new TAM routine 'relation_options', table access >>>> methods can with this patch define their own reloptions >>>> parser/validator. >>>> >>>> These reloptions can be set via the following commands: >>>> 1. CREATE TABLE ... USING table_am >>>> WITH (option1='value1', option2='value2'); >>>> 2. ALTER TABLE ... >>>> SET (option1 'value1', option2 'value2'); >>>> 3. ALTER TABLE ... SET ACCESS METHOD table_am >>>> OPTIONS (option1 'value1', option2 'value2'); >>>> >>>> When changing table's access method, the settings inherited from the >>>> former TAM can be dropped (if not supported by the new TAM) via: DROP >>>> option, or, updated via: SET option 'value'. >>>> >>>> Currently, tables using different TAMs than heap are able to use heap's >>>> reloptions (fillfactor, toast_tuple_target, etc...). With this patch >>>> applied, this is not the case anymore: if the TAM needs to have access >>>> to similar settings to heap ones, they have to explicitly define them. >>>> >>>> The 2nd patch file includes a new test module 'dummy_table_am' which >>>> implements a dummy table access method utilized to exercise TAM >>>> reloptions. This test module is strongly based on what we already have >>>> in 'dummy_index_am'. 'dummy_table_am' provides a complete example of TAM >>>> reloptions definition. >>>> >>>> This work is directly derived from SadhuPrasad's patch here [2]. Others >>>> attempts were posted here [1] and here [3]. >>>> >>>> [1] https://www.postgresql.org/message-id/flat/429fb58fa3218221bb17c7bf9e70e1aa6cfc6b5d.camel%40j-davis.com >>>> [2] https://www.postgresql.org/message-id/flat/CAFF0-CG4KZHdtYHMsonWiXNzj16gWZpduXAn8yF7pDDub+GQMg@mail.gmail.com >>>> [3] https://www.postgresql.org/message-id/flat/AMUA1wBBBxfc3tKRLLdU64rb.1.1683276279979.Hmail.wuhao%40hashdata.cn >>> Please find a new version including minor fixes: 'TAM' terms are >>> replaced by 'table AM' >> Please find a new rebased version. > New rebased version. > This thread seems to have gone dormant, sadly. Here's a fresh attempt I made (with assistance from Claude), before I was aware of the existence of this and other efforts. I think it meets most of the previous objections, and is in line with what we do for Index AMs. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------7QeX0lSEw15zLTDwEHIRMREc Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-Add-amoptions-callback-to-table-access-methods.patch" Content-Disposition: attachment; filename*0="v1-0001-Add-amoptions-callback-to-table-access-methods.patch" Content-Transfer-Encoding: base64 RnJvbSA4YTk2OTE0NmNlY2Y1YzVjMDQ0MDRkMmMxNDBlNGIwN2Y0NTE5YWNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVHVlLCAxMiBNYXkgMjAyNiAwOTowMzozMyAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggdjFdIEFkZCBhbW9wdGlvbnMgY2FsbGJhY2sgdG8gdGFibGUgYWNjZXNzIG1ldGhv ZHMKCkdpdmUgdGFibGUgYWNjZXNzIG1ldGhvZHMgdGhlIHNhbWUgb3B0aW9uLWV4dGVuc2lv biBzdG9yeSB0aGF0IGluZGV4CmFjY2VzcyBtZXRob2RzIGFscmVhZHkgaGF2ZS4KClRhYmxl QW1Sb3V0aW5lIGdldHMgYW4gb3B0aW9uYWwgYW1vcHRpb25zIGZpZWxkIG9mIHR5cGUKYW1v cHRpb25zX2Z1bmN0aW9uIChzYW1lIHNpZ25hdHVyZSBhcyBJbmRleEFtUm91dGluZS5hbW9w dGlvbnMpLgpBIG1hdGNoaW5nIHRhYmxlX3JlbG9wdGlvbnMoKSBlbnRyeSBwb2ludCBkaXNw YXRjaGVzIHRvIGl0OgoKICAgIGJ5dGVhICoKICAgIHRhYmxlX3JlbG9wdGlvbnMoYW1vcHRp b25zX2Z1bmN0aW9uIGFtb3B0aW9ucywgY2hhciByZWxraW5kLAogICAgICAgICAgICAgICAg ICAgICBEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQogICAgewogICAgICAgIGlm IChhbW9wdGlvbnMgIT0gTlVMTCkKICAgICAgICAgICAgcmV0dXJuIGFtb3B0aW9ucyhyZWxv cHRpb25zLCB2YWxpZGF0ZSk7CiAgICAgICAgcmV0dXJuIGhlYXBfcmVsb3B0aW9ucyhyZWxr aW5kLCByZWxvcHRpb25zLCB2YWxpZGF0ZSk7CiAgICB9CgpXaGVuIGFuIEFNIHN1cHBsaWVz IGFuIGFtb3B0aW9ucyBwYXJzZXIgaXQgb3ducyB0aGUgb3B0aW9uIHNldAplbnRpcmVseTog aXQgbWF5IGFjY2VwdCBhbGwgc3RhbmRhcmQgaGVhcCBvcHRpb25zLCBvbmx5IGEgc3Vic2V0 LCBvcgphZGQgaXRzIG93bjsgdGhlIHJldHVybmVkIGJ5dGVhIGlzIHN0b3JlZCB2ZXJiYXRp bSBpbgpSZWxhdGlvbi0+cmRfb3B0aW9ucywgc28gdGhlIEFNIGRpY3RhdGVzIHRoZSBsYXlv dXQgaXRzIG90aGVyCmNhbGxiYWNrcyByZWFkLiAgV2hlbiBhbW9wdGlvbnMgaXMgTlVMTCB0 aGUgcmVzdWx0IGlzIHRoZSBzdGFuZGFyZApTdGRSZE9wdGlvbnMgbGF5b3V0LCBpZGVudGlj YWwgdG8gdG9kYXkuCgpEZWZpbmVSZWxhdGlvbiBhbmQgQVRFeGVjU2V0UmVsT3B0aW9ucyBh cmUgdXBkYXRlZCB0byBjYWxsCnRhYmxlX3JlbG9wdGlvbnMoKSBmb3IgUkVMS0lORF9SRUxB VElPTiBhbmQgUkVMS0lORF9NQVRWSUVXLiAgQXQKQ1JFQVRFIFRBQkxFIHRoZSBBTSBpcyBy ZXNvbHZlZCBlYXJseSAoZXhwbGljaXQgVVNJTkcgY2xhdXNlLApwYXJ0aXRpb24gcGFyZW50 LCBvciBkZWZhdWx0X3RhYmxlX2FjY2Vzc19tZXRob2QpIHNvIGl0cyBhbW9wdGlvbnMKY2Fu IGJlIGNvbnN1bHRlZCBkdXJpbmcgcmVsb3B0aW9uIHZhbGlkYXRpb247IGF0IEFMVEVSIFRB QkxFIFNFVAp0aGUgQU0gaXMgcmVhZCBmcm9tIHJlbC0+cmRfdGFibGVhbSwgd2l0aCBvbmUg dHdpc3Q6IGlmIFNFVCBBQ0NFU1MKTUVUSE9EIGlzIHF1ZXVlZCBpbiB0aGUgc2FtZSBzdGF0 ZW1lbnQsIHRoZSBuZXcgQU0ncyBwYXJzZXIgaXMgdXNlZApzbyB0aGF0IHVzZXJzIGNhbiB3 cml0ZQogICAgQUxURVIgVEFCTEUgdCBTRVQgQUNDRVNTIE1FVEhPRCB4LCBTRVQgKGZvbyA9 IGJhcikKd2hlcmUgZm9vIGlzIHJlY29nbmlzZWQgYnkgeCBidXQgbm90IGJ5IHRoZSBjdXJy ZW50IEFNLgpSZWxhdGlvblBhcnNlUmVsT3B0aW9ucyBhbmQgZXh0cmFjdFJlbE9wdGlvbnMg YXJlIGxpa2V3aXNlIHJvdXRlZAp0aHJvdWdoIHRhYmxlX3JlbG9wdGlvbnMgd2hlbiBhIHRh YmxlIHJlbGF0aW9uIGlzIG9wZW5lZCwgc28gQU1zIHNlZQp0aGVpciBvd24gcGFyc2VkIHN0 cnVjdCBpbiByZF9vcHRpb25zLgoKQUxURVIgVEFCTEUgLi4uIFNFVCBBQ0NFU1MgTUVUSE9E IGFsc28gcnVucyBhIGZpbmFsIHJlbG9wdGlvbgpyZXZhbGlkYXRpb24gYWZ0ZXIgYWxsIHBo YXNlLTIgc3ViY29tbWFuZHMgaGF2ZSBjb21taXR0ZWQ6IHRoZQpyZWxhdGlvbidzIHJlc3Vs dGluZyByZWxvcHRpb25zIGFyZSBjaGVja2VkIGFnYWluc3QgdGhlIG5ldyBBTSdzCnBhcnNl ciBzbyB0aGF0IHByZS1leGlzdGluZyBvcHRpb25zIHRoZSBuZXcgQU0gZG9lcyBub3QgcmVj b2duaXNlCmZhaWwgdGhlIHN0YXRlbWVudCB3aXRoIGEgY2xlYXIgbWVzc2FnZSByYXRoZXIg dGhhbiBiZWluZyBzaWxlbnRseQpkcm9wcGVkIGF0IHRoZSBuZXh0IHJlbGNhY2hlIGxvYWQu ICBVc2VycyBjYW4gY2xlYXIgc3VjaCBvcHRpb25zIGluCnRoZSBzYW1lIHN0YXRlbWVudCwg ZS5nLgogICAgQUxURVIgVEFCTEUgdCBTRVQgQUNDRVNTIE1FVEhPRCB4LCBSRVNFVCAoZmls bGZhY3Rvcik7CgpCZWNhdXNlIGFuIEFNIHRoYXQgc3VwcGxpZXMgYW1vcHRpb25zIG93bnMg aXRzIHJkX29wdGlvbnMgbGF5b3V0LApjb3JlIG1hY3JvcyB0aGF0IHByZXZpb3VzbHkgYXNz dW1lZCByZF9vcHRpb25zIHdhcyBhbHdheXMKU3RkUmRPcHRpb25zIChSZWxhdGlvbkdldEZp bGxGYWN0b3IsIFJlbGF0aW9uR2V0VG9hc3RUdXBsZVRhcmdldCwKUmVsYXRpb25Jc1VzZWRB c0NhdGFsb2dUYWJsZSwgUmVsYXRpb25HZXRQYXJhbGxlbFdvcmtlcnMpIG5vdyBnYXRlCm9u IGEgbmV3IGhlbHBlciBSZWxhdGlvbkhhc1N0ZFJkT3B0aW9ucygpLiAgVGhlIHNhbWUgZ2F0 aW5nIGlzCmFwcGxpZWQgdG8gdGhlIGRpcmVjdCAoU3RkUmRPcHRpb25zICopIGNhc3RzIGlu IHZhY3V1bS5jIGFuZAppbmRleC5jIHNvIGEgY3VzdG9tIGxheW91dCBpcyBuZXZlciByZWlu dGVycHJldGVkIGFzIFN0ZFJkT3B0aW9ucy4KCkhlYXAgcmVnaXN0ZXJzIG5vIGFtb3B0aW9u cyAodGhlIGZpZWxkIGlzIE5VTEwpLCBzbyBpdHMgYmVoYXZpb3VyIGlzCnVuY2hhbmdlZC4K CkEgY29tcGFuaW9uIGhlbHBlciwgYWRkX3JlbG9wdGlvbl90b19raW5kKG5hbWUsIGtpbmQp LCBleHRlbmRzIGFuCmV4aXN0aW5nIHJlbG9wdGlvbiByZWdpc3RyYXRpb24gd2l0aCBhbiBh ZGRpdGlvbmFsIGtpbmQgYml0OgoKICAgIHZvaWQgYWRkX3JlbG9wdGlvbl90b19raW5kKGNv bnN0IGNoYXIgKm5hbWUsIHJlbG9wdF9raW5kIGtpbmQpOwoKRXh0ZW5zaW9ucyB0aGF0IHdh bnQgdGhlaXIgQU0tc3BlY2lmaWMgcGFyc2VyIHRvIGFjY2VwdCBzdGFuZGFyZApvcHRpb25z IChmaWxsZmFjdG9yLCBwYXJhbGxlbF93b3JrZXJzLCBhdXRvdmFjdXVtXyosIHZhY3V1bV90 cnVuY2F0ZSkKdGhhdCBjb3JlIHJlZ2lzdGVycyBvbmx5IGZvciBSRUxPUFRfS0lORF9IRUFQ IGNhbiBub3cgY2FsbCB0aGlzIG9uY2UKcGVyIG9wdGlvbiBpbiBfUEdfaW5pdCBpbnN0ZWFk IG9mIGR1cGxpY2F0aW5nIGVhY2ggZGVmaW5pdGlvbiB1bmRlcgp0aGUgbmV3IGtpbmQuICBF cnJvcnMgaWYgbm8gb3B0aW9uIHdpdGggdGhhdCBuYW1lIGhhcyBiZWVuCnJlZ2lzdGVyZWQu CgpBIG5ldyB0ZXN0IG1vZHVsZSBzcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtIGRl bW9uc3RyYXRlcyB0aGUKQVBJOiBpdCB3cmFwcyB0aGUgaGVhcCBBTSBhbmQgb25seSBvdmVy cmlkZXMgYW1vcHRpb25zLCBzbyB0aGUKcmVsYXRpb24gYmVoYXZlcyBhcyBhIGhlYXAgdGFi bGUgYnV0IGFjY2VwdHMgYSBjdXN0b20gcmVsb3B0aW9uIHNldC4KVGhlIGFjY29tcGFueWlu ZyByZWdyZXNzIHRlc3QgZXhlcmNpc2VzIENSRUFURS9BTFRFUi9SRVNFVApyb3VuZC10cmlw cywgU0VUIEFDQ0VTUyBNRVRIT0QgcmV2YWxpZGF0aW9uIChib3RoIHRoZQoib3B0aW9ucy1p bmNvbXBhdGlibGUtd2l0aC1uZXctQU0iIGZhaWx1cmUgcGF0aCBhbmQgdGhlCiJSRVNFVC1p bi1zYW1lLXN0YXRlbWVudCIgc3VjY2VzcyBwYXRoKSwgYW5kIHBhcnRpdGlvbmVkLXRhYmxl CmluaGVyaXRhbmNlIG9mIGFuIEFNLXNwZWNpZmljIG9wdGlvbiBzZXQuCgpUb2dldGhlciB0 aGUgdHdvIGFkZGl0aW9ucyBhcmUgZXhhY3RseSB0aGUgc3VyZmFjZSBhbiBleHRlbnNpb24K dGFibGUgQU0gbmVlZHMgdG8gcmVnaXN0ZXIgaXRzIG93biByZWxvcHRpb25zIGluIGl0cyBv d24KUkVMT1BUX0tJTkRfKiBuYW1lc3BhY2UgLS0gQU0tc3BlY2lmaWMgb3B0aW9ucyBubyBs b25nZXIgaGF2ZSB0bwpwb2xsdXRlIFN0ZFJkT3B0aW9ucyAvIFJFTE9QVF9LSU5EX0hFQVAg dG8gYmUgcGFyc2VhYmxlLgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dt bCAgICAgICAgICAgICB8ICAxOSArKwogZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCAgICAg ICAgICAgICAgICAgICAgIHwgIDY3ICsrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21t b24vcmVsb3B0aW9ucy5jICAgICAgICB8ICA4NyArKysrKysrKy0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgMTcwICsrKysrKysrKysrKysr KysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgICAgICAgICAgICAgICAgIHwg ICA3ICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAg fCAgIDQgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggICAgICAgICAgICAg ICB8ICAgMyArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAg ICAgfCAgMzIgKysrKwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggICAgICAgICAgICAgICAg ICAgICAgIHwgIDI1ICsrLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vTWFr ZWZpbGUgICAgICB8ICAyMCArKysKIHNyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW0v UkVBRE1FICAgICAgICB8ICAyMSArKysKIC4uLi9kdW1teV90YWJsZV9hbS9kdW1teV90YWJs ZV9hbS0tMS4wLnNxbCAgICB8ICAxMyArKwogLi4uL21vZHVsZXMvZHVtbXlfdGFibGVfYW0v ZHVtbXlfdGFibGVfYW0uYyAgIHwgMTY2ICsrKysrKysrKysrKysrKysrCiAuLi4vZHVtbXlf dGFibGVfYW0vZHVtbXlfdGFibGVfYW0uY29udHJvbCAgICAgfCAgIDUgKwogLi4uL2R1bW15 X3RhYmxlX2FtL2V4cGVjdGVkL3JlbG9wdGlvbnMub3V0ICAgIHwgMTQ2ICsrKysrKysrKysr KysrKwogc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9tZXNvbi5idWlsZCAgIHwg IDMzICsrKysKIC4uLi9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL3NxbC9yZWxvcHRpb25zLnNx bCB8ICA4OSArKysrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAg ICAgICAgICAgICB8ICAgMSArCiAyMCBmaWxlcyBjaGFuZ2VkLCA4OTggaW5zZXJ0aW9ucygr KSwgMTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy9kdW1teV90YWJsZV9hbS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vUkVBRE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9kdW1teV90YWJsZV9hbS0tMS4wLnNxbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vZHVt bXlfdGFibGVfYW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvZHVt bXlfdGFibGVfYW0vZHVtbXlfdGFibGVfYW0uY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vZXhwZWN0ZWQvcmVsb3B0aW9ucy5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2Ft L21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9kdW1t eV90YWJsZV9hbS9zcWwvcmVsb3B0aW9ucy5zcWwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxl LnNnbWwKaW5kZXggNDUzMzk1YzVjNzMuLjNkMTIzZGMxN2M4IDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9h bHRlcl90YWJsZS5zZ21sCkBAIC04MDMsNiArODAzLDI1IEBAIFdJVEggKCBNT0RVTFVTIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2Vh YmxlPiwgUkVNCiAgICAgICBjYXVzaW5nIGZ1dHVyZSBwYXJ0aXRpb25zIHRvIGRlZmF1bHQg dG8KICAgICAgIDx2YXJuYW1lPmRlZmF1bHRfdGFibGVfYWNjZXNzX21ldGhvZDwvdmFybmFt ZT4uCiAgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUgbmV3IGFjY2VzcyBt ZXRob2QgbXVzdCBhY2NlcHQgZXZlcnkgc3RvcmFnZSBwYXJhbWV0ZXIKKyAgICAgIGN1cnJl bnRseSBzZXQgb24gdGhlIHRhYmxlLiAgQW4gYWNjZXNzIG1ldGhvZCBtYXkgZGVmaW5lIGl0 cyBvd24KKyAgICAgIHNldCBvZiBwYXJhbWV0ZXJzLCBzbyBhIHBhcmFtZXRlciB0aGF0IHdh cyBsZWdhbCB1bmRlciB0aGUgb2xkCisgICAgICBhY2Nlc3MgbWV0aG9kIGlzIG5vdCBuZWNl c3NhcmlseSByZWNvZ25pemVkIGJ5IHRoZSBuZXcgb25lOyBpZiBhbnkKKyAgICAgIHN1Y2gg cGFyYW1ldGVyIHJlbWFpbnMsIDxjb21tYW5kPkFMVEVSIFRBQkxFPC9jb21tYW5kPiByYWlz ZXMgYW4KKyAgICAgIGVycm9yIHJhdGhlciB0aGFuIHNpbGVudGx5IGRyb3BwaW5nIHRoZSB2 YWx1ZS4gIFRoZSB1bndhbnRlZAorICAgICAgcGFyYW1ldGVycyBjYW4gYmUgY2xlYXJlZCBp biB0aGUgc2FtZSBzdGF0ZW1lbnQsIGZvciBleGFtcGxlOgorPHByb2dyYW1saXN0aW5nPgor QUxURVIgVEFCTEUgbWVhc3VyZW1lbnQKKyAgICBTRVQgQUNDRVNTIE1FVEhPRCBjb2x1bW5h ciwKKyAgICBSRVNFVCAoZmlsbGZhY3Rvcik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICAg VmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQgb25jZSwgYWZ0ZXIgYWxsIHN0b3JhZ2UtcGFyYW1l dGVyCisgICAgICBzdWItY29tbWFuZHMgaW4gdGhlIHN0YXRlbWVudCBoYXZlIGJlZW4gYXBw bGllZCwgc28gdGhlIG9yZGVyIG9mCisgICAgICA8bGl0ZXJhbD5TRVQ8L2xpdGVyYWw+LCA8 bGl0ZXJhbD5SRVNFVDwvbGl0ZXJhbD4sIGFuZAorICAgICAgPGxpdGVyYWw+U0VUIEFDQ0VT UyBNRVRIT0Q8L2xpdGVyYWw+IHdpdGhpbiB0aGUgc2FtZQorICAgICAgPGNvbW1hbmQ+QUxU RVIgVEFCTEU8L2NvbW1hbmQ+IGRvZXMgbm90IG1hdHRlci4KKyAgICAgPC9wYXJhPgogICAg IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIApkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3RhYmxlYW0uc2dtbCBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKaW5kZXgg OWNjZjViNzM5ZWQuLmQ0N2MxMjE3N2FiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvdGFi bGVhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKQEAgLTE1Miw0ICsx NTIsNzEgQEAgbXlfdGFibGVhbV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAgIGl0cyBp bXBsZW1lbnRhdGlvbi4KICA8L3BhcmE+CiAKKyA8c2VjdDEgaWQ9InRhYmxlYW0tcmVsb3B0 aW9ucyI+CisgIDx0aXRsZT5UYWJsZSBBY2Nlc3MgTWV0aG9kIFN0b3JhZ2UgUGFyYW1ldGVy czwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBBIHRhYmxlIGFjY2VzcyBtZXRob2QgbWF5IGRl ZmluZSBpdHMgb3duIHNldCBvZiBzdG9yYWdlIHBhcmFtZXRlcnMKKyAgIChyZWxvcHRpb25z KSBieSBzdXBwbHlpbmcgYW4gPHN0cnVjdGZpZWxkPmFtb3B0aW9uczwvc3RydWN0ZmllbGQ+ CisgICBjYWxsYmFjayBpbiBpdHMgPHN0cnVjdG5hbWU+VGFibGVBbVJvdXRpbmU8L3N0cnVj dG5hbWU+LiAgVGhlIGNhbGxiYWNrCisgICBoYXMgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIHRo ZSBjb3JyZXNwb25kaW5nIGluZGV4IEFNIGNhbGxiYWNrOyBpdCBpcworICAgaW52b2tlZCBh dCA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IGFuZAorICAgPGNvbW1hbmQ+QUxU RVIgVEFCTEU8L2NvbW1hbmQ+IHRpbWUgdG8gcGFyc2UgYW5kIHZhbGlkYXRlIHRoZSBvcHRp b24KKyAgIHNldCwgYW5kIGF0IHJlbGF0aW9uIG9wZW4gdGltZSAod2l0aCA8bGl0ZXJhbD52 YWxpZGF0ZSA9IGZhbHNlPC9saXRlcmFsPikKKyAgIHRvIGJ1aWxkIHRoZSBpbi1tZW1vcnkg cmVwcmVzZW50YXRpb24gc3RvcmVkIGluCisgICA8c3RydWN0ZmllbGQ+UmVsYXRpb24tJmd0 O3JkX29wdGlvbnM8L3N0cnVjdGZpZWxkPi4gIEFuIEFNIHRoYXQgZG9lcyBub3QKKyAgIHN1 cHBseSBhbiA8c3RydWN0ZmllbGQ+YW1vcHRpb25zPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sg aW5oZXJpdHMgdGhlCisgICBzdGFuZGFyZCBoZWFwIHBhcnNlciBhbmQgdGhlIDxzdHJ1Y3Ru YW1lPlN0ZFJkT3B0aW9uczwvc3RydWN0bmFtZT4KKyAgIGxheW91dC4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgV2hlbiB0aGUgQU0gcHJvdmlkZXMgaXRzIG93biBwYXJzZXIgaXQg b3ducyB0aGUgb3B0aW9uIHNldCBlbnRpcmVseToKKyAgIGl0IG1heSBhY2NlcHQgYWxsIHN0 YW5kYXJkIGhlYXAgb3B0aW9ucywgb25seSBhIHN1YnNldCwgb3IgZGVmaW5lCisgICBwYXJh bWV0ZXJzIG9mIGl0cyBvd24uICBUaGUgYnl0ZWEgcmV0dXJuZWQgZnJvbSB0aGUgY2FsbGJh Y2sgaXMKKyAgIHN0b3JlZCB2ZXJiYXRpbSBpbiA8c3RydWN0ZmllbGQ+cmRfb3B0aW9uczwv c3RydWN0ZmllbGQ+LCBzbyB0aGUgQU0KKyAgIGFsc28gZGljdGF0ZXMgdGhlIGluLW1lbW9y eSBsYXlvdXQgdGhhdCBpdHMgb3RoZXIgY2FsbGJhY2tzIHJlYWQuCisgIDwvcGFyYT4KKwor ICA8cGFyYT4KKyAgIFRoZSBwYXJzZXIgaXMgZXhwZWN0ZWQgdG8gdmFsaWRhdGUgdXNlci1z dXBwbGllZCB2YWx1ZXMsIGJ1dAorICAgPGVtcGhhc2lzPm11c3Qgbm90IHNpbGVudGx5IHJl d3JpdGUgdGhlbTwvZW1waGFzaXM+LiAgSW4gcGFydGljdWxhcgorICAgaXQgbXVzdCBub3Qg Y29lcmNlIG91dC1vZi1yYW5nZSB2YWx1ZXMgdG8gYSBkZWZhdWx0LCBkcm9wIHVua25vd24K KyAgIG9wdGlvbnMgd2hlbiA8bGl0ZXJhbD52YWxpZGF0ZSA9IHRydWU8L2xpdGVyYWw+LCBv ciBzdWJzdGl0dXRlIGEKKyAgIGRpZmZlcmVudCB1bml0OyB0aGUgdXNlciBtdXN0IGJlIGFi bGUgdG8gdmVyaWZ5IHdpdGgKKyAgIDxjb21tYW5kPlNFTEVDVCByZWxvcHRpb25zIEZST00g cGdfY2xhc3M8L2NvbW1hbmQ+IHRoYXQgdGhlIHZhbHVlcworICAgdGhleSBzdXBwbGllZCBh cmUgd2hhdCB0aGUgcmVsYXRpb24gd2lsbCB1c2UuICBPdXQtb2YtcmFuZ2Ugb3IKKyAgIHVu a25vd24gb3B0aW9ucyBzaG91bGQgYmUgcmVwb3J0ZWQgd2l0aAorICAgPGZ1bmN0aW9uPmVy ZXBvcnQoRVJST1IpPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRv IGhvbm91ciBhbiBvcHRpb24gdGhhdCB0aGUgY29yZSBjb2RlIGFscmVhZHkgcmVnaXN0ZXJz IGZvcgorICAgPGxpdGVyYWw+UkVMT1BUX0tJTkRfSEVBUDwvbGl0ZXJhbD4gKGZvciBleGFt cGxlCisgICA8bGl0ZXJhbD5maWxsZmFjdG9yPC9saXRlcmFsPiBvciB0aGUgPGxpdGVyYWw+ YXV0b3ZhY3V1bV8qPC9saXRlcmFsPgorICAgZmFtaWx5KSwgY2FsbCA8ZnVuY3Rpb24+YWRk X3JlbG9wdGlvbl90b19raW5kKCk8L2Z1bmN0aW9uPiBvbmNlIHBlcgorICAgb3B0aW9uIGlu IHRoZSBtb2R1bGUncyA8ZnVuY3Rpb24+X1BHX2luaXQ8L2Z1bmN0aW9uPi4gIFRoaXMgZXh0 ZW5kcworICAgdGhlIGV4aXN0aW5nIHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBBTSdzIG93biBr aW5kIHdpdGhvdXQgZm9yY2luZworICAgdGhlIEFNIHRvIHJlLWRlY2xhcmUgZWFjaCBvcHRp b24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIDxjb21tYW5kPkFMVEVSIFRBQkxFIC4u LiBTRVQgQUNDRVNTIE1FVEhPRDwvY29tbWFuZD4gcmV2YWxpZGF0ZXMgdGhlCisgICByZWxh dGlvbidzIGN1cnJlbnQgc3RvcmFnZSBwYXJhbWV0ZXJzIGFnYWluc3QgdGhlIG5ldyBhY2Nl c3MKKyAgIG1ldGhvZCdzIHBhcnNlciBhZnRlciBhbGwgPGxpdGVyYWw+U0VUPC9saXRlcmFs PiwKKyAgIDxsaXRlcmFsPlJFU0VUPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPlJFUExBQ0U8 L2xpdGVyYWw+CisgICBzdWItY29tbWFuZHMgaW4gdGhlIHNhbWUgc3RhdGVtZW50IGhhdmUg YmVlbiBhcHBsaWVkLiAgQSBwYXJhbWV0ZXIKKyAgIHRoYXQgaXMgbm90IGFjY2VwdGVkIGJ5 IHRoZSBuZXcgQU0gcmFpc2VzIGFuIGVycm9yOyB0aGUgdXNlciBjYW4KKyAgIGNsZWFyIHN1 Y2ggcGFyYW1ldGVycyBpbiB0aGUgc2FtZSBzdGF0ZW1lbnQgKHNlZSA8eHJlZgorICAgbGlu a2VuZD0ic3FsLWFsdGVydGFibGUiLz4pLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBT ZWUgPGZpbGVuYW1lPnNyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW08L2ZpbGVuYW1l PiBmb3IgYQorICAgbWluaW1hbCBleGFtcGxlIHRoYXQgZXhlcmNpc2VzIGJvdGgKKyAgIDxz dHJ1Y3RmaWVsZD5hbW9wdGlvbnM8L3N0cnVjdGZpZWxkPiBhbmQKKyAgIDxmdW5jdGlvbj5h ZGRfcmVsb3B0aW9uX3RvX2tpbmQoKTwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisgPC9zZWN0 MT4KKwogPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi9yZWxvcHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMu YwppbmRleCAzZTgzMmMzNzk3ZS4uODRmNjdlODc2NDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0u aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9k ZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCkBAIC03NDksNiAr NzUwLDQ0IEBAIGFkZF9yZWxvcHRpb25fa2luZCh2b2lkKQogCXJldHVybiAocmVsb3B0X2tp bmQpIGxhc3RfYXNzaWduZWRfa2luZDsKIH0KIAorLyoKKyAqIGFkZF9yZWxvcHRpb25fdG9f a2luZAorICoJCUV4dGVuZCBhbiBhbHJlYWR5LXJlZ2lzdGVyZWQgcmVsb3B0aW9uIHNvIGl0 IGlzIGFsc28gYWNjZXB0ZWQgZm9yCisgKgkJdGhlIGdpdmVuIGtpbmQuCisgKgorICogVXNl ZnVsIGZvciB0YWJsZSBhY2Nlc3MgbWV0aG9kcyB0aGF0IHdhbnQgdGhlaXIgb3duIFJFTE9Q VF9LSU5EXyoKKyAqIHBhcnNlciB0byBhY2NlcHQgc3RhbmRhcmQgb3B0aW9ucyAoZmlsbGZh Y3RvciwgcGFyYWxsZWxfd29ya2VycywKKyAqIGF1dG92YWN1dW1fKiwgZXRjLikgdGhhdCBj b3JlIHJlZ2lzdGVycyBvbmx5IGZvciBSRUxPUFRfS0lORF9IRUFQLgorICogV2l0aG91dCB0 aGlzLCBldmVyeSBBTSB0aGF0IHdhbnRzIHRoZSBzdGFuZGFyZCBvcHRpb24gc2V0IHdvdWxk CisgKiBoYXZlIHRvIHJlLXJlZ2lzdGVyIGVhY2ggb3B0aW9uIHVuZGVyIGl0cyBvd24ga2lu ZC4KKyAqCisgKiAnbmFtZScgbXVzdCBtYXRjaCBhbiBleGlzdGluZyBvcHRpb247ICdraW5k JyBpcyBPUidlZCBpbnRvIHRoYXQKKyAqIG9wdGlvbidzIGtpbmRzIG1hc2suICBFcnJvcnMg aWYgbm8gb3B0aW9uIHdpdGggdGhhdCBuYW1lIGV4aXN0cy4KKyAqLwordm9pZAorYWRkX3Jl bG9wdGlvbl90b19raW5kKGNvbnN0IGNoYXIgKm5hbWUsIHJlbG9wdF9raW5kIGtpbmQpCit7 CisJaW50CQkJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwlpbnQJCQlpOworCisJaWYgKG5l ZWRfaW5pdGlhbGl6YXRpb24pCisJCWluaXRpYWxpemVfcmVsb3B0aW9ucygpOworCisJZm9y IChpID0gMDsgcmVsT3B0c1tpXTsgaSsrKQorCXsKKwkJaWYgKHJlbE9wdHNbaV0tPm5hbWVs ZW4gPT0gbmFtZWxlbiAmJgorCQkJc3RybmNtcChyZWxPcHRzW2ldLT5uYW1lLCBuYW1lLCBu YW1lbGVuKSA9PSAwKQorCQl7CisJCQlyZWxPcHRzW2ldLT5raW5kcyB8PSBraW5kOworCQkJ cmV0dXJuOworCQl9CisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkgZXJybXNnKCJyZWxvcHRpb24gXCIlc1wiIGRv ZXMgbm90IGV4aXN0IiwgbmFtZSkpKTsKK30KKwogLyoKICAqIGFkZF9yZWxvcHRpb24KICAq CQlBZGQgYW4gYWxyZWFkeS1jcmVhdGVkIGN1c3RvbSByZWxvcHRpb24gdG8gdGhlIGxpc3Qs IGFuZCByZWNvbXB1dGUgdGhlCkBAIC0xNTE2LDggKzE1NTUsMTEgQEAgZXh0cmFjdFJlbE9w dGlvbnMoSGVhcFR1cGxlIHR1cGxlLCBUdXBsZURlc2MgdHVwZGVzYywKIAlzd2l0Y2ggKGNs YXNzRm9ybS0+cmVsa2luZCkKIAl7CiAJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKLQkJY2Fz ZSBSRUxLSU5EX1RPQVNUVkFMVUU6CiAJCWNhc2UgUkVMS0lORF9NQVRWSUVXOgorCQkJb3B0 aW9ucyA9IHRhYmxlX3JlbG9wdGlvbnMoYW1vcHRpb25zLCBjbGFzc0Zvcm0tPnJlbGtpbmQs CisJCQkJCQkJCQkgICBkYXR1bSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lO RF9UT0FTVFZBTFVFOgogCQkJb3B0aW9ucyA9IGhlYXBfcmVsb3B0aW9ucyhjbGFzc0Zvcm0t PnJlbGtpbmQsIGRhdHVtLCBmYWxzZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRUxLSU5EX1BB UlRJVElPTkVEX1RBQkxFOgpAQCAtMjE4Nyw2ICsyMjI5LDQ5IEBAIGhlYXBfcmVsb3B0aW9u cyhjaGFyIHJlbGtpbmQsIERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCiAJfQog fQogCisvKgorICogUGFyc2Ugb3B0aW9ucyBmb3IgYSB0YWJsZSByZWxhdGlvbiwgZGlzcGF0 Y2hpbmcgdG8gdGhlIGFjY2VzcyBtZXRob2QncworICogb3duIG9wdGlvbiBwYXJzZXIgd2hl biBpdCBzdXBwbGllcyBvbmUuCisgKgorICoJYW1vcHRpb25zCXRoZSB0YWJsZSBBTSdzIG9w dGlvbiBwYXJzZXIsIG9yIE5VTEwgdG8gZmFsbCBiYWNrIHRvIHRoZQorICoJCQkJc3RhbmRh cmQgaGVhcCBwYXJzZXIgZm9yIHRoaXMgcmVsa2luZC4KKyAqCXJlbGtpbmQJCXRoZSByZWxh dGlvbidzIGtpbmQuCisgKglyZWxvcHRpb25zCW9wdGlvbnMgYXMgYSB0ZXh0W10gZGF0dW0u CisgKgl2YWxpZGF0ZQllcnJvciBmbGFnIGZvciB1bmtub3duIG9wdGlvbnMgb3IgYmFkIHZh bHVlcy4KKyAqCisgKiBXaGVuIGFtb3B0aW9ucyBpcyBub24tTlVMTCB0aGUgQU0gb3ducyB0 aGUgb3B0aW9uIHNldDogaXQgbWF5IGFjY2VwdAorICogYWxsIHN0YW5kYXJkIGhlYXAgb3B0 aW9ucywgb25seSBhIHN1YnNldCwgb3IgZGVmaW5lIGl0cyBvd24uICBUaGUKKyAqIHJldHVy bmVkIGJ5dGVhIGlzIGxhaWQgb3V0IGFzIHRoZSBBTSBkaWN0YXRlcyAoaXQgaXMgc3RvcmVk IHZlcmJhdGltCisgKiBpbiBSZWxhdGlvbi0+cmRfb3B0aW9ucykuICBXaGVuIGFtb3B0aW9u cyBpcyBOVUxMIHRoZSByZXN1bHQgaXMgdGhlCisgKiBzdGFuZGFyZCBTdGRSZE9wdGlvbnMg bGF5b3V0LgorICovCitieXRlYSAqCit0YWJsZV9yZWxvcHRpb25zKGFtb3B0aW9uc19mdW5j dGlvbiBhbW9wdGlvbnMsIGNoYXIgcmVsa2luZCwKKwkJCQkgRGF0dW0gcmVsb3B0aW9ucywg Ym9vbCB2YWxpZGF0ZSkKK3sKKwlpZiAoYW1vcHRpb25zICE9IE5VTEwpCisJCXJldHVybiBh bW9wdGlvbnMocmVsb3B0aW9ucywgdmFsaWRhdGUpOworCXJldHVybiBoZWFwX3JlbG9wdGlv bnMocmVsa2luZCwgcmVsb3B0aW9ucywgdmFsaWRhdGUpOworfQorCisvKgorICogUmV0dXJu cyB0cnVlIHdoZW4gdGhlIHJlbGF0aW9uJ3MgcmRfb3B0aW9ucyBidWZmZXIgaXMgbGFpZCBv dXQgYXMKKyAqIFN0ZFJkT3B0aW9ucy4gIFVzZWQgYnkgdGhlIHJlbC5oIGFjY2Vzc29yIG1h Y3JvcyAoUmVsYXRpb25HZXRGaWxsRmFjdG9yLAorICogUmVsYXRpb25Jc1VzZWRBc0NhdGFs b2dUYWJsZSwgLi4uKSB0byBnYXRlIFN0ZFJkT3B0aW9ucyBjYXN0cyBzbyB0aGF0IGEKKyAq IHRhYmxlIGFjY2VzcyBtZXRob2Qgd2hpY2ggc3VwcGxpZXMgaXRzIG93biBhbW9wdGlvbnMg Y2FsbGJhY2sgKGFuZAorICogdGhlcmVmb3JlIG93bnMgdGhlIHJkX29wdGlvbnMgbGF5b3V0 KSBkb2VzIG5vdCBoYXZlIGl0cyBieXRlcworICogbWlzaW50ZXJwcmV0ZWQuCisgKi8KK2Jv b2wKK1JlbGF0aW9uSGFzU3RkUmRPcHRpb25zKFJlbGF0aW9uIHJlbGF0aW9uKQoreworCWlm IChyZWxhdGlvbi0+cmRfb3B0aW9ucyA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisJaWYg KHJlbGF0aW9uLT5yZF90YWJsZWFtID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1 cm4gcmVsYXRpb24tPnJkX3RhYmxlYW0tPmFtb3B0aW9ucyA9PSBOVUxMOworfQorCiAKIC8q CiAgKiBQYXJzZSBvcHRpb25zIGZvciBpbmRleGVzLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4 IDk0MDdjMzU3ZjI3Li5iMDhhYTExYjIwNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtMjg3 MSw3ICsyODcxLDggQEAgaW5kZXhfdXBkYXRlX3N0YXRzKFJlbGF0aW9uIHJlbCwKIAl7CiAJ CWlmIChBdXRvVmFjdXVtaW5nQWN0aXZlKCkpCiAJCXsKLQkJCVN0ZFJkT3B0aW9ucyAqb3B0 aW9ucyA9IChTdGRSZE9wdGlvbnMgKikgcmVsLT5yZF9vcHRpb25zOworCQkJU3RkUmRPcHRp b25zICpvcHRpb25zID0gUmVsYXRpb25IYXNTdGRSZE9wdGlvbnMocmVsKSA/CisJCQkJKFN0 ZFJkT3B0aW9ucyAqKSByZWwtPnJkX29wdGlvbnMgOiBOVUxMOwogCiAJCQlpZiAob3B0aW9u cyAhPSBOVUxMICYmICFvcHRpb25zLT5hdXRvdmFjdXVtLmVuYWJsZWQpCiAJCQkJdXBkYXRl X3N0YXRzID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IGVlYzA5 YmExZGVkLi4yNGU4Yjc4N2YwYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAg LTY5Myw5ICs2OTMsMTEgQEAgc3RhdGljIHZvaWQgQVRQcmVwU2V0VGFibGVTcGFjZShBbHRl cmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJY29uc3QgY2hhciAq dGFibGVzcGFjZW5hbWUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIHN0YXRpYyB2b2lkIEFURXhl Y1NldFRhYmxlU3BhY2UoT2lkIHRhYmxlT2lkLCBPaWQgbmV3VGFibGVTcGFjZSwgTE9DS01P REUgbG9ja21vZGUpOwogc3RhdGljIHZvaWQgQVRFeGVjU2V0VGFibGVTcGFjZU5vU3RvcmFn ZShSZWxhdGlvbiByZWwsIE9pZCBuZXdUYWJsZVNwYWNlKTsKK3N0YXRpYyB2b2lkIEFUVmFs aWRhdGVBY2Nlc3NNZXRob2RPcHRpb25zKExpc3QgKip3cXVldWUpOwogc3RhdGljIHZvaWQg QVRFeGVjU2V0UmVsT3B0aW9ucyhSZWxhdGlvbiByZWwsIExpc3QgKmRlZkxpc3QsCiAJCQkJ CQkJCUFsdGVyVGFibGVUeXBlIG9wZXJhdGlvbiwKLQkJCQkJCQkJTE9DS01PREUgbG9ja21v ZGUpOworCQkJCQkJCQlMT0NLTU9ERSBsb2NrbW9kZSwKKwkJCQkJCQkJT2lkIG5ld0FjY2Vz c01ldGhvZElkKTsKIHN0YXRpYyB2b2lkIEFURXhlY0VuYWJsZURpc2FibGVUcmlnZ2VyKFJl bGF0aW9uIHJlbCwgY29uc3QgY2hhciAqdHJpZ25hbWUsCiAJCQkJCQkJCQkgICBjaGFyIGZp cmVzX3doZW4sIGJvb2wgc2tpcF9zeXN0ZW0sIGJvb2wgcmVjdXJzZSwKIAkJCQkJCQkJCSAg IExPQ0tNT0RFIGxvY2ttb2RlKTsKQEAgLTk2MSw2ICs5NjMsNDEgQEAgRGVmaW5lUmVsYXRp b24oQ3JlYXRlU3RtdCAqc3RtdCwgY2hhciByZWxraW5kLCBPaWQgb3duZXJJZCwKIAkJY2Fz ZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgogCQkJKHZvaWQpIHBhcnRpdGlvbmVkX3Rh YmxlX3JlbG9wdGlvbnMocmVsb3B0aW9ucywgdHJ1ZSk7CiAJCQlicmVhazsKKwkJY2FzZSBS RUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJTkRfTUFUVklFVzoKKwkJCXsKKwkJCQlh bW9wdGlvbnNfZnVuY3Rpb24gYW1vcHRpb25zID0gTlVMTDsKKwkJCQlPaWQJCQlhbW9pZCA9 IEludmFsaWRPaWQ7CisKKwkJCQkvKgorCQkJCSAqIFJlc29sdmUgdGhlIHRhYmxlIEFNIHNv IGl0cyBvcHRpb24gcGFyc2VyIGNhbiB2YWxpZGF0ZQorCQkJCSAqIEFNLXNwZWNpZmljIHJl bG9wdGlvbnMuICBBbiBBTSB0aGF0IGRvZXMgbm90IHJlZ2lzdGVyIGEKKwkJCQkgKiBwYXJz ZXIgZmFsbHMgYmFjayB0byBkZWZhdWx0X3JlbG9wdGlvbnMgZm9yCisJCQkJICogUkVMT1BU X0tJTkRfSEVBUC4KKwkJCQkgKi8KKwkJCQlpZiAoc3RtdC0+YWNjZXNzTWV0aG9kICE9IE5V TEwpCisJCQkJCWFtb2lkID0gZ2V0X3RhYmxlX2FtX29pZChzdG10LT5hY2Nlc3NNZXRob2Qs IGZhbHNlKTsKKwkJCQllbHNlIGlmIChzdG10LT5wYXJ0Ym91bmQgIT0gTlVMTCAmJiBpbmhl cml0T2lkcyAhPSBOSUwpCisJCQkJCWFtb2lkID0gZ2V0X3JlbF9yZWxhbShsaW5pdGlhbF9v aWQoaW5oZXJpdE9pZHMpKTsKKwkJCQllbHNlCisJCQkJCWFtb2lkID0gZ2V0X3RhYmxlX2Ft X29pZChkZWZhdWx0X3RhYmxlX2FjY2Vzc19tZXRob2QsIGZhbHNlKTsKKworCQkJCWlmIChP aWRJc1ZhbGlkKGFtb2lkKSkKKwkJCQl7CisJCQkJCUhlYXBUdXBsZQl0dXBsZTsKKworCQkJ CQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShhbW9p ZCkpOworCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCQkJCXsKKwkJCQkJ CUZvcm1fcGdfYW0JYW1mb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVCh0dXBsZSk7CisK KwkJCQkJCWFtb3B0aW9ucyA9IEdldFRhYmxlQW1Sb3V0aW5lKGFtZm9ybS0+YW1oYW5kbGVy KS0+YW1vcHRpb25zOworCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJCQkJfQor CQkJCX0KKwkJCQkodm9pZCkgdGFibGVfcmVsb3B0aW9ucyhhbW9wdGlvbnMsIHJlbGtpbmQs IHJlbG9wdGlvbnMsIHRydWUpOworCQkJfQorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQko dm9pZCkgaGVhcF9yZWxvcHRpb25zKHJlbGtpbmQsIHJlbG9wdGlvbnMsIHRydWUpOwogCX0K QEAgLTQ5MjQsNiArNDk2MSwxOCBAQCBBVENvbnRyb2xsZXIoQWx0ZXJUYWJsZVN0bXQgKnBh cnNldHJlZSwKIAkvKiBQaGFzZSAyOiB1cGRhdGUgc3lzdGVtIGNhdGFsb2dzICovCiAJQVRS ZXdyaXRlQ2F0YWxvZ3MoJndxdWV1ZSwgbG9ja21vZGUsIGNvbnRleHQpOwogCisJLyoKKwkg KiBBZnRlciBhbGwgcGhhc2UtMiBzdWJjb21tYW5kcyBoYXZlIGNvbW1pdHRlZCBhbnkgU0VU IC8gUkVTRVQgLyBSRVBMQUNFCisJICogb3B0aW9uIGNoYW5nZXMgdG8gcGdfY2xhc3MsIGJ1 dCBiZWZvcmUgYW55IHJld3JpdGUsIGVuc3VyZSB0aGUgZmluYWwKKwkgKiByZWxvcHRpb25z IGFyZSBhY2NlcHRlZCBieSB0aGUgYWNjZXNzIG1ldGhvZCB0aGUgcmVsYXRpb24gd2lsbCB1 c2Ugb25jZQorCSAqIHRoZSBBTFRFUiBUQUJMRSBmaW5pc2hlcy4gIFRoaXMgY2F0Y2hlcyB0 aGUgY2FzZSB3aGVyZSBTRVQgQUNDRVNTCisJICogTUVUSE9EIGNoYW5nZXMgdGhlIEFNIGFu ZCBsZWF2ZXMgcHJlLWV4aXN0aW5nIHJlbG9wdGlvbnMgaW4gcGdfY2xhc3MKKwkgKiB0aGF0 IHRoZSBuZXcgQU0gZG9lcyBub3QgcmVjb2duaXNlOyB3aXRob3V0IHRoaXMgY2hlY2sgdGhl IG5ldyBBTSdzCisJICogb3B0aW9uIHBhcnNlciB3b3VsZCBiZSBjYWxsZWQgd2l0aCB2YWxp ZGF0ZT1mYWxzZSBhdCByZWxjYWNoZSBsb2FkIHRpbWUKKwkgKiBhbmQgc2lsZW50bHkgaWdu b3JlIHRoZW0uCisJICovCisJQVRWYWxpZGF0ZUFjY2Vzc01ldGhvZE9wdGlvbnMoJndxdWV1 ZSk7CisKIAkvKiBQaGFzZSAzOiBzY2FuL3Jld3JpdGUgdGFibGVzIGFzIG5lZWRlZCwgYW5k IHJ1biBhZnRlclN0bXRzICovCiAJQVRSZXdyaXRlVGFibGVzKHBhcnNldHJlZSwgJndxdWV1 ZSwgbG9ja21vZGUsIGNvbnRleHQpOwogfQpAQCAtNTU5NSw3ICs1NjQ0LDE3IEBAIEFURXhl Y0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJCWNhc2UgQVRf U2V0UmVsT3B0aW9uczoJLyogU0VUICguLi4pICovCiAJCWNhc2UgQVRfUmVzZXRSZWxPcHRp b25zOgkvKiBSRVNFVCAoLi4uKSAqLwogCQljYXNlIEFUX1JlcGxhY2VSZWxPcHRpb25zOgkv KiByZXBsYWNlIGVudGlyZSBvcHRpb24gbGlzdCAqLwotCQkJQVRFeGVjU2V0UmVsT3B0aW9u cyhyZWwsIChMaXN0ICopIGNtZC0+ZGVmLCBjbWQtPnN1YnR5cGUsIGxvY2ttb2RlKTsKKwor CQkJLyoKKwkJCSAqIElmIFNFVCBBQ0NFU1MgTUVUSE9EIGlzIHF1ZXVlZCBpbiB0aGUgc2Ft ZSBBTFRFUiBUQUJMRSwgdGhlCisJCQkgKiByZWxvcHRpb25zIGluIHBnX2NsYXNzIHdpbGwg YmUgcGFyc2VkIGJ5IHRoZSBuZXcgQU0gYWZ0ZXIgdGhlCisJCQkgKiBzdGF0ZW1lbnQgZmlu aXNoZXM7IHRlbGwgQVRFeGVjU2V0UmVsT3B0aW9ucyB0byB2YWxpZGF0ZQorCQkJICogYWdh aW5zdCB0aGF0IEFNIHJhdGhlciB0aGFuIHRoZSByZWxhdGlvbidzIGN1cnJlbnQgQU0uICBU aGlzCisJCQkgKiBsZXRzIGEgdXNlciB3cml0ZSBBTFRFUiBUQUJMRSB0IFNFVCBBQ0NFU1Mg TUVUSE9EIHgsIFNFVCAoZm9vID0KKwkJCSAqIGJhcikgd2hlcmUgZm9vIGlzIHJlY29nbmlz ZWQgYnkgeCBidXQgbm90IGJ5IHRoZSBjdXJyZW50IEFNLgorCQkJICovCisJCQlBVEV4ZWNT ZXRSZWxPcHRpb25zKHJlbCwgKExpc3QgKikgY21kLT5kZWYsIGNtZC0+c3VidHlwZSwgbG9j a21vZGUsCisJCQkJCQkJCXRhYi0+Y2hnQWNjZXNzTWV0aG9kID8gdGFiLT5uZXdBY2Nlc3NN ZXRob2QgOiBJbnZhbGlkT2lkKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUX0VuYWJsZVRyaWc6 CQkvKiBFTkFCTEUgVFJJR0dFUiBuYW1lICovCiAJCQlBVEV4ZWNFbmFibGVEaXNhYmxlVHJp Z2dlcihyZWwsIGNtZC0+bmFtZSwKQEAgLTE2ODg1LDEyICsxNjk0NCw5MiBAQCBBVFByZXBT ZXRUYWJsZVNwYWNlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLCBjb25z dCBjaGFyICp0YWJsZXNwYWNlbgogCXRhYi0+bmV3VGFibGVTcGFjZSA9IHRhYmxlc3BhY2VJ ZDsKIH0KIAorLyoKKyAqIFJlLXZhbGlkYXRlIHBnX2NsYXNzLnJlbG9wdGlvbnMgZm9yIGV2 ZXJ5IHdvcmstcXVldWUgZW50cnkgd2hvc2UgYWNjZXNzCisgKiBtZXRob2QgaXMgYmVpbmcg Y2hhbmdlZC4gIENhbGxlZCBiZXR3ZWVuIHBoYXNlIDIgKGNhdGFsb2cgdXBkYXRlcykgYW5k CisgKiBwaGFzZSAzICh0YWJsZSByZXdyaXRlcyk6IFNFVCAvIFJFU0VUIC8gUkVQTEFDRSBz dWJjb21tYW5kcyBoYXZlIGFscmVhZHkKKyAqIGJlZW4gY29tbWl0dGVkIHRvIHBnX2NsYXNz LCBhbmQgdGFiLT5uZXdBY2Nlc3NNZXRob2QgaWRlbnRpZmllcyB0aGUgQU0KKyAqIHRoZSBy ZWxhdGlvbiB3aWxsIHVzZSBvbmNlIHRoZSBBTFRFUiBUQUJMRSBmaW5pc2hlcy4KKyAqCisg KiBUaGUgY2hlY2sgZXhpc3RzIGJlY2F1c2UgcmVsY2FjaGUuYyBjYWxscyB0aGUgQU0ncyBv cHRpb24gcGFyc2VyIHdpdGgKKyAqIHZhbGlkYXRlPWZhbHNlIGF0IHJlbGF0aW9uIG9wZW46 IGFueSBwcmUtZXhpc3RpbmcgcmVsb3B0aW9uIHRoYXQgdGhlCisgKiBuZXcgQU0gZG9lcyBu b3QgcmVjb2duaXNlIHdvdWxkIG90aGVyd2lzZSBiZSBzaWxlbnRseSBkcm9wcGVkIGZyb20g dGhlCisgKiBwYXJzZWQgU3RkUmRPcHRpb25zIC8gQU0tc3BlY2lmaWMgb3B0aW9ucyBzdHJ1 Y3QsIGxlYXZpbmcgdGhlIHVzZXIKKyAqIHVuYWJsZSB0byB0ZWxsIHRoYXQgdGhlIG9wdGlv biBpcyBubyBsb25nZXIgaW4gZWZmZWN0LiAgRmFpbGluZyB0aGUKKyAqIEFMVEVSIFRBQkxF IGhlcmUgd2l0aCBhIGNsZWFyIG1lc3NhZ2UgbGV0cyB0aGUgdXNlciBSRVNFVCB0aGUgb3B0 aW9uCisgKiBpbiB0aGUgc2FtZSBzdGF0ZW1lbnQgYW5kIHJlLXJ1bi4KKyAqLworc3RhdGlj IHZvaWQKK0FUVmFsaWRhdGVBY2Nlc3NNZXRob2RPcHRpb25zKExpc3QgKip3cXVldWUpCit7 CisJTGlzdENlbGwgICAqbHRhYjsKKworCWZvcmVhY2gobHRhYiwgKndxdWV1ZSkKKwl7CisJ CUFsdGVyZWRUYWJsZUluZm8gKnRhYiA9IChBbHRlcmVkVGFibGVJbmZvICopIGxmaXJzdChs dGFiKTsKKwkJSGVhcFR1cGxlCWFtdHVwOworCQlIZWFwVHVwbGUJcmVsdHVwOworCQlGb3Jt X3BnX2FtCWFtZm9ybTsKKwkJRm9ybV9wZ19jbGFzcyByZWxmb3JtOworCQlhbW9wdGlvbnNf ZnVuY3Rpb24gYW1vcHRpb25zOworCQlEYXR1bQkJcmVsb3B0aW9uczsKKwkJYm9vbAkJaXNu dWxsOworCQlPaWQJCQlhbW9pZDsKKworCQlpZiAoIXRhYi0+Y2hnQWNjZXNzTWV0aG9kKQor CQkJY29udGludWU7CisKKwkJLyoKKwkJICogUGFydGl0aW9uZWQgdGFibGVzIG1heSByZXNl dCB0aGUgQU0gdG8gImRlZmF1bHQiIChJbnZhbGlkT2lkKTsgZWFjaAorCQkgKiBwYXJ0aXRp b24gdGhlbiBjaG9vc2VzIGl0cyBvd24gQU0gYXQgY3JlYXRlIHRpbWUsIHNvIHRoZXJlIGlz IG5vCisJCSAqIHBlci1yZWxhdGlvbiBBTSB3aG9zZSBwYXJzZXIgdG8gY29uc3VsdCBoZXJl LgorCQkgKi8KKwkJYW1vaWQgPSB0YWItPm5ld0FjY2Vzc01ldGhvZDsKKwkJaWYgKCFPaWRJ c1ZhbGlkKGFtb2lkKSkKKwkJCWNvbnRpbnVlOworCisJCWFtdHVwID0gU2VhcmNoU3lzQ2Fj aGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKGFtb2lkKSk7CisJCWlmICghSGVhcFR1cGxl SXNWYWxpZChhbXR1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgYWNjZXNzIG1ldGhvZCAldSIsIGFtb2lkKTsKKwkJYW1mb3JtID0gKEZvcm1fcGdfYW0p IEdFVFNUUlVDVChhbXR1cCk7CisJCWFtb3B0aW9ucyA9IEdldFRhYmxlQW1Sb3V0aW5lKGFt Zm9ybS0+YW1oYW5kbGVyKS0+YW1vcHRpb25zOworCQlSZWxlYXNlU3lzQ2FjaGUoYW10dXAp OworCisJCS8qCisJCSAqIElmIHRoZSBuZXcgQU0gaGFzIG5vIG9wdGlvbiBwYXJzZXIgb2Yg aXRzIG93biwgdGFibGVfcmVsb3B0aW9ucworCQkgKiBmYWxscyBiYWNrIHRvIHRoZSBzdGFu ZGFyZCBoZWFwIHBhcnNlciwgd2hpY2ggYWNjZXB0cyB3aGF0ZXZlciB0aGUKKwkJICogb2xk IEFNIGFjY2VwdGVkIChldmVyeSBvdGhlciBBTSBpbiBjb3JlIHVzZXMgdGhlIHNhbWUgU3Rk UmRPcHRpb25zCisJCSAqIHRvZGF5KSwgc28gdGhlcmUgaXMgbm90aGluZyB0byByZS1jaGVj ay4KKwkJICovCisJCWlmIChhbW9wdGlvbnMgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJ CXJlbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0odGFi LT5yZWxpZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmVsdHVwKSkKKwkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIHRhYi0+cmVs aWQpOworCQlyZWxmb3JtID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChyZWx0dXApOwor CQlyZWxvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgcmVsdHVwLAorCQkJCQkJ CQkJIEFudW1fcGdfY2xhc3NfcmVsb3B0aW9ucywgJmlzbnVsbCk7CisJCWlmICghaXNudWxs KQorCQkJKHZvaWQpIHRhYmxlX3JlbG9wdGlvbnMoYW1vcHRpb25zLCByZWxmb3JtLT5yZWxr aW5kLAorCQkJCQkJCQkJcmVsb3B0aW9ucywgdHJ1ZSk7CisJCVJlbGVhc2VTeXNDYWNoZShy ZWx0dXApOworCX0KK30KKwogLyoKICAqIFNldCwgcmVzZXQsIG9yIHJlcGxhY2UgcmVsb3B0 aW9ucy4KKyAqCisgKiBuZXdBY2Nlc3NNZXRob2RJZCwgaWYgdmFsaWQsIG5hbWVzIHRoZSB0 YWJsZSBhY2Nlc3MgbWV0aG9kIHdob3NlIG9wdGlvbgorICogcGFyc2VyIHNob3VsZCB2YWxp ZGF0ZSB0aGUgcmVzdWx0aW5nIHJlbG9wdGlvbnMuICBUaGlzIGlzIHVzZWQgd2hlbiBTRVQK KyAqIEFDQ0VTUyBNRVRIT0QgaXMgcXVldWVkIGluIHRoZSBzYW1lIEFMVEVSIFRBQkxFIHNv IHRoYXQgdGhlIG5ldyBvcHRpb25zCisgKiBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBBTSB0 aGUgcmVsYXRpb24gd2lsbCB1c2UgYWZ0ZXIgdGhlIHN0YXRlbWVudAorICogZmluaXNoZXMs IG5vdCB0aGUgQU0gaXQgaGFzIG5vdy4gIFBhc3MgSW52YWxpZE9pZCB0byB1c2UgdGhlIHJl bGF0aW9uJ3MKKyAqIGN1cnJlbnQgYWNjZXNzIG1ldGhvZC4KICAqLwogc3RhdGljIHZvaWQK IEFURXhlY1NldFJlbE9wdGlvbnMoUmVsYXRpb24gcmVsLCBMaXN0ICpkZWZMaXN0LCBBbHRl clRhYmxlVHlwZSBvcGVyYXRpb24sCi0JCQkJCUxPQ0tNT0RFIGxvY2ttb2RlKQorCQkJCQlM T0NLTU9ERSBsb2NrbW9kZSwgT2lkIG5ld0FjY2Vzc01ldGhvZElkKQogewogCU9pZAkJCXJl bGlkOwogCVJlbGF0aW9uCXBnY2xhc3M7CkBAIC0xNjk0Miw3ICsxNzA4MSwzMCBAQCBBVEV4 ZWNTZXRSZWxPcHRpb25zKFJlbGF0aW9uIHJlbCwgTGlzdCAqZGVmTGlzdCwgQWx0ZXJUYWJs ZVR5cGUgb3BlcmF0aW9uLAogCXsKIAkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgogCQljYXNl IFJFTEtJTkRfTUFUVklFVzoKLQkJCSh2b2lkKSBoZWFwX3JlbG9wdGlvbnMocmVsLT5yZF9y ZWwtPnJlbGtpbmQsIG5ld09wdGlvbnMsIHRydWUpOworCQkJeworCQkJCWFtb3B0aW9uc19m dW5jdGlvbiBhbW9wdGlvbnM7CisKKwkJCQlpZiAoT2lkSXNWYWxpZChuZXdBY2Nlc3NNZXRo b2RJZCkpCisJCQkJeworCQkJCQlIZWFwVHVwbGUJYW10dXA7CisJCQkJCUZvcm1fcGdfYW0J YW1mb3JtOworCisJCQkJCWFtdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELAorCQkJCQkJ CQkJCQlPYmplY3RJZEdldERhdHVtKG5ld0FjY2Vzc01ldGhvZElkKSk7CisJCQkJCWlmICgh SGVhcFR1cGxlSXNWYWxpZChhbXR1cCkpCisJCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkJCQkJIG5ld0FjY2Vzc01l dGhvZElkKTsKKwkJCQkJYW1mb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbXR1cCk7 CisJCQkJCWFtb3B0aW9ucyA9IEdldFRhYmxlQW1Sb3V0aW5lKGFtZm9ybS0+YW1oYW5kbGVy KS0+YW1vcHRpb25zOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYW10dXApOworCQkJCX0KKwkJ CQllbHNlCisJCQkJCWFtb3B0aW9ucyA9IChyZWwtPnJkX3RhYmxlYW0gPworCQkJCQkJCQkg cmVsLT5yZF90YWJsZWFtLT5hbW9wdGlvbnMgOiBOVUxMKTsKKworCQkJCSh2b2lkKSB0YWJs ZV9yZWxvcHRpb25zKGFtb3B0aW9ucywgcmVsLT5yZF9yZWwtPnJlbGtpbmQsCisJCQkJCQkJ CQkJbmV3T3B0aW9ucywgdHJ1ZSk7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFOgogCQkJKHZvaWQpIHBhcnRpdGlvbmVkX3RhYmxlX3JlbG9w dGlvbnMobmV3T3B0aW9ucywgdHJ1ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4IDk5 ZDBkYjgyZWQ3Li42OGQxYTUzNjlmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTIx ODUsNyArMjE4NSw3IEBAIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRp b24sIFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJewogCQlTdGRSZE9wdEluZGV4Q2xlYW51cCB2 YWN1dW1faW5kZXhfY2xlYW51cDsKIAotCQlpZiAocmVsLT5yZF9vcHRpb25zID09IE5VTEwp CisJCWlmICghUmVsYXRpb25IYXNTdGRSZE9wdGlvbnMocmVsKSkKIAkJCXZhY3V1bV9pbmRl eF9jbGVhbnVwID0gU1REUkRfT1BUSU9OX1ZBQ1VVTV9JTkRFWF9DTEVBTlVQX0FVVE87CiAJ CWVsc2UKIAkJCXZhY3V1bV9pbmRleF9jbGVhbnVwID0KQEAgLTIyMTYsNyArMjIxNiw3IEBA IHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFt cyBwYXJhbXMsCiAJICogQ2hlY2sgaWYgdGhlIHZhY3V1bV9tYXhfZWFnZXJfZnJlZXplX2Zh aWx1cmVfcmF0ZSB0YWJsZSBzdG9yYWdlCiAJICogcGFyYW1ldGVyIHdhcyBzcGVjaWZpZWQu IFRoaXMgb3ZlcnJpZGVzIHRoZSBHVUMgdmFsdWUuCiAJICovCi0JaWYgKHJlbC0+cmRfb3B0 aW9ucyAhPSBOVUxMICYmCisJaWYgKFJlbGF0aW9uSGFzU3RkUmRPcHRpb25zKHJlbCkgJiYK IAkJKChTdGRSZE9wdGlvbnMgKikgcmVsLT5yZF9vcHRpb25zKS0+dmFjdXVtX21heF9lYWdl cl9mcmVlemVfZmFpbHVyZV9yYXRlID49IDApCiAJCXBhcmFtcy5tYXhfZWFnZXJfZnJlZXpl X2ZhaWx1cmVfcmF0ZSA9CiAJCQkoKFN0ZFJkT3B0aW9ucyAqKSByZWwtPnJkX29wdGlvbnMp LT52YWN1dW1fbWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGU7CkBAIC0yMjI3LDcgKzIy MjcsOCBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1 dW1QYXJhbXMgcGFyYW1zLAogCSAqLwogCWlmIChwYXJhbXMudHJ1bmNhdGUgPT0gVkFDT1BU VkFMVUVfVU5TUEVDSUZJRUQpCiAJewotCQlTdGRSZE9wdGlvbnMgKm9wdHMgPSAoU3RkUmRP cHRpb25zICopIHJlbC0+cmRfb3B0aW9uczsKKwkJU3RkUmRPcHRpb25zICpvcHRzID0gUmVs YXRpb25IYXNTdGRSZE9wdGlvbnMocmVsKSA/CisJCQkoU3RkUmRPcHRpb25zICopIHJlbC0+ cmRfb3B0aW9ucyA6IE5VTEw7CiAKIAkJaWYgKG9wdHMgJiYgb3B0cy0+dmFjdXVtX3RydW5j YXRlICE9IFBHX1RFUk5BUllfVU5TRVQpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCmluZGV4IGUxOWYwZDNlNTFjLi45NThjMTNmODMzOCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jCkBAIC00ODEsOSArNDgxLDExIEBAIFJlbGF0aW9uUGFyc2VS ZWxPcHRpb25zKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwbGUpCiAJc3dpdGNo IChyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kKQogCXsKIAkJY2FzZSBSRUxLSU5EX1JFTEFU SU9OOgorCQljYXNlIFJFTEtJTkRfTUFUVklFVzoKKwkJCWFtb3B0c2ZuID0gcmVsYXRpb24t PnJkX3RhYmxlYW0gPyByZWxhdGlvbi0+cmRfdGFibGVhbS0+YW1vcHRpb25zIDogTlVMTDsK KwkJCWJyZWFrOwogCQljYXNlIFJFTEtJTkRfVE9BU1RWQUxVRToKIAkJY2FzZSBSRUxLSU5E X1ZJRVc6Ci0JCWNhc2UgUkVMS0lORF9NQVRWSUVXOgogCQljYXNlIFJFTEtJTkRfUEFSVElU SU9ORURfVEFCTEU6CiAJCQlhbW9wdHNmbiA9IE5VTEw7CiAJCQlicmVhazsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsb3B0aW9ucy5oCmluZGV4IGU4Y2I3ZjdhNjI3Li4xMjgyYmNjYzc3ZiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsb3B0aW9ucy5oCkBAIC0xODcsNiArMTg3LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgbG9jYWxfcmVsb3B0cwogCSAoY2hhciAqKShvcHRzdHJ1Y3QpICsgKG9wdHN0cnVjdCkt Pm1lbWJlcikKIAogZXh0ZXJuIHJlbG9wdF9raW5kIGFkZF9yZWxvcHRpb25fa2luZCh2b2lk KTsKK2V4dGVybiB2b2lkIGFkZF9yZWxvcHRpb25fdG9fa2luZChjb25zdCBjaGFyICpuYW1l LCByZWxvcHRfa2luZCBraW5kKTsKIGV4dGVybiB2b2lkIGFkZF9ib29sX3JlbG9wdGlvbih1 aW50MzIga2luZHMsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2MsCiAJCQkJ CQkJICAgYm9vbCBkZWZhdWx0X3ZhbCwgTE9DS01PREUgbG9ja21vZGUpOwogZXh0ZXJuIHZv aWQgYWRkX3Rlcm5hcnlfcmVsb3B0aW9uKHVpbnQzMiBraW5kcywgY29uc3QgY2hhciAqbmFt ZSwKQEAgLTI0OCw2ICsyNDksOCBAQCBleHRlcm4gdm9pZCAqYnVpbGRfbG9jYWxfcmVsb3B0 aW9ucyhsb2NhbF9yZWxvcHRzICpyZWxvcHRzLCBEYXR1bSBvcHRpb25zLAogZXh0ZXJuIGJ5 dGVhICpkZWZhdWx0X3JlbG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0 ZSwKIAkJCQkJCQkJIHJlbG9wdF9raW5kIGtpbmQpOwogZXh0ZXJuIGJ5dGVhICpoZWFwX3Jl bG9wdGlvbnMoY2hhciByZWxraW5kLCBEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRl KTsKK2V4dGVybiBieXRlYSAqdGFibGVfcmVsb3B0aW9ucyhhbW9wdGlvbnNfZnVuY3Rpb24g YW1vcHRpb25zLCBjaGFyIHJlbGtpbmQsCisJCQkJCQkJICAgRGF0dW0gcmVsb3B0aW9ucywg Ym9vbCB2YWxpZGF0ZSk7CiBleHRlcm4gYnl0ZWEgKnZpZXdfcmVsb3B0aW9ucyhEYXR1bSBy ZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKTsKIGV4dGVybiBieXRlYSAqcGFydGl0aW9uZWRf dGFibGVfcmVsb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKTsKIGV4 dGVybiBieXRlYSAqaW5kZXhfcmVsb3B0aW9ucyhhbW9wdGlvbnNfZnVuY3Rpb24gYW1vcHRp b25zLCBEYXR1bSByZWxvcHRpb25zLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggYzEzZjA1 ZDM5ZGIuLjE4MTZkMDRlNGRmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTE3LDYgKzE3 LDcgQEAKICNpZm5kZWYgVEFCTEVBTV9ICiAjZGVmaW5lIFRBQkxFQU1fSAogCisjaW5jbHVk ZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNs dWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCkBAIC0zMjQs NiArMzI1LDM3IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJTm9kZVRhZwkJ dHlwZTsKIAogCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogUmVsb3B0aW9uIHBhcnNp bmcuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwkvKgorCSAqIFBhcnNlIGFu ZCB2YWxpZGF0ZSBBTS1zcGVjaWZpYyByZWxvcHRpb25zLiAgT3B0aW9uYWw6IHdoZW4gTlVM TCwgdGhlCisJICogY2FsbGVyIGZhbGxzIGJhY2sgdG8gdGhlIHN0YW5kYXJkIGhlYXAgcmVs b3B0aW9uIHBhcnNlcgorCSAqIChkZWZhdWx0X3JlbG9wdGlvbnMgd2l0aCBSRUxPUFRfS0lO RF9IRUFQKSBhbmQgdGhlIHJlc3VsdCBpcyBsYWlkIG91dAorCSAqIGFzIFN0ZFJkT3B0aW9u cy4KKwkgKgorCSAqIFdoZW4gbm9uLU5VTEwsIHRoZSBBTSBvd25zIHRoZSBvcHRpb24gc2V0 IGVudGlyZWx5LiAgSXQgaXMgZnJlZSB0bworCSAqIGFjY2VwdCBhbGwgc3RhbmRhcmQgaGVh cCBvcHRpb25zLCBvbmx5IGEgc3Vic2V0LCBvciB0byBhZGQgaXRzIG93bi4gVGhlCisJICog cmV0dXJuZWQgYnl0ZWEgbXVzdCBiZWdpbiB3aXRoIGEgVkFSU0laRSBoZWFkZXIgYW5kIGlz IHN0b3JlZCBpbgorCSAqIFJlbGF0aW9uLT5yZF9vcHRpb25zLCBzbyB0aGUgQU0gZGljdGF0 ZXMgdGhlIGluLW1lbW9yeSBsYXlvdXQgdGhhdCBpdHMKKwkgKiBvdGhlciBjYWxsYmFja3Mg cmVhZC4gIENvcmUgY29kZSB0aGF0IHJlYWRzIFN0ZFJkT3B0aW9ucyBmaWVsZHMgb3V0IG9m CisJICogcmRfb3B0aW9ucyAoUmVsYXRpb25HZXRGaWxsRmFjdG9yLCBSZWxhdGlvbklzVXNl ZEFzQ2F0YWxvZ1RhYmxlLCAuLi4pCisJICogZ2F0ZXMgb24gUmVsYXRpb25IYXNTdGRSZE9w dGlvbnMoKSwgc28gYSBjdXN0b20gbGF5b3V0IHdpbGwgbm90IGJlCisJICogbWlzaW50ZXJw cmV0ZWQuCisJICoKKwkgKiBUaGUgY2FsbGJhY2sgdmFsaWRhdGVzIHVzZXItc3VwcGxpZWQg dmFsdWVzIGJ1dCBtdXN0IG5vdCBzaWxlbnRseQorCSAqIHJld3JpdGUgdGhlbTogYSB1c2Vy IGluc3BlY3RpbmcgcGdfY2xhc3MucmVsb3B0aW9ucyBtdXN0IHNlZSBleGFjdGx5CisJICog d2hhdCB0aGV5IHBhc3NlZCBpbi4gIE91dC1vZi1yYW5nZSBvciB1bmtub3duIG9wdGlvbnMg c2hvdWxkIGJlCisJICogcmVwb3J0ZWQgd2l0aCBlcmVwb3J0KEVSUk9SKSB3aGVuIHZhbGlk YXRlIGlzIHRydWUuCisJICoKKwkgKiBTaWduYXR1cmUgbWF0Y2hlcyB0aGUgaW5kZXggQU0n cyBhbW9wdGlvbnMgY2FsbGJhY2sgc28gdGhlIHNhbWUgaGVscGVyCisJICogbWFjaGluZXJ5 IChhZGRfc3RyaW5nX3JlbG9wdGlvbiwgYWRkX2ludF9yZWxvcHRpb24sIGV0Yy4pIGNhbiBi ZSB1c2VkLgorCSAqLworCWFtb3B0aW9uc19mdW5jdGlvbiBhbW9wdGlvbnM7CisKKwogCS8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIFNsb3QgcmVsYXRlZCBjYWxsYmFja3MuCiAJICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGNkMWU5MmYyMzAyLi5kNGM0ODRm ZDEzYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTM2MSwxMiArMzYxLDI5IEBAIHR5cGVkZWYgc3RydWN0 IFN0ZFJkT3B0aW9ucwogI2RlZmluZSBIRUFQX01JTl9GSUxMRkFDVE9SCQkJMTAKICNkZWZp bmUgSEVBUF9ERUZBVUxUX0ZJTExGQUNUT1IJCTEwMAogCisvKgorICogUmVsYXRpb25IYXNT dGRSZE9wdGlvbnMKKyAqCQlSZXR1cm5zIHRydWUgd2hlbiB0aGUgcmVsYXRpb24ncyByZF9v cHRpb25zIGJ1ZmZlciBpcyBsYWlkIG91dCBhcworICoJCVN0ZFJkT3B0aW9ucywgaS5lLiBp dCB3YXMgcHJvZHVjZWQgYnkgdGhlIHN0YW5kYXJkIGhlYXAgcmVsb3B0aW9uCisgKgkJcGFy c2VyLiAgQSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHRoYXQgc3VwcGxpZXMgaXRzIG93biBhbW9w dGlvbnMKKyAqCQljYWxsYmFjayBvd25zIGl0cyByZF9vcHRpb25zIGxheW91dCBhbmQgaXMg bm90IHJlcXVpcmVkIHRvIGV4cG9zZQorICoJCVN0ZFJkT3B0aW9ucyBmaWVsZHM7IG1hY3Jv cyB0aGF0IHJlYWQgdGhvc2UgZmllbGRzIG11c3QgY2hlY2sgdGhpcworICoJCWZpcnN0IHRv IGF2b2lkIHJlYWRpbmcgZ2FyYmFnZSBkYXRhLiAgRm9yIGluZGV4ZXMgYW5kIG90aGVyCisg KgkJcmVsa2luZHMgcmRfb3B0aW9ucyBpcyBpbiBhbiBBTS1zcGVjaWZpYyBsYXlvdXQsIHNv IHRoaXMgcmV0dXJucworICoJCWZhbHNlIGZvciB0aGVtLgorICoKKyAqCQlEZWZpbmVkIGFz IGEgZnVuY3Rpb24gKGluIHJlbG9wdGlvbnMuYykgcmF0aGVyIHRoYW4gYSBtYWNybworICoJ CWJlY2F1c2UgdGhlIHRlc3QgbmVlZHMgdGhlIGZ1bGwgVGFibGVBbVJvdXRpbmUgc3RydWN0 IGRlZmluaXRpb24sCisgKgkJd2hpY2ggd291bGQgY3JlYXRlIGFuICNpbmNsdWRlIGN5Y2xl IGlmIHB1bGxlZCBpbnRvIHJlbC5oLgorICovCitleHRlcm4gYm9vbCBSZWxhdGlvbkhhc1N0 ZFJkT3B0aW9ucyhSZWxhdGlvbiByZWxhdGlvbik7CisKIC8qCiAgKiBSZWxhdGlvbkdldFRv YXN0VHVwbGVUYXJnZXQKICAqCQlSZXR1cm5zIHRoZSByZWxhdGlvbidzIHRvYXN0X3R1cGxl X3RhcmdldC4gIE5vdGUgbXVsdGlwbGUgZXZhbCBvZiBhcmd1bWVudCEKICAqLwogI2RlZmlu ZSBSZWxhdGlvbkdldFRvYXN0VHVwbGVUYXJnZXQocmVsYXRpb24sIGRlZmF1bHR0YXJnKSBc Ci0JKChyZWxhdGlvbiktPnJkX29wdGlvbnMgPyBcCisJKFJlbGF0aW9uSGFzU3RkUmRPcHRp b25zKHJlbGF0aW9uKSA/IFwKIAkgKChTdGRSZE9wdGlvbnMgKikgKHJlbGF0aW9uKS0+cmRf b3B0aW9ucyktPnRvYXN0X3R1cGxlX3RhcmdldCA6IChkZWZhdWx0dGFyZykpCiAKIC8qCkBA IC0zNzQsNyArMzkxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU3RkUmRPcHRpb25zCiAgKgkJUmV0 dXJucyB0aGUgcmVsYXRpb24ncyBmaWxsZmFjdG9yLiAgTm90ZSBtdWx0aXBsZSBldmFsIG9m IGFyZ3VtZW50IQogICovCiAjZGVmaW5lIFJlbGF0aW9uR2V0RmlsbEZhY3RvcihyZWxhdGlv biwgZGVmYXVsdGZmKSBcCi0JKChyZWxhdGlvbiktPnJkX29wdGlvbnMgPyBcCisJKFJlbGF0 aW9uSGFzU3RkUmRPcHRpb25zKHJlbGF0aW9uKSA/IFwKIAkgKChTdGRSZE9wdGlvbnMgKikg KHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPmZpbGxmYWN0b3IgOiAoZGVmYXVsdGZmKSkKIAog LyoKQEAgLTM5Nyw3ICs0MTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBTdGRSZE9wdGlvbnMKICAq CQlmcm9tIHRoZSBwb3Ygb2YgbG9naWNhbCBkZWNvZGluZy4gIE5vdGUgbXVsdGlwbGUgZXZh bCBvZiBhcmd1bWVudCEKICAqLwogI2RlZmluZSBSZWxhdGlvbklzVXNlZEFzQ2F0YWxvZ1Rh YmxlKHJlbGF0aW9uKQlcCi0JKChyZWxhdGlvbiktPnJkX29wdGlvbnMgJiYgXAorCShSZWxh dGlvbkhhc1N0ZFJkT3B0aW9ucyhyZWxhdGlvbikgJiYgXAogCSAoKHJlbGF0aW9uKS0+cmRf cmVsLT5yZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04gfHwgXAogCSAgKHJlbGF0aW9uKS0+ cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfTUFUVklFVykgPyBcCiAJICgoU3RkUmRPcHRp b25zICopIChyZWxhdGlvbiktPnJkX29wdGlvbnMpLT51c2VyX2NhdGFsb2dfdGFibGUgOiBm YWxzZSkKQEAgLTQwOCw3ICs0MjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBTdGRSZE9wdGlvbnMK ICAqCQlOb3RlIG11bHRpcGxlIGV2YWwgb2YgYXJndW1lbnQhCiAgKi8KICNkZWZpbmUgUmVs YXRpb25HZXRQYXJhbGxlbFdvcmtlcnMocmVsYXRpb24sIGRlZmF1bHRwdykgXAotCSgocmVs YXRpb24pLT5yZF9vcHRpb25zID8gXAorCShSZWxhdGlvbkhhc1N0ZFJkT3B0aW9ucyhyZWxh dGlvbikgPyBcCiAJICgoU3RkUmRPcHRpb25zICopIChyZWxhdGlvbiktPnJkX29wdGlvbnMp LT5wYXJhbGxlbF93b3JrZXJzIDogKGRlZmF1bHRwdykpCiAKIC8qIFZpZXdPcHRpb25zLT5j aGVja19vcHRpb24gdmFsdWVzICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01h a2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQppbmRleCAwYTc0YWI1Yzg2Zi4u MjIzMDA1ZmRmOTggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQCBTVUJESVJT ID0gXAogCQkgIGRlbGF5X2V4ZWN1dGlvbiBcCiAJCSAgZHVtbXlfaW5kZXhfYW0gXAogCQkg IGR1bW15X3NlY2xhYmVsIFwKKwkJICBkdW1teV90YWJsZV9hbSBcCiAJCSAgaW5kZXggXAog CQkgIGxpYnBxX3BpcGVsaW5lIFwKIAkJICBvYXV0aF92YWxpZGF0b3IgXApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9NYWtlZmlsZSBiL3NyYy90ZXN0 L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjk0ODM3ZGZmMzkyCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9NYWtlZmlsZQpAQCAtMCwwICsxLDIwIEBA CisjIHNyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vTWFrZWZpbGUKKworTU9EVUxF UyA9IGR1bW15X3RhYmxlX2FtCisKK0VYVEVOU0lPTiA9IGR1bW15X3RhYmxlX2FtCitEQVRB ID0gZHVtbXlfdGFibGVfYW0tLTEuMC5zcWwKK1BHRklMRURFU0MgPSAiZHVtbXlfdGFibGVf YW0gLSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHRlbXBsYXRlIgorCitSRUdSRVNTID0gcmVsb3B0 aW9ucworCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9 ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQor c3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbQordG9wX2J1aWxkZGly ID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1r CitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9S RUFETUUgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL1JFQURNRQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTIzNGExZjEwN2YKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL1JFQURNRQpAQCAt MCwwICsxLDIxIEBACitEdW1teSBUYWJsZSBBTQorPT09PT09PT09PT09PT0KKworRHVtbXkg dGFibGUgQU0gaXMgYSBtb2R1bGUgZm9yIHRlc3RpbmcgdGhlIHRhYmxlIGFjY2VzcyBtZXRo b2QKK2Ftb3B0aW9ucyBjYWxsYmFjayBhbmQgdGhlIGFkZF9yZWxvcHRpb25fdG9fa2luZCgp IGhlbHBlci4gIEl0CitkZWxlZ2F0ZXMgYWxsIHN0b3JhZ2UgYW5kIHNjYW4gY2FsbGJhY2tz IHRvIHRoZSBoZWFwIEFNIGFuZCBvbmx5Citzd2FwcyBpbiBpdHMgb3duIG9wdGlvbiBwYXJz ZXIsIHNvIGEgcmVsYXRpb24gY3JlYXRlZCB3aXRoIFVTSU5HCitkdW1teV90YWJsZV9hbSBi ZWhhdmVzIGxpa2UgYSBoZWFwIHRhYmxlIGJ1dCBhY2NlcHRzIGEgZGlmZmVyZW50CitzZXQg b2YgcmVsb3B0aW9uczoKKworICAtICJmaWxsZmFjdG9yIiAgICAgKGluaGVyaXRlZCBmcm9t IHRoZSBjb3JlIGhlYXAgcmVnaXN0cmF0aW9uIHZpYQorICAgICAgICAgICAgICAgICAgICAg IGFkZF9yZWxvcHRpb25fdG9fa2luZCkKKyAgLSAib3B0aW9uX2ludCIgICAgIChpbnRlZ2Vy KQorICAtICJvcHRpb25fcmVhbCIgICAgKHJlYWwpCisgIC0gIm9wdGlvbl9ib29sIiAgICAo Ym9vbGVhbikKKyAgLSAib3B0aW9uX2VudW0iICAgIChlbnVtLCBvbmV8dHdvKQorCitTdGFu ZGFyZCBoZWFwIG9wdGlvbnMgc3VjaCBhcyBwYXJhbGxlbF93b3JrZXJzLCBhdXRvdmFjdXVt XyosIGFuZAordG9hc3RfdHVwbGVfdGFyZ2V0IGFyZSBpbnRlbnRpb25hbGx5IE5PVCBhY2Nl cHRlZCwgdG8gZXhlcmNpc2UgdGhlCisiQU0gcmVqZWN0cyBhbiB1bmtub3duIG9wdGlvbiIg cGF0aCBpbiBBTFRFUiBUQUJMRSAuLi4gU0VUIEFDQ0VTUworTUVUSE9EIHJldmFsaWRhdGlv bi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vZHVtbXlf dGFibGVfYW0tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL2R1 bW15X3RhYmxlX2FtLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4yZTI5NWI5NTg0NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvZHVtbXlfdGFibGVfYW0vZHVtbXlfdGFibGVfYW0tLTEuMC5zcWwKQEAgLTAsMCArMSwx MyBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9kdW1teV90YWJsZV9h bS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBw c3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVB VEUgRVhURU5TSU9OIGR1bW15X3RhYmxlX2FtIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQK KworQ1JFQVRFIEZVTkNUSU9OIGR0aGFuZGxlcihpbnRlcm5hbCkKK1JFVFVSTlMgdGFibGVf YW1faGFuZGxlcgorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEM7CisKKy0tIEFj Y2VzcyBtZXRob2QKK0NSRUFURSBBQ0NFU1MgTUVUSE9EIGR1bW15X3RhYmxlX2FtIFRZUEUg VEFCTEUgSEFORExFUiBkdGhhbmRsZXI7CitDT01NRU5UIE9OIEFDQ0VTUyBNRVRIT0QgZHVt bXlfdGFibGVfYW0gSVMgJ2R1bW15IHRhYmxlIGFjY2VzcyBtZXRob2QnOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9kdW1teV90YWJsZV9hbS5jIGIv c3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9kdW1teV90YWJsZV9hbS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MzRhOWFjZDViYgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vZHVtbXlfdGFi bGVfYW0uYwpAQCAtMCwwICsxLDE2NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogZHVtbXlfdGFibGVfYW0uYworICoJCVRhYmxlIEFNIHRlbXBsYXRlIG1haW4gZmlsZS4K KyAqCisgKiBUaGlzIG1vZHVsZSBleGlzdHMgcHJpbWFyaWx5IHRvIGRlbW9uc3RyYXRlIGFu ZCBleGVyY2lzZSB0aGUgdGFibGUgQU0KKyAqIGFtb3B0aW9ucyBjYWxsYmFjayBhbmQgdGhl IGFkZF9yZWxvcHRpb25fdG9fa2luZCgpIGhlbHBlci4gIFN0b3JhZ2UKKyAqIGFuZCBzY2Fu IGNhbGxiYWNrcyBhcmUgZGVsZWdhdGVkIHRvIHRoZSBoZWFwIEFNLCBzbyBhIHJlbGF0aW9u CisgKiBjcmVhdGVkIHdpdGggVVNJTkcgZHVtbXlfdGFibGVfYW0gYmVoYXZlcyBsaWtlIGEg aGVhcCB0YWJsZTsgb25seSB0aGUKKyAqIHJlbG9wdGlvbiBzdXJmYWNlIGRpZmZlcnMuCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5U SUZJQ0FUSU9OCisgKgkgIHNyYy90ZXN0L21vZHVsZXMvZHVtbXlfdGFibGVfYW0vZHVtbXlf dGFibGVfYW0uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJmbWdyLmgiCisKK1BHX01PRFVMRV9N QUdJQzsKKworLyogUGFyc2UgdGFibGUgZm9yIGJ1aWxkX3JlbG9wdGlvbnMgKi8KK3N0YXRp YyByZWxvcHRfcGFyc2VfZWx0IGR0X3JlbG9wdF90YWJbNV07CisKKy8qIEtpbmQgb2YgcmVs YXRpb24gb3B0aW9ucyBmb3IgZHVtbXkgdGFibGUgKi8KK3N0YXRpYyByZWxvcHRfa2luZCBk dF9yZWxvcHRfa2luZDsKKwordHlwZWRlZiBlbnVtIER1bW15VGFibGVFbnVtCit7CisJRFVN TVlfVEFCTEVfRU5VTV9PTkUsCisJRFVNTVlfVEFCTEVfRU5VTV9UV08sCit9CQkJRHVtbXlU YWJsZUVudW07CisKKy8qCisgKiBEdW1teSB0YWJsZSBvcHRpb25zLgorICoKKyAqIFRoZSBm aXJzdCB0d28gZmllbGRzIGFyZSB0aGUgc3RhbmRhcmQgaGVhcCBvcHRpb25zIChmaWxsZmFj dG9yICsKKyAqIGF1dG92YWN1dW1fZW5hYmxlZCkgdGhhdCB3ZSBpbmhlcml0IGJ5IGNhbGxp bmcgYWRkX3JlbG9wdGlvbl90b19raW5kKCkKKyAqIG9uIHRoZSBtYXRjaGluZyBuYW1lczsg dGhlIHJlbWFpbmluZyBvbmVzIGFyZSBBTS1zcGVjaWZpYyBvcHRpb25zLgorICovCit0eXBl ZGVmIHN0cnVjdCBEdW1teVRhYmxlT3B0aW9ucworeworCWludDMyCQl2bF9sZW5fOwkJLyog dmFybGVuYSBoZWFkZXIgKGRvIG5vdCB0b3VjaCBkaXJlY3RseSEpICovCisJaW50CQkJZmls bGZhY3RvcjsKKwlpbnQJCQlvcHRpb25faW50OworCWRvdWJsZQkJb3B0aW9uX3JlYWw7CisJ Ym9vbAkJb3B0aW9uX2Jvb2w7CisJRHVtbXlUYWJsZUVudW0gb3B0aW9uX2VudW07Cit9CQkJ RHVtbXlUYWJsZU9wdGlvbnM7CisKK3N0YXRpYyByZWxvcHRfZW51bV9lbHRfZGVmIGR1bW15 VGFibGVFbnVtVmFsdWVzW10gPQoreworCXsib25lIiwgRFVNTVlfVEFCTEVfRU5VTV9PTkV9 LAorCXsidHdvIiwgRFVNTVlfVEFCTEVfRU5VTV9UV099LAorCXsoY29uc3QgY2hhciAqKSBO VUxMfQkJLyogbGlzdCB0ZXJtaW5hdG9yICovCit9OworCitQR19GVU5DVElPTl9JTkZPX1Yx KGR0aGFuZGxlcik7CisKKy8qCisgKiBSZWdpc3RlciBhIHJlbG9wdF9raW5kIGZvciB0aGlz IEFNIGFuZCBwb3B1bGF0ZSB0aGUgcGFyc2UgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitj cmVhdGVfcmVsb3B0aW9uc190YWJsZSh2b2lkKQoreworCWludAkJCWkgPSAwOworCisJZHRf cmVsb3B0X2tpbmQgPSBhZGRfcmVsb3B0aW9uX2tpbmQoKTsKKworCS8qCisJICogQWNjZXB0 IHRoZSBzdGFuZGFyZCAiZmlsbGZhY3RvciIgb3B0aW9uIChyZWdpc3RlcmVkIGJ5IGNvcmUg Zm9yCisJICogUkVMT1BUX0tJTkRfSEVBUCBvbmx5KSB1bmRlciBvdXIgb3duIGtpbmQuICBU aGlzIGlzIHRoZSBjYW5vbmljYWwgdXNlCisJICogb2YgYWRkX3JlbG9wdGlvbl90b19raW5k KCk6IGFuIEFNIHRoYXQgd2FudHMgdG8gaG9ub3VyIGFuIGV4aXN0aW5nCisJICogY29yZS1y ZWdpc3RlcmVkIG9wdGlvbiB3aXRob3V0IGR1cGxpY2F0aW5nIGl0cyBkZWZpbml0aW9uLgor CSAqLworCWFkZF9yZWxvcHRpb25fdG9fa2luZCgiZmlsbGZhY3RvciIsIGR0X3JlbG9wdF9r aW5kKTsKKwlkdF9yZWxvcHRfdGFiW2ldLm9wdG5hbWUgPSAiZmlsbGZhY3RvciI7CisJZHRf cmVsb3B0X3RhYltpXS5vcHR0eXBlID0gUkVMT1BUX1RZUEVfSU5UOworCWR0X3JlbG9wdF90 YWJbaV0ub2Zmc2V0ID0gb2Zmc2V0b2YoRHVtbXlUYWJsZU9wdGlvbnMsIGZpbGxmYWN0b3Ip OworCWkrKzsKKworCWFkZF9pbnRfcmVsb3B0aW9uKGR0X3JlbG9wdF9raW5kLCAib3B0aW9u X2ludCIsCisJCQkJCSAgIkludGVnZXIgb3B0aW9uIGZvciBkdW1teV90YWJsZV9hbSIsCisJ CQkJCSAgMTAsIC0xMCwgMTAwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwlkdF9yZWxvcHRf dGFiW2ldLm9wdG5hbWUgPSAib3B0aW9uX2ludCI7CisJZHRfcmVsb3B0X3RhYltpXS5vcHR0 eXBlID0gUkVMT1BUX1RZUEVfSU5UOworCWR0X3JlbG9wdF90YWJbaV0ub2Zmc2V0ID0gb2Zm c2V0b2YoRHVtbXlUYWJsZU9wdGlvbnMsIG9wdGlvbl9pbnQpOworCWkrKzsKKworCWFkZF9y ZWFsX3JlbG9wdGlvbihkdF9yZWxvcHRfa2luZCwgIm9wdGlvbl9yZWFsIiwKKwkJCQkJICAg IlJlYWwgb3B0aW9uIGZvciBkdW1teV90YWJsZV9hbSIsCisJCQkJCSAgIDMuMTQxNSwgLTEw LCAxMDAsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCWR0X3JlbG9wdF90YWJbaV0ub3B0bmFt ZSA9ICJvcHRpb25fcmVhbCI7CisJZHRfcmVsb3B0X3RhYltpXS5vcHR0eXBlID0gUkVMT1BU X1RZUEVfUkVBTDsKKwlkdF9yZWxvcHRfdGFiW2ldLm9mZnNldCA9IG9mZnNldG9mKER1bW15 VGFibGVPcHRpb25zLCBvcHRpb25fcmVhbCk7CisJaSsrOworCisJYWRkX2Jvb2xfcmVsb3B0 aW9uKGR0X3JlbG9wdF9raW5kLCAib3B0aW9uX2Jvb2wiLAorCQkJCQkgICAiQm9vbGVhbiBv cHRpb24gZm9yIGR1bW15X3RhYmxlX2FtIiwKKwkJCQkJICAgdHJ1ZSwgQWNjZXNzRXhjbHVz aXZlTG9jayk7CisJZHRfcmVsb3B0X3RhYltpXS5vcHRuYW1lID0gIm9wdGlvbl9ib29sIjsK KwlkdF9yZWxvcHRfdGFiW2ldLm9wdHR5cGUgPSBSRUxPUFRfVFlQRV9CT09MOworCWR0X3Jl bG9wdF90YWJbaV0ub2Zmc2V0ID0gb2Zmc2V0b2YoRHVtbXlUYWJsZU9wdGlvbnMsIG9wdGlv bl9ib29sKTsKKwlpKys7CisKKwlhZGRfZW51bV9yZWxvcHRpb24oZHRfcmVsb3B0X2tpbmQs ICJvcHRpb25fZW51bSIsCisJCQkJCSAgICJFbnVtIG9wdGlvbiBmb3IgZHVtbXlfdGFibGVf YW0iLAorCQkJCQkgICBkdW1teVRhYmxlRW51bVZhbHVlcywKKwkJCQkJICAgRFVNTVlfVEFC TEVfRU5VTV9PTkUsCisJCQkJCSAgICJWYWxpZCB2YWx1ZXMgYXJlIFwib25lXCIgYW5kIFwi dHdvXCIuIiwKKwkJCQkJICAgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJZHRfcmVsb3B0X3Rh YltpXS5vcHRuYW1lID0gIm9wdGlvbl9lbnVtIjsKKwlkdF9yZWxvcHRfdGFiW2ldLm9wdHR5 cGUgPSBSRUxPUFRfVFlQRV9FTlVNOworCWR0X3JlbG9wdF90YWJbaV0ub2Zmc2V0ID0gb2Zm c2V0b2YoRHVtbXlUYWJsZU9wdGlvbnMsIG9wdGlvbl9lbnVtKTsKKwlpKys7Cit9CisKKy8q CisgKiBQYXJzZSByZWxvcHRpb25zIGZvciBkdW1teV90YWJsZV9hbS4KKyAqCisgKiBSZXR1 cm5pbmcgRHVtbXlUYWJsZU9wdGlvbnMgdGVsbHMgdGhlIGNhbGxlciAocmVsY2FjaGUuYykg dG8gc3RvcmUKKyAqIGV4YWN0bHkgdGhhdCBsYXlvdXQgaW4gUmVsYXRpb24tPnJkX29wdGlv bnMuCisgKi8KK3N0YXRpYyBieXRlYSAqCitkdG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywg Ym9vbCB2YWxpZGF0ZSkKK3sKKwlyZXR1cm4gKGJ5dGVhICopIGJ1aWxkX3JlbG9wdGlvbnMo cmVsb3B0aW9ucywgdmFsaWRhdGUsCisJCQkJCQkJCQkgIGR0X3JlbG9wdF9raW5kLAorCQkJ CQkJCQkJICBzaXplb2YoRHVtbXlUYWJsZU9wdGlvbnMpLAorCQkJCQkJCQkJICBkdF9yZWxv cHRfdGFiLCBsZW5ndGhvZihkdF9yZWxvcHRfdGFiKSk7Cit9CisKKy8qCisgKiBIYW5kbGVy IGZvciB0YWJsZSBBTS4KKyAqCisgKiBBbGwgc3RvcmFnZS1zaWRlIGNhbGxiYWNrcyBhcmUg aW5oZXJpdGVkIGZyb20gaGVhcDsgd2Ugb25seSBzd2FwIGluCisgKiBvdXIgb3duIGFtb3B0 aW9ucyBzbyB0aGF0IHRoZSBBTSBvd25zIGl0cyByZWxvcHRpb24gc2V0LiAgVGhpcyBrZWVw cworICogdGhlIGV4YW1wbGUgZm9jdXNlZCBvbiB0aGUgbmV3IEFQSSB3aXRob3V0IGR1cGxp Y2F0aW5nIHRoZSBoZWFwIEFNLgorICovCitEYXR1bQorZHRoYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJc3RhdGljIFRhYmxlQW1Sb3V0aW5lIHJvdXRpbmU7CisJc3RhdGljIGJv b2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCWlmICghaW5pdGlhbGl6ZWQpCisJeworCQlt ZW1jcHkoJnJvdXRpbmUsIEdldEhlYXBhbVRhYmxlQW1Sb3V0aW5lKCksIHNpemVvZihyb3V0 aW5lKSk7CisJCXJvdXRpbmUuYW1vcHRpb25zID0gZHRvcHRpb25zOworCQlpbml0aWFsaXpl ZCA9IHRydWU7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoJnJvdXRpbmUpOworfQorCit2 b2lkCitfUEdfaW5pdCh2b2lkKQoreworCWNyZWF0ZV9yZWxvcHRpb25zX3RhYmxlKCk7Cit9 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL2R1bW15X3Rh YmxlX2FtLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL2R1bW15 X3RhYmxlX2FtLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjA4ZjJmODY4ZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9k dW1teV90YWJsZV9hbS9kdW1teV90YWJsZV9hbS5jb250cm9sCkBAIC0wLDAgKzEsNSBAQAor IyBkdW1teV90YWJsZV9hbSBleHRlbnNpb24KK2NvbW1lbnQgPSAnZHVtbXlfdGFibGVfYW0g LSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHRlbXBsYXRlJworZGVmYXVsdF92ZXJzaW9uID0gJzEu MCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL2R1bW15X3RhYmxlX2FtJworcmVsb2Nh dGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxl X2FtL2V4cGVjdGVkL3JlbG9wdGlvbnMub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90 YWJsZV9hbS9leHBlY3RlZC9yZWxvcHRpb25zLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uYzZjYzZkMjFkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL2V4cGVjdGVkL3JlbG9wdGlvbnMub3V0CkBA IC0wLDAgKzEsMTQ2IEBACistLSBUZXN0cyBmb3IgdGhlIHRhYmxlIEFNIGFtb3B0aW9ucyBj YWxsYmFjayBhbmQgYWRkX3JlbG9wdGlvbl90b19raW5kKCkKK0NSRUFURSBFWFRFTlNJT04g ZHVtbXlfdGFibGVfYW07CistLSBTYW5pdHk6IENSRUFURSBUQUJMRSB3aXRoIEFNLXNwZWNp ZmljIG9wdGlvbnMgc3VjY2VlZHMgYW5kIHJvdW5kLXRyaXBzCitDUkVBVEUgVEFCTEUgZHVt bXlfdCAoYSBpbnQpIFVTSU5HIGR1bW15X3RhYmxlX2FtCisgICAgV0lUSCAob3B0aW9uX2lu dCA9IDE3LCBvcHRpb25fcmVhbCA9IDIuNSwgb3B0aW9uX2Jvb2wgPSBmYWxzZSwKKyAgICAg ICAgICBvcHRpb25fZW51bSA9ICd0d28nLCBmaWxsZmFjdG9yID0gNjApOworU0VMRUNUIHJl bG9wdGlvbnMgRlJPTSBwZ19jbGFzcworICAgIFdIRVJFIG9pZCA9ICdkdW1teV90Jzo6cmVn Y2xhc3MgT1JERVIgQlkgcmVsb3B0aW9uczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVsb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisge29wdGlvbl9pbnQ9MTcsb3B0aW9u X3JlYWw9Mi41LG9wdGlvbl9ib29sPWZhbHNlLG9wdGlvbl9lbnVtPXR3byxmaWxsZmFjdG9y PTYwfQorKDEgcm93KQorCistLSBBTS1zcGVjaWZpYyBvcHRpb24gcmFuZ2VzIGFyZSBlbmZv cmNlZCAob3B0aW9uX2ludCBhbGxvd3MgLTEwLi4xMDApCitDUkVBVEUgVEFCTEUgZHVtbXlf b29yIChhIGludCkgVVNJTkcgZHVtbXlfdGFibGVfYW0gV0lUSCAob3B0aW9uX2ludCA9IDk5 OTkpOworRVJST1I6ICB2YWx1ZSA5OTk5IG91dCBvZiBib3VuZHMgZm9yIG9wdGlvbiAib3B0 aW9uX2ludCIKK0RFVEFJTDogIFZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiAiLTEwIiBhbmQg IjEwMCIuCistLSBVbmtub3duIG9wdGlvbnMgYXJlIHJlamVjdGVkIGF0IENSRUFURSBUQUJM RSB0aW1lCitDUkVBVEUgVEFCTEUgZHVtbXlfYmFkIChhIGludCkgVVNJTkcgZHVtbXlfdGFi bGVfYW0gV0lUSCAocGFyYWxsZWxfd29ya2VycyA9IDQpOworRVJST1I6ICB1bnJlY29nbml6 ZWQgcGFyYW1ldGVyICJwYXJhbGxlbF93b3JrZXJzIgorLS0gRGVmYXVsdCB2YWx1ZXMgbGFu ZCBpbiBwZ19jbGFzcyBvbmx5IHdoZW4gdGhlIHVzZXIgZGlkIG5vdCBzZXQgdGhlbQorQ1JF QVRFIFRBQkxFIGR1bW15X2RlZmF1bHRzIChhIGludCkgVVNJTkcgZHVtbXlfdGFibGVfYW07 CitTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdkdW1teV9k ZWZhdWx0cyc6OnJlZ2NsYXNzOworIHJlbG9wdGlvbnMgCistLS0tLS0tLS0tLS0KKyAKKygx IHJvdykKKworRFJPUCBUQUJMRSBkdW1teV9kZWZhdWx0czsKKy0tIEFMVEVSIFRBQkxFIC4u LiBTRVQgKC4uLikgd2l0aCBBTS1zcGVjaWZpYyBvcHRpb24KK0FMVEVSIFRBQkxFIGR1bW15 X3QgU0VUIChvcHRpb25faW50ID0gNDIpOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19j bGFzcyBXSEVSRSBvaWQgPSAnZHVtbXlfdCc6OnJlZ2NsYXNzOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZWxvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7b3B0aW9uX3Jl YWw9Mi41LG9wdGlvbl9ib29sPWZhbHNlLG9wdGlvbl9lbnVtPXR3byxmaWxsZmFjdG9yPTYw LG9wdGlvbl9pbnQ9NDJ9CisoMSByb3cpCisKKy0tIEFMVEVSIFRBQkxFIC4uLiBTRVQgKC4u Likgd2l0aCBhbiB1bmtub3duIG9wdGlvbiBlcnJvcnMKK0FMVEVSIFRBQkxFIGR1bW15X3Qg U0VUIChwYXJhbGxlbF93b3JrZXJzID0gNCk7CitFUlJPUjogIHVucmVjb2duaXplZCBwYXJh bWV0ZXIgInBhcmFsbGVsX3dvcmtlcnMiCistLSBBTFRFUiBUQUJMRSAuLi4gUkVTRVQgKG9w dGlvbikgcm91bmQtdHJpcHMKK0FMVEVSIFRBQkxFIGR1bW15X3QgUkVTRVQgKG9wdGlvbl9p bnQpOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAnZHVt bXlfdCc6OnJlZ2NsYXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbG9wdGlv bnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHtvcHRp b25fcmVhbD0yLjUsb3B0aW9uX2Jvb2w9ZmFsc2Usb3B0aW9uX2VudW09dHdvLGZpbGxmYWN0 b3I9NjB9CisoMSByb3cpCisKKy0tIFNFVCBBQ0NFU1MgTUVUSE9EIHJldmFsaWRhdGlvbjoK Ky0tICAgbW92aW5nIGEgaGVhcCB0YWJsZSB0aGF0IGhhcyBzdGFuZGFyZCBoZWFwIG9wdGlv bnMgbm90IGFjY2VwdGVkIGJ5IHRoZQorLS0gICBuZXcgQU0gKHBhcmFsbGVsX3dvcmtlcnMp IGludG8gZHVtbXlfdGFibGVfYW0gbXVzdCBmYWlsIHdpdGggYSBjbGVhcgorLS0gICBtZXNz YWdlIGFuZCBtdXN0IE5PVCBzaWxlbnRseSBkcm9wIHRoZSBvcHRpb24uCitDUkVBVEUgVEFC TEUgaGVhcF90IChhIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDcwLCBwYXJhbGxlbF93b3Jr ZXJzID0gNCk7CitTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9 ICdoZWFwX3QnOjpyZWdjbGFzczsKKyAgICAgICAgICAgICByZWxvcHRpb25zICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisge2ZpbGxmYWN0 b3I9NzAscGFyYWxsZWxfd29ya2Vycz00fQorKDEgcm93KQorCitBTFRFUiBUQUJMRSBoZWFw X3QgU0VUIEFDQ0VTUyBNRVRIT0QgZHVtbXlfdGFibGVfYW07CitFUlJPUjogIHVucmVjb2du aXplZCBwYXJhbWV0ZXIgInBhcmFsbGVsX3dvcmtlcnMiCistLSBDb25maXJtIG5vdGhpbmcg Y2hhbmdlZAorU0VMRUNUIGFtbmFtZSBGUk9NIHBnX2NsYXNzIGMgSk9JTiBwZ19hbSBhIE9O IGEub2lkID0gYy5yZWxhbQorICAgIFdIRVJFIGMub2lkID0gJ2hlYXBfdCc6OnJlZ2NsYXNz OworIGFtbmFtZSAKKy0tLS0tLS0tCisgaGVhcAorKDEgcm93KQorCitTRUxFQ1QgcmVsb3B0 aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdoZWFwX3QnOjpyZWdjbGFzczsKKyAg ICAgICAgICAgICByZWxvcHRpb25zICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisge2ZpbGxmYWN0b3I9NzAscGFyYWxsZWxfd29ya2Vycz00 fQorKDEgcm93KQorCistLSBBZnRlciBSRVNFVGluZyB0aGUgb2ZmZW5kaW5nIG9wdGlvbiBp biB0aGUgc2FtZSBzdGF0ZW1lbnQgdGhlIHN3YXAKKy0tIHN1Y2NlZWRzOyBmaWxsZmFjdG9y IHN1cnZpdmVzIGJlY2F1c2UgZHVtbXlfdGFibGVfYW0gaW5oZXJpdHMgaXQgdmlhCistLSBh ZGRfcmVsb3B0aW9uX3RvX2tpbmQoKS4KK0FMVEVSIFRBQkxFIGhlYXBfdCBTRVQgQUNDRVNT IE1FVEhPRCBkdW1teV90YWJsZV9hbSwgUkVTRVQgKHBhcmFsbGVsX3dvcmtlcnMpOworU0VM RUNUIGFtbmFtZSBGUk9NIHBnX2NsYXNzIGMgSk9JTiBwZ19hbSBhIE9OIGEub2lkID0gYy5y ZWxhbQorICAgIFdIRVJFIGMub2lkID0gJ2hlYXBfdCc6OnJlZ2NsYXNzOworICAgICBhbW5h bWUgICAgIAorLS0tLS0tLS0tLS0tLS0tLQorIGR1bW15X3RhYmxlX2FtCisoMSByb3cpCisK K1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ2hlYXBfdCc6 OnJlZ2NsYXNzOworICAgcmVsb3B0aW9ucyAgICAKKy0tLS0tLS0tLS0tLS0tLS0tCisge2Zp bGxmYWN0b3I9NzB9CisoMSByb3cpCisKKy0tIEdvaW5nIGJhY2sgdG8gaGVhcCBzdGlsbCB3 b3JrczogaGVhcCBhY2NlcHRzIGZpbGxmYWN0b3IuCitBTFRFUiBUQUJMRSBoZWFwX3QgU0VU IEFDQ0VTUyBNRVRIT0QgaGVhcDsKK1NFTEVDVCBhbW5hbWUgRlJPTSBwZ19jbGFzcyBjIEpP SU4gcGdfYW0gYSBPTiBhLm9pZCA9IGMucmVsYW0KKyAgICBXSEVSRSBjLm9pZCA9ICdoZWFw X3QnOjpyZWdjbGFzczsKKyBhbW5hbWUgCistLS0tLS0tLQorIGhlYXAKKygxIHJvdykKKwor LS0gU0VUIEFDQ0VTUyBNRVRIT0QgKyBTRVQgKC4uLikgb2YgYW4gb3B0aW9uIHRoYXQgb25s eSB0aGUgbmV3IEFNIGFjY2VwdHMuCitDUkVBVEUgVEFCTEUgaGVhcF90b19kdCAoYSBpbnQp OworQUxURVIgVEFCTEUgaGVhcF90b19kdCBTRVQgQUNDRVNTIE1FVEhPRCBkdW1teV90YWJs ZV9hbSwgU0VUIChvcHRpb25faW50ID0gMjUpOworU0VMRUNUIGFtbmFtZSBGUk9NIHBnX2Ns YXNzIGMgSk9JTiBwZ19hbSBhIE9OIGEub2lkID0gYy5yZWxhbQorICAgIFdIRVJFIGMub2lk ID0gJ2hlYXBfdG9fZHQnOjpyZWdjbGFzczsKKyAgICAgYW1uYW1lICAgICAKKy0tLS0tLS0t LS0tLS0tLS0KKyBkdW1teV90YWJsZV9hbQorKDEgcm93KQorCitTRUxFQ1QgcmVsb3B0aW9u cyBGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdoZWFwX3RvX2R0Jzo6cmVnY2xhc3M7Cisg ICByZWxvcHRpb25zICAgIAorLS0tLS0tLS0tLS0tLS0tLS0KKyB7b3B0aW9uX2ludD0yNX0K KygxIHJvdykKKworLS0gUGFydGl0aW9uZWQtdGFibGUgaW5oZXJpdGFuY2U6IEFNIGRlY2xh cmVkIG9uIHRoZSBwYXJlbnQgcGFydGl0aW9uIGZsb3dzCistLSB0byBwYXJ0aXRpb25zIHRo YXQgZG9uJ3Qgb3ZlcnJpZGUgaXQuICBQYXJ0aXRpb25lZCB0YWJsZXMgdGhlbXNlbHZlcwor LS0gY2Fubm90IGNhcnJ5IHJlbG9wdGlvbnM7IHRoZSB0ZXN0IHZlcmlmaWVzIHRoZSBBTSBs b29rdXAgdGhhdAorLS0gRGVmaW5lUmVsYXRpb24gZG9lcyBmb3IgcGFydGl0aW9ucy4KK0NS RUFURSBUQUJMRSBwYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEpIFVTSU5H IGR1bW15X3RhYmxlX2FtOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9wMSBQQVJUSVRJT04gT0Yg cGFydGVkIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCkKKyAgICBXSVRIIChvcHRpb25f aW50ID0gMTEpOworU0VMRUNUIGMucmVsbmFtZSwKKyAgICAgICAoU0VMRUNUIGFtbmFtZSBG Uk9NIHBnX2FtIFdIRVJFIG9pZCA9IGMucmVsYW0pIEFTIGFtbmFtZSwKKyAgICAgICBjLnJl bG9wdGlvbnMKKyAgICBGUk9NIHBnX2NsYXNzIGMKKyAgICBXSEVSRSBjLm9pZCBJTiAoJ3Bh cnRlZCc6OnJlZ2NsYXNzLCAncGFydGVkX3AxJzo6cmVnY2xhc3MpCisgICAgT1JERVIgQlkg Yy5yZWxuYW1lOworICByZWxuYW1lICB8ICAgICBhbW5hbWUgICAgIHwgICByZWxvcHRpb25z ICAgIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQor IHBhcnRlZCAgICB8IGR1bW15X3RhYmxlX2FtIHwgCisgcGFydGVkX3AxIHwgZHVtbXlfdGFi bGVfYW0gfCB7b3B0aW9uX2ludD0xMX0KKygyIHJvd3MpCisKKy0tIEEgcGFydGl0aW9uIHRo YXQgZXhwbGljaXRseSBjaG9vc2VzIGhlYXAgbXVzdCByZWplY3Qgb3B0aW9ucyB0aGF0IGFy ZQorLS0gb25seSBrbm93biB0byB0aGUgcGFyZW50J3MgQU0uCitDUkVBVEUgVEFCTEUgcGFy dGVkX3AyIFBBUlRJVElPTiBPRiBwYXJ0ZWQgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgy MDApCisgICAgVVNJTkcgaGVhcCBXSVRIIChvcHRpb25faW50ID0gOSk7CitFUlJPUjogIHVu cmVjb2duaXplZCBwYXJhbWV0ZXIgIm9wdGlvbl9pbnQiCitEUk9QIFRBQkxFIHBhcnRlZDsK K0RST1AgVEFCTEUgaGVhcF90b19kdDsKK0RST1AgVEFCTEUgaGVhcF90OworRFJPUCBUQUJM RSBkdW1teV90OworRFJPUCBFWFRFTlNJT04gZHVtbXlfdGFibGVfYW07CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL21lc29uLmJ1aWxkIGIvc3JjL3Rl c3QvbW9kdWxlcy9kdW1teV90YWJsZV9hbS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWQzZmEyNDEwY2MKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxlX2FtL21lc29uLmJ1aWxkCkBAIC0wLDAg KzEsMzMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorCitkdW1teV90YWJsZV9hbV9zb3VyY2VzID0gZmlsZXMoCisgICdk dW1teV90YWJsZV9hbS5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisg IGR1bW15X3RhYmxlX2FtX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVy X3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICdkdW1teV90YWJsZV9hbScsCisg ICAgJy0tRklMRURFU0MnLCAnZHVtbXlfdGFibGVfYW0gLSB0YWJsZSBhY2Nlc3MgbWV0aG9k IHRlbXBsYXRlJyxdKQorZW5kaWYKKworZHVtbXlfdGFibGVfYW0gPSBzaGFyZWRfbW9kdWxl KCdkdW1teV90YWJsZV9hbScsCisgIGR1bW15X3RhYmxlX2FtX3NvdXJjZXMsCisgIGt3YXJn czogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9IGR1bW15X3Rh YmxlX2FtCisKK3Rlc3RfaW5zdGFsbF9kYXRhICs9IGZpbGVzKAorICAnZHVtbXlfdGFibGVf YW0uY29udHJvbCcsCisgICdkdW1teV90YWJsZV9hbS0tMS4wLnNxbCcsCispCisKK3Rlc3Rz ICs9IHsKKyAgJ25hbWUnOiAnZHVtbXlfdGFibGVfYW0nLAorICAnc2QnOiBtZXNvbi5jdXJy ZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwK KyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICdyZWxvcHRpb25zJywKKyAg ICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV90YWJs ZV9hbS9zcWwvcmVsb3B0aW9ucy5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X3RhYmxl X2FtL3NxbC9yZWxvcHRpb25zLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMTQ0NDI0N2IzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL2R1bW15X3RhYmxlX2FtL3NxbC9yZWxvcHRpb25zLnNxbApAQCAtMCwwICsxLDg5IEBA CistLSBUZXN0cyBmb3IgdGhlIHRhYmxlIEFNIGFtb3B0aW9ucyBjYWxsYmFjayBhbmQgYWRk X3JlbG9wdGlvbl90b19raW5kKCkKK0NSRUFURSBFWFRFTlNJT04gZHVtbXlfdGFibGVfYW07 CisKKy0tIFNhbml0eTogQ1JFQVRFIFRBQkxFIHdpdGggQU0tc3BlY2lmaWMgb3B0aW9ucyBz dWNjZWVkcyBhbmQgcm91bmQtdHJpcHMKK0NSRUFURSBUQUJMRSBkdW1teV90IChhIGludCkg VVNJTkcgZHVtbXlfdGFibGVfYW0KKyAgICBXSVRIIChvcHRpb25faW50ID0gMTcsIG9wdGlv bl9yZWFsID0gMi41LCBvcHRpb25fYm9vbCA9IGZhbHNlLAorICAgICAgICAgIG9wdGlvbl9l bnVtID0gJ3R3bycsIGZpbGxmYWN0b3IgPSA2MCk7CitTRUxFQ1QgcmVsb3B0aW9ucyBGUk9N IHBnX2NsYXNzCisgICAgV0hFUkUgb2lkID0gJ2R1bW15X3QnOjpyZWdjbGFzcyBPUkRFUiBC WSByZWxvcHRpb25zOworCistLSBBTS1zcGVjaWZpYyBvcHRpb24gcmFuZ2VzIGFyZSBlbmZv cmNlZCAob3B0aW9uX2ludCBhbGxvd3MgLTEwLi4xMDApCitDUkVBVEUgVEFCTEUgZHVtbXlf b29yIChhIGludCkgVVNJTkcgZHVtbXlfdGFibGVfYW0gV0lUSCAob3B0aW9uX2ludCA9IDk5 OTkpOworCistLSBVbmtub3duIG9wdGlvbnMgYXJlIHJlamVjdGVkIGF0IENSRUFURSBUQUJM RSB0aW1lCitDUkVBVEUgVEFCTEUgZHVtbXlfYmFkIChhIGludCkgVVNJTkcgZHVtbXlfdGFi bGVfYW0gV0lUSCAocGFyYWxsZWxfd29ya2VycyA9IDQpOworCistLSBEZWZhdWx0IHZhbHVl cyBsYW5kIGluIHBnX2NsYXNzIG9ubHkgd2hlbiB0aGUgdXNlciBkaWQgbm90IHNldCB0aGVt CitDUkVBVEUgVEFCTEUgZHVtbXlfZGVmYXVsdHMgKGEgaW50KSBVU0lORyBkdW1teV90YWJs ZV9hbTsKK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ2R1 bW15X2RlZmF1bHRzJzo6cmVnY2xhc3M7CitEUk9QIFRBQkxFIGR1bW15X2RlZmF1bHRzOwor CistLSBBTFRFUiBUQUJMRSAuLi4gU0VUICguLi4pIHdpdGggQU0tc3BlY2lmaWMgb3B0aW9u CitBTFRFUiBUQUJMRSBkdW1teV90IFNFVCAob3B0aW9uX2ludCA9IDQyKTsKK1NFTEVDVCBy ZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ2R1bW15X3QnOjpyZWdjbGFz czsKKworLS0gQUxURVIgVEFCTEUgLi4uIFNFVCAoLi4uKSB3aXRoIGFuIHVua25vd24gb3B0 aW9uIGVycm9ycworQUxURVIgVEFCTEUgZHVtbXlfdCBTRVQgKHBhcmFsbGVsX3dvcmtlcnMg PSA0KTsKKworLS0gQUxURVIgVEFCTEUgLi4uIFJFU0VUIChvcHRpb24pIHJvdW5kLXRyaXBz CitBTFRFUiBUQUJMRSBkdW1teV90IFJFU0VUIChvcHRpb25faW50KTsKK1NFTEVDVCByZWxv cHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ2R1bW15X3QnOjpyZWdjbGFzczsK KworLS0gU0VUIEFDQ0VTUyBNRVRIT0QgcmV2YWxpZGF0aW9uOgorLS0gICBtb3ZpbmcgYSBo ZWFwIHRhYmxlIHRoYXQgaGFzIHN0YW5kYXJkIGhlYXAgb3B0aW9ucyBub3QgYWNjZXB0ZWQg YnkgdGhlCistLSAgIG5ldyBBTSAocGFyYWxsZWxfd29ya2VycykgaW50byBkdW1teV90YWJs ZV9hbSBtdXN0IGZhaWwgd2l0aCBhIGNsZWFyCistLSAgIG1lc3NhZ2UgYW5kIG11c3QgTk9U IHNpbGVudGx5IGRyb3AgdGhlIG9wdGlvbi4KK0NSRUFURSBUQUJMRSBoZWFwX3QgKGEgaW50 KSBXSVRIIChmaWxsZmFjdG9yID0gNzAsIHBhcmFsbGVsX3dvcmtlcnMgPSA0KTsKK1NFTEVD VCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ2hlYXBfdCc6OnJlZ2Ns YXNzOworQUxURVIgVEFCTEUgaGVhcF90IFNFVCBBQ0NFU1MgTUVUSE9EIGR1bW15X3RhYmxl X2FtOworLS0gQ29uZmlybSBub3RoaW5nIGNoYW5nZWQKK1NFTEVDVCBhbW5hbWUgRlJPTSBw Z19jbGFzcyBjIEpPSU4gcGdfYW0gYSBPTiBhLm9pZCA9IGMucmVsYW0KKyAgICBXSEVSRSBj Lm9pZCA9ICdoZWFwX3QnOjpyZWdjbGFzczsKK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdf Y2xhc3MgV0hFUkUgb2lkID0gJ2hlYXBfdCc6OnJlZ2NsYXNzOworCistLSBBZnRlciBSRVNF VGluZyB0aGUgb2ZmZW5kaW5nIG9wdGlvbiBpbiB0aGUgc2FtZSBzdGF0ZW1lbnQgdGhlIHN3 YXAKKy0tIHN1Y2NlZWRzOyBmaWxsZmFjdG9yIHN1cnZpdmVzIGJlY2F1c2UgZHVtbXlfdGFi bGVfYW0gaW5oZXJpdHMgaXQgdmlhCistLSBhZGRfcmVsb3B0aW9uX3RvX2tpbmQoKS4KK0FM VEVSIFRBQkxFIGhlYXBfdCBTRVQgQUNDRVNTIE1FVEhPRCBkdW1teV90YWJsZV9hbSwgUkVT RVQgKHBhcmFsbGVsX3dvcmtlcnMpOworU0VMRUNUIGFtbmFtZSBGUk9NIHBnX2NsYXNzIGMg Sk9JTiBwZ19hbSBhIE9OIGEub2lkID0gYy5yZWxhbQorICAgIFdIRVJFIGMub2lkID0gJ2hl YXBfdCc6OnJlZ2NsYXNzOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVS RSBvaWQgPSAnaGVhcF90Jzo6cmVnY2xhc3M7CisKKy0tIEdvaW5nIGJhY2sgdG8gaGVhcCBz dGlsbCB3b3JrczogaGVhcCBhY2NlcHRzIGZpbGxmYWN0b3IuCitBTFRFUiBUQUJMRSBoZWFw X3QgU0VUIEFDQ0VTUyBNRVRIT0QgaGVhcDsKK1NFTEVDVCBhbW5hbWUgRlJPTSBwZ19jbGFz cyBjIEpPSU4gcGdfYW0gYSBPTiBhLm9pZCA9IGMucmVsYW0KKyAgICBXSEVSRSBjLm9pZCA9 ICdoZWFwX3QnOjpyZWdjbGFzczsKKworLS0gU0VUIEFDQ0VTUyBNRVRIT0QgKyBTRVQgKC4u Likgb2YgYW4gb3B0aW9uIHRoYXQgb25seSB0aGUgbmV3IEFNIGFjY2VwdHMuCitDUkVBVEUg VEFCTEUgaGVhcF90b19kdCAoYSBpbnQpOworQUxURVIgVEFCTEUgaGVhcF90b19kdCBTRVQg QUNDRVNTIE1FVEhPRCBkdW1teV90YWJsZV9hbSwgU0VUIChvcHRpb25faW50ID0gMjUpOwor U0VMRUNUIGFtbmFtZSBGUk9NIHBnX2NsYXNzIGMgSk9JTiBwZ19hbSBhIE9OIGEub2lkID0g Yy5yZWxhbQorICAgIFdIRVJFIGMub2lkID0gJ2hlYXBfdG9fZHQnOjpyZWdjbGFzczsKK1NF TEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ2hlYXBfdG9fZHQn OjpyZWdjbGFzczsKKworLS0gUGFydGl0aW9uZWQtdGFibGUgaW5oZXJpdGFuY2U6IEFNIGRl Y2xhcmVkIG9uIHRoZSBwYXJlbnQgcGFydGl0aW9uIGZsb3dzCistLSB0byBwYXJ0aXRpb25z IHRoYXQgZG9uJ3Qgb3ZlcnJpZGUgaXQuICBQYXJ0aXRpb25lZCB0YWJsZXMgdGhlbXNlbHZl cworLS0gY2Fubm90IGNhcnJ5IHJlbG9wdGlvbnM7IHRoZSB0ZXN0IHZlcmlmaWVzIHRoZSBB TSBsb29rdXAgdGhhdAorLS0gRGVmaW5lUmVsYXRpb24gZG9lcyBmb3IgcGFydGl0aW9ucy4K K0NSRUFURSBUQUJMRSBwYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEpIFVT SU5HIGR1bW15X3RhYmxlX2FtOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9wMSBQQVJUSVRJT04g T0YgcGFydGVkIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCkKKyAgICBXSVRIIChvcHRp b25faW50ID0gMTEpOworU0VMRUNUIGMucmVsbmFtZSwKKyAgICAgICAoU0VMRUNUIGFtbmFt ZSBGUk9NIHBnX2FtIFdIRVJFIG9pZCA9IGMucmVsYW0pIEFTIGFtbmFtZSwKKyAgICAgICBj LnJlbG9wdGlvbnMKKyAgICBGUk9NIHBnX2NsYXNzIGMKKyAgICBXSEVSRSBjLm9pZCBJTiAo J3BhcnRlZCc6OnJlZ2NsYXNzLCAncGFydGVkX3AxJzo6cmVnY2xhc3MpCisgICAgT1JERVIg QlkgYy5yZWxuYW1lOworCistLSBBIHBhcnRpdGlvbiB0aGF0IGV4cGxpY2l0bHkgY2hvb3Nl cyBoZWFwIG11c3QgcmVqZWN0IG9wdGlvbnMgdGhhdCBhcmUKKy0tIG9ubHkga25vd24gdG8g dGhlIHBhcmVudCdzIEFNLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9wMiBQQVJUSVRJT04gT0Yg cGFydGVkIEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAoMjAwKQorICAgIFVTSU5HIGhlYXAg V0lUSCAob3B0aW9uX2ludCA9IDkpOworCitEUk9QIFRBQkxFIHBhcnRlZDsKK0RST1AgVEFC TEUgaGVhcF90b19kdDsKK0RST1AgVEFCTEUgaGVhcF90OworRFJPUCBUQUJMRSBkdW1teV90 OworCitEUk9QIEVYVEVOU0lPTiBkdW1teV90YWJsZV9hbTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxk CmluZGV4IDRiY2E0MmJiMzcwLi4wN2I2YjI0YTVhYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxk CkBAIC01LDYgKzUsNyBAQCBzdWJkaXIoJ2NvbW1pdF90cycpCiBzdWJkaXIoJ2RlbGF5X2V4 ZWN1dGlvbicpCiBzdWJkaXIoJ2R1bW15X2luZGV4X2FtJykKIHN1YmRpcignZHVtbXlfc2Vj bGFiZWwnKQorc3ViZGlyKCdkdW1teV90YWJsZV9hbScpCiBzdWJkaXIoJ2dpbicpCiBzdWJk aXIoJ2luZGV4JykKIHN1YmRpcignaW5qZWN0aW9uX3BvaW50cycpCi0tIAoyLjQzLjAKCg== --------------7QeX0lSEw15zLTDwEHIRMREc--