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 1tyvsI-00D1KT-Je for pgsql-hackers@arkaria.postgresql.org; Sun, 30 Mar 2025 16:51:07 +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 1tyvsG-00BOoF-6b for pgsql-hackers@arkaria.postgresql.org; Sun, 30 Mar 2025 16:51:04 +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 1tyvsF-00BOo4-4v for pgsql-hackers@lists.postgresql.org; Sun, 30 Mar 2025 16:51:03 +0000 Received: from mail-qv1-xf31.google.com ([2607:f8b0:4864:20::f31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tyvs9-001zlp-0F for pgsql-hackers@lists.postgresql.org; Sun, 30 Mar 2025 16:51:01 +0000 Received: by mail-qv1-xf31.google.com with SMTP id 6a1803df08f44-6ecfc7ed0c1so33687626d6.3 for ; Sun, 30 Mar 2025 09:50:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1743353455; x=1743958255; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=KIpwcc39YpKJ0Ja5WgkwP0jCjsbmtAVZnCOwSOZs/JM=; b=UHHk9AUs//KdUsgtlzuYLMAwNSFErJsgJ/I3NhS/Pa5x2Cpx3Ryez9IZPJ+2W2YysJ m+nFm6FmZ3iz1L5dI2Yle1gIh/Xq6Cat9evgYvCSFiWzLKeJ8KTLViywjso94ttXyqk5 F6EaU5jjGazon8GwtjnQTgeEKa5zHCeH0IHA6Dq31L2g3e9B8k4ZA3mb1kOxfzsjembT OPbnHXkRgdDEMqzxbSTtLpp9fPfdhku+bTtLhIJAqZlQiLQeKAUQ4oySNEPzebwABH5K qEDoiqtdMXm/x7FMpMyp8pMDZqh32znIi568Wmhf1ZQwjxIY0nI47mlKv84DrkHFCTjm KwQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743353455; x=1743958255; h=in-reply-to:autocrypt:content-language:from: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=KIpwcc39YpKJ0Ja5WgkwP0jCjsbmtAVZnCOwSOZs/JM=; b=ZUJEFV7mtt6BGmnPdFhJ79jp+yGgG8oy6cNWUnyFNVDJQhmpvF+z+h8cyse+i3wzsv Yz3qVn/dtfbmWBzUVQvw/+f5CbdfGfd4obWW25Lu+RtKlB2IfLfw9K5esgrMln4YQny7 cAG+JgEuV+TY1pq7wooC65EyIoWc1MOTNQrauYZBXzBdwKMeq/Qwqn11YrSoywyx+HgW YY9Z3eSLF5i1kFBuesx9KrTAVPgsHyt+mqTVRSNsnFb+7TRc4eCU7zcIp8WiI3Kvboit nLJlurI/azvhOQeZ+ABy1YXl0GD429evakGeXDQsWrqzKOf783VnIwIlFwsaabdUpTvO mCqA== X-Forwarded-Encrypted: i=1; AJvYcCWkyr6hBRnDc8inltdvJz6lr82DAvNhBiCrHQOF7beQ4op9mbrSmylv7oTkKkBJFZ8HYrzhiLdxo6YUSpBP@lists.postgresql.org X-Gm-Message-State: AOJu0Yy2NvU2sNJiuvznlHitaHGWGjYdYGdzMR68V0et4WGsTy4M5Wno sluUgKxNj9m1uJLh8zLCmNYtg53vQ8KqP4ty9xg43JqHr3l5WPJVb2h3llIO9LY= X-Gm-Gg: ASbGncs4DG8F7dG+c7nPPfZEL1IcsfM32WkFs6k1Ncc17/0oZH9n+NnmulAX+xQiMjb d1EWSZd5Iwl1gfP9c3XOeqc1SXCayHzogyAIyRQYbiS7ktDVwxvSsNZXUebCepBI1HxtBalrhcM lXp25IuvmWqq6aMSlR0ta+05kqMwB6DTgPVC2piceqhFjqwBjqZ8h3UGj4k0D7VwiHodyfmOB3c R+hpUbGQGdK1ftMX8mtUtwuPnjipF4xk4KSs03RahcFcRcANdlWdVJ9sZz8CE8allO9bp7U4Z6f cGetZV5jeNwiB53N2yyoizmoBw6yRQ0WRHrd5dwWPvtpoddDGA9o7qk= X-Google-Smtp-Source: AGHT+IHnzTOzSLtsX0nSIyM3PQ+c9pCHgH/U8XP/DhLbTJ/H9RAS6R/2pACXKFBoAJ2KEnmccLciiQ== X-Received: by 2002:ad4:5ca1:0:b0:6e8:fe0a:7031 with SMTP id 6a1803df08f44-6eed62525a5mr65783086d6.43.1743353455247; Sun, 30 Mar 2025 09:50:55 -0700 (PDT) Received: from ?IPV6:2605:a601:a681:6b00::1cb? ([2605:a601:a681:6b00::1cb]) by smtp.googlemail.com with ESMTPSA id 6a1803df08f44-6eec97721ccsm35447016d6.73.2025.03.30.09.50.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 30 Mar 2025 09:50:52 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------X5UVU7zhzGOyNzLfc6kyDo51" Message-ID: Date: Sun, 30 Mar 2025 12:50:51 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall To: Mahendra Singh Thalor Cc: jian he , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Srinath Reddy , pgsql-hackers@lists.postgresql.org References: <202503111705.xy7fddu36qae@alvherre.pgsql> <4ef51faa-993f-46ea-9e68-7baf736c07b8@dunslane.net> <763d1c6e-9298-4bac-9bea-9331db78a154@dunslane.net> 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 AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAmwQTAQgARQIbAwIX gAIZAQULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcWIQTkPlhGHfx8v0RpFaWZ+n/LWfw7gQUC ZFlxxwUJGVGAbgAKCRCZ+n/LWfw7gXikB/9ZdcUy6CTBFIIuL/bVsc1eLEW/gJBjJBF6HxNY xgEkAgXAp4Lg4A5U+QB9GouFr7+GYxF0BU4hzoGhNPUWltxnHdMWP8nC/38LAqgMi8L/bbsm HW5YPBdWYaAZAPJQVfOAgjTbRUb26KSprpyrrJKW0ZmrZfjhNPcQ72jpWzoPLQqx2X6B0fru 1jq+cBh8lb6r1mJTim1T3JIn+F/v5VpdQS+EL8xqsHkfzKjIPsW3CIXpkypSk6saA55Rkkbl 26AW8ftPVB0Q6Lnn6FLt9CP0MGNixBQ55yq8r1K+nCBvCCjvQjM8RDm0UUum0WNl+ifQgTLO E8TWEnwVtkBf+3QWzsBNBE7KWFkBCADRnOM0FCzsYW6jtncg+dWIagjUZpvaClmqn/sJluLa Q3v1VXMQJzYs3eC1gh386W+XBwLRpDj3jzH81lX+p73Re3d3oJW7X+ffsxuzu5ZVdMUkqBYo nkAbKxr6gyJ12F/+JkUVzLcoTN+d/7YsQvUVi7NaKH8mJgjz112O4fUe3p9wfAaFa0RXHc5S GPzRTYRRlv/XZBIho4J2tkZOnteZJZ+GbxQVlINt6fd8P6al3MWOvpP/ExJPguEfjOsO6Njy xjo3WfpD4lHMOR/Oc3/8mScEF84rF2jXbsFgelWnbPWAvXY+pD0dXOFRkagGmC/viwBDqq5b 5tk76kKmUbZxABEBAAHCwHwEGAEIACYCGwwWIQTkPlhGHfx8v0RpFaWZ+n/LWfw7gQUCZFlx 5wUJGVGAjgAKCRCZ+n/LWfw7gf+iB/4g8CPY5jihf5r/8EsoIGe2H+dpVmpPF8YGBzTIvCz/ fQoOq8AX/pE76QEuFnFZWfjw+wgBXgCVmkox2Eflkk6z4ND3pcwGZ6CfCxTQCDk/dij+2DQ4 6bmDCy/sBgcbz9mTpoLC11HLoPae6YN9nBNQRZDcEFEu54OaVOqlIdbA6m+POIBCXZdHOFc0 WoDTgxHRzC1jgQNidyd6tKqcsVJs0dzF0oKTmFFmUAqTdJO12LBuNA1rlqrR3EtpYk8B/wtS 5dIMD7Q8hwQpL+4C6GNpb6ZKnPkLi47pDOLhz2qBrqN+rqUEsT3YnExYpzj5yOBi+FlmV1Hw 49QYe1sn2ZPs 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. --------------X5UVU7zhzGOyNzLfc6kyDo51 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2025-03-29 Sa 1:17 AM, Mahendra Singh Thalor wrote: > On Sat, 29 Mar 2025 at 03:50, Andrew Dunstan wrote: >> >> On 2025-03-27 Th 5:15 PM, Andrew Dunstan wrote: >>> On 2025-03-19 We 2:41 AM, Mahendra Singh Thalor wrote: >>>> On Wed, 12 Mar 2025 at 21:18, Andrew Dunstan >>>> wrote: >>>>> On 2025-03-12 We 3:03 AM, jian he wrote: >>>>>> On Wed, Mar 12, 2025 at 1:06 AM Álvaro Herrera >>>>>> wrote: >>>>>>> Hello, >>>>>>> >>>>>>> On 2025-Mar-11, Mahendra Singh Thalor wrote: >>>>>>> >>>>>>>> In map.dat file, I tried to fix this issue by adding number of >>>>>>>> characters >>>>>>>> in dbname but as per code comments, as of now, we are not >>>>>>>> supporting \n\r >>>>>>>> in dbnames so i removed handling. >>>>>>>> I will do some more study to fix this issue. >>>>>>> Yeah, I think this is saying that you should not consider the >>>>>>> contents >>>>>>> of map.dat as a shell string. After all, you're not going to >>>>>>> _execute_ >>>>>>> that file via the shell. >>>>>>> >>>>>>> Maybe for map.dat you need to escape such characters somehow, so that >>>>>>> they don't appear as literal newlines/carriage returns. >>>>>>> >>>>>> I am confused. >>>>>> currently pg_dumpall plain format will abort when encountering dbname >>>>>> containing newline. >>>>>> the left dumped plain file does not contain all the cluster >>>>>> databases data. >>>>>> >>>>>> >>>>>> if pg_dumpall non-text format aborts earlier, >>>>>> it's aligned with pg_dumpall plain format? >>>>>> it's also an improvement since aborts earlier, nothing will be dumped? >>>>>> >>>>>> >>>>>> am i missing something? >>>>>> >>>>>> >>>>> I think we should fix that. >>>>> >>>>> But for the current proposal, Álvaro and I were talking this morning, >>>>> and we thought the simplest thing here would be to have the one line >>>>> format and escape NL/CRs in the database name. >>>>> >>>>> >>>>> cheers >>>>> >>>> Okay. As per discussions, we will keep one line entry for each >>>> database into map.file. >>>> >>>> Thanks all for feedback and review. >>>> >>>> Here, I am attaching updated patches for review and testing. These >>>> patches can be applied on commit a6524105d20b. >>> >>> >>> I'm working through this patch set with a view to committing it. >>> Attached is some cleanup which is where I got to today, although there >>> is more to do. One thing I am wondering is why not put the >>> SimpleDatabaseOidList stuff in fe_utils/simle_list.{c,h} ? That's >>> where all the similar stuff belongs, and it feels strange to have this >>> inline in pg_restore.c. (I also don't like the name much - >>> SimpleOidStringList or maybe SimpleOidPlusStringList might be better). >>> >>> >>> >> >> OK, I have done that, so here is the result. The first two are you >> original patches. patch 3 adds the new list type to fe-utils, and patch >> 4 contains my cleanups and use of the new list type. Apart from some >> relatively minor cleanup, the one thing I would like to change is how >> dumps are named. If we are producing tar or custom format dumps, I think >> the file names should reflect that (oid.dmp and oid.tar rather than a >> bare oid as the filename), and pg_restore should look for those. I'm >> going to work on that tomorrow - I don't think it will be terribly >> difficult. >> > Thanks Andrew. > > Here, I am attaching a delta patch for oid.tar and oid.dmp format. > OK, looks good, I have incorporated that. There are a couple of rough edges, though. First, I see this: andrew@ub22arm:inst $ bin/pg_restore -C -d postgres --exclude-database=regression_dummy_seclabel --exclude-database=regression_test_extensions --exclude-database=regression_test_pg_dump dest pg_restore: error: could not execute query: "ERROR:  role "andrew" already exists " Command was: " -- -- Roles -- CREATE ROLE andrew;" pg_restore: warning: errors ignored on global.dat file restore: 1 pg_restore: error: could not execute query: ERROR:  database "template1" already exists Command was: CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'SQL_ASCII' LOCALE_PROVIDER = libc LOCALE = 'C'; pg_restore: warning: errors ignored on database "template1" restore: 1 pg_restore: error: could not execute query: ERROR:  database "postgres" already exists Command was: CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'SQL_ASCII' LOCALE_PROVIDER = libc LOCALE = 'C'; pg_restore: warning: errors ignored on database "postgres" restore: 1 pg_restore: warning: errors ignored on restore: 3 It seems pointless to be trying to create the rolw that we are connected as, and we also expect template1 and postgres to exist. In a similar vein, I don't see why we are setting the --create flag in pg_dumpall for those databases. I'm attaching a patch that is designed to stop that, but it doesn't solve the above issues. I also notice a bunch of these in globals.dat: -- -- Databases -- -- -- Database "template1" dump -- -- -- Database "andrew" dump -- -- -- Database "isolation_regression_brin" dump -- -- -- Database "isolation_regression_delay_execution" dump --  ... The patch also tries to fix this. Lastly, this badly needs some TAP tests written. I'm going to work on reviewing the documentation next. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------X5UVU7zhzGOyNzLfc6kyDo51 Content-Type: text/x-patch; charset=UTF-8; name="v20250330-0001-Move-common-pg_dump-code-related-to-connec.patch" Content-Disposition: attachment; filename*0="v20250330-0001-Move-common-pg_dump-code-related-to-connec.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlZDUzZDhiNWFkODJlNDliYjU2YmM1YmM0OGRkYjg0MjZmZGI0YzgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVu QGdtYWlsLmNvbT4KRGF0ZTogV2VkLCAxOSBNYXIgMjAyNSAwMToxODo0NiArMDUzMApTdWJq ZWN0OiBbUEFUQ0ggdjIwMjUwMzMwIDEvM10gTW92ZSBjb21tb24gcGdfZHVtcCBjb2RlIHJl bGF0ZWQgdG8gY29ubmVjdGlvbnMKIHRvIGEgbmV3IGZpbGUKCkNvbm5lY3REYXRhYmFzZSBp cyB1c2VkIGJ5IHBnX2R1bXBhbGwsIHBnX3Jlc3RvcmUgYW5kIHBnX2R1bXAgc28gbW92ZQpj b21tb24gY29kZSB0byBuZXcgZmlsZS4KCm5ldyBmaWxlIG5hbWU6IGNvbm5lY3RkYi5jCgpB dXRob3I6ICAgIE1haGVuZHJhIFNpbmdoIFRoYWxvciA8bWFoaTZydW5AZ21haWwuY29tPgot LS0KIHNyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgNSArLQogc3Jj L2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jICAgICAgICAgIHwgMjk0ICsrKysrKysrKysrKysr KysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oICAgICAgICAgIHwg IDI2ICsrKwogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAxICsK IHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCAgICAgICAgICB8ICAgNiArLQogc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgICA2ICstCiBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2RiLmMgICAgICAgfCAgNzkgKy0tLS0tLQogc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYyAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVt cGFsbC5jICAgICAgICAgfCAyNzggKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOSBmaWxl cyBjaGFuZ2VkLCAzNTIgaW5zZXJ0aW9ucygrKSwgMzQ1IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaAoKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAy MzNhZDE1Y2E3NS4uZmE3OTU4ODNlOWYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9N YWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDcg QEAgT0JKUyA9IFwKIAljb21wcmVzc19sejQubyBcCiAJY29tcHJlc3Nfbm9uZS5vIFwKIAlj b21wcmVzc196c3RkLm8gXAorCWNvbm5lY3RkYi5vIFwKIAlkdW1wdXRpbHMubyBcCiAJZmls dGVyLm8gXAogCXBhcmFsbGVsLm8gXApAQCAtNTAsOCArNTEsOCBAQCBwZ19kdW1wOiBwZ19k dW1wLm8gY29tbW9uLm8gcGdfZHVtcF9zb3J0Lm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEg c3VibWFrZS1saWJwZwogcGdfcmVzdG9yZTogcGdfcmVzdG9yZS5vICQoT0JKUykgfCBzdWJt YWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCiAJJChD QykgJChDRkxBR1MpIHBnX3Jlc3RvcmUubyAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdT X0VYKSAkKExJQlMpIC1vICRAJChYKQogCi1wZ19kdW1wYWxsOiBwZ19kdW1wYWxsLm8gZHVt cHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2Ut bGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCi0JJChDQykgJChDRkxBR1MpIHBnX2R1 bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVTKSAkKExERkxBR1MpICQo TERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKK3BnX2R1bXBhbGw6IHBnX2R1bXBhbGwu byAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxp YnBnZmV1dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gJChPQkpTKSAkKExE RkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAogaW5zdGFsbDogYWxs IGluc3RhbGxkaXJzCiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX2R1bXAkKFgpICckKERFU1RE SVIpJChiaW5kaXIpJy9wZ19kdW1wJChYKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L2Nvbm5lY3RkYi5jIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZTU5M2I3MGU4MQotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwpAQCAtMCwwICsxLDI5NCBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29ubmVjdGRiLmMKKyAqICAgIFRoaXMg aXMgYSBjb21tb24gZmlsZSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhYmFzZS4KKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqICAgIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVk ZSAiY29tbW9uL2Nvbm5lY3QuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2lu Y2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIKKyNpbmNs dWRlICJkdW1wdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIK Kworc3RhdGljIGNoYXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRz LCBjb25zdCBjaGFyICoqdmFsdWVzKTsKKworLyoKKyAqIENvbm5lY3REYXRhYmFzZQorICoK KyAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRl cnMuICBBbgorICogaW50ZXJhY3RpdmUgcGFzc3dvcmQgcHJvbXB0IGlzIGF1dG9tYXRpY2Fs bHkgaXNzdWVkIGlmIHJlcXVpcmVkLgorICoKKyAqIElmIGZhaWxfb25fZXJyb3IgaXMgZmFs c2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcgYW55IG1lc3NhZ2UKKyAqIG9u IGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBu ZXh0IHRyeS4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgJ2Nvbm5zdHInIGlzIHNldCB0byBh IGNvbm5lY3Rpb24gc3RyaW5nIGNvbnRhaW5pbmcKKyAqIHRoZSBvcHRpb25zIHVzZWQgYW5k ICdzZXJ2ZXJfdmVyc2lvbicgaXMgc2V0IHRvIHZlcnNpb24gc28gdGhhdCBjYWxsZXIKKyAq IGNhbiB1c2UgdGhlbS4KKyAqLworUEdjb25uICoKK0Nvbm5lY3REYXRhYmFzZShjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAorCQkJCWNvbnN0 IGNoYXIgKnBnaG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIs CisJCQkJdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IsIGNv bnN0IGNoYXIgKnByb2duYW1lLAorCQkJCWNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNl cnZlcl92ZXJzaW9uLCBjaGFyICpwYXNzd29yZCwKKwkJCQljaGFyICpvdmVycmlkZV9kYm5h bWUpCit7CisJUEdjb25uCSAgICpjb25uOworCWJvb2wJCW5ld19wYXNzOworCWNvbnN0IGNo YXIgKnJlbW90ZXZlcnNpb25fc3RyOworCWludAkJCW15X3ZlcnNpb247CisJY29uc3QgY2hh ciAqKmtleXdvcmRzID0gTlVMTDsKKwljb25zdCBjaGFyICoqdmFsdWVzID0gTlVMTDsKKwlQ UWNvbm5pbmZvT3B0aW9uICpjb25uX29wdHMgPSBOVUxMOworCWludAkJCXNlcnZlcl92ZXJz aW9uX3RlbXA7CisKKwlpZiAocHJvbXB0X3Bhc3N3b3JkID09IFRSSV9ZRVMgJiYgIXBhc3N3 b3JkKQorCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7 CisKKwkvKgorCSAqIFN0YXJ0IHRoZSBjb25uZWN0aW9uLiAgTG9vcCB1bnRpbCB3ZSBoYXZl IGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5CisJICogYmFja2VuZC4KKwkgKi8KKwlkbwor CXsKKwkJaW50CQkJYXJnY291bnQgPSA4OworCQlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29w dDsKKwkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7CisJCWludAkJCWkgPSAwOworCisJCWZy ZWUoa2V5d29yZHMpOworCQlmcmVlKHZhbHVlcyk7CisJCVBRY29ubmluZm9GcmVlKGNvbm5f b3B0cyk7CisKKwkJLyoKKwkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24gaW5mbyBpbnB1dHMg Z2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZworCQkgKiBhbmQgb3RoZXIgb3B0 aW9ucy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRoZQorCQkg KiBjb25uZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygpIHdv dWxkIGludGVycHJldAorCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5l Y3Rpb24gc3RyaW5nLgorCQkgKi8KKwkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQorCQl7CisJ CQljb25uX29wdHMgPSBQUWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJf bXNnKTsKKwkJCWlmIChjb25uX29wdHMgPT0gTlVMTCkKKwkJCQlwZ19mYXRhbCgiJXMiLCBl cnJfbXNnKTsKKworCQkJZm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtl eXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykKKwkJCXsKKwkJCQlpZiAoY29ubl9vcHQtPnZh bCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxbMF0gIT0gJ1wwJyAmJgorCQkJCQlzdHJjbXAo Y29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAhPSAwKQorCQkJCQlhcmdjb3VudCsrOwor CQkJfQorCisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXpl b2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEp ICogc2l6ZW9mKCp2YWx1ZXMpKTsKKworCQkJZm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsg Y29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykKKwkJCXsKKwkJCQlpZiAo Y29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxbMF0gIT0gJ1wwJyAmJgor CQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAhPSAwKQorCQkJCXsK KwkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsKKwkJCQkJdmFsdWVzW2ld ID0gY29ubl9vcHQtPnZhbDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNl CisJCXsKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVv Zigqa2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkg KiBzaXplb2YoKnZhbHVlcykpOworCQl9CisKKwkJaWYgKHBnaG9zdCkKKwkJeworCQkJa2V5 d29yZHNbaV0gPSAiaG9zdCI7CisJCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7CisJCQlpKys7CisJ CX0KKwkJaWYgKHBncG9ydCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7CisJCQl2 YWx1ZXNbaV0gPSBwZ3BvcnQ7CisJCQlpKys7CisJCX0KKwkJaWYgKHBndXNlcikKKwkJewor CQkJa2V5d29yZHNbaV0gPSAidXNlciI7CisJCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7CisJCQlp Kys7CisJCX0KKwkJaWYgKHBhc3N3b3JkKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJwYXNz d29yZCI7CisJCQl2YWx1ZXNbaV0gPSBwYXNzd29yZDsKKwkJCWkrKzsKKwkJfQorCQlpZiAo ZGJuYW1lKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJkYm5hbWUiOworCQkJdmFsdWVzW2ld ID0gZGJuYW1lOworCQkJaSsrOworCQl9CisJCWlmIChvdmVycmlkZV9kYm5hbWUpCisJCXsK KwkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7CisJCQl2YWx1ZXNbaSsrXSA9IG92ZXJyaWRl X2RibmFtZTsKKwkJfQorCisJCWtleXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9u X25hbWUiOworCQl2YWx1ZXNbaV0gPSBwcm9nbmFtZTsKKwkJaSsrOworCisJCW5ld19wYXNz ID0gZmFsc2U7CisJCWNvbm4gPSBQUWNvbm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVz LCB0cnVlKTsKKworCQlpZiAoIWNvbm4pCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5l Y3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKKworCQlpZiAoUFFzdGF0dXMoY29u bikgPT0gQ09OTkVDVElPTl9CQUQgJiYKKwkJCVBRY29ubmVjdGlvbk5lZWRzUGFzc3dvcmQo Y29ubikgJiYKKwkJCSFwYXNzd29yZCAmJgorCQkJcHJvbXB0X3Bhc3N3b3JkICE9IFRSSV9O TykKKwkJeworCQkJUFFmaW5pc2goY29ubik7CisJCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9t cHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7CisJCQluZXdfcGFzcyA9IHRydWU7CisJCX0KKwl9 IHdoaWxlIChuZXdfcGFzcyk7CisKKwkvKiBjaGVjayB0byBzZWUgdGhhdCB0aGUgYmFja2Vu ZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLworCWlmIChQUXN0YXR1cyhj b25uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwl7CisJCWlmIChmYWlsX29uX2Vycm9yKQorCQkJ cGdfZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQllbHNlCisJCXsKKwkJ CVBRZmluaXNoKGNvbm4pOworCisJCQlmcmVlKGtleXdvcmRzKTsKKwkJCWZyZWUodmFsdWVz KTsKKwkJCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7CisKKwkJCXJldHVybiBOVUxMOwor CQl9CisJfQorCisJLyoKKwkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gSWYgcmVx dWVzdGVkLCByZW1lbWJlciB0aGUgb3B0aW9ucyB1c2VkLCBpbgorCSAqIHRoZSBmb3JtIG9m IGEgY29ubmVjdGlvbiBzdHJpbmcuCisJICovCisJaWYgKGNvbm5zdHIpCisJCSpjb25uc3Ry ID0gY29uc3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFsdWVzKTsKKworCWZyZWUoa2V5d29y ZHMpOworCWZyZWUodmFsdWVzKTsKKwlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJ LyogQ2hlY2sgdmVyc2lvbiAqLworCXJlbW90ZXZlcnNpb25fc3RyID0gUFFwYXJhbWV0ZXJT dGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7CisJaWYgKCFyZW1vdGV2ZXJzaW9uX3N0 cikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24iKTsKKworCXNl cnZlcl92ZXJzaW9uX3RlbXAgPSBQUXNlcnZlclZlcnNpb24oY29ubik7CisJaWYgKHNlcnZl cl92ZXJzaW9uX3RlbXAgPT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2 ZXIgdmVyc2lvbiBcIiVzXCIiLAorCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7CisKKwkvKiBJ ZiByZXF1ZXN0ZWQsIHRoZW4gY29weSBzZXJ2ZXIgdmVyc2lvbiB0byBvdXQgdmFyaWFibGUu ICovCisJaWYgKHNlcnZlcl92ZXJzaW9uKQorCQkqc2VydmVyX3ZlcnNpb24gPSBzZXJ2ZXJf dmVyc2lvbl90ZW1wOworCisJbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOworCisJLyoK KwkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8g YW55IG1pbm9yIHJlbGVhc2Ugb2YKKwkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2Vl IGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wLmMuKQorCSAqLworCWlmIChteV92ZXJz aW9uICE9IHNlcnZlcl92ZXJzaW9uX3RlbXAKKwkJJiYgKHNlcnZlcl92ZXJzaW9uX3RlbXAg PCA5MDIwMCB8fAorCQkJKHNlcnZlcl92ZXJzaW9uX3RlbXAgLyAxMDApID4gKG15X3ZlcnNp b24gLyAxMDApKSkKKwl7CisJCXBnX2xvZ19lcnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBz ZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOworCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2 ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwKKwkJCQkJCQlyZW1vdGV2ZXJzaW9u X3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOworCQlleGl0X25pY2VseSgxKTsKKwl9CisK KwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRI X1NRTCkpOworCisJcmV0dXJuIGNvbm47Cit9CisKKy8qCisgKiBjb25zdHJ1Y3RDb25uU3Ry CisgKgorICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4g a2V5d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKKyAqIHVzZWQgdG8gcGFzcyB0aGUgY29ubmVj dGlvbiBvcHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCisgKgorICogVGhlIGZv bGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKKyAqCWRibmFtZQkJLSB2YXJpZXMg aW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24KKyAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2Vj dXJlIHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgKglmYWxsYmFj a19hcHBsaWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0CisgKi8KK3N0 YXRpYyBjaGFyICoKK2NvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBj b25zdCBjaGFyICoqdmFsdWVzKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisJY2hhcgkgICAqY29ubnN0cjsKKwlpbnQJCQlpOworCWJvb2wJCWZpcnN0 a2V5d29yZCA9IHRydWU7CisKKwkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJp bmcgaW4ga2V5PSd2YWx1ZScgZm9ybWF0LiAqLworCWZvciAoaSA9IDA7IGtleXdvcmRzW2ld ICE9IE5VTEw7IGkrKykKKwl7CisJCWlmIChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUi KSA9PSAwIHx8CisJCQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwK KwkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9 PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJzdGtleXdvcmQpCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOworCQlmaXJzdGtleXdvcmQgPSBmYWxzZTsKKwkJ YXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwga2V5d29yZHNbaV0pOworCQlhcHBlbmRD b25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKKwl9CisKKwljb25uc3RyID0gcGdfc3RyZHVw KGJ1Zi0+ZGF0YSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CisJcmV0dXJuIGNvbm5z dHI7Cit9CisKKy8qCisgKiBleGVjdXRlUXVlcnkKKyAqCisgKiBSdW4gYSBxdWVyeSwgcmV0 dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVyZS4KKyAqLworUEdyZXN1 bHQgKgorZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCit7 CisJUEdyZXN1bHQgICAqcmVzOworCisJcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1 ZXJ5KTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7CisJaWYgKCFyZXMgfHwKKwkJ UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2df ZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCXBn X2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7CisJCVBRZmluaXNo KGNvbm4pOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oIGIvc3JjL2Jpbi9wZ19kdW1w L2Nvbm5lY3RkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42 YzFlMTk1NDc2OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0 ZGIuaApAQCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBj b25uZWN0ZGIuaAorICogICAgICBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGNvbm5lY3Rpb24g dG8gdGhlIGRhdGFiYXNlLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICogICAgc3JjL2Jpbi9wZ19kdW1wL2Nv bm5lY3RkYi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgQ09O TkVDVERCX0gKKyNkZWZpbmUgQ09OTkVDVERCX0gKKworI2luY2x1ZGUgInBnX2JhY2t1cC5o IgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCitleHRlcm4gUEdjb25uICpDb25u ZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9u X3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBn cG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9w YXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBy b2duYW1lLCBjb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbiwKKwkJ CQkJCQkgICBjaGFyICpwYXNzd29yZCwgY2hhciAqb3ZlcnJpZGVfZGJuYW1lKTsKK2V4dGVy biBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVl cnkpOworI2VuZGlmCQkJCQkJCS8qIENPTk5FQ1REQl9IICovCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQK aW5kZXggNjAzYmE2Y2ZiZjAuLjI1OTg5ZThmMTZiIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBA IC02LDYgKzYsNyBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAgICdjb21w cmVzc19sejQuYycsCiAgICdjb21wcmVzc19ub25lLmMnLAogICAnY29tcHJlc3NfenN0ZC5j JywKKyAgJ2Nvbm5lY3RkYi5jJywKICAgJ2R1bXB1dGlscy5jJywKICAgJ2ZpbHRlci5jJywK ICAgJ3BhcmFsbGVsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IDY1ODk4NmRlNmY4Li40 OWJjMWVlNzFlZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMjkzLDkgKzI5Myw5IEBAIHR5 cGVkZWYgdm9pZCAoKlNldHVwV29ya2VyUHRyVHlwZSkgKEFyY2hpdmUgKkFIKTsKICAqIE1h aW4gYXJjaGl2ZXIgaW50ZXJmYWNlLgogICovCiAKLWV4dGVybiB2b2lkIENvbm5lY3REYXRh YmFzZShBcmNoaXZlICpBSFgsCi0JCQkJCQkJY29uc3QgQ29ublBhcmFtcyAqY3BhcmFtcywK LQkJCQkJCQlib29sIGlzUmVjb25uZWN0KTsKK2V4dGVybiB2b2lkIENvbm5lY3REYXRhYmFz ZUFoeChBcmNoaXZlICpBSFgsCisJCQkJCQkJICAgY29uc3QgQ29ublBhcmFtcyAqY3BhcmFt cywKKwkJCQkJCQkgICBib29sIGlzUmVjb25uZWN0KTsKIGV4dGVybiB2b2lkIERpc2Nvbm5l Y3REYXRhYmFzZShBcmNoaXZlICpBSFgpOwogZXh0ZXJuIFBHY29ubiAqR2V0Q29ubmVjdGlv bihBcmNoaXZlICpBSFgpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMK aW5kZXggMWQxMzFlNWE1N2QuLjNmNTlmOGY5ZDlkIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5jCkBAIC00MTUsNyArNDE1LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYKQogCQlBSFgtPm1pblJlbW90ZVZlcnNpb24gPSAwOwogCQlBSFgtPm1heFJl bW90ZVZlcnNpb24gPSA5OTk5OTk5OwogCi0JCUNvbm5lY3REYXRhYmFzZShBSFgsICZyb3B0 LT5jcGFyYW1zLCBmYWxzZSk7CisJCUNvbm5lY3REYXRhYmFzZUFoeChBSFgsICZyb3B0LT5j cGFyYW1zLCBmYWxzZSk7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgdGFsa2luZyB0byB0aGUg REIgZGlyZWN0bHksIGRvbid0IHNlbmQgY29tbWVudHMgc2luY2UgdGhleQpAQCAtNDQ1OCw3 ICs0NDU4LDcgQEAgcmVzdG9yZV90b2NfZW50cmllc19wb3N0Zm9yayhBcmNoaXZlSGFuZGxl ICpBSCwgVG9jRW50cnkgKnBlbmRpbmdfbGlzdCkKIAkvKgogCSAqIE5vdyByZWNvbm5lY3Qg dGhlIHNpbmdsZSBwYXJlbnQgY29ubmVjdGlvbi4KIAkgKi8KLQlDb25uZWN0RGF0YWJhc2Uo KEFyY2hpdmUgKikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVlKTsKKwlDb25uZWN0RGF0YWJh c2VBaHgoKEFyY2hpdmUgKikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVlKTsKIAogCS8qIHJl LWVzdGFibGlzaCBmaXhlZCBzdGF0ZSAqLwogCV9kb1NldEZpeGVkT3V0cHV0U3RhdGUoQUgp OwpAQCAtNTA3Niw3ICs1MDc2LDcgQEAgQ2xvbmVBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI KQogCSAqIENvbm5lY3Qgb3VyIG5ldyBjbG9uZSBvYmplY3QgdG8gdGhlIGRhdGFiYXNlLCB1 c2luZyB0aGUgc2FtZSBjb25uZWN0aW9uCiAJICogcGFyYW1ldGVycyB1c2VkIGZvciB0aGUg b3JpZ2luYWwgY29ubmVjdGlvbi4KIAkgKi8KLQlDb25uZWN0RGF0YWJhc2UoKEFyY2hpdmUg KikgY2xvbmUsICZjbG9uZS0+cHVibGljLnJvcHQtPmNwYXJhbXMsIHRydWUpOworCUNvbm5l Y3REYXRhYmFzZUFoeCgoQXJjaGl2ZSAqKSBjbG9uZSwgJmNsb25lLT5wdWJsaWMucm9wdC0+ Y3BhcmFtcywgdHJ1ZSk7CiAKIAkvKiByZS1lc3RhYmxpc2ggZml4ZWQgc3RhdGUgKi8KIAlp ZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVSZWFkKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9kYi5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCmlu ZGV4IDcxYzU1ZDI0NjZhLi41YzM0OTI3OWJlYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9kYi5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIu YwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIKICNp bmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAjaW5j bHVkZSAicGFyYWxsZWwuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKICNp bmNsdWRlICJwZ19iYWNrdXBfZGIuaCIKQEAgLTg2LDkgKzg3LDkgQEAgUmVjb25uZWN0VG9T ZXJ2ZXIoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmRibmFtZSkKIAkgKiBBcmNo aXZlSGFuZGxlJ3MgY29ubkNhbmNlbCwgYmVmb3JlIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24u ICBPdGhlcndpc2UKIAkgKiBhbiBpbGwtdGltZWQgU0lHSU5UIGNvdWxkIHRyeSB0byBhY2Nl c3MgYSBkZWFkIGNvbm5lY3Rpb24uCiAJICovCi0JQUgtPmNvbm5lY3Rpb24gPSBOVUxMOwkJ LyogZG9kZ2UgZXJyb3IgY2hlY2sgaW4gQ29ubmVjdERhdGFiYXNlICovCisJQUgtPmNvbm5l Y3Rpb24gPSBOVUxMOwkJLyogZG9kZ2UgZXJyb3IgY2hlY2sgaW4gQ29ubmVjdERhdGFiYXNl QWh4ICovCiAKLQlDb25uZWN0RGF0YWJhc2UoKEFyY2hpdmUgKikgQUgsICZyb3B0LT5jcGFy YW1zLCB0cnVlKTsKKwlDb25uZWN0RGF0YWJhc2VBaHgoKEFyY2hpdmUgKikgQUgsICZyb3B0 LT5jcGFyYW1zLCB0cnVlKTsKIAogCVBRZmluaXNoKG9sZENvbm4pOwogfQpAQCAtMTA1LDE0 ICsxMDYsMTMgQEAgUmVjb25uZWN0VG9TZXJ2ZXIoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0 IGNoYXIgKmRibmFtZSkKICAqIHVzZXJuYW1lIG5ldmVyIGRvZXMgY2hhbmdlLCBzbyBvbmUg c2F2ZWRQYXNzd29yZCBpcyBzdWZmaWNpZW50LgogICovCiB2b2lkCi1Db25uZWN0RGF0YWJh c2UoQXJjaGl2ZSAqQUhYLAotCQkJCWNvbnN0IENvbm5QYXJhbXMgKmNwYXJhbXMsCi0JCQkJ Ym9vbCBpc1JlY29ubmVjdCkKK0Nvbm5lY3REYXRhYmFzZUFoeChBcmNoaXZlICpBSFgsCisJ CQkJICAgY29uc3QgQ29ublBhcmFtcyAqY3BhcmFtcywKKwkJCQkgICBib29sIGlzUmVjb25u ZWN0KQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwog CXRyaXZhbHVlCXByb21wdF9wYXNzd29yZDsKIAljaGFyCSAgICpwYXNzd29yZDsKLQlib29s CQluZXdfcGFzczsKIAogCWlmIChBSC0+Y29ubmVjdGlvbikKIAkJcGdfZmF0YWwoImFscmVh ZHkgY29ubmVjdGVkIHRvIGEgZGF0YWJhc2UiKTsKQEAgLTEyNSw2OSArMTI1LDEwIEBAIENv bm5lY3REYXRhYmFzZShBcmNoaXZlICpBSFgsCiAJaWYgKHByb21wdF9wYXNzd29yZCA9PSBU UklfWUVTICYmIHBhc3N3b3JkID09IE5VTEwpCiAJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21w dCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKIAotCS8qCi0JICogU3RhcnQgdGhlIGNvbm5lY3Rp b24uICBMb29wIHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKLQkg KiBiYWNrZW5kLgotCSAqLwotCWRvCi0JewotCQljb25zdCBjaGFyICprZXl3b3Jkc1s4XTsK LQkJY29uc3QgY2hhciAqdmFsdWVzWzhdOwotCQlpbnQJCQlpID0gMDsKLQotCQkvKgotCQkg KiBJZiBkYm5hbWUgaXMgYSBjb25uc3RyaW5nLCBpdHMgZW50cmllcyBjYW4gb3ZlcnJpZGUg dGhlIG90aGVyCi0JCSAqIHZhbHVlcyBvYnRhaW5lZCBmcm9tIGNwYXJhbXM7IGJ1dCBpbiB0 dXJuLCBvdmVycmlkZV9kYm5hbWUgY2FuCi0JCSAqIG92ZXJyaWRlIHRoZSBkYm5hbWUgY29t cG9uZW50IG9mIGl0LgotCQkgKi8KLQkJa2V5d29yZHNbaV0gPSAiaG9zdCI7Ci0JCXZhbHVl c1tpKytdID0gY3BhcmFtcy0+cGdob3N0OwotCQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKLQkJ dmFsdWVzW2krK10gPSBjcGFyYW1zLT5wZ3BvcnQ7Ci0JCWtleXdvcmRzW2ldID0gInVzZXIi OwotCQl2YWx1ZXNbaSsrXSA9IGNwYXJhbXMtPnVzZXJuYW1lOwotCQlrZXl3b3Jkc1tpXSA9 ICJwYXNzd29yZCI7Ci0JCXZhbHVlc1tpKytdID0gcGFzc3dvcmQ7Ci0JCWtleXdvcmRzW2ld ID0gImRibmFtZSI7Ci0JCXZhbHVlc1tpKytdID0gY3BhcmFtcy0+ZGJuYW1lOwotCQlpZiAo Y3BhcmFtcy0+b3ZlcnJpZGVfZGJuYW1lKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJkYm5h bWUiOwotCQkJdmFsdWVzW2krK10gPSBjcGFyYW1zLT5vdmVycmlkZV9kYm5hbWU7Ci0JCX0K LQkJa2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7Ci0JCXZhbHVl c1tpKytdID0gcHJvZ25hbWU7Ci0JCWtleXdvcmRzW2ldID0gTlVMTDsKLQkJdmFsdWVzW2kr K10gPSBOVUxMOwotCQlBc3NlcnQoaSA8PSBsZW5ndGhvZihrZXl3b3JkcykpOwotCi0JCW5l d19wYXNzID0gZmFsc2U7Ci0JCUFILT5jb25uZWN0aW9uID0gUFFjb25uZWN0ZGJQYXJhbXMo a2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7Ci0KLQkJaWYgKCFBSC0+Y29ubmVjdGlvbikKLQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSIpOwotCi0JCWlmIChQ UXN0YXR1cyhBSC0+Y29ubmVjdGlvbikgPT0gQ09OTkVDVElPTl9CQUQgJiYKLQkJCVBRY29u bmVjdGlvbk5lZWRzUGFzc3dvcmQoQUgtPmNvbm5lY3Rpb24pICYmCi0JCQlwYXNzd29yZCA9 PSBOVUxMICYmCi0JCQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQotCQl7Ci0JCQlQUWZp bmlzaChBSC0+Y29ubmVjdGlvbik7Ci0JCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9tcHQoIlBh c3N3b3JkOiAiLCBmYWxzZSk7Ci0JCQluZXdfcGFzcyA9IHRydWU7Ci0JCX0KLQl9IHdoaWxl IChuZXdfcGFzcyk7Ci0KLQkvKiBjaGVjayB0byBzZWUgdGhhdCB0aGUgYmFja2VuZCBjb25u ZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLwotCWlmIChQUXN0YXR1cyhBSC0+Y29u bmVjdGlvbikgPT0gQ09OTkVDVElPTl9CQUQpCi0JewotCQlpZiAoaXNSZWNvbm5lY3QpCi0J CQlwZ19mYXRhbCgicmVjb25uZWN0aW9uIGZhaWxlZDogJXMiLAotCQkJCQkgUFFlcnJvck1l c3NhZ2UoQUgtPmNvbm5lY3Rpb24pKTsKLQkJZWxzZQotCQkJcGdfZmF0YWwoIiVzIiwKLQkJ CQkJIFBRZXJyb3JNZXNzYWdlKEFILT5jb25uZWN0aW9uKSk7Ci0JfQorCUFILT5jb25uZWN0 aW9uID0gQ29ubmVjdERhdGFiYXNlKGNwYXJhbXMtPmRibmFtZSwgTlVMTCwgY3BhcmFtcy0+ cGdob3N0LAorCQkJCQkJCQkJIGNwYXJhbXMtPnBncG9ydCwgY3BhcmFtcy0+dXNlcm5hbWUs CisJCQkJCQkJCQkgcHJvbXB0X3Bhc3N3b3JkLCB0cnVlLAorCQkJCQkJCQkJIHByb2duYW1l LCBOVUxMLCBOVUxMLCBwYXNzd29yZCwgY3BhcmFtcy0+b3ZlcnJpZGVfZGJuYW1lKTsKIAog CS8qIFN0YXJ0IHN0cmljdDsgbGF0ZXIgcGhhc2VzIG1heSBvdmVycmlkZSB0aGlzLiAqLwog CVBRY2xlYXIoRXhlY3V0ZVNxbFF1ZXJ5Rm9yU2luZ2xlUm93KChBcmNoaXZlICopIEFILApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMKaW5kZXggODRhNzg2MjU4MjAuLmJmYTcwMzY5YzQ3IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMKQEAgLTk2Niw3ICs5NjYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkgKiBPcGVuIHRoZSBkYXRhYmFzZSB1c2luZyB0aGUgQXJjaGl2ZXIsIHNvIGl0IGtub3dz IGFib3V0IGl0LiBFcnJvcnMgbWVhbgogCSAqIGRlYXRoLgogCSAqLwotCUNvbm5lY3REYXRh YmFzZShmb3V0LCAmZG9wdC5jcGFyYW1zLCBmYWxzZSk7CisJQ29ubmVjdERhdGFiYXNlQWh4 KGZvdXQsICZkb3B0LmNwYXJhbXMsIGZhbHNlKTsKIAlzZXR1cF9jb25uZWN0aW9uKGZvdXQs IGR1bXBlbmNvZGluZywgZHVtcHNuYXBzaG90LCB1c2Vfcm9sZSk7CiAKIAkvKgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMKaW5kZXggMmVhNTc0YjBmMDYuLjU3M2E4YjYxYTQ1IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMKQEAgLTI0LDExICsyNCwxMSBAQAogI2luY2x1ZGUgImNvbW1vbi9oYXNo Zm5fdW5zdGFibGUuaCIKICNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgogI2luY2x1ZGUg ImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIKICNpbmNsdWRlICJk dW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNs dWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgotI2luY2x1ZGUgInBn X2JhY2t1cC5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3ZSBleHBlY3QgYmFjayBmcm9tIHBn X2R1bXAgKi8KICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIgInBnX2R1bXAgKFBvc3RncmVT UUwpICIgUEdfVkVSU0lPTiAiXG4iCkBAIC03MSwyMSArNzEsMTQgQEAgc3RhdGljIHZvaWQg YnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNh dGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBl LCBjb25zdCBjaGFyICpvYmpuYW1lLAogCQkJCQkJCSBQUUV4cEJ1ZmZlciBidWZmZXIpOwot c3RhdGljIFBHY29ubiAqY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwKLQkJ CQkJCQkgICBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdo b3N0LAotCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2Vy LAotCQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vy cm9yKTsKLXN0YXRpYyBjaGFyICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3 b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcyk7Ci1zdGF0aWMgUEdyZXN1bHQgKmV4ZWN1dGVR dWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4 ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGlj IHZvaWQgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmlu Z0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7 CiBzdGF0aWMgdm9pZCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFt ZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybik7CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBf YmluW01BWFBHUEFUSF07Ci1zdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7CiBzdGF0aWMg UFFFeHBCdWZmZXIgcGdkdW1wb3B0czsKLXN0YXRpYyBjaGFyICpjb25uc3RyID0gIiI7Citz dGF0aWMgY29uc3QgY2hhciAqY29ubnN0ciA9ICIiOwogc3RhdGljIGJvb2wgb3V0cHV0X2Ns ZWFuID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBza2lwX2FjbHMgPSBmYWxzZTsKIHN0YXRpYyBi b29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTEyOSw4ICsxMjIsNiBAQCBzdGF0aWMgY2hhciAq ZmlsZW5hbWUgPSBOVUxMOwogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhj bHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0 IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKLSNkZWZpbmUgZXhp dF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQotCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIHsKQEAgLTQ5OSwxOSArNDkwLDIyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkgKi8KIAlpZiAocGdkYikKIAl7Ci0JCWNvbm4gPSBjb25uZWN0RGF0YWJh c2UocGdkYiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkgICBw cm9tcHRfcGFzc3dvcmQsIGZhbHNlKTsKKwkJY29ubiA9IENvbm5lY3REYXRhYmFzZShwZ2Ri LCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAorCQkJCQkJCSAgIHByb21wdF9w YXNzd29yZCwgZmFsc2UsCisJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVy X3ZlcnNpb24sIE5VTEwsIE5VTEwpOwogCiAJCWlmICghY29ubikKIAkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBwZ2RiKTsKIAl9CiAJZWxz ZQogCXsKLQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBjb25uc3RyLCBw Z2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFs c2UpOworCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBn aG9zdCwgcGdwb3J0LCBwZ3VzZXIsCisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxz ZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbiwgTlVM TCwgTlVMTCk7CiAJCWlmICghY29ubikKLQkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInRl bXBsYXRlMSIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJCSAg IHByb21wdF9wYXNzd29yZCwgdHJ1ZSk7CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJ0 ZW1wbGF0ZTEiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAorCQkJCQkJCQkg ICBwcm9tcHRfcGFzc3dvcmQsIHRydWUsCisJCQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0 ciwgJnNlcnZlcl92ZXJzaW9uLCBOVUxMLCBOVUxMKTsKIAogCQlpZiAoIWNvbm4pCiAJCXsK QEAgLTE3MzgsMjU2ICsxNzMyLDYgQEAgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCWRlc3Ryb3lQUUV4 cEJ1ZmZlcihzcWwpOwogfQogCi0vKgotICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24g d2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCi0gKiBpbnRlcmFjdGl2ZSBwYXNzd29y ZCBwcm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCi0gKgotICog SWYgZmFpbF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmlu dGluZyBhbnkgbWVzc2FnZQotICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9t cHRlZCBwYXNzd29yZCBmb3IgdGhlIG5leHQgdHJ5LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHRo ZSBnbG9iYWwgdmFyaWFibGUgJ2Nvbm5zdHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3Ry aW5nCi0gKiBjb250YWluaW5nIHRoZSBvcHRpb25zIHVzZWQuCi0gKi8KLXN0YXRpYyBQR2Nv bm4gKgotY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAq Y29ubmVjdGlvbl9zdHJpbmcsCi0JCQkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFy ICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKLQkJCQl0cml2YWx1ZSBwcm9tcHRfcGFz c3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcikKLXsKLQlQR2Nvbm4JICAgKmNvbm47Ci0JYm9v bAkJbmV3X3Bhc3M7Ci0JY29uc3QgY2hhciAqcmVtb3RldmVyc2lvbl9zdHI7Ci0JaW50CQkJ bXlfdmVyc2lvbjsKLQljb25zdCBjaGFyICoqa2V5d29yZHMgPSBOVUxMOwotCWNvbnN0IGNo YXIgKip2YWx1ZXMgPSBOVUxMOwotCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5V TEw7Ci0Jc3RhdGljIGNoYXIgKnBhc3N3b3JkID0gTlVMTDsKLQotCWlmIChwcm9tcHRfcGFz c3dvcmQgPT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCi0JCXBhc3N3b3JkID0gc2ltcGxlX3By b21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQotCS8qCi0JICogU3RhcnQgdGhlIGNvbm5l Y3Rpb24uICBMb29wIHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkK LQkgKiBiYWNrZW5kLgotCSAqLwotCWRvCi0JewotCQlpbnQJCQlhcmdjb3VudCA9IDY7Ci0J CVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0OwotCQljaGFyCSAgICplcnJfbXNnID0gTlVM TDsKLQkJaW50CQkJaSA9IDA7Ci0KLQkJZnJlZShrZXl3b3Jkcyk7Ci0JCWZyZWUodmFsdWVz KTsKLQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCQkvKgotCQkgKiBNZXJnZSB0 aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24g c3RyaW5nCi0JCSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGljaXRseSBkaXNjYXJkIGFu eSBkYm5hbWUgdmFsdWUgaW4gdGhlCi0JCSAqIGNvbm5lY3Rpb24gc3RyaW5nOyBvdGhlcndp c2UsIFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJwcmV0Ci0JCSAqIHRoYXQgdmFs dWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcuCi0JCSAqLwotCQlpZiAo Y29ubmVjdGlvbl9zdHJpbmcpCi0JCXsKLQkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJz ZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOwotCQkJaWYgKGNvbm5fb3B0cyA9PSBO VUxMKQotCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOwotCi0JCQlmb3IgKGNvbm5fb3B0 ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQot CQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFsw XSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIp ICE9IDApCi0JCQkJCWFyZ2NvdW50Kys7Ci0JCQl9Ci0KLQkJCWtleXdvcmRzID0gcGdfbWFs bG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9 IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOwotCi0JCQlm b3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBj b25uX29wdCsrKQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29u bl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29y ZCwgImRibmFtZSIpICE9IDApCi0JCQkJewotCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5fb3B0 LT5rZXl3b3JkOwotCQkJCQl2YWx1ZXNbaV0gPSBjb25uX29wdC0+dmFsOwotCQkJCQlpKys7 Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJa2V5d29yZHMgPSBwZ19tYWxs b2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFsdWVzID0g cGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0JCX0KLQot CQlpZiAocGdob3N0KQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKLQkJCXZhbHVl c1tpXSA9IHBnaG9zdDsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGdwb3J0KQotCQl7Ci0JCQlr ZXl3b3Jkc1tpXSA9ICJwb3J0IjsKLQkJCXZhbHVlc1tpXSA9IHBncG9ydDsKLQkJCWkrKzsK LQkJfQotCQlpZiAocGd1c2VyKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKLQkJ CXZhbHVlc1tpXSA9IHBndXNlcjsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGFzc3dvcmQpCi0J CXsKLQkJCWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKLQkJCXZhbHVlc1tpXSA9IHBhc3N3 b3JkOwotCQkJaSsrOwotCQl9Ci0JCWlmIChkYm5hbWUpCi0JCXsKLQkJCWtleXdvcmRzW2ld ID0gImRibmFtZSI7Ci0JCQl2YWx1ZXNbaV0gPSBkYm5hbWU7Ci0JCQlpKys7Ci0JCX0KLQkJ a2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7Ci0JCXZhbHVlc1tp XSA9IHByb2duYW1lOwotCQlpKys7Ci0KLQkJbmV3X3Bhc3MgPSBmYWxzZTsKLQkJY29ubiA9 IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOwotCi0JCWlmICgh Y29ubikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVz XCIiLCBkYm5hbWUpOwotCi0JCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JB RCAmJgotCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgotCQkJIXBhc3N3 b3JkICYmCi0JCQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQotCQl7Ci0JCQlQUWZpbmlz aChjb25uKTsKLQkJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZh bHNlKTsKLQkJCW5ld19wYXNzID0gdHJ1ZTsKLQkJfQotCX0gd2hpbGUgKG5ld19wYXNzKTsK LQotCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1 Y2Nlc3NmdWxseSBtYWRlICovCi0JaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05f QkFEKQotCXsKLQkJaWYgKGZhaWxfb25fZXJyb3IpCi0JCQlwZ19mYXRhbCgiJXMiLCBQUWVy cm9yTWVzc2FnZShjb25uKSk7Ci0JCWVsc2UKLQkJewotCQkJUFFmaW5pc2goY29ubik7Ci0K LQkJCWZyZWUoa2V5d29yZHMpOwotCQkJZnJlZSh2YWx1ZXMpOwotCQkJUFFjb25uaW5mb0Zy ZWUoY29ubl9vcHRzKTsKLQotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0KLQkvKgotCSAq IE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBSZW1lbWJlciB0aGUgb3B0aW9ucyB1c2Vk LCBpbiB0aGUgZm9ybSBvZiBhCi0JICogY29ubmVjdGlvbiBzdHJpbmcuCi0JICovCi0JY29u bnN0ciA9IGNvbnN0cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7Ci0KLQlmcmVlKGtl eXdvcmRzKTsKLQlmcmVlKHZhbHVlcyk7Ci0JUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsK LQotCS8qIENoZWNrIHZlcnNpb24gKi8KLQlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1l dGVyU3RhdHVzKGNvbm4sICJzZXJ2ZXJfdmVyc2lvbiIpOwotCWlmICghcmVtb3RldmVyc2lv bl9zdHIpCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7Ci0J c2VydmVyX3ZlcnNpb24gPSBQUXNlcnZlclZlcnNpb24oY29ubik7Ci0JaWYgKHNlcnZlcl92 ZXJzaW9uID09IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNp b24gXCIlc1wiIiwKLQkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOwotCi0JbXlfdmVyc2lvbiA9 IFBHX1ZFUlNJT05fTlVNOwotCi0JLyoKLQkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJl IGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKLQkgKiBvdXIg b3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1w LmMuKQotCSAqLwotCWlmIChteV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9uCi0JCSYmIChz ZXJ2ZXJfdmVyc2lvbiA8IDkwMjAwIHx8Ci0JCQkoc2VydmVyX3ZlcnNpb24gLyAxMDApID4g KG15X3ZlcnNpb24gLyAxMDApKSkKLQl7Ci0JCXBnX2xvZ19lcnJvcigiYWJvcnRpbmcgYmVj YXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOwotCQlwZ19sb2dfZXJyb3JfZGV0 YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwKLQkJCQkJCQlyZW1v dGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOwotCQlleGl0X25pY2VseSgx KTsKLQl9Ci0KLQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NF QVJDSF9QQVRIX1NRTCkpOwotCi0JcmV0dXJuIGNvbm47Ci19Ci0KLS8qIC0tLS0tLS0tLS0K LSAqIENvbnN0cnVjdCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdv cmQvdmFsdWUgcGFpcnMuIEl0IGlzCi0gKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24g b3B0aW9ucyB0byB0aGUgcGdfZHVtcCBzdWJwcm9jZXNzLgotICoKLSAqIFRoZSBmb2xsb3dp bmcgcGFyYW1ldGVycyBhcmUgZXhjbHVkZWQ6Ci0gKglkYm5hbWUJCS0gdmFyaWVzIGluIGVh Y2ggcGdfZHVtcCBpbnZvY2F0aW9uCi0gKglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0 byBwYXNzIGEgcGFzc3dvcmQgb24gdGhlIGNvbW1hbmQgbGluZQotICoJZmFsbGJhY2tfYXBw bGljYXRpb25fbmFtZSAtIHdlJ2xsIGxldCBwZ19kdW1wIHNldCBpdAotICogLS0tLS0tLS0t LQotICovCi1zdGF0aWMgY2hhciAqCi1jb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKipr ZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcykKLXsKLQlQUUV4cEJ1ZmZlciBidWYgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOwotCWNoYXIJICAgKmNvbm5zdHI7Ci0JaW50CQkJaTsKLQli b29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOwotCi0JLyogQ29uc3RydWN0IGEgbmV3IGNvbm5l Y3Rpb24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4gKi8KLQlmb3IgKGkgPSAwOyBr ZXl3b3Jkc1tpXSAhPSBOVUxMOyBpKyspCi0JewotCQlpZiAoc3RyY21wKGtleXdvcmRzW2ld LCAiZGJuYW1lIikgPT0gMCB8fAotCQkJc3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQi KSA9PSAwIHx8Ci0JCQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlv bl9uYW1lIikgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghZmlyc3RrZXl3b3JkKQot CQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyAnKTsKLQkJZmlyc3RrZXl3b3JkID0g ZmFsc2U7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsK LQkJYXBwZW5kQ29ublN0clZhbChidWYsIHZhbHVlc1tpXSk7Ci0JfQotCi0JY29ubnN0ciA9 IHBnX3N0cmR1cChidWYtPmRhdGEpOwotCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwotCXJl dHVybiBjb25uc3RyOwotfQotCi0vKgotICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVz dWx0cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBQR3Jlc3VsdCAq Ci1leGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKLXsKLQlQ R3Jlc3VsdCAgICpyZXM7Ci0KLQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkp OwotCi0JcmVzID0gUFFleGVjKGNvbm4sIHF1ZXJ5KTsKLQlpZiAoIXJlcyB8fAotCQlQUXJl c3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKLQl7Ci0JCXBnX2xvZ19lcnJv cigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJcGdfbG9n X2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29u bik7Ci0JCWV4aXRfbmljZWx5KDEpOwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0KIC8qCiAg KiBBcyBhYm92ZSBmb3IgYSBTUUwgY29tbWFuZCAod2hpY2ggcmV0dXJucyBub3RoaW5nKS4K ICAqLwotLSAKMi4zNC4xCgo= --------------X5UVU7zhzGOyNzLfc6kyDo51 Content-Type: text/x-patch; charset=UTF-8; name="v20250330-0002-add-new-list-type-simple_oid_string_list-t.patch" Content-Disposition: attachment; filename*0="v20250330-0002-add-new-list-type-simple_oid_string_list-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxN2FmNDJkMTZmYTdmNDdhN2UwN2EwZTViYjAyZjMyM2IyMjRjNjgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogRnJpLCAyOCBNYXIgMjAyNSAxODoxMDoyNCAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggdjIwMjUwMzMwIDIvM10gYWRkIG5ldyBsaXN0IHR5cGUgc2ltcGxlX29pZF9zdHJp bmdfbGlzdCB0bwogZmUtdXRpbHMvc2ltcGxlX2xpc3QKCi0tLQogc3JjL2ZlX3V0aWxzL3Np bXBsZV9saXN0LmMgICAgICAgICB8IDQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwogc3JjL2luY2x1ZGUvZmVfdXRpbHMvc2ltcGxlX2xpc3QuaCB8IDE2ICsrKysrKysrKysr KwogMiBmaWxlcyBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3Jj L2ZlX3V0aWxzL3NpbXBsZV9saXN0LmMgYi9zcmMvZmVfdXRpbHMvc2ltcGxlX2xpc3QuYwpp bmRleCA0ODNkNTQ1NTU5NC4uYmJjYzRlZjYxOGQgMTAwNjQ0Ci0tLSBhL3NyYy9mZV91dGls cy9zaW1wbGVfbGlzdC5jCisrKyBiL3NyYy9mZV91dGlscy9zaW1wbGVfbGlzdC5jCkBAIC0x OTIsMyArMTkyLDQ0IEBAIHNpbXBsZV9wdHJfbGlzdF9kZXN0cm95KFNpbXBsZVB0ckxpc3Qg Kmxpc3QpCiAJCWNlbGwgPSBuZXh0OwogCX0KIH0KKworLyoKKyAqIEFkZCB0byBhbiBvaWRf c3RyaW5nIGxpc3QKKyAqLwordm9pZAorc2ltcGxlX29pZF9zdHJpbmdfbGlzdF9hcHBlbmQo U2ltcGxlT2lkU3RyaW5nTGlzdCAqIGxpc3QsIE9pZCBvaWQsIGNvbnN0IGNoYXIgKnN0cikK K3sKKwlTaW1wbGVPaWRTdHJpbmdMaXN0Q2VsbCAqY2VsbDsKKworCWNlbGwgPSAoU2ltcGxl T2lkU3RyaW5nTGlzdENlbGwgKikKKwkJcGdfbWFsbG9jKG9mZnNldG9mKFNpbXBsZU9pZFN0 cmluZ0xpc3RDZWxsLCBzdHIpICsgc3RybGVuKHN0cikgKyAxKTsKKworCWNlbGwtPm5leHQg PSBOVUxMOworCWNlbGwtPm9pZCA9IG9pZDsKKwlzdHJjcHkoY2VsbC0+c3RyLCBzdHIpOwor CisJaWYgKGxpc3QtPnRhaWwpCisJCWxpc3QtPnRhaWwtPm5leHQgPSBjZWxsOworCWVsc2UK KwkJbGlzdC0+aGVhZCA9IGNlbGw7CisJbGlzdC0+dGFpbCA9IGNlbGw7Cit9CisKKy8qCisg KiBEZXN0cm95IGFuIG9pZF9zdHJpbmcgbGlzdAorICovCit2b2lkCitzaW1wbGVfb2lkX3N0 cmluZ19saXN0X2Rlc3Ryb3koU2ltcGxlT2lkU3RyaW5nTGlzdCAqIGxpc3QpCit7CisJU2lt cGxlT2lkU3RyaW5nTGlzdENlbGwgKmNlbGw7CisKKwljZWxsID0gbGlzdC0+aGVhZDsKKwl3 aGlsZSAoY2VsbCAhPSBOVUxMKQorCXsKKwkJU2ltcGxlT2lkU3RyaW5nTGlzdENlbGwgKm5l eHQ7CisKKwkJbmV4dCA9IGNlbGwtPm5leHQ7CisJCXBnX2ZyZWUoY2VsbCk7CisJCWNlbGwg PSBuZXh0OworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL3NpbXBs ZV9saXN0LmggYi9zcmMvaW5jbHVkZS9mZV91dGlscy9zaW1wbGVfbGlzdC5oCmluZGV4IDNi OGUzODQxNGVjLi5hZjYxNTQ1ZDdmZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZmVfdXRp bHMvc2ltcGxlX2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9mZV91dGlscy9zaW1wbGVfbGlz dC5oCkBAIC01NSw2ICs1NSwxOSBAQCB0eXBlZGVmIHN0cnVjdCBTaW1wbGVQdHJMaXN0CiAJ U2ltcGxlUHRyTGlzdENlbGwgKnRhaWw7CiB9IFNpbXBsZVB0ckxpc3Q7CiAKK3R5cGVkZWYg c3RydWN0IFNpbXBsZU9pZFN0cmluZ0xpc3RDZWxsCit7CisJc3RydWN0IFNpbXBsZU9pZFN0 cmluZ0xpc3RDZWxsICpuZXh0OworCU9pZAkJCW9pZDsKKwljaGFyCQlzdHJbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsgLyogbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBoZXJlICovCit9CQkJ U2ltcGxlT2lkU3RyaW5nTGlzdENlbGw7CisKK3R5cGVkZWYgc3RydWN0IFNpbXBsZU9pZFN0 cmluZ0xpc3QKK3sKKwlTaW1wbGVPaWRTdHJpbmdMaXN0Q2VsbCAqaGVhZDsKKwlTaW1wbGVP aWRTdHJpbmdMaXN0Q2VsbCAqdGFpbDsKK30JCQlTaW1wbGVPaWRTdHJpbmdMaXN0OworCiBl eHRlcm4gdm9pZCBzaW1wbGVfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZU9pZExpc3QgKmxpc3Qs IE9pZCB2YWwpOwogZXh0ZXJuIGJvb2wgc2ltcGxlX29pZF9saXN0X21lbWJlcihTaW1wbGVP aWRMaXN0ICpsaXN0LCBPaWQgdmFsKTsKIGV4dGVybiB2b2lkIHNpbXBsZV9vaWRfbGlzdF9k ZXN0cm95KFNpbXBsZU9pZExpc3QgKmxpc3QpOwpAQCAtNjgsNCArODEsNyBAQCBleHRlcm4g Y29uc3QgY2hhciAqc2ltcGxlX3N0cmluZ19saXN0X25vdF90b3VjaGVkKFNpbXBsZVN0cmlu Z0xpc3QgKmxpc3QpOwogZXh0ZXJuIHZvaWQgc2ltcGxlX3B0cl9saXN0X2FwcGVuZChTaW1w bGVQdHJMaXN0ICpsaXN0LCB2b2lkICpwdHIpOwogZXh0ZXJuIHZvaWQgc2ltcGxlX3B0cl9s aXN0X2Rlc3Ryb3koU2ltcGxlUHRyTGlzdCAqbGlzdCk7CiAKK2V4dGVybiB2b2lkIHNpbXBs ZV9vaWRfc3RyaW5nX2xpc3RfYXBwZW5kKFNpbXBsZU9pZFN0cmluZ0xpc3QgKiBsaXN0LCBP aWQgb2lkLCBjb25zdCBjaGFyICpzdHIpOworZXh0ZXJuIHZvaWQgc2ltcGxlX29pZF9zdHJp bmdfbGlzdF9kZXN0cm95KFNpbXBsZU9pZFN0cmluZ0xpc3QgKiBsaXN0KTsKKwogI2VuZGlm CQkJCQkJCS8qIFNJTVBMRV9MSVNUX0ggKi8KLS0gCjIuMzQuMQoK --------------X5UVU7zhzGOyNzLfc6kyDo51 Content-Type: text/x-patch; charset=UTF-8; name="v20250330-0003-pg_dumpall-with-directory-tar-custom-forma.patch" Content-Disposition: attachment; filename*0="v20250330-0003-pg_dumpall-with-directory-tar-custom-forma.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5NWRkYmQ2NzI2ZWJiMGViNTczYTVmYmFhODBhYWM5ZjVhNGU3Y2ZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVu QGdtYWlsLmNvbT4KRGF0ZTogV2VkLCAxOSBNYXIgMjAyNSAwMTozMDoxMiArMDUzMApTdWJq ZWN0OiBbUEFUQ0ggdjIwMjUwMzMwIDMvM10gcGdfZHVtcGFsbCB3aXRoIGRpcmVjdG9yeXx0 YXJ8Y3VzdG9tIGZvcm1hdCBhbmQKIHJlc3RvcmUgaXQgYnkgcGdfcmVzdG9yZQoKbmV3IG9w dGlvbiB0byBwZ19kdW1wYWxsOgotRiwgLS1mb3JtYXQ9ZHx0fGN8cCAgb3V0cHV0IGZpbGUg Zm9ybWF0ICggcGxhaW4gdGV4dCAoZGVmYXVsdCkpCgpFeDoxIC4vcGdfZHVtcGFsbCAtLWZv cm1hdD1kaXJlY3RvcnkgLS1maWxlPWR1bXBEaXJOYW1lCkV4OjIgLi9wZ19kdW1wYWxsIC0t Zm9ybWF0PXRhciAtLWZpbGU9ZHVtcERpck5hbWUKRXg6MyAuL3BnX2R1bXBhbGwgLS1mb3Jt YXQ9Y3VzdG9tIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDo0IC4vcGdfZHVtcGFsbCAtLWZvcm1h dD1wbGFpbiAtLWZpbGU9ZHVtcERpck5hbWUKCmR1bXBzIGFyZSBhczoKZ2xvYmFsLmRhdCA6 OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBpbiBzaW1wbGUgcGxhaW4gZm9ybWF0Cm1hcC5kYXQu ICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRyaWVzIGZvciBhbGwgZGF0YWJhc2VzIGluIHNp bXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoKICAgICAgc3ViZGlyICAgICBkYm9pZDEg IC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAgc3Vi ZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBm b3JtYXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6Cmlm IG5lZWRlZCwgcmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJkaXIKCkV4OiAu L3BnX3Jlc3RvcmUgLS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBEaXJOYW1l L2RhdGFiYXNlcy81CiAgIC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVzIGRi CiAgIC0tIHRvIGdldCBkYm9pZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpuZXcgb3B0aW9ucyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxz LW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJh c2VzCi0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9z ZSBuYW1lIG1hdGNoZXMgcGF0dGVybgoKV2hlbiB3ZSBnaXZlIC1nLy0tZ2xvYmFscy1vbmx5 IG9wdGlvbiwgdGhlbiBvbmx5IHJlc3RvcmUgZ2xvYmFscywgbm8gZGIgcmVzdG9yaW5nLgoK RGVzaWduOgpXaGVuIC0tZm9ybWF0PWR8dHxjIGlzIHNwZWNpZmllZCBhbmQgdGhlcmUgaXMg bm8gdG9jLmRhdCBpbiBtYWluIGRpcmVjdG9yeSwgdGhlbiBjaGVjawpmb3IgZ2xvYmFsLmRh dCB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuIElmIGdsb2JhbC5kYXQgZmlsZSBpcyBleGlz dCBpbiBkaXJlY3RvcnksCnRoZW4gZmlyc3QgcmVzdG9yZSBhbGwgZ2xvYmFscyBmcm9tIGds b2JhbC5kYXQgYW5kIHRoZW4gcmVzdG9yZSBhbGwgZGF0YWJhc2VzIG9uZSBieSBvbmUKZnJv bSBtYXAuZGF0IGxpc3QgKGlmIGV4aXN0KQoKZm9yIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRU RVJOIGZvciBwZ19yZXN0b3JlCgphcyBvZiBub3csIFNFTEVDVCAxIFdIRVJFIFhYWCBPUEVS QVRPUihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURSBwZ19jYXRhbG9nLmRl ZmF1bHQKaWYgbm8gZGIgY29ubmVjdGlvbiwgdGhlbiBQQVRURVJOPU5BTUUgbWF0Y2hpbmcg b25seQoKZm9yIGVhY2ggZGF0YWJhc2UsIHdlIGFyZSBjbGVhbmluZyBvbl9leGl0X25pY2Vs eV9pbmRleCBsaXN0LgoKYXQgdGhlIGVuZCBvZiByZXN0b3JlLCB3ZSBhcmUgZ2l2aW5nIHdh cm5pbmcgd2l0aCB0b3RhbCBudW1iZXIgb2YgZXJyb3JzIChpbmNsdWRpbmcgZ2xvYmFsLmRh dCwKYW5kIGVhY2ggZGF0YWJhc2UgZXJyb3JzKSBhbmQgZm9yIGVhY2ggZGF0YWJhc2UsIHdl IGFyZSBwcmludGluZyB3YXJuaW5nIHdpdGggZGJuYW1lIGFuZCB0b3RhbAplcnJvcnMuCgp0 aHJlYWQ6Cmh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC9DQUtZ dE5BcDl2T3R5ZFhMM19wbkdKJTJCVGV0WnROJTNERllTblpTTUNxWGNlVTNta0hQeFBnJTQw bWFpbC5nbWFpbC5jb20jMDY2NDMzY2I1YWUwMDdjYmUzNWZlZmRkZjc5NmQ1MmYKCkF1dGhv cjogICAgTWFoZW5kcmEgU2luZ2ggVGhhbG9yIDxtYWhpNnJ1bkBnbWFpbC5jb20+Ci0tLQog ZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgIHwgIDc4ICsrLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgICAgIHwgIDQxICstCiBzcmMvYmluL3BnX2R1 bXAvcGFyYWxsZWwuYyAgICAgICAgICAgfCAgMTEgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXAuaCAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jIHwgIDIwICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmggfCAgIDMgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8ICAg MiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jICAgIHwgIDIyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmggICAgfCAgIDMgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXBhbGwuYyAgICAgICAgIHwgMjg0ICsrKysrKysrLS0KIHNyYy9iaW4vcGdfZHVt cC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDc1MCArKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCAgICAgICB8ICAgOSArCiBzcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDIgKwogMTQgZmlsZXMgY2hh bmdlZCwgMTE1MiBpbnNlcnRpb25zKCspLCA3NyBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdl IDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCA3NjViMzBhM2E2Ni4uODJlYTIwMjg0Njkg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiw3ICsxNiw3IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAgIDxyZWZuYW1lPnBnX2R1 bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50byBhIHNjcmlw dCBmaWxlPC9yZWZwdXJwb3NlPgorICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGJhc2VkIG9u IHNwZWNpZmllZCBkdW1wIGZvcm1hdCA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2Pgog CiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMTIxLDEwICsxMjEsODYgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRo ZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0 YW5kYXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAgICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4g YmUgb21pdHRlZCBvbmx5IHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFp bgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVu dHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZv cm1hdCBvZiBkdW1wIGZpbGVzLiAgSWYgd2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJh c2VzLAorICAgICAgICB0aGVuIHBhc3MgdGhpcyBhcyBub24tcGxhaW4gc28gdGhhdCBkdW1w IG9mIGFsbCBkYXRhYmFzZXMgY2FuIGJlIHRha2VuCisgICAgICAgIGluIHNlcGFyYXRlIHN1 YmRpcmVjdG9yeSBpbiBhcmNoaXZlIGZvcm1hdC4KKyAgICAgICAgYnkgZGVmYXVsdCwgdGhp cyBpcyBwbGFpbiBmb3JtYXQuCisKKyAgICAgICAgSWYgbm9uLXBsYWluIG1vZGUgaXMgcGFz c2VkLCB0aGVuIGdsb2JhbC5kYXQgKGdsb2JhbCBzcWwgY29tbWFuZHMpIGFuZAorICAgICAg ICBtYXAuZGF0KGRib2lkIGFuZCBkYm5hbWVzIGxpc3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMp IGZpbGVzIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAgQXBhcnQgZnJvbSB0aGVzZSBmaWxl cywgb25lIHN1YmRpcmVjdG9yeSB3aXRoIGRhdGFiYXNlcyBuYW1lIHdpbGwgYmUgY3JlYXRl ZC4KKyAgICAgICAgVW5kZXIgdGhpcyBkYXRhYmFzZXMgc3ViZGlyZWN0b3J5LCB0aGVyZSB3 aWxsIGJlIGZpbGVzIHdpdGggZGJvaWQgbmFtZSBmb3IgZWFjaAorICAgICAgICBkYXRhYmFz ZSBhbmQgaWYgPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBkaXJlY3RvcnksIHRoZW4g dG9jLmRhdCBhbmQgb3RoZXIKKyAgICAgICAgZHVtcCBmaWxlcyB3aWxsIGJlIHVuZGVyIGRi b2lkIHN1YmRpcmVjdG9yeS4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91 dHB1dCBhIGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50 byBwZ19yZXN0b3JlLiBVbmRlciBkYm9pZAorICAgICAgICAgICBzdWJkaXJlY3RvcnksIHRo aXMgd2lsbCBjcmVhdGUgYSBkaXJlY3Rvcnkgd2l0aCBvbmUgZmlsZSBmb3IgZWFjaCB0YWJs ZSBhbmQgbGFyZ2UKKyAgICAgICAgICAgb2JqZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNv LWNhbGxlZCBUYWJsZSBvZiBDb250ZW50cyBmaWxlIGRlc2NyaWJpbmcgdGhlIGR1bXBlZAor ICAgICAgICAgICBvYmplY3RzIGluIGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCBw Z19yZXN0b3JlIGNhbiByZWFkLiBBIGRpcmVjdG9yeSBmb3JtYXQKKyAgICAgICAgICAgYXJj aGl2ZSBjYW4gYmUgbWFuaXB1bGF0ZWQgd2l0aCBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3Ig ZXhhbXBsZSwgZmlsZXMgaW4gYW4KKyAgICAgICAgICAgdW5jb21wcmVzc2VkIGFyY2hpdmUg Y2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgZ3ppcCwgbHo0LCBvciB6c3RkIHRvb2xzLiBU aGlzCisgICAgICAgICAgIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1bHQgdXNpbmcg Z3ppcCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCku CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJt PjxsaXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1 aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisg ICAgICAgICAgIGRpcmVjdG9yeSBvdXRwdXQgZm9ybWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZs ZXhpYmxlIG91dHB1dCBmb3JtYXQgaW4gdGhhdCBpdCBhbGxvd3MgbWFudWFsCisgICAgICAg ICAgIHNlbGVjdGlvbiBhbmQgcmVvcmRlcmluZyBvZiBhcmNoaXZlZCBpdGVtcyBkdXJpbmcg cmVzdG9yZS4gVGhpcyBmb3JtYXQgaXMgYWxzbworICAgICAgICAgICBjb21wcmVzc2VkIGJ5 IGRlZmF1bHQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAg ICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJt PjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1mb3JtYXQgYXJjaGl2 ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgdGFyIGZvcm1hdCBp cworICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGRpcmVjdG9yeSBmb3JtYXQ6IGV4 dHJhY3RpbmcgYSB0YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMgYSB2YWxpZAorICAgICAg ICAgICBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRoZSB0YXIgZm9ybWF0 IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAgICAgIHdoZW4g dXNpbmcgdGFyIGZvcm1hdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0YSBpdGVt cyBjYW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3BhcmE+ CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAg IDx0ZXJtPjxvcHRpb24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0 ZW0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IGM4NDBhODA3YWU5Li5mMGEy NDEzNDU5NSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKQEAgLTE4LDggKzE4LDkg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDxyZWZuYW1lPnBnX3Jlc3RvcmU8L3Jl Zm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+Ci0gICByZXN0b3JlIGEgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCi0gICBhcmNoaXZlIGZp bGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+CisgICBy ZXN0b3JlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Ug ZnJvbSBhbgorICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1 bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxp Y2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCkBAIC0zNyw5ICsz OCwxMCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHRpdGxlPkRlc2NyaXB0aW9u PC90aXRsZT4KIAogICA8cGFyYT4KLSAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBs aWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciByZXN0b3JpbmcgYQorICAgPGFwcGxpY2F0aW9u PnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZwog ICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9t IGFuIGFyY2hpdmUKLSAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIv PiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CisgICBjcmVhdGVkIGJ5IDx4cmVmIGxp bmtlbmQ9ImFwcC1wZ2R1bXAiLz4gb3IKKyAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZy1kdW1w YWxsIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKICAgIGZvcm1hdHMuICBJdCB3 aWxsIGlzc3VlIHRoZSBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVjb25zdHJ1Y3QgdGhlCiAg ICBkYXRhYmFzZSB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBz YXZlZC4gIFRoZQogICAgYXJjaGl2ZSBmaWxlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5w Z19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KQEAgLTE0MCw2ICsxNDIsOCBAQCBQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgY29tbWFuZHMgdGhhdCBtZW50aW9uIHRoaXMg ZGF0YWJhc2UuCiAgICAgICAgIEFjY2VzcyBwcml2aWxlZ2VzIGZvciB0aGUgZGF0YWJhc2Ug aXRzZWxmIGFyZSBhbHNvIHJlc3RvcmVkLAogICAgICAgICB1bmxlc3MgPG9wdGlvbj4tLW5v LWFjbDwvb3B0aW9uPiBpcyBzcGVjaWZpZWQuCisgICAgICAgIDxvcHRpb24+LS1jcmVhdGU8 L29wdGlvbj4gaXMgcmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2Vz CisgICAgICAgIGZyb20gZHVtcCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGlj YXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtMTY2LDYgKzE3 MCwyNSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVy bT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFz ZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRl cm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRp b24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAg IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4g cGFyYW1ldGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRp bmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cHNx bDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAgICAgIGNvbW1h bmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4pLAorICAgICAg ICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkgd3JpdGlu ZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1 c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRl cm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1lPC9vcHRpb24+ PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtb24tZXJyb3I8L29wdGlvbj48 L3Rlcm0+CkBAIC0zMTUsNiArMzM4LDE2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgog ICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAg ICA8dGVybT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFs IG9iamVjdHMgKHJvbGVzIGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAg ICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVy bT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFs bGVsLmMKaW5kZXggMDg2YWRjZGM1MDIuLmEzNmQyYTViZjg0IDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwu YwpAQCAtMzI2LDExICszMjYsMTggQEAgZ2V0VGhyZWFkTG9jYWxQUUV4cEJ1ZmZlcih2b2lk KQogICogcGdfZHVtcCBhbmQgcGdfcmVzdG9yZSBjYWxsIHRoaXMgdG8gcmVnaXN0ZXIgdGhl IGNsZWFudXAgaGFuZGxlcgogICogYXMgc29vbiBhcyB0aGV5J3ZlIGNyZWF0ZWQgdGhlIEFy Y2hpdmVIYW5kbGUuCiAgKi8KLXZvaWQKK2ludAogb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFy Y2hpdmUgKkFIWCkKIHsKIAlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKLQlvbl9leGl0X25p Y2VseShhcmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKKwlyZXR1 cm4gb25fZXhpdF9uaWNlbHkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25f aW5mbyk7Cit9CisKK3ZvaWQKK3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hp dmUgKkFIWCwgaW50IGlkeCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKKwlzZXRf b25fZXhpdF9uaWNlbHlfZW50cnkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRv d25faW5mbywgaWR4KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAppbmRleCA0OWJjMWVl NzFlZi4uMTdkNmUwNmVjMjUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTMxMSw3ICszMTEs NyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhBcmNoaXZlICpBSCwgRHVtcE9w dGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRlcm4gdm9pZCBQcm9jZXNz QXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4dGVybiB2b2lkIFJl c3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpOwogCiAvKiBPcGVuIGFuIGV4aXN0 aW5nIGFyY2hpdmUgKi8KIGV4dGVybiBBcmNoaXZlICpPcGVuQXJjaGl2ZShjb25zdCBjaGFy ICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDNmNTlmOGY5ZDlkLi41NGViNDcyODkyOCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODUsNyArODUsNyBAQCBz dGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZv aWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRp bWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGlt KTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjKTsKKwkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEpOwogc3RhdGljIENvbXBy ZXNzRmlsZUhhbmRsZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMg dm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5k bGUgKnNhdmVkT3V0cHV0KTsKIApAQCAtMzM4LDkgKzMzOCwxNCBAQCBQcm9jZXNzQXJjaGl2 ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCkKIAkJU3RyaWN0TmFtZXNDaGVjayhyb3B0 KTsKIH0KIAotLyogUHVibGljICovCisvKgorICogUmVzdG9yZUFyY2hpdmUKKyAqCisgKiBJ ZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50byBmaWxlIGFzIHdl IGFyZSByZXN0b3JpbmcgZHVtcAorICogb2YgbXVsdGlwbGUgZGF0YWJhc2VzIHdoaWNoIHdh cyB0YWtlbiBieSBwZ19kdW1wYWxsLgorICovCiB2b2lkCi1SZXN0b3JlQXJjaGl2ZShBcmNo aXZlICpBSFgpCitSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2Rh dGEpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJ UmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CkBAIC00NTcsNyArNDYy LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCSAqLwogCXNhdiA9IFNhdmVP dXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSB8fCByb3B0LT5jb21wcmVzc2lvbl9z cGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQotCQlTZXRPdXRwdXQoQUgs IHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0 KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYywgYXBwZW5kX2Rh dGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1w XG4tLVxuXG4iKTsKIApAQCAtMTI5Myw3ICsxMjk4LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFy Y2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxl bmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9u X3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Np b25fc3BlYywgZmFsc2UpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0 YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNy ZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY3Miw3ICsxNjc3LDggQEAgYXJjaHByaW50ZihBcmNo aXZlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikKIAogc3RhdGljIHZvaWQKIFNldE91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29s IGFwcGVuZF9kYXRhKQogewogCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNo YXIgKm1vZGU7CkBAIC0xNjkyLDcgKzE2OTgsNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rk b3V0KTsKIAotCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5k X2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCiAJCW1vZGUgPSBQR19CSU5B UllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuaAppbmRleCBhMjA2NGY0NzFlZC4uZGMwNDViODUyZTkgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTM4NSw3ICszODUsOCBAQCBz dHJ1Y3QgX3RvY0VudHJ5CiB9OwogCiBleHRlcm4gaW50CXBhcmFsbGVsX3Jlc3RvcmUoQXJj aGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7Ci1leHRlcm4gdm9pZCBvbl9leGl0X2Ns b3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiBpbnQJb25fZXhpdF9jbG9zZV9h cmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCByZXBsYWNlX29uX2V4aXRfY2xv c2VfYXJjaGl2ZShBcmNoaXZlICpBSFgsIGludCBpZHgpOwogCiBleHRlcm4gdm9pZCB3YXJu X29yX2V4aXRfaG9ycmlibHkoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwu Li4pIHBnX2F0dHJpYnV0ZV9wcmludGYoMiwgMyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rh ci5jCmluZGV4IGI1YmEzYjQ2ZGQ5Li5kOTRkMGRlMmE1ZCAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgtPnB1 YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCk7 CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBmYWxzZSk7CiAKIAkJU2V0QXJj aGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX3V0aWxzLmMKaW5kZXggNzlhZWM1ZjUxNTguLjU5ZWNlMjk5OWE4 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCkBAIC02MSwxNCArNjEsMjYgQEAg c2V0X2R1bXBfc2VjdGlvbihjb25zdCBjaGFyICphcmcsIGludCAqZHVtcFNlY3Rpb25zKQog CiAKIC8qIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUgcnVuIHdoZW4gZXhpdF9uaWNlbHkg aXMgaW52b2tlZC4gKi8KLXZvaWQKK2ludAogb25fZXhpdF9uaWNlbHkob25fZXhpdF9uaWNl bHlfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmFyZykKIHsKLQlpZiAob25fZXhpdF9uaWNl bHlfaW5kZXggPj0gTUFYX09OX0VYSVRfTklDRUxZKQotCQlwZ19mYXRhbCgib3V0IG9mIG9u X2V4aXRfbmljZWx5IHNsb3RzIik7Ci0Jb25fZXhpdF9uaWNlbHlfbGlzdFtvbl9leGl0X25p Y2VseV9pbmRleF0uZnVuY3Rpb24gPSBmdW5jdGlvbjsKLQlvbl9leGl0X25pY2VseV9saXN0 W29uX2V4aXRfbmljZWx5X2luZGV4XS5hcmcgPSBhcmc7CisJc2V0X29uX2V4aXRfbmljZWx5 X2VudHJ5KGZ1bmN0aW9uLCBhcmcsIG9uX2V4aXRfbmljZWx5X2luZGV4KTsKIAlvbl9leGl0 X25pY2VseV9pbmRleCsrOworCisJcmV0dXJuIChvbl9leGl0X25pY2VseV9pbmRleCAtIDEp OworfQorCit2b2lkCitzZXRfb25fZXhpdF9uaWNlbHlfZW50cnkob25fZXhpdF9uaWNlbHlf Y2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmFyZywgaW50IGkpCit7CisJaWYgKGkgPj0gTUFY X09OX0VYSVRfTklDRUxZKQorCQlwZ19mYXRhbCgib3V0IG9mIG9uX2V4aXRfbmljZWx5IHNs b3RzIik7CisKKwlpZiAoaSA+IG9uX2V4aXRfbmljZWx5X2luZGV4KQorCQlwZ19mYXRhbCgi bm8gZW50cnkgZXhpc3RzIG9uICVkIGluZGV4IGludG8gb25fZXhpdF9uaWNlbHkgc2xvdHMi LCBpKTsKKworCW9uX2V4aXRfbmljZWx5X2xpc3RbaV0uZnVuY3Rpb24gPSBmdW5jdGlvbjsK Kwlvbl9leGl0X25pY2VseV9saXN0W2ldLmFyZyA9IGFyZzsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaCBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdXRpbHMuaAppbmRleCBiYTA0MjAxNjg3OS4uMWNlMTA3NzA5NmQgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaAorKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmgKQEAgLTI4LDcgKzI4LDggQEAgdHlwZWRl ZiB2b2lkICgqb25fZXhpdF9uaWNlbHlfY2FsbGJhY2spIChpbnQgY29kZSwgdm9pZCAqYXJn KTsKIGV4dGVybiBjb25zdCBjaGFyICpwcm9nbmFtZTsKIAogZXh0ZXJuIHZvaWQgc2V0X2R1 bXBfc2VjdGlvbihjb25zdCBjaGFyICphcmcsIGludCAqZHVtcFNlY3Rpb25zKTsKLWV4dGVy biB2b2lkIG9uX2V4aXRfbmljZWx5KG9uX2V4aXRfbmljZWx5X2NhbGxiYWNrIGZ1bmN0aW9u LCB2b2lkICphcmcpOworZXh0ZXJuIGludAlvbl9leGl0X25pY2VseShvbl9leGl0X25pY2Vs eV9jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqYXJnKTsKK2V4dGVybiB2b2lkIHNldF9vbl9l eGl0X25pY2VseV9lbnRyeShvbl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5jdGlvbiwgdm9p ZCAqYXJnLCBpbnQgaWR4KTsKIHBnX25vcmV0dXJuIGV4dGVybiB2b2lkIGV4aXRfbmljZWx5 KGludCBjb2RlKTsKIAogLyogSW4gcGdfZHVtcCwgd2UgbW9kaWZ5IHBnX2ZhdGFsIHRvIGNh bGwgZXhpdF9uaWNlbHkgaW5zdGVhZCBvZiBleGl0ICovCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBi ZmE3MDM2OWM0Ny4uZDhhNjI3MzZlZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTIxOSw3ICsx MjE5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogcmlnaHQgbm93Lgog CSAqLwogCWlmIChwbGFpblRleHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZvdXQpOworCQlSZXN0 b3JlQXJjaGl2ZShmb3V0LCBmYWxzZSk7CiAKIAlDbG9zZUFyY2hpdmUoZm91dCk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcGFsbC5jCmluZGV4IDU3M2E4YjYxYTQ1Li43Y2VhYmEyNzQxOSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcGFsbC5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jl c19mZS5oIgogCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAj aW5jbHVkZSA8dW5pc3RkLmg+CiAKQEAgLTY0LDkgKzY1LDEwIEBAIHN0YXRpYyB2b2lkIGRy b3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3Bh Y2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7 CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIg KnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsK K3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0 IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hh ciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29u c3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hh ciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJCQkJICBjaGFyICpkYmZp bGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgYnVpbGRT aFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2df bmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25z dCBjaGFyICpvYmpuYW1lLApAQCAtNzUsNiArNzcsOCBAQCBzdGF0aWMgdm9pZCBleGVjdXRl Q29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lk IGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0 ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3Rh dGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNp bXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGljIHZvaWQgY3JlYXRlX29yX29wZW5f ZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VE dW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBf YmluW01BWFBHUEFUSF07CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0czsKQEAgLTE0 Niw2ICsxNTAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dv cmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9f YXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEws ICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAK IAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZh bGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xOTUsNiArMjAwLDggQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAg KnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOwor CUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwljb25zdCBjaGFy ICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9E RUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25s eSA9IGZhbHNlOwpAQCAtMjQ0LDcgKzI1MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUg KChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6 dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0g Z2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4 IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykK IAkJewpAQCAtMjcyLDcgKzI3OSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFw cGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQor CQkJY2FzZSAnRic6CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJ CWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQli cmVhazsKQEAgLTQyMSw2ICs0MzAsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAq LworCWFyY2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCisJ LyoKKwkgKiBJZiBhIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3BlY2lmaWVkLCBhIGZpbGUgbmFt ZSBpcyBhbHNvIHJlcXVpcmVkIGFzIHRoZQorCSAqIHBhdGggdG8gdGhlIG1haW4gZGlyZWN0 b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAmJgorCQkoIWZp bGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdfbG9nX2Vy cm9yKCJvcHRpb24gLUYvLS1mb3JtYXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0tZmls ZSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUg aW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkv KgogCSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkIGluIHRoZSBkdW1w LCBzd2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVhbGx5IHVzZWZ1 bCwganVzdCBtb3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNDgzLDYgKzUw NywzMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHN0YXRpc3RpY3Nf b25seSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXN0YXRpc3Rp Y3Mtb25seSIpOwogCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJl ZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0 ZSBuZXcgZGlyZWN0b3J5IGFuZCBnbG9iYWwuZGF0IGZpbGUuCisJICovCisJaWYgKGFyY2hE dW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgkJZ2xvYmFsX3BhdGhbTUFYUEdQ QVRIXTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhlIGVtcHR5 IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVuYW1l KTsKKworCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRh dCIsIGZpbGVuYW1lKTsKKworCQlPUEYgPSBmb3BlbihnbG9iYWxfcGF0aCwgUEdfQklOQVJZ X1cpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwu ZGF0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5h bWUpCisJeworCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAo IU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6 ICVtIiwKKwkJCQkJIGZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisK IAkvKgogCSAqIElmIHRoZXJlIHdhcyBhIGRhdGFiYXNlIHNwZWNpZmllZCBvbiB0aGUgY29t bWFuZCBsaW5lLCB1c2UgdGhhdCwKIAkgKiBvdGhlcndpc2UgdHJ5IHRvIGNvbm5lY3QgdG8g ZGF0YWJhc2UgInBvc3RncmVzIiwgYW5kIGZhaWxpbmcgdGhhdApAQCAtNTIyLDE5ICs1NzMs NiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0 ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRh YmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUg aWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1l KQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFP UEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAl bSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJ LyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBA IC02MzQsNyArNjcyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAog CWlmICghZ2xvYmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5 KQotCQlkdW1wRGF0YWJhc2VzKGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hE dW1wRm9ybWF0KTsKIAogCVBRZmluaXNoKGNvbm4pOwogCkBAIC02NDcsNyArNjg1LDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBz eW5jIHRoZSByZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYg KGRvc3luYykKKwkJaWYgKGRvc3luYyAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp KQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZpbGVuYW1lLCBmYWxzZSk7CiAJfQogCkBAIC02 NTgsMTIgKzY5NiwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiBzdGF0aWMg dm9pZAogaGVscCh2b2lkKQogewotCXByaW50ZihfKCIlcyBleHRyYWN0cyBhIFBvc3RncmVT UUwgZGF0YWJhc2UgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmlsZS5cblxuIiksIHBy b2duYW1lKTsKKwlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGNsdXN0ZXIgYmFzZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0LlxuXG4iKSwgcHJvZ25h bWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9O XS4uLlxuIiksIHByb2duYW1lKTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpc biIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1 dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAg ICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIK KwkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1 bHQpKVxuIikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAg dmVyYm9zZSBtb2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAg ICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJ cHJpbnRmKF8oIiAgLS1sb2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdh aXRpbmcgVElNRU9VVCBmb3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC0xNTcwLDEwICsxNjEw LDEzIEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBj b250ZW50cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9y bWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOwor CWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNoYXIJCWRiZmlsZXBhdGhbTUFYUEdQ QVRIXTsKKwlGSUxFCSAgICptYXBfZmlsZSA9IE5VTEw7CiAKIAkvKgogCSAqIFNraXAgZGF0 YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdkIGJlIHVuYWJsZSB0 byBjb25uZWN0CkBAIC0xNTg3LDcgKzE2MzAsNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUgd2l0aCAtLWNsZWFu LgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAiU0VMRUNUIGRh dG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAgICJGUk9N IHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRj b25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBs YXRlMScpLCBkYXRuYW1lIik7CkBAIC0xNTk1LDkgKzE2MzgsMzQgQEAgZHVtcERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihP UEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0 b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRp cmVjdG9yeQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFz ZSBkdW1wIGZpbGUgc3ViZGlyZWN0b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRo ZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIKKwkgKiBw Z19kdW1wLgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJ CWNoYXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnByaW50ZihkYl9zdWJk aXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKworCQkvKiBDcmVh dGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGly ZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1KSAhPSAwKQorCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgc3ViZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9z dWJkaXIpOworCisJCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21h cC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3Jl IGRib2lkIGFuZCBkYm5hbWUpICovCisJCW1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0 aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIW1hcF9maWxlKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIG1hcCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCiAJZm9y IChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5h bWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CisJCWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFs dWUocmVzLCBpLCAxKTsKIAkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CiAJCWludAkJCXJl dDsKIApAQCAtMTYxMiw2ICsxNjgwLDIzIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25u KQogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBhIHBs YWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBkYm9pZCBhbmQgZGJuYW1lIHRvCisJCSAq IHRoZSBtYXAuZGF0IGZpbGUuCisJCSAqLworCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJj aE51bGwpCisJCXsKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJ CXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIuZG1wIiwg ZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRh cikKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wi LnRhciIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihkYmZpbGVw YXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGlyLCBvaWQpOworCisJ CQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFwIGZp bGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgZGJuYW1lKTsK KwkJfQorCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFt ZSk7CiAKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0t XG5cbiIsIGRibmFtZSk7CkBAIC0xNjMwLDkgKzE3MTUsMTcgQEAgZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7CiAJ CQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5jZSBwZ19k dW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnBy aW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJeworCQkJCQljcmVhdGVfb3B0cyA9ICIiOwor CQkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCX0K KwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBEdW1waW5nIGFsbCBkYXRhYmFzZXMgc28gYWRk IC0tY3JlYXRlIG9wdGlvbi4gKi8KKwkJCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOwor CQkJCX0KIAkJCX0KIAkJfQogCQllbHNlCkBAIC0xNjQxLDE5ICsxNzM0LDMwIEBAIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlpZiAoZmlsZW5hbWUpCiAJCQlmY2xvc2UoT1BG KTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cyk7CisJCXJldCA9 IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzLCBkYmZpbGVwYXRoLCBhcmNoRHVtcEZv cm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBv biBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCiAJCWlmIChmaWxlbmFt ZSkKIAkJewotCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKKwkJCWNo YXIJCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCAh PSBhcmNoTnVsbCkKKwkJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMv Z2xvYmFsLmRhdCIsIGZpbGVuYW1lKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihnbG9iYWxf cGF0aCwgTUFYUEdQQVRILCAiJXMiLCBmaWxlbmFtZSk7CisKKwkJCU9QRiA9IGZvcGVuKGds b2JhbF9wYXRoLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9QRikKIAkJCQlwZ19mYXRhbCgi Y291bGQgbm90IHJlLW9wZW4gdGhlIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkJ IGZpbGVuYW1lKTsKKwkJCQkJCSBnbG9iYWxfcGF0aCk7CiAJCX0KIAl9CiAKKwkvKiBDbG9z ZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJZmNs b3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTY2Myw3ICsxNzY3 LDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBvbiBk Ym5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBn RHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVu UGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNo YXIgKmRiZmlsZSwKKwkJICBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBR RXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBAIC0x NjcyLDE3ICsxNzc3LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0 IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJ aW5pdFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwi JXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNy ZWF0ZV9vcHRzKTsKLQogCS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhl IHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJ ZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5h bWUgYW5kIGR1bXAKKwkgKiBmb3JtYXQgdG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQg YXJjaGl2ZSBkdW1wLgogCSAqLwotCWlmIChmaWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxs KQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAtZiAlcyAlcyIsIHBn X2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNyZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIg IC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PXRhciAi KTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsK Kwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1w X2JpbiwKKwkJCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOworCisJCS8q CisJCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxh aW4tYXBwZW5kIHBnX2R1bXAKKwkJICogZm9ybWF0LgorCQkgKi8KKwkJaWYgKGZpbGVuYW1l KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJCWVsc2UKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8qCiAJICog QXBwZW5kIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVkIHN0 ZW0gb2YgY29ubmVjdGlvbgpAQCAtMTgyNywzICsxOTUxLDkxIEBAIHJlYWRfZHVtcGFsbF9m aWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJu KQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBjcmVhdGVfb3Jfb3Bl bl9kaXIKKyAqCisgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSB3aXRoIGdp dmVuIG5hbWUuICBJZiB0aGVyZSBpcyBhbHJlYWR5IHNhbWUKKyAqIGVtcHR5IGRpcmVjdG9y eSBleGlzdCwgdGhlbiB1c2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfb3Jfb3Bl bl9kaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlib29s CQlpc19lbXB0eSA9IGZhbHNlOworCisJLyogd2UgYWNjZXB0IGFuIGVtcHR5IGV4aXN0aW5n IGRpcmVjdG9yeSAqLworCWlmIChzdGF0KGRpcm5hbWUsICZzdCkgPT0gMCAmJiBTX0lTRElS KHN0LnN0X21vZGUpKQorCXsKKwkJRElSCQkgICAqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsK KworCQlpZiAoZGlyKQorCQl7CisJCQlzdHJ1Y3QgZGlyZW50ICpkOworCisJCQlpc19lbXB0 eSA9IHRydWU7CisKKwkJCXdoaWxlIChlcnJubyA9IDAsIChkID0gcmVhZGRpcihkaXIpKSkK KwkJCXsKKwkJCQlpZiAoc3RyY21wKGQtPmRfbmFtZSwgIi4iKSAhPSAwICYmIHN0cmNtcChk LT5kX25hbWUsICIuLiIpICE9IDApCisJCQkJeworCQkJCQlpc19lbXB0eSA9IGZhbHNlOwor CQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChlcnJubykKKwkJCQlwZ19mYXRh bCgiY291bGQgbm90IHJlYWQgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJIGRpcm5h bWUpOworCisJCQlpZiAoY2xvc2VkaXIoZGlyKSkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90 IGNsb3NlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKKwkJCQkJCSBkaXJuYW1lKTsKKwkJfQor CisJCWlmICghaXNfZW1wdHkpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiZGlyZWN0b3J5IFwi JXNcIiBleGlzdHMgYnV0IGlzIG5vdCBlbXB0eSIsIGRpcm5hbWUpOworCQkJcGdfbG9nX2Vy cm9yX2hpbnQoIklmIHlvdSB3YW50IHRvIGR1bXAgZGF0YSBvbiB0aGlzIGRpcmVjdG9yeSwg ZWl0aGVyIHJlbW92ZSBvciBlbXB0eSAiCisJCQkJCQkJICAidGhpcyBkaXJlY3RvcnkgXCIl c1wiIG9yIHJ1biAlcyAiCisJCQkJCQkJICAid2l0aCBhbiBhcmd1bWVudCBvdGhlciB0aGFu IFwiJXNcIi4iLAorCQkJCQkJCSAgZGlybmFtZSwgcHJvZ25hbWUsIGRpcm5hbWUpOworCQkJ ZXhpdF9uaWNlbHkoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAobWtkaXIoZGlybmFtZSwgMDcw MCkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wi OiAlbSIsIGRpcm5hbWUpOworfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICog VGhpcyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVG b3JtYXQKK3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2 ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwg ImMiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1h dCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikg PT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAoZm9ybWF0LCAiZGlyZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi cCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdf c3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0g YXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0IikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAo Zm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVs c2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCBcIiVzXCI7IHBs ZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwiIiwKKwkJCQkgZm9y bWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5j CmluZGV4IDQ3ZjdiMGRkM2ExLi5jZTcwYjdlMTJiMiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3BnX3Jlc3RvcmUuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5j CkBAIC0yLDcgKzIsNyBAQAogICoKICAqIHBnX3Jlc3RvcmUuYwogICoJcGdfcmVzdG9yZSBp cyBhbiB1dGlsaXR5IGV4dHJhY3RpbmcgcG9zdGdyZXMgZGF0YWJhc2UgZGVmaW5pdGlvbnMK LSAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhl IGFyY2hpdmVyCisgKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1w L3BnX2R1bXBhbGwgdXNpbmcgdGhlIGFyY2hpdmVyCiAgKglpbnRlcmZhY2UuCiAgKgogICoJ cGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhlIGJhY2t1cCBhcmNoaXZlIGFuZApAQCAtNDEsMTEg KzQxLDE1IEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0eXBl Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBIQVZFX1RFUk1JT1NfSAogI2lu Y2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5o IgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91 dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUg ImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGFyYWxs ZWwuaCIKQEAgLTUzLDE4ICs1NywzNiBAQAogCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBj aGFyICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25z dCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wg ZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAq ZmlsZW5hbWUpOworc3RhdGljIGludAlyZXN0b3JlT25lRGF0YWJhc2UoY29uc3QgY2hhciAq aW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCQkJICAgaW50IG51 bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGludCBudW0pOworc3RhdGljIGludAlyZWFk X29uZV9zdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqcGZpbGUpOworc3RhdGlj IGludAlyZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVt cGRpcnBhdGgsCisJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJu cywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBpbnQJ cHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq ZHVtcGRpcnBhdGgsCisJCQkJCQkJCQkJY29uc3QgY2hhciAqb3V0ZmlsZSk7CitzdGF0aWMg dm9pZCBjb3B5X29yX3ByaW50X2dsb2JhbF9maWxlKGNvbnN0IGNoYXIgKm91dGZpbGUsIEZJ TEUgKnBmaWxlKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBH Y29ubiAqY29ubiwKKwkJCQkJCQkJCQlTaW1wbGVPaWRTdHJpbmdMaXN0ICogZGJuYW1lX29p ZF9saXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJu cyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBj aGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgICBTaW1wbGVPaWRTdHJpbmdMaXN0ICog ZGJuYW1lX29pZF9saXN0KTsKK3N0YXRpYyBzaXplX3QgcXVvdGVfbGl0ZXJhbF9pbnRlcm5h bChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbik7CitzdGF0aWMgY2hh ciAqcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbnN0IGNoYXIgKnJhd3N0cik7CitzdGF0aWMgaW50 CW9uX2V4aXRfaW5kZXggPSAwOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9j b2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJ ICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJ c2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vycm9ycyA9IDA7CisJYm9vbAkJZ2xv YmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRl cm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2VycyA9IDA7 CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKIAlzdGF0aWMgaW50CWlm X2V4aXN0cyA9IDA7CkBAIC05MCw2ICsxMTIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwgTlVM TCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2JhbHMt b25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJ eyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIs IDEsIE5VTEwsICdOJ30sCkBAIC0xNDQsNiArMTY3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCXsid2l0aC1zdGF0aXN0aWNzIiwgbm9fYXJndW1lbnQsICZ3aXRoX3N0 YXRpc3RpY3MsIDF9LAogCQl7InN0YXRpc3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3Rh dGlzdGljc19vbmx5LCAxfSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgNH0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCA2fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTcyLDcgKzE5Niw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0g Z2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpS c1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3Ys ICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCiAJCQkJ CQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAtMTk5LDEx ICsyMjMsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYgKHN0cmxl bihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0 YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25seSBn bG9iYWwuZGF0IGZpbGUgZnJvbSBkaXJlY3RvcnkgKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0 cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcp ICE9IDApCiAJCQkJCW9wdHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7 CiAJCQkJYnJlYWs7Ci0KIAkJCWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpv YnMgKi8KIAkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwg MSwKIAkJCQkJCQkJCSAgUEdfTUFYX0pPQlMsCkBAIC0zMTgsNiArMzQ1LDkgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9v bl9lcnJvciA9IHRydWU7CiAJCQkJYnJlYWs7CisJCQljYXNlIDY6CQkJCS8qIGRhdGFiYXNl IHBhdHRlcm5zIHRvIHNraXAgKi8KKwkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZk Yl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0 OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwpA QCAtMzQ1LDYgKzM3NSwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAo IW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFtZSAmJiAhb3B0cy0+dG9j U3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBhbmQgLWYvLS1maWxl IG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFk ICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24g LS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1n bG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwi IGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7 CisJfQorCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2Ug dXNlciBpcyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBA IC00NTIsNiArNDg5LDExNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJ IG9wdHMtPmZvcm1hdE5hbWUpOwogCX0KIAorCS8qCisJICogSWYgdG9jLmRhdCBmaWxlIGRv ZXMgbm90IHByZXNlbnQgaW4gY3VycmVudCBwYXRoLCB0aGVuIGNoZWNrIGZvcgorCSAqIGds b2JhbC5kYXQuICBJZiBnbG9iYWwuZGF0IGZpbGUgaXMgcHJlc2VudCwgdGhlbiByZXN0b3Jl IGFsbCB0aGUKKwkgKiBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0KGlmIGV4aXN0KSBmaWxlIGxp c3QgYW5kIHNraXAgcmVzdG9yaW5nIGZvcgorCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0 ZXJucy4KKwkgKi8KKwlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmICFmaWxlX2V4aXN0 c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5kYXQiKSAmJgorCQlmaWxlX2V4 aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgImdsb2JhbC5kYXQiKSkKKwl7CisJ CVBHY29ubgkgICAqY29ubiA9IE5VTEw7CS8qIENvbm5lY3Rpb24gdG8gcmVzdG9yZSBnbG9i YWwgc3FsCisJCQkJCQkJCQkgKiBjb21tYW5kcy4gKi8KKworCQkvKgorCQkgKiBVc2VyIGlz IHN1Z2dlc3RlZCB0byB1c2Ugc2luZ2xlIGRhdGFiYXNlIGR1bXAgZm9yIC0tbGlzdCBvcHRp b24uCisJCSAqLworCQlpZiAob3B0cy0+dG9jU3VtbWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRp b24gLWwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRh dGFiYXNlcyBieSBhcmNoaXZlIG9mIHBnX2R1bXBhbGwiKTsKKworCQkvKgorCQkgKiBUbyBy ZXN0b3JlIG11bHRpcGxlIGRhdGFiYXNlcywgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9u IHNob3VsZAorCQkgKiBiZSBzcGVjaWZpZWQuIEV2ZW4gdGhlcmUgaXMgc2luZ2xlIGRhdGFi YXNlIGluIGR1bXAsIHJlcG9ydCBlcnJvcgorCQkgKiBiZWNhdXNlIGl0IG1pZ2h0IGJlIHBv c3NpYmxlIHRoYXQgZGF0YWJhc2UgaGFzbid0IGNyZWF0ZWQgc28gYmV0dGVyCisJCSAqIHdl IHJlcG9ydCBlcnJvci4KKwkJICovCisJCWlmICghZ2xvYmFsc19vbmx5ICYmIG9wdHMtPmNy ZWF0ZURCICE9IDEpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiLUMvLS1jcmVhdGUgb3B0aW9u IHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2Vz IGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRy eSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJ CXBnX2xvZ19lcnJvcl9oaW50KCJJZiBkYiBpcyBhbHJlYWR5IGNyZWF0ZWQgYW5kIGR1bXAg aGFzIHNpbmdsZSBkYiBkdW1wLCB0aGVuIHVzZSBwYXJ0aWN1bGFyIGR1bXAgZmlsZS4iKTsK KwkJCWV4aXRfbmljZWx5KDEpOworCQl9CisKKwkJLyoKKwkJICogQ29ubmVjdCB0byBkYXRh YmFzZSB0byBleGVjdXRlIGdsb2JhbCBzcWwgY29tbWFuZHMgZnJvbSBnbG9iYWwuZGF0CisJ CSAqIGZpbGUuCisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJ CWNvbm4gPSBDb25uZWN0RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9w dHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwg b3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNl LCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCWlmICghY29ubikK KwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwg b3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJLyogSWYgZ2xvYmFscy1vbmx5LCB0 aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJCWlmIChnbG9iYWxzX29ubHkpCisJCXsKKwkJ CS8qCisJCQkgKiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxs IHRoZSBnbG9iYWwgc3FsCisJCQkgKiBjb21tYW5kcy4KKwkJCSAqLworCQkJbl9lcnJvcnMg PSBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgaW5wdXRGaWxlU3BlYywKKwkJ CQkJCQkJCQkJCSAgIG9wdHMtPmZpbGVuYW1lKTsKKworCQkJaWYgKGNvbm4pCisJCQkJUFFm aW5pc2goY29ubik7CisKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZXMgcmVzdG9yaW5nIGlz IHNraXBwZWQgYXMgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uIGlzIHNwZWNpZmllZCIpOwor CQl9CisJCWVsc2UKKwkJeworCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMg ZnJvbSBtYXAuZGF0IGZpbGUuICovCisJCQluX2Vycm9ycyA9IHJlc3RvcmVBbGxEYXRhYmFz ZXMoY29ubiwgaW5wdXRGaWxlU3BlYywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJCQkJ CQkgICBvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVybiBs aXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0 ZXJucyk7CisJfQorCWVsc2UJCQkJCQkvKiBwcm9jZXNzIGlmIGdsb2JhbC5kYXQgZmlsZSBk b2VzIG5vdCBleGlzdC4gKi8KKwl7CisJCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQg IT0gTlVMTCkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBi ZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hp dmUgb2YgcGdfZHVtcGFsbCIpOworCisJCWlmIChnbG9iYWxzX29ubHkpCisJCQlwZ19mYXRh bCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0 b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOwor CisJCW5fZXJyb3JzID0gcmVzdG9yZU9uZURhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMs IG51bVdvcmtlcnMsIGZhbHNlLCAwKTsKKwl9CisKKwlvbl9leGl0X2luZGV4ID0gMDsJCQkv KiBSZXNldCBpbmRleC4gKi8KKworCS8qIERvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25v cmVkIGVycm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJeworCQlw Z19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vycm9y cyk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVzdG9y ZU9uZURhdGFiYXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVz aW5nIHRvYy5kYXQgZmlsZS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3Jz IHdoaWxlIGRvaW5nIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVPbmVEYXRh YmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywK KwkJCQkgICBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSkKK3sK KwlBcmNoaXZlICAgICpBSDsKKwlpbnQJCQluX2Vycm9yczsKKwogCUFIID0gT3BlbkFyY2hp dmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25z KEFILCBOVUxMLCBvcHRzKTsKQEAgLTQ1OSw5ICs2MDQsMTUgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQg YnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlh bGl6ZWQgdG8gTlVMTCBhbmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHko KSB3aGlsZQotCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2ls bCBqdXN0IGJlIGEgbm8tb3AuCisJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBm dW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBuby1vcC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5n IG11bHRpcGxlIGRhdGFiYXNlcywgdGhlbiBzYXZlIGluZGV4IG9mIGV4aXRfbmljZWx5IHNv IHRoYXQgd2UKKwkgKiBjYW4gdXNlIHNhbWUgc2xvdCBmb3IgYWxsIHRoZSBkYXRhYmFzZXMg YXMgd2UgYWxyZWFkeSBjbG9zZWQgdGhlCisJICogcHJldmlvdXMgYXJjaGl2ZSBieSBDbG9z ZUFyY2hpdmUuCiAJICovCi0Jb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwlpZiAoIWFw cGVuZF9kYXRhIHx8IG51bSA9PSAwKQorCQlvbl9leGl0X2luZGV4ID0gb25fZXhpdF9jbG9z ZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZl KEFILCBvbl9leGl0X2luZGV4KTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cg bm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CkBAIC00ODEs MjUgKzYzMiwyMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAllbHNlCiAJewog CQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUo QUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEpOwogCX0KIAotCS8qIGRv bmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwotCWlmIChBSC0+bl9l cnJvcnMpCi0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3JlOiAl ZCIsIEFILT5uX2Vycm9ycyk7CisJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAKIAkvKiBB SCBtYXkgYmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFILT5u X2Vycm9ycyA/IDEgOiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBleGl0 X2NvZGU7CisJcmV0dXJuIG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29u c3QgY2hhciAqcHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdy ZVNRTCBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4i KSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0 YWJhc2UgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cbiIKKwkJCSAiSWYg YXJjaGl2ZSBpcyBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwsIHRoZW4gcmVzdG9yZXMgbXVsdGlw bGUgZGF0YWJhc2VzIGFsc28uIFxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2Fn ZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9n bmFtZSk7CiAKQEAgLTUxNyw2ICs2NjUsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFt ZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAgICAgICAgICAgICAgIGNsZWFuIChk cm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJpbnRm KF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBk YXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3IgICAgICAg ICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXByaW50 ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2Jh bCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRl eD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYo XygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxs ZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9 RklMRU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9y XG4iCkBAIC01MjksNiArNjc4LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJ cHJpbnRmKF8oIiAgLVMsIC0tc3VwZXJ1c2VyPU5BTUUgICAgICAgICBzdXBlcnVzZXIgdXNl ciBuYW1lIHRvIHVzZSBmb3IgZGlzYWJsaW5nIHRyaWdnZXJzXG4iKSk7CiAJcHJpbnRmKF8o IiAgLXQsIC0tdGFibGU9TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIHJlbGF0aW9u ICh0YWJsZSwgdmlldywgZXRjLilcbiIpKTsKIAlwcmludGYoXygiICAtVCwgLS10cmlnZ2Vy PU5BTUUgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgdHJpZ2dlclxuIikpOworCXByaW50Zihf KCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZXhjbHVkZSBkYXRhYmFzZXMgd2hv c2UgbmFtZSBtYXRjaGVzIHdpdGggcGF0dGVyblxuIikpOwogCXByaW50ZihfKCIgIC14LCAt LW5vLXByaXZpbGVnZXMgICAgICAgICAgc2tpcCByZXN0b3JhdGlvbiBvZiBhY2Nlc3MgcHJp dmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxuIikpOwogCXByaW50ZihfKCIgIC0xLCAtLXNpbmds ZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0cmFuc2FjdGlvblxuIikp OwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAgICAgICAgZGlzYWJsZSB0 cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKQEAgLTU2OSw4ICs3MTks OCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtLXJvbGU9 Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3RvcmVcbiIpKTsKIAog CXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAt VCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJ ICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJ CSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQg LS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSBjb21iaW5lZFxuIgorCQkJICJhbmQgc3BlY2lm aWVkIG11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwog CXByaW50ZihfKCJcbklmIG5vIGlucHV0IGZpbGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBz dGFuZGFyZCBpbnB1dCBpcyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdz IHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21l IHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTY3NSwz ICs4MjUsNTY5IEBAIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1l LCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQor CisvKgorICogZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVl IGlmIGZpbGUgZXhpc3QgaW4gY3VycmVudCBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBib29s CitmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFy ICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyCQlidWZbTUFYUEdQQVRI XTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxl bmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxv bmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYg U19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiByZWFkX29uZV9zdGF0ZW1lbnQK KyAqCisgKiBUaGlzIHdpbGwgc3RhcnQgcmVhZGluZyBmcm9tIHBhc3NlZCBmaWxlIHBvaW50 ZXIgdXNpbmcgZmdldGMgYW5kIHJlYWQgdGlsbAorICogc2VtaWNvbG9uKHNxbCBzdGF0ZW1l bnQgdGVybWluYXRvciBmb3IgZ2xvYmFsLmRhdCBmaWxlKQorICoKKyAqIEVPRiBpcyByZXR1 cm5lZCBpZiBlbmQtb2YtZmlsZSBpbnB1dCBpcyBzZWVuOyB0aW1lIHRvIHNodXQgZG93bi4K KyAqLworCitzdGF0aWMgaW50CityZWFkX29uZV9zdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1 ZiwgRklMRSAqcGZpbGUpCit7CisJaW50CQkJYzsJCQkJLyogY2hhcmFjdGVyIHJlYWQgZnJv bSBnZXRjKCkgKi8KKwlpbnQJCQltOworCisJU3RyaW5nSW5mb0RhdGEgcTsKKworCWluaXRT dHJpbmdJbmZvKCZxKTsKKworCXJlc2V0U3RyaW5nSW5mbyhpbkJ1Zik7CisKKwkvKgorCSAq IFJlYWQgY2hhcmFjdGVycyB1bnRpbCBFT0Ygb3IgdGhlIGFwcHJvcHJpYXRlIGRlbGltaXRl ciBpcyBzZWVuLgorCSAqLworCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQor CXsKKwkJaWYgKGMgIT0gJ1wnJyAmJiBjICE9ICciJyAmJiBjICE9ICdcbicgJiYgYyAhPSAn OycpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgYyk7CisJ CQl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwkJCXsKKwkJCQlpZiAoYyAh PSAnXCcnICYmIGMgIT0gJyInICYmIGMgIT0gJzsnICYmIGMgIT0gJ1xuJykKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSBjKTsKKwkJCQllbHNlCisJCQkJCWJy ZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGMgPT0gJ1wnJyB8fCBjID09ICciJykKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnEsIChjaGFyKSBjKTsKKwkJCW0gPSBjOworCisJ CQl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwkJCXsKKwkJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmcSwgKGNoYXIpIGMpOworCisJCQkJaWYgKGMgPT0gbSkKKwkJCQl7 CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoaW5CdWYsIHEuZGF0YSk7CisJCQkJCXJl c2V0U3RyaW5nSW5mbygmcSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJ CWlmIChjID09ICc7JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChj aGFyKSAnOycpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYyA9PSAnXG4nKQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnXG4nKTsKKwl9CisKKwkvKiBObyBp bnB1dCBiZWZvcmUgRU9GIHNpZ25hbCBtZWFucyB0aW1lIHRvIHF1aXQuICovCisJaWYgKGMg PT0gRU9GICYmIGluQnVmLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCS8qIEFkZCAn XDAnIHRvIG1ha2UgaXQgbG9vayB0aGUgc2FtZSBhcyBtZXNzYWdlIGNhc2UuICovCisJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnXDAnKTsKKworCXJldHVybiAnUSc7 Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUKKyAqCisgKiBUaGlz IHdpbGwgbWFyayBmb3Igc2tpcHBpbmcgYW55IGVudHJpZXMgZnJvbSBkYm5hbWVfb2lkX2xp c3QgdGhhdCBwYXR0ZXJuIG1hdGNoIGFuCisgKiBlbnRyeSBpbiB0aGUgZGJfZXhjbHVkZV9w YXR0ZXJucyBsaXN0LgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSB0 byBiZSByZXN0b3JlZC4KKyAqCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3Rf dG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJU2ltcGxlT2lkU3RyaW5nTGlzdCAq IGRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVf cGF0dGVybnMpCit7CisJaW50CQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVyIHF1ZXJ5 OworCVBHcmVzdWx0ICAgKnJlczsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK KworCWlmICghY29ubikKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRFUk4gYXMg TkFNRSBmb3IgLS1leGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYiBjb25uZWN0aW9u IHdoaWxlIGRvaW5nIHBnX3Jlc3RvcmUuIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5 IG9uZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0 aGVuCisJICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJZm9yIChTaW1wbGVP aWRTdHJpbmdMaXN0Q2VsbCAqIGRiX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJ CSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCWJvb2wJCXNraXBf ZGJfcmVzdG9yZSA9IGZhbHNlOworCisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKnBh dF9jZWxsID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBwYXRfY2VsbDsgcGF0X2NlbGwg PSBwYXRfY2VsbC0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAqIHRoZSBjb25zdHJ1Y3QgcGF0 dGVybiBtYXRjaGluZyBxdWVyeTogU0VMRUNUIDEgV0hFUkUgWFhYCisJCQkgKiBPUEVSQVRP UihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURSBwZ19jYXRhbG9nLmRlZmF1 bHQKKwkJCSAqCisJCQkgKiBYWFggcmVwcmVzZW50cyB0aGUgc3RyaW5nIGxpdGVyYWwgZGF0 YWJhc2UgbmFtZSBkZXJpdmVkIGZyb20KKwkJCSAqIHRoZSBkYm5hbWVfb2lkX2xpc3QsIHdo aWNoIGlzIGluaXRpYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUKKwkJCSAqIG1hcC5kYXQgZmls ZSBsb2NhdGVkIGluIHRoZSBiYWNrdXAgZGlyZWN0b3J5LiAgdGhhdCdzIHdoeSB3ZQorCQkJ ICogbmVlZCBxdW90ZV9saXRlcmFsX2NzdHIuCisJCQkgKgorCQkJICogSWYgbm8gZGIgY29u bmVjdGlvbiwgdGhlbiBjb25zaWRlciBQQVRURVJOIGFzIE5BTUUuCisJCQkgKi8KKwkJCWlm IChwZ19zdHJjYXNlY21wKGRiX2NlbGwtPnN0ciwgcGF0X2NlbGwtPnZhbCkgPT0gMCkKKwkJ CQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJ CQlpbnQJCQlkb3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNF TEVDVCAxICIpOworCQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgcGF0 X2NlbGwtPnZhbCwgZmFsc2UsCisJCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBxdW90ZV9saXRl cmFsX2NzdHIoZGJfY2VsbC0+c3RyKSwKKwkJCQkJCQkJCSAgTlVMTCwgTlVMTCwgTlVMTCwg JmRvdGNudCk7CisKKwkJCQlpZiAoZG90Y250ID4gMCkKKwkJCQl7CisJCQkJCXBnX2xvZ19l cnJvcigiaW1wcm9wZXIgcXVhbGlmaWVkIG5hbWUgKHRvbyBtYW55IGRvdHRlZCBuYW1lcyk6 ICVzIiwKKwkJCQkJCQkJIGRiX2NlbGwtPnN0cik7CisJCQkJCVBRZmluaXNoKGNvbm4pOwor CQkJCQlleGl0X25pY2VseSgxKTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVjdXRlUXVlcnko Y29ubiwgcXVlcnktPmRhdGEpOworCisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09 IFBHUkVTX1RVUExFU19PSykgJiYgUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lw X2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgXCIlc1wi IG1hdGNoZXMgZXhjbHVkZSBwYXR0ZXJuOiBcIiVzXCIiLCBkYl9jZWxsLT5zdHIsIHBhdF9j ZWxsLT52YWwpOworCQkJCX0KKworCQkJCVBRY2xlYXIocmVzKTsKKwkJCQlyZXNldFBRRXhw QnVmZmVyKHF1ZXJ5KTsKKwkJCX0KKworCQkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJCQli cmVhazsKKwkJfQorCisJCS8qIEluY3JlbWVudCBjb3VudCBpZiBkYXRhYmFzZSBuZWVkcyB0 byBiZSByZXN0b3JlZC4gKi8KKwkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdf bG9nX2luZm8oImV4Y2x1ZGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYl9jZWxsLT5zdHIpOwor CQkJZGJfY2VsbC0+b2lkID0gSW52YWxpZE9pZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNv dW50X2RiKys7CisJCX0KKwl9CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBn ZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmls ZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0 YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1 cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgor ICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3Qg Y2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZU9pZFN0cmluZ0xpc3QgKiBkYm5hbWVfb2lkX2xp c3QpCit7CisJRklMRQkgICAqcGZpbGU7CisJY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQR1BB VEhdOworCWNoYXIJCWxpbmVbTUFYUEdQQVRIXTsKKwlpbnQJCQljb3VudCA9IDA7CisKKwkv KgorCSAqIElmIHRoZXJlIGlzIG9ubHkgZ2xvYmFsLmRhdCBmaWxlIGluIGR1bXAsIHRoZW4g cmV0dXJuIGZyb20gaGVyZSBhcworCSAqIHRoZXJlIGlzIG5vIGRhdGFiYXNlIHRvIHJlc3Rv cmUuCisJICovCisJaWYgKCFmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoZHVtcGRpcnBhdGgs ICJtYXAuZGF0IikpCisJeworCQlwZ19sb2dfaW5mbygiZGF0YWJhc2VzIHJlc3RvcmluZyBp cyBza2lwcGVkIGFzIG1hcC5kYXQgZmlsZSBpcyBub3QgcHJlc2VudCBpbiBcIiVzXCIiLCBk dW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCXNucHJpbnRmKG1hcF9maWxlX3Bh dGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVu IG1hcC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJ TkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90 IG9wZW4gbWFwLmRhdCBmaWxlOiBcIiVzXCIiLCBtYXBfZmlsZV9wYXRoKTsKKworCS8qIEFw cGVuZCBhbGwgdGhlIGRibmFtZSBhbmQgZGJfb2lkIHRvIHRoZSBsaXN0LiAqLworCXdoaWxl ICgoZmdldHMobGluZSwgTUFYUEdQQVRILCBwZmlsZSkpICE9IE5VTEwpCisJeworCQlPaWQJ CQlkYl9vaWQgPSBJbnZhbGlkT2lkOworCQljaGFyCQlkYl9vaWRfc3RyW01BWFBHUEFUSCAr IDFdID0geydcMCd9OworCQljaGFyCQlkYm5hbWVbTUFYUEdQQVRIICsgMV0gPSB7J1wwJ307 CisKKwkJLyogRXh0cmFjdCBkYm9pZC4gKi8KKwkJc3NjYW5mKGxpbmUsICIldSIsICZkYl9v aWQpOworCQlzc2NhbmYobGluZSwgIiUyMHMiLCBkYl9vaWRfc3RyKTsKKworCQkvKiBOb3cg Y29weSBkYm5hbWUuICovCisJCXN0cmNweShkYm5hbWUsIGxpbmUgKyBzdHJsZW4oZGJfb2lk X3N0cikgKyAxKTsKKworCQkvKiBSZW1vdmUgXG4gZnJvbSBkYmFubWUuICovCisJCWRibmFt ZVtzdHJsZW4oZGJuYW1lKSAtIDFdID0gJ1wwJzsKKworCQlwZ19sb2dfaW5mbygiZm91bmQg ZGF0YWJhc2UgXCIlc1wiIChPSUQ6ICV1KSBpbiBtYXAuZGF0IGZpbGUgd2hpbGUgcmVzdG9y aW5nLiIsIGRibmFtZSwgZGJfb2lkKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQg aWYgdGhlIGZpbGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1Zh bGlkKGRiX29pZCkgfHwgc3RybGVuKGRibmFtZSkgPT0gMCkKKwkJCXBnX2ZhdGFsKCJpbnZh bGlkIGVudHJ5IGluIG1hcC5kYXQgZmlsZSBhdCBsaW5lIDogJWQiLCBjb3VudCArIDEpOwor CisJCS8qCisJCSAqIFhYWCA6IGJlZm9yZSBhZGRpbmcgZGJuYW1lIGludG8gbGlzdCwgd2Ug Y2FuIHZlcmlmeSB0aGF0IHRoaXMgZGIKKwkJICogbmVlZHMgdG8gc2tpcHBlZCBmb3IgcmVz dG9yZSBvciBub3QgYnV0IGFzIG9mIG5vdywgd2UgYXJlIG1ha2luZyBhCisJCSAqIGxpc3Qg b2YgYWxsIHRoZSBkYXRhYmFzZXMuCisJCSAqLworCQlzaW1wbGVfb2lkX3N0cmluZ19saXN0 X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiX29pZCwgZGJuYW1lKTsKKwkJY291bnQrKzsK Kwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBmaWxlKTsKKwor CXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVBbGxEYXRhYmFzZXMKKyAqCisg KiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNlbnQg aW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisg KiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVj aWZpZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJu cywgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMg aW50CityZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVt cGRpcnBhdGgsCisJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywg UmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCWludCBudW1Xb3JrZXJzKQoreworCVNpbXBs ZU9pZFN0cmluZ0xpc3QgZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9OworCWludAkJ CW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQludW1fdG90YWxfZGI7CisJaW50CQkJbl9l cnJvcnNfdG90YWw7CisJaW50CQkJY291bnQgPSAwOworCisJbnVtX3RvdGFsX2RiID0gZ2V0 X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGR1bXBkaXJwYXRoLCAmZGJuYW1lX29pZF9s aXN0KTsKKworCS8qCisJICogSWYgbWFwLmRhdCBoYXMgbm8gZW50cnksIHJldHVybiBmcm9t IGhlcmUgYWZ0ZXIgcHJvY2Vzc2luZyBnbG9iYWwuZGF0CisJICogZmlsZS4KKwkgKi8KKwlp ZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIHByb2Nlc3NfZ2xv YmFsX3NxbF9jb21tYW5kcyhjb25uLCBkdW1wZGlycGF0aCwgb3B0cy0+ZmlsZW5hbWUpOwor CisJcGdfbG9nX2luZm8oImZvdW5kIHRvdGFsICVkIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5k YXQgZmlsZSIsIG51bV90b3RhbF9kYik7CisKKwlpZiAoIWNvbm4pCisJeworCQlwZ19sb2df aW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJwb3N0Z3Jlc1wiICB0byBkdW1w IGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0Z3Jl cyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCSAgIG9wdHMtPmNwYXJh bXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJ CQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCS8q IFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19sb2df aW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJ0ZW1wbGF0ZTFcIiBhcyBmYWls ZWQgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcInBvc3RncmVzXCIgdG8gZHVtcCBpbnRvIG91 dCBmaWxlIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5V TEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBn cG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAg IGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCX0KKwl9CisK KwkvKgorCSAqIHByb2Nlc3NpbmcgcGdfcmV0c29yZSAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFU VEVSTi9OQU1FIGlmIG5vIGNvbm5lY3Rpb24uCisJICovCisJbnVtX2RiX3Jlc3RvcmUgPSBn ZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJ CQkJCQkJCQkJCSBkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCS8qIE9wZW4gZ2xvYmFsLmRh dCBmaWxlIGFuZCBleGVjdXRlL2FwcGVuZCBhbGwgdGhlIGdsb2JhbCBzcWwgY29tbWFuZHMu ICovCisJbl9lcnJvcnNfdG90YWwgPSBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29u biwgZHVtcGRpcnBhdGgsIG9wdHMtPmZpbGVuYW1lKTsKKworCS8qIENsb3NlIHRoZSBkYiBj b25uZWN0aW9uIGFzIHdlIGFyZSBkb25lIHdpdGggZ2xvYmFscyBhbmQgcGF0dGVybnMuICov CisJaWYgKGNvbm4pCisJCVBRZmluaXNoKGNvbm4pOworCisJLyogRXhpdCBpZiBubyBkYiBu ZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0g TlVMTCB8fCBudW1fZGJfcmVzdG9yZSA9PSAwKQorCXsKKwkJcGdfbG9nX2luZm8oIm5vIGRh dGFiYXNlIG5lZWRzIHRvIHJlc3RvcmUgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3Rh bF9kYik7CisJCXJldHVybiBuX2Vycm9yc190b3RhbDsKKwl9CisKKwlwZ19sb2dfaW5mbygi bmVlZHMgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51 bV9kYl9yZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJLyoKKwkgKiBUaWxsIG5vdywgd2Ug bWFkZSBhIGxpc3Qgb2YgZGF0YWJhc2VzLCB0aG9zZSBuZWVkcyB0byBiZSByZXN0b3JlZCBh ZnRlcgorCSAqIHNraXBwaW5nIG5hbWVzIG9mIGV4Y2x1ZGUtZGF0YWJhc2UuICBOb3cgd2Ug Y2FuIGxhdW5jaCBwYXJhbGxlbCB3b3JrZXJzCisJICogdG8gcmVzdG9yZSB0aGVzZSBkYXRh YmFzZXMuCisJICovCisJZm9yIChTaW1wbGVPaWRTdHJpbmdMaXN0Q2VsbCAqIGRiX2NlbGwg PSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxs LT5uZXh0KQorCXsKKwkJY2hhcgkJc3ViZGlycGF0aFtNQVhQR1BBVEhdOworCQljaGFyCQlz dWJkaXJkYnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJZGJmaWxlbmFtZVtNQVhQR1BBVEhd OworCQlpbnQJCQluX2Vycm9yczsKKworCQkvKiBpZ25vcmUgZGJzIG1hcmtlZCBmb3Igc2tp cHBpbmcgKi8KKwkJaWYgKGRiX2NlbGwtPm9pZCA9PSBJbnZhbGlkT2lkKQorCQkJY29udGlu dWU7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28g dGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3JlZAorCQkgKiBpbnRvIGFscmVhZHkgY3JlYXRl ZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLworCQlp ZiAob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKG9wdHMt PmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9wdHMtPmNwYXJhbXMub3ZlcnJpZGVf ZGJuYW1lID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcmRicGF0aCwgTUFYUEdQ QVRILCAiJXMvZGF0YWJhc2VzIiwgZHVtcGRpcnBhdGgpOworCisJCS8qCisJCSAqIFZhbGlk YXRlIGRhdGFiYXNlIGR1bXAgZmlsZS4gIElmIHRoZXJlIGlzIC50YXIgb3IgLmRtcCBmaWxl IGV4aXN0CisJCSAqIHRoZW4gY29uc2lkZXIgcGFydGljdWxhciBmaWxlLCBvdGhlcndpc2Ug anVzdCBhcHBlbmQgZGJvaWQgdG8gdGhlCisJCSAqIGRhdGFiYXNlcyBmb2xkZXIuCisJCSAq LworCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQR1BBVEgsICIldS50YXIiLCBkYl9jZWxs LT5vaWQpOworCQlpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwg ZGJmaWxlbmFtZSkpCisJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9k YXRhYmFzZXMvJXUudGFyIiwgZHVtcGRpcnBhdGgsIGRiX2NlbGwtPm9pZCk7CisJCWVsc2UK KwkJeworCQkJc25wcmludGYoZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXUuZG1wIiwgZGJf Y2VsbC0+b2lkKTsKKworCQkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShzdWJkaXJk YnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFU SCwgIiVzL2RhdGFiYXNlcy8ldS5kbXAiLCBkdW1wZGlycGF0aCwgZGJfY2VsbC0+b2lkKTsK KwkJCWVsc2UKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRh YmFzZXMvJXUiLCBkdW1wZGlycGF0aCwgZGJfY2VsbC0+b2lkKTsKKwkJfQorCisJCXBnX2xv Z19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJfY2VsbC0+c3RyKTsKKwor CQkvKiBSZXN0b3JlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJbl9lcnJvcnMgPSByZXN0b3Jl T25lRGF0YWJhc2Uoc3ViZGlycGF0aCwgb3B0cywgbnVtV29ya2VycywgdHJ1ZSwgY291bnQp OworCisJCS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgc2lu Z2xlIGRhdGFiYXNlIHJlc3RvcmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJeworCQkJbl9l cnJvcnNfdG90YWwgKz0gbl9lcnJvcnM7CisJCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGln bm9yZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJlc3RvcmU6ICVkIiwgZGJfY2VsbC0+c3RyLCBu X2Vycm9ycyk7CisJCX0KKworCQljb3VudCsrOworCX0KKworCS8qIExvZyBudW1iZXIgb2Yg cHJvY2Vzc2VkIGRhdGFiYXNlcy4gKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3Rv cmVkIGRhdGFiYXNlcyBhcmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBGcmVlIGRi bmFtZSBhbmQgZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfb2lkX3N0cmluZ19saXN0X2Rlc3Ry b3koJmRibmFtZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CisK Ky8qCisgKiBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMKKyAqCisgKiBUaGlzIHdpbGwg b3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIHdpbGwgZXhlY3V0ZSBhbGwgZ2xvYmFsIHNxbCBj b21tYW5kcyBvbmUKKyAqIGJ5IG9uZSBzdGF0ZW1lbnQuCisgKiBTZW1pY29sb24gaXMgY29u c2lkZXJlZCBhcyBzdGF0ZW1lbnQgdGVybWluYXRvci4gIElmIG91dGZpbGUgaXMgcGFzc2Vk LCB0aGVuCisgKiB0aGlzIHdpbGwgY29weSBhbGwgc3FsIGNvbW1hbmRzIGludG8gb3V0Zmls ZSByYXRoZXIgdGhlbiBleGVjdXRpbmcgdGhlbS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1i ZXIgb2YgZXJyb3JzIHdoaWxlIHByb2Nlc3NpbmcgZ2xvYmFsLmRhdAorICovCitzdGF0aWMg aW50Citwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpkdW1wZGlycGF0aCwgY29uc3QgY2hhciAqb3V0ZmlsZSkKK3sKKwljaGFyCQlnbG9i YWxfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJUEdyZXN1bHQgICAqcmVzdWx0OworCVN0cmlu Z0luZm9EYXRhIHNxbHN0YXRlbWVudDsKKwlGSUxFCSAgICpwZmlsZTsKKwlpbnQJCQluX2Vy cm9ycyA9IDA7CisKKwlzbnByaW50ZihnbG9iYWxfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIl cy9nbG9iYWwuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBnbG9iYWwuZGF0IGZp bGUuICovCisJcGZpbGUgPSBmb3BlbihnbG9iYWxfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7 CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGds b2JhbC5kYXQgZmlsZTogXCIlc1wiIiwgZ2xvYmFsX2ZpbGVfcGF0aCk7CisKKwkvKgorCSAq IElmIG91dGZpbGUgaXMgZ2l2ZW4sIHRoZW4ganVzdCBjb3B5IGFsbCBnbG9iYWwuZGF0IGZp bGUgZGF0YSBpbnRvCisJICogb3V0ZmlsZS4KKwkgKi8KKwlpZiAob3V0ZmlsZSkKKwl7CisJ CWNvcHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUob3V0ZmlsZSwgcGZpbGUpOworCQlyZXR1cm4g MDsKKwl9CisKKwkvKiBJbml0IHNxbHN0YXRlbWVudCB0byBhcHBlbmQgY29tbWFuZHMuICov CisJaW5pdFN0cmluZ0luZm8oJnNxbHN0YXRlbWVudCk7CisKKwkvKiBQcm9jZXNzIGZpbGUg dGlsbCBFT0YgYW5kIGV4ZWN1dGUgc3FsIHN0YXRlbWVudHMuICovCisJd2hpbGUgKHJlYWRf b25lX3N0YXRlbWVudCgmc3Fsc3RhdGVtZW50LCBwZmlsZSkgIT0gRU9GKQorCXsKKwkJcGdf bG9nX2luZm8oImV4ZWN1dGluZyBxdWVyeTogJXMiLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisJ CXJlc3VsdCA9IFBRZXhlYyhjb25uLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisKKwkJc3dpdGNo IChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKQorCQl7CisJCQljYXNlIFBHUkVTX0NPTU1BTkRf T0s6CisJCQljYXNlIFBHUkVTX1RVUExFU19PSzoKKwkJCWNhc2UgUEdSRVNfRU1QVFlfUVVF Ulk6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW5fZXJyb3JzKys7CisJCQkJcGdf bG9nX2Vycm9yKCJjb3VsZCBub3QgZXhlY3V0ZSBxdWVyeTogXCIlc1wiIFxuQ29tbWFuZCB3 YXM6IFwiJXNcIiIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pLCBzcWxzdGF0ZW1lbnQuZGF0YSk7 CisJCX0KKwkJUFFjbGVhcihyZXN1bHQpOworCX0KKworCS8qIFByaW50IGEgc3VtbWFyeSBv ZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgZ2xvYmFsLmRhdC4gKi8KKwlpZiAobl9lcnJvcnMp CisJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBnbG9iYWwuZGF0IGZpbGUg cmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisKKwlmY2xvc2UocGZpbGUpOworCisJcmV0dXJu IG5fZXJyb3JzOworfQorCisvKgorICogY29weV9vcl9wcmludF9nbG9iYWxfZmlsZQorICoK KyAqIFRoaXMgd2lsbCBjb3B5IGdsb2JhbC5kYXQgZmlsZSBpbnRvIG91dCBmaWxlLiAgSWYg Ii0iIGlzIHVzZWQgYXMgb3V0ZmlsZSwKKyAqIHRoZW4gcHJpbnQgY29tbWFuZHMgdG8gdGhl IHN0ZG91dC4KKyAqLworc3RhdGljIHZvaWQKK2NvcHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUo Y29uc3QgY2hhciAqb3V0ZmlsZSwgRklMRSAqcGZpbGUpCit7CisJY2hhcgkJb3V0X2ZpbGVf cGF0aFtNQVhQR1BBVEhdOworCUZJTEUJICAgKk9QRjsKKwlpbnQJCQljOworCisJLyogIi0i IGlzIHVzZWQgZm9yIHN0ZG91dC4gKi8KKwlpZiAoc3RyY21wKG91dGZpbGUsICItIikgPT0g MCkKKwkJT1BGID0gc3Rkb3V0OworCWVsc2UKKwl7CisJCXNucHJpbnRmKG91dF9maWxlX3Bh dGgsIE1BWFBHUEFUSCwgIiVzIiwgb3V0ZmlsZSk7CisJCU9QRiA9IGZvcGVuKG91dF9maWxl X3BhdGgsIFBHX0JJTkFSWV9XKTsKKworCQlpZiAoT1BGID09IE5VTEwpCisJCXsKKwkJCWZj bG9zZShwZmlsZSk7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZTogXCIlc1wi Iiwgb3V0ZmlsZSk7CisJCX0KKwl9CisKKwkvKiBBcHBlbmQgZ2xvYmFsLmRhdCBpbnRvIG91 dCBmaWxlIG9yIHByaW50IHRvIHRoZSBzdGRvdXQuICovCisJd2hpbGUgKChjID0gZmdldGMo cGZpbGUpKSAhPSBFT0YpCisJCWZwdXRjKGMsIE9QRik7CisKKwlmY2xvc2UocGZpbGUpOwor CisJLyogQ2xvc2Ugb3V0IGZpbGUuICovCisJaWYgKHN0cmNtcChvdXRmaWxlLCAiLSIpICE9 IDApCisJCWZjbG9zZShPUEYpOworfQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9pbnRlcm5h bAorICovCitzdGF0aWMgc2l6ZV90CitxdW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRz dCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnM7CisJ Y2hhcgkgICAqc2F2ZWRzdCA9IGRzdDsKKworCWZvciAocyA9IHNyYzsgcyA8IHNyYyArIGxl bjsgcysrKQorCXsKKwkJaWYgKCpzID09ICdcXCcpCisJCXsKKwkJCSpkc3QrKyA9IEVTQ0FQ RV9TVFJJTkdfU1lOVEFYOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkqZHN0KysgPSAnXCcn OworCXdoaWxlIChsZW4tLSA+IDApCisJeworCQlpZiAoU1FMX1NUUl9ET1VCTEUoKnNyYywg dHJ1ZSkpCisJCQkqZHN0KysgPSAqc3JjOworCQkqZHN0KysgPSAqc3JjKys7CisJfQorCSpk c3QrKyA9ICdcJyc7CisKKwlyZXR1cm4gZHN0IC0gc2F2ZWRzdDsKK30KKworLyoKKyAqIHF1 b3RlX2xpdGVyYWxfY3N0cgorICoKKyAqCSAgcmV0dXJucyBhIHByb3Blcmx5IHF1b3RlZCBs aXRlcmFsCisgKiBjb3BpZWQgZnJvbSBzcmMvYmFja2VuZC91dGlscy9hZHQvcXVvdGUuYwor ICovCitzdGF0aWMgY2hhciAqCitxdW90ZV9saXRlcmFsX2NzdHIoY29uc3QgY2hhciAqcmF3 c3RyKQoreworCWNoYXIJICAgKnJlc3VsdDsKKwlpbnQJCQlsZW47CisJaW50CQkJbmV3bGVu OworCisJbGVuID0gc3RybGVuKHJhd3N0cik7CisKKwkvKiBXZSBtYWtlIGEgd29yc3QtY2Fz ZSByZXN1bHQgYXJlYTsgd2FzdGluZyBhIGxpdHRsZSBzcGFjZSBpcyBPSyAqLworCXJlc3Vs dCA9IHBnX21hbGxvYyhsZW4gKiAyICsgMyArIDEpOworCisJbmV3bGVuID0gcXVvdGVfbGl0 ZXJhbF9pbnRlcm5hbChyZXN1bHQsIHJhd3N0ciwgbGVuKTsKKwlyZXN1bHRbbmV3bGVuXSA9 ICdcMCc7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCm9s ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzdkODkzZDVlNmEuLjBiYmNk YmU4NGE3Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMv YmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTIzNyw2ICsyMzcsMTEgQEAgY29tbWFu ZF9mYWlsc19saWtlKAogCSdwZ19yZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQg LTFcLy0tc2luZ2xlLXRyYW5zYWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsK IAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRh dGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFw Z19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUg dXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9y ZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3 aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jyk7CisKICMgYWxzbyBmYWlscyBmb3IgLXIgYW5kIC10 LCBidXQgaXQgc2VlbXMgcG9pbnRsZXNzIHRvIGFkZCBtb3JlIHRlc3RzIGZvciB0aG9zZS4K IGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19kdW1wYWxsJywgJy0tZXhjbHVkZS1kYXRh YmFzZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknIF0sCkBAIC0yNDQsNCArMjQ5LDggQEAgY29t bWFuZF9mYWlsc19saWtlKAogCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFi YXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiAp OwogCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcs ICd4JyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IHVucmVjb2duaXplZCBhcmNoaXZl IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBm b3JtYXQnKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApp bmRleCBiNjZjZWNkODc5OS4uOTVlYzhmYmIxNDEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0yNzMyLDYgKzI3MzIsOCBAQCBTaHV0ZG93bk1vZGUKIFNpZ25UU1ZlY3Rv cgogU2ltcGxlQWN0aW9uTGlzdAogU2ltcGxlQWN0aW9uTGlzdENlbGwKK1NpbXBsZURhdGFi YXNlT2lkTGlzdAorU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAogU2ltcGxlRWNvbnRleHRT dGFja0VudHJ5CiBTaW1wbGVPaWRMaXN0CiBTaW1wbGVPaWRMaXN0Q2VsbAotLSAKMi4zNC4x Cgo= --------------X5UVU7zhzGOyNzLfc6kyDo51 Content-Type: text/plain; charset=UTF-8; name="dumpall_cleanup.patch2-noci" Content-Disposition: attachment; filename="dumpall_cleanup.patch2-noci" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IDdjZWFiYTI3NDE5Li43YTA2ZTU5NWI4OCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0xNjM5LDEwICsxNjM5LDkgQEAgZHVtcERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiAJCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CiAKIAkvKgotCSAqIElmIGRp cmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQgdGhlbiBjcmVhdGUgYSBz dWJkaXJlY3RvcnkKLQkgKiB1bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0 YWJhc2UgZHVtcCBmaWxlIHN1YmRpcmVjdG9yeSB3aWxsCi0JICogYmUgY3JlYXRlZCB1bmRl ciB0aGUgc3ViZGlyZWN0b3J5IGluIGFyY2hpdmUgbW9kZSBhcyBwZXIgc2luZ2xlIGRiCi0J ICogcGdfZHVtcC4KKwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBmb3JtYXQgaXMgc3Bl Y2lmaWVkLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkKKwkgKiB1bmRlciB0aGUgbWFpbiBkaXJl Y3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxlIG9yIHN1YmRpcmVjdG9yeQorCSAq IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGF0IHN1YmRpcmVjdG9yeSBieSBwZ19kdW1wLgogCSAq LwogCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKIAl7CkBAIC0xNjY2LDcgKzE2 NjUsNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNo RHVtcEZvcm1hdCkKIAl7CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBp LCAwKTsKIAkJY2hhcgkgICAqb2lkID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOwotCQljb25z dCBjaGFyICpjcmVhdGVfb3B0czsKKwkJY29uc3QgY2hhciAqY3JlYXRlX29wdHMgPSAiIjsK IAkJaW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVtcGxhdGUwLCBldmVuIGlmIGl0J3Mgbm90 IG1hcmtlZCAhZGF0YWxsb3djb25uLiAqLwpAQCAtMTY5OSw3ICsxNjk4LDggQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiAK IAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKIAot CQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwg ZGJuYW1lKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJIGZwcmlu dGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBkYm5hbWUp OwogCiAJCS8qCiAJCSAqIFdlIGFzc3VtZSB0aGF0ICJ0ZW1wbGF0ZTEiIGFuZCAicG9zdGdy ZXMiIGFscmVhZHkgZXhpc3QgaW4gdGhlCkBAIC0xNzEzLDIwICsxNzEzLDggQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiAJ CXsKIAkJCWlmIChvdXRwdXRfY2xlYW4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAt LWNyZWF0ZSI7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBl bWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLwotCQkJCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKLQkJCQl7Ci0JCQkJCWNyZWF0ZV9vcHRzID0gIiI7Ci0JCQkJ CWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7Ci0JCQkJfQotCQkJ CWVsc2UKLQkJCQl7Ci0JCQkJCS8qIER1bXBpbmcgYWxsIGRhdGFiYXNlcyBzbyBhZGQgLS1j cmVhdGUgb3B0aW9uLiAqLwotCQkJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7Ci0JCQkJ fQotCQkJfQorCQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJ ZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKIAkJfQogCQllbHNl CiAJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7Cg== --------------X5UVU7zhzGOyNzLfc6kyDo51--