From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id D82A0440587; Fri, 19 May 2023 15:18:00 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org D82A0440587 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1684498681; bh=5PqbiTM88dIB/EP4CfKayjspl9GhggYkvXJddL1qbtg=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=SUNbASgXR+ziSLhPytHdA5SqU1Cm5kXNt+YbiShMjHEiYWwgQn/tZ01KsX1lJKyJv ilRsvBKi7gqTDEXx4MUmrJju0HRnqOGzs5zss2EchFiKE3bBWcwlIsy7U5j7VZJ1wv eZVTp2DWN/M5CDqDyWsUplgoqjG82btmDx2d/7aM= Received: from f752.i.mail.ru (f752.i.mail.ru [45.84.129.123]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id D0E1543F59C for ; Fri, 19 May 2023 15:17:59 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org D0E1543F59C Received: by f752.i.mail.ru with local (envelope-from ) id 1pzz3V-0000sV-Mt; Fri, 19 May 2023 15:17:58 +0300 Received: by e.mail.ru with HTTP; Fri, 19 May 2023 15:17:57 +0300 To: =?UTF-8?B?U2VyZ2V5IEthcGx1bg==?= MIME-Version: 1.0 X-Mailer: Mail.Ru Mailer 1.0 X-SenderField-ReMsg: 16844429441363206197 X-SenderField-Remind: 0 Date: Fri, 19 May 2023 15:17:57 +0300 X-Priority: 3 (Normal) Message-ID: <1684498677.336586177@f752.i.mail.ru> Content-Type: multipart/alternative; boundary="--ALT--fA6e47699d6E342ED2fdBeE3fD6d194C1684498677" In-Reply-To: <0ceed30db5259087a6733c429ed5a2502468ce40.1684442182.git.skaplun@tarantool.org> References: <0ceed30db5259087a6733c429ed5a2502468ce40.1684442182.git.skaplun@tarantool.org> X-7564579A: 646B95376F6C166E X-77F55803: 119C1F4DF6A9251C86B22F0DBD26B6BB3032769314A79B40BA0BA938016C86FB8FD872164937FA4C01A67E6473B7931C8BE252068337BC811E23732F62C577C56520D04F521B25FD X-C1DE0DAB: 0D63561A33F958A5E8A04EBE9CC27FF8192092268A53DFE311458C03B4DBA28DF87CCE6106E1FC07E67D4AC08A07B9B0DB8A315C1FF4794DBDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0AD5177F0B940C8B66ECE892A7B2722663E91682638B966EB3F662256BEEFA9527FBD6561C7E130AC30079AFF32BBA988C3B5D6B17A9F7DD5F711A706C1F8160967DBEC6FF36D41542937FD76D11AF80A0D1D94C3A1FF72C5F3EFF1D98053AF90B4EA455F16B58544A2F7A5749D7A90E508 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5+wYjsrrSY/u8Y3PrTqANeitKFiSd6Yd7yPpbiiZ/d5BsxIjK0jGQgCHUM3Ry2Lt2G3MDkMauH3h0dBdQGj+BB/iPzQYh7XS329fgu+/vnDh+rtILR+Vha7pP27GVwbC7w== X-Mailru-MI: 800 X-Mailru-Sender: 11C2EC085EDE56FA38FD4C59F7EFE407FD2BF1FD02F373487E1A343CFB449CE1F55C63719446807906CD02445D2D9C8FA2BFD6D8330F0C2D563E610FBBDBB4C842051EA7CBBFB509093DA5C00B83CE8412EB40C6FA10D71EFD657A8799238ED55FEEDEB644C299C0ED14614B50AE0675 X-Mras: OK Subject: Re: [Tarantool-patches] =?utf-8?q?=5BPATCH_v2_luajit_4/6=5D_test=3A_?= =?utf-8?q?rewrite_misclib-getmetrics-capi_test_in_C?= X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Maxim Kokryashkin via Tarantool-patches Reply-To: =?UTF-8?B?TWF4aW0gS29rcnlhc2hraW4=?= Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" ----ALT--fA6e47699d6E342ED2fdBeE3fD6d194C1684498677 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 CkhpLCBTZXJnZXkKVGhhbmtzIGZvciB0aGUgcGF0Y2guCkxHVE0sIGV4Y2VwdCBmb3IgYSBmZXcg Y29tbWVudHMgYmVsb3cuCsKgCj7CoAo+PlRoaXMgcGF0Y2ggcmV3cml0ZXMgdGhlIGFmb3JlbWVu dGlvbmVkIHRlc3Qgd2l0aCB0aGUgdXNhZ2UgbGlidGVzdCwKPj5yZWNlbnRseSBpbnRyb2R1Y2Vk LiBTaW5jZSB3ZSBzdGlsbCBzdGFuZCBpbiBuZWVkIG9mIGEgTHVhIGhlbHBlciBzY3JpcHQKPj5m b3IgZ2VuZXJhdGlvbiBvZiB0cmFjZXMsIHRoZSBvcmlnaW5hbCB0ZXN0IGZpbGUgaXMgcmV3b3Jr ZWQgYXMgYQo+PnN0YW5kYWxvbmUgc2NyaXB0LCB3aGljaCByZXR1cm5zIHRoZSB0YWJsZSB3aXRo IGhlbHBlciBmdW5jdGlvbnMuIEVhY2gKPj5oZWxwZXIgZnVuY3Rpb24gaXMgbmFtZWQgdGhlIHNh bWUgYXMgdGhlIHRlc3Qgd2hlcmUgaXQgd2lsbCBiZSB1c2VkLiBOb3cKPj5zaW5nbGUgcXVvdGVz IGFyZSB1c2VkIGFjY29yZGluZyB0byBvdXIgTHVhIGNvZGUgc3R5bGUuCj4+Cj4+SW4gQyBwYXJ0 IGFsbCBhc3NlcnRzIGZyb20gZ2xpYmMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGNvcnJlc3BvbmRp bmcKPj5hc3NlcnRfe2NvbmR9IGZyb20gdGhlIGxpYnRlc3QuIE5vdyB0ZXN0cyByZXR1cm4gYFRF U1RfRVhJVF9TVUNDRVNTYCBhdAo+PnRoZSBmaW5pc2guIEFsc28sIHRoZSBzdGFjayBjaGVjayBm b3IgdGhlIGFtb3VudCBvZiByZXR1cm4gcmVzdWx0cyBmcm9tCj4+dGhlIGhlbHBlciBmdW5jdGlv biBpcyBzbGlnaHRseSBjaGFuZ2VkLCBzaW5jZSB0aGVyZSBpcyBvbmUgbW9yZSBzdGFjawo+PnNs b3QgaW4gdXNlICh0YWJsZSB3aXRoIHRoZXNlIGZ1bmN0aW9ucykuIGBzbmFwX3Jlc3RvcmVzKClg IEMgZnVuY3Rpb24KPj5kdXBsaWNhdGVzIDQgdGltZXMgZm9yIGVhY2ggc3VidGVzdC4gQ29tbW9u IGhlbHBlcgo+PmBjaGVja19zbmFwX3Jlc3RvcmVzKClgIGlzIHVzZWQgZm9yIGVhY2ggb2YgdGhl bS4gRWFjaCBlcnJvciB0aHJvd2luZyBpcwo+PnJlcGxhY2VkIHdpdGggYGJhaWxfb3V0KClgIGNh bGwuCj4+Cj4+TkI6IGBsdWFfcG9wKClgIHRvIGNsZWFyIHRoZSBMdWEgc3RhY2sgYWZ0ZXIgYSBj YWxsIHNob3VsZCBiZSBkb25lIGJlZm9yZQo+PmFueSBwb3NzaWJsZSBhc3NlcnRpb24sIHdoaWNo IHdvdWxkIGV4aXQgZnJvbSB0aGUgdGVzdCBsZWF2aW5nIHRoZSBzdGFjawo+PnVuY2xlYW5lZC4K Pj4KPj5BbGwgc2tpcGNvbmRzIHVzZSBtYWNyb3MgZGVmaW5lZCBpbiA8bGpfYXJjaC5oPiwgc28g aXQgaXMgaW5jbHVkZWQgaW4KPj50aGUgdGVzdC4gQXMgZmFyIGFzIHRoaXMgdGVzdCBpbml0aWFs aXplcyB0aGUgTHVhSklUIFZNIG1hbnVhbGx5LCB0aGVyZQo+PmlzIG5vIG5lZWQgdG8gY2hlY2sg YGppdC5zdGF0dXMoKWAgcmVzdWx0OyBjaGVja2luZyBgTEpfSEFTSklUYCBpcwo+PmVub3VnaC4g Tm93LCBvbmx5IEpJVC1yZWxhdGVkIHRlc3RzIGFyZSBza2lwcGVkLCB3aGVuIGNvbXBpbGVkIHdp dGhvdXQKPj5KSVQuIE5ldmVydGhlbGVzcywgYWxsIHRlc3RzIGFyZSBza2lwcGVkIGZvciAqQlNE IGFyY2hlcy4KPj4KPj5BbHNvLCB0aGlzIHBhdGNoIHNldHMgdGhlIG5ldyBDTWFrZSB2YXJpYWJs ZSBuYW1lZCBgTFVBSklUX0xJQlJBUllgCj4+ZXF1YWwgdG8gYExVQUpJVF9MSUJgIGluIGBQQVJF TlRfU0NPUEVgIHRvIGJlIHVzZWQgaW4gdGFyYW50b29sLWMtdGVzdHMKPj5saW5raW5nLgo+Pgo+ PkFsc28sIC5jX3Rlc3Qgc3VmZml4IGlzIGFkZGVkIHRvIHRoZSA8LmdpdGlnbm9yZT4uCj4+Cj4+ UGFydCBvZiB0YXJhbnRvb2wvdGFyYW50b29sIzc5MDAKPj4tLS0KPj7CoC5naXRpZ25vcmUgfCAx ICsKPj7CoHNyYy9DTWFrZUxpc3RzLnR4dCB8IDIgKwo+PsKgdGVzdC90YXJhbnRvb2wtYy10ZXN0 cy9DTWFrZUxpc3RzLnR4dCB8IDMyICstCj4+wqAuLi4vbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkt c2NyaXB0Lmx1YX0gfCA4MyArKy0tLQo+PsKgLi4uL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpLnRl c3QuYyB8IDM0MyArKysrKysrKysrKysrKysrKysKPj7CoHRlc3QvdGFyYW50b29sLXRlc3RzL0NN YWtlTGlzdHMudHh0IHwgMSAtCj4+wqAuLi4vbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkvQ01ha2VM aXN0cy50eHQgfCAxIC0KPj7CoC4uLi9taXNjbGliLWdldG1ldHJpY3MtY2FwaS90ZXN0Z2V0bWV0 cmljcy5jIHwgMjcwIC0tLS0tLS0tLS0tLS0tCj4+wqA4IGZpbGVzIGNoYW5nZWQsIDQxMiBpbnNl cnRpb25zKCspLCAzMjEgZGVsZXRpb25zKC0pCj4+wqByZW5hbWUgdGVzdC97dGFyYW50b29sLXRl c3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpLnRlc3QubHVhID0+IHRhcmFudG9vbC1jLXRlc3Rz L21pc2NsaWItZ2V0bWV0cmljcy1jYXBpLXNjcmlwdC5sdWF9ICg2OCUpCj4+wqBjcmVhdGUgbW9k ZSAxMDA2NDQgdGVzdC90YXJhbnRvb2wtYy10ZXN0cy9taXNjbGliLWdldG1ldHJpY3MtY2FwaS50 ZXN0LmMKPj7CoGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0L3RhcmFudG9vbC10ZXN0cy9taXNjbGli LWdldG1ldHJpY3MtY2FwaS9DTWFrZUxpc3RzLnR4dAo+PsKgZGVsZXRlIG1vZGUgMTAwNjQ0IHRl c3QvdGFyYW50b29sLXRlc3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpL3Rlc3RnZXRtZXRyaWNz LmMKPj4KPj5kaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKPj5pbmRleCBiNzkw OGFlZS4uZGM1ZWE1ZmMgMTAwNjQ0Cj4+LS0tIGEvLmdpdGlnbm9yZQo+PisrKyBiLy5naXRpZ25v cmUKPj5AQCAtMjQsMyArMjQsNCBAQCBpbnN0YWxsX21hbmlmZXN0LnR4dAo+PsKgbHVhaml0LXBh cnNlLW1lbXByb2YKPj7CoGx1YWppdC1wYXJzZS1zeXNwcm9mCj4+wqBsdWFqaXQucGMKPj4rKi5j X3Rlc3QKPj5kaWZmIC0tZ2l0IGEvc3JjL0NNYWtlTGlzdHMudHh0IGIvc3JjL0NNYWtlTGlzdHMu dHh0Cj4+aW5kZXggZGZmYzBhNGQuLmZlZDRjMzhkIDEwMDY0NAo+Pi0tLSBhL3NyYy9DTWFrZUxp c3RzLnR4dAo+PisrKyBiL3NyYy9DTWFrZUxpc3RzLnR4dAo+PkBAIC0zMjUsNiArMzI1LDggQEAg aWYoTk9UIEJVSUxETU9ERSBTVFJFUVVBTCAiZHluYW1pYyIpCj4+wqDCoMKgc2V0KExVQUpJVF9C SU4gbHVhaml0X3N0YXRpYykKPj7CoMKgwqBzZXQoTFVBSklUX0xJQiBsaWJsdWFqaXRfc3RhdGlj KQo+PsKgZW5kaWYoKQo+PisjIE5lZWQgZm9yIHRoZSB0ZXN0IGxpbmtpbmcsIHNvIHRoZSBQQVJF TlRfU0NPUEUgb3B0aW9uIGlzIHVzZWQuCj4+K3NldChMVUFKSVRfTElCUkFSWSAke0xVQUpJVF9M SUJ9IFBBUkVOVF9TQ09QRSkKPj7CoHNldChMSUJMVUFKSVRfREVQUyAke0xJQkxVQUpJVF9TVEFU SUNfREVQU30gJHtMSUJMVUFKSVRfU0hBUkVEX0RFUFN9KQo+PsKgCj4+wqBhZGRfZXhlY3V0YWJs ZSgke0xVQUpJVF9CSU59IEVYQ0xVREVfRlJPTV9BTEwgJHtDTElfU09VUkNFU30pCj4+ZGlmZiAt LWdpdCBhL3Rlc3QvdGFyYW50b29sLWMtdGVzdHMvQ01ha2VMaXN0cy50eHQgYi90ZXN0L3RhcmFu dG9vbC1jLXRlc3RzL0NNYWtlTGlzdHMudHh0Cj4+aW5kZXggYzZiN2NkMzAuLmM5ZDc1ZDZjIDEw MDY0NAo+Pi0tLSBhL3Rlc3QvdGFyYW50b29sLWMtdGVzdHMvQ01ha2VMaXN0cy50eHQKPj4rKysg Yi90ZXN0L3RhcmFudG9vbC1jLXRlc3RzL0NNYWtlTGlzdHMudHh0Cj4+QEAgLTIyLDEzICsyMiwz NyBAQCBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobGlidGVzdCBQUk9QRVJUSUVTCj4+wqDCoMKgTElC UkFSWV9PVVRQVVRfRElSRUNUT1JZICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iCj4+wqAp Cj4+wqAKPj4tIyBYWFg6IEZvciBub3csIGp1c3QgYnVpbGQgbGlidGVzdC4gVGhlIHRlc3RzIHRv IGJlIGRlcGVuZGVkIG9uCj4+LSMgd2lsbCBiZSBhZGRlZCBpbiB0aGUgbmV4dCBjb21taXQuCj4+ KyMgVEFSR0VUX0NfRkxBR1MgaXMgcmVxdWlyZWQgaGVyZSB0byBiZSBzdXJlIHRoYXQgaGVhZGVy cyBsaWtlCj4+KyMgbGpfYXJjaC5oIGluIGNvbXBpbGVkIHRlc3QgYXJlIGNvbnNpc3RlbnQgd2l0 aCB0aGUgTHVhSklUIGxpYnJhcnkKPj4rIyB0byBsaW5rLgo+PitBcHBlbmRGbGFncyhURVNUU19D X0ZMQUdTICR7VEFSR0VUX0NfRkxBR1N9KQo+PisKPj4rc2V0KENURVNUX1NSQ19TVUZGSVggIi50 ZXN0LmMiKQo+PitmaWxlKEdMT0IgdGVzdHMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8q JHtDVEVTVF9TUkNfU1VGRklYfSIpCj4+K2ZvcmVhY2godGVzdF9zb3VyY2UgJHt0ZXN0c30pCj4+ KyBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLisvKFteL10rKSR7Q1RFU1RfU1JDX1NVRkZJWH0iICJc XDEiIGV4ZSAke3Rlc3Rfc291cmNlfSkKPlBsZWFzZSBkcm9wIGEgY29tbWVudCBleHBsYWluaW5n IHRoZSBsaW5lIGFib3ZlLgo+wqAKPjxzbmlwcGVkPgo+Pgo+PmRpZmYgLS1naXQgYS90ZXN0L3Rh cmFudG9vbC10ZXN0cy9taXNjbGliLWdldG1ldHJpY3MtY2FwaS50ZXN0Lmx1YSBiL3Rlc3QvdGFy YW50b29sLWMtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGktc2NyaXB0Lmx1YQo+PnNpbWls YXJpdHkgaW5kZXggNjglCj4+cmVuYW1lIGZyb20gdGVzdC90YXJhbnRvb2wtdGVzdHMvbWlzY2xp Yi1nZXRtZXRyaWNzLWNhcGkudGVzdC5sdWEKPj5yZW5hbWUgdG8gdGVzdC90YXJhbnRvb2wtYy10 ZXN0cy9taXNjbGliLWdldG1ldHJpY3MtY2FwaS1zY3JpcHQubHVhCj4+aW5kZXggNjU0ZTU1NDUu LjJmMGVlNWNmIDEwMDY0NAo+Pi0tLSBhL3Rlc3QvdGFyYW50b29sLXRlc3RzL21pc2NsaWItZ2V0 bWV0cmljcy1jYXBpLnRlc3QubHVhCj4+KysrIGIvdGVzdC90YXJhbnRvb2wtYy10ZXN0cy9taXNj bGliLWdldG1ldHJpY3MtY2FwaS1zY3JpcHQubHVhCj48c25pcHBlZD4KPj5kaWZmIC0tZ2l0IGEv dGVzdC90YXJhbnRvb2wtYy10ZXN0cy9taXNjbGliLWdldG1ldHJpY3MtY2FwaS50ZXN0LmMgYi90 ZXN0L3RhcmFudG9vbC1jLXRlc3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpLnRlc3QuYwo+Pm5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4+aW5kZXggMDAwMDAwMDAuLjIwMmNkMzk1Cj4+LS0tIC9kZXYv bnVsbAo+PisrKyBiL3Rlc3QvdGFyYW50b29sLWMtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNh cGkudGVzdC5jCj4+QEAgLTAsMCArMSwzNDMgQEAKPj4rI2luY2x1ZGUgImx1YS5oIgo+PisjaW5j bHVkZSAibHVhaml0LmgiCj4+KyNpbmNsdWRlICJsYXV4bGliLmgiCj4+KyNpbmNsdWRlICJsbWlz Y2xpYi5oIgo+PisKPj4rI2luY2x1ZGUgInRlc3QuaCIKPj4rI2luY2x1ZGUgInV0aWxzLmgiCj4+ Kwo+PisvKiBOZWVkIGZvciBza2lwY29uZCBmb3IgQlNEIGFuZCBKSVQuICovCj4+KyNpbmNsdWRl ICJsal9hcmNoLmgiCj4+Kwo+PitzdGF0aWMgaW50IGJhc2Uodm9pZCAqdGVzdF9zdGF0ZSkKPj4r ewo+PisgbHVhX1N0YXRlICpMID0gdGVzdF9zdGF0ZTsKPj4rIHN0cnVjdCBsdWFtX01ldHJpY3Mg bWV0cmljczsKPj4rIGx1YU1fbWV0cmljcyhMLCAmbWV0cmljcyk7Cj4+Kwo+PisgLyoKPj4rICog SnVzdCBjaGVjayBzdHJ1Y3R1cmUgZm9ybWF0LCBub3QgdmFsdWVzIHRoYXQgZmllbGRzCj4+KyAq IGNvbnRhaW4uCj4+KyAqLwo+PisgKHZvaWQpbWV0cmljcy5zdHJoYXNoX2hpdDsKPj4rICh2b2lk KW1ldHJpY3Muc3RyaGFzaF9taXNzOwo+PisKPj4rICh2b2lkKW1ldHJpY3MuZ2Nfc3RybnVtOwo+ PisgKHZvaWQpbWV0cmljcy5nY190YWJudW07Cj4+KyAodm9pZCltZXRyaWNzLmdjX3VkYXRhbnVt Owo+PisgKHZvaWQpbWV0cmljcy5nY19jZGF0YW51bTsKPj4rCj4+KyAodm9pZCltZXRyaWNzLmdj X3RvdGFsOwo+PisgKHZvaWQpbWV0cmljcy5nY19mcmVlZDsKPj4rICh2b2lkKW1ldHJpY3MuZ2Nf YWxsb2NhdGVkOwo+PisKPj4rICh2b2lkKW1ldHJpY3MuZ2Nfc3RlcHNfcGF1c2U7Cj4+KyAodm9p ZCltZXRyaWNzLmdjX3N0ZXBzX3Byb3BhZ2F0ZTsKPj4rICh2b2lkKW1ldHJpY3MuZ2Nfc3RlcHNf YXRvbWljOwo+PisgKHZvaWQpbWV0cmljcy5nY19zdGVwc19zd2VlcHN0cmluZzsKPj4rICh2b2lk KW1ldHJpY3MuZ2Nfc3RlcHNfc3dlZXA7Cj4+KyAodm9pZCltZXRyaWNzLmdjX3N0ZXBzX2ZpbmFs aXplOwo+PisKPj4rICh2b2lkKW1ldHJpY3Muaml0X3NuYXBfcmVzdG9yZTsKPj4rICh2b2lkKW1l dHJpY3Muaml0X3RyYWNlX2Fib3J0Owo+PisgKHZvaWQpbWV0cmljcy5qaXRfbWNvZGVfc2l6ZTsK Pj4rICh2b2lkKW1ldHJpY3Muaml0X3RyYWNlX251bTsKPj4rCj4+KyByZXR1cm4gVEVTVF9FWElU X1NVQ0NFU1M7Cj4+K30KPj4rCj4+K3N0YXRpYyBpbnQgZ2NfYWxsb2NhdGVkX2ZyZWVkKHZvaWQg KnRlc3Rfc3RhdGUpCj4+K3sKPj4rIGx1YV9TdGF0ZSAqTCA9IHRlc3Rfc3RhdGU7Cj4+KyBzdHJ1 Y3QgbHVhbV9NZXRyaWNzIG9sZG0sIG5ld207Cj4+KyAvKiBGb3JjZSB1cCBnYXJiYWdlIGNvbGxl Y3QgYWxsIGRlYWQgb2JqZWN0cy4gKi8KPj4rIGx1YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTsK Pj4rCj4+KyBsdWFNX21ldHJpY3MoTCwgJm9sZG0pOwo+PisgLyogU2ltcGxlIGdhcmJhZ2UgZ2Vu ZXJhdGlvbi4gKi8KPj4rIGlmIChsdWFMX2Rvc3RyaW5nKEwsICJsb2NhbCBpID0gMCBmb3IgaiA9 IDEsIDEwIGRvIGkgPSBpICsgaiBlbmQiKSkKPj4rIGJhaWxfb3V0KCJmYWlsZWQgdG8gdHJhbnNs YXRlIEx1YSBjb2RlIHNuaXBwZXQiKTsKPj4rIGx1YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTsK Pj4rIGx1YU1fbWV0cmljcyhMLCAmbmV3bSk7Cj4+KyBhc3NlcnRfdHJ1ZShuZXdtLmdjX2FsbG9j YXRlZCAtIG9sZG0uZ2NfYWxsb2NhdGVkID4gMCk7Cj4+KyBhc3NlcnRfdHJ1ZShuZXdtLmdjX2Zy ZWVkIC0gb2xkbS5nY19mcmVlZCA+IDApOwo+PisKPj4rIHJldHVybiBURVNUX0VYSVRfU1VDQ0VT UzsKPj4rfQo+PisKPj4rc3RhdGljIGludCBnY19zdGVwcyh2b2lkICp0ZXN0X3N0YXRlKQo+Pit7 Cj4+KyBsdWFfU3RhdGUgKkwgPSB0ZXN0X3N0YXRlOwo+Pisgc3RydWN0IGx1YW1fTWV0cmljcyBv bGRtLCBuZXdtOwo+PisgLyoKPj4rICogU29tZSBnYXJiYWdlIGhhcyBhbHJlYWR5IGhhcHBlbmVk IGJlZm9yZSB0aGUgbmV4dCBsaW5lLAo+PisgKiBpLmUuIGR1cmluZyBmcm9udGVuZCBwcm9jZXNz aW5nIEx1YSB0ZXN0IGNodW5rLgo+PisgKiBMZXQncyBwdXQgYSBmdWxsIGdhcmJhZ2UgY29sbGVj dGlvbiBjeWNsZSBvbiB0b3AKPj4rICogb2YgdGhhdCwgYW5kIGNvbmZpcm0gdGhhdCBub24tbnVs bCB2YWx1ZXMgYXJlIHJlcG9ydGVkCj4+KyAqICh3ZSBhcmUgbm90IHlldCBpbnRlcmVzdGVkIGlu IGFjdHVhbCBudW1iZXJzKToKPj4rICovCj4+KyBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7 Cj4+Kwo+PisgbHVhTV9tZXRyaWNzKEwsICZvbGRtKTsKPj4rIGFzc2VydF90cnVlKG9sZG0uZ2Nf c3RlcHNfcGF1c2UgPiAwKTsKPj4rIGFzc2VydF90cnVlKG9sZG0uZ2Nfc3RlcHNfcHJvcGFnYXRl ID4gMCk7Cj4+KyBhc3NlcnRfdHJ1ZShvbGRtLmdjX3N0ZXBzX2F0b21pYyA+IDApOwo+PisgYXNz ZXJ0X3RydWUob2xkbS5nY19zdGVwc19zd2VlcHN0cmluZyA+IDApOwo+PisgYXNzZXJ0X3RydWUo b2xkbS5nY19zdGVwc19zd2VlcCA+IDApOwo+PisgLyogTm90aGluZyB0byBmaW5hbGl6ZSwgc2tp cHBlZC4gKi8KPj4rIGFzc2VydF90cnVlKG9sZG0uZ2Nfc3RlcHNfZmluYWxpemUgPT0gMCk7Cj4+ Kwo+PisgLyoKPj4rICogQXMgbG9uZyBhcyB3ZSBkb24ndCBjcmVhdGUgbmV3IEx1YSBvYmplY3Rz Cj4+KyAqIGNvbnNlcXVlbnQgY2FsbCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlczoKPj4r ICovCj4+KyBsdWFNX21ldHJpY3MoTCwgJm5ld20pOwo+PisgYXNzZXJ0X3NpemV0X2VxdWFsKG5l d20uZ2Nfc3RlcHNfcGF1c2UsIG9sZG0uZ2Nfc3RlcHNfcGF1c2UpOwo+PisgYXNzZXJ0X3NpemV0 X2VxdWFsKG5ld20uZ2Nfc3RlcHNfcHJvcGFnYXRlLCBvbGRtLmdjX3N0ZXBzX3Byb3BhZ2F0ZSk7 Cj4+KyBhc3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY19zdGVwc19hdG9taWMsIG9sZG0uZ2Nfc3Rl cHNfYXRvbWljKTsKPj4rIGFzc2VydF9zaXpldF9lcXVhbChuZXdtLmdjX3N0ZXBzX3N3ZWVwc3Ry aW5nLAo+Pisgb2xkbS5nY19zdGVwc19zd2VlcHN0cmluZyk7Cj4+KyBhc3NlcnRfc2l6ZXRfZXF1 YWwobmV3bS5nY19zdGVwc19zd2VlcCwgb2xkbS5nY19zdGVwc19zd2VlcCk7Cj4+KyAvKiBOb3Ro aW5nIHRvIGZpbmFsaXplLCBza2lwcGVkLiAqLwo+PisgYXNzZXJ0X3RydWUobmV3bS5nY19zdGVw c19maW5hbGl6ZSA9PSAwKTsKPj4rIG9sZG0gPSBuZXdtOwo+PisKPj4rIC8qCj4+KyAqIE5vdyB0 aGUgbGFzdCBwaGFzZTogcnVuIGZ1bGwgR0Mgb25jZSBhbmQgbWFrZSBzdXJlIHRoYXQKPj4rICog ZXZlcnl0aGluZyBpcyBiZWluZyByZXBvcnRlZCBhcyBleHBlY3RlZDoKPj4rICovCj4+KyBsdWFf Z2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7Cj4+KyBsdWFNX21ldHJpY3MoTCwgJm5ld20pOwo+Pisg YXNzZXJ0X3RydWUobmV3bS5nY19zdGVwc19wYXVzZSAtIG9sZG0uZ2Nfc3RlcHNfcGF1c2UgPT0g MSk7Cj4+KyBhc3NlcnRfdHJ1ZShuZXdtLmdjX3N0ZXBzX3Byb3BhZ2F0ZSAtIG9sZG0uZ2Nfc3Rl cHNfcHJvcGFnYXRlID49IDEpOwo+PisgYXNzZXJ0X3RydWUobmV3bS5nY19zdGVwc19hdG9taWMg LSBvbGRtLmdjX3N0ZXBzX2F0b21pYyA9PSAxKTsKPj4rIGFzc2VydF90cnVlKG5ld20uZ2Nfc3Rl cHNfc3dlZXBzdHJpbmcgLSBvbGRtLmdjX3N0ZXBzX3N3ZWVwc3RyaW5nID49IDEpOwo+PisgYXNz ZXJ0X3RydWUobmV3bS5nY19zdGVwc19zd2VlcCAtIG9sZG0uZ2Nfc3RlcHNfc3dlZXAgPj0gMSk7 Cj4+KyAvKiBOb3RoaW5nIHRvIGZpbmFsaXplLCBza2lwcGVkLiAqLwo+PisgYXNzZXJ0X3RydWUo bmV3bS5nY19zdGVwc19maW5hbGl6ZSA9PSAwKTsKPj4rIG9sZG0gPSBuZXdtOwo+PisKPj4rIC8q Cj4+KyAqIE5vdyBsZXQncyBydW4gdGhyZWUgR0MgY3ljbGVzIHRvIGVuc3VyZSB0aGF0Cj4+KyAq IGluY3JlbWVudCB3YXMgbm90IGEgbHVja3kgY29pbmNpZGVuY2UuCj4+KyAqLwo+PisgbHVhX2dj KEwsIExVQV9HQ0NPTExFQ1QsIDApOwo+PisgbHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOwo+ PisgbHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOwo+SSB0aGluayBpdCBpcyBiZXR0ZXIgdG8g Y3JlYXRlIGEgZm9yIGxvb3AgaGVyZS4KPj4rIGx1YU1fbWV0cmljcyhMLCAmbmV3bSk7Cj4+KyBh c3NlcnRfdHJ1ZShuZXdtLmdjX3N0ZXBzX3BhdXNlIC0gb2xkbS5nY19zdGVwc19wYXVzZSA9PSAz KTsKPj4rIGFzc2VydF90cnVlKG5ld20uZ2Nfc3RlcHNfcHJvcGFnYXRlIC0gb2xkbS5nY19zdGVw c19wcm9wYWdhdGUgPj0gMyk7Cj4+KyBhc3NlcnRfdHJ1ZShuZXdtLmdjX3N0ZXBzX2F0b21pYyAt IG9sZG0uZ2Nfc3RlcHNfYXRvbWljID09IDMpOwo+PisgYXNzZXJ0X3RydWUobmV3bS5nY19zdGVw c19zd2VlcHN0cmluZyAtIG9sZG0uZ2Nfc3RlcHNfc3dlZXBzdHJpbmcgPj0gMyk7Cj4+KyBhc3Nl cnRfdHJ1ZShuZXdtLmdjX3N0ZXBzX3N3ZWVwIC0gb2xkbS5nY19zdGVwc19zd2VlcCA+PSAzKTsK PlRoYXQgcGFydCBpcyBkdXBsaWNhdGVkLiBJdCBpcyBiZXR0ZXIgdG8gZWl0aGVyIHdyaXRlIGEg Y29ycmVzcG9uZGluZyBtYWNybywgb3IKPmEgZnVuY3Rpb24uCj4+KyAvKiBOb3RoaW5nIHRvIGZp bmFsaXplLCBza2lwcGVkLiAqLwo+PisgYXNzZXJ0X3RydWUobmV3bS5nY19zdGVwc19maW5hbGl6 ZSA9PSAwKTsKPj4rCj4+KyByZXR1cm4gVEVTVF9FWElUX1NVQ0NFU1M7Cj4+K30KPj4rCj4+K3N0 YXRpYyBpbnQgb2JqY291bnQodm9pZCAqdGVzdF9zdGF0ZSkKPj4rewo+PisgbHVhX1N0YXRlICpM ID0gdGVzdF9zdGF0ZTsKPj4rIHN0cnVjdCBsdWFtX01ldHJpY3Mgb2xkbSwgbmV3bTsKPj4rIGlm ICghTEpfSEFTSklUKQo+PisgcmV0dXJuIHNraXAoIlRlc3QgcmVxdWlyZXMgSklUIGVuYWJsZWQi KTsKPj4rCj4+KyB1dGlsc19nZXRfYXV4X2xmdW5jKEwpOwo+PisKPj4rIC8qIEZvcmNlIHVwIGdh cmJhZ2UgY29sbGVjdCBhbGwgZGVhZCBvYmplY3RzLiAqLwo+PisgbHVhX2djKEwsIExVQV9HQ0NP TExFQ1QsIDApOwo+PisKPj4rIGx1YU1fbWV0cmljcyhMLCAmb2xkbSk7Cj4+KyAvKiBHZW5lcmF0 ZSBnYXJiYWdlLiBBcmd1bWVudCBpcyBpdGVyYXRpb25zIGFtb3VudC4gKi8KPj4rIGx1YV9wdXNo bnVtYmVyKEwsIDEwMDApOwo+PisgbHVhX2NhbGwoTCwgMSwgMCk7Cj4+KyBsdWFfZ2MoTCwgTFVB X0dDQ09MTEVDVCwgMCk7Cj4+KyBsdWFNX21ldHJpY3MoTCwgJm5ld20pOwo+PisgYXNzZXJ0X3Np emV0X2VxdWFsKG5ld20uZ2Nfc3RybnVtLCBvbGRtLmdjX3N0cm51bSk7Cj4+KyBhc3NlcnRfc2l6 ZXRfZXF1YWwobmV3bS5nY190YWJudW0sIG9sZG0uZ2NfdGFibnVtKTsKPj4rIGFzc2VydF9zaXpl dF9lcXVhbChuZXdtLmdjX3VkYXRhbnVtLCBvbGRtLmdjX3VkYXRhbnVtKTsKPj4rIGFzc2VydF9z aXpldF9lcXVhbChuZXdtLmdjX2NkYXRhbnVtLCBvbGRtLmdjX2NkYXRhbnVtKTsKPj4rCj4+KyBy ZXR1cm4gVEVTVF9FWElUX1NVQ0NFU1M7Cj4+K30KPj4rCj4+K3N0YXRpYyBpbnQgb2JqY291bnRf Y2RhdGFfZGVjcmVtZW50KHZvaWQgKnRlc3Rfc3RhdGUpCj4+K3sKPj4rIGx1YV9TdGF0ZSAqTCA9 IHRlc3Rfc3RhdGU7Cj4+KyAvKgo+PisgKiBjZGF0YSBkZWNyZW1lbnQgdGVzdC4KPj4rICogU2Vl ICBodHRwczovL2dpdGh1Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC9pc3N1ZXMvNTgyMCAuCj4+ KyAqLwo+Pisgc3RydWN0IGx1YW1fTWV0cmljcyBvbGRtLCBuZXdtOwo+PisgdXRpbHNfZ2V0X2F1 eF9sZnVuYyhMKTsKPj4rCj4+KyAvKiBGb3JjZSB1cCBnYXJiYWdlIGNvbGxlY3QgYWxsIGRlYWQg b2JqZWN0cy4gKi8KPj4rIGx1YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTsKPj4rCj4+KyBsdWFN X21ldHJpY3MoTCwgJm9sZG0pOwo+PisgLyoKPj4rICogVGhlIGZ1bmN0aW9uIGdlbmVyYXRlcyBh bmQgY29sbGVjdHMgY2RhdGEgd2l0aAo+PisgKiBMSl9HQ19DREFUQV9GSU4gZmxhZy4KPj4rICov Cj4+KyBsdWFfY2FsbChMLCAwLCAwKTsKPj4rIGx1YU1fbWV0cmljcyhMLCAmbmV3bSk7Cj4+KyBh c3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY19jZGF0YW51bSwgb2xkbS5nY19jZGF0YW51bSk7Cj4+ Kwo+PisgcmV0dXJuIFRFU1RfRVhJVF9TVUNDRVNTOwo+Pit9Cj4+Kwo+PisvKgo+PisgKiBHZXQg ZnVuY3Rpb24gdG8gY2FsbCB0byBnZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBzbmFwc2hvdAo+ PisgKiByZXN0b3JlcyBvbiB0b3Agb2YgdGhlIEx1YSBzdGFjay4gRnVuY3Rpb24gcmV0dXJucyB0 aGUgYW1vdW50Cj4+KyAqIG9mIHNuYXBzaG90IHJlc3RvcmF0aW9ucyBleHBlY3RlZC4KPj4rICog Q2xlYXIgc3RhY2sgYWZ0ZXIgY2FsbC4KPj4rICovCj4+K3N0YXRpYyB2b2lkIGNoZWNrX3NuYXBf cmVzdG9yZXMobHVhX1N0YXRlICpMKQo+Pit7Cj4+KyBzdHJ1Y3QgbHVhbV9NZXRyaWNzIG9sZG0s IG5ld207Cj4+KyBsdWFNX21ldHJpY3MoTCwgJm9sZG0pOwo+PisgLyogR2VuZXJhdGUgc25hcHNo b3RzLiAqLwo+PisgbHVhX2NhbGwoTCwgMCwgMSk7Cj4+KyBpbnQgbiA9IGx1YV9nZXR0b3AoTCk7 Cj4+KyAvKgo+PisgKiBUaGUgZmlyc3QgdmFsdWUgaXMgdGhlIHRhYmxlIHdpdGggZnVuY3Rpb25z LAo+PisgKiB0aGUgc2Vjb25kIGlzIG51bWJlciBvZiBzbmFwc2hvdCByZXN0b3Jlcy4KPj4rICov Cj4+KyBpZiAobiAhPSAyIHx8ICFsdWFfaXNudW1iZXIoTCwgLTEpKQo+PisgYmFpbF9vdXQoImlu Y29ycmVjdCByZXR1cm4gdmFsdWU6IDEgbnVtYmVyIGlzIHJlcXVpcmVkIik7Cj4+KyBzaXplX3Qg c25hcF9yZXN0b3JlcyA9IGx1YV90b251bWJlcihMLCAtMSk7Cj4+KyBsdWFNX21ldHJpY3MoTCwg Jm5ld20pOwo+PisgLyoKPj4rICogUmVtb3ZlIGBzbmFwX3Jlc3RvcmVzYCBmcm9tIHN0YWNrLgo+ PisgKiBNdXN0IGJlIGRvbmUgYmVmb3JlIHBvdGllbnRpYWwgYXNzZXJ0IGFuZCBleGl0IGZyb20K Pj4rICogdGhlIHRlc3QuCj4+KyAqLwo+PisgbHVhX3BvcChMLCAxKTsKPj4rIGFzc2VydF90cnVl KG5ld20uaml0X3NuYXBfcmVzdG9yZSAtIG9sZG0uaml0X3NuYXBfcmVzdG9yZQo+PisgPT0gc25h cF9yZXN0b3Jlcyk7Cj4+K30KPj4rCj4+K3N0YXRpYyBpbnQgc25hcF9yZXN0b3Jlc19kaXJlY3Rf ZXhpdCh2b2lkICp0ZXN0X3N0YXRlKQo+Pit7Cj4+KyBsdWFfU3RhdGUgKkwgPSB0ZXN0X3N0YXRl Owo+PisgdXRpbHNfZ2V0X2F1eF9sZnVuYyhMKTsKPj4rIGNoZWNrX3NuYXBfcmVzdG9yZXMoTCk7 Cj4+KyByZXR1cm4gVEVTVF9FWElUX1NVQ0NFU1M7Cj4+K30KPj4rCj4+K3N0YXRpYyBpbnQgc25h cF9yZXN0b3Jlc19kaXJlY3RfZXhpdF9zY2FsYXIodm9pZCAqdGVzdF9zdGF0ZSkKPj4rewo+Pisg bHVhX1N0YXRlICpMID0gdGVzdF9zdGF0ZTsKPj4rIHV0aWxzX2dldF9hdXhfbGZ1bmMoTCk7Cj4+ KyBjaGVja19zbmFwX3Jlc3RvcmVzKEwpOwo+PisgcmV0dXJuIFRFU1RfRVhJVF9TVUNDRVNTOwo+ Pit9Cj4+Kwo+PitzdGF0aWMgaW50IHNuYXBfcmVzdG9yZXNfc2lkZV9leGl0X2NvbXBpbGVkKHZv aWQgKnRlc3Rfc3RhdGUpCj4+K3sKPj4rIGx1YV9TdGF0ZSAqTCA9IHRlc3Rfc3RhdGU7Cj4+KyB1 dGlsc19nZXRfYXV4X2xmdW5jKEwpOwo+PisgY2hlY2tfc25hcF9yZXN0b3JlcyhMKTsKPj4rIHJl dHVybiBURVNUX0VYSVRfU1VDQ0VTUzsKPj4rfQo+PisKPj4rc3RhdGljIGludCBzbmFwX3Jlc3Rv cmVzX3NpZGVfZXhpdF9ub3RfY29tcGlsZWQodm9pZCAqdGVzdF9zdGF0ZSkKPj4rewo+PisgbHVh X1N0YXRlICpMID0gdGVzdF9zdGF0ZTsKPj4rIHV0aWxzX2dldF9hdXhfbGZ1bmMoTCk7Cj4+KyBj aGVja19zbmFwX3Jlc3RvcmVzKEwpOwo+PisgcmV0dXJuIFRFU1RfRVhJVF9TVUNDRVNTOwo+Pit9 Cj4+Kwo+U2FtZSBoZXJlLiBFaXRoZXIgYSBkZWRpY2F0ZWQgaW1wbGVtZW50YXRpb24gZnVuYywg b3IgYSBtYWNybyBpcyBuZWVkZWQgaGVyZS4KPj4rc3RhdGljIGludCBzbmFwX3Jlc3RvcmVzX2dy b3VwKHZvaWQgKnRlc3Rfc3RhdGUpCj4+K3sKPj4rIGlmICghTEpfSEFTSklUKQo+PisgcmV0dXJu IHNraXAoIlRlc3QgcmVxdWlyZXMgSklUIGVuYWJsZWQiKTsKPj4rIGNvbnN0IHN0cnVjdCB0ZXN0 X3VuaXQgdGdyb3VwW10gPSB7Cj4+KyB0ZXN0X3VuaXRfbmV3KHNuYXBfcmVzdG9yZXNfZGlyZWN0 X2V4aXQpLAo+PisgdGVzdF91bml0X25ldyhzbmFwX3Jlc3RvcmVzX2RpcmVjdF9leGl0X3NjYWxh ciksCj4+KyB0ZXN0X3VuaXRfbmV3KHNuYXBfcmVzdG9yZXNfc2lkZV9leGl0X2NvbXBpbGVkKSwK Pj4rIHRlc3RfdW5pdF9uZXcoc25hcF9yZXN0b3Jlc19zaWRlX2V4aXRfbm90X2NvbXBpbGVkKQo+ PisgfTsKPj4rIHJldHVybiB0ZXN0X3J1bl9ncm91cCh0Z3JvdXAsIHRlc3Rfc3RhdGUpOwo+Pit9 Cj4+Kwo+PitzdGF0aWMgaW50IHN0cmhhc2godm9pZCAqdGVzdF9zdGF0ZSkKPj4rewo+PisgbHVh X1N0YXRlICpMID0gdGVzdF9zdGF0ZTsKPj4rIHN0cnVjdCBsdWFtX01ldHJpY3Mgb2xkbSwgbmV3 bTsKPj4rIGx1YV9wdXNoc3RyaW5nKEwsICJzdHJoYXNoX2hpdCIpOwo+PisgbHVhTV9tZXRyaWNz KEwsICZvbGRtKTsKPj4rIGx1YV9wdXNoc3RyaW5nKEwsICJzdHJoYXNoX2hpdCIpOwo+PisgbHVh X3B1c2hzdHJpbmcoTCwgIm5ld19zdHIiKTsKPj4rIGx1YU1fbWV0cmljcyhMLCAmbmV3bSk7Cj4+ KyAvKiBSZW1vdmUgcHVzaGVkIHN0cmluZ3MuICovCj4+KyBsdWFfcG9wKEwsIDMpOwo+PisgYXNz ZXJ0X3RydWUobmV3bS5zdHJoYXNoX2hpdCAtIG9sZG0uc3RyaGFzaF9oaXQgPT0gMSk7Cj4+KyBh c3NlcnRfdHJ1ZShuZXdtLnN0cmhhc2hfbWlzcyAtIG9sZG0uc3RyaGFzaF9taXNzID09IDEpOwo+ PisgcmV0dXJuIFRFU1RfRVhJVF9TVUNDRVNTOwo+Pit9Cj4+Kwo+PitzdGF0aWMgaW50IHRyYWNl bnVtX2Jhc2Uodm9pZCAqdGVzdF9zdGF0ZSkKPj4rewo+PisgbHVhX1N0YXRlICpMID0gdGVzdF9z dGF0ZTsKPj4rIGlmICghTEpfSEFTSklUKQo+PisgcmV0dXJuIHNraXAoIlRlc3QgcmVxdWlyZXMg SklUIGVuYWJsZWQiKTsKPj4rIHN0cnVjdCBsdWFtX01ldHJpY3MgbWV0cmljczsKPj4rIHV0aWxz X2dldF9hdXhfbGZ1bmMoTCk7Cj4+Kwo+PisgbHVhSklUX3NldG1vZGUoTCwgMCwgTFVBSklUX01P REVfRkxVU0gpOwo+PisgLyogRm9yY2UgdXAgZ2FyYmFnZSBjb2xsZWN0IGFsbCBkZWFkIG9iamVj dHMuICovCj4+KyBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7Cj4+Kwo+PisgbHVhTV9tZXRy aWNzKEwsICZtZXRyaWNzKTsKPj4rIGFzc2VydF90cnVlKG1ldHJpY3Muaml0X3RyYWNlX251bSA9 PSAwKTsKPj4rCj4+KyAvKiBHZW5lcmF0ZSB0cmFjZXMuICovCj4+KyBsdWFfY2FsbChMLCAwLCAx KTsKPj4rIGludCBuID0gbHVhX2dldHRvcChMKTsKPj4rIC8qCj4+KyAqIFRoZSBmaXJzdCB2YWx1 ZSBpcyB0aGUgdGFibGUgd2l0aCBmdW5jdGlvbnMsCj4+KyAqIHRoZSBzZWNvbmQgaXMgdGhlIGFt b3VudCBvZiB0cmFjZXMuCj4+KyAqLwo+PisgaWYgKG4gIT0gMiB8fCAhbHVhX2lzbnVtYmVyKEws IC0xKSkKPj4rIGJhaWxfb3V0KCJpbmNvcnJlY3QgcmV0dXJuIHZhbHVlOiAxIG51bWJlciBpcyBy ZXF1aXJlZCIpOwo+Pisgc2l6ZV90IGppdF90cmFjZV9udW0gPSBsdWFfdG9udW1iZXIoTCwgLTEp Owo+PisgbHVhTV9tZXRyaWNzKEwsICZtZXRyaWNzKTsKPj4rIC8qIFJlbW92ZSBgaml0X3RyYWNl X251bWAgZnJvbSBMdWEgc3RhY2suICovCj4+KyBsdWFfcG9wKEwsIDEpOwo+PisKPj4rIGFzc2Vy dF9zaXpldF9lcXVhbChtZXRyaWNzLmppdF90cmFjZV9udW0sIGppdF90cmFjZV9udW0pOwo+PisK Pj4rIGx1YUpJVF9zZXRtb2RlKEwsIDAsIExVQUpJVF9NT0RFX0ZMVVNIKTsKPj4rIC8qIEZvcmNl IHVwIGdhcmJhZ2UgY29sbGVjdCBhbGwgZGVhZCBvYmplY3RzLiAqLwo+PisgbHVhX2djKEwsIExV QV9HQ0NPTExFQ1QsIDApOwo+PisgbHVhTV9tZXRyaWNzKEwsICZtZXRyaWNzKTsKPj4rIGFzc2Vy dF90cnVlKG1ldHJpY3Muaml0X3RyYWNlX251bSA9PSAwKTsKPj4rCj4+KyByZXR1cm4gVEVTVF9F WElUX1NVQ0NFU1M7Cj4+K30KPj4rCj4+K2ludCBtYWluKHZvaWQpCj4+K3sKPj4rIGlmIChMVUFK SVRfT1MgPT0gTFVBSklUX09TX0JTRCkKPj4rIHJldHVybiBza2lwX2FsbCgiRGlzYWJsZWQgb24g KkJTRCBkdWUgdG8gIzQ4MTkiKTsKPj4rCj4+KyBsdWFfU3RhdGUgKkwgPSB1dGlsc19sdWFfaW5p dCgpOwo+PisKPj4rIHV0aWxzX2xvYWRfYXV4X3NjcmlwdChMKTsKPj4rIGNvbnN0IHN0cnVjdCB0 ZXN0X3VuaXQgdGdyb3VwW10gPSB7Cj4+KyB0ZXN0X3VuaXRfbmV3KGJhc2UpLAo+PisgdGVzdF91 bml0X25ldyhnY19hbGxvY2F0ZWRfZnJlZWQpLAo+PisgdGVzdF91bml0X25ldyhnY19zdGVwcyks Cj4+KyB0ZXN0X3VuaXRfbmV3KG9iamNvdW50KSwKPj4rIHRlc3RfdW5pdF9uZXcob2JqY291bnRf Y2RhdGFfZGVjcmVtZW50KSwKPj4rIHRlc3RfdW5pdF9uZXcoc25hcF9yZXN0b3Jlc19ncm91cCks Cj4+KyB0ZXN0X3VuaXRfbmV3KHN0cmhhc2gpLAo+PisgdGVzdF91bml0X25ldyh0cmFjZW51bV9i YXNlKQo+PisgfTsKPj4rIGNvbnN0IGludCB0ZXN0X3Jlc3VsdCA9IHRlc3RfcnVuX2dyb3VwKHRn cm91cCwgTCk7Cj4+KyB1dGlsc19sdWFfY2xvc2UoTCk7Cj4+KyByZXR1cm4gdGVzdF9yZXN1bHQ7 Cj4+K30KPj5kaWZmIC0tZ2l0IGEvdGVzdC90YXJhbnRvb2wtdGVzdHMvQ01ha2VMaXN0cy50eHQg Yi90ZXN0L3RhcmFudG9vbC10ZXN0cy9DTWFrZUxpc3RzLnR4dAo+PmluZGV4IDM4ZDZhZTQ5Li5i NGNlMzlkMyAxMDA2NDQKPj4tLS0gYS90ZXN0L3RhcmFudG9vbC10ZXN0cy9DTWFrZUxpc3RzLnR4 dAo+PisrKyBiL3Rlc3QvdGFyYW50b29sLXRlc3RzL0NNYWtlTGlzdHMudHh0Cj4+QEAgLTY2LDcg KzY2LDYgQEAgYWRkX3N1YmRpcmVjdG9yeShsai00MTYteG9yLWJlZm9yZS1qY2MpCj4+wqBhZGRf c3ViZGlyZWN0b3J5KGxqLTYwMS1maXgtZ2MtZmluZGVycmZ1bmMpCj4+wqBhZGRfc3ViZGlyZWN0 b3J5KGxqLTcyNy1saWdodHVzZXJkYXRhLWl0ZXJuKQo+PsKgYWRkX3N1YmRpcmVjdG9yeShsai1m bHVzaC1vbi10cmFjZSkKPj4tYWRkX3N1YmRpcmVjdG9yeShtaXNjbGliLWdldG1ldHJpY3MtY2Fw aSkKPj7CoGFkZF9zdWJkaXJlY3RvcnkobWlzY2xpYi1zeXNwcm9mLWNhcGkpCj4+wqAKPj7CoCMg VGhlIHBhcnQgb2YgdGhlIG1lbW9yeSBwcm9maWxlciB0b29sY2hhaW4gaXMgbG9jYXRlZCBpbiB0 b29scwo+PmRpZmYgLS1naXQgYS90ZXN0L3RhcmFudG9vbC10ZXN0cy9taXNjbGliLWdldG1ldHJp Y3MtY2FwaS9DTWFrZUxpc3RzLnR4dCBiL3Rlc3QvdGFyYW50b29sLXRlc3RzL21pc2NsaWItZ2V0 bWV0cmljcy1jYXBpL0NNYWtlTGlzdHMudHh0Cj4+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4+ aW5kZXggNjBlYjViYmIuLjAwMDAwMDAwCj4+LS0tIGEvdGVzdC90YXJhbnRvb2wtdGVzdHMvbWlz Y2xpYi1nZXRtZXRyaWNzLWNhcGkvQ01ha2VMaXN0cy50eHQKPj4rKysgL2Rldi9udWxsCj4+QEAg LTEgKzAsMCBAQAo+Pi1CdWlsZFRlc3RDTGliKHRlc3RnZXRtZXRyaWNzIHRlc3RnZXRtZXRyaWNz LmMpCj4+ZGlmZiAtLWdpdCBhL3Rlc3QvdGFyYW50b29sLXRlc3RzL21pc2NsaWItZ2V0bWV0cmlj cy1jYXBpL3Rlc3RnZXRtZXRyaWNzLmMgYi90ZXN0L3RhcmFudG9vbC10ZXN0cy9taXNjbGliLWdl dG1ldHJpY3MtY2FwaS90ZXN0Z2V0bWV0cmljcy5jCj4+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 Cj4+aW5kZXggNjc3NzYzMzguLjAwMDAwMDAwCj4+LS0tIGEvdGVzdC90YXJhbnRvb2wtdGVzdHMv bWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkvdGVzdGdldG1ldHJpY3MuYwo+PisrKyAvZGV2L251bGwK Pj5AQCAtMSwyNzAgKzAsMCBAQAo+Pi0jaW5jbHVkZSA8bHVhLmg+Cj4+LSNpbmNsdWRlIDxsdWFq aXQuaD4KPj4tI2luY2x1ZGUgPGxhdXhsaWIuaD4KPj4tCj4+LSNpbmNsdWRlIDxsbWlzY2xpYi5o Pgo+Pi0KPj4tI3VuZGVmIE5ERUJVRwo+Pi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Cj4+LQo+Pi1zdGF0 aWMgaW50IGJhc2UobHVhX1N0YXRlICpMKQo+Pi17Cj4+LSBzdHJ1Y3QgbHVhbV9NZXRyaWNzIG1l dHJpY3M7Cj4+LSBsdWFNX21ldHJpY3MoTCwgJm1ldHJpY3MpOwo+Pi0KPj4tIC8qIEp1c3QgY2hl Y2sgc3RydWN0dXJlIGZvcm1hdCwgbm90IHZhbHVlcyB0aGF0IGZpZWxkcyBjb250YWluLiAqLwo+ Pi0gKHZvaWQpbWV0cmljcy5zdHJoYXNoX2hpdDsKPj4tICh2b2lkKW1ldHJpY3Muc3RyaGFzaF9t aXNzOwo+Pi0KPj4tICh2b2lkKW1ldHJpY3MuZ2Nfc3RybnVtOwo+Pi0gKHZvaWQpbWV0cmljcy5n Y190YWJudW07Cj4+LSAodm9pZCltZXRyaWNzLmdjX3VkYXRhbnVtOwo+Pi0gKHZvaWQpbWV0cmlj cy5nY19jZGF0YW51bTsKPj4tCj4+LSAodm9pZCltZXRyaWNzLmdjX3RvdGFsOwo+Pi0gKHZvaWQp bWV0cmljcy5nY19mcmVlZDsKPj4tICh2b2lkKW1ldHJpY3MuZ2NfYWxsb2NhdGVkOwo+Pi0KPj4t ICh2b2lkKW1ldHJpY3MuZ2Nfc3RlcHNfcGF1c2U7Cj4+LSAodm9pZCltZXRyaWNzLmdjX3N0ZXBz X3Byb3BhZ2F0ZTsKPj4tICh2b2lkKW1ldHJpY3MuZ2Nfc3RlcHNfYXRvbWljOwo+Pi0gKHZvaWQp bWV0cmljcy5nY19zdGVwc19zd2VlcHN0cmluZzsKPj4tICh2b2lkKW1ldHJpY3MuZ2Nfc3RlcHNf c3dlZXA7Cj4+LSAodm9pZCltZXRyaWNzLmdjX3N0ZXBzX2ZpbmFsaXplOwo+Pi0KPj4tICh2b2lk KW1ldHJpY3Muaml0X3NuYXBfcmVzdG9yZTsKPj4tICh2b2lkKW1ldHJpY3Muaml0X3RyYWNlX2Fi b3J0Owo+Pi0gKHZvaWQpbWV0cmljcy5qaXRfbWNvZGVfc2l6ZTsKPj4tICh2b2lkKW1ldHJpY3Mu aml0X3RyYWNlX251bTsKPj4tCj4+LSBsdWFfcHVzaGJvb2xlYW4oTCwgMSk7Cj4+LSByZXR1cm4g MTsKPj4tfQo+Pi0KPj4tc3RhdGljIGludCBnY19hbGxvY2F0ZWRfZnJlZWQobHVhX1N0YXRlICpM KQo+Pi17Cj4+LSBzdHJ1Y3QgbHVhbV9NZXRyaWNzIG9sZG0sIG5ld207Cj4+LSAvKiBGb3JjZSB1 cCBnYXJiYWdlIGNvbGxlY3QgYWxsIGRlYWQgb2JqZWN0cy4gKi8KPj4tIGx1YV9nYyhMLCBMVUFf R0NDT0xMRUNULCAwKTsKPj4tCj4+LSBsdWFNX21ldHJpY3MoTCwgJm9sZG0pOwo+Pi0gLyogU2lt cGxlIGdhcmJhZ2UgZ2VuZXJhdGlvbi4gKi8KPj4tIGlmIChsdWFMX2Rvc3RyaW5nKEwsICJsb2Nh bCBpID0gMCBmb3IgaiA9IDEsIDEwIGRvIGkgPSBpICsgaiBlbmQiKSkKPj4tIGx1YUxfZXJyb3Io TCwgImZhaWxlZCB0byB0cmFuc2xhdGUgTHVhIGNvZGUgc25pcHBldCIpOwo+Pi0gbHVhX2djKEws IExVQV9HQ0NPTExFQ1QsIDApOwo+Pi0gbHVhTV9tZXRyaWNzKEwsICZuZXdtKTsKPj4tIGFzc2Vy dChuZXdtLmdjX2FsbG9jYXRlZCAtIG9sZG0uZ2NfYWxsb2NhdGVkID4gMCk7Cj4+LSBhc3NlcnQo bmV3bS5nY19mcmVlZCAtIG9sZG0uZ2NfZnJlZWQgPiAwKTsKPj4tCj4+LSBsdWFfcHVzaGJvb2xl YW4oTCwgMSk7Cj4+LSByZXR1cm4gMTsKPj4tfQo+Pi0KPj4tc3RhdGljIGludCBnY19zdGVwcyhs dWFfU3RhdGUgKkwpCj4+LXsKPj4tIHN0cnVjdCBsdWFtX01ldHJpY3Mgb2xkbSwgbmV3bTsKPj4t IC8qCj4+LSAqIFNvbWUgZ2FyYmFnZSBoYXMgYWxyZWFkeSBoYXBwZW5lZCBiZWZvcmUgdGhlIG5l eHQgbGluZSwKPj4tICogaS5lLiBkdXJpbmcgZnJvbnRlbmQgcHJvY2Vzc2luZyBMdWEgdGVzdCBj aHVuay4KPj4tICogTGV0J3MgcHV0IGEgZnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gY3ljbGUgb24g dG9wCj4+LSAqIG9mIHRoYXQsIGFuZCBjb25maXJtIHRoYXQgbm9uLW51bGwgdmFsdWVzIGFyZSBy ZXBvcnRlZAo+Pi0gKiAod2UgYXJlIG5vdCB5ZXQgaW50ZXJlc3RlZCBpbiBhY3R1YWwgbnVtYmVy cyk6Cj4+LSAqLwo+Pi0gbHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOwo+Pi0KPj4tIGx1YU1f bWV0cmljcyhMLCAmb2xkbSk7Cj4+LSBhc3NlcnQob2xkbS5nY19zdGVwc19wYXVzZSA+IDApOwo+ Pi0gYXNzZXJ0KG9sZG0uZ2Nfc3RlcHNfcHJvcGFnYXRlID4gMCk7Cj4+LSBhc3NlcnQob2xkbS5n Y19zdGVwc19hdG9taWMgPiAwKTsKPj4tIGFzc2VydChvbGRtLmdjX3N0ZXBzX3N3ZWVwc3RyaW5n ID4gMCk7Cj4+LSBhc3NlcnQob2xkbS5nY19zdGVwc19zd2VlcCA+IDApOwo+Pi0gLyogTm90aGlu ZyB0byBmaW5hbGl6ZSwgc2tpcHBlZC4gKi8KPj4tIGFzc2VydChvbGRtLmdjX3N0ZXBzX2ZpbmFs aXplID09IDApOwo+Pi0KPj4tIC8qCj4+LSAqIEFzIGxvbmcgYXMgd2UgZG9uJ3QgY3JlYXRlIG5l dyBMdWEgb2JqZWN0cwo+Pi0gKiBjb25zZXF1ZW50IGNhbGwgc2hvdWxkIHJldHVybiB0aGUgc2Ft ZSB2YWx1ZXM6Cj4+LSAqLwo+Pi0gbHVhTV9tZXRyaWNzKEwsICZuZXdtKTsKPj4tIGFzc2VydChu ZXdtLmdjX3N0ZXBzX3BhdXNlIC0gb2xkbS5nY19zdGVwc19wYXVzZSA9PSAwKTsKPj4tIGFzc2Vy dChuZXdtLmdjX3N0ZXBzX3Byb3BhZ2F0ZSAtIG9sZG0uZ2Nfc3RlcHNfcHJvcGFnYXRlID09IDAp Owo+Pi0gYXNzZXJ0KG5ld20uZ2Nfc3RlcHNfYXRvbWljIC0gb2xkbS5nY19zdGVwc19hdG9taWMg PT0gMCk7Cj4+LSBhc3NlcnQobmV3bS5nY19zdGVwc19zd2VlcHN0cmluZyAtIG9sZG0uZ2Nfc3Rl cHNfc3dlZXBzdHJpbmcgPT0gMCk7Cj4+LSBhc3NlcnQobmV3bS5nY19zdGVwc19zd2VlcCAtIG9s ZG0uZ2Nfc3RlcHNfc3dlZXAgPT0gMCk7Cj4+LSAvKiBOb3RoaW5nIHRvIGZpbmFsaXplLCBza2lw cGVkLiAqLwo+Pi0gYXNzZXJ0KG5ld20uZ2Nfc3RlcHNfZmluYWxpemUgPT0gMCk7Cj4+LSBvbGRt ID0gbmV3bTsKPj4tCj4+LSAvKgo+Pi0gKiBOb3cgdGhlIGxhc3QgcGhhc2U6IHJ1biBmdWxsIEdD IG9uY2UgYW5kIG1ha2Ugc3VyZSB0aGF0Cj4+LSAqIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgcmVwb3J0 ZWQgYXMgZXhwZWN0ZWQ6Cj4+LSAqLwo+Pi0gbHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOwo+ Pi0gbHVhTV9tZXRyaWNzKEwsICZuZXdtKTsKPj4tIGFzc2VydChuZXdtLmdjX3N0ZXBzX3BhdXNl IC0gb2xkbS5nY19zdGVwc19wYXVzZSA9PSAxKTsKPj4tIGFzc2VydChuZXdtLmdjX3N0ZXBzX3By b3BhZ2F0ZSAtIG9sZG0uZ2Nfc3RlcHNfcHJvcGFnYXRlID49IDEpOwo+Pi0gYXNzZXJ0KG5ld20u Z2Nfc3RlcHNfYXRvbWljIC0gb2xkbS5nY19zdGVwc19hdG9taWMgPT0gMSk7Cj4+LSBhc3NlcnQo bmV3bS5nY19zdGVwc19zd2VlcHN0cmluZyAtIG9sZG0uZ2Nfc3RlcHNfc3dlZXBzdHJpbmcgPj0g MSk7Cj4+LSBhc3NlcnQobmV3bS5nY19zdGVwc19zd2VlcCAtIG9sZG0uZ2Nfc3RlcHNfc3dlZXAg Pj0gMSk7Cj4+LSAvKiBOb3RoaW5nIHRvIGZpbmFsaXplLCBza2lwcGVkLiAqLwo+Pi0gYXNzZXJ0 KG5ld20uZ2Nfc3RlcHNfZmluYWxpemUgPT0gMCk7Cj4+LSBvbGRtID0gbmV3bTsKPj4tCj4+LSAv Kgo+Pi0gKiBOb3cgbGV0J3MgcnVuIHRocmVlIEdDIGN5Y2xlcyB0byBlbnN1cmUgdGhhdAo+Pi0g KiBpbmNyZW1lbnQgd2FzIG5vdCBhIGx1Y2t5IGNvaW5jaWRlbmNlLgo+Pi0gKi8KPj4tIGx1YV9n YyhMLCBMVUFfR0NDT0xMRUNULCAwKTsKPj4tIGx1YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTsK Pj4tIGx1YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTsKPj4tIGx1YU1fbWV0cmljcyhMLCAmbmV3 bSk7Cj4+LSBhc3NlcnQobmV3bS5nY19zdGVwc19wYXVzZSAtIG9sZG0uZ2Nfc3RlcHNfcGF1c2Ug PT0gMyk7Cj4+LSBhc3NlcnQobmV3bS5nY19zdGVwc19wcm9wYWdhdGUgLSBvbGRtLmdjX3N0ZXBz X3Byb3BhZ2F0ZSA+PSAzKTsKPj4tIGFzc2VydChuZXdtLmdjX3N0ZXBzX2F0b21pYyAtIG9sZG0u Z2Nfc3RlcHNfYXRvbWljID09IDMpOwo+Pi0gYXNzZXJ0KG5ld20uZ2Nfc3RlcHNfc3dlZXBzdHJp bmcgLSBvbGRtLmdjX3N0ZXBzX3N3ZWVwc3RyaW5nID49IDMpOwo+Pi0gYXNzZXJ0KG5ld20uZ2Nf c3RlcHNfc3dlZXAgLSBvbGRtLmdjX3N0ZXBzX3N3ZWVwID49IDMpOwo+Pi0gLyogTm90aGluZyB0 byBmaW5hbGl6ZSwgc2tpcHBlZC4gKi8KPj4tIGFzc2VydChuZXdtLmdjX3N0ZXBzX2ZpbmFsaXpl ID09IDApOwo+Pi0KPj4tIGx1YV9wdXNoYm9vbGVhbihMLCAxKTsKPj4tIHJldHVybiAxOwo+Pi19 Cj4+LQo+Pi1zdGF0aWMgaW50IG9iamNvdW50KGx1YV9TdGF0ZSAqTCkKPj4tewo+Pi0gc3RydWN0 IGx1YW1fTWV0cmljcyBvbGRtLCBuZXdtOwo+Pi0gaW50IG4gPSBsdWFfZ2V0dG9wKEwpOwo+Pi0g aWYgKG4gIT0gMSB8fCAhbHVhX2lzZnVuY3Rpb24oTCwgMSkpCj4+LSBsdWFMX2Vycm9yKEwsICJp bmNvcnJlY3QgYXJndW1lbnQ6IDEgZnVuY3Rpb24gaXMgcmVxdWlyZWQiKTsKPj4tCj4+LSAvKiBG b3JjZSB1cCBnYXJiYWdlIGNvbGxlY3QgYWxsIGRlYWQgb2JqZWN0cy4gKi8KPj4tIGx1YV9nYyhM LCBMVUFfR0NDT0xMRUNULCAwKTsKPj4tCj4+LSBsdWFNX21ldHJpY3MoTCwgJm9sZG0pOwo+Pi0g LyogR2VuZXJhdGUgZ2FyYmFnZS4gQXJndW1lbnQgaXMgaXRlcmF0aW9ucyBhbW91bnQuICovCj4+ LSBsdWFfcHVzaG51bWJlcihMLCAxMDAwKTsKPj4tIGx1YV9jYWxsKEwsIDEsIDApOwo+Pi0gbHVh X2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOwo+Pi0gbHVhTV9tZXRyaWNzKEwsICZuZXdtKTsKPj4t IGFzc2VydChuZXdtLmdjX3N0cm51bSAtIG9sZG0uZ2Nfc3RybnVtID09IDApOwo+Pi0gYXNzZXJ0 KG5ld20uZ2NfdGFibnVtIC0gb2xkbS5nY190YWJudW0gPT0gMCk7Cj4+LSBhc3NlcnQobmV3bS5n Y191ZGF0YW51bSAtIG9sZG0uZ2NfdWRhdGFudW0gPT0gMCk7Cj4+LSBhc3NlcnQobmV3bS5nY19j ZGF0YW51bSAtIG9sZG0uZ2NfY2RhdGFudW0gPT0gMCk7Cj4+LQo+Pi0gbHVhX3B1c2hib29sZWFu KEwsIDEpOwo+Pi0gcmV0dXJuIDE7Cj4+LX0KPj4tCj4+LXN0YXRpYyBpbnQgb2JqY291bnRfY2Rh dGFfZGVjcmVtZW50KGx1YV9TdGF0ZSAqTCkKPj4tewo+Pi0gLyoKPj4tICogY2RhdGEgZGVjcmVt ZW50IHRlc3QuCj4+LSAqIFNlZSAgaHR0cHM6Ly9naXRodWIuY29tL3RhcmFudG9vbC90YXJhbnRv b2wvaXNzdWVzLzU4MjAgLgo+Pi0gKi8KPj4tIHN0cnVjdCBsdWFtX01ldHJpY3Mgb2xkbSwgbmV3 bTsKPj4tIGludCBuID0gbHVhX2dldHRvcChMKTsKPj4tIGlmIChuICE9IDEgfHwgIWx1YV9pc2Z1 bmN0aW9uKEwsIDEpKQo+Pi0gbHVhTF9lcnJvcihMLCAiaW5jb3JyZWN0IGFyZ3VtZW50OiAxIGZ1 bmN0aW9uIGlzIHJlcXVpcmVkIik7Cj4+LQo+Pi0gLyogRm9yY2UgdXAgZ2FyYmFnZSBjb2xsZWN0 IGFsbCBkZWFkIG9iamVjdHMuICovCj4+LSBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7Cj4+ LQo+Pi0gbHVhTV9tZXRyaWNzKEwsICZvbGRtKTsKPj4tIC8qCj4+LSAqIFRoZSBmdW5jdGlvbiBn ZW5lcmF0ZXMgYW5kIGNvbGxlY3RzIGNkYXRhIHdpdGgKPj4tICogTEpfR0NfQ0RBVEFfRklOIGZs YWcuCj4+LSAqLwo+Pi0gbHVhX2NhbGwoTCwgMCwgMCk7Cj4+LSBsdWFNX21ldHJpY3MoTCwgJm5l d20pOwo+Pi0gYXNzZXJ0KG5ld20uZ2NfY2RhdGFudW0gLSBvbGRtLmdjX2NkYXRhbnVtID09IDAp Owo+Pi0KPj4tIGx1YV9wdXNoYm9vbGVhbihMLCAxKTsKPj4tIHJldHVybiAxOwo+Pi19Cj4+LQo+ Pi1zdGF0aWMgaW50IHNuYXBfcmVzdG9yZXMobHVhX1N0YXRlICpMKQo+Pi17Cj4+LSBzdHJ1Y3Qg bHVhbV9NZXRyaWNzIG9sZG0sIG5ld207Cj4+LSBpbnQgbiA9IGx1YV9nZXR0b3AoTCk7Cj4+LSBp ZiAobiAhPSAxIHx8ICFsdWFfaXNmdW5jdGlvbihMLCAxKSkKPj4tIGx1YUxfZXJyb3IoTCwgImlu Y29ycmVjdCBhcmd1bWVudHM6IDEgZnVuY3Rpb24gaXMgcmVxdWlyZWQiKTsKPj4tCj4+LSBsdWFN X21ldHJpY3MoTCwgJm9sZG0pOwo+Pi0gLyogR2VuZXJhdGUgc25hcHNob3RzLiAqLwo+Pi0gbHVh X2NhbGwoTCwgMCwgMSk7Cj4+LSBuID0gbHVhX2dldHRvcChMKTsKPj4tIGlmIChuICE9IDEgfHwg IWx1YV9pc251bWJlcihMLCAxKSkKPj4tIGx1YUxfZXJyb3IoTCwgImluY29ycmVjdCByZXR1cm4g dmFsdWU6IDEgbnVtYmVyIGlzIHJlcXVpcmVkIik7Cj4+LSBzaXplX3Qgc25hcF9yZXN0b3JlcyA9 IGx1YV90b251bWJlcihMLCAxKTsKPj4tIGx1YU1fbWV0cmljcyhMLCAmbmV3bSk7Cj4+LSBhc3Nl cnQobmV3bS5qaXRfc25hcF9yZXN0b3JlIC0gb2xkbS5qaXRfc25hcF9yZXN0b3JlID09IHNuYXBf cmVzdG9yZXMpOwo+Pi0KPj4tIGx1YV9wdXNoYm9vbGVhbihMLCAxKTsKPj4tIHJldHVybiAxOwo+ Pi19Cj4+LQo+Pi1zdGF0aWMgaW50IHN0cmhhc2gobHVhX1N0YXRlICpMKQo+Pi17Cj4+LSBzdHJ1 Y3QgbHVhbV9NZXRyaWNzIG9sZG0sIG5ld207Cj4+LSBsdWFfcHVzaHN0cmluZyhMLCAic3RyaGFz aF9oaXQiKTsKPj4tIGx1YU1fbWV0cmljcyhMLCAmb2xkbSk7Cj4+LSBsdWFfcHVzaHN0cmluZyhM LCAic3RyaGFzaF9oaXQiKTsKPj4tIGx1YV9wdXNoc3RyaW5nKEwsICJuZXdfc3RyIik7Cj4+LSBs dWFNX21ldHJpY3MoTCwgJm5ld20pOwo+Pi0gYXNzZXJ0KG5ld20uc3RyaGFzaF9oaXQgLSBvbGRt LnN0cmhhc2hfaGl0ID09IDEpOwo+Pi0gYXNzZXJ0KG5ld20uc3RyaGFzaF9taXNzIC0gb2xkbS5z dHJoYXNoX21pc3MgPT0gMSk7Cj4+LSBsdWFfcG9wKEwsIDMpOwo+Pi0gbHVhX3B1c2hib29sZWFu KEwsIDEpOwo+Pi0gcmV0dXJuIDE7Cj4+LX0KPj4tCj4+LXN0YXRpYyBpbnQgdHJhY2VudW1fYmFz ZShsdWFfU3RhdGUgKkwpCj4+LXsKPj4tIHN0cnVjdCBsdWFtX01ldHJpY3MgbWV0cmljczsKPj4t IGludCBuID0gbHVhX2dldHRvcChMKTsKPj4tIGlmIChuICE9IDEgfHwgIWx1YV9pc2Z1bmN0aW9u KEwsIDEpKQo+Pi0gbHVhTF9lcnJvcihMLCAiaW5jb3JyZWN0IGFyZ3VtZW50czogMSBmdW5jdGlv biBpcyByZXF1aXJlZCIpOwo+Pi0KPj4tIGx1YUpJVF9zZXRtb2RlKEwsIDAsIExVQUpJVF9NT0RF X0ZMVVNIKTsKPj4tIC8qIEZvcmNlIHVwIGdhcmJhZ2UgY29sbGVjdCBhbGwgZGVhZCBvYmplY3Rz LiAqLwo+Pi0gbHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOwo+Pi0KPj4tIGx1YU1fbWV0cmlj cyhMLCAmbWV0cmljcyk7Cj4+LSBhc3NlcnQobWV0cmljcy5qaXRfdHJhY2VfbnVtID09IDApOwo+ Pi0KPj4tIC8qIEdlbmVyYXRlIHRyYWNlcy4gKi8KPj4tIGx1YV9jYWxsKEwsIDAsIDEpOwo+Pi0g biA9IGx1YV9nZXR0b3AoTCk7Cj4+LSBpZiAobiAhPSAxIHx8ICFsdWFfaXNudW1iZXIoTCwgMSkp Cj4+LSBsdWFMX2Vycm9yKEwsICJpbmNvcnJlY3QgcmV0dXJuIHZhbHVlOiAxIG51bWJlciBpcyBy ZXF1aXJlZCIpOwo+Pi0gc2l6ZV90IGppdF90cmFjZV9udW0gPSBsdWFfdG9udW1iZXIoTCwgMSk7 Cj4+LSBsdWFNX21ldHJpY3MoTCwgJm1ldHJpY3MpOwo+Pi0gYXNzZXJ0KG1ldHJpY3Muaml0X3Ry YWNlX251bSA9PSBqaXRfdHJhY2VfbnVtKTsKPj4tCj4+LSBsdWFKSVRfc2V0bW9kZShMLCAwLCBM VUFKSVRfTU9ERV9GTFVTSCk7Cj4+LSAvKiBGb3JjZSB1cCBnYXJiYWdlIGNvbGxlY3QgYWxsIGRl YWQgb2JqZWN0cy4gKi8KPj4tIGx1YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTsKPj4tIGx1YU1f bWV0cmljcyhMLCAmbWV0cmljcyk7Cj4+LSBhc3NlcnQobWV0cmljcy5qaXRfdHJhY2VfbnVtID09 IDApOwo+Pi0KPj4tIGx1YV9wdXNoYm9vbGVhbihMLCAxKTsKPj4tIHJldHVybiAxOwo+Pi19Cj4+ LQo+Pi1zdGF0aWMgY29uc3Qgc3RydWN0IGx1YUxfUmVnIHRlc3RnZXRtZXRyaWNzW10gPSB7Cj4+ LSB7ImJhc2UiLCBiYXNlfSwKPj4tIHsiZ2NfYWxsb2NhdGVkX2ZyZWVkIiwgZ2NfYWxsb2NhdGVk X2ZyZWVkfSwKPj4tIHsiZ2Nfc3RlcHMiLCBnY19zdGVwc30sCj4+LSB7Im9iamNvdW50Iiwgb2Jq Y291bnR9LAo+Pi0geyJvYmpjb3VudF9jZGF0YV9kZWNyZW1lbnQiLCBvYmpjb3VudF9jZGF0YV9k ZWNyZW1lbnR9LAo+Pi0geyJzbmFwX3Jlc3RvcmVzIiwgc25hcF9yZXN0b3Jlc30sCj4+LSB7InN0 cmhhc2giLCBzdHJoYXNofSwKPj4tIHsidHJhY2VudW1fYmFzZSIsIHRyYWNlbnVtX2Jhc2V9LAo+ Pi0ge05VTEwsIE5VTEx9Cj4+LX07Cj4+LQo+Pi1MVUFfQVBJIGludCBsdWFvcGVuX3Rlc3RnZXRt ZXRyaWNzKGx1YV9TdGF0ZSAqTCkKPj4tewo+Pi0gbHVhTF9yZWdpc3RlcihMLCAidGVzdGdldG1l dHJpY3MiLCB0ZXN0Z2V0bWV0cmljcyk7Cj4+LSByZXR1cm4gMTsKPj4tfQo+Pi0tCj4+Mi4zNC4x Cj4tLQo+QmVzdCByZWdhcmRzLAo+TWF4aW0gS29rcnlhc2hraW4KPsKg ----ALT--fA6e47699d6E342ED2fdBeE3fD6d194C1684498677 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxkaXY+SGksIFNlcmdleTwvZGl2PjxkaXY+VGhhbmtzIGZvciB0aGUgcGF0 Y2guPC9kaXY+PGRpdj5MR1RNLCBleGNlcHQgZm9yIGEgZmV3IGNvbW1lbnRzIGJlbG93LjwvZGl2 PjxkaXY+Jm5ic3A7PC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OjFweCBzb2xp ZCAjMDg1N0E2OyBtYXJnaW46MTBweDsgcGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj4mbmJzcDs8 YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICMwODU3QTY7IG1hcmdpbjox MHB4OyBwYWRkaW5nOjAgMCAwIDEwcHg7Ij48ZGl2IGlkPSIiPjxkaXYgY2xhc3M9ImpzLWhlbHBl ciBqcy1yZWFkbXNnLW1zZyI+PGRpdj48ZGl2IGlkPSJzdHlsZV8xNjg0NDQyOTQ0MTM2MzIwNjE5 N19CT0RZIj5UaGlzIHBhdGNoIHJld3JpdGVzIHRoZSBhZm9yZW1lbnRpb25lZCB0ZXN0IHdpdGgg dGhlIHVzYWdlIGxpYnRlc3QsPGJyPnJlY2VudGx5IGludHJvZHVjZWQuIFNpbmNlIHdlIHN0aWxs IHN0YW5kIGluIG5lZWQgb2YgYSBMdWEgaGVscGVyIHNjcmlwdDxicj5mb3IgZ2VuZXJhdGlvbiBv ZiB0cmFjZXMsIHRoZSBvcmlnaW5hbCB0ZXN0IGZpbGUgaXMgcmV3b3JrZWQgYXMgYTxicj5zdGFu ZGFsb25lIHNjcmlwdCwgd2hpY2ggcmV0dXJucyB0aGUgdGFibGUgd2l0aCBoZWxwZXIgZnVuY3Rp b25zLiBFYWNoPGJyPmhlbHBlciBmdW5jdGlvbiBpcyBuYW1lZCB0aGUgc2FtZSBhcyB0aGUgdGVz dCB3aGVyZSBpdCB3aWxsIGJlIHVzZWQuIE5vdzxicj5zaW5nbGUgcXVvdGVzIGFyZSB1c2VkIGFj Y29yZGluZyB0byBvdXIgTHVhIGNvZGUgc3R5bGUuPGJyPjxicj5JbiBDIHBhcnQgYWxsIGFzc2Vy dHMgZnJvbSBnbGliYyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZzxicj5hc3Nl cnRfe2NvbmR9IGZyb20gdGhlIGxpYnRlc3QuIE5vdyB0ZXN0cyByZXR1cm4gYFRFU1RfRVhJVF9T VUNDRVNTYCBhdDxicj50aGUgZmluaXNoLiBBbHNvLCB0aGUgc3RhY2sgY2hlY2sgZm9yIHRoZSBh bW91bnQgb2YgcmV0dXJuIHJlc3VsdHMgZnJvbTxicj50aGUgaGVscGVyIGZ1bmN0aW9uIGlzIHNs aWdodGx5IGNoYW5nZWQsIHNpbmNlIHRoZXJlIGlzIG9uZSBtb3JlIHN0YWNrPGJyPnNsb3QgaW4g dXNlICh0YWJsZSB3aXRoIHRoZXNlIGZ1bmN0aW9ucykuIGBzbmFwX3Jlc3RvcmVzKClgIEMgZnVu Y3Rpb248YnI+ZHVwbGljYXRlcyA0IHRpbWVzIGZvciBlYWNoIHN1YnRlc3QuIENvbW1vbiBoZWxw ZXI8YnI+YGNoZWNrX3NuYXBfcmVzdG9yZXMoKWAgaXMgdXNlZCBmb3IgZWFjaCBvZiB0aGVtLiBF YWNoIGVycm9yIHRocm93aW5nIGlzPGJyPnJlcGxhY2VkIHdpdGggYGJhaWxfb3V0KClgIGNhbGwu PGJyPjxicj5OQjogYGx1YV9wb3AoKWAgdG8gY2xlYXIgdGhlIEx1YSBzdGFjayBhZnRlciBhIGNh bGwgc2hvdWxkIGJlIGRvbmUgYmVmb3JlPGJyPmFueSBwb3NzaWJsZSBhc3NlcnRpb24sIHdoaWNo IHdvdWxkIGV4aXQgZnJvbSB0aGUgdGVzdCBsZWF2aW5nIHRoZSBzdGFjazxicj51bmNsZWFuZWQu PGJyPjxicj5BbGwgc2tpcGNvbmRzIHVzZSBtYWNyb3MgZGVmaW5lZCBpbiAmbHQ7bGpfYXJjaC5o Jmd0Oywgc28gaXQgaXMgaW5jbHVkZWQgaW48YnI+dGhlIHRlc3QuIEFzIGZhciBhcyB0aGlzIHRl c3QgaW5pdGlhbGl6ZXMgdGhlIEx1YUpJVCBWTSBtYW51YWxseSwgdGhlcmU8YnI+aXMgbm8gbmVl ZCB0byBjaGVjayBgaml0LnN0YXR1cygpYCByZXN1bHQ7IGNoZWNraW5nIGBMSl9IQVNKSVRgIGlz PGJyPmVub3VnaC4gTm93LCBvbmx5IEpJVC1yZWxhdGVkIHRlc3RzIGFyZSBza2lwcGVkLCB3aGVu IGNvbXBpbGVkIHdpdGhvdXQ8YnI+SklULiBOZXZlcnRoZWxlc3MsIGFsbCB0ZXN0cyBhcmUgc2tp cHBlZCBmb3IgKkJTRCBhcmNoZXMuPGJyPjxicj5BbHNvLCB0aGlzIHBhdGNoIHNldHMgdGhlIG5l dyBDTWFrZSB2YXJpYWJsZSBuYW1lZCBgTFVBSklUX0xJQlJBUllgPGJyPmVxdWFsIHRvIGBMVUFK SVRfTElCYCBpbiBgUEFSRU5UX1NDT1BFYCB0byBiZSB1c2VkIGluIHRhcmFudG9vbC1jLXRlc3Rz PGJyPmxpbmtpbmcuPGJyPjxicj5BbHNvLCAuY190ZXN0IHN1ZmZpeCBpcyBhZGRlZCB0byB0aGUg Jmx0Oy5naXRpZ25vcmUmZ3Q7Ljxicj48YnI+UGFydCBvZiB0YXJhbnRvb2wvdGFyYW50b29sIzc5 MDA8YnI+LS0tPGJyPiZuYnNwOy5naXRpZ25vcmUgfCAxICs8YnI+Jm5ic3A7c3JjL0NNYWtlTGlz dHMudHh0IHwgMiArPGJyPiZuYnNwO3Rlc3QvdGFyYW50b29sLWMtdGVzdHMvQ01ha2VMaXN0cy50 eHQgfCAzMiArLTxicj4mbmJzcDsuLi4vbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGktc2NyaXB0Lmx1 YX0gfCA4MyArKy0tLTxicj4mbmJzcDsuLi4vbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkudGVzdC5j IHwgMzQzICsrKysrKysrKysrKysrKysrKzxicj4mbmJzcDt0ZXN0L3RhcmFudG9vbC10ZXN0cy9D TWFrZUxpc3RzLnR4dCB8IDEgLTxicj4mbmJzcDsuLi4vbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkv Q01ha2VMaXN0cy50eHQgfCAxIC08YnI+Jm5ic3A7Li4uL21pc2NsaWItZ2V0bWV0cmljcy1jYXBp L3Rlc3RnZXRtZXRyaWNzLmMgfCAyNzAgLS0tLS0tLS0tLS0tLS08YnI+Jm5ic3A7OCBmaWxlcyBj aGFuZ2VkLCA0MTIgaW5zZXJ0aW9ucygrKSwgMzIxIGRlbGV0aW9ucygtKTxicj4mbmJzcDtyZW5h bWUgdGVzdC97dGFyYW50b29sLXRlc3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpLnRlc3QubHVh ID0mZ3Q7IHRhcmFudG9vbC1jLXRlc3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpLXNjcmlwdC5s dWF9ICg2OCUpPGJyPiZuYnNwO2NyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L3RhcmFudG9vbC1jLXRl c3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpLnRlc3QuYzxicj4mbmJzcDtkZWxldGUgbW9kZSAx MDA2NDQgdGVzdC90YXJhbnRvb2wtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkvQ01ha2VM aXN0cy50eHQ8YnI+Jm5ic3A7ZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3QvdGFyYW50b29sLXRlc3Rz L21pc2NsaWItZ2V0bWV0cmljcy1jYXBpL3Rlc3RnZXRtZXRyaWNzLmM8YnI+PGJyPmRpZmYgLS1n aXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZTxicj5pbmRleCBiNzkwOGFlZS4uZGM1ZWE1ZmMg MTAwNjQ0PGJyPi0tLSBhLy5naXRpZ25vcmU8YnI+KysrIGIvLmdpdGlnbm9yZTxicj5AQCAtMjQs MyArMjQsNCBAQCBpbnN0YWxsX21hbmlmZXN0LnR4dDxicj4mbmJzcDtsdWFqaXQtcGFyc2UtbWVt cHJvZjxicj4mbmJzcDtsdWFqaXQtcGFyc2Utc3lzcHJvZjxicj4mbmJzcDtsdWFqaXQucGM8YnI+ KyouY190ZXN0PGJyPmRpZmYgLS1naXQgYS9zcmMvQ01ha2VMaXN0cy50eHQgYi9zcmMvQ01ha2VM aXN0cy50eHQ8YnI+aW5kZXggZGZmYzBhNGQuLmZlZDRjMzhkIDEwMDY0NDxicj4tLS0gYS9zcmMv Q01ha2VMaXN0cy50eHQ8YnI+KysrIGIvc3JjL0NNYWtlTGlzdHMudHh0PGJyPkBAIC0zMjUsNiAr MzI1LDggQEAgaWYoTk9UIEJVSUxETU9ERSBTVFJFUVVBTCAiZHluYW1pYyIpPGJyPiZuYnNwOyZu YnNwOyZuYnNwO3NldChMVUFKSVRfQklOIGx1YWppdF9zdGF0aWMpPGJyPiZuYnNwOyZuYnNwOyZu YnNwO3NldChMVUFKSVRfTElCIGxpYmx1YWppdF9zdGF0aWMpPGJyPiZuYnNwO2VuZGlmKCk8YnI+ KyMgTmVlZCBmb3IgdGhlIHRlc3QgbGlua2luZywgc28gdGhlIFBBUkVOVF9TQ09QRSBvcHRpb24g aXMgdXNlZC48YnI+K3NldChMVUFKSVRfTElCUkFSWSAke0xVQUpJVF9MSUJ9IFBBUkVOVF9TQ09Q RSk8YnI+Jm5ic3A7c2V0KExJQkxVQUpJVF9ERVBTICR7TElCTFVBSklUX1NUQVRJQ19ERVBTfSAk e0xJQkxVQUpJVF9TSEFSRURfREVQU30pPGJyPiZuYnNwOzxicj4mbmJzcDthZGRfZXhlY3V0YWJs ZSgke0xVQUpJVF9CSU59IEVYQ0xVREVfRlJPTV9BTEwgJHtDTElfU09VUkNFU30pPGJyPmRpZmYg LS1naXQgYS90ZXN0L3RhcmFudG9vbC1jLXRlc3RzL0NNYWtlTGlzdHMudHh0IGIvdGVzdC90YXJh bnRvb2wtYy10ZXN0cy9DTWFrZUxpc3RzLnR4dDxicj5pbmRleCBjNmI3Y2QzMC4uYzlkNzVkNmMg MTAwNjQ0PGJyPi0tLSBhL3Rlc3QvdGFyYW50b29sLWMtdGVzdHMvQ01ha2VMaXN0cy50eHQ8YnI+ KysrIGIvdGVzdC90YXJhbnRvb2wtYy10ZXN0cy9DTWFrZUxpc3RzLnR4dDxicj5AQCAtMjIsMTMg KzIyLDM3IEBAIHNldF90YXJnZXRfcHJvcGVydGllcyhsaWJ0ZXN0IFBST1BFUlRJRVM8YnI+Jm5i c3A7Jm5ic3A7Jm5ic3A7TElCUkFSWV9PVVRQVVRfRElSRUNUT1JZICIke0NNQUtFX0NVUlJFTlRf QklOQVJZX0RJUn0iPGJyPiZuYnNwOyk8YnI+Jm5ic3A7PGJyPi0jIFhYWDogRm9yIG5vdywganVz dCBidWlsZCBsaWJ0ZXN0LiBUaGUgdGVzdHMgdG8gYmUgZGVwZW5kZWQgb248YnI+LSMgd2lsbCBi ZSBhZGRlZCBpbiB0aGUgbmV4dCBjb21taXQuPGJyPisjIFRBUkdFVF9DX0ZMQUdTIGlzIHJlcXVp cmVkIGhlcmUgdG8gYmUgc3VyZSB0aGF0IGhlYWRlcnMgbGlrZTxicj4rIyBsal9hcmNoLmggaW4g Y29tcGlsZWQgdGVzdCBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBMdWFKSVQgbGlicmFyeTxicj4r IyB0byBsaW5rLjxicj4rQXBwZW5kRmxhZ3MoVEVTVFNfQ19GTEFHUyAke1RBUkdFVF9DX0ZMQUdT fSk8YnI+Kzxicj4rc2V0KENURVNUX1NSQ19TVUZGSVggIi50ZXN0LmMiKTxicj4rZmlsZShHTE9C IHRlc3RzICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vKiR7Q1RFU1RfU1JDX1NVRkZJWH0i KTxicj4rZm9yZWFjaCh0ZXN0X3NvdXJjZSAke3Rlc3RzfSk8L2Rpdj48L2Rpdj48L2Rpdj48L2Rp dj48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OjFweCBzb2xpZCAj MDg1N0E2OyBtYXJnaW46MTBweDsgcGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNz PSJqcy1oZWxwZXIganMtcmVhZG1zZy1tc2ciPjxkaXY+PGRpdj4rIHN0cmluZyhSRUdFWCBSRVBM QUNFICIuKy8oW14vXSspJHtDVEVTVF9TUkNfU1VGRklYfSIgIlxcMSIgZXhlICR7dGVzdF9zb3Vy Y2V9KTwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PlBsZWFzZSBkcm9w IGEgY29tbWVudCBleHBsYWluaW5nIHRoZSBsaW5lIGFib3ZlLjwvZGl2PjxkaXY+Jm5ic3A7PC9k aXY+PGRpdj4mbHQ7c25pcHBlZCZndDs8L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxl ZnQ6MXB4IHNvbGlkICMwODU3QTY7IG1hcmdpbjoxMHB4OyBwYWRkaW5nOjAgMCAwIDEwcHg7Ij48 ZGl2PjxkaXYgY2xhc3M9ImpzLWhlbHBlciBqcy1yZWFkbXNnLW1zZyI+PGRpdj48ZGl2Pjxicj5k aWZmIC0tZ2l0IGEvdGVzdC90YXJhbnRvb2wtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGku dGVzdC5sdWEgYi90ZXN0L3RhcmFudG9vbC1jLXRlc3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBp LXNjcmlwdC5sdWE8YnI+c2ltaWxhcml0eSBpbmRleCA2OCU8YnI+cmVuYW1lIGZyb20gdGVzdC90 YXJhbnRvb2wtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkudGVzdC5sdWE8YnI+cmVuYW1l IHRvIHRlc3QvdGFyYW50b29sLWMtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGktc2NyaXB0 Lmx1YTxicj5pbmRleCA2NTRlNTU0NS4uMmYwZWU1Y2YgMTAwNjQ0PGJyPi0tLSBhL3Rlc3QvdGFy YW50b29sLXRlc3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpLnRlc3QubHVhPGJyPisrKyBiL3Rl c3QvdGFyYW50b29sLWMtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGktc2NyaXB0Lmx1YTwv ZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PiZsdDtzbmlwcGVkJmd0Ozwv ZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjsgbWFy Z2luOjEwcHg7IHBhZGRpbmc6MCAwIDAgMTBweDsiPjxkaXY+PGRpdiBjbGFzcz0ianMtaGVscGVy IGpzLXJlYWRtc2ctbXNnIj48ZGl2PjxkaXY+ZGlmZiAtLWdpdCBhL3Rlc3QvdGFyYW50b29sLWMt dGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkudGVzdC5jIGIvdGVzdC90YXJhbnRvb2wtYy10 ZXN0cy9taXNjbGliLWdldG1ldHJpY3MtY2FwaS50ZXN0LmM8YnI+bmV3IGZpbGUgbW9kZSAxMDA2 NDQ8YnI+aW5kZXggMDAwMDAwMDAuLjIwMmNkMzk1PGJyPi0tLSAvZGV2L251bGw8YnI+KysrIGIv dGVzdC90YXJhbnRvb2wtYy10ZXN0cy9taXNjbGliLWdldG1ldHJpY3MtY2FwaS50ZXN0LmM8YnI+ QEAgLTAsMCArMSwzNDMgQEA8YnI+KyNpbmNsdWRlICJsdWEuaCI8YnI+KyNpbmNsdWRlICJsdWFq aXQuaCI8YnI+KyNpbmNsdWRlICJsYXV4bGliLmgiPGJyPisjaW5jbHVkZSAibG1pc2NsaWIuaCI8 YnI+Kzxicj4rI2luY2x1ZGUgInRlc3QuaCI8YnI+KyNpbmNsdWRlICJ1dGlscy5oIjxicj4rPGJy PisvKiBOZWVkIGZvciBza2lwY29uZCBmb3IgQlNEIGFuZCBKSVQuICovPGJyPisjaW5jbHVkZSAi bGpfYXJjaC5oIjxicj4rPGJyPitzdGF0aWMgaW50IGJhc2Uodm9pZCAqdGVzdF9zdGF0ZSk8YnI+ K3s8YnI+KyBsdWFfU3RhdGUgKkwgPSB0ZXN0X3N0YXRlOzxicj4rIHN0cnVjdCBsdWFtX01ldHJp Y3MgbWV0cmljczs8YnI+KyBsdWFNX21ldHJpY3MoTCwgJmFtcDttZXRyaWNzKTs8YnI+Kzxicj4r IC8qPGJyPisgKiBKdXN0IGNoZWNrIHN0cnVjdHVyZSBmb3JtYXQsIG5vdCB2YWx1ZXMgdGhhdCBm aWVsZHM8YnI+KyAqIGNvbnRhaW4uPGJyPisgKi88YnI+KyAodm9pZCltZXRyaWNzLnN0cmhhc2hf aGl0Ozxicj4rICh2b2lkKW1ldHJpY3Muc3RyaGFzaF9taXNzOzxicj4rPGJyPisgKHZvaWQpbWV0 cmljcy5nY19zdHJudW07PGJyPisgKHZvaWQpbWV0cmljcy5nY190YWJudW07PGJyPisgKHZvaWQp bWV0cmljcy5nY191ZGF0YW51bTs8YnI+KyAodm9pZCltZXRyaWNzLmdjX2NkYXRhbnVtOzxicj4r PGJyPisgKHZvaWQpbWV0cmljcy5nY190b3RhbDs8YnI+KyAodm9pZCltZXRyaWNzLmdjX2ZyZWVk Ozxicj4rICh2b2lkKW1ldHJpY3MuZ2NfYWxsb2NhdGVkOzxicj4rPGJyPisgKHZvaWQpbWV0cmlj cy5nY19zdGVwc19wYXVzZTs8YnI+KyAodm9pZCltZXRyaWNzLmdjX3N0ZXBzX3Byb3BhZ2F0ZTs8 YnI+KyAodm9pZCltZXRyaWNzLmdjX3N0ZXBzX2F0b21pYzs8YnI+KyAodm9pZCltZXRyaWNzLmdj X3N0ZXBzX3N3ZWVwc3RyaW5nOzxicj4rICh2b2lkKW1ldHJpY3MuZ2Nfc3RlcHNfc3dlZXA7PGJy PisgKHZvaWQpbWV0cmljcy5nY19zdGVwc19maW5hbGl6ZTs8YnI+Kzxicj4rICh2b2lkKW1ldHJp Y3Muaml0X3NuYXBfcmVzdG9yZTs8YnI+KyAodm9pZCltZXRyaWNzLmppdF90cmFjZV9hYm9ydDs8 YnI+KyAodm9pZCltZXRyaWNzLmppdF9tY29kZV9zaXplOzxicj4rICh2b2lkKW1ldHJpY3Muaml0 X3RyYWNlX251bTs8YnI+Kzxicj4rIHJldHVybiBURVNUX0VYSVRfU1VDQ0VTUzs8YnI+K308YnI+ Kzxicj4rc3RhdGljIGludCBnY19hbGxvY2F0ZWRfZnJlZWQodm9pZCAqdGVzdF9zdGF0ZSk8YnI+ K3s8YnI+KyBsdWFfU3RhdGUgKkwgPSB0ZXN0X3N0YXRlOzxicj4rIHN0cnVjdCBsdWFtX01ldHJp Y3Mgb2xkbSwgbmV3bTs8YnI+KyAvKiBGb3JjZSB1cCBnYXJiYWdlIGNvbGxlY3QgYWxsIGRlYWQg b2JqZWN0cy4gKi88YnI+KyBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7PGJyPis8YnI+KyBs dWFNX21ldHJpY3MoTCwgJmFtcDtvbGRtKTs8YnI+KyAvKiBTaW1wbGUgZ2FyYmFnZSBnZW5lcmF0 aW9uLiAqLzxicj4rIGlmIChsdWFMX2Rvc3RyaW5nKEwsICJsb2NhbCBpID0gMCBmb3IgaiA9IDEs IDEwIGRvIGkgPSBpICsgaiBlbmQiKSk8YnI+KyBiYWlsX291dCgiZmFpbGVkIHRvIHRyYW5zbGF0 ZSBMdWEgY29kZSBzbmlwcGV0Iik7PGJyPisgbHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOzxi cj4rIGx1YU1fbWV0cmljcyhMLCAmYW1wO25ld20pOzxicj4rIGFzc2VydF90cnVlKG5ld20uZ2Nf YWxsb2NhdGVkIC0gb2xkbS5nY19hbGxvY2F0ZWQgJmd0OyAwKTs8YnI+KyBhc3NlcnRfdHJ1ZShu ZXdtLmdjX2ZyZWVkIC0gb2xkbS5nY19mcmVlZCAmZ3Q7IDApOzxicj4rPGJyPisgcmV0dXJuIFRF U1RfRVhJVF9TVUNDRVNTOzxicj4rfTxicj4rPGJyPitzdGF0aWMgaW50IGdjX3N0ZXBzKHZvaWQg KnRlc3Rfc3RhdGUpPGJyPit7PGJyPisgbHVhX1N0YXRlICpMID0gdGVzdF9zdGF0ZTs8YnI+KyBz dHJ1Y3QgbHVhbV9NZXRyaWNzIG9sZG0sIG5ld207PGJyPisgLyo8YnI+KyAqIFNvbWUgZ2FyYmFn ZSBoYXMgYWxyZWFkeSBoYXBwZW5lZCBiZWZvcmUgdGhlIG5leHQgbGluZSw8YnI+KyAqIGkuZS4g ZHVyaW5nIGZyb250ZW5kIHByb2Nlc3NpbmcgTHVhIHRlc3QgY2h1bmsuPGJyPisgKiBMZXQncyBw dXQgYSBmdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBjeWNsZSBvbiB0b3A8YnI+KyAqIG9mIHRoYXQs IGFuZCBjb25maXJtIHRoYXQgbm9uLW51bGwgdmFsdWVzIGFyZSByZXBvcnRlZDxicj4rICogKHdl IGFyZSBub3QgeWV0IGludGVyZXN0ZWQgaW4gYWN0dWFsIG51bWJlcnMpOjxicj4rICovPGJyPisg bHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOzxicj4rPGJyPisgbHVhTV9tZXRyaWNzKEwsICZh bXA7b2xkbSk7PGJyPisgYXNzZXJ0X3RydWUob2xkbS5nY19zdGVwc19wYXVzZSAmZ3Q7IDApOzxi cj4rIGFzc2VydF90cnVlKG9sZG0uZ2Nfc3RlcHNfcHJvcGFnYXRlICZndDsgMCk7PGJyPisgYXNz ZXJ0X3RydWUob2xkbS5nY19zdGVwc19hdG9taWMgJmd0OyAwKTs8YnI+KyBhc3NlcnRfdHJ1ZShv bGRtLmdjX3N0ZXBzX3N3ZWVwc3RyaW5nICZndDsgMCk7PGJyPisgYXNzZXJ0X3RydWUob2xkbS5n Y19zdGVwc19zd2VlcCAmZ3Q7IDApOzxicj4rIC8qIE5vdGhpbmcgdG8gZmluYWxpemUsIHNraXBw ZWQuICovPGJyPisgYXNzZXJ0X3RydWUob2xkbS5nY19zdGVwc19maW5hbGl6ZSA9PSAwKTs8YnI+ Kzxicj4rIC8qPGJyPisgKiBBcyBsb25nIGFzIHdlIGRvbid0IGNyZWF0ZSBuZXcgTHVhIG9iamVj dHM8YnI+KyAqIGNvbnNlcXVlbnQgY2FsbCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlczo8 YnI+KyAqLzxicj4rIGx1YU1fbWV0cmljcyhMLCAmYW1wO25ld20pOzxicj4rIGFzc2VydF9zaXpl dF9lcXVhbChuZXdtLmdjX3N0ZXBzX3BhdXNlLCBvbGRtLmdjX3N0ZXBzX3BhdXNlKTs8YnI+KyBh c3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY19zdGVwc19wcm9wYWdhdGUsIG9sZG0uZ2Nfc3RlcHNf cHJvcGFnYXRlKTs8YnI+KyBhc3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY19zdGVwc19hdG9taWMs IG9sZG0uZ2Nfc3RlcHNfYXRvbWljKTs8YnI+KyBhc3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY19z dGVwc19zd2VlcHN0cmluZyw8YnI+KyBvbGRtLmdjX3N0ZXBzX3N3ZWVwc3RyaW5nKTs8YnI+KyBh c3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY19zdGVwc19zd2VlcCwgb2xkbS5nY19zdGVwc19zd2Vl cCk7PGJyPisgLyogTm90aGluZyB0byBmaW5hbGl6ZSwgc2tpcHBlZC4gKi88YnI+KyBhc3NlcnRf dHJ1ZShuZXdtLmdjX3N0ZXBzX2ZpbmFsaXplID09IDApOzxicj4rIG9sZG0gPSBuZXdtOzxicj4r PGJyPisgLyo8YnI+KyAqIE5vdyB0aGUgbGFzdCBwaGFzZTogcnVuIGZ1bGwgR0Mgb25jZSBhbmQg bWFrZSBzdXJlIHRoYXQ8YnI+KyAqIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgcmVwb3J0ZWQgYXMgZXhw ZWN0ZWQ6PGJyPisgKi88YnI+KyBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7PGJyPisgbHVh TV9tZXRyaWNzKEwsICZhbXA7bmV3bSk7PGJyPisgYXNzZXJ0X3RydWUobmV3bS5nY19zdGVwc19w YXVzZSAtIG9sZG0uZ2Nfc3RlcHNfcGF1c2UgPT0gMSk7PGJyPisgYXNzZXJ0X3RydWUobmV3bS5n Y19zdGVwc19wcm9wYWdhdGUgLSBvbGRtLmdjX3N0ZXBzX3Byb3BhZ2F0ZSAmZ3Q7PSAxKTs8YnI+ KyBhc3NlcnRfdHJ1ZShuZXdtLmdjX3N0ZXBzX2F0b21pYyAtIG9sZG0uZ2Nfc3RlcHNfYXRvbWlj ID09IDEpOzxicj4rIGFzc2VydF90cnVlKG5ld20uZ2Nfc3RlcHNfc3dlZXBzdHJpbmcgLSBvbGRt LmdjX3N0ZXBzX3N3ZWVwc3RyaW5nICZndDs9IDEpOzxicj4rIGFzc2VydF90cnVlKG5ld20uZ2Nf c3RlcHNfc3dlZXAgLSBvbGRtLmdjX3N0ZXBzX3N3ZWVwICZndDs9IDEpOzxicj4rIC8qIE5vdGhp bmcgdG8gZmluYWxpemUsIHNraXBwZWQuICovPGJyPisgYXNzZXJ0X3RydWUobmV3bS5nY19zdGVw c19maW5hbGl6ZSA9PSAwKTs8YnI+KyBvbGRtID0gbmV3bTs8YnI+Kzxicj4rIC8qPGJyPisgKiBO b3cgbGV0J3MgcnVuIHRocmVlIEdDIGN5Y2xlcyB0byBlbnN1cmUgdGhhdDxicj4rICogaW5jcmVt ZW50IHdhcyBub3QgYSBsdWNreSBjb2luY2lkZW5jZS48YnI+KyAqLzxicj4rIGx1YV9nYyhMLCBM VUFfR0NDT0xMRUNULCAwKTs8YnI+KyBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7PGJyPisg bHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOzwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxv Y2txdW90ZT48ZGl2PkkgdGhpbmsgaXQgaXMgYmV0dGVyIHRvIGNyZWF0ZSBhIGZvciBsb29wIGhl cmUuPC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMDg1N0E2 OyBtYXJnaW46MTBweDsgcGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNzPSJqcy1o ZWxwZXIganMtcmVhZG1zZy1tc2ciPjxkaXY+PGRpdj4rIGx1YU1fbWV0cmljcyhMLCAmYW1wO25l d20pOzxicj4rIGFzc2VydF90cnVlKG5ld20uZ2Nfc3RlcHNfcGF1c2UgLSBvbGRtLmdjX3N0ZXBz X3BhdXNlID09IDMpOzxicj4rIGFzc2VydF90cnVlKG5ld20uZ2Nfc3RlcHNfcHJvcGFnYXRlIC0g b2xkbS5nY19zdGVwc19wcm9wYWdhdGUgJmd0Oz0gMyk7PGJyPisgYXNzZXJ0X3RydWUobmV3bS5n Y19zdGVwc19hdG9taWMgLSBvbGRtLmdjX3N0ZXBzX2F0b21pYyA9PSAzKTs8YnI+KyBhc3NlcnRf dHJ1ZShuZXdtLmdjX3N0ZXBzX3N3ZWVwc3RyaW5nIC0gb2xkbS5nY19zdGVwc19zd2VlcHN0cmlu ZyAmZ3Q7PSAzKTs8YnI+KyBhc3NlcnRfdHJ1ZShuZXdtLmdjX3N0ZXBzX3N3ZWVwIC0gb2xkbS5n Y19zdGVwc19zd2VlcCAmZ3Q7PSAzKTs8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVv dGU+PGRpdj5UaGF0IHBhcnQgaXMgZHVwbGljYXRlZC4gSXQgaXMgYmV0dGVyIHRvIGVpdGhlciB3 cml0ZSBhIGNvcnJlc3BvbmRpbmcgbWFjcm8sIG9yPC9kaXY+PGRpdj5hIGZ1bmN0aW9uLjwvZGl2 PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjsgbWFyZ2lu OjEwcHg7IHBhZGRpbmc6MCAwIDAgMTBweDsiPjxkaXY+PGRpdiBjbGFzcz0ianMtaGVscGVyIGpz LXJlYWRtc2ctbXNnIj48ZGl2PjxkaXY+KyAvKiBOb3RoaW5nIHRvIGZpbmFsaXplLCBza2lwcGVk LiAqLzxicj4rIGFzc2VydF90cnVlKG5ld20uZ2Nfc3RlcHNfZmluYWxpemUgPT0gMCk7PGJyPis8 YnI+KyByZXR1cm4gVEVTVF9FWElUX1NVQ0NFU1M7PGJyPit9PGJyPis8YnI+K3N0YXRpYyBpbnQg b2JqY291bnQodm9pZCAqdGVzdF9zdGF0ZSk8YnI+K3s8YnI+KyBsdWFfU3RhdGUgKkwgPSB0ZXN0 X3N0YXRlOzxicj4rIHN0cnVjdCBsdWFtX01ldHJpY3Mgb2xkbSwgbmV3bTs8YnI+KyBpZiAoIUxK X0hBU0pJVCk8YnI+KyByZXR1cm4gc2tpcCgiVGVzdCByZXF1aXJlcyBKSVQgZW5hYmxlZCIpOzxi cj4rPGJyPisgdXRpbHNfZ2V0X2F1eF9sZnVuYyhMKTs8YnI+Kzxicj4rIC8qIEZvcmNlIHVwIGdh cmJhZ2UgY29sbGVjdCBhbGwgZGVhZCBvYmplY3RzLiAqLzxicj4rIGx1YV9nYyhMLCBMVUFfR0ND T0xMRUNULCAwKTs8YnI+Kzxicj4rIGx1YU1fbWV0cmljcyhMLCAmYW1wO29sZG0pOzxicj4rIC8q IEdlbmVyYXRlIGdhcmJhZ2UuIEFyZ3VtZW50IGlzIGl0ZXJhdGlvbnMgYW1vdW50LiAqLzxicj4r IGx1YV9wdXNobnVtYmVyKEwsIDEwMDApOzxicj4rIGx1YV9jYWxsKEwsIDEsIDApOzxicj4rIGx1 YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTs8YnI+KyBsdWFNX21ldHJpY3MoTCwgJmFtcDtuZXdt KTs8YnI+KyBhc3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY19zdHJudW0sIG9sZG0uZ2Nfc3RybnVt KTs8YnI+KyBhc3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY190YWJudW0sIG9sZG0uZ2NfdGFibnVt KTs8YnI+KyBhc3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY191ZGF0YW51bSwgb2xkbS5nY191ZGF0 YW51bSk7PGJyPisgYXNzZXJ0X3NpemV0X2VxdWFsKG5ld20uZ2NfY2RhdGFudW0sIG9sZG0uZ2Nf Y2RhdGFudW0pOzxicj4rPGJyPisgcmV0dXJuIFRFU1RfRVhJVF9TVUNDRVNTOzxicj4rfTxicj4r PGJyPitzdGF0aWMgaW50IG9iamNvdW50X2NkYXRhX2RlY3JlbWVudCh2b2lkICp0ZXN0X3N0YXRl KTxicj4rezxicj4rIGx1YV9TdGF0ZSAqTCA9IHRlc3Rfc3RhdGU7PGJyPisgLyo8YnI+KyAqIGNk YXRhIGRlY3JlbWVudCB0ZXN0Ljxicj4rICogU2VlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNv bS90YXJhbnRvb2wvdGFyYW50b29sL2lzc3Vlcy81ODIwIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6 Ly9naXRodWIuY29tL3RhcmFudG9vbC90YXJhbnRvb2wvaXNzdWVzLzU4MjA8L2E+Ljxicj4rICov PGJyPisgc3RydWN0IGx1YW1fTWV0cmljcyBvbGRtLCBuZXdtOzxicj4rIHV0aWxzX2dldF9hdXhf bGZ1bmMoTCk7PGJyPis8YnI+KyAvKiBGb3JjZSB1cCBnYXJiYWdlIGNvbGxlY3QgYWxsIGRlYWQg b2JqZWN0cy4gKi88YnI+KyBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7PGJyPis8YnI+KyBs dWFNX21ldHJpY3MoTCwgJmFtcDtvbGRtKTs8YnI+KyAvKjxicj4rICogVGhlIGZ1bmN0aW9uIGdl bmVyYXRlcyBhbmQgY29sbGVjdHMgY2RhdGEgd2l0aDxicj4rICogTEpfR0NfQ0RBVEFfRklOIGZs YWcuPGJyPisgKi88YnI+KyBsdWFfY2FsbChMLCAwLCAwKTs8YnI+KyBsdWFNX21ldHJpY3MoTCwg JmFtcDtuZXdtKTs8YnI+KyBhc3NlcnRfc2l6ZXRfZXF1YWwobmV3bS5nY19jZGF0YW51bSwgb2xk bS5nY19jZGF0YW51bSk7PGJyPis8YnI+KyByZXR1cm4gVEVTVF9FWElUX1NVQ0NFU1M7PGJyPit9 PGJyPis8YnI+Ky8qPGJyPisgKiBHZXQgZnVuY3Rpb24gdG8gY2FsbCB0byBnZW5lcmF0ZSB0aGUg Y29ycmVzcG9uZGluZyBzbmFwc2hvdDxicj4rICogcmVzdG9yZXMgb24gdG9wIG9mIHRoZSBMdWEg c3RhY2suIEZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudDxicj4rICogb2Ygc25hcHNob3QgcmVz dG9yYXRpb25zIGV4cGVjdGVkLjxicj4rICogQ2xlYXIgc3RhY2sgYWZ0ZXIgY2FsbC48YnI+KyAq Lzxicj4rc3RhdGljIHZvaWQgY2hlY2tfc25hcF9yZXN0b3JlcyhsdWFfU3RhdGUgKkwpPGJyPit7 PGJyPisgc3RydWN0IGx1YW1fTWV0cmljcyBvbGRtLCBuZXdtOzxicj4rIGx1YU1fbWV0cmljcyhM LCAmYW1wO29sZG0pOzxicj4rIC8qIEdlbmVyYXRlIHNuYXBzaG90cy4gKi88YnI+KyBsdWFfY2Fs bChMLCAwLCAxKTs8YnI+KyBpbnQgbiA9IGx1YV9nZXR0b3AoTCk7PGJyPisgLyo8YnI+KyAqIFRo ZSBmaXJzdCB2YWx1ZSBpcyB0aGUgdGFibGUgd2l0aCBmdW5jdGlvbnMsPGJyPisgKiB0aGUgc2Vj b25kIGlzIG51bWJlciBvZiBzbmFwc2hvdCByZXN0b3Jlcy48YnI+KyAqLzxicj4rIGlmIChuICE9 IDIgfHwgIWx1YV9pc251bWJlcihMLCAtMSkpPGJyPisgYmFpbF9vdXQoImluY29ycmVjdCByZXR1 cm4gdmFsdWU6IDEgbnVtYmVyIGlzIHJlcXVpcmVkIik7PGJyPisgc2l6ZV90IHNuYXBfcmVzdG9y ZXMgPSBsdWFfdG9udW1iZXIoTCwgLTEpOzxicj4rIGx1YU1fbWV0cmljcyhMLCAmYW1wO25ld20p Ozxicj4rIC8qPGJyPisgKiBSZW1vdmUgYHNuYXBfcmVzdG9yZXNgIGZyb20gc3RhY2suPGJyPisg KiBNdXN0IGJlIGRvbmUgYmVmb3JlIHBvdGllbnRpYWwgYXNzZXJ0IGFuZCBleGl0IGZyb208YnI+ KyAqIHRoZSB0ZXN0Ljxicj4rICovPGJyPisgbHVhX3BvcChMLCAxKTs8YnI+KyBhc3NlcnRfdHJ1 ZShuZXdtLmppdF9zbmFwX3Jlc3RvcmUgLSBvbGRtLmppdF9zbmFwX3Jlc3RvcmU8YnI+KyA9PSBz bmFwX3Jlc3RvcmVzKTs8YnI+K308YnI+Kzxicj4rc3RhdGljIGludCBzbmFwX3Jlc3RvcmVzX2Rp cmVjdF9leGl0KHZvaWQgKnRlc3Rfc3RhdGUpPGJyPit7PGJyPisgbHVhX1N0YXRlICpMID0gdGVz dF9zdGF0ZTs8YnI+KyB1dGlsc19nZXRfYXV4X2xmdW5jKEwpOzxicj4rIGNoZWNrX3NuYXBfcmVz dG9yZXMoTCk7PGJyPisgcmV0dXJuIFRFU1RfRVhJVF9TVUNDRVNTOzxicj4rfTxicj4rPGJyPitz dGF0aWMgaW50IHNuYXBfcmVzdG9yZXNfZGlyZWN0X2V4aXRfc2NhbGFyKHZvaWQgKnRlc3Rfc3Rh dGUpPGJyPit7PGJyPisgbHVhX1N0YXRlICpMID0gdGVzdF9zdGF0ZTs8YnI+KyB1dGlsc19nZXRf YXV4X2xmdW5jKEwpOzxicj4rIGNoZWNrX3NuYXBfcmVzdG9yZXMoTCk7PGJyPisgcmV0dXJuIFRF U1RfRVhJVF9TVUNDRVNTOzxicj4rfTxicj4rPGJyPitzdGF0aWMgaW50IHNuYXBfcmVzdG9yZXNf c2lkZV9leGl0X2NvbXBpbGVkKHZvaWQgKnRlc3Rfc3RhdGUpPGJyPit7PGJyPisgbHVhX1N0YXRl ICpMID0gdGVzdF9zdGF0ZTs8YnI+KyB1dGlsc19nZXRfYXV4X2xmdW5jKEwpOzxicj4rIGNoZWNr X3NuYXBfcmVzdG9yZXMoTCk7PGJyPisgcmV0dXJuIFRFU1RfRVhJVF9TVUNDRVNTOzxicj4rfTxi cj4rPGJyPitzdGF0aWMgaW50IHNuYXBfcmVzdG9yZXNfc2lkZV9leGl0X25vdF9jb21waWxlZCh2 b2lkICp0ZXN0X3N0YXRlKTxicj4rezxicj4rIGx1YV9TdGF0ZSAqTCA9IHRlc3Rfc3RhdGU7PGJy PisgdXRpbHNfZ2V0X2F1eF9sZnVuYyhMKTs8YnI+KyBjaGVja19zbmFwX3Jlc3RvcmVzKEwpOzxi cj4rIHJldHVybiBURVNUX0VYSVRfU1VDQ0VTUzs8YnI+K308YnI+KzwvZGl2PjwvZGl2PjwvZGl2 PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PlNhbWUgaGVyZS4gRWl0aGVyIGEgZGVkaWNhdGVkIGlt cGxlbWVudGF0aW9uIGZ1bmMsIG9yIGEgbWFjcm8gaXMgbmVlZGVkIGhlcmUuPC9kaXY+PGJsb2Nr cXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMDg1N0E2OyBtYXJnaW46MTBweDsg cGFkZGluZzowIDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNzPSJqcy1oZWxwZXIganMtcmVhZG1z Zy1tc2ciPjxkaXY+PGRpdj4rc3RhdGljIGludCBzbmFwX3Jlc3RvcmVzX2dyb3VwKHZvaWQgKnRl c3Rfc3RhdGUpPGJyPit7PGJyPisgaWYgKCFMSl9IQVNKSVQpPGJyPisgcmV0dXJuIHNraXAoIlRl c3QgcmVxdWlyZXMgSklUIGVuYWJsZWQiKTs8YnI+KyBjb25zdCBzdHJ1Y3QgdGVzdF91bml0IHRn cm91cFtdID0gezxicj4rIHRlc3RfdW5pdF9uZXcoc25hcF9yZXN0b3Jlc19kaXJlY3RfZXhpdCks PGJyPisgdGVzdF91bml0X25ldyhzbmFwX3Jlc3RvcmVzX2RpcmVjdF9leGl0X3NjYWxhciksPGJy PisgdGVzdF91bml0X25ldyhzbmFwX3Jlc3RvcmVzX3NpZGVfZXhpdF9jb21waWxlZCksPGJyPisg dGVzdF91bml0X25ldyhzbmFwX3Jlc3RvcmVzX3NpZGVfZXhpdF9ub3RfY29tcGlsZWQpPGJyPisg fTs8YnI+KyByZXR1cm4gdGVzdF9ydW5fZ3JvdXAodGdyb3VwLCB0ZXN0X3N0YXRlKTs8YnI+K308 YnI+Kzxicj4rc3RhdGljIGludCBzdHJoYXNoKHZvaWQgKnRlc3Rfc3RhdGUpPGJyPit7PGJyPisg bHVhX1N0YXRlICpMID0gdGVzdF9zdGF0ZTs8YnI+KyBzdHJ1Y3QgbHVhbV9NZXRyaWNzIG9sZG0s IG5ld207PGJyPisgbHVhX3B1c2hzdHJpbmcoTCwgInN0cmhhc2hfaGl0Iik7PGJyPisgbHVhTV9t ZXRyaWNzKEwsICZhbXA7b2xkbSk7PGJyPisgbHVhX3B1c2hzdHJpbmcoTCwgInN0cmhhc2hfaGl0 Iik7PGJyPisgbHVhX3B1c2hzdHJpbmcoTCwgIm5ld19zdHIiKTs8YnI+KyBsdWFNX21ldHJpY3Mo TCwgJmFtcDtuZXdtKTs8YnI+KyAvKiBSZW1vdmUgcHVzaGVkIHN0cmluZ3MuICovPGJyPisgbHVh X3BvcChMLCAzKTs8YnI+KyBhc3NlcnRfdHJ1ZShuZXdtLnN0cmhhc2hfaGl0IC0gb2xkbS5zdHJo YXNoX2hpdCA9PSAxKTs8YnI+KyBhc3NlcnRfdHJ1ZShuZXdtLnN0cmhhc2hfbWlzcyAtIG9sZG0u c3RyaGFzaF9taXNzID09IDEpOzxicj4rIHJldHVybiBURVNUX0VYSVRfU1VDQ0VTUzs8YnI+K308 YnI+Kzxicj4rc3RhdGljIGludCB0cmFjZW51bV9iYXNlKHZvaWQgKnRlc3Rfc3RhdGUpPGJyPit7 PGJyPisgbHVhX1N0YXRlICpMID0gdGVzdF9zdGF0ZTs8YnI+KyBpZiAoIUxKX0hBU0pJVCk8YnI+ KyByZXR1cm4gc2tpcCgiVGVzdCByZXF1aXJlcyBKSVQgZW5hYmxlZCIpOzxicj4rIHN0cnVjdCBs dWFtX01ldHJpY3MgbWV0cmljczs8YnI+KyB1dGlsc19nZXRfYXV4X2xmdW5jKEwpOzxicj4rPGJy PisgbHVhSklUX3NldG1vZGUoTCwgMCwgTFVBSklUX01PREVfRkxVU0gpOzxicj4rIC8qIEZvcmNl IHVwIGdhcmJhZ2UgY29sbGVjdCBhbGwgZGVhZCBvYmplY3RzLiAqLzxicj4rIGx1YV9nYyhMLCBM VUFfR0NDT0xMRUNULCAwKTs8YnI+Kzxicj4rIGx1YU1fbWV0cmljcyhMLCAmYW1wO21ldHJpY3Mp Ozxicj4rIGFzc2VydF90cnVlKG1ldHJpY3Muaml0X3RyYWNlX251bSA9PSAwKTs8YnI+Kzxicj4r IC8qIEdlbmVyYXRlIHRyYWNlcy4gKi88YnI+KyBsdWFfY2FsbChMLCAwLCAxKTs8YnI+KyBpbnQg biA9IGx1YV9nZXR0b3AoTCk7PGJyPisgLyo8YnI+KyAqIFRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUg dGFibGUgd2l0aCBmdW5jdGlvbnMsPGJyPisgKiB0aGUgc2Vjb25kIGlzIHRoZSBhbW91bnQgb2Yg dHJhY2VzLjxicj4rICovPGJyPisgaWYgKG4gIT0gMiB8fCAhbHVhX2lzbnVtYmVyKEwsIC0xKSk8 YnI+KyBiYWlsX291dCgiaW5jb3JyZWN0IHJldHVybiB2YWx1ZTogMSBudW1iZXIgaXMgcmVxdWly ZWQiKTs8YnI+KyBzaXplX3Qgaml0X3RyYWNlX251bSA9IGx1YV90b251bWJlcihMLCAtMSk7PGJy PisgbHVhTV9tZXRyaWNzKEwsICZhbXA7bWV0cmljcyk7PGJyPisgLyogUmVtb3ZlIGBqaXRfdHJh Y2VfbnVtYCBmcm9tIEx1YSBzdGFjay4gKi88YnI+KyBsdWFfcG9wKEwsIDEpOzxicj4rPGJyPisg YXNzZXJ0X3NpemV0X2VxdWFsKG1ldHJpY3Muaml0X3RyYWNlX251bSwgaml0X3RyYWNlX251bSk7 PGJyPis8YnI+KyBsdWFKSVRfc2V0bW9kZShMLCAwLCBMVUFKSVRfTU9ERV9GTFVTSCk7PGJyPisg LyogRm9yY2UgdXAgZ2FyYmFnZSBjb2xsZWN0IGFsbCBkZWFkIG9iamVjdHMuICovPGJyPisgbHVh X2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOzxicj4rIGx1YU1fbWV0cmljcyhMLCAmYW1wO21ldHJp Y3MpOzxicj4rIGFzc2VydF90cnVlKG1ldHJpY3Muaml0X3RyYWNlX251bSA9PSAwKTs8YnI+Kzxi cj4rIHJldHVybiBURVNUX0VYSVRfU1VDQ0VTUzs8YnI+K308YnI+Kzxicj4raW50IG1haW4odm9p ZCk8YnI+K3s8YnI+KyBpZiAoTFVBSklUX09TID09IExVQUpJVF9PU19CU0QpPGJyPisgcmV0dXJu IHNraXBfYWxsKCJEaXNhYmxlZCBvbiAqQlNEIGR1ZSB0byAjNDgxOSIpOzxicj4rPGJyPisgbHVh X1N0YXRlICpMID0gdXRpbHNfbHVhX2luaXQoKTs8YnI+Kzxicj4rIHV0aWxzX2xvYWRfYXV4X3Nj cmlwdChMKTs8YnI+KyBjb25zdCBzdHJ1Y3QgdGVzdF91bml0IHRncm91cFtdID0gezxicj4rIHRl c3RfdW5pdF9uZXcoYmFzZSksPGJyPisgdGVzdF91bml0X25ldyhnY19hbGxvY2F0ZWRfZnJlZWQp LDxicj4rIHRlc3RfdW5pdF9uZXcoZ2Nfc3RlcHMpLDxicj4rIHRlc3RfdW5pdF9uZXcob2JqY291 bnQpLDxicj4rIHRlc3RfdW5pdF9uZXcob2JqY291bnRfY2RhdGFfZGVjcmVtZW50KSw8YnI+KyB0 ZXN0X3VuaXRfbmV3KHNuYXBfcmVzdG9yZXNfZ3JvdXApLDxicj4rIHRlc3RfdW5pdF9uZXcoc3Ry aGFzaCksPGJyPisgdGVzdF91bml0X25ldyh0cmFjZW51bV9iYXNlKTxicj4rIH07PGJyPisgY29u c3QgaW50IHRlc3RfcmVzdWx0ID0gdGVzdF9ydW5fZ3JvdXAodGdyb3VwLCBMKTs8YnI+KyB1dGls c19sdWFfY2xvc2UoTCk7PGJyPisgcmV0dXJuIHRlc3RfcmVzdWx0Ozxicj4rfTxicj5kaWZmIC0t Z2l0IGEvdGVzdC90YXJhbnRvb2wtdGVzdHMvQ01ha2VMaXN0cy50eHQgYi90ZXN0L3RhcmFudG9v bC10ZXN0cy9DTWFrZUxpc3RzLnR4dDxicj5pbmRleCAzOGQ2YWU0OS4uYjRjZTM5ZDMgMTAwNjQ0 PGJyPi0tLSBhL3Rlc3QvdGFyYW50b29sLXRlc3RzL0NNYWtlTGlzdHMudHh0PGJyPisrKyBiL3Rl c3QvdGFyYW50b29sLXRlc3RzL0NNYWtlTGlzdHMudHh0PGJyPkBAIC02Niw3ICs2Niw2IEBAIGFk ZF9zdWJkaXJlY3RvcnkobGotNDE2LXhvci1iZWZvcmUtamNjKTxicj4mbmJzcDthZGRfc3ViZGly ZWN0b3J5KGxqLTYwMS1maXgtZ2MtZmluZGVycmZ1bmMpPGJyPiZuYnNwO2FkZF9zdWJkaXJlY3Rv cnkobGotNzI3LWxpZ2h0dXNlcmRhdGEtaXRlcm4pPGJyPiZuYnNwO2FkZF9zdWJkaXJlY3Rvcnko bGotZmx1c2gtb24tdHJhY2UpPGJyPi1hZGRfc3ViZGlyZWN0b3J5KG1pc2NsaWItZ2V0bWV0cmlj cy1jYXBpKTxicj4mbmJzcDthZGRfc3ViZGlyZWN0b3J5KG1pc2NsaWItc3lzcHJvZi1jYXBpKTxi cj4mbmJzcDs8YnI+Jm5ic3A7IyBUaGUgcGFydCBvZiB0aGUgbWVtb3J5IHByb2ZpbGVyIHRvb2xj aGFpbiBpcyBsb2NhdGVkIGluIHRvb2xzPGJyPmRpZmYgLS1naXQgYS90ZXN0L3RhcmFudG9vbC10 ZXN0cy9taXNjbGliLWdldG1ldHJpY3MtY2FwaS9DTWFrZUxpc3RzLnR4dCBiL3Rlc3QvdGFyYW50 b29sLXRlc3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpL0NNYWtlTGlzdHMudHh0PGJyPmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NDxicj5pbmRleCA2MGViNWJiYi4uMDAwMDAwMDA8YnI+LS0tIGEv dGVzdC90YXJhbnRvb2wtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkvQ01ha2VMaXN0cy50 eHQ8YnI+KysrIC9kZXYvbnVsbDxicj5AQCAtMSArMCwwIEBAPGJyPi1CdWlsZFRlc3RDTGliKHRl c3RnZXRtZXRyaWNzIHRlc3RnZXRtZXRyaWNzLmMpPGJyPmRpZmYgLS1naXQgYS90ZXN0L3RhcmFu dG9vbC10ZXN0cy9taXNjbGliLWdldG1ldHJpY3MtY2FwaS90ZXN0Z2V0bWV0cmljcy5jIGIvdGVz dC90YXJhbnRvb2wtdGVzdHMvbWlzY2xpYi1nZXRtZXRyaWNzLWNhcGkvdGVzdGdldG1ldHJpY3Mu Yzxicj5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQ8YnI+aW5kZXggNjc3NzYzMzguLjAwMDAwMDAw PGJyPi0tLSBhL3Rlc3QvdGFyYW50b29sLXRlc3RzL21pc2NsaWItZ2V0bWV0cmljcy1jYXBpL3Rl c3RnZXRtZXRyaWNzLmM8YnI+KysrIC9kZXYvbnVsbDxicj5AQCAtMSwyNzAgKzAsMCBAQDxicj4t I2luY2x1ZGUgJmx0O2x1YS5oJmd0Ozxicj4tI2luY2x1ZGUgJmx0O2x1YWppdC5oJmd0Ozxicj4t I2luY2x1ZGUgJmx0O2xhdXhsaWIuaCZndDs8YnI+LTxicj4tI2luY2x1ZGUgJmx0O2xtaXNjbGli LmgmZ3Q7PGJyPi08YnI+LSN1bmRlZiBOREVCVUc8YnI+LSNpbmNsdWRlICZsdDthc3NlcnQuaCZn dDs8YnI+LTxicj4tc3RhdGljIGludCBiYXNlKGx1YV9TdGF0ZSAqTCk8YnI+LXs8YnI+LSBzdHJ1 Y3QgbHVhbV9NZXRyaWNzIG1ldHJpY3M7PGJyPi0gbHVhTV9tZXRyaWNzKEwsICZhbXA7bWV0cmlj cyk7PGJyPi08YnI+LSAvKiBKdXN0IGNoZWNrIHN0cnVjdHVyZSBmb3JtYXQsIG5vdCB2YWx1ZXMg dGhhdCBmaWVsZHMgY29udGFpbi4gKi88YnI+LSAodm9pZCltZXRyaWNzLnN0cmhhc2hfaGl0Ozxi cj4tICh2b2lkKW1ldHJpY3Muc3RyaGFzaF9taXNzOzxicj4tPGJyPi0gKHZvaWQpbWV0cmljcy5n Y19zdHJudW07PGJyPi0gKHZvaWQpbWV0cmljcy5nY190YWJudW07PGJyPi0gKHZvaWQpbWV0cmlj cy5nY191ZGF0YW51bTs8YnI+LSAodm9pZCltZXRyaWNzLmdjX2NkYXRhbnVtOzxicj4tPGJyPi0g KHZvaWQpbWV0cmljcy5nY190b3RhbDs8YnI+LSAodm9pZCltZXRyaWNzLmdjX2ZyZWVkOzxicj4t ICh2b2lkKW1ldHJpY3MuZ2NfYWxsb2NhdGVkOzxicj4tPGJyPi0gKHZvaWQpbWV0cmljcy5nY19z dGVwc19wYXVzZTs8YnI+LSAodm9pZCltZXRyaWNzLmdjX3N0ZXBzX3Byb3BhZ2F0ZTs8YnI+LSAo dm9pZCltZXRyaWNzLmdjX3N0ZXBzX2F0b21pYzs8YnI+LSAodm9pZCltZXRyaWNzLmdjX3N0ZXBz X3N3ZWVwc3RyaW5nOzxicj4tICh2b2lkKW1ldHJpY3MuZ2Nfc3RlcHNfc3dlZXA7PGJyPi0gKHZv aWQpbWV0cmljcy5nY19zdGVwc19maW5hbGl6ZTs8YnI+LTxicj4tICh2b2lkKW1ldHJpY3Muaml0 X3NuYXBfcmVzdG9yZTs8YnI+LSAodm9pZCltZXRyaWNzLmppdF90cmFjZV9hYm9ydDs8YnI+LSAo dm9pZCltZXRyaWNzLmppdF9tY29kZV9zaXplOzxicj4tICh2b2lkKW1ldHJpY3Muaml0X3RyYWNl X251bTs8YnI+LTxicj4tIGx1YV9wdXNoYm9vbGVhbihMLCAxKTs8YnI+LSByZXR1cm4gMTs8YnI+ LX08YnI+LTxicj4tc3RhdGljIGludCBnY19hbGxvY2F0ZWRfZnJlZWQobHVhX1N0YXRlICpMKTxi cj4tezxicj4tIHN0cnVjdCBsdWFtX01ldHJpY3Mgb2xkbSwgbmV3bTs8YnI+LSAvKiBGb3JjZSB1 cCBnYXJiYWdlIGNvbGxlY3QgYWxsIGRlYWQgb2JqZWN0cy4gKi88YnI+LSBsdWFfZ2MoTCwgTFVB X0dDQ09MTEVDVCwgMCk7PGJyPi08YnI+LSBsdWFNX21ldHJpY3MoTCwgJmFtcDtvbGRtKTs8YnI+ LSAvKiBTaW1wbGUgZ2FyYmFnZSBnZW5lcmF0aW9uLiAqLzxicj4tIGlmIChsdWFMX2Rvc3RyaW5n KEwsICJsb2NhbCBpID0gMCBmb3IgaiA9IDEsIDEwIGRvIGkgPSBpICsgaiBlbmQiKSk8YnI+LSBs dWFMX2Vycm9yKEwsICJmYWlsZWQgdG8gdHJhbnNsYXRlIEx1YSBjb2RlIHNuaXBwZXQiKTs8YnI+ LSBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7PGJyPi0gbHVhTV9tZXRyaWNzKEwsICZhbXA7 bmV3bSk7PGJyPi0gYXNzZXJ0KG5ld20uZ2NfYWxsb2NhdGVkIC0gb2xkbS5nY19hbGxvY2F0ZWQg Jmd0OyAwKTs8YnI+LSBhc3NlcnQobmV3bS5nY19mcmVlZCAtIG9sZG0uZ2NfZnJlZWQgJmd0OyAw KTs8YnI+LTxicj4tIGx1YV9wdXNoYm9vbGVhbihMLCAxKTs8YnI+LSByZXR1cm4gMTs8YnI+LX08 YnI+LTxicj4tc3RhdGljIGludCBnY19zdGVwcyhsdWFfU3RhdGUgKkwpPGJyPi17PGJyPi0gc3Ry dWN0IGx1YW1fTWV0cmljcyBvbGRtLCBuZXdtOzxicj4tIC8qPGJyPi0gKiBTb21lIGdhcmJhZ2Ug aGFzIGFscmVhZHkgaGFwcGVuZWQgYmVmb3JlIHRoZSBuZXh0IGxpbmUsPGJyPi0gKiBpLmUuIGR1 cmluZyBmcm9udGVuZCBwcm9jZXNzaW5nIEx1YSB0ZXN0IGNodW5rLjxicj4tICogTGV0J3MgcHV0 IGEgZnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gY3ljbGUgb24gdG9wPGJyPi0gKiBvZiB0aGF0LCBh bmQgY29uZmlybSB0aGF0IG5vbi1udWxsIHZhbHVlcyBhcmUgcmVwb3J0ZWQ8YnI+LSAqICh3ZSBh cmUgbm90IHlldCBpbnRlcmVzdGVkIGluIGFjdHVhbCBudW1iZXJzKTo8YnI+LSAqLzxicj4tIGx1 YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTs8YnI+LTxicj4tIGx1YU1fbWV0cmljcyhMLCAmYW1w O29sZG0pOzxicj4tIGFzc2VydChvbGRtLmdjX3N0ZXBzX3BhdXNlICZndDsgMCk7PGJyPi0gYXNz ZXJ0KG9sZG0uZ2Nfc3RlcHNfcHJvcGFnYXRlICZndDsgMCk7PGJyPi0gYXNzZXJ0KG9sZG0uZ2Nf c3RlcHNfYXRvbWljICZndDsgMCk7PGJyPi0gYXNzZXJ0KG9sZG0uZ2Nfc3RlcHNfc3dlZXBzdHJp bmcgJmd0OyAwKTs8YnI+LSBhc3NlcnQob2xkbS5nY19zdGVwc19zd2VlcCAmZ3Q7IDApOzxicj4t IC8qIE5vdGhpbmcgdG8gZmluYWxpemUsIHNraXBwZWQuICovPGJyPi0gYXNzZXJ0KG9sZG0uZ2Nf c3RlcHNfZmluYWxpemUgPT0gMCk7PGJyPi08YnI+LSAvKjxicj4tICogQXMgbG9uZyBhcyB3ZSBk b24ndCBjcmVhdGUgbmV3IEx1YSBvYmplY3RzPGJyPi0gKiBjb25zZXF1ZW50IGNhbGwgc2hvdWxk IHJldHVybiB0aGUgc2FtZSB2YWx1ZXM6PGJyPi0gKi88YnI+LSBsdWFNX21ldHJpY3MoTCwgJmFt cDtuZXdtKTs8YnI+LSBhc3NlcnQobmV3bS5nY19zdGVwc19wYXVzZSAtIG9sZG0uZ2Nfc3RlcHNf cGF1c2UgPT0gMCk7PGJyPi0gYXNzZXJ0KG5ld20uZ2Nfc3RlcHNfcHJvcGFnYXRlIC0gb2xkbS5n Y19zdGVwc19wcm9wYWdhdGUgPT0gMCk7PGJyPi0gYXNzZXJ0KG5ld20uZ2Nfc3RlcHNfYXRvbWlj IC0gb2xkbS5nY19zdGVwc19hdG9taWMgPT0gMCk7PGJyPi0gYXNzZXJ0KG5ld20uZ2Nfc3RlcHNf c3dlZXBzdHJpbmcgLSBvbGRtLmdjX3N0ZXBzX3N3ZWVwc3RyaW5nID09IDApOzxicj4tIGFzc2Vy dChuZXdtLmdjX3N0ZXBzX3N3ZWVwIC0gb2xkbS5nY19zdGVwc19zd2VlcCA9PSAwKTs8YnI+LSAv KiBOb3RoaW5nIHRvIGZpbmFsaXplLCBza2lwcGVkLiAqLzxicj4tIGFzc2VydChuZXdtLmdjX3N0 ZXBzX2ZpbmFsaXplID09IDApOzxicj4tIG9sZG0gPSBuZXdtOzxicj4tPGJyPi0gLyo8YnI+LSAq IE5vdyB0aGUgbGFzdCBwaGFzZTogcnVuIGZ1bGwgR0Mgb25jZSBhbmQgbWFrZSBzdXJlIHRoYXQ8 YnI+LSAqIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgcmVwb3J0ZWQgYXMgZXhwZWN0ZWQ6PGJyPi0gKi88 YnI+LSBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7PGJyPi0gbHVhTV9tZXRyaWNzKEwsICZh bXA7bmV3bSk7PGJyPi0gYXNzZXJ0KG5ld20uZ2Nfc3RlcHNfcGF1c2UgLSBvbGRtLmdjX3N0ZXBz X3BhdXNlID09IDEpOzxicj4tIGFzc2VydChuZXdtLmdjX3N0ZXBzX3Byb3BhZ2F0ZSAtIG9sZG0u Z2Nfc3RlcHNfcHJvcGFnYXRlICZndDs9IDEpOzxicj4tIGFzc2VydChuZXdtLmdjX3N0ZXBzX2F0 b21pYyAtIG9sZG0uZ2Nfc3RlcHNfYXRvbWljID09IDEpOzxicj4tIGFzc2VydChuZXdtLmdjX3N0 ZXBzX3N3ZWVwc3RyaW5nIC0gb2xkbS5nY19zdGVwc19zd2VlcHN0cmluZyAmZ3Q7PSAxKTs8YnI+ LSBhc3NlcnQobmV3bS5nY19zdGVwc19zd2VlcCAtIG9sZG0uZ2Nfc3RlcHNfc3dlZXAgJmd0Oz0g MSk7PGJyPi0gLyogTm90aGluZyB0byBmaW5hbGl6ZSwgc2tpcHBlZC4gKi88YnI+LSBhc3NlcnQo bmV3bS5nY19zdGVwc19maW5hbGl6ZSA9PSAwKTs8YnI+LSBvbGRtID0gbmV3bTs8YnI+LTxicj4t IC8qPGJyPi0gKiBOb3cgbGV0J3MgcnVuIHRocmVlIEdDIGN5Y2xlcyB0byBlbnN1cmUgdGhhdDxi cj4tICogaW5jcmVtZW50IHdhcyBub3QgYSBsdWNreSBjb2luY2lkZW5jZS48YnI+LSAqLzxicj4t IGx1YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTs8YnI+LSBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVD VCwgMCk7PGJyPi0gbHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOzxicj4tIGx1YU1fbWV0cmlj cyhMLCAmYW1wO25ld20pOzxicj4tIGFzc2VydChuZXdtLmdjX3N0ZXBzX3BhdXNlIC0gb2xkbS5n Y19zdGVwc19wYXVzZSA9PSAzKTs8YnI+LSBhc3NlcnQobmV3bS5nY19zdGVwc19wcm9wYWdhdGUg LSBvbGRtLmdjX3N0ZXBzX3Byb3BhZ2F0ZSAmZ3Q7PSAzKTs8YnI+LSBhc3NlcnQobmV3bS5nY19z dGVwc19hdG9taWMgLSBvbGRtLmdjX3N0ZXBzX2F0b21pYyA9PSAzKTs8YnI+LSBhc3NlcnQobmV3 bS5nY19zdGVwc19zd2VlcHN0cmluZyAtIG9sZG0uZ2Nfc3RlcHNfc3dlZXBzdHJpbmcgJmd0Oz0g Myk7PGJyPi0gYXNzZXJ0KG5ld20uZ2Nfc3RlcHNfc3dlZXAgLSBvbGRtLmdjX3N0ZXBzX3N3ZWVw ICZndDs9IDMpOzxicj4tIC8qIE5vdGhpbmcgdG8gZmluYWxpemUsIHNraXBwZWQuICovPGJyPi0g YXNzZXJ0KG5ld20uZ2Nfc3RlcHNfZmluYWxpemUgPT0gMCk7PGJyPi08YnI+LSBsdWFfcHVzaGJv b2xlYW4oTCwgMSk7PGJyPi0gcmV0dXJuIDE7PGJyPi19PGJyPi08YnI+LXN0YXRpYyBpbnQgb2Jq Y291bnQobHVhX1N0YXRlICpMKTxicj4tezxicj4tIHN0cnVjdCBsdWFtX01ldHJpY3Mgb2xkbSwg bmV3bTs8YnI+LSBpbnQgbiA9IGx1YV9nZXR0b3AoTCk7PGJyPi0gaWYgKG4gIT0gMSB8fCAhbHVh X2lzZnVuY3Rpb24oTCwgMSkpPGJyPi0gbHVhTF9lcnJvcihMLCAiaW5jb3JyZWN0IGFyZ3VtZW50 OiAxIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIik7PGJyPi08YnI+LSAvKiBGb3JjZSB1cCBnYXJiYWdl IGNvbGxlY3QgYWxsIGRlYWQgb2JqZWN0cy4gKi88YnI+LSBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVD VCwgMCk7PGJyPi08YnI+LSBsdWFNX21ldHJpY3MoTCwgJmFtcDtvbGRtKTs8YnI+LSAvKiBHZW5l cmF0ZSBnYXJiYWdlLiBBcmd1bWVudCBpcyBpdGVyYXRpb25zIGFtb3VudC4gKi88YnI+LSBsdWFf cHVzaG51bWJlcihMLCAxMDAwKTs8YnI+LSBsdWFfY2FsbChMLCAxLCAwKTs8YnI+LSBsdWFfZ2Mo TCwgTFVBX0dDQ09MTEVDVCwgMCk7PGJyPi0gbHVhTV9tZXRyaWNzKEwsICZhbXA7bmV3bSk7PGJy Pi0gYXNzZXJ0KG5ld20uZ2Nfc3RybnVtIC0gb2xkbS5nY19zdHJudW0gPT0gMCk7PGJyPi0gYXNz ZXJ0KG5ld20uZ2NfdGFibnVtIC0gb2xkbS5nY190YWJudW0gPT0gMCk7PGJyPi0gYXNzZXJ0KG5l d20uZ2NfdWRhdGFudW0gLSBvbGRtLmdjX3VkYXRhbnVtID09IDApOzxicj4tIGFzc2VydChuZXdt LmdjX2NkYXRhbnVtIC0gb2xkbS5nY19jZGF0YW51bSA9PSAwKTs8YnI+LTxicj4tIGx1YV9wdXNo Ym9vbGVhbihMLCAxKTs8YnI+LSByZXR1cm4gMTs8YnI+LX08YnI+LTxicj4tc3RhdGljIGludCBv Ympjb3VudF9jZGF0YV9kZWNyZW1lbnQobHVhX1N0YXRlICpMKTxicj4tezxicj4tIC8qPGJyPi0g KiBjZGF0YSBkZWNyZW1lbnQgdGVzdC48YnI+LSAqIFNlZSA8YSBocmVmPSJodHRwczovL2dpdGh1 Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC9pc3N1ZXMvNTgyMCIgdGFyZ2V0PSJfYmxhbmsiPmh0 dHBzOi8vZ2l0aHViLmNvbS90YXJhbnRvb2wvdGFyYW50b29sL2lzc3Vlcy81ODIwPC9hPi48YnI+ LSAqLzxicj4tIHN0cnVjdCBsdWFtX01ldHJpY3Mgb2xkbSwgbmV3bTs8YnI+LSBpbnQgbiA9IGx1 YV9nZXR0b3AoTCk7PGJyPi0gaWYgKG4gIT0gMSB8fCAhbHVhX2lzZnVuY3Rpb24oTCwgMSkpPGJy Pi0gbHVhTF9lcnJvcihMLCAiaW5jb3JyZWN0IGFyZ3VtZW50OiAxIGZ1bmN0aW9uIGlzIHJlcXVp cmVkIik7PGJyPi08YnI+LSAvKiBGb3JjZSB1cCBnYXJiYWdlIGNvbGxlY3QgYWxsIGRlYWQgb2Jq ZWN0cy4gKi88YnI+LSBsdWFfZ2MoTCwgTFVBX0dDQ09MTEVDVCwgMCk7PGJyPi08YnI+LSBsdWFN X21ldHJpY3MoTCwgJmFtcDtvbGRtKTs8YnI+LSAvKjxicj4tICogVGhlIGZ1bmN0aW9uIGdlbmVy YXRlcyBhbmQgY29sbGVjdHMgY2RhdGEgd2l0aDxicj4tICogTEpfR0NfQ0RBVEFfRklOIGZsYWcu PGJyPi0gKi88YnI+LSBsdWFfY2FsbChMLCAwLCAwKTs8YnI+LSBsdWFNX21ldHJpY3MoTCwgJmFt cDtuZXdtKTs8YnI+LSBhc3NlcnQobmV3bS5nY19jZGF0YW51bSAtIG9sZG0uZ2NfY2RhdGFudW0g PT0gMCk7PGJyPi08YnI+LSBsdWFfcHVzaGJvb2xlYW4oTCwgMSk7PGJyPi0gcmV0dXJuIDE7PGJy Pi19PGJyPi08YnI+LXN0YXRpYyBpbnQgc25hcF9yZXN0b3JlcyhsdWFfU3RhdGUgKkwpPGJyPi17 PGJyPi0gc3RydWN0IGx1YW1fTWV0cmljcyBvbGRtLCBuZXdtOzxicj4tIGludCBuID0gbHVhX2dl dHRvcChMKTs8YnI+LSBpZiAobiAhPSAxIHx8ICFsdWFfaXNmdW5jdGlvbihMLCAxKSk8YnI+LSBs dWFMX2Vycm9yKEwsICJpbmNvcnJlY3QgYXJndW1lbnRzOiAxIGZ1bmN0aW9uIGlzIHJlcXVpcmVk Iik7PGJyPi08YnI+LSBsdWFNX21ldHJpY3MoTCwgJmFtcDtvbGRtKTs8YnI+LSAvKiBHZW5lcmF0 ZSBzbmFwc2hvdHMuICovPGJyPi0gbHVhX2NhbGwoTCwgMCwgMSk7PGJyPi0gbiA9IGx1YV9nZXR0 b3AoTCk7PGJyPi0gaWYgKG4gIT0gMSB8fCAhbHVhX2lzbnVtYmVyKEwsIDEpKTxicj4tIGx1YUxf ZXJyb3IoTCwgImluY29ycmVjdCByZXR1cm4gdmFsdWU6IDEgbnVtYmVyIGlzIHJlcXVpcmVkIik7 PGJyPi0gc2l6ZV90IHNuYXBfcmVzdG9yZXMgPSBsdWFfdG9udW1iZXIoTCwgMSk7PGJyPi0gbHVh TV9tZXRyaWNzKEwsICZhbXA7bmV3bSk7PGJyPi0gYXNzZXJ0KG5ld20uaml0X3NuYXBfcmVzdG9y ZSAtIG9sZG0uaml0X3NuYXBfcmVzdG9yZSA9PSBzbmFwX3Jlc3RvcmVzKTs8YnI+LTxicj4tIGx1 YV9wdXNoYm9vbGVhbihMLCAxKTs8YnI+LSByZXR1cm4gMTs8YnI+LX08YnI+LTxicj4tc3RhdGlj IGludCBzdHJoYXNoKGx1YV9TdGF0ZSAqTCk8YnI+LXs8YnI+LSBzdHJ1Y3QgbHVhbV9NZXRyaWNz IG9sZG0sIG5ld207PGJyPi0gbHVhX3B1c2hzdHJpbmcoTCwgInN0cmhhc2hfaGl0Iik7PGJyPi0g bHVhTV9tZXRyaWNzKEwsICZhbXA7b2xkbSk7PGJyPi0gbHVhX3B1c2hzdHJpbmcoTCwgInN0cmhh c2hfaGl0Iik7PGJyPi0gbHVhX3B1c2hzdHJpbmcoTCwgIm5ld19zdHIiKTs8YnI+LSBsdWFNX21l dHJpY3MoTCwgJmFtcDtuZXdtKTs8YnI+LSBhc3NlcnQobmV3bS5zdHJoYXNoX2hpdCAtIG9sZG0u c3RyaGFzaF9oaXQgPT0gMSk7PGJyPi0gYXNzZXJ0KG5ld20uc3RyaGFzaF9taXNzIC0gb2xkbS5z dHJoYXNoX21pc3MgPT0gMSk7PGJyPi0gbHVhX3BvcChMLCAzKTs8YnI+LSBsdWFfcHVzaGJvb2xl YW4oTCwgMSk7PGJyPi0gcmV0dXJuIDE7PGJyPi19PGJyPi08YnI+LXN0YXRpYyBpbnQgdHJhY2Vu dW1fYmFzZShsdWFfU3RhdGUgKkwpPGJyPi17PGJyPi0gc3RydWN0IGx1YW1fTWV0cmljcyBtZXRy aWNzOzxicj4tIGludCBuID0gbHVhX2dldHRvcChMKTs8YnI+LSBpZiAobiAhPSAxIHx8ICFsdWFf aXNmdW5jdGlvbihMLCAxKSk8YnI+LSBsdWFMX2Vycm9yKEwsICJpbmNvcnJlY3QgYXJndW1lbnRz OiAxIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIik7PGJyPi08YnI+LSBsdWFKSVRfc2V0bW9kZShMLCAw LCBMVUFKSVRfTU9ERV9GTFVTSCk7PGJyPi0gLyogRm9yY2UgdXAgZ2FyYmFnZSBjb2xsZWN0IGFs bCBkZWFkIG9iamVjdHMuICovPGJyPi0gbHVhX2djKEwsIExVQV9HQ0NPTExFQ1QsIDApOzxicj4t PGJyPi0gbHVhTV9tZXRyaWNzKEwsICZhbXA7bWV0cmljcyk7PGJyPi0gYXNzZXJ0KG1ldHJpY3Mu aml0X3RyYWNlX251bSA9PSAwKTs8YnI+LTxicj4tIC8qIEdlbmVyYXRlIHRyYWNlcy4gKi88YnI+ LSBsdWFfY2FsbChMLCAwLCAxKTs8YnI+LSBuID0gbHVhX2dldHRvcChMKTs8YnI+LSBpZiAobiAh PSAxIHx8ICFsdWFfaXNudW1iZXIoTCwgMSkpPGJyPi0gbHVhTF9lcnJvcihMLCAiaW5jb3JyZWN0 IHJldHVybiB2YWx1ZTogMSBudW1iZXIgaXMgcmVxdWlyZWQiKTs8YnI+LSBzaXplX3Qgaml0X3Ry YWNlX251bSA9IGx1YV90b251bWJlcihMLCAxKTs8YnI+LSBsdWFNX21ldHJpY3MoTCwgJmFtcDtt ZXRyaWNzKTs8YnI+LSBhc3NlcnQobWV0cmljcy5qaXRfdHJhY2VfbnVtID09IGppdF90cmFjZV9u dW0pOzxicj4tPGJyPi0gbHVhSklUX3NldG1vZGUoTCwgMCwgTFVBSklUX01PREVfRkxVU0gpOzxi cj4tIC8qIEZvcmNlIHVwIGdhcmJhZ2UgY29sbGVjdCBhbGwgZGVhZCBvYmplY3RzLiAqLzxicj4t IGx1YV9nYyhMLCBMVUFfR0NDT0xMRUNULCAwKTs8YnI+LSBsdWFNX21ldHJpY3MoTCwgJmFtcDtt ZXRyaWNzKTs8YnI+LSBhc3NlcnQobWV0cmljcy5qaXRfdHJhY2VfbnVtID09IDApOzxicj4tPGJy Pi0gbHVhX3B1c2hib29sZWFuKEwsIDEpOzxicj4tIHJldHVybiAxOzxicj4tfTxicj4tPGJyPi1z dGF0aWMgY29uc3Qgc3RydWN0IGx1YUxfUmVnIHRlc3RnZXRtZXRyaWNzW10gPSB7PGJyPi0geyJi YXNlIiwgYmFzZX0sPGJyPi0geyJnY19hbGxvY2F0ZWRfZnJlZWQiLCBnY19hbGxvY2F0ZWRfZnJl ZWR9LDxicj4tIHsiZ2Nfc3RlcHMiLCBnY19zdGVwc30sPGJyPi0geyJvYmpjb3VudCIsIG9iamNv dW50fSw8YnI+LSB7Im9iamNvdW50X2NkYXRhX2RlY3JlbWVudCIsIG9iamNvdW50X2NkYXRhX2Rl Y3JlbWVudH0sPGJyPi0geyJzbmFwX3Jlc3RvcmVzIiwgc25hcF9yZXN0b3Jlc30sPGJyPi0geyJz dHJoYXNoIiwgc3RyaGFzaH0sPGJyPi0geyJ0cmFjZW51bV9iYXNlIiwgdHJhY2VudW1fYmFzZX0s PGJyPi0ge05VTEwsIE5VTEx9PGJyPi19Ozxicj4tPGJyPi1MVUFfQVBJIGludCBsdWFvcGVuX3Rl c3RnZXRtZXRyaWNzKGx1YV9TdGF0ZSAqTCk8YnI+LXs8YnI+LSBsdWFMX3JlZ2lzdGVyKEwsICJ0 ZXN0Z2V0bWV0cmljcyIsIHRlc3RnZXRtZXRyaWNzKTs8YnI+LSByZXR1cm4gMTs8YnI+LX08YnI+ LS08YnI+Mi4zNC4xPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+PGRp dj4tLTxicj5CZXN0IHJlZ2FyZHMsPC9kaXY+PGRpdj5NYXhpbSBLb2tyeWFzaGtpbjwvZGl2Pjwv ZGl2PjxkaXY+Jm5ic3A7PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvQk9EWT48L0hUTUw+Cg== ----ALT--fA6e47699d6E342ED2fdBeE3fD6d194C1684498677--