Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1YlLmx-0001US-QQ for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Apr 2015 18:23:52 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1YlLmw-00021G-9z for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Apr 2015 18:23:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1YlLms-000217-IT for pgsql-hackers@postgresql.org; Thu, 23 Apr 2015 18:23:46 +0000 Received: from linode.thelabyrinth.net ([2600:3c00::f03c:91ff:fe69:8d76] helo=mail.thelabyrinth.net) by magus.postgresql.org with esmtps (TLS1.1:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1YlLmg-0000z8-Tw; Thu, 23 Apr 2015 18:23:45 +0000 Received: from theseus.local (unknown [98.204.177.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dsteele) by mail.thelabyrinth.net (Postfix) with ESMTPSA id B26AF12F96; Thu, 23 Apr 2015 18:23:29 +0000 (UTC) Message-ID: <553938A1.7030707@pgmasters.net> Date: Thu, 23 Apr 2015 14:23:29 -0400 From: David Steele User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Sawada Masahiko CC: Tatsuo Ishii , Simon Riggs , PostgreSQL-development , Abhijit Menon-Sen , Fujii Masao Subject: Re: Auditing extension for PostgreSQL (Take 2) References: <552326EE.4060509@pgmasters.net> <552D2C1A.3060002@pgmasters.net> <20150415.081354.1167351714960358354.t-ishii@sraoss.co.jp> <552DA959.2010102@pgmasters.net> <552EA121.1090603@pgmasters.net> <5534FC6E.9030906@pgmasters.net> In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="hegJUTBRllDvNjL5vvUaBo6JUSisFGCwJ" X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --hegJUTBRllDvNjL5vvUaBo6JUSisFGCwJ Content-Type: multipart/mixed; boundary="------------010008090907020703080501" This is a multi-part message in MIME format. --------------010008090907020703080501 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 4/23/15 5:49 AM, Sawada Masahiko wrote: >=20 > I'm concerned that behaviour of pg_audit has been changed at a few > times as far as I remember. Did we achieve consensus on this design? The original author Abhijit expressed support for the SESSION/OBJECT concept before I started working on the code and so has Stephen Frost. As far as I know all outstanding comments from the community have been addressed. Overall behavior has not changed very much since being submitted to the CF in February - mostly just tweaks and additional options. > And one question; OBJECT logging of all tuple deletion (i.g. DELETE > FROM hoge) seems like not work as follows. >=20 >=20 > =3D# grant all on bar TO masahiko; >=20 > (1) Delete all tuple > =3D# insert into bar values(1); > =3D# delete from bar ; > NOTICE: AUDIT: SESSION,47,1,WRITE,DELETE,TABLE,public.bar,delete from = bar ; > DELETE 1 >=20 > (2) Delete specified tuple (but same result as (1)) > =3D# insert into bar values(1); > =3D# delete from bar where col =3D 1; > NOTICE: AUDIT: OBJECT,48,1,WRITE,DELETE,TABLE,public.bar,delete from > bar where col =3D 1; > NOTICE: AUDIT: SESSION,48,1,WRITE,DELETE,TABLE,public.bar,delete from > bar where col =3D 1; > DELETE 1 Definitely a bug. Object logging works in the second case because the select privileges on the "col" column trigger logging. I have fixed this and added a regression test. I also found a way to get the stack memory context under the query memory context. Because of the order of execution it requires moving the memory context but I still think it's a much better solution. I was able to remove most of the stack pops (except function logging) and the output remained stable. I've also added some checking to make sure that if anything looks funny on the stack an error will be generated. Thanks for the feedback! --=20 - David Steele david@pgmasters.net --------------010008090907020703080501 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pg_audit-v10.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pg_audit-v10.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4 IGUyYzRlMjcuLjM0MzNmMjEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQCBTVUJESVJTID0gXAogCQlvaWQy bmFtZQlcCiAJCXBhZ2VpbnNwZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCisJCXBnX2F1ZGl0 CVwKIAkJcGdfYnVmZmVyY2FjaGUJXAogCQlwZ19mcmVlc3BhY2VtYXAgXAogCQlwZ19wcmV3 YXJtCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvLmdpdGlnbm9yZSBiL2NvbnRy aWIvcGdfYXVkaXQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hNTI2N2NmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC8uZ2l0 aWdub3JlCkBAIC0wLDAgKzEsNSBAQAorbG9nLworcmVzdWx0cy8KK3RtcF9jaGVjay8KK3Jl Z3Jlc3Npb24uZGlmZnMKK3JlZ3Jlc3Npb24ub3V0CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X2F1ZGl0L01ha2VmaWxlIGIvY29udHJpYi9wZ19hdWRpdC9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM2MDExCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19hdWRpdC9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACisjIHBnX2F1ZGl0 L01ha2VmaWxlCisKK01PRFVMRSA9IHBnX2F1ZGl0CitNT0RVTEVfYmlnID0gcGdfYXVkaXQK K09CSlMgPSBwZ19hdWRpdC5vCisKK0VYVEVOU0lPTiA9IHBnX2F1ZGl0CitSRUdSRVNTID0g cGdfYXVkaXQKK1JFR1JFU1NfT1BUUyA9IC0tdGVtcC1jb25maWc9JCh0b3Bfc3JjZGlyKS9j b250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbmYKK0RBVEEgPSBwZ19hdWRpdC0tMS4wLjAu c3FsCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0g JChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitz dWJkaXIgPSBjb250cmliL3BnX2F1ZGl0Cit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX2F1ZGl0L2V4cGVjdGVkL3BnX2F1ZGl0LWRlcGFyc2Uub3V0IGIvY29udHJp Yi9wZ19hdWRpdC9leHBlY3RlZC9wZ19hdWRpdC1kZXBhcnNlLm91dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTY1MWViCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19hdWRpdC9leHBlY3RlZC9wZ19hdWRpdC1kZXBhcnNlLm91dApAQCAtMCwwICsx LDk0MiBAQAorLS0gTG9hZCBwZ19hdWRpdCBtb2R1bGUKK2NyZWF0ZSBleHRlbnNpb24gcGdf YXVkaXQ7CistLQorLS0gQ3JlYXRlIGEgc3VwZXJ1c2VyIHJvbGUgdGhhdCB3ZSBrbm93IHRo ZSBuYW1lIG9mIGZvciB0ZXN0aW5nCitDUkVBVEUgVVNFUiBzdXBlciBTVVBFUlVTRVI7Citc Y29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXI7CistLQorLS0gQ3JlYXRlIGF1ZGl0 b3Igcm9sZQorQ1JFQVRFIFJPTEUgYXVkaXRvcjsKKy0tCistLSBDcmVhdGUgZmlyc3QgdGVz dCB1c2VyCitDUkVBVEUgVVNFUiB1c2VyMTsKK0FMVEVSIFJPTEUgdXNlcjEgU0VUIHBnX2F1 ZGl0LmxvZyA9ICdkZGwsIFJPTEUnOworQUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQu bG9nX25vdGljZSA9IG9uOworLS0KKy0tIENyZWF0ZSwgc2VsZWN0LCBkcm9wIChzZWxlY3Qg d2lsbCBub3QgYmUgYXVkaXRlZCkKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2Vy MQorQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0IChpZCBJTlQpOworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMSwxLERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGljLnRlc3QsQ1JFQVRF IFRBQkxFIHB1YmxpYy50ZXN0IChpZCBJTlQpOworU0VMRUNUICogRlJPTSB0ZXN0OworIGlk IAorLS0tLQorKDAgcm93cykKKworRFJPUCBUQUJMRSB0ZXN0OworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMiwxLERETCxEUk9QIFRBQkxFLFRBQkxFLHB1YmxpYy50ZXN0LERST1AgVEFC TEUgdGVzdDsKKy0tCistLSBDcmVhdGUgc2Vjb25kIHRlc3QgdXNlcgorXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHN1cGVyCitDUkVBVEUgVVNFUiB1c2VyMjsKK0FMVEVSIFJPTEUg dXNlcjIgU0VUIHBnX2F1ZGl0LmxvZyA9ICdSZWFkLCB3cml0RSc7CitBTFRFUiBST0xFIHVz ZXIyIFNFVCBwZ19hdWRpdC5sb2dfbm90aWNlID0gb247CitBTFRFUiBST0xFIHVzZXIyIFNF VCBwZ19hdWRpdC5yb2xlID0gYXVkaXRvcjsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lv biB1c2VyMgorQ1JFQVRFIFRBQkxFIHRlc3QyIChpZCBJTlQpOworR1JBTlQgU0VMRUNUIE9O IFRBQkxFIHB1YmxpYy50ZXN0MiBUTyBhdWRpdG9yOworLS0KKy0tIFJvbGUtYmFzZWQgdGVz dHMKK0NSRUFURSBUQUJMRSB0ZXN0MworKAorCWlkIElOVAorKTsKK1NFTEVDVCBjb3VudCgq KQorICBGUk9NCisoCisJU0VMRUNUIHJlbG5hbWUKKwkgIEZST00gcGdfY2xhc3MKKwkgIExJ TUlUIDEKKykgU1VCUVVFUlk7CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJvdykK KworU0VMRUNUICoKKyAgRlJPTSB0ZXN0MywgdGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiwxLDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUICoKKyAgRlJPTSB0ZXN0MywgdGVzdDI7 IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGlj LnRlc3QyLCJTRUxFQ1QgKgorICBGUk9NIHRlc3QzLCB0ZXN0MjsiCisgaWQgfCBpZCAKKy0t LS0rLS0tLQorKDAgcm93cykKKworR1JBTlQgSU5TRVJUCisgICBPTiBUQUJMRSBwdWJsaWMu dGVzdDMKKyAgIFRPIGF1ZGl0b3I7CistLQorLS0gQ3JlYXRlIGEgdmlldyB0byB0ZXN0IGxv Z2dpbmcKK0NSRUFURSBWSUVXIHZ3X3Rlc3QzIEFTCitTRUxFQ1QgKgorICBGUk9NIHRlc3Qz OworR1JBTlQgU0VMRUNUCisgICBPTiB2d190ZXN0MworICAgVE8gYXVkaXRvcjsKKy0tCist LSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3Qgb24gdndfdGVzdDMKKy0t IHNlbGVjdCBvbiB0ZXN0MgorU0VMRUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVzdDI7CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUICoKKyAg RlJPTSB2d190ZXN0MywgdGVzdDI7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwyLDEsUkVB RCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3QyLCJTRUxFQ1QgKgorICBGUk9NIHZ3X3Rlc3Qz LCB0ZXN0MjsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDIsMSxSRUFELFNFTEVDVCxWSUVX LHB1YmxpYy52d190ZXN0MywiU0VMRUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVzdDI7Igor IGlkIHwgaWQgCistLS0tKy0tLS0KKygwIHJvd3MpCisKKy0tCistLSBPYmplY3QgbG9nZ2Vk IGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDMKKy0tIHNlbGVjdCBvbiB0ZXN0Mgor V0lUSCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJ TlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiwzLDEsV1JJVEUsSU5TRVJULCwsIldJVEggQ1RFIEFTCisoCisJU0VMRUNUIGlkCisJ ICBGUk9NIHRlc3QyCispCitJTlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00g Y3RlOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMywxLFdSSVRFLElOU0VSVCxUQUJMRSxw dWJsaWMudGVzdDMsIldJVEggQ1RFIEFTCisoCisJU0VMRUNUIGlkCisJICBGUk9NIHRlc3Qy CispCitJTlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKK05PVElD RTogIEFVRElUOiBPQkpFQ1QsMywxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy50ZXN0Miwi V0lUSCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJ TlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorLS0KKy0tIE9iamVjdCBsb2dn ZWQgYmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0ZXN0MworV0lUSCBDVEUgQVMKKygKKwlJ TlNFUlQgSU5UTyB0ZXN0MyBWQUxVRVMgKDEpCisJCQkJICAgUkVUVVJOSU5HIGlkCispCitJ TlNFUlQgSU5UTyB0ZXN0MgorU0VMRUNUIGlkCisgIEZST00gY3RlOworTk9USUNFOiAgQVVE SVQ6IFNFU1NJT04sNCwxLFdSSVRFLElOU0VSVCwsLCJXSVRIIENURSBBUworKAorCUlOU0VS VCBJTlRPIHRlc3QzIFZBTFVFUyAoMSkKKwkJCQkgICBSRVRVUk5JTkcgaWQKKykKK0lOU0VS VCBJTlRPIHRlc3QyCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6 IE9CSkVDVCw0LDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0MywiV0lUSCBDVEUg QVMKKygKKwlJTlNFUlQgSU5UTyB0ZXN0MyBWQUxVRVMgKDEpCisJCQkJICAgUkVUVVJOSU5H IGlkCispCitJTlNFUlQgSU5UTyB0ZXN0MgorU0VMRUNUIGlkCisgIEZST00gY3RlOyIKK0dS QU5UIFVQREFURSBPTiBUQUJMRSBwdWJsaWMudGVzdDIgVE8gYXVkaXRvcjsKKy0tCistLSBP YmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDMKKy0tIHVwZGF0 ZSBvbiB0ZXN0MgorV0lUSCBDVEUgQVMKKygKKwlVUERBVEUgdGVzdDIKKwkgICBTRVQgaWQg PSAxCisJUkVUVVJOSU5HIGlkCispCitJTlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisg IEZST00gY3RlOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNSwxLFdSSVRFLElOU0VSVCws LCJXSVRIIENURSBBUworKAorCVVQREFURSB0ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRV Uk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7 IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw1LDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1Ymxp Yy50ZXN0MywiV0lUSCBDVEUgQVMKKygKKwlVUERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAx CisJUkVUVVJOSU5HIGlkCispCitJTlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZS T00gY3RlOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNSwxLFdSSVRFLFVQREFURSxUQUJM RSxwdWJsaWMudGVzdDIsIldJVEggQ1RFIEFTCisoCisJVVBEQVRFIHRlc3QyCisJICAgU0VU IGlkID0gMQorCVJFVFVSTklORyBpZAorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBp ZAorICBGUk9NIGN0ZTsiCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0g aW5zZXJ0IG9uIHRlc3QyCitXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QyIFZB TFVFUyAoMSkKKwkJCQkgICBSRVRVUk5JTkcgaWQKKykKK1VQREFURSB0ZXN0MworICAgU0VU IGlkID0gY3RlLmlkCisgIEZST00gY3RlCisgV0hFUkUgdGVzdDMuaWQgPD4gY3RlLmlkOwor Tk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNiwxLFdSSVRFLFVQREFURSwsLCJXSVRIIENURSBB UworKAorCUlOU0VSVCBJTlRPIHRlc3QyIFZBTFVFUyAoMSkKKwkJCQkgICBSRVRVUk5JTkcg aWQKKykKK1VQREFURSB0ZXN0MworICAgU0VUIGlkID0gY3RlLmlkCisgIEZST00gY3RlCisg V0hFUkUgdGVzdDMuaWQgPD4gY3RlLmlkOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNiwx LFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdDIsIldJVEggQ1RFIEFTCisoCisJSU5T RVJUIElOVE8gdGVzdDIgVkFMVUVTICgxKQorCQkJCSAgIFJFVFVSTklORyBpZAorKQorVVBE QVRFIHRlc3QzCisgICBTRVQgaWQgPSBjdGUuaWQKKyAgRlJPTSBjdGUKKyBXSEVSRSB0ZXN0 My5pZCA8PiBjdGUuaWQ7IgorLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDIg c28gdGhhdCBvbmx5IG9iamVjdCBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHN1cGVyCithbHRlciByb2xlIHVzZXIyIHNldCBwZ19hdWRpdC5s b2cgPSAnTk9ORSc7CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjIKKy0tCist LSBDcmVhdGUgdGVzdDQgYW5kIGFkZCBwZXJtaXNzaW9ucworQ1JFQVRFIFRBQkxFIHRlc3Q0 CisoCisJaWQgaW50LAorCW5hbWUgdGV4dAorKTsKK0dSQU5UIFNFTEVDVCAobmFtZSkKKyAg IE9OIFRBQkxFIHB1YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsKK0dSQU5UIFVQREFURSAo aWQpCisgICBPTiBUQUJMRSBwdWJsaWMudGVzdDQKKyAgIFRPIGF1ZGl0b3I7CitHUkFOVCBp bnNlcnQgKG5hbWUpCisgICBPTiBUQUJMRSBwdWJsaWMudGVzdDQKKyAgIFRPIGF1ZGl0b3I7 CistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1NFTEVDVCBpZAorICBGUk9NIHB1YmxpYy50 ZXN0NDsKKyBpZCAKKy0tLS0KKygwIHJvd3MpCisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJl Y2F1c2Ugb2Y6CistLSBzZWxlY3QgKG5hbWUpIG9uIHRlc3Q0CitTRUxFQ1QgbmFtZQorICBG Uk9NIHB1YmxpYy50ZXN0NDsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMSwxLFJFQUQsU0VM RUNULFRBQkxFLHB1YmxpYy50ZXN0NCwiU0VMRUNUIG5hbWUKKyAgRlJPTSBwdWJsaWMudGVz dDQ7IgorIG5hbWUgCistLS0tLS0KKygwIHJvd3MpCisKKy0tCistLSBOb3Qgb2JqZWN0IGxv Z2dlZAorSU5TRVJUIElOVE8gcHVibGljLnRlc3Q0IChpZCkKKwkJCQkgIFZBTFVFUyAoMSk7 CistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0IChuYW1lKSBv biB0ZXN0NAorSU5TRVJUIElOVE8gcHVibGljLnRlc3Q0IChuYW1lKQorCQkJCSAgVkFMVUVT ICgndGVzdCcpOworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwyLDEsV1JJVEUsSU5TRVJULFRB QkxFLHB1YmxpYy50ZXN0NCwiSU5TRVJUIElOVE8gcHVibGljLnRlc3Q0IChuYW1lKQorCQkJ CSAgVkFMVUVTICgndGVzdCcpOyIKKy0tCistLSBOb3Qgb2JqZWN0IGxvZ2dlZAorVVBEQVRF IHB1YmxpYy50ZXN0NAorICAgU0VUIG5hbWUgPSAnZm9vJzsKKy0tCistLSBPYmplY3QgbG9n Z2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKGlkKSBvbiB0ZXN0NAorVVBEQVRFIHB1Ymxp Yy50ZXN0NAorICAgU0VUIGlkID0gMTsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMywxLFdS SVRFLFVQREFURSxUQUJMRSxwdWJsaWMudGVzdDQsIlVQREFURSBwdWJsaWMudGVzdDQKKyAg IFNFVCBpZCA9IDE7IgorLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVw ZGF0ZSAobmFtZSkgb24gdGVzdDQKKy0tIHVwZGF0ZSAobmFtZSkgdGFrZXMgcHJlY2VkZW5j ZSBvdmVyIHNlbGVjdCAobmFtZSkgZHVlIHRvIG9yZGVyaW5nCit1cGRhdGUgcHVibGljLnRl c3Q0IHNldCBuYW1lID0gJ2Zvbycgd2hlcmUgbmFtZSA9ICdiYXInOworTk9USUNFOiAgQVVE SVQ6IE9CSkVDVCw0LDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy50ZXN0NCx1cGRhdGUg cHVibGljLnRlc3Q0IHNldCBuYW1lID0gJ2Zvbycgd2hlcmUgbmFtZSA9ICdiYXInOworLS0K Ky0tIERyb3AgdGVzdCB0YWJsZXMKK0RST1AgVEFCTEUgdGVzdDI7CitEUk9QIFZJRVcgdndf dGVzdDM7CitEUk9QIFRBQkxFIHRlc3QzOworRFJPUCBUQUJMRSB0ZXN0NDsKKy0tCistLSBD aGFuZ2UgcGVybWlzc2lvbnMgb2YgdXNlciAxIHNvIHRoYXQgc2Vzc2lvbiBsb2dnaW5nIHdp bGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVyCithbHRlciBy b2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAnRERMLCBSRUFEJzsKK1xjb25uZWN0IGNv bnRyaWJfcmVncmVzc2lvbiB1c2VyMQorLS0KKy0tIENyZWF0ZSB0YWJsZSBpcyBzZXNzaW9u IGxvZ2dlZAorQ1JFQVRFIFRBQkxFIHB1YmxpYy5hY2NvdW50CisoCisJaWQgSU5ULAorCW5h bWUgVEVYVCwKKwlwYXNzd29yZCBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQKKyk7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwxLDEsRERMLENSRUFURSBUQUJMRSxUQUJMRSxwdWJsaWMu YWNjb3VudCwiQ1JFQVRFIFRBQkxFIHB1YmxpYy5hY2NvdW50CisoCisJaWQgSU5ULAorCW5h bWUgVEVYVCwKKwlwYXNzd29yZCBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQKKyk7IgorLS0K Ky0tIFNlbGVjdCBpcyBzZXNzaW9uIGxvZ2dlZAorU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50 OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMiwxLFJFQUQsU0VMRUNULCwsIlNFTEVDVCAq CisgIEZST00gYWNjb3VudDsiCisgaWQgfCBuYW1lIHwgcGFzc3dvcmQgfCBkZXNjcmlwdGlv biAKKy0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKwor LS0KKy0tIEluc2VydCBpcyBub3QgbG9nZ2VkCitJTlNFUlQgSU5UTyBhY2NvdW50IChpZCwg bmFtZSwgcGFzc3dvcmQsIGRlc2NyaXB0aW9uKQorCQkJIFZBTFVFUyAoMSwgJ3VzZXIxJywg J0hBU0gxJywgJ2JsYWgsIGJsYWgnKTsKKy0tCistLSBDaGFuZ2UgcGVybWlzc2lvbnMgb2Yg dXNlciAxIHNvIHRoYXQgb25seSBvYmplY3QgbG9nZ2luZyB3aWxsIGJlIGRvbmUKK1xjb25u ZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdf YXVkaXQubG9nID0gJ25vbmUnOworYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQucm9s ZSA9ICdhdWRpdG9yJzsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMQorLS0K Ky0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBsb2dnZWQKK0dSQU5UIFNFTEVDVCAocGFzc3dvcmQp LAorCSAgVVBEQVRFIChuYW1lLCBwYXNzd29yZCkKKyAgIE9OIFRBQkxFIHB1YmxpYy5hY2Nv dW50CisgICBUTyBhdWRpdG9yOworLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitTRUxFQ1Qg aWQsCisJICAgbmFtZQorICBGUk9NIGFjY291bnQ7CisgaWQgfCBuYW1lICAKKy0tLS0rLS0t LS0tLQorICAxIHwgdXNlcjEKKygxIHJvdykKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVj YXVzZSBvZjoKKy0tIHNlbGVjdCAocGFzc3dvcmQpIG9uIGFjY291bnQKK1NFTEVDVCBwYXNz d29yZAorICBGUk9NIGFjY291bnQ7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFE LFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwiU0VMRUNUIHBhc3N3b3JkCisgIEZST00g YWNjb3VudDsiCisgcGFzc3dvcmQgCistLS0tLS0tLS0tCisgSEFTSDEKKygxIHJvdykKKwor LS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2Ny aXB0aW9uID0gJ3lhZGEsIHlhZGEnOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBv ZjoKKy0tIHVwZGF0ZSAocGFzc3dvcmQpIG9uIGFjY291bnQKK1VQREFURSBhY2NvdW50Cisg ICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwyLDEs V1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy5hY2NvdW50LCJVUERBVEUgYWNjb3VudAorICAg U0VUIHBhc3N3b3JkID0gJ0hBU0gyJzsiCistLQorLS0gQ2hhbmdlIHBlcm1pc3Npb25zIG9m IHVzZXIgMSBzbyB0aGF0IHNlc3Npb24gcmVsYXRpb24gbG9nZ2luZyB3aWxsIGJlIGRvbmUK K1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBz ZXQgcGdfYXVkaXQubG9nX3JlbGF0aW9uID0gb247CithbHRlciByb2xlIHVzZXIxIHNldCBw Z19hdWRpdC5sb2cgPSAncmVhZCwgV1JJVEUnOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNz aW9uIHVzZXIxCistLQorLS0gTm90IGxvZ2dlZAorY3JlYXRlIHRhYmxlIEFDQ09VTlRfUk9M RV9NQVAKKygKKwlhY2NvdW50X2lkIElOVCwKKwlyb2xlX2lkIElOVAorKTsKKy0tCistLSBB dWRpdG9yIGdyYW50cyBub3QgbG9nZ2VkCitHUkFOVCBTRUxFQ1QKKyAgIE9OIFRBQkxFIHB1 YmxpYy5hY2NvdW50X3JvbGVfbWFwCisgICBUTyBhdWRpdG9yOworLS0KKy0tIE9iamVjdCBs b2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAocGFzc3dvcmQpIG9uIGFjY291bnQKKy0t IHNlbGVjdCBvbiBhY2NvdW50X3JvbGVfbWFwCistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwg dGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1NFTEVD VCBhY2NvdW50LnBhc3N3b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBG Uk9NIGFjY291bnQKKwkgICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAKKwkJCW9uIGFj Y291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQ7CitOT1RJQ0U6ICBBVURJ VDogT0JKRUNULDEsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwiU0VMRUNU IGFjY291bnQucGFzc3dvcmQsCisJICAgYWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZS T00gYWNjb3VudAorCSAgIElOTkVSIEpPSU4gYWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNj b3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAuYWNjb3VudF9pZDsiCitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsIlNFTEVD VCBhY2NvdW50LnBhc3N3b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBG Uk9NIGFjY291bnQKKwkgICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAKKwkJCW9uIGFj Y291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQ7IgorTk9USUNFOiAgQVVE SVQ6IE9CSkVDVCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnRfcm9sZV9t YXAsIlNFTEVDVCBhY2NvdW50LnBhc3N3b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9s ZV9pZAorICBGUk9NIGFjY291bnQKKwkgICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAK KwkJCW9uIGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQ7IgorTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sMSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2Nv dW50X3JvbGVfbWFwLCJTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwKKwkgICBhY2NvdW50X3Jv bGVfbWFwLnJvbGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5ORVIgSk9JTiBhY2NvdW50 X3JvbGVfbWFwCisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50 X2lkOyIKKyBwYXNzd29yZCB8IHJvbGVfaWQgCistLS0tLS0tLS0tKy0tLS0tLS0tLQorKDAg cm93cykKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAo cGFzc3dvcmQpIG9uIGFjY291bnQKKy0tIFNlc3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMg YmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2dfcmVsYXRpb24gPSBvbgorU0VMRUNUIHBhc3N3 b3JkCisgIEZST00gYWNjb3VudDsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMiwxLFJFQUQs U0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50LCJTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBh Y2NvdW50OyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIsMSxSRUFELFNFTEVDVCxUQUJM RSxwdWJsaWMuYWNjb3VudCwiU0VMRUNUIHBhc3N3b3JkCisgIEZST00gYWNjb3VudDsiCisg cGFzc3dvcmQgCistLS0tLS0tLS0tCisgSEFTSDIKKygxIHJvdykKKworLS0KKy0tIE5vdCBv YmplY3QgbG9nZ2VkCistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2Ug bG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBT RVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYSc7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwzLDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy5hY2NvdW50LCJVUERBVEUgYWNjb3Vu dAorICAgU0VUIGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnOyIKKy0tCistLSBPYmplY3Qg bG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3QgKHBhc3N3b3JkKSBvbiBhY2NvdW50IChp biB0aGUgd2hlcmUgY2xhdXNlKQorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBi ZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitVUERBVEUgYWNjb3Vu dAorICAgU0VUIGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnCisgd2hlcmUgcGFzc3dvcmQg PSAnSEFTSDInOworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw0LDEsV1JJVEUsVVBEQVRFLFRB QkxFLHB1YmxpYy5hY2NvdW50LCJVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2NyaXB0aW9u ID0gJ3lhZGEsIHlhZGEnCisgd2hlcmUgcGFzc3dvcmQgPSAnSEFTSDInOyIKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDQsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQs IlVQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYScKKyB3 aGVyZSBwYXNzd29yZCA9ICdIQVNIMic7IgorLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVz ZSBvZjoKKy0tIHVwZGF0ZSAocGFzc3dvcmQpIG9uIGFjY291bnQKKy0tIFNlc3Npb24gbG9n Z2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2dfcmVsYXRpb24g PSBvbgorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBwYXNzd29yZCA9ICdIQVNIMic7CitOT1RJ Q0U6ICBBVURJVDogT0JKRUNULDUsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291 bnQsIlVQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOyIKK05PVElD RTogIEFVRElUOiBTRVNTSU9OLDUsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291 bnQsIlVQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOyIKKy0tCist LSBDaGFuZ2UgYmFjayB0byBzdXBlcnVzZXIgdG8gZG8gZXhoYXVzdGl2ZSB0ZXN0cworXGNv bm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVyCitTRVQgcGdfYXVkaXQubG9nID0gJ0FM TCc7CitTRVQgcGdfYXVkaXQubG9nX25vdGljZSA9IE9OOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMiwxLE1JU0MsU0VULCwsU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBPTjsKK1NF VCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBPTjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDMsMSxNSVNDLFNFVCwsLFNFVCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBPTjsKKy0tCist LSBTaW1wbGUgRE8gYmxvY2sKK0RPICQkCitCRUdJTgorCXJhaXNlIG5vdGljZSAndGVzdCc7 CitFTkQgJCQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0LDEsRlVOQ1RJT04sRE8sLCwi RE8gJCQKK0JFR0lOCisJcmFpc2Ugbm90aWNlICd0ZXN0JzsKK0VORCAkJDsiCitOT1RJQ0U6 ICB0ZXN0CistLQorLS0gQ3JlYXRlIHRlc3Qgc2NoZW1hCitDUkVBVEUgU0NIRU1BIHRlc3Q7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1LDEsRERMLENSRUFURSBTQ0hFTUEsLCxDUkVB VEUgU0NIRU1BIHRlc3Q7CistLQorLS0gQ29weSBwZ19jbGFzcyB0byBzdGRvdXQKK0NPUFkg YWNjb3VudCBUTyBzdGRvdXQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw2LDEsUkVBRCxT RUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsQ09QWSBhY2NvdW50IFRPIHN0ZG91dDsKKzEJ dXNlcjEJSEFTSDIJeWFkYSwgeWFkYQorLS0KKy0tIENyZWF0ZSBhIHRhYmxlIGZyb20gYSBx dWVyeQorQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3VudF9jb3B5IEFTCitTRUxFQ1QgKgorICBG Uk9NIGFjY291bnQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw3LDEsUkVBRCxTRUxFQ1Qs VEFCTEUscHVibGljLmFjY291bnQsIkNSRUFURSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBB UworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDcsMSxXUklURSxJTlNFUlQsVEFCTEUsdGVzdC5hY2NvdW50X2NvcHksIkNSRUFURSBUQUJM RSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OyIKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDcsMixEREwsQ1JFQVRFIFRBQkxFIEFTLCwsIkNSRUFU RSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50 OyIKKy0tCistLSBDb3B5IGZyb20gc3RkaW4gdG8gYWNjb3VudCBjb3B5CitDT1BZIHRlc3Qu YWNjb3VudF9jb3B5IGZyb20gc3RkaW47CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw4LDEs V1JJVEUsSU5TRVJULFRBQkxFLHRlc3QuYWNjb3VudF9jb3B5LENPUFkgdGVzdC5hY2NvdW50 X2NvcHkgZnJvbSBzdGRpbjsKKy0tCistLSBUZXN0IHByZXBhcmVkIHN0YXRlbWVudAorUFJF UEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50Cisg V0hFUkUgaWQgPSAkMTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDksMSxSRUFELFBSRVBB UkUsLCwiUFJFUEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworU0VMRUNUICoKKyAgRlJPTSBh Y2NvdW50CisgV0hFUkUgaWQgPSAkMTsiCitFWEVDVVRFIHBnY2xhc3NzdG10ICgxKTsKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDEwLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFj Y291bnQsIlBSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK1NFTEVDVCAqCisgIEZST00g YWNjb3VudAorIFdIRVJFIGlkID0gJDE7IiwxCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwx MCwyLFJFQUQsRVhFQ1VURSwsLEVYRUNVVEUgcGdjbGFzc3N0bXQgKDEpOworIGlkIHwgbmFt ZSAgfCBwYXNzd29yZCB8IGRlc2NyaXB0aW9uIAorLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLQorICAxIHwgdXNlcjEgfCBIQVNIMiAgICB8IHlhZGEsIHlhZGEKKygx IHJvdykKKworREVBTExPQ0FURSBwZ2NsYXNzc3RtdDsKK05PVElDRTogIEFVRElUOiBTRVNT SU9OLDExLDEsTUlTQyxERUFMTE9DQVRFLCwsREVBTExPQ0FURSBwZ2NsYXNzc3RtdDsKKy0t CistLSBUZXN0IGN1cnNvciAtIG5vIHRhYmxlcyB3aWxsIGJlIGxvZ2dlZCBzaW5jZSBwZ19j bGFzcyBpcyBhIHN5c3RlbSB0YWJsZQorQkVHSU47CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwxMiwxLE1JU0MsQkVHSU4sLCxCRUdJTjsKK0RFQ0xBUkUgY3Rlc3QgU0NST0xMIENVUlNP UiBGT1IKK1NFTEVDVCBjb3VudCgqKQorICBGUk9NCisoCisJU0VMRUNUIHJlbG5hbWUKKwkg IEZST00gcGdfY2xhc3MKKwkgTElNSVQgMQorICkgc3VicXVlcnk7CitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiwxMywxLFJFQUQsREVDTEFSRSBDVVJTT1IsLCwiREVDTEFSRSBjdGVzdCBT Q1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50KCopCisgIEZST00KKygKKwlTRUxFQ1Qg cmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBMSU1JVCAxCisgKSBzdWJxdWVyeTsiCitG RVRDSCBORVhUIEZST00gY3Rlc3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxNCwxLE1J U0MsRkVUQ0gsLCxGRVRDSCBORVhUIEZST00gY3Rlc3Q7CisgY291bnQgCistLS0tLS0tCisg ICAgIDEKKygxIHJvdykKKworQ0xPU0UgY3Rlc3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwxNSwxLE1JU0MsQ0xPU0UgQ1VSU09SLCwsQ0xPU0UgY3Rlc3Q7CitDT01NSVQ7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwxNiwxLE1JU0MsQ09NTUlULCwsQ09NTUlUOworLS0KKy0t IFRlc3QgcHJlcGFyZWQgaW5zZXJ0CitDUkVBVEUgVEFCTEUgdGVzdC50ZXN0X2luc2VydAor KAorCWlkIElOVAorKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE3LDEsRERMLENSRUFU RSBUQUJMRSxUQUJMRSx0ZXN0LnRlc3RfaW5zZXJ0LCJDUkVBVEUgVEFCTEUgdGVzdC50ZXN0 X2luc2VydAorKAorCWlkIElOVAorKTsiCitQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIEFT CitJTlNFUlQgSU5UTyB0ZXN0LnRlc3RfaW5zZXJ0IChpZCkKKwkJCQkJICBWQUxVRVMgKCQx KTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE4LDEsV1JJVEUsUFJFUEFSRSwsLCJQUkVQ QVJFIHBnY2xhc3NzdG10IChvaWQpIEFTCitJTlNFUlQgSU5UTyB0ZXN0LnRlc3RfaW5zZXJ0 IChpZCkKKwkJCQkJICBWQUxVRVMgKCQxKTsiCitFWEVDVVRFIHBnY2xhc3NzdG10ICgxKTsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE5LDEsV1JJVEUsSU5TRVJULFRBQkxFLHRlc3Qu dGVzdF9pbnNlcnQsIlBSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK0lOU0VSVCBJTlRP IHRlc3QudGVzdF9pbnNlcnQgKGlkKQorCQkJCQkgIFZBTFVFUyAoJDEpOyIsMQorTk9USUNF OiAgQVVESVQ6IFNFU1NJT04sMTksMixXUklURSxFWEVDVVRFLCwsRVhFQ1VURSBwZ2NsYXNz c3RtdCAoMSk7CistLQorLS0gQ2hlY2sgdGhhdCBwcmltYXJ5IGtleSBjcmVhdGlvbiBpcyBs b2dnZWQKK0NSRUFURSBUQUJMRSBwdWJsaWMudGVzdAorKAorCWlkIElOVCwKKwluYW1lIFRF WFQsCisJZGVzY3JpcHRpb24gVEVYVCwKKwlDT05TVFJBSU5UIHRlc3RfcGtleSBQUklNQVJZ IEtFWSAoaWQpCispOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjAsMSxEREwsQ1JFQVRF IElOREVYLElOREVYLHB1YmxpYy50ZXN0X3BrZXksIkNSRUFURSBUQUJMRSBwdWJsaWMudGVz dAorKAorCWlkIElOVCwKKwluYW1lIFRFWFQsCisJZGVzY3JpcHRpb24gVEVYVCwKKwlDT05T VFJBSU5UIHRlc3RfcGtleSBQUklNQVJZIEtFWSAoaWQpCispOyIKK05PVElDRTogIEFVRElU OiBTRVNTSU9OLDIwLDIsRERMLENSRUFURSBUQUJMRSxUQUJMRSxwdWJsaWMudGVzdCwiQ1JF QVRFIFRBQkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlkZXNj cmlwdGlvbiBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkK Kyk7IgorLS0KKy0tIENoZWNrIHRoYXQgYW5hbHl6ZSBpcyBsb2dnZWQKK0FOQUxZWkUgdGVz dDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIxLDEsTUlTQyxBTkFMWVpFLCwsQU5BTFla RSB0ZXN0OworLS0KKy0tIEdyYW50cyB0byBwdWJsaWMgc2hvdWxkIG5vdCBjYXVzZSBvYmpl Y3QgbG9nZ2luZyAoc2Vzc2lvbiBsb2dnaW5nIHdpbGwKKy0tIHN0aWxsIGhhcHBlbikKK0dS QU5UIFNFTEVDVAorICBPTiBUQUJMRSBwdWJsaWMudGVzdAorICBUTyBQVUJMSUM7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwyMiwxLFJPTEUsR1JBTlQsLCwiR1JBTlQgU0VMRUNUCisg IE9OIFRBQkxFIHB1YmxpYy50ZXN0CisgIFRPIFBVQkxJQzsiCitTRUxFQ1QgKgorICBGUk9N IHRlc3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyMywxLFJFQUQsU0VMRUNULFRBQkxF LHB1YmxpYy50ZXN0LCJTRUxFQ1QgKgorICBGUk9NIHRlc3Q7IgorIGlkIHwgbmFtZSB8IGRl c2NyaXB0aW9uIAorLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0g Q2hlY2sgdGhhdCBzdGF0ZW1lbnRzIHdpdGhvdXQgY29sdW1ucyBsb2cKK1NFTEVDVAorICBG Uk9NIHRlc3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNCwxLFJFQUQsU0VMRUNULFRB QkxFLHB1YmxpYy50ZXN0LCJTRUxFQ1QKKyAgRlJPTSB0ZXN0OyIKKy0tCisoMCByb3dzKQor CitTRUxFQ1QgMSwKKwkgICBjdXJyZW50X3VzZXI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwyNSwxLFJFQUQsU0VMRUNULCwsIlNFTEVDVCAxLAorCSAgIGN1cnJlbnRfdXNlcjsiCisg P2NvbHVtbj8gfCBjdXJyZW50X3VzZXIgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisg ICAgICAgIDEgfCBzdXBlcgorKDEgcm93KQorCitETyAkJAorREVDTEFSRQorCXRlc3QgSU5U OworQkVHSU4KKwlTRUxFQ1QgMQorCSAgSU5UTyB0ZXN0OworRU5EICQkOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sMjYsMSxGVU5DVElPTixETywsLCJETyAkJAorREVDTEFSRQorCXRl c3QgSU5UOworQkVHSU4KKwlTRUxFQ1QgMQorCSAgSU5UTyB0ZXN0OworRU5EICQkOyIKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDI2LDIsUkVBRCxTRUxFQ1QsLCxTRUxFQ1QgMQorQ09O VEVYVDogIFNRTCBzdGF0ZW1lbnQgIlNFTEVDVCAxIgorUEwvcGdTUUwgZnVuY3Rpb24gaW5s aW5lX2NvZGVfYmxvY2sgbGluZSA1IGF0IFNRTCBzdGF0ZW1lbnQKK2V4cGxhaW4gc2VsZWN0 IDE7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNywxLFJFQUQsU0VMRUNULCwsZXhwbGFp biBzZWxlY3QgMTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI3LDIsTUlTQyxFWFBMQUlO LCwsZXhwbGFpbiBzZWxlY3QgMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD0wKQorKDEgcm93KQor CistLQorLS0gVGVzdCB0aGF0IGxvb2tzIGluc2lkZSBvZiBkbyBibG9ja3MgbG9nCitJTlNF UlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDEpOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMjgsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3QsIklOU0VSVCBJTlRP IFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMSk7IgorSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJ CSAgVkFMVUVTICgyKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDEsV1JJVEUsSU5T RVJULFRBQkxFLHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxV RVMgKDIpOyIKK0lOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMyk7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwzMCwxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVz dCwiSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgzKTsiCitETyAkJAorREVD TEFSRQorCXJlc3VsdCBSRUNPUkQ7CitCRUdJTgorCUZPUiByZXN1bHQgSU4KKwkJU0VMRUNU IGlkCisJCSAgRlJPTSB0ZXN0CisJTE9PUAorCQlJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJ CSBWQUxVRVMgKHJlc3VsdC5pZCArIDEwMCk7CisJRU5EIExPT1A7CitFTkQgJCQ7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwzMSwxLEZVTkNUSU9OLERPLCwsIkRPICQkCitERUNMQVJF CisJcmVzdWx0IFJFQ09SRDsKK0JFR0lOCisJRk9SIHJlc3VsdCBJTgorCQlTRUxFQ1QgaWQK KwkJICBGUk9NIHRlc3QKKwlMT09QCisJCUlOU0VSVCBJTlRPIHRlc3QgKGlkKQorCQkJIFZB TFVFUyAocmVzdWx0LmlkICsgMTAwKTsKKwlFTkQgTE9PUDsKK0VORCAkJDsiCitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiwzMSwyLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy50ZXN0LCJT RUxFQ1QgaWQKKwkJICBGUk9NIHRlc3QiCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24g aW5saW5lX2NvZGVfYmxvY2sgbGluZSA1IGF0IEZPUiBvdmVyIFNFTEVDVCByb3dzCitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwzMSwzLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVz dCwiSU5TRVJUIElOVE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDAp IiwsLAorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIklOU0VSVCBJTlRPIHRlc3QgKGlkKQor CQkJIFZBTFVFUyAocmVzdWx0LmlkICsgMTAwKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGlu ZV9jb2RlX2Jsb2NrIGxpbmUgOSBhdCBTUUwgc3RhdGVtZW50CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiwzMSw0LFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdCwiSU5TRVJUIElO VE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIiwsLAorQ09OVEVY VDogIFNRTCBzdGF0ZW1lbnQgIklOU0VSVCBJTlRPIHRlc3QgKGlkKQorCQkJIFZBTFVFUyAo cmVzdWx0LmlkICsgMTAwKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2Nr IGxpbmUgOSBhdCBTUUwgc3RhdGVtZW50CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMSw1 LFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdCwiSU5TRVJUIElOVE8gdGVzdCAoaWQp CisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIiwsLAorQ09OVEVYVDogIFNRTCBzdGF0 ZW1lbnQgIklOU0VSVCBJTlRPIHRlc3QgKGlkKQorCQkJIFZBTFVFUyAocmVzdWx0LmlkICsg MTAwKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgOSBhdCBT UUwgc3RhdGVtZW50CistLQorLS0gVGVzdCBvYmZ1c2NhdGVkIGR5bmFtaWMgc3FsIGZvciBj bGVhbiBsb2dnaW5nCitETyAkJAorREVDTEFSRQorCXRhYmxlX25hbWUgVEVYVCA9ICdkb190 YWJsZSc7CitCRUdJTgorCUVYRUNVVEUgJ0NSRUFURSBUQUJMRSAnIHx8IHRhYmxlX25hbWUg fHwgJyAoIndlaXJkIG5hbWUiIElOVCknOworCUVYRUNVVEUgJ0RST1AgdGFibGUgJyB8fCB0 YWJsZV9uYW1lOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzIsMSxGVU5D VElPTixETywsLCJETyAkJAorREVDTEFSRQorCXRhYmxlX25hbWUgVEVYVCA9ICdkb190YWJs ZSc7CitCRUdJTgorCUVYRUNVVEUgJ0NSRUFURSBUQUJMRSAnIHx8IHRhYmxlX25hbWUgfHwg JyAoIiJ3ZWlyZCBuYW1lIiIgSU5UKSc7CisJRVhFQ1VURSAnRFJPUCB0YWJsZSAnIHx8IHRh YmxlX25hbWU7CitFTkQgJCQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzIsMixEREws Q1JFQVRFIFRBQkxFLFRBQkxFLHB1YmxpYy5kb190YWJsZSwiQ1JFQVRFIFRBQkxFIGRvX3Rh YmxlICgiIndlaXJkIG5hbWUiIiBJTlQpIgorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIkNS RUFURSBUQUJMRSBkb190YWJsZSAoIndlaXJkIG5hbWUiIElOVCkiCitQTC9wZ1NRTCBmdW5j dGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgRVhFQ1VURSBzdGF0ZW1lbnQKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDMyLDMsRERMLERST1AgVEFCTEUsVEFCTEUscHVibGlj LmRvX3RhYmxlLERST1AgdGFibGUgZG9fdGFibGUKK0NPTlRFWFQ6ICBTUUwgc3RhdGVtZW50 ICJEUk9QIHRhYmxlIGRvX3RhYmxlIgorUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVf YmxvY2sgbGluZSA2IGF0IEVYRUNVVEUgc3RhdGVtZW50CistLQorLS0gR2VuZXJhdGUgYW4g ZXJyb3IgYW5kIG1ha2Ugc3VyZSB0aGUgc3RhY2sgZ2V0cyBjbGVhcmVkCitETyAkJAorQkVH SU4KKwlDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jaworCSgKKwkJaWQgSU5UCisJKTsK K0VORCAkJDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMzLDEsRlVOQ1RJT04sRE8sLCwi RE8gJCQKK0JFR0lOCisJQ1JFQVRFIFRBQkxFIGJvZ3VzLnRlc3RfYmxvY2sKKwkoCisJCWlk IElOVAorCSk7CitFTkQgJCQ7IgorRVJST1I6ICBzY2hlbWEgImJvZ3VzIiBkb2VzIG5vdCBl eGlzdAorTElORSAxOiBDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jaworICAgICAgICAg ICAgICAgICAgICAgXgorUVVFUlk6ICBDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jawor CSgKKwkJaWQgSU5UCisJKQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9j b2RlX2Jsb2NrIGxpbmUgMyBhdCBTUUwgc3RhdGVtZW50CistLQorLS0gVGVzdCBhbHRlciB0 YWJsZSBzdGF0ZW1lbnRzCitBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAorCURST1AgQ09MVU1O IGRlc2NyaXB0aW9uIDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM0LDEsRERMLEFMVEVS IFRBQkxFLFRBQkxFIENPTFVNTixwdWJsaWMudGVzdC5kZXNjcmlwdGlvbiwiQUxURVIgVEFC TEUgcHVibGljLnRlc3QKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbiA7IgorQUxURVIgVEFC TEUgcHVibGljLnRlc3QKKwlSRU5BTUUgVE8gdGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiwzNSwxLERETCxBTFRFUiBUQUJMRSxUQUJMRSxwdWJsaWMudGVzdCwiQUxURVIgVEFC TEUgcHVibGljLnRlc3QKKwlSRU5BTUUgVE8gdGVzdDI7IgorQUxURVIgVEFCTEUgcHVibGlj LnRlc3QyCisJU0VUIFNDSEVNQSB0ZXN0OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzYs MSxEREwsQUxURVIgVEFCTEUsSU5ERVgscHVibGljLnRlc3RfcGtleSwiQUxURVIgVEFCTEUg cHVibGljLnRlc3QyCisJU0VUIFNDSEVNQSB0ZXN0OyIKK0FMVEVSIFRBQkxFIHRlc3QudGVz dDIKKwlBREQgQ09MVU1OIGRlc2NyaXB0aW9uIFRFWFQ7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiwzNywxLERETCxBTFRFUiBUQUJMRSxUQUJMRSx0ZXN0LnRlc3QyLCJBTFRFUiBUQUJM RSB0ZXN0LnRlc3QyCisJQUREIENPTFVNTiBkZXNjcmlwdGlvbiBURVhUOyIKK0FMVEVSIFRB QkxFIHRlc3QudGVzdDIKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbjsKK05PVElDRTogIEFV RElUOiBTRVNTSU9OLDM4LDEsRERMLEFMVEVSIFRBQkxFLFRBQkxFIENPTFVNTix0ZXN0LnRl c3QyLmRlc2NyaXB0aW9uLCJBTFRFUiBUQUJMRSB0ZXN0LnRlc3QyCisJRFJPUCBDT0xVTU4g ZGVzY3JpcHRpb247IgorRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMzksMSxEREwsRFJPUCBUQUJMRSxUQUJMRSx0ZXN0LnRlc3QyLERST1AgVEFC TEUgdGVzdC50ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM5LDEsRERMLERST1Ag VEFCTEUsVEFCTEUgQ09OU1RSQUlOVCx0ZXN0X3BrZXkgb24gdGVzdC50ZXN0MixEUk9QIFRB QkxFIHRlc3QudGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzOSwxLERETCxEUk9Q IFRBQkxFLElOREVYLHRlc3QudGVzdF9wa2V5LERST1AgVEFCTEUgdGVzdC50ZXN0MjsKKy0t CistLSBUZXN0IG11bHRpcGxlIHN0YXRlbWVudHMgd2l0aCBvbmUgc2VtaS1jb2xvbgorQ1JF QVRFIFNDSEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9vLmJhciAoaWQgaW50KQorCUNSRUFU RSBUQUJMRSBmb28uYmF6IChpZCBpbnQpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDAs MSxEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLGZvby5iYXIsIkNSRUFURSBTQ0hFTUEgZm9vCisJ Q1JFQVRFIFRBQkxFIGZvby5iYXIgKGlkIGludCkKKwlDUkVBVEUgVEFCTEUgZm9vLmJheiAo aWQgaW50KTsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MCwyLERETCxDUkVBVEUgVEFC TEUsVEFCTEUsZm9vLmJheiwiQ1JFQVRFIFNDSEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9v LmJhciAoaWQgaW50KQorCUNSRUFURSBUQUJMRSBmb28uYmF6IChpZCBpbnQpOyIKK05PVElD RTogIEFVRElUOiBTRVNTSU9OLDQwLDMsRERMLENSRUFURSBTQ0hFTUEsLCwiQ1JFQVRFIFND SEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9vLmJhciAoaWQgaW50KQorCUNSRUFURSBUQUJM RSBmb28uYmF6IChpZCBpbnQpOyIKKy0tCistLSBUZXN0IGFnZ3JlZ2F0ZQorQ1JFQVRFIEZV TkNUSU9OIHB1YmxpYy5pbnRfYWRkCisoCisJYSBJTlQsCisJYiBJTlQKKykKKwlSRVRVUk5T IElOVCBMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitCRUdJTgorCXJldHVybiBhICsgYjsKK0VO RCAkJDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQxLDEsRERMLENSRUFURSBGVU5DVElP TiwsLCJDUkVBVEUgRlVOQ1RJT04gcHVibGljLmludF9hZGQKKygKKwlhIElOVCwKKwliIElO VAorKQorCVJFVFVSTlMgSU5UIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lOCisJcmV0 dXJuIGEgKyBiOworRU5EICQkOyIKK1NFTEVDVCBpbnRfYWRkKDEsIDEpOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sNDIsMSxSRUFELFNFTEVDVCwsLCJTRUxFQ1QgaW50X2FkZCgxLCAx KTsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MiwyLEZVTkNUSU9OLEVYRUNVVEUsRlVO Q1RJT04scHVibGljLmludF9hZGQsIlNFTEVDVCBpbnRfYWRkKDEsIDEpOyIKKyBpbnRfYWRk IAorLS0tLS0tLS0tCisgICAgICAgMgorKDEgcm93KQorCitDUkVBVEUgQUdHUkVHQVRFIHB1 YmxpYy5zdW1fdGVzdChJTlQpIChTRlVOQz1wdWJsaWMuaW50X2FkZCwgU1RZUEU9SU5ULCBJ TklUQ09ORD0nMCcpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDMsMSxEREwsQ1JFQVRF IEFHR1JFR0FURSwsLCJDUkVBVEUgQUdHUkVHQVRFIHB1YmxpYy5zdW1fdGVzdChJTlQpIChT RlVOQz1wdWJsaWMuaW50X2FkZCwgU1RZUEU9SU5ULCBJTklUQ09ORD0nMCcpOyIKK0FMVEVS IEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoaW50ZWdlcikgUkVOQU1FIFRPIHN1bV90ZXN0 MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQ0LDEsRERMLEFMVEVSIEFHR1JFR0FURSws LEFMVEVSIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoaW50ZWdlcikgUkVOQU1FIFRPIHN1 bV90ZXN0MjsKKy0tCistLSBUZXN0IGNvbnZlcnNpb24KK0NSRUFURSBDT05WRVJTSU9OIHB1 YmxpYy5jb252ZXJzaW9uX3Rlc3QgRk9SICdTUUxfQVNDSUknIFRPICdNVUxFX0lOVEVSTkFM JyBGUk9NIHBnX2NhdGFsb2cuYXNjaWlfdG9fbWljOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sNDUsMSxEREwsQ1JFQVRFIENPTlZFUlNJT04sLCxDUkVBVEUgQ09OVkVSU0lPTiBwdWJs aWMuY29udmVyc2lvbl90ZXN0IEZPUiAnU1FMX0FTQ0lJJyBUTyAnTVVMRV9JTlRFUk5BTCcg RlJPTSBwZ19jYXRhbG9nLmFzY2lpX3RvX21pYzsKK0FMVEVSIENPTlZFUlNJT04gcHVibGlj LmNvbnZlcnNpb25fdGVzdCBSRU5BTUUgVE8gY29udmVyc2lvbl90ZXN0MjsKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDQ2LDEsRERMLEFMVEVSIENPTlZFUlNJT04sLCxBTFRFUiBDT05W RVJTSU9OIHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QgUkVOQU1FIFRPIGNvbnZlcnNpb25fdGVz dDI7CistLQorLS0gVGVzdCBjcmVhdGUvYWx0ZXIvZHJvcCBkYXRhYmFzZQorQ1JFQVRFIERB VEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0OworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sNDcsMSxEREwsQ1JFQVRFIERBVEFCQVNFLCwsQ1JFQVRFIERBVEFCQVNFIGNvbnRy aWJfcmVncmVzc2lvbl9wZ2F1ZGl0OworQUxURVIgREFUQUJBU0UgY29udHJpYl9yZWdyZXNz aW9uX3BnYXVkaXQgUkVOQU1FIFRPIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0MjsKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDQ4LDEsRERMLEFMVEVSIERBVEFCQVNFLCwsQUxURVIg REFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQgUkVOQU1FIFRPIGNvbnRyaWJf cmVncmVzc2lvbl9wZ2F1ZGl0MjsKK0RST1AgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9u X3BnYXVkaXQyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDksMSxEREwsRFJPUCBEQVRB QkFTRSwsLERST1AgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQyOworLS0K Ky0tIFRlc3QgdGhhdCBmcmVlcyBhIG1lbW9yeSBjb250ZXh0IGVhcmxpZXIgdGhhbiBleHBl Y3RlZAorQ1JFQVRFIFRBQkxFIGhvZ2UKKygKKwlpZCBpbnQKKyk7CitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiw1MCwxLERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGljLmhvZ2UsIkNS RUFURSBUQUJMRSBob2dlCisoCisJaWQgaW50CispOyIKK0NSRUFURSBGVU5DVElPTiB0ZXN0 KCkKKwlSRVRVUk5TIElOVCBBUyAkJAorREVDTEFSRQorCWN1cjEgY3Vyc29yIGZvciBzZWxl Y3QgKiBmcm9tIGhvZ2U7CisJdG1wIGludDsKK0JFR0lOCisJT1BFTiBjdXIxOworCUZFVENI IGN1cjEgaW50byB0bXA7CisJUkVUVVJOIHRtcDsKK0VORCAkJAorTEFOR1VBR0UgcGxwZ3Nx bCA7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1MSwxLERETCxDUkVBVEUgRlVOQ1RJT04s LCwiQ1JFQVRFIEZVTkNUSU9OIHRlc3QoKQorCVJFVFVSTlMgSU5UIEFTICQkCitERUNMQVJF CisJY3VyMSBjdXJzb3IgZm9yIHNlbGVjdCAqIGZyb20gaG9nZTsKKwl0bXAgaW50OworQkVH SU4KKwlPUEVOIGN1cjE7CisJRkVUQ0ggY3VyMSBpbnRvIHRtcDsKKwlSRVRVUk4gdG1wOwor RU5EICQkCitMQU5HVUFHRSBwbHBnc3FsIDsiCitTRUxFQ1QgdGVzdCgpOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sNTIsMSxSRUFELFNFTEVDVCwsLFNFTEVDVCB0ZXN0KCk7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiw1MiwyLEZVTkNUSU9OLEVYRUNVVEUsRlVOQ1RJT04scHVi bGljLnRlc3QsU0VMRUNUIHRlc3QoKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUyLDMs UkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmhvZ2Usc2VsZWN0ICogZnJvbSBob2dlCitDT05U RVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gdGVzdCgpIGxpbmUgNiBhdCBPUEVOCisgdGVzdCAK Ky0tLS0tLQorICAgICAKKygxIHJvdykKKworLS0KKy0tIERlbGV0ZSBhbGwgcm93cyB0aGVu IGRlbGV0ZSAxIHJvdworU0VUIHBnX2F1ZGl0LmxvZyA9ICd3cml0ZSc7CitTRVQgcGdfYXVk aXQucm9sZSA9ICdhdWRpdG9yJzsKK2NyZWF0ZSB0YWJsZSBiYXIKKygKKwljb2wgaW50Cisp OworZ3JhbnQgZGVsZXRlCisgICBvbiBiYXIKKyAgIHRvIGF1ZGl0b3I7CitpbnNlcnQgaW50 byBiYXIgKGNvbCkKKwkJIHZhbHVlcyAoMSk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1 MywxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMuYmFyLCJpbnNlcnQgaW50byBiYXIgKGNv bCkKKwkJIHZhbHVlcyAoMSk7IgorZGVsZXRlIGZyb20gYmFyOworTk9USUNFOiAgQVVESVQ6 IE9CSkVDVCw1NCwxLFdSSVRFLERFTEVURSxUQUJMRSxwdWJsaWMuYmFyLGRlbGV0ZSBmcm9t IGJhcjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDU0LDEsV1JJVEUsREVMRVRFLFRBQkxF LHB1YmxpYy5iYXIsZGVsZXRlIGZyb20gYmFyOworaW5zZXJ0IGludG8gYmFyIChjb2wpCisJ CSB2YWx1ZXMgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNTUsMSxXUklURSxJTlNF UlQsVEFCTEUscHVibGljLmJhciwiaW5zZXJ0IGludG8gYmFyIChjb2wpCisJCSB2YWx1ZXMg KDEpOyIKK2RlbGV0ZSBmcm9tIGJhcgorIHdoZXJlIGNvbCA9IDE7CitOT1RJQ0U6ICBBVURJ VDogT0JKRUNULDU2LDEsV1JJVEUsREVMRVRFLFRBQkxFLHB1YmxpYy5iYXIsImRlbGV0ZSBm cm9tIGJhcgorIHdoZXJlIGNvbCA9IDE7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNTYs MSxXUklURSxERUxFVEUsVEFCTEUscHVibGljLmJhciwiZGVsZXRlIGZyb20gYmFyCisgd2hl cmUgY29sID0gMTsiCitkcm9wIHRhYmxlIGJhcjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf YXVkaXQvZXhwZWN0ZWQvcGdfYXVkaXQub3V0IGIvY29udHJpYi9wZ19hdWRpdC9leHBlY3Rl ZC9wZ19hdWRpdC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2 NTFlYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvZXhwZWN0ZWQvcGdf YXVkaXQub3V0CkBAIC0wLDAgKzEsOTQyIEBACistLSBMb2FkIHBnX2F1ZGl0IG1vZHVsZQor Y3JlYXRlIGV4dGVuc2lvbiBwZ19hdWRpdDsKKy0tCistLSBDcmVhdGUgYSBzdXBlcnVzZXIg cm9sZSB0aGF0IHdlIGtub3cgdGhlIG5hbWUgb2YgZm9yIHRlc3RpbmcKK0NSRUFURSBVU0VS IHN1cGVyIFNVUEVSVVNFUjsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcjsK Ky0tCistLSBDcmVhdGUgYXVkaXRvciByb2xlCitDUkVBVEUgUk9MRSBhdWRpdG9yOworLS0K Ky0tIENyZWF0ZSBmaXJzdCB0ZXN0IHVzZXIKK0NSRUFURSBVU0VSIHVzZXIxOworQUxURVIg Uk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQubG9nID0gJ2RkbCwgUk9MRSc7CitBTFRFUiBST0xF IHVzZXIxIFNFVCBwZ19hdWRpdC5sb2dfbm90aWNlID0gb247CistLQorLS0gQ3JlYXRlLCBz ZWxlY3QsIGRyb3AgKHNlbGVjdCB3aWxsIG5vdCBiZSBhdWRpdGVkKQorXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHVzZXIxCitDUkVBVEUgVEFCTEUgcHVibGljLnRlc3QgKGlkIElO VCk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsRERMLENSRUFURSBUQUJMRSxUQUJM RSxwdWJsaWMudGVzdCxDUkVBVEUgVEFCTEUgcHVibGljLnRlc3QgKGlkIElOVCk7CitTRUxF Q1QgKiBGUk9NIHRlc3Q7CisgaWQgCistLS0tCisoMCByb3dzKQorCitEUk9QIFRBQkxFIHRl c3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsRERMLERST1AgVEFCTEUsVEFCTEUs cHVibGljLnRlc3QsRFJPUCBUQUJMRSB0ZXN0OworLS0KKy0tIENyZWF0ZSBzZWNvbmQgdGVz dCB1c2VyCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKK0NSRUFURSBVU0VS IHVzZXIyOworQUxURVIgUk9MRSB1c2VyMiBTRVQgcGdfYXVkaXQubG9nID0gJ1JlYWQsIHdy aXRFJzsKK0FMVEVSIFJPTEUgdXNlcjIgU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBvbjsK K0FMVEVSIFJPTEUgdXNlcjIgU0VUIHBnX2F1ZGl0LnJvbGUgPSBhdWRpdG9yOworXGNvbm5l Y3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIyCitDUkVBVEUgVEFCTEUgdGVzdDIgKGlkIElO VCk7CitHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVibGljLnRlc3QyIFRPIGF1ZGl0b3I7Cist LQorLS0gUm9sZS1iYXNlZCB0ZXN0cworQ1JFQVRFIFRBQkxFIHRlc3QzCisoCisJaWQgSU5U CispOworU0VMRUNUIGNvdW50KCopCisgIEZST00KKygKKwlTRUxFQ1QgcmVsbmFtZQorCSAg RlJPTSBwZ19jbGFzcworCSAgTElNSVQgMQorKSBTVUJRVUVSWTsKKyBjb3VudCAKKy0tLS0t LS0KKyAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgKgorICBGUk9NIHRlc3QzLCB0ZXN0MjsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxSRUFELFNFTEVDVCwsLCJTRUxFQ1QgKgor ICBGUk9NIHRlc3QzLCB0ZXN0MjsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFE LFNFTEVDVCxUQUJMRSxwdWJsaWMudGVzdDIsIlNFTEVDVCAqCisgIEZST00gdGVzdDMsIHRl c3QyOyIKKyBpZCB8IGlkIAorLS0tLSstLS0tCisoMCByb3dzKQorCitHUkFOVCBJTlNFUlQK KyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0MworICAgVE8gYXVkaXRvcjsKKy0tCistLSBDcmVh dGUgYSB2aWV3IHRvIHRlc3QgbG9nZ2luZworQ1JFQVRFIFZJRVcgdndfdGVzdDMgQVMKK1NF TEVDVCAqCisgIEZST00gdGVzdDM7CitHUkFOVCBTRUxFQ1QKKyAgIE9OIHZ3X3Rlc3QzCisg ICBUTyBhdWRpdG9yOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNl bGVjdCBvbiB2d190ZXN0MworLS0gc2VsZWN0IG9uIHRlc3QyCitTRUxFQ1QgKgorICBGUk9N IHZ3X3Rlc3QzLCB0ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIsMSxSRUFELFNF TEVDVCwsLCJTRUxFQ1QgKgorICBGUk9NIHZ3X3Rlc3QzLCB0ZXN0MjsiCitOT1RJQ0U6ICBB VURJVDogT0JKRUNULDIsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMudGVzdDIsIlNFTEVD VCAqCisgIEZST00gdndfdGVzdDMsIHRlc3QyOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1Qs MiwxLFJFQUQsU0VMRUNULFZJRVcscHVibGljLnZ3X3Rlc3QzLCJTRUxFQ1QgKgorICBGUk9N IHZ3X3Rlc3QzLCB0ZXN0MjsiCisgaWQgfCBpZCAKKy0tLS0rLS0tLQorKDAgcm93cykKKwor LS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0ZXN0Mwor LS0gc2VsZWN0IG9uIHRlc3QyCitXSVRIIENURSBBUworKAorCVNFTEVDVCBpZAorCSAgRlJP TSB0ZXN0MgorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMsMSxXUklURSxJTlNFUlQsLCwiV0lUSCBDVEUg QVMKKygKKwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRPIHRlc3Qz CitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwzLDEs V1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0MywiV0lUSCBDVEUgQVMKKygKKwlTRUxF Q1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQK KyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwzLDEsUkVBRCxTRUxFQ1Qs VEFCTEUscHVibGljLnRlc3QyLCJXSVRIIENURSBBUworKAorCVNFTEVDVCBpZAorCSAgRlJP TSB0ZXN0MgorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsi CistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0IG9uIHRlc3Qz CitXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QzIFZBTFVFUyAoMSkKKwkJCQkg ICBSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRlc3QyCitTRUxFQ1QgaWQKKyAgRlJP TSBjdGU7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0LDEsV1JJVEUsSU5TRVJULCwsIldJ VEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8gdGVzdDMgVkFMVUVTICgxKQorCQkJCSAgIFJF VFVSTklORyBpZAorKQorSU5TRVJUIElOVE8gdGVzdDIKK1NFTEVDVCBpZAorICBGUk9NIGN0 ZTsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDQsMSxXUklURSxJTlNFUlQsVEFCTEUscHVi bGljLnRlc3QzLCJXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QzIFZBTFVFUyAo MSkKKwkJCQkgICBSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRlc3QyCitTRUxFQ1Qg aWQKKyAgRlJPTSBjdGU7IgorR1JBTlQgVVBEQVRFIE9OIFRBQkxFIHB1YmxpYy50ZXN0MiBU TyBhdWRpdG9yOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIGluc2Vy dCBvbiB0ZXN0MworLS0gdXBkYXRlIG9uIHRlc3QyCitXSVRIIENURSBBUworKAorCVVQREFU RSB0ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRP IHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP Tiw1LDEsV1JJVEUsSU5TRVJULCwsIldJVEggQ1RFIEFTCisoCisJVVBEQVRFIHRlc3QyCisJ ICAgU0VUIGlkID0gMQorCVJFVFVSTklORyBpZAorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NF TEVDVCBpZAorICBGUk9NIGN0ZTsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDUsMSxXUklU RSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3QzLCJXSVRIIENURSBBUworKAorCVVQREFURSB0 ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRl c3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw1 LDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy50ZXN0MiwiV0lUSCBDVEUgQVMKKygKKwlV UERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAxCisJUkVUVVJOSU5HIGlkCispCitJTlNFUlQg SU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKKy0tCistLSBPYmplY3QgbG9n Z2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDIKK1dJVEggQ1RFIEFTCisoCisJ SU5TRVJUIElOVE8gdGVzdDIgVkFMVUVTICgxKQorCQkJCSAgIFJFVFVSTklORyBpZAorKQor VVBEQVRFIHRlc3QzCisgICBTRVQgaWQgPSBjdGUuaWQKKyAgRlJPTSBjdGUKKyBXSEVSRSB0 ZXN0My5pZCA8PiBjdGUuaWQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw2LDEsV1JJVEUs VVBEQVRFLCwsIldJVEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8gdGVzdDIgVkFMVUVTICgx KQorCQkJCSAgIFJFVFVSTklORyBpZAorKQorVVBEQVRFIHRlc3QzCisgICBTRVQgaWQgPSBj dGUuaWQKKyAgRlJPTSBjdGUKKyBXSEVSRSB0ZXN0My5pZCA8PiBjdGUuaWQ7IgorTk9USUNF OiAgQVVESVQ6IE9CSkVDVCw2LDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0Miwi V0lUSCBDVEUgQVMKKygKKwlJTlNFUlQgSU5UTyB0ZXN0MiBWQUxVRVMgKDEpCisJCQkJICAg UkVUVVJOSU5HIGlkCispCitVUERBVEUgdGVzdDMKKyAgIFNFVCBpZCA9IGN0ZS5pZAorICBG Uk9NIGN0ZQorIFdIRVJFIHRlc3QzLmlkIDw+IGN0ZS5pZDsiCistLQorLS0gQ2hhbmdlIHBl cm1pc3Npb25zIG9mIHVzZXIgMiBzbyB0aGF0IG9ubHkgb2JqZWN0IGxvZ2dpbmcgd2lsbCBi ZSBkb25lCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKK2FsdGVyIHJvbGUg dXNlcjIgc2V0IHBnX2F1ZGl0LmxvZyA9ICdOT05FJzsKK1xjb25uZWN0IGNvbnRyaWJfcmVn cmVzc2lvbiB1c2VyMgorLS0KKy0tIENyZWF0ZSB0ZXN0NCBhbmQgYWRkIHBlcm1pc3Npb25z CitDUkVBVEUgVEFCTEUgdGVzdDQKKygKKwlpZCBpbnQsCisJbmFtZSB0ZXh0CispOworR1JB TlQgU0VMRUNUIChuYW1lKQorICAgT04gVEFCTEUgcHVibGljLnRlc3Q0CisgICBUTyBhdWRp dG9yOworR1JBTlQgVVBEQVRFIChpZCkKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0NAorICAg VE8gYXVkaXRvcjsKK0dSQU5UIGluc2VydCAobmFtZSkKKyAgIE9OIFRBQkxFIHB1YmxpYy50 ZXN0NAorICAgVE8gYXVkaXRvcjsKKy0tCistLSBOb3Qgb2JqZWN0IGxvZ2dlZAorU0VMRUNU IGlkCisgIEZST00gcHVibGljLnRlc3Q0OworIGlkIAorLS0tLQorKDAgcm93cykKKworLS0K Ky0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAobmFtZSkgb24gdGVz dDQKK1NFTEVDVCBuYW1lCisgIEZST00gcHVibGljLnRlc3Q0OworTk9USUNFOiAgQVVESVQ6 IE9CSkVDVCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3Q0LCJTRUxFQ1QgbmFt ZQorICBGUk9NIHB1YmxpYy50ZXN0NDsiCisgbmFtZSAKKy0tLS0tLQorKDAgcm93cykKKwor LS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitJTlNFUlQgSU5UTyBwdWJsaWMudGVzdDQgKGlk KQorCQkJCSAgVkFMVUVTICgxKTsKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6 CistLSBpbnNlcnQgKG5hbWUpIG9uIHRlc3Q0CitJTlNFUlQgSU5UTyBwdWJsaWMudGVzdDQg KG5hbWUpCisJCQkJICBWQUxVRVMgKCd0ZXN0Jyk7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNU LDIsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3Q0LCJJTlNFUlQgSU5UTyBwdWJs aWMudGVzdDQgKG5hbWUpCisJCQkJICBWQUxVRVMgKCd0ZXN0Jyk7IgorLS0KKy0tIE5vdCBv YmplY3QgbG9nZ2VkCitVUERBVEUgcHVibGljLnRlc3Q0CisgICBTRVQgbmFtZSA9ICdmb28n OworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAoaWQpIG9u IHRlc3Q0CitVUERBVEUgcHVibGljLnRlc3Q0CisgICBTRVQgaWQgPSAxOworTk9USUNFOiAg QVVESVQ6IE9CSkVDVCwzLDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy50ZXN0NCwiVVBE QVRFIHB1YmxpYy50ZXN0NAorICAgU0VUIGlkID0gMTsiCistLQorLS0gT2JqZWN0IGxvZ2dl ZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChuYW1lKSBvbiB0ZXN0NAorLS0gdXBkYXRlIChu YW1lKSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgc2VsZWN0IChuYW1lKSBkdWUgdG8gb3JkZXJp bmcKK3VwZGF0ZSBwdWJsaWMudGVzdDQgc2V0IG5hbWUgPSAnZm9vJyB3aGVyZSBuYW1lID0g J2Jhcic7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDQsMSxXUklURSxVUERBVEUsVEFCTEUs cHVibGljLnRlc3Q0LHVwZGF0ZSBwdWJsaWMudGVzdDQgc2V0IG5hbWUgPSAnZm9vJyB3aGVy ZSBuYW1lID0gJ2Jhcic7CistLQorLS0gRHJvcCB0ZXN0IHRhYmxlcworRFJPUCBUQUJMRSB0 ZXN0MjsKK0RST1AgVklFVyB2d190ZXN0MzsKK0RST1AgVEFCTEUgdGVzdDM7CitEUk9QIFRB QkxFIHRlc3Q0OworLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEgc28gdGhh dCBzZXNzaW9uIGxvZ2dpbmcgd2lsbCBiZSBkb25lCitcY29ubmVjdCBjb250cmliX3JlZ3Jl c3Npb24gc3VwZXIKK2FsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZyA9ICdEREws IFJFQUQnOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIxCistLQorLS0gQ3Jl YXRlIHRhYmxlIGlzIHNlc3Npb24gbG9nZ2VkCitDUkVBVEUgVEFCTEUgcHVibGljLmFjY291 bnQKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCXBhc3N3b3JkIFRFWFQsCisJZGVzY3Jp cHRpb24gVEVYVAorKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxEREwsQ1JFQVRF IFRBQkxFLFRBQkxFLHB1YmxpYy5hY2NvdW50LCJDUkVBVEUgVEFCTEUgcHVibGljLmFjY291 bnQKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCXBhc3N3b3JkIFRFWFQsCisJZGVzY3Jp cHRpb24gVEVYVAorKTsiCistLQorLS0gU2VsZWN0IGlzIHNlc3Npb24gbG9nZ2VkCitTRUxF Q1QgKgorICBGUk9NIGFjY291bnQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsUkVB RCxTRUxFQ1QsLCwiU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OyIKKyBpZCB8IG5hbWUgfCBw YXNzd29yZCB8IGRlc2NyaXB0aW9uIAorLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tCisoMCByb3dzKQorCistLQorLS0gSW5zZXJ0IGlzIG5vdCBsb2dnZWQKK0lOU0VS VCBJTlRPIGFjY291bnQgKGlkLCBuYW1lLCBwYXNzd29yZCwgZGVzY3JpcHRpb24pCisJCQkg VkFMVUVTICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxhaCcpOworLS0KKy0tIENo YW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEgc28gdGhhdCBvbmx5IG9iamVjdCBsb2dnaW5n IHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVyCithbHRl ciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAnbm9uZSc7CithbHRlciByb2xlIHVz ZXIxIHNldCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0b3InOworXGNvbm5lY3QgY29udHJpYl9y ZWdyZXNzaW9uIHVzZXIxCistLQorLS0gQXVkaXRvciBncmFudHMgbm90IGxvZ2dlZAorR1JB TlQgU0VMRUNUIChwYXNzd29yZCksCisJICBVUERBVEUgKG5hbWUsIHBhc3N3b3JkKQorICAg T04gVEFCTEUgcHVibGljLmFjY291bnQKKyAgIFRPIGF1ZGl0b3I7CistLQorLS0gTm90IG9i amVjdCBsb2dnZWQKK1NFTEVDVCBpZCwKKwkgICBuYW1lCisgIEZST00gYWNjb3VudDsKKyBp ZCB8IG5hbWUgIAorLS0tLSstLS0tLS0tCisgIDEgfCB1c2VyMQorKDEgcm93KQorCistLQor LS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChwYXNzd29yZCkgb24g YWNjb3VudAorU0VMRUNUIHBhc3N3b3JkCisgIEZST00gYWNjb3VudDsKK05PVElDRTogIEFV RElUOiBPQkpFQ1QsMSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50LCJTRUxF Q1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OyIKKyBwYXNzd29yZCAKKy0tLS0tLS0tLS0K KyBIQVNIMQorKDEgcm93KQorCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1VQREFURSBh Y2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYSc7CistLQorLS0gT2Jq ZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChwYXNzd29yZCkgb24gYWNjb3Vu dAorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBwYXNzd29yZCA9ICdIQVNIMic7CitOT1RJQ0U6 ICBBVURJVDogT0JKRUNULDIsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQs IlVQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOyIKKy0tCistLSBD aGFuZ2UgcGVybWlzc2lvbnMgb2YgdXNlciAxIHNvIHRoYXQgc2Vzc2lvbiByZWxhdGlvbiBs b2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVy CithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBvbjsKK2Fs dGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZyA9ICdyZWFkLCBXUklURSc7CitcY29u bmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjEKKy0tCistLSBOb3QgbG9nZ2VkCitjcmVh dGUgdGFibGUgQUNDT1VOVF9ST0xFX01BUAorKAorCWFjY291bnRfaWQgSU5ULAorCXJvbGVf aWQgSU5UCispOworLS0KKy0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBsb2dnZWQKK0dSQU5UIFNF TEVDVAorICAgT04gVEFCTEUgcHVibGljLmFjY291bnRfcm9sZV9tYXAKKyAgIFRPIGF1ZGl0 b3I7CistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChwYXNz d29yZCkgb24gYWNjb3VudAorLS0gc2VsZWN0IG9uIGFjY291bnRfcm9sZV9tYXAKKy0tIFNl c3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2df cmVsYXRpb24gPSBvbgorU0VMRUNUIGFjY291bnQucGFzc3dvcmQsCisJICAgYWNjb3VudF9y b2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElOTkVSIEpPSU4gYWNjb3Vu dF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAuYWNjb3Vu dF9pZDsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1 YmxpYy5hY2NvdW50LCJTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwKKwkgICBhY2NvdW50X3Jv bGVfbWFwLnJvbGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5ORVIgSk9JTiBhY2NvdW50 X3JvbGVfbWFwCisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50 X2lkOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxSRUFELFNFTEVDVCxUQUJMRSxw dWJsaWMuYWNjb3VudCwiU0VMRUNUIGFjY291bnQucGFzc3dvcmQsCisJICAgYWNjb3VudF9y b2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElOTkVSIEpPSU4gYWNjb3Vu dF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAuYWNjb3Vu dF9pZDsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFELFNFTEVDVCxUQUJMRSxw dWJsaWMuYWNjb3VudF9yb2xlX21hcCwiU0VMRUNUIGFjY291bnQucGFzc3dvcmQsCisJICAg YWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElOTkVSIEpP SU4gYWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9t YXAuYWNjb3VudF9pZDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsUkVBRCxTRUxF Q1QsVEFCTEUscHVibGljLmFjY291bnRfcm9sZV9tYXAsIlNFTEVDVCBhY2NvdW50LnBhc3N3 b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBGUk9NIGFjY291bnQKKwkg ICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAKKwkJCW9uIGFjY291bnQuaWQgPSBhY2Nv dW50X3JvbGVfbWFwLmFjY291bnRfaWQ7IgorIHBhc3N3b3JkIHwgcm9sZV9pZCAKKy0tLS0t LS0tLS0rLS0tLS0tLS0tCisoMCByb3dzKQorCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNh dXNlIG9mOgorLS0gc2VsZWN0IChwYXNzd29yZCkgb24gYWNjb3VudAorLS0gU2Vzc2lvbiBs b2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlv biA9IG9uCitTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OworTk9USUNFOiAgQVVE SVQ6IE9CSkVDVCwyLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsIlNFTEVD VCBwYXNzd29yZAorICBGUk9NIGFjY291bnQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s MiwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50LCJTRUxFQ1QgcGFzc3dvcmQK KyAgRlJPTSBhY2NvdW50OyIKKyBwYXNzd29yZCAKKy0tLS0tLS0tLS0KKyBIQVNIMgorKDEg cm93KQorCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKKy0tIFNlc3Npb24gbG9nZ2VkIG9u IGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2dfcmVsYXRpb24gPSBvbgor VVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJzsKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDMsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFj Y291bnQsIlVQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFk YSc7IgorLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAocGFz c3dvcmQpIG9uIGFjY291bnQgKGluIHRoZSB3aGVyZSBjbGF1c2UpCistLSBTZXNzaW9uIGxv Z2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9u ID0gb24KK1VQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFk YScKKyB3aGVyZSBwYXNzd29yZCA9ICdIQVNIMic7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNU LDQsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQsIlVQREFURSBhY2NvdW50 CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYScKKyB3aGVyZSBwYXNzd29yZCA9 ICdIQVNIMic7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNCwxLFdSSVRFLFVQREFURSxU QUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNjcmlwdGlv biA9ICd5YWRhLCB5YWRhJworIHdoZXJlIHBhc3N3b3JkID0gJ0hBU0gyJzsiCistLQorLS0g T2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChwYXNzd29yZCkgb24gYWNj b3VudAorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJl YWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitVUERBVEUgYWNjb3VudAorICAgU0VUIHBhc3N3 b3JkID0gJ0hBU0gyJzsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNSwxLFdSSVRFLFVQREFU RSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQKKyAgIFNFVCBwYXNzd29y ZCA9ICdIQVNIMic7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNSwxLFdSSVRFLFVQREFU RSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQKKyAgIFNFVCBwYXNzd29y ZCA9ICdIQVNIMic7IgorLS0KKy0tIENoYW5nZSBiYWNrIHRvIHN1cGVydXNlciB0byBkbyBl eGhhdXN0aXZlIHRlc3RzCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKK1NF VCBwZ19hdWRpdC5sb2cgPSAnQUxMJzsKK1NFVCBwZ19hdWRpdC5sb2dfbm90aWNlID0gT047 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsTUlTQyxTRVQsLCxTRVQgcGdfYXVkaXQu bG9nX25vdGljZSA9IE9OOworU0VUIHBnX2F1ZGl0LmxvZ19yZWxhdGlvbiA9IE9OOworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sMywxLE1JU0MsU0VULCwsU0VUIHBnX2F1ZGl0LmxvZ19y ZWxhdGlvbiA9IE9OOworLS0KKy0tIFNpbXBsZSBETyBibG9jaworRE8gJCQKK0JFR0lOCisJ cmFpc2Ugbm90aWNlICd0ZXN0JzsKK0VORCAkJDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDQsMSxGVU5DVElPTixETywsLCJETyAkJAorQkVHSU4KKwlyYWlzZSBub3RpY2UgJ3Rlc3Qn OworRU5EICQkOyIKK05PVElDRTogIHRlc3QKKy0tCistLSBDcmVhdGUgdGVzdCBzY2hlbWEK K0NSRUFURSBTQ0hFTUEgdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUsMSxEREws Q1JFQVRFIFNDSEVNQSwsLENSRUFURSBTQ0hFTUEgdGVzdDsKKy0tCistLSBDb3B5IHBnX2Ns YXNzIHRvIHN0ZG91dAorQ09QWSBhY2NvdW50IFRPIHN0ZG91dDsKK05PVElDRTogIEFVRElU OiBTRVNTSU9OLDYsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCxDT1BZIGFj Y291bnQgVE8gc3Rkb3V0OworMQl1c2VyMQlIQVNIMgl5YWRhLCB5YWRhCistLQorLS0gQ3Jl YXRlIGEgdGFibGUgZnJvbSBhIHF1ZXJ5CitDUkVBVEUgVEFCTEUgdGVzdC5hY2NvdW50X2Nv cHkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudDsKK05PVElDRTogIEFVRElUOiBTRVNT SU9OLDcsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwiQ1JFQVRFIFRBQkxF IHRlc3QuYWNjb3VudF9jb3B5IEFTCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQ7IgorTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sNywxLFdSSVRFLElOU0VSVCxUQUJMRSx0ZXN0LmFjY291 bnRfY29weSwiQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3VudF9jb3B5IEFTCitTRUxFQ1QgKgor ICBGUk9NIGFjY291bnQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNywyLERETCxDUkVB VEUgVEFCTEUgQVMsLCwiQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3VudF9jb3B5IEFTCitTRUxF Q1QgKgorICBGUk9NIGFjY291bnQ7IgorLS0KKy0tIENvcHkgZnJvbSBzdGRpbiB0byBhY2Nv dW50IGNvcHkKK0NPUFkgdGVzdC5hY2NvdW50X2NvcHkgZnJvbSBzdGRpbjsKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDgsMSxXUklURSxJTlNFUlQsVEFCTEUsdGVzdC5hY2NvdW50X2Nv cHksQ09QWSB0ZXN0LmFjY291bnRfY29weSBmcm9tIHN0ZGluOworLS0KKy0tIFRlc3QgcHJl cGFyZWQgc3RhdGVtZW50CitQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIEFTCitTRUxFQ1Qg KgorICBGUk9NIGFjY291bnQKKyBXSEVSRSBpZCA9ICQxOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sOSwxLFJFQUQsUFJFUEFSRSwsLCJQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIEFT CitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQKKyBXSEVSRSBpZCA9ICQxOyIKK0VYRUNVVEUg cGdjbGFzc3N0bXQgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTAsMSxSRUFELFNF TEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwiUFJFUEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBB UworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50CisgV0hFUkUgaWQgPSAkMTsiLDEKK05PVElD RTogIEFVRElUOiBTRVNTSU9OLDEwLDIsUkVBRCxFWEVDVVRFLCwsRVhFQ1VURSBwZ2NsYXNz c3RtdCAoMSk7CisgaWQgfCBuYW1lICB8IHBhc3N3b3JkIHwgZGVzY3JpcHRpb24gCistLS0t Ky0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgIDEgfCB1c2VyMSB8IEhBU0gy ICAgIHwgeWFkYSwgeWFkYQorKDEgcm93KQorCitERUFMTE9DQVRFIHBnY2xhc3NzdG10Owor Tk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTEsMSxNSVNDLERFQUxMT0NBVEUsLCxERUFMTE9D QVRFIHBnY2xhc3NzdG10OworLS0KKy0tIFRlc3QgY3Vyc29yIC0gbm8gdGFibGVzIHdpbGwg YmUgbG9nZ2VkIHNpbmNlIHBnX2NsYXNzIGlzIGEgc3lzdGVtIHRhYmxlCitCRUdJTjsKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDEyLDEsTUlTQyxCRUdJTiwsLEJFR0lOOworREVDTEFS RSBjdGVzdCBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50KCopCisgIEZST00KKygK KwlTRUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBMSU1JVCAxCisgKSBzdWJx dWVyeTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEzLDEsUkVBRCxERUNMQVJFIENVUlNP UiwsLCJERUNMQVJFIGN0ZXN0IFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgY291bnQoKikK KyAgRlJPTQorKAorCVNFTEVDVCByZWxuYW1lCisJICBGUk9NIHBnX2NsYXNzCisJIExJTUlU IDEKKyApIHN1YnF1ZXJ5OyIKK0ZFVENIIE5FWFQgRlJPTSBjdGVzdDsKK05PVElDRTogIEFV RElUOiBTRVNTSU9OLDE0LDEsTUlTQyxGRVRDSCwsLEZFVENIIE5FWFQgRlJPTSBjdGVzdDsK KyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCitDTE9TRSBjdGVzdDsKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDE1LDEsTUlTQyxDTE9TRSBDVVJTT1IsLCxDTE9TRSBj dGVzdDsKK0NPTU1JVDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE2LDEsTUlTQyxDT01N SVQsLCxDT01NSVQ7CistLQorLS0gVGVzdCBwcmVwYXJlZCBpbnNlcnQKK0NSRUFURSBUQUJM RSB0ZXN0LnRlc3RfaW5zZXJ0CisoCisJaWQgSU5UCispOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMTcsMSxEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLHRlc3QudGVzdF9pbnNlcnQsIkNS RUFURSBUQUJMRSB0ZXN0LnRlc3RfaW5zZXJ0CisoCisJaWQgSU5UCispOyIKK1BSRVBBUkUg cGdjbGFzc3N0bXQgKG9pZCkgQVMKK0lOU0VSVCBJTlRPIHRlc3QudGVzdF9pbnNlcnQgKGlk KQorCQkJCQkgIFZBTFVFUyAoJDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTgsMSxX UklURSxQUkVQQVJFLCwsIlBSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK0lOU0VSVCBJ TlRPIHRlc3QudGVzdF9pbnNlcnQgKGlkKQorCQkJCQkgIFZBTFVFUyAoJDEpOyIKK0VYRUNV VEUgcGdjbGFzc3N0bXQgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTksMSxXUklU RSxJTlNFUlQsVEFCTEUsdGVzdC50ZXN0X2luc2VydCwiUFJFUEFSRSBwZ2NsYXNzc3RtdCAo b2lkKSBBUworSU5TRVJUIElOVE8gdGVzdC50ZXN0X2luc2VydCAoaWQpCisJCQkJCSAgVkFM VUVTICgkMSk7IiwxCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxOSwyLFdSSVRFLEVYRUNV VEUsLCxFWEVDVVRFIHBnY2xhc3NzdG10ICgxKTsKKy0tCistLSBDaGVjayB0aGF0IHByaW1h cnkga2V5IGNyZWF0aW9uIGlzIGxvZ2dlZAorQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0Ciso CisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlkZXNjcmlwdGlvbiBURVhULAorCUNPTlNUUkFJ TlQgdGVzdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkKKyk7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiwyMCwxLERETCxDUkVBVEUgSU5ERVgsSU5ERVgscHVibGljLnRlc3RfcGtleSwiQ1JF QVRFIFRBQkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlkZXNj cmlwdGlvbiBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkK Kyk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjAsMixEREwsQ1JFQVRFIFRBQkxFLFRB QkxFLHB1YmxpYy50ZXN0LCJDUkVBVEUgVEFCTEUgcHVibGljLnRlc3QKKygKKwlpZCBJTlQs CisJbmFtZSBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQsCisJQ09OU1RSQUlOVCB0ZXN0X3Br ZXkgUFJJTUFSWSBLRVkgKGlkKQorKTsiCistLQorLS0gQ2hlY2sgdGhhdCBhbmFseXplIGlz IGxvZ2dlZAorQU5BTFlaRSB0ZXN0OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjEsMSxN SVNDLEFOQUxZWkUsLCxBTkFMWVpFIHRlc3Q7CistLQorLS0gR3JhbnRzIHRvIHB1YmxpYyBz aG91bGQgbm90IGNhdXNlIG9iamVjdCBsb2dnaW5nIChzZXNzaW9uIGxvZ2dpbmcgd2lsbAor LS0gc3RpbGwgaGFwcGVuKQorR1JBTlQgU0VMRUNUCisgIE9OIFRBQkxFIHB1YmxpYy50ZXN0 CisgIFRPIFBVQkxJQzsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIyLDEsUk9MRSxHUkFO VCwsLCJHUkFOVCBTRUxFQ1QKKyAgT04gVEFCTEUgcHVibGljLnRlc3QKKyAgVE8gUFVCTElD OyIKK1NFTEVDVCAqCisgIEZST00gdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIz LDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3QsIlNFTEVDVCAqCisgIEZST00gdGVz dDsiCisgaWQgfCBuYW1lIHwgZGVzY3JpcHRpb24gCistLS0tKy0tLS0tLSstLS0tLS0tLS0t LS0tCisoMCByb3dzKQorCistLSBDaGVjayB0aGF0IHN0YXRlbWVudHMgd2l0aG91dCBjb2x1 bW5zIGxvZworU0VMRUNUCisgIEZST00gdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDI0LDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3QsIlNFTEVDVAorICBGUk9NIHRl c3Q7IgorLS0KKygwIHJvd3MpCisKK1NFTEVDVCAxLAorCSAgIGN1cnJlbnRfdXNlcjsKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDI1LDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUIDEsCisJ ICAgY3VycmVudF91c2VyOyIKKyA/Y29sdW1uPyB8IGN1cnJlbnRfdXNlciAKKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgMSB8IHN1cGVyCisoMSByb3cpCisKK0RPICQk CitERUNMQVJFCisJdGVzdCBJTlQ7CitCRUdJTgorCVNFTEVDVCAxCisJICBJTlRPIHRlc3Q7 CitFTkQgJCQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNiwxLEZVTkNUSU9OLERPLCws IkRPICQkCitERUNMQVJFCisJdGVzdCBJTlQ7CitCRUdJTgorCVNFTEVDVCAxCisJICBJTlRP IHRlc3Q7CitFTkQgJCQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjYsMixSRUFELFNF TEVDVCwsLFNFTEVDVCAxCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiU0VMRUNUIDEiCitQ TC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgU1FMIHN0YXRl bWVudAorZXhwbGFpbiBzZWxlY3QgMTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI3LDEs UkVBRCxTRUxFQ1QsLCxleHBsYWluIHNlbGVjdCAxOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sMjcsMixNSVNDLEVYUExBSU4sLCxleHBsYWluIHNlbGVjdCAxOworICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0x IHdpZHRoPTApCisoMSByb3cpCisKKy0tCistLSBUZXN0IHRoYXQgbG9va3MgaW5zaWRlIG9m IGRvIGJsb2NrcyBsb2cKK0lOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMSk7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyOCwxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJs aWMudGVzdCwiSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgxKTsiCitJTlNF UlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDIpOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMjksMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3QsIklOU0VSVCBJTlRP IFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMik7IgorSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJ CSAgVkFMVUVTICgzKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMwLDEsV1JJVEUsSU5T RVJULFRBQkxFLHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxV RVMgKDMpOyIKK0RPICQkCitERUNMQVJFCisJcmVzdWx0IFJFQ09SRDsKK0JFR0lOCisJRk9S IHJlc3VsdCBJTgorCQlTRUxFQ1QgaWQKKwkJICBGUk9NIHRlc3QKKwlMT09QCisJCUlOU0VS VCBJTlRPIHRlc3QgKGlkKQorCQkJIFZBTFVFUyAocmVzdWx0LmlkICsgMTAwKTsKKwlFTkQg TE9PUDsKK0VORCAkJDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMxLDEsRlVOQ1RJT04s RE8sLCwiRE8gJCQKK0RFQ0xBUkUKKwlyZXN1bHQgUkVDT1JEOworQkVHSU4KKwlGT1IgcmVz dWx0IElOCisJCVNFTEVDVCBpZAorCQkgIEZST00gdGVzdAorCUxPT1AKKwkJSU5TRVJUIElO VE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApOworCUVORCBMT09Q OworRU5EICQkOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMxLDIsUkVBRCxTRUxFQ1Qs VEFCTEUscHVibGljLnRlc3QsIlNFTEVDVCBpZAorCQkgIEZST00gdGVzdCIKK0NPTlRFWFQ6 ICBQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgRk9SIG92 ZXIgU0VMRUNUIHJvd3MKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMxLDMsV1JJVEUsSU5T RVJULFRBQkxFLHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJCSBWQUxV RVMgKHJlc3VsdC5pZCArIDEwMCkiLCwsCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5T RVJUIElOVE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIgorUEwv cGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBzdGF0ZW1l bnQKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMxLDQsV1JJVEUsSU5TRVJULFRBQkxFLHB1 YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJCSBWQUxVRVMgKHJlc3VsdC5p ZCArIDEwMCkiLCwsCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5TRVJUIElOVE8gdGVz dCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIgorUEwvcGdTUUwgZnVuY3Rp b24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBzdGF0ZW1lbnQKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDMxLDUsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0LCJJ TlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJCSBWQUxVRVMgKHJlc3VsdC5pZCArIDEwMCkiLCws CitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5TRVJUIElOVE8gdGVzdCAoaWQpCisJCQkg VkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIgorUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2Nv ZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBzdGF0ZW1lbnQKKy0tCistLSBUZXN0IG9iZnVzY2F0 ZWQgZHluYW1pYyBzcWwgZm9yIGNsZWFuIGxvZ2dpbmcKK0RPICQkCitERUNMQVJFCisJdGFi bGVfbmFtZSBURVhUID0gJ2RvX3RhYmxlJzsKK0JFR0lOCisJRVhFQ1VURSAnQ1JFQVRFIFRB QkxFICcgfHwgdGFibGVfbmFtZSB8fCAnICgid2VpcmQgbmFtZSIgSU5UKSc7CisJRVhFQ1VU RSAnRFJPUCB0YWJsZSAnIHx8IHRhYmxlX25hbWU7CitFTkQgJCQ7CitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiwzMiwxLEZVTkNUSU9OLERPLCwsIkRPICQkCitERUNMQVJFCisJdGFibGVf bmFtZSBURVhUID0gJ2RvX3RhYmxlJzsKK0JFR0lOCisJRVhFQ1VURSAnQ1JFQVRFIFRBQkxF ICcgfHwgdGFibGVfbmFtZSB8fCAnICgiIndlaXJkIG5hbWUiIiBJTlQpJzsKKwlFWEVDVVRF ICdEUk9QIHRhYmxlICcgfHwgdGFibGVfbmFtZTsKK0VORCAkJDsiCitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiwzMiwyLERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGljLmRvX3RhYmxl LCJDUkVBVEUgVEFCTEUgZG9fdGFibGUgKCIid2VpcmQgbmFtZSIiIElOVCkiCitDT05URVhU OiAgU1FMIHN0YXRlbWVudCAiQ1JFQVRFIFRBQkxFIGRvX3RhYmxlICgid2VpcmQgbmFtZSIg SU5UKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgNSBhdCBF WEVDVVRFIHN0YXRlbWVudAorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzIsMyxEREwsRFJP UCBUQUJMRSxUQUJMRSxwdWJsaWMuZG9fdGFibGUsRFJPUCB0YWJsZSBkb190YWJsZQorQ09O VEVYVDogIFNRTCBzdGF0ZW1lbnQgIkRST1AgdGFibGUgZG9fdGFibGUiCitQTC9wZ1NRTCBm dW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDYgYXQgRVhFQ1VURSBzdGF0ZW1lbnQK Ky0tCistLSBHZW5lcmF0ZSBhbiBlcnJvciBhbmQgbWFrZSBzdXJlIHRoZSBzdGFjayBnZXRz IGNsZWFyZWQKK0RPICQkCitCRUdJTgorCUNSRUFURSBUQUJMRSBib2d1cy50ZXN0X2Jsb2Nr CisJKAorCQlpZCBJTlQKKwkpOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s MzMsMSxGVU5DVElPTixETywsLCJETyAkJAorQkVHSU4KKwlDUkVBVEUgVEFCTEUgYm9ndXMu dGVzdF9ibG9jaworCSgKKwkJaWQgSU5UCisJKTsKK0VORCAkJDsiCitFUlJPUjogIHNjaGVt YSAiYm9ndXMiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IENSRUFURSBUQUJMRSBib2d1cy50 ZXN0X2Jsb2NrCisgICAgICAgICAgICAgICAgICAgICBeCitRVUVSWTogIENSRUFURSBUQUJM RSBib2d1cy50ZXN0X2Jsb2NrCisJKAorCQlpZCBJTlQKKwkpCitDT05URVhUOiAgUEwvcGdT UUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSAzIGF0IFNRTCBzdGF0ZW1lbnQK Ky0tCistLSBUZXN0IGFsdGVyIHRhYmxlIHN0YXRlbWVudHMKK0FMVEVSIFRBQkxFIHB1Ymxp Yy50ZXN0CisJRFJPUCBDT0xVTU4gZGVzY3JpcHRpb24gOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMzQsMSxEREwsQUxURVIgVEFCTEUsVEFCTEUgQ09MVU1OLHB1YmxpYy50ZXN0LmRl c2NyaXB0aW9uLCJBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAorCURST1AgQ09MVU1OIGRlc2Ny aXB0aW9uIDsiCitBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAorCVJFTkFNRSBUTyB0ZXN0MjsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM1LDEsRERMLEFMVEVSIFRBQkxFLFRBQkxFLHB1 YmxpYy50ZXN0LCJBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAorCVJFTkFNRSBUTyB0ZXN0Mjsi CitBTFRFUiBUQUJMRSBwdWJsaWMudGVzdDIKKwlTRVQgU0NIRU1BIHRlc3Q7CitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiwzNiwxLERETCxBTFRFUiBUQUJMRSxJTkRFWCxwdWJsaWMudGVz dF9wa2V5LCJBTFRFUiBUQUJMRSBwdWJsaWMudGVzdDIKKwlTRVQgU0NIRU1BIHRlc3Q7Igor QUxURVIgVEFCTEUgdGVzdC50ZXN0MgorCUFERCBDT0xVTU4gZGVzY3JpcHRpb24gVEVYVDsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM3LDEsRERMLEFMVEVSIFRBQkxFLFRBQkxFLHRl c3QudGVzdDIsIkFMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlBREQgQ09MVU1OIGRlc2NyaXB0 aW9uIFRFWFQ7IgorQUxURVIgVEFCTEUgdGVzdC50ZXN0MgorCURST1AgQ09MVU1OIGRlc2Ny aXB0aW9uOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzgsMSxEREwsQUxURVIgVEFCTEUs VEFCTEUgQ09MVU1OLHRlc3QudGVzdDIuZGVzY3JpcHRpb24sIkFMVEVSIFRBQkxFIHRlc3Qu dGVzdDIKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbjsiCitEUk9QIFRBQkxFIHRlc3QudGVz dDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzOSwxLERETCxEUk9QIFRBQkxFLFRBQkxF LHRlc3QudGVzdDIsRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMzksMSxEREwsRFJPUCBUQUJMRSxUQUJMRSBDT05TVFJBSU5ULHRlc3RfcGtleSBv biB0ZXN0LnRlc3QyLERST1AgVEFCTEUgdGVzdC50ZXN0MjsKK05PVElDRTogIEFVRElUOiBT RVNTSU9OLDM5LDEsRERMLERST1AgVEFCTEUsSU5ERVgsdGVzdC50ZXN0X3BrZXksRFJPUCBU QUJMRSB0ZXN0LnRlc3QyOworLS0KKy0tIFRlc3QgbXVsdGlwbGUgc3RhdGVtZW50cyB3aXRo IG9uZSBzZW1pLWNvbG9uCitDUkVBVEUgU0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBmb28u YmFyIChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXogKGlkIGludCk7CitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiw0MCwxLERETCxDUkVBVEUgVEFCTEUsVEFCTEUsZm9vLmJhciwi Q1JFQVRFIFNDSEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9vLmJhciAoaWQgaW50KQorCUNS RUFURSBUQUJMRSBmb28uYmF6IChpZCBpbnQpOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDQwLDIsRERMLENSRUFURSBUQUJMRSxUQUJMRSxmb28uYmF6LCJDUkVBVEUgU0NIRU1BIGZv bworCUNSRUFURSBUQUJMRSBmb28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5i YXogKGlkIGludCk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDAsMyxEREwsQ1JFQVRF IFNDSEVNQSwsLCJDUkVBVEUgU0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBmb28uYmFyIChp ZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXogKGlkIGludCk7IgorLS0KKy0tIFRlc3Qg YWdncmVnYXRlCitDUkVBVEUgRlVOQ1RJT04gcHVibGljLmludF9hZGQKKygKKwlhIElOVCwK KwliIElOVAorKQorCVJFVFVSTlMgSU5UIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lO CisJcmV0dXJuIGEgKyBiOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDEs MSxEREwsQ1JFQVRFIEZVTkNUSU9OLCwsIkNSRUFURSBGVU5DVElPTiBwdWJsaWMuaW50X2Fk ZAorKAorCWEgSU5ULAorCWIgSU5UCispCisJUkVUVVJOUyBJTlQgTEFOR1VBR0UgcGxwZ3Nx bCBBUyAkJAorQkVHSU4KKwlyZXR1cm4gYSArIGI7CitFTkQgJCQ7IgorU0VMRUNUIGludF9h ZGQoMSwgMSk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MiwxLFJFQUQsU0VMRUNULCws IlNFTEVDVCBpbnRfYWRkKDEsIDEpOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQyLDIs RlVOQ1RJT04sRVhFQ1VURSxGVU5DVElPTixwdWJsaWMuaW50X2FkZCwiU0VMRUNUIGludF9h ZGQoMSwgMSk7IgorIGludF9hZGQgCistLS0tLS0tLS0KKyAgICAgICAyCisoMSByb3cpCisK K0NSRUFURSBBR0dSRUdBVEUgcHVibGljLnN1bV90ZXN0KElOVCkgKFNGVU5DPXB1YmxpYy5p bnRfYWRkLCBTVFlQRT1JTlQsIElOSVRDT05EPScwJyk7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiw0MywxLERETCxDUkVBVEUgQUdHUkVHQVRFLCwsIkNSRUFURSBBR0dSRUdBVEUgcHVi bGljLnN1bV90ZXN0KElOVCkgKFNGVU5DPXB1YmxpYy5pbnRfYWRkLCBTVFlQRT1JTlQsIElO SVRDT05EPScwJyk7IgorQUxURVIgQUdHUkVHQVRFIHB1YmxpYy5zdW1fdGVzdChpbnRlZ2Vy KSBSRU5BTUUgVE8gc3VtX3Rlc3QyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDQsMSxE REwsQUxURVIgQUdHUkVHQVRFLCwsQUxURVIgQUdHUkVHQVRFIHB1YmxpYy5zdW1fdGVzdChp bnRlZ2VyKSBSRU5BTUUgVE8gc3VtX3Rlc3QyOworLS0KKy0tIFRlc3QgY29udmVyc2lvbgor Q1JFQVRFIENPTlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBGT1IgJ1NRTF9BU0NJ SScgVE8gJ01VTEVfSU5URVJOQUwnIEZST00gcGdfY2F0YWxvZy5hc2NpaV90b19taWM7CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0NSwxLERETCxDUkVBVEUgQ09OVkVSU0lPTiwsLENS RUFURSBDT05WRVJTSU9OIHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QgRk9SICdTUUxfQVNDSUkn IFRPICdNVUxFX0lOVEVSTkFMJyBGUk9NIHBnX2NhdGFsb2cuYXNjaWlfdG9fbWljOworQUxU RVIgQ09OVkVSU0lPTiBwdWJsaWMuY29udmVyc2lvbl90ZXN0IFJFTkFNRSBUTyBjb252ZXJz aW9uX3Rlc3QyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDYsMSxEREwsQUxURVIgQ09O VkVSU0lPTiwsLEFMVEVSIENPTlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBSRU5B TUUgVE8gY29udmVyc2lvbl90ZXN0MjsKKy0tCistLSBUZXN0IGNyZWF0ZS9hbHRlci9kcm9w IGRhdGFiYXNlCitDUkVBVEUgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQ7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0NywxLERETCxDUkVBVEUgREFUQUJBU0UsLCxD UkVBVEUgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQ7CitBTFRFUiBEQVRB QkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdCBSRU5BTUUgVE8gY29udHJpYl9yZWdy ZXNzaW9uX3BnYXVkaXQyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDgsMSxEREwsQUxU RVIgREFUQUJBU0UsLCxBTFRFUiBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRp dCBSRU5BTUUgVE8gY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQyOworRFJPUCBEQVRBQkFT RSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP Tiw0OSwxLERETCxEUk9QIERBVEFCQVNFLCwsRFJPUCBEQVRBQkFTRSBjb250cmliX3JlZ3Jl c3Npb25fcGdhdWRpdDI7CistLQorLS0gVGVzdCB0aGF0IGZyZWVzIGEgbWVtb3J5IGNvbnRl eHQgZWFybGllciB0aGFuIGV4cGVjdGVkCitDUkVBVEUgVEFCTEUgaG9nZQorKAorCWlkIGlu dAorKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUwLDEsRERMLENSRUFURSBUQUJMRSxU QUJMRSxwdWJsaWMuaG9nZSwiQ1JFQVRFIFRBQkxFIGhvZ2UKKygKKwlpZCBpbnQKKyk7Igor Q1JFQVRFIEZVTkNUSU9OIHRlc3QoKQorCVJFVFVSTlMgSU5UIEFTICQkCitERUNMQVJFCisJ Y3VyMSBjdXJzb3IgZm9yIHNlbGVjdCAqIGZyb20gaG9nZTsKKwl0bXAgaW50OworQkVHSU4K KwlPUEVOIGN1cjE7CisJRkVUQ0ggY3VyMSBpbnRvIHRtcDsKKwlSRVRVUk4gdG1wOworRU5E ICQkCitMQU5HVUFHRSBwbHBnc3FsIDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUxLDEs RERMLENSRUFURSBGVU5DVElPTiwsLCJDUkVBVEUgRlVOQ1RJT04gdGVzdCgpCisJUkVUVVJO UyBJTlQgQVMgJCQKK0RFQ0xBUkUKKwljdXIxIGN1cnNvciBmb3Igc2VsZWN0ICogZnJvbSBo b2dlOworCXRtcCBpbnQ7CitCRUdJTgorCU9QRU4gY3VyMTsKKwlGRVRDSCBjdXIxIGludG8g dG1wOworCVJFVFVSTiB0bXA7CitFTkQgJCQKK0xBTkdVQUdFIHBscGdzcWwgOyIKK1NFTEVD VCB0ZXN0KCk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1MiwxLFJFQUQsU0VMRUNULCws U0VMRUNUIHRlc3QoKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUyLDIsRlVOQ1RJT04s RVhFQ1VURSxGVU5DVElPTixwdWJsaWMudGVzdCxTRUxFQ1QgdGVzdCgpOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sNTIsMyxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuaG9nZSxzZWxl Y3QgKiBmcm9tIGhvZ2UKK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiB0ZXN0KCkgbGlu ZSA2IGF0IE9QRU4KKyB0ZXN0IAorLS0tLS0tCisgICAgIAorKDEgcm93KQorCistLQorLS0g RGVsZXRlIGFsbCByb3dzIHRoZW4gZGVsZXRlIDEgcm93CitTRVQgcGdfYXVkaXQubG9nID0g J3dyaXRlJzsKK1NFVCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0b3InOworY3JlYXRlIHRhYmxl IGJhcgorKAorCWNvbCBpbnQKKyk7CitncmFudCBkZWxldGUKKyAgIG9uIGJhcgorICAgdG8g YXVkaXRvcjsKK2luc2VydCBpbnRvIGJhciAoY29sKQorCQkgdmFsdWVzICgxKTsKK05PVElD RTogIEFVRElUOiBTRVNTSU9OLDUzLDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy5iYXIs Imluc2VydCBpbnRvIGJhciAoY29sKQorCQkgdmFsdWVzICgxKTsiCitkZWxldGUgZnJvbSBi YXI7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDU0LDEsV1JJVEUsREVMRVRFLFRBQkxFLHB1 YmxpYy5iYXIsZGVsZXRlIGZyb20gYmFyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNTQs MSxXUklURSxERUxFVEUsVEFCTEUscHVibGljLmJhcixkZWxldGUgZnJvbSBiYXI7CitpbnNl cnQgaW50byBiYXIgKGNvbCkKKwkJIHZhbHVlcyAoMSk7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiw1NSwxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMuYmFyLCJpbnNlcnQgaW50byBi YXIgKGNvbCkKKwkJIHZhbHVlcyAoMSk7IgorZGVsZXRlIGZyb20gYmFyCisgd2hlcmUgY29s ID0gMTsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNTYsMSxXUklURSxERUxFVEUsVEFCTEUs cHVibGljLmJhciwiZGVsZXRlIGZyb20gYmFyCisgd2hlcmUgY29sID0gMTsiCitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiw1NiwxLFdSSVRFLERFTEVURSxUQUJMRSxwdWJsaWMuYmFyLCJk ZWxldGUgZnJvbSBiYXIKKyB3aGVyZSBjb2wgPSAxOyIKK2Ryb3AgdGFibGUgYmFyOwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC0tMS4wLjAuc3FsIGIvY29udHJp Yi9wZ19hdWRpdC9wZ19hdWRpdC0tMS4wLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjlkOWVlODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1 ZGl0L3BnX2F1ZGl0LS0xLjAuMC5zcWwKQEAgLTAsMCArMSwyMiBAQAorLyogcGdfYXVkaXQv cGdfYXVkaXQtLTEuMC4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291 cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8g VXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX2F1ZGl0IiB0byBsb2FkIHRoaXMgZmlsZS5ccXVp dAorCitDUkVBVEUgRlVOQ1RJT04gcGdfYXVkaXRfZGRsX2NvbW1hbmRfZW5kKCkKKwlSRVRV Uk5TIGV2ZW50X3RyaWdnZXIKKwlMQU5HVUFHRSBDCisJQVMgJ01PRFVMRV9QQVRITkFNRScs ICdwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQnOworCitDUkVBVEUgRVZFTlQgVFJJR0dFUiBw Z19hdWRpdF9kZGxfY29tbWFuZF9lbmQKKwlPTiBkZGxfY29tbWFuZF9lbmQKKwlFWEVDVVRF IFBST0NFRFVSRSBwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQoKTsKKworQ1JFQVRFIEZVTkNU SU9OIHBnX2F1ZGl0X3NxbF9kcm9wKCkKKwlSRVRVUk5TIGV2ZW50X3RyaWdnZXIKKwlMQU5H VUFHRSBDCisJQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19hdWRpdF9zcWxfZHJvcCc7CisK K0NSRUFURSBFVkVOVCBUUklHR0VSIHBnX2F1ZGl0X3NxbF9kcm9wCisJT04gc3FsX2Ryb3AK KwlFWEVDVVRFIFBST0NFRFVSRSBwZ19hdWRpdF9zcWxfZHJvcCgpOwpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRp dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjFkZGIKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmMKQEAgLTAsMCArMSwx ODA5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcGdfYXVkaXQuYworICoK KyAqIEFuIGF1ZGl0aW5nIGV4dGVuc2lvbiBmb3IgUG9zdGdyZVNRTC4gSW1wcm92ZXMgb24g c3RhbmRhcmQgc3RhdGVtZW50IGxvZ2dpbmcKKyAqIGJ5IGFkZGluZyBtb3JlIGxvZ2dpbmcg Y2xhc3Nlcywgb2JqZWN0IGxldmVsIGxvZ2dpbmcsIGFuZCBwcm92aWRpbmcKKyAqIGZ1bGx5 LXF1YWxpZmllZCBvYmplY3QgbmFtZXMgZm9yIGFsbCBETUwgYW5kIG1hbnkgRERMIHN0YXRl bWVudHMgKFNlZQorICogcGdfYXVkaXQuc2dtbCBmb3IgZGV0YWlscykuCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE0LTIwMTUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQkgIGNvbnRyaWIvcGdfYXVkaXQvcGdf YXVkaXQuYworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3N5c2F0dHIuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWNjZXNz LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cv bmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kcy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1ZGUgImV4ZWN1 dG9yL3NwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImxpYnBxL2F1 dGguaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0 eS5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwu aCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVz dGFtcC5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK3ZvaWQgX1BHX2luaXQodm9pZCk7CisK Ky8qCisgKiBFdmVudCB0cmlnZ2VyIHByb3RvdHlwZXMKKyAqLworRGF0dW0gcGdfYXVkaXRf ZGRsX2NvbW1hbmRfZW5kKFBHX0ZVTkNUSU9OX0FSR1MpOworRGF0dW0gcGdfYXVkaXRfc3Fs X2Ryb3AoUEdfRlVOQ1RJT05fQVJHUyk7CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfYXVk aXRfZGRsX2NvbW1hbmRfZW5kKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfYXVkaXRfc3Fs X2Ryb3ApOworCisvKgorICogYXVkaXRSb2xlIGlzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhl IHBnX2F1ZGl0LnJvbGUgR1VDLCB3aGljaCBjb250YWlucyB0aGUKKyAqIHJvbGUgZm9yIGdy YW50LWJhc2VkIGF1ZGl0aW5nLgorICovCitjaGFyICphdWRpdFJvbGUgPSBOVUxMOworCisv KgorICogYXVkaXRMb2cgaXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcGdfYXVkaXQubG9n IEdVQywgZS5nLiAicmVhZCwgd3JpdGUsIGRkbCIKKyAqIChpdCdzIG5vdCB1c2VkIGJ5IHRo ZSBtb2R1bGUgYnV0IGlzIHJlcXVpcmVkIGJ5IERlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxl KS4KKyAqIEVhY2ggdG9rZW4gY29ycmVzcG9uZHMgdG8gYSBmbGFnIGluIGVudW0gTG9nQ2xh c3MgYmVsb3cuIFdlIGNvbnZlcnQgdGhlIGxpc3QKKyAqIG9mIHRva2VucyBpbnRvIGEgYml0 bWFwIGluIGF1ZGl0TG9nQml0bWFwIGZvciBpbnRlcm5hbCB1c2UuCisgKi8KK2NoYXIgKmF1 ZGl0TG9nID0gTlVMTDsKK3N0YXRpYyB1aW50NjQgYXVkaXRMb2dCaXRtYXAgPSAwOworCisv KgorICogYXVkaXRMb2dSZWxhdGlvbiBjb250cm9scyB3aGV0aGVyIGFsbCByZWxhdGlvbnMg YXJlIGxvZ2dlZCBmb3IgUkVBRCBhbmQKKyAqIFdSSVRFIGNsYXNzZXMgZHVyaW5nIHNlc3Np b24gbG9nZ2luZy4KKyAqLworYm9vbCBhdWRpdExvZ1JlbGF0aW9uID0gZmFsc2U7CisKKy8q CisgKiBhdWRpdExvZ05vdGljZSByYWlzZXMgYSBub3RpY2UgYXMgd2VsbCBhcyBsb2dnaW5n IHZpYSB0aGUgc3RhbmRhcmQgZmFjaWxpdHkuCisgKiBUaGlzIGlzIHByaW1hcmlseSBmb3Ig dGhlIGJlbmVmaXQgb2YgdGVzdGluZy4KKyAqLworYm9vbCBhdWRpdExvZ05vdGljZSA9IGZh bHNlOworCisvKgorICogU3RyaW5nIGNvbnN0YW50cyBmb3IgYXVkaXQgdHlwZXMgLSB1c2Vk IHdoZW4gbG9nZ2luZyB0byBkaXN0aW5ndWlzaCBzZXNzaW9uCisgKiB2cy4gb2JqZWN0IGF1 ZGl0aW5nLgorICovCisjZGVmaW5lIEFVRElUX1RZUEVfT0JKRUNUCSJPQkpFQ1QiCisjZGVm aW5lIEFVRElUX1RZUEVfU0VTU0lPTgkiU0VTU0lPTiIKKworLyoKKyAqIFN0cmluZyBjb25z dGFudHMgZm9yIGxvZyBjbGFzc2VzIC0gdXNlZCB3aGVuIHByb2Nlc3NpbmcgdG9rZW5zIGlu IHRoZQorICogcGdfYXVkaXQubG9nIEdVQy4KKyAqLworI2RlZmluZSBDTEFTU19EREwJCQki RERMIgorI2RlZmluZSBDTEFTU19GVU5DVElPTgkJIkZVTkNUSU9OIgorI2RlZmluZSBDTEFT U19NSVNDCQkJIk1JU0MiCisjZGVmaW5lIENMQVNTX1BBUkFNRVRFUgkJIlBBUkFNRVRFUiIK KyNkZWZpbmUgQ0xBU1NfUkVBRAkJCSJSRUFEIgorI2RlZmluZSBDTEFTU19ST0xFCQkJIlJP TEUiCisjZGVmaW5lIENMQVNTX1dSSVRFCQkJIldSSVRFIgorCisjZGVmaW5lIENMQVNTX0FM TAkJCSJBTEwiCisjZGVmaW5lIENMQVNTX05PTkUJCQkiTk9ORSIKKworLyogTG9nIGNsYXNz IGVudW0gdXNlZCB0byByZXByZXNlbnQgYml0cyBpbiBhdWRpdExvZ0JpdG1hcCAqLworZW51 bSBMb2dDbGFzcworeworCUxPR19OT05FID0gMCwKKworCS8qIERETDogQ1JFQVRFL0RST1Av QUxURVIgKi8KKwlMT0dfRERMID0gKDEgPDwgMSksCisKKwkvKiBGdW5jdGlvbiBleGVjdXRp b24gKi8KKwlMT0dfRlVOQ1RJT04gPSAoMSA8PCAyKSwKKworCS8qIFN0YXRlbWVudHMgbm90 IGNvdmVyZWQgYnkgYW5vdGhlciBjbGFzcyAqLworCUxPR19NSVNDID0gKDEgPDwgMyksCisK KwkvKiBGdW5jdGlvbiBleGVjdXRpb24gKi8KKwlMT0dfUEFSQU1FVEVSID0gKDEgPDwgNCks CisKKwkvKiBTRUxFQ1QgKi8KKwlMT0dfUkVBRCA9ICgxIDw8IDUpLAorCisJLyogR1JBTlQs IFJFVk9LRSwgQ1JFQVRFL0FMVEVSL0RST1AgUk9MRSAqLworCUxPR19ST0xFID0gKDEgPDwg NiksCisKKwkvKiBJTlNFUlQsIFVQREFURSwgREVMRVRFLCBUUlVOQ0FURSAqLworCUxPR19X UklURSA9ICgxIDw8IDcpLAorCisJLyogQWJzb2x1dGVseSBldmVyeXRoaW5nICovCisJTE9H X0FMTCA9IH4odWludDY0KTAKK307CisKKy8qIFN0cmluZyBjb25zdGFudHMgZm9yIGxvZ2dp bmcgY29tbWFuZHMgKi8KKyNkZWZpbmUgQ09NTUFORF9ERUxFVEUJCSJERUxFVEUiCisjZGVm aW5lIENPTU1BTkRfRVhFQ1VURQkJIkVYRUNVVEUiCisjZGVmaW5lIENPTU1BTkRfSU5TRVJU CQkiSU5TRVJUIgorI2RlZmluZSBDT01NQU5EX1VQREFURQkJIlVQREFURSIKKyNkZWZpbmUg Q09NTUFORF9TRUxFQ1QJCSJTRUxFQ1QiCisKKyNkZWZpbmUgQ09NTUFORF9BTFRFUl9ST0xF CSJBTFRFUiBST0xFIgorI2RlZmluZSBDT01NQU5EX0RST1BfUk9MRQkiQ1JFQVRFIFJPTEUi CisKKyNkZWZpbmUgQ09NTUFORF9VTktOT1dOCQkiVU5LTk9XTiIKKworLyogU3RyaW5nIGNv bnN0YW50cyBmb3IgbG9nZ2luZyBvYmplY3QgdHlwZXMgKi8KKyNkZWZpbmUgT0JKRUNUX1RZ UEVfQ09NUE9TSVRFX1RZUEUJIkNPTVBPU0lURSBUWVBFIgorI2RlZmluZSBPQkpFQ1RfVFlQ RV9GT1JFSUdOX1RBQkxFCSJGT1JFSUdOIFRBQkxFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9G VU5DVElPTgkJIkZVTkNUSU9OIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9JTkRFWAkJCSJJTkRF WCIKKyNkZWZpbmUgT0JKRUNUX1RZUEVfVEFCTEUJCQkiVEFCTEUiCisjZGVmaW5lIE9CSkVD VF9UWVBFX1RPQVNUVkFMVUUJCSJUT0FTVFZBTFVFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9N QVRWSUVXCQkJIk1BVEVSSUFMSVpFRCBWSUVXIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9TRVFV RU5DRQkJIlNFUVVFTkNFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9WSUVXCQkJIlZJRVciCisK KyNkZWZpbmUgT0JKRUNUX1RZUEVfVU5LTk9XTgkJCSJVTktOT1dOIgorCisvKgorICogQW4g QXVkaXRFdmVudCByZXByZXNlbnRzIGFuIG9wZXJhdGlvbiB0aGF0IHBvdGVudGlhbGx5IGFm ZmVjdHMgYSBzaW5nbGUKKyAqIG9iamVjdC4gSWYgYSBzdGF0ZW1lbnQgYWZmZWN0cyBtdWx0 aXBsZSBvYmplY3RzIG11bHRpcGxlIEF1ZGl0RXZlbnRzIG11c3QgYmUKKyAqIGNyZWF0ZWQg dG8gcmVwcmVzZW50IGl0LgorICovCit0eXBlZGVmIHN0cnVjdAoreworCWludDY0IHN0YXRl bWVudElkOworCWludDY0IHN1YnN0YXRlbWVudElkOworCisJTG9nU3RtdExldmVsIGxvZ1N0 bXRMZXZlbDsKKwlOb2RlVGFnIGNvbW1hbmRUYWc7CisJY29uc3QgY2hhciAqY29tbWFuZDsK Kwljb25zdCBjaGFyICpvYmplY3RUeXBlOworCWNoYXIgKm9iamVjdE5hbWU7CisJY29uc3Qg Y2hhciAqY29tbWFuZFRleHQ7CisJUGFyYW1MaXN0SW5mbyBwYXJhbUxpc3Q7CisKKwlib29s IGdyYW50ZWQ7CisJYm9vbCBsb2dnZWQ7Cit9IEF1ZGl0RXZlbnQ7CisKKy8qCisgKiBBIHNp bXBsZSBGSUZPIHF1ZXVlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhY2sgb2Yg YXVkaXQgZXZlbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBBdWRpdEV2ZW50U3RhY2tJdGVt Cit7CisJc3RydWN0IEF1ZGl0RXZlbnRTdGFja0l0ZW0gKm5leHQ7CisKKwlBdWRpdEV2ZW50 IGF1ZGl0RXZlbnQ7CisKKwlpbnQ2NCBzdGFja0lkOworCisJTWVtb3J5Q29udGV4dCBjb250 ZXh0QXVkaXQ7CisJTWVtb3J5Q29udGV4dENhbGxiYWNrIGNvbnRleHRDYWxsYmFjazsKK30g QXVkaXRFdmVudFN0YWNrSXRlbTsKKworQXVkaXRFdmVudFN0YWNrSXRlbSAqYXVkaXRFdmVu dFN0YWNrID0gTlVMTDsKKworLyoKKyAqIFRyYWNrIHdoZW4gYW4gaW50ZXJuYWwgc3RhdGVt ZW50IGlzIHJ1bm5pbmcgc28gaXQgaXMgbm90IGxvZ2dlZAorICovCitzdGF0aWMgYm9vbCBp bnRlcm5hbFN0YXRlbWVudCA9IGZhbHNlOworCisvKgorICogVHJhY2sgcnVubmluZyB0b3Rh bCBmb3Igc3RhdGVtZW50cyBhbmQgc3Vic3RhdGVtZW50cyBhbmQgd2hldGhlciBvciBub3QK KyAqIGFueXRoaW5nIGhhcyBiZWVuIGxvZ2dlZCBzaW5jZSB0aGlzIHN0YXRlbWVudCBiZWdh bi4KKyAqLworc3RhdGljIGludDY0IHN0YXRlbWVudFRvdGFsID0gMDsKK3N0YXRpYyBpbnQ2 NCBzdWJzdGF0ZW1lbnRUb3RhbCA9IDA7CitzdGF0aWMgaW50NjQgc3RhY2tUb3RhbCA9IDA7 CisKK3N0YXRpYyBib29sIHN0YXRlbWVudExvZ2dlZCA9IGZhbHNlOworCisvKgorICogU3Rh Y2sgZnVuY3Rpb25zCisgKgorICogQXVkaXQgZXZlbnRzIGNhbiBnbyBkb3duIHRvIG11bHRp cGxlIGxldmVscyBzbyBhIHN0YWNrIGlzIG1haW50YWluZWQgdG8ga2VlcAorICogdHJhY2sg b2YgdGhlbS4KKyAqLworCisvKgorICogUmVzcG9uZCB0byBjYWxsYmFja3MgcmVnaXN0ZXJl ZCB3aXRoIE1lbW9yeUNvbnRleHRSZWdpc3RlclJlc2V0Q2FsbGJhY2soKS4KKyAqIFJlbW92 ZXMgdGhlIGV2ZW50KHMpIG9mZiB0aGUgc3RhY2sgdGhhdCBoYXZlIGJlY29tZSBvYnNvbGV0 ZSBvbmNlIHRoZQorICogTWVtb3J5Q29udGV4dCBoYXMgYmVlbiBmcmVlZC4gIFRoZSBjYWxs YmFjayBzaG91bGQgYWx3YXlzIGJlIGZyZWVpbmcgdGhlIHRvcAorICogb2YgdGhlIHN0YWNr LCBidXQgdGhlIGNvZGUgaXMgdG9sZXJhbnQgb2Ygb3V0LW9mLW9yZGVyIGNhbGxiYWNrcy4K KyAqLworc3RhdGljIHZvaWQKK3N0YWNrX2ZyZWUodm9pZCAqc3RhY2tGcmVlKQoreworCUF1 ZGl0RXZlbnRTdGFja0l0ZW0gKm5leHRJdGVtID0gYXVkaXRFdmVudFN0YWNrOworCisJLyog T25seSBwcm9jZXNzIGlmIHRoZSBzdGFjayBjb250YWlucyBpdGVtcyAqLworCXdoaWxlIChu ZXh0SXRlbSAhPSBOVUxMKQorCXsKKwkJLyogQ2hlY2sgaWYgdGhpcyBpdGVtIG1hdGNoZXMg dGhlIGl0ZW0gdG8gYmUgZnJlZWQgKi8KKwkJaWYgKG5leHRJdGVtID09IChBdWRpdEV2ZW50 U3RhY2tJdGVtICopc3RhY2tGcmVlKQorCQl7CisJCQkvKiBNb3ZlIHRvcCBvZiBzdGFjayB0 byB0aGUgaXRlbSBhZnRlciB0aGUgZnJlZWQgaXRlbSAqLworCQkJYXVkaXRFdmVudFN0YWNr ID0gbmV4dEl0ZW0tPm5leHQ7CisKKwkJCS8qIElmIHRoZSBzdGFjayBpcyBub3QgZW1wdHkg Ki8KKwkJCWlmIChhdWRpdEV2ZW50U3RhY2sgPT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBSZXNl dCBpbnRlcm5hbCBzdGF0ZW1lbnQgaW4gY2FzZSBvZiBlcnJvciAqLworCQkJCWludGVybmFs U3RhdGVtZW50ID0gZmFsc2U7CisKKwkJCQkvKiBSZXNldCBzdWIgc3RhdGVtZW50IHRvdGFs ICovCisJCQkJc3Vic3RhdGVtZW50VG90YWwgPSAwOworCisJCQkJLyogUmVzZXQgc3RhdGVt ZW50IGxvZ2dlZCBmbGFnIHRvdGFsICovCisJCQkJc3RhdGVtZW50TG9nZ2VkID0gZmFsc2U7 CisJCQl9CisKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIFN0aWxsIGxvb2tpbmcsIHRlc3Qg dGhlIG5leHQgaXRlbSAqLworCQluZXh0SXRlbSA9IG5leHRJdGVtLT5uZXh0OworCX0KK30K KworLyoKKyAqIFB1c2ggYSBuZXcgYXVkaXQgZXZlbnQgb250byB0aGUgc3RhY2sgYW5kIGNy ZWF0ZSBhIG5ldyBtZW1vcnkgY29udGV4dCB0bworICogc3RvcmUgaXQuCisgKi8KK3N0YXRp YyBBdWRpdEV2ZW50U3RhY2tJdGVtICoKK3N0YWNrX3B1c2goKQoreworCU1lbW9yeUNvbnRl eHQgY29udGV4dEF1ZGl0OworCU1lbW9yeUNvbnRleHQgY29udGV4dE9sZDsKKwlBdWRpdEV2 ZW50U3RhY2tJdGVtICpzdGFja0l0ZW07CisKKwkvKiBDcmVhdGUgYSBuZXcgbWVtb3J5IGNv bnRleHQgKi8KKwljb250ZXh0QXVkaXQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVu dE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICJwZ19hdWRpdCBzdGFjayBjb250ZXh0IiwK KwkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkJCSBBTExP Q1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxUX01B WFNJWkUpOworCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dEF1 ZGl0KTsKKworCS8qIEFsbG9jYXRlIHRoZSBzdGFjayBpdGVtICovCisJc3RhY2tJdGVtID0g cGFsbG9jMChzaXplb2YoQXVkaXRFdmVudFN0YWNrSXRlbSkpOworCisJLyogU3RvcmUgbWVt b3J5IGNvbnRleHRzICovCisJc3RhY2tJdGVtLT5jb250ZXh0QXVkaXQgPSBjb250ZXh0QXVk aXQ7CisKKwkvKiBJZiBpdGVtIGFscmVhZHkgb24gc3RhY2sgdGhlbiBwdXNoIGl0IGRvd24g Ki8KKwlpZiAoYXVkaXRFdmVudFN0YWNrICE9IE5VTEwpCisJCXN0YWNrSXRlbS0+bmV4dCA9 IGF1ZGl0RXZlbnRTdGFjazsKKwllbHNlCisJCXN0YWNrSXRlbS0+bmV4dCA9IE5VTEw7CisK KwkvKgorCSAqIENyZWF0ZSB0aGUgdW5pcXVlIHN0YWNrSWQgLSB1c2VkIHRvIGtlZXAgdGhl IHN0YWNrIHNhbmUgd2hlbiBtZW1vcnkKKwkgKiBjb250ZXh0cyBhcmUgZnJlZWQgdW5leHBl Y3RlZGx5LgorCSAqLworCXN0YWNrSXRlbS0+c3RhY2tJZCA9ICsrc3RhY2tUb3RhbDsKKwor CS8qCisJICogU2V0dXAgYSBjYWxsYmFjayBpbiBjYXNlIGFuIGVycm9yIGhhcHBlbnMuICBz dGFja19mcmVlKCkgd2lsbCB0cnVuY2F0ZQorCSAqIHRoZSBzdGFjayBhdCB0aGlzIGl0ZW0u CisJICovCisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suZnVuYyA9IHN0YWNrX2ZyZWU7 CisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suYXJnID0gKHZvaWQgKilzdGFja0l0ZW07 CisJTWVtb3J5Q29udGV4dFJlZ2lzdGVyUmVzZXRDYWxsYmFjayhjb250ZXh0QXVkaXQsCisJ CQkJCQkJCQkgICAmc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2spOworCisJLyogUHVzaCBp dGVtIG9uIHRoZSBzdGFjayAqLworCWF1ZGl0RXZlbnRTdGFjayA9IHN0YWNrSXRlbTsKKwor CS8qIFJldHVybiB0byB0aGUgb2xkIG1lbW9yeSBjb250ZXh0ICovCisJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKGNvbnRleHRPbGQpOworCisJLyogUmV0dXJuIHRoZSBzdGFjayBpdGVtICov CisJcmV0dXJuIHN0YWNrSXRlbTsKK30KKworLyoKKyAqIFBvcCBhbiBhdWRpdCBldmVudCBm cm9tIHRoZSBzdGFjayBieSBkZWxldGluZyB0aGUgbWVtb3J5IGNvbnRleHQgdGhhdAorICog Y29udGFpbnMgaXQuICBUaGUgY2FsbGJhY2sgdG8gc3RhY2tfZnJlZSgpIGRvZXMgdGhlIGFj dHVhbCBwb3AuCisgKi8KK3N0YXRpYyB2b2lkCitzdGFja19wb3AoaW50NjQgc3RhY2tJZCkK K3sKKwkvKiBNYWtlIHN1cmUgd2hhdCB3ZSB3YW50IHRvIGRlbGV0ZSBpcyBhdCB0aGUgdG9w IG9mIHRoZSBzdGFjayAqLworCWlmIChhdWRpdEV2ZW50U3RhY2sgIT0gTlVMTCAmJiBhdWRp dEV2ZW50U3RhY2stPnN0YWNrSWQgPT0gc3RhY2tJZCkKKwl7CisJCU1lbW9yeUNvbnRleHRE ZWxldGUoYXVkaXRFdmVudFN0YWNrLT5jb250ZXh0QXVkaXQpOworCX0KKwllbHNlCisJewor CQllbG9nKEVSUk9SLCAicGdfYXVkaXQgc3RhY2sgaXRlbSAlbGQgbm90IGZvdW5kIG9uIHRv cCAtIGNhbm5vdCBwb3AiLAorCQkJCQlzdGFja0lkKTsKKwl9Cit9CisKKy8qCisgKiBDaGVj ayB0aGF0IGFuIGl0ZW0gaXMgb24gdGhlIHN0YWNrLiAgSWYgbm90IGFuIGVycm9yIHdpbGwg YmUgcmFpc2VkIHNpbmNlCisgKiB0aGlzIGlzIGEgYmFkIHN0YXRlIHRvIGJlIGluLCBhbmQg aXQgbWlnaHQgbWVhbiBhdWRpdCByZWNvcmRzIGFyZSBiZWluZworICogbG9zdC4KKyAqLwor c3RhdGljIHZvaWQKK3N0YWNrX3ZhbGlkKGludDY0IHN0YWNrSWQpCit7CisJQXVkaXRFdmVu dFN0YWNrSXRlbSAqbmV4dEl0ZW0gPSBhdWRpdEV2ZW50U3RhY2s7CisKKwlpZiAobmV4dEl0 ZW0gPT0gTlVMTCkKKwl7CisJCWVsb2coRVJST1IsICJwZ19hdWRpdCBzdGFjayBpdGVtICVs ZCBub3QgZm91bmQgLSBzdGFjayBpcyBlbXB0eSIsCisJCQkJCXN0YWNrSWQpOworCX0KKwor CS8qIE9ubHkgcHJvY2VzcyBpZiB0aGUgc3RhY2sgY29udGFpbnMgaXRlbXMgKi8KKwl3aGls ZSAobmV4dEl0ZW0gIT0gTlVMTCkKKwl7CisJCS8qIENoZWNrIGlmIHRoaXMgaXRlbSBtYXRj aGVzIHRoZSBpdGVtIHNlYXJjaGVkIGZvciAqLworCQlpZiAobmV4dEl0ZW0tPnN0YWNrSWQg PT0gc3RhY2tJZCkKKwkJeworCQkJcmV0dXJuOworCQl9CisKKwkJLyogU3RpbGwgbG9va2lu ZywgdGVzdCB0aGUgbmV4dCBpdGVtICovCisJCW5leHRJdGVtID0gbmV4dEl0ZW0tPm5leHQ7 CisJfQorCisJZWxvZyhFUlJPUiwgInBnX2F1ZGl0IHN0YWNrIGl0ZW0gJWxkIG5vdCBmb3Vu ZCAtIHRvcCBvZiBzdGFjayBpcyAlbGQiLAorCQkJCXN0YWNrSWQsIGF1ZGl0RXZlbnRTdGFj ay0+c3RhY2tJZCk7Cit9CisKKy8qCisgKiBBcHBlbmRzIGEgcHJvcGVybHkgcXVvdGVkIENT ViBmaWVsZCB0byBTdHJpbmdJbmZvLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3ZhbGlk X2NzdihTdHJpbmdJbmZvRGF0YSAqYnVmZmVyLCBjb25zdCBjaGFyICphcHBlbmRTdHIpCit7 CisJY29uc3QgY2hhciAqcENoYXI7CisKKwkvKgorCSAqIElmIHRoZSBhcHBlbmQgc3RyaW5n IGlzIG51bGwgdGhlbiByZXR1cm4uICBOVUxMIGZpZWxkcyBhcmUgbm90IHF1b3RlZAorCSAq IGluIENTVgorCSAqLworCWlmIChhcHBlbmRTdHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ LyogT25seSBmb3JtYXQgZm9yIENTViBpZiBhcHBlbmRTdHIgY29udGFpbnM6ICIsIGNvbW1h LCBcbiwgXHIgKi8KKwlpZiAoc3Ryc3RyKGFwcGVuZFN0ciwgIiwiKSB8fCBzdHJzdHIoYXBw ZW5kU3RyLCAiXCIiKSB8fAorCQlzdHJzdHIoYXBwZW5kU3RyLCAiXG4iKSB8fCBzdHJzdHIo YXBwZW5kU3RyLCAiXHIiKSkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVm ZmVyLCAnIicpOworCisJCWZvciAocENoYXIgPSBhcHBlbmRTdHI7ICpwQ2hhcjsgcENoYXIr KykKKwkJeworCQkJaWYgKCpwQ2hhciA9PSAnIicpIC8qIGRvdWJsZSBzaW5nbGUgcXVvdGVz ICovCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICpwQ2hhcik7CisK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmZmVyLCAqcENoYXIpOworCQl9CisK KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICciJyk7CisJfQorCS8qIEVs c2UganVzdCBhcHBlbmQgKi8KKwllbHNlCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZmZlciwgYXBwZW5kU3RyKTsKKwl9Cit9CisKKy8qCisgKiBUYWtlcyBhbiBBdWRpdEV2 ZW50LCBjbGFzc2lmaWVzIGl0LCB0aGVuIGxvZ3MgaXQgaWYgcGVybWlzc2lvbnMgd2VyZSBn cmFudGVkCisgKiB2aWEgcm9sZXMgb3IgaWYgdGhlIHN0YXRlbWVudCBiZWxvbmdzIGluIGEg Y2xhc3MgdGhhdCBpcyBiZWluZyBsb2dnZWQuCisgKi8KK3N0YXRpYyB2b2lkCitsb2dfYXVk aXRfZXZlbnQoQXVkaXRFdmVudFN0YWNrSXRlbSAqc3RhY2tJdGVtKQoreworCU1lbW9yeUNv bnRleHQgY29udGV4dE9sZDsKKwlTdHJpbmdJbmZvRGF0YSBhdWRpdFN0cjsKKworCS8qIEJ5 IGRlZmF1bHQgcHV0IGV2ZXJ5dGhpbmcgaW4gdGhlIE1JU0MgY2xhc3MuICovCisJZW51bSBM b2dDbGFzcyBjbGFzcyA9IExPR19NSVNDOworCWNvbnN0IGNoYXIgKmNsYXNzTmFtZSA9IENM QVNTX01JU0M7CisKKwkvKiBDbGFzc2lmeSB0aGUgc3RhdGVtZW50IHVzaW5nIGxvZyBzdG10 IGxldmVsIGFuZCB0aGUgY29tbWFuZCB0YWcgKi8KKwlzd2l0Y2ggKHN0YWNrSXRlbS0+YXVk aXRFdmVudC5sb2dTdG10TGV2ZWwpCisJeworCQkvKiBBbGwgbW9kcyBnbyBpbiBXUklURSBj bGFzcyAqLworCQljYXNlIExPR1NUTVRfTU9EOgorCQkJY2xhc3NOYW1lID0gQ0xBU1NfV1JJ VEU7CisJCQljbGFzcyA9IExPR19XUklURTsKKwkJCWJyZWFrOworCisJCS8qIFNlcGFyYXRl IFJPTEUgZnJvbSBvdGhlciBEREwgc3RhdGVtZW50cyAqLworCQljYXNlIExPR1NUTVRfRERM OgorCQkJLyogSWRlbnRpZnkgcm9sZSBzdGF0ZW1lbnRzICovCisJCQlpZiAoc3RhY2tJdGVt LT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9HcmFudFN0bXQgfHwKKwkJCQlzdGFja0l0 ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBUX0dyYW50Um9sZVN0bXQgfHwKKwkJCQlz dGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBUX0NyZWF0ZVJvbGVTdG10IHx8 CisJCQkJKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID09IFRfUmVuYW1lU3Rt dCAmJgorCQkJCSBwZ19zdHJjYXNlY21wKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5k LAorCQkJCQkJCSAgIENPTU1BTkRfQUxURVJfUk9MRSkgPT0gMCkgfHwKKwkJCQkoc3RhY2tJ dGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9Ecm9wU3RtdCAmJgorCQkJCSBwZ19z dHJjYXNlY21wKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kLAorCQkJCQkJCSAgIENP TU1BTkRfRFJPUF9ST0xFKSA9PSAwKSB8fAorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5j b21tYW5kVGFnID09IFRfRHJvcFJvbGVTdG10IHx8CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2 ZW50LmNvbW1hbmRUYWcgPT0gVF9BbHRlclJvbGVTdG10IHx8CisJCQkJc3RhY2tJdGVtLT5h dWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9BbHRlclJvbGVTZXRTdG10KQorCQkJeworCQkJ CWNsYXNzTmFtZSA9IENMQVNTX1JPTEU7CisJCQkJY2xhc3MgPSBMT0dfUk9MRTsKKwkJCX0K KwkJCS8qIEVsc2UgbG9nIGFzIERETCAqLworCQkJZWxzZQorCQkJeworCQkJCWNsYXNzTmFt ZSA9IENMQVNTX0RETDsKKwkJCQljbGFzcyA9IExPR19EREw7CisJCQl9CisKKwkJLyogRmln dXJlIG91dCB0aGUgcmVzdCAqLworCQljYXNlIExPR1NUTVRfQUxMOgorCQkJc3dpdGNoIChz dGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZykKKwkJCXsKKwkJCQkvKiBSRUFEIHN0 YXRlbWVudHMgKi8KKwkJCQljYXNlIFRfQ29weVN0bXQ6CisJCQkJY2FzZSBUX1NlbGVjdFN0 bXQ6CisJCQkJY2FzZSBUX1ByZXBhcmVTdG10OgorCQkJCWNhc2UgVF9QbGFubmVkU3RtdDoK KwkJCQljYXNlIFRfRXhlY3V0ZVN0bXQ6CisJCQkJCWNsYXNzTmFtZSA9IENMQVNTX1JFQUQ7 CisJCQkJCWNsYXNzID0gTE9HX1JFQUQ7CisJCQkJCWJyZWFrOworCisJCQkJLyogUmVpbmRl eCBpcyBEREwgKGJlY2F1c2UgY2x1c3RlciBpcyBEREwpICovCisJCQkJY2FzZSBUX1JlaW5k ZXhTdG10OgorCQkJCQljbGFzc05hbWUgPSBDTEFTU19EREw7CisJCQkJCWNsYXNzID0gTE9H X0RETDsKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiBGVU5DVElPTiBzdGF0ZW1lbnRzICovCisJ CQkJY2FzZSBUX0RvU3RtdDoKKwkJCQkJY2xhc3NOYW1lID0gQ0xBU1NfRlVOQ1RJT047CisJ CQkJCWNsYXNzID0gTE9HX0ZVTkNUSU9OOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6 CisJCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBMT0dTVE1UX05PTkU6 CisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIE9ubHkgbG9nIHRoZSBzdGF0ZW1lbnQgaWY6 CisJICoKKwkgKiAxLiBJZiBwZXJtaXNzaW9ucyB3ZXJlIGdyYW50ZWQgdmlhIHJvbGVzCisJ ICogMi4gVGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIGEgY2xhc3MgdGhhdCBpcyBiZWluZyBs b2dnZWQKKwkgKi8KKwlpZiAoIXN0YWNrSXRlbS0+YXVkaXRFdmVudC5ncmFudGVkICYmICEo YXVkaXRMb2dCaXRtYXAgJiBjbGFzcykpCisJCXJldHVybjsKKworCS8qIFVzZSBhdWRpdCBt ZW1vcnkgY29udGV4dCBpbiBjYXNlIHNvbWV0aGluZyBpcyBub3QgZnJlZWQgKi8KKwljb250 ZXh0T2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YWNrSXRlbS0+Y29udGV4dEF1ZGl0 KTsKKworCS8qIFNldCBzdGF0ZW1lbnQgYW5kIHN1YnN0YXRlbWVudCBJZHMgKi8KKwlpZiAo c3RhY2tJdGVtLT5hdWRpdEV2ZW50LnN0YXRlbWVudElkID09IDApCisJeworCQkvKiBJZiBu b3RoaW5nIGhhcyBiZWVuIGxvZ2dlZCB5ZXQgdGhlbiBjcmVhdGUgYSBuZXcgc3RhdGVtZW50 IElkICovCisJCWlmICghc3RhdGVtZW50TG9nZ2VkKQorCQl7CisJCQlzdGF0ZW1lbnRUb3Rh bCsrOworCQkJc3RhdGVtZW50TG9nZ2VkID0gdHJ1ZTsKKwkJfQorCisJCXN0YWNrSXRlbS0+ YXVkaXRFdmVudC5zdGF0ZW1lbnRJZCA9IHN0YXRlbWVudFRvdGFsOworCQlzdGFja0l0ZW0t PmF1ZGl0RXZlbnQuc3Vic3RhdGVtZW50SWQgPSArK3N1YnN0YXRlbWVudFRvdGFsOworCX0K KworCS8qIENyZWF0ZSB0aGUgYXVkaXQgc3RyaW5nICovCisJaW5pdFN0cmluZ0luZm8oJmF1 ZGl0U3RyKTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQuY29tbWFuZCk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmYXVkaXRT dHIsICcsJyk7CisKKwlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0ciwgc3RhY2tJdGVtLT5h dWRpdEV2ZW50Lm9iamVjdFR5cGUpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJmF1 ZGl0U3RyLCAnLCcpOworCisJYXBwZW5kX3ZhbGlkX2NzdigmYXVkaXRTdHIsIHN0YWNrSXRl bS0+YXVkaXRFdmVudC5vYmplY3ROYW1lKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3Jv KCZhdWRpdFN0ciwgJywnKTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRleHQpOworCisJLyogSWYgcGFyYW1ldGVyIGxv Z2dpbmcgaXMgdHVybmVkIG9uIGFuZCB0aGVyZSBhcmUgcGFyYW1ldGVycyB0byBsb2cgKi8K KwlpZiAoYXVkaXRMb2dCaXRtYXAgJiBMT0dfUEFSQU1FVEVSICYmCisJCXN0YWNrSXRlbS0+ YXVkaXRFdmVudC5wYXJhbUxpc3QgIT0gTlVMTCAmJgorCQlzdGFja0l0ZW0tPmF1ZGl0RXZl bnQucGFyYW1MaXN0LT5udW1QYXJhbXMgPiAwICYmCisJCSFJc0Fib3J0ZWRUcmFuc2FjdGlv bkJsb2NrU3RhdGUoKSkKKwl7CisJCVBhcmFtTGlzdEluZm8gcGFyYW1MaXN0ID0gc3RhY2tJ dGVtLT5hdWRpdEV2ZW50LnBhcmFtTGlzdDsKKwkJaW50IHBhcmFtSWR4OworCisJCS8qIEl0 ZXJhdGUgdGhyb3VnaCBhbGwgcGFyYW1zICovCisJCWZvciAocGFyYW1JZHggPSAwOyBwYXJh bUlkeCA8IHBhcmFtTGlzdC0+bnVtUGFyYW1zOyBwYXJhbUlkeCsrKQorCQl7CisJCQlQYXJh bUV4dGVybkRhdGEgKnBybSA9ICZwYXJhbUxpc3QtPnBhcmFtc1twYXJhbUlkeF07CisJCQlP aWQgCQkJIHR5cGVPdXRwdXQ7CisJCQlib29sIAkJCSB0eXBlSXNWYXJMZW5hOworCQkJY2hh ciAJCQkqcGFyYW1TdHI7CisKKwkJCS8qIEFkZCBhIGNvbW1hIGZvciBlYWNoIHBhcmFtICov CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZhdWRpdFN0ciwgJywnKTsKKworCQkJ LyogU2tpcCB0aGlzIHBhcmFtIGlmIG51bGwgb3IgaWYgb2lkIGlzIGludmFsaWQgKi8KKwkJ CWlmIChwcm0tPmlzbnVsbCB8fCAhT2lkSXNWYWxpZChwcm0tPnB0eXBlKSkKKwkJCXsKKwkJ CQljb250aW51ZTsKKwkJCX0KKworCQkJLyogT3V0cHV0IHRoZSBzdHJpbmcgKi8KKwkJCWdl dFR5cGVPdXRwdXRJbmZvKHBybS0+cHR5cGUsICZ0eXBlT3V0cHV0LCAmdHlwZUlzVmFyTGVu YSk7CisJCQlwYXJhbVN0ciA9IE9pZE91dHB1dEZ1bmN0aW9uQ2FsbCh0eXBlT3V0cHV0LCBw cm0tPnZhbHVlKTsKKworCQkJYXBwZW5kX3ZhbGlkX2NzdigmYXVkaXRTdHIsIHBhcmFtU3Ry KTsKKwkJCXBmcmVlKHBhcmFtU3RyKTsKKwkJfQorCX0KKworCS8qIExvZyB0aGUgYXVkaXQg c3RyaW5nICovCisJZWxvZyhhdWRpdExvZ05vdGljZSA/IE5PVElDRSA6IExPRywKKwkJICJB VURJVDogJXMsJWxkLCVsZCwlcywlcyIsCisJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuZ3Jh bnRlZCA/CisJCQkJQVVESVRfVFlQRV9PQkpFQ1QgOiBBVURJVF9UWVBFX1NFU1NJT04sCisJ CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuc3RhdGVtZW50SWQsCisJCQlzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQuc3Vic3RhdGVtZW50SWQsCisJCQljbGFzc05hbWUsIGF1ZGl0U3RyLmRhdGEp OworCisJLyogTWFyayB0aGUgYXVkaXQgZXZlbnQgYXMgbG9nZ2VkICovCisJc3RhY2tJdGVt LT5hdWRpdEV2ZW50LmxvZ2dlZCA9IHRydWU7CisKKwkvKiBTd2l0Y2ggYmFjayB0byB0aGUg b2xkIG1lbW9yeSBjb250ZXh0ICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHRP bGQpOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIHJvbGUgb3IgYW55IGluaGVyaXRlZCBy b2xlIGhhcyBhbnkgcGVybWlzc2lvbiBpbiB0aGUgbWFzay4gIFRoZQorICogcHVibGljIHJv bGUgaXMgZXhjbHVkZWQgZnJvbSB0aGlzIGNoZWNrIGFuZCBzdXBlcnVzZXIgcGVybWlzc2lv bnMgYXJlIG5vdAorICogY29uc2lkZXJlZC4KKyAqLworc3RhdGljIGJvb2wKK2F1ZGl0X29u X2FjbChEYXR1bSBhY2xEYXR1bSwKKwkJCSBPaWQgYXVkaXRPaWQsCisJCQkgQWNsTW9kZSBt YXNrKQoreworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCUFjbAkJICAgKmFjbDsKKwlBY2xJ dGVtCSAgICphY2xJdGVtRGF0YTsKKwlpbnQJCQlhY2xJbmRleDsKKwlpbnQJCQlhY2xUb3Rh bDsKKworCS8qIERldG9hc3QgY29sdW1uJ3MgQUNMIGlmIG5lY2Vzc2FyeSAqLworCWFjbCA9 IERhdHVtR2V0QWNsUChhY2xEYXR1bSk7CisKKwkvKiBHZXQgdGhlIGFjbCBsaXN0IGFuZCB0 b3RhbCAqLworCWFjbFRvdGFsID0gQUNMX05VTShhY2wpOworCWFjbEl0ZW1EYXRhID0gQUNM X0RBVChhY2wpOworCisJLyogQ2hlY2sgcHJpdmlsZWdlcyBncmFudGVkIGRpcmVjdGx5IHRv IGF1ZGl0T2lkICovCisJZm9yIChhY2xJbmRleCA9IDA7IGFjbEluZGV4IDwgYWNsVG90YWw7 IGFjbEluZGV4KyspCisJeworCQlBY2xJdGVtICphY2xJdGVtID0gJmFjbEl0ZW1EYXRhW2Fj bEluZGV4XTsKKworCQlpZiAoYWNsSXRlbS0+YWlfZ3JhbnRlZSA9PSBhdWRpdE9pZCAmJgor CQkJYWNsSXRlbS0+YWlfcHJpdnMgJiBtYXNrKQorCQl7CisJCQlyZXN1bHQgPSB0cnVlOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIHByaXZpbGVnZXMgZ3JhbnRl ZCBpbmRpcmVjdGx5IHZpYSByb2xlIG1lbWJlcnNoaXBzLiBXZSBkbyB0aGlzIGluCisJICog YSBzZXBhcmF0ZSBwYXNzIHRvIG1pbmltaXplIGV4cGVuc2l2ZSBpbmRpcmVjdCBtZW1iZXJz aGlwIHRlc3RzLiAgSW4KKwkgKiBwYXJ0aWN1bGFyLCBpdCdzIHdvcnRoIHRlc3Rpbmcgd2hl dGhlciBhIGdpdmVuIEFDTCBlbnRyeSBncmFudHMgYW55CisJICogcHJpdmlsZWdlcyBzdGls bCBvZiBpbnRlcmVzdCBiZWZvcmUgd2UgcGVyZm9ybSB0aGUgaGFzX3ByaXZzX29mX3JvbGUK KwkgKiB0ZXN0LgorCSAqLworCWlmICghcmVzdWx0KQorCXsKKwkJZm9yIChhY2xJbmRleCA9 IDA7IGFjbEluZGV4IDwgYWNsVG90YWw7IGFjbEluZGV4KyspCisJCXsKKwkJCUFjbEl0ZW0g KmFjbEl0ZW0gPSAmYWNsSXRlbURhdGFbYWNsSW5kZXhdOworCisJCQkvKiBEb24ndCB0ZXN0 IHB1YmxpYyBvciBhdWRpdE9pZCAoaXQgaGFzIGJlZW4gdGVzdGVkIGFscmVhZHkpICovCisJ CQlpZiAoYWNsSXRlbS0+YWlfZ3JhbnRlZSA9PSBBQ0xfSURfUFVCTElDIHx8CisJCQkJYWNs SXRlbS0+YWlfZ3JhbnRlZSA9PSBhdWRpdE9pZCkKKwkJCQljb250aW51ZTsKKworCQkJLyoK KwkJCSAqIENoZWNrIHRoYXQgdGhlIHJvbGUgaGFzIHRoZSByZXF1aXJlZCBwcml2aWxlZ2Vz IGFuZCB0aGF0IGl0IGlzCisJCQkgKiBpbmhlcml0ZWQgYnkgYXVkaXRPaWQuCisJCQkgKi8K KwkJCWlmIChhY2xJdGVtLT5haV9wcml2cyAmIG1hc2sgJiYKKwkJCQloYXNfcHJpdnNfb2Zf cm9sZShhdWRpdE9pZCwgYWNsSXRlbS0+YWlfZ3JhbnRlZSkpCisJCQl7CisJCQkJcmVzdWx0 ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIGlmIHdlIGhhdmUg YSBkZXRvYXN0ZWQgY29weSwgZnJlZSBpdCAqLworCWlmIChhY2wgJiYgKFBvaW50ZXIpIGFj bCAhPSBEYXR1bUdldFBvaW50ZXIoYWNsRGF0dW0pKQorCQlwZnJlZShhY2wpOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrIGlmIGEgcm9sZSBoYXMgYW55IG9mIHRo ZSBwZXJtaXNzaW9ucyBpbiB0aGUgbWFzayBvbiBhIHJlbGF0aW9uLgorICovCitzdGF0aWMg Ym9vbAorYXVkaXRfb25fcmVsYXRpb24oT2lkIHJlbE9pZCwKKwkJCQkgIE9pZCBhdWRpdE9p ZCwKKwkJCQkgIEFjbE1vZGUgbWFzaykKK3sKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKwlI ZWFwVHVwbGUJdHVwbGU7CisJRGF0dW0JCWFjbERhdHVtOworCWJvb2wJCWlzTnVsbDsKKwor CS8qIEdldCByZWxhdGlvbiB0dXBsZSBmcm9tIHBnX2NsYXNzICovCisJdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbE9pZCkpOworCisJLyog UmV0dXJuIGZhbHNlIGlmIHR1cGxlIGlzIG5vdCB2YWxpZCAqLworCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0dXBsZSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEdldCB0aGUgcmVsYXRp b24ncyBBQ0wgKi8KKwlhY2xEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxl LCBBbnVtX3BnX2NsYXNzX3JlbGFjbCwKKwkJCQkJCQkgICAmaXNOdWxsKTsKKworCS8qIElm IG5vdCBudWxsIHRoZW4gdGVzdCAqLworCWlmICghaXNOdWxsKQorCQlyZXN1bHQgPSBhdWRp dF9vbl9hY2woYWNsRGF0dW0sIGF1ZGl0T2lkLCBtYXNrKTsKKworCS8qIEZyZWUgdGhlIHJl bGF0aW9uIHR1cGxlICovCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVybiBy ZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHJvbGUgaGFzIGFueSBvZiB0aGUgcGVy bWlzc2lvbnMgaW4gdGhlIG1hc2sgb24gYW4gYXR0cmlidXRlLgorICovCitzdGF0aWMgYm9v bAorYXVkaXRfb25fYXR0cmlidXRlKE9pZCByZWxPaWQsCisJCQkJICAgQXR0ck51bWJlciBh dHROdW0sCisJCQkJICAgT2lkIGF1ZGl0T2lkLAorCQkJCSAgIEFjbE1vZGUgbWFzaykKK3sK Kwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKwlIZWFwVHVwbGUJYXR0VHVwbGU7CisJRGF0dW0J CWFjbERhdHVtOworCWJvb2wJCWlzTnVsbDsKKworCS8qIEdldCB0aGUgYXR0cmlidXRlJ3Mg QUNMICovCisJYXR0VHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLAorCQkJCQkJCSAg IE9iamVjdElkR2V0RGF0dW0ocmVsT2lkKSwKKwkJCQkJCQkgICBJbnQxNkdldERhdHVtKGF0 dE51bSkpOworCisJLyogUmV0dXJuIGZhbHNlIGlmIGF0dHJpYnV0ZSBpcyBpbnZhbGlkICov CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dFR1cGxlKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyogT25seSBwcm9jZXNzIGF0dHJpYnV0ZSB0aGF0IGhhdmUgbm90IGJlZW4gZHJvcHBl ZCAqLworCWlmICghKChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dFR1cGxlKSkt PmF0dGlzZHJvcHBlZCkKKwl7CisJCWFjbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKEFUVE5V TSwgYXR0VHVwbGUsIEFudW1fcGdfYXR0cmlidXRlX2F0dGFjbCwKKwkJCQkJCQkJICAgJmlz TnVsbCk7CisKKwkJaWYgKCFpc051bGwpCisJCQlyZXN1bHQgPSBhdWRpdF9vbl9hY2woYWNs RGF0dW0sIGF1ZGl0T2lkLCBtYXNrKTsKKwl9CisKKwkvKiBGcmVlIGF0dHJpYnV0ZSAqLwor CVJlbGVhc2VTeXNDYWNoZShhdHRUdXBsZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisv KgorICogQ2hlY2sgaWYgYSByb2xlIGhhcyBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIGluIHRo ZSBtYXNrIG9uIGFuIGF0dHJpYnV0ZSBpbgorICogdGhlIHByb3ZpZGVkIHNldC4gIElmIHRo ZSBzZXQgaXMgZW1wdHksIHRoZW4gYWxsIHZhbGlkIGF0dHJpYnV0ZXMgaW4gdGhlCisgKiBy ZWxhdGlvbiB3aWxsIGJlIHRlc3RlZC4KKyAqLworc3RhdGljIGJvb2wKK2F1ZGl0X29uX2Fu eV9hdHRyaWJ1dGUoT2lkIHJlbE9pZCwKKwkJCQkJICAgT2lkIGF1ZGl0T2lkLAorCQkJCQkg ICBCaXRtYXBzZXQgKmF0dHJpYnV0ZVNldCwKKwkJCQkJICAgQWNsTW9kZSBtb2RlKQorewor CWJvb2wgcmVzdWx0ID0gZmFsc2U7CisJQXR0ck51bWJlciBjb2w7CisJQml0bWFwc2V0ICp0 bXBTZXQ7CisKKwkvKiBJZiBibXMgaXMgZW1wdHkgdGhlbiBjaGVjayBmb3IgYW55IGNvbHVt biBtYXRjaCAqLworCWlmIChibXNfaXNfZW1wdHkoYXR0cmlidXRlU2V0KSkKKwl7CisJCUhl YXBUdXBsZQljbGFzc1R1cGxlOworCQlBdHRyTnVtYmVyCW5hdHRyczsKKwkJQXR0ck51bWJl cgljdXJyX2F0dDsKKworCQkvKiBHZXQgcmVsYXRpb24gdG8gZGV0ZXJtaW5lIHRvdGFsIGF0 dHJpYnV0ZSAqLworCQljbGFzc1R1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2Jq ZWN0SWRHZXREYXR1bShyZWxPaWQpKTsKKworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2xh c3NUdXBsZSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJbmF0dHJzID0gKChGb3JtX3BnX2Ns YXNzKSBHRVRTVFJVQ1QoY2xhc3NUdXBsZSkpLT5yZWxuYXR0czsKKwkJUmVsZWFzZVN5c0Nh Y2hlKGNsYXNzVHVwbGUpOworCisJCS8qIENoZWNrIGVhY2ggY29sdW1uICovCisJCWZvciAo Y3Vycl9hdHQgPSAxOyBjdXJyX2F0dCA8PSBuYXR0cnM7IGN1cnJfYXR0KyspCisJCXsKKwkJ CWlmIChhdWRpdF9vbl9hdHRyaWJ1dGUocmVsT2lkLCBjdXJyX2F0dCwgYXVkaXRPaWQsIG1v ZGUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJLyogYm1zX2ZpcnN0X21lbWJl ciBpcyBkZXN0cnVjdGl2ZSwgc28gbWFrZSBhIGNvcHkgYmVmb3JlIHVzaW5nIGl0LiAqLwor CXRtcFNldCA9IGJtc19jb3B5KGF0dHJpYnV0ZVNldCk7CisKKwkvKiBDaGVjayBlYWNoIGNv bHVtbiAqLworCXdoaWxlICgoY29sID0gYm1zX2ZpcnN0X21lbWJlcih0bXBTZXQpKSA+PSAw KQorCXsKKwkJY29sICs9IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisK KwkJaWYgKGNvbCAhPSBJbnZhbGlkQXR0ck51bWJlciAmJgorCQkJYXVkaXRfb25fYXR0cmli dXRlKHJlbE9pZCwgY29sLCBhdWRpdE9pZCwgbW9kZSkpCisJCXsKKwkJCXJlc3VsdCA9IHRy dWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEZyZWUgdGhlIGNvbHVtbiBzZXQgKi8K KwlibXNfZnJlZSh0bXBTZXQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENy ZWF0ZSBBdWRpdEV2ZW50cyBmb3IgU0VMRUNUL0RNTCBvcGVyYXRpb25zIHZpYSBleGVjdXRv ciBwZXJtaXNzaW9ucyBjaGVja3MuCisgKi8KK3N0YXRpYyB2b2lkCitsb2dfc2VsZWN0X2Rt bChPaWQgYXVkaXRPaWQsIExpc3QgKnJhbmdlVGFibHMpCit7CisJTGlzdENlbGwgKmxyOwor CWJvb2wgZmlyc3QgPSB0cnVlOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCS8qIERvIG5v dCBsb2cgaWYgdGhpcyBpcyBhbiBpbnRlcm5hbCBzdGF0ZW1lbnQgKi8KKwlpZiAoaW50ZXJu YWxTdGF0ZW1lbnQpCisJCXJldHVybjsKKworCWZvcmVhY2gobHIsIHJhbmdlVGFibHMpCisJ eworCQlPaWQgcmVsT2lkOworCQlSZWxhdGlvbiByZWw7CisJCVJhbmdlVGJsRW50cnkgKnJ0 ZSA9IGxmaXJzdChscik7CisKKwkJLyogV2Ugb25seSBjYXJlIGFib3V0IHRhYmxlcywgYW5k IGNhbiBpZ25vcmUgc3VicXVlcmllcyBldGMuICovCisJCWlmIChydGUtPnJ0ZWtpbmQgIT0g UlRFX1JFTEFUSU9OKQorCQkJY29udGludWU7CisKKwkJZm91bmQgPSB0cnVlOworCisJCS8q CisJCSAqIEZpbHRlciBvdXQgYW55IHN5c3RlbSByZWxhdGlvbnMKKwkJICovCisJCXJlbE9p ZCA9IHJ0ZS0+cmVsaWQ7CisJCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsT2lkLCBOb0xvY2sp OworCisJCWlmIChJc1N5c3RlbU5hbWVzcGFjZShSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwp KSkKKwkJeworCQkJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCQkJY29udGludWU7 CisJCX0KKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgcGFyc2V0 cmVlIGhlcmUsIHNvIHdlIGhhdmUgdG8gZ2VuZXJhdGUKKwkJICogdGhlIG5vZGUgdHlwZSwg b2JqZWN0IHR5cGUsIGFuZCBjb21tYW5kIHRhZyBieSBkZWNvZGluZworCQkgKiBydGUtPnJl cXVpcmVkUGVybXMgYW5kIHJ0ZS0+cmVsa2luZC4KKwkJICovCisJCWlmIChydGUtPnJlcXVp cmVkUGVybXMgJiBBQ0xfSU5TRVJUKQorCQl7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9NT0Q7CisJCQlhdWRpdEV2ZW50U3RhY2st PmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfSW5zZXJ0U3RtdDsKKwkJCWF1ZGl0RXZlbnRT dGFjay0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9JTlNFUlQ7CisJCX0KKwkJZWxz ZSBpZiAocnRlLT5yZXF1aXJlZFBlcm1zICYgQUNMX1VQREFURSkKKwkJeworCQkJYXVkaXRF dmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfTU9EOworCQkJ YXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX1VwZGF0ZVN0bXQ7 CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfVVBE QVRFOworCQl9CisJCWVsc2UgaWYgKHJ0ZS0+cmVxdWlyZWRQZXJtcyAmIEFDTF9ERUxFVEUp CisJCXsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBM T0dTVE1UX01PRDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kVGFn ID0gVF9EZWxldGVTdG10OworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1h bmQgPSBDT01NQU5EX0RFTEVURTsKKwkJfQorCQllbHNlIGlmIChydGUtPnJlcXVpcmVkUGVy bXMgJiBBQ0xfU0VMRUNUKQorCQl7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQu bG9nU3RtdExldmVsID0gTE9HU1RNVF9BTEw7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQuY29tbWFuZFRhZyA9IFRfU2VsZWN0U3RtdDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+ YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9TRUxFQ1Q7CisJCX0KKwkJZWxzZQorCQl7 CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RN VF9BTEw7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRf SW52YWxpZDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09N TUFORF9VTktOT1dOOworCQl9CisKKwkJLyoKKwkJICogRmlsbCB2YWx1ZXMgaW4gdGhlIGV2 ZW50IHN0cnVjdCB0aGF0IGFyZSByZXF1aXJlZCBmb3Igc2Vzc2lvbgorCQkgKiBsb2dnaW5n LgorCQkgKi8KKwkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQgPSBmYWxz ZTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydGUgdGhlbiBzZXNzaW9u IGxvZyB1bmxlc3MgYXVkaXRMb2dSZWxhdGlvbgorCQkgKiBpcyBzZXQuCisJCSAqLworCQlp ZiAoZmlyc3QgJiYgIWF1ZGl0TG9nUmVsYXRpb24pCisJCXsKKwkJCWxvZ19hdWRpdF9ldmVu dChhdWRpdEV2ZW50U3RhY2spOworCisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisKKwkJLyog R2V0IHRoZSByZWxhdGlvbiB0eXBlICovCisJCXN3aXRjaCAocnRlLT5yZWxraW5kKQorCQl7 CisJCQljYXNlIFJFTEtJTkRfUkVMQVRJT046CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRp dEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9UQUJMRTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVk aXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfSU5ERVg7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgUkVMS0lORF9TRVFVRU5DRToKKwkJCQlhdWRpdEV2ZW50U3RhY2st PmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1NFUVVFTkNFOwor CQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfVE9BU1RWQUxVRToKKwkJCQlhdWRpdEV2 ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1RP QVNUVkFMVUU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJCWF1 ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZ UEVfVklFVzsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBF OgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJ T0JKRUNUX1RZUEVfQ09NUE9TSVRFX1RZUEU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVM S0lORF9GT1JFSUdOX1RBQkxFOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5v YmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfRk9SRUlHTl9UQUJMRTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBSRUxLSU5EX01BVFZJRVc6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5h dWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9NQVRWSUVXOworCQkJ CWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVu dC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfVU5LTk9XTjsKKwkJCQlicmVhazsK KwkJfQorCisJCS8qIEdldCB0aGUgcmVsYXRpb24gbmFtZSAqLworCQlhdWRpdEV2ZW50U3Rh Y2stPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9CisJCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRp ZmllcihnZXRfbmFtZXNwYWNlX25hbWUoCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldE5hbWVz cGFjZShyZWwpKSwKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkp OworCQlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisKKwkJLyogUGVyZm9ybSBvYmpl Y3QgYXVkaXRpbmcgb25seSBpZiB0aGUgYXVkaXQgcm9sZSBpcyB2YWxpZCAqLworCQlpZiAo YXVkaXRPaWQgIT0gSW52YWxpZE9pZCkKKwkJeworCQkJQWNsTW9kZSBhdWRpdFBlcm1zID0K KwkJCQkoQUNMX1NFTEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfSU5TRVJUIHwgQUNMX0RFTEVU RSkgJgorCQkJCXJ0ZS0+cmVxdWlyZWRQZXJtczsKKworCQkJLyoKKwkJCSAqIElmIGFueSBv ZiB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgZm9yIHRoZSByZWxhdGlvbiBhcmUgZ3JhbnRl ZAorCQkJICogdG8gdGhlIGF1ZGl0IHJvbGUgdGhlbiBhdWRpdCB0aGUgcmVsYXRpb24KKwkJ CSAqLworCQkJaWYgKGF1ZGl0X29uX3JlbGF0aW9uKHJlbE9pZCwgYXVkaXRPaWQsIGF1ZGl0 UGVybXMpKQorCQkJeworCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVk ID0gdHJ1ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEVsc2UgY2hlY2sgaWYgdGhlIGF1ZGl0 IHJvbGUgaGFzIGNvbHVtbi1sZXZlbCBwZXJtaXNzaW9ucyBmb3IKKwkJCSAqIHNlbGVjdCwg aW5zZXJ0LCBvciB1cGRhdGUuCisJCQkgKi8KKwkJCWVsc2UgaWYgKGF1ZGl0UGVybXMgIT0g MCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIENoZWNrIHRoZSBzZWxlY3QgY29sdW1ucyB0byBz ZWUgaWYgdGhlIGF1ZGl0IHJvbGUgaGFzCisJCQkJICogcHJpdmVsZWdlcyBvbiBhbnkgb2Yg dGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAoYXVkaXRQZXJtcyAmIEFDTF9TRUxFQ1QpCisJCQkJ eworCQkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCA9CisJCQkJCQlh dWRpdF9vbl9hbnlfYXR0cmlidXRlKHJlbE9pZCwgYXVkaXRPaWQsCisJCQkJCQkJCQkJCSAg IHJ0ZS0+c2VsZWN0ZWRDb2xzLAorCQkJCQkJCQkJCQkgICBBQ0xfU0VMRUNUKTsKKwkJCQl9 CisKKwkJCQkvKgorCQkJCSAqIENoZWNrIHRoZSBtb2RpZmllZCBjb2x1bW5zIHRvIHNlZSBp ZiB0aGUgYXVkaXQgcm9sZSBoYXMKKwkJCQkgKiBwcml2aWxlZ2VzIG9uIGFueSBvZiB0aGVt LgorCQkJCSAqLworCQkJCWlmICghYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50 ZWQpCisJCQkJeworCQkJCQlhdWRpdFBlcm1zICY9IChBQ0xfSU5TRVJUIHwgQUNMX1VQREFU RSk7CisKKwkJCQkJaWYgKGF1ZGl0UGVybXMpCisJCQkJCXsKKwkJCQkJCWF1ZGl0RXZlbnRT dGFjay0+YXVkaXRFdmVudC5ncmFudGVkID0KKwkJCQkJCQlhdWRpdF9vbl9hbnlfYXR0cmli dXRlKHJlbE9pZCwgYXVkaXRPaWQsCisJCQkJCQkJCQkJCQkgICBydGUtPm1vZGlmaWVkQ29s cywKKwkJCQkJCQkJCQkJCSAgIGF1ZGl0UGVybXMpOworCQkJCQl9CisJCQkJfQorCQkJfQor CQl9CisKKwkJLyogRG8gcmVsYXRpb24gbGV2ZWwgbG9nZ2luZyBpZiBhIGdyYW50IHdhcyBm b3VuZCAqLworCQlpZiAoYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQpCisJ CXsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dnZWQgPSBmYWxzZTsKKwkJ CWxvZ19hdWRpdF9ldmVudChhdWRpdEV2ZW50U3RhY2spOworCQl9CisKKwkJLyogRG8gcmVs YXRpb24gbGV2ZWwgbG9nZ2luZyBpZiBhdWRpdExvZ1JlbGF0aW9uIGlzIHNldCAqLworCQlp ZiAoYXVkaXRMb2dSZWxhdGlvbikKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2 ZW50LmxvZ2dlZCA9IGZhbHNlOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lmdy YW50ZWQgPSBmYWxzZTsKKwkJCWxvZ19hdWRpdF9ldmVudChhdWRpdEV2ZW50U3RhY2spOwor CQl9CisKKwkJcGZyZWUoYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUp OworCX0KKworCS8qCisJICogSWYgbm8gdGFibGVzIHdlcmUgZm91bmQgdGhhdCBtZWFucyB0 aGF0IFJhbmdlVGJscyB3YXMgZW1wdHkgb3IgYWxsCisJICogcmVsYXRpb25zIHdlcmUgaW4g dGhlIHN5c3RlbSBzY2hlbWEuICBJbiB0aGF0IGNhc2Ugc3RpbGwgbG9nIGEKKwkgKiBzZXNz aW9uIHJlY29yZC4KKwkgKi8KKwlpZiAoIWZvdW5kKQorCXsKKwkJYXVkaXRFdmVudFN0YWNr LT5hdWRpdEV2ZW50LmdyYW50ZWQgPSBmYWxzZTsKKwkJYXVkaXRFdmVudFN0YWNrLT5hdWRp dEV2ZW50LmxvZ2dlZCA9IGZhbHNlOworCisJCWxvZ19hdWRpdF9ldmVudChhdWRpdEV2ZW50 U3RhY2spOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBBdWRpdEV2ZW50cyBmb3IgY2VydGFp biBraW5kcyBvZiBDUkVBVEUsIEFMVEVSLCBhbmQgREVMRVRFIHN0YXRlbWVudHMKKyAqIHdo ZXJlIHRoZSBvYmplY3QgY2FuIGJlIGxvZ2dlZC4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19j cmVhdGVfYWx0ZXJfZHJvcChPaWQgY2xhc3NJZCwKKwkJCQkJICBPaWQgb2JqZWN0SWQpCit7 CisJLyogT25seSBwZXJmb3JtIHdoZW4gY2xhc3MgaXMgcmVsYXRpb24gKi8KKwlpZiAoY2xh c3NJZCA9PSBSZWxhdGlvblJlbGF0aW9uSWQpCisJeworCQlSZWxhdGlvbiByZWw7CisJCUZv cm1fcGdfY2xhc3MgY2xhc3M7CisKKwkJLyogT3BlbiB0aGUgcmVsYXRpb24gKi8KKwkJcmVs ID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgTm9Mb2NrKTsKKworCQkvKiBGaWx0ZXIgb3V0 IGFueSBzeXN0ZW0gcmVsYXRpb25zICovCisJCWlmIChJc1RvYXN0TmFtZXNwYWNlKFJlbGF0 aW9uR2V0TmFtZXNwYWNlKHJlbCkpKQorCQl7CisJCQlyZWxhdGlvbl9jbG9zZShyZWwsIE5v TG9jayk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBHZXQgcmVsIGluZm9ybWF0aW9uIGFu ZCBjbG9zZSBpdCAqLworCQljbGFzcyA9IFJlbGF0aW9uR2V0Rm9ybShyZWwpOworCQlhdWRp dEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9CisJCQlxdW90ZV9xdWFsaWZp ZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoCisJCQkJCQkJCQkgICBSZWxhdGlv bkdldE5hbWVzcGFjZShyZWwpKSwKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCkpOworCQlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisKKwkJLyogU2V0 IG9iamVjdCB0eXBlIGJhc2VkIG9uIHJlbGtpbmQgKi8KKwkJc3dpdGNoIChjbGFzcy0+cmVs a2luZCkKKwkJeworCQkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQkJCWF1ZGl0RXZlbnRT dGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfVEFCTEU7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJCQlhdWRpdEV2ZW50 U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX0lOREVY OworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfU0VRVUVOQ0U6CisJCQkJYXVkaXRF dmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9T RVFVRU5DRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX1ZJRVc6CisJCQkJYXVk aXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQ RV9WSUVXOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6 CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlP QkpFQ1RfVFlQRV9DT01QT1NJVEVfVFlQRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxL SU5EX0ZPUkVJR05fVEFCTEU6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9i amVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9GT1JFSUdOX1RBQkxFOworCQkJCWJyZWFr OworCisJCQljYXNlIFJFTEtJTkRfTUFUVklFVzoKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1 ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX01BVFZJRVc7CisJCQkJ YnJlYWs7CisKKwkJCS8qCisJCQkgKiBBbnkgb3RoZXIgY2FzZXMgd2lsbCBiZSBoYW5kbGVk IGJ5IGxvZ191dGlsaXR5X2NvbW1hbmQoKS4KKwkJCSAqLworCQkJZGVmYXVsdDoKKwkJCQly ZXR1cm47CisJCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgQXVkaXRF dmVudHMgZm9yIG5vbi1jYXRhbG9nIGZ1bmN0aW9uIGV4ZWN1dGlvbiwgYXMgZGV0ZWN0ZWQg YnkKKyAqIGxvZ19vYmplY3RfYWNjZXNzKCkgYmVsb3cuCisgKi8KK3N0YXRpYyB2b2lkCits b2dfZnVuY3Rpb25fZXhlY3V0ZShPaWQgb2JqZWN0SWQpCit7CisJSGVhcFR1cGxlIHByb2N0 dXA7CisJRm9ybV9wZ19wcm9jIHByb2M7CisJQXVkaXRFdmVudFN0YWNrSXRlbSAqc3RhY2tJ dGVtOworCisJLyogR2V0IGluZm8gYWJvdXQgdGhlIGZ1bmN0aW9uLiAqLworCXByb2N0dXAg PSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCisJaWYgKCFwcm9jdHVwKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgZnVuY3Rpb24gJXUiLCBvYmplY3RJZCk7CisJcHJvYyA9IChGb3JtX3BnX3Byb2Mp IEdFVFNUUlVDVChwcm9jdHVwKTsKKworCS8qCisJICogTG9nZ2luZyBleGVjdXRpb24gb2Yg YWxsIHBnX2NhdGFsb2cgZnVuY3Rpb25zIHdvdWxkIG1ha2UgdGhlIGxvZworCSAqIHVudXNh Ymx5IG5vaXN5LgorCSAqLworCWlmIChJc1N5c3RlbU5hbWVzcGFjZShwcm9jLT5wcm9uYW1l c3BhY2UpKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCQlyZXR1cm47CisJ fQorCisJLyogUHVzaCBhdWRpdCBldmVudCBvbnRvIHRoZSBzdGFjayAqLworCXN0YWNrSXRl bSA9IHN0YWNrX3B1c2goKTsKKworCS8qIEdlbmVyYXRlIHRoZSBmdWxseS1xdWFsaWZpZWQg ZnVuY3Rpb24gbmFtZS4gKi8KKwlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9 CisJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9j LT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkgICBOYW1lU3RyKHByb2MtPnByb25hbWUpKTsK KwlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisKKwkvKiBMb2cgdGhlIGZ1bmN0aW9uIGNh bGwgKi8KKwlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9B TEw7CisJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0RvU3RtdDsKKwlz dGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfRVhFQ1VURTsKKwlzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9IE9CSkVDVF9UWVBFX0ZVTkNUSU9OOwor CXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGV4dCA9IHN0YWNrSXRlbS0+bmV4dC0+ YXVkaXRFdmVudC5jb21tYW5kVGV4dDsKKworCWxvZ19hdWRpdF9ldmVudChzdGFja0l0ZW0p OworCisJLyogUG9wIGF1ZGl0IGV2ZW50IGZyb20gdGhlIHN0YWNrICovCisJc3RhY2tfcG9w KHN0YWNrSXRlbS0+c3RhY2tJZCk7Cit9CisKKy8qCisgKiBMb2cgb2JqZWN0IGFjY2Vzc2Vz ICh3aGljaCBpcyBtb3JlIGFib3V0IERETCB0aGFuIERNTCwgZXZlbiB0aG91Z2ggaXQKKyAq IHNvdW5kcyBsaWtlIHRoZSBsYXR0ZXIpLgorICovCitzdGF0aWMgdm9pZAorbG9nX29iamVj dF9hY2Nlc3MoT2JqZWN0QWNjZXNzVHlwZSBhY2Nlc3MsCisJCQkJICBPaWQgY2xhc3NJZCwK KwkJCQkgIE9pZCBvYmplY3RJZCwKKwkJCQkgIGludCBzdWJJZCwKKwkJCQkgIHZvaWQgKmFy ZykKK3sKKwlzd2l0Y2ggKGFjY2VzcykKKwl7CisJCS8qIExvZyBleGVjdXRlICovCisJCWNh c2UgT0FUX0ZVTkNUSU9OX0VYRUNVVEU6CisJCQlpZiAoYXVkaXRMb2dCaXRtYXAgJiBMT0df RlVOQ1RJT04pCisJCQkJbG9nX2Z1bmN0aW9uX2V4ZWN1dGUob2JqZWN0SWQpOworCQkJYnJl YWs7CisKKwkJLyogTG9nIGNyZWF0ZSAqLworCQljYXNlIE9BVF9QT1NUX0NSRUFURToKKwkJ CWlmIChhdWRpdExvZ0JpdG1hcCAmIExPR19EREwpCisJCQl7CisJCQkJT2JqZWN0QWNjZXNz UG9zdENyZWF0ZSAqcGMgPSBhcmc7CisKKwkJCQlpZiAocGMtPmlzX2ludGVybmFsKQorCQkJ CQlyZXR1cm47CisKKwkJCQlsb2dfY3JlYXRlX2FsdGVyX2Ryb3AoY2xhc3NJZCwgb2JqZWN0 SWQpOworCQkJfQorCQkJYnJlYWs7CisKKwkJLyogTG9nIGFsdGVyICovCisJCWNhc2UgT0FU X1BPU1RfQUxURVI6CisJCQlpZiAoYXVkaXRMb2dCaXRtYXAgJiBMT0dfRERMKQorCQkJewor CQkJCU9iamVjdEFjY2Vzc1Bvc3RBbHRlciAqcGEgPSBhcmc7CisKKwkJCQlpZiAocGEtPmlz X2ludGVybmFsKQorCQkJCQlyZXR1cm47CisKKwkJCQlsb2dfY3JlYXRlX2FsdGVyX2Ryb3Ao Y2xhc3NJZCwgb2JqZWN0SWQpOworCQkJfQorCQkJYnJlYWs7CisKKwkJLyogTG9nIGRyb3Ag Ki8KKwkJY2FzZSBPQVRfRFJPUDoKKwkJCWlmIChhdWRpdExvZ0JpdG1hcCAmIExPR19EREwp CisJCQl7CisJCQkJT2JqZWN0QWNjZXNzRHJvcCAqZHJvcCA9IGFyZzsKKworCQkJCWlmIChk cm9wLT5kcm9wZmxhZ3MgJiBQRVJGT1JNX0RFTEVUSU9OX0lOVEVSTkFMKQorCQkJCQlyZXR1 cm47CisKKwkJCQlsb2dfY3JlYXRlX2FsdGVyX2Ryb3AoY2xhc3NJZCwgb2JqZWN0SWQpOwor CQkJfQorCQkJYnJlYWs7CisKKwkJLyogQWxsIG90aGVycyBwcm9jZXNzZWQgYnkgbG9nX3V0 aWxpdHlfY29tbWFuZCgpICovCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKKy8q CisgKiBIb29rIGZ1bmN0aW9ucworICovCitzdGF0aWMgRXhlY3V0b3JDaGVja1Blcm1zX2hv b2tfdHlwZSBuZXh0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rID0gTlVMTDsKK3N0YXRpYyBQ cm9jZXNzVXRpbGl0eV9ob29rX3R5cGUgbmV4dF9Qcm9jZXNzVXRpbGl0eV9ob29rID0gTlVM TDsKK3N0YXRpYyBvYmplY3RfYWNjZXNzX2hvb2tfdHlwZSBuZXh0X29iamVjdF9hY2Nlc3Nf aG9vayA9IE5VTEw7CitzdGF0aWMgRXhlY3V0b3JTdGFydF9ob29rX3R5cGUgbmV4dF9FeGVj dXRvclN0YXJ0X2hvb2sgPSBOVUxMOworCisvKgorICogSG9vayBFeGVjdXRvclN0YXJ0IHRv IGdldCB0aGUgcXVlcnkgdGV4dCBhbmQgYmFzaWMgY29tbWFuZCB0eXBlIGZvciBxdWVyaWVz CisgKiB0aGF0IGRvIG5vdCBjb250YWluIGEgdGFibGUgc28gY2FuJ3QgYmUgaWRlbml0aWZp ZWQgYWNjdXJhdGVseSBpbgorICogRXhlY3V0b3JDaGVja1Blcm1zLgorICovCitzdGF0aWMg dm9pZAorcGdfYXVkaXRfRXhlY3V0b3JTdGFydF9ob29rKFF1ZXJ5RGVzYyAqcXVlcnlEZXNj LCBpbnQgZWZsYWdzKQoreworCUF1ZGl0RXZlbnRTdGFja0l0ZW0gKnN0YWNrSXRlbSA9IE5V TEw7CisKKwlpZiAoIWludGVybmFsU3RhdGVtZW50KQorCXsKKwkJLyogQWxsb2NhdGUgdGhl IGF1ZGl0IGV2ZW50ICovCisJCXN0YWNrSXRlbSA9IHN0YWNrX3B1c2goKTsKKworCQkvKiBJ bml0aWFsaXplIGNvbW1hbmQgKi8KKwkJc3dpdGNoIChxdWVyeURlc2MtPm9wZXJhdGlvbikK KwkJeworCQkJY2FzZSBDTURfU0VMRUNUOgorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5s b2dTdG10TGV2ZWwgPSBMT0dTVE1UX0FMTDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQu Y29tbWFuZFRhZyA9IFRfU2VsZWN0U3RtdDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQu Y29tbWFuZCA9IENPTU1BTkRfU0VMRUNUOworCQkJCWJyZWFrOworCisJCQljYXNlIENNRF9J TlNFUlQ6CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NU TVRfTU9EOworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9JbnNl cnRTdG10OworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9J TlNFUlQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQ01EX1VQREFURToKKwkJCQlzdGFja0l0 ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9NT0Q7CisJCQkJc3RhY2tJ dGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX1VwZGF0ZVN0bXQ7CisJCQkJc3RhY2tJ dGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VQREFURTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBDTURfREVMRVRFOgorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dT dG10TGV2ZWwgPSBMT0dTVE1UX01PRDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29t bWFuZFRhZyA9IFRfRGVsZXRlU3RtdDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29t bWFuZCA9IENPTU1BTkRfREVMRVRFOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJ CXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX0FMTDsKKwkJ CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfSW52YWxpZDsKKwkJCQlz dGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfVU5LTk9XTjsKKwkJCQli cmVhazsKKwkJfQorCisJCS8qIEluaXRpYWxpemUgdGhlIGF1ZGl0IGV2ZW50ICovCisJCXN0 YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGV4dCA9IHF1ZXJ5RGVzYy0+c291cmNlVGV4 dDsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LnBhcmFtTGlzdCA9IHF1ZXJ5RGVzYy0+cGFy YW1zOworCX0KKworCS8qIENhbGwgdGhlIHByZXZpb3VzIGhvb2sgb3Igc3RhbmRhcmQgZnVu Y3Rpb24gKi8KKwlpZiAobmV4dF9FeGVjdXRvclN0YXJ0X2hvb2spCisJCW5leHRfRXhlY3V0 b3JTdGFydF9ob29rKHF1ZXJ5RGVzYywgZWZsYWdzKTsKKwllbHNlCisJCXN0YW5kYXJkX0V4 ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MpOworCisJLyoKKwkgKiBNb3ZlIHRoZSBz dGFjayBtZW1vcnkgY29udGV4dCB0byB0aGUgcXVlcnkgbWVtb3J5IGNvbnRleHQuICBUaGlz IG5lZWRzIHRvCisJICogYmUgZG9uZSBoZXJlIGJlY2F1c2UgdGhlIHF1ZXJ5IGNvbnRleHQg ZG9lcyBub3QgZXhpc3QgYmVmb3JlIHRoZSBjYWxsCisJICogdG8gc3RhbmRhcmRfRXhlY3V0 b3JTdGFydCgpIGJ1dCB0aGUgc3RhY2sgaXRlbSBpcyByZXF1aXJlZCBieQorCSAqIHBnX2F1 ZGl0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rKCkgd2hpY2ggaXMgY2FsbGVkIGR1cmluZwor CSAqIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoKS4KKwkgKi8KKwlpZiAoc3RhY2tJdGVtKQor CXsKKwkJTWVtb3J5Q29udGV4dFNldFBhcmVudChzdGFja0l0ZW0tPmNvbnRleHRBdWRpdCwK KwkJCQkJCQkgICBxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKKwl9Cit9CisK Ky8qCisgKiBIb29rIEV4ZWN1dG9yQ2hlY2tQZXJtcyB0byBkbyBzZXNzaW9uIGFuZCBvYmpl Y3QgYXVkaXRpbmcgZm9yIERNTC4KKyAqLworc3RhdGljIGJvb2wKK3BnX2F1ZGl0X0V4ZWN1 dG9yQ2hlY2tQZXJtc19ob29rKExpc3QgKnJhbmdlVGFibHMsIGJvb2wgYWJvcnQpCit7CisJ T2lkIGF1ZGl0T2lkOworCisJLyogR2V0IHRoZSBhdWRpdCBvaWQgaWYgdGhlIHJvbGUgZXhp c3RzLiAqLworCWF1ZGl0T2lkID0gZ2V0X3JvbGVfb2lkKGF1ZGl0Um9sZSwgdHJ1ZSk7CisK KwkvKiBMb2cgRE1MIGlmIHRoZSBhdWRpdCByb2xlIGlzIHZhbGlkIG9yIHNlc3Npb24gbG9n Z2luZyBpcyBlbmFibGVkLiAqLworCWlmICgoYXVkaXRPaWQgIT0gSW52YWxpZE9pZCB8fCBh dWRpdExvZ0JpdG1hcCAhPSAwKSAmJgorCQkhSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0 YXRlKCkpCisJCWxvZ19zZWxlY3RfZG1sKGF1ZGl0T2lkLCByYW5nZVRhYmxzKTsKKworCS8q IENhbGwgdGhlIG5leHQgaG9vayBmdW5jdGlvbi4gKi8KKwlpZiAobmV4dF9FeGVjdXRvckNo ZWNrUGVybXNfaG9vayAmJgorCQkhKCpuZXh0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rKSAo cmFuZ2VUYWJscywgYWJvcnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIEhvb2sgUHJvY2Vzc1V0aWxpdHkgdG8gZG8gc2Vzc2lvbiBhdWRpdGlu ZyBmb3IgRERMIGFuZCB1dGlsaXR5IGNvbW1hbmRzLgorICovCitzdGF0aWMgdm9pZAorcGdf YXVkaXRfUHJvY2Vzc1V0aWxpdHlfaG9vayhOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJIGNv bnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkJCSBQcm9jZXNzVXRpbGl0eUNvbnRleHQg Y29udGV4dCwKKwkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJIERlc3RS ZWNlaXZlciAqZGVzdCwKKwkJCQkJCQkgY2hhciAqY29tcGxldGlvblRhZykKK3sKKwlBdWRp dEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW0gPSBOVUxMOworCWludDY0IHN0YWNrSWQ7CisK KwkvKiBBbGxvY2F0ZSB0aGUgYXVkaXQgZXZlbnQgKi8KKwlpZiAoIUlzQWJvcnRlZFRyYW5z YWN0aW9uQmxvY2tTdGF0ZSgpKQorCXsKKwkJLyogUHJvY2VzcyB0b3AgbGV2ZWwgdXRpbGl0 eSBzdGF0ZW1lbnQgKi8KKwkJaWYgKGNvbnRleHQgPT0gUFJPQ0VTU19VVElMSVRZX1RPUExF VkVMKQorCQl7CisJCQlpZiAoYXVkaXRFdmVudFN0YWNrICE9IE5VTEwpCisJCQkJZWxvZyhF UlJPUiwgInBnX2F1ZGl0IHN0YWNrIGlzIG5vdCBlbXB0eSIpOworCisJCQkvKiBTZXQgcGFy YW1zICovCisJCQlzdGFja0l0ZW0gPSBzdGFja19wdXNoKCk7CisJCQlzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQucGFyYW1MaXN0ID0gcGFyYW1zOworCQl9CisJCWVsc2UKKwkJCXN0YWNrSXRl bSA9IHN0YWNrX3B1c2goKTsKKworCQlzdGFja0lkID0gc3RhY2tJdGVtLT5zdGFja0lkOwor CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gR2V0Q29tbWFuZExvZ0xl dmVsKHBhcnNldHJlZSk7CisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0g bm9kZVRhZyhwYXJzZXRyZWUpOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9 IENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 LmNvbW1hbmRUZXh0ID0gcXVlcnlTdHJpbmc7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBh IERPIGJsb2NrIGxvZyBpdCBiZWZvcmUgY2FsbGluZyB0aGUgbmV4dCBQcm9jZXNzVXRpbGl0 eQorCQkgKiBob29rLgorCQkgKi8KKwkJaWYgKGF1ZGl0TG9nQml0bWFwICE9IDAgJiYKKwkJ CXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID09IFRfRG9TdG10ICYmCisJCQkh SXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkpCisJCXsKKwkJCWxvZ19hdWRpdF9l dmVudChzdGFja0l0ZW0pOworCQl9CisJfQorCisJLyogQ2FsbCB0aGUgc3RhbmRhcmQgcHJv Y2VzcyB1dGlsaXR5IGNoYWluLiAqLworCWlmIChuZXh0X1Byb2Nlc3NVdGlsaXR5X2hvb2sp CisJCSgqbmV4dF9Qcm9jZXNzVXRpbGl0eV9ob29rKSAocGFyc2V0cmVlLCBxdWVyeVN0cmlu ZywgY29udGV4dCwKKwkJCQkJCQkJCSBwYXJhbXMsIGRlc3QsIGNvbXBsZXRpb25UYWcpOwor CWVsc2UKKwkJc3RhbmRhcmRfUHJvY2Vzc1V0aWxpdHkocGFyc2V0cmVlLCBxdWVyeVN0cmlu ZywgY29udGV4dCwKKwkJCQkJCQkJcGFyYW1zLCBkZXN0LCBjb21wbGV0aW9uVGFnKTsKKwor CS8qCisJICogUHJvY2VzcyB0aGUgYXVkaXQgZXZlbnQgaWYgdGhlcmUgaXMgb25lLiAgQWxz byBjaGVjayB0aGF0IHRoaXMgZXZlbnQgd2FzCisJICogbm90IHBvcHBlZCBvZmYgdGhlIHN0 YWNrIGJ5IGEgbWVtb3J5IGNvbnRleHQgYmVpbmcgZnJlZWQgZWxzZXdoZXJlLgorCSAqLwor CWlmIChzdGFja0l0ZW0pCisJeworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIGl0ZW0gd2Ug d2FudCB0byBsb2cgaXMgc3RpbGwgb24gdGhlIHN0YWNrIC0gaWYgbm90IHRoZW4KKwkJICog c29tZXRoaW5nIGhhcyBnb25lIHdyb25nIGFuZCBhbiBlcnJvciB3aWxsIGJlIHJhaXNlZC4K KwkJICovCisJCXN0YWNrX3ZhbGlkKHN0YWNrSWQpOworCisJCS8qIExvZyB0aGUgdXRpbGl0 eSBjb21tYW5kIGlmIGxvZ2dpbmcgaXMgb24sIHRoZSBjb21tYW5kIGhhcyBub3QgYWxyZWFk eQorCQkgKiBiZWVuIGxvZ2dlZCBieSBhbm90aGVyIGhvb2ssIGFuZCB0aGUgdHJhbnNhY3Rp b24gaXMgbm90IGFib3J0ZWQuICovCisJCWlmIChhdWRpdExvZ0JpdG1hcCAhPSAwICYmICFz dGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nZ2VkICYmCisJCQkhSXNBYm9ydGVkVHJhbnNhY3Rp b25CbG9ja1N0YXRlKCkpCisJCQlsb2dfYXVkaXRfZXZlbnQoc3RhY2tJdGVtKTsKKwl9Cit9 CisKKy8qCisgKiBIb29rIG9iamVjdF9hY2Nlc3NfaG9vayB0byBwcm92aWRlIGZ1bGx5LXF1 YWxpZmllZCBvYmplY3QgbmFtZXMgZm9yIGV4ZWN1dGUsCisgKiBjcmVhdGUsIGRyb3AsIGFu ZCBhbHRlciBjb21tYW5kcy4gIE1vc3Qgb2YgdGhlIGF1ZGl0IGluZm9ybWF0aW9uIGlzIGZp bGxlZCBpbgorICogYnkgbG9nX3V0aWxpdHlfY29tbWFuZCgpLgorICovCitzdGF0aWMgdm9p ZAorcGdfYXVkaXRfb2JqZWN0X2FjY2Vzc19ob29rKE9iamVjdEFjY2Vzc1R5cGUgYWNjZXNz LAorCQkJCQkJCU9pZCBjbGFzc0lkLAorCQkJCQkJCU9pZCBvYmplY3RJZCwKKwkJCQkJCQlp bnQgc3ViSWQsCisJCQkJCQkJdm9pZCAqYXJnKQoreworCWlmIChhdWRpdExvZ0JpdG1hcCAh PSAwICYmICFJc0Fib3J0ZWRUcmFuc2FjdGlvbkJsb2NrU3RhdGUoKSAmJgorCQlhdWRpdExv Z0JpdG1hcCAmIChMT0dfRERMIHwgTE9HX0ZVTkNUSU9OKSAmJiBhdWRpdEV2ZW50U3RhY2sp CisJCWxvZ19vYmplY3RfYWNjZXNzKGFjY2VzcywgY2xhc3NJZCwgb2JqZWN0SWQsIHN1Yklk LCBhcmcpOworCisJaWYgKG5leHRfb2JqZWN0X2FjY2Vzc19ob29rKQorCQkoKm5leHRfb2Jq ZWN0X2FjY2Vzc19ob29rKSAoYWNjZXNzLCBjbGFzc0lkLCBvYmplY3RJZCwgc3ViSWQsIGFy Zyk7Cit9CisKKy8qCisgKiBFdmVudCB0cmlnZ2VyIGZ1bmN0aW9ucworICovCisKKy8qCisg KiBTdXBwbHkgYWRkaXRpb25hbCBkYXRhIGZvciAobm9uIGRyb3ApIHN0YXRlbWVudHMgdGhh dCBoYXZlIGV2ZW50IHRyaWdnZXIKKyAqIHN1cHBvcnQgYW5kIGNhbiBiZSBkZXBhcnNlZC4K KyAqLworRGF0dW0KK3BnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdT KQoreworI2lmZGVmIERFUEFSU0UKKwkvKiBDb250aW51ZSBvbmx5IGlmIHNlc3Npb24gRERM IGxvZ2dpbmcgaXMgZW5hYmxlZCAqLworCWlmIChhdWRpdExvZ0JpdG1hcCAmIExPR19EREwp CisJeworCQlFdmVudFRyaWdnZXJEYXRhICpldmVudERhdGE7CisJCWludAkJCQkgIHJlc3Vs dCwgcm93OworCQlUdXBsZURlc2MJCSAgc3BpVHVwRGVzYzsKKwkJY29uc3QgY2hhcgkJICpx dWVyeTsKKwkJTWVtb3J5Q29udGV4dCAJICBjb250ZXh0UXVlcnk7CisJCU1lbW9yeUNvbnRl eHQgCSAgY29udGV4dE9sZDsKKworCQkvKiBCZSBzdXJlIHRoZSBtb2R1bGUgd2FzIGxvYWRl ZCAqLworCQlpZiAoIWF1ZGl0RXZlbnRTdGFjaykKKwkJeworCQkJZWxvZyhFUlJPUiwgInBn X2F1ZGl0IG5vdCBsb2FkZWQgYmVmb3JlIGNhbGwgdG8gcGdfYXVkaXRfZGRsX2NvbW1hbmRf ZW5kKCkiKTsKKwkJfQorCisJCS8qIFRoaXMgaXMgYW4gaW50ZXJuYWwgc3RhdGVtZW50IC0g ZG8gbm90IGxvZyBpdCAqLworCQlpbnRlcm5hbFN0YXRlbWVudCA9IHRydWU7CisKKwkJLyog TWFrZSBzdXJlIHRoZSBmdWN0aW9uIHdhcyBmaXJlZCBhcyBhIHRyaWdnZXIgKi8KKwkJaWYg KCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQkJZWxvZyhFUlJPUiwgIm5v dCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCQkvKiBTd2l0Y2ggbWVt b3J5IGNvbnRleHQgKi8KKwkJY29udGV4dFF1ZXJ5ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRl KAorCQkJCQkJQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkicGdfYXVkaXRfZnVuY19k ZGxfY29tbWFuZF9lbmQgdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJCQkJQUxMT0NTRVRfREVG QVVMVF9NSU5TSVpFLAorCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJ CUFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJCWNvbnRleHRPbGQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oY29udGV4dFF1ZXJ5KTsKKworCQkvKiBHZXQgaW5mb3JtYXRpb24gYWJv dXQgdHJpZ2dlcmVkIGV2ZW50cyAqLworCQlldmVudERhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0 YSAqKSBmY2luZm8tPmNvbnRleHQ7CisKKwkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50 LmxvZ1N0bXRMZXZlbCA9CisJCQlHZXRDb21tYW5kTG9nTGV2ZWwoZXZlbnREYXRhLT5wYXJz ZXRyZWUpOworCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9CisJ CQlub2RlVGFnKGV2ZW50RGF0YS0+cGFyc2V0cmVlKTsKKwkJYXVkaXRFdmVudFN0YWNrLT5h dWRpdEV2ZW50LmNvbW1hbmQgPQorCQkJQ3JlYXRlQ29tbWFuZFRhZyhldmVudERhdGEtPnBh cnNldHJlZSk7CisKKwkJLyogUmV0dXJuIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIChub24g ZHJvcCkgRERMIHN0YXRlbWVudCAqLworCQlxdWVyeSA9ICJTRUxFQ1QgVVBQRVIob2JqZWN0 X3R5cGUpLCBpZGVudGl0eVxuIgorCQkJCSIgIEZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxf Y29tbWFuZHMoKSI7CisKKwkJLyogQXR0ZW1wdCB0byBjb25uZWN0ICovCisJCXJlc3VsdCA9 IFNQSV9jb25uZWN0KCk7CisKKwkJaWYgKHJlc3VsdCA8IDApCisJCQllbG9nKEVSUk9SLCAi cGdfYXVkaXRfZGRsX2NvbW1hbmRfZW5kOiBTUElfY29ubmVjdCByZXR1cm5lZCAlZCIsCisJ CQkJCQlyZXN1bHQpOworCisJCS8qIEV4ZWN1dGUgdGhlIHF1ZXJ5ICovCisJCXJlc3VsdCA9 IFNQSV9leGVjdXRlKHF1ZXJ5LCB0cnVlLCAwKTsKKworCQlpZiAocmVzdWx0ICE9IFNQSV9P S19TRUxFQ1QpCisJCQllbG9nKEVSUk9SLCAicGdfYXVkaXRfZGRsX2NvbW1hbmRfZW5kOiBT UElfZXhlY3V0ZSByZXR1cm5lZCAlZCIsCisJCQkJCQlyZXN1bHQpOworCisJCS8qIEl0ZXJh dGUgcmV0dXJuZWQgcm93cyAqLworCQlzcGlUdXBEZXNjID0gU1BJX3R1cHRhYmxlLT50dXBk ZXNjOworCisJCWZvciAocm93ID0gMDsgcm93IDwgU1BJX3Byb2Nlc3NlZDsgcm93KyspCisJ CXsKKwkJCUhlYXBUdXBsZSAgc3BpVHVwbGU7CisKKwkJCXNwaVR1cGxlID0gU1BJX3R1cHRh YmxlLT52YWxzW3Jvd107CisKKwkJCS8qIFN1cHBseSBvYmplY3QgbmFtZSBhbmQgdHlwZSBm b3IgYXVkaXQgZXZlbnQgKi8KKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmpl Y3RUeXBlID0KKwkJCQlTUElfZ2V0dmFsdWUoc3BpVHVwbGUsIHNwaVR1cERlc2MsIDEpOwor CQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQkJCVNQSV9n ZXR2YWx1ZShzcGlUdXBsZSwgc3BpVHVwRGVzYywgMik7CisKKwkJCS8qIExvZyB0aGUgYXVk aXQgZXZlbnQgKi8KKwkJCWxvZ19hdWRpdF9ldmVudChhdWRpdEV2ZW50U3RhY2spOworCQl9 CisKKwkJLyogQ29tcGxldGUgdGhlIHF1ZXJ5ICovCisJCVNQSV9maW5pc2goKTsKKworCQkv KiBTd2l0Y2ggdG8gdGhlIG9sZCBtZW1vcnkgY29udGV4dCAqLworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8oY29udGV4dE9sZCk7CisJCU1lbW9yeUNvbnRleHREZWxldGUoY29udGV4dFF1 ZXJ5KTsKKworCQkvKiBObyBsb25nZXIgaW4gYW4gaW50ZXJuYWwgc3RhdGVtZW50ICovCisJ CWludGVybmFsU3RhdGVtZW50ID0gZmFsc2U7CisJfQorI2VuZGlmCisKKwlQR19SRVRVUk5f TlVMTCgpOworfQorCisvKgorICogU3VwcGx5IGFkZGl0aW9uYWwgZGF0YSBmb3IgZHJvcCBz dGF0ZW1lbnRzIHRoYXQgaGF2ZSBldmVudCB0cmlnZ2VyIHN1cHBvcnQuCisgKi8KK0RhdHVt CitwZ19hdWRpdF9zcWxfZHJvcChQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChhdWRpdExv Z0JpdG1hcCAmIExPR19EREwpCisJeworCQlpbnQJCQkJICByZXN1bHQsIHJvdzsKKwkJVHVw bGVEZXNjCQkgIHNwaVR1cERlc2M7CisJCWNvbnN0IGNoYXIJCSAqcXVlcnk7CisJCU1lbW9y eUNvbnRleHQgCSAgY29udGV4dFF1ZXJ5OworCQlNZW1vcnlDb250ZXh0IAkgIGNvbnRleHRP bGQ7CisKKwkJLyogQmUgc3VyZSB0aGUgbW9kdWxlIHdhcyBsb2FkZWQgKi8KKwkJaWYgKCFh dWRpdEV2ZW50U3RhY2spCisJCXsKKwkJCWVsb2coRVJST1IsICJwZ19hdWRpdCBub3QgbG9h ZGVkIGJlZm9yZSBjYWxsIHRvIHBnX2F1ZGl0X3NxbF9kcm9wKCkiKTsKKwkJfQorCisJCS8q IFRoaXMgaXMgYW4gaW50ZXJuYWwgc3RhdGVtZW50IC0gZG8gbm90IGxvZyBpdCAqLworCQlp bnRlcm5hbFN0YXRlbWVudCA9IHRydWU7CisKKwkJLyogTWFrZSBzdXJlIHRoZSBmdWN0aW9u IHdhcyBmaXJlZCBhcyBhIHRyaWdnZXIgKi8KKwkJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJ R0dFUihmY2luZm8pKQorCQkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmln Z2VyIG1hbmFnZXIiKTsKKworCQkvKiBTd2l0Y2ggbWVtb3J5IGNvbnRleHQgKi8KKwkJY29u dGV4dFF1ZXJ5ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKAorCQkJCQkJQ3VycmVudE1lbW9y eUNvbnRleHQsCisJCQkJCQkicGdfYXVkaXRfZnVuY19kZGxfY29tbWFuZF9lbmQgdGVtcG9y YXJ5IGNvbnRleHQiLAorCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJ QUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUFY U0laRSk7CisJCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dFF1 ZXJ5KTsKKworCQkvKiBSZXR1cm4gb2JqZWN0cyBhZmZlY3RlZCBieSB0aGUgZHJvcCBzdGF0 ZW1lbnQgKi8KKwkJcXVlcnkgPSAiU0VMRUNUIFVQUEVSKG9iamVjdF90eXBlKSxcbiIKKwkJ CQkiICAgICAgIG9iamVjdF9pZGVudGl0eVxuIgorCQkJCSIgIEZST00gcGdfZXZlbnRfdHJp Z2dlcl9kcm9wcGVkX29iamVjdHMoKVxuIgorCQkJCSIgV0hFUkUgbG93ZXIob2JqZWN0X3R5 cGUpIDw+ICd0eXBlJ1xuIgorCQkJCSIgICBBTkQgc2NoZW1hX25hbWUgPD4gJ3BnX3RvYXN0 JyI7CisKKwkJLyogQXR0ZW1wdCB0byBjb25uZWN0ICovCisJCXJlc3VsdCA9IFNQSV9jb25u ZWN0KCk7CisKKwkJaWYgKHJlc3VsdCA8IDApCisJCQllbG9nKEVSUk9SLCAicGdfYXVkaXRf ZGRsX2Ryb3A6IFNQSV9jb25uZWN0IHJldHVybmVkICVkIiwKKwkJCQkJCXJlc3VsdCk7CisK KwkJLyogRXhlY3V0ZSB0aGUgcXVlcnkgKi8KKwkJcmVzdWx0ID0gU1BJX2V4ZWN1dGUocXVl cnksIHRydWUsIDApOworCisJCWlmIChyZXN1bHQgIT0gU1BJX09LX1NFTEVDVCkKKwkJCWVs b2coRVJST1IsICJwZ19hdWRpdF9kZGxfZHJvcDogU1BJX2V4ZWN1dGUgcmV0dXJuZWQgJWQi LAorCQkJCQkJcmVzdWx0KTsKKworCQkvKiBJdGVyYXRlIHJldHVybmVkIHJvd3MgKi8KKwkJ c3BpVHVwRGVzYyA9IFNQSV90dXB0YWJsZS0+dHVwZGVzYzsKKworCQlmb3IgKHJvdyA9IDA7 IHJvdyA8IFNQSV9wcm9jZXNzZWQ7IHJvdysrKQorCQl7CisJCQlIZWFwVHVwbGUgIHNwaVR1 cGxlOworCisJCQlzcGlUdXBsZSA9IFNQSV90dXB0YWJsZS0+dmFsc1tyb3ddOworCisJCQlh dWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJU1BJX2dldHZh bHVlKHNwaVR1cGxlLCBzcGlUdXBEZXNjLCAxKTsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVk aXRFdmVudC5vYmplY3ROYW1lID0KKwkJCQkJU1BJX2dldHZhbHVlKHNwaVR1cGxlLCBzcGlU dXBEZXNjLCAyKTsKKworCQkJbG9nX2F1ZGl0X2V2ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisJ CX0KKworCQkvKiBDb21wbGV0ZSB0aGUgcXVlcnkgKi8KKwkJU1BJX2ZpbmlzaCgpOworCisJ CS8qIFN3aXRjaCB0byB0aGUgb2xkIG1lbW9yeSBjb250ZXh0ICovCisJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhjb250ZXh0T2xkKTsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShjb250ZXh0 UXVlcnkpOworCisJCS8qIE5vIGxvbmdlciBpbiBhbiBpbnRlcm5hbCBzdGF0ZW1lbnQgKi8K KwkJaW50ZXJuYWxTdGF0ZW1lbnQgPSBmYWxzZTsKKwl9CisKKwlQR19SRVRVUk5fTlVMTCgp OworfQorCisvKgorICogR1VDIGNoZWNrIGFuZCBhc3NpZ24gZnVuY3Rpb25zCisgKi8KKwor LyoKKyAqIFRha2UgYSBwZ19hdWRpdC5sb2cgdmFsdWUgc3VjaCBhcyAicmVhZCwgd3JpdGUs IGRtbCIsIHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlCisgKiBjb21tYS1zZXBhcmF0ZWQgdG9r ZW5zIGNvcnJlc3BvbmRzIHRvIGEgTG9nQ2xhc3MgdmFsdWUsIGFuZCBjb252ZXJ0IHRoZW0g aW50bworICogYSBiaXRtYXAgdGhhdCBsb2dfYXVkaXRfZXZlbnQgY2FuIGNoZWNrLgorICov CitzdGF0aWMgYm9vbAorY2hlY2tfcGdfYXVkaXRfbG9nKGNoYXIgKipuZXd2YWwsIHZvaWQg KipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwlMaXN0ICpmbGFnczsKKwljaGFyICpy YXd2YWw7CisJTGlzdENlbGwgKmx0OworCXVpbnQ2NCAqZjsKKworCS8qIE1ha2Ugc3VyZSBu ZXd2YWwgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0b2tlbnMuICovCisJcmF3dmFs ID0gcHN0cmR1cCgqbmV3dmFsKTsKKwlpZiAoIVNwbGl0SWRlbnRpZmllclN0cmluZyhyYXd2 YWwsICcsJywgJmZsYWdzKSkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkxpc3Qgc3lu dGF4IGlzIGludmFsaWQiKTsKKwkJbGlzdF9mcmVlKGZsYWdzKTsKKwkJcGZyZWUocmF3dmFs KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogQ2hlY2sgdGhhdCB3ZSByZWNv Z25pc2UgZWFjaCB0b2tlbiwgYW5kIGFkZCBpdCB0byB0aGUgYml0bWFwIHdlJ3JlCisJICog YnVpbGRpbmcgdXAgaW4gYSBuZXdseS1hbGxvY2F0ZWQgdWludDY0ICpmLgorCSAqLworCWYg PSAodWludDY0ICopIG1hbGxvYyhzaXplb2YodWludDY0KSk7CisJaWYgKCFmKQorCQlyZXR1 cm4gZmFsc2U7CisJKmYgPSAwOworCisJZm9yZWFjaChsdCwgZmxhZ3MpCisJeworCQlib29s IHN1YnRyYWN0ID0gZmFsc2U7CisJCXVpbnQ2NCBjbGFzczsKKworCQkvKiBSZXRyaWV2ZSBh IHRva2VuICovCisJCWNoYXIgKnRva2VuID0gKGNoYXIgKilsZmlyc3QobHQpOworCisJCS8q IElmIHRva2VuIGlzIHByZWNlZGVkIGJ5IC0sIHRoZW4gdGhlIHRva2VuIGlzIHN1YnRyYWN0 aXZlLiAqLworCQlpZiAoc3Ryc3RyKHRva2VuLCAiLSIpID09IHRva2VuKQorCQl7CisJCQl0 b2tlbiA9IHRva2VuICsgMTsKKwkJCXN1YnRyYWN0ID0gdHJ1ZTsKKwkJfQorCisJCS8qIFRl c3QgZWFjaCB0b2tlbi4gKi8KKwkJaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX05P TkUpID09IDApCisJCQljbGFzcyA9IExPR19OT05FOworCQllbHNlIGlmIChwZ19zdHJjYXNl Y21wKHRva2VuLCBDTEFTU19BTEwpID09IDApCisJCQljbGFzcyA9IExPR19BTEw7CisJCWVs c2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX0RETCkgPT0gMCkKKwkJCWNsYXNz ID0gTE9HX0RETDsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcCh0b2tlbiwgQ0xBU1NfRlVO Q1RJT04pID09IDApCisJCQljbGFzcyA9IExPR19GVU5DVElPTjsKKwkJZWxzZSBpZiAocGdf c3RyY2FzZWNtcCh0b2tlbiwgQ0xBU1NfTUlTQykgPT0gMCkKKwkJCWNsYXNzID0gTE9HX01J U0M7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX1BBUkFNRVRFUikg PT0gMCkKKwkJCWNsYXNzID0gTE9HX1BBUkFNRVRFUjsKKwkJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcCh0b2tlbiwgQ0xBU1NfUkVBRCkgPT0gMCkKKwkJCWNsYXNzID0gTE9HX1JFQUQ7CisJ CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX1JPTEUpID09IDApCisJCQlj bGFzcyA9IExPR19ST0xFOworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFT U19XUklURSkgPT0gMCkKKwkJCWNsYXNzID0gTE9HX1dSSVRFOworCQllbHNlCisJCXsKKwkJ CWZyZWUoZik7CisJCQlwZnJlZShyYXd2YWwpOworCQkJbGlzdF9mcmVlKGZsYWdzKTsKKwkJ CXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qIEFkZCBvciBzdWJ0cmFjdCBjbGFzcyBiaXRz IGZyb20gdGhlIGxvZyBiaXRtYXAuICovCisJCWlmIChzdWJ0cmFjdCkKKwkJCSpmICY9IH5j bGFzczsKKwkJZWxzZQorCQkJKmYgfD0gY2xhc3M7CisJfQorCisJcGZyZWUocmF3dmFsKTsK KwlsaXN0X2ZyZWUoZmxhZ3MpOworCisJLyoKKwkgKiBTdG9yZSB0aGUgYml0bWFwIGZvciBh c3NpZ25fcGdfYXVkaXRfbG9nLgorCSAqLworCSpleHRyYSA9IGY7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIFNldCBwZ19hdWRpdF9sb2cgZnJvbSBleHRyYSAoaWdub3Jpbmcg bmV3dmFsLCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuCisgKiBjb252ZXJ0ZWQgdG8gYSBiaXRt YXAgYWJvdmUpLiBOb3RlIHRoYXQgZXh0cmEgbWF5IG5vdCBiZSBzZXQgaWYgdGhlCisgKiBh c3NpZ25tZW50IGlzIHRvIGJlIHN1cHByZXNzZWQuCisgKi8KK3N0YXRpYyB2b2lkCithc3Np Z25fcGdfYXVkaXRfbG9nKGNvbnN0IGNoYXIgKm5ld3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJ aWYgKGV4dHJhKQorCQlhdWRpdExvZ0JpdG1hcCA9ICoodWludDY0ICopZXh0cmE7Cit9CisK Ky8qCisgKiBEZWZpbmUgR1VDIHZhcmlhYmxlcyBhbmQgaW5zdGFsbCBob29rcyB1cG9uIG1v ZHVsZSBsb2FkLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCWlmIChJc1VuZGVy UG9zdG1hc3RlcikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJZXJybXNnKCJwZ19hdWRpdCBt dXN0IGJlIGxvYWRlZCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIikpKTsKKworCS8q CisJICogcGdfYXVkaXQucm9sZSA9ICJhdWRpdCIKKwkgKgorCSAqIERlZmluZXMgYSByb2xl IHRvIGJlIHVzZWQgZm9yIGF1ZGl0aW5nLgorCSAqLworCURlZmluZUN1c3RvbVN0cmluZ1Zh cmlhYmxlKCJwZ19hdWRpdC5yb2xlIiwKKwkJCQkJCQkgICAiRW5hYmxlIG9iamVjdCBhdWRp dGluZyBmb3Igcm9sZSIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmYXVkaXRSb2xl LAorCQkJCQkJCSAgICIiLAorCQkJCQkJCSAgIFBHQ19TVVNFVCwKKwkJCQkJCQkgICBHVUNf Tk9UX0lOX1NBTVBMRSwKKwkJCQkJCQkgICBOVUxMLCBOVUxMLCBOVUxMKTsKKworCS8qCisJ ICogcGdfYXVkaXQubG9nID0gInJlYWQsIHdyaXRlLCBkZGwiCisJICoKKwkgKiBDb250cm9s cyB3aGF0IGNsYXNzZXMgb2YgY29tbWFuZHMgYXJlIGxvZ2dlZC4KKwkgKi8KKwlEZWZpbmVD dXN0b21TdHJpbmdWYXJpYWJsZSgicGdfYXVkaXQubG9nIiwKKwkJCQkJCQkgICAiRW5hYmxl IHNlc3Npb24gYXVkaXRpbmcgZm9yIGNsYXNzZXMgb2YgY29tbWFuZHMiLAorCQkJCQkJCSAg IE5VTEwsCisJCQkJCQkJICAgJmF1ZGl0TG9nLAorCQkJCQkJCSAgICJub25lIiwKKwkJCQkJ CQkgICBQR0NfU1VTRVQsCisJCQkJCQkJICAgR1VDX0xJU1RfSU5QVVQgfCBHVUNfTk9UX0lO X1NBTVBMRSwKKwkJCQkJCQkgICBjaGVja19wZ19hdWRpdF9sb2csCisJCQkJCQkJICAgYXNz aWduX3BnX2F1ZGl0X2xvZywKKwkJCQkJCQkgICBOVUxMKTsKKworCS8qCisJICogcGdfYXVk aXQubG9nX3JlbGF0aW9uID0gb24KKwkgKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgcmVsYXRp b25zIGdldCBzZXBhcmF0ZSBsb2cgZW50cmllcyBkdXJpbmcgc2Vzc2lvbgorCSAqIGxvZ2dp bmcgb2YgUkVBRCBhbmQgV1JJVEUgY2xhc3Nlcy4gIFRoaXMgd29ya3MgYXMgaWYgYWxsIHJl bGF0aW9ucyBpbiB0aGUKKwkgKiBkYXRhYmFzZSBoYWQgYmVlbiBhZGRlZCB0byB0aGUgYXVk aXQgcm9sZSBhbmQgcHJvdmlkZXMgYSBzaG9ydGN1dCB3aGVuCisJICogcmVhbGx5IGRldGFp bGVkIGxvZ2dpbmcgb2YgYWJzb2x1dGVseSBldmVyeSByZWxhdGlvbiBpcyByZXF1aXJlZC4K KwkgKi8KKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX2F1ZGl0LmxvZ19yZWxhdGlv biIsCisJCQkJCQkJICJFbmFibGUgc2Vzc2lvbiByZWxhdGlvbiBsb2dnaW5nIiwKKwkJCQkJ CQkgTlVMTCwKKwkJCQkJCQkgJmF1ZGl0TG9nUmVsYXRpb24sCisJCQkJCQkJIGZhbHNlLAor CQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJIEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJ CSBOVUxMLCBOVUxMLCBOVUxMKTsKKworCisJLyoKKwkgKiBwZ19hdWRpdC5sb2dfbm90aWNl ID0gb24KKwkgKgorCSAqIEF1ZGl0IGxvZ2dpbmcgaXMgcmFpc2VkIGFzIG5vdGljZXMgdGhh dCBjYW4gYmUgc2VlbiBvbiB0aGUgY2xpZW50LiAgVGhpcyBpcworCSAqIGludGVuZGVkIGZv ciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqLworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgi cGdfYXVkaXQubG9nX25vdGljZSIsCisJCQkJCQkJICJSYWlzZSBhIG5vdGljZSB3aGVuIGxv Z2dpbmciLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmYXVkaXRMb2dOb3RpY2UsCisJCQkJ CQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJIEdVQ19OT1RfSU5fU0FN UExFLAorCQkJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKTsKKworCS8qCisJICogSW5zdGFsbCBv dXIgaG9vayBmdW5jdGlvbnMgYWZ0ZXIgc2F2aW5nIHRoZSBleGlzdGluZyBwb2ludGVycyB0 byBwcmVzZXJ2ZQorCSAqIHRoZSBjaGFpbi4KKwkgKi8KKwluZXh0X0V4ZWN1dG9yU3RhcnRf aG9vayA9IEV4ZWN1dG9yU3RhcnRfaG9vazsKKwlFeGVjdXRvclN0YXJ0X2hvb2sgPSBwZ19h dWRpdF9FeGVjdXRvclN0YXJ0X2hvb2s7CisKKwluZXh0X0V4ZWN1dG9yQ2hlY2tQZXJtc19o b29rID0gRXhlY3V0b3JDaGVja1Blcm1zX2hvb2s7CisJRXhlY3V0b3JDaGVja1Blcm1zX2hv b2sgPSBwZ19hdWRpdF9FeGVjdXRvckNoZWNrUGVybXNfaG9vazsKKworCW5leHRfUHJvY2Vz c1V0aWxpdHlfaG9vayA9IFByb2Nlc3NVdGlsaXR5X2hvb2s7CisJUHJvY2Vzc1V0aWxpdHlf aG9vayA9IHBnX2F1ZGl0X1Byb2Nlc3NVdGlsaXR5X2hvb2s7CisKKwluZXh0X29iamVjdF9h Y2Nlc3NfaG9vayA9IG9iamVjdF9hY2Nlc3NfaG9vazsKKwlvYmplY3RfYWNjZXNzX2hvb2sg PSBwZ19hdWRpdF9vYmplY3RfYWNjZXNzX2hvb2s7Cit9CmRpZmYgLS1naXQgYS9jb250cmli L3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbmYgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNv bmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmNGEyMgotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuY29uZgpAQCAtMCwwICsx IEBACitzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSBwZ19hdWRpdApkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jb250cm9sIGIvY29udHJpYi9wZ19hdWRpdC9w Z19hdWRpdC5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3 MzBjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNv bnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX2F1ZGl0IGV4dGVuc2lvbgorY29tbWVudCA9 ICdwcm92aWRlcyBhdWRpdGluZyBmdW5jdGlvbmFsaXR5JworZGVmYXVsdF92ZXJzaW9uID0g JzEuMC4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfYXVkaXQnCityZWxvY2F0 YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvc3FsL3BnX2F1ZGl0 LnNxbCBiL2NvbnRyaWIvcGdfYXVkaXQvc3FsL3BnX2F1ZGl0LnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDg5ODg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19hdWRpdC9zcWwvcGdfYXVkaXQuc3FsCkBAIC0wLDAgKzEsNTgxIEBACistLSBM b2FkIHBnX2F1ZGl0IG1vZHVsZQorY3JlYXRlIGV4dGVuc2lvbiBwZ19hdWRpdDsKKworLS0K Ky0tIENyZWF0ZSBhIHN1cGVydXNlciByb2xlIHRoYXQgd2Uga25vdyB0aGUgbmFtZSBvZiBm b3IgdGVzdGluZworQ1JFQVRFIFVTRVIgc3VwZXIgU1VQRVJVU0VSOworXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHN1cGVyOworCistLQorLS0gQ3JlYXRlIGF1ZGl0b3Igcm9sZQor Q1JFQVRFIFJPTEUgYXVkaXRvcjsKKworLS0KKy0tIENyZWF0ZSBmaXJzdCB0ZXN0IHVzZXIK K0NSRUFURSBVU0VSIHVzZXIxOworQUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQubG9n ID0gJ2RkbCwgUk9MRSc7CitBTFRFUiBST0xFIHVzZXIxIFNFVCBwZ19hdWRpdC5sb2dfbm90 aWNlID0gb247CisKKy0tCistLSBDcmVhdGUsIHNlbGVjdCwgZHJvcCAoc2VsZWN0IHdpbGwg bm90IGJlIGF1ZGl0ZWQpCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjEKK0NS RUFURSBUQUJMRSBwdWJsaWMudGVzdCAoaWQgSU5UKTsKK1NFTEVDVCAqIEZST00gdGVzdDsK K0RST1AgVEFCTEUgdGVzdDsKKworLS0KKy0tIENyZWF0ZSBzZWNvbmQgdGVzdCB1c2VyCitc Y29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKKworQ1JFQVRFIFVTRVIgdXNlcjI7 CitBTFRFUiBST0xFIHVzZXIyIFNFVCBwZ19hdWRpdC5sb2cgPSAnUmVhZCwgd3JpdEUnOwor QUxURVIgUk9MRSB1c2VyMiBTRVQgcGdfYXVkaXQubG9nX25vdGljZSA9IG9uOworQUxURVIg Uk9MRSB1c2VyMiBTRVQgcGdfYXVkaXQucm9sZSA9IGF1ZGl0b3I7CisKK1xjb25uZWN0IGNv bnRyaWJfcmVncmVzc2lvbiB1c2VyMgorQ1JFQVRFIFRBQkxFIHRlc3QyIChpZCBJTlQpOwor R1JBTlQgU0VMRUNUIE9OIFRBQkxFIHB1YmxpYy50ZXN0MiBUTyBhdWRpdG9yOworCistLQor LS0gUm9sZS1iYXNlZCB0ZXN0cworQ1JFQVRFIFRBQkxFIHRlc3QzCisoCisJaWQgSU5UCisp OworCitTRUxFQ1QgY291bnQoKikKKyAgRlJPTQorKAorCVNFTEVDVCByZWxuYW1lCisJICBG Uk9NIHBnX2NsYXNzCisJICBMSU1JVCAxCispIFNVQlFVRVJZOworCitTRUxFQ1QgKgorICBG Uk9NIHRlc3QzLCB0ZXN0MjsKKworR1JBTlQgSU5TRVJUCisgICBPTiBUQUJMRSBwdWJsaWMu dGVzdDMKKyAgIFRPIGF1ZGl0b3I7CisKKy0tCistLSBDcmVhdGUgYSB2aWV3IHRvIHRlc3Qg bG9nZ2luZworQ1JFQVRFIFZJRVcgdndfdGVzdDMgQVMKK1NFTEVDVCAqCisgIEZST00gdGVz dDM7CisKK0dSQU5UIFNFTEVDVAorICAgT04gdndfdGVzdDMKKyAgIFRPIGF1ZGl0b3I7CisK Ky0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3Qgb24gdndfdGVz dDMKKy0tIHNlbGVjdCBvbiB0ZXN0MgorU0VMRUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVz dDI7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24g dGVzdDMKKy0tIHNlbGVjdCBvbiB0ZXN0MgorV0lUSCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQK KwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJP TSBjdGU7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQg b24gdGVzdDMKK1dJVEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8gdGVzdDMgVkFMVUVTICgx KQorCQkJCSAgIFJFVFVSTklORyBpZAorKQorSU5TRVJUIElOVE8gdGVzdDIKK1NFTEVDVCBp ZAorICBGUk9NIGN0ZTsKKworR1JBTlQgVVBEQVRFIE9OIFRBQkxFIHB1YmxpYy50ZXN0MiBU TyBhdWRpdG9yOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5z ZXJ0IG9uIHRlc3QzCistLSB1cGRhdGUgb24gdGVzdDIKK1dJVEggQ1RFIEFTCisoCisJVVBE QVRFIHRlc3QyCisJICAgU0VUIGlkID0gMQorCVJFVFVSTklORyBpZAorKQorSU5TRVJUIElO VE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsKKworLS0KKy0tIE9iamVjdCBsb2dn ZWQgYmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0ZXN0MgorV0lUSCBDVEUgQVMKKygKKwlJ TlNFUlQgSU5UTyB0ZXN0MiBWQUxVRVMgKDEpCisJCQkJICAgUkVUVVJOSU5HIGlkCispCitV UERBVEUgdGVzdDMKKyAgIFNFVCBpZCA9IGN0ZS5pZAorICBGUk9NIGN0ZQorIFdIRVJFIHRl c3QzLmlkIDw+IGN0ZS5pZDsKKworLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2Vy IDIgc28gdGhhdCBvbmx5IG9iamVjdCBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3Qg Y29udHJpYl9yZWdyZXNzaW9uIHN1cGVyCithbHRlciByb2xlIHVzZXIyIHNldCBwZ19hdWRp dC5sb2cgPSAnTk9ORSc7CisKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMgor CistLQorLS0gQ3JlYXRlIHRlc3Q0IGFuZCBhZGQgcGVybWlzc2lvbnMKK0NSRUFURSBUQUJM RSB0ZXN0NAorKAorCWlkIGludCwKKwluYW1lIHRleHQKKyk7CisKK0dSQU5UIFNFTEVDVCAo bmFtZSkKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsKKworR1JB TlQgVVBEQVRFIChpZCkKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0NAorICAgVE8gYXVkaXRv cjsKKworR1JBTlQgaW5zZXJ0IChuYW1lKQorICAgT04gVEFCTEUgcHVibGljLnRlc3Q0Cisg ICBUTyBhdWRpdG9yOworCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1NFTEVDVCBpZAor ICBGUk9NIHB1YmxpYy50ZXN0NDsKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBv ZjoKKy0tIHNlbGVjdCAobmFtZSkgb24gdGVzdDQKK1NFTEVDVCBuYW1lCisgIEZST00gcHVi bGljLnRlc3Q0OworCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK0lOU0VSVCBJTlRPIHB1 YmxpYy50ZXN0NCAoaWQpCisJCQkJICBWQUxVRVMgKDEpOworCistLQorLS0gT2JqZWN0IGxv Z2dlZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0IChuYW1lKSBvbiB0ZXN0NAorSU5TRVJUIElO VE8gcHVibGljLnRlc3Q0IChuYW1lKQorCQkJCSAgVkFMVUVTICgndGVzdCcpOworCistLQor LS0gTm90IG9iamVjdCBsb2dnZWQKK1VQREFURSBwdWJsaWMudGVzdDQKKyAgIFNFVCBuYW1l ID0gJ2Zvbyc7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRh dGUgKGlkKSBvbiB0ZXN0NAorVVBEQVRFIHB1YmxpYy50ZXN0NAorICAgU0VUIGlkID0gMTsK KworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAobmFtZSkg b24gdGVzdDQKKy0tIHVwZGF0ZSAobmFtZSkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNlbGVj dCAobmFtZSkgZHVlIHRvIG9yZGVyaW5nCit1cGRhdGUgcHVibGljLnRlc3Q0IHNldCBuYW1l ID0gJ2Zvbycgd2hlcmUgbmFtZSA9ICdiYXInOworCistLQorLS0gRHJvcCB0ZXN0IHRhYmxl cworRFJPUCBUQUJMRSB0ZXN0MjsKK0RST1AgVklFVyB2d190ZXN0MzsKK0RST1AgVEFCTEUg dGVzdDM7CitEUk9QIFRBQkxFIHRlc3Q0OworCistLQorLS0gQ2hhbmdlIHBlcm1pc3Npb25z IG9mIHVzZXIgMSBzbyB0aGF0IHNlc3Npb24gbG9nZ2luZyB3aWxsIGJlIGRvbmUKK1xjb25u ZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdf YXVkaXQubG9nID0gJ0RETCwgUkVBRCc7CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24g dXNlcjEKKworLS0KKy0tIENyZWF0ZSB0YWJsZSBpcyBzZXNzaW9uIGxvZ2dlZAorQ1JFQVRF IFRBQkxFIHB1YmxpYy5hY2NvdW50CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlwYXNz d29yZCBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQKKyk7CisKKy0tCistLSBTZWxlY3QgaXMg c2Vzc2lvbiBsb2dnZWQKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudDsKKworLS0KKy0tIElu c2VydCBpcyBub3QgbG9nZ2VkCitJTlNFUlQgSU5UTyBhY2NvdW50IChpZCwgbmFtZSwgcGFz c3dvcmQsIGRlc2NyaXB0aW9uKQorCQkJIFZBTFVFUyAoMSwgJ3VzZXIxJywgJ0hBU0gxJywg J2JsYWgsIGJsYWgnKTsKKworLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEg c28gdGhhdCBvbmx5IG9iamVjdCBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHN1cGVyCithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5s b2cgPSAnbm9uZSc7CithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5yb2xlID0gJ2F1 ZGl0b3InOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIxCisKKy0tCistLSBB dWRpdG9yIGdyYW50cyBub3QgbG9nZ2VkCitHUkFOVCBTRUxFQ1QgKHBhc3N3b3JkKSwKKwkg IFVQREFURSAobmFtZSwgcGFzc3dvcmQpCisgICBPTiBUQUJMRSBwdWJsaWMuYWNjb3VudAor ICAgVE8gYXVkaXRvcjsKKworLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitTRUxFQ1QgaWQs CisJICAgbmFtZQorICBGUk9NIGFjY291bnQ7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJl Y2F1c2Ugb2Y6CistLSBzZWxlY3QgKHBhc3N3b3JkKSBvbiBhY2NvdW50CitTRUxFQ1QgcGFz c3dvcmQKKyAgRlJPTSBhY2NvdW50OworCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1VQ REFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYSc7CisKKy0t CistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKHBhc3N3b3JkKSBv biBhY2NvdW50CitVUERBVEUgYWNjb3VudAorICAgU0VUIHBhc3N3b3JkID0gJ0hBU0gyJzsK KworLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEgc28gdGhhdCBzZXNzaW9u IHJlbGF0aW9uIGxvZ2dpbmcgd2lsbCBiZSBkb25lCitcY29ubmVjdCBjb250cmliX3JlZ3Jl c3Npb24gc3VwZXIKK2FsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZ19yZWxhdGlv biA9IG9uOworYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQubG9nID0gJ3JlYWQsIFdS SVRFJzsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMQorCistLQorLS0gTm90 IGxvZ2dlZAorY3JlYXRlIHRhYmxlIEFDQ09VTlRfUk9MRV9NQVAKKygKKwlhY2NvdW50X2lk IElOVCwKKwlyb2xlX2lkIElOVAorKTsKKworLS0KKy0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBs b2dnZWQKK0dSQU5UIFNFTEVDVAorICAgT04gVEFCTEUgcHVibGljLmFjY291bnRfcm9sZV9t YXAKKyAgIFRPIGF1ZGl0b3I7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6 CistLSBzZWxlY3QgKHBhc3N3b3JkKSBvbiBhY2NvdW50CistLSBzZWxlY3Qgb24gYWNjb3Vu dF9yb2xlX21hcAorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxv ZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitTRUxFQ1QgYWNjb3VudC5wYXNzd29y ZCwKKwkgICBhY2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAg SU5ORVIgSk9JTiBhY2NvdW50X3JvbGVfbWFwCisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3Vu dF9yb2xlX21hcC5hY2NvdW50X2lkOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNl IG9mOgorLS0gc2VsZWN0IChwYXNzd29yZCkgb24gYWNjb3VudAorLS0gU2Vzc2lvbiBsb2dn ZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9 IG9uCitTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OworCistLQorLS0gTm90IG9i amVjdCBsb2dnZWQKKy0tIFNlc3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBs b2cgPSByZWFkIGFuZCBsb2dfcmVsYXRpb24gPSBvbgorVVBEQVRFIGFjY291bnQKKyAgIFNF VCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJzsKKworLS0KKy0tIE9iamVjdCBsb2dnZWQg YmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAocGFzc3dvcmQpIG9uIGFjY291bnQgKGluIHRoZSB3 aGVyZSBjbGF1c2UpCistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2Ug bG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBT RVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYScKKyB3aGVyZSBwYXNzd29yZCA9ICdIQVNI Mic7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKHBh c3N3b3JkKSBvbiBhY2NvdW50CistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJl Y2F1c2UgbG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50 CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOworCistLQorLS0gQ2hhbmdlIGJhY2sgdG8g c3VwZXJ1c2VyIHRvIGRvIGV4aGF1c3RpdmUgdGVzdHMKK1xjb25uZWN0IGNvbnRyaWJfcmVn cmVzc2lvbiBzdXBlcgorU0VUIHBnX2F1ZGl0LmxvZyA9ICdBTEwnOworU0VUIHBnX2F1ZGl0 LmxvZ19ub3RpY2UgPSBPTjsKK1NFVCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBPTjsKKwor LS0KKy0tIFNpbXBsZSBETyBibG9jaworRE8gJCQKK0JFR0lOCisJcmFpc2Ugbm90aWNlICd0 ZXN0JzsKK0VORCAkJDsKKworLS0KKy0tIENyZWF0ZSB0ZXN0IHNjaGVtYQorQ1JFQVRFIFND SEVNQSB0ZXN0OworCistLQorLS0gQ29weSBwZ19jbGFzcyB0byBzdGRvdXQKK0NPUFkgYWNj b3VudCBUTyBzdGRvdXQ7CisKKy0tCistLSBDcmVhdGUgYSB0YWJsZSBmcm9tIGEgcXVlcnkK K0NSRUFURSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNUICoKKyAgRlJPTSBh Y2NvdW50OworCistLQorLS0gQ29weSBmcm9tIHN0ZGluIHRvIGFjY291bnQgY29weQorQ09Q WSB0ZXN0LmFjY291bnRfY29weSBmcm9tIHN0ZGluOworMQl1c2VyMQlIQVNIMgl5YWRhLCB5 YWRhCitcLgorCistLQorLS0gVGVzdCBwcmVwYXJlZCBzdGF0ZW1lbnQKK1BSRVBBUkUgcGdj bGFzc3N0bXQgKG9pZCkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudAorIFdIRVJFIGlk ID0gJDE7CisKK0VYRUNVVEUgcGdjbGFzc3N0bXQgKDEpOworREVBTExPQ0FURSBwZ2NsYXNz c3RtdDsKKworLS0KKy0tIFRlc3QgY3Vyc29yIC0gbm8gdGFibGVzIHdpbGwgYmUgbG9nZ2Vk IHNpbmNlIHBnX2NsYXNzIGlzIGEgc3lzdGVtIHRhYmxlCitCRUdJTjsKKworREVDTEFSRSBj dGVzdCBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50KCopCisgIEZST00KKygKKwlT RUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBMSU1JVCAxCisgKSBzdWJxdWVy eTsKKworRkVUQ0ggTkVYVCBGUk9NIGN0ZXN0OworQ0xPU0UgY3Rlc3Q7CitDT01NSVQ7CisK Ky0tCistLSBUZXN0IHByZXBhcmVkIGluc2VydAorQ1JFQVRFIFRBQkxFIHRlc3QudGVzdF9p bnNlcnQKKygKKwlpZCBJTlQKKyk7CisKK1BSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMK K0lOU0VSVCBJTlRPIHRlc3QudGVzdF9pbnNlcnQgKGlkKQorCQkJCQkgIFZBTFVFUyAoJDEp OworRVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSk7CisKKy0tCistLSBDaGVjayB0aGF0IHByaW1h cnkga2V5IGNyZWF0aW9uIGlzIGxvZ2dlZAorQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0Ciso CisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlkZXNjcmlwdGlvbiBURVhULAorCUNPTlNUUkFJ TlQgdGVzdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkKKyk7CisKKy0tCistLSBDaGVjayB0aGF0 IGFuYWx5emUgaXMgbG9nZ2VkCitBTkFMWVpFIHRlc3Q7CisKKy0tCistLSBHcmFudHMgdG8g cHVibGljIHNob3VsZCBub3QgY2F1c2Ugb2JqZWN0IGxvZ2dpbmcgKHNlc3Npb24gbG9nZ2lu ZyB3aWxsCistLSBzdGlsbCBoYXBwZW4pCitHUkFOVCBTRUxFQ1QKKyAgT04gVEFCTEUgcHVi bGljLnRlc3QKKyAgVE8gUFVCTElDOworCitTRUxFQ1QgKgorICBGUk9NIHRlc3Q7CisKKy0t IENoZWNrIHRoYXQgc3RhdGVtZW50cyB3aXRob3V0IGNvbHVtbnMgbG9nCitTRUxFQ1QKKyAg RlJPTSB0ZXN0OworCitTRUxFQ1QgMSwKKwkgICBjdXJyZW50X3VzZXI7CisKK0RPICQkCitE RUNMQVJFCisJdGVzdCBJTlQ7CitCRUdJTgorCVNFTEVDVCAxCisJICBJTlRPIHRlc3Q7CitF TkQgJCQ7CisKK2V4cGxhaW4gc2VsZWN0IDE7CisKKy0tCistLSBUZXN0IHRoYXQgbG9va3Mg aW5zaWRlIG9mIGRvIGJsb2NrcyBsb2cKK0lOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZB TFVFUyAoMSk7CitJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDIpOworSU5T RVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgzKTsKKworRE8gJCQKK0RFQ0xBUkUK KwlyZXN1bHQgUkVDT1JEOworQkVHSU4KKwlGT1IgcmVzdWx0IElOCisJCVNFTEVDVCBpZAor CQkgIEZST00gdGVzdAorCUxPT1AKKwkJSU5TRVJUIElOVE8gdGVzdCAoaWQpCisJCQkgVkFM VUVTIChyZXN1bHQuaWQgKyAxMDApOworCUVORCBMT09QOworRU5EICQkOworCistLQorLS0g VGVzdCBvYmZ1c2NhdGVkIGR5bmFtaWMgc3FsIGZvciBjbGVhbiBsb2dnaW5nCitETyAkJAor REVDTEFSRQorCXRhYmxlX25hbWUgVEVYVCA9ICdkb190YWJsZSc7CitCRUdJTgorCUVYRUNV VEUgJ0NSRUFURSBUQUJMRSAnIHx8IHRhYmxlX25hbWUgfHwgJyAoIndlaXJkIG5hbWUiIElO VCknOworCUVYRUNVVEUgJ0RST1AgdGFibGUgJyB8fCB0YWJsZV9uYW1lOworRU5EICQkOwor CistLQorLS0gR2VuZXJhdGUgYW4gZXJyb3IgYW5kIG1ha2Ugc3VyZSB0aGUgc3RhY2sgZ2V0 cyBjbGVhcmVkCitETyAkJAorQkVHSU4KKwlDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9j aworCSgKKwkJaWQgSU5UCisJKTsKK0VORCAkJDsKKworLS0KKy0tIFRlc3QgYWx0ZXIgdGFi bGUgc3RhdGVtZW50cworQUxURVIgVEFCTEUgcHVibGljLnRlc3QKKwlEUk9QIENPTFVNTiBk ZXNjcmlwdGlvbiA7CisKK0FMVEVSIFRBQkxFIHB1YmxpYy50ZXN0CisJUkVOQU1FIFRPIHRl c3QyOworCitBTFRFUiBUQUJMRSBwdWJsaWMudGVzdDIKKwlTRVQgU0NIRU1BIHRlc3Q7CisK K0FMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlBREQgQ09MVU1OIGRlc2NyaXB0aW9uIFRFWFQ7 CisKK0FMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbjsK KworRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOworCistLQorLS0gVGVzdCBtdWx0aXBsZSBzdGF0 ZW1lbnRzIHdpdGggb25lIHNlbWktY29sb24KK0NSRUFURSBTQ0hFTUEgZm9vCisJQ1JFQVRF IFRBQkxFIGZvby5iYXIgKGlkIGludCkKKwlDUkVBVEUgVEFCTEUgZm9vLmJheiAoaWQgaW50 KTsKKworLS0KKy0tIFRlc3QgYWdncmVnYXRlCitDUkVBVEUgRlVOQ1RJT04gcHVibGljLmlu dF9hZGQKKygKKwlhIElOVCwKKwliIElOVAorKQorCVJFVFVSTlMgSU5UIExBTkdVQUdFIHBs cGdzcWwgQVMgJCQKK0JFR0lOCisJcmV0dXJuIGEgKyBiOworRU5EICQkOworCitTRUxFQ1Qg aW50X2FkZCgxLCAxKTsKKworQ1JFQVRFIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoSU5U KSAoU0ZVTkM9cHVibGljLmludF9hZGQsIFNUWVBFPUlOVCwgSU5JVENPTkQ9JzAnKTsKK0FM VEVSIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoaW50ZWdlcikgUkVOQU1FIFRPIHN1bV90 ZXN0MjsKKworLS0KKy0tIFRlc3QgY29udmVyc2lvbgorQ1JFQVRFIENPTlZFUlNJT04gcHVi bGljLmNvbnZlcnNpb25fdGVzdCBGT1IgJ1NRTF9BU0NJSScgVE8gJ01VTEVfSU5URVJOQUwn IEZST00gcGdfY2F0YWxvZy5hc2NpaV90b19taWM7CitBTFRFUiBDT05WRVJTSU9OIHB1Ymxp Yy5jb252ZXJzaW9uX3Rlc3QgUkVOQU1FIFRPIGNvbnZlcnNpb25fdGVzdDI7CisKKy0tCist LSBUZXN0IGNyZWF0ZS9hbHRlci9kcm9wIGRhdGFiYXNlCitDUkVBVEUgREFUQUJBU0UgY29u dHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQ7CitBTFRFUiBEQVRBQkFTRSBjb250cmliX3JlZ3Jl c3Npb25fcGdhdWRpdCBSRU5BTUUgVE8gY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQyOwor RFJPUCBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7CisKKy0tCistLSBU ZXN0IHRoYXQgZnJlZXMgYSBtZW1vcnkgY29udGV4dCBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQK K0NSRUFURSBUQUJMRSBob2dlCisoCisJaWQgaW50CispOworCitDUkVBVEUgRlVOQ1RJT04g dGVzdCgpCisJUkVUVVJOUyBJTlQgQVMgJCQKK0RFQ0xBUkUKKwljdXIxIGN1cnNvciBmb3Ig c2VsZWN0ICogZnJvbSBob2dlOworCXRtcCBpbnQ7CitCRUdJTgorCU9QRU4gY3VyMTsKKwlG RVRDSCBjdXIxIGludG8gdG1wOworCVJFVFVSTiB0bXA7CitFTkQgJCQKK0xBTkdVQUdFIHBs cGdzcWwgOworCitTRUxFQ1QgdGVzdCgpOworCistLQorLS0gRGVsZXRlIGFsbCByb3dzIHRo ZW4gZGVsZXRlIDEgcm93CitTRVQgcGdfYXVkaXQubG9nID0gJ3dyaXRlJzsKK1NFVCBwZ19h dWRpdC5yb2xlID0gJ2F1ZGl0b3InOworCitjcmVhdGUgdGFibGUgYmFyCisoCisJY29sIGlu dAorKTsKKworZ3JhbnQgZGVsZXRlCisgICBvbiBiYXIKKyAgIHRvIGF1ZGl0b3I7CisKK2lu c2VydCBpbnRvIGJhciAoY29sKQorCQkgdmFsdWVzICgxKTsKK2RlbGV0ZSBmcm9tIGJhcjsK KworaW5zZXJ0IGludG8gYmFyIChjb2wpCisJCSB2YWx1ZXMgKDEpOworZGVsZXRlIGZyb20g YmFyCisgd2hlcmUgY29sID0gMTsKKworZHJvcCB0YWJsZSBiYXI7CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApp bmRleCA0OWE2Y2U4Li4wYTJiYWU4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29udHJp Yi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKQEAgLTEyNCw2ICsxMjQs NyBAQCBDUkVBVEUgRVhURU5TSU9OIDxyZXBsYWNlYWJsZT5tb2R1bGVfbmFtZTwvPiBGUk9N IHVucGFja2FnZWQ7CiAgJmx0cmVlOwogICZwYWdlaW5zcGVjdDsKICAmcGFzc3dvcmRjaGVj azsKKyAmcGdhdWRpdDsKICAmcGdidWZmZXJjYWNoZTsKICAmcGdjcnlwdG87CiAgJnBnZnJl ZXNwYWNlbWFwOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9k b2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAppbmRleCAyNmFhN2VlLi5mMzJhMWVkIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv ZmlsZWxpc3Quc2dtbApAQCAtMTI1LDYgKzEyNSw3IEBACiA8IUVOVElUWSBvaWQybmFtZSAg ICAgICAgU1lTVEVNICJvaWQybmFtZS5zZ21sIj4KIDwhRU5USVRZIHBhZ2VpbnNwZWN0ICAg ICBTWVNURU0gInBhZ2VpbnNwZWN0LnNnbWwiPgogPCFFTlRJVFkgcGFzc3dvcmRjaGVjayAg IFNZU1RFTSAicGFzc3dvcmRjaGVjay5zZ21sIj4KKzwhRU5USVRZIHBnYXVkaXQgICAgICAg ICBTWVNURU0gInBnYXVkaXQuc2dtbCI+CiA8IUVOVElUWSBwZ2J1ZmZlcmNhY2hlICAgU1lT VEVNICJwZ2J1ZmZlcmNhY2hlLnNnbWwiPgogPCFFTlRJVFkgcGdjcnlwdG8gICAgICAgIFNZ U1RFTSAicGdjcnlwdG8uc2dtbCI+CiA8IUVOVElUWSBwZ2ZyZWVzcGFjZW1hcCAgU1lTVEVN ICJwZ2ZyZWVzcGFjZW1hcC5zZ21sIj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ2F1 ZGl0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdhdWRpdC5zZ21sCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmJhMDRlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3Jj L3NnbWwvcGdhdWRpdC5zZ21sCkBAIC0wLDAgKzEsNjE0IEBACis8IS0tIGRvYy9zcmMvc2dt bC9wZ2F1ZGl0LnNnbWwgLS0+CisKKzxzZWN0MSBpZD0icGdhdWRpdCIgeHJlZmxhYmVsPSJw Z2F1ZGl0Ij4KKyAgPHRpdGxlPnBnX2F1ZGl0PC90aXRsZT4KKworICA8aW5kZXh0ZXJtIHpv bmU9InBnYXVkaXQiPgorICAgIDxwcmltYXJ5PnBnX2F1ZGl0PC9wcmltYXJ5PgorICA8L2lu ZGV4dGVybT4KKworICA8cGFyYT4KKyAgICBUaGUgPGZpbGVuYW1lPnBnX2F1ZGl0PC9maWxl bmFtZT4gZXh0ZW5zdGlvbiBwcm92aWRlcyBkZXRhaWxlZCBzZXNzaW9uCisgICAgYW5kL29y IG9iamVjdCBhdWRpdCBsb2dnaW5nIHZpYSB0aGUgc3RhbmRhcmQgbG9nZ2luZyBmYWNpbGl0 eS4gIFRoZSBnb2FsCisgICAgaXMgdG8gcHJvdmlkZSB0aGUgdG9vbHMgbmVlZGVkIHRvIHBy b2R1Y2UgYXVkaXQgbG9ncyByZXF1aXJlZCB0byBwYXNzIGFueQorICAgIGdvdmVybWVudCwg ZmluYW5jaWFsLCBvciBJU08gY2VydGlmaWNhdGlvbiBhdWRpdC4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgIEFuIGF1ZGl0IGlzIGFuIG9mZmljaWFsIGluc3BlY3Rpb24gb2YgYW4g aW5kaXZpZHVhbCdzIG9yIG9yZ2FuaXphdGlvbidzCisgICAgYWNjb3VudHMsIHR5cGljYWxs eSBieSBhbiBpbmRlcGVuZGVudCBib2R5LiAgVGhlIGluZm9ybWF0aW9uIGdhdGhlcmVkIGJ5 CisgICAgPGZpbGVuYW1lPnBnX2F1ZGl0PC9maWxlbmFtZT4gaXMgcHJvcGVybHkgY2FsbGVk IGFuIGF1ZGl0IHRyYWlsIG9yIGF1ZGl0CisgICAgbG9nLiAgVGhlIHRlcm0gYXVkaXQgbG9n IGlzIHVzZWQgaW4gdGhpcyBkb2N1bWVudGF0aW9uLgorICA8L3BhcmE+CisKKyAgPHNlY3Qy PgorICAgIDx0aXRsZT5XaHkgPGxpdGVyYWw+cGdfYXVkaXQ8Lz4/PC90aXRsZT4KKyAgCisg ICAgPHBhcmE+CisgICAgICBCYXNpYyBzdGF0ZW1lbnQgbG9nZ2luZyBjYW4gYmUgcHJvdmlk ZWQgYnkgdGhlIHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxpdHkKKyAgICAgIHVzaW5nIDxsaXRl cmFsPmxvZ19zdGF0ZW1lbnRzID0gYWxsPC8+LiAgVGhpcyBpcyBhY2NlcHRhYmxlIGZvciBt b25pdG9yaW5nCisgICAgICBhbmQgb3RoZXIgdXNhZ2VzIGJ1dCBkb2VzIG5vdCBwcm92aWRl IHRoZSBsZXZlbCBvZiBkZXRhaWwgZ2VuZXJhbGx5CisgICAgICByZXF1aXJlZCBmb3IgYW4g YXVkaXQuICBJdCBpcyBub3QgZW5vdWdoIHRvIGhhdmUgYSBsaXN0IG9mIGFsbCB0aGUKKyAg ICAgIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGFnYWluc3QgdGhlIGRhdGFiYXNlLiBJdCBtdXN0 IGFsc28gYmUgcG9zc2libGUgdG8KKyAgICAgIGZpbmQgcGFydGljdWxhciBzdGF0ZW1lbnRz IHRoYXQgYXJlIG9mIGludGVyZXN0IHRvIGFuIGF1ZGl0b3IuCisgICAgPC9wYXJhPgorCisg ICAgPHBhcmE+CisgICAgICBGb3IgZXhhbXBsZSwgYW4gYXVkaXRvciBtYXkgd2FudCB0byB2 ZXJpZnkgdGhhdCBhIHBhcnRpY3VsYXIgdGFibGUgd2FzCisgICAgICBjcmVhdGVkIGluc2lk ZSBhIGRvY3VtZW50ZWQgbWFpbnRlbmNlIHdpbmRvdy4gIFRoaXMgbWlnaHQgc2VlbSBsaWtl IGEKKyAgICAgIHNpbXBsZSBqb2IgZm9yIGdyZXAsIGJ1dCB3aGF0IGlmIHlvdSBhcmUgcHJl c2VudGVkIHdpdGggc29tZXRoaW5nIGxpa2UKKyAgICAgIHRoaXMgKGludGVudGlvbmFsbHkg b2JmdXNjYXRlZCkgZXhhbXBsZToKKyAgICA8L3BhcmE+CisKKyAgICA8cHJvZ3JhbWxpc3Rp bmc+CitETyAkJAorQkVHSU4KKyAgICBFWEVDVVRFICdDUkVBVEUgVEFCTEUgaW1wb3J0JyB8 fCAnYW50X3RhYmxlIChpZCBJTlQpJzsKK0VORCAkJDsKKyAgICA8L3Byb2dyYW1saXN0aW5n PgorICAgIAorICAgIDxwYXJhPgorICAgICAgU3RhbmRhcmQgbG9nZ2luZyB3aWxsIGdpdmUg eW91IHRoaXM6CisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPgorTE9HOiAg c3RhdGVtZW50OiBETyAkJAorQkVHSU4KKyAgICBFWEVDVVRFICdDUkVBVEUgVEFCTEUgaW1w b3J0JyB8fCAnYW50X3RhYmxlIChpZCBJTlQpJzsKK0VORCAkJDsKKyAgICA8L3Byb2dyYW1s aXN0aW5nPgorICAgIAorICAgIDxwYXJhPgorICAgICAgSXQgYXBwZWFycyB0aGF0IGZpbmRp bmcgdGhlIHRhYmxlIG9mIGludGVyZXN0IG1heSByZXF1aXJlIHNvbWUga25vd2xlZGdlCisg ICAgICBvZiB0aGUgY29kZSBpbiBjYXNlcyB3aGVyZSB0YWJsZXMgYXJlIGNyZWF0ZWQgZHlu YW1pY2FsbHkuICBUaGlzIGlzIG5vdAorICAgICAgaWRlYWwgc2luY2UgaXQgd291bGQgYmUg cHJlZmVycmFibGUgdG8ganVzdCBzZWFyY2ggb24gdGhlIHRhYmxlIG5hbWUuCisgICAgICBU aGlzIGlzIHdoZXJlIDxsaXRlcmFsPnBnX2F1ZGl0PC8+IGNvbWVzIGluLiAgRm9yIHRoZSBz YW1lIGlucHV0LAorICAgICAgaXQgd2lsbCBwcm9kdWNlIHRoaXMgb3V0cHV0IGluIHRoZSBs b2c6CisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPgorQVVESVQ6IFNFU1NJ T04sMzMsMSxGVU5DVElPTixETywsLCJETyAkJAorQkVHSU4KKyAgICBFWEVDVVRFICdDUkVB VEUgVEFCTEUgaW1wb3J0JyB8fCAnYW50X3RhYmxlIChpZCBJTlQpJzsKK0VORCAkJDsiCitB VURJVDogU0VTU0lPTiwzMywyLERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGljLmltcG9y dGFudF90YWJsZSxDUkVBVEUgVEFCTEUgaW1wb3J0YW50X3RhYmxlIChpZCBJTlQpCisgICAg PC9wcm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgorICAgICAgTm90IG9ubHkgaXMgdGhl IDxsaXRlcmFsPkRPPC8+IGJsb2NrIGxvZ2dlZCwgYnV0IHN1YnN0YXRlbWVudCAyIGNvbnRh aW5zCisgICAgICB0aGUgZnVsbCB0ZXh0IG9mIHRoZSA8bGl0ZXJhbD5DUkVBVEUgVEFCTEU8 Lz4gd2l0aCB0aGUgc3RhdGVtZW50IHR5cGUsCisgICAgICBvYmplY3QgdHlwZSwgYW5kIGZ1 bGwtcXVhbGlmaWVkIG5hbWUgdG8gbWFrZSBzZWFyY2hlcyBlYXN5LgorICAgIDwvcGFyYT4K KworICAgIDxwYXJhPgorICAgICAgV2hlbiBsb2dnaW5nIDxsaXRlcmFsPlNFTEVDVDwvPiBh bmQgPGxpdGVyYWw+RE1MPC8+IHN0YXRlbWVudHMsCisgICAgICA8bGl0ZXJhbD5wZ19hdWRp dDwvPiBjYW4gYmUgY29uZmlndXJlZCB0byBsb2cgYSBzZXBhcmF0ZSBlbnRyeSBmb3IgZWFj aAorICAgICAgcmVsYXRpb24gcmVmZXJlbmNlZCBpbiBhIHN0YXRlbWVudC4gIE5vIHBhcnNp bmcgaXMgcmVxdWlyZWQgdG8gZmluZCBhbGwKKyAgICAgIHN0YXRlbWVudHMgdGhhdCB0b3Vj aCBhIHBhcnRpY3VsYXIgdGFibGUuICBJbiBmYWN0LCB0aGUgZ29hbCBpcyB0aGF0IHRoZQor ICAgICAgc3RhdGVtZW50IHRleHQgaXMgcHJvdmlkZWQgcHJpbWFyaWx5IGZvciBkZWVwIGZv cmVuc2ljcyBhbmQgc2hvdWxkIG5vdCBiZQorICAgICAgdGhlIGRpcmVjdGx5IHJlcXVpcmVk IGZvciBhbnkgc2VhcmNoLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0Mj4KKworICA8c2VjdDI+ CisgICAgPHRpdGxlPlVzYWdlIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKyAgICAKKyAgICA8 cGFyYT4KKyAgICAgIERlcGVuZGluZyBvbiBzZXR0aW5ncywgaXQgaXMgcG9zc2libGUgZm9y IDxsaXRlcmFsPnBnX2F1ZGl0PC9saXRlcmFsPiB0bworICAgICAgZ2VuZXJhdGUgYW4gZW5v cm1vdXMgdm9sdW1lIG9mIGxvZ2dpbmcuICBCZSBjYXJlZnVsIHRvIGRldGVybWluZQorICAg ICAgZXhhY3RseSB3aGF0IG5lZWRzIHRvIGJlIGF1ZGl0IGxvZ2dlZCBpbiB5b3VyIGVudmly b25tZW50IHRvIGF2b2lkCisgICAgICBsb2dnaW5nIHRvbyBtdWNoLgorICAgIDwvcGFyYT4K KyAgICAKKyAgICA8cGFyYT4KKyAgICAgIEZvciBleGFtcGxlLCB3aGVuIHdvcmtpbmcgaW4g YW4gT0xBUCBlbnZpcm9ubWVudCBpdCB3b3VsZCBwcm9iYWJseSBub3QgYmUKKyAgICAgIHdp c2UgdG8gYXVkaXQgbG9nIGluc2VydHMgaW50byBhIGxhcmdlIGZhY3QgdGFibGUuICBUaGUg c2l6ZSBvZiB0aGUgbG9nCisgICAgICBmaWxlIHdpbGwgbGlrZWx5IGJlIG1hbnkgdGltZXMg dGhlIGFjdHVhbCBkYXRhIHNpemUgb2YgdGhlIGluc2VydHMgYmVjYXVzZQorICAgICAgdGhl IGxvZyBmaWxlIGlzIGV4cHJlc3NlZCBhcyB0ZXh0LiAgU2luY2UgbG9ncyBhcmUgZ2VuZXJh bGx5IHN0b3JlZCB3aXRoCisgICAgICB0aGUgT1MgdGhpcyBtYXkgbGVhZCB0byBkaXNrIHNw YWNlIGJlaW5nIGV4aGF1c3RlZCB2ZXJ5CisgICAgICBxdWlja2x5LiAgSW4gY2FzZXMgd2hl cmUgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGxpbWl0IGF1ZGl0IGxvZ2dpbmcgdG8KKyAgICAg IGNlcnRhaW4gdGFibGVzLCBiZSBzdXJlIHRvIGFzc2VzcyB0aGUgcGVyZm9ybWFuY2UgaW1w YWN0IHdoaWxlIHRlc3RpbmcKKyAgICAgIGFuZCBhbGxvY2F0ZSBwbGVudHkgb2Ygc3BhY2Ug b24gdGhlIGxvZyB2b2x1bWUuICBUaGlzIG1heSBhbHNvIGJlIHRydWUgZm9yCisgICAgICBP TFRQIGVudmlyb25tZW50cy4gIEV2ZW4gaWYgdGhlIGluc2VydCB2b2x1bWUgaXMgbm90IGFz IGhpZ2gsIHRoZQorICAgICAgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIGF1ZGl0IGxvZ2dpbmcg bWF5IHN0aWxsIG5vdGljZWFibHkgYWZmZWN0IGxhdGVuY3kuCisgICAgPC9wYXJhPgorICAg IAorICAgIDxwYXJhPgorICAgICAgVG8gbGltaXQgdGhlIG51bWJlciBvZiByZWxhdGlvbnMg YXVkaXQgbG9nZ2VkIGZvciA8bGl0ZXJhbD5TRUxFQ1Q8Lz4KKyAgICAgIGFuZCA8bGl0ZXJh bD5ETUw8Lz4gc3RhdG1lbnRzLCBjb25zaWRlciB1c2luZyBvYmplY3QgYXVkaXQgbG9nZ2lu ZworICAgICAgKHNlZSA8eHJlZiBsaW5rZW5kPSJwZ2F1ZGl0LW9iamVjdC1hdWRpdC1sb2dn aW5nIj4pLiAgT2JqZWN0IGF1ZGl0IGxvZ2dpbmcKKyAgICAgIGFsbG93cyBzZWxlY3Rpb24g b2YgdGhlIHJlbGF0aW9ucyB0byBiZSBsb2dnZWQgYWxsb3dpbmcgZm9yIHJlZHVjdGlvbgor ICAgICAgb2YgdGhlIG92ZXJhbGwgbG9nIHZvbHVtZS4gIEhvd2V2ZXIsIHdoZW4gbmV3IHJl bGF0aW9ucyBhcmUgYWRkZWQgdGhleQorICAgICAgbXVzdCBiZSBleHBsaWNpdGx5IGFkZGVk IHRvIG9iamVjdCBhdWRpdCBsb2dnaW5nLiAgQSBwcm9ncmFtbWF0aWMKKyAgICAgIHNvbHV0 aW9uIHdoZXJlIHNwZWNpZmllZCB0YWJsZXMgYXJlIGV4Y2x1ZGVkIGZyb20gbG9nZ2luZyBh bmQgYWxsIG90aGVycworICAgICAgYXJlIGluY2x1ZGVkIG1heSBiZSBhIGdvb2Qgb3B0aW9u IGluIHRoaXMgY2FzZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDI+CisgIAorICA8c2VjdDI+ CisgICAgPHRpdGxlPlNldHRpbmdzPC90aXRsZT4KKyAgICAKKyAgICA8cGFyYT4KKyAgICAg IFNldHRpbmdzIG1heSBiZSBtb2RpZmllZCBvbmx5IGJ5IGEgc3VwZXJ1c2VyLiBBbGxvd2lu ZyBub3JtYWwgdXNlcnMgdG8KKyAgICAgIGNoYW5nZSB0aGVpciBzZXR0aW5ncyB3b3VsZCBk ZWZlYXQgdGhlIHBvaW50IG9mIGFuIGF1ZGl0IGxvZy4KKyAgICA8L3BhcmE+CisgICAgICAK KyAgICA8cGFyYT4KKyAgICAgIFNldHRpbmdzIGNhbiBiZSBzcGVjaWZpZWQgZ2xvYmFsbHkg KGluCisgICAgICA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gb3IgdXNp bmcKKyAgICAgIDxsaXRlcmFsPkFMVEVSIFNZU1RFTSAuLi4gU0VUPC8+KSwgYXQgdGhlIGRh dGFiYXNlIGxldmVsICh1c2luZworICAgICAgPGxpdGVyYWw+QUxURVIgREFUQUJBU0UgLi4u IFNFVDwvbGl0ZXJhbD4pLCBvciBhdCB0aGUgcm9sZSBsZXZlbCAodXNpbmcKKyAgICAgIDxs aXRlcmFsPkFMVEVSIFJPTEUgLi4uIFNFVDwvbGl0ZXJhbD4pLiAgTm90ZSB0aGF0IHNldHRp bmdzIGFyZSBub3QKKyAgICAgIGluaGVyaXRlZCB0aHJvdWdoIG5vcm1hbCByb2xlIGluaGVy aXRhbmNlIGFuZCA8bGl0ZXJhbD5TRVQgUk9MRTwvPiB3aWxsCisgICAgICBub3QgYWx0ZXIg YSB1c2VyJ3MgPGxpdGVyYWw+cGdfYXVkaXQ8Lz4gc2V0dGluZ3MuICBUaGlzIGlzIGEgbGlt aXRhdGlvbgorICAgICAgb2YgdGhlIHJvbGVzIHN5c3RlbSBhbmQgbm90IGluaGVyZW50IHRv IDxsaXRlcmFsPnBnX2F1ZGl0PC8+LgorICAgIDwvcGFyYT4KKyAgICAgIAorICAgIDxwYXJh PgorICAgICAgVGhlIDxsaXRlcmFsPnBnX2F1ZGl0PC8+IGV4dGVuc2lvbiBtdXN0IGJlIGxv YWRlZCBpbgorICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLXNoYXJlZC1wcmVsb2FkLWxpYnJh cmllcyI+LiAgT3RoZXJ3aXNlLCBhbiBlcnJvcgorICAgICAgd2lsbCBiZSByYWlzZWQgYXQg bG9hZCB0aW1lIGFuZCBubyBhdWRpdCBsb2dnaW5nIHdpbGwgb2NjdXIuCisgICAgPC9wYXJh PgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1w Z2F1ZGl0LWxvZyIgeHJlZmxhYmVsPSJwZ19hdWRpdC5sb2ciPgorICAgICAgICA8dGVybT48 dmFybmFtZT5wZ19hdWRpdC5sb2c8L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQor ICAgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5w Z19hdWRpdC5sb2c8Lz4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAg ICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3BlY2lmaWVzIHdoaWNoIGNsYXNz ZXMgb2Ygc3RhdGVtZW50cyB3aWxsIGJlIGxvZ2dlZCBieSBzZXNzaW9uCisgICAgICAgICAg ICBhdWRpdCBsb2dnaW5nLiAgUG9zc2libGUgdmFsdWVzIGFyZToKKyAgICAgICAgICA8L3Bh cmE+CisKKyAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5SRUFE PC9saXRlcmFsPiAtIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gYW5kCisgICAgICAgICAg ICAgICAgPGxpdGVyYWw+Q09QWTwvbGl0ZXJhbD4gd2hlbiB0aGUgc291cmNlIGlzIGEgcmVs YXRpb24gb3IgYQorICAgICAgICAgICAgICAgIHF1ZXJ5LgorICAgICAgICAgICAgICA8L3Bh cmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5XUklURTwv bGl0ZXJhbD4gLSA8bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LAorICAgICAgICAgICAgICAg IDxsaXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIDxsaXRlcmFsPkRFTEVURTwvbGl0ZXJhbD4s CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+LCBhbmQgPGxp dGVyYWw+Q09QWTwvbGl0ZXJhbD4gd2hlbiB0aGUKKyAgICAgICAgICAgICAgICBkZXN0aW5h dGlvbiBpcyBhIHJlbGF0aW9uLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAg ICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8 cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5GVU5DVElPTjwvbGl0ZXJhbD4gLSBG dW5jdGlvbiBjYWxscyBhbmQKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5ETzwvbGl0ZXJh bD4gYmxvY2tzLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgICAgICA8bGl0ZXJhbD5ST0xFPC9saXRlcmFsPiAtIFN0YXRlbWVudHMgcmVs YXRlZCB0byByb2xlcyBhbmQKKyAgICAgICAgICAgICAgICBwcml2aWxlZ2VzOiA8bGl0ZXJh bD5HUkFOVDwvbGl0ZXJhbD4sCisgICAgICAgICAgICAgICAgPGxpdGVyYWw+UkVWT0tFPC9s aXRlcmFsPiwKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5DUkVBVEUvQUxURVIvRFJPUCBS T0xFPC9saXRlcmFsPi4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+RERMPC9saXRlcmFsPiAtIEFsbCA8bGl0ZXJh bD5EREw8Lz4gdGhhdCBpcyBub3QgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICBpbiB0aGUg PGxpdGVyYWw+Uk9MRTwvPiBjbGFzcyBwbHVzIDxsaXRlcmFsPlJFSU5ERVg8Lz4uCisgICAg ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxs aXRlcmFsPlBBUkFNRVRFUjwvbGl0ZXJhbD4gLSBQYXJhbWV0ZXJzIHRoYXQgd2VyZSBwYXNz ZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgIHN0YXRlbWVudC4gIFBhcmFtZXRlcnMgaW1t ZWRpYXRlbHkgZm9sbG93IHRoZSBzdGF0ZW1lbnQgdGV4dC4KKyAgICAgICAgICAgICAgPC9w YXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+TUlTQzwv bGl0ZXJhbD4gLSBNaXNjZWxsYW5lb3VzIGNvbW1hbmRzLCBlLmcuCisgICAgICAgICAgICAg ICAgPGxpdGVyYWw+RElTQ0FSRDwvbGl0ZXJhbD4sIDxsaXRlcmFsPkZFVENIPC9saXRlcmFs PiwKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5DSEVDS1BPSU5UPC9saXRlcmFsPiwgPGxp dGVyYWw+VkFDVVVNPC9saXRlcmFsPi4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAg ICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAg ICAgIAorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTXVsdGlwbGUgY2xhc3NlcyBj YW4gYmUgcHJvdmlkZWQgdXNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBhbmQKKyAgICAg ICAgICAgIGNsYXNzZXMgY2FuIGJlIHN1YnRyYWN0ZWQgYnkgcHJlZmFjaW5nIHRoZSBjbGFz cyB3aXRoIGEKKyAgICAgICAgICAgIDxsaXRlcmFsPi08Lz4gc2lnbiAoc2VlIDx4cmVmIGxp bmtlbmQ9InBnYXVkaXQtc2Vzc2lvbi1hdWRpdC1sb2dnaW5nIj4pLgorICAgICAgICAgICAg VGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+bm9uZTwvPi4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZh cmxpc3RlbnRyeSBpZD0iZ3VjLXBnYXVkaXQtbG9nLW5vdGljZSIgeHJlZmxhYmVsPSJwZ19h dWRpdC5sb2dfbm90aWNlIj4KKyAgICAgICAgPHRlcm0+PHZhcm5hbWU+cGdfYXVkaXQubG9n X25vdGljZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgICAgIDxp bmRleHRlcm0+CisgICAgICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19hdWRpdC5sb2df bm90aWNlPC8+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHRoZSBhdWRpdCBs b2cgbWVzc2FnZXMgc2hvdWxkIGJlIHJhaXNlZCBhcworICAgICAgICAgICAgPGxpdGVyYWw+ Tk9USUNFPC8+IGluc3RlYWQgb2YgPGxpdGVyYWw+TE9HPC8+LiAgVGhlIHByaW1hcnkKKyAg ICAgICAgICAgIGFkdmFudGFnZSBpcyB0aGF0IDxsaXRlcmFsPk5PVElDRTwvPiBtZXNzYWdl cyBjYW4gYmUgZXhwb3NlZAorICAgICAgICAgICAgdGhyb3VnaCB0aGUgdXNlciBpbnRlcmZh Y2UuICBUaGlzIHNldHRpbmcgaXMgdXNlZCBmb3IgcmVncmVzc2lvbgorICAgICAgICAgICAg dGVzdGluZyBhbmQgbWF5IGFsc28gYmUgdXNlZnVsIHRvIGVuZCB1c2VycyBmb3IgdGVzdGlu Zy4gIEl0IGlzIG5vdAorICAgICAgICAgICAgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBhIHBy b2R1Y3Rpb24gZW52aXJvbm1lbnQgYXMgaXQgd2lsbCBsZWFrCisgICAgICAgICAgICB3aGlj aCBzdGF0ZW1lbnRzIGFyZSBiZWluZyBsb2dnZWQgdG8gdGhlIHVzZXIuIFRoZSBkZWZhdWx0 IGlzCisgICAgICAgICAgICA8bGl0ZXJhbD5vZmY8Lz4uCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1wZ2F1ZGl0LWxvZy1yZWxhdGlvbiIgeHJlZmxhYmVsPSJw Z19hdWRpdC5sb2dfcmVsYXRpb24iPgorICAgICAgICA8dGVybT48dmFybmFtZT5wZ19hdWRp dC5sb2dfcmVsYXRpb248L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAg ICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfYXVk aXQubG9nX3JlbGF0aW9uPC8+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5Pgor ICAgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNwZWNpZmllcyB3aGV0aGVy IHNlc3Npb24gYXVkaXQgbG9nZ2luZyBzaG91bGQgY3JlYXRlIGEgc2VwYXJhdGUKKyAgICAg ICAgICAgIGxvZyBlbnRyeSBmb3IgZWFjaCByZWxhdGlvbiAoPGxpdGVyYWw+VEFCTEU8Lz4s IDxsaXRlcmFsPlZJRVc8Lz4sCisgICAgICAgICAgICBldGMuKSByZWZlcmVuY2VkIGluIGEg PGxpdGVyYWw+U0VMRUNUPC8+IG9yIDxsaXRlcmFsPkRNTDwvPgorICAgICAgICAgICAgc3Rh dGVtZW50LiAgVGhpcyBpcyBhIHVzZWZ1bCBzaG9ydGN1dCBmb3IgZXhoYXVzdGl2ZSBsb2dn aW5nCisgICAgICAgICAgICB3aXRob3V0IHVzaW5nIG9iamVjdCBhdWRpdCBsb2dnaW5nLiAg VGhlIGRlZmF1bHQgaXMKKyAgICAgICAgICAgIDxsaXRlcmFsPm9mZjwvPi4KKyAgICAgICAg ICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXBnYXVkaXQtcm9sZSIgeHJlZmxhYmVs PSJwZ19hdWRpdC5yb2xlIj4KKyAgICAgICAgPHRlcm0+PHZhcm5hbWU+cGdfYXVkaXQucm9s ZTwvdmFybmFtZT4gKDx0eXBlPnN0cmluZzwvdHlwZT4pCisgICAgICAgICAgPGluZGV4dGVy bT4KKyAgICAgICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX2F1ZGl0LnJvbGU8Lz4gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICAgICAgPC9pbmRleHRlcm0+ CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJh PgorICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBtYXN0ZXIgcm9sZSB0byB1c2UgZm9yIG9i amVjdCBhdWRpdCBsb2dnaW5nLiAgTXVsaXBsZQorICAgICAgICAgICAgYXVkaXQgcm9sZXMg Y2FuIGJlIGRlZmluZWQgYnkgZ3JhbnRpbmcgdGhlbSB0byB0aGUgbWFzdGVyIHJvbGUuCisg ICAgICAgICAgICBUaGlzIGFsbG93cyBtdWx0aXBsZSBncm91cHMgdG8gYmUgaW4gY2hhcmdl IG9mIGRpZmZlcmVudCBhc3BlY3RzCisgICAgICAgICAgICBvZiBhdWRpdCBsb2dnaW5nLiAg VGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAg PC9zZWN0Mj4KKworICA8c2VjdDIgaWQ9InBnYXVkaXQtc2Vzc2lvbi1hdWRpdC1sb2dnaW5n Ij4KKyAgICA8dGl0bGU+U2Vzc2lvbiBBdWRpdCBMb2dnaW5nPC90aXRsZT4KKworICAgIDxw YXJhPgorICAgICAgU2Vzc2lvbiBhdWRpdCBsb2dnaW5nIHByb3ZpZGVzIGRldGFpbGVkIGxv Z3Mgb2YgYWxsIHN0YXRlbWVudHMgZXhlY3V0ZWQKKyAgICAgIGJ5IGEgdXNlciBpbiB0aGUg YmFja2VuZC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdDM+CisgICAgICA8dGl0bGU+Q29u ZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBTZXNzaW9uIGxv Z2dpbmcgaXMgZW5hYmxlZCB3aXRoIHRoZSA8eHJlZiBsaW5rZW5kPSJndWMtcGdhdWRpdC1s b2ciPgorICAgICAgICBzZXR0aW5nLgorCisgICAgICAgIEVuYWJsZSBzZXNzaW9uIGxvZ2dp bmcgZm9yIGFsbCA8bGl0ZXJhbD5ETUw8Lz4gYW5kIDxsaXRlcmFsPkRETDwvPiBhbmQKKyAg ICAgICAgbG9nIGFsbCByZWxhdGlvbnMgaW4gPGxpdGVyYWw+RE1MPC8+IHN0YXRlbWVudHM6 CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorc2V0IHBnX2F1ZGl0LmxvZyA9ICd3cml0 ZSwgZGRsJzsKK3NldCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBvbjsKKyAgICAgICAgICA8 L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAg ICAgRW5hYmxlIHNlc3Npb24gbG9nZ2luZyBmb3IgYWxsIGNvbW1hbmRzIGV4Y2VwdCA8bGl0 ZXJhbD5NSVNDPC8+IGFuZAorICAgICAgICByYWlzZSBhdWRpdCBsb2cgbWVzc2FnZXMgYXMg PGxpdGVyYWw+Tk9USUNFPC8+OgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3NldCBw Z19hdWRpdC5sb2cgPSAnYWxsLCAtbWlzYyc7CitzZXQgcGdfYXVkaXQubG9nX25vdGljZSA9 IG9uOworICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L3BhcmE+CisgICAg PC9zZWN0Mz4KKworICAgIDxzZWN0Mz4KKyAgICAgIDx0aXRsZT5FeGFtcGxlPC90aXRsZT4K KworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgZXhhbXBsZSBzZXNzaW9uIGF1ZGl0 IGxvZ2dpbmcgaXMgdXNlZCB0byBmb3IgbG9nZ2luZworICAgICAgICA8bGl0ZXJhbD5EREw8 Lz4gYW5kIDxsaXRlcmFsPlNFTEVDVDwvPiBzdGF0ZW1lbnRzLiAgTm90ZSB0aGF0IHRoZQor ICAgICAgICBpbnNlcnQgc3RhdGVtZW50IGlzIG5vdCBsb2dnZWQgc2luY2UgdGhlIDxsaXRl cmFsPldSSVRFPC8+IGNsYXNzCisgICAgICAgIGlzIG5vdCBlbmFibGVkCisgICAgICA8L3Bh cmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBTUUw6CisgICAgICA8L3BhcmE+CisgICAg ICA8cHJvZ3JhbWxpc3Rpbmc+CitzZXQgcGdfYXVkaXQubG9nID0gJ3JlYWQsIGRkbCc7CisK K2NyZWF0ZSB0YWJsZSBhY2NvdW50CisoCisgICAgaWQgaW50LAorICAgIG5hbWUgdGV4dCwK KyAgICBwYXNzd29yZCB0ZXh0LAorICAgIGRlc2NyaXB0aW9uIHRleHQKKyk7CisKK2luc2Vy dCBpbnRvIGFjY291bnQgKGlkLCBuYW1lLCBwYXNzd29yZCwgZGVzY3JpcHRpb24pCisgICAg ICAgICAgICAgdmFsdWVzICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxhaCcpOwor CitzZWxlY3QgKgorICAgIGZyb20gYWNjb3VudDsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+ CisKKyAgICAgIDxwYXJhPgorICAgICAgICBMb2cgT3V0cHV0OgorICAgICAgPC9wYXJhPgor CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitBVURJVDogU0VTU0lPTiwxLDEsRERMLENSRUFU RSBUQUJMRSxUQUJMRSxwdWJsaWMuYWNjb3VudCxjcmVhdGUgdGFibGUgYWNjb3VudAorKAor ICAgIGlkIGludCwKKyAgICBuYW1lIHRleHQsCisgICAgcGFzc3dvcmQgdGV4dCwKKyAgICBk ZXNjcmlwdGlvbiB0ZXh0CispOworQVVESVQ6IFNFU1NJT04sMiwxLFJFQUQsU0VMRUNULCws c2VsZWN0ICoKKyAgICBmcm9tIGFjY291bnQKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Cisg ICAgPC9zZWN0Mz4KKyAgPC9zZWN0Mj4KKworICA8c2VjdDIgaWQ9InBnYXVkaXQtb2JqZWN0 LWF1ZGl0LWxvZ2dpbmciPgorICAgIDx0aXRsZT5PYmplY3QgQXVkaXRpbmc8L3RpdGxlPgor CisgICAgPHBhcmE+CisgICAgICBPYmplY3QgYXVkaXQgbG9nZ2luZyBsb2dzIHN0YXRlbWVu dHMgdGhhdCBhZmZlY3QgYSBwYXJ0aWN1bGFyIHJlbGF0aW9uLgorICAgICAgT25seSA8bGl0 ZXJhbD5TRUxFQ1Q8Lz4sIDxsaXRlcmFsPklOU0VSVDwvPiwgPGxpdGVyYWw+VVBEQVRFPC8+ IGFuZAorICAgICAgPGxpdGVyYWw+REVMRVRFPC8+IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQu ICA8bGl0ZXJhbD5UUlVOQ0FURTwvPiBpcyBub3QKKyAgICAgIGluY2x1ZGVkIGJlY2F1c2Ug dGhlcmUgaXMgbm8gc3BlY2lmaWMgcHJpdmlsZWdlIGZvciBpdC4KKyAgICA8L3BhcmE+CisK KyAgICA8c2VjdDM+CisgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAg ICAgIDxwYXJhPgorICAgICAgICBPYmplY3QtbGV2ZWwgYXVkaXQgbG9nZ2luZyBpcyBpbXBs ZW1lbnRlZCB2aWEgdGhlIHJvbGVzIHN5c3RlbS4gIFRoZQorICAgICAgICA8eHJlZiBsaW5r ZW5kPSJndWMtcGdhdWRpdC1yb2xlIj4gc2V0dGluZyBkZWZpbmVzIHRoZSByb2xlIHRoYXQK KyAgICAgICAgd2lsbCBiZSB1c2VkIGZvciBhdWRpdCBsb2dnaW5nLiAgQSByZWxhdGlvbiAo PGxpdGVyYWw+VEFCTEU8Lz4sCisgICAgICAgIDxsaXRlcmFsPlZJRVc8Lz4sIGV0Yy4pIHdp bGwgYmUgYXVkaXQgbG9nZ2VkIHdoZW4gdGhlIGF1ZGl0IHJvbGUgaGFzCisgICAgICAgIHBl cm1pc3Npb25zIGZvciB0aGUgY29tbWFuZCBleGVjdXRlZCBvciBpbmhlcml0cyB0aGUgcGVy bWlzc2lvbnMgZnJvbQorICAgICAgICBhbm90aGVyIHJvbGUuICBUaGlzIGFsbG93cyB5b3Ug dG8gZWZmZWN0aXZlbHkgaGF2ZSBtdWx0aXBsZSBhdWRpdCByb2xlcworICAgICAgICBldmVu IHRob3VnaCB0aGVyZSBpcyBhIHNpbmdsZSBtYXN0ZXIgcm9sZSBpbiBhbnkgY29udGV4dC4K KyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBTZXQgPHhyZWYgbGlua2Vu ZD0iZ3VjLXBnYXVkaXQtcm9sZSI+IHRvIDxsaXRlcmFsPmF1ZGl0b3I8Lz4gYW5kCisgICAg ICBncmFudCA8bGl0ZXJhbD5TRUxFQ1Q8Lz4gYW5kIDxsaXRlcmFsPkRFTEVURTwvPiBwcml2 aWxlZ2VzIG9uIHRoZQorICAgICAgPGxpdGVyYWw+YWNjb3VudDwvPiB0YWJsZS4gIEFueSA8 bGl0ZXJhbD5TRUxFQ1Q8Lz4gb3IKKyAgICAgIDxsaXRlcmFsPkRFTEVURTwvPiBzdGF0ZW1l bnRzIG9uIDxsaXRlcmFsPmFjY291bnQ8Lz4gd2lsbCBub3cgYmUKKyAgICAgIGxvZ2dlZDoK KyAgICAgIDwvcGFyYT4KKyAgICAgIAorICAgICAgPHByb2dyYW1saXN0aW5nPgorc2V0IHBn X2F1ZGl0LnJvbGUgPSAnYXVkaXRvcic7CisKK2dyYW50IHNlbGVjdCwgZGVsZXRlCisgICBv biBwdWJsaWMuYWNjb3VudAorICAgdG8gYXVkaXRvcjsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rp bmc+CisgICAgPC9zZWN0Mz4KKworICAgIDxzZWN0Mz4KKyAgICAgIDx0aXRsZT5FeGFtcGxl PC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgZXhhbXBsZSBvYmpl Y3QgYXVkaXQgbG9nZ2luZyBpcyB1c2VkIHRvIGlsbHVzdHJhdGUgaG93IGEKKyAgICAgICAg Z3JhbnVsYXIgYXBwcm9hY2ggbWF5IGJlIHRha2VuIHRvd2FyZHMgbG9nZ2luZyBvZiA8bGl0 ZXJhbD5TRUxFQ1Q8Lz4KKyAgICAgICAgYW5kIDxsaXRlcmFsPkRNTDwvPiBzdGF0ZW1lbnRz LiAgTm90ZSB0aGF0IGxvZ2dpbmcgb24gdGhlCisgICAgICAgIDxsaXRlcmFsPmFjY291bnQ8 Lz4gdGFibGUgaXMgY29udHJvbGxlZCBieSBjb2x1bW4tbGV2ZWwgcGVybWlzc2lvbnMsCisg ICAgICAgIHdoaWxlIGxvZ2dpbmcgb24gPGxpdGVyYWw+YWNjb3VudF9yb2xlX21hcDwvPiBp cyB0YWJsZS1sZXZlbC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAg IFNRTDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzZXQg cGdfYXVkaXQucm9sZSA9ICdhdWRpdG9yJzsKKworY3JlYXRlIHRhYmxlIGFjY291bnQKKygK KyAgICBpZCBpbnQsCisgICAgbmFtZSB0ZXh0LAorICAgIHBhc3N3b3JkIHRleHQsCisgICAg ZGVzY3JpcHRpb24gdGV4dAorKTsKKworZ3JhbnQgc2VsZWN0IChwYXNzd29yZCkKKyAgIG9u IHB1YmxpYy5hY2NvdW50CisgICB0byBhdWRpdG9yOworCitzZWxlY3QgaWQsIG5hbWUKKyAg ZnJvbSBhY2NvdW50OworCitzZWxlY3QgcGFzc3dvcmQKKyAgZnJvbSBhY2NvdW50OworCitn cmFudCB1cGRhdGUgKG5hbWUsIHBhc3N3b3JkKQorICAgb24gcHVibGljLmFjY291bnQKKyAg IHRvIGF1ZGl0b3I7CisKK3VwZGF0ZSBhY2NvdW50CisgICBzZXQgZGVzY3JpcHRpb24gPSAn eWFkYSwgeWFkYSc7CisKK3VwZGF0ZSBhY2NvdW50CisgICBzZXQgcGFzc3dvcmQgPSAnSEFT SDInOworCitjcmVhdGUgdGFibGUgYWNjb3VudF9yb2xlX21hcAorKAorICAgIGFjY291bnRf aWQgaW50LAorICAgIHJvbGVfaWQgaW50CispOworCitncmFudCBzZWxlY3QKKyAgIG9uIHB1 YmxpYy5hY2NvdW50X3JvbGVfbWFwCisgICB0byBhdWRpdG9yOworCitzZWxlY3QgYWNjb3Vu dC5wYXNzd29yZCwKKyAgICAgICBhY2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgZnJvbSBh Y2NvdW50CisgICAgICAgaW5uZXIgam9pbiBhY2NvdW50X3JvbGVfbWFwCisgICAgICAgICAg ICBvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50X2lkCisgICAgICAg IDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBMb2cgT3V0cHV0 OgorICAgICAgPC9wYXJhPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitBVURJVDogT0JK RUNULDEsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCxzZWxlY3QgcGFzc3dv cmQKKyAgZnJvbSBhY2NvdW50CitBVURJVDogT0JKRUNULDIsMSxXUklURSxVUERBVEUsVEFC TEUscHVibGljLmFjY291bnQsdXBkYXRlIGFjY291bnQKKyAgIHNldCBwYXNzd29yZCA9ICdI QVNIMicKK0FVRElUOiBPQkpFQ1QsMywxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2Nv dW50LHNlbGVjdCBhY2NvdW50LnBhc3N3b3JkLAorICAgICAgIGFjY291bnRfcm9sZV9tYXAu cm9sZV9pZAorICBmcm9tIGFjY291bnQKKyAgICAgICBpbm5lciBqb2luIGFjY291bnRfcm9s ZV9tYXAKKyAgICAgICAgICAgIG9uIGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFj Y291bnRfaWQKK0FVRElUOiBPQkpFQ1QsMywxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5h Y2NvdW50X3JvbGVfbWFwLHNlbGVjdCBhY2NvdW50LnBhc3N3b3JkLAorICAgICAgIGFjY291 bnRfcm9sZV9tYXAucm9sZV9pZAorICBmcm9tIGFjY291bnQKKyAgICAgICBpbm5lciBqb2lu IGFjY291bnRfcm9sZV9tYXAKKyAgICAgICAgICAgIG9uIGFjY291bnQuaWQgPSBhY2NvdW50 X3JvbGVfbWFwLmFjY291bnRfaWQKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9z ZWN0Mz4KKyAgPC9zZWN0Mj4KKworICA8c2VjdDI+CisgICAgPHRpdGxlPkZvcm1hdDwvdGl0 bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIEF1ZGl0IGVudHJpZXMgYXJlIHdyaXR0ZW4gdG8g dGhlIHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxpdHkgYW5kIGNvbnRhaW4KKyAgICAgIHRoZSBm b2xsb3dpbmcgY29sdW1ucyBpbiBjb21tYS1zZXBhcmF0ZWQgZm9ybWF0OgorCisgICAgICA8 bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgT3V0cHV0IGlzIGNvbXBsaWFudCBD U1YgZm9ybWF0IG9ubHkgaWYgdGhlIGxvZyBsaW5lIHByZWZpeCBwb3J0aW9uCisgICAgICAg ICAgb2YgZWFjaCBsb2cgZW50cnkgaXMgcmVtb3ZlZC4KKyAgICAgICAgPC9wYXJhPgorICAg ICAgPC9ub3RlPgorCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5BVURJVF9UWVBFPC8+ IC0gPGxpdGVyYWw+U0VTU0lPTjwvPiBvcgorICAgICAgICAgICAgPGxpdGVyYWw+T0JKRUNU PC8+LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+U1RB VEVNRU5UX0lEPC8+IC0gVW5pcXVlIHN0YXRlbWVudCBJRCBmb3IgdGhpcyBzZXNzaW9uLgor ICAgICAgICAgICAgRWFjaCBzdGF0ZW1lbnQgSUQgcmVwcmVzZW50cyBhIGJhY2tlbmQgY2Fs bC4gIFN0YXRlbWVudCBJRHMgYXJlCisgICAgICAgICAgICBzZXF1ZW50YWwgZXZlbiBpZiBz b21lIHN0YXRlbWVudHMgYXJlIG5vdCBsb2dnZWQuICBUaGVyZSBtYXkgYmUKKyAgICAgICAg ICAgIG11bHRpcGxlIGVudHJpZXMgZm9yIGEgc3RhdGVtZW50IElEIHdoZW4gbW9yZSB0aGFu IG9uZSByZWxhdGlvbgorICAgICAgICAgICAgaXMgbG9nZ2VkLgorICAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+U1VCU1RBVEVNRU5UX0lEPC8+IC0gU2Vx dWVudGlhbCBJRCBmb3IgZWFjaAorICAgICAgICAgICAgc3Vic3RhdGVtZW50IHdpdGhpbiB0 aGUgbWFpbiBzdGF0ZW1lbnQuICBGb3IgZXhhbXBsZSwgY2FsbGluZworICAgICAgICAgICAg YSBmdW5jdGlvbiBmcm9tIGEgcXVlcnkuICBTdWJzdGF0ZW1lbnQgSURzIGFyZSBjb250aW51 b3VzCisgICAgICAgICAgICBldmVuIGlmIHNvbWUgc3Vic3RhdGVtZW50cyBhcmUgbm90IGxv Z2dlZC4gIFRoZXJlIG1heSBiZSBtdWx0aXBsZQorICAgICAgICAgICAgZW50cmllcyBmb3Ig YSBzdWJzdGF0ZW1lbnQgSUQgd2hlbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlzIGxvZ2dl ZC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPkNMQVNT PC8+IC0gZS5nLiAoPGxpdGVyYWw+UkVBRDwvPiwKKyAgICAgICAgICAgIDxsaXRlcmFsPlJP TEU8Lz4pIChzZWUgPHhyZWYgbGlua2VuZD0iZ3VjLXBnYXVkaXQtbG9nIj4pLgorICAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+Q09NTUFORDwvPiAtIGUu Zy4gPGxpdGVyYWw+QUxURVIgVEFCTEU8Lz4sCisgICAgICAgICAgICA8bGl0ZXJhbD5TRUxF Q1Q8Lz4uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5P QkpFQ1RfVFlQRTwvPiAtIDxsaXRlcmFsPlRBQkxFPC8+LAorICAgICAgICAgICAgPGxpdGVy YWw+SU5ERVg8Lz4sIDxsaXRlcmFsPlZJRVc8Lz4sIGV0Yy4KKyAgICAgICAgICAgIEF2YWls YWJsZSBmb3IgPGxpdGVyYWw+U0VMRUNUPC8+LCA8bGl0ZXJhbD5ETUw8Lz4gYW5kIG1vc3QK KyAgICAgICAgICAgIDxsaXRlcmFsPkRETDwvPiBzdGF0ZW1lbnRzLgorICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAg ICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+T0JKRUNUX05BTUU8Lz4gLSBUaGUg ZnVsbHktcXVhbGlmaWVkIG9iamVjdCBuYW1lCisgICAgICAgICAgICAoZS5nLiBwdWJsaWMu YWNjb3VudCkuICBBdmFpbGFibGUgZm9yIDxsaXRlcmFsPlNFTEVDVDwvPiwKKyAgICAgICAg ICAgIDxsaXRlcmFsPkRNTDwvPiBhbmQgbW9zdCA8bGl0ZXJhbD5EREw8Lz4gc3RhdGVtZW50 cy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPlNUQVRF TUVOVDwvPiAtIFN0YXRlbWVudCBleGVjdXRlZCBvbiB0aGUgYmFja2VuZC4KKyAgICAgICAg ICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4K KyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFVzZSA8eHJlZiBsaW5rZW5kPSJn dWMtbG9nLWxpbmUtcHJlZml4Ij4gdG8gYWRkIGFueSBvdGhlciBmaWVsZHMgdGhhdAorICAg ICAgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHlvdXIgYXVkaXQgbG9nIHJlcXVpcmVtZW50cy4g IEEgdHlwaWNhbCBsb2cgbGluZQorICAgICAgcHJlZml4IG1pZ2h0IGJlIDxsaXRlcmFsPicl bSAldSAlZDogJzwvPiB3aGljaCB3b3VsZCBwcm92aWRlIHRoZSBkYXRlL3RpbWUsCisgICAg ICB1c2VyIG5hbWUsIGFuZCBkYXRhYmFzZSBuYW1lIGZvciBlYWNoIGF1ZGl0IGxvZy4KKyAg ICA8L3BhcmE+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5DYXZlYXRz PC90aXRsZT4KKyAgICAKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgICBPYmplY3QgcmVuYW1lcyBhcmUgbG9nZ2VkIHVu ZGVyIHRoZSBuYW1lIHRoZXkgd2VyZSByZW5hbWVkIHRvLgorICAgICAgICAgIEZvciBleGFt cGxlLCByZW5hbWluZyBhIHRhYmxlIHdpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIHJlc3Vs dDoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0FMVEVS IFRBQkxFIHRlc3QgUkVOQU1FIFRPIHRlc3QyOworICAgICAgICAgIAorQVVESVQ6IFNFU1NJ T04sMzYsMSxEREwsQUxURVIgVEFCTEUsVEFCTEUscHVibGljLnRlc3QyLEFMVEVSIFRBQkxF IHRlc3QgUkVOQU1FIFRPIHRlc3QyCisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAg ICA8L2xpc3RpdGVtPgorICAgICAgCisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJh PgorICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBjb21tYW5kIGxvZ2dlZCBt b3JlIHRoYW4gb25jZS4gIEZvciBleGFtcGxlLAorICAgICAgICAgIHdoZW4gYSB0YWJsZSBp cyBjcmVhdGVkIHdpdGggYSBwcmltYXJ5IGtleSBzcGVjaWZpZWQgYXQgY3JlYXRpb24gdGlt ZQorICAgICAgICAgIHRoZSBpbmRleCBmb3IgdGhlIHByaW1hcnkga2V5IHdpbGwgYmUgbG9n Z2VkIGluZGVwZW5kZW50bHkgYW5kIGFub3RoZXIKKyAgICAgICAgICBhdWRpdCBsb2cgd2ls bCBiZSBtYWRlIGZvciB0aGUgaW5kZXggdW5kZXIgdGhlIGNyZWF0ZSBlbnRyeS4gIFRoZQor ICAgICAgICAgIG11bHRpcGxlIGVudHJpZXMgd2lsbCBob3dldmVyIGJlIGNvbnRhaW5lZCB3 aXRoaW4gb25lIHN0YXRlbWVudCBJRC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0 aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBB dXRvdmFjdXVtIGFuZCBBdXRvYW5hbHl6ZSBhcmUgbm90IGxvZ2dlZCwgbm9yIGFyZSB0aGV5 IGludGVuZGVkIHRvIGJlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3QyPgorCisgIDxzZWN0Mj4KKyAgICA8dGl0 bGU+QXV0aG9yczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIEFiaGlqaXQgTWVub24t U2VuIDxlbWFpbD5hbXNAMm5kUXVhZHJhbnQuY29tPC9lbWFpbD4sIElhbiBCYXJ3aWNrIDxl bWFpbD5pYW5AMm5kUXVhZHJhbnQuY29tPC9lbWFpbD4sIGFuZCBEYXZpZCBTdGVlbGUgPGVt YWlsPmRhdmlkQHBnbWFzdGVycy5uZXQ8L2VtYWlsPi4KKyAgICA8L3BhcmE+CisgIDwvc2Vj dDI+Cis8L3NlY3QxPgo= --------------010008090907020703080501-- --hegJUTBRllDvNjL5vvUaBo6JUSisFGCwJ Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJVOTihAAoJEIA2uIJQ5SFAvnAQAKvJK7jV4jqkVYgSkk7uuou3 7VPx6th8PVMEAxbObtbd+ly4gnl5tMF5eSLM786hxtPXJMKN5hl6OKUvIPFjcM49 I93BpUMhbJMZJNvBgscBztAWzF60tym/tWbZ64bgn0cTNf1UHI9woL6R3ISuOn4M i5wp3mXOr4ASj8vwBCXc3RDuEiVnI1nD+HABmb+jnu0LH4pfoeUO4ZtVESuBpejB m/tjK01ZQMBziabo3WqGiZvS0rVjiT81J/TRP7eCKhLDaD7viZraBoqqDvTDuDtR lgLdb24PZjg2k9Ruh9+s/Puu8XtHxvcJoIep6hA47klKKeqUpWS1FXPth2XnwOrr UQ53u5ukbciRp9W3if4TPpLOnoVbL+jT+9QkQKux+Fgj5QLbPaIe/MnkfqZjNBvM upHEB29F7EwV3RMbxodzIqzPyDrqY9LblK7xQ+LwwdASoqrxlx2N999I8NIAr7RO 7AOnezTQnJ0L46J7fWK2jzShb64BNuq9ZDO6mpYF1+hNB5S1Yv390WLTYdP0F9dl tb9xXPBSrX4uUeRWj0V/FHe3wc+IrvdKa+p3cQvkqRRAfcAyQxJvVyv9JbzoW6zW hR3sJwsdy76ETm+pqnptX5jPjxFd98Eb65T7KxRXBgZUTW66CdlDAZ5ab6/iJ7b5 g/oMb/K0mYJ1ZvLSNzPY =o99W -----END PGP SIGNATURE----- --hegJUTBRllDvNjL5vvUaBo6JUSisFGCwJ--