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.94.2) (envelope-from ) id 1v89jF-00DeqZ-TJ for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Oct 2025 04:00:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v89jC-003xN5-Fy for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Oct 2025 04:00:07 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v89jB-003xMt-Pm for pgsql-hackers@lists.postgresql.org; Mon, 13 Oct 2025 04:00:07 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v89jA-001S9J-0Z for pgsql-hackers@postgresql.org; Mon, 13 Oct 2025 04:00:05 +0000 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-46e61ebddd6so39737555e9.0 for ; Sun, 12 Oct 2025 21:00:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760328002; x=1760932802; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=WLqpePyWLseIidLA1wJxK8jxskhKI12liLrldcFdYsg=; b=ilFvSCzEane0banabalfwhmZdwOHBNicgZu3ZJ6oOEpB0Aa/BW/GfXzMCglf9LpNjn 5yfrjtC/kk38v+ppRLAiebXBA0Yw+X3cXbmvO81u4wvaGKvPsZj420alYQTjxII96dcu vTbHIYzkvoWsiGWl6ysP86OCrV0g+PHQSw+mAAQH8TkQv6ogXHiWXTCOIE52ZpH8PyNi IAgJkEc9YSD5KKNf5NmZZc4pesVaNX+Czpgw2h6f21MAsEe9iOUZneQ3tV2bLp5yh1WD OhP/mkfxXcSqN9JOp4rBZFeHEBAFLoo4rulWKU1z3FtiwV98YlyZU4wcxGFkcXpZgP6e VERA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760328002; x=1760932802; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=WLqpePyWLseIidLA1wJxK8jxskhKI12liLrldcFdYsg=; b=bC2jwfVB6reuv5vVZ4+R+yRnIVIgTS7d8KwILnUxbpPFAhiQIh71Hmwv1ntyB/LxeR afK4pHJGjXsnROCK9Y9Awlvz8/R9bhZdyrHstIxQfEoOQ/U9QXyZPfr1TsEBWB2SAbdE dHi5rfJTFqTRtne2maM0Jy9HvkFc7wx/QSs0KbgxqpOscJN495MZa6PYNTZUZJ6DkrLT Z3SfIJeijxsDakhFXbRanLLLBAixyH5h4AbfeuG4uFEkK1HR+85b6uAv7LQT+6XPd5LR OryjJYIxFaUqFvSCdy0XM8nOER90Ir9IMTHTiQugKeAqNKxLjGFu+jzR66453lXmHWiH a5Vw== X-Forwarded-Encrypted: i=1; AJvYcCUdAzgJs1VLlqL7by7SNvOIY/AaIxZ6mg/UryO7AiSBRqMHpISrkNI9Iye+++S2kYxRqsjBJhCz4/DGLsV5@postgresql.org X-Gm-Message-State: AOJu0YwrIHWhqrIFihnwtmRq/STSQQFB7Z6O/Ny4pGuBSk2Xr5+n0u26 FrW4FlVNpKe5t/QvGYa25Si4v0U434b9kFWOFMEjZ1ab6gUw+h6H5eH6 X-Gm-Gg: ASbGnctf2vN4X+p9pXZFDFM9y06BrIl/3TPF7PEKG1Dbc2Xfs/b7SHpXjPKxnPc3EYR DeXDuQtGeUA6ezkOL9ujQ7ti+I5BCcUB0vNJKcGxI89a7molGHDOSo2TCDh7+AcWYT1xgddHxSb 4i31b0O1g+M4XMGpVwawjlmVkn1jgAcvJDodJI3y72KUhqcXNdatXeNkr8pw2qoQK5jKn6mhoqx nfqUqFF7Caknk+IlNxjI9hVztDUV2uc3vBP8ePRzSO94W16hGQn7Rzc/jhUaZuJvEhz41UPfGBi 0lPeikq7e4b5di/HcjKKzi46FvmQ314fma8dv1fOo5Q2aBXbBkm1bv7jIcXYUiMUMlLYdIUVE5s dtuWPTg2egF5H9sjYm/rQrwS8Owo7IPkm4nFn9e/BW5VOYe6RN8MhSBw= X-Google-Smtp-Source: AGHT+IFpZV+Z5HnJ+/YnPC/bCKWxLo9wwDvF6D9mpN8euwmi5JQ/ZpoUFacO83a1G5y0XNXFZ0OpIA== X-Received: by 2002:a05:600c:1ca0:b0:46f:c576:189e with SMTP id 5b1f17b1804b1-46fc5761d4bmr19921315e9.35.1760328002388; Sun, 12 Oct 2025 21:00:02 -0700 (PDT) Received: from [192.168.0.50] ([89.149.120.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46fb482b9easm167878765e9.1.2025.10.12.21.00.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 12 Oct 2025 21:00:01 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------3C5tAGfFK3iSpWqimb0IaPIy" Message-ID: Date: Mon, 13 Oct 2025 07:00:00 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: IO in wrong state on riscv64 To: Thomas Munro Cc: Andres Freund , pgsql-hackers , greg@burd.me References: <60bbebf4-0a80-4e5f-83c0-311c85f6bd5c@gmail.com> Content-Language: en-US From: Alexander Lakhin In-Reply-To: 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. --------------3C5tAGfFK3iSpWqimb0IaPIy Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 13.10.2025 01:44, Thomas Munro wrote: > On Sun, Oct 12, 2025 at 6:00 PM Alexander Lakhin wrote: >> Please find those attached (gdb "disass/m pgaio_io_update_state" misses >> the start of the function (but it's still disassembled below), so I >> decided to share the whole output). > Could you please also disassemble pgaio_io_reclaim()? Sure, the output of disass/m pgaio_io_reclaim is attached. A side note: I could not reproduce the hang so far — 8 out of 30 iterations of 027_stream_regress failed, but all completed within 700-800 seconds. Best regards, Alexander --------------3C5tAGfFK3iSpWqimb0IaPIy Content-Type: text/plain; charset=UTF-8; name="pgaio_io_reclaim.asm" Content-Disposition: attachment; filename="pgaio_io_reclaim.asm" Content-Transfer-Encoding: base64 R05VIGdkYiAoRGViaWFuIDE1LjItMSkgMTUuMgpDb3B5cmlnaHQgKEMpIDIwMjQgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkxpY2Vuc2UgR1BMdjMrOiBHTlUgR1BMIHZlcnNp b24gMyBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWw+ClRoaXMg aXMgZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmli dXRlIGl0LgpUaGVyZSBpcyBOTyBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQg YnkgbGF3LgpUeXBlICJzaG93IGNvcHlpbmciIGFuZCAic2hvdyB3YXJyYW50eSIgZm9yIGRl dGFpbHMuClRoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICJyaXNjdjY0LWxpbnV4LWdudSIu ClR5cGUgInNob3cgY29uZmlndXJhdGlvbiIgZm9yIGNvbmZpZ3VyYXRpb24gZGV0YWlscy4K Rm9yIGJ1ZyByZXBvcnRpbmcgaW5zdHJ1Y3Rpb25zLCBwbGVhc2Ugc2VlOgo8aHR0cHM6Ly93 d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGIvYnVncy8+LgpGaW5kIHRoZSBHREIgbWFudWFsIGFu ZCBvdGhlciBkb2N1bWVudGF0aW9uIHJlc291cmNlcyBvbmxpbmUgYXQ6CiAgICA8aHR0cDov L3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYi9kb2N1bWVudGF0aW9uLz4uCgpGb3IgaGVscCwg dHlwZSAiaGVscCIuClR5cGUgImFwcm9wb3Mgd29yZCIgdG8gc2VhcmNoIGZvciBjb21tYW5k cyByZWxhdGVkIHRvICJ3b3JkIi4uLgpSZWFkaW5nIHN5bWJvbHMgZnJvbSB0bXBfaW5zdGFs bC91c3IvbG9jYWwvcGdzcWwvYmluL3Bvc3RncmVzLi4uCihnZGIpIER1bXAgb2YgYXNzZW1i bGVyIGNvZGUgZm9yIGZ1bmN0aW9uIHBnYWlvX2lvX3JlY2xhaW06CjM0MQkJQXNzZXJ0KGlv aCA+PSBwZ2Fpb19jdGwtPmlvX2hhbmRsZXMgJiYKICAgMHgwMDAwMDAwMDAwNDM2NmQwIDwr MTYyPjoJYXVpcGMJYTAsMHg0YzMKICAgMHgwMDAwMDAwMDAwNDM2NmQ0IDwrMTY2PjoJbGQJ YTEsLTExOTIoYTApICMgMHg4ZjkyMjggPHBnYWlvX2N0bD4KICAgMHgwMDAwMDAwMDAwNDM2 NmQ4IDwrMTcwPjoJbGQJYTAsNDgoYTEpCiAgIDB4MDAwMDAwMDAwMDQzNjZkYSA8KzE3Mj46 CWJsdHUJczAsYTAsMHg0MzY4ODYgPHBnYWlvX2lvX3JlY2xhaW0rNjAwPgogICAweDAwMDAw MDAwMDA0MzY2ZGUgPCsxNzY+Oglsd3UJYTEsNDAoYTEpCiAgIDB4MDAwMDAwMDAwMDQzNjZl MiA8KzE4MD46CWxpCWEyLDE0NAogICAweDAwMDAwMDAwMDA0MzY2ZTYgPCsxODQ+OgltdWwJ YTEsYTEsYTIKICAgMHgwMDAwMDAwMDAwNDM2NmVhIDwrMTg4PjoJYWRkCWExLGExLGEwCiAg IDB4MDAwMDAwMDAwMDQzNjZlYyA8KzE5MD46CWJnZXUJczAsYTEsMHg0MzY4ODYgPHBnYWlv X2lvX3JlY2xhaW0rNjAwPgogICAweDAwMDAwMDAwMDA0MzY2ZjAgPCsxOTQ+OglhdWlwYwlh MSwweDRjMQogICAweDAwMDAwMDAwMDA0MzY2ZjQgPCsxOTg+OglsZAlzNCwtMjk2KGExKSAj IDB4OGY3NWM4CiAgIDB4MDAwMDAwMDAwMDQzNjg4NiA8KzYwMD46CWF1aXBjCWEwLDB4MjQy CiAgIDB4MDAwMDAwMDAwMDQzNjg4YSA8KzYwND46CWFkZGkJYTAsYTAsLTI3MSAjIDB4Njc4 Nzc3CiAgIDB4MDAwMDAwMDAwMDQzNjg4ZSA8KzYwOD46CWF1aXBjCWExLDB4MjQyCiAgIDB4 MDAwMDAwMDAwMDQzNjg5MiA8KzYxMj46CWFkZGkJYTEsYTEsLTY1NyAjIDB4Njc4NWZkCiAg IDB4MDAwMDAwMDAwMDQzNjg5NiA8KzYxNj46CWxpCWEyLDM0MgogICAweDAwMDAwMDAwMDA0 MzY4OWEgPCs2MjA+OglhdWlwYwlyYSwweDE2MAogICAweDAwMDAwMDAwMDA0MzY4OWUgPCs2 MjQ+OglqYWxyCTE3NChyYSkgIyAweDU5Njk0OCA8RXhjZXB0aW9uYWxDb25kaXRpb24+Cgoz NDIJCQkgICBpb2ggPCAocGdhaW9fY3RsLT5pb19oYW5kbGVzICsgcGdhaW9fY3RsLT5pb19o YW5kbGVfY291bnQpKTsKMzQzCQlyZXR1cm4gaW9oIC0gcGdhaW9fY3RsLT5pb19oYW5kbGVz OwogICAweDAwMDAwMDAwMDA0MzY2ZjggPCsyMDI+OglzdWIJczEsczAsYTAKICAgMHgwMDAw MDAwMDAwNDM2NmZjIDwrMjA2PjoJc3JhaQlzMSxzMSwweDQKCjM0NAl9CjM0NQkKMzQ2CS8q CjM0NwkgKiBSZXR1cm4gdGhlIFByb2NOdW1iZXIgZm9yIHRoZSBwcm9jZXNzIHRoYXQgY2Fu IHVzZSBhbiBJTyBoYW5kbGUuIFRoZQozNDgJICogbWFwcGluZyBmcm9tIElPIGhhbmRsZXMg dG8gUEdQUk9DcyBpcyBzdGF0aWMsIHRoZXJlZm9yZSB0aGlzIGV2ZW4gd29ya3MKMzQ5CSAq IHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgUEdQUk9DIGlzIG5vdCBpbiB1c2UuCjM1MAkgKi8K MzUxCVByb2NOdW1iZXIKMzUyCXBnYWlvX2lvX2dldF9vd25lcihQZ0Fpb0hhbmRsZSAqaW9o KQozNTMJewozNTQJCXJldHVybiBpb2gtPm93bmVyX3Byb2NubzsKMzU1CX0KMzU2CQozNTcJ LyoKMzU4CSAqIFJldHVybiBhIHdhaXQgcmVmZXJlbmNlIGZvciB0aGUgSU8uIE9ubHkgd2Fp dCByZWZlcmVuY2VzIGNhbiBiZSB1c2VkIHRvCjM1OQkgKiB3YWl0IGZvciBhbiBJT3MgY29t cGxldGlvbiwgYXMgaGFuZGxlcyB0aGVtc2VsdmVzIGNhbiBiZSByZXVzZWQgYWZ0ZXIKMzYw CSAqIGNvbXBsZXRpb24uICBTZWUgYWxzbyB0aGUgY29tbWVudCBhYm92ZSBwZ2Fpb19pb19h Y3F1aXJlKCkuCjM2MQkgKi8KMzYyCXZvaWQKMzYzCXBnYWlvX2lvX2dldF93cmVmKFBnQWlv SGFuZGxlICppb2gsIFBnQWlvV2FpdFJlZiAqaW93KQozNjQJewozNjUJCUFzc2VydChpb2gt PnN0YXRlID09IFBHQUlPX0hTX0hBTkRFRF9PVVQgfHwKMzY2CQkJICAgaW9oLT5zdGF0ZSA9 PSBQR0FJT19IU19ERUZJTkVEIHx8CjM2NwkJCSAgIGlvaC0+c3RhdGUgPT0gUEdBSU9fSFNf U1RBR0VEKTsKMzY4CQlBc3NlcnQoaW9oLT5nZW5lcmF0aW9uICE9IDApOwozNjkJCjM3MAkJ aW93LT5haW9faW5kZXggPSBpb2ggLSBwZ2Fpb19jdGwtPmlvX2hhbmRsZXM7CjM3MQkJaW93 LT5nZW5lcmF0aW9uX3VwcGVyID0gKHVpbnQzMikgKGlvaC0+Z2VuZXJhdGlvbiA+PiAzMik7 CjM3MgkJaW93LT5nZW5lcmF0aW9uX2xvd2VyID0gKHVpbnQzMikgaW9oLT5nZW5lcmF0aW9u OwozNzMJfQozNzQJCjM3NQkKMzc2CQozNzcJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KMzc4CSAqIEludGVybmFsIEZ1bmN0aW9ucyByZWxhdGVkIHRvIFBnQWlvSGFuZGxlCjM3 OQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQozODAJICovCjM4MQkKMzgyCXN0YXRp YyBpbmxpbmUgdm9pZAozODMJcGdhaW9faW9fdXBkYXRlX3N0YXRlKFBnQWlvSGFuZGxlICpp b2gsIFBnQWlvSGFuZGxlU3RhdGUgbmV3X3N0YXRlKQozODQJewozODUJCS8qCjM4NgkJICog QWxsIGNhbGxlcnMgbmVlZCB0byBoYXZlIGhlbGQgaW50ZXJydXB0cyBpbiBzb21lIGZvcm0s IG90aGVyd2lzZQozODcJCSAqIGludGVycnVwdCBwcm9jZXNzaW5nIGNvdWxkIHdhaXQgZm9y IHRoZSBJTyB0byBjb21wbGV0ZSwgd2hpbGUgaW4gYW4KMzg4CQkgKiBpbnRlcm1lZGlhcnkg c3RhdGUuCjM4OQkJICovCjM5MAkJQXNzZXJ0KCFJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNT RUQoKSk7CjM5MQkKMzkyCQlwZ2Fpb19kZWJ1Z19pbyhERUJVRzUsIGlvaCwKMzkzCQkJCQkg ICAidXBkYXRpbmcgc3RhdGUgdG8gJXMiLAozOTQJCQkJCSAgIHBnYWlvX2lvX3N0YXRlX2dl dF9uYW1lKG5ld19zdGF0ZSkpOwozOTUJCjM5NgkJLyoKMzk3CQkgKiBFbnN1cmUgdGhlIGNo YW5nZXMgc2lnbmlmaWVkIGJ5IHRoZSBuZXcgc3RhdGUgYXJlIHZpc2libGUgYmVmb3JlIHRo ZQozOTgJCSAqIG5ldyBzdGF0ZSBiZWNvbWVzIHZpc2libGUuCjM5OQkJICovCjQwMAkJcGdf d3JpdGVfYmFycmllcigpOwo0MDEJCjQwMgkJaW9oLT5zdGF0ZSA9IG5ld19zdGF0ZTsKNDAz CX0KNDA0CQo0MDUJc3RhdGljIHZvaWQKNDA2CXBnYWlvX2lvX3Jlc293bmVyX3JlZ2lzdGVy KFBnQWlvSGFuZGxlICppb2gpCjQwNwl7CjQwOAkJQXNzZXJ0KCFpb2gtPnJlc293bmVyKTsK NDA5CQlBc3NlcnQoQ3VycmVudFJlc291cmNlT3duZXIpOwo0MTAJCjQxMQkJUmVzb3VyY2VP d25lclJlbWVtYmVyQWlvSGFuZGxlKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmaW9oLT5yZXNv d25lcl9ub2RlKTsKNDEyCQlpb2gtPnJlc293bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7 CjQxMwl9CjQxNAkKNDE1CS8qCjQxNgkgKiBTdGFnZSBJTyBmb3IgZXhlY3V0aW9uIGFuZCwg aWYgYXBwcm9wcmlhdGUsIHN1Ym1pdCBpdCBpbW1lZGlhdGVseS4KNDE3CSAqCjQxOAkgKiBT aG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBwZ2Fpb19pb19zdGFydF8qKCkuCjQxOQkgKi8K NDIwCXZvaWQKNDIxCXBnYWlvX2lvX3N0YWdlKFBnQWlvSGFuZGxlICppb2gsIFBnQWlvT3Ag b3ApCjQyMgl7CjQyMwkJYm9vbAkJbmVlZHNfc3luY2hyb25vdXM7CjQyNAkKNDI1CQlBc3Nl cnQoaW9oLT5zdGF0ZSA9PSBQR0FJT19IU19IQU5ERURfT1VUKTsKNDI2CQlBc3NlcnQocGdh aW9fbXlfYmFja2VuZC0+aGFuZGVkX291dF9pbyA9PSBpb2gpOwo0MjcJCUFzc2VydChwZ2Fp b19pb19oYXNfdGFyZ2V0KGlvaCkpOwo0MjgJCjQyOQkJLyoKNDMwCQkgKiBPdGhlcndpc2Ug YW4gaW50ZXJydXB0LCBpbiB0aGUgbWlkZGxlIG9mIHN0YWdpbmcgYW5kIHBvc3NpYmx5IGV4 ZWN1dGluZwo0MzEJCSAqIHRoZSBJTywgY291bGQgZW5kIHVwIHRyeWluZyB0byB3YWl0IGZv ciB0aGUgSU8sIGxlYWRpbmcgdG8gc3RhdGUKNDMyCQkgKiBjb25mdXNpb24uCjQzMwkJICov CjQzNAkJSE9MRF9JTlRFUlJVUFRTKCk7CjQzNQkKNDM2CQlpb2gtPm9wID0gb3A7CjQzNwkJ aW9oLT5yZXN1bHQgPSAwOwo0MzgJCjQzOQkJcGdhaW9faW9fdXBkYXRlX3N0YXRlKGlvaCwg UEdBSU9fSFNfREVGSU5FRCk7CjQ0MAkKNDQxCQkvKiBhbGxvdyBhIG5ldyBJTyB0byBiZSBz dGFnZWQgKi8KNDQyCQlwZ2Fpb19teV9iYWNrZW5kLT5oYW5kZWRfb3V0X2lvID0gTlVMTDsK NDQzCQo0NDQJCXBnYWlvX2lvX2NhbGxfc3RhZ2UoaW9oKTsKNDQ1CQo0NDYJCXBnYWlvX2lv X3VwZGF0ZV9zdGF0ZShpb2gsIFBHQUlPX0hTX1NUQUdFRCk7CjQ0NwkKNDQ4CQkvKgo0NDkJ CSAqIFN5bmNocm9ub3VzIGV4ZWN1dGlvbiBoYXMgdG8gYmUgZXhlY3V0ZWQsIHdlbGwsIHN5 bmNocm9ub3VzbHksIHNvIGNoZWNrCjQ1MAkJICogdGhhdCBmaXJzdC4KNDUxCQkgKi8KNDUy CQluZWVkc19zeW5jaHJvbm91cyA9IHBnYWlvX2lvX25lZWRzX3N5bmNocm9ub3VzX2V4ZWN1 dGlvbihpb2gpOwo0NTMJCjQ1NAkJcGdhaW9fZGVidWdfaW8oREVCVUczLCBpb2gsCjQ1NQkJ CQkJICAgInN0YWdlZCAoc3luY2hyb25vdXM6ICVkLCBpbl9iYXRjaDogJWQpIiwKNDU2CQkJ CQkgICBuZWVkc19zeW5jaHJvbm91cywgcGdhaW9fbXlfYmFja2VuZC0+aW5fYmF0Y2htb2Rl KTsKNDU3CQo0NTgJCWlmICghbmVlZHNfc3luY2hyb25vdXMpCjQ1OQkJewo0NjAJCQlwZ2Fp b19teV9iYWNrZW5kLT5zdGFnZWRfaW9zW3BnYWlvX215X2JhY2tlbmQtPm51bV9zdGFnZWRf aW9zKytdID0gaW9oOwo0NjEJCQlBc3NlcnQocGdhaW9fbXlfYmFja2VuZC0+bnVtX3N0YWdl ZF9pb3MgPD0gUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOwo0NjIJCjQ2MwkJCS8qCjQ2NAkJ CSAqIFVubGVzcyBjb2RlIGV4cGxpY2l0bHkgb3B0ZWQgaW50byBiYXRjaGluZyBJT3MsIHN1 Ym1pdCB0aGUgSU8KNDY1CQkJICogaW1tZWRpYXRlbHkuCjQ2NgkJCSAqLwo0NjcJCQlpZiAo IXBnYWlvX215X2JhY2tlbmQtPmluX2JhdGNobW9kZSkKNDY4CQkJCXBnYWlvX3N1Ym1pdF9z dGFnZWQoKTsKNDY5CQl9CjQ3MAkJZWxzZQo0NzEJCXsKNDcyCQkJcGdhaW9faW9fcHJlcGFy ZV9zdWJtaXQoaW9oKTsKNDczCQkJcGdhaW9faW9fcGVyZm9ybV9zeW5jaHJvbm91c2x5KGlv aCk7CjQ3NAkJfQo0NzUJCjQ3NgkJUkVTVU1FX0lOVEVSUlVQVFMoKTsKNDc3CX0KNDc4CQo0 NzkJYm9vbAo0ODAJcGdhaW9faW9fbmVlZHNfc3luY2hyb25vdXNfZXhlY3V0aW9uKFBnQWlv SGFuZGxlICppb2gpCjQ4MQl7CjQ4MgkJLyoKNDgzCQkgKiBJZiB0aGUgY2FsbGVyIHNhaWQg dG8gZXhlY3V0ZSB0aGUgSU8gc3luY2hyb25vdXNseSwgZG8gc28uCjQ4NAkJICoKNDg1CQkg KiBYWFg6IFdlIGNvdWxkIG9wdGltaXplIHRoZSBsb2dpYyB3aGVuIHRvIGV4ZWN1dGUgc3lu Y2hyb25vdXNseSBieSBmaXJzdAo0ODYJCSAqIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBvdGhl ciBJT3MgaW4gZmxpZ2h0IGFuZCBvbmx5IHN5bmNocm9ub3VzbHkKNDg3CQkgKiBleGVjdXRp bmcgaWYgbm90LiBVbmNsZWFyIHdoZXRoZXIgdGhhdCdsbCBiZSBzdWZmaWNpZW50bHkgY29t bW9uIHRvIGJlCjQ4OAkJICogd29ydGggd29ycnlpbmcgYWJvdXQuCjQ4OQkJICovCjQ5MAkJ aWYgKGlvaC0+ZmxhZ3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUykKNDkxCQkJcmV0dXJuIHRy dWU7CjQ5MgkKNDkzCQkvKiBDaGVjayBpZiB0aGUgSU8gbWV0aG9kIHJlcXVpcmVzIHN5bmNo cm9ub3VzIGV4ZWN1dGlvbiBvZiBJTyAqLwo0OTQJCWlmIChwZ2Fpb19tZXRob2Rfb3BzLT5u ZWVkc19zeW5jaHJvbm91c19leGVjdXRpb24pCjQ5NQkJCXJldHVybiBwZ2Fpb19tZXRob2Rf b3BzLT5uZWVkc19zeW5jaHJvbm91c19leGVjdXRpb24oaW9oKTsKNDk2CQo0OTcJCXJldHVy biBmYWxzZTsKNDk4CX0KNDk5CQo1MDAJLyoKNTAxCSAqIEhhbmRsZSBJTyBiZWluZyBwcm9j ZXNzZWQgYnkgSU8gbWV0aG9kLgo1MDIJICoKNTAzCSAqIFNob3VsZCBiZSBjYWxsZWQgYnkg SU8gbWV0aG9kcyAvIHN5bmNocm9ub3VzIElPIGV4ZWN1dGlvbiwganVzdCBiZWZvcmUgdGhl CjUwNAkgKiBJTyBpcyBwZXJmb3JtZWQuCjUwNQkgKi8KNTA2CXZvaWQKNTA3CXBnYWlvX2lv X3ByZXBhcmVfc3VibWl0KFBnQWlvSGFuZGxlICppb2gpCjUwOAl7CjUwOQkJcGdhaW9faW9f dXBkYXRlX3N0YXRlKGlvaCwgUEdBSU9fSFNfU1VCTUlUVEVEKTsKNTEwCQo1MTEJCWRjbGlz dF9wdXNoX3RhaWwoJnBnYWlvX215X2JhY2tlbmQtPmluX2ZsaWdodF9pb3MsICZpb2gtPm5v ZGUpOwo1MTIJfQo1MTMJCjUxNAkvKgo1MTUJICogSGFuZGxlIElPIGdldHRpbmcgY29tcGxl dGVkIGJ5IGEgbWV0aG9kLgo1MTYJICoKNTE3CSAqIFNob3VsZCBiZSBjYWxsZWQgYnkgSU8g bWV0aG9kcyAvIHN5bmNocm9ub3VzIElPIGV4ZWN1dGlvbiwganVzdCBhZnRlciB0aGUKNTE4 CSAqIElPIGhhcyBiZWVuIHBlcmZvcm1lZC4KNTE5CSAqCjUyMAkgKiBFeHBlY3RzIHRvIGJl IGNhbGxlZCBpbiBhIGNyaXRpY2FsIHNlY3Rpb24uIFdlIGV4cGVjdCBJT3MgdG8gYmUgdXNh YmxlIGZvcgo1MjEJICogV0FMIGV0Yywgd2hpY2ggcmVxdWlyZXMgYmVpbmcgYWJsZSB0byBl eGVjdXRlIGNvbXBsZXRpb24gY2FsbGJhY2tzIGluIGEKNTIyCSAqIGNyaXRpY2FsIHNlY3Rp b24uCjUyMwkgKi8KNTI0CXZvaWQKNTI1CXBnYWlvX2lvX3Byb2Nlc3NfY29tcGxldGlvbihQ Z0Fpb0hhbmRsZSAqaW9oLCBpbnQgcmVzdWx0KQo1MjYJewo1MjcJCUFzc2VydChpb2gtPnN0 YXRlID09IFBHQUlPX0hTX1NVQk1JVFRFRCk7CjUyOAkKNTI5CQlBc3NlcnQoQ3JpdFNlY3Rp b25Db3VudCA+IDApOwo1MzAJCjUzMQkJaW9oLT5yZXN1bHQgPSByZXN1bHQ7CjUzMgkKNTMz CQlwZ2Fpb19pb191cGRhdGVfc3RhdGUoaW9oLCBQR0FJT19IU19DT01QTEVURURfSU8pOwo1 MzQJCjUzNQkJSU5KRUNUSU9OX1BPSU5UKCJhaW8tcHJvY2Vzcy1jb21wbGV0aW9uLWJlZm9y ZS1zaGFyZWQiLCBpb2gpOwo1MzYJCjUzNwkJcGdhaW9faW9fY2FsbF9jb21wbGV0ZV9zaGFy ZWQoaW9oKTsKNTM4CQo1MzkJCXBnYWlvX2lvX3VwZGF0ZV9zdGF0ZShpb2gsIFBHQUlPX0hT X0NPTVBMRVRFRF9TSEFSRUQpOwo1NDAJCjU0MQkJLyogY29uZGl0aW9uIHZhcmlhYmxlIGJy b2FkY2FzdCBlbnN1cmVzIHN0YXRlIGlzIHZpc2libGUgYmVmb3JlIHdha2V1cCAqLwo1NDIJ CUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZpb2gtPmN2KTsKNTQzCQo1NDQJCS8qIGNv bnRhaW5zIGNhbGwgdG8gcGdhaW9faW9fY2FsbF9jb21wbGV0ZV9sb2NhbCgpICovCjU0NQkJ aWYgKGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcikKNTQ2CQkJcGdhaW9faW9f cmVjbGFpbShpb2gpOwo1NDcJfQo1NDgJCjU0OQkvKgo1NTAJICogSGFzIHRoZSBJTyBjb21w bGV0ZWQgYW5kIHRodXMgdGhlIElPIGhhbmRsZSBiZWVuIHJldXNlZD8KNTUxCSAqCjU1Mgkg KiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHdhaXRpbmcgZm9yIElPIGNvbXBsZXRpb24gYXQgYSBs b3cgbGV2ZWwgKGUuZy4gaW4gYW4gSU8KNTUzCSAqIG1ldGhvZCdzIC0+d2FpdF9vbmUoKSBj YWxsYmFjaykuCjU1NAkgKi8KNTU1CWJvb2wKNTU2CXBnYWlvX2lvX3dhc19yZWN5Y2xlZChQ Z0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24sIFBnQWlvSGFuZGxlU3Rh dGUgKnN0YXRlKQo1NTcJewo1NTgJCSpzdGF0ZSA9IGlvaC0+c3RhdGU7CjU1OQkKNTYwCQkv Kgo1NjEJCSAqIEVuc3VyZSB0aGF0IHdlIGRvbid0IHNlZSBhbiBlYXJsaWVyIHN0YXRlIG9m IHRoZSBoYW5kbGUgdGhhbiBpb2gtPnN0YXRlCjU2MgkJICogZHVlIHRvIGNvbXBpbGVyIG9y IENQVSByZW9yZGVyaW5nLiBUaGlzIHByb3RlY3RzIGJvdGggLT5nZW5lcmF0aW9uIGFzCjU2 MwkJICogZGlyZWN0bHkgdXNlZCBoZXJlLCBhbmQgb3RoZXIgZmllbGRzIGluIHRoZSBoYW5k bGUgYWNjZXNzZWQgaW4gdGhlCjU2NAkJICogY2FsbGVyIGlmIHRoZSBoYW5kbGUgd2FzIG5v dCByZXVzZWQuCjU2NQkJICovCjU2NgkJcGdfcmVhZF9iYXJyaWVyKCk7CjU2NwkKNTY4CQly ZXR1cm4gaW9oLT5nZW5lcmF0aW9uICE9IHJlZl9nZW5lcmF0aW9uOwo1NjkJfQo1NzAJCjU3 MQkvKgo1NzIJICogV2FpdCBmb3IgSU8gdG8gY29tcGxldGUuIEV4dGVybmFsIGNvZGUgc2hv dWxkIG5ldmVyIHVzZSB0aGlzLCBvdXRzaWRlIG9mCjU3MwkgKiB0aGUgQUlPIHN1YnN5c3Rl bSB3YWl0cyBhcmUgb25seSBhbGxvd2VkIHZpYSBwZ2Fpb193cmVmX3dhaXQoKS4KNTc0CSAq Lwo1NzUJc3RhdGljIHZvaWQKNTc2CXBnYWlvX2lvX3dhaXQoUGdBaW9IYW5kbGUgKmlvaCwg dWludDY0IHJlZl9nZW5lcmF0aW9uKQo1NzcJewo1NzgJCVBnQWlvSGFuZGxlU3RhdGUgc3Rh dGU7CjU3OQkJYm9vbAkJYW1fb3duZXI7CjU4MAkKNTgxCQlhbV9vd25lciA9IGlvaC0+b3du ZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKNTgyCQo1ODMJCWlmIChwZ2Fpb19pb193YXNf cmVjeWNsZWQoaW9oLCByZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSkKNTg0CQkJcmV0dXJuOwo1 ODUJCjU4NgkJaWYgKGFtX293bmVyKQo1ODcJCXsKNTg4CQkJaWYgKHN0YXRlICE9IFBHQUlP X0hTX1NVQk1JVFRFRAo1ODkJCQkJJiYgc3RhdGUgIT0gUEdBSU9fSFNfQ09NUExFVEVEX0lP CjU5MAkJCQkmJiBzdGF0ZSAhPSBQR0FJT19IU19DT01QTEVURURfU0hBUkVECjU5MQkJCQkm JiBzdGF0ZSAhPSBQR0FJT19IU19DT01QTEVURURfTE9DQUwpCjU5MgkJCXsKNTkzCQkJCWVs b2coUEFOSUMsICJ3YWl0aW5nIGZvciBvd24gSU8gJWQgaW4gd3Jvbmcgc3RhdGU6ICVzIiwK NTk0CQkJCQkgcGdhaW9faW9fZ2V0X2lkKGlvaCksIHBnYWlvX2lvX2dldF9zdGF0ZV9uYW1l KGlvaCkpOwo1OTUJCQl9CjU5NgkJfQo1OTcJCjU5OAkJd2hpbGUgKHRydWUpCjU5OQkJewo2 MDAJCQlpZiAocGdhaW9faW9fd2FzX3JlY3ljbGVkKGlvaCwgcmVmX2dlbmVyYXRpb24sICZz dGF0ZSkpCjYwMQkJCQlyZXR1cm47CjYwMgkKNjAzCQkJc3dpdGNoICgoUGdBaW9IYW5kbGVT dGF0ZSkgc3RhdGUpCjYwNAkJCXsKNjA1CQkJCWNhc2UgUEdBSU9fSFNfSURMRToKNjA2CQkJ CWNhc2UgUEdBSU9fSFNfSEFOREVEX09VVDoKNjA3CQkJCQllbG9nKEVSUk9SLCAiSU8gaW4g d3Jvbmcgc3RhdGU6ICVkIiwgc3RhdGUpOwo2MDgJCQkJCWJyZWFrOwo2MDkJCjYxMAkJCQlj YXNlIFBHQUlPX0hTX1NVQk1JVFRFRDoKNjExCQo2MTIJCQkJCS8qCjYxMwkJCQkJICogSWYg d2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBzbyBub3cuIERvbid0CjYx NAkJCQkJICogY2hlY2sgdmlhIHRoZSBJTyBtZXRob2QgaWYgdGhlIGlzc3VpbmcgYmFja2Vu ZCBpcyBleGVjdXRpbmcKNjE1CQkJCQkgKiB0aGUgSU8gc3luY2hyb25vdXNseS4KNjE2CQkJ CQkgKi8KNjE3CQkJCQlpZiAocGdhaW9fbWV0aG9kX29wcy0+d2FpdF9vbmUgJiYgIShpb2gt PmZsYWdzICYgUEdBSU9fSEZfU1lOQ0hST05PVVMpKQo2MTgJCQkJCXsKNjE5CQkJCQkJcGdh aW9fbWV0aG9kX29wcy0+d2FpdF9vbmUoaW9oLCByZWZfZ2VuZXJhdGlvbik7CjYyMAkJCQkJ CWNvbnRpbnVlOwo2MjEJCQkJCX0KNjIyCQkJCQkvKiBmYWxsdGhyb3VnaCAqLwo2MjMJCjYy NAkJCQkJLyogd2FpdGluZyBmb3Igb3duZXIgdG8gc3VibWl0ICovCjYyNQkJCQljYXNlIFBH QUlPX0hTX0RFRklORUQ6CjYyNgkJCQljYXNlIFBHQUlPX0hTX1NUQUdFRDoKNjI3CQkJCQkv KiB3YWl0aW5nIGZvciByZWFwZXIgdG8gY29tcGxldGUgKi8KNjI4CQkJCQkvKiBmYWxsdGhy b3VnaCAqLwo2MjkJCQkJY2FzZSBQR0FJT19IU19DT01QTEVURURfSU86CjYzMAkJCQkJLyog c2hvdWxkbid0IGJlIGFibGUgdG8gaGl0IHRoaXMgb3RoZXJ3aXNlICovCjYzMQkJCQkJQXNz ZXJ0KElzVW5kZXJQb3N0bWFzdGVyKTsKNjMyCQkJCQkvKiBlbnN1cmUgd2UncmUgZ29pbmcg dG8gZ2V0IHdva2VuIHVwICovCjYzMwkJCQkJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9T bGVlcCgmaW9oLT5jdik7CjYzNAkKNjM1CQkJCQl3aGlsZSAoIXBnYWlvX2lvX3dhc19yZWN5 Y2xlZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQo2MzYJCQkJCXsKNjM3CQkJCQkJ aWYgKHN0YXRlID09IFBHQUlPX0hTX0NPTVBMRVRFRF9TSEFSRUQgfHwKNjM4CQkJCQkJCXN0 YXRlID09IFBHQUlPX0hTX0NPTVBMRVRFRF9MT0NBTCkKNjM5CQkJCQkJCWJyZWFrOwo2NDAJ CQkJCQlDb25kaXRpb25WYXJpYWJsZVNsZWVwKCZpb2gtPmN2LCBXQUlUX0VWRU5UX0FJT19J T19DT01QTEVUSU9OKTsKNjQxCQkJCQl9CjY0MgkKNjQzCQkJCQlDb25kaXRpb25WYXJpYWJs ZUNhbmNlbFNsZWVwKCk7CjY0NAkJCQkJYnJlYWs7CjY0NQkKNjQ2CQkJCWNhc2UgUEdBSU9f SFNfQ09NUExFVEVEX1NIQVJFRDoKNjQ3CQkJCWNhc2UgUEdBSU9fSFNfQ09NUExFVEVEX0xP Q0FMOgo2NDgJCjY0OQkJCQkJLyoKNjUwCQkJCQkgKiBOb3RlIHRoYXQgbm8gaW50ZXJydXB0 cyBhcmUgcHJvY2Vzc2VkIGJldHdlZW4KNjUxCQkJCQkgKiBwZ2Fpb19pb193YXNfcmVjeWNs ZWQoKSBhbmQgdGhpcyBjaGVjayAtIHRoYXQncyBpbXBvcnRhbnQKNjUyCQkJCQkgKiBhcyBv dGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGhhdmUgYWxyZWFkeSByZWNsYWltZWQgdGhl CjY1MwkJCQkJICogaGFuZGxlLgo2NTQJCQkJCSAqLwo2NTUJCQkJCWlmIChhbV9vd25lcikK NjU2CQkJCQkJcGdhaW9faW9fcmVjbGFpbShpb2gpOwo2NTcJCQkJCXJldHVybjsKNjU4CQkJ fQo2NTkJCX0KNjYwCX0KNjYxCQo2NjIJLyoKNjYzCSAqIE1ha2UgSU8gaGFuZGxlIHJlYWR5 IHRvIGJlIHJldXNlZCBhZnRlciBJTyBoYXMgY29tcGxldGVkIG9yIGFmdGVyIHRoZQo2NjQJ ICogaGFuZGxlIGhhcyBiZWVuIHJlbGVhc2VkIHdpdGhvdXQgYmVpbmcgdXNlZC4KNjY1CSAq CjY2NgkgKiBOb3RlIHRoYXQgY2FsbGVycyBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgb25s eSBjYWxsaW5nIHRoaXMgaW4gdGhlIHJpZ2h0CjY2NwkgKiBzdGF0ZSBhbmQgdGhhdCBubyBp bnRlcnJ1cHRzIGNhbiBiZSBwcm9jZXNzZWQgYmV0d2VlbiB0aGUgc3RhdGUgY2hlY2sgYW5k CjY2OAkgKiB0aGUgY2FsbCB0byBwZ2Fpb19pb19yZWNsYWltKCkuIE90aGVyd2lzZSBpbnRl cnJ1cHQgcHJvY2Vzc2luZyBjb3VsZAo2NjkJICogYWxyZWFkeSBoYXZlIHJlY2xhaW1lZCB0 aGUgaGFuZGxlLgo2NzAJICovCjY3MQlzdGF0aWMgdm9pZAo2NzIJcGdhaW9faW9fcmVjbGFp bShQZ0Fpb0hhbmRsZSAqaW9oKQo2NzMJewogICAweDAwMDAwMDAwMDA0MzY2MmUgPCswPjoJ YWRkaQlzcCxzcCwtNjQKICAgMHgwMDAwMDAwMDAwNDM2NjMwIDwrMj46CXNkCXJhLDU2KHNw KQogICAweDAwMDAwMDAwMDA0MzY2MzIgPCs0PjoJc2QJczAsNDgoc3ApCiAgIDB4MDAwMDAw MDAwMDQzNjYzNCA8KzY+OglzZAlzMSw0MChzcCkKICAgMHgwMDAwMDAwMDAwNDM2NjM2IDwr OD46CXNkCXMyLDMyKHNwKQogICAweDAwMDAwMDAwMDA0MzY2MzggPCsxMD46CXNkCXMzLDI0 KHNwKQogICAweDAwMDAwMDAwMDA0MzY2M2EgPCsxMj46CXNkCXM0LDE2KHNwKQoKNjc0CQkv KiBUaGlzIGlzIG9ubHkgb2sgaWYgaXQncyBvdXIgSU8gKi8KNjc1CQlBc3NlcnQoaW9oLT5v d25lcl9wcm9jbm8gPT0gTXlQcm9jTnVtYmVyKTsKICAgMHgwMDAwMDAwMDAwNDM2NjNjIDwr MTQ+OglhdWlwYwlhMSwweDRhNgogICAweDAwMDAwMDAwMDA0MzY2NDAgPCsxOD46CWxkCWEx LC0yMDIwKGExKSAjIDB4OGRiZTU4CiAgIDB4MDAwMDAwMDAwMDQzNjY0NCA8KzIyPjoJbXYJ czAsYTAKICAgMHgwMDAwMDAwMDAwNDM2NjQ2IDwrMjQ+OglsdwlhMCwxNihhMCkKICAgMHgw MDAwMDAwMDAwNDM2NjQ4IDwrMjY+OglsdwlhMSwwKGExKQogICAweDAwMDAwMDAwMDA0MzY2 NGEgPCsyOD46CWJuZQlhMCxhMSwweDQzNjg0ZSA8cGdhaW9faW9fcmVjbGFpbSs1NDQ+CiAg IDB4MDAwMDAwMDAwMDQzNjg0ZSA8KzU0ND46CWF1aXBjCWEwLDB4MjQyCiAgIDB4MDAwMDAw MDAwMDQzNjg1MiA8KzU0OD46CWFkZGkJYTAsYTAsLTQ5NCAjIDB4Njc4NjYwCiAgIDB4MDAw MDAwMDAwMDQzNjg1NiA8KzU1Mj46CWF1aXBjCWExLDB4MjQyCiAgIDB4MDAwMDAwMDAwMDQz Njg1YSA8KzU1Nj46CWFkZGkJYTEsYTEsLTYwMSAjIDB4Njc4NWZkCiAgIDB4MDAwMDAwMDAw MDQzNjg1ZSA8KzU2MD46CWxpCWEyLDY3NQogICAweDAwMDAwMDAwMDA0MzY4NjIgPCs1NjQ+ OglhdWlwYwlyYSwweDE2MAogICAweDAwMDAwMDAwMDA0MzY4NjYgPCs1Njg+OglqYWxyCTIz MChyYSkgIyAweDU5Njk0OCA8RXhjZXB0aW9uYWxDb25kaXRpb24+Cgo2NzYJCUFzc2VydChp b2gtPnN0YXRlICE9IFBHQUlPX0hTX0lETEUpOwogICAweDAwMDAwMDAwMDA0MzY2NGUgPCsz Mj46CWxidQlhMCwwKHMwKQogICAweDAwMDAwMDAwMDA0MzY2NTIgPCszNj46CWJlcXoJYTAs MHg0MzY4NmEgPHBnYWlvX2lvX3JlY2xhaW0rNTcyPgogICAweDAwMDAwMDAwMDA0MzY4NmEg PCs1NzI+OglhdWlwYwlhMCwweDI0MgogICAweDAwMDAwMDAwMDA0MzY4NmUgPCs1NzY+Oglh ZGRpCWEwLGEwLDEwMzcgIyAweDY3OGM3NwogICAweDAwMDAwMDAwMDA0MzY4NzIgPCs1ODA+ OglhdWlwYwlhMSwweDI0MgogICAweDAwMDAwMDAwMDA0MzY4NzYgPCs1ODQ+OglhZGRpCWEx LGExLC02MjkgIyAweDY3ODVmZAogICAweDAwMDAwMDAwMDA0MzY4N2EgPCs1ODg+OglsaQlh Miw2NzYKICAgMHgwMDAwMDAwMDAwNDM2ODdlIDwrNTkyPjoJYXVpcGMJcmEsMHgxNjAKICAg MHgwMDAwMDAwMDAwNDM2ODgyIDwrNTk2PjoJamFscgkyMDIocmEpICMgMHg1OTY5NDggPEV4 Y2VwdGlvbmFsQ29uZGl0aW9uPgoKNjc3CQo2NzgJCS8qIHNlZSBjb21tZW50IGluIGZ1bmN0 aW9uIGhlYWRlciAqLwo2NzkJCUhPTERfSU5URVJSVVBUUygpOwogICAweDAwMDAwMDAwMDA0 MzY2NTYgPCs0MD46CWF1aXBjCWEwLDB4NGE2CiAgIDB4MDAwMDAwMDAwMDQzNjY1YSA8KzQ0 PjoJbGQJczIsMzQoYTApICMgMHg4ZGM2NzgKICAgMHgwMDAwMDAwMDAwNDM2NjVlIDwrNDg+ OglsdwlhMCwwKHMyKQogICAweDAwMDAwMDAwMDA0MzY2NjIgPCs1Mj46CWFkZGkJYTAsYTAs MQogICAweDAwMDAwMDAwMDA0MzY2NjQgPCs1ND46CXN3CWEwLDAoczIpCgo2ODAJCjY4MQkJ LyoKNjgyCQkgKiBJdCdzIGEgYml0IHVnbHksIGJ1dCByaWdodCBub3cgdGhlIGVhc2llc3Qg cGxhY2UgdG8gcHV0IHRoZSBleGVjdXRpb24KNjgzCQkgKiBvZiBsb2NhbCBjb21wbGV0aW9u IGNhbGxiYWNrcyBpcyB0aGlzIGZ1bmN0aW9uLCBhcyB3ZSBuZWVkIHRvIGV4ZWN1dGUKNjg0 CQkgKiBsb2NhbCBjYWxsYmFja3MganVzdCBiZWZvcmUgcmVjbGFpbWluZyBhdCBtdWx0aXBs ZSBjYWxsc2l0ZXMuCjY4NQkJICovCjY4NgkJaWYgKGlvaC0+c3RhdGUgPT0gUEdBSU9fSFNf Q09NUExFVEVEX1NIQVJFRCkKICAgMHgwMDAwMDAwMDAwNDM2NjY4IDwrNTg+OglsYnUJYTAs MChzMCkKICAgMHgwMDAwMDAwMDAwNDM2NjZjIDwrNjI+OglsaQlhMSw2CiAgIDB4MDAwMDAw MDAwMDQzNjY2ZSA8KzY0PjoJYm5lCWEwLGExLDB4NDM2NmFlIDxwZ2Fpb19pb19yZWNsYWlt KzEyOD4KCjY4NwkJewo2ODgJCQlQZ0Fpb1Jlc3VsdCBsb2NhbF9yZXN1bHQ7CjY4OQkKNjkw CQkJbG9jYWxfcmVzdWx0ID0gcGdhaW9faW9fY2FsbF9jb21wbGV0ZV9sb2NhbChpb2gpOwog ICAweDAwMDAwMDAwMDA0MzY2NzIgPCs2OD46CW12CWEwLHMwCiAgIDB4MDAwMDAwMDAwMDQz NjY3NCA8KzcwPjoJamFsCTB4NDM4MWRlIDxwZ2Fpb19pb19jYWxsX2NvbXBsZXRlX2xvY2Fs PgogICAweDAwMDAwMDAwMDA0MzY2NzggPCs3ND46CW12CXMxLGEwCgo2OTEJCQlwZ2Fpb19p b191cGRhdGVfc3RhdGUoaW9oLCBQR0FJT19IU19DT01QTEVURURfTE9DQUwpOwogICAweDAw MDAwMDAwMDA0MzY2N2EgPCs3Nj46CWxpCWExLDcKICAgMHgwMDAwMDAwMDAwNDM2NjdjIDwr Nzg+OgltdglhMCxzMAogICAweDAwMDAwMDAwMDA0MzY2N2UgPCs4MD46CWphbAkweDQzNjQz NiA8cGdhaW9faW9fdXBkYXRlX3N0YXRlPgoKNjkyCQo2OTMJCQlpZiAoaW9oLT5yZXBvcnRf cmV0dXJuKQogICAweDAwMDAwMDAwMDA0MzY2ODIgPCs4ND46CWxkCWEwLDk2KHMwKQogICAw eDAwMDAwMDAwMDA0MzY2ODQgPCs4Nj46CWJlcXoJYTAsMHg0MzY2YWUgPHBnYWlvX2lvX3Jl Y2xhaW0rMTI4PgoKNjk0CQkJewo2OTUJCQkJaW9oLT5yZXBvcnRfcmV0dXJuLT5yZXN1bHQg PSBsb2NhbF9yZXN1bHQ7CiAgIDB4MDAwMDAwMDAwMDQzNjY4NiA8Kzg4PjoJc3cJczEsMChh MCkKICAgMHgwMDAwMDAwMDAwNDM2Njg4IDwrOTA+OglzcmxpCXMxLHMxLDB4MjAKICAgMHgw MDAwMDAwMDAwNDM2NjhhIDwrOTI+OglzdwlzMSw0KGEwKQoKNjk2CQkJCWlvaC0+cmVwb3J0 X3JldHVybi0+dGFyZ2V0X2RhdGEgPSBpb2gtPnRhcmdldF9kYXRhOwogICAweDAwMDAwMDAw MDA0MzY2OGMgPCs5ND46CWxkCWEwLDk2KHMwKQogICAweDAwMDAwMDAwMDA0MzY2OGUgPCs5 Nj46CWx3CWExLDE0MChzMCkKICAgMHgwMDAwMDAwMDAwNDM2NjkyIDwrMTAwPjoJc3cJYTEs MjgoYTApCiAgIDB4MDAwMDAwMDAwMDQzNjY5NCA8KzEwMj46CWx3CWExLDEzNihzMCkKICAg MHgwMDAwMDAwMDAwNDM2Njk4IDwrMTA2PjoJc3cJYTEsMjQoYTApCiAgIDB4MDAwMDAwMDAw MDQzNjY5YSA8KzEwOD46CWx3CWExLDEzMihzMCkKICAgMHgwMDAwMDAwMDAwNDM2NjllIDwr MTEyPjoJc3cJYTEsMjAoYTApCiAgIDB4MDAwMDAwMDAwMDQzNjZhMCA8KzExND46CWx3CWEx LDEyOChzMCkKICAgMHgwMDAwMDAwMDAwNDM2NmE0IDwrMTE4PjoJc3cJYTEsMTYoYTApCiAg IDB4MDAwMDAwMDAwMDQzNjZhNiA8KzEyMD46CWx3CWExLDEyNChzMCkKICAgMHgwMDAwMDAw MDAwNDM2NmE4IDwrMTIyPjoJc3cJYTEsMTIoYTApCiAgIDB4MDAwMDAwMDAwMDQzNjZhYSA8 KzEyND46CWx3CWExLDEyMChzMCkKICAgMHgwMDAwMDAwMDAwNDM2NmFjIDwrMTI2PjoJc3cJ YTEsOChhMCkKCjY5NwkJCX0KNjk4CQl9CjY5OQkKNzAwCQlwZ2Fpb19kZWJ1Z19pbyhERUJV RzQsIGlvaCwKICAgMHgwMDAwMDAwMDAwNDM2NmFlIDwrMTI4PjoJbGkJYTAsMTEKICAgMHgw MDAwMDAwMDAwNDM2NmIwIDwrMTMwPjoJbGkJYTEsMAogICAweDAwMDAwMDAwMDA0MzY2YjIg PCsxMzI+OglhdWlwYwlyYSwweDE2MQogICAweDAwMDAwMDAwMDA0MzY2YjYgPCsxMzY+Oglq YWxyCS0xNzc2KHJhKSAjIDB4NTk2ZmMyIDxlcnJzdGFydD4KICAgMHgwMDAwMDAwMDAwNDM2 NmJhIDwrMTQwPjoJYmVxeglhMCwweDQzNjc4OCA8cGdhaW9faW9fcmVjbGFpbSszNDY+CiAg IDB4MDAwMDAwMDAwMDQzNjZiYyA8KzE0Mj46CWxpCWEwLDEKICAgMHgwMDAwMDAwMDAwNDM2 NmJlIDwrMTQ0PjoJYXVpcGMJcmEsMHgxNjMKICAgMHgwMDAwMDAwMDAwNDM2NmMyIDwrMTQ4 PjoJamFscgk2ODgocmEpICMgMHg1OTk5NmUgPGVycmhpZGVzdG10PgogICAweDAwMDAwMDAw MDA0MzY2YzYgPCsxNTI+OglsaQlhMCwxCiAgIDB4MDAwMDAwMDAwMDQzNjZjOCA8KzE1ND46 CWF1aXBjCXJhLDB4MTYzCiAgIDB4MDAwMDAwMDAwMDQzNjZjYyA8KzE1OD46CWphbHIJNzgw KHJhKSAjIDB4NTk5OWQ0IDxlcnJoaWRlY29udGV4dD4KICAgMHgwMDAwMDAwMDAwNDM2NmZl IDwrMjA4PjoJbXYJYTAsczAKICAgMHgwMDAwMDAwMDAwNDM2NzAwIDwrMjEwPjoJamFsCTB4 NDM4ZjkwIDxwZ2Fpb19pb19nZXRfb3BfbmFtZT4KICAgMHgwMDAwMDAwMDAwNDM2NzA0IDwr MjE0PjoJbXYJczMsYTAKICAgMHgwMDAwMDAwMDAwNDM2NzA2IDwrMjE2PjoJbXYJYTAsczAK ICAgMHgwMDAwMDAwMDAwNDM2NzA4IDwrMjE4PjoJamFsCTB4NDM5MDc2IDxwZ2Fpb19pb19n ZXRfdGFyZ2V0X25hbWU+CiAgIDB4MDAwMDAwMDAwMDQzNjcxMiA8KzIyOD46CW12CWEzLGEw CiAgIDB4MDAwMDAwMDAwMDQzNjcyYSA8KzI1Mj46CWx3CWEwLDg0KHMwKQogICAweDAwMDAw MDAwMDA0MzY3MmMgPCsyNTQ+OglzbGxpCWEyLGEwLDB4MzcKICAgMHgwMDAwMDAwMDAwNDM2 NzMwIDwrMjU4PjoJc3JsaQlhMixhMiwweDNkCiAgIDB4MDAwMDAwMDAwMDQzNjczMiA8KzI2 MD46CWxpCWE1LDQKICAgMHgwMDAwMDAwMDAwNDM2NzM0IDwrMjYyPjoJbXVsdwlhMSxzMSxz NAogICAweDAwMDAwMDAwMDA0MzY3NGUgPCsyODg+OglsdwlhMiwyMChzMCkKICAgMHgwMDAw MDAwMDAwNDM2NzUwIDwrMjkwPjoJYW5kaQlhNixhMCw2MwogICAweDAwMDAwMDAwMDA0MzY3 NTQgPCsyOTQ+OglzcmxpdwlhNyxhMCwweDkKICAgMHgwMDAwMDAwMDAwNDM2NzU4IDwrMjk4 PjoJYXVpcGMJYTAsMHgyNDIKICAgMHgwMDAwMDAwMDAwNDM2NzVjIDwrMzAyPjoJYWRkaQlh MCxhMCwxMzM5ICMgMHg2NzhjOTMKICAgMHgwMDAwMDAwMDAwNDM2NzYwIDwrMzA2PjoJc2QJ YTIsMChzcCkKICAgMHgwMDAwMDAwMDAwNDM2NzYyIDwrMzA4PjoJbXYJYTIsczMKICAgMHgw MDAwMDAwMDAwNDM2NzY0IDwrMzEwPjoJYXVpcGMJcmEsMHgxNjEKICAgMHgwMDAwMDAwMDAw NDM2NzY4IDwrMzE0PjoJamFscgktNjQyKHJhKSAjIDB4NTk3NGUyIDxlcnJtc2dfaW50ZXJu YWw+CiAgIDB4MDAwMDAwMDAwMDQzNjc2YyA8KzMxOD46CWF1aXBjCWEwLDB4MjQyCiAgIDB4 MDAwMDAwMDAwMDQzNjc3MCA8KzMyMj46CWFkZGkJYTAsYTAsLTM2NyAjIDB4Njc4NWZkCiAg IDB4MDAwMDAwMDAwMDQzNjc3NCA8KzMyNj46CWF1aXBjCWExLDB4MjQyCiAgIDB4MDAwMDAw MDAwMDQzNjc3OCA8KzMzMD46CWFkZGkJYTIsYTEsMTQzMyAjIDB4Njc4ZDBkCiAgIDB4MDAw MDAwMDAwMDQzNjc3YyA8KzMzND46CWxpCWExLDcwNQogICAweDAwMDAwMDAwMDA0MzY3ODAg PCszMzg+OglhdWlwYwlyYSwweDE2MQogICAweDAwMDAwMDAwMDA0MzY3ODQgPCszNDI+Oglq YWxyCS0xMjg0KHJhKSAjIDB4NTk3MjdjIDxlcnJmaW5pc2g+Cgo3MDEJCQkJCSAgICJyZWNs YWltaW5nOiBkaXN0aWxsZWRfcmVzdWx0OiAoc3RhdHVzICVzLCBpZCAldSwgZXJyb3JfZGF0 YSAlZCksIHJhd19yZXN1bHQ6ICVkIiwKNzAyCQkJCQkgICBwZ2Fpb19yZXN1bHRfc3RhdHVz X3N0cmluZyhpb2gtPmRpc3RpbGxlZF9yZXN1bHQuc3RhdHVzKSwKNzAzCQkJCQkgICBpb2gt PmRpc3RpbGxlZF9yZXN1bHQuaWQsCjcwNAkJCQkJICAgaW9oLT5kaXN0aWxsZWRfcmVzdWx0 LmVycm9yX2RhdGEsCjcwNQkJCQkJICAgaW9oLT5yZXN1bHQpOwo3MDYJCjcwNwkJLyogaWYg dGhlIElPIGhhcyBiZWVuIGRlZmluZWQsIGl0J3Mgb24gdGhlIGluLWZsaWdodCBsaXN0LCBy ZW1vdmUgKi8KNzA4CQlpZiAoaW9oLT5zdGF0ZSAhPSBQR0FJT19IU19IQU5ERURfT1VUKQog ICAweDAwMDAwMDAwMDA0MzY3ODggPCszNDY+OglsYnUJYTAsMChzMCkKICAgMHgwMDAwMDAw MDAwNDM2NzhjIDwrMzUwPjoJbGkJYTEsMQogICAweDAwMDAwMDAwMDA0MzY3OGUgPCszNTI+ OglhdWlwYwlzMSwweDRjMwogICAweDAwMDAwMDAwMDA0MzY3OTIgPCszNTY+OgliZXEJYTAs YTEsMHg0MzY3YjYgPHBnYWlvX2lvX3JlY2xhaW0rMzkyPgoKNzA5CQkJZGNsaXN0X2RlbGV0 ZV9mcm9tKCZwZ2Fpb19teV9iYWNrZW5kLT5pbl9mbGlnaHRfaW9zLCAmaW9oLT5ub2RlKTsK ICAgMHgwMDAwMDAwMDAwNDM2Nzk2IDwrMzYwPjoJbGQJYTAsLTEzOTAoczEpCgo3MTAJCjcx MQkJaWYgKGlvaC0+cmVzb3duZXIpCiAgIDB4MDAwMDAwMDAwMDQzNjdiNiA8KzM5Mj46CWxk CWEwLDQwKHMwKQogICAweDAwMDAwMDAwMDA0MzY3YjggPCszOTQ+OgliZXF6CWEwLDB4NDM2 N2NhIDxwZ2Fpb19pb19yZWNsYWltKzQxMj4KCjcxMgkJewo3MTMJCQlSZXNvdXJjZU93bmVy Rm9yZ2V0QWlvSGFuZGxlKGlvaC0+cmVzb3duZXIsICZpb2gtPnJlc293bmVyX25vZGUpOwog ICAweDAwMDAwMDAwMDA0MzY3YmEgPCszOTY+OglhZGRpCWExLHMwLDQ4CiAgIDB4MDAwMDAw MDAwMDQzNjdiZSA8KzQwMD46CWF1aXBjCXJhLDB4MThkCiAgIDB4MDAwMDAwMDAwMDQzNjdj MiA8KzQwND46CWphbHIJMTU2NihyYSkgIyAweDVjM2RkYyA8UmVzb3VyY2VPd25lckZvcmdl dEFpb0hhbmRsZT4KCjcxNAkJCWlvaC0+cmVzb3duZXIgPSBOVUxMOwogICAweDAwMDAwMDAw MDA0MzY3YzYgPCs0MDg+OglzZAl6ZXJvLDQwKHMwKQoKNzE1CQl9CjcxNgkKNzE3CQlBc3Nl cnQoIWlvaC0+cmVzb3duZXIpOwo3MTgJCjcxOQkJLyoKNzIwCQkgKiBVcGRhdGUgZ2VuZXJh dGlvbiAmIHN0YXRlIGZpcnN0LCBiZWZvcmUgcmVzZXR0aW5nIHRoZSBJTydzIGZpZWxkcywK NzIxCQkgKiBvdGhlcndpc2UgYSBjb25jdXJyZW50ICJ2aWV3ZXIiIGNvdWxkIHRoaW5rIHRo ZSBmaWVsZHMgYXJlIHZhbGlkLCBldmVuCjcyMgkJICogdGhvdWdoIHRoZXkgYXJlIGJlaW5n IHJlc2V0LiAgSW5jcmVtZW50IHRoZSBnZW5lcmF0aW9uIGZpcnN0LCBzbyB0aGF0CjcyMwkJ ICogd2UgY2FuIGFzc2VydCBlbHNld2hlcmUgdGhhdCB3ZSBuZXZlciB3YWl0IGZvciBhbiBJ RExFIElPLiAgV2hpbGUgaXQncwo3MjQJCSAqIGEgYml0IHdlaXJkIGZvciB0aGUgc3RhdGUg dG8gZ28gYmFja3dhcmRzIGZvciBhIGdlbmVyYXRpb24sIGl0J3MgT0sKNzI1CQkgKiBoZXJl LCBhcyB0aGVyZSBjYW5ub3QgYmUgcmVmZXJlbmNlcyB0byB0aGUgInJlYm9ybiIgSU8geWV0 LiAgQ2FuJ3QKNzI2CQkgKiB1cGRhdGUgYm90aCBhdCBvbmNlLCBzbyBzb21ldGhpbmcgaGFz IHRvIGdpdmUuCjcyNwkJICovCjcyOAkJaW9oLT5nZW5lcmF0aW9uKys7CiAgIDB4MDAwMDAw MDAwMDQzNjdjYSA8KzQxMj46CWxkCWEwLDY0KHMwKQogICAweDAwMDAwMDAwMDA0MzY3Y2Mg PCs0MTQ+OglhZGRpCWEwLGEwLDEKICAgMHgwMDAwMDAwMDAwNDM2N2NlIDwrNDE2PjoJc2QJ YTAsNjQoczApCgo3MjkJCXBnYWlvX2lvX3VwZGF0ZV9zdGF0ZShpb2gsIFBHQUlPX0hTX0lE TEUpOwogICAweDAwMDAwMDAwMDA0MzY3ZDAgPCs0MTg+OgltdglhMCxzMAogICAweDAwMDAw MDAwMDA0MzY3ZDIgPCs0MjA+OglsaQlhMSwwCiAgIDB4MDAwMDAwMDAwMDQzNjdkNCA8KzQy Mj46CWphbAkweDQzNjQzNiA8cGdhaW9faW9fdXBkYXRlX3N0YXRlPgoKNzMwCQo3MzEJCS8q IGVuc3VyZSB0aGUgc3RhdGUgdXBkYXRlIGlzIHZpc2libGUgYmVmb3JlIHdlIHJlc2V0IGZp ZWxkcyAqLwo3MzIJCXBnX3dyaXRlX2JhcnJpZXIoKTsKICAgMHgwMDAwMDAwMDAwNDM2N2Q4 IDwrNDI2PjoJZmVuY2UJcncsdwoKNzMzCQo3MzQJCWlvaC0+b3AgPSBQR0FJT19PUF9JTlZB TElEOwo3MzUJCWlvaC0+dGFyZ2V0ID0gUEdBSU9fVElEX0lOVkFMSUQ7CiAgIDB4MDAwMDAw MDAwMDQzNjdlNCA8KzQzOD46CXNiCXplcm8sNChzMCkKICAgMHgwMDAwMDAwMDAwNDM2N2U4 IDwrNDQyPjoJc2IJemVybywzKHMwKQogICAweDAwMDAwMDAwMDA0MzY3ZWMgPCs0NDY+Oglz Ygl6ZXJvLDIoczApCiAgIDB4MDAwMDAwMDAwMDQzNjdmNCA8KzQ1ND46CXNiCXplcm8sMShz MCkKCjczNgkJaW9oLT5mbGFncyA9IDA7CjczNwkJaW9oLT5udW1fY2FsbGJhY2tzID0gMDsK NzM4CQlpb2gtPmhhbmRsZV9kYXRhX2xlbiA9IDA7CiAgIDB4MDAwMDAwMDAwMDQzNjdkYyA8 KzQzMD46CXNiCXplcm8sMTMoczApCgo3MzkJCWlvaC0+cmVwb3J0X3JldHVybiA9IE5VTEw7 CiAgIDB4MDAwMDAwMDAwMDQzNjdlMCA8KzQzND46CXNkCXplcm8sOTYoczApCgo3NDAJCWlv aC0+cmVzdWx0ID0gMDsKICAgMHgwMDAwMDAwMDAwNDM2N2ZjIDwrNDYyPjoJc3cJemVybywy MChzMCkKCjc0MQkJaW9oLT5kaXN0aWxsZWRfcmVzdWx0LnN0YXR1cyA9IFBHQUlPX1JTX1VO S05PV047CiAgIDB4MDAwMDAwMDAwMDQzNjdmMCA8KzQ1MD46CWx3dQlhMSw4NChzMCkKICAg MHgwMDAwMDAwMDAwNDM2ODAwIDwrNDY2PjoJYW5kaQlhMSxhMSwtNDQ5CiAgIDB4MDAwMDAw MDAwMDQzNjgwNCA8KzQ3MD46CXN3CWExLDg0KHMwKQoKNzQyCQo3NDMJCS8qCjc0NAkJICog V2UgcHVzaCB0aGUgSU8gdG8gdGhlIGhlYWQgb2YgdGhlIGlkbGUgSU8gbGlzdCwgdGhhdCBz ZWVtcyBtb3JlIGNhY2hlCjc0NQkJICogZWZmaWNpZW50IGluIGNhc2VzIHdoZXJlIG9ubHkg YSBmZXcgSU9zIGFyZSB1c2VkLgo3NDYJCSAqLwo3NDcJCWRjbGlzdF9wdXNoX2hlYWQoJnBn YWlvX215X2JhY2tlbmQtPmlkbGVfaW9zLCAmaW9oLT5ub2RlKTsKICAgMHgwMDAwMDAwMDAw NDM2N2Y4IDwrNDU4PjoJbGQJYTAsLTEzOTAoczEpCiAgIDB4MDAwMDAwMDAwMDQzNjgwOCA8 KzQ3ND46CWFkZGkJYTIsYTAsOAogICAweDAwMDAwMDAwMDA0MzY4MGMgPCs0Nzg+OglhZGRp CWExLHMwLDI0Cgo3NDgJCjc0OQkJUkVTVU1FX0lOVEVSUlVQVFMoKTsKICAgMHgwMDAwMDAw MDAwNDM2ODJlIDwrNTEyPjoJbHcJYTAsMChzMikKICAgMHgwMDAwMDAwMDAwNDM2ODMyIDwr NTE2PjoJYmVxeglhMCwweDQzNjhiZSA8cGdhaW9faW9fcmVjbGFpbSs2NTY+CiAgIDB4MDAw MDAwMDAwMDQzNjgzNCA8KzUxOD46CWx3CWEwLDAoczIpCiAgIDB4MDAwMDAwMDAwMDQzNjgz OCA8KzUyMj46CWFkZGkJYTAsYTAsLTEKICAgMHgwMDAwMDAwMDAwNDM2ODNhIDwrNTI0PjoJ c3cJYTAsMChzMikKICAgMHgwMDAwMDAwMDAwNDM2ODNlIDwrNTI4PjoJbGQJcmEsNTYoc3Ap CiAgIDB4MDAwMDAwMDAwMDQzNjg0MCA8KzUzMD46CWxkCXMwLDQ4KHNwKQogICAweDAwMDAw MDAwMDA0MzY4NDIgPCs1MzI+OglsZAlzMSw0MChzcCkKICAgMHgwMDAwMDAwMDAwNDM2ODQ0 IDwrNTM0PjoJbGQJczIsMzIoc3ApCiAgIDB4MDAwMDAwMDAwMDQzNjg0NiA8KzUzNj46CWxk CXMzLDI0KHNwKQogICAweDAwMDAwMDAwMDA0MzY4NDggPCs1Mzg+OglsZAlzNCwxNihzcCkK ICAgMHgwMDAwMDAwMDAwNDM2OGJlIDwrNjU2PjoJYXVpcGMJYTAsMHgxY2QKICAgMHgwMDAw MDAwMDAwNDM2OGMyIDwrNjYwPjoJYWRkaQlhMCxhMCwtNzE2ICMgMHg2MDM1ZjIKICAgMHgw MDAwMDAwMDAwNDM2OGM2IDwrNjY0PjoJYXVpcGMJYTEsMHgyNDIKICAgMHgwMDAwMDAwMDAw NDM2OGNhIDwrNjY4PjoJYWRkaQlhMSxhMSwtNzEzICMgMHg2Nzg1ZmQKICAgMHgwMDAwMDAw MDAwNDM2OGNlIDwrNjcyPjoJbGkJYTIsNzQ5CiAgIDB4MDAwMDAwMDAwMDQzNjhkMiA8KzY3 Nj46CWF1aXBjCXJhLDB4MTYwCiAgIDB4MDAwMDAwMDAwMDQzNjhkNiA8KzY4MD46CWphbHIJ MTE4KHJhKSAjIDB4NTk2OTQ4IDxFeGNlcHRpb25hbENvbmRpdGlvbj4KCjc1MAl9CiAgIDB4 MDAwMDAwMDAwMDQzNjg0YSA8KzU0MD46CWFkZGkJc3Asc3AsNjQKICAgMHgwMDAwMDAwMDAw NDM2ODRjIDwrNTQyPjoJcmV0Cgo3NTEJCjc1MgkvKgo3NTMJICogV2FpdCBmb3IgYW4gSU8g aGFuZGxlIHRvIGJlY29tZSB1c2FibGUuCjc1NAkgKgo3NTUJICogVGhpcyBvbmx5IHJlYWxs eSBpcyB1c2VmdWwgZm9yIHBnYWlvX2lvX2FjcXVpcmUoKS4KNzU2CSAqLwo3NTcJc3RhdGlj IHZvaWQKNzU4CXBnYWlvX2lvX3dhaXRfZm9yX2ZyZWUodm9pZCkKNzU5CXsKNzYwCQlpbnQJ CQlyZWNsYWltZWQgPSAwOwo3NjEJCjc2MgkJcGdhaW9fZGVidWcoREVCVUcyLCAid2FpdGlu ZyBmb3IgZnJlZSBJTyB3aXRoICVkIHBlbmRpbmcsICV1IGluLWZsaWdodCwgJXUgaWRsZSBJ T3MiLAo3NjMJCQkJCXBnYWlvX215X2JhY2tlbmQtPm51bV9zdGFnZWRfaW9zLAo3NjQJCQkJ CWRjbGlzdF9jb3VudCgmcGdhaW9fbXlfYmFja2VuZC0+aW5fZmxpZ2h0X2lvcyksCjc2NQkJ CQkJZGNsaXN0X2NvdW50KCZwZ2Fpb19teV9iYWNrZW5kLT5pZGxlX2lvcykpOwo3NjYJCjc2 NwkJLyoKNzY4CQkgKiBGaXJzdCBjaGVjayBpZiBhbnkgb2Ygb3VyIElPcyBhY3R1YWxseSBo YXZlIGNvbXBsZXRlZCAtIHdoZW4gdXNpbmcKNzY5CQkgKiB3b3JrZXIsIHRoYXQnbGwgb2Z0 ZW4gYmUgdGhlIGNhc2UuIFdlIGNvdWxkIGRvIHNvIGFzIHBhcnQgb2YgdGhlIGxvb3AKNzcw CQkgKiBiZWxvdywgYnV0IHRoYXQnZCBwb3RlbnRpYWxseSBsZWFkIHVzIHRvIHdhaXQgZm9y IHNvbWUgSU8gc3VibWl0dGVkCjc3MQkJICogYmVmb3JlLgo3NzIJCSAqLwo3NzMJCWZvciAo aW50IGkgPSAwOyBpIDwgaW9fbWF4X2NvbmN1cnJlbmN5OyBpKyspCjc3NAkJewo3NzUJCQlQ Z0Fpb0hhbmRsZSAqaW9oID0gJnBnYWlvX2N0bC0+aW9faGFuZGxlc1twZ2Fpb19teV9iYWNr ZW5kLT5pb19oYW5kbGVfb2ZmICsgaV07Cjc3NgkKNzc3CQkJaWYgKGlvaC0+c3RhdGUgPT0g UEdBSU9fSFNfQ09NUExFVEVEX1NIQVJFRCkKNzc4CQkJewo3NzkJCQkJLyoKNzgwCQkJCSAq IE5vdGUgdGhhdCBubyBpbnRlcnJ1cHRzIGFyZSBwcm9jZXNzZWQgYmV0d2VlbiB0aGUgc3Rh dGUgY2hlY2sKNzgxCQkJCSAqIGFuZCB0aGUgY2FsbCB0byByZWNsYWltIC0gdGhhdCdzIGlt cG9ydGFudCBhcyBvdGhlcndpc2UgYW4KNzgyCQkJCSAqIGludGVycnVwdCBjb3VsZCBoYXZl IGFscmVhZHkgcmVjbGFpbWVkIHRoZSBoYW5kbGUuCjc4MwkJCQkgKgo3ODQJCQkJICogTmVl ZCB0byBlbnN1cmUgdGhhdCB0aGVyZSdzIG5vIHJlb3JkZXJpbmcsIGluIHRoZSBtb3JlIGNv bW1vbgo3ODUJCQkJICogcGF0aHMsIHdoZXJlIHdlIHdhaXQgZm9yIElPLCB0aGF0J3MgZG9u ZSBieQo3ODYJCQkJICogcGdhaW9faW9fd2FzX3JlY3ljbGVkKCkuCjc4NwkJCQkgKi8KNzg4 CQkJCXBnX3JlYWRfYmFycmllcigpOwo3ODkJCQkJcGdhaW9faW9fcmVjbGFpbShpb2gpOwo3 OTAJCQkJcmVjbGFpbWVkKys7Cjc5MQkJCX0KNzkyCQl9Cjc5MwkKNzk0CQlpZiAocmVjbGFp bWVkID4gMCkKNzk1CQkJcmV0dXJuOwo3OTYJCjc5NwkJLyoKNzk4CQkgKiBJZiB3ZSBoYXZl IGFueSB1bnN1Ym1pdHRlZCBJT3MsIHN1Ym1pdCB0aGVtIG5vdy4gV2UnbGwgc3RhcnQgd2Fp dGluZyBpbgo3OTkJCSAqIGEgc2Vjb25kLCBzbyBpdCdzIGJldHRlciB0aGV5J3JlIGluIGZs aWdodC4gVGhpcyBhbHNvIGFkZHJlc3NlcyB0aGUKODAwCQkgKiBlZGdlLWNhc2UgdGhhdCBh bGwgSU9zIGFyZSB1bnN1Ym1pdHRlZC4KODAxCQkgKi8KODAyCQlpZiAocGdhaW9fbXlfYmFj a2VuZC0+bnVtX3N0YWdlZF9pb3MgPiAwKQo4MDMJCQlwZ2Fpb19zdWJtaXRfc3RhZ2VkKCk7 CjgwNAkKODA1CQkvKiBwb3NzaWJseSBzb21lIElPcyBmaW5pc2hlZCBkdXJpbmcgc3VibWlz c2lvbiAqLwo4MDYJCWlmICghZGNsaXN0X2lzX2VtcHR5KCZwZ2Fpb19teV9iYWNrZW5kLT5p ZGxlX2lvcykpCjgwNwkJCXJldHVybjsKODA4CQo4MDkJCWlmIChkY2xpc3RfY291bnQoJnBn YWlvX215X2JhY2tlbmQtPmluX2ZsaWdodF9pb3MpID09IDApCjgxMAkJCWVyZXBvcnQoRVJS T1IsCjgxMQkJCQkJZXJybXNnX2ludGVybmFsKCJubyBmcmVlIElPcyBkZXNwaXRlIG5vIGlu LWZsaWdodCBJT3MiKSwKODEyCQkJCQllcnJkZXRhaWxfaW50ZXJuYWwoIiVkIHBlbmRpbmcs ICV1IGluLWZsaWdodCwgJXUgaWRsZSBJT3MiLAo4MTMJCQkJCQkJCQkgICBwZ2Fpb19teV9i YWNrZW5kLT5udW1fc3RhZ2VkX2lvcywKODE0CQkJCQkJCQkJICAgZGNsaXN0X2NvdW50KCZw Z2Fpb19teV9iYWNrZW5kLT5pbl9mbGlnaHRfaW9zKSwKODE1CQkJCQkJCQkJICAgZGNsaXN0 X2NvdW50KCZwZ2Fpb19teV9iYWNrZW5kLT5pZGxlX2lvcykpKTsKODE2CQo4MTcJCS8qCjgx OAkJICogV2FpdCBmb3IgdGhlIG9sZGVzdCBpbi1mbGlnaHQgSU8gdG8gY29tcGxldGUuCjgx OQkJICoKODIwCQkgKiBYWFg6IFJldXNpbmcgdGhlIGdlbmVyYWwgSU8gd2FpdCBpcyBzdWJv cHRpbWFsLCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQKODIxCQkgKiBmb3IgdGhhdCBzcGVjaWZp YyBJTyB0byBjb21wbGV0ZSwgd2UganVzdCBuZWVkICphbnkqIElPIHRvIGNvbXBsZXRlLgo4 MjIJCSAqLwo4MjMJCXsKODI0CQkJUGdBaW9IYW5kbGUgKmlvaCA9IGRjbGlzdF9oZWFkX2Vs ZW1lbnQoUGdBaW9IYW5kbGUsIG5vZGUsCjgyNQkJCQkJCQkJCQkJCSAgICZwZ2Fpb19teV9i YWNrZW5kLT5pbl9mbGlnaHRfaW9zKTsKODI2CQkJdWludDY0CQlnZW5lcmF0aW9uID0gaW9o LT5nZW5lcmF0aW9uOwo4MjcJCjgyOAkJCXN3aXRjaCAoKFBnQWlvSGFuZGxlU3RhdGUpIGlv aC0+c3RhdGUpCjgyOQkJCXsKODMwCQkJCQkvKiBzaG91bGQgbm90IGJlIGluIGluLWZsaWdo dCBsaXN0ICovCjgzMQkJCQljYXNlIFBHQUlPX0hTX0lETEU6CjgzMgkJCQljYXNlIFBHQUlP X0hTX0RFRklORUQ6CjgzMwkJCQljYXNlIFBHQUlPX0hTX0hBTkRFRF9PVVQ6CjgzNAkJCQlj YXNlIFBHQUlPX0hTX1NUQUdFRDoKODM1CQkJCWNhc2UgUEdBSU9fSFNfQ09NUExFVEVEX0xP Q0FMOgo4MzYJCQkJCWVsb2coRVJST1IsICJzaG91bGRuJ3QgZ2V0IGhlcmUgd2l0aCBpbzol ZCBpbiBzdGF0ZSAlZCIsCjgzNwkJCQkJCSBwZ2Fpb19pb19nZXRfaWQoaW9oKSwgaW9oLT5z dGF0ZSk7CjgzOAkJCQkJYnJlYWs7CjgzOQkKODQwCQkJCWNhc2UgUEdBSU9fSFNfQ09NUExF VEVEX0lPOgo4NDEJCQkJY2FzZSBQR0FJT19IU19TVUJNSVRURUQ6Cjg0MgkJCQkJcGdhaW9f ZGVidWdfaW8oREVCVUcyLCBpb2gsCjg0MwkJCQkJCQkJICAgIndhaXRpbmcgZm9yIGZyZWUg aW8gd2l0aCAldSBpbiBmbGlnaHQiLAo4NDQJCQkJCQkJCSAgIGRjbGlzdF9jb3VudCgmcGdh aW9fbXlfYmFja2VuZC0+aW5fZmxpZ2h0X2lvcykpOwo4NDUJCjg0NgkJCQkJLyoKODQ3CQkJ CQkgKiBJbiBhIG1vcmUgZ2VuZXJhbCBjYXNlIHRoaXMgd291bGQgYmUgcmFjeSwgYmVjYXVz ZSB0aGUKODQ4CQkJCQkgKiBnZW5lcmF0aW9uIGNvdWxkIGluY3JlYXNlIGFmdGVyIHdlIHJl YWQgaW9oLT5zdGF0ZSBhYm92ZS4KODQ5CQkJCQkgKiBCdXQgd2UgYXJlIG9ubHkgbG9va2lu ZyBhdCBJT3MgYnkgdGhlIGN1cnJlbnQgYmFja2VuZCBhbmQKODUwCQkJCQkgKiB0aGUgSU8g Y2FuIG9ubHkgYmUgcmVjeWNsZWQgYnkgdGhpcyBiYWNrZW5kLiAgRXZlbiB0aGlzIGlzCjg1 MQkJCQkJICogb25seSBPSyBiZWNhdXNlIHdlIGdldCB0aGUgaGFuZGxlJ3MgZ2VuZXJhdGlv biBiZWZvcmUKODUyCQkJCQkgKiBwb3RlbnRpYWxseSBwcm9jZXNzaW5nIGludGVycnVwdHMs IGUuZy4gYXMgcGFydCBvZgo4NTMJCQkJCSAqIHBnYWlvX2RlYnVnX2lvKCkuCjg1NAkJCQkJ ICovCjg1NQkJCQkJcGdhaW9faW9fd2FpdChpb2gsIGdlbmVyYXRpb24pOwo4NTYJCQkJCWJy ZWFrOwo4NTcJCjg1OAkJCQljYXNlIFBHQUlPX0hTX0NPTVBMRVRFRF9TSEFSRUQ6Cjg1OQkK ODYwCQkJCQkvKgo4NjEJCQkJCSAqIEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tl bmQganVzdCBmaW5pc2hlZCB0aGlzIElPLgo4NjIJCQkJCSAqCjg2MwkJCQkJICogTm90ZSB0 aGF0IG5vIGludGVycnVwdHMgYXJlIHByb2Nlc3NlZCBiZXR3ZWVuIHRoZSBzdGF0ZQo4NjQJ CQkJCSAqIGNoZWNrIGFuZCB0aGUgY2FsbCB0byByZWNsYWltIC0gdGhhdCdzIGltcG9ydGFu dCBhcwo4NjUJCQkJCSAqIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgaGF2ZSBhbHJl YWR5IHJlY2xhaW1lZCB0aGUKODY2CQkJCQkgKiBoYW5kbGUuCjg2NwkJCQkJICoKODY4CQkJ CQkgKiBOZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXJlJ3Mgbm8gcmVvcmRlcmluZywgaW4gdGhl IG1vcmUKODY5CQkJCQkgKiBjb21tb24gcGF0aHMsIHdoZXJlIHdlIHdhaXQgZm9yIElPLCB0 aGF0J3MgZG9uZSBieQo4NzAJCQkJCSAqIHBnYWlvX2lvX3dhc19yZWN5Y2xlZCgpLgo4NzEJ CQkJCSAqLwo4NzIJCQkJCXBnX3JlYWRfYmFycmllcigpOwo4NzMJCQkJCXBnYWlvX2lvX3Jl Y2xhaW0oaW9oKTsKODc0CQkJCQlicmVhazsKODc1CQkJfQo4NzYJCjg3NwkJCWlmIChkY2xp c3RfY291bnQoJnBnYWlvX215X2JhY2tlbmQtPmlkbGVfaW9zKSA9PSAwKQo4NzgJCQkJZWxv ZyhQQU5JQywgIm5vIGlkbGUgSU8gYWZ0ZXIgd2FpdGluZyBmb3IgSU8gdG8gdGVybWluYXRl Iik7Cjg3OQkJCXJldHVybjsKODgwCQl9Cjg4MQl9Cjg4MgkKODgzCS8qCjg4NAkgKiBJbnRl cm5hbCAtIGNvZGUgb3V0c2lkZSBvZiBBSU8gc2hvdWxkIG5ldmVyIG5lZWQgdGhpcyBhbmQg aXQnZCBiZSBoYXJkIGZvcgo4ODUJICogc3VjaCBjb2RlIHRvIGJlIHNhZmUuCjg4NgkgKi8K ODg3CXN0YXRpYyBQZ0Fpb0hhbmRsZSAqCjg4OAlwZ2Fpb19pb19mcm9tX3dyZWYoUGdBaW9X YWl0UmVmICppb3csIHVpbnQ2NCAqcmVmX2dlbmVyYXRpb24pCjg4OQl7Cjg5MAkJUGdBaW9I YW5kbGUgKmlvaDsKODkxCQo4OTIJCUFzc2VydChpb3ctPmFpb19pbmRleCA8IHBnYWlvX2N0 bC0+aW9faGFuZGxlX2NvdW50KTsKODkzCQo4OTQJCWlvaCA9ICZwZ2Fpb19jdGwtPmlvX2hh bmRsZXNbaW93LT5haW9faW5kZXhdOwo4OTUJCjg5NgkJKnJlZl9nZW5lcmF0aW9uID0gKCh1 aW50NjQpIGlvdy0+Z2VuZXJhdGlvbl91cHBlcikgPDwgMzIgfAo4OTcJCQlpb3ctPmdlbmVy YXRpb25fbG93ZXI7Cjg5OAkKODk5CQlBc3NlcnQoKnJlZl9nZW5lcmF0aW9uICE9IDApOwo5 MDAJCjkwMQkJcmV0dXJuIGlvaDsKOTAyCX0KOTAzCQo5MDQJc3RhdGljIGNvbnN0IGNoYXIg Kgo5MDUJcGdhaW9faW9fc3RhdGVfZ2V0X25hbWUoUGdBaW9IYW5kbGVTdGF0ZSBzKQo5MDYJ ewo5MDcJI2RlZmluZSBQR0FJT19IU19UT1NUUl9DQVNFKHN5bSkgY2FzZSBQR0FJT19IU18j I3N5bTogcmV0dXJuICNzeW0KOTA4CQlzd2l0Y2ggKChQZ0Fpb0hhbmRsZVN0YXRlKSBzKQog ICAweDAwMDAwMDAwMDA0MzY3MTQgPCsyMzA+OglibHR1CWEyLGExLDB4NDM2NzI4IDxwZ2Fp b19pb19yZWNsYWltKzI1MD4KICAgMHgwMDAwMDAwMDAwNDM2NzE4IDwrMjM0PjoJc2xsaQlh MSxhMSwweDMKICAgMHgwMDAwMDAwMDAwNDM2NzFhIDwrMjM2PjoJYXVpcGMJYTAsMHg0ODUK ICAgMHgwMDAwMDAwMDAwNDM2NzFlIDwrMjQwPjoJYWRkaQlhMCxhMCwtMTEwNiAjIDB4OGJi MmM4CiAgIDB4MDAwMDAwMDAwMDQzNjcyMiA8KzI0ND46CWFkZAlhMCxhMCxhMQogICAweDAw MDAwMDAwMDA0MzY3MjQgPCsyNDY+OglsZAlhNCwwKGEwKQogICAweDAwMDAwMDAwMDA0MzY3 MjYgPCsyNDg+OglqCTB4NDM2NzJhIDxwZ2Fpb19pb19yZWNsYWltKzI1Mj4KICAgMHgwMDAw MDAwMDAwNDM2NzI4IDwrMjUwPjoJbGkJYTQsMAoKOTA5CQl7CjkxMAkJCQlQR0FJT19IU19U T1NUUl9DQVNFKElETEUpOwo5MTEJCQkJUEdBSU9fSFNfVE9TVFJfQ0FTRShIQU5ERURfT1VU KTsKOTEyCQkJCVBHQUlPX0hTX1RPU1RSX0NBU0UoREVGSU5FRCk7CjkxMwkJCQlQR0FJT19I U19UT1NUUl9DQVNFKFNUQUdFRCk7CjkxNAkJCQlQR0FJT19IU19UT1NUUl9DQVNFKFNVQk1J VFRFRCk7CjkxNQkJCQlQR0FJT19IU19UT1NUUl9DQVNFKENPTVBMRVRFRF9JTyk7CjkxNgkJ CQlQR0FJT19IU19UT1NUUl9DQVNFKENPTVBMRVRFRF9TSEFSRUQpOwo5MTcJCQkJUEdBSU9f SFNfVE9TVFJfQ0FTRShDT01QTEVURURfTE9DQUwpOwo5MTgJCX0KOTE5CSN1bmRlZiBQR0FJ T19IU19UT1NUUl9DQVNFCjkyMAkKOTIxCQlyZXR1cm4gTlVMTDsJCQkJLyogc2lsZW5jZSBj b21waWxlciAqLwo5MjIJfQo5MjMJCjkyNAljb25zdCBjaGFyICoKOTI1CXBnYWlvX2lvX2dl dF9zdGF0ZV9uYW1lKFBnQWlvSGFuZGxlICppb2gpCjkyNgl7CjkyNwkJcmV0dXJuIHBnYWlv X2lvX3N0YXRlX2dldF9uYW1lKGlvaC0+c3RhdGUpOwogICAweDAwMDAwMDAwMDA0MzY3MGMg PCsyMjI+OglsYnUJYTEsMChzMCkKICAgMHgwMDAwMDAwMDAwNDM2NzEwIDwrMjI2PjoJbGkJ YTIsNwoKOTI4CX0KOTI5CQo5MzAJY29uc3QgY2hhciAqCjkzMQlwZ2Fpb19yZXN1bHRfc3Rh dHVzX3N0cmluZyhQZ0Fpb1Jlc3VsdFN0YXR1cyBycykKOTMyCXsKOTMzCQlzd2l0Y2ggKChQ Z0Fpb1Jlc3VsdFN0YXR1cykgcnMpCiAgIDB4MDAwMDAwMDAwMDQzNjczOCA8KzI2Nj46CWJs dHUJYTUsYTIsMHg0MzY3NGMgPHBnYWlvX2lvX3JlY2xhaW0rMjg2PgogICAweDAwMDAwMDAw MDA0MzY3M2MgPCsyNzA+OglzbGxpCWEyLGEyLDB4MwogICAweDAwMDAwMDAwMDA0MzY3M2Ug PCsyNzI+OglhdWlwYwlhNSwweDQ4NQogICAweDAwMDAwMDAwMDA0MzY3NDIgPCsyNzY+Oglh ZGRpCWE1LGE1LC0xMTgyICMgMHg4YmIyYTAKICAgMHgwMDAwMDAwMDAwNDM2NzQ2IDwrMjgw PjoJYWRkCWEyLGEyLGE1CiAgIDB4MDAwMDAwMDAwMDQzNjc0OCA8KzI4Mj46CWxkCWE1LDAo YTIpCiAgIDB4MDAwMDAwMDAwMDQzNjc0YSA8KzI4ND46CWoJMHg0MzY3NGUgPHBnYWlvX2lv X3JlY2xhaW0rMjg4PgogICAweDAwMDAwMDAwMDA0MzY3NGMgPCsyODY+OglsaQlhNSwwCgpF bmQgb2YgYXNzZW1ibGVyIGR1bXAuCihnZGIpIA== --------------3C5tAGfFK3iSpWqimb0IaPIy--