Received: (at 9492) by debbugs.gnu.org; 21 Oct 2024 15:24:02 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Oct 21 11:24:02 2024 Received: from localhost ([127.0.0.1]:52940 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1t2uGH-0007Dl-Jw for submit <at> debbugs.gnu.org; Mon, 21 Oct 2024 11:24:02 -0400 Received: from mail-wm1-f50.google.com ([209.85.128.50]:41155) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <ileanadumitrescu95@HIDDEN>) id 1t2uGF-0007DR-4B for 9492 <at> debbugs.gnu.org; Mon, 21 Oct 2024 11:24:00 -0400 Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4315549c4d5so7620285e9.0 for <9492 <at> debbugs.gnu.org>; Mon, 21 Oct 2024 08:23:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729524146; x=1730128946; darn=debbugs.gnu.org; h=in-reply-to:autocrypt:from:content-language:references:cc:to :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=NXmBvj5HtCGWKqv3jG470c+CYpK4hNU/dwb3hEQ9Wig=; b=YLb03qwUSekWgPgm06vfzXOWMogT++XDoqNAdCgfI9WWAA4BzWMgXmRb3cNObJf4cX xyOzoybKfNkttp+rPzZAvcrzvxpgcNmXdJss/JBN0BMu28wznG7gvic7X1a2dC4kH8HX aSN8eA9yVLWc5c+x3NYOGdv6oHxoCVRUWER2L7JhoffQzXh55iP6AEHNABqtHfCOCrdh 3XPdFzFbc8am4hxAn1tvalO334fKqXO2TEzurwYVNNiLuklhmQ0PM7H1aBj/a1dIsAZ5 2lozUG5+7W7fkphepSd5f9MqCgEho4rKBgDV1Knl4jDb9i880tU+bvAUAs+6PVjQG4r6 neaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729524146; x=1730128946; h=in-reply-to:autocrypt: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=NXmBvj5HtCGWKqv3jG470c+CYpK4hNU/dwb3hEQ9Wig=; b=Q6+qhm11HZWmMDUMMSCtgTN55rCsKp5LyJs0aLgg5kTsbIKNjn9aJdgxsDaHFv3aX3 lclGOsUnPVWZxbnyHZlysThLJvxBEtRTz2gCGDiCmQzJqxbuVSd2Cd0A6GWjGj3iLQvs HmPA6MIMSRCj0NWACNVVBGaARm6Ydxmlb5U/0iOtDyhMEQGkWxUgYrnp7i/x9I5Zvtnv FlmAUDjSzGbdinQslDTv1SR/aBj/+GL5tP4qh8P5OJUfEKeNismwVnE1Ba6eDVHaffs0 9jMEBN61LuB9lvieVQh+FmQVwGFG0J+R1/rJHpmnQfDp2bgK9nRK/uCr9uaijMn0obuJ qC3Q== X-Gm-Message-State: AOJu0YyharCRvbi/sGVqe4+V2fRCvtBiK0fHt/a+Xg9ILd6m91LUxKfV oSnOVpPdOQGLDIAUtrMBv6IvLSQ/nG2joY17VAnxwjIVtsZheHRU X-Google-Smtp-Source: AGHT+IES03h6MlSGPjvbEpvSVQVGY5Ngahiyl+5hu3OM8Dz5cjvr/lNBjndTdBeRoVGgLbirsWYH2Q== X-Received: by 2002:a05:6000:2a1:b0:378:955f:d244 with SMTP id ffacd0b85a97d-37eab73feecmr3171495f8f.14.1729524144746; Mon, 21 Oct 2024 08:22:24 -0700 (PDT) Received: from [192.168.254.128] ([95.214.217.104]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5cb66a653dbsm2026393a12.28.2024.10.21.08.22.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 21 Oct 2024 08:22:24 -0700 (PDT) Message-ID: <1b16dbe9-0cd8-416c-9392-69ae54824685@HIDDEN> Date: Mon, 21 Oct 2024 18:22:20 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#9492: cannot override CC when using system copy of libtool ("The wrong-gcc problem") To: Maxim Cournoyer <maxim.cournoyer@HIDDEN> References: <CAFRJ5K1hD4bQd-d+WRUa7eXHVtV6khvtfqcwGFTJ83S04kuc7Q@HIDDEN> <20120513041429.GA24606@burratino> <87wmicgl0h.fsf_-_@HIDDEN> <2f633f37-e422-49d0-b6c3-bae590dc7e23@HIDDEN> <87a5f0chzs.fsf@HIDDEN> Content-Language: en-US From: Ileana Dumitrescu <ileanadumitrescu95@HIDDEN> Autocrypt: addr=ileanadumitrescu95@HIDDEN; keydata= xsFNBGFMu5ABEACpFrPCKpfsTSl4svqi91Hsf8gGtdKwndgXqMPJNqBXEJCCwiiUPnS68wNW ae54So04zVAcXewFdM36GypUGep5bhdgvbVKaDCrhNRdAoZ0VAywgU9CDCAa3v8eXUSrlGon k/ygjLIMnkOSjIMls4+z0FOpvsd1IcgcBDU5S6DSAF/Sb8w9bF2yD7f5RaLN6++EJEO2Bp+8 v4qCJEUGzi5QJKXHVUTGiTirx50eLIkw0HseLVOiJoU0NRRgzK/q04+X/NuOAPnZm5K3GOJU mKmG7M2tdMhhGT7UjF3XiI0MwydGIrPU1T1OdPBnXv6ajRYzLgIZl0GsGeFo5qFaFmRtNO7n CGi/5XtivM1WvbqXIQmsAmpm8N/uEcPcuP+0+7s1o0JC+c4nbHlQyvUFSZVgbZQ+mSn6GXRP NfL7AeDSINXXvXDv5vkHN+FbFggx5nWg8J5a33hxbnZoR/qTfDBQHF3mJMF3lesXibN+oLvw OVtlIffKc4jwjLKL40644eQfbhHjCE1AXGQjUGCE5vAkCxEqWH2nQbXIedijQD/5mufaCQX3 Rl314FBfyV1b9rIHxJYRLXHT83+om7y5ncYI5sdoY7/g/Ggmi0PuuUicax/ejOx4nNtDgDxl hCgOVm6qpmX9kyEZj0+vAodQjMrx3JKgojBdbusl4C5bWIgeRwARAQABzTBJbGVhbmEgRHVt aXRyZXNjdSA8aWxlYW5hZHVtaXRyZXNjdTk1QGdtYWlsLmNvbT7CwZQEEwEKAD4CGwMFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AWIQT6Jsp4S+GIkn8iuZ9lcOoBFG9zVAUCZAiLZwUJCF9q VwAKCRBlcOoBFG9zVGShEACQkxNBRGws9AszRtKbnCcK5/B7TbB8/AsRF+Qbr6D66We5Nlkj Lp2ZuHpNB0u3zzlXUPqE851txphNZTAM4L0EgmVmFwZ1402HMlbTe+dIjoeQnituxQE2UT4P WwnhqREPX7M/W2Q67Xvq5b3rpCWma3wtnFCLu9CjGMcoRD+kmVDK/Kld63E55qp1RbPsGCLD 3p1Qn7eW3x+sgK9iH+0Oftu/r61O++d1zDzbnOgmvlEk7yWg2+QIDQpqzONJ3a3ye//Sahfa zo4XwIDimDC4L/LZk40HLgOHMvN9mtRCMJcJmqQ7XWe99qtaBMGxKBq5n8ZkCPVA86uEyAbJ LUdniS0zwDbpcE0nOSHMYKsW3R+D9bJkEDxNlKfgIqiCgrXXjdu9fREGxUm3jbJlD6nqKE/y bWtJ0BES2DCmMipprm5+cSWWiQ4rgaJBfY2YxwNMF1I9QXXKAo0xWvvjFB/jbpX7nicYx+rt RV4mvxu6EyaZSCfAKjMoPqdLT+1kP4UGzV7CxH//QiPziWgyQyUr5o+vhW5HAbnxGLDnuL+6 Wmb5cGXDr73R7Rs7PfBALaScP6+5MrJ9hNTt6uwwJ70VdfU9o3UEInGOfdnBbWc5yNFktuO8 yUKjgLjDR1RXqils+ALUa2I5ifjsf2dlQhmCsAq9PktN9N++vk+TdzBcNM7BTQRhTLuQARAA xH2RgDZFA5q9G2wfKzsig/Dz/Kx9H9MGLayJEs5MNIJv17dG+mMmgjRk4O0QwhGzmgD8nBe1 AJXqE6hm6K2MpXajb/B9/vIFNgNQ9KIaTtIehkG2rwXwPDLfvgPYLRw+fH0gAVbS1mDDRro7 RJr8pl7m8mi63UEZQxkqF3IZ1pD7uyfCcPl0V3b5dWwo5Uky7hJPEFvj8zJaBS6YdnZ8WteI xIR8eHMPwi2WQLJwn8LUqG2ODMIMkpQo71f2dCopCSq1UU2BY/JMagbpUXek3FIjNIKp9KUj 3FFkUFvlqKif+kB9M6P+llBVY0nDCidK617V6NJwaJUZzRgGimiuW2Qx9QwWHYcBbiaK6EHa ew5gkVwPlMJJJhwwFAlPfYT0ThsVl/kpaOjptyDbRWxyGLac+nLXvVai6ElJM7797ZWbwdZh a7TYUA6Y0JPr1ciVcFpipslXkOKzq0GjPPSuQ9+Q57LGWoJX0Z1rravAS7uzFhNbNMgQebnJ 5efvMRO8DCDUWiIn22VBR3seL3lBS8sf0Pj+lRCBHJ8usJf/MkfWZiAuQyQ1/EnDao/3wPD0 prOBgx096bFMWnuA+YfBYcnb6SASpYwYGTqZU/vp6M1ORWnvxdXvEYEfeq+RabaqvZ4MN0eD 75X7K+nbhWhlWuOjVd59E57UN018gdC2DWMAEQEAAcLBfAQYAQoAJgIbDBYhBPomynhL4YiS fyK5n2Vw6gEUb3NUBQJkCIuUBQkIX2qEAAoJEGVw6gEUb3NU6qMP/R80Q4G/CVLsrXMEWhie PIHmPYfLL1guvLNi/K3YocMFSloU6QjyP2Lsceh5Sz5NB/+xr6p6nGpmc5FEGxr20SoXyEfJ CNWXNR+4znkSzkRH1FJ+QOYdlZCFaGGaQzTkji47heoW9m9to/dGv8fKa34VLo7wzvD3FyYd F27lSGNqSiIPNFS8kGS5m0fVDHP2jgFjiWjcXRUG78KzH4Yansse5KTPj2dm8zb+o30jfd8d M1ccd3FavQ74kjrbTubQWsStTNMBm9ML7vSoirs5P3d8NNLHSMDtlZfzNfWKkxthZY1N86sM OoecaOl8rfBIKrXMkWJXRDoz6o8Xrd/+JeByDBGuM5jAMT0mQ5ckBwFN5Q7ket0c/YomKZQ3 ul3V44eS8hmizeWNM2r4x3DVJa+4tsXeTLSWWX79z276SqSxQveKfnJh0ak8q0tqJAc6iflv UjIIW5c7aSfcul+u6/8S0T74nEHfBhpBjQm9BEumt1sSfXGYO77LXemuYDWpe2v0BO0j5hBs sYnJ/hUDXgy2+bMJXzohJqYEjSs9gdTDskD6x9Z1sTHutikUw/g4gxxRThH2l4YhBb6kuwct 9xzecT2/PVzXkjnt+gwQ6PHdyTWj0//LZCKJVquluG3myyCMALInBkJ0dzwXKH0VHe8PYt18 tEGGBkKUVsxBXBBe In-Reply-To: <87a5f0chzs.fsf@HIDDEN> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------Ce3VMQcdWer7U9MbCWmXK40r" X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 9492 Cc: 9492 <at> debbugs.gnu.org, Jonathan Nieder <jrnieder@HIDDEN>, =?UTF-8?B?0KDRg9Cx0LXQvSDQkdGD0YfQsNGG0LrQuNC5?= <ruben.buchatskiy@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.7 (/) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------Ce3VMQcdWer7U9MbCWmXK40r Content-Type: multipart/mixed; boundary="------------ajn02eZESSqP7i1ETRZTvg7t"; protected-headers="v1" From: Ileana Dumitrescu <ileanadumitrescu95@HIDDEN> To: Maxim Cournoyer <maxim.cournoyer@HIDDEN> Cc: 9492 <at> debbugs.gnu.org, Jonathan Nieder <jrnieder@HIDDEN>, =?UTF-8?B?0KDRg9Cx0LXQvSDQkdGD0YfQsNGG0LrQuNC5?= <ruben.buchatskiy@HIDDEN> Message-ID: <1b16dbe9-0cd8-416c-9392-69ae54824685@HIDDEN> Subject: Re: bug#9492: cannot override CC when using system copy of libtool ("The wrong-gcc problem") References: <CAFRJ5K1hD4bQd-d+WRUa7eXHVtV6khvtfqcwGFTJ83S04kuc7Q@HIDDEN> <20120513041429.GA24606@burratino> <87wmicgl0h.fsf_-_@HIDDEN> <2f633f37-e422-49d0-b6c3-bae590dc7e23@HIDDEN> <87a5f0chzs.fsf@HIDDEN> In-Reply-To: <87a5f0chzs.fsf@HIDDEN> --------------ajn02eZESSqP7i1ETRZTvg7t Content-Type: multipart/mixed; boundary="------------0i0KAP9WzxsWovtgWGdBSYbu" --------------0i0KAP9WzxsWovtgWGdBSYbu Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 T24gMTkvMTAvMjAyNCAxNjo1NywgTWF4aW0gQ291cm5veWVyIHdyb3RlOg0KPiBIZWxsbyBJ bGVhbmEsDQo+IA0KPiBJbGVhbmEgRHVtaXRyZXNjdSA8ZW5kb21ldHJpb3Npczk1QGdtYWls LmNvbT4gd3JpdGVzOg0KPiANCj4+IE9uIDEzLzEwLzIwMjQgMTc6MDEsIE1heGltIENvdXJu b3llciB3cm90ZToNCj4+PiBIZWxsbywNCj4+PiBKdXN0IGEgaGVhZHMtdXAgdGhhdCB0aGlz IG9sZCBidWcgaXMgc3RpbGwgcmVsZXZhbnQuICBJdCBtZWFucyB0aGF0DQo+Pj4gb25lDQo+ Pj4gY2Fubm90IHVzZSBsaWJ0b29sIHN0YW5kLWFsb25lICh3aXRob3V0IEF1dG90b29scykg YW5kIGV4cGVjdA0KPj4+IGNyb3NzLWNvbXBpbGF0aW9uIG9yIGV2ZW4ganVzdCBzd2l0Y2hp bmcgdGVtcG9yYXJpbHkgY29tcGlsZXJzDQo+Pj4gKGUuZy4gZnJvbSAnZ2NjJyB0byAnY2xh bmcnIHZpYSBDQyB0byB0ZXN0IHNvbWV0aGluZykuICBIZXJlcycgd2hhdCB0aGUNCj4+PiBm YWlsdXJlIGxvb2sgbGlrZToNCj4+PiAtLTg8LS0tLS0tLS0tLS0tLS0tY3V0IGhlcmUtLS0t LS0tLS0tLS0tLS1zdGFydC0tLS0tLS0tLS0tLS0+OC0tLQ0KPj4+IGxpYnRvb2w6IGxpbms6 IGdjYyAtc2hhcmVkIC1mUElDIC1EUElDIGJ1aWxkL29iai9Db3JlLy5saWJzL2FwdS5jLm8N Cj4+PiBidWlsZC9vYmovQ29yZS8ubGlicy9jYW1lcmEuYy5vIGJ1aWxkL29iai9Db3JlLy5s aWJzL2NoZWF0cy5jLm8NCj4+PiBidWlsZC9vYmovQ29yZS8ubGlicy9kZWJ1Z2dlci5jLm8g YnVpbGQvb2JqL0NvcmUvLmxpYnMvZGlzcGxheS5jLm8NCj4+PiBidWlsZC9vYmovQ29yZS8u bGlicy9nYi5jLm8gYnVpbGQvb2JqL0NvcmUvLmxpYnMvam95cGFkLmMubw0KPj4+IGJ1aWxk L29iai9Db3JlLy5saWJzL21iYy5jLm8gYnVpbGQvb2JqL0NvcmUvLmxpYnMvbWVtb3J5LmMu bw0KPj4+IGJ1aWxkL29iai9Db3JlLy5saWJzL3ByaW50ZXIuYy5vIGJ1aWxkL29iai9Db3Jl Ly5saWJzL3JhbmRvbS5jLm8NCj4+PiBidWlsZC9vYmovQ29yZS8ubGlicy9yZXdpbmQuYy5v IGJ1aWxkL29iai9Db3JlLy5saWJzL3J1bWJsZS5jLm8NCj4+PiBidWlsZC9vYmovQ29yZS8u bGlicy9zYXZlX3N0YXRlLmMubyBidWlsZC9vYmovQ29yZS8ubGlicy9zZ2IuYy5vDQo+Pj4g YnVpbGQvb2JqL0NvcmUvLmxpYnMvc204M19jcHUuYy5vDQo+Pj4gYnVpbGQvb2JqL0NvcmUv LmxpYnMvc204M19kaXNhc3NlbWJsZXIuYy5vDQo+Pj4gYnVpbGQvb2JqL0NvcmUvLmxpYnMv c3ltYm9sX2hhc2guYy5vIGJ1aWxkL29iai9Db3JlLy5saWJzL3RpbWluZy5jLm8NCj4+PiBi dWlsZC9vYmovQ29yZS8ubGlicy93b3JrYm95LmMubyAtV2wsLXNvbmFtZSAtV2wsbGlic2Ft ZWJveS5zby4wIC1vDQo+Pj4gYnVpbGQvbGliLy5saWJzL2xpYnNhbWVib3kuc28uMC4wLjAN Cj4+PiAvZ251L3N0b3JlL2dwcTNoODFiempwaXJ3bmMwZnp3c3BoNzg4Yjlyd240LWxpYnRv b2wtMi41LjMvYmluL2xpYnRvb2w6IGxpbmUgMTA3Nzg6IGdjYzogY29tbWFuZCBub3QgZm91 bmQNCj4+PiBtYWtlOiAqKiogW01ha2VmaWxlOjgzMjogYnVpbGQvbGliL2xpYnNhbWVib3ku bGFdIEVycm9yIDEyNw0KPj4+IG1ha2U6ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpv YnMuLi4uDQo+Pj4gZXJyb3I6IGluIHBoYXNlICdidWlsZCc6IHVuY2F1Z2h0IGV4Y2VwdGlv bjoNCj4+PiAtLTg8LS0tLS0tLS0tLS0tLS0tY3V0IGhlcmUtLS0tLS0tLS0tLS0tLS1lbmQt LS0tLS0tLS0tLS0tLS0+OC0tLQ0KPj4NCj4+IEkgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIHJl cHJvZHVjZSBvdmVycmlkaW5nIENDIGluIGxpYnRvb2wgMi4yLjYsIGJ1dCBJDQo+PiBkbyBu b3QgdGhpbmsgaXQgd291bGQgYmUgZ29vZCBwcmFjdGljZSB0byBkby4NCj4gDQo+IFRoYXQn cyB3aGF0IEkndmUgYmVlbiB0b2xkIGVsc2V3aGVyZSB0b28uICBIZW5jZSBteSBpbnRlcmVz dCBpbiBoYXZpbmcNCj4gbGlidG9vbCBzdXBwb3J0IGl0LCBpZiB0aGF0J3Mgbm90IHRvbyBk aWZmaWN1bHQuDQo+IA0KPj4+IFRoYXQncyB3aGVuIGJ1aWxkaW5nIHNvbWUgTWFrZS1iYXNl ZCBzb2Z0d2FyZSB0aGF0IGNhbGxzIGxpYnRvb2wNCj4+PiBkaXJlY3RseS4gIEhlcmUsIHRo ZSBsaWJ0b29sIHZlcnNpb24gd2FzIGJ1aWx0IHdpdGggR0NDIChoYXMgYmFrZWQNCj4+PiBD Qz0iZ2NjIiB2YXJpYWJsZSBhcm91bmQgbGluZSAzMjYpLCB3aGljaCBpcyB3aGF0IGl0IHVz ZXMgd2hlbiBsaW5raW5nDQo+Pj4gd2l0aCBpdHMgJGFyY2hpdmVfY21kcyB2YXJpYWJsZSBk ZWZpbmVkIGEgYml0IGxhdGVyIChsaW5lIDM2OCk6DQo+Pj4gLS04PC0tLS0tLS0tLS0tLS0t LWN1dCBoZXJlLS0tLS0tLS0tLS0tLS0tc3RhcnQtLS0tLS0tLS0tLS0tPjgtLS0NCj4+PiBh cmNoaXZlX2NtZHM9IlwkQ0MgLXNoYXJlZCBcJHBpY19mbGFnIFwkbGlib2JqcyBcJGRlcGxp YnMgXCRjb21waWxlcl9mbGFncyBcJHdsLXNvbmFtZSBcJHdsXCRzb25hbWUgLW8gXCRsaWIi DQo+Pj4gLS04PC0tLS0tLS0tLS0tLS0tLWN1dCBoZXJlLS0tLS0tLS0tLS0tLS0tZW5kLS0t LS0tLS0tLS0tLS0tPjgtLS0NCj4+PiBTZWVtcyB0aGlzIHNob3VsZCBiZSBhYmxlIHRvIGZp eD8gIENoZWNrIGZvciBlbnZpcm9ubWVudCBDQywgaWYgbm90DQo+Pj4gc2V0LA0KPj4+IGRl ZmF1bHRzIHRvIGdjYz8gIFdvdWxkIHRoaXMgc2ltcGxlIGZpeCBiZSBlbm91Z2g/DQo+Pj4N Cj4+DQo+PiBJZiBDQyBpcyBjb25kaXRpb25hbCwgb3RoZXIgY29uZmlndXJhdGlvbiB3b3Vs ZCBhbHNvIG5lZWQgdG8gYmUNCj4+IGNvbmRpdGlvbmFsIGZvciB0aGUgQyBjb21waWxlciBz ZXQuIEkgaGF2ZSBhdHRhY2hlZCB0d28gdmVyc2lvbnMgb2YNCj4+IGxpYnRvb2wsIG9uZSB3 aXRoIENDPWdjYyBhbmQgdGhlIG90aGVyIHdpdGggQ0M9Y2xhbmcuIFdoZW4gZGlmZmluZyB0 aGVtDQo+PiB5b3UgY2FuIHNlZSB0aGUgb3RoZXIgdmFyaWFibGVzIHRoYXQgd291bGQgbmVl ZCB0byBiZSB1cGRhdGVkIGlmIENDIHdhcw0KPj4gdXBkYXRlZCBhdCBydW50aW1lIGZvciBs aWJ0b29sLg0KPj4NCj4+IElmIHlvdSB3YW50IHRvIGRvIGEgcXVpY2sgdGVzdCBhbmQgY2hh bmdlIENDLCB5b3UgY2FuIGVkaXQgdGhlIGdlbmVyYXRlZA0KPj4gbGlidG9vbCB0byBkbyB0 aGlzIGFuZCB0aGVuIHJldmVydCB0aGUgY2hhbmdlIGFmdGVyIHlvdXIgdGVzdC4gSG93ZXZl ciwNCj4+IHlvdSBjb3VsZCBhbHNvIGdlbmVyYXRlIG11bHRpcGxlIHN0YW5kYWxvbmUgdmVy c2lvbnMgb2YgbGlidG9vbCBhbmQNCj4+IHN3aXRjaCB3aGljaCBpcyByZWZlcmVuY2VkIHNv IHRoYXQgdGhlIG90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZQ0KPj4gc2V0IHBy b3Blcmx5Lg0KPj4NCj4+IEkgd291bGQgY29uc2lkZXIgdGhpcyB0byBiZSBtb3JlIG9mIGEg ZmVhdHVyZSByZXF1ZXN0IHRoYW4gYSBidWcgd2l0aA0KPj4gbGlidG9vbCB0byBhbGxvdyBm b3IgZGVmYXVsdHMgc2V0IGR1cmluZyBjb25maWd1cmF0aW9uIHRvIGJlIHVwZGF0ZWQsDQo+ PiBidXQgdGhlcmUgbWF5IGJlIGZpbGVzIG90aGVyIHRoYW4gbGlidG9vbCBnZW5lcmF0ZWQg ZHVyaW5nIGNvbmZpZ3VyYXRpb24NCj4+IHRoYXQgd291bGQgYWxzbyBuZWVkIHRvIGJlIHVw ZGF0ZWQuIEdlbmVyYWxseSwgSSByZWNvbW1lbmQgcmVjb25maWd1cmluZw0KPj4geW91ciBw cm9qZWN0IHdoZW5ldmVyIENDIGlzIGNoYW5nZWQuDQo+IA0KPiBUaGUgbGlidG9vbCBtYW51 YWwgZG9lc24ndCBvdXRyaWdodCBzYXlzIHRoYXQgbGlidG9vbCBzaG91bGQgTk9UIGJlIHVz ZWQNCj4gc3RhbmRhbG9uZS4gSXQgZG9lc24ndCB3YXJuIGFnYWluc3QgdGhlIGN1cnJlbnQg Z290Y2hhcyAoY2Fubm90IGNoYW5nZQ0KPiBDQywgY2Fubm90IGNyb3NzLWNvbXBpbGUpLiBI ZW5jZSBJJ2QgcGVyaGFwcyBjb25zaWRlciBpdCBhIGJ1Zy4NCg0KVGhpcyBzZWN0aW9uIG9m IHRoZSBsaWJ0b29sIG1hbnVhbCBzaG91bGQgaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgdG8g dXNlDQphIHN5c3RlbS1zcGVjaWZpYyBsaWJ0b29sIHNjcmlwdCBpbnN0YWxsZWQgaW4geW91 ciBiaW5hcnkgZGlyZWN0b3J5Og0KaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0 b29sL21hbnVhbC9saWJ0b29sLmh0bWwjQ29uZmlndXJpbmctbGlidG9vbA0KDQpsaWJ0b29s IGNhbiBiZSB1c2VkIHN0YW5kYWxvbmUgYXMgbG9uZyBhcyBpdCBoYXMgYmVlbiBjb25maWd1 cmVkIGZvciB0aGUNCiJjb21waWxlciBzdWl0ZSBhbmQgb3BlcmF0aW5nIHN5c3RlbSB0aGF0 IGFyZSB1c2VkIHRvIGNvbXBpbGUgeW91cg0KcGFja2FnZS4iIENyb3NzLWNvbXBpbGF0aW9u IGlzIGFsc28gcG9zc2libGUgaWYgbGlidG9vbCBoYXMgYmVlbg0KY29uZmlndXJlZCB0byBk byBpdC4NCg0KVG8gYWxsb3cgQ0MgdG8gYmUgb3ZlcnJpZGRlbiwgbGlidG9vbCB3b3VsZCBu b3Qgc2V0IGFsbCBvZiB0aGUNCmNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGl0IG5lZWRzIGZv ciB0aGUgbmV3bHkgc2V0IGNvbXBpbGVyLCBzbyBpdCB3b3VsZA0Kbm90IG9wZXJhdGUgY29y cmVjdGx5LiBsaWJ0b29sIHdvdWxkIG5lZWQgdG8gcmVjb25maWd1cmUgaXRzZWxmIGlmIEND DQp3YXMgY2hhbmdlZCBkdXJpbmcgZXhlY3V0aW9uLi4uIFRoaXMgbWlnaHQgYmUgcG9zc2li bGUgaWYgYW4gb3B0aW9uIHdhcw0KYWRkZWQgdG8gbGlidG9vbCB0byByZWNvbmZpZ3VyZSBp dHNlbGYsIGJ1dCBJIGFtIG9wZW4gdG8gb3RoZXINCnN1Z2dlc3Rpb25zIGZvciB3YXlzIHRv IGFwcHJvYWNoIG1ha2luZyBsaWJ0b29sIG1vcmUgZHluYW1pYyBmb3IgdXNlcnMuDQoNCj4g SSdsbCBzZWUgaWYgSSBjYW4gZ2V0IHRvIHNvbWUgcmVxdWlyZWQgbGV2ZWwgb2YgTTQtZm9v IHRvIGF0dGVtcHQgc29tZQ0KPiBwYXJ0aWFsIGZpeCAodG8gZ2V0IHN0YXJ0ZWQpLiBJJ3Zl IGJlZW4gdHJ5aW5nIHN0dWZmIGJ1dCB3aXRob3V0IHN1Y2Nlc3MNCj4gc28gZmFyLCBkdWUg dG8gdGhlIGxheWVyaW5nIG9mIE00IHRoZW4gc2hlbGwgc2NyaXB0IGFuZCBzdGlsbCBiZWlu ZyBhDQo+IGJpdCB1bmNsZWFyIG9uIHRoZSBleHBhbnNpb24gb3JkZXIvdmFyaWFibGVzIHVz ZWQuDQo+IA0KPiBUaGFuayB5b3UuDQo+IA0KDQotLSANCklsZWFuYSBEdW1pdHJlc2N1DQoN CkdQRyBQdWJsaWMgS2V5OiBGQTI2IENBNzggNEJFMSA4ODkyIDdGMjIgQjk5RiA2NTcwIEVB MDEgMTQ2RiA3MzU0DQoNCg== --------------0i0KAP9WzxsWovtgWGdBSYbu Content-Type: application/pgp-keys; name="OpenPGP_0x6570EA01146F7354.asc" Content-Disposition: attachment; filename="OpenPGP_0x6570EA01146F7354.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBGFMu5ABEACpFrPCKpfsTSl4svqi91Hsf8gGtdKwndgXqMPJNqBXEJCCwiiU PnS68wNWae54So04zVAcXewFdM36GypUGep5bhdgvbVKaDCrhNRdAoZ0VAywgU9C DCAa3v8eXUSrlGonk/ygjLIMnkOSjIMls4+z0FOpvsd1IcgcBDU5S6DSAF/Sb8w9 bF2yD7f5RaLN6++EJEO2Bp+8v4qCJEUGzi5QJKXHVUTGiTirx50eLIkw0HseLVOi JoU0NRRgzK/q04+X/NuOAPnZm5K3GOJUmKmG7M2tdMhhGT7UjF3XiI0MwydGIrPU 1T1OdPBnXv6ajRYzLgIZl0GsGeFo5qFaFmRtNO7nCGi/5XtivM1WvbqXIQmsAmpm 8N/uEcPcuP+0+7s1o0JC+c4nbHlQyvUFSZVgbZQ+mSn6GXRPNfL7AeDSINXXvXDv 5vkHN+FbFggx5nWg8J5a33hxbnZoR/qTfDBQHF3mJMF3lesXibN+oLvwOVtlIffK c4jwjLKL40644eQfbhHjCE1AXGQjUGCE5vAkCxEqWH2nQbXIedijQD/5mufaCQX3 Rl314FBfyV1b9rIHxJYRLXHT83+om7y5ncYI5sdoY7/g/Ggmi0PuuUicax/ejOx4 nNtDgDxlhCgOVm6qpmX9kyEZj0+vAodQjMrx3JKgojBdbusl4C5bWIgeRwARAQAB zS9JbGVhbmEgRHVtaXRyZXNjdSA8aWxlYW5hZHVtaTk1QHByb3Rvbm1haWwuY29t PsLBlAQTAQoAPhYhBPomynhL4YiSfyK5n2Vw6gEUb3NUBQJhTLuQAhsDBQkDwmcA BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEGVw6gEUb3NUCC4P/AiRUDzkEm8E WdvGQ9CkUYPAOARr19w04+N+86XZU8owULTkys81Wv80Wz48Q6IA3RASjHuyNtOQ a3TmoGsRYovIqKWQY6hIWBY7radPldSnbqXDp0mbwxSFVsCV2m2YqZKQpnKTR7b5 N6KgKKDXDLK0ES5CO1DAdvTg33WOonSNVpP+14R1bg9L685nOckK+TP1kQq91W+0 QUeEfS7BqdU/Znv39sVVMUkXQiWK441rQ1wcHvD32iiSoqnFQxtrdTwaglpv1/Y6 MDsnnwrLX3Bsq0vIL8CYVwVqy309/rtq3tpL1dw9lWaEA0sBNBMfOvBBJ1GOUpnE f6k6dlhHSoDDndbODXBEAgXnbz6JKqPA+NAJfnccnvcb7G2KnWtvG/GbWQia7S1Q lRi18GTDfX143uApm++/bFkGy/m3UjocGxyx9xh/wpzKuTlqBvxAX/cSR7hw3imC 5t2t6fmgIL9ZTED5FEyEgM1+zi/OfrPyqxKs/Qo8ZxoqMuZMHN4n9pJCtOvLT72H PUNxfRKiqjTj9hgQUm+sc8vfYXGapLY7Ybi4VrNPtGUxH/iSRf29sYc7bQlIoXiW KqcPjPuI/IZ8qMrNSloBgGeMuJ4iQn5shIZWbbgnJf5LcSO3SaPsLH80tnfimhkK tj6+MMe9afss26DcNcw4mT3IljkSRjLxwsGUBBMBCgA+AhsDBQsJCAcCBhUKCQgL AgQWAgMBAh4BAheAFiEE+ibKeEvhiJJ/IrmfZXDqARRvc1QFAmQIi3IFCQhfalcA CgkQZXDqARRvc1QNYw//fohzqHChHrOl60maI533r+wIMaFnqAPS6+S4mlV5qCcy t2CEvvtQ4ggjg7cjm/hKbDBGnOAl0/Cq2QVo+SNJGGBmdvPgCjC8o6Dc4KaFW8wO H2OYMLWm1kzxM/aO7oEWNS4gi3mM1eb2yiT4Uk6jtEjQ/7gEc8B2PXWjvt9gw2RF 0rJDT9EMM5p/hSuAjfTOp4BfnKX5YM5G01iH7HPpGl+IAr6bcd30qoGmH/gpwWrK 8eMYQa3RkKtMFFLQpd7i4yGbQwg6XeY4e2xXKccCHR6tyhKqTyerZQVG1D95xHq5 mipz86eXArZSozhpaf/SlplI/YHqo38R94oOqSA13aBmIQf+PKR+DiKaR4/jMt38 3pH+RK80ucNS8ueMWaDj40r2oixbQ9A0uSN5tcq//IprT+ax2iuBwQEE3keZjJB7 UGNqXTnvEW52+hrUpqL1G4YNGnQBuL56iIlAqmnKS0VdXWOxI2U+En6AjIcRAqLZ Gptv90Nc33mfe96Yka5dBWdk4oi/FNu/JnKAcZQPYkByaA8PQYXsnCmgJCQj/8aC RPVddj83nHAE9AEI3n9aOD7jsR1gfYLwOw3fGJqx4MZWcHBAIUF/36FIHQ+ygQDT +b39MpdENCW4q14GfAAcY9nsj2eW4YYRdAzY3YiqvwrajuP57pu+hOXimI2qEp/N MElsZWFuYSBEdW1pdHJlc2N1IDxpbGVhbmFkdW1pdHJlc2N1OTVAZ21haWwuY29t PsLBlAQTAQoAPhYhBPomynhL4YiSfyK5n2Vw6gEUb3NUBQJi/OUPAhsDBQkDwmcA BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEGVw6gEUb3NUnHIP/j4W1IhIfdoK 7ZoPO2hELJC0vcCJGB6a0mVP3g3w6EalKGQsA4P8btKDNdjrZqP6OsN99RWenCCY ASndKGq9SmYIe7Bnrr98xB528G3Bo271OCAKT1IauJ272NtMvqyzvgNVXTtZyzKM /sX+l36QRlRbVi5VxpdVll70a1U7YxusvzBtFeWrdbVZ7vAY3kSrX7tXjZ8Nj8C3 UiPJdCguPBU+Fjzcs6gfJ7ngcQ1QHrjokMFBGU8nLcHyKrir1b2ltZ02fW+Tke1E ViSQXIvF8a85OqklVxKDFu9EpZEg1lZo84UNGZDJpblpSbRnfQoBQxbmSp4u4nVR lYVNqzKNkf/7w+xukE18LxFZ2zqeVt1WNOauDbcTWmoM4mQy70q79uiT6pTjEh/m W1R74+vbXt6QKSxhV1YTDyYebumMGu94m9G5qwTg6/w0VZGnyV7ywqwKLztKHOBJ wzP6e0jhS41bTShMlRuYo8lOgAenKuX/0EKdTonf3o+mp+qrSOlkVBeGiSjhv/Ts qAiebOhJE1utw1iQpHEzKZGnm40f67RgSAUgKiZawCkVPtQcn2vDAfxb/r08/dfK NCcXkGIsIQPclRaShCJFBaOXFO6G1jVE2jyj3bgXxUy/x9O8F3MebacKOzRROoL4 DSNp7KTil8kJq4EoqxSJJQMnhV7obSm3wsGUBBMBCgA+AhsDBQsJCAcCBhUKCQgL AgQWAgMBAh4BAheAFiEE+ibKeEvhiJJ/IrmfZXDqARRvc1QFAmQIi2cFCQhfalcA CgkQZXDqARRvc1RkoRAAkJMTQURsLPQLM0bSm5wnCufwe02wfPwLERfkG6+g+uln uTZZIy6dmbh6TQdLt885V1D6hPOdbcaYTWUwDOC9BIJlZhcGdeNNhzJW03vnSI6H kJ4rbsUBNlE+D1sJ4akRD1+zP1tkOu176uW966Qlpmt8LZxQi7vQoxjHKEQ/pJlQ yvypXetxOeaqdUWz7Bgiw96dUJ+3lt8frICvYh/tDn7bv6+tTvvndcw825zoJr5R JO8loNvkCA0KaszjSd2t8nv/0moX2s6OF8CA4pgwuC/y2ZONBy4DhzLzfZrUQjCX CZqkO11nvfarWgTBsSgauZ/GZAj1QPOrhMgGyS1HZ4ktM8A26XBNJzkhzGCrFt0f g/WyZBA8TZSn4CKogoK1143bvX0RBsVJt42yZQ+p6ihP8m1rSdAREtgwpjIqaa5u fnEllokOK4GiQX2NmMcDTBdSPUF1ygKNMVr74xQf426V+54nGMfq7UVeJr8buhMm mUgnwCozKD6nS0/tZD+FBs1ewsR//0Ij84loMkMlK+aPr4VuRwG58Riw57i/ulpm +XBlw6+90e0bOz3wQC2knD+vuTKyfYTU7ersMCe9FXX1PaN1BCJxjn3ZwW1nOcjR ZLbjvMlCo4C4w0dUV6opbPgC1GtiOYn47H9nZUIZgrAKvT5LTfTfvr5Pk3cwXDTO wU0EYUy7kAEQAMR9kYA2RQOavRtsHys7IoPw8/ysfR/TBi2siRLOTDSCb9e3Rvpj JoI0ZODtEMIRs5oA/JwXtQCV6hOoZuitjKV2o2/wff7yBTYDUPSiGk7SHoZBtq8F 8Dwy374D2C0cPnx9IAFW0tZgw0a6O0Sa/KZe5vJout1BGUMZKhdyGdaQ+7snwnD5 dFd2+XVsKOVJMu4STxBb4/MyWgUumHZ2fFrXiMSEfHhzD8ItlkCycJ/C1KhtjgzC DJKUKO9X9nQqKQkqtVFNgWPyTGoG6VF3pNxSIzSCqfSlI9xRZFBb5aion/pAfTOj /pZQVWNJwwonSute1ejScGiVGc0YBoporltkMfUMFh2HAW4miuhB2nsOYJFcD5TC SSYcMBQJT32E9E4bFZf5KWjo6bcg20Vschi2nPpy171WouhJSTO+/e2Vm8HWYWu0 2FAOmNCT69XIlXBaYqbJV5Dis6tBozz0rkPfkOeyxlqCV9Gda62rwEu7sxYTWzTI EHm5yeXn7zETvAwg1FoiJ9tlQUd7Hi95QUvLH9D4/pUQgRyfLrCX/zJH1mYgLkMk NfxJw2qP98Dw9KazgYMdPemxTFp7gPmHwWHJ2+kgEqWMGBk6mVP76ejNTkVp78XV 7xGBH3qvkWm2qr2eDDdHg++V+yvp24VoZVrjo1XefROe1DdNfIHQtg1jABEBAAHC wXwEGAEKACYWIQT6Jsp4S+GIkn8iuZ9lcOoBFG9zVAUCYUy7kAIbDAUJA8JnAAAK CRBlcOoBFG9zVEq8EACD/7XohTdF/jfb85lh7/6vFD1XRh0UbSg9cm+b9bd7C3uf bIl3AdI99SXPWkiRv+J8rMVuW78wtOVa/nFcxH8lqC+z1rpQxXkLYSapVsx7dnww ize1hg9qXRysl+iYqGXXaRpDyRSoEMJailLv3T6URofa4qEJ3ROpWBfqmV/BUBs0 sqCKXsaRPZ00/CPiJMybP5lyBnOdfYjjYcQS26NEXXL6qr/uHcs7InAN1xxoOcCO YE4jfsg2eXJobwWc57rGHEkAR4cvAhwPPtENHhkK0Rd+EIFMrsyjAthUJsmgSSaX FIo2ubBII4VdCbGqVT4+szfTVHxUbuC1ITUOggqPuXy1bZcWHUyW/VhbrfBjbVN6 QF5v2J+P/2KK5bHCupbpyxgeJk45BTWdrixWdFM369ZE9Jh1LF811E+O0VAlnWPH JKzbD6eKFjvTZ/Vb9Rq5+sjOw2U873AhKxH5xSfmGyPrkzDI6KM5lLfGVG1qH+NZ YRMWU5WDP+VNREdmVxvTwnCVorawnawVvfikfL5YFogvumJHl1Z7SZlmqjrL4yQk nCdFtWMTuZsjB9671X0E64u2lC3hGxyq+81OHUtaK11knr8XcYBRknKsVA2UvGlL zuSVXnvmrf0qVz6PijECOCYMYTsZWJgMOPAC5oTA+jYSoiTyk0ZYcNrH550bhcLB fAQYAQoAJgIbDBYhBPomynhL4YiSfyK5n2Vw6gEUb3NUBQJkCIuUBQkIX2qEAAoJ EGVw6gEUb3NU6qMP/R80Q4G/CVLsrXMEWhiePIHmPYfLL1guvLNi/K3YocMFSloU 6QjyP2Lsceh5Sz5NB/+xr6p6nGpmc5FEGxr20SoXyEfJCNWXNR+4znkSzkRH1FJ+ QOYdlZCFaGGaQzTkji47heoW9m9to/dGv8fKa34VLo7wzvD3FyYdF27lSGNqSiIP NFS8kGS5m0fVDHP2jgFjiWjcXRUG78KzH4Yansse5KTPj2dm8zb+o30jfd8dM1cc d3FavQ74kjrbTubQWsStTNMBm9ML7vSoirs5P3d8NNLHSMDtlZfzNfWKkxthZY1N 86sMOoecaOl8rfBIKrXMkWJXRDoz6o8Xrd/+JeByDBGuM5jAMT0mQ5ckBwFN5Q7k et0c/YomKZQ3ul3V44eS8hmizeWNM2r4x3DVJa+4tsXeTLSWWX79z276SqSxQveK fnJh0ak8q0tqJAc6iflvUjIIW5c7aSfcul+u6/8S0T74nEHfBhpBjQm9BEumt1sS fXGYO77LXemuYDWpe2v0BO0j5hBssYnJ/hUDXgy2+bMJXzohJqYEjSs9gdTDskD6 x9Z1sTHutikUw/g4gxxRThH2l4YhBb6kuwct9xzecT2/PVzXkjnt+gwQ6PHdyTWj 0//LZCKJVquluG3myyCMALInBkJ0dzwXKH0VHe8PYt18tEGGBkKUVsxBXBBe =3DfGTx -----END PGP PUBLIC KEY BLOCK----- --------------0i0KAP9WzxsWovtgWGdBSYbu-- --------------ajn02eZESSqP7i1ETRZTvg7t-- --------------Ce3VMQcdWer7U9MbCWmXK40r Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEE+ibKeEvhiJJ/IrmfZXDqARRvc1QFAmcWcawFAwAAAAAACgkQZXDqARRvc1SA 7A//cb77efqcAtWiTZIAxPpKY9P0WzSmeNEsE9B+cTk2GX0/3hZPb/g3qBriSqyiMJ8aRSTAItYF 4/I97h+llfO5dmBz+gYN808FQt76cnojaZPIGeVoJTexUVXUWhGxo2V9q+alI80p5g7O64Gjih+7 MIqQqHBJAk1qKmHcQKOdo4b+2MCPACClX6iy3JQtQ8V/qHec6iAmoJ78ZozDH+E83sFfRAvG1DPf Uxqs3bW/ntTUNqnsA/HLj5I301vNPZzkXW3c70UVXSwooNrNPEgBjhP6xrTI7jFQTFPztriXkZmR p9dnmmnRPAIoph5iSSwOUGPN+k/jQ9nBQ5nS8I7B8jF3nZY/SdPV2UWRA4fmjg32WzDtOa5btL/F LVtSXS+ZzJeFgkS8MJReZ3XIHF4b9Or08CIfrxWGoIcUnYCkE6x1rrhVoiOT5iSm7jZXZzn6uVZv DQFMxN6rfmHm0KsX8krkOp7neZ7U+iMnHDt70REcge7flARh/u7GYb69LvDEQGj1Shs9Wo+2Vjqi oJWTLBgM4VeMVfME8ksm5YI8F+873j0vOE65Ung6/MKGXZHEJEuPriBv259iNcepDfooooAcUSe9 IrQIZNYEw/ZEhsrqyuOYhEk13VM+BAFQRJ6s03CPABbcajVBu9uGGXeZmsJ+zbQMUiJ/BLwlkIWx K60= =kDF2 -----END PGP SIGNATURE----- --------------Ce3VMQcdWer7U9MbCWmXK40r--
bug-libtool@HIDDEN
:bug#9492
; Package libtool
.
Full text available.Received: (at 9492) by debbugs.gnu.org; 19 Oct 2024 13:59:35 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Oct 19 09:59:35 2024 Received: from localhost ([127.0.0.1]:44192 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1t29zS-0001ni-K5 for submit <at> debbugs.gnu.org; Sat, 19 Oct 2024 09:59:35 -0400 Received: from mail-pl1-f178.google.com ([209.85.214.178]:52284) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <maxim.cournoyer@HIDDEN>) id 1t29zP-0001nR-Sn for 9492 <at> debbugs.gnu.org; Sat, 19 Oct 2024 09:59:33 -0400 Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-20c714cd9c8so31371495ad.0 for <9492 <at> debbugs.gnu.org>; Sat, 19 Oct 2024 06:59:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729346282; x=1729951082; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=7lPdtT1nnD39RMtlcAyDDK3fIOe4Qis1wb3cj92SzxE=; b=Zax5FHVIbeRxBGMuKUSkFBl/NvQMGGFtmgTQgkM+C2uy3u8CnnBYKYNnJCvpwzxWuw dCunB4+gPOT9keWPa8+jN6sA72xSeahmM7w9r2915rKTgpL8i86JXLvBs7tys8hA8LEo OstK6QnhV71TlKwjgy2FL7YOxN9dJH+z1cJG9kCyZ7Hb+s6lkhG2TsdvupLIjpqxXvQ9 u28RRc8Mlk/5j4YHShMAiSiXQVMTAyfHlBL4DtzlJZg8kLR/JCg6A13XGqMkCnznNGcl ioE///xHQNBSUZOIbRa3vwSX+H5v5mqkEVha7IZLjioQuV/NQOQqAmnS97QJCd0fSba0 HJMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729346282; x=1729951082; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=7lPdtT1nnD39RMtlcAyDDK3fIOe4Qis1wb3cj92SzxE=; b=lZgfhTFlgufG9CHf1HzOLDh8g3LlwiBCV4aTNj7cnPdi6zLbW5QpLRdSnPKUOsch2u 4etisjwPJanHAwUkj5thIfZRtqLzDNRp1PZ1xGJAWBmp5BytSD0zdkNzUQO/v9eBbPV3 EAWoJaUpqlQHYLcTjsII0XqQ1E30guwrIG4OH9fSTiWrr6wHfCEx/iaLQUHx6Ds2awYE 0+stD14Qk61blGzrckApVZpI13hyQwodhdGKdSmUGQ8eOs/tcXT5+uI6IDoN2yaHXfgr 3doT1CyZoE9JEA7VnkoIL1ujMEE/EYmKrOdoHaWi2qQaEp+3vV4lvGA1J7IVA/fZlLrp AjLA== X-Gm-Message-State: AOJu0Ywpf9eyv4FX5pfNQ8lnPdygbSY0/8X1YIbBOVx9Fk8JK7MMe76e tqO/qWEDbCSJ+2p1koIZYmnxi+f69Z1no6F13ghKIuIceu0JlJFFeiTn7Q== X-Google-Smtp-Source: AGHT+IE49lAJI4GogZWAPxmI4Q+lFaQUvCj3OF0ZusTrLzcsG90fGD9i34+I3lS6RoAFjhJPQluLYQ== X-Received: by 2002:a17:903:88f:b0:20c:94d1:2cb9 with SMTP id d9443c01a7336-20e5a79f5eamr66653545ad.9.1729346282260; Sat, 19 Oct 2024 06:58:02 -0700 (PDT) Received: from terra ([2405:6586:be0:0:c8ff:1707:9b9:af89]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-20e5a71ec0esm28114605ad.62.2024.10.19.06.58.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Oct 2024 06:58:01 -0700 (PDT) From: Maxim Cournoyer <maxim.cournoyer@HIDDEN> To: Ileana Dumitrescu <ileanadumitrescu95@HIDDEN> Subject: Re: bug#9492: cannot override CC when using system copy of libtool ("The wrong-gcc problem") In-Reply-To: <2f633f37-e422-49d0-b6c3-bae590dc7e23@HIDDEN> (Ileana Dumitrescu's message of "Wed, 16 Oct 2024 22:47:44 +0300") References: <CAFRJ5K1hD4bQd-d+WRUa7eXHVtV6khvtfqcwGFTJ83S04kuc7Q@HIDDEN> <20120513041429.GA24606@burratino> <87wmicgl0h.fsf_-_@HIDDEN> <2f633f37-e422-49d0-b6c3-bae590dc7e23@HIDDEN> Date: Sat, 19 Oct 2024 22:57:59 +0900 Message-ID: <87a5f0chzs.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 9492 Cc: 9492 <at> debbugs.gnu.org, Jonathan Nieder <jrnieder@HIDDEN>, =?utf-8?B?0KDRg9Cx0LXQvSDQkdGD0YfQsNGG0LrQuNC5?= <ruben.buchatskiy@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) Hello Ileana, Ileana Dumitrescu <endometriosis95@HIDDEN> writes: > On 13/10/2024 17:01, Maxim Cournoyer wrote: >> Hello, >> Just a heads-up that this old bug is still relevant. It means that >> one >> cannot use libtool stand-alone (without Autotools) and expect >> cross-compilation or even just switching temporarily compilers >> (e.g. from 'gcc' to 'clang' via CC to test something). Heres' what the >> failure look like: >> --8<---------------cut here---------------start------------->8--- >> libtool: link: gcc -shared -fPIC -DPIC build/obj/Core/.libs/apu.c.o >> build/obj/Core/.libs/camera.c.o build/obj/Core/.libs/cheats.c.o >> build/obj/Core/.libs/debugger.c.o build/obj/Core/.libs/display.c.o >> build/obj/Core/.libs/gb.c.o build/obj/Core/.libs/joypad.c.o >> build/obj/Core/.libs/mbc.c.o build/obj/Core/.libs/memory.c.o >> build/obj/Core/.libs/printer.c.o build/obj/Core/.libs/random.c.o >> build/obj/Core/.libs/rewind.c.o build/obj/Core/.libs/rumble.c.o >> build/obj/Core/.libs/save_state.c.o build/obj/Core/.libs/sgb.c.o >> build/obj/Core/.libs/sm83_cpu.c.o >> build/obj/Core/.libs/sm83_disassembler.c.o >> build/obj/Core/.libs/symbol_hash.c.o build/obj/Core/.libs/timing.c.o >> build/obj/Core/.libs/workboy.c.o -Wl,-soname -Wl,libsameboy.so.0 -o >> build/lib/.libs/libsameboy.so.0.0.0 >> /gnu/store/gpq3h81bzjpirwnc0fzwsph788b9rwn4-libtool-2.5.3/bin/libtool: line 10778: gcc: command not found >> make: *** [Makefile:832: build/lib/libsameboy.la] Error 127 >> make: *** Waiting for unfinished jobs.... >> error: in phase 'build': uncaught exception: >> --8<---------------cut here---------------end--------------->8--- > > I have not been able to reproduce overriding CC in libtool 2.2.6, but I > do not think it would be good practice to do. That's what I've been told elsewhere too. Hence my interest in having libtool support it, if that's not too difficult. >> That's when building some Make-based software that calls libtool >> directly. Here, the libtool version was built with GCC (has baked >> CC="gcc" variable around line 326), which is what it uses when linking >> with its $archive_cmds variable defined a bit later (line 368): >> --8<---------------cut here---------------start------------->8--- >> archive_cmds="\$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \$wl-soname \$wl\$soname -o \$lib" >> --8<---------------cut here---------------end--------------->8--- >> Seems this should be able to fix? Check for environment CC, if not >> set, >> defaults to gcc? Would this simple fix be enough? >> > > If CC is conditional, other configuration would also need to be > conditional for the C compiler set. I have attached two versions of > libtool, one with CC=gcc and the other with CC=clang. When diffing them > you can see the other variables that would need to be updated if CC was > updated at runtime for libtool. > > If you want to do a quick test and change CC, you can edit the generated > libtool to do this and then revert the change after your test. However, > you could also generate multiple standalone versions of libtool and > switch which is referenced so that the other configuration variables are > set properly. > > I would consider this to be more of a feature request than a bug with > libtool to allow for defaults set during configuration to be updated, > but there may be files other than libtool generated during configuration > that would also need to be updated. Generally, I recommend reconfiguring > your project whenever CC is changed. The libtool manual doesn't outright says that libtool should NOT be used standalone. It doesn't warn against the current gotchas (cannot change CC, cannot cross-compile). Hence I'd perhaps consider it a bug. I'll see if I can get to some required level of M4-foo to attempt some partial fix (to get started). I've been trying stuff but without success so far, due to the layering of M4 then shell script and still being a bit unclear on the expansion order/variables used. Thank you. -- Maxim
bug-libtool@HIDDEN
:bug#9492
; Package libtool
.
Full text available.Received: (at 9492) by debbugs.gnu.org; 16 Oct 2024 19:49:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Oct 16 15:49:28 2024 Received: from localhost ([127.0.0.1]:60551 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1t1A1P-0001ny-Tc for submit <at> debbugs.gnu.org; Wed, 16 Oct 2024 15:49:28 -0400 Received: from mail-ed1-f43.google.com ([209.85.208.43]:40021) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <ileanadumitrescu95@HIDDEN>) id 1t1A1N-0001ni-H7 for 9492 <at> debbugs.gnu.org; Wed, 16 Oct 2024 15:49:26 -0400 Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-5c933d5bdf1so34242a12.0 for <9492 <at> debbugs.gnu.org>; Wed, 16 Oct 2024 12:49:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729108079; x=1729712879; darn=debbugs.gnu.org; h=in-reply-to:autocrypt:from:content-language:references:cc:to :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=l1vDiB5nk/PsbDe1H5/IjTcgsrS4lR8DAtxep5muHYM=; b=mNjSVFTwNcXs25Qg3YCc0sfb/Q26C3j/aWKtepF2HQFz3U65DAx45QbiVAx2BpIvic pNeGOULHQGn+fa2ycZAUW5yeWgxpWOh7wuQs3ntZeCUUF9L68wafMjuF+NxyP+3faiT2 5dCC6wG4sIDnXxto0FeEhQ0k59rBmp+CnbOv89i6FgAmAn7AURmjzHmorhftUoJVibxs KS6Y1XwDCN4xCkJ99Wldi18eXy9/KsYW5HzMWgYlGsUEQKl/NmuKlf7W2jXtnw1/rrfw qrIfGC2XcK59AV76vnIJmnlv9u6J9dl2d+J5VgpUz0BFrJ7YZnv9krulrNDaC3r9U6fD SJmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729108079; x=1729712879; h=in-reply-to:autocrypt: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=l1vDiB5nk/PsbDe1H5/IjTcgsrS4lR8DAtxep5muHYM=; b=IovAIjp7FuyGpw3hFUFFRI2a20X8xTkPrxvsM1EKE++08QYO7BOJ2FxSCYvDWwbVc7 Nhh6pYCuH/NoUWm5+C80j6r0nUpT+HejYA0O1dczecsPgDKLdZYgqj8ii1pxTykan/CN fGfv2lyfgTYDfGask/WVWj7+m2ohf4Y4HcmqY2locwC917vl0xT4D/xXp95MQ+jInnEl D4F+EtRw3QjS+4Dvulgde7dgT+JGLUwi6mN4cu+7gr8ioNy0oNtoFlUTxSV3DGsTaz1R WehtI5FAaywOQege/lKyKwsAiLQuYnY5cyRbVEFDuRyLq65rkuHtghTgj2J9yYAABsll tZQw== X-Gm-Message-State: AOJu0Yx11bBUdXLubPuY58+Hod1Wn+yRRNJNI2upL2DPOys1vX0aKSQM lqQxgM3AOZOApEa03ShR8lYLL9bYMTfpWQUTrEWw1gNcUzlQU7C/nea6jzPR X-Google-Smtp-Source: AGHT+IEzLbjoau7E13lzEbsCmkMWCmjgZU3WR/Y8LomZEHC0fHllROP48Rte7qHbum8cckeeOAggTg== X-Received: by 2002:a05:6402:510d:b0:5c3:eb29:5401 with SMTP id 4fb4d7f45d1cf-5c9a5e95386mr161556a12.9.1729108078601; Wed, 16 Oct 2024 12:47:58 -0700 (PDT) Received: from [192.168.254.128] ([95.214.217.104]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5c98d4f8b92sm2002862a12.27.2024.10.16.12.47.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 16 Oct 2024 12:47:56 -0700 (PDT) Message-ID: <2f633f37-e422-49d0-b6c3-bae590dc7e23@HIDDEN> Date: Wed, 16 Oct 2024 22:47:44 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#9492: cannot override CC when using system copy of libtool ("The wrong-gcc problem") To: 9492 <at> debbugs.gnu.org References: <CAFRJ5K1hD4bQd-d+WRUa7eXHVtV6khvtfqcwGFTJ83S04kuc7Q@HIDDEN> <20120513041429.GA24606@burratino> <87wmicgl0h.fsf_-_@HIDDEN> Content-Language: en-US From: Ileana Dumitrescu <ileanadumitrescu95@HIDDEN> Autocrypt: addr=ileanadumitrescu95@HIDDEN; keydata= xsFNBGFMu5ABEACpFrPCKpfsTSl4svqi91Hsf8gGtdKwndgXqMPJNqBXEJCCwiiUPnS68wNW ae54So04zVAcXewFdM36GypUGep5bhdgvbVKaDCrhNRdAoZ0VAywgU9CDCAa3v8eXUSrlGon k/ygjLIMnkOSjIMls4+z0FOpvsd1IcgcBDU5S6DSAF/Sb8w9bF2yD7f5RaLN6++EJEO2Bp+8 v4qCJEUGzi5QJKXHVUTGiTirx50eLIkw0HseLVOiJoU0NRRgzK/q04+X/NuOAPnZm5K3GOJU mKmG7M2tdMhhGT7UjF3XiI0MwydGIrPU1T1OdPBnXv6ajRYzLgIZl0GsGeFo5qFaFmRtNO7n CGi/5XtivM1WvbqXIQmsAmpm8N/uEcPcuP+0+7s1o0JC+c4nbHlQyvUFSZVgbZQ+mSn6GXRP NfL7AeDSINXXvXDv5vkHN+FbFggx5nWg8J5a33hxbnZoR/qTfDBQHF3mJMF3lesXibN+oLvw OVtlIffKc4jwjLKL40644eQfbhHjCE1AXGQjUGCE5vAkCxEqWH2nQbXIedijQD/5mufaCQX3 Rl314FBfyV1b9rIHxJYRLXHT83+om7y5ncYI5sdoY7/g/Ggmi0PuuUicax/ejOx4nNtDgDxl hCgOVm6qpmX9kyEZj0+vAodQjMrx3JKgojBdbusl4C5bWIgeRwARAQABzTBJbGVhbmEgRHVt aXRyZXNjdSA8aWxlYW5hZHVtaXRyZXNjdTk1QGdtYWlsLmNvbT7CwZQEEwEKAD4CGwMFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AWIQT6Jsp4S+GIkn8iuZ9lcOoBFG9zVAUCZAiLZwUJCF9q VwAKCRBlcOoBFG9zVGShEACQkxNBRGws9AszRtKbnCcK5/B7TbB8/AsRF+Qbr6D66We5Nlkj Lp2ZuHpNB0u3zzlXUPqE851txphNZTAM4L0EgmVmFwZ1402HMlbTe+dIjoeQnituxQE2UT4P WwnhqREPX7M/W2Q67Xvq5b3rpCWma3wtnFCLu9CjGMcoRD+kmVDK/Kld63E55qp1RbPsGCLD 3p1Qn7eW3x+sgK9iH+0Oftu/r61O++d1zDzbnOgmvlEk7yWg2+QIDQpqzONJ3a3ye//Sahfa zo4XwIDimDC4L/LZk40HLgOHMvN9mtRCMJcJmqQ7XWe99qtaBMGxKBq5n8ZkCPVA86uEyAbJ LUdniS0zwDbpcE0nOSHMYKsW3R+D9bJkEDxNlKfgIqiCgrXXjdu9fREGxUm3jbJlD6nqKE/y bWtJ0BES2DCmMipprm5+cSWWiQ4rgaJBfY2YxwNMF1I9QXXKAo0xWvvjFB/jbpX7nicYx+rt RV4mvxu6EyaZSCfAKjMoPqdLT+1kP4UGzV7CxH//QiPziWgyQyUr5o+vhW5HAbnxGLDnuL+6 Wmb5cGXDr73R7Rs7PfBALaScP6+5MrJ9hNTt6uwwJ70VdfU9o3UEInGOfdnBbWc5yNFktuO8 yUKjgLjDR1RXqils+ALUa2I5ifjsf2dlQhmCsAq9PktN9N++vk+TdzBcNM7BTQRhTLuQARAA xH2RgDZFA5q9G2wfKzsig/Dz/Kx9H9MGLayJEs5MNIJv17dG+mMmgjRk4O0QwhGzmgD8nBe1 AJXqE6hm6K2MpXajb/B9/vIFNgNQ9KIaTtIehkG2rwXwPDLfvgPYLRw+fH0gAVbS1mDDRro7 RJr8pl7m8mi63UEZQxkqF3IZ1pD7uyfCcPl0V3b5dWwo5Uky7hJPEFvj8zJaBS6YdnZ8WteI xIR8eHMPwi2WQLJwn8LUqG2ODMIMkpQo71f2dCopCSq1UU2BY/JMagbpUXek3FIjNIKp9KUj 3FFkUFvlqKif+kB9M6P+llBVY0nDCidK617V6NJwaJUZzRgGimiuW2Qx9QwWHYcBbiaK6EHa ew5gkVwPlMJJJhwwFAlPfYT0ThsVl/kpaOjptyDbRWxyGLac+nLXvVai6ElJM7797ZWbwdZh a7TYUA6Y0JPr1ciVcFpipslXkOKzq0GjPPSuQ9+Q57LGWoJX0Z1rravAS7uzFhNbNMgQebnJ 5efvMRO8DCDUWiIn22VBR3seL3lBS8sf0Pj+lRCBHJ8usJf/MkfWZiAuQyQ1/EnDao/3wPD0 prOBgx096bFMWnuA+YfBYcnb6SASpYwYGTqZU/vp6M1ORWnvxdXvEYEfeq+RabaqvZ4MN0eD 75X7K+nbhWhlWuOjVd59E57UN018gdC2DWMAEQEAAcLBfAQYAQoAJgIbDBYhBPomynhL4YiS fyK5n2Vw6gEUb3NUBQJkCIuUBQkIX2qEAAoJEGVw6gEUb3NU6qMP/R80Q4G/CVLsrXMEWhie PIHmPYfLL1guvLNi/K3YocMFSloU6QjyP2Lsceh5Sz5NB/+xr6p6nGpmc5FEGxr20SoXyEfJ CNWXNR+4znkSzkRH1FJ+QOYdlZCFaGGaQzTkji47heoW9m9to/dGv8fKa34VLo7wzvD3FyYd F27lSGNqSiIPNFS8kGS5m0fVDHP2jgFjiWjcXRUG78KzH4Yansse5KTPj2dm8zb+o30jfd8d M1ccd3FavQ74kjrbTubQWsStTNMBm9ML7vSoirs5P3d8NNLHSMDtlZfzNfWKkxthZY1N86sM OoecaOl8rfBIKrXMkWJXRDoz6o8Xrd/+JeByDBGuM5jAMT0mQ5ckBwFN5Q7ket0c/YomKZQ3 ul3V44eS8hmizeWNM2r4x3DVJa+4tsXeTLSWWX79z276SqSxQveKfnJh0ak8q0tqJAc6iflv UjIIW5c7aSfcul+u6/8S0T74nEHfBhpBjQm9BEumt1sSfXGYO77LXemuYDWpe2v0BO0j5hBs sYnJ/hUDXgy2+bMJXzohJqYEjSs9gdTDskD6x9Z1sTHutikUw/g4gxxRThH2l4YhBb6kuwct 9xzecT2/PVzXkjnt+gwQ6PHdyTWj0//LZCKJVquluG3myyCMALInBkJ0dzwXKH0VHe8PYt18 tEGGBkKUVsxBXBBe In-Reply-To: <87wmicgl0h.fsf_-_@HIDDEN> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------MZJQj7lPfs0pCrrVvMOcsSBr" X-Debbugs-Envelope-To: 9492 Cc: Jonathan Nieder <jrnieder@HIDDEN>, =?UTF-8?B?0KDRg9Cx0LXQvSDQkdGD0YfQsNGG0LrQuNC5?= <ruben.buchatskiy@HIDDEN>, Maxim Cournoyer <maxim.cournoyer@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------MZJQj7lPfs0pCrrVvMOcsSBr Content-Type: multipart/mixed; boundary="------------APxq07q3JGo8sCj56eXYBlnz"; protected-headers="v1" From: Ileana Dumitrescu <ileanadumitrescu95@HIDDEN> To: 9492 <at> debbugs.gnu.org Cc: Jonathan Nieder <jrnieder@HIDDEN>, =?UTF-8?B?0KDRg9Cx0LXQvSDQkdGD0YfQsNGG0LrQuNC5?= <ruben.buchatskiy@HIDDEN>, Maxim Cournoyer <maxim.cournoyer@HIDDEN> Message-ID: <2f633f37-e422-49d0-b6c3-bae590dc7e23@HIDDEN> Subject: Re: bug#9492: cannot override CC when using system copy of libtool ("The wrong-gcc problem") References: <CAFRJ5K1hD4bQd-d+WRUa7eXHVtV6khvtfqcwGFTJ83S04kuc7Q@HIDDEN> <20120513041429.GA24606@burratino> <87wmicgl0h.fsf_-_@HIDDEN> In-Reply-To: <87wmicgl0h.fsf_-_@HIDDEN> --------------APxq07q3JGo8sCj56eXYBlnz Content-Type: multipart/mixed; boundary="------------G8KF08EbUdf0hPn9ptngmrht" --------------G8KF08EbUdf0hPn9ptngmrht Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 T24gMTMvMTAvMjAyNCAxNzowMSwgTWF4aW0gQ291cm5veWVyIHdyb3RlOg0KPiBIZWxsbywN Cj4gDQo+IEp1c3QgYSBoZWFkcy11cCB0aGF0IHRoaXMgb2xkIGJ1ZyBpcyBzdGlsbCByZWxl dmFudC4gIEl0IG1lYW5zIHRoYXQgb25lDQo+IGNhbm5vdCB1c2UgbGlidG9vbCBzdGFuZC1h bG9uZSAod2l0aG91dCBBdXRvdG9vbHMpIGFuZCBleHBlY3QNCj4gY3Jvc3MtY29tcGlsYXRp b24gb3IgZXZlbiBqdXN0IHN3aXRjaGluZyB0ZW1wb3JhcmlseSBjb21waWxlcnMNCj4gKGUu Zy4gZnJvbSAnZ2NjJyB0byAnY2xhbmcnIHZpYSBDQyB0byB0ZXN0IHNvbWV0aGluZykuICBI ZXJlcycgd2hhdCB0aGUNCj4gZmFpbHVyZSBsb29rIGxpa2U6DQo+IA0KPiAtLTg8LS0tLS0t LS0tLS0tLS0tY3V0IGhlcmUtLS0tLS0tLS0tLS0tLS1zdGFydC0tLS0tLS0tLS0tLS0+OC0t LQ0KPiBsaWJ0b29sOiBsaW5rOiBnY2MgLXNoYXJlZCAgLWZQSUMgLURQSUMgIGJ1aWxkL29i ai9Db3JlLy5saWJzL2FwdS5jLm8gYnVpbGQvb2JqL0NvcmUvLmxpYnMvY2FtZXJhLmMubyBi dWlsZC9vYmovQ29yZS8ubGlicy9jaGVhdHMuYy5vIGJ1aWxkL29iai9Db3JlLy5saWJzL2Rl YnVnZ2VyLmMubyBidWlsZC9vYmovQ29yZS8ubGlicy9kaXNwbGF5LmMubyBidWlsZC9vYmov Q29yZS8ubGlicy9nYi5jLm8gYnVpbGQvb2JqL0NvcmUvLmxpYnMvam95cGFkLmMubyBidWls ZC9vYmovQ29yZS8ubGlicy9tYmMuYy5vIGJ1aWxkL29iai9Db3JlLy5saWJzL21lbW9yeS5j Lm8gYnVpbGQvb2JqL0NvcmUvLmxpYnMvcHJpbnRlci5jLm8gYnVpbGQvb2JqL0NvcmUvLmxp YnMvcmFuZG9tLmMubyBidWlsZC9vYmovQ29yZS8ubGlicy9yZXdpbmQuYy5vIGJ1aWxkL29i ai9Db3JlLy5saWJzL3J1bWJsZS5jLm8gYnVpbGQvb2JqL0NvcmUvLmxpYnMvc2F2ZV9zdGF0 ZS5jLm8gYnVpbGQvb2JqL0NvcmUvLmxpYnMvc2diLmMubyBidWlsZC9vYmovQ29yZS8ubGli cy9zbTgzX2NwdS5jLm8gYnVpbGQvb2JqL0NvcmUvLmxpYnMvc204M19kaXNhc3NlbWJsZXIu Yy5vIGJ1aWxkL29iai9Db3JlLy5saWJzL3N5bWJvbF9oYXNoLmMubyBidWlsZC9vYmovQ29y ZS8ubGlicy90aW1pbmcuYy5vIGJ1aWxkL29iai9Db3JlLy5saWJzL3dvcmtib3kuYy5vICAg ICAgLVdsLC1zb25hbWUgLVdsLGxpYnNhbWVib3kuc28uMCAtbyBidWlsZC9saWIvLmxpYnMv bGlic2FtZWJveS5zby4wLjAuMA0KPiAvZ251L3N0b3JlL2dwcTNoODFiempwaXJ3bmMwZnp3 c3BoNzg4Yjlyd240LWxpYnRvb2wtMi41LjMvYmluL2xpYnRvb2w6IGxpbmUgMTA3Nzg6IGdj YzogY29tbWFuZCBub3QgZm91bmQNCj4gbWFrZTogKioqIFtNYWtlZmlsZTo4MzI6IGJ1aWxk L2xpYi9saWJzYW1lYm95LmxhXSBFcnJvciAxMjcNCj4gbWFrZTogKioqIFdhaXRpbmcgZm9y IHVuZmluaXNoZWQgam9icy4uLi4NCj4gZXJyb3I6IGluIHBoYXNlICdidWlsZCc6IHVuY2F1 Z2h0IGV4Y2VwdGlvbjoNCj4gLS04PC0tLS0tLS0tLS0tLS0tLWN1dCBoZXJlLS0tLS0tLS0t LS0tLS0tZW5kLS0tLS0tLS0tLS0tLS0tPjgtLS0NCg0KSSBoYXZlIG5vdCBiZWVuIGFibGUg dG8gcmVwcm9kdWNlIG92ZXJyaWRpbmcgQ0MgaW4gbGlidG9vbCAyLjIuNiwgYnV0IEkNCmRv IG5vdCB0aGluayBpdCB3b3VsZCBiZSBnb29kIHByYWN0aWNlIHRvIGRvLg0KDQo+IFRoYXQn cyB3aGVuIGJ1aWxkaW5nIHNvbWUgTWFrZS1iYXNlZCBzb2Z0d2FyZSB0aGF0IGNhbGxzIGxp YnRvb2wNCj4gZGlyZWN0bHkuICBIZXJlLCB0aGUgbGlidG9vbCB2ZXJzaW9uIHdhcyBidWls dCB3aXRoIEdDQyAoaGFzIGJha2VkDQo+IENDPSJnY2MiIHZhcmlhYmxlIGFyb3VuZCBsaW5l IDMyNiksIHdoaWNoIGlzIHdoYXQgaXQgdXNlcyB3aGVuIGxpbmtpbmcNCj4gd2l0aCBpdHMg JGFyY2hpdmVfY21kcyB2YXJpYWJsZSBkZWZpbmVkIGEgYml0IGxhdGVyIChsaW5lIDM2OCk6 DQo+IA0KPiAtLTg8LS0tLS0tLS0tLS0tLS0tY3V0IGhlcmUtLS0tLS0tLS0tLS0tLS1zdGFy dC0tLS0tLS0tLS0tLS0+OC0tLQ0KPiBhcmNoaXZlX2NtZHM9IlwkQ0MgLXNoYXJlZCBcJHBp Y19mbGFnIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyBcJHdsLXNvbmFt ZSBcJHdsXCRzb25hbWUgLW8gXCRsaWIiDQo+IC0tODwtLS0tLS0tLS0tLS0tLS1jdXQgaGVy ZS0tLS0tLS0tLS0tLS0tLWVuZC0tLS0tLS0tLS0tLS0tLT44LS0tDQo+IA0KPiBTZWVtcyB0 aGlzIHNob3VsZCBiZSBhYmxlIHRvIGZpeD8gIENoZWNrIGZvciBlbnZpcm9ubWVudCBDQywg aWYgbm90IHNldCwNCj4gZGVmYXVsdHMgdG8gZ2NjPyAgV291bGQgdGhpcyBzaW1wbGUgZml4 IGJlIGVub3VnaD8NCj4gDQoNCklmIENDIGlzIGNvbmRpdGlvbmFsLCBvdGhlciBjb25maWd1 cmF0aW9uIHdvdWxkIGFsc28gbmVlZCB0byBiZQ0KY29uZGl0aW9uYWwgZm9yIHRoZSBDIGNv bXBpbGVyIHNldC4gSSBoYXZlIGF0dGFjaGVkIHR3byB2ZXJzaW9ucyBvZg0KbGlidG9vbCwg b25lIHdpdGggQ0M9Z2NjIGFuZCB0aGUgb3RoZXIgd2l0aCBDQz1jbGFuZy4gV2hlbiBkaWZm aW5nIHRoZW0NCnlvdSBjYW4gc2VlIHRoZSBvdGhlciB2YXJpYWJsZXMgdGhhdCB3b3VsZCBu ZWVkIHRvIGJlIHVwZGF0ZWQgaWYgQ0Mgd2FzDQp1cGRhdGVkIGF0IHJ1bnRpbWUgZm9yIGxp YnRvb2wuDQoNCklmIHlvdSB3YW50IHRvIGRvIGEgcXVpY2sgdGVzdCBhbmQgY2hhbmdlIEND LCB5b3UgY2FuIGVkaXQgdGhlIGdlbmVyYXRlZA0KbGlidG9vbCB0byBkbyB0aGlzIGFuZCB0 aGVuIHJldmVydCB0aGUgY2hhbmdlIGFmdGVyIHlvdXIgdGVzdC4gSG93ZXZlciwNCnlvdSBj b3VsZCBhbHNvIGdlbmVyYXRlIG11bHRpcGxlIHN0YW5kYWxvbmUgdmVyc2lvbnMgb2YgbGli dG9vbCBhbmQNCnN3aXRjaCB3aGljaCBpcyByZWZlcmVuY2VkIHNvIHRoYXQgdGhlIG90aGVy IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZQ0Kc2V0IHByb3Blcmx5Lg0KDQpJIHdvdWxk IGNvbnNpZGVyIHRoaXMgdG8gYmUgbW9yZSBvZiBhIGZlYXR1cmUgcmVxdWVzdCB0aGFuIGEg YnVnIHdpdGgNCmxpYnRvb2wgdG8gYWxsb3cgZm9yIGRlZmF1bHRzIHNldCBkdXJpbmcgY29u ZmlndXJhdGlvbiB0byBiZSB1cGRhdGVkLA0KYnV0IHRoZXJlIG1heSBiZSBmaWxlcyBvdGhl ciB0aGFuIGxpYnRvb2wgZ2VuZXJhdGVkIGR1cmluZyBjb25maWd1cmF0aW9uDQp0aGF0IHdv dWxkIGFsc28gbmVlZCB0byBiZSB1cGRhdGVkLiBHZW5lcmFsbHksIEkgcmVjb21tZW5kIHJl Y29uZmlndXJpbmcNCnlvdXIgcHJvamVjdCB3aGVuZXZlciBDQyBpcyBjaGFuZ2VkLg0KDQot LSANCklsZWFuYSBEdW1pdHJlc2N1DQoNCkdQRyBQdWJsaWMgS2V5OiBGQTI2IENBNzggNEJF MSA4ODkyIDdGMjIgQjk5RiA2NTcwIEVBMDEgMTQ2RiA3MzU0DQoNCg== --------------G8KF08EbUdf0hPn9ptngmrht Content-Type: text/plain; charset=UTF-8; name="libtool-clang" Content-Disposition: attachment; filename="libtool-clang" Content-Transfer-Encoding: base64 IyEgL2Jpbi9iYXNoCiMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlnLnN0YXR1 cyAobGlidG9vbCkgMi41LjAuODEtM2NmNTIKIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhp cyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCgojIFByb3ZpZGUgZ2Vu ZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgojIFdyaXR0ZW4g YnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKCiMgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2Vl IHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiMgd2Fy cmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCgojIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQoj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwoj IEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLCBpZiB5b3UKIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3Jh bSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQKIyB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1h eSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgIHNhbWUKIyBkaXN0cmlidXRpb24gdGVy bXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiMKIyBHTlUg TGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQKIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoK CiMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5 IHRoaXMgc2NyaXB0LgphdmFpbGFibGVfdGFncz0nQ1hYIEY3NyBGQyBHTyBHQ0ogUkMgJwoK IyBDb25maWd1cmVkIGRlZmF1bHRzIGZvciBzeXNfbGliX2Rsc2VhcmNoX3BhdGggbXVuZ2lu Zy4KOiAke0xUX1NZU19MSUJSQVJZX1BBVEg9IiJ9CgojICMjIyBCRUdJTiBMSUJUT09MIENP TkZJRwoKIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/Cm1hY3JvX3Zl cnNpb249Mi41LjAuODEtM2NmNTIKbWFjcm9fcmV2aXNpb249Mi41LjAuODEKCiMgQXNzZW1i bGVyIHByb2dyYW0uCkFTPSJhcyIKCiMgRExMIGNyZWF0aW9uIHByb2dyYW0uCkRMTFRPT0w9 ImZhbHNlIgoKIyBPYmplY3QgZHVtcGVyIHByb2dyYW0uCk9CSkRVTVA9Im9iamR1bXAiCgoj IFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCmJ1aWxkX2xpYnRv b2xfbGlicz15ZXMKCiMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmll cy4KYnVpbGRfb2xkX2xpYnM9eWVzCgojIFdoYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxk LgpwaWNfbW9kZT1kZWZhdWx0CgojIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBm YXN0IGluc3RhbGxhdGlvbi4KZmFzdF9pbnN0YWxsPW5lZWRsZXNzCgojIFNoYXJlZCBhcmNo aXZlIG1lbWJlciBiYXNlbmFtZSxmb3IgZmlsZW5hbWUgYmFzZWQgc2hhcmVkIGxpYnJhcnkg dmVyc2lvbmluZyBvbiBBSVguCnNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPQoKIyBTaGVs bCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgpTSEVMTD0iL2Jpbi9iYXNo IgoKIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlcy4KRUNITz0i cHJpbnRmICVzXFxuIgoKIyBUaGUgUEFUSCBzZXBhcmF0b3IgZm9yIHRoZSBidWlsZCBzeXN0 ZW0uClBBVEhfU0VQQVJBVE9SPSI6IgoKIyBUaGUgaG9zdCBzeXN0ZW0uCmhvc3RfYWxpYXM9 Cmhvc3Q9eDg2XzY0LXBjLWxpbnV4LWdudQpob3N0X29zPWxpbnV4LWdudQoKIyBUaGUgYnVp bGQgc3lzdGVtLgpidWlsZF9hbGlhcz0KYnVpbGQ9eDg2XzY0LXBjLWxpbnV4LWdudQpidWls ZF9vcz1saW51eC1nbnUKCiMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRl IG91dHB1dC4KU0VEPSIvdXNyL2Jpbi9zZWQiCgojIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lk IGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgpYc2Vk PSIkU0VEIC1lIDFzL15YLy8iCgojIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25n IGxpbmVzLgpHUkVQPSIvdXNyL2Jpbi9ncmVwIgoKIyBBbiBFUkUgbWF0Y2hlci4KRUdSRVA9 Ii91c3IvYmluL2dyZXAgLUUiCgojIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KRkdSRVA9 Ii91c3IvYmluL2dyZXAgLUYiCgojIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlz dGVyLgpOTT0iL3Vzci9iaW4vbm0gLUIiCgojIFdoZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhh cmQgbGlua3MuCkxOX1M9ImxuIC1zIgoKIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBv ZiBhIGNvbW1hbmQ/Cm1heF9jbWRfbGVuPTE1NzI4NjQKCiMgT2JqZWN0IGZpbGUgc3VmZml4 IChub3JtYWxseSAibyIpLgpvYmpleHQ9bwoKIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChu b3JtYWxseSAiIikuCmV4ZWV4dD0KCiMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMg InVuc2V0Ii4KbHRfdW5zZXQ9dW5zZXQKCiMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4K U1AyTkw9InRyIFxcMDQwIFxcMDEyIgoKIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgpO TDJTUD0idHIgXFwwMTVcXDAxMiBcXDA0MFxcMDQwIgoKIyBjb252ZXJ0ICRidWlsZCBmaWxl IG5hbWVzIHRvICRob3N0IGZvcm1hdC4KdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRf ZmlsZV9ub29wCgojIGNvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQu CnRvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAoKIyBBIGZpbGUoY21k KSBwcm9ncmFtIHRoYXQgZGV0ZWN0cyBmaWxlIHR5cGVzLgpGSUxFQ01EPSJmaWxlIgoKIyBN ZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQg b2JqZWN0cy4KZGVwbGlic19jaGVja19tZXRob2Q9InBhc3NfYWxsIgoKIyBDb21tYW5kIHRv IHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgpmaWxlX21h Z2ljX2NtZD0iXCRNQUdJQ19DTUQiCgojIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3 aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgpmaWxlX21hZ2ljX2ds b2I9IiIKCiMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRl cGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgp3YW50X25vY2FzZWdsb2I9Im5v IgoKIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgpz aGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0icHJpbnRmICVzXFxuIgoKIyBUaGUgYXJjaGl2 ZXIuCkFSPSJhciIKCiMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUgKGJ5IGNvbmZpZ3Vy ZSkuCmx0X2FyX2ZsYWdzPWNyCgojIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgpBUl9G TEFHUz0ke0FSRkxBR1MtIiRsdF9hcl9mbGFncyJ9CgojIEhvdyB0byBmZWVkIGEgZmlsZSBs aXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KYXJjaGl2ZXJfbGlzdF9zcGVjPSJAIgoKIyBBIHN5 bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KU1RSSVA9InN0cmlwIgoKIyBDb21tYW5kcyB1c2Vk IHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuClJBTkxJQj0icmFubGliIgpvbGRf cG9zdGluc3RhbGxfY21kcz0iY2htb2QgNjQ0IFwkb2xkbGliflwkUkFOTElCIFwkdG9vbF9v bGRsaWIiCm9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9IiIKCiMgV2hldGhlciB0byB1c2UgYSBs b2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uLgpsb2NrX29sZF9hcmNoaXZlX2V4dHJh Y3Rpb249bm8KCiMgQSBDIGNvbXBpbGVyLgpMVENDPSJjbGFuZyIKCiMgTFRDQyBjb21waWxl ciBmbGFncy4KTFRDRkxBR1M9Ii1nIC1PMiIKCiMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFu ZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KZ2xvYmFs X3N5bWJvbF9waXBlPSIvdXNyL2Jpbi9zZWQgLW4gLWUgJ3MvXi4qWwkgXVxcKFtBQkNER0lS U1RXXVtBQkNER0lSU1RXXSpcXClbCSBdWwkgXSpcXChbX0EtWmEtel1bX0EtWmEtejAtOV0q XFwpXCQvXFwxIFxcMiBcXDIvcCcgfCAvdXNyL2Jpbi9zZWQgJy8gX19nbnVfbHRvL2QnIgoK IyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9u LgpnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSIvdXNyL2Jpbi9zZWQgLW4gLWUgJ3MvXlQgLiog XFwoLipcXClcJC9leHRlcm4gaW50IFxcMSgpOy9wJyAtZSAncy9eW0FCQ0RHSVJTVFddW0FC Q0RHSVJTVFddKiAuKiBcXCguKlxcKVwkL2V4dGVybiBjaGFyIFxcMTsvcCciCgojIFRyYW5z Zm9ybSB0aGUgb3V0cHV0IG9mIG5tIGludG8gYSBsaXN0IG9mIHN5bWJvbHMgdG8gbWFudWFs bHkgcmVsb2NhdGUuCmdsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSIiCgojIFRyYW5zZm9ybSB0 aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KZ2xvYmFsX3N5bWJv bF90b19jX25hbWVfYWRkcmVzcz0iL3Vzci9iaW4vc2VkIC1uIC1lICdzL146IFxcKC4qXFwp IC4qXCQvICB7XCJcXDFcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL15bQUJDREdJUlNUV11b QUJDREdJUlNUV10qIC4qIFxcKC4qXFwpXCQvICB7XCJcXDFcIiwgKHZvaWQgKikgXFwmXFwx fSwvcCciCgojIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJl c3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgpnbG9iYWxfc3ltYm9sX3RvX2Nf bmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9Ii91c3IvYmluL3NlZCAtbiAtZSAncy9eOiBcXCgu KlxcKSAuKlwkLyAge1wiXFwxXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eW0FCQ0RHSVJT VFddW0FCQ0RHSVJTVFddKiAuKiBcXChsaWIuKlxcKVwkLyAge1wiXFwxXCIsICh2b2lkICop IFxcJlxcMX0sL3AnIC1lICdzL15bQUJDREdJUlNUV11bQUJDREdJUlNUV10qIC4qIFxcKC4q XFwpXCQvICB7XCJsaWJcXDFcIiwgKHZvaWQgKikgXFwmXFwxfSwvcCciCgojIFRoZSBuYW1l IGxpc3RlciBpbnRlcmZhY2UuCm5tX2ludGVyZmFjZT0iQlNEIG5tIgoKIyBTcGVjaWZ5IGZp bGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTS4Kbm1fZmlsZV9saXN0X3Nw ZWM9IkAiCgojIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJh cmllcyxhbmQgd2hlcmUgb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgpsdF9z eXNyb290PQoKIyBDb21tYW5kIHRvIHRydW5jYXRlIGEgYmluYXJ5IHBpcGUuCmx0X3RydW5j YXRlX2Jpbj0iL3Vzci9iaW4vZGQgYnM9NDA5NiBjb3VudD0xIgoKIyBUaGUgbmFtZSBvZiB0 aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCm9i amRpcj0ubGlicwoKIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdp Y19jbWQgYmVnaW5zIHdpdGggImZpbGUiLgpNQUdJQ19DTUQ9ZmlsZQoKIyBNdXN0IHdlIGxv Y2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KbmVlZF9sb2Nrcz0ibm8iCgojIE1h bmlmZXN0IHRvb2wuCk1BTklGRVNUX1RPT0w9IjoiCgojIFRvb2wgdG8gbWFuaXB1bGF0ZSBh cmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCkRTWU1VVElM PSIiCgojIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBP UyBYLgpOTUVESVQ9IiIKCiMgVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBh cmNoaXZlcyBvbiBNYWMgT1MgWC4KTElQTz0iIgoKIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wg Zm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWC4KT1RPT0w9IiIKCiMgbGRkL3JlYWRl bGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEw LjQuCk9UT09MNjQ9IiIKCiMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgps aWJleHQ9YQoKIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4Kc2hy ZXh0X2NtZHM9Ii5zbyIKCiMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVk IHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KZXh0cmFjdF9leHBzeW1zX2Nt ZHM9IiIKCiMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGli dG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCiMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgp2YXJp YWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCBMRF9MSUJSQVJZX1BBVEggTERfUlVOX1BB VEggR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgoKIyBEbyB3 ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/Cm5lZWRfbGliX3ByZWZpeD1u bwoKIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwpuZWVkX3ZlcnNpb249 bm8KCiMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCnZlcnNpb25fdHlwZT1saW51eAoKIyBT aGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCnJ1bnBhdGhfdmFyPUxEX1JV Tl9QQVRICgojIFNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCnNobGlicGF0aF92YXI9 TERfTElCUkFSWV9QQVRICgojIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhh cmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8Kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5w YXRoPXllcwoKIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KbGlibmFtZV9zcGVj PSJsaWJcJG5hbWUiCgojIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMg dGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCiMgVGhlIGxhc3QgbmFtZSBpcyB0 aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRQpsaWJyYXJ5X25hbWVz X3NwZWM9IlwkbGlibmFtZVwkcmVsZWFzZVwkc2hhcmVkX2V4dFwkdmVyc3VmZml4IFwkbGli bmFtZVwkcmVsZWFzZVwkc2hhcmVkX2V4dFwkbWFqb3IgXCRsaWJuYW1lXCRzaGFyZWRfZXh0 IgoKIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20g dGhlIHJlYWwgbmFtZS4Kc29uYW1lX3NwZWM9IlwkbGlibmFtZVwkcmVsZWFzZVwkc2hhcmVk X2V4dFwkbWFqb3IiCgojIFBlcm1pc3Npb24gbW9kZSBvdmVycmlkZSBmb3IgaW5zdGFsbGF0 aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXMuCmluc3RhbGxfb3ZlcnJpZGVfbW9kZT0iIgoKIyBD b21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4K cG9zdGluc3RhbGxfY21kcz0iIgoKIyBDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxh dGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgpwb3N0dW5pbnN0YWxsX2NtZHM9IiIKCiMgQ29t bWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGlu IGEgZGlyZWN0b3J5LgpmaW5pc2hfY21kcz0iUEFUSD1cXFwiXFxcJFBBVEg6L3NiaW5cXFwi IGxkY29uZmlnIC1uIFwkbGliZGlyIgoKIyBBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBz aW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKIyBub3Qgc2hvd24uCmZp bmlzaF9ldmFsPSIiCgojIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0 aHMgaW50byBsaWJyYXJpZXMuCmhhcmRjb2RlX2ludG9fbGlicz15ZXMKCiMgQ29tcGlsZS10 aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgpzeXNfbGliX3NlYXJjaF9w YXRoX3NwZWM9Ii91c3IvbGliL2xsdm0tMTYvbGliL2NsYW5nLzE2IC91c3IvbGliL2djYy94 ODZfNjQtbGludXgtZ251LzE0IC91c3IvbGliNjQgL2xpYi94ODZfNjQtbGludXgtZ251IC9s aWI2NCAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251IC9saWIgL3Vzci9saWIgIgoKIyBEZXRl Y3RlZCBydW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4Kc3lzX2xp Yl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIvYWFy Y2g2NC1saW51eC1nbnUgL2xpYi9hYXJjaDY0LWxpbnV4LWdudSAvdXNyL2xpYi9hYXJjaDY0 LWxpbnV4LWdudSAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmZha2Vyb290IC91c3Iv bG9jYWwvbGliL2kzODYtbGludXgtZ251IC9saWIvaTM4Ni1saW51eC1nbnUgL3Vzci9saWIv aTM4Ni1saW51eC1nbnUgL3Vzci9sb2NhbC9saWIvaTY4Ni1saW51eC1nbnUgL2xpYi9pNjg2 LWxpbnV4LWdudSAvdXNyL2xpYi9pNjg2LWxpbnV4LWdudSAvdXNyL2xvY2FsL2xpYiAvdXNy L2xpYi92bXdhcmUtdG9vbHMvbGliMzIvbGlidm1HdWVzdExpYi5zbyAvdXNyL2xpYi92bXdh cmUtdG9vbHMvbGliNjQvbGlidm1HdWVzdExpYi5zbyAvdXNyL2xpYi92bXdhcmUtdG9vbHMv bGliMzIvbGlidm1HdWVzdExpYkphdmEuc28gL3Vzci9saWIvdm13YXJlLXRvb2xzL2xpYjY0 L2xpYnZtR3Vlc3RMaWJKYXZhLnNvIC91c3IvbGliL3Ztd2FyZS10b29scy9saWIzMi9saWJE ZXBsb3lQa2cuc28gL3Vzci9saWIvdm13YXJlLXRvb2xzL2xpYjY0L2xpYkRlcGxveVBrZy5z byAvdXNyL2xvY2FsL2xpYi94ODZfNjQtbGludXgtZ251IC9saWIveDg2XzY0LWxpbnV4LWdu dSAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251IC9saWIzMiAvdXNyL2xpYjMyICIKCiMgRXhw bGljaXQgTFRfU1lTX0xJQlJBUllfUEFUSCBzZXQgZHVyaW5nIC4vY29uZmlndXJlIHRpbWUu CmNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9IiIKCiMgV2hldGhlciBkbG9w ZW4gaXMgc3VwcG9ydGVkLgpkbG9wZW5fc3VwcG9ydD15ZXMKCiMgV2hldGhlciBkbG9wZW4g b2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgpkbG9wZW5fc2VsZj15ZXMKCiMgV2hldGhlciBk bG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgpkbG9w ZW5fc2VsZl9zdGF0aWM9bm8KCiMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgpvbGRf c3RyaXBsaWI9InN0cmlwIC0tc3RyaXAtZGVidWciCnN0cmlwbGliPSJzdHJpcCAtLXN0cmlw LXVubmVlZGVkIgoKCiMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KTEQ9 Ii91c3IvYmluL2xkIC1tIGVsZl94ODZfNjQiCgojIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJs ZSBvYmplY3QgZmlsZXMuCnJlbG9hZF9mbGFnPSIgLXIiCnJlbG9hZF9jbWRzPSJcJExEXCRy ZWxvYWRfZmxhZyAtbyBcJG91dHB1dFwkcmVsb2FkX29ianMiCgojIENvbW1hbmRzIHVzZWQg dG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2NtZHM9IlwkQVIg XCRBUl9GTEFHUyBcJG9sZGxpYlwkb2xkb2Jqc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgoK IyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgpDQz0iY2xhbmciCgojIElzIHRoZSBj b21waWxlciB0aGUgR05VIGNvbXBpbGVyPwp3aXRoX2djYz15ZXMKCiMgQ29tcGlsZXIgZmxh ZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4Kbm9fYnVpbHRpbl9mbGFnPSIgLWZu by1idWlsdGluIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCgojIEFkZGl0aW9uYWwgY29t cGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KcGljX2ZsYWc9IiAt ZlBJQyAtRFBJQyIKCiMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBj b21waWxlci4Kd2w9Ii1XbCwiCgojIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWlj IGxpbmtpbmcuCmxpbmtfc3RhdGljX2ZsYWc9Ii1zdGF0aWMiCgojIERvZXMgY29tcGlsZXIg c2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KY29tcGlsZXJfY19v PSJ5ZXMiCgojIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJl ZCBsaWJyYXJpZXMuCmJ1aWxkX2xpYnRvb2xfbmVlZF9sYz1ubwoKIyBXaGV0aGVyIG9yIG5v dCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGlj LgphbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KCiMgQ29tcGls ZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KZXhwb3J0X2R5bmFtaWNfZmxh Z19zcGVjPSJcJHdsLS1leHBvcnQtZHluYW1pYyIKCiMgQ29tcGlsZXIgZmxhZyB0byBnZW5l cmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgp3aG9sZV9hcmNo aXZlX2ZsYWdfc3BlYz0iXCR3bC0td2hvbGUtYXJjaGl2ZVwkY29udmVuaWVuY2UgXCR3bC0t bm8td2hvbGUtYXJjaGl2ZSIKCiMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBw YXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCmNvbXBpbGVyX25lZWRzX29iamVjdD0ibm8i CgojIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUu Cm9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKCiMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9s ZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgpv bGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1 aWxkIGEgc2hhcmVkIGFyY2hpdmUuCmFyY2hpdmVfY21kcz0iXCRDQyAtc2hhcmVkIFwkcGlj X2ZsYWcgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29uYW1l IFwkd2xcJHNvbmFtZSAtbyBcJGxpYiIKYXJjaGl2ZV9leHBzeW1fY21kcz0iZWNobyBcXFwi eyBnbG9iYWw6XFxcIiA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUudmVyfgogICAgICAg ICAgICBjYXQgXCRleHBvcnRfc3ltYm9scyB8IFwkU0VEIC1lIFxcXCJzL1xcXFwoLipcXFxc KS9cXFxcMTsvXFxcIiA+PiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlcn4KICAgICAg ICAgICAgZWNobyBcXFwibG9jYWw6ICo7IH07XFxcIiA+PiBcJG91dHB1dF9vYmpkaXIvXCRs aWJuYW1lLnZlcn4KICAgICAgICAgICAgXCRDQyAtc2hhcmVkIFwkcGljX2ZsYWcgXCRsaWJv YmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29uYW1lIFwkd2xcJHNvbmFt ZSBcJHdsLXZlcnNpb24tc2NyaXB0IFwkd2xcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZl ciAtbyBcJGxpYiIKCiMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVs ZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZwojIGEgc2hhcmVkIGFyY2hpdmUuCm1vZHVs ZV9jbWRzPSIiCm1vZHVsZV9leHBzeW1fY21kcz0iIgoKIyBXaGV0aGVyIHdlIGFyZSBidWls ZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCndpdGhfZ251X2xkPSJ5ZXMiCgojIEZsYWcgdGhh dCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJl IGJ1aWx0LgphbGxvd191bmRlZmluZWRfZmxhZz0iIgoKIyBGbGFnIHRoYXQgZW5mb3JjZXMg bm8gdW5kZWZpbmVkIHN5bWJvbHMuCm5vX3VuZGVmaW5lZF9mbGFnPSIiCgojIEZsYWcgdG8g aGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgojIFRoaXMg bXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdApoYXJkY29kZV9saWJk aXJfZmxhZ19zcGVjPSJcJHdsLXJwYXRoIFwkd2xcJGxpYmRpciIKCiMgV2hldGhlciB3ZSBu ZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4K aGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iIgoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcg RElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKIyBESVIg aW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfZGlyZWN0PW5vCgojIFNldCB0 byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5n IGhhcmRjb2RlcwojIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVz dWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwojICJhYnNvbHV0ZSIsaS5lLiBpbXBvc3Np YmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICRzaGxpYnBhdGhfdmFyIGlmIHRoZQojIGxpYnJh cnkgaXMgcmVsb2NhdGVkLgpoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KCiMgU2V0IHRv ICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2Rl cyBESVIKIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgpoYXJkY29kZV9taW51c19MPW5v CgojIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlu a2luZyBoYXJkY29kZXMgRElSCiMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNv ZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAoKIyBTZXQgdG8gInllcyIgaWYgYnVpbGRp bmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKIyBpbnRv IHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFi bGVzIGxpbmtlZAojIGFnYWluc3QgaXQuCmhhcmRjb2RlX2F1dG9tYXRpYz1ubwoKIyBTZXQg dG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJh cmllcwojIHRvIHJ1bnRpbWUgcGF0aCBsaXN0Lgppbmhlcml0X3JwYXRoPW5vCgojIFdoZXRo ZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRl bmN5IGxpYnJhcmllcy4KbGlua19hbGxfZGVwbGlicz11bmtub3duCgojIFNldCB0byAieWVz IiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KYWx3YXlzX2V4cG9ydF9zeW1i b2xzPW5vCgojIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCmV4cG9y dF9zeW1ib2xzX2NtZHM9IlwkTk0gXCRsaWJvYmpzIFwkY29udmVuaWVuY2UgfCBcJGdsb2Jh bF9zeW1ib2xfcGlwZSB8IFwkU0VEICdzLy4qIC8vJyB8IHNvcnQgfCB1bmlxID4gXCRleHBv cnRfc3ltYm9scyIKCiMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRo ZSBwcmVsb2FkZWQgc3ltYm9scy4KZXhjbHVkZV9leHBzeW1zPSJfR0xPQkFMX09GRlNFVF9U QUJMRV98X0dMT0JBTF9fRltJRF1fLioiCgojIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBi ZSBleHBvcnRlZC4KaW5jbHVkZV9leHBzeW1zPSIiCgojIENvbW1hbmRzIG5lY2Vzc2FyeSBm b3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVz LgpwcmVsaW5rX2NtZHM9IiIKCiMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcg bGlua2luZyBwcm9ncmFtcy4KcG9zdGxpbmtfY21kcz0iIgoKIyBTcGVjaWZ5IGZpbGVuYW1l IGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCmZpbGVfbGlzdF9zcGVjPSIiCgojIEhvdyB0byBo YXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgpoYXJk Y29kZV9hY3Rpb249aW1tZWRpYXRlCgojIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0 aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KY29tcGlsZXJf bGliX3NlYXJjaF9kaXJzPSIiCgojIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5k IGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bwojIGNyZWF0ZSBhIHNoYXJlZCBs aWJyYXJ5LgpwcmVkZXBfb2JqZWN0cz0iIgpwb3N0ZGVwX29iamVjdHM9IiIKcHJlZGVwcz0i Igpwb3N0ZGVwcz0iIgoKIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFs bHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwojIGEgc2hhcmVkIGxpYnJhcnkuCmNv bXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0iIgoKIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCgoK IyAjIyMgQkVHSU4gRlVOQ1RJT05TIFNIQVJFRCBXSVRIIENPTkZJR1VSRQoKIyBmdW5jX211 bmdlX3BhdGhfbGlzdCBWQVJJQUJMRSBQQVRICiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIyBWQVJJQUJMRSBpcyBuYW1lIG9mIHZhcmlhYmxlIGNvbnRhaW5pbmcg X3NwYWNlXyBzZXBhcmF0ZWQgbGlzdCBvZgojIGRpcmVjdG9yaWVzIHRvIGJlIG11bmdlZCBi eSB0aGUgY29udGVudHMgb2YgUEFUSCwgd2hpY2ggaXMgc3RyaW5nCiMgaGF2aW5nIGEgZm9y bWF0OgojICJESVJbOkRJUl06IgojICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJl IHByZXBlbmRlZCB0byBWQVJJQUJMRQojICI6RElSWzpESVJdIgojICAgICAgIHN0cmluZyAi RElSWyBESVJdIiB3aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklBQkxFCiMgIkRJUlBbOkRJUlBd OjpbRElSQTpdRElSQSIKIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHBy ZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCiMgICAgICAgIkRJUkFbIERJUkFdIiB3 aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklBQkxFCiMgIkRJUls6RElSXSIKIyAgICAgICBWQVJJ QUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCmZ1bmNfbXVuZ2VfcGF0aF9s aXN0ICgpCnsKICAgIGNhc2UgeCQyIGluCiAgICB4KQogICAgICAgIDs7CiAgICAqOikKICAg ICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgIFwkJDFcIgogICAg ICAgIDs7CiAgICB4OiopCiAgICAgICAgZXZhbCAkMT1cIlwkJDEgYCRFQ0hPICQyIHwgJFNF RCAncy86LyAvZydgXCIKICAgICAgICA7OwogICAgKjo6KikKICAgICAgICBldmFsICQxPVwi XCQkMVwgYCRFQ0hPICQyIHwgJFNFRCAtZSAncy8uKjo6Ly8nIC1lICdzLzovIC9nJ2BcIgog ICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEIC1lICdzLzo6LiovLycgLWUgJ3Mv Oi8gL2cnYFwgXCQkMVwiCiAgICAgICAgOzsKICAgICopCiAgICAgICAgZXZhbCAkMT1cImAk RUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCiAgICAgICAgOzsKICAgIGVzYWMKfQoKCiMg Q2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBh bmQgY3Jvc3MtcHJlZml4LgpmdW5jX2NjX2Jhc2VuYW1lICgpCnsKICAgIGZvciBjY190ZW1w IGluICQqIiI7IGRvCiAgICAgIGNhc2UgJGNjX3RlbXAgaW4KICAgICAgICBjb21waWxlIHwg KltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CiAgICAgICAgZGlz dGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKICAgICAg ICBcLSopIDs7CiAgICAgICAgKikgYnJlYWs7OwogICAgICBlc2FjCiAgICBkb25lCiAgICBm dW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiov JSU7IHMlXiRob3N0X2FsaWFzLSUlImAKfQoKCiMgIyMjIEVORCBGVU5DVElPTlMgU0hBUkVE IFdJVEggQ09ORklHVVJFCgojISAvdXNyL2Jpbi9lbnYgc2gKIyMgRE8gTk9UIEVESVQgLSBU aGlzIGZpbGUgZ2VuZXJhdGVkIGZyb20gLi9idWlsZC1hdXgvbHRtYWluLmluCiMjICAgICAg ICAgICAgICAgYnkgaW5saW5lLXNvdXJjZSB2MjAxOS0wMi0xOS4xNQoKIyBsaWJ0b29sIChH TlUgbGlidG9vbCkgMi41LjAuODEtM2NmNTIKIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJh cnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6 aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgoKIyBDb3B5cmlnaHQgKEMpIDE5 OTYtMjAxOSwgMjAyMS0yMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojIFRo aXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0 aW9ucy4gIFRoZXJlIGlzIE5PCiMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCgojIEdOVSBMaWJ0 b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAojIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMg ZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKIyBpcyBidWlsdCB1 c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUK IyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9m IHRoYXQgcHJvZ3JhbS4KIwojIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAojIFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQoj IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgoKUFJPR1JBTT1saWJ0b29sClBBQ0tBR0U9bGlidG9v bApWRVJTSU9OPTIuNS4wLjgxLTNjZjUyCnBhY2thZ2VfcmV2aXNpb249Mi41LjAuODEKCgoj IyAtLS0tLS0gIyMKIyMgVXNhZ2UuICMjCiMjIC0tLS0tLSAjIwoKIyBSdW4gJy4vbGlidG9v bCAtLWhlbHAnIGZvciBoZWxwIHdpdGggdXNpbmcgdGhpcyBzY3JpcHQgZnJvbSB0aGUKIyBj b21tYW5kIGxpbmUuCgoKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwoj IyBVc2VyIG92ZXJyaWRhYmxlIGNvbW1hbmQgcGF0aHMuICMjCiMjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gIyMKCiMgQWZ0ZXIgY29uZmlndXJlIGNvbXBsZXRlcywgaXQg aGFzIGEgYmV0dGVyIGlkZWEgb2Ygc29tZSBvZiB0aGUKIyBzaGVsbCB0b29scyB3ZSBuZWVk IHRoYW4gdGhlIGRlZmF1bHRzIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBzaGFyZWQKIyB3aXRo IGJvb3RzdHJhcCwgc28gc2V0IHRob3NlIGhlcmUgd2hlcmUgdGhleSBjYW4gc3RpbGwgYmUg b3Zlci0KIyByaWRkZW4gYnkgdGhlIHVzZXIsIGJ1dCBvdGhlcndpc2UgdGFrZSBwcmVjZWRl bmNlLgoKOiAke0FVVE9DT05GPSJhdXRvY29uZiJ9CjogJHtBVVRPTUFLRT0iYXV0b21ha2Ui fQoKCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiMjIFNvdXJjZSBleHRlcm5h bCBsaWJyYXJpZXMuICMjCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCgojIE11 Y2ggb2Ygb3VyIGxvdy1sZXZlbCBmdW5jdGlvbmFsaXR5IG5lZWRzIHRvIGJlIHNvdXJjZWQg ZnJvbSBleHRlcm5hbAojIGxpYnJhcmllcywgd2hpY2ggYXJlIGluc3RhbGxlZCB0byAkcGtn YXV4ZGlyLgoKIyBTZXQgYSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBzY3JpcHQuCnNjcmlw dHZlcnNpb249MjAxOS0wMi0xOS4xNTsgIyBVVEMKCiMgR2VuZXJhbCBzaGVsbCBzY3JpcHQg Ym9pbGVyIHBsYXRlLCBhbmQgaGVscGVyIGZ1bmN0aW9ucy4KIyBXcml0dGVuIGJ5IEdhcnkg Vi4gVmF1Z2hhbiwgMjAwNAoKIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUuICBUaGVyZSBpcyBO TyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgojCiMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTks IDIwMjEsIDIwMjMtMjAyNCBCb290c3RyYXAgQXV0aG9ycwojCiMgVGhpcyBmaWxlIGlzIGR1 YWwgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgbGljZW5zZQojIDxodHRw czovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4sIGFuZCBHUEwgdmVyc2lvbiAyIG9y IGxhdGVyCiMgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sPi4g IFlvdSBtdXN0IGFwcGx5IG9uZSBvZgojIHRoZXNlIGxpY2Vuc2VzIHdoZW4gdXNpbmcgb3Ig cmVkaXN0cmlidXRpbmcgdGhpcyBzb2Z0d2FyZSBvciBhbnkgb2YKIyB0aGUgZmlsZXMgd2l0 aGluIGl0LiAgU2VlIHRoZSBVUkxzIGFib3ZlLCBvciB0aGUgZmlsZSBgTElDRU5TRWAKIyBp bmNsdWRlZCBpbiB0aGUgQm9vdHN0cmFwIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGZ1bGwgbGlj ZW5zZSB0ZXh0cy4KCiMgUGxlYXNlIHJlcG9ydCBidWdzIG9yIHByb3Bvc2UgcGF0Y2hlcyB0 bzoKIyA8aHR0cHM6Ly9naXRodWIuY29tL2dudWxpYi1tb2R1bGVzL2Jvb3RzdHJhcC9pc3N1 ZXM+CgoKIyMgLS0tLS0tICMjCiMjIFVzYWdlLiAjIwojIyAtLS0tLS0gIyMKCiMgRXZhbHVh dGUgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3VyIHNjcmlwdCB0byBnYWluIGFjY2Vz cyB0bwojIHRoZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBkZWZpbmVkIGhlcmU6CiMKIyAg IC4gYGVjaG8gIiQwIiB8ICR7U0VELXNlZH0gJ3N8W14vXSokfHwnYC9idWlsZC1hdXgvZnVu Y2xpYi5zaAojCiMgSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgYW55IG9mIHRoZSBkZWZhdWx0 IGVudmlyb25tZW50IHZhcmlhYmxlCiMgc2V0dGluZ3MsIGRvIHRoYXQgYmVmb3JlIGV2YWx1 YXRpbmcgdGhpcyBmaWxlLgoKCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiMjIFNoZWxs IG5vcm1hbGlzYXRpb24uICMjCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCgojIFNvbWUg c2hlbGxzIG5lZWQgYSBsaXR0bGUgaGVscCB0byBiZSBhcyBCb3VybmUgY29tcGF0aWJsZSBh cyBwb3NzaWJsZS4KIyBCZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgbWFrZSBzdXJlIGFs bCB0aGF0IGhlbHAgaGFzIGJlZW4gcHJvdmlkZWQhCgpEVUFMQ0FTRT0xOyBleHBvcnQgRFVB TENBU0UgIyBmb3IgTUtTIHNoCmlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYg KGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgZW11bGF0ZSBzaAogIE5V TExDTUQ9OgogICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcg b24gJHsxKyIkQCJ9LCB3aGljaAogICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlz YWJsZSB0aGlzIGZlYXR1cmUuCiAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgc2V0 b3B0IE5PX0dMT0JfU1VCU1QKZWxzZQogIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBp biAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsgZXNhYwpmaQoKIyBOTFMgbnVpc2FuY2VzOiBX ZSBzYXZlIHRoZSBvbGQgdmFsdWVzIGluIGNhc2UgdGhleSBhcmUgcmVxdWlyZWQgbGF0ZXIu Cl9HX3VzZXJfbG9jYWxlPQpfR19zYWZlX2xvY2FsZT0KZm9yIF9HX3ZhciBpbiBMQU5HIExB TkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCmRvCiAgZXZh bCAiaWYgdGVzdCBzZXQgPSBcIlwkeyRfR192YXIrc2V0fVwiOyB0aGVuCiAgICAgICAgICBz YXZlXyRfR192YXI9XCQkX0dfdmFyCiAgICAgICAgICAkX0dfdmFyPUMKCSAgZXhwb3J0ICRf R192YXIKCSAgX0dfdXNlcl9sb2NhbGU9XCIkX0dfdmFyPVxcXCRzYXZlX1wkX0dfdmFyOyBc JF9HX3VzZXJfbG9jYWxlXCIKCSAgX0dfc2FmZV9sb2NhbGU9XCIkX0dfdmFyPUM7IFwkX0df c2FmZV9sb2NhbGVcIgoJZmkiCmRvbmUKIyBUaGVzZSBOTFMgdmFycyBhcmUgc2V0IHVuY29u ZGl0aW9uYWxseSAoYm9vdHN0cmFwIGlzc3VlICMyNCkuICBVbnNldCB0aG9zZQojIGluIGNh c2UgdGhlIGVudmlyb25tZW50IHJlc2V0IGlzIG5lZWRlZCBsYXRlciBhbmQgdGhlICRzYXZl XyogdmFyaWFudCBpcyBub3QKIyBkZWZpbmVkIChzZWUgdGhlIGNvZGUgYWJvdmUpLgpMQ19B TEw9QwpMQU5HVUFHRT1DCmV4cG9ydCBMQU5HVUFHRSBMQ19BTEwKCiMgTWFrZSBzdXJlIElG UyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CnNwPScgJwpubD0nCicKSUZTPSIkc3AJJG5sIgoK IyBUaGVyZSBhcmUgYXBwYXJlbnRseSBzb21lIHN5c3RlbXMgdGhhdCB1c2UgJzsnIGFzIGEg UEFUSCBzZXBhcmF0b3IhCmlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0 OyB0aGVuCiAgUEFUSF9TRVBBUkFUT1I9OgogIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0k UEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKICAgIChQQVRIPScvYmluOi9i aW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CiAgICAgIFBB VEhfU0VQQVJBVE9SPSc7JwogIH0KZmkKCgojIGZ1bmNfdW5zZXQgVkFSCiMgLS0tLS0tLS0t LS0tLS0KIyBQb3J0YWJseSB1bnNldCBWQVIuCiMgSW4gc29tZSBzaGVsbHMsIGFuICd1bnNl dCBWQVInIHN0YXRlbWVudCBsZWF2ZXMgYSBub24temVybyByZXR1cm4KIyBzdGF0dXMgaWYg VkFSIGlzIGFscmVhZHkgdW5zZXQsIHdoaWNoIG1pZ2h0IGJlIHByb2JsZW1hdGljIGlmIHRo ZQojIHN0YXRlbWVudCBpcyB1c2VkIGF0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiAodGh1cyBw b2lzb25pbmcgaXRzIHJldHVybgojIHZhbHVlKSBvciB3aGVuICdzZXQgLWUnIGlzIGFjdGl2 ZSAoY2F1c2luZyBldmVuIGEgc3B1cmlvdXMgYWJvcnQgb2YKIyB0aGUgc2NyaXB0IGluIHRo aXMgY2FzZSkuCmZ1bmNfdW5zZXQgKCkKewogICAgeyBldmFsICQxPTsgKGV2YWwgdW5zZXQg JDEpID4vZGV2L251bGwgMj4mMSAmJiBldmFsIHVuc2V0ICQxIHx8IDogOyB9Cn0KCgojIE1h a2Ugc3VyZSBDRFBBVEggZG9lc24ndCBjYXVzZSBgY2RgIGNvbW1hbmRzIHRvIG91dHB1dCB0 aGUgdGFyZ2V0IGRpci4KZnVuY191bnNldCBDRFBBVEgKCiMgTWFrZSBzdXJlICR7LEUsRn1H UkVQIGJlaGF2ZSBzYW5lbHkuCmZ1bmNfdW5zZXQgR1JFUF9PUFRJT05TCgoKIyMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAjIwojIyBMb2NhdGUgY29tbWFuZCB1dGlsaXRpZXMuICMj CiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKCgojIGZ1bmNfZXhlY3V0YWJsZV9w IEZJTEUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ2hlY2sgdGhhdCBGSUxFIGlzIGFu IGV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgpmdW5jX2V4ZWN1dGFibGVfcCAoKQp7CiAgICB0 ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCn0KCgojIGZ1bmNfcGF0aF9wcm9ncyBQUk9H U19MSVNUIENIRUNLX0ZVTkMgW1BBVEhdCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIyBTZWFyY2ggZm9yIGVpdGhlciBhIHByb2dyYW0gdGhhdCBy ZXNwb25kcyB0byAtLXZlcnNpb24gd2l0aCBvdXRwdXQKIyBjb250YWluaW5nICJHTlUiLCBv ciBlbHNlIHJldHVybmVkIGJ5IENIRUNLX0ZVTkMgb3RoZXJ3aXNlLCBieQojIHRyeWluZyBh bGwgdGhlIGRpcmVjdG9yaWVzIGluIFBBVEggd2l0aCBlYWNoIG9mIHRoZSBlbGVtZW50cyBv ZgojIFBST0dTX0xJU1QuCiMKIyBDSEVDS19GVU5DIHNob3VsZCBhY2NlcHQgdGhlIHBhdGgg dG8gYSBjYW5kaWRhdGUgcHJvZ3JhbSwgYW5kCiMgc2V0ICRmdW5jX2NoZWNrX3Byb2dfcmVz dWx0IGlmIGl0IHRydW5jYXRlcyBpdHMgb3V0cHV0IGxlc3MgdGhhbgojICRfR19wYXRoX3By b2dfbWF4IGNoYXJhY3RlcnMuCmZ1bmNfcGF0aF9wcm9ncyAoKQp7CiAgICBfR19wcm9nc19s aXN0PSQxCiAgICBfR19jaGVja19mdW5jPSQyCiAgICBfR19QQVRIPSR7My0iJFBBVEgifQoK ICAgIF9HX3BhdGhfcHJvZ19tYXg9MAogICAgX0dfcGF0aF9wcm9nX2ZvdW5kPWZhbHNlCiAg ICBfR19zYXZlX0lGUz0kSUZTOyBJRlM9JHtQQVRIX1NFUEFSQVRPUi06fQogICAgZm9yIF9H X2RpciBpbiAkX0dfUEFUSDsgZG8KICAgICAgSUZTPSRfR19zYXZlX0lGUwogICAgICB0ZXN0 IC16ICIkX0dfZGlyIiAmJiBfR19kaXI9LgogICAgICBmb3IgX0dfcHJvZ19uYW1lIGluICRf R19wcm9nc19saXN0OyBkbwogICAgICAgIGZvciBfZXhlZXh0IGluICcnIC5FWEU7IGRvCiAg ICAgICAgICBfR19wYXRoX3Byb2c9JF9HX2Rpci8kX0dfcHJvZ19uYW1lJF9leGVleHQKICAg ICAgICAgIGZ1bmNfZXhlY3V0YWJsZV9wICIkX0dfcGF0aF9wcm9nIiB8fCBjb250aW51ZQog ICAgICAgICAgY2FzZSBgIiRfR19wYXRoX3Byb2ciIC0tdmVyc2lvbiAyPiYxYCBpbgogICAg ICAgICAgICAqR05VKikgZnVuY19wYXRoX3Byb2dzX3Jlc3VsdD0kX0dfcGF0aF9wcm9nIF9H X3BhdGhfcHJvZ19mb3VuZD06IDs7CiAgICAgICAgICAgICopICAgICAkX0dfY2hlY2tfZnVu YyAkX0dfcGF0aF9wcm9nCgkJICAgZnVuY19wYXRoX3Byb2dzX3Jlc3VsdD0kZnVuY19jaGVj a19wcm9nX3Jlc3VsdAoJCSAgIDs7CiAgICAgICAgICBlc2FjCiAgICAgICAgICAkX0dfcGF0 aF9wcm9nX2ZvdW5kICYmIGJyZWFrIDMKICAgICAgICBkb25lCiAgICAgIGRvbmUKICAgIGRv bmUKICAgIElGUz0kX0dfc2F2ZV9JRlMKICAgIHRlc3QgLXogIiRmdW5jX3BhdGhfcHJvZ3Nf cmVzdWx0IiAmJiB7CiAgICAgIGVjaG8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZv dW5kIGluIFwkUEFUSCIgPiYyCiAgICAgIGV4aXQgMQogICAgfQp9CgoKIyBXZSB3YW50IHRv IGJlIGFibGUgdG8gdXNlIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGJlZm9yZSBjb25m aWd1cmUKIyBoYXMgZmlndXJlZCBvdXQgd2hlcmUgdGhlIGJlc3QgYmluYXJpZXMgYXJlIGtl cHQsIHdoaWNoIG1lYW5zIHdlIGhhdmUKIyB0byBzZWFyY2ggZm9yIHRoZW0gb3Vyc2VsdmVz IC0gZXhjZXB0IHdoZW4gdGhlIHJlc3VsdHMgYXJlIGFscmVhZHkgc2V0CiMgd2hlcmUgd2Ug c2tpcCB0aGUgc2VhcmNoZXMuCgojIFVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgYnkgc2V0 dGluZyBTRUQsIHNlYXJjaCB0aGUgcGF0aCBmb3IgZWl0aGVyIEdOVQojIHNlZCwgb3IgdGhl IHNlZCB0aGF0IHRydW5jYXRlcyBpdHMgb3V0cHV0IHRoZSBsZWFzdC4KdGVzdCAteiAiJFNF RCIgJiYgewogIF9HX3NlZF9zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCiAgZm9yIF9HX2kg aW4gMSAyIDMgNCA1IDYgNzsgZG8KICAgIF9HX3NlZF9zY3JpcHQ9JF9HX3NlZF9zY3JpcHQk bmwkX0dfc2VkX3NjcmlwdAogIGRvbmUKICBlY2hvICIkX0dfc2VkX3NjcmlwdCIgMj4vZGV2 L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKICBfR19zZWRfc2NyaXB0PQoKICBmdW5j X2NoZWNrX3Byb2dfc2VkICgpCiAgewogICAgX0dfcGF0aF9wcm9nPSQxCgogICAgX0dfY291 bnQ9MAogICAgcHJpbnRmIDAxMjM0NTY3ODkgPmNvbmZ0ZXN0LmluCiAgICB3aGlsZSA6CiAg ICBkbwogICAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAog ICAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KICAgICAgY3AgY29uZnRlc3QuaW4g Y29uZnRlc3QubmwKICAgICAgZWNobyAnJyA+PiBjb25mdGVzdC5ubAogICAgICAiJF9HX3Bh dGhfcHJvZyIgLWYgY29uZnRlc3Quc2VkIDxjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IDI+ L2Rldi9udWxsIHx8IGJyZWFrCiAgICAgIGRpZmYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5s ID4vZGV2L251bGwgMj4mMSB8fCBicmVhawogICAgICBfR19jb3VudD1gZXhwciAkX0dfY291 bnQgKyAxYAogICAgICBpZiB0ZXN0ICIkX0dfY291bnQiIC1ndCAiJF9HX3BhdGhfcHJvZ19t YXgiOyB0aGVuCiAgICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAg bG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCiAgICAgICAgZnVuY19jaGVja19wcm9nX3Jlc3Vs dD0kX0dfcGF0aF9wcm9nCiAgICAgICAgX0dfcGF0aF9wcm9nX21heD0kX0dfY291bnQKICAg ICAgZmkKICAgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFu IGVub3VnaAogICAgICB0ZXN0IDEwIC1sdCAiJF9HX2NvdW50IiAmJiBicmVhawogICAgZG9u ZQogICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0 ZXN0Lm91dAogIH0KCiAgZnVuY19wYXRoX3Byb2dzICJzZWQgZ3NlZCIgZnVuY19jaGVja19w cm9nX3NlZCAiJFBBVEg6L3Vzci94cGc0L2JpbiIKICBybSAtZiBjb25mdGVzdC5zZWQKICBT RUQ9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKfQoKCiMgVW5sZXNzIHRoZSB1c2VyIG92ZXJy aWRlcyBieSBzZXR0aW5nIEdSRVAsIHNlYXJjaCB0aGUgcGF0aCBmb3IgZWl0aGVyIEdOVQoj IGdyZXAsIG9yIHRoZSBncmVwIHRoYXQgdHJ1bmNhdGVzIGl0cyBvdXRwdXQgdGhlIGxlYXN0 Lgp0ZXN0IC16ICIkR1JFUCIgJiYgewogIGZ1bmNfY2hlY2tfcHJvZ19ncmVwICgpCiAgewog ICAgX0dfcGF0aF9wcm9nPSQxCgogICAgX0dfY291bnQ9MAogICAgX0dfcGF0aF9wcm9nX21h eD0wCiAgICBwcmludGYgMDEyMzQ1Njc4OSA+Y29uZnRlc3QuaW4KICAgIHdoaWxlIDoKICAg IGRvCiAgICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCiAg ICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgogICAgICBjcCBjb25mdGVzdC5pbiBj b25mdGVzdC5ubAogICAgICBlY2hvICdHUkVQJyA+PiBjb25mdGVzdC5ubAogICAgICAiJF9H X3BhdGhfcHJvZyIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPGNvbmZ0ZXN0 Lm5sID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGwgfHwgYnJlYWsKICAgICAgZGlmZiBjb25m dGVzdC5vdXQgY29uZnRlc3QubmwgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCiAgICAgIF9H X2NvdW50PWBleHByICRfR19jb3VudCArIDFgCiAgICAgIGlmIHRlc3QgIiRfR19jb3VudCIg LWd0ICIkX0dfcGF0aF9wcm9nX21heCI7IHRoZW4KICAgICAgICAjIEJlc3Qgb25lIHNvIGZh ciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKICAgICAgICBm dW5jX2NoZWNrX3Byb2dfcmVzdWx0PSRfR19wYXRoX3Byb2cKICAgICAgICBfR19wYXRoX3By b2dfbWF4PSRfR19jb3VudAogICAgICBmaQogICAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBp bnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCiAgICAgIHRlc3QgMTAgLWx0ICIkX0dfY291 bnQiICYmIGJyZWFrCiAgICBkb25lCiAgICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50 bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0CiAgfQoKICBmdW5jX3BhdGhfcHJvZ3MgImdy ZXAgZ2dyZXAiIGZ1bmNfY2hlY2tfcHJvZ19ncmVwICIkUEFUSDovdXNyL3hwZzQvYmluIgog IEdSRVA9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKfQoKCiMjIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gIyMKIyMgVXNlciBvdmVycmlkYWJsZSBjb21tYW5kIHBhdGhzLiAj IwojIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCgojIEFsbCB1cHBlcmNh c2UgdmFyaWFibGUgbmFtZXMgYXJlIHVzZWQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy4g IFRoZXNlCiMgdmFyaWFibGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyIGJlZm9y ZSBjYWxsaW5nIGEgc2NyaXB0IHRoYXQKIyB1c2VzIHRoZW0gaWYgYSBzdWl0YWJsZSBjb21t YW5kIG9mIHRoYXQgbmFtZSBpcyBub3QgYWxyZWFkeSBhdmFpbGFibGUKIyBpbiB0aGUgY29t bWFuZCBzZWFyY2ggUEFUSC4KCjogJHtDUD0iY3AgLWYifQo6ICR7RUNITz0icHJpbnRmICVz XG4ifQo6ICR7RUdSRVA9IiRHUkVQIC1FIn0KOiAke0ZHUkVQPSIkR1JFUCAtRiJ9CjogJHtM Tl9TPSJsbiAtcyJ9CjogJHtNQUtFPSJtYWtlIn0KOiAke01LRElSPSJta2RpciJ9CjogJHtN Vj0ibXYgLWYifQo6ICR7Uk09InJtIC1mIn0KOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0v YmluL3NofSJ9CgoKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIyMgVXNlZnVsIHNlZCBz bmlwcGV0cy4gIyMKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKCnNlZF9kaXJuYW1lPSdz fC9bXi9dKiR8fCcKc2VkX2Jhc2VuYW1lPSdzfF4uKi98fCcKCiMgU2VkIHN1YnN0aXR1dGlv biB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMK IyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1x dW90ZWQgc3RyaW5ncy4Kc2VkX3F1b3RlX3N1YnN0PSdzfFwoW2AiJFxcXVwpfFxcXDF8ZycK CiMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2Vz LgpzZWRfZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJwoKIyBTZWQg c3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5n IGZvciB0aGUKIyBzdHJpbmcgbGl0ZXJhbGx5LgpzZWRfbWFrZV9saXRlcmFsX3JlZ2V4PSdz fFtdLlteJFxcKlwvXXxcXCZ8ZycKCiMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRz IGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCiMgdGhhdCBjb250YWlucyBmb3J3YXJkIHNsYXNo ZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBB IHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCnNlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8 XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKCiMgUmUtJ1wnIHBhcmFtZXRlciBl eHBhbnNpb25zIGluIG91dHB1dCBvZiBzZWRfZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQKIyB3 ZXJlICdcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2Yg J1wnIHByZWNlZGVkIGEKIyAnJCcgaW4gaW5wdXQgdG8gc2VkX2RvdWJsZV9xdW90ZV9zdWJz dCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tCiMgZXhwYW5zaW9uLiAgU2luY2UgZWFj aCBpbnB1dCAnXCcgaXMgbm93IHR3byAnXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyCiMgb2Yg cnVucyBvZiBmb3VyICdcJ3MgZm9sbG93ZWQgYnkgdHdvICdcJ3MgYW5kIHRoZW4gYSAnJCcu ICAnXCcgdGhhdCAnJCcuCl9HX2JzPSdcXCcKX0dfYnMyPSdcXFxcJwpfR19iczQ9J1xcXFxc XFxcJwpfR19kb2xsYXI9J1wkJwpzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAogIHMvJF9HX2Jz NC8mXFwKL2cKICBzL14kX0dfYnMyJF9HX2RvbGxhci8kX0dfYnMmLwogIHMvXFwoW14kX0df YnNdXFwpJF9HX2JzMiRfR19kb2xsYXIvXFwxJF9HX2JzMiRfR19icyRfR19kb2xsYXIvZwog IHMvXG4vL2ciCgojIHJlcXVpcmVfY2hlY2tfaWZzX2JhY2tzbGFzaAojIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQojIENoZWNrIGlmIHdlIGNhbiB1c2UgYmFja3NsYXNoIGFzIElG Uz0nXCcgc2VwYXJhdG9yLCBhbmQgc2V0CiMgJGNoZWNrX2lmc19iYWNrc2hsYXNoX2Jyb2tl biB0byAnOicgb3IgJ2ZhbHNlJy4KcmVxdWlyZV9jaGVja19pZnNfYmFja3NsYXNoPWZ1bmNf cmVxdWlyZV9jaGVja19pZnNfYmFja3NsYXNoCmZ1bmNfcmVxdWlyZV9jaGVja19pZnNfYmFj a3NsYXNoICgpCnsKICBfR19zYXZlX0lGUz0kSUZTCiAgSUZTPSdcJwogIF9HX2NoZWNrX2lm c19iYWNrc2hsYXNoPSdhXFxiJwogIGZvciBfR19pIGluICRfR19jaGVja19pZnNfYmFja3No bGFzaAogIGRvCiAgY2FzZSAkX0dfaSBpbgogIGEpCiAgICBjaGVja19pZnNfYmFja3NobGFz aF9icm9rZW49ZmFsc2UKICAgIDs7CiAgJycpCiAgICBicmVhawogICAgOzsKICAqKQogICAg Y2hlY2tfaWZzX2JhY2tzaGxhc2hfYnJva2VuPToKICAgIGJyZWFrCiAgICA7OwogIGVzYWMK ICBkb25lCiAgSUZTPSRfR19zYXZlX0lGUwogIHJlcXVpcmVfY2hlY2tfaWZzX2JhY2tzbGFz aD06Cn0KCgojIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwojIyBHbG9iYWwgdmFyaWFibGVzLiAj IwojIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwoKIyBFeGNlcHQgZm9yIHRoZSBnbG9iYWwgdmFy aWFibGVzIGV4cGxpY2l0bHkgbGlzdGVkIGJlbG93LCB0aGUgZm9sbG93aW5nCiMgZnVuY3Rp b25zIGluIHRoZSAnXmZ1bmNfJyBuYW1lc3BhY2UsIGFuZCB0aGUgJ15yZXF1aXJlXycgbmFt ZXNwYWNlCiMgdmFyaWFibGVzIGluaXRpYWxpc2VkIGluIHRoZSAnUmVzb3VyY2UgbWFuYWdl bWVudCcgc2VjdGlvbiwgc291cmNpbmcKIyB0aGlzIGZpbGUgd2lsbCBub3QgcG9sbHV0ZSB5 b3VyIGdsb2JhbCBuYW1lc3BhY2Ugd2l0aCBhbnl0aGluZwojIGVsc2UuIFRoZXJlJ3Mgbm8g cG9ydGFibGUgd2F5IHRvIHNjb3BlIHZhcmlhYmxlcyBpbiBCb3VybmUgc2hlbGwKIyB0aG91 Z2gsIHNvIGFjdHVhbGx5IHJ1bm5pbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgc29tZXRpbWVz IHBsYWNlCiMgcmVzdWx0cyBpbnRvIGEgdmFyaWFibGUgbmFtZWQgYWZ0ZXIgdGhlIGZ1bmN0 aW9uLCBhbmQgb2Z0ZW4gdXNlCiMgdGVtcG9yYXJ5IHZhcmlhYmxlcyBpbiB0aGUgJ15fR18n IG5hbWVzcGFjZS4gSWYgeW91IGFyZSBjYXJlZnVsIHRvCiMgYXZvaWQgdXNpbmcgdGhvc2Ug bmFtZXNwYWNlcyBjYXN1YWxseSBpbiB5b3VyIHNvdXJjaW5nIHNjcmlwdCwgdGhpbmdzCiMg c2hvdWxkIGNvbnRpbnVlIHRvIHdvcmsgYXMgeW91IGV4cGVjdC4gQW5kLCBvZiBjb3Vyc2Us IHlvdSBjYW4gZnJlZWx5CiMgb3ZlcndyaXRlIGFueSBvZiB0aGUgZnVuY3Rpb25zIG9yIHZh cmlhYmxlcyBkZWZpbmVkIGhlcmUgYmVmb3JlCiMgY2FsbGluZyBhbnl0aGluZyB0byBjdXN0 b21pemUgdGhlbS4KCkVYSVRfU1VDQ0VTUz0wCkVYSVRfRkFJTFVSRT0xCkVYSVRfTUlTTUFU Q0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2gg dG8gbWlzc2luZy4KRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNh dGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCgojIEFsbG93IG92ZXJyaWRpbmcsIGVn IGFzc3VtaW5nIHRoYXQgeW91IGZvbGxvdyB0aGUgY29udmVudGlvbiBvZgojIHB1dHRpbmcg JyRkZWJ1Z19jbWQnIGF0IHRoZSBzdGFydCBvZiBhbGwgeW91ciBmdW5jdGlvbnMsIHlvdSBj YW4gZ2V0CiMgYmFzaCB0byBzaG93IGZ1bmN0aW9uIGNhbGwgdHJhY2Ugd2l0aDoKIwojICAg IGRlYnVnX2NtZD0nZXZhbCBlY2hvICIke0ZVTkNOQU1FWzBdfSAkKiIgPiYyJyBiYXNoIHlv dXItc2NyaXB0LW5hbWUKZGVidWdfY21kPSR7ZGVidWdfY21kLSI6In0KZXhpdF9jbWQ9OgoK IyBCeSBjb252ZW50aW9uLCBmaW5pc2ggeW91ciBzY3JpcHQgd2l0aDoKIwojICAgIGV4aXQg JGV4aXRfc3RhdHVzCiMKIyBzbyB0aGF0IHlvdSBjYW4gc2V0IGV4aXRfc3RhdHVzIHRvIG5v bi16ZXJvIGlmIHlvdSB3YW50IHRvIGluZGljYXRlCiMgc29tZXRoaW5nIHdlbnQgd3Jvbmcg ZHVyaW5nIGV4ZWN1dGlvbiB3aXRob3V0IGFjdHVhbGx5IGJhaWxpbmcgb3V0IGF0CiMgdGhl IHBvaW50IG9mIGZhaWx1cmUuCmV4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKCiMgV29yayBh cm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJ WCA2LjQrLCBzaAojIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAi c2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgojIHRoZSBfWFBHIGVudmlyb25tZW50IHZh cmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAojIHBvc2l0aW9u YWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBv ZiB0aGUKIyBmdW5jdGlvbi4KcHJvZ3BhdGg9JDAKCiMgVGhlIG5hbWUgb2YgdGhpcyBwcm9n cmFtLgpwcm9nbmFtZT1gJEVDSE8gIiRwcm9ncGF0aCIgfCRTRUQgIiRzZWRfYmFzZW5hbWUi YAoKIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwcm9ncGF0aCBmb3IgcmVleGVj dXRpb246CmNhc2UgJHByb2dwYXRoIGluCiAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKICAq W1xcL10qKQogICAgIHByb2dkaXI9YCRFQ0hPICIkcHJvZ3BhdGgiIHwkU0VEICIkc2VkX2Rp cm5hbWUiYAogICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAogICAgIHByb2dw YXRoPSRwcm9nZGlyLyRwcm9nbmFtZQogICAgIDs7CiAgKikKICAgICBfR19JRlM9JElGUwog ICAgIElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9CiAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7 IGRvCiAgICAgICBJRlM9JF9HX0lGUwogICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2du YW1lIiAmJiBicmVhawogICAgIGRvbmUKICAgICBJRlM9JF9HX0lGUwogICAgIHRlc3QgLW4g IiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCiAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHBy b2duYW1lCiAgICAgOzsKZXNhYwoKCiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCiMjIFN0YW5k YXJkIG9wdGlvbnMuICMjCiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCgojIFRoZSBmb2xsb3dp bmcgb3B0aW9ucyBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGRlZmlu ZWQKIyBiZWxvdywgYW5kIHNob3VsZCBiZSBzZXQgYXBwcm9wcmlhdGVseSBkZXBlbmRpbmcg b24gcnVuLXRpbWUgcGFyYS0KIyBtZXRlcnMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUu CgpvcHRfZHJ5X3J1bj1mYWxzZQpvcHRfcXVpZXQ9ZmFsc2UKb3B0X3ZlcmJvc2U9ZmFsc2UK CiMgQ2F0ZWdvcmllcyAnYWxsJyBhbmQgJ25vbmUnIGFyZSBhbHdheXMgYXZhaWxhYmxlLiAg QXBwZW5kIGFueSBvdGhlcnMKIyB5b3Ugd2lsbCBwYXNzIGFzIHRoZSBmaXJzdCBhcmd1bWVu dCB0byBmdW5jX3dhcm5pbmcgZnJvbSB5b3VyIG93bgojIGNvZGUuCndhcm5pbmdfY2F0ZWdv cmllcz0KCiMgQnkgZGVmYXVsdCwgZGlzcGxheSB3YXJuaW5ncyBhY2NvcmRpbmcgdG8gJ29w dF93YXJuaW5nX3R5cGVzJy4gIFNldAojICd3YXJuaW5nX2Z1bmMnICB0byAnOicgdG8gZWxp ZGUgYWxsIHdhcm5pbmdzLCBvciBmdW5jX2ZhdGFsX2Vycm9yIHRvCiMgdHJlYXQgdGhlIG5l eHQgZGlzcGxheWVkIHdhcm5pbmcgYXMgYSBmYXRhbCBlcnJvci4Kd2FybmluZ19mdW5jPWZ1 bmNfd2Fybl9hbmRfY29udGludWUKCiMgU2V0IHRvICdhbGwnIHRvIGRpc3BsYXkgYWxsIHdh cm5pbmdzLCAnbm9uZScgdG8gc3VwcHJlc3MgYWxsCiMgd2FybmluZ3MsIG9yIGEgc3BhY2Ug ZGVsaW1pdGVkIGxpc3Qgb2Ygc29tZSBzdWJzZXQgb2YKIyAnd2FybmluZ19jYXRlZ29yaWVz JyB0byBkaXNwbGF5IG9ubHkgdGhlIGxpc3RlZCB3YXJuaW5ncy4Kb3B0X3dhcm5pbmdfdHlw ZXM9YWxsCgoKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIyMgUmVzb3VyY2UgbWFuYWdl bWVudC4gIyMKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKCiMgVGhpcyBzZWN0aW9uIGNv bnRhaW5zIGRlZmluaXRpb25zIGZvciBmdW5jdGlvbnMgdGhhdCBlYWNoIGVuc3VyZSBhCiMg cGFydGljdWxhciByZXNvdXJjZSAoYSBmaWxlLCBvciBhIG5vbi1lbXB0eSBjb25maWd1cmF0 aW9uIHZhcmlhYmxlIGZvcgojIGV4YW1wbGUpIGlzIGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJv cHJpYXRlIHRvIGV4dHJhY3QgZGVmYXVsdCB2YWx1ZXMKIyBmcm9tIHBlcnRpbmVudCBwYWNr YWdlIGZpbGVzLiBDYWxsIHRoZW0gdXNpbmcgdGhlaXIgYXNzb2NpYXRlZAojICdyZXF1aXJl XyonIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGV4ZWN1dGVkLCBhdCBtb3N0 LCBvbmNlLgojCiMgSXQncyBlbnRpcmVseSBkZWxpYmVyYXRlIHRoYXQgY2FsbGluZyB0aGVz ZSBmdW5jdGlvbnMgY2FuIHNldAojIHZhcmlhYmxlcyB0aGF0IGRvbid0IG9iZXkgdGhlIG5h bWVzcGFjZSBsaW1pdGF0aW9ucyBvYmV5ZWQgYnkgdGhlIHJlc3QKIyBvZiB0aGlzIGZpbGUs IGluIG9yZGVyIHRoYXQgdGhhdCB0aGV5IGJlIGFzIHVzZWZ1bCBhcyBwb3NzaWJsZSB0bwoj IGNhbGxlcnMuCgoKIyByZXF1aXJlX3Rlcm1fY29sb3JzCiMgLS0tLS0tLS0tLS0tLS0tLS0t LQojIEFsbG93IGRpc3BsYXkgb2YgYm9sZCB0ZXh0IG9uIHRlcm1pbmFscyB0aGF0IHN1cHBv cnQgaXQuCnJlcXVpcmVfdGVybV9jb2xvcnM9ZnVuY19yZXF1aXJlX3Rlcm1fY29sb3JzCmZ1 bmNfcmVxdWlyZV90ZXJtX2NvbG9ycyAoKQp7CiAgICAkZGVidWdfY21kCgogICAgdGVzdCAt dCAxICYmIHsKICAgICAgIyBDT0xPUlRFUk0gYW5kIFVTRV9BTlNJX0NPTE9SUyBlbnZpcm9u bWVudCB2YXJpYWJsZXMgdGFrZQogICAgICAjIHByZWNlZGVuY2UsIGJlY2F1c2UgbW9zdCB0 ZXJtaW5mbyBkYXRhYmFzZXMgbmVnbGVjdCB0byBkZXNjcmliZQogICAgICAjIHdoZXRoZXIg Y29sb3Igc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuCiAgICAgIHRlc3QgLW4gIiR7Q09MT1JU RVJNK3NldH0iICYmIDogJHtVU0VfQU5TSV9DT0xPUlM9IjEifQoKICAgICAgaWYgdGVzdCAx ID0gIiRVU0VfQU5TSV9DT0xPUlMiOyB0aGVuCiAgICAgICAgIyBTdGFuZGFyZCBBTlNJIGVz Y2FwZSBzZXF1ZW5jZXMKICAgICAgICB0Y19yZXNldD0nG1swbScKICAgICAgICB0Y19ib2xk PScbWzFtJzsgICB0Y19zdGFuZG91dD0nG1s3bScKICAgICAgICB0Y19yZWQ9JxtbMzFtJzsg ICB0Y19ncmVlbj0nG1szMm0nCiAgICAgICAgdGNfYmx1ZT0nG1szNG0nOyAgdGNfY3lhbj0n G1szNm0nCiAgICAgIGVsc2UKICAgICAgICAjIE90aGVyd2lzZSB0cnVzdCB0aGUgdGVybWlu Zm8gZGF0YWJhc2UgYWZ0ZXIgYWxsLgogICAgICAgIHRlc3QgLW4gImB0cHV0IHNncjAgMj4v ZGV2L251bGxgIiAmJiB7CiAgICAgICAgICB0Y19yZXNldD1gdHB1dCBzZ3IwYAogICAgICAg ICAgdGVzdCAtbiAiYHRwdXQgYm9sZCAyPi9kZXYvbnVsbGAiICYmIHRjX2JvbGQ9YHRwdXQg Ym9sZGAKICAgICAgICAgIHRjX3N0YW5kb3V0PSR0Y19ib2xkCiAgICAgICAgICB0ZXN0IC1u ICJgdHB1dCBzbXNvIDI+L2Rldi9udWxsYCIgJiYgdGNfc3RhbmRvdXQ9YHRwdXQgc21zb2AK ICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDEgMj4vZGV2L251bGxgIiAmJiB0Y19y ZWQ9YHRwdXQgc2V0YWYgMWAKICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDIgMj4v ZGV2L251bGxgIiAmJiB0Y19ncmVlbj1gdHB1dCBzZXRhZiAyYAogICAgICAgICAgdGVzdCAt biAiYHRwdXQgc2V0YWYgNCAyPi9kZXYvbnVsbGAiICYmIHRjX2JsdWU9YHRwdXQgc2V0YWYg NGAKICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDUgMj4vZGV2L251bGxgIiAmJiB0 Y19jeWFuPWB0cHV0IHNldGFmIDVgCiAgICAgICAgfQogICAgICBmaQogICAgfQoKICAgIHJl cXVpcmVfdGVybV9jb2xvcnM9Ogp9CgoKIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKIyMgRnVu Y3Rpb24gbGlicmFyeS4gIyMKIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKCiMgVGhpcyBzZWN0 aW9uIGNvbnRhaW5zIGEgdmFyaWV0eSBvZiB1c2VmdWwgZnVuY3Rpb25zIHRvIGNhbGwgaW4g eW91cgojIHNjcmlwdHMuIFRha2Ugbm90ZSBvZiB0aGUgcG9ydGFibGUgd3JhcHBlcnMgZm9y IGZlYXR1cmVzIHByb3ZpZGVkIGJ5CiMgc29tZSBtb2Rlcm4gc2hlbGxzLCB3aGljaCB3aWxs IGZhbGwgYmFjayB0byBzbG93ZXIgZXF1aXZhbGVudHMgb24KIyBsZXNzIGZlYXR1cmVmdWwg c2hlbGxzLgoKCiMgZnVuY19hcHBlbmQgVkFSIFZBTFVFCiMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiMgQXBwZW5kIFZBTFVFIG9udG8gdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUi4K CiAgIyBXZSBzaG91bGQgdHJ5IHRvIG1pbmltaXNlIGZvcmtzLCBlc3BlY2lhbGx5IG9uIFdp bmRvd3Mgd2hlcmUgdGhleSBhcmUKICAjIHVucmVhc29uYWJseSBzbG93LCBzbyBza2lwIHRo ZSBmZWF0dXJlIHByb2JlcyB3aGVuIGJhc2ggb3IgenNoIGFyZQogICMgYmVpbmcgdXNlZDoK ICBpZiB0ZXN0IHNldCA9ICIke0JBU0hfVkVSU0lPTitzZXR9JHtaU0hfVkVSU0lPTitzZXR9 IjsgdGhlbgogICAgOiAke19HX0hBVkVfQVJJVEhfT1A9InllcyJ9CiAgICA6ICR7X0dfSEFW RV9YU0lfT1BTPSJ5ZXMifQogICAgIyBUaGUgKz0gb3BlcmF0b3Igd2FzIGludHJvZHVjZWQg aW4gYmFzaCAzLjEKICAgIGNhc2UgJEJBU0hfVkVSU0lPTiBpbgogICAgICBbMTJdLiogfCAz LjAgfCAzLjAqKSA7OwogICAgICAqKQogICAgICAgIDogJHtfR19IQVZFX1BMVVNFUV9PUD0i eWVzIn0KICAgICAgICA7OwogICAgZXNhYwogIGZpCgogICMgX0dfSEFWRV9QTFVTRVFfT1AK ICAjIENhbiBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUgc2hlbGwgaXMgcHJvYmVkLCAi eWVzIiBpZiArPSBpcwogICMgdXNlYWJsZSBvciBhbnl0aGluZyBlbHNlIGlmIGl0IGRvZXMg bm90IHdvcmsuCiAgdGVzdCAteiAiJF9HX0hBVkVfUExVU0VRX09QIiBcCiAgICAmJiAoZXZh bCAneD1hOyB4Kz0iIGIiOyB0ZXN0ICJhIGIiID0gIiR4IicpIDI+L2Rldi9udWxsIFwKICAg ICYmIF9HX0hBVkVfUExVU0VRX09QPXllcwoKaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfUExV U0VRX09QIgp0aGVuCiAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxv d2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgogIGV2YWwgJ2Z1bmNfYXBwZW5kICgp CiAgewogICAgJGRlYnVnX2NtZAoKICAgIGV2YWwgIiQxKz1cJDIiCiAgfScKZWxzZQogICMg Li4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBh IHNoZWxsIGJ1aWx0aW4uCiAgZnVuY19hcHBlbmQgKCkKICB7CiAgICAkZGVidWdfY21kCgog ICAgZXZhbCAiJDE9XCQkMVwkMiIKICB9CmZpCgoKIyBmdW5jX2FwcGVuZF9xdW90ZWQgVkFS IFZBTFVFCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFF1b3RlIFZBTFVFIGFu ZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAoj IGJ5IGEgc3BhY2UuCmlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1BMVVNFUV9PUCI7IHRoZW4K ICBldmFsICdmdW5jX2FwcGVuZF9xdW90ZWQgKCkKICB7CiAgICAkZGVidWdfY21kCgogICAg ZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkMiIKICAgIGV2YWwgIiQxKz1cXCBcJGZ1bmNfcXVv dGVfYXJnX3Jlc3VsdCIKICB9JwplbHNlCiAgZnVuY19hcHBlbmRfcXVvdGVkICgpCiAgewog ICAgJGRlYnVnX2NtZAoKICAgIGZ1bmNfcXVvdGVfYXJnIHByZXR0eSAiJDIiCiAgICBldmFs ICIkMT1cJCQxXFwgXCRmdW5jX3F1b3RlX2FyZ19yZXN1bHQiCiAgfQpmaQoKCiMgZnVuY19h cHBlbmRfdW5pcSBWQVIgVkFMVUUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFw cGVuZCB1bmlxdWUgVkFMVUUgb250byB0aGUgZXhpc3RpbmcgY29udGVudHMgb2YgVkFSLCBh c3N1bWluZwojIGVudHJpZXMgYXJlIGRlbGltaXRlZCBieSB0aGUgZmlyc3QgY2hhcmFjdGVy IG9mIFZBTFVFLiAgRm9yIGV4YW1wbGU6CiMKIyAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0aW9u cyAiIC0tYW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50IgojCiMgd2lsbCBvbmx5IGFw cGVuZCB0byAkb3B0aW9ucyBpZiAiIC0tYW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50 ICIKIyBpcyBub3QgYWxyZWFkeSBwcmVzZW50IHNvbWV3aGVyZSBpbiAkb3B0aW9ucyBhbHJl YWR5IChub3RlIHNwYWNlcyBhdAojIGVhY2ggZW5kIGltcGxpZWQgYnkgbGVhZGluZyBzcGFj ZSBpbiBzZWNvbmQgYXJndW1lbnQpLgpmdW5jX2FwcGVuZF91bmlxICgpCnsKICAgICRkZWJ1 Z19jbWQKCiAgICBldmFsIF9HX2N1cnJlbnRfdmFsdWU9J2AkRUNITyAkJyQxJ2AnCiAgICBf R19kZWxpbT1gZXhwciAiJDIiIDogJ1woLlwpJ2AKCiAgICBjYXNlICRfR19kZWxpbSRfR19j dXJyZW50X3ZhbHVlJF9HX2RlbGltIGluCiAgICAgICoiJDIkX0dfZGVsaW0iKikgOzsKICAg ICAgKikgZnVuY19hcHBlbmQgIiRAIiA7OwogICAgZXNhYwp9CgoKIyBmdW5jX2FyaXRoIFRF Uk0uLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0KIyBTZXQgZnVuY19hcml0aF9yZXN1bHQgdG8g dGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIFRFUk1zLgogIHRlc3QgLXogIiRfR19IQVZFX0FS SVRIX09QIiBcCiAgICAmJiAoZXZhbCAndGVzdCAyID0gJCgoIDEgKyAxICkpJykgMj4vZGV2 L251bGwgXAogICAgJiYgX0dfSEFWRV9BUklUSF9PUD15ZXMKCmlmIHRlc3QgeWVzID0gIiRf R19IQVZFX0FSSVRIX09QIjsgdGhlbgogIGV2YWwgJ2Z1bmNfYXJpdGggKCkKICB7CiAgICAk ZGVidWdfY21kCgogICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCiAgfScKZWxzZQog IGZ1bmNfYXJpdGggKCkKICB7CiAgICAkZGVidWdfY21kCgogICAgZnVuY19hcml0aF9yZXN1 bHQ9YGV4cHIgIiRAImAKICB9CmZpCgoKIyBmdW5jX2Jhc2VuYW1lIEZJTEUKIyAtLS0tLS0t LS0tLS0tLS0tLS0KIyBTZXQgZnVuY19iYXNlbmFtZV9yZXN1bHQgdG8gRklMRSB3aXRoIGV2 ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZwojIHRoZSBsYXN0IC8gc3RyaXBwZWQuCmlm IHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCiAgIyBJZiB0aGlzIHNoZWxs IHN1cHBvcnRzIHN1ZmZpeCBwYXR0ZXJuIHJlbW92YWwsIHRoZW4gdXNlIGl0IHRvIGF2b2lk CiAgIyBmb3JraW5nLiBIaWRlIHRoZSBkZWZpbml0aW9ucyBzaW5nbGUgcXVvdGVzIGluIGNh c2UgdGhlIHNoZWxsIGNob2tlcwogICMgb24gdW5zdXBwb3J0ZWQgc3ludGF4Li4uCiAgX2I9 J2Z1bmNfYmFzZW5hbWVfcmVzdWx0PSR7MSMjKi99JwogIF9kPSdjYXNlICQxIGluCiAgICAg ICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSR7MSUvKn0kMiA7OwogICAgICAgICogICkg ZnVuY19kaXJuYW1lX3Jlc3VsdD0kMyAgICAgICAgOzsKICAgICAgZXNhYycKCmVsc2UKICAj IC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgc2VkLgogIF9iPSdmdW5jX2Jhc2Vu YW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgJwogIF9kPSdm dW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJDEiICB8JFNFRCAiJHNlZF9kaXJuYW1lImAK ICAgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJDEiOyB0aGVuCiAg ICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMwogICAgICBlbHNlCiAgICAgICAgZnVuY19h cHBlbmQgZnVuY19kaXJuYW1lX3Jlc3VsdCAiJDIiCiAgICAgIGZpJwpmaQoKZXZhbCAnZnVu Y19iYXNlbmFtZSAoKQp7CiAgICAkZGVidWdfY21kCgogICAgJyIkX2IiJwp9JwoKCiMgZnVu Y19kaXJuYW1lIEZJTEUgQVBQRU5EIE5PTkRJUl9SRVBMQUNFTUVOVAojIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDb21wdXRlIHRoZSBkaXJuYW1l IG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAojIG90 aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KZXZhbCAnZnVuY19k aXJuYW1lICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICAnIiRfZCInCn0nCgoKIyBmdW5jX2Rp cm5hbWVfYW5kX2Jhc2VuYW1lIEZJTEUgQVBQRU5EIE5PTkRJUl9SRVBMQUNFTUVOVAojIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiMgUGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUg ZnVuY3Rpb24KIyBjYWxsOgojICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2Yg RklMRS4gIElmIG5vbmVtcHR5LAojICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJl c3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQ TEFDRU1FTlQuCiMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5h bWVfcmVzdWx0IgojICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KIyAg ICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCiMg Rm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0byB0aGUgZnVuY3Rpb25zIGFi b3ZlIGJ1dCBpbnN0ZWFkCiMgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCmV2 YWwgJ2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKewogICAgJGRlYnVnX2NtZAoKICAg ICciJF9iIicKICAgICciJF9kIicKfScKCgojIGZ1bmNfZWNobyBBUkcuLi4KIyAtLS0tLS0t LS0tLS0tLS0tCiMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZS4KZnVuY19l Y2hvICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBfR19tZXNzYWdlPSQqCgogICAgZnVuY19l Y2hvX0lGUz0kSUZTCiAgICBJRlM9JG5sCiAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2Fn ZTsgZG8KICAgICAgSUZTPSRmdW5jX2VjaG9fSUZTCiAgICAgICRFQ0hPICIkcHJvZ25hbWU6 ICRfR19saW5lIgogICAgZG9uZQogICAgSUZTPSRmdW5jX2VjaG9fSUZTCn0KCgojIGZ1bmNf ZWNob19hbGwgQVJHLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBJbnZva2UgJEVDSE8g d2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgpmdW5jX2VjaG9fYWxsICgpCnsKICAg ICRFQ0hPICIkKiIKfQoKCiMgZnVuY19lY2hvX2luZml4XzEgSU5GSVggQVJHLi4uCiMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRWNobyBwcm9ncmFtIG5hbWUsIGZvbGxv d2VkIGJ5IElORklYIG9uIHRoZSBmaXJzdCBsaW5lLCB3aXRoIGFueQojIGFkZGl0aW9uYWwg bGluZXMgbm90IHNob3dpbmcgSU5GSVguCmZ1bmNfZWNob19pbmZpeF8xICgpCnsKICAgICRk ZWJ1Z19jbWQKCiAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycwoKICAgIF9HX2luZml4PSQxOyBz aGlmdAogICAgX0dfaW5kZW50PSRfR19pbmZpeAogICAgX0dfcHJlZml4PSIkcHJvZ25hbWU6 ICRfR19pbmZpeDogIgogICAgX0dfbWVzc2FnZT0kKgoKICAgICMgU3RyaXAgY29sb3IgZXNj YXBlIHNlcXVlbmNlcyBiZWZvcmUgY291bnRpbmcgcHJpbnRhYmxlIGxlbmd0aAogICAgZm9y IF9HX3RjIGluICIkdGNfcmVzZXQiICIkdGNfYm9sZCIgIiR0Y19zdGFuZG91dCIgIiR0Y19y ZWQiICIkdGNfZ3JlZW4iICIkdGNfYmx1ZSIgIiR0Y19jeWFuIgogICAgZG8KICAgICAgdGVz dCAtbiAiJF9HX3RjIiAmJiB7CiAgICAgICAgX0dfZXNjX3RjPWAkRUNITyAiJF9HX3RjIiB8 ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKICAgICAgICBfR19pbmRlbnQ9YCRF Q0hPICIkX0dfaW5kZW50IiB8ICRTRUQgInN8JF9HX2VzY190Y3x8ZyJgCiAgICAgIH0KICAg IGRvbmUKICAgIF9HX2luZGVudD0iJHByb2duYW1lOiAiYGVjaG8gIiRfR19pbmRlbnQiIHwg JFNFRCAnc3wufCB8ZydgIiAgIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVk X3F1b3RlcwoKICAgIGZ1bmNfZWNob19pbmZpeF8xX0lGUz0kSUZTCiAgICBJRlM9JG5sCiAg ICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KICAgICAgSUZTPSRmdW5jX2VjaG9f aW5maXhfMV9JRlMKICAgICAgJEVDSE8gIiRfR19wcmVmaXgkdGNfYm9sZCRfR19saW5lJHRj X3Jlc2V0IiA+JjIKICAgICAgX0dfcHJlZml4PSRfR19pbmRlbnQKICAgIGRvbmUKICAgIElG Uz0kZnVuY19lY2hvX2luZml4XzFfSUZTCn0KCgojIGZ1bmNfZXJyb3IgQVJHLi4uCiMgLS0t LS0tLS0tLS0tLS0tLS0KIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRv IHN0YW5kYXJkIGVycm9yLgpmdW5jX2Vycm9yICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICAk cmVxdWlyZV90ZXJtX2NvbG9ycwoKICAgIGZ1bmNfZWNob19pbmZpeF8xICIgICR0Y19zdGFu ZG91dCR7dGNfcmVkfWVycm9yJHRjX3Jlc2V0IiAiJCoiID4mMgp9CgoKIyBmdW5jX2ZhdGFs X2Vycm9yIEFSRy4uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRWNobyBwcm9ncmFt IG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCmZ1 bmNfZmF0YWxfZXJyb3IgKCkKewogICAgJGRlYnVnX2NtZAoKICAgIGZ1bmNfZXJyb3IgIiQq IgogICAgZXhpdCAkRVhJVF9GQUlMVVJFCn0KCgojIGZ1bmNfZ3JlcCBFWFBSRVNTSU9OIEZJ TEVOQU1FCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDaGVjayB3aGV0aGVy IEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRw dXQuCmZ1bmNfZ3JlcCAoKQp7CiAgICAkZGVidWdfY21kCgogICAgJEdSRVAgIiQxIiAiJDIi ID4vZGV2L251bGwgMj4mMQp9CgoKIyBmdW5jX2xlbiBTVFJJTkcKIyAtLS0tLS0tLS0tLS0t LS0KIyBTZXQgZnVuY19sZW5fcmVzdWx0IHRvIHRoZSBsZW5ndGggb2YgU1RSSU5HLiBTVFJJ TkcgbWF5IG5vdAojIHN0YXJ0IHdpdGggYSBoeXBoZW4uCiAgdGVzdCAteiAiJF9HX0hBVkVf WFNJX09QUyIgXAogICAgJiYgKGV2YWwgJ3g9YS9iL2M7CiAgICAgIHRlc3QgNWFhL2JiL2Nj ID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxs IFwKICAgICYmIF9HX0hBVkVfWFNJX09QUz15ZXMKCmlmIHRlc3QgeWVzID0gIiRfR19IQVZF X1hTSV9PUFMiOyB0aGVuCiAgZXZhbCAnZnVuY19sZW4gKCkKICB7CiAgICAkZGVidWdfY21k CgogICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CiAgfScKZWxzZQogIGZ1bmNfbGVuICgpCiAg ewogICAgJGRlYnVnX2NtZAoKICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4q IiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKICB9CmZpCgoKIyBmdW5jX21r ZGlyX3AgRElSRUNUT1JZLVBBVEgKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBN YWtlIHN1cmUgdGhlIGVudGlyZSBwYXRoIHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJs ZS4KZnVuY19ta2Rpcl9wICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBfR19kaXJlY3Rvcnlf cGF0aD0kMQogICAgX0dfZGlyX2xpc3Q9CgogICAgaWYgdGVzdCAtbiAiJF9HX2RpcmVjdG9y eV9wYXRoIiAmJiB0ZXN0IDogIT0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KCiAgICAgICMgUHJv dGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCAnLScKICAgICAgY2FzZSAkX0df ZGlyZWN0b3J5X3BhdGggaW4KICAgICAgICAtKikgX0dfZGlyZWN0b3J5X3BhdGg9Li8kX0df ZGlyZWN0b3J5X3BhdGggOzsKICAgICAgZXNhYwoKICAgICAgIyBXaGlsZSBzb21lIHBvcnRp b24gb2YgRElSIGRvZXMgbm90IHlldCBleGlzdC4uLgogICAgICB3aGlsZSB0ZXN0ICEgLWQg IiRfR19kaXJlY3RvcnlfcGF0aCI7IGRvCiAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0 b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCgkjIGxpc3QgaW5j YXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRoIGNvbnRhaW5zIHdoaXRlc3BhY2UuCiAgICAgICAg X0dfZGlyX2xpc3Q9JF9HX2RpcmVjdG9yeV9wYXRoOiRfR19kaXJfbGlzdAoKICAgICAgICAj IElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlz dCBpcyBkb25lCiAgICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAq KSBicmVhayA7OyBlc2FjCgogICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhl IGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAogICAgICAgIF9HX2RpcmVjdG9yeV9wYXRoPWAk RUNITyAiJF9HX2RpcmVjdG9yeV9wYXRoIiB8ICRTRUQgLWUgIiRzZWRfZGlybmFtZSJgCiAg ICAgIGRvbmUKICAgICAgX0dfZGlyX2xpc3Q9YCRFQ0hPICIkX0dfZGlyX2xpc3QiIHwgJFNF RCAnc3w6KiR8fCdgCgogICAgICBmdW5jX21rZGlyX3BfSUZTPSRJRlM7IElGUz06CiAgICAg IGZvciBfR19kaXIgaW4gJF9HX2Rpcl9saXN0OyBkbwoJSUZTPSRmdW5jX21rZGlyX3BfSUZT CiAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgJ0ZpbGUgZXhpc3QnIGVycm9yIGlm IHR3byBwcm9jZXNzZXMKICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJl Y3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAogICAgICAgICMgc3RvcCBpbiB0aGF0IGNh c2UhCiAgICAgICAgJE1LRElSICIkX0dfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CiAgICAgIGRv bmUKICAgICAgSUZTPSRmdW5jX21rZGlyX3BfSUZTCgogICAgICAjIEJhaWwgb3V0IGlmIHdl IChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3Rvcnku CiAgICAgIHRlc3QgLWQgIiRfR19kaXJlY3RvcnlfcGF0aCIgfHwgXAogICAgICAgIGZ1bmNf ZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgJyQxJyIKICAgIGZpCn0KCgojIGZ1bmNf bWt0ZW1wZGlyIFtCQVNFTkFNRV0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTWFr ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1 bm5pbmcKIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMg aWYgcG9zc2libGUuICBJZgojIGdpdmVuLCBCQVNFTkFNRSBpcyB0aGUgYmFzZW5hbWUgZm9y IHRoYXQgZGlyZWN0b3J5LgpmdW5jX21rdGVtcGRpciAoKQp7CiAgICAkZGVidWdfY21kCgog ICAgX0dfdGVtcGxhdGU9JHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0KCiAgICBpZiB0 ZXN0IDogPSAiJG9wdF9kcnlfcnVuIjsgdGhlbgogICAgICAjIFJldHVybiBhIGRpcmVjdG9y eSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQogICAgICBfR190 bXBkaXI9JF9HX3RlbXBsYXRlLSQkCiAgICBlbHNlCgogICAgICAjIElmIG1rdGVtcCB3b3Jr cywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CiAgICAgIF9HX3RtcGRpcj1gbWt0ZW1w IC1kICIkX0dfdGVtcGxhdGUtWFhYWFhYWFgiIDI+L2Rldi9udWxsYAoKICAgICAgaWYgdGVz dCAhIC1kICIkX0dfdG1wZGlyIjsgdGhlbgogICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBs ZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQogICAgICAgIF9HX3Rt cGRpcj0kX0dfdGVtcGxhdGUtJHtSQU5ET00tMH0kJAoKICAgICAgICBmdW5jX21rdGVtcGRp cl91bWFzaz1gdW1hc2tgCiAgICAgICAgdW1hc2sgMDA3NwogICAgICAgICRNS0RJUiAiJF9H X3RtcGRpciIKICAgICAgICB1bWFzayAkZnVuY19ta3RlbXBkaXJfdW1hc2sKICAgICAgZmkK CiAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFp bHVyZQogICAgICB0ZXN0IC1kICIkX0dfdG1wZGlyIiB8fCBcCiAgICAgICAgZnVuY19mYXRh bF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ICckX0dfdG1wZGly JyIKICAgIGZpCgogICAgJEVDSE8gIiRfR190bXBkaXIiCn0KCgojIGZ1bmNfbm9ybWFsX2Fi c3BhdGggUEFUSAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJlbW92ZSBkb3VibGVk LXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBjb21wb25lbnRzLAojIGFuZCBj YW5jZWwgb3V0IGFueSAiLi4iIHBhdGggY29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2lu ZwojIGl0IGFuIGFic29sdXRlIHBhdGguCmZ1bmNfbm9ybWFsX2Fic3BhdGggKCkKewogICAg JGRlYnVnX2NtZAoKICAgICMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNv bHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KICAgIF9HX3BhdGhjYXI9J3N8Xi9c KFteL10qXCkuKiR8XDF8JwogICAgX0dfcGF0aGNkcj0nc3xeL1teL10qfHwnCiAgICBfR19y ZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCgkJc3wvXC4vfC98ZwoJCXQgZG90c2wKCQlzfC9cLiR8 L3wnCiAgICBfR19jb2xsYXBzZXNsYXNoZXM9J3N8L1x7MSxcfXwvfGcnCiAgICBfR19maW5h bHNsYXNoPSdzfC8qJHwvfCcKCiAgICAjIFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNz ZW1ibGUgdGhlIHBhdGguCiAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KICAgIGZ1 bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0 bmFtZXNwYWNlPQogICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgogICAg ICAiIikKICAgICAgICAjIEVtcHR5IHBhdGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgogICAg ICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCiAgICAgICAgZnVuY19ub3JtYWxf YWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgICAgIHJldHVybgog ICAgICAgIDs7CiAgICAgICMgVGhlIG5leHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBz cG90IGEgcnVuIG9mIHByZWNpc2VseQogICAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0 aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOwogICAgICAjIHdlIHRha2Ug YWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCiAgICAgIC8vLyop CiAgICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4K ICAgICAgICA7OwogICAgICAvLyopCiAgICAgICAgIyBOb3QgbmVjZXNzYXJpbHkgYW4gb3Jk aW5hcnkgcGF0aDsgUE9TSVggcmVzZXJ2ZXMgbGVhZGluZyAnLy8nCiAgICAgICAgIyBhbmQg Zm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJl cwogICAgICAgICMgb3ZlciBDSUZTL1NNQiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRv dWJsZSBzbGFzaCBpZiBmb3VuZC4KICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5h bWVzcGFjZT0vCiAgICAgICAgOzsKICAgICAgLyopCiAgICAgICAgIyBBYnNvbHV0ZSBwYXRo LCBkbyBub3RoaW5nLgogICAgICAgIDs7CiAgICAgICopCiAgICAgICAgIyBSZWxhdGl2ZSBw YXRoLCBwcmVwZW5kICRjd2QuCiAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1g cHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAogICAgICAgIDs7CiAgICBlc2FjCgog ICAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9u cy4gIFdlIGFsc28gd2FudAogICAgIyB0aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZv ciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1ha2Ugc3VyZQogICAgIyB0aGVyZSBpcyBvbmUgKGFu ZCBvbmx5IG9uZSkgaGVyZS4KICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hP ICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKICAgICAgICAgIC1lICIk X0dfcmVtb3ZlZG90cGFydHMiIC1lICIkX0dfY29sbGFwc2VzbGFzaGVzIiAtZSAiJF9HX2Zp bmFsc2xhc2giYAogICAgd2hpbGUgOjsgZG8KICAgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHll dD8KICAgICAgaWYgdGVzdCAvID0gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIjsgdGhl bgogICAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUg cmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCiAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9y bWFsX2Fic3BhdGhfcmVzdWx0IjsgdGhlbgogICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0 aF9yZXN1bHQ9LwogICAgICAgIGZpCiAgICAgICAgYnJlYWsKICAgICAgZmkKICAgICAgZnVu Y19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3Bh dGhfdHBhdGgiIHwgJFNFRCBcCiAgICAgICAgICAtZSAiJF9HX3BhdGhjYXIiYAogICAgICBm dW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhf dHBhdGgiIHwgJFNFRCBcCiAgICAgICAgICAtZSAiJF9HX3BhdGhjZHIiYAogICAgICAjIEZp Z3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0CiAgICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fi c3BhdGhfdGNvbXBvbmVudCBpbgogICAgICAgICIiKQogICAgICAgICAgIyBUcmFpbGluZyBl bXB0eSBwYXRoIGNvbXBvbmVudCwgaWdub3JlIGl0LgogICAgICAgICAgOzsKICAgICAgICAu LikKICAgICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9u ZW50IGZyb20gcmVzdWx0LgogICAgICAgICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxf YWJzcGF0aF9yZXN1bHQiCiAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0k ZnVuY19kaXJuYW1lX3Jlc3VsdAogICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAg IyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KICAgICAgICAgIGZ1bmNfYXBw ZW5kIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0ICIvJGZ1bmNfbm9ybWFsX2Fic3BhdGhf dGNvbXBvbmVudCIKICAgICAgICAgIDs7CiAgICAgIGVzYWMKICAgIGRvbmUKICAgICMgUmVz dG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFzaCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5Lgog ICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0 bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Cn0KCgojIGZ1bmNfbm90cXVp ZXQgQVJHLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBFY2hvIHByb2dyYW0gbmFtZSBw cmVmaXhlZCBtZXNzYWdlIG9ubHkgd2hlbiBub3QgaW4gcXVpZXQgbW9kZS4KZnVuY19ub3Rx dWlldCAoKQp7CiAgICAkZGVidWdfY21kCgogICAgJG9wdF9xdWlldCB8fCBmdW5jX2VjaG8g JHsxKyIkQCJ9CgogICAgIyBBIGJ1ZyBpbiBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhl IGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uCiAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGlu IGZvcmNlLCBzbyB3ZSBuZWVkIGFub3RoZXIgY29tbWFuZCB0bwogICAgIyB3b3JrIGFyb3Vu ZCB0aGF0OgogICAgOgp9CgoKIyBmdW5jX3JlbGF0aXZlX3BhdGggU1JDRElSIERTVERJUgoj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2V0IGZ1bmNfcmVsYXRpdmVf cGF0aF9yZXN1bHQgdG8gdGhlIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElS LgpmdW5jX3JlbGF0aXZlX3BhdGggKCkKewogICAgJGRlYnVnX2NtZAoKICAgIGZ1bmNfcmVs YXRpdmVfcGF0aF9yZXN1bHQ9CiAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMSIKICAgIGZ1 bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAog ICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCiAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJp bmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKCiAgICAjIEFzY2VuZCB0aGUgdHJl ZSBzdGFydGluZyBmcm9tIGxpYmRpcgogICAgd2hpbGUgOjsgZG8KICAgICAgIyBjaGVjayBp ZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4IG9mIGJpbmRpcgogICAgICBjYXNlICRmdW5jX3Jl bGF0aXZlX3BhdGhfdGJpbmRpciBpbgogICAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxp YmRpcikKICAgICAgICAgICMgZm91bmQgYW4gZXhhY3QgbWF0Y2gKICAgICAgICAgIGZ1bmNf cmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQogICAgICAgICAgYnJlYWsKICAgICAgICAgIDs7 CiAgICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKICAgICAgICAgICMgZm91 bmQgYSBtYXRjaGluZyBwcmVmaXgKICAgICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19y ZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIi CiAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5h bWVfcmVzdWx0CiAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jl c3VsdCI7IHRoZW4KICAgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCiAg ICAgICAgICBmaQogICAgICAgICAgYnJlYWsKICAgICAgICAgIDs7CiAgICAgICAgKikKICAg ICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKICAgICAg ICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAg ICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiOyB0aGVu CiAgICAgICAgICAgICMgSGF2ZSB0byBkZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290 IQogICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0 aXZlX3BhdGhfcmVzdWx0CiAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2Vs bGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgogICAgICAgICAgICBicmVhawogICAg ICAgICAgZmkKICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNf cmVsYXRpdmVfcGF0aF9yZXN1bHQKICAgICAgICAgIDs7CiAgICAgIGVzYWMKICAgIGRvbmUK CiAgICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5n LXVwIHNsYXNoZXMuCiAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZl X3BhdGhfcmVzdWx0IgogICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJp cG5hbWVfcmVzdWx0CiAgICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2 ZV9wYXRoX3RjYW5jZWxsZWQiCiAgICBpZiB0ZXN0IC1uICIkZnVuY19zdHJpcG5hbWVfcmVz dWx0IjsgdGhlbgogICAgICBmdW5jX2FwcGVuZCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0 ICIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKICAgIGZpCgogICAgIyBOb3JtYWxpc2F0aW9u LiBJZiBiaW5kaXIgaXMgbGliZGlyLCByZXR1cm4gJy4nIGVsc2UgcmVsYXRpdmUgcGF0aC4K ICAgIGlmIHRlc3QgLW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgogICAg ICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIK ICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0 CiAgICBmaQoKICAgIHRlc3QgLW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IiB8fCBm dW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KCiAgICA6Cn0KCgojIGZ1bmNfcXVvdGVfcG9y dGFibGUgRVZBTCBBUkcKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgSW50ZXJu YWwgZnVuY3Rpb24gdG8gcG9ydGFibHkgaW1wbGVtZW50IGZ1bmNfcXVvdGVfYXJnLiAgTm90 ZSB0aGF0IHdlIHN0aWxsCiMga2VlcCBhdHRlbnRpb24gdG8gcGVyZm9ybWFuY2UgaGVyZSBz byB3ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHRyeSB0byBhdm9pZAojIGNhbGxpbmcgc2VkIGJp bmFyeSAoc28gZmFyIE8oTikgY29tcGxleGl0eSBhcyBsb25nIGFzIGZ1bmNfYXBwZW5kIGlz IE8oMSkpLgpmdW5jX3F1b3RlX3BvcnRhYmxlICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICAk cmVxdWlyZV9jaGVja19pZnNfYmFja3NsYXNoCgogICAgZnVuY19xdW90ZV9wb3J0YWJsZV9y ZXN1bHQ9JDIKCiAgICAjIG9uZS10aW1lLWxvb3AgKGVhc3kgYnJlYWspCiAgICB3aGlsZSB0 cnVlCiAgICBkbwogICAgICBpZiAkMTsgdGhlbgogICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFi bGVfcmVzdWx0PWAkRUNITyAiJDIiIHwgJFNFRCBcCiAgICAgICAgICAtZSAiJHNlZF9kb3Vi bGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYAogICAgICAgIGJy ZWFrCiAgICAgIGZpCgogICAgICAjIFF1b3RlIGZvciBldmFsLgogICAgICBjYXNlICRmdW5j X3F1b3RlX3BvcnRhYmxlX3Jlc3VsdCBpbgogICAgICAgICpbXFxcYFwiXCRdKikKICAgICAg ICAgICMgRmFsbGJhY2sgdG8gc2VkIGZvciAkZnVuY19jaGVja19ic19pZnNfYnJva2VuPTos IG9yIHdoZW4gdGhlIHN0cmluZwogICAgICAgICAgIyBjb250YWlucyB0aGUgc2hlbGwgd2ls ZGNhcmQgY2hhcmFjdGVycy4KICAgICAgICAgIGNhc2UgJGNoZWNrX2lmc19iYWNrc2hsYXNo X2Jyb2tlbiRmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdCBpbgogICAgICAgICAgICA6Knwq W1xbXCpcP10qKQogICAgICAgICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0PWAk RUNITyAiJGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0IiBcCiAgICAgICAgICAgICAgICAg IHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCiAgICAgICAgICAgICAgYnJlYWsKICAgICAg ICAgICAgICA7OwogICAgICAgICAgZXNhYwoKICAgICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFi bGVfb2xkX0lGUz0kSUZTCiAgICAgICAgICBmb3IgX0dfY2hhciBpbiAnXCcgJ2AnICciJyAn JCcKICAgICAgICAgIGRvCiAgICAgICAgICAgICMgU1RBVEUoJDEpIFBSRVYoJDIpIFNFUEFS QVRPUigkMykKICAgICAgICAgICAgc2V0IHN0YXJ0ICIiICIiCiAgICAgICAgICAgIGZ1bmNf cXVvdGVfcG9ydGFibGVfcmVzdWx0PWR1bW15IiRfR19jaGFyJGZ1bmNfcXVvdGVfcG9ydGFi bGVfcmVzdWx0JF9HX2NoYXIiZHVtbXkKICAgICAgICAgICAgSUZTPSRfR19jaGFyCiAgICAg ICAgICAgIGZvciBfR19wYXJ0IGluICRmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdAogICAg ICAgICAgICBkbwogICAgICAgICAgICAgIGNhc2UgJDEgaW4KICAgICAgICAgICAgICBxdW90 ZSkKICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVz dWx0ICIkMyQyIgogICAgICAgICAgICAgICAgc2V0IHF1b3RlICIkX0dfcGFydCIgIlxcJF9H X2NoYXIiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgIHN0YXJ0KQogICAgICAg ICAgICAgICAgc2V0IGZpcnN0ICIiICIiCiAgICAgICAgICAgICAgICBmdW5jX3F1b3RlX3Bv cnRhYmxlX3Jlc3VsdD0KICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgZmlyc3Qp CiAgICAgICAgICAgICAgICBzZXQgcXVvdGUgIiRfR19wYXJ0IiAiIgogICAgICAgICAgICAg ICAgOzsKICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIGRvbmUKICAgICAgICAgIGRv bmUKICAgICAgICAgIElGUz0kZnVuY19xdW90ZV9wb3J0YWJsZV9vbGRfSUZTCiAgICAgICAg ICA7OwogICAgICAgICopIDs7CiAgICAgIGVzYWMKICAgICAgYnJlYWsKICAgIGRvbmUKCiAg ICBmdW5jX3F1b3RlX3BvcnRhYmxlX3VucXVvdGVkX3Jlc3VsdD0kZnVuY19xdW90ZV9wb3J0 YWJsZV9yZXN1bHQKICAgIGNhc2UgJGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0IGluCiAg ICAgICMgZG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVy cyB0byBkZWxheQogICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlv biBhbmQgdmFyaWFibGUgZXhwYW5zaW9uCiAgICAgICMgZm9yIGEgc3Vic2VxdWVudCBldmFs LgogICAgICAjIG1hbnkgYm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNr ZXRzIGNvcnJlY3RseQogICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBz ZXBhcmF0ZWx5LgogICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBc CV0qfCpdKnwiIikKICAgICAgICBmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdD1cIiRmdW5j X3F1b3RlX3BvcnRhYmxlX3Jlc3VsdFwiCiAgICAgICAgOzsKICAgIGVzYWMKfQoKCiMgZnVu Y19xdW90ZWZhc3RfZXZhbCBBUkcKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFF1b3Rl IG9uZSBBUkcgKGludGVybmFsKS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byAnZnVuY19xdW90 ZV9hcmcgZXZhbCBBUkcnLAojIGJ1dCBvcHRpbWl6ZWQgZm9yIHNwZWVkLiAgUmVzdWx0IGlz IHN0b3JlZCBpbiAkZnVuY19xdW90ZWZhc3RfZXZhbC4KaWYgdGVzdCB4eWVzID0gYCh4PTsg cHJpbnRmIC12IHggJXEgeWVzOyBlY2hvIHgiJHgiKSAyPi9kZXYvbnVsbGA7IHRoZW4KICBw cmludGYgLXYgX0dMX3Rlc3RfcHJpbnRmX3RpbGRlICVxICd+JwogIGlmIHRlc3QgJ1x+JyA9 ICIkX0dMX3Rlc3RfcHJpbnRmX3RpbGRlIjsgdGhlbgogICAgZnVuY19xdW90ZWZhc3RfZXZh bCAoKQogICAgewogICAgICBwcmludGYgLXYgZnVuY19xdW90ZWZhc3RfZXZhbF9yZXN1bHQg JXEgIiQxIgogICAgfQogIGVsc2UKICAgICMgQnJva2VuIG9sZGVyIEJhc2ggaW1wbGVtZW50 YXRpb25zLiAgTWFrZSB0aG9zZSBmYXN0ZXIgdG9vIGlmIHBvc3NpYmxlLgogICAgZnVuY19x dW90ZWZhc3RfZXZhbCAoKQogICAgewogICAgICBjYXNlICQxIGluCiAgICAgICAgJ34nKikK ICAgICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFibGUgZmFsc2UgIiQxIgogICAgICAgICAgZnVu Y19xdW90ZWZhc3RfZXZhbF9yZXN1bHQ9JGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0CiAg ICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICBwcmludGYgLXYgZnVuY19xdW90ZWZh c3RfZXZhbF9yZXN1bHQgJXEgIiQxIgogICAgICAgICAgOzsKICAgICAgZXNhYwogICAgfQog IGZpCmVsc2UKICBmdW5jX3F1b3RlZmFzdF9ldmFsICgpCiAgewogICAgZnVuY19xdW90ZV9w b3J0YWJsZSBmYWxzZSAiJDEiCiAgICBmdW5jX3F1b3RlZmFzdF9ldmFsX3Jlc3VsdD0kZnVu Y19xdW90ZV9wb3J0YWJsZV9yZXN1bHQKICB9CmZpCgoKIyBmdW5jX3F1b3RlX2FyZyBNT0RF cyBBUkcKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBRdW90ZSBvbmUgQVJHIHRvIGJl IGV2YWxlZCBsYXRlci4gIE1PREVzIGFyZ3VtZW50IG1heSBjb250YWluIHplcm8gb3IgbW9y ZQojIHNwZWNpZmllcnMgbGlzdGVkIGJlbG93IHNlcGFyYXRlZCBieSAnLCcgY2hhcmFjdGVy LiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3bwojIHZhbHVlczoKIyAgIGkpIGZ1bmNfcXVv dGVfYXJnX3Jlc3VsdAojICAgICAgZG91YmxlLXF1b3RlZCAod2hlbiBuZWVkZWQpLCBzdWl0 YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwKIyAgaWkpIGZ1bmNfcXVvdGVfYXJnX3VucXVv dGVkX3Jlc3VsdAojICAgICAgaGFzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFj dGl2ZSB3aXRoaW4gZG91YmxlCiMgICAgICBxdW90ZXMgYmFja3NsYXNoaWZpZWQuICBBdmFp bGFibGUgb25seSBpZiAndW5xdW90ZWQnIGlzIHNwZWNpZmllZC4KIwojIEF2YWlsYWJsZSBt b2RlczoKIyAtLS0tLS0tLS0tLS0tLS0tCiMgJ2V2YWwnIChkZWZhdWx0KQojICAgICAgIC0g ZXNjYXBlIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycwojICdleHBhbmQnCiMgICAgICAgLSB0 aGUgc2FtZSBhcyAnZXZhbCc7ICBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5j ZXMKIyAncHJldHR5JwojICAgICAgIC0gcmVxdWVzdCBhZXN0aGV0aWMgb3V0cHV0LCBpLmUu ICciYSBiIicgaW5zdGVhZCBvZiAnYVwgYicuICBUaGlzIG1pZ2h0CiMgICAgICAgICBiZSB1 c2VkIGxhdGVyIGluIGZ1bmNfcXVvdGUgdG8gZ2V0IG91dHB1dCBsaWtlOiAnZWNobyAiYSBi IicgaW5zdGVhZAojICAgICAgICAgb2YgJ2VjaG8gYVwgYicuICBUaGlzIGlzIHNsb3dlciB0 aGFuIGRlZmF1bHQgb24gc29tZSBzaGVsbHMuCiMgJ3VucXVvdGVkJwojICAgICAgIC0gcHJv ZHVjZSBhbHNvICRmdW5jX3F1b3RlX2FyZ191bnF1b3RlZF9yZXN1bHQgd2hpY2ggZG9lcyBu b3QgY29udGFpbgojICAgICAgICAgd3JhcHBpbmcgZG91YmxlLXF1b3Rlcy4KIwojIEV4YW1w bGVzIGZvciAnZnVuY19xdW90ZV9hcmcgcHJldHR5LHVucXVvdGVkIHN0cmluZyc6CiMKIyAg IHN0cmluZyAgICAgIHwgKl9yZXN1bHQgICAgICAgICAgICAgIHwgKl91bnF1b3RlZF9yZXN1 bHQKIyAgIC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tCiMgICAiICAgICAgICAgICB8IFwiICAgICAgICAgICAgICAgICAgICB8IFwi CiMgICBhIGIgICAgICAgICB8ICJhIGIiICAgICAgICAgICAgICAgICB8IGEgYgojICAgImEg YiIgICAgICAgfCAiXCJhIGJcIiIgICAgICAgICAgICAgfCBcImEgYlwiCiMgICAqICAgICAg ICAgICB8ICIqIiAgICAgICAgICAgICAgICAgICB8ICoKIyAgIHo9IiR7eC0keX0iIHwgIno9 XCJcJHt4LVwkeX1cIiIgICAgIHwgej1cIlwke3gtXCR5fVwiCiMKIyBFeGFtcGxlcyBmb3Ig J2Z1bmNfcXVvdGVfYXJnIHByZXR0eSx1bnF1b3RlZCxleHBhbmQgc3RyaW5nJzoKIwojICAg c3RyaW5nICAgICAgICB8ICAgKl9yZXN1bHQgICAgICAgICAgfCAgKl91bnF1b3RlZF9yZXN1 bHQKIyAgIC0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLQojICAgej0iJHt4LSR5fSIgICB8ICJ6PVwiJHt4LSR5fVwiIiAgICAgfCB6 PVwiJHt4LSR5fVwiCmZ1bmNfcXVvdGVfYXJnICgpCnsKICAgIF9HX3F1b3RlX2V4cGFuZD1m YWxzZQogICAgY2FzZSAsJDEsIGluCiAgICAgICosZXhwYW5kLCopCiAgICAgICAgX0dfcXVv dGVfZXhwYW5kPToKICAgICAgICA7OwogICAgZXNhYwoKICAgIGNhc2UgLCQxLCBpbgogICAg ICAqLHByZXR0eSwqfCosZXhwYW5kLCp8Kix1bnF1b3RlZCwqKQogICAgICAgIGZ1bmNfcXVv dGVfcG9ydGFibGUgJF9HX3F1b3RlX2V4cGFuZCAiJDIiCiAgICAgICAgZnVuY19xdW90ZV9h cmdfcmVzdWx0PSRmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdAogICAgICAgIGZ1bmNfcXVv dGVfYXJnX3VucXVvdGVkX3Jlc3VsdD0kZnVuY19xdW90ZV9wb3J0YWJsZV91bnF1b3RlZF9y ZXN1bHQKICAgICAgICA7OwogICAgICAqKQogICAgICAgICMgRmFzdGVyIHF1b3RlLWZvci1l dmFsIGZvciBzb21lIHNoZWxscy4KICAgICAgICBmdW5jX3F1b3RlZmFzdF9ldmFsICIkMiIK ICAgICAgICBmdW5jX3F1b3RlX2FyZ19yZXN1bHQ9JGZ1bmNfcXVvdGVmYXN0X2V2YWxfcmVz dWx0CiAgICAgICAgOzsKICAgIGVzYWMKfQoKCiMgZnVuY19xdW90ZSBNT0RFcyBBUkdzLi4u CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUXVvdGUgYWxsIEFSR3MgdG8gYmUgZXZh bGVkIGxhdGVyIGFuZCBqb2luIHRoZW0gaW50byBzaW5nbGUgY29tbWFuZC4gIFNlZQojIGZ1 bmNfcXVvdGVfYXJnJ3MgZGVzY3JpcHRpb24gZm9yIG1vcmUgaW5mby4KZnVuY19xdW90ZSAo KQp7CiAgICAkZGVidWdfY21kCiAgICBfR19mdW5jX3F1b3RlX21vZGU9JDEgOyBzaGlmdAog ICAgZnVuY19xdW90ZV9yZXN1bHQ9CiAgICB3aGlsZSB0ZXN0IDAgLWx0ICQjOyBkbwogICAg ICBmdW5jX3F1b3RlX2FyZyAiJF9HX2Z1bmNfcXVvdGVfbW9kZSIgIiQxIgogICAgICBpZiB0 ZXN0IC1uICIkZnVuY19xdW90ZV9yZXN1bHQiOyB0aGVuCiAgICAgICAgZnVuY19hcHBlbmQg ZnVuY19xdW90ZV9yZXN1bHQgIiAkZnVuY19xdW90ZV9hcmdfcmVzdWx0IgogICAgICBlbHNl CiAgICAgICAgZnVuY19hcHBlbmQgZnVuY19xdW90ZV9yZXN1bHQgIiRmdW5jX3F1b3RlX2Fy Z19yZXN1bHQiCiAgICAgIGZpCiAgICAgIHNoaWZ0CiAgICBkb25lCn0KCgojIGZ1bmNfc3Ry aXBuYW1lIFBSRUZJWCBTVUZGSVggTkFNRQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQojIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIGZyb20gTkFNRSwgYW5kIHN0b3Jl IGluIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4KIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5v dCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKIyBjaGFyYWN0ZXJzLCBoYXNo ZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCiMg ZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KaWYgdGVzdCB5 ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KICBldmFsICdmdW5jX3N0cmlwbmFtZSAo KQogIHsKICAgICRkZWJ1Z19jbWQKCiAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAk e1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCiAgICAjIHBvc2l0aW9uYWwg cGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSB2YXJpYWJsZSBmaXJzdC4K ICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kMwogICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0 PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkMSJ9CiAgICBmdW5jX3N0cmlwbmFtZV9yZXN1 bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiQyIn0KICB9JwplbHNlCiAgZnVuY19zdHJp cG5hbWUgKCkKICB7CiAgICAkZGVidWdfY21kCgogICAgY2FzZSAkMiBpbgogICAgICAuKikg ZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAtZSAicyVeJDElJSIg LWUgInMlXFxcXCQyXCQlJSJgOzsKICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1g JEVDSE8gIiQzIiB8ICRTRUQgLWUgInMlXiQxJSUiIC1lICJzJSQyXCQlJSJgOzsKICAgIGVz YWMKICB9CmZpCgoKIyBmdW5jX3Nob3dfZXZhbCBDTUQgW0ZBSUxfRVhQXQojIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVW5sZXNzIG9wdF9xdWlldCBpcyB0cnVlLCB0aGVu IG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCiMgbm90IHRydWUsIGV2YWx1 YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQ CiMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCmZ1bmNfc2hvd19ldmFsICgpCnsKICAg ICRkZWJ1Z19jbWQKCiAgICBfR19jbWQ9JDEKICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9Cgog ICAgZnVuY19xdW90ZV9hcmcgcHJldHR5LGV4cGFuZCAiJF9HX2NtZCIKICAgIGV2YWwgImZ1 bmNfbm90cXVpZXQgJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKCiAgICAkb3B0X2RyeV9ydW4g fHwgewogICAgICBldmFsICIkX0dfY21kIgogICAgICBfR19zdGF0dXM9JD8KICAgICAgaWYg dGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7IHRoZW4KCWV2YWwgIihleGl0ICRfR19zdGF0dXMp OyAkX0dfZmFpbF9leHAiCiAgICAgIGZpCiAgICB9Cn0KCgojIGZ1bmNfc2hvd19ldmFsX2xv Y2FsZSBDTUQgW0ZBSUxfRVhQXQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQojIFVubGVzcyBvcHRfcXVpZXQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhl biwgaWYgb3B0X2RyeXJ1biBpcwojIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUg ZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAojIGlzIGdpdmVuLCB0aGVu IGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCmZ1 bmNfc2hvd19ldmFsX2xvY2FsZSAoKQp7CiAgICAkZGVidWdfY21kCgogICAgX0dfY21kPSQx CiAgICBfR19mYWlsX2V4cD0kezItJzonfQoKICAgICRvcHRfcXVpZXQgfHwgewogICAgICBm dW5jX3F1b3RlX2FyZyBleHBhbmQscHJldHR5ICIkX0dfY21kIgogICAgICBldmFsICJmdW5j X2VjaG8gJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKICAgIH0KCiAgICAkb3B0X2RyeV9ydW4g fHwgewogICAgICBldmFsICIkX0dfdXNlcl9sb2NhbGUKCSAgICAkX0dfY21kIgogICAgICBf R19zdGF0dXM9JD8KICAgICAgZXZhbCAiJF9HX3NhZmVfbG9jYWxlIgogICAgICBpZiB0ZXN0 IDAgLW5lICIkX0dfc3RhdHVzIjsgdGhlbgoJZXZhbCAiKGV4aXQgJF9HX3N0YXR1cyk7ICRf R19mYWlsX2V4cCIKICAgICAgZmkKICAgIH0KfQoKCiMgZnVuY190cl9zaAojIC0tLS0tLS0t LS0KIyBUdXJuICQxIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFi bGUgbmFtZS4KIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFs bCBjaGFyYWN0ZXJzCiMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQg d2l0aCAnXycuIEZ1cnRoZXIsCiMgaWYgJDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycg aXMgcHJlcGVuZGVkIGFzIHdlbGwuCmZ1bmNfdHJfc2ggKCkKewogICAgJGRlYnVnX2NtZAoK ICAgIGNhc2UgJDEgaW4KICAgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKICAgICAgZnVu Y190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEIC1lICdzL15cKFswLTldXCkvX1wx LycgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnYAogICAgICA7OwogICAgKiApCiAgICAgIGZ1 bmNfdHJfc2hfcmVzdWx0PSQxCiAgICAgIDs7CiAgICBlc2FjCn0KCgojIGZ1bmNfdmVyYm9z ZSBBUkcuLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tCiMgRWNobyBwcm9ncmFtIG5hbWUgcHJl Zml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KZnVuY192ZXJib3NlICgpCnsK ICAgICRkZWJ1Z19jbWQKCiAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICIkKiIKCiAg ICA6Cn0KCgojIGZ1bmNfd2Fybl9hbmRfY29udGludWUgQVJHLi4uCiMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5n IG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCmZ1bmNfd2Fybl9hbmRfY29udGludWUgKCkK ewogICAgJGRlYnVnX2NtZAoKICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCgogICAgZnVuY19l Y2hvX2luZml4XzEgIiR7dGNfcmVkfXdhcm5pbmckdGNfcmVzZXQiICIkKiIgPiYyCn0KCgoj IGZ1bmNfd2FybmluZyBDQVRFR09SWSBBUkcuLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRv IHN0YW5kYXJkIGVycm9yLiBXYXJuaW5nCiMgbWVzc2FnZXMgY2FuIGJlIGZpbHRlcmVkIGFj Y29yZGluZyB0byBDQVRFR09SWSwgd2hlcmUgdGhpcyBmdW5jdGlvbgojIGVsaWRlcyBtZXNz YWdlcyB3aGVyZSBDQVRFR09SWSBpcyBub3QgbGlzdGVkIGluIHRoZSBnbG9iYWwgdmFyaWFi bGUKIyAnb3B0X3dhcm5pbmdfdHlwZXMnLgpmdW5jX3dhcm5pbmcgKCkKewogICAgJGRlYnVn X2NtZAoKICAgICMgQ0FURUdPUlkgbXVzdCBiZSBpbiB0aGUgd2FybmluZ19jYXRlZ29yaWVz IGxpc3QhCiAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAiIGluCiAgICAgICoiICQx ICIqKSA7OwogICAgICAqKSBmdW5jX2ludGVybmFsX2Vycm9yICJpbnZhbGlkIHdhcm5pbmcg Y2F0ZWdvcnkgJyQxJyIgOzsKICAgIGVzYWMKCiAgICBfR19jYXRlZ29yeT0kMQogICAgc2hp ZnQKCiAgICBjYXNlICIgJG9wdF93YXJuaW5nX3R5cGVzICIgaW4KICAgICAgKiIgJF9HX2Nh dGVnb3J5ICIqKSAkd2FybmluZ19mdW5jICR7MSsiJEAifSA7OwogICAgZXNhYwp9CgoKIyBm dW5jX3NvcnRfdmVyIFZFUjEgVkVSMgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgJ3Nv cnQgLVYnIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLgojIE5vdGUgdGhpcyBkZXZpYXRl cyBmcm9tIHRoZSB2ZXJzaW9uIGNvbXBhcmlzb24gaW4gYXV0b21ha2UKIyBpbiB0aGF0IGl0 IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5kIHRyZWF0cyAxLjQuNGEgPCAxLjQtcDNhCiMgYnV0 IHRoaXMgc2hvdWxkIHN1ZmZpY2UgYXMgd2Ugd29uJ3QgYmUgc3BlY2lmeWluZyBvbGQKIyB2 ZXJzaW9uIGZvcm1hdHMgb3IgcmVkdW5kYW50IHRyYWlsaW5nIC4wIGluIGJvb3RzdHJhcC5j b25mLgojIElmIHdlIGRpZCB3YW50IGZ1bGwgY29tcGF0aWJpbGl0eSB0aGVuIHdlIHNob3Vs ZCBwcm9iYWJseQojIHVzZSBtNF92ZXJzaW9uX2NvbXBhcmUgZnJvbSBhdXRvY29uZi4KZnVu Y19zb3J0X3ZlciAoKQp7CiAgICAkZGVidWdfY21kCgogICAgcHJpbnRmICclc1xuJXNcbicg IiQxIiAiJDIiIFwKICAgICAgfCBzb3J0IC10LiAtayAxLDFuIC1rIDIsMm4gLWsgMywzbiAt ayA0LDRuIC1rIDUsNW4gLWsgNiw2biAtayA3LDduIC1rIDgsOG4gLWsgOSw5bgp9CgojIGZ1 bmNfbHRfdmVyIFBSRVYgQ1VSUgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJldHVybiB0 cnVlIGlmIFBSRVYgYW5kIENVUlIgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyIGFjY29yZGlu ZyB0bwojIGZ1bmNfc29ydF92ZXIsIG90aGVyd2lzZSBmYWxzZS4gIFVzZSBpdCBsaWtlIHRo aXM6CiMKIyAgZnVuY19sdF92ZXIgIiRwcmV2X3ZlciIgIiRwcm9wb3NlZF92ZXIiIHx8IGZ1 bmNfZmF0YWxfZXJyb3IgIi4uLiIKZnVuY19sdF92ZXIgKCkKewogICAgJGRlYnVnX2NtZAoK ICAgIHRlc3QgIngkMSIgPSB4YGZ1bmNfc29ydF92ZXIgIiQxIiAiJDIiIHwgJFNFRCAxcWAK fQoKCiMgTG9jYWwgdmFyaWFibGVzOgojIG1vZGU6IHNoZWxsLXNjcmlwdAojIHNoLWluZGVu dGF0aW9uOiAyCiMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0 YW1wKQojIHRpbWUtc3RhbXAtcGF0dGVybjogIjEwL3NjcmlwdHZlcnNpb249JTp5LSUwMm0t JTAyZC4lMDJIOyAjIFVUQyIKIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKIyBFbmQ6 CiMhIC9iaW4vc2gKCiMgQSBwb3J0YWJsZSwgcGx1Z2dhYmxlIG9wdGlvbiBwYXJzZXIgZm9y IEJvdXJuZSBzaGVsbC4KIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAxMAoKIyBU aGlzIGlzIGZyZWUgc29mdHdhcmUuICBUaGVyZSBpcyBOTyB3YXJyYW50eTsgbm90IGV2ZW4g Zm9yCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLgojCiMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTksIDIwMjEsIDIwMjMtMjAyNCBCb290 c3RyYXAgQXV0aG9ycwojCiMgVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBNSVQgbGljZW5zZQojIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xp Y2Vuc2VzL01JVD4sIGFuZCBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyCiMgPGh0dHBzOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sPi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBv ZgojIHRoZXNlIGxpY2Vuc2VzIHdoZW4gdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhpcyBz b2Z0d2FyZSBvciBhbnkgb2YKIyB0aGUgZmlsZXMgd2l0aGluIGl0LiAgU2VlIHRoZSBVUkxz IGFib3ZlLCBvciB0aGUgZmlsZSBgTElDRU5TRWAKIyBpbmNsdWRlZCBpbiB0aGUgQm9vdHN0 cmFwIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGZ1bGwgbGljZW5zZSB0ZXh0cy4KCiMgUGxlYXNl IHJlcG9ydCBidWdzIG9yIHByb3Bvc2UgcGF0Y2hlcyB0bzoKIyA8aHR0cHM6Ly9naXRodWIu Y29tL2dudWxpYi1tb2R1bGVzL2Jvb3RzdHJhcC9pc3N1ZXM+CgojIFNldCBhIHZlcnNpb24g c3RyaW5nIGZvciB0aGlzIHNjcmlwdC4Kc2NyaXB0dmVyc2lvbj0yMDE5LTAyLTE5LjE1OyAj IFVUQwoKCiMjIC0tLS0tLSAjIwojIyBVc2FnZS4gIyMKIyMgLS0tLS0tICMjCgojIFRoaXMg ZmlsZSBpcyBhIGxpYnJhcnkgZm9yIHBhcnNpbmcgb3B0aW9ucyBpbiB5b3VyIHNoZWxsIHNj cmlwdHMgYWxvbmcKIyB3aXRoIGFzc29ydGVkIG90aGVyIHVzZWZ1bCBzdXBwb3J0aW5nIGZl YXR1cmVzIHRoYXQgeW91IGNhbiBtYWtlIHVzZQojIG9mIHRvby4KIwojIEZvciB0aGUgc2lt cGxlc3Qgc2NyaXB0cyB5b3UgbWlnaHQgbmVlZCBvbmx5OgojCiMgICAjIS9iaW4vc2gKIyAg IC4gcmVsYXRpdmUvcGF0aC90by9mdW5jbGliLnNoCiMgICAuIHJlbGF0aXZlL3BhdGgvdG8v b3B0aW9ucy1wYXJzZXIKIyAgIHNjcmlwdHZlcnNpb249MS4wCiMgICBmdW5jX29wdGlvbnMg JHsxKyIkQCJ9CiMgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBz aGlmdAojICAgLi4ucmVzdCBvZiB5b3VyIHNjcmlwdC4uLgojCiMgSW4gb3JkZXIgZm9yIHRo ZSAnLS12ZXJzaW9uJyBvcHRpb24gdG8gd29yaywgeW91IHdpbGwgbmVlZCB0byBoYXZlIGEK IyBzdWl0YWJseSBmb3JtYXR0ZWQgY29tbWVudCBsaWtlIHRoZSBvbmUgYXQgdGhlIHRvcCBv ZiB0aGlzIGZpbGUKIyBzdGFydGluZyB3aXRoICcjIFdyaXR0ZW4gYnkgJyBhbmQgZW5kaW5n IHdpdGggJyMgQ29weXJpZ2h0Jy4KIwojIEZvciAnLWgnIGFuZCAnLS1oZWxwJyB0byB3b3Jr LCB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBvbmUgbGluZQojIGRlc2NyaXB0aW9uIG9mIHlvdXIg c2NyaXB0J3MgcHVycG9zZSBpbiBhIGNvbW1lbnQgZGlyZWN0bHkgYWJvdmUgdGhlCiMgJyMg V3JpdHRlbiBieSAnIGxpbmUsIGxpa2UgdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmls ZS4KIwojIFRoZSBkZWZhdWx0IG9wdGlvbnMgYWxzbyBzdXBwb3J0ICctLWRlYnVnJywgd2hp Y2ggd2lsbCB0dXJuIG9uIHNoZWxsCiMgZXhlY3V0aW9uIHRyYWNpbmcgKHNlZSB0aGUgY29t bWVudCBhYm92ZSBkZWJ1Z19jbWQgYmVsb3cgZm9yIGFub3RoZXIKIyB1c2UpLCBhbmQgJy0t dmVyYm9zZScgYW5kIHRoZSBmdW5jX3ZlcmJvc2UgZnVuY3Rpb24gdG8gYWxsb3cgeW91ciBz Y3JpcHQKIyB0byBkaXNwbGF5IHZlcmJvc2UgbWVzc2FnZXMgb25seSB3aGVuIHlvdXIgdXNl ciBoYXMgc3BlY2lmaWVkCiMgJy0tdmVyYm9zZScuCiMKIyBBZnRlciBzb3VyY2luZyB0aGlz IGZpbGUsIHlvdSBjYW4gcGx1ZyBpbiBwcm9jZXNzaW5nIGZvciBhZGRpdGlvbmFsCiMgb3B0 aW9ucyBieSBhbWVuZGluZyB0aGUgdmFyaWFibGVzIGZyb20gdGhlICdDb25maWd1cmF0aW9u JyBzZWN0aW9uCiMgYmVsb3csIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0 aGUgJ09wdGlvbiBwYXJzaW5nJwojIHNlY3Rpb24gZnVydGhlciBkb3duLgoKIyMgLS0tLS0t LS0tLS0tLS0gIyMKIyMgQ29uZmlndXJhdGlvbi4gIyMKIyMgLS0tLS0tLS0tLS0tLS0gIyMK CiMgWW91IHNob3VsZCBvdmVycmlkZSB0aGVzZSB2YXJpYWJsZXMgaW4geW91ciBzY3JpcHQg YWZ0ZXIgc291cmNpbmcgdGhpcwojIGZpbGUgc28gdGhhdCB0aGV5IHJlZmxlY3QgdGhlIGN1 c3RvbWlzYXRpb25zIHlvdSBoYXZlIGFkZGVkIHRvIHRoZQojIG9wdGlvbiBwYXJzZXIuCgoj IFRoZSB1c2FnZSBsaW5lIGZvciBvcHRpb24gcGFyc2luZyBlcnJvcnMgYW5kIHRoZSBzdGFy dCBvZiAnLWgnIGFuZAojICctLWhlbHAnIG91dHB1dCBtZXNzYWdlcy4gWW91IGNhbiBlbWJl ZCBzaGVsbCB2YXJpYWJsZXMgZm9yIGRlbGF5ZWQKIyBleHBhbnNpb24gYXQgdGhlIHRpbWUg dGhlIG1lc3NhZ2UgaXMgZGlzcGxheWVkLCBidXQgeW91IHdpbGwgbmVlZCB0bwojIHF1b3Rl IG90aGVyIHNoZWxsIG1ldGEtY2hhcmFjdGVycyBjYXJlZnVsbHkgdG8gcHJldmVudCB0aGVt IGJlaW5nCiMgZXhwYW5kZWQgd2hlbiB0aGUgY29udGVudHMgYXJlIGV2YWxlZC4KdXNhZ2U9 JyRwcm9ncGF0aCBbT1BUSU9OXS4uLicKCiMgU2hvcnQgaGVscCBtZXNzYWdlIGluIHJlc3Bv bnNlIHRvICctaCcgYW5kICctLWhlbHAnLiAgQWRkIHRvIHRoaXMgb3IKIyBvdmVycmlkZSBp dCBhZnRlciBzb3VyY2luZyB0aGlzIGxpYnJhcnkgdG8gcmVmbGVjdCB0aGUgZnVsbCBzZXQg b2YKIyBvcHRpb25zIHlvdXIgc2NyaXB0IGFjY2VwdHMuCnVzYWdlX21lc3NhZ2U9IlwKICAg ICAgIC0tZGVidWcgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKICAgLVcs IC0td2FybmluZ3M9Q0FURUdPUlkKICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCB0aGUg d2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbYWxsXQogICAtdiwgLS12ZXJib3NlICAg ICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCiAgICAgICAtLXZlcnNpb24gICAgICBw cmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CiAgIC1oLCAtLWhlbHAgICAgICAg ICBwcmludCBzaG9ydCBvciBsb25nIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAoiCgojIEFkZGl0 aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8g Jy0taGVscCcuCmxvbmdfaGVscF9tZXNzYWdlPSIKV2FybmluZyBjYXRlZ29yaWVzIGluY2x1 ZGU6CiAgICAgICAnYWxsJyAgICAgICAgICBzaG93IGFsbCB3YXJuaW5ncwogICAgICAgJ25v bmUnICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5ncwogICAgICAgJ2Vycm9yJyAg ICAgICAgd2FybmluZ3MgYXJlIHRyZWF0ZWQgYXMgZmF0YWwgZXJyb3JzIgoKIyBIZWxwIG1l c3NhZ2UgcHJpbnRlZCBiZWZvcmUgZmF0YWwgb3B0aW9uIHBhcnNpbmcgZXJyb3JzLgpmYXRh bF9oZWxwPSJUcnkgJ1wkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4i CgoKCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIyMgSG9vayBmdW5jdGlvbiBt YW5hZ2VtZW50LiAjIwojIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCgojIFRoaXMg c2VjdGlvbiBjb250YWlucyBmdW5jdGlvbnMgZm9yIGFkZGluZywgcmVtb3ZpbmcsIGFuZCBy dW5uaW5nIGhvb2tzCiMgaW4gdGhlIG1haW4gY29kZS4gIEEgaG9vayBpcyBqdXN0IGEgbGlz dCBvZiBmdW5jdGlvbiBuYW1lcyB0aGF0IGNhbiBiZQojIHJ1biBpbiBvcmRlciBsYXRlciBv bi4KCiMgZnVuY19ob29rYWJsZSBGVU5DX05BTUUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQojIERlY2xhcmUgdGhhdCBGVU5DX05BTUUgd2lsbCBydW4gaG9va3MgYWRkZWQgd2l0aAoj ICdmdW5jX2FkZF9ob29rIEZVTkNfTkFNRSAuLi4nLgpmdW5jX2hvb2thYmxlICgpCnsKICAg ICRkZWJ1Z19jbWQKCiAgICBmdW5jX2FwcGVuZCBob29rYWJsZV9mbnMgIiAkMSIKfQoKCiMg ZnVuY19hZGRfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCiMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiMgUmVxdWVzdCB0aGF0IEZVTkNfTkFNRSBjYWxsIEhPT0tfRlVO QyBiZWZvcmUgaXQgcmV0dXJucy4gIEZVTkNfTkFNRSBtdXN0CiMgZmlyc3QgaGF2ZSBiZWVu IGRlY2xhcmVkICJob29rYWJsZSIgYnkgYSBjYWxsIHRvICdmdW5jX2hvb2thYmxlJy4KZnVu Y19hZGRfaG9vayAoKQp7CiAgICAkZGVidWdfY21kCgogICAgY2FzZSAiICRob29rYWJsZV9m bnMgIiBpbgogICAgICAqIiAkMSAiKikgOzsKICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAi JyQxJyBkb2VzIG5vdCBhY2NlcHQgaG9vayBmdW5jdGlvbnMuIiA7OwogICAgZXNhYwoKICAg IGV2YWwgZnVuY19hcHBlbmQgJHsxfV9ob29rcyAnIiAkMiInCn0KCgojIGZ1bmNfcmVtb3Zl X2hvb2sgRlVOQ19OQU1FIEhPT0tfRlVOQwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQojIFJlbW92ZSBIT09LX0ZVTkMgZnJvbSB0aGUgbGlzdCBvZiBob29rIGZ1 bmN0aW9ucyB0byBiZSBjYWxsZWQgYnkKIyBGVU5DX05BTUUuCmZ1bmNfcmVtb3ZlX2hvb2sg KCkKewogICAgJGRlYnVnX2NtZAoKICAgIGV2YWwgJHsxfV9ob29rcz0nYCRFQ0hPICJcJCck MSdfaG9va3MiIHwkU0VEICJzfCAnJDInfHwiYCcKfQoKCiMgZnVuY19wcm9wYWdhdGVfcmVz dWx0IEZVTkNfTkFNRV9BIEZVTkNfTkFNRV9CCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgSWYgdGhlICpfcmVzdWx0IHZhcmlhYmxlIG9mIEZV TkNfTkFNRV9BIF9pcyBzZXRfLCBhc3NpZ24gaXRzIHZhbHVlIHRvCiMgKl9yZXN1bHQgdmFy aWFibGUgb2YgRlVOQ19OQU1FX0IuCmZ1bmNfcHJvcGFnYXRlX3Jlc3VsdCAoKQp7CiAgICAk ZGVidWdfY21kCgogICAgZnVuY19wcm9wYWdhdGVfcmVzdWx0X3Jlc3VsdD06CiAgICBpZiBl dmFsICJ0ZXN0IFwiXCR7JHsxfV9yZXN1bHQrc2V0fVwiID0gc2V0IgogICAgdGhlbgogICAg ICBldmFsICIkezJ9X3Jlc3VsdD1cJCR7MX1fcmVzdWx0IgogICAgZWxzZQogICAgICBmdW5j X3Byb3BhZ2F0ZV9yZXN1bHRfcmVzdWx0PWZhbHNlCiAgICBmaQp9CgoKIyBmdW5jX3J1bl9o b29rcyBGVU5DX05BTUUgW0FSR10uLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIyBSdW4gYWxsIGhvb2sgZnVuY3Rpb25zIHJlZ2lzdGVyZWQgdG8gRlVOQ19OQU1F LgojIEl0J3MgYXNzdW1lZCB0aGF0IHRoZSBsaXN0IG9mIGhvb2sgZnVuY3Rpb25zIGNvbnRh aW5zIG5vdGhpbmcgbW9yZQojIHRoYW4gYSB3aGl0ZXNwYWNlLWRlbGltaXRlZCBsaXN0IG9m IGxlZ2FsIHNoZWxsIGZ1bmN0aW9uIG5hbWVzLCBhbmQKIyBubyBlZmZvcnQgaXMgd2FzdGVk IHRyeWluZyB0byBjYXRjaCBzaGVsbCBtZXRhLWNoYXJhY3RlcnMgb3IgcHJlc2VydmUKIyB3 aGl0ZXNwYWNlLgpmdW5jX3J1bl9ob29rcyAoKQp7CiAgICAkZGVidWdfY21kCgogICAgY2Fz ZSAiICRob29rYWJsZV9mbnMgIiBpbgogICAgICAqIiAkMSAiKikgOzsKICAgICAgKikgZnVu Y19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBzdXBwb3J0IGhvb2sgZnVuY3Rpb25zLiIg OzsKICAgIGVzYWMKCiAgICBldmFsIF9HX2hvb2tfZm5zPVwkJDFfaG9va3M7IHNoaWZ0Cgog ICAgZm9yIF9HX2hvb2sgaW4gJF9HX2hvb2tfZm5zOyBkbwogICAgICBmdW5jX3Vuc2V0ICIk e19HX2hvb2t9X3Jlc3VsdCIKICAgICAgZXZhbCAkX0dfaG9vayAnJHsxKyIkQCJ9JwogICAg ICBmdW5jX3Byb3BhZ2F0ZV9yZXN1bHQgJF9HX2hvb2sgZnVuY19ydW5faG9va3MKICAgICAg aWYgJGZ1bmNfcHJvcGFnYXRlX3Jlc3VsdF9yZXN1bHQ7IHRoZW4KICAgICAgICBldmFsIHNl dCBkdW1teSAiJGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdCI7IHNoaWZ0CiAgICAgIGZpCiAgICBk b25lCn0KCgoKIyMgLS0tLS0tLS0tLS0tLS0tICMjCiMjIE9wdGlvbiBwYXJzaW5nLiAjIwoj IyAtLS0tLS0tLS0tLS0tLS0gIyMKCiMgSW4gb3JkZXIgdG8gYWRkIHlvdXIgb3duIG9wdGlv biBwYXJzaW5nIGhvb2tzLCB5b3UgbXVzdCBhY2NlcHQgdGhlCiMgZnVsbCBwb3NpdGlvbmFs IHBhcmFtZXRlciBsaXN0IGZyb20geW91ciBob29rIGZ1bmN0aW9uLiAgWW91IG1heSByZW1v dmUKIyBvciBlZGl0IGFueSBvcHRpb25zIHRoYXQgeW91IGFjdGlvbiwgYW5kIHRoZW4gcGFz cyBiYWNrIHRoZSByZW1haW5pbmcKIyB1bnByb2Nlc3NlZCBvcHRpb25zIGluICc8aG9va2Vk X2Z1bmN0aW9uX25hbWU+X3Jlc3VsdCcsIGVzY2FwZWQKIyBzdWl0YWJseSBmb3IgJ2V2YWwn LgojCiMgVGhlICc8aG9va2VkX2Z1bmN0aW9uX25hbWU+X3Jlc3VsdCcgdmFyaWFibGUgaXMg YXV0b21hdGljYWxseSB1bnNldAojIGJlZm9yZSB5b3VyIGhvb2sgZ2V0cyBjYWxsZWQ7IGZv ciBiZXN0IHBlcmZvcm1hbmNlLCBvbmx5IHNldCB0aGUKIyAqX3Jlc3VsdCB2YXJpYWJsZSB3 aGVuIG5lY2Vzc2FyeSAoaS5lLiBkb24ndCBjYWxsIHRoZSAnZnVuY19xdW90ZScKIyBmdW5j dGlvbiB1bm5lY2Vzc2FyaWx5IGJlY2F1c2UgaXQgY2FuIGJlIGFuIGV4cGVuc2l2ZSBvcGVy YXRpb24gb24gc29tZQojIG1hY2hpbmVzKS4KIwojIExpa2UgdGhpczoKIwojICAgIG15X29w dGlvbnNfcHJlcCAoKQojICAgIHsKIyAgICAgICAgJGRlYnVnX2NtZAojCiMgICAgICAgICMg RXh0ZW5kIHRoZSBleGlzdGluZyB1c2FnZSBtZXNzYWdlLgojICAgICAgICB1c2FnZV9tZXNz YWdlPSR1c2FnZV9tZXNzYWdlJwojICAgICAgLXMsIC0tc2lsZW50ICAgICAgIGRvbidcJyd0 IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKIyAgICAnCiMgICAgICAgICMgTm8gY2hh bmdlIGluICckQCcgKGlnbm9yZWQgY29tcGxldGVseSBieSB0aGlzIGhvb2spLiAgTGVhdmUK IyAgICAgICAgIyBteV9vcHRpb25zX3ByZXBfcmVzdWx0IHZhcmlhYmxlIGludGFjdC4KIyAg ICB9CiMgICAgZnVuY19hZGRfaG9vayBmdW5jX29wdGlvbnNfcHJlcCBteV9vcHRpb25zX3By ZXAKIwojCiMgICAgbXlfc2lsZW50X29wdGlvbiAoKQojICAgIHsKIyAgICAgICAgJGRlYnVn X2NtZAojCiMgICAgICAgIGFyZ3NfY2hhbmdlZD1mYWxzZQojCiMgICAgICAgICMgTm90ZSB0 aGF0LCBmb3IgZWZmaWNpZW5jeSwgd2UgcGFyc2UgYXMgbWFueSBvcHRpb25zIGFzIHdlIGNh bgojICAgICAgICAjIHJlY29nbmlzZSBpbiBhIGxvb3AgYmVmb3JlIHBhc3NpbmcgdGhlIHJl bWFpbmRlciBiYWNrIHRvIHRoZQojICAgICAgICAjIGNhbGxlciBvbiB0aGUgZmlyc3QgdW5y ZWNvZ25pc2VkIGFyZ3VtZW50IHdlIGVuY291bnRlci4KIyAgICAgICAgd2hpbGUgdGVzdCAk IyAtZ3QgMDsgZG8KIyAgICAgICAgICBvcHQ9JDE7IHNoaWZ0CiMgICAgICAgICAgY2FzZSAk b3B0IGluCiMgICAgICAgICAgICAtLXNpbGVudHwtcykgb3B0X3NpbGVudD06CiMgICAgICAg ICAgICAgICAgICAgICAgICAgYXJnc19jaGFuZ2VkPToKIyAgICAgICAgICAgICAgICAgICAg ICAgICA7OwojICAgICAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0 aW9uczoKIyAgICAgICAgICAgIC1zKikgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAi JF9HX29wdCIKIyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3Nw bGl0X3Nob3J0X29wdF9uYW1lIiBcCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIt JGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CiMgICAgICAgICAgICAgICAg ICAgICAgICAgc2hpZnQKIyAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzX2NoYW5nZWQ9 OgojICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiMgICAgICAgICAgICAqKSAgICAgICAg ICAgIyBNYWtlIHN1cmUgdGhlIGZpcnN0IHVucmVjb2duaXNlZCBvcHRpb24gIiRfR19vcHQi CiMgICAgICAgICAgICAgICAgICAgICAgICAgIyBpcyBhZGRlZCBiYWNrIHRvICIkQCIgaW4g Y2FzZSB3ZSBuZWVkIGl0IGxhdGVyLAojICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYg JGFyZ3NfY2hhbmdlZCB3YXMgc2V0IHRvICd0cnVlJy4KIyAgICAgICAgICAgICAgICAgICAg ICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsgc2hpZnQ7IGJyZWFrIDs7CiMg ICAgICAgICAgZXNhYwojICAgICAgICBkb25lCiMKIyAgICAgICAgIyBPbmx5IGNhbGwgJ2Z1 bmNfcXVvdGUnIGhlcmUgaWYgd2UgcHJvY2Vzc2VkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4K IyAgICAgICAgaWYgJGFyZ3NfY2hhbmdlZDsgdGhlbgojICAgICAgICAgIGZ1bmNfcXVvdGUg ZXZhbCAkezErIiRAIn0KIyAgICAgICAgICBteV9zaWxlbnRfb3B0aW9uX3Jlc3VsdD0kZnVu Y19xdW90ZV9yZXN1bHQKIyAgICAgICAgZmkKIyAgICB9CiMgICAgZnVuY19hZGRfaG9vayBm dW5jX3BhcnNlX29wdGlvbnMgbXlfc2lsZW50X29wdGlvbgojCiMKIyAgICBteV9vcHRpb25f dmFsaWRhdGlvbiAoKQojICAgIHsKIyAgICAgICAgJGRlYnVnX2NtZAojCiMgICAgICAgICRv cHRfc2lsZW50ICYmICRvcHRfdmVyYm9zZSAmJiBmdW5jX2ZhdGFsX2hlbHAgIlwKIyAgICAn LS1zaWxlbnQnIGFuZCAnLS12ZXJib3NlJyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNp dmUuIgojICAgIH0KIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBt eV9vcHRpb25fdmFsaWRhdGlvbgojCiMgWW91J2xsIGFsc28gbmVlZCB0byBtYW51YWxseSBh bWVuZCAkdXNhZ2VfbWVzc2FnZSB0byByZWZsZWN0IHRoZSBleHRyYQojIG9wdGlvbnMgeW91 IHBhcnNlLiAgSXQncyBwcmVmZXJhYmxlIHRvIGFwcGVuZCBpZiB5b3UgY2FuLCBzbyB0aGF0 CiMgbXVsdGlwbGUgb3B0aW9uIHBhcnNpbmcgaG9va3MgY2FuIGJlIGFkZGVkIHNhZmVseS4K CgojIGZ1bmNfb3B0aW9uc19maW5pc2ggW0FSR10uLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiMgRmluaXNoaW5nIHRoZSBvcHRpb24gcGFyc2UgbG9vcCAoY2FsbCAnZnVu Y19vcHRpb25zJyBob29rcyBBVE0pLgpmdW5jX29wdGlvbnNfZmluaXNoICgpCnsKICAgICRk ZWJ1Z19jbWQKCiAgICBmdW5jX3J1bl9ob29rcyBmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CiAg ICBmdW5jX3Byb3BhZ2F0ZV9yZXN1bHQgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zX2Zp bmlzaAp9CgoKIyBmdW5jX29wdGlvbnMgW0FSR10uLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0KIyBBbGwgdGhlIGZ1bmN0aW9ucyBjYWxsZWQgaW5zaWRlIGZ1bmNfb3B0aW9ucyBhcmUg aG9va2FibGUuIFNlZSB0aGUKIyBpbmRpdmlkdWFsIGltcGxlbWVudGF0aW9ucyBmb3IgZGV0 YWlscy4KZnVuY19ob29rYWJsZSBmdW5jX29wdGlvbnMKZnVuY19vcHRpb25zICgpCnsKICAg ICRkZWJ1Z19jbWQKCiAgICBfR19vcHRpb25zX3F1b3RlZD1mYWxzZQoKICAgIGZvciBteV9m dW5jIGluIG9wdGlvbnNfcHJlcCBwYXJzZV9vcHRpb25zIHZhbGlkYXRlX29wdGlvbnMgb3B0 aW9uc19maW5pc2gKICAgIGRvCiAgICAgIGZ1bmNfdW5zZXQgZnVuY18ke215X2Z1bmN9X3Jl c3VsdAogICAgICBmdW5jX3Vuc2V0IGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAogICAgICBldmFs IGZ1bmNfJG15X2Z1bmMgJyR7MSsiJEAifScKICAgICAgZnVuY19wcm9wYWdhdGVfcmVzdWx0 IGZ1bmNfJG15X2Z1bmMgZnVuY19vcHRpb25zCiAgICAgIGlmICRmdW5jX3Byb3BhZ2F0ZV9y ZXN1bHRfcmVzdWx0OyB0aGVuCiAgICAgICAgZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlv bnNfcmVzdWx0Ijsgc2hpZnQKICAgICAgICBfR19vcHRpb25zX3F1b3RlZD06CiAgICAgIGZp CiAgICBkb25lCgogICAgJF9HX29wdGlvbnNfcXVvdGVkIHx8IHsKICAgICAgIyBBcyB3ZSAo ZnVuY19vcHRpb25zKSBhcmUgdG9wLWxldmVsIG9wdGlvbnMtcGFyc2VyIGZ1bmN0aW9uIGFu ZAogICAgICAjIG5vYm9keSBxdW90ZWQgIiRAIiBmb3IgdXMgeWV0LCB3ZSBuZWVkIHRvIGRv IGl0IGV4cGxpY2l0bHkgZm9yCiAgICAgICMgY2FsbGVyLgogICAgICBmdW5jX3F1b3RlIGV2 YWwgJHsxKyIkQCJ9CiAgICAgIGZ1bmNfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfcmVz dWx0CiAgICB9Cn0KCgojIGZ1bmNfb3B0aW9uc19wcmVwIFtBUkddLi4uCiMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIyBBbGwgaW5pdGlhbGlzYXRpb25zIHJlcXVpcmVkIGJlZm9y ZSBzdGFydGluZyB0aGUgb3B0aW9uIHBhcnNlIGxvb3AuCiMgTm90ZSB0aGF0IHdoZW4gY2Fs bGluZyBob29rIGZ1bmN0aW9ucywgd2UgcGFzcyB0aHJvdWdoIHRoZSBsaXN0IG9mCiMgcG9z aXRpb25hbCBwYXJhbWV0ZXJzLiAgSWYgYSBob29rIGZ1bmN0aW9uIG1vZGlmaWVzIHRoYXQg bGlzdCwgYW5kCiMgbmVlZHMgdG8gcHJvcGFnYXRlIHRoYXQgYmFjayB0byByZXN0IG9mIHRo aXMgc2NyaXB0LCB0aGVuIHRoZSBjb21wbGV0ZQojIG1vZGlmaWVkIGxpc3QgbXVzdCBiZSBw dXQgaW4gJ2Z1bmNfcnVuX2hvb2tzX3Jlc3VsdCcgYmVmb3JlIHJldHVybmluZy4KZnVuY19o b29rYWJsZSBmdW5jX29wdGlvbnNfcHJlcApmdW5jX29wdGlvbnNfcHJlcCAoKQp7CiAgICAk ZGVidWdfY21kCgogICAgIyBPcHRpb24gZGVmYXVsdHM6CiAgICBvcHRfdmVyYm9zZT1mYWxz ZQogICAgb3B0X3dhcm5pbmdfdHlwZXM9CgogICAgZnVuY19ydW5faG9va3MgZnVuY19vcHRp b25zX3ByZXAgJHsxKyIkQCJ9CiAgICBmdW5jX3Byb3BhZ2F0ZV9yZXN1bHQgZnVuY19ydW5f aG9va3MgZnVuY19vcHRpb25zX3ByZXAKfQoKCiMgZnVuY19wYXJzZV9vcHRpb25zIFtBUkdd Li4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhlIG1haW4gb3B0aW9uIHBh cnNpbmcgbG9vcC4KZnVuY19ob29rYWJsZSBmdW5jX3BhcnNlX29wdGlvbnMKZnVuY19wYXJz ZV9vcHRpb25zICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBfR19wYXJzZV9vcHRpb25zX3Jl cXVvdGU9ZmFsc2UKICAgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKICAgIHdo aWxlIHRlc3QgJCMgLWd0IDA7IGRvCiAgICAgICMgRGVmZXIgdG8gaG9vayBmdW5jdGlvbnMg Zm9yIGluaXRpYWwgb3B0aW9uIHBhcnNpbmcsIHNvIHRoZXkKICAgICAgIyBnZXQgcHJpb3Jp dHkgaW4gdGhlIGV2ZW50IG9mIHJldXNpbmcgYW4gb3B0aW9uIG5hbWUuCiAgICAgIGZ1bmNf cnVuX2hvb2tzIGZ1bmNfcGFyc2Vfb3B0aW9ucyAkezErIiRAIn0KICAgICAgZnVuY19wcm9w YWdhdGVfcmVzdWx0IGZ1bmNfcnVuX2hvb2tzIGZ1bmNfcGFyc2Vfb3B0aW9ucwogICAgICBp ZiAkZnVuY19wcm9wYWdhdGVfcmVzdWx0X3Jlc3VsdDsgdGhlbgogICAgICAgIGV2YWwgc2V0 IGR1bW15ICIkZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdCI7IHNoaWZ0CiAgICAgICAgIyBF dmVuIHRob3VnaCB3ZSBtYXkgaGF2ZSBjaGFuZ2VkICIkQCIsIHdlIHBhc3NlZCB0aGUgIiRA IiBhcnJheQogICAgICAgICMgZG93biBpbnRvIHRoZSBob29rIGFuZCBpdCBxdW90ZWQgaXQg Zm9yIHVzIChiZWNhdXNlIHdlIGFyZSBpbgogICAgICAgICMgdGhpcyBpZi1icmFuY2gpLiAg Tm8gbmVlZCB0byBxdW90ZSBpdCBhZ2Fpbi4KICAgICAgICBfR19wYXJzZV9vcHRpb25zX3Jl cXVvdGU9ZmFsc2UKICAgICAgZmkKCiAgICAgICMgQnJlYWsgb3V0IG9mIHRoZSBsb29wIGlm IHdlIGFscmVhZHkgcGFyc2VkIGV2ZXJ5IG9wdGlvbi4KICAgICAgdGVzdCAkIyAtZ3QgMCB8 fCBicmVhawoKICAgICAgIyBXZSBleHBlY3QgdGhhdCBvbmUgb2YgdGhlIG9wdGlvbnMgcGFy c2VkIGluIHRoaXMgZnVuY3Rpb24gbWF0Y2hlcwogICAgICAjIGFuZCB0aHVzIHdlIHJlbW92 ZSBfR19vcHQgZnJvbSAiJEAiIGFuZCBuZWVkIHRvIHJlLXF1b3RlLgogICAgICBfR19tYXRj aF9wYXJzZV9vcHRpb25zPToKICAgICAgX0dfb3B0PSQxCiAgICAgIHNoaWZ0CiAgICAgIGNh c2UgJF9HX29wdCBpbgogICAgICAgIC0tZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgn CiAgICAgICAgICAgICAgICAgICAgICBmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNl IG1vZGUiID4mMgogICAgICAgICAgICAgICAgICAgICAgJGRlYnVnX2NtZAogICAgICAgICAg ICAgICAgICAgICAgOzsKCiAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1u by13YXJuKQogICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15IC0td2FybmluZ3Mgbm9u ZSAkezErIiRAIn0KICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CgkJICAgICAgOzsKCiAg ICAgICAgLS13YXJuaW5nc3wtLXdhcm5pbmd8LVcpCiAgICAgICAgICAgICAgICAgICAgICBp ZiB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQ7IHRoZW4KICAgICAg ICAgICAgICAgICAgICAgICAgX0dfcGFyc2Vfb3B0aW9uc19yZXF1b3RlPToKICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAg ICAgICAgICAgICAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAkMSIgaW4KICAgICAg ICAgICAgICAgICAgICAgICAgKiIgJDEgIiopCiAgICAgICAgICAgICAgICAgICAgICAgICAg IyB0cmFpbGluZyBzcGFjZSBwcmV2ZW50cyBtYXRjaGluZyBsYXN0ICQxIGFib3ZlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmRfdW5pcSBvcHRfd2FybmluZ190eXBl cyAiICQxIgogICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAg ICAgICAgICphbGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlw ZXM9JHdhcm5pbmdfY2F0ZWdvcmllcwogICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAg ICAgICAgICAgICAgICAgICAgICAgICpub25lKQogICAgICAgICAgICAgICAgICAgICAgICAg IG9wdF93YXJuaW5nX3R5cGVzPW5vbmUKICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJu aW5nX2Z1bmM9OgogICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAg ICAgICAgICAgICplcnJvcikKICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2Fybmlu Z190eXBlcz0kd2FybmluZ19jYXRlZ29yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAg d2FybmluZ19mdW5jPWZ1bmNfZmF0YWxfZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAg ICA7OwogICAgICAgICAgICAgICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgICAgICAg ICAgIGZ1bmNfZmF0YWxfZXJyb3IgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1 bnN1cHBvcnRlZCB3YXJuaW5nIGNhdGVnb3J5OiAnJDEnIgogICAgICAgICAgICAgICAgICAg ICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAg ICAgICBzaGlmdAogICAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgLS12ZXJib3Nl fC12KSBvcHRfdmVyYm9zZT06IDs7CiAgICAgICAgLS12ZXJzaW9uKSAgICBmdW5jX3ZlcnNp b24gOzsKICAgICAgICAtXD98LWgpICAgICAgIGZ1bmNfdXNhZ2UgOzsKICAgICAgICAtLWhl bHApICAgICAgIGZ1bmNfaGVscCA7OwoKCSMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9w dGlvbnMgKHBsdWdpbnMgbWF5IG5lZWQgdGhpcyk6CgktLSo9KikgICAgICAgIGZ1bmNfc3Bs aXRfZXF1YWxzICIkX0dfb3B0IgoJICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3Nw bGl0X2VxdWFsc19saHMiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3Bs aXRfZXF1YWxzX3JocyIgJHsxKyIkQCJ9CiAgICAgICAgICAgICAgICAgICAgICBzaGlmdAog ICAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8g c2hvcnQgb3B0aW9uczoKICAgICAgICAtVyopCiAgICAgICAgICAgICAgICAgICAgICBmdW5j X3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKICAgICAgICAgICAgICAgICAgICAgIHNldCBk dW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKICAgICAgICAgICAgICAgICAg ICAgICAgICAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CiAgICAgICAg ICAgICAgICAgICAgICBzaGlmdAogICAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAg IyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKICAgICAgICAtXD8qfC1o Knwtdip8LXgqKQogICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQg IiRfR19vcHQiCiAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0 X3Nob3J0X29wdF9uYW1lIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19z cGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KICAgICAgICAgICAgICAgICAgICAgIHNo aWZ0CiAgICAgICAgICAgICAgICAgICAgICA7OwoKICAgICAgICAtLSkgICAgICAgICAgIF9H X3BhcnNlX29wdGlvbnNfcmVxdW90ZT06IDsgYnJlYWsgOzsKICAgICAgICAtKikgICAgICAg ICAgIGZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRfR19vcHQnIiA7 OwogICAgICAgICopICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07 IHNoaWZ0CiAgICAgICAgICAgICAgICAgICAgICBfR19tYXRjaF9wYXJzZV9vcHRpb25zPWZh bHNlCiAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICAg OzsKICAgICAgZXNhYwoKICAgICAgaWYgJF9HX21hdGNoX3BhcnNlX29wdGlvbnM7IHRoZW4K ICAgICAgICBfR19wYXJzZV9vcHRpb25zX3JlcXVvdGU9OgogICAgICBmaQogICAgZG9uZQoK ICAgIGlmICRfR19wYXJzZV9vcHRpb25zX3JlcXVvdGU7IHRoZW4KICAgICAgIyBzYXZlIG1v ZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCiAgICAgIGZ1bmNfcXVv dGUgZXZhbCAkezErIiRAIn0KICAgICAgZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdD0kZnVu Y19xdW90ZV9yZXN1bHQKICAgIGZpCn0KCgojIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBbQVJH XS4uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFBlcmZvcm0gYW55IHNh bml0eSBjaGVja3Mgb24gb3B0aW9uIHNldHRpbmdzIGFuZC9vciB1bmNvbnN1bWVkCiMgYXJn dW1lbnRzLgpmdW5jX2hvb2thYmxlIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucwpmdW5jX3ZhbGlk YXRlX29wdGlvbnMgKCkKewogICAgJGRlYnVnX2NtZAoKICAgICMgRGlzcGxheSBhbGwgd2Fy bmluZ3MgaWYgLVcgd2FzIG5vdCBnaXZlbi4KICAgIHRlc3QgLW4gIiRvcHRfd2FybmluZ190 eXBlcyIgfHwgb3B0X3dhcm5pbmdfdHlwZXM9IiAkd2FybmluZ19jYXRlZ29yaWVzIgoKICAg IGZ1bmNfcnVuX2hvb2tzIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyAkezErIiRAIn0KICAgIGZ1 bmNfcHJvcGFnYXRlX3Jlc3VsdCBmdW5jX3J1bl9ob29rcyBmdW5jX3ZhbGlkYXRlX29wdGlv bnMKCiAgICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkIQogICAgJGV4aXRf Y21kICRFWElUX0ZBSUxVUkUKfQoKCgojIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwojIyBIZWxw ZXIgZnVuY3Rpb25zLiAjIwojIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwoKIyBUaGlzIHNlY3Rp b24gY29udGFpbnMgdGhlIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgcmVzdCBvZiB0 aGUKIyBob29rYWJsZSBvcHRpb24gcGFyc2VyIGZyYW1ld29yayBpbiBhc2NpaS1iZXRpY2Fs IG9yZGVyLgoKCiMgZnVuY19mYXRhbF9oZWxwIEFSRy4uLgojIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJk IGVycm9yLCBmb2xsb3dlZCBieQojIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KZnVuY19mYXRh bF9oZWxwICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBldmFsIFwkRUNITyBcIiJVc2FnZTog JHVzYWdlIlwiCiAgICBldmFsIFwkRUNITyBcIiIkZmF0YWxfaGVscCJcIgogICAgZnVuY19l cnJvciAkezErIiRAIn0KICAgIGV4aXQgJEVYSVRfRkFJTFVSRQp9CgoKIyBmdW5jX2hlbHAK IyAtLS0tLS0tLS0KIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1 dCBhbmQgZXhpdC4KZnVuY19oZWxwICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBmdW5jX3Vz YWdlX21lc3NhZ2UKICAgICRFQ0hPICIkbG9uZ19oZWxwX21lc3NhZ2UiCiAgICBleGl0IDAK fQoKCiMgZnVuY19taXNzaW5nX2FyZyBBUkdOQU1FCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBl cnJvciBhbmQgc2V0IGdsb2JhbAojIGV4aXRfY21kLgpmdW5jX21pc3NpbmdfYXJnICgpCnsK ICAgICRkZWJ1Z19jbWQKCiAgICBmdW5jX2Vycm9yICJNaXNzaW5nIGFyZ3VtZW50IGZvciAn JDEnLiIKICAgIGV4aXRfY21kPWV4aXQKfQoKCiMgZnVuY19zcGxpdF9lcXVhbHMgU1RSSU5H CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2V0IGZ1bmNfc3BsaXRfZXF1YWxzX2xo cyBhbmQgZnVuY19zcGxpdF9lcXVhbHNfcmhzIHNoZWxsIHZhcmlhYmxlcwojIGFmdGVyIHNw bGl0dGluZyBTVFJJTkcgYXQgdGhlICc9JyBzaWduLgp0ZXN0IC16ICIkX0dfSEFWRV9YU0lf T1BTIiBcCiAgICAmJiAoZXZhbCAneD1hL2IvYzsKICAgICAgdGVzdCA1YWEvYmIvY2MgPSAi JHsjeH0ke3glJS8qfSR7eCUvKn0ke3gjKi99JHt4IyMqL30iJykgMj4vZGV2L251bGwgXAog ICAgJiYgX0dfSEFWRV9YU0lfT1BTPXllcwoKaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJ X09QUyIKdGhlbgogICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dp bmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KICBldmFsICdmdW5jX3NwbGl0X2VxdWFs cyAoKQogIHsKICAgICAgJGRlYnVnX2NtZAoKICAgICAgZnVuY19zcGxpdF9lcXVhbHNfbGhz PSR7MSUlPSp9CiAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0kezEjKj19CiAgICAgIGlm IHRlc3QgIngkZnVuY19zcGxpdF9lcXVhbHNfbGhzIiA9ICJ4JDEiOyB0aGVuCiAgICAgICAg ZnVuY19zcGxpdF9lcXVhbHNfcmhzPQogICAgICBmaQogIH0nCmVsc2UKICAjIC4uLm90aGVy d2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgZXhwciwgd2hpY2ggaXMgb2Z0ZW4gYSBzaGVsbCBi dWlsdGluLgogIGZ1bmNfc3BsaXRfZXF1YWxzICgpCiAgewogICAgICAkZGVidWdfY21kCgog ICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9YGV4cHIgIngkMSIgOiAneFwoW149XSpcKSdg CiAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0KICAgICAgdGVzdCAieCRmdW5jX3NwbGl0 X2VxdWFsc19saHM9IiA9ICJ4JDEiIFwKICAgICAgICB8fCBmdW5jX3NwbGl0X2VxdWFsc19y aHM9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSQnYAogIH0KZmkgI2Z1bmNfc3BsaXRf ZXF1YWxzCgoKIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBTSE9SVE9QVAojIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5k IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAojIHZhcmlhYmxlcyBhZnRlciBzcGxp dHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0ZXIuCmlmIHRlc3QgeWVzID0g IiRfR19IQVZFX1hTSV9PUFMiCnRoZW4KICAjIFRoaXMgaXMgYW4gWFNJIGNvbXBhdGlibGUg c2hlbGwsIGFsbG93aW5nIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uLi4uCiAgZXZhbCAnZnVu Y19zcGxpdF9zaG9ydF9vcHQgKCkKICB7CiAgICAgICRkZWJ1Z19jbWQKCiAgICAgIGZ1bmNf c3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CiAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0 X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn0KICB9JwplbHNlCiAgIyAu Li5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEg c2hlbGwgYnVpbHRpbi4KICBmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQogIHsKICAgICAgJGRl YnVnX2NtZAoKICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gZXhwciAieCQxIiA6 ICd4XCgtLlwpJ2AKICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWBleHByICJ4JDEi IDogJ3gtLlwoLipcKSQnYAogIH0KZmkgI2Z1bmNfc3BsaXRfc2hvcnRfb3B0CgoKIyBmdW5j X3VzYWdlCiMgLS0tLS0tLS0tLQojIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5k YXJkIG91dHB1dCBhbmQgZXhpdC4KZnVuY191c2FnZSAoKQp7CiAgICAkZGVidWdfY21kCgog ICAgZnVuY191c2FnZV9tZXNzYWdlCiAgICAkRUNITyAiUnVuICckcHJvZ25hbWUgLS1oZWxw IHwke1BBR0VSLW1vcmV9JyBmb3IgZnVsbCB1c2FnZSIKICAgIGV4aXQgMAp9CgoKIyBmdW5j X3VzYWdlX21lc3NhZ2UKIyAtLS0tLS0tLS0tLS0tLS0tLS0KIyBFY2hvIHNob3J0IGhlbHAg bWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQuCmZ1bmNfdXNhZ2VfbWVzc2FnZSAoKQp7CiAg ICAkZGVidWdfY21kCgogICAgZXZhbCBcJEVDSE8gXCIiVXNhZ2U6ICR1c2FnZSJcIgogICAg ZWNobwogICAgJFNFRCAtbiAnc3xeIyB8fAogICAgICAgIC9eV3JpdHRlbiBieS97CiAgICAg ICAgICB4O3A7eAogICAgICAgIH0KCWgKCS9eV3JpdHRlbiBieS9xJyA8ICIkcHJvZ3BhdGgi CiAgICBlY2hvCiAgICBldmFsIFwkRUNITyBcIiIkdXNhZ2VfbWVzc2FnZSJcIgp9CgoKIyBm dW5jX3ZlcnNpb24KIyAtLS0tLS0tLS0tLS0KIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBz dGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCiMgVGhlIHZlcnNpb24gbWVzc2FnZSBpcyBleHRy YWN0ZWQgZnJvbSB0aGUgY2FsbGluZyBmaWxlJ3MgaGVhZGVyCiMgY29tbWVudHMsIHdpdGgg bGVhZGluZyAnIyAnIHN0cmlwcGVkOgojICAgMS4gRmlyc3QgZGlzcGxheSB0aGUgcHJvZ25h bWUgYW5kIHZlcnNpb24KIyAgIDIuIEZvbGxvd2VkIGJ5IHRoZSBoZWFkZXIgY29tbWVudCBs aW5lIG1hdGNoaW5nICAvXiMgV3JpdHRlbiBieSAvCiMgICAzLiBUaGVuIGEgYmxhbmsgbGlu ZSBmb2xsb3dlZCBieSB0aGUgZmlyc3QgZm9sbG93aW5nIGxpbmUgbWF0Y2hpbmcKIyAgICAg IC9eIyBDb3B5cmlnaHQgLwojICAgNC4gSW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW55IGxp bmVzIGJldHdlZW4gdGhlIHByZXZpb3VzIG1hdGNoZXMsCiMgICAgICBleGNlcHQgbGluZXMg cHJlY2VkaW5nIHRoZSBpbnRlcnZlbmluZyBjb21wbGV0ZWx5IGJsYW5rIGxpbmUuCiMgRm9y IGV4YW1wbGUsIHNlZSB0aGUgaGVhZGVyIGNvbW1lbnRzIG9mIHRoaXMgZmlsZS4KZnVuY192 ZXJzaW9uICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBwcmludGYgJyVzXG4nICIkcHJvZ25h bWUgJHNjcmlwdHZlcnNpb24iCiAgICAkU0VEIC1uICcKICAgICAgICAvXiMgV3JpdHRlbiBi eSAvIWIKICAgICAgICBzfF4jIHx8OyBwOyBuCgogICAgICAgIDpmd2QyYmxuawogICAgICAg IC8uLyB7CiAgICAgICAgICBuCiAgICAgICAgICBiIGZ3ZDJibG5rCiAgICAgICAgfQogICAg ICAgIHA7IG4KCiAgICAgICAgOmhvbGR3cm50CiAgICAgICAgc3xeIyB8fAogICAgICAgIHN8 XiMgKiR8fAogICAgICAgIC9eQ29weXJpZ2h0IC8hewogICAgICAgICAgLy4vSAogICAgICAg ICAgbgogICAgICAgICAgYiBob2xkd3JudAogICAgICAgIH0KCiAgICAgICAgc3xcKChDKVwp WyAwLTksLV0qWyAsLV1cKFsxLTldWzAtOV0qIFwpfFwxIFwyfAogICAgICAgIEcKICAgICAg ICBzfFwoXG5cKVxuKnxcMXxnCiAgICAgICAgcDsgcScgPCAiJHByb2dwYXRoIgoKICAgIGV4 aXQgJD8KfQoKCiMgTG9jYWwgdmFyaWFibGVzOgojIG1vZGU6IHNoZWxsLXNjcmlwdAojIHNo LWluZGVudGF0aW9uOiAyCiMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0 aW1lLXN0YW1wKQojIHRpbWUtc3RhbXAtcGF0dGVybjogIjMwL3NjcmlwdHZlcnNpb249JTp5 LSUwMm0tJTAyZC4lMDJIOyAjIFVUQyIKIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIK IyBFbmQ6CgojIFNldCBhIHZlcnNpb24gc3RyaW5nLgpzY3JpcHR2ZXJzaW9uPScoR05VIGxp YnRvb2wpIDIuNS4wLjgxLTNjZjUyJwoKIyBmdW5jX3ZlcnNpb24KIyAtLS0tLS0tLS0tLS0K IyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCmZ1 bmNfdmVyc2lvbiAoKQp7CiAgICAkZGVidWdfY21kCgoJeWVhcj1gZGF0ZSArJVlgCgoJY2F0 IDw8RU9GCiRwcm9nbmFtZSAkc2NyaXB0dmVyc2lvbgpDb3B5cmlnaHQgKEMpICR5ZWFyIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2 ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHBzOi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4K VGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRp c3RyaWJ1dGUgaXQuClRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1p dHRlZCBieSBsYXcuCgpPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQs IDE5OTYKKFNlZSBBVVRIT1JTIGZvciBjb21wbGV0ZSBjb250cmlidXRvciBsaXN0aW5nKQpF T0YKCiAgICBleGl0ICQ/Cn0KCgojIGZ1bmNfZWNobyBBUkcuLi4KIyAtLS0tLS0tLS0tLS0t LS0tCiMgTGlidG9vbCBhbHNvIGRpc3BsYXlzIHRoZSBjdXJyZW50IG1vZGUgaW4gbWVzc2Fn ZXMsIHNvIG92ZXJyaWRlCiMgZnVuY2xpYi5zaCBmdW5jX2VjaG8gd2l0aCB0aGlzIGN1c3Rv bSBkZWZpbml0aW9uLgpmdW5jX2VjaG8gKCkKewogICAgJGRlYnVnX2NtZAoKICAgIF9HX21l c3NhZ2U9JCoKCiAgICBmdW5jX2VjaG9fSUZTPSRJRlMKICAgIElGUz0kbmwKICAgIGZvciBf R19saW5lIGluICRfR19tZXNzYWdlOyBkbwogICAgICBJRlM9JGZ1bmNfZWNob19JRlMKICAg ICAgJEVDSE8gIiRwcm9nbmFtZSR7b3B0X21vZGUrOiAkb3B0X21vZGV9OiAkX0dfbGluZSIK ICAgIGRvbmUKICAgIElGUz0kZnVuY19lY2hvX0lGUwp9CgoKIyBmdW5jX3dhcm5pbmcgQVJH Li4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLQojIExpYnRvb2wgd2FybmluZ3MgYXJlIG5vdCBj YXRlZ29yaXplZCwgc28gb3ZlcnJpZGUgZnVuY2xpYi5zaAojIGZ1bmNfd2FybmluZyB3aXRo IHRoaXMgc2ltcGxlciBkZWZpbml0aW9uLgpmdW5jX3dhcm5pbmcgKCkKewogICAgJGRlYnVn X2NtZAoKICAgICR3YXJuaW5nX2Z1bmMgJHsxKyIkQCJ9Cn0KCgojIyAtLS0tLS0tLS0tLS0t LS0tICMjCiMjIE9wdGlvbnMgcGFyc2luZy4gIyMKIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwoK IyBIb29rIGluIHRoZSBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIG91ciBvd24gb3B0aW9ucyBh cmUgcGFyc2VkIGR1cmluZwojIHRoZSBvcHRpb24gcGFyc2luZyBsb29wLgoKdXNhZ2U9JyRw cm9ncGF0aCBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uJwoKIyBTaG9ydCBoZWxwIG1lc3Nh Z2UgaW4gcmVzcG9uc2UgdG8gJy1oJy4KdXNhZ2VfbWVzc2FnZT0iT3B0aW9uczoKICAgICAg IC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVz CiAgICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFj aW5nCiAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhv dXQgbW9kaWZ5aW5nIGFueSBmaWxlcwogICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlz cGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CiAgICAgICAt LW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQogICAgICAgLS1u by13YXJuaW5ncyAgICAgICAgZXF1aXZhbGVudCB0byAnLVdub25lJwogICAgICAgLS1wcmVz ZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJh cmllcwogICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRp b25hbCBtZXNzYWdlcwogICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3Vy YXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRwogICAtdiwgLS12ZXJib3NlICAgICAgICAg ICAgcHJpbnQgbW9yZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHRoYW4gZGVmYXVsdAogICAg ICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgogICAt VywgLS13YXJuaW5ncz1DQVRFR09SWSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGlu IENBVEVHT1JZIFthbGxdCiAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9y dCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCiIKCiMgQWRkaXRpb25hbCB0ZXh0 IGFwcGVuZGVkIHRvICd1c2FnZV9tZXNzYWdlJyBpbiByZXNwb25zZSB0byAnLS1oZWxwJy4K ZnVuY19oZWxwICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBmdW5jX3VzYWdlX21lc3NhZ2UK ICAgICRFQ0hPICIkbG9uZ19oZWxwX21lc3NhZ2UKCk1PREUgbXVzdCBiZSBvbmUgb2YgdGhl IGZvbGxvd2luZzoKCiAgICAgICBjbGVhbiAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20g dGhlIGJ1aWxkIGRpcmVjdG9yeQogICAgICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBz b3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKICAgICAgIGV4ZWN1dGUgICAgICAg ICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQog ICAgICAgZmluaXNoICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGli dG9vbCBsaWJyYXJpZXMKICAgICAgIGluc3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmll cyBvciBleGVjdXRhYmxlcwogICAgICAgbGluayAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJh cnkgb3IgYW4gZXhlY3V0YWJsZQogICAgICAgdW5pbnN0YWxsICAgICAgIHJlbW92ZSBsaWJy YXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CgpNT0RFLUFSR1MgdmFyeSBkZXBl bmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCictLW1v ZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzICdNT0RFJyBvciBhIHVuaXF1ZSBhYmJy ZXZpYXRpb24gb2YgdGhhdC4KVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBm b3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCgpXaGVuIHJlcG9ydGlu ZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBh bmQKaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgoKICAgICAgIGhvc3QtdHJp cGxldDogICAkaG9zdAogICAgICAgc2hlbGw6ICAgICAgICAgICRTSEVMTAogICAgICAgY29t cGlsZXI6ICAgICAgICRMVENDCiAgICAgICBjb21waWxlciBmbGFnczogJExUQ0ZMQUdTCiAg ICAgICBsaW5rZXI6ICAgICAgICAgJExEIChnbnU/ICR3aXRoX2dudV9sZCkKICAgICAgIHZl cnNpb246ICAgICAgICAkcHJvZ25hbWUgKEdOVSBsaWJ0b29sKSAyLjUuMC44MS0zY2Y1Mgog ICAgICAgYXV0b21ha2U6ICAgICAgIGAoJEFVVE9NQUtFIC0tdmVyc2lvbikgMj4vZGV2L251 bGwgfCRTRUQgMXFgCiAgICAgICBhdXRvY29uZjogICAgICAgYCgkQVVUT0NPTkYgLS12ZXJz aW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKClJlcG9ydCBidWdzIHRvIDxidWctbGlidG9v bEBnbnUub3JnPi4KR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cHM6Ly93d3cuZ251Lm9y Zy9zL2xpYnRvb2wvPi4KR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHBz Oi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LiIKICAgIGV4aXQgMAp9CgoKIyBmdW5jX2xvMm8g T0JKRUNULU5BTUUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcmFuc2Zvcm0gT0JKRUNU LU5BTUUgZnJvbSBhICcubG8nIHN1ZmZpeCB0byB0aGUgcGxhdGZvcm0gc3BlY2lmaWMKIyBv YmplY3Qgc3VmZml4LgoKbG8ybz1zL1xcLmxvXCQvLiRvYmpleHQvCm8ybG89cy9cXC4kb2Jq ZXh0XCQvLmxvLwoKaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KICBl dmFsICdmdW5jX2xvMm8gKCkKICB7CiAgICBjYXNlICQxIGluCiAgICAgICoubG8pIGZ1bmNf bG8yb19yZXN1bHQ9JHsxJS5sb30uJG9iamV4dCA7OwogICAgICAqICAgKSBmdW5jX2xvMm9f cmVzdWx0PSQxICAgICAgICAgICAgICAgOzsKICAgIGVzYWMKICB9JwoKICAjIGZ1bmNfeGZv cm0gTElCT0JKLU9SLVNPVVJDRQogICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg IyBUcmFuc2Zvcm0gTElCT0JKLU9SLVNPVVJDRSBmcm9tIGEgJy5vJyBvciAnLmMnIChvciBv dGhlcndpc2UpCiAgIyBzdWZmaXggdG8gYSAnLmxvJyBsaWJ0b29sLW9iamVjdCBzdWZmaXgu CiAgZXZhbCAnZnVuY194Zm9ybSAoKQogIHsKICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUu Kn0ubG8KICB9JwplbHNlCiAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIHNl ZC4KICBmdW5jX2xvMm8gKCkKICB7CiAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJDEi IHwgJFNFRCAiJGxvMm8iYAogIH0KCiAgZnVuY194Zm9ybSAoKQogIHsKICAgIGZ1bmNfeGZv cm1fcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAnc3xcLlteLl0qJHwubG98J2AKICB9CmZp CgoKIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gQVJHLi4uCiMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQojIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2Ug dG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CiMgYSBjb25maWd1cmF0aW9uIGZhaWx1 cmUgaGludCwgYW5kIGV4aXQuCmZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQp7CiAgICBm dW5jX2ZhdGFsX2Vycm9yICR7MSsiJEAifSBcCiAgICAgICJTZWUgdGhlICRQQUNLQUdFIGRv Y3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIiBcCiAgICAgICJGYXRhbCBjb25m aWd1cmF0aW9uIGVycm9yLiIKfQoKCiMgZnVuY19jb25maWcKIyAtLS0tLS0tLS0tLQojIERp c3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlw dC4KZnVuY19jb25maWcgKCkKewogICAgcmVfYmVnaW5jZj0nXiMgIyMjIEJFR0lOIExJQlRP T0wnCiAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJwoKICAgICMgRGVmYXVsdCBj b25maWd1cmF0aW9uLgogICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9l bmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgoKICAgICMgTm93IHByaW50IHRoZSBj b25maWd1cmF0aW9ucyBmb3IgdGhlIHRhZ3MuCiAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlz dDsgZG8KICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1l XCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgi CiAgICBkb25lCgogICAgZXhpdCAkPwp9CgoKIyBmdW5jX2ZlYXR1cmVzCiMgLS0tLS0tLS0t LS0tLQojIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4K ZnVuY19mZWF0dXJlcyAoKQp7CiAgICBlY2hvICJob3N0OiAkaG9zdCIKICAgIGlmIHRlc3Qg eWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAgICAgIGVjaG8gImVuYWJsZSBz aGFyZWQgbGlicmFyaWVzIgogICAgZWxzZQogICAgICBlY2hvICJkaXNhYmxlIHNoYXJlZCBs aWJyYXJpZXMiCiAgICBmaQogICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsg dGhlbgogICAgICBlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKICAgIGVsc2UKICAg ICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgogICAgZmkKCiAgICBleGl0ICQ/ Cn0KCgojIGZ1bmNfZW5hYmxlX3RhZyBUQUdOQU1FCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4g ZXJyb3IgYW5kIGV4aXQsIG9yCiMgZW5hYmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28g YWRkIFRBR05BTUUgdG8gdGhlIGdsb2JhbCAkdGFnbGlzdAojIHZhcmlhYmxlIGhlcmUuCmZ1 bmNfZW5hYmxlX3RhZyAoKQp7CiAgICAjIEdsb2JhbCB2YXJpYWJsZToKICAgIHRhZ25hbWU9 JDEKCiAgICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAk dGFnbmFtZVwkIgogICAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklH OiAkdGFnbmFtZVwkIgogICAgc2VkX2V4dHJhY3RjZj0vJHJlX2JlZ2luY2YvLC8kcmVfZW5k Y2YvcAoKICAgICMgVmFsaWRhdGUgdGFnbmFtZS4KICAgIGNhc2UgJHRhZ25hbWUgaW4KICAg ICAgKlshLV9BLVphLXowLTksL10qKQogICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFs aWQgdGFnIG5hbWU6ICR0YWduYW1lIgogICAgICAgIDs7CiAgICBlc2FjCgogICAgIyBEb24n dCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKICAgICMg dGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgogICAgY2FzZSAkdGFnbmFtZSBpbgog ICAgICAgIENDKSA7OwogICAgKikKICAgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIk cHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgoJICB0YWdsaXN0PSIkdGFnbGlzdCAk dGFnbmFtZSIKCgkgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVs IHRvIHF1b3RlIHRoZSBwYXRoCgkgICMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBz cGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0CgkgICMgYWxzbyBkb24ndCB1c2Ugbm9uLXBv cnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KCSAgIyBxdW90ZXMgd2Ug aGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgoJICBleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAi JHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCgkgIGV2YWwgIiRleHRyYWN0ZWRjZiIK ICAgICAgICBlbHNlCgkgIGZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWdu YW1lIgogICAgICAgIGZpCiAgICAgICAgOzsKICAgIGVzYWMKfQoKCiMgZnVuY19jaGVja192 ZXJzaW9uX21hdGNoCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRW5zdXJlIHRoYXQg d2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNh bWUKIyByZWxlYXNlIG9mIGxpYnRvb2wuCmZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQp7 CiAgICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7 IHRoZW4KICAgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRo ZW4KICAgICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KICAgICAgICAg IGNhdCA+JjIgPDxfTFRfRU9GCiRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4g IFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKJHByb2duYW1lOiBkZWZpbml0 aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCiRwcm9n bmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20g JFBBQ0tBR0UgJFZFUlNJT04KJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgpf TFRfRU9GCiAgICAgICAgZWxzZQogICAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKJHByb2du YW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lP TiwgYnV0IHRoZQokcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVz IGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiRwcm9nbmFtZTogWW91IHNob3VsZCBy ZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04K JHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgpfTFRfRU9GCiAgICAgICAgZmkK ICAgICAgZWxzZQogICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiRwcm9nbmFtZTogVmVyc2lv biBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9u ICRwYWNrYWdlX3JldmlzaW9uLAokcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0 aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCiRwcm9n bmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20g cmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVS U0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgpfTFRfRU9GCiAgICAgIGZpCgogICAgICBl eGl0ICRFWElUX01JU01BVENICiAgICBmaQp9CgoKIyBsaWJ0b29sX29wdGlvbnNfcHJlcCBb QVJHXS4uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJlcGFyYXRpb24g Zm9yIG9wdGlvbnMgcGFyc2VkIGJ5IGxpYnRvb2wuCmxpYnRvb2xfb3B0aW9uc19wcmVwICgp CnsKICAgICRkZWJ1Z19tb2RlCgogICAgIyBPcHRpb24gZGVmYXVsdHM6CiAgICBvcHRfY29u ZmlnPWZhbHNlCiAgICBvcHRfZGxvcGVuPQogICAgb3B0X2RyeV9ydW49ZmFsc2UKICAgIG9w dF9oZWxwPWZhbHNlCiAgICBvcHRfbW9kZT0KICAgIG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1m YWxzZQogICAgb3B0X3F1aWV0PWZhbHNlCgogICAgbm9ub3B0PQogICAgcHJlc2VydmVfYXJn cz0KCiAgICBfR19yY19sdF9vcHRpb25zX3ByZXA9OgoKICAgICMgU2hvcnRoYW5kIGZvciAt LW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAogICAgY2FzZSAk MSBpbgogICAgY2xlYW58Y2xlYXxjbGV8Y2wpCiAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1t b2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKICAgICAgOzsKICAgIGNvbXBpbGV8Y29tcGls fGNvbXBpfGNvbXB8Y29tfGNvfGMpCiAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNv bXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAogICAgICA7OwogICAgZXhlY3V0ZXxleGVjdXR8ZXhl Y3V8ZXhlY3xleGV8ZXh8ZSkKICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0 ZSAkezErIiRAIn07IHNoaWZ0CiAgICAgIDs7CiAgICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58 Zml8ZikKICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsg c2hpZnQKICAgICAgOzsKICAgIGluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkp CiAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlm dAogICAgICA7OwogICAgbGlua3xsaW58bGl8bCkKICAgICAgc2hpZnQ7IHNldCBkdW1teSAt LW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CiAgICAgIDs7CiAgICB1bmluc3RhbGx8dW5p bnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKICAgICAgc2hpZnQ7 IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKICAgICAgOzsK ICAgICopCiAgICAgIF9HX3JjX2x0X29wdGlvbnNfcHJlcD1mYWxzZQogICAgICA7OwogICAg ZXNhYwoKICAgIGlmICRfR19yY19sdF9vcHRpb25zX3ByZXA7IHRoZW4KICAgICAgIyBQYXNz IGJhY2sgdGhlIGxpc3Qgb2Ygb3B0aW9ucy4KICAgICAgZnVuY19xdW90ZSBldmFsICR7MSsi JEAifQogICAgICBsaWJ0b29sX29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcXVvdGVfcmVz dWx0CiAgICBmaQp9CmZ1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbGlidG9vbF9v cHRpb25zX3ByZXAKCgojIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgojIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByb3ZpZGUgaGFuZGxpbmcgZm9yIGxp YnRvb2wgc3BlY2lmaWMgb3B0aW9ucy4KbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCnsKICAg ICRkZWJ1Z19jbWQKCiAgICBfR19yY19sdF9wYXJzZV9vcHRpb25zPWZhbHNlCgogICAgIyBQ ZXJmb3JtIG91ciBvd24gbG9vcCB0byBjb25zdW1lIGFzIG1hbnkgb3B0aW9ucyBhcyBwb3Nz aWJsZSBpbgogICAgIyBlYWNoIGl0ZXJhdGlvbi4KICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7 IGRvCiAgICAgIF9HX21hdGNoX2x0X3BhcnNlX29wdGlvbnM9OgogICAgICBfR19vcHQ9JDEK ICAgICAgc2hpZnQKICAgICAgY2FzZSAkX0dfb3B0IGluCiAgICAgICAgLS1kcnktcnVufC0t ZHJ5cnVufC1uKQogICAgICAgICAgICAgICAgICAgICAgICBvcHRfZHJ5X3J1bj06CiAgICAg ICAgICAgICAgICAgICAgICAgIDs7CgogICAgICAgIC0tY29uZmlnKSAgICAgICBmdW5jX2Nv bmZpZyA7OwoKICAgICAgICAtLWRsb3BlbnwtZGxvcGVuKQogICAgICAgICAgICAgICAgICAg ICAgICBvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KfSQxIgogICAgICAg ICAgICAgICAgICAgICAgICBzaGlmdAogICAgICAgICAgICAgICAgICAgICAgICA7OwoKICAg ICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQogICAgICAgICAgICAgICAgICAgICAgICBvcHRf cHJlc2VydmVfZHVwX2RlcHM9OiA7OwoKICAgICAgICAtLWZlYXR1cmVzKSAgICAgZnVuY19m ZWF0dXJlcyA7OwoKICAgICAgICAtLWZpbmlzaCkgICAgICAgc2V0IGR1bW15IC0tbW9kZSBm aW5pc2ggJHsxKyIkQCJ9OyBzaGlmdCA7OwoKICAgICAgICAtLWhlbHApICAgICAgICAgb3B0 X2hlbHA9OiA7OwoKICAgICAgICAtLWhlbHAtYWxsKSAgICAgb3B0X2hlbHA9JzogaGVscC1h bGwnIDs7CgogICAgICAgIC0tbW9kZSkgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21p c3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0 X21vZGU9JDEKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkMSBpbgogICAgICAgICAg ICAgICAgICAgICAgICAgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8 cmVsaW5rfHVuaW5zdGFsbCkgOzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYXRj aCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAg KikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJF9HX29wdCIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleGl0X2NtZD1leGl0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAg ICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CiAg ICAgICAgICAgICAgICAgICAgICAgIDs7CgogICAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVp ZXQpCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9xdWlldD1mYWxzZQogICAgICAgICAg ICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKICAg ICAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdh cm5pbmd8LS1uby13YXJuKQogICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZz1m YWxzZQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdz ICIgJF9HX29wdCIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgLS1uby12 ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQogICAg ICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29w dCIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgLS1zaWxlbnR8LS1xdWll dCkKICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3F1aWV0PToKICAgICAgICAgICAgICAg ICAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZnVu Y19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCiAgICAgICAgICAgICAgICAgICAg ICAgIDs7CgogICAgICAgIC0tdGFnKSAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21p c3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0 X3RhZz0kMQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9h cmdzICIgJF9HX29wdCAkMSIKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19lbmFibGVf dGFnICIkMSIKICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgICAg ICAgICAgICAgOzsKCiAgICAgICAgLS12ZXJib3NlfC12KSAgIG9wdF9xdWlldD1mYWxzZQog ICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT06CiAgICAgICAgICAgICAgICAg ICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgogICAgICAgICAg ICAgICAgICAgICAgICA7OwoKICAgICAgICAjIEFuIG9wdGlvbiBub3QgaGFuZGxlZCBieSB0 aGlzIGhvb2sgZnVuY3Rpb246CiAgICAgICAgKikgICAgICAgICAgICAgIHNldCBkdW1teSAi JF9HX29wdCIgJHsxKyIkQCJ9IDsgc2hpZnQKICAgICAgICAgICAgICAgICAgICAgICAgX0df bWF0Y2hfbHRfcGFyc2Vfb3B0aW9ucz1mYWxzZQogICAgICAgICAgICAgICAgICAgICAgICBi cmVhawogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICBlc2FjCiAgICAgICRfR19t YXRjaF9sdF9wYXJzZV9vcHRpb25zICYmIF9HX3JjX2x0X3BhcnNlX29wdGlvbnM9OgogICAg ZG9uZQoKICAgIGlmICRfR19yY19sdF9wYXJzZV9vcHRpb25zOyB0aGVuCiAgICAgICMgc2F2 ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgogICAgICBmdW5j X3F1b3RlIGV2YWwgJHsxKyIkQCJ9CiAgICAgIGxpYnRvb2xfcGFyc2Vfb3B0aW9uc19yZXN1 bHQ9JGZ1bmNfcXVvdGVfcmVzdWx0CiAgICBmaQp9CmZ1bmNfYWRkX2hvb2sgZnVuY19wYXJz ZV9vcHRpb25zIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucwoKCgojIGxpYnRvb2xfdmFsaWRhdGVf b3B0aW9ucyBbQVJHXS4uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoj IFBlcmZvcm0gYW55IHNhbml0eSBjaGVja3Mgb24gb3B0aW9uIHNldHRpbmdzIGFuZC9vciB1 bmNvbnN1bWVkCiMgYXJndW1lbnRzLgpsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKewog ICAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKICAgIGlmIHRlc3QgMCAtbHQg JCM7IHRoZW4KICAgICAgbm9ub3B0PSQxCiAgICAgIHNoaWZ0CiAgICBmaQoKICAgICMgcHJl c2VydmUgLS1kZWJ1ZwogICAgdGVzdCA6ID0gIiRkZWJ1Z19jbWQiIHx8IGZ1bmNfYXBwZW5k IHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgoKICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAg IyBTb2xhcmlzMiBhZGRlZCB0byBmaXggaHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVn cmVwb3J0LmNnaT9idWc9MTY0NTIKICAgICAgIyBzZWUgYWxzbzogaHR0cDovL2djYy5nbnUu b3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01OTc4OAogICAgICBjeWd3aW4qIHwgbWlu Z3cqIHwgd2luZG93cyogfCBwdzMyKiB8IGNlZ2NjKiB8IHNvbGFyaXMyKiB8IG9zMiopCiAg ICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQg JHByZWRlcHMKICAgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBz PToKICAgICAgICA7OwogICAgICAqKQogICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJf Z2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcwogICAgICAgIDs7CiAgICBl c2FjCgogICAgJG9wdF9oZWxwIHx8IHsKICAgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0Ogog ICAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKCiAgICAgIHRlc3QgeWVzICE9ICIkYnVp bGRfbGlidG9vbF9saWJzIiBcCiAgICAgICAgJiYgdGVzdCB5ZXMgIT0gIiRidWlsZF9vbGRf bGlicyIgXAogICAgICAgICYmIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZp Z3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKCiAgICAgICMgRGFyd2luIHN1 Y2tzCiAgICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCgogICAgICAjIE9u bHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgogICAg ICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCBleGVjdXRlICE9ICIkb3B0X21v ZGUiOyB0aGVuCiAgICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiAnLWRs b3BlbiciCiAgICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCiAgICAgICAgZXhpdCAkRVhJVF9G QUlMVVJFCiAgICAgIGZpCgogICAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEg bW9kZS1zcGVjaWZpYyBvbmUuCiAgICAgIGdlbmVyaWNfaGVscD0kaGVscAogICAgICBoZWxw PSJUcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5m b3JtYXRpb24uIgogICAgfQoKICAgICMgUGFzcyBiYWNrIHRoZSB1bnBhcnNlZCBhcmd1bWVu dCBsaXN0CiAgICBmdW5jX3F1b3RlIGV2YWwgJHsxKyIkQCJ9CiAgICBsaWJ0b29sX3ZhbGlk YXRlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX3Jlc3VsdAp9CmZ1bmNfYWRkX2hvb2sg ZnVuY192YWxpZGF0ZV9vcHRpb25zIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucwoKCiMgUHJv Y2VzcyBvcHRpb25zIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHNvIHRoYXQgLS1oZWxwIGFuZCAt LXZlcnNpb24KIyBjYW4gcmV0dXJuIHF1aWNrbHkuCmZ1bmNfb3B0aW9ucyAkezErIiRAIn0K ZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKCgoKIyMgLS0t LS0tLS0tLS0gIyMKIyMgICAgTWFpbi4gICAgIyMKIyMgLS0tLS0tLS0tLS0gIyMKCm1hZ2lj PSclJSVNQUdJQyB2YXJpYWJsZSUlJScKbWFnaWNfZXhlPSclJSVNQUdJQyBFWEUgdmFyaWFi bGUlJSUnCgojIEdsb2JhbCB2YXJpYWJsZXMuCmV4dHJhY3RlZF9hcmNoaXZlcz0KZXh0cmFj dGVkX3NlcmlhbD0wCgojIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUg YWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5k LiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCiMgbGVmdCBvdmVy IGJ5IHNoZWxscy4KZXhlY19jbWQ9CgoKIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVu IHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgpmdW5jX2ZhbGxiYWNrX2Vj aG8gKCkKewogIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiQxCl9MVEVDSE9fRU9GJwp9Cgoj IGZ1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2wKIyBUcnVlIGlmZiBzdGRpbiBoYXMgYmVlbiBn ZW5lcmF0ZWQgYnkgTGlidG9vbC4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5CiMgYSBiYXNpYyBz YW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dCBkZXRlcm1pbmVkIGltcG9z dGVycy4KZnVuY19nZW5lcmF0ZWRfYnlfbGlidG9vbF9wICgpCnsKICAkR1JFUCAiXiMgR2Vu ZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKfQoKIyBmdW5jX2xhbGli X3AgZmlsZQojIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sICcubGEnIGxpYnJhcnkgb3Ig Jy5sbycgb2JqZWN0IGZpbGUuCiMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2Fu aXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKIyBkZXRlcm1pbmVkIGltcG9z dGVycy4KZnVuY19sYWxpYl9wICgpCnsKICAgIHRlc3QgLWYgIiQxIiAmJgogICAgICAkU0VE IC1lIDRxICIkMSIgMj4vZGV2L251bGwgfCBmdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sX3AK fQoKIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGli dG9vbCAnLmxhJyBsaWJyYXJ5IG9yICcubG8nIG9iamVjdCBmaWxlLgojIFRoaXMgZnVuY3Rp b24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAoj IHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRp cmVjdHMgc3RkaW4gYW5kCiMgY2xvc2VzIGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5n IHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IuCiMgQXMgYSBzYWZldHkgbWVhc3VyZSwg dXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKIyBmYXRhbCBh bnl3YXkuICBXb3JrcyBpZiAnZmlsZScgZG9lcyBub3QgZXhpc3QuCmZ1bmNfbGFsaWJfdW5z YWZlX3AgKCkKewogICAgbGFsaWJfcD1ubwogICAgaWYgdGVzdCAtZiAiJDEiICYmIHRlc3Qg LXIgIiQxIiAmJiBleGVjIDU8JjAgPCIkMSI7IHRoZW4KCWZvciBsYWxpYl9wX2wgaW4gMSAy IDMgNAoJZG8KCSAgICByZWFkIGxhbGliX3BfbGluZQoJICAgIGNhc2UgJGxhbGliX3BfbGlu ZSBpbgoJCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJy ZWFrOzsKCSAgICBlc2FjCglkb25lCglleGVjIDA8JjUgNTwmLQogICAgZmkKICAgIHRlc3Qg eWVzID0gIiRsYWxpYl9wIgp9CgojIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKIyBU cnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdAojIFRoaXMgZnVuY3Rp b24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2gg b3V0CiMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCmZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgp CnsKICAgIHRlc3QgLWYgIiQxIiAmJgogICAgICAkbHRfdHJ1bmNhdGVfYmluIDwgIiQxIiAy Pi9kZXYvbnVsbCB8IGZ1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2xfcAp9CgojIGZ1bmNfbHR3 cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCiMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wg d3JhcHBlciBleGVjdXRhYmxlCiMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2Fu aXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKIyBkZXRlcm1pbmVkIGltcG9z dGVycy4KZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCnsKICAgIGZ1bmNfbHR3cmFw cGVyX2V4ZWNfc3VmZml4PQogICAgY2FzZSAkMSBpbgogICAgKi5leGUpIDs7CiAgICAqKSBm dW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CiAgICBlc2FjCiAgICAkR1JFUCAi JG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxs IDI+JjEKfQoKIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lIGZpbGUKIyBBc3N1bWVzIGZp bGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKIyB1c2VzICRmaWxlIHRvIGRldGVybWlu ZSB0aGUgYXBwcm9wcmlhdGUgZmlsZW5hbWUgZm9yIGEKIyB0ZW1wb3JhcnkgbHR3cmFwcGVy X3NjcmlwdC4KZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQp7CiAgICBmdW5jX2Rpcm5h bWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCiAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4 ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5h bWVfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFt ZV9yZXN1bHR9X2x0c2h3cmFwcGVyCn0KCiMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCiMgVHJ1 ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVj dXRhYmxlCiMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBp dCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KZnVuY19s dHdyYXBwZXJfcCAoKQp7CiAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1 bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCn0KCgojIGZ1bmNfZXhlY3V0ZV9jbWRz IGNvbW1hbmRzIGZhaWxfY21kCiMgRXhlY3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMu CiMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCiMgRkFJ TF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUg Q01EIQpmdW5jX2V4ZWN1dGVfY21kcyAoKQp7CiAgICAkZGVidWdfY21kCgogICAgc2F2ZV9p ZnM9JElGUzsgSUZTPSd+JwogICAgZm9yIGNtZCBpbiAkMTsgZG8KICAgICAgSUZTPSRzcCRu bAogICAgICBldmFsIGNtZD1cIiRjbWRcIgogICAgICBJRlM9JHNhdmVfaWZzCiAgICAgIGZ1 bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgogICAgZG9uZQogICAgSUZTPSRzYXZlX2lm cwp9CgoKIyBmdW5jX3NvdXJjZSBmaWxlCiMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3Rv cnkgY29tcG9uZW50IGlmIG5lY2Vzc2FyeS4KIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vz c2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCiMgRklMRSBldmVuIGlm IGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQoj IGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAg QWxzbywgc291cmNpbmcKIyAnRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFn ZWQgbW91bnRzLgpmdW5jX3NvdXJjZSAoKQp7CiAgICAkZGVidWdfY21kCgogICAgY2FzZSAk MSBpbgogICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CiAgICAqKQkJLiAiLi8kMSIgOzsKICAg IGVzYWMKfQoKCiMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAojIFJlcGxhY2UgYSBsZWFk aW5nID0gaW4gUEFUSCB3aXRoIGEgc3lzcm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bwoj IGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdApmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQp7 CiAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSQxCiAgY2FzZSAkZnVuY19yZXNvbHZl X3N5c3Jvb3RfcmVzdWx0IGluCiAgPSopCiAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRm dW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9y ZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICA7OwogIGVzYWMK fQoKIyBmdW5jX3JlcGxhY2Vfc3lzcm9vdCBQQVRICiMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0 aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCiMgc3RvcmUgdGhlIHJlc3VsdCBp bnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KZnVuY19yZXBsYWNlX3N5c3Jvb3Qg KCkKewogIGNhc2UgJGx0X3N5c3Jvb3Q6JDEgaW4KICA/KjoiJGx0X3N5c3Jvb3QiKikKICAg IGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgogICAgZnVuY19yZXBsYWNl X3N5c3Jvb3RfcmVzdWx0PSc9JyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKICAgIDs7CiAgKikK ICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCiAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9y ZXN1bHQ9JDEKICAgIDs7CiAgZXNhYwp9CgojIGZ1bmNfaW5mZXJfdGFnIGFyZwojIEluZmVy IHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQK IyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9w dGlvbi4KIyBPbmx5IGF0dGVtcHQgdGhpcyBpZiB0aGUgY29tcGlsZXIgaW4gdGhlIGJhc2Ug Y29tcGlsZQojIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4K IyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKZnVuY19pbmZlcl90YWcg KCkKewogICAgJGRlYnVnX2NtZAoKICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIg JiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCiAgICAgIENDX3F1b3RlZD0KICAgICAgZm9y IGFyZyBpbiAkQ0M7IGRvCglmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgog ICAgICBkb25lCiAgICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKICAgICAg Q0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCiAgICAgIGNh c2UgJEAgaW4KICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBz dHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKICAgICAgIyBidXQgbm90IGZyb20gdGhl IENDIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlndXJlIHdhcyBydW4uCiAgICAg ICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRl ZCAiKiB8IFwKICAgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJEND X3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKSA7OwogICAg ICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRo aXMgdG8gZmFpbAogICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwu CiAgICAgICopCglmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCgkgIGlmICRHUkVQICJe IyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAv ZGV2L251bGw7IHRoZW4KCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgoJICAg IGV2YWwgImAkU0VEIC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzog JyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJv Z3BhdGhgIgoJICAgIENDX3F1b3RlZD0KCSAgICBmb3IgYXJnIGluICRDQzsgZG8KCSAgICAg ICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFj dGVycy4KCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCgkgICAg ZG9uZQoJICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKCSAgICBDQ19xdW90 ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKCSAgICBjYXNlICIkQCAi IGluCgkgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJEND X2V4cGFuZGVkICIqIHwgXAoJICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiog fCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikK CSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRj aGVzCgkgICAgICAjIHRoZSBvbmUgaW4gdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgoJICAg ICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4K CSAgICAgIHRhZ25hbWU9JHoKCSAgICAgIGJyZWFrCgkgICAgICA7OwoJICAgIGVzYWMKCSAg ZmkKCWRvbmUKCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dl ZCBjb25maWd1cmF0aW9uCgkjIHdhcyBmb3VuZCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgdGhh dCB0aGUgIi0tdGFnIiBjb21tYW5kCgkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KCWlm IHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgoJICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZl ciB0YWdnZWQgY29uZmlndXJhdGlvbiIKCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBh IHRhZyB3aXRoICctLXRhZyciCiMJZWxzZQojCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFn bmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKCWZpCgk7OwogICAgICBlc2FjCiAgICBmaQp9 CgoKCiMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBu b25waWNfbmFtZQojIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0 byBhICIubGEiIGZpbGUpLAojIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcg YSBkcnkgcnVuLgpmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCnsKICAgIHdyaXRlX2xp Ym9iaj0kMQogICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4K ICAgICAgd3JpdGVfbG9iaj1cJyQyXCcKICAgIGVsc2UKICAgICAgd3JpdGVfbG9iaj1ub25l CiAgICBmaQoKICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KICAg ICAgd3JpdGVfb2xkb2JqPVwnJDNcJwogICAgZWxzZQogICAgICB3cml0ZV9vbGRvYmo9bm9u ZQogICAgZmkKCiAgICAkb3B0X2RyeV9ydW4gfHwgewogICAgICBjYXQgPiR7d3JpdGVfbGli b2JqfVQgPDxFT0YKIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCiMg R2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCiMKIyBQbGVh c2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCiMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5r aW5nIHRoZSBsaWJyYXJ5LgoKIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgpwaWNfb2JqZWN0 PSR3cml0ZV9sb2JqCgojIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Cm5vbl9waWNfb2Jq ZWN0PSR3cml0ZV9vbGRvYmoKCkVPRgogICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIk d3JpdGVfbGlib2JqIgogICAgfQp9CgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBGSUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBI RUxQRVIgRlVOQ1RJT05TICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKCiMgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBB UkcKIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5j dGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKIyBhbmQgJGhvc3QgaXMgbWluZ3csIHdpbmRv d3MsIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBh CiMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdp dGggdGhlIHdpbmVwYXRoIHByb2dyYW0KIyBpbiAkYnVpbGQncyAkUEFUSC4KIwojIEFSRyBp cyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4K IyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVf dG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBB UkcgaXMgZW1wdHkpCmZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKewog ICRkZWJ1Z19jbWQKCiAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1 bHQ9JDEKICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICMgVW5mb3J0dW5hdGVseSwgd2lu ZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UK ICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0 aGUgb3RoZXIgaGFuZCwgaWYgdGhlCiAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUg c2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKICAgICMgKmFu IGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBl cnJvciBjb2RlIG9mCiAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4 cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgogICAgZnVuY19jb252ZXJ0X2NvcmVfZmls ZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCiAgICBp ZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVf d2luZV90b193MzJfdG1wIjsgdGhlbgogICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dp bmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVf dG9fdzMyX3RtcCIgfAogICAgICAgICRTRUQgLWUgIiRzZWRfbmFpdmVfYmFja3NsYXNoaWZ5 ImAKICAgIGVsc2UKICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9y ZXN1bHQ9CiAgICBmaQogIGZpCn0KIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2lu ZV90b193MzIKCgojIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCiMg SGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVu ICRidWlsZCBpcyAqbml4LCBhbmQKIyAkaG9zdCBpcyBtaW5ndywgd2luZG93cywgY3lnd2lu LCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEKIyBjb3JyZWN0 bHkgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2lu ZXBhdGggcHJvZ3JhbQojIGluICRidWlsZCdzICRQQVRILiBBc3N1bWVzIEFSRyBoYXMgbm8g bGVhZGluZyBvciB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcgojIGNoYXJhY3RlcnMuCiMKIyBB UkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMy LgojIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2lu ZV90b193MzJfcmVzdWx0LgojIFVuY29udmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1l cyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlmIG5vIGRpcmVjdG9yeSBuYW1lcwojIGFyZSBjb252 ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KZnVuY19jb252ZXJ0X2Nv cmVfcGF0aF93aW5lX3RvX3czMiAoKQp7CiAgJGRlYnVnX2NtZAoKICAjIHVuZm9ydHVuYXRl bHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCiAg ZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9CiAgaWYgdGVzdCAt biAiJDEiOyB0aGVuCiAgICBvbGRJRlM9JElGUwogICAgSUZTPToKICAgIGZvciBmdW5jX2Nv bnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCiAgICAgIElGUz0kb2xk SUZTCiAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2Nv bnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCiAgICAgIGlmIHRlc3QgLW4gIiRmdW5j X2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KICAgICAgICBp ZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQi OyB0aGVuCiAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jl c3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQKICAgICAg ICBlbHNlCiAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dp bmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMy X3Jlc3VsdCIKICAgICAgICBmaQogICAgICBmaQogICAgZG9uZQogICAgSUZTPSRvbGRJRlMK ICBmaQp9CiMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCgoKIyBm dW5jX2N5Z3BhdGggQVJHUy4uLgojIFdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3Bh dGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFUSC4gVGhpcyBpcyB1c2VkIHdoZW4KIyB3aGVuICgx KSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmly b25tZW50OyBvciAoMikKIyAkYnVpbGQgaXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBv ciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4gSW4gY2FzZSAoMSkgb3IKIyAoMiksIHJldHVybnMg dGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChp bnB1dAojIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1h dCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZ UyBmb3JtYXQpLiBJbiBjYXNlICgzKSwgcmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQojIG9y IHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGgg aXMgYXNzdW1lZCB0byBiZSBpbgojIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5 IHN0cmluZyBvbiBlcnJvci4KIwojIEFSR1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRo IHRoZSBsYXN0IG9uZSBiZWluZyB0aGUgZmlsZSBuYW1lIG9yIHBhdGggdG8KIyBiZSBjb252 ZXJ0ZWQuCiMKIyBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8g Y3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFUSAojIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBu b3QgcHV0IGl0IGluICRQQVRILgpmdW5jX2N5Z3BhdGggKCkKewogICRkZWJ1Z19jbWQKCiAg aWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhl bgogICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVs bGAKICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgogICAgICAjIG9uIGZhaWx1cmUsIGVu c3VyZSByZXN1bHQgaXMgZW1wdHkKICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KICAgIGZp CiAgZWxzZQogICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KICAgIGZ1bmNfZXJyb3IgIkxUX0NZ R1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiAnJExUX0NZ R1BBVEgnIgogIGZpCn0KI2VuZDogZnVuY19jeWdwYXRoCgoKIyBmdW5jX2NvbnZlcnRfY29y ZV9tc3lzX3RvX3czMiBBUkcKIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9t IE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KIyByZXN1bHQgaW4gZnVuY19j b252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgpmdW5jX2NvbnZlcnRfY29yZV9tc3lz X3RvX3czMiAoKQp7CiAgJGRlYnVnX2NtZAoKICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNw YWNlcyB0byByZXN1bHQKICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9 YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CiAgICAkU0VEIC1lICdzL1sg XSokLy8nIC1lICIkc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCn0KI2VuZDogZnVuY19jb252 ZXJ0X2NvcmVfbXN5c190b193MzIKCgojIGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEg QVJHMgojIFZlcmlmeSB0aGF0IEFSRzEgKGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQp IHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBl bWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCiMgZnVuY190 b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgpmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAo KQp7CiAgJGRlYnVnX2NtZAoKICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiOyB0 aGVuCiAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1l IGNvcnJlc3BvbmRpbmcgdG8iCiAgICBmdW5jX2Vycm9yICIgICckMSciCiAgICBmdW5jX2Vy cm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3 b3JrLiIKICAgICMgRmFsbGJhY2s6CiAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEK ICBmaQp9CiMgZW5kIGZ1bmNfY29udmVydF9maWxlX2NoZWNrCgoKIyBmdW5jX2NvbnZlcnRf cGF0aF9jaGVjayBGUk9NX1BBVEhTRVAgVE9fUEFUSFNFUCBGUk9NX1BBVEggVE9fUEFUSAoj IFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBj b252ZXJ0ZWQgdG8gJGhvc3QKIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0 IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCiMgZnVuY190b19o b3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2ltcGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJl bG93KS4KZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKewogICRkZWJ1Z19jbWQKCiAgaWYg dGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgogICAgZnVuY19lcnJvciAiQ291 bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCiAgICBm dW5jX2Vycm9yICIgICckMyciCiAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5p bnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKICAgICMgRmFsbGJhY2suICBU aGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAogICAg IyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgogICAgaWYg dGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgogICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hh cnM9InN8JDF8JDJ8ZyIKICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIk MyIgfAogICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAogICAg ZWxzZQogICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDMKICAgIGZpCiAgZmkKfQoj IGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjawoKCiMgZnVuY19jb252ZXJ0X3BhdGhfZnJv bnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCiMgTW9kaWZpZXMg ZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IGJ5IHByZXBlbmRpbmcgUkVQTCBpZiBPUklHIG1h dGNoZXMgRlJPTlRQQVQKIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJB Q0tQQVQuCmZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQp7CiAgJGRl YnVnX2NtZAoKICBjYXNlICQ0IGluCiAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9 JDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0CiAgICA7OwogIGVzYWMKICBjYXNlICQ0IGlu CiAgJDIgKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgogICAg OzsKICBlc2FjCn0KIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2Vw CgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK IyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBpbnZv a2VkIHZpYSAnJHRvX2hvc3RfZmlsZV9jbWQgQVJHJwojCiMgSW4gZWFjaCBjYXNlLCBBUkcg aXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1h dC4KIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jl c3VsdC4KCgojIGZ1bmNfdG9faG9zdF9maWxlIEFSRwojIENvbnZlcnRzIHRoZSBmaWxlIG5h bWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1 bHQKIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCmZ1bmNfdG9faG9zdF9maWxlICgp CnsKICAkZGVidWdfY21kCgogICR0b19ob3N0X2ZpbGVfY21kICIkMSIKfQojIGVuZCBmdW5j X3RvX2hvc3RfZmlsZQoKCiMgZnVuY190b190b29sX2ZpbGUgQVJHIExBWlkKIyBjb252ZXJ0 cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZv cm1hdC4gUmV0dXJuCiMgcmVzdWx0IGluIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElm IHRoZSBjb252ZXJzaW9uIGluIHVzZSBpcyBsaXN0ZWQKIyBpbiAodGhlIGNvbW1hIHNlcGFy YXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KZnVuY190b190b29sX2Zp bGUgKCkKewogICRkZWJ1Z19jbWQKCiAgY2FzZSAsJDIsIGluCiAgICAqLCIkdG9fdG9vbF9m aWxlX2NtZCIsKikKICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCiAgICAgIDs7 CiAgICAqKQogICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCiAgICAgIGZ1bmNfdG9fdG9v bF9maWxlX3Jlc3VsdD0kZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0CiAgICAgIDs7CiAgZXNh Ywp9CiMgZW5kIGZ1bmNfdG9fdG9vbF9maWxlCgoKIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29w IEFSRwojIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KZnVuY19jb252 ZXJ0X2ZpbGVfbm9vcCAoKQp7CiAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCn0KIyBl bmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAoKCiMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190 b193MzIgQVJHCiMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRv IChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCiMgY29udmVyc2lvbiB0byB3MzIgaXMg bm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4K IyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9f dzMyICgpCnsKICAkZGVidWdfY21kCgogIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQog IGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193 MzIgIiQxIgogICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29y ZV9tc3lzX3RvX3czMl9yZXN1bHQKICBmaQogIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIk MSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCn0KIyBlbmQgZnVuY19jb252ZXJ0X2Zp bGVfbXN5c190b193MzIKCgojIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJH CiMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBS ZXR1cm5zIHJlc3VsdCBpbgojIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KZnVuY19jb252 ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQp7CiAgJGRlYnVnX2NtZAoKICBmdW5jX3RvX2hv c3RfZmlsZV9yZXN1bHQ9JDEKICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICMgYmVjYXVz ZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5v IG5lZWQgdG8gdXNlCiAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgogICAgZnVuY190 b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCiAgZmkKICBmdW5jX2NvbnZl cnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0Igp9CiMgZW5k IGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKCgojIGZ1bmNfY29udmVydF9maWxl X25peF90b193MzIgQVJHCiMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3 MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50CiMgYW5kIGEgd29ya2lu ZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0 LgpmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCnsKICAkZGVidWdfY21kCgogIGZ1 bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAg ZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCiAgICBmdW5jX3RvX2hv c3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVz dWx0CiAgZmkKICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0 X2ZpbGVfcmVzdWx0Igp9CiMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKCgoj IGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luIEFSRwojIENvbnZlcnQgZmlsZSBu YW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BB VEggc2V0LgojIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4K ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKewogICRkZWJ1Z19jbWQKCiAg ZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAg ICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCiAgICBmdW5jX2N5Z3BhdGgg LXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCiAgICBmdW5jX3Rv X2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKICBmaQogIGZ1bmNfY29u dmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCn0KIyBl bmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KCgojIGZ1bmNfY29udmVydF9m aWxlX25peF90b19jeWd3aW4gQVJHCiMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5p eCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZAojIGluIGEg d2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0 LiAgUmV0dXJucyByZXN1bHQKIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCmZ1bmNf Y29udmVydF9maWxlX25peF90b19jeWd3aW4gKCkKewogICRkZWJ1Z19jbWQKCiAgZnVuY190 b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAjIGNv bnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZy b20gdzMyIHRvIGN5Z3dpbi4KICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193 MzIgIiQxIgogICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93 aW5lX3RvX3czMl9yZXN1bHQiCiAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNf Y3lncGF0aF9yZXN1bHQKICBmaQogIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRm dW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCn0KIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4 X3RvX2N5Z3dpbgoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwojICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgaW52b2tlZCB2 aWEgJyR0b19ob3N0X3BhdGhfY21kIEFSRycKIwojIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRo ZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCiMg VGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVz dWx0LgojCiMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWls ZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiAgSWYKIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0 aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKIyBj b252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCiMKIyBBbGwgcGF0aCBjb252 ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFtZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50 aW9uOgojICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZl cnRfZmlsZV9YX3RvX1kgKCkKIyAgIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAg IDogZnVuY19jb252ZXJ0X3BhdGhfWF90b19ZICgpCiMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4g JGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9uIHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKIyBz YW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxk LyRob3N0IGNvbWJpbmF0aW9ucywKIyB0aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xs b3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAojIHdpbGwg YnJlYWsuCgoKIyBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAojIEVuc3VyZXMgdGhhdCBm dW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRv IHRoZQojIGFwcHJvcHJpYXRlIHZhbHVlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hv c3RfZmlsZV9jbWQuCnRvX2hvc3RfcGF0aF9jbWQ9CmZ1bmNfaW5pdF90b19ob3N0X3BhdGhf Y21kICgpCnsKICAkZGVidWdfY21kCgogIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21k IjsgdGhlbgogICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0 b19ob3N0X2ZpbGVfY21kIgogICAgdG9faG9zdF9wYXRoX2NtZD1mdW5jX2NvbnZlcnRfcGF0 aF8kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgZmkKfQoKCiMgZnVuY190b19ob3N0X3BhdGgg QVJHCiMgQ29udmVydHMgdGhlIHBhdGggQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9z dCBmb3JtYXQuIFJldHVybiByZXN1bHQKIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQu CmZ1bmNfdG9faG9zdF9wYXRoICgpCnsKICAkZGVidWdfY21kCgogIGZ1bmNfaW5pdF90b19o b3N0X3BhdGhfY21kCiAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgp9CiMgZW5kIGZ1bmNfdG9f aG9zdF9wYXRoCgoKIyBmdW5jX2NvbnZlcnRfcGF0aF9ub29wIEFSRwojIENvcHkgQVJHIHRv IGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQp7 CiAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCn0KIyBlbmQgZnVuY19jb252ZXJ0X3Bh dGhfbm9vcAoKCiMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCiMgQ29udmVy dCBwYXRoIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1 dG9tYXRpYwojIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRo ZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCiMgZnVuY190b19ob3N0X3BhdGhfcmVz dWx0LgpmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQp7CiAgJGRlYnVnX2NtZAoK ICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4K ICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJh Y3RlcnMgZnJvbSBBUkcuICBNU1lTCiAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBo ZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOwogICAgIyBhbmQg d2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCiAgICBmdW5jX3N0cmlwbmFtZSA6 IDogIiQxIgogICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVz dWx0CiAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9w YXRoX3RtcDEiCiAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY29udmVydF9j b3JlX21zeXNfdG9fdzMyX3Jlc3VsdAogICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAi OyIgXAogICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3Bh dGhfcmVzdWx0IgogICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6 KiIgIio6IiAiOyIgIiQxIgogIGZpCn0KIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190 b193MzIKCgojIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgQVJHCiMgQ29udmVy dCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQg aW4KIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCmZ1bmNfY29udmVydF9wYXRoX2N5Z3dp bl90b193MzIgKCkKewogICRkZWJ1Z19jbWQKCiAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0 PSQxCiAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0 aF9tc3lzX3RvX3czMjoKICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCiAgICBmdW5jX3Rv X2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKICAgIGZ1bmNfdG9faG9z dF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtbSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEi YAogICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAogICAgICAiJGZ1bmNfdG9f aG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgogICAgZnVuY19j b252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgogIGZp Cn0KIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMgoKCiMgZnVuY19jb252 ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcKIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0 byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50IGFuZAojIGEgd29y a2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jl c3VsdC4KZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQp7CiAgJGRlYnVnX2NtZAoK ICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4K ICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgogICAgZnVuY19zdHJp cG5hbWUgOiA6ICIkMSIKICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBu YW1lX3Jlc3VsdAogICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1 bmNfdG9faG9zdF9wYXRoX3RtcDEiCiAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1 bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0CiAgICBmdW5jX2NvbnZl cnRfcGF0aF9jaGVjayA6ICI7IiBcCiAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIg IiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCiAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9u dF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCiAgZmkKfQojIGVuZCBmdW5jX2Nv bnZlcnRfcGF0aF9uaXhfdG9fdzMyCgoKIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5 Z3dpbiBBUkcKIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0 LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCiMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190 b19ob3N0X2ZpbGVfcmVzdWx0LgpmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAo KQp7CiAgJGRlYnVnX2NtZAoKICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICBpZiB0 ZXN0IC1uICIkMSI7IHRoZW4KICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9f dzMyOgogICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKICAgIGZ1bmNfdG9faG9zdF9wYXRo X3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5 c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgogICAgZnVuY19jeWdwYXRoIC11 IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgogICAgZnVuY190 b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0CiAgICBmdW5jX2NvbnZl cnRfcGF0aF9jaGVjayA6IDogXAogICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIk ZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgogICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRf YmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKICBmaQp9CiMgZW5kIGZ1bmNfY29udmVy dF9wYXRoX21zeXNfdG9fY3lnd2luCgoKIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3ln d2luIEFSRwojIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQu ICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKIyBhIHdpbmUgZW52aXJvbm1lbnQs IHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0 IGluCiMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgpmdW5jX2NvbnZlcnRfcGF0aF9uaXhf dG9fY3lnd2luICgpCnsKICAkZGVidWdfY21kCgogIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3Vs dD0kMQogIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgIyBSZW1vdmUgbGVhZGluZyBhbmQg dHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCiAgICAjIEFSRy4gbXN5 cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCiAg ICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21w bGV0ZWx5LgogICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKICAgIGZ1bmNfdG9faG9zdF9w YXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgZnVuY19jb252ZXJ0X2NvcmVf cGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCiAgICBmdW5jX2N5 Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3Vs dCIKICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAog ICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKICAgICAgIiRmdW5jX3RvX2hvc3Rf cGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKICAgIGZ1bmNfY29udmVy dF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCiAgZmkKfQojIGVu ZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCgoKIyBmdW5jX2RsbF9kZWZfcCBG SUxFCiMgVHJ1ZSBpZmYgRklMRSBpcyBhIFdpbmRvd3MgRExMICcuZGVmJyBmaWxlLgojIEtl ZXAgaW4gc3luYyB3aXRoIF9MVF9ETExfREVGX1AgaW4gbGlidG9vbC5tNApmdW5jX2RsbF9k ZWZfcCAoKQp7CiAgJGRlYnVnX2NtZAoKICBmdW5jX2RsbF9kZWZfcF90bXA9YCRTRUQgLW4g XAogICAgLWUgJ3MvXlsJIF0qLy8nIFwKICAgIC1lICcvXlwoOy4qXCkqJC9kJyBcCiAgICAt ZSAncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnIFwKICAgIC1l IHEgXAogICAgIiQxImAKICB0ZXN0IERFRiA9ICIkZnVuY19kbGxfZGVmX3BfdG1wIgp9CgoK IyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KZnVuY19tb2RlX2NvbXBpbGUgKCkKewogICAg JGRlYnVnX2NtZAoKICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUg c291cmNlIGZpbGUuCiAgICBiYXNlX2NvbXBpbGU9CiAgICBzcmNmaWxlPSRub25vcHQgICMg IGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgogICAgc3VwcHJl c3Nfb3B0PXllcwogICAgc3VwcHJlc3Nfb3V0cHV0PQogICAgYXJnX21vZGU9bm9ybWFsCiAg ICBsaWJvYmo9CiAgICBsYXRlcj0KICAgIHBpZV9mbGFnPQoKICAgIGZvciBhcmcKICAgIGRv CiAgICAgIGNhc2UgJGFyZ19tb2RlIGluCiAgICAgIGFyZyAgKQoJIyBkbyBub3QgImNvbnRp bnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQoJbGFzdGFyZz0kYXJn CglhcmdfbW9kZT1ub3JtYWwKCTs7CgogICAgICB0YXJnZXQgKQoJbGlib2JqPSRhcmcKCWFy Z19tb2RlPW5vcm1hbAoJY29udGludWUKCTs7CgogICAgICBub3JtYWwgKQoJIyBBY2NlcHQg YW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgoJY2FzZSAkYXJnIGluCgktbykKCSAgdGVzdCAt biAiJGxpYm9iaiIgJiYgXAoJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3Bl Y2lmeSAnLW8nIG1vcmUgdGhhbiBvbmNlIgoJICBhcmdfbW9kZT10YXJnZXQKCSAgY29udGlu dWUKCSAgOzsKCgktcGllIHwgLWZwaWUgfCAtZlBJRSkKICAgICAgICAgIGZ1bmNfYXBwZW5k IHBpZV9mbGFnICIgJGFyZyIKCSAgY29udGludWUKCSAgOzsKCgktc2hhcmVkIHwgLXN0YXRp YyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQoJICBmdW5jX2FwcGVuZCBsYXRl ciAiICRhcmciCgkgIGNvbnRpbnVlCgkgIDs7CgoJLW5vLXN1cHByZXNzKQoJICBzdXBwcmVz c19vcHQ9bm8KCSAgY29udGludWUKCSAgOzsKCgktWGNvbXBpbGVyKQoJICBhcmdfbW9kZT1h cmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBs aXN0CgkgIGNvbnRpbnVlICAgICAgIyAgVGhlIGN1cnJlbnQgInNyY2ZpbGUiIHdpbGwgZWl0 aGVyIGJlIHJldGFpbmVkIG9yCgkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIu ICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCgoJLVdjLCopCgkgIGZ1bmNf c3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVz dWx0CgkgIGxhc3Rhcmc9CgkgIHNhdmVfaWZzPSRJRlM7IElGUz0sCgkgIGZvciBhcmcgaW4g JGFyZ3M7IGRvCgkgICAgSUZTPSRzYXZlX2lmcwoJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBs YXN0YXJnICIkYXJnIgoJICBkb25lCgkgIElGUz0kc2F2ZV9pZnMKCSAgZnVuY19zdHJpcG5h bWUgJyAnICcnICIkbGFzdGFyZyIKCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0 CgoJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KCSAgZnVuY19hcHBl bmQgYmFzZV9jb21waWxlICIgJGxhc3RhcmciCgkgIGNvbnRpbnVlCgkgIDs7CgoJKikKCSAg IyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgoJICAj IFRoZSBwcmV2aW91cyAic3JjZmlsZSIgYmVjb21lcyB0aGUgY3VycmVudCBhcmd1bWVudC4K CSAgIwoJICBsYXN0YXJnPSRzcmNmaWxlCgkgIHNyY2ZpbGU9JGFyZwoJICA7OwoJZXNhYyAg IyAgY2FzZSAkYXJnCgk7OwogICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCgogICAg ICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgogICAgICBm dW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKICAgIGRvbmUgIyBm b3IgYXJnCgogICAgY2FzZSAkYXJnX21vZGUgaW4KICAgIGFyZykKICAgICAgZnVuY19mYXRh bF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgog ICAgICA7OwogICAgdGFyZ2V0KQogICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBz cGVjaWZ5IGEgdGFyZ2V0IHdpdGggJy1vJyIKICAgICAgOzsKICAgICopCiAgICAgICMgR2V0 IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KICAgICAgdGVzdCAteiAiJGxpYm9i aiIgJiYgewoJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCglsaWJvYmo9JGZ1bmNfYmFzZW5h bWVfcmVzdWx0CiAgICAgIH0KICAgICAgOzsKICAgIGVzYWMKCiAgICAjIFJlY29nbml6ZSBz ZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgogICAgIyBJZiB0aGUgdXNlciBzcGVj aWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KICAgIGNhc2Ug JGxpYm9iaiBpbgogICAgKi5bY0NGU2lmbXNvXSB8IFwKICAgICouYWRhIHwgKi5hZGIgfCAq LmFkcyB8ICouYXNtIHwgXAogICAgKi5jKysgfCAqLmNjIHwgKi5paSB8ICouY2xhc3MgfCAq LmNwcCB8ICouY3h4IHwgXAogICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICou Z28gfCAqLm9iaiB8ICouc3ggfCAqLmN1IHwgKi5jdXApCiAgICAgIGZ1bmNfeGZvcm0gIiRs aWJvYmoiCiAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKICAgICAgOzsKICAgIGVz YWMKCiAgICBjYXNlICRsaWJvYmogaW4KICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7 IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OwogICAgKikKICAgICAgZnVuY19mYXRhbF9lcnJv ciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gJyRsaWJv YmonIgogICAgICA7OwogICAgZXNhYwoKICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBp bGUKCiAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KICAgICAgY2FzZSAkYXJnIGluCiAgICAg IC1zaGFyZWQpCgl0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCgkgIHx8IGZ1 bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2Fubm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnki CglidWlsZF9vbGRfbGlicz1ubwoJY29udGludWUKCTs7CgogICAgICAtc3RhdGljKQoJYnVp bGRfbGlidG9vbF9saWJzPW5vCglidWlsZF9vbGRfbGlicz15ZXMKCWNvbnRpbnVlCgk7OwoK ICAgICAgLXByZWZlci1waWMpCglwaWNfbW9kZT15ZXMKCWNvbnRpbnVlCgk7OwoKICAgICAg LXByZWZlci1ub24tcGljKQoJcGljX21vZGU9bm8KCWNvbnRpbnVlCgk7OwogICAgICBlc2Fj CiAgICBkb25lCgogICAgZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkbGlib2JqIgogICAgdGVz dCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIgXAogICAgICAmJiAk RUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10n IFwKICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSAnJGxpYm9iaicgbWF5IG5v dCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCiAgICBmdW5jX2Rpcm5hbWVf YW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKICAgIG9iam5hbWU9JGZ1bmNfYmFzZW5hbWVf cmVzdWx0CiAgICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAgICBsb2JqPSR4ZGlyJG9i amRpci8kb2JqbmFtZQoKICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKICAgICAg ZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFu ZCIKCiAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgogICAgaWYg dGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgogICAgICByZW1vdmVsaXN0PSIk b2JqICRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKICAgIGVsc2UKICAgICAgcmVtb3ZlbGlz dD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgogICAgZmkKCiAgICAjIE9uIEN5Z3dpbiB0 aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0 IHR5cGVzCiAgICBjYXNlICRob3N0X29zIGluCiAgICBjeWd3aW4qIHwgbWluZ3cqIHwgd2lu ZG93cyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgIHBpY19tb2RlPWRlZmF1bHQK ICAgICAgOzsKICAgIGVzYWMKICAgIGlmIHRlc3Qgbm8gPSAiJHBpY19tb2RlIiAmJiB0ZXN0 IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCiAgICAgICMgbm9u LVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAogICAgICBw aWNfbW9kZT1kZWZhdWx0CiAgICBmaQoKICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBv ZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCiAgICAjIG5vdCBzdXBwb3J0 IC1vIHdpdGggLWMKICAgIGlmIHRlc3Qgbm8gPSAiJGNvbXBpbGVyX2NfbyI7IHRoZW4KICAg ICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwu W14uXSokJSUnYC4kb2JqZXh0CiAgICAgIGxvY2tmaWxlPSRvdXRwdXRfb2JqLmxvY2sKICAg IGVsc2UKICAgICAgb3V0cHV0X29iaj0KICAgICAgbmVlZF9sb2Nrcz1ubwogICAgICBsb2Nr ZmlsZT0KICAgIGZpCgogICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBp cyBuZWVkZWQKICAgICMgV2UgdXNlIHRoaXMgc2NyaXB0IGZpbGUgdG8gbWFrZSB0aGUgbGlu aywgaXQgYXZvaWRzIGNyZWF0aW5nIGEgbmV3IGZpbGUKICAgIGlmIHRlc3QgeWVzID0gIiRu ZWVkX2xvY2tzIjsgdGhlbgogICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9n cGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCglmdW5jX2VjaG8gIldhaXRpbmcg Zm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgoJc2xlZXAgMgogICAgICBkb25lCiAgICBl bGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyI7IHRoZW4KICAgICAgaWYgdGVzdCAtZiAi JGxvY2tmaWxlIjsgdGhlbgoJJEVDSE8gIlwKKioqIEVSUk9SLCAkbG9ja2ZpbGUgZXhpc3Rz IGFuZCBjb250YWluczoKYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCgpUaGlzIGluZGlj YXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCnRl bXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5k IGl0IGJlY2F1c2UKeW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICct bycgdG9nZXRoZXIuICBJZiB5b3UKcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBz dWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgphdm9pZCBwYXJhbGxlbCBi dWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgpjb21w aWxlci4iCgoJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAoJZXhpdCAkRVhJVF9G QUlMVVJFCiAgICAgIGZpCiAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0 X29iaiIKICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCiAgICBmaQoKICAg ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKICAgIGZ1bmNfYXBwZW5kIHJlbW92 ZWxpc3QgIiAkbG9ja2ZpbGUiCiAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1v dmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQoKICAgIGZ1bmNfdG9fdG9vbF9m aWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKICAgIHNyY2Zp bGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAogICAgZnVuY19xdW90ZV9hcmcgcHJldHR5 ICIkc3JjZmlsZSIKICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2FyZ19yZXN1bHQKCiAgICAj IE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxp YnJhcmllcy4KICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVu CiAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVt cHRpZWQuCiAgICAgIGZic2RfaGlkZW91c19zaF9idWc9JGJhc2VfY29tcGlsZQoKICAgICAg aWYgdGVzdCBubyAhPSAiJHBpY19tb2RlIjsgdGhlbgoJY29tbWFuZD0iJGJhc2VfY29tcGls ZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgogICAgICBlbHNlCgkjIERvbid0IGJ1aWxkIFBJQyBj b2RlCgljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKICAgICAgZmkKCiAgICAg IGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2JqZGlyIgoKICAgICAgaWYgdGVzdCAteiAiJG91dHB1 dF9vYmoiOyB0aGVuCgkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKCWZ1bmNfYXBw ZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIKICAgICAgZmkKCiAgICAgIGZ1bmNfc2hvd19ldmFs X2xvY2FsZSAiJGNvbW1hbmQiCVwKICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIg JiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCgogICAgICBpZiB0ZXN0 IHdhcm4gPSAiJG5lZWRfbG9ja3MiICYmCgkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rl di9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KCSRFQ0hPICJcCioqKiBFUlJPUiwgJGxv Y2tmaWxlIGNvbnRhaW5zOgpgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKCmJ1dCBpdCBz aG91bGQgY29udGFpbjoKJHNyY2ZpbGUKClRoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBw cm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKdGVtcG9yYXJ5IG9iamVjdCBmaWxl LCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQp5b3VyIGNv bXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlv dQpyZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwg YnV0IHlvdSBoYWQgYmV0dGVyCmF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4g dGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCmNvbXBpbGVyLiIKCgkkb3B0X2RyeV9y dW4gfHwgJFJNICRyZW1vdmVsaXN0CglleGl0ICRFWElUX0ZBSUxVUkUKICAgICAgZmkKCiAg ICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNv bXBpbGUgdGhlIG5leHQgb25lCiAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0 ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCglmdW5jX3Nob3dfZXZhbCAn JE1WICIkb3V0cHV0X29iaiIgIiRsb2JqIicgXAoJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1 biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJwogICAgICBmaQoKICAgICAgIyBB bGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgog ICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcHJlc3Nfb3B0IjsgdGhlbgoJc3VwcHJlc3Nfb3V0 cHV0PScgPi9kZXYvbnVsbCAyPiYxJwogICAgICBmaQogICAgZmkKCiAgICAjIE9ubHkgYnVp bGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJp ZXMuCiAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCiAgICAgIGlm IHRlc3QgeWVzICE9ICIkcGljX21vZGUiOyB0aGVuCgkjIERvbid0IGJ1aWxkIFBJQyBjb2Rl Cgljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKICAgICAgZWxz ZQoJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgogICAgICBm aQogICAgICBpZiB0ZXN0IHllcyA9ICIkY29tcGlsZXJfY19vIjsgdGhlbgoJZnVuY19hcHBl bmQgY29tbWFuZCAiIC1vICRvYmoiCiAgICAgIGZpCgogICAgICAjIFN1cHByZXNzIGNvbXBp bGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KICAgICAg ZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKICAgICAgZnVuY19zaG93 X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAogICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJN ICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCgogICAgICBpZiB0ZXN0IHdhcm4g PSAiJG5lZWRfbG9ja3MiICYmCgkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxs YCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KCSRFQ0hPICJcCioqKiBFUlJPUiwgJGxvY2tmaWxl IGNvbnRhaW5zOgpgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKCmJ1dCBpdCBzaG91bGQg Y29udGFpbjoKJHNyY2ZpbGUKClRoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNz IGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKdGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQg bGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQp5b3VyIGNvbXBpbGVy IGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQpyZXBl YXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlv dSBoYWQgYmV0dGVyCmF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBw bGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCmNvbXBpbGVyLiIKCgkkb3B0X2RyeV9ydW4gfHwg JFJNICRyZW1vdmVsaXN0CglleGl0ICRFWElUX0ZBSUxVUkUKICAgICAgZmkKCiAgICAgICMg SnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCiAgICAgIGlmIHRlc3QgLW4gIiRvdXRw dXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KCWZ1bmNf c2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKCSAgJ2Vycm9yPSQ/OyAk b3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKICAgICAgZmkK ICAgIGZpCgogICAgJG9wdF9kcnlfcnVuIHx8IHsKICAgICAgZnVuY193cml0ZV9saWJ0b29s X29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKCiAgICAg ICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKICAgICAg aWYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCglyZW1vdmVsaXN0PSRsb2NrZmls ZQogICAgICAgICRSTSAiJGxvY2tmaWxlIgogICAgICBmaQogICAgfQoKICAgIGV4aXQgJEVY SVRfU1VDQ0VTUwp9Cgokb3B0X2hlbHAgfHwgewogIHRlc3QgY29tcGlsZSA9ICIkb3B0X21v ZGUiICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQp9CgpmdW5jX21vZGVfaGVscCAo KQp7CiAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rl cy4KICAgIGNhc2UgJG9wdF9tb2RlIGluCiAgICAgICIiKQogICAgICAgICMgR2VuZXJpYyBo ZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cwogICAgICAgICMgYXQg dGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KICAgICAgICBmdW5jX2hlbHAKICAgICAgICA7OwoK ICAgICAgY2xlYW4pCiAgICAgICAgJEVDSE8gXAoiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9O XS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgoKUmVtb3ZlIGZp bGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KClJNIGlzIHRoZSBuYW1lIG9mIHRoZSBw cm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklM RQoodHlwaWNhbGx5ICcvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNo IGFzICctZicpIHRvIGJlIHBhc3NlZAp0byBSTS4KCklmIEZJTEUgaXMgYSBsaWJ0b29sIGxp YnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKd2l0 aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0 ZWQgdXNpbmcgUk0uIgogICAgICAgIDs7CgogICAgICBjb21waWxlKQogICAgICAkRUNITyBc CiJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUt Q09NTUFORC4uLiBTT1VSQ0VGSUxFCgpDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxp YnRvb2wgbGlicmFyeSBvYmplY3QuCgpUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5n IGFkZGl0aW9uYWwgb3B0aW9uczoKCiAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRw dXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCiAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90 IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCiAgLXByZWZl ci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKICAtcHJlZmVyLW5v bi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKICAtc2hhcmVkICAg ICAgICAgICBkbyBub3QgYnVpbGQgYSAnLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBs aW5raW5nCiAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhICcubycgZmlsZSBzdWl0 YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKICAtV2MsRkxBRwogIC1YY29tcGlsZXIgRkxBRyAg IHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKCkNPTVBJTEUtQ09NTUFORCBp cyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhICdzdGFuZGFyZCcgb2JqZWN0 IGZpbGUKZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KClRoZSBvdXRwdXQgZmlsZSBuYW1l IGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJv bQpTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZm aXggJy5jJyB3aXRoIHRoZQpsaWJyYXJ5IG9iamVjdCBzdWZmaXgsICcubG8nLiIKICAgICAg ICA7OwoKICAgICAgZXhlY3V0ZSkKICAgICAgICAkRUNITyBcCiJVc2FnZTogJHByb2duYW1l IFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCgpBdXRvbWF0 aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KClRoaXMgbW9k ZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgoKICAtZGxvcGVu IEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxp YnJhcnkgcGF0aAoKVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVu dCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gJy1kbG9wZW4nCmZsYWdzLgoKSWYgYW55IG9mIHRo ZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUg dHJhbnNsYXRlZAppbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5 LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKZGlyZWN0b3JpZXMgYXJlIGFk ZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCgpUaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3 aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKICAgICAgICA7OwoKICAgICAgZmluaXNoKQogICAg ICAgICRFQ0hPIFwKIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlz aCBbTElCRElSXS4uLgoKQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxp YnJhcmllcy4KCkVhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGli dG9vbCBsaWJyYXJpZXMuCgpUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMg bWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKdGhlICctLWRyeS1ydW4n IG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVk LiIKICAgICAgICA7OwoKICAgICAgaW5zdGFsbCkKICAgICAgICAkRUNITyBcCiJVc2FnZTog JHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4u LgoKSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCgpJTlNUQUxMLUNPTU1BTkQg aXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91 bGQgYmUKZWl0aGVyIHRoZSAnaW5zdGFsbCcgb3IgJ2NwJyBwcm9ncmFtLgoKVGhlIGZvbGxv d2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFs bHk6CgogIC1pbnN0LXByZWZpeC1kaXIgUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMg YSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgoKVGhlIHJlc3Qgb2YgdGhlIGNvbXBv bmVudHMgYXJlIGludGVycHJldGVkIGFzIGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9u bHkKQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCiAg ICAgICAgOzsKCiAgICAgIGxpbmspCiAgICAgICAgJEVDSE8gXAoiVXNhZ2U6ICRwcm9nbmFt ZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGluayBMSU5LLUNPTU1BTkQuLi4KCkxpbmsgb2JqZWN0 IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwg b3IgdG8KY3JlYXRlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS4KCkxJTkstQ09NTUFORCBpcyBh IGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNy ZWF0ZQphIHByb2dyYW0gZnJvbSBzZXZlcmFsIG9iamVjdCBmaWxlcy4KClRoZSBmb2xsb3dp bmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgoK ICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBh bGwKICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYg cG9zc2libGUKICAtYmluZGlyIEJJTkRJUiAgICBzcGVjaWZ5IHBhdGggdG8gYmluYXJpZXMg ZGlyZWN0b3J5IChmb3Igc3lzdGVtcyB3aGVyZQogICAgICAgICAgICAgICAgICAgIGxpYnJh cmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKICAt ZGxvcGVuIEZJTEUgICAgICAnLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxv cGVuZWQgYXQgcnVudGltZQogIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQg YWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCiAgLWV4cG9ydC1keW5h bWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdp dGggZGxzeW0oMykKICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQogICAgICAgICAgICAgICAg ICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQog IC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAogICAgICAgICAgICAgICAgICAgIHRyeSB0 byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAogIC1MTElCRElSICAg ICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMK ICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVk IGxpYnJhcnkgbGliTkFNRQogIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0 aGF0IGNhbiBkbG9wZW5lZAogIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3Qt aW5zdGFsbCBtb2RlCiAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJs ZSBleGVjdXRhYmxlCiAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFy eSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCiAgLW8gT1VUUFVULUZJTEUg ICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCiAgLW9i amVjdGxpc3QgRklMRSAgdXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklM RSB0byBzcGVjaWZ5IG9iamVjdHMKICAtb3MyZGxsbmFtZSBOQU1FICBmb3JjZSBhIHNob3J0 IERMTCBuYW1lIG9uIE9TLzIgKG5vIGVmZmVjdCBvbiBvdGhlciBPU2VzKQogIC1wcmVjaW91 cy1maWxlcy1yZWdleCBSRUdFWAogICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBv dXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5 IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgogIC1ycGF0aCBMSUJESVIgICAgIHRoZSBj cmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIK ICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2Yg cHJvZ3JhbXMgYW5kIGxpYnJhcmllcwogIC1zaGFyZWQgICAgICAgICAgIG9ubHkgZG8gZHlu YW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCiAgLXNocmV4dCBTVUZGSVggICAg b3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCiAg LXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5p bnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKICAtc3RhdGljLWxpYnRvb2wtbGlicwogICAg ICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRv b2wgbGlicmFyaWVzCiAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0K ICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNo IHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCiAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0 aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCiAgLVdjLEZM QUcKICAtWGNvbXBpbGVyIEZMQUcgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVj dGx5IHRvIHRoZSBjb21waWxlcgogIC1XYSxGTEFHCiAgLVhhc3NlbWJsZXIgRkxBRyAgcGFz cyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgYXNzZW1ibGVyCiAgLVds LEZMQUcKICAtWGxpbmtlciBGTEFHICAgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRp cmVjdGx5IHRvIHRoZSBsaW5rZXIKICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3Bl Y2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKCkFsbCBvdGhlciBvcHRp b25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggJy0nKSBhcmUgaWdub3JlZC4KCkV2ZXJ5 IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGlu ZyBpbiAnLmxhJyBhcmUKdHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmll cywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKb2JqZWN0IGZpbGVzLgoK SWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJh cnkgaXMgY3JlYXRlZCwKb25seSBsaWJyYXJ5IG9iamVjdHMgKCcubG8nIGZpbGVzKSBtYXkg YmUgc3BlY2lmaWVkLCBhbmQgJy1ycGF0aCcgaXMKcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNy ZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KCklmIE9VVFBVVC1GSUxFIGVuZHMgaW4g Jy5hJyBvciAnLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKdXNp bmcgJ2FyJyBhbmQgJ3JhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgJ2xpYicuCgpJZiBP VVRQVVQtRklMRSBlbmRzIGluICcubG8nIG9yICcuJG9iamV4dCcsIHRoZW4gYSByZWxvYWRh YmxlIG9iamVjdCBmaWxlCmlzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHBy b2dyYW0gaXMgY3JlYXRlZC4iCiAgICAgICAgOzsKCiAgICAgIHVuaW5zdGFsbCkKICAgICAg ICAkRUNITyBcCiJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT11bmluc3Rh bGwgUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgoKUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFu IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCgpSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3Jh bSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKHR5 cGljYWxseSAnL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyAn LWYnKSB0byBiZSBwYXNzZWQKdG8gUk0uCgpJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5 LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KT3RoZXJ3 aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgogICAgICAgIDs7 CgogICAgICAqKQogICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24g bW9kZSAnJG9wdF9tb2RlJyIKICAgICAgICA7OwogICAgZXNhYwoKICAgIGVjaG8KICAgICRF Q0hPICJUcnkgJyRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0 IG90aGVyIG1vZGVzLiIKfQoKIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJs ZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CmlmICRvcHRfaGVscDsgdGhl bgogIGlmIHRlc3QgOiA9ICIkb3B0X2hlbHAiOyB0aGVuCiAgICBmdW5jX21vZGVfaGVscAog IGVsc2UKICAgIHsKICAgICAgZnVuY19oZWxwIG5vZXhpdAogICAgICBmb3Igb3B0X21vZGUg aW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFu OyBkbwoJZnVuY19tb2RlX2hlbHAKICAgICAgZG9uZQogICAgfSB8ICRTRUQgLW4gJzFwOyAy LCRzL15Vc2FnZTovICBvcjogL3AnCiAgICB7CiAgICAgIGZ1bmNfaGVscCBub2V4aXQKICAg ICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNo IHVuaW5zdGFsbCBjbGVhbjsgZG8KCWVjaG8KCWZ1bmNfbW9kZV9oZWxwCiAgICAgIGRvbmUK ICAgIH0gfAogICAgJFNFRCAnMWQKICAgICAgL15XaGVuIHJlcG9ydGluZy8sL15SZXBvcnQv ewoJSAoJZAogICAgICB9CiAgICAgICR4CiAgICAgIC9pbmZvcm1hdGlvbiBhYm91dCBvdGhl ciBtb2Rlcy9kCiAgICAgIC9tb3JlIGRldGFpbGVkIC4qTU9ERS9kCiAgICAgIHMvXlVzYWdl Oi4qLS1tb2RlPVwoW14gXSpcKSAuKi9EZXNjcmlwdGlvbiBvZiBcMSBtb2RlOi8nCiAgZmkK ICBleGl0ICQ/CmZpCgoKIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KZnVuY19tb2RlX2V4 ZWN1dGUgKCkKewogICAgJGRlYnVnX2NtZAoKICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlz IHRoZSBjb21tYW5kIG5hbWUuCiAgICBjbWQ9JG5vbm9wdAogICAgdGVzdCAteiAiJGNtZCIg JiYgXAogICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5E IgoKICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCiAgICBmb3IgZmls ZSBpbiAkb3B0X2Rsb3BlbjsgZG8KICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKCXx8IGZ1bmNf ZmF0YWxfaGVscCAiJyRmaWxlJyBpcyBub3QgYSBmaWxlIgoKICAgICAgZGlyPQogICAgICBj YXNlICRmaWxlIGluCiAgICAgICoubGEpCglmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUi CglmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKCgkjIENoZWNrIHRvIHNlZSB0 aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgoJZnVuY19sYWxpYl91bnNh ZmVfcCAiJGZpbGUiIFwKCSAgfHwgZnVuY19mYXRhbF9oZWxwICInJGxpYicgaXMgbm90IGEg dmFsaWQgbGlidG9vbCBhcmNoaXZlIgoKCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgoJ ZGxuYW1lPQoJbGlicmFyeV9uYW1lcz0KCWZ1bmNfc291cmNlICIkZmlsZSIKCgkjIFNraXAg dGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KCWlmIHRlc3QgLXogIiRk bG5hbWUiOyB0aGVuCgkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KCSAg dGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKCSAgICBmdW5jX3dhcm5pbmcgIickZmls ZScgd2FzIG5vdCBsaW5rZWQgd2l0aCAnLWV4cG9ydC1keW5hbWljJyIKCSAgY29udGludWUK CWZpCgoJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCglkaXI9JGZ1bmNfZGlybmFtZV9y ZXN1bHQKCglpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KCSAgZnVu Y19hcHBlbmQgZGlyICIvJG9iamRpciIKCWVsc2UKCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRk bG5hbWUiOyB0aGVuCgkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgJyRkbG5h bWUnIGluICckZGlyJyBvciAnJGRpci8kb2JqZGlyJyIKCSAgZmkKCWZpCgk7OwoKICAgICAg Ki5sbykKCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmls ZS4KCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgoJZGlyPSRmdW5jX2Rpcm5hbWVfcmVz dWx0Cgk7OwoKICAgICAgKikKCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQg Zm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKCWNvbnRpbnVlCgk7Owog ICAgICBlc2FjCgogICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCiAgICAgIGFi c2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGly PSRhYnNkaXIKCiAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92 YXIuCiAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVu CglldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCiAgICAgIGVsc2UKCWV2YWwgIiRz aGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgogICAgICBmaQogICAg ZG9uZQoKICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0 byBzZXQgc2hsaWJwYXRoX3ZhcgogICAgIyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHBy b2dyYW1zLgogICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSRtYWdpYwoKICAgICMgQ2hlY2sg aWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KICAgIGFyZ3M9 CiAgICBmb3IgZmlsZQogICAgZG8KICAgICAgY2FzZSAkZmlsZSBpbgogICAgICAtKiB8ICou bGEgfCAqLmxvICkgOzsKICAgICAgKikKCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlz IHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9w ICIkZmlsZSI7IHRoZW4KCSAgZnVuY19zb3VyY2UgIiRmaWxlIgoJICAjIFRyYW5zZm9ybSBh cmcgdG8gd3JhcHBlZCBuYW1lLgoJICBmaWxlPSRwcm9nZGlyLyRwcm9ncmFtCgllbGlmIGZ1 bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCgkgIGZ1bmNfbHR3cmFw cGVyX3NjcmlwdG5hbWUgIiRmaWxlIgoJICBmdW5jX3NvdXJjZSAiJGZ1bmNfbHR3cmFwcGVy X3NjcmlwdG5hbWVfcmVzdWx0IgoJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1l LgoJICBmaWxlPSRwcm9nZGlyLyRwcm9ncmFtCglmaQoJOzsKICAgICAgZXNhYwogICAgICAj IFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgog ICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYXJncyAiJGZpbGUiCiAgICBkb25lCgogICAgaWYg JG9wdF9kcnlfcnVuOyB0aGVuCiAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUu CiAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgoJZXZhbCAiXCRFQ0hP IFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKCWVjaG8gImV4cG9ydCAk c2hsaWJwYXRoX3ZhciIKICAgICAgZmkKICAgICAgJEVDSE8gIiRjbWQkYXJncyIKICAgICAg ZXhpdCAkRVhJVF9TVUNDRVNTCiAgICBlbHNlCiAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBh dGhfdmFyIjsgdGhlbgoJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCglldmFsICJleHBv cnQgJHNobGlicGF0aF92YXIiCiAgICAgIGZpCgogICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52 aXJvbm1lbnQgdmFyaWFibGVzCiAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBM Q19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUwogICAgICBkbwoJZXZhbCAi aWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KICAgICAgICAg ICAgICAgICRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCgkgICAgICBl bHNlCgkJJGx0X3Vuc2V0ICRsdF92YXIKCSAgICAgIGZpIgogICAgICBkb25lCgogICAgICAj IE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCiAgICAgIGV4ZWNf Y21kPVwkY21kJGFyZ3MKICAgIGZpCn0KCnRlc3QgZXhlY3V0ZSA9ICIkb3B0X21vZGUiICYm IGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQoKCiMgZnVuY19tb2RlX2ZpbmlzaCBhcmcu Li4KZnVuY19tb2RlX2ZpbmlzaCAoKQp7CiAgICAkZGVidWdfY21kCgogICAgbGlicz0KICAg IGxpYmRpcnM9CiAgICBhZG1pbmNtZHM9CgogICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsx KyIkQCJ9CiAgICBkbwogICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgoJZnVuY19hcHBl bmQgbGliZGlycyAiICRvcHQiCgogICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCglp ZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgoJICBmdW5jX2FwcGVuZCBsaWJz ICIgJG9wdCIKCWVsc2UKCSAgZnVuY193YXJuaW5nICInJG9wdCcgaXMgbm90IGEgdmFsaWQg bGlidG9vbCBhcmNoaXZlIgoJZmkKCiAgICAgIGVsc2UKCWZ1bmNfZmF0YWxfZXJyb3IgImlu dmFsaWQgYXJndW1lbnQgJyRvcHQnIgogICAgICBmaQogICAgZG9uZQoKICAgIGlmIHRlc3Qg LW4gIiRsaWJzIjsgdGhlbgogICAgICBpZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4K ICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNl ZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAogICAgICAgIHN5c3Jvb3RfY21kPSJzL1woWyAnXVwp JHN5c3Jvb3RfcmVnZXgvXDEvZzsiCiAgICAgIGVsc2UKICAgICAgICBzeXNyb290X2NtZD0K ICAgICAgZmkKCiAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcwogICAgICBpZiAk b3B0X2RyeV9ydW47IHRoZW4KICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbwogICAgICAg ICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgJz0nIHBy ZWZpeGVzIGZyb20gJGxpYiIKICAgICAgICBkb25lCiAgICAgIGVsc2UKICAgICAgICB0bXBk aXI9YGZ1bmNfbWt0ZW1wZGlyYAogICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCgkgICRT RUQgLWUgIiRzeXNyb290X2NtZCBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9 L1wxL2ciICRsaWIgXAoJICAgID4gJHRtcGRpci90bXAtbGEKCSAgbXYgLWYgJHRtcGRpci90 bXAtbGEgJGxpYgoJZG9uZQogICAgICAgICR7Uk19ciAiJHRtcGRpciIKICAgICAgZmkKICAg IGZpCgogICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0 IC1uICIkbGliZGlycyI7IHRoZW4KICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8K CWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KCSAgIyBEbyBlYWNoIGNvbW1hbmQg aW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hf Y21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcwonIiRjbWQiJyInCglmaQoJaWYgdGVzdCAt biAiJGZpbmlzaF9ldmFsIjsgdGhlbgoJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwu CgkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCgkgICRvcHRfZHJ5X3J1biB8fCBldmFs ICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKICAgICAgICRjbWRzIgoJZmkK ICAgICAgZG9uZQogICAgZmkKCiAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxl bnQgbW9kZS4KICAgICRvcHRfcXVpZXQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCgogICAgaWYg dGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGly cyI7IHRoZW4KICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgICAgZWNobyAiTGli cmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgogICAgICBmb3IgbGliZGlyIGluICRs aWJkaXJzOyBkbwoJJEVDSE8gIiAgICRsaWJkaXIiCiAgICAgIGRvbmUKICAgICAgZWNobwog ICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3Qg aW5zdGFsbGVkIGxpYnJhcmllcyIKICAgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3Rvcnks IExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCiAgICAgIGVjaG8g InNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUg Jy1MTElCRElSJyIKICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQg bGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgogICAgICBpZiB0ZXN0IC1uICIkc2hsaWJw YXRoX3ZhciI7IHRoZW4KCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgJyRzaGxpYnBh dGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKCWVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1 dGlvbiIKICAgICAgZmkKICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgoJ ZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSAnJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVu dCB2YXJpYWJsZSIKCWVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCiAgICAgIGZpCiAgICAg IGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgoJbGliZGly PUxJQkRJUgoJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgoKCSRF Q0hPICIgICAtIHVzZSB0aGUgJyRmbGFnJyBsaW5rZXIgZmxhZyIKICAgICAgZmkKICAgICAg aWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KCSRFQ0hPICIgICAtIGhhdmUgeW91ciBz eXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKICAg ICAgZmkKICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KCWVjaG8gIiAg IC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gJy9ldGMv bGQuc28uY29uZiciCiAgICAgIGZpCiAgICAgIGVjaG8KCiAgICAgIGVjaG8gIlNlZSBhbnkg b3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMg Zm9yIgogICAgICBjYXNlICRob3N0IGluCglzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVsw LTldKQoJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3Js ZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgoJICBlY2hvICJwYWdlcy4iCgkgIDs7CgkqKQoJ ICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28o OCkgbWFudWFsIHBhZ2VzLiIKCSAgOzsKICAgICAgZXNhYwogICAgICBlY2hvICItLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tIgogICAgZmkKICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwp9Cgp0ZXN0IGZpbmlz aCA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CgoKIyBmdW5j X21vZGVfaW5zdGFsbCBhcmcuLi4KZnVuY19tb2RlX2luc3RhbGwgKCkKewogICAgJGRlYnVn X2NtZAoKICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0 IHRoZSBiZWdpbm5pbmcgb2YKICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdp bmRvd3MgTlQpLgogICAgaWYgdGVzdCAiJFNIRUxMIiA9ICIkbm9ub3B0IiB8fCB0ZXN0IC9i aW4vc2ggPSAiJG5vbm9wdCIgfHwKICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0 b29sJ3MgaW5zdGFsbCBjb21tYW5kLgogICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wq KSA6OzsgKikgZmFsc2U7OyBlc2FjCiAgICB0aGVuCiAgICAgICMgQWVzdGhldGljYWxseSBx dW90ZSBpdC4KICAgICAgZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkbm9ub3B0IgogICAgICBp bnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2FyZ19yZXN1bHQgIgogICAgICBhcmc9JDEKICAg ICAgc2hpZnQKICAgIGVsc2UKICAgICAgaW5zdGFsbF9wcm9nPQogICAgICBhcmc9JG5vbm9w dAogICAgZmkKCiAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUg bmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCiAgICAjIEFlc3RoZXRpY2FsbHkg cXVvdGUgaXQuCiAgICBmdW5jX3F1b3RlX2FyZyBwcmV0dHkgIiRhcmciCiAgICBmdW5jX2Fw cGVuZCBpbnN0YWxsX3Byb2cgIiRmdW5jX3F1b3RlX2FyZ19yZXN1bHQiCiAgICBpbnN0YWxs X3NoYXJlZF9wcm9nPSRpbnN0YWxsX3Byb2cKICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIg aW4KICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CiAgICAgICopIGluc3Rh bGxfY3A9ZmFsc2UgOzsKICAgIGVzYWMKCiAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxl YXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCiAgICBkZXN0PQogICAgZmlsZXM9CiAg ICBvcHRzPQogICAgcHJldj0KICAgIGluc3RhbGxfdHlwZT0KICAgIGlzZGlyPWZhbHNlCiAg ICBzdHJpcG1lPQogICAgbm9fbW9kZT06CiAgICBmb3IgYXJnCiAgICBkbwogICAgICBhcmcy PQogICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KCWZ1bmNfYXBwZW5kIGZpbGVzICIg JGRlc3QiCglkZXN0PSRhcmcKCWNvbnRpbnVlCiAgICAgIGZpCgogICAgICBjYXNlICRhcmcg aW4KICAgICAgLWQpIGlzZGlyPTogOzsKICAgICAgLWYpCglpZiAkaW5zdGFsbF9jcDsgdGhl biA6OyBlbHNlCgkgIHByZXY9JGFyZwoJZmkKCTs7CiAgICAgIC1nIHwgLW0gfCAtbykKCXBy ZXY9JGFyZwoJOzsKICAgICAgLXMpCglzdHJpcG1lPSIgLXMiCgljb250aW51ZQoJOzsKICAg ICAgLSopCgk7OwogICAgICAqKQoJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBh biBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgoJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCgkg IGlmIHRlc3QgWC1tID0gIlgkcHJldiIgJiYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVf bW9kZSI7IHRoZW4KCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKCSAgICBub19t b2RlPWZhbHNlCgkgIGZpCgkgIHByZXY9CgllbHNlCgkgIGRlc3Q9JGFyZwoJICBjb250aW51 ZQoJZmkKCTs7CiAgICAgIGVzYWMKCiAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUg YXJndW1lbnQuCiAgICAgIGZ1bmNfcXVvdGVfYXJnIHByZXR0eSAiJGFyZyIKICAgICAgZnVu Y19hcHBlbmQgaW5zdGFsbF9wcm9nICIgJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKICAgICAg aWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCglmdW5jX3F1b3RlX2FyZyBwcmV0dHkgIiRhcmcy IgogICAgICBmaQogICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1 bmNfcXVvdGVfYXJnX3Jlc3VsdCIKICAgIGRvbmUKCiAgICB0ZXN0IC16ICIkaW5zdGFsbF9w cm9nIiAmJiBcCiAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBp bnN0YWxsIHByb2dyYW0iCgogICAgdGVzdCAtbiAiJHByZXYiICYmIFwKICAgICAgZnVuY19m YXRhbF9oZWxwICJ0aGUgJyRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCgog ICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRo ZW4KICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQoJZnVuY19xdW90ZV9hcmcg cHJldHR5ICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgoJZnVuY19hcHBlbmQgaW5zdGFsbF9z aGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1b3RlX2FyZ19yZXN1bHQiCiAgICAgIGZpCiAgICBm aQoKICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KICAgICAgaWYgdGVzdCAteiAiJGRl c3QiOyB0aGVuCglmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3Bl Y2lmaWVkIgogICAgICBlbHNlCglmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkg YSBkZXN0aW5hdGlvbiIKICAgICAgZmkKICAgIGZpCgogICAgIyBTdHJpcCBhbnkgdHJhaWxp bmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCiAgICBmdW5jX3N0cmlwbmFtZSAnJyAn LycgIiRkZXN0IgogICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgogICAgIyBDaGVj ayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCiAgICB0ZXN0 IC1kICIkZGVzdCIgJiYgaXNkaXI9OgogICAgaWYgJGlzZGlyOyB0aGVuCiAgICAgIGRlc3Rk aXI9JGRlc3QKICAgICAgZGVzdG5hbWU9CiAgICBlbHNlCiAgICAgIGZ1bmNfZGlybmFtZV9h bmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKICAgICAgZGVzdGRpcj0kZnVuY19kaXJuYW1l X3Jlc3VsdAogICAgICBkZXN0bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKCiAgICAgICMg Tm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9u ZSBmaWxlIHNwZWNpZmllZC4KICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKICAgICAg dGVzdCAiJCMiIC1ndCAxICYmIFwKCWZ1bmNfZmF0YWxfaGVscCAiJyRkZXN0JyBpcyBub3Qg YSBkaXJlY3RvcnkiCiAgICBmaQogICAgY2FzZSAkZGVzdGRpciBpbgogICAgW1xcL10qIHwg W0EtWmEtel06W1xcL10qKSA7OwogICAgKikKICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBk bwoJY2FzZSAkZmlsZSBpbgoJKi5sbykgOzsKCSopCgkgIGZ1bmNfZmF0YWxfaGVscCAiJyRk ZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgoJICA7OwoJZXNh YwogICAgICBkb25lCiAgICAgIDs7CiAgICBlc2FjCgogICAgIyBUaGlzIHZhcmlhYmxlIHRl bGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCiAgICAj IHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdp Yz0kbWFnaWMKCiAgICBzdGF0aWNsaWJzPQogICAgZnV0dXJlX2xpYmRpcnM9CiAgICBjdXJy ZW50X2xpYmRpcnM9CiAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCgogICAgICAjIERvIGVh Y2ggaW5zdGFsbGF0aW9uLgogICAgICBjYXNlICRmaWxlIGluCiAgICAgICouJGxpYmV4dCkK CSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCglmdW5jX2FwcGVuZCBzdGF0aWNs aWJzICIgJGZpbGUiCgk7OwoKICAgICAgKi5sYSkKCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIk ZmlsZSIKCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAoKCSMgQ2hlY2sgdG8g c2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCglmdW5jX2xhbGli X3Vuc2FmZV9wICIkZmlsZSIgXAoJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIickZmlsZScgaXMg bm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgoKCWxpYnJhcnlfbmFtZXM9CglvbGRfbGli cmFyeT0KCXJlbGlua19jb21tYW5kPQoJZnVuY19zb3VyY2UgIiRmaWxlIgoKCSMgQWRkIHRo ZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4K CWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCgkgIGNhc2UgIiRjdXJy ZW50X2xpYmRpcnMgIiBpbgoJICAqIiAkbGliZGlyICIqKSA7OwoJICAqKSBmdW5jX2FwcGVu ZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OwoJICBlc2FjCgllbHNlCgkgICMgTm90 ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KCSAgY2FzZSAiJGZ1dHVyZV9saWJk aXJzICIgaW4KCSAgKiIgJGxpYmRpciAiKikgOzsKCSAgKikgZnVuY19hcHBlbmQgZnV0dXJl X2xpYmRpcnMgIiAkbGliZGlyIiA7OwoJICBlc2FjCglmaQoKCWZ1bmNfZGlybmFtZSAiJGZp bGUiICIvIiAiIgoJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CglmdW5jX2FwcGVuZCBkaXIg IiRvYmpkaXIiCgoJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgoJICAjIERl dGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUg ZGlyLgoJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJz JSRsaWJkaXJcJCUlImAKCgkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMg b3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50 cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAoJICAjIGFyZSBpbnN0YWxsZWQg dG8gdGhlIHNhbWUgcHJlZml4LgoJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24n dCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAoJICAjIGFyZSBpbnN0YWxsZWQgaW50byAk bGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCgkgICMgYnV0IGl0 J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgoJICB0ZXN0ICIkaW5zdF9wcmVmaXhf ZGlyIiA9ICIkZGVzdGRpciIgJiYgXAoJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBj YW5ub3QgaW5zdGFsbCAnJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxp YmRpciIKCgkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCgkgICAgIyBT dGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgoJ ICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMl QGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJg CgkgIGVsc2UKCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIg fCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAoJICBmaQoKCSAgZnVuY193YXJuaW5n ICJyZWxpbmtpbmcgJyRmaWxlJyIKCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFu ZCIgXAoJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rICdcJyckZmlsZSdc Jycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCglmaQoK CSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCglzZXQgZHVtbXkgJGxp YnJhcnlfbmFtZXM7IHNoaWZ0CglpZiB0ZXN0IC1uICIkMSI7IHRoZW4KCSAgcmVhbG5hbWU9 JDEKCSAgc2hpZnQKCgkgIHNyY25hbWU9JHJlYWxuYW1lCgkgIHRlc3QgLW4gIiRyZWxpbmtf Y29tbWFuZCIgJiYgc3JjbmFtZT0ke3JlYWxuYW1lfVQKCgkgICMgSW5zdGFsbCB0aGUgc2hh cmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KCSAgZnVuY19zaG93X2V2YWwg IiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1l IiBcCgkgICAgICAnZXhpdCAkPycKCSAgdHN0cmlwbWU9JHN0cmlwbWUKCSAgY2FzZSAkaG9z dF9vcyBpbgoJICBjeWd3aW4qIHwgbWluZ3cqIHwgd2luZG93cyogfCBwdzMyKiB8IGNlZ2Nj KikKCSAgICBjYXNlICRyZWFsbmFtZSBpbgoJICAgICouZGxsLmEpCgkgICAgICB0c3RyaXBt ZT0KCSAgICAgIDs7CgkgICAgZXNhYwoJICAgIDs7CgkgIG9zMiopCgkgICAgY2FzZSAkcmVh bG5hbWUgaW4KCSAgICAqX2RsbC5hKQoJICAgICAgdHN0cmlwbWU9CgkgICAgICA7OwoJICAg IGVzYWMKCSAgICA7OwoJICBlc2FjCgkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVz dCAtbiAiJHN0cmlwbGliIjsgdGhlbgoJICAgIGZ1bmNfc2hvd19ldmFsICIkc3RyaXBsaWIg JGRlc3RkaXIvJHJlYWxuYW1lIiAnZXhpdCAkPycKCSAgZmkKCgkgIGlmIHRlc3QgIiQjIiAt Z3QgMDsgdGhlbgoJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUg bmV3IG9uZXMuCgkgICAgIyBUcnkgJ2xuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlICdsbicg YmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgoJICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEg IFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAoJICAgICMgc28gd2Ug YWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KCSAgICBmb3IgbGlua25hbWUKCSAgICBk bwoJICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCgkJJiYgZnVuY19z aG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25h bWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07 IH0pIgoJICAgIGRvbmUKCSAgZmkKCgkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0 aW5zdGFsbCBjb21tYW5kcy4KCSAgbGliPSRkZXN0ZGlyLyRyZWFsbmFtZQoJICBmdW5jX2V4 ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JwoJZmkKCgkjIEluc3Rh bGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KCWZ1bmNf YmFzZW5hbWUgIiRmaWxlIgoJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKCWluc3RuYW1l PSRkaXIvJHtuYW1lfWkKCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFt ZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCgoJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0 aWMgbGlicmFyeSwgdG9vLgoJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVu ZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCgk7OwoKICAgICAgKi5sbykKCSMg SW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgoKCSMgRmlndXJlIG91dCBk ZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4K CWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRl c3RuYW1lCgllbHNlCgkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgoJICBkZXN0ZmlsZT0kZnVu Y19iYXNlbmFtZV9yZXN1bHQKCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCglmaQoK CSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0 IGZpbGUuCgljYXNlICRkZXN0ZmlsZSBpbgoJKi5sbykKCSAgZnVuY19sbzJvICIkZGVzdGZp bGUiCgkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKCSAgOzsKCSouJG9iamV4dCkK CSAgc3RhdGljZGVzdD0kZGVzdGZpbGUKCSAgZGVzdGZpbGU9CgkgIDs7CgkqKQoJICBmdW5j X2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gJyRkZXN0Zmls ZSciCgkgIDs7Cgllc2FjCgoJIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1 ZXN0ZWQuCgl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKCSAgZnVuY19zaG93X2V2YWwgIiRp bnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKCgkjIEluc3RhbGwgdGhl IG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KCWlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGli cyI7IHRoZW4KCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3Qg ZmlsZS4KCSAgZnVuY19sbzJvICIkZmlsZSIKCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVz dWx0CgkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3Rh dGljZGVzdCIgJ2V4aXQgJD8nCglmaQoJZXhpdCAkRVhJVF9TVUNDRVNTCgk7OwoKICAgICAg KikKCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBh bHJlYWR5IHNwZWNpZmllZC4KCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KCSAgZGVz dGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1lCgllbHNlCgkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxl IgoJICBkZXN0ZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKCSAgZGVzdGZpbGU9JGRlc3Rk aXIvJGRlc3RmaWxlCglmaQoKCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJl IGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAoJIyBiZWNhdXNlIGl0IGlzIG1vc3Qg bGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bwoJIyBpbnN0YWxs CglzdHJpcHBlZF9leHQ9CgljYXNlICRmaWxlIGluCgkgICouZXhlKQoJICAgIGlmIHRlc3Qg ISAtZiAiJGZpbGUiOyB0aGVuCgkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRm aWxlIgoJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgkgICAgICBzdHJpcHBl ZF9leHQ9LmV4ZQoJICAgIGZpCgkgICAgOzsKCWVzYWMKCgkjIERvIGEgdGVzdCB0byBzZWUg aWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCgljYXNlICRob3N0IGluCgkq Y3lnd2luKiB8ICptaW5ndyogfCAqd2luZG93cyopCgkgICAgaWYgZnVuY19sdHdyYXBwZXJf ZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3Njcmlw dG5hbWUgIiRmaWxlIgoJICAgICAgd3JhcHBlcj0kZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFt ZV9yZXN1bHQKCSAgICBlbHNlCgkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRm aWxlIgoJICAgICAgd3JhcHBlcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgkgICAgZmkKCSAg ICA7OwoJKikKCSAgICB3cmFwcGVyPSRmaWxlCgkgICAgOzsKCWVzYWMKCWlmIGZ1bmNfbHR3 cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KCSAgbm90aW5zdF9kZXBsaWJzPQoJ ICByZWxpbmtfY29tbWFuZD0KCgkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKCgkgICMgQ2hl Y2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgoJICB0ZXN0IC16 ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAoJICAgIGZ1bmNfZmF0YWxf ZXJyb3IgImludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCAnJHdyYXBwZXInIgoKCSAg ZmluYWxpemU9OgoJICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCgkgICAgIyBD aGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgoJICAgIGxpYmRp cj0KCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgoJICAgICAgZnVuY19zb3VyY2UgIiRs aWIiCgkgICAgZmkKCSAgICBsaWJmaWxlPSRsaWJkaXIvYCRFQ0hPICIkbGliIiB8ICRTRUQg J3MlXi4qLyUlZydgCgkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIk bGliZmlsZSI7IHRoZW4KCSAgICAgIGZ1bmNfd2FybmluZyAiJyRsaWInIGhhcyBub3QgYmVl biBpbnN0YWxsZWQgaW4gJyRsaWJkaXInIgoJICAgICAgZmluYWxpemU9ZmFsc2UKCSAgICBm aQoJICBkb25lCgoJICByZWxpbmtfY29tbWFuZD0KCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVy IgoKCSAgb3V0cHV0bmFtZT0KCSAgaWYgdGVzdCBubyA9ICIkZmFzdF9pbnN0YWxsIiAmJiB0 ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCgkgICAgJG9wdF9kcnlfcnVuIHx8IHsK CSAgICAgIGlmICRmaW5hbGl6ZTsgdGhlbgoJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1w ZGlyYAoJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKCQlmaWxlPSRmdW5j X2Jhc2VuYW1lX3Jlc3VsdAoJICAgICAgICBvdXRwdXRuYW1lPSR0bXBkaXIvJGZpbGUKCSAg ICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgoJICAgICAg ICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBP VVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKCgkgICAgICAgICRvcHRfcXVpZXQgfHwgewoJ ICAgICAgICAgIGZ1bmNfcXVvdGVfYXJnIGV4cGFuZCxwcmV0dHkgIiRyZWxpbmtfY29tbWFu ZCIKCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9hcmdfcmVzdWx0IgoJICAgICAg ICB9CgkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgoJICAgICAg ICAgIGVsc2UKCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgJyRmaWxlJyB3aXRoIHRo ZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgoJCSAgJG9wdF9kcnlfcnVu IHx8ICR7Uk19ciAiJHRtcGRpciIKCQkgIGNvbnRpbnVlCgkgICAgICAgIGZpCgkgICAgICAg IGZpbGU9JG91dHB1dG5hbWUKCSAgICAgIGVsc2UKCSAgICAgICAgZnVuY193YXJuaW5nICJj YW5ub3QgcmVsaW5rICckZmlsZSciCgkgICAgICBmaQoJICAgIH0KCSAgZWxzZQoJICAgICMg SW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KCSAgICBmaWxl PWAkRUNITyAiJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2Jq ZGlyL1wxJSJgCgkgIGZpCglmaQoKCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3Iv YmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgoJIyBvbmUgYW55d2F5CgljYXNlICRp bnN0YWxsX3Byb2csJGhvc3QgaW4KCSovdXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKCSAg Y2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KCSAgKi5leGU6Ki5leGUpCgkgICAgIyB0aGlzIGlz IG9rCgkgICAgOzsKCSAgKi5leGU6KikKCSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCgkg ICAgOzsKCSAgKjoqLmV4ZSkKCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRkZXN0 ZmlsZSIKCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgkgICAgOzsKCSAg ZXNhYwoJICA7OwoJZXNhYwoJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2dcJHN0cmlw bWUgXCRmaWxlIFwkZGVzdGZpbGUiICdleGl0ICQ/JwoJJG9wdF9kcnlfcnVuIHx8IGlmIHRl c3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgoJICAke1JNfXIgIiR0bXBkaXIiCglmaQoJOzsK ICAgICAgZXNhYwogICAgZG9uZQoKICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbwog ICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9y ZXN1bHQKCiAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KICAgICAgb2xk bGliPSRkZXN0ZGlyLyRuYW1lCiAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBm dW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgogICAgICB0b29sX29sZGxpYj0kZnVuY190 b190b29sX2ZpbGVfcmVzdWx0CgogICAgICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJv ZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0ICQ/JwoKICAgICAgaWYgdGVzdCAtbiAiJHN0cmlw bWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCglmdW5jX3Nob3dfZXZhbCAi JG9sZF9zdHJpcGxpYiAkdG9vbF9vbGRsaWIiICdleGl0ICQ/JwogICAgICBmaQoKICAgICAg IyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgogICAgICBm dW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKICAg IGRvbmUKCiAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKICAgICAgZnVuY193 YXJuaW5nICJyZW1lbWJlciB0byBydW4gJyRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGli ZGlycyciCgogICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KICAgICAg IyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJl bnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKICAgICAgZXhlY19jbWQ9JyRTSEVM TCAiJHByb2dwYXRoIiAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMn CiAgICBlbHNlCiAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwogICAgZmkKfQoKdGVzdCBpbnN0 YWxsID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CgoKIyBm dW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKIyBFeHRy YWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMu byB3aXRoCiMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgpmdW5jX2dlbmVyYXRlX2Rsc3lt cyAoKQp7CiAgICAkZGVidWdfY21kCgogICAgbXlfb3V0cHV0bmFtZT0kMQogICAgbXlfb3Jp Z2luYXRvcj0kMgogICAgbXlfcGljX3A9JHszLWZhbHNlfQogICAgbXlfcHJlZml4PWAkRUNI TyAiJG15X29yaWdpbmF0b3IiIHwgJFNFRCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKICAgIG15 X2Rsc3ltcz0KCiAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0 IG5vICE9ICIkZGxzZWxmIjsgdGhlbgogICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3Qg LW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCglteV9kbHN5bXM9JHtteV9vdXRwdXRu YW1lfVMuYwogICAgICBlbHNlCglmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRy YWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCiAgICAgIGZpCiAg ICBmaQoKICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCiAgICAgIGNhc2UgJG15 X2Rsc3ltcyBpbgogICAgICAiIikgOzsKICAgICAgKi5jKQoJIyBEaXNjb3ZlciB0aGUgbmxp c3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KCW5saXN0PSRvdXRwdXRfb2JqZGlyLyRteV9v dXRwdXRuYW1lLm5tCgoJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7 bmxpc3R9VCIKCgkjIFBhcnNlIHRoZSBuYW1lIGxpc3QgaW50byBhIHNvdXJjZSBmaWxlLgoJ ZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgoKCSRv cHRfZHJ5X3J1biB8fCAkRUNITyA+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAov KiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yICckbXlfb3V0cHV0 bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLwovKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdO VSAkUEFDS0FHRSkgJFZFUlNJT04gKi8KCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gXCJD XCIgewojZW5kaWYKCiNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDQp ICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCiNwcmFnbWEg R0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIgojZW5kaWYK Ci8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4s IGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwojaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVm aW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQovKiBEQVRBIGltcG9ydHMg ZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKICAg cmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9u IHBzZXVkby1yZWxvY3MuICAqLwojIGRlZmluZSBMVF9ETFNZTV9DT05TVAojZWxpZiBkZWZp bmVkIF9fb3NmX18KLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVs b2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCiMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCiNl bHNlCiMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CiNlbmRpZgoKI2RlZmluZSBTVFJF UShzMSwgczIpIChzdHJjbXAgKChzMSksIChzMikpID09IDApCgovKiBFeHRlcm5hbCBzeW1i b2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAoiCgoJaWYgdGVzdCB5ZXMg PSAiJGRsc2VsZiI7IHRoZW4KCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBs aXN0IGZvciAnJG91dHB1dCciCgoJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JB TUAgJyA+ICIkbmxpc3QiCgoJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0 aGUgc3ltYm9sIGxpc3QuCgkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJz IiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKCSAgZm9yIHByb2dmaWxlIGlu ICRwcm9nZmlsZXM7IGRvCgkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVu Y19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3Rp bmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tICckZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIK CSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1 bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgoJICBkb25lCgoJICBpZiB0 ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgoJICAgICRvcHRfZHJ5X3J1biB8fCB7 CgkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0 IiA+ICIkbmxpc3QiVCcKCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCgkg ICAgfQoJICBmaQoKCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhl bgoJICAgICRvcHRfZHJ5X3J1biB8fCB7CgkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBv cnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCgkgICAgICBldmFsICck TVYgIiRubGlzdCJUICIkbmxpc3QiJwoJICAgIH0KCSAgZmkKCgkgICMgUHJlcGFyZSB0aGUg bGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCgkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9s cyI7IHRoZW4KCSAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kb3V0cHV0bmFt ZS5leHAKCSAgICAkb3B0X2RyeV9ydW4gfHwgewoJICAgICAgJFJNICRleHBvcnRfc3ltYm9s cwoJICAgICAgZXZhbCAiJFNFRCAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14u KiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJwoJICAg ICAgY2FzZSAkaG9zdCBpbgoJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKndpbmRvd3Mq IHwgKmNlZ2NjKiApCiAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIk b3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwogICAgICAgICAgICAgICAgZXZhbCAn Y2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5k ZWYiJwoJICAgICAgICA7OwoJICAgICAgZXNhYwoJICAgIH0KCSAgZWxzZQoJICAgICRvcHRf ZHJ5X3J1biB8fCB7CgkgICAgICBldmFsICIkU0VEIC1lICdzL1woW10uWypeJF1cKS9cXFxc XDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4g IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCgkgICAgICBldmFsICckR1JFUCAt ZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlz dCJUJwoJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKCSAgICAgIGNhc2Ug JGhvc3QgaW4KCSAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKndpbmRvd3MqIHwgKmNl Z2NjKiApCgkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpk aXIvJG91dHB1dG5hbWUuZGVmIicKCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4g IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCgkgICAgICAgICAgOzsKCSAgICAg IGVzYWMKCSAgICB9CgkgIGZpCglmaQoKCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7 IGRvCgkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20g JyRkbHByZWZpbGUnIgoJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgoJICBuYW1lPSRm dW5jX2Jhc2VuYW1lX3Jlc3VsdAogICAgICAgICAgY2FzZSAkaG9zdCBpbgoJICAgICpjeWd3 aW4qIHwgKm1pbmd3KiB8ICp3aW5kb3dzKiB8ICpjZWdjYyogKQoJICAgICAgIyBpZiBhbiBp bXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCgkgICAgICBpZiBmdW5j X3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KCSAgICAgICAgZnVuY190 cl9zaCAiJGRscHJlZmlsZSIKCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxl XyRmdW5jX3RyX3NoX3Jlc3VsdCIKCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9Cgkg ICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vy cl9sYWZpbGUiOyB0aGVuCgkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNs b2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKCSAgICAgICAgICBkbHByZWZpbGVf ZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCgkgICAg ICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiOyB0aGVuCgkgICAgICAgICAg ICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKCSAgICAgICAgICAgIGRscHJl ZmlsZV9kbGJhc2VuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoJICAgICAgICAgIGVsc2UK CSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1k bHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJv bV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJh c2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAoJICAgICAgICAgIGZpCgkg ICAgICAgIGZpCgkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CgkgICAgICAgICAgaWYgdGVz dCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIjsgdGhlbgoJICAgICAgICAgICAgZXZhbCAn JEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKCSAgICAgICAg ICBlbHNlCgkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERM TCBuYW1lIGZyb20gJG5hbWUiCgkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAi ID4+ICIkbmxpc3QiJwoJICAgICAgICAgIGZpCgkgICAgICAgICAgZnVuY190b190b29sX2Zp bGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCgkgICAgICAg ICAgY2FzZSAkaG9zdCBpbgoJICAgICAgICAgICAgaVszNDU2XTg2LSotbWluZ3czMiopCgkg ICAgICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAy Pi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfAoJICAgICAgICAgICAgICAgICRT RUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRu bGlzdCciCgkgICAgICAgICAgICA7OwoJICAgICAgICAgICAgKikKCSAgICAgICAgICAgICAg ZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwg JGdsb2JhbF9zeW1ib2xfcGlwZSB8CgkgICAgICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19p bXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fX25tXy8vJyA+PiAnJG5saXN0JyIKCSAgICAg ICAgICAgIDs7CgkgICAgICAgICAgZXNhYwoJICAgICAgICB9CgkgICAgICBlbHNlICMgbm90 IGFuIGltcG9ydCBsaWIKCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKCSAgICAgICAgICBl dmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwoJICAgICAgICAgIGZ1bmNfdG9f dG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgoJ ICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9k ZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCgkgICAgICAgIH0K CSAgICAgIGZpCgkgICAgOzsKCSAgICAqKQoJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKCSAg ICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKCSAgICAgICAgZnVu Y190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9f dzMyCgkgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAy Pi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCgkgICAgICB9 CgkgICAgOzsKICAgICAgICAgIGVzYWMKCWRvbmUKCgkkb3B0X2RyeV9ydW4gfHwgewoJICAj IE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCgkgIHRlc3QgLWYg IiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCgoJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBz eW1zIjsgdGhlbgoJICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxp c3QiID4gIiRubGlzdCJUCgkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgoJICBmaQoKCSAg IyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KCSAgaWYgJEdSRVAg LXYgIl46ICIgPCAiJG5saXN0IiB8CgkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+ L2Rldi9udWxsIDI+JjE7IHRoZW4KCQlzb3J0IC1rIDMKCSAgICAgIGVsc2UKCQlzb3J0ICsy CgkgICAgICBmaSB8CgkgICAgICB1bmlxID4gIiRubGlzdCJTOyB0aGVuCgkgICAgOgoJICBl bHNlCgkgICAgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUwoJICBmaQoK CSAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KCSAgICBldmFsICIkZ2xvYmFsX3N5bWJv bF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1z IicKCSAgZWxzZQoJICAgIGVjaG8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8k bXlfZGxzeW1zIgoJICBmaQoKCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJHtubGlzdH1JIicK CSAgaWYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfdG9faW1wb3J0IjsgdGhlbgoJICAgIGV2 YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCInIDwgIiRubGlzdCJTID4gIiRubGlzdCJJ JwoJICBmaQoKCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKCi8q IFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KdHlw ZWRlZiBzdHJ1Y3QgewogIGNvbnN0IGNoYXIgKm5hbWU7CiAgdm9pZCAqYWRkcmVzczsKfSBs dF9kbHN5bWxpc3Q7CmV4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKbHRfJHtt eV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdO1wKIgoKCSAgaWYgdGVzdCAtcyAi JG5saXN0Ikk7IHRoZW4KCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1z IiAiXApzdGF0aWMgdm9pZCBsdF9zeW1pbml0KHZvaWQpCnsKICBMVF9ETFNZTV9DT05TVCBs dF9kbHN5bWxpc3QgKnN5bWJvbCA9IGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5 bWJvbHM7CiAgZm9yICg7IHN5bWJvbC0+bmFtZTsgKytzeW1ib2wpCiAgICB7IgoJICAgICRT RUQgJ3MvLiovICAgICAgaWYgKFNUUkVRIChzeW1ib2wtPm5hbWUsIFwiJlwiKSkgc3ltYm9s LT5hZGRyZXNzID0gKHZvaWQgKikgXCYmOy8nIDwgIiRubGlzdCJJID4+ICIkb3V0cHV0X29i amRpci8kbXlfZGxzeW1zIgoJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5 bXMiICJcCiAgICB9Cn0iCgkgIGZpCgkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9k bHN5bXMiICJcCkxUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdApsdF8ke215X3ByZWZpeH1f TFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQp7IHtcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lk ICopIDB9LCIKCgkgIGlmIHRlc3QgLXMgIiRubGlzdCJJOyB0aGVuCgkgICAgZWNobyA+PiAi JG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKICB7XCJASU5JVEBcIiwgKHZvaWQgKikg Jmx0X3N5bWluaXR9LCIKCSAgZmkKCgkgIGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgoJICBu bykKCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5s aXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKCSAgICA7OwoJICAqKQoJICAg IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwg IiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCgkgICAgOzsKCSAgZXNh YwoJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAogIHswLCAodm9p ZCAqKSAwfQp9OwoKLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0Qg bGlua2VyICovCiNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKc3RhdGljIGNvbnN0IHZvaWQg Kmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9w cmVsb2FkZWRfc3ltYm9sczsKfQojZW5kaWYKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRp ZlwKIgoJfSAjICEkb3B0X2RyeV9ydW4KCglwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CgljYXNl ICIkY29tcGlsZV9jb21tYW5kICIgaW4KCSoiIC1zdGF0aWMgIiopIDs7CgkqKQoJICBjYXNl ICRob3N0IGluCgkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBp Y19mbGFnIHdvcmtzIGFyb3VuZAoJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJv Z3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhl ciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQoJICAjIHBpY19mbGFnIHdoZW4g bGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KCSAgIyBGcmVl QlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KCSAgKi0qLWZyZWVic2Qy Lip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKCSAgICBwaWNfZmxhZ19m b3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiIDs7CgkgICot Ki1ocHV4KikKCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OwoJ ICAqKQoJICAgICRteV9waWNfcCAmJiBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2Zs YWciCgkgICAgOzsKCSAgZXNhYwoJICA7OwoJZXNhYwoJc3ltdGFiX2NmbGFncz0KCWZvciBh cmcgaW4gJExUQ0ZMQUdTOyBkbwoJICBjYXNlICRhcmcgaW4KCSAgLXBpZSB8IC1mcGllIHwg LWZQSUUpIDs7CgkgICopIGZ1bmNfYXBwZW5kIHN5bXRhYl9jZmxhZ3MgIiAkYXJnIiA7OwoJ ICBlc2FjCglkb25lCgoJIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4K CWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2Nm bGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxz eW1zIiknICdleGl0ICQ/JwoKCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KCWZ1 bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3Qi ICIke25saXN0fVMiICIke25saXN0fVQiICIke25saXN0fUkiJwoKCSMgVHJhbnNmb3JtIHRo ZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCglzeW1maWxlb2JqPSRvdXRw dXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQKCWNhc2UgJGhvc3QgaW4KCSpj eWd3aW4qIHwgKm1pbmd3KiB8ICp3aW5kb3dzKiB8ICpjZWdjYyogKQoJICBpZiB0ZXN0IC1m ICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCgkgICAgY29tcGls ZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxF QCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKCSAg ICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAi cyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxl b2JqJSJgCgkgIGVsc2UKCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9j b21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCgkgICAgZmluYWxp emVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJ TEVAJSRzeW1maWxlb2JqJSJgCgkgIGZpCgkgIDs7CgkqKQoJICBjb21waWxlX2NvbW1hbmQ9 YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxl b2JqJSJgCgkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIg fCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAoJICA7OwoJZXNhYwoJOzsKICAg ICAgKikKCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciAnJG15X2Rsc3lt cyciCgk7OwogICAgICBlc2FjCiAgICBlbHNlCiAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0 IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCiAgICAgICMgbHRfcHJlbG9hZGVk X3N5bWJvbHMuICBUaGUgbGlua2VyIHdpbGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUK ICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgoKICAgICAgIyBOdWxsaWZ5IHRoZSBzeW1i b2wgZmlsZS4KICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFu ZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCiAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRF Q0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCiAgICBm aQp9CgojIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCiMgVGhpcyBwcmVkaWNhdGUg cmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgojIEFSRyBpcyBhIEdOVS9iaW51 dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucwojIHdpdGggbm9uemVybyBzdGF0 dXMgKEZBTFNFKSBvdGhlcndpc2UuCmZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKewog ICRkZWJ1Z19jbWQKCiAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmls ZV9tc3lzX3RvX3czMgogIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVu Y190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwg JEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2Fk XWwqX2luYW1lKSQnYAogIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAi Cn0KCiMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRwojIFRoaXMgcHJlZGljYXRlIHJl dHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKIyBBUkcgaXMgYW4gTVMtc3R5bGUg aW1wb3J0IGxpYnJhcnkuIFJldHVybnMKIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkg b3RoZXJ3aXNlLgpmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKewogICRkZWJ1Z19jbWQK CiAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3cz MgogIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmls ZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExf SU1QT1JUX0RFU0NSSVBUT1InYAogIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGli X3RtcCIKfQoKIyBmdW5jX3dpbjMyX2xpYmlkIGFyZwojIHJldHVybiB0aGUgbGlicmFyeSB0 eXBlIG9mIGZpbGUgJ2FyZycKIwojIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90 aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBp biBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4g JGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCiMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxz byBkZWFsIHdpdGggNjQgYml0IGJpbmFyaWVzLgpmdW5jX3dpbjMyX2xpYmlkICgpCnsKICAk ZGVidWdfY21kCgogIHdpbjMyX2xpYmlkX3R5cGU9dW5rbm93bgogIHdpbjMyX2ZpbGVyZXM9 YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCiAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgogICph clwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAogICAg d2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgogICAgOzsKICAqYXJcIGFy Y2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCiAgICAjIEtlZXAgdGhl IGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lD X01FVEhPRC4KICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+ L2Rldi9udWxsIHwKICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFy Y2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjR8cGUtYWFyY2g2NCkn ID4vZGV2L251bGw7IHRoZW4KICAgICAgY2FzZSAkbm1faW50ZXJmYWNlIGluCiAgICAgICJN UyBkdW1wYmluIikKCWlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIHx8CgkgICBm dW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIKCXRoZW4KCSAgd2luMzJfbm1yZXM9aW1w b3J0CgllbHNlCgkgIHdpbjMyX25tcmVzPQoJZmkKCTs7CiAgICAgICopCglmdW5jX3RvX3Rv b2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCgl3aW4zMl9ubXJl cz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIg fAoJICAkU0VEIC1uIC1lICcKCSAgICAxLDEwMHsKCQkvIEkgL3sKCQkgICAgc3wuKnxpbXBv cnR8CgkJICAgIHAKCQkgICAgcQoJCX0KCSAgICB9J2AKCTs7CiAgICAgIGVzYWMKICAgICAg Y2FzZSAkd2luMzJfbm1yZXMgaW4KICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9 Ing4NiBhcmNoaXZlIGltcG9ydCI7OwogICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlw ZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CiAgICAgIGVzYWMKICAgIGZpCiAgICA7OwogICpE TEwqKQogICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKICAgIDs7CiAgKmV4ZWN1dGFi bGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCiAgICBj YXNlICR3aW4zMl9maWxlcmVzIGluCiAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCiAg ICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCiAgICAgIDs7CiAgICBlc2FjCiAgICA7 OwogIGVzYWMKICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCn0KCiMgZnVuY19jeWdtaW5n X2RsbF9mb3JfaW1wbGliIEFSRwojCiMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8g ZXh0cmFjdCB0aGUKIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVj aWZpZWQKIyBpbXBvcnQgbGlicmFyeSBBUkcuCiMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUg bGlidG9vbCB2YXJpYWJsZQojICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAojIFJl c3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCiMgICAgJHNoYXJlZGxpYl9mcm9t X2xpbmtsaWJfcmVzdWx0CmZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQp7CiAgJGRl YnVnX2NtZAoKICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1p ZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAp9CgojIGZ1bmNfY3lnbWluZ19kbGxf Zm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcwojCiMgVGhl IGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYQojIHBsYXRm b3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCiMgRExM IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUu CiMKIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBl bmRpbmcKIyBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUg aW1wbGliLgojCiMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGgg dGhlCiMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgpmdW5jX2N5Z21pbmdfZGxsX2Zvcl9p bXBsaWJfZmFsbGJhY2tfY29yZSAoKQp7CiAgJGRlYnVnX2NtZAoKICBtYXRjaF9saXRlcmFs PWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAogICRPQkpE VU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAogICAgJFNFRCAnL15D b250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzovewogICAgICAjIFBsYWNl IG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9u CiAgICAgIHMvLiovPT09PU1BUks9PT09LwogICAgICBwCiAgICAgIGQKICAgIH0KICAgICMg VGhlc2UgbGluZXMgY2FuIHNvbWV0aW1lcyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJz LCBidXQKICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCiAgICAvOlsJIF0qZmlsZSBm b3JtYXQgcGVbaV1ceywxXH0tL2QKICAgIC9eSW4gYXJjaGl2ZSBbXjpdKjovZAogICAgIyBF bnN1cmUgbWFya2VyIGlzIHByaW50ZWQKICAgIC9ePT09PU1BUks9PT09L3AKICAgICMgUmVt b3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3MgdGhhbiA0MyBjaGFyYWN0ZXJzCiAgICAvXi5cezQz XH0vIWQKICAgICMgRnJvbSByZW1haW5pbmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFy YWN0ZXJzCiAgICBzL14uXHs0M1x9Ly8nIHwKICAgICRTRUQgLW4gJwogICAgICAjIEpvaW4g bWFya2VyIGFuZCBhbGwgbGluZXMgdW50aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBs aW5lCiAgICAgIC9ePT09PU1BUks9PT09LyBiIHBhcmEKICAgICAgSAogICAgICAkIGIgcGFy YQogICAgICBiCiAgICAgIDpwYXJhCiAgICAgIHgKICAgICAgcy9cbi8vZwogICAgICAjIFJl bW92ZSB0aGUgbWFya2VyCiAgICAgIHMvXj09PT1NQVJLPT09PS8vCiAgICAgICMgUmVtb3Zl IHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRlc3BhY2UKICAgICAgcy9bXC4gXHRdKiQvLwogICAg ICAjIFByaW50CiAgICAgIC8uL3AnIHwKICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUg ZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAogICAgIyBjb250ZW50cyBvZiB0 aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKICAgICMgYXJj aGl2ZSB0aGF0IHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQog ICAgIyBhbGwgdGhvc2UgdGhhdCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0 aGF0IGlzCiAgICAjIGEgJy4nICh0aGF0IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24g b2YgYW4gdW5wcmludGFibGUKICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBm b3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCiAgICAjIDB4MzAyZiBleHBvcnRzIC0t IGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQogICAgIyBiZWdp bnMgd2l0aCBhIGxpdGVyYWwgJy4nIG9yIGEgc2luZ2xlIGNoYXJhY3RlciBmb2xsb3dlZCBi eQogICAgIyBhICcuJy4KICAgICMKICAgICMgT2YgdGhvc2UgdGhhdCByZW1haW4sIHByaW50 IHRoZSBmaXJzdCBvbmUuCiAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJwp9CgojIGZ1 bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKIyBQbGF0Zm9ybS1zcGVj aWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQojIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lh dGVkIHdpdGggdGhlIHNwZWNpZmllZAojIGltcG9ydCBsaWJyYXJ5IEFSRy4KIwojIFRoaXMg ZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgZm9yIHVzZSB3aGVuICRETExUT09MCiMgZG9l cyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgojIEludm9rZWQg YnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKIyAgICAkc2hhcmVkbGliX2Zyb21f bGlua2xpYl9jbWQKIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQojICAg ICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdApmdW5jX2N5Z21pbmdfZGxsX2Zvcl9p bXBsaWJfZmFsbGJhY2sgKCkKewogICRkZWJ1Z19jbWQKCiAgaWYgZnVuY19jeWdtaW5nX2du dV9pbXBsaWJfcCAiJDEiOyB0aGVuCiAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CiAg ICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3Jf aW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ3JyAiJDEiYAogIGVsaWYgZnVuY19jeWdt aW5nX21zX2ltcGxpYl9wICIkMSI7IHRoZW4KICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBs aWJyYXJ5CiAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5n X2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAogIGVsc2UK ICAgICMgdW5rbm93bgogICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9CiAgZmkK fQoKCiMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgpmdW5jX2V4dHJhY3Rf YW5fYXJjaGl2ZSAoKQp7CiAgICAkZGVidWdfY21kCgogICAgZl9leF9hbl9hcl9kaXI9JDE7 IHNoaWZ0CiAgICBmX2V4X2FuX2FyX29sZGxpYj0kMQogICAgaWYgdGVzdCB5ZXMgPSAiJGxv Y2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiI7IHRoZW4KICAgICAgbG9ja2ZpbGU9JGZfZXhf YW5fYXJfb2xkbGliLmxvY2sKICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJv Z3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbwoJZnVuY19lY2hvICJXYWl0aW5n IGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKCXNsZWVwIDIKICAgICAgZG9uZQogICAg ZmkKICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBc IlwkZl9leF9hbl9hcl9vbGRsaWJcIikiIFwKCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2Nr ZmlsZSI7IGV4aXQgJHN0YXQnCiAgICBpZiB0ZXN0IHllcyA9ICIkbG9ja19vbGRfYXJjaGl2 ZV9leHRyYWN0aW9uIjsgdGhlbgogICAgICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2Nr ZmlsZSIKICAgIGZpCiAgICBpZiAoJEFSIHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0 IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgogICAgIDoKICAgIGVsc2UKICAg ICAgZnVuY19mYXRhbF9lcnJvciAib2JqZWN0IG5hbWUgY29uZmxpY3RzIGluIGFyY2hpdmU6 ICRmX2V4X2FuX2FyX2Rpci8kZl9leF9hbl9hcl9vbGRsaWIiCiAgICBmaQp9CgoKIyBmdW5j X2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KZnVuY19leHRyYWN0X2FyY2hp dmVzICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBteV9nZW50b3A9JDE7IHNoaWZ0CiAgICBt eV9vbGRsaWJzPSR7MSsiJEAifQogICAgbXlfb2xkb2Jqcz0KICAgIG15X3hsaWI9CiAgICBt eV94YWJzPQogICAgbXlfeGRpcj0KCiAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsg ZG8KICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgogICAgICBjYXNlICRteV94bGliIGlu CglbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9JG15X3hsaWIgOzsKCSopIG15 X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OwogICAgICBlc2FjCiAgICAgIGZ1bmNfYmFzZW5h bWUgIiRteV94bGliIgogICAgICBteV94bGliPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogICAg ICBteV94bGliX3U9JG15X3hsaWIKICAgICAgd2hpbGUgOjsgZG8KICAgICAgICBjYXNlICIg JGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCgkqIiAkbXlfeGxpYl91ICIqKQoJICBmdW5jX2Fy aXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQoJICBleHRyYWN0ZWRfc2VyaWFsPSRmdW5jX2Fy aXRoX3Jlc3VsdAoJICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7 OwoJKikgYnJlYWsgOzsKCWVzYWMKICAgICAgZG9uZQogICAgICBleHRyYWN0ZWRfYXJjaGl2 ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKICAgICAgbXlfeGRpcj0kbXlf Z2VudG9wLyRteV94bGliX3UKCiAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCgogICAg ICBjYXNlICRob3N0IGluCiAgICAgICotZGFyd2luKikKCWZ1bmNfdmVyYm9zZSAiRXh0cmFj dGluZyAkbXlfeGFicyIKCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0 IGEgZHJ5IHJ1bgoJJG9wdF9kcnlfcnVuIHx8IHsKCSAgZGFyd2luX29yaWdfZGlyPWBwd2Rg CgkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMK CSAgZGFyd2luX2N1cmRpcj1gcHdkYAoJICBmdW5jX2Jhc2VuYW1lICIkZGFyd2luX2FyY2hp dmUiCgkgIGRhcndpbl9iYXNlX2FyY2hpdmU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CgkgIGRh cndpbl9hcmNoZXM9YCRMSVBPIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxs IHwgJEdSRVAgQXJjaGl0ZWN0dXJlcyAyPi9kZXYvbnVsbCB8fCB0cnVlYAoJICBpZiB0ZXN0 IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAi JGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCgkgICAgZGFyd2luX2Fy Y2g9CgkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlw bGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKCSAgICBmb3IgZGFyd2luX2FyY2gg aW4gICRkYXJ3aW5fYXJjaGVzOyBkbwoJICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8k ZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2giCgkgICAgICAkTElQTyAtdGhpbiAk ZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRh cndpbl9hcmNoLyRkYXJ3aW5fYmFzZV9hcmNoaXZlIiAiJGRhcndpbl9hcmNoaXZlIgoJICAg ICAgY2QgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaCIKCSAg ICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiRkYXJ3aW5fYmFzZV9hcmNo aXZlIgoJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgoJICAgICAgJFJNICJ1bmZhdC0kJC8k ZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2gvJGRhcndpbl9iYXNlX2FyY2hpdmUi CgkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCiAgICAgICAgICAgICMjIE9rYXkgbm93IHdl J3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQoJ ICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8g LXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICRTRUQgLWUgIiRzZWRfYmFzZW5hbWUi IHwgc29ydCAtdWAKCSAgICBkYXJ3aW5fZmlsZT0KCSAgICBkYXJ3aW5fZmlsZXM9CgkgICAg Zm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCgkgICAgICBkYXJ3aW5f ZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8IHNvcnQg fCAkTkwyU1BgCgkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIg JGRhcndpbl9maWxlcwoJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CgkgICAgJFJNIC1y ZiB1bmZhdC0kJAoJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgoJICBlbHNlCgkgICAgY2Qg JGRhcndpbl9vcmlnX2RpcgoJICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRp ciIgIiRteV94YWJzIgoJICBmaSAjICRkYXJ3aW5fYXJjaGVzCgl9ICMgISRvcHRfZHJ5X3J1 bgoJOzsKICAgICAgKikKICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hk aXIiICIkbXlfeGFicyIKCTs7CiAgICAgIGVzYWMKICAgICAgbXlfb2xkb2Jqcz0iJG15X29s ZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1l IFwqLmxvIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCiAgICBkb25lCgogICAgZnVuY19leHRy YWN0X2FyY2hpdmVzX3Jlc3VsdD0kbXlfb2xkb2Jqcwp9CgoKIyBmdW5jX2VtaXRfd3JhcHBl ciBbYXJnPW5vXQojCiMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0 LgojIERvbid0IGRpcmVjdGx5IG9wZW4gYSBmaWxlIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8K IyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5n dy93aW5kb3dzCiMgd3JhcHBlciBleGVjdXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBm cm9tIHdpdGhpbgojIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51 bWJlciBvZiB2YXJpYWJsZXMKIyBzZXQgdGhlcmVpbi4KIwojIEFSRyBpcyB0aGUgdmFsdWUg dGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKIyB2YXJpYWJsZSB3 aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKIyB3aWxsIGFz c3VtZSB0aGF0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgaXQgaXMgc3RvcmVkIGlzCiMgdGhlICRv YmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy93aW5kb3dzLXNwZWNp ZmljCiMgYmVoYXZpb3IuCmZ1bmNfZW1pdF93cmFwcGVyICgpCnsKCWZ1bmNfZW1pdF93cmFw cGVyX2FyZzE9JHsxLW5vfQoKCSRFQ0hPICJcCiMhICRTSEVMTAoKIyAkb3V0cHV0IC0gdGVt cG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCiMgR2VuZXJh dGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCiMKIyBUaGUgJG91dHB1 dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxp YnRvb2wKIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCiMK IyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhl IGJ1aWxkIGRpcmVjdG9yeS4KIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3Jy ZWN0bHkuCgojIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVv dGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCiMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3Rp bGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCnNlZF9xdW90ZV9zdWJz dD0nJHNlZF9xdW90ZV9zdWJzdCcKCiMgQmUgQm91cm5lIGNvbXBhdGlibGUKaWYgdGVzdCAt biBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAy PiYxOyB0aGVuCiAgZW11bGF0ZSBzaAogIE5VTExDTUQ9OgogICMgWnNoIDMueCBhbmQgNC54 IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCiAgIyBp cyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICBhbGlh cyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCiAgc2V0b3B0IE5PX0dMT0JfU1VCU1QK ZWxzZQogIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAt byBwb3NpeDs7IGVzYWMKZmkKQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1 NjQKRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoKIyBUaGUgSFAt VVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBz dGRvdXQKIyBpZiBDRFBBVEggaXMgc2V0LgoodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+ JjEgJiYgdW5zZXQgQ0RQQVRICgpyZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwi CgojIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9u IG1vZGUuCmlmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNc IjsgdGhlbgogICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVz OgogIGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJwogIG5v dGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKZWxzZQogICMgV2hlbiB3ZSBhcmUg c291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5 IHNldC4KICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdp Y1wiOyB0aGVuCiAgICBmaWxlPVwiXCQwXCIiCgogICAgZnVuY19xdW90ZV9hcmcgcHJldHR5 ICIkRUNITyIKICAgIHFFQ0hPPSRmdW5jX3F1b3RlX2FyZ19yZXN1bHQKICAgICRFQ0hPICJc CgojIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVp bHRpbiBvciBwcmludGYuCmZ1bmNfZmFsbGJhY2tfZWNobyAoKQp7CiAgZXZhbCAnY2F0IDw8 X0xURUNIT19FT0YKXCQxCl9MVEVDSE9fRU9GJwp9CiAgICBFQ0hPPSRxRUNITwogIGZpCgoj IFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVj aWZpYyB0bwojIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdl ZW4gdGhlIHdyYXBwZXIKIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUv IHRoYXQgaXMgdXNlZCBvbmx5IG9uCiMgd2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxs IGJlZ2luIHdpdGggdGhlIHN0cmluZyAiLS1sdC0iCiMgKGFwcGxpY2F0aW9uIHByb2dyYW1z IGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgdGhhdCBtYXRjaAojIHRoaXMgcGF0dGVy bikuCiMKIyBUaGVyZSBhcmUgb25seSB0d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVi dWcgYW5kCiMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8g LS1sdC1oZWxwLgojCiMgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgcGFyc2luZyBmdW5j dGlvbiBzaG91bGQgYmUgdGhlCiMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIk QCIuCmx0X29wdGlvbl9kZWJ1Zz0KZnVuY19wYXJzZV9sdF9vcHRpb25zICgpCnsKICBsdF9z Y3JpcHRfYXJnMD1cJDAKICBzaGlmdAogIGZvciBsdF9vcHQKICBkbwogICAgY2FzZSBcIlwk bHRfb3B0XCIgaW4KICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CiAgICAt LWx0LWR1bXAtc2NyaXB0KQogICAgICAgIGx0X2R1bXBfRD1cYFwkRUNITyBcIlhcJGx0X3Nj cmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJS9bXi9dKiQlJSdcYAogICAg ICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBs dF9kdW1wX0Q9LgogICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9h cmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAogICAgICAgIGNhdCBc IlwkbHRfZHVtcF9EL1wkbHRfZHVtcF9GXCIKICAgICAgICBleGl0IDAKICAgICAgOzsKICAg IC0tbHQtKikKICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAn XCRsdF9vcHQnXCIgMT4mMgogICAgICAgIGV4aXQgMQogICAgICA7OwogICAgZXNhYwogIGRv bmUKCiAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgogIGlmIHRlc3Qg LW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCiAgICBlY2hvIFwiJG91dHB1dG5hbWU6 JG91dHB1dDpcJExJTkVOTzogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UpICRWRVJT SU9OXCIgMT4mMgogIGZpCn0KCiMgVXNlZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMg YXJndW1lbnRzIHRvIHN0ZG91dAojIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxp dHkgb2YgdGhlIGNhbGxlcikKZnVuY19sdF9kdW1wX2FyZ3MgKCkKewogIGx0X2R1bXBfYXJn c19OPTE7CiAgZm9yIGx0X2FyZwogIGRvCiAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0 cHV0OlwkTElORU5POiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCiAg ICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAogIGRvbmUK fQoKIyBDb3JlIGZ1bmN0aW9uIGZvciBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlv bgpmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCnsKIgogIGNhc2UgJGhvc3QgaW4KICAjIEJh Y2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKICAqLSot bWluZ3cqIHwgKi0qLXdpbmRvd3MqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKICAgICRFQ0hP ICJcCiAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCiAgICAg ICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndlswXTog XCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKICAgICAgICBmdW5jX2x0X2R1bXBfYXJn cyBcJHsxK1wiXCRAXCJ9IDE+JjIKICAgICAgZmkKICAgICAgZXhlYyBcIlwkcHJvZ2Rpclxc XFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CiIKICAgIDs7CgogICopCiAgICAkRUNITyAi XAogICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgogICAgICAg IFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbMF06IFwk cHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCiAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7 MStcIlwkQFwifSAxPiYyCiAgICAgIGZpCiAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9n cmFtXCIgXCR7MStcIlwkQFwifQoiCiAgICA7OwogIGVzYWMKICAkRUNITyAiXAogICAgICBc JEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCiAgICAgIGV4 aXQgMQp9CgojIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJn ZXQgYXBwbGljYXRpb24KIyBTdHJpcHMgb3B0aW9ucyBpbiB0aGUgLS1sdC0qIG5hbWVzcGFj ZSBmcm9tIFwkQCBhbmQKIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUg cmVtYWluaW5nIGFyZ3VtZW50cy4KZnVuY19leGVjX3Byb2dyYW0gKCkKewogIGNhc2UgXCIg XCQqIFwiIGluCiAgKlxcIC0tbHQtKikKICAgIGZvciBsdF93cl9hcmcKICAgIGRvCiAgICAg IGNhc2UgXCRsdF93cl9hcmcgaW4KICAgICAgLS1sdC0qKSA7OwogICAgICAqKSBzZXQgeCBc IlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OwogICAgICBlc2FjCiAgICAgIHNoaWZ0 CiAgICBkb25lIDs7CiAgZXNhYwogIGZ1bmNfZXhlY19wcm9ncmFtX2NvcmUgXCR7MStcIlwk QFwifQp9CgogICMgUGFyc2Ugb3B0aW9ucwogIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwk MFwiIFwkezErXCJcJEBcIn0KCiAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNj cmlwdCBsaXZlcyBpbi4KICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdz JS9bXi9dKiQlJSdcYAogIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0 aGlzZGlyPS4KCiAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRo ZSByZWFsIHRoaXNkaXIuCiAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJFNFRCAtbiAn cy8uKi0+IC8vcCdcYAogIHdoaWxlIHRlc3QgLW4gXCJcJGZpbGVcIjsgZG8KICAgIGRlc3Rk aXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qXCQlJSdcYAoKICAgICMg SWYgdGhlcmUgd2FzIGEgZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdGhpc2Rp ci4KICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KICAg ICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCiAgICAgIFtcXFxcL10qIHwgW0EtWmEtel06W1xc XFwvXSopIHRoaXNkaXI9XCJcJGRlc3RkaXJcIiA7OwogICAgICAqKSB0aGlzZGlyPVwiXCR0 aGlzZGlyL1wkZGVzdGRpclwiIDs7CiAgICAgIGVzYWMKICAgIGZpCgogICAgZmlsZT1cYFwk RUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyVeLiovJSUnXGAKICAgIGZpbGU9XGBscyAtbGQg XCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCiAgZG9uZQoK ICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0IG9uIGN5Z3dpbi9taW5ndy93aW5kb3dzIHdoZW4g ZW1iZWRkZWQgaW50bwogICMgdGhlIGN3cmFwcGVyLgogIFdSQVBQRVJfU0NSSVBUX0JFTE9O R1NfSU5fT0JKRElSPSRmdW5jX2VtaXRfd3JhcHBlcl9hcmcxCiAgaWYgdGVzdCBcIlwkV1JB UFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVJcIiA9IFwieWVzXCI7IHRoZW4KICAgICMg c3BlY2lhbCBjYXNlIGZvciAnLicKICAgIGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwi OyB0aGVuCiAgICAgIHRoaXNkaXI9XGBwd2RcYAogICAgZmkKICAgICMgcmVtb3ZlIC5saWJz IGZyb20gdGhpc2RpcgogICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCiAgICAqW1xcXFwvXSRv YmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxc L11bXlxcXFwvXSokJSUnXGAgOzsKICAgICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OwogICAg ZXNhYwogIGZpCgogICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUu CiAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAogIHRlc3QgLW4gXCJcJGFi c2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCiIKCglpZiB0ZXN0IHllcyA9ICIkZmFz dF9pbnN0YWxsIjsgdGhlbgoJICAkRUNITyAiXAogIHByb2dyYW09bHQtJyRvdXRwdXRuYW1l JyRleGVleHQKICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgoKICBpZiB0ZXN0ICEg LWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKICAgICB7IGZpbGU9XGBscyAtMWR0IFwi XCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rl di9udWxsIHwgJFNFRCAxcVxgOyBcXAogICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhc JHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KCiAgICBmaWxlPVwiXCRcJC1cJHByb2dy YW1cIgoKICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCiAgICAgICRNS0RJ UiBcIlwkcHJvZ2RpclwiCiAgICBlbHNlCiAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVc IgogICAgZmkiCgoJICAkRUNITyAiXAoKICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVj ZXNzYXJ5CiAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCiAgICAg IGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYx XGA7IHRoZW4gOgogICAgICBlbHNlCglcJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1 dFwiID4mMgoJJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCglleGl0IDEKICAgICAgZmkKICAg IGZpCgogICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3Jh bVwiIDI+L2Rldi9udWxsIHx8CiAgICB7ICRSTSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsK ICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwi OyB9CiAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKICBmaSIKCWVsc2UKCSAgJEVDSE8g IlwKICBwcm9ncmFtPSckb3V0cHV0bmFtZScKICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpk aXJcIgoiCglmaQoKCSRFQ0hPICJcCgogIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9n cmFtXCI7IHRoZW4iCgoJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0 by4KCSMKCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhp cyBiZWZvcmUgcHJlcGVuZGluZwoJIyB0byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93 cywgYm90aCBhcmUgUEFUSCBhbmQgdW5pbnN0YWxsZWQKCSMgbGlicmFyaWVzIG11c3QgY29t ZSBmaXJzdC4KCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgoJICAkRUNITyAi XAogICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVj dXRhYmxlIFBBVEgKICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICiIKCWZpCgoJIyBF eHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCglpZiB0ZXN0IHllcyA9 ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRo X3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCgkgICRFQ0hPICJcCiAgICAj IEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgogICAgJHNobGli cGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgoKICAgICMgU29tZSBz eXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3Zh cgogICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4g QmVPUyBSNCBzZWQKICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRo X3ZhclwiIHwgJFNFRCAncy86OipcJC8vJ1xgCgogICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFy CiIKCWZpCgoJJEVDSE8gIlwKICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdp Y1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFt IHdpdGggb3VyIGFyZ3VtZW50cy4KICAgICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwk QFwifQogICAgZmkKICBlbHNlCiAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCiAg ICBcJEVDSE8gXCJcJDA6IGVycm9yOiAnXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3Qg ZXhpc3RcIiAxPiYyCiAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBl ciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0Ug ZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCiAgICBleGl0IDEK ICBmaQpmaVwKIgp9CgoKIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCiMgZW1pdCB0aGUg c291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAojIE11c3Qg T05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQojIGl0 IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCmZ1bmNfZW1p dF9jd3JhcHBlcmV4ZV9zcmMgKCkKewoJY2F0IDw8RU9GCgovKiAkY3dyYXBwZXJzb3VyY2Ug LSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1l CiAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgoKICAg VGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwg YWxsIHRoZSBsaWJ0b29sCiAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGlu c3RhbGxlZC4KCiAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBt b3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KICAgSWYgaXQgaXMsIGl0IHdpbGwg bm90IG9wZXJhdGUgY29ycmVjdGx5LgoqLwpFT0YKCSAgICBjYXQgPDwiRU9GIgojaWZkZWYg X01TQ19WRVIKIyBkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKI2VuZGlmCiNp bmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpZiBkZWZpbmVkIF9XSU4z MiAmJiAhZGVmaW5lZCBfX0dOVUNfXwojIGluY2x1ZGUgPGRpcmVjdC5oPgojIGluY2x1ZGUg PHByb2Nlc3MuaD4KIyBpbmNsdWRlIDxpby5oPgojZWxzZQojIGluY2x1ZGUgPHVuaXN0ZC5o PgojIGluY2x1ZGUgPHN0ZGludC5oPgojIGlmZGVmIF9fQ1lHV0lOX18KIyAgaW5jbHVkZSA8 aW8uaD4KIyBlbmRpZgojZW5kaWYKI2luY2x1ZGUgPG1hbGxvYy5oPgojaW5jbHVkZSA8c3Rk YXJnLmg+CiNpbmNsdWRlIDxhc3NlcnQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVk ZSA8Y3R5cGUuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxmY250bC5oPgojaW5j bHVkZSA8c3lzL3N0YXQuaD4KCiNkZWZpbmUgU1RSRVEoczEsIHMyKSAoc3RyY21wICgoczEp LCAoczIpKSA9PSAwKQoKLyogZGVjbGFyYXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAq LwojaWYgZGVmaW5lZCBfX01JTkdXMzJfXwojIGlmZGVmIF9fU1RSSUNUX0FOU0lfXwpfQ1JU SU1QIGludCBfX2NkZWNsIF9wdXRlbnYgKGNvbnN0IGNoYXIgKik7CiMgZW5kaWYKI2VsaWYg ZGVmaW5lZCBfX0NZR1dJTl9fCiMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCmNoYXIgKnJlYWxw YXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CmludCBwdXRlbnYgKGNoYXIgKik7CmludCBz ZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwojIGVuZGlmCi8qICNl bGlmIGRlZmluZWQgb3RoZXJfcGxhdGZvcm0gfHwgZGVmaW5lZCAuLi4gKi8KI2VuZGlmCgov KiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBleGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3Mg Ki8KI2lmIGRlZmluZWQgX01TQ19WRVIKIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQojIGRl ZmluZSBzdGF0ICAgIF9zdGF0CiMgZGVmaW5lIGNobW9kICAgX2NobW9kCiMgZGVmaW5lIGdl dGN3ZCAgX2dldGN3ZAojIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKIyBkZWZpbmUgU19JWFVT UiBfU19JRVhFQwojZWxpZiBkZWZpbmVkIF9fTUlOR1czMl9fCiMgZGVmaW5lIHNldG1vZGUg X3NldG1vZGUKIyBkZWZpbmUgc3RhdCAgICBfc3RhdAojIGRlZmluZSBjaG1vZCAgIF9jaG1v ZAojIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CiNl bGlmIGRlZmluZWQgX19DWUdXSU5fXwojIGRlZmluZSBIQVZFX1NFVEVOVgojIGRlZmluZSBG T1BFTl9XQiAid2IiCi8qICNlbGlmIGRlZmluZWQgb3RoZXIgcGxhdGZvcm1zIC4uLiAqLwoj ZW5kaWYKCiNpZiBkZWZpbmVkIFBBVEhfTUFYCiMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9N QVgKI2VsaWYgZGVmaW5lZCBNQVhQQVRITEVOCiMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFU SExFTgojZWxzZQojIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKI2VuZGlmCgojaWZuZGVmIFNf SVhPVEgKIyBkZWZpbmUgU19JWE9USCAwCiNlbmRpZgojaWZuZGVmIFNfSVhHUlAKIyBkZWZp bmUgU19JWEdSUCAwCiNlbmRpZgoKLyogcGF0aCBoYW5kbGluZyBwb3J0YWJpbGl0eSBtYWNy b3MgKi8KI2lmbmRlZiBESVJfU0VQQVJBVE9SCiMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8n CiMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JwojZW5kaWYKCiNpZiBkZWZpbmVkIF9XSU4z MiB8fCBkZWZpbmVkIF9fTVNET1NfXyB8fCBkZWZpbmVkIF9fREpHUFBfXyB8fCBcCiAgZGVm aW5lZCBfX09TMl9fCiMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCiMgZGVm aW5lIEZPUEVOX1dCICJ3YiIKIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCiMgIGRlZmluZSBE SVJfU0VQQVJBVE9SXzIgJ1xcJwojIGVuZGlmCiMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIK IyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCiMgZW5kaWYKI2VuZGlmCgojaWZuZGVm IERJUl9TRVBBUkFUT1JfMgojIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9 PSBESVJfU0VQQVJBVE9SKQojZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KIyBkZWZpbmUg SVNfRElSX1NFUEFSQVRPUihjaCkgXAoJKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgo Y2gpID09IERJUl9TRVBBUkFUT1JfMikpCiNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8K CiNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgojIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihj aCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCiNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIg Ki8KIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJB VE9SXzIpCiNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCgojaWZuZGVmIEZPUEVOX1dC CiMgZGVmaW5lIEZPUEVOX1dCICJ3IgojZW5kaWYKI2lmbmRlZiBfT19CSU5BUlkKIyBkZWZp bmUgX09fQklOQVJZIDAKI2VuZGlmCgojZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAg ICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCiNkZWZpbmUgWEZS RUUoc3RhbGUpIGRvIHsgXAogIGlmIChzdGFsZSkgeyBmcmVlIChzdGFsZSk7IHN0YWxlID0g MDsgfSBcCn0gd2hpbGUgKDApCgojaWYgZGVmaW5lZCBMVF9ERUJVR1dSQVBQRVIKc3RhdGlj IGludCBsdF9kZWJ1ZyA9IDE7CiNlbHNlCnN0YXRpYyBpbnQgbHRfZGVidWcgPSAwOwojZW5k aWYKCmNvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBp biBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KCnZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOwpj aGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOwpjb25zdCBjaGFyICpiYXNlX25h bWUgKGNvbnN0IGNoYXIgKm5hbWUpOwpjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNo YXIgKndyYXBwZXIpOwpjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNw ZWMpOwppbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKaW50IGNoZWNr X2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOwpjaGFyICpzdHJlbmR6YXAgKGNoYXIg KnN0ciwgY29uc3QgY2hhciAqcGF0KTsKdm9pZCBsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hh ciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKdm9pZCBsdF9mYXRh bCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4u Lik7CnN0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKc3RhdGlj IGNvbnN0IGNoYXIgKm5vbmVtcHR5IChjb25zdCBjaGFyICpzKTsKdm9pZCBsdF9zZXRlbnYg KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKY2hhciAqbHRfZXh0ZW5k X3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9f ZW5kKTsKdm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKnZhbHVlKTsKdm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5h bWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKY2hhciAqKnByZXBhcmVfc3Bhd24gKGNoYXIgKiph cmd2KTsKdm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7CkVPRgoKCSAgICBjYXQgPDxF T0YKI2lmIF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1Jf XyA8IDUpCiMgZGVmaW5lIGV4dGVybmFsbHlfdmlzaWJsZSB2b2xhdGlsZQojZWxzZQojIGRl ZmluZSBleHRlcm5hbGx5X3Zpc2libGUgX19hdHRyaWJ1dGVfXygoZXh0ZXJuYWxseV92aXNp YmxlKSkgdm9sYXRpbGUKI2VuZGlmCmV4dGVybmFsbHlfdmlzaWJsZSBjb25zdCBjaGFyICog TUFHSUNfRVhFID0gIiRtYWdpY19leGUiOwpjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFN RSA9ICIkc2hsaWJwYXRoX3ZhciI7CkVPRgoKCSAgICBpZiB0ZXN0IHllcyA9ICIkc2hsaWJw YXRoX292ZXJyaWRlc19ydW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYg dGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCiAgICAgICAgICAgICAgZnVuY190b19ob3N0 X3BhdGggIiR0ZW1wX3JwYXRoIgoJICAgICAgY2F0IDw8RU9GCmNvbnN0IGNoYXIgKiBMSUJf UEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOwpFT0YKCSAgICBl bHNlCgkgICAgICBjYXQgPDwiRU9GIgpjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9 ICIiOwpFT0YKCSAgICBmaQoKCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRo ZW4KICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgoJ ICAgICAgY2F0IDw8RU9GCmNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgi Owpjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhf cmVzdWx0IjsKRU9GCgkgICAgZWxzZQoJICAgICAgY2F0IDw8IkVPRiIKY29uc3QgY2hhciAq IEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsKY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAg PSAiIjsKRU9GCgkgICAgZmkKCgkgICAgaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCI7 IHRoZW4KCSAgICAgIGNhdCA8PEVPRgpjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFN RSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLwpFT0YKCSAg ICBlbHNlCgkgICAgICBjYXQgPDxFT0YKY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05B TUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KRU9GCgkgICAg ZmkKCgoJICAgIGNhdCA8PCJFT0YiCgojZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklY ICAgICAgICAgIi0tbHQtIgoKc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25f cHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CnN0YXRpYyBjb25zdCBjaGFyICpk dW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNj cmlwdCI7CnN0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19vcHQgICAgICAgICAgICA9IExUV1JB UFBFUl9PUFRJT05fUFJFRklYICJkZWJ1ZyI7CgppbnQKbWFpbiAoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKewogIGNoYXIgKipuZXdhcmd6OwogIGludCAgbmV3YXJnYzsKICBjaGFyICp0 bXBfcGF0aHNwZWM7CiAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX3BhdGg7CiAgY2hhciAqYWN0 dWFsX2N3cmFwcGVyX25hbWU7CiAgY2hhciAqdGFyZ2V0X25hbWU7CiAgY2hhciAqbHRfYXJn dl96ZXJvOwogIGludCBydmFsID0gMTI3OwoKICBpbnQgaTsKCiAgcHJvZ3JhbV9uYW1lID0g KGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CiAgbmV3YXJneiA9IFhN QUxMT0MgKGNoYXIgKiwgKHNpemVfdCkgYXJnYyArIDEpOwoKICAvKiB2ZXJ5IHNpbXBsZSBh cmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAogICAqIGFsc28sIGNv cHkgYWxsIG5vbiBjd3JhcHBlciBvcHRpb25zIHRvIG5ld2FyZ3osIGV4Y2VwdAogICAqIGFy Z3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKICAgKi8KICBuZXdhcmdjPTA7 CiAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKICAgIHsKICAgICAgaWYgKFNUUkVRIChh cmd2W2ldLCBkdW1wc2NyaXB0X29wdCkpCgl7CkVPRgoJICAgIGNhc2UgJGhvc3QgaW4KCSAg ICAgICptaW5ndyogfCAqd2luZG93cyogfCAqY3lnd2luKiApCgkJIyBtYWtlIHN0ZG91dCB1 c2UgInVuaXgiIGxpbmUgZW5kaW5ncwoJCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09f QklOQVJZKTsiCgkJOzsKCSAgICAgIGVzYWMKCgkgICAgY2F0IDw8IkVPRiIKCSAgbHRfZHVt cF9zY3JpcHQgKHN0ZG91dCk7CgkgIHJldHVybiAwOwoJfQogICAgICBpZiAoU1RSRVEgKGFy Z3ZbaV0sIGRlYnVnX29wdCkpCgl7CiAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CiAgICAgICAg ICBjb250aW51ZTsKCX0KICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0 aW9uX3ByZWZpeCkpCiAgICAgICAgewogICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUg aXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAogICAgICAgICAg ICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFi b3V0IGFuZAogICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChp bmNsdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCiAgICAgICAgICAgICByZXBvcnQgYW4gZXJy b3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCiAgICAgICAg ICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJf T1BUSU9OX1BSRUZJWAogICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBh bnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKICAgICAgICAgICAgIG5lZWQg dG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlv bgogICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCiAgICAg ICAgICAgKi8KICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCgkJICAg ICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9uOiAnJXMnIiwKICAgICAgICAgICAgICAgICAgICBs dHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CiAgICAgICAgfQogICAgICAvKiBv dGhlcndpc2UgLi4uICovCiAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFy Z3ZbaV0pOwogICAgfQogIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CgpFT0YKCSAgICBj YXQgPDxFT0YKICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJy b3IgZGVidWcgbWVzc2FnZSAqLwogIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5F X18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSkgJFZFUlNJT05cbiIpOwpFT0YK CSAgICBjYXQgPDwiRU9GIgogIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18s ICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOwogIGx0X2RlYnVncHJpbnRmIChf X0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3Jh bV9uYW1lKTsKCiAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsK ICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCiAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9f TElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOwogIGx0X2RlYnVncHJpbnRm IChfX0ZJTEVfXywgX19MSU5FX18sCiAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQg ZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAoJCSAgdG1wX3BhdGhzcGVj KTsKCiAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhz cGVjKTsKICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAogICAgICAgICAg ICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVz XG4iLAoJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOwogIFhGUkVFICh0bXBfcGF0aHNwZWMp OwoKICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFs X2N3cmFwcGVyX3BhdGgpKTsKICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBh Y3R1YWxfY3dyYXBwZXJfbmFtZSk7CgogIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICov CiAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKICB0bXBfcGF0 aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAx KTsKICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOwogIGFjdHVhbF9jd3JhcHBlcl9u YW1lID0gdG1wX3BhdGhzcGVjOwogIHRtcF9wYXRoc3BlYyA9IDA7CgogIC8qIHRhcmdldF9u YW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdo dCBoYXZlIGx0LSBwcmVmaXggKi8KICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFt ZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOwogIHN0cmVuZHphcCAodGFyZ2V0X25hbWUsICIu ZXhlIik7CiAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIu ZXhlIiwgMSk7CiAgWEZSRUUgKHRhcmdldF9uYW1lKTsKICB0YXJnZXRfbmFtZSA9IHRtcF9w YXRoc3BlYzsKICB0bXBfcGF0aHNwZWMgPSAwOwoKICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxF X18sIF9fTElORV9fLAoJCSAgIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwK CQkgIHRhcmdldF9uYW1lKTsKRU9GCgoJICAgIGNhdCA8PEVPRgogIG5ld2FyZ3pbMF0gPQog ICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKCQkg ICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25h bWUpICsgMSkpOwogIHN0cmNweSAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgp OwogIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKICBzdHJjYXQgKG5ld2FyZ3pb MF0sICIvIik7CkVPRgoKCSAgICBjYXQgPDwiRU9GIgogIC8qIHN0b3AgaGVyZSwgYW5kIGNv cHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR3aWNlICovCiAgdG1wX3BhdGhzcGVj ID0geHN0cmR1cCAobmV3YXJnelswXSk7CgogIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJl Zml4IGhlcmUsIHNvIHVzZSBhY3R1YWxfY3dyYXBwZXJfbmFtZSAqLwogIHN0cmNhdCAobmV3 YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOwoKICAvKiBETyB3YW50IHRoZSBsdC0g cHJlZml4IGhlcmUgaWYgaXQgZXhpc3RzLCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KICBsdF9h cmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAx KTsKICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKICB0bXBfcGF0aHNwZWMgPSBOVUxMOwpFT0YK CgkgICAgY2FzZSAkaG9zdF9vcyBpbgoJICAgICAgbWluZ3cqIHwgd2luZG93cyopCgkgICAg Y2F0IDw8IkVPRiIKICB7CiAgICBjaGFyKiBwOwogICAgd2hpbGUgKChwID0gc3RyY2hyIChu ZXdhcmd6WzBdLCAnXFwnKSkgIT0gTlVMTCkKICAgICAgewoJKnAgPSAnLyc7CiAgICAgIH0K ICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkK ICAgICAgewoJKnAgPSAnLyc7CiAgICAgIH0KICB9CkVPRgoJICAgIDs7CgkgICAgZXNhYwoK CSAgICBjYXQgPDwiRU9GIgogIFhGUkVFICh0YXJnZXRfbmFtZSk7CiAgWEZSRUUgKGFjdHVh bF9jd3JhcHBlcl9wYXRoKTsKICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOwoKICBs dF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KICBsdF9zZXRl bnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCiAgLyogVXBkYXRlIHRo ZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVz dAogICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElC X1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQogICAgIGJlY2F1c2Ugb24gV2luZG93cywgYm90 aCAqX1ZBUk5BTUVzIGFyZSBQQVRIIGJ1dCB1bmluc3RhbGxlZAogICAgIGxpYnJhcmllcyBt dXN0IGNvbWUgZmlyc3QuICovCiAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJO QU1FLCBFWEVfUEFUSF9WQUxVRSk7CiAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9W QVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CgogIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywg X19MSU5FX18sICIobWFpbikgbHRfYXJndl96ZXJvOiAlc1xuIiwKCQkgIG5vbm51bGwgKGx0 X2FyZ3ZfemVybykpOwogIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCiAgICB7CiAg ICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJn elslZF06ICVzXG4iLAoJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKICAgIH0K CkVPRgoKCSAgICBjYXNlICRob3N0X29zIGluCgkgICAgICBtaW5ndyogfCB3aW5kb3dzKikK CQljYXQgPDwiRU9GIgogIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5n dyBhcyBleHBlY3RlZCBvbiB1bml4ICovCiAgbmV3YXJneiA9IHByZXBhcmVfc3Bhd24gKG5l d2FyZ3opOwogIHJ2YWwgPSAoaW50KSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8s IChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CiAgaWYgKHJ2YWwgPT0gLTEpCiAg ICB7CiAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCiAgICAgIGx0X2RlYnVn cHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCgkJICAgICAgIihtYWluKSBmYWlsZWQgdG8g bGF1bmNoIHRhcmdldCBcIiVzXCI6ICVzXG4iLAoJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9u bnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOwogICAgICByZXR1cm4gMTI3OwogICAgfQogIHJl dHVybiBydmFsOwpFT0YKCQk7OwoJICAgICAgKikKCQljYXQgPDwiRU9GIgogIGV4ZWN2IChs dF9hcmd2X3plcm8sIG5ld2FyZ3opOwogIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZv aWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCkVPRgoJCTs7CgkgICAgZXNhYwoKCSAg ICBjYXQgPDwiRU9GIgp9Cgp2b2lkICoKeG1hbGxvYyAoc2l6ZV90IG51bSkKewogIHZvaWQg KnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CiAgaWYgKCFwKQogICAgbHRfZmF0YWwgKF9f RklMRV9fLCBfX0xJTkVfXywgIm1lbW9yeSBleGhhdXN0ZWQiKTsKCiAgcmV0dXJuIHA7Cn0K CmNoYXIgKgp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCnsKICByZXR1cm4gc3RyaW5n ID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKCQkJ ICBzdHJpbmcpIDogTlVMTDsKfQoKY29uc3QgY2hhciAqCmJhc2VfbmFtZSAoY29uc3QgY2hh ciAqbmFtZSkKewogIGNvbnN0IGNoYXIgKmJhc2U7CgojaWYgZGVmaW5lZCBIQVZFX0RPU19C QVNFRF9GSUxFX1NZU1RFTQogIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9T IHBhdGhuYW1lcy4gKi8KICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0p ICYmIG5hbWVbMV0gPT0gJzonKQogICAgbmFtZSArPSAyOwojZW5kaWYKCiAgZm9yIChiYXNl ID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFt ZSkpCiAgICAgIGJhc2UgPSBuYW1lICsgMTsKICByZXR1cm4gYmFzZTsKfQoKaW50CmNoZWNr X2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCnsKICBzdHJ1Y3Qgc3RhdCBzdDsKCiAg bHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihjaGVja19leGVjdXRhYmxl KTogJXNcbiIsCiAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CiAgaWYgKCgh cGF0aCkgfHwgKCEqcGF0aCkpCiAgICByZXR1cm4gMDsKCiAgaWYgKChzdGF0IChwYXRoLCAm c3QpID49IDApCiAgICAgICYmIChzdC5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwg U19JWE9USCkpKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmludApt YWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCnsKICBpbnQgcnZhbCA9IDA7CiAg c3RydWN0IHN0YXQgc3Q7CgogIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18s ICIobWFrZV9leGVjdXRhYmxlKTogJXNcbiIsCiAgICAgICAgICAgICAgICAgIG5vbmVtcHR5 IChwYXRoKSk7CiAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCiAgICByZXR1cm4gMDsKCiAg aWYgKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKICAgIHsKICAgICAgcnZhbCA9IGNobW9kIChw YXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKICAgIH0K ICByZXR1cm4gcnZhbDsKfQoKLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhl IHdyYXBwZXIuICBSZXR1cm5zCiAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBp ZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2 ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtLgoqLwpjaGFyICoKZmluZF9leGVj dXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQp7CiAgaW50IGhhc19zbGFzaCA9IDA7CiAg Y29uc3QgY2hhciAqcDsKICBjb25zdCBjaGFyICpwX25leHQ7CiAgLyogc3RhdGljIGJ1ZmZl ciBmb3IgZ2V0Y3dkICovCiAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOwogIHNpemVfdCB0 bXBfbGVuOwogIGNoYXIgKmNvbmNhdF9uYW1lOwoKICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxF X18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAogICAgICAgICAgICAg ICAgICBub25lbXB0eSAod3JhcHBlcikpOwoKICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwg KCp3cmFwcGVyID09ICdcMCcpKQogICAgcmV0dXJuIE5VTEw7CgogIC8qIEFic29sdXRlIHBh dGg/ICovCiNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCiAgaWYgKGlz YWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6 JykKICAgIHsKICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKICAgICAg aWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKCXJldHVybiBjb25jYXRfbmFt ZTsKICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKICAgIH0KICBlbHNlCiAgICB7CiNlbmRp ZgogICAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAod3JhcHBlclswXSkpCgl7CgkgIGNvbmNh dF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CgkgIGlmIChjaGVja19leGVjdXRhYmxlIChj b25jYXRfbmFtZSkpCgkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOwoJICBYRlJFRSAoY29uY2F0 X25hbWUpOwoJfQojaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQogICAg fQojZW5kaWYKCiAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKICAgIGlmICgqcCA9PSAn LycpCiAgICAgIHsKCWhhc19zbGFzaCA9IDE7CglicmVhazsKICAgICAgfQogIGlmICghaGFz X3NsYXNoKQogICAgewogICAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLwogICAg ICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOwogICAgICBpZiAocGF0aCAh PSBOVUxMKQoJewoJICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKCSAgICB7Cgkg ICAgICBjb25zdCBjaGFyICpxOwoJICAgICAgc2l6ZV90IHBfbGVuOwoJICAgICAgZm9yIChx ID0gcDsgKnE7IHErKykKCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKCQkgIGJyZWFr OwoJICAgICAgcF9sZW4gPSAoc2l6ZV90KSAocSAtIHApOwoJICAgICAgcF9uZXh0ID0gKCpx ID09ICdcMCcgPyBxIDogcSArIDEpOwoJICAgICAgaWYgKHBfbGVuID09IDApCgkJewoJCSAg LyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KCQkgIGlmIChnZXRjd2QgKHRt cCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKCQkgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJ TkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOwoJCSAgdG1wX2xlbiA9IHN0cmxlbiAo dG1wKTsKCQkgIGNvbmNhdF9uYW1lID0KCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiAr IDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CgkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0 bXAsIHRtcF9sZW4pOwoJCSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CgkJICBzdHJj cHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOwoJCX0KCSAgICAgIGVs c2UKCQl7CgkJICBjb25jYXRfbmFtZSA9CgkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsg MSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAs IHBfbGVuKTsKCQkgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKCQkgIHN0cmNweSAoY29u Y2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOwoJCX0KCSAgICAgIGlmIChjaGVja19l eGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCgkJcmV0dXJuIGNvbmNhdF9uYW1lOwoJICAgICAg WEZSRUUgKGNvbmNhdF9uYW1lKTsKCSAgICB9Cgl9CiAgICAgIC8qIG5vdCBmb3VuZCBpbiBQ QVRIOyBhc3N1bWUgY3VyZGlyICovCiAgICB9CiAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBm b3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLwogIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFU SE1BWCkgPT0gTlVMTCkKICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRj d2QgZmFpbGVkOiAlcyIsCiAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5v KSkpOwogIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CiAgY29uY2F0X25hbWUgPSBYTUFMTE9D IChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKICBtZW1jcHkg KGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOwogIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0g Jy8nOwogIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7Cgog IGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCiAgICByZXR1cm4gY29uY2F0 X25hbWU7CiAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKICByZXR1cm4gTlVMTDsKfQoKY2hhciAq CmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKewojaWZuZGVmIFNfSVNM TksKICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOwojZWxzZQogIGNoYXIgYnVmW0xUX1BB VEhNQVhdOwogIHN0cnVjdCBzdGF0IHM7CiAgY2hhciAqdG1wX3BhdGhzcGVjID0geHN0cmR1 cCAocGF0aHNwZWMpOwogIGNoYXIgKnA7CiAgaW50IGhhc19zeW1saW5rcyA9IDA7CiAgd2hp bGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQogICAgewogICAg ICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAoJCSAgICAgICJjaGVja2lu ZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAoJCSAgICAgIHRtcF9wYXRo c3BlYyk7CiAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKCXsKCSAg aWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKCSAgICB7CgkgICAgICBoYXNfc3ltbGlu a3MgPSAxOwoJICAgICAgYnJlYWs7CgkgICAgfQoKCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBm b3IgbGFzdCBESVJfU0VQQVJBVE9SICovCgkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4g KHRtcF9wYXRoc3BlYykgLSAxOwoJICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICgh SVNfRElSX1NFUEFSQVRPUiAoKnApKSkKCSAgICBwLS07CgkgIGlmICgocCA9PSB0bXBfcGF0 aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKCSAgICB7CgkgICAgICAvKiBu byBtb3JlIERJUl9TRVBBUkFUT1JTIGxlZnQgKi8KCSAgICAgIGJyZWFrOwoJICAgIH0KCSAg KnAgPSAnXDAnOwoJfQogICAgICBlbHNlCgl7CgkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19M SU5FX18sCgkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKCQkgICAg dG1wX3BhdGhzcGVjLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7Cgl9CiAgICB9CiAg WEZSRUUgKHRtcF9wYXRoc3BlYyk7CgogIGlmICghaGFzX3N5bWxpbmtzKQogICAgewogICAg ICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOwogICAgfQoKICB0bXBfcGF0aHNwZWMgPSBy ZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CiAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQogICAg ewogICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAoJCSJjb3VsZCBub3QgZm9s bG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKICAgIH0KICByZXR1cm4geHN0cmR1 cCAodG1wX3BhdGhzcGVjKTsKI2VuZGlmCn0KCmNoYXIgKgpzdHJlbmR6YXAgKGNoYXIgKnN0 ciwgY29uc3QgY2hhciAqcGF0KQp7CiAgc2l6ZV90IGxlbiwgcGF0bGVuOwoKICBhc3NlcnQg KHN0ciAhPSBOVUxMKTsKICBhc3NlcnQgKHBhdCAhPSBOVUxMKTsKCiAgbGVuID0gc3RybGVu IChzdHIpOwogIHBhdGxlbiA9IHN0cmxlbiAocGF0KTsKCiAgaWYgKHBhdGxlbiA8PSBsZW4p CiAgICB7CiAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CiAgICAgIGlmIChTVFJFUSAoc3Ry LCBwYXQpKQoJKnN0ciA9ICdcMCc7CiAgICB9CiAgcmV0dXJuIHN0cjsKfQoKdm9pZApsdF9k ZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZt dCwgLi4uKQp7CiAgdmFfbGlzdCBhcmdzOwogIGlmIChsdF9kZWJ1ZykKICAgIHsKICAgICAg KHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZp bGUsIGxpbmUpOwogICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKICAgICAgKHZvaWQpIHZm cHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CiAgICAgIHZhX2VuZCAoYXJncyk7CiAgICB9 Cn0KCnN0YXRpYyB2b2lkCmx0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3Qg Y2hhciAqZmlsZSwKCSAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSwKCSAgICAg ICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQp7CiAgZnByaW50ZiAoc3RkZXJy LCAiJXM6JXM6JWQ6ICVzOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUsIG1vZGUpOwog IHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKICBmcHJpbnRmIChzdGRlcnIsICIu XG4iKTsKCiAgaWYgKGV4aXRfc3RhdHVzID49IDApCiAgICBleGl0IChleGl0X3N0YXR1cyk7 Cn0KCnZvaWQKbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBj aGFyICptZXNzYWdlLCAuLi4pCnsKICB2YV9saXN0IGFwOwogIHZhX3N0YXJ0IChhcCwgbWVz c2FnZSk7CiAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFU QUwiLCBtZXNzYWdlLCBhcCk7CiAgdmFfZW5kIChhcCk7Cn0KCnN0YXRpYyBjb25zdCBjaGFy ICoKbm9ubnVsbCAoY29uc3QgY2hhciAqcykKewogIHJldHVybiBzID8gcyA6ICIobnVsbCki Owp9CgpzdGF0aWMgY29uc3QgY2hhciAqCm5vbmVtcHR5IChjb25zdCBjaGFyICpzKQp7CiAg cmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKfQoKdm9pZAps dF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQp7CiAgbHRf ZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKCQkgICIobHRfc2V0ZW52KSBzZXR0 aW5nICclcycgdG8gJyVzJ1xuIiwKICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSks IG5vbm51bGwgKHZhbHVlKSk7CiAgewojaWZkZWYgSEFWRV9TRVRFTlYKICAgIC8qIGFsd2F5 cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCiAg ICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CiAgICBzZXRlbnYgKG5hbWUsIHN0ciwg MSk7CiNlbHNlCiAgICBzaXplX3QgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4g KHZhbHVlKSArIDE7CiAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOwogICAg c3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CiAgICBpZiAocHV0ZW52IChz dHIpICE9IEVYSVRfU1VDQ0VTUykKICAgICAgewogICAgICAgIFhGUkVFIChzdHIpOwogICAg ICB9CiNlbmRpZgogIH0KfQoKY2hhciAqCmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9y aWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKewogIGNoYXIgKm5ld192 YWx1ZTsKICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKICAgIHsKICAgICAgc2l6 ZV90IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKICAgICAgc2l6ZV90 IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CiAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNo YXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOwogICAgICBpZiAodG9fZW5kKQog ICAgICAgIHsKICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKICAg ICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7CiAgICAg ICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUs IGFkZCk7CiAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFs dWUpOwogICAgICAgIH0KICAgIH0KICBlbHNlCiAgICB7CiAgICAgIG5ld192YWx1ZSA9IHhz dHJkdXAgKGFkZCk7CiAgICB9CiAgcmV0dXJuIG5ld192YWx1ZTsKfQoKdm9pZApsdF91cGRh dGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQp7CiAg bHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKCQkgICIobHRfdXBkYXRlX2V4 ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCiAgICAgICAg ICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOwoKICBpZiAobmFt ZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCiAgICB7CiAgICAgIGNoYXIgKm5ld192 YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKICAgICAg Lyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGgg IycgKi8KICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKICAgICAgd2hp bGUgKChsZW4gPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkp CiAgICAgICAgewogICAgICAgICAgbmV3X3ZhbHVlWy0tbGVuXSA9ICdcMCc7CiAgICAgICAg fQogICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CiAgICAgIFhGUkVFIChuZXdf dmFsdWUpOwogICAgfQp9Cgp2b2lkCmx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAq bmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCnsKICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18s IF9fTElORV9fLAoJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5 IHByZXBlbmRpbmcgJyVzJ1xuIiwKICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSks IG5vbm51bGwgKHZhbHVlKSk7CgogIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2 YWx1ZSkKICAgIHsKICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0 ZW52IChuYW1lKSwgdmFsdWUsIDApOwogICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1 ZSk7CiAgICAgIFhGUkVFIChuZXdfdmFsdWUpOwogICAgfQp9CgpFT0YKCSAgICBjYXNlICRo b3N0X29zIGluCgkgICAgICBtaW5ndyogfCB3aW5kb3dzKikKCQljYXQgPDwiRU9GIgoKLyog UHJlcGFyZXMgYW4gYXJndW1lbnQgdmVjdG9yIGJlZm9yZSBjYWxsaW5nIHNwYXduKCkuCiAg IE5vdGUgdGhhdCBzcGF3bigpIGRvZXMgbm90IGJ5IGl0c2VsZiBjYWxsIHRoZSBjb21tYW5k IGludGVycHJldGVyCiAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52 ICgiQ09NU1BFQyIpIDoKICAgICAgKHsgT1NWRVJTSU9OSU5GTyB2OyB2LmR3T1NWZXJzaW9u SW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GTyk7CiAgICAgICAgIEdldFZlcnNpb25F eCgmdik7CiAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9O VDsKICAgICAgfSkgPyAiY21kLmV4ZSIgOiAiY29tbWFuZC5jb20iKS4KICAgSW5zdGVhZCBp dCBzaW1wbHkgY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnICcs IGFuZCBjYWxscwogICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1 bWVudHMgc2luY2UgV2luMzIgQ3JlYXRlUHJvY2VzcygpCiAgIGludGVycHJldHMgY2hhcmFj dGVycyBsaWtlICcgJywgJ1x0JywgJ1xcJywgJyInIChidXQgbm90ICc8JyBhbmQgJz4nKSBp biBhCiAgIHNwZWNpYWwgd2F5OgogICAtIFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVk IGFzIGRlbGltaXRlcnMuIFRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzCiAgICAgZGVsaW1pdGVy cyBpZiB0aGV5IGFyZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXM6ICIuLi4iLgogICAt IFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGlucHV0LiBU aGVpciBvbmx5IGVmZmVjdCBpcwogICAgIHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNw YWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwKICAgICBjaGFyYWN0ZXJzLgog ICAtIEJhY2tzbGFzaGVzIG5vdCBmb2xsb3dlZCBieSBkb3VibGUgcXVvdGVzIGFyZSBub3Qg c3BlY2lhbC4KICAgLSBCdXQgMipuKzEgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3Vi bGUgcXVvdGUgYmVjb21lCiAgICAgbiBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJs ZSBxdW90ZSAobiA+PSAwKToKICAgICAgIFwiIC0+ICIKICAgICAgIFxcXCIgLT4gXCIKICAg ICAgIFxcXFxcIiAtPiBcXCIKICovCiNkZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJc XCBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1 XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlww MzNcMDM0XDAzNVwwMzZcMDM3IgojZGVmaW5lIFNIRUxMX1NQQUNFX0NIQVJTICIgXDAwMVww MDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3 XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFww MzVcMDM2XDAzNyIKY2hhciAqKgpwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndikKewogIHNp emVfdCBhcmdjOwogIGNoYXIgKipuZXdfYXJndjsKICBzaXplX3QgaTsKCiAgLyogQ291bnQg bnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCiAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXSAh PSBOVUxMOyBhcmdjKyspCiAgICA7CgogIC8qIEFsbG9jYXRlIG5ldyBhcmd1bWVudCB2ZWN0 b3IuICAqLwogIG5ld19hcmd2ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CgogIC8q IFB1dCBxdW90ZWQgYXJndW1lbnRzIGludG8gdGhlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAq LwogIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCiAgICB7CiAgICAgIGNvbnN0IGNoYXIg KnN0cmluZyA9IGFyZ3ZbaV07CgogICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCgluZXdf YXJndltpXSA9IHhzdHJkdXAgKCJcIlwiIik7CiAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0 cmluZywgU0hFTExfU1BFQ0lBTF9DSEFSUykgIT0gTlVMTCkKCXsKCSAgaW50IHF1b3RlX2Fy b3VuZCA9IChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQQUNFX0NIQVJTKSAhPSBOVUxMKTsK CSAgc2l6ZV90IGxlbmd0aDsKCSAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOwoJICBjb25z dCBjaGFyICpzOwoJICBjaGFyICpxdW90ZWRfc3RyaW5nOwoJICBjaGFyICpwOwoKCSAgbGVu Z3RoID0gMDsKCSAgYmFja3NsYXNoZXMgPSAwOwoJICBpZiAocXVvdGVfYXJvdW5kKQoJICAg IGxlbmd0aCsrOwoJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKCSAgICB7 CgkgICAgICBjaGFyIGMgPSAqczsKCSAgICAgIGlmIChjID09ICciJykKCQlsZW5ndGggKz0g YmFja3NsYXNoZXMgKyAxOwoJICAgICAgbGVuZ3RoKys7CgkgICAgICBpZiAoYyA9PSAnXFwn KQoJCWJhY2tzbGFzaGVzKys7CgkgICAgICBlbHNlCgkJYmFja3NsYXNoZXMgPSAwOwoJICAg IH0KCSAgaWYgKHF1b3RlX2Fyb3VuZCkKCSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAx OwoKCSAgcXVvdGVkX3N0cmluZyA9IFhNQUxMT0MgKGNoYXIsIGxlbmd0aCArIDEpOwoKCSAg cCA9IHF1b3RlZF9zdHJpbmc7CgkgIGJhY2tzbGFzaGVzID0gMDsKCSAgaWYgKHF1b3RlX2Fy b3VuZCkKCSAgICAqcCsrID0gJyInOwoJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7 IHMrKykKCSAgICB7CgkgICAgICBjaGFyIGMgPSAqczsKCSAgICAgIGlmIChjID09ICciJykK CQl7CgkJICB1bnNpZ25lZCBpbnQgajsKCQkgIGZvciAoaiA9IGJhY2tzbGFzaGVzICsgMTsg aiA+IDA7IGotLSkKCQkgICAgKnArKyA9ICdcXCc7CgkJfQoJICAgICAgKnArKyA9IGM7Cgkg ICAgICBpZiAoYyA9PSAnXFwnKQoJCWJhY2tzbGFzaGVzKys7CgkgICAgICBlbHNlCgkJYmFj a3NsYXNoZXMgPSAwOwoJICAgIH0KCSAgaWYgKHF1b3RlX2Fyb3VuZCkKCSAgICB7CgkgICAg ICB1bnNpZ25lZCBpbnQgajsKCSAgICAgIGZvciAoaiA9IGJhY2tzbGFzaGVzOyBqID4gMDsg ai0tKQoJCSpwKysgPSAnXFwnOwoJICAgICAgKnArKyA9ICciJzsKCSAgICB9CgkgICpwID0g J1wwJzsKCgkgIG5ld19hcmd2W2ldID0gcXVvdGVkX3N0cmluZzsKCX0KICAgICAgZWxzZQoJ bmV3X2FyZ3ZbaV0gPSAoY2hhciAqKSBzdHJpbmc7CiAgICB9CiAgbmV3X2FyZ3ZbYXJnY10g PSBOVUxMOwoKICByZXR1cm4gbmV3X2FyZ3Y7Cn0KRU9GCgkJOzsKCSAgICBlc2FjCgogICAg ICAgICAgICBjYXQgPDwiRU9GIgp2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFKiBmKQp7CkVP RgoJICAgIGZ1bmNfZW1pdF93cmFwcGVyIHllcyB8CgkgICAgICAkU0VEIC1uIC1lICcKcy9e XCguXHs3OVx9XClcKC4uKlwpL1wxXApcMi8KaApzL1woW1xcIl1cKS9cXFwxL2cKcy8kL1xc bi8Kcy9cKFteXG5dKlwpLiovICBmcHV0cyAoIlwxIiwgZik7L3AKZwpEJwogICAgICAgICAg ICBjYXQgPDwiRU9GIgp9CkVPRgp9CiMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3Jj CgojIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wIEFSRwojIFRydWUgaWYgQVJHIGlzIGFuIGlt cG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKZnVuY193aW4zMl9p bXBvcnRfbGliX3AgKCkKewogICAgJGRlYnVnX2NtZAoKICAgIGNhc2UgYGV2YWwgJGZpbGVf bWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KICAgICpp bXBvcnQqKSA6IDs7CiAgICAqKSBmYWxzZSA7OwogICAgZXNhYwp9CgojIGZ1bmNfc3VuY2Nf Y3N0ZF9hYmkKIyAhIU9OTFkgQ0FMTCBUSElTIEZPUiBTVU4gQ0MgQUZURVIgJGNvbXBpbGVf Y29tbWFuZCBJUyBGVUxMWSBFWFBBTkRFRCEhCiMgU2V2ZXJhbCBjb21waWxlciBmbGFncyBz ZWxlY3QgYW4gQUJJIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCiMgQ3N0ZCBsaWJy YXJ5LiBBdm9pZCBzcGVjaWZ5aW5nIGl0IGlmIGFueSBhcmUgaW4gQ1hYRkxBR1MuCmZ1bmNf c3VuY2NfY3N0ZF9hYmkgKCkKewogICAgJGRlYnVnX2NtZAoKICAgIGNhc2UgIiAkY29tcGls ZV9jb21tYW5kICIgaW4KICAgICoiIC1jb21wYXQ9ZyAiKnwqXCAtc3RkPWMrK1swLTldWzAt OV1cICp8KiIgLWxpYnJhcnk9c3RkY3h4NCAiKnwqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikK ICAgICAgc3VuY2NfdXNlX2NzdGRfYWJpPW5vCiAgICAgIDs7CiAgICAqKQogICAgICBzdW5j Y191c2VfY3N0ZF9hYmk9eWVzCiAgICAgIDs7CiAgICBlc2FjCn0KCiMgZnVuY19tb2RlX2xp bmsgYXJnLi4uCmZ1bmNfbW9kZV9saW5rICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBjYXNl ICRob3N0IGluCiAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotd2luZG93cyog fCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQogICAgICAjIEl0IGlzIGltcG9z c2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCiAgICAgICMg d2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBv dXQKICAgICAgIyB3aGF0IHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0 byBwYXNzIGFuIGV4dHJhCiAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0 aW9uLgogICAgICAjIGFsbG93X3VuZGVmaW5lZD1ubwoKICAgICAgIyBGSVhNRTogVW5mb3J0 dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5n CiAgICAgICMgdG8gbWFrZSBhIGRsbCB0aGF0IGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4g d2hpY2ggY2FzZSBub3QKICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQu ICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKICAgICAgIyAtbm8tdW5kZWZpbmVkIG9u IHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3aGVuIHdlIGNhbiBiZSBjZXJ0YWluCiAgICAgICMg dGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3Rh dGljIGxpYnJhcnkuCiAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKICAgICAgOzsKICAgICop CiAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKICAgICAgOzsKICAgIGVzYWMKICAgIGxpYnRv b2xfYXJncz0kbm9ub3B0CiAgICBiYXNlX2NvbXBpbGU9IiRub25vcHQgJEAiCiAgICBjb21w aWxlX2NvbW1hbmQ9JG5vbm9wdAogICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CgogICAg Y29tcGlsZV9ycGF0aD0KICAgIGNvbXBpbGVfcnBhdGhfdGFpbD0KICAgIGZpbmFsaXplX3Jw YXRoPQogICAgY29tcGlsZV9zaGxpYnBhdGg9CiAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9CiAg ICBjb252ZW5pZW5jZT0KICAgIG9sZF9jb252ZW5pZW5jZT0KICAgIGRlcGxpYnM9CiAgICBv bGRfZGVwbGlicz0KICAgIGNvbXBpbGVyX2ZsYWdzPQogICAgbGlua2VyX2ZsYWdzPQogICAg ZGxsc2VhcmNocGF0aD0KICAgIGxpYl9zZWFyY2hfcGF0aD1gcHdkYAogICAgaW5zdF9wcmVm aXhfZGlyPQogICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CgogICAgYXZvaWRfdmVy c2lvbj1ubwogICAgYmluZGlyPQogICAgZGxmaWxlcz0KICAgIGRscHJlZmlsZXM9CiAgICBk bHNlbGY9bm8KICAgIGV4cG9ydF9keW5hbWljPW5vCiAgICBleHBvcnRfc3ltYm9scz0KICAg IGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQogICAgZ2VuZXJhdGVkPQogICAgbGlib2Jqcz0KICAg IGx0bGlicz0KICAgIG1vZHVsZT1ubwogICAgbm9faW5zdGFsbD1ubwogICAgb2Jqcz0KICAg IG9zMmRsbG5hbWU9CiAgICBub25fcGljX29iamVjdHM9CiAgICBwcmVjaW91c19maWxlc19y ZWdleD0KICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubwogICAgcHJlbG9hZD1mYWxzZQogICAg cHJldj0KICAgIHByZXZhcmc9CiAgICByZWxlYXNlPQogICAgcnBhdGg9CiAgICB4cnBhdGg9 CiAgICBwZXJtX3JwYXRoPQogICAgdGVtcF9ycGF0aD0KICAgIHRlbXBfcnBhdGhfdGFpbD0K ICAgIHRocmVhZF9zYWZlPW5vCiAgICB2aW5mbz0KICAgIHZpbmZvX251bWJlcj1ubwogICAg d2Vha19saWJzPQogICAgcnBhdGhfYXJnPQogICAgc2luZ2xlX21vZHVsZT0kd2wtc2luZ2xl X21vZHVsZQogICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQoKICAgICMgV2UgbmVl ZCB0byBrbm93IC1zdGF0aWMsIHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4K ICAgIGZvciBhcmcKICAgIGRvCiAgICAgIGNhc2UgJGFyZyBpbgogICAgICAtc2hhcmVkKQoJ dGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKCSAgJiYgZnVuY19mYXRhbF9j b25maWd1cmF0aW9uICJjYW5ub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKCWJ1aWxkX29s ZF9saWJzPW5vCglicmVhawoJOzsKICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0 YXRpYy1saWJ0b29sLWxpYnMpCgljYXNlICRhcmcgaW4KCS1hbGwtc3RhdGljKQoJICBpZiB0 ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IC16ICIkbGlua19zdGF0 aWNfZmxhZyI7IHRoZW4KCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5r aW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgoJICBmaQoJICBpZiB0 ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KCSAgICBkbG9wZW5fc2VsZj0kZGxv cGVuX3NlbGZfc3RhdGljCgkgIGZpCgkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKCSAgOzsK CS1zdGF0aWMpCgkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtf c3RhdGljX2ZsYWciOyB0aGVuCgkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRp YwoJICBmaQoJICBwcmVmZXJfc3RhdGljX2xpYnM9YnVpbHQKCSAgOzsKCS1zdGF0aWMtbGli dG9vbC1saWJzKQoJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5r X3N0YXRpY19mbGFnIjsgdGhlbgoJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0 aWMKCSAgZmkKCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcwoJICA7OwoJZXNhYwoJYnVpbGRf bGlidG9vbF9saWJzPW5vCglidWlsZF9vbGRfbGlicz15ZXMKCWJyZWFrCgk7OwogICAgICBl c2FjCiAgICBkb25lCgogICAgIyBTZWUgaWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQg b24gc3RhdGljIGFyY2hpdmVzLgogICAgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3 X2NtZHMiICYmIGJ1aWxkX29sZF9saWJzPXllcwoKICAgICMgR28gdGhyb3VnaCB0aGUgYXJn dW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgogICAgd2hpbGUgdGVzdCAi JCMiIC1ndCAwOyBkbwogICAgICBhcmc9JDEKICAgICAgc2hpZnQKICAgICAgZnVuY19xdW90 ZV9hcmcgcHJldHR5LHVucXVvdGVkICIkYXJnIgogICAgICBxYXJnPSRmdW5jX3F1b3RlX2Fy Z191bnF1b3RlZF9yZXN1bHQKICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1 bmNfcXVvdGVfYXJnX3Jlc3VsdCIKCiAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBu ZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgogICAgICBpZiB0ZXN0IC1uICIkcHJldiI7 IHRoZW4KCWNhc2UgJHByZXYgaW4KCW91dHB1dCkKCSAgZnVuY19hcHBlbmQgY29tcGlsZV9j b21tYW5kICIgQE9VVFBVVEAiCgkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBA T1VUUFVUQCIKCSAgOzsKCWVzYWMKCgljYXNlICRwcmV2IGluCgliaW5kaXIpCgkgIGJpbmRp cj0kYXJnCgkgIHByZXY9CgkgIGNvbnRpbnVlCgkgIDs7CglkbGZpbGVzfGRscHJlZmlsZXMp CgkgICRwcmVsb2FkIHx8IHsKCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRo ZSBsaW5raW5nIGNvbW1hbmRzLgoJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAi IEBTWU1GSUxFQCIKCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJ TEVAIgoJICAgIHByZWxvYWQ9OgoJICB9CgkgIGNhc2UgJGFyZyBpbgoJICAqLmxhIHwgKi5s bykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgoJICBmb3JjZSkKCSAgICBp ZiB0ZXN0IG5vID0gIiRkbHNlbGYiOyB0aGVuCgkgICAgICBkbHNlbGY9bmVlZGxlc3MKCSAg ICAgIGV4cG9ydF9keW5hbWljPXllcwoJICAgIGZpCgkgICAgcHJldj0KCSAgICBjb250aW51 ZQoJICAgIDs7CgkgIHNlbGYpCgkgICAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2Ijsg dGhlbgoJICAgICAgZGxzZWxmPXllcwoJICAgIGVsaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2 IiAmJiB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zZWxmIjsgdGhlbgoJICAgICAgZGxzZWxmPXll cwoJICAgIGVsc2UKCSAgICAgIGRsc2VsZj1uZWVkbGVzcwoJICAgICAgZXhwb3J0X2R5bmFt aWM9eWVzCgkgICAgZmkKCSAgICBwcmV2PQoJICAgIGNvbnRpbnVlCgkgICAgOzsKCSAgKikK CSAgICBpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCgkgICAgICBmdW5jX2FwcGVu ZCBkbGZpbGVzICIgJGFyZyIKCSAgICBlbHNlCgkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZp bGVzICIgJGFyZyIKCSAgICBmaQoJICAgIHByZXY9CgkgICAgY29udGludWUKCSAgICA7OwoJ ICBlc2FjCgkgIDs7CglleHBzeW1zKQoJICBleHBvcnRfc3ltYm9scz0kYXJnCgkgIHRlc3Qg LWYgIiRhcmciIFwKCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSAnJGFy ZycgZG9lcyBub3QgZXhpc3QiCgkgIHByZXY9CgkgIGNvbnRpbnVlCgkgIDs7CglleHBzeW1z X3JlZ2V4KQoJICBleHBvcnRfc3ltYm9sc19yZWdleD0kYXJnCgkgIHByZXY9CgkgIGNvbnRp bnVlCgkgIDs7CglmcmFtZXdvcmspCgkgIGNhc2UgJGhvc3QgaW4KCSAgICAqLSotZGFyd2lu KikKCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KCQkqIiAkcWFyZy5sdGZyYW1ld29yayAi KikgOzsKCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMg dGhpcyBpcyBmaXhlZCBsYXRlcgoJCSAgIDs7CgkgICAgICBlc2FjCgkgICAgICA7OwoJICBl c2FjCgkgIHByZXY9CgkgIGNvbnRpbnVlCgkgIDs7CglpbnN0X3ByZWZpeCkKCSAgaW5zdF9w cmVmaXhfZGlyPSRhcmcKCSAgcHJldj0KCSAgY29udGludWUKCSAgOzsKCW1sbHZtKQoJICAj IENsYW5nIGRvZXMgbm90IHVzZSBMTFZNIHRvIGxpbmssIHNvIHdlIGNhbiBzaW1wbHkgZGlz Y2FyZCBhbnkKCSAgIyAnLW1sbHZtICRhcmcnIG9wdGlvbnMgd2hlbiBkb2luZyB0aGUgbGlu ayBzdGVwLgoJICBwcmV2PQoJICBjb250aW51ZQoJICA7OwoJb2JqZWN0bGlzdCkKCSAgaWYg dGVzdCAtZiAiJGFyZyI7IHRoZW4KCSAgICBzYXZlX2FyZz0kYXJnCgkgICAgbW9yZWFyZ3M9 CgkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAoJICAgIGRvCiMJICAgICAgZnVu Y19hcHBlbmQgbW9yZWFyZ3MgIiAkZmlsIgoJICAgICAgYXJnPSRmaWwKCSAgICAgICMgQSBs aWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgoKCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQg dGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KCSAgICAgIGlmIGZ1bmNfbGFsaWJf dW5zYWZlX3AgIiRhcmciOyB0aGVuCgkJcGljX29iamVjdD0KCQlub25fcGljX29iamVjdD0K CgkJIyBSZWFkIHRoZSAubG8gZmlsZQoJCWZ1bmNfc291cmNlICIkYXJnIgoKCQlpZiB0ZXN0 IC16ICIkcGljX29iamVjdCIgfHwKCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8 CgkJICAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiAmJgoJCSAgIHRlc3Qgbm9uZSA9ICIk bm9uX3BpY19vYmplY3QiOyB0aGVuCgkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmlu ZCBuYW1lIG9mIG9iamVjdCBmb3IgJyRhcmcnIgoJCWZpCgoJCSMgRXh0cmFjdCBzdWJkaXJl Y3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCgkJZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIK CQl4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CgoJCWlmIHRlc3Qgbm9uZSAhPSAiJHBpY19v YmplY3QiOyB0aGVuCgkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0 IGlzIGZvdW5kIGluLgoJCSAgcGljX29iamVjdD0keGRpciRwaWNfb2JqZWN0CgoJCSAgaWYg dGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgoJCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVp bGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IHllcyA9ICIkZGxvcGVuX3N1cHBvcnQiOyB0aGVu CgkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgoJCSAgICAgIHBy ZXY9CgkJICAgICAgY29udGludWUKCQkgICAgZWxzZQoJCSAgICAgICMgSWYgbGlidG9vbCBv YmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCgkJICAg ICAgcHJldj1kbHByZWZpbGVzCgkJICAgIGZpCgkJICBmaQoKCQkgICMgQ0hFQ0sgTUU6ICBJ IHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCgkJICBpZiB0ZXN0IGRscHJlZmlsZXMg PSAiJHByZXYiOyB0aGVuCgkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4K CQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgoJCSAgICBwcmV2 PQoJCSAgZmkKCgkJICAjIEEgUElDIG9iamVjdC4KCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMg IiAkcGljX29iamVjdCIKCQkgIGFyZz0kcGljX29iamVjdAoJCWZpCgoJCSMgTm9uLVBJQyBv YmplY3QuCgkJaWYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCgkJICAj IFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgoJCSAg bm9uX3BpY19vYmplY3Q9JHhkaXIkbm9uX3BpY19vYmplY3QKCgkJICAjIEEgc3RhbmRhcmQg bm9uLVBJQyBvYmplY3QKCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25f cGljX29iamVjdCIKCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUg PSAiJHBpY19vYmplY3QiOyB0aGVuCgkJICAgIGFyZz0kbm9uX3BpY19vYmplY3QKCQkgIGZp CgkJZWxzZQoJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFk LgoJCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgoJCSAg bm9uX3BpY19vYmplY3Q9JHBpY19vYmplY3QKCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2Jq ZWN0cyAiICRub25fcGljX29iamVjdCIKCQlmaQoJICAgICAgZWxzZQoJCSMgT25seSBhbiBl cnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgoJCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgoJ CSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KCQkgIGZ1bmNf ZGlybmFtZSAiJGFyZyIgIi8iICIiCgkJICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CgoJ CSAgZnVuY19sbzJvICIkYXJnIgoJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNf bG8yb19yZXN1bHQKCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQK CQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKCQkgIGZ1bmNfYXBwZW5k IG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKCSAgICAgICAgZWxzZQoJCSAg ZnVuY19mYXRhbF9lcnJvciAiJyRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0 IgoJCWZpCgkgICAgICBmaQoJICAgIGRvbmUKCSAgZWxzZQoJICAgIGZ1bmNfZmF0YWxfZXJy b3IgImxpbmsgaW5wdXQgZmlsZSAnJGFyZycgZG9lcyBub3QgZXhpc3QiCgkgIGZpCgkgIGFy Zz0kc2F2ZV9hcmcKCSAgcHJldj0KCSAgY29udGludWUKCSAgOzsKCW9zMmRsbG5hbWUpCgkg IG9zMmRsbG5hbWU9JGFyZwoJICBwcmV2PQoJICBjb250aW51ZQoJICA7OwoJcHJlY2lvdXNf cmVnZXgpCgkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSRhcmcKCSAgcHJldj0KCSAgY29udGlu dWUKCSAgOzsKCXJlbGVhc2UpCgkgIHJlbGVhc2U9LSRhcmcKCSAgcHJldj0KCSAgY29udGlu dWUKCSAgOzsKCXJwYXRoIHwgeHJwYXRoKQoJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0 aC4KCSAgY2FzZSAkYXJnIGluCgkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKCSAg KikKCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJhcmd1bWVudCB0byAtcnBhdGggaXMgbm90IGFi c29sdXRlOiAkYXJnIgoJICAgIDs7CgkgIGVzYWMKCSAgaWYgdGVzdCBycGF0aCA9ICIkcHJl diI7IHRoZW4KCSAgICBjYXNlICIkcnBhdGggIiBpbgoJICAgICoiICRhcmcgIiopIDs7Cgkg ICAgKikgZnVuY19hcHBlbmQgcnBhdGggIiAkYXJnIiA7OwoJICAgIGVzYWMKCSAgZWxzZQoJ ICAgIGNhc2UgIiR4cnBhdGggIiBpbgoJICAgICoiICRhcmcgIiopIDs7CgkgICAgKikgZnVu Y19hcHBlbmQgeHJwYXRoICIgJGFyZyIgOzsKCSAgICBlc2FjCgkgIGZpCgkgIHByZXY9Cgkg IGNvbnRpbnVlCgkgIDs7CglzaHJleHQpCgkgIHNocmV4dF9jbWRzPSRhcmcKCSAgcHJldj0K CSAgY29udGludWUKCSAgOzsKCXdlYWspCgkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRh cmciCgkgIHByZXY9CgkgIGNvbnRpbnVlCgkgIDs7Cgl4YXNzZW1ibGVyKQoJICBmdW5jX2Fw cGVuZCBjb21waWxlcl9mbGFncyAiIC1YYXNzZW1ibGVyICRxYXJnIgoJICBwcmV2PQoJICBm dW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAtWGFzc2VtYmxlciAkcWFyZyIKCSAgZnVu Y19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIC1YYXNzZW1ibGVyICRxYXJnIgoJICBjb250 aW51ZQoJICA7OwoJeGNjbGlua2VyKQoJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAk cWFyZyIKCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKCSAgcHJldj0K CSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCgkgIGZ1bmNfYXBwZW5k IGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKCSAgY29udGludWUKCSAgOzsKCXhjb21waWxl cikKCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKCSAgcHJldj0KCSAg ZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCgkgIGZ1bmNfYXBwZW5kIGZp bmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKCSAgY29udGludWUKCSAgOzsKCXhsaW5rZXIpCgkg IGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgoJICBmdW5jX2FwcGVuZCBjb21w aWxlcl9mbGFncyAiICR3bCRxYXJnIgoJICBwcmV2PQoJICBmdW5jX2FwcGVuZCBjb21waWxl X2NvbW1hbmQgIiAkd2wkcWFyZyIKCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAi ICR3bCRxYXJnIgoJICBjb250aW51ZQoJICA7OwoJKikKCSAgZXZhbCAiJHByZXY9XCJcJGFy Z1wiIgoJICBwcmV2PQoJICBjb250aW51ZQoJICA7OwoJZXNhYwogICAgICBmaSAjIHRlc3Qg LW4gIiRwcmV2IgoKICAgICAgcHJldmFyZz0kYXJnCgogICAgICBjYXNlICRhcmcgaW4KICAg ICAgLWFsbC1zdGF0aWMpCglpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4K CSAgIyBTZWUgY29tbWVudCBmb3IgLXN0YXRpYyBmbGFnIGJlbG93LCBmb3IgbW9yZSBkZXRh aWxzLgoJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxh ZyIKCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFn IgoJZmkKCWNvbnRpbnVlCgk7OwoKICAgICAgLWFsbG93LXVuZGVmaW5lZCkKCSMgRklYTUU6 IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KCWZ1bmNfZmF0YWxf ZXJyb3IgIictYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQg aXMgdGhlIGRlZmF1bHQiCgk7OwoKICAgICAgLWF2b2lkLXZlcnNpb24pCglhdm9pZF92ZXJz aW9uPXllcwoJY29udGludWUKCTs7CgogICAgICAtYmluZGlyKQoJcHJldj1iaW5kaXIKCWNv bnRpbnVlCgk7OwoKICAgICAgLWRsb3BlbikKCXByZXY9ZGxmaWxlcwoJY29udGludWUKCTs7 CgogICAgICAtZGxwcmVvcGVuKQoJcHJldj1kbHByZWZpbGVzCgljb250aW51ZQoJOzsKCiAg ICAgIC1leHBvcnQtZHluYW1pYykKCWV4cG9ydF9keW5hbWljPXllcwoJY29udGludWUKCTs7 CgogICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCglpZiB0 ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19y ZWdleCI7IHRoZW4KCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0 ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKCWZpCglpZiB0ZXN0IFgtZXhw b3J0LXN5bWJvbHMgPSAiWCRhcmciOyB0aGVuCgkgIHByZXY9ZXhwc3ltcwoJZWxzZQoJICBw cmV2PWV4cHN5bXNfcmVnZXgKCWZpCgljb250aW51ZQoJOzsKCiAgICAgIC1mcmFtZXdvcmsp CglwcmV2PWZyYW1ld29yawoJY29udGludWUKCTs7CgogICAgICAtaW5zdC1wcmVmaXgtZGly KQoJcHJldj1pbnN0X3ByZWZpeAoJY29udGludWUKCTs7CgogICAgICAjIFRoZSBuYXRpdmUg SVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCiAg ICAgICMgc28sIGlmIHdlIHNlZSB0aGVzZSBmbGFncyBiZSBjYXJlZnVsIG5vdCB0byB0cmVh dCB0aGVtIGxpa2UgLUwKICAgICAgLUxbQS1aXVtBLVpdKjoqKQoJY2FzZSAkd2l0aF9nY2Mv JGhvc3QgaW4KCW5vLyotKi1pcml4KiB8IC8qLSotaXJpeCopCgkgIGZ1bmNfYXBwZW5kIGNv bXBpbGVfY29tbWFuZCAiICRhcmciCgkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQg IiAkYXJnIgoJICA7OwoJZXNhYwoJY29udGludWUKCTs7CgogICAgICAtTCopCglmdW5jX3N0 cmlwbmFtZSAiLUwiICcnICIkYXJnIgoJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jl c3VsdCI7IHRoZW4KCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCgkgICAgZnVuY19mYXRh bF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuICctTCcgYW5kICckMSciCgkgIGVs c2UKCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yICctTCcgb3B0aW9uIgoJ ICBmaQoJZmkKCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0 IgoJZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKCSMgV2UgbmVlZCBhbiBhYnNv bHV0ZSBwYXRoLgoJY2FzZSAkZGlyIGluCglbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7 CgkqKQoJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCgkgIHRlc3QgLXogIiRhYnNkaXIi ICYmIFwKCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRl IGRpcmVjdG9yeSBuYW1lIG9mICckZGlyJyIKCSAgZGlyPSRhYnNkaXIKCSAgOzsKCWVzYWMK CWNhc2UgIiRkZXBsaWJzICIgaW4KCSoiIC1MJGRpciAiKiB8ICoiICRhcmcgIiopCgkgICMg V2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKCSAg OzsKCSopCgkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRp dmUgZGlyZWN0b3JpZXMKCSAgY2FzZSAkZGlyIGluCgkgICAgW1xcL10qIHwgW0EtWmEtel06 W1xcL10qIHwgPSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIiA7OwoJICAgICopIGZ1 bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7CgkgIGVzYWMKCSAgZnVuY19hcHBlbmQg bGliX3NlYXJjaF9wYXRoICIgJGRpciIKCSAgOzsKCWVzYWMKCWNhc2UgJGhvc3QgaW4KCSot Ki1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi13aW5kb3dzKiB8ICotKi1wdzMyKiB8ICot Ki1vczIqIHwgKi1jZWdjYyopCgkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQg J3MqL2xpYiQqL2JpbionYAoJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KCSAgKiI6JGRp cjoiKikgOzsKCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CgkgICopIGZ1bmNfYXBwZW5k IGRsbHNlYXJjaHBhdGggIjokZGlyIjs7CgkgIGVzYWMKCSAgY2FzZSA6JGRsbHNlYXJjaHBh dGg6IGluCgkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OwoJICA6OikgZGxsc2VhcmNocGF0aD0k dGVzdGJpbmRpcjs7CgkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJp bmRpciI7OwoJICBlc2FjCgkgIDs7Cgllc2FjCgljb250aW51ZQoJOzsKCiAgICAgIC1sKikK CWlmIHRlc3QgWC1sYyA9ICJYJGFyZyIgfHwgdGVzdCBYLWxtID0gIlgkYXJnIjsgdGhlbgoJ ICBjYXNlICRob3N0IGluCgkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi13aW5k b3dzKiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikK CSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBs aWJyYXJ5IChhcyBzdWNoKQoJICAgIGNvbnRpbnVlCgkgICAgOzsKCSAgKi0qLW9zMiopCgkg ICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFz IHN1Y2gpCgkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQoJICAgIDs7Cgkg ICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqIHwgKi0qLW1p ZG5pZ2h0YnNkKikKCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmlu ZyBsaWJjL2xpYmNfci4KCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCgkg ICAgOzsKCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQoJICAgICMgUmhh cHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3Jr CgkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKCSAgICBj b250aW51ZQoJICAgIDs7CgkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKCSAgICAj IENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmci ICYmIGNvbnRpbnVlCgkgICAgOzsKCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8 ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQoJICAgICMgQ29tcGlsZXIgaW5zZXJ0 cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKCSAgICB0 ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCgkgICAgOzsKCSAgZXNhYwoJZWxpZiB0 ZXN0IFgtbGNfciA9ICJYJGFyZyI7IHRoZW4KCSBjYXNlICRob3N0IGluCgkgKi0qLW9wZW5i c2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSogfCAqLSotbWlkbmlnaHRic2Qq KQoJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBm bGFnLgoJICAgY29udGludWUKCSAgIDs7CgkgZXNhYwoJZmkKCWZ1bmNfYXBwZW5kIGRlcGxp YnMgIiAkYXJnIgoJY29udGludWUKCTs7CgogICAgICAtbWxsdm0pCglwcmV2PW1sbHZtCglj b250aW51ZQoJOzsKCiAgICAgIC1tb2R1bGUpCgltb2R1bGU9eWVzCgljb250aW51ZQoJOzsK CiAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhl IGxheW91dCBvZiBDKysKICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhj ZXB0aW9uIGhhbmRsaW5nLgogICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRv IGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgogICAgICAtbW9kZWx8LWFyY2h8LWlz eXNyb290fC0tc3lzcm9vdCkKCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIK CWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCglmdW5jX2FwcGVuZCBmaW5h bGl6ZV9jb21tYW5kICIgJGFyZyIKCXByZXY9eGNvbXBpbGVyCgljb250aW51ZQoJOzsKICAg ICAjIFNvbGFyaXMgbGQgcmVqZWN0cyBhcyBvZiAxMS40LiBSZWZlciB0byBPcmFjbGUgYnVn IDIyOTg1MTk5LgogICAgIC1wdGhyZWFkKQoJY2FzZSAkaG9zdCBpbgoJICAqc29sYXJpczIq KSA7OwoJICAqKQoJICAgIGNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGlu CgkgICAgICAgICoiICRhcmcgIiopIDs7CgkgICAgICAgICogKSBmdW5jX2FwcGVuZCBuZXdf aW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7CgkgICAgZXNhYwoJICA7OwoJZXNh YwoJY29udGludWUKCTs7CiAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8 LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAogICAgICB8LXRocmVhZHN8LWZvcGVubXB8LWZv cGVubXA9Knwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCglmdW5jX2FwcGVu ZCBjb21waWxlcl9mbGFncyAiICRhcmciCglmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQg IiAkYXJnIgoJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCgljYXNlICIk bmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgoJICAgICoiICRhcmcgIiopIDs7Cgkg ICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGFyZyIg OzsKCWVzYWMKCWNvbnRpbnVlCgk7OwoKICAgICAgLW11bHRpX21vZHVsZSkKCXNpbmdsZV9t b2R1bGU9JHdsLW11bHRpX21vZHVsZQoJY29udGludWUKCTs7CgogICAgICAtbm8tZmFzdC1p bnN0YWxsKQoJZmFzdF9pbnN0YWxsPW5vCgljb250aW51ZQoJOzsKCiAgICAgIC1uby1pbnN0 YWxsKQoJY2FzZSAkaG9zdCBpbgoJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXdp bmRvd3MqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2Mq KQoJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVk IG9uIFdpbmRvd3MKCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRv IGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCgkgIGZ1bmNfd2FybmluZyAiJy1uby1pbnN0YWxs JyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyAnLW5v LWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKCSAgZmFzdF9pbnN0YWxsPW5vCgkgIDs7CgkqKSBu b19pbnN0YWxsPXllcyA7OwoJZXNhYwoJY29udGludWUKCTs7CgogICAgICAtbm8tdW5kZWZp bmVkKQoJYWxsb3dfdW5kZWZpbmVkPW5vCgljb250aW51ZQoJOzsKCiAgICAgIC1vYmplY3Rs aXN0KQoJcHJldj1vYmplY3RsaXN0Cgljb250aW51ZQoJOzsKCiAgICAgIC1vczJkbGxuYW1l KQoJcHJldj1vczJkbGxuYW1lCgljb250aW51ZQoJOzsKCiAgICAgIC1vKSBwcmV2PW91dHB1 dCA7OwoKICAgICAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4KQoJcHJldj1wcmVjaW91c19yZWdl eAoJY29udGludWUKCTs7CgogICAgICAtcmVsZWFzZSkKCXByZXY9cmVsZWFzZQoJY29udGlu dWUKCTs7CgogICAgICAtcnBhdGgpCglwcmV2PXJwYXRoCgljb250aW51ZQoJOzsKCiAgICAg IC1SKQoJcHJldj14cnBhdGgKCWNvbnRpbnVlCgk7OwoKICAgICAgLVIqKQoJZnVuY19zdHJp cG5hbWUgJy1SJyAnJyAiJGFyZyIKCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgkjIFdl IG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KCWNhc2UgJGRpciBpbgoJW1xcL10qIHwgW0EtWmEt el06W1xcL10qKSA7OwoJPSopCgkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGRpciIKCSAg ZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAoJICA7OwoJKikKCSAgZnVu Y19mYXRhbF9lcnJvciAiYXJndW1lbnQgKCRhcmcpIHRvICctUicgaXMgbm90IGFuIGFic29s dXRlIHBhdGg6ICRkaXIiCgkgIDs7Cgllc2FjCgljYXNlICIkeHJwYXRoICIgaW4KCSoiICRk aXIgIiopIDs7CgkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OwoJZXNhYwoJY29u dGludWUKCTs7CgogICAgICAtc2hhcmVkKQoJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFy ZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KCWNvbnRpbnVlCgk7OwoKICAgICAgLXNo cmV4dCkKCXByZXY9c2hyZXh0Cgljb250aW51ZQoJOzsKCiAgICAgIC1zdGF0aWMgfCAtc3Rh dGljLWxpYnRvb2wtbGlicykKCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5l ZCBpbiBhIHByZXZpb3VzIGxvb3AuCgkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFs bC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywg YnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVmZmVjdHMKCSMgd291bGQgYmUgZXF1aXZh bGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAoJIyBEaWdpdGFs IFVuaXggYW5kIEFJWC4KCWNvbnRpbnVlCgk7OwoKICAgICAgLXRocmVhZC1zYWZlKQoJdGhy ZWFkX3NhZmU9eWVzCgljb250aW51ZQoJOzsKCiAgICAgIC12ZXJzaW9uLWluZm8pCglwcmV2 PXZpbmZvCgljb250aW51ZQoJOzsKCiAgICAgIC12ZXJzaW9uLW51bWJlcikKCXByZXY9dmlu Zm8KCXZpbmZvX251bWJlcj15ZXMKCWNvbnRpbnVlCgk7OwoKICAgICAgLXdlYWspCiAgICAg ICAgcHJldj13ZWFrCgljb250aW51ZQoJOzsKCiAgICAgIC1XYywqKQoJZnVuY19zdHJpcG5h bWUgJy1XYywnICcnICIkYXJnIgoJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Cglhcmc9 CglzYXZlX2lmcz0kSUZTOyBJRlM9LAoJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCgkgIElGUz0k c2F2ZV9pZnMKICAgICAgICAgIGZ1bmNfcXVvdGVfYXJnIHByZXR0eSAiJGZsYWciCgkgIGZ1 bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1b3RlX2FyZ19yZXN1bHQiCgkgIGZ1bmNfYXBwZW5k IGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKCWRvbmUKCUlGUz0k c2F2ZV9pZnMKCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKCWFyZz0kZnVuY19zdHJp cG5hbWVfcmVzdWx0Cgk7OwoKICAgICAgLVdsLCopCglmdW5jX3N0cmlwbmFtZSAnLVdsLCcg JycgIiRhcmciCglhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKCWFyZz0KCXNhdmVfaWZz PSRJRlM7IElGUz0sCglmb3IgZmxhZyBpbiAkYXJnczsgZG8KCSAgSUZTPSRzYXZlX2lmcwog ICAgICAgICAgZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkZmxhZyIKCSAgZnVuY19hcHBlbmQg YXJnICIgJHdsJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKCSAgZnVuY19hcHBlbmQgY29tcGls ZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9hcmdfcmVzdWx0IgoJICBmdW5jX2FwcGVuZCBs aW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9hcmdfcmVzdWx0IgoJZG9uZQoJSUZTPSRzYXZl X2lmcwoJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgoJYXJnPSRmdW5jX3N0cmlwbmFt ZV9yZXN1bHQKCTs7CgogICAgICAtWGFzc2VtYmxlcikKICAgICAgICBwcmV2PXhhc3NlbWJs ZXIKICAgICAgICBjb250aW51ZQogICAgICAgIDs7CgogICAgICAtWGNvbXBpbGVyKQoJcHJl dj14Y29tcGlsZXIKCWNvbnRpbnVlCgk7OwoKICAgICAgLVhsaW5rZXIpCglwcmV2PXhsaW5r ZXIKCWNvbnRpbnVlCgk7OwoKICAgICAgLVhDQ2xpbmtlcikKCXByZXY9eGNjbGlua2VyCglj b250aW51ZQoJOzsKCiAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKICAgICAgLW1zZ18qKQoJ ZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkYXJnIgoJYXJnPSRmdW5jX3F1b3RlX2FyZ19yZXN1 bHQKCTs7CgogICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwg d2l0aCByYXRpb25hbGU6CiAgICAgICMgLTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0 LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNvbXBpbGVyCiAgICAgICMgLXJbMC05XVswLTldKiAg ICAgICAgc3BlY2lmeSBwcm9jZXNzb3IgZm9yIHRoZSBTR0kgY29tcGlsZXIKICAgICAgIyAt eGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29t cGlsZXIKICAgICAgIyArREEqLCArREQqICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUg Zm9yIHRoZSBIUCBjb21waWxlcgogICAgICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBp bGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKICAgICAgIyAtbSosIC10WzQ1XSosIC10 eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQwogICAgICAjIC1G L3BhdGggICAgICAgICAgICAgIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2Nj IG9uIGRhcndpbgogICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBw cm9maWxpbmcgZmxhZ3MgZm9yIEdDQwogICAgICAjIC1mc3RhY2stcHJvdGVjdG9yKiAgIHN0 YWNrIHByb3RlY3RvciBmbGFncyBmb3IgR0NDCiAgICAgICMgQGZpbGUgICAgICAgICAgICAg ICAgR0NDIHJlc3BvbnNlIGZpbGVzCiAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9y dGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgogICAgICAjIC0tc3lzcm9v dD0qICAgICAgICAgIGZvciBzeXNyb290IHN1cHBvcnQKICAgICAgIyAtTyosIC1nKiwgLWZs dG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGlt aXphdGlvbgogICAgICAjIC1zcGVjcz0qICAgICAgICAgICAgIEdDQyBzcGVjcyBmaWxlcwog ICAgICAjIC1zdGRsaWI9KiAgICAgICAgICAgIHNlbGVjdCBjKysgc3RkIGxpYiB3aXRoIGNs YW5nCiAgICAgICMgLWZkaWFnbm9zdGljcy1jb2xvciogc2ltcGx5IGFmZmVjdHMgb3V0cHV0 CiAgICAgICMgLWZyZWNvcmQtZ2NjLXN3aXRjaGVzIHVzZWQgdG8gdmVyaWZ5IGZsYWdzIHdl cmUgcmVzcGVjdGVkCiAgICAgICMgLWZzYW5pdGl6ZT0qICAgICAgICAgQ2xhbmcvR0NDIG1l bW9yeSBhbmQgYWRkcmVzcyBzYW5pdGl6ZXIKICAgICAgIyAtZm5vLXNhbml0aXplKiAgICAg ICBDbGFuZy9HQ0MgbWVtb3J5IGFuZCBhZGRyZXNzIHNhbml0aXplcgogICAgICAjIC1zaGFy ZWQtbGlic2FuICAgICAgIExpbmsgd2l0aCBzaGFyZWQgc2FuaXRpemVyIHJ1bnRpbWVzIChD bGFuZykKICAgICAgIyAtc3RhdGljLWxpYnNhbiAgICAgICBMaW5rIHdpdGggc3RhdGljIHNh bml0aXplciBydW50aW1lcyAoQ2xhbmcpCiAgICAgICMgLW5vLWNhbm9uaWNhbC1wcmVmaXhl cyBEbyBub3QgZXhwYW5kIGFueSBzeW1ib2xpYyBsaW5rcwogICAgICAjIC1mdXNlLWxkPSog ICAgICAgICAgIExpbmtlciBzZWxlY3QgZmxhZ3MgZm9yIEdDQwogICAgICAjIC1zdGF0aWMt KiAgICAgICAgICAgIGRpcmVjdCBHQ0MgdG8gbGluayBzcGVjaWZpYyBsaWJyYXJpZXMgc3Rh dGljYWxseQogICAgICAjIC1mY2lsa3BsdXMgICAgICAgICAgIENpbGsgUGx1cyBsYW5ndWFn ZSBleHRlbnNpb24gZmVhdHVyZXMgZm9yIEMvQysrCiAgICAgICMgLXJ0bGliPSogICAgICAg ICAgICAgc2VsZWN0IGMgcnVudGltZSBsaWIgd2l0aCBjbGFuZwogICAgICAjIC0tdW53aW5k bGliPSogICAgICAgIHNlbGVjdCB1bndpbmRlciBsaWJyYXJ5IHdpdGggY2xhbmcKICAgICAg IyAtZntmaWxlfGRlYnVnfG1hY3JvfHByb2ZpbGV9LXByZWZpeC1tYXA9KiBuZWVkZWQgZm9y IGx0byBsaW5raW5nCiAgICAgICMgLVdhLCogICAgICAgICAgICAgICAgUGFzcyBmbGFncyBk aXJlY3RseSB0byB0aGUgYXNzZW1ibGVyCiAgICAgICMgLVdlcnJvciwgLVdlcnJvcj0qICAg UmVwb3J0IChzcGVjaWZpZWQpIHdhcm5pbmdzIGFzIGVycm9ycwogICAgICAtNjR8LW1pcHNb MC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwt bSp8IFwKICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9m aWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCiAgICAgIC1PKnwtZyp8LWZsdG8q fC1md2hvcHIqfC1mdXNlLWxpbmtlci1wbHVnaW58LWZzdGFjay1wcm90ZWN0b3IqfC1uby1j YW5vbmljYWwtcHJlZml4ZXN8IFwKICAgICAgLXN0ZGxpYj0qfC1ydGxpYj0qfC0tdW53aW5k bGliPSp8IFwKICAgICAgLXNwZWNzPSp8LWZzYW5pdGl6ZT0qfC1mbm8tc2FuaXRpemUqfC1z aGFyZWQtbGlic2FufC1zdGF0aWMtbGlic2FufCBcCiAgICAgIC1mZmlsZS1wcmVmaXgtbWFw PSp8LWZkZWJ1Zy1wcmVmaXgtbWFwPSp8LWZtYWNyby1wcmVmaXgtbWFwPSp8LWZwcm9maWxl LXByZWZpeC1tYXA9KnwgXAogICAgICAtZmRpYWdub3N0aWNzLWNvbG9yKnwtZnJlY29yZC1n Y2Mtc3dpdGNoZXN8IFwKICAgICAgLWZ1c2UtbGQ9Knwtc3RhdGljLSp8LWZjaWxrcGx1c3wt V2EsKnwtV2Vycm9yfC1XZXJyb3I9KikKICAgICAgICBmdW5jX3F1b3RlX2FyZyBwcmV0dHkg IiRhcmciCglhcmc9JGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdAogICAgICAgIGZ1bmNfYXBwZW5k IGNvbXBpbGVfY29tbWFuZCAiICRhcmciCiAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVf Y29tbWFuZCAiICRhcmciCiAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAk YXJnIgogICAgICAgIGNvbnRpbnVlCiAgICAgICAgOzsKCiAgICAgIC1aKikKICAgICAgICBp ZiB0ZXN0IG9zMiA9ICJgZXhwciAkaG9zdCA6ICcuKlwob3MyXCknYCI7IHRoZW4KICAgICAg ICAgICMgT1MvMiB1c2VzIC1aeHh4IHRvIHNwZWNpZnkgT1MvMi1zcGVjaWZpYyBvcHRpb25z CgkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKCSAgZnVuY19hcHBl bmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29t bWFuZCAiICRhcmciCgkgIGNhc2UgJGFyZyBpbgoJICAtWmxpbmtlciB8IC1ac3RhY2spCgkg ICAgcHJldj14Y29tcGlsZXIKCSAgICA7OwoJICBlc2FjCgkgIGNvbnRpbnVlCiAgICAgICAg ZWxzZQoJICAjIE90aGVyd2lzZSB0cmVhdCBsaWtlICdTb21lIG90aGVyIGNvbXBpbGVyIGZs YWcnIGJlbG93CgkgIGZ1bmNfcXVvdGVfYXJnIHByZXR0eSAiJGFyZyIKCSAgYXJnPSRmdW5j X3F1b3RlX2FyZ19yZXN1bHQKICAgICAgICBmaQoJOzsKCiAgICAgICMgU29tZSBvdGhlciBj b21waWxlciBmbGFnLgogICAgICAtKiB8ICsqKQogICAgICAgIGZ1bmNfcXVvdGVfYXJnIHBy ZXR0eSAiJGFyZyIKCWFyZz0kZnVuY19xdW90ZV9hcmdfcmVzdWx0Cgk7OwoKICAgICAgKi4k b2JqZXh0KQoJIyBBIHN0YW5kYXJkIG9iamVjdC4KCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJn IgoJOzsKCiAgICAgICoubG8pCgkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KCgkj IENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCglp ZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgoJICBwaWNfb2JqZWN0PQoJICBu b25fcGljX29iamVjdD0KCgkgICMgUmVhZCB0aGUgLmxvIGZpbGUKCSAgZnVuY19zb3VyY2Ug IiRhcmciCgoJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKCSAgICAgdGVzdCAteiAi JG5vbl9waWNfb2JqZWN0IiB8fAoJICAgICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiICYm CgkgICAgIHRlc3Qgbm9uZSA9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCgkgICAgZnVuY19m YXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yICckYXJnJyIKCSAg ZmkKCgkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCgkgIGZ1 bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCgkgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQK CgkgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgfHwgewoJICAgICMgUHJlcGVuZCB0aGUg c3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCgkgICAgcGljX29iamVjdD0k eGRpciRwaWNfb2JqZWN0CgoJICAgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4K CSAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgeWVz ID0gIiRkbG9wZW5fc3VwcG9ydCI7IHRoZW4KCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBp Y19vYmplY3QiCgkJcHJldj0KCQljb250aW51ZQoJICAgICAgZWxzZQoJCSMgSWYgbGlidG9v bCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCgkJ cHJldj1kbHByZWZpbGVzCgkgICAgICBmaQoJICAgIGZpCgoJICAgICMgQ0hFQ0sgTUU6ICBJ IHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCgkgICAgaWYgdGVzdCBkbHByZWZpbGVz ID0gIiRwcmV2IjsgdGhlbgoJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0 LgoJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgoJICAgICAg cHJldj0KCSAgICBmaQoKCSAgICAjIEEgUElDIG9iamVjdC4KCSAgICBmdW5jX2FwcGVuZCBs aWJvYmpzICIgJHBpY19vYmplY3QiCgkgICAgYXJnPSRwaWNfb2JqZWN0CgkgIH0KCgkgICMg Tm9uLVBJQyBvYmplY3QuCgkgIGlmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0Ijsg dGhlbgoJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91 bmQgaW4uCgkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkbm9uX3BpY19vYmplY3QKCgkgICAg IyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CgkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19v YmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgoJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0 IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiOyB0aGVuCgkgICAgICBhcmc9JG5vbl9w aWNfb2JqZWN0CgkgICAgZmkKCSAgZWxzZQoJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhp c3RzLCB1c2UgaXQgaW5zdGVhZC4KCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBp Y19vYmplY3QgYWJvdmUuCgkgICAgbm9uX3BpY19vYmplY3Q9JHBpY19vYmplY3QKCSAgICBm dW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCgkgIGZpCgll bHNlCgkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgoJICBpZiAk b3B0X2RyeV9ydW47IHRoZW4KCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhl IGFyZ3VtZW50LgoJICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCgkgICAgeGRpcj0k ZnVuY19kaXJuYW1lX3Jlc3VsdAoKCSAgICBmdW5jX2xvMm8gIiRhcmciCgkgICAgcGljX29i amVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKCSAgICBub25fcGljX29iamVj dD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CgkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRw aWNfb2JqZWN0IgoJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGlj X29iamVjdCIKCSAgZWxzZQoJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickYXJnJyBpcyBub3Qg YSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKCSAgZmkKCWZpCgk7OwoKICAgICAgKi4kbGliZXh0 KQoJIyBBbiBhcmNoaXZlLgoJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCglmdW5jX2Fw cGVuZCBvbGRfZGVwbGlicyAiICRhcmciCgljb250aW51ZQoJOzsKCiAgICAgICoubGEpCgkj IEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCgoJZnVuY19yZXNvbHZlX3N5c3Jvb3Qg IiRhcmciCglpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCgkgICMgVGhpcyBsaWJy YXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgoJICBmdW5jX2FwcGVuZCBkbGZpbGVz ICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKCSAgcHJldj0KCWVsaWYgdGVzdCBk bHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgoJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZp ZWQgd2l0aCAtZGxwcmVvcGVuLgoJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNf cmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKCSAgcHJldj0KCWVsc2UKCSAgZnVuY19hcHBlbmQg ZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCglmaQoJY29udGludWUK CTs7CgogICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgYXJndW1lbnQuCiAgICAgICopCgkj IFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGls ZV9jb21tYW5kIG5lZWQKCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0 aGV5IGFyZSBldmFsZWQgbGF0ZXIuCglmdW5jX3F1b3RlX2FyZyBwcmV0dHkgIiRhcmciCglh cmc9JGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdAoJOzsKICAgICAgZXNhYyAjIGFyZwoKICAgICAg IyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFu ZHMuCiAgICAgIGlmIHRlc3QgLW4gIiRhcmciOyB0aGVuCglpZiB0ZXN0IC1uICIkcnBhdGhf YXJnIjsgdGhlbgogICAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAke2Fy ZyMjKix9IgoJICB1bnNldCBycGF0aF9hcmcKCWVsc2UKCSAgY2FzZSAkYXJnIGluCiAgICAg ICAgICAtV2wsLXJwYXRoLCopCgkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAk e2FyZyMjKix9Ijs7CiAgICAgICAgICAtV2wsLXJwYXRoKQoJICAgIHJwYXRoX2FyZz0xOzsK ICAgICAgICAgICopCiAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAi ICRhcmciCgkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCgkgIGVz YWMKICAgICAgICBmaQogICAgICBmaQogICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9v cAoKICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCiAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhl ICckcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgoKICAgIGlmIHRlc3Qg eWVzID0gIiRleHBvcnRfZHluYW1pYyIgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2Zs YWdfc3BlYyI7IHRoZW4KICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19z cGVjXCIKICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKICAgICAg ZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCiAgICBmaQoKICAgIG9sZGxp YnM9CiAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMg ZGlyZWN0b3J5CiAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgogICAgb3V0cHV0bmFtZT0k ZnVuY19iYXNlbmFtZV9yZXN1bHQKICAgIGxpYm9ianNfc2F2ZT0kbGlib2JqcwoKICAgIGlm IHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgogICAgICAjIGdldCB0aGUgZGlyZWN0 b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCiAgICAgIGV2YWwgc2hsaWJfc2VhcmNo X3BhdGg9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgXHwgXCRTRUQgXCdzLzovIC9n XCdcYAogICAgZWxzZQogICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KICAgIGZpCiAgICBldmFs IHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKICAg IGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9z cGVjXCIKCiAgICAjIERlZmluaXRpb24gaXMgaW5qZWN0ZWQgYnkgTFRfQ09ORklHIGR1cmlu ZyBsaWJ0b29sIGdlbmVyYXRpb24uCiAgICBmdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGli X2Rsc2VhcmNoX3BhdGggIiRMVF9TWVNfTElCUkFSWV9QQVRIIgoKICAgIGZ1bmNfZGlybmFt ZSAiJG91dHB1dCIgIi8iICIiCiAgICBvdXRwdXRfb2JqZGlyPSRmdW5jX2Rpcm5hbWVfcmVz dWx0JG9iamRpcgogICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKICAg IHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CiAgICAjIENy ZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9v YmpkaXIiCgogICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CiAgICBjYXNlICRv dXRwdXQgaW4KICAgICIiKQogICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNp ZnkgYW4gb3V0cHV0IGZpbGUiCiAgICAgIDs7CiAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9s ZGxpYiA7OwogICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CiAgICAqLmxh KSBsaW5rbW9kZT1saWIgOzsKICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBl bHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCiAgICBlc2FjCgogICAgc3BlY2lhbGRlcGxpYnM9 CgogICAgbGlicz0KICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBz ZWFyY2hpbmcgZm9yIGxpYnJhcmllcwogICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFu IG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCiAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBk bwogICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCgljYXNlICIkbGlicyAi IGluCgkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBs aWIiIDs7Cgllc2FjCiAgICAgIGZpCiAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGli IgogICAgZG9uZQoKICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KICAgICAg bGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRl cHMiCgogICAgICAjIENvbXB1dGUgbGlicmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRo YW4gb25jZSBpbiAkcHJlZGVwcwogICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFz IHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCiAgICAgICMgbm90IHRvIGJl IGVsaW1pbmF0ZWQpLgogICAgICBwcmVfcG9zdF9kZXBzPQogICAgICBpZiAkb3B0X2R1cGxp Y2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgoJZm9yIHByZV9wb3N0X2RlcCBp biAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCgkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4K CSAgKiIgJHByZV9wb3N0X2RlcCAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAk cHJlX3Bvc3RfZGVwcyIgOzsKCSAgZXNhYwoJICBmdW5jX2FwcGVuZCBwcmVfcG9zdF9kZXBz ICIgJHByZV9wb3N0X2RlcCIKCWRvbmUKICAgICAgZmkKICAgICAgcHJlX3Bvc3RfZGVwcz0K ICAgIGZpCgogICAgZGVwbGlicz0KICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KICAgIG5ld2xp Yl9zZWFyY2hfcGF0aD0KICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5r aW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwogICAgbm90aW5zdF9kZXBs aWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKICAgIG5vdGluc3RfcGF0 aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmll cwoKICAgIGNhc2UgJGxpbmttb2RlIGluCiAgICBsaWIpCglwYXNzZXM9ImNvbnYgZGxwcmVv cGVuIGxpbmsiCglmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KCSAgY2Fz ZSAkZmlsZSBpbgoJICAqLmxhKSA7OwoJICAqKQoJICAgIGZ1bmNfZmF0YWxfaGVscCAibGli cmFyaWVzIGNhbiAnLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCgkg ICAgOzsKCSAgZXNhYwoJZG9uZQoJOzsKICAgIHByb2cpCgljb21waWxlX2RlcGxpYnM9Cglm aW5hbGl6ZV9kZXBsaWJzPQoJYWxsZGVwbGlicz1mYWxzZQoJbmV3ZGxmaWxlcz0KCW5ld2Rs cHJlZmlsZXM9CglwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCgk7 OwogICAgKikgIHBhc3Nlcz0iY29udiIKCTs7CiAgICBlc2FjCgogICAgZm9yIHBhc3MgaW4g JHBhc3NlczsgZG8KICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVy c2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCiAgICAgICMgc28gdGhhdCAtTCBjb21l cyBiZWZvcmUgbGlicyB0aGF0IG5lZWQgaXQgZm9yIGluc3RhbmNlLi4uCiAgICAgIGlmIHRl c3QgbGliLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgoJIyMgRklYTUU6IEZpbmQg dGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCgkjIyAg ICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKICAgICAgICB0bXBfZGVw bGlicz0KCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCgkgIHRtcF9kZXBsaWJzPSIkZGVw bGliICR0bXBfZGVwbGlicyIKCWRvbmUKCWRlcGxpYnM9JHRtcF9kZXBsaWJzCiAgICAgIGZp CgogICAgICBpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKCSB0ZXN0 IHByb2csc2NhbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCglsaWJzPSRkZXBsaWJzCglk ZXBsaWJzPQogICAgICBmaQogICAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhl bgoJY2FzZSAkcGFzcyBpbgoJZGxvcGVuKSBsaWJzPSRkbGZpbGVzIDs7CglkbHByZW9wZW4p IGxpYnM9JGRscHJlZmlsZXMgOzsKCWxpbmspIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSAk ZGVwZW5kZW5jeV9saWJzIiA7OwoJZXNhYwogICAgICBmaQogICAgICBpZiB0ZXN0IGxpYixk bHByZW9wZW4gPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgoJIyBDb2xsZWN0IGFuZCBmb3J3 YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicwoJZm9yIGxpYiBpbiAkZGxw cmVmaWxlczsgZG8KCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicwoJICBkZXBlbmRlbmN5 X2xpYnM9CgkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgoJICBjYXNlICRsaWIgaW4K CSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7 CgkgIGVzYWMKCgkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNl cHQgYW55IHRoaXMgbGlicmFyeQoJICAjIGhhcyBkZWNsYXJlZCBhcyB3ZWFrIGxpYnMKCSAg Zm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwoJICAgIGZ1bmNfYmFzZW5hbWUg IiRkZXBsaWIiCiAgICAgICAgICAgIGRlcGxpYl9iYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3Vs dAoJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KCSAgICAqIiAkZGVwbGliX2Jhc2UgIiop IDs7CgkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRkZXBsaWIiIDs7CgkgICAgZXNh YwoJICBkb25lCglkb25lCglsaWJzPSRkbHByZWZpbGVzCiAgICAgIGZpCiAgICAgIGlmIHRl c3QgZGxvcGVuID0gIiRwYXNzIjsgdGhlbgoJIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJh cmllcwoJc2F2ZV9kZXBsaWJzPSRkZXBsaWJzCglkZXBsaWJzPQogICAgICBmaQoKICAgICAg Zm9yIGRlcGxpYiBpbiAkbGliczsgZG8KCWxpYj0KCWZvdW5kPWZhbHNlCgljYXNlICRkZXBs aWIgaW4KCS1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJl YWRzfC0tdGhyZWFkLXNhZmUgXAogICAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtZm9wZW5t cD0qfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKCSAgaWYgdGVzdCBwcm9n LGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgoJICAgIGNvbXBpbGVfZGVwbGlicz0i JGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgoJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBs aWIgJGZpbmFsaXplX2RlcGxpYnMiCgkgIGVsc2UKCSAgICBmdW5jX2FwcGVuZCBjb21waWxl cl9mbGFncyAiICRkZXBsaWIiCgkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhl bgoJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCgkJICAgICoiICRk ZXBsaWIgIiopIDs7CgkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtl cl9mbGFncyAiICRkZXBsaWIiIDs7CgkJZXNhYwoJICAgIGZpCgkgIGZpCgkgIGNvbnRpbnVl CgkgIDs7CgktbCopCgkgIGlmIHRlc3QgbGliICE9ICIkbGlua21vZGUiICYmIHRlc3QgcHJv ZyAhPSAiJGxpbmttb2RlIjsgdGhlbgoJICAgIGZ1bmNfd2FybmluZyAiJy1sJyBpcyBpZ25v cmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgoJICAgIGNvbnRpbnVlCgkgIGZpCgkgIGZ1bmNf c3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCgkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jl c3VsdAoJICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCgkgICAgc2VhcmNoZGly cz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJf c2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgoJ ICBlbHNlCgkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJj aF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKCSAgZmkK CSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KCSAgICBmb3Igc2VhcmNoX2V4 dCBpbiAubGEgJHN0ZF9zaHJleHQgLnNvIC5hOyBkbwoJICAgICAgIyBTZWFyY2ggdGhlIGxp YnRvb2wgbGlicmFyeQoJICAgICAgbGliPSRzZWFyY2hkaXIvbGliJG5hbWUkc2VhcmNoX2V4 dAoJICAgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KCQlpZiB0ZXN0IC5sYSA9ICIkc2Vh cmNoX2V4dCI7IHRoZW4KCQkgIGZvdW5kPToKCQllbHNlCgkJICBmb3VuZD1mYWxzZQoJCWZp CgkJYnJlYWsgMgoJICAgICAgZmkKCSAgICBkb25lCgkgIGRvbmUKCSAgaWYgJGZvdW5kOyB0 aGVuCgkgICAgIyBkZXBsaWIgaXMgYSBsaWJ0b29sIGxpYnJhcnkKCSAgICAjIElmICRhbGxv d19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0 ZGxpYiwKCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBh bmQgbm90IGxhdGVyLgoJICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNf d2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCgkgICAgICBjYXNlICIgJHByZWRlcHMgJHBv c3RkZXBzICIgaW4KCSAgICAgICoiICRkZXBsaWIgIiopCgkJaWYgZnVuY19sYWxpYl9wICIk bGliIjsgdGhlbgoJCSAgbGlicmFyeV9uYW1lcz0KCQkgIG9sZF9saWJyYXJ5PQoJCSAgZnVu Y19zb3VyY2UgIiRsaWIiCgkJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFt ZXM7IGRvCgkJICAgIGxsPSRsCgkJICBkb25lCgkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9s ZF9saWJyYXJ5IjsgdGhlbiAjIG9ubHkgc3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCgkJICAg IGZvdW5kPWZhbHNlCgkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCgkJICAgIGxh ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CgkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5 CgkJICAgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KCQkg ICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKCQkgICAg ICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgoJCSAgICBl bHNlCgkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKCQkgICAgICB0ZXN0IGxp YiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVw ZW5kZW5jeV9saWJzIgoJCSAgICBmaQoJCSAgICBjb250aW51ZQoJCSAgZmkKCQlmaQoJCTs7 CgkgICAgICAqKSA7OwoJICAgICAgZXNhYwoJICAgIGZpCgkgIGVsc2UKCSAgICAjIGRlcGxp YiBkb2Vzbid0IHNlZW0gdG8gYmUgYSBsaWJ0b29sIGxpYnJhcnkKCSAgICBpZiB0ZXN0IHBy b2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCgkgICAgICBjb21waWxlX2RlcGxp YnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9 IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCgkgICAgZWxzZQoJICAgICAgZGVwbGlicz0i JGRlcGxpYiAkZGVwbGlicyIKCSAgICAgIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYgbmV3 ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCgkgICAgZmkK CSAgICBjb250aW51ZQoJICBmaQoJICA7OyAjIC1sCgkqLmx0ZnJhbWV3b3JrKQoJICBpZiB0 ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCgkgICAgY29tcGlsZV9k ZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCgkgICAgZmluYWxpemVfZGVwbGli cz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKCSAgZWxzZQoJICAgIGRlcGxpYnM9IiRk ZXBsaWIgJGRlcGxpYnMiCgkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgoJ CWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCgkJICAgICoiICRkZXBs aWIgIiopIDs7CgkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9m bGFncyAiICRkZXBsaWIiIDs7CgkJZXNhYwoJICAgIGZpCgkgIGZpCgkgIGNvbnRpbnVlCgkg IDs7CgktTCopCgkgIGNhc2UgJGxpbmttb2RlIGluCgkgIGxpYikKCSAgICBkZXBsaWJzPSIk ZGVwbGliICRkZXBsaWJzIgoJICAgIHRlc3QgY29udiA9ICIkcGFzcyIgJiYgY29udGludWUK CSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIK CSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgoJICAgIGZ1bmNfcmVzb2x2 ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgoJICAgIGZ1bmNfYXBwZW5kIG5l d2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCgkgICAg OzsKCSAgcHJvZykKCSAgICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCgkgICAgICBk ZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgoJICAgICAgY29udGludWUKCSAgICBmaQoJICAg IGlmIHRlc3Qgc2NhbiA9ICIkcGFzcyI7IHRoZW4KCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIg JGRlcGxpYnMiCgkgICAgZWxzZQoJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRj b21waWxlX2RlcGxpYnMiCgkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5h bGl6ZV9kZXBsaWJzIgoJICAgIGZpCgkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRl cGxpYiIKCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3Vs dCIKCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZl X3N5c3Jvb3RfcmVzdWx0IgoJICAgIDs7CgkgICopCgkgICAgZnVuY193YXJuaW5nICInLUwn IGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCgkgICAgOzsKCSAgZXNhYyAjIGxp bmttb2RlCgkgIGNvbnRpbnVlCgkgIDs7ICMgLUwKCS1SKikKCSAgaWYgdGVzdCBsaW5rID0g IiRwYXNzIjsgdGhlbgoJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCgkg ICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCgkgICAg ZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKCSAgICAjIE1ha2Ugc3VyZSB0aGUg eHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgoJICAgIGNhc2UgIiR4 cnBhdGggIiBpbgoJICAgICoiICRkaXIgIiopIDs7CgkgICAgKikgZnVuY19hcHBlbmQgeHJw YXRoICIgJGRpciIgOzsKCSAgICBlc2FjCgkgIGZpCgkgIGRlcGxpYnM9IiRkZXBsaWIgJGRl cGxpYnMiCgkgIGNvbnRpbnVlCgkgIDs7CgkqLmxhKQoJICBmdW5jX3Jlc29sdmVfc3lzcm9v dCAiJGRlcGxpYiIKCSAgbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKCSAgOzsK CSouJGxpYmV4dCkKCSAgaWYgdGVzdCBjb252ID0gIiRwYXNzIjsgdGhlbgoJICAgIGRlcGxp YnM9IiRkZXBsaWIgJGRlcGxpYnMiCgkgICAgY29udGludWUKCSAgZmkKCSAgY2FzZSAkbGlu a21vZGUgaW4KCSAgbGliKQoJICAgICMgTGlua2luZyBjb252ZW5pZW5jZSBtb2R1bGVzIGlu dG8gc2hhcmVkIGxpYnJhcmllcyBpcyBhbGxvd2VkLAoJICAgICMgYnV0IGxpbmtpbmcgb3Ro ZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCgkgICAgY2FzZSAiICRkbHBy ZWNvbnZlbmllbmNlbGlicyAiIGluCgkgICAgKiIgJGRlcGxpYiAiKikgOzsKCSAgICAqKQoJ ICAgICAgdmFsaWRfYV9saWI9ZmFsc2UKCSAgICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0 aG9kIGluCgkJbWF0Y2hfcGF0dGVybiopCgkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tf bWV0aG9kOyBzaGlmdAoJCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNf Y2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAoJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRl cGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKCQkgICAgfCAkRUdSRVAgIiRtYXRj aF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgoJCSAgICB2YWxpZF9hX2xpYj06 CgkJICBmaQoJCTs7CgkJcGFzc19hbGwpCgkJICB2YWxpZF9hX2xpYj06CgkJOzsKCSAgICAg IGVzYWMKCSAgICAgIGlmICR2YWxpZF9hX2xpYjsgdGhlbgoJCWZ1bmNfd2FybmluZyAiTGlu a2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBzdGF0aWMgbGli cmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCgkJZGVwbGlicz0iJGRlcGxpYiAkZGVw bGlicyIKCSAgICAgIGVsc2UKCQlmdW5jX3dhcm5pbmcgIlRyeWluZyB0byBsaW5rIHdpdGgg c3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgoJCWZ1bmNfd2FybmluZyAiSSBoYXZlIHRo ZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBp biB3aGVuIgoJCWZ1bmNfd2FybmluZyAieW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0 IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgoJCWZ1bmNfd2FybmluZyAic2hh cmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRv IGhhdmUiCgkJZnVuY193YXJuaW5nICJiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRs aWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgoJCWZ1bmNfd2Fybmlu ZyAidGhhdCBpdCBpcyBqdXN0IGEgc3RhdGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3Qg dXNlIGhlcmUuIgoJICAgICAgZmkKCSAgICAgIDs7CgkgICAgZXNhYwoJICAgIGNvbnRpbnVl CgkgICAgOzsKCSAgcHJvZykKCSAgICBpZiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgoJ ICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKCSAgICBlbHNlCgkgICAgICBjb21w aWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKCSAgICAgIGZpbmFsaXpl X2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCgkgICAgZmkKCSAgICBjb250 aW51ZQoJICAgIDs7CgkgIGVzYWMgIyBsaW5rbW9kZQoJICA7OyAjICouJGxpYmV4dAoJKi5s byB8ICouJG9iamV4dCkKCSAgaWYgdGVzdCBjb252ID0gIiRwYXNzIjsgdGhlbgoJICAgIGRl cGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCgkgIGVsaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9k ZSI7IHRoZW4KCSAgICBpZiB0ZXN0IGRscHJlb3BlbiA9ICIkcGFzcyIgfHwgdGVzdCB5ZXMg IT0gIiRkbG9wZW5fc3VwcG9ydCIgfHwgdGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJz IjsgdGhlbgoJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdy ZSBsaW5raW5nIHN0YXRpY2FsbHksCgkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KCSAg ICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGVwbGliIgoJICAgICAgY29tcGls ZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCgkgICAgICBmaW5hbGl6ZV9k ZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgoJICAgIGVsc2UKCSAgICAgIGZ1 bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgoJICAgIGZpCgkgIGZpCgkgIGNvbnRp bnVlCgkgIDs7CgklREVQTElCUyUpCgkgIGFsbGRlcGxpYnM9OgoJICBjb250aW51ZQoJICA7 OwoJZXNhYyAjIGNhc2UgJGRlcGxpYgoKCSRmb3VuZCB8fCB0ZXN0IC1mICIkbGliIiBcCgkg IHx8IGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5ICckbGliJyBv ciB1bmhhbmRsZWQgYXJndW1lbnQgJyRkZXBsaWInIgoKCSMgQ2hlY2sgdG8gc2VlIHRoYXQg dGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCglmdW5jX2xhbGliX3Vuc2FmZV9w ICIkbGliIiBcCgkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxp ZCBsaWJ0b29sIGFyY2hpdmUiCgoJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKCWxhZGly PSRmdW5jX2Rpcm5hbWVfcmVzdWx0CgoJZGxuYW1lPQoJZGxvcGVuPQoJZGxwcmVvcGVuPQoJ bGliZGlyPQoJbGlicmFyeV9uYW1lcz0KCW9sZF9saWJyYXJ5PQoJaW5oZXJpdGVkX2xpbmtl cl9mbGFncz0KCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCBy ZWxlYXNlIG9mIGxpYnRvb2wsCgkjIGl0IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlcyBp bnN0YWxsZWQsIG9yIHNob3VsZG5vdGxpbmsKCWluc3RhbGxlZD15ZXMKCXNob3VsZG5vdGxp bms9bm8KCWF2b2lkdGVtcHJwYXRoPQoKCgkjIFJlYWQgdGhlIC5sYSBmaWxlCglmdW5jX3Nv dXJjZSAiJGxpYiIKCgkjIENvbnZlcnQgIi1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJh bWV3b3JrIgoJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCgkg IHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJf ZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsv ZydgCgkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVk X2xpbmtlcl9mbGFnczsgZG8KCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2Zs YWdzICIgaW4KCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OwoJ ICAgICAgKikgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1w X2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OwoJICAgIGVzYWMKCSAgZG9uZQoJZmkKCWRlcGVu ZGVuY3lfbGlicz1gJEVDSE8gIiAkZGVwZW5kZW5jeV9saWJzIiB8ICRTRUQgJ3MlIFwoW14g JF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCglpZiB0ZXN0IGxpYixsaW5r ID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKCSAgIHRlc3QgcHJvZyxzY2FuID0gIiRsaW5rbW9k ZSwkcGFzcyIgfHwKCSAgIHsgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGli ICE9ICIkbGlua21vZGUiOyB9OyB0aGVuCgkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGZ1bmNf YXBwZW5kIGRsZmlsZXMgIiAkZGxvcGVuIgoJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBm dW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGRscHJlb3BlbiIKCWZpCgoJaWYgdGVzdCBjb252 ID0gIiRwYXNzIjsgdGhlbgoJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJh cmllcwoJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgoJICBpZiB0ZXN0IC16ICIkbGliZGly IjsgdGhlbgoJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KCSAgICAgIGZ1 bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciAn JGxpYiciCgkgICAgZmkKCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJy YXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCgkgICAgZnVuY19hcHBlbmQgY29udmVuaWVu Y2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCgkgICAgZnVuY19hcHBlbmQgb2xk X2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgoJICBlbGlmIHRl c3QgcHJvZyAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIjsgdGhl bgoJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBs aWJyYXJ5IgoJICBmaQoJICB0bXBfbGlicz0KCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5j eV9saWJzOyBkbwoJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCgkgICAgaWYgJG9w dF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgoJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4K CSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRl cGxpYiIgOzsKCSAgICAgIGVzYWMKCSAgICBmaQoJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJz ICIgJGRlcGxpYiIKCSAgZG9uZQoJICBjb250aW51ZQoJZmkgIyAkcGFzcyA9IGNvbnYKCgoJ IyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgoJbGlua2xp Yj0KCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKCSAgIHsgdGVzdCB5ZXMgPSAiJHBy ZWZlcl9zdGF0aWNfbGlicyIgfHwKCSAgICAgdGVzdCBidWlsdCxubyA9ICIkcHJlZmVyX3N0 YXRpY19saWJzLCRpbnN0YWxsZWQiOyB9OyB0aGVuCgkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5 CgllbHNlCgkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KCSAg ICBsaW5rbGliPSRsCgkgIGRvbmUKCWZpCglpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4K CSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkg Zm9yICckbGliJyIKCWZpCgoJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1k bG9wZW4uCglpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KCSAgdGVzdCAteiAiJGxp YmRpciIgXAoJICAgICYmIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29u dmVuaWVuY2UgbGlicmFyeTogJyRsaWInIgoJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAoJ ICAgICB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fAoJICAgICB0ZXN0IG5vID0g IiRidWlsZF9saWJ0b29sX2xpYnMiCgkgIHRoZW4KCSAgICAjIElmIHRoZXJlIGlzIG5vIGRs bmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZwoJICAgICMgc3RhdGlj YWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55 CgkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9h ZGVyIGRvZXNuJ3QKCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2Uu CgkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIK CSAgZWxzZQoJICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgoJICBmaQoJICBj b250aW51ZQoJZmkgIyAkcGFzcyA9IGRsb3BlbgoKCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBw YXRoLgoJY2FzZSAkbGFkaXIgaW4KCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xh ZGlyPSRsYWRpciA7OwoJKikKCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCgkg IGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCgkgICAgZnVuY193YXJuaW5nICJjYW5u b3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckbGFkaXInIgoJICAg IGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0 aG91Z2ggaXQgbWlnaHQgZmFpbCIKCSAgICBhYnNfbGFkaXI9JGxhZGlyCgkgIGZpCgkgIDs7 Cgllc2FjCglmdW5jX2Jhc2VuYW1lICIkbGliIgoJbGFuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jl c3VsdAoKCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFy eSBuYW1lLgoJaWYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KCSAgaWYgdGVzdCAh IC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFk aXIvJGxpbmtsaWIiOyB0aGVuCgkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5ICckbGliJyB3 YXMgbW92ZWQuIgoJICAgIGRpcj0kbGFkaXIKCSAgICBhYnNkaXI9JGFic19sYWRpcgoJICAg IGxpYmRpcj0kYWJzX2xhZGlyCgkgIGVsc2UKCSAgICBkaXI9JGx0X3N5c3Jvb3QkbGliZGly CgkgICAgYWJzZGlyPSRsdF9zeXNyb290JGxpYmRpcgoJICBmaQoJICB0ZXN0IHllcyA9ICIk aGFyZGNvZGVfYXV0b21hdGljIiAmJiBhdm9pZHRlbXBycGF0aD15ZXMKCWVsc2UKCSAgaWYg dGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19s YWRpci8kbGlua2xpYiI7IHRoZW4KCSAgICBkaXI9JGxhZGlyCgkgICAgYWJzZGlyPSRhYnNf bGFkaXIKCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCgkgICAgZnVuY19h cHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKCSAgZWxzZQoJICAgIGRpcj0kbGFk aXIvJG9iamRpcgoJICAgIGFic2Rpcj0kYWJzX2xhZGlyLyRvYmpkaXIKCSAgICAjIFJlbW92 ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCgkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRo ICIgJGFic19sYWRpciIKCSAgZmkKCWZpICMgJGluc3RhbGxlZCA9IHllcwoJZnVuY19zdHJp cG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCgluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1 bHQKCgkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KCWlm IHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIjsgdGhlbgoJICBpZiB0ZXN0IC16ICIkbGliZGly IiAmJiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgoJICAgIGZ1bmNfZmF0YWxfZXJy b3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFy eTogJyRsaWInIgoJICBmaQoJICBjYXNlICRob3N0IGluCgkgICAgIyBzcGVjaWFsIGhhbmRs aW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgoJICAgICpjeWd3aW4qIHwgKm1pbmd3 KiB8ICp3aW5kb3dzKiB8ICpjZWdjYyogKQoJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0 aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCgkgICAgICAjIHN0 YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVzZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0 cmFjdAoJICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hh cmVkIGxpYnJhcnkgaXMgcHJlc2VudAoJICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVu IG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5jb3JyZWN0KS4gIFdlIGRvCgkgICAgICAjIHRoaXMg YnkgcHV0dGluZyB0aGUgaW1wb3J0IGxpYnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVz LgoJICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3Nhdmlu ZycgdGhlIGxhIGZpbGUKCSAgICAgICMgbmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJp YWJsZSwgYW5kIChsYXRlcikgZXh0cmFjdGluZyB0aGUKCSAgICAgICMgZGxuYW1lIGZyb20g dGhlIGxhIGZpbGUuCgkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgoJICAgICAg ICBmdW5jX3RyX3NoICIkZGlyLyRsaW5rbGliIgoJICAgICAgICBldmFsICJsaWJmaWxlXyRm dW5jX3RyX3NoX3Jlc3VsdD1cJGFic19sYWRpci9cJGxhbmFtZSIKCSAgICAgICAgZnVuY19h cHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCgkgICAgICBlbHNlCgkgICAg ICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKCSAg ICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVz IHRvIGNoZWNrCgkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3Rs eSBpbiB0aGUgbGluayBwYXNzLgoJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCgkg ICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRf bGlicmFyeSIKCSAgICAgIGZpCgkgICAgOzsKCSAgICAqICkKCSAgICAgICMgUHJlZmVyIHVz aW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9s cwoJICAgICAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCgkgICAgICBpZiB0ZXN0IC1uICIk b2xkX2xpYnJhcnkiOyB0aGVuCgkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMg IiAkZGlyLyRvbGRfbGlicmFyeSIKCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVu ZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCgkgICAgICAgICMgdGhhdCB0aGV5 IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgoJICAgICAgICB0 ZXN0IC16ICIkbGliZGlyIiAmJiBcCgkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252 ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKCSAgICAgICMgT3RoZXJ3aXNlLCB1 c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCgkgICAgICBlbGlm IHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCgkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJl ZmlsZXMgIiAkZGlyLyRkbG5hbWUiCgkgICAgICBlbHNlCgkgICAgICAgIGZ1bmNfYXBwZW5k IG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgoJICAgICAgZmkKCSAgICA7OwoJICBl c2FjCglmaSAjICRwYXNzID0gZGxwcmVvcGVuCgoJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRo ZW4KCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5CgkgIGlmIHRlc3QgbGliID0g IiRsaW5rbW9kZSI7IHRoZW4KCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVw bGlicyIKCSAgZWxpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVu CgkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBs aWJzIgoJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6 ZV9kZXBsaWJzIgoJICBlbHNlCgkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2Vk IGZvciBwcm9nLHNjYW4gcGFzcwoJICBmaQoJICBjb250aW51ZQoJZmkKCgoJaWYgdGVzdCBw cm9nID0gIiRsaW5rbW9kZSIgJiYgdGVzdCBsaW5rICE9ICIkcGFzcyI7IHRoZW4KCSAgZnVu Y19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgoJICBkZXBsaWJzPSIkbGli ICRkZXBsaWJzIgoKCSAgbGlua2FsbGRlcGxpYnM9ZmFsc2UKCSAgaWYgdGVzdCBubyAhPSAi JGxpbmtfYWxsX2RlcGxpYnMiIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAoJICAg ICB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCgkgICAgbGlua2FsbGRl cGxpYnM9OgoJICBmaQoKCSAgdG1wX2xpYnM9CgkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVu Y3lfbGliczsgZG8KCSAgICBjYXNlICRkZXBsaWIgaW4KCSAgICAtTCopIGZ1bmNfc3RyaXBu YW1lICctTCcgJycgIiRkZXBsaWIiCgkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAi JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKCSAgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9z ZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCgkJIDs7CgkgICAg ZXNhYwoJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8K CSAgICBpZiAkbGlua2FsbGRlcGxpYnM7IHRoZW4KCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIg JGRlcGxpYnMiCgkgICAgZWxzZQoJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBs aWJyYXJ5IHBhdGhzCgkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJh cmllcwoJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5 X2xpYnMiCgkgICAgZmkKCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCgkg ICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgoJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19h cHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwoJICAgICAgZXNhYwoJICAgIGZp CgkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgoJICBkb25lICMgZm9yIGRl cGxpYgoJICBjb250aW51ZQoJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCgoJaWYgdGVzdCBw cm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgoJICBpZiB0ZXN0IC1uICIkbGli cmFyeV9uYW1lcyIgJiYKCSAgICAgeyB7IHRlc3Qgbm8gPSAiJHByZWZlcl9zdGF0aWNfbGli cyIgfHwKCSAgICAgICAgIHRlc3QgYnVpbHQseWVzID0gIiRwcmVmZXJfc3RhdGljX2xpYnMs JGluc3RhbGxlZCI7IH0gfHwKCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0 aGVuCgkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKCSAgICBp ZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRo IjsgdGhlbgoJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5p cXVlIGRpcmVjdG9yaWVzLgoJICAgICAgY2FzZSAkdGVtcF9ycGF0aDogaW4KCSAgICAgICoi JGFic2RpcjoiKikgOzsKICAgICAgICAgICAgICAqKSBjYXNlICRhYnNkaXIgaW4KICAgICAg ICAgICAgICAgICAiJHByb2dkaXIvIiopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNk aXI6IiA7OwogICAgICAgICAgICAgICAgICopICAgICAgICAgICAgZnVuY19hcHBlbmQgdGVt cF9ycGF0aF90YWlsICIkYWJzZGlyOiIgOzsKICAgICAgICAgICAgICAgICBlc2FjCgkgICAg ICBlc2FjCgkgICAgZmkKCgkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgoJICAg ICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVu LXRpbWUKCSAgICAjIHNlYXJjaCBwYXRoLgoJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJj aF9wYXRoICIgaW4KCSAgICAqIiAkYWJzZGlyICIqKSA7OwoJICAgICopCgkgICAgICBjYXNl ICIkY29tcGlsZV9ycGF0aCRjb21waWxlX3JwYXRoX3RhaWwgIiBpbgoJICAgICAgKiIgJGFi c2RpciAiKikgOzsKCSAgICAgICopIGNhc2UgJGFic2RpciBpbgogICAgICAgICAgICAgICAg ICIkcHJvZ2Rpci8iKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7 CiAgICAgICAgICAgICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aF90YWlsICIg JGFic2RpciIgOzsKCQkgZXNhYwoJICAgICAgZXNhYwoJICAgICAgOzsKCSAgICBlc2FjCgkg ICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgoJICAgICoiICRsaWJkaXIg IiopIDs7CgkgICAgKikKCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCgkgICAg ICAqIiAkbGliZGlyICIqKSA7OwoJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBh dGggIiAkbGliZGlyIiA7OwoJICAgICAgZXNhYwoJICAgICAgOzsKCSAgICBlc2FjCgkgIGZp ICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCgoJICBpZiAkYWxsZGVwbGlicyAm JgoJICAgICB7IHRlc3QgcGFzc19hbGwgPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8fAoJ ICAgICAgIHsgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYKCQkgdGVzdCAt biAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCgkgICAgIyBXZSBvbmx5IG5lZWQgdG8g c2VhcmNoIGZvciBzdGF0aWMgbGlicmFyaWVzCgkgICAgY29udGludWUKCSAgZmkKCWZpCgoJ bGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3Rh dGljYWxseQoJdXNlX3N0YXRpY19saWJzPSRwcmVmZXJfc3RhdGljX2xpYnMKCWlmIHRlc3Qg YnVpbHQgPSAiJHVzZV9zdGF0aWNfbGlicyIgJiYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7 IHRoZW4KCSAgdXNlX3N0YXRpY19saWJzPW5vCglmaQoJaWYgdGVzdCAtbiAiJGxpYnJhcnlf bmFtZXMiICYmCgkgICB7IHRlc3Qgbm8gPSAiJHVzZV9zdGF0aWNfbGlicyIgfHwgdGVzdCAt eiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgoJICBjYXNlICRob3N0X29zIGluCgkgIGN5Z3dp biogfCBtaW5ndyogfCB3aW5kb3dzKiB8IGNlZ2NjKiB8IG9zMiopCgkgICAgICAjIE5vIHBv aW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCgkg ICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgoJICAgICAgbmVlZF9y ZWxpbms9bm8KCSAgICA7OwoJICAqKQoJICAgIGlmIHRlc3Qgbm8gPSAiJGluc3RhbGxlZCI7 IHRoZW4KCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCgkgICAg ICBuZWVkX3JlbGluaz15ZXMKCSAgICBmaQoJICAgIDs7CgkgIGVzYWMKCSAgIyBUaGlzIGlz IGEgc2hhcmVkIGxpYnJhcnkKCgkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3Qg bGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCgkgICMgc3lzdGVtcyAoZGFyd2luKS4g IERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQoJICBkbG9wZW5t b2R1bGU9CgkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCgkgICAg aWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgoJICAgICAgZGxv cGVubW9kdWxlPSRkbHByZW1vZHVsZXRlc3QKCSAgICAgIGJyZWFrCgkgICAgZmkKCSAgZG9u ZQoJICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0IHllcyA9ICIkc2hvdWxk bm90bGluayIgJiYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgoJICAgIGVjaG8KCSAgICBp ZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgoJICAgICAgZnVuY193YXJuaW5nICJM aW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9k dWxlIgoJICAgIGVsc2UKCSAgICAgIGZ1bmNfd2FybmluZyAiTGlua2luZyB0aGUgc2hhcmVk IGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCgkgICAgZmkK CSAgICBmdW5jX3dhcm5pbmcgIiRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCgkgIGZpCgkg IGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYKCSAgICAgdGVzdCB5ZXMgPSAiJGhhcmRj b2RlX2ludG9fbGlicyI7IHRoZW4KCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgu CgkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVs dCBydW4tdGltZQoJICAgICMgc2VhcmNoIHBhdGguCgkgICAgY2FzZSAiICRzeXNfbGliX2Rs c2VhcmNoX3BhdGggIiBpbgoJICAgICoiICRhYnNkaXIgIiopIDs7CgkgICAgKikKCSAgICAg IGNhc2UgIiRjb21waWxlX3JwYXRoJGNvbXBpbGVfcnBhdGhfdGFpbCAiIGluCgkgICAgICAq IiAkYWJzZGlyICIqKSA7OwoJICAgICAgKikgY2FzZSAkYWJzZGlyIGluCiAgICAgICAgICAg ICAgICAgIiRwcm9nZGlyLyIqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2Rp ciIgOzsKICAgICAgICAgICAgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoX3Rh aWwgIiAkYWJzZGlyIiA7OwoJCSBlc2FjCgkgICAgICBlc2FjCgkgICAgICA7OwoJICAgIGVz YWMKCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCgkgICAgKiIgJGxp YmRpciAiKikgOzsKCSAgICAqKQoJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4K CSAgICAgICoiICRsaWJkaXIgIiopIDs7CgkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6 ZV9ycGF0aCAiICRsaWJkaXIiIDs7CgkgICAgICBlc2FjCgkgICAgICA7OwoJICAgIGVzYWMK CSAgZmkKCgkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7 IHRoZW4KCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQoJICAgIHNldCBkdW1teSAkbGli cmFyeV9uYW1lcwoJICAgIHNoaWZ0CgkgICAgcmVhbG5hbWU9JDEKCSAgICBzaGlmdAoJICAg IGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAoJICAgICMgdXNl IGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPwoJICAgIGlm IHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCgkgICAgICBzb25hbWU9JGRsbmFtZQoJICAgIGVs aWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgoJICAgICAgIyBibGVoIHdpbmRvd3MK CSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KCSAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCB3aW5k b3dzKiB8IGNlZ2NjKiB8IG9zMiopCgkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAk YWdlCgkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CgkJdmVyc3VmZml4PS0kbWFqb3IKCQk7 OwoJICAgICAgZXNhYwoJICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgoJICAg IGVsc2UKCSAgICAgIHNvbmFtZT0kcmVhbG5hbWUKCSAgICBmaQoKCSAgICAjIE1ha2UgYSBu ZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQoJICAgIHNvcm9v dD0kc29uYW1lCgkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKCSAgICBzb25hbWU9JGZ1 bmNfYmFzZW5hbWVfcmVzdWx0CgkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIk c29uYW1lIgoJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCgoJ ICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBv bmUgbm93CgkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0 aGVuIDoKCSAgICBlbHNlCgkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0 ZWQgc3ltYm9sIGxpc3QgZnJvbSAnJHNvbmFtZSciCgkgICAgICBmdW5jX2V4ZWN1dGVfY21k cyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKCSAgICBmaQoKCSAgICAjIENy ZWF0ZSAkbmV3bGliCgkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7 IHRoZW4gOjsgZWxzZQoJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBs aWJyYXJ5IGZvciAnJHNvbmFtZSciCgkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9h cmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKCSAgICBmaQoJICAgICMgbWFr ZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBs aWJyYXJ5CgkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCgkgICAgbGlua2xpYj0kbmV3bGliCgkg IGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgoKCSAgaWYg dGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCByZWxpbmsgIT0gIiRvcHRfbW9kZSI7 IHRoZW4KCSAgICBhZGRfc2hsaWJwYXRoPQoJICAgIGFkZF9kaXI9CgkgICAgYWRkPQoJICAg IGxpYl9saW5rZWQ9eWVzCgkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCgkgICAgaW1t ZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCgkgICAgICBpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9k aXJlY3QiOyB0aGVuCgkJYWRkPSRkaXIvJGxpbmtsaWIKCQljYXNlICRob3N0IGluCgkJICAq LSotc2NvMy4ydjUuMC5bMDI0XSopIGFkZF9kaXI9LUwkZGlyIDs7CgkJICAqLSotc3lzdjQq dXcyKikgYWRkX2Rpcj0tTCRkaXIgOzsKCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1z eXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAoJCSAgICAqLSotdW5peHdhcmU3KikgYWRk X2Rpcj0tTCRkaXIgOzsKCQkgICotKi1kYXJ3aW4qICkKCQkgICAgIyBpZiB0aGUgbGliIGlz IGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2Fubm90CgkJICAgICMgbGluayBh Z2FpbnN0IGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCgkJ ICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAoJCQkgJEdSRVAg IjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsOyB0aGVuCgkJICAgICAgaWYgdGVzdCAiWCRk bG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KCQkJZnVuY193YXJuaW5nICJsaWIgJGxp bmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgoJCQlpZiB0ZXN0IC16 ICIkb2xkX2xpYnJhcnkiOyB0aGVuCgkJCSAgZnVuY193YXJuaW5nICJBbmQgdGhlcmUgZG9l c24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgoJCQkgIGZ1bmNf d2FybmluZyAiVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKCQkJZWxzZQoJ CQkgIGFkZD0kZGlyLyRvbGRfbGlicmFyeQoJCQlmaQoJCSAgICAgIGVsaWYgdGVzdCAtbiAi JG9sZF9saWJyYXJ5IjsgdGhlbgoJCQlhZGQ9JGRpci8kb2xkX2xpYnJhcnkKCQkgICAgICBm aQoJCSAgICBmaQoJCWVzYWMKCSAgICAgIGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfbWlu dXNfTCI7IHRoZW4KCQljYXNlICRob3N0IGluCgkJKi0qLXN1bm9zKikgYWRkX3NobGlicGF0 aD0kZGlyIDs7CgkJZXNhYwoJCWFkZF9kaXI9LUwkZGlyCgkJYWRkPS1sJG5hbWUKCSAgICAg IGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KCQlhZGRf c2hsaWJwYXRoPSRkaXIKCQlhZGQ9LWwkbmFtZQoJICAgICAgZWxzZQoJCWxpYl9saW5rZWQ9 bm8KCSAgICAgIGZpCgkgICAgICA7OwoJICAgIHJlbGluaykKCSAgICAgIGlmIHRlc3QgeWVz ID0gIiRoYXJkY29kZV9kaXJlY3QiICYmCgkgICAgICAgICB0ZXN0IG5vID0gIiRoYXJkY29k ZV9kaXJlY3RfYWJzb2x1dGUiOyB0aGVuCgkJYWRkPSRkaXIvJGxpbmtsaWIKCSAgICAgIGVs aWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCgkJYWRkX2Rpcj0tTCRh YnNkaXIKCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWlu ZyBpbnN0YWxsZWQgdG8uCgkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4K CQkgIGNhc2UgJGxpYmRpciBpbgoJCSAgICBbXFwvXSopCgkJICAgICAgZnVuY19hcHBlbmQg YWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCgkJICAgICAgOzsKCQkgIGVz YWMKCQlmaQoJCWFkZD0tbCRuYW1lCgkgICAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29k ZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgoJCWFkZF9zaGxpYnBhdGg9JGRpcgoJCWFkZD0tbCRu YW1lCgkgICAgICBlbHNlCgkJbGliX2xpbmtlZD1ubwoJICAgICAgZmkKCSAgICAgIDs7Cgkg ICAgKikgbGliX2xpbmtlZD1ubyA7OwoJICAgIGVzYWMKCgkgICAgaWYgdGVzdCB5ZXMgIT0g IiRsaWJfbGlua2VkIjsgdGhlbgoJICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1 bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgoJICAgIGZpCgoJICAgIGlmIHRlc3Qg LW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgoJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJw YXRoOiBpbgoJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CgkgICAgICAqKSBmdW5j X2FwcGVuZCBjb21waWxlX3NobGlicGF0aCAiJGFkZF9zaGxpYnBhdGg6IiA7OwoJICAgICAg ZXNhYwoJICAgIGZpCgkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KCSAg ICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRj b21waWxlX2RlcGxpYnMiCgkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxp YnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKCSAgICBlbHNlCgkgICAgICB0ZXN0IC1uICIk YWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCgkgICAgICB0ZXN0IC1u ICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgoJICAgICAgaWYgdGVzdCB5ZXMg IT0gIiRoYXJkY29kZV9kaXJlY3QiICYmCgkJIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfbWlu dXNfTCIgJiYKCQkgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVu CgkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KCQkqIjokbGliZGlyOiIqKSA7OwoJ CSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CgkJZXNh YwoJICAgICAgZmkKCSAgICBmaQoJICBmaQoKCSAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9k ZSIgfHwgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgoJICAgIGFkZF9zaGxpYnBh dGg9CgkgICAgYWRkX2Rpcj0KCSAgICBhZGQ9CgkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZv ciBib3RoIGlzIHNpbXBsZToganVzdCBoYXJkY29kZSBpdC4KCSAgICBpZiB0ZXN0IHllcyA9 ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgoJICAgICAgIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2Rp cmVjdF9hYnNvbHV0ZSI7IHRoZW4KCSAgICAgIGFkZD0kbGliZGlyLyRsaW5rbGliCgkgICAg ZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KCSAgICAgIGFkZF9k aXI9LUwkbHRfc3lzcm9vdCRsaWJkaXIKCSAgICAgIGFkZD0tbCRuYW1lCgkgICAgZWxpZiB0 ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KCSAgICAgIGNhc2Ug OiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCgkgICAgICAqIjokbGliZGlyOiIqKSA7OwoJICAg ICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKCSAg ICAgIGVzYWMKCSAgICAgIGFkZD0tbCRuYW1lCgkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFy ZGNvZGVfYXV0b21hdGljIjsgdGhlbgoJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4 X2RpciIgJiYKCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIi OyB0aGVuCgkJYWRkPSRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliCgkgICAgICBl bHNlCgkJYWRkPSRsaWJkaXIvJGxpbmtsaWIKCSAgICAgIGZpCgkgICAgZWxzZQoJICAgICAg IyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4K CSAgICAgIGFkZF9kaXI9LUwkbHRfc3lzcm9vdCRsaWJkaXIKCSAgICAgICMgVHJ5IGxvb2tp bmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KCSAg ICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCgkJY2FzZSAkbGliZGly IGluCgkJICBbXFwvXSopCgkJICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3By ZWZpeF9kaXIkbGliZGlyIgoJCSAgICA7OwoJCWVzYWMKCSAgICAgIGZpCgkgICAgICBhZGQ9 LWwkbmFtZQoJICAgIGZpCgoJICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVu CgkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9k aXIgJGZpbmFsaXplX2RlcGxpYnMiCgkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6 ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6ZV9kZXBsaWJzIgoJICAgIGVsc2UKCSAgICAgIHRl c3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKCSAgICAg IHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCgkgICAgZmkKCSAg ZmkKCWVsaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KCSAgIyBIZXJlIHdlIGFz c3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAoJ ICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0 YXRpYyBhbmQKCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgoJICBpZiB0ZXN0IHVuc3VwcG9ydGVk ICE9ICIkaGFyZGNvZGVfZGlyZWN0IjsgdGhlbgoJICAgIHRlc3QgLW4gIiRvbGRfbGlicmFy eSIgJiYgbGlua2xpYj0kb2xkX2xpYnJhcnkKCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIv JGxpbmtsaWIgJGNvbXBpbGVfZGVwbGlicyIKCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGly LyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgoJICBlbHNlCgkgICAgY29tcGlsZV9kZXBs aWJzPSItbCRuYW1lIC1MJGRpciAkY29tcGlsZV9kZXBsaWJzIgoJICAgIGZpbmFsaXplX2Rl cGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgoJICBmaQoJZWxpZiB0 ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgoJICAjIE5vdCBhIHNoYXJl ZCBsaWJyYXJ5CgkgIGlmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhv ZCI7IHRoZW4KCSAgICAjIFdlJ3JlIHRyeWluZyBsaW5rIGEgc2hhcmVkIGxpYnJhcnkgYWdh aW5zdCBhIHN0YXRpYyBvbmUKCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9y dCBpdC4KCgkgICAgIyBKdXN0IHByaW50IGEgd2FybmluZyBhbmQgYWRkIHRoZSBsaWJyYXJ5 IHRvIGRlcGVuZGVuY3lfbGlicyBzbwoJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUg bGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgoJICAgIGZ1bmNfd2FybmluZyAi VGhpcyBzeXN0ZW0gY2Fubm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgoJ ICAgIGZ1bmNfd2FybmluZyAiSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBs aWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgoJICAgIGZ1bmNfd2FybmluZyAi eW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5 b3UgaGF2ZSBhIgoJICAgIGZ1bmNfd2FybmluZyAic2hhcmVkIHZlcnNpb24gb2YgdGhlIGxp YnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgoJICAgIGlmIHRlc3Qg eWVzID0gIiRtb2R1bGUiOyB0aGVuCgkgICAgICBmdW5jX3dhcm5pbmcgIkJ1dCBhcyB5b3Ug dHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVh dGUgIgoJICAgICAgZnVuY193YXJuaW5nICJhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxk IHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgoJICAgICAgZnVu Y193YXJuaW5nICJpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUg c3ltYm9scyBhdCBydW50aW1lLiIKCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9s X3BpcGUiOyB0aGVuCgkJZnVuY193YXJuaW5nICJIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkg d29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgoJCWZ1bmNfd2Fy bmluZyAibGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nICdubScgb3IgZXF1aXZhbGVudCwg YnV0IGxpYnRvb2wgY291bGQiCgkJZnVuY193YXJuaW5nICJub3QgZmluZCBzdWNoIGEgcHJv Z3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKCQlmdW5jX3dh cm5pbmcgIidubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBo ZWxwLiIKCSAgICAgIGZpCgkgICAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7 IHRoZW4KCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCgkJYnVpbGRfb2xkX2xpYnM9eWVz CgkgICAgICBlbHNlCgkJYnVpbGRfbGlidG9vbF9saWJzPW5vCgkgICAgICBmaQoJICAgIGZp CgkgIGVsc2UKCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKCSAg ICBsaW5rX3N0YXRpYz15ZXMKCSAgZmkKCWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJh cnk/CgoJaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgoJICBpZiB0ZXN0IC1uICIk ZGVwZW5kZW5jeV9saWJzIiAmJgoJICAgICB7IHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfaW50 b19saWJzIiB8fAoJICAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgfHwKCSAg ICAgICB0ZXN0IHllcyA9ICIkbGlua19zdGF0aWMiOyB9OyB0aGVuCgkgICAgIyBFeHRyYWN0 IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCgkgICAgdGVtcF9kZXBsaWJzPQoJICAgIGZvciBs aWJkaXIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KCSAgICAgIGNhc2UgJGxpYmRpciBpbgoJ ICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgoJICAgICAgICAg ICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgkJICAgY2FzZSAiICR4cnBh dGggIiBpbgoJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKCQkgICAqKSBmdW5jX2FwcGVu ZCB4cnBhdGggIiAkdGVtcF94cnBhdGgiOzsKCQkgICBlc2FjOzsKCSAgICAgICopIGZ1bmNf YXBwZW5kIHRlbXBfZGVwbGlicyAiICRsaWJkaXIiOzsKCSAgICAgIGVzYWMKCSAgICBkb25l CgkgICAgZGVwZW5kZW5jeV9saWJzPSR0ZW1wX2RlcGxpYnMKCSAgZmkKCgkgIGZ1bmNfYXBw ZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCgkgICMgTGluayBhZ2FpbnN0IHRo aXMgbGlicmFyeQoJICB0ZXN0IG5vID0gIiRsaW5rX3N0YXRpYyIgJiYgbmV3ZGVwZW5kZW5j eV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKCSAgIyAu Li4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKCSAgdG1wX2xpYnM9CgkgIGZvciBkZXBsaWIg aW4gJGRlcGVuZGVuY3lfbGliczsgZG8KCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBs aWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKCSAgICBjYXNlICRkZXBsaWIgaW4KICAgICAgICAg ICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCiAgICAgICAgICAg ICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7 OwogICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7Owog ICAgICAgICAgICBlc2FjCgkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgoJ ICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lz cm9vdF9yZXN1bHQgIiopCiAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVw bGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CgkgICAgICBlc2FjCgkg ICAgZmkKCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9v dF9yZXN1bHQiCgkgIGRvbmUKCgkgIGlmIHRlc3Qgbm8gIT0gIiRsaW5rX2FsbF9kZXBsaWJz IjsgdGhlbgoJICAgICMgQWRkIHRoZSBzZWFyY2ggcGF0aHMgb2YgYWxsIGRlcGVuZGVuY3kg bGlicmFyaWVzCgkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwoJICAg ICAgcGF0aD0KCSAgICAgIGNhc2UgJGRlcGxpYiBpbgoJICAgICAgLUwqKSBwYXRoPSRkZXBs aWIgOzsKCSAgICAgICoubGEpCgkgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVw bGliIgoJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAoJICAg ICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgoJCWRpcj0kZnVuY19kaXJuYW1l X3Jlc3VsdAoJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgoJCWNhc2UgJGRpciBpbgoJ CVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSRkaXIgOzsKCQkqKQoJCSAgYWJz ZGlyPWBjZCAiJGRpciIgJiYgcHdkYAoJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4K CQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9y eSBuYW1lIG9mICckZGlyJyIKCQkgICAgYWJzZGlyPSRkaXIKCQkgIGZpCgkJICA7OwoJCWVz YWMKCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhl bgoJCWNhc2UgJGhvc3QgaW4KCQkqLSotZGFyd2luKikKCQkgIGRlcGRlcGw9CgkJICBldmFs IGRlcGxpYnJhcnlfbmFtZXM9YCRTRUQgLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwp JC9cMS9wJyAkZGVwbGliYAoJCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiOyB0 aGVuCgkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXM7IGRvCgkJICAgICAgZGVw ZGVwbD0kdG1wCgkJICAgIGRvbmUKCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGly LyRkZXBkZXBsIjsgdGhlbgoJCSAgICAgIGRlcGRlcGw9JGFic2Rpci8kb2JqZGlyLyRkZXBk ZXBsCgkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJE9UT09MIC1MICRkZXBkZXBsIHwg YXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAogICAgICAgICAgICAgICAg ICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCiAgICAgICAg ICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJE9UT09MNjQgLUwgJGRl cGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAogICAgICAg ICAgICAgICAgICAgICAgZmkKCQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAi ICR3bC1keWxpYl9maWxlICR3bCRkYXJ3aW5faW5zdGFsbF9uYW1lOiRkZXBkZXBsIgoJCSAg ICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICRkYXJ3aW5faW5z dGFsbF9uYW1lOiRkZXBkZXBsIgoJCSAgICAgIHBhdGg9CgkJICAgIGZpCgkJICBmaQoJCSAg OzsKCQkqKQoJCSAgcGF0aD0tTCRhYnNkaXIvJG9iamRpcgoJCSAgOzsKCQllc2FjCgkJZWxz ZQoJCSAgZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3An ICRkZXBsaWJgCgkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCgkJICAgIGZ1bmNfZmF0YWxf ZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCgkJICB0 ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAoJCSAgICBmdW5jX3dhcm5pbmcgIick ZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKCgkJICBwYXRoPS1MJGFic2RpcgoJCWZpCgkJ OzsKCSAgICAgIGVzYWMKCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCgkgICAgICAqIiAk cGF0aCAiKikgOzsKCSAgICAgICopIGRlcGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OwoJICAg ICAgZXNhYwoJICAgIGRvbmUKCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCglmaSAj IGxpbmttb2RlID0gbGliCiAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCgogICAg ICBmdW5jX2FwcGVuZCB0ZW1wX3JwYXRoICIkdGVtcF9ycGF0aF90YWlsIgogICAgICBmdW5j X2FwcGVuZCBjb21waWxlX3JwYXRoICIkY29tcGlsZV9ycGF0aF90YWlsIgoKICAgICAgaWYg dGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgoJaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7 IHRoZW4KCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3Mg JGNvbXBpbGVfZGVwbGlicyIKCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRf bGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgoJZWxzZQoJICBjb21waWxlcl9mbGFn cz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxh Z3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVn J2AKCWZpCiAgICAgIGZpCiAgICAgIGRlcGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9s aWJzCiAgICAgIGlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIjsgdGhlbgoJIyBMaW5rIHRo ZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcwoJZm9yIGRl cGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbwoJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJz IgoJZG9uZQogICAgICBmaQogICAgICBpZiB0ZXN0IGRsb3BlbiAhPSAiJHBhc3MiOyB0aGVu Cgl0ZXN0IGNvbnYgPSAiJHBhc3MiIHx8IHsKCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9w YXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgoJICBsaWJfc2VhcmNoX3Bh dGg9CgkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KCSAgICBjYXNlICIk bGliX3NlYXJjaF9wYXRoICIgaW4KCSAgICAqIiAkZGlyICIqKSA7OwoJICAgICopIGZ1bmNf YXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiIDs7CgkgICAgZXNhYwoJICBkb25lCgkg IG5ld2xpYl9zZWFyY2hfcGF0aD0KCX0KCglpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21v ZGUsJHBhc3MiOyB0aGVuCgkgIHZhcnM9ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBs aWJzIgoJZWxzZQoJICB2YXJzPWRlcGxpYnMKCWZpCglmb3IgdmFyIGluICR2YXJzIGRlcGVu ZGVuY3lfbGliczsgZG8KCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBv cmRlcgoJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKCSAgbmV3X2xpYnM9CgkgICMgRklY TUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCgkg ICMgICAgICAgIHRoYXQgc29tZSBuYXN0eSBkZXBlbmRlbmN5IGxvb3AgaXNuJ3QgYWNjaWRl bnRhbGx5CgkgICMgICAgICAgIGJyb2tlbjogbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJz IgoJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KCSAgICBpZiAkb3B0X3ByZXNlcnZl X2R1cF9kZXBzOyB0aGVuCgkgICAgICBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCgkg ICAgZWxzZQoJICAgICAgIyBQcmFnbWF0aWNhbGx5LCB0aGlzIHNlZW1zIHRvIGNhdXNlIHZl cnkgZmV3IHByb2JsZW1zIGluCgkgICAgICAjIHByYWN0aWNlOgoJICAgICAgY2FzZSAkZGVw bGliIGluCgkgICAgICAtTCopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKCSAg ICAgIC1SKikgOzsKCSAgICAgICopCgkgICAgICAgICMgQW5kIGhlcmUgaXMgdGhlIHJlYXNv bjogd2hlbiBhIGxpYnJhcnkgYXBwZWFycyBtb3JlCgkgICAgICAgICMgdGhhbiBvbmNlIGFz IGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgoJICAgICAgICAjIGlz IGltcGxpY2l0bHkgbGlua2VkIGluIG1vcmUgdGhhbiBvbmNlIGJ5IHRoZQoJICAgICAgICAj IGNvbXBpbGVyLCBpdCBpcyBjb25zaWRlcmVkIHNwZWNpYWwsIGFuZCBtdWx0aXBsZQoJICAg ICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0 aGlzCgkgICAgICAgICMgd2l0aCBoYXZpbmcgdGhlIHNhbWUgbGlicmFyeSBiZWluZyBsaXN0 ZWQgYXMgYQoJICAgICAgICAjIGRlcGVuZGVuY3kgb2YgbXVsdGlwbGUgb3RoZXIgbGlicmFy aWVzOiBpbiB0aGlzIGNhc2UsCgkgICAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3 ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CgkgICAgICAgICMgbmVlZCB0byBiZSBs aXN0ZWQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIGtlZXAgb25seSB0aGUKCSAgICAgICAgIyBs YXN0IGNvcHkuICBUaGlzIGlzIG5vdCBhbHdheXMgcmlnaHQsIGJ1dCBpdCBpcyByYXJlCgkg ICAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFu IHRvIHBsYXkKCSAgICAgICAgIyBzdWNoIHVucG9ydGFibGUgbGlua2luZyB0cmlja3MgdG8g bGluayB0aGUgbGlicmFyeQoJICAgICAgICAjIHVzaW5nIC1XbCwtbG5hbWUsIHNvIHRoYXQg bGlidG9vbCBkb2VzIG5vdCBjb25zaWRlciBpdAoJICAgICAgICAjIGZvciBkdXBsaWNhdGUg cmVtb3ZhbC4gIEFuZCBpZiBub3QgcG9zc2libGUgZm9yIHBvcnRhYmlsaXR5CgkgICAgICAg ICMgcmVhc29ucywgdGhlbiAtLXByZXNlcnZlLWR1cC1kZXBzIHNob3VsZCBiZSB1c2VkLgoJ ICAgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KCSAgICAgICAgKiIgJGRlcGxp YiAiKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OwoJICAgICAgICAqKQoJICAg ICAgICAgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgoJICAgICAgICAgICoiICRkZXBsaWIgIiop IDs7CgkgICAgICAgICAgKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OwoJICAg ICAgICAgIGVzYWMKCSAgICAgICAgICA7OwoJICAgICAgICBlc2FjCgkgICAgICAgIDs7Cgkg ICAgICBlc2FjCgkgICAgZmkKCSAgZG9uZQoJICB0bXBfbGlicz0KCSAgZm9yIGRlcGxpYiBp biAkbmV3X2xpYnM7IGRvCgkgICAgY2FzZSAkZGVwbGliIGluCgkgICAgLUwqKQoJICAgICAg Y2FzZSAiICR0bXBfbGlicyAiIGluCgkgICAgICAqIiAkZGVwbGliICIqKSA7OwoJICAgICAg KikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OwoJICAgICAgZXNhYwoJICAg ICAgOzsKCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CgkgICAg ZXNhYwoJICBkb25lCgkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCglkb25lICMgZm9yIHZh cgogICAgICBmaQoKICAgICAgIyBBZGQgU3VuIENDIHBvc3RkZXBzIGlmIHJlcXVpcmVkOgog ICAgICB0ZXN0IENYWCA9ICIkdGFnbmFtZSIgJiYgewogICAgICAgIGNhc2UgJGhvc3Rfb3Mg aW4KICAgICAgICBsaW51eCopCiAgICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8ICRTRUQg NXFgIGluCiAgICAgICAgICAqU3VuXCBDKikgIyBTdW4gQysrIDUuOQogICAgICAgICAgICBm dW5jX3N1bmNjX2NzdGRfYWJpCgogICAgICAgICAgICBpZiB0ZXN0IG5vICE9ICIkc3VuY2Nf dXNlX2NzdGRfYWJpIjsgdGhlbgogICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHBvc3RkZXBz ICcgLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwogICAgICAgICAgICBmaQogICAgICAg ICAgICA7OwogICAgICAgICAgZXNhYwogICAgICAgICAgOzsKCiAgICAgICAgc29sYXJpcyop CiAgICAgICAgICBmdW5jX2NjX2Jhc2VuYW1lICIkQ0MiCiAgICAgICAgICBjYXNlICRmdW5j X2NjX2Jhc2VuYW1lX3Jlc3VsdCBpbgogICAgICAgICAgQ0MqIHwgc3VuQ0MqKQogICAgICAg ICAgICBmdW5jX3N1bmNjX2NzdGRfYWJpCgogICAgICAgICAgICBpZiB0ZXN0IG5vICE9ICIk c3VuY2NfdXNlX2NzdGRfYWJpIjsgdGhlbgogICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHBv c3RkZXBzICcgLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwogICAgICAgICAgICBmaQog ICAgICAgICAgICA7OwogICAgICAgICAgZXNhYwogICAgICAgICAgOzsKICAgICAgICBlc2Fj CiAgICAgIH0KCiAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20g ZGVwZW5kZW5jeV9saWJzCiAgICAgICMgKHRoZXkgc3RheSBpbiBkZXBsaWJzKQogICAgICB0 bXBfbGlicz0KICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KCWNhc2UgIiAk cHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCgkqIiAk aSAiKikKCSAgaT0KCSAgOzsKCWVzYWMKCWlmIHRlc3QgLW4gIiRpIjsgdGhlbgoJICBmdW5j X2FwcGVuZCB0bXBfbGlicyAiICRpIgoJZmkKICAgICAgZG9uZQogICAgICBkZXBlbmRlbmN5 X2xpYnM9JHRtcF9saWJzCiAgICBkb25lICMgZm9yIHBhc3MKICAgIGlmIHRlc3QgcHJvZyA9 ICIkbGlua21vZGUiOyB0aGVuCiAgICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKICAgIGZpCiAg ICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IGxpYiA9ICIkbGlua21vZGUi OyB0aGVuCiAgICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKICAgIGZpCgogICAgY2Fz ZSAkbGlua21vZGUgaW4KICAgIG9sZGxpYikKICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMk ZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KCWZ1bmNfd2Fybmlu ZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogICAgICBmaQoKICAgICAg Y2FzZSAiICRkZXBsaWJzIiBpbgogICAgICAqXCAtbCogfCAqXCAtTCopCglmdW5jX3dhcm5p bmcgIictbCcgYW5kICctTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OwogICAgICBl c2FjCgogICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKCWZ1bmNfd2FybmluZyAiJy1ycGF0 aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCgogICAgICB0ZXN0IC1uICIkeHJwYXRoIiAm JiBcCglmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCgogICAg ICB0ZXN0IC1uICIkdmluZm8iICYmIFwKCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8v LXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKCiAgICAgIHRlc3Qg LW4gIiRyZWxlYXNlIiAmJiBcCglmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3Jl ZCBmb3IgYXJjaGl2ZXMiCgogICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0 X3N5bWJvbHNfcmVnZXgiICYmIFwKCWZ1bmNfd2FybmluZyAiJy1leHBvcnQtc3ltYm9scycg aXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCgogICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxl cyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KICAgICAgYnVpbGRfbGlidG9vbF9saWJz PW5vCiAgICAgIG9sZGxpYnM9JG91dHB1dAogICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xk X2RlcGxpYnMiCiAgICAgIDs7CgogICAgbGliKQogICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5 IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSAnbGliTkFNRS5sYScuCiAgICAgIGNh c2UgJG91dHB1dG5hbWUgaW4KICAgICAgbGliKikKCWZ1bmNfc3RyaXBuYW1lICdsaWInICcu bGEnICIkb3V0cHV0bmFtZSIKCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAoJZXZhbCBz aGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3Nw ZWNcIgoJOzsKICAgICAgKikKCXRlc3Qgbm8gPSAiJG1vZHVsZSIgXAoJICAmJiBmdW5jX2Zh dGFsX2hlbHAgImxpYnRvb2wgbGlicmFyeSAnJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoICds aWInIgoKCWlmIHRlc3Qgbm8gIT0gIiRuZWVkX2xpYl9wcmVmaXgiOyB0aGVuCgkgICMgQWRk IHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKCSAgZnVuY19zdHJp cG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgoJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9y ZXN1bHQKCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKCSAgZXZhbCBsaWJu YW1lPVwiJGxpYm5hbWVfc3BlY1wiCgllbHNlCgkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEn ICIkb3V0cHV0bmFtZSIKCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CglmaQoJ OzsKICAgICAgZXNhYwoKICAgICAgaWYgdGVzdCAtbiAiJG9ianMiOyB0aGVuCglpZiB0ZXN0 IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCgkgIGZ1bmNfZmF0 YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgJyRvdXRwdXQnIGZyb20g bm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCgllbHNlCgkgIGZ1bmNf d2FybmluZyAiTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRo ZSBub24tbGlidG9vbCBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCgkgIGZ1bmNf YXBwZW5kIGxpYm9ianMgIiAkb2JqcyIKCWZpCiAgICAgIGZpCgogICAgICB0ZXN0IG5vID0g IiRkbHNlbGYiIFwKCXx8IGZ1bmNfd2FybmluZyAiJy1kbG9wZW4gc2VsZicgaXMgaWdub3Jl ZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCgogICAgICBzZXQgZHVtbXkgJHJwYXRoCiAgICAg IHNoaWZ0CiAgICAgIHRlc3QgMSAtbHQgIiQjIiBcCgkmJiBmdW5jX3dhcm5pbmcgImlnbm9y aW5nIG11bHRpcGxlICctcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCgogICAgICBp bnN0YWxsX2xpYmRpcj0kMQoKICAgICAgb2xkbGlicz0KICAgICAgaWYgdGVzdCAteiAiJHJw YXRoIjsgdGhlbgoJaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4K CSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KCSAgIyBTb21l IGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSAnLmFsJyBleHRlbnNpb24gc28KCSAg IyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9u IGFuCgkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KCSAgb2xkbGlicz0iJG91dHB1dF9v YmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAkb2xkbGlicyIKCSAgYnVpbGRfbGlidG9vbF9saWJz PWNvbnZlbmllbmNlCgkgIGJ1aWxkX29sZF9saWJzPXllcwoJZmkKCgl0ZXN0IC1uICIkdmlu Zm8iICYmIFwKCSAgZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1i ZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKCgl0ZXN0IC1uICIk cmVsZWFzZSIgJiYgXAoJICBmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBm b3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgogICAgICBlbHNlCgoJIyBQYXJzZSB0aGUgdmVy c2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KCXNhdmVfaWZzPSRJRlM7IElGUz06CglzZXQg ZHVtbXkgJHZpbmZvIDAgMCAwCglzaGlmdAoJSUZTPSRzYXZlX2lmcwoKCXRlc3QgLW4gIiQ3 IiAmJiBcCgkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byAnLXZl cnNpb24taW5mbyciCgoJIyBjb252ZXJ0IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBs aWJ0b29sIGFnZXMKCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmls ZXMgYW5kIGF0dGVtcHRzCgkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBj b21wcmVoZW5zaWJsZQoKCWNhc2UgJHZpbmZvX251bWJlciBpbgoJeWVzKQoJICBudW1iZXJf bWFqb3I9JDEKCSAgbnVtYmVyX21pbm9yPSQyCgkgIG51bWJlcl9yZXZpc2lvbj0kMwoJICAj CgkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0Cgkg ICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCgkgICMg YW5kIHRob3NlIHRoYXQgc3VidHJhY3QgYWdlIGFuZCB1c2UgYWdlIGFzCgkgICMgYSBtaW5v ciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKCSAgIyB0aGF0IGhhcyBhbiBl eHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1bgoJICAjCgkgIGNhc2UgJHZlcnNpb25fdHlwZSBp bgoJICAjIGNvcnJlY3QgbGludXggdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcg cmVmYWN0b3IKCSAgZGFyd2lufGZyZWVic2QtZWxmfGxpbnV4fG1pZG5pZ2h0YnNkLWVsZnxv c2Z8cW54fHdpbmRvd3N8bm9uZSkKCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAk bnVtYmVyX21pbm9yCgkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKCSAgICBhZ2U9 JG51bWJlcl9taW5vcgoJICAgIHJldmlzaW9uPSRudW1iZXJfcmV2aXNpb24KCSAgICA7OwoJ ICBmcmVlYnNkLWFvdXR8c2NvfHN1bm9zKQoJICAgIGN1cnJlbnQ9JG51bWJlcl9tYWpvcgoJ ICAgIHJldmlzaW9uPSRudW1iZXJfbWlub3IKCSAgICBhZ2U9MAoJICAgIDs7CgkgIGlyaXh8 bm9uc3RvcHV4KQoJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlu b3IKCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAoJICAgIGFnZT0kbnVtYmVyX21p bm9yCgkgICAgcmV2aXNpb249JG51bWJlcl9taW5vcgoJICAgIGx0X2lyaXhfaW5jcmVtZW50 PW5vCgkgICAgOzsKCSAgZXNhYwoJICA7OwoJbm8pCgkgIGN1cnJlbnQ9JDEKCSAgcmV2aXNp b249JDIKCSAgYWdlPSQzCgkgIDs7Cgllc2FjCgoJIyBDaGVjayB0aGF0IGVhY2ggb2YgdGhl IHRoaW5ncyBhcmUgdmFsaWQgbnVtYmVycy4KCWNhc2UgJGN1cnJlbnQgaW4KCTB8WzEtOV18 WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1b MC05XVswLTldWzAtOV1bMC05XSkgOzsKCSopCgkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgJyRj dXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKCSAgZnVuY19mYXRhbF9l cnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCgkgIDs7 Cgllc2FjCgoJY2FzZSAkcmV2aXNpb24gaW4KCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVsw LTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05 XSkgOzsKCSopCgkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OICckcmV2aXNpb24nIG11c3QgYmUg YSBub25uZWdhdGl2ZSBpbnRlZ2VyIgoJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBp cyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKCSAgOzsKCWVzYWMKCgljYXNlICRh Z2UgaW4KCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVsw LTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKCSopCgkgIGZ1bmNfZXJy b3IgIkFHRSAnJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCgkgIGZ1bmNf ZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9u IgoJICA7OwoJZXNhYwoKCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCgkg IGZ1bmNfZXJyb3IgIkFHRSAnJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGlu dGVyZmFjZSBudW1iZXIgJyRjdXJyZW50JyIKCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5m bycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCglmaQoKCSMgQ2FsY3VsYXRl IHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KCW1ham9yPQoJdmVyc3VmZml4PQoJdmVyc3RyaW5n PQoJY2FzZSAkdmVyc2lvbl90eXBlIGluCglub25lKSA7OwoKCWRhcndpbikKCSAgIyBMaWtl IExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgoJICAj IHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCgkgIGZ1 bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCgkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQK CSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgoJICAjIERhcndpbiBsZCBkb2Vz bid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgoJICBmdW5jX2FyaXRoICRjdXJyZW50 ICsgMQoJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAoJICB4bGN2ZXJzdHJp bmc9IiR3bC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1 cnJlbnRfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCgkgIHZlcnN0cmlu Zz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJz aW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKICAgICAgICAgICMgT24gRGFyd2luIG90 aGVyIGNvbXBpbGVycwogICAgICAgICAgY2FzZSAkQ0MgaW4KICAgICAgICAgICAgICBuYWdm b3IqKQogICAgICAgICAgICAgICAgICB2ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3Zl cnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3Jf Y3VycmVudC4kcmV2aXNpb24iCiAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAg KikKICAgICAgICAgICAgICAgICAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9u ICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlz aW9uIgogICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgZXNhYwoJICA7OwoKCWZyZWVi c2QtYW91dCkKCSAgbWFqb3I9LiRjdXJyZW50CgkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJHJl dmlzaW9uCgkgIDs7CgoJZnJlZWJzZC1lbGYgfCBtaWRuaWdodGJzZC1lbGYpCgkgIGZ1bmNf YXJpdGggJGN1cnJlbnQgLSAkYWdlCgkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKCSAg dmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgoJICA7OwoKCWlyaXggfCBub25zdG9w dXgpCgkgIGlmIHRlc3Qgbm8gPSAiJGx0X2lyaXhfaW5jcmVtZW50IjsgdGhlbgoJICAgIGZ1 bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCgkgIGVsc2UKCSAgICBmdW5jX2FyaXRoICRjdXJy ZW50IC0gJGFnZSArIDEKCSAgZmkKCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CgoJICBj YXNlICR2ZXJzaW9uX3R5cGUgaW4KCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9 bm9uc3RvcHV4IDs7CgkgICAgKikgICAgICAgICB2ZXJzdHJpbmdfcHJlZml4PXNnaSA7OwoJ ICBlc2FjCgkgIHZlcnN0cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24K CgkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxl IHdpdGguCgkgIGxvb3A9JHJldmlzaW9uCgkgIHdoaWxlIHRlc3QgMCAtbmUgIiRsb29wIjsg ZG8KCSAgICBmdW5jX2FyaXRoICRyZXZpc2lvbiAtICRsb29wCgkgICAgaWZhY2U9JGZ1bmNf YXJpdGhfcmVzdWx0CgkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKCSAgICBsb29wPSRmdW5j X2FyaXRoX3Jlc3VsdAoJICAgIHZlcnN0cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4k aWZhY2U6JHZlcnN0cmluZwoJICBkb25lCgoJICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFq b3IgbXVzdCBub3QgY29udGFpbiAnLicuCgkgIG1ham9yPS4kbWFqb3IKCSAgdmVyc3VmZml4 PSRtYWpvci4kcmV2aXNpb24KCSAgOzsKCglsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51 eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCgkgIGZ1bmNfYXJpdGggJGN1cnJlbnQg LSAkYWdlCgkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKCSAgdmVyc3VmZml4PSRtYWpv ci4kYWdlLiRyZXZpc2lvbgoJICA7OwoKCW9zZikKCSAgZnVuY19hcml0aCAkY3VycmVudCAt ICRhZ2UKCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAoJICB2ZXJzdWZmaXg9LiRjdXJy ZW50LiRhZ2UuJHJldmlzaW9uCgkgIHZlcnN0cmluZz0kY3VycmVudC4kYWdlLiRyZXZpc2lv bgoKCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGli bGUgd2l0aC4KCSAgbG9vcD0kYWdlCgkgIHdoaWxlIHRlc3QgMCAtbmUgIiRsb29wIjsgZG8K CSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKCSAgICBpZmFjZT0kZnVuY19hcml0 aF9yZXN1bHQKCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQoJICAgIGxvb3A9JGZ1bmNfYXJp dGhfcmVzdWx0CgkgICAgdmVyc3RyaW5nPSR2ZXJzdHJpbmc6JGlmYWNlLjAKCSAgZG9uZQoK CSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgoJ ICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjokY3VycmVudC4wIgoJICA7OwoKCXFueCkKCSAg ZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3Vs dAoJICB2ZXJzdWZmaXg9JG1ham9yLiRhZ2UuJHJldmlzaW9uCgkgIDs7CgoJc2NvKQoJICBt YWpvcj0uJGN1cnJlbnQKCSAgdmVyc3VmZml4PS4kY3VycmVudAoJICA7OwoKCXN1bm9zKQoJ ICBtYWpvcj0uJGN1cnJlbnQKCSAgdmVyc3VmZml4PS4kY3VycmVudC4kcmV2aXNpb24KCSAg OzsKCgl3aW5kb3dzKQoJICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBv bmx5IHdhbnQgb25lCgkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZSBzeXN0ZW1zLgoJ ICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQoJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1 bHQKCSAgdmVyc3VmZml4PS0kbWFqb3IKCSAgOzsKCgkqKQoJICBmdW5jX2ZhdGFsX2NvbmZp Z3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgJyR2ZXJzaW9uX3R5cGUn IgoJICA7OwoJZXNhYwoKCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0 ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCglpZiB0ZXN0IC16ICIkdmluZm8i ICYmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgoJICBtYWpvcj0KCSAgY2FzZSAkdmVyc2lv bl90eXBlIGluCgkgIGRhcndpbikKCSAgICAjIHdlIGNhbid0IGNoZWNrIGZvciAiMC4wIiBp biBhcmNoaXZlX2NtZHMgZHVlIHRvIHF1b3RpbmcKCSAgICAjIHByb2JsZW1zLCBzbyB3ZSBy ZXNldCBpdCBjb21wbGV0ZWx5CgkgICAgdmVyc3RyaW5nPQoJICAgIDs7CgkgICopCgkgICAg dmVyc3RyaW5nPTAuMAoJICAgIDs7CgkgIGVzYWMKCSAgaWYgdGVzdCBubyA9ICIkbmVlZF92 ZXJzaW9uIjsgdGhlbgoJICAgIHZlcnN1ZmZpeD0KCSAgZWxzZQoJICAgIHZlcnN1ZmZpeD0u MC4wCgkgIGZpCglmaQoKCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVy c2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAoJaWYgdGVzdCB5ZXMsbm8gPSAiJGF2b2lkX3Zl cnNpb24sJG5lZWRfdmVyc2lvbiI7IHRoZW4KCSAgbWFqb3I9CgkgIHZlcnN1ZmZpeD0KCSAg dmVyc3RyaW5nPQoJZmkKCgkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhh dmUgdW5kZWZpbmVkIHN5bWJvbHMuCglpZiB0ZXN0IHllcyA9ICIkYWxsb3dfdW5kZWZpbmVk IjsgdGhlbgoJICBpZiB0ZXN0IHVuc3VwcG9ydGVkID0gIiRhbGxvd191bmRlZmluZWRfZmxh ZyI7IHRoZW4KCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCgkg ICAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRo b3N0IHNoYXJlZCBsaWJyYXJpZXM7IGJ1aWxkaW5nIHN0YXRpYyBvbmx5IgoJICAgICAgYnVp bGRfbGlidG9vbF9saWJzPW5vCgkgICAgZWxzZQoJICAgICAgZnVuY19mYXRhbF9lcnJvciAi Y2FuJ3QgYnVpbGQgJGhvc3Qgc2hhcmVkIGxpYnJhcnkgdW5sZXNzIC1uby11bmRlZmluZWQg aXMgc3BlY2lmaWVkIgoJICAgIGZpCgkgIGZpCgllbHNlCgkgICMgRG9uJ3QgYWxsb3cgdW5k ZWZpbmVkIHN5bWJvbHMuCgkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRub191bmRlZmluZWRf ZmxhZwoJZmkKCiAgICAgIGZpCgogICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5h bWUiICIkbGlibmFtZSIgOgogICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVv YmoiCiAgICAgIHRlc3QgIiAiID0gIiRsaWJvYmpzIiAmJiBsaWJvYmpzPQoKICAgICAgaWYg dGVzdCByZWxpbmsgIT0gIiRvcHRfbW9kZSI7IHRoZW4KCSMgUmVtb3ZlIG91ciBvdXRwdXRz LCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CgkjIG1heSBoYXZl IGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KCXJlbW92ZWxpc3Q9 Cgl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAoJZm9yIHAgaW4g JHRlbXByZW1vdmVsaXN0OyBkbwoJICBjYXNlICRwIGluCgkgICAgKi4kb2JqZXh0IHwgKi5n Y25vKQoJICAgICAgIDs7CgkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0 cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFz ZS4qKQoJICAgICAgIGlmIHRlc3QgLW4gIiRwcmVjaW91c19maWxlc19yZWdleCI7IHRoZW4K CQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+ L2Rldi9udWxsIDI+JjEKCQkgdGhlbgoJCSAgIGNvbnRpbnVlCgkJIGZpCgkgICAgICAgZmkK CSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCgkgICAgICAgOzsKCSAgICAq KSA7OwoJICBlc2FjCglkb25lCgl0ZXN0IC1uICIkcmVtb3ZlbGlzdCIgJiYgXAoJICBmdW5j X3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKICAgICAgZmkKCiAgICAgICMgTm93 IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgogICAgICBp ZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiICYmIHRlc3QgY29udmVuaWVuY2UgIT0g IiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCglmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91 dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKCgkjIFRyYW5zZm9ybSAubG8gZmlsZXMg dG8gLm8gZmlsZXMuCglvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1Ay TkwgfCAkU0VEICIvXC4kbGliZXh0JC9kOyAkbG8ybyIgfCAkTkwyU1BgCiAgICAgIGZpCgog ICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgogICAgICAjZm9y IHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRF Q0hPICIkbGliX3NlYXJjaF9wYXRoICIgfCAkU0VEICJzJSAkcGF0aCAlICVnImAKICAgICAg IwlkZXBsaWJzPWAkRUNITyAiJGRlcGxpYnMgIiB8ICRTRUQgInMlIC1MJHBhdGggJSAlZyJg CiAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwg JFNFRCAicyUgLUwkcGF0aCAlICVnImAKICAgICAgI2RvbmUKCiAgICAgIGlmIHRlc3QgLW4g IiR4cnBhdGgiOyB0aGVuCgkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxh Z3MsIHRoZW4gYWRkIHRoZW0uCgl0ZW1wX3hycGF0aD0KCWZvciBsaWJkaXIgaW4gJHhycGF0 aDsgZG8KCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCgkgIGZ1bmNfYXBwZW5k IHRlbXBfeHJwYXRoICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgoJICBjYXNl ICIkZmluYWxpemVfcnBhdGggIiBpbgoJICAqIiAkbGliZGlyICIqKSA7OwoJICAqKSBmdW5j X2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CgkgIGVzYWMKCWRvbmUKCWlm IHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfaW50b19saWJzIiB8fCB0ZXN0IHllcyA9ICIkYnVp bGRfb2xkX2xpYnMiOyB0aGVuCgkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRk ZXBlbmRlbmN5X2xpYnMiCglmaQogICAgICBmaQoKICAgICAgIyBNYWtlIHN1cmUgZGxmaWxl cyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVk CiAgICAgIG9sZF9kbGZpbGVzPSRkbGZpbGVzCiAgICAgIGRsZmlsZXM9CiAgICAgIGZvciBs aWIgaW4gJG9sZF9kbGZpbGVzOyBkbwoJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIg aW4KCSoiICRsaWIgIiopIDs7CgkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsK CWVzYWMKICAgICAgZG9uZQoKICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlu cyBvbmx5IHVuaXF1ZSBmaWxlcwogICAgICBvbGRfZGxwcmVmaWxlcz0kZGxwcmVmaWxlcwog ICAgICBkbHByZWZpbGVzPQogICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8K CWNhc2UgIiRkbHByZWZpbGVzICIgaW4KCSoiICRsaWIgIiopIDs7CgkqKSBmdW5jX2FwcGVu ZCBkbHByZWZpbGVzICIgJGxpYiIgOzsKCWVzYWMKICAgICAgZG9uZQoKICAgICAgaWYgdGVz dCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KCWlmIHRlc3QgLW4gIiRycGF0 aCI7IHRoZW4KCSAgY2FzZSAkaG9zdCBpbgoJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyog fCAqLSotd2luZG93cyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICot Y2VnY2MqIHwgKi0qLWhhaWt1KikKCSAgICAjIHRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFs bHkgaGF2ZSBhIGMgbGlicmFyeSAoYXMgc3VjaCkhCgkgICAgOzsKCSAgKi0qLXJoYXBzb2R5 KiB8ICotKi1kYXJ3aW4xLlswMTJdKQoJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGlu IHRoZSBTeXN0ZW0gZnJhbWV3b3JrCgkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3Rl bS5sdGZyYW1ld29yayIKCSAgICA7OwoJICAqLSotbmV0YnNkKikKCSAgICAjIERvbid0IGxp bmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KCSAgICA7OwoJ ICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KiB8ICotKi1t aWRuaWdodGJzZCopCgkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZp bmcgbGliYy9saWJjX3IuCgkgICAgOzsKCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYq KQoJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQoJICAgIDs7CgkgICotKi1z eXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklY KikKCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBm b3IgdGhyZWFkcyB0byB3b3JrCgkgICAgOzsKCSAgKikKCSAgICAjIEFkZCBsaWJjIHRvIGRl cGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgoJICAgIGlmIHRlc3Qg eWVzID0gIiRidWlsZF9saWJ0b29sX25lZWRfbGMiOyB0aGVuCgkgICAgICBmdW5jX2FwcGVu ZCBkZXBsaWJzICIgLWxjIgoJICAgIGZpCgkgICAgOzsKCSAgZXNhYwoJZmkKCgkjIFRyYW5z Zm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBz aGFyZWQuCgluYW1lX3NhdmU9JG5hbWUKCWxpYm5hbWVfc2F2ZT0kbGlibmFtZQoJcmVsZWFz ZV9zYXZlPSRyZWxlYXNlCgl2ZXJzdWZmaXhfc2F2ZT0kdmVyc3VmZml4CgltYWpvcl9zYXZl PSRtYWpvcgoJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNv cnJlY3RseS4gIEkgdGhpbmsKCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwg KGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bwoJIyBhZGQgaXQgaW4gdHdpY2UuICBJ cyB0aGF0IGNvcnJlY3Q/CglyZWxlYXNlPQoJdmVyc3VmZml4PQoJbWFqb3I9CgluZXdkZXBs aWJzPQoJZHJvcHBlZGRlcHM9bm8KCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCglw YXNzX2FsbCkKCSAgIyBEb24ndCBjaGVjayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhp bmcgd29ya3MuCgkgICMgVGhpcyBtaWdodCBiZSBhIGxpdHRsZSBuYWl2ZS4gIFdlIG1pZ2h0 IHdhbnQgdG8gY2hlY2sKCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3Qu ICBCdXQgdGhpcyBpcyBvbgoJICAjIG9zZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBz dXJlLi4uIEp1c3QKCSAgIyBpbXBsZW1lbnRpbmcgd2hhdCB3YXMgYWxyZWFkeSB0aGUgYmVo YXZpb3IuCgkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKCSAgOzsKCWZpbGVfbWFnaWMqKQoJICBz ZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAoJICBmaWxlX21hZ2ljX3Jl Z2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCgkgIGZv ciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KCSAgICBjYXNlICRhX2RlcGxpYiBpbgoJICAg IC1sKikKCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCgkgICAgICBu YW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKCSAgICAgIGlmIHRlc3QgeWVzID0gIiRhbGxv d19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCgkJY2FzZSAiICRw cmVkZXBzICRwb3N0ZGVwcyAiIGluCgkJKiIgJGFfZGVwbGliICIqKQoJCSAgZnVuY19hcHBl bmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKCQkgIGFfZGVwbGliPQoJCSAgOzsKCQllc2Fj CgkgICAgICBmaQoJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgoJCWxpYm5h bWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAoJCWlmIHRlc3QgLW4gIiRm aWxlX21hZ2ljX2dsb2IiOyB0aGVuCgkJICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAi JGxpYm5hbWUiIHwgJFNFRCAtZSAkZmlsZV9tYWdpY19nbG9iYAoJCWVsc2UKCQkgIGxpYm5h bWVnbG9iPSRsaWJuYW1lCgkJZmkKCQl0ZXN0IHllcyA9ICIkd2FudF9ub2Nhc2VnbG9iIiAm JiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAoJCWZvciBpIGluICRsaWJfc2Vh cmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbwoJ CSAgaWYgdGVzdCB5ZXMgPSAiJHdhbnRfbm9jYXNlZ2xvYiI7IHRoZW4KCQkgICAgc2hvcHQg LXMgbm9jYXNlZ2xvYgoJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9i Wy4tXSogMj4vZGV2L251bGxgCgkJICAgICRub2Nhc2VnbG9iCgkJICBlbHNlCgkJICAgIHBv dGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKCQkg IGZpCgkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCgkJICAgICAg IyBGb2xsb3cgc29mdCBsaW5rcy4KCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIg Mj4vZGV2L251bGwgfAoJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KCQkJY29u dGludWUKCQkgICAgICBmaQoJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0 byBhdm9pZCBlbnRlcmluZyBhbgoJCSAgICAgICMgZW5kbGVzcyBsb29wIGJlbG93LCBpbiBj YXNlIG9mIGN5Y2xpYyBsaW5rcy4KCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFu IGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCgkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9z ZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAoJCSAgICAgICMgYnV0IHNvIHdoYXQ/CgkJICAg ICAgcG90bGliPSRwb3RlbnRfbGliCgkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIg Mj4vZGV2L251bGw7IGRvCgkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJFNFRCAn cy8uKiAtPiAvLydgCgkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KCQkJW1xcL10qIHwgW0EtWmEt el06W1xcL10qKSBwb3RsaWI9JHBvdGxpYmxpbms7OwoJCQkqKSBwb3RsaWI9YCRFQ0hPICIk cG90bGliIiB8ICRTRUQgJ3N8W14vXSokfHwnYCIkcG90bGlibGluayI7OwoJCQllc2FjCgkJ ICAgICAgZG9uZQoJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJc IiAyPi9kZXYvbnVsbCB8CgkJCSAkU0VEIC1lIDEwcSB8CgkJCSAkRUdSRVAgIiRmaWxlX21h Z2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgoJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJz ICIgJGFfZGVwbGliIgoJCQlhX2RlcGxpYj0KCQkJYnJlYWsgMgoJCSAgICAgIGZpCgkJICBk b25lCgkJZG9uZQoJICAgICAgZmkKCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRo ZW4KCQlkcm9wcGVkZGVwcz15ZXMKCQlmdW5jX3dhcm5pbmcgIkxpbmtlciBwYXRoIGRvZXMg bm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCgkJZnVuY193YXJu aW5nICJJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21h dGljYWxseSBsaW5rIGluIHdoZW4iCgkJZnVuY193YXJuaW5nICJ5b3UgbGluayB0byB0aGlz IGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCgkJZnVu Y193YXJuaW5nICJzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRv IG5vdCBhcHBlYXIgdG8gaGF2ZSIKCQlmdW5jX3dhcm5pbmcgImJlY2F1c2UgSSBkaWQgY2hl Y2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKCQlpZiB0 ZXN0IC16ICIkcG90bGliIjsgdGhlbgoJCSAgZnVuY193YXJuaW5nICJ3aXRoICRsaWJuYW1l IGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0 KSIKCQllbHNlCgkJICBmdW5jX3dhcm5pbmcgIndpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2Yg dGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKCQkgIGZ1bmNfd2Fy bmluZyAidXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIK CQlmaQoJICAgICAgZmkKCSAgICAgIDs7CgkgICAgKikKCSAgICAgICMgQWRkIGEgLUwgYXJn dW1lbnQuCgkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgoJICAg ICAgOzsKCSAgICBlc2FjCgkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCgkg IDs7CgltYXRjaF9wYXR0ZXJuKikKCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhv ZDsgc2hpZnQKCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tf bWV0aG9kIiA6ICIkMSBcKC4qXCkiYAoJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRv CgkgICAgY2FzZSAkYV9kZXBsaWIgaW4KCSAgICAtbCopCgkgICAgICBmdW5jX3N0cmlwbmFt ZSAtbCAnJyAiJGFfZGVwbGliIgoJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0 CgkgICAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGlj X3J1bnRpbWVzIjsgdGhlbgoJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgoJCSoi ICRhX2RlcGxpYiAiKikKCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIi CgkJICBhX2RlcGxpYj0KCQkgIDs7CgkJZXNhYwoJICAgICAgZmkKCSAgICAgIGlmIHRlc3Qg LW4gIiRhX2RlcGxpYiI7IHRoZW4KCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5h bWVfc3BlY1wiImAKCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJj aF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KCQkgIHBvdGVudGlhbF9saWJzPWBscyAk aS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAoJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBv dGVudGlhbF9saWJzOyBkbwoJCSAgICBwb3RsaWI9JHBvdGVudF9saWIgIyBzZWUgc3ltbGlu ay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKCQkgICAgaWYgZXZhbCAiXCRFQ0hP IFwiJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSB8IFwKCQkgICAgICAg JEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KCQkgICAg ICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgoJCSAgICAgIGFfZGVwbGli PQoJCSAgICAgIGJyZWFrIDIKCQkgICAgZmkKCQkgIGRvbmUKCQlkb25lCgkgICAgICBmaQoJ ICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgoJCWRyb3BwZWRkZXBzPXllcwoJ CWZ1bmNfd2FybmluZyAiTGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9y IGxpYnJhcnkgJGFfZGVwbGliLiIKCQlmdW5jX3dhcm5pbmcgIkkgaGF2ZSB0aGUgY2FwYWJp bGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIK CQlmdW5jX3dhcm5pbmcgInlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBv bmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKCQlmdW5jX3dhcm5pbmcgInNoYXJlZCB2ZXJz aW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgoJ CWZ1bmNfd2FybmluZyAiYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9v a2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgoJCWlmIHRlc3QgLXogIiRwb3RsaWIiOyB0aGVu CgkJICBmdW5jX3dhcm5pbmcgIndpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2Vy ZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgoJCWVsc2UKCQkgIGZ1bmNf d2FybmluZyAid2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNz ZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgoJCSAgZnVuY193YXJuaW5nICJ1c2luZyBhIHJlZ2V4 IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgoJCWZpCgkgICAgICBmaQoJ ICAgICAgOzsKCSAgICAqKQoJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KCSAgICAgIGZ1 bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCgkgICAgICA7OwoJICAgIGVzYWMK CSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KCSAgOzsKCW5vbmUgfCB1bmtu b3duIHwgKikKCSAgbmV3ZGVwbGlicz0KCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJGRlcGxp YnMiIHwgJFNFRCAncy8gLWxjJC8vOyBzLyAtW0xSXVteIF0qLy9nJ2AKCSAgaWYgdGVzdCB5 ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4K CSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCgkgICAgICAjIGNhbid0IHVz ZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCgkgICAgICB0bXBf ZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAic3wkaXx8ImAKCSAgICBk b25lCgkgIGZpCgkgIGNhc2UgJHRtcF9kZXBsaWJzIGluCgkgICpbIVwJXCBdKikKCSAgICBl Y2hvCgkgICAgaWYgdGVzdCBub25lID0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4K CSAgICAgIGZ1bmNfd2FybmluZyAiSW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5v dCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCgkgICAgZWxzZQoJICAgICAgZnVuY193 YXJuaW5nICJJbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJl IHN1cHBvcnRlZC4iCgkgICAgZmkKCSAgICBmdW5jX3dhcm5pbmcgIkFsbCBkZWNsYXJlZCBp bnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCgkgICAgZHJv cHBlZGRlcHM9eWVzCgkgICAgOzsKCSAgZXNhYwoJICA7OwoJZXNhYwoJdmVyc3VmZml4PSR2 ZXJzdWZmaXhfc2F2ZQoJbWFqb3I9JG1ham9yX3NhdmUKCXJlbGVhc2U9JHJlbGVhc2Vfc2F2 ZQoJbGlibmFtZT0kbGlibmFtZV9zYXZlCgluYW1lPSRuYW1lX3NhdmUKCgljYXNlICRob3N0 IGluCgkqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCgkgICMgT24gUmhhcHNv ZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKCSAg bmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0 ZW0ubHRmcmFtZXdvcmsgLydgCgkgIDs7Cgllc2FjCgoJaWYgdGVzdCB5ZXMgPSAiJGRyb3Bw ZWRkZXBzIjsgdGhlbgoJICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIjsgdGhlbgoJICAgIGZ1 bmNfd2FybmluZyAibGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50 ZXItbGlicmFyeSIKCSAgICBmdW5jX3dhcm5pbmcgImRlcGVuZGVuY2llcyBvZiBtb2R1bGUg JGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCgkgICAgZnVuY193 YXJuaW5nICJhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0 aGUgZGxvcGVuaW5nIgoJICAgIGZ1bmNfd2FybmluZyAiYXBwbGljYXRpb24gaXMgbGlua2Vk IHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCgkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1i b2xfcGlwZSI7IHRoZW4KCSAgICAgIGZ1bmNfd2FybmluZyAiSG93ZXZlciwgdGhpcyB3b3Vs ZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKCSAg ICAgIGZ1bmNfd2FybmluZyAibGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nICdubScgb3Ig ZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCgkgICAgICBmdW5jX3dhcm5pbmcgIm5v dCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVz ZWxlc3MuIgoJICAgICAgZnVuY193YXJuaW5nICInbm0nIGZyb20gR05VIGJpbnV0aWxzIGFu ZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCgkgICAgZmkKCSAgICBpZiB0ZXN0IG5vID0g IiRidWlsZF9vbGRfbGlicyI7IHRoZW4KCSAgICAgIG9sZGxpYnM9JG91dHB1dF9vYmpkaXIv JGxpYm5hbWUuJGxpYmV4dAoJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQoJICAg ICAgYnVpbGRfb2xkX2xpYnM9eWVzCgkgICAgZWxzZQoJICAgICAgYnVpbGRfbGlidG9vbF9s aWJzPW5vCgkgICAgZmkKCSAgZWxzZQoJICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFy eSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCgkg ICAgZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlz IGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKCSAgICBlY2hvICIqKiogb3IgaXMgZGVjbGFy ZWQgdG8gLWRsb3BlbiBpdC4iCgoJICAgIGlmIHRlc3Qgbm8gPSAiJGFsbG93X3VuZGVmaW5l ZCI7IHRoZW4KCSAgICAgIGVjaG8KCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJh cnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCgkgICAgICBlY2hvICIq KiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBv ciIKCSAgICAgIGVjaG8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAt bm8tdW5kZWZpbmVkLCIKCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVh dGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCgkgICAgICBpZiB0ZXN0IG5vID0gIiRidWls ZF9vbGRfbGlicyI7IHRoZW4KCQlvbGRsaWJzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRs aWJleHQKCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCgkJYnVpbGRfb2xkX2xpYnM9eWVz CgkgICAgICBlbHNlCgkJYnVpbGRfbGlidG9vbF9saWJzPW5vCgkgICAgICBmaQoJICAgIGZp CgkgIGZpCglmaQoJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCglkZXBsaWJzPSRuZXdkZXBs aWJzCiAgICAgIGZpCiAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJh bWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKICAgICAgY2FzZSAkaG9z dCBpbgoJKi0qLWRhcndpbiopCgkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMi IHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AK CSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIgJG5ld19pbmhlcml0ZWRf bGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFt ZXdvcmsgXDElZydgCgkgIGRlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUg XChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKCSAgOzsKICAgICAg ZXNhYwoKICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUg d2l0aCBwYXRocyB0byBub3QgeWV0CiAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0 aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CiAgICAgIG5ld19saWJz PQogICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbwoJY2FzZSAiICRuZXdfbGli cyAiIGluCgkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CgkqKQoJICBjYXNlICIgJGRlcGxp YnMgIiBpbgoJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCgkgICAgZnVuY19hcHBlbmQgbmV3 X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CgkgIGVzYWMKCSAgOzsKCWVzYWMKICAgICAg ZG9uZQogICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwoJY2FzZSAkZGVwbGliIGlu CgktTCopCgkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgoJICAqIiAkZGVwbGliICIqKSA7OwoJ ICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CgkgIGVzYWMKCSAgOzsK CSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKCWVzYWMKICAgICAgZG9u ZQogICAgICBkZXBsaWJzPSRuZXdfbGlicwoKICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3Bl Y2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgogICAgICBs aWJyYXJ5X25hbWVzPQogICAgICBvbGRfbGlicmFyeT0KICAgICAgZGxuYW1lPQoKICAgICAg IyBUZXN0IGFnYWluLCB3ZSBtYXkgaGF2ZSBkZWNpZGVkIG5vdCB0byBidWlsZCBpdCBhbnkg bW9yZQogICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgoJ IyBSZW1vdmUgJHdsIGluc3RhbmNlcyB3aGVuIGxpbmtpbmcgd2l0aCBsZC4KCSMgRklYTUU6 IHNob3VsZCB0ZXN0IHRoZSByaWdodCBfY21kcyB2YXJpYWJsZS4KCWNhc2UgJGFyY2hpdmVf Y21kcyBpbgoJICAqXCRMRFwgKikgd2w9IDs7CiAgICAgICAgZXNhYwoJaWYgdGVzdCB5ZXMg PSAiJGhhcmRjb2RlX2ludG9fbGlicyI7IHRoZW4KCSAgIyBIYXJkY29kZSB0aGUgbGlicmFy eSBwYXRocwoJICBoYXJkY29kZV9saWJkaXJzPQoJICBkZXBfcnBhdGg9CgkgIHJwYXRoPSRm aW5hbGl6ZV9ycGF0aAoJICB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHJwYXRoPSRj b21waWxlX3JwYXRoJHJwYXRoCgkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbwoJICAgIGlm IHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgoJICAgICAgaWYg dGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCgkJZnVuY19yZXBs YWNlX3N5c3Jvb3QgIiRsaWJkaXIiCgkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9y ZXN1bHQKCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KCQkgIGhhcmRj b2RlX2xpYmRpcnM9JGxpYmRpcgoJCWVsc2UKCQkgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1 bmlxdWUgbGliZGlycy4KCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFy ZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCgkJICAqIiRoYXJk Y29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9y IiopCgkJICAgIDs7CgkJICAqKQoJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJz ICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCgkJICAgIDs7CgkJICBlc2Fj CgkJZmkKCSAgICAgIGVsc2UKCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdf c3BlY1wiCgkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCgkgICAgICBmaQoJICAg IGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgoJICAgICAgY2FzZSAiJHBlcm1f cnBhdGggIiBpbgoJICAgICAgKiIgJGxpYmRpciAiKikgOzsKCSAgICAgICopIGZ1bmNfYXBw ZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OwoJICAgICAgZXNhYwoJICAgIGZpCgkgIGRv bmUKCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0 aC4KCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCgkgICAg IHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgoJICAgIGxpYmRpcj0kaGFyZGNv ZGVfbGliZGlycwoJICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxh Z19zcGVjXCIiCgkgIGZpCgkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAt biAiJHBlcm1fcnBhdGgiOyB0aGVuCgkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRo X3Zhci4KCSAgICBycGF0aD0KCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbwoJICAg ICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgoJICAgIGRvbmUKCSAgICBldmFsICIkcnVu cGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIK CSAgZmkKCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAk ZGVwbGlicyIKCWZpCgoJc2hsaWJwYXRoPSRmaW5hbGl6ZV9zaGxpYnBhdGgKCXRlc3QgcmVs aW5rID0gIiRvcHRfbW9kZSIgfHwgc2hsaWJwYXRoPSRjb21waWxlX3NobGlicGF0aCRzaGxp YnBhdGgKCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCgkgIGV2YWwgIiRzaGxpYnBh dGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRo X3ZhciIKCWZpCgoJIyBHZXQgdGhlIHJlYWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJh cnkuCglldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgoJZXZhbCBsaWJyYXJ5X25h bWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCglzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMK CXNoaWZ0CglyZWFsbmFtZT0kMQoJc2hpZnQKCglpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMi OyB0aGVuCgkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKCWVsc2UKCSAgc29uYW1l PSRyZWFsbmFtZQoJZmkKCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCgkgIGRsbmFtZT0k c29uYW1lCglmaQoKCWxpYj0kb3V0cHV0X29iamRpci8kcmVhbG5hbWUKCWxpbmtuYW1lcz0K CWZvciBsaW5rCglkbwoJICBmdW5jX2FwcGVuZCBsaW5rbmFtZXMgIiAkbGluayIKCWRvbmUK CgkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYwoJdGVzdCAteiAiJHBp Y19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAi JGxvMm8iIHwgJE5MMlNQYAoJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0K CglkZWxmaWxlcz0KCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAi JGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0 X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgoJICBleHBvcnRfc3lt Ym9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwCgkgIGZ1bmNfYXBwZW5kIGRlbGZp bGVzICIgJGV4cG9ydF9zeW1ib2xzIgoJZmkKCglvcmlnX2V4cG9ydF9zeW1ib2xzPQoJY2Fz ZSAkaG9zdF9vcyBpbgoJY3lnd2luKiB8IG1pbmd3KiB8IHdpbmRvd3MqIHwgY2VnY2MqKQoJ ICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3lt Ym9sc19yZWdleCI7IHRoZW4KCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVk IHN5bWZpbGUKCSAgICBmdW5jX2RsbF9kZWZfcCAiJGV4cG9ydF9zeW1ib2xzIiB8fCB7Cgkg ICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBv dXQKCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9s cyBhbmQgdGFnCgkgICAgICAjIHRoZW0gYXMgc3VjaC4gU28sIHRyaWdnZXIgdXNlIG9mIGV4 cG9ydF9zeW1ib2xzX2NtZHMuCgkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3Np Z25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCgkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVk IHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCgkgICAgICAjIGluY2x1ZGVfZXhwc3lt cyBsb2dpYyBzdGlsbCB3b3Jrcy4KCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9JGV4cG9y dF9zeW1ib2xzCgkgICAgICBleHBvcnRfc3ltYm9scz0KCSAgICAgIGFsd2F5c19leHBvcnRf c3ltYm9scz15ZXMKCSAgICB9CgkgIGZpCgkgIDs7Cgllc2FjCgoJIyBQcmVwYXJlIHRoZSBs aXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7 IHRoZW4KCSAgaWYgdGVzdCB5ZXMgPSAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfHwgdGVz dCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgoJICAgIGZ1bmNfdmVyYm9zZSAi Z2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyIKCSAgICBleHBvcnRf c3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAKCSAgICAkb3B0X2RyeV9ydW4g fHwgJFJNICRleHBvcnRfc3ltYm9scwoJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMK CSAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCgkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRv CgkgICAgICBJRlM9JHNhdmVfaWZzCgkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2gg aWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAoJICAgICAgIyBkb2Vzbid0IHdvcmsg b3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCgkgICAgICBjYXNlICRubV9m aWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9maWxlX2NtZCBpbgoJCSp+ZnVuY19jb252ZXJ0X2Zp bGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKCQkgIHRy eV9ub3JtYWxfYnJhbmNoPXllcwoJCSAgZXZhbCBjbWQ9XCIkY21kMVwiCgkJICBmdW5jX2xl biAiICRjbWQiCgkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAoJCSAgOzsKCQkqKQoJCSAgdHJ5 X25vcm1hbF9icmFuY2g9bm8KCQkgIDs7CgkgICAgICBlc2FjCgkgICAgICBpZiB0ZXN0IHll cyA9ICIkdHJ5X25vcm1hbF9icmFuY2giIFwKCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRt YXhfY21kX2xlbiIgXAoJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9 CgkgICAgICB0aGVuCgkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JwoJCXNraXBw ZWRfZXhwb3J0PWZhbHNlCgkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3Bl YyI7IHRoZW4KCQlmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgoJCW91dHB1dF9sYT0kZnVuY19i YXNlbmFtZV9yZXN1bHQKCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKCQlzYXZlX291dHB1dD0k b3V0cHV0CgkJb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubm0KCQlmdW5jX3Rv X3Rvb2xfZmlsZSAiJG91dHB1dCIKCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5j X3RvX3Rvb2xfZmlsZV9yZXN1bHQKCQlmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQi CgkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0 IgoJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KCQkgIGZ1bmNfdG9fdG9vbF9maWxl ICIkb2JqIgoJCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCgkJZG9uZSA+ ICIkb3V0cHV0IgoJCWV2YWwgY21kPVwiJGNtZDFcIgoJCWZ1bmNfc2hvd19ldmFsICIkY21k IiAnZXhpdCAkPycKCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CgkJbGlib2Jqcz0kc2F2ZV9saWJv YmpzCgkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKCSAgICAgIGVsc2UKCQkjIFRoZSBjb21tYW5k IGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KCQlmdW5jX3ZlcmJv c2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgoJ CXNraXBwZWRfZXhwb3J0PToKCQkjIEJyZWFrIG91dCBlYXJseSwgb3RoZXJ3aXNlIHNraXBw ZWRfZXhwb3J0IG1heSBiZQoJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0 ZXIgY21kLgoJCWJyZWFrCgkgICAgICBmaQoJICAgIGRvbmUKCSAgICBJRlM9JHNhdmVfaWZz CgkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0IDogIT0g IiRza2lwcGVkX2V4cG9ydCI7IHRoZW4KCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAg LWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBv cnRfc3ltYm9sc31UIicKCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5 bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCgkgICAgZmkKCSAgZmkKCWZpCgoJaWYgdGVz dCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsg dGhlbgoJICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCgkgIHRlc3QgLW4g IiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9JG9yaWdfZXhw b3J0X3N5bWJvbHMKCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9l eHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCglmaQoKCWlmIHRl c3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3lt Ym9scyI7IHRoZW4KCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRv IGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCgkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5 bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCgkgICMg RklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250 YWlucyBsb3RzIG9mCgkgICMgJ3MnIGNvbW1hbmRzLCB3aGljaCBub3QgYWxsIHNlZHMgY2Fu IGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQoJICAjIHRob3VnaC4gQWxzbywgdGhl IGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKCSAgIyBn bG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9y dHVuYXRlbHkKCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KCSAgJG9wdF9kcnlfcnVuIHx8 ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwy fCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVy CgkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2Jq ZGlyLyRsaWJuYW1lLmZpbHRlciIKCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIv JGxpYm5hbWUuZGVmCgkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGly LyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1i b2xzCglmaQoKCXRtcF9kZXBsaWJzPQoJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBk bwoJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7 OwoJICAqKQoJICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgoJ ICAgIDs7CgkgIGVzYWMKCWRvbmUKCWRlcGxpYnM9JHRtcF9kZXBsaWJzCgoJaWYgdGVzdCAt biAiJGNvbnZlbmllbmNlIjsgdGhlbgoJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9m bGFnX3NwZWMiICYmCgkgICAgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIg JiYKCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KCSAgICAjIGV4dHJhY3QgdGhlIGFy Y2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KCSAgICAjIFRPRE86IGNvdWxk IG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgoJICAgIHdob2xl X2FyY2hpdmVfZmxhZ19zcGVjPQoJICBmaQoJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2 ZV9mbGFnX3NwZWMiOyB0aGVuCgkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCgkgICAgZXZh bCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCgkgICAg dGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KCSAgZWxzZQoJICAgIGdlbnRv cD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAoJICAgIGZ1bmNfYXBwZW5kIGdlbmVy YXRlZCAiICRnZW50b3AiCgoJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRj b252ZW5pZW5jZQoJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2Fy Y2hpdmVzX3Jlc3VsdCIKCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpz PQoJICBmaQoJZmkKCglpZiB0ZXN0IHllcyA9ICIkdGhyZWFkX3NhZmUiICYmIHRlc3QgLW4g IiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCgkgIGV2YWwgZmxhZz1cIiR0aHJlYWRf c2FmZV9mbGFnX3NwZWNcIgoJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIK CWZpCgoJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4g cmVsaW5raW5nCglpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCgkgICRvcHRf ZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9 VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KCWZpCgoJIyBE byBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgoJaWYgdGVzdCB5ZXMgPSAiJG1vZHVs ZSIgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIjsgdGhlbgoJICBpZiB0ZXN0IC1uICIkZXhw b3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCgkg ICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKCSAgICBjbWRzPSRt b2R1bGVfZXhwc3ltX2NtZHMKCSAgZWxzZQoJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVs ZV9jbWRzXCIKCSAgICBjbWRzPSRtb2R1bGVfY21kcwoJICBmaQoJZWxzZQoJICBpZiB0ZXN0 IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRz IjsgdGhlbgoJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgoJ ICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKCSAgZWxzZQoJICAgIGV2YWwgdGVzdF9j bWRzPVwiJGFyY2hpdmVfY21kc1wiCgkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCgkgIGZpCglm aQoKCWlmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJgoJICAgZnVuY19sZW4gIiAk dGVzdF9jbWRzIiAmJgoJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKCSAgIHRlc3QgIiRs ZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsg dGhlbgoJICA6CgllbHNlCgkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBs aW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQoJICAjIG9yLCBpZiB1c2luZyBHTlUg bGQgYW5kIHNraXBwZWRfZXhwb3J0IGlzIG5vdCA6LCB1c2UgYSBsaW5rZXIKCSAgIyBzY3Jp cHQuCgoJICAjIFNhdmUgdGhlIHZhbHVlIG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1 c2Ugd2Ugd2FudCB0bwoJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9h cmNoaXZlX2ZsYWdfc3BlYywgd2UKCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMg aXQgd2FzIGJlZm9yZQoJICAjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIHdhcyBleHBhbmRl ZCwgYmVjYXVzZSB3ZSBjYW4ndAoJICAjIGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRz IHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLgoJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2 aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55CgkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIGdl dCBsaW5rZWQgaW4gYW5kIGVuZCB1cCBleGNlZWRpbmcKCSAgIyB0aGUgc3BlYy4KCSAgaWYg dGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFn X3NwZWMiOyB0aGVuCgkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCgkgIGZpCgkgIHNhdmVf b3V0cHV0PSRvdXRwdXQKCSAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKCSAgb3V0cHV0X2xh PSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoKCSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmpl Y3QgY3JlYXRpb24gY29tbWFuZCBxdWV1ZSBhbmQKCSAgIyBpbml0aWFsaXplIGsgdG8gb25l LgoJICB0ZXN0X2NtZHM9CgkgIGNvbmNhdF9jbWRzPQoJICBvYmpsaXN0PQoJICBsYXN0X3Jv Ymo9CgkgIGs9MQoKCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCA6ICE9 ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4K CSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5sbmtzY3JpcHQKCSAgICBm dW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCgkgICAgZWNo byAnSU5QVVQgKCcgPiAkb3V0cHV0CgkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCgkg ICAgZG8KCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgoJICAgICAgJEVDSE8gIiRm dW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKCSAgICBkb25lCgkgICAgZWNo byAnKScgPj4gJG91dHB1dAoJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIK CSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKCSAgICBvdXRwdXQ9JGZ1bmNfdG9f dG9vbF9maWxlX3Jlc3VsdAoJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRl c3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IC1uICIkZmlsZV9saXN0X3NwZWMi OyB0aGVuCgkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubG5rCgkgICAg ZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0 IgoJICAgIDogPiAkb3V0cHV0CgkgICAgc2V0IHggJHNhdmVfbGlib2JqcwoJICAgIHNoaWZ0 CgkgICAgZmlyc3RvYmo9CgkgICAgaWYgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29i amVjdCI7IHRoZW4KCSAgICAgIGZpcnN0b2JqPSIkMSAiCgkgICAgICBzaGlmdAoJICAgIGZp CgkgICAgZm9yIG9iagoJICAgIGRvCgkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIK CSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0Cgkg ICAgZG9uZQoJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKCSAgICBmdW5j X3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9s aXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIKCSAgZWxzZQoJICAgIGlmIHRl c3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCgkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0 aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgoJICAgICAgb3V0cHV0PSRvdXRwdXRf b2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAoJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIk cmVsb2FkX2NtZHNcIgoJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgoJICAgICAgbGVu MD0kZnVuY19sZW5fcmVzdWx0CgkgICAgICBsZW49JGxlbjAKCgkgICAgICAjIExvb3Agb3Zl ciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KCSAgICAgIGZvciBvYmogaW4g JHNhdmVfbGlib2JqcwoJICAgICAgZG8KCQlmdW5jX2xlbiAiICRvYmoiCgkJZnVuY19hcml0 aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAoJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKCQlp ZiB0ZXN0IC16ICIkb2JqbGlzdCIgfHwKCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21k X2xlbiI7IHRoZW4KCQkgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgoJCWVsc2UKCQkg ICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCgkJ ICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgoJCSAgaWYgdGVzdCAxIC1lcSAiJGsiOyB0aGVu CgkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFu ZCB0byBhZGQuCgkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CgkJICAgIGV2YWwgY29uY2F0 X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgoJCSAgZWxzZQoJCSAgICAjIEFsbCBzdWJzZXF1ZW50 IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgoJCSAgICAjIHRoZSBsYXN0 IG9uZSBjcmVhdGVkLgoJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIK CQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwk Uk0gJGxhc3Rfcm9ialwiCgkJICBmaQoJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRv dXRwdXRfbGEtJGsuJG9iamV4dAoJCSAgZnVuY19hcml0aCAkayArIDEKCQkgIGs9JGZ1bmNf YXJpdGhfcmVzdWx0CgkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4k b2JqZXh0CgkJICBvYmpsaXN0PSIgJG9iaiIKCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIK CQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CgkJICBsZW49JGZ1bmNf YXJpdGhfcmVzdWx0CgkJZmkKCSAgICAgIGRvbmUKCSAgICAgICMgSGFuZGxlIHRoZSByZW1h aW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAoJICAgICAgIyByZWxvYWRhYmxl IG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKCSAgICAg ICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgoJICAgICAgdGVz dCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CgkgICAg ICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKCSAgICAgIGV2YWwgY29uY2F0 X2NtZHM9XCJcJGNvbmNhdF9jbWRzJHJlbG9hZF9jbWRzXCIKCSAgICAgIGlmIHRlc3QgLW4g IiRsYXN0X3JvYmoiOyB0aGVuCgkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNh dF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCgkgICAgICBmaQoJICAgICAgZnVuY19hcHBlbmQg ZGVsZmlsZXMgIiAkb3V0cHV0IgoKCSAgICBlbHNlCgkgICAgICBvdXRwdXQ9CgkgICAgZmkK CgkgICAgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX0gJiYgewoJICAgICAgZnVuY192ZXJib3Nl ICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIgoJICAgICAgZXhw b3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwCgkgICAgICAkb3B0X2Ry eV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scwoJICAgICAgbGlib2Jqcz0kb3V0cHV0Cgkg ICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgoJ ICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2Nt ZHN+CgkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3lt Ym9sc19jbWRzXCIKCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCgkJZXZh bCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKCSAgICAg IGZpCgkgICAgfQoKCSAgICB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJgoJICAgICAgZnVu Y192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxl OiAkb3V0cHV0IgoKCSAgICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVk IGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCgkgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwoJ ICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbwoJICAgICAgSUZTPSRzYXZlX2lmcwoJ ICAgICAgJG9wdF9xdWlldCB8fCB7CgkJICBmdW5jX3F1b3RlX2FyZyBleHBhbmQscHJldHR5 ICIkY21kIgoJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2FyZ19yZXN1bHQiCgkg ICAgICB9CgkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgewoJCWx0X2V4 aXQ9JD8KCgkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CgkJ aWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgoJCSAgKCBjZCAiJG91dHB1dF9v YmpkaXIiICYmIFwKCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKCQkgICAgJE1WICIk e3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKCQlmaQoKCQlleGl0ICRsdF9leGl0CgkgICAg ICB9CgkgICAgZG9uZQoJICAgIElGUz0kc2F2ZV9pZnMKCgkgICAgaWYgdGVzdCAtbiAiJGV4 cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgoJ ICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4 IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJwoJICAgICAgZnVu Y19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xz IicKCSAgICBmaQoJICBmaQoKICAgICAgICAgICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9ICYm IHsKCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNs dWRlX2V4cHN5bXMiOyB0aGVuCgkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9z eW1ib2xzCgkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4 cG9ydF9zeW1ib2xzPSRvcmlnX2V4cG9ydF9zeW1ib2xzCgkgICAgICAkb3B0X2RyeV9ydW4g fHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4 cG9ydF9zeW1ib2xzIicKCSAgICBmaQoKCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRf c3ltYm9scyI7IHRoZW4KCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxl IGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgoJICAgICAgZnVuY192ZXJib3Nl ICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhw b3J0cyIKCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBw b3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCgkgICAgICAjICdzJyBjb21tYW5kcywgd2hp Y2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKCSAg ICAgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdp dGggdGhlIG51bWJlciBvZgoJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdv dWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKCSAgICAgICMgaXNuJ3QgYSBi bGVzc2VkIHRvb2wuCgkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRB LyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJv bHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKCSAgICAgIGZ1bmNfYXBwZW5k IGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZp bHRlciIKCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRl ZgoJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5h bWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKCSAg ICBmaQoJICB9CgoJICBsaWJvYmpzPSRvdXRwdXQKCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBv ZiBvdXRwdXQuCgkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKCgkgIGlmIHRlc3QgLW4gIiRjb252 ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgoJ ICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNc IgoJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CgkgIGZpCgkgICMg RXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhl CgkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgoKCSAgIyBE byBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgoJICBpZiB0ZXN0IHllcyA9ICIkbW9k dWxlIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiOyB0aGVuCgkgICAgaWYgdGVzdCAtbiAi JGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhl bgoJICAgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCgkgICAgZWxzZQoJICAgICAgY21k cz0kbW9kdWxlX2NtZHMKCSAgICBmaQoJICBlbHNlCgkgICAgaWYgdGVzdCAtbiAiJGV4cG9y dF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KCSAg ICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKCSAgICBlbHNlCgkgICAgICBjbWRzPSRh cmNoaXZlX2NtZHMKCSAgICBmaQoJICBmaQoJZmkKCglpZiB0ZXN0IC1uICIkZGVsZmlsZXMi OyB0aGVuCgkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmls ZXMgdG8gJGNtZHMuCgkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCglm aQoKCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJh cmllcwoJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCgkgIGdlbnRvcD0kb3V0cHV0 X29iamRpci8ke291dHB1dG5hbWV9eAoJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2Vu dG9wIgoKCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKCSAg ZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgoJ ICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQoJZmkKCglzYXZlX2lmcz0k SUZTOyBJRlM9J34nCglmb3IgY21kIGluICRjbWRzOyBkbwoJICBJRlM9JHNwJG5sCgkgIGV2 YWwgY21kPVwiJGNtZFwiCgkgIElGUz0kc2F2ZV9pZnMKCSAgJG9wdF9xdWlldCB8fCB7Cgkg ICAgZnVuY19xdW90ZV9hcmcgZXhwYW5kLHByZXR0eSAiJGNtZCIKCSAgICBldmFsICJmdW5j X2VjaG8gJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKCSAgfQoJICAkb3B0X2RyeV9ydW4gfHwg ZXZhbCAiJGNtZCIgfHwgewoJICAgIGx0X2V4aXQ9JD8KCgkgICAgIyBSZXN0b3JlIHRoZSB1 bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CgkgICAgaWYgdGVzdCByZWxpbmsgPSAiJG9w dF9tb2RlIjsgdGhlbgoJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKCSAgICAg ICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFs bmFtZSIgKQoJICAgIGZpCgoJICAgIGV4aXQgJGx0X2V4aXQKCSAgfQoJZG9uZQoJSUZTPSRz YXZlX2lmcwoKCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAoJ aWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgoJICAkb3B0X2RyeV9ydW4gfHwg ZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRy ZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8 fCBleGl0ICQ/CgoJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCgkgICAgaWYg dGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgoJICAgICAgZnVuY19z aG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCgkgICAgZmkKCSAgZmkKCgkgIGV4aXQgJEVY SVRfU1VDQ0VTUwoJZmkKCgkjIENyZWF0ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgoJ Zm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCgkgIGlmIHRlc3QgIiRyZWFsbmFtZSIg IT0gIiRsaW5rbmFtZSI7IHRoZW4KCSAgICBmdW5jX3Nob3dfZXZhbCAnKGNkICIkb3V0cHV0 X29iamRpciIgJiYgJFJNICIkbGlua25hbWUiICYmICRMTl9TICIkcmVhbG5hbWUiICIkbGlu a25hbWUiKScgJ2V4aXQgJD8nCgkgIGZpCglkb25lCgoJIyBJZiAtbW9kdWxlIG9yIC1leHBv cnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KCWlmIHRlc3QgeWVz ID0gIiRtb2R1bGUiIHx8IHRlc3QgeWVzID0gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KCSAg IyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwu CgkgIGRsbmFtZT0kc29uYW1lCglmaQogICAgICBmaQogICAgICA7OwoKICAgIG9iaikKICAg ICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRs c2VsZiI7IHRoZW4KCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9i amVjdHMiCiAgICAgIGZpCgogICAgICBjYXNlICIgJGRlcGxpYnMiIGluCiAgICAgICpcIC1s KiB8ICpcIC1MKikKCWZ1bmNfd2FybmluZyAiJy1sJyBhbmQgJy1MJyBhcmUgaWdub3JlZCBm b3Igb2JqZWN0cyIgOzsKICAgICAgZXNhYwoKICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBc CglmdW5jX3dhcm5pbmcgIictcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCgogICAg ICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCglmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3Jl ZCBmb3Igb2JqZWN0cyIKCiAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAoJZnVuY193YXJu aW5nICInLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKCiAgICAgIHRl c3QgLW4gIiRyZWxlYXNlIiAmJiBcCglmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdu b3JlZCBmb3Igb2JqZWN0cyIKCiAgICAgIGNhc2UgJG91dHB1dCBpbgogICAgICAqLmxvKQoJ dGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiICYmIFwKCSAgZnVuY19mYXRhbF9lcnJvciAi Y2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0ICckb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29s IG9iamVjdHMiCgoJbGlib2JqPSRvdXRwdXQKCWZ1bmNfbG8ybyAiJGxpYm9iaiIKCW9iaj0k ZnVuY19sbzJvX3Jlc3VsdAoJOzsKICAgICAgKikKCWxpYm9iaj0KCW9iaj0kb3V0cHV0Cgk7 OwogICAgICBlc2FjCgogICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCiAgICAgICRv cHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCgogICAgICAjIE9iamVjdHMgZnJvbSBj b252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKICAgICAgIyBzaW5nbGUtdmVy c2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKICAgICAg IyBkaWZmZXJlbnQgb25lcyBmb3IgUElDL25vbi1QSUMsIHRoaXMgd2UnbGwgaGF2ZSB0byBk dXBsaWNhdGUKICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KICAgICAgcmVsb2FkX2NvbnZfb2Jq cz0KICAgICAgZ2VudG9wPQogICAgICAjIGlmIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVj dGx5LCBnZXQgcmlkIG9mIC1XbCBmcm9tCiAgICAgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3Nw ZWMgYW5kIGhvcGUgd2UgY2FuIGdldCBieSB3aXRoIHR1cm5pbmcgY29tbWEKICAgICAgIyBp bnRvIHNwYWNlLgogICAgICBjYXNlICRyZWxvYWRfY21kcyBpbgogICAgICAgICpcJExEW1wg XCRdKikgd2w9IDs7CiAgICAgIGVzYWMKICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNl IjsgdGhlbgoJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgoJ ICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19z cGVjXCIKCSAgdGVzdCAtbiAiJHdsIiB8fCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1gJEVD SE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKCSAgcmVs b2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcICR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncwoJ ZWxzZQoJICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvYmp9eAoJICBmdW5jX2FwcGVuZCBn ZW5lcmF0ZWQgIiAkZ2VudG9wIgoKCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3Ag JGNvbnZlbmllbmNlCgkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19l eHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKCWZpCiAgICAgIGZpCgogICAgICAjIElmIHdlJ3Jl IG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcwogICAg ICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCBsaWJvYmpzPSRub25fcGlj X29iamVjdHMKCiAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgogICAgICBy ZWxvYWRfb2Jqcz0kb2JqcyRvbGRfZGVwbGlicycgJ2AkRUNITyAiJGxpYm9ianMiIHwgJFNQ Mk5MIHwgJFNFRCAiL1wuJGxpYmV4dCQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1Bg JyAnJHJlbG9hZF9jb252X29ianMKCiAgICAgIG91dHB1dD0kb2JqCiAgICAgIGZ1bmNfZXhl Y3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JwoKICAgICAgIyBFeGl0IGlmIHdl IGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCiAgICAgIGlmIHRlc3QgLXog IiRsaWJvYmoiOyB0aGVuCglpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgoJICBmdW5jX3No b3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKCWZpCgoJZXhpdCAkRVhJVF9TVUNDRVNTCiAg ICAgIGZpCgogICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCB7Cglp ZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgoJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIk Z2VudG9wIicKCWZpCgoJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBu byBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBh IHByb2dyYW0uCgkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCgkjICRvcHRf ZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8K CWV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICB9CgogICAgICBpZiB0ZXN0IC1uICIkcGljX2Zs YWciIHx8IHRlc3QgZGVmYXVsdCAhPSAiJHBpY19tb2RlIjsgdGhlbgoJIyBPbmx5IGRvIGNv bW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KCXJlbG9h ZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKCW91dHB1dD0kbGlib2JqCglm dW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKICAgICAgZmkKCiAg ICAgIGlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCglmdW5jX3Nob3dfZXZhbCAnJHtSTX1y ICIkZ2VudG9wIicKICAgICAgZmkKCiAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICA7 OwoKICAgIHByb2cpCiAgICAgIGNhc2UgJGhvc3QgaW4KCSpjeWd3aW4qKSBmdW5jX3N0cmlw bmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCgkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlw bmFtZV9yZXN1bHQuZXhlOzsKICAgICAgZXNhYwogICAgICB0ZXN0IC1uICIkdmluZm8iICYm IFwKCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dy YW1zIgoKICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKCWZ1bmNfd2FybmluZyAiJy1y ZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKCiAgICAgICRwcmVsb2FkIFwKCSYm IHRlc3QgdW5rbm93bix1bmtub3duLHVua25vd24gPSAiJGRsb3Blbl9zdXBwb3J0LCRkbG9w ZW5fc2VsZiwkZGxvcGVuX3NlbGZfc3RhdGljIiBcCgkmJiBmdW5jX3dhcm5pbmcgIidMVF9J TklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIK CiAgICAgIGNhc2UgJGhvc3QgaW4KICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4x LlswMTJdKQoJIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5 c3RlbSBmcmFtZXdvcmsKCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBs aWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKCWZpbmFsaXpl X2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8g U3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAoJOzsKICAgICAgZXNhYwoKICAgICAgY2FzZSAkaG9z dCBpbgogICAgICAqLSotZGFyd2luKikKCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBp dCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKCSMgQnV0IGlzIHN1cHBvc2VkbHkg Zml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCglpZiB0ZXN0IENYWCA9ICIkdGFnbmFt ZSI7IHRoZW4KCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgoJ ICAgIDEwLlswMTIzXSkKCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3 bC1iaW5kX2F0X2xvYWQiCgkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIg JHdsLWJpbmRfYXRfbG9hZCIKCSAgICA7OwoJICBlc2FjCglmaQoJIyBUaW1lIHRvIGNoYW5n ZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsg Zm9vIgoJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNF RCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKCWZpbmFs aXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncyUgXChb XiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKCTs7CiAgICAgIGVzYWMK CgogICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRo IHBhdGhzIHRvIG5vdCB5ZXQKICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBi ZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKICAgICAgbmV3X2xpYnM9CiAg ICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCgljYXNlICIgJG5ld19saWJzICIg aW4KCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKCSopCgkgIGNhc2UgIiAkY29tcGlsZV9k ZXBsaWJzICIgaW4KCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQoJICAgIGZ1bmNfYXBwZW5k IG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OwoJICBlc2FjCgkgIDs7Cgllc2FjCiAg ICAgIGRvbmUKICAgICAgZm9yIGRlcGxpYiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbwoJY2Fz ZSAkZGVwbGliIGluCgktTCopCgkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgoJICAqIiAkZGVw bGliICIqKSA7OwoJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7Cgkg IGVzYWMKCSAgOzsKCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKCWVz YWMKICAgICAgZG9uZQogICAgICBjb21waWxlX2RlcGxpYnM9JG5ld19saWJzCgoKICAgICAg ZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGNvbXBpbGVfZGVwbGlicyIKICAgICAg ZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgoKICAg ICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KCSMgSWYgdGhlIHVzZXIgc3Bl Y2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KCWZvciBsaWJkaXIgaW4g JHJwYXRoICR4cnBhdGg7IGRvCgkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0 aC4KCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KCSAgKiIgJGxpYmRpciAiKikgOzsK CSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwoJICBlc2Fj Cglkb25lCiAgICAgIGZpCgogICAgICAjIE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRo cwogICAgICBycGF0aD0KICAgICAgaGFyZGNvZGVfbGliZGlycz0KICAgICAgZm9yIGxpYmRp ciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCglpZiB0ZXN0IC1uICIk aGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KCSAgaWYgdGVzdCAtbiAiJGhhcmRj b2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCgkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2Rl X2xpYmRpcnMiOyB0aGVuCgkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKCSAgICBl bHNlCgkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCgkgICAg ICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFy ZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgoJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3Nl cGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQoJCTs7CgkgICAg ICAqKQoJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJf c2VwYXJhdG9yJGxpYmRpciIKCQk7OwoJICAgICAgZXNhYwoJICAgIGZpCgkgIGVsc2UKCSAg ICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCgkgICAgZnVuY19h cHBlbmQgcnBhdGggIiAkZmxhZyIKCSAgZmkKCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFy IjsgdGhlbgoJICBjYXNlICIkcGVybV9ycGF0aCAiIGluCgkgICoiICRsaWJkaXIgIiopIDs7 CgkgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OwoJICBlc2FjCglm aQoJY2FzZSAkaG9zdCBpbgoJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXdpbmRv d3MqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKCSAgdGVzdGJpbmRpcj1g JEVDSE8gIiRsaWJkaXIiIHwgJFNFRCAtZSAncyovbGliJCovYmluKidgCgkgIGNhc2UgOiRk bGxzZWFyY2hwYXRoOiBpbgoJICAqIjokbGliZGlyOiIqKSA7OwoJICA6OikgZGxsc2VhcmNo cGF0aD0kbGliZGlyOzsKCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRsaWJk aXIiOzsKCSAgZXNhYwoJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KCSAgKiI6JHRlc3Ri aW5kaXI6IiopIDs7CgkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKCSAgKikg ZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CgkgIGVzYWMKCSAg OzsKCWVzYWMKICAgICAgZG9uZQogICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBs aWJkaXJzIGludG8gdGhlIHJwYXRoLgogICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGli ZGlyX3NlcGFyYXRvciIgJiYKCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4K CWxpYmRpcj0kaGFyZGNvZGVfbGliZGlycwoJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGli ZGlyX2ZsYWdfc3BlY1wiCiAgICAgIGZpCiAgICAgIGNvbXBpbGVfcnBhdGg9JHJwYXRoCgog ICAgICBycGF0aD0KICAgICAgaGFyZGNvZGVfbGliZGlycz0KICAgICAgZm9yIGxpYmRpciBp biAkZmluYWxpemVfcnBhdGg7IGRvCglpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2Zs YWdfc3BlYyI7IHRoZW4KCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0 b3IiOyB0aGVuCgkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCgkg ICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKCSAgICBlbHNlCgkgICAgICAjIEp1c3Qg YWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCgkgICAgICBjYXNlICRoYXJkY29kZV9s aWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFy YXRvciBpbgoJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFy ZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQoJCTs7CgkgICAgICAqKQoJCWZ1bmNfYXBwZW5k IGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIK CQk7OwoJICAgICAgZXNhYwoJICAgIGZpCgkgIGVsc2UKCSAgICBldmFsIGZsYWc9XCIkaGFy ZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCgkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxh ZyIKCSAgZmkKCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgoJICBjYXNlICIk ZmluYWxpemVfcGVybV9ycGF0aCAiIGluCgkgICoiICRsaWJkaXIgIiopIDs7CgkgICopIGZ1 bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OwoJICBlc2FjCglm aQogICAgICBkb25lCiAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMg aW50byB0aGUgcnBhdGguCiAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2Vw YXJhdG9yIiAmJgoJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgoJbGliZGly PSRoYXJkY29kZV9saWJkaXJzCglldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxh Z19zcGVjXCIKICAgICAgZmkKICAgICAgZmluYWxpemVfcnBhdGg9JHJwYXRoCgogICAgICBp ZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsg dGhlbgoJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFy ZCBvYmplY3RzLgoJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIg fCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCglmaW5hbGl6ZV9jb21tYW5kPWAk RUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5M MlNQYAogICAgICBmaQoKICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1l IiAiQFBST0dSQU1AIiBmYWxzZQoKICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAK ICAgICAgaWYgdGVzdCAtbiAiJHByZWxpbmtfY21kcyI7IHRoZW4KCWZ1bmNfZXhlY3V0ZV9j bWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKICAgICAgZmkKCiAgICAgIHdyYXBwZXJz X3JlcXVpcmVkPToKICAgICAgY2FzZSAkaG9zdCBpbgogICAgICAqY2VnY2MqIHwgKm1pbmd3 MzJjZSopCiAgICAgICAgIyBEaXNhYmxlIHdyYXBwZXJzIGZvciBjZWdjYyBhbmQgbWluZ3cz MmNlIGhvc3RzLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KICAgICAgICB3cmFw cGVyc19yZXF1aXJlZD1mYWxzZQogICAgICAgIDs7CiAgICAgICpjeWd3aW4qIHwgKm1pbmd3 KiB8ICp3aW5kb3dzKiApCiAgICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGli cyIgfHwgd3JhcHBlcnNfcmVxdWlyZWQ9ZmFsc2UKICAgICAgICA7OwogICAgICAqKQogICAg ICAgIGlmIHRlc3Qgbm8gPSAiJG5lZWRfcmVsaW5rIiB8fCB0ZXN0IHllcyAhPSAiJGJ1aWxk X2xpYnRvb2xfbGlicyI7IHRoZW4KICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNl CiAgICAgICAgZmkKICAgICAgICA7OwogICAgICBlc2FjCiAgICAgICR3cmFwcGVyc19yZXF1 aXJlZCB8fCB7CgkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCglj b21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9V VFBVVEAlJyIkb3V0cHV0IiclZydgCglsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfY29tbWFuZCRj b21waWxlX3JwYXRoCgoJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5k ZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCglleGl0X3N0YXR1cz0wCglmdW5jX3No b3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JwoKCWlmIHRlc3QgLW4g IiRwb3N0bGlua19jbWRzIjsgdGhlbgoJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIK CSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNF RCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSci JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAoJICBmdW5jX2V4ZWN1dGVfY21kcyAi JHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JwoJZmkKCgkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVk IGZpbGVzLgoJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9i amV4dCI7IHRoZW4KCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtv dXRwdXRuYW1lfVMuJG9iamV4dCInCglmaQoKCWV4aXQgJGV4aXRfc3RhdHVzCiAgICAgIH0K CiAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBh dGgiOyB0aGVuCgljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVf c2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGls ZV9jb21tYW5kIgogICAgICBmaQogICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJw YXRoIjsgdGhlbgoJZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxp emVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgogICAg ICBmaQoKICAgICAgY29tcGlsZV92YXI9CiAgICAgIGZpbmFsaXplX3Zhcj0KICAgICAgaWYg dGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgoJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgi OyB0aGVuCgkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCgkgIHJwYXRoPQoJ ICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbwoJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIk ZGlyOiIKCSAgZG9uZQoJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQk cnVucGF0aF92YXJcIiAiCglmaQoJaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgi OyB0aGVuCgkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCgkgIHJwYXRoPQoJ ICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbwoJICAgIGZ1bmNfYXBwZW5k IHJwYXRoICIkZGlyOiIKCSAgZG9uZQoJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1c IiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgoJZmkKICAgICAgZmkKCiAgICAgIGlmIHRlc3Qg eWVzID0gIiRub19pbnN0YWxsIjsgdGhlbgoJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBh IHdyYXBwZXIgc2NyaXB0LgoJbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2Nv bW1hbmQkY29tcGlsZV9ycGF0aAoJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZp Y2F0aW9uLgoJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdz JUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAoJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmls ZS4KCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAoJIyBMaW5rIHRoZSBleGVjdXRhYmxl IGFuZCBleGl0CglmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCgoJ aWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCgkgIGZ1bmNfdG9fdG9vbF9maWxl ICIkb3V0cHV0IgoJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtf Y21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09M X09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCgkgIGZ1bmNfZXhl Y3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCglmaQoKCWV4aXQgJEVYSVRf U1VDQ0VTUwogICAgICBmaQoKICAgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uLCRmYXN0X2lu c3RhbGwgaW4KICAgICAgICByZWxpbmssKikKCSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBu b3Qgc3VwcG9ydGVkCgkgIGxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21t YW5kJGNvbXBpbGVfcnBhdGgKCSAgcmVsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRmaW5h bGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCgoJICBmdW5jX3dhcm5pbmcgInRoaXMgcGxh dGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgoJICBm dW5jX3dhcm5pbmcgIickb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxs YXRpb24iCgkgIDs7CiAgICAgICAgKix5ZXMpCgkgIGxpbmtfY29tbWFuZD0kZmluYWxpemVf dmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAoJICByZWxpbmtfY29tbWFuZD1g JEVDSE8gIiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAk U0VEICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZydgCiAgICAgICAgICA7OwoJKixu bykKCSAgbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGls ZV9ycGF0aAoJICByZWxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1h bmQkZmluYWxpemVfcnBhdGgKICAgICAgICAgIDs7CgkqLG5lZWRsZXNzKQoJICBsaW5rX2Nv bW1hbmQ9JGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKCSAg cmVsaW5rX2NvbW1hbmQ9CiAgICAgICAgICA7OwogICAgICBlc2FjCgogICAgICAjIFJlcGxh Y2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCiAgICAgIGxpbmtfY29tbWFuZD1g JEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2Jq ZGlyLyRvdXRwdXRuYW1lIiclZydgCgogICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBm aWxlcy4KICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGly LyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCgogICAgICBmdW5j X3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCgogICAgICBpZiB0ZXN0IC1u ICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29i amRpci8kb3V0cHV0bmFtZSIKCXBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0 bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0 cHV0bmFtZSInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVf cmVzdWx0IiclZydgCglmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0 ICQ/JwogICAgICBmaQoKICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4K ICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgoKICAgICAgIyBRdW90ZSB0 aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgogICAgICBpZiB0ZXN0IC1uICIkcmVs aW5rX2NvbW1hbmQiOyB0aGVuCgkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkg YWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCglmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRf Zm9yX3JlbGluazsgZG8KCSAgaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRo ZW4KCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwg JGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtf Y29tbWFuZCIKCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJf dmFsdWUiOyB0aGVuCgkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsg JHJlbGlua19jb21tYW5kIgoJICBlbHNlCgkgICAgZnVuY19xdW90ZV9hcmcgcHJldHR5ICIk dmFyX3ZhbHVlIgoJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2FyZ19y ZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCgkgIGZpCglkb25lCglmdW5j X3F1b3RlIGV2YWwgY2QgImBwd2RgIgoJZnVuY19xdW90ZV9hcmcgcHJldHR5LHVucXVvdGVk ICIoJGZ1bmNfcXVvdGVfcmVzdWx0OyAkcmVsaW5rX2NvbW1hbmQpIgoJcmVsaW5rX2NvbW1h bmQ9JGZ1bmNfcXVvdGVfYXJnX3VucXVvdGVkX3Jlc3VsdAogICAgICBmaQoKICAgICAgIyBP bmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBpZiBub3QgaW4gZHJ5IHJ1biBtb2RlLgogICAgICAk b3B0X2RyeV9ydW4gfHwgewoJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBi aW5hcnkgaWYgaXQgaGFzCgkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBo ZXJlLgoJY2FzZSAkb3V0cHV0IGluCgkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4 ZScgIiRvdXRwdXQiCgkgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7 OwoJZXNhYwoJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBl eHRlbnNpb25zCgljYXNlICRob3N0IGluCgkgICpjeWd3aW4qKQoJICAgIGV4ZWV4dD0uZXhl CgkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0bmFtZSIKCSAgICBvdXRw dXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKCSAgKikgZXhlZXh0PSA7OwoJZXNh YwoJY2FzZSAkaG9zdCBpbgoJICAqY3lnd2luKiB8ICptaW5ndyogfCB3aW5kb3dzKiApCgkg ICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCgkgICAgb3V0 cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CgkgICAgb3V0cHV0X3BhdGg9JGZ1bmNf ZGlybmFtZV9yZXN1bHQKCSAgICBjd3JhcHBlcnNvdXJjZT0kb3V0cHV0X3BhdGgvJG9iamRp ci9sdC0kb3V0cHV0X25hbWUuYwoJICAgIGN3cmFwcGVyPSRvdXRwdXRfcGF0aC8kb3V0cHV0 X25hbWUuZXhlCgkgICAgJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKCSAgICB0cmFw ICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAx IDIgMTUKCgkgICAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyA+ICRjd3JhcHBlcnNvdXJj ZQoKCSAgICAjIFRoZSB3cmFwcGVyIGV4ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRo b3N0IGNvbXBpbGVyLAoJICAgICMgYmVjYXVzZSBpdCBjb250YWlucyAkaG9zdCBwYXRocyBh bmQgZmlsZXMuIElmIGNyb3NzLQoJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFy Z2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKCSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBv ciB1bmRlciBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQuCgkgICAgJG9wdF9kcnlfcnVuIHx8 IHsKCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNl CgkgICAgICAkU1RSSVAgJGN3cmFwcGVyCgkgICAgfQoKCSAgICAjIE5vdywgY3JlYXRlIHRo ZSB3cmFwcGVyIHNjcmlwdCBmb3IgZnVuY19zb3VyY2UgdXNlOgoJICAgIGZ1bmNfbHR3cmFw cGVyX3NjcmlwdG5hbWUgJGN3cmFwcGVyCgkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3Jp cHRuYW1lX3Jlc3VsdAoJICAgIHRyYXAgIiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFt ZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CgkgICAgJG9wdF9kcnlfcnVu IHx8IHsKCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQs IHNvIGRvIG5vdCBjaG1vZC4KCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCI7 IHRoZW4KCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9z Y3JpcHRuYW1lX3Jlc3VsdAoJICAgICAgZWxzZQoJCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4g JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CgkgICAgICBmaQoJICAgIH0KCSAg OzsKCSAgKiApCgkgICAgJFJNICRvdXRwdXQKCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhp dCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKCgkgICAgZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAk b3V0cHV0CgkgICAgY2htb2QgK3ggJG91dHB1dAoJICA7OwoJZXNhYwogICAgICB9CiAgICAg IGV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICA7OwogICAgZXNhYwoKICAgICMgU2VlIGlmIHdl IG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgogICAgZm9yIG9sZGxp YiBpbiAkb2xkbGliczsgZG8KCiAgICAgIGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbgog ICAgICAgIGNvbnZlbmllbmNlKQoJICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxl b2JqIgoJICBhZGRsaWJzPSRjb252ZW5pZW5jZQoJICBidWlsZF9saWJ0b29sX2xpYnM9bm8K CSAgOzsKCW1vZHVsZSkKCSAgb2xkb2Jqcz0kbGlib2Jqc19zYXZlCgkgIGFkZGxpYnM9JG9s ZF9jb252ZW5pZW5jZQoJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KICAgICAgICAgIDs7Cgkq KQoJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKCSAgJHByZWxv YWQgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiIFwKCSAgICAmJiBmdW5jX2FwcGVuZCBvbGRv YmpzICIgJHN5bWZpbGVvYmoiCgkgIGFkZGxpYnM9JG9sZF9jb252ZW5pZW5jZQoJICA7Owog ICAgICBlc2FjCgogICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KCWdlbnRvcD0k b3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAoJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIg JGdlbnRvcCIKCglmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicwoJZnVu Y19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgogICAg ICBmaQoKICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMu CiAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0 IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgoJY21kcz0kb2xkX2FyY2hpdmVf ZnJvbV9uZXdfY21kcwogICAgICBlbHNlCgoJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVs b2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCglpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7 IHRoZW4KCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CgkgIGZ1bmNf YXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCgoJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMg JGdlbnRvcCAkZGxwcmVmaWxlcwoJICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0 cmFjdF9hcmNoaXZlc19yZXN1bHQiCglmaQoKCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0 byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQoJIyB0byBhdm9pZCBjcmVhdGlu ZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKCSMgbWlnaHQgaGF2 ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCgkj IHN0YXRpYyBhcmNoaXZlIG91dCBvZiBhIGNvbnZlbmllbmNlIGxpYnJhcnksIG9yIHdoZW4g bGlua2luZwoJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90 aGVyIChjdXJyZW50bHkKCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KCWlmIChmb3Ig b2JqIGluICRvbGRvYmpzCgkgICAgZG8KCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCgkg ICAgICAkRUNITyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgoJICAgIGRvbmUgfCBzb3J0IHwg c29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgoJICA6CgllbHNlCgkgIGVjaG8gImNv cHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0 cy4uLiIKCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CgkgIGZ1bmNf YXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCgkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIK CSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCgkgIG9sZG9ianM9CgkgIGNvdW50ZXI9MQoJICBm b3Igb2JqIGluICRzYXZlX29sZG9ianMKCSAgZG8KCSAgICBmdW5jX2Jhc2VuYW1lICIkb2Jq IgoJICAgIG9iamJhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CgkgICAgY2FzZSAiICRvbGRv YmpzICIgaW4KCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OwoJICAgICpbXCAvXSIkb2JqYmFz ZSAiKikKCSAgICAgIHdoaWxlIDo7IGRvCgkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBh biBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KCQkjIG92ZXJsYXBzLgoJCW5ld29iaj1sdCRj b3VudGVyLSRvYmpiYXNlCgkJZnVuY19hcml0aCAkY291bnRlciArIDEKCQljb3VudGVyPSRm dW5jX2FyaXRoX3Jlc3VsdAoJCWNhc2UgIiAkb2xkb2JqcyAiIGluCgkJKltcIC9dIiRuZXdv YmogIiopIDs7CgkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJy ZWFrOyBmaSA7OwoJCWVzYWMKCSAgICAgIGRvbmUKCSAgICAgIGZ1bmNfc2hvd19ldmFsICJs biAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKCSAg ICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCgkgICAgICA7OwoJ ICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OwoJICAgIGVzYWMKCSAgZG9u ZQoJZmkKCWZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9t c3lzX3RvX3czMgoJdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAoJZXZh bCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgoKCWZ1bmNfbGVuICIgJGNtZHMiCglsZW49 JGZ1bmNfbGVuX3Jlc3VsdAoJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8 IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCgkgIGNtZHM9JG9sZF9hcmNoaXZl X2NtZHMKCWVsaWYgdGVzdCAtbiAiJGFyY2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KCSAgZnVu Y192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgoJICBm b3Igb2JqIGluICRvbGRvYmpzCgkgIGRvCgkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoi CgkgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCgkgIGRvbmUgPiAkb3V0 cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQKCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRw dXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKCSAgb2xkb2Jqcz0iICRhcmNoaXZlcl9saXN0 X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgoJICBjbWRzPSRvbGRfYXJjaGl2ZV9j bWRzCgllbHNlCgkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGlu IG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCgkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3 aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgoJICBSQU5M SUI9OgoJICBvYmpsaXN0PQoJICBjb25jYXRfY21kcz0KCSAgc2F2ZV9vbGRvYmpzPSRvbGRv YmpzCgkgIG9sZG9ianM9CgkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcg dGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PwoJICBmb3Igb2JqIGluICRzYXZlX29sZG9i anMKCSAgZG8KCSAgICBsYXN0X29sZG9iaj0kb2JqCgkgIGRvbmUKCSAgZXZhbCB0ZXN0X2Nt ZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCgkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKCSAg bGVuMD0kZnVuY19sZW5fcmVzdWx0CgkgIGxlbj0kbGVuMAoJICBmb3Igb2JqIGluICRzYXZl X29sZG9ianMKCSAgZG8KCSAgICBmdW5jX2xlbiAiICRvYmoiCgkgICAgZnVuY19hcml0aCAk bGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAoJICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKCSAg ICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQg IiRtYXhfY21kX2xlbiI7IHRoZW4KCSAgICAgIDoKCSAgICBlbHNlCgkgICAgICAjIHRoZSBh Ym92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCgkg ICAgICBvbGRvYmpzPSRvYmpsaXN0CgkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9v bGRvYmoiOyB0aGVuCgkJUkFOTElCPSRzYXZlX1JBTkxJQgoJICAgICAgZmkKCSAgICAgIHRl c3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgoJICAg ICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkb2xkX2FyY2hpdmVfY21kc1wi CgkgICAgICBvYmpsaXN0PQoJICAgICAgbGVuPSRsZW4wCgkgICAgZmkKCSAgZG9uZQoJICBS QU5MSUI9JHNhdmVfUkFOTElCCgkgIG9sZG9ianM9JG9iamxpc3QKCSAgaWYgdGVzdCAteiAi JG9sZG9ianMiOyB0aGVuCgkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCgkgIGVs c2UKCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wi CgkgIGZpCglmaQogICAgICBmaQogICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdl eGl0ICQ/JwogICAgZG9uZQoKICAgIHRlc3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKICAgICAg ZnVuY19zaG93X2V2YWwgIiR7Uk19ciRnZW5lcmF0ZWQiCgogICAgIyBOb3cgY3JlYXRlIHRo ZSBsaWJ0b29sIGFyY2hpdmUuCiAgICBjYXNlICRvdXRwdXQgaW4KICAgICoubGEpCiAgICAg IG9sZF9saWJyYXJ5PQogICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiICYmIG9s ZF9saWJyYXJ5PSRsaWJuYW1lLiRsaWJleHQKICAgICAgZnVuY192ZXJib3NlICJjcmVhdGlu ZyAkb3V0cHV0IgoKICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFm ZmVjdCBjb21waWxlciBiZWhhdmlvcgogICAgICBmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2 ZWRfZm9yX3JlbGluazsgZG8KCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0 aGVuCgkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAk bHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19j b21tYW5kIgoJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFs dWUiOyB0aGVuCgkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxp bmtfY29tbWFuZCIKCWVsc2UKCSAgZnVuY19xdW90ZV9hcmcgcHJldHR5LHVucXVvdGVkICIk dmFyX3ZhbHVlIgoJICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9hcmdfdW5x dW90ZWRfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgoJZmkKICAgICAg ZG9uZQogICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgogICAg ICBmdW5jX3F1b3RlIGV2YWwgY2QgImBwd2RgIgogICAgICByZWxpbmtfY29tbWFuZD0iKCRm dW5jX3F1b3RlX3Jlc3VsdDsgJFNIRUxMIFwiJHByb2dwYXRoXCIgJHByZXNlcnZlX2FyZ3Mg LS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKICAgICAg ZnVuY19xdW90ZV9hcmcgcHJldHR5LHVucXVvdGVkICIkcmVsaW5rX2NvbW1hbmQiCiAgICAg IHJlbGlua19jb21tYW5kPSRmdW5jX3F1b3RlX2FyZ191bnF1b3RlZF9yZXN1bHQKICAgICAg aWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyI7IHRoZW4KCXJlbGlua19jb21t YW5kPQogICAgICBmaQoKICAgICAgIyBPbmx5IGNyZWF0ZSB0aGUgb3V0cHV0IGlmIG5vdCBh IGRyeSBydW4uCiAgICAgICRvcHRfZHJ5X3J1biB8fCB7Cglmb3IgaW5zdGFsbGVkIGluIG5v IHllczsgZG8KCSAgaWYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KCSAgICBpZiB0 ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCgkgICAgICBicmVhawoJICAgIGZpCgkg ICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1pCgkgICAgIyBSZXBsYWNl IGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQg b25lcwoJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KCSAgICBmb3IgZGVwbGliIGluICRkZXBl bmRlbmN5X2xpYnM7IGRvCgkgICAgICBjYXNlICRkZXBsaWIgaW4KCSAgICAgICoubGEpCgkJ ZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoJ CWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgoJCWV2YWwgbGliZGlyPWAkU0VEIC1u IC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVz dWx0YAoJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIick ZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCgkJZnVuY19hcHBlbmQg bmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCgkJ OzsKCSAgICAgIC1MKikKCQlmdW5jX3N0cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKCQlmdW5j X3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKCQlmdW5jX2FwcGVu ZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQi CgkJOzsKCSAgICAgIC1SKikKCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKCQlm dW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKCQlmdW5jX2Fw cGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1 bHQiCgkJOzsKCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRk ZXBsaWIiIDs7CgkgICAgICBlc2FjCgkgICAgZG9uZQoJICAgIGRlcGVuZGVuY3lfbGlicz0k bmV3ZGVwZW5kZW5jeV9saWJzCgkgICAgbmV3ZGxmaWxlcz0KCgkgICAgZm9yIGxpYiBpbiAk ZGxmaWxlczsgZG8KCSAgICAgIGNhc2UgJGxpYiBpbgoJICAgICAgKi5sYSkKCSAgICAgICAg ZnVuY19iYXNlbmFtZSAiJGxpYiIKCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoJCWV2 YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAoJ CXRlc3QgLXogIiRsaWJkaXIiICYmIFwKCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBp cyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCgkJZnVuY19hcHBlbmQgbmV3ZGxmaWxl cyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgoJCTs7CgkgICAgICAqKSBmdW5j X2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKCSAgICAgIGVzYWMKCSAgICBkb25lCgkg ICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwoJICAgIG5ld2RscHJlZmlsZXM9CgkgICAgZm9yIGxp YiBpbiAkZGxwcmVmaWxlczsgZG8KCSAgICAgIGNhc2UgJGxpYiBpbgoJICAgICAgKi5sYSkK CQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQgZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChm b3IKCQkjIGV2ZW50dWFsIGxpbmtpbmcgd2l0aCB0aGUgYXBwLiB0aGF0IGxpbmtzIGl0KSBp ZiB3ZQoJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGly ZWN0bHkgaW50bwoJCSMgdGhlIGxpYnJhcnk6CgkJZnVuY19iYXNlbmFtZSAiJGxpYiIKCQlu YW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdz L15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAoJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwK CQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFy Y2hpdmUiCgkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0k bGliZGlyLyRuYW1lIgoJCTs7CgkgICAgICBlc2FjCgkgICAgZG9uZQoJICAgIGRscHJlZmls ZXM9JG5ld2RscHJlZmlsZXMKCSAgZWxzZQoJICAgIG5ld2RsZmlsZXM9CgkgICAgZm9yIGxp YiBpbiAkZGxmaWxlczsgZG8KCSAgICAgIGNhc2UgJGxpYiBpbgoJCVtcXC9dKiB8IFtBLVph LXpdOltcXC9dKikgYWJzPSRsaWIgOzsKCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CgkgICAg ICBlc2FjCgkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKCSAgICBkb25l CgkgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwoJICAgIG5ld2RscHJlZmlsZXM9CgkgICAgZm9y IGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KCSAgICAgIGNhc2UgJGxpYiBpbgoJCVtcXC9dKiB8 IFtBLVphLXpdOltcXC9dKikgYWJzPSRsaWIgOzsKCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7 CgkgICAgICBlc2FjCgkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGFicyIK CSAgICBkb25lCgkgICAgZGxwcmVmaWxlcz0kbmV3ZGxwcmVmaWxlcwoJICBmaQoJICAkUk0g JG91dHB1dAoJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3 aW4KCSAgIyBJbiBmYWN0LCBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlz IGNvZGUgZm9yIGFsbCB0YXJnZXQKCSAgIyBzeXN0ZW1zIHRoYXQgY2FuJ3QgaGFyZC1jb2Rl IGxpYnJhcnkgcGF0aHMgaW50byB0aGVpciBleGVjdXRhYmxlcwoJICAjIGFuZCB0aGF0IGhh dmUgbm8gc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZSBpbmRlcGVuZGVudCBvZiBQQVRI LAoJICAjIGJ1dCBpdCB0dXJucyBvdXQgd2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0 IGZyb20gaW5zcGVjdGluZwoJICAjIGxpYnRvb2wgdmFyaWFibGVzLCBzbyB3ZSBoYXZlIHRv IGhhcmQtY29kZSB0aGUgT1NzIHRvIHdoaWNoIGl0CgkgICMgYXBwbGllcyBoZXJlOyBhdCB0 aGUgbW9tZW50LCB0aGF0IG1lYW5zIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGUgUEUKCSAgIyBv YmplY3QgZm9ybWF0IHdpdGggRExMIGZpbGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQg dGhlIHRvcCBvZgoJICAjIHRlc3RzL2JpbmRpci5hdCBmb3IgZnVsbCBkZXRhaWxzLgoJICB0 ZGxuYW1lPSRkbG5hbWUKCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVs ZSwkZGxuYW1lIGluCgkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cq LCpsYWkseWVzLG5vLCouZGxsIHwgKndpbmRvd3MqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNl Z2NjKiwqbGFpLHllcyxubywqLmRsbCkKCSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50 IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhlIGRsbCB0aGVyZS4KCSAgICAgIGlmIHRlc3QgLW4g IiRiaW5kaXIiOyB0aGVuCgkJZnVuY19yZWxhdGl2ZV9wYXRoICIkaW5zdGFsbF9saWJkaXIi ICIkYmluZGlyIgoJCXRkbG5hbWU9JGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvJGRsbmFt ZQoJICAgICAgZWxzZQoJCSMgT3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCgkJ dGRsbmFtZT0uLi9iaW4vJGRsbmFtZQoJICAgICAgZmkKCSAgICAgIDs7CgkgIGVzYWMKCSAg JEVDSE8gPiAkb3V0cHV0ICJcCiMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBm aWxlCiMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCiMK IyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCiMgSXQgaXMgbmVjZXNzYXJ5IGZv ciBsaW5raW5nIHRoZSBsaWJyYXJ5LgoKIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4o MykuCmRsbmFtZT0nJHRkbG5hbWUnCgojIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KbGlicmFy eV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCgojIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJj aGl2ZS4Kb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKCiMgTGlua2VyIGZsYWdzIHRoYXQg Y2Fubm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0n JG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzJwoKIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9u ZSBkZXBlbmRzIHVwb24uCmRlcGVuZGVuY3lfbGlicz0nJGRlcGVuZGVuY3lfbGlicycKCiMg TmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxp YnJhcnkKd2Vha19saWJyYXJ5X25hbWVzPSckd2Vha19saWJzJwoKIyBWZXJzaW9uIGluZm9y bWF0aW9uIGZvciAkbGlibmFtZS4KY3VycmVudD0kY3VycmVudAphZ2U9JGFnZQpyZXZpc2lv bj0kcmV2aXNpb24KCiMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5Pwpp bnN0YWxsZWQ9JGluc3RhbGxlZAoKIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0 eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8Kc2hvdWxkbm90bGluaz0kbW9kdWxl CgojIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KZGxvcGVuPSckZGxmaWxlcycKZGxwcmVv cGVuPSckZGxwcmVmaWxlcycKCiMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRz IHRvIGJlIGluc3RhbGxlZCBpbjoKbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgoJICBpZiB0 ZXN0IG5vLHllcyA9ICIkaW5zdGFsbGVkLCRuZWVkX3JlbGluayI7IHRoZW4KCSAgICAkRUNI TyA+PiAkb3V0cHV0ICJcCnJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCgkg IGZpCglkb25lCiAgICAgIH0KCiAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQg dGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KICAgICAgIyBMRF9MSUJSQVJZ X1BBVEggYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZC4KICAgICAgZnVuY19zaG93 X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAk TE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCiAgICAg IDs7CiAgICBlc2FjCiAgICBleGl0ICRFWElUX1NVQ0NFU1MKfQoKaWYgdGVzdCBsaW5rID0g IiRvcHRfbW9kZSIgfHwgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgogIGZ1bmNf bW9kZV9saW5rICR7MSsiJEAifQpmaQoKCiMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4K ZnVuY19tb2RlX3VuaW5zdGFsbCAoKQp7CiAgICAkZGVidWdfY21kCgogICAgUk09JG5vbm9w dAogICAgZmlsZXM9CiAgICBybWZvcmNlPWZhbHNlCiAgICBleGl0X3N0YXR1cz0wCgogICAg IyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJp YWJsZXMgcmF0aGVyCiAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KICAgIGxp YnRvb2xfaW5zdGFsbF9tYWdpYz0kbWFnaWMKCiAgICBmb3IgYXJnCiAgICBkbwogICAgICBj YXNlICRhcmcgaW4KICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9 OiA7OwogICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OwogICAgICAqKSBmdW5j X2FwcGVuZCBmaWxlcyAiICRhcmciIDs7CiAgICAgIGVzYWMKICAgIGRvbmUKCiAgICB0ZXN0 IC16ICIkUk0iICYmIFwKICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5 IGFuIFJNIHByb2dyYW0iCgogICAgcm1kaXJzPQoKICAgIGZvciBmaWxlIGluICRmaWxlczsg ZG8KICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCiAgICAgIGRpcj0kZnVuY19k aXJuYW1lX3Jlc3VsdAogICAgICBpZiB0ZXN0IC4gPSAiJGRpciI7IHRoZW4KCW9kaXI9JG9i amRpcgogICAgICBlbHNlCglvZGlyPSRkaXIvJG9iamRpcgogICAgICBmaQogICAgICBmdW5j X2Jhc2VuYW1lICIkZmlsZSIKICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKICAg ICAgdGVzdCB1bmluc3RhbGwgPSAiJG9wdF9tb2RlIiAmJiBvZGlyPSRkaXIKCiAgICAgICMg UmVtZW1iZXIgb2RpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9p ZCBkdXBsaWNhdGVzCiAgICAgIGlmIHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgoJ Y2FzZSAiICRybWRpcnMgIiBpbgoJICAqIiAkb2RpciAiKikgOzsKCSAgKikgZnVuY19hcHBl bmQgcm1kaXJzICIgJG9kaXIiIDs7Cgllc2FjCiAgICAgIGZpCgogICAgICAjIERvbid0IGVy cm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgogICAg ICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKCSB7IHRlc3Qg LWggIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKCSB0ZXN0IC1mICIkZmlsZSI7IHRo ZW4KCToKICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KCWV4aXRfc3RhdHVzPTEK CWNvbnRpbnVlCiAgICAgIGVsaWYgJHJtZm9yY2U7IHRoZW4KCWNvbnRpbnVlCiAgICAgIGZp CgogICAgICBybWZpbGVzPSRmaWxlCgogICAgICBjYXNlICRuYW1lIGluCiAgICAgICoubGEp CgkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCglpZiBmdW5j X2xhbGliX3AgIiRmaWxlIjsgdGhlbgoJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCgoJICAj IERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgoJICBmb3IgbiBp biAkbGlicmFyeV9uYW1lczsgZG8KCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIv JG4iCgkgIGRvbmUKCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBy bWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgoKCSAgY2FzZSAkb3B0X21vZGUgaW4KCSAg Y2xlYW4pCgkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KCSAgICAqIiAkZGxuYW1l ICIqKSA7OwoJICAgICopIHRlc3QgLW4gIiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmls ZXMgIiAkb2Rpci8kZGxuYW1lIiA7OwoJICAgIGVzYWMKCSAgICB0ZXN0IC1uICIkbGliZGly IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfWki CgkgICAgOzsKCSAgdW5pbnN0YWxsKQoJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVz IjsgdGhlbgoJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwg Y29tbWFuZHMuCgkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21k cyIgJyRybWZvcmNlIHx8IGV4aXRfc3RhdHVzPTEnCgkgICAgZmkKCgkgICAgaWYgdGVzdCAt biAiJG9sZF9saWJyYXJ5IjsgdGhlbgoJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhl IG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgoJICAgICAgZnVuY19leGVjdXRlX2NtZHMg IiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAnJHJtZm9yY2UgfHwgZXhpdF9zdGF0dXM9MScK CSAgICBmaQoJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWlu aW5nIHNoYXJlZCBsaWJyYXJ5LgoJICAgIDs7CgkgIGVzYWMKCWZpCgk7OwoKICAgICAgKi5s bykKCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgoJaWYgZnVu Y19sYWxpYl9wICIkZmlsZSI7IHRoZW4KCgkgICMgUmVhZCB0aGUgLmxvIGZpbGUKCSAgZnVu Y19zb3VyY2UgJGRpci8kbmFtZQoKCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBv ZiBmaWxlcyB0byByZW1vdmUuCgkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJiB0ZXN0 IG5vbmUgIT0gIiRwaWNfb2JqZWN0IjsgdGhlbgoJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMg IiAkZGlyLyRwaWNfb2JqZWN0IgoJICBmaQoKCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8g dGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgoJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19v YmplY3QiICYmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgoJICAgIGZ1 bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKCSAgZmkKCWZpCgk7 OwoKICAgICAgKikKCWlmIHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgoJICBub2V4 ZW5hbWU9JG5hbWUKCSAgY2FzZSAkZmlsZSBpbgoJICAqLmV4ZSkKCSAgICBmdW5jX3N0cmlw bmFtZSAnJyAnLmV4ZScgIiRmaWxlIgoJICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3Vs dAoJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG5hbWUiCgkgICAgbm9leGVuYW1l PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxy ZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCgkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAu ZXhlCgkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgoJICAgIDs7CgkgIGVzYWMK CSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCgkg IGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRmaWxlIjsgdGhlbgoJICAgIGlmIGZ1bmNfbHR3cmFw cGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCgkgICAgICBmdW5jX2x0d3JhcHBlcl9z Y3JpcHRuYW1lICIkZmlsZSIKCSAgICAgIHJlbGlua19jb21tYW5kPQoJICAgICAgZnVuY19z b3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CgkgICAgICBmdW5jX2Fw cGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgoJICAg IGVsc2UKCSAgICAgIHJlbGlua19jb21tYW5kPQoJICAgICAgZnVuY19zb3VyY2UgJGRpci8k bm9leGVuYW1lCgkgICAgZmkKCgkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5l eGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKCSAgICAjIGFzIGRvZXMgdGhlIHZl cnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcwoJICAgIGZ1bmNf YXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4kb2JqZXh0IgoJ ICAgIGlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiICYmIHRlc3QgLW4gIiRyZWxpbmtf Y29tbWFuZCI7IHRoZW4KCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0k bmFtZSIKCSAgICBmaQoJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIjsg dGhlbgoJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRub2V4ZW5hbWUu YyIKCSAgICBmaQoJICBmaQoJZmkKCTs7CiAgICAgIGVzYWMKICAgICAgZnVuY19zaG93X2V2 YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCiAgICBkb25lCgogICAgIyBUcnkg dG8gcmVtb3ZlIHRoZSAkb2JqZGlyJ3MgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRl bGV0ZWQgZmlsZXMKICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KICAgICAgaWYgdGVzdCAt ZCAiJGRpciI7IHRoZW4KCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwg Mj4mMSIKICAgICAgZmkKICAgIGRvbmUKCiAgICBleGl0ICRleGl0X3N0YXR1cwp9CgppZiB0 ZXN0IHVuaW5zdGFsbCA9ICIkb3B0X21vZGUiIHx8IHRlc3QgY2xlYW4gPSAiJG9wdF9tb2Rl IjsgdGhlbgogIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CmZpCgp0ZXN0IC16ICIk b3B0X21vZGUiICYmIHsKICBoZWxwPSRnZW5lcmljX2hlbHAKICBmdW5jX2ZhdGFsX2hlbHAg InlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgp9Cgp0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwK ICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgJyRvcHRfbW9kZSci CgppZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCiAgZXZhbCBleGVjICIkZXhlY19jbWQi CiAgZXhpdCAkRVhJVF9GQUlMVVJFCmZpCgpleGl0ICRleGl0X3N0YXR1cwoKCiMgVGhlIFRB R3MgYmVsb3cgYXJlIGRlZmluZWQgc3VjaCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0 dWF0aW9uCiMgd2hlcmUgd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdp dmVuIGNvbmZsaWN0aW5nCiMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnks IHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCiMgc2luY2Ugd2UgY2FuJ3QgdGVsbCB3aGV0 aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZSBkaXNhYmxlZCBiZWNhdXNlCiMgdGhlIHVzZXIg YXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0 CiMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1 c2Ugd2UgZG9uJ3QKIyBzdXBwb3J0IGhhdmluZyBib3RoIHN0YXRpYyBhbmQgc2hhcmVkIGxp YnJhcmllcyBlbmFibGVkIGF0IHRoZSBzYW1lCiMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBz byB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KIyBJZiBhIGRp c2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMt b25seQojIGNvbmZpZ3VyYXRpb24uICBCdXQgd2UnbGwgbmV2ZXIgZ28gZnJvbSBzdGF0aWMt b25seSB0byBzaGFyZWQtb25seS4KCiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzog ZGlzYWJsZS1zaGFyZWQKYnVpbGRfbGlidG9vbF9saWJzPW5vCmJ1aWxkX29sZF9saWJzPXll cwojICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAoKIyAjIyMg QkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYwpidWlsZF9vbGRfbGli cz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8g eWVzOzsgZXNhY2AKIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0 aWMKCiMgTG9jYWwgVmFyaWFibGVzOgojIG1vZGU6c2hlbGwtc2NyaXB0CiMgc2gtaW5kZW50 YXRpb246MgojIEVuZDoKCiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCgoj IFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCkxEPSIvdXNyL2Jpbi9sZCAt bSBlbGZfeDg2XzY0IgoKIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVz LgpyZWxvYWRfZmxhZz0iIC1yIgpyZWxvYWRfY21kcz0iXCRMRFwkcmVsb2FkX2ZsYWcgLW8g XCRvdXRwdXRcJHJlbG9hZF9vYmpzIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9s ZC1zdHlsZSBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9jbWRzPSJcJEFSIFwkQVJfRkxBR1MgXCRv bGRsaWJcJG9sZG9ianN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKCiMgQSBsYW5ndWFnZSBz cGVjaWZpYyBjb21waWxlci4KQ0M9ImcrKyIKCiMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUg Y29tcGlsZXI/CndpdGhfZ2NjPXllcwoKIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1 aWx0aW4gZnVuY3Rpb25zLgpub19idWlsdGluX2ZsYWc9IiAtZm5vLWJ1aWx0aW4iCgojIEFk ZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4K cGljX2ZsYWc9IiAtZlBJQyAtRFBJQyIKCiMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0 aHJvdWdoIHRoZSBjb21waWxlci4Kd2w9Ii1XbCwiCgojIENvbXBpbGVyIGZsYWcgdG8gcHJl dmVudCBkeW5hbWljIGxpbmtpbmcuCmxpbmtfc3RhdGljX2ZsYWc9Ii1zdGF0aWMiCgojIERv ZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8K Y29tcGlsZXJfY19vPSJ5ZXMiCgojIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1 aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCmJ1aWxkX2xpYnRvb2xfbmVlZF9sYz1ubwoKIyBX aGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGli cyBhcmUgc3RhdGljLgphbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9 bm8KCiMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KZXhwb3J0 X2R5bmFtaWNfZmxhZ19zcGVjPSJcJHdsLS1leHBvcnQtZHluYW1pYyIKCiMgQ29tcGlsZXIg ZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVz Lgp3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iXCR3bC0td2hvbGUtYXJjaGl2ZVwkY29udmVu aWVuY2UgXCR3bC0tbm8td2hvbGUtYXJjaGl2ZSIKCiMgV2hldGhlciB0aGUgY29tcGlsZXIg Y29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCmNvbXBpbGVyX25lZWRz X29iamVjdD0ibm8iCgojIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hh cmVkIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKCiMgQ3JlYXRlIGEg dGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJl ZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgoKIyBDb21tYW5k cyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCmFyY2hpdmVfY21kcz0iXCRDQyBc JHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliIFwkcHJlZGVwX29iamVjdHMgXCRsaWJvYmpz IFwkZGVwbGlicyBcJHBvc3RkZXBfb2JqZWN0cyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29u YW1lIFwkd2xcJHNvbmFtZSAtbyBcJGxpYiIKYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyBc JHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliIFwkcHJlZGVwX29iamVjdHMgXCRsaWJvYmpz IFwkZGVwbGlicyBcJHBvc3RkZXBfb2JqZWN0cyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29u YW1lIFwkd2xcJHNvbmFtZSBcJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgXCR3bFwkZXhwb3J0 X3N5bWJvbHMgLW8gXCRsaWIiCgojIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJs ZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKIyBhIHNoYXJlZCBhcmNoaXZl Lgptb2R1bGVfY21kcz0iIgptb2R1bGVfZXhwc3ltX2NtZHM9IiIKCiMgV2hldGhlciB3ZSBh cmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgp3aXRoX2dudV9sZD0ieWVzIgoKIyBG bGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9s cyB0byBiZSBidWlsdC4KYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiIKCiMgRmxhZyB0aGF0IGVu Zm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgpub191bmRlZmluZWRfZmxhZz0iIgoKIyBG bGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4K IyBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKaGFyZGNv ZGVfbGliZGlyX2ZsYWdfc3BlYz0iXCR3bC1ycGF0aCBcJHdsXCRsaWJkaXIiCgojIFdoZXRo ZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJn dW1lbnQuCmhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiIKCiMgU2V0IHRvICJ5ZXMiIGlm IHVzaW5nIERJUi9saWJOQU1FJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVz CiMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCmhhcmRjb2RlX2RpcmVjdD1ubwoK IyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcg bGlua2luZyBoYXJkY29kZXMKIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQg dGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKIyAiYWJzb2x1dGUiLGkuZS4g aW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUK IyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCgoj IFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBo YXJkY29kZXMgRElSCiMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfbWlu dXNfTD1ubwoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVy aW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgojIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnku CmhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKCiMgU2V0IHRvICJ5ZXMiIGlm IGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElS CiMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBl eGVjdXRhYmxlcyBsaW5rZWQKIyBhZ2FpbnN0IGl0LgpoYXJkY29kZV9hdXRvbWF0aWM9bm8K CiMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVu dCBsaWJyYXJpZXMKIyB0byBydW50aW1lIHBhdGggbGlzdC4KaW5oZXJpdF9ycGF0aD1ubwoK IyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMg ZGVwZW5kZW5jeSBsaWJyYXJpZXMuCmxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgoKIyBTZXQg dG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCmFsd2F5c19leHBv cnRfc3ltYm9scz1ubwoKIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xz LgpleHBvcnRfc3ltYm9sc19jbWRzPSJcJE5NIFwkbGlib2JqcyBcJGNvbnZlbmllbmNlIHwg XCRnbG9iYWxfc3ltYm9sX3BpcGUgfCBcJFNFRCAncy8uKiAvLycgfCBzb3J0IHwgdW5pcSA+ IFwkZXhwb3J0X3N5bWJvbHMiCgojIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3Rl ZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCmV4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9P RkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qIgoKIyBTeW1ib2xzIHRoYXQgbXVzdCBh bHdheXMgYmUgZXhwb3J0ZWQuCmluY2x1ZGVfZXhwc3ltcz0iIgoKIyBDb21tYW5kcyBuZWNl c3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRl bXBsYXRlcy4KcHJlbGlua19jbWRzPSIiCgojIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmlu aXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCnBvc3RsaW5rX2NtZHM9IiIKCiMgU3BlY2lmeSBm aWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgpmaWxlX2xpc3Rfc3BlYz0iIgoKIyBI b3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJs ZS4KaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQoKIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNo ZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCmNv bXBpbGVyX2xpYl9zZWFyY2hfZGlycz0iL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUv MTQgL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQvLi4vLi4vLi4veDg2XzY0LWxp bnV4LWdudSAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS8xNC8uLi8uLi8uLi8uLi9s aWIgL2xpYi94ODZfNjQtbGludXgtZ251IC9saWIvLi4vbGliIC91c3IvbGliL3g4Nl82NC1s aW51eC1nbnUgL3Vzci9saWIvLi4vbGliIC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251 LzE0Ly4uLy4uLy4uIgoKIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRl ciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFy eS4KcHJlZGVwX29iamVjdHM9Ii91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4u Ly4uLy4uL3g4Nl82NC1saW51eC1nbnUvY3J0aS5vIC91c3IvbGliL2djYy94ODZfNjQtbGlu dXgtZ251LzE0L2NydGJlZ2luUy5vIgpwb3N0ZGVwX29iamVjdHM9Ii91c3IvbGliL2djYy94 ODZfNjQtbGludXgtZ251LzE0L2NydGVuZFMubyAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4 LWdudS8xNC8uLi8uLi8uLi94ODZfNjQtbGludXgtZ251L2NydG4ubyIKcHJlZGVwcz0iIgpw b3N0ZGVwcz0iLWxzdGRjKysgLWxtIC1sZ2NjX3MgLWxjIC1sZ2NjX3MiCgojIFRoZSBsaWJy YXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBs aW5raW5nCiMgYSBzaGFyZWQgbGlicmFyeS4KY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSIt TC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0IC1ML3Vzci9saWIvZ2NjL3g4Nl82 NC1saW51eC1nbnUvMTQvLi4vLi4vLi4veDg2XzY0LWxpbnV4LWdudSAtTC91c3IvbGliL2dj Yy94ODZfNjQtbGludXgtZ251LzE0Ly4uLy4uLy4uLy4uL2xpYiAtTC9saWIveDg2XzY0LWxp bnV4LWdudSAtTC9saWIvLi4vbGliIC1ML3Vzci9saWIveDg2XzY0LWxpbnV4LWdudSAtTC91 c3IvbGliLy4uL2xpYiAtTC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4uLy4u Ly4uIgoKIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCgojICMjIyBCRUdJTiBM SUJUT09MIFRBRyBDT05GSUc6IEY3NwoKIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGli cmFyaWVzLgpMRD0iL3Vzci9iaW4vbGQgLW0gZWxmX3g4Nl82NCIKCiMgSG93IHRvIGNyZWF0 ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KcmVsb2FkX2ZsYWc9IiAtciIKcmVsb2FkX2Nt ZHM9IlwkTERcJHJlbG9hZF9mbGFnIC1vIFwkb3V0cHV0XCRyZWxvYWRfb2JqcyIKCiMgQ29t bWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4Kb2xkX2FyY2hpdmVf Y21kcz0iXCRBUiBcJEFSX0ZMQUdTIFwkb2xkbGliXCRvbGRvYmpzflwkUkFOTElCIFwkdG9v bF9vbGRsaWIiCgojIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCkNDPSJmNzciCgoj IElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPwp3aXRoX2djYz15ZXMKCiMgQ29t cGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4Kbm9fYnVpbHRpbl9m bGFnPSIiCgojIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJh cnkgb2JqZWN0cy4KcGljX2ZsYWc9IiAtZlBJQyIKCiMgSG93IHRvIHBhc3MgYSBsaW5rZXIg ZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4Kd2w9Ii1XbCwiCgojIENvbXBpbGVyIGZsYWcg dG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCmxpbmtfc3RhdGljX2ZsYWc9Ii1zdGF0aWMi CgojIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0 aW9ucz8KY29tcGlsZXJfY19vPSJ5ZXMiCgojIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMg Zm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCmJ1aWxkX2xpYnRvb2xfbmVlZF9sYz1u bwoKIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRp bWUgbGlicyBhcmUgc3RhdGljLgphbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVu dGltZXM9bm8KCiMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4K ZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSJcJHdsLS1leHBvcnQtZHluYW1pYyIKCiMgQ29t cGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFy Y2hpdmVzLgp3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iXCR3bC0td2hvbGUtYXJjaGl2ZVwk Y29udmVuaWVuY2UgXCR3bC0tbm8td2hvbGUtYXJjaGl2ZSIKCiMgV2hldGhlciB0aGUgY29t cGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCmNvbXBpbGVy X25lZWRzX29iamVjdD0ibm8iCgojIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9t IGEgc2hhcmVkIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKCiMgQ3Jl YXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBh IHNoYXJlZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgoKIyBD b21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCmFyY2hpdmVfY21kcz0i XCRDQyAtc2hhcmVkIFwkcGljX2ZsYWcgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVy X2ZsYWdzIFwkd2wtc29uYW1lIFwkd2xcJHNvbmFtZSAtbyBcJGxpYiIKYXJjaGl2ZV9leHBz eW1fY21kcz0iZWNobyBcXFwieyBnbG9iYWw6XFxcIiA+IFwkb3V0cHV0X29iamRpci9cJGxp Ym5hbWUudmVyfgogICAgICAgICAgICBjYXQgXCRleHBvcnRfc3ltYm9scyB8IFwkU0VEIC1l IFxcXCJzL1xcXFwoLipcXFxcKS9cXFxcMTsvXFxcIiA+PiBcJG91dHB1dF9vYmpkaXIvXCRs aWJuYW1lLnZlcn4KICAgICAgICAgICAgZWNobyBcXFwibG9jYWw6ICo7IH07XFxcIiA+PiBc JG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlcn4KICAgICAgICAgICAgXCRDQyAtc2hhcmVk IFwkcGljX2ZsYWcgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wt c29uYW1lIFwkd2xcJHNvbmFtZSBcJHdsLXZlcnNpb24tc2NyaXB0IFwkd2xcJG91dHB1dF9v YmpkaXIvXCRsaWJuYW1lLnZlciAtbyBcJGxpYiIKCiMgQ29tbWFuZHMgdXNlZCB0byBidWls ZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZwojIGEgc2hh cmVkIGFyY2hpdmUuCm1vZHVsZV9jbWRzPSIiCm1vZHVsZV9leHBzeW1fY21kcz0iIgoKIyBX aGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCndpdGhfZ251X2xk PSJ5ZXMiCgojIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVm aW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgphbGxvd191bmRlZmluZWRfZmxhZz0iIgoKIyBG bGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCm5vX3VuZGVmaW5lZF9m bGFnPSIiCgojIEZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmlu ZyBsaW5raW5nLgojIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBl eGlzdApoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSJcJHdsLXJwYXRoIFwkd2xcJGxpYmRp ciIKCiMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNl cGFyYXRlZCBhcmd1bWVudC4KaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iIgoKIyBTZXQg dG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2lu ZyBoYXJkY29kZXMKIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVf ZGlyZWN0PW5vCgojIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRf ZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwojIERJUiBpbnRvIHRoZSByZXN1bHRpbmcg YmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwojICJhYnNv bHV0ZSIsaS5lLiBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICRzaGxpYnBhdGhf dmFyIGlmIHRoZQojIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgpoYXJkY29kZV9kaXJlY3RfYWJz b2x1dGU9bm8KCiMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmlu ZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5Lgpo YXJkY29kZV9taW51c19MPW5vCgojIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhf VkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCiMgaW50byB0aGUgcmVzdWx0 aW5nIGJpbmFyeS4KaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAoKIyBTZXQg dG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhh cmRjb2RlcyBESVIKIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJy YXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAojIGFnYWluc3QgaXQuCmhhcmRjb2RlX2F1 dG9tYXRpYz1ubwoKIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMg b2YgZGVwZW5kZW50IGxpYnJhcmllcwojIHRvIHJ1bnRpbWUgcGF0aCBsaXN0Lgppbmhlcml0 X3JwYXRoPW5vCgojIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWlu c3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KbGlua19hbGxfZGVwbGlicz11bmtu b3duCgojIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4K YWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCgojIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9y dGVkIHN5bWJvbHMuCmV4cG9ydF9zeW1ib2xzX2NtZHM9IlwkTk0gXCRsaWJvYmpzIFwkY29u dmVuaWVuY2UgfCBcJGdsb2JhbF9zeW1ib2xfcGlwZSB8IFwkU0VEICdzLy4qIC8vJyB8IHNv cnQgfCB1bmlxID4gXCRleHBvcnRfc3ltYm9scyIKCiMgU3ltYm9scyB0aGF0IHNob3VsZCBu b3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KZXhjbHVkZV9leHBzeW1z PSJfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLioiCgojIFN5bWJvbHMg dGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KaW5jbHVkZV9leHBzeW1zPSIiCgojIENv bW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJp ZXMpIHdpdGggdGVtcGxhdGVzLgpwcmVsaW5rX2NtZHM9IiIKCiMgQ29tbWFuZHMgbmVjZXNz YXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KcG9zdGxpbmtfY21kcz0iIgoK IyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCmZpbGVfbGlzdF9z cGVjPSIiCgojIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBh biBleGVjdXRhYmxlLgpoYXJkY29kZV9hY3Rpb249aW1tZWRpYXRlCgojIFRoZSBkaXJlY3Rv cmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQg bGlicmFyeS4KY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSIiCgojIERlcGVuZGVuY2llcyB0 byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bwoj IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgpwcmVkZXBfb2JqZWN0cz0iIgpwb3N0ZGVwX29i amVjdHM9IiIKcHJlZGVwcz0iIgpwb3N0ZGVwcz0iIgoKIyBUaGUgbGlicmFyeSBzZWFyY2gg cGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwojIGEg c2hhcmVkIGxpYnJhcnkuCmNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0iIgoKIyAjIyMgRU5E IExJQlRPT0wgVEFHIENPTkZJRzogRjc3CgojICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05G SUc6IEZDCgojIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCkxEPSIvdXNy L2Jpbi9sZCAtbSBlbGZfeDg2XzY0IgoKIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2Jq ZWN0IGZpbGVzLgpyZWxvYWRfZmxhZz0iIC1yIgpyZWxvYWRfY21kcz0iXCRMRFwkcmVsb2Fk X2ZsYWcgLW8gXCRvdXRwdXRcJHJlbG9hZF9vYmpzIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1 aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9jbWRzPSJcJEFSIFwkQVJf RkxBR1MgXCRvbGRsaWJcJG9sZG9ianN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKCiMgQSBs YW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KQ0M9Imdmb3J0cmFuIgoKIyBJcyB0aGUgY29t cGlsZXIgdGhlIEdOVSBjb21waWxlcj8Kd2l0aF9nY2M9eWVzCgojIENvbXBpbGVyIGZsYWcg dG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCm5vX2J1aWx0aW5fZmxhZz0iIgoKIyBB ZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMu CnBpY19mbGFnPSIgLWZQSUMiCgojIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3Vn aCB0aGUgY29tcGlsZXIuCndsPSItV2wsIgoKIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQg ZHluYW1pYyBsaW5raW5nLgpsaW5rX3N0YXRpY19mbGFnPSItc3RhdGljIgoKIyBEb2VzIGNv bXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/CmNvbXBp bGVyX2Nfbz0ieWVzIgoKIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGlu ZyBzaGFyZWQgbGlicmFyaWVzLgpidWlsZF9saWJ0b29sX25lZWRfbGM9bm8KCiMgV2hldGhl ciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJl IHN0YXRpYy4KYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCgoj IENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCmV4cG9ydF9keW5h bWljX2ZsYWdfc3BlYz0iXCR3bC0tZXhwb3J0LWR5bmFtaWMiCgojIENvbXBpbGVyIGZsYWcg dG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4Kd2hv bGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ilwkd2wtLXdob2xlLWFyY2hpdmVcJGNvbnZlbmllbmNl IFwkd2wtLW5vLXdob2xlLWFyY2hpdmUiCgojIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVz IHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5Lgpjb21waWxlcl9uZWVkc19vYmpl Y3Q9Im5vIgoKIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBh cmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSIiCgojIENyZWF0ZSBhIHRlbXBv cmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJj aGl2ZS4Kb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9IiIKCiMgQ29tbWFuZHMgdXNl ZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgphcmNoaXZlX2NtZHM9IlwkQ0MgLXNoYXJl ZCBcJHBpY19mbGFnIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyBcJHds LXNvbmFtZSBcJHdsXCRzb25hbWUgLW8gXCRsaWIiCmFyY2hpdmVfZXhwc3ltX2NtZHM9ImVj aG8gXFxcInsgZ2xvYmFsOlxcXCIgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlcn4K ICAgICAgICAgICAgY2F0IFwkZXhwb3J0X3N5bWJvbHMgfCBcJFNFRCAtZSBcXFwicy9cXFxc KC4qXFxcXCkvXFxcXDE7L1xcXCIgPj4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS52ZXJ+ CiAgICAgICAgICAgIGVjaG8gXFxcImxvY2FsOiAqOyB9O1xcXCIgPj4gXCRvdXRwdXRfb2Jq ZGlyL1wkbGlibmFtZS52ZXJ+CiAgICAgICAgICAgIFwkQ0MgLXNoYXJlZCBcJHBpY19mbGFn IFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyBcJHdsLXNvbmFtZSBcJHds XCRzb25hbWUgXCR3bC12ZXJzaW9uLXNjcmlwdCBcJHdsXCRvdXRwdXRfb2JqZGlyL1wkbGli bmFtZS52ZXIgLW8gXCRsaWIiCgojIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJs ZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKIyBhIHNoYXJlZCBhcmNoaXZl Lgptb2R1bGVfY21kcz0iIgptb2R1bGVfZXhwc3ltX2NtZHM9IiIKCiMgV2hldGhlciB3ZSBh cmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgp3aXRoX2dudV9sZD0ieWVzIgoKIyBG bGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9s cyB0byBiZSBidWlsdC4KYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiIKCiMgRmxhZyB0aGF0IGVu Zm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgpub191bmRlZmluZWRfZmxhZz0iIgoKIyBG bGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4K IyBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKaGFyZGNv ZGVfbGliZGlyX2ZsYWdfc3BlYz0iXCR3bC1ycGF0aCBcJHdsXCRsaWJkaXIiCgojIFdoZXRo ZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJn dW1lbnQuCmhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiIKCiMgU2V0IHRvICJ5ZXMiIGlm IHVzaW5nIERJUi9saWJOQU1FJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVz CiMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCmhhcmRjb2RlX2RpcmVjdD1ubwoK IyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcg bGlua2luZyBoYXJkY29kZXMKIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQg dGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKIyAiYWJzb2x1dGUiLGkuZS4g aW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUK IyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCgoj IFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBo YXJkY29kZXMgRElSCiMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfbWlu dXNfTD1ubwoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVy aW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgojIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnku CmhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKCiMgU2V0IHRvICJ5ZXMiIGlm IGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElS CiMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBl eGVjdXRhYmxlcyBsaW5rZWQKIyBhZ2FpbnN0IGl0LgpoYXJkY29kZV9hdXRvbWF0aWM9bm8K CiMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVu dCBsaWJyYXJpZXMKIyB0byBydW50aW1lIHBhdGggbGlzdC4KaW5oZXJpdF9ycGF0aD1ubwoK IyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMg ZGVwZW5kZW5jeSBsaWJyYXJpZXMuCmxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgoKIyBTZXQg dG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCmFsd2F5c19leHBv cnRfc3ltYm9scz1ubwoKIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xz LgpleHBvcnRfc3ltYm9sc19jbWRzPSJcJE5NIFwkbGlib2JqcyBcJGNvbnZlbmllbmNlIHwg XCRnbG9iYWxfc3ltYm9sX3BpcGUgfCBcJFNFRCAncy8uKiAvLycgfCBzb3J0IHwgdW5pcSA+ IFwkZXhwb3J0X3N5bWJvbHMiCgojIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3Rl ZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCmV4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9P RkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qIgoKIyBTeW1ib2xzIHRoYXQgbXVzdCBh bHdheXMgYmUgZXhwb3J0ZWQuCmluY2x1ZGVfZXhwc3ltcz0iIgoKIyBDb21tYW5kcyBuZWNl c3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRl bXBsYXRlcy4KcHJlbGlua19jbWRzPSIiCgojIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmlu aXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCnBvc3RsaW5rX2NtZHM9IiIKCiMgU3BlY2lmeSBm aWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgpmaWxlX2xpc3Rfc3BlYz0iIgoKIyBI b3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJs ZS4KaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQoKIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNo ZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCmNv bXBpbGVyX2xpYl9zZWFyY2hfZGlycz0iL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUv MTQgL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQvLi4vLi4vLi4veDg2XzY0LWxp bnV4LWdudSAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS8xNC8uLi8uLi8uLi8uLi9s aWIgL2xpYi94ODZfNjQtbGludXgtZ251IC9saWIvLi4vbGliIC91c3IvbGliL3g4Nl82NC1s aW51eC1nbnUgL3Vzci9saWIvLi4vbGliIC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251 LzE0Ly4uLy4uLy4uIgoKIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRl ciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFy eS4KcHJlZGVwX29iamVjdHM9Ii91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4u Ly4uLy4uL3g4Nl82NC1saW51eC1nbnUvY3J0aS5vIC91c3IvbGliL2djYy94ODZfNjQtbGlu dXgtZ251LzE0L2NydGJlZ2luUy5vIgpwb3N0ZGVwX29iamVjdHM9Ii91c3IvbGliL2djYy94 ODZfNjQtbGludXgtZ251LzE0L2NydGVuZFMubyAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4 LWdudS8xNC8uLi8uLi8uLi94ODZfNjQtbGludXgtZ251L2NydG4ubyIKcHJlZGVwcz0iIgpw b3N0ZGVwcz0iLWxnZm9ydHJhbiAtbG0gLWxnY2NfcyAtbHF1YWRtYXRoIC1sbSAtbGMgLWxn Y2NfcyIKCiMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRo ZSBjb21waWxlciB3aGVuIGxpbmtpbmcKIyBhIHNoYXJlZCBsaWJyYXJ5Lgpjb21waWxlcl9s aWJfc2VhcmNoX3BhdGg9Ii1ML3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQgLUwv dXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS8xNC8uLi8uLi8uLi94ODZfNjQtbGludXgt Z251IC1ML3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQvLi4vLi4vLi4vLi4vbGli IC1ML2xpYi94ODZfNjQtbGludXgtZ251IC1ML2xpYi8uLi9saWIgLUwvdXNyL2xpYi94ODZf NjQtbGludXgtZ251IC1ML3Vzci9saWIvLi4vbGliIC1ML3Vzci9saWIvZ2NjL3g4Nl82NC1s aW51eC1nbnUvMTQvLi4vLi4vLi4iCgojICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBG QwoKIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBHTwoKIyBUaGUgbGlua2VyIHVz ZWQgdG8gYnVpbGQgbGlicmFyaWVzLgpMRD0iL3Vzci9iaW4vbGQgLW0gZWxmX3g4Nl82NCIK CiMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KcmVsb2FkX2ZsYWc9 IiAtciIKcmVsb2FkX2NtZHM9IlwkTERcJHJlbG9hZF9mbGFnIC1vIFwkb3V0cHV0XCRyZWxv YWRfb2JqcyIKCiMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2 ZS4Kb2xkX2FyY2hpdmVfY21kcz0iXCRBUiBcJEFSX0ZMQUdTIFwkb2xkbGliXCRvbGRvYmpz flwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCgojIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGls ZXIuCkNDPSIiCgojIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPwp3aXRoX2dj Yz0KCiMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4Kbm9f YnVpbHRpbl9mbGFnPSIiCgojIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxk aW5nIGxpYnJhcnkgb2JqZWN0cy4KcGljX2ZsYWc9IiIKCiMgSG93IHRvIHBhc3MgYSBsaW5r ZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4Kd2w9IiIKCiMgQ29tcGlsZXIgZmxhZyB0 byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KbGlua19zdGF0aWNfZmxhZz0iIgoKIyBEb2Vz IGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/CmNv bXBpbGVyX2Nfbz0iIgoKIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGlu ZyBzaGFyZWQgbGlicmFyaWVzLgpidWlsZF9saWJ0b29sX25lZWRfbGM9bm8KCiMgV2hldGhl ciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJl IHN0YXRpYy4KYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPQoKIyBD b21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgpleHBvcnRfZHluYW1p Y19mbGFnX3NwZWM9IiIKCiMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2Jq ZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgp3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0i IgoKIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0 cyBkaXJlY3RseS4KY29tcGlsZXJfbmVlZHNfb2JqZWN0PSIiCgojIENyZWF0ZSBhbiBvbGQt c3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2Zyb21f bmV3X2NtZHM9IiIKCiMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRv IGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9tX2V4 cHN5bXNfY21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hp dmUuCmFyY2hpdmVfY21kcz0iIgphcmNoaXZlX2V4cHN5bV9jbWRzPSIiCgojIENvbW1hbmRz IHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVp bGRpbmcKIyBhIHNoYXJlZCBhcmNoaXZlLgptb2R1bGVfY21kcz0iIgptb2R1bGVfZXhwc3lt X2NtZHM9IiIKCiMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90 Lgp3aXRoX2dudV9sZD0iIgoKIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMg d2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KYWxsb3dfdW5kZWZpbmVkX2Zs YWc9IiIKCiMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgpub191 bmRlZmluZWRfZmxhZz0iIgoKIyBGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJp bmFyeSBkdXJpbmcgbGlua2luZy4KIyBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIg ZG9lcyBub3QgZXhpc3QKaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iIgoKIyBXaGV0aGVy IHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3Vt ZW50LgpoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIiCgojIFNldCB0byAieWVzIiBpZiB1 c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2Rlcwoj IERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgpoYXJkY29kZV9kaXJlY3Q9CgojIFNl dCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5r aW5nIGhhcmRjb2RlcwojIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUg cmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwojICJhYnNvbHV0ZSIsaS5lLiBpbXBv c3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICRzaGxpYnBhdGhfdmFyIGlmIHRoZQojIGxp YnJhcnkgaXMgcmVsb2NhdGVkLgpoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9CgojIFNldCB0 byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29k ZXMgRElSCiMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfbWludXNfTD0K CiMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5r aW5nIGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgpoYXJkY29k ZV9zaGxpYnBhdGhfdmFyPQoKIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQg bGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSBsaWJyYXJ5 IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAoj IGFnYWluc3QgaXQuCmhhcmRjb2RlX2F1dG9tYXRpYz0KCiMgU2V0IHRvIHllcyBpZiBsaW5r ZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKIyB0byBydW50 aW1lIHBhdGggbGlzdC4KaW5oZXJpdF9ycGF0aD0KCiMgV2hldGhlciBsaWJ0b29sIG11c3Qg bGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgps aW5rX2FsbF9kZXBsaWJzPQoKIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBh cmUgcmVxdWlyZWQuCmFsd2F5c19leHBvcnRfc3ltYm9scz0KCiMgVGhlIGNvbW1hbmRzIHRv IGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KZXhwb3J0X3N5bWJvbHNfY21kcz0iIgoKIyBTeW1i b2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xz LgpleGNsdWRlX2V4cHN5bXM9IiIKCiMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4 cG9ydGVkLgppbmNsdWRlX2V4cHN5bXM9IiIKCiMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBs aW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCnBy ZWxpbmtfY21kcz0iIgoKIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5r aW5nIHByb2dyYW1zLgpwb3N0bGlua19jbWRzPSIiCgojIFNwZWNpZnkgZmlsZW5hbWUgY29u dGFpbmluZyBpbnB1dCBmaWxlcy4KZmlsZV9saXN0X3NwZWM9IiIKCiMgSG93IHRvIGhhcmRj b2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCmhhcmRjb2Rl X2FjdGlvbj0KCiMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIg d2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5Lgpjb21waWxlcl9saWJfc2VhcmNoX2Rp cnM9IiIKCiMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9i amVjdHMgYmVpbmcgbGlua2VkIHRvCiMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCnByZWRl cF9vYmplY3RzPSIiCnBvc3RkZXBfb2JqZWN0cz0iIgpwcmVkZXBzPSIiCnBvc3RkZXBzPSIi CgojIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29t cGlsZXIgd2hlbiBsaW5raW5nCiMgYSBzaGFyZWQgbGlicmFyeS4KY29tcGlsZXJfbGliX3Nl YXJjaF9wYXRoPSIiCgojICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBHTwoKIyAjIyMg QkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBHQ0oKCiMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1 aWxkIGxpYnJhcmllcy4KTEQ9Ii91c3IvYmluL2xkIC1tIGVsZl94ODZfNjQiCgojIEhvdyB0 byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCnJlbG9hZF9mbGFnPSIgLXIiCnJl bG9hZF9jbWRzPSJcJExEXCRyZWxvYWRfZmxhZyAtbyBcJG91dHB1dFwkcmVsb2FkX29ianMi CgojIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCm9sZF9h cmNoaXZlX2NtZHM9IlwkQVIgXCRBUl9GTEFHUyBcJG9sZGxpYlwkb2xkb2Jqc35cJFJBTkxJ QiBcJHRvb2xfb2xkbGliIgoKIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgpDQz0i IgoKIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8Kd2l0aF9nY2M9CgojIENv bXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCm5vX2J1aWx0aW5f ZmxhZz0iIgoKIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJy YXJ5IG9iamVjdHMuCnBpY19mbGFnPSIiCgojIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcg dGhyb3VnaCB0aGUgY29tcGlsZXIuCndsPSIiCgojIENvbXBpbGVyIGZsYWcgdG8gcHJldmVu dCBkeW5hbWljIGxpbmtpbmcuCmxpbmtfc3RhdGljX2ZsYWc9IiIKCiMgRG9lcyBjb21waWxl ciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwpjb21waWxlcl9j X289IiIKCiMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVk IGxpYnJhcmllcy4KYnVpbGRfbGlidG9vbF9uZWVkX2xjPW5vCgojIFdoZXRoZXIgb3Igbm90 IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMu CmFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0KCiMgQ29tcGlsZXIg ZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KZXhwb3J0X2R5bmFtaWNfZmxhZ19z cGVjPSIiCgojIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGly ZWN0bHkgZnJvbSBhcmNoaXZlcy4Kd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiIKCiMgV2hl dGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0 bHkuCmNvbXBpbGVyX25lZWRzX29iamVjdD0iIgoKIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFy Y2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRz PSIiCgojIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGlu c3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4Kb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2Nt ZHM9IiIKCiMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgphcmNo aXZlX2NtZHM9IiIKYXJjaGl2ZV9leHBzeW1fY21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRv IGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCiMg YSBzaGFyZWQgYXJjaGl2ZS4KbW9kdWxlX2NtZHM9IiIKbW9kdWxlX2V4cHN5bV9jbWRzPSIi CgojIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4Kd2l0aF9n bnVfbGQ9IiIKCiMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5k ZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCmFsbG93X3VuZGVmaW5lZF9mbGFnPSIiCgoj IEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4Kbm9fdW5kZWZpbmVk X2ZsYWc9IiIKCiMgRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVy aW5nIGxpbmtpbmcuCiMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90 IGV4aXN0CmhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiIKCiMgV2hldGhlciB3ZSBuZWVk IGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KaGFy ZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iIgoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElS L2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKIyBESVIgaW50 byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfZGlyZWN0PQoKIyBTZXQgdG8gInll cyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJk Y29kZXMKIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGlu ZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKIyAiYWJzb2x1dGUiLGkuZS4gaW1wb3NzaWJsZSB0 byBjaGFuZ2UgYnkgc2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUKIyBsaWJyYXJ5IGlz IHJlbG9jYXRlZC4KaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPQoKIyBTZXQgdG8gInllcyIg aWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgoj IGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCmhhcmRjb2RlX21pbnVzX0w9CgojIFNldCB0 byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJk Y29kZXMgRElSCiMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfc2hsaWJw YXRoX3Zhcj0KCiMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkg YXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCiMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxs IHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKIyBhZ2FpbnN0 IGl0LgpoYXJkY29kZV9hdXRvbWF0aWM9CgojIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMg cnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCiMgdG8gcnVudGltZSBwYXRo IGxpc3QuCmluaGVyaXRfcnBhdGg9CgojIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBw cm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KbGlua19hbGxf ZGVwbGlicz0KCiMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVp cmVkLgphbHdheXNfZXhwb3J0X3N5bWJvbHM9CgojIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4 cG9ydGVkIHN5bWJvbHMuCmV4cG9ydF9zeW1ib2xzX2NtZHM9IiIKCiMgU3ltYm9scyB0aGF0 IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KZXhjbHVk ZV9leHBzeW1zPSIiCgojIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4K aW5jbHVkZV9leHBzeW1zPSIiCgojIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBw cm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgpwcmVsaW5rX2Nt ZHM9IiIKCiMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9n cmFtcy4KcG9zdGxpbmtfY21kcz0iIgoKIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcg aW5wdXQgZmlsZXMuCmZpbGVfbGlzdF9zcGVjPSIiCgojIEhvdyB0byBoYXJkY29kZSBhIHNo YXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgpoYXJkY29kZV9hY3Rpb249 CgojIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3Jl YXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSIiCgoj IERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJl aW5nIGxpbmtlZCB0bwojIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgpwcmVkZXBfb2JqZWN0 cz0iIgpwb3N0ZGVwX29iamVjdHM9IiIKcHJlZGVwcz0iIgpwb3N0ZGVwcz0iIgoKIyBUaGUg bGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdo ZW4gbGlua2luZwojIGEgc2hhcmVkIGxpYnJhcnkuCmNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0 aD0iIgoKIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogR0NKCgojICMjIyBCRUdJTiBM SUJUT09MIFRBRyBDT05GSUc6IFJDCgojIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJy YXJpZXMuCkxEPSIiCgojIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMu CnJlbG9hZF9mbGFnPSIiCnJlbG9hZF9jbWRzPSIiCgojIENvbW1hbmRzIHVzZWQgdG8gYnVp bGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2NtZHM9IiIKCiMgQSBsYW5n dWFnZSBzcGVjaWZpYyBjb21waWxlci4KQ0M9IiIKCiMgSXMgdGhlIGNvbXBpbGVyIHRoZSBH TlUgY29tcGlsZXI/CndpdGhfZ2NjPQoKIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1 aWx0aW4gZnVuY3Rpb25zLgpub19idWlsdGluX2ZsYWc9IiIKCiMgQWRkaXRpb25hbCBjb21w aWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgpwaWNfZmxhZz0iIgoK IyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgp3bD0i IgoKIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgpsaW5rX3N0 YXRpY19mbGFnPSIiCgojIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAt YyBhbmQgLW8gb3B0aW9ucz8KY29tcGlsZXJfY19vPSJ5ZXMiCgojIFdoZXRoZXIgb3Igbm90 IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCmJ1aWxkX2xpYnRv b2xfbmVlZF9sYz0KCiMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMg d2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KYWxsb3dfbGlidG9vbF9saWJzX3dpdGhf c3RhdGljX3J1bnRpbWVzPQoKIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBk bG9wZW5zLgpleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9IiIKCiMgQ29tcGlsZXIgZmxhZyB0 byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgp3aG9s ZV9hcmNoaXZlX2ZsYWdfc3BlYz0iIgoKIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3 aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KY29tcGlsZXJfbmVlZHNfb2JqZWN0 PSIiCgojIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hp dmUuCm9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKCiMgQ3JlYXRlIGEgdGVtcG9yYXJ5 IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZl LgpvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRv IGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCmFyY2hpdmVfY21kcz0iIgphcmNoaXZlX2V4cHN5 bV9jbWRzPSIiCgojIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUg aWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKIyBhIHNoYXJlZCBhcmNoaXZlLgptb2R1bGVf Y21kcz0iIgptb2R1bGVfZXhwc3ltX2NtZHM9IiIKCiMgV2hldGhlciB3ZSBhcmUgYnVpbGRp bmcgd2l0aCBHTlUgbGQgb3Igbm90Lgp3aXRoX2dudV9sZD0iIgoKIyBGbGFnIHRoYXQgYWxs b3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWls dC4KYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiIKCiMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVu ZGVmaW5lZCBzeW1ib2xzLgpub191bmRlZmluZWRfZmxhZz0iIgoKIyBGbGFnIHRvIGhhcmRj b2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KIyBUaGlzIG11c3Qg d29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKaGFyZGNvZGVfbGliZGlyX2Zs YWdfc3BlYz0iIgoKIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3 aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgpoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIi CgojIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmlu ZyBsaW5raW5nIGhhcmRjb2RlcwojIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5Lgpo YXJkY29kZV9kaXJlY3Q9CgojIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRz aGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwojIERJUiBpbnRvIHRoZSByZXN1 bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwoj ICJhYnNvbHV0ZSIsaS5lLiBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICRzaGxp YnBhdGhfdmFyIGlmIHRoZQojIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgpoYXJkY29kZV9kaXJl Y3RfYWJzb2x1dGU9CgojIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBk dXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCiMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFy eS4KaGFyZGNvZGVfbWludXNfTD0KCiMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFU SF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSByZXN1 bHRpbmcgYmluYXJ5LgpoYXJkY29kZV9zaGxpYnBhdGhfdmFyPQoKIyBTZXQgdG8gInllcyIg aWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBE SVIKIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5k IGV4ZWN1dGFibGVzIGxpbmtlZAojIGFnYWluc3QgaXQuCmhhcmRjb2RlX2F1dG9tYXRpYz0K CiMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVu dCBsaWJyYXJpZXMKIyB0byBydW50aW1lIHBhdGggbGlzdC4KaW5oZXJpdF9ycGF0aD0KCiMg V2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRl cGVuZGVuY3kgbGlicmFyaWVzLgpsaW5rX2FsbF9kZXBsaWJzPQoKIyBTZXQgdG8gInllcyIg aWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCmFsd2F5c19leHBvcnRfc3ltYm9s cz0KCiMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KZXhwb3J0X3N5 bWJvbHNfY21kcz0iIgoKIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4g dGhlIHByZWxvYWRlZCBzeW1ib2xzLgpleGNsdWRlX2V4cHN5bXM9IiIKCiMgU3ltYm9scyB0 aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgppbmNsdWRlX2V4cHN5bXM9IiIKCiMgQ29t bWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmll cykgd2l0aCB0ZW1wbGF0ZXMuCnByZWxpbmtfY21kcz0iIgoKIyBDb21tYW5kcyBuZWNlc3Nh cnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgpwb3N0bGlua19jbWRzPSIiCgoj IFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KZmlsZV9saXN0X3Nw ZWM9IiIKCiMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFu IGV4ZWN1dGFibGUuCmhhcmRjb2RlX2FjdGlvbj0KCiMgVGhlIGRpcmVjdG9yaWVzIHNlYXJj aGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5Lgpj b21waWxlcl9saWJfc2VhcmNoX2RpcnM9IiIKCiMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJl Zm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCiMgY3JlYXRlIGEg c2hhcmVkIGxpYnJhcnkuCnByZWRlcF9vYmplY3RzPSIiCnBvc3RkZXBfb2JqZWN0cz0iIgpw cmVkZXBzPSIiCnBvc3RkZXBzPSIiCgojIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQg aW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCiMgYSBzaGFyZWQgbGli cmFyeS4KY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSIiCgojICMjIyBFTkQgTElCVE9PTCBU QUcgQ09ORklHOiBSQwo= --------------G8KF08EbUdf0hPn9ptngmrht Content-Type: text/plain; charset=UTF-8; name="libtool-gcc" Content-Disposition: attachment; filename="libtool-gcc" Content-Transfer-Encoding: base64 IyEgL2Jpbi9iYXNoCiMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlnLnN0YXR1 cyAobGlidG9vbCkgMi41LjAuODEtM2NmNTIKIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhp cyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCgojIFByb3ZpZGUgZ2Vu ZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgojIFdyaXR0ZW4g YnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKCiMgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2Vl IHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiMgd2Fy cmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCgojIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQoj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwoj IEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLCBpZiB5b3UKIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3Jh bSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQKIyB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1h eSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgIHNhbWUKIyBkaXN0cmlidXRpb24gdGVy bXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiMKIyBHTlUg TGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQKIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoK CiMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5 IHRoaXMgc2NyaXB0LgphdmFpbGFibGVfdGFncz0nQ1hYIEY3NyBGQyBHTyBHQ0ogUkMgJwoK IyBDb25maWd1cmVkIGRlZmF1bHRzIGZvciBzeXNfbGliX2Rsc2VhcmNoX3BhdGggbXVuZ2lu Zy4KOiAke0xUX1NZU19MSUJSQVJZX1BBVEg9IiJ9CgojICMjIyBCRUdJTiBMSUJUT09MIENP TkZJRwoKIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/Cm1hY3JvX3Zl cnNpb249Mi41LjAuODEtM2NmNTIKbWFjcm9fcmV2aXNpb249Mi41LjAuODEKCiMgQXNzZW1i bGVyIHByb2dyYW0uCkFTPSJhcyIKCiMgRExMIGNyZWF0aW9uIHByb2dyYW0uCkRMTFRPT0w9 ImZhbHNlIgoKIyBPYmplY3QgZHVtcGVyIHByb2dyYW0uCk9CSkRVTVA9Im9iamR1bXAiCgoj IFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCmJ1aWxkX2xpYnRv b2xfbGlicz15ZXMKCiMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmll cy4KYnVpbGRfb2xkX2xpYnM9eWVzCgojIFdoYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxk LgpwaWNfbW9kZT1kZWZhdWx0CgojIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBm YXN0IGluc3RhbGxhdGlvbi4KZmFzdF9pbnN0YWxsPW5lZWRsZXNzCgojIFNoYXJlZCBhcmNo aXZlIG1lbWJlciBiYXNlbmFtZSxmb3IgZmlsZW5hbWUgYmFzZWQgc2hhcmVkIGxpYnJhcnkg dmVyc2lvbmluZyBvbiBBSVguCnNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPQoKIyBTaGVs bCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgpTSEVMTD0iL2Jpbi9iYXNo IgoKIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlcy4KRUNITz0i cHJpbnRmICVzXFxuIgoKIyBUaGUgUEFUSCBzZXBhcmF0b3IgZm9yIHRoZSBidWlsZCBzeXN0 ZW0uClBBVEhfU0VQQVJBVE9SPSI6IgoKIyBUaGUgaG9zdCBzeXN0ZW0uCmhvc3RfYWxpYXM9 Cmhvc3Q9eDg2XzY0LXBjLWxpbnV4LWdudQpob3N0X29zPWxpbnV4LWdudQoKIyBUaGUgYnVp bGQgc3lzdGVtLgpidWlsZF9hbGlhcz0KYnVpbGQ9eDg2XzY0LXBjLWxpbnV4LWdudQpidWls ZF9vcz1saW51eC1nbnUKCiMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRl IG91dHB1dC4KU0VEPSIvdXNyL2Jpbi9zZWQiCgojIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lk IGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgpYc2Vk PSIkU0VEIC1lIDFzL15YLy8iCgojIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25n IGxpbmVzLgpHUkVQPSIvdXNyL2Jpbi9ncmVwIgoKIyBBbiBFUkUgbWF0Y2hlci4KRUdSRVA9 Ii91c3IvYmluL2dyZXAgLUUiCgojIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KRkdSRVA9 Ii91c3IvYmluL2dyZXAgLUYiCgojIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlz dGVyLgpOTT0iL3Vzci9iaW4vbm0gLUIiCgojIFdoZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhh cmQgbGlua3MuCkxOX1M9ImxuIC1zIgoKIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBv ZiBhIGNvbW1hbmQ/Cm1heF9jbWRfbGVuPTE1NzI4NjQKCiMgT2JqZWN0IGZpbGUgc3VmZml4 IChub3JtYWxseSAibyIpLgpvYmpleHQ9bwoKIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChu b3JtYWxseSAiIikuCmV4ZWV4dD0KCiMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMg InVuc2V0Ii4KbHRfdW5zZXQ9dW5zZXQKCiMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4K U1AyTkw9InRyIFxcMDQwIFxcMDEyIgoKIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgpO TDJTUD0idHIgXFwwMTVcXDAxMiBcXDA0MFxcMDQwIgoKIyBjb252ZXJ0ICRidWlsZCBmaWxl IG5hbWVzIHRvICRob3N0IGZvcm1hdC4KdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRf ZmlsZV9ub29wCgojIGNvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQu CnRvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAoKIyBBIGZpbGUoY21k KSBwcm9ncmFtIHRoYXQgZGV0ZWN0cyBmaWxlIHR5cGVzLgpGSUxFQ01EPSJmaWxlIgoKIyBN ZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQg b2JqZWN0cy4KZGVwbGlic19jaGVja19tZXRob2Q9InBhc3NfYWxsIgoKIyBDb21tYW5kIHRv IHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgpmaWxlX21h Z2ljX2NtZD0iXCRNQUdJQ19DTUQiCgojIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3 aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgpmaWxlX21hZ2ljX2ds b2I9IiIKCiMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRl cGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgp3YW50X25vY2FzZWdsb2I9Im5v IgoKIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgpz aGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0icHJpbnRmICVzXFxuIgoKIyBUaGUgYXJjaGl2 ZXIuCkFSPSJhciIKCiMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUgKGJ5IGNvbmZpZ3Vy ZSkuCmx0X2FyX2ZsYWdzPWNyCgojIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgpBUl9G TEFHUz0ke0FSRkxBR1MtIiRsdF9hcl9mbGFncyJ9CgojIEhvdyB0byBmZWVkIGEgZmlsZSBs aXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KYXJjaGl2ZXJfbGlzdF9zcGVjPSJAIgoKIyBBIHN5 bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KU1RSSVA9InN0cmlwIgoKIyBDb21tYW5kcyB1c2Vk IHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuClJBTkxJQj0icmFubGliIgpvbGRf cG9zdGluc3RhbGxfY21kcz0iY2htb2QgNjQ0IFwkb2xkbGliflwkUkFOTElCIFwkdG9vbF9v bGRsaWIiCm9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9IiIKCiMgV2hldGhlciB0byB1c2UgYSBs b2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uLgpsb2NrX29sZF9hcmNoaXZlX2V4dHJh Y3Rpb249bm8KCiMgQSBDIGNvbXBpbGVyLgpMVENDPSJnY2MiCgojIExUQ0MgY29tcGlsZXIg ZmxhZ3MuCkxUQ0ZMQUdTPSItZyAtTzIiCgojIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQg cHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCmdsb2JhbF9z eW1ib2xfcGlwZT0iL3Vzci9iaW4vc2VkIC1uIC1lICdzL14uKlsJIF1cXChbQUJDREdJUlNU V11bQUJDREdJUlNUV10qXFwpWwkgXVsJIF0qXFwoW19BLVphLXpdW19BLVphLXowLTldKlxc KVwkL1xcMSBcXDIgXFwyL3AnIHwgL3Vzci9iaW4vc2VkICcvIF9fZ251X2x0by9kJyIKCiMg VHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4K Z2xvYmFsX3N5bWJvbF90b19jZGVjbD0iL3Vzci9iaW4vc2VkIC1uIC1lICdzL15UIC4qIFxc KC4qXFwpXCQvZXh0ZXJuIGludCBcXDEoKTsvcCcgLWUgJ3MvXltBQkNER0lSU1RXXVtBQkNE R0lSU1RXXSogLiogXFwoLipcXClcJC9leHRlcm4gY2hhciBcXDE7L3AnIgoKIyBUcmFuc2Zv cm0gdGhlIG91dHB1dCBvZiBubSBpbnRvIGEgbGlzdCBvZiBzeW1ib2xzIHRvIG1hbnVhbGx5 IHJlbG9jYXRlLgpnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0iIgoKIyBUcmFuc2Zvcm0gdGhl IG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCmdsb2JhbF9zeW1ib2xf dG9fY19uYW1lX2FkZHJlc3M9Ii91c3IvYmluL3NlZCAtbiAtZSAncy9eOiBcXCguKlxcKSAu KlwkLyAge1wiXFwxXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eW0FCQ0RHSVJTVFddW0FC Q0RHSVJTVFddKiAuKiBcXCguKlxcKVwkLyAge1wiXFwxXCIsICh2b2lkICopIFxcJlxcMX0s L3AnIgoKIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNz IHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KZ2xvYmFsX3N5bWJvbF90b19jX25h bWVfYWRkcmVzc19saWJfcHJlZml4PSIvdXNyL2Jpbi9zZWQgLW4gLWUgJ3MvXjogXFwoLipc XCkgLipcJC8gIHtcIlxcMVwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXltBQkNER0lSU1RX XVtBQkNER0lSU1RXXSogLiogXFwobGliLipcXClcJC8gIHtcIlxcMVwiLCAodm9pZCAqKSBc XCZcXDF9LC9wJyAtZSAncy9eW0FCQ0RHSVJTVFddW0FCQ0RHSVJTVFddKiAuKiBcXCguKlxc KVwkLyAge1wibGliXFwxXCIsICh2b2lkICopIFxcJlxcMX0sL3AnIgoKIyBUaGUgbmFtZSBs aXN0ZXIgaW50ZXJmYWNlLgpubV9pbnRlcmZhY2U9IkJTRCBubSIKCiMgU3BlY2lmeSBmaWxl bmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciAkTk0uCm5tX2ZpbGVfbGlzdF9zcGVj PSJAIgoKIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJp ZXMsYW5kIHdoZXJlIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KbHRfc3lz cm9vdD0KCiMgQ29tbWFuZCB0byB0cnVuY2F0ZSBhIGJpbmFyeSBwaXBlLgpsdF90cnVuY2F0 ZV9iaW49Ii91c3IvYmluL2RkIGJzPTQwOTYgY291bnQ9MSIKCiMgVGhlIG5hbWUgb2YgdGhl IGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgpvYmpk aXI9LmxpYnMKCiMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNf Y21kIGJlZ2lucyB3aXRoICJmaWxlIi4KTUFHSUNfQ01EPWZpbGUKCiMgTXVzdCB3ZSBsb2Nr IGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Cm5lZWRfbG9ja3M9Im5vIgoKIyBNYW5p ZmVzdCB0b29sLgpNQU5JRkVTVF9UT09MPSI6IgoKIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJj aGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgpEU1lNVVRJTD0i IgoKIyBUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1Mg WC4KTk1FRElUPSIiCgojIFRvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJj aGl2ZXMgb24gTWFjIE9TIFguCkxJUE89IiIKCiMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZv ciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFguCk9UT09MPSIiCgojIGxkZC9yZWFkZWxm IGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40 LgpPVE9PTDY0PSIiCgojIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KbGli ZXh0PWEKCiMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCnNocmV4 dF9jbWRzPSIuc28iCgojIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBz eW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCmV4dHJhY3RfZXhwc3ltc19jbWRz PSIiCgojIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRv b2wgd3JhcHBlciBzY3JpcHRzIGFuZAojIHJlc3RvcmVkIGF0IGxpbmsgdGltZS4KdmFyaWFi bGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggTERfTElCUkFSWV9QQVRIIExEX1JVTl9QQVRI IEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKCiMgRG8gd2Ug bmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPwpuZWVkX2xpYl9wcmVmaXg9bm8K CiMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KbmVlZF92ZXJzaW9uPW5v CgojIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgp2ZXJzaW9uX3R5cGU9bGludXgKCiMgU2hh cmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgpydW5wYXRoX3Zhcj1MRF9SVU5f UEFUSAoKIyBTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgpzaGxpYnBhdGhfdmFyPUxE X0xJQlJBUllfUEFUSAoKIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJk LWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CnNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0 aD15ZXMKCiMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCmxpYm5hbWVfc3BlYz0i bGliXCRuYW1lIgoKIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRo ZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgojIFRoZSBsYXN0IG5hbWUgaXMgdGhl IG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUKbGlicmFyeV9uYW1lc19z cGVjPSJcJGxpYm5hbWVcJHJlbGVhc2VcJHNoYXJlZF9leHRcJHZlcnN1ZmZpeCBcJGxpYm5h bWVcJHJlbGVhc2VcJHNoYXJlZF9leHRcJG1ham9yIFwkbGlibmFtZVwkc2hhcmVkX2V4dCIK CiMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRo ZSByZWFsIG5hbWUuCnNvbmFtZV9zcGVjPSJcJGxpYm5hbWVcJHJlbGVhc2VcJHNoYXJlZF9l eHRcJG1ham9yIgoKIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlv biBvZiBzaGFyZWQgbGlicmFyaWVzLgppbnN0YWxsX292ZXJyaWRlX21vZGU9IiIKCiMgQ29t bWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCnBv c3RpbnN0YWxsX2NtZHM9IiIKCiMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRp b24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KcG9zdHVuaW5zdGFsbF9jbWRzPSIiCgojIENvbW1h bmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBh IGRpcmVjdG9yeS4KZmluaXNoX2NtZHM9IlBBVEg9XFxcIlxcXCRQQVRIOi9zYmluXFxcIiBs ZGNvbmZpZyAtbiBcJGxpYmRpciIKCiMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2lu Z2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CiMgbm90IHNob3duLgpmaW5p c2hfZXZhbD0iIgoKIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhz IGludG8gbGlicmFyaWVzLgpoYXJkY29kZV9pbnRvX2xpYnM9eWVzCgojIENvbXBpbGUtdGlt ZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4Kc3lzX2xpYl9zZWFyY2hfcGF0 aF9zcGVjPSIvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS8xNCAvdXNyL2xpYi94ODZf NjQtbGludXgtZ251IC91c3IvbGliIC9saWIveDg2XzY0LWxpbnV4LWdudSAvbGliICIKCiMg RGV0ZWN0ZWQgcnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCnN5 c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGli L2FhcmNoNjQtbGludXgtZ251IC9saWIvYWFyY2g2NC1saW51eC1nbnUgL3Vzci9saWIvYWFy Y2g2NC1saW51eC1nbnUgL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJmYWtlcm9vdCAv dXNyL2xvY2FsL2xpYi9pMzg2LWxpbnV4LWdudSAvbGliL2kzODYtbGludXgtZ251IC91c3Iv bGliL2kzODYtbGludXgtZ251IC91c3IvbG9jYWwvbGliL2k2ODYtbGludXgtZ251IC9saWIv aTY4Ni1saW51eC1nbnUgL3Vzci9saWIvaTY4Ni1saW51eC1nbnUgL3Vzci9sb2NhbC9saWIg L3Vzci9saWIvdm13YXJlLXRvb2xzL2xpYjMyL2xpYnZtR3Vlc3RMaWIuc28gL3Vzci9saWIv dm13YXJlLXRvb2xzL2xpYjY0L2xpYnZtR3Vlc3RMaWIuc28gL3Vzci9saWIvdm13YXJlLXRv b2xzL2xpYjMyL2xpYnZtR3Vlc3RMaWJKYXZhLnNvIC91c3IvbGliL3Ztd2FyZS10b29scy9s aWI2NC9saWJ2bUd1ZXN0TGliSmF2YS5zbyAvdXNyL2xpYi92bXdhcmUtdG9vbHMvbGliMzIv bGliRGVwbG95UGtnLnNvIC91c3IvbGliL3Ztd2FyZS10b29scy9saWI2NC9saWJEZXBsb3lQ a2cuc28gL3Vzci9sb2NhbC9saWIveDg2XzY0LWxpbnV4LWdudSAvbGliL3g4Nl82NC1saW51 eC1nbnUgL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudSAvbGliMzIgL3Vzci9saWIzMiAiCgoj IEV4cGxpY2l0IExUX1NZU19MSUJSQVJZX1BBVEggc2V0IGR1cmluZyAuL2NvbmZpZ3VyZSB0 aW1lLgpjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSIiCgojIFdoZXRoZXIg ZGxvcGVuIGlzIHN1cHBvcnRlZC4KZGxvcGVuX3N1cHBvcnQ9eWVzCgojIFdoZXRoZXIgZGxv cGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KZGxvcGVuX3NlbGY9eWVzCgojIFdoZXRo ZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4K ZGxvcGVuX3NlbGZfc3RhdGljPW5vCgojIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4K b2xkX3N0cmlwbGliPSJzdHJpcCAtLXN0cmlwLWRlYnVnIgpzdHJpcGxpYj0ic3RyaXAgLS1z dHJpcC11bm5lZWRlZCIKCgojIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMu CkxEPSIvdXNyL2Jpbi9sZCAtbSBlbGZfeDg2XzY0IgoKIyBIb3cgdG8gY3JlYXRlIHJlbG9h ZGFibGUgb2JqZWN0IGZpbGVzLgpyZWxvYWRfZmxhZz0iIC1yIgpyZWxvYWRfY21kcz0iXCRM RFwkcmVsb2FkX2ZsYWcgLW8gXCRvdXRwdXRcJHJlbG9hZF9vYmpzIgoKIyBDb21tYW5kcyB1 c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9jbWRzPSJc JEFSIFwkQVJfRkxBR1MgXCRvbGRsaWJcJG9sZG9ianN+XCRSQU5MSUIgXCR0b29sX29sZGxp YiIKCiMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KQ0M9ImdjYyIKCiMgSXMgdGhl IGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/CndpdGhfZ2NjPXllcwoKIyBDb21waWxlciBm bGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgpub19idWlsdGluX2ZsYWc9IiAt Zm5vLWJ1aWx0aW4iCgojIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5n IGxpYnJhcnkgb2JqZWN0cy4KcGljX2ZsYWc9IiAtZlBJQyAtRFBJQyIKCiMgSG93IHRvIHBh c3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4Kd2w9Ii1XbCwiCgojIENv bXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCmxpbmtfc3RhdGljX2Zs YWc9Ii1zdGF0aWMiCgojIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAt YyBhbmQgLW8gb3B0aW9ucz8KY29tcGlsZXJfY19vPSJ5ZXMiCgojIFdoZXRoZXIgb3Igbm90 IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCmJ1aWxkX2xpYnRv b2xfbmVlZF9sYz1ubwoKIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGli cyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgphbGxvd19saWJ0b29sX2xpYnNfd2l0 aF9zdGF0aWNfcnVudGltZXM9bm8KCiMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhp dmUgZGxvcGVucy4KZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSJcJHdsLS1leHBvcnQtZHlu YW1pYyIKCiMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJl Y3RseSBmcm9tIGFyY2hpdmVzLgp3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iXCR3bC0td2hv bGUtYXJjaGl2ZVwkY29udmVuaWVuY2UgXCR3bC0tbm8td2hvbGUtYXJjaGl2ZSIKCiMgV2hl dGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0 bHkuCmNvbXBpbGVyX25lZWRzX29iamVjdD0ibm8iCgojIENyZWF0ZSBhbiBvbGQtc3R5bGUg YXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2Zyb21fbmV3X2Nt ZHM9IiIKCiMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsg aW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNf Y21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCmFy Y2hpdmVfY21kcz0iXCRDQyAtc2hhcmVkIFwkcGljX2ZsYWcgXCRsaWJvYmpzIFwkZGVwbGli cyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29uYW1lIFwkd2xcJHNvbmFtZSAtbyBcJGxpYiIK YXJjaGl2ZV9leHBzeW1fY21kcz0iZWNobyBcXFwieyBnbG9iYWw6XFxcIiA+IFwkb3V0cHV0 X29iamRpci9cJGxpYm5hbWUudmVyfgogICAgICAgICAgICBjYXQgXCRleHBvcnRfc3ltYm9s cyB8IFwkU0VEIC1lIFxcXCJzL1xcXFwoLipcXFxcKS9cXFxcMTsvXFxcIiA+PiBcJG91dHB1 dF9vYmpkaXIvXCRsaWJuYW1lLnZlcn4KICAgICAgICAgICAgZWNobyBcXFwibG9jYWw6ICo7 IH07XFxcIiA+PiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlcn4KICAgICAgICAgICAg XCRDQyAtc2hhcmVkIFwkcGljX2ZsYWcgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVy X2ZsYWdzIFwkd2wtc29uYW1lIFwkd2xcJHNvbmFtZSBcJHdsLXZlcnNpb24tc2NyaXB0IFwk d2xcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlciAtbyBcJGxpYiIKCiMgQ29tbWFuZHMg dXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWls ZGluZwojIGEgc2hhcmVkIGFyY2hpdmUuCm1vZHVsZV9jbWRzPSIiCm1vZHVsZV9leHBzeW1f Y21kcz0iIgoKIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3Qu CndpdGhfZ251X2xkPSJ5ZXMiCgojIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmll cyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgphbGxvd191bmRlZmluZWRf ZmxhZz0iIgoKIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCm5v X3VuZGVmaW5lZF9mbGFnPSIiCgojIEZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEg YmluYXJ5IGR1cmluZyBsaW5raW5nLgojIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRp ciBkb2VzIG5vdCBleGlzdApoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSJcJHdsLXJwYXRo IFwkd2xcJGxpYmRpciIKCiMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZs YWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRv cj0iIgoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBk dXJpbmcgbGlua2luZyBoYXJkY29kZXMKIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFy eS4KaGFyZGNvZGVfZGlyZWN0PW5vCgojIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGli TkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwojIERJUiBpbnRvIHRo ZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5j eSBpcwojICJhYnNvbHV0ZSIsaS5lLiBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5n ICRzaGxpYnBhdGhfdmFyIGlmIHRoZQojIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgpoYXJkY29k ZV9kaXJlY3RfYWJzb2x1dGU9bm8KCiMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJ UiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSByZXN1bHRp bmcgYmluYXJ5LgpoYXJkY29kZV9taW51c19MPW5vCgojIFNldCB0byAieWVzIiBpZiB1c2lu ZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCiMgaW50 byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBv cnRlZAoKIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRv bWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vi c2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAojIGFnYWluc3QgaXQu CmhhcmRjb2RlX2F1dG9tYXRpYz1ubwoKIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1 bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcwojIHRvIHJ1bnRpbWUgcGF0aCBs aXN0Lgppbmhlcml0X3JwYXRoPW5vCgojIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBw cm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KbGlua19hbGxf ZGVwbGlicz11bmtub3duCgojIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFy ZSByZXF1aXJlZC4KYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCgojIFRoZSBjb21tYW5kcyB0 byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCmV4cG9ydF9zeW1ib2xzX2NtZHM9IlwkTk0gXCRs aWJvYmpzIFwkY29udmVuaWVuY2UgfCBcJGdsb2JhbF9zeW1ib2xfcGlwZSB8IFwkU0VEICdz Ly4qIC8vJyB8IHNvcnQgfCB1bmlxID4gXCRleHBvcnRfc3ltYm9scyIKCiMgU3ltYm9scyB0 aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KZXhj bHVkZV9leHBzeW1zPSJfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLioi CgojIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KaW5jbHVkZV9leHBz eW1zPSIiCgojIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdh aW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgpwcmVsaW5rX2NtZHM9IiIKCiMgQ29t bWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KcG9zdGxp bmtfY21kcz0iIgoKIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMu CmZpbGVfbGlzdF9zcGVjPSIiCgojIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5 IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgpoYXJkY29kZV9hY3Rpb249aW1tZWRpYXRlCgoj IFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRp bmcgYSBzaGFyZWQgbGlicmFyeS4KY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSIiCgojIERl cGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5n IGxpbmtlZCB0bwojIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgpwcmVkZXBfb2JqZWN0cz0i Igpwb3N0ZGVwX29iamVjdHM9IiIKcHJlZGVwcz0iIgpwb3N0ZGVwcz0iIgoKIyBUaGUgbGli cmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4g bGlua2luZwojIGEgc2hhcmVkIGxpYnJhcnkuCmNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0i IgoKIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCgoKIyAjIyMgQkVHSU4gRlVOQ1RJT05TIFNI QVJFRCBXSVRIIENPTkZJR1VSRQoKIyBmdW5jX211bmdlX3BhdGhfbGlzdCBWQVJJQUJMRSBQ QVRICiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBWQVJJQUJMRSBp cyBuYW1lIG9mIHZhcmlhYmxlIGNvbnRhaW5pbmcgX3NwYWNlXyBzZXBhcmF0ZWQgbGlzdCBv ZgojIGRpcmVjdG9yaWVzIHRvIGJlIG11bmdlZCBieSB0aGUgY29udGVudHMgb2YgUEFUSCwg d2hpY2ggaXMgc3RyaW5nCiMgaGF2aW5nIGEgZm9ybWF0OgojICJESVJbOkRJUl06IgojICAg ICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRQoj ICI6RElSWzpESVJdIgojICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIGFwcGVu ZGVkIHRvIFZBUklBQkxFCiMgIkRJUlBbOkRJUlBdOjpbRElSQTpdRElSQSIKIyAgICAgICBz dHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQg c3RyaW5nCiMgICAgICAgIkRJUkFbIERJUkFdIiB3aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklB QkxFCiMgIkRJUls6RElSXSIKIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5 ICJESVJbIERJUl0iCmZ1bmNfbXVuZ2VfcGF0aF9saXN0ICgpCnsKICAgIGNhc2UgeCQyIGlu CiAgICB4KQogICAgICAgIDs7CiAgICAqOikKICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQy IHwgJFNFRCAncy86LyAvZydgIFwkJDFcIgogICAgICAgIDs7CiAgICB4OiopCiAgICAgICAg ZXZhbCAkMT1cIlwkJDEgYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgXCIKICAgICAgICA7 OwogICAgKjo6KikKICAgICAgICBldmFsICQxPVwiXCQkMVwgYCRFQ0hPICQyIHwgJFNFRCAt ZSAncy8uKjo6Ly8nIC1lICdzLzovIC9nJ2BcIgogICAgICAgIGV2YWwgJDE9XCJgJEVDSE8g JDIgfCAkU0VEIC1lICdzLzo6LiovLycgLWUgJ3MvOi8gL2cnYFwgXCQkMVwiCiAgICAgICAg OzsKICAgICopCiAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cn YFwiCiAgICAgICAgOzsKICAgIGVzYWMKfQoKCiMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAg U2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgpmdW5jX2Nj X2Jhc2VuYW1lICgpCnsKICAgIGZvciBjY190ZW1wIGluICQqIiI7IGRvCiAgICAgIGNhc2Ug JGNjX3RlbXAgaW4KICAgICAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8 ICpbXFwvXWNjYWNoZSApIDs7CiAgICAgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVy aWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKICAgICAgICBcLSopIDs7CiAgICAgICAgKikgYnJl YWs7OwogICAgICBlc2FjCiAgICBkb25lCiAgICBmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdD1g JEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAK fQoKCiMgIyMjIEVORCBGVU5DVElPTlMgU0hBUkVEIFdJVEggQ09ORklHVVJFCgojISAvdXNy L2Jpbi9lbnYgc2gKIyMgRE8gTk9UIEVESVQgLSBUaGlzIGZpbGUgZ2VuZXJhdGVkIGZyb20g Li9idWlsZC1hdXgvbHRtYWluLmluCiMjICAgICAgICAgICAgICAgYnkgaW5saW5lLXNvdXJj ZSB2MjAxOS0wMi0xOS4xNQoKIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi41LjAuODEtM2Nm NTIKIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2 aWNlcy4KIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQu ZWR1PiwgMTk5NgoKIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSwgMjAyMS0yMDI0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2Vl IHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiMgd2Fy cmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCgojIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQoj IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwoj IEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLAojIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3Jh bSBvciBsaWJyYXJ5IHRoYXQKIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1h eSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJt cyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KIwojIEdOVSBM aWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dAojIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgoK UFJPR1JBTT1saWJ0b29sClBBQ0tBR0U9bGlidG9vbApWRVJTSU9OPTIuNS4wLjgxLTNjZjUy CnBhY2thZ2VfcmV2aXNpb249Mi41LjAuODEKCgojIyAtLS0tLS0gIyMKIyMgVXNhZ2UuICMj CiMjIC0tLS0tLSAjIwoKIyBSdW4gJy4vbGlidG9vbCAtLWhlbHAnIGZvciBoZWxwIHdpdGgg dXNpbmcgdGhpcyBzY3JpcHQgZnJvbSB0aGUKIyBjb21tYW5kIGxpbmUuCgoKIyMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwojIyBVc2VyIG92ZXJyaWRhYmxlIGNvbW1h bmQgcGF0aHMuICMjCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKCiMg QWZ0ZXIgY29uZmlndXJlIGNvbXBsZXRlcywgaXQgaGFzIGEgYmV0dGVyIGlkZWEgb2Ygc29t ZSBvZiB0aGUKIyBzaGVsbCB0b29scyB3ZSBuZWVkIHRoYW4gdGhlIGRlZmF1bHRzIHVzZWQg YnkgdGhlIGZ1bmN0aW9ucyBzaGFyZWQKIyB3aXRoIGJvb3RzdHJhcCwgc28gc2V0IHRob3Nl IGhlcmUgd2hlcmUgdGhleSBjYW4gc3RpbGwgYmUgb3Zlci0KIyByaWRkZW4gYnkgdGhlIHVz ZXIsIGJ1dCBvdGhlcndpc2UgdGFrZSBwcmVjZWRlbmNlLgoKOiAke0FVVE9DT05GPSJhdXRv Y29uZiJ9CjogJHtBVVRPTUFLRT0iYXV0b21ha2UifQoKCiMjIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICMjCiMjIFNvdXJjZSBleHRlcm5hbCBsaWJyYXJpZXMuICMjCiMjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCgojIE11Y2ggb2Ygb3VyIGxvdy1sZXZlbCBmdW5j dGlvbmFsaXR5IG5lZWRzIHRvIGJlIHNvdXJjZWQgZnJvbSBleHRlcm5hbAojIGxpYnJhcmll cywgd2hpY2ggYXJlIGluc3RhbGxlZCB0byAkcGtnYXV4ZGlyLgoKIyBTZXQgYSB2ZXJzaW9u IHN0cmluZyBmb3IgdGhpcyBzY3JpcHQuCnNjcmlwdHZlcnNpb249MjAxOS0wMi0xOS4xNTsg IyBVVEMKCiMgR2VuZXJhbCBzaGVsbCBzY3JpcHQgYm9pbGVyIHBsYXRlLCBhbmQgaGVscGVy IGZ1bmN0aW9ucy4KIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAoKIyBUaGlz IGlzIGZyZWUgc29mdHdhcmUuICBUaGVyZSBpcyBOTyB3YXJyYW50eTsgbm90IGV2ZW4gZm9y CiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LgojCiMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTksIDIwMjEsIDIwMjMtMjAyNCBCb290c3Ry YXAgQXV0aG9ycwojCiMgVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBNSVQgbGljZW5zZQojIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vu c2VzL01JVD4sIGFuZCBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyCiMgPGh0dHBzOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sPi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBvZgoj IHRoZXNlIGxpY2Vuc2VzIHdoZW4gdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhpcyBzb2Z0 d2FyZSBvciBhbnkgb2YKIyB0aGUgZmlsZXMgd2l0aGluIGl0LiAgU2VlIHRoZSBVUkxzIGFi b3ZlLCBvciB0aGUgZmlsZSBgTElDRU5TRWAKIyBpbmNsdWRlZCBpbiB0aGUgQm9vdHN0cmFw IGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGZ1bGwgbGljZW5zZSB0ZXh0cy4KCiMgUGxlYXNlIHJl cG9ydCBidWdzIG9yIHByb3Bvc2UgcGF0Y2hlcyB0bzoKIyA8aHR0cHM6Ly9naXRodWIuY29t L2dudWxpYi1tb2R1bGVzL2Jvb3RzdHJhcC9pc3N1ZXM+CgoKIyMgLS0tLS0tICMjCiMjIFVz YWdlLiAjIwojIyAtLS0tLS0gIyMKCiMgRXZhbHVhdGUgdGhpcyBmaWxlIG5lYXIgdGhlIHRv cCBvZiB5b3VyIHNjcmlwdCB0byBnYWluIGFjY2VzcyB0bwojIHRoZSBmdW5jdGlvbnMgYW5k IHZhcmlhYmxlcyBkZWZpbmVkIGhlcmU6CiMKIyAgIC4gYGVjaG8gIiQwIiB8ICR7U0VELXNl ZH0gJ3N8W14vXSokfHwnYC9idWlsZC1hdXgvZnVuY2xpYi5zaAojCiMgSWYgeW91IG5lZWQg dG8gb3ZlcnJpZGUgYW55IG9mIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IHZhcmlhYmxlCiMg c2V0dGluZ3MsIGRvIHRoYXQgYmVmb3JlIGV2YWx1YXRpbmcgdGhpcyBmaWxlLgoKCiMjIC0t LS0tLS0tLS0tLS0tLS0tLS0tICMjCiMjIFNoZWxsIG5vcm1hbGlzYXRpb24uICMjCiMjIC0t LS0tLS0tLS0tLS0tLS0tLS0tICMjCgojIFNvbWUgc2hlbGxzIG5lZWQgYSBsaXR0bGUgaGVs cCB0byBiZSBhcyBCb3VybmUgY29tcGF0aWJsZSBhcyBwb3NzaWJsZS4KIyBCZWZvcmUgZG9p bmcgYW55dGhpbmcgZWxzZSwgbWFrZSBzdXJlIGFsbCB0aGF0IGhlbHAgaGFzIGJlZW4gcHJv dmlkZWQhCgpEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCmlmIHRl c3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwg Mj4mMTsgdGhlbiA6CiAgZW11bGF0ZSBzaAogIE5VTExDTUQ9OgogICMgUHJlLTQuMiB2ZXJz aW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICMg aXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgYWxp YXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKZWxzZQog IGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXgg OzsgZXNhYwpmaQoKIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIGlu IGNhc2UgdGhleSBhcmUgcmVxdWlyZWQgbGF0ZXIuCl9HX3VzZXJfbG9jYWxlPQpfR19zYWZl X2xvY2FsZT0KZm9yIF9HX3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBM Q19DT0xMQVRFIExDX01FU1NBR0VTCmRvCiAgZXZhbCAiaWYgdGVzdCBzZXQgPSBcIlwkeyRf R192YXIrc2V0fVwiOyB0aGVuCiAgICAgICAgICBzYXZlXyRfR192YXI9XCQkX0dfdmFyCiAg ICAgICAgICAkX0dfdmFyPUMKCSAgZXhwb3J0ICRfR192YXIKCSAgX0dfdXNlcl9sb2NhbGU9 XCIkX0dfdmFyPVxcXCRzYXZlX1wkX0dfdmFyOyBcJF9HX3VzZXJfbG9jYWxlXCIKCSAgX0df c2FmZV9sb2NhbGU9XCIkX0dfdmFyPUM7IFwkX0dfc2FmZV9sb2NhbGVcIgoJZmkiCmRvbmUK IyBUaGVzZSBOTFMgdmFycyBhcmUgc2V0IHVuY29uZGl0aW9uYWxseSAoYm9vdHN0cmFwIGlz c3VlICMyNCkuICBVbnNldCB0aG9zZQojIGluIGNhc2UgdGhlIGVudmlyb25tZW50IHJlc2V0 IGlzIG5lZWRlZCBsYXRlciBhbmQgdGhlICRzYXZlXyogdmFyaWFudCBpcyBub3QKIyBkZWZp bmVkIChzZWUgdGhlIGNvZGUgYWJvdmUpLgpMQ19BTEw9QwpMQU5HVUFHRT1DCmV4cG9ydCBM QU5HVUFHRSBMQ19BTEwKCiMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0 CnNwPScgJwpubD0nCicKSUZTPSIkc3AJJG5sIgoKIyBUaGVyZSBhcmUgYXBwYXJlbnRseSBz b21lIHN5c3RlbXMgdGhhdCB1c2UgJzsnIGFzIGEgUEFUSCBzZXBhcmF0b3IhCmlmIHRlc3Qg IiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCiAgUEFUSF9TRVBBUkFUT1I9 OgogIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVs bCAyPiYxICYmIHsKICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMg OikgPi9kZXYvbnVsbCAyPiYxIHx8CiAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JwogIH0KZmkK CgojIGZ1bmNfdW5zZXQgVkFSCiMgLS0tLS0tLS0tLS0tLS0KIyBQb3J0YWJseSB1bnNldCBW QVIuCiMgSW4gc29tZSBzaGVsbHMsIGFuICd1bnNldCBWQVInIHN0YXRlbWVudCBsZWF2ZXMg YSBub24temVybyByZXR1cm4KIyBzdGF0dXMgaWYgVkFSIGlzIGFscmVhZHkgdW5zZXQsIHdo aWNoIG1pZ2h0IGJlIHByb2JsZW1hdGljIGlmIHRoZQojIHN0YXRlbWVudCBpcyB1c2VkIGF0 IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiAodGh1cyBwb2lzb25pbmcgaXRzIHJldHVybgojIHZh bHVlKSBvciB3aGVuICdzZXQgLWUnIGlzIGFjdGl2ZSAoY2F1c2luZyBldmVuIGEgc3B1cmlv dXMgYWJvcnQgb2YKIyB0aGUgc2NyaXB0IGluIHRoaXMgY2FzZSkuCmZ1bmNfdW5zZXQgKCkK ewogICAgeyBldmFsICQxPTsgKGV2YWwgdW5zZXQgJDEpID4vZGV2L251bGwgMj4mMSAmJiBl dmFsIHVuc2V0ICQxIHx8IDogOyB9Cn0KCgojIE1ha2Ugc3VyZSBDRFBBVEggZG9lc24ndCBj YXVzZSBgY2RgIGNvbW1hbmRzIHRvIG91dHB1dCB0aGUgdGFyZ2V0IGRpci4KZnVuY191bnNl dCBDRFBBVEgKCiMgTWFrZSBzdXJlICR7LEUsRn1HUkVQIGJlaGF2ZSBzYW5lbHkuCmZ1bmNf dW5zZXQgR1JFUF9PUFRJT05TCgoKIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwoj IyBMb2NhdGUgY29tbWFuZCB1dGlsaXRpZXMuICMjCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gIyMKCgojIGZ1bmNfZXhlY3V0YWJsZV9wIEZJTEUKIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiMgQ2hlY2sgdGhhdCBGSUxFIGlzIGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxl LgpmdW5jX2V4ZWN1dGFibGVfcCAoKQp7CiAgICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAi JDEiCn0KCgojIGZ1bmNfcGF0aF9wcm9ncyBQUk9HU19MSVNUIENIRUNLX0ZVTkMgW1BBVEhd CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBTZWFy Y2ggZm9yIGVpdGhlciBhIHByb2dyYW0gdGhhdCByZXNwb25kcyB0byAtLXZlcnNpb24gd2l0 aCBvdXRwdXQKIyBjb250YWluaW5nICJHTlUiLCBvciBlbHNlIHJldHVybmVkIGJ5IENIRUNL X0ZVTkMgb3RoZXJ3aXNlLCBieQojIHRyeWluZyBhbGwgdGhlIGRpcmVjdG9yaWVzIGluIFBB VEggd2l0aCBlYWNoIG9mIHRoZSBlbGVtZW50cyBvZgojIFBST0dTX0xJU1QuCiMKIyBDSEVD S19GVU5DIHNob3VsZCBhY2NlcHQgdGhlIHBhdGggdG8gYSBjYW5kaWRhdGUgcHJvZ3JhbSwg YW5kCiMgc2V0ICRmdW5jX2NoZWNrX3Byb2dfcmVzdWx0IGlmIGl0IHRydW5jYXRlcyBpdHMg b3V0cHV0IGxlc3MgdGhhbgojICRfR19wYXRoX3Byb2dfbWF4IGNoYXJhY3RlcnMuCmZ1bmNf cGF0aF9wcm9ncyAoKQp7CiAgICBfR19wcm9nc19saXN0PSQxCiAgICBfR19jaGVja19mdW5j PSQyCiAgICBfR19QQVRIPSR7My0iJFBBVEgifQoKICAgIF9HX3BhdGhfcHJvZ19tYXg9MAog ICAgX0dfcGF0aF9wcm9nX2ZvdW5kPWZhbHNlCiAgICBfR19zYXZlX0lGUz0kSUZTOyBJRlM9 JHtQQVRIX1NFUEFSQVRPUi06fQogICAgZm9yIF9HX2RpciBpbiAkX0dfUEFUSDsgZG8KICAg ICAgSUZTPSRfR19zYXZlX0lGUwogICAgICB0ZXN0IC16ICIkX0dfZGlyIiAmJiBfR19kaXI9 LgogICAgICBmb3IgX0dfcHJvZ19uYW1lIGluICRfR19wcm9nc19saXN0OyBkbwogICAgICAg IGZvciBfZXhlZXh0IGluICcnIC5FWEU7IGRvCiAgICAgICAgICBfR19wYXRoX3Byb2c9JF9H X2Rpci8kX0dfcHJvZ19uYW1lJF9leGVleHQKICAgICAgICAgIGZ1bmNfZXhlY3V0YWJsZV9w ICIkX0dfcGF0aF9wcm9nIiB8fCBjb250aW51ZQogICAgICAgICAgY2FzZSBgIiRfR19wYXRo X3Byb2ciIC0tdmVyc2lvbiAyPiYxYCBpbgogICAgICAgICAgICAqR05VKikgZnVuY19wYXRo X3Byb2dzX3Jlc3VsdD0kX0dfcGF0aF9wcm9nIF9HX3BhdGhfcHJvZ19mb3VuZD06IDs7CiAg ICAgICAgICAgICopICAgICAkX0dfY2hlY2tfZnVuYyAkX0dfcGF0aF9wcm9nCgkJICAgZnVu Y19wYXRoX3Byb2dzX3Jlc3VsdD0kZnVuY19jaGVja19wcm9nX3Jlc3VsdAoJCSAgIDs7CiAg ICAgICAgICBlc2FjCiAgICAgICAgICAkX0dfcGF0aF9wcm9nX2ZvdW5kICYmIGJyZWFrIDMK ICAgICAgICBkb25lCiAgICAgIGRvbmUKICAgIGRvbmUKICAgIElGUz0kX0dfc2F2ZV9JRlMK ICAgIHRlc3QgLXogIiRmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0IiAmJiB7CiAgICAgIGVjaG8g Im5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgPiYyCiAgICAg IGV4aXQgMQogICAgfQp9CgoKIyBXZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoZSBmdW5j dGlvbnMgaW4gdGhpcyBmaWxlIGJlZm9yZSBjb25maWd1cmUKIyBoYXMgZmlndXJlZCBvdXQg d2hlcmUgdGhlIGJlc3QgYmluYXJpZXMgYXJlIGtlcHQsIHdoaWNoIG1lYW5zIHdlIGhhdmUK IyB0byBzZWFyY2ggZm9yIHRoZW0gb3Vyc2VsdmVzIC0gZXhjZXB0IHdoZW4gdGhlIHJlc3Vs dHMgYXJlIGFscmVhZHkgc2V0CiMgd2hlcmUgd2Ugc2tpcCB0aGUgc2VhcmNoZXMuCgojIFVu bGVzcyB0aGUgdXNlciBvdmVycmlkZXMgYnkgc2V0dGluZyBTRUQsIHNlYXJjaCB0aGUgcGF0 aCBmb3IgZWl0aGVyIEdOVQojIHNlZCwgb3IgdGhlIHNlZCB0aGF0IHRydW5jYXRlcyBpdHMg b3V0cHV0IHRoZSBsZWFzdC4KdGVzdCAteiAiJFNFRCIgJiYgewogIF9HX3NlZF9zY3JpcHQ9 cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmIvCiAgZm9yIF9HX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KICAg IF9HX3NlZF9zY3JpcHQ9JF9HX3NlZF9zY3JpcHQkbmwkX0dfc2VkX3NjcmlwdAogIGRvbmUK ICBlY2hvICIkX0dfc2VkX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVz dC5zZWQKICBfR19zZWRfc2NyaXB0PQoKICBmdW5jX2NoZWNrX3Byb2dfc2VkICgpCiAgewog ICAgX0dfcGF0aF9wcm9nPSQxCgogICAgX0dfY291bnQ9MAogICAgcHJpbnRmIDAxMjM0NTY3 ODkgPmNvbmZ0ZXN0LmluCiAgICB3aGlsZSA6CiAgICBkbwogICAgICBjYXQgY29uZnRlc3Qu aW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAogICAgICBtdiBjb25mdGVzdC50bXAgY29u ZnRlc3QuaW4KICAgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKICAgICAgZWNobyAn JyA+PiBjb25mdGVzdC5ubAogICAgICAiJF9HX3BhdGhfcHJvZyIgLWYgY29uZnRlc3Quc2Vk IDxjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsIHx8IGJyZWFrCiAgICAg IGRpZmYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sID4vZGV2L251bGwgMj4mMSB8fCBicmVh awogICAgICBfR19jb3VudD1gZXhwciAkX0dfY291bnQgKyAxYAogICAgICBpZiB0ZXN0ICIk X0dfY291bnQiIC1ndCAiJF9HX3BhdGhfcHJvZ19tYXgiOyB0aGVuCiAgICAgICAgIyBCZXN0 IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25l CiAgICAgICAgZnVuY19jaGVja19wcm9nX3Jlc3VsdD0kX0dfcGF0aF9wcm9nCiAgICAgICAg X0dfcGF0aF9wcm9nX21heD0kX0dfY291bnQKICAgICAgZmkKICAgICAgIyAxMCooMl4xMCkg Y2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAogICAgICB0ZXN0IDEwIC1s dCAiJF9HX2NvdW50IiAmJiBicmVhawogICAgZG9uZQogICAgcm0gLWYgY29uZnRlc3QuaW4g Y29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dAogIH0KCiAgZnVuY19wYXRo X3Byb2dzICJzZWQgZ3NlZCIgZnVuY19jaGVja19wcm9nX3NlZCAiJFBBVEg6L3Vzci94cGc0 L2JpbiIKICBybSAtZiBjb25mdGVzdC5zZWQKICBTRUQ9JGZ1bmNfcGF0aF9wcm9nc19yZXN1 bHQKfQoKCiMgVW5sZXNzIHRoZSB1c2VyIG92ZXJyaWRlcyBieSBzZXR0aW5nIEdSRVAsIHNl YXJjaCB0aGUgcGF0aCBmb3IgZWl0aGVyIEdOVQojIGdyZXAsIG9yIHRoZSBncmVwIHRoYXQg dHJ1bmNhdGVzIGl0cyBvdXRwdXQgdGhlIGxlYXN0Lgp0ZXN0IC16ICIkR1JFUCIgJiYgewog IGZ1bmNfY2hlY2tfcHJvZ19ncmVwICgpCiAgewogICAgX0dfcGF0aF9wcm9nPSQxCgogICAg X0dfY291bnQ9MAogICAgX0dfcGF0aF9wcm9nX21heD0wCiAgICBwcmludGYgMDEyMzQ1Njc4 OSA+Y29uZnRlc3QuaW4KICAgIHdoaWxlIDoKICAgIGRvCiAgICAgIGNhdCBjb25mdGVzdC5p biBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCiAgICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25m dGVzdC5pbgogICAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAogICAgICBlY2hvICdH UkVQJyA+PiBjb25mdGVzdC5ubAogICAgICAiJF9HX3BhdGhfcHJvZyIgLWUgJ0dSRVAkJyAt ZSAnLShjYW5ub3QgbWF0Y2gpLScgPGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgMj4vZGV2 L251bGwgfHwgYnJlYWsKICAgICAgZGlmZiBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgPi9k ZXYvbnVsbCAyPiYxIHx8IGJyZWFrCiAgICAgIF9HX2NvdW50PWBleHByICRfR19jb3VudCAr IDFgCiAgICAgIGlmIHRlc3QgIiRfR19jb3VudCIgLWd0ICIkX0dfcGF0aF9wcm9nX21heCI7 IHRoZW4KICAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29r aW5nIGZvciBhIGJldHRlciBvbmUKICAgICAgICBmdW5jX2NoZWNrX3Byb2dfcmVzdWx0PSRf R19wYXRoX3Byb2cKICAgICAgICBfR19wYXRoX3Byb2dfbWF4PSRfR19jb3VudAogICAgICBm aQogICAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5v dWdoCiAgICAgIHRlc3QgMTAgLWx0ICIkX0dfY291bnQiICYmIGJyZWFrCiAgICBkb25lCiAg ICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qu b3V0CiAgfQoKICBmdW5jX3BhdGhfcHJvZ3MgImdyZXAgZ2dyZXAiIGZ1bmNfY2hlY2tfcHJv Z19ncmVwICIkUEFUSDovdXNyL3hwZzQvYmluIgogIEdSRVA9JGZ1bmNfcGF0aF9wcm9nc19y ZXN1bHQKfQoKCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIyMgVXNl ciBvdmVycmlkYWJsZSBjb21tYW5kIHBhdGhzLiAjIwojIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICMjCgojIEFsbCB1cHBlcmNhc2UgdmFyaWFibGUgbmFtZXMgYXJlIHVz ZWQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoZXNlCiMgdmFyaWFibGVzIGNhbiBi ZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyIGJlZm9yZSBjYWxsaW5nIGEgc2NyaXB0IHRoYXQK IyB1c2VzIHRoZW0gaWYgYSBzdWl0YWJsZSBjb21tYW5kIG9mIHRoYXQgbmFtZSBpcyBub3Qg YWxyZWFkeSBhdmFpbGFibGUKIyBpbiB0aGUgY29tbWFuZCBzZWFyY2ggUEFUSC4KCjogJHtD UD0iY3AgLWYifQo6ICR7RUNITz0icHJpbnRmICVzXG4ifQo6ICR7RUdSRVA9IiRHUkVQIC1F In0KOiAke0ZHUkVQPSIkR1JFUCAtRiJ9CjogJHtMTl9TPSJsbiAtcyJ9CjogJHtNQUtFPSJt YWtlIn0KOiAke01LRElSPSJta2RpciJ9CjogJHtNVj0ibXYgLWYifQo6ICR7Uk09InJtIC1m In0KOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9CgoKIyMgLS0tLS0tLS0t LS0tLS0tLS0tLS0gIyMKIyMgVXNlZnVsIHNlZCBzbmlwcGV0cy4gIyMKIyMgLS0tLS0tLS0t LS0tLS0tLS0tLS0gIyMKCnNlZF9kaXJuYW1lPSdzfC9bXi9dKiR8fCcKc2VkX2Jhc2VuYW1l PSdzfF4uKi98fCcKCiMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVz dCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFy ZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4Kc2VkX3F1b3Rl X3N1YnN0PSdzfFwoW2AiJFxcXVwpfFxcXDF8ZycKCiMgU2FtZSBhcyBhYm92ZSwgYnV0IGRv IG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgpzZWRfZG91YmxlX3F1b3RlX3N1YnN0 PSdzL1woWyJgXFxdXCkvXFxcMS9nJwoKIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMg YSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKIyBzdHJpbmcgbGl0ZXJh bGx5LgpzZWRfbWFrZV9saXRlcmFsX3JlZ2V4PSdzfFtdLlteJFxcKlwvXXxcXCZ8ZycKCiMg U2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRo CiMgdGhhdCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFp bnMKIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRp b24uCnNlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxc fFxcXFx8ZycKCiMgUmUtJ1wnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBz ZWRfZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQKIyB3ZXJlICdcJy1lZCBpbiBpbnB1dCB0byB0 aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgJ1wnIHByZWNlZGVkIGEKIyAnJCcgaW4g aW5wdXQgdG8gc2VkX2RvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3Rl ZCBmcm9tCiMgZXhwYW5zaW9uLiAgU2luY2UgZWFjaCBpbnB1dCAnXCcgaXMgbm93IHR3byAn XCdzLCBsb29rIGZvciBhbnkgbnVtYmVyCiMgb2YgcnVucyBvZiBmb3VyICdcJ3MgZm9sbG93 ZWQgYnkgdHdvICdcJ3MgYW5kIHRoZW4gYSAnJCcuICAnXCcgdGhhdCAnJCcuCl9HX2JzPSdc XCcKX0dfYnMyPSdcXFxcJwpfR19iczQ9J1xcXFxcXFxcJwpfR19kb2xsYXI9J1wkJwpzZWRf ZG91YmxlX2JhY2tzbGFzaD0iXAogIHMvJF9HX2JzNC8mXFwKL2cKICBzL14kX0dfYnMyJF9H X2RvbGxhci8kX0dfYnMmLwogIHMvXFwoW14kX0dfYnNdXFwpJF9HX2JzMiRfR19kb2xsYXIv XFwxJF9HX2JzMiRfR19icyRfR19kb2xsYXIvZwogIHMvXG4vL2ciCgojIHJlcXVpcmVfY2hl Y2tfaWZzX2JhY2tzbGFzaAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENoZWNr IGlmIHdlIGNhbiB1c2UgYmFja3NsYXNoIGFzIElGUz0nXCcgc2VwYXJhdG9yLCBhbmQgc2V0 CiMgJGNoZWNrX2lmc19iYWNrc2hsYXNoX2Jyb2tlbiB0byAnOicgb3IgJ2ZhbHNlJy4KcmVx dWlyZV9jaGVja19pZnNfYmFja3NsYXNoPWZ1bmNfcmVxdWlyZV9jaGVja19pZnNfYmFja3Ns YXNoCmZ1bmNfcmVxdWlyZV9jaGVja19pZnNfYmFja3NsYXNoICgpCnsKICBfR19zYXZlX0lG Uz0kSUZTCiAgSUZTPSdcJwogIF9HX2NoZWNrX2lmc19iYWNrc2hsYXNoPSdhXFxiJwogIGZv ciBfR19pIGluICRfR19jaGVja19pZnNfYmFja3NobGFzaAogIGRvCiAgY2FzZSAkX0dfaSBp bgogIGEpCiAgICBjaGVja19pZnNfYmFja3NobGFzaF9icm9rZW49ZmFsc2UKICAgIDs7CiAg JycpCiAgICBicmVhawogICAgOzsKICAqKQogICAgY2hlY2tfaWZzX2JhY2tzaGxhc2hfYnJv a2VuPToKICAgIGJyZWFrCiAgICA7OwogIGVzYWMKICBkb25lCiAgSUZTPSRfR19zYXZlX0lG UwogIHJlcXVpcmVfY2hlY2tfaWZzX2JhY2tzbGFzaD06Cn0KCgojIyAtLS0tLS0tLS0tLS0t LS0tLSAjIwojIyBHbG9iYWwgdmFyaWFibGVzLiAjIwojIyAtLS0tLS0tLS0tLS0tLS0tLSAj IwoKIyBFeGNlcHQgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGVzIGV4cGxpY2l0bHkgbGlzdGVk IGJlbG93LCB0aGUgZm9sbG93aW5nCiMgZnVuY3Rpb25zIGluIHRoZSAnXmZ1bmNfJyBuYW1l c3BhY2UsIGFuZCB0aGUgJ15yZXF1aXJlXycgbmFtZXNwYWNlCiMgdmFyaWFibGVzIGluaXRp YWxpc2VkIGluIHRoZSAnUmVzb3VyY2UgbWFuYWdlbWVudCcgc2VjdGlvbiwgc291cmNpbmcK IyB0aGlzIGZpbGUgd2lsbCBub3QgcG9sbHV0ZSB5b3VyIGdsb2JhbCBuYW1lc3BhY2Ugd2l0 aCBhbnl0aGluZwojIGVsc2UuIFRoZXJlJ3Mgbm8gcG9ydGFibGUgd2F5IHRvIHNjb3BlIHZh cmlhYmxlcyBpbiBCb3VybmUgc2hlbGwKIyB0aG91Z2gsIHNvIGFjdHVhbGx5IHJ1bm5pbmcg dGhlc2UgZnVuY3Rpb25zIHdpbGwgc29tZXRpbWVzIHBsYWNlCiMgcmVzdWx0cyBpbnRvIGEg dmFyaWFibGUgbmFtZWQgYWZ0ZXIgdGhlIGZ1bmN0aW9uLCBhbmQgb2Z0ZW4gdXNlCiMgdGVt cG9yYXJ5IHZhcmlhYmxlcyBpbiB0aGUgJ15fR18nIG5hbWVzcGFjZS4gSWYgeW91IGFyZSBj YXJlZnVsIHRvCiMgYXZvaWQgdXNpbmcgdGhvc2UgbmFtZXNwYWNlcyBjYXN1YWxseSBpbiB5 b3VyIHNvdXJjaW5nIHNjcmlwdCwgdGhpbmdzCiMgc2hvdWxkIGNvbnRpbnVlIHRvIHdvcmsg YXMgeW91IGV4cGVjdC4gQW5kLCBvZiBjb3Vyc2UsIHlvdSBjYW4gZnJlZWx5CiMgb3Zlcndy aXRlIGFueSBvZiB0aGUgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBkZWZpbmVkIGhlcmUgYmVm b3JlCiMgY2FsbGluZyBhbnl0aGluZyB0byBjdXN0b21pemUgdGhlbS4KCkVYSVRfU1VDQ0VT Uz0wCkVYSVRfRkFJTFVSRT0xCkVYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2Vk IHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KRVhJVF9TS0lQPTc3 CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0 b21ha2UuCgojIEFsbG93IG92ZXJyaWRpbmcsIGVnIGFzc3VtaW5nIHRoYXQgeW91IGZvbGxv dyB0aGUgY29udmVudGlvbiBvZgojIHB1dHRpbmcgJyRkZWJ1Z19jbWQnIGF0IHRoZSBzdGFy dCBvZiBhbGwgeW91ciBmdW5jdGlvbnMsIHlvdSBjYW4gZ2V0CiMgYmFzaCB0byBzaG93IGZ1 bmN0aW9uIGNhbGwgdHJhY2Ugd2l0aDoKIwojICAgIGRlYnVnX2NtZD0nZXZhbCBlY2hvICIk e0ZVTkNOQU1FWzBdfSAkKiIgPiYyJyBiYXNoIHlvdXItc2NyaXB0LW5hbWUKZGVidWdfY21k PSR7ZGVidWdfY21kLSI6In0KZXhpdF9jbWQ9OgoKIyBCeSBjb252ZW50aW9uLCBmaW5pc2gg eW91ciBzY3JpcHQgd2l0aDoKIwojICAgIGV4aXQgJGV4aXRfc3RhdHVzCiMKIyBzbyB0aGF0 IHlvdSBjYW4gc2V0IGV4aXRfc3RhdHVzIHRvIG5vbi16ZXJvIGlmIHlvdSB3YW50IHRvIGlu ZGljYXRlCiMgc29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGV4ZWN1dGlvbiB3aXRob3V0 IGFjdHVhbGx5IGJhaWxpbmcgb3V0IGF0CiMgdGhlIHBvaW50IG9mIGZhaWx1cmUuCmV4aXRf c3RhdHVzPSRFWElUX1NVQ0NFU1MKCiMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJp bGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAojIGlzIGtzaCBidXQg d2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1 ZSBvZgojIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAx IChvbmUpLCB0aGUgc3BlY2lhbAojIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4g YSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKIyBmdW5jdGlvbi4KcHJvZ3Bh dGg9JDAKCiMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtLgpwcm9nbmFtZT1gJEVDSE8gIiRw cm9ncGF0aCIgfCRTRUQgIiRzZWRfYmFzZW5hbWUiYAoKIyBNYWtlIHN1cmUgd2UgaGF2ZSBh biBhYnNvbHV0ZSBwcm9ncGF0aCBmb3IgcmVleGVjdXRpb246CmNhc2UgJHByb2dwYXRoIGlu CiAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKICAqW1xcL10qKQogICAgIHByb2dkaXI9YCRF Q0hPICIkcHJvZ3BhdGgiIHwkU0VEICIkc2VkX2Rpcm5hbWUiYAogICAgIHByb2dkaXI9YGNk ICIkcHJvZ2RpciIgJiYgcHdkYAogICAgIHByb2dwYXRoPSRwcm9nZGlyLyRwcm9nbmFtZQog ICAgIDs7CiAgKikKICAgICBfR19JRlM9JElGUwogICAgIElGUz0ke1BBVEhfU0VQQVJBVE9S LTp9CiAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCiAgICAgICBJRlM9JF9HX0lGUwog ICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhawogICAgIGRvbmUK ICAgICBJRlM9JF9HX0lGUwogICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBw d2RgCiAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHByb2duYW1lCiAgICAgOzsKZXNhYwoKCiMj IC0tLS0tLS0tLS0tLS0tLS0tICMjCiMjIFN0YW5kYXJkIG9wdGlvbnMuICMjCiMjIC0tLS0t LS0tLS0tLS0tLS0tICMjCgojIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgdGhlIG9w ZXJhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQKIyBiZWxvdywgYW5kIHNob3VsZCBi ZSBzZXQgYXBwcm9wcmlhdGVseSBkZXBlbmRpbmcgb24gcnVuLXRpbWUgcGFyYS0KIyBtZXRl cnMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCgpvcHRfZHJ5X3J1bj1mYWxzZQpvcHRf cXVpZXQ9ZmFsc2UKb3B0X3ZlcmJvc2U9ZmFsc2UKCiMgQ2F0ZWdvcmllcyAnYWxsJyBhbmQg J25vbmUnIGFyZSBhbHdheXMgYXZhaWxhYmxlLiAgQXBwZW5kIGFueSBvdGhlcnMKIyB5b3Ug d2lsbCBwYXNzIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmdW5jX3dhcm5pbmcgZnJvbSB5 b3VyIG93bgojIGNvZGUuCndhcm5pbmdfY2F0ZWdvcmllcz0KCiMgQnkgZGVmYXVsdCwgZGlz cGxheSB3YXJuaW5ncyBhY2NvcmRpbmcgdG8gJ29wdF93YXJuaW5nX3R5cGVzJy4gIFNldAoj ICd3YXJuaW5nX2Z1bmMnICB0byAnOicgdG8gZWxpZGUgYWxsIHdhcm5pbmdzLCBvciBmdW5j X2ZhdGFsX2Vycm9yIHRvCiMgdHJlYXQgdGhlIG5leHQgZGlzcGxheWVkIHdhcm5pbmcgYXMg YSBmYXRhbCBlcnJvci4Kd2FybmluZ19mdW5jPWZ1bmNfd2Fybl9hbmRfY29udGludWUKCiMg U2V0IHRvICdhbGwnIHRvIGRpc3BsYXkgYWxsIHdhcm5pbmdzLCAnbm9uZScgdG8gc3VwcHJl c3MgYWxsCiMgd2FybmluZ3MsIG9yIGEgc3BhY2UgZGVsaW1pdGVkIGxpc3Qgb2Ygc29tZSBz dWJzZXQgb2YKIyAnd2FybmluZ19jYXRlZ29yaWVzJyB0byBkaXNwbGF5IG9ubHkgdGhlIGxp c3RlZCB3YXJuaW5ncy4Kb3B0X3dhcm5pbmdfdHlwZXM9YWxsCgoKIyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0gIyMKIyMgUmVzb3VyY2UgbWFuYWdlbWVudC4gIyMKIyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0gIyMKCiMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBm dW5jdGlvbnMgdGhhdCBlYWNoIGVuc3VyZSBhCiMgcGFydGljdWxhciByZXNvdXJjZSAoYSBm aWxlLCBvciBhIG5vbi1lbXB0eSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvcgojIGV4YW1w bGUpIGlzIGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJvcHJpYXRlIHRvIGV4dHJhY3QgZGVmYXVs dCB2YWx1ZXMKIyBmcm9tIHBlcnRpbmVudCBwYWNrYWdlIGZpbGVzLiBDYWxsIHRoZW0gdXNp bmcgdGhlaXIgYXNzb2NpYXRlZAojICdyZXF1aXJlXyonIHZhcmlhYmxlIHRvIGVuc3VyZSB0 aGF0IHRoZXkgYXJlIGV4ZWN1dGVkLCBhdCBtb3N0LCBvbmNlLgojCiMgSXQncyBlbnRpcmVs eSBkZWxpYmVyYXRlIHRoYXQgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgY2FuIHNldAojIHZh cmlhYmxlcyB0aGF0IGRvbid0IG9iZXkgdGhlIG5hbWVzcGFjZSBsaW1pdGF0aW9ucyBvYmV5 ZWQgYnkgdGhlIHJlc3QKIyBvZiB0aGlzIGZpbGUsIGluIG9yZGVyIHRoYXQgdGhhdCB0aGV5 IGJlIGFzIHVzZWZ1bCBhcyBwb3NzaWJsZSB0bwojIGNhbGxlcnMuCgoKIyByZXF1aXJlX3Rl cm1fY29sb3JzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFsbG93IGRpc3BsYXkgb2YgYm9s ZCB0ZXh0IG9uIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgaXQuCnJlcXVpcmVfdGVybV9jb2xv cnM9ZnVuY19yZXF1aXJlX3Rlcm1fY29sb3JzCmZ1bmNfcmVxdWlyZV90ZXJtX2NvbG9ycyAo KQp7CiAgICAkZGVidWdfY21kCgogICAgdGVzdCAtdCAxICYmIHsKICAgICAgIyBDT0xPUlRF Uk0gYW5kIFVTRV9BTlNJX0NPTE9SUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGFrZQogICAg ICAjIHByZWNlZGVuY2UsIGJlY2F1c2UgbW9zdCB0ZXJtaW5mbyBkYXRhYmFzZXMgbmVnbGVj dCB0byBkZXNjcmliZQogICAgICAjIHdoZXRoZXIgY29sb3Igc2VxdWVuY2VzIGFyZSBzdXBw b3J0ZWQuCiAgICAgIHRlc3QgLW4gIiR7Q09MT1JURVJNK3NldH0iICYmIDogJHtVU0VfQU5T SV9DT0xPUlM9IjEifQoKICAgICAgaWYgdGVzdCAxID0gIiRVU0VfQU5TSV9DT0xPUlMiOyB0 aGVuCiAgICAgICAgIyBTdGFuZGFyZCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMKICAgICAgICB0 Y19yZXNldD0nG1swbScKICAgICAgICB0Y19ib2xkPScbWzFtJzsgICB0Y19zdGFuZG91dD0n G1s3bScKICAgICAgICB0Y19yZWQ9JxtbMzFtJzsgICB0Y19ncmVlbj0nG1szMm0nCiAgICAg ICAgdGNfYmx1ZT0nG1szNG0nOyAgdGNfY3lhbj0nG1szNm0nCiAgICAgIGVsc2UKICAgICAg ICAjIE90aGVyd2lzZSB0cnVzdCB0aGUgdGVybWluZm8gZGF0YWJhc2UgYWZ0ZXIgYWxsLgog ICAgICAgIHRlc3QgLW4gImB0cHV0IHNncjAgMj4vZGV2L251bGxgIiAmJiB7CiAgICAgICAg ICB0Y19yZXNldD1gdHB1dCBzZ3IwYAogICAgICAgICAgdGVzdCAtbiAiYHRwdXQgYm9sZCAy Pi9kZXYvbnVsbGAiICYmIHRjX2JvbGQ9YHRwdXQgYm9sZGAKICAgICAgICAgIHRjX3N0YW5k b3V0PSR0Y19ib2xkCiAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzbXNvIDI+L2Rldi9udWxs YCIgJiYgdGNfc3RhbmRvdXQ9YHRwdXQgc21zb2AKICAgICAgICAgIHRlc3QgLW4gImB0cHV0 IHNldGFmIDEgMj4vZGV2L251bGxgIiAmJiB0Y19yZWQ9YHRwdXQgc2V0YWYgMWAKICAgICAg ICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDIgMj4vZGV2L251bGxgIiAmJiB0Y19ncmVlbj1g dHB1dCBzZXRhZiAyYAogICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgNCAyPi9kZXYv bnVsbGAiICYmIHRjX2JsdWU9YHRwdXQgc2V0YWYgNGAKICAgICAgICAgIHRlc3QgLW4gImB0 cHV0IHNldGFmIDUgMj4vZGV2L251bGxgIiAmJiB0Y19jeWFuPWB0cHV0IHNldGFmIDVgCiAg ICAgICAgfQogICAgICBmaQogICAgfQoKICAgIHJlcXVpcmVfdGVybV9jb2xvcnM9Ogp9CgoK IyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKIyMgRnVuY3Rpb24gbGlicmFyeS4gIyMKIyMgLS0t LS0tLS0tLS0tLS0tLS0gIyMKCiMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGEgdmFyaWV0eSBv ZiB1c2VmdWwgZnVuY3Rpb25zIHRvIGNhbGwgaW4geW91cgojIHNjcmlwdHMuIFRha2Ugbm90 ZSBvZiB0aGUgcG9ydGFibGUgd3JhcHBlcnMgZm9yIGZlYXR1cmVzIHByb3ZpZGVkIGJ5CiMg c29tZSBtb2Rlcm4gc2hlbGxzLCB3aGljaCB3aWxsIGZhbGwgYmFjayB0byBzbG93ZXIgZXF1 aXZhbGVudHMgb24KIyBsZXNzIGZlYXR1cmVmdWwgc2hlbGxzLgoKCiMgZnVuY19hcHBlbmQg VkFSIFZBTFVFCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQXBwZW5kIFZBTFVFIG9udG8g dGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUi4KCiAgIyBXZSBzaG91bGQgdHJ5IHRvIG1p bmltaXNlIGZvcmtzLCBlc3BlY2lhbGx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhleSBhcmUKICAj IHVucmVhc29uYWJseSBzbG93LCBzbyBza2lwIHRoZSBmZWF0dXJlIHByb2JlcyB3aGVuIGJh c2ggb3IgenNoIGFyZQogICMgYmVpbmcgdXNlZDoKICBpZiB0ZXN0IHNldCA9ICIke0JBU0hf VkVSU0lPTitzZXR9JHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgogICAgOiAke19HX0hBVkVf QVJJVEhfT1A9InllcyJ9CiAgICA6ICR7X0dfSEFWRV9YU0lfT1BTPSJ5ZXMifQogICAgIyBU aGUgKz0gb3BlcmF0b3Igd2FzIGludHJvZHVjZWQgaW4gYmFzaCAzLjEKICAgIGNhc2UgJEJB U0hfVkVSU0lPTiBpbgogICAgICBbMTJdLiogfCAzLjAgfCAzLjAqKSA7OwogICAgICAqKQog ICAgICAgIDogJHtfR19IQVZFX1BMVVNFUV9PUD0ieWVzIn0KICAgICAgICA7OwogICAgZXNh YwogIGZpCgogICMgX0dfSEFWRV9QTFVTRVFfT1AKICAjIENhbiBiZSBlbXB0eSwgaW4gd2hp Y2ggY2FzZSB0aGUgc2hlbGwgaXMgcHJvYmVkLCAieWVzIiBpZiArPSBpcwogICMgdXNlYWJs ZSBvciBhbnl0aGluZyBlbHNlIGlmIGl0IGRvZXMgbm90IHdvcmsuCiAgdGVzdCAteiAiJF9H X0hBVkVfUExVU0VRX09QIiBcCiAgICAmJiAoZXZhbCAneD1hOyB4Kz0iIGIiOyB0ZXN0ICJh IGIiID0gIiR4IicpIDI+L2Rldi9udWxsIFwKICAgICYmIF9HX0hBVkVfUExVU0VRX09QPXll cwoKaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfUExVU0VRX09QIgp0aGVuCiAgIyBUaGlzIGlz IGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRh dGlvbi4uLgogIGV2YWwgJ2Z1bmNfYXBwZW5kICgpCiAgewogICAgJGRlYnVnX2NtZAoKICAg IGV2YWwgIiQxKz1cJDIiCiAgfScKZWxzZQogICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0 byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCiAgZnVuY19h cHBlbmQgKCkKICB7CiAgICAkZGVidWdfY21kCgogICAgZXZhbCAiJDE9XCQkMVwkMiIKICB9 CmZpCgoKIyBmdW5jX2FwcGVuZF9xdW90ZWQgVkFSIFZBTFVFCiMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQojIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBz aGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAojIGJ5IGEgc3BhY2UuCmlmIHRlc3QgeWVz ID0gIiRfR19IQVZFX1BMVVNFUV9PUCI7IHRoZW4KICBldmFsICdmdW5jX2FwcGVuZF9xdW90 ZWQgKCkKICB7CiAgICAkZGVidWdfY21kCgogICAgZnVuY19xdW90ZV9hcmcgcHJldHR5ICIk MiIKICAgIGV2YWwgIiQxKz1cXCBcJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKICB9JwplbHNl CiAgZnVuY19hcHBlbmRfcXVvdGVkICgpCiAgewogICAgJGRlYnVnX2NtZAoKICAgIGZ1bmNf cXVvdGVfYXJnIHByZXR0eSAiJDIiCiAgICBldmFsICIkMT1cJCQxXFwgXCRmdW5jX3F1b3Rl X2FyZ19yZXN1bHQiCiAgfQpmaQoKCiMgZnVuY19hcHBlbmRfdW5pcSBWQVIgVkFMVUUKIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFwcGVuZCB1bmlxdWUgVkFMVUUgb250byB0 aGUgZXhpc3RpbmcgY29udGVudHMgb2YgVkFSLCBhc3N1bWluZwojIGVudHJpZXMgYXJlIGRl bGltaXRlZCBieSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIFZBTFVFLiAgRm9yIGV4YW1wbGU6 CiMKIyAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0aW9ucyAiIC0tYW5vdGhlci1vcHRpb24gb3B0 aW9uLWFyZ3VtZW50IgojCiMgd2lsbCBvbmx5IGFwcGVuZCB0byAkb3B0aW9ucyBpZiAiIC0t YW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50ICIKIyBpcyBub3QgYWxyZWFkeSBwcmVz ZW50IHNvbWV3aGVyZSBpbiAkb3B0aW9ucyBhbHJlYWR5IChub3RlIHNwYWNlcyBhdAojIGVh Y2ggZW5kIGltcGxpZWQgYnkgbGVhZGluZyBzcGFjZSBpbiBzZWNvbmQgYXJndW1lbnQpLgpm dW5jX2FwcGVuZF91bmlxICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBldmFsIF9HX2N1cnJl bnRfdmFsdWU9J2AkRUNITyAkJyQxJ2AnCiAgICBfR19kZWxpbT1gZXhwciAiJDIiIDogJ1wo LlwpJ2AKCiAgICBjYXNlICRfR19kZWxpbSRfR19jdXJyZW50X3ZhbHVlJF9HX2RlbGltIGlu CiAgICAgICoiJDIkX0dfZGVsaW0iKikgOzsKICAgICAgKikgZnVuY19hcHBlbmQgIiRAIiA7 OwogICAgZXNhYwp9CgoKIyBmdW5jX2FyaXRoIFRFUk0uLi4KIyAtLS0tLS0tLS0tLS0tLS0t LS0KIyBTZXQgZnVuY19hcml0aF9yZXN1bHQgdG8gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5n IFRFUk1zLgogIHRlc3QgLXogIiRfR19IQVZFX0FSSVRIX09QIiBcCiAgICAmJiAoZXZhbCAn dGVzdCAyID0gJCgoIDEgKyAxICkpJykgMj4vZGV2L251bGwgXAogICAgJiYgX0dfSEFWRV9B UklUSF9PUD15ZXMKCmlmIHRlc3QgeWVzID0gIiRfR19IQVZFX0FSSVRIX09QIjsgdGhlbgog IGV2YWwgJ2Z1bmNfYXJpdGggKCkKICB7CiAgICAkZGVidWdfY21kCgogICAgZnVuY19hcml0 aF9yZXN1bHQ9JCgoICQqICkpCiAgfScKZWxzZQogIGZ1bmNfYXJpdGggKCkKICB7CiAgICAk ZGVidWdfY21kCgogICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKICB9CmZpCgoK IyBmdW5jX2Jhc2VuYW1lIEZJTEUKIyAtLS0tLS0tLS0tLS0tLS0tLS0KIyBTZXQgZnVuY19i YXNlbmFtZV9yZXN1bHQgdG8gRklMRSB3aXRoIGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1 ZGluZwojIHRoZSBsYXN0IC8gc3RyaXBwZWQuCmlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hT SV9PUFMiOyB0aGVuCiAgIyBJZiB0aGlzIHNoZWxsIHN1cHBvcnRzIHN1ZmZpeCBwYXR0ZXJu IHJlbW92YWwsIHRoZW4gdXNlIGl0IHRvIGF2b2lkCiAgIyBmb3JraW5nLiBIaWRlIHRoZSBk ZWZpbml0aW9ucyBzaW5nbGUgcXVvdGVzIGluIGNhc2UgdGhlIHNoZWxsIGNob2tlcwogICMg b24gdW5zdXBwb3J0ZWQgc3ludGF4Li4uCiAgX2I9J2Z1bmNfYmFzZW5hbWVfcmVzdWx0PSR7 MSMjKi99JwogIF9kPSdjYXNlICQxIGluCiAgICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVz dWx0PSR7MSUvKn0kMiA7OwogICAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMyAg ICAgICAgOzsKICAgICAgZXNhYycKCmVsc2UKICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sg dG8gdXNpbmcgc2VkLgogIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiB8 JFNFRCAiJHNlZF9iYXNlbmFtZSJgJwogIF9kPSdmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNI TyAiJDEiICB8JFNFRCAiJHNlZF9kaXJuYW1lImAKICAgICAgaWYgdGVzdCAiWCRmdW5jX2Rp cm5hbWVfcmVzdWx0IiA9ICJYJDEiOyB0aGVuCiAgICAgICAgZnVuY19kaXJuYW1lX3Jlc3Vs dD0kMwogICAgICBlbHNlCiAgICAgICAgZnVuY19hcHBlbmQgZnVuY19kaXJuYW1lX3Jlc3Vs dCAiJDIiCiAgICAgIGZpJwpmaQoKZXZhbCAnZnVuY19iYXNlbmFtZSAoKQp7CiAgICAkZGVi dWdfY21kCgogICAgJyIkX2IiJwp9JwoKCiMgZnVuY19kaXJuYW1lIEZJTEUgQVBQRU5EIE5P TkRJUl9SRVBMQUNFTUVOVAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwg YWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAojIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5P TkRJUl9SRVBMQUNFTUVOVC4KZXZhbCAnZnVuY19kaXJuYW1lICgpCnsKICAgICRkZWJ1Z19j bWQKCiAgICAnIiRfZCInCn0nCgoKIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIEZJTEUg QVBQRU5EIE5PTkRJUl9SRVBMQUNFTUVOVAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUGVyZm9ybSBmdW5jX2Jhc2VuYW1l IGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KIyBjYWxsOgojICAgZGly bmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAojICAg ICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1 bHQKIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCiMgICAgICAgICAgICAg dmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgojICAgYmFzZW5hbWU6 IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVk IGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCiMgRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5v dCBkZWxlZ2F0ZSB0byB0aGUgZnVuY3Rpb25zIGFib3ZlIGJ1dCBpbnN0ZWFkCiMgZHVwbGlj YXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCmV2YWwgJ2Z1bmNfZGlybmFtZV9hbmRfYmFz ZW5hbWUgKCkKewogICAgJGRlYnVnX2NtZAoKICAgICciJF9iIicKICAgICciJF9kIicKfScK CgojIGZ1bmNfZWNobyBBUkcuLi4KIyAtLS0tLS0tLS0tLS0tLS0tCiMgRWNobyBwcm9ncmFt IG5hbWUgcHJlZml4ZWQgbWVzc2FnZS4KZnVuY19lY2hvICgpCnsKICAgICRkZWJ1Z19jbWQK CiAgICBfR19tZXNzYWdlPSQqCgogICAgZnVuY19lY2hvX0lGUz0kSUZTCiAgICBJRlM9JG5s CiAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KICAgICAgSUZTPSRmdW5jX2Vj aG9fSUZTCiAgICAgICRFQ0hPICIkcHJvZ25hbWU6ICRfR19saW5lIgogICAgZG9uZQogICAg SUZTPSRmdW5jX2VjaG9fSUZTCn0KCgojIGZ1bmNfZWNob19hbGwgQVJHLi4uCiMgLS0tLS0t LS0tLS0tLS0tLS0tLS0KIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2Vw YXJhdGVkLgpmdW5jX2VjaG9fYWxsICgpCnsKICAgICRFQ0hPICIkKiIKfQoKCiMgZnVuY19l Y2hvX2luZml4XzEgSU5GSVggQVJHLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiMgRWNobyBwcm9ncmFtIG5hbWUsIGZvbGxvd2VkIGJ5IElORklYIG9uIHRoZSBmaXJz dCBsaW5lLCB3aXRoIGFueQojIGFkZGl0aW9uYWwgbGluZXMgbm90IHNob3dpbmcgSU5GSVgu CmZ1bmNfZWNob19pbmZpeF8xICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICAkcmVxdWlyZV90 ZXJtX2NvbG9ycwoKICAgIF9HX2luZml4PSQxOyBzaGlmdAogICAgX0dfaW5kZW50PSRfR19p bmZpeAogICAgX0dfcHJlZml4PSIkcHJvZ25hbWU6ICRfR19pbmZpeDogIgogICAgX0dfbWVz c2FnZT0kKgoKICAgICMgU3RyaXAgY29sb3IgZXNjYXBlIHNlcXVlbmNlcyBiZWZvcmUgY291 bnRpbmcgcHJpbnRhYmxlIGxlbmd0aAogICAgZm9yIF9HX3RjIGluICIkdGNfcmVzZXQiICIk dGNfYm9sZCIgIiR0Y19zdGFuZG91dCIgIiR0Y19yZWQiICIkdGNfZ3JlZW4iICIkdGNfYmx1 ZSIgIiR0Y19jeWFuIgogICAgZG8KICAgICAgdGVzdCAtbiAiJF9HX3RjIiAmJiB7CiAgICAg ICAgX0dfZXNjX3RjPWAkRUNITyAiJF9HX3RjIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFs X3JlZ2V4ImAKICAgICAgICBfR19pbmRlbnQ9YCRFQ0hPICIkX0dfaW5kZW50IiB8ICRTRUQg InN8JF9HX2VzY190Y3x8ZyJgCiAgICAgIH0KICAgIGRvbmUKICAgIF9HX2luZGVudD0iJHBy b2duYW1lOiAiYGVjaG8gIiRfR19pbmRlbnQiIHwgJFNFRCAnc3wufCB8ZydgIiAgIiAjIyBl eGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcwoKICAgIGZ1bmNfZWNob19p bmZpeF8xX0lGUz0kSUZTCiAgICBJRlM9JG5sCiAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVz c2FnZTsgZG8KICAgICAgSUZTPSRmdW5jX2VjaG9faW5maXhfMV9JRlMKICAgICAgJEVDSE8g IiRfR19wcmVmaXgkdGNfYm9sZCRfR19saW5lJHRjX3Jlc2V0IiA+JjIKICAgICAgX0dfcHJl Zml4PSRfR19pbmRlbnQKICAgIGRvbmUKICAgIElGUz0kZnVuY19lY2hvX2luZml4XzFfSUZT Cn0KCgojIGZ1bmNfZXJyb3IgQVJHLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0KIyBFY2hvIHBy b2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgpmdW5jX2Vy cm9yICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycwoKICAg IGZ1bmNfZWNob19pbmZpeF8xICIgICR0Y19zdGFuZG91dCR7dGNfcmVkfWVycm9yJHRjX3Jl c2V0IiAiJCoiID4mMgp9CgoKIyBmdW5jX2ZhdGFsX2Vycm9yIEFSRy4uLgojIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0 byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCmZ1bmNfZmF0YWxfZXJyb3IgKCkKewogICAg JGRlYnVnX2NtZAoKICAgIGZ1bmNfZXJyb3IgIiQqIgogICAgZXhpdCAkRVhJVF9GQUlMVVJF Cn0KCgojIGZ1bmNfZ3JlcCBFWFBSRVNTSU9OIEZJTEVOQU1FCiMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkg bGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCmZ1bmNfZ3JlcCAoKQp7CiAgICAk ZGVidWdfY21kCgogICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQp9CgoKIyBm dW5jX2xlbiBTVFJJTkcKIyAtLS0tLS0tLS0tLS0tLS0KIyBTZXQgZnVuY19sZW5fcmVzdWx0 IHRvIHRoZSBsZW5ndGggb2YgU1RSSU5HLiBTVFJJTkcgbWF5IG5vdAojIHN0YXJ0IHdpdGgg YSBoeXBoZW4uCiAgdGVzdCAteiAiJF9HX0hBVkVfWFNJX09QUyIgXAogICAgJiYgKGV2YWwg J3g9YS9iL2M7CiAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9 JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKICAgICYmIF9HX0hBVkVfWFNJX09Q Uz15ZXMKCmlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCiAgZXZhbCAn ZnVuY19sZW4gKCkKICB7CiAgICAkZGVidWdfY21kCgogICAgZnVuY19sZW5fcmVzdWx0PSR7 IzF9CiAgfScKZWxzZQogIGZ1bmNfbGVuICgpCiAgewogICAgJGRlYnVnX2NtZAoKICAgIGZ1 bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRt YXhfY21kX2xlbmAKICB9CmZpCgoKIyBmdW5jX21rZGlyX3AgRElSRUNUT1JZLVBBVEgKIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNYWtlIHN1cmUgdGhlIGVudGlyZSBwYXRo IHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJsZS4KZnVuY19ta2Rpcl9wICgpCnsKICAg ICRkZWJ1Z19jbWQKCiAgICBfR19kaXJlY3RvcnlfcGF0aD0kMQogICAgX0dfZGlyX2xpc3Q9 CgogICAgaWYgdGVzdCAtbiAiJF9HX2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0IDogIT0gIiRv cHRfZHJ5X3J1biI7IHRoZW4KCiAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3Rh cnRpbmcgd2l0aCAnLScKICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4KICAgICAg ICAtKikgX0dfZGlyZWN0b3J5X3BhdGg9Li8kX0dfZGlyZWN0b3J5X3BhdGggOzsKICAgICAg ZXNhYwoKICAgICAgIyBXaGlsZSBzb21lIHBvcnRpb24gb2YgRElSIGRvZXMgbm90IHlldCBl eGlzdC4uLgogICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRfR19kaXJlY3RvcnlfcGF0aCI7IGRv CiAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNl IGEgY29sb24gZGVsaW1pdGVkCgkjIGxpc3QgaW5jYXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRo IGNvbnRhaW5zIHdoaXRlc3BhY2UuCiAgICAgICAgX0dfZGlyX2xpc3Q9JF9HX2RpcmVjdG9y eV9wYXRoOiRfR19kaXJfbGlzdAoKICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRk ZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCiAgICAgICAgY2FzZSAk X0dfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCgogICAgICAg ICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9v cAogICAgICAgIF9HX2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiJF9HX2RpcmVjdG9yeV9wYXRo IiB8ICRTRUQgLWUgIiRzZWRfZGlybmFtZSJgCiAgICAgIGRvbmUKICAgICAgX0dfZGlyX2xp c3Q9YCRFQ0hPICIkX0dfZGlyX2xpc3QiIHwgJFNFRCAnc3w6KiR8fCdgCgogICAgICBmdW5j X21rZGlyX3BfSUZTPSRJRlM7IElGUz06CiAgICAgIGZvciBfR19kaXIgaW4gJF9HX2Rpcl9s aXN0OyBkbwoJSUZTPSRmdW5jX21rZGlyX3BfSUZTCiAgICAgICAgIyBta2RpciBjYW4gZmFp bCB3aXRoIGEgJ0ZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKICAgICAgICAj IHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBE b24ndAogICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCiAgICAgICAgJE1LRElSICIkX0df ZGlyIiAyPi9kZXYvbnVsbCB8fCA6CiAgICAgIGRvbmUKICAgICAgSUZTPSRmdW5jX21rZGly X3BfSUZTCgogICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3Mp IGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCiAgICAgIHRlc3QgLWQgIiRfR19kaXJl Y3RvcnlfcGF0aCIgfHwgXAogICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBj cmVhdGUgJyQxJyIKICAgIGZpCn0KCgojIGZ1bmNfbWt0ZW1wZGlyIFtCQVNFTkFNRV0KIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkg dGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKIyBsaWJ0b29sIHByb2Nlc3Nl cywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgojIGdpdmVu LCBCQVNFTkFNRSBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgpmdW5jX21r dGVtcGRpciAoKQp7CiAgICAkZGVidWdfY21kCgogICAgX0dfdGVtcGxhdGU9JHtUTVBESVIt L3RtcH0vJHsxLSRwcm9nbmFtZX0KCiAgICBpZiB0ZXN0IDogPSAiJG9wdF9kcnlfcnVuIjsg dGhlbgogICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRl IGl0IGluIGRyeS1ydW4gbW9kZQogICAgICBfR190bXBkaXI9JF9HX3RlbXBsYXRlLSQkCiAg ICBlbHNlCgogICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZv cmVtb3N0CiAgICAgIF9HX3RtcGRpcj1gbWt0ZW1wIC1kICIkX0dfdGVtcGxhdGUtWFhYWFhY WFgiIDI+L2Rldi9udWxsYAoKICAgICAgaWYgdGVzdCAhIC1kICIkX0dfdG1wZGlyIjsgdGhl bgogICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9N IHRvIGF2b2lkIGEgcmFjZQogICAgICAgIF9HX3RtcGRpcj0kX0dfdGVtcGxhdGUtJHtSQU5E T00tMH0kJAoKICAgICAgICBmdW5jX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCiAgICAgICAg dW1hc2sgMDA3NwogICAgICAgICRNS0RJUiAiJF9HX3RtcGRpciIKICAgICAgICB1bWFzayAk ZnVuY19ta3RlbXBkaXJfdW1hc2sKICAgICAgZmkKCiAgICAgICMgSWYgd2UncmUgbm90IGlu IGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQogICAgICB0ZXN0IC1kICIkX0df dG1wZGlyIiB8fCBcCiAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0 ZW1wb3JhcnkgZGlyZWN0b3J5ICckX0dfdG1wZGlyJyIKICAgIGZpCgogICAgJEVDSE8gIiRf R190bXBkaXIiCn0KCgojIGZ1bmNfbm9ybWFsX2Fic3BhdGggUEFUSAojIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQojIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVz LCAiLiIgcGF0aCBjb21wb25lbnRzLAojIGFuZCBjYW5jZWwgb3V0IGFueSAiLi4iIHBhdGgg Y29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2luZwojIGl0IGFuIGFic29sdXRlIHBhdGgu CmZ1bmNfbm9ybWFsX2Fic3BhdGggKCkKewogICAgJGRlYnVnX2NtZAoKICAgICMgVGhlc2Ug U0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGlu ZyBzbGFzaC4KICAgIF9HX3BhdGhjYXI9J3N8Xi9cKFteL10qXCkuKiR8XDF8JwogICAgX0df cGF0aGNkcj0nc3xeL1teL10qfHwnCiAgICBfR19yZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCgkJ c3wvXC4vfC98ZwoJCXQgZG90c2wKCQlzfC9cLiR8L3wnCiAgICBfR19jb2xsYXBzZXNsYXNo ZXM9J3N8L1x7MSxcfXwvfGcnCiAgICBfR19maW5hbHNsYXNoPSdzfC8qJHwvfCcKCiAgICAj IFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNzZW1ibGUgdGhlIHBhdGguCiAgICBmdW5j X25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9 JDEKICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPQogICAgY2FzZSAkZnVu Y19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgogICAgICAiIikKICAgICAgICAjIEVtcHR5IHBh dGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgogICAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcv JyAiYHB3ZGAiCiAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3Ry aXBuYW1lX3Jlc3VsdAogICAgICAgIHJldHVybgogICAgICAgIDs7CiAgICAgICMgVGhlIG5l eHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBzcG90IGEgcnVuIG9mIHByZWNpc2VseQog ICAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJh Y3RlciBjbGFzc2VzOwogICAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJz dC1tYXRjaCBiZWhhdmlvdXIuCiAgICAgIC8vLyopCiAgICAgICAgIyBVbnVzdWFsIGZvcm0g b2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KICAgICAgICA7OwogICAgICAvLyopCiAg ICAgICAgIyBOb3QgbmVjZXNzYXJpbHkgYW4gb3JkaW5hcnkgcGF0aDsgUE9TSVggcmVzZXJ2 ZXMgbGVhZGluZyAnLy8nCiAgICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMg aXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcwogICAgICAgICMgb3ZlciBDSUZTL1NN Qiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRvdWJsZSBzbGFzaCBpZiBmb3VuZC4KICAg ICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0vCiAgICAgICAgOzsKICAg ICAgLyopCiAgICAgICAgIyBBYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgogICAgICAgIDs7 CiAgICAgICopCiAgICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCiAgICAg ICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0 aF90cGF0aAogICAgICAgIDs7CiAgICBlc2FjCgogICAgIyBDYW5jZWwgb3V0IGFsbCB0aGUg c2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAogICAgIyB0 aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZvciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1h a2Ugc3VyZQogICAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KICAgIGZ1 bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90 cGF0aCIgfCAkU0VEIFwKICAgICAgICAgIC1lICIkX0dfcmVtb3ZlZG90cGFydHMiIC1lICIk X0dfY29sbGFwc2VzbGFzaGVzIiAtZSAiJF9HX2ZpbmFsc2xhc2giYAogICAgd2hpbGUgOjsg ZG8KICAgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KICAgICAgaWYgdGVzdCAvID0gIiRm dW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIjsgdGhlbgogICAgICAgICMgSWYgd2UgYXNjZW5k ZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cu CiAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IjsgdGhl bgogICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LwogICAgICAgIGZpCiAg ICAgICAgYnJlYWsKICAgICAgZmkKICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9u ZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCiAgICAg ICAgICAtZSAiJF9HX3BhdGhjYXIiYAogICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRo PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCiAgICAgICAg ICAtZSAiJF9HX3BhdGhjZHIiYAogICAgICAjIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRo IGl0CiAgICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgogICAg ICAgICIiKQogICAgICAgICAgIyBUcmFpbGluZyBlbXB0eSBwYXRoIGNvbXBvbmVudCwgaWdu b3JlIGl0LgogICAgICAgICAgOzsKICAgICAgICAuLikKICAgICAgICAgICMgUGFyZW50IGRp cjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgogICAgICAg ICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCiAgICAgICAg ICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAogICAg ICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQs IGFwcGVuZCBpdC4KICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfbm9ybWFsX2Fic3BhdGhf cmVzdWx0ICIvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCIKICAgICAgICAgIDs7 CiAgICAgIGVzYWMKICAgIGRvbmUKICAgICMgUmVzdG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFz aCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5LgogICAgZnVuY19ub3JtYWxfYWJzcGF0aF9y ZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fi c3BhdGhfcmVzdWx0Cn0KCgojIGZ1bmNfbm90cXVpZXQgQVJHLi4uCiMgLS0tLS0tLS0tLS0t LS0tLS0tLS0KIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIG9ubHkgd2hl biBub3QgaW4gcXVpZXQgbW9kZS4KZnVuY19ub3RxdWlldCAoKQp7CiAgICAkZGVidWdfY21k CgogICAgJG9wdF9xdWlldCB8fCBmdW5jX2VjaG8gJHsxKyIkQCJ9CgogICAgIyBBIGJ1ZyBp biBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9u CiAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGluIGZvcmNlLCBzbyB3ZSBuZWVkIGFub3Ro ZXIgY29tbWFuZCB0bwogICAgIyB3b3JrIGFyb3VuZCB0aGF0OgogICAgOgp9CgoKIyBmdW5j X3JlbGF0aXZlX3BhdGggU1JDRElSIERTVERJUgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiMgU2V0IGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQgdG8gdGhlIHJlbGF0 aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLgpmdW5jX3JlbGF0aXZlX3BhdGggKCkK ewogICAgJGRlYnVnX2NtZAoKICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CiAgICBm dW5jX25vcm1hbF9hYnNwYXRoICIkMSIKICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGly PSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAogICAgZnVuY19ub3JtYWxfYWJzcGF0aCAi JDIiCiAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0 aF9yZXN1bHQKCiAgICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgog ICAgd2hpbGUgOjsgZG8KICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4 IG9mIGJpbmRpcgogICAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgog ICAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKICAgICAgICAgICMgZm91bmQg YW4gZXhhY3QgbWF0Y2gKICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVk PQogICAgICAgICAgYnJlYWsKICAgICAgICAgIDs7CiAgICAgICAgJGZ1bmNfcmVsYXRpdmVf cGF0aF90bGliZGlyKikKICAgICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKICAg ICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcn ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIiCiAgICAgICAgICBmdW5jX3JlbGF0aXZl X3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICAgICAgICBpZiB0 ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KICAgICAgICAgICAg ZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCiAgICAgICAgICBmaQogICAgICAgICAgYnJl YWsKICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgIGZ1bmNfZGlybmFtZSAkZnVu Y19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90 bGliZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVu Y19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiOyB0aGVuCiAgICAgICAgICAgICMgSGF2ZSB0byBk ZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IQogICAgICAgICAgICBmdW5jX3JlbGF0 aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CiAgICAgICAg ICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhf dGJpbmRpcgogICAgICAgICAgICBicmVhawogICAgICAgICAgZmkKICAgICAgICAgIGZ1bmNf cmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKICAg ICAgICAgIDs7CiAgICAgIGVzYWMKICAgIGRvbmUKCiAgICAjIE5vdyBjYWxjdWxhdGUgcGF0 aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCiAgICBmdW5jX3N0 cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgogICAgZnVuY19y ZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICBmdW5jX3N0 cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCiAgICBp ZiB0ZXN0IC1uICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgogICAgICBmdW5jX2Fw cGVuZCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0ICIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3Vs dCIKICAgIGZpCgogICAgIyBOb3JtYWxpc2F0aW9uLiBJZiBiaW5kaXIgaXMgbGliZGlyLCBy ZXR1cm4gJy4nIGVsc2UgcmVsYXRpdmUgcGF0aC4KICAgIGlmIHRlc3QgLW4gIiRmdW5jX3Jl bGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgogICAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcn ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKICAgICAgZnVuY19yZWxhdGl2ZV9wYXRo X3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICBmaQoKICAgIHRlc3QgLW4gIiRm dW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IiB8fCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0 PS4KCiAgICA6Cn0KCgojIGZ1bmNfcXVvdGVfcG9ydGFibGUgRVZBTCBBUkcKIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgSW50ZXJuYWwgZnVuY3Rpb24gdG8gcG9ydGFibHkg aW1wbGVtZW50IGZ1bmNfcXVvdGVfYXJnLiAgTm90ZSB0aGF0IHdlIHN0aWxsCiMga2VlcCBh dHRlbnRpb24gdG8gcGVyZm9ybWFuY2UgaGVyZSBzbyB3ZSBhcyBtdWNoIGFzIHBvc3NpYmxl IHRyeSB0byBhdm9pZAojIGNhbGxpbmcgc2VkIGJpbmFyeSAoc28gZmFyIE8oTikgY29tcGxl eGl0eSBhcyBsb25nIGFzIGZ1bmNfYXBwZW5kIGlzIE8oMSkpLgpmdW5jX3F1b3RlX3BvcnRh YmxlICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICAkcmVxdWlyZV9jaGVja19pZnNfYmFja3Ns YXNoCgogICAgZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQ9JDIKCiAgICAjIG9uZS10aW1l LWxvb3AgKGVhc3kgYnJlYWspCiAgICB3aGlsZSB0cnVlCiAgICBkbwogICAgICBpZiAkMTsg dGhlbgogICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0PWAkRUNITyAiJDIiIHwg JFNFRCBcCiAgICAgICAgICAtZSAiJHNlZF9kb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2Vk X2RvdWJsZV9iYWNrc2xhc2giYAogICAgICAgIGJyZWFrCiAgICAgIGZpCgogICAgICAjIFF1 b3RlIGZvciBldmFsLgogICAgICBjYXNlICRmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdCBp bgogICAgICAgICpbXFxcYFwiXCRdKikKICAgICAgICAgICMgRmFsbGJhY2sgdG8gc2VkIGZv ciAkZnVuY19jaGVja19ic19pZnNfYnJva2VuPTosIG9yIHdoZW4gdGhlIHN0cmluZwogICAg ICAgICAgIyBjb250YWlucyB0aGUgc2hlbGwgd2lsZGNhcmQgY2hhcmFjdGVycy4KICAgICAg ICAgIGNhc2UgJGNoZWNrX2lmc19iYWNrc2hsYXNoX2Jyb2tlbiRmdW5jX3F1b3RlX3BvcnRh YmxlX3Jlc3VsdCBpbgogICAgICAgICAgICA6KnwqW1xbXCpcP10qKQogICAgICAgICAgICAg IGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0PWAkRUNITyAiJGZ1bmNfcXVvdGVfcG9ydGFi bGVfcmVzdWx0IiBcCiAgICAgICAgICAgICAgICAgIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJz dCJgCiAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICA7OwogICAgICAgICAgZXNh YwoKICAgICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFibGVfb2xkX0lGUz0kSUZTCiAgICAgICAg ICBmb3IgX0dfY2hhciBpbiAnXCcgJ2AnICciJyAnJCcKICAgICAgICAgIGRvCiAgICAgICAg ICAgICMgU1RBVEUoJDEpIFBSRVYoJDIpIFNFUEFSQVRPUigkMykKICAgICAgICAgICAgc2V0 IHN0YXJ0ICIiICIiCiAgICAgICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0PWR1 bW15IiRfR19jaGFyJGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0JF9HX2NoYXIiZHVtbXkK ICAgICAgICAgICAgSUZTPSRfR19jaGFyCiAgICAgICAgICAgIGZvciBfR19wYXJ0IGluICRm dW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdAogICAgICAgICAgICBkbwogICAgICAgICAgICAg IGNhc2UgJDEgaW4KICAgICAgICAgICAgICBxdW90ZSkKICAgICAgICAgICAgICAgIGZ1bmNf YXBwZW5kIGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0ICIkMyQyIgogICAgICAgICAgICAg ICAgc2V0IHF1b3RlICIkX0dfcGFydCIgIlxcJF9HX2NoYXIiCiAgICAgICAgICAgICAgICA7 OwogICAgICAgICAgICAgIHN0YXJ0KQogICAgICAgICAgICAgICAgc2V0IGZpcnN0ICIiICIi CiAgICAgICAgICAgICAgICBmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdD0KICAgICAgICAg ICAgICAgIDs7CiAgICAgICAgICAgICAgZmlyc3QpCiAgICAgICAgICAgICAgICBzZXQgcXVv dGUgIiRfR19wYXJ0IiAiIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICBlc2Fj CiAgICAgICAgICAgIGRvbmUKICAgICAgICAgIGRvbmUKICAgICAgICAgIElGUz0kZnVuY19x dW90ZV9wb3J0YWJsZV9vbGRfSUZTCiAgICAgICAgICA7OwogICAgICAgICopIDs7CiAgICAg IGVzYWMKICAgICAgYnJlYWsKICAgIGRvbmUKCiAgICBmdW5jX3F1b3RlX3BvcnRhYmxlX3Vu cXVvdGVkX3Jlc3VsdD0kZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQKICAgIGNhc2UgJGZ1 bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0IGluCiAgICAgICMgZG91YmxlLXF1b3RlIGFyZ3Mg Y29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQogICAgICAjIHdvcmQg c3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgdmFyaWFibGUgZXhwYW5zaW9u CiAgICAgICMgZm9yIGEgc3Vic2VxdWVudCBldmFsLgogICAgICAjIG1hbnkgYm91cm5lIHNo ZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQogICAgICAjIGlu IHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgogICAgICAqW1xbXH5c I1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKICAgICAgICBmdW5j X3F1b3RlX3BvcnRhYmxlX3Jlc3VsdD1cIiRmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdFwi CiAgICAgICAgOzsKICAgIGVzYWMKfQoKCiMgZnVuY19xdW90ZWZhc3RfZXZhbCBBUkcKIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFF1b3RlIG9uZSBBUkcgKGludGVybmFsKS4gIFRo aXMgaXMgZXF1aXZhbGVudCB0byAnZnVuY19xdW90ZV9hcmcgZXZhbCBBUkcnLAojIGJ1dCBv cHRpbWl6ZWQgZm9yIHNwZWVkLiAgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY19xdW90ZWZh c3RfZXZhbC4KaWYgdGVzdCB4eWVzID0gYCh4PTsgcHJpbnRmIC12IHggJXEgeWVzOyBlY2hv IHgiJHgiKSAyPi9kZXYvbnVsbGA7IHRoZW4KICBwcmludGYgLXYgX0dMX3Rlc3RfcHJpbnRm X3RpbGRlICVxICd+JwogIGlmIHRlc3QgJ1x+JyA9ICIkX0dMX3Rlc3RfcHJpbnRmX3RpbGRl IjsgdGhlbgogICAgZnVuY19xdW90ZWZhc3RfZXZhbCAoKQogICAgewogICAgICBwcmludGYg LXYgZnVuY19xdW90ZWZhc3RfZXZhbF9yZXN1bHQgJXEgIiQxIgogICAgfQogIGVsc2UKICAg ICMgQnJva2VuIG9sZGVyIEJhc2ggaW1wbGVtZW50YXRpb25zLiAgTWFrZSB0aG9zZSBmYXN0 ZXIgdG9vIGlmIHBvc3NpYmxlLgogICAgZnVuY19xdW90ZWZhc3RfZXZhbCAoKQogICAgewog ICAgICBjYXNlICQxIGluCiAgICAgICAgJ34nKikKICAgICAgICAgIGZ1bmNfcXVvdGVfcG9y dGFibGUgZmFsc2UgIiQxIgogICAgICAgICAgZnVuY19xdW90ZWZhc3RfZXZhbF9yZXN1bHQ9 JGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0CiAgICAgICAgICA7OwogICAgICAgICopCiAg ICAgICAgICBwcmludGYgLXYgZnVuY19xdW90ZWZhc3RfZXZhbF9yZXN1bHQgJXEgIiQxIgog ICAgICAgICAgOzsKICAgICAgZXNhYwogICAgfQogIGZpCmVsc2UKICBmdW5jX3F1b3RlZmFz dF9ldmFsICgpCiAgewogICAgZnVuY19xdW90ZV9wb3J0YWJsZSBmYWxzZSAiJDEiCiAgICBm dW5jX3F1b3RlZmFzdF9ldmFsX3Jlc3VsdD0kZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQK ICB9CmZpCgoKIyBmdW5jX3F1b3RlX2FyZyBNT0RFcyBBUkcKIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIyBRdW90ZSBvbmUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4gIE1PREVzIGFy Z3VtZW50IG1heSBjb250YWluIHplcm8gb3IgbW9yZQojIHNwZWNpZmllcnMgbGlzdGVkIGJl bG93IHNlcGFyYXRlZCBieSAnLCcgY2hhcmFjdGVyLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5z IHR3bwojIHZhbHVlczoKIyAgIGkpIGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdAojICAgICAgZG91 YmxlLXF1b3RlZCAod2hlbiBuZWVkZWQpLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2 YWwKIyAgaWkpIGZ1bmNfcXVvdGVfYXJnX3VucXVvdGVkX3Jlc3VsdAojICAgICAgaGFzIGFs bCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlCiMgICAg ICBxdW90ZXMgYmFja3NsYXNoaWZpZWQuICBBdmFpbGFibGUgb25seSBpZiAndW5xdW90ZWQn IGlzIHNwZWNpZmllZC4KIwojIEF2YWlsYWJsZSBtb2RlczoKIyAtLS0tLS0tLS0tLS0tLS0t CiMgJ2V2YWwnIChkZWZhdWx0KQojICAgICAgIC0gZXNjYXBlIHNoZWxsIHNwZWNpYWwgY2hh cmFjdGVycwojICdleHBhbmQnCiMgICAgICAgLSB0aGUgc2FtZSBhcyAnZXZhbCc7ICBidXQg ZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMKIyAncHJldHR5JwojICAgICAgIC0g cmVxdWVzdCBhZXN0aGV0aWMgb3V0cHV0LCBpLmUuICciYSBiIicgaW5zdGVhZCBvZiAnYVwg YicuICBUaGlzIG1pZ2h0CiMgICAgICAgICBiZSB1c2VkIGxhdGVyIGluIGZ1bmNfcXVvdGUg dG8gZ2V0IG91dHB1dCBsaWtlOiAnZWNobyAiYSBiIicgaW5zdGVhZAojICAgICAgICAgb2Yg J2VjaG8gYVwgYicuICBUaGlzIGlzIHNsb3dlciB0aGFuIGRlZmF1bHQgb24gc29tZSBzaGVs bHMuCiMgJ3VucXVvdGVkJwojICAgICAgIC0gcHJvZHVjZSBhbHNvICRmdW5jX3F1b3RlX2Fy Z191bnF1b3RlZF9yZXN1bHQgd2hpY2ggZG9lcyBub3QgY29udGFpbgojICAgICAgICAgd3Jh cHBpbmcgZG91YmxlLXF1b3Rlcy4KIwojIEV4YW1wbGVzIGZvciAnZnVuY19xdW90ZV9hcmcg cHJldHR5LHVucXVvdGVkIHN0cmluZyc6CiMKIyAgIHN0cmluZyAgICAgIHwgKl9yZXN1bHQg ICAgICAgICAgICAgIHwgKl91bnF1b3RlZF9yZXN1bHQKIyAgIC0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCiMgICAiICAgICAgICAg ICB8IFwiICAgICAgICAgICAgICAgICAgICB8IFwiCiMgICBhIGIgICAgICAgICB8ICJhIGIi ICAgICAgICAgICAgICAgICB8IGEgYgojICAgImEgYiIgICAgICAgfCAiXCJhIGJcIiIgICAg ICAgICAgICAgfCBcImEgYlwiCiMgICAqICAgICAgICAgICB8ICIqIiAgICAgICAgICAgICAg ICAgICB8ICoKIyAgIHo9IiR7eC0keX0iIHwgIno9XCJcJHt4LVwkeX1cIiIgICAgIHwgej1c Ilwke3gtXCR5fVwiCiMKIyBFeGFtcGxlcyBmb3IgJ2Z1bmNfcXVvdGVfYXJnIHByZXR0eSx1 bnF1b3RlZCxleHBhbmQgc3RyaW5nJzoKIwojICAgc3RyaW5nICAgICAgICB8ICAgKl9yZXN1 bHQgICAgICAgICAgfCAgKl91bnF1b3RlZF9yZXN1bHQKIyAgIC0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLQojICAgej0iJHt4LSR5 fSIgICB8ICJ6PVwiJHt4LSR5fVwiIiAgICAgfCB6PVwiJHt4LSR5fVwiCmZ1bmNfcXVvdGVf YXJnICgpCnsKICAgIF9HX3F1b3RlX2V4cGFuZD1mYWxzZQogICAgY2FzZSAsJDEsIGluCiAg ICAgICosZXhwYW5kLCopCiAgICAgICAgX0dfcXVvdGVfZXhwYW5kPToKICAgICAgICA7Owog ICAgZXNhYwoKICAgIGNhc2UgLCQxLCBpbgogICAgICAqLHByZXR0eSwqfCosZXhwYW5kLCp8 Kix1bnF1b3RlZCwqKQogICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFibGUgJF9HX3F1b3RlX2V4 cGFuZCAiJDIiCiAgICAgICAgZnVuY19xdW90ZV9hcmdfcmVzdWx0PSRmdW5jX3F1b3RlX3Bv cnRhYmxlX3Jlc3VsdAogICAgICAgIGZ1bmNfcXVvdGVfYXJnX3VucXVvdGVkX3Jlc3VsdD0k ZnVuY19xdW90ZV9wb3J0YWJsZV91bnF1b3RlZF9yZXN1bHQKICAgICAgICA7OwogICAgICAq KQogICAgICAgICMgRmFzdGVyIHF1b3RlLWZvci1ldmFsIGZvciBzb21lIHNoZWxscy4KICAg ICAgICBmdW5jX3F1b3RlZmFzdF9ldmFsICIkMiIKICAgICAgICBmdW5jX3F1b3RlX2FyZ19y ZXN1bHQ9JGZ1bmNfcXVvdGVmYXN0X2V2YWxfcmVzdWx0CiAgICAgICAgOzsKICAgIGVzYWMK fQoKCiMgZnVuY19xdW90ZSBNT0RFcyBBUkdzLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiMgUXVvdGUgYWxsIEFSR3MgdG8gYmUgZXZhbGVkIGxhdGVyIGFuZCBqb2luIHRoZW0g aW50byBzaW5nbGUgY29tbWFuZC4gIFNlZQojIGZ1bmNfcXVvdGVfYXJnJ3MgZGVzY3JpcHRp b24gZm9yIG1vcmUgaW5mby4KZnVuY19xdW90ZSAoKQp7CiAgICAkZGVidWdfY21kCiAgICBf R19mdW5jX3F1b3RlX21vZGU9JDEgOyBzaGlmdAogICAgZnVuY19xdW90ZV9yZXN1bHQ9CiAg ICB3aGlsZSB0ZXN0IDAgLWx0ICQjOyBkbwogICAgICBmdW5jX3F1b3RlX2FyZyAiJF9HX2Z1 bmNfcXVvdGVfbW9kZSIgIiQxIgogICAgICBpZiB0ZXN0IC1uICIkZnVuY19xdW90ZV9yZXN1 bHQiOyB0aGVuCiAgICAgICAgZnVuY19hcHBlbmQgZnVuY19xdW90ZV9yZXN1bHQgIiAkZnVu Y19xdW90ZV9hcmdfcmVzdWx0IgogICAgICBlbHNlCiAgICAgICAgZnVuY19hcHBlbmQgZnVu Y19xdW90ZV9yZXN1bHQgIiRmdW5jX3F1b3RlX2FyZ19yZXN1bHQiCiAgICAgIGZpCiAgICAg IHNoaWZ0CiAgICBkb25lCn0KCgojIGZ1bmNfc3RyaXBuYW1lIFBSRUZJWCBTVUZGSVggTkFN RQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHN0cmlwIFBSRUZJWCBh bmQgU1VGRklYIGZyb20gTkFNRSwgYW5kIHN0b3JlIGluIGZ1bmNfc3RyaXBuYW1lX3Jlc3Vs dC4KIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJl Z2V4IHNwZWNpYWwKIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBT VUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCiMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQg bWF0Y2hlcyBvbmx5IGEgZG90KS4KaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7 IHRoZW4KICBldmFsICdmdW5jX3N0cmlwbmFtZSAoKQogIHsKICAgICRkZWJ1Z19jbWQKCiAg ICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3Ro IFggYW5kIFkgYXJlCiAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9u ZSB0byBvcmRpbmFyeSB2YXJpYWJsZSBmaXJzdC4KICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3Vs dD0kMwogICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0 IyIkMSJ9CiAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1 bHQlIiQyIn0KICB9JwplbHNlCiAgZnVuY19zdHJpcG5hbWUgKCkKICB7CiAgICAkZGVidWdf Y21kCgogICAgY2FzZSAkMiBpbgogICAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAk RUNITyAiJDMiIHwgJFNFRCAtZSAicyVeJDElJSIgLWUgInMlXFxcXCQyXCQlJSJgOzsKICAg ICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgLWUgInMl XiQxJSUiIC1lICJzJSQyXCQlJSJgOzsKICAgIGVzYWMKICB9CmZpCgoKIyBmdW5jX3Nob3df ZXZhbCBDTUQgW0ZBSUxfRVhQXQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMg VW5sZXNzIG9wdF9xdWlldCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBv cHRfZHJ5cnVuIGlzCiMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0 aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCiMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVh dGUgaXQuCmZ1bmNfc2hvd19ldmFsICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBfR19jbWQ9 JDEKICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9CgogICAgZnVuY19xdW90ZV9hcmcgcHJldHR5 LGV4cGFuZCAiJF9HX2NtZCIKICAgIGV2YWwgImZ1bmNfbm90cXVpZXQgJGZ1bmNfcXVvdGVf YXJnX3Jlc3VsdCIKCiAgICAkb3B0X2RyeV9ydW4gfHwgewogICAgICBldmFsICIkX0dfY21k IgogICAgICBfR19zdGF0dXM9JD8KICAgICAgaWYgdGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7 IHRoZW4KCWV2YWwgIihleGl0ICRfR19zdGF0dXMpOyAkX0dfZmFpbF9leHAiCiAgICAgIGZp CiAgICB9Cn0KCgojIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBDTUQgW0ZBSUxfRVhQXQojIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFVubGVzcyBvcHRfcXVpZXQg aXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcwojIG5v dCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMs IGFuZCBGQUlMX0VYUAojIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBz YXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCmZ1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQp7 CiAgICAkZGVidWdfY21kCgogICAgX0dfY21kPSQxCiAgICBfR19mYWlsX2V4cD0kezItJzon fQoKICAgICRvcHRfcXVpZXQgfHwgewogICAgICBmdW5jX3F1b3RlX2FyZyBleHBhbmQscHJl dHR5ICIkX0dfY21kIgogICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfYXJnX3Jl c3VsdCIKICAgIH0KCiAgICAkb3B0X2RyeV9ydW4gfHwgewogICAgICBldmFsICIkX0dfdXNl cl9sb2NhbGUKCSAgICAkX0dfY21kIgogICAgICBfR19zdGF0dXM9JD8KICAgICAgZXZhbCAi JF9HX3NhZmVfbG9jYWxlIgogICAgICBpZiB0ZXN0IDAgLW5lICIkX0dfc3RhdHVzIjsgdGhl bgoJZXZhbCAiKGV4aXQgJF9HX3N0YXR1cyk7ICRfR19mYWlsX2V4cCIKICAgICAgZmkKICAg IH0KfQoKCiMgZnVuY190cl9zaAojIC0tLS0tLS0tLS0KIyBUdXJuICQxIGludG8gYSBzdHJp bmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFibGUgbmFtZS4KIyBSZXN1bHQgaXMgc3Rv cmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCiMgbm90IGluIHRo ZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCiMgaWYg JDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycgaXMgcHJlcGVuZGVkIGFzIHdlbGwuCmZ1 bmNfdHJfc2ggKCkKewogICAgJGRlYnVnX2NtZAoKICAgIGNhc2UgJDEgaW4KICAgIFswLTld KiB8ICpbIWEtekEtWjAtOV9dKikKICAgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIk MSIgfCAkU0VEIC1lICdzL15cKFswLTldXCkvX1wxLycgLWUgJ3MvW15hLXpBLVowLTlfXS9f L2cnYAogICAgICA7OwogICAgKiApCiAgICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCiAgICAg IDs7CiAgICBlc2FjCn0KCgojIGZ1bmNfdmVyYm9zZSBBUkcuLi4KIyAtLS0tLS0tLS0tLS0t LS0tLS0tCiMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3Nl IG1vZGUgb25seS4KZnVuY192ZXJib3NlICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICAkb3B0 X3ZlcmJvc2UgJiYgZnVuY19lY2hvICIkKiIKCiAgICA6Cn0KCgojIGZ1bmNfd2Fybl9hbmRf Y29udGludWUgQVJHLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBFY2hv IHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJy b3IuCmZ1bmNfd2Fybl9hbmRfY29udGludWUgKCkKewogICAgJGRlYnVnX2NtZAoKICAgICRy ZXF1aXJlX3Rlcm1fY29sb3JzCgogICAgZnVuY19lY2hvX2luZml4XzEgIiR7dGNfcmVkfXdh cm5pbmckdGNfcmVzZXQiICIkKiIgPiYyCn0KCgojIGZ1bmNfd2FybmluZyBDQVRFR09SWSBB UkcuLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRWNobyBwcm9ncmFtIG5h bWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLiBXYXJuaW5n CiMgbWVzc2FnZXMgY2FuIGJlIGZpbHRlcmVkIGFjY29yZGluZyB0byBDQVRFR09SWSwgd2hl cmUgdGhpcyBmdW5jdGlvbgojIGVsaWRlcyBtZXNzYWdlcyB3aGVyZSBDQVRFR09SWSBpcyBu b3QgbGlzdGVkIGluIHRoZSBnbG9iYWwgdmFyaWFibGUKIyAnb3B0X3dhcm5pbmdfdHlwZXMn LgpmdW5jX3dhcm5pbmcgKCkKewogICAgJGRlYnVnX2NtZAoKICAgICMgQ0FURUdPUlkgbXVz dCBiZSBpbiB0aGUgd2FybmluZ19jYXRlZ29yaWVzIGxpc3QhCiAgICBjYXNlICIgJHdhcm5p bmdfY2F0ZWdvcmllcyAiIGluCiAgICAgICoiICQxICIqKSA7OwogICAgICAqKSBmdW5jX2lu dGVybmFsX2Vycm9yICJpbnZhbGlkIHdhcm5pbmcgY2F0ZWdvcnkgJyQxJyIgOzsKICAgIGVz YWMKCiAgICBfR19jYXRlZ29yeT0kMQogICAgc2hpZnQKCiAgICBjYXNlICIgJG9wdF93YXJu aW5nX3R5cGVzICIgaW4KICAgICAgKiIgJF9HX2NhdGVnb3J5ICIqKSAkd2FybmluZ19mdW5j ICR7MSsiJEAifSA7OwogICAgZXNhYwp9CgoKIyBmdW5jX3NvcnRfdmVyIFZFUjEgVkVSMgoj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgJ3NvcnQgLVYnIGlzIG5vdCBnZW5lcmFsbHkg YXZhaWxhYmxlLgojIE5vdGUgdGhpcyBkZXZpYXRlcyBmcm9tIHRoZSB2ZXJzaW9uIGNvbXBh cmlzb24gaW4gYXV0b21ha2UKIyBpbiB0aGF0IGl0IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5k IHRyZWF0cyAxLjQuNGEgPCAxLjQtcDNhCiMgYnV0IHRoaXMgc2hvdWxkIHN1ZmZpY2UgYXMg d2Ugd29uJ3QgYmUgc3BlY2lmeWluZyBvbGQKIyB2ZXJzaW9uIGZvcm1hdHMgb3IgcmVkdW5k YW50IHRyYWlsaW5nIC4wIGluIGJvb3RzdHJhcC5jb25mLgojIElmIHdlIGRpZCB3YW50IGZ1 bGwgY29tcGF0aWJpbGl0eSB0aGVuIHdlIHNob3VsZCBwcm9iYWJseQojIHVzZSBtNF92ZXJz aW9uX2NvbXBhcmUgZnJvbSBhdXRvY29uZi4KZnVuY19zb3J0X3ZlciAoKQp7CiAgICAkZGVi dWdfY21kCgogICAgcHJpbnRmICclc1xuJXNcbicgIiQxIiAiJDIiIFwKICAgICAgfCBzb3J0 IC10LiAtayAxLDFuIC1rIDIsMm4gLWsgMywzbiAtayA0LDRuIC1rIDUsNW4gLWsgNiw2biAt ayA3LDduIC1rIDgsOG4gLWsgOSw5bgp9CgojIGZ1bmNfbHRfdmVyIFBSRVYgQ1VSUgojIC0t LS0tLS0tLS0tLS0tLS0tLS0tLQojIFJldHVybiB0cnVlIGlmIFBSRVYgYW5kIENVUlIgYXJl IGluIHRoZSBjb3JyZWN0IG9yZGVyIGFjY29yZGluZyB0bwojIGZ1bmNfc29ydF92ZXIsIG90 aGVyd2lzZSBmYWxzZS4gIFVzZSBpdCBsaWtlIHRoaXM6CiMKIyAgZnVuY19sdF92ZXIgIiRw cmV2X3ZlciIgIiRwcm9wb3NlZF92ZXIiIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIi4uLiIKZnVu Y19sdF92ZXIgKCkKewogICAgJGRlYnVnX2NtZAoKICAgIHRlc3QgIngkMSIgPSB4YGZ1bmNf c29ydF92ZXIgIiQxIiAiJDIiIHwgJFNFRCAxcWAKfQoKCiMgTG9jYWwgdmFyaWFibGVzOgoj IG1vZGU6IHNoZWxsLXNjcmlwdAojIHNoLWluZGVudGF0aW9uOiAyCiMgZXZhbDogKGFkZC1o b29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQojIHRpbWUtc3RhbXAtcGF0dGVy bjogIjEwL3NjcmlwdHZlcnNpb249JTp5LSUwMm0tJTAyZC4lMDJIOyAjIFVUQyIKIyB0aW1l LXN0YW1wLXRpbWUtem9uZTogIlVUQyIKIyBFbmQ6CiMhIC9iaW4vc2gKCiMgQSBwb3J0YWJs ZSwgcGx1Z2dhYmxlIG9wdGlvbiBwYXJzZXIgZm9yIEJvdXJuZSBzaGVsbC4KIyBXcml0dGVu IGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAxMAoKIyBUaGlzIGlzIGZyZWUgc29mdHdhcmUuICBU aGVyZSBpcyBOTyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yCiMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgojCiMgQ29weXJpZ2h0IChDKSAy MDEwLTIwMTksIDIwMjEsIDIwMjMtMjAyNCBCb290c3RyYXAgQXV0aG9ycwojCiMgVGhpcyBm aWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgbGljZW5z ZQojIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4sIGFuZCBHUEwgdmVy c2lvbiAyIG9yIGxhdGVyCiMgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIu MC5odG1sPi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBvZgojIHRoZXNlIGxpY2Vuc2VzIHdoZW4g dXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhpcyBzb2Z0d2FyZSBvciBhbnkgb2YKIyB0aGUg ZmlsZXMgd2l0aGluIGl0LiAgU2VlIHRoZSBVUkxzIGFib3ZlLCBvciB0aGUgZmlsZSBgTElD RU5TRWAKIyBpbmNsdWRlZCBpbiB0aGUgQm9vdHN0cmFwIGRpc3RyaWJ1dGlvbiBmb3IgdGhl IGZ1bGwgbGljZW5zZSB0ZXh0cy4KCiMgUGxlYXNlIHJlcG9ydCBidWdzIG9yIHByb3Bvc2Ug cGF0Y2hlcyB0bzoKIyA8aHR0cHM6Ly9naXRodWIuY29tL2dudWxpYi1tb2R1bGVzL2Jvb3Rz dHJhcC9pc3N1ZXM+CgojIFNldCBhIHZlcnNpb24gc3RyaW5nIGZvciB0aGlzIHNjcmlwdC4K c2NyaXB0dmVyc2lvbj0yMDE5LTAyLTE5LjE1OyAjIFVUQwoKCiMjIC0tLS0tLSAjIwojIyBV c2FnZS4gIyMKIyMgLS0tLS0tICMjCgojIFRoaXMgZmlsZSBpcyBhIGxpYnJhcnkgZm9yIHBh cnNpbmcgb3B0aW9ucyBpbiB5b3VyIHNoZWxsIHNjcmlwdHMgYWxvbmcKIyB3aXRoIGFzc29y dGVkIG90aGVyIHVzZWZ1bCBzdXBwb3J0aW5nIGZlYXR1cmVzIHRoYXQgeW91IGNhbiBtYWtl IHVzZQojIG9mIHRvby4KIwojIEZvciB0aGUgc2ltcGxlc3Qgc2NyaXB0cyB5b3UgbWlnaHQg bmVlZCBvbmx5OgojCiMgICAjIS9iaW4vc2gKIyAgIC4gcmVsYXRpdmUvcGF0aC90by9mdW5j bGliLnNoCiMgICAuIHJlbGF0aXZlL3BhdGgvdG8vb3B0aW9ucy1wYXJzZXIKIyAgIHNjcmlw dHZlcnNpb249MS4wCiMgICBmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CiMgICBldmFsIHNldCBk dW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAojICAgLi4ucmVzdCBvZiB5b3Vy IHNjcmlwdC4uLgojCiMgSW4gb3JkZXIgZm9yIHRoZSAnLS12ZXJzaW9uJyBvcHRpb24gdG8g d29yaywgeW91IHdpbGwgbmVlZCB0byBoYXZlIGEKIyBzdWl0YWJseSBmb3JtYXR0ZWQgY29t bWVudCBsaWtlIHRoZSBvbmUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUKIyBzdGFydGluZyB3 aXRoICcjIFdyaXR0ZW4gYnkgJyBhbmQgZW5kaW5nIHdpdGggJyMgQ29weXJpZ2h0Jy4KIwoj IEZvciAnLWgnIGFuZCAnLS1oZWxwJyB0byB3b3JrLCB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBv bmUgbGluZQojIGRlc2NyaXB0aW9uIG9mIHlvdXIgc2NyaXB0J3MgcHVycG9zZSBpbiBhIGNv bW1lbnQgZGlyZWN0bHkgYWJvdmUgdGhlCiMgJyMgV3JpdHRlbiBieSAnIGxpbmUsIGxpa2Ug dGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KIwojIFRoZSBkZWZhdWx0IG9wdGlv bnMgYWxzbyBzdXBwb3J0ICctLWRlYnVnJywgd2hpY2ggd2lsbCB0dXJuIG9uIHNoZWxsCiMg ZXhlY3V0aW9uIHRyYWNpbmcgKHNlZSB0aGUgY29tbWVudCBhYm92ZSBkZWJ1Z19jbWQgYmVs b3cgZm9yIGFub3RoZXIKIyB1c2UpLCBhbmQgJy0tdmVyYm9zZScgYW5kIHRoZSBmdW5jX3Zl cmJvc2UgZnVuY3Rpb24gdG8gYWxsb3cgeW91ciBzY3JpcHQKIyB0byBkaXNwbGF5IHZlcmJv c2UgbWVzc2FnZXMgb25seSB3aGVuIHlvdXIgdXNlciBoYXMgc3BlY2lmaWVkCiMgJy0tdmVy Ym9zZScuCiMKIyBBZnRlciBzb3VyY2luZyB0aGlzIGZpbGUsIHlvdSBjYW4gcGx1ZyBpbiBw cm9jZXNzaW5nIGZvciBhZGRpdGlvbmFsCiMgb3B0aW9ucyBieSBhbWVuZGluZyB0aGUgdmFy aWFibGVzIGZyb20gdGhlICdDb25maWd1cmF0aW9uJyBzZWN0aW9uCiMgYmVsb3csIGFuZCBm b2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgJ09wdGlvbiBwYXJzaW5nJwojIHNl Y3Rpb24gZnVydGhlciBkb3duLgoKIyMgLS0tLS0tLS0tLS0tLS0gIyMKIyMgQ29uZmlndXJh dGlvbi4gIyMKIyMgLS0tLS0tLS0tLS0tLS0gIyMKCiMgWW91IHNob3VsZCBvdmVycmlkZSB0 aGVzZSB2YXJpYWJsZXMgaW4geW91ciBzY3JpcHQgYWZ0ZXIgc291cmNpbmcgdGhpcwojIGZp bGUgc28gdGhhdCB0aGV5IHJlZmxlY3QgdGhlIGN1c3RvbWlzYXRpb25zIHlvdSBoYXZlIGFk ZGVkIHRvIHRoZQojIG9wdGlvbiBwYXJzZXIuCgojIFRoZSB1c2FnZSBsaW5lIGZvciBvcHRp b24gcGFyc2luZyBlcnJvcnMgYW5kIHRoZSBzdGFydCBvZiAnLWgnIGFuZAojICctLWhlbHAn IG91dHB1dCBtZXNzYWdlcy4gWW91IGNhbiBlbWJlZCBzaGVsbCB2YXJpYWJsZXMgZm9yIGRl bGF5ZWQKIyBleHBhbnNpb24gYXQgdGhlIHRpbWUgdGhlIG1lc3NhZ2UgaXMgZGlzcGxheWVk LCBidXQgeW91IHdpbGwgbmVlZCB0bwojIHF1b3RlIG90aGVyIHNoZWxsIG1ldGEtY2hhcmFj dGVycyBjYXJlZnVsbHkgdG8gcHJldmVudCB0aGVtIGJlaW5nCiMgZXhwYW5kZWQgd2hlbiB0 aGUgY29udGVudHMgYXJlIGV2YWxlZC4KdXNhZ2U9JyRwcm9ncGF0aCBbT1BUSU9OXS4uLicK CiMgU2hvcnQgaGVscCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvICctaCcgYW5kICctLWhlbHAn LiAgQWRkIHRvIHRoaXMgb3IKIyBvdmVycmlkZSBpdCBhZnRlciBzb3VyY2luZyB0aGlzIGxp YnJhcnkgdG8gcmVmbGVjdCB0aGUgZnVsbCBzZXQgb2YKIyBvcHRpb25zIHlvdXIgc2NyaXB0 IGFjY2VwdHMuCnVzYWdlX21lc3NhZ2U9IlwKICAgICAgIC0tZGVidWcgICAgICAgIGVuYWJs ZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkKICAg ICAgICAgICAgICAgICAgICAgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRF R09SWSBbYWxsXQogICAtdiwgLS12ZXJib3NlICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9j ZXNzaW5nCiAgICAgICAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9u IGFuZCBleGl0CiAgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCBzaG9ydCBvciBsb25nIGhl bHAgbWVzc2FnZSBhbmQgZXhpdAoiCgojIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAn dXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCmxvbmdfaGVscF9tZXNz YWdlPSIKV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6CiAgICAgICAnYWxsJyAgICAgICAg ICBzaG93IGFsbCB3YXJuaW5ncwogICAgICAgJ25vbmUnICAgICAgICAgdHVybiBvZmYgYWxs IHRoZSB3YXJuaW5ncwogICAgICAgJ2Vycm9yJyAgICAgICAgd2FybmluZ3MgYXJlIHRyZWF0 ZWQgYXMgZmF0YWwgZXJyb3JzIgoKIyBIZWxwIG1lc3NhZ2UgcHJpbnRlZCBiZWZvcmUgZmF0 YWwgb3B0aW9uIHBhcnNpbmcgZXJyb3JzLgpmYXRhbF9oZWxwPSJUcnkgJ1wkcHJvZ25hbWUg LS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCgoKCiMjIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gIyMKIyMgSG9vayBmdW5jdGlvbiBtYW5hZ2VtZW50LiAjIwojIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICMjCgojIFRoaXMgc2VjdGlvbiBjb250YWlucyBmdW5jdGlv bnMgZm9yIGFkZGluZywgcmVtb3ZpbmcsIGFuZCBydW5uaW5nIGhvb2tzCiMgaW4gdGhlIG1h aW4gY29kZS4gIEEgaG9vayBpcyBqdXN0IGEgbGlzdCBvZiBmdW5jdGlvbiBuYW1lcyB0aGF0 IGNhbiBiZQojIHJ1biBpbiBvcmRlciBsYXRlciBvbi4KCiMgZnVuY19ob29rYWJsZSBGVU5D X05BTUUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIERlY2xhcmUgdGhhdCBGVU5DX05B TUUgd2lsbCBydW4gaG9va3MgYWRkZWQgd2l0aAojICdmdW5jX2FkZF9ob29rIEZVTkNfTkFN RSAuLi4nLgpmdW5jX2hvb2thYmxlICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBmdW5jX2Fw cGVuZCBob29rYWJsZV9mbnMgIiAkMSIKfQoKCiMgZnVuY19hZGRfaG9vayBGVU5DX05BTUUg SE9PS19GVU5DCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUmVxdWVz dCB0aGF0IEZVTkNfTkFNRSBjYWxsIEhPT0tfRlVOQyBiZWZvcmUgaXQgcmV0dXJucy4gIEZV TkNfTkFNRSBtdXN0CiMgZmlyc3QgaGF2ZSBiZWVuIGRlY2xhcmVkICJob29rYWJsZSIgYnkg YSBjYWxsIHRvICdmdW5jX2hvb2thYmxlJy4KZnVuY19hZGRfaG9vayAoKQp7CiAgICAkZGVi dWdfY21kCgogICAgY2FzZSAiICRob29rYWJsZV9mbnMgIiBpbgogICAgICAqIiAkMSAiKikg OzsKICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBhY2NlcHQgaG9v ayBmdW5jdGlvbnMuIiA7OwogICAgZXNhYwoKICAgIGV2YWwgZnVuY19hcHBlbmQgJHsxfV9o b29rcyAnIiAkMiInCn0KCgojIGZ1bmNfcmVtb3ZlX2hvb2sgRlVOQ19OQU1FIEhPT0tfRlVO QwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJlbW92ZSBIT09L X0ZVTkMgZnJvbSB0aGUgbGlzdCBvZiBob29rIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgYnkK IyBGVU5DX05BTUUuCmZ1bmNfcmVtb3ZlX2hvb2sgKCkKewogICAgJGRlYnVnX2NtZAoKICAg IGV2YWwgJHsxfV9ob29rcz0nYCRFQ0hPICJcJCckMSdfaG9va3MiIHwkU0VEICJzfCAnJDIn fHwiYCcKfQoKCiMgZnVuY19wcm9wYWdhdGVfcmVzdWx0IEZVTkNfTkFNRV9BIEZVTkNfTkFN RV9CCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMg SWYgdGhlICpfcmVzdWx0IHZhcmlhYmxlIG9mIEZVTkNfTkFNRV9BIF9pcyBzZXRfLCBhc3Np Z24gaXRzIHZhbHVlIHRvCiMgKl9yZXN1bHQgdmFyaWFibGUgb2YgRlVOQ19OQU1FX0IuCmZ1 bmNfcHJvcGFnYXRlX3Jlc3VsdCAoKQp7CiAgICAkZGVidWdfY21kCgogICAgZnVuY19wcm9w YWdhdGVfcmVzdWx0X3Jlc3VsdD06CiAgICBpZiBldmFsICJ0ZXN0IFwiXCR7JHsxfV9yZXN1 bHQrc2V0fVwiID0gc2V0IgogICAgdGhlbgogICAgICBldmFsICIkezJ9X3Jlc3VsdD1cJCR7 MX1fcmVzdWx0IgogICAgZWxzZQogICAgICBmdW5jX3Byb3BhZ2F0ZV9yZXN1bHRfcmVzdWx0 PWZhbHNlCiAgICBmaQp9CgoKIyBmdW5jX3J1bl9ob29rcyBGVU5DX05BTUUgW0FSR10uLi4K IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSdW4gYWxsIGhvb2sgZnVu Y3Rpb25zIHJlZ2lzdGVyZWQgdG8gRlVOQ19OQU1FLgojIEl0J3MgYXNzdW1lZCB0aGF0IHRo ZSBsaXN0IG9mIGhvb2sgZnVuY3Rpb25zIGNvbnRhaW5zIG5vdGhpbmcgbW9yZQojIHRoYW4g YSB3aGl0ZXNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIGxlZ2FsIHNoZWxsIGZ1bmN0aW9uIG5h bWVzLCBhbmQKIyBubyBlZmZvcnQgaXMgd2FzdGVkIHRyeWluZyB0byBjYXRjaCBzaGVsbCBt ZXRhLWNoYXJhY3RlcnMgb3IgcHJlc2VydmUKIyB3aGl0ZXNwYWNlLgpmdW5jX3J1bl9ob29r cyAoKQp7CiAgICAkZGVidWdfY21kCgogICAgY2FzZSAiICRob29rYWJsZV9mbnMgIiBpbgog ICAgICAqIiAkMSAiKikgOzsKICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2Vz IG5vdCBzdXBwb3J0IGhvb2sgZnVuY3Rpb25zLiIgOzsKICAgIGVzYWMKCiAgICBldmFsIF9H X2hvb2tfZm5zPVwkJDFfaG9va3M7IHNoaWZ0CgogICAgZm9yIF9HX2hvb2sgaW4gJF9HX2hv b2tfZm5zOyBkbwogICAgICBmdW5jX3Vuc2V0ICIke19HX2hvb2t9X3Jlc3VsdCIKICAgICAg ZXZhbCAkX0dfaG9vayAnJHsxKyIkQCJ9JwogICAgICBmdW5jX3Byb3BhZ2F0ZV9yZXN1bHQg JF9HX2hvb2sgZnVuY19ydW5faG9va3MKICAgICAgaWYgJGZ1bmNfcHJvcGFnYXRlX3Jlc3Vs dF9yZXN1bHQ7IHRoZW4KICAgICAgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfcnVuX2hvb2tz X3Jlc3VsdCI7IHNoaWZ0CiAgICAgIGZpCiAgICBkb25lCn0KCgoKIyMgLS0tLS0tLS0tLS0t LS0tICMjCiMjIE9wdGlvbiBwYXJzaW5nLiAjIwojIyAtLS0tLS0tLS0tLS0tLS0gIyMKCiMg SW4gb3JkZXIgdG8gYWRkIHlvdXIgb3duIG9wdGlvbiBwYXJzaW5nIGhvb2tzLCB5b3UgbXVz dCBhY2NlcHQgdGhlCiMgZnVsbCBwb3NpdGlvbmFsIHBhcmFtZXRlciBsaXN0IGZyb20geW91 ciBob29rIGZ1bmN0aW9uLiAgWW91IG1heSByZW1vdmUKIyBvciBlZGl0IGFueSBvcHRpb25z IHRoYXQgeW91IGFjdGlvbiwgYW5kIHRoZW4gcGFzcyBiYWNrIHRoZSByZW1haW5pbmcKIyB1 bnByb2Nlc3NlZCBvcHRpb25zIGluICc8aG9va2VkX2Z1bmN0aW9uX25hbWU+X3Jlc3VsdCcs IGVzY2FwZWQKIyBzdWl0YWJseSBmb3IgJ2V2YWwnLgojCiMgVGhlICc8aG9va2VkX2Z1bmN0 aW9uX25hbWU+X3Jlc3VsdCcgdmFyaWFibGUgaXMgYXV0b21hdGljYWxseSB1bnNldAojIGJl Zm9yZSB5b3VyIGhvb2sgZ2V0cyBjYWxsZWQ7IGZvciBiZXN0IHBlcmZvcm1hbmNlLCBvbmx5 IHNldCB0aGUKIyAqX3Jlc3VsdCB2YXJpYWJsZSB3aGVuIG5lY2Vzc2FyeSAoaS5lLiBkb24n dCBjYWxsIHRoZSAnZnVuY19xdW90ZScKIyBmdW5jdGlvbiB1bm5lY2Vzc2FyaWx5IGJlY2F1 c2UgaXQgY2FuIGJlIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gb24gc29tZQojIG1hY2hpbmVz KS4KIwojIExpa2UgdGhpczoKIwojICAgIG15X29wdGlvbnNfcHJlcCAoKQojICAgIHsKIyAg ICAgICAgJGRlYnVnX2NtZAojCiMgICAgICAgICMgRXh0ZW5kIHRoZSBleGlzdGluZyB1c2Fn ZSBtZXNzYWdlLgojICAgICAgICB1c2FnZV9tZXNzYWdlPSR1c2FnZV9tZXNzYWdlJwojICAg ICAgLXMsIC0tc2lsZW50ICAgICAgIGRvbidcJyd0IHByaW50IGluZm9ybWF0aW9uYWwgbWVz c2FnZXMKIyAgICAnCiMgICAgICAgICMgTm8gY2hhbmdlIGluICckQCcgKGlnbm9yZWQgY29t cGxldGVseSBieSB0aGlzIGhvb2spLiAgTGVhdmUKIyAgICAgICAgIyBteV9vcHRpb25zX3By ZXBfcmVzdWx0IHZhcmlhYmxlIGludGFjdC4KIyAgICB9CiMgICAgZnVuY19hZGRfaG9vayBm dW5jX29wdGlvbnNfcHJlcCBteV9vcHRpb25zX3ByZXAKIwojCiMgICAgbXlfc2lsZW50X29w dGlvbiAoKQojICAgIHsKIyAgICAgICAgJGRlYnVnX2NtZAojCiMgICAgICAgIGFyZ3NfY2hh bmdlZD1mYWxzZQojCiMgICAgICAgICMgTm90ZSB0aGF0LCBmb3IgZWZmaWNpZW5jeSwgd2Ug cGFyc2UgYXMgbWFueSBvcHRpb25zIGFzIHdlIGNhbgojICAgICAgICAjIHJlY29nbmlzZSBp biBhIGxvb3AgYmVmb3JlIHBhc3NpbmcgdGhlIHJlbWFpbmRlciBiYWNrIHRvIHRoZQojICAg ICAgICAjIGNhbGxlciBvbiB0aGUgZmlyc3QgdW5yZWNvZ25pc2VkIGFyZ3VtZW50IHdlIGVu Y291bnRlci4KIyAgICAgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KIyAgICAgICAgICBv cHQ9JDE7IHNoaWZ0CiMgICAgICAgICAgY2FzZSAkb3B0IGluCiMgICAgICAgICAgICAtLXNp bGVudHwtcykgb3B0X3NpbGVudD06CiMgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19j aGFuZ2VkPToKIyAgICAgICAgICAgICAgICAgICAgICAgICA7OwojICAgICAgICAgICAgIyBT ZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKIyAgICAgICAgICAgIC1zKikg ICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKIyAgICAgICAgICAgICAg ICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCiMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2Fy ZyIgJHsxKyIkQCJ9CiMgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKIyAgICAgICAg ICAgICAgICAgICAgICAgICBhcmdzX2NoYW5nZWQ9OgojICAgICAgICAgICAgICAgICAgICAg ICAgIDs7CiMgICAgICAgICAgICAqKSAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGZpcnN0 IHVucmVjb2duaXNlZCBvcHRpb24gIiRfR19vcHQiCiMgICAgICAgICAgICAgICAgICAgICAg ICAgIyBpcyBhZGRlZCBiYWNrIHRvICIkQCIgaW4gY2FzZSB3ZSBuZWVkIGl0IGxhdGVyLAoj ICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgJGFyZ3NfY2hhbmdlZCB3YXMgc2V0IHRv ICd0cnVlJy4KIyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQi ICR7MSsiJEAifTsgc2hpZnQ7IGJyZWFrIDs7CiMgICAgICAgICAgZXNhYwojICAgICAgICBk b25lCiMKIyAgICAgICAgIyBPbmx5IGNhbGwgJ2Z1bmNfcXVvdGUnIGhlcmUgaWYgd2UgcHJv Y2Vzc2VkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KIyAgICAgICAgaWYgJGFyZ3NfY2hhbmdl ZDsgdGhlbgojICAgICAgICAgIGZ1bmNfcXVvdGUgZXZhbCAkezErIiRAIn0KIyAgICAgICAg ICBteV9zaWxlbnRfb3B0aW9uX3Jlc3VsdD0kZnVuY19xdW90ZV9yZXN1bHQKIyAgICAgICAg ZmkKIyAgICB9CiMgICAgZnVuY19hZGRfaG9vayBmdW5jX3BhcnNlX29wdGlvbnMgbXlfc2ls ZW50X29wdGlvbgojCiMKIyAgICBteV9vcHRpb25fdmFsaWRhdGlvbiAoKQojICAgIHsKIyAg ICAgICAgJGRlYnVnX2NtZAojCiMgICAgICAgICRvcHRfc2lsZW50ICYmICRvcHRfdmVyYm9z ZSAmJiBmdW5jX2ZhdGFsX2hlbHAgIlwKIyAgICAnLS1zaWxlbnQnIGFuZCAnLS12ZXJib3Nl JyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgojICAgIH0KIyAgICBmdW5jX2Fk ZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBteV9vcHRpb25fdmFsaWRhdGlvbgojCiMg WW91J2xsIGFsc28gbmVlZCB0byBtYW51YWxseSBhbWVuZCAkdXNhZ2VfbWVzc2FnZSB0byBy ZWZsZWN0IHRoZSBleHRyYQojIG9wdGlvbnMgeW91IHBhcnNlLiAgSXQncyBwcmVmZXJhYmxl IHRvIGFwcGVuZCBpZiB5b3UgY2FuLCBzbyB0aGF0CiMgbXVsdGlwbGUgb3B0aW9uIHBhcnNp bmcgaG9va3MgY2FuIGJlIGFkZGVkIHNhZmVseS4KCgojIGZ1bmNfb3B0aW9uc19maW5pc2gg W0FSR10uLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRmluaXNoaW5nIHRo ZSBvcHRpb24gcGFyc2UgbG9vcCAoY2FsbCAnZnVuY19vcHRpb25zJyBob29rcyBBVE0pLgpm dW5jX29wdGlvbnNfZmluaXNoICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBmdW5jX3J1bl9o b29rcyBmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CiAgICBmdW5jX3Byb3BhZ2F0ZV9yZXN1bHQg ZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zX2ZpbmlzaAp9CgoKIyBmdW5jX29wdGlvbnMg W0FSR10uLi4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBbGwgdGhlIGZ1bmN0aW9ucyBj YWxsZWQgaW5zaWRlIGZ1bmNfb3B0aW9ucyBhcmUgaG9va2FibGUuIFNlZSB0aGUKIyBpbmRp dmlkdWFsIGltcGxlbWVudGF0aW9ucyBmb3IgZGV0YWlscy4KZnVuY19ob29rYWJsZSBmdW5j X29wdGlvbnMKZnVuY19vcHRpb25zICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBfR19vcHRp b25zX3F1b3RlZD1mYWxzZQoKICAgIGZvciBteV9mdW5jIGluIG9wdGlvbnNfcHJlcCBwYXJz ZV9vcHRpb25zIHZhbGlkYXRlX29wdGlvbnMgb3B0aW9uc19maW5pc2gKICAgIGRvCiAgICAg IGZ1bmNfdW5zZXQgZnVuY18ke215X2Z1bmN9X3Jlc3VsdAogICAgICBmdW5jX3Vuc2V0IGZ1 bmNfcnVuX2hvb2tzX3Jlc3VsdAogICAgICBldmFsIGZ1bmNfJG15X2Z1bmMgJyR7MSsiJEAi fScKICAgICAgZnVuY19wcm9wYWdhdGVfcmVzdWx0IGZ1bmNfJG15X2Z1bmMgZnVuY19vcHRp b25zCiAgICAgIGlmICRmdW5jX3Byb3BhZ2F0ZV9yZXN1bHRfcmVzdWx0OyB0aGVuCiAgICAg ICAgZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKICAgICAg ICBfR19vcHRpb25zX3F1b3RlZD06CiAgICAgIGZpCiAgICBkb25lCgogICAgJF9HX29wdGlv bnNfcXVvdGVkIHx8IHsKICAgICAgIyBBcyB3ZSAoZnVuY19vcHRpb25zKSBhcmUgdG9wLWxl dmVsIG9wdGlvbnMtcGFyc2VyIGZ1bmN0aW9uIGFuZAogICAgICAjIG5vYm9keSBxdW90ZWQg IiRAIiBmb3IgdXMgeWV0LCB3ZSBuZWVkIHRvIGRvIGl0IGV4cGxpY2l0bHkgZm9yCiAgICAg ICMgY2FsbGVyLgogICAgICBmdW5jX3F1b3RlIGV2YWwgJHsxKyIkQCJ9CiAgICAgIGZ1bmNf b3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfcmVzdWx0CiAgICB9Cn0KCgojIGZ1bmNfb3B0 aW9uc19wcmVwIFtBUkddLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBbGwg aW5pdGlhbGlzYXRpb25zIHJlcXVpcmVkIGJlZm9yZSBzdGFydGluZyB0aGUgb3B0aW9uIHBh cnNlIGxvb3AuCiMgTm90ZSB0aGF0IHdoZW4gY2FsbGluZyBob29rIGZ1bmN0aW9ucywgd2Ug cGFzcyB0aHJvdWdoIHRoZSBsaXN0IG9mCiMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLiAgSWYg YSBob29rIGZ1bmN0aW9uIG1vZGlmaWVzIHRoYXQgbGlzdCwgYW5kCiMgbmVlZHMgdG8gcHJv cGFnYXRlIHRoYXQgYmFjayB0byByZXN0IG9mIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBjb21w bGV0ZQojIG1vZGlmaWVkIGxpc3QgbXVzdCBiZSBwdXQgaW4gJ2Z1bmNfcnVuX2hvb2tzX3Jl c3VsdCcgYmVmb3JlIHJldHVybmluZy4KZnVuY19ob29rYWJsZSBmdW5jX29wdGlvbnNfcHJl cApmdW5jX29wdGlvbnNfcHJlcCAoKQp7CiAgICAkZGVidWdfY21kCgogICAgIyBPcHRpb24g ZGVmYXVsdHM6CiAgICBvcHRfdmVyYm9zZT1mYWxzZQogICAgb3B0X3dhcm5pbmdfdHlwZXM9 CgogICAgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zX3ByZXAgJHsxKyIkQCJ9CiAgICBm dW5jX3Byb3BhZ2F0ZV9yZXN1bHQgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zX3ByZXAK fQoKCiMgZnVuY19wYXJzZV9vcHRpb25zIFtBUkddLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiMgVGhlIG1haW4gb3B0aW9uIHBhcnNpbmcgbG9vcC4KZnVuY19ob29rYWJs ZSBmdW5jX3BhcnNlX29wdGlvbnMKZnVuY19wYXJzZV9vcHRpb25zICgpCnsKICAgICRkZWJ1 Z19jbWQKCiAgICBfR19wYXJzZV9vcHRpb25zX3JlcXVvdGU9ZmFsc2UKICAgICMgdGhpcyBq dXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCiAg ICAgICMgRGVmZXIgdG8gaG9vayBmdW5jdGlvbnMgZm9yIGluaXRpYWwgb3B0aW9uIHBhcnNp bmcsIHNvIHRoZXkKICAgICAgIyBnZXQgcHJpb3JpdHkgaW4gdGhlIGV2ZW50IG9mIHJldXNp bmcgYW4gb3B0aW9uIG5hbWUuCiAgICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfcGFyc2Vfb3B0 aW9ucyAkezErIiRAIn0KICAgICAgZnVuY19wcm9wYWdhdGVfcmVzdWx0IGZ1bmNfcnVuX2hv b2tzIGZ1bmNfcGFyc2Vfb3B0aW9ucwogICAgICBpZiAkZnVuY19wcm9wYWdhdGVfcmVzdWx0 X3Jlc3VsdDsgdGhlbgogICAgICAgIGV2YWwgc2V0IGR1bW15ICIkZnVuY19wYXJzZV9vcHRp b25zX3Jlc3VsdCI7IHNoaWZ0CiAgICAgICAgIyBFdmVuIHRob3VnaCB3ZSBtYXkgaGF2ZSBj aGFuZ2VkICIkQCIsIHdlIHBhc3NlZCB0aGUgIiRAIiBhcnJheQogICAgICAgICMgZG93biBp bnRvIHRoZSBob29rIGFuZCBpdCBxdW90ZWQgaXQgZm9yIHVzIChiZWNhdXNlIHdlIGFyZSBp bgogICAgICAgICMgdGhpcyBpZi1icmFuY2gpLiAgTm8gbmVlZCB0byBxdW90ZSBpdCBhZ2Fp bi4KICAgICAgICBfR19wYXJzZV9vcHRpb25zX3JlcXVvdGU9ZmFsc2UKICAgICAgZmkKCiAg ICAgICMgQnJlYWsgb3V0IG9mIHRoZSBsb29wIGlmIHdlIGFscmVhZHkgcGFyc2VkIGV2ZXJ5 IG9wdGlvbi4KICAgICAgdGVzdCAkIyAtZ3QgMCB8fCBicmVhawoKICAgICAgIyBXZSBleHBl Y3QgdGhhdCBvbmUgb2YgdGhlIG9wdGlvbnMgcGFyc2VkIGluIHRoaXMgZnVuY3Rpb24gbWF0 Y2hlcwogICAgICAjIGFuZCB0aHVzIHdlIHJlbW92ZSBfR19vcHQgZnJvbSAiJEAiIGFuZCBu ZWVkIHRvIHJlLXF1b3RlLgogICAgICBfR19tYXRjaF9wYXJzZV9vcHRpb25zPToKICAgICAg X0dfb3B0PSQxCiAgICAgIHNoaWZ0CiAgICAgIGNhc2UgJF9HX29wdCBpbgogICAgICAgIC0t ZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgnCiAgICAgICAgICAgICAgICAgICAgICBm dW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiID4mMgogICAgICAgICAgICAg ICAgICAgICAgJGRlYnVnX2NtZAogICAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAg LS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQogICAgICAgICAgICAgICAg ICAgICAgc2V0IGR1bW15IC0td2FybmluZ3Mgbm9uZSAkezErIiRAIn0KICAgICAgICAgICAg ICAgICAgICAgIHNoaWZ0CgkJICAgICAgOzsKCiAgICAgICAgLS13YXJuaW5nc3wtLXdhcm5p bmd8LVcpCiAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICQjID0gMCAmJiBmdW5jX21p c3NpbmdfYXJnICRfR19vcHQ7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgX0dfcGFy c2Vfb3B0aW9uc19yZXF1b3RlPToKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAg ICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgJHdh cm5pbmdfY2F0ZWdvcmllcyAkMSIgaW4KICAgICAgICAgICAgICAgICAgICAgICAgKiIgJDEg IiopCiAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyBzcGFjZSBwcmV2ZW50 cyBtYXRjaGluZyBsYXN0ICQxIGFib3ZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu Y19hcHBlbmRfdW5pcSBvcHRfd2FybmluZ190eXBlcyAiICQxIgogICAgICAgICAgICAgICAg ICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICphbGwpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcwog ICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICpu b25lKQogICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPW5vbmUK ICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9OgogICAgICAgICAgICAg ICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICplcnJvcikKICAgICAg ICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz0kd2FybmluZ19jYXRlZ29y aWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPWZ1bmNfZmF0YWxf ZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAg ICAgICAqKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgXAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB3YXJuaW5nIGNhdGVn b3J5OiAnJDEnIgogICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAg ICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgICBzaGlmdAogICAgICAgICAgICAg ICAgICAgICAgOzsKCiAgICAgICAgLS12ZXJib3NlfC12KSBvcHRfdmVyYm9zZT06IDs7CiAg ICAgICAgLS12ZXJzaW9uKSAgICBmdW5jX3ZlcnNpb24gOzsKICAgICAgICAtXD98LWgpICAg ICAgIGZ1bmNfdXNhZ2UgOzsKICAgICAgICAtLWhlbHApICAgICAgIGZ1bmNfaGVscCA7OwoK CSMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnMgKHBsdWdpbnMgbWF5IG5lZWQg dGhpcyk6CgktLSo9KikgICAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzICIkX0dfb3B0IgoJICAg ICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2VxdWFsc19saHMiIFwKICAgICAg ICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfZXF1YWxzX3JocyIgJHsxKyIkQCJ9 CiAgICAgICAgICAgICAgICAgICAgICBzaGlmdAogICAgICAgICAgICAgICAgICAgICAgOzsK CiAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gc2hvcnQgb3B0aW9uczoKICAgICAgICAt VyopCiAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29w dCIKICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRf b3B0X25hbWUiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfc2hv cnRfb3B0X2FyZyIgJHsxKyIkQCJ9CiAgICAgICAgICAgICAgICAgICAgICBzaGlmdAogICAg ICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQg c2hvcnQgb3B0aW9uczoKICAgICAgICAtXD8qfC1oKnwtdip8LXgqKQogICAgICAgICAgICAg ICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCiAgICAgICAgICAgICAg ICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezEr IiRAIn0KICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgICAgICAgICAg ICA7OwoKICAgICAgICAtLSkgICAgICAgICAgIF9HX3BhcnNlX29wdGlvbnNfcmVxdW90ZT06 IDsgYnJlYWsgOzsKICAgICAgICAtKikgICAgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidW5y ZWNvZ25pc2VkIG9wdGlvbjogJyRfR19vcHQnIiA7OwogICAgICAgICopICAgICAgICAgICAg c2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07IHNoaWZ0CiAgICAgICAgICAgICAgICAg ICAgICBfR19tYXRjaF9wYXJzZV9vcHRpb25zPWZhbHNlCiAgICAgICAgICAgICAgICAgICAg ICBicmVhawogICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgZXNhYwoKICAgICAgaWYg JF9HX21hdGNoX3BhcnNlX29wdGlvbnM7IHRoZW4KICAgICAgICBfR19wYXJzZV9vcHRpb25z X3JlcXVvdGU9OgogICAgICBmaQogICAgZG9uZQoKICAgIGlmICRfR19wYXJzZV9vcHRpb25z X3JlcXVvdGU7IHRoZW4KICAgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1l dGVycyBmb3IgY2FsbGVyCiAgICAgIGZ1bmNfcXVvdGUgZXZhbCAkezErIiRAIn0KICAgICAg ZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9yZXN1bHQKICAgIGZpCn0K CgojIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgojIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQojIFBlcmZvcm0gYW55IHNhbml0eSBjaGVja3Mgb24gb3B0aW9uIHNl dHRpbmdzIGFuZC9vciB1bmNvbnN1bWVkCiMgYXJndW1lbnRzLgpmdW5jX2hvb2thYmxlIGZ1 bmNfdmFsaWRhdGVfb3B0aW9ucwpmdW5jX3ZhbGlkYXRlX29wdGlvbnMgKCkKewogICAgJGRl YnVnX2NtZAoKICAgICMgRGlzcGxheSBhbGwgd2FybmluZ3MgaWYgLVcgd2FzIG5vdCBnaXZl bi4KICAgIHRlc3QgLW4gIiRvcHRfd2FybmluZ190eXBlcyIgfHwgb3B0X3dhcm5pbmdfdHlw ZXM9IiAkd2FybmluZ19jYXRlZ29yaWVzIgoKICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfdmFs aWRhdGVfb3B0aW9ucyAkezErIiRAIn0KICAgIGZ1bmNfcHJvcGFnYXRlX3Jlc3VsdCBmdW5j X3J1bl9ob29rcyBmdW5jX3ZhbGlkYXRlX29wdGlvbnMKCiAgICAjIEJhaWwgaWYgdGhlIG9w dGlvbnMgd2VyZSBzY3Jld2VkIQogICAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKfQoKCgoj IyAtLS0tLS0tLS0tLS0tLS0tLSAjIwojIyBIZWxwZXIgZnVuY3Rpb25zLiAjIwojIyAtLS0t LS0tLS0tLS0tLS0tLSAjIwoKIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGhlbHBlciBm dW5jdGlvbnMgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUKIyBob29rYWJsZSBvcHRpb24gcGFy c2VyIGZyYW1ld29yayBpbiBhc2NpaS1iZXRpY2FsIG9yZGVyLgoKCiMgZnVuY19mYXRhbF9o ZWxwIEFSRy4uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBFY2hvIHByb2dyYW0gbmFt ZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQojIGEg aGVscCBoaW50LCBhbmQgZXhpdC4KZnVuY19mYXRhbF9oZWxwICgpCnsKICAgICRkZWJ1Z19j bWQKCiAgICBldmFsIFwkRUNITyBcIiJVc2FnZTogJHVzYWdlIlwiCiAgICBldmFsIFwkRUNI TyBcIiIkZmF0YWxfaGVscCJcIgogICAgZnVuY19lcnJvciAkezErIiRAIn0KICAgIGV4aXQg JEVYSVRfRkFJTFVSRQp9CgoKIyBmdW5jX2hlbHAKIyAtLS0tLS0tLS0KIyBFY2hvIGxvbmcg aGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KZnVuY19oZWxwICgp CnsKICAgICRkZWJ1Z19jbWQKCiAgICBmdW5jX3VzYWdlX21lc3NhZ2UKICAgICRFQ0hPICIk bG9uZ19oZWxwX21lc3NhZ2UiCiAgICBleGl0IDAKfQoKCiMgZnVuY19taXNzaW5nX2FyZyBB UkdOQU1FCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRWNobyBwcm9ncmFtIG5hbWUg cHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAojIGV4 aXRfY21kLgpmdW5jX21pc3NpbmdfYXJnICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBmdW5j X2Vycm9yICJNaXNzaW5nIGFyZ3VtZW50IGZvciAnJDEnLiIKICAgIGV4aXRfY21kPWV4aXQK fQoKCiMgZnVuY19zcGxpdF9lcXVhbHMgU1RSSU5HCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiMgU2V0IGZ1bmNfc3BsaXRfZXF1YWxzX2xocyBhbmQgZnVuY19zcGxpdF9lcXVhbHNf cmhzIHNoZWxsIHZhcmlhYmxlcwojIGFmdGVyIHNwbGl0dGluZyBTVFJJTkcgYXQgdGhlICc9 JyBzaWduLgp0ZXN0IC16ICIkX0dfSEFWRV9YU0lfT1BTIiBcCiAgICAmJiAoZXZhbCAneD1h L2IvYzsKICAgICAgdGVzdCA1YWEvYmIvY2MgPSAiJHsjeH0ke3glJS8qfSR7eCUvKn0ke3gj Ki99JHt4IyMqL30iJykgMj4vZGV2L251bGwgXAogICAgJiYgX0dfSEFWRV9YU0lfT1BTPXll cwoKaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyIKdGhlbgogICMgVGhpcyBpcyBh biBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRp b24uLi4KICBldmFsICdmdW5jX3NwbGl0X2VxdWFscyAoKQogIHsKICAgICAgJGRlYnVnX2Nt ZAoKICAgICAgZnVuY19zcGxpdF9lcXVhbHNfbGhzPSR7MSUlPSp9CiAgICAgIGZ1bmNfc3Bs aXRfZXF1YWxzX3Jocz0kezEjKj19CiAgICAgIGlmIHRlc3QgIngkZnVuY19zcGxpdF9lcXVh bHNfbGhzIiA9ICJ4JDEiOyB0aGVuCiAgICAgICAgZnVuY19zcGxpdF9lcXVhbHNfcmhzPQog ICAgICBmaQogIH0nCmVsc2UKICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcg ZXhwciwgd2hpY2ggaXMgb2Z0ZW4gYSBzaGVsbCBidWlsdGluLgogIGZ1bmNfc3BsaXRfZXF1 YWxzICgpCiAgewogICAgICAkZGVidWdfY21kCgogICAgICBmdW5jX3NwbGl0X2VxdWFsc19s aHM9YGV4cHIgIngkMSIgOiAneFwoW149XSpcKSdgCiAgICAgIGZ1bmNfc3BsaXRfZXF1YWxz X3Jocz0KICAgICAgdGVzdCAieCRmdW5jX3NwbGl0X2VxdWFsc19saHM9IiA9ICJ4JDEiIFwK ICAgICAgICB8fCBmdW5jX3NwbGl0X2VxdWFsc19yaHM9YGV4cHIgIngkMSIgOiAneFtePV0q PVwoLipcKSQnYAogIH0KZmkgI2Z1bmNfc3BsaXRfZXF1YWxzCgoKIyBmdW5jX3NwbGl0X3No b3J0X29wdCBTSE9SVE9QVAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2V0 IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2Fy ZyBzaGVsbAojIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhl IDJuZCBjaGFyYWN0ZXIuCmlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiCnRoZW4K ICAjIFRoaXMgaXMgYW4gWFNJIGNvbXBhdGlibGUgc2hlbGwsIGFsbG93aW5nIGEgZmFzdGVy IGltcGxlbWVudGF0aW9uLi4uCiAgZXZhbCAnZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKICB7 CiAgICAgICRkZWJ1Z19jbWQKCiAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEj Pz99CiAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9z aG9ydF9vcHRfYXJnIn0KICB9JwplbHNlCiAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRv IHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KICBmdW5jX3Nw bGl0X3Nob3J0X29wdCAoKQogIHsKICAgICAgJGRlYnVnX2NtZAoKICAgICAgZnVuY19zcGxp dF9zaG9ydF9vcHRfbmFtZT1gZXhwciAieCQxIiA6ICd4XCgtLlwpJ2AKICAgICAgZnVuY19z cGxpdF9zaG9ydF9vcHRfYXJnPWBleHByICJ4JDEiIDogJ3gtLlwoLipcKSQnYAogIH0KZmkg I2Z1bmNfc3BsaXRfc2hvcnRfb3B0CgoKIyBmdW5jX3VzYWdlCiMgLS0tLS0tLS0tLQojIEVj aG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KZnVu Y191c2FnZSAoKQp7CiAgICAkZGVidWdfY21kCgogICAgZnVuY191c2FnZV9tZXNzYWdlCiAg ICAkRUNITyAiUnVuICckcHJvZ25hbWUgLS1oZWxwIHwke1BBR0VSLW1vcmV9JyBmb3IgZnVs bCB1c2FnZSIKICAgIGV4aXQgMAp9CgoKIyBmdW5jX3VzYWdlX21lc3NhZ2UKIyAtLS0tLS0t LS0tLS0tLS0tLS0KIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRw dXQuCmZ1bmNfdXNhZ2VfbWVzc2FnZSAoKQp7CiAgICAkZGVidWdfY21kCgogICAgZXZhbCBc JEVDSE8gXCIiVXNhZ2U6ICR1c2FnZSJcIgogICAgZWNobwogICAgJFNFRCAtbiAnc3xeIyB8 fAogICAgICAgIC9eV3JpdHRlbiBieS97CiAgICAgICAgICB4O3A7eAogICAgICAgIH0KCWgK CS9eV3JpdHRlbiBieS9xJyA8ICIkcHJvZ3BhdGgiCiAgICBlY2hvCiAgICBldmFsIFwkRUNI TyBcIiIkdXNhZ2VfbWVzc2FnZSJcIgp9CgoKIyBmdW5jX3ZlcnNpb24KIyAtLS0tLS0tLS0t LS0KIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQu CiMgVGhlIHZlcnNpb24gbWVzc2FnZSBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgY2FsbGluZyBm aWxlJ3MgaGVhZGVyCiMgY29tbWVudHMsIHdpdGggbGVhZGluZyAnIyAnIHN0cmlwcGVkOgoj ICAgMS4gRmlyc3QgZGlzcGxheSB0aGUgcHJvZ25hbWUgYW5kIHZlcnNpb24KIyAgIDIuIEZv bGxvd2VkIGJ5IHRoZSBoZWFkZXIgY29tbWVudCBsaW5lIG1hdGNoaW5nICAvXiMgV3JpdHRl biBieSAvCiMgICAzLiBUaGVuIGEgYmxhbmsgbGluZSBmb2xsb3dlZCBieSB0aGUgZmlyc3Qg Zm9sbG93aW5nIGxpbmUgbWF0Y2hpbmcKIyAgICAgIC9eIyBDb3B5cmlnaHQgLwojICAgNC4g SW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW55IGxpbmVzIGJldHdlZW4gdGhlIHByZXZpb3Vz IG1hdGNoZXMsCiMgICAgICBleGNlcHQgbGluZXMgcHJlY2VkaW5nIHRoZSBpbnRlcnZlbmlu ZyBjb21wbGV0ZWx5IGJsYW5rIGxpbmUuCiMgRm9yIGV4YW1wbGUsIHNlZSB0aGUgaGVhZGVy IGNvbW1lbnRzIG9mIHRoaXMgZmlsZS4KZnVuY192ZXJzaW9uICgpCnsKICAgICRkZWJ1Z19j bWQKCiAgICBwcmludGYgJyVzXG4nICIkcHJvZ25hbWUgJHNjcmlwdHZlcnNpb24iCiAgICAk U0VEIC1uICcKICAgICAgICAvXiMgV3JpdHRlbiBieSAvIWIKICAgICAgICBzfF4jIHx8OyBw OyBuCgogICAgICAgIDpmd2QyYmxuawogICAgICAgIC8uLyB7CiAgICAgICAgICBuCiAgICAg ICAgICBiIGZ3ZDJibG5rCiAgICAgICAgfQogICAgICAgIHA7IG4KCiAgICAgICAgOmhvbGR3 cm50CiAgICAgICAgc3xeIyB8fAogICAgICAgIHN8XiMgKiR8fAogICAgICAgIC9eQ29weXJp Z2h0IC8hewogICAgICAgICAgLy4vSAogICAgICAgICAgbgogICAgICAgICAgYiBob2xkd3Ju dAogICAgICAgIH0KCiAgICAgICAgc3xcKChDKVwpWyAwLTksLV0qWyAsLV1cKFsxLTldWzAt OV0qIFwpfFwxIFwyfAogICAgICAgIEcKICAgICAgICBzfFwoXG5cKVxuKnxcMXxnCiAgICAg ICAgcDsgcScgPCAiJHByb2dwYXRoIgoKICAgIGV4aXQgJD8KfQoKCiMgTG9jYWwgdmFyaWFi bGVzOgojIG1vZGU6IHNoZWxsLXNjcmlwdAojIHNoLWluZGVudGF0aW9uOiAyCiMgZXZhbDog KGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQojIHRpbWUtc3RhbXAt cGF0dGVybjogIjMwL3NjcmlwdHZlcnNpb249JTp5LSUwMm0tJTAyZC4lMDJIOyAjIFVUQyIK IyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKIyBFbmQ6CgojIFNldCBhIHZlcnNpb24g c3RyaW5nLgpzY3JpcHR2ZXJzaW9uPScoR05VIGxpYnRvb2wpIDIuNS4wLjgxLTNjZjUyJwoK IyBmdW5jX3ZlcnNpb24KIyAtLS0tLS0tLS0tLS0KIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0 byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCmZ1bmNfdmVyc2lvbiAoKQp7CiAgICAkZGVi dWdfY21kCgoJeWVhcj1gZGF0ZSArJVlgCgoJY2F0IDw8RU9GCiRwcm9nbmFtZSAkc2NyaXB0 dmVyc2lvbgpDb3B5cmlnaHQgKEMpICR5ZWFyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgpMaWNlbnNlIEdQTHYyKzogR05VIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIgPGh0dHBz Oi8vZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4KVGhpcyBpcyBmcmVlIHNvZnR3YXJlOiB5 b3UgYXJlIGZyZWUgdG8gY2hhbmdlIGFuZCByZWRpc3RyaWJ1dGUgaXQuClRoZXJlIGlzIE5P IFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuCgpPcmlnaW5hbGx5 IHdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKFNlZSBBVVRIT1JTIGZvciBj b21wbGV0ZSBjb250cmlidXRvciBsaXN0aW5nKQpFT0YKCiAgICBleGl0ICQ/Cn0KCgojIGZ1 bmNfZWNobyBBUkcuLi4KIyAtLS0tLS0tLS0tLS0tLS0tCiMgTGlidG9vbCBhbHNvIGRpc3Bs YXlzIHRoZSBjdXJyZW50IG1vZGUgaW4gbWVzc2FnZXMsIHNvIG92ZXJyaWRlCiMgZnVuY2xp Yi5zaCBmdW5jX2VjaG8gd2l0aCB0aGlzIGN1c3RvbSBkZWZpbml0aW9uLgpmdW5jX2VjaG8g KCkKewogICAgJGRlYnVnX2NtZAoKICAgIF9HX21lc3NhZ2U9JCoKCiAgICBmdW5jX2VjaG9f SUZTPSRJRlMKICAgIElGUz0kbmwKICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBk bwogICAgICBJRlM9JGZ1bmNfZWNob19JRlMKICAgICAgJEVDSE8gIiRwcm9nbmFtZSR7b3B0 X21vZGUrOiAkb3B0X21vZGV9OiAkX0dfbGluZSIKICAgIGRvbmUKICAgIElGUz0kZnVuY19l Y2hvX0lGUwp9CgoKIyBmdW5jX3dhcm5pbmcgQVJHLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0t LQojIExpYnRvb2wgd2FybmluZ3MgYXJlIG5vdCBjYXRlZ29yaXplZCwgc28gb3ZlcnJpZGUg ZnVuY2xpYi5zaAojIGZ1bmNfd2FybmluZyB3aXRoIHRoaXMgc2ltcGxlciBkZWZpbml0aW9u LgpmdW5jX3dhcm5pbmcgKCkKewogICAgJGRlYnVnX2NtZAoKICAgICR3YXJuaW5nX2Z1bmMg JHsxKyIkQCJ9Cn0KCgojIyAtLS0tLS0tLS0tLS0tLS0tICMjCiMjIE9wdGlvbnMgcGFyc2lu Zy4gIyMKIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwoKIyBIb29rIGluIHRoZSBmdW5jdGlvbnMg dG8gbWFrZSBzdXJlIG91ciBvd24gb3B0aW9ucyBhcmUgcGFyc2VkIGR1cmluZwojIHRoZSBv cHRpb24gcGFyc2luZyBsb29wLgoKdXNhZ2U9JyRwcm9ncGF0aCBbT1BUSU9OXS4uLiBbTU9E RS1BUkddLi4uJwoKIyBTaG9ydCBoZWxwIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gJy1oJy4K dXNhZ2VfbWVzc2FnZT0iT3B0aW9uczoKICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNo b3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCiAgICAgICAtLWRlYnVnICAgICAgICAg ICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCiAgIC1uLCAtLWRyeS1ydW4gICAg ICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcwog ICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9u IGluZm9ybWF0aW9uIGFuZCBleGl0CiAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ug b3BlcmF0aW9uIG1vZGUgTU9ERQogICAgICAgLS1uby13YXJuaW5ncyAgICAgICAgZXF1aXZh bGVudCB0byAnLVdub25lJwogICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVt b3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcwogICAgICAgLS1xdWlldCwgLS1z aWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcwogICAgICAgLS10 YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFn IFRBRwogICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgbW9yZSBpbmZvcm1hdGlv bmFsIG1lc3NhZ2VzIHRoYW4gZGVmYXVsdAogICAgICAgLS12ZXJzaW9uICAgICAgICAgICAg cHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgogICAtVywgLS13YXJuaW5ncz1DQVRFR09SWSAg cmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFthbGxdCiAgIC1oLCAt LWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVs cCBtZXNzYWdlCiIKCiMgQWRkaXRpb25hbCB0ZXh0IGFwcGVuZGVkIHRvICd1c2FnZV9tZXNz YWdlJyBpbiByZXNwb25zZSB0byAnLS1oZWxwJy4KZnVuY19oZWxwICgpCnsKICAgICRkZWJ1 Z19jbWQKCiAgICBmdW5jX3VzYWdlX21lc3NhZ2UKICAgICRFQ0hPICIkbG9uZ19oZWxwX21l c3NhZ2UKCk1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKCiAgICAgICBjbGVh biAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQogICAg ICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9v bCBvYmplY3QKICAgICAgIGV4ZWN1dGUgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJy YXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQogICAgICAgZmluaXNoICAgICAgICAgIGNv bXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKICAgICAgIGlu c3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcwogICAgICAg bGluayAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQogICAg ICAgdW5pbnN0YWxsICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQg ZGlyZWN0b3J5CgpNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVu IHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCictLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlh dGVkIGFzICdNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KVHJ5ICck cHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2Ny aXB0aW9uIG9mIE1PREUuCgpXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJl IGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKaW5jbHVkZSB0aGUgZm9sbG93aW5n IGluZm9ybWF0aW9uOgoKICAgICAgIGhvc3QtdHJpcGxldDogICAkaG9zdAogICAgICAgc2hl bGw6ICAgICAgICAgICRTSEVMTAogICAgICAgY29tcGlsZXI6ICAgICAgICRMVENDCiAgICAg ICBjb21waWxlciBmbGFnczogJExUQ0ZMQUdTCiAgICAgICBsaW5rZXI6ICAgICAgICAgJExE IChnbnU/ICR3aXRoX2dudV9sZCkKICAgICAgIHZlcnNpb246ICAgICAgICAkcHJvZ25hbWUg KEdOVSBsaWJ0b29sKSAyLjUuMC44MS0zY2Y1MgogICAgICAgYXV0b21ha2U6ICAgICAgIGAo JEFVVE9NQUtFIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgCiAgICAgICBhdXRv Y29uZjogICAgICAgYCgkQVVUT0NPTkYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAx cWAKClJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KR05VIGxpYnRvb2wg aG9tZSBwYWdlOiA8aHR0cHM6Ly93d3cuZ251Lm9yZy9zL2xpYnRvb2wvPi4KR2VuZXJhbCBo ZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHBzOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+ LiIKICAgIGV4aXQgMAp9CgoKIyBmdW5jX2xvMm8gT0JKRUNULU5BTUUKIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0KIyBUcmFuc2Zvcm0gT0JKRUNULU5BTUUgZnJvbSBhICcubG8nIHN1ZmZp eCB0byB0aGUgcGxhdGZvcm0gc3BlY2lmaWMKIyBvYmplY3Qgc3VmZml4LgoKbG8ybz1zL1xc LmxvXCQvLiRvYmpleHQvCm8ybG89cy9cXC4kb2JqZXh0XCQvLmxvLwoKaWYgdGVzdCB5ZXMg PSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KICBldmFsICdmdW5jX2xvMm8gKCkKICB7CiAg ICBjYXNlICQxIGluCiAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJG9i amV4dCA7OwogICAgICAqICAgKSBmdW5jX2xvMm9fcmVzdWx0PSQxICAgICAgICAgICAgICAg OzsKICAgIGVzYWMKICB9JwoKICAjIGZ1bmNfeGZvcm0gTElCT0JKLU9SLVNPVVJDRQogICMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIyBUcmFuc2Zvcm0gTElCT0JKLU9SLVNP VVJDRSBmcm9tIGEgJy5vJyBvciAnLmMnIChvciBvdGhlcndpc2UpCiAgIyBzdWZmaXggdG8g YSAnLmxvJyBsaWJ0b29sLW9iamVjdCBzdWZmaXguCiAgZXZhbCAnZnVuY194Zm9ybSAoKQog IHsKICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KICB9JwplbHNlCiAgIyAuLi5v dGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIHNlZC4KICBmdW5jX2xvMm8gKCkKICB7CiAg ICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJGxvMm8iYAogIH0KCiAg ZnVuY194Zm9ybSAoKQogIHsKICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJDEiIHwg JFNFRCAnc3xcLlteLl0qJHwubG98J2AKICB9CmZpCgoKIyBmdW5jX2ZhdGFsX2NvbmZpZ3Vy YXRpb24gQVJHLi4uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEVjaG8g cHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxv d2VkIGJ5CiMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCmZ1bmNf ZmF0YWxfY29uZmlndXJhdGlvbiAoKQp7CiAgICBmdW5jX2ZhdGFsX2Vycm9yICR7MSsiJEAi fSBcCiAgICAgICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5m b3JtYXRpb24uIiBcCiAgICAgICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKfQoKCiMg ZnVuY19jb25maWcKIyAtLS0tLS0tLS0tLQojIERpc3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24g Zm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlwdC4KZnVuY19jb25maWcgKCkKewogICAg cmVfYmVnaW5jZj0nXiMgIyMjIEJFR0lOIExJQlRPT0wnCiAgICByZV9lbmRjZj0nXiMgIyMj IEVORCBMSUJUT09MJwoKICAgICMgRGVmYXVsdCBjb25maWd1cmF0aW9uLgogICAgJFNFRCAi MSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHBy b2dwYXRoIgoKICAgICMgTm93IHByaW50IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRh Z3MuCiAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KICAgICAgJFNFRCAtbiAiLyRy ZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJ RzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCiAgICBkb25lCgogICAgZXhpdCAkPwp9 CgoKIyBmdW5jX2ZlYXR1cmVzCiMgLS0tLS0tLS0tLS0tLQojIERpc3BsYXkgdGhlIGZlYXR1 cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KZnVuY19mZWF0dXJlcyAoKQp7CiAgICBl Y2hvICJob3N0OiAkaG9zdCIKICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xp YnMiOyB0aGVuCiAgICAgIGVjaG8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgogICAgZWxz ZQogICAgICBlY2hvICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCiAgICBmaQogICAgaWYg dGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgogICAgICBlY2hvICJlbmFibGUg c3RhdGljIGxpYnJhcmllcyIKICAgIGVsc2UKICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMg bGlicmFyaWVzIgogICAgZmkKCiAgICBleGl0ICQ/Cn0KCgojIGZ1bmNfZW5hYmxlX3RhZyBU QUdOQU1FCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBWZXJpZnkgdGhhdCBUQUdOQU1F IGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCiMgZW5h YmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28gYWRkIFRBR05BTUUgdG8gdGhlIGdsb2Jh bCAkdGFnbGlzdAojIHZhcmlhYmxlIGhlcmUuCmZ1bmNfZW5hYmxlX3RhZyAoKQp7CiAgICAj IEdsb2JhbCB2YXJpYWJsZToKICAgIHRhZ25hbWU9JDEKCiAgICByZV9iZWdpbmNmPSJeIyAj IyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgogICAgcmVfZW5kY2Y9 Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgogICAgc2VkX2V4 dHJhY3RjZj0vJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcAoKICAgICMgVmFsaWRhdGUgdGFn bmFtZS4KICAgIGNhc2UgJHRhZ25hbWUgaW4KICAgICAgKlshLV9BLVphLXowLTksL10qKQog ICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgog ICAgICAgIDs7CiAgICBlc2FjCgogICAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQi IEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKICAgICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkg bWFya2VkLgogICAgY2FzZSAkdGFnbmFtZSBpbgogICAgICAgIENDKSA7OwogICAgKikKICAg ICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4m MTsgdGhlbgoJICB0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKCgkgICMgRXZhbHVhdGUg dGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCgkgICMg YW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwg YnV0CgkgICMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFj a3F1b3RlcyB3aXRoaW4KCSAgIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBz OgoJICBleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9n cGF0aCJgCgkgIGV2YWwgIiRleHRyYWN0ZWRjZiIKICAgICAgICBlbHNlCgkgIGZ1bmNfZXJy b3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgogICAgICAgIGZpCiAgICAgICAg OzsKICAgIGVzYWMKfQoKCiMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCiMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3Jvcywg YW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKIyByZWxlYXNlIG9mIGxpYnRvb2wu CmZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQp7CiAgICBpZiB0ZXN0ICIkcGFja2FnZV9y ZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KICAgICAgaWYgdGVzdCAiJFZF UlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KICAgICAgICBpZiB0ZXN0IC16ICIk bWFjcm9fdmVyc2lvbiI7IHRoZW4KICAgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiRwcm9n bmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJ T04sIGJ1dCB0aGUKJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21l cyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCiRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0 ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KJHByb2du YW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgpfTFRfRU9GCiAgICAgICAgZWxzZQogICAg ICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVy cm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQokcHJvZ25hbWU6IGRl ZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3Zl cnNpb24uCiRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGgg bWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KJHByb2duYW1lOiBhbmQgcnVuIGF1dG9j b25mIGFnYWluLgpfTFRfRU9GCiAgICAgICAgZmkKICAgICAgZWxzZQogICAgICAgIGNhdCA+ JjIgPDxfTFRfRU9GCiRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMg aXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAokcHJv Z25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBy ZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCiRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0 ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNp b24KJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFn YWluLgpfTFRfRU9GCiAgICAgIGZpCgogICAgICBleGl0ICRFWElUX01JU01BVENICiAgICBm aQp9CgoKIyBsaWJ0b29sX29wdGlvbnNfcHJlcCBbQVJHXS4uLgojIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiMgUHJlcGFyYXRpb24gZm9yIG9wdGlvbnMgcGFyc2VkIGJ5IGxp YnRvb2wuCmxpYnRvb2xfb3B0aW9uc19wcmVwICgpCnsKICAgICRkZWJ1Z19tb2RlCgogICAg IyBPcHRpb24gZGVmYXVsdHM6CiAgICBvcHRfY29uZmlnPWZhbHNlCiAgICBvcHRfZGxvcGVu PQogICAgb3B0X2RyeV9ydW49ZmFsc2UKICAgIG9wdF9oZWxwPWZhbHNlCiAgICBvcHRfbW9k ZT0KICAgIG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQogICAgb3B0X3F1aWV0PWZhbHNl CgogICAgbm9ub3B0PQogICAgcHJlc2VydmVfYXJncz0KCiAgICBfR19yY19sdF9vcHRpb25z X3ByZXA9OgoKICAgICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFz IHRoZSBmaXJzdCBhcmd1bWVudAogICAgY2FzZSAkMSBpbgogICAgY2xlYW58Y2xlYXxjbGV8 Y2wpCiAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hp ZnQKICAgICAgOzsKICAgIGNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCiAg ICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAog ICAgICA7OwogICAgZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKICAgICAg c2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CiAgICAg IDs7CiAgICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKICAgICAgc2hpZnQ7IHNldCBk dW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKICAgICAgOzsKICAgIGluc3Rh bGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCiAgICAgIHNoaWZ0OyBzZXQgZHVtbXkg LS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAogICAgICA7OwogICAgbGlua3xsaW58 bGl8bCkKICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNo aWZ0CiAgICAgIDs7CiAgICB1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5p bnN8dW5pbnx1bml8dW58dSkKICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0 YWxsICR7MSsiJEAifTsgc2hpZnQKICAgICAgOzsKICAgICopCiAgICAgIF9HX3JjX2x0X29w dGlvbnNfcHJlcD1mYWxzZQogICAgICA7OwogICAgZXNhYwoKICAgIGlmICRfR19yY19sdF9v cHRpb25zX3ByZXA7IHRoZW4KICAgICAgIyBQYXNzIGJhY2sgdGhlIGxpc3Qgb2Ygb3B0aW9u cy4KICAgICAgZnVuY19xdW90ZSBldmFsICR7MSsiJEAifQogICAgICBsaWJ0b29sX29wdGlv bnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcXVvdGVfcmVzdWx0CiAgICBmaQp9CmZ1bmNfYWRkX2hv b2sgZnVuY19vcHRpb25zX3ByZXAgbGlidG9vbF9vcHRpb25zX3ByZXAKCgojIGxpYnRvb2xf cGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQojIFByb3ZpZGUgaGFuZGxpbmcgZm9yIGxpYnRvb2wgc3BlY2lmaWMgb3B0aW9ucy4K bGlidG9vbF9wYXJzZV9vcHRpb25zICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBfR19yY19s dF9wYXJzZV9vcHRpb25zPWZhbHNlCgogICAgIyBQZXJmb3JtIG91ciBvd24gbG9vcCB0byBj b25zdW1lIGFzIG1hbnkgb3B0aW9ucyBhcyBwb3NzaWJsZSBpbgogICAgIyBlYWNoIGl0ZXJh dGlvbi4KICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCiAgICAgIF9HX21hdGNoX2x0X3Bh cnNlX29wdGlvbnM9OgogICAgICBfR19vcHQ9JDEKICAgICAgc2hpZnQKICAgICAgY2FzZSAk X0dfb3B0IGluCiAgICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQogICAgICAgICAgICAg ICAgICAgICAgICBvcHRfZHJ5X3J1bj06CiAgICAgICAgICAgICAgICAgICAgICAgIDs7Cgog ICAgICAgIC0tY29uZmlnKSAgICAgICBmdW5jX2NvbmZpZyA7OwoKICAgICAgICAtLWRsb3Bl bnwtZGxvcGVuKQogICAgICAgICAgICAgICAgICAgICAgICBvcHRfZGxvcGVuPSIke29wdF9k bG9wZW4rJG9wdF9kbG9wZW4KfSQxIgogICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAog ICAgICAgICAgICAgICAgICAgICAgICA7OwoKICAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBz KQogICAgICAgICAgICAgICAgICAgICAgICBvcHRfcHJlc2VydmVfZHVwX2RlcHM9OiA7OwoK ICAgICAgICAtLWZlYXR1cmVzKSAgICAgZnVuY19mZWF0dXJlcyA7OwoKICAgICAgICAtLWZp bmlzaCkgICAgICAgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdCA7 OwoKICAgICAgICAtLWhlbHApICAgICAgICAgb3B0X2hlbHA9OiA7OwoKICAgICAgICAtLWhl bHAtYWxsKSAgICAgb3B0X2hlbHA9JzogaGVscC1hbGwnIDs7CgogICAgICAgIC0tbW9kZSkg ICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJl YWsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0X21vZGU9JDEKICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSAkMSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICMgVmFsaWQg bW9kZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW58Y29tcGls ZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVy cm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgKikgZnVuY19lcnJvciAiaW52YWxpZCBh cmd1bWVudCBmb3IgJF9HX29wdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0 X2NtZD1leGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICAgICBlc2FjCiAg ICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgICAgICAgICAgICAgIDs7 CgogICAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCiAgICAgICAgICAgICAgICAgICAg ICAgIG9wdF9xdWlldD1mYWxzZQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVu ZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKICAgICAgICAgICAgICAgICAgICAgICAgOzsK CiAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQogICAgICAg ICAgICAgICAgICAgICAgICBvcHRfd2FybmluZz1mYWxzZQogICAgICAgICAgICAgICAgICAg ICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKICAgICAgICAgICAg ICAgICAgICAgICAgOzsKCiAgICAgICAgLS1uby12ZXJib3NlKQogICAgICAgICAgICAgICAg ICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQogICAgICAgICAgICAgICAgICAgICAgICBmdW5j X2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKICAgICAgICAgICAgICAgICAgICAg ICAgOzsKCiAgICAgICAgLS1zaWxlbnR8LS1xdWlldCkKICAgICAgICAgICAgICAgICAgICAg ICAgb3B0X3F1aWV0PToKICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZlcmJvc2U9ZmFs c2UKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAi ICRfR19vcHQiCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CgogICAgICAgIC0tdGFnKSAg ICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJl YWsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3RhZz0kMQogICAgICAgICAgICAgICAg ICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCAkMSIKICAgICAg ICAgICAgICAgICAgICAgICAgZnVuY19lbmFibGVfdGFnICIkMSIKICAgICAgICAgICAgICAg ICAgICAgICAgc2hpZnQKICAgICAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgLS12 ZXJib3NlfC12KSAgIG9wdF9xdWlldD1mYWxzZQogICAgICAgICAgICAgICAgICAgICAgICBv cHRfdmVyYm9zZT06CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNl cnZlX2FyZ3MgIiAkX0dfb3B0IgogICAgICAgICAgICAgICAgICAgICAgICA7OwoKICAgICAg ICAjIEFuIG9wdGlvbiBub3QgaGFuZGxlZCBieSB0aGlzIGhvb2sgZnVuY3Rpb246CiAgICAg ICAgKikgICAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9IDsgc2hp ZnQKICAgICAgICAgICAgICAgICAgICAgICAgX0dfbWF0Y2hfbHRfcGFyc2Vfb3B0aW9ucz1m YWxzZQogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAg ICAgICA7OwogICAgICBlc2FjCiAgICAgICRfR19tYXRjaF9sdF9wYXJzZV9vcHRpb25zICYm IF9HX3JjX2x0X3BhcnNlX29wdGlvbnM9OgogICAgZG9uZQoKICAgIGlmICRfR19yY19sdF9w YXJzZV9vcHRpb25zOyB0aGVuCiAgICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBh cmFtZXRlcnMgZm9yIGNhbGxlcgogICAgICBmdW5jX3F1b3RlIGV2YWwgJHsxKyIkQCJ9CiAg ICAgIGxpYnRvb2xfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfcmVzdWx0CiAg ICBmaQp9CmZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIGxpYnRvb2xfcGFyc2Vf b3B0aW9ucwoKCgojIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgojIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFBlcmZvcm0gYW55IHNhbml0eSBjaGVj a3Mgb24gb3B0aW9uIHNldHRpbmdzIGFuZC9vciB1bmNvbnN1bWVkCiMgYXJndW1lbnRzLgps aWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKewogICAgIyBzYXZlIGZpcnN0IG5vbi1vcHRp b24gYXJndW1lbnQKICAgIGlmIHRlc3QgMCAtbHQgJCM7IHRoZW4KICAgICAgbm9ub3B0PSQx CiAgICAgIHNoaWZ0CiAgICBmaQoKICAgICMgcHJlc2VydmUgLS1kZWJ1ZwogICAgdGVzdCA6 ID0gIiRkZWJ1Z19jbWQiIHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVn IgoKICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIyBTb2xhcmlzMiBhZGRlZCB0byBmaXgg aHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNnaT9idWc9MTY0NTIKICAg ICAgIyBzZWUgYWxzbzogaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNn aT9pZD01OTc4OAogICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgd2luZG93cyogfCBwdzMyKiB8 IGNlZ2NjKiB8IHNvbGFyaXMyKiB8IG9zMiopCiAgICAgICAgIyBkb24ndCBlbGltaW5hdGUg ZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKICAgICAgICBvcHRfZHVw bGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKICAgICAgICA7OwogICAgICAqKQog ICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVz ZXJ2ZV9kdXBfZGVwcwogICAgICAgIDs7CiAgICBlc2FjCgogICAgJG9wdF9oZWxwIHx8IHsK ICAgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgogICAgICBmdW5jX2NoZWNrX3ZlcnNpb25f bWF0Y2gKCiAgICAgIHRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCiAgICAg ICAgJiYgdGVzdCB5ZXMgIT0gIiRidWlsZF9vbGRfbGlicyIgXAogICAgICAgICYmIGZ1bmNf ZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQg b2YgbGlicmFyeSIKCiAgICAgICMgRGFyd2luIHN1Y2tzCiAgICAgIGV2YWwgc3RkX3NocmV4 dD1cIiRzaHJleHRfY21kc1wiCgogICAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93 ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgogICAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3Bl biIgJiYgdGVzdCBleGVjdXRlICE9ICIkb3B0X21vZGUiOyB0aGVuCiAgICAgICAgZnVuY19l cnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiAnLWRsb3BlbiciCiAgICAgICAgJEVDSE8gIiRo ZWxwIiAxPiYyCiAgICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCiAgICAgIGZpCgogICAgICAj IENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCiAgICAg IGdlbmVyaWNfaGVscD0kaGVscAogICAgICBoZWxwPSJUcnkgJyRwcm9nbmFtZSAtLWhlbHAg LS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgogICAgfQoKICAgICMg UGFzcyBiYWNrIHRoZSB1bnBhcnNlZCBhcmd1bWVudCBsaXN0CiAgICBmdW5jX3F1b3RlIGV2 YWwgJHsxKyIkQCJ9CiAgICBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0PSRmdW5j X3F1b3RlX3Jlc3VsdAp9CmZ1bmNfYWRkX2hvb2sgZnVuY192YWxpZGF0ZV9vcHRpb25zIGxp YnRvb2xfdmFsaWRhdGVfb3B0aW9ucwoKCiMgUHJvY2VzcyBvcHRpb25zIGFzIGVhcmx5IGFz IHBvc3NpYmxlIHNvIHRoYXQgLS1oZWxwIGFuZCAtLXZlcnNpb24KIyBjYW4gcmV0dXJuIHF1 aWNrbHkuCmZ1bmNfb3B0aW9ucyAkezErIiRAIn0KZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29w dGlvbnNfcmVzdWx0Ijsgc2hpZnQKCgoKIyMgLS0tLS0tLS0tLS0gIyMKIyMgICAgTWFpbi4g ICAgIyMKIyMgLS0tLS0tLS0tLS0gIyMKCm1hZ2ljPSclJSVNQUdJQyB2YXJpYWJsZSUlJScK bWFnaWNfZXhlPSclJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUnCgojIEdsb2JhbCB2YXJpYWJs ZXMuCmV4dHJhY3RlZF9hcmNoaXZlcz0KZXh0cmFjdGVkX3NlcmlhbD0wCgojIElmIHRoaXMg dmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4g aXQKIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRv Y3VtZW50cyBmcm9tIGJlaW5nCiMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KZXhlY19jbWQ9CgoK IyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0 aW4gb3IgcHJpbnRmLgpmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKewogIGV2YWwgJ2NhdCA8PF9M VEVDSE9fRU9GCiQxCl9MVEVDSE9fRU9GJwp9CgojIGZ1bmNfZ2VuZXJhdGVkX2J5X2xpYnRv b2wKIyBUcnVlIGlmZiBzdGRpbiBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgTGlidG9vbC4gVGhp cyBmdW5jdGlvbiBpcyBvbmx5CiMgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFy ZGx5IGZsdXNoIG91dCBkZXRlcm1pbmVkIGltcG9zdGVycy4KZnVuY19nZW5lcmF0ZWRfYnlf bGlidG9vbF9wICgpCnsKICAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4g L2Rldi9udWxsIDI+JjEKfQoKIyBmdW5jX2xhbGliX3AgZmlsZQojIFRydWUgaWZmIEZJTEUg aXMgYSBsaWJ0b29sICcubGEnIGxpYnJhcnkgb3IgJy5sbycgb2JqZWN0IGZpbGUuCiMgVGhp cyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRs eSBmbHVzaCBvdXQKIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KZnVuY19sYWxpYl9wICgpCnsK ICAgIHRlc3QgLWYgIiQxIiAmJgogICAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwg fCBmdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sX3AKfQoKIyBmdW5jX2xhbGliX3Vuc2FmZV9w IGZpbGUKIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCAnLmxhJyBsaWJyYXJ5IG9yICcu bG8nIG9iamVjdCBmaWxlLgojIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBj aGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAojIHJlc29ydGluZyB0byBleHRlcm5hbCBw cm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCiMgY2xvc2Vz IGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5nIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2Ny aXB0b3IuCiMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdh dGl2ZSByZXN1bHQgd291bGQgYmUKIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiAnZmlsZScg ZG9lcyBub3QgZXhpc3QuCmZ1bmNfbGFsaWJfdW5zYWZlX3AgKCkKewogICAgbGFsaWJfcD1u bwogICAgaWYgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXIgIiQxIiAmJiBleGVjIDU8JjAgPCIk MSI7IHRoZW4KCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAoJZG8KCSAgICByZWFkIGxhbGli X3BfbGluZQoJICAgIGNhc2UgJGxhbGliX3BfbGluZSBpbgoJCVwjXCBHZW5lcmF0ZWRcIGJ5 XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKCSAgICBlc2FjCglkb25lCgll eGVjIDA8JjUgNTwmLQogICAgZmkKICAgIHRlc3QgeWVzID0gIiRsYWxpYl9wIgp9CgojIGZ1 bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9v bCB3cmFwcGVyIHNjcmlwdAojIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0 eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CiMgZGV0ZXJtaW5lZCBpbXBvc3Rl cnMuCmZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgpCnsKICAgIHRlc3QgLWYgIiQxIiAmJgog ICAgICAkbHRfdHJ1bmNhdGVfYmluIDwgIiQxIiAyPi9kZXYvbnVsbCB8IGZ1bmNfZ2VuZXJh dGVkX2J5X2xpYnRvb2xfcAp9CgojIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxl CiMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBleGVjdXRhYmxlCiMgVGhp cyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRs eSBmbHVzaCBvdXQKIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KZnVuY19sdHdyYXBwZXJfZXhl Y3V0YWJsZV9wICgpCnsKICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQogICAgY2Fz ZSAkMSBpbgogICAgKi5leGUpIDs7CiAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZp eD0uZXhlIDs7CiAgICBlc2FjCiAgICAkR1JFUCAiJG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3 cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxsIDI+JjEKfQoKIyBmdW5jX2x0d3JhcHBl cl9zY3JpcHRuYW1lIGZpbGUKIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1 dGFibGUKIyB1c2VzICRmaWxlIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZW5h bWUgZm9yIGEKIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KZnVuY19sdHdyYXBwZXJf c2NyaXB0bmFtZSAoKQp7CiAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIg Ii4iCiAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3Vs dCIKICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSRmdW5jX2Rpcm5hbWVf cmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyCn0K CiMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCiMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wg d3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVjdXRhYmxlCiMgVGhpcyBmdW5jdGlvbiBp cyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQK IyBkZXRlcm1pbmVkIGltcG9zdGVycy4KZnVuY19sdHdyYXBwZXJfcCAoKQp7CiAgICBmdW5j X2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVf cCAiJDEiCn0KCgojIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCiMgRXhl Y3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMuCiMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4s IGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCiMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRo ZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQpmdW5jX2V4ZWN1dGVfY21kcyAo KQp7CiAgICAkZGVidWdfY21kCgogICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwogICAgZm9y IGNtZCBpbiAkMTsgZG8KICAgICAgSUZTPSRzcCRubAogICAgICBldmFsIGNtZD1cIiRjbWRc IgogICAgICBJRlM9JHNhdmVfaWZzCiAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsy LTp9IgogICAgZG9uZQogICAgSUZTPSRzYXZlX2lmcwp9CgoKIyBmdW5jX3NvdXJjZSBmaWxl CiMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3RvcnkgY29tcG9uZW50IGlmIG5lY2Vzc2Fy eS4KIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8g YXBwZW5kIGEgZG90IHRvCiMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUg ZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQojIGJlaGF2aW9yIGhhcHBlbnMgb25seSBm b3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKIyAnRklMRS4n IGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgpmdW5jX3NvdXJjZSAo KQp7CiAgICAkZGVidWdfY21kCgogICAgY2FzZSAkMSBpbgogICAgKi8qIHwgKlxcKikJLiAi JDEiIDs7CiAgICAqKQkJLiAiLi8kMSIgOzsKICAgIGVzYWMKfQoKCiMgZnVuY19yZXNvbHZl X3N5c3Jvb3QgUEFUSAojIFJlcGxhY2UgYSBsZWFkaW5nID0gaW4gUEFUSCB3aXRoIGEgc3lz cm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bwojIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jl c3VsdApmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQp7CiAgZnVuY19yZXNvbHZlX3N5c3Jvb3Rf cmVzdWx0PSQxCiAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCiAgPSop CiAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1 bHQiCiAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19z dHJpcG5hbWVfcmVzdWx0CiAgICA7OwogIGVzYWMKfQoKIyBmdW5jX3JlcGxhY2Vfc3lzcm9v dCBQQVRICiMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3 aXRoID0gYW5kCiMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290 X3Jlc3VsdC4KZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKewogIGNhc2UgJGx0X3N5c3Jvb3Q6 JDEgaW4KICA/KjoiJGx0X3N5c3Jvb3QiKikKICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lz cm9vdCIgJycgIiQxIgogICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSc9JyRmdW5j X3N0cmlwbmFtZV9yZXN1bHQKICAgIDs7CiAgKikKICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jv b3QuCiAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9JDEKICAgIDs7CiAgZXNhYwp9 CgojIGZ1bmNfaW5mZXJfdGFnIGFyZwojIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRv IHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2 aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KIyBPbmx5IGF0dGVtcHQgdGhp cyBpZiB0aGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZQojIGNvbW1hbmQgZG9lc24n dCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUg Zm9ybSAnZ2NjIC4uLicKZnVuY19pbmZlcl90YWcgKCkKewogICAgJGRlYnVnX2NtZAoKICAg IGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0 aGVuCiAgICAgIENDX3F1b3RlZD0KICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCglmdW5jX2Fw cGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgogICAgICBkb25lCiAgICAgIENDX2V4cGFu ZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5j X2VjaG9fYWxsICRDQ19xdW90ZWRgCiAgICAgIGNhc2UgJEAgaW4KICAgICAgIyBCbGFua3Mg aW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBz aGVsbCwKICAgICAgIyBidXQgbm90IGZyb20gdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxl IHdoZW4gY29uZmlndXJlIHdhcyBydW4uCiAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIg JENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKICAgICAgIiAkQ0NfcXVv dGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIk Q0NfcXVvdGVkX2V4cGFuZGVkICIqKSA7OwogICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQg b2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAogICAgICAjIGlmIHdl IGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCiAgICAgICopCglmb3IgeiBpbiAkYXZh aWxhYmxlX3RhZ3M7IGRvCgkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcg Q09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KCSAgICAjIEV2 YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgoJICAgIGV2YWwgImAkU0VEIC1uIC1lICcvXiMg IyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRP T0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgoJICAgIENDX3F1b3RlZD0K CSAgICBmb3IgYXJnIGluICRDQzsgZG8KCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29u dGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KCSAgICAgIGZ1bmNfYXBwZW5k X3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCgkgICAgZG9uZQoJICAgIENDX2V4cGFuZGVkPWBm dW5jX2VjaG9fYWxsICRDQ2AKCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19h bGwgJENDX3F1b3RlZGAKCSAgICBjYXNlICIkQCAiIGluCgkgICAgIiAkQ0MgIiogfCAiJEND ICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAoJICAgICIg JENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQg IiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikKCSAgICAgICMgVGhlIGNvbXBpbGVyIGlu IHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCgkgICAgICAjIHRoZSBvbmUgaW4g dGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgoJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUg dGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KCSAgICAgIHRhZ25hbWU9JHoKCSAgICAg IGJyZWFrCgkgICAgICA7OwoJICAgIGVzYWMKCSAgZmkKCWRvbmUKCSMgSWYgJHRhZ25hbWUg c3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCgkjIHdhcyBm b3VuZCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgIi0tdGFnIiBjb21tYW5kCgkj IGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhl bgoJICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIK CSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoICctLXRhZyciCiMJZWxz ZQojCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlv biIKCWZpCgk7OwogICAgICBlc2FjCiAgICBmaQp9CgoKCiMgZnVuY193cml0ZV9saWJ0b29s X29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQojIENyZWF0ZSBhIGxp YnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAojIGJ1dCBk b24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgpmdW5jX3dyaXRlX2xp YnRvb2xfb2JqZWN0ICgpCnsKICAgIHdyaXRlX2xpYm9iaj0kMQogICAgaWYgdGVzdCB5ZXMg PSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KICAgICAgd3JpdGVfbG9iaj1cJyQyXCcK ICAgIGVsc2UKICAgICAgd3JpdGVfbG9iaj1ub25lCiAgICBmaQoKICAgIGlmIHRlc3QgeWVz ID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KICAgICAgd3JpdGVfb2xkb2JqPVwnJDNcJwog ICAgZWxzZQogICAgICB3cml0ZV9vbGRvYmo9bm9uZQogICAgZmkKCiAgICAkb3B0X2RyeV9y dW4gfHwgewogICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKIyAkd3JpdGVfbGli b2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCiMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChH TlUgJFBBQ0tBR0UpICRWRVJTSU9OCiMKIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZp bGUhCiMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgoKIyBOYW1l IG9mIHRoZSBQSUMgb2JqZWN0LgpwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCgojIE5hbWUgb2Yg dGhlIG5vbi1QSUMgb2JqZWN0Cm5vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKCkVPRgog ICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIkd3JpdGVfbGlib2JqIgogICAgfQp9CgoK IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBG SUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBIRUxQRVIgRlVOQ1RJT05TICMKIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgZnVuY19j b252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBBUkcKIyBIZWxwZXIgZnVuY3Rpb24gdXNl ZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5p eCwKIyBhbmQgJGhvc3QgaXMgbWluZ3csIHdpbmRvd3MsIGN5Z3dpbiwgb3Igc29tZSBvdGhl ciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhCiMgY29ycmVjdGx5IGNvbmZpZ3VyZWQg d2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0K IyBpbiAkYnVpbGQncyAkUEFUSC4KIwojIEFSRyBpcyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0 byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4KIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGlu ICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwK IyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCmZ1bmNfY29udmVy dF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKewogICRkZWJ1Z19jbWQKCiAgZnVuY19jb252 ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9JDEKICBpZiB0ZXN0IC1uICIkMSI7 IHRoZW4KICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRo IGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKICAgICMgYXJlIGZvcmNlZCB0byBjaGVj ayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCiAg ICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBj b2RlIG9mIDEyNyBhbmQgcHJpbnQKICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91 dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCiAgICAjIHplcm8g QU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0 aW9uOgogICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVw YXRoIC13ICIkMSIgMj4vZGV2L251bGxgCiAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVz dCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIjsgdGhlbgog ICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8g IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAogICAgICAgICRT RUQgLWUgIiRzZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKICAgIGVsc2UKICAgICAgZnVuY19j b252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CiAgICBmaQogIGZpCn0KIyBl bmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKCgojIGZ1bmNfY29udmVy dF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCiMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkg cGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LCBhbmQKIyAk aG9zdCBpcyBtaW5ndywgd2luZG93cywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZp cm9ubWVudC4gUmVsaWVzIG9uIGEKIyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aW5lIGVudmly b25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbQojIGluICRidWls ZCdzICRQQVRILiBBc3N1bWVzIEFSRyBoYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBwYXRo IHNlcGFyYXRvcgojIGNoYXJhY3RlcnMuCiMKIyBBUkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0 ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMyLgojIFJlc3VsdCBpcyBhdmFpbGFibGUg aW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgojIFVuY29u dmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1lcyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlm IG5vIGRpcmVjdG9yeSBuYW1lcwojIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0 IG1heSBiZSBlbXB0eS4KZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQp7 CiAgJGRlYnVnX2NtZAoKICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29u dmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCiAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93 aW5lX3RvX3czMl9yZXN1bHQ9CiAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICBvbGRJRlM9 JElGUwogICAgSUZTPToKICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9f dzMyX2YgaW4gJDE7IGRvCiAgICAgIElGUz0kb2xkSUZTCiAgICAgIGZ1bmNfY29udmVydF9j b3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9f dzMyX2YiCiAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVf dG9fdzMyX3Jlc3VsdCI7IHRoZW4KICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0 X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCiAgICAgICAgICBmdW5jX2Nv bnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVf ZmlsZV93aW5lX3RvX3czMl9yZXN1bHQKICAgICAgICBlbHNlCiAgICAgICAgICBmdW5jX2Fw cGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5j X2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKICAgICAgICBmaQogICAg ICBmaQogICAgZG9uZQogICAgSUZTPSRvbGRJRlMKICBmaQp9CiMgZW5kOiBmdW5jX2NvbnZl cnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCgoKIyBmdW5jX2N5Z3BhdGggQVJHUy4uLgojIFdy YXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3BhdGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFU SC4gVGhpcyBpcyB1c2VkIHdoZW4KIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3ln d2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKIyAkYnVpbGQg aXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBvciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4g SW4gY2FzZSAoMSkgb3IKIyAoMiksIHJldHVybnMgdGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3Ig cGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dAojIGZpbGUgbmFtZSBvciBwYXRo IGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0 ZWQKIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZUyBmb3JtYXQpLiBJbiBjYXNlICgzKSwg cmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQojIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jl c3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbgojIEN5 Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KIwojIEFS R1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRoIHRoZSBsYXN0IG9uZSBiZWluZyB0aGUg ZmlsZSBuYW1lIG9yIHBhdGggdG8KIyBiZSBjb252ZXJ0ZWQuCiMKIyBTcGVjaWZ5IHRoZSBh YnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8gY3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFU SAojIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgpmdW5j X2N5Z3BhdGggKCkKewogICRkZWJ1Z19jbWQKCiAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgi ICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgogICAgZnVuY19jeWdwYXRoX3Jlc3Vs dD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKICAgIGlmIHRlc3QgIiQ/IiAtbmUg MDsgdGhlbgogICAgICAjIG9uIGZhaWx1cmUsIGVuc3VyZSByZXN1bHQgaXMgZW1wdHkKICAg ICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KICAgIGZpCiAgZWxzZQogICAgZnVuY19jeWdwYXRo X3Jlc3VsdD0KICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lm aWVzIG5vbi1leGlzdGVudCBmaWxlOiAnJExUX0NZR1BBVEgnIgogIGZpCn0KI2VuZDogZnVu Y19jeWdwYXRoCgoKIyBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiBBUkcKIyBDb252 ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3Jt YXQuICBSZXR1cm4KIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJf cmVzdWx0LgpmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQp7CiAgJGRlYnVnX2Nt ZAoKICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKICBmdW5jX2Nv bnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAy Pi9kZXYvbnVsbCB8CiAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkc2VkX25haXZlX2Jh Y2tzbGFzaGlmeSJgCn0KI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKCgoj IGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEgQVJHMgojIFZlcmlmeSB0aGF0IEFSRzEg KGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QK IyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1 dCBjb250aW51ZSAocmVzZXR0aW5nCiMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFS RzEpLgpmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQp7CiAgJGRlYnVnX2NtZAoKICBpZiB0 ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICBmdW5jX2Vycm9yICJDb3Vs ZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCiAgICBm dW5jX2Vycm9yICIgICckMSciCiAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5p bnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKICAgICMgRmFsbGJhY2s6CiAg ICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKICBmaQp9CiMgZW5kIGZ1bmNfY29udmVy dF9maWxlX2NoZWNrCgoKIyBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayBGUk9NX1BBVEhTRVAg VE9fUEFUSFNFUCBGUk9NX1BBVEggVE9fUEFUSAojIFZlcmlmeSB0aGF0IEZST01fUEFUSCAo YSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKIyBmb3Jt YXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBj b250aW51ZSwgcmVzZXR0aW5nCiMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2lt cGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJlbG93KS4KZnVuY19jb252ZXJ0X3BhdGhf Y2hlY2sgKCkKewogICRkZWJ1Z19jbWQKCiAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4g IiQzIjsgdGhlbgogICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9z dCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCiAgICBmdW5jX2Vycm9yICIgICckMyciCiAgICBm dW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5 IG5vdCB3b3JrLiIKICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNp bXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAogICAgIyBzaG91bGQgbm90IGJlICJpbXByb3Zl ZCIuICBTZWUgbGlidG9vbC5pbmZvLgogICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhl bgogICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnM9InN8JDF8JDJ8ZyIKICAgICAgZnVu Y190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAogICAgICAgICRTRUQgLWUgIiRs dF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAogICAgZWxzZQogICAgICBmdW5jX3RvX2hvc3Rf cGF0aF9yZXN1bHQ9JDMKICAgIGZpCiAgZmkKfQojIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9j aGVjawoKCiMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFU IEJBQ0tQQVQgUkVQTCBPUklHCiMgTW9kaWZpZXMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0 IGJ5IHByZXBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgRlJPTlRQQVQKIyBhbmQgYXBw ZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCmZ1bmNfY29udmVydF9wYXRo X2Zyb250X2JhY2tfcGF0aHNlcCAoKQp7CiAgJGRlYnVnX2NtZAoKICBjYXNlICQ0IGluCiAg JDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDMkZnVuY190b19ob3N0X3BhdGhfcmVz dWx0CiAgICA7OwogIGVzYWMKICBjYXNlICQ0IGluCiAgJDIgKSBmdW5jX2FwcGVuZCBmdW5j X3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgogICAgOzsKICBlc2FjCn0KIyBlbmQgZnVuY19j b252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBO QU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBpbnZva2VkIHZpYSAnJHRvX2hvc3RfZmlsZV9j bWQgQVJHJwojCiMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVy dGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KIyBSZXN1bHQgd2lsbCBiZSBhdmFp bGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KCgojIGZ1bmNfdG9faG9zdF9m aWxlIEFSRwojIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1h dCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKIyBpbiBmdW5jX3RvX2hvc3RfZmls ZV9yZXN1bHQuCmZ1bmNfdG9faG9zdF9maWxlICgpCnsKICAkZGVidWdfY21kCgogICR0b19o b3N0X2ZpbGVfY21kICIkMSIKfQojIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQoKCiMgZnVuY190 b190b29sX2ZpbGUgQVJHIExBWlkKIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9t ICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCiMgcmVzdWx0IGlu IGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElmIHRoZSBjb252ZXJzaW9uIGluIHVzZSBp cyBsaXN0ZWQKIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lv biB0YWtlcyBwbGFjZS4KZnVuY190b190b29sX2ZpbGUgKCkKewogICRkZWJ1Z19jbWQKCiAg Y2FzZSAsJDIsIGluCiAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKICAgICAgZnVuY190 b190b29sX2ZpbGVfcmVzdWx0PSQxCiAgICAgIDs7CiAgICAqKQogICAgICAkdG9fdG9vbF9m aWxlX2NtZCAiJDEiCiAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kZnVuY190b19o b3N0X2ZpbGVfcmVzdWx0CiAgICAgIDs7CiAgZXNhYwp9CiMgZW5kIGZ1bmNfdG9fdG9vbF9m aWxlCgoKIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29wIEFSRwojIENvcHkgQVJHIHRvIGZ1bmNf dG9faG9zdF9maWxlX3Jlc3VsdC4KZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQp7CiAgZnVu Y190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCn0KIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9v cAoKCiMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgQVJHCiMgQ29udmVydCBmaWxl IG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0 b21hdGljCiMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhl IGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1 bHQuCmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCnsKICAkZGVidWdfY21kCgog IGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgog ICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgogICAgZnVuY190b19ob3N0 X2ZpbGVfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQKICBm aQogIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9y ZXN1bHQiCn0KIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKCgojIGZ1bmNf Y29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJHCiMgQ29udmVydCBmaWxlIG5hbWUgQVJH IGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgojIGZ1bmNf dG9faG9zdF9maWxlX3Jlc3VsdC4KZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAo KQp7CiAgJGRlYnVnX2NtZAoKICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKICBpZiB0 ZXN0IC1uICIkMSI7IHRoZW4KICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBj YWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCiAgICAjIExUX0NZ R1BBVEggaW4gdGhpcyBjYXNlLgogICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdw YXRoIC1tICIkMSJgCiAgZmkKICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVu Y190b19ob3N0X2ZpbGVfcmVzdWx0Igp9CiMgZW5kIGZ1bmNfY29udmVydF9maWxlX2N5Z3dp bl90b193MzIKCgojIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgQVJHCiMgQ29udmVy dCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3 aW5lIGVudmlyb25tZW50CiMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1 bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgpmdW5jX2NvbnZlcnRfZmlsZV9uaXhf dG9fdzMyICgpCnsKICAkZGVidWdfY21kCgogIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0k MQogIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93 aW5lX3RvX3czMiAiJDEiCiAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY29u dmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0CiAgZmkKICBmdW5jX2NvbnZlcnRf ZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0Igp9CiMgZW5kIGZ1 bmNfY29udmVydF9maWxlX25peF90b193MzIKCgojIGZ1bmNfY29udmVydF9maWxlX21zeXNf dG9fY3lnd2luIEFSRwojIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3ln d2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgojIFJldHVybnMgcmVzdWx0 IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190 b19jeWd3aW4gKCkKewogICRkZWJ1Z19jbWQKCiAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0 PSQxCiAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lz X3RvX3czMiAiJDEiCiAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9t c3lzX3RvX3czMl9yZXN1bHQiCiAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNf Y3lncGF0aF9yZXN1bHQKICBmaQogIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRm dW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCn0KIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5 c190b19jeWd3aW4KCgojIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCiMg Q29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVx dWlyZXMgQ3lnd2luIGluc3RhbGxlZAojIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2lu ZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKIyBpbiBm dW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCmZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3 aW4gKCkKewogICRkZWJ1Z19jbWQKCiAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAg aWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwg dGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KICAgIGZ1 bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgogICAgZnVuY19jeWdwYXRo IC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCiAgICBm dW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKICBmaQogIGZ1 bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQi Cn0KIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgoKCiMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICRidWlsZCB0byAkaG9zdCBQ QVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiMgaW52b2tlZCB2aWEgJyR0b19ob3N0X3BhdGhfY21kIEFS RycKIwojIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBm cm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCiMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWls YWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgojCiMgUGF0aCBzZXBhcmF0b3Jz IGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0 LiAgSWYKIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJh Y3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0 KSBvbiBvdXRwdXQuCiMKIyBBbGwgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFt ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgojICAgZmlsZSBuYW1lIGNvbnZl cnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKIyAgIHBh dGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAgIDogZnVuY19jb252ZXJ0X3BhdGhfWF90 b19ZICgpCiMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4gJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9u IHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5j dGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKIyB0 aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xsb3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5j X2luaXRfdG9faG9zdF9wYXRoX2NtZAojIHdpbGwgYnJlYWsuCgoKIyBmdW5jX2luaXRfdG9f aG9zdF9wYXRoX2NtZAojIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFi bGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQojIGFwcHJvcHJpYXRlIHZhbHVl LCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hvc3RfZmlsZV9jbWQuCnRvX2hvc3RfcGF0 aF9jbWQ9CmZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCnsKICAkZGVidWdfY21kCgog IGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgogICAgZnVuY19zdHJpcG5h bWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgogICAgdG9f aG9zdF9wYXRoX2NtZD1mdW5jX2NvbnZlcnRfcGF0aF8kZnVuY19zdHJpcG5hbWVfcmVzdWx0 CiAgZmkKfQoKCiMgZnVuY190b19ob3N0X3BhdGggQVJHCiMgQ29udmVydHMgdGhlIHBhdGgg QVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQK IyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCmZ1bmNfdG9faG9zdF9wYXRoICgpCnsK ICAkZGVidWdfY21kCgogIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCiAgJHRvX2hvc3Rf cGF0aF9jbWQgIiQxIgp9CiMgZW5kIGZ1bmNfdG9faG9zdF9wYXRoCgoKIyBmdW5jX2NvbnZl cnRfcGF0aF9ub29wIEFSRwojIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3Vs dC4KZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQp7CiAgZnVuY190b19ob3N0X3BhdGhfcmVz dWx0PSQxCn0KIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAoKCiMgZnVuY19jb252ZXJ0 X3BhdGhfbXN5c190b193MzIgQVJHCiMgQ29udmVydCBwYXRoIEFSRyBmcm9tIChtaW5ndykg TVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYwojIGNvbnZlcnNpb24gdG8g dzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVz dWx0IGluCiMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgpmdW5jX2NvbnZlcnRfcGF0aF9t c3lzX3RvX3czMiAoKQp7CiAgJGRlYnVnX2NtZAoKICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1 bHQ9JDEKICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5k IHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbSBBUkcuICBNU1lTCiAg ICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0g aW50byAnLjsnIGFuZCAnOy4nOwogICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNv bXBsZXRlbHkuCiAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgogICAgZnVuY190b19ob3N0 X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICBmdW5jX2NvbnZlcnRfY29y ZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCiAgICBmdW5jX3RvX2hv c3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdAog ICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAogICAgICAiJGZ1bmNfdG9faG9z dF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgogICAgZnVuY19jb252 ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgogIGZpCn0K IyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIKCgojIGZ1bmNfY29udmVydF9w YXRoX2N5Z3dpbl90b193MzIgQVJHCiMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0 byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KIyBmdW5jX3RvX2hvc3RfZmlsZV9y ZXN1bHQuCmZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKewogICRkZWJ1Z19j bWQKCiAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCiAgaWYgdGVzdCAtbiAiJDEiOyB0 aGVuCiAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKICAgIGZ1bmNf c3RyaXBuYW1lIDogOiAiJDEiCiAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0 cmlwbmFtZV9yZXN1bHQKICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAt bSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiYAogICAgZnVuY19jb252ZXJ0X3BhdGhf Y2hlY2sgOiAiOyIgXAogICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190 b19ob3N0X3BhdGhfcmVzdWx0IgogICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19w YXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgogIGZpCn0KIyBlbmQgZnVuY19jb252ZXJ0X3Bh dGhfY3lnd2luX3RvX3czMgoKCiMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcK IyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMg YSB3aW5lIGVudmlyb25tZW50IGFuZAojIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMg cmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KZnVuY19jb252ZXJ0X3BhdGhf bml4X3RvX3czMiAoKQp7CiAgJGRlYnVnX2NtZAoKICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1 bHQ9JDEKICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICMgU2VlIGZ1bmNfY29udmVydF9w YXRoX21zeXNfdG9fdzMyOgogICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKICAgIGZ1bmNf dG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgZnVuY19jb252 ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCiAg ICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2lu ZV90b193MzJfcmVzdWx0CiAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCiAg ICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1 bHQiCiAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoi ICI7IiAiJDEiCiAgZmkKfQojIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCgoK IyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKIyBDb252ZXJ0IHBhdGgg QVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBz ZXQuCiMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgpmdW5j X2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQp7CiAgJGRlYnVnX2NtZAoKICBmdW5j X3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICMg U2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgogICAgZnVuY19zdHJpcG5hbWUg OiA6ICIkMSIKICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jl c3VsdAogICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3Rf cGF0aF90bXAxIgogICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVf bXN5c190b193MzJfcmVzdWx0IgogICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5j X2N5Z3BhdGhfcmVzdWx0CiAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAogICAg ICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0 IgogICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6 ICIkMSIKICBmaQp9CiMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luCgoK IyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luIEFSRwojIENvbnZlcnQgcGF0aCBB UkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFs bGVkIGluIGEKIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBM VF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCiMgZnVuY190b19ob3N0X2ZpbGVf cmVzdWx0LgpmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCnsKICAkZGVidWdf Y21kCgogIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQogIGlmIHRlc3QgLW4gIiQxIjsg dGhlbgogICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3Ig Y2hhcmFjdGVycyBmcm9tCiAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3Rl bnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCiAgICAjIGludG8gJy47JyBhbmQgJzsuJywg YW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgogICAgZnVuY19zdHJpcG5h bWUgOiA6ICIkMSIKICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1l X3Jlc3VsdAogICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNf dG9faG9zdF9wYXRoX3RtcDEiCiAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZl cnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKICAgIGZ1bmNfdG9faG9zdF9wYXRo X3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAogICAgZnVuY19jb252ZXJ0X3BhdGhfY2hl Y2sgOiA6IFwKICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9z dF9wYXRoX3Jlc3VsdCIKICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNl cCAiOioiICIqOiIgOiAiJDEiCiAgZmkKfQojIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhf dG9fY3lnd2luCgoKIyBmdW5jX2RsbF9kZWZfcCBGSUxFCiMgVHJ1ZSBpZmYgRklMRSBpcyBh IFdpbmRvd3MgRExMICcuZGVmJyBmaWxlLgojIEtlZXAgaW4gc3luYyB3aXRoIF9MVF9ETExf REVGX1AgaW4gbGlidG9vbC5tNApmdW5jX2RsbF9kZWZfcCAoKQp7CiAgJGRlYnVnX2NtZAoK ICBmdW5jX2RsbF9kZWZfcF90bXA9YCRTRUQgLW4gXAogICAgLWUgJ3MvXlsJIF0qLy8nIFwK ICAgIC1lICcvXlwoOy4qXCkqJC9kJyBcCiAgICAtZSAncy9eXChFWFBPUlRTXHxMSUJSQVJZ XClcKFsJIF0uKlwpKiQvREVGL3AnIFwKICAgIC1lIHEgXAogICAgIiQxImAKICB0ZXN0IERF RiA9ICIkZnVuY19kbGxfZGVmX3BfdG1wIgp9CgoKIyBmdW5jX21vZGVfY29tcGlsZSBhcmcu Li4KZnVuY19tb2RlX2NvbXBpbGUgKCkKewogICAgJGRlYnVnX2NtZAoKICAgICMgR2V0IHRo ZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCiAgICBiYXNlX2Nv bXBpbGU9CiAgICBzcmNmaWxlPSRub25vcHQgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5 IHZhbHVlIGluICJzcmNmaWxlIgogICAgc3VwcHJlc3Nfb3B0PXllcwogICAgc3VwcHJlc3Nf b3V0cHV0PQogICAgYXJnX21vZGU9bm9ybWFsCiAgICBsaWJvYmo9CiAgICBsYXRlcj0KICAg IHBpZV9mbGFnPQoKICAgIGZvciBhcmcKICAgIGRvCiAgICAgIGNhc2UgJGFyZ19tb2RlIGlu CiAgICAgIGFyZyAgKQoJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlz IHRvIGJhc2VfY29tcGlsZQoJbGFzdGFyZz0kYXJnCglhcmdfbW9kZT1ub3JtYWwKCTs7Cgog ICAgICB0YXJnZXQgKQoJbGlib2JqPSRhcmcKCWFyZ19tb2RlPW5vcm1hbAoJY29udGludWUK CTs7CgogICAgICBub3JtYWwgKQoJIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25z LgoJY2FzZSAkYXJnIGluCgktbykKCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAoJICAgIGZ1 bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSAnLW8nIG1vcmUgdGhhbiBvbmNl IgoJICBhcmdfbW9kZT10YXJnZXQKCSAgY29udGludWUKCSAgOzsKCgktcGllIHwgLWZwaWUg fCAtZlBJRSkKICAgICAgICAgIGZ1bmNfYXBwZW5kIHBpZV9mbGFnICIgJGFyZyIKCSAgY29u dGludWUKCSAgOzsKCgktc2hhcmVkIHwgLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZl ci1ub24tcGljKQoJICBmdW5jX2FwcGVuZCBsYXRlciAiICRhcmciCgkgIGNvbnRpbnVlCgkg IDs7CgoJLW5vLXN1cHByZXNzKQoJICBzdXBwcmVzc19vcHQ9bm8KCSAgY29udGludWUKCSAg OzsKCgktWGNvbXBpbGVyKQoJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2Vz IGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CgkgIGNvbnRpbnVlICAgICAgIyAg VGhlIGN1cnJlbnQgInNyY2ZpbGUiIHdpbGwgZWl0aGVyIGJlIHJldGFpbmVkIG9yCgkgIDs7 ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291 bGQgYmUgYSBidWcuCgoJLVdjLCopCgkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFy ZyIKCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgkgIGxhc3Rhcmc9CgkgIHNhdmVf aWZzPSRJRlM7IElGUz0sCgkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCgkgICAgSUZTPSRzYXZl X2lmcwoJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgoJICBkb25lCgkg IElGUz0kc2F2ZV9pZnMKCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKCSAg bGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgoJICAjIEFkZCB0aGUgYXJndW1lbnRz IHRvIGJhc2VfY29tcGlsZS4KCSAgZnVuY19hcHBlbmQgYmFzZV9jb21waWxlICIgJGxhc3Rh cmciCgkgIGNvbnRpbnVlCgkgIDs7CgoJKikKCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJn dW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgoJICAjIFRoZSBwcmV2aW91cyAic3JjZmlsZSIg YmVjb21lcyB0aGUgY3VycmVudCBhcmd1bWVudC4KCSAgIwoJICBsYXN0YXJnPSRzcmNmaWxl CgkgIHNyY2ZpbGU9JGFyZwoJICA7OwoJZXNhYyAgIyAgY2FzZSAkYXJnCgk7OwogICAgICBl c2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCgogICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUg dGhlIHByZXZpb3VzIGFyZ3VtZW50LgogICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9j b21waWxlICIkbGFzdGFyZyIKICAgIGRvbmUgIyBmb3IgYXJnCgogICAgY2FzZSAkYXJnX21v ZGUgaW4KICAgIGFyZykKICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lm eSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgogICAgICA7OwogICAgdGFyZ2V0KQogICAg ICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggJy1v JyIKICAgICAgOzsKICAgICopCiAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5 IG9iamVjdC4KICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgewoJZnVuY19iYXNlbmFtZSAi JHNyY2ZpbGUiCglsaWJvYmo9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAgICAgIH0KICAgICAg OzsKICAgIGVzYWMKCiAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1 ZmZpeGVzLgogICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyBy ZXBsYWNlZCB3aXRoIGZpbGUubG8KICAgIGNhc2UgJGxpYm9iaiBpbgogICAgKi5bY0NGU2lm bXNvXSB8IFwKICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAogICAgKi5j KysgfCAqLmNjIHwgKi5paSB8ICouY2xhc3MgfCAqLmNwcCB8ICouY3h4IHwgXAogICAgKi5b ZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICouZ28gfCAqLm9iaiB8ICouc3ggfCAqLmN1 IHwgKi5jdXApCiAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCiAgICAgIGxpYm9iaj0kZnVu Y194Zm9ybV9yZXN1bHQKICAgICAgOzsKICAgIGVzYWMKCiAgICBjYXNlICRsaWJvYmogaW4K ICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7 OwogICAgKikKICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1l IG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gJyRsaWJvYmonIgogICAgICA7OwogICAgZXNhYwoK ICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKCiAgICBmb3IgYXJnIGluICRsYXRl cjsgZG8KICAgICAgY2FzZSAkYXJnIGluCiAgICAgIC1zaGFyZWQpCgl0ZXN0IHllcyA9ICIk YnVpbGRfbGlidG9vbF9saWJzIiBcCgkgIHx8IGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAi Y2Fubm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCglidWlsZF9vbGRfbGlicz1ubwoJY29u dGludWUKCTs7CgogICAgICAtc3RhdGljKQoJYnVpbGRfbGlidG9vbF9saWJzPW5vCglidWls ZF9vbGRfbGlicz15ZXMKCWNvbnRpbnVlCgk7OwoKICAgICAgLXByZWZlci1waWMpCglwaWNf bW9kZT15ZXMKCWNvbnRpbnVlCgk7OwoKICAgICAgLXByZWZlci1ub24tcGljKQoJcGljX21v ZGU9bm8KCWNvbnRpbnVlCgk7OwogICAgICBlc2FjCiAgICBkb25lCgogICAgZnVuY19xdW90 ZV9hcmcgcHJldHR5ICIkbGlib2JqIgogICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNf cXVvdGVfYXJnX3Jlc3VsdCIgXAogICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAg J1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKICAgICAgJiYgZnVuY193YXJuaW5n ICJsaWJvYmogbmFtZSAnJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwg Y2hhcmFjdGVycy4iCiAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIg IiIKICAgIG9iam5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAgICB4ZGlyPSRmdW5jX2Rp cm5hbWVfcmVzdWx0CiAgICBsb2JqPSR4ZGlyJG9iamRpci8kb2JqbmFtZQoKICAgIHRlc3Qg LXogIiRiYXNlX2NvbXBpbGUiICYmIFwKICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVz dCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKCiAgICAjIERlbGV0ZSBhbnkgbGVm dG92ZXIgbGlicmFyeSBvYmplY3RzLgogICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9s aWJzIjsgdGhlbgogICAgICByZW1vdmVsaXN0PSIkb2JqICRsb2JqICRsaWJvYmogJHtsaWJv Ymp9VCIKICAgIGVsc2UKICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9i an1UIgogICAgZmkKCiAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxh ZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCiAgICBjYXNlICRob3N0X29z IGluCiAgICBjeWd3aW4qIHwgbWluZ3cqIHwgd2luZG93cyogfCBwdzMyKiB8IG9zMiogfCBj ZWdjYyopCiAgICAgIHBpY19tb2RlPWRlZmF1bHQKICAgICAgOzsKICAgIGVzYWMKICAgIGlm IHRlc3Qgbm8gPSAiJHBpY19tb2RlIiAmJiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19j aGVja19tZXRob2QiOyB0aGVuCiAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJy YXJpZXMgaXMgbm90IHN1cHBvcnRlZAogICAgICBwaWNfbW9kZT1kZWZhdWx0CiAgICBmaQoK ICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBj b21waWxlciBkb2VzCiAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKICAgIGlmIHRlc3Qg bm8gPSAiJGNvbXBpbGVyX2NfbyI7IHRoZW4KICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRz cmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4kb2JqZXh0CiAgICAg IGxvY2tmaWxlPSRvdXRwdXRfb2JqLmxvY2sKICAgIGVsc2UKICAgICAgb3V0cHV0X29iaj0K ICAgICAgbmVlZF9sb2Nrcz1ubwogICAgICBsb2NrZmlsZT0KICAgIGZpCgogICAgIyBMb2Nr IHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKICAgICMgV2UgdXNlIHRo aXMgc2NyaXB0IGZpbGUgdG8gbWFrZSB0aGUgbGluaywgaXQgYXZvaWRzIGNyZWF0aW5nIGEg bmV3IGZpbGUKICAgIGlmIHRlc3QgeWVzID0gIiRuZWVkX2xvY2tzIjsgdGhlbgogICAgICB1 bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2 L251bGw7IGRvCglmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1v dmVkIgoJc2xlZXAgMgogICAgICBkb25lCiAgICBlbGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9s b2NrcyI7IHRoZW4KICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgoJJEVDSE8g IlwKKioqIEVSUk9SLCAkbG9ja2ZpbGUgZXhpc3RzIGFuZCBjb250YWluczoKYGNhdCAkbG9j a2ZpbGUgMj4vZGV2L251bGxgCgpUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2Vz cyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCnRlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5k IGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKeW91ciBjb21waWxl ciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKcmVw ZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5 b3UgaGFkIGJldHRlcgphdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMg cGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgpjb21waWxlci4iCgoJJG9wdF9kcnlfcnVuIHx8 ICRSTSAkcmVtb3ZlbGlzdAoJZXhpdCAkRVhJVF9GQUlMVVJFCiAgICAgIGZpCiAgICAgIGZ1 bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0X29iaiIKICAgICAgJEVDSE8gIiRzcmNm aWxlIiA+ICIkbG9ja2ZpbGUiCiAgICBmaQoKICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJl bW92ZWxpc3QKICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkbG9ja2ZpbGUiCiAgICB0 cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxV UkUnIDEgMiAxNQoKICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252 ZXJ0X2ZpbGVfbXN5c190b193MzIKICAgIHNyY2ZpbGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jl c3VsdAogICAgZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkc3JjZmlsZSIKICAgIHFzcmNmaWxl PSRmdW5jX3F1b3RlX2FyZ19yZXN1bHQKCiAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0 IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KICAgIGlmIHRlc3QgeWVz ID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAgICAgICMgV2l0aG91dCB0aGlzIGFz c2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCiAgICAgIGZic2RfaGlkZW91 c19zaF9idWc9JGJhc2VfY29tcGlsZQoKICAgICAgaWYgdGVzdCBubyAhPSAiJHBpY19tb2Rl IjsgdGhlbgoJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgog ICAgICBlbHNlCgkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCgljb21tYW5kPSIkYmFzZV9jb21w aWxlICRxc3JjZmlsZSIKICAgICAgZmkKCiAgICAgIGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2Jq ZGlyIgoKICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCgkjIFBsYWNlIFBJ QyBvYmplY3RzIGluICRvYmpkaXIKCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIK ICAgICAgZmkKCiAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKICAg ICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0 ICRFWElUX0ZBSUxVUkUnCgogICAgICBpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiICYm CgkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7 IHRoZW4KCSRFQ0hPICJcCioqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgpgY2F0ICRs b2NrZmlsZSAyPi9kZXYvbnVsbGAKCmJ1dCBpdCBzaG91bGQgY29udGFpbjoKJHNyY2ZpbGUK ClRoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2Ug dGhlIHNhbWUKdGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qg d29yayBhcm91bmQgaXQgYmVjYXVzZQp5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQg Jy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQpyZXBlYXQgdGhpcyBjb21waWxhdGlv biwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCmF2b2lk IHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEg YmV0dGVyCmNvbXBpbGVyLiIKCgkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0Cgll eGl0ICRFWElUX0ZBSUxVUkUKICAgICAgZmkKCiAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmpl Y3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCiAgICAg IGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJY JGxvYmoiOyB0aGVuCglmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRsb2Jq IicgXAoJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4 aXQgJGVycm9yJwogICAgICBmaQoKICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5 IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgogICAgICBpZiB0ZXN0IHllcyA9ICIkc3Vw cHJlc3Nfb3B0IjsgdGhlbgoJc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJwog ICAgICBmaQogICAgZmkKCiAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQg b2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCiAgICBpZiB0ZXN0IHllcyA9ICIk YnVpbGRfb2xkX2xpYnMiOyB0aGVuCiAgICAgIGlmIHRlc3QgeWVzICE9ICIkcGljX21vZGUi OyB0aGVuCgkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCgljb21tYW5kPSIkYmFzZV9jb21waWxl ICRxc3JjZmlsZSRwaWVfZmxhZyIKICAgICAgZWxzZQoJY29tbWFuZD0iJGJhc2VfY29tcGls ZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgogICAgICBmaQogICAgICBpZiB0ZXN0IHllcyA9ICIk Y29tcGlsZXJfY19vIjsgdGhlbgoJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCiAg ICAgIGZpCgogICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5 IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1 cHByZXNzX291dHB1dCIKICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIg XAogICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElU X0ZBSUxVUkUnCgogICAgICBpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiICYmCgkgdGVz dCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4K CSRFQ0hPICJcCioqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgpgY2F0ICRsb2NrZmls ZSAyPi9kZXYvbnVsbGAKCmJ1dCBpdCBzaG91bGQgY29udGFpbjoKJHNyY2ZpbGUKClRoaXMg aW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNh bWUKdGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBh cm91bmQgaXQgYmVjYXVzZQp5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBh bmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQpyZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQg bWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCmF2b2lkIHBhcmFs bGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVy CmNvbXBpbGVyLiIKCgkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CglleGl0ICRF WElUX0ZBSUxVUkUKICAgICAgZmkKCiAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYg bmVlZGVkCiAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1 dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRf b2JqIiAiJG9iaiInIFwKCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1v dmVsaXN0OyBleGl0ICRlcnJvcicKICAgICAgZmkKICAgIGZpCgogICAgJG9wdF9kcnlfcnVu IHx8IHsKICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpk aXIvJG9iam5hbWUiICIkb2JqbmFtZSIKCiAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBz ZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKICAgICAgaWYgdGVzdCBubyAhPSAiJG5lZWRfbG9j a3MiOyB0aGVuCglyZW1vdmVsaXN0PSRsb2NrZmlsZQogICAgICAgICRSTSAiJGxvY2tmaWxl IgogICAgICBmaQogICAgfQoKICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwp9Cgokb3B0X2hlbHAg fHwgewogIHRlc3QgY29tcGlsZSA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9jb21waWxl ICR7MSsiJEAifQp9CgpmdW5jX21vZGVfaGVscCAoKQp7CiAgICAjIFdlIG5lZWQgdG8gZGlz cGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KICAgIGNhc2UgJG9wdF9tb2RlIGlu CiAgICAgICIiKQogICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRo ZSB1c2FnZSBjb21tZW50cwogICAgICAgICMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4K ICAgICAgICBmdW5jX2hlbHAKICAgICAgICA7OwoKICAgICAgY2xlYW4pCiAgICAgICAgJEVD SE8gXAoiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JN LU9QVElPTl0uLi4gRklMRS4uLgoKUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVj dG9yeS4KClJNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUg ZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQoodHlwaWNhbGx5ICcvYmluL3JtJyku ICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzICctZicpIHRvIGJlIHBhc3NlZAp0 byBSTS4KCklmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFt LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKd2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3 aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgogICAgICAgIDs7 CgogICAgICBjb21waWxlKQogICAgICAkRUNITyBcCiJVc2FnZTogJHByb2duYW1lIFtPUFRJ T05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCgpD b21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCgpU aGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKCiAg LW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1G SUxFCiAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1 dCBmb3IgbXVsdGlwbGUgcGFzc2VzCiAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxk IFBJQyBvYmplY3RzIG9ubHkKICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9u LVBJQyBvYmplY3RzIG9ubHkKICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSAn Lm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCiAgLXN0YXRpYyAgICAgICAg ICAgb25seSBidWlsZCBhICcubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcK ICAtV2MsRkxBRwogIC1YY29tcGlsZXIgRkxBRyAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0 aGUgY29tcGlsZXIKCkNPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBp biBjcmVhdGluZyBhICdzdGFuZGFyZCcgb2JqZWN0IGZpbGUKZnJvbSB0aGUgZ2l2ZW4gU09V UkNFRklMRS4KClRoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3Zp bmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQpTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0 aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggJy5jJyB3aXRoIHRoZQpsaWJyYXJ5 IG9iamVjdCBzdWZmaXgsICcubG8nLiIKICAgICAgICA7OwoKICAgICAgZXhlY3V0ZSkKICAg ICAgICAkRUNITyBcCiJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVj dXRlIENPTU1BTkQgW0FSR1NdLi4uCgpBdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgs IHRoZW4gcnVuIGEgcHJvZ3JhbS4KClRoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcg YWRkaXRpb25hbCBvcHRpb25zOgoKICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVj dG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAoKVGhpcyBtb2RlIHNl dHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8g Jy1kbG9wZW4nCmZsYWdzLgoKSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1 dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAppbnRvIHRoZWlyIGNv cnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVp cmVkIGxpYnJhcnkKZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGgu CgpUaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIK ICAgICAgICA7OwoKICAgICAgZmluaXNoKQogICAgICAgICRFQ0hPIFwKIlVzYWdlOiAkcHJv Z25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgoKQ29tcGxldGUg dGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KCkVhY2ggTElCRElSIGlz IGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCgpUaGUgY29t bWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHBy aXZpbGVnZXMuICBVc2UKdGhlICctLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50 IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKICAgICAgICA7OwoKICAgICAgaW5z dGFsbCkKICAgICAgICAkRUNITyBcCiJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0t bW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgoKSW5zdGFsbCBleGVjdXRhYmxlcyBv ciBsaWJyYXJpZXMuCgpJTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21t YW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKZWl0aGVyIHRoZSAnaW5zdGFs bCcgb3IgJ2NwJyBwcm9ncmFtLgoKVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RB TEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CgogIC1pbnN0LXByZWZpeC1kaXIg UFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3Rh bGxhdGlvbgoKVGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgYXJlIGludGVycHJldGVkIGFz IGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9ubHkKQlNELWNvbXBhdGlibGUgaW5zdGFs bCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCiAgICAgICAgOzsKCiAgICAgIGxpbmspCiAg ICAgICAgJEVDSE8gXAoiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGlu ayBMSU5LLUNPTU1BTkQuLi4KCkxpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dl dGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KY3JlYXRlIGFuIGV4ZWN1dGFi bGUgcHJvZ3JhbS4KCkxJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29t cGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQphIHByb2dyYW0gZnJvbSBzZXZl cmFsIG9iamVjdCBmaWxlcy4KClRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNP TU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgoKICAtYWxsLXN0YXRpYyAgICAgICBkbyBu b3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKICAtYXZvaWQtdmVyc2lvbiAgICBk byBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKICAtYmluZGlyIEJJTkRJ UiAgICBzcGVjaWZ5IHBhdGggdG8gYmluYXJpZXMgZGlyZWN0b3J5IChmb3Igc3lzdGVtcyB3 aGVyZQogICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRo ZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKICAtZGxvcGVuIEZJTEUgICAgICAnLWRscHJl b3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQogIC1kbHBy ZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3By ZWxvYWRlZF9zeW1ib2xzCiAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9t IE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKICAtZXhwb3J0LXN5 bWJvbHMgU1lNRklMRQogICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0 aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQogIC1leHBvcnQtc3ltYm9scy1yZWdleCBS RUdFWAogICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9s cyBtYXRjaGluZyBSRUdFWAogIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9y IHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKICAtbE5BTUUgICAgICAgICAgICBPVVRQ VVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQogIC1tb2R1 bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAogIC1uby1m YXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCiAgLW5vLWluc3Rh bGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCiAgLW5vLXVuZGVm aW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRl cm5hbCBzeW1ib2xzCiAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZy b20gdGhlIHNwZWNpZmllZCBvYmplY3RzCiAgLW9iamVjdGxpc3QgRklMRSAgdXNlIGEgbGlz dCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKICAt b3MyZGxsbmFtZSBOQU1FICBmb3JjZSBhIHNob3J0IERMTCBuYW1lIG9uIE9TLzIgKG5vIGVm ZmVjdCBvbiBvdGhlciBPU2VzKQogIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAogICAg ICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVH RVgKICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1h dGlvbgogIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVu dHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKICAtUlsgXUxJQkRJUiAgICAgICBhZGQg TElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcwog IC1zaGFyZWQgICAgICAgICAgIG9ubHkgZG8gZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wg bGlicmFyaWVzCiAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNo YXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCiAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90 IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJp ZXMKICAtc3RhdGljLWxpYnRvb2wtbGlicwogICAgICAgICAgICAgICAgICAgIGRvIG5vdCBk byBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCiAgLXZlcnNpb24t aW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KICAgICAgICAgICAgICAgICAgICBzcGVj aWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBd CiAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMg dGhlIExJQk5BTUUgaW50ZXJmYWNlCiAgLVdjLEZMQUcKICAtWGNvbXBpbGVyIEZMQUcgICBw YXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgogIC1X YSxGTEFHCiAgLVhhc3NlbWJsZXIgRkxBRyAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBk aXJlY3RseSB0byB0aGUgYXNzZW1ibGVyCiAgLVdsLEZMQUcKICAtWGxpbmtlciBGTEFHICAg ICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBsaW5rZXIKICAt WENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGls ZXIgZHJpdmVyIChDQykKCkFsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5n IHdpdGggJy0nKSBhcmUgaWdub3JlZC4KCkV2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0 ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiAnLmxhJyBhcmUKdHJlYXRlZCBh cyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5k YXJkIG9yIGxpYnJhcnkKb2JqZWN0IGZpbGVzLgoKSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMg aW4gJy5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKb25seSBsaWJy YXJ5IG9iamVjdHMgKCcubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgJy1ycGF0 aCcgaXMKcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGli cmFyeS4KCklmIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5hJyBvciAnLmxpYicsIHRoZW4gYSBz dGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKdXNpbmcgJ2FyJyBhbmQgJ3JhbmxpYicsIG9y IG9uIFdpbmRvd3MgdXNpbmcgJ2xpYicuCgpJZiBPVVRQVVQtRklMRSBlbmRzIGluICcubG8n IG9yICcuJG9iamV4dCcsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCmlzIGNyZWF0 ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCiAgICAg ICAgOzsKCiAgICAgIHVuaW5zdGFsbCkKICAgICAgICAkRUNITyBcCiJVc2FnZTogJHByb2du YW1lIFtPUFRJT05dLi4uIC0tbW9kZT11bmluc3RhbGwgUk0gW1JNLU9QVElPTl0uLi4gRklM RS4uLgoKUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnku CgpSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVz IGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKHR5cGljYWxseSAnL2Jpbi9ybScpLiAgUk0t T1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyAnLWYnKSB0byBiZSBwYXNzZWQKdG8gUk0u CgpJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0 ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlz IGRlbGV0ZWQgdXNpbmcgUk0uIgogICAgICAgIDs7CgogICAgICAqKQogICAgICAgIGZ1bmNf ZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSAnJG9wdF9tb2RlJyIKICAgICAg ICA7OwogICAgZXNhYwoKICAgIGVjaG8KICAgICRFQ0hPICJUcnkgJyRwcm9nbmFtZSAtLWhl bHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKfQoKIyBOb3cg dGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAg aWYgbmVjZXNzYXJ5CmlmICRvcHRfaGVscDsgdGhlbgogIGlmIHRlc3QgOiA9ICIkb3B0X2hl bHAiOyB0aGVuCiAgICBmdW5jX21vZGVfaGVscAogIGVsc2UKICAgIHsKICAgICAgZnVuY19o ZWxwIG5vZXhpdAogICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUg aW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbwoJZnVuY19tb2RlX2hlbHAKICAg ICAgZG9uZQogICAgfSB8ICRTRUQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCiAg ICB7CiAgICAgIGZ1bmNfaGVscCBub2V4aXQKICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBp bGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KCWVj aG8KCWZ1bmNfbW9kZV9oZWxwCiAgICAgIGRvbmUKICAgIH0gfAogICAgJFNFRCAnMWQKICAg ICAgL15XaGVuIHJlcG9ydGluZy8sL15SZXBvcnQvewoJSAoJZAogICAgICB9CiAgICAgICR4 CiAgICAgIC9pbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy9kCiAgICAgIC9tb3JlIGRl dGFpbGVkIC4qTU9ERS9kCiAgICAgIHMvXlVzYWdlOi4qLS1tb2RlPVwoW14gXSpcKSAuKi9E ZXNjcmlwdGlvbiBvZiBcMSBtb2RlOi8nCiAgZmkKICBleGl0ICQ/CmZpCgoKIyBmdW5jX21v ZGVfZXhlY3V0ZSBhcmcuLi4KZnVuY19tb2RlX2V4ZWN1dGUgKCkKewogICAgJGRlYnVnX2Nt ZAoKICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCiAgICBj bWQ9JG5vbm9wdAogICAgdGVzdCAteiAiJGNtZCIgJiYgXAogICAgICBmdW5jX2ZhdGFsX2hl bHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgoKICAgICMgSGFuZGxlIC1kbG9wZW4g ZmxhZ3MgaW1tZWRpYXRlbHkuCiAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KICAg ICAgdGVzdCAtZiAiJGZpbGUiIFwKCXx8IGZ1bmNfZmF0YWxfaGVscCAiJyRmaWxlJyBpcyBu b3QgYSBmaWxlIgoKICAgICAgZGlyPQogICAgICBjYXNlICRmaWxlIGluCiAgICAgICoubGEp CglmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCglmaWxlPSRmdW5jX3Jlc29sdmVfc3lz cm9vdF9yZXN1bHQKCgkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGli dG9vbCBhcmNoaXZlLgoJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKCSAgfHwgZnVu Y19mYXRhbF9oZWxwICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgoK CSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgoJZGxuYW1lPQoJbGlicmFyeV9uYW1lcz0K CWZ1bmNfc291cmNlICIkZmlsZSIKCgkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5v dCBiZSBkbG9wZW5lZC4KCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCgkgICMgV2FybiBp ZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMi ICYmIFwKCSAgICBmdW5jX3dhcm5pbmcgIickZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCAn LWV4cG9ydC1keW5hbWljJyIKCSAgY29udGludWUKCWZpCgoJZnVuY19kaXJuYW1lICIkZmls ZSIgIiIgIi4iCglkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKCglpZiB0ZXN0IC1mICIkZGly LyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIK CWVsc2UKCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCgkgICAgZnVuY19m YXRhbF9lcnJvciAiY2Fubm90IGZpbmQgJyRkbG5hbWUnIGluICckZGlyJyBvciAnJGRpci8k b2JqZGlyJyIKCSAgZmkKCWZpCgk7OwoKICAgICAgKi5sbykKCSMgSnVzdCBhZGQgdGhlIGRp cmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KCWZ1bmNfZGlybmFtZSAiJGZpbGUi ICIiICIuIgoJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Cgk7OwoKICAgICAgKikKCWZ1bmNf d2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmll cyBhbmQgb2JqZWN0cyIKCWNvbnRpbnVlCgk7OwogICAgICBlc2FjCgogICAgICAjIEdldCB0 aGUgYWJzb2x1dGUgcGF0aG5hbWUuCiAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAK ICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSRhYnNkaXIKCiAgICAgICMgTm93IGFk ZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCiAgICAgIGlmIGV2YWwgInRlc3Qg LXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCglldmFsICIkc2hsaWJwYXRoX3Zhcj1c IlwkZGlyXCIiCiAgICAgIGVsc2UKCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQk c2hsaWJwYXRoX3ZhclwiIgogICAgICBmaQogICAgZG9uZQoKICAgICMgVGhpcyB2YXJpYWJs ZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgogICAg IyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgogICAgbGlidG9vbF9leGVj dXRlX21hZ2ljPSRtYWdpYwoKICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMg aXMgYSB3cmFwcGVyIHNjcmlwdC4KICAgIGFyZ3M9CiAgICBmb3IgZmlsZQogICAgZG8KICAg ICAgY2FzZSAkZmlsZSBpbgogICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKICAgICAgKikK CSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3Jh bS4KCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KCSAgZnVuY19z b3VyY2UgIiRmaWxlIgoJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgoJICBm aWxlPSRwcm9nZGlyLyRwcm9ncmFtCgllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVf cCAiJGZpbGUiOyB0aGVuCgkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgoJ ICBmdW5jX3NvdXJjZSAiJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgoJICAj IFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgoJICBmaWxlPSRwcm9nZGlyLyRwcm9n cmFtCglmaQoJOzsKICAgICAgZXNhYwogICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJl c2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgogICAgICBmdW5jX2FwcGVuZF9xdW90ZWQg YXJncyAiJGZpbGUiCiAgICBkb25lCgogICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCiAgICAg ICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCiAgICAgIGlmIHRlc3QgLW4gIiRzaGxp YnBhdGhfdmFyIjsgdGhlbgoJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNo bGlicGF0aF92YXJcIiIKCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKICAgICAgZmkK ICAgICAgJEVDSE8gIiRjbWQkYXJncyIKICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCiAgICBl bHNlCiAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgoJIyBFeHBvcnQg dGhlIHNobGlicGF0aF92YXIuCglldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCiAgICAg IGZpCgogICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAg IGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFU RSBMQ19NRVNTQUdFUwogICAgICBkbwoJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3Zh citzZXR9XCIgPSBzZXQ7IHRoZW4KICAgICAgICAgICAgICAgICRsdF92YXI9XCRzYXZlXyRs dF92YXI7IGV4cG9ydCAkbHRfdmFyCgkgICAgICBlbHNlCgkJJGx0X3Vuc2V0ICRsdF92YXIK CSAgICAgIGZpIgogICAgICBkb25lCgogICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5 IGV4ZWMgdGhlIGNvbW1hbmQuCiAgICAgIGV4ZWNfY21kPVwkY21kJGFyZ3MKICAgIGZpCn0K CnRlc3QgZXhlY3V0ZSA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsi JEAifQoKCiMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KZnVuY19tb2RlX2ZpbmlzaCAoKQp7 CiAgICAkZGVidWdfY21kCgogICAgbGlicz0KICAgIGxpYmRpcnM9CiAgICBhZG1pbmNtZHM9 CgogICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsxKyIkQCJ9CiAgICBkbwogICAgICBpZiB0 ZXN0IC1kICIkb3B0IjsgdGhlbgoJZnVuY19hcHBlbmQgbGliZGlycyAiICRvcHQiCgogICAg ICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCglpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIk b3B0IjsgdGhlbgoJICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKCWVsc2UKCSAgZnVuY193 YXJuaW5nICInJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgoJZmkKCiAg ICAgIGVsc2UKCWZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgYXJndW1lbnQgJyRvcHQnIgog ICAgICBmaQogICAgZG9uZQoKICAgIGlmIHRlc3QgLW4gIiRsaWJzIjsgdGhlbgogICAgICBp ZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4KICAgICAgICBzeXNyb290X3JlZ2V4PWAk RUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAog ICAgICAgIHN5c3Jvb3RfY21kPSJzL1woWyAnXVwpJHN5c3Jvb3RfcmVnZXgvXDEvZzsiCiAg ICAgIGVsc2UKICAgICAgICBzeXNyb290X2NtZD0KICAgICAgZmkKCiAgICAgICMgUmVtb3Zl IHN5c3Jvb3QgcmVmZXJlbmNlcwogICAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KICAgICAg ICBmb3IgbGliIGluICRsaWJzOyBkbwogICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJl bmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgJz0nIHByZWZpeGVzIGZyb20gJGxpYiIKICAgICAg ICBkb25lCiAgICAgIGVsc2UKICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAogICAg ICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCgkgICRTRUQgLWUgIiRzeXNyb290X2NtZCBzL1wo WyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAoJICAgID4gJHRt cGRpci90bXAtbGEKCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgoJZG9uZQogICAgICAg ICR7Uk19ciAiJHRtcGRpciIKICAgICAgZmkKICAgIGZpCgogICAgaWYgdGVzdCAtbiAiJGZp bmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KICAg ICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21k cyI7IHRoZW4KCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4K CSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWlu Y21kcwonIiRjbWQiJyInCglmaQoJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgoJ ICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCgkgIGV2YWwgY21kcz1cIiRmaW5pc2hf ZXZhbFwiCgkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQg YWRtaW5jbWRzICIKICAgICAgICRjbWRzIgoJZmkKICAgICAgZG9uZQogICAgZmkKCiAgICAj IEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KICAgICRvcHRfcXVpZXQg JiYgZXhpdCAkRVhJVF9TVUNDRVNTCgogICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZp bmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KICAgICAgZWNobyAiLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSIKICAgICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxs ZWQgaW46IgogICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbwoJJEVDSE8gIiAgICRs aWJkaXIiCiAgICAgIGRvbmUKICAgICAgZWNobwogICAgICBlY2hvICJJZiB5b3UgZXZlciBo YXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKICAg ICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVy IHVzZSBsaWJ0b29sLCBhbmQiCiAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5h bWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgJy1MTElCRElSJyIKICAgICAgZWNobyAi ZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dp bmc6IgogICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KCWVjaG8gIiAg IC0gYWRkIExJQkRJUiB0byB0aGUgJyRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJp YWJsZSIKCWVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKICAgICAgZmkKICAgICAgaWYg dGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgoJZWNobyAiICAgLSBhZGQgTElCRElSIHRv IHRoZSAnJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKCWVjaG8gIiAgICAg ZHVyaW5nIGxpbmtpbmciCiAgICAgIGZpCiAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9s aWJkaXJfZmxhZ19zcGVjIjsgdGhlbgoJbGliZGlyPUxJQkRJUgoJZXZhbCBmbGFnPVwiJGhh cmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgoKCSRFQ0hPICIgICAtIHVzZSB0aGUgJyRmbGFn JyBsaW5rZXIgZmxhZyIKICAgICAgZmkKICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7 IHRoZW4KCSRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4g dGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKICAgICAgZmkKICAgICAgaWYgdGVzdCAtZiAv ZXRjL2xkLnNvLmNvbmY7IHRoZW4KCWVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1p bmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gJy9ldGMvbGQuc28uY29uZiciCiAgICAgIGZpCiAg ICAgIGVjaG8KCiAgICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVu dGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgogICAgICBjYXNlICRob3N0IGlu Cglzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQoJICBlY2hvICJtb3JlIGluZm9y bWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFs IgoJICBlY2hvICJwYWdlcy4iCgkgIDs7CgkqKQoJICBlY2hvICJtb3JlIGluZm9ybWF0aW9u LCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKCSAgOzsK ICAgICAgZXNhYwogICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICAgZmkKICAgIGV4 aXQgJEVYSVRfU1VDQ0VTUwp9Cgp0ZXN0IGZpbmlzaCA9ICIkb3B0X21vZGUiICYmIGZ1bmNf bW9kZV9maW5pc2ggJHsxKyIkQCJ9CgoKIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KZnVu Y19tb2RlX2luc3RhbGwgKCkKewogICAgJGRlYnVnX2NtZAoKICAgICMgVGhlcmUgbWF5IGJl IGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKICAgICMg aW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgogICAgaWYgdGVzdCAi JFNIRUxMIiA9ICIkbm9ub3B0IiB8fCB0ZXN0IC9iaW4vc2ggPSAiJG5vbm9wdCIgfHwKICAg ICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgog ICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wqKSA6OzsgKikgZmFsc2U7OyBlc2FjCiAg ICB0aGVuCiAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KICAgICAgZnVuY19xdW90 ZV9hcmcgcHJldHR5ICIkbm9ub3B0IgogICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3Rl X2FyZ19yZXN1bHQgIgogICAgICBhcmc9JDEKICAgICAgc2hpZnQKICAgIGVsc2UKICAgICAg aW5zdGFsbF9wcm9nPQogICAgICBhcmc9JG5vbm9wdAogICAgZmkKCiAgICAjIFRoZSByZWFs IGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9u IHByb2dyYW0uCiAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCiAgICBmdW5jX3F1b3Rl X2FyZyBwcmV0dHkgIiRhcmciCiAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiRmdW5j X3F1b3RlX2FyZ19yZXN1bHQiCiAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSRpbnN0YWxsX3By b2cKICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KICAgICAgKltcXFwgL11jcFwgKikg aW5zdGFsbF9jcD06IDs7CiAgICAgICopIGluc3RhbGxfY3A9ZmFsc2UgOzsKICAgIGVzYWMK CiAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwg ZmxhZ3MuCiAgICBkZXN0PQogICAgZmlsZXM9CiAgICBvcHRzPQogICAgcHJldj0KICAgIGlu c3RhbGxfdHlwZT0KICAgIGlzZGlyPWZhbHNlCiAgICBzdHJpcG1lPQogICAgbm9fbW9kZT06 CiAgICBmb3IgYXJnCiAgICBkbwogICAgICBhcmcyPQogICAgICBpZiB0ZXN0IC1uICIkZGVz dCI7IHRoZW4KCWZ1bmNfYXBwZW5kIGZpbGVzICIgJGRlc3QiCglkZXN0PSRhcmcKCWNvbnRp bnVlCiAgICAgIGZpCgogICAgICBjYXNlICRhcmcgaW4KICAgICAgLWQpIGlzZGlyPTogOzsK ICAgICAgLWYpCglpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCgkgIHByZXY9JGFyZwoJ ZmkKCTs7CiAgICAgIC1nIHwgLW0gfCAtbykKCXByZXY9JGFyZwoJOzsKICAgICAgLXMpCglz dHJpcG1lPSIgLXMiCgljb250aW51ZQoJOzsKICAgICAgLSopCgk7OwogICAgICAqKQoJIyBJ ZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0 LgoJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCgkgIGlmIHRlc3QgWC1tID0gIlgkcHJldiIg JiYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSI7IHRoZW4KCSAgICBhcmcyPSRp bnN0YWxsX292ZXJyaWRlX21vZGUKCSAgICBub19tb2RlPWZhbHNlCgkgIGZpCgkgIHByZXY9 CgllbHNlCgkgIGRlc3Q9JGFyZwoJICBjb250aW51ZQoJZmkKCTs7CiAgICAgIGVzYWMKCiAg ICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCiAgICAgIGZ1bmNfcXVv dGVfYXJnIHByZXR0eSAiJGFyZyIKICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIg JGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVu CglmdW5jX3F1b3RlX2FyZyBwcmV0dHkgIiRhcmcyIgogICAgICBmaQogICAgICBmdW5jX2Fw cGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKICAg IGRvbmUKCiAgICB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIiAmJiBcCiAgICAgIGZ1bmNfZmF0 YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCgogICAgdGVz dCAtbiAiJHByZXYiICYmIFwKICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgJyRwcmV2JyBv cHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCgogICAgaWYgdGVzdCAtbiAiJGluc3RhbGxf b3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KICAgICAgaWYgJGluc3RhbGxfY3A7 IHRoZW4gOjsgZWxzZQoJZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkaW5zdGFsbF9vdmVycmlk ZV9tb2RlIgoJZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1 b3RlX2FyZ19yZXN1bHQiCiAgICAgIGZpCiAgICBmaQoKICAgIGlmIHRlc3QgLXogIiRmaWxl cyI7IHRoZW4KICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCglmdW5jX2ZhdGFsX2hl bHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgogICAgICBlbHNlCglmdW5j X2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIKICAgICAgZmkK ICAgIGZpCgogICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGlu YXRpb24uCiAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0IgogICAgZGVzdD0kZnVu Y19zdHJpcG5hbWVfcmVzdWx0CgogICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGlu YXRpb24gaXMgYSBkaXJlY3RvcnkuCiAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9Ogog ICAgaWYgJGlzZGlyOyB0aGVuCiAgICAgIGRlc3RkaXI9JGRlc3QKICAgICAgZGVzdG5hbWU9 CiAgICBlbHNlCiAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAi LiIKICAgICAgZGVzdGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogICAgICBkZXN0bmFtZT0k ZnVuY19iYXNlbmFtZV9yZXN1bHQKCiAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVj ayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KICAgICAg c2V0IGR1bW15ICRmaWxlczsgc2hpZnQKICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKCWZ1 bmNfZmF0YWxfaGVscCAiJyRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCiAgICBmaQogICAg Y2FzZSAkZGVzdGRpciBpbgogICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwogICAg KikKICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwoJY2FzZSAkZmlsZSBpbgoJKi5sbykg OzsKCSopCgkgIGZ1bmNfZmF0YWxfaGVscCAiJyRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29s dXRlIGRpcmVjdG9yeSBuYW1lIgoJICA7OwoJZXNhYwogICAgICBkb25lCiAgICAgIDs7CiAg ICBlc2FjCgogICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0 IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCiAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9n cmFtcy4KICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0kbWFnaWMKCiAgICBzdGF0aWNsaWJz PQogICAgZnV0dXJlX2xpYmRpcnM9CiAgICBjdXJyZW50X2xpYmRpcnM9CiAgICBmb3IgZmls ZSBpbiAkZmlsZXM7IGRvCgogICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgogICAgICBj YXNlICRmaWxlIGluCiAgICAgICouJGxpYmV4dCkKCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJp ZXMgbGF0ZXIuCglmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCgk7OwoKICAgICAg Ki5sYSkKCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKCWZpbGU9JGZ1bmNfcmVzb2x2 ZV9zeXNyb290X3Jlc3VsdAoKCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMg YSBsaWJ0b29sIGFyY2hpdmUuCglmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAoJICB8 fCBmdW5jX2ZhdGFsX2hlbHAgIickZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNo aXZlIgoKCWxpYnJhcnlfbmFtZXM9CglvbGRfbGlicmFyeT0KCXJlbGlua19jb21tYW5kPQoJ ZnVuY19zb3VyY2UgIiRmaWxlIgoKCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJk aXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAi WCRsaWJkaXIiOyB0aGVuCgkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgoJICAqIiAk bGliZGlyICIqKSA7OwoJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGli ZGlyIiA7OwoJICBlc2FjCgllbHNlCgkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJl IGxpYmRpci4KCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KCSAgKiIgJGxpYmRpciAi KikgOzsKCSAgKikgZnVuY19hcHBlbmQgZnV0dXJlX2xpYmRpcnMgIiAkbGliZGlyIiA7OwoJ ICBlc2FjCglmaQoKCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgoJZGlyPSRmdW5jX2Rp cm5hbWVfcmVzdWx0CglmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCgoJaWYgdGVzdCAtbiAi JHJlbGlua19jb21tYW5kIjsgdGhlbgoJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1 c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgoJICBpbnN0X3ByZWZpeF9kaXI9 YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKCgkgICMgRG9u J3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQK CSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJy YXJpZXMgdGhhdAoJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgoJICAj IEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3Mg dGhhdAoJICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5 LCB0aGF0IHdvcmtzIGZpbmUpCgkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4g ZXllIG9uLgoJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAoJ ICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCAnJGZpbGUnIHRv IGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKCgkgIGlmIHRlc3QgLW4gIiRp bnN0X3ByZWZpeF9kaXIiOyB0aGVuCgkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGly IGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgoJICAgIHJlbGlua19jb21tYW5kPWAkRUNI TyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3Qt cHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCgkgIGVsc2UKCSAgICByZWxpbmtfY29t bWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9k aXJAJSUiYAoJICBmaQoKCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgJyRmaWxlJyIKCSAg ZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAoJICAgICdmdW5jX2ZhdGFsX2Vy cm9yICJlcnJvcjogcmVsaW5rICdcJyckZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFu ZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCglmaQoKCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUg c2hhcmVkIGxpYnJhcnkuCglzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0CglpZiB0 ZXN0IC1uICIkMSI7IHRoZW4KCSAgcmVhbG5hbWU9JDEKCSAgc2hpZnQKCgkgIHNyY25hbWU9 JHJlYWxuYW1lCgkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0ke3Jl YWxuYW1lfVQKCgkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRo ZSBzeW1saW5rcy4KCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRk aXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCgkgICAgICAnZXhpdCAkPycKCSAg dHN0cmlwbWU9JHN0cmlwbWUKCSAgY2FzZSAkaG9zdF9vcyBpbgoJICBjeWd3aW4qIHwgbWlu Z3cqIHwgd2luZG93cyogfCBwdzMyKiB8IGNlZ2NjKikKCSAgICBjYXNlICRyZWFsbmFtZSBp bgoJICAgICouZGxsLmEpCgkgICAgICB0c3RyaXBtZT0KCSAgICAgIDs7CgkgICAgZXNhYwoJ ICAgIDs7CgkgIG9zMiopCgkgICAgY2FzZSAkcmVhbG5hbWUgaW4KCSAgICAqX2RsbC5hKQoJ ICAgICAgdHN0cmlwbWU9CgkgICAgICA7OwoJICAgIGVzYWMKCSAgICA7OwoJICBlc2FjCgkg IGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgoJ ICAgIGZ1bmNfc2hvd19ldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiAnZXhp dCAkPycKCSAgZmkKCgkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgoJICAgICMgRGVsZXRl IHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCgkgICAgIyBUcnkgJ2xu IC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlICdsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgoJ ICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5v dCB1bmRlcnN0YW5kIC1mLAoJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBs biAtcy4KCSAgICBmb3IgbGlua25hbWUKCSAgICBkbwoJICAgICAgdGVzdCAiJGxpbmtuYW1l IiAhPSAiJHJlYWxuYW1lIiBcCgkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAm JiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYm ICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgoJICAgIGRvbmUKCSAgZmkKCgkg ICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KCSAgbGli PSRkZXN0ZGlyLyRyZWFsbmFtZQoJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxs X2NtZHMiICdleGl0ICQ/JwoJZmkKCgkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZv ciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgoJbmFtZT0k ZnVuY19iYXNlbmFtZV9yZXN1bHQKCWluc3RuYW1lPSRkaXIvJHtuYW1lfWkKCWZ1bmNfc2hv d19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQg JD8nCgoJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgoJdGVzdCAt biAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xk X2xpYnJhcnkiCgk7OwoKICAgICAgKi5sbykKCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxp YnRvb2wgb2JqZWN0LgoKCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlm IGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7 IHRoZW4KCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1lCgllbHNlCgkgIGZ1bmNfYmFz ZW5hbWUgIiRmaWxlIgoJICBkZXN0ZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKCSAgZGVz dGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCglmaQoKCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRo ZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCgljYXNlICRkZXN0ZmlsZSBp bgoJKi5sbykKCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCgkgIHN0YXRpY2Rlc3Q9JGZ1bmNf bG8yb19yZXN1bHQKCSAgOzsKCSouJG9iamV4dCkKCSAgc3RhdGljZGVzdD0kZGVzdGZpbGUK CSAgZGVzdGZpbGU9CgkgIDs7CgkqKQoJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5 IGEgbGlidG9vbCBvYmplY3QgdG8gJyRkZXN0ZmlsZSciCgkgIDs7Cgllc2FjCgoJIyBJbnN0 YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCgl0ZXN0IC1uICIkZGVzdGZp bGUiICYmIFwKCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3Rm aWxlIiAnZXhpdCAkPycKCgkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4K CWlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KCSAgIyBEZWR1Y2UgdGhl IG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KCSAgZnVuY19sbzJvICIkZmls ZSIKCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CgkgIGZ1bmNfc2hvd19ldmFsICIk aW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCglmaQoJ ZXhpdCAkRVhJVF9TVUNDRVNTCgk7OwoKICAgICAgKikKCSMgRmlndXJlIG91dCBkZXN0aW5h dGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KCWlmIHRl c3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1l CgllbHNlCgkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgoJICBkZXN0ZmlsZT0kZnVuY19iYXNl bmFtZV9yZXN1bHQKCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCglmaQoKCSMgSWYg dGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBz dHJpcCBpdAoJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQg d2UgYWN0dWFsbHkgd2FudCB0bwoJIyBpbnN0YWxsCglzdHJpcHBlZF9leHQ9CgljYXNlICRm aWxlIGluCgkgICouZXhlKQoJICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCgkgICAg ICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgoJICAgICAgZmlsZT0kZnVuY19z dHJpcG5hbWVfcmVzdWx0CgkgICAgICBzdHJpcHBlZF9leHQ9LmV4ZQoJICAgIGZpCgkgICAg OzsKCWVzYWMKCgkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0 b29sIHByb2dyYW0uCgljYXNlICRob3N0IGluCgkqY3lnd2luKiB8ICptaW5ndyogfCAqd2lu ZG93cyopCgkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRo ZW4KCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgoJICAgICAgd3Jh cHBlcj0kZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKCSAgICBlbHNlCgkgICAg ICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgoJICAgICAgd3JhcHBlcj0kZnVu Y19zdHJpcG5hbWVfcmVzdWx0CgkgICAgZmkKCSAgICA7OwoJKikKCSAgICB3cmFwcGVyPSRm aWxlCgkgICAgOzsKCWVzYWMKCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBl ciI7IHRoZW4KCSAgbm90aW5zdF9kZXBsaWJzPQoJICByZWxpbmtfY29tbWFuZD0KCgkgIGZ1 bmNfc291cmNlICIkd3JhcHBlciIKCgkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNo b3VsZCBoYXZlIGJlZW4gc2V0LgoJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xf dmVyc2lvbiIgJiYgXAoJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgbGlidG9vbCB3 cmFwcGVyIHNjcmlwdCAnJHdyYXBwZXInIgoKCSAgZmluYWxpemU9OgoJICBmb3IgbGliIGlu ICRub3RpbnN0X2RlcGxpYnM7IGRvCgkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxp YnJhcnkgaXMgaW5zdGFsbGVkLgoJICAgIGxpYmRpcj0KCSAgICBpZiB0ZXN0IC1mICIkbGli IjsgdGhlbgoJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCgkgICAgZmkKCSAgICBsaWJmaWxl PSRsaWJkaXIvYCRFQ0hPICIkbGliIiB8ICRTRUQgJ3MlXi4qLyUlZydgCgkgICAgaWYgdGVz dCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KCSAgICAgIGZ1 bmNfd2FybmluZyAiJyRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gJyRsaWJkaXIn IgoJICAgICAgZmluYWxpemU9ZmFsc2UKCSAgICBmaQoJICBkb25lCgoJICByZWxpbmtfY29t bWFuZD0KCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgoKCSAgb3V0cHV0bmFtZT0KCSAgaWYg dGVzdCBubyA9ICIkZmFzdF9pbnN0YWxsIiAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQi OyB0aGVuCgkgICAgJG9wdF9kcnlfcnVuIHx8IHsKCSAgICAgIGlmICRmaW5hbGl6ZTsgdGhl bgoJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAoJCWZ1bmNfYmFzZW5hbWUgIiRm aWxlJHN0cmlwcGVkX2V4dCIKCQlmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoJICAgICAg ICBvdXRwdXRuYW1lPSR0bXBkaXIvJGZpbGUKCSAgICAgICAgIyBSZXBsYWNlIHRoZSBvdXRw dXQgZmlsZSBzcGVjaWZpY2F0aW9uLgoJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8g IiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVn J2AKCgkgICAgICAgICRvcHRfcXVpZXQgfHwgewoJICAgICAgICAgIGZ1bmNfcXVvdGVfYXJn IGV4cGFuZCxwcmV0dHkgIiRyZWxpbmtfY29tbWFuZCIKCQkgIGV2YWwgImZ1bmNfZWNobyAk ZnVuY19xdW90ZV9hcmdfcmVzdWx0IgoJICAgICAgICB9CgkgICAgICAgIGlmIGV2YWwgIiRy ZWxpbmtfY29tbWFuZCI7IHRoZW4gOgoJICAgICAgICAgIGVsc2UKCQkgIGZ1bmNfZXJyb3Ig ImVycm9yOiByZWxpbmsgJyRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBp bnN0YWxsaW5nIGl0IgoJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKCQkg IGNvbnRpbnVlCgkgICAgICAgIGZpCgkgICAgICAgIGZpbGU9JG91dHB1dG5hbWUKCSAgICAg IGVsc2UKCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rICckZmlsZSciCgkg ICAgICBmaQoJICAgIH0KCSAgZWxzZQoJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQg d2UgY29tcGlsZWQgZWFybGllci4KCSAgICBmaWxlPWAkRUNITyAiJGZpbGUkc3RyaXBwZWRf ZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCgkgIGZpCglmaQoKCSMg cmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQg YW5vdGhlcgoJIyBvbmUgYW55d2F5CgljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KCSov dXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4K CSAgKi5leGU6Ki5leGUpCgkgICAgIyB0aGlzIGlzIG9rCgkgICAgOzsKCSAgKi5leGU6KikK CSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCgkgICAgOzsKCSAgKjoqLmV4ZSkKCSAgICBm dW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRkZXN0ZmlsZSIKCSAgICBkZXN0ZmlsZT0kZnVu Y19zdHJpcG5hbWVfcmVzdWx0CgkgICAgOzsKCSAgZXNhYwoJICA7OwoJZXNhYwoJZnVuY19z aG93X2V2YWwgIiRpbnN0YWxsX3Byb2dcJHN0cmlwbWUgXCRmaWxlIFwkZGVzdGZpbGUiICdl eGl0ICQ/JwoJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhl bgoJICAke1JNfXIgIiR0bXBkaXIiCglmaQoJOzsKICAgICAgZXNhYwogICAgZG9uZQoKICAg IGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbwogICAgICBmdW5jX2Jhc2VuYW1lICIkZmls ZSIKICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKCiAgICAgICMgU2V0IHVwIHRo ZSByYW5saWIgcGFyYW1ldGVycy4KICAgICAgb2xkbGliPSRkZXN0ZGlyLyRuYW1lCiAgICAg IGZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3Rv X3czMgogICAgICB0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CgogICAg ICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0 ICQ/JwoKICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3Ry aXBsaWIiOyB0aGVuCglmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkdG9vbF9vbGRs aWIiICdleGl0ICQ/JwogICAgICBmaQoKICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhl IHBvc3RpbnN0YWxsIGNvbW1hbmRzLgogICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9w b3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKICAgIGRvbmUKCiAgICB0ZXN0IC1uICIkZnV0 dXJlX2xpYmRpcnMiICYmIFwKICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4g JyRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCgogICAgaWYgdGVzdCAtbiAi JGN1cnJlbnRfbGliZGlycyI7IHRoZW4KICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1 bi4KICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRf bGliZGlycyIKICAgICAgZXhlY19jbWQ9JyRTSEVMTCAiJHByb2dwYXRoIiAkcHJlc2VydmVf YXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCiAgICBlbHNlCiAgICAgIGV4aXQgJEVY SVRfU1VDQ0VTUwogICAgZmkKfQoKdGVzdCBpbnN0YWxsID0gIiRvcHRfbW9kZSIgJiYgZnVu Y19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CgoKIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRw dXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZp bGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCiMgYSBkbHByZW9wZW4gc3lt Ym9sIHRhYmxlLgpmdW5jX2dlbmVyYXRlX2Rsc3ltcyAoKQp7CiAgICAkZGVidWdfY21kCgog ICAgbXlfb3V0cHV0bmFtZT0kMQogICAgbXlfb3JpZ2luYXRvcj0kMgogICAgbXlfcGljX3A9 JHszLWZhbHNlfQogICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgJFNF RCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKICAgIG15X2Rsc3ltcz0KCiAgICBpZiB0ZXN0IC1u ICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgog ICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUi OyB0aGVuCglteV9kbHN5bXM9JHtteV9vdXRwdXRuYW1lfVMuYwogICAgICBlbHNlCglmdW5j X2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20g ZGxwcmVvcGVuZWQgZmlsZXMiCiAgICAgIGZpCiAgICBmaQoKICAgIGlmIHRlc3QgLW4gIiRt eV9kbHN5bXMiOyB0aGVuCiAgICAgIGNhc2UgJG15X2Rsc3ltcyBpbgogICAgICAiIikgOzsK ICAgICAgKi5jKQoJIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxl cy4KCW5saXN0PSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLm5tCgoJZnVuY19zaG93 X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKCgkjIFBhcnNlIHRoZSBu YW1lIGxpc3QgaW50byBhIHNvdXJjZSBmaWxlLgoJZnVuY192ZXJib3NlICJjcmVhdGluZyAk b3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgoKCSRvcHRfZHJ5X3J1biB8fCAkRUNITyA+ICIk b3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAovKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJl c29sdXRpb24gdGFibGUgZm9yICckbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAq LwovKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04gKi8K CiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gXCJDXCIgewojZW5kaWYKCiNpZiBkZWZpbmVk IF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0 KSkgfHwgKF9fR05VQ19fID4gNCkpCiNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBc Ii1Xc3RyaWN0LXByb3RvdHlwZXNcIgojZW5kaWYKCi8qIEtlZXAgdGhpcyBjb2RlIGluIHN5 bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMu ICAqLwojaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmlu ZWQgX1dJTjMyX1dDRQovKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0 IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1l ZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwojIGRl ZmluZSBMVF9ETFNZTV9DT05TVAojZWxpZiBkZWZpbmVkIF9fb3NmX18KLyogVGhpcyBzeXN0 ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4g ICovCiMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCiNlbHNlCiMgZGVmaW5lIExUX0RMU1lNX0NP TlNUIGNvbnN0CiNlbmRpZgoKI2RlZmluZSBTVFJFUShzMSwgczIpIChzdHJjbXAgKChzMSks IChzMikpID09IDApCgovKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUg Y29tcGlsZXIuICovXAoiCgoJaWYgdGVzdCB5ZXMgPSAiJGRsc2VsZiI7IHRoZW4KCSAgZnVu Y192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJG91dHB1dCciCgoJICAk b3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCgoJICAjIEFk ZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCgkgIHByb2dm aWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJv IiB8ICROTDJTUGAKCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCgkgICAgZnVu Y190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193 MzIKCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9t ICckZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZh bCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBl ID4+ICckbmxpc3QnIgoJICBkb25lCgoJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1z IjsgdGhlbgoJICAgICRvcHRfZHJ5X3J1biB8fCB7CgkgICAgICBldmFsICckRUdSRVAgLXYg IiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKCSAgICAgIGV2 YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCgkgICAgfQoJICBmaQoKCSAgaWYgdGVzdCAt biAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgoJICAgICRvcHRfZHJ5X3J1biB8fCB7 CgkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlz dCIgPiAiJG5saXN0IlQnCgkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJwoJ ICAgIH0KCSAgZmkKCgkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xz CgkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KCSAgICBleHBvcnRfc3lt Ym9scz0kb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAKCSAgICAkb3B0X2RyeV9ydW4g fHwgewoJICAgICAgJFJNICRleHBvcnRfc3ltYm9scwoJICAgICAgZXZhbCAiJFNFRCAtbiAt ZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5s aXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJwoJICAgICAgY2FzZSAkaG9zdCBpbgoJICAgICAg KmN5Z3dpbiogfCAqbWluZ3cqIHwgKndpbmRvd3MqIHwgKmNlZ2NjKiApCiAgICAgICAgICAg ICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFt ZS5kZWYiJwogICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwoJICAgICAgICA7OwoJICAgICAg ZXNhYwoJICAgIH0KCSAgZWxzZQoJICAgICRvcHRfZHJ5X3J1biB8fCB7CgkgICAgICBldmFs ICIkU0VEIC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3Mv JC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRu YW1lLmV4cCInCgkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1 dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJwoJICAgICAgZXZhbCAnJE1WICIk bmxpc3QiVCAiJG5saXN0IicKCSAgICAgIGNhc2UgJGhvc3QgaW4KCSAgICAgICAgKmN5Z3dp biogfCAqbWluZ3cqIHwgKndpbmRvd3MqIHwgKmNlZ2NjKiApCgkgICAgICAgICAgZXZhbCAi ZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKCSAg ICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRu YW1lLmRlZiInCgkgICAgICAgICAgOzsKCSAgICAgIGVzYWMKCSAgICB9CgkgIGZpCglmaQoK CWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCgkgIGZ1bmNfdmVyYm9zZSAiZXh0 cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gJyRkbHByZWZpbGUnIgoJICBmdW5jX2Jh c2VuYW1lICIkZGxwcmVmaWxlIgoJICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogICAg ICAgICAgY2FzZSAkaG9zdCBpbgoJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICp3aW5kb3dz KiB8ICpjZWdjYyogKQoJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0 byBvYnRhaW4gZGxuYW1lCgkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRs cHJlZmlsZSI7IHRoZW4KCSAgICAgICAgZnVuY190cl9zaCAiJGRscHJlZmlsZSIKCSAgICAg ICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKCSAg ICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9CgkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJy X2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCgkgICAgICAg ICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJs ZSB2YWx1ZXMKCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xh ZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCgkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJl ZmlsZV9kbG5hbWUiOyB0aGVuCgkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVm aWxlX2RsbmFtZSIKCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRmdW5jX2Jh c2VuYW1lX3Jlc3VsdAoJICAgICAgICAgIGVsc2UKCSAgICAgICAgICAgICMgbm8gbGFmaWxl LiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5 Pi4KCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmls ZSIKCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9s aW5rbGliX3Jlc3VsdAoJICAgICAgICAgIGZpCgkgICAgICAgIGZpCgkgICAgICAgICRvcHRf ZHJ5X3J1biB8fCB7CgkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2Vu YW1lIjsgdGhlbgoJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJh c2VuYW1lIiA+PiAiJG5saXN0IicKCSAgICAgICAgICBlbHNlCgkgICAgICAgICAgICBmdW5j X3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCgkgICAg ICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwoJICAgICAgICAg IGZpCgkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29u dmVydF9maWxlX21zeXNfdG9fdzMyCgkgICAgICAgICAgY2FzZSAkaG9zdCBpbgoJICAgICAg ICAgICAgaVszNDU2XTg2LSotbWluZ3czMiopCgkgICAgICAgICAgICAgIGV2YWwgIiROTSBc IiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3lt Ym9sX3BpcGUgfAoJICAgICAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdz L0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCgkgICAgICAgICAgICA7OwoJ ICAgICAgICAgICAgKikKCSAgICAgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9v bF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8Cgkg ICAgICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87 cy9fX25tXy8vJyA+PiAnJG5saXN0JyIKCSAgICAgICAgICAgIDs7CgkgICAgICAgICAgZXNh YwoJICAgICAgICB9CgkgICAgICBlbHNlICMgbm90IGFuIGltcG9ydCBsaWIKCSAgICAgICAg JG9wdF9kcnlfcnVuIHx8IHsKCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ ICIkbmxpc3QiJwoJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBm dW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgoJICAgICAgICAgIGV2YWwgIiROTSBcIiRm dW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9s X3BpcGUgPj4gJyRubGlzdCciCgkgICAgICAgIH0KCSAgICAgIGZpCgkgICAgOzsKCSAgICAq KQoJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKCSAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5h bWUgIiA+PiAiJG5saXN0IicKCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZp bGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCgkgICAgICAgIGV2YWwgIiROTSBc IiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3lt Ym9sX3BpcGUgPj4gJyRubGlzdCciCgkgICAgICB9CgkgICAgOzsKICAgICAgICAgIGVzYWMK CWRvbmUKCgkkb3B0X2RyeV9ydW4gfHwgewoJICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxl YXN0IGFuIGVtcHR5IGZpbGUuCgkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3Qi CgoJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgoJICAgICRFR1JFUCAt diAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCgkgICAgJE1W ICIkbmxpc3QiVCAiJG5saXN0IgoJICBmaQoKCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVp ZnlpbmcgdGhlIG91dHB1dC4KCSAgaWYgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiB8Cgkg ICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KCQlz b3J0IC1rIDMKCSAgICAgIGVsc2UKCQlzb3J0ICsyCgkgICAgICBmaSB8CgkgICAgICB1bmlx ID4gIiRubGlzdCJTOyB0aGVuCgkgICAgOgoJICBlbHNlCgkgICAgJEdSRVAgLXYgIl46ICIg PCAiJG5saXN0IiA+ICIkbmxpc3QiUwoJICBmaQoKCSAgaWYgdGVzdCAtZiAiJG5saXN0IlM7 IHRoZW4KCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJT ID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKCSAgZWxzZQoJICAgIGVjaG8gJy8q IE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgoJICBmaQoKCSAgZnVu Y19zaG93X2V2YWwgJyRSTSAiJHtubGlzdH1JIicKCSAgaWYgdGVzdCAtbiAiJGdsb2JhbF9z eW1ib2xfdG9faW1wb3J0IjsgdGhlbgoJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2lt cG9ydCInIDwgIiRubGlzdCJTID4gIiRubGlzdCJJJwoJICBmaQoKCSAgZWNobyA+PiAiJG91 dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKCi8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3lt Ym9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KdHlwZWRlZiBzdHJ1Y3QgewogIGNvbnN0IGNo YXIgKm5hbWU7CiAgdm9pZCAqYWRkcmVzczsKfSBsdF9kbHN5bWxpc3Q7CmV4dGVybiBMVF9E TFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRf c3ltYm9sc1tdO1wKIgoKCSAgaWYgdGVzdCAtcyAiJG5saXN0Ikk7IHRoZW4KCSAgICBlY2hv ID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXApzdGF0aWMgdm9pZCBsdF9zeW1p bml0KHZvaWQpCnsKICBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QgKnN5bWJvbCA9IGx0 XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7CiAgZm9yICg7IHN5bWJvbC0+ bmFtZTsgKytzeW1ib2wpCiAgICB7IgoJICAgICRTRUQgJ3MvLiovICAgICAgaWYgKFNUUkVR IChzeW1ib2wtPm5hbWUsIFwiJlwiKSkgc3ltYm9sLT5hZGRyZXNzID0gKHZvaWQgKikgXCYm Oy8nIDwgIiRubGlzdCJJID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgoJICAgIGVj aG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCiAgICB9Cn0iCgkgIGZpCgkg IGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCkxUX0RMU1lNX0NPTlNU IGx0X2Rsc3ltbGlzdApsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10g PQp7IHtcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDB9LCIKCgkgIGlmIHRlc3QgLXMg IiRubGlzdCJJOyB0aGVuCgkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3lt cyIgIlwKICB7XCJASU5JVEBcIiwgKHZvaWQgKikgJmx0X3N5bWluaXR9LCIKCSAgZmkKCgkg IGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgoJICBubykKCSAgICBldmFsICIkZ2xvYmFsX3N5 bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIv JG15X2Rsc3ltcyIKCSAgICA7OwoJICAqKQoJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3Rv X2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2Jq ZGlyLyRteV9kbHN5bXMiCgkgICAgOzsKCSAgZXNhYwoJICBlY2hvID4+ICIkb3V0cHV0X29i amRpci8kbXlfZGxzeW1zIiAiXAogIHswLCAodm9pZCAqKSAwfQp9OwoKLyogVGhpcyB3b3Jr cyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCiNpZmRlZiBGUkVFQlNE X1dPUktBUk9VTkQKc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsK ICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKfQojZW5k aWYKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZlwKIgoJfSAjICEkb3B0X2RyeV9ydW4K CglwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CgljYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4K CSoiIC1zdGF0aWMgIiopIDs7CgkqKQoJICBjYXNlICRob3N0IGluCgkgICMgY29tcGlsaW5n IHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAoJICAj IGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0g aXMKCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11 c3Qgbm90IHVzZQoJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBU aGUgcHJvYmxlbSBleGlzdHMgaW4KCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBp biBGcmVlQlNEIDMuMS4KCSAgKi0qLWZyZWVic2QyLip8Ki0qLWZyZWVic2QzLjAqfCotKi1m cmVlYnNkZWxmMy4wKikKCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcg LURGUkVFQlNEX1dPUktBUk9VTkQiIDs7CgkgICotKi1ocHV4KikKCSAgICBwaWNfZmxhZ19m b3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OwoJICAqKQoJICAgICRteV9waWNfcCAmJiBw aWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCgkgICAgOzsKCSAgZXNhYwoJICA7 OwoJZXNhYwoJc3ltdGFiX2NmbGFncz0KCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbwoJICBj YXNlICRhcmcgaW4KCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CgkgICopIGZ1bmNfYXBw ZW5kIHN5bXRhYl9jZmxhZ3MgIiAkYXJnIiA7OwoJICBlc2FjCglkb25lCgoJIyBOb3cgY29t cGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91 dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWck cGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JwoKCSMgQ2xl YW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRw dXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQi ICIke25saXN0fUkiJwoKCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBj b3JyZWN0IG5hbWUuCglzeW1maWxlb2JqPSRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFt ZX1TLiRvYmpleHQKCWNhc2UgJGhvc3QgaW4KCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICp3aW5k b3dzKiB8ICpjZWdjYyogKQoJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0 cHV0bmFtZS5kZWYiOyB0aGVuCgkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBp bGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0 cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNI TyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpk aXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCgkgIGVsc2UKCSAgICBjb21w aWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJ TEVAJSRzeW1maWxlb2JqJSJgCgkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5h bGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCgkgIGZp CgkgIDs7CgkqKQoJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5k IiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCgkgIGZpbmFsaXplX2NvbW1h bmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3lt ZmlsZW9iaiUiYAoJICA7OwoJZXNhYwoJOzsKICAgICAgKikKCWZ1bmNfZmF0YWxfZXJyb3Ig InVua25vd24gc3VmZml4IGZvciAnJG15X2Rsc3ltcyciCgk7OwogICAgICBlc2FjCiAgICBl bHNlCiAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0 IHJlZmVyIHRvCiAgICAgICMgbHRfcHJlbG9hZGVkX3N5bWJvbHMuICBUaGUgbGlua2VyIHdp bGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUKICAgICAgIyByZWFsbHkgd2FzIHJlcXVp cmVkLgoKICAgICAgIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KICAgICAgY29tcGlsZV9j b21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAl JSJgCiAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIg fCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCiAgICBmaQp9CgojIGZ1bmNfY3lnbWluZ19nbnVf aW1wbGliX3AgQVJHCiMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVz IChUUlVFKSBpZgojIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFy eS4gUmV0dXJucwojIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCmZ1 bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKewogICRkZWJ1Z19jbWQKCiAgZnVuY190b190 b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgogIGZ1bmNfY3ln bWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8 IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXow LTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAogIHRlc3QgLW4g IiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCn0KCiMgZnVuY19jeWdtaW5nX21zX2lt cGxpYl9wIEFSRwojIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAo VFJVRSkgaWYKIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMK IyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgpmdW5jX2N5Z21pbmdf bXNfaW1wbGliX3AgKCkKewogICRkZWJ1Z19jbWQKCiAgZnVuY190b190b29sX2ZpbGUgIiQx IiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgogIGZ1bmNfY3lnbWluZ19tc19pbXBs aWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2Jh bF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAogIHRl c3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKfQoKIyBmdW5jX3dpbjMyX2xp YmlkIGFyZwojIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKIwojIE5l ZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMK IyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJn dW1lbnQKIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBj YWxsZWQuCiMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxzbyBkZWFsIHdpdGggNjQgYml0IGJpbmFy aWVzLgpmdW5jX3dpbjMyX2xpYmlkICgpCnsKICAkZGVidWdfY21kCgogIHdpbjMyX2xpYmlk X3R5cGU9dW5rbm93bgogIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxg CiAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgogICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJy YXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAogICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFy Y2hpdmUgaW1wb3J0IgogICAgOzsKICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGlt cG9ydCwgb3Igc3RhdGljCiAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3 aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KICAgIGlmIGV2YWwgJE9C SkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKICAgICAgICRFR1JF UCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFy bS13aW5jZXxwZS14ODYtNjR8cGUtYWFyY2g2NCknID4vZGV2L251bGw7IHRoZW4KICAgICAg Y2FzZSAkbm1faW50ZXJmYWNlIGluCiAgICAgICJNUyBkdW1wYmluIikKCWlmIGZ1bmNfY3ln bWluZ19tc19pbXBsaWJfcCAiJDEiIHx8CgkgICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9w ICIkMSIKCXRoZW4KCSAgd2luMzJfbm1yZXM9aW1wb3J0CgllbHNlCgkgIHdpbjMyX25tcmVz PQoJZmkKCTs7CiAgICAgICopCglmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVy dF9maWxlX21zeXNfdG9fdzMyCgl3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEg XCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAoJICAkU0VEIC1uIC1lICcKCSAgICAx LDEwMHsKCQkvIEkgL3sKCQkgICAgc3wuKnxpbXBvcnR8CgkJICAgIHAKCQkgICAgcQoJCX0K CSAgICB9J2AKCTs7CiAgICAgIGVzYWMKICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KICAg ICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7Owog ICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7 CiAgICAgIGVzYWMKICAgIGZpCiAgICA7OwogICpETEwqKQogICAgd2luMzJfbGliaWRfdHlw ZT0ieDg2IERMTCIKICAgIDs7CiAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRz IGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCiAgICBjYXNlICR3aW4zMl9maWxlcmVzIGluCiAg ICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCiAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4 NiBETEwiCiAgICAgIDs7CiAgICBlc2FjCiAgICA7OwogIGVzYWMKICAkRUNITyAiJHdpbjMy X2xpYmlkX3R5cGUiCn0KCiMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliIEFSRwojCiMg UGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKIyBuYW1lIG9mIHRo ZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKIyBpbXBvcnQgbGlicmFyeSBB UkcuCiMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQojICAgICRz aGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAojIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhl IHZhcmlhYmxlCiMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CmZ1bmNfY3ln bWluZ19kbGxfZm9yX2ltcGxpYiAoKQp7CiAgJGRlYnVnX2NtZAoKICBzaGFyZWRsaWJfZnJv bV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlm eSAiJDEiYAp9CgojIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3Jl IFNFQ1RJT05fTkFNRSBMSUJOQU1FcwojCiMgVGhlIGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJh Y2sgaW1wbGVtZW50YXRpb24gb2YgYQojIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRv IGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCiMgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3Bl Y2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUuCiMKIyBTRUNUSU9OX05BTUUgaXMgZWl0 aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKIyBvbiB0aGUgcGxhdGZvcm0g YW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUgaW1wbGliLgojCiMgRWNob3MgdGhlIG5h bWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCiMgc3BlY2lmaWVkIGltcG9ydCBs aWJyYXJ5LgpmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQp7 CiAgJGRlYnVnX2NtZAoKICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNl ZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAogICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIk MiIgMj4vZGV2L251bGwgfAogICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1h dGNoX2xpdGVyYWwiJzovewogICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2Yg YXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCiAgICAgIHMvLiovPT09PU1BUks9PT09 LwogICAgICBwCiAgICAgIGQKICAgIH0KICAgICMgVGhlc2UgbGluZXMgY2FuIHNvbWV0aW1l cyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJzLCBidXQKICAgICMgYXJlIGFsd2F5cyB1 bmludGVyZXN0aW5nCiAgICAvOlsJIF0qZmlsZSBmb3JtYXQgcGVbaV1ceywxXH0tL2QKICAg IC9eSW4gYXJjaGl2ZSBbXjpdKjovZAogICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQK ICAgIC9ePT09PU1BUks9PT09L3AKICAgICMgUmVtb3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3Mg dGhhbiA0MyBjaGFyYWN0ZXJzCiAgICAvXi5cezQzXH0vIWQKICAgICMgRnJvbSByZW1haW5p bmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFyYWN0ZXJzCiAgICBzL14uXHs0M1x9Ly8n IHwKICAgICRTRUQgLW4gJwogICAgICAjIEpvaW4gbWFya2VyIGFuZCBhbGwgbGluZXMgdW50 aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBsaW5lCiAgICAgIC9ePT09PU1BUks9PT09 LyBiIHBhcmEKICAgICAgSAogICAgICAkIGIgcGFyYQogICAgICBiCiAgICAgIDpwYXJhCiAg ICAgIHgKICAgICAgcy9cbi8vZwogICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCiAgICAgIHMv Xj09PT1NQVJLPT09PS8vCiAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRl c3BhY2UKICAgICAgcy9bXC4gXHRdKiQvLwogICAgICAjIFByaW50CiAgICAgIC8uL3AnIHwK ICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBz dHJpbmdpZmllZAogICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBv ZiBhbGwgbWVtYmVycyBvZiB0aGUKICAgICMgYXJjaGl2ZSB0aGF0IHBvc3Nlc3MgdGhhdCBz ZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQogICAgIyBhbGwgdGhvc2UgdGhhdCBoYXZl IGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCiAgICAjIGEgJy4nICh0aGF0 IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5wcmludGFibGUKICAgICMg Y2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVz cyB0aGFuCiAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMg d2hvc2UgbmFtZSBhY3R1YWxseQogICAgIyBiZWdpbnMgd2l0aCBhIGxpdGVyYWwgJy4nIG9y IGEgc2luZ2xlIGNoYXJhY3RlciBmb2xsb3dlZCBieQogICAgIyBhICcuJy4KICAgICMKICAg ICMgT2YgdGhvc2UgdGhhdCByZW1haW4sIHByaW50IHRoZSBmaXJzdCBvbmUuCiAgICAkU0VE IC1lICcvXlwuL2Q7L14uXC4vZDtxJwp9CgojIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxp Yl9mYWxsYmFjayBBUkcKIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0 IHRoZQojIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAoj IGltcG9ydCBsaWJyYXJ5IEFSRy4KIwojIFRoaXMgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24g aXMgZm9yIHVzZSB3aGVuICRETExUT09MCiMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVu dGlmeS1zdHJpY3Qgb3B0aW9uLgojIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wg dmFyaWFibGUKIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKIyBSZXN1bHQgaXMg YXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQojICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGli X3Jlc3VsdApmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKewogICRk ZWJ1Z19jbWQKCiAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiOyB0aGVuCiAg ICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CiAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGli X3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5p ZGF0YSQ3JyAiJDEiYAogIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSI7IHRo ZW4KICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5CiAgICBzaGFyZWRsaWJfZnJv bV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNr X2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAogIGVsc2UKICAgICMgdW5rbm93bgogICAgc2hhcmVk bGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9CiAgZmkKfQoKCiMgZnVuY19leHRyYWN0X2FuX2Fy Y2hpdmUgZGlyIG9sZGxpYgpmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQp7CiAgICAkZGVi dWdfY21kCgogICAgZl9leF9hbl9hcl9kaXI9JDE7IHNoaWZ0CiAgICBmX2V4X2FuX2FyX29s ZGxpYj0kMQogICAgaWYgdGVzdCB5ZXMgPSAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlv biI7IHRoZW4KICAgICAgbG9ja2ZpbGU9JGZfZXhfYW5fYXJfb2xkbGliLmxvY2sKICAgICAg dW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rl di9udWxsOyBkbwoJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVt b3ZlZCIKCXNsZWVwIDIKICAgICAgZG9uZQogICAgZmkKICAgIGZ1bmNfc2hvd19ldmFsICIo Y2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIiki IFwKCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCiAgICBp ZiB0ZXN0IHllcyA9ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIjsgdGhlbgogICAg ICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2NrZmlsZSIKICAgIGZpCiAgICBpZiAoJEFS IHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAy PiYxKTsgdGhlbgogICAgIDoKICAgIGVsc2UKICAgICAgZnVuY19mYXRhbF9lcnJvciAib2Jq ZWN0IG5hbWUgY29uZmxpY3RzIGluIGFyY2hpdmU6ICRmX2V4X2FuX2FyX2Rpci8kZl9leF9h bl9hcl9vbGRsaWIiCiAgICBmaQp9CgoKIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9w IG9sZGxpYiAuLi4KZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCnsKICAgICRkZWJ1Z19jbWQK CiAgICBteV9nZW50b3A9JDE7IHNoaWZ0CiAgICBteV9vbGRsaWJzPSR7MSsiJEAifQogICAg bXlfb2xkb2Jqcz0KICAgIG15X3hsaWI9CiAgICBteV94YWJzPQogICAgbXlfeGRpcj0KCiAg ICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KICAgICAgIyBFeHRyYWN0IHRoZSBv YmplY3RzLgogICAgICBjYXNlICRteV94bGliIGluCglbXFwvXSogfCBbQS1aYS16XTpbXFwv XSopIG15X3hhYnM9JG15X3hsaWIgOzsKCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7 OwogICAgICBlc2FjCiAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgogICAgICBteV94 bGliPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogICAgICBteV94bGliX3U9JG15X3hsaWIKICAg ICAgd2hpbGUgOjsgZG8KICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGlu CgkqIiAkbXlfeGxpYl91ICIqKQoJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsg MQoJICBleHRyYWN0ZWRfc2VyaWFsPSRmdW5jX2FyaXRoX3Jlc3VsdAoJICBteV94bGliX3U9 bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OwoJKikgYnJlYWsgOzsKCWVzYWMKICAg ICAgZG9uZQogICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMg JG15X3hsaWJfdSIKICAgICAgbXlfeGRpcj0kbXlfZ2VudG9wLyRteV94bGliX3UKCiAgICAg IGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCgogICAgICBjYXNlICRob3N0IGluCiAgICAgICot ZGFyd2luKikKCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKCSMgRG8gbm90 IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgoJJG9wdF9kcnlfcnVu IHx8IHsKCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCgkgIGNkICRteV94ZGlyIHx8IGV4aXQg JD8KCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKCSAgZGFyd2luX2N1cmRpcj1gcHdkYAoJ ICBmdW5jX2Jhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiCgkgIGRhcndpbl9iYXNlX2FyY2hp dmU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CgkgIGRhcndpbl9hcmNoZXM9YCRMSVBPIC1pbmZv ICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEdSRVAgQXJjaGl0ZWN0dXJlcyAy Pi9kZXYvbnVsbCB8fCB0cnVlYAoJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRo ZW4KCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAt ZSAncy8uKmFyZTovLydgCgkgICAgZGFyd2luX2FyY2g9CgkgICAgZnVuY192ZXJib3NlICIk ZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2lu X2FyY2hlcyIKCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzOyBkbwoJ ICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFy d2luX2FyY2giCgkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5m YXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoLyRkYXJ3aW5fYmFzZV9h cmNoaXZlIiAiJGRhcndpbl9hcmNoaXZlIgoJICAgICAgY2QgInVuZmF0LSQkLyRkYXJ3aW5f YmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaCIKCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNo aXZlICJgcHdkYCIgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIgoJICAgICAgY2QgIiRkYXJ3aW5f Y3VyZGlyIgoJICAgICAgJFJNICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFy d2luX2FyY2gvJGRhcndpbl9iYXNlX2FyY2hpdmUiCgkgICAgZG9uZSAjICRkYXJ3aW5fYXJj aGVzCiAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmpl Y3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQoJICAgIGRhcndpbl9maWxlbGlzdD1gZmlu ZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1w cmludCB8ICRTRUQgLWUgIiRzZWRfYmFzZW5hbWUiIHwgc29ydCAtdWAKCSAgICBkYXJ3aW5f ZmlsZT0KCSAgICBkYXJ3aW5fZmlsZXM9CgkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3 aW5fZmlsZWxpc3Q7IGRvCgkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5h bWUgJGRhcndpbl9maWxlIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCgkgICAgICAkTElQTyAt Y3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcwoJICAgIGRvbmUg IyAkZGFyd2luX2ZpbGVsaXN0CgkgICAgJFJNIC1yZiB1bmZhdC0kJAoJICAgIGNkICIkZGFy d2luX29yaWdfZGlyIgoJICBlbHNlCgkgICAgY2QgJGRhcndpbl9vcmlnX2RpcgoJICAgIGZ1 bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgoJICBmaSAjICRk YXJ3aW5fYXJjaGVzCgl9ICMgISRvcHRfZHJ5X3J1bgoJOzsKICAgICAgKikKICAgICAgICBm dW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKCTs7CiAgICAg IGVzYWMKICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1u YW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8IHNvcnQgfCAk TkwyU1BgCiAgICBkb25lCgogICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0kbXlf b2xkb2Jqcwp9CgoKIyBmdW5jX2VtaXRfd3JhcHBlciBbYXJnPW5vXQojCiMgRW1pdCBhIGxp YnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgojIERvbid0IGRpcmVjdGx5IG9wZW4g YSBmaWxlIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8KIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0 IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndy93aW5kb3dzCiMgd3JhcHBlciBleGVj dXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbgojIGZ1bmNfbW9kZV9s aW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKIyBzZXQg dGhlcmVpbi4KIwojIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRf QkVMT05HU19JTl9PQkpESVIKIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhl biB0aGUgZW1pdHRlZCBzY3JpcHQKIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3Rvcnkg d2hlcmUgaXQgaXMgc3RvcmVkIGlzCiMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBp cyBhIGN5Z3dpbi9taW5ndy93aW5kb3dzLXNwZWNpZmljCiMgYmVoYXZpb3IuCmZ1bmNfZW1p dF93cmFwcGVyICgpCnsKCWZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JHsxLW5vfQoKCSRFQ0hP ICJcCiMhICRTSEVMTAoKIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZv ciAkb2JqZGlyLyRvdXRwdXRuYW1lCiMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBB Q0tBR0UpICRWRVJTSU9OCiMKIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJl Y3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKIyBsaWJyYXJpZXMgdGhhdCBp dCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCiMKIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNo b3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KIyBJZiBp dCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCgojIFNlZCBzdWJzdGl0dXRp b24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVz CiMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUt cXVvdGVkIHN0cmluZ3MuCnNlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKCiMg QmUgQm91cm5lIGNvbXBhdGlibGUKaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1c IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgZW11bGF0ZSBzaAog IE5VTExDTUQ9OgogICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5n IG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCiAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2Uu ICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wi XCRAXCInCiAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKZWxzZQogIGNhc2UgXGAoc2V0IC1vKSAy Pi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKZmkKQklOX1NI PXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKRFVBTENBU0U9MTsgZXhwb3J0IERV QUxDQVNFICMgZm9yIE1LUyBzaAoKIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBw cmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKIyBpZiBDRFBBVEggaXMgc2V0 LgoodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICgpyZWxp bmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCgojIFRoaXMgZW52aXJvbm1lbnQgdmFy aWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCmlmIHRlc3QgXCJcJGxpYnRv b2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgogICMgaW5zdGFsbCBtb2Rl IG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgogIGdlbmVyYXRlZF9ieV9saWJ0b29s X3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJwogIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3Rf ZGVwbGlicycKZWxzZQogICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUs IFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KICBpZiB0ZXN0IFwiXCRsaWJ0 b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCiAgICBmaWxlPVwiXCQw XCIiCgogICAgZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkRUNITyIKICAgIHFFQ0hPPSRmdW5j X3F1b3RlX2FyZ19yZXN1bHQKICAgICRFQ0hPICJcCgojIEEgZnVuY3Rpb24gdGhhdCBpcyB1 c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCmZ1bmNfZmFs bGJhY2tfZWNobyAoKQp7CiAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKXCQxCl9MVEVDSE9f RU9GJwp9CiAgICBFQ0hPPSRxRUNITwogIGZpCgojIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNp bmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bwojIHRoZSBsaWJ0b29sIHdy YXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKIyAvc2NyaXB0 LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHRoYXQgaXMgdXNlZCBvbmx5IG9uCiMg d2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyAi LS1sdC0iCiMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9w dGlvbnMgdGhhdCBtYXRjaAojIHRoaXMgcGF0dGVybikuCiMKIyBUaGVyZSBhcmUgb25seSB0 d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVidWcgYW5kCiMgLS1sdC1kdW1wLXNjcmlw dC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgojCiMgVGhlIGZpcnN0 IGFyZ3VtZW50IHRvIHRoaXMgcGFyc2luZyBmdW5jdGlvbiBzaG91bGQgYmUgdGhlCiMgc2Ny aXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCmx0X29wdGlvbl9kZWJ1Zz0KZnVu Y19wYXJzZV9sdF9vcHRpb25zICgpCnsKICBsdF9zY3JpcHRfYXJnMD1cJDAKICBzaGlmdAog IGZvciBsdF9vcHQKICBkbwogICAgY2FzZSBcIlwkbHRfb3B0XCIgaW4KICAgIC0tbHQtZGVi dWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CiAgICAtLWx0LWR1bXAtc2NyaXB0KQogICAgICAg IGx0X2R1bXBfRD1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdz L15YLy8nIC1lICdzJS9bXi9dKiQlJSdcYAogICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0Rc IiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgogICAgICAgIGx0X2R1 bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8n IC1lICdzJV4uKi8lJSdcYAogICAgICAgIGNhdCBcIlwkbHRfZHVtcF9EL1wkbHRfZHVtcF9G XCIKICAgICAgICBleGl0IDAKICAgICAgOzsKICAgIC0tbHQtKikKICAgICAgICBcJEVDSE8g XCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgogICAgICAg IGV4aXQgMQogICAgICA7OwogICAgZXNhYwogIGRvbmUKCiAgIyBQcmludCB0aGUgZGVidWcg YmFubmVyIGltbWVkaWF0ZWx5OgogIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wi OyB0aGVuCiAgICBlY2hvIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbGlidG9v bCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OXCIgMT4mMgogIGZpCn0KCiMgVXNl ZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMgYXJndW1lbnRzIHRvIHN0ZG91dAojIChy ZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKZnVuY19s dF9kdW1wX2FyZ3MgKCkKewogIGx0X2R1bXBfYXJnc19OPTE7CiAgZm9yIGx0X2FyZwogIGRv CiAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2W1wk bHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCiAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIg XCRsdF9kdW1wX2FyZ3NfTiArIDFcYAogIGRvbmUKfQoKIyBDb3JlIGZ1bmN0aW9uIGZvciBs YXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgpmdW5jX2V4ZWNfcHJvZ3JhbV9jb3Jl ICgpCnsKIgogIGNhc2UgJGhvc3QgaW4KICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVj dG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKICAqLSotbWluZ3cqIHwgKi0qLXdpbmRvd3MqIHwg Ki0qLW9zMiogfCAqLWNlZ2NjKikKICAgICRFQ0hPICJcCiAgICAgIGlmIHRlc3QgLW4gXCJc JGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCiAgICAgICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6 JG91dHB1dDpcJExJTkVOTzogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwi IDE+JjIKICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKICAg ICAgZmkKICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRA XCJ9CiIKICAgIDs7CgogICopCiAgICAkRUNITyAiXAogICAgICBpZiB0ZXN0IC1uIFwiXCRs dF9vcHRpb25fZGVidWdcIjsgdGhlbgogICAgICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRv dXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYy CiAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCiAgICAgIGZp CiAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQoiCiAg ICA7OwogIGVzYWMKICAkRUNITyAiXAogICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVj IFwkcHJvZ3JhbSBcJCpcIiAxPiYyCiAgICAgIGV4aXQgMQp9CgojIEEgZnVuY3Rpb24gdG8g ZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KIyBTdHJpcHMg b3B0aW9ucyBpbiB0aGUgLS1sdC0qIG5hbWVzcGFjZSBmcm9tIFwkQCBhbmQKIyBsYXVuY2hl cyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KZnVu Y19leGVjX3Byb2dyYW0gKCkKewogIGNhc2UgXCIgXCQqIFwiIGluCiAgKlxcIC0tbHQtKikK ICAgIGZvciBsdF93cl9hcmcKICAgIGRvCiAgICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KICAg ICAgLS1sdC0qKSA7OwogICAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsg c2hpZnQ7OwogICAgICBlc2FjCiAgICAgIHNoaWZ0CiAgICBkb25lIDs7CiAgZXNhYwogIGZ1 bmNfZXhlY19wcm9ncmFtX2NvcmUgXCR7MStcIlwkQFwifQp9CgogICMgUGFyc2Ugb3B0aW9u cwogIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KCiAgIyBG aW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KICB0aGlzZGly PVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAogIHRlc3QgXCJ4 XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KCiAgIyBGb2xsb3cgc3lt Ym9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCiAgZmlsZT1c YGxzIC1sZCBcIlwkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAogIHdoaWxlIHRl c3QgLW4gXCJcJGZpbGVcIjsgZG8KICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8 ICRTRUQgJ3MlL1teL10qXCQlJSdcYAoKICAgICMgSWYgdGhlcmUgd2FzIGEgZGlyZWN0b3J5 IGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdGhpc2Rpci4KICAgIGlmIHRlc3QgXCJ4XCRkZXN0 ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGlu CiAgICAgIFtcXFxcL10qIHwgW0EtWmEtel06W1xcXFwvXSopIHRoaXNkaXI9XCJcJGRlc3Rk aXJcIiA7OwogICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CiAg ICAgIGVzYWMKICAgIGZpCgogICAgZmlsZT1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAn cyVeLiovJSUnXGAKICAgIGZpbGU9XGBscyAtbGQgXCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAk U0VEIC1uICdzLy4qLT4gLy9wJ1xgCiAgZG9uZQoKICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0 IG9uIGN5Z3dpbi9taW5ndy93aW5kb3dzIHdoZW4gZW1iZWRkZWQgaW50bwogICMgdGhlIGN3 cmFwcGVyLgogIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSPSRmdW5jX2VtaXRf d3JhcHBlcl9hcmcxCiAgaWYgdGVzdCBcIlwkV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9P QkpESVJcIiA9IFwieWVzXCI7IHRoZW4KICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKICAg IGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwiOyB0aGVuCiAgICAgIHRoaXNkaXI9XGBw d2RcYAogICAgZmkKICAgICMgcmVtb3ZlIC5saWJzIGZyb20gdGhpc2RpcgogICAgY2FzZSBc IlwkdGhpc2RpclwiIGluCiAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hP IFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKICAg ICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OwogICAgZXNhYwogIGZpCgogICMgVHJ5IHRvIGdl dCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCiAgYWJzZGlyPVxgY2QgXCJcJHRoaXNk aXJcIiAmJiBwd2RcYAogIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFi c2RpclwiCiIKCglpZiB0ZXN0IHllcyA9ICIkZmFzdF9pbnN0YWxsIjsgdGhlbgoJICAkRUNI TyAiXAogIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKICBwcm9nZGlyPVwiXCR0 aGlzZGlyLyRvYmpkaXJcIgoKICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFt XCIgfHwKICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwi XCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJFNFRCAxcVxgOyBcXAog ICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07 IHRoZW4KCiAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgoKICAgIGlmIHRlc3QgISAtZCBc IlwkcHJvZ2RpclwiOyB0aGVuCiAgICAgICRNS0RJUiBcIlwkcHJvZ2RpclwiCiAgICBlbHNl CiAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgogICAgZmkiCgoJICAkRUNITyAiXAoK ICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CiAgICBpZiB0ZXN0IC1uIFwi XCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCiAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1 dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgogICAgICBlbHNlCglc JEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgoJJFJNIFwiXCRwcm9nZGly L1wkZmlsZVwiCglleGl0IDEKICAgICAgZmkKICAgIGZpCgogICAgJE1WIFwiXCRwcm9nZGly L1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CiAgICB7 ICRSTSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKICAgICAgJE1WIFwiXCRwcm9nZGlyL1wk ZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CiAgICAkUk0gXCJcJHByb2dkaXIv XCRmaWxlXCIKICBmaSIKCWVsc2UKCSAgJEVDSE8gIlwKICBwcm9ncmFtPSckb3V0cHV0bmFt ZScKICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgoiCglmaQoKCSRFQ0hPICJcCgog IGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCgoJIyBmaXh1cCB0 aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KCSMKCSMgRml4IHRoZSBETEwgc2Vh cmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZwoJIyB0 byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCBhcmUgUEFUSCBhbmQgdW5p bnN0YWxsZWQKCSMgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4KCWlmIHRlc3QgLW4gIiRk bGxzZWFyY2hwYXRoIjsgdGhlbgoJICAkRUNITyAiXAogICAgIyBBZGQgdGhlIGRsbCBzZWFy Y2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKICAgIFBBVEg9JGRs bHNlYXJjaHBhdGg6XCRQQVRICiIKCWZpCgoJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIg aWYgd2UgaGF2ZSBvbmUuCglpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19y dW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBf cnBhdGgiOyB0aGVuCgkgICRFQ0hPICJcCiAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0 aCB0byAkc2hsaWJwYXRoX3ZhcgogICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwk JHNobGlicGF0aF92YXJcIgoKICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGgg Y29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgogICAgIyBUaGUgc2Vjb25kIGNvbG9u IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKICAgICRzaGxpYnBh dGhfdmFyPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIHwgJFNFRCAncy86OipcJC8v J1xgCgogICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCiIKCWZpCgoJJEVDSE8gIlwKICAgIGlm IHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4K ICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KICAg ICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwkQFwifQogICAgZmkKICBlbHNlCiAgICAj IFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCiAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiAn XCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCiAgICBcJEVDSE8g XCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIK ICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBp bmZvcm1hdGlvbi5cIiAxPiYyCiAgICBleGl0IDEKICBmaQpmaVwKIgp9CgoKIyBmdW5jX2Vt aXRfY3dyYXBwZXJleGVfc3JjCiMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBl ciBleGVjdXRhYmxlIG9uIHN0ZG91dAojIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRo aW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQojIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2Yg dmFyaWFibGUgc2V0IHRoZXJlaW4uCmZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKewoJ Y2F0IDw8RU9GCgovKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVj dXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCiAgIEdlbmVyYXRlZCBieSAkUFJPR1JB TSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgoKICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5u b3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCiAgIGxpYnJh cmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KCiAgIFRoaXMgd3JhcHBl ciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRp cmVjdG9yeS4KICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5Lgoq LwpFT0YKCSAgICBjYXQgPDwiRU9GIgojaWZkZWYgX01TQ19WRVIKIyBkZWZpbmUgX0NSVF9T RUNVUkVfTk9fREVQUkVDQVRFIDEKI2VuZGlmCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVk ZSA8c3RkbGliLmg+CiNpZiBkZWZpbmVkIF9XSU4zMiAmJiAhZGVmaW5lZCBfX0dOVUNfXwoj IGluY2x1ZGUgPGRpcmVjdC5oPgojIGluY2x1ZGUgPHByb2Nlc3MuaD4KIyBpbmNsdWRlIDxp by5oPgojZWxzZQojIGluY2x1ZGUgPHVuaXN0ZC5oPgojIGluY2x1ZGUgPHN0ZGludC5oPgoj IGlmZGVmIF9fQ1lHV0lOX18KIyAgaW5jbHVkZSA8aW8uaD4KIyBlbmRpZgojZW5kaWYKI2lu Y2x1ZGUgPG1hbGxvYy5oPgojaW5jbHVkZSA8c3RkYXJnLmg+CiNpbmNsdWRlIDxhc3NlcnQu aD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1ZGUgPGVy cm5vLmg+CiNpbmNsdWRlIDxmY250bC5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KCiNkZWZp bmUgU1RSRVEoczEsIHMyKSAoc3RyY21wICgoczEpLCAoczIpKSA9PSAwKQoKLyogZGVjbGFy YXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAqLwojaWYgZGVmaW5lZCBfX01JTkdXMzJf XwojIGlmZGVmIF9fU1RSSUNUX0FOU0lfXwpfQ1JUSU1QIGludCBfX2NkZWNsIF9wdXRlbnYg KGNvbnN0IGNoYXIgKik7CiMgZW5kaWYKI2VsaWYgZGVmaW5lZCBfX0NZR1dJTl9fCiMgaWZk ZWYgX19TVFJJQ1RfQU5TSV9fCmNoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIg Kik7CmludCBwdXRlbnYgKGNoYXIgKik7CmludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqLCBpbnQpOwojIGVuZGlmCi8qICNlbGlmIGRlZmluZWQgb3RoZXJfcGxhdGZv cm0gfHwgZGVmaW5lZCAuLi4gKi8KI2VuZGlmCgovKiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBl eGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3MgKi8KI2lmIGRlZmluZWQgX01TQ19WRVIK IyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQojIGRlZmluZSBzdGF0ICAgIF9zdGF0CiMgZGVm aW5lIGNobW9kICAgX2NobW9kCiMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAojIGRlZmluZSBw dXRlbnYgIF9wdXRlbnYKIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQwojZWxpZiBkZWZpbmVk IF9fTUlOR1czMl9fCiMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKIyBkZWZpbmUgc3RhdCAg ICBfc3RhdAojIGRlZmluZSBjaG1vZCAgIF9jaG1vZAojIGRlZmluZSBnZXRjd2QgIF9nZXRj d2QKIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CiNlbGlmIGRlZmluZWQgX19DWUdXSU5fXwoj IGRlZmluZSBIQVZFX1NFVEVOVgojIGRlZmluZSBGT1BFTl9XQiAid2IiCi8qICNlbGlmIGRl ZmluZWQgb3RoZXIgcGxhdGZvcm1zIC4uLiAqLwojZW5kaWYKCiNpZiBkZWZpbmVkIFBBVEhf TUFYCiMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKI2VsaWYgZGVmaW5lZCBNQVhQQVRI TEVOCiMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgojZWxzZQojIGRlZmluZSBMVF9Q QVRITUFYIDEwMjQKI2VuZGlmCgojaWZuZGVmIFNfSVhPVEgKIyBkZWZpbmUgU19JWE9USCAw CiNlbmRpZgojaWZuZGVmIFNfSVhHUlAKIyBkZWZpbmUgU19JWEdSUCAwCiNlbmRpZgoKLyog cGF0aCBoYW5kbGluZyBwb3J0YWJpbGl0eSBtYWNyb3MgKi8KI2lmbmRlZiBESVJfU0VQQVJB VE9SCiMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCiMgZGVmaW5lIFBBVEhfU0VQQVJBVE9S ICc6JwojZW5kaWYKCiNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fTVNET1NfXyB8 fCBkZWZpbmVkIF9fREpHUFBfXyB8fCBcCiAgZGVmaW5lZCBfX09TMl9fCiMgZGVmaW5lIEhB VkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCiMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKIyBpZm5k ZWYgRElSX1NFUEFSQVRPUl8yCiMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJwojIGVu ZGlmCiMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9S XzIgJzsnCiMgZW5kaWYKI2VuZGlmCgojaWZuZGVmIERJUl9TRVBBUkFUT1JfMgojIGRlZmlu ZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQojZWxzZSAv KiBESVJfU0VQQVJBVE9SXzIgKi8KIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgXAoJ KCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikp CiNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KCiNpZm5kZWYgUEFUSF9TRVBBUkFUT1Jf MgojIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFU T1IpCiNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KIyBkZWZpbmUgSVNfUEFUSF9TRVBB UkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCiNlbmRpZiAvKiBQQVRIX1NF UEFSQVRPUl8yICovCgojaWZuZGVmIEZPUEVOX1dCCiMgZGVmaW5lIEZPUEVOX1dCICJ3Igoj ZW5kaWYKI2lmbmRlZiBfT19CSU5BUlkKIyBkZWZpbmUgX09fQklOQVJZIDAKI2VuZGlmCgoj ZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVt KSAqIHNpemVvZih0eXBlKSkpCiNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAogIGlmIChz dGFsZSkgeyBmcmVlIChzdGFsZSk7IHN0YWxlID0gMDsgfSBcCn0gd2hpbGUgKDApCgojaWYg ZGVmaW5lZCBMVF9ERUJVR1dSQVBQRVIKc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CiNlbHNl CnN0YXRpYyBpbnQgbHRfZGVidWcgPSAwOwojZW5kaWYKCmNvbnN0IGNoYXIgKnByb2dyYW1f bmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8K CnZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOwpjaGFyICp4c3RyZHVwIChjb25zdCBjaGFy ICpzdHJpbmcpOwpjb25zdCBjaGFyICpiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOwpj aGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOwpjaGFyICpjaGFz ZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOwppbnQgbWFrZV9leGVjdXRhYmxl IChjb25zdCBjaGFyICpwYXRoKTsKaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIg KnBhdGgpOwpjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsK dm9pZCBsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0 IGNoYXIgKmZtdCwgLi4uKTsKdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50 IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7CnN0YXRpYyBjb25zdCBjaGFyICpu b25udWxsIChjb25zdCBjaGFyICpzKTsKc3RhdGljIGNvbnN0IGNoYXIgKm5vbmVtcHR5IChj b25zdCBjaGFyICpzKTsKdm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKnZhbHVlKTsKY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192 YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKdm9pZCBsdF91cGRhdGVfZXhl X3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKdm9pZCBsdF91 cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsK Y2hhciAqKnByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KTsKdm9pZCBsdF9kdW1wX3Njcmlw dCAoRklMRSAqZik7CkVPRgoKCSAgICBjYXQgPDxFT0YKI2lmIF9fR05VQ19fIDwgNCB8fCAo X19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpCiMgZGVmaW5lIGV4dGVybmFs bHlfdmlzaWJsZSB2b2xhdGlsZQojZWxzZQojIGRlZmluZSBleHRlcm5hbGx5X3Zpc2libGUg X19hdHRyaWJ1dGVfXygoZXh0ZXJuYWxseV92aXNpYmxlKSkgdm9sYXRpbGUKI2VuZGlmCmV4 dGVybmFsbHlfdmlzaWJsZSBjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUi Owpjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CkVP RgoKCSAgICBpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiAm JiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0 aGVuCiAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgoJICAg ICAgY2F0IDw8RU9GCmNvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3Rv X2hvc3RfcGF0aF9yZXN1bHQiOwpFT0YKCSAgICBlbHNlCgkgICAgICBjYXQgPDwiRU9GIgpj b25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIiOwpFT0YKCSAgICBmaQoKCSAgICBp ZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KICAgICAgICAgICAgICBmdW5jX3Rv X2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgoJICAgICAgY2F0IDw8RU9GCmNvbnN0IGNo YXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOwpjb25zdCBjaGFyICogRVhFX1BBVEhf VkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKRU9GCgkgICAgZWxzZQoJ ICAgICAgY2F0IDw8IkVPRiIKY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsK Y29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKRU9GCgkgICAgZmkKCgkgICAg aWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCI7IHRoZW4KCSAgICAgIGNhdCA8PEVPRgpj b25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8q IGhvcGVmdWxseSwgbm8gLmV4ZSAqLwpFT0YKCSAgICBlbHNlCgkgICAgICBjYXQgPDxFT0YK Y29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBo b3BlZnVsbHksIG5vIC5leGUgKi8KRU9GCgkgICAgZmkKCgoJICAgIGNhdCA8PCJFT0YiCgoj ZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgoKc3RhdGlj IGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElP Tl9QUkVGSVg7CnN0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExU V1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7CnN0YXRpYyBjb25zdCBjaGFy ICpkZWJ1Z19vcHQgICAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkZWJ1 ZyI7CgppbnQKbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogIGNoYXIgKipuZXdh cmd6OwogIGludCAgbmV3YXJnYzsKICBjaGFyICp0bXBfcGF0aHNwZWM7CiAgY2hhciAqYWN0 dWFsX2N3cmFwcGVyX3BhdGg7CiAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CiAgY2hh ciAqdGFyZ2V0X25hbWU7CiAgY2hhciAqbHRfYXJndl96ZXJvOwogIGludCBydmFsID0gMTI3 OwoKICBpbnQgaTsKCiAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9u YW1lIChhcmd2WzBdKSk7CiAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgKHNpemVfdCkg YXJnYyArIDEpOwoKICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0 byByZWx5IG9uIGdldG9wdAogICAqIGFsc28sIGNvcHkgYWxsIG5vbiBjd3JhcHBlciBvcHRp b25zIHRvIG5ld2FyZ3osIGV4Y2VwdAogICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQg ZGlmZmVyZW50bHkKICAgKi8KICBuZXdhcmdjPTA7CiAgZm9yIChpID0gMTsgaSA8IGFyZ2M7 IGkrKykKICAgIHsKICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkp Cgl7CkVPRgoJICAgIGNhc2UgJGhvc3QgaW4KCSAgICAgICptaW5ndyogfCAqd2luZG93cyog fCAqY3lnd2luKiApCgkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncwoJ CWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCgkJOzsKCSAgICAgIGVz YWMKCgkgICAgY2F0IDw8IkVPRiIKCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CgkgIHJl dHVybiAwOwoJfQogICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGRlYnVnX29wdCkpCgl7CiAg ICAgICAgICBsdF9kZWJ1ZyA9IDE7CiAgICAgICAgICBjb250aW51ZTsKCX0KICAgICAgaWYg KFNUUkVRIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkpCiAgICAgICAgewog ICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdS QVBQRVJfT1BUSU9OX1BSRUZJWAogICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMg bm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAogICAgICAgICAgICAgaGF2 ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmNsdWRpbmcgZHVtcC1zY3JpcHQpLCB0 aGVuCiAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBt aWdodCBiZWdpbiB0byBiZWxpZXZlCiAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRv IHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAogICAgICAgICAg ICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQg dGhpcywgd2UnbGwKICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9O X1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgogICAgICAgICAgICAgb3IgYSBjb25m aWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCiAgICAgICAgICAgKi8KICAgICAgICAgIGx0X2Zh dGFsIChfX0ZJTEVfXywgX19MSU5FX18sCgkJICAgICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9u OiAnJXMnIiwKICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwg YXJndltpXSk7CiAgICAgICAgfQogICAgICAvKiBvdGhlcndpc2UgLi4uICovCiAgICAgIG5l d2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOwogICAgfQogIG5ld2FyZ3pb KytuZXdhcmdjXSA9IE5VTEw7CgpFT0YKCSAgICBjYXQgPDxFT0YKICAvKiBUaGUgR05VIGJh bm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLwogIGx0 X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdO VSAkUEFDS0FHRSkgJFZFUlNJT05cbiIpOwpFT0YKCSAgICBjYXQgPDwiRU9GIgogIGx0X2Rl YnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIs IGFyZ3ZbMF0pOwogIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFp bikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKTsKCiAgdG1wX3BhdGhzcGVj ID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKICBpZiAodG1wX3BhdGhzcGVjID09IE5V TEwpCiAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAl cyIsIGFyZ3ZbMF0pOwogIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCiAg ICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFz ZSkgYXQ6ICVzXG4iLAoJCSAgdG1wX3BhdGhzcGVjKTsKCiAgYWN0dWFsX2N3cmFwcGVyX3Bh dGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKICBsdF9kZWJ1Z3ByaW50ZiAo X19GSUxFX18sIF9fTElORV9fLAogICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4 ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAoJCSAgYWN0dWFsX2N3cmFwcGVy X3BhdGgpOwogIFhGUkVFICh0bXBfcGF0aHNwZWMpOwoKICBhY3R1YWxfY3dyYXBwZXJfbmFt ZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKICBzdHJl bmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7Cgog IC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCiAgc3RyZW5kemFwIChhY3R1YWxfY3dy YXBwZXJfbmFtZSwgIi5leGUiKTsKICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChh Y3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKICBYRlJFRSAoYWN0dWFsX2N3cmFw cGVyX25hbWUpOwogIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOwogIHRt cF9wYXRoc3BlYyA9IDA7CgogIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFj dHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KICB0 YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkp OwogIHN0cmVuZHphcCAodGFyZ2V0X25hbWUsICIuZXhlIik7CiAgdG1wX3BhdGhzcGVjID0g bHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7CiAgWEZSRUUgKHRhcmdl dF9uYW1lKTsKICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKICB0bXBfcGF0aHNwZWMg PSAwOwoKICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAoJCSAgIihtYWlu KSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKCQkgIHRhcmdldF9uYW1lKTsKRU9GCgoJ ICAgIGNhdCA8PEVPRgogIG5ld2FyZ3pbMF0gPQogICAgWE1BTExPQyAoY2hhciwgKHN0cmxl biAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKCQkgICAgc3RybGVuICgiJG9iamRpciIpICsg MSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOwogIHN0cmNweSAobmV3 YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOwogIHN0cmNhdCAobmV3YXJnelswXSwg IiRvYmpkaXIiKTsKICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7CkVPRgoKCSAgICBjYXQg PDwiRU9GIgogIC8qIHN0b3AgaGVyZSwgYW5kIGNvcHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBk byB0aGlzIHR3aWNlICovCiAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7 CgogIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUsIHNvIHVzZSBhY3R1YWxf Y3dyYXBwZXJfbmFtZSAqLwogIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVy X25hbWUpOwoKICAvKiBETyB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUgaWYgaXQgZXhpc3Rz LCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3Ry ICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKICBYRlJFRSAodG1wX3BhdGhzcGVj KTsKICB0bXBfcGF0aHNwZWMgPSBOVUxMOwpFT0YKCgkgICAgY2FzZSAkaG9zdF9vcyBpbgoJ ICAgICAgbWluZ3cqIHwgd2luZG93cyopCgkgICAgY2F0IDw8IkVPRiIKICB7CiAgICBjaGFy KiBwOwogICAgd2hpbGUgKChwID0gc3RyY2hyIChuZXdhcmd6WzBdLCAnXFwnKSkgIT0gTlVM TCkKICAgICAgewoJKnAgPSAnLyc7CiAgICAgIH0KICAgIHdoaWxlICgocCA9IHN0cmNociAo bHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKICAgICAgewoJKnAgPSAnLyc7CiAgICAg IH0KICB9CkVPRgoJICAgIDs7CgkgICAgZXNhYwoKCSAgICBjYXQgPDwiRU9GIgogIFhGUkVF ICh0YXJnZXRfbmFtZSk7CiAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKICBYRlJF RSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOwoKICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBn NCIpOyAvKiBmb3IgVHJ1NjQgKi8KICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAv KiBmb3IgTVNLIHNoICovCiAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9Q QVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAogICAgIGJlIHByZXBlbmRlZCBiZWZv cmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRo KQogICAgIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCAqX1ZBUk5BTUVzIGFyZSBQQVRIIGJ1 dCB1bmluc3RhbGxlZAogICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCiAgbHRf dXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CiAg bHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7 CgogIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbHRfYXJn dl96ZXJvOiAlc1xuIiwKCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOwogIGZvciAoaSA9 IDA7IGkgPCBuZXdhcmdjOyBpKyspCiAgICB7CiAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJ TEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAoJCSAgICAgIGks IG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKICAgIH0KCkVPRgoKCSAgICBjYXNlICRob3N0X29z IGluCgkgICAgICBtaW5ndyogfCB3aW5kb3dzKikKCQljYXQgPDwiRU9GIgogIC8qIGV4ZWN2 IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICov CiAgbmV3YXJneiA9IHByZXBhcmVfc3Bhd24gKG5ld2FyZ3opOwogIHJ2YWwgPSAoaW50KSBf c3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikg bmV3YXJneik7CiAgaWYgKHJ2YWwgPT0gLTEpCiAgICB7CiAgICAgIC8qIGZhaWxlZCB0byBz dGFydCBwcm9jZXNzICovCiAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5F X18sCgkJICAgICAgIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6ICVz XG4iLAoJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkp OwogICAgICByZXR1cm4gMTI3OwogICAgfQogIHJldHVybiBydmFsOwpFT0YKCQk7OwoJICAg ICAgKikKCQljYXQgPDwiRU9GIgogIGV4ZWN2IChsdF9hcmd2X3plcm8sIG5ld2FyZ3opOwog IHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJu aW5nICovCkVPRgoJCTs7CgkgICAgZXNhYwoKCSAgICBjYXQgPDwiRU9GIgp9Cgp2b2lkICoK eG1hbGxvYyAoc2l6ZV90IG51bSkKewogIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51 bSk7CiAgaWYgKCFwKQogICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgIm1lbW9y eSBleGhhdXN0ZWQiKTsKCiAgcmV0dXJuIHA7Cn0KCmNoYXIgKgp4c3RyZHVwIChjb25zdCBj aGFyICpzdHJpbmcpCnsKICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFs bG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKCQkJICBzdHJpbmcpIDogTlVMTDsKfQoKY29u c3QgY2hhciAqCmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSkKewogIGNvbnN0IGNoYXIg KmJhc2U7CgojaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQogIC8qIFNr aXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KICBpZiAoaXNh bHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQogICAg bmFtZSArPSAyOwojZW5kaWYKCiAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykK ICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCiAgICAgIGJhc2UgPSBuYW1lICsg MTsKICByZXR1cm4gYmFzZTsKfQoKaW50CmNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIg KnBhdGgpCnsKICBzdHJ1Y3Qgc3RhdCBzdDsKCiAgbHRfZGVidWdwcmludGYgKF9fRklMRV9f LCBfX0xJTkVfXywgIihjaGVja19leGVjdXRhYmxlKTogJXNcbiIsCiAgICAgICAgICAgICAg ICAgIG5vbmVtcHR5IChwYXRoKSk7CiAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCiAgICBy ZXR1cm4gMDsKCiAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApCiAgICAgICYmIChzdC5z dF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpKQogICAgcmV0dXJuIDE7 CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmludAptYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNo YXIgKnBhdGgpCnsKICBpbnQgcnZhbCA9IDA7CiAgc3RydWN0IHN0YXQgc3Q7CgogIGx0X2Rl YnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFrZV9leGVjdXRhYmxlKTogJXNc biIsCiAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CiAgaWYgKCghcGF0aCkg fHwgKCEqcGF0aCkpCiAgICByZXR1cm4gMDsKCiAgaWYgKHN0YXQgKHBhdGgsICZzdCkgPj0g MCkKICAgIHsKICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9U SCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKICAgIH0KICByZXR1cm4gcnZhbDsKfQoKLyogU2Vh cmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCiAgIG5l d2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UK ICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3Vw cG9ydCB0aGVtLgoqLwpjaGFyICoKZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFw cGVyKQp7CiAgaW50IGhhc19zbGFzaCA9IDA7CiAgY29uc3QgY2hhciAqcDsKICBjb25zdCBj aGFyICpwX25leHQ7CiAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCiAgY2hhciB0 bXBbTFRfUEFUSE1BWCArIDFdOwogIHNpemVfdCB0bXBfbGVuOwogIGNoYXIgKmNvbmNhdF9u YW1lOwoKICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhl Y3V0YWJsZSk6ICVzXG4iLAogICAgICAgICAgICAgICAgICBub25lbXB0eSAod3JhcHBlcikp OwoKICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQogICAg cmV0dXJuIE5VTEw7CgogIC8qIEFic29sdXRlIHBhdGg/ICovCiNpZiBkZWZpbmVkIEhBVkVf RE9TX0JBU0VEX0ZJTEVfU1lTVEVNCiAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3 cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKICAgIHsKICAgICAgY29uY2F0X25h bWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNv bmNhdF9uYW1lKSkKCXJldHVybiBjb25jYXRfbmFtZTsKICAgICAgWEZSRUUgKGNvbmNhdF9u YW1lKTsKICAgIH0KICBlbHNlCiAgICB7CiNlbmRpZgogICAgICBpZiAoSVNfRElSX1NFUEFS QVRPUiAod3JhcHBlclswXSkpCgl7CgkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBl cik7CgkgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCgkgICAgcmV0dXJu IGNvbmNhdF9uYW1lOwoJICBYRlJFRSAoY29uY2F0X25hbWUpOwoJfQojaWYgZGVmaW5lZCBI QVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQogICAgfQojZW5kaWYKCiAgZm9yIChwID0gd3Jh cHBlcjsgKnA7IHArKykKICAgIGlmICgqcCA9PSAnLycpCiAgICAgIHsKCWhhc19zbGFzaCA9 IDE7CglicmVhazsKICAgICAgfQogIGlmICghaGFzX3NsYXNoKQogICAgewogICAgICAvKiBu byBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLwogICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0 ZW52ICgiUEFUSCIpOwogICAgICBpZiAocGF0aCAhPSBOVUxMKQoJewoJICBmb3IgKHAgPSBw YXRoOyAqcDsgcCA9IHBfbmV4dCkKCSAgICB7CgkgICAgICBjb25zdCBjaGFyICpxOwoJICAg ICAgc2l6ZV90IHBfbGVuOwoJICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKCQlpZiAoSVNf UEFUSF9TRVBBUkFUT1IgKCpxKSkKCQkgIGJyZWFrOwoJICAgICAgcF9sZW4gPSAoc2l6ZV90 KSAocSAtIHApOwoJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOwoJ ICAgICAgaWYgKHBfbGVuID09IDApCgkJewoJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBk aXJlY3RvcnkgKi8KCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkK CQkgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVz IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVy cm5vKSkpOwoJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKCQkgIGNvbmNhdF9uYW1lID0K CQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsg MSk7CgkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOwoJCSAgY29uY2F0 X25hbWVbdG1wX2xlbl0gPSAnLyc7CgkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xl biArIDEsIHdyYXBwZXIpOwoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBjb25jYXRfbmFtZSA9 CgkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAx KTsKCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKCQkgIGNvbmNhdF9uYW1l W3BfbGVuXSA9ICcvJzsKCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdy YXBwZXIpOwoJCX0KCSAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkp CgkJcmV0dXJuIGNvbmNhdF9uYW1lOwoJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKCSAg ICB9Cgl9CiAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCiAg ICB9CiAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3 ZCAqLwogIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKICAgIGx0X2Zh dGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCiAgICAgICAg ICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOwogIHRtcF9sZW4gPSBzdHJsZW4g KHRtcCk7CiAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0 cmxlbiAod3JhcHBlcikgKyAxKTsKICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9s ZW4pOwogIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOwogIHN0cmNweSAoY29uY2F0X25h bWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CgogIGlmIChjaGVja19leGVjdXRhYmxlIChj b25jYXRfbmFtZSkpCiAgICByZXR1cm4gY29uY2F0X25hbWU7CiAgWEZSRUUgKGNvbmNhdF9u YW1lKTsKICByZXR1cm4gTlVMTDsKfQoKY2hhciAqCmNoYXNlX3N5bWxpbmtzIChjb25zdCBj aGFyICpwYXRoc3BlYykKewojaWZuZGVmIFNfSVNMTksKICByZXR1cm4geHN0cmR1cCAocGF0 aHNwZWMpOwojZWxzZQogIGNoYXIgYnVmW0xUX1BBVEhNQVhdOwogIHN0cnVjdCBzdGF0IHM7 CiAgY2hhciAqdG1wX3BhdGhzcGVjID0geHN0cmR1cCAocGF0aHNwZWMpOwogIGNoYXIgKnA7 CiAgaW50IGhhc19zeW1saW5rcyA9IDA7CiAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVj KSAmJiAhaGFzX3N5bWxpbmtzKQogICAgewogICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxF X18sIF9fTElORV9fLAoJCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3lt bGlua3M6ICVzXG4iLAoJCSAgICAgIHRtcF9wYXRoc3BlYyk7CiAgICAgIGlmIChsc3RhdCAo dG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKCXsKCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkg IT0gMCkKCSAgICB7CgkgICAgICBoYXNfc3ltbGlua3MgPSAxOwoJICAgICAgYnJlYWs7Cgkg ICAgfQoKCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgbGFzdCBESVJfU0VQQVJBVE9SICov CgkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4gKHRtcF9wYXRoc3BlYykgLSAxOwoJICB3 aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkK CSAgICBwLS07CgkgIGlmICgocCA9PSB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFS QVRPUiAoKnApKSkKCSAgICB7CgkgICAgICAvKiBubyBtb3JlIERJUl9TRVBBUkFUT1JTIGxl ZnQgKi8KCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgKnAgPSAnXDAnOwoJfQogICAgICBlbHNl Cgl7CgkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCgkJICAgICJlcnJvciBhY2Nl c3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKCQkgICAgdG1wX3BhdGhzcGVjLCBub25udWxsIChz dHJlcnJvciAoZXJybm8pKSk7Cgl9CiAgICB9CiAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7Cgog IGlmICghaGFzX3N5bWxpbmtzKQogICAgewogICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNw ZWMpOwogICAgfQoKICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7 CiAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQogICAgewogICAgICBsdF9mYXRhbCAoX19GSUxF X18sIF9fTElORV9fLAoJCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBh dGhzcGVjKTsKICAgIH0KICByZXR1cm4geHN0cmR1cCAodG1wX3BhdGhzcGVjKTsKI2VuZGlm Cn0KCmNoYXIgKgpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQp7CiAg c2l6ZV90IGxlbiwgcGF0bGVuOwoKICBhc3NlcnQgKHN0ciAhPSBOVUxMKTsKICBhc3NlcnQg KHBhdCAhPSBOVUxMKTsKCiAgbGVuID0gc3RybGVuIChzdHIpOwogIHBhdGxlbiA9IHN0cmxl biAocGF0KTsKCiAgaWYgKHBhdGxlbiA8PSBsZW4pCiAgICB7CiAgICAgIHN0ciArPSBsZW4g LSBwYXRsZW47CiAgICAgIGlmIChTVFJFUSAoc3RyLCBwYXQpKQoJKnN0ciA9ICdcMCc7CiAg ICB9CiAgcmV0dXJuIHN0cjsKfQoKdm9pZApsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAq ZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQp7CiAgdmFfbGlzdCBhcmdz OwogIGlmIChsdF9kZWJ1ZykKICAgIHsKICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwg IiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOwogICAgICB2YV9zdGFy dCAoYXJncywgZm10KTsKICAgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJn cyk7CiAgICAgIHZhX2VuZCAoYXJncyk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkCmx0X2Vycm9y X2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKCSAgICAgICBpbnQg bGluZSwgY29uc3QgY2hhciAqbW9kZSwKCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2 YV9saXN0IGFwKQp7CiAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICVzOiAiLCBwcm9n cmFtX25hbWUsIGZpbGUsIGxpbmUsIG1vZGUpOwogIHZmcHJpbnRmIChzdGRlcnIsIG1lc3Nh Z2UsIGFwKTsKICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKCiAgaWYgKGV4aXRfc3RhdHVz ID49IDApCiAgICBleGl0IChleGl0X3N0YXR1cyk7Cn0KCnZvaWQKbHRfZmF0YWwgKGNvbnN0 IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCnsKICB2 YV9saXN0IGFwOwogIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CiAgbHRfZXJyb3JfY29yZSAo RVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CiAgdmFf ZW5kIChhcCk7Cn0KCnN0YXRpYyBjb25zdCBjaGFyICoKbm9ubnVsbCAoY29uc3QgY2hhciAq cykKewogIHJldHVybiBzID8gcyA6ICIobnVsbCkiOwp9CgpzdGF0aWMgY29uc3QgY2hhciAq Cm5vbmVtcHR5IChjb25zdCBjaGFyICpzKQp7CiAgcmV0dXJuIChzICYmICEqcykgPyAiKGVt cHR5KSIgOiBub25udWxsIChzKTsKfQoKdm9pZApsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5h bWUsIGNvbnN0IGNoYXIgKnZhbHVlKQp7CiAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBf X0xJTkVfXywKCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKICAg ICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CiAgewoj aWZkZWYgSEFWRV9TRVRFTlYKICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNp c3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCiAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2 YWx1ZSk7CiAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7CiNlbHNlCiAgICBzaXplX3QgbGVu ID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CiAgICBjaGFyICpz dHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOwogICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBu YW1lLCB2YWx1ZSk7CiAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKICAg ICAgewogICAgICAgIFhGUkVFIChzdHIpOwogICAgICB9CiNlbmRpZgogIH0KfQoKY2hhciAq Cmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFk ZCwgaW50IHRvX2VuZCkKewogIGNoYXIgKm5ld192YWx1ZTsKICBpZiAob3JpZ192YWx1ZSAm JiAqb3JpZ192YWx1ZSkKICAgIHsKICAgICAgc2l6ZV90IG9yaWdfdmFsdWVfbGVuID0gc3Ry bGVuIChvcmlnX3ZhbHVlKTsKICAgICAgc2l6ZV90IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7 CiAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVl X2xlbiArIDEpOwogICAgICBpZiAodG9fZW5kKQogICAgICAgIHsKICAgICAgICAgIHN0cmNw eSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVl ICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg ewogICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CiAgICAgICAgICBzdHJjcHkg KG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFsdWUpOwogICAgICAgIH0KICAgIH0KICBl bHNlCiAgICB7CiAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CiAgICB9CiAgcmV0 dXJuIG5ld192YWx1ZTsKfQoKdm9pZApsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIg Km5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQp7CiAgbHRfZGVidWdwcmludGYgKF9fRklMRV9f LCBfX0xJTkVfXywKCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBi eSBwcmVwZW5kaW5nICclcydcbiIsCiAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUp LCBub25udWxsICh2YWx1ZSkpOwoKICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAq dmFsdWUpCiAgICB7CiAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdl dGVudiAobmFtZSksIHZhbHVlLCAwKTsKICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNv cGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KICAgICAgc2l6ZV90IGxlbiA9 IHN0cmxlbiAobmV3X3ZhbHVlKTsKICAgICAgd2hpbGUgKChsZW4gPiAwKSAmJiBJU19QQVRI X1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCiAgICAgICAgewogICAgICAgICAgbmV3 X3ZhbHVlWy0tbGVuXSA9ICdcMCc7CiAgICAgICAgfQogICAgICBsdF9zZXRlbnYgKG5hbWUs IG5ld192YWx1ZSk7CiAgICAgIFhGUkVFIChuZXdfdmFsdWUpOwogICAgfQp9Cgp2b2lkCmx0 X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUp CnsKICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAoJCSAgIihsdF91cGRh dGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKICAg ICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CgogIGlm IChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKICAgIHsKICAgICAgY2hhciAq bmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOwog ICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CiAgICAgIFhGUkVFIChuZXdfdmFs dWUpOwogICAgfQp9CgpFT0YKCSAgICBjYXNlICRob3N0X29zIGluCgkgICAgICBtaW5ndyog fCB3aW5kb3dzKikKCQljYXQgPDwiRU9GIgoKLyogUHJlcGFyZXMgYW4gYXJndW1lbnQgdmVj dG9yIGJlZm9yZSBjYWxsaW5nIHNwYXduKCkuCiAgIE5vdGUgdGhhdCBzcGF3bigpIGRvZXMg bm90IGJ5IGl0c2VsZiBjYWxsIHRoZSBjb21tYW5kIGludGVycHJldGVyCiAgICAgKGdldGVu diAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKICAgICAgKHsg T1NWRVJTSU9OSU5GTyB2OyB2LmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YoT1NWRVJT SU9OSU5GTyk7CiAgICAgICAgIEdldFZlcnNpb25FeCgmdik7CiAgICAgICAgIHYuZHdQbGF0 Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKICAgICAgfSkgPyAiY21kLmV4ZSIg OiAiY29tbWFuZC5jb20iKS4KICAgSW5zdGVhZCBpdCBzaW1wbHkgY29uY2F0ZW5hdGVzIHRo ZSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnICcsIGFuZCBjYWxscwogICBDcmVhdGVQcm9j ZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luMzIgQ3JlYXRl UHJvY2VzcygpCiAgIGludGVycHJldHMgY2hhcmFjdGVycyBsaWtlICcgJywgJ1x0JywgJ1xc JywgJyInIChidXQgbm90ICc8JyBhbmQgJz4nKSBpbiBhCiAgIHNwZWNpYWwgd2F5OgogICAt IFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVkIGFzIGRlbGltaXRlcnMuIFRoZXkgYXJl IG5vdCB0cmVhdGVkIGFzCiAgICAgZGVsaW1pdGVycyBpZiB0aGV5IGFyZSBzdXJyb3VuZGVk IGJ5IGRvdWJsZSBxdW90ZXM6ICIuLi4iLgogICAtIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVz IGFyZSByZW1vdmVkIGZyb20gdGhlIGlucHV0LiBUaGVpciBvbmx5IGVmZmVjdCBpcwogICAg IHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNwYWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQg bGlrZSBub3JtYWwKICAgICBjaGFyYWN0ZXJzLgogICAtIEJhY2tzbGFzaGVzIG5vdCBmb2xs b3dlZCBieSBkb3VibGUgcXVvdGVzIGFyZSBub3Qgc3BlY2lhbC4KICAgLSBCdXQgMipuKzEg YmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgYmVjb21lCiAgICAgbiBi YWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSAobiA+PSAwKToKICAgICAg IFwiIC0+ICIKICAgICAgIFxcXCIgLT4gXCIKICAgICAgIFxcXFxcIiAtPiBcXCIKICovCiNk ZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJcXCBcMDAxXDAwMlwwMDNcMDA0XDAwNVww MDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIz XDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgojZGVm aW5lIFNIRUxMX1NQQUNFX0NIQVJTICIgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1ww MTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1 XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKY2hhciAqKgpwcmVw YXJlX3NwYXduIChjaGFyICoqYXJndikKewogIHNpemVfdCBhcmdjOwogIGNoYXIgKipuZXdf YXJndjsKICBzaXplX3QgaTsKCiAgLyogQ291bnQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICov CiAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXSAhPSBOVUxMOyBhcmdjKyspCiAgICA7Cgog IC8qIEFsbG9jYXRlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLwogIG5ld19hcmd2ID0gWE1B TExPQyAoY2hhciAqLCBhcmdjICsgMSk7CgogIC8qIFB1dCBxdW90ZWQgYXJndW1lbnRzIGlu dG8gdGhlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLwogIGZvciAoaSA9IDA7IGkgPCBhcmdj OyBpKyspCiAgICB7CiAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IGFyZ3ZbaV07CgogICAg ICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCgluZXdfYXJndltpXSA9IHhzdHJkdXAgKCJcIlwi Iik7CiAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BFQ0lBTF9DSEFS UykgIT0gTlVMTCkKCXsKCSAgaW50IHF1b3RlX2Fyb3VuZCA9IChzdHJwYnJrIChzdHJpbmcs IFNIRUxMX1NQQUNFX0NIQVJTKSAhPSBOVUxMKTsKCSAgc2l6ZV90IGxlbmd0aDsKCSAgdW5z aWduZWQgaW50IGJhY2tzbGFzaGVzOwoJICBjb25zdCBjaGFyICpzOwoJICBjaGFyICpxdW90 ZWRfc3RyaW5nOwoJICBjaGFyICpwOwoKCSAgbGVuZ3RoID0gMDsKCSAgYmFja3NsYXNoZXMg PSAwOwoJICBpZiAocXVvdGVfYXJvdW5kKQoJICAgIGxlbmd0aCsrOwoJICBmb3IgKHMgPSBz dHJpbmc7ICpzICE9ICdcMCc7IHMrKykKCSAgICB7CgkgICAgICBjaGFyIGMgPSAqczsKCSAg ICAgIGlmIChjID09ICciJykKCQlsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOwoJICAgICAg bGVuZ3RoKys7CgkgICAgICBpZiAoYyA9PSAnXFwnKQoJCWJhY2tzbGFzaGVzKys7CgkgICAg ICBlbHNlCgkJYmFja3NsYXNoZXMgPSAwOwoJICAgIH0KCSAgaWYgKHF1b3RlX2Fyb3VuZCkK CSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOwoKCSAgcXVvdGVkX3N0cmluZyA9IFhN QUxMT0MgKGNoYXIsIGxlbmd0aCArIDEpOwoKCSAgcCA9IHF1b3RlZF9zdHJpbmc7CgkgIGJh Y2tzbGFzaGVzID0gMDsKCSAgaWYgKHF1b3RlX2Fyb3VuZCkKCSAgICAqcCsrID0gJyInOwoJ ICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKCSAgICB7CgkgICAgICBjaGFy IGMgPSAqczsKCSAgICAgIGlmIChjID09ICciJykKCQl7CgkJICB1bnNpZ25lZCBpbnQgajsK CQkgIGZvciAoaiA9IGJhY2tzbGFzaGVzICsgMTsgaiA+IDA7IGotLSkKCQkgICAgKnArKyA9 ICdcXCc7CgkJfQoJICAgICAgKnArKyA9IGM7CgkgICAgICBpZiAoYyA9PSAnXFwnKQoJCWJh Y2tzbGFzaGVzKys7CgkgICAgICBlbHNlCgkJYmFja3NsYXNoZXMgPSAwOwoJICAgIH0KCSAg aWYgKHF1b3RlX2Fyb3VuZCkKCSAgICB7CgkgICAgICB1bnNpZ25lZCBpbnQgajsKCSAgICAg IGZvciAoaiA9IGJhY2tzbGFzaGVzOyBqID4gMDsgai0tKQoJCSpwKysgPSAnXFwnOwoJICAg ICAgKnArKyA9ICciJzsKCSAgICB9CgkgICpwID0gJ1wwJzsKCgkgIG5ld19hcmd2W2ldID0g cXVvdGVkX3N0cmluZzsKCX0KICAgICAgZWxzZQoJbmV3X2FyZ3ZbaV0gPSAoY2hhciAqKSBz dHJpbmc7CiAgICB9CiAgbmV3X2FyZ3ZbYXJnY10gPSBOVUxMOwoKICByZXR1cm4gbmV3X2Fy Z3Y7Cn0KRU9GCgkJOzsKCSAgICBlc2FjCgogICAgICAgICAgICBjYXQgPDwiRU9GIgp2b2lk IGx0X2R1bXBfc2NyaXB0IChGSUxFKiBmKQp7CkVPRgoJICAgIGZ1bmNfZW1pdF93cmFwcGVy IHllcyB8CgkgICAgICAkU0VEIC1uIC1lICcKcy9eXCguXHs3OVx9XClcKC4uKlwpL1wxXApc Mi8KaApzL1woW1xcIl1cKS9cXFwxL2cKcy8kL1xcbi8Kcy9cKFteXG5dKlwpLiovICBmcHV0 cyAoIlwxIiwgZik7L3AKZwpEJwogICAgICAgICAgICBjYXQgPDwiRU9GIgp9CkVPRgp9CiMg ZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCgojIGZ1bmNfd2luMzJfaW1wb3J0X2xp Yl9wIEFSRwojIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBi eSAkZmlsZV9tYWdpY19jbWQKZnVuY193aW4zMl9pbXBvcnRfbGliX3AgKCkKewogICAgJGRl YnVnX2NtZAoKICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2 L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KICAgICppbXBvcnQqKSA6IDs7CiAgICAqKSBmYWxz ZSA7OwogICAgZXNhYwp9CgojIGZ1bmNfc3VuY2NfY3N0ZF9hYmkKIyAhIU9OTFkgQ0FMTCBU SElTIEZPUiBTVU4gQ0MgQUZURVIgJGNvbXBpbGVfY29tbWFuZCBJUyBGVUxMWSBFWFBBTkRF RCEhCiMgU2V2ZXJhbCBjb21waWxlciBmbGFncyBzZWxlY3QgYW4gQUJJIHRoYXQgaXMgaW5j b21wYXRpYmxlIHdpdGggdGhlCiMgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nIGl0 IGlmIGFueSBhcmUgaW4gQ1hYRkxBR1MuCmZ1bmNfc3VuY2NfY3N0ZF9hYmkgKCkKewogICAg JGRlYnVnX2NtZAoKICAgIGNhc2UgIiAkY29tcGlsZV9jb21tYW5kICIgaW4KICAgICoiIC1j b21wYXQ9ZyAiKnwqXCAtc3RkPWMrK1swLTldWzAtOV1cICp8KiIgLWxpYnJhcnk9c3RkY3h4 NCAiKnwqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKICAgICAgc3VuY2NfdXNlX2NzdGRfYWJp PW5vCiAgICAgIDs7CiAgICAqKQogICAgICBzdW5jY191c2VfY3N0ZF9hYmk9eWVzCiAgICAg IDs7CiAgICBlc2FjCn0KCiMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCmZ1bmNfbW9kZV9saW5r ICgpCnsKICAgICRkZWJ1Z19jbWQKCiAgICBjYXNlICRob3N0IGluCiAgICAqLSotY3lnd2lu KiB8ICotKi1taW5ndyogfCAqLSotd2luZG93cyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8 ICotY2VnY2MqKQogICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRo b3V0IHRoaXMgc2V0dGluZywgYW5kCiAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBt YWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKICAgICAgIyB3aGF0IHN5c3RlbSB3 ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCiAgICAgICMg ZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgogICAgICAjIGFsbG93X3VuZGVm aW5lZD1ubwoKICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2Js ZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCiAgICAgICMgdG8gbWFrZSBhIGRsbCB0 aGF0IGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKICAgICAgIyBl dmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNw ZWNpZnkKICAgICAgIyAtbm8tdW5kZWZpbmVkIG9uIHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3 aGVuIHdlIGNhbiBiZSBjZXJ0YWluCiAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0 aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCiAgICAgIGFsbG93 X3VuZGVmaW5lZD15ZXMKICAgICAgOzsKICAgICopCiAgICAgIGFsbG93X3VuZGVmaW5lZD15 ZXMKICAgICAgOzsKICAgIGVzYWMKICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CiAgICBiYXNl X2NvbXBpbGU9IiRub25vcHQgJEAiCiAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAogICAg ZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CgogICAgY29tcGlsZV9ycGF0aD0KICAgIGNvbXBp bGVfcnBhdGhfdGFpbD0KICAgIGZpbmFsaXplX3JwYXRoPQogICAgY29tcGlsZV9zaGxpYnBh dGg9CiAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9CiAgICBjb252ZW5pZW5jZT0KICAgIG9sZF9j b252ZW5pZW5jZT0KICAgIGRlcGxpYnM9CiAgICBvbGRfZGVwbGlicz0KICAgIGNvbXBpbGVy X2ZsYWdzPQogICAgbGlua2VyX2ZsYWdzPQogICAgZGxsc2VhcmNocGF0aD0KICAgIGxpYl9z ZWFyY2hfcGF0aD1gcHdkYAogICAgaW5zdF9wcmVmaXhfZGlyPQogICAgbmV3X2luaGVyaXRl ZF9saW5rZXJfZmxhZ3M9CgogICAgYXZvaWRfdmVyc2lvbj1ubwogICAgYmluZGlyPQogICAg ZGxmaWxlcz0KICAgIGRscHJlZmlsZXM9CiAgICBkbHNlbGY9bm8KICAgIGV4cG9ydF9keW5h bWljPW5vCiAgICBleHBvcnRfc3ltYm9scz0KICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQog ICAgZ2VuZXJhdGVkPQogICAgbGlib2Jqcz0KICAgIGx0bGlicz0KICAgIG1vZHVsZT1ubwog ICAgbm9faW5zdGFsbD1ubwogICAgb2Jqcz0KICAgIG9zMmRsbG5hbWU9CiAgICBub25fcGlj X29iamVjdHM9CiAgICBwcmVjaW91c19maWxlc19yZWdleD0KICAgIHByZWZlcl9zdGF0aWNf bGlicz1ubwogICAgcHJlbG9hZD1mYWxzZQogICAgcHJldj0KICAgIHByZXZhcmc9CiAgICBy ZWxlYXNlPQogICAgcnBhdGg9CiAgICB4cnBhdGg9CiAgICBwZXJtX3JwYXRoPQogICAgdGVt cF9ycGF0aD0KICAgIHRlbXBfcnBhdGhfdGFpbD0KICAgIHRocmVhZF9zYWZlPW5vCiAgICB2 aW5mbz0KICAgIHZpbmZvX251bWJlcj1ubwogICAgd2Vha19saWJzPQogICAgcnBhdGhfYXJn PQogICAgc2luZ2xlX21vZHVsZT0kd2wtc2luZ2xlX21vZHVsZQogICAgZnVuY19pbmZlcl90 YWcgJGJhc2VfY29tcGlsZQoKICAgICMgV2UgbmVlZCB0byBrbm93IC1zdGF0aWMsIHRvIGdl dCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4KICAgIGZvciBhcmcKICAgIGRvCiAgICAg IGNhc2UgJGFyZyBpbgogICAgICAtc2hhcmVkKQoJdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0 b29sX2xpYnMiIFwKCSAgJiYgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW5ub3QgYnVp bGQgYSBzaGFyZWQgbGlicmFyeSIKCWJ1aWxkX29sZF9saWJzPW5vCglicmVhawoJOzsKICAg ICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCgljYXNl ICRhcmcgaW4KCS1hbGwtc3RhdGljKQoJICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9v bF9saWJzIiAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KCSAgICBmdW5j X3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhp cyBjb25maWd1cmF0aW9uIgoJICBmaQoJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxh ZyI7IHRoZW4KCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCgkgIGZpCgkg IHByZWZlcl9zdGF0aWNfbGlicz15ZXMKCSAgOzsKCS1zdGF0aWMpCgkgIGlmIHRlc3QgLXog IiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCgkgICAg ZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYwoJICBmaQoJICBwcmVmZXJfc3RhdGlj X2xpYnM9YnVpbHQKCSAgOzsKCS1zdGF0aWMtbGlidG9vbC1saWJzKQoJICBpZiB0ZXN0IC16 ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgoJICAg IGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKCSAgZmkKCSAgcHJlZmVyX3N0YXRp Y19saWJzPXllcwoJICA7OwoJZXNhYwoJYnVpbGRfbGlidG9vbF9saWJzPW5vCglidWlsZF9v bGRfbGlicz15ZXMKCWJyZWFrCgk7OwogICAgICBlc2FjCiAgICBkb25lCgogICAgIyBTZWUg aWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQgb24gc3RhdGljIGFyY2hpdmVzLgogICAg dGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIGJ1aWxkX29sZF9saWJz PXllcwoKICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhl bSBvbiB0aGUgd2F5LgogICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbwogICAgICBhcmc9 JDEKICAgICAgc2hpZnQKICAgICAgZnVuY19xdW90ZV9hcmcgcHJldHR5LHVucXVvdGVkICIk YXJnIgogICAgICBxYXJnPSRmdW5jX3F1b3RlX2FyZ191bnF1b3RlZF9yZXN1bHQKICAgICAg ZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKCiAg ICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWdu IGl0LgogICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KCWNhc2UgJHByZXYgaW4KCW91 dHB1dCkKCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCgkgIGZ1 bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKCSAgOzsKCWVzYWMKCglj YXNlICRwcmV2IGluCgliaW5kaXIpCgkgIGJpbmRpcj0kYXJnCgkgIHByZXY9CgkgIGNvbnRp bnVlCgkgIDs7CglkbGZpbGVzfGRscHJlZmlsZXMpCgkgICRwcmVsb2FkIHx8IHsKCSAgICAj IEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgoJICAg IGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBTWU1GSUxFQCIKCSAgICBmdW5jX2Fw cGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgoJICAgIHByZWxvYWQ9OgoJICB9 CgkgIGNhc2UgJGFyZyBpbgoJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNl IGNhc2VzIGJlbG93LgoJICBmb3JjZSkKCSAgICBpZiB0ZXN0IG5vID0gIiRkbHNlbGYiOyB0 aGVuCgkgICAgICBkbHNlbGY9bmVlZGxlc3MKCSAgICAgIGV4cG9ydF9keW5hbWljPXllcwoJ ICAgIGZpCgkgICAgcHJldj0KCSAgICBjb250aW51ZQoJICAgIDs7CgkgIHNlbGYpCgkgICAg aWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgoJICAgICAgZGxzZWxmPXllcwoJ ICAgIGVsaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IiAmJiB0ZXN0IHllcyAhPSAiJGRsb3Bl bl9zZWxmIjsgdGhlbgoJICAgICAgZGxzZWxmPXllcwoJICAgIGVsc2UKCSAgICAgIGRsc2Vs Zj1uZWVkbGVzcwoJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCgkgICAgZmkKCSAgICBwcmV2 PQoJICAgIGNvbnRpbnVlCgkgICAgOzsKCSAgKikKCSAgICBpZiB0ZXN0IGRsZmlsZXMgPSAi JHByZXYiOyB0aGVuCgkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKCSAgICBl bHNlCgkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGFyZyIKCSAgICBmaQoJICAg IHByZXY9CgkgICAgY29udGludWUKCSAgICA7OwoJICBlc2FjCgkgIDs7CglleHBzeW1zKQoJ ICBleHBvcnRfc3ltYm9scz0kYXJnCgkgIHRlc3QgLWYgIiRhcmciIFwKCSAgICB8fCBmdW5j X2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSAnJGFyZycgZG9lcyBub3QgZXhpc3QiCgkgIHBy ZXY9CgkgIGNvbnRpbnVlCgkgIDs7CglleHBzeW1zX3JlZ2V4KQoJICBleHBvcnRfc3ltYm9s c19yZWdleD0kYXJnCgkgIHByZXY9CgkgIGNvbnRpbnVlCgkgIDs7CglmcmFtZXdvcmspCgkg IGNhc2UgJGhvc3QgaW4KCSAgICAqLSotZGFyd2luKikKCSAgICAgIGNhc2UgIiRkZXBsaWJz ICIgaW4KCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKCQkqKSBmdW5jX2FwcGVuZCBk ZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgoJCSAg IDs7CgkgICAgICBlc2FjCgkgICAgICA7OwoJICBlc2FjCgkgIHByZXY9CgkgIGNvbnRpbnVl CgkgIDs7CglpbnN0X3ByZWZpeCkKCSAgaW5zdF9wcmVmaXhfZGlyPSRhcmcKCSAgcHJldj0K CSAgY29udGludWUKCSAgOzsKCW1sbHZtKQoJICAjIENsYW5nIGRvZXMgbm90IHVzZSBMTFZN IHRvIGxpbmssIHNvIHdlIGNhbiBzaW1wbHkgZGlzY2FyZCBhbnkKCSAgIyAnLW1sbHZtICRh cmcnIG9wdGlvbnMgd2hlbiBkb2luZyB0aGUgbGluayBzdGVwLgoJICBwcmV2PQoJICBjb250 aW51ZQoJICA7OwoJb2JqZWN0bGlzdCkKCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KCSAg ICBzYXZlX2FyZz0kYXJnCgkgICAgbW9yZWFyZ3M9CgkgICAgZm9yIGZpbCBpbiBgY2F0ICIk c2F2ZV9hcmciYAoJICAgIGRvCiMJICAgICAgZnVuY19hcHBlbmQgbW9yZWFyZ3MgIiAkZmls IgoJICAgICAgYXJnPSRmaWwKCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0 LgoKCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29s IG9iamVjdC4KCSAgICAgIGlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCgkJ cGljX29iamVjdD0KCQlub25fcGljX29iamVjdD0KCgkJIyBSZWFkIHRoZSAubG8gZmlsZQoJ CWZ1bmNfc291cmNlICIkYXJnIgoKCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKCQkg ICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CgkJICAgdGVzdCBub25lID0gIiRwaWNf b2JqZWN0IiAmJgoJCSAgIHRlc3Qgbm9uZSA9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCgkJ ICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgJyRh cmcnIgoJCWZpCgoJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQu CgkJZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKCQl4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVz dWx0CgoJCWlmIHRlc3Qgbm9uZSAhPSAiJHBpY19vYmplY3QiOyB0aGVuCgkJICAjIFByZXBl bmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgoJCSAgcGljX29i amVjdD0keGRpciRwaWNfb2JqZWN0CgoJCSAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2Ijsg dGhlbgoJCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0 IHllcyA9ICIkZGxvcGVuX3N1cHBvcnQiOyB0aGVuCgkJICAgICAgZnVuY19hcHBlbmQgZGxm aWxlcyAiICRwaWNfb2JqZWN0IgoJCSAgICAgIHByZXY9CgkJICAgICAgY29udGludWUKCQkg ICAgZWxzZQoJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwg dGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCgkJICAgICAgcHJldj1kbHByZWZpbGVzCgkJICAg IGZpCgkJICBmaQoKCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAt T3NzYW1hCgkJICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCgkJICAgICMg UHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KCQkgICAgZnVuY19hcHBlbmQgZGxwcmVm aWxlcyAiICRwaWNfb2JqZWN0IgoJCSAgICBwcmV2PQoJCSAgZmkKCgkJICAjIEEgUElDIG9i amVjdC4KCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKCQkgIGFyZz0k cGljX29iamVjdAoJCWZpCgoJCSMgTm9uLVBJQyBvYmplY3QuCgkJaWYgdGVzdCBub25lICE9 ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCgkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9y eSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgoJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkbm9u X3BpY19vYmplY3QKCgkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKCQkgIGZ1bmNf YXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKCQkgIGlmIHRlc3Qg LXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiOyB0aGVuCgkJ ICAgIGFyZz0kbm9uX3BpY19vYmplY3QKCQkgIGZpCgkJZWxzZQoJCSAgIyBJZiB0aGUgUElD IG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgoJCSAgIyAkeGRpciB3YXMgcHJlcGVu ZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgoJCSAgbm9uX3BpY19vYmplY3Q9JHBpY19vYmpl Y3QKCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIK CQlmaQoJICAgICAgZWxzZQoJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnkt cnVuLgoJCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgoJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9y eSBmcm9tIHRoZSBhcmd1bWVudC4KCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCgkJ ICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CgoJCSAgZnVuY19sbzJvICIkYXJnIgoJCSAg cGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKCQkgIG5vbl9waWNf b2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMg IiAkcGljX29iamVjdCIKCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25f cGljX29iamVjdCIKCSAgICAgICAgZWxzZQoJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRhcmcn IGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgoJCWZpCgkgICAgICBmaQoJICAgIGRv bmUKCSAgZWxzZQoJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSAnJGFy ZycgZG9lcyBub3QgZXhpc3QiCgkgIGZpCgkgIGFyZz0kc2F2ZV9hcmcKCSAgcHJldj0KCSAg Y29udGludWUKCSAgOzsKCW9zMmRsbG5hbWUpCgkgIG9zMmRsbG5hbWU9JGFyZwoJICBwcmV2 PQoJICBjb250aW51ZQoJICA7OwoJcHJlY2lvdXNfcmVnZXgpCgkgIHByZWNpb3VzX2ZpbGVz X3JlZ2V4PSRhcmcKCSAgcHJldj0KCSAgY29udGludWUKCSAgOzsKCXJlbGVhc2UpCgkgIHJl bGVhc2U9LSRhcmcKCSAgcHJldj0KCSAgY29udGludWUKCSAgOzsKCXJwYXRoIHwgeHJwYXRo KQoJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KCSAgY2FzZSAkYXJnIGluCgkgIFtc XC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKCSAgKikKCSAgICBmdW5jX2ZhdGFsX2Vycm9y ICJhcmd1bWVudCB0byAtcnBhdGggaXMgbm90IGFic29sdXRlOiAkYXJnIgoJICAgIDs7Cgkg IGVzYWMKCSAgaWYgdGVzdCBycGF0aCA9ICIkcHJldiI7IHRoZW4KCSAgICBjYXNlICIkcnBh dGggIiBpbgoJICAgICoiICRhcmcgIiopIDs7CgkgICAgKikgZnVuY19hcHBlbmQgcnBhdGgg IiAkYXJnIiA7OwoJICAgIGVzYWMKCSAgZWxzZQoJICAgIGNhc2UgIiR4cnBhdGggIiBpbgoJ ICAgICoiICRhcmcgIiopIDs7CgkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGFyZyIg OzsKCSAgICBlc2FjCgkgIGZpCgkgIHByZXY9CgkgIGNvbnRpbnVlCgkgIDs7CglzaHJleHQp CgkgIHNocmV4dF9jbWRzPSRhcmcKCSAgcHJldj0KCSAgY29udGludWUKCSAgOzsKCXdlYWsp CgkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCgkgIHByZXY9CgkgIGNvbnRpbnVl CgkgIDs7Cgl4YXNzZW1ibGVyKQoJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiIC1Y YXNzZW1ibGVyICRxYXJnIgoJICBwcmV2PQoJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1h bmQgIiAtWGFzc2VtYmxlciAkcWFyZyIKCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFu ZCAiIC1YYXNzZW1ibGVyICRxYXJnIgoJICBjb250aW51ZQoJICA7OwoJeGNjbGlua2VyKQoJ ICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKCSAgZnVuY19hcHBlbmQgY29t cGlsZXJfZmxhZ3MgIiAkcWFyZyIKCSAgcHJldj0KCSAgZnVuY19hcHBlbmQgY29tcGlsZV9j b21tYW5kICIgJHFhcmciCgkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFy ZyIKCSAgY29udGludWUKCSAgOzsKCXhjb21waWxlcikKCSAgZnVuY19hcHBlbmQgY29tcGls ZXJfZmxhZ3MgIiAkcWFyZyIKCSAgcHJldj0KCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21t YW5kICIgJHFhcmciCgkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIK CSAgY29udGludWUKCSAgOzsKCXhsaW5rZXIpCgkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFn cyAiICRxYXJnIgoJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRxYXJnIgoJ ICBwcmV2PQoJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKCSAg ZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgoJICBjb250aW51ZQoJ ICA7OwoJKikKCSAgZXZhbCAiJHByZXY9XCJcJGFyZ1wiIgoJICBwcmV2PQoJICBjb250aW51 ZQoJICA7OwoJZXNhYwogICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgoKICAgICAgcHJldmFy Zz0kYXJnCgogICAgICBjYXNlICRhcmcgaW4KICAgICAgLWFsbC1zdGF0aWMpCglpZiB0ZXN0 IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KCSAgIyBTZWUgY29tbWVudCBmb3IgLXN0 YXRpYyBmbGFnIGJlbG93LCBmb3IgbW9yZSBkZXRhaWxzLgoJICBmdW5jX2FwcGVuZCBjb21w aWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKCSAgZnVuY19hcHBlbmQgZmluYWxp emVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgoJZmkKCWNvbnRpbnVlCgk7OwoKICAg ICAgLWFsbG93LXVuZGVmaW5lZCkKCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRp bWUgaW4gdGhlIGZ1dHVyZS4KCWZ1bmNfZmF0YWxfZXJyb3IgIictYWxsb3ctdW5kZWZpbmVk JyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCgk7OwoKICAg ICAgLWF2b2lkLXZlcnNpb24pCglhdm9pZF92ZXJzaW9uPXllcwoJY29udGludWUKCTs7Cgog ICAgICAtYmluZGlyKQoJcHJldj1iaW5kaXIKCWNvbnRpbnVlCgk7OwoKICAgICAgLWRsb3Bl bikKCXByZXY9ZGxmaWxlcwoJY29udGludWUKCTs7CgogICAgICAtZGxwcmVvcGVuKQoJcHJl dj1kbHByZWZpbGVzCgljb250aW51ZQoJOzsKCiAgICAgIC1leHBvcnQtZHluYW1pYykKCWV4 cG9ydF9keW5hbWljPXllcwoJY29udGludWUKCTs7CgogICAgICAtZXhwb3J0LXN5bWJvbHMg fCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCglpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMi IHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KCSAgZnVuY19mYXRh bF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBu b3QgYWxsb3dlZCIKCWZpCglpZiB0ZXN0IFgtZXhwb3J0LXN5bWJvbHMgPSAiWCRhcmciOyB0 aGVuCgkgIHByZXY9ZXhwc3ltcwoJZWxzZQoJICBwcmV2PWV4cHN5bXNfcmVnZXgKCWZpCglj b250aW51ZQoJOzsKCiAgICAgIC1mcmFtZXdvcmspCglwcmV2PWZyYW1ld29yawoJY29udGlu dWUKCTs7CgogICAgICAtaW5zdC1wcmVmaXgtZGlyKQoJcHJldj1pbnN0X3ByZWZpeAoJY29u dGludWUKCTs7CgogICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMg LUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCiAgICAgICMgc28sIGlmIHdlIHNlZSB0aGVz ZSBmbGFncyBiZSBjYXJlZnVsIG5vdCB0byB0cmVhdCB0aGVtIGxpa2UgLUwKICAgICAgLUxb QS1aXVtBLVpdKjoqKQoJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KCW5vLyotKi1pcml4KiB8 IC8qLSotaXJpeCopCgkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCgkg IGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgoJICA7OwoJZXNhYwoJY29u dGludWUKCTs7CgogICAgICAtTCopCglmdW5jX3N0cmlwbmFtZSAiLUwiICcnICIkYXJnIgoJ aWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KCSAgaWYgdGVzdCAi JCMiIC1ndCAwOyB0aGVuCgkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFj ZSBiZXR3ZWVuICctTCcgYW5kICckMSciCgkgIGVsc2UKCSAgICBmdW5jX2ZhdGFsX2Vycm9y ICJuZWVkIHBhdGggZm9yICctTCcgb3B0aW9uIgoJICBmaQoJZmkKCWZ1bmNfcmVzb2x2ZV9z eXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgoJZGlyPSRmdW5jX3Jlc29sdmVfc3lz cm9vdF9yZXN1bHQKCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgoJY2FzZSAkZGlyIGlu CglbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CgkqKQoJICBhYnNkaXI9YGNkICIkZGly IiAmJiBwd2RgCgkgIHRlc3QgLXogIiRhYnNkaXIiICYmIFwKCSAgICBmdW5jX2ZhdGFsX2Vy cm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckZGly JyIKCSAgZGlyPSRhYnNkaXIKCSAgOzsKCWVzYWMKCWNhc2UgIiRkZXBsaWJzICIgaW4KCSoi IC1MJGRpciAiKiB8ICoiICRhcmcgIiopCgkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJz b2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKCSAgOzsKCSopCgkgICMgUHJlc2VydmUgc3lz cm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKCSAgY2FzZSAk ZGlyIGluCgkgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qIHwgPSopIGZ1bmNfYXBwZW5k IGRlcGxpYnMgIiAkYXJnIiA7OwoJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRk aXIiIDs7CgkgIGVzYWMKCSAgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIK CSAgOzsKCWVzYWMKCWNhc2UgJGhvc3QgaW4KCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8 ICotKi13aW5kb3dzKiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCgkgIHRl c3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQgJ3MqL2xpYiQqL2JpbionYAoJICBjYXNl IDokZGxsc2VhcmNocGF0aDogaW4KCSAgKiI6JGRpcjoiKikgOzsKCSAgOjopIGRsbHNlYXJj aHBhdGg9JGRpcjs7CgkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokZGlyIjs7 CgkgIGVzYWMKCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCgkgICoiOiR0ZXN0YmluZGly OiIqKSA7OwoJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CgkgICopIGZ1bmNf YXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OwoJICBlc2FjCgkgIDs7Cgll c2FjCgljb250aW51ZQoJOzsKCiAgICAgIC1sKikKCWlmIHRlc3QgWC1sYyA9ICJYJGFyZyIg fHwgdGVzdCBYLWxtID0gIlgkYXJnIjsgdGhlbgoJICBjYXNlICRob3N0IGluCgkgICotKi1j eWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi13aW5kb3dzKiB8ICotKi1wdzMyKiB8ICotKi1i ZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9u J3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQoJICAgIGNv bnRpbnVlCgkgICAgOzsKCSAgKi0qLW9zMiopCgkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0 IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFzIHN1Y2gpCgkgICAgdGVzdCBYLWxjID0g IlgkYXJnIiAmJiBjb250aW51ZQoJICAgIDs7CgkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVl YnNkKiB8ICotKi1kcmFnb25mbHkqIHwgKi0qLW1pZG5pZ2h0YnNkKikKCSAgICAjIERvIG5v dCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KCSAgICB0ZXN0 IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCgkgICAgOzsKCSAgKi0qLXJoYXBzb2R5KiB8 ICotKi1kYXJ3aW4xLlswMTJdKQoJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJp ZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCgkgICAgZnVuY19hcHBlbmQgZGVwbGli cyAiIFN5c3RlbS5sdGZyYW1ld29yayIKCSAgICBjb250aW51ZQoJICAgIDs7CgkgICotKi1z Y28zLjJ2NSogfCAqLSotc2NvNXY2KikKCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9f Y3R5cGUKCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCgkgICAgOzsKCSAg Ki0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3Bl blVOSVgqKQoJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBs YWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNv bnRpbnVlCgkgICAgOzsKCSAgZXNhYwoJZWxpZiB0ZXN0IFgtbGNfciA9ICJYJGFyZyI7IHRo ZW4KCSBjYXNlICRob3N0IGluCgkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0q LWRyYWdvbmZseSogfCAqLSotbWlkbmlnaHRic2QqKQoJICAgIyBEbyBub3QgaW5jbHVkZSBs aWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgoJICAgY29udGludWUKCSAgIDs7 CgkgZXNhYwoJZmkKCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgoJY29udGludWUKCTs7 CgogICAgICAtbWxsdm0pCglwcmV2PW1sbHZtCgljb250aW51ZQoJOzsKCiAgICAgIC1tb2R1 bGUpCgltb2R1bGU9eWVzCgljb250aW51ZQoJOzsKCiAgICAgICMgVHJ1NjQgVU5JWCB1c2Vz IC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKICAgICAgIyBj bGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgogICAgICAj IERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0 ZWN0dXJlLgogICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKCWZ1bmNf YXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29t bWFuZCAiICRhcmciCglmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKCXBy ZXY9eGNvbXBpbGVyCgljb250aW51ZQoJOzsKICAgICAjIFNvbGFyaXMgbGQgcmVqZWN0cyBh cyBvZiAxMS40LiBSZWZlciB0byBPcmFjbGUgYnVnIDIyOTg1MTk5LgogICAgIC1wdGhyZWFk KQoJY2FzZSAkaG9zdCBpbgoJICAqc29sYXJpczIqKSA7OwoJICAqKQoJICAgIGNhc2UgIiRu ZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCgkgICAgICAgICoiICRhcmcgIiopIDs7 CgkgICAgICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAi ICRhcmciIDs7CgkgICAgZXNhYwoJICA7OwoJZXNhYwoJY29udGludWUKCTs7CiAgICAgIC1t dHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUg XAogICAgICB8LXRocmVhZHN8LWZvcGVubXB8LWZvcGVubXA9Knwtb3Blbm1wfC1tcHwteG9w ZW5tcHwtb21wfC1xc21wPSopCglmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmci CglmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgoJZnVuY19hcHBlbmQgZmlu YWxpemVfY29tbWFuZCAiICRhcmciCgljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxh Z3MgIiBpbgoJICAgICoiICRhcmcgIiopIDs7CgkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19p bmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGFyZyIgOzsKCWVzYWMKCWNvbnRpbnVlCgk7OwoK ICAgICAgLW11bHRpX21vZHVsZSkKCXNpbmdsZV9tb2R1bGU9JHdsLW11bHRpX21vZHVsZQoJ Y29udGludWUKCTs7CgogICAgICAtbm8tZmFzdC1pbnN0YWxsKQoJZmFzdF9pbnN0YWxsPW5v Cgljb250aW51ZQoJOzsKCiAgICAgIC1uby1pbnN0YWxsKQoJY2FzZSAkaG9zdCBpbgoJKi0q LWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXdpbmRvd3MqIHwgKi0qLXB3MzIqIHwgKi0q LW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQoJICAjIFRoZSBQQVRIIGhhY2tlcnkg aW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKCSAgIyBhbmQgRGFy d2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMu CgkgIGZ1bmNfd2FybmluZyAiJy1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIK CSAgZnVuY193YXJuaW5nICJhc3N1bWluZyAnLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIK CSAgZmFzdF9pbnN0YWxsPW5vCgkgIDs7CgkqKSBub19pbnN0YWxsPXllcyA7OwoJZXNhYwoJ Y29udGludWUKCTs7CgogICAgICAtbm8tdW5kZWZpbmVkKQoJYWxsb3dfdW5kZWZpbmVkPW5v Cgljb250aW51ZQoJOzsKCiAgICAgIC1vYmplY3RsaXN0KQoJcHJldj1vYmplY3RsaXN0Cglj b250aW51ZQoJOzsKCiAgICAgIC1vczJkbGxuYW1lKQoJcHJldj1vczJkbGxuYW1lCgljb250 aW51ZQoJOzsKCiAgICAgIC1vKSBwcmV2PW91dHB1dCA7OwoKICAgICAgLXByZWNpb3VzLWZp bGVzLXJlZ2V4KQoJcHJldj1wcmVjaW91c19yZWdleAoJY29udGludWUKCTs7CgogICAgICAt cmVsZWFzZSkKCXByZXY9cmVsZWFzZQoJY29udGludWUKCTs7CgogICAgICAtcnBhdGgpCglw cmV2PXJwYXRoCgljb250aW51ZQoJOzsKCiAgICAgIC1SKQoJcHJldj14cnBhdGgKCWNvbnRp bnVlCgk7OwoKICAgICAgLVIqKQoJZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGFyZyIKCWRp cj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4K CWNhc2UgJGRpciBpbgoJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwoJPSopCgkgIGZ1 bmNfc3RyaXBuYW1lICc9JyAnJyAiJGRpciIKCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3Ry aXBuYW1lX3Jlc3VsdAoJICA7OwoJKikKCSAgZnVuY19mYXRhbF9lcnJvciAiYXJndW1lbnQg KCRhcmcpIHRvICctUicgaXMgbm90IGFuIGFic29sdXRlIHBhdGg6ICRkaXIiCgkgIDs7Cgll c2FjCgljYXNlICIkeHJwYXRoICIgaW4KCSoiICRkaXIgIiopIDs7CgkqKSBmdW5jX2FwcGVu ZCB4cnBhdGggIiAkZGlyIiA7OwoJZXNhYwoJY29udGludWUKCTs7CgogICAgICAtc2hhcmVk KQoJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMg bG9vcC4KCWNvbnRpbnVlCgk7OwoKICAgICAgLXNocmV4dCkKCXByZXY9c2hyZXh0Cgljb250 aW51ZQoJOzsKCiAgICAgIC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKCSMgVGhl IGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCgkj IFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRo YXQKCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywgYnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQg dGhlIGVmZmVjdHMKCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3Vs ZCBicmVhayBvbiBhdCBsZWFzdAoJIyBEaWdpdGFsIFVuaXggYW5kIEFJWC4KCWNvbnRpbnVl Cgk7OwoKICAgICAgLXRocmVhZC1zYWZlKQoJdGhyZWFkX3NhZmU9eWVzCgljb250aW51ZQoJ OzsKCiAgICAgIC12ZXJzaW9uLWluZm8pCglwcmV2PXZpbmZvCgljb250aW51ZQoJOzsKCiAg ICAgIC12ZXJzaW9uLW51bWJlcikKCXByZXY9dmluZm8KCXZpbmZvX251bWJlcj15ZXMKCWNv bnRpbnVlCgk7OwoKICAgICAgLXdlYWspCiAgICAgICAgcHJldj13ZWFrCgljb250aW51ZQoJ OzsKCiAgICAgIC1XYywqKQoJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgoJYXJn cz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Cglhcmc9CglzYXZlX2lmcz0kSUZTOyBJRlM9LAoJ Zm9yIGZsYWcgaW4gJGFyZ3M7IGRvCgkgIElGUz0kc2F2ZV9pZnMKICAgICAgICAgIGZ1bmNf cXVvdGVfYXJnIHByZXR0eSAiJGZsYWciCgkgIGZ1bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1 b3RlX2FyZ19yZXN1bHQiCgkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNf cXVvdGVfYXJnX3Jlc3VsdCIKCWRvbmUKCUlGUz0kc2F2ZV9pZnMKCWZ1bmNfc3RyaXBuYW1l ICcgJyAnJyAiJGFyZyIKCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Cgk7OwoKICAgICAg LVdsLCopCglmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCglhcmdzPSRmdW5jX3N0 cmlwbmFtZV9yZXN1bHQKCWFyZz0KCXNhdmVfaWZzPSRJRlM7IElGUz0sCglmb3IgZmxhZyBp biAkYXJnczsgZG8KCSAgSUZTPSRzYXZlX2lmcwogICAgICAgICAgZnVuY19xdW90ZV9hcmcg cHJldHR5ICIkZmxhZyIKCSAgZnVuY19hcHBlbmQgYXJnICIgJHdsJGZ1bmNfcXVvdGVfYXJn X3Jlc3VsdCIKCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90 ZV9hcmdfcmVzdWx0IgoJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90 ZV9hcmdfcmVzdWx0IgoJZG9uZQoJSUZTPSRzYXZlX2lmcwoJZnVuY19zdHJpcG5hbWUgJyAn ICcnICIkYXJnIgoJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKCTs7CgogICAgICAtWGFz c2VtYmxlcikKICAgICAgICBwcmV2PXhhc3NlbWJsZXIKICAgICAgICBjb250aW51ZQogICAg ICAgIDs7CgogICAgICAtWGNvbXBpbGVyKQoJcHJldj14Y29tcGlsZXIKCWNvbnRpbnVlCgk7 OwoKICAgICAgLVhsaW5rZXIpCglwcmV2PXhsaW5rZXIKCWNvbnRpbnVlCgk7OwoKICAgICAg LVhDQ2xpbmtlcikKCXByZXY9eGNjbGlua2VyCgljb250aW51ZQoJOzsKCiAgICAgICMgLW1z Z18qIGZvciBvc2YgY2MKICAgICAgLW1zZ18qKQoJZnVuY19xdW90ZV9hcmcgcHJldHR5ICIk YXJnIgoJYXJnPSRmdW5jX3F1b3RlX2FyZ19yZXN1bHQKCTs7CgogICAgICAjIEZsYWdzIHRv IGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CiAgICAgICMg LTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNv bXBpbGVyCiAgICAgICMgLXJbMC05XVswLTldKiAgICAgICAgc3BlY2lmeSBwcm9jZXNzb3Ig Zm9yIHRoZSBTR0kgY29tcGlsZXIKICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFi bGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKICAgICAgIyArREEqLCArREQq ICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBIUCBjb21waWxlcgogICAg ICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29t cGlsZXIKICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3Bl Y2lmaWMgZmxhZ3MgZm9yIEdDQwogICAgICAjIC1GL3BhdGggICAgICAgICAgICAgIHBhdGgg dG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgogICAgICAjIC1wLCAt cGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBwcm9maWxpbmcgZmxhZ3MgZm9yIEdDQwog ICAgICAjIC1mc3RhY2stcHJvdGVjdG9yKiAgIHN0YWNrIHByb3RlY3RvciBmbGFncyBmb3Ig R0NDCiAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCiAg ICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vz c29yIHNlbGVjdGlvbgogICAgICAjIC0tc3lzcm9vdD0qICAgICAgICAgIGZvciBzeXNyb290 IHN1cHBvcnQKICAgICAgIyAtTyosIC1nKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlu a2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgogICAgICAjIC1zcGVjcz0q ICAgICAgICAgICAgIEdDQyBzcGVjcyBmaWxlcwogICAgICAjIC1zdGRsaWI9KiAgICAgICAg ICAgIHNlbGVjdCBjKysgc3RkIGxpYiB3aXRoIGNsYW5nCiAgICAgICMgLWZkaWFnbm9zdGlj cy1jb2xvciogc2ltcGx5IGFmZmVjdHMgb3V0cHV0CiAgICAgICMgLWZyZWNvcmQtZ2NjLXN3 aXRjaGVzIHVzZWQgdG8gdmVyaWZ5IGZsYWdzIHdlcmUgcmVzcGVjdGVkCiAgICAgICMgLWZz YW5pdGl6ZT0qICAgICAgICAgQ2xhbmcvR0NDIG1lbW9yeSBhbmQgYWRkcmVzcyBzYW5pdGl6 ZXIKICAgICAgIyAtZm5vLXNhbml0aXplKiAgICAgICBDbGFuZy9HQ0MgbWVtb3J5IGFuZCBh ZGRyZXNzIHNhbml0aXplcgogICAgICAjIC1zaGFyZWQtbGlic2FuICAgICAgIExpbmsgd2l0 aCBzaGFyZWQgc2FuaXRpemVyIHJ1bnRpbWVzIChDbGFuZykKICAgICAgIyAtc3RhdGljLWxp YnNhbiAgICAgICBMaW5rIHdpdGggc3RhdGljIHNhbml0aXplciBydW50aW1lcyAoQ2xhbmcp CiAgICAgICMgLW5vLWNhbm9uaWNhbC1wcmVmaXhlcyBEbyBub3QgZXhwYW5kIGFueSBzeW1i b2xpYyBsaW5rcwogICAgICAjIC1mdXNlLWxkPSogICAgICAgICAgIExpbmtlciBzZWxlY3Qg ZmxhZ3MgZm9yIEdDQwogICAgICAjIC1zdGF0aWMtKiAgICAgICAgICAgIGRpcmVjdCBHQ0Mg dG8gbGluayBzcGVjaWZpYyBsaWJyYXJpZXMgc3RhdGljYWxseQogICAgICAjIC1mY2lsa3Bs dXMgICAgICAgICAgIENpbGsgUGx1cyBsYW5ndWFnZSBleHRlbnNpb24gZmVhdHVyZXMgZm9y IEMvQysrCiAgICAgICMgLXJ0bGliPSogICAgICAgICAgICAgc2VsZWN0IGMgcnVudGltZSBs aWIgd2l0aCBjbGFuZwogICAgICAjIC0tdW53aW5kbGliPSogICAgICAgIHNlbGVjdCB1bndp bmRlciBsaWJyYXJ5IHdpdGggY2xhbmcKICAgICAgIyAtZntmaWxlfGRlYnVnfG1hY3JvfHBy b2ZpbGV9LXByZWZpeC1tYXA9KiBuZWVkZWQgZm9yIGx0byBsaW5raW5nCiAgICAgICMgLVdh LCogICAgICAgICAgICAgICAgUGFzcyBmbGFncyBkaXJlY3RseSB0byB0aGUgYXNzZW1ibGVy CiAgICAgICMgLVdlcnJvciwgLVdlcnJvcj0qICAgUmVwb3J0IChzcGVjaWZpZWQpIHdhcm5p bmdzIGFzIGVycm9ycwogICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJj aD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKICAgICAgLXRbNDVdKnwtdHhz Y2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lz cm9vdD0qfCBcCiAgICAgIC1PKnwtZyp8LWZsdG8qfC1md2hvcHIqfC1mdXNlLWxpbmtlci1w bHVnaW58LWZzdGFjay1wcm90ZWN0b3IqfC1uby1jYW5vbmljYWwtcHJlZml4ZXN8IFwKICAg ICAgLXN0ZGxpYj0qfC1ydGxpYj0qfC0tdW53aW5kbGliPSp8IFwKICAgICAgLXNwZWNzPSp8 LWZzYW5pdGl6ZT0qfC1mbm8tc2FuaXRpemUqfC1zaGFyZWQtbGlic2FufC1zdGF0aWMtbGli c2FufCBcCiAgICAgIC1mZmlsZS1wcmVmaXgtbWFwPSp8LWZkZWJ1Zy1wcmVmaXgtbWFwPSp8 LWZtYWNyby1wcmVmaXgtbWFwPSp8LWZwcm9maWxlLXByZWZpeC1tYXA9KnwgXAogICAgICAt ZmRpYWdub3N0aWNzLWNvbG9yKnwtZnJlY29yZC1nY2Mtc3dpdGNoZXN8IFwKICAgICAgLWZ1 c2UtbGQ9Knwtc3RhdGljLSp8LWZjaWxrcGx1c3wtV2EsKnwtV2Vycm9yfC1XZXJyb3I9KikK ICAgICAgICBmdW5jX3F1b3RlX2FyZyBwcmV0dHkgIiRhcmciCglhcmc9JGZ1bmNfcXVvdGVf YXJnX3Jlc3VsdAogICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmci CiAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCiAgICAgICAg ZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgogICAgICAgIGNvbnRpbnVlCiAg ICAgICAgOzsKCiAgICAgIC1aKikKICAgICAgICBpZiB0ZXN0IG9zMiA9ICJgZXhwciAkaG9z dCA6ICcuKlwob3MyXCknYCI7IHRoZW4KICAgICAgICAgICMgT1MvMiB1c2VzIC1aeHh4IHRv IHNwZWNpZnkgT1MvMi1zcGVjaWZpYyBvcHRpb25zCgkgIGNvbXBpbGVyX2ZsYWdzPSIkY29t cGlsZXJfZmxhZ3MgJGFyZyIKCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFy ZyIKCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCgkgIGNhc2UgJGFy ZyBpbgoJICAtWmxpbmtlciB8IC1ac3RhY2spCgkgICAgcHJldj14Y29tcGlsZXIKCSAgICA7 OwoJICBlc2FjCgkgIGNvbnRpbnVlCiAgICAgICAgZWxzZQoJICAjIE90aGVyd2lzZSB0cmVh dCBsaWtlICdTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcnIGJlbG93CgkgIGZ1bmNfcXVvdGVf YXJnIHByZXR0eSAiJGFyZyIKCSAgYXJnPSRmdW5jX3F1b3RlX2FyZ19yZXN1bHQKICAgICAg ICBmaQoJOzsKCiAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgogICAgICAtKiB8 ICsqKQogICAgICAgIGZ1bmNfcXVvdGVfYXJnIHByZXR0eSAiJGFyZyIKCWFyZz0kZnVuY19x dW90ZV9hcmdfcmVzdWx0Cgk7OwoKICAgICAgKi4kb2JqZXh0KQoJIyBBIHN0YW5kYXJkIG9i amVjdC4KCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgoJOzsKCiAgICAgICoubG8pCgkjIEEg bGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KCgkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMg cmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCglpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIk YXJnIjsgdGhlbgoJICBwaWNfb2JqZWN0PQoJICBub25fcGljX29iamVjdD0KCgkgICMgUmVh ZCB0aGUgLmxvIGZpbGUKCSAgZnVuY19zb3VyY2UgIiRhcmciCgoJICBpZiB0ZXN0IC16ICIk cGljX29iamVjdCIgfHwKCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAoJICAg ICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiICYmCgkgICAgIHRlc3Qgbm9uZSA9ICIkbm9u X3BpY19vYmplY3QiOyB0aGVuCgkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQg bmFtZSBvZiBvYmplY3QgZm9yICckYXJnJyIKCSAgZmkKCgkgICMgRXh0cmFjdCBzdWJkaXJl Y3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCgkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIi CgkgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKCgkgIHRlc3Qgbm9uZSA9ICIkcGljX29i amVjdCIgfHwgewoJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3Qg aXMgZm91bmQgaW4uCgkgICAgcGljX29iamVjdD0keGRpciRwaWNfb2JqZWN0CgoJICAgIGlm IHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KCSAgICAgIGlmIHRlc3QgeWVzID0gIiRi dWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgeWVzID0gIiRkbG9wZW5fc3VwcG9ydCI7IHRo ZW4KCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCgkJcHJldj0KCQljb250 aW51ZQoJICAgICAgZWxzZQoJCSMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRl ZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCgkJcHJldj1kbHByZWZpbGVzCgkgICAgICBm aQoJICAgIGZpCgoJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAt T3NzYW1hCgkgICAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgoJICAgICAg IyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgoJICAgICAgZnVuY19hcHBlbmQgZGxw cmVmaWxlcyAiICRwaWNfb2JqZWN0IgoJICAgICAgcHJldj0KCSAgICBmaQoKCSAgICAjIEEg UElDIG9iamVjdC4KCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCgkg ICAgYXJnPSRwaWNfb2JqZWN0CgkgIH0KCgkgICMgTm9uLVBJQyBvYmplY3QuCgkgIGlmIHRl c3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgoJICAgICMgUHJlcGVuZCB0aGUg c3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCgkgICAgbm9uX3BpY19vYmpl Y3Q9JHhkaXIkbm9uX3BpY19vYmplY3QKCgkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2Jq ZWN0CgkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0 IgoJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19v YmplY3QiOyB0aGVuCgkgICAgICBhcmc9JG5vbl9waWNfb2JqZWN0CgkgICAgZmkKCSAgZWxz ZQoJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KCSAg ICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCgkgICAgbm9u X3BpY19vYmplY3Q9JHBpY19vYmplY3QKCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVj dHMgIiAkbm9uX3BpY19vYmplY3QiCgkgIGZpCgllbHNlCgkgICMgT25seSBhbiBlcnJvciBp ZiBub3QgZG9pbmcgYSBkcnktcnVuLgoJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KCSAgICAj IEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgoJICAgIGZ1bmNfZGly bmFtZSAiJGFyZyIgIi8iICIiCgkgICAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAoKCSAg ICBmdW5jX2xvMm8gIiRhcmciCgkgICAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNf bG8yb19yZXN1bHQKCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0 CgkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgoJICAgIGZ1bmNfYXBw ZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKCSAgZWxzZQoJICAgIGZ1 bmNfZmF0YWxfZXJyb3IgIickYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIK CSAgZmkKCWZpCgk7OwoKICAgICAgKi4kbGliZXh0KQoJIyBBbiBhcmNoaXZlLgoJZnVuY19h cHBlbmQgZGVwbGlicyAiICRhcmciCglmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmci Cgljb250aW51ZQoJOzsKCiAgICAgICoubGEpCgkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxp YnJhcnkuCgoJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCglpZiB0ZXN0IGRsZmlsZXMg PSAiJHByZXYiOyB0aGVuCgkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAt ZGxvcGVuLgoJICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290 X3Jlc3VsdCIKCSAgcHJldj0KCWVsaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhl bgoJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgoJICBm dW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIK CSAgcHJldj0KCWVsc2UKCSAgZnVuY19hcHBlbmQgZGVwbGlicyAiICRmdW5jX3Jlc29sdmVf c3lzcm9vdF9yZXN1bHQiCglmaQoJY29udGludWUKCTs7CgogICAgICAjIFNvbWUgb3RoZXIg Y29tcGlsZXIgYXJndW1lbnQuCiAgICAgICopCgkjIFVua25vd24gYXJndW1lbnRzIGluIGJv dGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKCSMgdG8gYmUg YWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCglm dW5jX3F1b3RlX2FyZyBwcmV0dHkgIiRhcmciCglhcmc9JGZ1bmNfcXVvdGVfYXJnX3Jlc3Vs dAoJOzsKICAgICAgZXNhYyAjIGFyZwoKICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0 ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCiAgICAgIGlmIHRlc3QgLW4gIiRh cmciOyB0aGVuCglpZiB0ZXN0IC1uICIkcnBhdGhfYXJnIjsgdGhlbgogICAgICAgICAgZnVu Y19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAke2FyZyMjKix9IgoJICB1bnNldCBycGF0aF9h cmcKCWVsc2UKCSAgY2FzZSAkYXJnIGluCiAgICAgICAgICAtV2wsLXJwYXRoLCopCgkgICAg ZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAke2FyZyMjKix9Ijs7CiAgICAgICAgICAt V2wsLXJwYXRoKQoJICAgIHJwYXRoX2FyZz0xOzsKICAgICAgICAgICopCiAgICAgICAgICAg IGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCgkgICAgZnVuY19hcHBlbmQg ZmluYWxpemVfY29tbWFuZCAiICRhcmciCgkgIGVzYWMKICAgICAgICBmaQogICAgICBmaQog ICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAoKICAgIHRlc3QgLW4gIiRwcmV2IiAm JiBcCiAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlICckcHJldmFyZycgb3B0aW9uIHJlcXVp cmVzIGFuIGFyZ3VtZW50IgoKICAgIGlmIHRlc3QgeWVzID0gIiRleHBvcnRfZHluYW1pYyIg JiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KICAgICAgZXZh bCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKICAgICAgZnVuY19hcHBlbmQg Y29tcGlsZV9jb21tYW5kICIgJGFyZyIKICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29t bWFuZCAiICRhcmciCiAgICBmaQoKICAgIG9sZGxpYnM9CiAgICAjIGNhbGN1bGF0ZSB0aGUg bmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5CiAgICBmdW5jX2Jhc2Vu YW1lICIkb3V0cHV0IgogICAgb3V0cHV0bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKICAg IGxpYm9ianNfc2F2ZT0kbGlib2JqcwoKICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFy IjsgdGhlbgogICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBh dGhfdmFyCiAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJCRzaGxp YnBhdGhfdmFyXCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAogICAgZWxzZQogICAgICBzaGxp Yl9zZWFyY2hfcGF0aD0KICAgIGZpCiAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIk c3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9w YXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKCiAgICAjIERlZmluaXRpb24g aXMgaW5qZWN0ZWQgYnkgTFRfQ09ORklHIGR1cmluZyBsaWJ0b29sIGdlbmVyYXRpb24uCiAg ICBmdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiRMVF9TWVNf TElCUkFSWV9QQVRIIgoKICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCiAgICBv dXRwdXRfb2JqZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpcgogICAgZnVuY190b190 b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVu Y190b190b29sX2ZpbGVfcmVzdWx0CiAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9y eS4KICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCgogICAgIyBEZXRlcm1pbmUg dGhlIHR5cGUgb2Ygb3V0cHV0CiAgICBjYXNlICRvdXRwdXQgaW4KICAgICIiKQogICAgICBm dW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCiAgICAg IDs7CiAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OwogICAgKi5sbyB8ICouJG9i amV4dCkgbGlua21vZGU9b2JqIDs7CiAgICAqLmxhKSBsaW5rbW9kZT1saWIgOzsKICAgICop IGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0u CiAgICBlc2FjCgogICAgc3BlY2lhbGRlcGxpYnM9CgogICAgbGlicz0KICAgICMgRmluZCBh bGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcwog ICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEp CiAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwogICAgICBpZiAkb3B0X3ByZXNlcnZl X2R1cF9kZXBzOyB0aGVuCgljYXNlICIkbGlicyAiIGluCgkqIiAkZGVwbGliICIqKSBmdW5j X2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7Cgllc2FjCiAgICAgIGZpCiAg ICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgogICAgZG9uZQoKICAgIGlmIHRlc3Qg bGliID0gIiRsaW5rbW9kZSI7IHRoZW4KICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNv bXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCgogICAgICAjIENvbXB1dGUgbGli cmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSBpbiAkcHJlZGVwcwogICAg ICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1 cGxpY2F0ZXMgYXJlCiAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgogICAgICBwcmVf cG9zdF9kZXBzPQogICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRf ZGVwczsgdGhlbgoJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRv CgkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KCSAgKiIgJHByZV9wb3N0X2RlcCAiKikg ZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkcHJlX3Bvc3RfZGVwcyIgOzsKCSAgZXNh YwoJICBmdW5jX2FwcGVuZCBwcmVfcG9zdF9kZXBzICIgJHByZV9wb3N0X2RlcCIKCWRvbmUK ICAgICAgZmkKICAgICAgcHJlX3Bvc3RfZGVwcz0KICAgIGZpCgogICAgZGVwbGlicz0KICAg IG5ld2RlcGVuZGVuY3lfbGlicz0KICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KICAgIG5lZWRf cmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0 b29sIGxpYnJhcmllcwogICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGli dG9vbCBsaWJyYXJpZXMKICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4g bm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwoKICAgIGNhc2UgJGxpbmttb2RlIGlu CiAgICBsaWIpCglwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCglmb3IgZmlsZSBpbiAk ZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KCSAgY2FzZSAkZmlsZSBpbgoJICAqLmxhKSA7OwoJ ICAqKQoJICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiAnLWRsb3Blbicgb25s eSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCgkgICAgOzsKCSAgZXNhYwoJZG9uZQoJOzsK ICAgIHByb2cpCgljb21waWxlX2RlcGxpYnM9CglmaW5hbGl6ZV9kZXBsaWJzPQoJYWxsZGVw bGlicz1mYWxzZQoJbmV3ZGxmaWxlcz0KCW5ld2RscHJlZmlsZXM9CglwYXNzZXM9ImNvbnYg c2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCgk7OwogICAgKikgIHBhc3Nlcz0iY29udiIK CTs7CiAgICBlc2FjCgogICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KICAgICAgIyBUaGUg cHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFj ayBoZXJlCiAgICAgICMgc28gdGhhdCAtTCBjb21lcyBiZWZvcmUgbGlicyB0aGF0IG5lZWQg aXQgZm9yIGluc3RhbmNlLi4uCiAgICAgIGlmIHRlc3QgbGliLGxpbmsgPSAiJGxpbmttb2Rl LCRwYXNzIjsgdGhlbgoJIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0 IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCgkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQg dGhlcmUgcHJvcGVybHkKICAgICAgICB0bXBfZGVwbGlicz0KCWZvciBkZXBsaWIgaW4gJGRl cGxpYnM7IGRvCgkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKCWRvbmUK CWRlcGxpYnM9JHRtcF9kZXBsaWJzCiAgICAgIGZpCgogICAgICBpZiB0ZXN0IGxpYixsaW5r ID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKCSB0ZXN0IHByb2csc2NhbiA9ICIkbGlua21vZGUs JHBhc3MiOyB0aGVuCglsaWJzPSRkZXBsaWJzCglkZXBsaWJzPQogICAgICBmaQogICAgICBp ZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgoJY2FzZSAkcGFzcyBpbgoJZGxvcGVu KSBsaWJzPSRkbGZpbGVzIDs7CglkbHByZW9wZW4pIGxpYnM9JGRscHJlZmlsZXMgOzsKCWxp bmspIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSAkZGVwZW5kZW5jeV9saWJzIiA7OwoJZXNh YwogICAgICBmaQogICAgICBpZiB0ZXN0IGxpYixkbHByZW9wZW4gPSAiJGxpbmttb2RlLCRw YXNzIjsgdGhlbgoJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVk IGxpYnRvb2wgbGlicwoJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KCSAgIyBJZ25vcmUg bm9uLWxpYnRvb2wtbGlicwoJICBkZXBlbmRlbmN5X2xpYnM9CgkgIGZ1bmNfcmVzb2x2ZV9z eXNyb290ICIkbGliIgoJICBjYXNlICRsaWIgaW4KCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRm dW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CgkgIGVzYWMKCgkgICMgQ29sbGVjdCBw cmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQoJICAj IGhhcyBkZWNsYXJlZCBhcyB3ZWFrIGxpYnMKCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5j eV9saWJzOyBkbwoJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCiAgICAgICAgICAgIGRl cGxpYl9iYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoJICAgIGNhc2UgIiAkd2Vha19saWJz ICIgaW4KCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CgkgICAgKikgZnVuY19hcHBlbmQg ZGVwbGlicyAiICRkZXBsaWIiIDs7CgkgICAgZXNhYwoJICBkb25lCglkb25lCglsaWJzPSRk bHByZWZpbGVzCiAgICAgIGZpCiAgICAgIGlmIHRlc3QgZGxvcGVuID0gIiRwYXNzIjsgdGhl bgoJIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJhcmllcwoJc2F2ZV9kZXBsaWJzPSRkZXBs aWJzCglkZXBsaWJzPQogICAgICBmaQoKICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8K CWxpYj0KCWZvdW5kPWZhbHNlCgljYXNlICRkZXBsaWIgaW4KCS1tdHwtbXRocmVhZHN8LWt0 aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAogICAg ICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtZm9wZW5tcD0qfC1vcGVubXB8LW1wfC14b3Blbm1w fC1vbXB8LXFzbXA9KikKCSAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNz IjsgdGhlbgoJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJz IgoJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCgkg IGVsc2UKCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCgkgICAg aWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgoJCWNhc2UgIiRuZXdfaW5oZXJpdGVk X2xpbmtlcl9mbGFncyAiIGluCgkJICAgICoiICRkZXBsaWIgIiopIDs7CgkJICAgICogKSBm dW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CgkJ ZXNhYwoJICAgIGZpCgkgIGZpCgkgIGNvbnRpbnVlCgkgIDs7CgktbCopCgkgIGlmIHRlc3Qg bGliICE9ICIkbGlua21vZGUiICYmIHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIjsgdGhlbgoJ ICAgIGZ1bmNfd2FybmluZyAiJy1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3Rz IgoJICAgIGNvbnRpbnVlCgkgIGZpCgkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBs aWIiCgkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAoJICBpZiB0ZXN0IGxpYiA9ICIk bGlua21vZGUiOyB0aGVuCgkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAk bGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2Vh cmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgoJICBlbHNlCgkgICAgc2VhcmNoZGlycz0i JG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9w YXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKCSAgZmkKCSAgZm9yIHNlYXJjaGRpciBpbiAkc2Vh cmNoZGlyczsgZG8KCSAgICBmb3Igc2VhcmNoX2V4dCBpbiAubGEgJHN0ZF9zaHJleHQgLnNv IC5hOyBkbwoJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQoJICAgICAgbGli PSRzZWFyY2hkaXIvbGliJG5hbWUkc2VhcmNoX2V4dAoJICAgICAgaWYgdGVzdCAtZiAiJGxp YiI7IHRoZW4KCQlpZiB0ZXN0IC5sYSA9ICIkc2VhcmNoX2V4dCI7IHRoZW4KCQkgIGZvdW5k PToKCQllbHNlCgkJICBmb3VuZD1mYWxzZQoJCWZpCgkJYnJlYWsgMgoJICAgICAgZmkKCSAg ICBkb25lCgkgIGRvbmUKCSAgaWYgJGZvdW5kOyB0aGVuCgkgICAgIyBkZXBsaWIgaXMgYSBs aWJ0b29sIGxpYnJhcnkKCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0 aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKCSAgICAjIFdlIG5lZWQgdG8g ZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgoJICAgIGlmIHRl c3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0 aGVuCgkgICAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KCSAgICAgICoiICRk ZXBsaWIgIiopCgkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgoJCSAgbGlicmFyeV9u YW1lcz0KCQkgIG9sZF9saWJyYXJ5PQoJCSAgZnVuY19zb3VyY2UgIiRsaWIiCgkJICBmb3Ig bCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCgkJICAgIGxsPSRsCgkJICBk b25lCgkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IjsgdGhlbiAjIG9ubHkg c3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCgkJICAgIGZvdW5kPWZhbHNlCgkJICAgIGZ1bmNf ZGlybmFtZSAiJGxpYiIgIiIgIi4iCgkJICAgIGxhZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0 CgkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5CgkJICAgIGlmIHRlc3QgcHJvZyxsaW5r ID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRk ZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVw bGliICRmaW5hbGl6ZV9kZXBsaWJzIgoJCSAgICBlbHNlCgkJICAgICAgZGVwbGlicz0iJGRl cGxpYiAkZGVwbGlicyIKCQkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2Rl cGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgoJCSAgICBmaQoJ CSAgICBjb250aW51ZQoJCSAgZmkKCQlmaQoJCTs7CgkgICAgICAqKSA7OwoJICAgICAgZXNh YwoJICAgIGZpCgkgIGVsc2UKCSAgICAjIGRlcGxpYiBkb2Vzbid0IHNlZW0gdG8gYmUgYSBs aWJ0b29sIGxpYnJhcnkKCSAgICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBh c3MiOyB0aGVuCgkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVw bGlicyIKCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxp YnMiCgkgICAgZWxzZQoJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKCSAgICAg IHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGli ICRuZXdkZXBlbmRlbmN5X2xpYnMiCgkgICAgZmkKCSAgICBjb250aW51ZQoJICBmaQoJICA7 OyAjIC1sCgkqLmx0ZnJhbWV3b3JrKQoJICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21v ZGUsJHBhc3MiOyB0aGVuCgkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxl X2RlcGxpYnMiCgkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVw bGlicyIKCSAgZWxzZQoJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCgkgICAgaWYg dGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgoJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xp bmtlcl9mbGFncyAiIGluCgkJICAgICoiICRkZXBsaWIgIiopIDs7CgkJICAgICogKSBmdW5j X2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CgkJZXNh YwoJICAgIGZpCgkgIGZpCgkgIGNvbnRpbnVlCgkgIDs7CgktTCopCgkgIGNhc2UgJGxpbmtt b2RlIGluCgkgIGxpYikKCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgoJICAgIHRl c3QgY29udiA9ICIkcGFzcyIgJiYgY29udGludWUKCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9 IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwn ICcnICIkZGVwbGliIgoJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5h bWVfcmVzdWx0IgoJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5j X3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCgkgICAgOzsKCSAgcHJvZykKCSAgICBpZiB0ZXN0 IGNvbnYgPSAiJHBhc3MiOyB0aGVuCgkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJz IgoJICAgICAgY29udGludWUKCSAgICBmaQoJICAgIGlmIHRlc3Qgc2NhbiA9ICIkcGFzcyI7 IHRoZW4KCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCgkgICAgZWxzZQoJICAg ICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCgkgICAgICBm aW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgoJICAgIGZpCgkg ICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKCSAgICBmdW5jX3Jlc29sdmVf c3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKCSAgICBmdW5jX2FwcGVuZCBuZXds aWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgoJICAgIDs7 CgkgICopCgkgICAgZnVuY193YXJuaW5nICInLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVz L29iamVjdHMiCgkgICAgOzsKCSAgZXNhYyAjIGxpbmttb2RlCgkgIGNvbnRpbnVlCgkgIDs7 ICMgLUwKCS1SKikKCSAgaWYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgoJICAgIGZ1bmNf c3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCgkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3Qg IiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCgkgICAgZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9v dF9yZXN1bHQKCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5p cXVlIGRpcmVjdG9yaWVzLgoJICAgIGNhc2UgIiR4cnBhdGggIiBpbgoJICAgICoiICRkaXIg IiopIDs7CgkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKCSAgICBlc2Fj CgkgIGZpCgkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCgkgIGNvbnRpbnVlCgkgIDs7 CgkqLmxhKQoJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKCSAgbGliPSRmdW5j X3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKCSAgOzsKCSouJGxpYmV4dCkKCSAgaWYgdGVzdCBj b252ID0gIiRwYXNzIjsgdGhlbgoJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCgkg ICAgY29udGludWUKCSAgZmkKCSAgY2FzZSAkbGlua21vZGUgaW4KCSAgbGliKQoJICAgICMg TGlua2luZyBjb252ZW5pZW5jZSBtb2R1bGVzIGludG8gc2hhcmVkIGxpYnJhcmllcyBpcyBh bGxvd2VkLAoJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBu b24tcG9ydGFibGUuCgkgICAgY2FzZSAiICRkbHByZWNvbnZlbmllbmNlbGlicyAiIGluCgkg ICAgKiIgJGRlcGxpYiAiKikgOzsKCSAgICAqKQoJICAgICAgdmFsaWRfYV9saWI9ZmFsc2UK CSAgICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCgkJbWF0Y2hfcGF0dGVybiop CgkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAoJCSAgbWF0Y2hf cGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4q XCkiYAoJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRT RUQgMTBxIFwKCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYv bnVsbDsgdGhlbgoJCSAgICB2YWxpZF9hX2xpYj06CgkJICBmaQoJCTs7CgkJcGFzc19hbGwp CgkJICB2YWxpZF9hX2xpYj06CgkJOzsKCSAgICAgIGVzYWMKCSAgICAgIGlmICR2YWxpZF9h X2xpYjsgdGhlbgoJCWZ1bmNfd2FybmluZyAiTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkg JG91dHB1dCBhZ2FpbnN0IHRoZSBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0 YWJsZSEiCgkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKCSAgICAgIGVsc2UKCQlmdW5j X3dhcm5pbmcgIlRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBs aWIuIgoJCWZ1bmNfd2FybmluZyAiSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhh dCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgoJCWZ1bmNfd2FybmluZyAi eW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5 b3UgaGF2ZSBhIgoJCWZ1bmNfd2FybmluZyAic2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJh cnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCgkJZnVuY193YXJuaW5nICJi ZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBt YWtlcyBtZSBiZWxpZXZlIgoJCWZ1bmNfd2FybmluZyAidGhhdCBpdCBpcyBqdXN0IGEgc3Rh dGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3QgdXNlIGhlcmUuIgoJICAgICAgZmkKCSAg ICAgIDs7CgkgICAgZXNhYwoJICAgIGNvbnRpbnVlCgkgICAgOzsKCSAgcHJvZykKCSAgICBp ZiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgoJICAgICAgZGVwbGlicz0iJGRlcGxpYiAk ZGVwbGlicyIKCSAgICBlbHNlCgkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNv bXBpbGVfZGVwbGlicyIKCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFs aXplX2RlcGxpYnMiCgkgICAgZmkKCSAgICBjb250aW51ZQoJICAgIDs7CgkgIGVzYWMgIyBs aW5rbW9kZQoJICA7OyAjICouJGxpYmV4dAoJKi5sbyB8ICouJG9iamV4dCkKCSAgaWYgdGVz dCBjb252ID0gIiRwYXNzIjsgdGhlbgoJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMi CgkgIGVsaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KCSAgICBpZiB0ZXN0IGRs cHJlb3BlbiA9ICIkcGFzcyIgfHwgdGVzdCB5ZXMgIT0gIiRkbG9wZW5fc3VwcG9ydCIgfHwg dGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgoJICAgICAgIyBJZiB0aGVy ZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCgkg ICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJl ZmlsZXMgIiAkZGVwbGliIgoJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21w aWxlX2RlcGxpYnMiCgkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6 ZV9kZXBsaWJzIgoJICAgIGVsc2UKCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAk ZGVwbGliIgoJICAgIGZpCgkgIGZpCgkgIGNvbnRpbnVlCgkgIDs7CgklREVQTElCUyUpCgkg IGFsbGRlcGxpYnM9OgoJICBjb250aW51ZQoJICA7OwoJZXNhYyAjIGNhc2UgJGRlcGxpYgoK CSRmb3VuZCB8fCB0ZXN0IC1mICIkbGliIiBcCgkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgImNh bm5vdCBmaW5kIHRoZSBsaWJyYXJ5ICckbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgJyRk ZXBsaWInIgoKCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29s IGFyY2hpdmUuCglmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCgkgIHx8IGZ1bmNfZmF0 YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCgoJZnVu Y19kaXJuYW1lICIkbGliIiAiIiAiLiIKCWxhZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CgoJ ZGxuYW1lPQoJZGxvcGVuPQoJZGxwcmVvcGVuPQoJbGliZGlyPQoJbGlicmFyeV9uYW1lcz0K CW9sZF9saWJyYXJ5PQoJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KCSMgSWYgdGhlIGxpYnJh cnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCgkjIGl0 IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlcyBpbnN0YWxsZWQsIG9yIHNob3VsZG5vdGxp bmsKCWluc3RhbGxlZD15ZXMKCXNob3VsZG5vdGxpbms9bm8KCWF2b2lkdGVtcHJwYXRoPQoK CgkjIFJlYWQgdGhlIC5sYSBmaWxlCglmdW5jX3NvdXJjZSAiJGxpYiIKCgkjIENvbnZlcnQg Ii1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJhbWV3b3JrIgoJaWYgdGVzdCAtbiAiJGlu aGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCgkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2Zs YWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3 b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCgkgIGZvciB0bXBfaW5oZXJpdGVk X2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KCSAgICBj YXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KCSAgICAgICoiICR0bXBf aW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OwoJICAgICAgKikgZnVuY19hcHBlbmQgbmV3 X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7 OwoJICAgIGVzYWMKCSAgZG9uZQoJZmkKCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiAkZGVw ZW5kZW5jeV9saWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFt ZXdvcmsgXDElZydgCglpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwK CSAgIHRlc3QgcHJvZyxzY2FuID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKCSAgIHsgdGVzdCBw cm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGliICE9ICIkbGlua21vZGUiOyB9OyB0aGVu CgkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZGxvcGVu IgoJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIg JGRscHJlb3BlbiIKCWZpCgoJaWYgdGVzdCBjb252ID0gIiRwYXNzIjsgdGhlbgoJICAjIE9u bHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcwoJICBkZXBsaWJzPSIkbGliICRk ZXBsaWJzIgoJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgoJICAgIGlmIHRlc3QgLXog IiRvbGRfbGlicmFyeSI7IHRoZW4KCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBm aW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciAnJGxpYiciCgkgICAgZmkKCSAgICAjIEl0 IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVj dHMuCgkgICAgZnVuY19hcHBlbmQgY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xk X2xpYnJhcnkiCgkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRv YmpkaXIvJG9sZF9saWJyYXJ5IgoJICBlbGlmIHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIiAm JiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIjsgdGhlbgoJICAgIGZ1bmNfZmF0YWxfZXJyb3Ig IickbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgoJICBmaQoJICB0bXBfbGli cz0KCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwoJICAgIGRlcGxpYnM9 IiRkZXBsaWIgJGRlcGxpYnMiCgkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhl bgoJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KCSAgICAgICoiICRkZXBsaWIgIiopIGZ1 bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKCSAgICAgIGVzYWMKCSAg ICBmaQoJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKCSAgZG9uZQoJICBj b250aW51ZQoJZmkgIyAkcGFzcyA9IGNvbnYKCgoJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxp YnJhcnkgd2UgbGluayBhZ2FpbnN0LgoJbGlua2xpYj0KCWlmIHRlc3QgLW4gIiRvbGRfbGli cmFyeSIgJiYKCSAgIHsgdGVzdCB5ZXMgPSAiJHByZWZlcl9zdGF0aWNfbGlicyIgfHwKCSAg ICAgdGVzdCBidWlsdCxubyA9ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiOyB9 OyB0aGVuCgkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5CgllbHNlCgkgIGZvciBsIGluICRvbGRf bGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KCSAgICBsaW5rbGliPSRsCgkgIGRvbmUKCWZp CglpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fu bm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yICckbGliJyIKCWZpCgoJIyBUaGlz IGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCglpZiB0ZXN0IGRsb3BlbiA9 ICIkcGFzcyI7IHRoZW4KCSAgdGVzdCAteiAiJGxpYmRpciIgXAoJICAgICYmIGZ1bmNfZmF0 YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogJyRsaWIn IgoJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAoJICAgICB0ZXN0IHllcyAhPSAiJGRsb3Bl bl9zdXBwb3J0IiB8fAoJICAgICB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiCgkg IHRoZW4KCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQg b3Igd2UncmUgbGlua2luZwoJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2Fk LiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CgkgICAgIyBkZXBlbmRlbnQgbGlicmFy aWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKCSAgICAjIGJvbWIg b3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCgkgICAgZnVuY19hcHBlbmQgZGxwcmVm aWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKCSAgZWxzZQoJICAgIGZ1bmNfYXBwZW5k IG5ld2RsZmlsZXMgIiAkbGliIgoJICBmaQoJICBjb250aW51ZQoJZmkgIyAkcGFzcyA9IGRs b3BlbgoKCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgoJY2FzZSAkbGFkaXIgaW4KCVtc XC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSRsYWRpciA7OwoJKikKCSAgYWJz X2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCgkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIi OyB0aGVuCgkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRp cmVjdG9yeSBuYW1lIG9mICckbGFkaXInIgoJICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBp dCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKCSAg ICBhYnNfbGFkaXI9JGxhZGlyCgkgIGZpCgkgIDs7Cgllc2FjCglmdW5jX2Jhc2VuYW1lICIk bGliIgoJbGFuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoKCSMgRmluZCB0aGUgcmVsZXZh bnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgoJaWYgdGVzdCB5ZXMgPSAi JGluc3RhbGxlZCI7IHRoZW4KCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIv JGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCgkgICAg ZnVuY193YXJuaW5nICJsaWJyYXJ5ICckbGliJyB3YXMgbW92ZWQuIgoJICAgIGRpcj0kbGFk aXIKCSAgICBhYnNkaXI9JGFic19sYWRpcgoJICAgIGxpYmRpcj0kYWJzX2xhZGlyCgkgIGVs c2UKCSAgICBkaXI9JGx0X3N5c3Jvb3QkbGliZGlyCgkgICAgYWJzZGlyPSRsdF9zeXNyb290 JGxpYmRpcgoJICBmaQoJICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIiAmJiBh dm9pZHRlbXBycGF0aD15ZXMKCWVsc2UKCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRp ci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KCSAg ICBkaXI9JGxhZGlyCgkgICAgYWJzZGlyPSRhYnNfbGFkaXIKCSAgICAjIFJlbW92ZSB0aGlz IHNlYXJjaCBwYXRoIGxhdGVyCgkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFi c19sYWRpciIKCSAgZWxzZQoJICAgIGRpcj0kbGFkaXIvJG9iamRpcgoJICAgIGFic2Rpcj0k YWJzX2xhZGlyLyRvYmpkaXIKCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVy CgkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKCSAgZmkKCWZp ICMgJGluc3RhbGxlZCA9IHllcwoJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5h bWUiCgluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKCgkjIFRoaXMgbGlicmFyeSB3YXMg c3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KCWlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNz IjsgdGhlbgoJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0IHByb2cgPSAiJGxpbmtt b2RlIjsgdGhlbgoJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAt ZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogJyRsaWInIgoJICBmaQoJICBjYXNl ICRob3N0IGluCgkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQ RS1ETExzLgoJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICp3aW5kb3dzKiB8ICpjZWdjYyog KQoJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFy ZWQgbGlicmFyeSBpZiBib3RoCgkgICAgICAjIHN0YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVz ZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0cmFjdAoJICAgICAgIyBzeW1ib2xzIGZy b20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAoJ ICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5j b3JyZWN0KS4gIFdlIGRvCgkgICAgICAjIHRoaXMgYnkgcHV0dGluZyB0aGUgaW1wb3J0IGxp YnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVzLgoJICAgICAgIyBXZSByZWNvdmVyIHRo ZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKCSAgICAgICMg bmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJpYWJsZSwgYW5kIChsYXRlcikgZXh0cmFj dGluZyB0aGUKCSAgICAgICMgZGxuYW1lIGZyb20gdGhlIGxhIGZpbGUuCgkgICAgICBpZiB0 ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgoJICAgICAgICBmdW5jX3RyX3NoICIkZGlyLyRsaW5r bGliIgoJICAgICAgICBldmFsICJsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdD1cJGFic19s YWRpci9cJGxhbmFtZSIKCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRk aXIvJGxpbmtsaWIiCgkgICAgICBlbHNlCgkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJl ZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBw cmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCgkgICAgICAgICMgdGhh dCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgoJICAg ICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCgkgICAgICAgICAgZnVuY19hcHBlbmQgZGxw cmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKCSAgICAgIGZpCgkgICAg OzsKCSAgICAqICkKCSAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNv IHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scwoJICAgICAgIyBhcmUgcmVxdWlyZWQg dG8gbGluaykuCgkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCgkgICAg ICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKCSAg ICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVz IHRvIGNoZWNrCgkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3Rs eSBpbiB0aGUgbGluayBwYXNzLgoJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCgkg ICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRf bGlicmFyeSIKCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBs dF9kbG9wZW4gZmluZHMgaXQuCgkgICAgICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVu CgkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRkbG5hbWUiCgkg ICAgICBlbHNlCgkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRs aW5rbGliIgoJICAgICAgZmkKCSAgICA7OwoJICBlc2FjCglmaSAjICRwYXNzID0gZGxwcmVv cGVuCgoJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KCSAgIyBMaW5rIHRoZSBjb252ZW5p ZW5jZSBsaWJyYXJ5CgkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KCSAgICBk ZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKCSAgZWxpZiB0ZXN0IHByb2cs bGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCgkgICAgY29tcGlsZV9kZXBsaWJzPSIk ZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgoJICAgIGZpbmFsaXplX2RlcGxp YnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgoJICBlbHNlCgkgICAg ZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcwoJICBm aQoJICBjb250aW51ZQoJZmkKCgoJaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgJiYgdGVz dCBsaW5rICE9ICIkcGFzcyI7IHRoZW4KCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9w YXRoICIgJGxhZGlyIgoJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgoKCSAgbGlua2FsbGRl cGxpYnM9ZmFsc2UKCSAgaWYgdGVzdCBubyAhPSAiJGxpbmtfYWxsX2RlcGxpYnMiIHx8IHRl c3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAoJICAgICB0ZXN0IG5vID0gIiRidWlsZF9saWJ0 b29sX2xpYnMiOyB0aGVuCgkgICAgbGlua2FsbGRlcGxpYnM9OgoJICBmaQoKCSAgdG1wX2xp YnM9CgkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KCSAgICBjYXNlICRk ZXBsaWIgaW4KCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCgkg ICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIK CSAgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29s dmVfc3lzcm9vdF9yZXN1bHQiCgkJIDs7CgkgICAgZXNhYwoJICAgICMgTmVlZCB0byBsaW5r IGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KCSAgICBpZiAkbGlua2FsbGRlcGxpYnM7 IHRoZW4KCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCgkgICAgZWxzZQoJICAg ICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCgkgICAgICAjIG9y L2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcwoJICAgICAgbmV3ZGVwZW5kZW5j eV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCgkgICAgZmkKCSAgICBpZiAk b3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCgkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBp bgoJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAk ZGVwbGliIiA7OwoJICAgICAgZXNhYwoJICAgIGZpCgkgICAgZnVuY19hcHBlbmQgdG1wX2xp YnMgIiAkZGVwbGliIgoJICBkb25lICMgZm9yIGRlcGxpYgoJICBjb250aW51ZQoJZmkgIyAk bGlua21vZGUgPSBwcm9nLi4uCgoJaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRw YXNzIjsgdGhlbgoJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKCSAgICAgeyB7 IHRlc3Qgbm8gPSAiJHByZWZlcl9zdGF0aWNfbGlicyIgfHwKCSAgICAgICAgIHRlc3QgYnVp bHQseWVzID0gIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCI7IH0gfHwKCSAgICAg ICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCgkgICAgIyBXZSBuZWVkIHRvIGhh cmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3Zh ciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIjsgdGhlbgoJICAgICAgIyBNYWtlIHN1 cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgoJICAgICAg Y2FzZSAkdGVtcF9ycGF0aDogaW4KCSAgICAgICoiJGFic2RpcjoiKikgOzsKICAgICAgICAg ICAgICAqKSBjYXNlICRhYnNkaXIgaW4KICAgICAgICAgICAgICAgICAiJHByb2dkaXIvIiop IGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OwogICAgICAgICAgICAgICAg ICopICAgICAgICAgICAgZnVuY19hcHBlbmQgdGVtcF9ycGF0aF90YWlsICIkYWJzZGlyOiIg OzsKICAgICAgICAgICAgICAgICBlc2FjCgkgICAgICBlc2FjCgkgICAgZmkKCgkgICAgIyBI YXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgoJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0 IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKCSAgICAjIHNlYXJjaCBwYXRo LgoJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KCSAgICAqIiAkYWJz ZGlyICIqKSA7OwoJICAgICopCgkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCRjb21waWxl X3JwYXRoX3RhaWwgIiBpbgoJICAgICAgKiIgJGFic2RpciAiKikgOzsKCSAgICAgICopIGNh c2UgJGFic2RpciBpbgogICAgICAgICAgICAgICAgICIkcHJvZ2Rpci8iKikgZnVuY19hcHBl bmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CiAgICAgICAgICAgICAgICAgKikgZnVu Y19hcHBlbmQgY29tcGlsZV9ycGF0aF90YWlsICIgJGFic2RpciIgOzsKCQkgZXNhYwoJICAg ICAgZXNhYwoJICAgICAgOzsKCSAgICBlc2FjCgkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2Vh cmNoX3BhdGggIiBpbgoJICAgICoiICRsaWJkaXIgIiopIDs7CgkgICAgKikKCSAgICAgIGNh c2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCgkgICAgICAqIiAkbGliZGlyICIqKSA7OwoJICAg ICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwoJICAgICAg ZXNhYwoJICAgICAgOzsKCSAgICBlc2FjCgkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJv ZyxsaW5rLi4uCgoJICBpZiAkYWxsZGVwbGlicyAmJgoJICAgICB7IHRlc3QgcGFzc19hbGwg PSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8fAoJICAgICAgIHsgdGVzdCB5ZXMgPSAiJGJ1 aWxkX2xpYnRvb2xfbGlicyIgJiYKCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9 OyB0aGVuCgkgICAgIyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIGZvciBzdGF0aWMgbGlicmFy aWVzCgkgICAgY29udGludWUKCSAgZmkKCWZpCgoJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVy IHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQoJdXNlX3N0YXRpY19saWJz PSRwcmVmZXJfc3RhdGljX2xpYnMKCWlmIHRlc3QgYnVpbHQgPSAiJHVzZV9zdGF0aWNfbGli cyIgJiYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KCSAgdXNlX3N0YXRpY19saWJz PW5vCglmaQoJaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCgkgICB7IHRlc3Qgbm8g PSAiJHVzZV9zdGF0aWNfbGlicyIgfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhl bgoJICBjYXNlICRob3N0X29zIGluCgkgIGN5Z3dpbiogfCBtaW5ndyogfCB3aW5kb3dzKiB8 IGNlZ2NjKiB8IG9zMiopCgkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJl Y2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCgkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0 X2RlcGxpYnMgIiAkbGliIgoJICAgICAgbmVlZF9yZWxpbms9bm8KCSAgICA7OwoJICAqKQoJ ICAgIGlmIHRlc3Qgbm8gPSAiJGluc3RhbGxlZCI7IHRoZW4KCSAgICAgIGZ1bmNfYXBwZW5k IG5vdGluc3RfZGVwbGlicyAiICRsaWIiCgkgICAgICBuZWVkX3JlbGluaz15ZXMKCSAgICBm aQoJICAgIDs7CgkgIGVzYWMKCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKCgkgICMg V2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBv biBzb21lCgkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3Bl bmVkIG1vZHVsZXMgdGhvdWdoIQoJICBkbG9wZW5tb2R1bGU9CgkgIGZvciBkbHByZW1vZHVs ZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCgkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRl c3QiID0gIlgkbGliIjsgdGhlbgoJICAgICAgZGxvcGVubW9kdWxlPSRkbHByZW1vZHVsZXRl c3QKCSAgICAgIGJyZWFrCgkgICAgZmkKCSAgZG9uZQoJICBpZiB0ZXN0IC16ICIkZGxvcGVu bW9kdWxlIiAmJiB0ZXN0IHllcyA9ICIkc2hvdWxkbm90bGluayIgJiYgdGVzdCBsaW5rID0g IiRwYXNzIjsgdGhlbgoJICAgIGVjaG8KCSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2Rl IjsgdGhlbgoJICAgICAgZnVuY193YXJuaW5nICJMaW5raW5nIHRoZSBleGVjdXRhYmxlICRv dXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgoJICAgIGVsc2UKCSAgICAgIGZ1 bmNfd2FybmluZyAiTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0 IHRoZSBsb2FkYWJsZSBtb2R1bGUiCgkgICAgZmkKCSAgICBmdW5jX3dhcm5pbmcgIiRsaW5r bGliIGlzIG5vdCBwb3J0YWJsZSEiCgkgIGZpCgkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9k ZSIgJiYKCSAgICAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2ludG9fbGlicyI7IHRoZW4KCSAg ICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCgkgICAgIyBTa2lwIGRpcmVjdG9yaWVz IHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQoJICAgICMgc2VhcmNo IHBhdGguCgkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgoJICAgICoi ICRhYnNkaXIgIiopIDs7CgkgICAgKikKCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoJGNv bXBpbGVfcnBhdGhfdGFpbCAiIGluCgkgICAgICAqIiAkYWJzZGlyICIqKSA7OwoJICAgICAg KikgY2FzZSAkYWJzZGlyIGluCiAgICAgICAgICAgICAgICAgIiRwcm9nZGlyLyIqKSBmdW5j X2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKICAgICAgICAgICAgICAgICAq KSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoX3RhaWwgIiAkYWJzZGlyIiA7OwoJCSBlc2Fj CgkgICAgICBlc2FjCgkgICAgICA7OwoJICAgIGVzYWMKCSAgICBjYXNlICIgJHN5c19saWJf ZGxzZWFyY2hfcGF0aCAiIGluCgkgICAgKiIgJGxpYmRpciAiKikgOzsKCSAgICAqKQoJICAg ICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KCSAgICAgICoiICRsaWJkaXIgIiopIDs7 CgkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7Cgkg ICAgICBlc2FjCgkgICAgICA7OwoJICAgIGVzYWMKCSAgZmkKCgkgIGlmIHRlc3QgLW4gIiRv bGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KCSAgICAjIGZpZ3VyZSBvdXQg dGhlIHNvbmFtZQoJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcwoJICAgIHNoaWZ0Cgkg ICAgcmVhbG5hbWU9JDEKCSAgICBzaGlmdAoJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8g XCIkbGlibmFtZV9zcGVjXCIiYAoJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0 J3MgcGVyZmVjdGx5IGdvb2QsIG5vPwoJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVu CgkgICAgICBzb25hbWU9JGRsbmFtZQoJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVj IjsgdGhlbgoJICAgICAgIyBibGVoIHdpbmRvd3MKCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4K CSAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCB3aW5kb3dzKiB8IGNlZ2NjKiB8IG9zMiopCgkg ICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCgkJbWFqb3I9JGZ1bmNfYXJpdGhf cmVzdWx0CgkJdmVyc3VmZml4PS0kbWFqb3IKCQk7OwoJICAgICAgZXNhYwoJICAgICAgZXZh bCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgoJICAgIGVsc2UKCSAgICAgIHNvbmFtZT0kcmVh bG5hbWUKCSAgICBmaQoKCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3Rf ZXhwc3ltc19jbWRzIHRvIHVzZQoJICAgIHNvcm9vdD0kc29uYW1lCgkgICAgZnVuY19iYXNl bmFtZSAiJHNvcm9vdCIKCSAgICBzb25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CgkgICAg ZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgoJICAgIG5ld2xpYj1saWJp bXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCgoJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFz IG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CgkgICAgaWYgdGVzdCAtZiAi JG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKCSAgICBlbHNlCgkgICAgICBm dW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSAnJHNv bmFtZSciCgkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRz IiAnZXhpdCAkPycKCSAgICBmaQoKCSAgICAjIENyZWF0ZSAkbmV3bGliCgkgICAgaWYgdGVz dCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQoJICAgICAgZnVu Y192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciAnJHNvbmFtZSciCgkg ICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRz IiAnZXhpdCAkPycKCSAgICBmaQoJICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlh YmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5CgkgICAgZGlyPSRvdXRwdXRf b2JqZGlyCgkgICAgbGlua2xpYj0kbmV3bGliCgkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNo aXZlX2Zyb21fZXhwc3ltc19jbWRzIgoKCSAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIg fHwgdGVzdCByZWxpbmsgIT0gIiRvcHRfbW9kZSI7IHRoZW4KCSAgICBhZGRfc2hsaWJwYXRo PQoJICAgIGFkZF9kaXI9CgkgICAgYWRkPQoJICAgIGxpYl9saW5rZWQ9eWVzCgkgICAgY2Fz ZSAkaGFyZGNvZGVfYWN0aW9uIGluCgkgICAgaW1tZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCgkg ICAgICBpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3QiOyB0aGVuCgkJYWRkPSRkaXIv JGxpbmtsaWIKCQljYXNlICRob3N0IGluCgkJICAqLSotc2NvMy4ydjUuMC5bMDI0XSopIGFk ZF9kaXI9LUwkZGlyIDs7CgkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0tTCRkaXIgOzsK CQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0q IHwgXAoJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0tTCRkaXIgOzsKCQkgICotKi1k YXJ3aW4qICkKCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxl IHRoZW4gd2UgY2Fubm90CgkJICAgICMgbGluayBhZ2FpbnN0IGl0LCBzb21lb25lIGlzIGln bm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCgkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwg JGFkZCAyPiAvZGV2L251bGwgfAoJCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9u dWxsOyB0aGVuCgkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7 IHRoZW4KCQkJZnVuY193YXJuaW5nICJsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBh IHNoYXJlZCBsaWJyYXJ5IgoJCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCgkJ CSAgZnVuY193YXJuaW5nICJBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGlj IGFyY2hpdmUgYXZhaWxhYmxlIgoJCQkgIGZ1bmNfd2FybmluZyAiVGhlIGxpbmsgd2lsbCBw cm9iYWJseSBmYWlsLCBzb3JyeSIKCQkJZWxzZQoJCQkgIGFkZD0kZGlyLyRvbGRfbGlicmFy eQoJCQlmaQoJCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgoJCQlh ZGQ9JGRpci8kb2xkX2xpYnJhcnkKCQkgICAgICBmaQoJCSAgICBmaQoJCWVzYWMKCSAgICAg IGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KCQljYXNlICRob3N0 IGluCgkJKi0qLXN1bm9zKikgYWRkX3NobGlicGF0aD0kZGlyIDs7CgkJZXNhYwoJCWFkZF9k aXI9LUwkZGlyCgkJYWRkPS1sJG5hbWUKCSAgICAgIGVsaWYgdGVzdCBubyA9ICIkaGFyZGNv ZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KCQlhZGRfc2hsaWJwYXRoPSRkaXIKCQlhZGQ9LWwk bmFtZQoJICAgICAgZWxzZQoJCWxpYl9saW5rZWQ9bm8KCSAgICAgIGZpCgkgICAgICA7OwoJ ICAgIHJlbGluaykKCSAgICAgIGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9kaXJlY3QiICYm CgkgICAgICAgICB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiOyB0aGVu CgkJYWRkPSRkaXIvJGxpbmtsaWIKCSAgICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2Rl X21pbnVzX0wiOyB0aGVuCgkJYWRkX2Rpcj0tTCRhYnNkaXIKCQkjIFRyeSBsb29raW5nIGZp cnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCgkJaWYgdGVz dCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KCQkgIGNhc2UgJGxpYmRpciBpbgoJCSAg ICBbXFwvXSopCgkJICAgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4 X2RpciRsaWJkaXIiCgkJICAgICAgOzsKCQkgIGVzYWMKCQlmaQoJCWFkZD0tbCRuYW1lCgkg ICAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgoJ CWFkZF9zaGxpYnBhdGg9JGRpcgoJCWFkZD0tbCRuYW1lCgkgICAgICBlbHNlCgkJbGliX2xp bmtlZD1ubwoJICAgICAgZmkKCSAgICAgIDs7CgkgICAgKikgbGliX2xpbmtlZD1ubyA7OwoJ ICAgIGVzYWMKCgkgICAgaWYgdGVzdCB5ZXMgIT0gIiRsaWJfbGlua2VkIjsgdGhlbgoJICAg ICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9w ZXJ0aWVzIgoJICAgIGZpCgoJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhl bgoJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgoJICAgICAgKiI6JGFkZF9z aGxpYnBhdGg6IiopIDs7CgkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3NobGlicGF0 aCAiJGFkZF9zaGxpYnBhdGg6IiA7OwoJICAgICAgZXNhYwoJICAgIGZpCgkgICAgaWYgdGVz dCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAm JiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCgkgICAgICB0 ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGli cyIKCSAgICBlbHNlCgkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFk ZF9kaXIgJGRlcGxpYnMiCgkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRk ICRkZXBsaWJzIgoJICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9kaXJlY3QiICYm CgkJIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfbWludXNfTCIgJiYKCQkgdGVzdCB5ZXMgPSAi JGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCgkJY2FzZSA6JGZpbmFsaXplX3NobGli cGF0aDogaW4KCQkqIjokbGliZGlyOiIqKSA7OwoJCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXpl X3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CgkJZXNhYwoJICAgICAgZmkKCSAgICBmaQoJICBm aQoKCSAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCByZWxpbmsgPSAiJG9w dF9tb2RlIjsgdGhlbgoJICAgIGFkZF9zaGxpYnBhdGg9CgkgICAgYWRkX2Rpcj0KCSAgICBh ZGQ9CgkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZvciBib3RoIGlzIHNpbXBsZToganVzdCBo YXJkY29kZSBpdC4KCSAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgoJ ICAgICAgIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSI7IHRoZW4KCSAg ICAgIGFkZD0kbGliZGlyLyRsaW5rbGliCgkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNv ZGVfbWludXNfTCI7IHRoZW4KCSAgICAgIGFkZF9kaXI9LUwkbHRfc3lzcm9vdCRsaWJkaXIK CSAgICAgIGFkZD0tbCRuYW1lCgkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hs aWJwYXRoX3ZhciI7IHRoZW4KCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGlu CgkgICAgICAqIjokbGliZGlyOiIqKSA7OwoJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxp emVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKCSAgICAgIGVzYWMKCSAgICAgIGFkZD0tbCRu YW1lCgkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgoJ ICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKCQkgdGVzdCAtZiAiJGlu c3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiOyB0aGVuCgkJYWRkPSRpbnN0X3ByZWZp eF9kaXIkbGliZGlyLyRsaW5rbGliCgkgICAgICBlbHNlCgkJYWRkPSRsaWJkaXIvJGxpbmts aWIKCSAgICAgIGZpCgkgICAgZWxzZQoJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJk Y29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KCSAgICAgIGFkZF9kaXI9LUwkbHRfc3lz cm9vdCRsaWJkaXIKCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9u IHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3By ZWZpeF9kaXIiOyB0aGVuCgkJY2FzZSAkbGliZGlyIGluCgkJICBbXFwvXSopCgkJICAgIGZ1 bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgoJCSAgICA7 OwoJCWVzYWMKCSAgICAgIGZpCgkgICAgICBhZGQ9LWwkbmFtZQoJICAgIGZpCgoJICAgIGlm IHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCgkgICAgICB0ZXN0IC1uICIkYWRkX2Rp ciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9kaXIgJGZpbmFsaXplX2RlcGxpYnMiCgkg ICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6 ZV9kZXBsaWJzIgoJICAgIGVsc2UKCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBs aWJzPSIkYWRkX2RpciAkZGVwbGlicyIKCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxp YnM9IiRhZGQgJGRlcGxpYnMiCgkgICAgZmkKCSAgZmkKCWVsaWYgdGVzdCBwcm9nID0gIiRs aW5rbW9kZSI7IHRoZW4KCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29k ZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAoJICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4g IFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKCSAgIyBzaGFyZWQgcGxh dGZvcm1zLgoJICBpZiB0ZXN0IHVuc3VwcG9ydGVkICE9ICIkaGFyZGNvZGVfZGlyZWN0Ijsg dGhlbgoJICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0kb2xkX2xpYnJh cnkKCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGNvbXBpbGVfZGVwbGli cyIKCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBs aWJzIgoJICBlbHNlCgkgICAgY29tcGlsZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkY29t cGlsZV9kZXBsaWJzIgoJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRm aW5hbGl6ZV9kZXBsaWJzIgoJICBmaQoJZWxpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9v bF9saWJzIjsgdGhlbgoJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CgkgIGlmIHRlc3QgcGFz c19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KCSAgICAjIFdlJ3JlIHRy eWluZyBsaW5rIGEgc2hhcmVkIGxpYnJhcnkgYWdhaW5zdCBhIHN0YXRpYyBvbmUKCSAgICAj IGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KCgkgICAgIyBKdXN0IHByaW50 IGEgd2FybmluZyBhbmQgYWRkIHRoZSBsaWJyYXJ5IHRvIGRlcGVuZGVuY3lfbGlicyBzbwoJ ICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRp YyBsaWJyYXJ5LgoJICAgIGZ1bmNfd2FybmluZyAiVGhpcyBzeXN0ZW0gY2Fubm90IGxpbmsg dG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgoJICAgIGZ1bmNfd2FybmluZyAiSSBoYXZl IHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGlu ayBpbiB3aGVuIgoJICAgIGZ1bmNfd2FybmluZyAieW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5 LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgoJICAgIGZ1bmNfd2Fy bmluZyAic2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3Qg YXBwZWFyIHRvIGhhdmUuIgoJICAgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiOyB0aGVuCgkg ICAgICBmdW5jX3dhcm5pbmcgIkJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxp YnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgoJICAgICAgZnVuY193YXJuaW5n ICJhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxv cGVuaW5nIGFwcGxpY2F0aW9uIgoJICAgICAgZnVuY193YXJuaW5nICJpcyBsaW5rZWQgd2l0 aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKCSAg ICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCgkJZnVuY193YXJu aW5nICJIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxl IHRvIGV4dHJhY3Qgc3ltYm9sIgoJCWZ1bmNfd2FybmluZyAibGlzdHMgZnJvbSBhIHByb2dy YW0sIHVzaW5nICdubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCgkJZnVu Y193YXJuaW5nICJub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBp cyBwcm9iYWJseSB1c2VsZXNzLiIKCQlmdW5jX3dhcm5pbmcgIidubScgZnJvbSBHTlUgYmlu dXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKCSAgICAgIGZpCgkgICAgICBp ZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KCQlidWlsZF9saWJ0b29sX2xp YnM9bW9kdWxlCgkJYnVpbGRfb2xkX2xpYnM9eWVzCgkgICAgICBlbHNlCgkJYnVpbGRfbGli dG9vbF9saWJzPW5vCgkgICAgICBmaQoJICAgIGZpCgkgIGVsc2UKCSAgICBkZXBsaWJzPSIk ZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKCSAgICBsaW5rX3N0YXRpYz15ZXMKCSAgZmkK CWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJhcnk/CgoJaWYgdGVzdCBsaWIgPSAiJGxp bmttb2RlIjsgdGhlbgoJICBpZiB0ZXN0IC1uICIkZGVwZW5kZW5jeV9saWJzIiAmJgoJICAg ICB7IHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfaW50b19saWJzIiB8fAoJICAgICAgIHRlc3Qg eWVzID0gIiRidWlsZF9vbGRfbGlicyIgfHwKCSAgICAgICB0ZXN0IHllcyA9ICIkbGlua19z dGF0aWMiOyB9OyB0aGVuCgkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJz CgkgICAgdGVtcF9kZXBsaWJzPQoJICAgIGZvciBsaWJkaXIgaW4gJGRlcGVuZGVuY3lfbGli czsgZG8KCSAgICAgIGNhc2UgJGxpYmRpciBpbgoJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFt ZSAnLVInICcnICIkbGliZGlyIgoJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJp cG5hbWVfcmVzdWx0CgkJICAgY2FzZSAiICR4cnBhdGggIiBpbgoJCSAgICoiICR0ZW1wX3hy cGF0aCAiKikgOzsKCQkgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkdGVtcF94cnBhdGgi OzsKCQkgICBlc2FjOzsKCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfZGVwbGlicyAiICRs aWJkaXIiOzsKCSAgICAgIGVzYWMKCSAgICBkb25lCgkgICAgZGVwZW5kZW5jeV9saWJzPSR0 ZW1wX2RlcGxpYnMKCSAgZmkKCgkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAi ICRhYnNkaXIiCgkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQoJICB0ZXN0IG5vID0g IiRsaW5rX3N0YXRpYyIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5h bWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xp YnMKCSAgdG1wX2xpYnM9CgkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8K CSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIK CSAgICBjYXNlICRkZXBsaWIgaW4KICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1l ICctTCcgJycgIiRkZXBsaWIiCiAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lz cm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OwogICAgICAgICAgICAgICopIGZ1bmNf cmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OwogICAgICAgICAgICBlc2FjCgkgICAgaWYg JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgoJICAgICAgY2FzZSAiJHRtcF9saWJzICIg aW4KCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCiAgICAgICAg ICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lz cm9vdF9yZXN1bHQiIDs7CgkgICAgICBlc2FjCgkgICAgZmkKCSAgICBmdW5jX2FwcGVuZCB0 bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCgkgIGRvbmUKCgkgIGlm IHRlc3Qgbm8gIT0gIiRsaW5rX2FsbF9kZXBsaWJzIjsgdGhlbgoJICAgICMgQWRkIHRoZSBz ZWFyY2ggcGF0aHMgb2YgYWxsIGRlcGVuZGVuY3kgbGlicmFyaWVzCgkgICAgZm9yIGRlcGxp YiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwoJICAgICAgcGF0aD0KCSAgICAgIGNhc2UgJGRl cGxpYiBpbgoJICAgICAgLUwqKSBwYXRoPSRkZXBsaWIgOzsKCSAgICAgICoubGEpCgkgICAg ICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgoJICAgICAgICBkZXBsaWI9JGZ1 bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAoJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBs aWIiICIiICIuIgoJCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAoJCSMgV2UgbmVlZCBhbiBh YnNvbHV0ZSBwYXRoLgoJCWNhc2UgJGRpciBpbgoJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9d KikgYWJzZGlyPSRkaXIgOzsKCQkqKQoJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAoJ CSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KCQkgICAgZnVuY193YXJuaW5nICJjYW5u b3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckZGlyJyIKCQkgICAg YWJzZGlyPSRkaXIKCQkgIGZpCgkJICA7OwoJCWVzYWMKCQlpZiAkR1JFUCAiXmluc3RhbGxl ZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgoJCWNhc2UgJGhvc3QgaW4KCQkqLSot ZGFyd2luKikKCQkgIGRlcGRlcGw9CgkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCRTRUQg LW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAoJCSAgaWYg dGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiOyB0aGVuCgkJICAgIGZvciB0bXAgaW4gJGRl cGxpYnJhcnlfbmFtZXM7IGRvCgkJICAgICAgZGVwZGVwbD0kdG1wCgkJICAgIGRvbmUKCQkg ICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIjsgdGhlbgoJCSAgICAg IGRlcGRlcGw9JGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsCgkJICAgICAgZGFyd2luX2luc3Rh bGxfbmFtZT1gJE9UT09MIC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmlu dCAkMTtleGl0fX0nYAogICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndp bl9pbnN0YWxsX25hbWUiOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2lu X2luc3RhbGxfbmFtZT1gJE9UT09MNjQgLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09 IDIpIHtwcmludCAkMTtleGl0fX0nYAogICAgICAgICAgICAgICAgICAgICAgZmkKCQkgICAg ICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bC1keWxpYl9maWxlICR3bCRkYXJ3 aW5faW5zdGFsbF9uYW1lOiRkZXBkZXBsIgoJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9m bGFncyAiIC1keWxpYl9maWxlICRkYXJ3aW5faW5zdGFsbF9uYW1lOiRkZXBkZXBsIgoJCSAg ICAgIHBhdGg9CgkJICAgIGZpCgkJICBmaQoJCSAgOzsKCQkqKQoJCSAgcGF0aD0tTCRhYnNk aXIvJG9iamRpcgoJCSAgOzsKCQllc2FjCgkJZWxzZQoJCSAgZXZhbCBsaWJkaXI9YCRTRUQg LW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCgkJICB0ZXN0IC16ICIk bGliZGlyIiAmJiBcCgkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3Qg YSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCgkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRp ciIgJiYgXAoJCSAgICBmdW5jX3dhcm5pbmcgIickZGVwbGliJyBzZWVtcyB0byBiZSBtb3Zl ZCIKCgkJICBwYXRoPS1MJGFic2RpcgoJCWZpCgkJOzsKCSAgICAgIGVzYWMKCSAgICAgIGNh c2UgIiAkZGVwbGlicyAiIGluCgkgICAgICAqIiAkcGF0aCAiKikgOzsKCSAgICAgICopIGRl cGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OwoJICAgICAgZXNhYwoJICAgIGRvbmUKCSAgZmkg IyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCglmaSAjIGxpbmttb2RlID0gbGliCiAgICAgIGRv bmUgIyBmb3IgZGVwbGliIGluICRsaWJzCgogICAgICBmdW5jX2FwcGVuZCB0ZW1wX3JwYXRo ICIkdGVtcF9ycGF0aF90YWlsIgogICAgICBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIk Y29tcGlsZV9ycGF0aF90YWlsIgoKICAgICAgaWYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhl bgoJaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KCSAgY29tcGlsZV9kZXBsaWJz PSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKCSAgZmlu YWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9k ZXBsaWJzIgoJZWxzZQoJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVD SE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpc KS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKCWZpCiAgICAgIGZpCiAgICAgIGRl cGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9saWJzCiAgICAgIGlmIHRlc3QgZGxwcmVv cGVuID0gIiRwYXNzIjsgdGhlbgoJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMg YmVmb3JlIG90aGVyIGxpYnJhcmllcwoJZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBk bwoJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgoJZG9uZQogICAgICBmaQogICAgICBp ZiB0ZXN0IGRsb3BlbiAhPSAiJHBhc3MiOyB0aGVuCgl0ZXN0IGNvbnYgPSAiJHBhc3MiIHx8 IHsKCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVl IGRpcmVjdG9yaWVzLgoJICBsaWJfc2VhcmNoX3BhdGg9CgkgIGZvciBkaXIgaW4gJG5ld2xp Yl9zZWFyY2hfcGF0aDsgZG8KCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KCSAg ICAqIiAkZGlyICIqKSA7OwoJICAgICopIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAi ICRkaXIiIDs7CgkgICAgZXNhYwoJICBkb25lCgkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KCX0K CglpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCgkgIHZhcnM9 ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBsaWJzIgoJZWxzZQoJICB2YXJzPWRlcGxp YnMKCWZpCglmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KCSAgIyBBZGQg bGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgoJICBldmFsIHRtcF9saWJzPVwi XCQkdmFyXCIKCSAgbmV3X2xpYnM9CgkgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBp cyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCgkgICMgICAgICAgIHRoYXQgc29tZSBuYXN0 eSBkZXBlbmRlbmN5IGxvb3AgaXNuJ3QgYWNjaWRlbnRhbGx5CgkgICMgICAgICAgIGJyb2tl bjogbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIgoJICBmb3IgZGVwbGliIGluICR0bXBf bGliczsgZG8KCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCgkgICAgICBu ZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCgkgICAgZWxzZQoJICAgICAgIyBQcmFnbWF0 aWNhbGx5LCB0aGlzIHNlZW1zIHRvIGNhdXNlIHZlcnkgZmV3IHByb2JsZW1zIGluCgkgICAg ICAjIHByYWN0aWNlOgoJICAgICAgY2FzZSAkZGVwbGliIGluCgkgICAgICAtTCopIG5ld19s aWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKCSAgICAgIC1SKikgOzsKCSAgICAgICopCgkg ICAgICAgICMgQW5kIGhlcmUgaXMgdGhlIHJlYXNvbjogd2hlbiBhIGxpYnJhcnkgYXBwZWFy cyBtb3JlCgkgICAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ug b2YgYSBsaWJyYXJ5LCBvcgoJICAgICAgICAjIGlzIGltcGxpY2l0bHkgbGlua2VkIGluIG1v cmUgdGhhbiBvbmNlIGJ5IHRoZQoJICAgICAgICAjIGNvbXBpbGVyLCBpdCBpcyBjb25zaWRl cmVkIHNwZWNpYWwsIGFuZCBtdWx0aXBsZQoJICAgICAgICAjIG9jY3VycmVuY2VzIHRoZXJl b2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCgkgICAgICAgICMgd2l0aCBoYXZp bmcgdGhlIHNhbWUgbGlicmFyeSBiZWluZyBsaXN0ZWQgYXMgYQoJICAgICAgICAjIGRlcGVu ZGVuY3kgb2YgbXVsdGlwbGUgb3RoZXIgbGlicmFyaWVzOiBpbiB0aGlzIGNhc2UsCgkgICAg ICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRv ZXMgbm90CgkgICAgICAgICMgbmVlZCB0byBiZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UsIHNv IHdlIGtlZXAgb25seSB0aGUKCSAgICAgICAgIyBsYXN0IGNvcHkuICBUaGlzIGlzIG5vdCBh bHdheXMgcmlnaHQsIGJ1dCBpdCBpcyByYXJlCgkgICAgICAgICMgZW5vdWdoIHRoYXQgd2Ug cmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKCSAgICAgICAgIyBzdWNo IHVucG9ydGFibGUgbGlua2luZyB0cmlja3MgdG8gbGluayB0aGUgbGlicmFyeQoJICAgICAg ICAjIHVzaW5nIC1XbCwtbG5hbWUsIHNvIHRoYXQgbGlidG9vbCBkb2VzIG5vdCBjb25zaWRl ciBpdAoJICAgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4gIEFuZCBpZiBub3QgcG9z c2libGUgZm9yIHBvcnRhYmlsaXR5CgkgICAgICAgICMgcmVhc29ucywgdGhlbiAtLXByZXNl cnZlLWR1cC1kZXBzIHNob3VsZCBiZSB1c2VkLgoJICAgICAgICBjYXNlICIgJHNwZWNpYWxk ZXBsaWJzICIgaW4KCSAgICAgICAgKiIgJGRlcGxpYiAiKikgbmV3X2xpYnM9IiRkZXBsaWIg JG5ld19saWJzIiA7OwoJICAgICAgICAqKQoJICAgICAgICAgIGNhc2UgIiAkbmV3X2xpYnMg IiBpbgoJICAgICAgICAgICoiICRkZXBsaWIgIiopIDs7CgkgICAgICAgICAgKikgbmV3X2xp YnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OwoJICAgICAgICAgIGVzYWMKCSAgICAgICAgICA7 OwoJICAgICAgICBlc2FjCgkgICAgICAgIDs7CgkgICAgICBlc2FjCgkgICAgZmkKCSAgZG9u ZQoJICB0bXBfbGlicz0KCSAgZm9yIGRlcGxpYiBpbiAkbmV3X2xpYnM7IGRvCgkgICAgY2Fz ZSAkZGVwbGliIGluCgkgICAgLUwqKQoJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCgkg ICAgICAqIiAkZGVwbGliICIqKSA7OwoJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMg IiAkZGVwbGliIiA7OwoJICAgICAgZXNhYwoJICAgICAgOzsKCSAgICAqKSBmdW5jX2FwcGVu ZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CgkgICAgZXNhYwoJICBkb25lCgkgIGV2YWwgJHZh cj1cIiR0bXBfbGlic1wiCglkb25lICMgZm9yIHZhcgogICAgICBmaQoKICAgICAgIyBBZGQg U3VuIENDIHBvc3RkZXBzIGlmIHJlcXVpcmVkOgogICAgICB0ZXN0IENYWCA9ICIkdGFnbmFt ZSIgJiYgewogICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgICBsaW51eCopCiAgICAg ICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8ICRTRUQgNXFgIGluCiAgICAgICAgICAqU3VuXCBD KikgIyBTdW4gQysrIDUuOQogICAgICAgICAgICBmdW5jX3N1bmNjX2NzdGRfYWJpCgogICAg ICAgICAgICBpZiB0ZXN0IG5vICE9ICIkc3VuY2NfdXNlX2NzdGRfYWJpIjsgdGhlbgogICAg ICAgICAgICAgIGZ1bmNfYXBwZW5kIHBvc3RkZXBzICcgLWxpYnJhcnk9Q3N0ZCAtbGlicmFy eT1DcnVuJwogICAgICAgICAgICBmaQogICAgICAgICAgICA7OwogICAgICAgICAgZXNhYwog ICAgICAgICAgOzsKCiAgICAgICAgc29sYXJpcyopCiAgICAgICAgICBmdW5jX2NjX2Jhc2Vu YW1lICIkQ0MiCiAgICAgICAgICBjYXNlICRmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdCBpbgog ICAgICAgICAgQ0MqIHwgc3VuQ0MqKQogICAgICAgICAgICBmdW5jX3N1bmNjX2NzdGRfYWJp CgogICAgICAgICAgICBpZiB0ZXN0IG5vICE9ICIkc3VuY2NfdXNlX2NzdGRfYWJpIjsgdGhl bgogICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHBvc3RkZXBzICcgLWxpYnJhcnk9Q3N0ZCAt bGlicmFyeT1DcnVuJwogICAgICAgICAgICBmaQogICAgICAgICAgICA7OwogICAgICAgICAg ZXNhYwogICAgICAgICAgOzsKICAgICAgICBlc2FjCiAgICAgIH0KCiAgICAgICMgTGFzdCBz dGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCiAgICAgICMg KHRoZXkgc3RheSBpbiBkZXBsaWJzKQogICAgICB0bXBfbGlicz0KICAgICAgZm9yIGkgaW4g JGRlcGVuZGVuY3lfbGliczsgZG8KCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBp bGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCgkqIiAkaSAiKikKCSAgaT0KCSAgOzsKCWVzYWMK CWlmIHRlc3QgLW4gIiRpIjsgdGhlbgoJICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRpIgoJ ZmkKICAgICAgZG9uZQogICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCiAgICBkb25l ICMgZm9yIHBhc3MKICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCiAgICAg IGRsZmlsZXM9JG5ld2RsZmlsZXMKICAgIGZpCiAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmtt b2RlIiB8fCB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCiAgICAgIGRscHJlZmlsZXM9 JG5ld2RscHJlZmlsZXMKICAgIGZpCgogICAgY2FzZSAkbGlua21vZGUgaW4KICAgIG9sZGxp YikKICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAh PSAiJGRsc2VsZiI7IHRoZW4KCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQg Zm9yIGFyY2hpdmVzIgogICAgICBmaQoKICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgogICAg ICAqXCAtbCogfCAqXCAtTCopCglmdW5jX3dhcm5pbmcgIictbCcgYW5kICctTCcgYXJlIGln bm9yZWQgZm9yIGFyY2hpdmVzIiA7OwogICAgICBlc2FjCgogICAgICB0ZXN0IC1uICIkcnBh dGgiICYmIFwKCWZ1bmNfd2FybmluZyAiJy1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2 ZXMiCgogICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCglmdW5jX3dhcm5pbmcgIictUicg aXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCgogICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwK CWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25v cmVkIGZvciBhcmNoaXZlcyIKCiAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCglmdW5j X3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCgogICAgICB0 ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKCWZ1 bmNfd2FybmluZyAiJy1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMi CgogICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJh cmllcy4KICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCiAgICAgIG9sZGxpYnM9JG91dHB1 dAogICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCiAgICAgIDs7CgogICAg bGliKQogICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0 aGUgZm9ybSAnbGliTkFNRS5sYScuCiAgICAgIGNhc2UgJG91dHB1dG5hbWUgaW4KICAgICAg bGliKikKCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKCW5hbWU9 JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAoJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRz XCIKCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgoJOzsKICAgICAgKikKCXRlc3Qg bm8gPSAiJG1vZHVsZSIgXAoJICAmJiBmdW5jX2ZhdGFsX2hlbHAgImxpYnRvb2wgbGlicmFy eSAnJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoICdsaWInIgoKCWlmIHRlc3Qgbm8gIT0gIiRu ZWVkX2xpYl9wcmVmaXgiOyB0aGVuCgkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1v ZHVsZXMgaWYgcmVxdWlyZWQKCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRu YW1lIgoJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKCSAgZXZhbCBzaGFyZWRfZXh0 PVwiJHNocmV4dF9jbWRzXCIKCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCgll bHNlCgkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKCSAgbGlibmFt ZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CglmaQoJOzsKICAgICAgZXNhYwoKICAgICAgaWYg dGVzdCAtbiAiJG9ianMiOyB0aGVuCglpZiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19j aGVja19tZXRob2QiOyB0aGVuCgkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBs aWJ0b29sIGxpYnJhcnkgJyRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0 aGlzIGhvc3Q6JG9ianMiCgllbHNlCgkgIGZ1bmNfd2FybmluZyAiTGlua2luZyB0aGUgc2hh cmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCBvYmplY3RzICRv YmpzIGlzIG5vdCBwb3J0YWJsZSEiCgkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkb2JqcyIK CWZpCiAgICAgIGZpCgogICAgICB0ZXN0IG5vID0gIiRkbHNlbGYiIFwKCXx8IGZ1bmNfd2Fy bmluZyAiJy1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMi CgogICAgICBzZXQgZHVtbXkgJHJwYXRoCiAgICAgIHNoaWZ0CiAgICAgIHRlc3QgMSAtbHQg IiQjIiBcCgkmJiBmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlICctcnBhdGgncyBm b3IgYSBsaWJ0b29sIGxpYnJhcnkiCgogICAgICBpbnN0YWxsX2xpYmRpcj0kMQoKICAgICAg b2xkbGlicz0KICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgoJaWYgdGVzdCB5ZXMg PSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wg Y29udmVuaWVuY2UgbGlicmFyeS4KCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1z IHdpdGggYSAnLmFsJyBleHRlbnNpb24gc28KCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMg c2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGFuCgkgICMgYXJjaGl2ZSBub3JtYWxs eSB3b3VsZC4KCSAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAk b2xkbGlicyIKCSAgYnVpbGRfbGlidG9vbF9saWJzPWNvbnZlbmllbmNlCgkgIGJ1aWxkX29s ZF9saWJzPXllcwoJZmkKCgl0ZXN0IC1uICIkdmluZm8iICYmIFwKCSAgZnVuY193YXJuaW5n ICInLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZl bmllbmNlIGxpYnJhcmllcyIKCgl0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAoJICBmdW5jX3dh cm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVz IgogICAgICBlbHNlCgoJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVu dC4KCXNhdmVfaWZzPSRJRlM7IElGUz06CglzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCglzaGlm dAoJSUZTPSRzYXZlX2lmcwoKCXRlc3QgLW4gIiQ3IiAmJiBcCgkgIGZ1bmNfZmF0YWxfaGVs cCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byAnLXZlcnNpb24taW5mbyciCgoJIyBjb252ZXJ0 IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBsaWJ0b29sIGFnZXMKCSMgdGhpcyByZXRh aW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCgkjIHRvIG1h a2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQoKCWNhc2UgJHZp bmZvX251bWJlciBpbgoJeWVzKQoJICBudW1iZXJfbWFqb3I9JDEKCSAgbnVtYmVyX21pbm9y PSQyCgkgIG51bWJlcl9yZXZpc2lvbj0kMwoJICAjCgkgICMgVGhlcmUgYXJlIHJlYWxseSBv bmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CgkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlz aW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCgkgICMgYW5kIHRob3NlIHRoYXQgc3VidHJhY3Qg YWdlIGFuZCB1c2UgYWdlIGFzCgkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRo ZXJlIGlzIGlyaXgKCSAgIyB0aGF0IGhhcyBhbiBleHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1 bgoJICAjCgkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgoJICAjIGNvcnJlY3QgbGludXggdG8g Z251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKCSAgZGFyd2lufGZyZWVi c2QtZWxmfGxpbnV4fG1pZG5pZ2h0YnNkLWVsZnxvc2Z8cW54fHdpbmRvd3N8bm9uZSkKCSAg ICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCgkgICAgY3VycmVu dD0kZnVuY19hcml0aF9yZXN1bHQKCSAgICBhZ2U9JG51bWJlcl9taW5vcgoJICAgIHJldmlz aW9uPSRudW1iZXJfcmV2aXNpb24KCSAgICA7OwoJICBmcmVlYnNkLWFvdXR8c2NvfHN1bm9z KQoJICAgIGN1cnJlbnQ9JG51bWJlcl9tYWpvcgoJICAgIHJldmlzaW9uPSRudW1iZXJfbWlu b3IKCSAgICBhZ2U9MAoJICAgIDs7CgkgIGlyaXh8bm9uc3RvcHV4KQoJICAgIGZ1bmNfYXJp dGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKCSAgICBjdXJyZW50PSRmdW5jX2Fy aXRoX3Jlc3VsdAoJICAgIGFnZT0kbnVtYmVyX21pbm9yCgkgICAgcmV2aXNpb249JG51bWJl cl9taW5vcgoJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCgkgICAgOzsKCSAgZXNhYwoJICA7 OwoJbm8pCgkgIGN1cnJlbnQ9JDEKCSAgcmV2aXNpb249JDIKCSAgYWdlPSQzCgkgIDs7Cgll c2FjCgoJIyBDaGVjayB0aGF0IGVhY2ggb2YgdGhlIHRoaW5ncyBhcmUgdmFsaWQgbnVtYmVy cy4KCWNhc2UgJGN1cnJlbnQgaW4KCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAt OV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsK CSopCgkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgJyRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVn YXRpdmUgaW50ZWdlciIKCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZh bGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCgkgIDs7Cgllc2FjCgoJY2FzZSAkcmV2aXNpb24g aW4KCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTld WzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKCSopCgkgIGZ1bmNfZXJyb3Ig IlJFVklTSU9OICckcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgoJ ICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZv cm1hdGlvbiIKCSAgOzsKCWVzYWMKCgljYXNlICRhZ2UgaW4KCTB8WzEtOV18WzEtOV1bMC05 XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTld WzAtOV1bMC05XSkgOzsKCSopCgkgIGZ1bmNfZXJyb3IgIkFHRSAnJGFnZScgbXVzdCBiZSBh IG5vbm5lZ2F0aXZlIGludGVnZXIiCgkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlz IG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgoJICA7OwoJZXNhYwoKCWlmIHRlc3Qg IiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCgkgIGZ1bmNfZXJyb3IgIkFHRSAnJGFnZScg aXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgJyRjdXJyZW50 JyIKCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24g aW5mb3JtYXRpb24iCglmaQoKCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4K CW1ham9yPQoJdmVyc3VmZml4PQoJdmVyc3RyaW5nPQoJY2FzZSAkdmVyc2lvbl90eXBlIGlu Cglub25lKSA7OwoKCWRhcndpbikKCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3Vy cmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgoJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0 IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCgkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdl CgkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKCSAgdmVyc3VmZml4PSRtYWpvci4kYWdl LiRyZXZpc2lvbgoJICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0 aW9ucy4uLgoJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQoJICBtaW5vcl9jdXJyZW50PSRm dW5jX2FyaXRoX3Jlc3VsdAoJICB4bGN2ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3Zl cnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3Jf Y3VycmVudC4kcmV2aXNpb24iCgkgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lv biAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZp c2lvbiIKICAgICAgICAgICMgT24gRGFyd2luIG90aGVyIGNvbXBpbGVycwogICAgICAgICAg Y2FzZSAkQ0MgaW4KICAgICAgICAgICAgICBuYWdmb3IqKQogICAgICAgICAgICAgICAgICB2 ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQg JHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCiAgICAg ICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgdmVy c3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50 X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgogICAgICAgICAgICAgICAgICA7 OwogICAgICAgICAgZXNhYwoJICA7OwoKCWZyZWVic2QtYW91dCkKCSAgbWFqb3I9LiRjdXJy ZW50CgkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJHJldmlzaW9uCgkgIDs7CgoJZnJlZWJzZC1l bGYgfCBtaWRuaWdodGJzZC1lbGYpCgkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCgkg IG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRy ZXZpc2lvbgoJICA7OwoKCWlyaXggfCBub25zdG9wdXgpCgkgIGlmIHRlc3Qgbm8gPSAiJGx0 X2lyaXhfaW5jcmVtZW50IjsgdGhlbgoJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdl CgkgIGVsc2UKCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZSArIDEKCSAgZmkKCSAg bWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CgoJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KCSAg ICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CgkgICAgKikgICAg ICAgICB2ZXJzdHJpbmdfcHJlZml4PXNnaSA7OwoJICBlc2FjCgkgIHZlcnN0cmluZz0kdmVy c3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24KCgkgICMgQWRkIGluIGFsbCB0aGUgaW50 ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCgkgIGxvb3A9JHJldmlzaW9u CgkgIHdoaWxlIHRlc3QgMCAtbmUgIiRsb29wIjsgZG8KCSAgICBmdW5jX2FyaXRoICRyZXZp c2lvbiAtICRsb29wCgkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CgkgICAgZnVuY19h cml0aCAkbG9vcCAtIDEKCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAoJICAgIHZlcnN0 cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZwoJICBkb25l CgoJICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiAnLicu CgkgIG1ham9yPS4kbWFqb3IKCSAgdmVyc3VmZml4PSRtYWpvci4kcmV2aXNpb24KCSAgOzsK CglsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJl ZmFjdG9yCgkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCgkgIG1ham9yPS4kZnVuY19h cml0aF9yZXN1bHQKCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgoJICA7OwoK CW9zZikKCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKCSAgbWFqb3I9LiRmdW5jX2Fy aXRoX3Jlc3VsdAoJICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uCgkgIHZl cnN0cmluZz0kY3VycmVudC4kYWdlLiRyZXZpc2lvbgoKCSAgIyBBZGQgaW4gYWxsIHRoZSBp bnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KCSAgbG9vcD0kYWdlCgkg IHdoaWxlIHRlc3QgMCAtbmUgIiRsb29wIjsgZG8KCSAgICBmdW5jX2FyaXRoICRjdXJyZW50 IC0gJGxvb3AKCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKCSAgICBmdW5jX2FyaXRo ICRsb29wIC0gMQoJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CgkgICAgdmVyc3RyaW5n PSR2ZXJzdHJpbmc6JGlmYWNlLjAKCSAgZG9uZQoKCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRl cGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgoJICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcg IjokY3VycmVudC4wIgoJICA7OwoKCXFueCkKCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRh Z2UKCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAoJICB2ZXJzdWZmaXg9JG1ham9yLiRh Z2UuJHJldmlzaW9uCgkgIDs7CgoJc2NvKQoJICBtYWpvcj0uJGN1cnJlbnQKCSAgdmVyc3Vm Zml4PS4kY3VycmVudAoJICA7OwoKCXN1bm9zKQoJICBtYWpvcj0uJGN1cnJlbnQKCSAgdmVy c3VmZml4PS4kY3VycmVudC4kcmV2aXNpb24KCSAgOzsKCgl3aW5kb3dzKQoJICAjIFVzZSAn LScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCgkgICMgZXh0ZW5z aW9uIG9uIERPUyA4LjMgZmlsZSBzeXN0ZW1zLgoJICBmdW5jX2FyaXRoICRjdXJyZW50IC0g JGFnZQoJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKCSAgdmVyc3VmZml4PS0kbWFqb3IK CSAgOzsKCgkqKQoJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFy eSB2ZXJzaW9uIHR5cGUgJyR2ZXJzaW9uX3R5cGUnIgoJICA7OwoJZXNhYwoKCSMgQ2xlYXIg dGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBh IHJlbGVhc2UuCglpZiB0ZXN0IC16ICIkdmluZm8iICYmIHRlc3QgLW4gIiRyZWxlYXNlIjsg dGhlbgoJICBtYWpvcj0KCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCgkgIGRhcndpbikKCSAg ICAjIHdlIGNhbid0IGNoZWNrIGZvciAiMC4wIiBpbiBhcmNoaXZlX2NtZHMgZHVlIHRvIHF1 b3RpbmcKCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CgkgICAg dmVyc3RyaW5nPQoJICAgIDs7CgkgICopCgkgICAgdmVyc3RyaW5nPTAuMAoJICAgIDs7Cgkg IGVzYWMKCSAgaWYgdGVzdCBubyA9ICIkbmVlZF92ZXJzaW9uIjsgdGhlbgoJICAgIHZlcnN1 ZmZpeD0KCSAgZWxzZQoJICAgIHZlcnN1ZmZpeD0uMC4wCgkgIGZpCglmaQoKCSMgUmVtb3Zl IHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRl ZAoJaWYgdGVzdCB5ZXMsbm8gPSAiJGF2b2lkX3ZlcnNpb24sJG5lZWRfdmVyc2lvbiI7IHRo ZW4KCSAgbWFqb3I9CgkgIHZlcnN1ZmZpeD0KCSAgdmVyc3RyaW5nPQoJZmkKCgkjIENoZWNr IHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCglp ZiB0ZXN0IHllcyA9ICIkYWxsb3dfdW5kZWZpbmVkIjsgdGhlbgoJICBpZiB0ZXN0IHVuc3Vw cG9ydGVkID0gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4KCSAgICBpZiB0ZXN0IHll cyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCgkgICAgICBmdW5jX3dhcm5pbmcgInVuZGVm aW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXM7IGJ1 aWxkaW5nIHN0YXRpYyBvbmx5IgoJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCgkgICAg ZWxzZQoJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2FuJ3QgYnVpbGQgJGhvc3Qgc2hhcmVk IGxpYnJhcnkgdW5sZXNzIC1uby11bmRlZmluZWQgaXMgc3BlY2lmaWVkIgoJICAgIGZpCgkg IGZpCgllbHNlCgkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCgkgIGFsbG93 X3VuZGVmaW5lZF9mbGFnPSRub191bmRlZmluZWRfZmxhZwoJZmkKCiAgICAgIGZpCgogICAg ICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgOgogICAgICBm dW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCiAgICAgIHRlc3QgIiAiID0gIiRs aWJvYmpzIiAmJiBsaWJvYmpzPQoKICAgICAgaWYgdGVzdCByZWxpbmsgIT0gIiRvcHRfbW9k ZSI7IHRoZW4KCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVj dCBmaWxlcyBzaW5jZSB0aGV5CgkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBp bGluZyBQSUMgb2JqZWN0cy4KCXJlbW92ZWxpc3Q9Cgl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8g IiRvdXRwdXRfb2JqZGlyLyoiYAoJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbwoJICBj YXNlICRwIGluCgkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQoJICAgICAgIDs7CgkgICAgJG91 dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwg JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS4qKQoJICAgICAgIGlmIHRlc3QgLW4g IiRwcmVjaW91c19maWxlc19yZWdleCI7IHRoZW4KCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JF UCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKCQkgdGhlbgoJ CSAgIGNvbnRpbnVlCgkJIGZpCgkgICAgICAgZmkKCSAgICAgICBmdW5jX2FwcGVuZCByZW1v dmVsaXN0ICIgJHAiCgkgICAgICAgOzsKCSAgICAqKSA7OwoJICBlc2FjCglkb25lCgl0ZXN0 IC1uICIkcmVtb3ZlbGlzdCIgJiYgXAoJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVt b3ZlbGlzdCIKICAgICAgZmkKCiAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBi dWlsZGluZyBvbGQgbGlicmFyaWVzLgogICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xk X2xpYnMiICYmIHRlc3QgY29udmVuaWVuY2UgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0 aGVuCglmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxp YmV4dCIKCgkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCglvbGRvYmpzPSIk b2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4kbGliZXh0JC9k OyAkbG8ybyIgfCAkTkwyU1BgCiAgICAgIGZpCgogICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVt cG9yYXJ5IGRpcmVjdG9yaWVzLgogICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsg ZG8KICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICIkbGliX3NlYXJjaF9wYXRoICIg fCAkU0VEICJzJSAkcGF0aCAlICVnImAKICAgICAgIwlkZXBsaWJzPWAkRUNITyAiJGRlcGxp YnMgIiB8ICRTRUQgInMlIC1MJHBhdGggJSAlZyJgCiAgICAgICMJZGVwZW5kZW5jeV9saWJz PWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAK ICAgICAgI2RvbmUKCiAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCgkjIElmIHRo ZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCgl0ZW1w X3hycGF0aD0KCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KCSAgZnVuY19yZXBsYWNlX3N5 c3Jvb3QgIiRsaWJkaXIiCgkgIGZ1bmNfYXBwZW5kIHRlbXBfeHJwYXRoICIgLVIkZnVuY19y ZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgoJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgoJ ICAqIiAkbGliZGlyICIqKSA7OwoJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAi ICRsaWJkaXIiIDs7CgkgIGVzYWMKCWRvbmUKCWlmIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVf aW50b19saWJzIiB8fCB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCgkgIGRl cGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCglmaQogICAg ICBmaQoKICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBm aWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCiAgICAgIG9sZF9kbGZpbGVzPSRkbGZp bGVzCiAgICAgIGRsZmlsZXM9CiAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbwoJ Y2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KCSoiICRsaWIgIiopIDs7CgkqKSBm dW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKCWVzYWMKICAgICAgZG9uZQoKICAgICAg IyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcwogICAg ICBvbGRfZGxwcmVmaWxlcz0kZGxwcmVmaWxlcwogICAgICBkbHByZWZpbGVzPQogICAgICBm b3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KCWNhc2UgIiRkbHByZWZpbGVzICIgaW4K CSoiICRsaWIgIiopIDs7CgkqKSBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiIgOzsK CWVzYWMKICAgICAgZG9uZQoKICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xf bGlicyI7IHRoZW4KCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KCSAgY2FzZSAkaG9zdCBp bgoJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotd2luZG93cyogfCAqLSotcHcz MiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKCSAg ICAjIHRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIGMgbGlicmFyeSAoYXMg c3VjaCkhCgkgICAgOzsKCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQoJ ICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCgkg ICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKCSAgICA7OwoJ ICAqLSotbmV0YnNkKikKCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBh Lm91dCBsZC5zbyBpcyBmaXhlZC4KCSAgICA7OwoJICAqLSotb3BlbmJzZCogfCAqLSotZnJl ZWJzZCogfCAqLSotZHJhZ29uZmx5KiB8ICotKi1taWRuaWdodGJzZCopCgkgICAgIyBEbyBu b3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCgkgICAgOzsK CSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQoJICAgICMgQ2F1c2VzIHByb2JsZW1z IHdpdGggX19jdHlwZQoJICAgIDs7CgkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSog fCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKCSAgICAjIENvbXBpbGVyIGluc2Vy dHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCgkgICAg OzsKCSAgKikKCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3Rl bXMgaWYgbmVjZXNzYXJ5LgoJICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX25l ZWRfbGMiOyB0aGVuCgkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgoJICAgIGZp CgkgICAgOzsKCSAgZXNhYwoJZmkKCgkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBk ZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCgluYW1lX3NhdmU9JG5hbWUK CWxpYm5hbWVfc2F2ZT0kbGlibmFtZQoJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCgl2ZXJzdWZm aXhfc2F2ZT0kdmVyc3VmZml4CgltYWpvcl9zYXZlPSRtYWpvcgoJIyBJJ20gbm90IHN1cmUg aWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKCSMgcmVs ZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qg d2FudCB0bwoJIyBhZGQgaXQgaW4gdHdpY2UuICBJcyB0aGF0IGNvcnJlY3Q/CglyZWxlYXNl PQoJdmVyc3VmZml4PQoJbWFqb3I9CgluZXdkZXBsaWJzPQoJZHJvcHBlZGRlcHM9bm8KCWNh c2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCglwYXNzX2FsbCkKCSAgIyBEb24ndCBjaGVj ayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhpbmcgd29ya3MuCgkgICMgVGhpcyBtaWdo dCBiZSBhIGxpdHRsZSBuYWl2ZS4gIFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sKCSAgIyB3aGV0 aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgoJICAjIG9z ZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBzdXJlLi4uIEp1c3QKCSAgIyBpbXBsZW1l bnRpbmcgd2hhdCB3YXMgYWxyZWFkeSB0aGUgYmVoYXZpb3IuCgkgIG5ld2RlcGxpYnM9JGRl cGxpYnMKCSAgOzsKCWZpbGVfbWFnaWMqKQoJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tf bWV0aG9kOyBzaGlmdAoJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVj a19tZXRob2QiIDogIiQxIFwoLipcKSJgCgkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsg ZG8KCSAgICBjYXNlICRhX2RlcGxpYiBpbgoJICAgIC1sKikKCSAgICAgIGZ1bmNfc3RyaXBu YW1lIC1sICcnICIkYV9kZXBsaWIiCgkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1 bHQKCSAgICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0 aWNfcnVudGltZXMiOyB0aGVuCgkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCgkJ KiIgJGFfZGVwbGliICIqKQoJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxp YiIKCQkgIGFfZGVwbGliPQoJCSAgOzsKCQllc2FjCgkgICAgICBmaQoJICAgICAgaWYgdGVz dCAtbiAiJGFfZGVwbGliIjsgdGhlbgoJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGli bmFtZV9zcGVjXCIiYAoJCWlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX2dsb2IiOyB0aGVuCgkJ ICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAiJGxpYm5hbWUiIHwgJFNFRCAtZSAkZmls ZV9tYWdpY19nbG9iYAoJCWVsc2UKCQkgIGxpYm5hbWVnbG9iPSRsaWJuYW1lCgkJZmkKCQl0 ZXN0IHllcyA9ICIkd2FudF9ub2Nhc2VnbG9iIiAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBu b2Nhc2VnbG9iYAoJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNo X3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbwoJCSAgaWYgdGVzdCB5ZXMgPSAiJHdhbnRf bm9jYXNlZ2xvYiI7IHRoZW4KCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgoJCSAgICBwb3Rl bnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCgkJICAg ICRub2Nhc2VnbG9iCgkJICBlbHNlCgkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGli bmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKCQkgIGZpCgkJICBmb3IgcG90ZW50X2xpYiBp biAkcG90ZW50aWFsX2xpYnM7IGRvCgkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KCQkg ICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgfAoJCQkgJEdSRVAg IiAtPiAiID4vZGV2L251bGw7IHRoZW4KCQkJY29udGludWUKCQkgICAgICBmaQoJCSAgICAg ICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgoJCSAg ICAgICMgZW5kbGVzcyBsb29wIGJlbG93LCBpbiBjYXNlIG9mIGN5Y2xpYyBsaW5rcy4KCQkg ICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBs aW5rCgkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtz LAoJCSAgICAgICMgYnV0IHNvIHdoYXQ/CgkJICAgICAgcG90bGliPSRwb3RlbnRfbGliCgkJ ICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCgkJCXBvdGxp Ymxpbms9YGxzIC1sZCAkcG90bGliIHwgJFNFRCAncy8uKiAtPiAvLydgCgkJCWNhc2UgJHBv dGxpYmxpbmsgaW4KCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9JHBvdGxp Ymxpbms7OwoJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3N8W14vXSok fHwnYCIkcG90bGlibGluayI7OwoJCQllc2FjCgkJICAgICAgZG9uZQoJCSAgICAgIGlmIGV2 YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CgkJCSAkU0VE IC1lIDEwcSB8CgkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsg dGhlbgoJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgoJCQlhX2RlcGxp Yj0KCQkJYnJlYWsgMgoJCSAgICAgIGZpCgkJICBkb25lCgkJZG9uZQoJICAgICAgZmkKCSAg ICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KCQlkcm9wcGVkZGVwcz15ZXMKCQlm dW5jX3dhcm5pbmcgIkxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBs aWJyYXJ5ICRhX2RlcGxpYi4iCgkJZnVuY193YXJuaW5nICJJIGhhdmUgdGhlIGNhcGFiaWxp dHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCgkJ ZnVuY193YXJuaW5nICJ5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25s eSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCgkJZnVuY193YXJuaW5nICJzaGFyZWQgdmVyc2lv biBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKCQlm dW5jX3dhcm5pbmcgImJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tp bmcgZm9yIGEgZmlsZSBzdGFydGluZyIKCQlpZiB0ZXN0IC16ICIkcG90bGliIjsgdGhlbgoJ CSAgZnVuY193YXJuaW5nICJ3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUg Zm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKCQllbHNlCgkJICBmdW5jX3dhcm5p bmcgIndpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEg ZmlsZSBmb3JtYXQgdGVzdCIKCQkgIGZ1bmNfd2FybmluZyAidXNpbmcgYSBmaWxlIG1hZ2lj LiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKCQlmaQoJICAgICAgZmkKCSAgICAgIDs7 CgkgICAgKikKCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCgkgICAgICBmdW5jX2FwcGVu ZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgoJICAgICAgOzsKCSAgICBlc2FjCgkgIGRvbmUg IyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCgkgIDs7CgltYXRjaF9wYXR0ZXJuKikKCSAg c2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKCSAgbWF0Y2hfcGF0dGVy bl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAoJ ICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCgkgICAgY2FzZSAkYV9kZXBsaWIgaW4K CSAgICAtbCopCgkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgoJICAg ICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CgkgICAgICBpZiB0ZXN0IHllcyA9ICIk YWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgoJCWNhc2Ug IiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgoJCSoiICRhX2RlcGxpYiAiKikKCQkgIGZ1bmNf YXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCgkJICBhX2RlcGxpYj0KCQkgIDs7CgkJ ZXNhYwoJICAgICAgZmkKCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KCQls aWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKCQlmb3IgaSBpbiAk bGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0 aDsgZG8KCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9u dWxsYAoJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbwoJCSAgICBw b3RsaWI9JHBvdGVudF9saWIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21h Z2ljIHRlc3QKCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiJHBvdGVudF9saWJcIiIgMj4vZGV2 L251bGwgfCAkU0VEIDEwcSB8IFwKCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9y ZWdleCIgPiAvZGV2L251bGw7IHRoZW4KCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJz ICIgJGFfZGVwbGliIgoJCSAgICAgIGFfZGVwbGliPQoJCSAgICAgIGJyZWFrIDIKCQkgICAg ZmkKCQkgIGRvbmUKCQlkb25lCgkgICAgICBmaQoJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVw bGliIjsgdGhlbgoJCWRyb3BwZWRkZXBzPXllcwoJCWZ1bmNfd2FybmluZyAiTGlua2VyIHBh dGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKCQlm dW5jX3dhcm5pbmcgIkkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFy eSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKCQlmdW5jX3dhcm5pbmcgInlvdSBsaW5r IHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUg YSIKCQlmdW5jX3dhcm5pbmcgInNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGlj aCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgoJCWZ1bmNfd2FybmluZyAiYmVjYXVzZSBJ IGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5n IgoJCWlmIHRlc3QgLXogIiRwb3RsaWIiOyB0aGVuCgkJICBmdW5jX3dhcm5pbmcgIndpdGgg JGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBw YXR0ZXJuIHRlc3QpIgoJCWVsc2UKCQkgIGZ1bmNfd2FybmluZyAid2l0aCAkbGlibmFtZSBh bmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgoJ CSAgZnVuY193YXJuaW5nICJ1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVj a2VkOiAkcG90bGliIgoJCWZpCgkgICAgICBmaQoJICAgICAgOzsKCSAgICAqKQoJICAgICAg IyBBZGQgYSAtTCBhcmd1bWVudC4KCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAk YV9kZXBsaWIiCgkgICAgICA7OwoJICAgIGVzYWMKCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBh bGwgZGVwbGlicy4KCSAgOzsKCW5vbmUgfCB1bmtub3duIHwgKikKCSAgbmV3ZGVwbGlicz0K CSAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncy8gLWxjJC8vOyBz LyAtW0xSXVteIF0qLy9nJ2AKCSAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGli c193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAk cG9zdGRlcHM7IGRvCgkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRp IG1pZ2h0IGNvbnRhaW4gJy8nCgkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2Rl cGxpYnMiIHwgJFNFRCAic3wkaXx8ImAKCSAgICBkb25lCgkgIGZpCgkgIGNhc2UgJHRtcF9k ZXBsaWJzIGluCgkgICpbIVwJXCBdKikKCSAgICBlY2hvCgkgICAgaWYgdGVzdCBub25lID0g IiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KCSAgICAgIGZ1bmNfd2FybmluZyAiSW50 ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0 Zm9ybS4iCgkgICAgZWxzZQoJICAgICAgZnVuY193YXJuaW5nICJJbnRlci1saWJyYXJ5IGRl cGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZC4iCgkgICAgZmkKCSAg ICBmdW5jX3dhcm5pbmcgIkFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2ll cyBhcmUgYmVpbmcgZHJvcHBlZC4iCgkgICAgZHJvcHBlZGRlcHM9eWVzCgkgICAgOzsKCSAg ZXNhYwoJICA7OwoJZXNhYwoJdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQoJbWFqb3I9JG1h am9yX3NhdmUKCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQoJbGlibmFtZT0kbGlibmFtZV9zYXZl CgluYW1lPSRuYW1lX3NhdmUKCgljYXNlICRob3N0IGluCgkqLSotcmhhcHNvZHkqIHwgKi0q LWRhcndpbjEuWzAxMl0pCgkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5 IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3 ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCgkgIDs7 Cgllc2FjCgoJaWYgdGVzdCB5ZXMgPSAiJGRyb3BwZWRkZXBzIjsgdGhlbgoJICBpZiB0ZXN0 IHllcyA9ICIkbW9kdWxlIjsgdGhlbgoJICAgIGZ1bmNfd2FybmluZyAibGlidG9vbCBjb3Vs ZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKCSAgICBmdW5jX3dh cm5pbmcgImRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxp YnRvb2wgd2lsbCBjcmVhdGUiCgkgICAgZnVuY193YXJuaW5nICJhIHN0YXRpYyBtb2R1bGUs IHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgoJICAgIGZ1bmNf d2FybmluZyAiYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4i CgkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KCSAgICAgIGZ1 bmNfd2FybmluZyAiSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3 YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKCSAgICAgIGZ1bmNfd2FybmluZyAibGlzdHMg ZnJvbSBhIHByb2dyYW0sIHVzaW5nICdubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wg Y291bGQiCgkgICAgICBmdW5jX3dhcm5pbmcgIm5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAg U28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgoJICAgICAgZnVuY193YXJu aW5nICInbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVs cC4iCgkgICAgZmkKCSAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4K CSAgICAgIG9sZGxpYnM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dAoJICAgICAg YnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQoJICAgICAgYnVpbGRfb2xkX2xpYnM9eWVzCgkg ICAgZWxzZQoJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCgkgICAgZmkKCSAgZWxzZQoJ ICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZl IGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCgkgICAgZWNobyAiKioqIGF1dG9tYXRpY2Fs bHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFy eSIKCSAgICBlY2hvICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCgoJICAg IGlmIHRlc3Qgbm8gPSAiJGFsbG93X3VuZGVmaW5lZCI7IHRoZW4KCSAgICAgIGVjaG8KCSAg ICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRl ZmluZWQgc3ltYm9scywiCgkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBs YXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKCSAgICAgIGVjaG8gIioqKiBpdCB3 YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKCSAgICAgIGVj aG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBp dC4iCgkgICAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KCQlvbGRs aWJzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQKCQlidWlsZF9saWJ0b29sX2xp YnM9bW9kdWxlCgkJYnVpbGRfb2xkX2xpYnM9eWVzCgkgICAgICBlbHNlCgkJYnVpbGRfbGli dG9vbF9saWJzPW5vCgkgICAgICBmaQoJICAgIGZpCgkgIGZpCglmaQoJIyBEb25lIGNoZWNr aW5nIGRlcGxpYnMhCglkZXBsaWJzPSRuZXdkZXBsaWJzCiAgICAgIGZpCiAgICAgICMgVGlt ZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICIt ZnJhbWV3b3JrIGZvbyIKICAgICAgY2FzZSAkaG9zdCBpbgoJKi0qLWRhcndpbiopCgkgIG5l d2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5s dGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKCSAgbmV3X2luaGVyaXRlZF9saW5rZXJf ZmxhZ3M9YCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3Ml IFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCgkgIGRlcGxpYnM9 YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUg LWZyYW1ld29yayBcMSVnJ2AKCSAgOzsKICAgICAgZXNhYwoKICAgICAgIyBtb3ZlIGxpYnJh cnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CiAg ICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJy YXJ5IHNlYXJjaCBsaXN0CiAgICAgIG5ld19saWJzPQogICAgICBmb3IgcGF0aCBpbiAkbm90 aW5zdF9wYXRoOyBkbwoJY2FzZSAiICRuZXdfbGlicyAiIGluCgkqIiAtTCRwYXRoLyRvYmpk aXIgIiopIDs7CgkqKQoJICBjYXNlICIgJGRlcGxpYnMgIiBpbgoJICAqIiAtTCRwYXRoLyRv YmpkaXIgIiopCgkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIi IDs7CgkgIGVzYWMKCSAgOzsKCWVzYWMKICAgICAgZG9uZQogICAgICBmb3IgZGVwbGliIGlu ICRkZXBsaWJzOyBkbwoJY2FzZSAkZGVwbGliIGluCgktTCopCgkgIGNhc2UgIiAkbmV3X2xp YnMgIiBpbgoJICAqIiAkZGVwbGliICIqKSA7OwoJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGli cyAiICRkZXBsaWIiIDs7CgkgIGVzYWMKCSAgOzsKCSopIGZ1bmNfYXBwZW5kIG5ld19saWJz ICIgJGRlcGxpYiIgOzsKCWVzYWMKICAgICAgZG9uZQogICAgICBkZXBsaWJzPSRuZXdfbGli cwoKICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxs X2xpYmRpciBpcyBzZXQgYWJvdmUpLgogICAgICBsaWJyYXJ5X25hbWVzPQogICAgICBvbGRf bGlicmFyeT0KICAgICAgZGxuYW1lPQoKICAgICAgIyBUZXN0IGFnYWluLCB3ZSBtYXkgaGF2 ZSBkZWNpZGVkIG5vdCB0byBidWlsZCBpdCBhbnkgbW9yZQogICAgICBpZiB0ZXN0IHllcyA9 ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgoJIyBSZW1vdmUgJHdsIGluc3RhbmNlcyB3 aGVuIGxpbmtpbmcgd2l0aCBsZC4KCSMgRklYTUU6IHNob3VsZCB0ZXN0IHRoZSByaWdodCBf Y21kcyB2YXJpYWJsZS4KCWNhc2UgJGFyY2hpdmVfY21kcyBpbgoJICAqXCRMRFwgKikgd2w9 IDs7CiAgICAgICAgZXNhYwoJaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2ludG9fbGlicyI7 IHRoZW4KCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocwoJICBoYXJkY29kZV9saWJk aXJzPQoJICBkZXBfcnBhdGg9CgkgIHJwYXRoPSRmaW5hbGl6ZV9ycGF0aAoJICB0ZXN0IHJl bGluayA9ICIkb3B0X21vZGUiIHx8IHJwYXRoPSRjb21waWxlX3JwYXRoJHJwYXRoCgkgIGZv ciBsaWJkaXIgaW4gJHJwYXRoOyBkbwoJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJk aXJfZmxhZ19zcGVjIjsgdGhlbgoJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRp cl9zZXBhcmF0b3IiOyB0aGVuCgkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCgkJ bGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKCQlpZiB0ZXN0IC16ICIkaGFy ZGNvZGVfbGliZGlycyI7IHRoZW4KCQkgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgoJCWVs c2UKCQkgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KCQkgIGNhc2Ug JGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9s aWJkaXJfc2VwYXJhdG9yIGluCgkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxp YmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCgkJICAgIDs7CgkJICAqKQoJCSAg ICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFy YXRvciRsaWJkaXIiCgkJICAgIDs7CgkJICBlc2FjCgkJZmkKCSAgICAgIGVsc2UKCQlldmFs IGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCgkJZnVuY19hcHBlbmQgZGVw X3JwYXRoICIgJGZsYWciCgkgICAgICBmaQoJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhf dmFyIjsgdGhlbgoJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgoJICAgICAgKiIgJGxp YmRpciAiKikgOzsKCSAgICAgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGly IiA7OwoJICAgICAgZXNhYwoJICAgIGZpCgkgIGRvbmUKCSAgIyBTdWJzdGl0dXRlIHRoZSBo YXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KCSAgaWYgdGVzdCAtbiAiJGhhcmRj b2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCgkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJk aXJzIjsgdGhlbgoJICAgIGxpYmRpcj0kaGFyZGNvZGVfbGliZGlycwoJICAgIGV2YWwgImRl cF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCgkgIGZpCgkgIGlmIHRl c3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCgkg ICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KCSAgICBycGF0aD0KCSAgICBm b3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbwoJICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiRk aXI6IgoJICAgIGRvbmUKCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBh dGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKCSAgZmkKCSAgdGVzdCAtbiAiJGRlcF9y cGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKCWZpCgoJc2hsaWJwYXRo PSRmaW5hbGl6ZV9zaGxpYnBhdGgKCXRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSIgfHwgc2hs aWJwYXRoPSRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgKCWlmIHRlc3QgLW4gIiRzaGxp YnBhdGgiOyB0aGVuCgkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hs aWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKCWZpCgoJIyBHZXQgdGhlIHJl YWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJhcnkuCglldmFsIHNoYXJlZF9leHQ9XCIk c2hyZXh0X2NtZHNcIgoJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3Bl Y1wiCglzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKCXNoaWZ0CglyZWFsbmFtZT0kMQoJc2hp ZnQKCglpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCgkgIGV2YWwgc29uYW1lPVwi JHNvbmFtZV9zcGVjXCIKCWVsc2UKCSAgc29uYW1lPSRyZWFsbmFtZQoJZmkKCWlmIHRlc3Qg LXogIiRkbG5hbWUiOyB0aGVuCgkgIGRsbmFtZT0kc29uYW1lCglmaQoKCWxpYj0kb3V0cHV0 X29iamRpci8kcmVhbG5hbWUKCWxpbmtuYW1lcz0KCWZvciBsaW5rCglkbwoJICBmdW5jX2Fw cGVuZCBsaW5rbmFtZXMgIiAkbGluayIKCWRvbmUKCgkjIFVzZSBzdGFuZGFyZCBvYmplY3Rz IGlmIHRoZXkgYXJlIHBpYwoJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNI TyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAoJdGVzdCAi WCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KCglkZWxmaWxlcz0KCWlmIHRlc3QgLW4g IiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4K CSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRp ci8kbGlibmFtZS51ZXhwIgoJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGli bmFtZS51ZXhwCgkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzIgoJ ZmkKCglvcmlnX2V4cG9ydF9zeW1ib2xzPQoJY2FzZSAkaG9zdF9vcyBpbgoJY3lnd2luKiB8 IG1pbmd3KiB8IHdpbmRvd3MqIHwgY2VnY2MqKQoJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5 bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KCSAgICAj IGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKCSAgICBmdW5jX2RsbF9k ZWZfcCAiJGV4cG9ydF9zeW1ib2xzIiB8fCB7CgkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJl YWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKCSAgICAgICMgd2hpY2ggb2YgdGhl IGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCgkgICAgICAjIHRoZW0g YXMgc3VjaC4gU28sIHRyaWdnZXIgdXNlIG9mIGV4cG9ydF9zeW1ib2xzX2NtZHMuCgkgICAg ICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJl CgkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwg c28gdGhlCgkgICAgICAjIGluY2x1ZGVfZXhwc3ltcyBsb2dpYyBzdGlsbCB3b3Jrcy4KCSAg ICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCgkgICAgICBleHBvcnRf c3ltYm9scz0KCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKCSAgICB9CgkgIGZp CgkgIDs7Cgllc2FjCgoJIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMK CWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KCSAgaWYgdGVzdCB5ZXMgPSAi JGFsd2F5c19leHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3Jl Z2V4IjsgdGhlbgoJICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBm b3IgJyRsaWJuYW1lLmxhJyIKCSAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8k bGlibmFtZS5leHAKCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scwoJ ICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKCSAgICBzYXZlX2lmcz0kSUZTOyBJRlM9 J34nCgkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRvCgkgICAgICBJRlM9JHNhdmVfaWZzCgkg ICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVj IGJyYW5jaAoJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlz IG5vdCBuZWVkZWQuCgkgICAgICBjYXNlICRubV9maWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9m aWxlX2NtZCBpbgoJCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0 X2ZpbGVfbXN5c190b193MzIgfCB+KikKCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcwoJCSAg ZXZhbCBjbWQ9XCIkY21kMVwiCgkJICBmdW5jX2xlbiAiICRjbWQiCgkJICBsZW49JGZ1bmNf bGVuX3Jlc3VsdAoJCSAgOzsKCQkqKQoJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KCQkgIDs7 CgkgICAgICBlc2FjCgkgICAgICBpZiB0ZXN0IHllcyA9ICIkdHJ5X25vcm1hbF9icmFuY2gi IFwKCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgXAoJCSAgICAgIHx8 IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CgkgICAgICB0aGVuCgkJZnVuY19zaG93 X2V2YWwgIiRjbWQiICdleGl0ICQ/JwoJCXNraXBwZWRfZXhwb3J0PWZhbHNlCgkgICAgICBl bGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KCQlmdW5jX2Jhc2VuYW1l ICIkb3V0cHV0IgoJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKCQlzYXZlX2xp Ym9ianM9JGxpYm9ianMKCQlzYXZlX291dHB1dD0kb3V0cHV0CgkJb3V0cHV0PSRvdXRwdXRf b2JqZGlyLyRvdXRwdXRfbGEubm0KCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKCQls aWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKCQlm dW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCgkJZnVuY192ZXJib3NlICJjcmVhdGlu ZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgoJCWZvciBvYmogaW4gJHNhdmVfbGli b2JqczsgZG8KCQkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgoJCSAgJEVDSE8gIiRmdW5j X3RvX3Rvb2xfZmlsZV9yZXN1bHQiCgkJZG9uZSA+ICIkb3V0cHV0IgoJCWV2YWwgY21kPVwi JGNtZDFcIgoJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKCQlvdXRwdXQ9JHNh dmVfb3V0cHV0CgkJbGlib2Jqcz0kc2F2ZV9saWJvYmpzCgkJc2tpcHBlZF9leHBvcnQ9ZmFs c2UKCSAgICAgIGVsc2UKCQkjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhl Y3V0ZSBpbiBvbmUgc3RlcC4KCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2Jq ZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgoJCXNraXBwZWRfZXhwb3J0PToKCQkjIEJy ZWFrIG91dCBlYXJseSwgb3RoZXJ3aXNlIHNraXBwZWRfZXhwb3J0IG1heSBiZQoJCSMgc2V0 IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgoJCWJyZWFrCgkgICAgICBm aQoJICAgIGRvbmUKCSAgICBJRlM9JHNhdmVfaWZzCgkgICAgaWYgdGVzdCAtbiAiJGV4cG9y dF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCI7IHRoZW4K CSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdl eCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKCSAgICAgIGZ1 bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9s cyInCgkgICAgZmkKCSAgZmkKCWZpCgoJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAm JiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgoJICB0bXBfZXhwb3J0X3N5bWJv bHM9JGV4cG9ydF9zeW1ib2xzCgkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAm JiB0bXBfZXhwb3J0X3N5bWJvbHM9JG9yaWdfZXhwb3J0X3N5bWJvbHMKCSAgJG9wdF9kcnlf cnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRt cF9leHBvcnRfc3ltYm9scyInCglmaQoKCWlmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0 IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KCSAgIyBUaGUgZ2l2 ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIg aXQuCgkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUu bGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCgkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRs aWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCgkgICMgJ3MnIGNv bW1hbmRzLCB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQg YmUgZmluZQoJICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5l YXJseSB3aXRoIHRoZSBudW1iZXIgb2YKCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEp IHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKCSAgIyBpc24ndCBhIGJs ZXNzZWQgdG9vbC4KCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtz LFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4g JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCgkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVz ICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKCSAg ZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCgkgICRvcHRfZHJ5 X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmln X2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCglmaQoKCXRtcF9kZXBsaWJzPQoJ Zm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbwoJICBjYXNlICIgJGNvbnZlbmllbmNl ICIgaW4KCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OwoJICAqKQoJICAgIGZ1bmNfYXBwZW5k IHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgoJICAgIDs7CgkgIGVzYWMKCWRvbmUKCWRl cGxpYnM9JHRtcF9kZXBsaWJzCgoJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgoJ ICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCgkgICAgdGVzdCB5 ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgJiYKCSAgICB0ZXN0IC16ICIkbGlib2Jq cyI7IHRoZW4KCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVj dHMgdG8gbGlzdC4KCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBl eHRyYWN0IG9uZSBhcmNoaXZlLgoJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQoJICBm aQoJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCgkgICAg c2F2ZV9saWJvYmpzPSRsaWJvYmpzCgkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3 aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCgkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIg JiYgbGlib2Jqcz0KCSAgZWxzZQoJICAgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1 dG5hbWV9eAoJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCgoJICAgIGZ1 bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQoJICAgIGZ1bmNfYXBw ZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKCSAgICB0ZXN0 ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQoJICBmaQoJZmkKCglpZiB0ZXN0IHll cyA9ICIkdGhyZWFkX3NhZmUiICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMi OyB0aGVuCgkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgoJICBmdW5j X2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKCWZpCgoJIyBNYWtlIGEgYmFja3VwIG9m IHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCglpZiB0ZXN0IHJlbGlu ayA9ICIkb3B0X21vZGUiOyB0aGVuCgkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91 dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVh bG5hbWV9VSknIHx8IGV4aXQgJD8KCWZpCgoJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNv bW1hbmRzLgoJaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgJiYgdGVzdCAtbiAiJG1vZHVsZV9j bWRzIjsgdGhlbgoJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4g IiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCgkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9k dWxlX2V4cHN5bV9jbWRzXCIKCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKCSAgZWxz ZQoJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKCSAgICBjbWRzPSRtb2R1 bGVfY21kcwoJICBmaQoJZWxzZQoJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYm IHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgoJICAgIGV2YWwgdGVzdF9j bWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgoJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3lt X2NtZHMKCSAgZWxzZQoJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCgkg ICAgY21kcz0kYXJjaGl2ZV9jbWRzCgkgIGZpCglmaQoKCWlmIHRlc3QgOiAhPSAiJHNraXBw ZWRfZXhwb3J0IiAmJgoJICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIiAmJgoJICAgbGVuPSRm dW5jX2xlbl9yZXN1bHQgJiYKCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8 fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgoJICA6CgllbHNlCgkgICMgVGhl IGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBp ZWNld2lzZQoJICAjIG9yLCBpZiB1c2luZyBHTlUgbGQgYW5kIHNraXBwZWRfZXhwb3J0IGlz IG5vdCA6LCB1c2UgYSBsaW5rZXIKCSAgIyBzY3JpcHQuCgoJICAjIFNhdmUgdGhlIHZhbHVl IG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1c2Ugd2Ugd2FudCB0bwoJICAjIHVzZSB0 aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKCSAg IyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQoJICAjIHdob2xl X2FyY2hpdmVfZmxhZ19zcGVjIHdhcyBleHBhbmRlZCwgYmVjYXVzZSB3ZSBjYW4ndAoJICAj IGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRzIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVj LgoJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55 CgkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIGdldCBsaW5rZWQgaW4gYW5kIGVuZCB1cCBl eGNlZWRpbmcKCSAgIyB0aGUgc3BlYy4KCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8 fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCgkgICAgc2F2ZV9s aWJvYmpzPSRsaWJvYmpzCgkgIGZpCgkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKCSAgZnVuY19i YXNlbmFtZSAiJG91dHB1dCIKCSAgb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoK CSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmplY3QgY3JlYXRpb24gY29tbWFuZCBxdWV1 ZSBhbmQKCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgoJICB0ZXN0X2NtZHM9CgkgIGNvbmNh dF9jbWRzPQoJICBvYmpsaXN0PQoJICBsYXN0X3JvYmo9CgkgIGs9MQoKCSAgaWYgdGVzdCAt biAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRl c3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpk aXIvJG91dHB1dF9sYS5sbmtzY3JpcHQKCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdO VSBsZCBzY3JpcHQ6ICRvdXRwdXQiCgkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0Cgkg ICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCgkgICAgZG8KCSAgICAgIGZ1bmNfdG9fdG9v bF9maWxlICIkb2JqIgoJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQi ID4+ICRvdXRwdXQKCSAgICBkb25lCgkgICAgZWNobyAnKScgPj4gJG91dHB1dAoJICAgIGZ1 bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAi JG91dHB1dCIKCSAgICBvdXRwdXQ9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAoJICBlbGlm IHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0 IiAmJiB0ZXN0IC1uICIkZmlsZV9saXN0X3NwZWMiOyB0aGVuCgkgICAgb3V0cHV0PSRvdXRw dXRfb2JqZGlyLyRvdXRwdXRfbGEubG5rCgkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBs aW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgoJICAgIDogPiAkb3V0cHV0CgkgICAg c2V0IHggJHNhdmVfbGlib2JqcwoJICAgIHNoaWZ0CgkgICAgZmlyc3RvYmo9CgkgICAgaWYg dGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCI7IHRoZW4KCSAgICAgIGZpcnN0 b2JqPSIkMSAiCgkgICAgICBzaGlmdAoJICAgIGZpCgkgICAgZm9yIG9iagoJICAgIGRvCgkg ICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKCSAgICAgICRFQ0hPICIkZnVuY190b190 b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CgkgICAgZG9uZQoJICAgIGZ1bmNfYXBwZW5k IGRlbGZpbGVzICIgJG91dHB1dCIKCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIK CSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2Zp bGVfcmVzdWx0XCIKCSAgZWxzZQoJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0 aGVuCgkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZp bGVzLi4uIgoJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9i amV4dAoJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgoJICAgICAgZnVu Y19sZW4gIiAkdGVzdF9jbWRzIgoJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CgkgICAg ICBsZW49JGxlbjAKCgkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRv IGJlIGxpbmtlZC4KCSAgICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcwoJICAgICAgZG8K CQlmdW5jX2xlbiAiICRvYmoiCgkJZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3Vs dAoJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKCQlpZiB0ZXN0IC16ICIkb2JqbGlzdCIgfHwK CQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KCQkgIGZ1bmNfYXBw ZW5kIG9iamxpc3QgIiAkb2JqIgoJCWVsc2UKCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21k cyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCgkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVl LgoJCSAgaWYgdGVzdCAxIC1lcSAiJGsiOyB0aGVuCgkJICAgICMgVGhlIGZpcnN0IGZpbGUg ZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCgkJICAgIHJlbG9hZF9v YmpzPSRvYmpsaXN0CgkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgoJ CSAgZWxzZQoJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVz IHdpbGwgbGluayBpbgoJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgoJCSAgICByZWxv YWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKCQkgICAgZXZhbCBjb25jYXRfY21kcz1c IlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCgkJICBmaQoJ CSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAoJCSAg ZnVuY19hcml0aCAkayArIDEKCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CgkJICBvdXRwdXQ9 JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0CgkJICBvYmpsaXN0PSIgJG9i aiIKCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAk ZnVuY19sZW5fcmVzdWx0CgkJICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CgkJZmkKCSAgICAg IGRvbmUKCSAgICAgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGlu ZyBvbmUgbGFzdAoJICAgICAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNl cXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRo ZSBsYXN0IG9uZSBjcmVhdGVkLgoJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBj b25jYXRfY21kcz0kY29uY2F0X2NtZHN+CgkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3Qg JGxhc3Rfcm9iaiIKCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJHJl bG9hZF9jbWRzXCIKCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCgkgICAg ICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwi CgkgICAgICBmaQoJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgoKCSAg ICBlbHNlCgkgICAgICBvdXRwdXQ9CgkgICAgZmkKCgkgICAgJHtza2lwcGVkX2V4cG9ydC1m YWxzZX0gJiYgewoJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0 IGZvciAnJGxpYm5hbWUubGEnIgoJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpk aXIvJGxpYm5hbWUuZXhwCgkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3lt Ym9scwoJICAgICAgbGlib2Jqcz0kb3V0cHV0CgkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFu ZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgoJICAgICAgdGVzdCAteiAiJGNvbmNhdF9j bWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CgkgICAgICBldmFsIGNvbmNhdF9j bWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKCSAgICAgIGlmIHRl c3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCgkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0 X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKCSAgICAgIGZpCgkgICAgfQoKCSAgICB0ZXN0IC1u ICIkc2F2ZV9saWJvYmpzIiAmJgoJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRl bXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgoKCSAgICAjIExvb3Ag dGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0u CgkgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwoJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9j bWRzOyBkbwoJICAgICAgSUZTPSRzYXZlX2lmcwoJICAgICAgJG9wdF9xdWlldCB8fCB7CgkJ ICBmdW5jX3F1b3RlX2FyZyBleHBhbmQscHJldHR5ICIkY21kIgoJCSAgZXZhbCAiZnVuY19l Y2hvICRmdW5jX3F1b3RlX2FyZ19yZXN1bHQiCgkgICAgICB9CgkgICAgICAkb3B0X2RyeV9y dW4gfHwgZXZhbCAiJGNtZCIgfHwgewoJCWx0X2V4aXQ9JD8KCgkJIyBSZXN0b3JlIHRoZSB1 bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CgkJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9t b2RlIjsgdGhlbgoJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKCQkgICAgJFJNICIk e3JlYWxuYW1lfVQiICYmIFwKCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUi ICkKCQlmaQoKCQlleGl0ICRsdF9leGl0CgkgICAgICB9CgkgICAgZG9uZQoJICAgIElGUz0k c2F2ZV9pZnMKCgkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAk e3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgoJICAgICAgZnVuY19zaG93X2V2YWwgJyRF R1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIk e2V4cG9ydF9zeW1ib2xzfVQiJwoJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBv cnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKCSAgICBmaQoJICBmaQoKICAgICAg ICAgICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9ICYmIHsKCSAgICBpZiB0ZXN0IC1uICIkZXhw b3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCgkgICAg ICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCgkgICAgICB0ZXN0IC1uICIk b3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSRvcmlnX2V4cG9y dF9zeW1ib2xzCgkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRl X2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKCSAgICBmaQoK CSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KCSAgICAgICMg VGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28g ZmlsdGVyIGl0LgoJICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9y ICckbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKCSAgICAgICMgRklYTUU6ICRv dXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3Rz IG9mCgkgICAgICAjICdzJyBjb21tYW5kcywgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5k bGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKCSAgICAgICMgdGhvdWdoLiBBbHNvLCB0aGUg ZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgoJICAgICAg IyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVu Zm9ydHVuYXRlbHkKCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCgkgICAgICAkb3B0 X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCks c3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGli bmFtZS5maWx0ZXIKCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1i b2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKCSAgICAgIGV4cG9ydF9zeW1i b2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgoJICAgICAgJG9wdF9kcnlfcnVuIHx8 ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0 X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKCSAgICBmaQoJICB9CgoJICBsaWJvYmpzPSRv dXRwdXQKCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCgkgIG91dHB1dD0kc2F2 ZV9vdXRwdXQKCgkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdo b2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgoJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGli b2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgoJICAgIHRlc3QgIlgkbGlib2JqcyIg PSAiWCAiICYmIGxpYm9ianM9CgkgIGZpCgkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtp bmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCgkgICMgdmFsdWUgb2YgJGxpYm9ianMg Zm9yIHBpZWNld2lzZSBsaW5raW5nLgoKCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNv bW1hbmRzLgoJICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIiAmJiB0ZXN0IC1uICIkbW9kdWxl X2NtZHMiOyB0aGVuCgkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0 IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgoJICAgICAgY21kcz0kbW9kdWxlX2V4 cHN5bV9jbWRzCgkgICAgZWxzZQoJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKCSAgICBmaQoJ ICBlbHNlCgkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIk YXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KCSAgICAgIGNtZHM9JGFyY2hpdmVfZXhwc3lt X2NtZHMKCSAgICBlbHNlCgkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKCSAgICBmaQoJICBm aQoJZmkKCglpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCgkgICMgQXBwZW5kIHRoZSBj b21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCgkgIGV2YWwgY21k cz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCglmaQoKCSMgQWRkIGFueSBvYmplY3RzIGZy b20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcwoJaWYgdGVzdCAtbiAiJGRscHJl ZmlsZXMiOyB0aGVuCgkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAoJ ICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgoKCSAgZnVuY19leHRyYWN0X2Fy Y2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRm dW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgoJICB0ZXN0ICJYJGxpYm9ianMiID0gIlgg IiAmJiBsaWJvYmpzPQoJZmkKCglzYXZlX2lmcz0kSUZTOyBJRlM9J34nCglmb3IgY21kIGlu ICRjbWRzOyBkbwoJICBJRlM9JHNwJG5sCgkgIGV2YWwgY21kPVwiJGNtZFwiCgkgIElGUz0k c2F2ZV9pZnMKCSAgJG9wdF9xdWlldCB8fCB7CgkgICAgZnVuY19xdW90ZV9hcmcgZXhwYW5k LHByZXR0eSAiJGNtZCIKCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfYXJnX3Jl c3VsdCIKCSAgfQoJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgewoJICAgIGx0 X2V4aXQ9JD8KCgkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBl eGl0CgkgICAgaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgoJICAgICAgKCBj ZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYm IFwKCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQoJICAgIGZpCgoJICAgIGV4 aXQgJGx0X2V4aXQKCSAgfQoJZG9uZQoJSUZTPSRzYXZlX2lmcwoKCSMgUmVzdG9yZSB0aGUg dW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAoJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9t b2RlIjsgdGhlbgoJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGly ICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYg JE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CgoJICBpZiB0ZXN0IC1u ICIkY29udmVuaWVuY2UiOyB0aGVuCgkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVf ZmxhZ19zcGVjIjsgdGhlbgoJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRv cCInCgkgICAgZmkKCSAgZmkKCgkgIGV4aXQgJEVYSVRfU1VDQ0VTUwoJZmkKCgkjIENyZWF0 ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgoJZm9yIGxpbmtuYW1lIGluICRsaW5rbmFt ZXM7IGRvCgkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KCSAg ICBmdW5jX3Nob3dfZXZhbCAnKGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkbGlua25h bWUiICYmICRMTl9TICIkcmVhbG5hbWUiICIkbGlua25hbWUiKScgJ2V4aXQgJD8nCgkgIGZp Cglkb25lCgoJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVk LCBzZXQgdGhlIGRsbmFtZS4KCWlmIHRlc3QgeWVzID0gIiRtb2R1bGUiIHx8IHRlc3QgeWVz ID0gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5n IHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCgkgIGRsbmFtZT0kc29uYW1lCglmaQog ICAgICBmaQogICAgICA7OwoKICAgIG9iaikKICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMk ZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KCWZ1bmNfd2Fybmlu ZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAgICAgIGZpCgogICAgICBj YXNlICIgJGRlcGxpYnMiIGluCiAgICAgICpcIC1sKiB8ICpcIC1MKikKCWZ1bmNfd2Fybmlu ZyAiJy1sJyBhbmQgJy1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgOzsKICAgICAgZXNh YwoKICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCglmdW5jX3dhcm5pbmcgIictcnBhdGgn IGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCgogICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBc CglmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKCiAgICAgIHRl c3QgLW4gIiR2aW5mbyIgJiYgXAoJZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mbycgaXMg aWdub3JlZCBmb3Igb2JqZWN0cyIKCiAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCglm dW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKCiAgICAg IGNhc2UgJG91dHB1dCBpbgogICAgICAqLmxvKQoJdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxp YnMiICYmIFwKCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2Jq ZWN0ICckb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCgoJbGlib2JqPSRvdXRw dXQKCWZ1bmNfbG8ybyAiJGxpYm9iaiIKCW9iaj0kZnVuY19sbzJvX3Jlc3VsdAoJOzsKICAg ICAgKikKCWxpYm9iaj0KCW9iaj0kb3V0cHV0Cgk7OwogICAgICBlc2FjCgogICAgICAjIERl bGV0ZSB0aGUgb2xkIG9iamVjdHMuCiAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAk bGlib2JqCgogICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBU aGlzIGFzc3VtZXMKICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJp ZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKICAgICAgIyBkaWZmZXJlbnQgb25lcyBmb3IgUElD L25vbi1QSUMsIHRoaXMgd2UnbGwgaGF2ZSB0byBkdXBsaWNhdGUKICAgICAgIyB0aGUgZXh0 cmFjdGlvbi4KICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KICAgICAgZ2VudG9wPQogICAgICAj IGlmIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBnZXQgcmlkIG9mIC1XbCBmcm9t CiAgICAgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgYW5kIGhvcGUgd2UgY2FuIGdldCBi eSB3aXRoIHR1cm5pbmcgY29tbWEKICAgICAgIyBpbnRvIHNwYWNlLgogICAgICBjYXNlICRy ZWxvYWRfY21kcyBpbgogICAgICAgICpcJExEW1wgXCRdKikgd2w9IDs7CiAgICAgIGVzYWMK ICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgoJaWYgdGVzdCAtbiAiJHdo b2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgoJICBldmFsIHRtcF93aG9sZV9hcmNoaXZl X2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKCSAgdGVzdCAtbiAiJHdsIiB8 fCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1gJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9m bGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29i anNcICR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncwoJZWxzZQoJICBnZW50b3A9JG91dHB1dF9v YmpkaXIvJHtvYmp9eAoJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgoKCSAg ZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCgkgIHJlbG9hZF9j b252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIK CWZpCiAgICAgIGZpCgogICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdl IG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcwogICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGli dG9vbF9saWJzIiB8fCBsaWJvYmpzPSRub25fcGljX29iamVjdHMKCiAgICAgICMgQ3JlYXRl IHRoZSBvbGQtc3R5bGUgb2JqZWN0LgogICAgICByZWxvYWRfb2Jqcz0kb2JqcyRvbGRfZGVw bGlicycgJ2AkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJGxpYmV4dCQv ZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgJyAnJHJlbG9hZF9jb252X29ianMKCiAg ICAgIG91dHB1dD0kb2JqCiAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMi ICdleGl0ICQ/JwoKICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkg b2JqZWN0IGZpbGUuCiAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCglpZiB0ZXN0 IC1uICIkZ2VudG9wIjsgdGhlbgoJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9w IicKCWZpCgoJZXhpdCAkRVhJVF9TVUNDRVNTCiAgICAgIGZpCgogICAgICB0ZXN0IHllcyA9 ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCB7CglpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhl bgoJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKCWZpCgoJIyBDcmVhdGUg YW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QK CSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCgkjICRzaG93ICJlY2hv IHRpbWVzdGFtcCA+ICRsaWJvYmoiCgkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRp bWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KCWV4aXQgJEVYSVRfU1VDQ0VTUwogICAg ICB9CgogICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciIHx8IHRlc3QgZGVmYXVsdCAhPSAi JHBpY19tb2RlIjsgdGhlbgoJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZl IGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2Fk X2NvbnZfb2JqcyIKCW91dHB1dD0kbGlib2JqCglmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9h ZF9jbWRzIiAnZXhpdCAkPycKICAgICAgZmkKCiAgICAgIGlmIHRlc3QgLW4gIiRnZW50b3Ai OyB0aGVuCglmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKICAgICAgZmkKCiAg ICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICA7OwoKICAgIHByb2cpCiAgICAgIGNhc2Ug JGhvc3QgaW4KCSpjeWd3aW4qKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQi CgkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKICAgICAg ZXNhYwogICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKCWZ1bmNfd2FybmluZyAiJy12ZXJz aW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgoKICAgICAgdGVzdCAtbiAiJHJl bGVhc2UiICYmIFwKCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBw cm9ncmFtcyIKCiAgICAgICRwcmVsb2FkIFwKCSYmIHRlc3QgdW5rbm93bix1bmtub3duLHVu a25vd24gPSAiJGRsb3Blbl9zdXBwb3J0LCRkbG9wZW5fc2VsZiwkZGxvcGVuX3NlbGZfc3Rh dGljIiBcCgkmJiBmdW5jX3dhcm5pbmcgIidMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQu IEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKCiAgICAgIGNhc2UgJGhvc3QgaW4KICAg ICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQoJIyBPbiBSaGFwc29keSBy ZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5c3RlbSBmcmFtZXdvcmsKCWNvbXBpbGVf ZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5 c3RlbS5sdGZyYW1ld29yayAvJ2AKCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFs aXplX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAoJ OzsKICAgICAgZXNhYwoKICAgICAgY2FzZSAkaG9zdCBpbgogICAgICAqLSotZGFyd2luKikK CSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25z dHJ1Y3RvcnMKCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAo eWF5ISkuCglpZiB0ZXN0IENYWCA9ICIkdGFnbmFtZSI7IHRoZW4KCSAgY2FzZSAke01BQ09T WF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgoJICAgIDEwLlswMTIzXSkKCSAgICAgIGZ1 bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bC1iaW5kX2F0X2xvYWQiCgkgICAgICBm dW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsLWJpbmRfYXRfbG9hZCIKCSAgICA7 OwoJICBlc2FjCglmaQoJIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdv cmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgoJY29tcGlsZV9kZXBsaWJzPWAk RUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1l d29yayUgLWZyYW1ld29yayBcMSVnJ2AKCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZp bmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZy YW1ld29yayBcMSVnJ2AKCTs7CiAgICAgIGVzYWMKCgogICAgICAjIG1vdmUgbGlicmFyeSBz ZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKICAgICAg IyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkg c2VhcmNoIGxpc3QKICAgICAgbmV3X2xpYnM9CiAgICAgIGZvciBwYXRoIGluICRub3RpbnN0 X3BhdGg7IGRvCgljYXNlICIgJG5ld19saWJzICIgaW4KCSoiIC1MJHBhdGgvJG9iamRpciAi KikgOzsKCSopCgkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KCSAgKiIgLUwkcGF0 aC8kb2JqZGlyICIqKQoJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2Jq ZGlyIiA7OwoJICBlc2FjCgkgIDs7Cgllc2FjCiAgICAgIGRvbmUKICAgICAgZm9yIGRlcGxp YiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbwoJY2FzZSAkZGVwbGliIGluCgktTCopCgkgIGNh c2UgIiAkbmV3X2xpYnMgIiBpbgoJICAqIiAkZGVwbGliICIqKSA7OwoJICAqKSBmdW5jX2Fw cGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CgkgIGVzYWMKCSAgOzsKCSopIGZ1bmNfYXBw ZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKCWVzYWMKICAgICAgZG9uZQogICAgICBjb21w aWxlX2RlcGxpYnM9JG5ld19saWJzCgoKICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21t YW5kICIgJGNvbXBpbGVfZGVwbGlicyIKICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29t bWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgoKICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhy cGF0aCI7IHRoZW4KCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywg dGhlbiBhZGQgdGhlbS4KCWZvciBsaWJkaXIgaW4gJHJwYXRoICR4cnBhdGg7IGRvCgkgICMg VGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KCSAgY2FzZSAiJGZpbmFsaXplX3Jw YXRoICIgaW4KCSAgKiIgJGxpYmRpciAiKikgOzsKCSAgKikgZnVuY19hcHBlbmQgZmluYWxp emVfcnBhdGggIiAkbGliZGlyIiA7OwoJICBlc2FjCglkb25lCiAgICAgIGZpCgogICAgICAj IE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocwogICAgICBycGF0aD0KICAgICAgaGFy ZGNvZGVfbGliZGlycz0KICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmlu YWxpemVfcnBhdGg7IGRvCglpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3Bl YyI7IHRoZW4KCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0 aGVuCgkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCgkgICAgICBo YXJkY29kZV9saWJkaXJzPSRsaWJkaXIKCSAgICBlbHNlCgkgICAgICAjIEp1c3QgYWNjdW11 bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCgkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJf c2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBp bgoJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVf bGliZGlyX3NlcGFyYXRvciIqKQoJCTs7CgkgICAgICAqKQoJCWZ1bmNfYXBwZW5kIGhhcmRj b2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKCQk7OwoJ ICAgICAgZXNhYwoJICAgIGZpCgkgIGVsc2UKCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVf bGliZGlyX2ZsYWdfc3BlY1wiCgkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKCSAg ZmkKCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgoJICBjYXNlICIkcGVybV9y cGF0aCAiIGluCgkgICoiICRsaWJkaXIgIiopIDs7CgkgICopIGZ1bmNfYXBwZW5kIHBlcm1f cnBhdGggIiAkbGliZGlyIiA7OwoJICBlc2FjCglmaQoJY2FzZSAkaG9zdCBpbgoJKi0qLWN5 Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXdpbmRvd3MqIHwgKi0qLXB3MzIqIHwgKi0qLW9z MiogfCAqLWNlZ2NjKikKCSAgdGVzdGJpbmRpcj1gJEVDSE8gIiRsaWJkaXIiIHwgJFNFRCAt ZSAncyovbGliJCovYmluKidgCgkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgoJICAqIjok bGliZGlyOiIqKSA7OwoJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKCSAgKikgZnVu Y19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRsaWJkaXIiOzsKCSAgZXNhYwoJICBjYXNlIDok ZGxsc2VhcmNocGF0aDogaW4KCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CgkgIDo6KSBkbGxz ZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0 aCAiOiR0ZXN0YmluZGlyIjs7CgkgIGVzYWMKCSAgOzsKCWVzYWMKICAgICAgZG9uZQogICAg ICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgog ICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKCSB0ZXN0 IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KCWxpYmRpcj0kaGFyZGNvZGVfbGliZGly cwoJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCiAgICAgIGZp CiAgICAgIGNvbXBpbGVfcnBhdGg9JHJwYXRoCgogICAgICBycGF0aD0KICAgICAgaGFyZGNv ZGVfbGliZGlycz0KICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCglp ZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KCSAgaWYgdGVz dCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCgkgICAgaWYgdGVzdCAt eiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCgkgICAgICBoYXJkY29kZV9saWJkaXJzPSRs aWJkaXIKCSAgICBlbHNlCgkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxp YmRpcnMuCgkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2Rl X2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgoJICAgICAgKiIkaGFyZGNv ZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIq KQoJCTs7CgkgICAgICAqKQoJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJk Y29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKCQk7OwoJICAgICAgZXNhYwoJICAgIGZp CgkgIGVsc2UKCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wi CgkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKCSAgZmkKCWVsaWYgdGVzdCAtbiAi JHJ1bnBhdGhfdmFyIjsgdGhlbgoJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGlu CgkgICoiICRsaWJkaXIgIiopIDs7CgkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1f cnBhdGggIiAkbGliZGlyIiA7OwoJICBlc2FjCglmaQogICAgICBkb25lCiAgICAgICMgU3Vi c3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCiAgICAgIGlm IHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgoJIHRlc3QgLW4gIiRo YXJkY29kZV9saWJkaXJzIjsgdGhlbgoJbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCglldmFs IHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKICAgICAgZmkKICAgICAg ZmluYWxpemVfcnBhdGg9JHJwYXRoCgogICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYg dGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgoJIyBUcmFuc2Zvcm0gYWxsIHRo ZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgoJY29tcGlsZV9jb21t YW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIg fCAkTkwyU1BgCglmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQi IHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAogICAgICBmaQoKICAgICAgZnVu Y19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiBmYWxzZQoKICAg ICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKICAgICAgaWYgdGVzdCAtbiAiJHByZWxp bmtfY21kcyI7IHRoZW4KCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhp dCAkPycKICAgICAgZmkKCiAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPToKICAgICAgY2FzZSAk aG9zdCBpbgogICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCiAgICAgICAgIyBEaXNhYmxl IHdyYXBwZXJzIGZvciBjZWdjYyBhbmQgbWluZ3czMmNlIGhvc3RzLCB3ZSBhcmUgY3Jvc3Mg Y29tcGlsaW5nIGFueXdheS4KICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQogICAg ICAgIDs7CiAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICp3aW5kb3dzKiApCiAgICAgICAg dGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgd3JhcHBlcnNfcmVxdWlyZWQ9 ZmFsc2UKICAgICAgICA7OwogICAgICAqKQogICAgICAgIGlmIHRlc3Qgbm8gPSAiJG5lZWRf cmVsaW5rIiB8fCB0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KICAg ICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCiAgICAgICAgZmkKICAgICAgICA7Owog ICAgICBlc2FjCiAgICAgICR3cmFwcGVyc19yZXF1aXJlZCB8fCB7CgkjIFJlcGxhY2UgdGhl IG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCgljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIk Y29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCgls aW5rX2NvbW1hbmQ9JGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCgoJIyBXZSBoYXZl IG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdo dCBub3cuCglleGl0X3N0YXR1cz0wCglmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIg J2V4aXRfc3RhdHVzPSQ/JwoKCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgoJ ICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKCSAgcG9zdGxpbmtfY21kcz1gZnVuY19l Y2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRw dXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3Vs dCInJWcnYAoJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/ JwoJZmkKCgkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgoJaWYgdGVzdCAtZiAiJG91 dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9iamV4dCI7IHRoZW4KCSAgZnVuY19zaG93 X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9iamV4dCInCglm aQoKCWV4aXQgJGV4aXRfc3RhdHVzCiAgICAgIH0KCiAgICAgIGlmIHRlc3QgLW4gIiRjb21w aWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCgljb21waWxlX2NvbW1h bmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGli cGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgogICAgICBmaQogICAg ICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgoJZmluYWxpemVfY29t bWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRo X3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgogICAgICBmaQoKICAgICAgY29tcGlsZV92YXI9 CiAgICAgIGZpbmFsaXplX3Zhcj0KICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsg dGhlbgoJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCgkgICMgV2Ugc2hvdWxkIHNl dCB0aGUgcnVucGF0aF92YXIuCgkgIHJwYXRoPQoJICBmb3IgZGlyIGluICRwZXJtX3JwYXRo OyBkbwoJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKCSAgZG9uZQoJICBjb21waWxl X3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCglmaQoJaWYg dGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCgkgICMgV2Ugc2hvdWxkIHNl dCB0aGUgcnVucGF0aF92YXIuCgkgIHJwYXRoPQoJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9w ZXJtX3JwYXRoOyBkbwoJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKCSAgZG9uZQoJ ICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIg IgoJZmkKICAgICAgZmkKCiAgICAgIGlmIHRlc3QgeWVzID0gIiRub19pbnN0YWxsIjsgdGhl bgoJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgoJbGlua19j b21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAoJIyBS ZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgoJbGlua19jb21tYW5kPWAk RUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcn YAoJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KCSRvcHRfZHJ5X3J1biB8fCAkUk0g JG91dHB1dAoJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CglmdW5jX3Nob3dfZXZh bCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCgoJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2Nt ZHMiOyB0aGVuCgkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgoJICBwb3N0bGlua19j bWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQ VVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29s X2ZpbGVfcmVzdWx0IiclZydgCgkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21k cyIgJ2V4aXQgJD8nCglmaQoKCWV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICBmaQoKICAgICAg Y2FzZSAkaGFyZGNvZGVfYWN0aW9uLCRmYXN0X2luc3RhbGwgaW4KICAgICAgICByZWxpbmss KikKCSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCgkgIGxpbmtfY29t bWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKCSAgcmVs aW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3Jw YXRoCgoJICBmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmlu c3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgoJICBmdW5jX3dhcm5pbmcgIickb3V0cHV0JyB3 aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCgkgIDs7CiAgICAgICAgKix5 ZXMpCgkgIGxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5h bGl6ZV9ycGF0aAoJICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX3ZhciRjb21w aWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkU0VEICdzJUBPVVRQVVRAJVwkcHJvZ2Rp ci9cJGZpbGUlZydgCiAgICAgICAgICA7OwoJKixubykKCSAgbGlua19jb21tYW5kPSRjb21w aWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAoJICByZWxpbmtfY29tbWFu ZD0kZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKICAgICAg ICAgIDs7CgkqLG5lZWRsZXNzKQoJICBsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRjb21w aWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKCSAgcmVsaW5rX2NvbW1hbmQ9CiAgICAgICAg ICA7OwogICAgICBlc2FjCgogICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNp ZmljYXRpb24uCiAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwg JFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCgog ICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KICAgICAgJG9wdF9kcnlfcnVu IHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2Jq ZGlyL2x0LSRvdXRwdXRuYW1lCgogICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFu ZCIgJ2V4aXQgJD8nCgogICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4K CWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSIKCXBvc3Rs aW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3Ml QE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnIC1lICdzJUBUT09M X09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCglmdW5jX2V4ZWN1 dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JwogICAgICBmaQoKICAgICAgIyBO b3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KICAgICAgZnVuY192ZXJib3NlICJjcmVh dGluZyAkb3V0cHV0IgoKICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNo aXBwaW5nLgogICAgICBpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCgkjIFBy ZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9y Cglmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KCSAgaWYgZXZh bCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KCSAgICByZWxpbmtfY29tbWFuZD0i eyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFy PTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKCSAgZWxpZiBldmFsIHZh cl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCgkgICAgcmVsaW5r X2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgoJICBlbHNl CgkgICAgZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkdmFyX3ZhbHVlIgoJICAgIHJlbGlua19j b21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2FyZ19yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVs aW5rX2NvbW1hbmQiCgkgIGZpCglkb25lCglmdW5jX3F1b3RlIGV2YWwgY2QgImBwd2RgIgoJ ZnVuY19xdW90ZV9hcmcgcHJldHR5LHVucXVvdGVkICIoJGZ1bmNfcXVvdGVfcmVzdWx0OyAk cmVsaW5rX2NvbW1hbmQpIgoJcmVsaW5rX2NvbW1hbmQ9JGZ1bmNfcXVvdGVfYXJnX3VucXVv dGVkX3Jlc3VsdAogICAgICBmaQoKICAgICAgIyBPbmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBp ZiBub3QgaW4gZHJ5IHJ1biBtb2RlLgogICAgICAkb3B0X2RyeV9ydW4gfHwgewoJIyB3aW4z MiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCgkjIGEgLmV4 ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgoJY2FzZSAkb3V0cHV0IGluCgkg ICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCgkgICAgICAgICBv dXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwoJZXNhYwoJIyB0ZXN0IGZvciBjeWd3 aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCgljYXNlICRob3N0IGlu CgkgICpjeWd3aW4qKQoJICAgIGV4ZWV4dD0uZXhlCgkgICAgZnVuY19zdHJpcG5hbWUgJycg Jy5leGUnICIkb3V0cHV0bmFtZSIKCSAgICBvdXRwdXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9y ZXN1bHQgOzsKCSAgKikgZXhlZXh0PSA7OwoJZXNhYwoJY2FzZSAkaG9zdCBpbgoJICAqY3ln d2luKiB8ICptaW5ndyogfCB3aW5kb3dzKiApCgkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNl bmFtZSAiJG91dHB1dCIgIiIgIi4iCgkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVf cmVzdWx0CgkgICAgb3V0cHV0X3BhdGg9JGZ1bmNfZGlybmFtZV9yZXN1bHQKCSAgICBjd3Jh cHBlcnNvdXJjZT0kb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYwoJICAg IGN3cmFwcGVyPSRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlCgkgICAgJFJNICRjd3Jh cHBlcnNvdXJjZSAkY3dyYXBwZXIKCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRj d3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKCgkgICAgZnVuY19lbWl0X2N3 cmFwcGVyZXhlX3NyYyA+ICRjd3JhcHBlcnNvdXJjZQoKCSAgICAjIFRoZSB3cmFwcGVyIGV4 ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRob3N0IGNvbXBpbGVyLAoJICAgICMgYmVj YXVzZSBpdCBjb250YWlucyAkaG9zdCBwYXRocyBhbmQgZmlsZXMuIElmIGNyb3NzLQoJICAg ICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUK CSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBvciB1bmRlciBhbiBlbXVsYXRpb24gZW52 aXJvbm1lbnQuCgkgICAgJG9wdF9kcnlfcnVuIHx8IHsKCSAgICAgICRMVENDICRMVENGTEFH UyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCgkgICAgICAkU1RSSVAgJGN3cmFwcGVy CgkgICAgfQoKCSAgICAjIE5vdywgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdCBmb3IgZnVu Y19zb3VyY2UgdXNlOgoJICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgJGN3cmFwcGVy CgkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAoJICAgIHRyYXAg IiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJ TFVSRSIgMSAyIDE1CgkgICAgJG9wdF9kcnlfcnVuIHx8IHsKCSAgICAgICMgbm90ZTogdGhp cyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KCSAgICAg IGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCI7IHRoZW4KCQkkY3dyYXBwZXIgLS1sdC1k dW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAoJICAgICAg ZWxzZQoJCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5h bWVfcmVzdWx0CgkgICAgICBmaQoJICAgIH0KCSAgOzsKCSAgKiApCgkgICAgJFJNICRvdXRw dXQKCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUK CgkgICAgZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkb3V0cHV0CgkgICAgY2htb2QgK3ggJG91 dHB1dAoJICA7OwoJZXNhYwogICAgICB9CiAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwogICAg ICA7OwogICAgZXNhYwoKICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZh c2hpb25lZCBhcmNoaXZlLgogICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KCiAgICAg IGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbgogICAgICAgIGNvbnZlbmllbmNlKQoJICBv bGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgoJICBhZGRsaWJzPSRjb252ZW5p ZW5jZQoJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KCSAgOzsKCW1vZHVsZSkKCSAgb2xkb2Jq cz0kbGlib2Jqc19zYXZlCgkgIGFkZGxpYnM9JG9sZF9jb252ZW5pZW5jZQoJICBidWlsZF9s aWJ0b29sX2xpYnM9bm8KICAgICAgICAgIDs7CgkqKQoJICBvbGRvYmpzPSIkb2xkX2RlcGxp YnMgJG5vbl9waWNfb2JqZWN0cyIKCSAgJHByZWxvYWQgJiYgdGVzdCAtZiAiJHN5bWZpbGVv YmoiIFwKCSAgICAmJiBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCgkgIGFk ZGxpYnM9JG9sZF9jb252ZW5pZW5jZQoJICA7OwogICAgICBlc2FjCgogICAgICBpZiB0ZXN0 IC1uICIkYWRkbGlicyI7IHRoZW4KCWdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5h bWV9eAoJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKCglmdW5jX2V4dHJhY3Rf YXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicwoJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5j X2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgogICAgICBmaQoKICAgICAgIyBEbyBlYWNoIGNv bW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCiAgICAgIGlmIHRlc3QgLW4gIiRvbGRf YXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9s aWJzIjsgdGhlbgoJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcwogICAgICBlbHNl CgoJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFy aWVzCglpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KCSAgZ2VudG9wPSRvdXRwdXRf b2JqZGlyLyR7b3V0cHV0bmFtZX14CgkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50 b3AiCgoJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcwoJICBm dW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCglm aQoKCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVz LiAgV2UgaGF2ZQoJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0 ZSBiYXNlbmFtZXMgaWYgd2UKCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3 YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCgkjIHN0YXRpYyBhcmNoaXZlIG91dCBvZiBh IGNvbnZlbmllbmNlIGxpYnJhcnksIG9yIHdoZW4gbGlua2luZwoJIyB0aGUgZW50aXJldHkg b2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKCSMgbm90IHN1 cHBvcnRlZCBieSBsaWJ0b29sKS4KCWlmIChmb3Igb2JqIGluICRvbGRvYmpzCgkgICAgZG8K CSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCgkgICAgICAkRUNITyAiJGZ1bmNfYmFzZW5h bWVfcmVzdWx0IgoJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYx KTsgdGhlbgoJICA6CgllbHNlCgkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZp bGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKCSAgZ2VudG9wPSRvdXRwdXRf b2JqZGlyLyR7b3V0cHV0bmFtZX14CgkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50 b3AiCgkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpz CgkgIG9sZG9ianM9CgkgIGNvdW50ZXI9MQoJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMK CSAgZG8KCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgoJICAgIG9iamJhc2U9JGZ1bmNfYmFz ZW5hbWVfcmVzdWx0CgkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KCSAgICAiICIpIG9sZG9i anM9JG9iaiA7OwoJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKCSAgICAgIHdoaWxlIDo7IGRv CgkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFs c28KCQkjIG92ZXJsYXBzLgoJCW5ld29iaj1sdCRjb3VudGVyLSRvYmpiYXNlCgkJZnVuY19h cml0aCAkY291bnRlciArIDEKCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAoJCWNhc2Ug IiAkb2xkb2JqcyAiIGluCgkJKltcIC9dIiRuZXdvYmogIiopIDs7CgkJKikgaWYgdGVzdCAh IC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OwoJCWVzYWMKCSAgICAg IGRvbmUKCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8 fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMg IiAkZ2VudG9wLyRuZXdvYmoiCgkgICAgICA7OwoJICAgICopIGZ1bmNfYXBwZW5kIG9sZG9i anMgIiAkb2JqIiA7OwoJICAgIGVzYWMKCSAgZG9uZQoJZmkKCWZ1bmNfdG9fdG9vbF9maWxl ICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgoJdG9vbF9vbGRsaWI9 JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAoJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2Nt ZHNcIgoKCWZ1bmNfbGVuICIgJGNtZHMiCglsZW49JGZ1bmNfbGVuX3Jlc3VsdAoJaWYgdGVz dCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxl IC0xOyB0aGVuCgkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKCWVsaWYgdGVzdCAtbiAiJGFy Y2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5k IGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgoJICBmb3Igb2JqIGluICRvbGRvYmpzCgkgIGRv CgkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCgkgICAgJEVDSE8gIiRmdW5jX3RvX3Rv b2xfZmlsZV9yZXN1bHQiCgkgIGRvbmUgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJj bWQKCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNt ZCIKCSAgb2xkb2Jqcz0iICRhcmNoaXZlcl9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVf cmVzdWx0IgoJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCgllbHNlCgkgICMgdGhlIGNvbW1h bmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRz CgkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIK CSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgoJICBSQU5MSUI9OgoJICBvYmpsaXN0PQoJICBjb25j YXRfY21kcz0KCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCgkgIG9sZG9ianM9CgkgICMgSXMg dGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBs aXN0PwoJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKCSAgZG8KCSAgICBsYXN0X29sZG9i aj0kb2JqCgkgIGRvbmUKCSAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wi CgkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0Cgkg IGxlbj0kbGVuMAoJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKCSAgZG8KCSAgICBmdW5j X2xlbiAiICRvYmoiCgkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAoJ ICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKCSAgICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIg JG9iaiIKCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KCSAg ICAgIDoKCSAgICBlbHNlCgkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1 c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCgkgICAgICBvbGRvYmpzPSRvYmpsaXN0Cgkg ICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiOyB0aGVuCgkJUkFOTElCPSRz YXZlX1JBTkxJQgoJICAgICAgZmkKCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwg Y29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgoJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwk Y29uY2F0X2NtZHMkb2xkX2FyY2hpdmVfY21kc1wiCgkgICAgICBvYmpsaXN0PQoJICAgICAg bGVuPSRsZW4wCgkgICAgZmkKCSAgZG9uZQoJICBSQU5MSUI9JHNhdmVfUkFOTElCCgkgIG9s ZG9ianM9JG9iamxpc3QKCSAgaWYgdGVzdCAteiAiJG9sZG9ianMiOyB0aGVuCgkgICAgZXZh bCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCgkgIGVsc2UKCSAgICBldmFsIGNtZHM9XCJcJGNv bmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCgkgIGZpCglmaQogICAgICBmaQogICAg ICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdleGl0ICQ/JwogICAgZG9uZQoKICAgIHRl c3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKICAgICAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciRn ZW5lcmF0ZWQiCgogICAgIyBOb3cgY3JlYXRlIHRoZSBsaWJ0b29sIGFyY2hpdmUuCiAgICBj YXNlICRvdXRwdXQgaW4KICAgICoubGEpCiAgICAgIG9sZF9saWJyYXJ5PQogICAgICB0ZXN0 IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiICYmIG9sZF9saWJyYXJ5PSRsaWJuYW1lLiRsaWJl eHQKICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgoKICAgICAgIyBQcmVz ZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgog ICAgICBmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KCWlmIGV2 YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCgkgIHJlbGlua19jb21tYW5kPSJ7 IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9 OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgoJZWxpZiBldmFsIHZhcl92 YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCgkgIHJlbGlua19jb21t YW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKCWVsc2UKCSAgZnVu Y19xdW90ZV9hcmcgcHJldHR5LHVucXVvdGVkICIkdmFyX3ZhbHVlIgoJICByZWxpbmtfY29t bWFuZD0iJHZhcj0kZnVuY19xdW90ZV9hcmdfdW5xdW90ZWRfcmVzdWx0OyBleHBvcnQgJHZh cjsgJHJlbGlua19jb21tYW5kIgoJZmkKICAgICAgZG9uZQogICAgICAjIFF1b3RlIHRoZSBs aW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgogICAgICBmdW5jX3F1b3RlIGV2YWwgY2QgImBw d2RgIgogICAgICByZWxpbmtfY29tbWFuZD0iKCRmdW5jX3F1b3RlX3Jlc3VsdDsgJFNIRUxM IFwiJHByb2dwYXRoXCIgJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9h cmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKICAgICAgZnVuY19xdW90ZV9hcmcgcHJldHR5LHVu cXVvdGVkICIkcmVsaW5rX2NvbW1hbmQiCiAgICAgIHJlbGlua19jb21tYW5kPSRmdW5jX3F1 b3RlX2FyZ191bnF1b3RlZF9yZXN1bHQKICAgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2Rl X2F1dG9tYXRpYyI7IHRoZW4KCXJlbGlua19jb21tYW5kPQogICAgICBmaQoKICAgICAgIyBP bmx5IGNyZWF0ZSB0aGUgb3V0cHV0IGlmIG5vdCBhIGRyeSBydW4uCiAgICAgICRvcHRfZHJ5 X3J1biB8fCB7Cglmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KCSAgaWYgdGVzdCB5ZXMg PSAiJGluc3RhbGxlZCI7IHRoZW4KCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIi OyB0aGVuCgkgICAgICBicmVhawoJICAgIGZpCgkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGly LyR7b3V0cHV0bmFtZX1pCgkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29s IGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcwoJICAgIG5ld2RlcGVuZGVuY3lf bGlicz0KCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCgkgICAgICBj YXNlICRkZXBsaWIgaW4KCSAgICAgICoubGEpCgkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIK CQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIk ZGVwbGliIgoJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9c MS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAoJCXRlc3QgLXogIiRsaWJkaXIi ICYmIFwKCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBs aWJ0b29sIGFyY2hpdmUiCgkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHts dF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCgkJOzsKCSAgICAgIC1MKikKCQlmdW5jX3N0 cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNf c3RyaXBuYW1lX3Jlc3VsdCIKCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAt TCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCgkJOzsKCSAgICAgIC1SKikKCQlmdW5j X3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1 bmNfc3RyaXBuYW1lX3Jlc3VsdCIKCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMg IiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCgkJOzsKCSAgICAgICopIGZ1bmNf YXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CgkgICAgICBlc2FjCgkg ICAgZG9uZQoJICAgIGRlcGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9saWJzCgkgICAg bmV3ZGxmaWxlcz0KCgkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KCSAgICAgIGNhc2Ug JGxpYiBpbgoJICAgICAgKi5sYSkKCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKCQlu YW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAoJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdz L15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAoJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwK CQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFy Y2hpdmUiCgkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGli ZGlyLyRuYW1lIgoJCTs7CgkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxp YiIgOzsKCSAgICAgIGVzYWMKCSAgICBkb25lCgkgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwoJ ICAgIG5ld2RscHJlZmlsZXM9CgkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KCSAg ICAgIGNhc2UgJGxpYiBpbgoJICAgICAgKi5sYSkKCQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQg ZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChmb3IKCQkjIGV2ZW50dWFsIGxpbmtpbmcg d2l0aCB0aGUgYXBwLiB0aGF0IGxpbmtzIGl0KSBpZiB3ZQoJCSMgZGlkbid0IGFscmVhZHkg bGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bwoJCSMgdGhlIGxpYnJh cnk6CgkJZnVuY19iYXNlbmFtZSAiJGxpYiIKCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3Vs dAoJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAk bGliYAoJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIick bGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCgkJZnVuY19hcHBlbmQgbmV3 ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgoJCTs7CgkgICAg ICBlc2FjCgkgICAgZG9uZQoJICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKCSAgZWxz ZQoJICAgIG5ld2RsZmlsZXM9CgkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KCSAgICAg IGNhc2UgJGxpYiBpbgoJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSRsaWIgOzsK CQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CgkgICAgICBlc2FjCgkgICAgICBmdW5jX2FwcGVu ZCBuZXdkbGZpbGVzICIgJGFicyIKCSAgICBkb25lCgkgICAgZGxmaWxlcz0kbmV3ZGxmaWxl cwoJICAgIG5ld2RscHJlZmlsZXM9CgkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8K CSAgICAgIGNhc2UgJGxpYiBpbgoJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSRs aWIgOzsKCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CgkgICAgICBlc2FjCgkgICAgICBmdW5j X2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGFicyIKCSAgICBkb25lCgkgICAgZGxwcmVmaWxl cz0kbmV3ZGxwcmVmaWxlcwoJICBmaQoJICAkUk0gJG91dHB1dAoJICAjIHBsYWNlIGRsbmFt ZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KCSAgIyBJbiBmYWN0LCBpdCB3b3Vs ZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlzIGNvZGUgZm9yIGFsbCB0YXJnZXQKCSAg IyBzeXN0ZW1zIHRoYXQgY2FuJ3QgaGFyZC1jb2RlIGxpYnJhcnkgcGF0aHMgaW50byB0aGVp ciBleGVjdXRhYmxlcwoJICAjIGFuZCB0aGF0IGhhdmUgbm8gc2hhcmVkIGxpYnJhcnkgcGF0 aCB2YXJpYWJsZSBpbmRlcGVuZGVudCBvZiBQQVRILAoJICAjIGJ1dCBpdCB0dXJucyBvdXQg d2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0IGZyb20gaW5zcGVjdGluZwoJICAjIGxp YnRvb2wgdmFyaWFibGVzLCBzbyB3ZSBoYXZlIHRvIGhhcmQtY29kZSB0aGUgT1NzIHRvIHdo aWNoIGl0CgkgICMgYXBwbGllcyBoZXJlOyBhdCB0aGUgbW9tZW50LCB0aGF0IG1lYW5zIHBs YXRmb3JtcyB0aGF0IHVzZSB0aGUgUEUKCSAgIyBvYmplY3QgZm9ybWF0IHdpdGggRExMIGZp bGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgoJICAjIHRlc3RzL2Jp bmRpci5hdCBmb3IgZnVsbCBkZXRhaWxzLgoJICB0ZGxuYW1lPSRkbG5hbWUKCSAgY2FzZSAk aG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCgkgICAgKmN5Z3dp biosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKndp bmRvd3MqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkK CSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhl IGRsbCB0aGVyZS4KCSAgICAgIGlmIHRlc3QgLW4gIiRiaW5kaXIiOyB0aGVuCgkJZnVuY19y ZWxhdGl2ZV9wYXRoICIkaW5zdGFsbF9saWJkaXIiICIkYmluZGlyIgoJCXRkbG5hbWU9JGZ1 bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvJGRsbmFtZQoJICAgICAgZWxzZQoJCSMgT3RoZXJ3 aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCgkJdGRsbmFtZT0uLi9iaW4vJGRsbmFtZQoJ ICAgICAgZmkKCSAgICAgIDs7CgkgIGVzYWMKCSAgJEVDSE8gPiAkb3V0cHV0ICJcCiMgJG91 dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCiMgR2VuZXJhdGVkIGJ5ICRQUk9H UkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCiMKIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0 aGlzIGZpbGUhCiMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgoK IyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCmRsbmFtZT0nJHRkbG5hbWUnCgoj IE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMn CgojIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4Kb2xkX2xpYnJhcnk9JyRvbGRf bGlicmFyeScKCiMgTGlua2VyIGZsYWdzIHRoYXQgY2Fubm90IGdvIGluIGRlcGVuZGVuY3lf bGlicy4KaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJG5ld19pbmhlcml0ZWRfbGlua2VyX2Zs YWdzJwoKIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCmRlcGVuZGVu Y3lfbGlicz0nJGRlcGVuZGVuY3lfbGlicycKCiMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFr IGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKd2Vha19saWJyYXJ5X25hbWVz PSckd2Vha19saWJzJwoKIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KY3Vy cmVudD0kY3VycmVudAphZ2U9JGFnZQpyZXZpc2lvbj0kcmV2aXNpb24KCiMgSXMgdGhpcyBh biBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PwppbnN0YWxsZWQ9JGluc3RhbGxlZAoKIyBT aG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAt bW9kdWxlcz8Kc2hvdWxkbm90bGluaz0kbW9kdWxlCgojIEZpbGVzIHRvIGRsb3Blbi9kbHBy ZW9wZW4KZGxvcGVuPSckZGxmaWxlcycKZGxwcmVvcGVuPSckZGxwcmVmaWxlcycKCiMgRGly ZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKbGli ZGlyPSckaW5zdGFsbF9saWJkaXInIgoJICBpZiB0ZXN0IG5vLHllcyA9ICIkaW5zdGFsbGVk LCRuZWVkX3JlbGluayI7IHRoZW4KCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCnJlbGlua19j b21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCgkgIGZpCglkb25lCiAgICAgIH0KCiAgICAg ICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4g YmUgZm91bmQgaW4KICAgICAgIyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHRoZSBwcm9ncmFt IGlzIGluc3RhbGxlZC4KICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2Jq ZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIk b3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCiAgICAgIDs7CiAgICBlc2FjCiAgICBleGl0ICRF WElUX1NVQ0NFU1MKfQoKaWYgdGVzdCBsaW5rID0gIiRvcHRfbW9kZSIgfHwgdGVzdCByZWxp bmsgPSAiJG9wdF9tb2RlIjsgdGhlbgogIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQpmaQoK CiMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KZnVuY19tb2RlX3VuaW5zdGFsbCAoKQp7 CiAgICAkZGVidWdfY21kCgogICAgUk09JG5vbm9wdAogICAgZmlsZXM9CiAgICBybWZvcmNl PWZhbHNlCiAgICBleGl0X3N0YXR1cz0wCgogICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdy YXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCiAgICAjIHRoYW4g cnVubmluZyB0aGVpciBwcm9ncmFtcy4KICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0kbWFn aWMKCiAgICBmb3IgYXJnCiAgICBkbwogICAgICBjYXNlICRhcmcgaW4KICAgICAgLWYpIGZ1 bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9OiA7OwogICAgICAtKikgZnVuY19hcHBl bmQgUk0gIiAkYXJnIiA7OwogICAgICAqKSBmdW5jX2FwcGVuZCBmaWxlcyAiICRhcmciIDs7 CiAgICAgIGVzYWMKICAgIGRvbmUKCiAgICB0ZXN0IC16ICIkUk0iICYmIFwKICAgICAgZnVu Y19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iCgogICAgcm1k aXJzPQoKICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KICAgICAgZnVuY19kaXJuYW1lICIk ZmlsZSIgIiIgIi4iCiAgICAgIGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogICAgICBpZiB0 ZXN0IC4gPSAiJGRpciI7IHRoZW4KCW9kaXI9JG9iamRpcgogICAgICBlbHNlCglvZGlyPSRk aXIvJG9iamRpcgogICAgICBmaQogICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKICAgICAg bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKICAgICAgdGVzdCB1bmluc3RhbGwgPSAiJG9w dF9tb2RlIiAmJiBvZGlyPSRkaXIKCiAgICAgICMgUmVtZW1iZXIgb2RpciBmb3IgcmVtb3Zh bCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCiAgICAgIGlmIHRl c3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgoJY2FzZSAiICRybWRpcnMgIiBpbgoJICAq IiAkb2RpciAiKikgOzsKCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7Cgll c2FjCiAgICAgIGZpCgogICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3Qg ZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgogICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsg fSA+L2Rldi9udWxsIDI+JjEgfHwKCSB7IHRlc3QgLWggIiRmaWxlIjsgfSA+L2Rldi9udWxs IDI+JjEgfHwKCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KCToKICAgICAgZWxpZiB0ZXN0IC1k ICIkZmlsZSI7IHRoZW4KCWV4aXRfc3RhdHVzPTEKCWNvbnRpbnVlCiAgICAgIGVsaWYgJHJt Zm9yY2U7IHRoZW4KCWNvbnRpbnVlCiAgICAgIGZpCgogICAgICBybWZpbGVzPSRmaWxlCgog ICAgICBjYXNlICRuYW1lIGluCiAgICAgICoubGEpCgkjIFBvc3NpYmx5IGEgbGlidG9vbCBh cmNoaXZlLCBzbyB2ZXJpZnkgaXQuCglpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgoJ ICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCgoJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJy YXJpZXMgYW5kIHN5bWxpbmtzLgoJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KCSAg ICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCgkgIGRvbmUKCSAgdGVzdCAtbiAi JG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJy YXJ5IgoKCSAgY2FzZSAkb3B0X21vZGUgaW4KCSAgY2xlYW4pCgkgICAgY2FzZSAiICRsaWJy YXJ5X25hbWVzICIgaW4KCSAgICAqIiAkZGxuYW1lICIqKSA7OwoJICAgICopIHRlc3QgLW4g IiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIiA7OwoJ ICAgIGVzYWMKCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVz ICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfWkiCgkgICAgOzsKCSAgdW5pbnN0YWxsKQoJ ICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgoJICAgICAgIyBEbyBlYWNo IGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwgY29tbWFuZHMuCgkgICAgICBmdW5jX2V4 ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJyRybWZvcmNlIHx8IGV4aXRfc3Rh dHVzPTEnCgkgICAgZmkKCgkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgoJ ICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1h bmRzLgoJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRz IiAnJHJtZm9yY2UgfHwgZXhpdF9zdGF0dXM9MScKCSAgICBmaQoJICAgICMgRklYTUU6IHNo b3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgoJICAg IDs7CgkgIGVzYWMKCWZpCgk7OwoKICAgICAgKi5sbykKCSMgUG9zc2libHkgYSBsaWJ0b29s IG9iamVjdCwgc28gdmVyaWZ5IGl0LgoJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4K CgkgICMgUmVhZCB0aGUgLmxvIGZpbGUKCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQoKCSAg IyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCgkgIGlm IHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJiB0ZXN0IG5vbmUgIT0gIiRwaWNfb2JqZWN0Ijsg dGhlbgoJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgoJICBm aQoKCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVt b3ZlLgoJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmIHRlc3Qgbm9uZSAhPSAi JG5vbl9waWNfb2JqZWN0IjsgdGhlbgoJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGly LyRub25fcGljX29iamVjdCIKCSAgZmkKCWZpCgk7OwoKICAgICAgKikKCWlmIHRlc3QgY2xl YW4gPSAiJG9wdF9tb2RlIjsgdGhlbgoJICBub2V4ZW5hbWU9JG5hbWUKCSAgY2FzZSAkZmls ZSBpbgoJICAqLmV4ZSkKCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgoJ ICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAoJICAgIGZ1bmNfc3RyaXBuYW1lICcn ICcuZXhlJyAiJG5hbWUiCgkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQK CSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmls ZXMsCgkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAuZXhlCgkgICAgZnVuY19hcHBlbmQgcm1m aWxlcyAiICRmaWxlIgoJICAgIDs7CgkgIGVzYWMKCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlm IHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCgkgIGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRm aWxlIjsgdGhlbgoJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUi OyB0aGVuCgkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKCSAgICAg IHJlbGlua19jb21tYW5kPQoJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3Nj cmlwdG5hbWVfcmVzdWx0CgkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3 cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgoJICAgIGVsc2UKCSAgICAgIHJlbGlua19jb21t YW5kPQoJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCgkgICAgZmkKCgkgICAg IyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9y aWdpbmFsbHkKCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMg YWRkZWQgaW50byAkcm1maWxlcwoJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8k bmFtZSAkb2Rpci8ke25hbWV9Uy4kb2JqZXh0IgoJICAgIGlmIHRlc3QgeWVzID0gIiRmYXN0 X2luc3RhbGwiICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KCSAgICAgIGZ1 bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKCSAgICBmaQoJICAgIGlmIHRl c3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIjsgdGhlbgoJICAgICAgZnVuY19hcHBlbmQg cm1maWxlcyAiICRvZGlyL2x0LSRub2V4ZW5hbWUuYyIKCSAgICBmaQoJICBmaQoJZmkKCTs7 CiAgICAgIGVzYWMKICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRf c3RhdHVzPTEnCiAgICBkb25lCgogICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAkb2JqZGlyJ3Mg aW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKICAgIGZvciBkaXIg aW4gJHJtZGlyczsgZG8KICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KCWZ1bmNfc2hv d19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKICAgICAgZmkKICAgIGRvbmUK CiAgICBleGl0ICRleGl0X3N0YXR1cwp9CgppZiB0ZXN0IHVuaW5zdGFsbCA9ICIkb3B0X21v ZGUiIHx8IHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgogIGZ1bmNfbW9kZV91bmlu c3RhbGwgJHsxKyIkQCJ9CmZpCgp0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKICBoZWxwPSRn ZW5lcmljX2hlbHAKICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RF Igp9Cgp0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKICBmdW5jX2ZhdGFsX2hlbHAgImludmFs aWQgb3BlcmF0aW9uIG1vZGUgJyRvcHRfbW9kZSciCgppZiB0ZXN0IC1uICIkZXhlY19jbWQi OyB0aGVuCiAgZXZhbCBleGVjICIkZXhlY19jbWQiCiAgZXhpdCAkRVhJVF9GQUlMVVJFCmZp CgpleGl0ICRleGl0X3N0YXR1cwoKCiMgVGhlIFRBR3MgYmVsb3cgYXJlIGRlZmluZWQgc3Vj aCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uCiMgd2hlcmUgd2UgZGlzYWJs ZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCiMgY2hvaWNl cywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFi bGUsCiMgc2luY2Ugd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2Vy ZSBkaXNhYmxlZCBiZWNhdXNlCiMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVz ZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CiMgdGhlbS4gIFRoaXMgaXMgcGFydGlj dWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKIyBzdXBwb3J0IGhh dmluZyBib3RoIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcyBlbmFibGVkIGF0IHRoZSBz YW1lCiMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVk LW9ubHkgY29uZmlndXJhdGlvbi4KIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZl biwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQojIGNvbmZpZ3VyYXRpb24uICBC dXQgd2UnbGwgbmV2ZXIgZ28gZnJvbSBzdGF0aWMtb25seSB0byBzaGFyZWQtb25seS4KCiMg IyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKYnVpbGRfbGli dG9vbF9saWJzPW5vCmJ1aWxkX29sZF9saWJzPXllcwojICMjIyBFTkQgTElCVE9PTCBUQUcg Q09ORklHOiBkaXNhYmxlLXNoYXJlZAoKIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklH OiBkaXNhYmxlLXN0YXRpYwpidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9s aWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKIyAjIyMgRU5EIExJ QlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKCiMgTG9jYWwgVmFyaWFibGVzOgoj IG1vZGU6c2hlbGwtc2NyaXB0CiMgc2gtaW5kZW50YXRpb246MgojIEVuZDoKCiMgIyMjIEJF R0lOIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCgojIFRoZSBsaW5rZXIgdXNlZCB0byBidWls ZCBsaWJyYXJpZXMuCkxEPSIvdXNyL2Jpbi9sZCAtbSBlbGZfeDg2XzY0IgoKIyBIb3cgdG8g Y3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgpyZWxvYWRfZmxhZz0iIC1yIgpyZWxv YWRfY21kcz0iXCRMRFwkcmVsb2FkX2ZsYWcgLW8gXCRvdXRwdXRcJHJlbG9hZF9vYmpzIgoK IyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgpvbGRfYXJj aGl2ZV9jbWRzPSJcJEFSIFwkQVJfRkxBR1MgXCRvbGRsaWJcJG9sZG9ianN+XCRSQU5MSUIg XCR0b29sX29sZGxpYiIKCiMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KQ0M9Imcr KyIKCiMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/CndpdGhfZ2NjPXllcwoK IyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgpub19idWls dGluX2ZsYWc9IiAtZm5vLWJ1aWx0aW4iCgojIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3Mg Zm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KcGljX2ZsYWc9IiAtZlBJQyAtRFBJQyIK CiMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4Kd2w9 Ii1XbCwiCgojIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCmxp bmtfc3RhdGljX2ZsYWc9Ii1zdGF0aWMiCgojIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3Vz bHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KY29tcGlsZXJfY19vPSJ5ZXMiCgojIFdo ZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMu CmJ1aWxkX2xpYnRvb2xfbmVlZF9sYz1ubwoKIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxv dyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgphbGxvd19saWJ0 b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KCiMgQ29tcGlsZXIgZmxhZyB0byBh bGxvdyByZWZsZXhpdmUgZGxvcGVucy4KZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSJcJHds LS1leHBvcnQtZHluYW1pYyIKCiMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQg b2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgp3aG9sZV9hcmNoaXZlX2ZsYWdfc3Bl Yz0iXCR3bC0td2hvbGUtYXJjaGl2ZVwkY29udmVuaWVuY2UgXCR3bC0tbm8td2hvbGUtYXJj aGl2ZSIKCiMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9i amVjdHMgZGlyZWN0bHkuCmNvbXBpbGVyX25lZWRzX29iamVjdD0ibm8iCgojIENyZWF0ZSBh biBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCm9sZF9hcmNoaXZl X2Zyb21fbmV3X2NtZHM9IiIKCiMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNo aXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9m cm9tX2V4cHN5bXNfY21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVk IGFyY2hpdmUuCmFyY2hpdmVfY21kcz0iXCRDQyBcJHBpY19mbGFnIC1zaGFyZWQgLW5vc3Rk bGliIFwkcHJlZGVwX29iamVjdHMgXCRsaWJvYmpzIFwkZGVwbGlicyBcJHBvc3RkZXBfb2Jq ZWN0cyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29uYW1lIFwkd2xcJHNvbmFtZSAtbyBcJGxp YiIKYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyBcJHBpY19mbGFnIC1zaGFyZWQgLW5vc3Rk bGliIFwkcHJlZGVwX29iamVjdHMgXCRsaWJvYmpzIFwkZGVwbGlicyBcJHBvc3RkZXBfb2Jq ZWN0cyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29uYW1lIFwkd2xcJHNvbmFtZSBcJHdsLXJl dGFpbi1zeW1ib2xzLWZpbGUgXCR3bFwkZXhwb3J0X3N5bWJvbHMgLW8gXCRsaWIiCgojIENv bW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZy b20gYnVpbGRpbmcKIyBhIHNoYXJlZCBhcmNoaXZlLgptb2R1bGVfY21kcz0iIgptb2R1bGVf ZXhwc3ltX2NtZHM9IiIKCiMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQg b3Igbm90Lgp3aXRoX2dudV9sZD0ieWVzIgoKIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBs aWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KYWxsb3dfdW5k ZWZpbmVkX2ZsYWc9IiIKCiMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1i b2xzLgpub191bmRlZmluZWRfZmxhZz0iIgoKIyBGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIg aW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KIyBUaGlzIG11c3Qgd29yayBldmVuIGlm ICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iXCR3 bC1ycGF0aCBcJHdsXCRsaWJkaXIiCgojIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJw YXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCmhhcmRjb2RlX2xpYmRpcl9z ZXBhcmF0b3I9IiIKCiMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHNoYXJl ZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCiMgRElSIGludG8gdGhlIHJlc3VsdGlu ZyBiaW5hcnkuCmhhcmRjb2RlX2RpcmVjdD1ubwoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcg RElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKIyBESVIg aW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRl cGVuZGVuY3kgaXMKIyAiYWJzb2x1dGUiLGkuZS4gaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkg c2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUKIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4K aGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCgojIFNldCB0byAieWVzIiBpZiB1c2luZyB0 aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCiMgaW50byB0aGUg cmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfbWludXNfTD1ubwoKIyBTZXQgdG8gInllcyIg aWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJ UgojIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCmhhcmRjb2RlX3NobGlicGF0aF92YXI9 dW5zdXBwb3J0ZWQKCiMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJh cnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCiMgaW50byB0aGUgbGlicmFyeSBhbmQg YWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKIyBhZ2Fp bnN0IGl0LgpoYXJkY29kZV9hdXRvbWF0aWM9bm8KCiMgU2V0IHRvIHllcyBpZiBsaW5rZXIg YWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKIyB0byBydW50aW1l IHBhdGggbGlzdC4KaW5oZXJpdF9ycGF0aD1ubwoKIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBs aW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCmxp bmtfYWxsX2RlcGxpYnM9dW5rbm93bgoKIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3lt Ym9scyBhcmUgcmVxdWlyZWQuCmFsd2F5c19leHBvcnRfc3ltYm9scz1ubwoKIyBUaGUgY29t bWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgpleHBvcnRfc3ltYm9sc19jbWRzPSJc JE5NIFwkbGlib2JqcyBcJGNvbnZlbmllbmNlIHwgXCRnbG9iYWxfc3ltYm9sX3BpcGUgfCBc JFNFRCAncy8uKiAvLycgfCBzb3J0IHwgdW5pcSA+IFwkZXhwb3J0X3N5bWJvbHMiCgojIFN5 bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJv bHMuCmV4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0Zb SURdXy4qIgoKIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCmluY2x1 ZGVfZXhwc3ltcz0iIgoKIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3Jh bXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KcHJlbGlua19jbWRzPSIi CgojIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMu CnBvc3RsaW5rX2NtZHM9IiIKCiMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0 IGZpbGVzLgpmaWxlX2xpc3Rfc3BlYz0iIgoKIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQg bGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KaGFyZGNvZGVfYWN0aW9uPWltbWVk aWF0ZQoKIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVu IGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCmNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0i L3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQgL3Vzci9saWIvZ2NjL3g4Nl82NC1s aW51eC1nbnUvMTQvLi4vLi4vLi4veDg2XzY0LWxpbnV4LWdudSAvdXNyL2xpYi9nY2MveDg2 XzY0LWxpbnV4LWdudS8xNC8uLi8uLi8uLi8uLi9saWIgL2xpYi94ODZfNjQtbGludXgtZ251 IC9saWIvLi4vbGliIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUgL3Vzci9saWIvLi4vbGli IC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4uLy4uLy4uIgoKIyBEZXBlbmRl bmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5r ZWQgdG8KIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KcHJlZGVwX29iamVjdHM9Ii91c3Iv bGliL2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4uLy4uLy4uL3g4Nl82NC1saW51eC1nbnUv Y3J0aS5vIC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0L2NydGJlZ2luUy5vIgpw b3N0ZGVwX29iamVjdHM9Ii91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0L2NydGVu ZFMubyAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS8xNC8uLi8uLi8uLi94ODZfNjQt bGludXgtZ251L2NydG4ubyIKcHJlZGVwcz0iIgpwb3N0ZGVwcz0iLWxzdGRjKysgLWxtIC1s Z2NjX3MgLWxjIC1sZ2NjX3MiCgojIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50 ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCiMgYSBzaGFyZWQgbGlicmFy eS4KY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSItTC91c3IvbGliL2djYy94ODZfNjQtbGlu dXgtZ251LzE0IC1ML3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQvLi4vLi4vLi4v eDg2XzY0LWxpbnV4LWdudSAtTC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4u Ly4uLy4uLy4uL2xpYiAtTC9saWIveDg2XzY0LWxpbnV4LWdudSAtTC9saWIvLi4vbGliIC1M L3Vzci9saWIveDg2XzY0LWxpbnV4LWdudSAtTC91c3IvbGliLy4uL2xpYiAtTC91c3IvbGli L2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4uLy4uLy4uIgoKIyAjIyMgRU5EIExJQlRPT0wg VEFHIENPTkZJRzogQ1hYCgojICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IEY3NwoK IyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgpMRD0iL3Vzci9iaW4vbGQg LW0gZWxmX3g4Nl82NCIKCiMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxl cy4KcmVsb2FkX2ZsYWc9IiAtciIKcmVsb2FkX2NtZHM9IlwkTERcJHJlbG9hZF9mbGFnIC1v IFwkb3V0cHV0XCRyZWxvYWRfb2JqcyIKCiMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBv bGQtc3R5bGUgYXJjaGl2ZS4Kb2xkX2FyY2hpdmVfY21kcz0iXCRBUiBcJEFSX0ZMQUdTIFwk b2xkbGliXCRvbGRvYmpzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCgojIEEgbGFuZ3VhZ2Ug c3BlY2lmaWMgY29tcGlsZXIuCkNDPSJmNzciCgojIElzIHRoZSBjb21waWxlciB0aGUgR05V IGNvbXBpbGVyPwp3aXRoX2djYz15ZXMKCiMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBi dWlsdGluIGZ1bmN0aW9ucy4Kbm9fYnVpbHRpbl9mbGFnPSIiCgojIEFkZGl0aW9uYWwgY29t cGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KcGljX2ZsYWc9IiAt ZlBJQyIKCiMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxl ci4Kd2w9Ii1XbCwiCgojIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtp bmcuCmxpbmtfc3RhdGljX2ZsYWc9Ii1zdGF0aWMiCgojIERvZXMgY29tcGlsZXIgc2ltdWx0 YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KY29tcGlsZXJfY19vPSJ5ZXMi CgojIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJy YXJpZXMuCmJ1aWxkX2xpYnRvb2xfbmVlZF9sYz1ubwoKIyBXaGV0aGVyIG9yIG5vdCB0byBk aXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgphbGxv d19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KCiMgQ29tcGlsZXIgZmxh ZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVj PSJcJHdsLS1leHBvcnQtZHluYW1pYyIKCiMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBz aGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgp3aG9sZV9hcmNoaXZlX2Zs YWdfc3BlYz0iXCR3bC0td2hvbGUtYXJjaGl2ZVwkY29udmVuaWVuY2UgXCR3bC0tbm8td2hv bGUtYXJjaGl2ZSIKCiMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5n IG5vIG9iamVjdHMgZGlyZWN0bHkuCmNvbXBpbGVyX25lZWRzX29iamVjdD0ibm8iCgojIENy ZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCm9sZF9h cmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKCiMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHls ZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgpvbGRfYXJj aGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEg c2hhcmVkIGFyY2hpdmUuCmFyY2hpdmVfY21kcz0iXCRDQyAtc2hhcmVkIFwkcGljX2ZsYWcg XCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29uYW1lIFwkd2xc JHNvbmFtZSAtbyBcJGxpYiIKYXJjaGl2ZV9leHBzeW1fY21kcz0iZWNobyBcXFwieyBnbG9i YWw6XFxcIiA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUudmVyfgogICAgICAgICAgICBj YXQgXCRleHBvcnRfc3ltYm9scyB8IFwkU0VEIC1lIFxcXCJzL1xcXFwoLipcXFxcKS9cXFxc MTsvXFxcIiA+PiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlcn4KICAgICAgICAgICAg ZWNobyBcXFwibG9jYWw6ICo7IH07XFxcIiA+PiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1l LnZlcn4KICAgICAgICAgICAgXCRDQyAtc2hhcmVkIFwkcGljX2ZsYWcgXCRsaWJvYmpzIFwk ZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIFwkd2wtc29uYW1lIFwkd2xcJHNvbmFtZSBcJHds LXZlcnNpb24tc2NyaXB0IFwkd2xcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlciAtbyBc JGxpYiIKCiMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBk aWZmZXJlbnQgZnJvbSBidWlsZGluZwojIGEgc2hhcmVkIGFyY2hpdmUuCm1vZHVsZV9jbWRz PSIiCm1vZHVsZV9leHBzeW1fY21kcz0iIgoKIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3 aXRoIEdOVSBsZCBvciBub3QuCndpdGhfZ251X2xkPSJ5ZXMiCgojIEZsYWcgdGhhdCBhbGxv d3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0 LgphbGxvd191bmRlZmluZWRfZmxhZz0iIgoKIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5k ZWZpbmVkIHN5bWJvbHMuCm5vX3VuZGVmaW5lZF9mbGFnPSIiCgojIEZsYWcgdG8gaGFyZGNv ZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgojIFRoaXMgbXVzdCB3 b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdApoYXJkY29kZV9saWJkaXJfZmxh Z19zcGVjPSJcJHdsLXJwYXRoIFwkd2xcJGxpYmRpciIKCiMgV2hldGhlciB3ZSBuZWVkIGEg c2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KaGFyZGNv ZGVfbGliZGlyX3NlcGFyYXRvcj0iIgoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xp Yk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKIyBESVIgaW50byB0 aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfZGlyZWN0PW5vCgojIFNldCB0byAieWVz IiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRj b2RlcwojIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5n IGxpYnJhcnkgZGVwZW5kZW5jeSBpcwojICJhYnNvbHV0ZSIsaS5lLiBpbXBvc3NpYmxlIHRv IGNoYW5nZSBieSBzZXR0aW5nICRzaGxpYnBhdGhfdmFyIGlmIHRoZQojIGxpYnJhcnkgaXMg cmVsb2NhdGVkLgpoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KCiMgU2V0IHRvICJ5ZXMi IGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIK IyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgpoYXJkY29kZV9taW51c19MPW5vCgojIFNl dCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBo YXJkY29kZXMgRElSCiMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfc2hs aWJwYXRoX3Zhcj11bnN1cHBvcnRlZAoKIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBz aGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSBs aWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxp bmtlZAojIGFnYWluc3QgaXQuCmhhcmRjb2RlX2F1dG9tYXRpYz1ubwoKIyBTZXQgdG8geWVz IGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcwoj IHRvIHJ1bnRpbWUgcGF0aCBsaXN0Lgppbmhlcml0X3JwYXRoPW5vCgojIFdoZXRoZXIgbGli dG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxp YnJhcmllcy4KbGlua19hbGxfZGVwbGlicz11bmtub3duCgojIFNldCB0byAieWVzIiBpZiBl eHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5v CgojIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCmV4cG9ydF9zeW1i b2xzX2NtZHM9IlwkTk0gXCRsaWJvYmpzIFwkY29udmVuaWVuY2UgfCBcJGdsb2JhbF9zeW1i b2xfcGlwZSB8IFwkU0VEICdzLy4qIC8vJyB8IHNvcnQgfCB1bmlxID4gXCRleHBvcnRfc3lt Ym9scyIKCiMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVs b2FkZWQgc3ltYm9scy4KZXhjbHVkZV9leHBzeW1zPSJfR0xPQkFMX09GRlNFVF9UQUJMRV98 X0dMT0JBTF9fRltJRF1fLioiCgojIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBv cnRlZC4KaW5jbHVkZV9leHBzeW1zPSIiCgojIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlu a2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgpwcmVs aW5rX2NtZHM9IiIKCiMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2lu ZyBwcm9ncmFtcy4KcG9zdGxpbmtfY21kcz0iIgoKIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRh aW5pbmcgaW5wdXQgZmlsZXMuCmZpbGVfbGlzdF9zcGVjPSIiCgojIEhvdyB0byBoYXJkY29k ZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgpoYXJkY29kZV9h Y3Rpb249aW1tZWRpYXRlCgojIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNv bXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KY29tcGlsZXJfbGliX3Nl YXJjaF9kaXJzPSIiCgojIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVy IHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bwojIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5 LgpwcmVkZXBfb2JqZWN0cz0iIgpwb3N0ZGVwX29iamVjdHM9IiIKcHJlZGVwcz0iIgpwb3N0 ZGVwcz0iIgoKIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkg dGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwojIGEgc2hhcmVkIGxpYnJhcnkuCmNvbXBpbGVy X2xpYl9zZWFyY2hfcGF0aD0iIgoKIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogRjc3 CgojICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IEZDCgojIFRoZSBsaW5rZXIgdXNl ZCB0byBidWlsZCBsaWJyYXJpZXMuCkxEPSIvdXNyL2Jpbi9sZCAtbSBlbGZfeDg2XzY0IgoK IyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgpyZWxvYWRfZmxhZz0i IC1yIgpyZWxvYWRfY21kcz0iXCRMRFwkcmVsb2FkX2ZsYWcgLW8gXCRvdXRwdXRcJHJlbG9h ZF9vYmpzIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZl LgpvbGRfYXJjaGl2ZV9jbWRzPSJcJEFSIFwkQVJfRkxBR1MgXCRvbGRsaWJcJG9sZG9ianN+ XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKCiMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxl ci4KQ0M9Imdmb3J0cmFuIgoKIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8K d2l0aF9nY2M9eWVzCgojIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5j dGlvbnMuCm5vX2J1aWx0aW5fZmxhZz0iIgoKIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdz IGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCnBpY19mbGFnPSIgLWZQSUMiCgojIEhv dyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCndsPSItV2ws IgoKIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgpsaW5rX3N0 YXRpY19mbGFnPSItc3RhdGljIgoKIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1 cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/CmNvbXBpbGVyX2Nfbz0ieWVzIgoKIyBXaGV0aGVy IG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgpidWls ZF9saWJ0b29sX25lZWRfbGM9bm8KCiMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hh cmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KYWxsb3dfbGlidG9vbF9s aWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCgojIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cg cmVmbGV4aXZlIGRsb3BlbnMuCmV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0iXCR3bC0tZXhw b3J0LWR5bmFtaWMiCgojIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVj dHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4Kd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ilwk d2wtLXdob2xlLWFyY2hpdmVcJGNvbnZlbmllbmNlIFwkd2wtLW5vLXdob2xlLWFyY2hpdmUi CgojIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3Rz IGRpcmVjdGx5Lgpjb21waWxlcl9uZWVkc19vYmplY3Q9Im5vIgoKIyBDcmVhdGUgYW4gb2xk LXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9t X25ld19jbWRzPSIiCgojIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0 byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4Kb2xkX2FyY2hpdmVfZnJvbV9l eHBzeW1zX2NtZHM9IiIKCiMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNo aXZlLgphcmNoaXZlX2NtZHM9IlwkQ0MgLXNoYXJlZCBcJHBpY19mbGFnIFwkbGlib2JqcyBc JGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyBcJHdsLXNvbmFtZSBcJHdsXCRzb25hbWUgLW8g XCRsaWIiCmFyY2hpdmVfZXhwc3ltX2NtZHM9ImVjaG8gXFxcInsgZ2xvYmFsOlxcXCIgPiBc JG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLnZlcn4KICAgICAgICAgICAgY2F0IFwkZXhwb3J0 X3N5bWJvbHMgfCBcJFNFRCAtZSBcXFwicy9cXFxcKC4qXFxcXCkvXFxcXDE7L1xcXCIgPj4g XCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS52ZXJ+CiAgICAgICAgICAgIGVjaG8gXFxcImxv Y2FsOiAqOyB9O1xcXCIgPj4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS52ZXJ+CiAgICAg ICAgICAgIFwkQ0MgLXNoYXJlZCBcJHBpY19mbGFnIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRj b21waWxlcl9mbGFncyBcJHdsLXNvbmFtZSBcJHdsXCRzb25hbWUgXCR3bC12ZXJzaW9uLXNj cmlwdCBcJHdsXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS52ZXIgLW8gXCRsaWIiCgojIENv bW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZy b20gYnVpbGRpbmcKIyBhIHNoYXJlZCBhcmNoaXZlLgptb2R1bGVfY21kcz0iIgptb2R1bGVf ZXhwc3ltX2NtZHM9IiIKCiMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQg b3Igbm90Lgp3aXRoX2dudV9sZD0ieWVzIgoKIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBs aWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KYWxsb3dfdW5k ZWZpbmVkX2ZsYWc9IiIKCiMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1i b2xzLgpub191bmRlZmluZWRfZmxhZz0iIgoKIyBGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIg aW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KIyBUaGlzIG11c3Qgd29yayBldmVuIGlm ICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iXCR3 bC1ycGF0aCBcJHdsXCRsaWJkaXIiCgojIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJw YXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCmhhcmRjb2RlX2xpYmRpcl9z ZXBhcmF0b3I9IiIKCiMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHNoYXJl ZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCiMgRElSIGludG8gdGhlIHJlc3VsdGlu ZyBiaW5hcnkuCmhhcmRjb2RlX2RpcmVjdD1ubwoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcg RElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKIyBESVIg aW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRl cGVuZGVuY3kgaXMKIyAiYWJzb2x1dGUiLGkuZS4gaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkg c2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUKIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4K aGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCgojIFNldCB0byAieWVzIiBpZiB1c2luZyB0 aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCiMgaW50byB0aGUg cmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfbWludXNfTD1ubwoKIyBTZXQgdG8gInllcyIg aWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJ UgojIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCmhhcmRjb2RlX3NobGlicGF0aF92YXI9 dW5zdXBwb3J0ZWQKCiMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJh cnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCiMgaW50byB0aGUgbGlicmFyeSBhbmQg YWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKIyBhZ2Fp bnN0IGl0LgpoYXJkY29kZV9hdXRvbWF0aWM9bm8KCiMgU2V0IHRvIHllcyBpZiBsaW5rZXIg YWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKIyB0byBydW50aW1l IHBhdGggbGlzdC4KaW5oZXJpdF9ycGF0aD1ubwoKIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBs aW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCmxp bmtfYWxsX2RlcGxpYnM9dW5rbm93bgoKIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3lt Ym9scyBhcmUgcmVxdWlyZWQuCmFsd2F5c19leHBvcnRfc3ltYm9scz1ubwoKIyBUaGUgY29t bWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgpleHBvcnRfc3ltYm9sc19jbWRzPSJc JE5NIFwkbGlib2JqcyBcJGNvbnZlbmllbmNlIHwgXCRnbG9iYWxfc3ltYm9sX3BpcGUgfCBc JFNFRCAncy8uKiAvLycgfCBzb3J0IHwgdW5pcSA+IFwkZXhwb3J0X3N5bWJvbHMiCgojIFN5 bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJv bHMuCmV4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0Zb SURdXy4qIgoKIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCmluY2x1 ZGVfZXhwc3ltcz0iIgoKIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3Jh bXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KcHJlbGlua19jbWRzPSIi CgojIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMu CnBvc3RsaW5rX2NtZHM9IiIKCiMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0 IGZpbGVzLgpmaWxlX2xpc3Rfc3BlYz0iIgoKIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQg bGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KaGFyZGNvZGVfYWN0aW9uPWltbWVk aWF0ZQoKIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVu IGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCmNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0i L3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQgL3Vzci9saWIvZ2NjL3g4Nl82NC1s aW51eC1nbnUvMTQvLi4vLi4vLi4veDg2XzY0LWxpbnV4LWdudSAvdXNyL2xpYi9nY2MveDg2 XzY0LWxpbnV4LWdudS8xNC8uLi8uLi8uLi8uLi9saWIgL2xpYi94ODZfNjQtbGludXgtZ251 IC9saWIvLi4vbGliIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUgL3Vzci9saWIvLi4vbGli IC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4uLy4uLy4uIgoKIyBEZXBlbmRl bmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5r ZWQgdG8KIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KcHJlZGVwX29iamVjdHM9Ii91c3Iv bGliL2djYy94ODZfNjQtbGludXgtZ251LzE0Ly4uLy4uLy4uL3g4Nl82NC1saW51eC1nbnUv Y3J0aS5vIC91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0L2NydGJlZ2luUy5vIgpw b3N0ZGVwX29iamVjdHM9Ii91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzE0L2NydGVu ZFMubyAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS8xNC8uLi8uLi8uLi94ODZfNjQt bGludXgtZ251L2NydG4ubyIKcHJlZGVwcz0iIgpwb3N0ZGVwcz0iLWxnZm9ydHJhbiAtbG0g LWxnY2NfcyAtbHF1YWRtYXRoIC1sbSAtbGMgLWxnY2NfcyIKCiMgVGhlIGxpYnJhcnkgc2Vh cmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcK IyBhIHNoYXJlZCBsaWJyYXJ5Lgpjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9Ii1ML3Vzci9s aWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQgLUwvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4 LWdudS8xNC8uLi8uLi8uLi94ODZfNjQtbGludXgtZ251IC1ML3Vzci9saWIvZ2NjL3g4Nl82 NC1saW51eC1nbnUvMTQvLi4vLi4vLi4vLi4vbGliIC1ML2xpYi94ODZfNjQtbGludXgtZ251 IC1ML2xpYi8uLi9saWIgLUwvdXNyL2xpYi94ODZfNjQtbGludXgtZ251IC1ML3Vzci9saWIv Li4vbGliIC1ML3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvMTQvLi4vLi4vLi4iCgoj ICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBGQwoKIyAjIyMgQkVHSU4gTElCVE9PTCBU QUcgQ09ORklHOiBHTwoKIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgpM RD0iL3Vzci9iaW4vbGQgLW0gZWxmX3g4Nl82NCIKCiMgSG93IHRvIGNyZWF0ZSByZWxvYWRh YmxlIG9iamVjdCBmaWxlcy4KcmVsb2FkX2ZsYWc9IiAtciIKcmVsb2FkX2NtZHM9IlwkTERc JHJlbG9hZF9mbGFnIC1vIFwkb3V0cHV0XCRyZWxvYWRfb2JqcyIKCiMgQ29tbWFuZHMgdXNl ZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4Kb2xkX2FyY2hpdmVfY21kcz0iXCRB UiBcJEFSX0ZMQUdTIFwkb2xkbGliXCRvbGRvYmpzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIi CgojIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCkNDPSIiCgojIElzIHRoZSBjb21w aWxlciB0aGUgR05VIGNvbXBpbGVyPwp3aXRoX2djYz0KCiMgQ29tcGlsZXIgZmxhZyB0byB0 dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4Kbm9fYnVpbHRpbl9mbGFnPSIiCgojIEFkZGl0 aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KcGlj X2ZsYWc9IiIKCiMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21w aWxlci4Kd2w9IiIKCiMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2lu Zy4KbGlua19zdGF0aWNfZmxhZz0iIgoKIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5 IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/CmNvbXBpbGVyX2Nfbz0iIgoKIyBXaGV0aGVy IG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgpidWls ZF9saWJ0b29sX25lZWRfbGM9bm8KCiMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hh cmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KYWxsb3dfbGlidG9vbF9s aWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPQoKIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJl ZmxleGl2ZSBkbG9wZW5zLgpleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9IiIKCiMgQ29tcGls ZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hp dmVzLgp3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iIgoKIyBXaGV0aGVyIHRoZSBjb21waWxl ciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KY29tcGlsZXJfbmVl ZHNfb2JqZWN0PSIiCgojIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hh cmVkIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9IiIKCiMgQ3JlYXRlIGEg dGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJl ZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0iIgoKIyBDb21tYW5k cyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCmFyY2hpdmVfY21kcz0iIgphcmNo aXZlX2V4cHN5bV9jbWRzPSIiCgojIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJs ZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKIyBhIHNoYXJlZCBhcmNoaXZl Lgptb2R1bGVfY21kcz0iIgptb2R1bGVfZXhwc3ltX2NtZHM9IiIKCiMgV2hldGhlciB3ZSBh cmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgp3aXRoX2dudV9sZD0iIgoKIyBGbGFn IHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0 byBiZSBidWlsdC4KYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiIKCiMgRmxhZyB0aGF0IGVuZm9y Y2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgpub191bmRlZmluZWRfZmxhZz0iIgoKIyBGbGFn IHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KIyBU aGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3QKaGFyZGNvZGVf bGliZGlyX2ZsYWdfc3BlYz0iIgoKIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0 aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgpoYXJkY29kZV9saWJkaXJfc2Vw YXJhdG9yPSIiCgojIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRf ZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwojIERJUiBpbnRvIHRoZSByZXN1bHRpbmcg YmluYXJ5LgpoYXJkY29kZV9kaXJlY3Q9CgojIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIv bGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwojIERJUiBpbnRv IHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5k ZW5jeSBpcwojICJhYnNvbHV0ZSIsaS5lLiBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0 aW5nICRzaGxpYnBhdGhfdmFyIGlmIHRoZQojIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgpoYXJk Y29kZV9kaXJlY3RfYWJzb2x1dGU9CgojIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxE SVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCiMgaW50byB0aGUgcmVzdWx0 aW5nIGJpbmFyeS4KaGFyZGNvZGVfbWludXNfTD0KCiMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5n IFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKIyBpbnRv IHRoZSByZXN1bHRpbmcgYmluYXJ5LgpoYXJkY29kZV9zaGxpYnBhdGhfdmFyPQoKIyBTZXQg dG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhh cmRjb2RlcyBESVIKIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJy YXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAojIGFnYWluc3QgaXQuCmhhcmRjb2RlX2F1 dG9tYXRpYz0KCiMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9m IGRlcGVuZGVudCBsaWJyYXJpZXMKIyB0byBydW50aW1lIHBhdGggbGlzdC4KaW5oZXJpdF9y cGF0aD0KCiMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBh bGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgpsaW5rX2FsbF9kZXBsaWJzPQoKIyBTZXQg dG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCmFsd2F5c19leHBv cnRfc3ltYm9scz0KCiMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4K ZXhwb3J0X3N5bWJvbHNfY21kcz0iIgoKIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBs aXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgpleGNsdWRlX2V4cHN5bXM9IiIKCiMg U3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgppbmNsdWRlX2V4cHN5bXM9 IiIKCiMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0 IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCnByZWxpbmtfY21kcz0iIgoKIyBDb21tYW5k cyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgpwb3N0bGlua19j bWRzPSIiCgojIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KZmls ZV9saXN0X3NwZWM9IiIKCiMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0 aCBpbnRvIGFuIGV4ZWN1dGFibGUuCmhhcmRjb2RlX2FjdGlvbj0KCiMgVGhlIGRpcmVjdG9y aWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBs aWJyYXJ5Lgpjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9IiIKCiMgRGVwZW5kZW5jaWVzIHRv IHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCiMg Y3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCnByZWRlcF9vYmplY3RzPSIiCnBvc3RkZXBfb2Jq ZWN0cz0iIgpwcmVkZXBzPSIiCnBvc3RkZXBzPSIiCgojIFRoZSBsaWJyYXJ5IHNlYXJjaCBw YXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCiMgYSBz aGFyZWQgbGlicmFyeS4KY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSIiCgojICMjIyBFTkQg TElCVE9PTCBUQUcgQ09ORklHOiBHTwoKIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklH OiBHQ0oKCiMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KTEQ9Ii91c3Iv YmluL2xkIC1tIGVsZl94ODZfNjQiCgojIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmpl Y3QgZmlsZXMuCnJlbG9hZF9mbGFnPSIgLXIiCnJlbG9hZF9jbWRzPSJcJExEXCRyZWxvYWRf ZmxhZyAtbyBcJG91dHB1dFwkcmVsb2FkX29ianMiCgojIENvbW1hbmRzIHVzZWQgdG8gYnVp bGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2NtZHM9IlwkQVIgXCRBUl9G TEFHUyBcJG9sZGxpYlwkb2xkb2Jqc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgoKIyBBIGxh bmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgpDQz0iIgoKIyBJcyB0aGUgY29tcGlsZXIgdGhl IEdOVSBjb21waWxlcj8Kd2l0aF9nY2M9CgojIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYg YnVpbHRpbiBmdW5jdGlvbnMuCm5vX2J1aWx0aW5fZmxhZz0iIgoKIyBBZGRpdGlvbmFsIGNv bXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCnBpY19mbGFnPSIi CgojIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCnds PSIiCgojIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCmxpbmtf c3RhdGljX2ZsYWc9IiIKCiMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0 IC1jIGFuZCAtbyBvcHRpb25zPwpjb21waWxlcl9jX289IiIKCiMgV2hldGhlciBvciBub3Qg dG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KYnVpbGRfbGlidG9v bF9uZWVkX2xjPW5vCgojIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJz IHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCmFsbG93X2xpYnRvb2xfbGlic193aXRo X3N0YXRpY19ydW50aW1lcz0KCiMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUg ZGxvcGVucy4KZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSIiCgojIENvbXBpbGVyIGZsYWcg dG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4Kd2hv bGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiIKCiMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMg d2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCmNvbXBpbGVyX25lZWRzX29iamVj dD0iIgoKIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNo aXZlLgpvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSIiCgojIENyZWF0ZSBhIHRlbXBvcmFy eSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2 ZS4Kb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9IiIKCiMgQ29tbWFuZHMgdXNlZCB0 byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgphcmNoaXZlX2NtZHM9IiIKYXJjaGl2ZV9leHBz eW1fY21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxl IGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCiMgYSBzaGFyZWQgYXJjaGl2ZS4KbW9kdWxl X2NtZHM9IiIKbW9kdWxlX2V4cHN5bV9jbWRzPSIiCgojIFdoZXRoZXIgd2UgYXJlIGJ1aWxk aW5nIHdpdGggR05VIGxkIG9yIG5vdC4Kd2l0aF9nbnVfbGQ9IiIKCiMgRmxhZyB0aGF0IGFs bG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVp bHQuCmFsbG93X3VuZGVmaW5lZF9mbGFnPSIiCgojIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1 bmRlZmluZWQgc3ltYm9scy4Kbm9fdW5kZWZpbmVkX2ZsYWc9IiIKCiMgRmxhZyB0byBoYXJk Y29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCiMgVGhpcyBtdXN0 IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0CmhhcmRjb2RlX2xpYmRpcl9m bGFnX3NwZWM9IiIKCiMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcg d2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0i IgoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJp bmcgbGlua2luZyBoYXJkY29kZXMKIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4K aGFyZGNvZGVfZGlyZWN0PQoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUk c2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKIyBESVIgaW50byB0aGUgcmVz dWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMK IyAiYWJzb2x1dGUiLGkuZS4gaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAkc2hs aWJwYXRoX3ZhciBpZiB0aGUKIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KaGFyZGNvZGVfZGly ZWN0X2Fic29sdXRlPQoKIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcg ZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgojIGludG8gdGhlIHJlc3VsdGluZyBiaW5h cnkuCmhhcmRjb2RlX21pbnVzX0w9CgojIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBB VEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCiMgaW50byB0aGUgcmVz dWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0KCiMgU2V0IHRvICJ5ZXMi IGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMg RElSCiMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFu ZCBleGVjdXRhYmxlcyBsaW5rZWQKIyBhZ2FpbnN0IGl0LgpoYXJkY29kZV9hdXRvbWF0aWM9 CgojIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRl bnQgbGlicmFyaWVzCiMgdG8gcnVudGltZSBwYXRoIGxpc3QuCmluaGVyaXRfcnBhdGg9Cgoj IFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBk ZXBlbmRlbmN5IGxpYnJhcmllcy4KbGlua19hbGxfZGVwbGlicz0KCiMgU2V0IHRvICJ5ZXMi IGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgphbHdheXNfZXhwb3J0X3N5bWJv bHM9CgojIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCmV4cG9ydF9z eW1ib2xzX2NtZHM9IiIKCiMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGlu IHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KZXhjbHVkZV9leHBzeW1zPSIiCgojIFN5bWJvbHMg dGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KaW5jbHVkZV9leHBzeW1zPSIiCgojIENv bW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJp ZXMpIHdpdGggdGVtcGxhdGVzLgpwcmVsaW5rX2NtZHM9IiIKCiMgQ29tbWFuZHMgbmVjZXNz YXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KcG9zdGxpbmtfY21kcz0iIgoK IyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCmZpbGVfbGlzdF9z cGVjPSIiCgojIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBh biBleGVjdXRhYmxlLgpoYXJkY29kZV9hY3Rpb249CgojIFRoZSBkaXJlY3RvcmllcyBzZWFy Y2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4K Y29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSIiCgojIERlcGVuZGVuY2llcyB0byBwbGFjZSBi ZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bwojIGNyZWF0ZSBh IHNoYXJlZCBsaWJyYXJ5LgpwcmVkZXBfb2JqZWN0cz0iIgpwb3N0ZGVwX29iamVjdHM9IiIK cHJlZGVwcz0iIgpwb3N0ZGVwcz0iIgoKIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2Vk IGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwojIGEgc2hhcmVkIGxp YnJhcnkuCmNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0iIgoKIyAjIyMgRU5EIExJQlRPT0wg VEFHIENPTkZJRzogR0NKCgojICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IFJDCgoj IFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCkxEPSIiCgojIEhvdyB0byBj cmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCnJlbG9hZF9mbGFnPSIiCnJlbG9hZF9j bWRzPSIiCgojIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUu Cm9sZF9hcmNoaXZlX2NtZHM9IiIKCiMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4K Q0M9IiIKCiMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/CndpdGhfZ2NjPQoK IyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgpub19idWls dGluX2ZsYWc9IiIKCiMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcg bGlicmFyeSBvYmplY3RzLgpwaWNfZmxhZz0iIgoKIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBm bGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgp3bD0iIgoKIyBDb21waWxlciBmbGFnIHRvIHBy ZXZlbnQgZHluYW1pYyBsaW5raW5nLgpsaW5rX3N0YXRpY19mbGFnPSIiCgojIERvZXMgY29t cGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KY29tcGls ZXJfY19vPSJ5ZXMiCgojIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5n IHNoYXJlZCBsaWJyYXJpZXMuCmJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0KCiMgV2hldGhlciBv ciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0 YXRpYy4KYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPQoKIyBDb21w aWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgpleHBvcnRfZHluYW1pY19m bGFnX3NwZWM9IiIKCiMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0 cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgp3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iIgoK IyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBk aXJlY3RseS4KY29tcGlsZXJfbmVlZHNfb2JqZWN0PSIiCgojIENyZWF0ZSBhbiBvbGQtc3R5 bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCm9sZF9hcmNoaXZlX2Zyb21fbmV3 X2NtZHM9IiIKCiMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxp bmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgpvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5 bXNfY21kcz0iIgoKIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUu CmFyY2hpdmVfY21kcz0iIgphcmNoaXZlX2V4cHN5bV9jbWRzPSIiCgojIENvbW1hbmRzIHVz ZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRp bmcKIyBhIHNoYXJlZCBhcmNoaXZlLgptb2R1bGVfY21kcz0iIgptb2R1bGVfZXhwc3ltX2Nt ZHM9IiIKCiMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgp3 aXRoX2dudV9sZD0iIgoKIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0 aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KYWxsb3dfdW5kZWZpbmVkX2ZsYWc9 IiIKCiMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgpub191bmRl ZmluZWRfZmxhZz0iIgoKIyBGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFy eSBkdXJpbmcgbGlua2luZy4KIyBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9l cyBub3QgZXhpc3QKaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iIgoKIyBXaGV0aGVyIHdl IG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50 LgpoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIiCgojIFNldCB0byAieWVzIiBpZiB1c2lu ZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwojIERJ UiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgpoYXJkY29kZV9kaXJlY3Q9CgojIFNldCB0 byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5n IGhhcmRjb2RlcwojIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVz dWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwojICJhYnNvbHV0ZSIsaS5lLiBpbXBvc3Np YmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICRzaGxpYnBhdGhfdmFyIGlmIHRoZQojIGxpYnJh cnkgaXMgcmVsb2NhdGVkLgpoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9CgojIFNldCB0byAi eWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMg RElSCiMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KaGFyZGNvZGVfbWludXNfTD0KCiMg U2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5n IGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgpoYXJkY29kZV9z aGxpYnBhdGhfdmFyPQoKIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGli cmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKIyBpbnRvIHRoZSBsaWJyYXJ5IGFu ZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAojIGFn YWluc3QgaXQuCmhhcmRjb2RlX2F1dG9tYXRpYz0KCiMgU2V0IHRvIHllcyBpZiBsaW5rZXIg YWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKIyB0byBydW50aW1l IHBhdGggbGlzdC4KaW5oZXJpdF9ycGF0aD0KCiMgV2hldGhlciBsaWJ0b29sIG11c3QgbGlu ayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgpsaW5r X2FsbF9kZXBsaWJzPQoKIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUg cmVxdWlyZWQuCmFsd2F5c19leHBvcnRfc3ltYm9scz0KCiMgVGhlIGNvbW1hbmRzIHRvIGxp c3QgZXhwb3J0ZWQgc3ltYm9scy4KZXhwb3J0X3N5bWJvbHNfY21kcz0iIgoKIyBTeW1ib2xz IHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgpl eGNsdWRlX2V4cHN5bXM9IiIKCiMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9y dGVkLgppbmNsdWRlX2V4cHN5bXM9IiIKCiMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5r aW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCnByZWxp bmtfY21kcz0iIgoKIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5n IHByb2dyYW1zLgpwb3N0bGlua19jbWRzPSIiCgojIFNwZWNpZnkgZmlsZW5hbWUgY29udGFp bmluZyBpbnB1dCBmaWxlcy4KZmlsZV9saXN0X3NwZWM9IiIKCiMgSG93IHRvIGhhcmRjb2Rl IGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCmhhcmRjb2RlX2Fj dGlvbj0KCiMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hl biBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5Lgpjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9 IiIKCiMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVj dHMgYmVpbmcgbGlua2VkIHRvCiMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCnByZWRlcF9v YmplY3RzPSIiCnBvc3RkZXBfb2JqZWN0cz0iIgpwcmVkZXBzPSIiCnBvc3RkZXBzPSIiCgoj IFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGls ZXIgd2hlbiBsaW5raW5nCiMgYSBzaGFyZWQgbGlicmFyeS4KY29tcGlsZXJfbGliX3NlYXJj aF9wYXRoPSIiCgojICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBSQwo= --------------G8KF08EbUdf0hPn9ptngmrht Content-Type: application/pgp-keys; name="OpenPGP_0x6570EA01146F7354.asc" Content-Disposition: attachment; filename="OpenPGP_0x6570EA01146F7354.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBGFMu5ABEACpFrPCKpfsTSl4svqi91Hsf8gGtdKwndgXqMPJNqBXEJCCwiiU PnS68wNWae54So04zVAcXewFdM36GypUGep5bhdgvbVKaDCrhNRdAoZ0VAywgU9C DCAa3v8eXUSrlGonk/ygjLIMnkOSjIMls4+z0FOpvsd1IcgcBDU5S6DSAF/Sb8w9 bF2yD7f5RaLN6++EJEO2Bp+8v4qCJEUGzi5QJKXHVUTGiTirx50eLIkw0HseLVOi JoU0NRRgzK/q04+X/NuOAPnZm5K3GOJUmKmG7M2tdMhhGT7UjF3XiI0MwydGIrPU 1T1OdPBnXv6ajRYzLgIZl0GsGeFo5qFaFmRtNO7nCGi/5XtivM1WvbqXIQmsAmpm 8N/uEcPcuP+0+7s1o0JC+c4nbHlQyvUFSZVgbZQ+mSn6GXRPNfL7AeDSINXXvXDv 5vkHN+FbFggx5nWg8J5a33hxbnZoR/qTfDBQHF3mJMF3lesXibN+oLvwOVtlIffK c4jwjLKL40644eQfbhHjCE1AXGQjUGCE5vAkCxEqWH2nQbXIedijQD/5mufaCQX3 Rl314FBfyV1b9rIHxJYRLXHT83+om7y5ncYI5sdoY7/g/Ggmi0PuuUicax/ejOx4 nNtDgDxlhCgOVm6qpmX9kyEZj0+vAodQjMrx3JKgojBdbusl4C5bWIgeRwARAQAB zS9JbGVhbmEgRHVtaXRyZXNjdSA8aWxlYW5hZHVtaTk1QHByb3Rvbm1haWwuY29t PsLBlAQTAQoAPhYhBPomynhL4YiSfyK5n2Vw6gEUb3NUBQJhTLuQAhsDBQkDwmcA BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEGVw6gEUb3NUCC4P/AiRUDzkEm8E WdvGQ9CkUYPAOARr19w04+N+86XZU8owULTkys81Wv80Wz48Q6IA3RASjHuyNtOQ a3TmoGsRYovIqKWQY6hIWBY7radPldSnbqXDp0mbwxSFVsCV2m2YqZKQpnKTR7b5 N6KgKKDXDLK0ES5CO1DAdvTg33WOonSNVpP+14R1bg9L685nOckK+TP1kQq91W+0 QUeEfS7BqdU/Znv39sVVMUkXQiWK441rQ1wcHvD32iiSoqnFQxtrdTwaglpv1/Y6 MDsnnwrLX3Bsq0vIL8CYVwVqy309/rtq3tpL1dw9lWaEA0sBNBMfOvBBJ1GOUpnE f6k6dlhHSoDDndbODXBEAgXnbz6JKqPA+NAJfnccnvcb7G2KnWtvG/GbWQia7S1Q lRi18GTDfX143uApm++/bFkGy/m3UjocGxyx9xh/wpzKuTlqBvxAX/cSR7hw3imC 5t2t6fmgIL9ZTED5FEyEgM1+zi/OfrPyqxKs/Qo8ZxoqMuZMHN4n9pJCtOvLT72H PUNxfRKiqjTj9hgQUm+sc8vfYXGapLY7Ybi4VrNPtGUxH/iSRf29sYc7bQlIoXiW KqcPjPuI/IZ8qMrNSloBgGeMuJ4iQn5shIZWbbgnJf5LcSO3SaPsLH80tnfimhkK tj6+MMe9afss26DcNcw4mT3IljkSRjLxwsGUBBMBCgA+AhsDBQsJCAcCBhUKCQgL AgQWAgMBAh4BAheAFiEE+ibKeEvhiJJ/IrmfZXDqARRvc1QFAmQIi3IFCQhfalcA CgkQZXDqARRvc1QNYw//fohzqHChHrOl60maI533r+wIMaFnqAPS6+S4mlV5qCcy t2CEvvtQ4ggjg7cjm/hKbDBGnOAl0/Cq2QVo+SNJGGBmdvPgCjC8o6Dc4KaFW8wO H2OYMLWm1kzxM/aO7oEWNS4gi3mM1eb2yiT4Uk6jtEjQ/7gEc8B2PXWjvt9gw2RF 0rJDT9EMM5p/hSuAjfTOp4BfnKX5YM5G01iH7HPpGl+IAr6bcd30qoGmH/gpwWrK 8eMYQa3RkKtMFFLQpd7i4yGbQwg6XeY4e2xXKccCHR6tyhKqTyerZQVG1D95xHq5 mipz86eXArZSozhpaf/SlplI/YHqo38R94oOqSA13aBmIQf+PKR+DiKaR4/jMt38 3pH+RK80ucNS8ueMWaDj40r2oixbQ9A0uSN5tcq//IprT+ax2iuBwQEE3keZjJB7 UGNqXTnvEW52+hrUpqL1G4YNGnQBuL56iIlAqmnKS0VdXWOxI2U+En6AjIcRAqLZ Gptv90Nc33mfe96Yka5dBWdk4oi/FNu/JnKAcZQPYkByaA8PQYXsnCmgJCQj/8aC RPVddj83nHAE9AEI3n9aOD7jsR1gfYLwOw3fGJqx4MZWcHBAIUF/36FIHQ+ygQDT +b39MpdENCW4q14GfAAcY9nsj2eW4YYRdAzY3YiqvwrajuP57pu+hOXimI2qEp/N MElsZWFuYSBEdW1pdHJlc2N1IDxpbGVhbmFkdW1pdHJlc2N1OTVAZ21haWwuY29t PsLBlAQTAQoAPhYhBPomynhL4YiSfyK5n2Vw6gEUb3NUBQJi/OUPAhsDBQkDwmcA BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEGVw6gEUb3NUnHIP/j4W1IhIfdoK 7ZoPO2hELJC0vcCJGB6a0mVP3g3w6EalKGQsA4P8btKDNdjrZqP6OsN99RWenCCY ASndKGq9SmYIe7Bnrr98xB528G3Bo271OCAKT1IauJ272NtMvqyzvgNVXTtZyzKM /sX+l36QRlRbVi5VxpdVll70a1U7YxusvzBtFeWrdbVZ7vAY3kSrX7tXjZ8Nj8C3 UiPJdCguPBU+Fjzcs6gfJ7ngcQ1QHrjokMFBGU8nLcHyKrir1b2ltZ02fW+Tke1E ViSQXIvF8a85OqklVxKDFu9EpZEg1lZo84UNGZDJpblpSbRnfQoBQxbmSp4u4nVR lYVNqzKNkf/7w+xukE18LxFZ2zqeVt1WNOauDbcTWmoM4mQy70q79uiT6pTjEh/m W1R74+vbXt6QKSxhV1YTDyYebumMGu94m9G5qwTg6/w0VZGnyV7ywqwKLztKHOBJ wzP6e0jhS41bTShMlRuYo8lOgAenKuX/0EKdTonf3o+mp+qrSOlkVBeGiSjhv/Ts qAiebOhJE1utw1iQpHEzKZGnm40f67RgSAUgKiZawCkVPtQcn2vDAfxb/r08/dfK NCcXkGIsIQPclRaShCJFBaOXFO6G1jVE2jyj3bgXxUy/x9O8F3MebacKOzRROoL4 DSNp7KTil8kJq4EoqxSJJQMnhV7obSm3wsGUBBMBCgA+AhsDBQsJCAcCBhUKCQgL AgQWAgMBAh4BAheAFiEE+ibKeEvhiJJ/IrmfZXDqARRvc1QFAmQIi2cFCQhfalcA CgkQZXDqARRvc1RkoRAAkJMTQURsLPQLM0bSm5wnCufwe02wfPwLERfkG6+g+uln uTZZIy6dmbh6TQdLt885V1D6hPOdbcaYTWUwDOC9BIJlZhcGdeNNhzJW03vnSI6H kJ4rbsUBNlE+D1sJ4akRD1+zP1tkOu176uW966Qlpmt8LZxQi7vQoxjHKEQ/pJlQ yvypXetxOeaqdUWz7Bgiw96dUJ+3lt8frICvYh/tDn7bv6+tTvvndcw825zoJr5R JO8loNvkCA0KaszjSd2t8nv/0moX2s6OF8CA4pgwuC/y2ZONBy4DhzLzfZrUQjCX CZqkO11nvfarWgTBsSgauZ/GZAj1QPOrhMgGyS1HZ4ktM8A26XBNJzkhzGCrFt0f g/WyZBA8TZSn4CKogoK1143bvX0RBsVJt42yZQ+p6ihP8m1rSdAREtgwpjIqaa5u fnEllokOK4GiQX2NmMcDTBdSPUF1ygKNMVr74xQf426V+54nGMfq7UVeJr8buhMm mUgnwCozKD6nS0/tZD+FBs1ewsR//0Ij84loMkMlK+aPr4VuRwG58Riw57i/ulpm +XBlw6+90e0bOz3wQC2knD+vuTKyfYTU7ersMCe9FXX1PaN1BCJxjn3ZwW1nOcjR ZLbjvMlCo4C4w0dUV6opbPgC1GtiOYn47H9nZUIZgrAKvT5LTfTfvr5Pk3cwXDTO wU0EYUy7kAEQAMR9kYA2RQOavRtsHys7IoPw8/ysfR/TBi2siRLOTDSCb9e3Rvpj JoI0ZODtEMIRs5oA/JwXtQCV6hOoZuitjKV2o2/wff7yBTYDUPSiGk7SHoZBtq8F 8Dwy374D2C0cPnx9IAFW0tZgw0a6O0Sa/KZe5vJout1BGUMZKhdyGdaQ+7snwnD5 dFd2+XVsKOVJMu4STxBb4/MyWgUumHZ2fFrXiMSEfHhzD8ItlkCycJ/C1KhtjgzC DJKUKO9X9nQqKQkqtVFNgWPyTGoG6VF3pNxSIzSCqfSlI9xRZFBb5aion/pAfTOj /pZQVWNJwwonSute1ejScGiVGc0YBoporltkMfUMFh2HAW4miuhB2nsOYJFcD5TC SSYcMBQJT32E9E4bFZf5KWjo6bcg20Vschi2nPpy171WouhJSTO+/e2Vm8HWYWu0 2FAOmNCT69XIlXBaYqbJV5Dis6tBozz0rkPfkOeyxlqCV9Gda62rwEu7sxYTWzTI EHm5yeXn7zETvAwg1FoiJ9tlQUd7Hi95QUvLH9D4/pUQgRyfLrCX/zJH1mYgLkMk NfxJw2qP98Dw9KazgYMdPemxTFp7gPmHwWHJ2+kgEqWMGBk6mVP76ejNTkVp78XV 7xGBH3qvkWm2qr2eDDdHg++V+yvp24VoZVrjo1XefROe1DdNfIHQtg1jABEBAAHC wXwEGAEKACYWIQT6Jsp4S+GIkn8iuZ9lcOoBFG9zVAUCYUy7kAIbDAUJA8JnAAAK CRBlcOoBFG9zVEq8EACD/7XohTdF/jfb85lh7/6vFD1XRh0UbSg9cm+b9bd7C3uf bIl3AdI99SXPWkiRv+J8rMVuW78wtOVa/nFcxH8lqC+z1rpQxXkLYSapVsx7dnww ize1hg9qXRysl+iYqGXXaRpDyRSoEMJailLv3T6URofa4qEJ3ROpWBfqmV/BUBs0 sqCKXsaRPZ00/CPiJMybP5lyBnOdfYjjYcQS26NEXXL6qr/uHcs7InAN1xxoOcCO YE4jfsg2eXJobwWc57rGHEkAR4cvAhwPPtENHhkK0Rd+EIFMrsyjAthUJsmgSSaX FIo2ubBII4VdCbGqVT4+szfTVHxUbuC1ITUOggqPuXy1bZcWHUyW/VhbrfBjbVN6 QF5v2J+P/2KK5bHCupbpyxgeJk45BTWdrixWdFM369ZE9Jh1LF811E+O0VAlnWPH JKzbD6eKFjvTZ/Vb9Rq5+sjOw2U873AhKxH5xSfmGyPrkzDI6KM5lLfGVG1qH+NZ YRMWU5WDP+VNREdmVxvTwnCVorawnawVvfikfL5YFogvumJHl1Z7SZlmqjrL4yQk nCdFtWMTuZsjB9671X0E64u2lC3hGxyq+81OHUtaK11knr8XcYBRknKsVA2UvGlL zuSVXnvmrf0qVz6PijECOCYMYTsZWJgMOPAC5oTA+jYSoiTyk0ZYcNrH550bhcLB fAQYAQoAJgIbDBYhBPomynhL4YiSfyK5n2Vw6gEUb3NUBQJkCIuUBQkIX2qEAAoJ EGVw6gEUb3NU6qMP/R80Q4G/CVLsrXMEWhiePIHmPYfLL1guvLNi/K3YocMFSloU 6QjyP2Lsceh5Sz5NB/+xr6p6nGpmc5FEGxr20SoXyEfJCNWXNR+4znkSzkRH1FJ+ QOYdlZCFaGGaQzTkji47heoW9m9to/dGv8fKa34VLo7wzvD3FyYdF27lSGNqSiIP NFS8kGS5m0fVDHP2jgFjiWjcXRUG78KzH4Yansse5KTPj2dm8zb+o30jfd8dM1cc d3FavQ74kjrbTubQWsStTNMBm9ML7vSoirs5P3d8NNLHSMDtlZfzNfWKkxthZY1N 86sMOoecaOl8rfBIKrXMkWJXRDoz6o8Xrd/+JeByDBGuM5jAMT0mQ5ckBwFN5Q7k et0c/YomKZQ3ul3V44eS8hmizeWNM2r4x3DVJa+4tsXeTLSWWX79z276SqSxQveK fnJh0ak8q0tqJAc6iflvUjIIW5c7aSfcul+u6/8S0T74nEHfBhpBjQm9BEumt1sS fXGYO77LXemuYDWpe2v0BO0j5hBssYnJ/hUDXgy2+bMJXzohJqYEjSs9gdTDskD6 x9Z1sTHutikUw/g4gxxRThH2l4YhBb6kuwct9xzecT2/PVzXkjnt+gwQ6PHdyTWj 0//LZCKJVquluG3myyCMALInBkJ0dzwXKH0VHe8PYt18tEGGBkKUVsxBXBBe =3DfGTx -----END PGP PUBLIC KEY BLOCK----- --------------G8KF08EbUdf0hPn9ptngmrht-- --------------APxq07q3JGo8sCj56eXYBlnz-- --------------MZJQj7lPfs0pCrrVvMOcsSBr Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEE+ibKeEvhiJJ/IrmfZXDqARRvc1QFAmcQGGAFAwAAAAAACgkQZXDqARRvc1QA 8Q/+KX7KLt/mjJ2s0GuM88BV1MbL7qwxUwUuHhFyYRPzfmtJBo0t67QA/F/ZbgjDvO/r29zc15U7 QATkZpGozYDFPyVs1oOBA1KW5Ixwfp5w2JD74LIkGRqfdruXkjzG4evZI+g/VLNfRLiRrS7lZ3ty PqhCE/SVnoLjvAKNelLWAb52M6dG06MAmtcNgOzomfkrZad5lmIUX/awefr80ymkb1AG8qPbfGiR awG/gfdofBMzIeV+fTm69pIlm3GNxcOXwRzvQ/mz7GBkb8a4Fw+tjNoYXlMGgvaxSoQuI+upZTOJ 8v1zru2X5MNghtHU3dk1YTtsWwn+b+B2s88w/KVhpIhOBu2OxTkUxxpoRqw57Iy6eg5prw1DGzMS M/L62rtYMYCPjtYQEqCbQZktgXfZLqTptvXZ1fMOeFQQYSPL1zj3scS0zgXOlX89UzzVtuAHnGQR i6e/SJh5PtZk3i5CUYL2cyXfLWhCk16dynfk3PvUXb5QsWVjymePn3E71e4sfjdcfICXTyG72sN3 mWgaBSOxUy7uyHNOC6cePFGhJf7HshNJUh5Ut4R1Q8CCljSaMWpX8W3lrzDQ2L+ZJmYcCVRz5CTY Jgf2yCxtnEdsWO5O1N/TFOf6dTMrWB8mfBJLKAv5QJGQGzEzrljZrj/DbbKDwxrJJJKx/8AYmaah b7w= =LKuP -----END PGP SIGNATURE----- --------------MZJQj7lPfs0pCrrVvMOcsSBr--
bug-libtool@HIDDEN
:bug#9492
; Package libtool
.
Full text available.Received: (at 9492) by debbugs.gnu.org; 13 Oct 2024 14:02:30 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Oct 13 10:02:30 2024 Received: from localhost ([127.0.0.1]:51985 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1szzB0-0004Y8-CE for submit <at> debbugs.gnu.org; Sun, 13 Oct 2024 10:02:30 -0400 Received: from mail-pl1-f172.google.com ([209.85.214.172]:55488) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <maxim.cournoyer@HIDDEN>) id 1szzAy-0004Xr-Pr for 9492 <at> debbugs.gnu.org; Sun, 13 Oct 2024 10:02:29 -0400 Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-20caea61132so17390565ad.2 for <9492 <at> debbugs.gnu.org>; Sun, 13 Oct 2024 07:02:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728828067; x=1729432867; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=uFjA8ew4xI7YNiGdoOlSKZ+IejkMV/EgkAR+NIDGADo=; b=D5C8GYKlIoNMJgyQtWcTCTIhWmhzr0NYGOnNGnQzkMW36ZrWNmB79t5VRhx6H9kyFE l5LDZRO7yvtMJ21GGpbDSonspz502CtjaaR3Rx40r5A9L/9gMYrGnt5dVHY9K7E6sm5x LVPkg015Wk79ItQMtaENEV8025uZrNA4EosUfAUuE7iZb8CWKQszxBnfeXH9ro5UT1eU Rv96ZlNC9RJ3LJjsQy4yAbIK8Jg81N3tGs3ZlJUrYv4Edc5AtjCU/lDeeAuq235RPWw2 xwjJWjzSNufANPTLltOv9F+ybcmlvQbzy7J6CYepsMK6EpXGB3JM7sdxP13ogelTKBB8 hcaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728828067; x=1729432867; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=uFjA8ew4xI7YNiGdoOlSKZ+IejkMV/EgkAR+NIDGADo=; b=aCesxxK1VQG49IChTz0u2PSulPIhVSKEzYUaL7pCuIaFGFowP6xDB2q4xtdG78uXhD wKMr4Ifzp1896VAmjBkgz1TXApfTZfvlCpL6Vig5zv6LWL+rJ2MIOTOnKeMk6eU9X+xL 5D9UsGWLLklngz8gs/m8OumIGZFG8TuLEMtFwolNw5xDDh1NQxOA82newNcha0uE8s9a 8EzAI3CbX8HE8RVpesRmWQKnQI6bBta6rWOu0WQfik/KlUCiF0M9Kf3gcExbGNLI73xX VJWydIW1ACUrCuWs+W+GlKIN4QdPgxUZWHQampysyo9oAUL7OcspNVWUfOQrUSNGyxdx /F+Q== X-Gm-Message-State: AOJu0YzmT1aO+iYfeYeRL7xJhj9QzPN9oq6TdN0t4Yc3zWh70AKLExqS /6/z6HU4Xn/R/5WVvdk27uhtVZ3rA2fuwNAW1ODyXm4B8e+uvMGS X-Google-Smtp-Source: AGHT+IHM5YbbUclOqzJK3D0BIQ4UbfQ5iX1rELXLprXu0AHJZXH4Kvd2vqptW9VdCSN6+94c2HpT6A== X-Received: by 2002:a17:902:e951:b0:20b:59be:77b with SMTP id d9443c01a7336-20cbb1a9654mr85691265ad.6.1728828067016; Sun, 13 Oct 2024 07:01:07 -0700 (PDT) Received: from terra ([2405:6586:be0:0:c8ff:1707:9b9:af89]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-20c8bc0c9f5sm50437885ad.82.2024.10.13.07.01.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 13 Oct 2024 07:01:06 -0700 (PDT) From: Maxim Cournoyer <maxim.cournoyer@HIDDEN> To: 9492 <at> debbugs.gnu.org Subject: Re: bug#9492: cannot override CC when using system copy of libtool ("The wrong-gcc problem") In-Reply-To: <20120513041429.GA24606@burratino> (Jonathan Nieder's message of "Sat, 12 May 2012 23:14:29 -0500") References: <CAFRJ5K1hD4bQd-d+WRUa7eXHVtV6khvtfqcwGFTJ83S04kuc7Q@HIDDEN> <20120513041429.GA24606@burratino> Date: Sun, 13 Oct 2024 23:01:02 +0900 Message-ID: <87wmicgl0h.fsf_-_@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 9492 Cc: Jonathan Nieder <jrnieder@HIDDEN>, =?utf-8?B?0KDRg9Cx0LXQvSDQkdGD?= =?utf-8?B?0YfQsNGG0LrQuNC5?= <ruben.buchatskiy@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) Hello, Just a heads-up that this old bug is still relevant. It means that one cannot use libtool stand-alone (without Autotools) and expect cross-compilation or even just switching temporarily compilers (e.g. from 'gcc' to 'clang' via CC to test something). Heres' what the failure look like: --8<---------------cut here---------------start------------->8--- libtool: link: gcc -shared -fPIC -DPIC build/obj/Core/.libs/apu.c.o build/obj/Core/.libs/camera.c.o build/obj/Core/.libs/cheats.c.o build/obj/Core/.libs/debugger.c.o build/obj/Core/.libs/display.c.o build/obj/Core/.libs/gb.c.o build/obj/Core/.libs/joypad.c.o build/obj/Core/.libs/mbc.c.o build/obj/Core/.libs/memory.c.o build/obj/Core/.libs/printer.c.o build/obj/Core/.libs/random.c.o build/obj/Core/.libs/rewind.c.o build/obj/Core/.libs/rumble.c.o build/obj/Core/.libs/save_state.c.o build/obj/Core/.libs/sgb.c.o build/obj/Core/.libs/sm83_cpu.c.o build/obj/Core/.libs/sm83_disassembler.c.o build/obj/Core/.libs/symbol_hash.c.o build/obj/Core/.libs/timing.c.o build/obj/Core/.libs/workboy.c.o -Wl,-soname -Wl,libsameboy.so.0 -o build/lib/.libs/libsameboy.so.0.0.0 /gnu/store/gpq3h81bzjpirwnc0fzwsph788b9rwn4-libtool-2.5.3/bin/libtool: line 10778: gcc: command not found make: *** [Makefile:832: build/lib/libsameboy.la] Error 127 make: *** Waiting for unfinished jobs.... error: in phase 'build': uncaught exception: --8<---------------cut here---------------end--------------->8--- That's when building some Make-based software that calls libtool directly. Here, the libtool version was built with GCC (has baked CC="gcc" variable around line 326), which is what it uses when linking with its $archive_cmds variable defined a bit later (line 368): --8<---------------cut here---------------start------------->8--- archive_cmds="\$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \$wl-soname \$wl\$soname -o \$lib" --8<---------------cut here---------------end--------------->8--- Seems this should be able to fix? Check for environment CC, if not set, defaults to gcc? Would this simple fix be enough? -- Thanks, Maxim
bug-libtool@HIDDEN
:bug#9492
; Package libtool
.
Full text available.Jonathan Nieder <jrnieder@HIDDEN>
to control <at> debbugs.gnu.org
.
Full text available.Received: (at submit) by debbugs.gnu.org; 13 Sep 2011 16:23:20 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 13 12:23:20 2011 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1R3VlW-0002pE-By for submit <at> debbugs.gnu.org; Tue, 13 Sep 2011 12:23:20 -0400 Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from <ruben.buchatskiy@HIDDEN>) id 1R3TLJ-0008Ab-GX for submit <at> debbugs.gnu.org; Tue, 13 Sep 2011 09:48:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <ruben.buchatskiy@HIDDEN>) id 1R3TGu-00027W-0A for submit <at> debbugs.gnu.org; Tue, 13 Sep 2011 09:43:38 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=BAYES_00,BODY_8BITS, FREEMAIL_FROM,HTML_MESSAGE,MIME_CHARSET_FARAWAY,RCVD_IN_DNSWL_LOW, T_DKIM_INVALID, T_TO_NO_BRKTS_FREEMAIL autolearn=unavailable version=3.3.1 Received: from lists.gnu.org ([140.186.70.17]:39035) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ruben.buchatskiy@HIDDEN>) id 1R3TGt-00027S-Qa for submit <at> debbugs.gnu.org; Tue, 13 Sep 2011 09:43:31 -0400 Received: from eggs.gnu.org ([140.186.70.92]:45629) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <ruben.buchatskiy@HIDDEN>) id 1R3TGp-0002tv-2M for bug-libtool@HIDDEN; Tue, 13 Sep 2011 09:43:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <ruben.buchatskiy@HIDDEN>) id 1R3TGk-00025f-1l for bug-libtool@HIDDEN; Tue, 13 Sep 2011 09:43:27 -0400 Received: from mail-gx0-f176.google.com ([209.85.161.176]:50091) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ruben.buchatskiy@HIDDEN>) id 1R3TGj-00025R-T5 for bug-libtool@HIDDEN; Tue, 13 Sep 2011 09:43:22 -0400 Received: by gxk7 with SMTP id 7so526287gxk.35 for <bug-libtool@HIDDEN>; Tue, 13 Sep 2011 06:43:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; bh=iVIrgfPDQiKFx9Dwmi9hg+uJg/S8IzN3AekDzEj/CJU=; b=Rd4HpLVXifpLI/EI8QUKc3jUPCCnu6SUvY2k1nB+WpeA9Yf005xeprNgc2XgJbFMV8 RaCdmb/UrNIce47souJIGeM5Ekrc2RuB/YI0TlWpSxPt7s/fwdpxe16t/K0xk+gjga9i UVUzct4ngspJQPgOKHm0le15WQG19A5VW9l+I= Received: by 10.236.77.133 with SMTP id d5mr15720872yhe.75.1315921401102; Tue, 13 Sep 2011 06:43:21 -0700 (PDT) MIME-Version: 1.0 Received: by 10.147.82.11 with HTTP; Tue, 13 Sep 2011 06:43:01 -0700 (PDT) From: =?UTF-8?B?0KDRg9Cx0LXQvSDQkdGD0YfQsNGG0LrQuNC5?= <ruben.buchatskiy@HIDDEN> Date: Tue, 13 Sep 2011 17:43:01 +0400 Message-ID: <CAFRJ5K1hD4bQd-d+WRUa7eXHVtV6khvtfqcwGFTJ83S04kuc7Q@HIDDEN> Subject: The wrong-gcc problem To: bug-libtool@HIDDEN Content-Type: multipart/mixed; boundary=20cf30051208aa413d04acd2d31f X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.17 X-Spam-Score: -5.9 (-----) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Tue, 13 Sep 2011 12:23:17 -0400 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Sender: debbugs-submit-bounces <at> debbugs.gnu.org Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org X-Spam-Score: -5.9 (-----) --20cf30051208aa413d04acd2d31f Content-Type: multipart/alternative; boundary=20cf30051208aa413a04acd2d31d --20cf30051208aa413a04acd2d31d Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: quoted-printable Hello! I'm building Sqlite 3.7.7.1 with libtool 2.4. I'm doing the cross compile. Configuring sqlite with CC=3D"my compiler". In compilation mode everything is ok, but when I link, libtool tries to call the native gcc (in spite of the fact, that CC=3D"my compiler", not native). *~/libtool-2.4/libtool* --tag=3DCC --mode=3Dlink * /home/ruben/x-tools/gcc-trunk-clean/bin/arm-unknown-linux-gnueabi-gcc* -O= 2 -mcpu=3Dcortex-a8 -mtune=3Dcortex-a8 -mfloat-abi=3Dsoftfp -mfpu=3Dneon -mth= umb -flto -DSQLITE_OS_UNIX=3D1 -I. -I./src -I./ext/rtree -D_HAVE_SQLITE_CONFIG_H -DNDEBUG -DSQLITE_THREADSAFE=3D1 -DSQLITE_OMIT_LOAD_EXTENSION=3D1 -o libsqlite3.la alter.lo analyze.lo attach.lo auth.lo backup.lo bitvec.lo btmutex.lo btree.lo build.lo callback.lo complete.lo ctime.lo date.lo delete.lo expr.lo fault.lo fkey.lo fts3.lo fts3_aux.lo fts3_expr.lo fts3_hash.lo fts3_icu.lo fts3_porter.lo fts3_snippet.lo fts3_tokenizer.lo fts3_tokenizer1.lo fts3_write.lo func.lo global.lo hash.lo icu.lo insert.lo journal.lo legacy.lo loadext.lo main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo memjournal.lo mutex.lo mutex_noop.lo mutex_os2.lo mutex_unix.lo mutex_w32.lo notify.lo opcodes.lo os.lo os_os2.lo os_unix.lo os_win.lo pager.lo parse.lo pcache.lo pcache1.lo pragma.lo prepare.lo printf.lo random.lo resolve.lo rowset.lo rtree.lo select.lo status.lo table.lo tokenize.lo trigger.lo update.lo util.lo vacuum.lo vdbe.lo vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbetrace.lo wal.lo walker.lo where.lo utf.lo vtab.lo -lpthread \ -rpath "/home/ruben/condor/testings/sqlitesrc/sqlite-src-3070701/build/lib= " -version-info "8:6:8" libtool: link: *gcc* -shared -fPIC -DPIC .libs/alter.o .libs/analyze.o .libs/attach.o .libs/auth.o .libs/backup.o .libs/bitvec.o .libs/btmutex.o .libs/btree.o .libs/build.o .libs/callback.o .libs/complete.o .libs/ctime.o .libs/date.o .libs/delete.o .libs/expr.o .libs/fault.o .libs/fkey.o .libs/fts3.o .libs/fts3_aux.o .libs/fts3_expr.o .libs/fts3_hash.o .libs/fts3_icu.o .libs/fts3_porter.o .libs/fts3_snippet.o .libs/fts3_tokenizer.o .libs/fts3_tokenizer1.o .libs/fts3_write.o .libs/func.o .libs/global.o .libs/hash.o .libs/icu.o .libs/insert.o .libs/journal.o .libs/legacy.o .libs/loadext.o .libs/main.o .libs/malloc.o .libs/mem0.o .libs/mem1.o .libs/mem2.o .libs/mem3.o .libs/mem5.o .libs/memjournal.o .libs/mutex.o .libs/mutex_noop.o .libs/mutex_os2.o .libs/mutex_unix.o .libs/mutex_w32.o .libs/notify.o .libs/opcodes.o .libs/os.o .libs/os_os2.o .libs/os_unix.o .libs/os_win.o .libs/pager.o .libs/parse.o .libs/pcache.o .libs/pcache1.o .libs/pragma.o .libs/prepare.o .libs/printf.o .libs/random.o .libs/resolve.o .libs/rowset.o .libs/rtree.o .libs/select.o .libs/status.o .libs/table.o .libs/tokenize.o .libs/trigger.= o .libs/update.o .libs/util.o .libs/vacuum.o .libs/vdbe.o .libs/vdbeapi.o .libs/vdbeaux.o .libs/vdbeblob.o .libs/vdbemem.o .libs/vdbetrace.o .libs/wal.o .libs/walker.o .libs/where.o .libs/utf.o .libs/vtab.o -lpthread -O2 -mcpu=3Dcortex-a8 -mtune=3Dcortex-a8 -mfloat-abi=3Dsoftfp -mfpu=3Dneon -mthumb -flto -Wl,-soname -Wl,libsqlite3.so.0 -o .libs/libsqlite3.so.0.8.6 /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: arm architecture of input file `.libs/alter.o' is incompatible with i386:x86-64 output /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: arm architecture of input file `.libs/analyze.o' is incompatible with i386:x86-64 output /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: arm architecture of input file `.libs/attach.o' is incompatible with i386:x86-64 output /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: arm architecture of input file `.libs/auth.o' is incompatible with i386:x86-64 output /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: arm architecture of input file `.libs/backup.o' is incompatible with i386:x86-64 output ............................................................... The solution is to configure libtool by setting CC=3D"my compiler". But it's not good. I'm not good in m4 scripting, but in attached file is that, what I changed in configure of libtool. In the old version of libtool(2.2.6) everything is good. I'm using new libtool, because it supports LTO. some links about this problem: http://www.mail-archive.com/libtool@HIDDEN/msg11262.html http://metastatic.org/text/libtool.html -- *=F3 =D5=D7=C1=D6=C5=CE=C9=C5=CD, **=E2=D5=DE=C1=C3=CB=C9=CA =F2.=E1.* <ruben.buchatskiy@HIDDEN> --20cf30051208aa413a04acd2d31d Content-Type: text/html; charset=KOI8-R Content-Transfer-Encoding: quoted-printable <div><span class=3D"Apple-style-span" style=3D"font-family: 'Times New = Roman'; font-size: medium; "><pre>Hello!</pre><pre>I'm building Sql= ite 3.7.7.1 with libtool 2.4. I'm doing the cross compile. Configuring = sqlite with CC=3D"my compiler". In compilation mode everything is= ok, but when I link, libtool tries to call the native gcc (in spite of the= fact, that CC=3D"my compiler", not native).</pre> </span></div><div><div><b>~/libtool-2.4/libtool</b> --tag=3DCC --mode=3Dlin= k <b>/home/ruben/x-tools/gcc-trunk-clean/bin/arm-unknown-linux-gnueabi-gcc<= /b> =9A -O2 -mcpu=3Dcortex-a8 -mtune=3Dcortex-a8 -mfloat-abi=3Dsoftfp -mfpu= =3Dneon -mthumb -flto -DSQLITE_OS_UNIX=3D1 -I. -I./src -I./ext/rtree -D_HAV= E_SQLITE_CONFIG_H -DNDEBUG =9A -DSQLITE_THREADSAFE=3D1 -DSQLITE_OMIT_LOAD_E= XTENSION=3D1 =9A =9A -o <a href=3D"http://libsqlite3.la">libsqlite3.la</a> = alter.lo analyze.lo attach.lo auth.lo backup.lo bitvec.lo btmutex.lo btree.= lo build.lo callback.lo complete.lo ctime.lo date.lo delete.lo expr.lo faul= t.lo fkey.lo fts3.lo fts3_aux.lo fts3_expr.lo fts3_hash.lo fts3_icu.lo fts3= _porter.lo fts3_snippet.lo fts3_tokenizer.lo fts3_tokenizer1.lo fts3_write.= lo func.lo global.lo hash.lo icu.lo insert.lo journal.lo legacy.lo loadext.= lo main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo memjournal.lo = mutex.lo mutex_noop.lo mutex_os2.lo mutex_unix.lo mutex_w32.lo notify.lo op= codes.lo os.lo os_os2.lo os_unix.lo os_win.lo pager.lo parse.lo pcache.lo p= cache1.lo pragma.lo prepare.lo printf.lo random.lo resolve.lo rowset.lo rtr= ee.lo select.lo status.lo table.lo tokenize.lo trigger.lo update.lo util.lo= vacuum.lo vdbe.lo vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbetrace.l= o wal.lo walker.lo where.lo utf.lo vtab.lo -lpthread =9A\</div> <div><span class=3D"Apple-tab-span" style=3D"white-space:pre"> </span> -rpa= th "/home/ruben/condor/testings/sqlitesrc/sqlite-src-3070701/build/lib= " -version-info "8:6:8"</div><div>libtool: link: <b><font cl= ass=3D"Apple-style-span" color=3D"#cc0000">gcc</font></b> -shared =9A-fPIC = -DPIC =9A.libs/alter.o .libs/analyze.o .libs/attach.o .libs/auth.o .libs/ba= ckup.o .libs/bitvec.o .libs/btmutex.o .libs/btree.o .libs/build.o .libs/cal= lback.o .libs/complete.o .libs/ctime.o .libs/date.o .libs/delete.o .libs/ex= pr.o .libs/fault.o .libs/fkey.o .libs/fts3.o .libs/fts3_aux.o .libs/fts3_ex= pr.o .libs/fts3_hash.o .libs/fts3_icu.o .libs/fts3_porter.o .libs/fts3_snip= pet.o .libs/fts3_tokenizer.o .libs/fts3_tokenizer1.o .libs/fts3_write.o .li= bs/func.o .libs/global.o .libs/hash.o .libs/icu.o .libs/insert.o .libs/jour= nal.o .libs/legacy.o .libs/loadext.o .libs/main.o .libs/malloc.o .libs/mem0= .o .libs/mem1.o .libs/mem2.o .libs/mem3.o .libs/mem5.o .libs/memjournal.o .= libs/mutex.o .libs/mutex_noop.o .libs/mutex_os2.o .libs/mutex_unix.o .libs/= mutex_w32.o .libs/notify.o .libs/opcodes.o .libs/os.o .libs/os_os2.o .libs/= os_unix.o .libs/os_win.o .libs/pager.o .libs/parse.o .libs/pcache.o .libs/p= cache1.o .libs/pragma.o .libs/prepare.o .libs/printf.o .libs/random.o .libs= /resolve.o .libs/rowset.o .libs/rtree.o .libs/select.o .libs/status.o .libs= /table.o .libs/tokenize.o .libs/trigger.o .libs/update.o .libs/util.o .libs= /vacuum.o .libs/vdbe.o .libs/vdbeapi.o .libs/vdbeaux.o .libs/vdbeblob.o .li= bs/vdbemem.o .libs/vdbetrace.o .libs/wal.o .libs/walker.o .libs/where.o .li= bs/utf.o .libs/vtab.o =9A -lpthread =9A-O2 -mcpu=3Dcortex-a8 -mtune=3Dcorte= x-a8 -mfloat-abi=3Dsoftfp -mfpu=3Dneon -mthumb -flto =9A-Wl,-soname -Wl,lib= sqlite3.so.0 -o .libs/libsqlite3.so.0.8.6</div> <div>/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin= /ld: arm architecture of input file `.libs/alter.o' is incompatible wit= h i386:x86-64 output</div><div>/usr/lib64/gcc/x86_64-suse-linux/4.5/../../.= ./../x86_64-suse-linux/bin/ld: arm architecture of input file `.libs/analyz= e.o' is incompatible with i386:x86-64 output</div> <div>/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin= /ld: arm architecture of input file `.libs/attach.o' is incompatible wi= th i386:x86-64 output</div><div>/usr/lib64/gcc/x86_64-suse-linux/4.5/../../= ../../x86_64-suse-linux/bin/ld: arm architecture of input file `.libs/auth.= o' is incompatible with i386:x86-64 output</div> <div>/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin= /ld: arm architecture of input file `.libs/backup.o' is incompatible wi= th i386:x86-64 output</div></div><div>.....................................= ..........................</div> <div><br></div><div><span class=3D"Apple-style-span" style=3D"font-family: = 'Times New Roman'; font-size: medium; "><pre>The solution is to con= figure libtool by setting CC=3D"my compiler". But it's not go= od.=9AI'm not good in m4 scripting, but in attached file is that, what = I changed in configure of libtool. In the old version of libtool(2.2.6) eve= rything is good. I'm using new libtool, because it supports LTO.</pre> <pre>some links about this problem:</pre><pre><a href=3D"http://www.mail-ar= chive.com/libtool@HIDDEN/msg11262.html">http://www.mail-archive.com/libtoo= l@HIDDEN/msg11262.html</a></pre><pre><a href=3D"http://metastatic.org/text= /libtool.html">http://metastatic.org/text/libtool.html</a></pre> </span><span class=3D"Apple-style-span" style=3D"font-family: 'Times Ne= w Roman'; font-size: medium; "><pre> </pre></span></div>-- <br><i>=F3 = =D5=D7=C1=D6=C5=CE=C9=C5=CD,<br></i><b>=E2=D5=DE=C1=C3=CB=C9=CA =F2.=E1.</b= >=9A<span dir=3D"ltr"><<a href=3D"mailto:ruben.buchatskiy@HIDDEN" tar= get=3D"_blank">ruben.buchatskiy@HIDDEN</a>></span><br> --20cf30051208aa413a04acd2d31d-- --20cf30051208aa413d04acd2d31f Content-Type: text/x-patch; charset=US-ASCII; name="configure_patch.diff" Content-Disposition: attachment; filename="configure_patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gsix5w4o0 ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBkZTg4ODc1Li41MjY2MGM2 IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yOTY1OSw3ICsyOTY1 OSwxMCBAQCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRz CiBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249JGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlv bgoKICMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfQ0MKK2lmIFsgInhcJENDIiA9PSAieCIgXTsg dGhlbgorICAgICAgIExUQ0M9JGx0X0NDCitlbHNlIExUQ0M9IlwkQ0MiCitmaQoKICMgTFRDQyBj b21waWxlciBmbGFncy4KIExUQ0ZMQUdTPSRsdF9DRkxBR1MKQEAgLTI5ODAwLDcgKzI5ODAzLDEw IEBAIHJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwogb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xk X2FyY2hpdmVfY21kcwoKICMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9j b21waWxlcgoraWYgWyAieFwkQ0MiID09ICJ4IiBdOyB0aGVuCisgICAgICAgQ0M9JGx0X2NvbXBp bGVyCitlbHNlIENDPSJcJENDIgorZmkKCiAjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBp bGVyPwogd2l0aF9nY2M9JEdDQwoK --20cf30051208aa413d04acd2d31f--
Рубен Бучацкий <ruben.buchatskiy@HIDDEN>
:bug-libtool@HIDDEN
.
Full text available.owner <at> debbugs.gnu.org, bug-libtool@HIDDEN
:bug#9492
; Package libtool
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.