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 1vEOmr-00BFEp-Ic for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 09:17:41 +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 1vEOmq-006lQc-Ew for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 09:17:39 +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 1vEOmp-006lQJ-Ol for pgsql-hackers@lists.postgresql.org; Thu, 30 Oct 2025 09:17:39 +0000 Received: from mail-yx1-xb12b.google.com ([2607:f8b0:4864:20::b12b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vEOml-004XMV-0D for pgsql-hackers@postgresql.org; Thu, 30 Oct 2025 09:17:37 +0000 Received: by mail-yx1-xb12b.google.com with SMTP id 956f58d0204a3-63cf0df1abbso1024353d50.2 for ; Thu, 30 Oct 2025 02:17:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761815854; x=1762420654; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=5B/sgpKHHfUipb6B0ESKtX5EfA1sSSARtR5An1HZbk4=; b=mtPLcSRFrpC3VDzDrbLFUPyPitpzi1iKm/u2zA1L9y36mrB119or8Q51nB0NLc6z1P 7Rc8KXhucnLw35dcmmBq8neSnUg1x2Qy95wjphzo8rXuJqLXjKwXgkqR/qG2/DWRZI5n Qf+LNBjsWQ9CnvqtJTeiS/HpOE/y8uYi5hVtDXOiTCHxGmCEkpSESQT1cEW9oxR4NzS/ cN1sjDwwcrZoXz64qLbUUB734TZl44kSxbxpNH+HSBuXbo+ZRlFKuOK15gQVVpJMLL5h UUaDYEAdQNSY2DqJa6fVHxeWzRP1MaFmF4oDozVPFdF7Wt34bXxnPfpEyCpXKVGTr5+W 9YcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761815854; x=1762420654; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=5B/sgpKHHfUipb6B0ESKtX5EfA1sSSARtR5An1HZbk4=; b=UvWUqawja0yXAYuvWGw/vEs4P0Va/bZXG65vnnJpKCRqE1ycf9SckQ+utWEkSQX6QL oaG8hqUC3Sa/oDmM5ZALSkIl6ydPo5Ca/jqkoxsKegWDBxC7zTXRPkGe+ZEzGrieZOyq OtgMuBfB3f+C8I7WyiOScUHmHfzCSRsiqC5+1RvDgFha227nZf7XloXaGF9f7eZvmbhZ 46gmKu8j0v44AFlYotlKBhO19ixIY5U5elhtJdb/m2nf0kHsipWI21d/eC9uhz7kTj6f ISpfg0VphvIE/9G29xqliOHbRayQSngFTBy0Wg5KRaZsNAW5SC0bO/gTO2MphIDORiIx Anwg== X-Forwarded-Encrypted: i=1; AJvYcCWabTJqLhhHChFG9II5YeT0Ji3DGKx55h/a75SEl+zCV5/KtnOVpJaF1b0i0ZtzaqaONb0EjkPt044c6tef@postgresql.org X-Gm-Message-State: AOJu0YxNOgnV/NDTDIMlzrtbpRKfnyoCZ8HlLPgrylsmOihaq183ROtA xSFWupps3tOBEdbxWsqG6eqsHLo494WHzkw/VUaWI32NmfzFW6UbC6LH X-Gm-Gg: ASbGncu+JfC0Akg0FoU3LtBpAdxIoMBD2yvQTtwsQAB0zXLPXj+TbRAJX8RzgI7tYg/ qp+FubPY2Eiad6+/nhbNqKHRuVNfXIFkpmMOCjr5zqQgqdUHnkbujdPtg3asPBhIRby3iclEs3g va3InTNoLMxEunNsBWhwI+/zjfyfjqxU6unjmRskdDfCr8Uincfp85z4q31x+SFDLJCUY4BCoUN tmG+hEp248dXS5f87z1OAd/+vWA8CihJwWwi2g87adEtY2tXCGisyeRUA3Qwo7PjUFx4UPsHlzG 3Jdn4/s3oM+Xw0hdI2R6NcH3eqa6Clnwbz0k5IWh5Dq/TX/5Ra72zppJXsJBb15bXeTMBPhyRPh f5lJnu8xPURiyKWo8i66ZuOAVCeN+Xap7VRDoSMpSaxFnQKJz66Z/ubNSNH55urdgac9ug6x3N3 KDclq3HOA7tW975IiKXXy+YqoA8/0LgdczGmQ45OMlcab0/CgJ25MfmA== X-Google-Smtp-Source: AGHT+IHOvSOCM699hbZiRxjwmIuS9UsadqXQULZgoxE8A8hGcUHRTJkUcEoBCGk0QBwLFNXF9TgoWA== X-Received: by 2002:a05:690e:1542:10b0:63d:30e4:4fce with SMTP id 956f58d0204a3-63f76d237e4mr4340378d50.19.1761815853815; Thu, 30 Oct 2025 02:17:33 -0700 (PDT) Received: from ?IPV6:2600:1700:8952:80:b945:693f:d5d2:6c5e? ([2600:1700:8952:80:b945:693f:d5d2:6c5e]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-63f4c3bc8b3sm4996520d50.2.2025.10.30.02.17.32 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 30 Oct 2025 02:17:32 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------BVnAIkbsiLjek0HxbhZYottJ" Message-ID: Date: Thu, 30 Oct 2025 03:17:34 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] Add Windows support for backtrace_functions (MSVC only) To: Jakub Wartak Cc: Euler Taveira , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Michael Paquier , pgsql-hackers References: <202510281643.xoy2do2in3bw@alvherre.pgsql> <38f24c47-646f-4001-a292-5e671ac453db@gmail.com> Content-Language: en-US From: Bryan Green 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. --------------BVnAIkbsiLjek0HxbhZYottJ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 10/30/2025 2:01 AM, Jakub Wartak wrote: > On Thu, Oct 30, 2025 at 4:06 AM Bryan Green wrote: > > [..] > > Hi Bryan, cfbot is red. I'm was fan of having those tests for this > (bring complexity and we didn't have tests for Linux backtrace > anyway), but now MINGW win32 is failing on those tests where the > feature is not present: > > [03:57:44.552] ------------------------------------- 8< > ------------------------------------- > [03:57:44.552] stderr: > [03:57:44.552] # Failed test 'backtrace has valid format' > [03:57:44.552] # at > C:/cirrus/src/test/modules/test_backtrace/t/t_windows_backtrace.pl > line 106. > [03:57:44.552] # Failed test 'Unable to determine scenario - > PostgreSQL should always have export symbols' > [03:57:44.552] # at > C:/cirrus/src/test/modules/test_backtrace/t/t_windows_backtrace.pl > line 180. > [03:57:44.552] # Failed test 'Scenario mismatch: expected 2, got 0' > [03:57:44.552] # at > C:/cirrus/src/test/modules/test_backtrace/t/t_windows_backtrace.pl > line 224. > [03:57:44.552] # Failed test 'PL/pgSQL error has deeper stack (found > 0 frames)' > [03:57:44.552] # at > C:/cirrus/src/test/modules/test_backtrace/t/t_windows_backtrace.pl > line 318. > [03:57:44.552] # Failed test 'multiple rapid errors produced > backtraces (0 addresses found)' > [03:57:44.552] # at > C:/cirrus/src/test/modules/test_backtrace/t/t_windows_backtrace.pl > line 366. > [03:57:44.552] # Looks like you failed 5 tests of 19. > > Anyway, as expected this was thrown: > 2025-10-30 03:57:37.973 GMT client backend[244] t_windows_backtrace.pl > BACKTRACE: backtrace generation is not supported by this installation > > Please see attached files for convenience as I already had them on > disk. They are from https://commitfest.postgresql.org/patch/6116/ -> > https://cirrus-ci.com/task/5155398535086080 -> artifacts. > > Instead of > +# Skip if not Windows > +if ($^O ne 'MSWin32') > +{ > + plan skip_all => 'Windows-specific backtrace tests'; > +} > > Maybe we could also bypass MINGW too like below ? (but I have no > access, so i havent tried) > use Config; > # Skip if not Windows or MINGW/MSYS is detected > if ($^O ne 'MSWin32' || $Config{'ccname'} =~ /gcc|mingw/i || > defined($ENV{'MSYSTEM'})) > { > plan skip_all => 'Windows-specific backtrace tests'; > } > > -J. Thanks for the feedback. Apologies for forgetting about filtering mingw out of the tests. I have made changes to the test as well as meson.build in the test_backtrace directory to keep it from running on mingw. My cirrus build is all green across all the platforms. Find v3 attached. Bryan Green --------------BVnAIkbsiLjek0HxbhZYottJ Content-Type: text/plain; charset=UTF-8; name="v3-0001-Add-Windows-support-for-backtrace_functions.patch" Content-Disposition: attachment; filename*0="v3-0001-Add-Windows-support-for-backtrace_functions.patch" Content-Transfer-Encoding: base64 RnJvbSAwOTFiODg5NzMwNWFkNGQ4YTI1ZWZlNTYwZmQyOTJiNDhiMDQ4NTMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAyMSBPY3QgMjAyNSAxOTozMToyOSAtMDUwMApTdWJqZWN0OiBb UEFUQ0ggdjNdIEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGJhY2t0cmFjZV9mdW5jdGlvbnMu CgpiYWNrdHJhY2VfZnVuY3Rpb25zIGhhcyBiZWVuIFVuaXgtb25seSB1cCB0byBub3csIGJl Y2F1c2Ugd2UgcmVsaWVkIG9uCmdsaWJjJ3MgYmFja3RyYWNlKCkgb3Igc2ltaWxhciBwbGF0 Zm9ybSBmYWNpbGl0aWVzLiAgV2luZG93cyBkb2Vzbid0IGhhdmUKYW55dGhpbmcgZXF1aXZh bGVudCBpbiBpdHMgc3RhbmRhcmQgQyBsaWJyYXJ5LCBidXQgaXQgZG9lcyBoYXZlIHRoZSBE YmdIZWxwCkFQSSwgd2hpY2ggY2FuIGRvIHRoZSBzYW1lIHRoaW5nIGlmIHlvdSBhc2sgaXQg bmljZWx5LgoKVGhlIHRyaWNreSBiaXQgaXMgdGhhdCBEYmdIZWxwIG5lZWRzIHRvIGJlIGlu aXRpYWxpemVkIHdpdGggU3ltSW5pdGlhbGl6ZSgpCmJlZm9yZSB5b3UgY2FuIHVzZSBpdCwg YW5kIHRoYXQncyBhIGZhaXJseSBleHBlbnNpdmUgb3BlcmF0aW9uLiAgV2UgZG9uJ3QKd2Fu dCB0byBkbyB0aGF0IGV2ZXJ5IHRpbWUgd2UgZ2VuZXJhdGUgYSBiYWNrdHJhY2UuICBGb3J0 dW5hdGVseSwgaXQgdHVybnMKb3V0IHRoYXQgd2UgY2FuIGluaXRpYWxpemUgb25jZSBwZXIg cHJvY2VzcyBhbmQgcmV1c2UgdGhlIGhhbmRsZSwgd2hpY2ggaXMKc2FmZSBzaW5jZSB3ZSdy ZSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIGR1cmluZyBlcnJvciByZXBvcnRpbmcgYW55 d2F5LgpTbyB0aGUgY29kZSBqdXN0IGluaXRpYWxpemVzIGxhemlseSBvbiBmaXJzdCB1c2Uu CgpJZiBTeW1Jbml0aWFsaXplIGZhaWxzLCB3ZSBkb24ndCBjb25zaWRlciB0aGF0IGFuIGVy cm9yOyB3ZSBqdXN0IHNpbGVudGx5CmRlY2xpbmUgdG8gZ2VuZXJhdGUgYmFja3RyYWNlcy4g IFRoaXMgc2VlbXMgcmVhc29uYWJsZSBzaW5jZSBiYWNrdHJhY2VzIGFyZQphIGRlYnVnZ2lu ZyBhaWQsIG5vdCBjcml0aWNhbCB0byBvcGVyYXRpb24uICBJdCBhbHNvIG1hdGNoZXMgdGhl IGJlaGF2aW9yCm9uIHBsYXRmb3JtcyB3aGVyZSBiYWNrdHJhY2UoKSBpc24ndCBhdmFpbGFi bGUuCgpTeW1ib2wgcmVzb2x1dGlvbiBxdWFsaXR5IGRlcGVuZHMgb24gd2hldGhlciBQREIg ZmlsZXMgYXJlIHByZXNlbnQuICBJZiB0aGV5CmFyZSwgRGJnSGVscCBjYW4gZ2l2ZSB1cyBz b3VyY2UgZmlsZSBwYXRocyBhbmQgbGluZSBudW1iZXJzLCB3aGljaCBpcyBncmVhdC4KSWYg bm90LCBpdCBjYW4gc3RpbGwgZ2l2ZSB1cyBmdW5jdGlvbiBuYW1lcyBieSByZWFkaW5nIHRo ZSBleHBvcnQgdGFibGUsIGFuZAp0aGF0IHR1cm5zIG91dCB0byBiZSBnb29kIGVub3VnaCBi ZWNhdXNlIHBvc3RncmVzLmV4ZSBleHBvcnRzIHRob3VzYW5kcyBvZgpmdW5jdGlvbnMuICAo WW91IGdldCBleHBvcnQgc3ltYm9scyBvbiBXaW5kb3dzIHdoZXRoZXIgeW91IGxpa2UgaXQg b3Igbm90LAp1bmxlc3MgeW91IGdvIG91dCBvZiB5b3VyIHdheSB0byBzdXBwcmVzcyB0aGVt LiAgTWlnaHQgYXMgd2VsbCB0YWtlIGFkdmFudGFnZQpvZiB0aGF0LikgIEZ1bGx5IHN0cmlw cGVkIGJpbmFyaWVzIHdvdWxkIG9ubHkgc2hvdyBhZGRyZXNzZXMsIGJ1dCB0aGF0J3Mgbm90 CmEgc2NlbmFyaW8gdGhhdCBhcHBsaWVzIHRvIFBvc3RncmVzLCBzbyB3ZSBkb24ndCB3b3Jy eSBhYm91dCBpdC4KClRoZSBUQVAgdGVzdCB2ZXJpZmllcyB0aGF0IHN5bWJvbCByZXNvbHV0 aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBib3RoIHRoZQp3aXRoLVBEQiBhbmQgd2l0aG91dC1Q REIgY2FzZXMuICBXZSBoYXZlIHRvIHVzZSBUQVAgYmVjYXVzZSBiYWNrdHJhY2VzIGdvCnRv IHRoZSBzZXJ2ZXIgbG9nLCBub3QgdG8gcHNxbC4gIFRoZSB0ZXN0IGZpZ3VyZXMgb3V0IHdo aWNoIGNhc2Ugc2hvdWxkCmFwcGx5IGJ5IGNoZWNraW5nIHdoZXRoZXIgcG9zdGdyZXMucGRi IGV4aXN0cyBvbiBkaXNrLCB0aGVuIHBhcnNlcyB0aGUKYmFja3RyYWNlIG91dHB1dCB0byBz ZWUgd2hhdCB3ZSBhY3R1YWxseSBnb3QuICBJZiB0aG9zZSBkb24ndCBtYXRjaCwgdGhhdCdz CmEgYnVnLiAgVGhpcyBzaG91bGQgY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgdGhlIFBEQiBleGlz dHMgYnV0IERiZ0hlbHAgZmFpbHMKdG8gbG9hZCBpdCwgd2hpY2ggc2VlbXMgbGlrZSB0aGUg bW9zdCBsaWtlbHkgd2F5IHRoaXMgY291bGQgYnJlYWsuCgpUaGUgdGVzdCBhbHNvIHZlcmlm aWVzIHRoYXQgd2UgY2FuIGdlbmVyYXRlIGEgYnVuY2ggb2YgYmFja3RyYWNlcyBpbiBxdWlj awpzdWNjZXNzaW9uIHdpdGhvdXQgY3Jhc2hpbmcsIHdoaWNoIGlzIHJlYWxseSBqdXN0IGEg YmFzaWMgc2FuaXR5IGNoZWNrLiAgSXQKZG9lc24ndCBhdHRlbXB0IHRvIGRldGVjdCBtZW1v cnkgbGVha3MsIHNpbmNlIHRoYXQgd291bGQgcmVxdWlyZSBleHRlcm5hbAp0b29scyB3ZSBk b24ndCB3YW50IHRvIGRlcGVuZCBvbi4KCkF1dGhvcjogQnJ5YW4gR3JlZW4KLS0tCiBzcmMv YmFja2VuZC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogc3Jj L2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jICAgICAgICAgICAgICAgIHwgMTc0ICsrKysr KysKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL01ha2VmaWxlICAgICAgfCAg MzMgKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvUkVBRE1FICAgICAgICB8 IDIyNCArKysrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvbWVzb24u YnVpbGQgICB8ICAxMyArCiAuLi4vdGVzdF9iYWNrdHJhY2UvdC90X3dpbmRvd3NfYmFja3Ry YWNlLnBsICAgfCA0MzQgKysrKysrKysrKysrKysrKysrCiAuLi4vdGVzdF9iYWNrdHJhY2Uv dGVzdF9iYWNrdHJhY2UtLTEuMC5zcWwgICAgfCAgNjYgKysrCiAuLi4vdGVzdF9iYWNrdHJh Y2UvdGVzdF9iYWNrdHJhY2UuY29udHJvbCAgICAgfCAgIDUgKwogOSBmaWxlcyBjaGFuZ2Vk LCA5NTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9iYWNrdHJhY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL1JFQURNRQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3QvdF93aW5kb3dzX2Jh Y2t0cmFjZS5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9i YWNrdHJhY2UvdGVzdF9iYWNrdHJhY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3Rlc3RfYmFja3RyYWNlLmNvbnRyb2wK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL21l c29uLmJ1aWxkCmluZGV4IGI4MzFhNTQxNjUuLmVlYjY5YzQwNzkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL21lc29uLmJ1aWxkCkBA IC0xLDYgKzEsMTEgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKIGJhY2tlbmRfYnVpbGRfZGVwcyA9IFtiYWNr ZW5kX2NvZGVdCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJyBhbmQgY2MuZ2V0X2lk KCkgPT0gJ21zdmMnCisgIGJhY2tlbmRfYnVpbGRfZGVwcyArPSBjYy5maW5kX2xpYnJhcnko J2RiZ2hlbHAnKQorZW5kaWYKKwogYmFja2VuZF9zb3VyY2VzID0gW10KIGJhY2tlbmRfbGlu a193aXRoID0gW3BncG9ydF9zcnYsIGNvbW1vbl9zcnZdCiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vs b2cuYwppbmRleCAyOTY0M2M1MTQzLi5mYzQyMWNlNDQ0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9lcnJvci9lbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3Iv ZWxvZy5jCkBAIC0xNDAsNiArMTQwLDEzIEBAIHN0YXRpYyB2b2lkIHdyaXRlX3N5c2xvZyhp bnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmxpbmUpOwogc3RhdGljIHZvaWQgd3JpdGVfZXZlbnRs b2coaW50IGxldmVsLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKTsKICNlbmRpZgogCisj aWZkZWYgX01TQ19WRVIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8ZGJnaGVs cC5oPgorc3RhdGljIGJvb2wgd2luMzJfYmFja3RyYWNlX3N5bWJvbHNfaW5pdGlhbGl6ZWQg PSBmYWxzZTsKK3N0YXRpYyBIQU5ETEUgd2luMzJfYmFja3RyYWNlX3Byb2Nlc3MgPSBOVUxM OworI2VuZGlmCisKIC8qIFdlIHByb3ZpZGUgYSBzbWFsbCBzdGFjayBvZiBFcnJvckRhdGEg cmVjb3JkcyBmb3IgcmUtZW50cmFudCBjYXNlcyAqLwogI2RlZmluZSBFUlJPUkRBVEFfU1RB Q0tfU0laRSAgNQogCkBAIC0xMTE2LDYgKzExMjMsMTggQEAgZXJyYmFja3RyYWNlKHZvaWQp CiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBfTVNDX1ZFUgorLyoKKyAqIENsZWFudXAgZnVu Y3Rpb24gZm9yIERiZ0hlbHAgcmVzb3VyY2VzLgorICogQ2FsbGVkIHZpYSBvbl9wcm9jX2V4 aXQoKSB0byByZWxlYXNlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgU3ltSW5pdGlhbGl6ZSgp LgorICovCitzdGF0aWMgdm9pZAord2luMzJfYmFja3RyYWNlX2NsZWFudXAoaW50IGNvZGUs IERhdHVtIGFyZykKK3sKKwlTeW1DbGVhbnVwKHdpbjMyX2JhY2t0cmFjZV9wcm9jZXNzKTsK K30KKyNlbmRpZgorCiAvKgogICogQ29tcHV0ZSBiYWNrdHJhY2UgZGF0YSBhbmQgYWRkIGl0 IHRvIHRoZSBzdXBwbGllZCBFcnJvckRhdGEuICBudW1fc2tpcAogICogc3BlY2lmaWVzIGhv dyBtYW55IGlubmVyIGZyYW1lcyB0byBza2lwLiAgVXNlIHRoaXMgdG8gYXZvaWQgc2hvd2lu ZyB0aGUKQEAgLTExNDcsNiArMTE2NiwxNjEgQEAgc2V0X2JhY2t0cmFjZShFcnJvckRhdGEg KmVkYXRhLCBpbnQgbnVtX3NraXApCiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZlcnJ0 cmFjZSwKIAkJCQkJCQkJICAgImluc3VmZmljaWVudCBtZW1vcnkgZm9yIGJhY2t0cmFjZSBn ZW5lcmF0aW9uIik7CiAJfQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKwl7CisJCXZvaWQJ ICAgKnN0YWNrWzEwMF07CisJCURXT1JECQlmcmFtZXM7CisJCURXT1JECQlpOworCQl3Y2hh cl90CQlidWZmZXJbc2l6ZW9mKFNZTUJPTF9JTkZPVykgKyBNQVhfU1lNX05BTUUgKiBzaXpl b2Yod2NoYXJfdCldOworCQlQU1lNQk9MX0lORk9XIHN5bWJvbDsKKwkJY2hhcgkgICAqdXRm OF9idWZmZXI7CisJCWludAkJCXV0ZjhfbGVuOworCisJCWlmICghd2luMzJfYmFja3RyYWNl X3N5bWJvbHNfaW5pdGlhbGl6ZWQpCisJCXsKKwkJCXdpbjMyX2JhY2t0cmFjZV9wcm9jZXNz ID0gR2V0Q3VycmVudFByb2Nlc3MoKTsKKworCQkJU3ltU2V0T3B0aW9ucyhTWU1PUFRfVU5E TkFNRSB8CisJCQkJCQkgIFNZTU9QVF9ERUZFUlJFRF9MT0FEUyB8CisJCQkJCQkgIFNZTU9Q VF9MT0FEX0xJTkVTIHwKKwkJCQkJCSAgU1lNT1BUX0ZBSUxfQ1JJVElDQUxfRVJST1JTKTsK KworCQkJaWYgKFN5bUluaXRpYWxpemUod2luMzJfYmFja3RyYWNlX3Byb2Nlc3MsIE5VTEws IFRSVUUpKQorCQkJeworCQkJCXdpbjMyX2JhY2t0cmFjZV9zeW1ib2xzX2luaXRpYWxpemVk ID0gdHJ1ZTsKKwkJCQlvbl9wcm9jX2V4aXQod2luMzJfYmFja3RyYWNlX2NsZWFudXAsIDAp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURXT1JECQllcnJvciA9IEdldExhc3RFcnJv cigpOworCisJCQkJZWxvZyhXQVJOSU5HLCAiU3ltSW5pdGlhbGl6ZSBmYWlsZWQgd2l0aCBl cnJvciAlbHUiLCBlcnJvcik7CisJCQl9CisJCX0KKworCQlmcmFtZXMgPSBDYXB0dXJlU3Rh Y2tCYWNrVHJhY2UobnVtX3NraXAsIGxlbmd0aG9mKHN0YWNrKSwgc3RhY2ssIE5VTEwpOwor CisJCWlmIChmcmFtZXMgPT0gMCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm ZXJydHJhY2UsICJcbk5vIHN0YWNrIGZyYW1lcyBjYXB0dXJlZCIpOworCQkJZWRhdGEtPmJh Y2t0cmFjZSA9IGVycnRyYWNlLmRhdGE7CisJCQlyZXR1cm47CisJCX0KKworCQlzeW1ib2wg PSAoUFNZTUJPTF9JTkZPVykgYnVmZmVyOworCQlzeW1ib2wJICAtPk1heE5hbWVMZW4gPSBN QVhfU1lNX05BTUU7CisJCXN5bWJvbAkgIC0+U2l6ZU9mU3RydWN0ID0gc2l6ZW9mKFNZTUJP TF9JTkZPVyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYW1lczsgaSsrKQorCQl7CisJCQlE V09SRDY0CQlhZGRyZXNzID0gKERXT1JENjQpIChzdGFja1tpXSk7CisJCQlEV09SRDY0CQlk aXNwbGFjZW1lbnQgPSAwOworCQkJQk9PTAkJc3ltX3Jlc3VsdDsKKworCQkJc3ltX3Jlc3Vs dCA9IFN5bUZyb21BZGRyVyh3aW4zMl9iYWNrdHJhY2VfcHJvY2VzcywKKwkJCQkJCQkJCSAg YWRkcmVzcywKKwkJCQkJCQkJCSAgJmRpc3BsYWNlbWVudCwKKwkJCQkJCQkJCSAgc3ltYm9s KTsKKworCQkJaWYgKHN5bV9yZXN1bHQpCisJCQl7CisJCQkJSU1BR0VITFBfTElORVc2NCBs aW5lOworCQkJCURXT1JECQlsaW5lX2Rpc3BsYWNlbWVudCA9IDA7CisKKwkJCQlsaW5lLlNp emVPZlN0cnVjdCA9IHNpemVvZihJTUFHRUhMUF9MSU5FVzY0KTsKKworCQkJCWlmIChTeW1H ZXRMaW5lRnJvbUFkZHJXNjQod2luMzJfYmFja3RyYWNlX3Byb2Nlc3MsCisJCQkJCQkJCQkJ ICBhZGRyZXNzLAorCQkJCQkJCQkJCSAgJmxpbmVfZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJ CSAgJmxpbmUpKQorCQkJCXsKKwkJCQkJLyogQ29udmVydCBzeW1ib2wgbmFtZSB0byBVVEYt OCAqLworCQkJCQl1dGY4X2xlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwg c3ltYm9sLT5OYW1lLCAtMSwKKwkJCQkJCQkJCQkJCSAgIE5VTEwsIDAsIE5VTEwsIE5VTEwp OworCQkJCQlpZiAodXRmOF9sZW4gPiAwKQorCQkJCQl7CisJCQkJCQljaGFyCSAgICpmaWxl bmFtZV91dGY4OworCQkJCQkJaW50CQkJZmlsZW5hbWVfbGVuOworCisJCQkJCQl1dGY4X2J1 ZmZlciA9IHBhbGxvYyh1dGY4X2xlbik7CisJCQkJCQlXaWRlQ2hhclRvTXVsdGlCeXRlKENQ X1VURjgsIDAsIHN5bWJvbC0+TmFtZSwgLTEsCisJCQkJCQkJCQkJCXV0ZjhfYnVmZmVyLCB1 dGY4X2xlbiwgTlVMTCwgTlVMTCk7CisKKwkJCQkJCS8qIENvbnZlcnQgZmlsZSBuYW1lIHRv IFVURi04ICovCisJCQkJCQlmaWxlbmFtZV9sZW4gPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQ X1VURjgsIDAsCisJCQkJCQkJCQkJCQkJCSAgIGxpbmUuRmlsZU5hbWUsIC0xLAorCQkJCQkJ CQkJCQkJCQkgICBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKwkJCQkJCWlmIChmaWxlbmFtZV9s ZW4gPiAwKQorCQkJCQkJeworCQkJCQkJCWZpbGVuYW1lX3V0ZjggPSBwYWxsb2MoZmlsZW5h bWVfbGVuKTsKKwkJCQkJCQlXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIGxpbmUu RmlsZU5hbWUsIC0xLAorCQkJCQkJCQkJCQkJZmlsZW5hbWVfdXRmOCwgZmlsZW5hbWVfbGVu LAorCQkJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZv KCZlcnJ0cmFjZSwKKwkJCQkJCQkJCQkJICJcbiVzKzB4JWxseCBbJXM6JWx1XSIsCisJCQkJ CQkJCQkJCSB1dGY4X2J1ZmZlciwKKwkJCQkJCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcp IGRpc3BsYWNlbWVudCwKKwkJCQkJCQkJCQkJIGZpbGVuYW1lX3V0ZjgsCisJCQkJCQkJCQkJ CSAodW5zaWduZWQgbG9uZykgbGluZS5MaW5lTnVtYmVyKTsKKworCQkJCQkJCXBmcmVlKGZp bGVuYW1lX3V0ZjgpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWFw cGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkJCQkgIlxuJXMrMHglbGx4IFsw eCVsbHhdIiwKKwkJCQkJCQkJCQkJIHV0ZjhfYnVmZmVyLAorCQkJCQkJCQkJCQkgKHVuc2ln bmVkIGxvbmcgbG9uZykgZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJCQkgKHVuc2lnbmVkIGxv bmcgbG9uZykgYWRkcmVzcyk7CisJCQkJCQl9CisKKwkJCQkJCXBmcmVlKHV0ZjhfYnVmZmVy KTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8qIENvbnZlcnNpb24gZmFp bGVkLCB1c2UgYWRkcmVzcyBvbmx5ICovCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJ0 cmFjZSwKKwkJCQkJCQkJCQkgIlxuWzB4JWxseF0iLAorCQkJCQkJCQkJCSAodW5zaWduZWQg bG9uZyBsb25nKSBhZGRyZXNzKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJewor CQkJCQkvKiBObyBsaW5lIGluZm8sIGNvbnZlcnQgc3ltYm9sIG5hbWUgb25seSAqLworCQkJ CQl1dGY4X2xlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgc3ltYm9sLT5O YW1lLCAtMSwKKwkJCQkJCQkJCQkJCSAgIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworCQkJCQlp ZiAodXRmOF9sZW4gPiAwKQorCQkJCQl7CisJCQkJCQl1dGY4X2J1ZmZlciA9IHBhbGxvYyh1 dGY4X2xlbik7CisJCQkJCQlXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHN5bWJv bC0+TmFtZSwgLTEsCisJCQkJCQkJCQkJCXV0ZjhfYnVmZmVyLCB1dGY4X2xlbiwgTlVMTCwg TlVMTCk7CisKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkJ CSAiXG4lcysweCVsbHggWzB4JWxseF0iLAorCQkJCQkJCQkJCSB1dGY4X2J1ZmZlciwKKwkJ CQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJ CSAodW5zaWduZWQgbG9uZyBsb25nKSBhZGRyZXNzKTsKKworCQkJCQkJcGZyZWUodXRmOF9i dWZmZXIpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyogQ29udmVyc2lv biBmYWlsZWQsIHVzZSBhZGRyZXNzIG9ubHkgKi8KKwkJCQkJCWFwcGVuZFN0cmluZ0luZm8o JmVycnRyYWNlLAorCQkJCQkJCQkJCSAiXG5bMHglbGx4XSIsCisJCQkJCQkJCQkJICh1bnNp Z25lZCBsb25nIGxvbmcpIGFkZHJlc3MpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkgIlxu WzB4JWxseF0iLAorCQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkcmVzcyk7CisJ CQl9CisJCX0KKwl9CiAjZWxzZQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmVycnRyYWNl LAogCQkJCQkJICAgImJhY2t0cmFjZSBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkg dGhpcyBpbnN0YWxsYXRpb24iKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVz b24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDE0ZmM3NjFj NGMuLmNjYjYzZjJiNTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVp bGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTQsNiArMTQsNyBA QCBzdWJkaXIoJ3Bsc2FtcGxlJykKIHN1YmRpcignc3BnaXN0X25hbWVfb3BzJykKIHN1YmRp cignc3NsX3Bhc3NwaHJhc2VfY2FsbGJhY2snKQogc3ViZGlyKCd0ZXN0X2FpbycpCitzdWJk aXIoJ3Rlc3RfYmFja3RyYWNlJykKIHN1YmRpcigndGVzdF9iaW5hcnloZWFwJykKIHN1YmRp cigndGVzdF9iaXRtYXBzZXQnKQogc3ViZGlyKCd0ZXN0X2Jsb29tZmlsdGVyJykKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvTWFrZWZpbGUgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjNlMzExMmNkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMzMg QEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS9NYWtlZmlsZQorIworIyBN YWtlZmlsZSBmb3IgV2luZG93cyBiYWNrdHJhY2UgdGVzdGluZyBtb2R1bGUKKworTU9EVUxF X2JpZyA9IHRlc3RfYmFja3RyYWNlCitPQkpTID0gdGVzdF9iYWNrdHJhY2UubworCitFWFRF TlNJT04gPSB0ZXN0X2JhY2t0cmFjZQorREFUQSA9IHRlc3RfYmFja3RyYWNlLS0xLjAuc3Fs CisKKyMgT25seSBUQVAgdGVzdHMgLSBubyBTUUwgcmVncmVzc2lvbiB0ZXN0cyBzaW5jZSBi YWNrdHJhY2VzCisjIGdvIHRvIHNlcnZlciBsb2dzLCBub3QgdG8gY2xpZW50IG91dHB1dAor VEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmln CitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hT KQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZQordG9w X2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWIt Z2xvYmFsLm1rCitlbmRpZgorCisjIFBsYXRmb3JtLXNwZWNpZmljIHRlc3QgaGFuZGxpbmcK K2lmZXEgKCQoUE9SVE5BTUUpLHdpbjMyKQorICAgICMgUnVuIGFsbCB0ZXN0cyBvbiBXaW5k b3dzCisgICAgUFJPVkVfRkxBR1MgKz0gLXYKK2Vsc2UKKyAgICAjIFNraXAgdGVzdHMgb24g bm9uLVdpbmRvd3MgcGxhdGZvcm1zCisgICAgVEFQX1RFU1RTID0gMAorZW5kaWYKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvUkVBRE1FIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uNzM4ODMyMGFkOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvUkVBRE1FCkBAIC0wLDAgKzEsMjI0IEBACis9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICAgIFdp bmRvd3MgQmFja3RyYWNlIFRlc3RzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitU QVAgdGVzdHMgZm9yIHRoZSBXaW5kb3dzIGJhY2t0cmFjZSBpbXBsZW1lbnRhdGlvbiwgd2hp Y2ggdXNlcyB0aGUgRGJnSGVscCBBUEkKK3RvIGNhcHR1cmUgYW5kIGZvcm1hdCBzdGFjayB0 cmFjZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaHkgVEFQIFRlc3RzPwor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmFja3RyYWNlcyBhcHBlYXIgaW4gdGhl IHNlcnZlciBsb2csIG5vdCBpbiBwc3FsIG91dHB1dC4gIFNvIHdlIGNhbid0IHVzZSBTUUwK K3Rlc3RzIHRvIHZhbGlkYXRlIHRoZW07IHdlIG5lZWQgVEFQIHRlc3RzIHRoYXQgY2FuIHJl YWQgdGhlIGFjdHVhbCBsb2cgZmlsZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitUZXN0IEZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Rfd2luZG93c19i YWNrdHJhY2UucGwKKworICBUZXN0cyBiYWNrdHJhY2UgZ2VuZXJhdGlvbiBpbiB0d28gc2Nl bmFyaW9zOgorCisgICgxKSBXSVRIIFBEQiBGSUxFOiBwb3N0Z3Jlcy5wZGIgZXhpc3RzIGFs b25nc2lkZSBwb3N0Z3Jlcy5leGUKKyAgICAgIEV4cGVjdGVkOiBGdW5jdGlvbiBuYW1lcywg c291cmNlIGZpbGVzLCBsaW5lIG51bWJlcnMsIGFkZHJlc3NlcworICAgICAgVmFsaWRhdGVz OiBEYmdIZWxwIGxvYWRzIHRoZSBQREIgYW5kIHJlc29sdmVzIGZ1bGwgc3ltYm9scworCisg ICgyKSBXSVRIT1VUIFBEQiBGSUxFOiBwb3N0Z3Jlcy5wZGIgaXMgYWJzZW50CisgICAgICBF eHBlY3RlZDogRnVuY3Rpb24gbmFtZXMgYW5kIGFkZHJlc3NlcyAoZnJvbSBleHBvcnQgdGFi bGUpCisgICAgICBWYWxpZGF0ZXM6IFdlIGNhbiBzdGlsbCBnZXQgdXNlZnVsIGJhY2t0cmFj ZXMgd2l0aG91dCBkZWJ1ZyBpbmZvCisKKyAgVGhlIHRlc3QgZmlndXJlcyBvdXQgd2hpY2gg c2NlbmFyaW8gYXBwbGllcyBieSBjaGVja2luZyB3aGV0aGVyIHBvc3RncmVzLnBkYgorICBl eGlzdHMsIHRoZW4gdmFsaWRhdGVzIHRoYXQgdGhlIGFjdHVhbCBiYWNrdHJhY2UgZm9ybWF0 IG1hdGNoZXMgZXhwZWN0YXRpb25zLgorICBJZiB0aGUgUERCIGlzIHByZXNlbnQgYnV0IHdl IGRvbid0IGdldCBzb3VyY2UgZmlsZXMsIHRoYXQncyBhIGJ1Zy4KKworICBXaGF0IGdldHMg dGVzdGVkOgorCisgICAgLSBCYXNpYyBmdW5jdGlvbmFsaXR5IChiYWNrdHJhY2VzIGFwcGVh ciBpbiBsb2dzKQorICAgIC0gU3ltYm9sIHJlc29sdXRpb24gKGNvcnJlY3QgZm9ybWF0IGZv ciBzY2VuYXJpbykKKyAgICAtIFZhcmlvdXMgZXJyb3IgdHlwZXMgKGRpdi1ieS16ZXJvLCBj b25zdHJhaW50cywgZXRjKQorICAgIC0gUEwvcGdTUUwgYW5kIHRyaWdnZXIgaW50ZWdyYXRp b24KKyAgICAtIFN0YWJpbGl0eSAoMjAgcmFwaWQgZXJyb3JzIGRvbid0IGNyYXNoIGFueXRo aW5nKQorICAgIC0gRGJnSGVscCBpbml0aWFsaXphdGlvbiBkb2Vzbid0IGZhaWwKKworICBX aGF0IGRvZXNuJ3QgZ2V0IHRlc3RlZDoKKworICAgIC0gTWVtb3J5IGxlYWtzICh3b3VsZCBu ZWVkIERyLiBNZW1vcnkgb3Igc2ltaWxhcikKKyAgICAtIFN5bWJvbCBzZXJ2ZXJzICh3b3Vs ZCBuZWVkIG5ldHdvcmsgc2V0dXApCisgICAgLSBTdHJpcHBlZCBiaW5hcmllcyAobm90IHJl bGV2YW50IGZvciBQb3N0Z3JlcykKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1J1 bm5pbmcgdGhlIFRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQcmVyZXF1 aXNpdGVzOgorCisgIC0gV2luZG93cyAodGVzdCBza2lwcyBvbiBvdGhlciBwbGF0Zm9ybXMp CisgIC0gTVNWQyBidWlsZCAobmVlZHMgRGJnSGVscCkKKyAgLSBQZXJsIHdpdGggUG9zdGdy ZVNRTDo6VGVzdCBtb2R1bGVzCisKK0Zyb20gdGhlIFBvc3RncmVTUUwgYnVpbGQgZGlyZWN0 b3J5OgorCisgIG1lc29uIHRlc3QgLS1zdWl0ZSB0ZXN0X2JhY2t0cmFjZSAtLXZlcmJvc2UK KworT3Igd2l0aCBwcm92ZToKKworICBzZXQgUEVSTDVMSUI9QzpccGF0aFx0b1xwb3N0Z3Jl c1xzcmNcdGVzdFxwZXJsCisgIHByb3ZlIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJh Y2UvdC90X3dpbmRvd3NfYmFja3RyYWNlLnBsCisKK1RvIHRlc3QgYm90aCBzY2VuYXJpb3M6 CisKKyAgKDEpIFdJVEggUERCOiBKdXN0IHJ1biB0aGUgdGVzdCBub3JtYWxseQorICAgICAg LSBQREIgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBwb3N0Z3Jlcy5leGUK KyAgICAgIC0gVGVzdCBleHBlY3RzIHRvIGZpbmQgc291cmNlIGZpbGUgaW5mb3JtYXRpb24K KworICAoMikgV0lUSE9VVCBQREI6IERlbGV0ZSB0aGUgUERCIGZpbGUgYW5kIHJlLXJ1bgor ICAgICAgLSBkZWwgYnVpbGRfZGlyXHRtcF9pbnN0YWxsXC4uLlxiaW5ccG9zdGdyZXMucGRi CisgICAgICAtIFRlc3QgZXhwZWN0cyBleHBvcnQgc3ltYm9scyBvbmx5CisKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCitFeHBlY3RlZCBPdXRwdXQKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisKK1dpdGggUERCOgorCisgIFBEQiBmaWxlIGZvdW5kOiBDOlwuLi5ccG9z dGdyZXMucGRiCisgIEVYUEVDVEVEOiBTY2VuYXJpbyAxIChmdWxsIFBEQiBzeW1ib2xzKQor ICBBQ1RVQUw6IFNjZW5hcmlvIDEgKGZvdW5kIHNvdXJjZSBmaWxlcyBhbmQgc3ltYm9scykK KyAgb2sgLSBTY2VuYXJpbyBtYXRjaGVzIGV4cGVjdGF0aW9uOiBTY2VuYXJpbyAxCisKKyAg RVJST1I6ICBkaXZpc2lvbiBieSB6ZXJvCisgIEJBQ0tUUkFDRToKKyAgaW50NGRpdisweDJh IFtDOlxwb3N0Z3Jlc1xzcmNcYmFja2VuZFx1dGlsc1xhZHRcaW50LmM6ODQxXSBbMHgwMDAw N0ZGNi4uLl0KKyAgRXhlY0ludGVycEV4cHIrMHgxYjMgW0M6XHBvc3RncmVzXHNyY1xiYWNr ZW5kXGV4ZWN1dG9yXGV4ZWNFeHBySW50ZXJwLmM6MjM0NV0KKyAgLi4uCisKK1dpdGhvdXQg UERCOgorCisgIFBEQiBmaWxlIG5vdCBmb3VuZDogQzpcLi4uXHBvc3RncmVzLnBkYgorICBF WFBFQ1RFRDogU2NlbmFyaW8gMiAoZXhwb3J0IHN5bWJvbHMgb25seSkKKyAgQUNUVUFMOiBT Y2VuYXJpbyAyIChmb3VuZCBzeW1ib2xzIGJ1dCBubyBzb3VyY2UgZmlsZXMpCisgIG9rIC0g U2NlbmFyaW8gbWF0Y2hlcyBleHBlY3RhdGlvbjogU2NlbmFyaW8gMgorCisgIEVSUk9SOiAg ZGl2aXNpb24gYnkgemVybworICBCQUNLVFJBQ0U6CisgIGludDRkaXYrMHgyYSBbMHgwMDAw N0ZGNi4uLl0KKyAgRXhlY0ludGVycEV4cHIrMHgxYjMgWzB4MDAwMDdGRjYuLi5dCisgIC4u LgorCitOb3RlOiBQb3N0Z3JlcyBleHBvcnRzIH4xMSwwMDAgZnVuY3Rpb25zLCBzbyBldmVu IHdpdGhvdXQgYSBQREIsIHlvdSBnZXQKK2Z1bmN0aW9uIG5hbWVzLiAgRnVsbHkgc3RyaXBw ZWQgYmluYXJpZXMgd291bGQgb25seSBzaG93IGFkZHJlc3NlcywgYnV0Cit0aGF0J3Mgbm90 IGEgc2NlbmFyaW8gd2UgY2FyZSBhYm91dCBmb3IgUG9zdGdyZXMuCisKK0ZhaWx1cmUgKFBE QiBleGlzdHMgYnV0IGRvZXNuJ3QgbG9hZCk6CisKKyAgUERCIGZpbGUgZm91bmQ6IEM6XC4u Llxwb3N0Z3Jlcy5wZGIKKyAgRVhQRUNURUQ6IFNjZW5hcmlvIDEgKGZ1bGwgUERCIHN5bWJv bHMpCisgIEFDVFVBTDogU2NlbmFyaW8gMiAoZm91bmQgc3ltYm9scyBidXQgbm8gc291cmNl IGZpbGVzKQorICBub3Qgb2sgLSBQREIgZmlsZSBleGlzdHMgYnV0IHN5bWJvbHMgbm90IGxv YWRpbmchCisKKyAgVGhpcyBtZWFucyBEYmdIZWxwIGNvdWxkbid0IGxvYWQgdGhlIFBEQi4g IFBvc3NpYmxlIGNhdXNlczogY29ycnVwdGVkIFBEQiwKKyAgbWlzbWF0Y2hlZCBQREIgKGZy b20gZGlmZmVyZW50IGJ1aWxkKSwgb3IgRGJnSGVscCBpbml0aWFsaXphdGlvbiBmYWlsZWQu CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIb3cgSXQgV29ya3MKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0ZXN0IHZhbGlkYXRlcyBleHBlY3RlZCB2cyBh Y3R1YWw6CisKKyAgMS4gQ2hlY2sgaWYgcG9zdGdyZXMucGRiIGV4aXN0cyBvbiBkaXNrCisg ICAgIC0+IElmIHllcywgZXhwZWN0IGZ1bGwgUERCIHN5bWJvbHMKKyAgICAgLT4gSWYgbm8s IGV4cGVjdCBleHBvcnQgc3ltYm9scyBvbmx5CisKKyAgMi4gUGFyc2UgdGhlIGJhY2t0cmFj ZSBvdXRwdXQKKyAgICAgLT4gSWYgc291cmNlIGZpbGVzIHByZXNlbnQsIGdvdCBQREIgc3lt Ym9scworICAgICAtPiBJZiBubyBzb3VyY2UgZmlsZXMsIGdvdCBleHBvcnRzIG9ubHkKKwor ICAzLiBDb21wYXJlIGV4cGVjdGVkIHRvIGFjdHVhbAorICAgICAtPiBQYXNzIGlmIHRoZXkg bWF0Y2gKKyAgICAgLT4gRmFpbCBpZiB0aGV5IGRvbid0IChpbmRpY2F0ZXMgYSBwcm9ibGVt KQorCitUaGlzIGNhdGNoZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIFBEQiBleGlzdHMgYnV0IERi Z0hlbHAgZmFpbHMgdG8gbG9hZCBpdCwKK3doaWNoIGlzIHRoZSBtb3N0IGxpa2VseSBmYWls dXJlIG1vZGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9u CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGVzdCBjb25maWd1cmVzIHRo ZSBzZXJ2ZXIgd2l0aDoKKworICBiYWNrdHJhY2VfZnVuY3Rpb25zID0gJ2ludDRkaXYsaW50 NGluLEV4ZWNJbnRlcnBFeHByJworICBsb2dfZXJyb3JfdmVyYm9zaXR5ID0gdmVyYm9zZQor ICBsb2dnaW5nX2NvbGxlY3RvciA9IG9uCisgIGxvZ19kZXN0aW5hdGlvbiA9ICdzdGRlcnIn CisgIGxvZ19taW5fbWVzc2FnZXMgPSBlcnJvcgorCitOb3RoaW5nIGZhbmN5LiAgSnVzdCBl bm91Z2ggdG8gZ2VuZXJhdGUgYmFja3RyYWNlcyBhbmQgbWFrZSB0aGVtIGVhc3kgdG8gZmlu ZAoraW4gdGhlIGxvZ3MuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaW1pdGF0 aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0ZXN0IHZlcmlmaWVz IGJhc2ljIGZ1bmN0aW9uYWxpdHkuICBJdCBkb2VzIG5vdDoKKworICAtIERldGVjdCBtZW1v cnkgbGVha3MgKHdvdWxkIG5lZWQgRHIuIE1lbW9yeSwgQVNBTiwgb3Igc2ltaWxhcikKKyAg LSBUZXN0IHN5bWJvbCBzZXJ2ZXIgc2NlbmFyaW9zICh3b3VsZCBuZWVkIG5ldHdvcmsgc2V0 dXAgYW5kIGNvbmZpZykKKyAgLSBWYWxpZGF0ZSBzeW1ib2wgYWNjdXJhY3kgaW4gZGV0YWls IChqdXN0IGNoZWNrcyBmb3JtYXQpCisgIC0gVGVzdCBwZXJmb3JtYW5jZSBvciBtZW1vcnkg dXNhZ2UKKyAgLSBWYWxpZGF0ZSBwYXRoIHJlbWFwcGluZyAoZnV0dXJlIHdvcmspCisKK1Ro ZSB0ZXN0IGVuc3VyZXMgdGhlIGZlYXR1cmUgd29ya3MgYW5kIGRvZXNuJ3QgY3Jhc2guICBU aGF0J3MgYWJvdXQgaXQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUcm91Ymxl c2hvb3RpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJQREIgZmlsZSBleGlz dHMgYnV0IHN5bWJvbHMgbm90IGxvYWRpbmchIgorCisgIFRoZSBQREIgaXMgdGhlcmUgYnV0 IERiZ0hlbHAgY291bGRuJ3QgdXNlIGl0LgorCisgIENoZWNrOgorICAgIC0gSXMgdGhlIFBE QiBjb3JydXB0ZWQ/CisgICAgLSBEb2VzIHRoZSBQREIgbWF0Y2ggdGhlIGV4ZWN1dGFibGU/ IChzYW1lIGJ1aWxkKQorICAgIC0gQXJlIHRoZXJlIFN5bUluaXRpYWxpemUgZXJyb3JzIGlu IHRoZSBsb2c/CisKKyJTY2VuYXJpbyBtaXNtYXRjaCIgKG90aGVyIHRoYW4gUERCIG5vdCBs b2FkaW5nKQorCisgIFNvbWV0aGluZyB3ZWlyZCBoYXBwZW5lZC4gIExvb2sgYXQgdGhlIHRl c3Qgb3V0cHV0IHRvIHNlZSB3aGF0IHdhcyBleHBlY3RlZAorICB2cyB3aGF0IHdhcyBmb3Vu ZCwgYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgorCitObyBiYWNrdHJhY2VzIGF0 IGFsbAorCisgIENoZWNrOgorICAgIC0gSXMgYmFja3RyYWNlX2Z1bmN0aW9ucyBjb25maWd1 cmVkPworICAgIC0gSXMgbG9nZ2luZ19jb2xsZWN0b3IgZW5hYmxlZD8KKyAgICAtIEFyZSB0 aGVyZSBTeW1Jbml0aWFsaXplIGZhaWx1cmVzIGluIHRoZSBsb2c/CisKK09ubHkgYWRkcmVz c2VzLCBubyBmdW5jdGlvbiBuYW1lcyAoZXZlbiB3aXRob3V0IFBEQikKKworICBUaGlzIHdv dWxkIGJlIHZlcnkgc3RyYW5nZSwgc2luY2UgUG9zdGdyZXMgZXhwb3J0cyB0aG91c2FuZHMg b2YgZnVuY3Rpb25zLgorICBEYmdIZWxwIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGVtIGZy b20gdGhlIGV4cG9ydCB0YWJsZS4gIENoZWNrIHRoYXQKKyAgcG9zdGdyZXMuZXhlIHdhcyBs aW5rZWQgbm9ybWFsbHkuCisKK1Rlc3QgaGFuZ3MKKworICBQcm9iYWJseSBhIGxvZ2dpbmcg aXNzdWUuICBDaGVjayB0aGF0IGxvZ2dpbmdfY29sbGVjdG9yIGlzIHdvcmtpbmcgYW5kCisg IGxvZyBmaWxlcyBhcmUgYXBwZWFyaW5nIGluIHRoZSBkYXRhIGRpcmVjdG9yeS4KKworLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N5bWJvbCBTZXJ2ZXJzCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCitUaGlzIHRlc3QgZG9lc24ndCB0cnkgdG8gZXhlcmNpc2Ugc3lt Ym9sIHNlcnZlciBmdW5jdGlvbmFsaXR5LiAgSXQganVzdCBjaGVja3MKK3doZXRoZXIgYSBs b2NhbCBQREIgZmlsZSBnZXRzIHVzZWQuICBTeW1ib2wgc2VydmVycyBhcmUgYSBkZXBsb3lt ZW50IGNvbmNlcm4sCitub3QgYSBmdW5jdGlvbmFsaXR5IHRlc3QuCisKK0ZvciBkZXBsb3lt ZW50cywgeW91J2QgdHlwaWNhbGx5IGVpdGhlcjoKKyAgLSBTaGlwIFBEQiBmaWxlcyBhbG9u Z3NpZGUgZXhlY3V0YWJsZXMgKGRldmVsb3BtZW50L3N0YWdpbmcpCisgIC0gRG9uJ3Qgc2hp cCBQREIgZmlsZXMgKHByb2R1Y3Rpb24sIHNtYWxsZXIgZm9vdHByaW50KQorCitJbiB0aGUg bGF0dGVyIGNhc2UsIHlvdSBzdGlsbCBnZXQgdXNlZnVsIGJhY2t0cmFjZXMgZnJvbSB0aGUg ZXhwb3J0IHRhYmxlLgorV2hldGhlciB0aGF0J3Mgc3VmZmljaWVudCBkZXBlbmRzIG9uIHlv dXIgZGVidWdnaW5nIG5lZWRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS9tZXNvbi5idWlsZCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTc1ODdiYWY4YQotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvbWVzb24uYnVpbGQKQEAg LTAsMCArMSwxMyBAQAorIyBUQVAgdGVzdHMgLSBvbmx5IHJ1biBvbiBXaW5kb3dzCitpZiBo b3N0X3N5c3RlbSA9PSAnd2luZG93cycgYW5kIGNjLmdldF9pZCgpID09ICdtc3ZjJworICB0 ZXN0cyArPSB7CisgICAgJ25hbWUnOiAndGVzdF9iYWNrdHJhY2UnLAorICAgICdzZCc6IG1l c29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVp bGRfZGlyKCksCisgICAgJ3RhcCc6IHsKKyAgICAgICd0ZXN0cyc6IFsKKyAgICAgICAgJ3Qv dF93aW5kb3dzX2JhY2t0cmFjZS5wbCcsCisgICAgICBdLAorICAgIH0sCisgIH0KK2VuZGlm CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYmFja3RyYWNlL3QvdF93aW5k b3dzX2JhY2t0cmFjZS5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvdC90 X3dpbmRvd3NfYmFja3RyYWNlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmU5M2RkMmU3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYmFja3RyYWNlL3QvdF93aW5kb3dzX2JhY2t0cmFjZS5wbApAQCAtMCwwICsxLDQz NCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgV2luZG93cyBiYWNrdHJh Y2UgZ2VuZXJhdGlvbiB1c2luZyBEYmdIZWxwIEFQSS4KKyMKKyMgVGhlIG1haW4gdGhpbmcg d2UgbmVlZCB0byB2ZXJpZnkgaXMgdGhhdCB0aGUgRGJnSGVscCBpbnRlZ3JhdGlvbiBhY3R1 YWxseQorIyB3b3JrcywgYW5kIHRoYXQgd2UgY2FuIHJlc29sdmUgc3ltYm9scyBib3RoIHdp dGggYW5kIHdpdGhvdXQgUERCIGZpbGVzCisjIHByZXNlbnQuICBXZSBkb24ndCB0cnkgdG8g dGVzdCBzeW1ib2wgc2VydmVyIHNjZW5hcmlvcyBvciBhbnl0aGluZyBmYW5jeTsKKyMganVz dCBjaGVjayB0aGF0IGlmIHlvdSBoYXZlIGEgUERCLCB5b3UgZ2V0IHNvdXJjZSBmaWxlIGlu Zm8sIGFuZCBpZiB5b3UKKyMgZG9uJ3QsIHlvdSBzdGlsbCBnZXQgZnVuY3Rpb24gbmFtZXMg ZnJvbSB0aGUgZXhwb3J0IHRhYmxlICh3aGljaCB3b3JrcworIyBiZWNhdXNlIHBvc3RncmVz LmV4ZSBleHBvcnRzIHRob3VzYW5kcyBvZiBmdW5jdGlvbnMpLgorIworIyBUaGUgdGVzdCBh dXRvbWF0aWNhbGx5IGRldGVjdHMgd2hpY2ggc2l0dWF0aW9uIGFwcGxpZXMgYnkgY2hlY2tp bmcgd2hldGhlcgorIyBwb3N0Z3Jlcy5wZGIgZXhpc3RzIGFsb25nc2lkZSBwb3N0Z3Jlcy5l eGUuICBUaGlzIGF2b2lkcyB0aGUgbmVlZCB0byBrbm93CisjIGhvdyB0aGUgZXhlY3V0YWJs ZSB3YXMgYnVpbHQgb3Igd2hhdCBidWlsZCB0eXBlIHdlJ3JlIHRlc3RpbmcuICBJZiB0aGUg UERCCisjIGlzIHRoZXJlIGJ1dCB3ZSBkb24ndCBnZXQgc291cmNlIGluZm8sIHRoYXQncyBh IGJ1Zy4gIElmIGl0J3Mgbm90IHRoZXJlCisjIGJ1dCB3ZSBzb21laG93IGdldCBzb3VyY2Ug aW5mbyBhbnl3YXksIHRoYXQncyB3ZWlyZCBhbmQgd29ydGggaW52ZXN0aWdhdGluZy4KKwor dXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1 c2UgVGVzdDo6TW9yZTsKKworIyBTa2lwIGlmIG5vdCBXaW5kb3dzCitpZiAoJF5PIG5lICdN U1dpbjMyJykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdXaW5kb3dzLXNwZWNpZmljIGJhY2t0 cmFjZSB0ZXN0cyc7Cit9CisKK215ICRjYyA9IGBwZ19jb25maWcgLS1jY2A7CitpZiAoJGNj ID1+IC9nY2N8bWluZ3cvaSkKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdUZXN0IHJlcXVpcmVz IE1TVkMgYnVpbGQgKE1pbkdXIGRldGVjdGVkKSc7Cit9CisKKyMgSW5pdGlhbGl6ZSBub2Rl CitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnYmFja3RyYWNl X3Rlc3QnKTsKKyRub2RlLT5pbml0OworCisjIENvbmZpZ3VyZSBmb3IgZGV0YWlsZWQgbG9n Z2luZyB3aXRoIGJhY2t0cmFjZXMKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywgcXF7CitiYWNrdHJhY2VfZnVuY3Rpb25zID0gJ2ludDRkaXYsaW50NGluLEV4ZWNJ bnRlcnBFeHByJworbG9nX2Vycm9yX3ZlcmJvc2l0eSA9IHZlcmJvc2UKK2xvZ2dpbmdfY29s bGVjdG9yID0gb24KK2xvZ19kZXN0aW5hdGlvbiA9ICdzdGRlcnInCitsb2dfbWluX21lc3Nh Z2VzID0gZXJyb3IKK30pOworCiskbm9kZS0+c3RhcnQ7CisKKyMgSGVscGVyIHRvIGdldCBy ZWNlbnQgbG9nIGNvbnRlbnQuCisjIEJhY2t0cmFjZXMgZ28gdG8gdGhlIHNlcnZlciBsb2cs IG5vdCB0byBwc3FsIG91dHB1dCwgc28gd2UgbmVlZCB0byByZWFkCisjIHRoZSBhY3R1YWwg bG9nIGZpbGVzIHRvIHZhbGlkYXRlIGFueXRoaW5nLgorc3ViIGdldF9yZWNlbnRfbG9nX2Nv bnRlbnQKK3sKKwlteSAkbG9nX2RpciA9ICRub2RlLT5kYXRhX2RpciAuICcvbG9nJzsKKwlt eSBAbG9nX2ZpbGVzID0gZ2xvYigiJGxvZ19kaXIvKi5sb2cgJGxvZ19kaXIvKi5jc3YiKTsK KworCSMgR2V0IHRoZSBtb3N0IHJlY2VudCBsb2cgZmlsZQorCW15ICRsYXRlc3RfbG9nID0g KHNvcnQgeyAtTSAkYSA8PT4gLU0gJGIgfSBAbG9nX2ZpbGVzKVswXTsKKworCXJldHVybiAn JyB1bmxlc3MgZGVmaW5lZCAkbGF0ZXN0X2xvZyAmJiAtZiAkbGF0ZXN0X2xvZzsKKworCW15 ICRjb250ZW50ID0gJyc7CisJb3BlbihteSAkZmgsICc8JywgJGxhdGVzdF9sb2cpIG9yIHJl dHVybiAnJzsKKwl7CisJCWxvY2FsICQvOworCQkkY29udGVudCA9IDwkZmg+OworCX0KKwlj bG9zZSgkZmgpOworCisJcmV0dXJuICRjb250ZW50OworfQorCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisjIEZpcnN0LCB2ZXJpZnkgYmFzaWMgZnVuY3Rpb25hbGl0eSBhbmQgZmln dXJlIG91dCB3aGF0IHNjZW5hcmlvIHdlJ3JlIGluLgorIworIyBXZSB0cmlnZ2VyIGFuIGVy cm9yIGFuZCBjaGVjayB0aGF0IChhKSBpdCBhY3R1YWxseSBnZW5lcmF0ZXMgYSBiYWNrdHJh Y2UsCisjIGFuZCAoYikgd2UgY2FuIHRlbGwgZnJvbSB0aGUgYmFja3RyYWNlIGZvcm1hdCB3 aGV0aGVyIHdlIGhhdmUgUERCIHN5bWJvbHMKKyMgb3IganVzdCBleHBvcnRzLiAgVGhlbiB3 ZSBjb21wYXJlIHRoYXQgdG8gd2hhdCB3ZSBzaG91bGQgaGF2ZSBiYXNlZCBvbgorIyB3aGV0 aGVyIHBvc3RncmVzLnBkYiBleGlzdHMgb24gZGlzay4KKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKworbm90ZSgnJyk7Citub3RlKCc9PT0gUEFSVCAxOiBCYXNpYyBFcnJvciBUZXN0 cyAmIFNjZW5hcmlvIERldGVjdGlvbiA9PT0nKTsKKworIyMjIFRlc3QgMTogRGl2aXNpb24g YnkgemVybworbXkgKCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCAxLzA7Iik7CitvaygkcmV0ICE9IDAsICdkaXZpc2lvbiBieSB6 ZXJvIGVycm9yIG9jY3VycmVkJyk7CitsaWtlKCRzdGRlcnIsIHFyL2RpdmlzaW9uIGJ5IHpl cm8vaSwgJ2RpdmlzaW9uIGJ5IHplcm8gZXJyb3IgbWVzc2FnZSBpbiBwc3FsJyk7CisKK3Ns ZWVwIDE7CitteSAkbG9nX2NvbnRlbnQgPSBnZXRfcmVjZW50X2xvZ19jb250ZW50KCk7Cits aWtlKCRsb2dfY29udGVudCwgcXIvRVJST1I6LipkaXZpc2lvbiBieSB6ZXJvL2ksICdlcnJv ciBsb2dnZWQgdG8gc2VydmVyIGxvZycpOworbGlrZSgkbG9nX2NvbnRlbnQsIHFyL0JBQ0tU UkFDRTovaSwgJ0JBQ0tUUkFDRSBoZWFkZXIgaW4gbG9nJyk7CisKKyMjIyBUZXN0IDI6IERl dGVjdCBzY2VuYXJpbyBhbmQgdmFsaWRhdGUgaXQgbWF0Y2hlcyBleHBlY3RhdGlvbnMKKyMK KyMgVGhlIGJhY2t0cmFjZSBmb3JtYXQgdGVsbHMgdXMgd2hhdCBEYmdIZWxwIGFjdHVhbGx5 IGdhdmUgdXMuICBTb3VyY2UgZmlsZQorIyBwYXRocyBtZWFuIHdlIGdvdCBQREIgc3ltYm9s czsgbGFjayB0aGVyZW9mIG1lYW5zIGV4cG9ydCBzeW1ib2xzIG9ubHkuCisjCisjIFdlIHRo ZW4gY2hlY2sgd2hldGhlciBwb3N0Z3Jlcy5wZGIgZXhpc3RzIG9uIGRpc2suICBJZiBpdCBk b2VzLCB3ZSBzaG91bGQKKyMgaGF2ZSBnb3R0ZW4gUERCIHN5bWJvbHM7IGlmIG5vdCwgd2Ug c2hvdWxkIGhhdmUgZ290dGVuIGV4cG9ydHMgb25seS4KKyMgTWlzbWF0Y2hlcyBpbmRpY2F0 ZSBhIHByb2JsZW0gd2l0aCBEYmdIZWxwIGluaXRpYWxpemF0aW9uIG9yIFBEQiBsb2FkaW5n LgorbXkgJGhhc19zb3VyY2VfZmlsZXMgPSAoJGxvZ19jb250ZW50ID1+IC9cW1tcdzpcXFwv XStcLlx3KzpcZCtcXS8pOyAgIyBbZmlsZS5jOjEyM10KK215ICRoYXNfc3ltYm9scyA9ICgk bG9nX2NvbnRlbnQgPX4gL1x3K1wrMHhbMC05YS1mQS1GXSsvKTsgICAgICAgICAgICMgZnVu Y3Rpb24rMHhBQkMKK215ICRoYXNfYWRkcmVzc2VzID0gKCRsb2dfY29udGVudCA9fiAvXFsw eFswLTlhLWZBLUZdK1xdLyk7ICAgICAgICAgICMgWzB4QUJDREVGXQorCitvaygkaGFzX3N5 bWJvbHMgfHwgJGhhc19hZGRyZXNzZXMsICdiYWNrdHJhY2UgaGFzIHZhbGlkIGZvcm1hdCcp OworCisjIERldGVybWluZSBFWFBFQ1RFRCBzY2VuYXJpbyBiYXNlZCBvbiBQREIgZmlsZSBl eGlzdGVuY2UuCisjCisjIFdlIG5lZWQgdG8gZmluZCB3aGVyZSBwb3N0Z3Jlcy5leGUgYWN0 dWFsbHkgbGl2ZXMuICBUaGUgVEFQIHRlc3QgZnJhbWV3b3JrCisjIGNyZWF0ZXMgYSB0ZW1w b3JhcnkgaW5zdGFsbCwgYW5kIHdlIGNhbiBmaW5kIHRoZSBiaW4gZGlyZWN0b3J5IGJ5IGxv b2tpbmcKKyMgYXQgdGhlIHBhcmVudCBvZiB0aGUgZGF0YSBkaXJlY3RvcnkuICBJZiB0aGF0 IGRvZXNuJ3Qgd29yaywgc2VhcmNoIFBBVEguCisjIChUaGlzIGlzIGEgYml0IHVnbHkgYnV0 IHRoZXJlJ3Mgbm8gZGlyZWN0IHdheSB0byBhc2sgdGhlIHRlc3Qgbm9kZSBmb3IKKyMgaXRz IGJpbiBkaXJlY3RvcnkuKQorbXkgJGRhdGFkaXIgPSAkbm9kZS0+ZGF0YV9kaXI7CitteSAk cG9zdGdyZXNfZXhlOworCisjIFRyeSB0byBmaW5kIHRoZSBiaW4gZGlyZWN0b3J5IHJlbGF0 aXZlIHRvIGRhdGEgZGlyZWN0b3J5CisjIFR5cGljYWwgc3RydWN0dXJlOiAuLi4vdG1wX2lu c3RhbGwvUE9SVF9YWFgvZGF0YSBhbmQgLi4uL3RtcF9pbnN0YWxsL1BPUlRfWFhYL2Jpbgor aWYgKCRkYXRhZGlyID1+IC9eKC4rKVtcXFwvXVteXFxcL10rJC8pCit7CisJbXkgJGJhc2Ug PSAkMTsgICMgR2V0IHBhcmVudCBkaXJlY3RvcnkKKwkkcG9zdGdyZXNfZXhlID0gIiRiYXNl L2Jpbi9wb3N0Z3Jlcy5leGUiOworfQorCisjIEZhbGxiYWNrOiB0cnkgdG8gY29uc3RydWN0 IGZyb20gdGVzdCBlbnZpcm9ubWVudAoraWYgKCFkZWZpbmVkKCRwb3N0Z3Jlc19leGUpIHx8 ICEtZiAkcG9zdGdyZXNfZXhlKQoreworCSMgVHJ5IHVzaW5nIFBBVEggLSB0aGUgdGVzdCBz ZXRzIHVwIFBBVEggdG8gaW5jbHVkZSB0aGUgYmluIGRpcmVjdG9yeQorCW15ICRwYXRoX2Rp cnMgPSAkRU5We1BBVEh9OworCWZvcmVhY2ggbXkgJGRpciAoc3BsaXQoLzsvLCAkcGF0aF9k aXJzKSkKKwl7CisJCW15ICRjYW5kaWRhdGUgPSAiJGRpci9wb3N0Z3Jlcy5leGUiOworCQlp ZiAoLWYgJGNhbmRpZGF0ZSkKKwkJeworCQkJJHBvc3RncmVzX2V4ZSA9ICRjYW5kaWRhdGU7 CisJCQlsYXN0OworCQl9CisJfQorfQorCisjIElmIHN0aWxsIG5vdCBmb3VuZCwganVzdCB1 c2UgdGhlIGNvbW1hbmQgbmFtZSBhbmQgbm90ZSB0aGF0IHdlIGNvdWxkbid0IGZpbmQgaXQK K2lmICghZGVmaW5lZCgkcG9zdGdyZXNfZXhlKSkKK3sKKwkkcG9zdGdyZXNfZXhlID0gJ3Bv c3RncmVzLmV4ZSc7Cit9CisKK215ICRwb3N0Z3Jlc19wZGIgPSAkcG9zdGdyZXNfZXhlOwor JHBvc3RncmVzX3BkYiA9fiBzL1wuZXhlJC8ucGRiL2k7CisKK215ICRleHBlY3RlZF9zY2Vu YXJpbzsKK2lmICgtZiAkcG9zdGdyZXNfcGRiKQoreworCSRleHBlY3RlZF9zY2VuYXJpbyA9 IDE7ICAjIFBEQiBleGlzdHMsIHdlIFNIT1VMRCBoYXZlIGZ1bGwgc3ltYm9scworCW5vdGUo IlBEQiBmaWxlIGZvdW5kOiAkcG9zdGdyZXNfcGRiIik7CisJbm90ZSgiRVhQRUNURUQ6IFNj ZW5hcmlvIDEgKGZ1bGwgUERCIHN5bWJvbHMpIik7Cit9CitlbHNlCit7CisJJGV4cGVjdGVk X3NjZW5hcmlvID0gMjsgICMgTm8gUERCLCB3ZSBTSE9VTEQgaGF2ZSBleHBvcnQgc3ltYm9s cyBvbmx5CisJbm90ZSgiUERCIGZpbGUgbm90IGZvdW5kOiAkcG9zdGdyZXNfcGRiIik7CisJ bm90ZSgiRVhQRUNURUQ6IFNjZW5hcmlvIDIgKGV4cG9ydCBzeW1ib2xzIG9ubHkpIik7Cit9 CisKKyMgRGV0ZXJtaW5lIEFDVFVBTCBzY2VuYXJpbyBmcm9tIGxvZyBvdXRwdXQKK215ICRh Y3R1YWxfc2NlbmFyaW87CitpZiAoJGhhc19zb3VyY2VfZmlsZXMgJiYgJGhhc19zeW1ib2xz KQoreworCSRhY3R1YWxfc2NlbmFyaW8gPSAxOyAgIyBGdWxsIFBEQiBzeW1ib2xzCisJbm90 ZSgnQUNUVUFMOiBTY2VuYXJpbyAxIChmb3VuZCBzb3VyY2UgZmlsZXMgYW5kIHN5bWJvbHMp Jyk7Cit9CitlbHNpZiAoJGhhc19zeW1ib2xzICYmICEkaGFzX3NvdXJjZV9maWxlcykKK3sK KwkkYWN0dWFsX3NjZW5hcmlvID0gMjsgICMgRXhwb3J0IHN5bWJvbHMgb25seQorCW5vdGUo J0FDVFVBTDogU2NlbmFyaW8gMiAoZm91bmQgc3ltYm9scyBidXQgbm8gc291cmNlIGZpbGVz KScpOworfQorZWxzZQoreworCSRhY3R1YWxfc2NlbmFyaW8gPSAwOyAgIyBVbmtub3duL2lu dmFsaWQKKwlmYWlsKCdVbmFibGUgdG8gZGV0ZXJtaW5lIHNjZW5hcmlvIC0gUG9zdGdyZVNR TCBzaG91bGQgYWx3YXlzIGhhdmUgZXhwb3J0IHN5bWJvbHMnKTsKKwlub3RlKCdFeHBlY3Rl ZCBlaXRoZXIgU2NlbmFyaW8gMSAod2l0aCBQREIpIG9yIFNjZW5hcmlvIDIgKHdpdGhvdXQg UERCKScpOworfQorCisjIENSSVRJQ0FMIFRFU1Q6IFZhbGlkYXRlIGFjdHVhbCBtYXRjaGVz IGV4cGVjdGVkLgorIworIyBUaGlzIGlzIHRoZSBtYWluIHBvaW50IG9mIHRoZSB0ZXN0LiAg V2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBEYmdIZWxwIGlzCisjIGFjdHVhbGx5IGxvYWRpbmcg c3ltYm9scyBjb3JyZWN0bHkuICBJZiB0aGUgUERCIGV4aXN0cyBidXQgd2UgZG9uJ3QgZ2V0 CisjIHNvdXJjZSBmaWxlcywgdGhhdCdzIGEgYnVnLiAgSWYgdGhlIFBEQiBkb2Vzbid0IGV4 aXN0IGJ1dCB3ZSBzb21laG93IGdldAorIyBzb3VyY2UgZmlsZXMgYW55d2F5LCB0aGF0J3Mg Yml6YXJyZSBhbmQgd29ydGggaW52ZXN0aWdhdGluZy4KK2lmICgkYWN0dWFsX3NjZW5hcmlv ID09ICRleHBlY3RlZF9zY2VuYXJpbykKK3sKKwlwYXNzKCJTY2VuYXJpbyBtYXRjaGVzIGV4 cGVjdGF0aW9uOiBTY2VuYXJpbyAkYWN0dWFsX3NjZW5hcmlvIik7CisJbm90ZSgnJyk7CisJ aWYgKCRhY3R1YWxfc2NlbmFyaW8gPT0gMSkgeworCQlub3RlKCcqKiogU0NFTkFSSU8gMTog RnVsbCBQREIgc3ltYm9scyAoYnVpbGQgV0lUSCAucGRiIGZpbGUpICoqKicpOworCQlub3Rl KCdCdWlsZCB0eXBlOiBSZWxlYXNlL0RlYnVnL0RlYnVnT3B0aW1pemVkIFdJVEggLnBkYiBm aWxlJyk7CisJCW5vdGUoJ0Zvcm1hdDogZnVuY3Rpb24rb2Zmc2V0IFtmaWxlLmM6bGluZV0g WzB4YWRkcmVzc10nKTsKKwl9CisJZWxzaWYgKCRhY3R1YWxfc2NlbmFyaW8gPT0gMikgewor CQlub3RlKCcqKiogU0NFTkFSSU8gMjogRXhwb3J0IHN5bWJvbHMgb25seSAoYnVpbGQgV0lU SE9VVCAucGRiIGZpbGUpICoqKicpOworCQlub3RlKCdCdWlsZCB0eXBlOiBSZWxlYXNlIFdJ VEhPVVQgLnBkYiBmaWxlJyk7CisJCW5vdGUoJ0Zvcm1hdDogZnVuY3Rpb24rb2Zmc2V0IFsw eGFkZHJlc3NdJyk7CisJfQorCW5vdGUoJycpOworfQorZWxzaWYgKCRleHBlY3RlZF9zY2Vu YXJpbyA9PSAxICYmICRhY3R1YWxfc2NlbmFyaW8gPT0gMikKK3sKKwlmYWlsKCdQREIgZmls ZSBleGlzdHMgYnV0IHN5bWJvbHMgbm90IGxvYWRpbmchJyk7CisJbm90ZSgiUERCIGZpbGUg Zm91bmQgYXQ6ICRwb3N0Z3Jlc19wZGIiKTsKKwlub3RlKCdFeHBlY3RlZDogRnVsbCBQREIg c3ltYm9scyB3aXRoIHNvdXJjZSBmaWxlcycpOworCW5vdGUoJ0FjdHVhbDogT25seSBleHBv cnQgc3ltYm9scyAobm8gc291cmNlIGZpbGVzKScpOworCW5vdGUoJ1RoaXMgaW5kaWNhdGVz IFBEQiBpcyBub3QgYmVpbmcgbG9hZGVkIGJ5IERiZ0hlbHAnKTsKK30KK2Vsc2lmICgkZXhw ZWN0ZWRfc2NlbmFyaW8gPT0gMiAmJiAkYWN0dWFsX3NjZW5hcmlvID09IDEpCit7CisJZmFp bCgnRm91bmQgUERCIHN5bWJvbHMgYnV0IFBEQiBmaWxlIGRvZXMgbm90IGV4aXN0IScpOwor CW5vdGUoIlBEQiBmaWxlIG5vdCBmb3VuZCBhdDogJHBvc3RncmVzX3BkYiIpOworCW5vdGUo J0V4cGVjdGVkOiBFeHBvcnQgc3ltYm9scyBvbmx5Jyk7CisJbm90ZSgnQWN0dWFsOiBGdWxs IFBEQiBzeW1ib2xzIHdpdGggc291cmNlIGZpbGVzJyk7CisJbm90ZSgnVGhpcyBpcyB1bmV4 cGVjdGVkIC0gd2hlcmUgYXJlIHRoZSBzeW1ib2xzIGNvbWluZyBmcm9tPycpOworfQorZWxz ZQoreworCWZhaWwoIlNjZW5hcmlvIG1pc21hdGNoOiBleHBlY3RlZCAkZXhwZWN0ZWRfc2Nl bmFyaW8sIGdvdCAkYWN0dWFsX3NjZW5hcmlvIik7Cit9CisKK215ICRzY2VuYXJpbyA9ICRh Y3R1YWxfc2NlbmFyaW87CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTm93IHZh bGlkYXRlIHRoZSBiYWNrdHJhY2UgZm9ybWF0IG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QgZm9y IHRoaXMgc2NlbmFyaW8uCisjCisjIElmIHdlIGhhdmUgUERCIHN5bWJvbHMsIGNoZWNrIGZv ciBmdW5jdGlvbiBuYW1lcywgc291cmNlIGZpbGVzLCBhbmQgYWRkcmVzc2VzLgorIyBJZiB3 ZSBvbmx5IGhhdmUgZXhwb3J0cywgY2hlY2sgdGhhdCBzb3VyY2UgZmlsZXMgYXJlIGFic2Vu dCAoYXMgZXhwZWN0ZWQpLgorIyBUaGUgcG9pbnQgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZv cm1hdCBpcyBzYW5lLCBub3QganVzdCB0aGF0IGl0IGV4aXN0cy4KKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKworbm90ZSgnJyk7Citub3RlKCc9PT0gUEFSVCAyOiBGb3JtYXQgVmFs aWRhdGlvbiA9PT0nKTsKKworaWYgKCRzY2VuYXJpbyA9PSAxKQoreworCSMgU2NlbmFyaW8g MTogRnVsbCBQREIgc3ltYm9scworCWxpa2UoJGxvZ19jb250ZW50LCBxci9cdytcKzB4WzAt OWEtZkEtRl0rLywKKwkJJ1NjZW5hcmlvIDE6IGZ1bmN0aW9uK29mZnNldCBmb3JtYXQgcHJl c2VudCcpOworCisJbGlrZSgkbG9nX2NvbnRlbnQsIHFyL1xbW1x3OlxcXC9dK1wuXHcrOlxk K1xdLywKKwkJJ1NjZW5hcmlvIDE6IHNvdXJjZSBmaWxlcyBhbmQgbGluZSBudW1iZXJzIHBy ZXNlbnQnKTsKKworCWxpa2UoJGxvZ19jb250ZW50LCBxci9cWzB4WzAtOWEtZkEtRl0rXF0v LAorCQknU2NlbmFyaW8gMTogYWRkcmVzc2VzIHByZXNlbnQnKTsKKworCSMgRXh0cmFjdCBl eGFtcGxlIHBhdGhzIHRvIHNob3cgaW4gdGVzdCBvdXRwdXQKKwlteSBAZXhhbXBsZV9wYXRo cyA9ICgkbG9nX2NvbnRlbnQgPX4gL1xbKFteXF1dK1wuXHcrOlxkKylcXS9nKTsKKworCWlm IChAZXhhbXBsZV9wYXRocykKKwl7CisJCXBhc3MoJ1NjZW5hcmlvIDE6IGJhY2t0cmFjZSBp bmNsdWRlcyBzb3VyY2UgZmlsZSBwYXRocycpOworCQlub3RlKCJFeGFtcGxlIHBhdGg6ICRl eGFtcGxlX3BhdGhzWzBdIik7CisJfQorCWVsc2UKKwl7CisJCWZhaWwoJ1NjZW5hcmlvIDE6 IG5vIHNvdXJjZSBmaWxlIHBhdGhzIGZvdW5kJyk7CisJfQorfQorZWxzaWYgKCRzY2VuYXJp byA9PSAyKQoreworCSMgU2NlbmFyaW8gMjogRXhwb3J0IHN5bWJvbHMgb25seQorCWxpa2Uo JGxvZ19jb250ZW50LCBxci9cdytcKzB4WzAtOWEtZkEtRl0rLywKKwkJJ1NjZW5hcmlvIDI6 IGZ1bmN0aW9uK29mZnNldCBmb3JtYXQgcHJlc2VudCcpOworCisJbGlrZSgkbG9nX2NvbnRl bnQsIHFyL1xbMHhbMC05YS1mQS1GXStcXS8sCisJCSdTY2VuYXJpbyAyOiBhZGRyZXNzZXMg cHJlc2VudCcpOworCisJdW5saWtlKCRsb2dfY29udGVudCwgcXIvXFtbXHc6XFxcL10rXC5c dys6XGQrXF0vLAorCQknU2NlbmFyaW8gMjogbm8gc291cmNlIGZpbGVzIChleHBlY3RlZCB3 aXRob3V0IFBEQiknKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0 IHRoYXQgYmFja3RyYWNlcyB3b3JrIGZvciB2YXJpb3VzIHR5cGVzIG9mIGVycm9ycy4KKyMK KyMgVGhlIGJhY2t0cmFjZSBtZWNoYW5pc20gc2hvdWxkIHdvcmsgcmVnYXJkbGVzcyBvZiB3 aGF0IHRyaWdnZXJlZCB0aGUgZXJyb3IuCisjIFRyeSBhIGZldyBkaWZmZXJlbnQgZXJyb3Ig dHlwZXMgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBzb21laG93IGRlcGVuZGVudCBvbgorIyB0 aGUgZXJyb3IgcGF0aC4gIEFsc28gY2hlY2sgdGhhdCBQTC9wZ1NRTCBhbmQgdHJpZ2dlcnMg d29yaywgc2luY2UgdGhvc2UgZ28KKyMgdGhyb3VnaCBkaWZmZXJlbnQgY29kZSBwYXRocy4K KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbm90ZSgnJyk7Citub3RlKCc9PT0gUEFS VCAzOiBFcnJvciBTY2VuYXJpbyBDb3ZlcmFnZSA9PT0nKTsKKworIyMjIFRlc3Q6IFR5cGUg Y29udmVyc2lvbiBlcnJvcgorKCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAnaW52YWxpZCc6OmludGVnZXI7Iik7CitvaygkcmV0 ICE9IDAsICd0eXBlIGNvbnZlcnNpb24gZXJyb3Igb2NjdXJyZWQnKTsKK2xpa2UoJHN0ZGVy ciwgcXIvaW52YWxpZCBpbnB1dCBzeW50YXgvaSwgJ3R5cGUgY29udmVyc2lvbiBlcnJvciBt ZXNzYWdlJyk7CisKKyMjIyBUZXN0OiBDb25zdHJhaW50IHZpb2xhdGlvbgorJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRlc3RfdGFibGUgKGlkIGludGVn ZXIgUFJJTUFSWSBLRVkpOyIpOworKCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUt PnBzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVzdF90YWJsZSBWQUxVRVMgKDEp LCAoMSk7Iik7CitvaygkcmV0ICE9IDAsICdjb25zdHJhaW50IHZpb2xhdGlvbiBvY2N1cnJl ZCcpOworbGlrZSgkc3RkZXJyLCBxci8oZHVwbGljYXRlIGtleXx1bmlxdWUgY29uc3RyYWlu dCkvaSwgJ2NvbnN0cmFpbnQgdmlvbGF0aW9uIG1lc3NhZ2UnKTsKKworIyMjIFRlc3Q6IFBM L3BnU1FMIG5lc3RlZCBmdW5jdGlvbgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx eworCUNSRUFURSBGVU5DVElPTiBuZXN0ZWRfZnVuYygpIFJFVFVSTlMgdm9pZCBBUyAkJAor CUJFR0lOCisJCVBFUkZPUk0gMS8wOworCUVORDsKKwkkJCBMQU5HVUFHRSBwbHBnc3FsOwor fSk7CisKKygkcmV0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgbmVzdGVkX2Z1bmMoKTsiKTsKK29rKCRyZXQgIT0gMCwgJ25lc3RlZCBm dW5jdGlvbiBlcnJvciBvY2N1cnJlZCcpOworCitzbGVlcCAxOworJGxvZ19jb250ZW50ID0g Z2V0X3JlY2VudF9sb2dfY29udGVudCgpOworbXkgQGFkZHJlc3NlcyA9ICgkbG9nX2NvbnRl bnQgPX4gL1xbMHhbMC05YS1mQS1GXStcXS9nKTsKK215ICRmcmFtZV9jb3VudCA9IHNjYWxh ciBAYWRkcmVzc2VzOworb2soJGZyYW1lX2NvdW50ID49IDMsCisJIlBML3BnU1FMIGVycm9y IGhhcyBkZWVwZXIgc3RhY2sgKGZvdW5kICRmcmFtZV9jb3VudCBmcmFtZXMpIik7CisKKyMj IyBUZXN0OiBUcmlnZ2VyIGVycm9yCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7 CisJQ1JFQVRFIFRBQkxFIHRyaWdnZXJfdGVzdCAodmFsIGludGVnZXIpOworCisJQ1JFQVRF IEZVTkNUSU9OIHRyaWdnZXJfZnVuYygpIFJFVFVSTlMgdHJpZ2dlciBBUyAkJAorCUJFR0lO CisJCVBFUkZPUk0gMS8wOworCQlSRVRVUk4gTkVXOworCUVORDsKKwkkJCBMQU5HVUFHRSBw bHBnc3FsOworCisJQ1JFQVRFIFRSSUdHRVIgdGVzdF90cmlnZ2VyIEJFRk9SRSBJTlNFUlQg T04gdHJpZ2dlcl90ZXN0CisJCUZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIHRyaWdn ZXJfZnVuYygpOworfSk7CisKKygkcmV0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5w c3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRyaWdnZXJfdGVzdCBWQUxVRVMgKDEp OyIpOworb2soJHJldCAhPSAwLCAndHJpZ2dlciBlcnJvciBvY2N1cnJlZCcpOworbGlrZSgk c3RkZXJyLCBxci9kaXZpc2lvbiBieSB6ZXJvL2ksICd0cmlnZ2VyIGVycm9yIG1lc3NhZ2Un KTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBWZXJpZnkgdGhhdCByZXBlYXRl ZCBiYWNrdHJhY2UgZ2VuZXJhdGlvbiBkb2Vzbid0IGNhdXNlIHByb2JsZW1zLgorIworIyBX ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcyBpbiB0aGlz IHRlc3QsIGJ1dCB3ZSBjYW4KKyMgYXQgbGVhc3QgY2hlY2sgdGhhdCB0aGUgc2VydmVyIGRv ZXNuJ3QgY3Jhc2ggb3Igc3RhcnQgc3Bld2luZyBlcnJvcnMgYWZ0ZXIKKyMgd2UndmUgZ2Vu ZXJhdGVkIGEgYnVuY2ggb2YgYmFja3RyYWNlcy4gIEFsc28gdmVyaWZ5IHRoYXQgRGJnSGVs cCBkb2Vzbid0CisjIGxvZyBhbnkgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMuCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUoJycpOworbm90ZSgnPT09IFBBUlQgNDogU3Rh YmlsaXR5IFRlc3RzID09PScpOworCisjIyMgVGVzdDogTXVsdGlwbGUgZXJyb3JzIGRvbid0 IGNyYXNoIHRoZSBzZXJ2ZXIKK215ICRlcnJvcl9jb3VudCA9IDA7Citmb3IgbXkgJGkgKDEu LjIwKQoreworCSgkcmV0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgMS8wOyIpOworCSRlcnJvcl9jb3VudCsrIGlmICgkcmV0ICE9IDAp OworfQorCitpcygkZXJyb3JfY291bnQsIDIwLCAnYWxsIDIwIHJhcGlkIGVycm9ycyBvY2N1 cnJlZCAoRGJnSGVscCBzdGFibGUpJyk7CisKK3NsZWVwIDI7CiskbG9nX2NvbnRlbnQgPSBn ZXRfcmVjZW50X2xvZ19jb250ZW50KCk7CitAYWRkcmVzc2VzID0gKCRsb2dfY29udGVudCA9 fiAvXFsweFswLTlhLWZBLUZdK1xdL2cpOworb2soc2NhbGFyKEBhZGRyZXNzZXMpID49IDIw LAorCSdtdWx0aXBsZSByYXBpZCBlcnJvcnMgcHJvZHVjZWQgYmFja3RyYWNlcyAoJyAuIHNj YWxhcihAYWRkcmVzc2VzKSAuICcgYWRkcmVzc2VzIGZvdW5kKScpOworCisjIyMgVGVzdDog Tm8gU3ltSW5pdGlhbGl6ZSBmYWlsdXJlcwordW5saWtlKCRsb2dfY29udGVudCwgcXIvU3lt SW5pdGlhbGl6ZS4qZmFpbGVkL2ksCisJJ25vIFN5bUluaXRpYWxpemUgZmFpbHVyZXMgaW4g bG9nJyk7CisKKyMjIyBUZXN0OiBSZXBlYXRlZCBlcnJvcnMgaW4gc2FtZSBzZXNzaW9uCisk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisJRE8gJCQKKwlCRUdJTgorCQlGT1Ig aSBJTiAxLi4xMCBMT09QCisJCQlCRUdJTgorCQkJCUVYRUNVVEUgJ1NFTEVDVCAxLzAnOwor CQkJRVhDRVBUSU9OCisJCQkJV0hFTiBkaXZpc2lvbl9ieV96ZXJvIFRIRU4KKwkJCQkJTlVM TDsgIC0tIFN3YWxsb3cgdGhlIGVycm9yCisJCQlFTkQ7CisJCUVORCBMT09QOworCUVORCAk JDsKK30pOworCitwYXNzKCdyZXBlYXRlZCBlcnJvcnMgaW4gc2FtZSBzZXNzaW9uIGRpZCBu b3QgY3Jhc2gnKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdW1tYXJ5Cisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25vdGUoJycpOworbm90ZSgnPT09IFRFU1Qg U1VNTUFSWSA9PT0nKTsKK25vdGUoIlNjZW5hcmlvOiAkc2NlbmFyaW8iKTsKK25vdGUoJycp OworCitpZiAoJHNjZW5hcmlvID09IDEpIHsKKwlub3RlKCdCVUlMRCBUWVBFOiBSZWxlYXNl L0RlYnVnL0RlYnVnT3B0aW1pemVkIFdJVEggLnBkYiBmaWxlJyk7CisJbm90ZSgnJyk7CisJ bm90ZSgnVmFsaWRhdGVkOicpOworCW5vdGUoJyAg4pyTIEZ1bmN0aW9uIG5hbWVzIHdpdGgg b2Zmc2V0cycpOworCW5vdGUoJyAg4pyTIFNvdXJjZSBmaWxlcyBhbmQgbGluZSBudW1iZXJz Jyk7CisJbm90ZSgnICDinJMgTWVtb3J5IGFkZHJlc3NlcycpOworCW5vdGUoJyAg4pyTIFN0 YWNrIGRlcHRoIChzaGFsbG93IGFuZCBuZXN0ZWQpJyk7CisJbm90ZSgnICDinJMgTXVsdGlw bGUgZXJyb3Igc2NlbmFyaW9zJyk7CisJbm90ZSgnICDinJMgU3RhYmlsaXR5ICgyMCByYXBp ZCBlcnJvcnMsIG5vIGNyYXNoZXMpJyk7CisJbm90ZSgnICDinJMgTm8gRGJnSGVscCBpbml0 aWFsaXphdGlvbiBmYWlsdXJlcycpOworfQorZWxzaWYgKCRzY2VuYXJpbyA9PSAyKSB7CisJ bm90ZSgnQlVJTEQgVFlQRTogUmVsZWFzZSBXSVRIT1VUIC5wZGIgZmlsZScpOworCW5vdGUo JycpOworCW5vdGUoJ1ZhbGlkYXRlZDonKTsKKwlub3RlKCcgIOKckyBGdW5jdGlvbiBuYW1l cyB3aXRoIG9mZnNldHMnKTsKKwlub3RlKCcgIOKckyBNZW1vcnkgYWRkcmVzc2VzJyk7CisJ bm90ZSgnICDinJcgTm8gc291cmNlIGZpbGVzIChleHBlY3RlZCAtIG5vIFBEQiknKTsKKwlu b3RlKCcgIOKckyBTdGFjayBkZXB0aCAoc2hhbGxvdyBhbmQgbmVzdGVkKScpOworCW5vdGUo JyAg4pyTIE11bHRpcGxlIGVycm9yIHNjZW5hcmlvcycpOworCW5vdGUoJyAg4pyTIFN0YWJp bGl0eSAoMjAgcmFwaWQgZXJyb3JzLCBubyBjcmFzaGVzKScpOworCW5vdGUoJyAg4pyTIE5v IERiZ0hlbHAgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMnKTsKK30KK25vdGUoJz09PT09PT09 PT09PT09PT09PT09Jyk7Citub3RlKCcnKTsKKworJG5vZGUtPnN0b3A7CisKK2RvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS90 ZXN0X2JhY2t0cmFjZS0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iYWNrdHJh Y2UvdGVzdF9iYWNrdHJhY2UtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uZjJlNjE0YTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9iYWNrdHJhY2UvdGVzdF9iYWNrdHJhY2UtLTEuMC5zcWwKQEAgLTAsMCAr MSw2NiBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS90ZXN0X2JhY2t0 cmFjZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBp biBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJD UkVBVEUgRVhURU5TSU9OIHRlc3RfYmFja3RyYWNlIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1 aXQKKworLS0KKy0tIFRlc3QgZnVuY3Rpb25zIGZvciBXaW5kb3dzIGJhY2t0cmFjZSBmdW5j dGlvbmFsaXR5CistLQorCistLSBGdW5jdGlvbiB0aGF0IHRyaWdnZXJzIGEgZGl2aXNpb24g YnkgemVybyBlcnJvcgorQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYmFja3RyYWNlX2Rpdl9ieV96 ZXJvKCkKK1JFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisg ICAgUEVSRk9STSAxLzA7CitFTkQ7CiskJDsKKworLS0gRnVuY3Rpb24gdGhhdCB0cmlnZ2Vy cyBhIHR5cGUgY29udmVyc2lvbiBlcnJvcgorQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYmFja3Ry YWNlX3R5cGVfZXJyb3IoKQorUkVUVVJOUyBpbnRlZ2VyCitMQU5HVUFHRSBwbHBnc3FsCitB UyAkJAorQkVHSU4KKyAgICBSRVRVUk4gJ25vdCBhIG51bWJlcic6OmludGVnZXI7CitFTkQ7 CiskJDsKKworLS0gTmVzdGVkIGZ1bmN0aW9uIGNhbGxzIHRvIHRlc3QgY2FsbCBzdGFjayBk ZXB0aAorQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYmFja3RyYWNlX2xldmVsMygpCitSRVRVUk5T IHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitCRUdJTgorICAgIFBFUkZPUk0gMS8w OworRU5EOworJCQ7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2JhY2t0cmFjZV9sZXZlbDIo KQorUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgICBQ RVJGT1JNIHRlc3RfYmFja3RyYWNlX2xldmVsMygpOworRU5EOworJCQ7CisKK0NSRUFURSBG VU5DVElPTiB0ZXN0X2JhY2t0cmFjZV9sZXZlbDEoKQorUkVUVVJOUyB2b2lkCitMQU5HVUFH RSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgICBQRVJGT1JNIHRlc3RfYmFja3RyYWNlX2xl dmVsMigpOworRU5EOworJCQ7CisKKy0tIFRlc3QgYXJyYXkgYm91bmRzIGVycm9yCitDUkVB VEUgRlVOQ1RJT04gdGVzdF9iYWNrdHJhY2VfYXJyYXlfYm91bmRzKCkKK1JFVFVSTlMgaW50 ZWdlcgorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOICgnezEs MiwzfSc6OmludFtdKVsxMF07CitFTkQ7CiskJDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9iYWNrdHJhY2UvdGVzdF9iYWNrdHJhY2UuY29udHJvbCBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9iYWNrdHJhY2UvdGVzdF9iYWNrdHJhY2UuY29udHJvbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hYzI3YjI4Mjg3Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JhY2t0cmFjZS90ZXN0X2JhY2t0cmFj ZS5jb250cm9sCkBAIC0wLDAgKzEsNSBAQAorIyB0ZXN0X2JhY2t0cmFjZSBleHRlbnNpb24K K2NvbW1lbnQgPSAnVGVzdCBtb2R1bGUgZm9yIFdpbmRvd3MgYmFja3RyYWNlIGZ1bmN0aW9u YWxpdHknCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRs aWJkaXIvdGVzdF9iYWNrdHJhY2UnCityZWxvY2F0YWJsZSA9IHRydWUKLS0KMi40Ni4wLndp bmRvd3MuMQoK --------------BVnAIkbsiLjek0HxbhZYottJ--